软件包管理(rpm,yum,源码安装)

API:Application Programming Interface  ==>软件开发接口

    POSIX :Portable OS

程序源代码 –> 预处理 –> 编译 –> 汇编 –>链接

    静态编译 : .a

    共享编译(动态编译):.so

ABI:Programming Binary Interface ==>软件运行接口

    Windows和linux不兼容

    库级别的虚拟化:

        linux:WINE

        Windows:Cywin

C程序编译过程

blob.png

JAVA程序运行

blob.png

开发语言

    C

    C++

运用级开发

    java , delphi , python, go  , php , perl,  ruby

包管理器

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

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

程序包管理器:

    debian:deb文件===》dpkg包管理器

    redhat:rpm文件===》rpm包管理器 ===》 redhat package manager

因为我们现在主流用的是centos,所以我们主要来看看rpm包管理器

包命名

源代码: name-VERSION.tar.gz|bz2|xz

    VERSION:major(主).minor(次).relsase

rpm包命名方式:

    name-VERSION-release.arch.rpm

    例:bash-4.2.46-19.el7.x86_64.rpm

    name:bash    

    VERSION:4.2.46

    release:19.el7 (release.OS)

    arch:x86_64

常见的arch:

x86: i386, i486, i586, i686

x86_64: x64, x86_64, amd64

powerpc: ppc

包:分类和拆包

        Application-VERSION-ARCH.rpm:  主包

        Application-devel-VERSION-ARCH.rpm  开发子包

        Application-utils-VERSION-ARHC.rpm  其它子包

        Application-libs-VERSION-ARHC.rpm  其它

包之间:可能存在依赖关系,甚至循环依赖(装A包时,提示要装B,C包,装B包时,又提示要装X包…..)

解决依赖包管理工具:

    yum:rpm包管理器的前端工具

    apt-get:deb包管理器前端工具

    zypper:suse上的rpm前端管理工具

    dnf:fedora 18+ rmp包管理器前端管理工具

库文件file

查看二进制程序所依赖的库文件

    ldd  /path/to/binary_file

管理查看本机装载的库文件

     ldconfig

/sbin/ldconfig  -p  :显示本机已经缓存的所有可用库文件名妓文件路径映射关系

      配置文件: /etc/ld.so.conf , /etc/ld.so.conf.d/*.conf

      缓存文件: /etc/ld.so.cache 

程序包管理器:

        功能:将编译好的应用程序的各组成文件打包一个或几个程序包文件,从而方便快捷的实现

程序包的安装,卸载,查询,升级和校验等管理操作

  1. 包文件组成(包独有内的文件)

    RPM包内的文件

    RPM的元数据,如名称,版本,依赖性,描述等

    安装或卸载时运行的脚本

2.数据库(公共)

    程序包名称及版本

    依赖关系

    功能说明

    包安装后生成的各文件路径及校验码信息

程序包的来源

管理程序包

    使用包管理器:rpm

    使用前端工具:yum,dnf

获取程序包途径:

    1.系统发行版的光盘或官方的服务器

       CentOS 镜像:

            https://www.centos.org/download/

            http://mirrors.aliyun.com

            http://mirrors.sohu.com

            http://mirrors.163.com

    2.项目官方站点

    3.第三方组织

        搜索引擎:

            http://pkgs.org

            http://rpmfind.net

            http://rpm.pbone.net

            https://sourceforge.net/

     4.自己制作       

注意:要检查其合法性: 来源合法性,程序包的完整性

rmp包管理


rpm -e rpm -qa rpm -ql rpm -qf 
rpm -i 

安装:

   rpm

    -i或–install [install-options] package_file

    -v:显示详细过程

    -vv:显示更详细的过程

    -h:以#显示程序包管理执行进度

rmp -ivh  package_file…

  blob.png  

显示yum-3.4.3-132.el7.centos.0.1.noarch 已安装

[install-options]

        –test:测试安装,但不真正执行安装;dry run模式

        –nodeps:忽略依赖关系

        –replacepkgs|replacefiles

        –nosignature:不检查来源合法性

        –nodigest:不检查包完整性

        –noscipts:不执行程序包脚本片段

                %pre :安装前脚本;–nopre

                %post:安装后脚本;–nopost

                %preun:卸载前脚本;–nopreun

                %postun:卸载后脚本;–nopostun

rpm包升级:

-U 或–upgrade [install-options]package_file

-F 或–freshen [install-options]package_file

    upgrade:安装有旧版程序包,则升级

           如果不存在旧版程序包,则安装

    freshen:安装有旧版程序包,则升级

           如果不存在旧版程序包,则不执行升级操作

rmp -Uvh  packa_file…

rmp -Fvh packa_file…

blob.png

–oldpackage:降级

–force:强行升级

注意:1.不要对内核做升级操作;linux支持多内核版本并存,因此,会直接安装新版本内核

    2.如果原程序包的配置文件安装后曾被修改,升级时,新版本的提供的同一个配置文件

并不会直接覆盖老版本的配置文件,而把新版本的文件重命名(filename.rpmnew)后保留

卸载:

    rmp -e packa_name

    –allmatches :卸载所有品牌指定名称的程序包的各版本

    –nodeps:忽略依赖关系

    –test:测试卸载

blob.png

rpm包查询   

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

[select-options]

    -a:所有包

    -f:查看指定的文件由哪个程序包安装生成

    -p rpmfile:针对尚未安装的程序包文件做查询操作

    –whatprovides CAPABILITY :查询指定的CAPABILITY由哪个包所提供

    –whatrequires CAPABILITY :查询指定的CAPABILITY被哪个包所依赖

blob.png

rmp2cpio 包文件|cpio -itv 预览包内文件

rpm2cpio 包文件|cpio –id “*.conf” ”     

blob.png

blob.png

包查询

[query-options]

–changlog:查询rpm包的changelog

-l   –list:程序安装生存的全部文件列表

-i –info:程序包的相关信息,版本号,大小,所属的包组等等

-c  –configfiles :查询指定的程序提供的匹配文件

-d –docfiles 查询指定的程序包提供的文档

–provides:列出指定的程序包提供的所有CAPABILITY

-R –requires:查询指定的程序包的依赖关系

–scripts:查询程序包自带的脚本片段

查询的用法

-qi packag 包名

-qf file 文件名

-qc package

-ql package

-qd package

-qpi package_file

-qpl package_file

-qa

blob.png

blob.png

校验:

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

    S file Size differs 文件大小

    M Mode differs (includes permissions and file type)  权限

    5 digest (formerly MD5 sum) differs  MD5码

    D Device major/minor number mismatch   主次设备号

    L readLink(2) path mismatch

    U User ownership differs  属主

    G Group ownership differs   属组

    T mTime differs  时间戳

    P caPabilities differ

包来源合法性验证:RSA

包来源完整性验证 :SHA256

公钥加密:

    对称加密:加密,解密使用同一密钥

    非对称加密:密钥是成对的

        public key:公钥,公开所有人

        secret key:私钥,不能公开

导入所需要公钥:

    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*

 blob.png   

rpm数据库

数据库重建

    /var/lib/rpm

rpm –initdb:初始化

    如果事先不存在数据库,则新建

    否则,不执行任何操作

rpm –rebuilddb:重建

    无论当前存在与否,直接重新创建数据库

blob.png

yum:yellowdog update modifier,prm的前端程序,用来解决软件包相关依赖性,可以在多个

库之间定位软件包,up2date的替代工具

    yum repository: yum repo ,存储了众多rpm 包,以及包的相关的元数据文件(放置于特定目录repodata下)

文件服务器:

    ftp://

    heep://

    file:///

yum配置文件

yum客户端配置文件:

    /etc/yum.conf :为所有仓库提供公共配置

    /etc/yum.repos.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 ,意为随机挑选;

    cost= 默认为1000

  

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

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

显示仓库列表

    yum repolist [all|enabled|diasbale]

显示程序包:

    list 

    yum list [all|glob_exp1|….]

    yum list [available|installed|updates]

blob.png

安装程序包

  yum  install package1 [package2]….

  yum reinstall package1 [package]….重新安装

升级程序包

 yum update package1 [package2]….

 yum downgrade package1 [package2]….  降级

检查可用升级

 yum check-update

卸载程序包

 remove | erase package1 [package2]….

查看程序包information   

    yum info […]

blob.png    

查看指定的特性(开始某文件)是由哪个程序包提供

    yum provides|whatprovides feature1 [feature2]….

blob.png

清楚本地缓存

   yum clean[packages |metadate |expire-cache|rpmdb|plugins|all]

blob.png

构建缓存

    yum makecache

搜索:search string1 [string2]…

    以指定的关键字所搜程序包名及summary信息

查看指定包所依赖的capabilities:

     yum deplist package1…..

blob.png

查看yum事务历史

   yum history [info|list|packages-lsit|packages-info|summary|addon-info|redo|undo|rollback|new|sync|stats]

   yum history

   yum history info 6==>历史6的详细信息

   yum history undo 6==>撤销历史6中的操作,如果历史6是安装就卸载,如果历史6是卸载就安装

日志:/var/log/yum.log

安装及升级本地程序包

    yum install rpmfile1….

    yum undate rmpfile1…

包组管理的相关命令:

    groupinstall group1….
    groupupdate group1….

    grouplist [hidden] [groupwildcard]….

    groupremove group1….

    groupinfo group…

如何使用光盘当作本地yum仓库

    1.挂载光盘之某目录,例如/media/cdrom

        #mount /dev/cdrom /media/cdrom

    2.创建配置文件

        [centos7]

        name=

        baseurl=

        gpgcheck=

        enabled=

blob.png

blob.png

yum的命令行选项

    –nogpgcheck:禁止进行pgp check

    -y:自动回答为“yes”

    -q:静默模式

    –disablerepo=repoidglob:临时禁用此处指定的repo

    –enablerepo=repoidglob:临时启用此处指定的repo

    –noplugins:禁用所有插件

yum仓库

yum的repo配置文件中可用的变量

    $releasever:当前OS的发行版的主版本号

    $arch:平台,i386,i486,i586,x86_64等

    $basearch:基础平台;i386

    $yum0-$yum9:自定义变量

实例:

    http://server/centos/$releasever/$basearch/

    http://server/centos/7/x86_64

    http://server/centos/6/i384

创建yum仓库:

    createrepo [options] /path/to/directory

blob.png

程序包编译

程序包编译安装:

     Application-VERSION-release.src.rpm –>  安装后,使

  用rpmbuild 命令制作成二进制格式的rpm 包,而后 再 安装

  源代码–> 预处理–> 编译(gcc)–> 汇编–> 链接–> 执行

   源代码组织格式:

    多文件:文件中的代码之间,很可能存在跨文件依赖关系

    C 、C++ :make ( 项目管理器,configure –>Makefile.in –> makefile)   

    java: maven

编译安装

C代码编译安装三步骤:

    1, ./configure:

    a.通过选项传递参数,指定启用特性,安装路径等;执行时会参考以后的指定以及

makefile.in文件生成makefile

    b.检查依赖到的外部环境

    2.make:根据makefile文件,构建应用程序

    3.make install:复制文件到相应路径

开发工具:

    autoconf:生成configure脚本

    automake:生成makefile.in

注意:安装前查看INSTALL ,README

来源程序源代码的获取:

    官方自建站点:

        apache.org(ASF)

        mariadb.org

        …

    代码托管:

        SourceForge.net

        Github.com

        code.google.com

 c/c++编译器:gcc(GNU C Complier)

编译C源代码:

    前提:提供开发工具及开发环境

        开发工具:make,gcc等

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

            glibc:标准库

    通过“包组”提供开发组件

    CentOS 6: "Development Tools",

    "Server Platform Development",

第一步:configure脚本

    选项:指定安装位置,指定启动的特性

    –help:获取其支持使用的选项

    选项分类:

      安装路径设定:

      –prefix=/path:指定默认安装位置,默认为/旧/local/

      –sysconfdir=/path:配置文件安装位置

     System types:支持交叉编译

Optional Features:可选特性

    –disable-FEATURE

    –enable-FEATURE[=ARG]

Optional Packages: 可选包,

    –with-PACKAGE[=ARG], 依赖包

    –without-PACKAGE,

第二步:make

第三不 :make install      

安装后的配置:

    1.二进制程序目录导入之PATH环境变量中;

        编辑文件/etc/profile.d/NAME.sh

            export PATH=/PATH/TO/BIN:$PATH

    2.导入库文件路径

        编辑/etc/ld.so.conf.d/NAME.conf

            添加新的库文件所在目录至此文件中;

        让系统重新生成缓存:

            ldconfig [-v]

    3.导入头文件

        基于链接的方式实现

            ln -sv

    4.导入帮助手册

        编辑/etc/man.config|man_db.conf文件

            条件一个MANPATH

作业:

  1. 删除kernel包后,无法启动,并恢复之

    1.删除kernel

blob.png

  2.重启虚拟机,选择cdrom模式进入,然后选择troubleshooting,进入到如下界面

blob.png

3.选择Rescue a CentOS system,然后选择1

blob.png

4按照提示输入return

blob.png

5.进入系统

blob.png

6.使用rpm命令重新安装kernel

注意:kernel是要安装到/mnt/sysimages下

    光盘是在/run/install/repo/Packages/下

命令为:rpm -ivh /run/install/repo/Pcakages/kernel…. –root=/mnt/sysimage

blob.png

blob.png

7.reboot重启,回复正常

blob.png

第二题:

源码安装PHP

  1. 在官网上下载源码,我是在如下网站下载的

    http://php.net/downloads.php

  2. 将源码包放在指定位置,然后解压解归档

blob.png

3.解压解归档后,目录内容如下,在开始安装前最好先看看INSTALL和README文件,里面的内容还是挺重要的,

 在这里我就不截图了

blob.png

4.使用./configure –help查看各种文件安装路径设置,可以自己设置,默认为/usr/local

./configure --prefix=/usr/local/PHP --sysconfdir=/etc/PHP
将默认安装位置设置为/usr/local/prefix/PHP下,配置文件安装在/etc/PHP,其他的就先不做详细设置了
篇幅有限,就全不截图了

blob.png

5.执行make命令 ====>漫长等待中…..

blob.png

5.make test  …….

blob.png

6.执行manke install

blob.png

7.安装完成,然导入配置文件

    1.将二进制程序目录导入之PATH环境变量中;

1 PATH=/usr/local/PHP/bin:$PATH

blob.png

    2.导入库文件路径,添加新的库文件是在目录至此文件中,然后让系统重新生成缓存:ldconfig[-v]

1 /usr/local/PHP/lib

blob.png

blob.png

    3.导入头文件

      基于链接的方式实现

        ln -sv

ln -s /usr/local/PHP/include/  /usr/include/php

blob.png

    4.导入帮助手册

       编辑/etc/man.config|man_db.conf 文件

        添加man帮助手册路径至文件中

  blob.png  

这样就安装完成了!

原创文章,作者:qiuwei,如若转载,请注明出处:http://www.178linux.com/38753

(0)
qiuweiqiuwei
上一篇 2016-08-24
下一篇 2016-08-24

相关推荐

  • sed命令的入门与进阶

    sed:Stream EDitor     什么是sed呢?sed被称为linux文本处理三剑客之一,另外两个就是大名鼎鼎的grep和awk。sed是非交互性的流编辑器,在处理文本时一次只读取一行文本,然后基于所给定的编辑脚本对模式空间中的内容做编辑处理并把处理后的结果输出至标准输出。接着处理下一行文本,这样不断重复,直到文件的末尾。se…

    2017-03-16
  • 第六周-Vim、计划任务及Shell脚本练习

    一、复制/etc/rc.d/rc.sysinit文件至/tmp目录,将/tmp/rc.sysinit文件中的以至少一个空白字符开头的行的行首加#; cp /etc/rc.d/rc.sysinit /tmp vim /tmp/rc.sysinit 末行模式输入 :%s@^[[:space:]]\+@#&@g 二、复制/boot/grub/grub.co…

    Linux干货 2017-08-13
  • Linux内核介绍

                               Linux内核介绍 严格来讲,Linux这个词本身只表示Linux内核,但实际上人们已经习惯了用Linux来形容整个基于Linux内核,并且使用GNU工程各种工具和数…

    Linux干货 2016-10-27
  • 关于文本处理工具之SED

                                                      &nbsp…

    学员作品 2016-08-10
  • Linux shell之bash特性大全详解(持续更新ing)

    一、shell是什么?     Shell本身是一个用C语言编写的程序,它是用户使用Unix/Linux的桥梁,用户的大部分工作都是通过Shell完成的。Shell既是一种命令语言,又是一种程序设计语言。作为命令语言,它交互式地解释和执行用户输入的命令;作为程序设计语言,它定义了各种变量和参数,并提供了许多在高级语言中…

    Linux干货 2016-03-09

评论列表(1条)

  • 马哥教育
    马哥教育 2016-08-26 13:27

    内容整体很完整,对专用名词应该进行一些详细的解释,而不是简单的罗列,同时对知识点多一些文字性的描述,这样不仅能增加文章的可读性,同时更能增强自己的语言组织能力。