软件包管理
应用程序:
程序:Architercture
c语言:源代码-->(编译)二进制格式
脚本:解释器(二进制程序)
源代码-->编译-->链接-->运行
程序:
库:程序开发依赖库
静态
动态
静态链接
动态链接:利用共享库
程序:指令+数据
text 代码段
Data+bss 初始化为0的变量
heap 堆
stack 栈
配置文件
dir=/path/to/somewhere
程序组成部分;
二进制程序,库,配置文件,帮助文件
/boot,/etc,/usr,/var,/dev,/lib,/tmp,/bin,/sbin,/proc,/sys,/mnt,/media,/home,/root,/misc,/opt,/srv
/etc,/bin,/sbin,/lib,/usr/share/man
系统启动就需要用到的程序,这些目录不能挂载额外的分区,必须在根文件系统的分区上
/usr/
bin
sbin
lib
操作系统核心功能,可以单独分区
/usr/local
bin
sbin
lib
etc
man
/opt
/proc
/sys
不能单独分区,默认为空
/dev:设备,不能单独分区
udev
/root 不能单独分区
/var:建议单独分区
/boot:内核,initrd(initramfs)
内核:
POST(自检)-->BIOS(HD)-->(MBR)bootloader(文件系统类型,ext2,ext3)-->内核
程序:指令+数据
指令:芯片
cpu:普通指令,特权指令
指令集:cat /proc/cpuinfo
c语言:
Powerpc:二进制格式
x86:
软件包管理器的核心功能:
1.制作软件包
2.安装,卸载,升级,查询,校验
Redhat,SUSE,Debian
Redhat,SUSE:rpm
redhat package manager
rpm is package manager
Debian:dpt
依赖关系:
X-->Y-->Z
前端工具:yum apt-get
后端工具:RPM,dpt
yum:Yellowdog Update Modifier
rpm命令:
rpm:
数据库:/var/lib/rpm
rpmbuild:
安装,查询,升级,卸载,校验,数据库的重建,验证数据包等工作
rpm命名:
包:组成部分
主包:
bind-9.7.1-1.i586.el5.rpm
子包:
bind-libs-9.7.1-1.i586.el5.rpm
bind-utils-9.7.1-1.i586.el5..rpm
报名格式:
name-version-release.arch.rpm
bind-major.minor.release-release.arch.rpm
主版本号:重大改进
次版本号:某个子功能发生重大变化
发行号:修正了部分bug,调整了一点功能
bind-9.7.1.tar.gz
rpm包:
二进制格式
rpm包作者下载源程序,编译配置完成后,制作成rpm包
bind-9.7.1-1.noarch.rpm
bind-9.7.1-1.ppc.rpm
源码格式
1.安装:
rpm -i/path/to/package_file
-h:以#显示进度,每个#表示2%
-v:显示详细过程
-vv:更详细的过程
rpm-ivh /PATH/TO/PACKAGE_FILE
--nodeps:忽略依赖关系
--replacepkgs:重新安装,替换原有安装
--force:强行安装,可以实现重装或降级
2.查询
rpm -qPACKAGE_NAME:查询指定的包是否已经安装
rpm-qa :查询已经安装的软件包
rpm-qi PACKAGE_NAME:查询指定包的说明信息
rpm-ql PACKAGE_NAME:查询指定包安装后生成的文件列表;
rpm-qc PACKAGE_NAME:查询指定包安装的配置文件
rpm-qd PACKAGE_NAME:查询指定包安装的帮助文件
rpm -q--scripts PACKAGE_NAME:查询指定包中包含的脚本
rpm-qf /path/to/somefile:查询指定的文件是由那个rpm包安装生成的
如果某rpm包未安装,我们需查询其说明信息,安装以后会生成的文件
rpm-qpi /path/to/package_file
rpm-qpl
3.升级
rpm-Uvh /path/to/new_package_file:如果装有老版本的,则升级;否则,则安装
rpm-Fvh /path/to/new_package_file:如果装有老版本的,则升级;否则,则退出
--oldpackage:降级
4.卸载
rpm -epackage_name
--nodeps
5.检验
rpm -Vpackage_name
6、重建数据库
rpm
--rebuilddb: 重建数据库,一定会重新建立;
--initdb:初始化数据库,没有才建立,有就不用建立;
7、检验来源合法性,及软件包完整性;
加密类型:
对称:加密解密使用同一个密钥
公钥:一对儿密钥,公钥,私钥;公钥隐含于私钥中,可以提取出来,并公开出去;
单向:
# ls/etc/pki/rpm-gpg/
RPM-GPG-KEY-redhat-release
rpm -K/PAPT/TO/PACKAGE_FILE
dsa, gpg: 验正来源合法性,也即验正签名;可以使用--nosignature,略过此项
sha1, md5: 验正软件包完整性;可以使用--nodigest,略过此项
rpm--import /etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release: 导入密钥文件
ls/media/
mkdir/media/cdrom
mount-r /dev/cdrom /media/cdrom/
cd/media/cdrom/
ls
cdServer/
ls
ls re*
cdrepodata/
HTML:HyperText Mark Language
XML:eXtended Mark Language
XML,JSON: 半结构化的数据
yum仓库中的元数据文件:
primary.xml.gz
所有RPM包的列表;
依赖关系;
每个RPM安装生成的文件列表;
filelists.xml.gz
当前仓库中所有RPM包的所有文件列表;
other.xml.gz
额外信息,RPM包的修改日志;
repomd.xml
记录的是上面三个文件的时间戳和校验和;
yuminstall zsh
comps*.xml:RPM包分组信息
cat/etc/yum.conf
cd/etc/yum.repos.d/
catredhat.repo
如何为yum定义repo文件
[Repo_ID]
name=Description
baseurl=
ftp://
http://
file:///
enabled={1|0}
gpgcheck={1|0}
gpgkey=
vimserver.repo
[Base]
name=RHEL5Sever
baseurl=ftp://172.16.0.1/pub/Server
enabled=1
gpgcheck=0
[VT]
name=RHEL5VT
baseurl=ftp://172.16.0.1/pub/VT
enabled=1
gpgcheck=0
yum[options] [command] [package ...]
-y: 自动回答为yes
--nogpgcheck
list: 列表
支持glob
all
available:可用的,仓库中有但尚未安装的
installed: 已经安装的
updates: 可用的升级
clean:清理缓存
[ packages | headers | metadata | dbcache |all ]
repolist:显示repo列表及其简要信息
all
enabled: 默认
disabled
install:安装
yuminstall PACKAGE_NAME
update:升级
update_to:升级为指定版本
remove|erase:卸载
info:
provides|whatprovides: 查看指定的文件或特性是由哪个包安装生成的;
groupinfo
grouplist
groupinstall
groupremove
groupupdate
/media/cdrom/{Server,VT,Cluster,ClusterStorage}
如何创建yum仓库:
createrepo
mkdir-pv /yum/VT
cp/media/cdrom/VT/*.rpm /yum/VT/
cd/yum/VT/
cd/etc/yum.repos.d/
vimcdrom.repo
[Base]
name=RHEL5CDROM Server
baseurl=file:///media/cdrom/Server
enabled=1
gpgcheck=0
[VT]
name=VT
baseurl=file:///yum/VT
enabled=1
gpgcheck=0
yumlist all
createrepo/yum/VT/
yumrepolist
RPM安装:
二进制格式:
源程序-->编译-->二进制格式
有些特性是编译选定的,如果编译未选定此特性,将无法使用;
rpm包的版本会落后于源码包,甚至落后很多;bind-9.8.7, bind-9.7.2
定制:手动编译安装
编译环境,开发环境
开发库,开发工具
Linux:C,
GNU: C
C,C++:
gcc:GNU C Complier, C
g++:
make: 项目管理工具,
makefile: 定义了make(gcc,g++)按何种次序去编译这些源程序文件中的源程序
automake,--> makefile.in --> makefile
autoconf,--> configure
100个可选择特性,
make install
编译安装的三步骤:
前提:准备开发环境(编译环境)
安装"DevelopmentTools"和"Development Libraries"
# tar
# cd
#./configure
--help
--prefix=/path/to/somewhere
--sysconfdir=/PATH/TO/CONFFILE_PATH
功能:1、让用户选定编译特性;2、检查编译环境;
# make
# makeinstall
# tarxf tengine-1.4.2.tar.gz
# cdtegnine-1.4.2
#./configure--prefix=/usr/local/tengine --conf-path=/etc/tengine/tengine.conf
# make
# makeinstall
#/usr/local/tengine/sbin/nginx
1、修改PATH环境变量,以能够识别此程序的二进制文件路径;
修改/etc/profile文件
在/etc/profile.d/目录建立一个以.sh为名称后缀的文件,在里面定义exportPATH=$PATH:/path/to/somewhere
vim /etc/profile.d/httpd.sh
export PATH=$PATH:/usr/loca/apaceh/bin
2、默认情况下,系统搜索库文件的路径/lib, /usr/lib; 要增添额外搜寻路径:
在/etc/ld.so.conf.d/中创建以.conf为后缀名的文件,而后把要增添的路径直接写至此文件中;
# ldconfig 通知系统重新搜寻库文件
-v: 显示重新搜寻库的过程
vim /etc/ld.so.conf.d/httpd.conf
/usr/local/apache/lib
3、头文件:输出给系统
默认:/usr/include
增添头文件搜寻路径,使用链接进行:
/usr/local/tengine/include/ /usr/include/
两种方式:
ln -s /usr/local/tengine/include/*/usr/include/ 或
ln -s /usr/local/tengine/include /usr/include/tengine
4、man文件路径:安装在--prefix指定的目录下的man目录;/usr/share/man
1、man -M/PATH/TO/MAN_DIR COMMAND
2、在/etc/man.config中添加一条MANPATH
tar
cd
./configure--prefix=/usr/local/apache --sysconfdir=/etc/httpd
make
makeinstall