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工具去安装,卸载及升级,源码包安装有以下三个步骤:
- ./configure:预编译,主要用于检测系统基准环境库是否满足gcc环境,生成makefile
- make:编译,基于第一不生成的makefile文件,进行源代码的编译
- 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!!!