软件安装源码和二进制包
一、linux中软件安装包分类
1、软件包分类
源码包
二进制包
2、源码包
2.1 源码包的概述
什么是源码包?其实就开发完是什么样子就是什么样子,大多数源码包都是c或汇编语言写的。
举例:
**我们也可以自己写一个c语言的helloworld程序,然后自己编译,自己执行一下,玩玩儿,注意:c语言的程序后缀是.c**
#includeint main (void){printf ("hello world\n"; }
c语言需要c的编译器,就像java语言的jdk,所以要在linux上运行c语言的程序,先要安装工具gcc(这个工具是多语言的集成编译器,里边包含了c语言的编译器),c++语言编写的程序的编译器gcc-c++
yum insall -y gcc gcc-c++
gcc -c hello.c #-c 生成“.o”头文件。这里会生成 hello.o 头文件,但是不会生成执行文件
gcc -o hello hello.o #-o 生成执行文件,并制定执行文件名。这里生成的 hello 就是可执行文件
./hello #执行 hello 文件
2.2 源码包特点
源码包的优点:
开源,如果有足够的能力,可以修改源代码
软件是本机编译,安装,所以更加适合自己的系统,更加稳定也效率更高,普遍认为源码包安装比二进制包安装效率高5%左右
卸载方便,删除安装目录,伦理上认为没的什么残留
源码包有缺点:
安装过程步骤较多,尤其安装较大的软件集合时,容易出现拼写错误
编译过程时间较长,安装比二进制安装时间长
因为是编译安装,安装过程中一旦报错新手很难解决,因为我们安装这些软件绝大多数都不是我们自己开发的
3、二进制包
3.1 二进制包分类
在 和 中,二进制软件包叫 DPKG 包。
在Red Hat系列的系统中,讲RPM包。
我们学习的是 7.6,所以我们这里学习的是 RPM 包管理系统
RPM 包的优点:
包管理系统简单,只通过几个命令就可以实现包的安装、升级、查询和卸载
安装速度比源码包安装快的多
RPM 包的缺点:
软件包已经经过编译,看不到源代码
依赖性。
RPM简单易用,但是它的依赖关系是最头疼的!常见的依赖关系:
1)树形依赖 a---->b---->c
2)环形依赖 a---->b---->c---->a
3)函数库依赖
安装某个软件,需要某个具体的文件,这个文件没有单独成包,是包含在某一个别的软件包中的。
二 、rpm二进制包的安装
1、rpm 包命名规则
/mnt//zsh-5.0.2-28.el7..rpm
zsh -5. 0. 2- 28. el7. .rpm
软件名 主版本号次版本号修订(第几次发布版本)操作系统版本/软件发行商 软件包是64位包
修订指是的第几次修改bug。
发布指的是:第几次发布。 发布时,可能只是对软件安装的默认参数做了修改,而没有其它改动。
2、rpm 包手工安装命令
2.1,RPM 包具体的安装命令
1)安装命令
rpm –ivh 包全名(带绝对路径)
选项:
-i 安装()
-v 显示更详细的信息()
-h 显示安装进度(hash)
-- 不检测依赖性安装,在实际的工作中不准用。不管依赖性,想强行安装。注意:这样不检测依赖性安装的软件基本是不能使用的,所以不建议这样做,实验中可以玩玩儿,卸载软件的时候可以用一下。
--替换文件安装。
-- 替换软件包安装
--force 强制安装。不管是否已经安装,都重新安装。就是– 和– 的综合
作用:找回丢失的重要系统文件,一会儿例子中演示。
--test 测试安装。**不会实际安装,只是检测一下依赖性。
-- 指定安装路径,这个选项基本不用。如果指定了安装路径, 软件没有安装到系统默认路径中的话, 系统会找不到这些**
安装的软件,rpm包的安装的卸载命令就不能卸载掉软件,卸载就需要你一个文件一个文件的删除。所以 rpm 包我们一般都采用默认路径安装。
2)依赖的解决办法
A、针对a---->b---->c 这种依赖,先安装c,再安装b,最后安装a
B、针对a---->b---->c---->a 这种依赖
1、强制安装 ----暴力型
使用rpm -i –force -- 强制安装。忽略依赖关系。这种方法你可以先装A包,再装B包,再装C包。这样还是有点隐患的, 感觉不是很踏实(虽然其实目前没发现什么不好)**,**安装后使用成功的前提是:你要搞清楚依赖关系,并且把这些包都装好。好处是:不用管它们的具体依赖关系先后顺序。
2、还可以一次性全装上— 一网打尽型
可以把依赖的几个包拷出来放在同一个文件夹里 然后 rpm -ivh *.rpm 这样也可以 前提也是一个都不能少。
C、遇到函数库依赖,需要知道所缺文件在哪个软件包中,这需要在网站上查询一下在安装。搞定!
上面A解决办法都是说的轻松但做起来,要命!太繁琐!B必须事先知道安装的软件所需要的所有依赖,但是不同的系统,不同的安装模式下的系统,这个依赖都是不同的,是一个不确定的东西,实践起来,也不好使!
D、 使用yum技术安装 --使用服务器方式
yum是一个服务器资源技术。通过在线下载服务器资源的方式,也可以用光盘做为本地的软件包的来源。 缺点:太繁琐。要设置一堆的东西。优点:设置以后,很方便,需要的大多数资源都可以从服务器/本地yum源上找到。这点感觉很像maven!
例: 用为例子,安装一下,演示一下上面的讲的知识点!,实际开发中是用yum的
#挂载光盘到/cdrom,临时的
mkdir /cdrom
mount /dev/sr0 /cdrom
mount: /dev/sr0 写保护,将以只读方式挂载
cd /cdrom
cd Packages/
ls | grep "^httpd" #查一下httpd服务需的软件包,这里有4个,第一个为主包,一般来说安装了主包,都可运行httpd-2.4.6-88.el7.centos.x86_64.rpmhttpd-devel-2.4.6-88.el7.centos.x86_64.rpmhttpd-manual-2.4.6-88.el7.centos.noarch.rpmhttpd-tools-2.4.6-88.el7.centos.x86_64.rpmrpm -ivh httpd-2.4.6-88.el7.centos.x86_64.rpm #安装主包
安装主包时:提醒要三个依赖库和一个依赖包,一个依包在我们的光盘里有,ls |grep “xxx”查之,而库函数依赖要到一个网站中查,表示64位或32位系统都可用,一般来说在光盘里也有相应的包,安装之,没有下载上传安装之
函数库依赖包解决后,再回到刚开始再次安装主包,这会儿,会显示只剩三个依赖包安装,安装呀!重复上面的操作,哎,要亲命哦,我用这种 方式就没安装成功过软件,当然了,如果你有足够定力的话,是可以成功的。
安装完后,启动安装的软件(服务),以 服务为例:
start httpd 启动
stop httpd 关闭
httpd 重启
httpd 查看状态
httpd. #开机启动
httpd. #开机不启动
的网页存放位置:/var/www/html
cd /var/www/html
vi index.html<html><head><title>xiongtitle>head><body>hello httpd!body>html>
的配置文件位置:/etc/httpd/conf/httpd.conf
上是rpm安装方式的这些文件的位置,源码安装的位置讲到的时候在说
rpm包安装都是安装到默认安装位置,这些位置大多数在这些地方:
–force 强制安装来解决重要配置文件丢失的问题:
为了测试,我到/etc/httpd/conf下,删除httpd.conf文件(事先备份一个),再重启 httpd会发现问题的
cd /etc/httpd/conf
mv httpd.conf httpd.conf.bak
systemctl restart httpdjob for httpd.service failed because the control process exited with error code. See "systemctl status httpd.service" and "journalctl -xe" for details.
rpm -ivh --force /cdrom/Packages/httpd-2.4xxxxxxxx.rpm
本人通过测试,这是要在本地yum源安装的时候才有效果,但如果是,通过阿里云或其它网络yum源安装的httpd的话,则要移除yum httpd,再得新安装之yum httpd
2.3RPM包升级命令
# rpm –Uvh 包全名
选项:
-U(大写) 升级安装,如果没有安装过,系统直接安装。如果安装过的版本较旧,则升级到新版本()
# rpm –Fvh 包全名
选项:
-F(大写)升级安装, 如果没有安装过, 则不会安装。 必须安装有较旧版本, 才能升级 ()
2.4卸载命令(卸载软件,不推荐使用yum命令的卸载)
# rpm -e 包名(只需要跟上软件的名称就ok)
选项:
-- 不检查依赖性
-e 卸载
查询
1)查询软件包是否安装(只能查询出rpm包安装的软件,源码安装的软件是查不了的)
rpm –q 包名
选项:
q: 查询(query)
2)查询系统中的所有安装软件包
rpm -qa
选项:
-a:所有(all)
当然,可以用管道符来查看所需的内容,比如:
rpm -qa | grep httpd
3)查询软件包的详细信息
rpm –qi 包名
选项:
-i: 查询软件信息()
也可以查询还没有安装的软件包的详细信息
rpm –qip 包全名
选项:
-p: 查询没有安装的软件包()
4)查询软件包中的文件列表
可以查询已经安装的软件包中的文件列表和安装的完整目录
rpm –ql 包名
选项:
-l: 列出软件包中所有的文件列表和软件所安装的目录(list)
可以查询还没有安装
数字证书
刚刚的校验方法只能对已经安装的 RPM 包中的文件进行校验, 但是如果 RPM 包本身就被动过手脚,
那么校验就不能解决问题了。我们就必须使用数字证书验证了。 数字证书说白了就是一个电子签名,有签名
表示它是官方开发的rpm软件包,是安全的,不是别人动过手脚的软件包,没的,就有可能是别人动
过手脚的软件包,至少不是官方发布的。
数字证书的使用,重要在新的服务器器上一定做这几步操作:
首先必须找到原厂的公钥文件,然后进行安装
再安装 RPM 包时, 会去提取 RPM 包中的证书信息, 然后和本机安装的原厂证书进行验证
如果验证通过,则允许安装;如果验证不通过,则不允许安装并警告.
1)数字证书(原厂的公钥文件)位置
数字证书在安装光盘中就有,安装系统后,我们应该导入这个证书:RPM-GPG-KEY--7
另外在linux系统中也有,位置在:/etc/pki/rpm-gpg/RPM-GPG-KEY--7
2)数字证书导入 ,上面两个位置的,导入那个都是一样的
# rpm – /mnt/RPM-GPG-KEY--7
选项:
– 导入数字证书
rpm在线安装
rpm 包在线安装( yum 安装)
3.1yum 源的配置文件解析
yum 源配置文件保存在/etc/yum.repos.d/目录中,文件的扩展名一定是“.repo”。也就是说,yum 源配置文件只要扩展名是“.repo”就会生效。
#ls /etc/yum.repos.d/
-Base.repo -.repo -Media.repo -Vault.repo
-CR.repo -.repo -.repo
这个目录中有 7 个 yum 源配置文件,默认情况下 -Base.repo 文件生效,这个文件中又有多个具体的yum源。
在 -Base.repo 文件中有 4 个 yum 源,这里只列出了 base,其他和 base类似。我们解释一下 base 这个源。
[base]:源的名称,一定要放在[]中,在一个配置文件中,这个名字不能重复。
name:源说明,可以自己随便写。
: yum 源服务器的镜像站点地址。
: yum 源服务器的地址。
和两个配置,只能使用一个,用那个都可以,默认的地址都在国外,这里可以使用国内的镜像163,都行
:此容器是否生效,如果不写或写成 =1 则表示此容器生效,写成 =0则表示此容器不生效。
:如果为 1 则表示 RPM 的数字证书生效;如果为 0 则表示 RPM 的数字证书不生效。
:数字证书的公钥文件保存位置。不用修改。为1才有用,为0就可以不需要。
=file:///etc/pki/rpm-gpg/RPM-GPG-KEY--7
3.2搭建本地光盘 yum 源,前面已经讲过了,这里不重复
3.3 yum 命令
#yum list
查询所有可用软件包列表
查询 yum 源服务器中是否包含某个软件包。
#yum list 包名(这个的包名必须写完整)
#查询单个软件包
搜索 yum 源服务器上所有和关键字相关的软件包。
yum 关键字(不是完整的包名,是关键字)
#搜索服务器上所有和关键字相关的软件包
yum 搜索可以用于确定某个命令在哪个相关包当中。比如可以确定“”命令需要安装“net-tools”包。
查询指定软件包的信息。
yum info samba
查询 samba 软件包的信息
还没有安装
Name : samba 包名
Arch : i686 适合的硬件平台
: 3.5.10 版本
: 125.el6 发布版本
Size : 4.9 M 大小
Repo : c6-media 在光盘上
三,源码包安装
1. 注意事项
1.1 应该选择哪种软件包?
如果软件包是给大量客户提供访问,建议使用源码包安装,如LAMP环境搭建,因为源码包效率更高。其实现在的集群环境下,大多数RPM包也不慢了,大部分软件包的安装也都是二级制RPM包安装了。
如果软件包是给Linux底层使用,或只给少量客户访问,建议使用rpm包安装,因为rpm包简单。
1.2 源码包是从哪里来的?
rpm包是光盘中直接包含的,所以不需要用户单独下载。而源码包是通过官方网站下载的(tar .gz或tar.bz2格式)。
1.3 源码包:大多数情况下须指定安装位置(源码包没有安装数据库,没有删除命令,最好指定安装到一个目录里,删除目录就是删除软件) ,极少数源码安装指定了位置会报错。
2.安装过程 (核心的过程就是三板斧,编译前的准备,编译,安装)
我们来解释一下源码包安装的具体步骤。 一般情况下源码包里都会有大写一样的名字说明文件,里边详细有安装的步骤。
这一步主要有三个作用:
① 在安装之前需要检测系统环境是否符合安装要求。
② 定义需要的功能选项。“./”支持的功能选项较多,可以执行“./ --help”命令查询其支持的功能。一般都会通过 “./ --=安装路径” 来指定安装路径。
③ 把系统环境的检测结果和定义好的功能选项写入 文件, 后续的编译和安装需要依赖这个文件的内容。
需要注意的是, 不是系统命令,而是源码包软件自带的一个脚本程序,所以必须采用“./”方式执行(“./”代表在当前目录下)。
make 会调用 gcc 编译器,并读取 文件中的信息进行系统软件编译。编译的目的就是把源码程序转变为能被 Linux 识别的可执行文件,这些可执行文件保存在当前目录下。编译过程较为耗时,需要有足够的耐心。
如果在“./”或“make”编译中报错,那么我们在重新执行命令前一定要记得执行 make clean 命令,它会清空 文件或编译产生的“.o”头文件。
&emsp**;这才是真正的安装过程,一般会写清楚程序的安装位置。如果忘记指定安装目录,则可以把这个命令的执行过程保存下来,以备将来删除使用。**
3. 删除
源码包没有删除命令,如果需要删除,直接删除安装目录即可。所以编译时,最好用–=安装路径,指定安装的地方,这样删除效果相当好,要不然的话,安装的到处都是文件。
4. 源码安装出先找不到库文件或软件包的错误后的一般解决办法总结:
# yum 找不到的包或库文件
# yum prce #全部名字查不到,可以查找部分关键字
#还可以在网上取查,遇到库文件的时候
no
error
安装Apach来举例演示:
一,下载
二,上传
三,安装
1.cd /usr/local
2.tar -zxvf xxxx.tar.gz
3.cd /user/local /xxxx //进入解压后的目录,该目录下有一个,可以cat 看看安装步子
4…/ --=/usr/local/
//出现如下错误,说是找不到APR包,我们可以YUM SEARCH APR,查询一些该包是什么样的
//安装该包时,又说安装了,无须处理,什么也没做,这是因为安装时索引包没安装,它在开发包中
//安装好了,再次执行预编译,如果再次出现没找到XXXX包,参考上面,再做呀。
//如果是库文件(LIB字样)找不到,再可以到 中查,再回系统中
yum 软件包名
yum install 软件包名
//上图是没有安装C语言编译器,要安装gcc gcc-c++
yum install -y gcc gcc-c++
5.编译
make //比较耗时,一分钟左右,如果是一两兆的话,要花几十分钟编译,这也是源码安装的不好之处。
6.安装
make install
7.启动
cd /usr/local/
./ start
源码安装后的配置文件的位置:
配置文件: /usr/local//conf/httpd.conf
网页文件: /usr/local///
日志位置: /usr/local//logs/