操作系统:CentOS 6.7 内核版本:2.6.32-573.el6.x86_64
程序编译概念
程序要在机器上运行,就需要编译,编译针对特定的OS平台和硬件平台,编译后的程序只能运行在特定的软硬平台上
交叉编译:
在测试机上针对其他平台进行程序编译
编译过程:
预编译 -> 编译 -> 汇编 -> 链接
链接:生成库调用的头文件
静态链接:程序文件本身集成所需调用的库文件
动态链接:调用标准C库glibc,.so(share object)
头文件:主要是记录程序调用库文件名,调用库参数特性...
库:函数
库调用:
开发时的库调用:头文件
运行时的库调用:可执行二进制程序
动态库调用默认查找路径配置文件:
/etc/ld.so.conf
/etc/ld.so.conf.d /*.conf
一般建议在*.conf目录中配置链接库路径
查看二进制程序所依赖的库文件:
如:ldd /bin/cat
程序编译的本质:源代码 -> cpu指令集调用(汇编层面)
编译后的程序运行基础:
os平台兼容
硬件平台兼容
同平台的情况下,在跨机器运行程序必须提供所依赖的库文件,否则无法运行
程序的兼容性:
POSIX:可移植操作系统
API兼容:则表示程序可跨平台编译
ABI兼容:则表示编译后的程序可以跨平台运行
程序组成:
二进制程序:/bin,/sbin
头文件:include,默认/usr/inlcude
自身库:lib,默认存放在/lib,/lib64
配置文件:conf,默认存放在/etc
帮助文档:man文档,README,INFO等
编译安装可以指定路径安装,若指定路径安装,则安装后需要配置好二进制和帮助文档的PATH环境变量,这样可以解决shell默认的的环境变量无法识别程序和文档路径
包管理工具基础知识:
包管理工具:rpm
rpm(RedHat package manager)
后更名为rmp(RPM is package manager)递归缩写
包管理工具的基本功能
打包
安装
查询
卸载
升级
校验
数据库管理
前端管理器:yum/apt-get
能够自动化处理程序安装的依赖关系
依赖关系:
循环依赖、版本依赖
某些程序的运行依赖于其他程序,需要先安装所依赖的程序才能使用
应用程序的命名方式:
源代码:name-major.minor.release.tar.{gz|bz2|xz}
程序名-主版本号-次版本号-发行版本号
rpm包:name-version-release.arch.rpm
release:通常包含发行号、OS
arch:架构
程序安装方式:
以源代码编译安装
使用包管理器:rpm
使用前端管理器:yum
简单打包的二进制格式(相当于windows绿色软件)
分包安装机制:
将一个大程序按照功能使用分成几个不同的包,在程序安装时供用户选择安装
包来源合法性校验:
源程序:通过MD5码或sha1校验码验证
rpm包:
可靠的发行商
完整性校验
验证来源合法:公钥加密算法
rpm包获取途径:
1、发行商的光盘或站点服务器
http://mirrors.163.com
http://mirrors.sohu.com
http://mirrors.aliyun.com
2、rpmfind
http://rpmfind.net
3、rpmpbone
http://rpm.pbone.net
rpm包管理器命令使用:
安装:-i,--install
rpm -ivh /path/to/rpm_package
-v:显示安装信息
-vv:显示更详细的安装信息
-h:以井号显示安装进度
--nodeps:忽略依赖关系(适用于卸载)
--force:强行安装(适用于卸载)
[root@johnson's linux ~]# rpm -ivh zsh-4.3.10-7.el6.x86_64.rpm Preparing... ########################################### [100%] 1:zsh ########################################### [100%]
重装:--replacepkgs
rpm -ivh --replacepkgs /path/to/rpm_name
[root@johnson's linux ~]# rpm -ivh --replacepkgs zsh-4.3.10-7.el6.x86_64.rpm Preparing... ########################################### [100%] 1:zsh ########################################### [100%]
卸载:-e,--erase
rmp -e package_name
[root@johnson's linux ~]# rpm -e zsh [root@johnson's linux ~]#
卸载成功不会返回信息,对linux而言,没有消息就是最好的消息
升级:-U -F
升级或安装:
rpm -U /path/to/rpm_package
只升级:(若不存在旧版本则不会执行)
rpm -F /path/to/rpm_package
通常搭配vh使用:
rpm -Uvh|-Fvh /path/to/package
注意:不要对内核执行升级操作
不同内核版本可以共存,因此可执行安装操作,但不建议升级
查询:-q
查询包是否已安装:
rpm -q package_name
[root@johnson's linux ~]# rpm -q zsh package zsh is not installed
查询所有已安装的包:
rpm -qa
[root@johnson's linux ~]# rpm -qa gnome-packagekit-2.28.3-9.el6.x86_64 redhat-logos-60.0.14-12.el6.centos.noarch gnome-python2-applet-2.28.0-5.el6.x86_64 dejavu-fonts-common-2.33-1.el6.noarch gvfs-gphoto2-1.4.3-22.el6.x86_64 pciutils-3.1.10-4.el6.x86_64 plymouth-plugin-label-0.8.3-27.el6.centos.1.x86_64 ......
查询已安装包的简要说明:
rpm -qi package_name
[root@johnson's linux ~]# rpm -qi zsh Name : zsh Relocations: (not relocatable) Version : 4.3.10 Vendor: CentOS Release : 7.el6 Build Date: Sun 24 Nov 2013 09:40:59 AM PST Install Date: Sat 19 Mar 2016 07:06:37 AM PDT Build Host: c6b9.bsys.dev.centos.org Group : System Environment/Shells Source RPM: zsh-4.3.10-7.el6.src.rpm Size : 5009102 License: BSD Signature : RSA/SHA1, Sun 24 Nov 2013 11:33:46 AM PST, Key ID 0946fca2c105b9de Packager : CentOS BuildSystem <http://bugs.centos.org> URL : http://zsh.sunsite.dk/ Summary : A powerful interactive shell Description : The zsh shell is a command interpreter usable as an interactive login shell and as a shell script command processor. Zsh resembles the ksh shell (the Korn shell), but includes many enhancements. Zsh supports command line editing, built-in spelling correction, programmable command completion, shell functions (with autoloading), a history mechanism, and more. [root@johnson's linux ~]#
查询包安装后生成的文件:
rpm -ql package_name
[root@johnson's linux ~]# rpm -ql zsh /bin/zsh /etc/skel/.zshrc /etc/zlogin /etc/zlogout /etc/zprofile /etc/zshenv /etc/zshrc /usr/lib64/zsh /usr/lib64/zsh/4.3.10 ......
查询某文件是由那个包生成的:
rpm -qf /path/to/file
[root@johnson's linux ~]# rpm -qf /bin/bash bash-4.1.2-33.el6.x86_64
查询包安装后生成的帮助文档:
rpm -qd package_name
[root@johnson's linux ~]# rpm -qd zsh /usr/share/doc/zsh-4.3.10/BUGS /usr/share/doc/zsh-4.3.10/CONTRIBUTORS /usr/share/doc/zsh-4.3.10/FAQ /usr/share/doc/zsh-4.3.10/FEATURES /usr/share/doc/zsh-4.3.10/LICENCE /usr/share/doc/zsh-4.3.10/MACHINES /usr/share/doc/zsh-4.3.10/NEWS ......
查询包安装后生成的配置文件:
rpm -qc package_name
查询包相关的脚本:
rpm -q --scripts
脚本分四类
preinstall 安装前脚本
postinstall 安装后脚本
preuninstall 卸载前脚本
postuninstall 卸载后脚本
查询未安装包的相关信息:-qp
查询安装后会生成的的文件
rpm -qpl package_name
[root@johnson's linux ~]# rpm -q zsh package zsh is not installed [root@johnson's linux ~]# rpm -qpl zsh-4.3.10-7.el6.x86_64.rpm /bin/zsh /etc/skel/.zshrc /etc/zlogin /etc/zlogout /etc/zprofile /etc/zshenv /etc/zshrc /usr/lib64/zsh
查询包的简单描述信息:
rpm -qpi package_name
可搭配其选项使用,如-qp --scripts
校验:检查安装后的文件是否被修改过
rpm -V package_name
同样的 。没有消息就是最好的消息,若返回,看注释
返回的注释信息:
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 能力改变了
校验来源合法性和软件的完整性
包完整性:单项加密机制(MD5|sha1..)
来源合法性:公钥加密机制(RSA)
rpm -K /path/to/packagefile
rpm --checksig /path/to/package_file
--nosigeature:不检查来源合法性
--nodigest:不检查包完整性
[root@johnson's linux ~]# rpm -K zsh-4.3.10-7.el6.x86_64.rpm zsh-4.3.10-7.el6.x86_64.rpm: rsa sha1 (md5) pgp md5 OK
导入密钥:
rpm --import /path/to/gpg-key-file
导入以后再做验证
公钥文件文件路径/etc/pki/rpm-gpg
[root@johnson's linux ~]# ls /etc/pki/rpm-gpg RPM-GPG-KEY-CentOS-6 RPM-GPG-KEY-CentOS-Security-6 RPM-GPG-KEY-CentOS-Debug-6 RPM-GPG-KEY-CentOS-Testing-6
数据库
位置:/var/lib/rpm
重建:
rpm --initdb:初始化
如果事先不存在一个数据库,则新建之
rpm --rebuilddb 重建
直接新建数据库,会覆盖原有库
包前端管理器:yum
yum:
程序包管理器前端工具,自动解决依赖关系
yum仓库:repository
通过文件服务提供rmp包,程序包安装后生成文件列表、依赖关系等元数据文件
yum客户端:
工作机制:
1.读取yum配置文件,指定到可用的yum仓库
2.下载并缓存yum仓库中的元数据文件
3.分析元数据,文件列表信息和依赖关系等
3.根据分析结果执行具体操作
yum的使用:配置yum仓库
配置文件:配置可用的yum仓库和yum仓库的使用优先级别等
配置文件路径:/etc/yum.conf /etc/yum.repos.d
配置文件格式:两段组成
[main]:主配置段
[repo]:仓库配置段
配置repo
[repo_ID]仓库ID
name=仓库命令
baseurl=仓库访问路径
enabled={1|0}仓库是否可用,1以代表可用
gpgcheck={1|0}验证包来源的可靠性与完整性
gpgkey=公钥地址(可以是本地,也可以是服务器路径)
cost=定义仓库开销,默认为1000(数字越小优先级越高)
yum的管理命令:
列出所有可用的yum repo:
yum repolist [all|enabled(默认)|disabled]
[root@johnson's linux yum.repos.d]# yum repolist Loaded plugins: fastestmirror, refresh-packagekit, security Loading mirror speeds from cached hostfile * base: mirrors.btte.net * extras: mirrors.btte.net * updates: mirrors.btte.net local_base | 4.0 kB 00:00 ... repo id repo name status base CentOS-6 - Base 6,575 extras CentOS-6 - Extras 50 local_base centos_DVD1 6,518 updates CentOS-6 - Updates 1,306 web_repo johnson's_web_repo 3 repolist: 14,452
清理缓存信息:
yum clean [all|packeages|metadata|expire-cache(过期数据)
显示yum仓库包列表:
yum list [all|installed|available]
查看yum命令历史:
yum history
显示包的详细信息:
yum info package_nmae
[root@johnson's linux ~]# yum info zsh Loaded plugins: fastestmirror, refresh-packagekit, security Loading mirror speeds from cached hostfile * base: mirrors.btte.net * extras: mirrors.btte.net * updates: mirrors.btte.net Installed Packages Name : zsh Arch : x86_64 Version : 4.3.10 Release : 7.el6 Size : 4.8 M Repo : installed Summary : A powerful interactive shell URL : http://zsh.sunsite.dk/ License : BSD Description : The zsh shell is a command interpreter usable as an : interactive login shell and as a shell script command : processor. Zsh resembles the ksh shell (the Korn : shell), but includes many enhancements. Zsh supports : command line editing, built-in spelling correction, : programmable command completion, shell functions : (with autoloading), a history mechanism, and more. Available Packages Name : zsh Arch : x86_64 Version : 4.3.11 Release : 4.el6.centos.1 Size : 2.2 M Repo : updates Summary : A powerful interactive shell URL : http://zsh.sunsite.dk/ License : BSD Description : The zsh shell is a command interpreter usable as an : interactive login shell and as a shell script command : processor. Zsh resembles the ksh shell (the Korn : shell), but includes many enhancements. Zsh supports : command line editing, built-in spelling correction, : programmable command completion, shell functions : (with autoloading), a history mechanism, and more.
安装指定程序包:
yum install package_nmae ...
在包名中指定详细的的版本号可指定版本安装
本地包安装:
yum install [--nogpgcheck] /path/to/package
注意:若不指定路径安装,开启了gpg检验,则可能无法安装
重新安装指定程序包:
yum reinstall package_nmae ...
检测可更新包:
yum check-update
升级指定程序包:
yum update package_nmae ...
降级程序:
yum downgrade package_nmae
卸载包:(依赖包也会被卸载)
yum erase package_nmae ...
A依赖B,卸载B会把A也卸载
列出所有包组:
yum grouplist
显示包组信息:
yum groupinfo "group_name":
包组名可能会有空格,所以要加引号
安装包组:
yum groupinstall "group_name"
卸载包组:
yum groupremove "group_name"
搜索:
yum search package_name
查看指定包的依赖关系:
yum deplist package_name
构建缓存:(缓存仓库中最新可用的元数据)
yum makecache
构建本地yum仓库:
(1)利用本地系统镜像构建
1.系统读取光盘,物理光驱或虚拟光驱读取都行,若是使用虚拟机,则直接指定镜像的路径即可
2.挂载镜像:
创建挂载目录:
mkdir /media/dvd1
挂载:
mount /dev/cdrom /media/dvd1
配置yum repository:
vim /etc/yum.repos.d/local_mirror.repo
[local_base] name=centos_DVD1 baseurl=file:///media/dvd1 gpgcheck=0
配置完成
(2)若是利用网上收集的rpm包来构建,需用createrepo命令来构建元数据
1.创建yum仓库文件夹并存放rpm包
2.构建原仓库元数据:
createrepo [options] directory
3.配置yum repository
(3)配置yum服务器,基于http/ftp....
1.装好httpd服务器,启动http服务
2.将rpm包放在/var/www/html目录下
3.创建yum仓库元数据
4.web测试
[root@johnson's linux ~]# ls /var/www/html/packages/ vim-minimal-7.2.411-1.8.el6.x86_64.rpm zlib-1.2.3-29.el6.x86_64.rpm zsh-4.3.10-7.el6.x86_64.rpm [root@johnson's linux ~]# createrepo /var/www/html/packages/ Spawning worker 0 with 3 pkgs Workers Finished Gathering worker results Saving Primary metadata Saving file lists metadata Saving other metadata Generating sqlite DBs Sqlite DBs complete [root@johnson's linux ~]# ls /var/www/html/packages/ repodata vim-minimal-7.2.411-1.8.el6.x86_64.rpm zlib-1.2.3-29.el6.x86_64.rpm zsh-4.3.10-7.el6.x86_64.rpm [root@johnson's linux ~]#
源码程序包编译安装:
源码类型:
c,c++
perl
Python
源码编译步骤:以nginx为例
事先准备好编译环境,安装必要的开发环境,如开发包组:development tools,否则将会报错
1.源码解压
tar -xf /path/to/source_package
2.cd到源码目录,当前目录执行./configure脚本
注意:执行前请看相关文档或使用./configure --help来获得帮助
option:
--prefix安装路径
--sysconfdir配置文件路径
[root@johnson's linux ~]# cd nginx-1.4.7 [root@johnson's linux nginx-1.4.7]# ls auto CHANGES.ru configure html Makefile objs src CHANGES conf contrib LICENSE man README
注意:不同程序所使用的命令选项可能不同,所以再次提醒,安装前务必要阅读相关文档
3.执行make命令进行编译
4.执行make install进行安装
到此安装完成,下一步操作,配置环境变量
在shell环境下,默认会有特定的一些环境变量,这些环境变量定义了:执行二进制程序时的查找路径,库调用的路径,帮助文档的默认查找路径...
所以,不想每次执行程序、查看文档都要指定一次路径的话,那就需要手动配置了
二进制程序路径配置:
到profile.d目录下新建一个脚本
脚本内容:
#!/bin/bash
PATH=/usr/local/nginx/sbin:$PATH
export PATH
头文件输出
在/usr/include创建符号链接
ln -sv /path/to/app_include /usr/include/ln_name
库文件输出
到/etc/ld.so.conf.d目录下配置路径文件
vim /etc/ld.so.conf.d/nginx.conf
内容:lib的路径
man文档
配置/etc/man.config文档
添加路径:MANPATH /usr/local/man
若执行脚本报错,需要安装某个程序时,注意是要安装该程序的devel包(包名-devel)