zoukankan      html  css  js  c++  java
  • linux 基础 软件的安装 *****

    一软件的安装   原代码与tarball

    源代码----》编译------》可执行文件
    查看文件类型   file命令    是否是二进制文件
    注意如果文件的可执行权限
    .c结尾的源文件------------》gcc 如果存在调用外部函数库  则链接外部函数库----------》gcc程序编译   -c 生成目标文件   以.o结尾---------》gcc程序    -o      链接所有的目标文件    生成最终的二进制可执行文件
    大部分的库文件在/usr/include    /lib     /usr/lib里面
     
     
    make 命令与configure  运作流程
    make找makefile      maefile文件由软件开发商写的侦测程序来检测用户的运行环境    看此环境是否有此软件运行所需要的功能     此侦测程序名称为configure     或者config        该程序会主动建立makefile文件
    configure侦测程序需要做的步骤
    1.是否有合适的编译程序     linux中一般就是gcc
    2.是否存在该程序需要的函数库 或者其他需要的相依软件
    3.linux的核心版本是否适合该软件
    4.核心的表头   header include  是否存在
    TARBALL    根本目的就是  节省空间   将多个源文件先以tar打包   然后再压缩  以前为*.tgz    当前为.bzip2
    所以文件名一般为*.tar.bz2结尾     
    所以将tar文件解压之后   通常会有下面这些文件
    源代码文件
    侦测程序文件    configure   或者config
    软件的简易说明与安装说明 install或者readme
          更新软件的方法
    直接以源代码通过编译来安装与升级
    直接以编译好的二进制文件来安装与升级   适用于厂商用的系统与自己用的系统发行版相同 
    安装tarball的流程
    1下载
    2解压tarball  产生源代码文件
    3以gcc进行源代码的编译   会产生object 目标文件
    4gcc进行函数库   主   子程序的链接   形成二进制可执行文件
    5将二进制文件及相关的配置  安装到主机上面
    其中3和4步骤可以通过make指令来简化
    例子
    vim hello.c 编写源代码
    gcc hello.c 编译源代码  生成可执行文件   默认为a.out
    也可以 gcc -c hello.c 编译源代码   生成目标文件     以.o结尾
    gcc -o hello hello.o  编译源代码   将目标文件生成可执行文件      
    ./hello 执行二进制文件
    主子程序的链接:子程序的编译
    其中p1需要调用p2
    gcc -c p1.c p2.c
    gcc -o p p1.o p2.o
    ./p
    gcc -O   此参数为优化
    -Wall   产生更加详细的编译过程信息  包括警告信息
    编译时加入外部函数库的方式
    gcc sin.c -lm -L/lib -L/usr/lib
    其中-l是加入某个函数库的意思
    m代表libm.so这个函数库
    -L后面代表函数库要搜索的路径
     
    gcc sin.c -lm -I/usr/inclue
    -I /path后面的路径代表搜索头文件包含的include的库的搜索路径
    make进行宏编译
    举例  三个文件
    a.c   b.c  d.c
    生成目标文件
    gcc -c a.c
     
    gcc -c b.c
    gcc -c d.c
    链接成执行文件
    gcc -o main a.o b.o d.o -lm -L/usr/lib -L/lib
    执行
    ./main
    步骤较多
    如果利用make程序会简化很多
    创建makefile文件
    vim makefile
    main:a.o b.o d.o
    gcc -o main a.o b.o c.o -lm
    用makefile的规则进行编译
    make
    make的语法
    标签:目标文件1   目标文件2
    <tab>gcc -o 最终的二进制文件名    目标文件1   目标文件2
    一个makefile文件中可以存在多个标签  即可以有多个动作
    main:a.o b.o d.o
    gcc -o main a.o b.o d.o -lm
    clean:
    rm -f main a.o b.o d.o
    运行时   可以只运行make clean  也可以先后运行  make clean main
    简化makefile文件
    变量代替重复的字符串    $@代表 当前环境中的标签
    例如
    LIBS = -lm
    OBJS = a.o b.o d.o
    makefile
    main:${OBJS}
    clean:
    rm -f main ${OBJS}

    环境变量优先级 

    make指令后面跟的参数》makefile文件中指定的参数》shell环境中指定的参数
    安装tarball的软件    需要三个方面的准备
    c编译器   gcc或cc compiler
    make和autoconfig   简化编译流程的软件
    kernel提供的函数库的include文件
     
    安装以上的开发工具
    yum -y gourpinstall "development tools"   可以安装gcc等软件的开发工具
    yum groupinstall "x software development"    安装图形接口的支持

    安装tarball的基本流程
    1获取源代码
    2解压tarball压缩包
    3进入压缩后的包目录   查看install、readme等的相关文件内容
    4建立makefile    以自动侦测程序configure来建立此文件
    5编译   以make这个程序   根据makefile文件来进行编译的过程
    6安装   以make程序      根据makefile文件中的install标签来进行安装    即make install   命令
     
    tarball软件的安装指令
    1./configure  需要参考install和readme       用来创建makefile
    2make clean     读取makefile   清理原来旧的目标文件
    3make会依据makefile当中的预设工作进行编译的行为    
    4make install  根据makefile里面的install的项目    执行数据安装到预定的目录中
    一般tarball软件安装的建议   删除和升级
    发行版自带的软件大多在/usr里面    用户自定义安装软件则建议安装到/usr/local的里面,因为预设情况下man会搜索/usr/local/man里面的说明文件    所以  如果我们将软件安装在/usr/local下面    该软件的说明文件就可以被找到了。
    原始代码tarball建议放在/usr/local/src  的下面
    举例
    apache是www的服务器软件    如果是发行版自带    则安装路径如下
    /etc/httpd
    /usr/lib
    /usr/bin
    /usr/share/man 
    其中etc     lib    bin     man分别代表配置文件   函数库   执行文件    联机帮助文件
    如果是用户自行以tarball来安装     则会放在预设的/usr/local里面     
    /usr/local/etc
    /usr/local/lib
    /usr/local/bin
    /usr/local/man 
    但是所有的软件默认都会安装到上面提到的local的总目录中的四个文件夹中    这样想删除软件的时候,很难追查档案的来源    而如果安装时选择的是单独的目录    则会容易得多 
    例如将apache软件安装到/usr/local/apache/下面
    /usr/local/apache/etc
    /usr/local/apache/bin
    /usr/local/apache/lib
    /usr/local/apache/man 
    此时如果想删除软件就会很简单   将该目录删除即可   即使用rm -rf /usr/local/apache
    此种方式在执行某些指令的时候    需要参考PATH环境变量所记录的路径    但是/usr/local/apache/bin   肯定不在PATH这个环境变量里   所以在执行apache的指令就需要用到绝对路径    或者将上面的绝对路径加入到PATH环境变量里面
    还包括man的绝对路径
    tarball在升级上可能会有麻烦 特别是在多个软件互相有关联的情况下 tarball卸载上面具有比较高的难度
    所以建议如下
    1将tarball的原始数据解压到/usr/loacl/src当中
    2安装到/usr/local这个默认的路径下
    3考虑到卸载 最好将每个软件单独的安装到/usr/local的下面
    4为安装到单独的目录的软件 加入man page到path变量中
    例如 /etc/man.config 中的40-50行处加入
    MANPATH /usr/local/software/man
     
    实例1
    a 安装ntp软件   假设tarball文件位于root目录中
    进入目录 cd /usr/local/src     
    解压tarball      tar -zxvf /root/ntp-...tar.gz
    cd ./ntp -../    进入解压后的目录
    查看install文件和readme     vim  INSTALL    和vim  README
    b 检查configure支持参数    并实际建立makefile规则文件
    ./configure --help | more   查询可用的参数
    --prefix=PREFIX 后面接的路径就是安装目录    未指定则
    --enable-all-clocks
    --enable-parse-clocks
    ./configure --prefix=/usr/local/ntp --enable-all-clocks  --enable-parse-clocks    开始建立makefile
    在此过程中会显示gcc的检查  需要留意      config.status:creating Makefile   创建makefile文件
    c 执行编译与安装
    make clean;make
     
    利用patch更新源代码     更新的方式  有全部更新和部分更新   patch就是后者     不用将所有的tarball全部下载再编译导致费时费力    只更新软件所有源代码中的一小部分    节省资源   
    patch语法如下    
    patch -p 数字   <   patch_file  此命令仅仅更新原始代码文件
    假如patch_file中的第一行是/home/guest/example/expatch.old    如果patch -p1 < patch_file    则更新的文件为home/guest/example/expatch.old     如果patch -p4 < patch_file   则更新的是expatch.old    数字代表去掉几个斜线
    如果patch文件有错误   更新完毕之后   也可以进行回滚  即恢复到上一个版本  
    patch  -R < patch_file
    打完补丁之后  需要重新编译  并且安装
    make clean main
    make install
     
    函数库的管理
    函数库根据是否被编译到程序内部而分为动态与静态        即static与dynamic两类
    静态库:
    一般扩展名为.a      通常扩展名为libxxx.a
    编译时将库编译进二进制文件中     所以执行文件会比较大
    优点就是可以独立的执行      如果需要升级  则所有文件都需要重新编译
    动态库:
    一般扩展名为.so    libxxx.so
    在主程序中只有一个指针指向动态的共享库 当使用该动态的函数库的时候 程序会主动去某个路径下读取 所以动态函数库不能随意删除或者移动 因为会影响很多相依赖的程序软件。
    升级 执行文件无法独立运行 当函数库升级之后 执行文件不需要进行重新编译 前提条件是函数库前后的版本文件名必须相同 否则主程序会找不到目标库文件
    绝大部分的函数库放在/usr/lib /lib的目录下 另外linux系统里的很多函数是kernel提供的 所以kernel的函数库放在
    /lib/modules的里面 不同版本的内核中的函数库很多事不同的 所以换过内核后 很多原来的软件无法运行。
    将常用函数库调用到内存中 可以加快软件的运行速度
    在/etc/ld.so.conf 文件中写下想要加载到内存中的目录 注意是目录
    然后利用ldconfig软件 将/etc/ld.so.conf中写入的资料加载到内存当中
    同时将数据记录一份在/etc/ld.so.cache 这个文件当中
    ldconfig也可以判断动态函数库的链接信息
    ldd 程序的动态函数库解析  
    判断某个可执行文件包含什么动态的函数库
    ldd [-vdr] [filename]
    v vendor
    d 将丢失的link显示出来
    r 将ELF有关的错误内容显示出来
    例子 找出/usr/bin/passwd这个文件的函数库数据
    ldd /usr/bin/passwd
     
    libaudit.so.0=>/lib/libaudit.so.0
    libselinux.so.1=>/lib/libselinux.so.1
    libc.so.6=>/lib/libc.so.6
    libpam.so.0=>/lib/libpam.so.0   这里是pam模块
    例子2
    找出/lib/libc.so.6  这个函数的相关函数库
    ldd -v /lib/libc.so.6
    /lib/ld-linux.so.2
    linux-gate.so.1=>
     
    /lib/libc.so.6:
    ld-linux.so.2=>/lib/ld-linux.so.2
    ld-linux.so.2=>/lib/ld-linux.so.2
    ld-linux.so.2=>/lib/ld-linux.so.2
     
    检验软件的正确性
    md5sum
    sha1sum
    安全性考虑  需要验证的文件  包括
    /etc/passwd
    /etc/shadow
    /etc/group
    /usr/bin/passwd
    /sbin/portmap
    /bin/login
    /bin/ls
    /bin/ps
    /usr/bin/top
     
     
     
     
    RPM   SRPM   和YUM   软件的安装方式二
    常见的软件管理分别是RPM和dpkg   前者是redhat系    后者是debian
    自动解决软件的想依赖    redhat为yum     suse为you    mandriva为urpmi软件等等   
    而dpkg包管理方式主要是apt的在线升级机制
    概念
    RPM    全名为redhat package manager    
    特点为将要安装的软件先编译过   并且打包成rpm机制的包装文件  文件里面的数据库记录着此软件安装时的必备条件。安装软件之前会先检查linux主机的环境是否支持   如果不支持则不安装
    优点:编译完成   打包完毕   不需要重新编译       依赖信息已经记录到linux主机的数据库上  方便查询升级和卸载
    缺点:二进制文件    要求安装的环境与打包时的环境必须一致或者相当  即发行版本必须一致    并且要求软件的相依属性要满足     卸载时尤其需要注意   最底层的软件不能够先卸载  否则会造成整个系统的问题
    SRPM source RPM的意思     也即包含原始代码      扩展名为***.src.rpm  与tarball的不同是包含软件所需要的相依性的软件说明 以及所有rpm文件所提供的数据   同时与rpm不同的是   也提供了参数配置文件  configure与makefile   
    下载SRPM文件    
    先将软件以RPM管理的方式编译   此时SRPM会被编译成为RPM文件     
    将编译完成的RPM文件安装到linux系统之中
    SRPM因为有源代码  所以比RPM更加灵活   RPM不能修改参数并编译        但是SRPM可以修改参数编译  并且安装。
     
     
     
    RPM在打包软件的时候   同时加入一些信息    包括软件的版本   软件作者  相依属性的其他软件  本软件的功能说明  本软件的所有文件的记录等等    然后再linux上面建立一个rpm数据库   当要安装某个以rpm的软件时   rpm会检验该数据库里是否已经存在相关的软件了  如果数据库显示不存在那么这个rpm软件就不能安装
     
    因为以上的原因   就出现了YUM 在线升级的方式
    xx.rpm   为一般软件      devel.xx.rpm为开发版本     普通用户一般会安装前者
    YUM根据软件中的依赖属性的列表  对比主机系统中已经安装的软件相比较    如果没有就安装
  • 相关阅读:
    asp.net 数据导出到Excel
    系统架构之畅想
    access2003绿色中文版(转)
    项目那点事(共享)
    不错的消息提示
    配置Windows media service 流媒体服务器
    MemberShip 数据库的安装,web.config的配置及数据库文档结构
    windows server 2003 service pack 2 无法安装...产品密钥可能无效
    残忍,人
    js小技巧鼠标滑过显示大图
  • 原文地址:https://www.cnblogs.com/dongguolei/p/7896366.html
Copyright © 2011-2022 走看看