linux 软件的安装与Tarball

  1. Linux 系统上真正认识的可执行文件其实是二进制文件 ( binary program )
  2. shell scripts 只是利用 shell (例如 bash) 这支程序的功能进行一些判断式,而最终执行的除了 bash提供的功能外,它是呼叫一些已经编译好的二进制程序来执行的
  3. 小结:
    • 开放源码:就是程序代码,写给人类看的程序语言,但机器并不认识,所以无法执行
    • 编译程序:将程序代码转译成为机器看的懂得语言,就类似翻译者的角色
    • 可执行文件:经过编译程序变成二进制程序后,机器看的懂所以可以执行的档案。
    • 函式库:就类似子程序的角色,可以被呼叫来执行的一段功能函数。
  4. 什么是 make 与 configure
    • make 是一支程序,会去找 Makefile,Makefile 的规则档案由侦测程序主动建立,通常这支侦测程序的文件名为 configure 或者是 config 。
    • 侦测程序会侦测的数据大约有底下这些:
      • 是否有适合的编译程序可以编译本软件的程序代码;
      • 是否已经存在本软件所需要的函式库,或其他需要的相依软件;
      • 操作系统平台是否适合本软件,包括 Linux 的核心版本;
      • 核心的表头定义档 (header include) 是否存在 (驱动程序必须要的侦测)。
  5. 什么是 Tarball 的软件
    • Tarball 档案,其实就是将软件的所有原始码档案先以 tar 打包,然后再以压缩技术来压缩。
    • Tarball 是一个软件包, 你将他解压缩之后,里面的档案通常就会有:
      • 源代码档案;
      • 侦测程序档案 (可能是 configure 或 config 等档名);
      • 本软件的简易说明与安装说明 (INSTALL 或 README)
  6. 更新的方法可以分为两大类,分别是:
    • 直接以原始码透过编译来安装与升级;
    • 直接以编译好的 binary program 来安装与升级。例如yum、APT等。
  7. Tarball 是如何安装的:
    1. 将 Tarball 由厂商的网页下载下来;
    2. 将 Tarball 解开,产生很多的原始码档案;
    3. 开始以 gcc 进行原始码的编译 (会产生目标文件 object files);
    4. 然后以 gcc 进行函式库、主、子程序的链接,以形成主要的 binary file;
    5. 将上述的 binary file 以及相关的配置文件安装至自己的主机上面。
      • 3, 4 步骤当中,我们可以透过 make 这个指令的功能来简化他,
      • 由于我们的原始码档案有时并非仅只有一个档案,所以我们无法直接进行编译。 这个时候就需要先产生目标文件,然后再以连结制作成为 binary 可执行文件。
  8. gcc 的简易用法 (编译、参数与链结)
    • 仅将原始码编译成为目标文件,并不制作链接等功能:
      • [root@www ~]# gcc -c hello.c.
    • 在编译的时候,依据作业环境给予优化执行速度
      • [root@www ~]# gcc -O hello.c -c
    • 在进行 binary file 制作时,将连结的函式库与相关的路径填入
      • [root@www ~]# gcc sin.c -lm -L/usr/lib -I/usr/include
        • -lm 指的是 libm.so 或 libm.a 这个函式库档案;
          • -l :是『加入某个函式库(library)』的意
          • m :则是 libm.so 这个函式库,其中, lib 与扩展名(.a 或 .so)不需要写
        • -L 后面接的路径是刚刚上面那个函式库的搜寻目录;
        • -I 后面接的是原始码内的 include 档案之所在目录。
    • 将编译的结果输出成某个特定档名
      • [root@www ~]# gcc -o hello hello.c
    • 在编译的时候,输出较多的讯息说明
      • [root@www ~]# gcc -o hello hello.c -Wall
  9. 用 make 进行宏编译
    1. 例: 先创建makefile规则文件
      • vim 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
      • 执行make程序 make
    2. make 有这些好处:
      • 简化编译时所需要下达的指令;
      • 若在编译完成之后,修改了某个原始码档案,则 make 仅会针对被修改了的档案进行编译,其他的 object file 不会被更动;
      • 最后可以依照相依性来更新 (update) 执行档。
    3. 基本的 makefile 规则是这样的:
      • 标的(target): 目标文件1 目标文件2
      • gcc -o 欲建立的执行文件 目标文件1 目标文件2
        • 『命令行必须要以 tab 按键作为开头』才行
      • 例:1. 先编辑 makefile 来建立新的规则,此规则的标的名称为 clean :
        • [root@www ~]# vi 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
      •      2. 以新的标的 (clean) 测试看看执行 make 的结果:
        • [root@www ~]# make clean <==就是这里!透过 make 以 clean 为标的
        • rm -rf main main.o haha.o sin_value.o cos_value.o
      •  makefile 里面就具有至少两个标的,分别是 main 与 clean
      • 例: 利用shell script简化makefile
        • [root@www ~]# vi 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}
        • 变量的基本语法为:
          • 变量与变量内容以『=』隔开,同时两边可以具有空格;
          • 变量左边不可以有 ,例如上面范例的第一行 LIBS 左边不可以是
          • 变量与变量内容在『=』两边不能具有『:』
          • 在习惯上,变数最好是以『大写字母』为主;
          • 运用变量时,以 ${变量} 或 $(变量) 使用;
          • 在该 shell 的环境变量是可以被套用的,例如提到的 CFLAGS 这个变数!
          • 在指令列模式也可以给予变量
  • make 指令列后面加上的环境变量为优先;
  • makefile 里面指定的环境变量第二;
  • shell 原本具有的环境变量第三。
  • $@:代表目前的标的(target)
Tarball 安装的基本步骤
  1. 取得原始档:将 tarball 档案在 /usr/local/src 目录下解压缩;
  2. 取得步骤流程:进入新建立的目录底下,去查阅 INSTALL 与 README 等相关档案内容 (很重要的步骤!);
  3. 相依属性软件安装:根据 INSTALL/README 的内容察看并安装好一些相依的软件 (非必要);
  4. 建立 makefile:以自动侦测程序 (configure 或 config) 侦测作业环境,并建立 Makefile 这个档案;
  5. 编译:以 make 这个程序并使用该目录下的 Makefile 做为他的参数配置文件,来进行 make (编译或其他) 的动作;
  6. 安装:以 make 这个程序,并以 Makefile 这个参数配置文件,依据 install 这个标的 (target) 的指定来安装到正确的路径!
    • 大部分的 tarball 软件之安装的指令下达方式:
      • ./configure
      • make clean
      • make
      • make install ,将上一个步骤所编译完成的数据给他安装到预定的目录中
      • make distclean  ,类似make clean,但同时也将configure生成的文件全部删除掉,包括Makefile
安装的软件放置
  • 建议大家将自己安装的软件放置在 /usr/local 下,至于原始码 (Tarball)则建议放置在 /usr/local/src (src 为 source 的缩写)底下啊。
  • Linux distribution 默认的安装软件的路径
    • /etc/httpd  配置文件
    • /usr/lib  函式库
    • /usr/bin  执行档
    • /usr/share/man 联机帮助档
  • 以 tarball 来安装时:
    • /usr/local/etc
    • /usr/local/bin
    • /usr/local/lib
    • /usr/local/man
  • 如果你在安装的时候选择的是单独的目录:---------方便删除,但指令的路径要加到PATH当中
    • /usr/local/apache/etc
    • /usr/local/apache/bin
    • /usr/local/apache/lib
    • /usr/local/apache/man
为了方便 Tarball 的管理,通常鸟哥会这样建议使用者:
  1. 最好将 tarball 的原始数据解压缩到 /usr/local/src 当中;
  2. 安装时,最好安装到 /usr/local 这个默认路径下;
  3. 考虑未来的反安装步骤,最好可以将每个软件单独的安装在 /usr/local 底下;
  4. 为安装到单独目录的软件之 man page 加入 man path 搜寻:
    • 如果你安装的软件放置到 /usr/local/software/ ,那么 man page 搜寻的设定中,可能就得要在/etc/man.config 内的 40~50 行左右处,写入如下的一行:MANPATH /usr/local/software/man
动态与静态函式库
  1. 静态函式库的特色:
    • 扩展名:(扩展名为 .a),这类的函式库通常扩展名为 libxxx.a 的类型;
    • 编译行为:这类函式库在编译的时候会直接整合到执行程序当中,所以利用静态函式库编译成的档案会比较大一些喔;
    • 独立执行的状态:这类函式库最大的优点,就是编译成功的可执行文件可以独立执行,而不需要再向外部要求读取函式库的内容 (请参照动态函式库的说明)
    • 升级难易度:在升级方面,只要函式库升级了,所有将此函式库纳入的程序都需要重新编译!
  2. 动态函式库的特色:
    • 扩展名:(扩展名为 .so),这类函式库通常扩展名为 libxxx.so 的类型;
    • 编译行为:动态函式库在编译的时候,在程序里面只有一个『指向 (Pointer)』的位置而已
    • 独立执行的状态:函式库档案『必须要存在』才行,而且,函式库的『所在目录也不能改变』。
    • 升级难易度:当函式库升级后,执行档根本不需要进行重新编译的行为,档名相同即可。
  3. 绝大多数的函式库都放置在:/usr/lib, /lib 目录下!kernel 的函式库放在/lib/modules 里面
ldconfig 与 /etc/ld.so.conf
  • 将常用到的动态函式库先加载内存当中 (快取, cache),增进动态函式库的读取速度!
  1. 首先,我们必须要在 /etc/ld.so.conf 里面写下『 想要读入高速缓存当中的动态函式库所在的目录』,注意喔, 是目录而不是档案;
  2. 接下来则是利用 ldconfig 这个执行档将 /etc/ld.so.conf 的资料读入快取当中;
  3. 同时也将数据记录一份在 /etc/ld.so.cache 这个档案当中吶!
    • ldconfig [-f conf] [ -C cache]
    • ldconfig [-p]
      • -f conf :那个 conf 指的是某个文件名,也就是说,使用 conf 作为 libarary 函式库的取得路径,而不以 /etc/ld.so.conf 为默认值
      • -C cache:那个 cache 指的是某个文件名,也就是说,使用 cache 作为快取暂存 的函式库资料, 而不以 /etc/ld.so.cache 为默认值
      • -p :列出目前有的所有函式库资料内容 (在 /etc/ld.so.cache 内的资料
程序的动态函式库解析: ldd  -----------------判断某个可执行的 binary 档案含有什么动态函式库
  1. ldd [-vdr] [filename]
    • -v :列出所有内容信息;
    • -d :重新将资料有遗失的 link 点秀出来!
    • -r :将 ELF 有关的错诨内容秀出来!
  2. 例:范例一:找出 /usr/bin/passwd 这个档案的函式库数据
    • [root@www ~]# ldd /usr/bin/passwd
  3. 范例二:找出 /lib/libc.so.6 这个函式的相关其他函式库!
    • [root@www ~]# ldd -v /lib/libc.so.6
检验软件正确性
  1. md5sum/sha1sum [-bct] filename
  2. md5sum/sha1sum [--status|--warn] --check filename
    • -b :使用 binary 的读档方式,默认为 Windows/DOS 档案型态的读取方式;
    • -c :检验档案指纹;
    • -t :以文字型态来读取档案指纹。
  3. Linux 系统上为你的这些重要的档案进行指纹数据库的建立
    • /etc/passwd
    • /etc/shadow( 假如你不讥用户改密码了 )
    • /etc/group
    • /usr/bin/passwd
    • /sbin/portmap
    • /bin/login ( 这个也很容易被骇! )
    • /bin/ls
    • /bin/ps
    • /usr/bin/top
编译安装报错尝试解决办法:
如果你已经知道你要找什么,你可以让strace只跟踪一些类型的系统调用。例如,你需要看看在configure脚本里面执行的程序,你需要监视的系统调 用就是execve。让strace只记录execve的调用用这个命令:

strace -f -o configure-strace.txt -e execve ./configure

 

转载于:https://www.cnblogs.com/guojintao/p/5749723.html

你可能感兴趣的:(linux 软件的安装与Tarball)