Linux系統基礎-管理之軟件包管理【附http源碼安裝實例】

Linux程序軟件包管理


       由於本人水平有限,以下學習總結內容不能保證準確無誤,請自行鑑別。


一、概述

windows下安裝一個軟件很輕鬆,只要雙擊.exe的文件,安裝提示連續下一步即可,然而linux系統下安裝一個軟件似乎並不那麼輕鬆了,因爲我們不是在圖形界面下所以我們要學會如何在linux下安裝一個軟件

現在又會面臨到一個問題,應用程序跨平臺是很麻煩的,既要考慮OS平臺,也要考慮硬件平臺;例如:我們的AB兩臺服務器OS都爲CentOS6-X86_64bit(軟件級別),雖然他們都是CentOS6,但是CPU卻很有可能不一樣, A主機底層是X86系列的系統跑在PowerPC上面,B主機是Inter core2雙核X86_64的系統(硬件級別),即便A和B都是CentOS6、glibc都一樣,但是我們在A主機上面編譯好的應用程序到B主機上面是不能跑起來的,他們對於正真的二進制應用程序的執行格式卻是不盡相同的,說通俗點就是他們的彙編指令並不一樣,很顯然PowerPC與X86的指令集是不一樣的,內核也是不一樣的,因此我們到發行商那裏去下載一個發行版的時候,我們一定要下載與平臺架構相兼容的版本;
OS平臺:應用程序必須爲特定平臺所支持的版本;硬件平臺:應用程序必須爲特定的CPU所支持。


1.1 軟件包的組成:

       二進制程序它是已編譯好,拿來就可以運行的,也是我係統中的核心組建,遵循FHS規範它們一般都存放在/bin, /sbin, /usr/bin, /usr/sbin, /usr/local/bin, /usr/local/sbin,但是我們可以自定義二進制程序的存放位置,假如:安裝nginx,/usr/local/nginx/後它會在這個特定的文件夾內生成bin,sbin,但是這樣一來就會出現一個問題,由於在我們的系統上命令行當中所有可以執行的命令都是在環境變量PATH定義路徑下的可執行程序才能找到,那解決辦法是將程序生成的二進制程序的路徑添加至環境變量PATH中或者使用絕對路徑;

       庫文件:與二進制相似,找庫文件也是在特定的位置下面去找的/lib, /usr/lib, /lib64, /usr/lib64,/usr/local/lib, /usr/local/lib64,如果第三方程序安裝後它的庫文件也不是找不到的,因爲系統到哪兒去找庫文件是由系統默認的,當然我們也可以像去修改環境變量PATH那樣從而能找額外二進制程序一樣去修改系統查找庫文件位置的,只不過這個查找是要通過修改/etc/ld.so.conf文件,也就是在程序製作過程當中的最後一步---預編譯、編譯、彙編、鏈接,鏈接過程中的鏈接程序所要查找動態格式的共享動態庫時索要找的路徑,很顯然如果我們安裝了許多的應用程序都安裝在了特定的路徑下,也就是說我們要在這個文件當中添加許許多多的內容,如果文件過多就會產生系統混亂,因此像/etc/profile一樣在/etc/ld.so.conf.d目錄下所有以.conf都是可以可以被識別成/etc/ld.so.conf組成部分的,那由此我們自己在修改庫文件查找路徑時並不建議修改/etc/ld.so.conf文件,而可以爲某一特定應用程序專門在/etc/ld.so.conf.d 下創建一個文件,來專門配置這個應用程序,將來我們需要卸載時,找到特定的文件刪除即可,這對我們的管理極其方便.我們可以通過ldd命令查看應用程序所依賴的共享庫,用法:#ldd [options] FILE ….

       配置文件:這個也是遵循FHS規範,安裝應用程序後的配置文件一般都存放在/etc或在它下面創建特定單獨的目錄來存放,但如果我們安裝應用程序時,將它裝到了特定的路徑下,那這就意味着應用程序將會在特定的路徑下創建/etc目錄專門存放配置文件,所以只要自己指定路徑這些配置文件也會改的,那麼一旦配置文件的路徑改了,系統會到哪兒去找呢?就像二進制程序跟庫文件一樣,我們必須要讓系統知道到哪兒去找,但配置文件不需要,因爲配置文件僅爲當前一個程序所使用,配置文件一般是沒法共享的,所以在編譯程序時只要指定了編譯安裝路徑,並告訴系統配置文件存放在什麼地方,那麼程序執行時它一定會知道去哪兒找配置文件的.此時跟我們的系統調用環境不在有任何的關係,所以配置文件無需額外配置.

       幫助文件:一般而言,一個應用程序有以下及部分組成:
man文件, info文件, README, INSTALL, ChangeLog
       man Command加上這個命令就可以查看它的幫助文檔,man本身是到到某路徑下查找與命令名同名的通常以.gz結尾的壓縮文件的名字,然後它會使用類似於zcat.或者bz2cat這些方式不展開、不解壓直接查看的,而查看時是調用less命令來顯示的,那它到哪些路徑下去找呢,通常在/usr/shared/man/這個路徑下進行查找,但是如果我們在編譯時指定了其他的安裝路徑,很有肯能它的man手冊只會存在於他的安裝路徑下,很顯然man命令又將找不到了,所以跟二進制程序和庫文件一樣,我們也需要告訴它到什麼位置下去找程序man手冊,man命令自身的配置文件/etc/man.conf,在此文件中有一個指令叫做MANPATH,用於指定到什麼路徑下去找man的,編譯過後的程序我們將man的路徑添加到此文件中就可以使用man命令獲取程序的man手冊了,如果不想修改這個文件,那可以通過man –M/path/to/man 命令,明確告訴它就到你指定的那個路徑找就可以了.

       一般一個軟件包安裝完成後都由以上四類文件組成,這四類組成部分組成起來文件數量可能會多大十幾個甚至上百個,這些文件安裝以後就分散到了各路徑下了,找起來就有點麻煩,因此爲了便捷的管理這些文件,我們可以找一個專門的應用程序管理器;


1.2 應用程序管理器:
     1.2.1、數據庫:(它有一定的冗餘機制,如果數據庫損壞可以通過備份結合安裝後的程序重新構建)
        軟件名和版本
        安裝生成的各文件路徑及校驗碼
        依賴關係
        提供功能性說明
     1.2.2、提供程序組成格式:
        文件清單
        安裝卸載時運行的腳本(post)
        應用程序爲了表示自己的狀態,一般格式都如下:
        源代碼:
name-major.release.tar.gz

        依賴關係: 在Linux哲學思想中,它使用有衆多目的單一的小程序組合完成複雜任務,由於我們的應用程序爲完成某一任務而依賴與其他另外的應用程序,而在實際生產中卻有另外的問題,循環依賴A->B->C…….,版本依賴.

       在衆多Linux系統中,例如常見的:
       Debian:它的程序包是以.deb結尾,對應的包管理器是dpkg.
       RedHat:它的程序包是以.rpm結尾,對應的包管理器是rpm(使用perl語言編寫).
       (注:rpm:RedHat Package Manager,但是就在前不久Linux標準委員會已經將rpm吸納爲Linux上程序包的標準管理工具,所以rpm改名爲:RPM is Package Manager )
無論是.deb還是.rpm包他們在管理時都有類似的功能.
      1.23、一個包管理器應該具有的基本功能:
打包(發行商完成)、安裝、查詢、升級、卸載、校驗、數據庫管理
爲了解決依賴關係就有了軟件包的前端管理器(依賴關係自動查詢解決,進一步提升了應用程序的管理性)常用的:apt-get,yum.


二、rpm包的使用管理:

2.1 rpm包命名格式:

源程序:name-version.tar.{gz|bz2|xz}
        version: major.minor.release
rpm包:name-version-release.arch.rpm
release:通常包含rpm的製作發行號,還包含適用的OS
bash-4.3.2-2.el6.x86_64.rpm

前面提到過的:

注意:①OS平臺:應用程序必須爲特定平臺所支持的版本;

      ②硬件平臺:應用程序必須爲特定的CPU所支持;

像這樣的包python-routes.noarch.rpm沒有底層的限制.一次製作,一次開發,到處使用.
比如一個源碼包有10個功能,而我們只使用3個功能,那其他的7個都不知道誰用不用,這樣一來對於我們的管理是非常麻煩的,於是出現了分包的概念.
分包:將一個大的程序包製作成單獨功能的多個包;

[root@Gmq ~]# rpm -qa | grep httpd
httpd-2.2.15-26.el6.centos.x86_64 #→核心包
httpd-tools-2.2.15-26.el6.centos.x86_64 #→子包
httpd-devel-2.2.15-26.el6.centos.x86_64 #→子包

2.2 獲取rpm包的途徑:
①、發行商的光盤或站點服務器
       以CentOS爲例:
       http://mirrors.163.com
       http://mirrors.sohu.com
②http://rpmfind.net
③http://rpm.pbone.net
注意:
①發行商,發行光盤中的包,需要升級時,官方釋放出升級包;
②無論是Centos,還是Redhat他在光盤上提供的包並非完全包含我們能使用到的包,於是Fedora 在互聯網上維護這一個叫EPEL額外的,分別面向各個版本的rpm包,所以有了發行商提供的光盤和EPEL就能夠滿足一般工作的需求了.但是如果對於應用場景比較嚴格的,還是儘量使用光盤中的包.實在不行才使用上面提供的網站去搜索相關的包.

2.3 rpm包管理:安裝

[root@Gmq ~]#wget 包路徑->獲取rpm安裝包
[root@Gmq ~]#rpm -i/path/to/rpm_packages…→install
#-v->顯示安裝信息,-vv,-vvv
#-h->以#的個數顯示安裝的進度,一個#表示2%的進度.
[root@Gmq ~]# rpm -ivh samba-3.6.9-151.el6.x86_64.rpm
Preparing...###########################################[100%]
1:samba########################################### [100%]
[root@Gmq ~]#rpm –ivh --test #→僅測試,不正真執行安裝.
[root@Gmq ~]#rpm –ivh --nodeps/path/to/rpm_packages…→如果安裝時提示有依賴關係,則解決依賴關係或者忽略依賴關係:
[root@Gmq ~]#rpm –ivh --replacepkgs /path/to/rpm_packages…#→ 重新安裝;原來的配置文件不會被覆蓋,新安裝的配置文件將會被重命名以,rpmnew爲後綴的文件.
[root@Gmq ~]#rpm –ivh --force /path/to/rpm_packages… #→強制執行安裝

2.4 rpm包管理:卸載

[root@Gmq ~]#rpm -e --erase packages_name

如果一個包卸載時,被其他程序所依賴:則可以
①把依賴的一同卸載;
②忽略依賴關係;--nodeps
③不再卸載.

2.5 rpm包管理:查詢

[root@Gmq ~]#rpm –qpackages_name #→查詢單個指定的包是否安裝.
[root@Gmq ~]#rpm –qa packages_name #→查詢所有已安裝的包.
[root@Gmq ~]#rpm –qi packages_name packages_name #→查詢指定包的描述信息.
[root@Gmq ~]#rpm –ql packages_name #→查詢包安裝之後在當前系統上生成的文件的列表.
[root@Gmq ~]#rpm –qd packages_name #→查詢安裝後生成的幫助文檔.
[root@Gmq ~]#rpm –qc packages_name #→查詢安裝後生成的配置文件.
[root@Gmq ~]#rpm –q --scripts packages_name #→查詢安裝後包相關的腳本.

腳本分類:
Preinstall   →安裝後腳本   Postinstall   →安裝後腳本
Preuninstall →卸載前腳本   Postuninstall →卸載後腳本
Postrans →事物

查詢尚未安裝的rpm包文件的相關信息只需在[options]中加入字母p即可.

[root@Gmq ~]#rpm –pql /path/to/packages_file →查詢一下如果這個包安裝後生成的文件會放到什麼位置.
[root@Gmq ~]#rpm –qd packages_name →查詢如果這個包安裝後生成的幫助文檔.

2.6 rpm包管理:升級

[root@Gmq ~]#rpm –Uvh /path/to/packages_file #→ 檢查並升級系統中的某個軟件包,若該包原來未安裝,則等同於"-i"選項
[root@Gmq ~]#rpm–Fvh /path/to/packages_file #→ 檢查並升級系統中的某個軟件包,則放棄安裝

2.7 rpm包管理:校驗

#檢查包安裝後生成的文件是否被修改過;
[root@Gmq ~]#rpm -V package_name
S file Size differs #→文件大小是否被改變
M Mode differs (includes permissions andfile type) #→權限是否被改變
5 digest (formerly MD5 sum) differs #→MD5校驗是否改變
D Device major/minor numbermismatch #→主設備號/次設備號
L readLink(2) path mismatch #→路徑
U User ownership differs #→屬主是否改變
G Group ownership differs #→屬組是否被改變
T mTime differs #→時間戳是否被改變
P caPabilities differ #→能力

2.8 rpm包管理:檢查來源合法性和軟件包完整性
源程序:通過md5或sha1校驗碼驗正;
rpm包:發行商提供的合法性是可信的
包完整性:通過單向加密機制(md5|sha1)
來源合法性:通過公鑰加密機制(RSA)
命令:gpg, gpg是pgp的實現.
導入製作者的公鑰,CentOS發行版的公鑰在iso文件中;

[root@Gmq ~]#rpm --import /path/to/gpg-key-file →導入命令:
[root@Gmq ~]#rpm–K[--checksig] /path/to/package_file →檢查
#--nosignature: 不檢查來源合法性
#--nodigest: 不檢查完整性

2.9 rpm包管理:維護RPM數據庫
數據庫存放位置:/var/lib/rpm

[root@Gmq ~]#rpm -- initdb →初始化(如果實現不存在一個數據庫,則新建)
[root@Gmq ~]#rpm --rebuild →重建(直接重建數據庫,會覆蓋原有的庫)

三、yum程序包管理前端工具:

3.1什麼是yum
yum是rpm的補充,他的工作依賴於rpm;能夠自動解決依賴關係.
文件服務器(共享rpm包):通過yum所支持的文件共享機制將各rpm包通過文件服務共享;
repository: 倉庫
①各rpm包;
每個rpm包相互間的依賴關係、程序包安裝後所能夠生成文件列表等元數據文件;


3.2 yum客戶端:
①配置文件:指定各可用的yum倉庫;
緩存元數據:yum會到各可用yum倉庫獲取元數據,並緩存至本地;
分析元數據:根據具體操作請求完成元數據分析, 可能包括檢查依賴關係、文件列表等信息;
④執行具體操作:


3.3 文件服務器:
支持的協議:ftp,http,nfs,file…
客戶端配置文件指定對服務器訪問方式:

①ftp    ftp://server/path/to/repo
②http   http://server/path/to/repo
③nfs    nfs://server/nfs_path
④file   file:///path/to/repository

3.4 yum管理應用程序的使
要使用yum管理應用程序,首先得配置其可用的yum倉庫,保存在配置文件中:
/etc/yum.conf
/etc/yum.repos.d/*.repo
配置文件格式:由兩段組成,類似windows的ini配置文件
[main] :主配置段
[repo] :倉庫配置段→可配置多個段
置段repo:

[repo_ID]
name=String
baseurl=倉庫的訪問路徑
enabled={1|0}是否啓用此yum倉庫
gpgcheck={1|0}是否檢查程序來源和發性以及完整性
gpgkey=公鑰文件(可以在本地,也可是服務器端路徑)
cost=定義此倉庫開銷,默認爲1000,值越小,優先級別越高

3.5 yum命令的使用:

格式[root@Gmq ~]# yum [options] [command] [package ...]

[root@Gmq ~]# yum repolist [all|enable|available] -> 顯示列出所有以配置好的可用yum repo
[root@Gmq ~]# yum clean[all|packages|metadata|expire-cache|rpmdb|plugins] ->清除緩存
[root@Gmq ~]# yum [list|installed|available] ->顯示所有安裝過或可用而未安裝但是存儲在指定yum倉庫中的包
[root@Gmq ~]# yum info packages_name →列出rpm包的描述
[root@Gmq ~]# yum grouplist –>列出所有包組
[root@Gmq ~]# yum groupinfo "Packages_group_name" →顯示包組信息(包組名稱中含有空格需要加引號)
[root@Gmq ~]# yum install package_name ...  → 安裝指定的程序包
[root@Gmq ~]# yum reinstall package_name ... -> 重新安裝指定的程序包
[root@Gmq ~]# yum check-update package_name  →檢查可升級的包
[root@Gmq ~]# yum update package_name ... → 升級指定的程序包(若要明確升級到指定的版本,需指定版本號)
[root@Gmq ~]# yum downgrade package_name → 降級
[root@Gmq ~]# yum erase|removepackage_name ... → 卸載
[root@Gmq ~]# yum whatprovides|provides /path/to/somefile:查詢某文件是由哪個包安裝生成的;與rpm –qf 類似
[root@Gmq ~]# yum groupinstall "group_name" →安裝指定的包組
[root@Gmq ~]# yum groupremove"group_name" →卸載指定的包組

安裝本地包:

[root@Gmq ~]# yum install /path/to/package_file

手動禁止檢查來源及完整性.

[root@Gmq ~]# yum install /tmp/samba-3.6.9-151.el6.x86_64.rpm--nogpgcheck

提示:

如果系統爲CentOS 5,常用的開發包組爲“Development Tools”和“Development Libraries”
CentOS 6,常用的開發包組爲“Development Tools”和“Server PlatformDevelopament”“Desktop Platform Development”(有圖形程序時需安裝此組)

3.6 yum配置文件中可用的四個宏:

$releasever:程序的版本,對Yum而言指的是redhat-release版本;只替換爲主版本號,如RedHat 6.5,則替換爲6;
$arch:系統架構
$basearch:系統基本架構,如i686,i586等的基本架構爲i386;
$YUM0-9:在系統中定義的環境變量,可以在yum中使用;

獲取當前系統相應宏替換結果的辦法:

# python
Python 2.6.6 (r266:84292, Nov 22 2013,12:16:22)
[GCC 4.4.7 20120313 (Red Hat 4.4.7-4)]on linux2
Type "help","copyright", "credits" or "license" for moreinformation.
>>> import yum,pprint
>>> yb = yum.YumBase()
>>> pprint.pprint(yb.conf.yumvar,width=1)
Loaded plugins: fastestmirror,refresh-packagekit
{'arch': 'ia32e',
'basearch': 'x86_64',
'releasever': '6',
'uuid':'ea249181-2f82-4c40-8c42-d51b3fce319a'}
>>> quit()

2.7 本地創建yum倉庫

       在發行版的光盤當中就有元數據,所以我們可以直接以光盤爲yum倉庫源,但是如果我們用不了光驅或者自己搭建一個文件服務源又該如何做呢,所以只能手動創建元數據信息.步驟如下:
將所需要的rpm包拷貝至本地rpm包存放位置,這裏我以我係統上以file文件協議爲例創建本地yum倉庫:

[root@Gmq ~]#mkdir /data/rpmdata  #→rpm包存放位置
[root@Gmq ~]#cp /media/Pakages/*/data/rpmdata #→這個文件夾內只存放了rpm包,元數據稍後創建
[root@Gmq ~]# cd /etc/yum.repos.d/ #→配置yum客戶端:
[root@Gmq yum.repos.d]# tar -cjf yumrepo.tar.gzCentOS-Base.repo.bak CentOS-Debuginfo.repo CentOS-Media.repo CentOS-Vault.repo #→我們將這四個文件打包並刪除,自行創建.
[root@Gmq yum.repos.d]#ls
yumrepo.tar.gz
[root@Gmq ~]# vim base.repo #→後綴一定是以.repo結尾
[base-CentOS6] ->repoID
name=Cent0S6.4-x86_64_Yumrepo #→自定義的
baseurl=file:///data/rpmdata/ #->以file協議訪問
enabled=1 #→開啓此yum倉庫
gpgcheck=0 #→關閉檢查其程序來源性和完整性
[root@Gmq yum.repos.d]# rpm -q createrepo #→首先要確保createrepo這個包已經安裝
createrepo-0.9.9-17.el6.noarch
[root@Gmq yum.repos.d]# createrepo /data/rpmdata  #→開始創建元數據
Spawning worker 0 with 6111 pkgs
Workers Finished
Gathering worker results
Saving Primary metadata
Saving file lists metadata
Saving other metadata
Generating sqlite DBs
Sqlite DBs complete
[root@Gmq rpmdata]# ls -ld repodata
drwxr-xr-x 2 root root 4096 Feb 23 08:40repodata #→完成之後在/data/rpmdata/目錄下將會創建這個文件夾,裏面存放的就是在本地rpm包的元數據信息.
[root@Gmq rpmdata]#yum repolist
[root@Gmq ~]# yum repolist  #→通過repolist我們可以得知該本地yum源可以正常使用
Loaded plugins: fastestmirror,refresh-packagekit, security
Loading mirror speeds from cachedhostfile
repoidreponamestatus
base-CentOS6Cent0S6.4-x86_64_Yumrepo6,111
[root@Gmq ~]# yum install –y samba #->我們嘗試安裝一下samba是否能夠執行成功.
…………………
…………………
…………………
…………………
Complete!
[root@Gmq ~]# rpm -q samba
samba-3.6.9-151.el6.x86_64
[root@Gmq ~]#

四、源碼包編譯安裝:

4.1 什麼是源碼包軟件:
       在文章開始前已經說到了rpm以及yum安裝和管理程序軟件的方法,而yum安裝的是二進制包,只需安裝上就可以使用,並且yum的安裝過程,人爲無法干預,不能按需安裝.源裏面有什麼就安裝什麼,安裝的版本也比較低.但是除了rpm和yum之外還有一種安裝軟件的方式———源碼包編譯安裝,何爲源碼包呢,它們是由我們常見的c,c++、perl源碼、或者python來開發的,編譯安裝過程,軟件根據用戶的需要加以定製;按照需求,可以設定參數,進行安裝,並且安裝的版本,軟件功能定製性、靈活性都比較大.

4.2 怎樣安裝以源碼包打包的軟件:

       在安裝之前我們需要了解幾個概念:
       autoconf是用來產生configure文件的,.configure是一個腳本,它能設置源程序來適應各種不同的操作系統平臺,檢查編譯環境是否滿足編譯需求,並定義當前程序編譯時啓用哪個特性或功能,以及安裝路徑的定義等等;
       automake是用於結合configure腳本生成makefile文件,而makefile文件是make命令的配置文件.

4.2.1 編譯安裝的步驟

[root@Gmq ~]#tar zx package_version.tar.{gz|bz2|xz} #->拿到源碼包,並解壓(展開後的目錄名通常爲package-version)
[root@Gmq ~]#cd packages_version #->切換到源碼包目錄下
[root@Gmq ~]#./configure ->執行腳本
[root@Gmq ~]#make #->編譯
[root@Gmq ~]#make install #->安裝

configure腳本的通用功能;我們需要定義的配置:

①安裝路徑:
--prefix=/usr/local/package_name #→程序安裝路徑
--sysconfdir=/etc/package_name #→配置文件存放路徑
②指定啓用/禁用的特性:
--enable-feature: 例如--enable-fpm
--disable-feature: 例如 --disable-socket
③指定所依賴功能、程序或文件
--with-function:啓用某功能
--without-function:禁用某功能
不同的程序,其configure腳本功能不同,要獲取幫助
./configure --help

4.3 實驗案例:源碼編譯安裝httpd服務:

         實驗系統版本:CentOS6.4-X86-64

4.3.1 檢查實驗環境(開發環境的支持):  

[root@Gmq data]# yum grouplist "Server Platform Development" "Development Tools"
Loaded plugins: fastestmirror,refresh-packagekit, securit
Setting up Group Process
Loading mirror speeds from cachedhostfile
Installed Groups:
Development tools
Server Platform Development
Done
[root@Gmq data]# gcc --version
gcc (GCC) 4.4.7 20120313 (Red Hat4.4.7-3)
Copyright (C) 2010 Free SoftwareFoundation, Inc.
This is free software; see thesource for copying conditions.There isNO
warranty; not even forMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
[root@Gmq data]#

4.3.2 獲得httpd源碼包

[root@Gmq data]# wget ftp://172.16.0.1/pub/Sources/sources/httpd/httpd-2.2.25.tar.bz2
[root@Gmq data]# ls
httpd-2.2.25.tar.bz2
[root@Gmq data]#

4.3.3 解壓源碼包,進入已解壓源碼包文件夾:

[root@Gmq data]# tar xf httpd-2.2.25.tar.bz2
[root@Gmq data]# ls
httpd-2.2.25httpd-2.2.25.tar.bz2
[root@Gmq data]#cd httpd-2.2.25
[root@Gmq httpd-2.2.25]# ls
ABOUT_APACHE  config.layout  httpd.dep       libhttpd.dsp  modules.o         srclib
acinclude.m4  config.log     httpd.dsp       libhttpd.mak  NOTICE            support
Apache.dsw    config.nice    httpd.mak       LICENSE       NWGNUmakefile     test
build         config.status  httpd.spec      Makefile      os                VERSIONING
BuildAll.dsp  configure      include         Makefile.in   README
BuildBin.dsp  configure.in   INSTALL         Makefile.win  README.platforms
buildconf     docs           InstallBin.dsp  modules       README-win32.txt
buildmark.o   emacs-style    LAYOUT          modules.c     ROADMAP
CHANGES       httpd          libhttpd.dep    modules.lo    server
[root@Gmq httpd-2.2.25]#

4.3.4  ./configure執行腳本並指定安裝路徑:

[root@Gmq httpd-2.2.25]# ./configure--prefix=/usr/local/apache
#………執行過程中屏幕輸出省略……
[root@Gmq httpd-2.2.25]#

4.3.5 如果上面執行完成沒有報錯那麼就可以執行編譯操作了

[root@Gmq httpd-2.2.25]# make
#………執行過程中屏幕輸出省略……
[root@Gmq httpd-2.2.25]#

4.3.6 如果編譯操作也沒有問題那就執行最後一步安裝

[root@Gmq httpd-2.2.25]# make install

4.3.7 安裝完成,找到http的二進制程序啓動服務即可

[root@Gmq httpd-2.2.25]# cd /usr/local/apache/bin
[root@Gmq bin]# ./apachectl start
[root@~ bin]# netstat -antl | grep :80
tcp    0    0      :::80              :::*      LISTEN
[root@~ bin]#

4.3.8 驗證測試通過,實驗告一段落

wKiom1MRYyGC0BUzAAAvCbdgQSA096.png


       由於我們前面說到過源碼包的安裝路徑可以安裝到自定義的目錄下,軟件功能定製性、靈活性都比較大.而Apache又是支持二次開發的,所以它的二進制文件、庫文件、頭文件以及幫助文件都在/usr/local/apache/目錄下,要想讓系統找到這些文件,那我們還要做一下操作,讓它更加的完善一些.

將源碼安裝的apache的二進制文件的路徑加入環境變量中,並通過source對文件重讀:

[root@Gmq ~]# vim /etc/profile.d/httpd.sh
PATH=/usr/local/apache/bin:$PATH
export PATH
[root@Gmq ~]#source /etc/profile.d/httpd.sh

將源碼安裝的apache的頭文件導入到系統找得到的位置:

[root@Gmq include]# mkdir /usr/include/httpd
[root@Gmq ~]# ln –sv /usr/local/apache/include /usr/include/apache

將源碼安裝的apache的庫文件導出給系統找得到的位置

[root@Gmq ~]# vim /etc/ld.so.conf.d/httpd.conf
/usr/local/apache/lib #→在/etc/ld.so.conf.d中新建與apache服務同名的文件並添加此行
[root@Gmq ~]# ldconfig #→通知系統重讀新生成緩存
/usr/local/apache/lib #→可以看到庫文件已經加進去了
libaprutil-1.so.0 → libaprutil-1.so.0.5.2
libapr-1.so.0 → libapr-1.so.0.4.8
libexpat.so.0 → libexpat.so.0.5.0
……………………………………

將源碼安裝的apacheman手冊的導入系統找得到的位置

[root@Gmq ~]# vim /etc/man.config
MANPATH/usr/local/apache/man →添加此行
[root@Gmq ~]#

至此,源碼安裝httpd服務基本完善!



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章