linux学习笔记2_软件包管理

117 阅读11分钟

软件包管理

一、软件包分类

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 626 2012 CentOS-Base.repo
-rw-r--r--. 1 root root  637 626 2012 CentOS-Debuginfo.repo
-rw-r--r--. 1 root root  626 626 2012 CentOS-Media.repo
-rw-r--r--. 1 root root 2593 626 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 网页系统用户管理,图形化工具管理