【正经教程】Linux基础(十二):源码安装与Tarball

写在前面:GNU General Public License (CPL)

GNU = GNU's is Not UNIX
取得软件与源代码:你可以根据自己的需求来使用这个自由软件;
复制:你可以自由地复制该软件;.
修改:你可以将取得的源代码进行程序修改工作,使之适合你的工作;.
再发行:你可以将你修改过的程序,再度自由发行,而不会与原先的编写者冲突;
回馈:你应该将你修改过的程序代码固馈于社区。但请特别圄意,你所修改的任何一个自由软件都不应该也不能这样
修改授权:你不能将一个G P L授权的自由软件,在你修改后而将它取消G P L授权
单纯销售:你不能单纯销售自由软件。

开放源码的软件安装与升级简介

make 与 configure

make

当执行make时,make会在当前的目录下查找Makefile(or makefile)这个文本文件,而Makefile里面则记录了源代码如何编译的详细信息。make会自动地判别源代码是否经过变动了,而自动更新执行文件,是软件工程师相当好用的一个辅助工具

通常软件开发商都会写一个检测程序来检测用户的操作环境,以及该操作环境是否有软件开发商所需要的其他功能,该检测程序检测完毕后,就会主动地建立这个Makefile的规则文件,通常这个检测程序的文件名为configure或是config

环境检测主要是看看以下这些内容:

是否有适合的编译器可以编译本软件的程序代码;
是否已经存在本软件所需要的函数库,或其他需要的依赖软件;
是否有适合的编译器可以编译本软件的程序代码;
是否已经存在本软件所需要的函数库,或其他需要的依赖软件;

![](/Users/ncc-1701-enterprise/Desktop/Screen Shot 2021-04-03 at 10.01.41.png)

实际上在源码编译过程中,用户要做的只有两件事

  1. 执行configure来生成Makefile文件
  2. 使用make依据Makefile中的内容来进行编译

Tarball软件

简而言之:这是个压缩了的软件包。解压之后就是你安装所需要的全部文件。
一般解压之后会有这些东西:

  • 源代码文件
    -检测程序文件(可能是configure或config等文件);
    -本软件的简易说明与安装说明(INSTALL或README)

不简而言之的说法如下:

所谓的Tarball文件,其实就是将软件的所有源代码文件先以tar打包,然后再以压缩技术来压缩,通常最常见的就是以gzip来压缩。因为利用了tar与gzip的功能,所以Tarball文件一般的扩展名就会写成.tar.gz或是简写为tgz,不过,近来由于bzip2与汩的压缩率较佳,所以Tarball渐渐地以bzip2及汩的压缩技术来替换gzip,因此文件名也会变成.tar.bz2、tar.xz之类的。

两大类安装方式:

1. 直接以源码通过编译来安装

(就是使用Tarball 基本等于全手动操作,自主性高但是麻烦)

2. 直接以变编译好的二进制程序来安装和升级

Linux发行版厂商能够针对自己的操作平台先进行编译等过程,再将编译好的二进制程序发布的话,那由于我的系统与该Linux发行版的环境是相同的,所以它所发布的二进制程序就可以在我的机器上面直接安装,省略了检测与编译等繁杂的过程。使用一些包管理软件基本是采用这种安装方法,省事不用动脑子。(包管理软件在下一章节)

Tarball的安装流程:

  1. 将Tarball由厂商的网站下载
  2. 将Tarball解开,产生很多的源代码文件;
  3. 开始以gcc进行源代码的编译(会产生目标文件object files);
  4. 然后以gcc进行函数库、主、子程序的链接,以形成主要的二进制文件;
  5. 将上述的二进制文件以及相关的配置文件安装至自己的主机上面

使用传统程序语言进行编译的简单例子

以C语言为例的简单说明

以c语言为例嘛。
.c →(编译) .o (object 目标文件) →(链接link) .out (可执行文件)
object目标文件还是挺有用的。可以防止在编译复杂项目时的多次重复编译。
![](/Users/ncc-1701-enterprise/Desktop/Screen Shot 2021-04-03 at 10.52.09.png)

调用外部函数:加入链接的函数库

  1. 编译时加入额外函数库的链接
    ![](/Users/ncc-1701-enterprise/Desktop/Screen Shot 2021-04-03 at 11.13.43.png)
  2. Include的搜索路径配置
    ![](/Users/ncc-1701-enterprise/Desktop/Screen Shot 2021-04-03 at 11.14.17.png)

用make进行宏编译

make的优势:

make好就好在它可以整合多个文件一起进行编译。自动化的识别好文件之间的关系和依赖性。

  • 简化编译时所需要执行的命令;
  • 若在编译完成之后,修改了某个源代码文件,则 ma e仅会针对被修改了的文件进行编译,其他的目标文件不会被修改;
  • 最后可以依照侬赖性来更新(update)执行文件。

makefile的基本语法与变量

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

下面给个简单的makefile实例

main: main.o haha.o sin_value.o cos_value.o
	gcc -o main main.o haha.o sin_value.o cos_value.o -lm
clean:
	rm -f main main.o haha.o sin_value.o cos_value.o

上面这段代码里有两个target,所以可以使用make mainmake clean以及make clean main (当然都是在makefile的目录下进行的操作)

注意事项

  • 命令行必须要以作为开头
  • 目标(target)与依赖文件之间需要:进行分隔
  • 在makefile中#代表注释

使用变量简化一下上面那段代码如下:

LIBS = -lm
OBJS = main.o haha.o sin_value.o cos_value.o
main: ${OBJS}
	gcc -o main ${OBJS} ${LIBS}
clean:
	rm -f main ${OBJS}

$@可以代表当前的target 所以上述代码还可以继续改

LIBS = -lm
OBJS = main.o haha.o sin_value.o cos_value.o
main: ${OBJS}
	gcc -o $@ ${OBJS} ${LIBS}
clean:
	rm -f main ${OBJS}  #但是这里的main作为target就要显示的写出了

【变量的一些语法要点:

  1. 变量与变量内容以[=]隔开,同时两边可以具有空格 ;
  2. 变量左边不可以有,例如上面范例的第一行LIBS左边不可以是 ;
  3. 变量与变量内容在[=]两边不能具有[: ];
  4. 在习惯上,变量最好是以[大写字母]为主;
  5. 运用变量时,以${变量}或$(变量)使用;
  6. 在该shell的环境变量可以被套用,例如提到的C F L A G S这个变量;
  7. 在命令行模式也可以设置变量 。

makefile文件内使用shell环境变量优先级的问题

![](/Users/ncc-1701-enterprise/Desktop/Screen Shot 2021-04-03 at 11.56.32.png)

Tarball的管理与建议

预装软件

  1. gcc或者cc
  2. make与autoconfig
  3. Kernal提供的Library以及相关的Include文件

Tarball安装的步骤

  1. 获取原始文件:将tarball在/usr/local/src目录下面解压缩
  2. 获取步骤流程:在新建目录下查看INSTALL以及README等相关文件内容
  3. 依赖属性软件安装:根据INSTALL和README的内容查看并安装好一些依赖的软件(非必要)
  4. 建立makefile:使用configure或者config自动检测操作环境,建立Makefile文件
  5. 编译:用make这个程序,并使用该目录下的Makefile作为它的参数配置文件,来进行make(编译or其他)的操作
  6. 安装:以make这个程序,并使用Makefile作为参数配置文件,依据install这个目标(target)的指定来安装到正确的路径

写成命令的形式大概是如下的流程

./configure --prefix=/path  #建立Makefile文件 --prefix指定未来的安装目录,默认目录是/usr/local
make clean		#不是必选,但是还是执行一下,免得有些该清理的文件没清理
make	#执行Makefile中的默认工作进行编译行为
make install		#根据Makefile中的install选项把编译完成的数据安装到默认目录中

Tarball安装的建议事项

Q1:为什么选择路径usr/local/src而不是路径usr/local来进行解压

主要是图一个便于删除管理。

![](/Users/ncc-1701-enterprise/Desktop/Screen Shot 2021-04-03 at 15.04.10.png)

And Some Tips....

由于Tarball在反安装上具有较高的难度(就是比较麻烦难整的意思)

![](/Users/ncc-1701-enterprise/Desktop/Screen Shot 2021-04-03 at 15.06.01.png)

配置安装目录的方式

./configure --prefix=/path #--prefix指定安装路径

其实Tarball就不怎么用得到。

但是作为Linux用户不应该有点爱折腾的本性吗。

使用patch对源码进行更新

得得得 我又看不进去这一部分了。就很郁闷。

其实我感觉patch用起来还挺麻烦的- - 算了总有一天我会遇到需要这个功能的场景的。

![](/Users/ncc-1701-enterprise/Desktop/Screen Shot 2021-04-03 at 15.24.14.png)

![](/Users/ncc-1701-enterprise/Desktop/Screen Shot 2021-04-03 at 15.24.58.png)

函数库管理

1.动态函数库与静态函数库

静态函数库特点:

![](/Users/ncc-1701-enterprise/Desktop/Screen Shot 2021-04-03 at 15.28.45.png)

动态函数库特点:

![](/Users/ncc-1701-enterprise/Desktop/Screen Shot 2021-04-03 at 15.29.16.png)

2.ldconfig与/etc/ld.so.conf

用来提高函数库的读写性能。

![](/Users/ncc-1701-enterprise/Desktop/Screen Shot 2021-04-03 at 15.32.21.png)

3.程序的动态函数库解析:ldd

ldd [-vdr] [filename]
-v  列出所有信息内容
-d  重新将数据有遗失的链接点显示出来
-r  将ELF有关的错误显示出来

检验软件的正确性

计算机指纹码

  • MD5指纹验证机制
  • SHA1加密机制
  • SHA-256加密算法
md5sum/shalsum [-bct] filename
md5sum/shalsum [--status|--warn] --check filename

应用方式。建立指纹码数据库,并利用脚本自动检测指纹码是否正确。

![](/Users/ncc-1701-enterprise/Desktop/Screen Shot 2021-04-03 at 16.27.01.png)

posted @ 2021-10-23 11:30  Craven胆小鬼  阅读(251)  评论(0)    收藏  举报