文章目录
任务的最后一天了T-T
学习任务5: LPI-5 编译源代码和管理软件包
Part2 从源代码编译到应用程序
假设你拿到一个应用程序想安在系统上,但是没有最新版本的打包格式,只有源代码,这时候就需要从源代码来编译了.
下载
首先下载源代码,可能是.tar.gz、tar.Z、tar.bz2 或 .tgz
这种压缩包,安装的程序可能依赖别的程序,先确保其他都安装好了再进行安装。
解压
以 .tar.gz、.tar.Z 或 .tgz
结尾:
tar xzvf archivename.tar.gz
对xzvf的解释(x 用于解压缩,z 用于 gzip 解压,v 用于显示详细信息 — 打印解压缩的文件名,而 f 意味着文件名将接着在命令行上出现)
如果希望验证 tar 包被正确地组装在一起并会创建一个主目录来放源代码,可以这样查看内容:
$ tar tzvf archivename.tar.gz | more
(t
用于显示压缩文档的文本清单。不进行解压缩)
如果压缩文档清单的左边没有列出公共目录,则要创建一个新的目录,将 tar 包移至该目录下,进入该目录,这时再解压缩这个 tar 包。不这样做的话,你会面对一堆乱麻!
解压bzip2
压缩包
.tar.bz2
格式的压缩文档是用bzip2
压缩的,这种压缩效果比gzip
好得多,唯一的不足之处是压缩和解压缩的速度较慢,并且在运行时, bzip2 比 gzip 消耗更多的内存。
因为bzip2
越来越受欢迎,所以很多Linux分发版都有经过补丁修正的tar
版本,传递一个参数y
或者i
都可以告诉tar
,这是bzip2格式的包,要用bzip2自动解压。
判断是不是有补丁修正过的tar:
fine~我没有,那就用另一种办法:
bzip2管道
第一步,先看bzip2的内容:
$ cat archive.tar.bz2 | bzip2 -d | tar tvf - | most
第二步,解压内容:
$ cat archive.tar.bz2 | bzip2 -d | tar xvf -
如果解压过程中系统提示找不到bzip2
,可能因为你没有装bzip2
检测源代码
解包之后,可以进入主目录查看里面的内容,最好是能找到与安装有关的文档。一般是主源代码目录的 README
或 INSTALL
文件,还可以查找 README.platform
和 INSTALL.platform
文件,这里的 platform 是您的特定操作系统名称。
配置
现在,许多源代码在主源代码目录中包含配置脚本。这个脚本是用来设置源代码以使它能在你系统上正确编译。这个配置脚本在运行时会探测系统以确定系统性能,然后创建制作文件(Makefile),其中包含在您的系统上构建和安装源代码的指令。
配置脚本几乎总是被命名为configure
。如果在主源代码目录中找到配置脚本,那么它可以供你使用。如果没有发现配置脚本,那么你的源代码可能带有一个设计用来跨越不同系统工作的标准制作文件 — 这意味着可以略过以下配置步骤。
使用配置
在运行配置脚本之前,最好是先熟悉它。输入./configure --help
,可以查看程序能够使用的所有不同配置选项。你所看到的选项,特别是在 --help
打印输出的顶部列出的那些项,都是几乎可以在每个配置脚本中找到的标准选项。在结尾部分列出的选项通常与您正尝试编译的特定软件包相关。查看它们并注意那些您希望启用或禁用的选项。
–prefix选项
大多数基于 GNU autoconf 的配置脚本都有 --prefix 选项
来允许您控制程序的安装位置。缺省情况下,大多数源代码安装时都用 /usr/local
前缀。这意味着二进制文件最终在 /usr/local/bin
中,手册页则在/usr/local/man
中,等等。/usr/local
通常用于存储你自己编译的程序。
使用prefix
如果想把源代码安装在别的地方,如果是./usr
,则要向配置脚本传递--prefix=/usr
,同样如果是/opt
,则输入--prefix=/opt
FHS
一个源代码压缩文档可能有许多没有遵守 Linux 文件系统层次结构标准(FHS)的安装路径,好在配置脚本不仅允许更改安装前缀,而且允许我们更改各个系统部件(如手册页)的安装位置。
为了使源代码包符合 FHS,你几乎总要向配置命令行添加 --mandir=/usr/share/man
和 --infodir=/usr/share/info
。
一旦已经检查了各种配置选项并确定了要使用的选项,就可以运行配置脚本了。
运行:
$ ./configure <options>
or
$ ./configure
or
$ ./configure --prefix=/usr --mandir=/usr/share/man --infodir=/usr/share/info --with-threads
config.cache
配置完以后,配置脚本把配置数据存在config.cache
,这个文件和配置脚本本身都在同一目录中。如果在更新系统配置后需要再次运行 ./configure,请确保执行rm config.cache
命令;否则配置脚本将只使用旧的设置而不重新检查系统。
配置脚本和制作文件
配置完脚本,就可以编译运行了,用make
来完成,如果软件包含配置脚本,那运行的时候会创建一些定制的文件,文件会告诉make怎么构建源码以及如何安装所产生的二进制文件、手册页和支持文件。
制作文件介绍
每个含有源文件的目录通常都有一个制作文件(makefile),另外主源代码目录中还有一个制作文件。autoconf 生成的制作文件含有确定如何构建某些目标的指示信息(正式名称是规则)。make 指出所有规则运行的顺序。
调用make
直接在当前目录输入make
即可,make 程序随即将在当前目录中查找并解释名为 makefile
或 Makefile
的文件。如果只输入“make”本身 ,那么它将构建缺省目标。有些 makefile 没有缺省目标,因此要指定一个以使编译得以开始:$ make all
安装
编译好之后还有更重要的就是安装,需要将程序的所有组件从源代码目录复制到文件系统上适当的、“活动的”位置。例如,需要将所有的二进制文件复制到 /usr/local/bin
,将所有的手册页安装到 /usr/local/man
,等等。
(注意:安装软件以前,要成为 root 用户)
make install
安装源代码比较简单。只需在主源代码目录中输入:# make install
如果没有指定--prefix
选项,则很有可能有相当多的文件和目录将被复制到 /usr/local
目录
运行
安装完以后就可以运行了,可以通过输入以下命令来阅读这个程序的手册页:$ man programname,
,启动程序:$ programname
可能会遇到的一些问题
- 遗漏一些库:configure失败,往往是因为某个库没有安装
- 库太旧了甚至可能太新了,或者系统不匹配
Part3 软件包管理概念
除了源代码安装外,还可以直接安装更新和卸载软件包,与直接从源代码安装相比,软件包管理有明显优势:
- 易于安装和卸载
- 易于更新已安装的软件包
- 保护配置文件
- 轻松跟踪已安装文件
安装rpm
使用-i命令就可以了,
# rpm -i xsnow-1.41-1.i386.rpm
重装rpm
如果不小心破坏了原来的程序,你可能想重装一下软件,首先得把旧的那个rpm删掉,用rpm -e
命令除去,再重新安装,但是卸载的时候可能它跟别的程序有依赖关系,卸不了,那就得->
强制安装rpm
使用--force
重新安装
# rpm -ivh --force xsnow-1.41-1.i386.rpm
还有另一个不太推荐的卸载办法:
–nodeps
这一选项取消了 rpm 的内部相关性检查,所以在大多数情况下不推荐使用。然而,它偶尔会有用处:
# rpm -e --nodeps xsnow
# rpm -ivh xsnow-1.41-1.i386.rpm
xsnow ##################################################
也可以用来安装软件:
# rpm -ivh --nodeps xsnow-1.41-1.i386.rpm
xsnow ##################################################
更新软件包
用rpm -U
来更新安装:
# rpm -Uvh xsnow-1.42-1.i386.rpm
xsnow ##################################################
有一个小窍门:我们几乎不使用 rpm -i,因为如果系统上不存在 rpm,则 ==rpm -U ==会安装一个,如果在命令行指定多个软件包,其中有些软件包当前已安装而有些则没有,那么这一选项会特别有用。
# rpm -Uvh xsnow-1.42-1.i386.rpm xfishtank-2.1tp-1.i386.rpm
xsnow ##################################################
xfishtank ##################################################
rpm -q
安装rpm
需要完整的文件名,但是除去rpm只要文件名称就可以了。这是因为 rpm 维护一个当前已安装软件包的内部数据库,所以可以通过名称来引用安装的软件包。
例如,查询 rpm 安装的是什么版本的 Xsnow:
# rpm -q xsnow
xsnow-1.41-1
还可以用 rpm -qi
查询有关 Xsnow rpm 的更多信息:
# rpm -qi xsnow
Name : xsnow Relocations: (not relocateable)
Version : 1.41 Vendor: Dan E. Anderson http://www.dan.drydog.com/
Release : 1 Build Date: Thu 10 May 2001 01:12:26 AM EDT
Install date: Sat 02 Feb 2002 01:00:43 PM EST Build Host: danx.drydog.com
Group : Amusements/Graphics Source RPM: xsnow-1.41-1.src.rpm
Size : 91877 License: Copyright 1984, 1988, 1990, 1993-1995, 2000 by Rick Jansen. Allows packaging & necessary changes for Unix/Linux distributions.
Packager : Dan E. Anderson http://dan.drydog.com/
URL : http://www.euronet.nl/~rja/Xsnow/
Summary : An X Window System based dose of Christmas cheer.
Description :
The Xsnow toy provides a continual gentle snowfall, trees, and Santa
Claus flying his sleigh around the screen on the root window.
Xsnow is only for the X Window System, though; consoles just get coal.
用 rpm -ql
列出给定的已安装软件包所拥有的文件:
# rpm -ql xsnow
/etc/X11/applnk/Games/xsnow.desktop
/usr/X11R6/bin/xsnow
/usr/X11R6/man/man1/xsnow.1x.gz
结合 -c
选项或 -d
选项,可以将输出分别限制为配置文件或文档文件.
# rpm -qlc xsnow
/etc/X11/applnk/Games/xsnow.desktop
# rpm -qld xsnow
/usr/X11R6/man/man1/xsnow.1x.gz
查询软件包
用rpm -qp
命令,允许查询一个 rpm 文件而不是查询数据库
# rpm -qp xsnow-1.41-1.i386.rpm
xsnow-1.41-1
# rpm -qpl xsnow-1.41-1.i386.rpm
/etc/X11/applnk/Games/xsnow.desktop
/usr/X11R6/bin/xsnow
/usr/X11R6/man/man1/xsnow.1x.gz
# rpm -qplc xsnow-1.41-1.i386.rpm
/etc/X11/applnk/Games/xsnow.desktop
# rpm -qpld xsnow-1.41-1.i386.rpm
/usr/X11R6/man/man1/xsnow.1x.gz
学习任务6: LPI-7 Connect the Internet
介绍 TCP/IP 和以太网 Linux 联网的基本原理,说明如何使用 inetd 和 xinetd 超级服务器,提供保护 Linux 系统的重要技巧,还将说明如何设置和使用 Linux 打印服务器。
Part 1 TCP/IP联网
每个以太网LAN的以太网卡会有一个唯一的硬件地址:00:01:02:CB:57:3C
;为了能让以太网LAN使用TCP/IP通信,还要将每个网卡与IP地址进行关联,
在 Linux 下有一个将 IP 地址与以太网接口关联的简便方法:
ifconfig eth0 192.168.1.1 broadcast 192.168.1.255 netmask 255.255.255.0
ifconfig
命令被用来关联 eth0(也就是 eth0 的硬件地址)和 192.168.1.1
IP 地址。另外,还指定了各种其它与 IP 相关的信息,包括广播地址(192.168.1.255)和网络掩码(255.255.255.0)。当命令完成时,eth0 接口将被启用并具有关联的 IP 地址。
使用ifconfig -a
可以通过输入 ifconfig -a 查看当前正在运行的所有网络设备
可以看到一个已配置的 enp0s3 接口和 lo(localhost)接口。lo 接口是特殊的虚拟接口,它经过配置以使您在即便没有网络的情况下也可以在本地运行 TCP/IP 应用程序。
当所有网络接口都设置好并与相应的 IP 地址关联后,以太网网络也可以用来传送 TCP/IP 流量。LAN 上的系统现在可以用 IP 地址相互寻址,像 ping、telnet 和 ssh 这样的命令将在机器间正常工作。