热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

开发笔记:linux下基于源码软件安装的那些事

篇首语:本文由编程笔记#小编为大家整理,主要介绍了linux下基于源码软件安装的那些事相关的知识,希望对你有一定的参考价值。

篇首语:本文由编程笔记#小编为大家整理,主要介绍了linux下基于源码软件安装的那些事相关的知识,希望对你有一定的参考价值。






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


  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.o
gcc -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
命令1
命令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: build
clean:
rm -rf Makefile objs
.PHONY: default clean
build:
$(MAKE) -f objs/Makefile
install:
$(MAKE) -f objs/Makefile install
modules:
$(MAKE) -f objs/Makefile modules
upgrade:
/usr/local/nginx/sbin/nginx -t
kill -USR2 `cat /usr/local/nginx/logs/nginx.pid`
sleep 1
test -f /usr/local/nginx/logs/nginx.pid.oldbin
kill -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系统中,许多应用程序以源代码的形式提供,这给安装带来了挑战。本文旨在介绍一种简化源码软件安装流程的方法,帮助用户更加轻松地完成安装。 ... [详细]
  • Linux环境下的PHP7安装与配置指南
    本文详细介绍了如何在Linux操作系统中安装和配置PHP7,包括检查当前PHP版本、升级PHP以及配置MySQL支持等步骤,适合后端开发者参考。 ... [详细]
  • 本文档提供了详细的MySQL安装步骤,包括解压安装文件、选择安装类型、配置MySQL服务以及设置管理员密码等关键环节,帮助用户顺利完成MySQL的安装。 ... [详细]
  • 深入探讨Web服务器与动态语言的交互机制:CGI、FastCGI与PHP-FPM
    本文详细解析了Web服务器(如Apache、Nginx等)与动态语言(如PHP)之间通过CGI、FastCGI及PHP-FPM进行交互的具体过程,旨在帮助开发者更好地理解这些技术背后的原理。 ... [详细]
  • Python安全实践:Web安全与SQL注入防御
    本文旨在介绍Web安全的基础知识,特别是如何使用Python和相关工具来识别和防止SQL注入攻击。通过实际案例分析,帮助读者理解SQL注入的危害,并掌握有效的防御策略。 ... [详细]
  • 我们正在使用GNU Make来构建我们的系统,在makefile文件的末尾,我们通过一个名为Makedepends的包含来生成一系列的.d文件。然而,当文件被删除或移动时,依赖关系会中断,我们需要寻找一种方法来优雅地处理这种情况。 ... [详细]
  • PHP 5.4.8 编译安装指南
    本文详细介绍了如何在Linux环境下编译安装PHP 5.4.8,并配置为FastCGI模式运行。包括所需依赖包的安装、源代码下载、编译配置及启动服务等步骤。 ... [详细]
  • 在一个婚礼上,有三对情侣即将步入婚姻的殿堂,分别由A、B、C三位男士与X、Y、Z三位女士组成。为了增添婚礼的乐趣,他们决定互相开玩笑,给出了误导性的信息。A声称他将与X结婚,X则表示她的未婚夫是C,而C说自己会与Z共结连理。然而,事后发现这些话都是假的。现在的问题是,真正的配对关系究竟是怎样的? ... [详细]
  • C基本语法C程序可以定义为对象的集合,这些对象通过调用彼此的方法进行交互。现在让我们简要地看一下什么是类、对象,方法、即时变量。对象-对象具有状态和行为 ... [详细]
  • 本文档旨在提供C语言的基础知识概述,涵盖常量、变量、数据类型、控制结构及函数定义等内容。特别强调了常量的不同类型及其在程序中的应用,以及如何正确声明和使用函数。 ... [详细]
  • Android 中的布局方式之线性布局
    nsitionalENhttp:www.w3.orgTRxhtml1DTDxhtml1-transitional.dtd ... [详细]
  • 本文将深入探讨C语言中的位操作符——按位与(&)、按位或(|)和按位异或(^),通过具体示例解释这些操作符如何在位级别上对数据进行操作。 ... [详细]
  • JUnit下的测试和suite
    nsitionalENhttp:www.w3.orgTRxhtml1DTDxhtml1-transitional.dtd ... [详细]
  • 汇编语言:编程世界的始祖,连C语言都敬畏三分!
    当C语言还在萌芽阶段时,它首次接触到了汇编语言,并对其简洁性感到震惊。尽管汇编语言的指令极其简单,但它却是所有现代编程语言的基础,其重要性不言而喻。 ... [详细]
  • c语言二元插值,二维线性插值c语言
    c语言二元插值,二维线性插值c语言 ... [详细]
author-avatar
wuzhi61448
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有