周紫恒优秀作者
原创内容 来源:小居数码网 时间:2024-07-28 19:15:01 阅读() 收藏:30 分享:63 爆
导读:您正在阅读的是关于【数码知识】的问题,本文由科普作家协会,生活小能手,著名生活达人等整理监督编写。本文有3391个文字,大小约为13KB,预计阅读时间9分钟。
软件包的安装与管理
一. rpm包
有哪几种软件包?
.rpm .deb(ubuntu,debian等操作系统使用的软件包)
.src.rpm
源码包(一般都是压缩的,tar.gz,tar.bz2,tgz)
源码包--> .src.rpm --> .rpm
包名-发布版本-支持平台.包类型后缀
yum-3.2.22-20.el5.noarch.rpm
yum-metadata-parser-1.1.2-16.el6.x86_64.rpm
xsane-0.991-5.el5.i386.rpm --上面这三个都是rpm包
nginx-0.8.4.tar.gz --这种包需要解压,一般是源码包
cacti-0.8.7b-1.fc8.src.rpm --源rpm包
i386 支持386平台,386都是支持后在的586,686的平台,但是反过来686不一定支持386,因为686rpm包它有对平台做优化,那386就不一定支持
noarch 支持任意平台
x86_64 64位平台
.rpm 红帽包管理 redhat packages management
一般开发都开发出来的软件发布为源码包,因为源码包的安装比较麻烦。redhat公司自己发明了rpm包的格式,用一种很复杂方式去源码包做成rpm包,这样的话在redhat的linux上安装比较方便。
其它的linux发行版也有其它的包格式,还有一种用得比较广泛的包格式叫.deb(用于ubuntu和debian等linux发行版)
32位的软件是可以安装到64位的
64位是不能安装到32位平台
# mkdir /yum
# mount /soft/rhel-server-6.3-x86_64-dvd.iso /yum/ -o loop
rhel6下的iso镜像里的目录简单介绍(不同版本会有少许差异)
Packages --所有的软件包全在此目录(3654)
isolinux
images --这两目录跟系统启动有关
Packages里的软件包分成五大类:
(32位和64位的软件都有)
HighAvailability --高可用
LoadBalancer --负载均衡
ResilientStorage --存储
ScalableFileSystem --文件系统
Server --服务器
--这些目录名其实就是软件包的一个分类.目录里存放的是不同分类软件的信息(我们也叫软件仓库repository)
RPM-GPG-KEY-redhat-release --这是所有的软件包里gpg签名名字
rpm包管理
# rpm -ivh zsh-4.3.10-5.el6.x86_64.rpm
warning: zsh-4.3.10-5.el6.x86_64.rpm: Header V3 RSA/SHA256 Signature, key ID fd431d51: NOKEY
Preparing... ########################################### [100%]
1:zsh ########################################### [100%]
--这是成功安装
# rpm -ivh zsh-4.3.10-5.el6.x86_64.rpm
warning: zsh-4.3.10-5.el6.x86_64.rpm: Header V3 RSA/SHA256 Signature, key ID fd431d51: NOKEY
Preparing... ########################################### [100%]
package zsh-4.3.10-5.el6.x86_64 is already installed
--这是已经安装过了
关于上面的警告信息,其实就是在说操作系统没有这个软件包相关的签名信息;你用rpm命令来安装,有没有此警告无所谓。但如果你用yum来安装,yum里一个参数为gpgcheck=0的话,则表示没签名没问题,gpgcheck=1的话,则没签名就安装不了。
解决这问题:
# cd /yum/
# rpm --import RPM-GPG-KEY-redhat-release
依赖性的问题
# rpm -ivh scsi-target-utils-1.0.24-2.el6.x86_64.rpm
error: Failed dependencies:
libibverbs.so.1()(64bit) is needed by scsi-target-utils-1.0.24-2.el6.x86_64
libibverbs.so.1(IBVERBS_1.0)(64bit) is needed by scsi-target-utils-1.0.24-2.el6.x86_64
libibverbs.so.1(IBVERBS_1.1)(64bit) is needed by scsi-target-utils-1.0.24-2.el6.x86_64
librdmacm.so.1()(64bit) is needed by scsi-target-utils-1.0.24-2.el6.x86_64
librdmacm.so.1(RDMACM_1.0)(64bit) is needed by scsi-target-utils-1.0.24-2.el6.x86_64
perl(Config::General) is needed by scsi-target-utils-1.0.24-2.el6.x86_64
sg3_utils is needed by scsi-target-utils-1.0.24-2.el6.x86_64
--这些依赖性怎么解决,如果你安装的是rhel的iso里的包,那么它的依赖包也一定在iso里(如果你是安装一个第三方的包,那么依赖性就不能保证全在iso里)
解决的过程很艰辛,具体查找的过程就不写了,下面这是安装顺序,并且最后一句比较特殊,它是A依赖B,B又同时依赖A,要两个一起安装的一个典型例子
例子:安装rpm -ivh xfig-plain-3.2.5-23.a.el6.x86_64.rpm这个软件的过程
# rpm -ivh Xaw3d-1.5E-15.1.el6.x86_64.rpm
# rpm -ivh xfig-3.2.5-23.a.el6.x86_64.rpm xfig-common-3.2.5-23.a.el6.x86_64.rpm
# rpm -ivh xfig-plain-3.2.5-23.a.el6.x86_64.rpm
冲突
如果已经安装了A包的老版本,再安装A包的新版本
报错里有conflict关键字的时候,就是冲突了,
解决方法:
方法一:一般来说要先干掉冲突的包,再安装新包
方法二: rpm -ivh --force xxx.rpm来强制安装
# rpm -ivh sg3_utils-libs-1.28-5.el6.x86_64.rpm
file /usr/lib64/libsgutils2.so.2.0.0 from install of sg3_utils-libs-1.28-5.el6.x86_64 conflicts with file from package sg3_utils-libs-1.28-4.el6.x86_64
但是也有特殊情况,比如我已经安装了A包,然后安装B包时,报两个包的其中一个文件冲突,怎么解决?
方法一:把这个文件mv走,然后安装
方法二: rpm -ivh --force xxxx.rpm 强制安装,那么这个冲突的文件会被覆盖
方法三: rpm -ivh --nodocs xxxx.rpm 这个nodocs的参数表示不安装它的文档文件(如果你冲突的文件是一个文档的话。如果不是文档文件,则要用其它相关参数
rpm -ivh --nodeps 脱离依赖性 但是包不一定能用,因为你少了一些依赖包的功能
rpm -ivh --nomd5 不检验md5值
rpm -ivh --noscripts 不想启用或者自动执行某些命令
rpm -ivh --replacefiles 某个文件已经安装在系统上,或者冲突,可以用此参数覆盖 注意:此操作无法复原
rpm -ivh --replacepkgs 重新安装某个已经安装过的包,比如说一个包你修改过,但不知道改在哪里,可以这样重新安装
rpm -ivh --force 相当是强制安装,是--replacefiles和--replacepkgs
rpm -ivh --test 测试是否能安装到此linux系统中
rpm -qa --查看你系统上已经安装的rpm包(注意,只限于rpm包)
# rpm -qa |grep mysql
rpm -ql
# rpm -ql mysql-5.1.61-4.el6.x86_64 --查看一个软件包都安装了哪些文件,从这里也可以了解到linux安装软件是把文件按功能分散到各个目录,后面的包名不用写全
# rpm -qpl mysql-5.1.61-4.el6.x86_64.rpm --如果你一个软件包还没有安装,但你要查看一下安装会产生哪些文件分布,可以加个p参数,但后面的包名要写全
rpm -qi mysql-5.1.61-4.el6.x86_64 --查看软件包有关信息和说明
# rpm -qf `which mount` --查看一个文件属于哪个软件包,rpm源码包查不到
util-linux-ng-2.17.2-12.7.el6.x86_64
# rpm -qc postfix --查配置文件
# rpm -e mysql-5.1.61-4.el6.x86_64 --删除一个rpm包的安装,但是删除也有依赖性.erase
问题:使用firefox &后打开firefox失败,报错为command not found,如何解决?
思路:
1,报命令找不到,一般马上会想到是软件包没安装,去安装软件
2,如果安装时报already installed,那说明,软件已经安装,但可能少了命令文件和其它一些文件
3,最好的解决方法 rpm -ivh firefox-10.0.5-1.el6_2.x86_64.rpm --force
二. src.rpm包
xxx.src.rpm
这种包是需要重编译
rpm 源码包,根据你的硬件情况编译成适合你的系统的rpm安装包
# rpm -qpi acl-2.2.49-6.el6.x86_64.rpm
......
Source RPM: acl-2.2.49-6.el6.src.rpm --用rpm -qi查看任何rpm包都会有类似这样的一句,表示它的src.rpm包的名字
......
你可以这样来理解,rpm包由src.rpm包产生,src.rpm包由源码包+.spec宏文件产生
源码+spec --> src.rpm -- > rpm
你现在的iso里的rpm包对应的src.rpm包都可以到redhat的ftp服务器上找到,路径为
ftp://ftp.redhat.com/redhat/linux/enterprise/6Server/en/os/SRPMS
# ls /root/rpmbuild --此目录不存在
# rpm -ivh zlib-1.2.3-27.el6.src.rpm
# ls /root/rpmbuild/
SOURCES --这个目录里就有zlib的源码包
SPECS --这个目录里的文件就是宏文件
编译方法一:
# rpmbuild --ba zlib.spec --对宏文件编译成rpm包(需要源码的支持)
Wrote: /root/rpmbuild/SRPMS/zlib-1.2.3-27.el6.src.rpm
Wrote: /root/rpmbuild/RPMS/x86_64/zlib-1.2.3-27.el6.x86_64.rpm
Wrote: /root/rpmbuild/RPMS/x86_64/zlib-devel-1.2.3-27.el6.x86_64.rpm
Wrote: /root/rpmbuild/RPMS/x86_64/zlib-static-1.2.3-27.el6.x86_64.rpm
Wrote: /root/rpmbuild/RPMS/x86_64/minizip-1.2.3-27.el6.x86_64.rpm
Wrote: /root/rpmbuild/RPMS/x86_64/minizip-devel-1.2.3-27.el6.x86_64.rpm
Wrote: /root/rpmbuild/RPMS/x86_64/zlib-debuginfo-1.2.3-27.el6.x86_64.rpm
--编译完后,在倒数几行那都有类似上面的信息,可以看到已经编译成了rpm包了
编译方法二:
# rpmbuild --rebuild zlib-1.2.3-27.el6.src.rpm --直接对src.rpm包编译出rpm包,结果与上面方法一样
两种方法对较:
第二种就是不需要对宏文件进行修改,直接编就可以
第一种就是你可以按自己的需求对宏文件进行修改,再编
问题:
如果你要在你的linux上安装一个第三方的软件,你希望下载一个rpm包来安装,如果你在http:///opensource/ntfs-3g_ntfsprogs-2014.2.15.tgz
fuse-2.7.1.tar.gz -- file system in user space,就是一个文件系统的挂载模块
ntfs-3g_ntfsprogs-2014.2.15.tgz --让linux支持ntfs格式挂载的一个软件包
问题:
linux支持ntfs吗?
linux内核是支持的,只不过rhel内核没有加上这个功能,因为rhel没有必要去支持ntfs这种文件系统,实际环境里面也不可能有这种需求。但学习环境还是可能用到,因为有人要用ntfs格式的移动硬盘与linux拷数据
解决方法:
第一:编译内核
第二:找第三方软件,安装上来支持
一般安装一个源码的步骤
1,最好先看readme或install文件找到它的安装说明
2,./configure --这个命令后可接各种不同的参数,这些参数就代表了你要加哪些功能。今天不讨论其它参数,只讨论一个 --prefix=/path ,指定安装路径
3,make --这个命令的执行时间比较长(以软件大小而异),它就相当于是按照你定义好参数的把这个软件做出来
4,make install --是把做好的软件安装到你指定的目录(这个指定参数也是在./configure里可以去改的)
tar xf fuse-2.7.1.tar.gz -C /usr/src/ --这条命令是把这个源码包解压到/usr/src
# cd /usr/src/fuse-2.7.1/
# ./configure
# make
# make install
# modprobe fuse --把安装好的模块加载 在rhel6.3下测试的是自带了fuse模块,也就是说你可以不用装这个软件,直接去装下面的软件就可以支持ntfs了
# tar xf /soft/ntfs-3g_ntfsprogs-2014.2.15.tgz -C /usr/src/
# cd /usr/src/ntfs-3g_ntfsprogs-2014.2.15/
# ./configure
# make
# make install
# which mount.ntfs-3g --安装完后,有此命令就表示成功了
/sbin/mount.ntfs-3g
用此命令去挂载ntfs文件系统的用法
# mount.ntfs-3g /dev/sdxx /mnt
对ldconfig的讨论
在fuse源码里的readme文件里有这么一句
You may also need to add '/usr/local/lib' to '/etc/ld.so.conf' and/or
run ldconfig.
先理解什么是库文件
# ldd /bin/ls --库可以理解成运行程序需要的功能(类似windows里的.dll文件),此命令就是查看ls命令需要使用哪些库,这些库缺一不可
linux-vdso.so.1 => (0x00007fffc79ff000)
libselinux.so.1 => /lib64/libselinux.so.1 (0x0000003d12200000)
librt.so.1 => /lib64/librt.so.1 (0x0000003d11600000)
libcap.so.2 => /lib64/libcap.so.2 (0x0000003d14200000)
libacl.so.1 => /lib64/libacl.so.1 (0x0000003511800000)
libc.so.6 => /lib64/libc.so.6 (0x0000003d10a00000)
libdl.so.2 => /lib64/libdl.so.2 (0x0000003d10600000)
/lib64/ld-linux-x86-64.so.2 (0x0000003d10200000)
libpthread.so.0 => /lib64/libpthread.so.0 (0x0000003d10e00000)
libattr.so.1 => /lib64/libattr.so.1 (0x0000003d1f200000)
我安装fuse这个软件,它的库文件默认会安装到 $PREFIX/lib,所以它会安装到/usr/local/lib.
但如果另一个软件要用到fuse相关的库,那么它能否找到/usr/local/lib下的库文件呢?
默认系统只会找/lib/,/lib64/,/usr/lib/,/usr/lib64这几个目录,所以/usr/local/lib你可以加到ldconfig里,让别人要使用你的库的时候能够找到你的位置
# vim /etc/ld.so.conf.d/fuse.conf --在此子目录里建立一个自定义的名,只要以.conf结尾就可以,加上你的库的目录路径
/usr/local/lib
# ldconfig --保存后,使用此命令让它生效
源版包的删除,直接rm -rf 删除它所有的相关文件就行了
上面就是小居数码小编今天给大家介绍的关于(linux软件包安装命令)的全部内容,希望可以帮助到你,想了解更多关于数码知识的问题,欢迎关注我们,并收藏,转发,分享。
94%的朋友还想知道的:
(486)个朋友认为回复得到帮助。
部分文章信息来源于以及网友投稿,转载请说明出处。
本文标题:Linux软件包管理(linux软件包安装命令):http://sjzlt.cn/shuma/152412.html