Linux初级:软件包管理(差编译安装未整理)

软件包管理

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仓库

猜你喜欢

转载自blog.csdn.net/weixin_40001704/article/details/82819651