rpm及deb包管理

      编译安装源代码
      包的组成
      rpm包管理
      yum使用简介
      Ubuntu软件包管理

程序包编译

程序源代码 --> 预处理 --> 编译 --> 汇编 --> 汇编 --> 链接
静态编译: .a
动态编译: .so

动态和静态链接的区别
动态:
把依赖做一个动态链接,占用空间少,易升级 共享
静态:
复制依赖到包嵌入到本地,升级难,需要重新编译,空间大 独立
 
编译安装的源码一般有两类,C和java
C和C++编译常用make项目管理器
configure脚本 --> Makefiel.in --> Makefiel
C源码编译过程详解
一、    .configure 通过选项传递参数指定特性和安装路径等,执行时会参考用户定义的值Makefile.in文件生成的
Makefiel;检查依赖的外部环境,如gcc等程序包
二、    make 根据Makefile文件构建应用程序
三、    make install 复制文件到相应程序
注: 配置前查看INSTALL,README信息

java: maven

编译安装C源代码准备事项

准备:提供开发工具及开发环境

开发工具:make, gcc等

开发环境:开发库,头文件

glibc:标准库

实现:通过“包组”提供开发组件
Development Tools
Server Platform Development

生产实践:(基于最小化安装的系统)
[Centos@localhost ~]# yum install gcc gcc-c++ glibc glibc-devel pcre pcre-devel openssl openssl-devel systemd-devel zlib-devel vim lrzsz tree screen lsof tcpdump wget ntpdate net-tools iotop bc zip unzip

编译安装后导入到PATH变量中
编辑文件/etc/profile.d/NAME.sh
export PATH=/PATH/TO/BIN:$PATH

包的组成

二进制文件、库文件、配置文件、帮助文件

包的命名方式
arch平台号如x86_64、i386
noarch:通用

注:一般包是有依赖关系的,不建议单独安装,建议使用包依赖管理工具安装
centos: yum dnf
ubuntun: apt

库文件
ldd [OPTION]… FILE…查看命令动态库依赖

[root@centos7 CentOS7]# ldd /bin/cat
        linux-vdso.so.1 =>  (0x00007ffd12841000)
        libc.so.6 => /lib64/libc.so.6 (0x00007fe2da3e4000)
        /lib64/ld-linux-x86-64.so.2 (0x00007fe2da7b1000)

管理库文件
[root@centos7 CentOS7# /sbin/ldconfig -p 查看在使用的共享库
[root@centos7 CentOS7# ldconfig 加载配置问阿金到指定库文件

包文件组成(每个包独立)
元数据:名称,脚本,依赖,描述
安装或卸载运行的脚本

程序包来源

centos镜像官方
https://www.centos.org/download/
http://mirrors.aliyun.com
http://mirrors.sohu.com
http://mirrors.163.com
镜像搜索引擎网址
http://pkgs.org
http://rpmfind.net
http://rpm.pbone.net
https://sourceforge.net/
扩展镜像epel源

rpm包管理

安装 rpm {-i|–install} [install-options] PACKAGE_FILE…
[ -i|-- intall ]

- i | --install 
-v: 简洁
-vv: 详细
-h:显示执行进度
常用选项: rpm -ivh *.rpm
[ install -opeons]
--test: 测试安装
--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:有旧就升级,否则不执行
   --oldpackage:降级
   --force:强制安装
常用选项
    rpm -Uvh *.rpm
    rpm -Fvh *.rpm

注:不对内核升级,可以linux多内核共存。避免依赖错误等
升级被修改过的程序包文件后,新版配置文件会和老版并存,并把新版重命名为(FILENAME.rpmnew)后保留

查询 rpm {-q|–query} [select-options] [query-options]

[select -options]
-a: 所有包
-f: 查看指定文件的程序包
-p rpmfile: 针对未安装的程序包做查询操作
--whatprovides CAPABILITY:查询指定CAPABILITY有那个包提供
--whatrequires CAPABILITY:查询指定CAPABILITY被那个包依赖

[query-options]
--changlong: 查询rpm包的changgelog
-c: 查询程序的配置文件
-d: 查询程序文档
-i: information
-l:查看指定程序包安装后生成的所有文件
--scripts:程序包自带的脚本
--provides:指定包提供的CAPABILITY
-R:查询指定包依赖的CAPABILITY

常用查询方法:
    -qi PACKAGE ; -qf FILE, -qc PACKAGE, -ql PACKAGE, -qd PACKAGE
    -qpi PACKAGE_FILE,     -qpl PACKAGE_FILE,...
    -qa

包卸载:

rpm {-e|--erase} [--allmatches] [--nodeps] [--noscripts] [--notriggers] [--test] PACKAGE_NAME ...
当包卸载时,对应的配置文件不会删除, 以FILENAME.rpmsave形式保留

包校验

rpm {-V|--verify} [select-options] [verify-options]

导入所需要公钥

rpm -K|checksig rpmfile 检查包的完整性和签名
rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
CentOS 7发行版光盘提供:RPM-GPG-KEY-CentOS-7
rpm -qa “gpg-pubkey*”

数据库

rpm包数据库(公共) /var/lib/rpm  :建议备份
    程序包名称版本
    依赖关系
    功能说明
    包装后的路径和校验码
rpm {-initdb|--rebuilddb}
    initdb:初始化,不存在数据库,就建立,否则不执行操作
    rebuilddb:重建已安装的包头索引目录

如果不小心删除了某已知的数据文件目录,可用以下方式恢复
以误删除tree的/usr/bin/tree为例

# rpm2cpio /misc/cd/BaseOS/Packages/tree-1.7.0-15.el8.x86_64.rpm  |cpio -tv
-rwxr-xr-x   1 root     root        83544 May 11 23:54 ./usr/bin/tree
drwxr-xr-x   1 root     root            0 May 11 23:54 ./usr/lib/.build-id
drwxr-xr-x   1 root     root            0 May 11 23:54 ./usr/lib/.build-id/d8
lrwxrwxrwx   1 root     root           24 May 11 23:54 ./usr/lib/.build-id/d8/6d516d7cb07fb9334cb268af808119e33a5ac5 -> ../../../../usr/bin/tree
drwxr-xr-x   1 root     root            0 May 11 23:54 ./usr/share/doc/tree
-rw-r--r--   1 root     root        18009 Aug 13  2004 ./usr/share/doc/tree/LICENSE
-rw-r--r--   1 root     root         5620 Apr 22  2014 ./usr/share/doc/tree/README
-rw-r--r--   1 root     root         4430 Apr 24  2014 ./usr/share/man/man1/tree.1.gz
221 blocks

# rpm2cpio /misc/cd/BaseOS/Packages/tree-1.7.0-15.el8.x86_64.rpm  |cpio -idv /root/usr/bin/tree
./usr/bin/tree
221 blocks

[root@Centos7 ~/usr/bin]#mv /root/usr/bin/tree /usr/bin/

[root@Centos7 ~/usr/bin]#tree -L 2 /root  
/root
├── anaconda-ks.cfg
├── httpd-2.4.25
│   ├── ABOUT_APACHE
│   ├── acinclude.m4
│   ├── Apache-apr2.dsw
│   ├── Apache.dsw
│   ├── apache_probes.d
│   ├── ap.d
│   ├── build

注: 只针对较小的程序,如果程序过大可能会有额外的版本或兼容性等问题。

yum程序包管理

yum: rpm包管理解决软件包的依赖性
文件服务器:
http://
https://
ftp://
file://

配置文件组成:
/etc/yum.conf:为所有仓库提供公共配置
/etc/yum.repo.d/*.repo: 为仓库的指向提供配置

仓库指向配置

[repositoryID]
name=Some name for this repository
baseurl=url://path/to/repository/
enabled={1|0}
gpgcheck={1|0}
gpgkey=URL
enablegroups={1|0}
failovermethod={roundrobin|priority}
    roundrobin: 随机挑选,默认值
    priority: 按顺序访问
cost=         默认为1000

yum仓库指向可用变量

      $releasever: 当前OS的发行版的主版本号
      $arch: 平台,i386,i486,i586,x86_64等
      $basearch:基础平台;i386, x86_64
      Y U M 0 − YUM0- YUM0YUM9:自定义变量

yum-config-manager(yumg配置文件管理员)

[root@Centos7 /apps]#yum-config-manager --disable 192.168.146.147_IOS_CentOS7 #添加仓库  

yum-config-manager --disable “仓库名" 禁用仓库  

yum-config-manager --enable “仓库名” 启用仓库  

 

yum命令使用
yum [options] [command] [package …]

显示仓库列表

yum repolist [all|enabled|disabled]  

显示程序包:

yum list  
yum list [all | glob_exp1] [glob_exp2] [...]  
yum list {available|installed|updates} [glob_exp1] [...]  

安装程序包:

yum install package1 [package2] [...]  
yum reinstall package1 [package2] [...] (重新安装)  

升级程序包:

yum update [package1] [package2] [...]
yum downgrade package1 [package2] [...] (降级)  

检查可用升级:

yum check-update  

卸载程序包:

yum remove | erase package1 [package2] [...]

查看程序包information:

yum info [...]

查看指定的特性(可以是某文件)是由哪个程序包所提供:

yum provides | whatprovides feature1 [feature2] [...]
清理本地缓存:
清除/var/cache/yum/$basearch/$releasever缓存
yum clean [ packages | metadata | expire-cache | rpmdb | plugins | all ]
构建缓存:
yum makecache  

搜索:yum search string1 [string2] […]

以指定的关键字搜索程序包名及summary信息
查看指定包所依赖的capabilities:
yum deplist package1 [package2] [...]
查看yum事务历史:
yum history [info|list|packages-list|packages-info|
summary|addon-info|redo|undo|
rollback|new|sync|stats]
yum history
yum history info 6
yum history undo 6  

安装及升级本地程序包:

yum localinstall rpmfile1 [rpmfile2] [...]
(用install替代)
yum localupdate rpmfile1 [rpmfile2] [...]
(用update替代)

包组管理的相关命令:

yum groupinstall group1 [group2] [...]
yum groupupdate group1 [group2] [...]
yum grouplist [hidden] [groupwildcard] [...]
yum groupremove group1 [group2] [...]
yum groupinfo group1 [...]

yum的命令行选项:

--nogpgcheck:禁止进行gpg check
-y: 自动回答为“yes”
-q:静默模式
--disablerepo=repoidglob:临时禁用此处指定的repo
--enablerepo=repoidglob:临时启用此处指定的repo
--noplugins:禁用所有插件

日志 :/var/log/yum.log
缓存目录: /var/cache/yum/

yum仓库配置常见错误
路径错误,网络错误,配置文件格式
 

Ubuntu软件包管理

预编译配合着文件扩展.debj结尾,类似于rpm文件
软件包管理工具dpkg和rpm一样无法解决依赖关系
APT:包依赖解决工具 ,基于C/S架构
apt工作原理:在服务端同步所有DEB包信息并解压到本地,一旦服务端的有变化,需要使用分析工具genbasedir同步新的信息到本地;一旦客户端执行操作时,会生成本地DBEcache和客户端中的数据库信息比较,从而知道软件包软件版本,安装情况等。
 
dpkg使用

dpkg -i package.deb 安装包
dpkg -r package 删除包,不建议,不自动卸载依赖于它的包
dpkg -P package 删除包(包括配置文件)
dpkg -l 列出当前已安装的包,类似rpm -qa
dpkg -l package 显示该包的简要说明,类似rpm –qi
dpkg -L package 列出该包中所包含的文件,类似rpm –ql
dpkg -S <pattern> 搜索包含pattern的包,类似rpm –qf
dpkg -s package 列出该包的状态,包括详细信息,类似rpm –qi
dpkg --configure package 配置包,-a 使用,配置所有没有配置的软件包
dpkg -c package.deb 列出 deb 包的内容,类似rpm –qpl
dpkg --unpack package.deb 解开 deb 包的内容

获取更多: man dpkg
示例:

dpkg -l  列出系统上安装的所有软件包
dpkg -L bash  列出系统上安装的所有软件包
dpkg -S /bin/bash  查看/bin/bash来自于哪个软件包
dpkg -i /mnt/cdrom/pool/main/z/zip/zip_3.0-11build1_amd64.deb
安装本地的 .deb 文件
dpkg -r zip 卸载软件包

注意:一般建议不要使用dpkg卸载软件包。因为删除包时,但依赖于它的任何包仍将安装,并且可能无法再正常运行

apt管理器和apt-get命令对比

apt 命令被取代的命令命令的功能
apt installapt-get install安装软件包
apt removeapt-get remove移除软件包
apt purgeapt-get purge移除软件包及配置文件
apt updateapt-get update刷新存储库索引
apt upgradeapt-get upgrade升级所有可升级的软件包
apt autoremoveapt-get autoremove自动删除不需要的包
apt full-upgradeapt-get dist-upgrade在升级软件包时自动处理依赖关系
apt searchapt-cache search搜索应用程序
apt showapt-cache show显示安装细节
apt installapt-get install安装软件包
apt removeapt-get remove移除软件包
apt purgeapt-get purge移除软件包及配置文件
apt updateapt-get update刷新存储库索引
apt upgradeapt-get upgrade升级所有可升级的软件包
apt autoremoveapt-get autoremove自动删除不需要的包
apt full-upgradeapt-get dist-upgrade在升级软件包时自动处理依赖关系
apt searchapt-cache search搜索应用程序
apt showapt-cache show显示安装细节
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值