API:Application Programming Interface ==>软件开发接口
POSIX :Portable OS
程序源代码 –> 预处理 –> 编译 –> 汇编 –>链接
静态编译 : .a
共享编译(动态编译):.so
ABI:Programming Binary Interface ==>软件运行接口
Windows和linux不兼容
库级别的虚拟化:
linux:WINE
Windows:Cywin
C程序编译过程
JAVA程序运行
开发语言
C
C++
运用级开发
java , delphi , python, go , php , perl, ruby
包管理器
二进制应用程序的组成部分:
二进制文件,库文件,配置文件,帮助文件
程序包管理器:
debian:deb文件===》dpkg包管理器
redhat:rpm文件===》rpm包管理器 ===》 redhat package manager
因为我们现在主流用的是centos,所以我们主要来看看rpm包管理器
包命名
源代码: name-VERSION.tar.gz|bz2|xz
VERSION:major(主).minor(次).relsase
rpm包命名方式:
name-VERSION-release.arch.rpm
例:bash-4.2.46-19.el7.x86_64.rpm
name:bash
VERSION:4.2.46
release:19.el7 (release.OS)
arch:x86_64
常见的arch:
x86: i386, i486, i586, i686
x86_64: x64, x86_64, amd64
powerpc: ppc
包:分类和拆包
Application-VERSION-ARCH.rpm: 主包
Application-devel-VERSION-ARCH.rpm 开发子包
Application-utils-VERSION-ARHC.rpm 其它子包
Application-libs-VERSION-ARHC.rpm 其它
包之间:可能存在依赖关系,甚至循环依赖(装A包时,提示要装B,C包,装B包时,又提示要装X包…..)
解决依赖包管理工具:
yum:rpm包管理器的前端工具
apt-get:deb包管理器前端工具
zypper:suse上的rpm前端管理工具
dnf:fedora 18+ rmp包管理器前端管理工具
库文件file
查看二进制程序所依赖的库文件
ldd /path/to/binary_file
管理查看本机装载的库文件
ldconfig
/sbin/ldconfig -p :显示本机已经缓存的所有可用库文件名妓文件路径映射关系
配置文件: /etc/ld.so.conf , /etc/ld.so.conf.d/*.conf
缓存文件: /etc/ld.so.cache
程序包管理器:
功能:将编译好的应用程序的各组成文件打包一个或几个程序包文件,从而方便快捷的实现
程序包的安装,卸载,查询,升级和校验等管理操作
-
包文件组成(包独有内的文件)
RPM包内的文件
RPM的元数据,如名称,版本,依赖性,描述等
安装或卸载时运行的脚本
2.数据库(公共)
程序包名称及版本
依赖关系
功能说明
包安装后生成的各文件路径及校验码信息
程序包的来源
管理程序包
使用包管理器:rpm
使用前端工具:yum,dnf
获取程序包途径:
1.系统发行版的光盘或官方的服务器
CentOS 镜像:
https://www.centos.org/download/
http://mirrors.aliyun.com
http://mirrors.sohu.com
http://mirrors.163.com
2.项目官方站点
3.第三方组织
搜索引擎:
http://pkgs.org
http://rpmfind.net
http://rpm.pbone.net
https://sourceforge.net/
4.自己制作
注意:要检查其合法性: 来源合法性,程序包的完整性
rmp包管理
rpm -e rpm -qa rpm -ql rpm -qf
rpm -i
安装:
rpm
-i或–install [install-options] package_file
-v:显示详细过程
-vv:显示更详细的过程
-h:以#显示程序包管理执行进度
rmp -ivh package_file…
显示yum-3.4.3-132.el7.centos.0.1.noarch 已安装
[install-options]
–test:测试安装,但不真正执行安装;dry run模式
–nodeps:忽略依赖关系
–replacepkgs|replacefiles
–nosignature:不检查来源合法性
–nodigest:不检查包完整性
–noscipts:不执行程序包脚本片段
%pre :安装前脚本;–nopre
%post:安装后脚本;–nopost
%preun:卸载前脚本;–nopreun
%postun:卸载后脚本;–nopostun
rpm包升级:
-U 或–upgrade [install-options]package_file
-F 或–freshen [install-options]package_file
upgrade:安装有旧版程序包,则升级
如果不存在旧版程序包,则安装
freshen:安装有旧版程序包,则升级
如果不存在旧版程序包,则不执行升级操作
rmp -Uvh packa_file…
rmp -Fvh packa_file…
–oldpackage:降级
–force:强行升级
注意:1.不要对内核做升级操作;linux支持多内核版本并存,因此,会直接安装新版本内核
2.如果原程序包的配置文件安装后曾被修改,升级时,新版本的提供的同一个配置文件
并不会直接覆盖老版本的配置文件,而把新版本的文件重命名(filename.rpmnew)后保留
卸载:
rmp -e packa_name
–allmatches :卸载所有品牌指定名称的程序包的各版本
–nodeps:忽略依赖关系
–test:测试卸载
rpm包查询
rpm {-q|–query} [select-options] [query-options]
[select-options]
-a:所有包
-f:查看指定的文件由哪个程序包安装生成
-p rpmfile:针对尚未安装的程序包文件做查询操作
–whatprovides CAPABILITY :查询指定的CAPABILITY由哪个包所提供
–whatrequires CAPABILITY :查询指定的CAPABILITY被哪个包所依赖
rmp2cpio 包文件|cpio -itv 预览包内文件
rpm2cpio 包文件|cpio –id “*.conf” ”
包查询
[query-options]
–changlog:查询rpm包的changelog
-l –list:程序安装生存的全部文件列表
-i –info:程序包的相关信息,版本号,大小,所属的包组等等
-c –configfiles :查询指定的程序提供的匹配文件
-d –docfiles 查询指定的程序包提供的文档
–provides:列出指定的程序包提供的所有CAPABILITY
-R –requires:查询指定的程序包的依赖关系
–scripts:查询程序包自带的脚本片段
查询的用法
-qi packag 包名
-qf file 文件名
-qc package
-ql package
-qd package
-qpi package_file
-qpl package_file
-qa
校验:
rpm {-V|–verify} [select-options] [verify-options]
S file Size differs 文件大小
M Mode differs (includes permissions and file type) 权限
5 digest (formerly MD5 sum) differs MD5码
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
包来源合法性验证:RSA
包来源完整性验证 :SHA256
公钥加密:
对称加密:加密,解密使用同一密钥
非对称加密:密钥是成对的
public key:公钥,公开所有人
secret key:私钥,不能公开
导入所需要公钥:
rpm -K|checksig rpmfile 检查包的完整性和签名
rpm –import / etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
CentOS 7 发行版光盘提供: RPM-GPG-KEY-CentOS-7
rpm -qa gpg-pubkey*
rpm数据库
数据库重建
/var/lib/rpm
rpm –initdb:初始化
如果事先不存在数据库,则新建
否则,不执行任何操作
rpm –rebuilddb:重建
无论当前存在与否,直接重新创建数据库
yum:yellowdog update modifier,prm的前端程序,用来解决软件包相关依赖性,可以在多个
库之间定位软件包,up2date的替代工具
yum repository: yum repo ,存储了众多rpm 包,以及包的相关的元数据文件(放置于特定目录repodata下)
文件服务器:
ftp://
heep://
file:///
yum配置文件
yum客户端配置文件:
/etc/yum.conf :为所有仓库提供公共配置
/etc/yum.repos.d/*.repo :为仓库的指向提供配置
仓库指向的定义:
[repositoryID]
name=Some name for this repository
baseurl=url://path/to/repository/
enabled={1|0}
gpgcheck={1|0}
gpgkey=URL
enablegroups={1|0}
failovermethod={roundrobin|priority}
默认为:roundrobin ,意为随机挑选;
cost= 默认为1000
yum-config-manager –disable “ 仓库名" 禁用仓库
yum-config-manager –enable “ 仓库名” 启用仓库
显示仓库列表
yum repolist [all|enabled|diasbale]
显示程序包:
list
yum list [all|glob_exp1|….]
yum list [available|installed|updates]
安装程序包
yum install package1 [package2]….
yum reinstall package1 [package]….重新安装
升级程序包
yum update package1 [package2]….
yum downgrade package1 [package2]…. 降级
检查可用升级
yum check-update
卸载程序包
remove | erase package1 [package2]….
查看程序包information
yum info […]
查看指定的特性(开始某文件)是由哪个程序包提供
yum provides|whatprovides feature1 [feature2]….
清楚本地缓存
yum clean[packages |metadate |expire-cache|rpmdb|plugins|all]
构建缓存
yum makecache
搜索:search string1 [string2]…
以指定的关键字所搜程序包名及summary信息
查看指定包所依赖的capabilities:
yum deplist package1…..
查看yum事务历史
yum history [info|list|packages-lsit|packages-info|summary|addon-info|redo|undo|rollback|new|sync|stats]
yum history
yum history info 6==>历史6的详细信息
yum history undo 6==>撤销历史6中的操作,如果历史6是安装就卸载,如果历史6是卸载就安装
日志:/var/log/yum.log
安装及升级本地程序包
yum install rpmfile1….
yum undate rmpfile1…
包组管理的相关命令:
groupinstall group1….
groupupdate group1….
grouplist [hidden] [groupwildcard]….
groupremove group1….
groupinfo group…
如何使用光盘当作本地yum仓库
1.挂载光盘之某目录,例如/media/cdrom
#mount /dev/cdrom /media/cdrom
2.创建配置文件
[centos7]
name=
baseurl=
gpgcheck=
enabled=
yum的命令行选项
–nogpgcheck:禁止进行pgp check
-y:自动回答为“yes”
-q:静默模式
–disablerepo=repoidglob:临时禁用此处指定的repo
–enablerepo=repoidglob:临时启用此处指定的repo
–noplugins:禁用所有插件
yum仓库
yum的repo配置文件中可用的变量
$releasever:当前OS的发行版的主版本号
$arch:平台,i386,i486,i586,x86_64等
$basearch:基础平台;i386
$yum0-$yum9:自定义变量
实例:
http://server/centos/$releasever/$basearch/
http://server/centos/7/x86_64
http://server/centos/6/i384
创建yum仓库:
createrepo [options] /path/to/directory
程序包编译
程序包编译安装:
Application-VERSION-release.src.rpm –> 安装后,使
用rpmbuild 命令制作成二进制格式的rpm 包,而后 再 安装
源代码–> 预处理–> 编译(gcc)–> 汇编–> 链接–> 执行
源代码组织格式:
多文件:文件中的代码之间,很可能存在跨文件依赖关系
C 、C++ :make ( 项目管理器,configure –>Makefile.in –> makefile)
java: maven
编译安装
C代码编译安装三步骤:
1, ./configure:
a.通过选项传递参数,指定启用特性,安装路径等;执行时会参考以后的指定以及
makefile.in文件生成makefile
b.检查依赖到的外部环境
2.make:根据makefile文件,构建应用程序
3.make install:复制文件到相应路径
开发工具:
autoconf:生成configure脚本
automake:生成makefile.in
注意:安装前查看INSTALL ,README
来源程序源代码的获取:
官方自建站点:
apache.org(ASF)
mariadb.org
…
代码托管:
SourceForge.net
Github.com
code.google.com
c/c++编译器:gcc(GNU C Complier)
编译C源代码:
前提:提供开发工具及开发环境
开发工具:make,gcc等
开发环境:开发库,头文件
glibc:标准库
通过“包组”提供开发组件
CentOS 6: "Development Tools",
"Server Platform Development",
第一步:configure脚本
选项:指定安装位置,指定启动的特性
–help:获取其支持使用的选项
选项分类:
安装路径设定:
–prefix=/path:指定默认安装位置,默认为/旧/local/
–sysconfdir=/path:配置文件安装位置
System types:支持交叉编译
Optional Features:可选特性
–disable-FEATURE
–enable-FEATURE[=ARG]
Optional Packages: 可选包,
–with-PACKAGE[=ARG], 依赖包
–without-PACKAGE,
第二步:make
第三不 :make install
安装后的配置:
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|man_db.conf文件
条件一个MANPATH
作业:
-
删除kernel包后,无法启动,并恢复之
1.删除kernel
2.重启虚拟机,选择cdrom模式进入,然后选择troubleshooting,进入到如下界面
3.选择Rescue a CentOS system,然后选择1
4按照提示输入return
5.进入系统
6.使用rpm命令重新安装kernel
注意:kernel是要安装到/mnt/sysimages下
光盘是在/run/install/repo/Packages/下
命令为:rpm -ivh /run/install/repo/Pcakages/kernel…. –root=/mnt/sysimage
7.reboot重启,回复正常
第二题:
源码安装PHP
-
在官网上下载源码,我是在如下网站下载的
http://php.net/downloads.php
-
将源码包放在指定位置,然后解压解归档
3.解压解归档后,目录内容如下,在开始安装前最好先看看INSTALL和README文件,里面的内容还是挺重要的,
在这里我就不截图了
4.使用./configure –help查看各种文件安装路径设置,可以自己设置,默认为/usr/local
./configure --prefix=/usr/local/PHP --sysconfdir=/etc/PHP
将默认安装位置设置为/usr/local/prefix/PHP下,配置文件安装在/etc/PHP,其他的就先不做详细设置了 篇幅有限,就全不截图了
5.执行make命令 ====>漫长等待中…..
5.make test …….
6.执行manke install
7.安装完成,然导入配置文件
1.将二进制程序目录导入之PATH环境变量中;
1 PATH=/usr/local/PHP/bin:$PATH
2.导入库文件路径,添加新的库文件是在目录至此文件中,然后让系统重新生成缓存:ldconfig[-v]
1 /usr/local/PHP/lib
3.导入头文件
基于链接的方式实现
ln -sv
ln -s /usr/local/PHP/include/ /usr/include/php
4.导入帮助手册
编辑/etc/man.config|man_db.conf 文件
添加man帮助手册路径至文件中
这样就安装完成了!
原创文章,作者:qiuwei,如若转载,请注明出处:http://www.178linux.com/38753
评论列表(1条)
内容整体很完整,对专用名词应该进行一些详细的解释,而不是简单的罗列,同时对知识点多一些文字性的描述,这样不仅能增加文章的可读性,同时更能增强自己的语言组织能力。