1.RPM的基本概述
1.1 RPM介绍
RPM
是RedHat Package Manager
的缩写,由红帽开发用于软件包的安装、升级、卸载与查询的工具。
包格式:xxx.rpm
命令: rpm
rpm包名的组成:
我们通常是通过本地镜像或者联网方式获取、搭建企业私有的管理仓库平台。
1.2 其他类型的安装包
分类 | 安装 | 版本 |
---|---|---|
rpm包 | 预先编译打包,安装简单 | 软件版本较低 |
源码包 | 手动编译打包,安装繁琐 | 软件版本随意 |
二进制包 | 解压即可使用,安装简单 | 不能修改源码(小工具,解压即用) |
2.RPM包的管理命令
RPM命令 | 含义 |
---|---|
-i | 安装软件包 |
-v | 显示安装过程 |
-h | 显示安装进度条 |
-U | 升级软件包 |
-e | 卸载软件包 |
要注意,rpm不能处理依赖关系,(我们可以使用yum来解决依赖问题,后面会讲)通常我们会将-ivh
安装软件包,-Uvh
升级软件包结合起来使用。
2.1 rpm查询软件包
选项 | 含义 |
---|---|
rpm -q | 查看指定的软件包是否安装 |
rpm -qa | 查看系统中已安装的所有RPM软件包列表 |
rpm -qi | 查看指定软件的详细信息 |
rpm -ql | 查询指定软件包所安装的目录、文件列表 |
rpm -qc | 查询指定软件包的配置文件 |
rpm -qf | 查询文件或目录属于那个RPM软件(绝对路径查询) |
3.YUM的基本介绍
3.1什么是YUM
yum/dnf
是RedHat
及Centos
系统中的软件包管理器,它能够通过互联网下载.rpm
格式包进行安装,并且可以自动处理其依赖关系。
#dnf
是Centos 8的软件管理工具,同yum
的作用一样,不过Centos 8明年官方也不维护了,具体情况可自行百度
3.2 什么是[YUM源|yum仓库]
要使用yum
命令安装工具更新软件,需要一个包含各种rpm
软件包的仓库,这个软件仓库我们一般称为yum
源,当然这个源也可以是本地仓库,也可以是网络仓库。比如:
client – ftp/http/file --> yum地址–> yum仓库(rpm包的集合)
简单来说就是客户使用ftp、http、file等协议通过yum地址找到yum仓库来安装自己需要的rpm包
配置一个仓库:就是配置一个源(地址)-----> 仓库
repo文件(baseurl地址 ----->互联网上的一个仓库 ----->有很多的rpm软件)
3.3 YUM配置文件
centos 7 yum的简单的主要的配置文件
[zabbix]
#仓库的名称,可以自定义
name=Zabbix Official Repository - \$basearch
#仓库的描述信息,$basearch是系统的硬件架构如(x86_64)
baseurl=https://mirrors.aliyun.com/zabbix/zabbix/4.0/rhel/7/\$basearch/
#仓库的url地址,可以是file:// ftp:// http:// 等协议
enabled=1
#是否使用改yum源(0表示禁用,1表示激活)
gpgcheck=1
#是否使用软件签名 (0表示禁用,1表示激活)
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-ZABBIX-A14F
详细的(看看就行,平常我们一般不修改yum的配置文件)
[root@localhost ~]# vim /etc/yum.conf
[main]
cachedir=/var/cache/yum/$basearch/$releasever
#缓存目录
keepcache=0
#缓存软件包(1开启,0关闭)
debuglevel=2
#调试级别
#缓存目录
keepcache=0
#缓存软件包(1开启,0关闭)
debuglevel=2
#调试级别
logfile=/var/log/yum.log
#日志记录位置
exactarch=1
#检查平台是否兼容
obsoletes=1
#检查包是否废弃(相当于upgrade,允许更新陈旧的RPM包)
gpgcheck=1
#检查包来源是否合法,需要有制作者的公钥信息
plugins=1
#是否使用插件
installonly_limit=5
#同时可以安装5个软件包,最小为2,设置0或1则不限制
bugtracker_url=http://bugs.centos.org/set_project.php?project_id=23&ref=http://bugs.centos.org/bug_report_page.php?category=yum
#追踪bug路径
distroverpkg=centos-release
#千万别乱改,Distro是发行版的意思,Ver是版本Version这个单词的缩写,Pkg是Package的意思,合起来就是,distroverpkg这>
个参数是指定从哪里获取系统版本相关的信息,是从centos-release这个包里的文件获取的,centos-release这个包里面有很多release的文件
#这里有两个变量我们需要了解一下$basearch
这个的意思是我们系统的硬件架构(cpu指令集),使用命令arch
得到
[root@localhost ~]# arch
x86_64
还有$releasever
表示当前系统的发行版本
[root@localhost ~]# cat /proc/version
Linux version 3.10.0-1160.31.1.el7.x86_64 (mockbuild@kbuilder.bsys.centos.org) (gcc version 4.8.5 20150623 (Red Hat 4.8.5-44) (GCC) ) #1 SMP Thu Jun 10 13:32:12 UTC 2021
4 YUM日常操作
命令 | 含义 |
---|---|
yum list | 查询仓库中的所有软件包 |
yum list installed | 查询所有已安装至系统的软件包 |
yum provides | 查询系统命令属于那个软件包可以在当前系统,也可以不在 |
yum install -y | 通过仓库获取软件包安装 -y 非交互 |
yum localinstall | 安装本地的rpm 包如果rpm 包存在依赖,会通过已有的仓库获取解决依赖关系 |
yum reinstall | 重新安装软件 |
yum check-update | 对比已安装的软件和yum仓库的软件,有哪些需要升级 |
yum update -y | 更新软件包(直接使用会更新系统所有的软件包包括内核,一般刚装完系统使用 |
yum remove | 删除软件包 |
yum clean all | 清理yum缓存 |
yum管理组包
命令 | 含义 |
---|---|
yum groups list | 显示可用的包组 |
yum groups install | 安装一整个包组的软件 |
yum groups remove | 删除包租 |
yum管理仓库
命令 | 含义 |
---|---|
yum repolist | 显示yum源可用的软件仓库 |
yum repolist all | 显示yum源所有的软件仓库 |
yum-config-manager --enable | 启动仓库(一般在repo文件中修改enable参数0 1) |
yum-config-manager --disable | 关闭仓库(一般在repo文件中修改enable参数0 1) |
yum管理历史记录
命令 | 含义 |
---|---|
yum history | 查看操作记录 |
yum history info number | 查看操作的详细记录 |
yum history undo number | 撤销操作 |
5.构建yum仓库实践
5.0yum缓存软件包
1.方式一:通过修改yum全局配置文件
2.方式二:如果yum下载改软件包至本地,不进行安装
#一般不用缓存的方式,下载了的软件包自动缓存,没什么用
5.1 搭建本地的yum仓库
很多时候刚安装的Linux系统不能联网,但需要安装相应环境的软件包,这个时候我们就可以利用光盘来制作一个本地yum仓库。
。方式一:光盘挂载上,到该目录下直接 rpm -ivh /path(路径)/xx.rpm
。方式二:将光盘制作成一个本地仓库,提供本地使用;自动解决依赖关系;
1.挂载镜像
[root@localhost ~]# mount /dev/cdrom /mnt
mount: /dev/sr0 写保护,将以只读方式挂载
[root@localhost ~]# df -h
文件系统 容量 已用 可用 已用% 挂载点
devtmpfs 1.1G 0 1.1G 0% /dev
tmpfs 1.1G 0 1.1G 0% /dev/shm
tmpfs 1.1G 9.4M 1.1G 1% /run
tmpfs 1.1G 0 1.1G 0% /sys/fs/cgroup
/dev/mapper/centos-root 50G 2.1G 48G 5% /
/dev/mapper/centos-home 47G 33M 47G 1% /home
/dev/sda1 1014M 160M 855M 16% /boot
tmpfs 213M 0 213M 0% /run/user/0
/dev/sr0 4.2G 4.2G 0 100% /mnt
2、备份原有的仓库
[root@localhost ~]# gzip /etc/yum.repos.d/*
#将所有的yum源都打包,这样就使用不了了
#gzip打包并且删除源文件
3.使用yum-config-manager
命令可快速添加一个本地仓库
[root@localhost yum.repos.d]# yum install yum-utils -y
[root@localhost yum.repos.d]# yum-config-manager --add-repo="file:///mnt"
已加载插件:fastestmirror
adding repo from: file:///mnt
[mnt]
name=added from: file:///mnt
baseurl=file:///mnt
enabled=1
4.我们也可以直接去编译一个.repo
文件,将仓库详细存储至改文件
[root@localhost yum.repos.d]# vim /etc/yum.repos.d/cdrom.repo
[cdrom]
#仓库名称
name=This is local cdrom
#仓库的描述信息
baseurl=file:///mnt
#仓库的url地址,可以说file:// ftp:// http://等等协议(file//是协议/mnt是路径)
enable=1
#是否使用该yum源(0代表禁用,1代表激活)
gpgcheck=0
#是否验证软件签名(0代表禁用,1代表激活)
5.生成缓存信息,然后使用yum
安装软件测试
root@localhost yum.repos.d]# yum makecache
5.2 搭建企业yum仓库
很多时候不仅仅是一台机器无法上网,而是很多机器都无法上网,但是都有联网下载的需求,一台一台的挂载光盘很难实现,所有我们需要构建一个企业级的yum
仓库为多台客户端提供服务
。本地光盘提供基础软件包:base
。yum缓存提供常用软件包:nginx、zabbix、docker
5.2.1 环境准备
系统 | ip | 角色 |
---|---|---|
centos7 | 10.0.0.100 | yum仓库服务端 |
centos7 | 10.0.0.99 | yum仓库客户端 |
5.2.2服务端操作
1.关闭iptables
防火墙与selinux
[root@localhost ~]# systemctl stop firewalld
[root@localhost ~]# setenforce 0
2.安装ftp
服务,启动并加入开机启动
[root@localhost ~]# yum -y install vsftpd
[root@localhost ~]# systemctl start vsftpd
#将ftp启动
[root@localhost ~]# systemctl enable vsftpd
#将ftp加入开机自启
3.首先提供基础的base
软件包
[root@localhost ~]# mkdir -p /var/ftp/centos7
[root@localhost ~]# mount /dev/cdrom /mnt
[root@localhost ~]# cp -rp /mnt/Packages/*.rpm /var/ftp/centos7
#将光盘的所有rpm软件包拷贝到/var/ftp/centos7目录下
4.提供第三方源的rpm
软件包,通过脚本下载方式实现;
[root@localhost ftp]# mkdir zabbix
[root@localhost ftp]# curl -s https://mirrors.aliyun.com/zabbix/zabbix/5.4/rhel/7/x86_64/ |grep "rpm" |awk -F '"' '{print $2}' |sed -r 's#(.*)# wget -O /var/ftp/zabbix/\1 https://mirrors.aliyun.com/zabbix/zabbix/5.4/rhel/7/x86_64/\1#g' |bash
#curl是web页面字符下载工具,-s表示不打印错误输出
如果上面的比较麻烦,我们也可以通过脚本的方式来实现
[root@localhost ftp]# mkdir ops
[root@localhost ftp]# vim wget_rpm_scirpts.sh
#!/usr/bin/bash
get_zabbix_rpm_url=https://mirrors.aliyun.com/zabbix/zabbix/5.4/rhel/7/x86_64/
rpm_name=$(curl -s ${get_zabbix_rpm_url} |grep "rpm" | awk -F '"' '{print $2}')
rpm_dir=/var/ftp/ops
#1.获取包的名称
#2.下载的地址
#3.将下载的包和包组织在一起,使用wget下载到指定位置
for name in ${rpm_name}}
do
if [ ! -d ${rpm_dir} ];then
mkdir -p ${rpm_dir}
fi
wget -O ${rpm_dir}/${name} ${get_zabbix_rpm_url}${name}
done
再安装一个jenkins
[root@localhost ftp]# mkdir jenkins
[root@localhost ftp]# vim wget_jenkin.sh
#!/usr/bin/bash
rpm_url=https://mirrors.aliyun.com/jenkins/redhat/
rpm_pkg=$(curl -s https://mirrors.aliyun.com/jenkins/redhat/ |grep "rpm" | awk -F '"' '{print $2}')
rpm_dir=/var/ftp/jenkins
#1.获取包的名称
#2.下载的地址
#3.将下载的包和包组织在一起,使用wget下载到指定位置
for i in ${rpm_pkg}
do
cd ${rpm_dir} && \
wget ${rpm_url}/${i}
done
#获取到名称到设置的目录下下载软件包,然后循环;
5.提供第三方的rpm
软件包,采用Rsync
同步科大源
实现,后期结合定时任务,定点同步互联网最新软件包
#rsync同步的方式
[root@localhost ftp]# rsync -ave rsync://mirrors.ustc.edu.cn/repo/nginx/ /var/ftp/
6.将软件包目录创建为yum
仓库,安装createrepo
yum -y install createrepo
createrepo /var/ftp/ops
createrepo /var/ftp/jenkins/
5.2.3客户端操作
客户端仅需将yum
源执向本地服务器,即可使用本地服务器提供的软件包
1.客户端配置并使用base
基础源
[root@localhost ~]# gzip /etc/yum.repos.d/*
#将所有的yum源都打包,这样就使用不了了
#gzip打包并且删除源文件
[root@localhost yum.repos.d]# vim /etc/yum.repos.d/centos7.repo
[centos7]
name=centos7_base
baseurl=ftp://10.0.0.100/centos7
gpgcheck=0
2.客户端配置并使用zabbix
jenkins
等源
[root@localhost yum.repos.d]# vim ops.repo
[zabbix]
name=local ftpserver
baseurl=ftp://10.0.0.100/zabbix
gpgcheck=0
[jenkins]
name=local ftpserver
baseurl=ftp://10.0.0.100/jenkins
gpgcheck=0
6.源码包管理实践
6.1什么是源码包
源码包是开发编写好的程序源代码,但并没有将其编译为一个能正常使用的二进制工具。
6.2为何需要源码包
1、部分软件官网仅提供源码包,需要自行编译并安装
2、部分软件在新版本有一些特性还没有来得及制作成rpm
,可以自行编译软件使用其新特性。
3、源码包–>打包成一个rpm格式;
源码包优点:
1、可以自行修改源代码
2、可以定制需要的相关功能
3、新版本优先更新源码
缺点:
安装复杂
标准化实施困难,自动化就无法落地
################
我们一般在官网获取源码包
6.3 源码包如何安装
###################
适用于大部分源码包,并非所有
6.6 Nginx源码包编译
1、基础环境准备,下载nginx源码包
[root@localhost ~]# wget http://nginx.org/download/nginx-1.20.1.tar.gz
[root@localhost ~]# yum install -y gcc gcc-c++ make prce-devel zlib-devel openssl-devel
2、解压nginx源码包,并进入相应目录
[root@localhost ~]# tar xf nginx-1.20.1.tar.gz
[root@localhost ~]# cd nginx-1.20.1
3、配置相关的选项,并生成Makefile
[root@localhost nginx-1.20.1]# ./configure --prefix=/opt/nginx-1.20.1
4、根据Makefile
文件将软件编译为可执行的二进制程序
[root@localhost nginx-1.20.1]# make
5、将编译好的二进制文件拷贝至对应的目录
[root@localhost nginx-1.20.1]# make install
7.Ubuntu软件包管理
Centos与Debian(ubuntu)的区别:
操作系统 | Centos7 | Debian/Ubuntu |
---|---|---|
软件包后缀 | *.rpm | *.deb |
源配置文件 | /etc/yum.conf | /etc/apt/sources |
网卡配置文件 | /etc/sysconfig/network-scripts/ifcfg-eth0 | /etc/netplan/00-installer-config.yaml |
创建用户 | 默认使用用户家目录、解释器bash | 默认不使用用户家目录、解释器为sh |
防火墙规则 | 默认规则 | 默认没有任何规则 |
权限 | root或者普通用户 | 默认普通用户权限 |
SSH | 默认允许 root 登陆 | 默认不允许 root 登 陆 |
selinux | /etc/selinux/confi | g 没有 selinux |
更新软件包列表 | yum makecache | apt update |
安装软件 | yum install package | apt install packag |
安装已下载的软件包 | rpm -ivh pkg.rpm | dpkg -i pkg.deb |
安装已下载的软件包 | yum localinstallpkg.rpm | apt install ./pkg.d |
删除软件包 | yumremovepackage | aptremove| purgpackage |
7.3 Ubuntu软件包管理
Debian软件包的包名叫 deb,类似于 rpm 包。对于
deb包的管理方式有 dpkg、apt两种方式
dpkg:package manager for Debin,可以实
现安装、删除,但无法解决依赖项;
apt:advanced Packaging Tool,功能强大的
软件管理工具,类似于 yum;
1、使用dpkg
安装软件包
root@ubuntu:~# dpkg -i package.deb
2.使用 dpkg 删除软件包
#不建议、不自动卸载依赖它的包
root@ubuntu:~# dpkg -r package.deb
# 删除包(包括配置文件)
root@ubuntu:~# dpkg -P package.deb
2.使用 dpkg 查看软件包
#列出当前已安装的包,类似于rpm -qa
root@ubuntu:~# dpkg -l
#列出该包中所包含的文件,类似于rpm -ql
root@ubuntu:~# dpkg -L package
#查看文件所属哪个包,类似于rpm -qf
root@ubuntu:~# whereis ping
root@ubuntu:~# dpkg -S /bin/ping
7.3.2 apt包的管理
早期Ubuntu 使用 apt-get 命令来管理软件包,在
Ubuntu 16.04 发布时,引入了新的包管理命令apt,为什么要引入 apt 命令呢?
因为早期 Linux 包管理命令都被分散在了 apt-get、 apt-cache、apt-config 这三条命令当中。那么 apt 命令的引入就是为了解决命令过于分散的问题。
简单来说就是:apt = apt-get、apt-cache、apt- config 中最常用命令选项的集合。
apt 命令 | apt-get 命令 | 命令的功能 |
---|---|---|
apt install | apt-get install | 安装软件包 |
apt remove | apt-get remove | 移除软件包 |
apt purge | apt-get purge | 移除软件包及配置文件 |
apt update | apt-get update | 刷新存储库索引 |
apt upgrade | apt-get upgrade | 升级所有可升级软件包 |
apt autoremove | apt-get autoremove | 自动删除不需要的包 |
apt fullupgrade | apt-get distupgrade | 在升级软件包时自动处理依赖关系 |
apt search | apt-cache search | 搜索应用程序 |
apt show | apt-cache show | 显示安装细节 |
7.3.3 apt 使用实例
1.检查当前ubuntu版本
w@xw:~$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 20.04 LTS
Release: 20.04
Codename: focal
2.根据Ubuntu版本配置国内仓库地址阿里仓库配置指南
#手动修改如下配置文件内容
root@example:~# vim /etc/apt/sources.list
(focal 版本、其余是软件包存储的位置)
deb http://mirrors.aliyun.com/ubuntu/ focal main restricted universe multiverse deb-src
http://mirrors.aliyun.com/ubuntu/ focal main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ focal-security main restricted universe multiverse deb-src http://mirrors.aliyun.com/ubuntu/ focal-security main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ focal-updates main restricted universe multiverse deb-src http://mirrors.aliyun.com/ubuntu/ focal-updates main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ focal-proposed main restricted universe multiverse deb-src http://mirrors.aliyun.com/ubuntu/ focal-proposed main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ focal-backports main restricted universe multiverse deb-src http://mirrors.aliyun.com/ubuntu/ focal-backports main restricted universe multiverse
#更新yum源
root@example:~# apt update
3.使用 apt 命令安装进行软件安装
root@ubuntu:~# apt search desktop
root@ubuntu:~# apt install xubuntu-desktop -y
root@ubuntu:~# apt install samba vsftpd apache2 -y
centos:httpd
ubuntu:apache2
3.使用 apt 卸载软件
#并不会移除配置文件
root@ubuntu:~# apt remove vsftpd -y
# 清理所有与vsftpd相关的配置
root@ubuntu:~# apt purge vsftpd -y