基础知识
二进制应用程序的组成部分:二进制文件、库文件、配置文件、帮助文件
程序包管理器:rpm
源代码命名方式:name-VERSION.tar.gz,VERSION:major.minor.release
rpm包命名方式:name-VERSION-ARCH.rpm,VERSION:major.minor.release,ARCH:release.os.arch,zlib-1.2.7-13.el7.i686.rpm
包依赖关系,yum、dnf:rpm包管理器的前端工具
ldd,打印出二进制程序依赖
的
共享库,ldd /bin/ls
管理及本机装载的库文件:
ldconfg -p:显示I本机已经缓存的所有可用库文件名及文件路径映射关系;
配置文件为:/etc/ld.so.conf,/etc/ld.so.conf.d/*.conf
缓存文件:/etc/ld.so.cache
获取程序包的途径:
1、系统发行版的光盘或官方的服务器:
centos镜像:http://mirrors.aliyun.com,http://mirrors.sohu.com,http://mirrors.163.com
2、项目官方
3、第三方组织
F
edora-EPEL
http://pkgs.org
http://rpmfind.net
http://rpm.phone.net
4、自己制作
检查合法性:来源合法性、程序包完整性
编译安装
编译安装三步骤
1 ./configure:
(1)通过选项传递参数,指定启用特性、安装路径等;执行时会参考用户的指定以及Makefile.in文件生成makefile;
(2)检查依赖到的外部环境。
2. make:
根据makefile文件,构建应用程序
3.make install
开发工具:
autoconf:生成configure脚本
automake:生成Makefile.in
建议:安装前查看INSTALL,README
开源程序源代码的获取:
官方自建站点:apache.org,mariadb.com
代码托管:SourceForge,Github.com,code.google.com
编译器
c/c++:gcc(GNU C Complier)
编译C源代码
前提:提供开发工具及开发环境
开发工具:make、gcc等
开发环境:开发库、头文件
glibc:标准库
通过“包组”提供开发组件
CentOS 6:“Development Tools","Server Platform Development"
CentOS 7:开发工具
第一步,configure
选项:指定安装位置、指定启用的特性
--help:获取其支持使用的选型
--prefix=/PATH:指定安装路径,默认为/usr/local
--sysconfdir=/PATH:配置文件安装路径
第二步,make
第三步,make install
第四步,安装后的配置
(1)配置PaTH环境变量
编辑配置文件/etc/profile.d/NAME.sh
export PATH=/path/to/bin:$PATH
(2)导出库文件路径
编辑/etc/ld.so.conf.d/NAME.conf
添加新的库文件所在目录至此文件中
让系统重新生成缓冲
ld -V
(3)导出头文件
基于链接的方式
ln -sv /path/.../include /usr/include/NAME
很多编译器使用 -i 选项来指定额外的头文件目录(你说的库文件)
修改你自己用户的环境变量文件
~/.bash_profile 申明你安装好的lib库进去
source ~/.bash_profile 这样加载环境变量
另外PHP程序依赖的库应该可以从该程序的配置文件路径中申明就可以了,不一定需要系统默认路径
configure --- 参数的时候会指定你的配置文件路径,你的依赖库路径等等
(4)导出帮助手册
编辑/etc/man.config文件
添加一个MANPATH
编辑/etc/man.config,添加一条:MANTH /path/../man(man1、man8的上一级目录)
rpm安装
1.安装
rpm包管理:安装
http://172.16.0.1/cobbler/
rpm -i, --install
# rpm -i /path/to/rpm_package ...
-v:
-vv:
-vvv:
-h: hash, 以#的个数显示安装进度,一个#表示2%的进度;
--test:仅测试,不真正执行安装过程
如果存在依赖:
解决依赖关系
忽略依赖关系: --nodeps
2.重新安装
-ivh --replacepkgs
原来的配置文件不会被覆盖,新安装的配置文件将会重命名为以.rpmnew为后缀的文件;
3.卸载
rpm包管理:卸载
rpm -e, --erase
rpm -e package_name
如果卸载被其它程序所依赖的包:
1、把依赖者一同卸载;
2、忽略依赖关系;
--nodeps
3、不再卸载
4.查询
rpm包管理:查询
rpm -q
1.查询所有已经安装的包
查询所有已经安装的包:rpm -qa
2.查询包的描述信息
查询包的描述信息:rpm -qi package_name
Name : bash Relocations: (not relocatable)
Version : 4.1.2 Vendor: CentOS
Release : 15.el6_4 Build Date: Thu 18 Jul 2013 09:21:24 PM CST
Install Date: Wed 12 Feb 2014 09:48:43 AM CST Build Host: c6b10.bsys.dev.centos.org
Group : System Environment/Shells Source RPM: bash-4.1.2-15.el6_4.src.rpm
Size : 3139291 License: GPLv3+
Signature : RSA/SHA1, Thu 18 Jul 2013 09:46:10 PM CST, Key ID 0946fca2c105b9de
Packager : CentOS BuildSystem <http://bugs.centos.org>
URL : http://www.gnu.org/software/bash
Summary : The GNU Bourne Again shell
Description :
The GNU Bourne Again shell (Bash) is a shell or command language
interpreter that is compatible with the Bourne shell (sh). Bash
incorporates useful features from the Korn shell (ksh) and the C shell
(csh). Most sh scripts can be run by bash without modification.
3.查询某单个包是否安装
查询某单个包是否安装:rpm -q package_name
4.查询包安装之后在当前系统生成文件列表
查询包安装之后在当前系统生成文件列表:rpm -ql package_name
5.查询某文件是哪个包安装生成的
查询某文件是哪个包安装生成的:rpm -qf /path/to/somefile
6.查询包安装后生成的帮助文档
查询包安装后生成的帮助文档:rpm -qd package_name
7.查询包安装后生成的配置文件
查询包安装后生成的配置文件:rpm -qc package_name
8.查询包相关的脚本
查询包相关的脚本:rpm -q --scripts package_name
脚本有四类:
preinstall: 安装前脚本
postinstall: 安装后脚本
preuninstall: 卸载前脚本
postuninstall: 卸载后脚本
9.查询尚未安装的rpm包文件的相关信息
查询尚未安装的rpm包文件的相关信息:
1..查询安装后会生成的文件列表
查询安装后会生成的文件列表:rpm -qpl /path/to/package_file
2.查询其简单描述信息
查询其简单描述信息:rpm -qpi /path/to/package_file
5.升级
rpm包之升级:
rpm -U: 升级或安装
rpm -F:升级
rpm {-Uvh|-Fvh} /path/to/package_file
--nodeps:忽略依赖关系
--force: 强行安装
注意:不要对内核执行升级操作;
多版本内核可并存,因此,建议执行安装操作;
6.校验
rpm包管理:校验
检查包安装后生成的文件是否被修改过;
rpm -V package_name
S file Size differs
M Mode differs (includes permissions and file type)
5 digest (formerly MD5 sum) differs
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
rpm包管理:检验来源合法性和软件包完整性
包完整性:通过单向加密机制(md5|sha1)
来源合法性:通过公钥加密机制(RSA)
命令:gpg, pgp
导入制作者的公钥,CentOS发行版的公钥在iso文件中;
导入命令:rpm --import /path/to/gpg-key-file
检查:rpm -K /path/to/package_file
rpm --checksig /path/to/package_file
--nosignature: 不检查来源合法性
--nodigest: 不检查完整性
7.数据库重建
rpm包管理:数据库重建
数据库:/var/lib/rpm/
重建:
rpm --initdb: 初始化
如果事先不存在一个数据库,则新建之;
rpm --rebuilddb: 重建
直接重建数据库,会覆盖原有的库;
8.打包
总结:打包、
yum安装
1.概述
依赖关系:
程序包管理器的前端工具:yum (Yellowdog Update Modifier)
自动解决依赖关系:X --> Y --> Z
文件服务器(共享rpm包):通过yum所支持的文件共享机制将各rpm包通过文件服务共享
repository: 仓库
1、各rpm包;
2、依赖关系、程序包安装后所能够生成文件列表等元数据文件;
ftp, http, nfs, file
yum客户端:
1、配置文件:指定各可用的yum仓库;
2、缓存元数据:yum会到各可用yum仓库获取元数据,并缓存至本地;
3、分析元数据:根据具体操作请求完成元数据分析, 可能包括检查依赖关系、文件列表等信息;
4、执行具体操作:
客户端配置文件指定对应服务器访问方式:
ftp ftp://server/path/to/repo
http http://server/path/to/repo
nfs nfs://server/nfs_path
file file:///path/to/repository
教室的repository:
http://172.16.0.1/cobbler/ks_mirror/CentOS-6.5-x86_64/
http://172.16.0.1/fedora-epel/6/
yum [options] COMMAND
check Check for problems in the rpmdb
check-update Check for available package updates
clean Remove cached data
deplist List a package's dependencies
distribution-synchronization Synchronize installed packages to the latest available versions
downgrade downgrade a package
erase Remove a package or packages from your system
groupinfo Display details about a package group
groupinstall Install the packages in a group on your system
grouplist List available package groups
groupremove Remove the packages in a group from your system
help Display a helpful usage message
history Display, or use, the transaction history
info Display details about a package or group of packages
install Install a package or packages on your system
list List a package or groups of packages
load-transaction load a saved transaction from filename
makecache Generate the metadata cache
provides Find what package provides the given value
reinstall reinstall a package
repolist Display the configured software repositories
resolvedep Determine which package provides the given dependency
search Search package details for the given string
shell Run an interactive yum shell
update Update a package or packages on your system
update-minimal Works like update, but goes to the 'newest' package match which fixes a problem that affects your system
updateinfo Acts on repository update information
upgrade Update packages taking obsoletes into account
version Display a version for the machine and/or available repos.
要使用yum管理应用程序,首先得配置其可用的yum仓库,保存在配置文件中:
/etc/yum.conf
/etc/yum.repos.d/*.repo
配置文件格式:由两段组成,类似windows的ini配置文件
[main] :主配置段
[repo] :仓库配置段
配置repo:
[repo_ID]
name=String
baseurl=仓库的访问路径
enabled={1|0}
gpgcheck={1|0}
gpgkey=公钥文件(可以在本地,也可是服务器端路径)
cost=定义此仓库开销,默认为1000
[base]
name=CentOS 6.5 X86_64 relase
baseurl=http://172.16.0.1/cobbler/ks_mirror/centos-6.5-x86_64/
enabled=1
gpgcheck=1
gpgkey=http://172.16.0.1/cobbler/ks_mirror/centos-6.5-x86_64/RPM-GPG-KEY-CentOS-6
2.yum的各命令
1.列出所有可用yum repo
repolist [all|enabled|disabled]: 列出所有可用yum repo
2.清理缓存
clean [all|packages|metadata|expire-cache|rpmdb|plugins]: 清理缓存
3.列出rpm包
list [all|installed|available]: 列出rpm包
4.列出rpm包
info package_name: 列出包的描述信息
5.列出所有包组
grouplist: 列出所有包组
6.显示包组信息
groupinfo "package_group_name":显示包组信息
7.三个跟开发相关的包组
Desktop Platform Development:有图形程序时需安装此组;
Server Platform Development
Development Tools
8.安装指定的程序包
install package_name ...: 安装指定的程序包
9.重新安装指定的程序包
reinstall package_name ...: 重新安装指定的程序包
10.检查可升级的包
check-update: 检查可升级的包
11.升级指定的程序包
update package_name ...: 升级指定的程序包
现在的版本:x-1.2.1, x-1.2.2, x-1.2.3
要升级到指定版本:yum update x-1.2.2
12.降级
downgrade package_name:降级
erase|remove package_name ...:
13.查询某文件是由哪个包安装生成的
whatprovides|provides /path/to/somefile: 查询某文件是由哪个包安装生成的
14.安装指定的包组
groupinstall "group_name":安装指定的包组
15.卸载指定的包组
groupremove "group_name": 卸载指定的包组
16.安装本地包
安装本地包:
install /path/to/package_file
手动禁止检查来源及完整性:--nogpgcheck
yum install /tmp/zsh-2.3.1-2.el6.x86_64.rpm --nogpgcheck
提示:如果系统为CentOS 5,常用的开发包组为“Development Tools”和“Development Libraries”
CentOS 6,常用的开发包组为“Development Tools”和“Server Platform Development”
练习:安装相关的包组,确保如下命令可执行
# gcc --version
gcc (GCC) 4.4.7 20120313 (Red Hat 4.4.7-4)
Copyright (C) 2010 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
yum配置文件中可用的四个宏:
$releasever: 程序的版本,对Yum而言指的是redhat-release版本;只替换为主版本号,如RedHat 6.5,则替换为6;
$arch: 系统架构
$basearch: 系统基本架构,如i686,i586等的基本架构为i386;
$YUM0-9: 在系统中定义的环境变量,可以在yum中使用;
获取当前系统相应宏替换结果的办法:
# python
Python 2.6.6 (r266:84292, Nov 22 2013, 12:16:22)
[GCC 4.4.7 20120313 (Red Hat 4.4.7-4)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import yum,pprint
>>> yb = yum.YumBase()
>>> pprint.pprint(yb.conf.yumvar,width=1)
Loaded plugins: fastestmirror, refresh-packagekit
{'arch': 'ia32e',
'basearch': 'x86_64',
'releasever': '6',
'uuid': 'ea249181-2f82-4c40-8c42-d51b3fce319a'}
>>> quit()
[fedora-epel]
name=Fedora Community EPEL
baseurl=http://172.16.0.1/fedora-epel/6/x86_64/
enabled=1
gpgcheck=0
[fedora-epel]
name=Fedora Community EPEL
baseurl=http://172.16.0.1/fedora-epel/$releasever/$basharch/
enabled=1
gpgcheck=0
总结:yum --> yum repository
yum: /etc/yum.conf, /etc/yum.repos.d/*.repo
yum repository: 文件服务器
repodata/:
repomd.xml:
测试实现yum repository的配置:
1、准备文件服务器;使用httpd为例,请事先确保已经安装httpd程序包;
2、在/var/www/html目录,使用一个目录来保存准备制作成为yum仓库的所有rpm包;
# cd /var/www/html
# lftp 172.16.0.1/pub/Sources/6.x86_64
# lftp: > mirror openstack
# bye
3、创建yum仓库
# rm -rf /var/www/html/openstack/repodata
# createrepo /var/www/html/openstack
4、启动httpd服务
# service httpd start
5、配置使用自建的yum仓库
[openstack]
name=Openstack Repository
baseurl=http://172.16.100.7/openstack/
enabled=1
gpgcheck=0
6、配置好epel的yum源
7、测试使用
# yum install openstack-keystone