阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

Linux下软件包的多种安装方式

61次阅读
没有评论

共计 5704 个字符,预计需要花费 15 分钟才能阅读完成。

本文由 LinuxProbe.Com 团队成员 魏丽猿 整理发布,原文来自:细说 Linux。

源码包安装

在 Linux 下的很多软件都是通过源码包方式发布的,虽然相对于二进制软件包,配置和编译起来繁琐点,但是它的可移植性却好得多,针对不同的体系结构,软件开发者往往仅需发布同一份源码包,不同的最终用户经过编译就可以正确运行。
安装的具体步骤:

$ tar zxvf XXXX.tar.gz (or tar jxvf XXXX.tar.bz2)
$ cd XXXX
$ ./configure
$ make
# make install            ## 安装
$ make clean              ## 安装完成后用来清理临时文件
$ake uninstall            ## 用来卸载软件

1、解压:
最常见源码包的就两种(XXXX.tar.gz or XXXX.tar.bz2), 其实这些源码包都是由 2 个工具压缩而成的,tar.gz 结尾的文件用到的工具是 tar 和 gunzip, 而 tar.bz2 结尾的文件所使用的工具是 tar 和 bzip2, 之所以这样做是因为,tar 仅仅能够打包多个文件但是没有压缩的功能,而 gz 和 bz2 却刚好相反,仅能够压缩单个文件,这样我们常见的源码包实际上是通过 tar 先将不同的源文件打包,然后再通过 gunzip 或者 bzip2 压缩后发布的,当然这两个步骤可以通过一条命令实现:

$ tar zcvf XXXX.tar.gz XXXX(or tar jcvf XXXX.tar.bz2 XXXX)
解压的相关命令如下:
$ tar zxvf XXXX.tar.gz
$ tar jxvf XXXX.tar.bz2

2、./configure:
解压完成就正式开始安装了(补充一点,开始 configure 之前,如有必要,请使用 patch 工具为源码打上相应的补丁), 首先跳转到源码的解压目录,众所周知,开始 configure 前还是应该仔细阅读源码目录下的 README 或者 INSTALL 文件, 好多安装中的注意事项在这里都有所罗列,configure 实际上是一个脚本文件,在当前目录中键入 ”./configure”,shell 就会运行当前目录下的 configure 脚本,有一点必须说明,在整个 configure 过程,其实编译尚未进行,configure 仅仅是做编译相关的准备工作,它主要对您当前的工作平台做一些依赖性检查,比如编译器是否安装,连接器是否存在,如果在检测的过程没有任何错误,你很幸运,configure 脚本会在当前目录下生成下一步编译链接所要用到的另一个文件 Makefile,当然 configure 支持及其丰富的命令行参数,可以键入 ”./configre –help” 获取具体的信息,最常用的恐怕就是:

$ ./configure --prefix=/opt/XXX
它用来设置软件的安装目录.

3、make:
如果 configure 过程正确完成,那么在源码目录,会生成相应的 Makefile 文件,Makefile 文件简单来说包括的是一组文件依赖关系以及编译链接的相关步骤,事实上真正的编译链接工作也不是 make 所做的,make 只是一个通用的工具,一般情况下,make 会根据 Makefile 中的规则调用合适的编译器编译所有与当前软件相依赖的源码,生成所有相关的目标文件,最后再使用链接器生成最终的可执行程序:

$ make

4、make install:
当上面两个步骤正确完成,代表着编译链接过程已经完全结束,最后要做的就是将可执行程序安装到正确的位置,在这个步骤,普通用户可能没有相关目录的操作权限,临时切换到 root 是一个不错的选择,”install” 只是 Makefile 文件中的一个标号,”make install” 代表着 make 工具执行 Makefile 文件中 ”install” 标号下的所有相关操作,如果在 configure 阶段没有使用 ”–prefix=/opt/XXX” 指定应用程序的安装目录,那么应用程序一般会被默认安装到 /usr/local/bin,如果 /usr/local/bin 已经存在于您的 PATH 中,那么安装已经基本结束:

$make install

执行完上述操作就可以等待安装完成了。

$make clean
$make uninstall

这两个步骤只是安装的后续操作,有一点必须注意,”clean” 和 ”uninstall” 也是 Makefile 文件中相应的两个标号,执行这两个步骤的时候 Makefile 文件必要保留,”make clean” 用来清除编译连接过程中的一些临时文件,”make uninstall” 是卸载相关应用程序,与 make install 类似,make uninstall 也需要切换到 root 执行,不过 ”uninstall” 标号在好多 Makefile 中都被省略掉了。

RPM 包安装

1、如何安装 rpm 软件包
rmp 软件包的安装可以使用程序 rpm 来完成。执行下面的命令

rpm -i your-package.rpm

其中 your-package.rpm 是你要安装的 rpm 包的文件名,一般置于当前目录下。
安装过程中可能出现下面的警告或者提示:

... conflict with ... 可能是要安装的包里有一些文件可能会覆盖现有
的文件,缺省时这样的情况下是无法正确安装的可以用
rpm --force -i 强制安装即可
... is needed by ...
... is not installed ... 此包需要的一些软件你没有安装可以用
rpm --nodeps -i 来忽略此信息
也就是说,rpm -i --force --nodeps 可以忽略所有依赖关系和文件问题,什么包
都能安装上,但这种强制安装的软件包不能保证完全发挥功能

2、如何安装.src.rpm 软件包
有些软件包是以.src.rpm 结尾的,这类软件包是包含了源代码的 rpm 包,在安装时
需要进行编译。这类软件包有两种安装方法,
方法一:

1. 执行 rpm -i your-package.src.rpm
2. cd /usr/src/redhat/SPECS
3. rpmbuild -bp your-package.specs 一个和你的软件包同名的 specs 文件
4. cd /usr/src/redhat/BUILD/your-package/ 一个和你的软件包同名的目录
5. ./configure 这一步和编译普通的源码软件一样,可以加上参数
6. make
7. make install

方法二:

1. 执行 rpm -i you-package.src.rpm
2. cd /usr/src/redhat/SPECS                 前两步和方法一相同
3. rpmbuild -bb your-package.specs          一个和你的软件包同名的 specs 文件

这时,在 /usr/src/redhat/RPM/i386/(根据具体包的不同,也可能是 i686,noarch 等等)目录下,有一个新的 rpm 包,这个是编译好的二进制文件, 执行 rpm -i new-package.rpm 即可安装完成。
3、如何卸载 rpm 软件包
使用命令 rpm -e 包名,包名可以包含版本号等信息,但是不可以有后缀.rpm
比如卸载软件包 proftpd-1.2.8-1,可以使用下列格式:

rpm -e proftpd-1.2.8-1
rpm -e proftpd-1.2.8
rpm -e proftpd-
rpm -e proftpd

不可以是下列格式:

rpm -e proftpd-1.2.8-1.i386.rpm
rpm -e proftpd-1.2.8-1.i386
rpm -e proftpd-1.2
rpm -e proftpd-1

有时会出现一些错误或者警告:

... is needed by ... 这说明这个软件被其他软件需要,不能随便卸载

可以用 rpm -e –nodeps 强制卸载
4、如何不安装但是获取 rpm 包中的文件
使用工具 rpm2cpio 和 cpio

rpm2cpio xxx.rpm | cpio -vi
rpm2cpio xxx.rpm | cpio -idmv
rpm2cpio xxx.rpm | cpio --extract --make-directories

参数 i 和 extract 相同,表示提取文件。v 表示指示执行进程
d 和 make-directory 相同,表示根据包中文件原来的路径建立目录
m 表示保持文件的更新时间。
5、如何查看与 rpm 包相关的文件和其他信息
下面所有的例子都假设使用软件包 mysql-3.23.54a-11
1. 我的系统中安装了那些 rpm 软件包

rpm -qa  列出所有安装过的包

如果要查找所有安装过的包含某个字符串 sql 的软件包

rpm -qa |grep sql

2. 如何获得某个软件包的文件全名

rpm -q mysql 可以获得系统中安装的 mysql 软件包全名,从中可以获得当前软件包的版本等信息。

这个例子中可以得到信息 mysql-3.23.54a-11
3. 一个 rpm 包中的文件安装到那里去了?

rpm -ql 包名            注意这里的是不包括.rpm 后缀的软件包的名称

也就是说只能用 mysql 或者 mysql-3.23.54a-11 而不是 mysql-3.23.54a-11.rpm, 如果只是想知道可执行程序放到那里去了,也可以用 which,比如

which mysql

4. 一个 rpm 包中包含那些文件

一个没有安装过的软件包,使用:rpm -qlp ****.rpm
一个已经安装过的软件包,还可以使用:rpm -ql ****.rpm

5. 如何获取关于一个软件包的版本,用途等相关信息?

一个没有安装过的软件包,使用 rpm -qip ****.rpm
一个已经安装过的软件包,还可以使用 rpm -qi ****.rpm

6. 某个程序是哪个软件包安装的,或者哪个软件包包含这个程序

rpm -qf `which 程序名 ` 返回软件包的全名
rpm -qif `which 程序名 ` 返回软件包的有关信息
rpm -qlf `which 程序名 ` 返回软件包的文件列表

注意,这里不是引号,而是 `,就是键盘左上角的那个键, 也可以使用rpm -qilf,同时输出软件包信息和文件列表
7. 某个文件是哪个软件包安装的,或者哪个软件包包含这个文件
注意,前一个问题中的方法,只适用与可执行的程序,而下面的方法,不仅可以用于可执行程序,也可以用于普通的任何文件, 前提是知道这个文件名, 首先获得这个程序的完整路径,可以用 whereis 或者 which,然后使用 rpm -qf 例如:

# whereis ftptop
ftptop: /usr/bin/ftptop /usr/share/man/man1/ftptop.1.gz
# rpm -qf /usr/bin/ftptop
proftpd-1.2.8-1
# rpm -qf /usr/share/doc/proftpd-1.2.8/rfc/rfc0959.txt
proftpd-1.2.8-1

获得软件包相关的信息用 rpm -q,q 表示查询 query,后面可以跟其他选项,比如

i 表示 info,获得软件包的信息;l 表示 list,获得文件列表;a 表示 all,在所有包中执行查询;f 表示 file,根据文件进行相关的查询;p 表示 package,根据软件包进行查询
需要的查询条件可以使用 grep 产生,或者从 "` `" 中的命令行产生
yum 安装

自动搜索最快镜像插件:yum install yum-fastestmirror
安装 yum 图形窗口插件:yum install yumex
1、安装

yum install 全部安装
yum install package1 安装指定的安装包 package1
yum groupinsall group1 安装程序组 group1

2、更新和升级

yum update 全部更新
yum update package1 更新指定程序包 package1
yum check-update 检查可更新的程序
yum upgrade package1 升级指定程序包 package1
yum groupupdate group1 升级程序组 group1

3、查找和显示

yum info package1 显示安装包信息 package1
yum list 显示所有已经安装和可以安装的程序包
yum list package1 显示指定程序包安装情况 package1
yum groupinfo group1 显示程序组 group1 信息 yum search string 根据关键字 string 查找安装包

4、删除程序

yum remove | erase package1 删除程序包 package1
yum groupremove group1 删除程序组 group1
yum deplist package1 查看程序 package1 依赖情况

5、清除缓存

yum clean packages 清除缓存目录下的软件包
yum clean headers 清除缓存目录下的 headers
yum clean oldheaders 清除缓存目录下旧的 headers
yum clean, yum clean all (= yum clean packages; yum clean oldheaders) 清除缓存目录下的软件包及旧的 headers

6、TIPS
1. 让 yum 命令下载软件包,但是不安装
yum 有一个 plugin 叫做 yum-downloadonly,它就可以为用户实现只下载软件包的功能。
我们可以使用以下命令安装这个插件:

yum install yum-downloadonly

完成安装后,yum 就多了两个命令参数,分别是:

--downloadonly
--downloaddir=/path/to/dir

这两个命令参数的含义非常明确,不用多作解释了,这样,用户就可以做到使用 yum 只下载软件包,不自动安装了
2. 不用 yum-downloadonly 插件,安装或者升级软件时保留下安装包
yum 默认情况下,升级或者安装后,会删除下载的 rpm 包。
不过,我们也可以如下设置升级后不删除下载的 rpm 包

vim /etc/yum.conf
[main]
cachedir=/var/cache/yum
keepcache=0

将 keepcache=0 修改为 keepcache=1,安装或者升级后,在目录 /var/cache/yum 下就会有下载的 rpm 包了。

阿里云 2 核 2G 服务器 3M 带宽 61 元 1 年,有高配

腾讯云新客低至 82 元 / 年,老客户 99 元 / 年

代金券:在阿里云专用满减优惠券

正文完
星哥说事-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2024-07-25发表,共计5704字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中