1. 程式人生 > >Linux包管理命令與Ubuntu下安裝nginx的方法

Linux包管理命令與Ubuntu下安裝nginx的方法


rpm包和deb包是兩種Linux系統下最常見的安裝包格式,在安裝一些軟體或服務的時候免不了要和它們打交道。rpm包主要應用在RedHat系列包括 Fedora等發行版的Linux系統上,deb包主要應用於Debian系列包括現在比較流行的Ubuntu等發行版上。 二者對應的安裝命令分別為rpm與dpkg。


Ubuntu的軟體包格式是deb,如果要安裝rpm的包,則要先用alien把rpm轉換成deb。alien安裝與轉換命令:
sudo apt-get install alien #安裝alien
sudo alien xxxx.rpm #將rpm轉換位deb,完成後會生成一個同名的xxxx.deb
sudo dpkg -i xxxx.deb #安裝deb包

以往在Cent OS下可以使用rpm命令安裝、解除安裝、升級和管理軟體或檢查是否安裝了某個軟體非常方便。常用命令:

rpm -q:查詢系統是否已安裝某軟體包(-q就是--query)
rpm -qpl:列出.rpm軟體包檔案列表
rpm -i:安裝指定的軟體包到當前linux系統
rpm -ivh:安裝指定的軟體包時顯示詳細的安裝資訊
rpm -Uvh file.rpm  升級指定的軟體包時顯示詳細的安裝資訊
rpm --force:強制安裝軟體包,將覆蓋屬於其他包的同名檔案
rpm --nodeps 如果該RPM包的安裝依賴其它包,即使其它包沒裝,也強迫安裝。
rpm -e:解除安裝指定的軟體包
rpm -U:升級指定的軟體包(系統中未安裝則進行安裝)
rpm -a:查詢所有已安裝的軟體包
rpm -f:查詢包含有某檔案的軟體包
rpm -p:查詢軟體包檔案為package file的軟體包
rpm -s:顯示軟體包中檔案的狀態 states (暗含了 -l)。每個檔案的狀態是 normal, not installed, 或 replaced 其中之一。
rpm -v:輸出冗餘資訊
rpm -ql gcc 列出所有已安裝的rpm包中的檔案列表 (等同於rpmquery -ql gcc或rpm -qa |grep gcc)
rpm -qi  查詢所安裝的rpm包詳細資訊(information)
rpm -qc 列出配置檔案(/etc下的檔案)
rpm -qd 列出幫助檔案(man)
rpm -qf /bin/ls  查詢一個已經安裝的檔案屬於哪個軟體包(需要存在已安裝檔案/bin/ls 才能查到)
rpm -qp 根據rpm包查詢.rpm 檔案,可以接其他引數(如i查詳細資訊,l查檔案列表 等)
rpm -qR 列出需要的依賴套件

但是rpm軟體包之間的依賴性問題往往會很繁瑣,尤其是軟體由多個rpm包組成時。所以很多情況下我們出於方便,選擇使用yum包管理器來進行安裝。Yum(全稱為 Yellow dog Updater, Modified)是一個在Fedora和RedHat以及SUSE中的Shell前端軟體包管理器。基於RPM包管理,能夠從指定的伺服器(例如淘寶映象、騰訊雲、網易映象等,可自己配置)自動下載RPM包並且安裝,可以自動處理軟體包的依賴關係,一次安裝所有依賴的軟體包,無須繁瑣地一次次下載、安裝。

Yum安裝適用於RHEL/CentOS系列。YUM安裝步驟:

1).使用vi命令建立nginx倉庫描述資訊檔案: vi /etc/yum.repos.d/nginx.repo

在檔案中增加如下內容:

[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/OS/OSRELEASE/$basearch/
gpgcheck=0
enabled=1

根據你安裝的系統不同,替換OS為你的系統名稱,如:“rhel” 或 “centos”,

替換OSRELEASE為你的系統版本,如:“5”  或 “6”。


2).執行命令: yum install nginx 即可安裝。


公司大部分伺服器用的都是Linux Cent OS,使用rpm和yum比較熟練。但是yum安裝只適用於RHEL/CentOS系列。今天遇到一個特殊的需求,網站程式碼要求部署到CP提供的Ubuntu系統伺服器上。所以有必要再說一下deb的安裝命令。

dpkg是一個Debian的一個命令列工具,它可以用來安裝、刪除、構建和管理Debian的軟體包(.deb檔案)。常用命令如下:


dpkg -i <.deb file name> 安裝軟體示例:dpkg -i avg71flm_r28-1_i386.deb
dpkg -R /usr/local/src 安裝一個目錄下面所有的軟體包
dpkg -unpack package_file 釋放.deb軟體包,但不進行配置,如果和-R一起使用,引數可以是一個目錄
dpkg -configure package_file 重新配置和釋放軟體包,如果和-a一起使用,將配置所有沒有配置的軟體包
dpkg -r 刪除軟體包(保留其配置資訊)
dpkg -update-avail <Packages-file> 替代軟體包的資訊
dpkg -merge-avail <Packages-file> 合併軟體包資訊
dpkg -A package_file 從軟體包裡面讀取軟體的資訊
dpkg -P 刪除一個包(包括配置資訊)
dpkg -forget-old-unavail 丟失所有的Uninstall的軟體包資訊
dpkg -clear-avail 刪除軟體包的Avaliable資訊
dpkg -C 查詢只有部分安裝的軟體包資訊
dpkg -compare-versions ver1 op ver2 比較同一個包的不同版本之間的差別
dpkg -help 顯示幫助資訊
dpkg -licence/license 顯示dpkg的Licence
dpkg -version 顯示dpkg的版本號
dpkg -b directory [debfilename] 建立一個deb檔案
dpkg -c filename 顯示一個deb包的檔案目錄
dpkg -I filename [control-file] 顯示一個deb的說明
dpkg -l package-name-pattern 搜尋deb包,如:dpkg -I vim
dpkg -L 列出與該包先關聯的檔案
dpkg -l 顯示所有已經安裝的Deb包,同時顯示版本號以及簡短說明
dpkg -s package-name 報告指定包的狀態資訊
dpkg -L package-Name 顯示一個包安裝到系統裡面的檔案目錄資訊
dpkg -S filename-search-pattern 搜尋指定包裡面的檔案(模糊查詢)
dpkg -p package-name 顯示包的具體資訊

dpkg命令安裝會繞過apt包管理資料庫直接操作.deb軟體包,所以用dpkg安裝的軟體包用apt再安裝時,系統無法識別,將會覆蓋之前dpkg方式安裝的軟體包。
 
dpkg用來安裝.deb檔案,一般用於安裝本地的deb檔案,但不會解決模組的依賴關係,且不會關心ubuntu的軟體倉庫內的軟體。

apt工具自己會從軟體源伺服器上下載.deb包,下載完後自動安裝。apt可以解決.deb安裝包的依賴問題,並會諮詢軟體倉庫, 但不會安裝本地的.deb檔案, 可以說apt是建立在dpkg之上的軟體包管理工具。
 
Apt安裝適用於debian系統。apt安裝步驟:

1.使用vi命令增加nginx倉庫描述資訊: vi /etc/apt/sources.list

在檔案中增加如下內容:

deb http://nginx.org/packages/debian/ codename nginx
deb-src http://nginx.org/packages/debian/ codename nginx

(以上ubuntu更新源source.list可自己更新,參考http://www.cnblogs.com/nexiyi/archive/2013/01/06/2847166.html)
如果是debian 6.x系統,替換codename為squeeze

如果是ubuntu系統,根據系統版本替換codename為下邊的對應值:

支援的版本

Version    Codename
10.04    lucid
11.10    oneiric
12.04    precise
12.10    quantal

2.執行命令:

apt-get update #啟用新的更新源
apt-get install nginx

常用的APT命令引數

apt-cache search package 搜尋包
apt-cache show package 獲取包的相關資訊,如說明、大小、版本等
apt-cache depends package 瞭解使用依賴
apt-cache rdepends package 檢視該包被哪些包依賴
sudo apt-get install package 安裝包,apt會自動下載安裝,若有依賴性軟體包,apt也會自動下載安裝
sudo apt-get install package --reinstall 重新安裝包
sudo apt-get -f install 修復安裝"-f = --fix-missing"
sudo apt-get remove package 刪除包,如有依賴的軟體包,則會一併移除
sudo apt-get remove package --purge 刪除包,包括刪除配置檔案等
sudo apt-get update 更新源(該指令是用來取得記錄在 /etc/apt/sources.list 內的遠端伺服器的軟體包清單,在使用apt-get dist-upgrade指令升級軟體前,一定要記得先用此指令將軟體包清單更新)
sudo apt-get upgrade 更新已安裝的軟體包
sudo apt-get dist-upgrade 升級系統
sudo apt-get dselect-upgrade 使用 dselect 升級
sudo apt-get build-dep package 安裝相關的編譯環境
apt-get source package 下載該包的原始碼
sudo apt-get clean && sudo apt-get autoclean 清理無用的包(當使用 apt-get install 指令安裝後,下載的軟體包會放置在 /var/cache/apt/archives,使用apt-get clean指令可將其刪除)
sudo apt-get check 檢查是否有損壞的依賴



aptitude與 apt-get 一樣,是 Debian 及其衍生系統性能極其強大的包管理工具。基於APT機制, 整合了dselect和apt-get的所有功能,並具有更靈活的特性,特別是在依賴關係的處理上。比如,aptitude在刪除一個包時,會同時刪除自身所依賴的包,使得系統中不會殘留大量無用的軟體包。

關於aptitude的用法

安裝軟體包

dpkg -i package_name.deb #安裝本地軟體包,不解決依賴關係
apt-get install package #線上安裝軟體包,自動解決依賴關係
aptitude install pattern #同上

apt-get install package --reinstall #重新安裝軟體包
apitude reinstall package #同上

解除安裝軟體包

dpkg -r package #解除安裝軟體包
apt-get remove package #同上
aptitude remove package #同上

dpkg -P #解除安裝軟體包及配置檔案
apt-get remove package --purge #解除安裝軟體包及配置檔案
apitude purge pattern #同上

自動移除軟體包

apt-get autoremove #刪除不再需要的軟體包
注:aptitude無須命令,解除安裝時它會自動刪除無用的軟體包

清除下載的軟體包

apt-get clean #清除 /var/cache/apt/archives 目錄
aptitude clean #同上

apt-get autoclean #清除 /var/cache/apt/archives 目錄,不過只清理過時的包
aptitude autoclean #同上

編譯相關 apt-get source package #獲取原始碼

apt-get build-dep package #解決編譯原始碼 package 的依賴關係
aptitude build-dep pattern #解決編譯原始碼 pattern 的依賴關係

平臺相關

apt-cross --arch ARCH --show package 顯示屬於 ARCH 構架的 package 軟體包資訊
apt-cross --arch ARCH --get package #下載屬於 ARCH 構架的 package 軟體包
apt-cross --arch ARCH --install package #安裝屬於 ARCH 構架的 package 軟體包
apt-cross --arch ARCH --remove package #移除屬於 ARCH 構架的 package 軟體包
apt-cross --arch ARCH --purge package #移除屬於 ARCH 構架的 package 軟體包
apt-cross --arch ARCH --update #升級屬於 ARCH 構架的 package 軟體包

注:慎重考慮要不要用這種方法來安裝不同構架的軟體包,這樣會破壞系統。對於 amd64 的使用者可能需要強制安裝某些 i386 的包,千萬不要把原來 amd64 本身的檔案給 replace 了。最好只是安裝一些 lib 到 /usr/lib32 目錄下。同樣地,可以用 apt-file 看某個其它構架的軟體包包含哪些檔案,或者是檔案屬於哪個包,不過記得最先要用 apt-file --architecture ARCH update 來升級 apt-file 的資料庫,在 search 或 show 時也要指定 ARCH。

更新源

apt-get update #更新源
aptitude update #同上

更新系統

apt-get upgrade #更新已經安裝的軟體包,如果依賴性改變(如需要新的依賴包),則保留原安裝包,放棄升級。
aptitude safe-upgrade #同上
apt-get dist-upgrade #升級系統,升級的同時會為了解決依賴性而安裝新套件
aptitude full-upgrade #同上


以上安裝方式基本可滿足大部使用者的需求,若需要更為靈活的安裝可選擇原始碼編譯方式安裝。

正式開始前,編譯環境需要提前安裝好開發庫gcc和g++(gcc-c++)。安裝方式如下:

ububtu平臺:

apt-get install build-essential
apt-get install libtool

centos平臺:

安裝make:

yum -y install gcc automake autoconf libtool make

安裝gcc g++:

yum install gcc gcc-c++


1.確保你的系統已安裝好了PCRE庫(URL rewrite依賴此),zlib庫(gzip壓縮依賴此),OpenSSL庫(開啟HTTPS,資料傳輸加密、認證)。

假如原始碼的下載目錄選定為/usr/local/src,具體的安裝命令如下:

安裝PCRE:

cd /usr/local/src
wget http://219.239.26.13/files/31370000064D0A62/jaist.dl.sourceforge.net/project/pcre/pcre/8.37/pcre-8.37.tar.gz
tar -zxvf pcre-8.37.tar.gz
cd pcre-8.37
./configure或者
./configure --prefix=/usr/local/pcre --enable-utf8 --enable-unicode-properties --enable-pcregrep-libz --enable-pcregrep-libbz2
make
make install

安裝zlib:

cd /usr/local/src
wget http://zlib.net/zlib-1.2.8.tar.gz
tar -zxvf zlib-1.2.8.tar.gz
cd zlib-1.2.8
./configure
make
make install

安裝openSSL:

apt-get purge openssl #解除安裝舊版本OpenSSL
rm -rf /etc/ssl #刪除配置檔案

cd /usr/local/src
wget http://www.openssl.org/source/openssl-1.0.1c.tar.gz
tar -zxvf openssl-1.0.1c.tar.gz

cd openssl-1.0.1c/

./config --prefix=/usr/local --openssldir=/usr/local/ssl(或./configure)
make && make install

./config shared --prefix=/usr/local --openssldir=/usr/local/ssl

make clean
make && make install

說明:prefix 是安裝目錄,openssldir 是配置檔案目錄(解壓目錄),另外建議安裝兩次,shared 作用是生成動態連線庫。

2.下載nginx-*.tar.gz包。解壓到你指定的目錄,進入解壓的目錄。

3.設定配置引數,指定安裝方式,附加模組等資訊,具體請參考模組對應的說明文件。下邊的命令只指定了安裝目錄。

./configure  --prefix = /usr/local/nginx
或者:
./configure --user=www --group=www --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module --with-http_gzip_static_module --with-pcre=/usr/local/src/pcre-8.37

4.編譯安裝。

make
make install

若終端未提示錯誤訊息即表明安裝成功。

參考文章
rpm 中文man頁面
http://os.51cto.com/art/201108/285804.htm

rpm常用命令及rpm引數介紹 http://www.cnblogs.com/luwikes/archive/2011/09/14/2176575.html
Debian 的source.list解讀 http://www.2cto.com/os/201111/110066.html
Ubuntu下apt-get命令詳解 http://jingyan.baidu.com/article/22a299b51648e09e19376ae7.html