Linux基础知识-4 Linux安装包管理
作者:田超凡
版权所有,转载请注明原作者,仿冒侵权必究法律责任
1、软件包分类
1、源码包
脚本安装包 (linux采用C语言开发,那么源码包大部分也是c写的包进行安装,这样源码包进行易报错,不推荐,
没有经过编译成机器语言(0、1二进制)的包,脚本安装包就是把源码包写一个安装界面,操作方便,
一般install.sh但是这种包不多).
二进制包(RPM包、系统默认包,把C语言源代码包经过编译成机器语言(01二进制)的包),
因此二进制包安装快,因为它是开发厂商已经编译好的,安装的时候不需要再编译,所以速度快,
缺点,看不到源代码,redhat系列的二进制包就是rpm,ubantu则不是,这也是这2个系列最大的区别
2、源码包
源码包的优点:开源,如果有足够的能力,可以修改源代码,可以自由选择所需的功能软件是编译安装,所以更加适合自己的系统,更加稳定也效率更高卸载方便(直接删除源码包安装的文件夹即可)
源码包的缺点
安装过程步骤较多,尤其安装较大的软件集合时(如LAMP环境搭建),容易出现拼写错误编译过程时间较长,安装比二进制安装时间长因为是编译安装,安装过程中一旦报错新手很难解决
3、RPM包
二进制包的优点
包管理系统简单,只通过几个命令就可以实现包的安装、升级、查询和卸载安装速度比源码包安装快的多
二进制包缺点:经过编译,不再可以看到源代码功能选择不如源码包灵活依赖性
RPM包管理-rpm命令管理
- RPM包命名原则
RPM:redhead package manager
httpd-2.2.15-15.el6.centos.1.i686.rpm
Httpd 软件包名
2.2.15 版本号
15 版本发布的次数
el6.centos 包所适应的操作系统
i686.Rpm 扩展名,linux所有文件没有扩展名,为了方便管理员查看的
2、RPM包依赖性
树形依赖: a---->b--->c
环形依赖: a-->b-->c-->a
模块依赖: 模块依赖查询网站:
www.rpmfind.net
例如:mount /dev/sr0 /mnt/cdrom
cd /mnt/cdrom/Packages
ls
rpm -ivh mysql-connector-odbc-5.1.5r1144-7.el6.x86_64.rpm
发现要依赖libodbcinst.so.2 凡是这种扩展名是so.2 表示一个库文件,那么这种库文件要在哪里下载安装呢? 才能装我们的mysql与odbc的驱动包呢?
大家注意:查询www.rpmfind.net 搜索libodbcinst.so.2 发现 只需要下载相应的rpm,然后安装,那么这个包就有了,因为这个包在下载的rpm里面
举例:现在需要安装apache
再装apr-util-ldap 装它的时候 发现又有依赖包,先装依赖包,如果依次有依赖,再逐级装完,再装httpd-tools 所以依赖搞定,再装
RPM包管理-rpm命令管理
1、包全名与包名
包全名:操作的包是没有安装的软件包时,使用包全名。而且要注意路径,一般在安装和升级的时候
包名:操作已经安装的软件包时,使用包名。Linux在查找和删除的时候用包名即可,会去找是搜索/var/lib/rpm/中的数据库
2、RPM安装
rpm –ivh 包全名
选项:
-i(install)
-v(verbose 详细信息)
-h(hash 散列表 显示安装进度)
--nodeps 不检查依赖性 一般不要
3、卸载
rpm -e 包名(不需要包全名,也不需要在特定的文件夹,任何一个位置敲该命令即可,因为会自动去var/lib/数据库搜索)
选项:
-e(erase)
--nodeps
注意:在卸载的时候,如 a依赖b b依赖c 卸载的时候先卸a 再卸载b 最后c,以httpd apache的包为例子,再装的时候发现都是依赖别的包,不是别的包依赖它 那么这个时候卸载的时候 直接 rpm -e httpd 即可
二、RPM包管理-rpm命令管理
1、查询是否安装
[root@localhost ~]# rpm -q 包名
#查询包是否安装
选项: -q :query -a :all
[root@localhost ~]# rpm –qa #查询所有已经安装的RPM包
Rpm -qa |grep httpd 查询所有的httpd(apache)包
| 表示管道符
2、查询软件包详细信息
[root@localhost ~]# rpm –pi 包名
选项:
-i information 查询软件信息
-p package 查询安装包信息
如:rpm -qip zip-3-0-1.el6.x86_64.rpm
通过这命令查看包的信息
3、查询包中文件安装位置
[root@localhost ~]# rpm –pl 包名
选项:
-l list
-p package 查询软件包默认装在哪里的位置
如: rpm -qlp zip-3-0-1.el6.x86_64.rpm
一般在安装的时候,包的安装位置是固定的,是厂商在生产的时候,就决定这个包应该放在哪个位置是合格的,如果手动改了默认的安装位置,会引发相关的一些问题,如一些服务的启动就无法找到rpm包安装的相关服务,不推荐手动改变它的位置
4、查询系统文件属于哪个RPM包
[root@localhost ~]# rpm –qf 系统文件名
选项:
-f 查询系统文件属于哪个软件包(file)
如:已经装了httpd这个包 查到这个包安装后一些的文件, rpm -ql httpd, 然后复制一个文件名
rpm -qf /var/www/icons/up.png 则可以知道属于哪个包,在这里就是属于httpd-2.2.15-29.el6.centos.x86_64这个包
5、查询软件包的依赖性
[root@localhost ~]# rpm –qR 包名
选项:
-R 查询软件包的依赖性(requires)
如: rpm –qRp 包全名(/mnt/cdrom/包全名)
6、RPM包校验
[root@localhost ~]# rpm –V 已安装的包名
选项:
-V 校验指定RPM包中的文件(verify)
校验:主要是看安装的包文件,是否被修改过,rpm -V httpd 如果没有任何信息,证明没有被修改过,就是初始的文件
现在修改httpd包的某个配置文件 如etc/httpd/conf/httpd.conf ,在文件中随便修改点内容
7、RPM包校验
[root@localhost ~]# rpm –V 已安装的包名
选项:
-V 校验指定RPM包中的文件(verify)
校验:主要是看安装的包文件,是否被修改过,rpm -V httpd 如果没有任何信息,证明没有被修改过,就是初始的文件
现在修改httpd包的某个配置文件 如etc/httpd/conf/httpd.conf ,在文件中随便修改点内容
8、RPM包中文件提取
[root@localhost ~]# rpm2cpio 包全名 | \
cpio -idv .文件绝对路径
\ 表示:一行写不下,换行继续写 | 表示管道符 2 表示to
rpm2cpio :将rpm包转换为cpio格式的命令
cpio#是一个标准工具,它用于创建软件档案文件和从档案文件中提取文件
[root@localhost ~]# cpio 选项 < [文件|设备]
选项:
-i:copy-in模式,还原
-d:还原时自动新建目录
-v:显示还原过程
[root@localhost ~]# rpm -qf /bin/ls 如:把ls文件移走
#查询ls命令属于哪个软件包
[root@localhost ~]# mv /bin/ls /tmp/ 此时写ls 提示没有那个文件或目录
#造成ls命令误删除假象
[root@localhost ~]# rpm2cpio /mnt/cdrom/Packages/coreutils-8.4-19.el6.i686.rpm | cpio -idv ./bin/ls
含义:/mnt/cdrom/Packages/coreutils-8.4-19.el6.i686.rpm 这个包转成cpio格式 然后用cpio命令 提取/bin/ls 放到 .(代表当前目录)的bin/ls下
#提取RPM包中ls命令到当前目录的/bin/ls下
[root@localhost ~]# cp /root/bin/ls /bin/
#把ls命令复制会/bin/目录,修复文件丢失
注: \ 表示换行 接着写 | 表示管道符 将2个命令隔开 如:# rpm -qa|grep licq
这条命令使用一个管道符“|”建立了一个管道。管道将rpm -qa命令的输出(包括系统中所有安装的RPM包)作为grep命令的输入,从而列出带有licq字符的RPM包来
6.3.1 IP地址配置和网络yum源
1、IP地址配置
[root@localhost ~]# setup
#使用setup工具 配置 如何看网关、DNS、子网掩码,通过网络的详细信息就可以看
[root@localhost ~]# vi /etc/sysconfig/network-scripts/ifcfg-eth0
把ONBOOT=“no” 改为
ONBOOT=“yes“
#启动网卡
[root@localhost ~]# service network restart
#重启网络服务
2、网络yum源
[root@localhost yum.repos.d]# 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 数字证书的公钥文件保存位置。不用修改, 默认使用第一个yum源 也就是base
注意:yum.repos.d该文件夹下有4个文件,这个 CentOS-Base.repo 表示网络yum源文件改成本地的yum源 我们说linux所有的yum服务器里面的rpm都是在镜像文件里面的
先挂载操作系统的dvd,然后改
baseurl=file:///mnt/cdrom /// 第三个/表示根目录
常用yum命令
1)查询
[root@localhost yum.repos.d]# yum list
#查询所有可用软件包列表 yum所对应的远程服务器的包列表
如
yum-utils.noarch 1.1.30-40.el6 base
包名称 版本 base容器
就是刚刚查的yum /etc/yum.repos.d/CentOS-Base.repo这个容器,执行yum list,默认去base容器(容器配置远程服务器的url 等信息)
[root@localhost yum.repos.d]# yum search 关键字
#搜索服务器上所有和关键字相关的包
注意:关键字
就是yum的包名,注意前面讲了包名和包全名的概念,这个概念只对rpm手工管理生效,我们现在讲yum,直接写报名,它会去服务器找相应的包的版本等等信息,所以yum没有包名和包全名的概念 如 yum search http 会直接去远程服务器列出apache的包和相关包的全部信息
2)安装
[root@localhost yum.repos.d]# yum –y install 包名
选项:
如:yum -y install gcc
Gcc是c语言的一个编译器 ,源码包必须要有这个gcc编译器才能装
3)升级
[root@localhost yum.repos.d]# yum -y update 包名
选项:
注:升级,千万记得包名加上,如果没有接上包名,默认升级所有的软件包,包括linux的内核升级,就挂了,因为linux是本地启动要配置一些信息,不能直接从远程升级
4)卸载
[root@localhost yum.repos.d]# yum -y remove 包名
注:卸载的时候 把依赖的全部卸载掉 ,会有问题,如果别的包也依赖这个包所依赖的包,就挂了,最好不要卸载
YUM软件组管理命令
[root@localhost ~]# yum grouplist
#列出所有可用的软件组列表(在安装linux系统的时候,有一些定制功能的信息,我们当时安装linux时选基本的服务器,有很多功能没装,如输入法) 默认中文显示,
[root@localhost ~]# yum groupinstall 软件组名
#安装指定软件组,组名可以由grouplist查询出来
如果 软件组名有空格 要用引号 括起来 ,要显示中文组名所对应的英文组名
[root@localhost ~]# yum groupremove 软件组名
#卸载指定软件组
注意:不要更改配置文件的格式,如加空格,注释# 不写在开头
如:在配置文件yum.repos.d下:某一行 /mnt/cdrom/..后面加#
用命令:yum list |more 显示部分报错信息
光盘yum源搭建
光盘yum源搭建步骤
1)挂载光盘
[root@localhost ~]# mount /dev/cdrom /mnt/cdrom/
2)让网络yum源文件失效
[root@localhost ~]# cd /etc/yum.repos.d/
[root@localhost yum.repos.d]# mv CentOS-Base.repo CentOS-Base.repo.bak
[root@localhost yum.repos.d]# mv CentOS-Debuginfo.repo CentOS-Debuginfo.repo.bak
[root@localhost yum.repos.d]# mv CentOS-Vault.repo CentOS-Vault.repo.bak
3)修改光盘yum源文件
[root@localhost yum.repos.d]# 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
注意:#注释符号不要乱打,配置文件的有严格的格式,甚至空格
改完后 yum list
zlib-static.x86_64 1.2.3-29.el6 c6-media
我们可以看到:c6-media 就是本地的光盘,不是之前的base容器了
源码包和RPM包的区别
1、区别
安装之前的区别:概念上的区别
安装之后的区别:安装位置不同
2、RPM包安装位置是安装在默认位置中
3、源码包安装位置
安装在指定位置当中,是人为指定的,一般是/usr/local/软件名/
4、安装位置不同带来的影响
RPM包安装的服务可以使用系统服务管理命令(service)来管理,例如RPM包安装的apache的启动方法是:
/etc/rc.d/init.d/httpd start
service httpd start
/etc/rc.d/init.d/ httpd 就是一个可执行文件
注意:rpm包安装的所有软件,它们的服务可执行文件全都在这个目录下,绿色表示可执行文件,如启动apache的服务/etc/rc.d/init.d/httpd start 或者service httpd start或 restart
注意:service是Redhat专有的命令,其它版本不一定有,如果没有,就只能写绝对路径启动,
Could not reliably determine the server's fully qualified domain name, using localhost.localdomain for ServerName
启动报错,说主机名和回环地址不匹配,后面讲,之所以service这个命令能启动,因为service它会去rpm包安装的默认位置(默认位置一定是厂商固定的位置)去搜索路径,所以源码包的安装,就不能用这个命令,因为它的安装位置是人为指定的
源码包安装的服务则不能被服务管理命令管理,因为没有安装到默认路径中。所以只能用绝对路径进行服务的管理,如:
/usr/local/apache2/bin/apachectl start
源码包安装过程
1、安装准备
安装C语言编译器
下载源码包
http://mirror.bit.edu.cn/apache/httpd/
2、安装注意事项
源代码保存位置:/usr/local/src/
软件安装位置:/usr/local/
如何确定安装过程报错:
安装过程停止
并出现error、warning或no的提示
注意:前面用rpm包装了httpd,现在用源码包是否还能安装,可以,因为存放路径不同
3、源码包安装过程
下载源码包,上传服务器
解压缩下载的源码包 tar -zxvf
默认解压当前文件夹 do -sh httpd-2.2.9(解压后的文件夹) 查看文件夹有多大
进入解压缩目录 cd httpd-2.2.9
注意:一般装软件之前 看INSTALL和README说明
4、./configure 软件配置与检查
1)定义需要的功能选项
configure是用来进行用户个性配置的工具,一般--开头的说明的是需要配置的选项,如果不知道选项,用./configure --help 查看,
比如你给的这个 -- prefix就是说软件安装目录设置在哪里,后面的=/usr就是你给出的安装目录,当然你完全可以换一个目录,
但并不是所有的tar包都是源代码的包,可以ls看看有没有configure这个文件,也许你下的是二进制的包,如果是二进制的包,解压后直接就能使用
2)检测系统环境是否符合安装要求。如gcc是否装
3)把定义好的功能选项和检测系统环境的信息都写入Makefile文件,用于后续的编辑
注意:这个Makefile文件,是执行 ./configure --prefix=/usr/local/apache2之后才有的
作用:软件安装到usr/local这个目录下,保存到apache2文件夹里 apache2文件夹有我们自定义
4)、make编译
作用:调用gcc 编译源代码包
5)、make clean
清除之前编译的可执行文件及配置文件
make distclean 要清除所有生成的文件
6)、make install
作用:才是真正的安装,这个时候才会向usr/local/apache2这个目录写入东西,启动服务,注意不能用service 命令,只能用绝对路径,看看INSTALL文档说明,如何启动服务,服务名是什么
/usr/local/apache2/bin/apachectl start
安装完成后:有2个错误,一个是80端口被之前的apache占用,2还是回环地址的问题,停止之前的rpm包安装的httpd service httpd stop ,再次启动即可
注意:如果不能访问 service iptables stop关闭防火墙
5、源码包的卸载
不需要卸载命令,直接删除安装目录即可,不会遗留任何垃圾文件。
rm -rf /usr/local/apache2/
注意:如果要被外部访问的软件包,建议用源码包安装,只是自己用的建议用rpm安装
脚本安装包
1、脚本安装包并不是独立的软件包类型,常见安装的是源码包。是人为把安装过程写成了自动安装的脚本,只要执行脚本,定义简单的参数,就可以完成安装。非常类似于Windows下软件的安装方式
2、Webmin的作用
Webmin 是一个基于 Web 的 Linux 系统管理界面。您就可以通过图形化的方式设置用户帐号、Apache、DNS、文件共享等服务。
3、Webmin安装过程
下载软件http://sourceforge.net/projects/webadmin/files/webmin/
解压缩,并进入加压缩目录执行安装脚本
一般执行文件就是setup.sh执行./setup.sh即可直接回车表示下一步类似windows的图形安装下一步下一步,
所谓脚本安装,就是用户不需要自己make make install
注意:默认的用户名是admin