原始码与Tarball套件管理员七.docx
- 文档编号:6271024
- 上传时间:2023-01-05
- 格式:DOCX
- 页数:14
- 大小:953.14KB
原始码与Tarball套件管理员七.docx
《原始码与Tarball套件管理员七.docx》由会员分享,可在线阅读,更多相关《原始码与Tarball套件管理员七.docx(14页珍藏版)》请在冰豆网上搜索。
原始码与Tarball套件管理员七
一、原始码与Tarball套件管理员
1.什么是开放源码、编译器与可执行档
在Linux系统上面,一个档案能不能被执行看的是有没有可执行的权限,不过Linux系统上真正认识的可执行文件其实是二进制档案(binaryfile),例如/usr/bin/passwd,/bin/touch这些档案即为binary的可执行文件。
那么shellscripts也是可以执行的了!
其实shellscripts只是利用shell(如bash)这支程序的功能进行一些判断式,而最终执行的除了bash提供的功能外,仍是呼叫一些已经编译好的binary档案来执行的!
我们可以利用file这个指令来查看一个档案是否为binary。
从上面可看到,如果是binaryfile且是可执行的时候,它就会显示执行文件类别(ELF32-bitLSBexecutable),同时会说明是否使用动态函式库(sharedlibs),而一般的script,它就会显示出textexecutables之类的字样!
syslog的数据显示出Bourne-Again…那一行,是因为你的scripts上面第一行有宣告#!
/bin/bash的缘故。
那我们如何做出这样的一支binary的程序呢?
首先,必须要写程序,可用一般的文字处理器写。
比如用vi,写完的程序就是所谓的原始程序代码。
这个程序代码档案其实就是一般的纯文字文件(textfile)。
完成编写后,再将这个档案【编译】成操作系统看的懂得binaryfile。
经过编译器的编译之后,就会产生一支可以执行的binaryfile。
以Linux上标准的C语言编译器gcc这支程序来编译,就可制作一支可执行的binaryfile了。
整个流程有点像这样:
事实上,在编译的过程中,还会产生所谓的目标文件(Objectfile),这些档案是以*.o的附文件名样式存在的!
此外,我们可能会在程序当中【引用、呼叫】其它的外部子程序,或者是利用其它套件提供【函数功能】,这时,就必须在编译的过程中,将该函式库给他加进去,编译器就可将所有的程序代码与函式库作为一个连结(Link)以产生正确的执行档。
2.什么是函式库
先举个例子来说,在Linux上,系统通常已经提供一个可进行身体验证的模块,称为PAM,这个PAM提供的功能让很多的程序在被执行的时候,除了可验证使用者登入的信息外,还可将身份确认的数据记录在登录文件(logfile)里面,以方便系统管理员追踪!
那如果我编写具有身份认证功能的程序时,直接引用该PAM的功能就好啦,就不需要重新设计认证机制了。
除此之外,我们的Linux核心(kernel)也提供了相当多的函式库来给硬件开发者利用。
函式库又分为动态与静态函式库,这两个东东的分别我们在后面的章节再加以说明。
我们以一个简单的流程图,来示意一支有呼叫外部函式库的程序的执行情况。
如果要在程序里加入引用的函式库,就需要如图一,亦即在编译的过程当中,就需要加入函式库的相关设定。
事实上,Linux的核心提供很多的相关函库与外部参数,这些核心功能在设计硬件的驱动程序的时候是相当有用的信息,这些核心相关信息大多放置在/usr/include,/lib,/usr/lib里面。
3.什么是make与configure
事实上,使用类似gcc的编译器来进行编译的过程并不简单,因为除了每个主程序与子程序均需要写上一笔编译过程的指令外,还需要写上最终的连结程序。
我们可以使用make这个指令的相关功能来进行编译过程的指令简化。
当执行make时,make会在当时的目录下搜寻makefile(ormakefile)这个文字文件,而makefile里则记录了原始码如何编译的详细信息。
make会自动的判别原始码是否经过变动了,而自动更新执行档。
通常软件开发商都会写一支侦测程序来侦测使用者的作业环境,以及该作业环境是否有软件开发商所需要的其它功能,该侦测程序侦测完毕后,就会主动的建立这个makefile的规则档案了。
通常这支侦测程序的文件名为configure或者config。
4.什么是Tarball的套件
所谓的Tarball档案,就是将套件的所有原始码档案先以tar打包,然后再以压缩技术来压缩,最常见的就是以gzip来压缩了。
因为利用了tar与gzip的功能,所以tarball档案一般的附档名就会写成*.tar.gz或者是简写为*.tgz了。
Tarball套件解压缩后,里面的档案通常会有原始程序代码档案、侦测程序档案(可能是configure或者config等档名)、本套件的简易说明与安装说明(INSTALL或README)。
5.如何安装与升级套件
为何要升级套件,原因可能有底下这些:
●需要新的功能,但旧有主机的旧版套件并没有,所以需要升级到新版的套件
●旧版本的套件上面可能有安全上的顾虑,所以需要升级到新版的套件
●旧版的套件执行效能不彰,或者执行的能力不能让管理者满足
6.印出HelloWorld
以C语言来写第一支程序,在屏幕上输出【HelloWorld】!
(一个先确认系统已经安装了gcc)。
那个hello.c是原始码,而gcc是编译器,a.out是编译成功的可执行binaryfile。
如果想要产生目标文件(objectfile)进行其实的动作(在较大折套件中,需要使用多个目标文件来进行相关的连结),而且执行档的档名也不要用预设的a.out。
7.子程序的编译
如果在一个主程序里又呼叫了另一个子程序,因为可以简化整个程序的易读性。
下面例子,以thanks.c这个主程序去呼叫thanks_2.c这个子程序,写法很简单:
如果你更新了thanks_2.c的内容,则你只要重新编译thanks_2.c来产生新的thanks_2.o,再以连结制作出新的binary可执行档即可!
而不必重新编译其它没有更动过的原始码档案。
此外,想让程序在执行时具有较好的效能,或者是其它的除错功能,可在编译的过程中加入适当的参数:
8.加入连结的函式库
如果想要计算机数学公式,如计算机出三角形函数的sin(90度角),而大多数的程序语言都是使用径度而不是【角度】,180度角约等于3.14径度!
我们先直接编译看看:
上面的错误信息,【undefinedreferencetosin】,说的是【没有sin的相关定义参考值】,这是因为C语言中的sin函式是写在libm.so这个函式库中,而我们并没有在原始码里加入相关的说明,所以就需要在编译与连结的时候将这个函式库给它连结进执行档案中:
由于Linux预设是将函式库放置在/lib与/usr/lib中,所以没有写–L/lib与–L/usr/lib也没有关系。
此外,在sin.c中第一行【#include
9.gcc的用法
以下为gcc常见的参数,让大家来了解原始码的各项功能:
10.make的基本语法与变量
基本的makefile规则是这样的:
它的规则基本上是这样的:
在makefile当中的#代表批注;
】隔开。
如果想有两个以上的执行动作时,如下达一个指令就直接清除掉所有的目标文件与执行文件:
如此,我们的makefile里至少要有两个标的,分别是main与clean,如果想要建立main的话,输入【makemain】,如果想要清除有的没的,输入【makeclean】即可。
而如果想要先清除目标文件再编译main的话,就可输入:
【makecleanmain】,如下:
但是,你是否觉得,makefile里重复的数据这么多。
因此我们可再由shellscript学到的【变量】来简化makefile:
与bashshellscript的语法有点不太相同,变量的基本语法为:
A.变量与变量内容以【=】隔开,同时两边可以具有空格
B.变量左边不可以有
C.变量与变量内容在【=】两边不能具有【:
】;
D.变量最好是以【大写字母】为主;
E.运用变量时,以${变量}或$(变量)使用;
F.在该shell的环境变量是可以被套用的,例如提到的CFLAGS这个变量
G.在指令列模式也是可以给予变量
由于gcc在进行编译的行为时,会主动地去读取CFLAGS这个变量,所以,你可直接在shell定义出这个环境变量,也可在makefile档案中去定义,更可以在指令列中给予这个东东:
也可以这样:
万一这个CFLAGS的内容在指令列与makefile里面并不相同时,以哪个方式输入的为主?
环境变量的取用的规则是这样的:
●make指令列后面加上的环境变量为优先
●makefile里面指定的环境变量第二;
●shell原本具有的环境变量第三
此外,还有一些特殊的变量需要了解:
【$@】代表目前的标的(target),所以也可将makefile改成:
11.Tarball安装的基本步骤
Tarball整个安装的基础动作大多是这样的:
1、将Tarball档案在/usr/local/src目录下解压缩
2、进入新建立的目录底下,查阅INSTALL与README等相关档案内容
3、根据INSTALL/README的内容查看并安装好一些相依的套件(非必要)
4、以自动侦测程序(configurea或config)侦测作业环境,并建立makefile这个档案
5、以make这个程序并使用该目录下的makefile做为它的参数设定档,来进行make(编译或其它)的动作
6、以make这个程序,并以makefile这个参数设定档,依据INSTALL这个标的(target)的指定来安装到正确的路径!
注意第二步骤,通常在每个软件在释出的时候,都会附上INSTALL或README这种档名的说明档,它们通常会记录这个软件的安装要求、软件的工作项目、与软件的安装参数设定及技巧等,只要仔细读完,基本上,要安装好tarball的档案就不会有什么大问题。
我们底下了解一下大部分的Tarball软件安装的指令下达方式:
1、./configure
这个步骤就是在建立makefile档案,程序开发者会写一支scripts来检查你的Linux系统、相关的套件等等,另外,这个步骤的相关信息应该要参考一下该目录下的INSTALL或README相关的档案。
基本上,这个步骤完成后会建立(或修改)一个makefile。
2、makeclean
make会读取makefile中关于clean的工作。
希望执行一下这个步骤,因为在进行编译时,会产生一些*.o的档案。
我们称这些档案为objectfile,然而由于我们可能已经修改了部分的参数,因此该档案的编译结果事实上应该有所不同!
为了避免前一次留下的数据可能影响到这次编译的结果,通常可进行这个步骤。
3、make
make会依据makefile中的预设工作进行编译的行为。
编译的工作主要是进行gcc来将原始码编译成可执行的objectfiles,但这些objectfiles通常还要一些函式库之类的link后,才能产生一个完整的执行档!
使用make是将原始码编译成可执行档,而这个可执行档会放置在目前所在目录下,尚未被安装到预定安装的目录中
4、makeinstall
通常这是最后的安装步骤了,make会依据makefile这个档案里关于install的项目,将上一步骤所编译完成的数据给它安装到预定的目录中。
上面的步骤是一步一步来进行的,只要其中一个步骤无法成功,后续的步骤就完全没有办法进行。
12.Tarball套件安装的建议事项(移除、升级?
)
为了方便Tarball的管理,通常我们会建议使用者:
1、最好将Tarball的原始数据解压缩到/usr/local/src当中;
2、安装时,最好安装到/usr/local这个预设路径下
3、考虑未来的反安装步骤,最好将每个套件单独地安装在/usr/local下:
例如安装rp-pppoe-2.6.tar.gz时,则可以指定该套件要安装于/usr/local/rp-pppoe当中,如此一来,该套件会将所有的数据都写入/usr/local/rp-pppoe当中,未来如果要移除该套件,只要将该目录删除即可视为成功的移除了。
4、加上manpath
不过单独安装某个套件在某一特定路径下的作法,会导致有manpage的时候,使用预设的MANPATH会找不到相关的说明档案内容。
就必须将manpage的路径加到/etc/man.config档案中了。
否则使用man也查询不到指令的使用方法。
以上面的例子为例,如果是安装了/usr/local/rp-pppoe当中,通常manpage会放在/usr/local/rp-pppoe/man当中,所以,你就必须要在/etc/man.config里差不多40~50行左右的地方,加入底下这一行:
MANPATH/usr/local/rp-pppoe/man
13.利用patch更新原始码
所谓的【更新原始码】常常只有更改部分档案的小部分内容而已,我们将旧版的原始数据改写成新版的版本,就能直接编译了,而不需要将全部的新版Tarball重新下载。
在正则表达式的时候有一个比对两个档案的指令diff,它可将【两个档案之间的差异性列出来】,然后再以相关的指令将旧版的档案更新。
就是patch指令了。
很多套件开发商在更新了原始码之后,几乎都会释放所谓的patchfile,也就是直接将原始码update而已。
假设有两个档案,分别是expatch.old与expatch.new,它们的内容是这样的:
两个档案的不同点在于:
假如我以【diff–cexpatch.oldexpatch.new】以及上面显示的信息,做成一个档案,内容是这样的:
我们将以patch来进行更新,将expatch.old更新到expatch.new看看。
Patch的基本语法是这样的:
Patch–p数字 注意那个-p数字,那是与patch_file里面列出的文件名有关的信息。 假如在patch_file第一行写的是这样: ***/home/guest/example/expatch.old 那么当我下达【patch–p0 另外,如果你是以patch更新原始码,你可能必须要重新编译,并且重新install才算成功更新。 因为patch的功能主要只是更新原始码档案而已。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 原始 Tarball 套件 管理员
![提示](https://static.bdocx.com/images/bang_tan.gif)