1.对于二进制应用程序的认识
(1)组成部分:
二进制文件,库文件,配置文件,帮助文件(前两项是由源代码组成的)
(2)程序包管理器:
debian:deb,dpt
redhat:rpm,rpm
(3)源代码的命名方式
name-VERSION.tar.gz
其中VERSION:major.minor.release
2.查看二进制程序所依赖的库文件
# ldd /PATH/TO/BINARY_FILE
管理以及查看本机装载的库文件
# ldconfig -p:显示本机已经缓存的所有可用库文件名及文件路径映射关系 配置文件为:/etc/ld.so.conf, /etc/ld.so.conf.d/*.conf 缓存文件为:/etc/ls.so.cache
3.程序包管理
功能:将编译好的应用程序的各组成文件打包一个或几个程序包文件,从而方便快捷的实现程序包的安装,卸载,查询,升级和校验等功能
(1)程序的组成清单(每个包独有)
文件清单
安装或卸载时运行的脚本
(2)数据库(公共)
程序包名称及版本
依赖关系
功能说明
安装生成的各文件的文件路径及校验码信息
4.CentOS系统上rpm命令管理程序包
功能:安装,卸载,升级,查询,校验,数据库维护
(1)安装
rpm {-i|--install} [install-option] PACKAGE_FILE -v:verbose -vv -h:以#显示程序包管理执行进度,每个#表示2%的进度
例:rpm -ivh PACKAGE_FILE
[install-options] --test:测试安装,但不真正执行安装过程,又称dry run模式 --nodeps:忽略依赖关系 --replacepkgs:重新安装 --nosignature:不检查来源合法性 --nodigest:不检查包的完整性 --noscripts:不执行程序包脚本片段 %pre:安装前脚本,--nopre %post:安装后脚本,--nopost %preun:卸载前脚本,--nopreun %postun:卸载后脚本,--nopostun
(2)升级
rpm {-U|--upgrade} [install-options] PACKAGE_FILE ... rpm {-F|--freshen} [install-options] PACKAGE_FILE ... upgrage:安装有旧版程序包,则“升级”;如果不存在旧版程序包,则“安装”; freeshen:安装有旧版程序包,则“升级”;如果不存在旧版程序包,则不执行升级操作; rpm -Uvh PACKAGE_FILE ... rpm -Fvh PACKAGE_FILE ... --oldpackage:降级; --force: 强行升级;
注意:(1) 不要对内核做升级操作;Linux支持多内核版本并存,因此,对直接安装新版本内核;
(2) 如果原程序包的配置文件安装后曾被修改,长级时,新版本的提供的同一个配置文件并不会直接覆盖老版本的配置文件,而把新版本的文件重命名(FILENAME.rpmnew)后保留;
(3)查询
rpm {-q|--query} [select-options] [query-options]
[select-options]
-a: 所有包 -f: 查看指定的文件由哪个程序包安装生成 -p /PATH/TO/PACKAGE_FILE:针对尚未安装的程序包文件做查询操作; --whatprovides CAPABILITY:查询指定的CAPABILITY由哪个包所提供; --whatrequires CAPABILITY:查询指定的CAPABILITY被哪个包所依赖;
[query-options]
--changelog:查询rpm包的changlog -c: 查询程序的配置文件 -d: 查询程序的文档 -i: information -l: 查看指定的程序包安装后生成的所有文件; --scripts:程序包自带的脚本片断 -R: 查询指定的程序包所依赖的CAPABILITY; --provides: 列出指定程序包所提供的CAPABILITY;
(4)卸载
rpm {-e|--erase} [--allmatches] [--nodeps] [--noscripts] [--notriggers] [--test] PACKAGE_NAME ...
(5)校验
rpm {-V|--verify} [select-options] [verify-options] S file Size differs:文件的大小发生了改变 M Mode differs (includes permissions and file type)权限或者文件的类 型发生了变化 5 digest (formerly MD5 sum) differs:文件的校验码发生了改变 D Device major/minor number mismatch:设备的主次设备号发生了变化 L readLink(2) path mismatch:链接的路径发生了变化 U User ownership differs:文件的属主发生了变化 G Group ownership differs:文件的属组发生了变化 T mTime differs:文件的访问时间发生了变化 P caPabilities differ:
(6)数据库重建
rpm {--initdb|--rebuilddb}
initdb: 初始化
如果事先不存在数据库,则新建之;否则,不执行任何操作;
rebuilddb:重建
无论当前存在与否,直接重新创建数据库
(7)导入所需要的公钥
rpm --import /PATH/FROM/GPG-PUBKEY-FILE
CentOS7发行版光盘提供的密钥文件,RPM-GPG-KEY-CentOS-7
5.yum管理命令(yum是rpm的前端管理工具)
(1)一个yum仓库的组成部分
1)仓库的描述文件
文件包括元数据信息,即相关的描述性信息,包括名字,版本,包与包的依赖关系等
2)校验码文件
记录了每一个仓库文件的校验码,目的是节约带宽
3)rpm包
(2)yum repository:yum repo,yun仓库
存储了众多的rpm包,以及包相关的元数据文件(放置于特定的目录下:repodata)
这个yum仓库是一个文件服务器
(3)createrepo命令(用于在有众多rpm包的目录下进行整理):
createrepo [OPTION] <directory>
此命令用于分析一个指定路径下有哪些rpm包的,以及包与包之间的依赖关系,并抽取形成文件,且制作出其中的特征码文件
6.yum的客户端
(1)配置文件
/etc/yum.conf:提供指向众多仓库的公共选项,为所有仓库提供公共配置 /etc/yum.repo.d/*.repo:为仓库的指向提供配置信息
(2)仓库的定义(可通过man yum.conf查询帮助)
[repository ID] name=Some name for this repository baseurl=url://PATH/TO/REPOSITORY/(要求此目录下有repodata这个目录,也就是 yum源应该指向这个路径) enabled={1|0} gpgcheck={1|0} gpgkey=URL enablegroups={1|0} failovermethod={roundrobin|priority} 默认为:roundrobin,意为随机挑选; cost= 默认为1000
7.yum命令的用法
yum [options] [command] [package ...]
(1)显示仓库列表:
repolist [all|enabled|disabled]
(2)显示程序包:
list # yum list [all | glob_exp1] [glob_exp2] [...] # yum list {available|installed|updates} [glob_exp1] [...]
(3)安装程序包:
install package1 [package2] [...] reinstall package1 [package2] [...] (重新安装)
(4)升级程序包:
update [package1] [package2] [...] downgrade package1 [package2] [...] (降级)
(5)检查可用升级:
check-update
(6)卸载程序包:
remove | erase package1 [package2] [...]
(7)查看程序包information:
info [...]
(8)查看指定的特性(可以是某文件)是由哪个程序包所提供:
provides | whatprovides feature1 [feature2] [...]
(9)清理本地缓存:
clean [ packages | metadata | expire-cache | rpmdb | plugins | all ]
(10)构建缓存:
makecache
(11)搜索:
search string1 [string2] [...]
以指定的关键字搜索程序包名及summary信息;
(12)查看指定包所依赖的capabilities:
deplist package1 [package2] [...]
(13)查看yum事务历史:
history [info|list|packages-list|packages-info|summary|addon-info|redo|undo|rollback|new|sync|stats]
(14)安装及升级本地程序包:
* localinstall rpmfile1 [rpmfile2] [...] (maintained for legacy reasons only - use install) * localupdate rpmfile1 [rpmfile2] [...] (maintained for legacy reasons only - use update)
(15)包组管理的相关命令:
* groupinstall group1 [group2] [...] * groupupdate group1 [group2] [...] * grouplist [hidden] [groupwildcard] [...] * groupremove group1 [group2] [...] * groupinfo group1 [...]
8.yum的repo配置文件中可用的变量
$releasever:当前OS的发行版的主版本号 $arch:平台类型 $basearch:基础平台 $YUM0-YUM9:
例:http://mirrors.mageedu.com/centod/$releaserver/$basearch/os
9.程序包的编译安装
(1)源代码组织格式
多文件:文件中的代码之间,很可能存在跨文件依赖关系;
C、C++: make (configure --> Makefile.in --> makefile
C代码编译安装三步骤:
./configure:
(1) 通过选项传递参数,指定启用特性、安装路径等;执行时会参考用户的指定以及Makefile.in文件生成makefile;
(2) 检查依赖到的外部环境;
make:
根据makefile文件,构建应用程序;
make install
开发工具:
autoconf: 生成configure脚本
automake:生成Makefile.in模板
建议:安装前查看INSTALL,README文件
(2)前提:提供开发工具及开发环境
开发工具:make, gcc等
开发环境:开发库,头文件
glibc:标准库
通过“包组”的方式提供开发组件
在CentOS6上用到的开发组件有:Development Tools, Server Platform Development
(3)源码编译的三个步骤
第一步:configure脚本
选项:指定安装位置、指定启用的特性
--help: 获取其支持使用的选项
选项分类:
安装路径设定:
--prefix=/PATH/TO/SOMEWHERE: 指定默认安装位置;默认为/usr/local/
--sysconfdir=/PATH/TO/SOMEWHERE:配置文件安装位置;
System types:指明系统类型(只有交叉编译时会用到)
Optional Features: 可选特性
--disable-FEATURE
--enable-FEATURE[=ARG]
Optional Packages: 可选包
--with-PACKAGE[=ARG]
--without-PACKAGE
第二步:make
第三步:make install
10.安装后的配置
(1) 导出二进制程序目录至PATH环境变量中;
编辑文件/etc/profile.d/NAME.sh
export PATH=/PATH/TO/BIN:$PATH
(2) 导出库文件路径
编辑/etc/ld.so.conf.d/NAME.conf
添加新的库文件所在目录至此文件中;
让系统重新生成缓存:
ldconfig [-v]
(3) 导出头文件
基于链接的方式实现:
ln -sv
(4) 导出帮助手册
编辑/etc/man.config文件
添加一个MANPATH
11.下面我们实战演示如何在CentOS6上编译安装apache
(1)首先我们先将yum源指向本教室的服务器
[root@localhost /]# cd /etc/yum.repos.d/
下一步将原来的yum源设定为失效,改了名字就好了
[root@localhost yum.repos.d]# mv CentOS-Base.repo CentOS-Base.repo.sak
接着我们创建自己的yum仓库文件
[root@localhost yum.repos.d]# vim centos-local.repo [base] name=Base Repo On 172.16.0.1 baseurl=http://172.16.0.1/cobbler/ks_mirror/CentOS-6.6-x86_64/ gpgcheck=0 [epel] name=Fedora EPEL for EL6 x86_64 baseurl=http://172.16.0.1/fedora-epel/6/x86_64 gpgcheck=0
查看查找到的yum仓库
[root@localhost yum.repos.d]# yum repolist
当出现了我们设定的yumID时,我们的操作就成功了
(2)这时我们应该安装自己的开发环境,也就是开发包组
[root@localhost yum.repos.d]# yum repolist
在这个列表中找到两个开发包组,安装上就可以了
[root@localhost ~]# yum groupinstall "Development tools" -y [root@localhost ~]# yum groupinstall "Server Platform Development" -y
(3)接着我们就可以从服务器上下载http的压缩包,然后本地解包,解压缩,编译安装就完成了
[root@localhost ~]# lftp 172.16.0.1 lftp 172.16.0.1:~> mget httpd.2.2.29.tar.gz
本地解压缩
[root@localhost ~]# tar xf httpd-2.2.29.tar.bz2
查看http的configure脚本有多少选项可以用
[root@localhost httpd-2.2.29]# ./configure --help
指定安装位置
[root@localhost httpd-2.2.29]# ./configure --prefix=/usr/local/apache2/ --sysconfdir=/etc/httpd2
接着就是安装了
[root@localhost httpd-2.2.29]# make;make install
这时可以查看一下安装的结果:
[root@localhost httpd-2.2.29]# cd /usr/local/apache2/
给其启动控制脚本传递一个命令,apache就能起动了
[root@localhost bin]# apachectl start
这时可以通过查看端口的开启状态证实其确实已经启动
[root@localhost bin]# netstat -tan
12.将光盘作为yum源
(1)首先将光驱与vaware连接
然后创建挂载目录
[root@localhost ~]# mkdir /media/cdrom
(2)将光盘镜像挂载到指定目录上
[root@localhost ~]# mount -r /dev/cdrom /media/cdrom
(3)接着创建一个yum源,指向本地镜像
[root@localhost yum.repos.d]# vim local.repo [base] name=CentOS7 Rebase 7.1.150 baseurl=file:///media/cdrom enable=1 gpgcheck=0
(4)查看yum仓库是否被识别
[root@localhost yum.repos.d]# yum repolist
(5)查看包组信息,安装好开发环境
[root@localhost yum.repos.d]# yum grouplist [root@localhost yum.repos.d]# yum groupinstall "开发工具"
13.创建本地yum仓库
(1)如果在本目录下有众多的rpm文件,那么可以用命令createrepo创建yum仓库
[root@localhost ~]# createrepo ./
创建完成后有repodata目录
(2)切换到repodata目录中后会有几个以UUID开头的文件,即元数据文件。此目录下
还有以.xml格式的存储校验码信息的文件,专门用于检验是否有更新。若要远程访问
可将此目录作为url的访问路径
(3)此时可在/etc/yum.repo.d/*.repo文件中添加本地路径即可
[Xen4centos] name= baseurl=file:///yum/repo/ gpgcheck=0
(4)显示仓库列表
[root@localhost yum.repos.d]# yum repolist
注意:如果你修改了yum仓库,那么首先要清理一下缓存的内容,然后再用yum repolist显示下仓库列表