软件包管理
Linux中软件安装通常有两种形式:
一是源码安装(Tarball);
一是使用软件包软件包管理器;
在Linux发行版中,几乎每一个发行版都有自己的软件包管理器。常见的有:
管理deb软件包的dpkg以及它的前端apt(使用于Debian、Ubuntu);
管理rmp软件包的rpm以及它的前端yum(使用于RedHat、Fedora、CentOS)、前端ZYpp(使用于openSUSE)、前端urpmi(使用于Mandriva Linux、Mageia)等。
RPM软件包管理
软件包管理器可以将二进制程序、库文件、配置文件和帮助文件打包成一个文件,生成数据库并追踪所安装的每一个文件;其核心功能是制作软件包,安装、卸载、升级、查询、校验、重建数据库、验证数据包等。
RPM是一个开放的软件包管理系统,最初的全称是Red Hat Package Manager,现在是Linux Standard Base(LSB)中采用的包管理系统。
RPM默认安装路径
二级制程序 /usr/bin,sbin
库文件 /usr/lib
配置文件 /etc
帮助文件 /usr/share/doc,man
RPM软件包格式
name-version.release.arch.rpm
name:软件包名称,包括主包名与分包名
version:软件包的版本号
release:软件包的发行号
arch:主机平台,noarch表示此包可以安装到任意平台
rpm:文件扩展名
rpm命令格式
安装(install)
rpm -ivh PACKAGE_FILE...
OPTIONS:
-i:install安装
-v:显示详细安装过程
-h:显示安装进度,以#表示,每个#代表2%
-vv:显示更详细的安装信息
--nodeps:忽略依赖关系
--replacepkgs:重新安装,替换原有安装
--force:强行安装,可以实现重装或降级
--test:测试安装,可找出是否有依赖问题
查询(query)
已安装软件
rpm -qa
rpm -q[licdR] PACKAGE_NAME
rpm -qf FILE_NAME
未安装软件
rpm -qp[licdR] PACKAGE_FILE
OPTIONS:
-q:query查询
-qa:显示所有已安装的软件(all)
-qi:显示该软件的详细信息(information)
-ql:显示该软件所有的文件与目录所在的完整文件名(list)
-qc:显示该软件的所有配置文件
-qd:显示该软件的所有帮助文件
-qR:显示与该软件有关的依赖软件所含的文件
-qf:查询该文件属于哪一个已安装的软件
-qp[licdR]:查询未安装的软件包信息
升级与更新(Upgrade/Freshen)
若有旧版本,则升级至新版本;若未安装,则安装
rpm -Uvh PACKAGE_FILE
若有旧版本,则升级至新版本;若未安装,则不安装
rpm -Fvh PACKAGE_FILE
验证与数字证书(Verify/Signature)
验证是使用/var/lib/rpm下的数据库内容来比较目前Linux系统环境下的所有软件文件。
rpm -Va
rpm -V PACKAGE_NAME
rpm -Vp PACKAGE_FILE
rpm -Vf FILE_NAME
OPTIONS:
-V:后面加的是软件名称,若该软件所含的文件被改动过,才会显示出来
-Va:显示目前系统上面所有可能被改动过的文件
-Vp:后面加的是RPM文件的文件名,显示该软件内可能被改动过的文件
-Vf:显示某个文件是否被改动过
若没有显示任何信息,则该软件中的文件没有被改动过;
若有信息显示,则文件被改动过,显示的是被改动的信息类型:
SM5DLUGT �~ filename
S:file Size differs
M:Mode differs (includes permissions and file type)
5:MD5 sum differs
D:Device major/minor number mismatch
L:readLink(2) path mismatch
U:User ownership differs
G:User ownership differs
T:mTime differs
�~:指文件类型
c:configuration file
d:documentation file
g:ghost file (i.e. the file contents are not included in the package payload)
l:license file
r:readme file
数字证书是通过证书比对,来检查软件包的来源合法性与软件完整性。
导入密钥文件
rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-5
验证
rpm -K PACKAGE_FILE
dsa、gpg:验证来源合法性,即签名,用--nosignature略过此项
sha1、md5:验证软件包完整性,用--nodigest略过此项
卸载(erase)
rpm -e PACKAGE_NAME
卸载时可能会出现库文件的依赖关系导致卸载不成功,可以将依赖的文件全部删除或使用--nodeps强制删除,但是这会导致用到这些库的软件无法运行!
重建数据库
rpm --rebuilddb
初始化数据库,没有才重建,有就不用建立
rpm --initdb
实例:
安装本地软件包
注:安装时有可能产生依赖关系
[root@localhost CentOS]# rpm -ivh zsh-4.2.6-9.el5.i386.rpm warning: zsh-4.2.6-9.el5.i386.rpm: Header V3 DSA signature: NOKEY, key ID e8562897 Preparing... ########################################### [100%] 1:zsh ########################################### [100%]
查询
系统上所有包的数量
[root@localhost CentOS]# rpm -qa | wc -l 492
显示"zsh"的所有配置文件
[root@localhost CentOS]# rpm -qc zsh /etc/skel/.zshrc /etc/zlogin /etc/zlogout /etc/zprofile /etc/zshenv /etc/zshrc
显示"zsh"的依赖关系
[root@localhost CentOS]# rpm -qR zsh /bin/sh /bin/sh /bin/sh /sbin/install-info config(zsh) = 4.2.6-9.el5 fileutils grep libc.so.6 libc.so.6(GLIBC_2.0) libc.so.6(GLIBC_2.1) libc.so.6(GLIBC_2.1.3) libc.so.6(GLIBC_2.2) libc.so.6(GLIBC_2.3) libc.so.6(GLIBC_2.3.4) libc.so.6(GLIBC_2.4) libcap libdl.so.2 libdl.so.2(GLIBC_2.0) libdl.so.2(GLIBC_2.1) libm.so.6 libm.so.6(GLIBC_2.0) libnsl.so.1 libtermcap.so.2 rpmlib(CompressedFileNames) <= 3.0.4-1 rpmlib(PayloadFilesHavePrefix) <= 4.0-1 rtld(GNU_HASH)
显示"zsh"的详细信息
[root@localhost CentOS]# rpm -qi zsh Name : zsh Relocations: (not relocatable) Version : 4.2.6 Vendor: CentOS Release : 9.el5 Build Date: Wed 02 Oct 2013 03:36:59 AM CST Install Date: Sun 13 Dec 2015 06:59:59 AM CST Build Host: builder17.centos.org Group : System Environment/Shells Source RPM: zsh-4.2.6-9.el5.src.rpm Size : 3565812 License: BSD Signature : DSA/SHA1, Wed 02 Oct 2013 08:39:49 AM CST, Key ID a8a447dce8562897 URL : http://zsh.sunsite.dk/ Summary : A powerful interactive shell Description : The zsh shell is a command interpreter usable as an interactive login shell and as a shell script command processor. Zsh resembles the ksh shell (the Korn shell), but includes many enhancements. Zsh supports command line editing, built-in spelling correction, programmable command completion, shell functions (with autoloading), a history mechanism, and more.
校验
[root@localhost CentOS]# rpm -K zsh-4.2.6-9.el5.i386.rpm zsh-4.2.6-9.el5.i386.rpm: (SHA1) DSA sha1 md5 (GPG) NOT OK (MISSING KEYS: GPG#e8562897)
[root@localhost CentOS]# rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-5 [root@localhost CentOS]# rpm -K zsh-4.2.6-9.el5.i386.rpm zsh-4.2.6-9.el5.i386.rpm: (sha1) dsa sha1 md5 gpg OK
卸载
[root@localhost CentOS]# rpm -e zsh [root@localhost CentOS]# rpm -q zsh package zsh is not installed
YUM软件包管理
YUM是Yellow dog Updater,Modified的简称,其宗旨是自动化升级、安装/移除RPM包、收集RPM包的相关信息、检查依赖性并自动提示用户解决。YUM的关键之处在于要有可靠的Repository,顾名思义,这是软件的仓库,它可以是HTTP或FTP站点,也可以是本地软件池,但必须是包含RPM包的各种信息,包括描述、功能、提供的文件、依赖性等。正是收集了这些header并加以分析,才能自动化的完成余下的任务。
yum的命令格式
yum [options] [command] [package ...]
command:
install package1 [package2] [...]安装
update [package1] [package2] [...]升级
update-to [package1] [package2] [...]升级至指定版本
remove | erase package1 [package2] [...]卸载
list [all|available|installed|updates]列表
info [...]详细信息
provides | whatprovides feature1 [feature2] [...]搜索
search string1 [string2] [...]
clean [ packages | headers | metadata | dbcache | all ]清楚缓存
deplist package1 [package2] [...]显示软件依赖信息
repolist [all|enabled|disabled]显示repo列表
groupinstall group1 [group2] [...]安装指定软件组中的软件包
groupupdate group1 [group2] [...]
grouplist [hidden] [groupwildcard] [...]
groupremove group1 [group2] [...]
groupinfo group1 [...]
options:
-y:自动提供yes响应
--installroot=/some/path:指定安装路径
yum仓库的元数据文件repodata
repodata数据库中的文件主要是XML格式,精确描述一个rpm包的详细信息,如依赖关系,包含文件、校验信息。目前,这个格式被apt-rpm、smartpm、red carpet和yum支持。通常有以下几个文件:
primary.xml.gz:所有rpm包的列表,依赖关系,每个rpm安装生成的文件列表;
filelist.xml.gz:当前仓库中所有rpm包的所有文件信息;
other.xml.gz:额外信息,如rpm包的修改日志;
repomd.xml:记录的是以上三个文件的时间戳和校验和;
comps*.xml:rpm包分组信息
yum的配置文件/etc/yum.conf
[main] cachedir=/var/cache/yum 指定YUM存储缓存和数据库文件的默认位置 keepcache=0 YUM成功安装软件后是否保留缓存的头文件和软件包 debuglevel=2 指定排错级别(0-10) logfile=/var/log/yum.log 指定YUM的日志文件 distroverpkg=redhat-release tolerant=1 YUM是否容忍命令行发生与软件包有关的错误 exactarch=1 是否升级与已安装软件包CPU体系结构一致的包 obsoletes=1 是否升级已经过时的软件包 gpgcheck=1 是否启用软件仓库中软件的GPG签名验证 plugins=1 是否启用插件 bugtracker_url=http://bugs.centos.org/yum5bug # Note: yum-RHN-plugin doesn't honor this. metadata_expire=1h installonly_limit = 5 安装内核类型软件包的数量 # PUT YOUR REPOS HERE OR IN separate files named file.repo # in /etc/yum.repos.d
设置yum源
CentOS 5.11的默认YUM源定义文件放在/etc/yum.repos.d/目录下,用户可以自行定义任意可以使用的YUM源,但文件的扩展名必须是*.repo。
[root@localhost yum.repos.d]# vim /etc/yum.repos.d/CentOS-Base.repo [base] name=CentOS-$releasever - Base mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=os baseurl=http://mirror.centos.org/centos/$releasever/os/$basearch/ gpgcheck=1 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-5 #released updates
以上面的基础容器为例,介绍*.repo文件的配置语法:
[base]:[]中填写YUM源唯一的ID,可以为任意字符串;
name=:指定YUM源名称,可以为任意字符串;
mirrorlist=:指定镜像站点目录;
baseurl=:指定YUM源的URL地址,可以是如下几种类型:
http://用于指定远程HTTP协议的源;
ftp://用于指定远程FTP协议的源;
file:///用于本地镜像或NFS挂载文件系统;
enabled=:是否激活该YUM源(0代表禁用,1代表激活);
gpgcheck=:安装软件时是否检查签名(0代表禁用,1代表激活);
gpgkey=:检查签名的秘钥文件。
设置本地yum源(使用系统光盘作为yum源)
挂载光盘
[root@localhost ~]# mount /dev/cdrom /media/ mount: block device /dev/cdrom is write-protected, mounting read-only
配置本地YUM源文件
注:让其他YUM源文件失效
[root@localhost yum.repos.d]# vim /etc/yum.repos.d/media.repo [media] name=CentOS_5.11 baseurl=file:///media enabled=1 gpgcheck=0 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-5
清除缓存
[root@localhost yum.repos.d]# yum clean all Loaded plugins: fastestmirror, security Cleaning up Everything Cleaning up list of fastest mirrors
缓存本地YUM源包信息
[root@localhost yum.repos.d]# yum makecache
显示可用的YUM仓库
[root@localhost yum.repos.d]# yum repolist all ...(中间省略)... repo id repo name status base CentOS-5 - Base enabled: 0 contrib CentOS-5 - Contrib disabled extras CentOS-5 - Extras enabled: 0 extras-source CentOS-5 - Extras Sources disabled fasttrack CentOS-5 - fasttrack disabled media CentOS_5.11 enabled: 0 updates CentOS-5 - Updates enabled: 0 updates-source CentOS-5 - Updates Sources disabled
使用本地YUM源安装软件
[root@localhost yum.repos.d]# yum --enablerepo=media install httpd
配置外网YUM源(以EPEL源为例)
EPEL(Extra Package for Enterprise Linux)是由Fedora社区打造(http://fedoraproject.org/wiki/EPEL),为RHEL及衍生发行版(比如CentOS、Scientific Linux等)提供高质量软件包的项目。
[root@localhost mnt]# rpm -ivh [root@localhost ~]# sed -i -e "s/enabled = 1/enabled = 0/g" /etc/yum.repos.d/epel.repo [root@localhost ~]# yum --enablerepo=epel install [PACKAGE]
yum使用技巧
创建YUM源
当我们收集的软件越来越多时,有必要将这个软件汇总并创建属于自己的yum源,最终实现软件的搞笑、集中管理。实现步骤如下:
安装createrepo;
将所有软件保存在某个目录下,如/mysoft/;
运行createrepo /mysoft。
YUM变量
$releasever 系统发行版本号
$arch CPU架构
$basearch 系统架构
$YUM0-9 使用shell对应的0-9个同名变量替换
源码编译安装软件
使用源码管理软件所需的基础软件
gcc或cc等c语言编译程序(compiler)
make及autoconfig等软件
kernel提供的library以及相关的include文件
CentOS 5.11下创建编译环境,可以安装"Development Tools"和"Development Libraries"
[root@localhost ~]# yum -y groupinstall "Development Tools" "Development Libraries"
源码安装的一般步骤:
./configure
建立Makefile文件,可加--prefix=PREFIX等选项,具体信息可以参考该目录下的README和INSTALL相关的文件;
makeclean
make会读取Makefile中关于clean的工作,这个步骤不一定有;
make
make会依据Makefile中的默认工作进行编译的行为;
make install
通常这就是最后安装步骤了,make会依据Makefile文件里关于install的选项,将上一个步骤所编译完成的数据安装到默认目录中,就此安装完成。
实例(以安装tengine源码包为例)
解压缩
[root@localhost ~]# tar -zxvf tengine-1.4.2.tar.gz -C /usr/src [root@localhost ~]# cd /usr/src/engine-1.4.2 [root@localhost tengine-1.4.2]# ls AUTHORS.te CHANGES CHANGES.ru conf contrib html man README.markdown tests auto CHANGES.cn CHANGES.te configure docs LICENSE README src THANKS.te [root@localhost tengine-1.4.2]# ./configure --prefix=/usr/local/tengine/ --conf-path=/etc/tengine/tengine.conf ...(中间省略)... checking for openat(), fstatat() ... found checking for PCRE library ... not found checking for PCRE library in /usr/local/ ... not found checking for PCRE library in /usr/include/pcre/ ... not found checking for PCRE library in /usr/pkg/ ... not found checking for PCRE library in /opt/local/ ... not found ./configure: error: the HTTP rewrite module requires the PCRE library. You can either disable the module by using --without-http_rewrite_module option, or install the PCRE library into the system, or build the PCRE library statically from the source with nginx by using --with-pcre=<path> option. [root@localhost tengine-1.4.2]# yum install pcre-devel [root@localhost tengine-1.4.2]# ./configure --prefix=/usr/local/tengine/ --conf-path=/etc/tengine/tengine.conf [root@localhost tengine-1.4.2]# make [root@localhost tengine-1.4.2]# make install [root@localhost tengine-1.4.2]# /usr/local/tengine/sbin/nginx [root@localhost tengine-1.4.2]# netstat -tnlp Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN 2876/portmap tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 31522/nginx tcp 0 0 0.0.0.0:978 0.0.0.0:* LISTEN 2916/rpc.statd tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 3213/sshd tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 3251/sendmail tcp 0 0 :::22 :::* LISTEN 3213/sshd
源码安装后通常要进行以下修改
修改PATH环境变量,以能够识别此程序的二进制文件路径;
修改/etc/profile文件;
在/etc/profile.d目录下建立一个以.sh为扩展名的文件,定义export PATH=$PATH:/path_to_somewhere;
默认情况下,系统库文件的路径为/lib、/usr/lib,要增添额外搜寻路径,在/etc/ld.so.conf.d中创建以.conf为扩展名的文件,而后把要增添的路径直接写至此文件中;
命令ldconfig [-v]通知系统重新搜索库文件
-v:显示重新搜索库的过程
头文件是要输出给系统的,默认在/usr/include目录下,要增添头文件搜寻路径,可使用链接进行,如:
将/usr/local/tengine/include链接至/usr/include中,可以
ln -s /usr/local/tengine/include/* /usr/include或
ln -s /usr/local/tengine/include /usr/include/tengine
man文件默认安装在/usr/share/man目录下
man -M /path_to_man_dir COMMAND或
在/etc/man.config中添加一条MANPATH