(注:内容太多,容纳不下,编译安装apache单独成文)
一、程序包管理工具
不同的发行版采用的管理工具不尽相同:
debian: 程序文件以deb结尾,包管理器为dpkg
redhat:程序文件以rpm结尾,包管理器为rpm
前端工具:自动解决依赖关系
yum:rpm包管理器的前段工具
apt-get:deb包管理器的前段工具
1、程序包管理器的功能:
将编译好的应用程序的各组成文件打包成一个或多个程序包文件,从而方便快捷地实现程序包的安装、卸载、查看、升级和校验等管理操作。
2、二进制应用程序的组成部分:
二进制文件、库文件、配置文件、帮助文件
3、二进制文件包的命名方式:
name-Version-release-arch.rpm
如:zlib-1.2.3-29.el6.x86_64.rpm
zlib:包名
1.2.3:主版本号
29:在主版本的基础上的打包数。由于修复bug等原因进行修改,每修改一次,增加一次打包数。
el6:应用于哪个发行版。el6标识RHEL的发行版
x86_64:基于哪个架构平台发行的
常见的架构平台
32位: i386 i486 i686
64位: x64 x86_64 amd 64
noarch:不局限于某架构平台的,通用
rpm:软件包的扩展名
4、二进制文件包的类型
主包:name-Version-release.arch.rpm
支宝:name-function-Version-release.arch.rpm
function:devel,utils,libs…
比如:yum的rpm就由yum主包和多个功能包组成
5、包文件的组成
(1)每个包都单独实现的:
文件清单
安装或卸载时运行的脚本
(2)公共的数据库:
程序包名称及版本
依赖关系
功能说明
包安装后生成的各文件路径及校验码信息
6、获取程序包的途径:
1、发行版的光盘或官方的文件服务器(或镜像站点)
http://mirrors.aliyun | sohu | 163.com
2、项目的官方站点
3、第三方组织
a、EPEL
b、搜索引擎,包含但不限于下列搜索引擎:
http://pkgs.org
http://rpmfind.net
http://rpm.phone.net
使用非官方程序包的建议:在使用非官方的程序包时,应检查其合法性,以保障系统的安全。
合法性包括:
来源合法性:即程序包是从开心来的途径获得。
内容合法性:即程序包的内容没有发生改动。
二、rpm命令的使用
1、安装
rpm –i|–install [install-options] Package_File1…
常用选项:
-v(verbose):显示安装过程详细信息
-vv:更详细
-h:hash marks输出进度条;每个#表示2%的进度
–test:测试安装是否成功,并报告依赖关系及冲突消息等,并不真正地安装。
–nosignature:不检查来源合法性,不检查包签名信息
-nodigest:不检查包完整性
–noscripts:不执行程序包脚本
rpm包可以自带脚本
脚本分为4类:
preinstall:安装过程开始之前运行的脚本,以%pre标识,–nopre(不执行该脚本片段)
postinstall:安装过程完成之后运行的脚本,以%post标识,–nopost(不执行该脚本片段)
preuninstall:卸载过程开始前运行的脚本,以%preun标识,–nopreun(不执行该脚本片段)
postuninstall:卸载过程完成之后运行的脚本,以%postun表示,–nopostun(不执行该脚本片段)
通常使用: rpm –ivh Package_File1…来进行安装
–test检测依赖关系,当然也可直接安装,依赖关系不满足也会返回错误
2、升级
rpm {-U|–upgrade} [install-options] PACKAGE_FILE …
rpm {-F|–freshen} [install-options] PACKAGE_FILE …
rpm -Uvh:升级(若已安装)或安装(若未安装)
rpm -Fvh:只升级
常用选项:
–oldpackage:降级
–force:强制升级
注意:(1)不要对内核做升级操作;内核支持多版本并存,若有需要,可另安装新版本内核
(2) 如果原程序包的配置文件在安装之后被修改,升级时,新版本程序提供的同意配置文件不会覆盖原有的配置文件,而是把新版本的配置文件重命名为(Filename.repnre)后提供。
例:安装zsh-4.3.10,之后升级至4.3.11
3、卸载
rpm {-e|–erase} [–allmatches] [–nodeps] [–noscripts] [–test] PACKAGE_NAME …
–allmatches:卸载所有匹配指定名称的程序包的各版本
–nodeps:忽略依赖关系
–test:测试卸载,dry run模式
4、查询
rpm {-q|–query} [select-options] [query-options]
[select-options]
Package_Name:查询指定的程序包是否已安装,及其版本信息
-a|–all:查询所有已安装过的包
-f File:查询指定的文件由哪个程序包安装生产
-p|–package Package_File:用于实现对未安装的程序包执行查询操作。
–whatprovides CapAbility :查询指定的CapAbility由哪个程序包提供
–whatrequires CapAbility:查询指定的CapAbility被哪个包所依赖
[query-options]
–changelog:查询rpm包的changelog
-l|–list:程序安装生产的所有文件列表
-i|–info:程序包相关的信息,版本号、大小、所属的包组等
-c|–configfiles:查询指定的程序包提供的配置文件
-d|–docfiles:查询指定的程序包提供的文档
–provides:列出所指定的程序包提供的所有的CapAbility
-R|–requires:查询指定的程序包的依赖关系
–scripts:查询程序包自带的脚本片段
用法:
-qi Package :产看程序包的详细信息
-qf file:查看指定的文件由哪个程序安装生成
-qc Package:查看指定程序包安装生成的配置文件
-ql Package:查看指定包安装产生的所有文件
-qd Package:查看指定程序包提供的文档
-p选项为查看未安装程序包的信息,其余选项基本一致,不再解释
-qpi Package
-qpl Package
-qpc file
例1:查看httpd安装包自带的脚本
例2:查看httpd安装包提供的Capability
例3:查看zsh安装包生成的配置文件
例4:查看/etc/zshrc文件由哪个程序包安装生成
例5:查看zsh安装生成的所有文档
5、校验
rpm {-V|–verify} [select-options] [varify-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
包来源合法性验证和完整性验证:
来源合法性验证:数字签名
完整性验证:
获取并导入信任的包制作者的密钥:
rpm –import /etc/pki/rpm-apg/RPM-GPK-KEY-CentOS-7
验证:
(1)安装此组织签名的程序时,会自动执行验证
(2)手动验证:rpm -K Package_File
数据库重建:
rpm管理器数据库路径:/var/lib/rpm
查询操作:通过此处的数据库进行
rpm {–initdb|–rebuilddb}
initdb:初始化数据库,当前无任何数据库时创建一个新的;当前有时不执行任何操作
-rebuilddb:重新构建,通过读取当前系统上所有已安装过的程序包进行创建。
获取帮助:
CentOS6:man rpm
CentOS7:man rpmdb
三、yum命令
yum命令依赖于rpm命令,但是yum自动解决了包的依赖关系,在使用中较rpm更为方便。
yum repository(yum repo):yum 仓库,存储了众多rpm包,以及包相关的元数据文件,放置于特定目录下,此目录需包含软件包和repodata目录
1、 yum仓库提供的方式:
a、本地yum仓库:
本地yum仓库多使用光盘作为yum源,如何使用光盘当作本地yum仓库:
(1)挂载光盘
mount -r -t iso9660 /dev/cdrom /media/cdrom
(2)创建配置文件:yum-config-manager –add-repo=file:///path/to/iso_file
(3)修改配置文件:
设置gpgcheck=0|1;若设置为1;需指定
gpgkey= file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
b、自建yum仓库
当我们有多个零散的rpm包时,可以将这些包组合在一个目录中,配置成yum仓库,方便日常使用
rpm包的获取方式有多种,下面只介绍在ftp服务器中获取rpm包:
(1)登录ftp之后,可以使用!+command使用linux的命令,而不是执行ftp的命令
(2)lcd切换本地目录,这样下载的rpm将包存放于该目录
(3)get下载
如何自建yum 仓库
(1)下载rpm包,
(2)组合在一个目录中
(3)创建repodata: createrepo [options] <dirctory>
createrepo -d somedir
(4)创建yum配置文件: yum-config-manager –add-repo=file:///
(5)修改配置文件:
c、远程yum仓库。
远程服务器要提供yum仓库服务,器本身需要提供以下几种服务中的一种:
ftp://文件服务器
http://
nfs://
file:///
2、yum客户端配置:
配置文件:/etc/yum.conf:提供公共配置。通常不要做修改
etc/yum.repos.d/*.repo:为仓库的指向提供配置。我们使用的常用配置文件。
每个repo结尾的文件对应一个yum服务器,当然也可以将多个yum服务器配置写在同一个配置文件中。但写入不同的文件在管理时操作叫方便
3、仓库的定义:
[repositoryID] #仓库id
name= #仓库名,指定与否皆可
baseurl-url=path/to/repository #指定仓库路径
enabled={1|0} #是否启用此仓库,默认为1,启用
gpgcheck={1|0} #是否检查此仓库中rpm包的合法性,默认为1,检查
gpgkey=url #若gpgcheck为1,则必须给密钥文件路径,否则报错。
file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6
enablegroup={1|0}:是否支持组软件包管理,默认支持。可不做特别指定
yum命令的用法:
显示仓库列表
yum repolist{all|enabled|disabled}
显示程序包:
yum list [all]
yum list {available|installed|updates}
安装程序包:
yum install package1 [package2] …
升级程序包
yum update package1 [package2] …
检查可用升级:
yum check-update
卸载程序包:
yum remove|erase package1 [package2] …
查看程序包information:
yum info […]
查看指定的特性(可以是某文件)是由那个程序包提供:
yum provides | whatprovides feature1 [feature2]…
清理本地缓存
yum clean [all | packages | rpmdb…]
构建缓存
yum makecache
搜索
yum search string1 [string2]…
以指定的关键字搜索程序包名及summary信息
查看指定包所以来的capabilities
yum deplist package1 [package2] …
查看yum事务历史
yum history [list | summary |stats…]
包组管理的相关命令,包组管理使用类似,在此不再做详细介绍:
yum grouplist #查看包组
groupinstall #安装包组
groupupdate #升级
groupremove #删除
groupinfo #查看指定包组的详细信息
注:低版本的系统可以指向搞版本的yum仓库,但高版本的系统不能指向低版本的yum源
CentOS6.0的yum源可以指向6.1等更高的6系列的yum源,但反过来不支持
yum的命令行选项:
–nogpgcheck:禁止进行gpg check
-y:自动回答为yes
-q:静默模式
–disablerepo=[repo]:临时禁用此repo
–enablerepo=[repo]:临时启用此repo
yum的repo配置文件中可用的变量:
应用场景:为多台pc/server配置yum仓库时,不用为每台pc/server指定特别的仓库路径,而是通过变量获取当前系统的基本信息,从而到对应版本的仓库中获取yum源。
$releasever:当前OS的发行版的主版本号
$arch:平台
$basearch:基础平台
$YUM0-$YUM9
http://mirrors.163.com/centos/$releasever/$basearch/os
四、程序包编译安装:
不同语言的编译工具:
C、C++:make(configure–>Makefile.in–>makefile)
java:maven
C代码编译安装三步骤:
1 ./configure:
(1)、通过选项传递参数,指定启用特性、安装路径等;执行时会参考用户的指定及Makefile.in文件生成makefile
(2)、检查依赖的外部环境
2 make:
根据makefile文件,构建应用程序。
3 make install
编译安装前建议:安装前先查看INSTALL、README,可以获取该程序的帮助信息
开源程序源代码的获取:
官方自建站点
代码托管站点:
SourceForge
Github.com
code.google.com
c/c++:gcc(GNU C Complier)GNU C编译器
如何编译安装C源代码程序
前提:准备好开发工具及开发环境。最好安装开发工具包组,当然,也可以单独安装需要的开发工具。
CentOS6: “Development Tools”,“Server Platform Development”
CentOS7: “Development Tools”
开发工具:make、gcc
开发环境:开发库、头文件
glibc:标准库
安装开发包组:yum groupinstall “Development Tools”
第一步:执行configure脚本
选项:指定安装位置、指定启用的特性
–help:获取其支持使用的选项
选项分类:
安装路径设定:
–prefix=/path/to/some_dir:指定默认安装位置
–sysconfdir=/path/to/somewhere:指定配置文件安装路径
System types:
Optional Feature:可选特性
–disable-FEATURE:禁用某特性
–enable-FEATURE[=ARG]:启用某特性
Optional Packages:可选包
–with-PACKAGE[=arg]
–without-PACKAGE
第二步:make
第三步:make install
安装后的配置:
(1)、导出二进制程序目录至PATH环境变量中
编辑/etc/profile.d/NAME.sh (NAME为程序名)
export PATH=/PATH/to/Binary:$PATH
(2)、导出库文件路径
编辑/etc/ld.so.conf.d/NAME.conf
添加新的库文件所在的目录至此文件中
ldcofig –v
(3)、导出头文件
基于链接的方式实现
ln –sv
(4)、导出帮助手册
编辑/etc/man.config文件
添加一个MANPATH
五、实战演练
1、输入若干个数值存入数组中,采用冒泡算法进行升序或降序排序
#!/bin/bash
#
echo "please enter some random number: "
read -a arr
for ((i=0;i<${#arr[@]};i++))
do
for ((j=0;j<${#arr[@]}-1;j++))
do
if [ ${arr[$j]} -gt ${arr[$j+1]} ]
then
tmp=${arr[$j]}
arr[$j]=${arr[$j+1]}
arr[$j+1]=$tmp
fi
done
done
echo "after sort:"
echo ${arr[@]}
for ((i=0;i<${#arr[@]};i++))
do
for ((j=0;j<${#arr[@]}-1;j++))
do
if [ ${arr[$j]} -lt ${arr[$j+1]} ]
then
tmp=${arr[$j]}
arr[$j]=${arr[$j+1]}
arr[$j+1]=$tmp
fi
done
done
echo "anthoer method: "
echo ${arr[@]}
2、删除kernel包后,无法启动,并恢复之
(1)、卸载内核
rpm –e kernel –nodeps
重启之后,无法登陆系统
(2)、进入救援模式
(3)、重新安装内核至/mnt/sysimage;安装耗时较久
rpm -ivh /run/install/repo/Pakages/kernel-3.10.0-327-el7-x86_64.rpm –root=/mnt/sysimage
(4)、重启系统
发现内核已出现在选择面板
登录系统成功
(注:内容太多,容纳不下,编译安装apache单独成文)
原创文章,作者:M20-1钟明波,如若转载,请注明出处:http://www.178linux.com/39372