91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

linux程序包管理初步

發布時間:2020-08-05 18:57:14 來源:網絡 閱讀:347 作者:風行隱者 欄目:數據庫

Linux程序包管理

 

         我們linux操作系統從底層到高層的層次結構:

最底層首先是硬件,計算機的計算能力都是在硬件邏輯上設計實現的,而不同廠商生產的芯片哪怕是同一廠商生產的同一型號的芯片,他們給我們提供的計算接口都不一樣,我們基本都同說過嵌入式開發,那么這種開發如果沒有系統可以使用的話,主要是面向硬件,來寫程序的,而這種程序只能適應一種或者幾種有限的芯片,單片機尤其如此,現在很多嵌入式開發過程中,也已經有了一種通用層來實現,但是像單片機這種還是面向硬件編程的,

         然后在底層之上就是將硬件接口封裝起來的操作系統層,系統層將底層的硬件接口封裝起來以后,通過系統調用(system  call),向上輸出,但是系統調用仍然很底層,為了加速開發操作,在操作系統層之上又加了半層叫“庫(lib  call”,注意這里不是全層,而是半層,因為對于程序員來講,可以面向半層“庫”來寫程序,也可以面向我們的操作系統來寫程序,然后在庫之上就是應用程序了,應用程序是給我們真正帶來一些生產力的,我們的內核是不能完成任何具體的操作的,在這眾多的應用類型程序中,我們知道有一類比較獨特的,他主要是讓用戶跟主機交互的,shell任何利用操作系統完成任務的操作,都是通過應用程序完成的,所以我們說將來我們真正去實現運維操作的過程中,除了系統管理,庫調用管理之外,其實作為運維人員來講,就是不停的在我們的操作系統上安裝配置某一應用程序包,然后讓這個應用程序包運行起來,并提供服務,或者利用此工具完成某種具體相應操作的過程。那對于我們運維人員來講,安裝卸載管理程序包,是實現很多后期工作的最基礎,最根本的任務,所以首先我們要學會靈活實現對于程序包的安裝管理操作。

         任何程序的運行,他有可能在程序包上提供兩種格式的程序包,我們稱之為源碼包或者叫二進制包,那么我們將到這就不得不回顧一下以前講到的APIABIAPI叫應用程序開發接口,ABI叫應用程序二進制接口。我們說過,API層次兼容未必ABI層次兼容。因為有些操作系統他們執行程序的格式,或者對二進制的是識別格式,并非是相同的,像linux跟類unixUnix-like)他們的操作系統,一般而言是相同的,他們的ABI是相同的,但是與windows相差很遠,比方說windows系統上的可執行程序都是exe或者是msi的,而linux上的是elf格式的。所以他們在ABI層次不兼容,所以我們說即使我們使用高級編程語言,去編寫程序,他們即便是在源碼格式兼容的,但是一旦編譯成功以后,本來是linux上面的格式的,而跑到windows上一樣依然無法運行。所以有一個程序包,在linux上編譯好了,他是二進制格式的,我們是不能拿來裝到windows之上的。反過來如果一個程序包在windows上編譯好了,是一個exe格式的文件,能不能在linux系統上運行起來呢?也很難。我們可以借助虛擬化將二者的差異將其磨平了,比方說現在的各種各樣的應用程序,幾乎都是針對庫調用來開發的,很少說是直接通過系統調用來實現。即使是通過系統調用來實現,那也沒問題,現在在windows上有很多程序模擬linux的庫,在linux上也有很多模擬windows庫的程序。

         比方說現在這里有一個linux操作系統,沒關系我們裝一個WinE,這個wine就能在linux上模擬出windows庫來。所以我們就可以借助wine來運行windows應用程序。比方說希望在linux上玩的各種各樣的游戲,甚至還能給我們提供一個安裝的路徑,模擬出windows上的CDE盤。但這只是一個庫虛擬層。同樣在windows上我們也能提供linux運行環境。叫cywin,在windows之上運行一個cywin,他能夠提供運行模擬出linux的運行環境來。所以說有一些程序只能在linux上運行的話,我們也能在windows上基于cywin運行起來,比如說像docker。這都不是正常的方案,正常的方案就是,由于abf庫是不兼容的,至少在二進制層次上他們是不兼容的。所以他們沒有辦法安裝塊系統來實現系統調用。

         庫級別的虛擬化:我們可以借助庫級別的虛擬化來抹平他們的不同。比如在linux上我們可以借助于wine來提供windows庫從而能夠運行windows應用程序。而在Windoes上我們借助于Cywin這個程序包,來虛擬模擬出linux的運行環境。從而使得那些二進制程序也能跨系統來運行了。

 

系統級開發:

         C/C++:服務及應用程序:httpdvsftpdnginx

         go

應用級開發

         java/Python/perl/ruby/php

                   javahadoophbase,(他們的運行需要jvm就是java虛擬機)

                   Pythonopenstackopenstack是一個云操作系統)

                            運行Python程序需要用到pvmPython虛擬機)

                            運行perl:(依賴于perl

                            運行ruby:(依賴于ruby解釋器)

                            運行php:(依賴于php解釋器)

 

C/C++程序格式:

         源代碼:文本格式的程序代碼;

         二進制格式:文本格式的程序代碼---->編譯器------>二進制格式(二進制程序,庫文件,配置文件,幫助文件)

 

(二進制格式我們僅僅是指他的陳序和庫是二進制的,他的配置文件和幫助文件當然是文本的。我們知道Linux重要的哲學思想之一就是:用文本文件保存配置信息,這樣帶來的好處就在于,我們將來配置任何應用程序時,只需要依賴一款文本編輯器就可以。)

         所以我們將來要想安裝應用程序,那么針對我們兩種格式的內容,他的安裝方式就顯然不一樣,我們知道源代碼不能運行,所以我們必須將其編譯以后將其安裝運行。對于源代碼而言我們要手動把“文本格式的程序代碼---->編譯器------>二進制格式”這個過程手動完成。如果是別人給我們提供的是二進制格式的文件,上面的過程就不需要我們自己做了。因為我們拿到的直接是可運行格式的。萬一很不幸的是對方僅提供了源代碼怎么辦呢?那么我們就只能自己編譯了。而要想能夠自己編譯的話,那就依賴于編譯開發環境。因為編譯要依賴于編譯器,依賴于頭文件,依賴于開發庫。我們的庫也是源代碼格式的,所以庫也有兩種文件。后來我們把它編譯成了二進制格式的。

         所以我們的編譯開發環境依賴于:編譯器,頭文件,開發庫。

如果我們拿到的是二進制格式的,那么就不需要編譯,我們直接放到目錄下就能運行起來了。

所以我們如果要執行源代碼編譯安裝,那么我們需要額外的準備好幾步。至少我們要想方設法保證我們的編譯環境是完整的。而提供編譯環境是相當勞心費神的工作。

         我們學習程序包安裝,首先了解二進制格式是怎么安裝的,然后再去了解如何源代碼編譯安裝。上面是C程序的格式。

         那么如果是應用級的程序格式呢?

那么我們就以JAVAPython為例,那么JAVAPython應用程序格式是一樣的,

         java/python程序格式:

                   源代碼

                   二進制

同樣的道理,如果是源代碼格式,那也只能編譯了,如果是二進制格式那么直接使用即可

但是他們的編譯不同在于,他們編譯出來的不是二進制格式,或者不是能夠直接在CPU上直接運行的二進制格式,而是編譯成其能夠在虛擬機上(jvm/pvm)運行的程序格式。也就是說通過虛擬機將其轉換成能夠運行的二進制格式。中間多了一層,所以性能很差。或者說比起C語言性能比較差。通常來說無論是C格式的源代碼,還是java格式的源代碼,通常他們的程序文件,都不止一個。那為什么不止一個?

         將來我們的程序文件在編譯時存在錯綜復雜的依賴關系,導致我們有一百個程序源文件,很有可能我們先編譯第一個,在編譯第三個,在編譯第二個。因為第一個第三個被第二個所依賴。這樣帶來的結果就是誰先編譯誰后編譯,作為使用者我們沒有能力管理他們的編譯順序。所以各種各樣的源代碼通常都使用一個項目管理工具。或者叫項目構建工具。

 

         項目構建工具:

                   C/C++:最著名的項目構建工具就叫make

                   java:最經典的項目構建工具就叫maven

這樣項目構建工具,也必須依賴項目開發環境才能構建。而對于java來講他也有自己的開發環境。他也需要開發環境。只不過對于這兩種的編程語言來講。他們的開發環境,通常指的是,那個對應應用程序的虛擬機,和虛擬機上面的編譯器。java源代碼編譯也需要開發環境,只不過是沒有頭文件,他們也需要:編譯器,卡發庫。這也是我們程序包的組成格式。

         為了降低初級使用者的難度,我們應該怎樣做?

我們應該使用程序包管理器,來協助這些終端用戶的管理工作。

 

         程序包管理器:

                   源代碼---->目標二進制格式----->組織成為一個或有限幾個“包”文件;

                            安裝,升級,卸載,查詢,(甚至對linux上還支持)校驗

 

         程序包管理器:

                   (程序包管理器大體上有哪幾種呢?

對于windows來講,大多數的應用程序都是exe格式的。這種格式應用程序給我們提供一個安裝界面,我們只需點擊下一步下一步即可,卸載的時候我們通過我們控制面板中的,卸載應用程序來實現,為什么我們能看到的只是下一步下一步就能完成安裝呢?他其實就是通過一個程序包管理器打包成一個單個的exe文件,我們知道我們安裝完以后他的確分散成多個可能放在program/files目錄下某一個路徑下,每一個應用程序都有一個目錄,里面存放各種文件,有二進制的有庫的,對于windows來說,他們的庫是dll文件,動態鏈接庫,dynamic link,而對于linux而言,叫so。)

         目前linux有三大主流分支:

                   debiandpt,dpkg,".dep"

                   redhatredhat   package manager,簡稱:rpm".rpm"rpm ispackage manager

                   S.u.S.Erpm".rpm"

 

                   Gentooports

                   ArchLinux

 

源代碼:

         命名方式:name-VERSION.tar.gz

                   VERSIONmajor.minor.release               //主版本號.次版本號.發行版本

rpm包命名格式:

         name-VERSION-release.arch.rpm            //releaserpm包的release

                   VERSIONmajor.minor.release

                   release.arc:是指rpm包的發行號

                            release.os2.el7.i386.rpm

                            archetecture:架構,i386x64amd64),ppcnoarch

 

                   redis-3.0.2.targz----->redis-3.0.2-1.centos7.x64.rpm

                  

changelog

 

拆包:主包和支包

         主包:name-VERSION-release.arch.rpm

         支包:name-function-VERSION-release.arch.rpm

                            functiondevel,utils,libs.....

 

依賴關系:

         x,y,z

                   x------依賴--->y,z

                            y------依賴-------->A,B,C

                            c--------->y

 

        

         前端工具:自動解決依賴關系;

                   yumrhel系列系統上rpm包管理器的前端工具;

                   apt-getapt-cache):dep包管理器的前端工具;

                   zyppersuserpm管理器前端工具;

                   dnfFedora 22+系統上rpm包管理器的前端工具;

 

程序包管理器:

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

 

         1.程序包的組成清單(每個程序包都單獨實現);

                   文件清單

                   安裝或卸載時運行的腳本

         2數據庫(公共)

                   程序包的名稱和版本;

                   依賴關系;

                   功能說明;

                   安裝生成的各個文件的文件路徑及校驗碼信息;

 

                  

 

CentOS系列系統的rpm數據庫:路徑

         /var/lib/rpm

[root@centos7 ~]# ls /var/lib/rpm

Basenames     __db.002 Group       Obsoletename  Requirename Triggername

Conflictname  __db.003 Installtid  Packages      Sha1header

__db.001      Dirnames Name        Providename   Sigmd5

[root@centos7 ~]#

 

         解釋:

Group:包組,我們可以將程序劃分成一個組,將來可以把一個程序包組全部安上,一個組                     全部卸載。

Name:各個程序的名字;

Sigmd5MD5的校驗碼;

Triggername:觸發器名稱;

 

獲取程序包的途徑:

         1)系統發行版的光盤或官方的文件服務器(或鏡像站點):

                            http://mirrors.aliyun.com

                            http://mirrors.sohu.com

                            http://mirrors.163.com

 

         2)項目的官方站點

                            舉例:以thhp為例:站點httpd.apache.org

         或者:

                            網站www.zabbix.com

打開網站www.zabbix.com網站,我們網站的導航欄中直接點擊“Download”,打開一個頁面,前面的“Zabbix  Packages”是zabbixrpm,再往下“Zabbix  Sources”是源碼包

         所以說很多項目的官方站點也提供rpm包,并且我們一定注意,既然后能用rpm包安裝的我們一定不要使用源碼包編譯安裝。

 

         3)第三方組織:EPEL

                            EPEL紅帽官方的社區組織所維護的,發行光盤之外其他他們覺得比較有用比較重點,比較有名的程序包,都將制作成rpm包放在EPEL中。

         其實國內的很多官方站點都有這樣的epel

         舉例演示,我們以“mirrors.aliyun.com”為例:

在鏡像阿里云的站點上“mirrors.aliyun.com”也有epel,在epel中會為我們的centos提供了眾多的額外的補充包。

                   aEPEL

                   b)搜索引擎

                                     http://pkgs.org(在rpm領域中,這是一個非常重要的);

                                     rpmfind.net(要想搜哪個文件包直接搜。)

                                     rpm.pbone.net

linux程序包管理初步

上面對話框中,我們可以輸入正確的內容來進行查詢,我們還可以通過后面的


Advanced RPM Search

來進行高級查詢。

         4)自己手動制作rpm包。

 

注意:不管上面的那種方式獲得rpm包,只要是通過互聯網上獲得的,那么我們就可以認為即使原作者在里面沒有做任何改變,或者修改,因為我們現在經常使用一些下載工具,像迅雷,那這種工具有點問題,為什么這種工具他的下載的速度非常的塊,就是因為他們可能不是從官方的原站點下載的,或者是非完完全全的官方站點上下載的,其實從已經下載的用戶的那里下載的,如果官方站點下載不到的話,而且這時候他恰恰搜索到某個用戶的那里有這個文件,他也會傳給你,但是這個文件可能被其他用戶精心的修改過,制作了后門,所以以后我們在互聯網上下載人格安全性較高的文件的,像銀行官方站點的插件,還有像支付寶的證書等,我們就不應該在使用迅雷下載。以后這中工具少用,尤其是使用PHP下載的,是相當危險的,那么我們下載下來一個工具我們不知道他到底是不是官方提供的呢?

至少是所有的數據沒有被篡改過,那怎么辦呢?

         我們建議要做MD5校驗,提供一個MD5校驗器,檢驗其合法性,來源合法性。

         程序包的完整性要做校驗;

 

 

         CentOS系統上rpm命令管理程序包

                   安裝,升級,卸載,查詢和校驗,數據庫的維護

上面提到的“安裝,升級,卸載,查詢和校驗”都用rpm命令來實現。

                   格式: rpm [OPTIONS]  [PACKAGE_FILE]

 

         安裝用到的選項:-i=--install

         升級用到的選項:-U=--update,  -F=--freshen

         卸載:-e=--erase

         查詢:-q=--query

         校驗:-V=--verify

         數據庫維護:--builddb,--initdb

 

 

 

 

         安裝:

                   安裝時必須有對應的文件才行。

                      rpm {-i|--install} [install-options]PACKAGE_FILE ...

                           

                            真正安裝的時候應該使用選項:-ivh

                                              rpm -ivh  PACKAGE_FILE......

 

                                        GENERAL OPTIONS(通用選項)

                                                        -vverbose;(輸出相信信息)

                                                        -vv:(輸出更詳細的過程信息)

        

                                               [install-options]

                                                        -hhash  marks輸出進度條;每個#表示2%的進度;

                                                        --test:如果不想真正的安裝,僅僅是檢查一下有沒有潛在的沖                                                                               突的可能我們就可以測試安裝,檢查并報告依賴關系及                                                                           沖突消息等;

                                                        --nodeps:忽略依賴關系;不建議;

                                                        --replacepkgs:重新安裝  (如果某個包安裝過,但是后來我們                                                                                       更改了他的配置文件,出了錯,那我們刻意先卸載                                                                                    再重新安裝,但是我們還有一個更好的方法就是,                                                                               直接重新安裝。)

                                                        --noscripts

                                                        --oldpackage:降級用的

                                                        --justdb:只是升級一下數據庫。

 

         注意rpm包可以自帶腳本:

                            這些腳本有四類:

                                     如果這四類都不想執行:--noscripts

                                     preinstall:安裝過程開始之前運行腳本,%pre          --nopre

                                     postinstall:安裝過程完成以后運行的腳本,%post           --nopost

                            preuninstall:卸載過程真正開始執行之前運行的腳本,%preun   --nopreun

                                     postuninstall:卸載過程完成之后運行的腳本,%postun  --nopostun

 

                                                        --nosignature:不檢查簽名信息,不檢查來源合法性;

                                                        --nodigest:不檢查包完整性信息;

 

 

 

 

 

舉例演示:

[root@centos6 Packages]# rpm -ivh zsh-4.3.11-4.el6.centos.2.x86_64.rpm

warning:zsh-4.3.11-4.el6.centos.2.x86_64.rpm: Header V3 RSA/SHA1 Signature, key IDc105b9de: NOKEY

Preparing...                ###########################################[100%]

  1:zsh                   ########################################### [100%]

[root@centos6 Packages]# cat /etc/shells

/bin/sh

/bin/bash

/sbin/nologin

/bin/dash

/bin/tcsh

/bin/csh

/bin/zsh

[root@centos6 Packages]#

 

 

演示重新安裝replacepkgs

 

之前我們zsh已經安裝過了,那我們先編輯一下zsh的配置文件“/etc/zshrc”,比方說我們刪除其中的幾行,然后保存,因為我們執行“wq”之后,他的配置文件信息就不能恢復了。那么這時,我們

[root@centos6 media]# vim /etc/zshrc                   //先將zsh的配置文件中的內容刪除一部分

[root@centos6 media]# cat /etc/zshrc

 [root@centos6media]#rpm -ivh --replacepkgs /media/Packages/zsh-4.3.11-4.el6.centos.2.x86_64.rpm

 [root@centos6media]# cat /etc/zshrc                 //發現配置文件內容沒有恢復,這時因為我們的系統在我們沒有將原先的配置文件刪除,就在重裝軟件,那么系統就會認為我們這個配置文件修改是有目的的,我們也要記住replacepkgs是不能修改原來的配置文件的。所以我們在重裝之前要先刪除配置文件。

 

 [root@centos6media]# rm -f /etc/zshrc

[root@centos6 media]# rpm -ivh --replacepkgs/media/Packages/zsh-4.3.11-4.el6.centos.2.x86_64.rpm

 [root@centos6media]# cat /etc/zshrc                   //發現配置文件內容恢復了

#

# /etc/zshrc is sourced in interactiveshells.  It

# should contain commands to set upaliases, functions,

# options, key bindings, etc.

#

 

## shell functions

#setenv() { export $1=$2 }  # csh compatibility

 

# Set prompts

PROMPT='[%n@%m]%~%# '    # default prompt

#RPROMPT=' %~'     # prompt for right side of screen

 

# bindkey -v             # vi key bindings

# bindkey -e             # emacs key bindings

bindkey ' ' magic-space  # also do history expansion on space

 

_src_etc_profile_d()

{

   #  Make the *.sh things happier,and have possible ~/.zshenv options like

    #NOMATCH ignored.

   emulate -L ksh

 

 

    #from bashrc, with zsh fixes

   if [[ ! -o login ]]; then # We're not a login shell

       for i in /etc/profile.d/*.sh; do

             if [ -r "$i" ]; then

                 . $i

             fi

       done

       unset i

   fi

}

_src_etc_profile_d

 

unset -f _src_etc_profile_d

 

[root@centos6 media]#

 

 

 

不檢查簽名演示:

[root@centos6 media]# rpm -ivh --replacepkgs/media/Packages/zsh-4.3.11-4.el6.centos.2.x86_64.rpm

warning: /media/Packages/zsh-4.3.11-4.el6.centos.2.x86_64.rpm: Header V3RSA/SHA1 Signature, key ID c105b9de: NOKEY

Preparing...               ########################################### [100%]

  1:zsh                   ########################################### [100%

上面在重新安裝軟件包的時候,前面出現了警告,我們要見檢查文件的合法性,文件的完整性,要檢查文件的這兩個選項,要依賴一個秘鑰文件,要依賴這個包制作者的公鑰。

[root@centos6 media]# rpm -ivh--replacepkgs --nosignature/media/Packages/zsh-4.3.11-4.el6.centos.2.x86_64.rpm

Preparing...                ###########################################[100%]

  1:zsh                   ########################################### [100%]

[root@centos6 media]#

上面安裝時,警告消失。

 

 


向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

雷波县| 镇雄县| 北安市| 靖西县| 越西县| 郁南县| 松阳县| 黔东| 岐山县| 中方县| 寿宁县| 乐亭县| 哈密市| 金门县| 类乌齐县| 铅山县| 陇川县| 宝山区| 章丘市| 金阳县| 林周县| 吉木乃县| 宜兰市| 绍兴市| 福安市| 邳州市| 铜陵市| 伊春市| 汉沽区| 龙南县| 临汾市| 英吉沙县| 石柱| 云龙县| 赤壁市| 镇赉县| 南平市| 青海省| 图木舒克市| 永寿县| 阿拉善右旗|