zoukankan      html  css  js  c++  java
  • 11Linux之软件包管理

    11Linux之软件包管理

    11 软件包管理

    11.1 软件包介绍

    11.1.1 编程语言分类

    • 机器语言

    • 汇编语言

    • 高级语言

      解释型(shell、python)

      安装步骤:

      1、下载python写好的软件包

      2、在自己的Linux主机上安装对应版本的python解释器和依赖包

      编译型(c、go)

      c语言不支持跨平台编译,因此c语言写出来的源码包在不同的平台安装时都必须编译一次。

      go支持跨平台编译

      安装步骤:

      1、下载源码包

      2、在自己的Linux主机上安装好编译器

      3、用编译器把源码包编译成可执行的命令

    11.1.2 三种安装包

    • rpm包

      预先编译打包,安装简单

      软件的稳定版会被官方做成rpm,因此软件版本偏低

    • 源码包

      手动编译打包,安装繁琐

      软件版本丰富,可选择性强

    • 二进制包

      安装即可使用,安装简单

      不能修改源代码

    rpm制作好的安装程序--------------------->安装

    源码包------------------>需要自己定制安装细节-------------->安装

    二进制包--------------->已经安装完毕(下载完就可以用,无需安装)

    11.2 rpm包管理

    11.2.1 rpm包简介

    • 简介

      RPM是Red-Hat Package Manager(RPM软件包管理器)的缩写,设计理念是开放式的

    • rpm包格式

      举例

      yum-plugin-fastestmirror-1.1.31-53.el7.noarch.rpm
      yum-plugin-fastestmirror                  # 软件包的名称
      1.1.31 					  # 软件的版本
      53  					  # 软件编译之后发布的次数
      el7 					  # 适合的操作系统的版本
      noarch 					  # 适用于不同版本的CPU
      .rpm 					  # 后缀名
      
    • rpm包使用的平台

      redhat/centos/fedora/suse
      # 查看自己当前的平台
      [root@ccc yum.repos.d]# uname -m
      x86_64
      [root@ccc yum.repos.d]# cat /etc/redhat-release 
      CentOS Linux release 7.8.2003 (Core)
      

    11.2.2 管理rpm包的两种方式

    • rpm命令

      需要自己找到rpm包,并手动解决包的依赖性关系

      (实际很难区分缺少什么包)

    • yum命令

      相关的rpm包事先存放在一个仓库里,仓库包含了所有的依赖包

      yum会按照仓库帮我们解决依赖性问题

    11.2.3 RPM包的获取方式

    • 三种方式(卸载umount)

      # 1.本地的ISO镜像光盘:三种方式
      方式1:
      [root@ccc yum.repos.d]# mount /dev/cdrom /opt
      mount: /dev/sr0 写保护,将以只读方式挂载
      [root@ccc yum.repos.d]# df -h
      文件系统        容量  已用  可用 已用% 挂载点
      devtmpfs        476M     0  476M    0% /dev
      tmpfs           487M     0  487M    0% /dev/shm
      tmpfs           487M  7.6M  479M    2% /run
      tmpfs           487M     0  487M    0% /sys/fs/cgroup
      /dev/sda3       7.7G  6.0G  1.8G   78% /
      /dev/sda1       473M  123M  351M   26% /boot
      tmpfs            98M     0   98M    0% /run/user/0
      /dev/sr0        4.5G  4.5G     0  100% /opt
      [root@ccc yum.repos.d]# ll /dev/cdrom 
      lrwxrwxrwx 1 root root 3 11月  2 08:43 /dev/cdrom -> sr0
          
      方式2:
      [root@ccc yum.repos.d]# mount /dev/sr0 /opt
      mount: /dev/sr0 写保护,将以只读方式挂载
      [root@ccc yum.repos.d]# df -h 
      文件系统        容量  已用  可用 已用% 挂载点
      devtmpfs        476M     0  476M    0% /dev
      tmpfs           487M     0  487M    0% /dev/shm
      tmpfs           487M  7.6M  479M    2% /run
      tmpfs           487M     0  487M    0% /sys/fs/cgroup
      /dev/sda3       7.7G  6.0G  1.8G   78% /
      /dev/sda1       473M  123M  351M   26% /boot
      tmpfs            98M     0   98M    0% /run/user/0
      /dev/sr0        4.5G  4.5G     0  100% /opt
      
      方式3:
      [root@ccc ~]# dd if=/dev/sr0 of=/centos7.iso
      记录了9338880+0 的读入
      记录了9338880+0 的写出
      4781506560字节(4.8 GB)已复制,154.363 秒,31.0 MB/秒
      [root@ccc ~]# mount-o loop/root/centos7.iso /opt
      
      # 查看光盘里的rpm包
      [root@ccc ~]# ls /opt/Packages/
      
      # 2.自己去网上下载rpm包进行安装
      # 3.联网从yum仓库里获取rpm包
      

    11.3 rpm命令

    11.3.1 常用选项

    • 安装

      # rpm -ivh RPM包名全称
      [root@ccc ~]# rpm -ivh /opt/Packages/zlib-devel-1.2.7-18.el7.x86_64.rpm 
      准备中...                       ################################# [100%]
      	软件包 zlib-devel-1.2.7-18.el7.x86_64 已经安装
      
    • 卸载

      # rpm -e RPM包名
      [root@ccc ~]# rpm -e zlib-devel
      [root@ccc ~]# rpm -ql zlib-devel
      未安装软件包 zlib-devel 
      
    • 升级

      # rpm -Uvh RPM包名
      
    • 查询

      rpm -qa  	     # 查询系统中安装的所有RPM软件包
      rpm -qa | grep php   # 检索系统中已经安装有关php的软件包
      rpm -q RPM包名       # 查询指定软件包是否已经安装
      rpm -qi RPM包名      # 查询系统中已经安装包的描述信息
      rpm -ql RPM包名      # 查询系统中已安装包里所包含的文件
      rpm -qc RPM包名      # 查询指定软件包的所有配置文件
      rpm -qd RPM包名      # 查询某个包安装的帮助文档
      rpm -qf RPM包名      # 查询系统中指定文件所属的软件包
      -p  # 上述选项的基础上加-p就可以查看尚未安装的rpm包的信息
      
    • 其他

      --nomd5   # 不检验软件包的签名
      --nodeps  # 忽略依赖性安装软件,安装后软件可能无法使用,最好解决好依赖性再安装
      --force   # 强制安装软件包,只有安装和升级可以强制执行
      

    11.3.2 安装及依赖性

    • 安装

      # 1.RPM包在本地
      [root@ccc yum.repos.d]# mount /dev/sr0 /opt
      [root@ccc ~]# rpm -ivh /opt/Packages/zlib-devel-1.2.7-18.el7.x86_64.rpm
      
      # 2.RPM包来源于网络
      # 如果有报错 curl:(60) Peer's Certificate has expired҅将系统时间改正确重装即可
      [root@ccc ~]# rpm -ivh https://mirrors.aliyun.com/zabbix/zabbix/4.0/rhel/7/x86_64/zabbix-agent-4.0.0-2.el7.x86_64.rpm
      
    • 安装与依赖性

      # 例如安装httpd
      [root@ccc ~]# rpm -ivh /opt/Packages/httpd-2.4.6-93.el7.centos.x86_64.rpm 
      错误:依赖检测失败:
      	/etc/mime.types 被 httpd-2.4.6-93.el7.centos.x86_64 需要
      	httpd-tools = 2.4.6-93.el7.centos 被 httpd-2.4.6-93.el7.centos.x86_64 需要
      	libapr-1.so.0()(64bit) 被 httpd-2.4.6-93.el7.centos.x86_64 需要
      	libaprutil-1.so.0()(64bit) 被 httpd-2.4.6-93.el7.centos.x86_64 需要
      
      # 安装提示的库
      [root@ccc ~]# rpm -ivh /opt/Packages/httpd-tools-2.4.6-93.el7.centos.x86_64.rpm 
      错误:依赖检测失败:
      libapr-1.so.0()(64bit) 被 httpd-tools-2.4.6-93.el7.centos.x86_64 需要
      libaprutil-1.so.0()(64bit)被httpd-tools-2.4.6-93.el7.centos.x86_64 需要
      [root@ccc ~]# rpm -ivh /opt/Packages/apr-1.4.8-5.el7.x86_64.rpm 
      准备中...                      ################################# [100%]
      正在升级/安装...
      1:apr-1.4.8-5.el7             ################################# [100%]
      [root@ccc ~]# rpm -ivh /opt/Packages/apr-util-1.5.2-6.el7.x86_64.rpm 
      准备中...                      ################################# [100%]
      正在升级/安装...
      1:apr-util-1.5.2-6.el7        ################################# [100%]
      [root@ccc ~]# rpm -ivh /opt/Packages/httpd-tools-2.4.6-93.el7.centos.x86_64.rpm 
      准备中...                      ################################# [100%]
      正在升级/安装...
      1:httpd-tools-2.4.6-93.el7.centos  ############################ [100%]
      [root@ccc ~]# yum search mime.types
      已加载插件:fastestmirror
      Loading mirror speeds from cached hostfile
      ======================================== 匹配:mime.types =========================================
      mailcap.noarch : Helper application and MIME type associations for file types
      perl-LWP-MediaTypes.noarch : Guess media type for a file or a URL
      [root@ccc ~]# rpm -ivh /opt/Packages/mailcap-2.1.41-2.el7.noarch.rpm 
      准备中...                      ################################# [100%]
      正在升级/安装...
      1:mailcap-2.1.41-2.el7        ################################# [100%]
      [root@ccc ~]# rpm -ivh /opt/Packages/httpd-2.4.6-93.el7.centos.x86_64.rpm 
      准备中...                      ################################# [100%]
      正在升级/安装...
      1:httpd-2.4.6-93.el7.cento    ################################# [100%]
      

    11.3.3 升级rpm包

    # 两个版本不能共存
    # -Uvp
    

    11.4 yum命令

    11.4.1 yum介绍

    • yum自动解决依赖关系

      yum(Yellow dog Updater,Modified)是一个在Fedora和RedHat及CentOS中的shell前端软件包管理器。

      基于RPM包管理,能够从指定的服务器自动下载RPM包并安装,可自动处理依赖关系,一次安装所有依赖的软件包。

    • 常见yum命令与配置文件

      [root@ccc ~]# rpm -q yum
      yum-3.4.3-167.el7.centos.noarch
      [root@ccc ~]# rpm -qc yum
      /etc/logrotate.d/yum
      /etc/yum.conf
      /etc/yum/version-groups.conf
      
    • yum命令常用选项

      # 仓库
      yum repolist  				  # 查询可用仓库
      yum repolist all  			  # 查看包括已启用或禁用的所有仓库状态
      # 关闭与启用仓库:本质都是在修改repo文件中enable的值0不启用1启用
      yum-config-manager --disable epel  	  # 关闭仓库epel
      yum-config-manager --enable epel  	  # 启用仓库epel
      
      # 查看
      yum list  				  # 列出可用仓库中所有的软件包
      yum list | less  
      yum grouplist  				  # 列出可用仓库中的软件组
      yum provides /usr/sbin/ifconfig  	  # 查询命令所属软件包,可不加路径只写命令名字
      # rpm -qf  				  # 只可加路径
      
      # 安装
      yum install 软件包名 -y  		  # 安装软件-y非交互
      yum groupinstall 软件组名 -y  		  # 安装软件组,同yum groups install 软件组名 -y
      
      # 卸载
      yum remove 软件包名 -y  			  # 卸载软件包
      yum groupremove 软件组名 -y  		  # 卸载软件组
      
      # 重装
      yum reinstall 软件包名 -y  	          # 不小心删除配置文件可以reinstall
      
      # 更新
      yum check-update  			  # 检查可以更新的软件包
      yum update -y  				  # 刚装完系统之后执行
      yum update 软件包 -y  			  # 更新某个软件包
      
      # 缓存
      yum makecache  		# 制作元数据缓存
      yum clean all  		# 清理元数据缓存
      vim /etc/yum.conf       # 默认软件包下载安装后会自动删除,设置keepcache=1开启软件包缓存,缓存目录为配置文件中指定的cachedir
      
      # 注意点
      yum会以自己仓库中的repodata存储的依赖关系为准,有多个仓库就依次检索
      # 1.yum直接安装公网的rpm包,会自动查找当前系统上已有的仓库解决依赖关系
      yum install
      https://mirrors.aliyun.com/centos/7.6.1810/os/x86_64/Packages/samba-4.8.3-4.el7.x86_64.rpm
      # 2.yum直接安装本地的rpm包,会自动查找当前系统上已有的仓库解决依赖关系
      yum localinstall -y /mnt/Packages/httpd-2.4.6-88.el7.centos.x86_64.rpm
      

    11.4.2 yum的历史记录

    yum history  	       # 查看执行的yum命令历史记录
    yum history info ID号  # 查看具体某一条yum命令的详细信息
    yum history undo ID号  # 撤销执行过的历史命令
    

    11.4.3 本地源(镜像文件作为yum源)

    • 先挂载

      [root@ccc ~]# mount /dev/cdrom /opt/
      [root@ccc ~]# mount /dev/sr0 /opt/
      [root@ccc ~]# mount -o loop /xxx.iso /opt
      # 查看光盘里的rpm包
      [root@ccc ~]# ls /opt/Packages/
      
    • 编辑repo文件

      [root@ccc ~]# cd /etc/yum.repos.d/
      [root@ccc yum.repos.d]# vim local.repo 
      [root@ccc yum.repos.d]# cat local.repo
      [local]
      name="this is local repo"
      baseurl=file:///opt
      enabled=1
      gpgcheck=0
      
    • 检查可用仓库

      [root@ccc yum.repos.d]# yum repolist  	  # 查询可用仓库
      [root@ccc yum.repos.d]# yum repolist all  # 查看所有仓库,包括禁用的
      
    • 安装、查询、卸载

      [root@ccc ~]# yum list 			 # 列出可用的软件包
      [root@ccc ~]# yum install vsftpd -y
      [root@ccc ~]# yum list vsftpd httpd
      [root@ccc ~]# yum remove vsftpd -y
      
      [root@ccc ~]# yum install glib* httpd -y
      [root@ccc ~]# yum provides vsftp  # 查询某个软件(可未安装)是由那个rpm包提供
      
      # yum reinstall
      [root@ccc ~]# rm -rf /etc/httpd/conf/httpd.conf
      [root@ccc ~]# yum reinstall httpd -y &> /dev/null
      [root@ccc ~]# ls /etc/httpd/conf/httpd.conf
      /etc/httpd/conf/httpd.conf
      
      # yum update
      [root@ccc ~]# yum -y update samba
      [root@ccc ~]# yum -y update
      
    • 软件包组安装、查询、卸载

      [root@ccc yum.repos.d]# yum groupinstall "开发工具" -y
      [root@ccc yum.repos.d]# yum groupremove "开发工具" -y
      

    11.4.4 网络源(开源yum源)

    • 下载开源的yum头:

      例如阿里云的Base基础源

      wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
      

      例如163的Base基础源

      wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.163.com/.help/CentOS7-Base-163.repo
      

      例如红帽的epel扩展源

      # 可以直接下载
      [root@ccc ~]# curl -o /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
      # 也可以安装一个包来生成
      [root@ccc ~]# yum install epel-release -y
      

      例如nginx官网的软件包源

      # 进入nginx官网-->download-->Pre-Built Packages-->Stable and mainline-->
      # RHEL/CentOS-->编辑到本地
      
      [root@ccc ~]# cat nginx.repo
      [nginx-stable]
      name=nginx stable repo
      baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
      gpgcheck=1
      enabled=1
      gpgkey=https://nginx.org/keys/nginx_signing.key
      module_hotfixes=true
      
      [nginx-mainline]
      name=nginx mainline repo
      baseurl=http://nginx.org/packages/mainline/centos/$releasever/$basearch/
      gpgcheck=1
      enabled=0
      gpgkey=https://nginx.org/keys/nginx_signing.key
      module_hotfixes=true
      

      将CentOS系统默认的源 备份

      [root@ccc yum.repos.d]# cd /etc/yum.repos.d/
      [root@ccc yum.repos.d]# mkdir bak
      [root@ccc yum.repos.d]# mv *.repo bak
      [root@ccc yum.repos.d]# ls
      bak
      

    11.4.5 自己制作本地yum源

    • 下载好一堆rpm包,相关依赖包也都存在,将所有rpm包都放在一个文件夹下/aaa

    • 安装工具createrepo

      [root@ccc ~]# yum install createrepo -y
      
    • 制作repodata

      [root@ccc ~]# createrepo /aaa/
      
    • 配置本地repo文件,只想/aaa

      [root@ccc ~]# vim /etc/yum.repos.d/soft.repo
      [soft]
      name=soft
      baseurl=file:///aaa
      enabled=1
      gpgcheck=0
      
    • yum元数据缓存

      指将yum仓库下的元数据缓存下来,下次安装时省去了检索的过程,安装速度加快

      [root@ccc ~]# yum clean all  # 清理缓存
      [root@ccc ~]# yum makecache  # 制作缓存
      
    • yum软件包缓存

      开启软件包缓存后,从网络源下载安装完的软件包不再删除,都缓存到本地

      [root@ccc ~]# vim /etc/yum.conf
      [main]
      cachedir=/var/cache/yum/$basearch/$releasever # 指定软件安装包的缓存目录
      keepcache=1 # 设置为1
      debuglevel=2
      # 缓存目录为: /var/cache/yum/x86_64/7/
      
    • 基于软件包缓存可以做成自己的yum源,以此来控制各个服务的版本

      1、在测试环境中,在每个节点上都开启软件包缓存
      2、在测试环境中,安装相同版本的操作系统,安装完毕后统一执行yum update -y
      3、在测试环境中,部署完架构,测试完毕
      4、把测试环境中每台机器上缓存好的软件包采集到一个目录下
      [root@ccc ~]# find /var/cache/yum/x86_64/7/ -type f -name "*.rpm" | xargs -I {} mv {} /soft/
      5、用createrepo命令制作好依赖关系,即repodata数据库
      6、在线上环境部署时,用本地源,不轻易升级,不滥用yum源
      

    11.4.6 自己制作yum源共享给别人

    • 服务端执行的操作

      # 1、环境准备
      [root@ccc ~]# systemctl stop firewalld
      [root@ccc ~]# systemctl disable firewalld
      [root@ccc ~]# setenforce 0
      setenforce: SELinux is disabled
      [root@ccc ~]# sed -i 's#^SELINUX=.*#SELINUX=disabled#g' /etc/selinux/config
      
      # 安装ftp服务
      [root@ccc ~]# yum install vsftpd -y
      [root@ccc ~]# systemctl start vsftpd
      [root@ccc ~]# systemctl status vsftpd  # 查看状态,确保开启
      [root@ccc ~]# systemctl enable vsftpd
      
      # 采集关键包放到一个目录下
      [root@ccc ~]# mkdir /var/ftp/centos7
      [root@ccc ~]# mount /dev/sr0 /var/ftp/centos7
      
      # 或拷贝
      [root@ccc ~]# mount /dev/sr0 /opt
      [root@ccc ~]# mkdir /var/ftp/centos7
      [root@ccc ~]# find /opt/Packages/ -type f -name "*.rpm" |xargs -I {} cp -rp{} /var/ftp/centos7/
      
    • 在客户端上执行的操作

      # 1、环境准备
      [root@ccc ~]# systemctl stop firewalld
      [root@ccc ~]# systemctl disable firewalld
      [root@ccc ~]# setenforce 0
      setenforce: SELinux is disabled
      [root@ccc ~]# sed -i 's#^SELINUX=.*#SELINUX=disabled#g' /etc/selinux/config
      [root@ccc ~]# ping -c 2 192.168.12.42 # ping服务器IP地址确保网络畅通
      
      # 在客户端配置网络yum源
      [root@ccc ~]# cd /etc/yum.repos.d/
      [root@ccc ~]# mkdir bak
      [root@ccc ~]# mv *.repo bak/
      [root@ccc ~]# cat >> ftp.repo << EOF
      > [ftp_repo]
      > name = This is Ftp Share Repo
      > baseurl = ftp://192.168.12.42/centos7 
      > enabled = 1
      > gpgcheck = 0
      > EOF
      # 客户端baseurl指向的文件夹子目录一级必须要有repodata数据库
      

    11.5 源码包

    11.5.1 预先安装编译安装依赖的库

    • 安装编译器

    • 安装解释器

      [root@ccc ~]# yum groupinstall -y "开发工具"
      [root@ccc ~]# yum -y install gcc gcc-c++ autoconf automake make
      [root@ccc ~]# yum -y install zlib zlib-devel openssl openssl-devel pcre pcre-devel
      

    11.5.2 官网下载源码包

    • 浏览器下载

    • 或者执行命令

      [root@ccc ~]# cd /root
      [root@ccc ~]# wget http://nginx.org/download/nginx-1.18.0.tar.gz
      

    11.5.3 解压、编译、编译安装

    • 解压

      [root@ccc ~]# tar xvf nginx-1.18.0.tar.gz -C /tmp/ 
      [root@ccc ~]# cd /tmp/nginx-1.18.0/
      
    • 配置

      [root@ccc nginx-1.18.0]# ./configure --user=www --group=www --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module --with-stream --with-http_gzip_static_module --with-http_sub_module
      
      # 1、如果报错,先执行make clean all,再重新执行配置操作
      # 2、--prefix指定安装目录,/usr/local/nginx是安装目录
      # 3、带ssl stub_status模块 添加steam模块 -with-stream,能传输tcp协议
      # 4、http_stub_status_module 状态监控
      # 5、http_ssl_module 配置https
      # 6、stream 配置tcp的转发
      # 7、http_gzip_static_module 压缩
      # 8、http_sub_module 替换请求
      
    • 编译安装

      [root@ccc nginx-1.18.0]# make && make install
      
    • 清理安装包

      [root@ccc nginx-1.18.0]# rm -rf /tmp/nginx-1.18.0/
      
    • 将程序设定软链接,便于后续升级

      [root@ccc ~]# ln -s /usr/local/nginx/ /soft/nginx
      [root@ccc ~]# ll /soft/
      总用量 0
      lrwxrwxrwx 1 root root 17 11月  3 15:24 nginx -> /usr/local/nginx/
      
    • 启动测试

      [root@ccc nginx-1.18.0]# useradd www
      [root@ccc nginx-1.18.0]# /usr/local/nginx/sbin/nginx 
      打开浏览器:输入服务器的IP地址,可以看到欢迎界面
      
    • 总结

      # ./configure --prefix=/usr/local/nginx
      1、指定安装路径,例如--prefix=DIR
      2、启用或禁用某项功能,例如--enable-ssl,--disable-filter --with-http_ssl_module
      3、和其他软件关联,例如--with-pcre=/root/pcre-8.31
      4、检查安装环境,例如是否有编辑器gcc,是否满足软件的依赖需求
      5、最终生成:MAkefile
      # make			# 按Makefile文件编辑,可以使用-j 2指定两颗CPU编译
      # make install  # 安装
      如果中途发生错误,多半是因为缺少必要的库的支持,先清理
      # make clean all  # 清理以前编译后产生的*.o目标文件
      然后安装依赖库,重新执行三部曲
      
  • 相关阅读:
    【转】高级爬虫
    python-基于遗传算法的多三角形拟合图像实例
    python-文件处理
    python-函数式编程与内置函数
    Python-变量、函数及递归
    Python-字符串的拼接与函数
    Python-集合
    Python-列表、元组、字典
    Python-字符串2
    Python-字符串
  • 原文地址:https://www.cnblogs.com/caojiaxin/p/14004811.html
Copyright © 2011-2022 走看看