在說明包相關的內容以前,我以爲有必要說一下在Linux上構建一個C程序的過程。我我的並無學習過C,內容總結自網上,因此可能顯得很小白,並且也並不是必定正確,只但願對和我同樣菜鳥的同窗有所幫助。php
(1).拿到源程序。C的源程序包中包括一堆的c文件和h文件。html
(2).編譯。使用編譯器(如gcc)將源程序文件(c和h文件)編譯成爲目標文件o文件。node
在編譯過程當中,使用makefile文件中的配置選項進行編譯。makefile文件可使用configure工具生成,有了makefile文件,就可使用make命令根據makefile文件進行編譯,再使用make install安裝。mysql
可是有些源程序中並無提供configure或config這樣的文件,這時極可能應該直接使用make(或其餘工具)帶上相關編譯參數進行編譯,參數如何給定以及給定參數的規則,見下文。linux
(3).連接。在Linux上使用ld工具,將o文件和所需的庫文件連接起來組成一個可正常工做的可執行程序。連接了庫文件以後就能夠發起一些系統調用。git
在make編譯時,可能會須要提供頭文件和庫文件的路徑,若是不提供,則搜索默認路徑。當搜索的路徑下都找不到所需文件時,將報錯提示庫文件(lib.xxxx)或頭文件(*.h)不存在。通常來講,缺乏某頭文件,只需安裝其對應的devel包便可,缺乏庫文件則可能須要安裝主包,也可能須要devel包,還多是須要單獨的libs包。sql
其中gcc編譯器的頭文件默認搜索路徑爲:(使用cpp -v命令能夠查看)shell
/usr/local/include數據庫
/usr/lib/gcc/x86_64-redhat-linux/4.4.7/include # 此項在不一樣系統上,具體路徑不同apache
/usr/include
而庫文件的默認搜索路徑及順序爲:
(1).編譯目標代碼時指定的動態庫搜索路徑;
(2).環境變量LD_LIBRARY_PATH指定的動態庫搜索路徑;
(3).配置文件/etc/ld.so.conf中指定的動態庫搜索路徑;
(4).默認的動態庫搜索路徑/lib;
(5).默認的動態庫搜索路徑/usr/lib
在make編譯時,若是要指定參數,參數的給定方式通常遵循一些規則。以下圖。
(1).使用CCARGS編譯選項表示提供頭文件路徑,在該選項的參數中,-I表示搜索路徑,-DHAS_MYSQL表示使用定義的宏HAS_MYSQL。
(2).使用AUXLIBS連接選項表示提供庫文件搜索路徑和庫文件名,其中-L指定搜索路徑,-l指定庫文件名。有時候提示提供動態連接庫路徑給連接器,則可能須要使用-rpath 指定一個搜索路徑給連接器。
關於更多可能用到的編譯選項,能夠參考每一個源程序包中的README或INSTALL文件。
在指定庫名的時候,可能和想象中的指定方法不同,它不是指定庫的全名,而是指定庫名。關於庫文件的全名,它遵循必定規律:
(1).前面必須是lib,中間是庫名,後面是後綴,例如libutil.so,其庫名爲util。
(2).庫文件的後綴有幾種:".a"爲靜態庫,".so"或者".sl"爲動態庫文件。
(3).不少庫的".so"後綴後面還會帶上數字,如libutil.so.1。這些數字和庫版本有關,帶有數字版本的庫文件是不帶數字庫文件的連接,例如libutil.so.1它會指向libutil.so。這樣就能夠實現多版本共存,若是有多個庫版本,只要找到libutil.so就能夠找到最新版本的庫文件。固然,若是想要使用特定版本的庫,只需修改下它的軟連接指向便可。
例如上面的圖中,要連接/usr/local/mysql中的libmysqlclient.a,則指定方式爲:AUXLIBS=-L/usr/lib/mysql -lmysqlclient。
而'AUXLIBS=-L/usr/lib/mysql -lmysqlclient -lz -lm -L/usr/lib/sasl2 -lsasl2 -lssl -lcrypto'則表示查找/usr/lib/mysql目錄下的libmysqlclient.xxxx以及libz.xxxx以及libm.xxxx的庫文件還查找/usr/lib/sasl2目錄下的libsasl2.xxxx以及SSL的兩個庫文件libssl.xxxx以及libcrypto.xxxx。
如下是編譯安裝postfix時的一個示例。
# make makefiles 'CCARGS=-DHAS_MYSQL -I/usr/include/mysql -DUSE_SASL_AUTH -DUSE_CYRUS_SASL -I/usr/include/sasl -DUSE_TLS ' 'AUXLIBS=-L/usr/lib/mysql -lmysqlclient -lz -lm -L/usr/lib/sasl2 -lsasl2 -lssl -lcrypto'
在rhel/centos/fedora上,包的名稱以rpm結尾,分爲二進制包和源碼包。源碼包以".src.rpm"結尾,它是未編譯過的包,能夠自行進行編譯或者用其製做本身的二進制rpm包,非".src.rpm"結尾的包都是二進制包,都是已經編譯完成的,安裝rpm包的過程實際上就是將包中的文件複製到Linux上,有可能還會在複製文件的先後執行一些命令,如建立一個必要的用戶,刪除非必要文件等。關於rpm包的製做,多是件很煩人的事,但學習它仍是很是有必要的,至少也得能製做簡單的包吧?官網:
(1)https://docs.fedoraproject.org/en-US/Fedora_Draft_Documentation/0.1/html/Packagers_Guide/index.html
(2)https://docs.fedoraproject.org/en-US/Fedora_Draft_Documentation/0.1/html/RPM_Guide/index.html
注意區分源碼包和源碼的概念,源碼通常是打包壓縮後的文件(如.tar.gz結尾的文件)。源碼包中包含了源碼,還包含了一些有助於製做二進制rpm的文件。最有力的說明就是源碼編譯安裝的程序都沒有服務啓動腳本(/etc/init.d/下對應的啓動腳本),而二進制rpm包安裝的就有,由於二進制rpm包都是經過源碼包".src.rpm"定製而來,在源碼包中提供了必要的文件(如服務啓動腳本),並在安裝rpm的時候複製到指定路徑下。
迴歸正題,一個rpm包的名稱分爲包全名和包名,包全名如httpd-2.2.15-39.el6.centos.x86_64.rpm,包全名中各部分的意義以下:
httpd 包名 2.2.15 版本號,版本號格式[ 主版本號.[ 次版本號.[ 修正號 ] ] ] 39 軟件發佈次數 el6.centos 適合的操做系統平臺以及適合的操做系統版本 x86_64 適合的硬件平臺,硬件平臺根據cpu來決定,有i38六、i58六、i68六、x86_6四、noarch或者省略,noarch或省略表示不區分硬件平臺 rpm 軟件包後綴擴展名
使用rpm工具管理包時,若是要操做未安裝的包,則使用包全名,如安裝包,查看未安裝包的信息等;若是要操做已安裝的rpm包,則只須要給定其包名便可,如查詢已裝包生成了哪些文件,查看已裝包的信息等。
而對於yum工具來講,只需給定其包名便可,如有須要,再指定版本號,如明確指明要安裝1.6.10版本的tree工具,yum install tree-1.6.10。
對於一個程序而言,在製做rpm包時,不少時候都將其按功能分割成多個子包,如客戶端程序包、服務端程序包等。
以mysql這個程序來講,它分有如下幾個包。
其中mysql-server.x86_64是提供服務的主包,mysql.x86_64是客戶端主包,mysql-bench是用於對MySQL進行壓力測試的包,mysql-libs和mysql-devel分別是庫文件包和頭文件包。後二者是提供給其餘須要聯合mysql的程序使用的,僅就實現mysql服務而言,只需安裝mysql-server便可。
而源碼編譯安裝的包會包含全部功能包,也就是說編譯安裝一個程序後,它的客戶端工具、服務提供程序、庫文件、頭文件等等都已經安裝了。
rpm包被安裝後,會在/var/lib/rpm下會創建已裝rpm數據庫,之後有任何rpm的升級、查詢、版本比較等包的操做都是從這個目錄下獲取信息並完成相應操做的。
[root@xuexi ~]# ls /var/lib/rpm/ Basenames __db.003 Group Packages Requirename Triggername Conflictname __db.004 Installtid Providename Requireversion __db.001 Dirnames Name Provideversion Sha1header __db.002 Filedigests Obsoletename Pubkeys Sigmd5
rpm安裝完成後,相關的文件會複製到多個目錄下(具體複製的路徑是在製做rpm包時指定的)。通常來講,分佈形式差很少以下表。
/etc |
放置配置文件的目錄 |
/bin、/sbin、/usr/bin或/usr/sbin |
一些可執行文件 |
/lib、/lib6四、/usr/lib(/usr/lib64) |
一些庫文件 |
/usr/include |
一些頭文件 |
/usr/share/doc |
一些基本的軟件使用手冊與幫助文件 |
/usr/share/man |
一些 man page 檔案 |
rpm工具安裝、升級和卸載的功能都不多使用。對於安裝來講,它須要人爲解決包的依賴關係,這是極其使人噁心的事對於升級來講,基本上都會使用yum工具進行安裝和升級,而卸載行爲在Linux上不多出現,大不了直接覆蓋重裝。
rpm -ivhUe --nodeps --test --force --prefix 選項說明: -i 表示安裝,install的意思 -v 顯示安裝信息,還能夠"-vv"、"-vvv",v提供的越多顯示信息越多 -h 顯示安裝進度,以#顯示安裝的進度 -U 升級或升級包 -F 只升級已安裝的包 -e 卸載包,卸載也有依賴性,"--erase" --nodeps 忽略依賴性強制安裝或卸載(no dependencies) --test 測試是否可以成功安裝指定的rpm包 --prefix 新路徑 自行指定安裝路徑而不是使用默認路徑,基本上都不支持該功能,功能極其簡單的軟件估計才支持重定位安裝路徑 --force 強制動做 --replacepkgs 替換安裝,即從新覆蓋安裝。
有時誤刪文件能夠不用卸載再裝,直接使用--replacepkgs選項再次安裝便可。
rpm包另外一個缺陷是隻能安裝本地或給定url路徑的rpm包。
注意:不要對內核進行升級;多版本的內核能夠並存,所以能夠執行安裝操做。
rpm工具的安裝功能不多使用,畢竟解決依賴關係不是件容易的事。可是rpm的查詢功能則很是實用。
-q[p] -q查詢已安裝的包,-qp查詢未安裝的包。它們均可接下面的參數 -a 查詢全部已安裝的包,也能夠指定通配符名稱進行查詢 -i 查詢指定包的信息(版本、開發商、安裝時間等)。從這裏面能夠查看到軟件包屬於哪一個包組。 -l 查詢包的文件列表和目錄(包在生產的時候就指定了文件路徑,所以可查未裝包) -R 查詢包的依賴性(Required) -c 查詢安裝後包生成的配置文件 -d 查詢安裝後包生成的幫助文檔 -f 查詢系統文件屬於哪一個已安裝的包(接的是文件而不是包) --scripts 查詢包相關的腳本文檔。腳本文檔分四類:安裝前運行、安裝後運行、卸載前運行、卸載後運行
例如:
(1).查詢文件/etc/yum.conf是經過哪一個包安裝的。
[root@xuexi cdrom]# rpm -qf /etc/yum.conf yum-3.2.29-60.el6.centos.noarch
(2).查詢安裝httpd時生成了哪些目錄和文件,還能夠過濾出提供了哪些命令行工具。
rpm -ql httpd rpm -ql httpd | grep 'bin/'
(3).查詢某個未安裝包的依賴性如zip-3.0-1.el6.x86_64.rpm的依賴性。
[root@xuexi cdrom]# rpm -qRp zip-3.0-1.el6.x86_64.rpm libc.so.6()(64bit) libc.so.6(GLIBC_2.2.5)(64bit) libc.so.6(GLIBC_2.3)(64bit) libc.so.6(GLIBC_2.3.4)(64bit) libc.so.6(GLIBC_2.4)(64bit) libc.so.6(GLIBC_2.7)(64bit) rpmlib(CompressedFileNames) <= 3.0.4-1 rpmlib(FileDigests) <= 4.6.0-1 rpmlib(PayloadFilesHavePrefix) <= 4.0-1 rtld(GNU_HASH) rpmlib(PayloadIsXz) <= 5.2-1
實際上,查看包的依賴性時,使用yum-utils包中的repoquery工具更好,"repoquery -R pkg_name"會更簡潔。yum-utils中包含了好幾個很是實用的包管理工具,能夠大體都瞭解下。
安裝rpm包會安裝rpm中全部文件,若是將某個文件刪除了,除了重裝rpm,還能夠經過從rpm包提取缺失文件的方式來修復。在win上安裝個萬能壓縮工具"好壓",能夠直接打開rpm包,而後從中解壓須要的文件出來。可是在Linux上,過程仍是有點小複雜的,其中涉及了cpio這個古來的歸檔工具。
方法:使用rpm2cpio命令組合cpio -idv命令的方式來提取。cpio具體用法參見http://www.cnblogs.com/f-ck-need-u/p/7008380.html。
rpm2cpio是將rpm轉換爲cpio格式歸檔文件的命令,有了cpio文件,就可使用cpio命令對其進行相關的操做。
cpio命令是從歸檔文件中提取文件或向歸檔文件中寫入文件的工具,通常都從標準輸入或輸出操做歸檔文件,因此都使用管道或重定向符號。
-i: 運行在copy-in模式,即從歸檔文件中將文件copy出來,即提取文件(提取) -o: 運行在copy-out模式,將文件copy到歸檔文件中,即將文件拷貝到歸檔文件中(寫入) -d: 須要目錄時自動創建目錄 -v: 顯示信息
提取rpm包文件的通常格式爲如下格式:
rpm2cpio package_full_name|cpio -idv dir_name
例如,刪除/bin/ls文件,將致使ls命令不可用,使用文件提取的方式去修復。
[root@xuexi cdrom]# which ls # 查找須要刪除的ls文件位置 alias ls='ls --color=auto' /bin/ls [root@xuexi cdrom]# rpm -qf /bin/ls # 查找ls命令屬於哪一個包 coreutils-8.4-37.el6.x86_64 [root@xuexi cdrom]# rm -f /bin/ls # 刪除ls命令 [root@xuexi cdrom]# ls # ls命令已不可用 -bash: /bin/ls: No such file or directory [root@xuexi ~]# yumdownloader coreutils # 下載所需的rpm包 [root@xuexi ~]# rpm2cpio coreutils-8.4-37.el6.x86_64.rpm | cpio -id ./bin/ls # 提取bin/ls到當前目錄下 [root@xuexi ~]# dir ~/bin # 使用dir命令查看已經提取成功,dir命令功能等價於ls ls [root@xuexi tmp]# cp bin/ls /bin/ # 複製ls命令到/bin下 [root@xuexi tmp]# ls # 測試,ls已經可用
yum工具經過倉庫的方式簡化rpm包的管理。它從倉庫中搜索相關的軟件包,並自動下載和解決軟件包的依賴性,很是方便。
/etc/yum.conf是yum的默認文件,裏面配置的也是全局默認項。
[root@server2 ~]# cat /etc/yum.conf [main] cachedir=/var/cache/yum/$basearch/$releasever # 緩存目錄 keepcache=0 # 是否保留緩存,設置爲1時,安裝包時所下載的包將不會被刪除 debuglevel=2 # 調試信息的級別 logfile=/var/log/yum.log # 日誌文件位置 exactarch=1 # 設置爲1將只會安裝和系統架構徹底匹配的包 obsoletes=1 # 是否容許更新舊的包 gpgcheck=1 # 是否要進行gpg check plugins=1 # 是否容許使用yum插件 installonly_limit=5 bugtracker_url=http://bugs.centos.org/set_project.php?project_id=23&ref=http://bugs.centos.org/bug_report_page.php?category=yum distroverpkg=centos-release # 指定基準包,yum會根據這個包判斷髮行版本
首先配置yum倉庫,配置文件爲/etc/yum.conf和/etc/yum.repos.d/中的".repo"文件,其中/etc/yum.conf配置的是倉庫的默認項,通常配置yum源都是在/etc/yum.repos.d/*.repo中配置。注意,該目錄中任意repo文件都會被讀取。
默認/etc/yum.repos.d/下會有如下幾個倉庫文件,除了CentOS-Base.repo,其餘的均可以刪掉,基本沒用。
[root@xuexi yum.repos.d]# ls /etc/yum.repos.d/ CentOS-Base.repo CentOS-fasttrack.repo CentOS-Vault.repo CentOS-Debuginfo.repo CentOS-Media.repo
repo文件的配置格式以下:
[root@xuexi yum.repos.d]# vim CentOS-Base.repo [base] # 倉庫ID,ID必須保證惟一性 name # 倉庫名稱,可隨意命名 mirrorlist # 該地址下包含了倉庫地址列表,包含一個或多個鏡像站點,和baseurl使用一個就能夠了 #baseurl # 倉庫地址。網絡上的地址則寫網絡地址,本地地址則寫本地地址,格式爲「file://」後接路徑,如file:///mnt/cdrom gpgcheck=1 # 指定是否須要簽名,1表示須要,0表示不須要 gpgkey= # 簽名文件的路徑 enable # 該倉庫是否生效,enable=1表示生效,enable=0表示不生效 cost= # 開銷越高,優先級越低
【repo配置文件中可用的宏:】 $releasever:程序的版本,對Yum而言指的是redhat-relrase版本。只替換爲主版本號,如Redhat6.5 則替換爲6 $arch:系統架構 $basharch:系統基本架構,如i686,i586等的基本架構爲i386 $YUM0-9:在系統定義的環境變量,能夠在yum中使用
系統發行商在系統中放置的rpm包通常版本都較老,可能有些包有較大的延後性。而epel是由fedora社區維護的高質量高可靠性的安裝源,有不少包是比系統包更新的,且多出不少系統沒有的包。總之,用到epel的機會不少不少,因此就拿來當配置示例了。
有兩種方式可使用epel源。
方法一:安裝epel-release-noarch.rpm
shell> rpm -ivh epel-release-latest-6.noarch.rpm
安裝後會在/etc/yum.repo.d/目錄下生成兩個epel相關的repo文件,其中一個是epel.repo。此文件中epel的源設置在了fedora的鏡像站點上,這對國內網來講可能會較慢,能夠修改它爲下面的內容。
[epel] name=Extra Packages for Enterprise Linux 6 - $basearch baseurl=http://mirrors.sohu.com/fedora-epel/6Server/$basearch/ #mirrorlist=https://mirrors.fedoraproject.org/metalink?repo=epel-6&arch=$basearch failovermethod=priority enabled=1 gpgcheck=1 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-6
方法二:直接增長epel倉庫
在/etc/yum.repos.d/下任意一個repo文件中添加上epel的倉庫便可。
[epel] name=epel baseurl=http://mirrors.sohu.com/fedora-epel/6Server/$basearch/ enabled=1 gpgcheck=0
而後清除緩存再創建緩存便可。
shell> yum clean all ; yum makecache
不一樣的版本,yum命令可能功能上有所不一樣,例如在CentOS 7上的yum有--downloadonly的功能,而在CentOS 6.6上就沒有(更新yum包後就有了)。此處介紹幾個yum命令。
Usage: yum [options] COMMAND List of Commands: help 命令的幫助信息,用法:yum help command,如yum help install則查看install命令的用法說明 clean 清除緩存數據,如yum clean all makecache 生成元數據緩存數據,yum makecache deplist 列出包的依賴關係 erase 卸載包 fs 爲當前文件系統建立快照,或者列出或刪除當前已有快照。快照是很是有用的,升級或打補丁前拍個快照,就能放心地升級或打補丁了 fssnapshot 同fs同樣 groups 操做包組 history 查看yum事務信息,yum是獨佔模式的進程,因此有時候查看事務信息仍是有用的 info 輸出包或包組的信息,例如該包是誰製做的,大概是幹什麼用的,來源於哪一個包組等信息 install 包安裝命令 list 列出包名,通常會結合grep來搜索包,如yum list all | grep -i zabbix provides 搜索給定的內容是誰提供的,可用來搜索來源於個包,如CentOS 7上mysql被mariadb替代,搜索Mysql提供者時就能找出包mariadb reinstall 從新安裝包 repolist 列出可用的倉庫列表 search 給定字符串搜索相關包,並給出相關包較爲詳細的信息 update 更新包 Options: -R [minutes], --randomwait=[minutes]:最多等待時間 -q, --quiet 安靜模式 -v, --verbose 詳細模式 -y, --assumeyes 對全部問題回答yes --assumeno 對全部問題回答no --enablerepo=[repo] 啓用一個或多個倉庫,可用通配符通配倉庫ID --disablerepo=[repo] 禁用一個或多個倉庫,可用通配符通配倉庫ID -x [package], --exclude=[package] 通配要排除的包 --nogpgcheck 禁用gpgcheck --color=COLOR 帶顏色 --downloadonly 僅下載包,不安裝或升級。默認下載在yum的緩存目錄中,默認爲/var/cache/yum/$basearch/$releasever --downloaddir=DLDIR 指定下載目錄
不少時候,yum操做失敗的緣由是repo的配置錯誤,或者緩存未更新。
[root@server2 ~]# yum help groups Loaded plugins: fastestmirror, langpacks groups [list|info|summary|install|upgrade|remove|mark] [GROUP] Display, or use, the groups information aliases: group, grouplist, groupinfo, groupinstall, groupupdate, groupremove, grouperase
因此,可使用別名group, grouplist, groupinfo, groupinstall, groupupdate, groupremove, grouperase替代相應的命令。
如安裝包組yum groups install pkg_groupname,也能夠yum groupinstall pkg_groupname。
補丁文件都是經過diff命令生成的,patch工具則是應用補丁,即將補丁打到舊文件中。絕對不能跨版本打補丁,只能一個版本一個版本按順序慢慢打。
生成補丁:
diff -[r]Nu old_file new_file > patch_file
該命令將對old_file和new_file作比較,而後生成補丁,將補丁內容保存到patch_file中。其中"-r"選項是遞歸比較,也就是說能夠對整個目錄生成補丁。
應用補丁:
patch -p數字 [file_name] < patch_file
去除補丁:
patch -R -p數字 [file_name] < patch_file
對於-p選項後的數字,它表示從前向後要忽略的目錄層數,其實不必想的那麼複雜。首先,進入到待打補丁所在目錄,若是是對改目錄下單個文件打補丁,則使用-p0,對目錄打補丁,則使用-p1。
# 對文件而言 diff –uN from-file to-file > to-file.patch patch –p0 < to-file.patch patch –R –p0 < to-file.patch
# 對目錄而言 diff –uNr from-dir to-dir > to-dir.patch cd from-dir patch –p1 < to-dir.patch patch –R –p1 < to-dir.patch
除了爲內核打補丁,其它軟件基本用不上patch來打補丁,如今不少團隊都使用git控制軟件版本,使用git patch要方便太多。
拿到源碼的壓縮包後,首先就是解壓,這就不需說了。解壓後,進入解壓目錄,這是必須動做,以後就是源碼編譯的通常步驟。並不是適用全部程序的編譯,但知道過程以後也能夠觸類旁通了。
1.閱讀解壓目錄中的INSTALL/README文件。若是不是對着官方手冊或文檔,那麼在安裝前務必讀一讀INSTALL文件或README文件,只需讀其中如何安裝的部分便可。
2.解壓後的目錄裏通常還有configure文件(也多是config文件)。執行"./configure"或帶有編譯選項的"./configure",檢查系統環境是否符合知足安裝要求,並將定義好的安裝配置寫入和系統環境信息寫入Makefile文件中。裏面包含了如何編譯、啓用哪些功能、安裝路徑等信息。
3.執行make命令進行編譯。make命令會根據Makefile文件進行編譯。編譯工做主要是調用編譯器(如gcc)將源碼編譯爲可執行文件,一般須要一些函數庫才能產生一個完整的可執行文件。
4.make install將上一步所編譯的數據複製到指定的目錄下。
這就已經完成編譯程序的過程了。
configure通常都會接受如下幾個編譯選項:
--prefix= :指定安裝的路徑 --sysconfdir= :指定配置文件目錄 --enable-feature :啓用某個特性 --disable-fecture :禁用特性 --with-function :啓用某功能 --without-function :禁用某功能
不一樣的程序,其configure選項不盡相同,應使用"./configure --help"獲取具體的信息。
1.上面的每個步驟都不能出錯,不然後一步都不能正常進行。
2.上面的步驟每一步若是出現警告或錯誤,若是步驟未中止而是繼續,則屬於可忽略錯誤或警告,不影響安裝。可是進行的步驟中止了出現警告或錯誤,則根據步驟考慮對策。可使用「$?」命令查看上一個命令是否正確執行,若是是返回0則是正確,其餘的則是錯誤。
3.卸載時,只需刪除安裝目錄便可。
所以,若要便於刪除,最好將源碼程序安裝在/usr/local/對應的目錄下。例如apache2安裝在/usr/local/apache2下。
4.經過源碼編譯的軟件,須要作一些後續操做,雖非必須,可是都是個性化定製,方便之後的操做。個性化定製大體包括如下幾項:
(1).將安裝路徑下的命令路徑加入到環境變量。
shell> echo "export PATH=/usr/local/apache/bin:$PATH" > /etc/profile.d/apache.sh shell> chmod +x /etc/profile.d/apache.sh shell> source /etc/profile.d/apache.sh
(2).按需求定製服務啓動腳本,並考慮是否加入開機啓動項。
(3).輸出頭文件和庫文件。
頭文件庫文件不少時候只是爲其餘程序提供的,因此可能不輸出它們的路徑也不會影響該程序的運行。
# 輸出頭文件 shell> ln -s /usr/local/apache/include /usr/include/apache # 輸出庫文件 shell> echo "/usr/local/apache/lib" >/etc/ld.so.conf.d/apache.conf shell> ldconfig
(4).導出man路徑
shell> echo "MANPATH /usr/local/apache/man" >> /etc/man.conf