天天看點

Linux運維 第二階段 (三)軟體安裝

程式組成部分:二進制程式;庫(自身庫、共享庫.so);配置檔案;幫助檔案。

程式=指令+資料;指令:晶片,CPU(普通指令,特權指令),指令集

/bin,/sbin,/lib,/etc(系統啟動需要用到的程式,這些目錄不能挂載到額外的分區,必須在根檔案系統的分區上);

/usr/bin,/usr/sbin,/usr/lib(作業系統的基本功能,或核心功能,應該單獨分區);

/usr/local/bin,/usr/local/sbin,/usr/local/lib,/usr/local/etc,/usr/local/man(第三方軟體安裝位置,建議獨立分區);

/opt(早期第三方軟體安裝位置)

/proc,/sys(不能單獨分區,預設為空)

/dev(不能單獨分區,2.6kernel用udev動态地建立裝置檔案,2.4kernel在此目錄下會事先建立所有裝置檔案,不能根據檔案識别裝置)

/home(建議單獨分區)

/root(沒有也可,不要單獨分區)

/var(作為系統的補充,沒有也可,有它更規範,應該單獨分區)

/boot(核心及initramfs放至處,一般/boot單獨分區,除此分區外其它均劃分為LVM)

軟體包管理器的核心功能:制作軟體包;安裝、解除安裝、更新、查詢、校驗

rpm(redhat packagemanager-->rpm is package manager,redhat/suse)

dpkg(debianpackager,DEBIAN)

yum(yellowdog updatemodifier)

/var/lib/rpm/*:rpm資料庫,安裝、解除安裝、更新、校驗、資料庫的重建、驗證資料包等工作

命名:

主包:bind-9.7.1-1.el5.i586.rpm

次包:bind-libs-9.7.1-1.el5.i586.rpm

name-version-release.arch.rpm

bind-major.minor.release-release.arch.rpm(major主版本号,重大改進;minor次版本号,某個子功能發生重大變化;前一個release發行号,修正了部分bug調整了一點功能;後一個release,rpm包作者)

rpm包:二進制格式(rpm作者将源程式編譯配置完成後制作成rpm);源碼格式

#uname -r(print system information.-a,--all;-r,--kernel-release;-s,--kernel-name;-n,--nodename)

安裝:

rpm包,二進制格式(源程式-->編譯-->二進制格式),有些特性是編譯標明的,如果編譯時未標明此特性,則無法使用;rpm包的版本會落後于源碼包,甚至落後很多

#rpm -ivh  PACKAGE_NAME

-i(--install)

-v(Print  verbose information,也可用-vv顯示更詳細的資訊)

--h(--hash,以#顯示進度,每個#表示2%,共50個)

--nodeps(忽略依賴關系)

--replacepkgs(重新安裝,替換原有安裝)

--force(強制安裝,可以實作重裝或降級)

查詢:

#rpm -q  PKG_NAME(--query,查詢指定的包是否已安裝)

#rpm -qa(查詢已安裝的所有包)

#rpm -qa  |  grep  “^z”

#rpm -ql  zsh  |  less(--list查詢指定包安裝後生成的檔案清單)

#rpm -qi  PKG_NAME(--info查詢指定包的說明資訊)

#rpm -qf  /PATH/TO/FILE(--file查詢指定檔案由哪個包安裝的)

#rpm -q  --scripts  PKG_NAME(查詢指定包中包含的腳本)

#rpm -qc  PKG_NAME(--configfiles查詢指定包安裝的配置檔案)

#rpm -qd  PKG_NAME(--docfiles查詢指定包安裝的幫助檔案)

#rpm -qpl  /PATH/TO/PKG_NAME(檢視尚未安裝的包安裝後會生成的檔案)

#rpm -qpi  /PATH/TO/PKG_NAME(檢視尚未安裝的包的說明資訊)

更新:

#rpm -Uvh  /PATH/TO/PKG_NAME(--upgrade若有老版本則更新,否則安裝)

#rpm -Fvh  /PATH/TO/PKG_NAME(--freshen若有老版本則更新,否則退出)

#rpm -ivh  --oldpackage  /PATH/TO/PKG_NAME(降級)

解除安裝:

#rpm -e  PKG_NAME(--erase;--nodeps)

校驗:

#rpm -V  PKG_NAME(--verify;狀态有S,M,5,D,L,U,G,T,P)

重建資料庫(/var/lib/rpm/*):

#rpm --rebuild(重建資料庫,執行此條一定會重建立立)

#rpm --initdb(重建資料庫,沒有才建立,有則不建立)

校驗來源合法性及軟體包的完整性:

#rpm --import /etc/pki/rpm-gpg/RPM-GPG_KEY-redhat-release

#rpm -K  PKG_FILE(--checksig)

yum:

yum倉庫中的中繼資料檔案:

primary.xml.gz(所有rpm包的清單;依賴關系;每個rpm安裝生成的檔案清單)

filelists.xml.gz(目前倉庫中所有rpm包的所有檔案清單)

other.xml.gz(額外資訊,rpm包的修改日志)

repomd.xml(上面三個檔案的timestamp和checksum)

comps*.xml(rpm包分組資訊)

/etc/yum.conf;

/etc/yum.repos.d/*.repo

定義repo檔案:

[REPO_ID]

name=DESCRIPTION

baseurl=ftp://(或http://或file://)

enabled=1(1表示啟用,0禁用)

gpgcheck=0

gpgkey=

#yum options  COMMAND  PKG_NAME

#yum list  all

#yum list  available(倉庫中有尚未安裝)

#yum list  installed

#yum list  updates(可用的更新)

#yum repolist  [enabled|all|disabled](顯示repo清單及簡要資訊,預設顯示enabled)

#yum install  PKG_NAME

#yum update|update-to  PKG_NAME

#yum remove|erase  PKG_NAME

#yum info  PKG_NAME

#yum provides|whatprovides /PATH/TO/FILE(檢視指定的檔案或特性是由哪個包生成的)

#yum grouplist  |  grep  “^z”

#yum groupinfo|groupinstall|groupremove|groupupdate  GROUP_NAME

#yum localinstall  *.rpm  *.rpm(安裝rpm包自動解決依賴關系)

編譯安裝(定制):

手動編譯安裝;編譯環境(開發環境);開發庫;開發工具(gcc(gnu c compilier);g++(g plus plus));

make項目管理工具(make調用gcc或g++),makefile定義了gcc何種次序去編譯這些源程式檔案中的源程式(automake-->makefile.in-->makefile)

autoconf-->configure(給使用者提供接口讓使用者選擇哪些特性)

編譯安裝的三步驟:./configure;make;make install

安裝前要先準備開發環境(編譯環境)”Development Tools”,”Development Libraries”,”Compatibility Libraries”

#tar xf  SAMPLE.tar.gz

#cd SAMPLE_DIR

#./configure  --help

#./configure  --prefix=/path/to/somewhere  --sysconfdir=/path/to/confile_path

#make

#make install

編譯完成後需要調試如下資訊:

1、  修改PATH環境變量,以能夠識别此程式的二進制檔案路徑,再次登入生效(在/etc/profile檔案中添加,或/etc/profile.d/rename.sh)内容為export  PATH=$PATH:/path/to/somewhere

2、  預設情況下,系統搜尋庫檔案的路徑是/lib,/usr/lib,要增添額外搜尋路徑,在/etc/ld.so.conf.d/中建立以.conf為字尾的檔案,而後把增添的路徑直接寫在此檔案中,#ldconfig  -v通知系統重新搜尋庫檔案,-v顯示過程

3、  頭檔案,每一個輸出了庫檔案的軟體都一定會有頭檔案提供,頭檔案包含了每一個庫檔案的函數、函數的調用參數、參數類型等相關屬性,這些屬性是被其他人做二次開發時指定調用風格的檔案(規範式檔案),預設位置/usr/include,增添頭檔案搜尋路徑,使用連結進行:#ln  -sv  /usr/local/software_name/include  /usr/include/software_name

4、  man檔案路徑:安裝時--prefix指定的目錄下有man目錄,将此路徑添加至man配置檔案/etc/man.config(MANPATH_MAP /PATH)或使用man指令時指定幫助文檔路徑(#man  -M  /PATH COMMAND)

以上是學習《馬哥網絡視訊》做的筆記。

1、分類:源碼包、二進制包

源碼包:優(開源,有能力可修改源代碼;可自由選擇所需功能;編譯安裝,更适合自己的系統,穩定且高效;解除安裝友善);缺(安裝步驟多,尤其較大軟體集合,如LAMP環境搭建,容易出現拼寫錯誤;編譯安裝時間長;安裝過程一旦報錯,新手很難解決)。

二進制包:優(包管理簡單,隻通過幾個指令就可實作安裝、更新、查詢、解除安裝;安裝進度比源碼包快的多);缺(經過編譯,不再可看到源代碼;功能選擇不如源碼包靈活;依賴性很繁瑣)。

2、rpm安裝

》httpd-2.2.15-15.el16.centos.1.i686.rpm

2.2.15軟體版本;-15軟體釋出的次數;el16軟體發行商,RHEL6.x

》預設安裝位置:

/etc;/usr/bin;/usr/lib;/usr/share/doc;/usr/share/man

》#rpm  -ivh 包全名  (install\verbose\hash)

       --nodeps                          不檢測依賴性

--replacefiles                    替換檔案安裝 

--replacepkgs                     替換軟體包安裝

--force                           強制安裝,相當于以上兩項的結合

--test                            測試安裝,不會實際安裝

--prefix                          指定安裝目錄

》#rpm -Uvh  包全名                      upgrade舊版升到新版,無舊版也安裝

         #rpm  -Fvh      包全名          freshen舊版才能更新,無舊版不安裝

         #rpm  -e  包名                  解除安裝

         #rpm  -q  包名                  query查詢(例:#rpm –qa|grep httpd)

         #rpm  -qi  包名                 information查詢包的資訊

         #rpm  -qip  包全名              package查詢未安裝包資訊

         #rpm  -ql  包名                 list查詢包中檔案的安裝位置

         #rpm  -qf  系統檔案名           file查詢系統檔案屬于哪個包

         #rpm  -qR  包名                 recursion依賴性

         #rpm  -qRp 包全名              查詢未安裝包依賴性

》#yum -y  install  包名

         #yum  -y remove  包名

         #yum  -y update  包名

         #yum  list                                     查詢伺服器中可以安裝的包

         #yum  list  包名                               查詢伺服器是否有此包

         #yum  search 關鍵字                            搜尋伺服器上和關鍵字相關的包

         #yum  info  包名                               查詢指定軟體包的資訊

         #yum  grouplist                                查詢可以安裝的軟體組

         #yum  groupinfo “軟體組名”                   查詢軟體組内包含的軟體

         #yum  groupinstall “軟體組名”                安裝軟體組

         #yum  groupremove “軟體組名”                 解除安裝軟體組

》搭建CD光牒 yum源

         #mv  CentOS-Base.repo  CentOS-Base.repo.bak

         #vi  /etc/yum.repos.d/CentOS-Media.repo

                   baseurl=file:///mnt/cdrom/                指定yum源位置

                   enabled=1                                 yum源檔案生效

                   gpgcheck=0                                rpm驗證不生效

》#rpm -V  包名                           verify校驗指定包中檔案

         #rpm  -Vf  系統檔案名            校驗系統檔案是否被修改

         數字證書(對即将要安裝的包驗證)

         特點:安裝原廠的公鑰檔案;安裝rpm包時,提取rpm包中的證書資訊與本機安裝的原廠證書進行比對;驗證通過,安裝,否則不允許安裝并警告。

         位置:/mnt/cdrom/RPM-GPG-KEY-CentOS-6               CD光牒中

                   /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6     系統中

         #rpm  --import /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6      

3、》#cpio -ovcB  >  檔案|裝置

備份模式o(out),v(verbose),c(portable format存儲方式),B(輸出塊為5120byte,而不是模式的512byte)

#cpio -ivcdu  <  檔案|裝置

還原模式i(in),d(還原時自動建立目錄),u(使用較新的檔案覆寫較舊的檔案)

#cpio -p  目标目錄

例:#find .  –print | cpio  -ovcB >  /root/etc.cpio

         #cpio  -ivcdu < /root/etc.cpio

注:CentOS6.x中,如果備份時寫絕對路徑,則恢複時直接到絕對路徑,最好使用相對路徑。

例:#find /boot  -print | cpio  -p /tmp/test/

提取rpm包中檔案:

         #rpm  -qf /bin/ls

         #rpm2cpio  /mnt/cdrom/Packages/core….. | cpio  -idv ./bin/ls

         #cp  /root/bin/ls /bin/

         注意:./bin/ls 提取ls到目前目錄下

4、》源碼包安裝:解壓;cd 解壓目錄;檢視安裝文檔(install和readme);編譯前準備(./configure --prefix=/usr/local/apache2/);編譯make;編譯安裝make install

啟動:#/usr/local/apache2/bin/apachect1  start

解除安裝:直接删除安裝目錄

》源碼包打入更新檔:

#patch -pn  要打更新檔的檔案 < 更新檔檔案

注:n為數字,按照更新檔檔案的路徑,指定更新位置

5、》腳本安裝程式:sebmin的安裝

# ./setup.sh  (安裝位置、日志位置、perl安裝位置、端口、密碼、ssl不啟用、啟動)

6、》函數庫的管理,分類:靜态函數庫、動态函數庫

         靜态函數庫:*.a,程式調用時被直接整合到程式中;優(程式執行時不需要調用外部資料,可直接執行);缺(檔案較大,更新困難,需把整個程式重新編譯)

         動态函數庫:*.so,程式用到時再去調用函數庫。

         #ldd  /bin/ls                  (查詢ls調用的函數庫)

         #ldd  -v  可執行檔案名         (詳細顯示版本資訊)

         注:軟體正常安裝不需調整函數庫,若未安裝正确手工安裝:1把函數庫放入指定位置/usr/lib或/lib;2把函數庫所在位置寫入/etc/ld.so.conf

         #cp  *.so /usr/lib

         #vi   /etc/ld.so.conf

         include  ld.so.conf.d/*.conf

         /usr/lib

         #ldconfig                       把函數庫讀入緩存

         #ldconfig  -p                   列出系統緩存中所有識别的函數庫

本文轉自 chaijowin 51CTO部落格,原文連結:http://blog.51cto.com/jowin/1641424,如需轉載請自行聯系原作者