一:程序包概述
源码操作系统安装方式:通过宿主机
GPL:源码(c,c++)
POSIX规范:移植性,
API(应用编程接口):兼容,意味开发库兼容,因此源代码可夸平台
ABI(应用二进制接口):兼容,编译后的程序可夸平台
库:(函数\功能)可执行程序,本身不能作为程序执行的入口,但可以被调用 (编译好的二进制格式)
程序:预编译,编译,汇编,链接
静态:程序包含静态库,
动态:so(shared object) 调用系统共享库
注意:程序的可移植要求
1、OS平台,应用程序必须为特定平台所支持的版本
2、硬件平台,应用程序必须为特定的cpu所支持
程序包组成部分:
二进制程序:/bin,/sbin,/usr/bin,/usr/sbin
库文件:/lib64,/usr/lib64 指定系统查找库文件的路径:/etc/ld.so.conf /etc/ld.so.conf.d/*.conf
配置文件:/etc/
帮助文档:man,info
ldd命令:
查看程序所依赖的共享库:
ldd [options] FILE...
函数名(参数),头文件,保存在/usr/include中的*.h文件
[root@xxj ~]# ldd $(which ls) alias: ldd: ./alias: No such file or directory ls='ls: ldd: ./ls='ls: No such file or directory --color=auto': ldd: ./--color=auto': No such file or directory /bin/ls: linux-vdso.so.1 => (0x00007fff595f7000) libselinux.so.1 => /lib64/libselinux.so.1 (0x00007fd004872000) librt.so.1 => /lib64/librt.so.1 (0x00007fd00466a000) libcap.so.2 => /lib64/libcap.so.2 (0x00007fd004465000) libacl.so.1 => /lib64/libacl.so.1 (0x00007fd00425d000) libc.so.6 => /lib64/libc.so.6 (0x00007fd003ec9000) libdl.so.2 => /lib64/libdl.so.2 (0x00007fd003cc4000) /lib64/ld-linux-x86-64.so.2 (0x00007fd004a99000) libpthread.so.0 => /lib64/libpthread.so.0 (0x00007fd003aa7000) libattr.so.1 => /lib64/libattr.so.1 (0x00007fd0038a2000)
man COMMAND
到某路径下查找与命令同名的通常以.gz结尾的压缩文件
/usr/share/man
man命令查找路径可以在/etc/man.conf中指定,也可以用选项直接指定:
man -M /usr/local/nginx/man.nginx
二、应用程序管理器
1、程序包管理器
数据库
软件名和版本,安装生成的各文件路径,名称,效验码,依赖关系
提供程序组成格式
文件清单
安装卸载时运行的脚本
2、包管理器的基本功能
打包,安装,查询,升级,卸载,效验,数据库管理
依赖关系:循环依赖,版本依赖
3、前端管理器(自动解决依赖关系)
apt-get:
yum:
4、应用程序的安装方式
使用包管理器:便捷,易用
包管理器的前端工具:
源代码编译:
简单打包的二进制格式:
5、包命名格式:
源程序:
name-version.tar.gz
version:major.minor.release
rpm包:
name-version-release.ARCH.rpm
release:通常包含rpm的制作发行号,还包含使用的OS
例: bash-4.2.4-1.el7.x86.rpm
分包:把一个复制的程序打包制作成多个rpm格式
主包:bash-4.2.4-1.el7.x86.rpm
支包:bash-devel-4.2.4-1.el7.x86.rpm
6、如何获取程序包
1、发行商提供的程序包
2、Fedora-EPEL
3、项目的官方站点
4、搜索引擎
http://rpmfind.net
http://rpm.phome.net
http://pkgs.org
三、rpm包的使用
1、基于rpm命令实现程序包管理
安装:(包全名)
格式 # rpm -i /PATH/TO/RPM_PACKAGE ...
-i,--install:安装
-v:显示详细信息,-vv
-h (或 --hash): 以#的个数显示安装进度
--test:仅测试,不真正安装,可以看到该包的依赖关系
--nodeps:忽略依赖关系
--replacepgs:重装
--oldpackage:降级
重装或升级时:原来的配置文件不会被覆盖,新安装的配置文件将会重命名为以.rpmnew为后缀的文件
升级:
rpm -Uvh:如果有旧版程序包,则升级,如果没有,则安装
-Fvh:如果有旧版程序包,则升级,如果没有,则无操作
--force:强制升级
--nodeps:
注意:不要对内核执行升级操作
多版本内核可并存,因此,建议执行安装操作
卸载:(指定包名即可)
rpm -e
如果卸载被其它程序所依赖的包:
1、把依赖者一同卸载
2、忽略依赖关系
3、不再卸载
安装: [root@xxj Packages]# rpm -q zip-3.0-1.el6.x86_64.rpm package zip-3.0-1.el6.x86_64.rpm is not installed [root@xxj Packages]# rpm -i zip error: open of zip failed: No such file or directory [root@xxj Packages]# rpm -i zip-3.0-1.el6.x86_64.rpm [root@xxj Packages]# rpm -q zip-3.0-1.el6.x86_64.rpm package zip-3.0-1.el6.x86_64.rpm is not installed
卸载: [root@xxj Packages]# rpm -e zip-3.0-1.el6.x86_64.rpm error: package zip-3.0-1.el6.x86_64.rpm is not installed
-vh的效果: [root@xxj Packages]# rpm -e zip [root@xxj Packages]# rpm -q zip-3.0-1.el6.x86_64.rpm package zip-3.0-1.el6.x86_64.rpm is not installed [root@xxj Packages]# rpm -iv zip-3.0-1.el6.x86_64.rpm Preparing packages for installation... zip-3.0-1.el6 [root@xxj Packages]# rpm -e zip [root@xxj Packages]# rpm -ivh zip-3.0-1.el6.x86_64.rpm Preparing... ########################################### [100%] 1:zip ########################################### [100%]
升级: [root@xxj Packages]# rpm -Uvh zip error: open of zip failed: No such file or directory [root@xxj Packages]# rpm -Uvh zip-3.0-1.el6.x86_64.rpm Preparing... ########################################### [100%] package zip-3.0-1.el6.x86_64 is already installed [root@xxj Packages]#
查询:
rpm -q (包名) 查询该rpm包是否安装
-qa 查询系统所有已经安装的rpm包
-qi 查询rpm包的描述信息
-ql 查询rpm包安装之后在当前系统生成的文件列表
-qf 查询文件是所有哪个rpm包安装生成的
-qc 查询rpm包安装之后在当前系统中生成的配置文件
-qd 查询rpm包安装之后在当前系统中生成的帮助文件
-q --scripts 查询rpm包相关的脚本
preinstall:安装前脚本
postinstall:安装后脚本
preuninstall:卸载前脚本
postuninstall:卸载后脚本
rpm -qp (包全名) 查询当前系统中没有安装的rpm相关信息
[root@xxj Packages]# rpm -q zsh-4.3.11-4.el6.centos.x86_64.rpm package zsh-4.3.11-4.el6.centos.x86_64.rpm is not installed [root@xxj Packages]# rpm -q zsh zsh-4.3.11-4.el6.centos.x86_64 [root@xxj Packages]# rpm -q zsh* package zsh-4.3.11-4.el6.centos.x86_64.rpm is not installed [root@xxj Packages]# rpm -qa |grep zsh zsh-4.3.11-4.el6.centos.x86_64 [root@xxj Packages]# rpm -q bin* package bind-9.8.2-0.37.rc1.el6.x86_64.rpm is not installed package bind-chroot-9.8.2-0.37.rc1.el6.x86_64.rpm is not installed package bind-dyndb-ldap-2.3-8.el6.x86_64.rpm is not installed package bind-libs-9.8.2-0.37.rc1.el6.x86_64.rpm is not installed package bind-utils-9.8.2-0.37.rc1.el6.x86_64.rpm is not installed package binutils-2.20.51.0.2-5.43.el6.x86_64.rpm is not installed package binutils-devel-2.20.51.0.2-5.43.el6.x86_64.rpm is not installed [root@xxj Packages]# rpm -qa|grep bin samba-winbind-clients-3.6.23-20.el6.x86_64 samba-winbind-3.6.23-20.el6.x86_64 binutils-2.20.51.0.2-5.43.el6.x86_64 [root@xxj Packages]# rpm -qi zsh Name : zsh Relocations: (not relocatable) Version : 4.3.11 Vendor: CentOS Release : 4.el6.centos Build Date: Fri 24 Jul 2015 05:41:25 PM CST Install Date: Mon 07 Sep 2015 01:39:55 AM CST Build Host: c6b8.bsys.dev.centos.org Group : System Environment/Shells Source RPM: zsh-4.3.11-4.el6.centos.src.rpm Size : 5283457 License: BSD Signature : RSA/SHA1, Sat 25 Jul 2015 04:41:32 AM CST, 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@xxj Packages]# rpm -ql zsh [root@xxj Packages]# rpm -qf $(which cat) coreutils-8.4-37.el6.x86_64 [root@xxj Packages]# rpm -q --scripts zsh
[root@xxj Packages]# rpm -qip gcc error: open of gcc failed: No such file or directory [root@xxj Packages]# rpm -qip gcc-4.4.7-16.el6.x86_64.rpm Name : gcc Relocations: (not relocatable) Version : 4.4.7 Vendor: CentOS Release : 16.el6 Build Date: Thu 23 Jul 2015 10:43:01 AM CST Install Date: (not installed) Build Host: c6b8.bsys.dev.centos.org Group : Development/Languages Source RPM: gcc-4.4.7-16.el6.src.rpm Size : 19496512 License: GPLv3+ and GPLv3+ with exceptions and GPLv2+ with exceptions Signature : RSA/SHA1, Sat 25 Jul 2015 04:41:11 AM CST, Key ID 0946fca2c105b9de Packager : CentOS BuildSystem <http://bugs.centos.org> URL : http://gcc.gnu.org Summary : Various compilers (C, C++, Objective-C, Java, ...) Description : The gcc package contains the GNU Compiler Collection version 4.4. You'll need this package in order to compile C code.
效验
检查包安装后生成的文件是否被修改过
rpm -V (包名)
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 能力
[root@xxj Packages]# rpm -V wget S.5....T. /usr/share/locale/zh_TW/LC_MESSAGES/wget.mo
3、rpm包管理:检验来源合法性和软件包完整性
验证包完整性:通过单向加密(md5|sha1)效验码
验证来源合法:公钥加密(RSA)
命令:gpg,pgp
导入制作者的公钥:CentOS发行商的公钥在ISO文件 “RPM-GPG-KEY-CentOS-6”
rpm --import 公钥
rpm -K /PATH/TO/PACKAGE_FILE
rpm --checksig /PATH/TO/PACK_FILE
--nosignature 不检查来源合法性
--nodigest:不检查完整性
[root@xxj Packages]# rpm -K zsh-4.3.11-4.el6.centos.x86_64.rpm zsh-4.3.11-4.el6.centos.x86_64.rpm: rsa sha1 (md5) pgp md5 OK
4、rpm包数据库重建
rpm包数据库路径: /var/lib/rpm
重建:
rpm --initdb:初始化
如果事先不存在一个数据库,则新建之
rpm --rebuilddb:重建
直接重建数据库,会覆盖原有的库
四、YUM管理
1、yum概述
YUM: Yellowdog Updater Modified
yum repositories
文件服务器(共享rpm包):通过yum所支持的文件共享机制将各rpm包通过文件服务器共享
repository:仓库
1、各rpm包
2、依赖关系、程序包安装后所能生成的文件列表等元数据文件
ftp,http,nfs,file
yum客户端工作机制:
1、配置文件:指定各可用的yum仓库
2、缓存元数据:yum会到各可用yum仓库获取元数据,并缓存至本地
3、分析元数据:根据具体操作请求完成元数据分析:可能包括检查依赖关系,文件列表等信息
4、执行具体操作
2、yum配置
要使用yum管理应用程序,首先得配置其可用的yum仓库,保存在配置文件中
yum的配置文件:
/etc/yum.conf 全局配置,一般默认即可不用更改
/etc/yum.repos.d/*.repo
配置文件格式:由两段组成,类似windows的ini配置文件
[main]:主配置段
[repo]:仓库配置段
配置repo:
[repo_ID]
name=NAME
baseurl=仓库的访问路径
enabled=[1|0] 1表示启用,0表示不启用,如果不存在该配置,则默认启用
gpgcheck=[1|0] 是否检查包来源合法性和完整性
gpgkey=公钥文件 (可以在本地,也可以是服务器端路径)
cost=定义此仓库的开销,默认为1000 数值小的优先使用
yum程序的配置文件指定对应服务器访问方式:
ftp ftp://server/path/to/repo
http http://server/path/to/repo
nfs nfs://server/nfs_path
file file:///path/to/repo
3、yum的使用
yum repolist [all|enabled|disabled] 默认列出所有可用repo 启用,禁用
yum clean [all|package|metadata|expire-cache|rpmdb|plugins] 清除所有缓存
yum 缓存路径/var/cache/yum
yum makecache 生成缓存
yum list [all|installed|available] 默认列出所有仓库的rpm包 已安装,可安装
yum grouplist
yum info (包名) 可以是当前系统中未安装的程序
yum groupinfo
三个跟开发相关的包组:
Desktop Platform Development:有图形程序时需要安装此组
Server Platform Development
Development Tools
安装:yum install,yum groupinstal
重装:yum reinstall
卸载:yum [remove|erase],yum greoupremove
检查可升级的包:yum check-update
要升级到指定版本:yum update x-4.4.12-1el7.x86_64.rpm
升级:yum update
降级:downgrade pack_name
查询某文件由哪个rpm包安装后生成的:provides /path/to/somefile
查看yum的命名历史:yum history
yum配置文件中可用的宏
$releasever:程序的版本,对Yum而言指的是redhat-relrase版本。只替换为主版本号,如Redhat6.5 则替换为6
$arch:系统架构
$basharch:系统基本架构,如i686,i586等的基本架构为i386
$YUM0-9:在系统定义的环境变量,可以在yum中使用
1. 安装yum-downloadonly或 yum-plugin-downloadonly 软件包。
yum install yum-downloadonly yum install xxx --downloadonly --downloaddir=/xxx -y
说明:yum-downloadonly是yum的一个插件,使得yum可以从RHN或者yum的仓库只下载包而不安装。
安装完成后,查看/etc/yum/pluginconf.d/downloadonly.conf 配置文件的内容,确认这个插件已经启用:
[main] 注意:如果没有该配置文件要自己创建
enabled=1
[root@xxj 6]# yum repolist Loaded plugins: fastestmirror Loading mirror speeds from cached hostfile repo id repo name status CentOS6 CentOS6_cdrom 6,575 repolist: 6,575 [root@xxj 6]# [root@xxj 6]# yum info gcc Loaded plugins: fastestmirror Loading mirror speeds from cached hostfile Available Packages Name : gcc Arch : x86_64 Version : 4.4.7 Release : 16.el6 Size : 10 M Repo : CentOS6 Summary : Various compilers (C, C++, Objective-C, Java, ...) URL : http://gcc.gnu.org License : GPLv3+ and GPLv3+ with exceptions and GPLv2+ with exceptions Description : The gcc package contains the GNU Compiler Collection version 4.4. : You'll need this package in order to compile C code.
4、自己设置本地repo源
1、准备文件服务器ftp,http,nfs;使用httpd为例,请事先确保以安装httpd程序包
2、在/var/www/html目录。使用一个目录来保存准备制作称为yum仓库的所有rpm包
3、创建yum仓库
createrepo /var/www/html/openstack 事先安装好createrepo程序,创建好的repo源因为没有生成comps.xl文件,不能使用groupinstall,待后续学习
4.启动http服务
5.配置实用自建的yum仓库
7.测试使用
五、编译安装
源码:c,c++
perl
python
编译安装的步骤:
1、拿到源代码并解压
2、进入源码目录中
3、执行configure脚本 # ./configure
4、编译 # make
5、安装 # make install
这些都是典型的使用GNU的AUTOCONF和AUTOMAKE产生的程序的安装步骤:
./configure:是用来
make:是用来编译的,它从Makefile中读取指令,然后编译。
make install:是用来安装的,它也从Makefile中读取指令,安装到指定的位置。
1、configure,这一步一般用来生成 Makefile,为下一步的编译做准备,会检测你的安装平台的目标特征,自动设定源程序以符合各种不同平台上系统的特性,并且根据系统叁数及环境产生合适的Makefile文件或是C的头文件(header file),让源程序可以很方便地在这些不同的平台上被编译连接。比如它会检测你是不是有CC或GCC,并不是需要CC或GCC,它是个shell脚本。
你可以通过在 configure 后加上参数来对安装进行控制,
比如代码:./configure �Cprefix=/usr 意思是将该软件安装在 /usr 下面,执行文件就会安装在 /usr/bin (而不是默认的 /usr/local/bin),资源文件就会安装在 /usr/share(而不是默认的/usr/local/share)。同时一些软件的配置文件你可以通过指定 �Csys-config= 参数进行设定。有一些软件还可以加上 �Cwith、�Cenable、�Cwithout、�Cdisable 等等参数对编译加以控制,你可以通过允许 ./configure �Chelp 察看详细的说明帮助。
2、make,这一步就是编译,大多数的源代码包都经过这一步进行编译(当然有些perl或python编写的软件需要调用perl或python来进行编译)。如果 在 make 过程中出现 error ,你就要记下错误代码(注意不仅仅是最后一行),然后你可以向开发者提交 bugreport(一般在 INSTALL 里有提交地址),或者你的系统少了一些依赖库等,这些需要自己仔细研究错误代码。
3、make insatll,这条命令来进行安装(当然有些软件需要先运行 make check 或 make test 来进行一些测试),这一步一般需要你有 root 权限(因为要向系统写入文件)。
到此时,就可以运行make进行编译,在运行make install进行安装了,最后运行make clean删除临时文件。
$ make
$ make install (注:运行这个要有足够的权限)
$ make clean
利用configure所产生的Makefile文件有几个预设的目标可供使用,其中几个重要的简述如下:
make all:产生我们设定的目标,即此范例中的可执行文件。只打make也可以,此时会开始编译原始码,然后连结,并且产生可执行文件。
make clean:清除编译产生的可执行文件及目标文件(object file,*.o)。
make distclean:除了清除可执行文件和目标文件外,把configure所产生的Makefile也清除掉。
make install:将程序安装至系统中。如果原始码编译无误,且执行结果正确,便可以把程序安装至系统预设的可执行文件存放路径。如果用bin_PROGRAMS宏的话,程序会被安装至/usr/local/bin这个目录。
make dist:将程序和相关的档案包装成一个压缩文件以供发布。执行完在目录下会产生一个以PACKAGE-VERSION.tar.gz为名称的文件。 PACKAGE和VERSION这两个变数是根据configure.in文件中AM_INIT_AUTOMAKE(PACKAGE,VERSION)的定义。在此范例中会产生test-1.0.tar.gz的档案。
make distcheck:和make dist类似,但是加入检查包装后的压缩文件是否正常。这个目标除了把程序和相关文件包装成tar.gz文件外,还会自动把这个压缩文件解开,执行 configure,并且进行make all 的动作,确认编译无误后,会显示这个tar.gz文件可供发布了。这个检查非常有用,检查过关的包,基本上可以给任何一个具备GNU开发环境-的人去重新编译。
configure脚本的通用功能:
我们需要定义的配置:
1、指定安装路径
--prefix=/usr/local/package_name
--sysconfigdir=/etc/package_name
2、指定启用或禁用的特性
--enable-FEATURE 例如:--enable-fpm
--disable-FEATURE
3、指定所依赖功能,程序或文件
启用某功能: --with-FUNCTION=该程序的安装路径
--without-FUNCTION
不同的程序,其configure脚本功能不同,要获取帮助
./configure --help
二进制程序的访问方法
/etc/profile.d/apache.sh
PATH=/usr/local/apache/bin:/usr/local/apache/sbin:$PATH
expore PATH
source /etc/profile.d/apache.sh
头文件输出给系统
ln -sv /usr/local/apache/include /usr/include/httpd
让系统重新生成库文件路径缓存
vim /etc/ld.so.conf.d/httpd.conf
/usr/local/apache/lib
ldconfig
导出man文件
/etc/man.conf
添加 MANPATH /usr/local/apache/man
或者直接使用命令:man -M /usr/local/apache/man apache
总结:源码编译安装
前提:准备好开发环境
编译过程:
./configure
make
make install
输出
头文件
库文件
二进制程序
man文档