Linux运维第二阶段(三)软件安装
程序组成部分:二进制程序;库(自身库、共享库.so);配置文件;帮助文件。
程序=指令+数据;指令:芯片,CPU(普通指令,特权指令),指令集
/bin,/sbin,/lib,/etc(系统启动需要用到的程序,这些目录不能挂载到额外的分区,必须在根文件系统的分区上);
/usr/bin,/usr/sbin,/usr/lib(操作系统的基本功能,或核心功能,应该单独分区);
/usr/local/bin,/usr/local/sbin,/usr/local/lib,/usr/local/etc,/usr/local/man(第三方软件安装位置,建议独立分区);
/opt(早期第三方软件安装位置)
/proc,/sys(不能单独分区,默认为空)
/dev(不能单独分区,2.6kernel用udev动态地创建设备文件,2.4kernel在此目录下会事先创建所有设备文件,不能根据文件识别设备)
/home(建议单独分区)
/root(没有也可,不要单独分区)
/var(作为系统的补充,没有也可,有它更规范,应该单独分区)
/boot(内核及initramfs放至处,一般/boot单独分区,除此分区外其它均划分为LVM)
软件包管理器的核心功能:制作软件包;安装、卸载、升级、查询、校验
rpm(redhat packagemanager-->rpm is package manager,redhat/suse)
dpkg(debianpackager,DEBIAN)
yum(yellowdog updatemodifier)
/var/lib/rpm/*:rpm数据库,安装、卸载、升级、校验、数据库的重建、验证数据包等工作
命名:
主包:bind-9.7.1-1.el5.i586.rpm
次包:bind-libs-9.7.1-1.el5.i586.rpm
name-version-release.arch.rpm
bind-major.minor.release-release.arch.rpm(major主版本号,重大改进;minor次版本号,某个子功能发生重大变化;前一个release发行号,修正了部分bug调整了一点功能;后一个release,rpm包作者)
rpm包:二进制格式(rpm作者将源程序编译配置完成后制作成rpm);源码格式
#uname -r(print system information.-a,--all;-r,--kernel-release;-s,--kernel-name;-n,--nodename)
安装:
rpm包,二进制格式(源程序-->编译-->二进制格式),有些特性是编译选定的,如果编译时未选定此特性,则无法使用;rpm包的版本会落后于源码包,甚至落后很多
#rpm -ivh PACKAGE_NAME
-i(--install)
-v(Print verbose information,也可用-vv显示更详细的信息)
--h(--hash,以#显示进度,每个#表示2%,共50个)
--nodeps(忽略依赖关系)
--replacepkgs(重新安装,替换原有安装)
--force(强制安装,可以实现重装或降级)
查询:
#rpm -q PKG_NAME(--query,查询指定的包是否已安装)
#rpm -qa(查询已安装的所有包)
#rpm -qa | grep “^z”
#rpm -ql zsh | less(--list查询指定包安装后生成的文件列表)
#rpm -qi PKG_NAME(--info查询指定包的说明信息)
#rpm -qf /PATH/TO/FILE(--file查询指定文件由哪个包安装的)
#rpm -q --scripts PKG_NAME(查询指定包中包含的脚本)
#rpm -qc PKG_NAME(--configfiles查询指定包安装的配置文件)
#rpm -qd PKG_NAME(--docfiles查询指定包安装的帮助文件)
#rpm -qpl /PATH/TO/PKG_NAME(查看尚未安装的包安装后会生成的文件)
#rpm -qpi /PATH/TO/PKG_NAME(查看尚未安装的包的说明信息)
升级:
#rpm -Uvh /PATH/TO/PKG_NAME(--upgrade若有老版本则升级,否则安装)
#rpm -Fvh /PATH/TO/PKG_NAME(--freshen若有老版本则升级,否则退出)
#rpm -ivh --oldpackage /PATH/TO/PKG_NAME(降级)
卸载:
#rpm -e PKG_NAME(--erase;--nodeps)
校验:
#rpm -V PKG_NAME(--verify;状态有S,M,5,D,L,U,G,T,P)
重建数据库(/var/lib/rpm/*):
#rpm --rebuild(重建数据库,执行此条一定会重新建立)
#rpm --initdb(重建数据库,没有才建立,有则不建立)
校验来源合法性及软件包的完整性:
#rpm --import /etc/pki/rpm-gpg/RPM-GPG_KEY-redhat-release
#rpm -K PKG_FILE(--checksig)
yum:
yum仓库中的元数据文件:
primary.xml.gz(所有rpm包的列表;依赖关系;每个rpm安装生成的文件列表)
filelists.xml.gz(当前仓库中所有rpm包的所有文件列表)
other.xml.gz(额外信息,rpm包的修改日志)
repomd.xml(上面三个文件的timestamp和checksum)
comps*.xml(rpm包分组信息)
/etc/yum.conf;
/etc/yum.repos.d/*.repo
定义repo文件:
[REPO_ID]
name=DESCRIPTION
baseurl=ftp://(或http://或file://)
enabled=1(1表示启用,0禁用)
gpgcheck=0
gpgkey=
#yum options COMMAND PKG_NAME
#yum list all
#yum list available(仓库中有尚未安装)
#yum list installed
#yum list updates(可用的升级)
#yum repolist [enabled|all|disabled](显示repo列表及简要信息,默认显示enabled)
#yum install PKG_NAME
#yum update|update-to PKG_NAME
#yum remove|erase PKG_NAME
#yum info PKG_NAME
#yum provides|whatprovides /PATH/TO/FILE(查看指定的文件或特性是由哪个包生成的)
#yum grouplist | grep “^z”
#yum groupinfo|groupinstall|groupremove|groupupdate GROUP_NAME
#yum localinstall *.rpm *.rpm(安装rpm包自动解决依赖关系)
编译安装(定制):
手动编译安装;编译环境(开发环境);开发库;开发工具(gcc(gnu c compilier);g++(g plus plus));
make项目管理工具(make调用gcc或g++),makefile定义了gcc何种次序去编译这些源程序文件中的源程序(automake-->makefile.in-->makefile)
autoconf-->configure(给用户提供接口让用户选择哪些特性)
编译安装的三步骤:./configure;make;make install
安装前要先准备开发环境(编译环境)”Development Tools”,”Development Libraries”,”Compatibility Libraries”
#tar xf SAMPLE.tar.gz
#cd SAMPLE_DIR
#./configure --help
#./configure --prefix=/path/to/somewhere --sysconfdir=/path/to/confile_path
#make
#make install
编译完成后需要调试如下信息:
1、 修改PATH环境变量,以能够识别此程序的二进制文件路径,再次登录生效(在/etc/profile文件中添加,或/etc/profile.d/rename.sh)内容为export PATH=$PATH:/path/to/somewhere
2、 默认情况下,系统搜索库文件的路径是/lib,/usr/lib,要增添额外搜寻路径,在/etc/ld.so.conf.d/中创建以.conf为后缀的文件,而后把增添的路径直接写在此文件中,#ldconfig -v通知系统重新搜寻库文件,-v显示过程
3、 头文件,每一个输出了库文件的软件都一定会有头文件提供,头文件包含了每一个库文件的函数、函数的调用参数、参数类型等相关属性,这些属性是被其他人做二次开发时指定调用风格的文件(规范式文件),默认位置/usr/include,增添头文件搜寻路径,使用链接进行:#ln -sv /usr/local/software_name/include /usr/include/software_name
4、 man文件路径:安装时--prefix指定的目录下有man目录,将此路径添加至man配置文件/etc/man.config(MANPATH_MAP /PATH)或使用man命令时指定帮助文档路径(#man -M /PATH COMMAND)
以上是学习《马哥网络视频》做的笔记。
1、分类:源码包、二进制包
源码包:优(开源,有能力可修改源代码;可自由选择所需功能;编译安装,更适合自己的系统,稳定且高效;卸载方便);缺(安装步骤多,尤其较大软件集合,如LAMP环境搭建,容易出现拼写错误;编译安装时间长;安装过程一旦报错,新手很难解决)。
二进制包:优(包管理简单,只通过几个命令就可实现安装、升级、查询、卸载;安装进度比源码包快的多);缺(经过编译,不再可看到源代码;功能选择不如源码包灵活;依赖性很繁琐)。
依赖性:树形依赖(a->b->c);环形依赖(a->b->c->a);模块依赖(www.rpmfind.net)
2、rpm安装
》httpd-2.2.15-15.el16.centos.1.i686.rpm
2.2.15软件版本;-15软件发布的次数;el16软件发行商,RHEL6.x
》默认安装位置:
/etc;/usr/bin;/usr/lib;/usr/share/doc;/usr/share/man
》#rpm -ivh 包全名 (install\verbose\hash)
--nodeps 不检测依赖性
--replacefiles 替换文件安装
--replacepkgs 替换软件包安装
--force 强制安装,相当于以上两项的结合
--test 测试安装,不会实际安装
--prefix 指定安装目录
》#rpm -Uvh 包全名 upgrade旧版升到新版,无旧版也安装
#rpm -Fvh 包全名 freshen旧版才能升级,无旧版不安装
#rpm -e 包名 卸载
#rpm -q 包名 query查询(例:#rpm �Cqa|grep httpd)
#rpm -qi 包名 information查询包的信息
#rpm -qip 包全名 package查询未安装包信息
#rpm -ql 包名 list查询包中文件的安装位置
#rpm -qf 系统文件名 file查询系统文件属于哪个包
#rpm -qR 包名 recursion依赖性
#rpm -qRp 包全名 查询未安装包依赖性
》#yum -y install 包名
#yum -y remove 包名
#yum -y update 包名
#yum list 查询服务器中可以安装的包
#yum list 包名 查询服务器是否有此包
#yum search 关键字 搜索服务器上和关键字相关的包
#yum info 包名 查询指定软件包的信息
#yum grouplist 查询可以安装的软件组
#yum groupinfo “软件组名” 查询软件组内包含的软件
#yum groupinstall “软件组名” 安装软件组
#yum groupremove “软件组名” 卸载软件组
》搭建光盘 yum源
#mv CentOS-Base.repo CentOS-Base.repo.bak
#vi /etc/yum.repos.d/CentOS-Media.repo
baseurl=file:///mnt/cdrom/ 指定yum源位置
enabled=1 yum源文件生效
gpgcheck=0 rpm验证不生效
》#rpm -V 包名 verify校验指定包中文件
#rpm -Vf 系统文件名 校验系统文件是否被修改
数字证书(对即将要安装的包验证)
特点:安装原厂的公钥文件;安装rpm包时,提取rpm包中的证书信息与本机安装的原厂证书进行比对;验证通过,安装,否则不允许安装并警告。
位置:/mnt/cdrom/RPM-GPG-KEY-CentOS-6 光盘中
/etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6 系统中
#rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6
3、》#cpio -ovcB > 文件|设备
备份模式o(out),v(verbose),c(portable format存储方式),B(输出块为5120byte,而不是模式的512byte)
#cpio -ivcdu < 文件|设备
还原模式i(in),d(还原时自动新建目录),u(使用较新的文件覆盖较旧的文件)
#cpio -p 目标目录
例:#find . �Cprint | cpio -ovcB > /root/etc.cpio
#cpio -ivcdu < /root/etc.cpio
注:CentOS6.x中,如果备份时写绝对路径,则恢复时直接到绝对路径,最好使用相对路径。
例:#find /boot -print | cpio -p /tmp/test/
提取rpm包中文件:
#rpm -qf /bin/ls
#rpm2cpio /mnt/cdrom/Packages/core….. | cpio -idv ./bin/ls
#cp /root/bin/ls /bin/
注意:./bin/ls 提取ls到当前目录下
4、》源码包安装:解压;cd 解压目录;查看安装文档(install和readme);编译前准备(./configure --prefix=/usr/local/apache2/);编译make;编译安装make install
启动:#/usr/local/apache2/bin/apachect1 start
卸载:直接删除安装目录
》源码包打入补丁:
#patch -pn 要打补丁的文件 < 补丁文件
注:n为数字,按照补丁文件的路径,指定更新位置
5、》脚本安装程序:sebmin的安装
# ./setup.sh (安装位置、日志位置、perl安装位置、端口、密码、ssl不启用、启动)
6、》函数库的管理,分类:静态函数库、动态函数库
静态函数库:*.a,程序调用时被直接整合到程序中;优(程序执行时不需要调用外部数据,可直接执行);缺(文件较大,升级困难,需把整个程序重新编译)
动态函数库:*.so,程序用到时再去调用函数库。
#ldd /bin/ls (查询ls调用的函数库)
#ldd -v 可执行文件名 (详细显示版本信息)
注:软件正常安装不需调整函数库,若未安装正确手工安装:1把函数库放入指定位置/usr/lib或/lib;2把函数库所在位置写入/etc/ld.so.conf
#cp *.so /usr/lib
#vi /etc/ld.so.conf
include ld.so.conf.d/*.conf
/usr/lib
#ldconfig 把函数库读入缓存
#ldconfig -p 列出系统缓存中所有识别的函数库
注:本文由互联网收集整理(51CTO、360DOC、chinaunix、百度百科、兄弟连免费视频等)。