1. 软件管理简介
1.1linux界的两大主流:RPM与DPKG 【1-0】
1.dpkg
开发者:Debain Linux社群linux distrbution代表:衍生于Debain的发行版(Debain,B2D,Ubuntu等)使用指令:dpkg在线升级机制:APT(apt-get)
2.rpm
开发者:Red Hatlinux distrbution代表:Fedora, CentOS, SuSE等使用指令:rpm,rpmbuild在线升级机制:yum
1.2什么是RPM与SRPM
1.RPM(redhat package manager):yi以一种数据库的方式安装到linux的一套软件管理机制
档名格式:xxx.rpm
直接安装与否:可
内含程序类型:已编译
可否修改参数并编译:不可(没有configure和makefile)
特点:【1-1】
缺点:【1-2】
2.SRPM(source RPM):包含原始码,相依性说明
档名格式:xxx.src.rpm
直接安装与否:不可(需要先编译成rpm)
内含程序类型:未编译的原始码
可否修改参数并编译:可(有configure和makefile)
1.3什么是i386, i586, i686, noarch, x86_64【1-3】
案例:rp-pppoe-3.1-5.i386.rpm
----
一个完整的rpm软件包名(软件名称-软件的版本信息-释出的次数-适应的硬件平台-扩展名)【1-4】
1.4RPM的优点【1-5】
1.5RPM属性相依的克服方法:YUM在线升级【1-6】
/var/cache/yum
----yum本机清单
2. RPM软件管理程序:rpm
2.1RPM默认安装的路径
/etc
----一些配置文件放置的目录
/usr/bin
----一些可执行文件
/usr/lib
----一些程序使用的动态函数库
/usr/share/doc
---一些基本的软件手册和说明文件
/usr/share/man
----一些man page
2.2RPM安装【1-8 常见的一些选项与参数】
注意:尽量不要使用 --force
# rpm -i rp-pppoe-3.5-32.1.i386.rpm
----安装
rp-pppoe-3.5-32.1.i386.rpm这个软件
案例一:安装并显示详细安装信息和安装进度
#
rpm -ivh rp-pppoe-3.5-32.1.i386.rpm
案例二:一次安装多个软件
# rpm -ivh a.i386.rpm b
.i386.rpm *.i386.rpm
---后面直接接很多软件
案例三:直接由网路上面某个档案安装,以网址安装
# rpm -ivh http://website.name/path/pagname.rpm
案例四:在没有网络的情况下,通过原始光盘安装一个名为pam-devel的软件
# mount /dev/cdrom /media
----挂载光盘
# find /media -name 'pam-devel'
----找出档案的实际路径
# rpm -ivh pam-devel.. --test
----测试此软件是否具有相依性
# rpm -ivh pam-devel..
----直接安装
# umount /dev/vdrom
----卸载光盘
2.3RPM升级与更新(upgrate/freshen)
注意:在不使用yun更新的情况下,如果想升级系统所有软件,可以从映象站下载更新数据,然后通过-Fvh一口气升级【1-9】
2.4RPM查询(/var/lib/rpm/)【1-11】
注意:查询软件相关信息是不需要加上软件的版本号(会到/var/lib/)rpm这个数据库去查;查询软件相关档案信息是需要完整的档名
1.一些入门案例
案例一:找出主机中是否安装有logrotate这个软件# rpm -q logrotating ----不必加上版本范例二:列出上题当中属于该软件所提供的所有目录与档案# rpm -ql logrotate ----可以看出该软件到底提供了多少档案与目录,也可以追踪软件的数据范例三:列出logrotate这个软件 的相关说明数据# rpm -qi logrotate范例四:分别找出logorate的配置文件与说明档# rpm -qc logrotate# rpm -qd logrotate范例五:若要成功安装,还需要什么软件# rpm -qR logrotate范例六:找出/bin/sh是哪个软件提供的# rpm -qf /bin/sh ---后面接的是档案而不是软件(查询系统的档案属于哪一个软件)范例七:下载一个rpm档案,查看档案的需求档案# rpm -qpR filename.i386.rpm
2.一些练习案例
# rpm -qa | grep ^c | wc -l
----查询系统上以c开头的软件(显示行数)
# rpm -qc httpd
----查看apache所有配置文件放置在何处(apache的rpm软件文件名为httpd)
# rpm -ivh http://web.site.name/path/httpd-x.x.xx.i386.rpm
--replacepkgs
# rpm -qf /etc/crontab
----如果误删了某个程序的配置文件,重新安装它但不知道程序名,虽然文件没了但/var/lib/rpm当中还有记录这个rpm软件
2.5RPM验证与数字签名(verify/signature)
1.验证(rpm -V)【1-12】
注意:如果查到的变更信息发生在二进制文件信息上就表示比较危险,有可能被入侵过
范例一:列出主机内的logrotate这个软件是否被更动过
# rpm -V logrotate
范例二:查询一下,你的/etc/crontab是否被更动过(如何理解文件变更信息的含义【1-13,14】)
# rpm -Vf /etc/crontab
---- -Vf 某个档案是否被更动过(会列出被更动的信息类型)
2.数字签名(digital signature)【1-15】
注意:
1.
CentOS使用的数字签名系统GnuPG(GNP Privacy Guard,GNP)运用哈希算法
2.如果忘记加数字签名,很多原始软件就不能安装,除非用rpm选项略过数字签名
# ll /etc/pki/RPM-GPG-KEY-CentOS-5
----CentOS的数字签名位置
# cat
/etc/pki/RPM-GPG-KEY-CentOS-5
----从中可以看出数字签名的本质是随机数
# rpm --import
/etc/pki/RPM-GPG-KEY-CentOS-5
----安装这个数字签名档
# locate GPG-KEY
----查找系统中的数字签名档
# find /etc -name '*GPG-KEY'
# rpm -qa | grep pubkey
----查看系统密匙的内容,列出密匙软件名称
# rpm -qi gpg-pubkey-e8562897-459f07a4
----查询这个软件的详细信息
2.6RPM反安装与重建数据库(erase/rebuldedb)
注意:发生依赖关系时,先安装的后移除
1.找出与pam有关的软件名称,并移除pam这个软件
# rpm -qa | grep pam
----找到pam有关的软件
# rpm -e pam
----会发现因为依赖问题无法卸载(可以通过--nodeps强制卸载,不过会造成系统中其他软件的错误)
# rpm -e pam-devel
----pam-devel依赖于rpm,位于最顶层,可以顺利卸载
# rpm
--rebuidedb
----重建数据库
3.SRPM的使用:rpmbuide
注意:rpm软件包使用rpm指令,srpm使用rpmbuide指令
3.1利用默认值安装SRPM档案(--rebuide/--recomplie)
# rpm --rebuide
SRPM软件包
----编译并打包
# rpm --recompile
SRPM软件包
----编译打包并安装
3.2SRPM使用的路径与需要安装的软件
1.安装SRPM过程中使用到的路径【1-17】
注意:
1.
不同发行版会稍微不同,但一般都会在/usr/src/底下,以CentOS为例:/usr/src/redhat/[SPES/SOURCES/BUILD/RPMS/SRPMS]
2.如果编译过程出现设定错误或者不明的错误,/tmp底下会产生一个相应的错误档,可以根据这个档案进行除错的工作
3.编译完成后除/usr/src/redhat/RPM以外的档案都会被删除
2.一个用于观察变编译过程的案例:
# rpm --rebuild
rp-pppoe-3.5-32.1.src.rpm
----用默认设定编译,并以rpm机制封装起来
# ll /usr/src/redhat/RPMS/i386/
----
底下有编译好的.rpm格式的文件
3.3配置文件的主要内容
案例一:修改配置文件,然后安装
注意:
rp-pppoe.spec
的规则
1.整个档案以Summary开头,这部分的设定是最基础的内容
2.每个不同的段落都以%开头,例如%prep,%install
# rpm -i
rp-pppoe-3.5-32.1.i386.rpm
----会将SRPM解压后放置到/usr/src/redhat/
# find /usr/src/redhat/
-type f
----主要含有原始码和一个重要的配置文件【1-18】
# cd /usr/src/redhat/SPECS
----设定参数当就在这个地方
# vim rp-pppoe.spec
----
主要的将SRPM编译成RPM的配置文件,依据设定,最终的档名会是{name}-{version}-{release}-{ExclusiveArch}.rpm【1-19,20,21,22】,几个重要段落的说明【1-23,24】
3.4SRPM的编译指令(-ba/-bb)
# rpm -ba rp-pppoe.spec
----编译并同时产生rpm档案和srpm档案
# rpm -bb rp-pppoe.spec
----仅编译成rpm,执行过程【1-25】
3.5一个打包自己软件的案例
注
意:这个案例我们使用之前用c语言完成的main,最终将其封装成为main-1.1.i386.rpm
1.在/usr/local/src/底下建立一个名为main-0.1的目录,并将源码解压缩到这个目录
# mkdir /usr/local/src/main-0.1
---建立新目录
# tar -zxvf main.tgz
-C /usr/local/src/main-0.1
----解压缩到指定目录
# cd /usr/local/src/main-0.1
# vim Makefile
----建立原始码所需的make规则
LIBS=-lm
OBJS=main.o haha.o sin_value.o cos_value.o
CFLAGS=-Wall
main:${OBJS}
gcc -o $@ ${OBJS} ${LIBS}
clean:
rm -f ${OBJS}
install:
install -m 755 main $(RPM_INSTALL_ROOT)/usr/local/bin/main
----安装到指定目录
# cd ..
2.将打包好的源码放到/usr/src/redhat/下指定目录
# tar -zcvf main-0.1.tar.gz main-0.1
----将main-0.1这个目录压缩成为main-0.1.tar.gz
# cp main-0.1.tar.gz /usr/src/redhat/SOURCES
----将压缩好的源码放入指定目录
3.建立*.spec的配置文件
# cd /usr/src/redhat/SPECS
# vim main.spec
----【1-26】
Summary:
calculate sin and cos value.
Name: main
Version: 0.1
Release: 1
Lience: GPL
...
4.开始编译成为RPM与SRPM
# rpmbuide -ba main.spec
5.安装、测试、实际查询
# rpm -ivh /usr/src/redhat/RPMS/i386/main-0.1-1.i386.rpm
----安装
# rpm -ql main
----列出属于该软件的档案与目录
# rpm -qi main
----列出该软件的属性信息(main.spec)
4.YUM在线升级机制
4.1利用yum进行查询、安装、升级与移除功能
4.1.1查询功能(yum [list/info/search/provides/whatprovides])【1-27】
# yum search raid
----查找磁盘阵列相关的软件
# yum info mdadm
----找出mdadm这个软件的功能为何类似rpm -qai
# yum list
----列出yum服务器上面提供的所有软件名称,类似rpm -qa
# yum list updates
----列出目前服务器上可以升级的软件
# yum provides passwd
----列出提供passwd这个档案的软件有哪些,类似rpm -qf
案例:利用yum找出pam打头的软件有哪些,其中还未安装的有哪些
# yum list pam*
----显示信息分为Installed packages和Available packages(未安装或者可升级)两部分
4.1.2安装、升级功能:yum [install | update] 软件【1-28】
案例一:将前一个练习找到的未安装的软件安装起来
# yum install pam-devel
----会自动解决依赖问题
4.1.3移除功能:yum[remove] 软件
# yum remove pam-devel
----会自动检查依赖问题
4.2yum的配置文件
4.2.1入门案例
# vim /etc/yum.repos.d/CentOS-Base.repo
----编辑base这个容器的配置文件【1-29】
案例一:列出目前yum server所使用的容器有哪些
# yum repolist all
---会发发现有多个容器,,enabled是激活的,因为有对应多个容器的配置文件
4.2.1修改容器产生的问题与解决之道
问题:本机列表与yum服务器的列表不同步,无法更新
原因:修改系统默认配置文件,指定特定的映象站台,但没有修改容器名,导致yum下载对应容器的清单/var/cache/yum下
解决:清除系统中的旧数据(yum clean [packages/headers/all])
# yum clean all
----清除系统上所有的容器的数据【1-30】
4.3yun的软件群组功能【1-31】
案例一:列出目前容器与本机上面的可用于安装过的软件群组有哪些
# yum grouplist
----会发现系统上面大部分的软件都是以群组的方式安装的
# yum groupinstall XFCE-4.4
----安装XFACE这个桌面环境接口
4.4全系统自动升级
# vim /etc/crontab
0 3 * * * root /usr/bin/yum -y update
----设定每天3am在带宽充裕时升级系统(-y自动回答yes来完成下载与安装)
5. 管理的抉择:RPM还是Tarball【1-32】
6.重点回顾【1-33】
7.本章习题
情景模拟题一:实际安装php,php-mysql,php-devel,httpd-devel等软件
# rpm -q httpd httpd-devel php php-devel php-mysql ----确认这些软件是否已经安装# ifconfig eth0 ----查看网卡设定# route -n ----查看路由设定# ping -c 2 192.168.201.254 ----尝试连接路由 ,看路由是否回应,如果有说明TCP/IP设定好了# dig www.baidu.com ----测试查看百度的IP,确认DNS设置正确# yum install httpd httpd-devel php php-devel php-mysql ----安装
简答题:【1-34,35】