Linux軟件包管理

  在我們的運維工作,總是避免不了安裝某些軟件,或者編譯安裝某些軟件,我們知道操作系統當中的程序都是有程序員通過開發工具開發的來,程序員直接編寫的純文本的文檔我們稱之為源代碼,但我們的計算機只能識別二進制程序,那么必須要將源代碼變成計算機能識別的二進制程序,這里需要通過編譯器來進行編譯,將源碼轉換成二進制程序,再通過安裝即可。

還有一類程序就是二進制程序,系統是由某些廠商來做的,在廠商的系統上編譯出來的程序,自然就在系統上運行了,這里是由廠商直接編譯好程序然后釋放出來給用戶,如此一來,由于我們本來就使用廠商的發行版,系統是一樣的,那么使用廠商的提供編譯過的程序就沒問題。首先來介紹下軟件運行的環境

 

軟件運行環境

API:Application Programming Interface

       POSIX: Portable OS

程序源代碼à預處理à編譯—-à匯編—-à鏈接

靜態編譯:編譯器在編譯可執行文件的時候,將可執行文件需要調用的對應動態鏈接庫(.so.lib)中的部分提取出來,鏈接到可執行文件中去,使可執行文件在運行的時候不依賴于動態鏈接庫。

共享編譯:將庫提取出來,與可執行文件鏈接到一起,實現共享編譯

ABI:Application Binary Interface

Windowslinux不兼容

         ELFExecutable and Linkable Format

         PE

庫級別的虛擬化

         linuxWINE

         windowsCywin

 

※包管理器

二進制應用程序的組成部分:

       二進制文件、庫文件、配置文件、幫助文件、頭文件

程序包管理器

將編譯好的應用程序組成文件打包一個或幾個程序包文件,從而方便快捷地實現程序包的安裝、卸載、查詢、升級和校驗等操作目前在Linux系統之上軟件的安裝方式最常見的有一下兩種方式:

dpkg

這個機制最早是有Debian Linux社區所開發出來的,通過dpkg的機制,Debian提供的軟件就能夠簡單的安裝起來,同時還能提供安裝后的軟件資訊,實在非常不錯?;?/span>Debian衍生版系統,如B2D,Ubantu等都是用dpkg來管理軟件的。

 

RPM

  這個機制最早是由redhat公司開發出來,后來大家覺得這個管理器非常好用,因此很多發行版就使用這個機器來作為軟件包的管理器如SuSe,Fedora,CentOS。

  但是如上的兩種包管理器的機制或多或少都會有軟件屬性的相依的問題,其實在安裝時,每個文件文件都提供依賴性的檢查,那么如果我們將依賴性的數據做成列表、等到安裝時,如果有依賴關系,通過依賴性的數據列表,管理機制就會同時安裝被依賴的軟件。

 

 

軟件包命令規則

源代碼:

name-version.tar.gz|bz2|xz

versionmajor(主版本號).minor(次版本號).release(釋放號)

比如:httpd-2.4.6.tar.bz2包的名字叫httpd主版本號是2次版本號是4釋放號是6(也是修改過6次的意思)后面是以打包壓縮的方式存儲

 

rpm包命名方式

      name-version-release.arch.rpm

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

  包名稱叫做bash主版本號是4,次版本號是2,修整號是46,適合的硬件平臺是el7.x86

  主版本號:當新功能推出時,更新主版本號,或者某些功能有較大的變化時,就需要更新了

  次版本號:與主版本號相同,次版本號更新只是局部的,但仍然有較為重要的改進和增強,這是需要變動版本號了

  修訂號:局部的變量,一般只是修復bug,或者簡單的功能擴展

  因此,主版本號最為穩定,變化的周期長,修改號更新快,變化周期短

 

常見的arch

x86i386,i486,i586,i686

x86_64x64,x86_64,amd64

powerpc:ppc

跟平臺無關:noarch

 

包分類和拆包

Application-version-arch.rpm:主包

Application-devel-version-arch.rpm開發子包

Application-utils-version-arch.rpm其他子包

Application-libs-version-arch.rpm其他子包

 

解決依賴包管理工具

    yumrpm包管理器的前端工具

    apt-getdeb包管理器前端工具

    zippersuse上的rpm前端管理工具

    dnfFedora 18版本以上的rpm包管理器前端工具

 

庫文件:

查看二進制程序所依賴的庫文件

         ldd  /path/to/binary_file

比如:ldd  /bin/ls

 

管理及查看本機裝載的庫文件

         ldconfig

         /sbin/ldconfig –p:顯示本機已經緩存的所有可用庫文件名及文件路徑映射關系

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

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

 

程序包來源

1.         系統光盤

2.         項目官方站點

3.         第三方組織如Fedora EPELExtra Packages for Enterprise Linux

4.         自己制作

 

 

※RPM

 

優點

1.         rpm內含已經編譯過的程序與配置文件等數據,可以讓使用者免除重新編譯的困擾。

2.         rpm在被安裝之前,會檢查系統的硬盤容量、操作系統版本、可避免文件被錯誤安裝

3.         rpm文件本身提供軟件版本咨詢,依賴性軟件名稱,軟件用途說明、軟件含義便于了解軟件



rpm的管理分為安裝、卸載、升級、查詢、檢驗、數據庫維護

 

安裝

    rpm {i|install} [install-option]  PACKAGES_FILE…

     -hhash,#表示安裝進度,每個#表示%2

     -v|–verbose:顯示詳細過程

     -vv:顯示更詳細的過程

     [install-option]

    rpm –ivh –test:測試安裝;但不真正執行安裝;在dry run模式下進行

    rpm –ivh –  –nodeps:忽略依賴關系

    rpm –ivh –  –replacepkgs:重新安裝,替換原有安裝

    rpm –ivh –  –nosignature:不檢查來源合法性

    rpm –ivh –  –nodigest:不檢查包完整性

    rpm –ivh –  –force:強行安裝,可以實行重裝或降級

    rpm –ivh –  –scripts:不執行程序包腳本片段

   

   

 

查詢:

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

    rpm -q packages_name 查詢指定的包是否已安裝

    rpm -qa:查詢所有已安裝的包

    rpm -qi packages_name:查詢指定包的說明信息

    rpm -ql packages_name:查詢指定安裝包生成的文件

    rpm –qc packages_name:查詢指定安裝包生成的配置文件

    rpm –qd packages_name:查詢指定安裝包生成的幫助文件

    rpm –qf files_name:查詢指定的文件是由那個包安裝生成的

    rpm –qp files_name:查詢指定未安裝的程序包文件做查詢操作

    –whatprovides capability:查詢指定的capability被那個包所提供

    –whatrequires capability:查詢指定的capability被那個包所依賴

    rpm –q –scripts packages_name:查看指定的包中包含的腳本

    rpm –q –changelog packages_name:查詢rpm包改變日志

    rpm –R packages_name:查詢指定的程序包所以來的capabilty

    rpm2cpio 包文件|cpio –itv 預覽包里的文件

    rpm2cpio 包文件|cpio –id *.conf”釋放包內文件

 

    2.jpg

 

升級

    rpm {-U|–upgrade}[install-options] PACKAGES_FILE…:如果有老版本的,則升級,否則,則安裝

    rpm {-F|–freshen}[install-options] PACKAGES_FILE…:如果有老版本的,則升級,否則,則退出安裝

    –oldpackages:降級

注意

不要對內核做升級操作;Linux支持多內核版本并存,因此,對直接安裝新版本內核

如果源程序包的配置文件安裝后曾被修改,升級時,新版本提供的同一個配置文件并不會覆蓋老版本的配置文件,而把新版的文件命令為以.rpmnew的文件保留

 

 

卸載:

 

    rpm {-e|–erase}  [–allmatches] [–nodeps][–test] PACKAGES_NAME

    簡單用法:rpm –e packages_name

    –nodeps:忽略依賴關系

    –test:測試卸載;dry-run模式

    –allmatches:如果一個程序包同時安裝多個版本時,則此選項一次全部卸載,但程序包配置文件安裝后曾被修改,卸載時,此文 件通常不會被刪除,而是被重名為以.rpmsave的文件保留

 

 

校驗:

  查詢包安裝之后生成的文件是否發生了改變

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

 常用用法:rpm –V packages_name

 當沒有輸出結果時表示軟件包完整ok,當有相應的結果輸出表明對應的內容有修改,具體如下:

    S file Size differs  文件的容量大小發生改變

    5MD5 sum differsMD5這一種指紋碼的內容發生改變

    M Mode differs   文件的類型或文件的屬性發生改變

    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 –import  /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6

  驗證 rpm –K  packages_name

    3.jpg

 

 

重建數據庫

  當我們把數據庫的文件刪除之后,我們查詢軟件包的信息都是查詢不到的,因為rpm –q是依據數據庫里的數據來進行查詢,這時就需要重建數據庫了

  數據庫位置

     /var/lib/rpm

     rpm {–initdb|–rebuilddb}

     rpm –initab:初始化,如果事先不存在數據庫,則新建,否則,不執行任何操作

     rebuilddb:重建,無論事先是否存在,直接重新創建數據庫

 

 

 

 

※yum

 

       yumYellowdag Update Modifier,yum是通過分析rpm的標頭文件數據后,根據各軟件的依賴關系制作出有依賴關系時的解決方案,然后可以自動處理軟件的依賴性問題,以解決軟件安裝或移除與升級的問題。因此我們想使用yum 必須先要找到適合的yum server才行,而每個yum server可能都會提供許多不同的軟件功能,yum server會根據功能進行分類,這里的分類就是所謂的倉庫,yum repository 存儲了眾多rpm包,以及報相關的元數據文件放置在特定目錄repodate

    yum倉庫中的元數據文件

    primary.xml.gz:所有的rpm包的列表,依賴關系,以及每個rpm安裝生成的文件列表

    filelists.xml.gz:當前倉庫中所有rpm包的所有文件列表

    other.xml.gz:額外信息,rpm包的修改日志

    repomd.xml:記錄的事上面三個文件的時間戳和檢驗和

    coms*.xml.rpm分組信息

 

yum客戶端配置文件

    /etc/yum.conf:為所有倉庫提供公共配置

    /etc/yum.repos.d/*.repo:為倉庫的指向提供配置

倉庫的定義:

    [reposirtoryID]repository用來表示此repository執行,并且唯一

    name= description對倉庫的描述信息

    baseurl=url://path/to/repository 指定倉庫的訪問路徑,通常為一個文件服務器上輸出的repository,要跟repodata這個目錄在同一個目錄下的路徑

    http://10.1.0.1/cobbler/ks_mirror/7/

    ftp://10.1.0.1/iso/7

    file:///mnt/

    enabled={1|0}是否啟用倉庫1表示啟動,0表示禁用

    gpgcheck={1|0}是否對程序包做校驗,1表示校驗,0表示不校驗

    gpgkey=file://etc/pki/rpm-gpg/RPM-GPG-CentOS-6指明gpgkey文件路徑

    cost=#  #表示數字,指明當前倉庫的訪問開銷,默認為1000,數值越小優先級越高

   

    4.jpg

yum-config-manager

    yun-config-manager –disable “repository_name” 禁用此倉庫

    yun-config-manager –enable  “repository_name” 啟用此倉庫

 

yum命令介紹

顯示倉庫列表

    yum repolist [all|enabled|disabled]

all:列出已經配置的所有的可用倉庫

disable:列出禁用的倉庫

enabled:列出啟動的倉庫

 

顯示程序包

    yum list[all|glob_expr1][glob_expr2 ]   列出所有包

    yum reinstall [packeages]                            重新安裝指定包

    yum grouplist group1 group2 […]              查看指定包組,不指定組查看所有組

 

安裝程序包

    yum install packages [packages2][…]    安裝某程序包

    yum groupinstall packages [packages2][…] 安裝包組

在安裝某些軟件時,有時需要依賴某些安裝包,這時yum會自動解決依賴關系

 

升級程序包

    yum update [packages1] [packages2][…]   升級

    yum downgrade packages1 [packages2][…] 降級

 

檢查可用性

    yum check-update

    5.jpg

卸載程序包

    yum remove|erase packages1[packages2][…]     刪除包

    yum groupremove|erase packages1[packages2][…] 刪除包組

 

查看程序包信息

    yum  info   顯示所有包的信息    此功能跟rpm –qi類似

    yum  info packages  顯示指定包的信息

    yum groupinfo gropu1 顯示指定包組的信息

 

清理本地緩存

    yum clean 清理緩存

    yum clean [packages]metadata|expire-cache|rpmdb|pkugins|all]

 

構建緩存

    yum makecache

 

查看yum事物歷史

    yum history [info|list|packages-list|packages-info|summary|addon-info|redo|undo]

    yum history:顯示所有歷史事物

    yum history info 6 顯示指定歷史事物信息

    yum history undo 6:如果第六步是安裝這里則是卸載,反之則是安裝

   

     6.jpg

 

 

如何創建本地yum倉庫

    1、掛載本地光盤,如/mnt

    #mount /dev/cdrom /mnt/

 2、創建倉庫

    vim /etc/yum.repos.d/base.repo

    [cdrom]

    name=123

    baseurl=file:///mnt

    enabled=1

    gpgcheck=0

 到這里本地yum倉庫就配置好了

 

yum的命令行選項

     –nogpgcheck:禁止進行gpg check

     -y:自動回答為yes

     -q:靜默模式

     –disablerepo=repoidglob:臨時禁用此處指定的repo

     –enabledrepo=repoidglob:臨時啟動此處指定repo

     –noplugins:禁用所有插件

 

 

編譯安裝

    1、c代碼編譯安裝三步驟

通過選項傳遞參數,指定啟用特性,安裝路徑,執行時會參考用戶的指定以及makefile.in文件生成的makefile,檢查一來到的外部環境

    2、make:根據makefile文件,構建應用程序

    3makeinstall 復制文件到相應路徑

 

開發工具:

    autoconf:生成configure腳本

    automake:生成makefile.in文件

 

編譯Cyuandaima

  前提:提供開發工具及開發環境

  開發工具:makegcc

  開發環境:開發庫,頭文件,glibc標準庫

  通過安裝包組提供開發珠江

     yum groupinstall Development Tools

     yum groupinstall “Server Platform Development

 

 

編譯安裝

  第一步:configure腳本

  選項:指定安裝位置,指定啟用的特性

    –help:獲取其支持使用的選項

 

安裝路徑設定

    –prefix=/Path:指定默認安裝位置,默認為/usr/loca

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

 

    optional Features:可選特性

    –disable-feature

    –enable-feature

    optional packages:可選包

    –with-packages[=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

導入幫助手冊

   編輯/etc/man.config|man_db.conf文件

   添加一個MANPATH

1、  yum的配置和使用;包括yum repository的創建

   我將一些rpm包下載至/root/repo目錄下,此時目錄下沒有repodate的數據目錄,構建倉庫就會報錯,這時就需要createrepo,系統中默認createrepo這個命令是沒有安裝的,所以需要安裝

    createrepo [options] <directory>

    create  /root/repo

創建了repo數據文件之后,這時候就需要配置yum倉庫了,在/etc/repos.d/目錄下創建一個以repo結尾的文件即可,內容如下

    [xen]          #倉庫名稱

    name=1  #倉庫描述

    baseurl=file:///root/repo  #倉庫的路徑

    enabled=1         #是否啟用倉庫1表示啟用,0表示禁用

    gpgcheck=0   #是否檢查來源合法性

    cost=100   #倉庫優先級默認值為1000,值越小,優先級越高

 

 2、編譯安裝apache 2.2,并啟動此服務

  第一步:下載源碼包wget: ftp://10.1.0.1/pub/Sources/sources/httpd/ httpd-2.2.29.tar.bz2

  下載完成之后就需要解壓縮,隨后進入到該目錄,里面有個configure的腳本

      ./configure –prefix=/usr/local/apache  –sysconfdir=/etc/httpd2  prefix指定安裝路徑,sysconfdir指定配置文件路徑)

 

第二步: make 生成文件

第三步: make install  make生成的文件拷貝至指定安裝目錄下

第四步:導出頭文件、庫文件、幫助文檔、二進制程序

1、  ln  -sv /usr/local/apache/include  /usr/include/httpd 導出頭文件

2、  導出幫助文件

vim  /etc/man.config

MANPATH=/usr/loca/apache/man       centos6

vim  /etc/man_db.conf

MANDATORY_MANPATH      /usr/loca/apache/man  centos7

3、  導出庫文件

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

/usr/local/apache/lib   在文件中加入此行即可

4、  二進制程序

vim  /etc/profile.d/httpd.conf

export  PATH=$PATH:/usr/local/apache/bin

5、  服務腳本

cp /etc/rc.d/init.d/httpd    /etc/rc.d/init.d/httpd24

chmod  +x /etc/rc.d/init.d/httpd

加入以下幾行:

apachectl=/usr/local/apache/bin/apachectl

httpd=/usr/local/apache/bin/httpd

prog=httpd

pidfile=${PIDFILE=/var/run/httpd24.pid}

lockfile=${LOCKFILE-/var/lock/subsys/httpd24}

RETVAL=0

STOP_TIMEOUT=${STOP_TIMEOUT-10}

 

vim /etc/httpd24/httpd.conf

增加一行

PidFile=/var/run/httpd24.pid

 

service  httpd24  start  啟動服務即可

ss  -tan 查看有沒有80端口監聽

使用crul   httpdserver測試頁面是否正常顯示,如果端口起來了,還是看不到內容可能是防火墻開了,這是需要iptables –F臨時的清理以下防火墻的策略

原創文章,作者:fszxxxks,如若轉載,請注明出處:http://www.www58058.com/39131

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

相關推薦

  • 第11天:網絡基礎,屬性配置

    http://note.youdao.com/noteshare?id=bf6e776e7271953bffe1bdf949df4e8f

    Linux干貨 2016-09-06
  • 初探VIM_第六周練習(02)

    引言—什么是Vim? 接觸Linux這么久,想必對于一切皆文件的哲學思想已經不陌生了。因此,學習并掌握用一款Linux文本編輯器,對于玩轉LInux來說,是很有必要的。 vi編輯器是Unix系統最初的編輯器,它使用控制臺圖形模式來模擬文本編輯窗口,允許查看文件中的行、在文件中移動、插入、編輯和替換文本。 在GNU項目將vi編輯器移植到開源世界時,…

    Linux干貨 2016-12-18
  • 腳本小練習

    1、編寫腳本/root/bin/systeminfo.sh,顯示當前主機系統信息,包括主機名,IPv4地址,操作系統版本,內核版本,CPU型號,內存大小,硬盤大小。                            …

    Linux干貨 2016-08-15
  • 第六周課程作業

    1、復制/etc/rc.d/init.d/functions文件至/tmp目錄,將/tmp/functions文件中 的以至少一個空白字符開頭的行的行首加# ~]# cp /etc/rc.d/init.d/functions /tmp~]# vim /tmp/functions %s@^[[:space:]]\+@#@g 2、復制/boot/gru…

    Linux干貨 2016-12-12
  • 一起學DHCP系列(二)三種途徑

    原創作品,允許轉載,轉載時請務必以超鏈接形式標明文章 原始出處 、作者信息和本聲明。否則將追究法律責任。http://jeffyyko.blog.51cto.com/28563/162176 《一起學DHCP》系列第二節。      和WINS服務類似,DHCP大體上也由兩部分組成,DHC…

    Linux干貨 2015-03-25
  • 系統基礎之文件管理grep練習題

    1、顯示/proc/meminfo文件中以大小s開頭的行; (要求:使用三種方式) [root@wen-7 ~]# grep -i "^s" /proc/meminfo  SwapCached:       &…

    Linux干貨 2016-08-07
欧美性久久久久