软件包管理器的核心功能:
打包成一个文件:二进制程序,库文件,配置文件,帮助文件。
生成数据库:追踪所安装的每一个文件。
软件包管理的核心功能:
1.制作软件包。
2.安装、卸载、升级、查询、校验。
依赖关系:
一个软件包安装需要其他已安装的软件包的支持。
rpm:
rpm包命名:
主包:
NAME-VERSION-RELEASE.ARCH.rpm
子包:
NAME-MAJOR.MINOR.RELEASE-RELEASE-ARCH.rpm
主版本号(MAJOR)重大改进。
此版本号(MINOR):某个子功能发生重大变化
发行号(RELEASE):修正了部分bug,调整了一点功能。
#rpm [OPTION] PACKAGE
数据库存放在/var/lib/rpm
[OPTION]
-a 显示所有已安装的软件包。
-i 安装。
-e 卸载。
-V 校验已安装的软件包。
校验结果为8个字符表示。
. 通过验证,无问题。
? 无法执行。
S 文件大小变化。
M 模式改变,例如文件类型、权限等。
5 md5值改变。
D 设备主次版本号不匹配。
L readlink不匹配。
U 属主变化
G 属组变化。
T 修改时间变化。
-K 验证软件包。
dsa、gpg 验证来源合法性,即验证签名。
sha1、md5 验证软件包完整性。
--nosignature 只验证来源合法性。
--nodigest 只验证完整性。
--import KEY 导入秘钥文件。
/etc/pli/rpm-gpg/
--rebuilddb 重建数据库。不管数据库是否存在都重新创建。
数据库在/var/lib/rpm/下。
--initdb 初始化数据库。没有才建立,有则不建立。
-h --hash 打印50个#号显示安装进度,每个#号表示2%的进度。
-v 显示详细过程。
-vv 显示更详细的过程。
--nodeps 忽略依赖关系。
--replacepkgs 重新安装,替换原有的安装。
--replacefiles 替换文件。
--oldpackages 降级安装。
--force 强行安装,实现重装或降级。等同于--replacepkgs + --replacefiles + --oldpackages。
-q 查询软件包是否已安装。
-qa 显示所有已安装的包。
-qi 查询软件包的相关信息。
-ql 查询软件包安装后生成的文件列表。
-qf FILE 查询制定的文件是由那个rpm包安装生成的。
-qc 查询软件包生成的配置文件。
-qd 查询软件包生成的帮助文件。
-q --scripts 查询软件包中包含的脚本。包含4类脚本:安装前、后和卸载前、后。
-qpi 查询未安装的软件包的相关信息。
-qpl 查询未安装的软件包生成的文件列表。
-Uvh 升级软件包。如果有旧版本,则升级,若没有则安装新版本。
-Fvh 升级软件包。如果有旧版本,则升级,若没有则退出。
例如:
#rpm -ivh httpd-xxxxx.rpm
#rpm -ivh --force httpd-xxxxx.rpm
#rpm -q httpd-xxxx.rpm
#rpm -qa | grep "httpd*"
#rpm -qi httpd-xxxxx.rpm
#rpm -ql httpd-xxxx.rpm | more
#rpm -qf /etc/yum.conf
#rpm -Uvh httpd-xxxx.rpm
#rpm -Uvh --oldpackages httpd-old-xxxxx.rpm
#rpm -e --nodeps httpd-xxxx.rpm
yum:
yum仓库中中的元数据文件:
primary.xml.gz
所有RPM包的列表。
依赖关系。
每个RMP安装生成的文件列表。
filelists.xml.gz
当前仓库中所有的RPM包的所有文件列表。
other.xml.gz
额外信息,RPM包的修改日志。
repomd.xml
包含filelists.xml.gz other.xml.gz primary.xml.gz的时间戳和校验和。
comps*.xml
RPM包的分组信息。
yum的配置文件:
/etc/yum.conf
创建yum仓库:
1.拷贝所有的rpm包到目录。
2.使用createrepo命令生成仓库。
3.如果需要建立包组,需要在源文件夹内找到comps*.xml文件。使用-g选项 comps*.xml REPO_dir。
#createrepo [OPTION] REPO_DIR
-g FILE 创建组。需要comps*.xml文件。
为yum定义repo文件:
/etc/yum.repos.d/ repo文件都放在此文件夹下。
格式如下:
[REPO_NAME] repo源的名称。
name=DESCRIPTION 描述信息。
baseurl=REPO_DIR yum仓库的的位置,支持ftp、http、file三种方式。
ftp://
http://
file:///
enabled=0|1 是否启用此repo源,0表示禁用,1表示启用。
gpgcheck=0|1 是否使用gpg验证,0表示禁用,1表示启用,启用要指定gpgkey的路径
gpgkey=KEY_DIR
ftp://
http://
file:///
#yum [OPTION] COMMAND PACKAGE ...
[OPITON]
-y 自动回答为yes。
--nogpgcheck 禁用gpg验证。
COMMAND
list 列表
all 所有。默认。
available 所有可用的。仓库中有但未安装的。
installde 已安装的。
updates 可用的升级。
clean 清理缓存。
packages rpm包。
headers 头部信息。
meatdate 元数据文件。
dbcache rpm库缓存。
all 全部。
repolist 列出repo源列表和简要信息。
all 全部repo源。
enabled 启用的repo源。默认。
disabled 禁用的repo源。
install 安装。
update 升级。
update_to 升级为指定版本。
remove|erase 卸载。
如果包有依赖性关系,则会将所有有依赖关系的包全部卸载。
info 显示包的相关信息。比rpm -qi要简要。
provides|whatprovides 查看文件或特性是由哪个包安装生成的,等同于rpm -qf。
groupinfo GOURPK_NAME 显示指定包组的相关信息。
grouplist 列出所有的软件包组。
groupinstall 安装软件包组。
groupremove 移除软件包组。
groupupdate 升级软件包组。
reinstall 重新安装。
downgrade 降级软件包。
localinstall 安装本地包。
make 项目管理工具
makefile文件
定义了make命令(调用gcc,g++等)按何种次序去编译这些源程序文件中的源程序。
automake --> makefile.in -->makefile
autoconf --> configure
编译安装的3步骤:
前提:需要开发环境(编译环境)
#yum groupinstall "Development Tools" "Development Libaries" ...
所有操作都是在源码包解压文件目录下操作。
1.#./configure
功能:
1.让用户选定编译特性。
2.检查编译环境。
--help 获取脚本使用格式。
--prefix=INSDIR 指定软件安装位置。
--sysconfigdir=CONFDIR 指定配置文件的路径。
2.#make
3.#make install
编译后执行程序:
1.修改/etc/profile中的PATH环境变量。以此能够识别此程序的二进制文件路径。注销后重新登陆即可生效。
#vim /etc/profile
PATH=$PATH:DIR
或者在/etc/profile.d/目录下建立.sh文件。在里边定义export PATH=$PAHT:DIR
2.创建.conf文件。
默认情况下,系统搜索文件库的路径只有/lib和/usr/lib。要添加额外的搜索路径,要在/etc/ld.so.conf.d/中创建以.conf为后缀名的文件。而后把要增加的二进制文件路径写入此文件中。
#vim /etc/ld.so.conf.d/SWNAME.sh
BINDIR
#ldconfig [OPTION] 重新搜寻库文件。
-v 显示过程。
3.头文件
默认位置:/usr/include
增加头文件搜索路径,使用链接进行:
1,把每个头文件链接过去。
ln -s /usr/local/SWNAME/include/* /usr/include/
2.把文件夹链接过去。
ln -s /usr/local/SWNAME/include /usr/include/SWNAME
4.man文件路径:
默认路径在/etc/man.conf配置文件中的MANPAHT字段定义。
#vim /etc/man.config
MANPATH=DIR
或者使用-m DIR 指定软件的man文档位置。每次都得指定路径。
#man -M DIR COMMAND
1.写一个脚本生成repo文件。
#!/bin/bash
REPOFILE=/etc/yum.repo.d/$1
if [ -e $RPEOFILE];then
echo "$1 exists"
exit 3
fi
read -p "Enter repo filename,quit exit:"REPOID
until [ $REPOID == 'quit'];do
echo [$REPOID] >> $REPOFILE
read -p "repo name:"REPONAME
echo "name=$REPONAME" >> $REPOFILE
read -p "repourl:"$REPOULR
echo "baseurl=$REPOURL" >> $REPOFILE
echo -e"enabled=1\ngpgcheck=0" >> $REPOFILE
read -p "Enter repo filename,quit exit:"REPOID
done