在学习linux的过程中我们总是要处理各种各样的软件,网络上下载的大部分软件包都会有一些我们用不到的功能,给我们的使用带来了各种不便,所以对我们来说学会制作和使用软件包就是非常重要的事。下面就介绍一下制作软件包
打包成一个文件:二进制程序,库文件,配置文件,帮助文件。
软件包管理器的核心功能:
制作软件包
安装卸载升级查询,校验
软件包的制作常用到两种工具:
前端工具:yum apt-get
后端工具:rpm,dpt
rpm命令:
rpm:
数据库:/var/lib/rpm
rpmbuild:
安装、查询、卸载、升级、校验、数据库的重建、
验证数据包等工作;
rpm命名:
包:组成部分
主包:
bind-9.7.1-1.i586.e15.rpm
子包:
bind-libs-9.7.1-1.i586.e15.rpm
包名格式:
name-version-release.Arch.rpm
bind-major.minor.release-releasse.arch.rpm
主版本号:重大改进
此版本号:某个子功能发生重大变化
发行号:修正了本部分bug,调整了一点功能
rpm:
安装:必须提前下载好安装的文件
rpm -i /path/to/package_file
-h:以#显示进度,每个#表示%2
--replacr重新安装,替换原有的安装
-v:显示详细过程
-vv:更详细过程
--nodeps:忽略依赖关系
--force:强行安装,了以实现重装或者降级
查询
rpm -q package_name 查询指定的包是否安装
-qa 查询所有已安装的包
-qi :查询指定包的说明信息
-ql:查询指定包安装后生成的文件列表
-qc:查询软件包安装的配置文件
-qd:查询指定包安装的帮助文件
-q--scripts:查询指定包中包含的脚本
-qf /path/to.somefiles:查询指定的文件是有哪个rpm包安装生成的
如果某软件包尚未安装我们需要查询其说明信息,安装后会生成的文件;
rpm -qpi /path/to/package_file
rpm -qpl
l:软件包列表
i:软件包信息
升级
rpm -uvh /path/to/new_package_fie:如果装有老版本则审计,否则,则安装
rpm -fvh /path/to/new_package_fie:如果装有老版本则审计,否则,则退出
rpm –ivh --force /path/to/new_package_file:强行安装,覆盖掉原有软件包。
卸载
rpm -e package_name:如果软件包有依赖关系,则不要卸载,否则软件包不能用,若要强行卸载用rpm -e --nodeps package_name --nodeps
校验
rpm -V 包名(package_name)是否被非法改变
检验来源合法性,及软件包完整性:
加密类型:
对称:加密解密使用同一秘钥
公钥:一堆秘钥,公钥,私钥;公钥隐含与私钥中,
可以提取出来,并公开出去;加密速度慢
单向:
/etc/pki/rpm-gds
rpm-gpg-key-redhat-release
-k /path/to/pachage——file
dsa,gpg:验证来源的合法性,也验证前面;可以使用
--nisignature,略过此项
shal,md5:验证软件包完整性;可以使用--nodigest,
略过此项
--import /etc/pki/rpm-gpg/rpm-gpg-key-redhat-release
:导入秘钥文件
重建数据库:
rpm
--rebuilddb:重建数据库,一定会重建数据库,把原
来的覆盖掉
--initadb初始化数据路,没有才建立,有就不用建立
重建数据库,
um repoditory
yum(全称为 Yellow dog Updater, Modified)是一个在Fedora和RedHat以及SUSE中的Shell前端软件包管理器。基於RPM包管理,能够从指定的服务器自动下载RPM包并且安装,可以自动处理依赖性关系,并且一次安装所有依赖的软体包,无须繁琐地一次次下载、安装。yum提供了查找、安装、删除某一个、一组甚至全部软件包的命令,而且命令简洁而又好记
yum仓库中的袁数据文件:
Primary.xml.gz 当前所有rpm包列表,包含依赖关系每一个rpm(软件包)安装生成的文件列表
Filelists.xml.gz:当前仓库内虽有的rpm包的所有的文件列表
Other.xml.gz:额外信息,rpm包的修改日志信息
Repomd.xml:记录上面三个文件的时间戳和校验和
compa*.xml:rpm包分组信息 release-notes
配置yum仓库:下面这四个路径,每个路径都独立的yum园
ftp://172.16.0.1/pub/{server,VT,cluster,clusterstorage}
如果我们想要本地主机要想使用自己的路径来当做安装rpm包时yum仓库的话,就需要告诉yum库本地目录有哪些yum库可用。
yum 的配置文件 /etc/yum.conf
[main]:核心片段
cachedir=/var/cache/yum:缓存路径
keepcache=0:是否保存缓存区中的文件
debuglevel=2:调试级别
logfile=/var/log/yum.log:日志
distroverpkg=redhat-release:发行版版本号的名称
tolerant=1:容错
exactarch=1:精确的,严格检查平台版本
obsoletes=1:过期的要不要废弃
gpgcheck=1:要不要检查
plugins=1:提供插件
如何为yum定义repo文件
[Repo_ID]:标识
name=Description(真正意义上的名称)
baseurl=
ftp://(repo 所在位置)
http://
file:///:根路径
enabled={0|1}:0表示禁用,1表示启用
gpgcheck={0|1}:检查gps的完整性
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release
yum使用格式:yum [options] [command] [package ...]
-y:自动回答为yes
--nogpgcheck
list:列表
all:默认的
available:仓库中有但是尚未按章的,可用的
installed:已经安装的
updates:可用的升级
yum clean:清理缓存
[packages|headers|metadata|dbcache|all]
yum repolist:显示repo列表及其简要信息
all:
enabled:默认
disabled
install:安装
yum install PACKAGE_NAME
updata 升级
updata to *升级为指定版本
卸载:yum remove|erase
yum provides|whatprovides:查看指定的文件是由哪个文件生成
groupinfo:显示组内包含的包,
grouplist:列出当前所有组
search:使用模糊查找的方式查找
localinstall:本地安装
yum localinstall php53-mysql-5......:可以解决依赖关系
如何创建yum 仓库:
createrepo:这是一个rpm包,不用进入yum.repos.d就可以创建
#yum grouplist
#yum instaill createrepo
如何以光盘做yum库
先把光盘挂载上
mkdir /media/cdrom
mount –r /dev/cdrom /media/cdrom
之前我们在yum.repos.d中编辑过Server.repo ,如果我们把它改名为Server.repo.backup:mv Server.repo Server.repo.backup,此时这个文件就不能用了,这时我们就要用到光盘。
RPM安装:
二进制格式:别人已经将源码编译好的,有些特性是在编译时选定的,如果编译未选定此特性,rpm包将无法使用;rpm包的版本会落后于源码包,甚至落后很多,这时我们就要定制了:即手动编译安装,而编译要用到编译环境或开发环境。
make:项目管理工具
makefile:定义make按何种次序区编译这些源程序文件中的源程序
其调用这些源程序文件中的源程序
automake-->makefile.in-->makefile
autoconf-->configure
100个可选特性
make install 安装
编译安装的三步骤
前提:准备开发环境
./congigure 功能:让用户选定编译特性;检查编译环境;
--prefix=/path/to/somewhere
--sysconfidir=/path/to/conffile_path
功能:1、让用户选择编译特性
2、检查编译环境
make
make install
#tar xf tengine-1.4.2.tar.gz
cd tengine-1.4.2
./configure--prefix=/usr/local/tengune--conf-path=/etc/tengine/tengine.conf--without-http_rewrite_module(有某种关系,类似于依赖)
#make
#make install
#cd /usr/local/tengine/skin/nginx
1、修改path环境变量,以能够识别此程序的二进制文件路径
修改/etc/profile文件
在/etc/profile.d/目录建立一个以.sh为名称后缀的在里面定义export,PATH=$PATH:/path/to/somewhere
2、默认情况下,系统搜索库文件的路径/lib,
/usr/lib;要增添额外的搜寻路径
在?etc/ld.so.conf.d/中创建以.conf为后缀的文件而后把增添的路径直接写到此文件中;
ldconfig通知系统重新搜索库文件
-v:显示重新搜寻的库过程
3、头文件#include输出给系统
默认:/usr/include
增添头文件搜寻路径,使用链接文件
两种方式:
ln -s /usr/loacl/tengine/include/*/usr/include每一个文件都链接
ln -s /usr/loacl/tengine/include/ /usr/include/tengine:给目录创建链接
man文件路径:安装在--prefix 指定的目录下的man目录:
/usr/share/man
1、man -M /PATH/TO/MAN_DIR COMMAND
2、在/etc/man.config中添加一条manpath
netstat命令;
-r:显示路由表
-n:以数字的方式
-t:建立的tcp的链接
-u:显示udp连接
-l:显示监听状态的链接
-p:显示监听指定套接字的进程及进程名