软件包管理
1、ABI:application binary interfac
应用程序二进制接口,应用程序要在操作系统上运行必须符合操作系统的接口
Linux:ELF(Executable and Linkable Format)
Windows:PE(Portable Executable)
2、API:application programming interface
调用应用程序库接口
3、程序源代码-->预处理-->编译-->汇编-->链接
链接主要作用是把各个模块之间相互引用的部分处理好,使得各个模块之间能够正确地衔接,分为静态链接和动态链接
1、静态链接
把程序对应的依赖库复制一份到包
libxxx.a
嵌入程序包
升级难,需重新编译
占用较多空间,迁移容易
2、动态链接
只把依赖加做一个动态链接
libxxx.so
连接指向
占用较少空间,升级方便
4、程序包管理器
debian:deb文件, dpkg包管理器
redhat:rpm文件, rpm包管理器 rpm:RPM Package Manager(早期:RedhatPackage Manager)
5、包命名和工具
源代码:name-VERSION.tar.gz|bz2|xz
rpm: name-VERSION-release.arch.rpm
例: bash-4.2.46-19.el7.x86_64.rpm
release:打包次数
arch:CPU架构
x86 : i386 i486 i586 i686
x86_64: x64 x86_64 amd64
通用:noarch
统计光盘内有多少个rpm安装包
[root@centos7-1 ~]#ls /run/media/root/CentOS\ 7\ x86_64/Packages/*.rpm |sed -r 's/.*\.([^.]+)\.rpm/\1/'|sort|uniq -c
2223 i686
3117 noarch
4571 x86_64
分类和拆包
Application-VERSION-ARCH.rpm: 主包
Application-devel-VERSION-ARCH.rpm开发子包
Application-utils-VERSION-ARHC.rpm其它子包
Application-libs-VERSION-ARHC.rpm其它子包
[root@centos7-1 Packages]#ls httpd*
httpd-2.4.6-80.el7.centos.x86_64.rpm httpd-manual-2.4.6-80.el7.centos.noarch.rpm
httpd-devel-2.4.6-80.el7.centos.x86_64.rpm httpd-tools-2.4.6-80.el7.centos.x86_64.rpm
包之间可能存在依赖关系,甚至循环依赖
解决依赖包管理工具:
yum:rpm包管理器的前端工具
apt-get:deb包管理器前端工具
zypper: suse上的rpm前端管理工具
dnf: Fedora 18+ rpm包管理器前端管理工具
6、库文件
管理及查看本机装载的库文件
ldconfig加载库文件
显示本机已经缓存的所有可用库文件名及文件路径映射关系
/sbin/ldconfig-p
配置文件
/etc/ld.so.conf
/etc/ld.so.conf.d/*.conf
缓存文件
/etc/ld.so.cache
查看二进制程序所以来的库文件
ldd/PATH/TO/BINARY_FILE
[root@centos7-1 lib64]#ldd /bin/ls
linux-vdso.so.1 => (0x00007ffe462fe000)
libselinux.so.1 => /lib64/libselinux.so.1 (0x00007f6636a7c000)
libcap.so.2 => /lib64/libcap.so.2 (0x00007f6636877000)
libacl.so.1 => /lib64/libacl.so.1 (0x00007f663666e000)
libc.so.6 => /lib64/libc.so.6 (0x00007f66362a1000) 共同调用的库
libpcre.so.1 => /lib64/libpcre.so.1 (0x00007f663603f000)
libdl.so.2 => /lib64/libdl.so.2 (0x00007f6635e3b000)
/lib64/ld-linux-x86-64.so.2 (0x00007f6636ca3000)
libattr.so.1 => /lib64/libattr.so.1 (0x00007f6635c36000)
libpthread.so.0 => /lib64/libpthread.so.0 (0x00007f6635a1a000)
[root@centos7-1 lib64]#ldd /bin/cat
linux-vdso.so.1 => (0x00007fff973d8000)
libc.so.6 => /lib64/libc.so.6 (0x00007f8055e22000) 共同调用的库
/lib64/ld-linux-x86-64.so.2 (0x00007f80561ef000)
[root@centos7-1 lib64]#ldd /bin/bash
linux-vdso.so.1 => (0x00007ffed23c7000)
libtinfo.so.5 => /lib64/libtinfo.so.5 (0x00007f4890fcb000)
libdl.so.2 => /lib64/libdl.so.2 (0x00007f4890dc7000)
libc.so.6 => /lib64/libc.so.6 (0x00007f48909fa000) 共同调用的库
/lib64/ld-linux-x86-64.so.2 (0x00007f48911f5000)
丢失公用库后无法启动解决方法,进入修复模式
1、esc键盘
2、选择CD-ROM
3、选择troubleshooting
4、选择Rescue a CentOS system
5、选择1 (Continue)
6、进入系统开始修复
RPM
1、程序包管理器:
将编译好的应用程序的各组成文件打包一个或几个程序包文件,从而方便快捷地实现程序包的安装、卸载、查询、升级和校验等管理操作。
数据库:var/lib/rpm
程序包名称及版本,依赖关系,功能说明,包安装后生成的各文件路径及校验码信息
执行程序:usr/bin/rpm
2、获取程序包的途径:
(1) 系统发版的光盘或官方的服务器
CentOS镜像:
https://www.centos.org/download/
http://mirrors.aliyun.com
http://mirrors.sohu.com
http://mirrors.163.com
(2) 项目官方站点
(3) 第三方组织:
Fedora-EPEL:Extra Packages for Enterprise Linux
https://mirrors.aliyun.com/
搜索引擎:
http://pkgs.org
http://rpmfind.net
http://rpm.pbone.net
https://sourceforge.net/
3、CentOS系统上使用rpm命令管理程序包
rpm -ivh PACKAGE_file 常用安装选项
-i 安装等同--install
-v 显示过程 verbose
-h 以#显示程序包管理执行进度
[root@centos7-1 ~]#rpm -ivh /mnt/Packages/dstat-0.7.2-12.el7.noarch.rpm
warning: /mnt/Packages/dstat-0.7.2-12.el7.noarch.rpm: Header V3 RSA/SHA256 Signature, key ID f4a80eb5: NOKEY
Preparing... ################################# [100%]
Updating / installing...
1:dstat-0.7.2-12.el7 ################################# [100%]
附加选项:
[install-options]
--test: 测试安装,但不真正执行安装,即dry run模式
--nodeps:忽略依赖关系
--replacepkgs| replacefiles
--nosignature: 不检查来源合法性
--nodigest:不检查包完整性
--noscripts:不执行程序包脚本
%pre: 安装前脚本--nopre
%post: 安装后脚本--nopost
%preun: 卸载前脚本--nopreun
%postun: 卸载后脚本--nopostun
升级:
rpm {-U|--upgrade} [install-options] PACKAGE_FILE...
rpm {-F|--freshen} [install-options] PACKAGE_FILE...
upgrade:安装有旧版程序包,则“升级”
如果不存在旧版程序包,则“安装”
freshen:安装有旧版程序包,则“升级”
如果不存在旧版程序包,则不执行升级操作
rpm -UvhPACKAGE_FILE ...
rpm -FvhPACKAGE_FILE ...
--oldpackage:降级
--force: 强制安装
若不慎删除/bin/rpm文件,进入修复模式rpm -ivh /mnt/Packages/rmp-4.11.3-32.el7.X86_64.rpm --root=/mnt/sysimage/ --replacepkgs
或直接切根安装rpm -ivh /mnt/Packages/rmp-4.11.3-32.el7.X86_64.rpm --replacepkgs
注意:
(1) 不要对内核做升级操作;Linux支持多内核版本并存,因此,对直接安装新版本内核
(2) 如果原程序包的配置文件安装后曾被修改,升级时,新版本的提供的同一个配置文件并不会直接覆盖老版本的配置文件,而把新版本的文件重命名(FILENAME.rpmnew)后保留
4、rpm -qf 查询文件来自哪个包
[root@centos7-1 ~]#rpm -qf /usr/bin/rpm
rpm-4.11.3-32.el7.x86_64
5、rpm -qa 查询所有的包
[root@centos7-1 ~]#rpm -qa tre*
tree-1.6.0-10.el7.x86_64
[root@centos7-1 ~]#rpm -qa |grep "^tre"
tree-1.6.0-10.el7.x86_64
7、检查及导入所需要公钥
检查包的完整性和签名rpm -K|checksigrpmfile
[root@centos7-1 ~]#rpm -K /mnt/Packages/memcached-1.4.15-10.el7_3.1.x86_64.rpm
/mnt/Packages/memcached-1.4.15-10.el7_3.1.x86_64.rpm: RSA sha1 ((MD5) PGP) md5 NOT OK (MISSING KEYS: (MD5) PGP#f4a80eb5)
导入公钥rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
[root@centos7-1 ~]#rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
[root@centos7-1 ~]#rpm --import /mnt/RPM-GPG-KEY-CentOS-7
查看导入的公钥
[root@centos7-1 ~]#rpm -qa 'gpg-pubkey*'
gpg-pubkey-f4a80eb5-53a7ff4b
[root@centos7-1 ~]#rpm -qi gpg-pubkey-f4a80eb5-53a7ff4b
Name : gpg-pubkey
Version : f4a80eb5
Release : 53a7ff4b
Architecture: (none)
Install Date: Sat 22 Sep 2018 02:42:05 AM CST
Group : Public Keys
Size : 0
License : pubkey
Signature : (none)
Source RPM : (none)
Build Date : Mon 23 Jun 2014 06:19:55 PM CST
Build Host : localhost
Relocations : (not relocatable)
Packager : CentOS-7 Key (CentOS 7 Official Signing Key) <[email protected]>
Summary : gpg(CentOS-7 Key (CentOS 7 Official Signing Key) <[email protected]>)
Description :
...
8、rpm -e 包卸载
rpm {-e|--erase} [--allmatches] [--nodeps] [--noscripts] [--notriggers] [--test] PACKAGE_NAME ...
9、rpm -V 包校验
S file Size differs
M Mode differs (includes permissions and file type)
5 digest (formerly MD5 sum) differs
D Device major/minor number mismatch
L readLink(2) path mismatch
U User ownership differs
G Group ownership differs
T mTimediffers
P capabilities differ
yum
YUM: YellowdogUpdate Modifier,rpm的前端程序,可解决软件包相关依赖性,可在多个库之间定位软件包,up2date的替代工具
yum repository: yum repo,存储了众多rpm包,以及包的相关的元数据文件(放置于特定目录repodata下)
文件服务器:
http://
https://
ftp://
file://
1、yum客户端配置文件: yum repolist
查看仓库
1. /etc/yum.conf 为所有仓库提供公共配置
[root@centos7-1 ~]#vim /etc/yum.conf
[main]
cachedir=/var/cache/yum/$basearch/$releasever $basearch 架构 $releasever 版本号
keepcache=0 保留缓存1,不保留0
debuglevel=2
logfile=/var/log/yum.log 日志文件
exactarch=1 是否检查架构
obsoletes=1 过期包
gpgcheck=1 是否检查
plugins=1 是否支持插件
installonly_limit=5 同步并行安装数量
...
2. /etc/yum.repos.d/*.repo 为仓库的指向提供配置
[root@centos7-1 ~]#vim /etc/yum.repos.d/base.repo
[cdrom]
baseurl=file:///mnt 路径为repodata的父目录
gpgcheck=0
name=cdrom repodb 描述信息
[epel]
name=epel
baseurl=https://mirrors.aliyun.com/epel/7/x86_64/
gpgcheck=0
enabled=0 0禁用 1启用
设置别名epel快速禁用
alias disepel=`sed -ri /enabled/s/enabled=0/enabled=1/ /etc/yum.repos.d/base.repo`
alias epel=`sed -ri /enabled/s/enabled=1/enabled=0/ /etc/yum.repos.d/base.repo`
2、yum源
阿里云repo文件:
http://mirrors.aliyun.com/repo/
CentOS系统的yum源
阿里云:https://mirrors.aliyun.com/centos/$releasever/os/x86_64/
清华大学:https://mirrors.tuna.tsinghua.edu.cn/centos/$releasever/os/x86_64/
EPEL的yum源:
阿里云:https://mirrors.aliyun.com/epel/$releasever/x86_64
3、搭建http源
服务端:
[root@centos7-1 mnt]#yum install httpd.x86_64
[root@centos7-1 mnt]#systemctl stop firewalld.service
[root@centos7-1 mnt]#systemctl start httpd
[root@centos7-1 html]#mkdir centos/7/os/x86_64/ -pv
mkdir: created directory ‘centos’
mkdir: created directory ‘centos/7’
mkdir: created directory ‘centos/7/os’
mkdir: created directory ‘centos/7/os/x86_64/’
[root@centos7-1 html]#mount /dev/sr0 /var/www/html/centos/7/os/x86_64/
mount: /dev/sr0 is write-protected, mounting read-only
可挂载光盘或拷贝文件直接到目录
浏览器已经可以访问了http://192.168.32.7/centos/7/os/x86_64/
客户端:
[root@centos7 ~]#vim /etc/yum.repos.d/http.repo
[centos]
name=http_repo
baseurl=http://192.168.32.7/centos/$releasever/os/$basearch
gpgkey=http://192.168.32.7/centos/$releasever/os/$basearch/RPM-GPG-KEY-CentOS-$releasever
yum如果出错:1.检查仓库路径,2.清空缓存
4、其他常用命令
yum repolist 查看仓库
yum history 查看历史记录
yum info history 查看信息
yum history undo 1 返回历史1
yum hisyory redo 1 重做历史1
yum groupinstall "packgrp file" 安装包组
yum search libvirt 查找
yum install samba -y -q 静默安装,自动yes,适合放在脚本里
yum clean all 清空缓存
yum list installed 已安装的包
yum list available 未安装好的包 支持通配符
yum remove package1 卸载程序包 建议用返回历史,卸载比较干净
yum erase package1 卸载程序包
[root@centos7-1 ~]#cd /var/cache/yum/x86_64/7/
base/ cdrom/ centos6/ epel/ extras/ updates/
[root@centos7-17 ~]# yum history
Loaded plugins: fastestmirror, langpacks
ID | Login user | Date and time | Action(s) | Altered
-------------------------------------------------------------------------------
3 | root <root> | 2018-09-22 05:02 | Install | 6
2 | root <root> | 2018-09-22 03:46 | Install | 5 <
1 | System <unset> | 2018-07-10 22:00 | Install | 1362 >
history list
[root@centos7-17 ~]#yum history info 3
Loaded plugins: fastestmirror, langpacks
Transaction ID : 3
Begin time : Sat Sep 22 05:02:08 2018
Begin rpmdb : 1369:53bc6bebfcb633c6707382975ec8db4085ee7c34
End time : 05:02:11 2018 (3 seconds)
End rpmdb : 1375:77a20561e51439092435be69d32430519d71a294
User : root <root>
Return-Code : Success
Command Line : install gcc
Transaction performed with:
Installed rpm-4.11.3-32.el7.x86_64 @anaconda
Installed yum-3.4.3-158.el7.centos.noarch @anaconda
Installed yum-plugin-fastestmirror-1.1.31-45.el7.noarch @anaconda
Packages Altered:
Dep-Install cpp-4.8.5-28.el7.x86_64 @centos6
Install gcc-4.8.5-28.el7.x86_64 @centos6
Dep-Install glibc-devel-2.17-222.el7.x86_64 @centos6
Dep-Install glibc-headers-2.17-222.el7.x86_64 @centos6
Dep-Install kernel-headers-3.10.0-862.el7.x86_64 @centos6
Dep-Install libmpc-1.0.1-3.el7.x86_64 @centos6
history info
[root@centos7-17 ~]#yum history undo 3
Loaded plugins: fastestmirror, langpacks
Undoing transaction 3, from Sat Sep 22 05:02:08 2018
Dep-Install cpp-4.8.5-28.el7.x86_64 @centos6
Install gcc-4.8.5-28.el7.x86_64 @centos6
Dep-Install glibc-devel-2.17-222.el7.x86_64 @centos6
Dep-Install glibc-headers-2.17-222.el7.x86_64 @centos6
Dep-Install kernel-headers-3.10.0-862.el7.x86_64 @centos6
Dep-Install libmpc-1.0.1-3.el7.x86_64 @centos6
....
Complete!
查询未安装包内的文件:基于yum仓库
[root@centos7-1 ~]#rpm -q yum-utils 首先安装yun-utils
[root@centos7-1 ~]#repoquery -ql vsftpd 可查询未安装包vsftpd内的文件
制作自定义的仓库
创建一个文件夹
createrpo /当前目录
把文件拷贝到当前目录
[root@centos7-1 app]#mkdir dadda
[root@centos7-1 app]#createrepo ./dadda
Saving Primary metadata
Saving file lists metadata
Saving other metadata
Generating sqlite DBs
Sqlite DBs complete
虚拟机扫描硬件:
[root@centos7-17 ~]#echo '- - -' >/sys/class/ssi_host/host0/scan
[root@centos7-17 ~]#echo '- - -' >/sys/class/ssi_host/host1/scan
[root@centos7-17 ~]#echo '- - -' >/sys/class/ssi_host/host2/scan
虚拟机虚拟网卡卸载
[root@centos7-1 7]#yum search libvirt
[root@centos7-1 7]#yum remove libvirt-daemon
基于yum源,需配好repo仓库