点击返回 自学 Linux 命令行与 Shell 脚本之路
9.3 - 基于 Red Hat 系统工具包存在两种方式之一: 源码包
本节主要介绍基于 Red Had 的系统(测试系统 CentOS)
1. 工具包存在两种方式: RPM 包与源码包
1.1.RPM 包与源码包区别
安装之前的区别: 概念上的区别
源码包是开源的, 比 RPM 包安装更自由, 但是它安装更慢, 更容易报错;
RPM 包是经过编译的, 不能看到源代码, 但是它安装更快, 报错更容易解决, 只有依赖性问题.
缺点: 安装的环境必须与编译时的环境一致或者相当; 包与包之间存在着相互依赖的情况; 卸载包时需要先把依赖的包卸载掉, 如果依赖的包是系统所必须的, 那就不能卸载这个包, 否则会造成系统崩溃.
安装之后的区别: 安装位置不同
RPM 包不需要指定安装位置, 它会安装到系统默认位置;
源码包是人为手工设置的
1.2. 安装位置
RPM 包是按照在默认位置中
RPM 包默认安装路径
/etc/ 配置文件安装目录
/usr/bin/ 可执行的命令安装目录
/usr/lib/ 程序所使用的函数库保存位置
/usr/share/doc/ 基本的软件使用手册保存位置
/usr/share/man/ 帮助文件保存位置
源码包安装位置
. 安装在指定位置当中, 一般是 / usr/local / 软件名 /
1.3 安装位置不同带来的影响
.RPM 包安装的服务可以使用系统服务管理命令 (service) 来管理, 例如 RPM 包安装的 apache 的启动方法是:
- /etc/rc.d/init.d/httpd start
- service httpd start
. 而源码包安装的服务则不能被服务管理命令管理, 因为没有安装到默认路径中. 所以只能用绝对路径进行服务的管理, 如:
/usr/local/apache2/bin/apachectl start
2. 源码包
开放源码: 就是程序代码, 写给人类看的编程语言, 但机器并不认识, 所以无法执行.
编译程序: 将程序代码转译成机器看得懂的语言, 就类似于翻译者的角色.
可执行文件: 经过编译程序变成二进制程序后机器看得懂可以执行的文件.
2.1 函数库
类似于子程序的角色, 可以被调用来执行的一段功能函数.
2.2 make 与 configure
使用类似于 gcc 的编译程序来进行编译的过程并不简单, 我么可以使用 make 这个命令的相关功能来进行编译过程的命令简化.
当执行 make 时, make 会在当前目录下查找 Maklefile 文本文件, 而 Makefile 文件里面记载了源码如何编译的详细信息.
Makefile 文件, 通常软件开发商都会写一个检测程序来检测用户的操作环境, 以及该操作环境是否有软件开发商所需要的其他功能, 检测程序检测完毕后就会主动建立 Makefile 的规则文件. 而这个检测程序的文件名为 configure 或 config.
总结编译过程:
执行 configure 来建立 Maklefile, 这个步骤一定要成功;
以 make 来调用所需要的数据来编辑即可.
2.3 Tarball 软件
Tarball 文件其实就是将软件的所有源码文件现以. bar 打包, 然后在以压缩技术来压缩, 通常最常见的就是以 gzip 来压缩.
Tarball 文件一般的扩展名会写成 *.tar.gz 或者 *.tgz .
Tarball 是一个压缩包, 将它解压之后, 里面的文件通常会有:
源代码文件(Source Code)
检测程序文件(configure 或 config);
本软件的简易说明与安装说明(INSTALL 和 README).
Tarball 是如何安装的? 基本流程如下:
取得原始档: 将 tarball 文件在 /usr/local/src 目录下解压缩;
取得步骤流程: 进入新创建的目录底下, 去查阅 INSTALL 与 README 等相关文件内容 (很重要的步骤!);
相依属性软件安装: 根据 INSTALL/README 的内容察看并安装好一些相依的软件 (非必要);
创建 makefile: 以自动侦测程序 (configure 或 config) 侦测作业环境, 并创建 Makefile 这个文件;
编译: 以 make 这个程序并使用该目录下的 Makefile 做为他的参数配置档, 来进行 make (编译或其他) 的动作;
安装: 以 make 这个程序, 并以 Makefile 这个参数配置档, 依据 install 这个标的 (target) 的指定来安装到正确的路径!
Tarball 安装的命令方式:
./configure
这个步骤就是在创建 Makefile 这个文件罗! 通常程序开发者会写一支 scripts 来检查你的 Linux 系统, 相关的软件属性等等, 这个步骤相当的重要, 因为未来你的安装资讯都是这一步骤内完成的! 另外, 这个步骤的相关资讯应该要参考一下该目录下的 README 或 INSTALL 相关的文件!
make clean
make 会读取 Makefile 中关於 clean 的工作. 这个步骤不一定会有, 但是希望运行一下, 因为他可以去除目标文件! 因为谁也不确定原始码里面到底有没有包含上次编译过的目标文件 (*.o) 存在, 所以当然还是清除一下比较妥当的. 至少等一下新编译出来的运行档我们可以确定是使用自己的机器所编译完成的嘛!
make
make 会依据 Makefile 当中的默认工作进行编译的行为! 编译的工作主要是进行 gcc 来将原始码编译成为可以被运行的 object files , 但是这些 object files 通常还需要一些函式库之类的 link 后, 才能产生一个完整的运行档! 使用 make 就是要将原始码编译成为可以被运行的可运行档, 而这个可运行档会放置在目前所在的目录之下, 尚未被安装到预定安装的目录中;
make install
通常这就是最后的安装步骤了, make 会依据 Makefile 这个文件里面关於 install 的项目, 将上一个步骤所编译完成的数据给他安装到预定的目录中, 就完成安装啦!
请注意, 上面的步骤是一步一步来进行的, 而其中只要一个步骤无法成功, 那么后续的步骤就完全没有办法进行的! 因此, 要确定每一的步骤都是成功的才可以! 举个例子来说, 万一今天你在 ./configure 就不成功了, 那么就表示 Makefile 无法被创建起来, 要知道, 后面的步骤都是根据 Makefile 来进行的, 既然无法创建 Makefile, 后续的步骤当然无法成功罗!
另外, 如果在 make 无法成功的话, 那就表示原始文件无法被编译成可运行档, 那么 make install 主要是将编译完成的文件给他放置到文件系统中的, 既然都没有可用的运行档了, 怎么进行安装? 所以罗, 要每一个步骤都正确无误才能往下继续做! 此外, 如果安装成功, 并且是安装在独立的一个目录中, 例如 /usr/local/packages 这个目录中好了, 那么你就必需手动的将这个软件的 man page 给他写入 /etc/man.config 里面去.
....
来源: https://www.cnblogs.com/yaoyaojcy/p/9828241.html