zoukankan      html  css  js  c++  java
  • 第五部分系统管理 源代码与软件包 安装

    第五部分系统管理  源代码与软件包

    开放源代码的软件安装与升级
    源代码    +编译器+目标文件+函数库=可执行文件 =二进制文件
    编译器  gcc    cc     
    编译工具 make    根据makefile文件     此文件有厂商提供的configure或config软件来检测并生成
    注意看readme 和install  由厂商提供的说明文件(如果安装不成功)
     configure   程序检测
    1、合适的编译器
    2、所需要的函数库和依赖的软件
    3、操作系统平台即linux的核心版本是否适合本软件
    4、核心的表头定义文件header include是否存在    驱动程序要检测
     
    建立makefile命令./configure
    --prefix=PREFIX
    指定软件安装的目录   未指定  默认为/usr/local
    --enable-all-clocks
     
    --enable-parse-clocks
     
    函数库:/usr/include        /usr/lib      /usr/lib64   不同的操作系统  版本  发行版  会有不同    
     
     
     
     
     
    将源代码的纯文字文件打包压缩减小容量利于在网络上传输    先以tar打包    然后在意压缩技术来压缩   通常会是gzip和bzip2的压缩格式  后者压缩率更高   。
    tarball是一个软件包  解压后会有源代码的文件、检测程序文件  congfiure等   本软件的安装说明INSTALL或者README
    升级安装软件:
    原因 :需要新的功能   
    旧版的安全问题
    旧版的执行效率问题
    更新的方法:
    直接源代码进行编译
    直接以编译好的二进制程序来安装   (需要厂商提供)
    其中rpm中的yum和dpkg软件管理的apt线上更新模式都是预先编译安装的
    tarball安装流程
    1.下载tarball包
    2.解压缩产生源代码
    3.gcc进行源代码编译   产生object files目标文件
    4.gcc进行函数库   主   副程序的连接    形成主要的二进制文件
    5.将二进制文件以及相关的配置文件安装到自己的主机上面
    传统程序语言c   进行编译的范例
    1.编辑源代码
    vim hello.c
    #include <stdio.h>
    int main(void)
    {
    printf("hello world ");
    }
    2.编译
    gcc hello.c
    ./a.out   默认产生的可执行文件
    方法二
    gcc -c hello.c 编译hello.c源代码文件  生成hello.o目标文件
    ll hello* 查看
    gcc -o hello hello.o    将.o文件生成可执行文件   指定生成hello名称的二进制文件
    ./hello 执行生成的名称为hello文件
    3.主程序  子程序的链接
     
    vim thank.c
    #include <stdio.h>
    int main(void)
    {
    printf("hello world ")
    thank_2();
    }
     
    vim thank_2.c
    #include <stdio.h>
    void thank_2(void)
    {
    printf("thank you! ");
    }
    4.程序的编译和链接  link
     gcc -c thanks.c thanks_2.c
    gcc -o thanks thanks.o thanks_2.o
    ./thanks
    或者加入优化的参数选项
    gcc -O -c thanks.c   thanks_2.c
    gcc -Wall -c thanks.c thanks_2.c
     
    5.呼叫外部函数库:加入链接的函数库
    vim sin.c
    #include <stdio.h>
    #include <math.h>
    int main(void)
    {
    float value;
    vlaue=sin(3.14/2);
    printf("%f ",value);
    }
    数学函数库使用的libm.so这个函数库   最好在编译的时候将这个库文件加入进去      libm.so在编译的写法上使用的-lim
    编译时加入额外的函数库链接的方式
    gcc sin.c -lm -L/lib    -L/lib64
    ./a.out
    -lm拆开
    l   小写的L  是加入某个函数库的意思
    m则是libm.so这个函数库  .a或者.so不需要写
    L的意思是我要的函数库libm.so需要到/lib或者/lib64里面去搜索,后面的lib和lib64不需要写  因为linux默认将库放在这两个位置   如果自己定义的库文件放在其他的目录   则需要在这里指定
    include  默认放在usr/include/下面 如果文件并非放在这里   就需要利用大i即I  来指定include文件放置的目录
    例子:gcc sin.c -lm -I/path
     
     
    make进行宏编译
    源代码文件互相调用过多时   gcc用起来会比较麻烦
    此时利用make会简化操作流程
    简化编译时所需要下达的指令
    在编译完成之后   及修改某个源代码文件  make仅仅会针对被修改了的文件进行编译   其他的目标文件不会变更
    最后依照相依性来更新执行文件
    1.makefile文件的规则
    语法:
    target:目标文件1   目标文件2       ( 标签  建立 调用参数)
    <tab> gcc -o 将要建立的执行文件   目标文件1   目标文件2     (具体的命令)
    例子:
    clean:
    rm -f main main.o hello.o  sin_value.o
    执行make clean  就会执行makefile文件中clean标签中的命令
    如果想要先清除目标文件   再进行编译的可以执行:make clean main 
     
    利用shell脚本  变量替换
    简化makefile
    vi makefile
    LIBS=-lm
    OBJS=main.o hello.o sin_value.o
    main:${OBJS}
    gcc -o ${OBJS} ${LIBS}
    clean:
    rm -f main ${OBJS}
    也可以在命令行中指定环境变量
    例如:CFLAGS="-Wall" make clean main
    环境变量优先级规则
    make指令列后面加上的环境变量为先
    makefile里面指定的环境变量为次
    shell原来具有的环境变量为最次
    特殊的环境变量
    $@代表当前的标签
    例如:
    main:${OBJS}
    gcc -o $@ ${OBJS}  ${LIBS}   其中$@就代表main
     
    tarball管理建议
    1.源码所需要的基础软件
    gcc或者cc等  编译器
    make及autoconfig等软件
    需要kernel提供的library以及相关的include文件
     
    gcc等工具
    yum groupinstall "Development Tools"
    图形界面
    yum groupinstall "X Sostware Development"
    如果软件较旧
    yum groupinstall "Legacy Software Development"
    2.源代码安装步骤
    解压---阅读install或readme----建立makefile(configure)----》make编译等----》make install执行install标签的命令
    3.指令下达方式
    ./configure 创建makefile文件
    make clean 清除遗留的目标文件
    make 编译  建立可执行文件
    make install 执行安装    主要的作用就是将编译完成的文件放到文件系统中     
    如果安装所有文件到一个独立的目录中  比如/usr/local/packages这个目录  那么必须手动的将这个软件的man手册写入/etc/man_db.conf中去
    前面的每个步骤都是后面的必要条件
     
    4.tarball安装的建议
    /usr/local/src 里面解压缩源代码文件放置的位置
    /usr 系统发行版本身的软件安装位置
    /usr/local 用户自行安装的软件位置   建议
    /usr/local/man man命令默认搜索说明文件位置
     
    举例:   apache这个软件说明的服务器安装位置
    /etc/httpd 配置文件
    /usr/lib 库文件
    /usr/bin 执行文件
    /usr/share/man 说明文件
    如果以tarball来安装   默认就会变为
    /usr/local/etc
    /usr/local/bin
    /usr/local/lib
    /usr/local/man
    其他的软件安装时也会安装到上面的几个目录中   当移除文件时   会很难追查文件的来源,所以建议将软件安装到单独的目录当中   例如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
    man page也要加入环境当中  /usr/local/apache/man    加入到/etc/man_db.conf内的40-50行左右处
    写下:MANPATH_MAP /usr/local/apache/bin /usr/local/apache/man
     
    5.简单的范例

    cd /usr/local/src
    tar -zxvf /root/ntp-4.2...tar.gz
    cd net-4.2..
    cat INSTALL或者README
    ./configure --prefix/usr/local/ntp --enable-all-clocls --enable-parse-clocks
    make clean;make
    make check
    make install 
    利用patch更新原始代码
     
    函数库的管理
    函数库又分为静态和动态两种
    静态函数库   :
    名称: 扩展名为.a    例如:libxxx.a
    编译行为:    在编译的时候回直接整合到执行程序当中   利用静态函数库编译成的文件会比较大
    独立执行: 可以独立执行  不以来外部的函数库
    升级难度: 难   需要重新编译全部源代码
    动态函数库
    名称 扩展名为.so
    编译行为 编译的过程中程序源代码中有一个指针指向动态的函数库    只有当需要函数库的时候  程序才会去读取函 数库。
    独立执行的状态:不能够独立执行   必须携带必要的函数库  并且函数库的绝对路径不能改变
    升级难度: 当函数库升级后   执行文件不需要进行重新编译   前提条件   新旧函数库的名称和路径不能改变
    大部分的函数库都放置在/lib64    /lib目录下    kernel的函数库放在/lib/modules里面
     
    ldconfig与/etc/ld.so.conf
    增加函数库的读取效能,将常用到的动态函数库加载到内存当中  提高读取速度
    方法:
    1.在/etc/ld.so.conf里面写入动态函数库所在的目录    注意不是文件  而是目录
    2.利用ldconfig这个执行文件将/etc/ld.so.conf的资料读入内存中
    3.同时将资料备份一份在/etc/ld.so.cache这个文件中
     
    语法
    ldconfig [-f conf] [-C cache]
    ldconfig [-p]
     
    -f conf  某个文件名称    使用此文件作为函数库的取得路径  而不是/etc/ld.so.conf为默认
    -C cache   暂存函数库资料   而不是以/etc/ld.so.cache作为默认值
    -p 列出目前所有函数库资料内容   在/etc/ld.so.cache内的资料
     
    举例
    mariadb 库函数在/usr/lib64/mysql当中   如何读进cache
    vim /etc/ld.so.conf.d/vbird.conf
    /usr/lib64/mysql     新增此行
    ldconfig     执行
    ldconfig -p     查看加载结果
     
     
    动态函数库解析    ldd
    判断某个可执行的文件内含有什么样的动态函数库    利用ldd
    语法 ldd [-vdr] [filename]
    v  verbose
    d 重新将资料有丢失的link点显示取来
    r 将ELF有关的错误显示
    举例:ldd /usr/bin/passwd 找出此程序的函数库资料
    ldd -v /lib64/libc.so.6 找出榆次函数库相关的其他函数库
    当安装rpm软件包  以非yum方式(自动解决依赖关系)安装的时候    解决相依赖的关系  需要先ldd查看相依赖函数库之间的相关性    
     
    检验软件的正确性
    md5sum       sha1sum    sha256sum
    为防止被恶意篡改需要验一下文件
    /etc/passwd
    /etc/shadow
    /etc/group
    /usr/bin/passwd
    /sbin/rpcbind
    /bin/login
    /bin/ls
    /bin/ps
    /bin/top
    以上文件需要建立shell script的方式来自动检查指纹  即哈希值
    md5sum/sha1sum/sha256sum  [-bct] filename
    md5sum/sha1sum/sha256sum  [--status|--warn]  --check filename
  • 相关阅读:
    敏捷开发
    开撕队-软件需求规格说明书
    开撕队前来问候
    Four-operations: 使用node.js实现四则运算程序
    wordcount
    编码的故事转载2018-02-28更新
    MySQL学习笔记2018-02-07更新
    Linux各文件及目录说明2018-03-01更新
    Linux安全运维笔记2018-03-01更新
    jQuery实现商品五星评价
  • 原文地址:https://www.cnblogs.com/dongguolei/p/7902596.html
Copyright © 2011-2022 走看看