咱們在這一章當中繼續講述yum命令,然後咱們簡單講述一下源代碼安裝包的編譯及使用。java
咱們在yum的配置文件中,一旦gpgckeck=1時,就意味着咱們安裝程序包時,必需要檢查gpgckey的密鑰了,然後也必須指明該密鑰文件的路徑,不然不給予安裝,咱們能夠在命令行中能夠指定禁止gpgckeck,由於命令行優先級要高於配置文件,那麼在衆多的選項當中,有一種能夠禁止檢查gpg驗證功能的選項叫作--nogpgcheck
,那麼咱們如今將經常使用的命令行選項總結以下:c++
yum的命令行選項: --nogpgcheck:禁止進行gpg check; -y:自動回答爲"yes"; -q:靜默模式; --disablerepo=repoidglob:臨時禁止指定的repo; --enablerepo=repoidglob:臨時啓用指定repo; --noplugins:禁用全部插件;
咱們以前也看到過,在咱們使用或配置yum文件時,其在配置文件中還可使用變量。其用到變量的好處就是,咱們在此前的bash章節當中講到過變量是什麼,以及變量所可以發揮的效用,那麼在配置文件當中使用變量也是很容易理解的,好比說你是某個站點鏡像的維護者,爲CentOS 5,6,7
給用戶提供了相應的yum源,對CentOS 6
來講,既有32位又有64位的操做系統,對於用戶來說,須要分別提供配置文件才能夠,由於有可能有些人不會作該配置文件,因此能夠在官方的鏡像站點上去下載,然後放置到某個目錄下,然後還得須要告訴用戶32位的是屬於什麼文件,64位的是屬於什麼文件,這樣形成的後果是管理繁雜,並且便是說明了32位的是屬於什麼文件,64位的是屬於什麼文件,恐怕用戶也不知道系統自己是32位仍是64位,因此說區分太多,必然會致使對用戶的選擇來講是一種負擔,所以咱們能夠將遠程服務器上的全部的路徑訪問格式將其固定下來,好比說:sql
http://mirrors.china.org/centos/6/i386/os http://mirrors.china.org/centos/6/x86_64/os http://mirrors.china.org/centos/7/x86_64/os
因此咱們須要指明一個文件,對於以上網址以及系統發行商是不用變的,格式已經固定完成,可是對於不一樣的髮型版及系統架構來講形式多變,咱們就要用變量來替代放置於客戶端,當放置在客戶端時,可以獲取到當前系統發行版的主版本號及系統架構,也就是說,該變量可以自動替換6
或者7
。而後架構也是須要使用變量來進行自動替換的,因此說能夠作到了一種文件達到多種場景使用。那麼使用內置變量的做用就是:apache
第一:使用變量來判斷當前系統架構及發行主版本; 第二:獲取平臺及平臺架構;
那麼咱們常用的內置變量總結以下:編程
yum的repo配置文件中可用的變量: $releasever:當前OS發行版的主版本號; $arch:平臺; $basearch:基礎平臺; $YUM0-$YUM9 https://mirrors.aliyun.com/centos/$releasever/$basearch/os
在最經常使用的內置變量當中,無非就是$releasever
和$basearch
,是咱們常常所用到的,咱們此前也講到過咱們在.repo
文件當中可使用cost
,來指定開銷,若是在倉庫中有多個應用程序的話,就要取決於cost
開銷值。centos
建立yum倉庫所使用到的命令爲createrepo
,一般咱們使用yum倉庫時,一種方式爲指向本地光盤,另外一種方式爲只想互聯網上的某個鏡像站點,不管是指向哪裏,均可以安裝createrepo
命令,這個命令可以在該倉庫目錄下建立repodata
目錄,該目錄建立成功以後,就能夠直接使用該yum倉庫,簡單來講就是repodata
在哪裏,yum倉庫就指向該帶有repodata
目錄下的目錄倉庫。
createrepo是由Python
所研發的一種程序,命令的用法很簡單,使用該命令指明目錄便可。緩存
建立yum倉庫: createrepo [options] <directory>
而對於選項來講,大部分是能夠省略的,或者說一個都沒有照樣能夠將該命令運行。具體使用以下:bash
# mkdir httpd # mv httpd-2.4.25.tar.gz httpd # cd httpd/ # createrepo httpd/ Saving Primary metadata Saving file lists metadata Saving other metadata Generating sqlite DBs Sqlite DBs complete
建立成功以後,咱們進入httpd目錄下的repodata目錄,顯示並查看,該壓縮文件的命名方式都是由UUID格式命名組成。服務器
# cd httpd/repodata/ # ls 01a3b489a465bcac22a43492163df43451dc6ce47d27f66de289756b91635523-filelists.sqlite.bz2 401dc19bda88c82c403423fb835844d64345f7e95f5b9835888189c03834cc93-filelists.xml.gz 5dc1e6e73c84803f059bb3065e684e56adfc289a7e398946574d79dac6643945-primary.sqlite.bz2 6bf9672d0862e8ef8b8ff05a2fd0208a922b1f5978e6589d87944c88259cb670-other.xml.gz 7c36572015e075add2b38b900837bcdbb8a504130ddff49b2351a7fc0affa3d4-other.sqlite.bz2 dabe2ce5481d23de1f4f52bdcfee0f9af98316c9e0de2ce8123adeefa0dd08b9-primary.xml.gz repomd.xml
不管以前咱們使用rpm命令或yum命令來安裝時,都是使用二進制格式的程序包,那麼二進制的程序包都是由我的或某個組織編譯好的來對用戶進行提供。不過,別人提供的rpm包未必對全部人可以適用,因此有的狀況咱們不得不編譯安裝,好比說第一方面就是找不到合適的rpm包,由於沒有那個組織或我的來進行製做,第二方面就是有符合的rpm包,可是有個問題就是,只是編譯了一部分功能,而使用該功能時這個包並無該功能,因此只能去編譯安裝,好在也有些組織考慮了該問題,因此rpm包有兩種格式,一種爲編譯好的rpm包,另外一種就是源碼rpm包。架構
但須要注意一點的是,裏面的rpm包是沒有通過編譯的,都須要通過編譯成爲二進制纔可以使用。
testapp-VERSION-release.src.rpm --> 安裝後,使用rpmbuild命令製做成二進制格式的rpm包,然後再安裝;
有時候不知道你的平臺是什麼的時候,使用該包時編譯成爲CPU所使用的指令,通常來說編程語言(例如C語言),都要先預處理,而後在通過編譯,編譯以後會生成目標代碼,然後使用匯編將目標代碼轉換成爲該平臺所理解的二進制的過程,簡單來說就是彙編成CPU能夠理解爲指令的過程。因此說可以編譯成徹底須要符合版本的程序包這麼一步過程而已。
源代碼 --> 預處理 --> 編譯(gcc) --> 彙編 --> 連接 --> 執行
要想完成程序包的編譯安裝,不少源文件程序可能不止一個,也不該該只此一個,不止一個能夠按照層級,按照不一樣的功能分別組織代碼文件,每一個源文件能夠看成單個的獨立組件,不過,它們之間也是有依賴關係的,因此說咱們源代碼組織格式以下:
源代碼組織格式: 多文件;文件中的代碼段之間,極可能存在跨文件依賴關係;
因此說咱們手動編譯的話,是很是困難的一件事情,那麼爲了下降其編譯上的難度,或者說下降代碼管理之間上的難度,咱們對代碼源程序有加強型的管理程序,它們都要有專門的項目管理器,對於C/C++來講,是用make
工具,而對Java來講,使用的是maven
。
C\C++: make (configure --> Makefile.sh --> makefile) java: maven
make須要一個指示文件,它裏面也有配置文件,make針對於每個源代碼,都有相應的配置文件,然後在make時根據該配置文件作出相應的步驟與決定,好比:自動根據其配置文件如何進行預處理及編譯,該配置文件稱爲makefile,但makefile文件並非事先存在,也不是對於用戶的須要都是同樣的,由於作make以後,未來程序包仍是得須要安裝,那麼二進制文件以及庫文件等程序文件安裝是一個問題,對於不一樣的用戶來說須要必定是不同,因此該配置文件必定不能寫死,否則的話沒有什麼靈活性了,而makefile文件是由Makefile.in
文件生成的,而該文件能夠理解爲是一個模版,基於該模版來生成makefile文件,但該文件的生成是由根據用戶的須要來進行生成的,用戶能夠指明路徑以及啓用某個功能,而啓用的特性是由configure
工具來進行生成的makefile.in文件模版,以後生成了makefile文件。須要注意的是,make是構建項目的一個關鍵步驟,但make自己不是編譯器,而是調用gcc編譯器來完成編譯的。
C編譯安裝三步驟: ./configure: (1) 經過選項專遞參數,指定啓用特性、安裝路徑等;執行時會參考用戶的指定以及Makefile.in文件生成makefile。 (2) 檢查以來到的外部環境。 make: 根據makefile文件,構建應用程序; make install 安裝到指定路徑中;
不過可能以上文件在源代碼包中可能不會自帶,不過能夠自動生成該文件腳本及構建開發的應用程序,其開發工具項目爲:
開發工具: autoconf:生成configure腳本; automake:生成Makefile.in
因此安裝任何一個源代碼時,須要注意INSTALL文檔和README文檔。
建議:安裝前查看INSTALL, README
那麼編譯包的獲取通常爲兩種方式,一種是直接進入官方或者是開源協議站點,另外一個是在某個代碼託管網站上去進行查找。
開源程序源代碼的獲取: 官方自建站點: apache.org (ASF) mariadb.org ... 代碼託管: SourceForge Github.org code.google.com
在以前咱們講過,對於系統級開發來講,咱們使用的是C/C++或Go語言去研發的,而對於應用級開發來講,咱們可使用Java/Python等編程語言進行研發。
c/c++:gcc (GNU C Complier)
編譯C源代碼程序,剛纔也講過了,無非也就是三步驟,值得須要注意的是,要想編譯安裝程序包,需首先提供開發環境。
編譯C源代碼: 前提:提供開發工具及開發環境 開發工具:make, gcc等; 開發環境:開發庫、頭文件; glibc:標準庫 經過"包組"提供開發組件: CentOS 6 "Development Tools", "Server platform Development"
須要注意的是,對於CentOS 5, 6, 7
來說,開發包組並不能容納全部的程序包。較新的程序包可能依賴於較新版本的編譯器,較老的也可能使用較老版本的編譯器來進行編譯。太老了功能有可能對新的編譯器來講不支持。那麼接下來咱們能夠直接安裝某個源碼程序包就能夠了,使用configure腳本支持許多選項。
第一步, configure腳本 選項:指定安裝位置、指定啓用的特性; --help:獲取其支持使用的選項 選項分類: 安裝路徑設定: --prefix=/PATH/TO/SOMEWHERE:指定默認安裝位置;默認爲: /usr/local --sysconfdir=/PATH/TO/SOMEWHERE:配置文件安裝位置; System types:指明系統類型,可進行交叉編譯; Optional Features:可選特性 --disable-FEATURE --enable-FEATURE[=ARG] Optional Packages:可選包,依賴到的程序包 --with-PACKAGE[=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 (4) 導出幫助手冊 編輯/etc/man.config手冊 添加一個MANPATH MANPATH /PATH/TO/SOMEFILE