软件包管理
一、软件包分类
1. 源码包(脚本安装包)
优点:
- 开源,如果有足够的能力,可以修改源代码
- 可以自由选择所需的功能
- 软件是编译安装,所以更适合自己的系统,更加稳定也效率更高
- 卸载方便(直接删除安装目录方便)
缺点:
- 安装步骤较多,尤其安装较大的软件集合时(如LAMP环境搭建),容易出现拼写错误
- 编译时间较长,安装比二进制安装时间长
- 因为是编译安装,安装过程中一旦报错新手很难解决问题
2. 二进制包(RPM包,系统默认包)
优点:
- 包管理系统简单,只通过几个命令就可以实现包的安装、升级、查询和卸载
- 安装速度比源码包安装快得多
缺点:
- 经过编译,不再可以看到源码
- 功能选择不如源码包灵活
- 依赖性(依赖性指的是要想安装A包就得先安装B包,要想安装B包又得先安装C包,所以只能以CBA的顺序安装RPM包,删除的时候得按ABC顺序删除安装包,基本上所有的RPM包全有依赖性)
二、RPM包管理-rpm命令管理
1. 包命名与依赖性
RPM包命名规则 例子:Httpd-2.2.15.el6.centos.1.i686.rpm
其中:
Httpd 软件包包名 2.2.15 软件版本 15 软件发布的次数 el6.centos 适合的Linux平台 i686 适合的硬件平台 noarch 表示任何硬件平台都可以安装 rpm rpm包扩展名
如果自己组建rpm包,都以rpm结尾,这样更加清晰,其他管理员可以明白 注意:Httpd-2.2.15.el6.centos.1.i686.rpm为包全名,Httpd 为包名是有区别的,Linux系统命令严格区分两者 RPM包依赖性
树形依赖:a→b→c 环形依赖:a→b→c→a 环形依赖需要把a,b,c三个同时安装 模块依赖:模块依赖查询网站:www.rpmfind.net ==如果安装时遇到问题,出现依赖性错误 被依赖文件以.so.[数字]结尾的为库依赖,需要直接安装这个软件,错误会自动解决 安装这个包时需要进入网站 www.rpmfind.net. 查询被依赖文件
2. 安装升级与卸载
包全名:操作的包是没有安装的软件包时,使用包全名。而且要注意路径 包名:操作以及安装的软件包时,使用包名。是默认在搜索/var/lib/rpm中的数据库
安装:rpm -ivh 包全名 -i 安装(install) -v 显示详细安装信息(verbose) -h 显示进度(hash) –nodeps 不检测依赖性 一般不用,安装时都得显示依赖性 注意:安装一定要用包全名
升级:rpm -Uvh 包全名 -U 升级(upgrade)
卸载:rpm -e 包名 -e 卸载(erase) –nodeps 不检查依赖性
3. 查询
3.1 查询是否安装
**rpm -q 包名 **
-q 查询(query)
3.2 查询所有安装的包
rpm -qa
-a 所有(all)
3.3 查询所有含义关键字的包
rpm -qa | grep [关键字]
| 为管道符 : 作用是管道符左边命令的输出就会作为管道符右边命令的输入 注意:
1、管道命令只处理前一个命令正确输出,不处理错误输出。
2、管道命令右边命令,必须能够接收标准输入流命令才行。
3.4 查询软件包详细信息
rpm -qi 包名
-i 查询软件信息(information)
-p 查询未安装包信息(package)
注意:rpm -qip 查询未安装包,后面跟包全名
3.5 查询包中文件安装位置
rpm -ql 包名
-l 列表(list) -p 查询未安装包信息(package)
3.6 查询系统文件属于哪个RPM包
rpm -qf 系统文件名
-f 查询系统文件属于哪个软件包(file)
3.7. 查询软件包的依赖性
rpm -qR 包名
-R 查询软件包的依赖性(requires)
-p 查询未安装包信息(package)
4. 校验和文件提取
4.1 RPM包校验
rpm -V 已安装的包名 -V 校验指定RPM包中的文件(verify)
例子:rpm -V httpd
显示:S.5……T. c /etc/httpd/conf/heepd.conf
验证内容中的8个信息的具体内容:
S:文件大小是否改变
M:文件的类型或文件的权限(rwx)是否被改变
5:文件MD5校验和是否改变(可以看成文件内容是否改变) MD5是进行文件完整性验证的
D:设备的中,从代码是否改变
L:文件路径是否改变
U:文件的属主(所有者)是否改变
G:文件的属组是否改变
T:文件的修改时间是否改变
文件类型:
c:配置文件(config file)
d:普通文档(documentation)
g:“鬼”文件(ghost file),很少见,就是该文件不应该被这个RPM包包含
l:授权文件(license file)
r:描述文件(read me)
4.2 RPM包中文件提取
场景:误操作删除了已经安装的某些文件,可以不用重新安装直接从RPM安装包中提取目标文件,通常用来修复
rpm2cpio 包全名 | cpio -idv.文件绝对路径
```java
rpm2cpio 将rpm包转换为cpio格式的命令
cpio 是一个标准工具,他用于创建软件档案文件和从档案文件中提取文件
用法:cpio 选项 <文件或设备>
-i: copy-in模式,还原
-d: 还原时自动创建目录
-v: 显示还原过程
例子:比如将ls命令误操作删除了,如何还原
[root@localhost ~]# which ls
alias ls='ls --color=auto'
/bin/ls
#1.先查询该命令属于哪个包
[root@localhost ~]# rpm -qf /bin/ls
coreutils-8.4-19.el6.i686
#2.提取RPM包中的ls
[root@localhost ~]# rpm2cpio xx/xxx/coreutils-8.4-19.el6.i686.rpm | cpio -idv./bin/ls
```
三、RPM包管理-yum在线管理
1. IP地址配置
说明:这是永久生效,而命令ifconfig eth0 192.168.3.9 这个是临时生效,重启就丢失了
虚拟机网络:桥接模式
1. 运行setup命令
2. 设备配置
3. eth0 #第一个网卡
4. 网络配置
名称:eth0
设备:eth0
使用DHCP: [*] --> [ ] #改成空格,因为没有DHCP服务
静态IP: 192.168.3.9 #自己设置
子网掩码: 255.255.255.0 #windows命令ipconfig查看
默认网关IP: 192.168.3.1 #windows命令ipconfig查看
主 DNS 服务器:202.106.0.20 #百度的,北京网通
第二 DNS 服务器:
5.保存
6.保存并退出
7.退出
8.vim /etc/sysconfig/network-scripts/ifcfg-eth0 #将ONBOOT=no --> yes
DEVICE=eth0
BOOTPROTO=none
HWADDR=00:0c:29:69:ad:8e
NM_CONTROLLED=yes
ONBOOT=yes
TYPE=Ethernet
UUID="acc57e64-3418-45c2-a074-73c6ecde2d55"
IPADDR=192.168.3.9
NETMASK=255.255.255.0
DNS2=202.101.95.55
GATEWAY=192.168.3.1
DNS1=218.85.157.99
IPV6INIT=no
USERCTL=no
9.service network restart
10.ping www.sina.com.cn 正常说明配置正确,能上网
2. 网络yum源
源目录:vi /etc/yum.repos.d
[root@localhost ~]# cd /etc/yum.repos.d
[root@localhost yum.repos.d]# ll
总用量 16
-rw-r--r--. 1 root root 1926 6月 26 2012 CentOS-Base.repo
-rw-r--r--. 1 root root 637 6月 26 2012 CentOS-Debuginfo.repo
-rw-r--r--. 1 root root 626 6月 26 2012 CentOS-Media.repo
-rw-r--r--. 1 root root 2593 6月 26 2012 CentOS-Vault.repo
说明:
CentOS-Base.repo为网络yum源
CentOS-Media.repo为本地磁盘yum源
默认生效的yum源是 CentOS-Base.repo
查看源
[root@localhost yum.repos.d]# vim 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-6
参数说明:
[base]:容器名称,一定要放在[]中
name:容器说明,可以自己随便写
mirrorlist:镜像站点,这个可以注释掉
baseurl:我们的yum源服务器的地址。默认是CentOS的官方的yum源服务器,是可以使用的,如果觉得慢可以改成你喜欢的yum镜像源地址
enabled:此容器是否生效
如果不写或者写成enable=1都是生效的,写成enable=0就是不生效
gpgcheck:如果1是指RPM的数字证书生效,如果是0则不生效
gpgkey:数字证书的公钥文件保存位置。不用修改
CentOS 6 已经达到了生命周期终点(EOL),官方不再提供支持和更新。然而,仍然可以通过配置阿里云的归档镜像源来继续使用 CentOS 6。
CentOS 6 已经达到了生命周期终点(EOL),官方不再提供支持和更新。然而,仍然可以通过配置阿里云的归档镜像源来继续使用 CentOS 6
1.备份
cd /etc/yum.repos.d
mkdir bakup
mv *.repo /etc/yum.repos.d/bakup
2. 创建Centos6的阿里源
vi /etc/yum.repos.d/CentOS-Base.repo
3. 编辑内容
[base]
name=CentOS-$releasever - Base
baseurl=http://mirrors.aliyun.com/centos-vault/6.10/os/$basearch/
#mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=os
gpgcheck=1
enabled=1
gpgkey=http://mirror.centos.org/centos/RPM-GPG-KEY-CentOS-6
#released updates
[updates]
name=CentOS-$releasever - Updates
baseurl=http://mirrors.aliyun.com/centos-vault/6.10/updates/$basearch/
#mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=updates
gpgcheck=1
enabled=1
gpgkey=http://mirror.centos.org/centos/RPM-GPG-KEY-CentOS-6
4. 清除原来的源
yum clean all
5. 编译阿里源
yum makecache
6. 查看yum库里的包
yum list
3. yum 命令
3.1 查询
- yum list 查询所有可用软件包列表
- yum search 关键字或包名 搜索服务器上所有和关键字相关的包
3.2 安装
yum -y install 包名 安装软件包
-y 自动回答yes
3.3 升级
yum -y update 包名 升级软件包
-y 自动回答yes
注意:yum -y update 后必须加包名,否则就是全盘更新,包括Linux内核也会更新,Linux内核在更新完成之后需要在本地进行配置,内核才可以启动,如果你是在服务器上跑这条命令,服务器直接崩溃,永远无法连接,再也不能启动!!!
3.4 卸载
yum -y remove 包名 卸载包 -y 自动回答yes
注意:yum -y remove卸载会把包所有的依赖包都会卸载,有时候会把系统文件也同时卸载,小心使用,尽量不要多用!!!
4. yum 软件组管理命令
- yum grouplist 列出所有可用的软件组列表
- yum groupinstall “软件组名” 安装指定软件组,组名可以由grouplist查询出来,如果组名之间有空格,用双引号扩起来
- yum groupmove 软件组名 卸载指定软件组
说明:这个和安装CentOS自定义安装是一致的,原先我们是选择最小服务安装
5. 光盘yum源搭建
第一步:挂载光盘
mount /dev/sr0 /mnt/cdrom
第二步:让网络yum源失效
把/etc/yum.repos.d/文件里除了CentOS-Media.repo文件的其他文件全部改名,把repo后缀改了,随便改一个,比如.bak
还可以让每个文件里面的enabled=0
第三步:修改光盘yum源文件
vim CentOS-Media.repo
[容器] 改为c6-media 叫什么都可以
name=CentOS-$releaserver - Media 名称叫什么都可以
baseurl=file:///mnt/cdrom 地址为自己的光盘挂载地址 file:// 为固定格式不能省略 /mnt/cdrom为光盘挂载地址
把下面两个多余地址用#注释了
然后把enabled=0改为enabled=1 让源配置文件生效
注意:千万不要随意改配置文件格式,加注释,加空格缩紧 都会造成命令错误!!!!!
四、源码包管理
1. 源码包和RPM包的区别
1.1 区别
第一讲 源码包和RPM包的区别
安装之前的区别:概念上的区别 安装之后的区别:安装位置不同
1.2 RPM包安装的位置: RPM默认
RPM包默认安装路径
| /etc/ | 配置文件安装目录 |
|---|---|
| /usr/bin/ | 可执行的命令安装目录 |
| /usr/lib | 程序所使用的函数库保存位置 |
| /usr/share/doc/ | 基本的软件使用手册保存位置 |
| /usr/share/man | 帮助文件保存位置 |
[root@bogon ~]# rpm -ql gcc #查看通过yum 安装gcc的位置
/usr/bin/c89
/usr/bin/c99
/usr/bin/cc
/usr/bin/gcc
/usr/bin/gcov
/usr/bin/i686-redhat-linux-gcc
...
1.3 源码包安装位置: /usr/local/软件名/
安装在指定位置当中,一般是/usr/local/软件名/
1.4 安装位置不同带来的影响
RPM包安装的服务可以使用系统服务管理命令(service)来管理,例如RPM包安装的Apache的启动方法是:
- **/etc/rc.d/init.d./httpd start**
- **service httpd start (红帽系列专有命令,如果没有只能靠/etc/rc.d/init.d./启动)**
RPM包:启动文件全在/etc/rc.d/init.d./里,servic会搜索RPM包所有的安装路径,所以service才能启动RPM包软件,但是启动不了源码 包软件,因为源码包在/usr/local里,和RPM包不一样
源码包:安装的服务不能被服务管理命令管理,因为没有安装到默认路径中,所有只能用绝对路径进行服务的管理
如:/user/local/apache2/bin/apache1 start
2. 源码包安装过程
第二讲 源码包安装过程
这里举例(安装Apache)说明一下:
1.安装准备
安装C语言编译器
使用命令:
yum -y install gcc gcc-c++ autoconf pcre pcre-devel make automake
下载源码包
http://mirror.bit.edu.cn/apache/httpd/
选择任何版本,比如:
httpd-2.4.43.tar.bz2 版本
2.注意事项
源码包保存位置:/usr/local/src
软件安装位置:/usr/local
然后确定安装过程报错:
安装过程停止,并出现error,warning或者no提示,即发生错误
把电脑本机下载好的源码包传输到Linux系统或者服务器上
Windows下载WinSCP软件进行本机与虚拟机或者远程传输
Mac连接远程阿里云服务器,终端使用命令 scp进行传输:
scp -r localfile.txt username@192.168.0.1:/home/username/
其中,
1)scp是命令,-r是参数
2)localfile.txt 是文件的路径和文件名
3)username是服务器账号,一般为root
4)192.168.0.1是要上传的服务器ip地址
5)/home/username/是要拷入的文件夹路径,一般为/root 家目录
例子:
scp -r /Users/yangyangyang/Desktop/httpd-2.4.43.tar.bz2 root@47.95.5.171:/root
3.解压下载到源码包
使用命令 tar -jxvf httpd-2.4.43.tar.bz2
如果是tar.gz压缩包可以使用 tar -zxvf 命令
4.进入解压缩目录
输入命令:cd httpd-2.4.43
INSTALL:安装说明
README:使用说明
进入安装说明:vi INSTALL
$ ./configure --prefix=PREFIX 编译前准备
$ make 进行编译
$ make install 编译安装
$ PREFIX/bin/apachectl star 启动命令
这些为详细的安装步骤,其中:
./configure为软件配置与检查 我们也称编译前准备
1.定义需要的功能选项。
2.检测系统环境是否符合安装要求
3.把定义好的功能选项和检测系统环境的信息都写入Makefile文件,用于后续的编辑。
4.定义安装路径
退出之后
输入命令:./configure --prefix=/usr/local/apache2
如果报错显示:
进以下网址寻求解决办法
http://www.cnblogs.com/yuzhaokai0523/p/4382974.html
5.完成定义:
输入命令:make 进行编译
6.完成编译:
输入命令:make install 编译安装
7.启动:
输入命令:/usr/local/apache2/bin/apachectl start
$ PREFIX/bin/apachectl star中 $ PREFIX为软件安装路径
启动apache遇到错误:httpd: Could not reliably determine the server’s fully qualified domain name
解决办法:
1.cd /usr/local/apache2/conf
2.vi httpd.conf
找到#ServerName www.example.com:80
并且在下面一行添加
ServerName localhost:80 localhost可以换成阿里云的IP
3.保存并退出
4.再重新启动apache
/usr/local/apache2/bin/apachectl start
阿里云服务器的Linux需要关闭防火墙,然后在控制台里面的实例添加一个安全组,端口号为80的,协议是TCP
如果在以后碰到
./configure这一步编译错误,问题解决不了 自己输入命令:make clear 自己清除所有编译产生的临时文件,因为在输入make instal之后软件才真正开始安装。
3. 源码包的卸载
不需要卸载命令,直接删除安装目录即可。不会遗留任何垃圾文件
如:rm -rf /usr/local/apache2
五、脚本安装包
- 脚本安装包并不是独立的软件包类型,常见安装的是源码包。
- 是人为把安装过程写成了自动安装的脚步,只要执行脚本,定义简单的参赛,就可以完成安装。
- 非常类似于Windows下软件的安装方式
总结:其实就是源码包安装,嫌弃安装过程太繁琐,写成了脚本
安装程序以.sh结尾 下一步点回车
再输入的时候如果想删除字符按ctrl+退格键
比如安装Webmin 网页系统用户管理,图形化工具管理