一、软件包管理简介
1)软件包分类
1、源码包
优点:
- 开源, 如果有足够的能力, 可以修改源代码
- 可以*选择所需的功能
- 软件是编译安装, 所以更加适合自己的系统, 更加稳定也效率更高
- 卸载方便
缺点:
- 安装过程步骤较多, 尤其安装较大的软件集合时( 如LAMP环境搭建Linux Apache MySql Php ), 容易出现拼写错误
- 编译过程时间较长, 安装比二进制安装时间长
- 因为是编译安装, 安装过程中一旦报错新手很难解决
注:
①编译, 是将字符编码遵循 ASCII 转变为机器语言(0101)的过程。
② 反编译, 编译, 在理论上是不可逆转, 在编译过程中遵循一定规则, 而在反编译时难免造成代码损失, 而无法完全破解。
③windows 中的程序都是经过编译的, 看不到源代码, linux 中源码包是可以看到源代码, 安装时现编译安装。
2、二级制包( RPM包, 系统默认包 )
优点:
- 包管理系统简单,只通过几个命令就可以实现包的安装,升级,查询和卸载
- 安装速度比源码包快
缺点:
- 经过编译,不再可以看到源代码
- 功能选择不如源代码包灵活
- 依赖性(就是装A的时候依赖B,得先装B才行)
3、脚本安装包
所谓的脚本安装包,就是把复杂的软件包安装过程写成了程序脚本,初学者可以执行程序脚本实现一键安装。但实际安装的还是源码包和二进制包。例如LAMP一键安装包。
优点:安装简单、快捷
缺点:完全丧失自定义性
注:在redhat中二进制包后缀是rpm,在ubuntu二进制包的后缀是deb。但是它们都是二进制包。
二、rpm命令管理
1) RPM包命名规则
1、来源
挂载光盘
[root@localhost ~]# mkdir /mnt/cdrom
[root@localhost ~]# mount /dev/sr0 /mnt/cdrom/
[root@localhost ~]# cd /mnt/cdrom
[root@localhost cdrom]# ls
[root@localhost cdrom]# cd Package
# RPM 包在系统光盘的Packages目录中
2、命名规则
例如:httpd-2.2.15-15.el6.centos.1.i686.rpm
①httpd //软件包名;
②2.2.15 //软件版本;
③15 //软件发布的次数;
④el6.centos //适合的linux平台;
⑤i686 //适合的硬件平台;
⑥rpm //rpm包扩展名;
3、RPM包依赖性:
①树形依赖:a→b→c
②环形依赖:a→b→c→a
③模块依赖:模块依赖,查询网站:www.rpmfind.net(安装rpm包出现报错,需要依赖libodbcinst.so.2。如果是以“.so.数字”结尾的,则表示是一个库文件,该库文件是存放在其它某一个安装包中,或者查询该库文件存放在哪个安装包中可通过网址“www.rpmfind.net”查询。因为依赖复杂所以推出yum在线安装。
2)安装命令
1、包全名和包名
包全名 : 操作的包是未安装过该软件包时使用包全名,而且要使用绝对路径
# 安装或升级时
包名 : 操作已经安装的软件包时使用包名,是搜索 /var/lib/rpm 中的数据库
# 卸载或查询时
2、RPM 安装
rpm -ivh 包全名
选项:
-i (install) : 安装
-v (verbose) : 显示详细信息
-h (hash) : 显示进度
--nodeps 不检测依赖性(实际的工作中是绝不允许用的,必须解决依赖性)
注意事项:
安装时会提示两行:Preparing...100% : 表示准备完毕;第二行...100% : 表示安装成功。
由于rpm 安装的依赖性过于繁琐, 所以大部分安装时使用yum进行安装。
yum只能实现安装和卸载,是不能查询和校验已经安装好的rpm包, 只有rpm命令可以查询和校验。
yum 安装同样也是对rpm 包进行安装, 不存在yum包。
3)升级与卸载
1、升级命令
rpm -Uvh 包全名(要升级到的软件版本),如果没有安装这个软件的任何版本,这个命令可以代替rpm -ivh。
选项:-U(upgrade)升级
2、卸载命令
rpm -e 包名(比如Httpd,不需要包全名),这个命令不同于安装和升级,它可以在任何目录运行,原理是去/var/lib/rpm目录中的数据库(如__db0)中查找对应的软件包(已经安装过的rpm包都在这些数据库中),然后卸载。
选项:
-e(erase)卸载
--nodeps不检查依赖性
3、--nodeps这个选项不管是在安装和卸载的时候,最好都不要使用。
4、rpm安装包安装的位置是由软件包开发者决定的,安装后的位置会非常凌乱,
所以最好是使用rpm -e命令卸载。
相对于二进制安装,源码安装是指定安装目录了,卸载的时候只需要删除对应的目录就可以完全的卸载,不留一点残余。
4)RPM包查询
1、查询是否安装
rpm -q 包名
# 查询包是否安装
-q:查询(query)
rpm -qa
# 查询所有已经安装的RPM包
# rpm -qa | grep httpd(grep后跟正则表达式,find后跟通配符)
-a (all) : 所有
2、查询软件包详细信息
rpm -qi 包名
-i:查询软件信息(information)
-p:查询未安装包信息(package)
rpm -qip 包全名
# 有时遇到问题, 可根据未安装包信息中所提供的官方网站进行查询资料。
3、查询包中文件安装位置
rpm -ql 包名
-l (list) : 列表
-p (package) : 查询未安装包信息
例如:[root@localhost ~]# rpm -qlp 包全名
# 可查看包作者欲将包安装的位置
4、RPM 包默认安装位置
RPM 包默认安装路径 |
|
/etc/ |
配置文件安装目录 |
/usr/bin/ |
可执行的命令安装目录 |
/usr/lib/ |
程序所使用的函数库保存位置 |
/usr/share/doc/ |
基本的软件使用手册保存位置 |
/usr/share/man/ |
帮助文件保存位置 |
5、查询系统文件属于哪个 RPM 包
rpm -qf 系统文件名
选项:
-f:查询系统文件属于哪个软件包(file)
# 该文件必须是通过RPM包安装的。
6、查询软件包的依赖性
rpm -qR 包名
-R (requires) : 查询软件包的依赖性
-p (package) : 查询未安装包的信息
5)RPM包校验
1、rpm -V 已安装的包名
选项:
-V (verify) : 校验指定RPM包中的文件
执行 rpm -V httpd 后, 无任何提示, 代表该文件没有被做任何修改
# 判断本地的apache 与官方给出的是否一致, 从而判断是否被人修改
修改文件 /etc/httpd/conf/httpd.conf,在注释行添加任意内容后, 再次执行
提示 : S.5.....T. c /etc/httpd/conf/httpd.conf
2、验证内容中的8个信息的具体内容如下:
S : 文件大小是否改变
M : 文件的类型或文件的权限( rwx )是否被改变
5 : 文件MD5 校验和是否改变(可以看成文件内容是否改变 )
D : 设备的主从代码是否改变
L : 文件路径是否改变
U : 文件的属主( 所有者 ) 是否改变
G : 文件的属组是否改变
T : 文件的修改时间是否改变
3、验证内容中的文件类型
c (config file) : 配置文件
d (documentation) : 普通文档
g (ghost file) : "鬼"文件, 很少见, 就是该文件不应该被这个RPM包包含
L (license file) : 授权文件
r (read me) : 描述文件
4、MD5校验
# 用来校验文件的完整性(文件内容是否被改变)
# 例如, 在官网下载的游戏, 官方会给出MD5校验码, 将下载的游戏通过专用
的MD5校验工具校验后生成另一份MD5校验码, 对比两份校验码是否一致, 不一致则说明,下载的文件可能丢包, 可能文件损坏, 可能被其他人动过手脚一直木马等。
5、RPM 包中文件提取
rpm2cpio 包全名 | cpio -idv .文件绝对路径
-rpm2cpio(将rpm包转换为cpio格式的命令)
-cpio(是一个标准工具,它用于创建软件档案文件和从档案文件中提取文件)
# 由于 cpio 命令自身不知道从何处来提取文件, 所以需要用管道符来告知提取的位置
[root@localhost ~]# cpoi 选项 < [文件|设备]
选项:
-i : copy-in模式, 还原
-d : 还原时自动新建目录
-v : 显示还原过程
例如:
rpm -qf /bin/ls
# 查询ls 命令属于哪个软件包
mv /bin/ls /tmp/
# 造成ls命令误删除假象
rpm2cpio /mnt/cdrom/Packages/coreutils-8.4-19.el6.i686.rpm | cpio -idv ./bin/ls
# 切换至家目录后, 提取RPM包中ls命令到当前目录的 /bin/ls 下
cp /root/bin/ls /bin/
# 把ls 命令复制到/bin/目录, 修复文件丢失
三、yum在线安装
1)yum源文件
1、好处 : 将所有软件包放在官方服务器上, 当进行yum在线安装时, 可以自动解
决依赖性问题.
2、redhat 的yum 在线安装需要付费。
3、源文件
# vi /etc/yum.repos.d/CentOS-Base.repo
[base] : 容器名称, 一定要放在[]中
name : 容器说明, 可以自己随便写
mirrorlist : 镜像站点, 这个可以注释掉
baseurl : 我们的yum源服务器的地址,默认是CentOS官方的yum源服务器,
是可以使用的,如果你觉得慢可以改成国内的yum源地址。
enabled : 此容器是否生效, 如果不写或写成enable=1都是生效,写成
enable=0就是不生效
gpgcheck : 如果是1, 是指 RPM的数字证书生效, 如果是0, 则是不生效
gpgkey : 数字证书的公钥文件保存位置. 不用修改
2)光盘搭建yum源
1、挂载光盘
mkdir -p /mnt/cdrom
# 建立挂载点
mount -t iso9660 /dev/sr0 /mnt/cdrom
# 挂载光盘
2、使网络yum源失效
cd /etc/yum.repos.d/
# 进入 yum源目录
mv CentOS-Base.repo CentOS-Base-repo.bak
# 修改yum源文件后缀名, 使其失效
3、使光盘 yum源生效
vim CentOS-Media.repo
[c6-media]
name=CentOS-$releasever - Media
baseurl=file:///mnt/cdrom #地址为你自己的光盘挂载地址
# =file:///media/cdrom/
# =file:///media/cdrecorder/ #注释这两个不存在的地址需顶格注释
gpgcheck=1
enabled=1 #把enabled=0 改为enabled=1, 让这个yum源配置文件生效
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6
3)yum命令
1、查询
yum list
# 查询所有可用软件包列表
yum search 关键字
# 搜索服务器上所有和关键字相关的包
2、安装
yum -y install 包名
选项:
install : 安装
-y : 自动回答yes
例如:yum -y install gcc
# yum 安装只写包名即可
# 由于所有软件包被搭建在yum服务器中,此时只需要告知包名, yum服务器即可找到
# gcc 为c 语言编译器
3、升级
# 常规升级能省则省,因为其需要付出相当的代价(重启服务器而踢掉已连接用
户,更新软件包非稳定、致命等问题)
yum -y update 包名
选项:
update : 升级
-y : 自动回答yes
yum -y update(慎用)
该命令将更新系统内所有包, 包括内核, 而有的版本内核更新后需要手动配置才
能正常启动, 否则将导致系统崩溃。CnetOS 6.3 之前该命令最好不要使用
4、卸载
yum -y remove 包名
remove : 卸载
-y : 自动回答yes
5、服务器使用最小化安装, 用什么软件安装什么,尽量不要卸载 -- 《来自多年做
服务器管理人员的忠告》
6、由于软件包卸载时需要同时卸载其依赖包, 而该依赖包有可能也同样被系统所依
赖, 卸载将导致系统崩溃
# rpm卸载有依赖提醒, yum 卸载没有依赖提醒 - 慎用
7、yum 软件组管理命令
yum grouplist
# 列出所有可用的软件组列表
yum groupinstall 软件组名
# 安装指定软件组, 组名可以由grouplist查询出来
# 注 : 软件组名必须是英文
查看英文组名方式一 : 不使用远程工具, 而使用真机执行命令即可查看英文
查看英文组名方式二 : LANG=en_US 将语言系从中文转为英文,
LANG=zh_CN.utf8 该方法为临时修改
# 永久修改语言, 需要修改配置文件 /etc/sysconfig/i18n
yum groupremove 软件组名
# 卸载指定软件组
四、源码包安装
1) 源码包和RPM包的区别
1、 区别
安装之前的区别:概念上的区别(前面第一大点所讲的)
安装之后的区别:安装位置不同
2、 RPM包安装位置
是安装在默认位置中
RPM 包默认安装路径 |
|
/etc/ |
配置文件安装目录 |
/usr/bin/ |
可执行的命令安装目录 |
/usr/lib/ |
程序所使用的函数库保存位置 |
/usr/share/doc/ |
基本的软件使用手册保存位置 |
/usr/share/man/ |
帮助文件保存位置 |
#以上安装路径是示例,并不是所有RPM包都安装在此路径下,建议按以上路
径安装。同时以上安装路径是由写RPM包作者决定,并不是安装者所决定。
#RPM支持指定安装位置
[root@localhost ~]# rpm --help | grep prefix
--prefix=<dir> relocate the package to <dir>,if
3、 源码包安装位置
安装在指定位置当中,一般是/usr/local/软件名/
#因源码包没有卸载命令,建议安装在指定目录下,方便卸载,卸载时直接删除目录即可。
4、 安装位置不同带来的影响
RPM包安装的服务可以使用系统服务管理命令(service)来管理,例如RPM包安装的apache的启动方法是:
/etc/rc.d/init.d/httpd start(绝对路径启动)
service httpd start(服务命令启动)
#linux标准启动方法就是用绝对路径启动,服务命令启动方法是redhat系列专有命令。
#如果RPM包指定安装位置,就无法进行以上两种的启动方式,不会安装在etc目录下。
#所有的RPM包程序是可以通过service命令来启动,而源码包程序不可以。原因是service命令搜索的就是/etc/rc.d/init.d这个目录,而源码包是不会把启动程序装在此目录下的。所以只能用绝对路径进行服务的管理,如:
/usr/local/apache2/bin/apachectl start
2) 源码包安装过程
1、 安装准备
① 由于源码都是c语言写的,所以要先安装c语言编译器:gcc
[root@localhost ~]# rpm -qa | grep gcc
② 从官方网站下载源码包,若是下载到了windows上面,可以使用winSCP传到linux上。
注:若已安装了二进制包(RPM包),则源码包也是可以继续安装的,因为两者安装目录不一样。但是,并不建议这样做,因为端口会冲突。
③ 如果软件是给成千上万客户端访问的,装源码包效率更高,如apache;如果是底层支持软件,如:gcc这样的软件,用rpm包更简单,不会有过多用户访问,效率问题不明显。
2、 安装注意事项
① 源代码保存位置:/usr/local/src/
② 软件安装位置:/usr/local/
③ 如何确定安装过程报错:
#安装过程停止
#并出现error、warning或no的提示
3、 源码包安装过程
① 下载源码包
② 解压缩下载的源码包
③ 进入解压缩目录
- ./configure 软件配置与检查
-定义需要的功能选项
-监测系统环境是否符合安装要求
-把定义好的功能选项和检测系统环境的信息都写入Makefile文件,
用于后续的编辑
例如:[root@localhost ~]# ./configure --prefix=/usr/local/apache2
#指定安装在/usr/local/apache2目录下,apache2无需手工建立,安装完后自动建立。
- make编译(还是在当前目录)
make clean
#安装出错时执行这条命令,清除缓存重新编译。
- make install 编译安装(真正的安装成文件)。
#这步出错不仅要执行make clean命令,还要删除/usr/local/apache2目录。
- 编译完成之后进入/usr/local/apache2/bin/apachectl start启动服务
如何确定启动命令在/usr/local/apache2/bin/apachectl此目录下?
#在源码包目录下有一个INSTALL文件,打开此文件可以看到安装步骤。
五、脚本安装包
1) 定义
通过写一个脚本来安装源码包和RPM包。
2) Nginx服务器
1、 Nginx是一款轻量级的Web服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,由俄国公司在2004年发布。
2、 准备工作
① 关闭RPM包安装的httpd和MySQL
本节以安装LNMP1.0(http://lnmp.org/download.html)为例,所以需要先停止之前安装的apache和mysql服务(最好也将源码包安装的apache目录/usr/local/apache2删除),因为Nginx也要占用80端口。
② 保证yum源正常使用:可以使用【yum list】命令测试。(若是光盘yum源,记得挂载光盘)
③ 关闭SELinux和防火墙:
a、 永久关闭SELinux的方法:[root@localhost ~]# vi /etc/selinux/config
将【SELINUX=enforcing】改为【SELINUX=disabled】,然后重启系统即可。
④ 下载
http://lnmp.org/download.html(下载完整版之后拷贝到linux中)
⑤ 脚本一键安装包
[root@localhost ~]# wget -c http://soft.vpser.net/lnmp1.0-full.tar.gz
&& tar zxvf lnmp1.0-full.tar.gz && cd lnmp1.0-full && ./centos.sh
注:安装后,如果安装卡在了【php-fpm】那里,通常表示已安装成功,只是【php-fpm】那里卡住了(真实机少见,但虚拟机比较常见),解决的方法就是:使用命令【pkill -9 php-fpm】杀掉【php-fpm】进程,然后重新启动该进程【/etc/rc.d/init.d/php-fpm start】即可
3、 centos.sh脚本分析
所谓的一键安装包,实际上还是安装源码包与RPM包,只是把安装过程写成了脚本,便于初学者安装。
优点:简单、快速、方便
缺点:不能定义安装软件的版本;不能定义所需要的软件功能;源码包的优势
丧失。
#如今已经把centos.sh更新为install.sh。