一、软件包的安装
程序员首先通过开发工具开发出软件来,最初的称为源码包,就是人能看的明白的。然后编译成机器可以看懂的二进制软件。而rpm就是红帽公司研发的适合自动化安装软件的一套软件管理工具。包含软件的存放位置,库文件、头文件,配置文件、文件间依赖关系等各种关系的管理工作。
1、软件包的组成部分
二级制程序:
安装位置:/bin /sbin、/usr/bin、/usr/sbin、/usr/local/bin、/usr/local/sbin。
库文件:也可以是可执行程序,可以是被其他程序调用的。在开发中通常称为函数,公共函数越多(库文件),软件包的适应性越强,包越小。
安装位置:/lib、/usr/lib、/usr/local/lib
配置文件:/etc/
帮助文件/手册:/usr/share/doc/
2、软件包管理工具(rpm):
文件清单
文件放置路径
提供的功能说明
依赖关系
3、rpm:package manager 软件包管理器
具有的功能:打包、安装、查询、卸载、升级、校验。
打包:就是将源码编译成可以安装、执行的软件包。
4、编译软件包依赖的环境:
4.1编译器:gcc,g++
提供编译环境,通常需要指明二进制文件的路径及库文件的路径
4.2库:/etc/ld.so.conf、/etc/ld.so.conf.dman
# MANPATH /usr/libman
3.5添加头文件,使用ln -s 创建软连接到系统头文件目录/etc/include/中。
[root@37-test ~]# ln -sv /usr/local/nagios/include/ /usr/include/nagios
"/usr/include/nagios" -> "/usr/local/nagios/include/"
[root@mail ~]# ln -sv /usr/local/courier-authlib/include/* /usr/include/
"/usr/include/courier_auth_config.h" -> "/usr/local/courier-authlib/include/courier_auth_config.h"
"/usr/include/courierauthdebug.h" -> "/usr/local/courier-authlib/include/courierauthdebug.h"
"/usr/include/courierauth.h" -> "/usr/local/courier-authlib/include/courierauth.h"
"/usr/include/courierauthsaslclient.h" -> "/usr/local/courier-authlib/include/courierauthsaslclient.h"
"/usr/include/courierauthsasl.h" -> "/usr/local/courier-authlib/include/courierauthsasl.h"
"/usr/include/courierauthstaticlist.h" -> "/usr/local/courier-authlib/include/courierauthstaticlist.h"
知识点:
查看命令所依赖的库文件有哪些?ldd
[root@37-test ~]# ldd /bin/ls
linux-vdso.so.1 => (0x00007fff787b1000)
libselinux.so.1 => /lib64/libselinux.so.1 (0x00007fa143af6000)
librt.so.1 => /lib64/librt.so.1 (0x00007fa1438ee000)
libcap.so.2 => /lib/libcap.so.2 (0x00007fa1436e9000)
libacl.so.1 => /lib64/libacl.so.1 (0x00007fa1434e1000)
libc.so.6 => /lib64/libc.so.6 (0x00007fa14314d000)
libdl.so.2 => /lib64/libdl.so.2 (0x00007fa142f48000)
/lib64/ld-linux-x86-64.so.2 (0x00007fa143d27000)
libpthread.so.0 => /lib64/libpthread.so.0 (0x00007fa142d2b000)
libattr.so.1 => /lib64/libattr.so.1 (0x00007fa142b26000)
查看运行命令的执行路径是什么?hash
[root@37-test ~]# hash
hits command
1 /usr/bin/ldd
1 /usr/local/nagios/bin/nrpe
1 /bin/vi
2 /usr/bin/man
ldconfig -v
重新搜索系统中的所有库文件,并生成/etc/ld.so.cache。
[root@37-test ~]# ldconfig -v
ldconfig: /etc/ld.so.conf.d/kernel-2.6.32-642.11.1.el6.x86_64.conf:6: duplicate hwcap 1 nosegneg
ldconfig: 无法对 /usr/lib64/mysql 进行 stat 操作: 没有那个文件或目录
ldconfig: 多次给出路径“/usr/local/lib”
ldconfig: 多次给出路径“/usr/local/lib”
ldconfig: 多次给出路径“/usr/lib”
ldconfig: 多次给出路径“/usr/lib64”
/opt/glibc/lib:
libnss_nisplus.so.2 -> libnss_nisplus-2.14.so
ld-linux-x86-64.so.2 -> ld-2.14.so
七、编译源码格式的rpm包-SRPM
打包(rpm源代码包制作成rpm包,一般格式为:filename.src.rpm)
包制作过程是根据.spec文件来完成的。
源软件包经过编译后存放在/usr/src/目录下,并且一般在正确编译后会仅仅留下SRPMS里面的经过编译的软件包。
1、解压安装src.rpm包,有些安装需要创建指定的用户名。
[root@37-test ~]# rpm -ivh mingetty-1.00-3.src.rpm
warning: mingetty-1.00-3.src.rpm: Header V3 DSA/SHA1 Signature, key ID db42a60e: NOKEY
1:mingetty ########################################### [100%]
2、进入解压目录,一般为用户家目录的rpmbuild中。
[root@37-test ~]# cd rpmbuild/S
SOURCES/ SPECS/
[root@37-test SOURCES]# ll
总用量 20
-rw-rw-r--. 1 root root 259 3月 4 2002 mingetty-1.00-opt.patch
-rw-rw-r--. 1 root root 14038 3月 4 2002 mingetty-1.00.tar.gz
3、编译源码rpm包
[root@37-test SPECS]# rpmbuild -bb mingetty.spec
-ba:生成二进制包及源码格式的rpm包
-bb:生成一个二进制格式的rpm包
可能会需要依赖包,将依赖包安装完毕后,重新编译。
[root@37-test rpmbuild]# ll
总用量 24
drwxr-xr-x 3 root root 4096 12月 9 14:11 BUILD
drwxr-xr-x 2 root root 4096 12月 9 14:11 BUILDROOT
drwxr-xr-x 3 root root 4096 12月 9 14:11 RPMS
drwxr-xr-x 2 root root 4096 12月 9 14:04 SOURCES
drwxr-xr-x 2 root root 4096 12月 9 14:11 SPECS
drwxr-xr-x 2 root root 4096 12月 9 14:07 SRPMS ##用于其他系统的重新制作编译
[root@37-test rpmbuild]# cd RPMS/
[root@37-test RPMS]# ls
x86_64
[root@37-test RPMS]# cd x86_64/
[root@37-test x86_64]# ls
mingetty-1.00-3.x86_64.rpm mingetty-debuginfo-1.00-3.x86_64.rpm
[root@37-test x86_64]# rpm -ivh mingetty-debuginfo-1.00-3.x86_64.rpm
Preparing... ########################################### [100%]
1:mingetty-debuginfo ########################################### [100%]
问题:
1、error: line 4: Unknown tag: Copyright: GPL
此错误可以通过修改repc文件中的需要將"Copyright:"該改成新的Tag"License:" 即可