您好,登錄后才能下訂單哦!
概述:
本章內容:軟件的運行環境,軟件包基礎,rpm包管理,yum管理,定制yum倉庫,編譯安裝
一、軟件運行環境
1.API:Application Programming Interface (應用程序開發接口) POSIX:Portable OS(國際標準) 程序源代碼–> 預處理–> 編譯–> 匯編–> 鏈接 靜態編譯: 共享編譯:.so ABI:Application Binary Interface(應用二進制程序接口) Windows與Linux不兼容 linux:文件格式:ELF(Executable and Linkable Format) win:文件格式:exe,msl PE(Portable Executable) 庫級別的虛擬化: Linux: WINE(提供模擬windows的庫,運行win環境) Windows: Cywin(提供linux的運行環境) 2.開發語言 系統級開發 C/C++(依賴于c庫) httpd,nginx,vsftpd,go 應用級開發 java(依賴于jvm虛擬機) Python(openstack云站),php,perl(依賴于per解釋器),ruby 3.程序格式: c/c++ 源代碼:文本格式的程序代碼; 編譯開發環境:編譯器,頭文件,開發庫 二進制格式:文本格式的程序代碼–>編譯器–>二進制格式(二進制程序、庫文件、配置文件、幫助文件) java/Python 源代碼:編譯能夠在其虛擬機(jvm/pvm)運行的格式; 開發環境:編譯器、開發庫 二進制 項目構建工具 c/c++:make jave:maven
二、包管理
1.二進制應用程序的組成部分: 二進制文件、庫文件、配置文件、幫助文件 2.程序包管理: 源代碼–>目標二進制格式(二進制程序、庫文件、配置文件、幫助文件)–>組織成為一個或有限幾個“包文件”(安裝,升級,卸載,查詢,校驗) 程序包管理器: deblan: dpt,dpkg 以".deb"后綴 redhat: rpm (redhat package manager) 以 ".rpm"后綴 S.u.S.E:rpm, ".rpm"命令 3.包命令格式 源代碼: name-VERSION.tar.gz|bz2|xz VERSION: major(主版本號).minor(次版本號).release(發行號) rpm包命名格式: name-VERSION-release.arch.rpm VERSION: major.minor.release(rpm包發行號) changelog文檔(內容修復改進的相關文檔) 例:bash-4.2.46-19.el7.x86_64.rpm release:release.OS 常見的arch: x86: i386, i486, i586, i686 x86_64: x64, x86_64, amd64powerpc: ppc 跟平臺無關:noarch (適用于所有平臺) 4.包:分類和拆包 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 18+ rpm包管理器前端管理工具 5.庫文件 查看二進制程序所依賴的庫文件: ldd /PATH/TO/BINARY_FILE 管理及查看本機裝載的庫文件: ldconfig /sbin/ldconfig-p: 顯示本機已經緩存的所有可用庫文件名及文件路徑映射關系 配置文件:/etc/ld.so.conf, /etc/ld.so.conf.d/*.conf 緩存文件:/etc/ld.so.cache 6.包管理器 程序包管理器: 功能:將編譯好的應用程序的各組成文件打包一個或幾個程序包文件,從而方便快捷地實現程序包的安裝、卸載、查詢、升級和校驗等管理操作 程序包的組成清單(每個程序包單獨實現) RPM包內的文件清單 RPM的元數據,如名稱,版本,依賴性,描述等 安裝或卸載時運行的腳本 數據庫(公共) 路徑:/var/lib/rpm 程序包名稱及版本 依賴關系 功能說明 包安裝后生成的各文件路徑及校驗碼信息 7. 獲取程的來源 1)系統發版的光盤或官方的服務器; CentOS鏡像: http://mirrors.aliyun.com http://mirrors.sohu.com http://mirrors.163.com 2) 項目官方站點 3) 第三方組織: Fedora-EPEL 搜索引擎: http://pkgs.org http://rpmfind.net ttp://rpm.pbone.net 4) 自己制作
三、CentOS系統上rpm命令管理程序包:
功能:安裝、卸載、升級、查詢、校驗、數據庫維護
1.安裝
格式:rpm -i[option] PACKAGE_FILE 選項: -i:表示install安裝 -v -vv:表示顯示安裝過程,后者顯示更加詳細; -h:以#號顯示進度條格式; -nodeps:忽略依賴關系 -force:強制動作,注意安裝成功后可能不能運行; -test:測試安裝,作為測試檢查 -nosignature:不檢查簽名就是來源合法性; -nodigest:不檢查包完整性;MD5頭; -noscipts:不執行程序包腳本片斷 注意:rpm自帶四類腳本 %pre:安裝前腳本; -nopre %post:安裝后腳本; -nopost %preun:卸載前腳本; -nopreun %postun:卸載后腳本;-nopostun 使用: rpm -ivh PACKAGE_FILE
2.升級
格式: rpm -U|F[optIon] PACAGE_FILE 選項: -U:表示不管軟件事先是否存在都要升級,存在就升級,不存在就安裝; -F:表示軟件軟件存在就升級,如何不存在,就放棄升級; -oldpackage:降級,如果升級之后發現有Bug或者兼容性問題,可以使用此選項回滾到升級前的版本; -force:強制動作,注意安裝成功后可能不能運行; -replacepkgs:注意不能替換配置文件; 注意: (1)不要對kernel做升級操作;支持多kernel并存;可以直接安裝; (2)修改過的配置升級不會覆蓋,升級同新文件,會重命名為file.rpmnew
3.查詢:
格式:rpm -q[option] [PACKAGE-NAME|PACKAGE_FILE] 選項: -qa:查詢系統所有已安裝的程序包; -qf /path/to/file:查詢文件是由那個程序包生成; -ql:查詢程序生成的文件: -qi:查詢程序屬性信息; -qc:查詢程序配置文件; -qd:查詢程序提供的文檔 -q -whatprovides CAPABILITY(功能):查詢這種CAPABILITY由那個程序提供; -q -whatrequires CAPABILITY:查詢這種CAPABILITY被哪些程序包依賴; -q -scripts:查詢程序包生成的腳本; -q -changelog:查詢軟件歷史 查詢未安裝的軟件包信息,需要加-p選項跟上面的選項結合使用,后面的參數必須是PACKAGE_FILE; 列如: -qpi:查詢指定PACKAGE_FILE的程序屬性信息;
4.卸載
格式:rpm -e[option] PACKAGE-NAME 選項: -vh:顯示過程 -nodeps:忽略依賴 -noscripts:忽略腳本 -allmatches:卸載所有匹配指定名稱的程序包,也就是說卸載軟件名稱中包含此名稱的所有包; -test:測試檢查卸載,不是真卸載 注意: 卸載會檢查依賴關系,如果卸載的軟件被其他程序依賴,請謹慎卸載,否則導致其依賴程序無法運行; 使用: rpm -e PACKAGE_FILE
5.校驗
工作原理:校驗檢查的是軟件包來源的合法性和完整性,要想對它們校驗檢查,必須要有校驗機制,這種機制是根據簽名和加密實現的,通常發行版的光盤中會有一個包含所有軟件特征碼的文件,特征碼是根據軟件包特征提取的,通過單項加密實現的用來校驗軟件包的完整性,如果軟件包在獲取途中被修改,在系統中再次提取軟件包特征碼,跟系統已有的特征碼文件比對,不同則判斷被攥該,修改過的軟件包,根據相同的加密算法提取的特征肯定不同;來源合法性是根據簽名實現的;特征碼文件被稱為公鑰;校驗是由校驗程序完成的,默認rpm命令安裝時會調用; 公鑰獲取: 官方網站 系統光盤 系統配置文件中,這是系統在安裝時從安裝光盤復制進去的 系統公鑰位置:/etc/pik/rpm-gpg/RPM-GPG-KEY-CentOS-7 導入公鑰: rpm -import /path/to/pub.key 校驗軟件: rpm -V PACKAGE-NAME:校驗安裝文件自安裝后是否被修改過,根據PMS記錄信息判斷; rpm -K PACKAGE_FILE:對指定未安裝的軟件包進行手工校驗;
6.數據庫重建
默認數據庫目錄位置:/var/lib/rpm 語法格式: rpm -initdb :初始化數據庫 rpm -rebuilddb :重新構建 -dbpath=/path/ :指定數據庫創建位置;
四、CentOS系統上yum命令管理程序包:
1.yum配置文件
yum repository:yum repo(yum倉庫),存儲了眾多rpm 包及包的相關的元數據文件(放置于特定目錄repodata) 文件服務器: ftp:// http:// file:/// yum 客戶端配置文件: /etc/yum.conf :為所有倉庫提供公共配置,一般不做更改 /etc/yum.repos.d/*.repo :為倉庫的指向提供配置 倉庫指向的定義: [repositoryID] name=Some name for this repository,yum倉庫描述 baseurl=url://path/to/repository/,yum倉庫路徑,支持上述三種路徑 enabled={1|0},0表示禁用,1表示啟用,可以不寫表示啟用,但是寫錯enabled會造成禁用 gpgcheck={1|0},此行不寫要檢測,0是不檢測包,1是檢查包 pgkey=URL 此外假如系統上已經裝有檢查文本文件/etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7,相當于以上兩項 enablegroups={1|0},包組 failovermethod={roundrobin|priority},優先級-(默認為:roundrobin,意為隨機挑選; cost=默認為1000)
2.yum 命令的用法
格式:yum [options] [command] [package …] 1)顯示倉庫列表: yum repolist [all|enabled|disabled] 2)顯示程序包: yum list 3)安裝程序包(centos7上yum支持補全,因為其bash版本更高): yum install package1 [package2] […] yum reinstall package1 [package2] […] (重新安裝) 4)升級程序包: yum update [package1] [package2] […] yum downgrade package1 [package2] […] (降級) 5)檢查可用升級: yum check-update 6)卸載程序包: yum remove | erase package1 [package2] […] ) 7)查看程序包信息information: yum info […] 8)查看指定的特性( 可以是某文件)是由哪個程序包所提供: yum provides | whatprovides feature1 [feature2] […],類似于rpm的-qf選項 9)清理本地緩存(yum緩存在主配置文件中有說明即是#cat /etc/yum.conf有相關說明): 安裝程序包時,下載的包文件存放于cachedir=/var/cache/yum/$basearch/$releasever中,其中$basearch是硬件架構,$releasever是操作系統版本號 yum clean [ packages | metadata | expire-cache |rpmdb | plugins | all ] . 10) 構建緩存: yum makecache 11) 搜索: yum search string1 [string2] […],以指定的關鍵字搜索程序包名及summary信息 12) 查看指定包所依賴的capabilities: yum deplist package1 [package2] […] 13) 查看yum 事務歷史: yum歷史日志文件:/var/log/yum.log #cat /var/log/yum.log也可以查看yum事務歷史 yum history [info|list|packages-list|packages-info|summary|addon-info|redo|undo|rollback|new|sync|stats] 14) 包組管理的相關命令: 單個包的功能有限,為了實現復雜的功能,需要許多包組成包組 yum groupinstall group1 [group2] […] ,安裝包組 yum groupupdate group1 [group2] […] ,升級包組 yum grouplist [hidden] [groupwildcard] […] ,查看包組列表 yum groupremove group1 [group2] […] ,卸載包組 yum groupinfo group1 […] ,查看包組信息
3. 如何使用光盤當作本地yum 倉庫
1) 掛載光盤至某目錄,例如/mnt/cdrom [root@localhost ~]# mkdir /mnt/cdrom [root@localhost ~]# mount /dev/cdrom /mnt/cdrom 2) 創建配置文件 [root@localhost ~]# vim /etc/yum.repos.d/yum.repo [cdrom] name=yum test baseurl=file:///mnt/cdrom或者file:///misc/cd gpgcheck=0 gpgkey= enabled=1
4. yum 的命令行選項
-nogpgcheck:禁止進行gpgcheck檢查 -y:自動回答為“yes” -q:靜默模式 -disablerepo=repoidglob:臨時禁用此處指定的repo -enablerepo=repoidglob:臨時啟用此處指定的repo -noplugins:禁用所有插件
5. yum 倉庫
1) yum 的repo配置文件中可用的變量: $releasever: 當前OS的發行版的主版本號 $arch: 平臺,i386,i486,i586,x86_64等等 $basearch:當前基礎平臺架構 實例: baseurl=http://server/centos/$releasever/$basearch/ http://server/centos/7/x86_64 http://server/centos/6/i384 2) 創建自定義yum倉庫: createrepo [options] <directory> 其中yum需要的一些依靠性、校驗信息等等都存放在repodata目錄中,所以要自定義建立yum源不僅需要rpm包,也是離不開repodata目錄,repodata目錄文件可以由createrepo命令生成
五、源碼安裝
C代碼編譯安裝三步驟-在源代碼目錄下操作
C代碼編譯安裝三步驟: 1) ./configure: (1) 通過選項傳遞參數,指定啟用特性、安裝路徑等;執行時會參考用戶的指定以及Makefile.in文件生成makefile; (2) 檢查依賴到的外部環境; 2) make: 根據makefile文件,構建應用程序; 3) make install 開發工具: autoconf: 生成configure腳本 automake:生成Makefile.in 建議:安裝前查看INSTALL,README 開源程序源代碼的獲取: 官方自建站點: apache.org (ASF) mariadb.org ... 代碼托管: SourceForge Github.com code.google.com c/c++: gcc (GNU C Complier) 編譯C源代碼: 前提:提供開發工具及開發環境 開發工具:make, gcc等 開發環境:開發庫,頭文件 glibc:標準庫 通過“包組”提供開發組件 CentOS 6: "Development Tools", "Server Platform Development", 第一步: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
2. 安裝后的配置:(以httpd為例子)
1) 將編譯安裝后的二進制程序目錄導入至PATH 環境變量中,就可以直接使用命令而不再用寫絕對路徑或相對路徑; 編輯文件/etc/profile.d/NAME.sh #vim /etc/profile.d/http2.sh PATH=$PATH:/usr/local/http2/bin 2) 導入庫文件路徑 編輯/etc/ld.so.conf.d/NAME.conf 添加新的庫文件所在目錄至此文件中#vim /etc/ld.so.conf.d/http2.sh /usr/local/http2/lib 然后讓系統重新生成緩存#ldconfig [-v] 3) 導入頭文件,頭文件的默認位置是/usr/include 基于鏈接的方式實現:ln -sv [root@localhost htdocs]# cd /usr/include [root@localhost include]# ln -s /usr/local/http2/include http2 4) 導入幫助手冊 編輯/etc/man.config|man_db.conf文件 添加一個MANPATH /usr/local/http2/man
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。