在我們的運維工作,總是避免不了安裝某些軟件,或者編譯安裝某些軟件,我們知道操作系統當中的程序都是有程序員通過開發工具開發的來,程序員直接編寫的純文本的文檔我們稱之為源代碼,但我們的計算機只能識別二進制程序,那么必須要將源代碼變成計算機能識別的二進制程序,這里需要通過編譯器來進行編譯,將源碼轉換成二進制程序,再通過安裝即可。
還有一類程序就是二進制程序,系統是由某些廠商來做的,在廠商的系統上編譯出來的程序,自然就在系統上運行了,這里是由廠商直接編譯好程序然后釋放出來給用戶,如此一來,由于我們本來就使用廠商的發行版,系統是一樣的,那么使用廠商的提供編譯過的程序就沒問題。首先來介紹下軟件運行的環境
※軟件運行環境
API:Application Programming Interface
POSIX: Portable OS
程序源代碼—à預處理—à編譯—-à匯編—-à鏈接
靜態編譯:編譯器在編譯可執行文件的時候,將可執行文件需要調用的對應動態鏈接庫(.so或.lib)中的部分提取出來,鏈接到可執行文件中去,使可執行文件在運行的時候不依賴于動態鏈接庫。
共享編譯:將庫提取出來,與可執行文件鏈接到一起,實現共享編譯
ABI:Application Binary Interface
Windows與linux不兼容
ELF(Executable and Linkable Format)
PE
庫級別的虛擬化
linux:WINE
windows:Cywin
※包管理器
二進制應用程序的組成部分:
二進制文件、庫文件、配置文件、幫助文件、頭文件
程序包管理器
將編譯好的應用程序組成文件打包一個或幾個程序包文件,從而方便快捷地實現程序包的安裝、卸載、查詢、升級和校驗等操作目前在Linux系統之上軟件的安裝方式最常見的有一下兩種方式:
dpkg
這個機制最早是有Debian Linux社區所開發出來的,通過dpkg的機制,Debian提供的軟件就能夠簡單的安裝起來,同時還能提供安裝后的軟件資訊,實在非常不錯?;?/span>Debian衍生版系統,如B2D,Ubantu等都是用dpkg來管理軟件的。
RPM
這個機制最早是由redhat公司開發出來,后來大家覺得這個管理器非常好用,因此很多發行版就使用這個機器來作為軟件包的管理器如SuSe,Fedora,CentOS。
但是如上的兩種包管理器的機制或多或少都會有軟件屬性的相依的問題,其實在安裝時,每個文件文件都提供依賴性的檢查,那么如果我們將依賴性的數據做成列表、等到安裝時,如果有依賴關系,通過依賴性的數據列表,管理機制就會同時安裝被依賴的軟件。
※軟件包命令規則
源代碼:
name-version.tar.gz|bz2|xz
version:major(主版本號).minor(次版本號).release(釋放號)
比如:httpd-2.4.6.tar.bz2包的名字叫httpd主版本號是2次版本號是4釋放號是6(也是修改過6次的意思)后面是以打包壓縮的方式存儲
rpm包命名方式
name-version-release.arch.rpm
例如:bash-4.2.46-19.el7.x86_64.rpm
包名稱叫做bash主版本號是4,次版本號是2,修整號是46,適合的硬件平臺是el7.x86
主版本號:當新功能推出時,更新主版本號,或者某些功能有較大的變化時,就需要更新了
次版本號:與主版本號相同,次版本號更新只是局部的,但仍然有較為重要的改進和增強,這是需要變動版本號了
修訂號:局部的變量,一般只是修復bug,或者簡單的功能擴展
因此,主版本號最為穩定,變化的周期長,修改號更新快,變化周期短
常見的arch
x86:i386,i486,i586,i686
x86_64:x64,x86_64,amd64
powerpc:ppc
跟平臺無關:noarch
包分類和拆包
Application-version-arch.rpm:主包
Application-devel-version-arch.rpm開發子包
Application-utils-version-arch.rpm其他子包
Application-libs-version-arch.rpm其他子包
解決依賴包管理工具
yum:rpm包管理器的前端工具
apt-get:deb包管理器前端工具
zipper:suse上的rpm前端管理工具
dnf:Fedora 18版本以上的rpm包管理器前端工具
庫文件:
查看二進制程序所依賴的庫文件
ldd /path/to/binary_file
比如:ldd /bin/ls
管理及查看本機裝載的庫文件
ldconfig
/sbin/ldconfig –p:顯示本機已經緩存的所有可用庫文件名及文件路徑映射關系
配置文件:/etc/ld.so.conf, /etc/ld.so.conf.d*.conf
緩存文件:/etc/ld.so.cache
程序包來源
1. 系統光盤
2. 項目官方站點
3. 第三方組織如Fedora EPEL(Extra Packages for Enterprise Linux)
4. 自己制作
※RPM
優點
1. rpm內含已經編譯過的程序與配置文件等數據,可以讓使用者免除重新編譯的困擾。
2. rpm在被安裝之前,會檢查系統的硬盤容量、操作系統版本、可避免文件被錯誤安裝
3. rpm文件本身提供軟件版本咨詢,依賴性軟件名稱,軟件用途說明、軟件含義便于了解軟件
rpm的管理分為安裝、卸載、升級、查詢、檢驗、數據庫維護
安裝:
rpm {i|install} [install-option] PACKAGES_FILE…
-h:hash,以#表示安裝進度,每個#表示%2
-v|–verbose:顯示詳細過程
-vv:顯示更詳細的過程
[install-option]
rpm –ivh –test:測試安裝;但不真正執行安裝;在dry run模式下進行
rpm –ivh – –nodeps:忽略依賴關系
rpm –ivh – –replacepkgs:重新安裝,替換原有安裝
rpm –ivh – –nosignature:不檢查來源合法性
rpm –ivh – –nodigest:不檢查包完整性
rpm –ivh – –force:強行安裝,可以實行重裝或降級
rpm –ivh – –scripts:不執行程序包腳本片段
查詢:
rpm {q|–query} [select-options] [query-options]
rpm -q packages_name: 查詢指定的包是否已安裝
rpm -qa:查詢所有已安裝的包
rpm -qi packages_name:查詢指定包的說明信息
rpm -ql packages_name:查詢指定安裝包生成的文件
rpm –qc packages_name:查詢指定安裝包生成的配置文件
rpm –qd packages_name:查詢指定安裝包生成的幫助文件
rpm –qf files_name:查詢指定的文件是由那個包安裝生成的
rpm –qp files_name:查詢指定未安裝的程序包文件做查詢操作
–whatprovides capability:查詢指定的capability被那個包所提供
–whatrequires capability:查詢指定的capability被那個包所依賴
rpm –q –scripts packages_name:查看指定的包中包含的腳本
rpm –q –changelog packages_name:查詢rpm包改變日志
rpm –R packages_name:查詢指定的程序包所以來的capabilty
rpm2cpio 包文件|cpio –itv 預覽包里的文件
rpm2cpio 包文件|cpio –id “*.conf”釋放包內文件
升級:
rpm {-U|–upgrade}[install-options] PACKAGES_FILE…:如果有老版本的,則升級,否則,則安裝
rpm {-F|–freshen}[install-options] PACKAGES_FILE…:如果有老版本的,則升級,否則,則退出安裝
–oldpackages:降級
注意:
不要對內核做升級操作;Linux支持多內核版本并存,因此,對直接安裝新版本內核
如果源程序包的配置文件安裝后曾被修改,升級時,新版本提供的同一個配置文件并不會覆蓋老版本的配置文件,而把新版的文件命令為以.rpmnew的文件保留
卸載:
rpm {-e|–erase} [–allmatches] [–nodeps][–test] PACKAGES_NAME
簡單用法:rpm –e packages_name
–nodeps:忽略依賴關系
–test:測試卸載;dry-run模式
–allmatches:如果一個程序包同時安裝多個版本時,則此選項一次全部卸載,但程序包配置文件安裝后曾被修改,卸載時,此文 件通常不會被刪除,而是被重名為以.rpmsave的文件保留
校驗:
查詢包安裝之后生成的文件是否發生了改變
rpm {-V|–verify} [select-options][verify-options]
常用用法:rpm –V packages_name
當沒有輸出結果時表示軟件包完整ok,當有相應的結果輸出表明對應的內容有修改,具體如下:
S file Size differs 文件的容量大小發生改變
5(MD5 sum differs)MD5這一種指紋碼的內容發生改變
M Mode differs 文件的類型或文件的屬性發生改變
D Device major/minor number mismatch 設備的主、次版本號發生改變
L readLink(2) path mismatch 鏈接路徑發生改變
U User ownership differs 文件的屬主發生改變
G Group ownership differs 文件的屬組發生改變
T mTime differs 文件的創建時間發生改變
P capabilities differ 能力發生改變
注意:在安裝軟件之前最好對即將安裝的軟件進行合法性驗證,這樣可以檢查出軟件是否來源合法、內容合法,在一定程度上避免一些由不安全因素導致不安全的事情發生
來源合法指的是由我們信任的制作者提供;依賴于制作的親筆簽名,簽名是作者使用自己的私鑰加密程序包的特性碼
內容合法是指包未被二次修改;完整性校驗成功,依賴于制作者提供的程序特征碼
驗證方式:安裝用同樣的特征碼提取算法提取程序包的特征碼,并與原作者提供的相比較
導入密鑰
rpm –import /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6
驗證 rpm –K packages_name
重建數據庫
當我們把數據庫的文件刪除之后,我們查詢軟件包的信息都是查詢不到的,因為rpm –q是依據數據庫里的數據來進行查詢,這時就需要重建數據庫了
數據庫位置
/var/lib/rpm
rpm {–initdb|–rebuilddb}
rpm –initab:初始化,如果事先不存在數據庫,則新建,否則,不執行任何操作
rebuilddb:重建,無論事先是否存在,直接重新創建數據庫
※yum
yum:Yellowdag Update Modifier,yum是通過分析rpm的標頭文件數據后,根據各軟件的依賴關系制作出有依賴關系時的解決方案,然后可以自動處理軟件的依賴性問題,以解決軟件安裝或移除與升級的問題。因此我們想使用yum 必須先要找到適合的yum server才行,而每個yum server可能都會提供許多不同的軟件功能,yum server會根據功能進行分類,這里的分類就是所謂的倉庫,yum repository 存儲了眾多rpm包,以及報相關的元數據文件放置在特定目錄repodate下
yum倉庫中的元數據文件
primary.xml.gz:所有的rpm包的列表,依賴關系,以及每個rpm安裝生成的文件列表
filelists.xml.gz:當前倉庫中所有rpm包的所有文件列表
other.xml.gz:額外信息,rpm包的修改日志
repomd.xml:記錄的事上面三個文件的時間戳和檢驗和
coms*.xml.:rpm分組信息
yum客戶端配置文件
/etc/yum.conf:為所有倉庫提供公共配置
/etc/yum.repos.d/*.repo:為倉庫的指向提供配置
倉庫的定義:
[reposirtoryID]次repository用來表示此repository執行,并且唯一
name= description對倉庫的描述信息
baseurl=url://path/to/repository 指定倉庫的訪問路徑,通常為一個文件服務器上輸出的repository,要跟repodata這個目錄在同一個目錄下的路徑
http://10.1.0.1/cobbler/ks_mirror/7/
ftp://10.1.0.1/iso/7
file:///mnt/
enabled={1|0}是否啟用倉庫1表示啟動,0表示禁用
gpgcheck={1|0}是否對程序包做校驗,1表示校驗,0表示不校驗
gpgkey=file://etc/pki/rpm-gpg/RPM-GPG-CentOS-6指明gpgkey文件路徑
cost=# #表示數字,指明當前倉庫的訪問開銷,默認為1000,數值越小優先級越高
yum-config-manager
yun-config-manager –disable “repository_name” 禁用此倉庫
yun-config-manager –enable “repository_name” 啟用此倉庫
yum命令介紹
顯示倉庫列表
yum repolist [all|enabled|disabled]
all:列出已經配置的所有的可用倉庫
disable:列出禁用的倉庫
enabled:列出啟動的倉庫
顯示程序包
yum list[all|glob_expr1][glob_expr2 ] 列出所有包
yum reinstall [packeages] 重新安裝指定包
yum grouplist group1 group2 […] 查看指定包組,不指定組查看所有組
安裝程序包
yum install packages [packages2][…] 安裝某程序包
yum groupinstall packages [packages2][…] 安裝包組
在安裝某些軟件時,有時需要依賴某些安裝包,這時yum會自動解決依賴關系
升級程序包
yum update [packages1] [packages2][…] 升級
yum downgrade packages1 [packages2][…] 降級
檢查可用性
yum check-update
卸載程序包
yum remove|erase packages1[packages2][…] 刪除包
yum groupremove|erase packages1[packages2][…] 刪除包組
查看程序包信息
yum info 顯示所有包的信息 此功能跟rpm –qi類似
yum info packages 顯示指定包的信息
yum groupinfo gropu1 顯示指定包組的信息
清理本地緩存
yum clean 清理緩存
yum clean [packages]metadata|expire-cache|rpmdb|pkugins|all]
構建緩存
yum makecache
查看yum事物歷史
yum history [info|list|packages-list|packages-info|summary|addon-info|redo|undo]
yum history:顯示所有歷史事物
yum history info 6 顯示指定歷史事物信息
yum history undo 6:如果第六步是安裝這里則是卸載,反之則是安裝
如何創建本地yum倉庫
1、掛載本地光盤,如/mnt
#mount /dev/cdrom /mnt/
2、創建倉庫
vim /etc/yum.repos.d/base.repo
[cdrom]
name=123
baseurl=file:///mnt
enabled=1
gpgcheck=0
到這里本地yum倉庫就配置好了
yum的命令行選項
–nogpgcheck:禁止進行gpg check
-y:自動回答為yes
-q:靜默模式
–disablerepo=repoidglob:臨時禁用此處指定的repo
–enabledrepo=repoidglob:臨時啟動此處指定repo
–noplugins:禁用所有插件
編譯安裝
1、c代碼編譯安裝三步驟
通過選項傳遞參數,指定啟用特性,安裝路徑,執行時會參考用戶的指定以及makefile.in文件生成的makefile,檢查一來到的外部環境
2、make:根據makefile文件,構建應用程序
3、makeinstall 復制文件到相應路徑
開發工具:
autoconf:生成configure腳本
automake:生成makefile.in文件
編譯Cyuandaima
前提:提供開發工具及開發環境
開發工具:make,gcc等
開發環境:開發庫,頭文件,glibc標準庫
通過安裝包組提供開發珠江
yum groupinstall “Development Tools”
yum groupinstall “Server Platform Development
編譯安裝
第一步:configure腳本
選項:指定安裝位置,指定啟用的特性
–help:獲取其支持使用的選項
安裝路徑設定
–prefix=/Path:指定默認安裝位置,默認為/usr/loca
–sysconfdir=/path:配置文件安裝位置
optional Features:可選特性
–disable-feature
–enable-feature
optional packages:可選包
–with-packages[=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
導入幫助手冊
編輯/etc/man.config|man_db.conf文件
添加一個MANPATH
1、 yum的配置和使用;包括yum repository的創建
我將一些rpm包下載至/root/repo目錄下,此時目錄下沒有repodate的數據目錄,構建倉庫就會報錯,這時就需要createrepo,系統中默認createrepo這個命令是沒有安裝的,所以需要安裝
createrepo [options] <directory>
create /root/repo
創建了repo數據文件之后,這時候就需要配置yum倉庫了,在/etc/repos.d/目錄下創建一個以repo結尾的文件即可,內容如下
[xen] #倉庫名稱
name=1 #倉庫描述
baseurl=file:///root/repo #倉庫的路徑
enabled=1 #是否啟用倉庫1表示啟用,0表示禁用
gpgcheck=0 #是否檢查來源合法性
cost=100 #倉庫優先級默認值為1000,值越小,優先級越高
2、編譯安裝apache 2.2,并啟動此服務
第一步:下載源碼包wget: ftp://10.1.0.1/pub/Sources/sources/httpd/ httpd-2.2.29.tar.bz2
下載完成之后就需要解壓縮,隨后進入到該目錄,里面有個configure的腳本
./configure –prefix=/usr/local/apache –sysconfdir=/etc/httpd2 (prefix指定安裝路徑,sysconfdir指定配置文件路徑)
第二步: make 生成文件
第三步: make install 將make生成的文件拷貝至指定安裝目錄下
第四步:導出頭文件、庫文件、幫助文檔、二進制程序
1、 ln -sv /usr/local/apache/include /usr/include/httpd 導出頭文件
2、 導出幫助文件
vim /etc/man.config
MANPATH=/usr/loca/apache/man centos6
vim /etc/man_db.conf
MANDATORY_MANPATH /usr/loca/apache/man centos7
3、 導出庫文件
vim /etc/ld.so.conf.d/httpd2.conf
/usr/local/apache/lib 在文件中加入此行即可
4、 二進制程序
vim /etc/profile.d/httpd.conf
export PATH=$PATH:/usr/local/apache/bin
5、 服務腳本
cp /etc/rc.d/init.d/httpd /etc/rc.d/init.d/httpd24
chmod +x /etc/rc.d/init.d/httpd
加入以下幾行:
apachectl=/usr/local/apache/bin/apachectl
httpd=/usr/local/apache/bin/httpd
prog=httpd
pidfile=${PIDFILE=/var/run/httpd24.pid}
lockfile=${LOCKFILE-/var/lock/subsys/httpd24}
RETVAL=0
STOP_TIMEOUT=${STOP_TIMEOUT-10}
vim /etc/httpd24/httpd.conf
增加一行
PidFile=/var/run/httpd24.pid
service httpd24 start 啟動服務即可
ss -tan 查看有沒有80端口監聽
使用crul httpdserver測試頁面是否正常顯示,如果端口起來了,還是看不到內容可能是防火墻開了,這是需要iptables –F臨時的清理以下防火墻的策略
原創文章,作者:fszxxxks,如若轉載,請注明出處:http://www.www58058.com/39131