Linux——Tarball的管理与建议

xiaoxiao2025-08-15  22

Tarball的安装时可以跨平台的,C语言的程序代码在各个平台上是互通的。

1、使用原始码管理软件所需要的基础软件

(1)gcc或cc等C语言编译程序(conplier)

(2)make与autoconfig等软件

(3)需要kernel提供的libary以及相关的include文件

 

· 如果是要安装 gcc 等软件开发工具,请使用『 yum groupinstall "Development Tools" 』 · 若待安装的软件需要图形接口支持,一般还需要『 yum groupinstall "X Software Development" 』 · 若安装的软件较旧,可能需要『 yum groupinstall "Legacy Software Development" 』

2、tarball安装的基本步骤

 

(1)取得原始档:将 tarball 文件在 /usr/local/src 目录下解压缩; (2)取得步骤流程:进入新建立的目录底下,去查阅 INSTALL 与 README 等相关文件内容 (很重要的步骤!); (3)相依属性软件安装:根据 INSTALL/README 的内容察看并安装好一些相依的软件 (非必要); (4)建立 makefile:以自动侦测程序 (configure 或 config) 侦测作业环境,并建立 Makefile 这个文件; (5)编译:以 make 这个程序并使用该目录下的 Makefile 做为他的参数配置文件,来进行 make (编译或其他) 的动作; (5)安装:以 make 这个程序,并以 Makefile 这个参数配置文件,依据 install 这个目标 (target) 的指定来安装到正确的路径! 注意到上面的第二个步骤,通常在每个软件在释出的时候,都会附上 INSTALL 或者是 README 这种档名的说明档,这些说明档请『确实详细的』 阅读过一遍,通常这些文件会记录这个软件的安装要求、软件的工作项目、 与软件的安装参数设定及技巧等,只要仔细的读完这些文件,基本上,要安装好 tarball 的文件,都不会有什么大问题啰。至于 makefile 在制作出来之后,里头会有相当多的目标 (target),最常见的就是 install 与 clean 啰!通常『make clean』代表着将目标文件 (object file) 清除掉,『make』则是将原始码进行编译而已。 注意喔!编译完成的可执行文件与相关的配置文件还在原始码所在的目录当中!因此,最后要进行『make install』来将编译完成的所有都给他安装到正确的路径去,这样就可以使用该软件

tarball 软件之安装的指令下达方式: (1)./configure 这个步骤就是在建立 Makefile 这个文件啰!通常程序开发者会写一支 scripts 来检查你的 Linux 系统、相关的软件属性等等,这个步骤相当的重要, 因为未来你的安装信息都是这一步骤内完成的!另外,这个步骤的相关信息应该要参考一下该目录下的 README 或 INSTALL 相关的文件! (2)make clean make 会读取 Makefile 中关于 clean 的工作。这个步骤不一定会有,但是希望执行一下,因为他可以去除目标文件!因为谁也不确定原始码里面到底有没有包含上次编译过的目标文件 (*.o) 存在,所以当然还是清除一下比较妥当的。 至少等一下新编译出来的执行档我们可以确定是使用自己的机器所编译完成的嘛! (3) make make 会依据 Makefile 当中的预设工作进行编译的行为!编译的工作主要是进行 gcc 来将原始码编译成为可以被执行的 object files ,但是这些 object files 通常还需要一些函式库之类的 link 后,才能产生一个完整的执行档!使用 make 就是要将原始码编译成为可以被执行的可执行文件,而这个可执行文件会放置在目前所在的目录之下, 尚未被安装到预定安装的目录中; (4) make install 通常这就是最后的安装步骤了,make 会依据 Makefile 这个文件里面关于 install 的项目,将上一个步骤所 编译完成的数据给他安装到预定的目录中,就完成安装啦! 如果安装成功, 并且是安装在独立的一个目录中,例如 /usr/local/packages 这个目录中好了,那么你就必需手动的将这个软件的 man page 给他写入 /etc/man_db.conf 里面去。

3、tarball软件安装的建议事项

在预设情况下,原来的Linux distribution释放安装的软件大多是在/usr里面,用户自行安装的软件则建议放在/usr/local中,原始码则建议放在/usr/local/src(src是source的缩写)

一般默认安装软件所使用的路径

/etc/httpd    #配置文件

/usr/lib    #函式库

/usr/bin    #执行档

/usr/share/man    #联机帮助文档

如果将安装位置放置在预设的/usr/local里面,则以上数据就会被分别放置在                                                                                     /usr/local/etc    /usr/local/lib    /usr/local/bin    /usr/local/man

如果选择的是为该软件建置的单独目录,则以上数据就会被分别放置在(以apache为例)                                                     /usr/local/apache    /usr/local/apache/lib    /usr/local/apache/bin    /usr/local/apache/man

软件放置在单一目录下时,移除时使用,命令:$  rm -rf /usr/local/apache即可移除。当我们在执行某些指令的时候,与该指令是否在PATH环境变量所记录的路径有关,以上为例,/usr/local/apache/bin肯定不在PATH里面,所以执行apache是就得使用绝对路径,或者将/usr/local/apache/bin加入到PATH里面,/usr/local/apache/man也需要加入到man page的搜寻路径当中。

使用tarball的建议:(1)最好将 tarball 的原始数据解压缩到 /usr/local/src 当中; (2)安装时,最好安装到 /usr/local 这个默认路径下; (3)考虑未来的反安装步骤,最好可以将每个软件单独的安装在 /usr/local 底下; (4)为安装到单独目录的软件之 man page 加入 man path 搜寻:如果你安装的软件放置到 /usr/local/software/ ,那么 man page 搜寻的设定中,可能就得要在/etc/man_db.conf 内的 40~50 行左右处,写入如下的一行: MANPATH_MAP    /usr/local/software/bin    /usr/local/software/man

4、范例

以ntp(时间服务器)为例。对软件的要求如下:

· 假设 ntp-4.*.*.tar.gz 这个文件放置在 /root 这个目录下; · 原始码请解开在 /usr/local/src 底下; · 我要安装到 /usr/local/ntp 这个目录中; <1>解压缩下载的 tarball ,并参阅 README/INSTALL 文件

[root@study ~]# cd /usr/local/src <==切换目录 [root@study src]# tar -zxvf /root/ntp-4.2.8p3.tar.gz <==解压缩到此目录 ntp-4.2.8p3/ <==会建立这个目录喔! ntp-4.2.8p3/CommitLog ....(底下省略).... [root@study src]# cd ntp-4.2.8p3 [root@study ntp-4.2.8p3]# vi INSTALL <==记得 README 也要看一下!

<2>检查 configure 支持参数,并实际建置 makefile 规则文件

[root@study ntp*]# ./configure --help | more <==查询可用的参数有哪些  --prefix=PREFIX install architecture-independent files in PREFIX --enable-all-clocks + include all suitable non-PARSE clocks:  --enable-parse-clocks - include all suitable PARSE clocks: # 上面列出的是比较重要的,或者是你可能需要的参数功能! [root@study ntp*]# ./configure --prefix=/usr/local/ntp \ > --enable-all-clocks --enable-parse-clocks <==开始建立 makefile checking for a BSD-compatible install... /usr/bin/install -c checking whether build environment is sane... yes ....(中间省略).... checking for gcc... gcc <==也有找到 gcc 编译程序了! ....(中间省略).... config.status: creating Makefile <==现在知道这个重要性了吧? config.status: creating config.h config.status: creating evconfig-private.h config.status: executing depfiles commands config.status: executing libtool commands

一般来说 configure 设定参数较重要的就是 --prefix=/path 了,--prefix 后面接的路径就是『这个软件未来要安装到那个目录去?』如果你没有指定 --prefix=/path 这个参数,通常预设参数就是/usr/local 至于其他的参数意义就得要参考 ./configure --help 了! 这个动作完成之后会产生 makefile 或 Makefile 这个文件。当然啦,这个侦测检查的过程会显示在屏幕上,特别留意关于 gcc 的检查,还有最重要的是最后需要成功的建立起 Makefile 才行! <3>最后开始编译与安装噜!

[root@study ntp*]# make clean; make [root@study ntp*]# make check [root@study ntp*]# make install # 将数据给他安装在 /usr/local/ntp 底下

5、利用patch更新原始码

以上述用的main为例

<1>测试旧版程序的功能

[root@study ~]# tar -zxvf main-0.1.tgz [root@study ~]# cd main-0.1 [root@study main-0.1]# make clean main [root@study main-0.1]# ./main version 0.1 Please input your name: VBird Please enter the degree angle (ex> 90): 45 Hi, Dear VBird, nice to meet you. The Sin is: 0.71 The Cos is: 0.71

<2>查阅patch file 的内容

[root@study main-0.1]# vim ~/main_0.1_to_0.2.patch diff -Naur main-0.1/cos_value.c main-0.2/cos_value.c ##注意 --- main-0.1/cos_value.c 2015-09-04 14:46:59.200444001 +0800 +++ main-0.2/cos_value.c 2015-09-04 14:47:10.215444000 +0800 @@ -7,5 +7,5 @@ {  float value; ....(底下省略)....

上面表格内有个底线的部分,那代表使用 diff 去比较时,被比较的两个文件所在路径,这个路径非常的重要喔! 因为 patch 的基本语法如下: patch -p 数字 < patch_file 特别留意那个『 -p 数字』,那是与 patch_file 里面列出的文件名有关的信息。假如在 patch_file 第 一行写的是这样: *** /home/guest/example/expatch.old那么当我下达『 patch -p0 < patch_file 』时,则更新的文件是『 /home/guest/example/expatch.old 』,如果『 patch -p1 < patch_file』,则更新的文件为『home/guest/example/expatch.old』,如果『patch -p4 < patch_file』则更新『expatch.old』,也就是说, -pxx 那个 xx 代表『拿掉几个斜线(/)』的意思!根据刚刚上头的资料,我们可以发现比较的文件是在 main-0.1/xxx 与main-0.2/xxx , 所以说,如果你是在 main-0.1 底下,并且想要处理更新时,就得要拿掉一个目录 (因为并没有 main-0.2 的目录存在, 我们是在当前的目录进行更新的!),因此使用的是 -p1  所以: <3>更新原始码,并且重新编译程序!

[root@study main-0.1]# patch -p1 < ../main_0.1_to_0.2.patch patching file cos_value.c patching file main.c patching file Makefile patching file sin_value.c # 请注意,鸟哥目前所在目录是在 main-0.1 底下喔!注意与 patch 文件的相对路径! # 虽然有五个文件,但其实只有四个文件有修改过喔!上面显示有改过的文件! [root@study main-0.1]# make clean main [root@study main-0.1]# ./main version 0.2 Please input your name: VBird Please enter the degree angle (ex> 90): 45 Hi, Dear VBird, nice to meet you. The sin(45.000000) is: 0.71 The cos(45.000000) is: 0.71 # 你可以发现,输出的结果中版本变了,输出信息多了括号 () 喔! [root@study main-0.1]# make install <==将他安装到 /usr/local/bin 给大家用 cp -a main /usr/local/bin [root@study main-0.1]# main <==直接输入指令可执行! [root@study main-0.1]# make uninstall <==移除此软件! rm -f /usr/local/bin/main

只要下载 patch file 就能够对你的软件原始码更新了!只不过更新了原始码并非软件就更新!你还是得要将该软件进行编译后,才会是最终正确的软件喔! 因为 patch 的功能主要仅只是更新原始码文件而已!切记切记!此外,如果你 patch 错误呢?没关系的!我们的 patch 是可以还原的啊!透过『 patch -R < ../main_0.1_to_0.2.patch 』就可以还原  

转载请注明原文地址: https://www.6miu.com/read-5034887.html

最新回复(0)