歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> 關於Linux >> Linux學習日志(八)

Linux學習日志(八)

日期:2017/3/1 11:56:40   编辑:關於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  
Copyright © Linux教程網 All Rights Reserved