rpmyum源代码编译

author author     2022-10-16     464

关键词:

程序包的编译与安装

程序源代码-->预编译-->编译-->汇编-->链接-->运行

链接时关联到相关的数据库

编译又分
静态编译:程序文件自带库
动态编译:.so程序文件不自带库,而是共享操作系统的库来编译

API:应用程序接口

编译和开发源程序的接口
    如果一个程序包在两个平台都支持posix标准 即在windows上开发的程序也可以在linux上编译,反之亦然
    pos:可移植操作系统 后改名成posix

    posix标准即是该程序包在两个平台的api接口相同,意味着有关库的接口相同(库的功能相同又互相兼容)

    即编译时要移植api要相同

ABI:应用二进制接口

如果一个编译完的程序如果想要在另一个平台上运行 要保证abi要相同

例如:在linux上编译完的程序移到windows上运行 即使api相同  也不能运行 因为不同操作系统的链接库的格式有可能不同如windows的动态库为.dll结尾linux 的时.so而且不同操作系统的二进制格式可能不同如windows的可执行二进制格式为exe,linux的为elf

查看二进制程序所依赖的库文件
ldd /path/to/file

管理查看本机的库文件
ldconfig 系统重新生成缓存
-p 显示本机一斤缓存的所有可用的库文件即其路径映射关系
-v 显示详细信息

    配置文件
            /etc/ld.so.conf, /etc/ld.so.conf.d/*.conf
    缓存文件
            /etc/ld.so.cache

二进制应用程序的组成部分

    二进制文件  库文件  帮助文件  配置文件
    ------------------  ------------------ 
    是源代码的组成部分   通常放在源代码目录中,不能编译

程序包管理

debian :deb ,dpt
redhat :rpm ,rpm

源代码的命名方式

name-version.tar.gz 

rpm包的命名方式

name-version-release.arch.rpm

version:majoy,minor.release
release:release.os

常见的arch

X86:i386,i486,i586,i686
X86_64: x64 x86_64 amd64
powerpc:ppc

程序包管理工具

yum: rpm包管理器的前端管理工具
dnf: Fredora 22+ rpm包管理工具 用法与yum相同
apt-get: deb包前端管理工具
zyypper:suse全段管理工具

rpm 程序包管理
功能:将编译好的应用程序的各组组成各组文件打包成一个或几个程序包文件,从而方便快捷的实现程序包的安装,卸载,查询,升级,和校验等管理操作

1.程序的组成清单(每个包独有)
文件清单
安装或卸载时运行的脚本(如安装nginx程序包运行时需要使用nginx用户运行,如果系统中没有nginx用户在安装程序包的时候会帮你创建)
2.数据库(公共)
程序包名及其版本
依赖关系
功能说明
安装生成各文件的文件路径机器校验码信息

程序包搜索引擎
http://pkgs.org
http://rpmfind.net
http://prpm.bphone.net

升级操作时注意事项
1.不要对内核执行升级操作,linux支持多内核版本的并存,因此直接安装新版本内容
2.如果原程序包的配置,在安装之后被修改,升级时,新版本提供的同一个配置文件不会直接覆盖原程序配置文件,而是把新版本的配置文件重命名(filename.rpmnew)后保存,但如果配置文件相同则不会新建配置文件

rpm相关命令
rpm{i|install}
-v:显示详细安装信息
-vv:显示更详细的安装信息
-h:显示安装包时的安装进度
rpm -ivh package

--test:测试安装但不真正执行安装操作
--nodeps:忽略依赖关系
--replacepkgs:重新安装
--nosignature:不检查来源合法性
--nodigest:不检查包的完整性
--noscript:不执行包的脚本片段
    pre 安装前执行
    post 安装后执行
    perun 卸载前执行
    postun 卸载后执行

升级
    -U 升级操作,如果安装有旧版本的程序包,则执行升级操作,否则就下载新版程序包
    -F 升级操作,如果没有安装旧版的程序包,则不执行升级操作,也不下载

    --oldpackage 降级操作
    --force 强制

查询rpm包

    rpm {-q|--query}[selection-options][query-options]

        [selection-options]
            -a:查询已安装的所有包
            -f:查看指定的文件由哪个程序包安装完成
            -p:/path/to/packfile 查询未安装的程序包文件

        --whatprovides capability 查询指定的能力由那个程序包所提供
                    如   /bin/ls
        --whatrequires capability 查询指定的能力被哪些包所依赖
                    如  /etc/cat 

        [query-options]

            --changelog:查询已安装rpm包的changelog(改变日志)
            -d:查看指定rpm包的帮助文件
            -c:查看指定rpm包的配置文件
            -i:查看指定rpm包的信息
            -l:查看指定程序包安装后生成的所有文件
            --script:查看指定rpm的脚本片段
            -R:查询指定程序包所依赖的capability
            --provides 查询指定程序包所提供的capability
                例如 rpm -qR php-common
                     rpm --provides php-common

卸载
    rpm {-e|--erase}

        --scripts
            per
            post
            perun
            postun
        --test
        --nodeps

检验 rpm包是否发生了更改

    rpm -V (zsh) 跟程序名

        S M 5 D L U G T D 
        S 文件大小发生了改变
        M 文件的模式(包括许可和文件类型)发生了改变
        5 MD5校验码不一样
        D 设备主从设备号发成了改变
        L 符合连接发生了改变
        U 文件的属主发生了改变
        G 文件的属组发生了改变
        T 文件的修改时间发生了改变
        P 功能发生改变

数据库的重建(数据库损坏或文件损坏)/var/lib/rpm
    rpm {--initdb|--rebuilddb}

            --initdb 初始化
                如果实现不存在数据库则创建否则不执行任何操作
            --rebuilddb
                无论当前有无数据库,直接创建数据库
    其是通过读取每个文件的元数据进行构建

导入GPG密钥 --import,-K

        rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY

yum源

yum的安装rpm包过程

    yum在安装rpm时,根据配置文件指定的url路径去寻找指定的地址,此时相关的文件服务器需要开启文件共享接口,在下载文件之前,先下载一份文件服务器上仓库的元数据文件

    (repodata目录下的一些元数据文件到客户端文件的cache(/var/cache/yum)中)

    之后yum在分析这些元数据文件 有无我们需要的rpm包及其相关依赖的包,如果相关依赖的包中有部分依赖的包我们已经下载,则不会重复下载因为在下载前yum会检查本地
    是否有那些依赖包。安装完成后卸载装好的程序包缓存,但是一般都不去删除元数据文件。

    不删除元数据文件 这样会导致一个问题如果仓库现在又更新除了新的文件,或者除了新版本的文件,或出现新的依赖关系,那我们客户端如果想要下载新版本的文件但是无法下载这显然时不可以的
    所以我们每次去请求下载程序包的时候都会请求元数据信息如果我们每次都请求那我们不删除元数据信息又有什么意义呢 在服务器仓库中会提供一个文件 他将文件中的每个元数据文件的特征码记录下来
    如果这些文件中的内容发生了变化,那其中的特征码坑定发生了改变,所以我们请求的元数据信息其实不是元数据文件而是请求一个校验码,将其与缓存中的元数据文件进行对比,如果两个文件的特征码相同,则不下载元数据文件,否则则下载。

    如 /var/cache/yum/X86_64/7/base 中repomd.xml记录的就是特征码 primary的记录的就是文件相关的元信息

在rpm或者使用yum工具安装的过程中如果有对安装修改文件卸载等操作都会建立一个事务,linux中只支持一个这样的事务运作,也就是说在下载的时候不能再打开一个终端进行更新卸载下载

关于yum的配置文件注意
在一个仓库中如果有多个url如 [base]中有多个下载路径,系统默认是随机选择一条路径进行下载,但也可以按顺序指定,域名、相关命令中会讲到

仓库的定义

[repositoryID]
name=some name for this repository
baseurl=url
enabled={0|1} 默认为1 可不写enabled
gpgcheck={0|1} 指定是否检测文件的来源合法性文件的完整性,此项为一时,如果没有指定gpgkey则无法安装成功
gpgkey=url
failovermethod={roundrobin|priority} 默认为随机(roundrobin) url使用priority按指定的url顺序查找

yum的repo中可用变量

    $releasever
    $arch
    $basharch

如 http://mirror.122.com/centos/$releasever/$basharch/os

    灵活根据发行版下载程序包

yum的相关命令

安装 :yum install package1 [package2] [..]
重装 :    reinstall package1 [package2] [..] 
升级 :    update [package1] [package2] [..]
降级 :       downgrade package1 [package2]
卸载 :    remove package1 ..

检查升级
check-update
查看程序包信息(包括没装的)
info[..]
清理本地缓存
clean[packages|metadata|all|..]
构建缓存
makecache
搜索
search string1 以指定的关键字
查看指定包所依赖的capability
deplist package1
查看yum事务历史
history [info|list|package=list|stats(统计)]
包组管理的相关命令
groupinstall group1 [group2]
groupupdate ~
grouplist ~
groupremove ~
groupinfo ~

若显示的是中文 可以使用中文安装

如 groupinstall "开发工具"

yum命令行选项
--nogpgcheck 禁止进行gpgcheck
-y 自动回答为yes
-q 静默模式
--disablerepo=repoidglob 临时禁用指定的repo
--enablerepo=repoidglob 临时启用指定的repo
--noplugins 禁用所有插件

源代码编译

安装包 gcc  gcc-c++ glibc devel 

源代码的组成格式
    多文件:文件中的代码中,很可能出现跨文件依赖关系
        可以通过make来解决
    c,c++:make(configure --> makefile.in --> makefile)
    java:maven

编译安装三步骤

    一 
        ./configure

                1.通过选项传递参数,指定启用的特性,安装路径等,执行时会参考用户的指定以及makefile.in文件生成makefile
                2.检测依赖的外部环境
    二
        make
                根据生成的makefile文件构建应用程序
    三
        make install

开发工具

    autoconf:生成 configuer   
    automake:生成 makefile.in 

安装先看install或者readme

编译c源代码
前提:提供开发工具,及开发环境、
开发工具:make gcc等
开发环境:开发库,头文件
glibc:标准库

    通过包组提供开发组件
        centos6 "Development Tools" "Server Platform Development"

第一步

    一. configure脚本
        选项: 指定安装位置,指定启用特性
            安装路经指定
                --perfix==/path/to/somewhere 指定默认安装路径 否则默认安装路径为/usr/local
                --sysconfdir=/path/to/somewhere 指定配置文件安装位置

                optional feature :可选特性

                optional package :可选包
                        --with-package
                        --without-package       指定安不安装相关依赖包

    二. make

    三. make install

安装后的配置
因为是源码包 所以安装路径都是我们指定的 所以我们要指明相关配置

    1.导出二进制程序至PATH环境变量中
        编译/etc/profile.d/name.sh
            export PATH=/path/to/bin:$path
            因为执行程序在bin中 所以路径上有bin

    2.导出库文件路径
        编译/etc/ld.so.conf.d/name.conf
            添加新的库文件所在目录至此文件中
                    例如 在配置文件中添加 /usr/local/apache/lib/

    3.导出头文件 一般都在(/usr/include)
        基于链接的方式实现
            ln -s /usr/local/apache/include /usr/include/apache

    4.导出帮助文件
        centos6 /etc/man.config
            添加一行MANPATH /usr/local/apache/man
        centos7 /etc/man_db.conf
            添加一行MANDATORY_MANPATH /usr/local/apache/man

软件包安装方法rpm包介绍rpmyum

...二进制的。 rpm工具。类似Windows的exe源码包 就是源代码。需要编译器编译可执行文件Yum工具操作的是rpm包。Yum工具是Python开发。自动安装依赖的包。Yum就像手机应用宝找到什么下载安装 rpm包介绍设置光驱并挂载650)this... 查看详情

rpmyum介绍

RPM:RedHatPackageManager的简称,是一种数据库记录的方式的管理机制。当需要安装的软件的依赖软件都已经安装,则继续安装,否则不予安装。特点:1.已经编译并打包完成2.软件的信息记录在数据库下,方便查询、升级与安装但有... 查看详情

软件包管理3-----基本知识rpmyum(代码片段)

RPM包管理每个RPM包都分为两部分1文件列表filelist2元数据metadata:文件大小属性,描述信息,依赖性,等查看包带不带脚本rpm-qp--scripts包名如果包已经在系统中了就会在数据库(公共):/var/lib/rpm里有这个包的信息比如程序包名称... 查看详情

软件包管理2-----基本知识rpmyum

rpm包管理器程序包管理器;功能:经编译好的应用程序的各组成文件打包一个或几个程序包文件,从而方便快捷地实现程序包的安装,卸载,查询,升级和效验等管理操作包文件组成rpm包内的文件rpm的元数据,如名称,版本,依... 查看详情

第四周学习心得rpmyum和lvm管理的相关概念及理解(代码片段)

包的组成:二进制文件、库文件、配置文件、帮助文件程序包管理器:debian:deb文件,dpkg包管理器redhat:rpm文件,rpm包管理器rpm包命名方式:name-VERSION-release.arch.rpm例:bash-4.2.46-19.el7.x86_64.rpmVERSION:major.minor.releaserelease:release.OS常见... 查看详情

rpmyum安装命令

参考技术ARPM。yum命令是在Fedora和RedHat以及SUSE中基于rpm的命令软件包管理器。可以使系统管理人员交互和自动化地更新与管理RPM软件包,能够从指定的服务器自动下载RPM包并且安装,可以自动处理依赖性关系。 查看详情

第一章安装linux,rpmyum,systemctl

时间挺长了,补充下第二节课,虚拟机软件及linux系统安装;RPM、YUM安装软件及systemctl初始化进程最有用的需掌握的几条管理服务的命令systemctlstart启动systemctlstop停止systemctlrestart重启systemctlstatus查看systemctlenable启动项 查看详情

rpmyum源码软件安装

linux当中有三种安装的方式:一、rpm包安装  zlib-1.2.3-29.el6.x86_64.rpm软件包名——主版本号——次版本号——发布版本号——系统版本——cpu架构——包后缀名如何选择适合自己系统的版本的rpm包1、优先在系统安装的光盘IS... 查看详情

rpmyum相关命令及参数(代码片段)

RPM命令我们可以直接使用rpm命令,对软件包进行一些操作。安装rpm–ivh<package_name>rpm–Uvh<package_name>#没有安装过,则安装rpm–Fvh<package_name>#没有安装过,则忽略-nodeps忽略依赖问题,一般仅用于测试-iinstall;-v详细信... 查看详情

linux基础入门软件安装rpmyum与源码安装详解(代码片段)

8.软件RPM包安装8.1rpm安装rpm[选项]软件包名称主选项-i安装-e卸载-U升级-q查找辅助选项-ⅴ显示过程-h--hash查询-a-all查询所有安装的包-f-file查询拥有<-file的包-p查询一个没有安装的包卸载-nodeps忽略依赖安装的时候要把centos7的iso文... 查看详情

2018-1-85周1次课rpmyum源码包

7.1安装软件包的三种方法安装软件包的三种方法:·rpm工具·yum工具·源码包难度:源码包>rpm工具>yum工具7.2rpm包介绍·rpm工具使用设置光驱并挂载在虚拟机光盘位置,设置光盘连接后,进入系统中挂载光驱[[email protected]&nb... 查看详情

day-20:安装软件包及rpmyum的介绍

系统下是如何安装软件:windows下是.exe的下一步安装法:那linux如何安装软件呢:7.1:linux安装软件包的方法:rpm yum  源码包.2-7.3rpm工具rpm包介绍(准备工作)挂载系统安装盘镜像(挂载到一个空目录,此处/mnt/目录未使... 查看详情

day-20:安装软件包及rpmyum的介绍

系统下是如何安装软件:windows下是.exe的下一步安装法:那linux如何安装软件呢:7.1:linux安装软件包的方法:rpm yum  源码包.2-7.3rpm工具rpm包介绍(准备工作)挂载系统安装盘镜像(挂载到一个空目录,此处/mnt/目录未使... 查看详情

centos6.8下没有yum命令解决方法(报错:-bash:yum:commandnotfound)(代码片段)

1、去http://mirrors.163.com/centos/6/os/x86_64/Packages/地址下载4个rpm安装包:python-iniparse-0.3.1-2.1.el6.noarch.rpmyum-3.2.29-81.el6.centos.noarch.rpmyum-metadata-parser-1.1.2-16.el6.x86_64.rpmyum-plugin-fast 查看详情

redhatyum源配置(代码片段)

...ackages/下载所需文件,所需的文件为:rpm-4.11.3-25.el7.x86_64.rpmyum-metadata-parser-1.1.4-10.el7.x86_6python-urlgrabber-3.10-8.el7.noarch.rpmyum-3.4.3-154.el7.centos.noarch.rpmyum 查看详情

rpmyum;磁盘储存与文件系统;网络基础

rpm包命名方式:name-VERSION-release.arch.rpm例:bash-4.2.46-19.el7.x86_64.rpm包之间:可能存在依赖关系,甚至循环依赖?解决依赖包管理工具:yum:rpm包管理器的前端工具dnf:Fedora18+rpm包管理器前端管理工具配置文件:/etc/ld.so.conf,/etc/ld.so.con... 查看详情

dockerinit起步

#yuminstallwgethttp://fedora.mirror.nexicom.net/epel/6/x86_64/epel-release-6-8.noarch.rpmyum-yinstallepel-release-6-8.noarch.rpmyum-yinstalldocker-io#wgetinstallyuminstall-ylibcgrouplxcservicecgconfig 查看详情

linux程序包管理

Linux程序包管理RPM包基础RPMYUM编译安装概述Linux上的程序包管理,是我们的必备技能,本文将从三个视角:rpm、yum、源码编译来浅析Linux的程序包管理。首先,我们来看下本文的主要内容:- 程序包的命名- RPM: 程序包管... 查看详情