linux软件安装方式

clamzxf 2020-04-02

在linux系统上安装软件有三种方式:1.源码安装2.rpm包安装3.yum命令安装

https://www.cnblogs.com/benwu/articles/8436209.html

一、源码安装

Linux上几乎所有的软件都经过了GPL授权,因此几乎所有的软件都会提供源码。 而一个软件要在Linux上执行,必须是二进制文件,因此当我们拿到软件源码后,需要将它编译成二进制文件才能在Linux上运行。

软件编译过程

将源码编译成可供Linux运行的二进制文件一共需要两步: 

1. 使用gcc编译器将源码链接成目标文件 

2. 再次使用gcc编译器将目标文件编译成二进制文件

一个软件的源代码往往被封装在多个源文件中,此外这些文件有错综复杂的依赖关系,编译需要严格按照指定的顺序进行,这无疑增加了编译的难度。好在make命令可以帮助我们简化编译过程。

整个编译过程被浓缩在Makefile文件中(告诉make命令需要怎么去编译和链接程序),当执行make命令时,make会去当前目录中寻找Makefile文件,并根据该文件中的要求完成整个编译过程。

而Makefile文件由configure命令产生。当执行configure命令时,configure会根据当前系统环境动态生成一个适合本系统的Makefile文件,供make命令使用。

Linux源码安装步骤

1.获取源码,将软件的源码下载至/usr/local/(默认放这个目录),并解压。

2.创建Makefile文件,执行configure命令,生成Makefile文件。

3.编译 ,执行make clean;make命令将源码编译成二进制文件。 

PS:make clean命令用来清除上一次编译生成的目标文件。这个步骤可有可无,但为了确保编译的成功,还是加上为好。防止由于软件中含有残留的目标文件导致编译失败。

4.安装,执行make install命令将上一步编译好的二进制文件安装到指定的目录中去。

https://www.cnblogs.com/ftl1012/p/rpm.html

二、rpm安装

rpm(Redhat Package Manager),是redhat的软件包管理方式,这种安装方式简单的说就是安装别人编译好的软件包。rpm不仅已经把软件源码编译成了二进制文件,而且对软件包依赖的文件,系统环境等做了统计。由于rpm功能强大方便,因此也逐渐被其他linux发行版采用。

rpm常见命令参数

用法: rpm [选项...]
-a:查询所有套件;
-b<完成阶段><套件档>+或-t <完成阶段><套件档>+:设置包装套件的完成阶段,并指定套件档的文件名称;
-c:只列出组态配置文件,本参数需配合"-l"参数使用;
-d:只列出文本文件,本参数需配合"-l"参数使用;
-e<套件档>或--erase<套件档>:删除指定的套件;
-f<文件>+:查询拥有指定文件的套件;
-h或--hash:套件安装时列出标记;
-i:显示套件的相关信息;
-i<套件档>或--install<套件档>:安装指定的套件档;
-l:显示套件的文件列表;
-p<套件档>+:查询指定的RPM套件档;
-q:使用询问模式,当遇到任何问题时,rpm指令会先询问用户;
-R:显示套件的关联性信息;
-s:显示文件状态,本参数需配合"-l"参数使用;
-U<套件档>或--upgrade<套件档>:升级指定的套件档;
-v:显示指令执行过程;
-vv:详细显示指令执行过程,便于排错。

 rpm常用命令

//安装rpm软件包
rpm -ivh your-package                # 直接安装
rpm --force -ivh your-package.rpm    # 忽略报错,强制安装
//卸载rpm软件包
rpm -ql tree                         # 查询文件安装位置
rpm -e tree                          # 卸载
//列出所有安装过的包 配合grep使用
rpm -qa
//获得某个软件包的文件全名
rpm -q **
//查看哪个软件包包含这个程序
rpm -qf `which 程序名`    #返回软件包的全名

https://www.cnblogs.com/sui776265233/p/10175878.html

三、yum安装

yum(Yellow dog Updater,Modified这名字咋起的不晓得。。),基于rpm包管理,能够从指定的服务器自动下载rpm包并且安装,可以自动处理依赖关系,一次安装所有依赖的软件包,无需一次次下载、安装。

yum常用命令

安装软件(以foo-x.x.x.rpm为例):yum install foo-x.x.x.rpm
删除软件:yum remove foo-x.x.x.rpm或者yum erase foo-x.x.x.rpm
升级软件:yum upgrade foo或者yum update foo
查询信息:yum info foo
搜索软件(以包含foo字段为例):yum search foo
显示软件包依赖关系:yum deplist foo
  -q 静默执行 
  -t 忽略错误
  -R[分钟] 设置等待时间
  -y 自动应答yes
  --skip-broken 忽略依赖问题
  --nogpgcheck 忽略GPG验证

https://blog.csdn.net/yzpbright/article/details/81387623

https://www.jianshu.com/p/9f2eca20501b

yum的基本工作流程如下

服务器端:在服务器上面存放了所有的rpm软件包,然后分析每个rpm文件的依赖性关系(rpm包头文件里记录着这些依赖关系),将这些数据记录成文件存放在服务器的某特定目录内。 

客户端:执行yum安装命令时,先下载服务器上面记录的依赖性关系文件(可通过WWW或FTP方式),通过对服务器端下载的纪录数据进行分析,获取所有需要安装的包,一次全部下载下来进行安装。

yum配置文件

yum作为一个rpm包管理工具,从哪里下载rpm包(软件仓库问题),rpm包下载完怎么处理,包的版本控制等等都需要定义。在linux系统/etc/yum.repo.d目录下包含多个repo文件,它们的作用是定义yum源(软件仓库)的信息,一个repo文件定义了一个或多个软件仓库细节。另外还有一个/etc/yum.conf配置文件用于存储yum其他配置信息

/etc/yum.conf

[main]
#cachedir:yum缓存的目录,yum在此存储下载的rpm包和数据库,一般是/var/cache/yum/$basearch/$releasever。
cachedir=/var/cache/yum/$basearch/$releasever 
#keepcache:是否保留缓存内容,0:表示安装后删除软件包,1表示安装后保留软件包
keepcache=1
#debuglevel:除错级别,0──10,默认是2 貌似只记录安装和删除记录
debuglevel=2
#logfile:存放系统更新软件的日志的目录。用户可以到/var/log/yum.log文件去查询自己在过去的日子里都做了哪些更新。
logfile=/var/log/yum.log
#pkgpolicy: 包的策略。一共有两个选项,newest和last,这个作用是如果你设置了多个repository,而同一软件在不同的repository中同时存 在,yum应该安装哪一个,如果是newest,则yum会安装最新的那个版本。如果是last,则yum会将服务器id以字母表排序,并选择最后的那个 服务器上的软件安装。一般都是选newest。
pkgpolicy=newest
#将 $releasever 设置为 CentOS-release 这个RPM包的版本号 $basearch 设置为centos-release包的Architecture属性
distroverpkg=CentOS-release
#tolerent,也有1和0两个选项,表示yum是否容忍命令行发生与软件包有关的错误,比如你要安装1,2,3三个包,而其中3此前已经安装了,如果你设为1,则yum不会出现错误信息。默认是0。
tolerant=1
#exactarch,有两个选项1和0,代表是否只升级和你安装软件包cpu体系一致的包,如果设为1,则如你安装了一个i386的rpm,则yum不会用1686的包来升级。
exactarch=1
#retries,网络连接发生错误后的重试次数,如果设为0,则会无限重试。
retries=20
#此选项在进行发行版跨版本升级的时候会用到。
obsoletes=1
#gpgchkeck= 有1和0两个选择,分别代表是否是否进行gpg校验,如果没有这一项,默认是检查的。
gpgcheck=1
#默认都会被include 进来 也就是说 /etc/yum.repos.d/xx.repo 无论配置文件有多少个 每个里面有多少个[name] 最后其实都被整合到 一个里面看就是了 重复的[name]后面的覆盖前面的
reposdir=/etc/yy.rm #默认是 /etc/yum.repos.d/ 低下的 xx.repo后缀文件
#exclude 排除某些软件在升级名单之外,可以用通配符,列表中各个项目要用空格隔开,这个对于安装了诸如美化包,中文补丁的朋友特别有用。
exclude=xxx

 repo文件

#serverid是用于区别各个不同的repository,必须有一个独一无二的名称。若重复了,是前面覆盖后面--还是反过来呢???用enabled 测试是后面覆盖前面
[serverid]
#name,是对repository的描述,支持像$releasever $basearch这样的变量; name=Fedora Core $releasever - $basearch - Released Updates
name=Some name for this server
#baseurl是服务器设置中最重要的部分,只有设置正确,才能从上面获取软件。它的格式是:
#baseurl=url://server1/path/to/repository/
#url://server2/path/to/repository/
#url://server3/path/to/repository/
#其中url支持的协议有 http:// ftp:// file://三种。baseurl后可以跟多个url,你可以自己改为速度比较快的镜像站,但#baseurl只能有一个,也就是说不能像如下格式:
#baseurl=url://server1/path/to/repository/
#baseurl=url://server2/path/to/repository/
#baseurl=url://server3/path/to/repository/
#其中url指向的目录必须是这个repository header目录的上一级,它也支持$releasever $basearch这样的变量。
baseurl=url://path/to/repository/

#url之后可以加上多个选项,如gpgcheck、exclude、failovermethod等,比如:
#gpgcheck=1
#exclude=gaim
#其中gpgcheck,exclude的含义和[main]部分相同,但只对此服务器起作用
#mirrorlist=http://mirrors.fedoraproject.org/mirrorlist?repo=fedora-$releasever&arch=$basearch

#failovermethode 有两个选项roundrobin和priority,意思分别是有多个url可供选择时,yum选择的次序,roundrobin是随机选择,如果连接失 败则使用下一个,依次循环,priority则根据url的次序从第一个开始。如果不指明,默认是roundrobin。
failovermethod=priority

#当某个软件仓库被配置成 enabled=0 时,yum 在安装或升级软件包时不会将该仓库做为软件包提供源。使用这个选项,可以启用或禁用软件仓库。
#通过 yum 的 --enablerepo=[repo_name] 和 --disablerepo=[repo_name] 选项,或者通过 PackageKit 的"添加/删除软件"工具,也能够方便地启用和禁用指定的软件仓库
enabled=[1 or 0]

常见错误

有些软件想nginx、redis的rpm包,yum基础库中没有,就需要安装额外的软件仓库。我们常用的额外软件仓库是epel-release。安装完epel-release后,再安装nginx等软件有可能报下面这个错误(网络等无问题情况下):

One of the configured repositories failed (Unknown),
 and yum doesn't have enough cached data to continue. At this point the only
 safe thing yum can do is fail. There are a few ways to work "fix" this:
     1. Contact the upstream for the repository and get them to fix the problem.
     2. Reconfigure the baseurl/etc. for the repository, to point to a working
        upstream. This is most often useful if you are using a newer
        distribution release than is supported by the repository (and the
        packages for the previous distribution release still work).
     3. Disable the repository, so yum won't use it by default. Yum will then
        just ignore the repository until you permanently enable it again or use
        --enablerepo for temporary usage:
            yum-config-manager --disable <repoid>
     4. Configure the failing repository to be skipped, if it is unavailable.
        Note that yum will try to contact the repo. when it runs most commands,
        so will have to try and fail each time (and thus. yum will be be much
        slower). If it is a very temporary problem though, this is often a nice
        compromise:
            yum-config-manager --save --setopt=<repoid>.skip_if_unavailable=true
Cannot retrieve metalink for repository: epel/x86_64. Please verify its path and try again

 出现这个问题的原因是“/etc/yum.repos.d/epel.repo”里面的镜像源路径不对。修改的方法只要把不能用的metalink行注释掉,把baseurl行的注释去掉就行了

相关推荐