十年網(wǎng)站開發(fā)經(jīng)驗 + 多家企業(yè)客戶 + 靠譜的建站團隊
量身定制 + 運營維護+專業(yè)推廣+無憂售后,網(wǎng)站問題一站解決
在我們的運維工作,總是避免不了安裝某些軟件,或者編譯安裝某些軟件,我們知道操作系統(tǒng)當中的程序都是有程序員通過開發(fā)工具開發(fā)的來,程序員直接編寫的純文本的文檔我們稱之為源代碼,但我們的計算機只能識別二進制程序,那么必須要將源代碼變成計算機能識別的二進制程序,這里需要通過編譯器來進行編譯,將源碼轉(zhuǎn)換成二進制程序,再通過安裝即可。
創(chuàng)新互聯(lián)公司堅信:善待客戶,將會成為終身客戶。我們能堅持多年,是因為我們一直可值得信賴。我們從不忽悠初訪客戶,我們用心做好本職工作,不忘初心,方得始終。10余年網(wǎng)站建設(shè)經(jīng)驗創(chuàng)新互聯(lián)公司是成都老牌網(wǎng)站營銷服務(wù)商,為您提供做網(wǎng)站、成都做網(wǎng)站、網(wǎng)站設(shè)計、HTML5、網(wǎng)站制作、成都品牌網(wǎng)站建設(shè)、小程序定制開發(fā)服務(wù),給眾多知名企業(yè)提供過好品質(zhì)的建站服務(wù)。
還有一類程序就是二進制程序,系統(tǒng)是由某些廠商來做的,在廠商的系統(tǒng)上編譯出來的程序,自然就在系統(tǒng)上運行了,這里是由廠商直接編譯好程序然后釋放出來給用戶,如此一來,由于我們本來就使用廠商的發(fā)行版,系統(tǒng)是一樣的,那么使用廠商的提供編譯過的程序就沒問題。首先來介紹下軟件運行的環(huán)境
※軟件運行環(huán)境
API:Application Programming Interface
POSIX: Portable OS
程序源代碼—à預處理—à編譯—-à匯編—-à鏈接
靜態(tài)編譯:編譯器在編譯可執(zhí)行文件的時候,將可執(zhí)行文件需要調(diào)用的對應動態(tài)鏈接庫(.so或.lib)中的部分提取出來,鏈接到可執(zhí)行文件中去,使可執(zhí)行文件在運行的時候不依賴于動態(tài)鏈接庫。
共享編譯:將庫提取出來,與可執(zhí)行文件鏈接到一起,實現(xiàn)共享編譯
ABI:Application Binary Interface
Windows與linux不兼容
ELF(Executable and Linkable Format)
PE
庫級別的虛擬化
linux:WINE
windows:Cywin
※包管理器
二進制應用程序的組成部分:
二進制文件、庫文件、配置文件、幫助文件、頭文件
程序包管理器
將編譯好的應用程序組成文件打包一個或幾個程序包文件,從而方便快捷地實現(xiàn)程序包的安裝、卸載、查詢、升級和校驗等操作目前在Linux系統(tǒng)之上軟件的安裝方式最常見的有一下兩種方式:
dpkg
這個機制最早是有Debian Linux社區(qū)所開發(fā)出來的,通過dpkg的機制,Debian提供的軟件就能夠簡單的安裝起來,同時還能提供安裝后的軟件資訊,實在非常不錯?;贒ebian衍生版系統(tǒng),如B2D,Ubantu等都是用dpkg來管理軟件的。
RPM
這個機制最早是由redhat公司開發(fā)出來,后來大家覺得這個管理器非常好用,因此很多發(fā)行版就使用這個機器來作為軟件包的管理器如SuSe,Fedora,CentOS。
但是如上的兩種包管理器的機制或多或少都會有軟件屬性的相依的問題,其實在安裝時,每個文件文件都提供依賴性的檢查,那么如果我們將依賴性的數(shù)據(jù)做成列表、等到安裝時,如果有依賴關(guān)系,通過依賴性的數(shù)據(jù)列表,管理機制就會同時安裝被依賴的軟件。
※軟件包命令規(guī)則
源代碼:
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,或者簡單的功能擴展
因此,主版本號最為穩(wěn)定,變化的周期長,修改號更新快,變化周期短
常見的arch
x86:i386,i486,i586,i686
x86_64:x64,x86_64,amd64
powerpc:ppc
跟平臺無關(guān):noarch
包分類和拆包
Application-version-arch.rpm:主包
Application-devel-version-arch.rpm開發(fā)子包
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:顯示本機已經(jīng)緩存的所有可用庫文件名及文件路徑映射關(guān)系
配置文件:/etc/ld.so.conf, /etc/ld.so.conf.d*.conf
緩存文件:/etc/ld.so.cache
程序包來源
系統(tǒng)光盤
項目官方站點
第三方組織如Fedora EPEL(Extra Packages for Enterprise Linux)
自己制作
※RPM
優(yōu)點
rpm內(nèi)含已經(jīng)編譯過的程序與配置文件等數(shù)據(jù),可以讓使用者免除重新編譯的困擾。
rpm在被安裝之前,會檢查系統(tǒng)的硬盤容量、操作系統(tǒng)版本、可避免文件被錯誤安裝
rpm文件本身提供軟件版本咨詢,依賴性軟件名稱,軟件用途說明、軟件含義便于了解軟件
rpm的管理分為安裝、卸載、升級、查詢、檢驗、數(shù)據(jù)庫維護
安裝:
rpm {i|install} [install-option] PACKAGES_FILE…
-h:hash,以#表示安裝進度,每個#表示%2
-v|–verbose:顯示詳細過程
-vv:顯示更詳細的過程
[install-option]
rpm –ivh –test:測試安裝;但不真正執(zhí)行安裝;在dry run模式下進行
rpm –ivh – –nodeps:忽略依賴關(guān)系
rpm –ivh – –replacepkgs:重新安裝,替換原有安裝
rpm –ivh – –nosignature:不檢查來源合法性
rpm –ivh – –nodigest:不檢查包完整性
rpm –ivh – –force:強行安裝,可以實行重裝或降級
rpm –ivh – –scripts:不執(zhí)行程序包腳本片段
查詢:
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包改變?nèi)罩?/p>
rpm –R packages_name:查詢指定的程序包所以來的capabilty
rpm2cpio 包文件|cpio –itv 預覽包里的文件
rpm2cpio 包文件|cpio –id “*.conf”釋放包內(nèi)文件
升級:
rpm {-U|–upgrade}[install-options] PACKAGES_FILE…:如果有老版本的,則升級,否則,則安裝
rpm {-F|–freshen}[install-options] PACKAGES_FILE…:如果有老版本的,則升級,否則,則退出安裝
–oldpackages:降級
注意:
不要對內(nèi)核做升級操作;Linux支持多內(nèi)核版本并存,因此,對直接安裝新版本內(nèi)核
如果源程序包的配置文件安裝后曾被修改,升級時,新版本提供的同一個配置文件并不會覆蓋老版本的配置文件,而把新版的文件命令為以.rpmnew的文件保留
卸載:
rpm {-e|–erase} [–allmatches] [–nodeps][–test] PACKAGES_NAME
簡單用法:rpm –e packages_name
–nodeps:忽略依賴關(guān)系
–test:測試卸載;dry-run模式
–allmatches:如果一個程序包同時安裝多個版本時,則此選項一次全部卸載,但程序包配置文件安裝后曾被修改,卸載時,此文 件通常不會被刪除,而是被重名為以.rpmsave的文件保留
校驗:
查詢包安裝之后生成的文件是否發(fā)生了改變
rpm {-V|–verify} [select-options][verify-options]
常用用法:rpm –V packages_name
當沒有輸出結(jié)果時表示軟件包完整ok,當有相應的結(jié)果輸出表明對應的內(nèi)容有修改,具體如下:
S file Size differs 文件的容量大小發(fā)生改變
5(MD5 sum differs)MD5這一種指紋碼的內(nèi)容發(fā)生改變
M Mode differs 文件的類型或文件的屬性發(fā)生改變
D Device major/minor number mismatch 設(shè)備的主、次版本號發(fā)生改變
L readLink(2) path mismatch 鏈接路徑發(fā)生改變
U User ownership differs 文件的屬主發(fā)生改變
G Group ownership differs 文件的屬組發(fā)生改變
T mTime differs 文件的創(chuàng)建時間發(fā)生改變
P capabilities differ 能力發(fā)生改變
注意:在安裝軟件之前最好對即將安裝的軟件進行合法性驗證,這樣可以檢查出軟件是否來源合法、內(nèi)容合法,在一定程度上避免一些由不安全因素導致不安全的事情發(fā)生
來源合法指的是由我們信任的制作者提供;依賴于制作的親筆簽名,簽名是作者使用自己的私鑰加密程序包的特性碼
內(nèi)容合法是指包未被二次修改;完整性校驗成功,依賴于制作者提供的程序特征碼
驗證方式:安裝用同樣的特征碼提取算法提取程序包的特征碼,并與原作者提供的相比較
導入密鑰
rpm –import /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6
驗證 rpm –K packages_name
重建數(shù)據(jù)庫
當我們把數(shù)據(jù)庫的文件刪除之后,我們查詢軟件包的信息都是查詢不到的,因為rpm –q是依據(jù)數(shù)據(jù)庫里的數(shù)據(jù)來進行查詢,這時就需要重建數(shù)據(jù)庫了
數(shù)據(jù)庫位置
/var/lib/rpm
rpm {–initdb|–rebuilddb}
rpm –initab:初始化,如果事先不存在數(shù)據(jù)庫,則新建,否則,不執(zhí)行任何操作
rebuilddb:重建,無論事先是否存在,直接重新創(chuàng)建數(shù)據(jù)庫
※yum
yum:Yellowdag Update Modifier,yum是通過分析rpm的標頭文件數(shù)據(jù)后,根據(jù)各軟件的依賴關(guān)系制作出有依賴關(guān)系時的解決方案,然后可以自動處理軟件的依賴性問題,以解決軟件安裝或移除與升級的問題。因此我們想使用yum 必須先要找到適合的yum server才行,而每個yum server可能都會提供許多不同的軟件功能,yum server會根據(jù)功能進行分類,這里的分類就是所謂的倉庫,yum repository 存儲了眾多rpm包,以及報相關(guān)的元數(shù)據(jù)文件放置在特定目錄repodate下
yum倉庫中的元數(shù)據(jù)文件
primary.xml.gz:所有的rpm包的列表,依賴關(guān)系,以及每個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執(zhí)行,并且唯一
name= description對倉庫的描述信息
baseurl=url://path/to/repository 指定倉庫的訪問路徑,通常為一個文件服務(wù)器上輸出的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=# #表示數(shù)字,指明當前倉庫的訪問開銷,默認為1000,數(shù)值越小優(yōu)先級越高
yum-config-manager
yun-config-manager –disable “repository_name” 禁用此倉庫
yun-config-manager –enable “repository_name” 啟用此倉庫
yum命令介紹
顯示倉庫列表
yum repolist [all|enabled|disabled]
all:列出已經(jīng)配置的所有的可用倉庫
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會自動解決依賴關(guān)系
升級程序包
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]
構(gòu)建緩存
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:如果第六步是安裝這里則是卸載,反之則是安裝
如何創(chuàng)建本地yum倉庫
1、掛載本地光盤,如/mnt
#mount /dev/cdrom /mnt/
2、創(chuàng)建倉庫
vim /etc/yum.repos.d/base.repo
[cdrom]
name=123
baseurl=file:///mnt
enabled=1
gpgcheck=0
到這里本地yum倉庫就配置好了
yum的命令行選項
–nogpgcheck:禁止進行g(shù)pg check
-y:自動回答為yes
-q:靜默模式
–disablerepo=repoidglob:臨時禁用此處指定的repo
–enabledrepo=repoidglob:臨時啟動此處指定repo
–noplugins:禁用所有插件
編譯安裝
1、c代碼編譯安裝三步驟
通過選項傳遞參數(shù),指定啟用特性,安裝路徑,執(zhí)行時會參考用戶的指定以及makefile.in文件生成的makefile,檢查一來到的外部環(huán)境
2、make:根據(jù)makefile文件,構(gòu)建應用程序
3、makeinstall 復制文件到相應路徑
開發(fā)工具:
autoconf:生成configure腳本
automake:生成makefile.in文件
編譯Cyuandaima
前提:提供開發(fā)工具及開發(fā)環(huán)境
開發(fā)工具:make,gcc等
開發(fā)環(huán)境:開發(fā)庫,頭文件,glibc標準庫
通過安裝包組提供開發(fā)珠江
yum groupinstall “Development Tools”
yum groupinstall “Server Platform Development
編譯安裝
第一步:configure腳本
選項:指定安裝位置,指定啟用的特性
–help:獲取其支持使用的選項
安裝路徑設(shè)定
–prefix=/Path:指定默認安裝位置,默認為/usr/loca
–sysconfdir=/path:配置文件安裝位置
optional Features:可選特性
–disable-feature
–enable-feature
optional packages:可選包
–with-packages[=arg]依賴包
–without-package禁用依賴關(guān)系
第二步:make
第三步:make install
安裝后的配置:
(1) 二進制程序目錄導入至PATH環(huán)境變量中;
編輯文件/etc/profile.d/NAME.sh
export PATH=/PATH/TO/BIN:$PATH
(2) 導入庫文件路徑
編輯/etc/ld.so.conf.d/NAME.conf
添加新的庫文件所在目錄至此文件中;
讓系統(tǒng)重新生成緩存:
ldconfig[-v]
(3) 導入頭文件
基于鏈接的方式實現(xiàn):
ln –sv
導入幫助手冊
編輯/etc/man.config|man_db.conf文件
添加一個MANPATH
1、 yum的配置和使用;包括yum repository的創(chuàng)建
我將一些rpm包下載至/root/repo目錄下,此時目錄下沒有repodate的數(shù)據(jù)目錄,構(gòu)建倉庫就會報錯,這時就需要createrepo,系統(tǒng)中默認createrepo這個命令是沒有安裝的,所以需要安裝
createrepo [options]
create /root/repo
創(chuàng)建了repo數(shù)據(jù)文件之后,這時候就需要配置yum倉庫了,在/etc/repos.d/目錄下創(chuàng)建一個以repo結(jié)尾的文件即可,內(nèi)容如下
[xen] #倉庫名稱
name=1 #倉庫描述
baseurl=file:///root/repo #倉庫的路徑
enabled=1 #是否啟用倉庫1表示啟用,0表示禁用
gpgcheck=0 #是否檢查來源合法性
cost=100 #倉庫優(yōu)先級默認值為1000,值越小,優(yōu)先級越高
2、編譯安裝apache 2.2,并啟動此服務(wù)
第一步:下載源碼包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、 服務(wù)腳本
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 啟動服務(wù)即可
ss -tan 查看有沒有80端口監(jiān)聽
使用crul httpdserver測試頁面是否正常顯示,如果端口起來了,還是看不到內(nèi)容可能是防火墻開了,這是需要iptables –F臨時的清理以下防火墻的策略