走进Linux_软件安装

引:当你拿到一台新电脑的第一反应是什么,当然是装软件,然后好好玩呀!服务器也是如此,所以你必须掌握软件的安装。

源码安装

开放源码的软件安装相关概念

Linux上几乎所有的软件都经过了GPL授权,因此几乎所有的软件都会提供源码。
而一个软件要在Linux上执行,必须是二进制文件,因此当我们拿到软件源码后,需要将它编译成二进制文件才能在Linux上运行。

开放源码、编译程序、可执行文件

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

函式库

类似子程序的角色,可以被呼叫来执行的一段功能函数。

make与configure

  1. configure:侦测用户操作环境,是否支持软件的运行,侦测完毕生成makefile文件
    • 是否有适合的编译程序可以编译本软件的程序代码
    • 是否已经存在本软件所需要的函数库,或其他需要的相依软件
    • 操作系统平台是否适合本软件,包括 Linux 的核心版本
    • 核心的头文件定义档 (header include) 是否存在 (驱动程序必须要的侦测)。
  2. make:make是一个程序,会去找makefile文件,然后执行编译。

tarball软件

tarball文件其实就是将软件的源码先以tar打包,然后再压缩。其实就是一个软件包。通常解压缩之后会存在源代码文件、侦测程序文件(configure)、本软件的简易说明与安装说明(README)。

Tarball的安装的基本步骤

  1. 取得源文件:将tarball文件在/usr/local/src目录解压缩
  2. 取得步骤流程:进入新建立的目录下面,去查阅INSTALL与README等相关文件内容(很重要)
  3. 相关属性软件安装:根据INSTALL/README的内容查看并安装好一些相关的软件
  4. 建立makefile文件:以自动检测程序(configure)检测操作环境,并建立Makefile文件
  5. 编译:以make这个程序并使用该目录下得Makefile作为它的参数配置文件,来进行make的操作
  6. 安装:以make这个程序,并以Makefile这个参数配置文件,依据install这个目标(在Makefile文件中会有多个操作目标,如clean)的指定来安装到正确地路径。

Tarball软件安装的建议事项

在默认情况下,原本的Linux distribution发布安装的软件大多是在/usr里面的,而自行安装的软件则建议放置在/usr/local里面。

  • linux distribution默认的安装软件的路径如下,以httpd为例:
    • /etc/httpd(配置文件)
    • /usr/lib(函数库)
    • /usr/bin(可执行文件)
    • /usr/share/man(在线帮助文档)
  • tarball安装,默认放在/usr/local,如下目录:(升级,删除不方便)
    • /usr/local/etc
    • /usr/local/bin
    • /usr/local/lib
    • /usr/local/man
  • tarball安装,但是单一软件都在同一个目录下,以apache为例:(利于删除,升级)
    • /usr/local/apache/etc
    • /usr/local/apache/bin
    • /usr/local/apache/lib
    • /usr/local/apache/man

当然,实际安装的时候还是得视该软件的Makefile里头的install目标信息才能知道安装路径情况。

为了方便Tarball的管理,这样建议:

  1. 最好将tarball的原始数据解压缩到/usr/local/src当中
  2. 安装时,最好安装到/usr/local这个默认路径下
  3. 考虑将来的删除,最好可以将每个软件单独安装在/usr/local下面
  4. 为安装到单独目录的软件的man page加入到man path搜索,即在/etc/man.config增加一行。

简单安装范例(ntp时间服务器)

假设这个软件在/opt下,解压到/usr/local/src,并安装到/usr/local/ntp目录下。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
cd /usr/local/src //切换目录

tar -zxvf /opt/ntp-4.2.4p7.tar.gz //解压缩到此目录

cd ntp-4.2.4p7/

vi INSTALL // 查阅安装信息

// 检查configure支持参数,并实际生成makefile规则文件(很重要)
./configure --help | more

./configure --prefix=/usr/local/ntp \
--enable-all-clocks --enable-parse-clocks //开始建立makefile(设置了安装目录等)


// 开始编译并安装
make clean; make
make check
make install

利用patch更新源码

1
2
3
4
5
6
7
8
9
10
// 基本语法
1. patch -p 数字 < patch_file 更新
2. patch -R < patch_file 还原更新

假如patch_file第一行是***/home/guest/example/expatch.old,
如果执行patch -p0 < patch_file,则更新的文件是/home/guest/example/expatch.old,
如果执行patch -p4 < patch_file,则更新的文件是expatch.old,
基本语法中数字是指拿掉第几个下划线之前的东西(包括下划线)。

在更新之后,还是需要重新编辑,这才是最终的正确的软件。

RPM安装

RPM和DPKG

当前Linux上有两款主流的软件管理程序,分别是:RPM和DPKG。
这两款软件均提供在线升级机制。

  • RPM

    RPM全称为Red Hat Package Manager,是Red Hat公司研发的Linux软件管理程序。目前CentOS、SuSE、Fedora等操作系统使用它。
    RPM使用YUM进行在线升级。

  • DPKG
    dpkg由Debian Linux开发,目前使用该软件的操作系统有Ubuntu、B2D等。
    dpkg使用apt-get进行在线升级。

PS:什么是“在线升级机制”?
一个软件往往会依赖其他软件的一些功能,那么在安装过程中,只有确保一个软件所依赖的所有软件都被安装后,该软件才能被正确安装。
而在线升级机制能够在软件安装过程中,若发现该软件的依赖软件尚未安装,则会自动从互联网中下载所依赖的软件。这就是在线升级机制

RPM默认安装的路径

/etc 一些设置文件放置的目录,例如/etc/crontab
/usr/bin 一些可执行文件
/usr/lib 一些程序使用的动态函数库
/usr/share/doc 一些基本的软件使用手册与帮助文档
/usr/share/man 一些man page文件

RPM安装

因为安装软件是root的工作,所以你必须是root用户才能使用rpm命令,使用范例如下(例子为安装rp-pppoe-3.5-32.1.i386.rpm):

1
2
// 安装软件是,显示安装信息与进度
rpm -ivh rp-pppoe-3.5-32.1.i386.rpm

RPM的升级与更新

范例如下:

1
2
3
4
5
6
7
rpm -Uvh 需要升级的软件名

-Uvh:若待升级的软件尚未安装,则直接安装

rpm -Fvh 需要升级的软件名

-Fvh:若待升级的软件尚未安装,则该软件不会被安装

RPM查询

查询的信息分为两类,一类是查询已被安装的软件的信息(由/var/lib/rpm提供),另一类是查询尚未被安装的软件安装包的信息。 第一类信息通过rpm -q查询,第二类信息通过rpm -qp查询。范例如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
// 1. 找出你的Linux是否安装logrotate这个软件
rpm -q logrorate

// 2. 列出logrotate这个软件所提供的所有目录与文件
rpm -ql logrorate

// 3. 列出logrotate这个软件的相关文件说明
rpm -qi logrorate

// 4. 列出logrotate这个软件的设置文件与帮助文件
rpm -qc logrorate
rpm -qd logrorate

// 5. 列出logrotate这个软件所依赖软件的文件
rpm -qR logrorate

// 6. 列出该文件属于哪一个软件
rpm -qf /bin/sh

卸载RPM与重建数据库

卸载一个软件非常方便,通过-e即可删除。但一个软件所提供的动态函数库被其他软件引用,那么该软件将无法卸载,除非将引用该函数库的所有软件都卸载后才能卸载。范例如下:

1
2
3
4
5
6
1. 找出与pam有关的软件名称,并尝试删除pam这个软件
rpm -qa | grep pam
rpm -e pam(出错,因为你需要先删除依赖它的软件)

2. 删除pam-devel软件
rpm -e pam-devel (成功)

当/var/lib/rpm内的文件发生损坏时,可以通过如下命令重建数据库修复:

1
rpm --rebuilddb

YUM安装

RPM虽然省去了编译过程,并且提供数据库存储软件的信息,但仍然需要我们手动下载RPM安装包,而YUM的出现解决了这一问题。较多软件的RPM安装包都存放在了YUM Server上,只要我们的计算机能连互联网,就能使用yum自动下载RPM安装包并安装软件。

yum功能

yum的使用非常简单,就是通过yum这个命令,用法范例如下:

  1. 查询功能

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    // 1. 搜索磁盘阵列相关的软件
    yum search raid

    // 2. 找出mdadm这个软件的功能如何
    yum info mdadm

    // 3. 列出yum服务器上面提供的所有软件名称
    yum list

    // 4. 列出目前服务器上可供本机升级的软件有哪些
    yum list updates

    // 5. 列出提供passwd这个文件的软件有哪些
    yum provides passwd
  2. 安装/升级功能

    1
    2
    // 1. 安装/升级pam-devel
    yum install/update pam-devel
  3. 删除功能

    1
    2
    // 1. 删除pam-devel
    yum remove pam-devel

管理的选择:RPM or Tarball

建议如下:

  1. 优先选择原厂的RPM功能
  2. 选择软件官方网站发布的RPM或者是提供的容器网址(yum server)
  3. 利用Tabball安装特殊软件(没有RPM)
  4. 用Tarball测试新版软件

RPM与Tarball各有优点,但是如果有RPM的话,优先选择RPM。如果无法解决依赖性问题,那就选tarball。

参考

  1. 《鸟哥的Linux私房菜》