Linux学习日志(八)

Linux的程序包管理

专业概念

POSIX:Portable Openratin System  跨平台调用
API:兼容,意味开发库兼容,因此,源代码可跨平台
ABI:兼容,编译后的程序可以跨平台
库为函数,function  
库:可执行程序,本身不能作为程序执行入口,但可以被调用,是编译好的二进制格式

程序的过程:

     预编译、编译、汇编、链接
     #静态链接:将库包含在程序中
     #动态链接:dll,so(shared object)
     #编译:源代码翻译成cpu指令集的过程

*注意:1.os平台:编译好的应用程序必须为特定平台所支持的版本
2.硬件平台:应用程序为特定的cpu所支持*

软件包的组成部分

     二进制程序:/bin,/sbin /usr/sbin,/usr/local.bin,/usr/local/sbin
     自身库文件:/lib /lib64 /usr/lib /usr/lib64 /usr/local/lib  /usr/local/lib64
               开发时调用API,运行时调用ABI
           通过调整/etc/ld.so.conf /etc/ld.so.conf.d/*.conf
      配置文件:/etc,无须额外配置
      帮助文件:
         man文件,info文件,README,INSTALL,ChangeLog

         man COMMAND
          到某路径下查找与命令名同名的通常以。gz结尾的压缩文件的名字
          /usr/share/man

ldd命令:

查看应用所依赖的共享库
ldd [options] 二进制文件  

  root@localhost Desktop]# ldd /bin/cat 
    linux-vdso.so.1 =>  (0x00007ffff63ea000)
    libc.so.6 => /lib64/libc.so.6 (0x0000003cc4400000)
    /lib64/ld-linux-x86-64.so.2 (0x0000003cc3c00000)

应用程序管理器

1、数据库:

     名称和版本,
     安装生成的各文件路径,校验码,
     依赖关系
     提供功能性的说明

2、提供程序组成格式:

     文件清单
     安装卸载时运行的脚本  

应用程序格式:

源代码 name(名称)-major(主版本).minor(次版本).release(修正号).tar.gz

依赖关系

  循环依赖: x-->Y
  版本依赖: x-->y-->x

 Debian:.deb dpkg
 RadHat: .rpm(perl编写),rpm(RadHat    Package Manager)
          rpm:RPM  is Package  Manager
 SUSE: rpm

包管理器的基本功能

  打包
  安装
  查询
  升级
  卸载
  校验
  数据库管理

前段管理器:

出现原因:因为依赖关系太麻烦

 apt-get

 yum

rpm包的使用:

rpm包命名格式:

    源程序:name-version.tar.{gz|bz2|xz}
 命名格式:          

    version:major.minor.release

    rpm包:name-version-release.arch.rpm
        release:通常包含rpm的只做发行号,还包含使用的OS(平台)

OS平台

        el6:redhat enterprise linux6 
        el5:redhat enterprise linux5
        CentOS5:
        suse11

    arch:
       X86_64
       i386,i586,i686
       ppc 
       noarch    

来源合法性验证:

    源程序:通过md5或sha1校验码验证;
    rpm包:发行商提供的是合法性是可信的
        验证包完整性:校验码
        验证来源合法:公钥加密算法

获取rpm的途径:

     1、发行商的光盘或站点服务器
      CentOS:
        http://mirrors.163.com
        http://mirrors.sohu.com
     2、rpmfind 
         http://rpmfind.net
     3、rpmpbone
         http://rpm.pbone.net

**注意:
1、发行商。发行光盘中的包,需要升级时,官方释放出升级包
2、Fedora EPEL**

安装程序包

 rpm -i --install 安装
 rpm -i /path/to/rpm_package ...
     -v:显示安装信息
     -vv:二级详细
     -vvv:三级详细
     -h:hash 以#的个数显示安装进度,一个#表示2%的进度
     --test:仅测试,不真正执行安装过程

如果存在依赖
     解决依赖关系:
      忽略依赖关系:--nodeps

重新安装:
   -ivh  --replacepkgs 
  原来的配置文件不会被覆盖,新安装的配置文件将会重命名为以.rpmnew为后缀的文件

卸载:
   rpm -e --erase
   rpm -e package_name

 如果卸载被其他程序所依赖的包
    1、把依赖者一同卸载
       2、忽略依赖关系:--nodeps
        3、不在卸载

rpm管理:查询

   查询
      rpm -q

   查询所有已安装的包:
      rpm -qa

   查询包的描述信息:
      rpm -qi package_name

 查询某单个包是否安装:
        rpm -q 包名

 查询安装包生曾的列表的位置 
     rpm -ql package 

 查询某文件是那个包安装生成的:
     rpm -qf 文件

 查询包安装后生成的帮助文档:
     rpm -qd 包名

 查询安装后生成的配置文件:
     rpm -qc 包名

 查询包相关的脚本:
     rpm -q --scripts 包名
     脚本分四类
        preinstall 安装前脚本
        postinstall 安装后脚本
        preuninstall 卸载前脚本
        postuninstall 卸载后脚本
 查询尚未安装的rpm包文件的相关信息:
   查询安装后会生成的文件列表:    
       rpm -qpl 包名
   查询其简单描述信息:
       rpm -qpi 包名

rpm管理:升级

rpm -U:升级或安装
rpm -F:只升级
rpm {-Uvh|-Fvh}/path/to/package_file

        --nodeps: 忽略依赖关系
        --force:强行安装

**注意:不要对内核执行升级操作;
多版本内核可以并存,因此,建议执行安装操作**

rpm管理:校验:检查包安装后生成的文件是否被修改过

 rpm -V package_Name
   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 能力改变了         

rpm管理:校验来源合法性和软件完整性

   包完整行:通过单向加密机制(MD5|sha1)
   来源合法性:通过公钥加密机制(RSA)
命令:gpg
 rpm -K /path/to/somefile
 rpm --checksig /path/to/package_file  

  --nosigeature:不检查来源合法性
  --nodigest:不检查包完整性

rpm管理:导入密钥

rpm --import /path/to/gpg-key-file
     导入以后再做验证

rpm包管理:数据库

     位置:/var/lib/rpm
     重建:rpm --initdb:初始化
            如果事先不存在一个数据库,则新建之
          rpm --rebuilddb 重建
        直接新建数据库,会覆盖原有库

依赖关系:

解决依赖关系:程序包管理器的前段工具

    yum(Yellowdog Update Modifier)依赖于rpm 

文件服务器(共享rpm包):

   通过yum所支持的文件共享机制将各rpm包通过文件服务共享 

repository:仓库

      1.需要的各rpm包
      2.依赖关系、程序包安装后所能够生成的列表等元数据文件

yum客户端

  1.配置文件:指定各可用的yum仓库;
  2.缓存元数据:yum会到各可用yum仓库获取元数据,并缓存至本地
  3、分析元数据:根据具体的操作请求完成元数据分析,可能包括依赖关系、文件列表等信息
  4.执行具体操作

客户端配置文件指定对服务器配置文件:

    ftp ftp://server/path/to/repo
    http http://server/path/to/repo
    nfs  nfs://servr/nfs_path
    file file:///path/to/path

yum操作
格式:yum [install] command

     check       检查在rpmdb中的问题
     check-update  检查可升级的软件包
     clean [all|package|metadata|expire-cache|rpmdb|plugins]     清除缓存
     deplist     列出软件包的依赖
     downgrade   降级包
     groupinfo  “package_group_name”    显示包组信息    
     groupinstall "group_name"           安装包组
     grouplist            列出所有包组 
     groupremove   ”group_name“:                 卸载组
     help                  显示有帮助的用法信息
     history               查看yum的命令历史 
     info                  列出包的描述信息
     install               安装
     list [all|installed|available]    把所有可以使用的
     provides              查询某文件是由那个包安装的
     reinstall             重新安装指定的程序包
     repolist[all|enabled|disabled]     显示各可用的仓库列表
     search                对于给定的字符串搜索包详细信息
     update  package_name  升级指定的程序包
     updateinfo            在资料库更新信息的行为
     upgrade               更新程序包回吐废弃考虑
     version               显示机器和/或可用回购一个版本。

要使用yum管理应用程序,首先得配置其可用的yum仓库,保存在配置文件中

 /etc/yum.conf
 /etc/yum.repo.d/*.repo

配置文件格式:由两段组成。类似window的ini配置文件
[main]:主配置段
[repo]:仓库配置段

 配置repo
      [repo_ID]
       name=String
       baseurl=仓库的访问路径
       enabled={1|0}1,表示启用。0表示不启用
       gpgcheck={1|0}1,验证gpg。0表示不验证
       gpgkey=公钥地址(可以是本地,也可以是服务器端路径)
       cost=定义此仓库开销,默认为1000

安装本地包

    install /path/to/package_file      
          手动禁止检查来源及完整性:--nogpgcheck

*如果系统为Centos 5,开发包组为”Development Tools“和”DeveLopment Libraries“
如何系统为centos 6,常用的开发包为”Development tools“和”Server Platform Development”
yum配置文件中可用的宏*

yum配置文件中可用的宏

  $releasever:程序的版本,对Yum而言指的是redhat-relrase版本。只替换为主版本号,如Redhat6.5 则替换为6
  $arch:系统架构
  $basharch:系统基本架构,如i686,i586等的基本架构为i386
  $YUM0-9:在系统定义的环境变量,可以在yum中使用

获取当前系统相应宏替换的办法

  python
  import yum,pprint
  yb=yum.YumBase()       pprint.pprint(yb.conf.yumvar,width=1)
 Loaded plugins: product-id,   refresh-packagekit
 {'arch': 'ia32e',
  'basearch': 'x86_64',
  'releasever': '6Server',
  'uuid': '238c299d-9681-4725-ad7a-c2ae6302e693'}
  quit()

测试实现yum repository的配置

yum repository:制作yum仓库文件

   1.yum install createrepo -y 制   作creatrepo

   2.createrepo 路径 
   3.配置yum源 

制作一个远程的yum仓库

 1.准备文件服务器;使用httpd为例,请事先确保以安装httpd程序包
 2.在/var/www/html目录。使用一个目录来保存准备制作称为yum仓库的所有rpm包
            cd /var/www/html
            lftp 172.16.0.1/pub/Sources/6.x86_64
            lftp : >mirror openstack
            bye
 3.创建yum仓库
            rm -rf /var/www/html/openstack/repodata
            createrepo /var/www/html/openstack

 4.启动http服务
      service httpd start 
 5.配置实用自建的yum仓库
     [openstack]
     name=Openstack Repository
     baseurl=http://172.16.100.7/openstack
     enabled=1
     gpgcheck=0

 6.配置好epel的yum源
 7.测试使用
       yum install openstack-keystone

程序包管理之编译安装

源码程序包:
c,c++ perl源码 python源码
应用程序:项目组

     软件基金会:FSF,ASF
      项目组:主导者,contributor
      小项目:一个人维护
      商业公司支持:开源版/企业版

开源网站

    github.com
     code.google.com

源程序:

项目工程:把代码分散于多个源代码文件
GNU/make(项目编译工具)

autoconf:configre脚本,
      用来检查编译环境是否满足编译需求,并定义当前程序编译时启用那个特性或功能,已经安装路径的定义等等

      结果:会根据makefile.in文件生成makefile文件        

automake:生成Makefile.in文件
      用于结合configure脚本生成makefile文件
      makefile文件是make命令的配置文件

编译安装的步骤:

     1.拿到源代码,并解压
       tar -xf package-version.tar.{gz|bz2|xz}
       注意:展开后的目录通常为package-version
     2.切换至源码目录中
        cd package-version
     3.执行configure脚本
      ./configure
     4.编译
       make
     5.安装
       make install

configure脚本的通用功能:

       1.指定安装路径
           --prefix=前缀,用于指定安装路径    
                --prefix=/usr/local/package_name
               --sysconfdir=/etc/package_name

       2.指定启动/禁用的特性
         --enable-feature:例如--enable-fpm
     --disable-fecture;例如 --disable-socket

       3.指定所依赖功能、程序或文件
         --with-function: 启用某功能
         --without-function: 禁用某功能

       不同的程序,其configure不尽相同,应获取帮助信息
         ./configure --help

二进制程序的访问方法

1.vim /etc/profile.d/apache.sh

 PATH=/usr/local/apache/bin:/usr/local/apache/sbin:$PATH
 expore PATH

2.source /etc/profile.d/apache.sh

头文件输出给系统

ln -sv /usr/local/apache/include /usr/include/httpd    

库文件输出

vim /etc/ld.so.conf.d/httpd.conf

/usr/local/apache/lib

让系统重新生成库文件路径缓存

 ldconfig     

输出man文件

   1. vim /etc/man.conf 
   2. 添加 MANPATH /usr/local/apache/man  

你可能感兴趣的:(linux,函数,api,源代码,跨平台)