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可自己更新,参考)

如果是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


若终端未提示错误消息即表明安装成功。