基于源码的软件安装本质就是程序的源代码制作二进制程序的过程,这个过程中就会依赖一些基础软件和函数库来完成程序制作。这些依赖包括但不仅限于:

  1. gcc或者cc等C语言编译器;
  2. make、autoconfig等软件;
  3. 需要内核提供的Library以及相关的include文件;

通常情况下,基于源码的软件安装都会有固定以下的几个步骤,本篇博客将针对每个步骤中涉及到的知识点进行讲解:

  1. 去XX官网下载软件的Tarball文件;
  2. 上传到linux服务器,并解压缩;
  3. 检查软件安装依赖的软件或工具是否已安装;
  4. 检测操作环境、建立Makefile文件;
  5. 编译程序;
  6. 安装程序;

需要注意的是基于源码的安装是顺序执行的,简而言之就是一旦某一步没有执行成功,那么后续步骤是不会执行的。

可以大胆地说,只要吃透了这篇博客,linux操作系统下所有软件的安装都不是问题!

1、去XX官网下载软件的Tarball文件;

首先搞明白一点,基于源码的安装指的是利用厂商发布的Tarball文件来进行软件的安装,如下图所示的nginx和redis为例:

Tarball文件指的是将软件所有的源代码以tar打包,然后再以压缩技术来压缩(最为常见的以gzip来压缩而形成的文件,所以Tarball文件一般的扩展名就是*.tar.gz或者直接简写为*.tgz。近来由于bzip2与xz的压缩率表现较好,所以Tarball渐渐地以这两者来压缩,因此文件的扩展名也会是*.tar.bz2、*.tar.xz之类的;

Tarball文件通常包含以下内容:

  1. 源代码文件。毫无疑问编译程序用;
  2. 检测程序文件(可能是configure或config等文件)。这个文件一般有两个作用:检测操作环境是否满足编译安装软件的要求、建立Makefile文件;
  3. 软件的简易说明(README)或者安装文档(INSTALL);

2、上传到linux服务器,并解压缩;

默认情况下,用户自行安装的软件建议放置到/usr/local里面。而下载的Tarball文件建议放置到/usr/local/src下,在这个目录下进行解压缩;本次以nginx为例,涉及命令如下:

tar -zxvf nginx-1.20.1.tar.gz

在这一步骤中需要注意这两个放置目录;

3、检查软件安装依赖的软件或工具是否已安装;

这一步不是必须的,可根据步骤4中的检测内容进行确认!

4、检测操作环境、建立Makefile文件;

一般在软件开发商提供的Tarball文件中都会有一个检测程序,以nginx的Tarball文件为例,configure就是这个检测程序(二进制程序):

这个检测程序的检测内容大致如下:

  1. 是否有合适的编译器可以编译本软件的程序代码;比如gcc或cc等C语言编译器。
  2. 是否已经存在本软件所依赖的函数库或其它软件;比如make和autoconfig等软件。
  3. 操作系统平台是否适合本软件,包括Linux的内核版本;
  4. 内核的头文件(header include)是否存在(驱动程序必须要的检测);

不同的软件这个检测程序可能会有不同,但一般都会提供这么一个程序,大家具体问题具体分析即可;

那么我们可以通过执行以下程序进行检测。如果以上内容通过检测,那么会生成Makefile文件,这个文件将被步骤5的make程序用到;

# 执行检测程序,通过检测后创建Makefile
./configure --prefix=/usr/local/nginx

下面先来一个简单Makefile文件了解下,以下Makefile文件中包含两个目标(main和clean)。每个目标的第一行由英文冒号分隔,冒号左边是目标名称,冒号右边是依赖文件(非必要),即具有相关性的目标文件。第二行则为命令行,需要注意的是命令行必须以Tab键作为开头才可以:

main: main.o targetFile.o targetFile2.o targetFile3.ogcc -o main main.o targetFile.o targetFile2.o targetFile3.o -lm
clean: rm -f main main.o targetFile.o targetFile2.o targetFile3.o

经上述,可以大致归纳Makefile语法如下:

目标(target):目标文件1 目标文件2 ... 目标文件n
<tab> 命令1
<tab> 命令2
...

上述实例Makefile借助变量可以优化成如下所示,这个变量可以是shell的环境变量,可以是Makefile指定的环境变量,也可以是make命令行后面加的变量。稍微有些编程基础的应该对变量很熟悉,本次不做讲解:

LIBS = -lm
OBJS = main.o targetFile.o targetFile2.o targetFile3.o
CFLAGS = -WALL
main: ${OBJS}gcc -o $@ ${OBJS} ${LIBS}
clean: rm -f $@ ${OBJS}

另外附上nginx的通过configure程序生成的Makefile文件内容,加深下语法了解;另外以下内容中出现了两行以.PHONY开头的内容,.PHONY 后面跟的目标都被称为伪目标,也就是说我们 make 命令后面跟的参数如果出现在.PHONY 定义的伪目标中,那就直接在Makefile中就执行伪目标的依赖和命令。不管Makefile同级目录下是否有该伪目标同名的文件,即使有也不会产生冲突。另一个就是提高执行makefile时的效率。

default: buildclean:rm -rf Makefile objs.PHONY:  default cleanbuild:$(MAKE) -f objs/Makefileinstall:$(MAKE) -f objs/Makefile installmodules:$(MAKE) -f objs/Makefile modulesupgrade:/usr/local/nginx/sbin/nginx -tkill -USR2 `cat /usr/local/nginx/logs/nginx.pid`sleep 1test -f /usr/local/nginx/logs/nginx.pid.oldbinkill -QUIT `cat /usr/local/nginx/logs/nginx.pid.oldbin`.PHONY:    build install modules upgrade

5、编译程序;

用make这个程序,并使用当前目录下的Makefile作为它的参数配置文件,来进行make(编译或其它)操作;使用命令如下:

make

其实make低层还是利用了gcc进行编译的操作,即源代码->目标文件->执行文件。但它的好处是:

简化编译时所需要执行的命令;

若在编译完成之后,修改了某个源代码文件,那么make只会针对被修改了的文件进行编译,其它的目标文件不会被修改;

可以依照依赖性来更新执行文件

6、安装程序;

通过执行以下命令来完成程序的安装;

make install

其本质就是会执行Makefile文件中的install目标中包含的命令选项,一般为将步骤5中编译完成的内容安装到预定的目录中。预定的目录可以在步骤4时设定,不设定时为默认安装到/usr/local中;

linux下基于源码软件安装的那些事相关推荐

  1. Linux 下 PostgreSQL 源码编译安装

    由于微信不允许外部链接,你需要点击文章尾部左下角的 "阅读原文",才能访问文中链接. PostgreSQL 是一个功能强大的开源对象关系数据库管理系统(ORDBMS),它从伯克利写 ...

  2. 01 linux 下tcl源码编译安装和tcl手册使用

    标签(空格分隔): 源码编译安装 2020.7.7 1 下载安装包.tar.gz 2 解压压缩包 3 进入configure文件所在文件夹,执行./configure ./configure 注解: ...

  3. 在Linux下用源码编译安装apache2

    Linux下安装一个软件,最好去看下它的官方guide,apache2.4的安装安装guide 0. installation guide http://httpd.apache.org/docs/2 ...

  4. Linux下Poppler源码编译安装

    Poppler Poppler是用于呈现可移植文档格式(PDF)文档的免费软件实用程序库.它的开发得到freedesktop.org的支持.它通常在Linux系统上使用,并被开源GNOME和KDE桌面 ...

  5. Linux下mysql源码包安装

    出处:http://keepsmile.blog.51cto.com 环境:Red Hat Enterprise Linux Server release 6.3   mysql-5.5.12.tar ...

  6. linux 如何从源码包安装软件?

    如何从源码包安装软件? 从源码包安装软件最重要的就是仔细阅读README INSTALL等说明文件 它会告诉你怎样才能成功安装 :)  通常从源码包安装软件的步骤是:  tar jxvf gtk+-2 ...

  7. linux下python3源码安装及卸载

    Linux下Python3的源码编译安装和卸载方法 [日期:2019-06-21] 来源:博客园  作者:wuli潇萧 [字体:大 中 小] (一)Linux下软件的源码编译安装和卸载方法 Linux ...

  8. linux git编译安装目录,Linux(centos) 环境下如何源码编译安装git

    21运维原创,转载请注明出处. 最近线上要使用git进行代码发布和版本管理了,之前搞过,一直没有做记录.从今儿起开始记录这块. linux上(当前文章使用的是centos,ubuntu采用apt-ge ...

  9. (转)linux上nginx源码编译安装

    亲测有效: 转:  https://segmentfault.com/a/1190000007116797https://segmentfault.com/a/1190000007116797 ngi ...

最新文章

  1. MFC中的CString.Format及CString,string,char*之间的转换
  2. 开发日记-20190708 关键词 读书笔记 《Perl语言入门》Day 5
  3. 有向图——强连通分量
  4. 【Jupyter Notebook】启动命令行(写进.sh文件直接调用shell)
  5. C语言二进制标识符,C语言入门基础大全,自学C语言必备知识!
  6. Navicat怎样筛选数据
  7. HNCU 1746: 算法4-1,4-3:定位子串
  8. HDU 4868 Information Extraction(2014 多校联合第一场 H)
  9. 微信查询订单API与商派ecstore订单状态对接
  10. 设计模式六大原则(转)
  11. 【Docker】Docker容器和主机如何互相拷贝传输文件
  12. 微波网络转移参量[A]表示阻抗矩阵[Z]和导纳矩阵[Y]
  13. HDU1175(dfs)
  14. 数据分析从入门到进阶,35本包邮送到家
  15. PYG解密小组的Visual Assist X插件完全卸载
  16. 18 个 JavaScript 入门技巧
  17. 万能通用网关系统!就该这么设计,稳的一批!
  18. 五折交叉验证/K折交叉验证, python代码到底怎么写
  19. 谈谈你对 MVC 模式的理解?
  20. Java基于JSP的论坛交流系统

热门文章

  1. WebSocket实践
  2. 学数答题160908-数论不等式
  3. PGM学习之二 PGM模型的分类与简介
  4. hdu 4296 Buildings (贪心)
  5. Spring开发--Bean配置实例讲解
  6. WF工作流设计器(WPF版)
  7. 简单的选项卡功能实现
  8. vue3.x 自定义事件 emits
  9. 816固件a2可以升a1吗_你好,我是A2的证我在15年出的交通事故为什么不能学B2呢-免费法律咨询...
  10. linux用户群组实验总结,linux基础概念和个人笔记总结(2)——账号和权限管理实验验证...