源代码包命名:name-VERSION.tar.gz
rpm包命名:name-VERSION-release.arch.rpm
VERSION:major.minor.release
arch:
x86:i386,i486,i586,i686
x86_64:x64,x86_64,amd64
powerpc:ppc
无平台:noarch
包之间:存在依赖关系,使用包管理的前端工具,可自动化解决包的依赖关系
yum:rpm包管理器的前端工具
apt-get:deb包管理器的前端工具
zypper:suse上的rpm前端管理工具
dnf:Fedora 22+ rpm包管理器的前端管理工具(CentOS7使用)
查看二进制程序所依赖的库文件:(程序需要调用很多库文件)
[root@localhost ~]# ldd /bin/ls linux-vdso.so.1 => (0x00007ffca11f0000) libselinux.so.1 => /lib64/libselinux.so.1 (0x0000003d91600000) librt.so.1 => /lib64/librt.so.1 (0x0000003d90600000) libcap.so.2 => /lib64/libcap.so.2 (0x0000003d93200000) libacl.so.1 => /lib64/libacl.so.1 (0x0000003d9b600000) libc.so.6 => /lib64/libc.so.6 (0x0000003d8fe00000) libdl.so.2 => /lib64/libdl.so.2 (0x0000003d8fa00000) /lib64/ld-linux-x86-64.so.2 (0x0000003d8f600000) libpthread.so.0 => /lib64/libpthread.so.0 (0x0000003d90200000) libattr.so.1 => /lib64/libattr.so.1 (0x0000003d9fe00000) [root@localhost ~]#
管理和查看本机装载的库文件:
ldconfig(/sbin/ldconfig)
-p:显示本机已经缓存的所有可用库文件名及其路径映射关系
配置文件:/etc/ld.so.conf /etc/ld.so.conf.d/*.conf
缓存文件:/etc/ld.so.cache
程序包管理:
将编译好的应用程序的各组成文件打包一个或几个程序包文件,从而方便快捷地实现程序包的安装、卸载、查询、升级和校验等管理操作
1、程序的组成清单(每个包独有)
文件清单
安装或卸载的脚本
2、数据库(公共)
程序包名称及版本
依赖关系
功能说明
安装生成的各文件的文件路径及校验码信息
程序包的管理方式:
包管理器:rpm
包管理器的前端工具:yum,dnf
获取程序包的途径:
1、系统发行版的光盘或官方的服务器
镜像:mirrors.aliyun.com;mirrors.163.com
2、项目官方站点
apache,nginx,mariadb
3、第三方组织:
Fedora-EPEL(很强大的第三方源,建议安装)
搜索引擎:pkgs.org;rpmfind.net;rpm.pbone.net
4、diy
tips:检查合法性,来源合法性,程序包的完整性
RPM:
安装,卸载,升级,查询,校验,数据库维护
安装:
rpm {-i|--install} [install-options] PACKAGE_FILE
-v:详细信息(-vv)
-h:以#显示程序包安装进度
{install-options}
--test:测试安装;dryrun模式
--nodeps:忽略依赖关系(两个包互相依赖时使用)
--replacepkgs:重新安装
--nosignatura:不检查来源合法性
--nodigest:不检查包完整性
--noscripts:不执行程序包脚本片段
一般使用 rpm -ivh PACKAGE_FILE进行程序包的安装
升级:
rpm {-U|--upgrade} [install-options] PACKAGE_FILE ...
rpm {-F|--freshen} [install-options] PACKAGE_FILE ...
upgrade:安装有旧版程序包,则升级;反之执行安装过程
freshen:安装有旧版程序包,则升级;反之不执行
--oldpackage:降级
--force:强行升级
tips:不要对内核做升级操作;linux支持多内核版本并存,因此请直接安装新版本内核即可
如果原程序包的配置文件有过修改,升级时,新版本的配置文件不会覆盖老版本的配置文 件,而会重命名为FILENAME.rpmnew保留
查询:
rpm {-q|--query} [select-options] [query-options]
[select-options]
-a:所有包
-f:查看指定的文件是由哪个程序包安装生成
[root@localhost ~]# rpm -qf /bin/ls coreutils-8.4-37.el6.x86_64 [root@localhost ~]# rpm -e --nodeps coreutils-8.4-37.el6.x86_64 [root@localhost ~]# ls -bash: /bin/ls: No such file or directory
-p /PATH/TO/PACKAGE_FILE:针对尚未安装的程序包做查询操作
--whatprovides:查询指定的功能由哪个包提供
--whatrequires:查询指定的功能被哪个包所依赖
[query-options]
--changelog:更新日志
-c:查询程序的配置文件
-d:查询程序的文档
-i:information信息
--scripts:程序包自带的脚本片段
-R:查询指定的程序包所依赖的能力
--provides:列出指定程序包所能提供的能力(CAPABILITY)
卸载:
rpm {-e|--erase} [--allmatches] [--nodeps] [--noscripts]
[--notriggers] [--test] PACKAGE_NAME ...
校验:
rpm {-V|--verify} [select-options] [verify-options]
使用非对称加密对程序包进行加密,使用私钥加密,公钥开放,校验时,如果开放公钥无法进行校验,则证明此包的来源合法性及完整性不正确。
导入所需要的公钥:
rpm --import /PATH/TO/PUBLIC-KEY
发行版光盘会自带密钥文件
数据库重建:
数据库位置:/var/log/rpm/
rpm {--initdb|--rebuilddb}
initdb:初始化
rebuilddb:重建
YUM:(C/S架构)
yum repository:yum repo
存储了众多的rpm包,以及包的相关的远数据文件
yum客户端:
配置文件:
/etc/yum.conf:所有仓库的公共配置
/etc/yum.repos.d/*.repo:仓库的指向提供配置
仓库指定的定义:
[repoID]
name=
baseurl=指向repodata文件的父目录
{ftp://
https://
nfs://
file:// }
enable=1|0 是否启用
gpgcheck=1|0 是否校验
gpgkey=密钥文件
enablegroups=1|0 组启用
failovermethod=roundrobin|priority
故障处理方式:默认为roundrobin(随机)
cost=
(默认1000)
显示仓库列表
yum repolist all|enable|disable
显示程序包
yum list available|installed|updates
安装程序包
yum install package...
升级程序包
yum update package...
yum reinstall package.. 重新安装
检查可用升级
yum check-update
卸载程序包
yum remove|erase package...
查看程序包信息
yum info package...
查看指定的特性是由哪个程序包提供
yum provides|whatprovides feature...
清理本地缓存
yum clean all
构建缓存
yum makechche
搜索
yum search string...
以指定的关键字搜索程序包名及summary信息
查看依赖
yum deplist package
查看yum事务
yum history [info|list|packa`ges-list|packages-info|summary|addon-info|redo|undo|rollback|new|sync|stats]
包组管理命令
groupinstall
groupupdate
grouplist
groupremove
groupinfo
命令行选项:
--nogpgcheck:禁止进行gpg check; 优先于仓库配置文件
-y: 自动回答为“yes”;
-q:静默模式;
--disablerepo=repoidglob:临时禁用此处指定的repo;
--enablerepo=repoidglob:临时启用此处指定的repo;
--noplugins:禁用所有插件;
使用光盘当做本地yum仓库
1、挂载光盘
mount -r /dev/cdrom /media/cdrom
2、配置文件
[CentOS7]
name=
baseurl=
gpgcheck=
enabled=
yum的repo配置文件中可用的变量:
$releasever: 当前OS的发行版的主版本号;
$arch: 平台;
$basearch:基础平台;
$YUM0-$YUM9
3、查看仓库列表是否成功
yum repolist
手动创建yum仓库
安装createrepo
yum install createrepo
创建仓库
createrepo DIR (DIR指向RPM包的文件夹)
配置文件
程序包编译安装:
testapp-VERSION-release.src.rpm --> 安装后,使用rpmbuild命令制作成二进制格式的rpm包,而后再安装;
源代码组织格式:
多文件:文件中的代码之间,很可能存在跨文件依赖关系;
C、C++: make (configure --> Makefile.in --> makefile)
项目管理工具makefile由Makefile.in生成,
编译安装三步骤:
./configure:
(1) 通过选项传递参数,指定启用特性、安装路径等;执行时会参考用户的指定以及Makefile.in文件生成makefile;
(2) 检查依赖到的外部环境;
make:
根据makefile文件,构建应用程序;
make install
开发工具:
autoconf: 生成configure脚本
automake:生成Makefile.in
tips:安装前查看INSTALL,README
编译C源代码:
前提:提供开发工具及开发环境
开发工具:make, gcc等
开发环境:开发库,头文件
glibc:标准库
通过“包组”提供开发组件
CentOS 6: "Development Tools", "Server Platform Development",
安装后的配置:
(1) 导出二进制程序目录至PATH环境变量中;
编辑文件/etc/profile.d/NAME.sh
export PATH=/PATH/TO/BIN:$PATH
(2) 导出库文件路径
编辑/etc/ld.so.conf.d/NAME.conf
添加新的库文件所在目录至此文件中;
让系统重新生成缓存:
ldconfig [-v]
(3) 导出头文件
基于链接的方式实现:
ln -sv
(4) 导出帮助手册
编辑/etc/man.config文件
添加一个MANPATH