欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

用DNSPod和Squid打造自己的CDN (五) 安裝Squid的前期準(zhǔn)備

 更新時間:2013年04月20日 00:35:45   投稿:mdxy-dxy  
從本章開始,大家將會學(xué)到如何在Linux下面安裝、編譯程序,還會學(xué)到程序編譯的優(yōu)化方法,最后會通過源代碼編譯的方式把Squid安裝上

第 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)文章

最新評論