linux软件包管理

RPM软件包管理

linux软件包从内容上可分为二进制包和源码包,不同类的软件包使用的管理工具也各不相同,源码包是没有经过编译的包,需要经过GCC,C++等编译器环境编译才能运行,二进制包无需编译,可以直接安装使用

通常而言,可以通过后缀区分源码包和二进制包,例如:以.tar.gz, .zip, .rar结尾的包称之为源码包,以.rpm结尾的软件包称之为二进制包

对于linux系统而言,提供的工具就叫做rpm,我们可以用rpm工具轻松管理rpm包

rpm工具具体用法如下:

-a:查询所有已安装的软件包
-q:询问用户,输出信息
-l:打印软件包的列表
-f:查询包含file的软件包
-i:显示软件包信息,包括名称版本描述
-v:打印输出信息
-U:升级软件包
-h:显示安装进度条
-e:卸载软件包
--force:强制安装或者卸载
--nodeps:忽略依赖包
-l:列出软件包的文件
--provides:列出软件包提供的特性
-R:列出软件包依赖的rpm包

RPM企业案例演示:

rpm -q httpd:检查httpd包是否安装
rpm -ql httpd:查看软件安装的路径
rpm -qi httpd:查看软件安装的版本信息
rpm -e httpd:卸载httpd包
rpm -qa | grep httpd:检查httpd相关包
rpm -ivh httpd-tools-2.4.6-89.el7.centos.x86_64.rpm:安装httpd软件
rpm -Uvh httpd-tools-2.4.6-89.el7.centos.x86_64.rpm:升级httpd软件

tar软件包管理

 linux操作系统出了使用RPM管理工具对二进制软件包管理以外,还可以通过tar、zip、jar等工具对源码包软件进行管理

tar命令参数详解如下:

-c:建立新的存档
-v:详细显示处理的文件
-f:指定存档或设备,后接归档文件名称
-x:解压文件
-C:归档到指定新的目录下
-z:㓟gz属性的软件包
-j:有bz2属性的软件包
-t:列出存当中文件的目录
-g:建立新GNU格式的备份
--exclude=FILE:不把指定文件包含在内

tar企业案例演示

  • 把1-7文件归档到test.tar中
[root@localhost test]# tar -cvf test.tar *
1.txt
2.txt
3.txt
4.txt
5.txt
6.txt
7.txt
[root@localhost test]# ls -ltr 
总用量 12
-rw-r--r-- 1 root root 0 11月 9 16:17 4.txt
-rw-r--r-- 1 root root 0 11月 9 16:17 3.txt
-rw-r--r-- 1 root root 0 11月 9 16:17 2.txt
-rw-r--r-- 1 root root 0 11月 9 16:17 1.txt
-rw-r--r-- 1 root root 0 11月 9 16:17 7.txt
-rw-r--r-- 1 root root 0 11月 9 16:17 6.txt
-rw-r--r-- 1 root root 0 11月 9 16:17 5.txt
-rw-r--r-- 1 root root 10240 11月 9 16:25 test.tar

 

  • 查看test.tar中的内容
[root@localhost test]# tar -tf test.tar 
1.txt
2.txt
3.txt
4.txt
5.txt
6.txt
7.txt
  • 将8.txt文件追加到test.tar中
[root@localhost test]# tar -rf test.tar 8.txt 
[root@localhost test]# tar -tf test.tar 
1.txt
2.txt
3.txt
4.txt
5.txt
6.txt
7.txt
8.txt
  • 解压test.tar包
[root@localhost test]# tar -xvf test.tar 
1.txt
2.txt
3.txt
4.txt
5.txt
6.txt
7.txt
8.txt
[root@localhost test]# ls
1.txt  2.txt  3.txt  4.txt  5.txt  6.txt  7.txt  8.txt  test.tar
  • 将后缀为txt的文件归档到tar.gz中
[root@localhost test]# tar -zcvf test.tar.gz *.txt
1.txt
2.txt
3.txt
4.txt
5.txt
6.txt
7.txt
8.txt
  • 将后缀为txt的文件归档到tar.bz2
[root@localhost test]# tar -cjvf test.tar.bz2 *.txt
1.txt
2.txt
3.txt
4.txt
5.txt
6.txt
7.txt
8.txt

除了4.txt和5.txt都打包到test.tar中

[root@localhost test]# tar -cvf test.tar * --exclude=4.txt --exclude=5.txt
1.txt
2.txt
3.txt
6.txt
7.txt
8.txt

 zip软件包管理

zip是计算机文件的压缩的算法,主流的压缩格式包括,tar,rar,zip,war,gzip,bz2,iso等等,性能上tar,war,rar格式比zip格式压缩率高,但压缩时间远远高于zip

zip工具打包常见参数如下:

-r:递归到目录
-q:安静操作
-x:不包括一下名称
-d:从压缩文件中删除文件
  • 压缩当前目录下所有文件文件
[root@localhost test]# zip -rv all.zip *
  adding: 10.txt        (in=0) (out=0) (stored 0%)
  adding: 11.txt        (in=0) (out=0) (stored 0%)
  adding: 1.txt (in=0) (out=0) (stored 0%)
  adding: 2.txt (in=0) (out=0) (stored 0%)
  adding: 3.txt (in=0) (out=0) (stored 0%)
  adding: 4.txt (in=0) (out=0) (stored 0%)
  adding: 5.txt (in=0) (out=0) (stored 0%)
  adding: 6.txt (in=0) (out=0) (stored 0%)
  adding: 7.txt (in=0) (out=0) (stored 0%)
  adding: 8.txt (in=0) (out=0) (stored 0%)
  adding: 9.txt (in=0) (out=0) (stored 0%)
  adding: auto_backup_system.sh (in=749) (out=396) (deflated 47%)
total bytes=749, compressed=396 -> 47% savings
  • 压缩除了11.txt以外所有的文件
[root@localhost test]# zip -rv all.zip * -x 11.txt
  adding: 10.txt        (in=0) (out=0) (stored 0%)
  adding: 1.txt (in=0) (out=0) (stored 0%)
  adding: 2.txt (in=0) (out=0) (stored 0%)
  adding: 3.txt (in=0) (out=0) (stored 0%)
  adding: 4.txt (in=0) (out=0) (stored 0%)
  adding: 5.txt (in=0) (out=0) (stored 0%)
  adding: 6.txt (in=0) (out=0) (stored 0%)
  adding: 7.txt (in=0) (out=0) (stored 0%)
  adding: 8.txt (in=0) (out=0) (stored 0%)
  adding: 9.txt (in=0) (out=0) (stored 0%)
  adding: auto_backup_system.sh (in=749) (out=396) (deflated 47%)
total bytes=749, compressed=396 -> 47% savings

从all.zip压缩包中删除10.txt文件

[root@localhost test]# zip all.zip -d 10.txt
deleting: 10.txt

 源码包安装

通常使用RPM工具管理以.rpm结尾的二进制包,而标准的以.zip,.tar结尾的源代码包则不能用rpm工具去安装,卸载及升级,源码包安装有以下三个步骤:

  1. ./configure:预编译,主要用于检测系统基准环境库是否满足gcc环境,生成makefile
  2. make:编译,基于第一不生成的makefile文件,进行源代码的编译
  3. make install:安装,编译完成后将相关的可运行文件安装至系统

注意:某些特殊源码可以只有三步中的2步或者1步

例如安装nginx源码包:

第一步,Nginx.org官网下载nginx-1.16.1.tar.gz

[root@mynode1 ~]# wget http://nginx.org/download/nginx-1.16.1.tar.gz

第二步,Nginx源码包解压

[root@mynode1 ~]# tar -zxvf nginx-1.16.1.tar.gz

第三步,进入源码包后执行./configure指令进行预编译,分号“;”表示连接多个命令

[root@mynode1 ~]# cd nginx-1.16.1;./configure

第四步,make编译

[root@mynode1 nginx-1.16.1]# make

第五步,make install 安装

[root@mynode1 nginx-1.16.1]# make install

 YUM软件包管理

前端软件包管理器(yellow dog updater modified,YUM)适用于CentOS,RedHat及SUSE等操作系统,主要用于管理RPM包,YUM能够从指定的服务器自动下载RPM包并且安装,还可以自动解除依赖关系

使用RPM管理和安装软件时,会发现RPM包有依赖,需要逐个手动下载和安装,而YUM工具最大的便利就是可以自动安装所有依赖软件包,从而提升工作效率,节省时间

YUM工作原理

 yum正常运行需要依赖两个部分:一是yum前端,二是yum客户端

YUM源通过HTTP或者FTP服务器发布,YUM安装或者搜索软件时,会查找/etc/yum.repos.d下以.repo结尾文件,CentOS默认的.repo文件名为CentOS-Base.repo,该文件配置yum源端的镜像地址,所以下载和更新,yum都会找.repo文件

如过配置了官方的repo源,一定要能够连接互联网,当然我们也可以自己创建yum仓库,创建一个本地yum源,这个后续会讲到....

YUM企业案例演练

yum install httpd:安装httpd软件包
yum search:yum搜索软件包
yum list httpd:显示指定程序包安装情况
yum list:显示所有已安装和可安装的软件包
yum remove httpd:删除软件包httpd
yum update:内核升级和软件更新
yum update httpd:更新httpd软件包
yum check-update:检查可更新的程序
yum info httpd:显示安装包信息httpd
yum provides:列出软件包提供哪些文件
yum provides rz:列出rz命令由哪个软件包提供
yum grouplist:查询可以用groupinstall 安装的组名称
yum deplist httpd:查询程序httpd依赖情况
yum clean all:清楚缓存
yum makecache:建立缓存
yum install httpd --downloadonly --downloaddir=/tmp/:仅下载httpd软件包,并且放到/tmp目录下,注意:这里是仅下载,不安装

安装httpd服务

 

 

 查看可安装的组

 

 

 查看rz命令是由哪个包提供的

 

 

 基于ISO镜像构建YUM本地源

第一步,挂载光盘镜像

[root@localhost ~]# mount /dev/cdrom /mnt/

第二步,创建本地yum仓库目录

[root@localhost ~]# mkdir /root/myrepo/

第三步,复制光盘里的rpm包,内容较多可能需要几分钟

[root@localhost ~]# cp -a /mnt/Packages/* /root/myrepo/

第四步,创建仓库

[root@localhost ~]# cd /root/myrepo/
[root@localhost myrepo]# createrepo ./
Spawning worker 0 with 3831 pkgs
Workers Finished
Saving Primary metadata
Saving file lists metadata
Saving other metadata
Generating sqlite DBs
Sqlite DBs complete

第五步,编辑yum文件

[root@localhost myrepo]# vim /etc/yum.repos.d/my.repo 
[myself]
name=myself
baseurl=file:///root/myrepo
gpgcheck=0
enabled=1

第六步,清空yum缓存

[root@localhost myrepo]# yum clean all 
Loaded plugins: fastestmirror, langpacks
Cleaning repos: myself
Cleaning up everything
Cleaning up list of fastest mirrors

第七步,创建yum缓存

[root@localhost myrepo]# yum makecache
Loaded plugins: fastestmirror, langpacks
myself                                                              | 2.9 kB  00:00:00     
(1/3): myself/filelists_db                                          | 3.0 MB  00:00:00     
(2/3): myself/other_db                                              | 1.3 MB  00:00:00     
(3/3): myself/primary_db                                            | 3.0 MB  00:00:00     
Determining fastest mirrors
Metadata Cache Created

至此,本地yum源就创建好了,这里要注意的是如果你要安装一个包,而本地yum源没有或者依赖包没有,那么就会下载失败

 

 

基于HTTP构建YUM网络源

上述本地源只能给本机使用,局域网其他服务器无法使用yum光盘源,如果想使用的话,需要在每台机器上构建本地源,该方案在企业中不可取,所以需要构建HTTP局域网yum源解决,可以通过createrepo创建本地yum源,repo即为repository

构建HTTP局域网yum源的方法如下:

第一步,挂载光盘镜像文件至/mnt

mount /dev/cdrom /mnt/

第二步,复制/mnt/Packages目录下所有软件包至/var/www/html/centos/

[root@mynode1 html]# mkdir -p /var/www/html/centos/
[root@mynode1 html]# cp -R /mnt/Packages/* /var/www/html/centos/

第三步,使用createrepo创建本地源,执行如下命令会在CentOS目录生成repodata目录,

目录内容如图:

yum install createrepo* -y
cd /var/www/html
createrepo centos/

 

 第四步,利用HTTP发布YUM源,本地yum源通过createrepo搭建完毕,需要借助HTTP Web服务器发布/var/www/html/centos/中的所有软件,yum或者rpm安装http web服务器,并启动httpd服务,详细步骤如下:

1.yum install httpd httpd-devel -y
2.useradd apache -g apache
3.systemctl restart httpd
4.setenforce 0
5.systemctl stop firewalld 
6.ps -ef | grep httpd

第五步,在yum客户端,创建/etc/yum.repo.d/http.repo文件,输入如下内容:

[root@mynode1 html]# cat /etc/yum.repos.d/http.repo 
[base]
name="CentOS7 HTTP YUM"
baseurl=http://192.168.254.250/centos/
gpgcheck=0
enabled=1
[updates]
name="CentOS7 HTTP YUM"
baseurl=http://192.168.254.250/centos/
gpgcheck=0
enabled=1

第六步,在yum客户端上执行以下命令,看是否成功

yum clean all
yum install ntpdate -y

 

同步外网YUM源

在企业实际场景应用中,仅仅靠光盘中的rpm软件包是不能满足需要的,用户可以把外网的YUM源中的所有软件包同步至本地,完善本地yum源的软件包数量及完整性

获取外网yum源软件常见方法包括:rsync,wget,reposync

下面以reposync为案例:

第一步,下载CentOS7 repo文件至/etc/yum.repos.d/并安装reposync命令工具

[root@mynode1 yum.repos.d]# wget http://mirrors.163.com/.help/CentOS7-Base-163.repo
[root@mynode1 yum.repos.d]# mv CentOS7-Base-163.repo /etc/yum.repos.d/centos.repo
[root@mynode1 yum.repos.d]# yum clean all
[root@mynode1 yum.repos.d]# yum install yum-utils createrepo -y
[root@mynode1 yum.repos.d]# yum repolist

第二步,通过reposync命令工具获取外网yum源所有软件包,-r指定repolist id,默认不加-r表示获取所有外网yum软件包,-p参数表示制定下载软件的路径

[root@mynode1 yum.repos.d]#  reposync -r base -p /var/www/html/centos
[root@mynode1 yum.repos.d]#  reposync -r updates -p /var/www/html/centos

第三步,通过reposync工具下载完所有的软件包之后,需要执行createrepo更新本地yum仓库

[root@mynode1 yum.repos.d]# createrepo /var/www/html/centos/

ok!!!

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

posted @ 2019-11-09 15:55  力王7314  阅读(424)  评论(0编辑  收藏  举报