软件包管理(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

相关推荐

  • linux计划任务

    linux计划任务、周期性任务执行 未来的某时间点执行一次某任务:at,batch 周期性运行某任务:crontab 执行结果: 会通过邮件发送给用户, 存放在/var/spool/mail/UserName ~]# ss -tnl 或者 ~]# netstat -tnlp  查看是否有25号端口打开,来判断本机的邮件服务是否正常打开 本地电子邮件…

    Linux干货 2016-09-19
  • 系统启动这块的一些实验及基本内容–下

    下面我来讲下grub,grub在编辑的时候可以进入一种模式就是单用户模式,就是当grub.conf文件未写入密码时,普通用户将直接忽略系统密码进入系统,所以这可以称为一个捷径,也可以成为一个漏洞,当然linux的前辈们不可能连这个都想不到,他们也有自己的办法,这就是我们grub的两层加密机制,在选定登陆界面之前可以设置一次,启动内核时也可以设置一次,密码也可…

    Linux干货 2016-09-13
  • Shell脚本编程初步

        shell是指一种应用程序,这个应用程序提供了一个界面,用户通过这个界面访问操作系统内核的服务。shell脚本(shell script),是一种为shell编写的脚本程序。业界所说的shell通常都是指shell脚本,但shell和shell script是两个不同的概念。shell编程跟java、php编程…

    Linux干货 2016-08-24
  • 简单救援模式应用

                                  …

    2017-08-12
  • N22-Dexter-第二周博客作业

    1、Linux上的文件管理类命令都有哪些,其常用的使用方法及其相关示例演示?    Linux上的文件管理类命令有cp,rm,mv    cp命令:copy    常用选项:       -i:交互式复制,即覆盖之前提醒用户确认;     &nbsp…

    Linux干货 2016-08-24
  • 磁盘管理之MBR,GPT的概念及MBR和GPT分区工具的使用

    一,概述 设备文件 I/O ports: I/O设备地址 一切皆文件 open() read() write()close() 设备类型: 块设备:block,存取单位“块”,磁盘 字符设备:char,存取单位”字符“,键盘 块设备和字符设备的区别 块设备可以随机访问,字符设备必须连续访问,如,/dev/null 块设备有缓存,字符设备没有缓存,因为字符设备…

    Linux干货 2016-09-06

评论列表(1条)

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

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