Linux 学习笔记 -- 第五部分 Linux 系统管理员 -- 第22章 软件安装:源码与 Tarball

软件安装:源码与 Tarball


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


什么是开放源码、编辑程序与可执行文件


在 Linux 系统上面,一个文件能不能被执行看的是有没有可执行的那个权限(具有 x 权限),不过,
Linux 系统上真正是别的可执行文件其实是二进制文件。


file /bin/bash
file /etc/init.d/syslog
如果是二进制程序而且是可以执行的时候,它就会显示可执行文件类(ELF 32-bit LSB executable),
同时会说明是否使用共享库 (shared libs),而如果是一般的 script,那它就会显示出 test executables
之类的字样。


开放源码:就是程序代码,写给人类看的程序语言,但机器并不认识,所以无法执行
编译程序:将程序代码转译成为机器看得懂的语言,就类似翻译者的角色
可执行文件:经过编译程序变成二进制程序后机器看得懂所以可以执行的文件


什么是函数库

函数库:类似子程序的角色,可以被调用来执行的一段功能函数





什么是 make 与 configure

程序源代码,由官方网站下载 --> configure 检测程序找到所需函数库、编译器及其他资料 --> 
由 configure 主动建立 Makefile --> 调用 make 根据 Makefile 的定义,设用源代码、函数库、编译器来编译 -->
调用系统既有的 gcc 编译器、驱动函数库、其他相关软件 --> 最终生成软件 (含设置文件与可执行文件)

什么是 Tarball 的软件


Tarball 是一个软件包,将它解压缩之后,里面的文件通常就会有:
1.源代码文件
2.检测程序文件 (可能是 configure 或 config 等文件名)
3.本软件的简易说明与安装说明 (INSTALL 或 README)


如何安装与升级软件


更新的方法可以分为两大类,分别是:
直接以源码通过编译来安装与升级
直接以编译好的二进制程序来安装与升级



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


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


单一程序:打印 Hello world


vim hello.c
#include <stdio.h>
int main(void)
{
print("Hello World\n");
}


gcc hello.c
ll hello.c a.out
./a.out
======================================================
gcc -c hello.c
ll hello*
gcc -o hello hello.o
ll hello*
./hello
======================================================


主程序、子程序链接:子程序的编译

vim thanks.c
#include <stdio.h>
int main(void)
{
printf("Hello World\n");
thanks_2();
}
vim thanks_2.c
#include <stdio.h>
void thanks_2(void)
{
printf("Thank you!\n");
}
======================================================
gcc -c thanks.c thanks_2.c
ll thanks*
gcc -o thanks thanks.o thanks_2.o
ll thanks*
./thanks
======================================================
gcc -O -c thanks.c thanks_2.c (-O 为生成优化的参数)
gcc -Wall -c thanks.c thanks_2.c (-Wall 为产生更详细的编译过程信息)


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

vim sin.c
#include <stdio.h>
int main(void)
{
float value;
value = sin(3.14/2);
printf("%f\n",value);
}
=======================================================
gcc sin.c (报错 undefined reference to 'sin')

编译时加入额外函数库链接的方式:
gcc sin.c -lm -L/lib -L/usr/lib
-l 是加入某个函数库 (library) 的意思
-m 则是 libm.so 这个函数库,其中,lib 与扩展名 (.a 或 .so) 不需要写
-lm 表示我要的函数库 libm.so (或 libm.a) 请到 /lib 或 /usr/lib 里面搜索


gcc sin.c -lm -I/usr/include (定义出要读取的 include 文件放置的目录)


gcc 的简易用法 (编译、参数与链接)

gcc -c hello.c (仅将源码编译成为目标文件,并不制作链接等功能)

gcc -O hello.c -c (会自动的生成 hello.o 这个文件,并且进行优化)


gcc sin.c -lm -L/usr/lib -I/usr/include (这个命令较常执行在最终链接成 binary file 的时候)
-lm 指的是 libm.so 或 libm.a 这个函数库文件
-L 后面接的路径是刚才上面那个函数库的搜索目录
-I 后面接的是源码内的 include 文件的所在目录


gcc -o hello hello.c (将编译的结果输出成某个特定文件名)

gcc -o hello hello.c -Wall (在编译的时候,输出较多的信息说明)


用 make 进行宏编译
gcc -c main.c 
gcc -c haha.c
gcc -c sin_value.c
gcc -c cos_value.c

gcc -o main main.o haha.o sin_value.o cos_value.o -lm -L/usr/lib -L/lib
./main
=======================================================================
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

rm -f main*.o
make
make

make 有这些好处:
1.简化编译时所需要执行的命令
2.若在编译完成之后修改了某个源码文件,则 make 仅会针对被修改了的文件进行编译,
 其他的目标文件不会被更改
3.最后可以依照相依性来更新 (update) 执行文件


makefile 的基本语法与变量

目标 (target) : 目标文件1 目标文件2
<tab> gcc -o 欲新建的可执行文件 目标文件1 目标文件2
命令行必须要以 tab 按键作为开头才行,它的规则基本上是这样的:
1.在 makefile 当中的 # 代表批注
2.<tab>需要在命令行 (例如 gcc 这个编译程序命令) 的第一个字符
3.目标 (target) 与相关文件 (就是目标文件) 之间需以":"隔开

vim makefile
main: mian.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


make clean
=============================================================
make main
=============================================================
make clean main
=============================================================
vim 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}

与 bash shell script 的语法有点不太相同,变量的基本语法为:
1.变量与变量内容以“=”隔开,同时两边可以具有空格;
2.变量左边不可以有<tab>,例如上面范例的第一行 LIBS 左边不可以是<tab>
3.变量与变量内容在“=”两边不能具有“:”;
4.在习惯上,变量最好是以“大写字母”为主;
5.运用变量时,以 ${变量} 或 $(变量) 使用;
6.在该 shell 的环境变量是可以被套用的,例如提到的 CFLAGS 这个变量;
7.在命令行模式也可以定义变量


CFLAGS="-Wall" make clean main
=============================================================
vim makefile
LIBS = -lm
OBJS = main.o haha.o sin_value.o cos_value.o
CFLAGS = -Wall
main: ${OBJS}
gcc -o main ${OBJS} ${LIBS}
clean:
rm -f main ${OBJS}

环境变量取用的规则:
1.make 命令行后面加上的环境变量为第一优先;
2.makefile 里面指定的环境变量第二优先;
3.shell 原本具有的环境变量第三优先。

$@:代表目前的目标 (target)
vim makefile
LIBS = -lm
OBJS = main.o haha.o sin_value.o cos_value.o
CFLAGS = -Wall
main: ${OBJS}
gcc -o $@ ${OBJS} ${LIBS}
clean:
rm -f main ${OBJS}


Tarball 的管理与建议
Tarball的安装是可以跨平台的,因为 C 语言的程序代码在各个平台上面是可以共通的,只是
需要的编译程序可能并不相同而已。


使用源码管理软件所需要的基础软件
1.gcc 或 cc 等 C 语言编译程序 (compiler)
2.make 及 autoconfig 等软件
3.需要 Kernel 提供的 Library 以及相关的 Include 文件


通过 yum 的软件组安装功能,你可以这样做:
1.如果是要安装 gcc 等软件开发工具,请使用 yum groupinstall "Development Tools"
2.若待安装的软件需要图形接口支持,一般还需要 yum groupinstall "X Software Development"
3.若安装的软件较旧,可能需要 yum groupinstall "Legacy Software Development"

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) 的指定来
 安装到正确的路径。


命令执行方式:
1. ./configure
2. make clean
3. make
4. make install


一般 Tarball 软件安装的建议事项 (如何删除、升级)
通常我们会建议大家将自已安装的软件放置在 /usr/local 下,至于源码(Tarball)则建议放置在 /usr/local/src
(src 为 source 的缩写)下面。


为了方便 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


一个简单的范例 (利用 ntp 来示范)
解压缩下载的 tarball,并参阅 README/INSTALL 文件
cd /usr/local/src 
tar -zxvf /root/ntp-4.2.4p7.tar.gz <== 解压缩到此目录
cd ntp-4.2.4p7
vim INSTALL 
vim README
  # 特别看一下 28 行到 54 行之间的安装简介!可以了解安装的流程!


检查 configure 支持参数,并实际生成 makefile 规则文件
./configure --help | more <== 查询可用的参数有哪些
./configure --prefix=/usr/local/ntp --enable-all-clocks --enable-parse-clocks <== 开始建立 makefile
一般来说 configure 较重要的就是那个 --prefix=/path 了, --prefix 后面接的路径表示这个软件将来要安装
到哪个目录去,如果你没有指定 --prefix=/path 这个参数,通常默认参数就是 /usr/local。


最后开始编译与安装
make clean; make
make check
make install


利用 patch 更新源码

测试旧版程序的功能
tar -zxvf main-0.1.tgz
cd mian-0.1
make clean main
./main


查阅 patch file 内容
vim ~/main_0.1_to_0.2.patch


更新源码,并且重新编译程序
patch -p1 < ../main_0.1_to_0.2.patch
make clean main
./main
make install
main
make uninstall


只不过更新了源码并非软件就更新了,要将该软件进行编译后才会是最终正确的软件。


函数库管理
函数库是很重要的一个项目,因为很多的软件之间都会互相使用彼此提供的函数库来进行特殊功能的运行。


动态与静态函数库
不同版本的内核提供的函数库差异性是挺大的,所以 kernel 2.4.xx 版本的系统不要想将内核换成 
2.6.xx,很容易由于函数库的不同而导致很多原本可以执行的软件无法顺利运行。


ldconfig 与  /etc/ld.so.conf

将动态函数库加载到高速缓存当中:
1.首先,我们必须要在 /etc/ld.so.conf 里面写下想要读入高速缓存当中的动态函数库所
 在的目录,注意,是目录而不是文件;
2.接下来则是利用 ldconfig 这个可执行文件将 /etc/ld.so.conf 的数据读入缓存当中
3.同时也将数据记录一份在 /etc/ld.so.cache 这个文件当中

ldconfig [-f conf] [-C cache]
-f conf 那个 conf 指的是某个文件名,也就是说,使用 conf 作为 library
函数库的取得路径,而不以 /etc/ld.so.conf 为默认值


-C cache 那个 cache 指的是某个文件名,也就是说,使用 cache 作为缓存暂存
的函数库资料,而不以 /etc/ld.so.cache 为默认值

-p 列出目前的所有函数库数据数据内容 (/etc/ld.so.cache 内的数据)


vim /etc/ld.so.conf
/usr/lib/mysql <== 新增


ldconfig


ldconfig -p


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


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

ldd /usr/bin/password (找出 /usr/bin/password 这个文件的函数库数据)

ldd -v /lib/libc.so.6 (找出 /lib/libc.so.6 这个函数的相关其它函数库)

检验软件正确性


md5sum/sha1sum [-bct] filename
md5sum/sha1sum [--status|--warn] --check filename
-b 使用二进制的读取方式,默认为 Widnows/DOS 文件类型的读取方式
-c 检验文件指纹
-t 以文本类型来读取文件指纹


wget http://ftp.twaren.net/Linux/CentOS/5.3/isos/i386/Cent0S-5.3-i386-netinstall.iso
md5sum CentOS-5.3-i386-netinstall.iso
sha1sum CentOS-5.3-i386-netinstall.iso
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值