RPM總結(一)

軟件包基礎
軟件包運行環境
硬件、內核、應用程序的關系
包管理器
程序包管理器
Linux不同系統上的包管理器
RPM的優點
rpm包命名方式
一般源代碼的命名
rpm包的命名
rpm包的分類與拆包
包管理工具
RPM包管理器:
程序包管理器:
獲取程序包的途徑:
rpm包管理
CentOS系統上使用rpm
命令管理程序包:
安裝
升級:
降級
降級實例
more

軟件包基礎

包管理過程中,最常用的操作有:安裝、卸載、檢查

軟件包運行環境

硬件、內核、應用程序的關系

  • 應用程序運行在內核之外,其中/bin/bash就是各種應用程序之一。

  • 內核運行在計算機硬件與應用程序直接。主要工作就是CPU進程、內存的管理,磁盤輸入輸出等工作。

  • 應用程序和內核直接的溝通需要接口。 
    區分以下兩種接口:

  • API:應用程序接口。

    • 現成的開發包的工具,其動態的庫以so結尾,靜態的庫以a結尾。這種接口中包含C語言中的stdio.h或者math.h這種文件,開發者在math.h中定義了sin()函數,所以在寫C程序時,可以直接引入math.h文件,之后直接調用sin()函數。

  • ABI:應用程序二進制接口(application Binary interface)。

    windows系統和linux系統在數據存儲等方面,都存在差異性。所以如果想在windows上模擬linux環境,或者是在linux系統上模擬windows環境,需要編寫模擬的是ABI的應用程序。也就是庫級別的虛擬化:

    • 它定義了一組在PowerPC系統軟件上編譯應用程序所需要遵循的一套規則。主要包括基本數據類型,通用寄存器的使用,參數的傳遞規則,以及堆棧的使用等等。它涵蓋了各種細節:如數據類型、大小和對齊;調用約定(控制著函數的參數如何傳送以及如何接受返回值);系統調用的編碼和一個應用如何向操作系統進行系統調用;以及在一個完整的操作系統ABI中,目標文件的二進制格式、程序庫等等。 
      API與ABI的不同

1.PNG

Java的代碼可以在各個平臺轉移。這是因為java的代碼是二次編譯。

二進制文件hello.class可以在win或linux上運行。主要依靠jvm。jvm將windows命令轉化成它同一的,在linux上也是。 
所以二進制文件hello.class可以轉移


包管理器

二進制應用程序的組成部分 
二進制文件 
庫文件 
配置文件 
幫助文件 
庫文件:共用的程序模塊(可無)

程序包管理器

Linux不同系統上的包管理器

系統名 包文件類型 包管理器 使用命令 線上升級機制(命令)
debian/Ubuntu deb文件 dpkg包管理器 dpkg APT(apt-get)
redhat rpm文件 rpm包管理器(RPM Package Manager) rpm,rpmbuild,rpmdb(centos7) YUM(yum)

RPM的優點

  • rpm包是通過預先編譯并打包而成的,所以免除了重新編譯的困擾

  • 避免錯誤安裝:rpm包安裝前,會檢查系統的硬盤容量,操作版本等。

  • 更了解軟件:該包本身提供軟件版本資訊、依賴性軟件名稱、軟件用途說明、軟件所含文件等資訊

  • 數據庫。RPM的管理方式使用數據庫記錄RPM文件的相關參數,便于升級、移除、查詢與驗證。

rpm包命名方式

  • 實例:yum-plugin-security-1.1.30-37.el6.noarch.rpm 
    其中:

    • noarch和硬件平臺無關

    • i686支持32位(也可以裝在64位)

    • x86支持64位

一般源代碼的命名

一般源代碼名:name-VERSION.tar.gz|bz2|xz 
其中,VERSION=major.minor.release

rpm包的命名

rpm包命名方式: 
– name-VERSION-release.arch.rpm 
其中 
– VERSION=major.minor.release 
– release:release.OS 
– OS:上例中,el7是表示OS的,代表RHEL7 
– 常見的arch有:

架構系列 常見架構 說明
x86系列 i386,i486, i586, i686 i針對的是intel兼容的CPU的意思,后面的XXX表示不同的等級,不同的等級的CPU在針腳等方面或許會有不同
x86_64系列 x64, x86_64, amd64 針對64位的CPU進行最佳化編譯配置。包括Intel Core2以上等級,AMD Athlon64以上等級,都是這類。
powerpc ppc
noarch 沒有硬件等級上的限制(跟平臺無關) 一般來說,這類型的RPM文件,里面應該沒有二進制文件的存在,較常出現的就是屬于Shell Script方面的軟件

4.png

  • 軟件版本號:

    主版本號,此版本號,修正版本號:在主版本的架構下,更動部分原始碼內容,而釋放出一個新的版本,就是次版本號。在此版本中,修正一些bug等,就是修正版本號。

  • 軟件的編譯次數:

    為何會有重新編譯?因為某些原因(比如某些bug或者安全上的考慮),必須要進行小幅度的打補丁或重設一些編譯參數。配置完成后重新編譯打包,形成了新的rpm包。不同的打包數就出現了。

  • 硬件平臺

    RPM可以適用在不同的操作平臺上,但是不同的平臺配置的參數還是有所差異的。針對性能比較高的CPU進行最佳化參數的配置,這樣才能夠適用高性能CPU所帶來的硬件加速功能。這就是不同的arch。

rpm包的分類與拆包

如果將所有的功能與模塊,放在同一個包中,不利于后來的管理和排錯。所以最好將包按照功能等分類或拆開:

Application-VERSION-ARCH.rpm: 主包 
Application-devel-VERSION-ARCH.rpm:開發子包 
Application-utils-VERSION-ARHC.rpm:其它子包 
Application-libs-VERSION-ARHC.rpm:其它子包

包管理工具

在包與包之間,若是有循環依賴的關系,需要有工具來解決以來關系,并安裝。這種循環依賴的安裝,如果只是一步一步的安裝解決依賴關系,那就太耗費人力物力了,這時,就需要使用一些前端工具來自動解決依賴關系。 
解決依賴包管理工具:

工具 作用
yum rpm包管理器的前端工具
apt-get deb包管理器前端工具
zypper suse上的rpm前端管理工具
dnf Fedora 22+ rpm包管理器前端管理工具

RPM包管理器:

程序包管理器:

功能:將編譯好的應用程序的各組成文件打包一個或幾個程序包文件,從而方便快捷地實現程序包的安裝、卸載、查詢、升級和校驗等管理操作

  • 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)第三方組織:Fedora-EPEL:Extra Packages for EnterpriseLinux 
Rpmforge:RHEL推薦,包很全 
搜索引擎:(專門用于搜索軟件包) 
http://pkgs.org 
http://rpmfind.net 
http://rpm.pbone.net 
https://sourceforge.net/

(4)自己制作 
需要對源碼分析了解,才能夠制作rpm包

** 注意:檢查其合法性:來源合法性;程序包的完整性**

rpm包管理

CentOS系統上使用rpm

命令管理程序包:

安裝、卸載、升級、查詢、校驗、數據庫維護

安裝

rpm {-i|--install} [install  -options] PACKAGE_FILE...
  • -v: verbos

  • -vv

  • -vvv

  • -h:以#顯示程序包管理執行進度(50個) 
    常用命令:

rpm  -ivh  PACKAGE_FILE ...

選項:

  • –test:測試安裝,但不真正執行安裝;dry run模式

  • –nodeps:忽略依賴關系

  • –replacepkgs|replacefiles ##保存原來修改過的配置文件,(除非某配置文件沒有,才會寫入)

    • replacepkgs:原來損壞的軟件和現在要裝的包,版本等是相同的。

    • replacefiles:包名都不一樣。原來的和現在的,有些庫等,會重復,可以用這個。有點類似于升級了。

    • –nosignature:不檢查來源合法性 
      RPM總結(一) 1.PNG
      由于現在網絡等問題,無法檢測signature時,也會說不合法

    • –nodigest:不檢查包完整性

    • –noscipts 參數:不執行程序包腳本片斷

腳本 名稱 對應選項
%pre 安裝前腳本 –nopre
%post 安裝后腳本 –nopost
%preun 卸載前腳本 –nopreun
%postun 卸載后腳本 –nopostun

升級:

  • 使用格式:

rpm {-U|--upgrade}  [install-options]  PACKAGE_FILE...
rpm {-F|--freshen}  [install-options]  PACKAGE_FILE...
  • 二者區別

  • upgrade:安裝有舊版程序包,則“升級”(升級意味著,如果有新版本,老版本就沒了) 
    – 如果不存在舊版程序包,則“安裝”

    • freshen:安裝有舊版程序包,則“升級” 
      – 如果不存在舊版程序包,則不執行升級操作

  • 常用命令

rpm  -Uvh   PACKAGE_FILE ...
rpm  -Fvh  PACKAGE_FILE ...
  • 內核的升級 
    往往不是升級,而是安裝新的內核 
    這樣新舊內核就可以同時存在,使用新內核過程中出現問題,就繼續使用舊內核。

  • 內核也可以降級 
    notes: 
    (1)不要對內核做升級操作;Linux支持多內核版本并存,因此,對直接安裝新版本內核 
    (2)如果原程序包的配置文件安裝后曾被修改,升級時,新版本的提供的同一個配置文件并不會直接覆蓋老版本的配置文件,而把新版本的文件重命名(FILENAME.rpmnew)后保留

降級

常在新包不穩定的時候使用降級,獲得穩定的版本使用

  • –oldpackage:降級(這個得配置i才能夠裝的上-i –oldpackage)

  • –force:強行(可以省去好多其他選項:–replacepkgs…..等 )

降級實例

6.8—>6.7 

RPM總結(一) 1.jpg

需要安裝的是這兩個包 
當前系統內核: 
RPM總結(一) 
RPM總結(一) 1.jpg

1.jpg可以看出,爆出來的這個問題,并不是那么嚴重 
RPM總結(一) 1.jpg
裝完后,系統中同時存在原來的和現在的,這主要是因為原來版本和現在版本安裝時,很多文件是相同的,沖突了。所以不會直接覆蓋???boot啟動目錄中,都是兩個了。 
RPM總結(一)1.jpg

more

rpm -l可以查看包的文件列表,但是看不到腳本 
RPM總結(一)1.jpg

原創文章,作者:m20-吳清玲,如若轉載,請注明出處:http://www.www58058.com/39858

(1)
m20-吳清玲m20-吳清玲
上一篇 2016-08-24
下一篇 2016-08-24

相關推薦

  • Linux 練習冊1

    一、文件通配符練習題:          1、顯示/var目錄下所有以 l開頭,以一個小寫字母結尾,且中間出現至少一位數字的文件或目錄。         (1)ls  l*[[:digit:]]*[[:lower:]]    &n…

    2017-07-30
  • FHS文件結構

    我們在前面學習的過程中有了解到,linux的發現版有很多種類型,那么如果每個版本都有著自己的想法去配置文件應該放置的目錄,那么將造成管理上的困擾,于是為了解決這個問題,就有了FHS標準。 1.1 FHS 結構 1.1.1 軟件的概念 之前,我們提到過,一個完整的計算機系統應該有兩部分組成,即:計算機系統=軟件+硬件。沒有軟件的硬件,計算機只不過是一堆只會發熱…

    Linux干貨 2016-10-27
  • Puppet學習之puppet的安裝和配置

    一、Puppet簡介 Puppet基于ruby語言開發的自動化系統配置工具,可以C/S模式或獨立運行,支持對所有UNIX及類UNIX系統的配置管理,最新版本也開始支持對Windows操作系統有限的一些管理。Puppet適用于服務器管的整個過程 ,比如初始安裝、配置更新以及系統下線。 二、Puppet的安裝 Puppet的安裝方式支持源碼安裝、yum安裝以及r…

    2017-09-25
  • htop使用詳解

        在管理進程時通常要借助一些工具,比較常用的就是ps和top了;不過CentOS還為我們提供了一個更加強大的工具htop,下面就來了解一下此工具的使用方法。 一、安裝htop         htop工具在epel源中提供,請自行配置epel源,也可以直…

    Linux干貨 2015-05-18
  • 馬哥教育網絡班21第五周練習作業

    1、顯示/boot/grub/grub.conf中以至少一個空白字符開頭的行; [root@localhost ~]# grep "^[[:space:]]\+" /boot/grub2/grub.cfg   2、顯示/etc/rc.d/rc.sysinit文件中以#開頭,后面跟至少一個空…

    Linux干貨 2016-08-08
  • 計算機淺談及Linux簡談

    一、計算機淺談: 電子計算機(英語:computer),亦稱電腦,是一種利用電子學原理,根據一系列指令對數據進行處理的工具。 在現代,機械計算機的應用已經完全被電子計算機所替換,其所相關的技術研究叫計算機科學,而“計算機技術”指的是將計算機科學的成果應用于工程實踐所派生的諸多技術性和經驗性成果的總合?!坝嬎銠C技術”與“計算機科學”是兩個相關而又不同的概念,它…

    Linux干貨 2016-11-29
欧美性久久久久