天天看点

Linux软件包安装

一、程序开发与编译涉及问题

api: posix   可移植操作系统规范    api同则可跨平台编译

abi: application binary interface  系统应用二进制接口

  linux windows abi不同 即api相同时 linux编译后无法在windows运行。

二、软件包管理

   1.基本概念

      debian: dpt

      redhat: rpm, redhat package manager

软件包的组成部分:     二进制程序:/bin, /sbin |系统自身所需|, /usr/bin, /usr/sbin |用户基本管理|, /usr/local/bin, /usr/local/sbin|第三方程序| glibc: 系统核心库 openssl: 软件自身有的库 静态库.a结尾  动态库so结尾 库文件:/lib, /usr/lib, /usr/local/lib   库文件本身也是可执行程序但无法自我执行需被其他程序调用。因此,库文件通常被称为函数。     配置文件:/etc    xml格式配置较复杂     帮助文件:手册, readme, install (/usr/share/doc/)

         2.rpm   rpm is package manager

            rpm: 打包、安装、查询、升级、校验、卸载

            apt-get 解决依赖关系的前端工具

         3. yum rpm的前端工具

yellowdog: yum rpm –> yum

三、程序安装

编译安装:源代码  此方式安装程序管理复杂 编译器:gcc, g++     提供编译环境:开发环境         二进制:         库:/etc/ld.so.conf, /etc/ld.so.conf.d/*.conf 帮助手册:/etc/man.config, man -m  头文件:/usr/include      include stdio.h 安装程序的方式:     通用二进制格式     软件包管理器     软件包管理器的前端工具     源代码编译

四、rpm详解

1.源程序:name-version.tar.{gz|bz2|xz} 版本号:major.minor.release 主版本、次版本、发行号/修正号     bash-4.3.1.tar.xz 2.rpm包:name-version-release.arch.rpm     发行号:用于标识rpm包本身的发行号非程序的发行号且此号通常包含所适用的操作系统         el6: rhel6         centos6:         el5         suse11     arch: 主机平台         i686(奔腾2/amdk7之后的32位cpu)、x86_64、amd64、ppc、noarch(无硬件限制)     bash-4.3.2-5.el6.x86_64.rpm    rpm分包:     主包:核心包     分包:支包         bind  核心功能         bind-chroot  分支功能/可选功能 3.安装程序源     fedora-epel     http://mirrors.sohu.com     http://rpmfind.net    rpm包专用站     http://rpm.pbone.net/  同上 首选安装光盘其次epel包以保证安全 4.rpm包有验正机制:来源的合法性、软件包的完整性     gpg 是 pgp技术规范的一种开源实现         非对称加密:p公, s私  此种加密方式主要用于数字签名 加密 验证速度慢  rpm包 使用单向加密算法计算出特征码 如md5 再由rpm制作者私钥加密此特征码并附加在rpm包后/包内,即如能用公钥解密得到特征码,再使用同样的算法加密此软件包得到特征码,如两特征码同则可视为原版包。     redhat系列官方公钥:         /etc/pki/rpm-gpg/             rpm-gpg-key-centos-6         rpm   --import /etc/pki/rpm-gpg/rpm-gpg-key-centos-6   导入公钥             -k      --checksig   均可检测包 5.安装:rpm -i /path/to/rpm_file     -i|--install     -v, -vv, -vvv     -h: 以#显示安装进度,一个#表示2%的进度;     -ivh     忽略依赖关系: 不建议此项         --nodeps     测试安装:         --test     重新安装:         --replacepkgs     warning: /etc/sysconfig/named created as /etc/sysconfig/named.rpmnew 6.卸载:rpm -e 包名     --nodeps      --test     warning: /etc/sysconfig/named saved as /etc/sysconfig/named.rpmsave 7.查询:rpm -q|--query 包名     查询所有已经安装包:    查询时不支持通配符 如有*则作为包名的一部分         rpm -qa         rpm -qa | grep 'pattern'     查询包的摘要信息:         rpm -qi 包名 # rpm -qi zsh-4.3.10-5.el6.x86_64.rpm package zsh-4.3.10-5.el6.x86_64.rpm is not installed    查询时tab补全后反而显示包未安装 仅输入包名可查询信息     查询包安装生成的文件清单:         rpm -ql 包名  同上 仅包名     查询某文件是由哪个rpm安装生成的:         rpm -qf /path/to/some_file     查询包安装生成的配置文件:         rpm -qc 仅包名     查询包安装生成的帮助文档:         rpm -qd 仅包名     查询包相关的脚本:         rpm -q --scripts 仅包名         preinstall: 安装前脚本         postinstall: 安装后脚本         preuninstall: 卸载前脚本         postuninstall: 卸载后脚本 查询尚未安装的包的相关信息:     rpm -qpi /path/to/rpm_file         -i         -l         -d         -c         --scripts 除-a外均可使用 8.升级:     -u: 升级+安装   如未安装则安装      -f:仅升级     --force     --nodeps  升级可能会带来依赖关系问题     注意:内核不应该升级,应该尽可能安装,它允许多版本并存; 9.校验:rpm -v 包名 检测程序文件是否被修改 显示信息…..为未修改的位,提示信息详解如下: 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 10.rpm包的数据库:     /var/lib/rpm  大部分的数据库文件(非库文件)在/var/lib下     数据库重建:         --initdb: 新建 初始化 不会覆盖已存在的         --rebuilddb: 重建( 数据库损坏时)常用

五、yum

1.yum仓库位置       repodata目录所在位置就是我们作为yum仓库的位置 rhel5 yum仓库分成4个目录 rhel6 yum整合在一个目录 /etc/yum.conf  主配置文件 以中括号为分割的分段文件         /etc/yum.repos.d/*.repo  主配置文件的组成部分 分段格式如下:         section:         [main]默认配置、全局配置 具体如下 [main] cachedir=/var/cache/yum/$basearch/$releasever    缓存目录 keepcache=0     下载的rpm包(非源数据)是否永久保存 debuglevel=2  调试错误信息显示等级 级别越高越详细 logfile=/var/log/yum.log   日志文件 exactarch=1      下载rpm包时是否与本地平台完全精确匹配  1 yes 0 no obsoletes=1 gpgcheck=1    下载的rpm包是否自动检测来源合法性 1yes  0 no  plugins=1 installonly_limit=5 bugtracker_url=http://bugs.centos.org/set_project.php?project_id=16&ref=http://bugs.centos.org/bug_report_page.php?category=yum distroverpkg=centos-release repo文件格式         [repository_id] 仓库名         name=  描述信息         baseurl=   yum仓库地址         enabled={1|0}  是否启用         gpgcheck={1|0} 是否自动验证签名合法性         gpgkey= 如检查则设置key  手动指定key文件路径 系统默认仅centos-base.repo有效 [base] name=centos 6.4 x86_64 baseurl=http://172.16.0.1/cobbler/ks_mirror/centos-6.4-x86_64/ enabled=1 gpgcheck=0 cost=2000  默认2000 越小越优先使用 此项用于同文件中两段配置优先级设置 2.yum命令常用项     yum subcommand:            list {all|installed|available|recent|obsoletes 废弃的}    此命令可用通配符查看特定包        all选项的结果中 带@号installed  均已安装@后为安装通过的库  不带@如仅base则未安装即在base库   updates 有可用更新的包  extras 不属于任何仓库的不便归类的包          repolist [all|enabled|disabled]  查看当前可用yum库         info package_name   显示包相关信息无论是否是已安装的包        grouplist   包组       groupinfo "group_name"    包组名中含有空格的必须加双引号         clean [ packages | metadata | expire-cache | rpmdb | plugins | all ]   清理本地缓存的包、源数据等信息  一般仅清理源数据metadata         makecache  创建缓存         install package_name ...  安装包自动检测依赖关系并下载相关包             yum -y : 自动回答为yes;         reinstall package_name ...         check-update         update package_name ...         update-to  指定升级到的版本             y-0.2.1, y-0.2.2, y-0.3.0         remove|erase  package_name ... 卸载会同时卸载依赖此包的包         provides | whatprovides     查找文件由哪个包生成/将会生成        search  模糊匹配查找 不常用         groupinstall  通常需要安装的如下             开发组:                 rhel6,centos6: "development tools"、"server platform development" "desktop platform development"                 rhel5, centos5: "development tools"、"development libraries"         groupupdate         groupremove         localinstall   红帽5本地安装         localupdate         history: 查看此前安装卸载等操作历史;         --nogpgcheck  避免本地安装时检验来源

六、yum仓库的创建:

sohu源站仅在最新目录下有packets lftp:  可直接连sohu等源站文件均下载到登录前所在目录 可用!pwd查看之前目录     get,  单个软件  mget   多个     mirror 复制目录
    bye 退出     cd     pwd baseurl=http://mirrors.sohu.com/centos/6.4/os/x86_64/ 实际使用yum内置变量表示此路径 baseurl=http://mirror.centos.org/centos/$releasever/os/$basearch/ $releasever this is replaced with the package's version, as listed in distroverpkg. this defaults to the version of the redhat-release package. $arch this is replaced with your system's architecture, as listed by os.uname() in python. $basearch this is replaced with your base architecture. for example, if $arch=i686 then $basearch=i386. 软件仓库制作
createrepo  路径  即可创建 repodata/下文件详解: cd repodata/ ls 08faa81a545bb1157be476ada0524206d137084f50d285b9f7f875b3b02839df-other.sqlite.bz2 6ce81da964e0028da004fd4deb817a89d4db450a3d0af4a826d7c6abad0168a9-other.xml.gz d221c3d1c22cc4e4c4dafc40aa2bf3d353d67882a0d98f7f88ad8215f2d48818-filelists.sqlite.bz2 df5b1510036696c30d69d32d0609c5bfb6f121083ff97bf98a7540c644f6e4ac-primary.sqlite.bz2 f050fc8b41b566153c15bb1d287e6c5a016809415bfce9ddc3540176ce8afdaf-filelists.xml.gz f6f4019e1d7ff186c247c58d394a5faaab51e9ca1fb9c174c94a204588536d14-primary.xml.gz repomd.xml repomd.xml  包含以上文件的时间戳供yum连接源站时对比时间戳以确定是否需要更新源文件 filelists  即sqlite(小型嵌入式数据库引擎)、xml 两种格式的所有rpm包文件列表(rpm安装生成文件) primary 即 主配置文件  当然仓库内所有rpm包以及各rpm包之间的依赖关系 other 即其他信息如 rpm 升级日志

七、源程序编译安装

       登录站点下载源程序包 如httpd-2.2.26.tar.bz2

            为确保与服务器时间同步可用ntpdate 202.120.2.101(上海交大ntp授时)与授时服务器同步时间,再lftp至站点获取源程序。

make <—makefile 根据此文件make autoconf --> configure脚本 + makefile.in = makefile automake --> makefile.in make install   自动调用gcc等 编译安装步骤:     # cd source_code  切换到源代码目录     # ./configure          检查编译环境         让用用户定制编译配置(通过脚本选项)             --help             --prefix=/usr/local/apache   指定默认安装路径             --sysconfdir=     配置文件存放位置             --enable-so   启用动态模块支持             --enable-rewrite  支持重写 无报错则进行下一步     # make      完成显示类似make[1]: leaving directory `/root/httpd-2.2.26'     # make install 需要修改path环境变量  添加二进制文件存放位置 /usr/local/apache/bin    /usr/local/apache/sbin ldd  /bin/ls   ldd查看一个程序所依赖的库文件 # ldconfig -v: 重新搜索当前系统上所有库文件搜索路径下的库文件,并生成缓存 添加新的库文件路径后需运行此命令重新生成缓存 /etc/ld.so.cache; 库文件搜索路径:/etc/ld.so.conf, /etc/ld.so.conf.d/*.conf 添加路径 vim /etc/ld.so.conf.d/apache.conf    内容为软件库文件安装路径如 /usr/local/apache/lib /usr/local/apache/conf  不用添加路径 系统自动寻找 man命令需手动添加新软件路径 /etc/man.config, manpath=   添加 在文件其他manpath前 /usr/local/apache/man 头文件:include/文件夹下 ln -sv /usr/local/apache/include  /usr/include/httpd 链接即可 apachectl  start  启动服务  netstat –tnlp  查看80是否启动 hash命令查看启动的apachectl 是否是新安装的  往往不是 则需修改以上提到的path 等等 等等

八、src-rpm包安装流程

1.安装src包 建立mockbuild用户 用于大部分的src包安装,之后安装下载的src包 2.以非管理员账户进入之前安装生成的rpmbuild/specs/目录 执行rpmbuild –ba   ba选项生成二进制包和源码包    bb仅二进制包 rpmbuild -ba nginx.spec   如有报错类似如下 error: failed build dependencies:     geoip-devel is needed by nginx-1.0.15-5.el6.x86_64     gd-devel is needed by nginx-1.0.15-5.el6.x86_64     libxslt-devel is needed by nginx-1.0.15-5.el6.x86_64     pcre-devel is needed by nginx-1.0.15-5.el6.x86_64     perl(extutils::embed) is needed by nginx-1.0.15-5.el6.x86_64     缺少perl-extutils-embed包

      yum安装缺失的包

yum install geoip-devel gd-devel libxslt-devel pcre-devel perl

      成功rpmbuild后得到rpms目录下的rpm包安装即可如果是 -ba选项同时会得到srpms目录中有src-rpm包

     此例成功安装nginx后运行service nginx start

显示nginx默认页面

继续阅读