用DNSPod和Squid打造自己的CDN (五) 安裝Squid的前期準(zhǔn)備
第 5 章 安裝Squid的前期準(zhǔn)備
從本章開始,大家將會學(xué)到如何在Linux下面安裝、編譯程序,還會學(xué)到程序編譯的優(yōu)化方法,最后會通過源代碼編譯的方式把Squid安裝上。
1.Linux下面程序安裝的基本知識
A.程序安裝包的分類
平時大家在Windows下面安裝程序,一般都是直接運(yùn)行安裝程序,然后安裝程序會把編譯好的二進(jìn)制文件拷貝到系統(tǒng)里面,最終完成安裝過程。
Linux下面,安裝程序的自由度比Windows要大。因為Linux下面大部分東西都是開源的,所以程序的提供方式一般是二進(jìn)制包或者源代碼包。
二進(jìn)制包,同樣會有不同的打包和管理方式(類似于zip、rar,但更加先進(jìn))。最常見的兩種軟件包為rpm(redhat、suse等系統(tǒng)采用的包)和deb(debian、ubuntu)。機(jī)器上面安裝的軟件包多了,自然需要一個軟件來進(jìn)行管理、更新。所以就有了yum(rpm)、apt(deb)這樣的軟件包管理、升級軟件。
源代碼包,這樣的包比較簡單,一般都是直接把源代碼打包成一個壓縮文件,后綴一般是tar.gz或者tar.bz2
通過包管理軟件安裝軟件比較簡單,設(shè)置好軟件的安裝源后,可以使用下面的命令安裝軟件:
yum install php (yum)
apt-get install php5(apt)
如果不知道需要安裝的軟件包確切名字,可以使用下面的方法搜索:
yum search php(yum)
apt-cache search php(apt)
本文章主要探討源代碼包的安裝。
B.通過源代碼包安裝程序
一般情況下,程序從源代碼到能正常使用,需要經(jīng)過三個步驟:1.根據(jù)系統(tǒng)環(huán)境對源代碼進(jìn)行配置(configure);2.編譯程序(make);3.安裝程序(make install)。
a.源代碼配置
通過運(yùn)行configure腳本,可以對所需要編譯的程序的一些基本環(huán)境、所使用到的命令、庫等文件進(jìn)行自動查找,并且生成用于編譯文件所需要的Makefile文件。因為Linux有太多的發(fā)行版本了,每個版本的環(huán)境都不一樣,所以需要用到這個腳本。通過configure腳本還可以對程序的模塊進(jìn)行自定義,可以禁用或者激活某個功能。
b.編譯程序
根據(jù)configure腳本生成的Makefile文件,對源代碼進(jìn)行編譯、鏈接,生成二進(jìn)制文件。但這個時候的二進(jìn)制文件一般來說還不能使用。
c.安裝程序
通過make install命令,把編譯好的二進(jìn)制文件安裝到相應(yīng)的路徑,這個時候程序才真正可以使用。
C.程序安裝到哪里?
一般編譯安裝的程序都會安裝到/usr/local下面。比如php就會被安裝到/usr/local/bin/php,php.ini會被安裝到/usr/local/lib/php.ini,等等。如果需要指定安裝目錄,在configure的時候指定--prefix參數(shù),會把所有文件都安裝到prefix目錄中。比如./configure --prefix=/usr/local/php。那么會把所有文件都安裝到這個目錄,最后看起來會是/usr/local/php/bin/php和/usr/local/php/lib/php.ini
D.如何得到configure的參數(shù)?
常用的configure參數(shù)有--prefix,可以通過./configure --help得到更多的參數(shù)。一般帶有--enable-、--with-開頭的參數(shù)都是啟用某個功能,--disable-、--without-開頭的都是禁用某個功能。
E.如何刪除安裝好的程序?
Linux刪除程序跟Windows不太一樣。Windows建議使用卸載功能卸載程序,Linux下通過包管理軟件安裝的程序也可以直接用命令刪除,例如:
yum remove php(yum)
apt-get remove php5(apt)
如果通過源代碼包安裝的程序,一般會帶有make uninstall,通過這個命令可以刪除所安裝的文件。如果不帶有make uninstall,那么可以直接把程序安裝目錄刪除。
注意:如果是依賴庫(比如php如果要使用到mysql的功能,必須要先安裝mysql,然后在配置php的時候指定mysql庫的路徑,那么php就是依賴了mysql),刪除被依賴的程序,那么用到依賴庫的程序都將會無法使用(比如刪除mysql后,php將無法使用mysql部分的功能)。
F.還有個make clean是干什么用的?
make clean用來打掃戰(zhàn)場。把所有編譯時留下的臨時文件、編譯后的二進(jìn)制文件等都清理掉。一般建議在make install后make clean,方便下次重新編譯和節(jié)省空間。
2.源代碼編譯時的優(yōu)化
用Windows的朋友都知道,平時最頭痛的事情就是程序占用CPU太高,而且消耗內(nèi)存特別大。這是因為Windows的程序都是一些“通用”程序,并沒有針對特定的平臺和特定的CPU進(jìn)行優(yōu)化。在Linux下,通過源代碼來編譯二進(jìn)制文件,這個問題將得到有效的改善。我們可以通過添加優(yōu)化參數(shù),讓程序針對某個CPU型號和某個系統(tǒng)進(jìn)行最大優(yōu)化,減少文件大小、CPU使用率、內(nèi)存使用率。
但是,通過指定優(yōu)化參數(shù)來編譯的程序,將不再具有跨系統(tǒng)跨平臺的能力。就算兩臺機(jī)器系統(tǒng)版本一樣,只要CPU不一樣,程序都無法運(yùn)行。程序只能在所編譯的機(jī)器上運(yùn)行。
一般情況下,優(yōu)化參數(shù)都是通過export命令設(shè)定CFLAGS和CXXFLAGS,然后configure的時候會自動讀入,make的時候會自動使用所選的優(yōu)化參數(shù)。
例如,普通Pentium 4的CPU(顯示的型號為Intel(R) Pentium(R) 4 CPU XXXXMHz,cpu family: 15,model: 0/1/2)就可以輸入下面的命令
export CHOST="i686-pc-linux-gnu"
export CFLAGS="-march=pentium4 -O2 -pipe -fomit-frame-pointer"
export CXXFLAGS="${CFLAGS}"
CPU型號等信息可以通過輸入下面的命令得到
cat /proc/cpuinfo
將會輸出類似下面的信息
processor : 0
vendor_id : AuthenticAMD
cpu family : 15
model : 47
model name : AMD Athlon(tm) 64 Processor 3200+
stepping : 2
cpu MHz : 2000.336
cache size : 512 KB
fdiv_bug : no
hlt_bug : no
f00f_bug : no
coma_bug : no
fpu : yes
fpu_exception : yes
cpuid level : 1
wp : yes
flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 syscall nx mmxext fxsr_opt lm 3dnowext 3dnow up pni lahf_lm ts fid vid ttp tm stc
bogomips : 4002.57
上面的信息顯示了這是一顆AMD Athlon 64 3200+的CPU。
CPU優(yōu)化參數(shù)可以從下面地址獲得(有些cpu family和model沒有,可以用相同型號的代替)
http://gentoo-wiki.com/Safe_Cflags
3.編譯Squid的前期準(zhǔn)備
我們需要先了解一個叫做“文件描述符”的東西。我們知道,人能同時干的事情是有限的。文件描述符就是一個限制最大上限的東西。文件描述符用來限制一個程序能同時打開的文件數(shù)目,默認(rèn)是1024。也就是說,如果不修改文件描述符,那么一個程序只能同時打開1024個文件。1024這個數(shù)字,一般程序已經(jīng)夠用了,但Squid不行。Squid會同時打開成千上萬個文件,以保證最高的效率和響應(yīng)速度。
想象一下下面兩種情況:a.用戶每次訪問squid,squid會按照需要打開文件,然后讀取文件內(nèi)容再返回給用戶。b.squid預(yù)先打開訪問頻率高的文件,用戶訪問squid,squid直接把內(nèi)容返回給用戶。相對來說,后面的方法可以對用戶的請求進(jìn)行更加快的反應(yīng)。
要更改文件描述符的大小,必須要修改兩個文件。
/usr/include/bits/typesizes.h
/usr/include/linux/posix_types.h
用vi打開上面的文件(如果忘記如何使用,請參考前面章節(jié)),查找
#define __FD_SETSIZE 1024
把1024改為65536,然后保存。
為什么是65536,不是更加大?因為這是Linux能接受的最大數(shù)值。
剛才編輯的這兩個文件是C/C++程序里面的頭文件,編譯squid的時候會被自動引用。除了這兩個文件以外,我們還需要對當(dāng)前環(huán)境進(jìn)行設(shè)置。
環(huán)境,也就是你用ssh登錄到系統(tǒng)時的一些設(shè)定。每個登錄進(jìn)程都可以進(jìn)行單獨(dú)的設(shè)置,在沒有把設(shè)置寫入環(huán)境配置文件(.profile,.bash_rc)的情況下,關(guān)閉登錄進(jìn)程后環(huán)境設(shè)置會丟失。
舉個例子,你使用pietty開了兩個窗口,使用同一個帳號密碼,同時登錄到同一臺服務(wù)器上面,然后在其中一個登錄進(jìn)程中使用export命令,那么只會在這個登錄進(jìn)程中生效,對另外一個登錄進(jìn)程不起作用。
明白后,我們說一下ulimit命令。ulimit用來設(shè)置當(dāng)前環(huán)境的一些資源限制。剛才所說的,這個命令是對環(huán)境進(jìn)行設(shè)置,所以退出當(dāng)前登錄進(jìn)程后命令將會失效。
我們輸入下面的命令
ulimit -Hs 65536
ulimit -n 65536
H參數(shù)是硬性限制,s是堆棧上限,n是文件描述符上限。
最后,我們使用wget把squid的源代碼下載回來。
wget http://www.squid-cache.org/Versi ... 2.6.STABLE13.tar.gz
wget是unix下一個支持?jǐn)帱c(diǎn)續(xù)傳的下載工具。會有一些比較實用的功能,比如把別人整個網(wǎng)站都下載回來(像平時用的小偷吧?)。
相關(guān)文章
apache開啟.htaccess及.htaccess的使用方法
今天本地調(diào)試PHP程序,用到了.htaccess,而默認(rèn)配置里面開啟.htaccess,在網(wǎng)上找到了開啟.htaccess的可行方法,供朋友們借鑒。2010-12-12linux系統(tǒng)對外開放3306、8080等端口,防火墻設(shè)置詳解
這篇文章主要介紹了linux系統(tǒng)對外開放3306、8080等端口,防火墻設(shè)置,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-05-05apache禁止搜索引擎收錄、網(wǎng)絡(luò)爬蟲采集的配置方法
這篇文章主要介紹了apache禁止搜索引擎收錄、網(wǎng)絡(luò)爬蟲采集的配置方法,注意一定要寫到Location節(jié)點(diǎn),否則不起作用,可以精確匹配,也可以IP匹配,需要的朋友可以參考下2014-06-06Linux使用其他用戶(非root用戶)設(shè)置root權(quán)限及免密(Centos7為例)
這篇文章主要介紹了Linux使用其他用戶(非root用戶)設(shè)置root權(quán)限及免密(Centos7為例),具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-05-05安裝ubuntu18.04報:failed to load ldlinux.c32的問題及解決步驟
這篇文章主要介紹了安裝ubuntu18.04報:failed to load ldlinux.c32的問題,本文通過圖文并茂的形式給大家分享解決方法,需要的朋友可以參考下2020-08-08Nginx 0.7.x + PHP 5.2.6(FastCGI)+ MySQL 5.1 在128M小內(nèi)存VPS服務(wù)器上的
VPS(全稱Virtual Private Server)是利用最新虛擬化技術(shù)在一臺物理服務(wù)器上創(chuàng)建多個相互隔離的虛擬私有主機(jī)。它們以最大化的效率共享硬件、軟件許可證以及管理資源。2008-12-12CentOS 6.5中利用yum搭建LNMP環(huán)境的步驟詳解
這篇文章主要給大家介紹了關(guān)于在CentOS 6.5中利用yum搭建LNMP環(huán)境的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。2017-12-12