程序包编译

程序包编译安装

Application-VERSION-release.src.rpm --> 安装后,使用rpmbuild命令制作成二进制格式的rpm包,而后再安装
源代码-->预处理-->编译-->汇编-->链接-->执行
源代码组织格式:
    多文件:文件中的代码之间,很可能存在跨文件依赖关系
    C、C++:make 项目管理器
        configure脚本 --> Makefile.in --> Makefile
    java: maven

编译安装

C语言源代码编译安装三步骤:
     1、./configure
        (1) 通过选项传递参数,指定启用特性、安装路径等;执行时会参考用户的指定以及Makefile.in文件生成Makefile
        (2) 检查依赖到的外部环境,如依赖的软件包
     2、make 根据Makefile文件,构建应用程序
     3、make install 复制文件到相应路径
开发工具:
    autoconf: 生成configure脚本
    automake:生成Makefile.in
注意:安装前查看README,INSTALL

开源程序源代码的获取

    官方自建站点:
        apache.org (ASF:Apache Software Foundation)
        mariadb.org
    ...
    代码托管:
        SourceForge.net
        Github.com
        code.google.com
c/c++编译器: gcc (GNU C Complier)

编译C源代码

准备:提供开发工具及开发环境
    开发工具:make, gcc等
    开发环境:开发库,头文件
        glibc:标准库
实现:通过“包组”提供开发组件
    Development Tools
    Server Platform Development
生产实践:(基于最小化安装的系统)
    yum install gcc gcc-c++ glibc glibc-devel pcre pcre-devel openssl openssl-devel systemd-devel zlib-devel vim lrzsz tree screen lsof tcpdump wget ntpdate net-tools iotop bc zip unzip nfs-utils

编译安装

第一步:configure脚本
    选项:指定安装位置、指定启用的特性
    --help: 获取其支持使用的选项
选项分类:
    安装路径设定:
        --prefix=/PATH:指定默认安装位置,默认为/usr/local/
        --sysconfdir=/PATH:配置文件安装位置
    System types:支持交叉编译
    Optional Features: 可选特性
        --disable-FEATURE
        --enable-FEATURE[=ARG]
    Optional Packages: 可选包
        --with-PACKAGE[=ARG] 依赖包
        --without-PACKAGE 禁用依赖关系
     注意:通常被编译操作依赖的程序包,需要安装此程序包的“开发”组件,其包名一般类似于name-devel-VERSION
第二步:make
第三步:make install

安装后的配置:
    (1) 二进制程序目录导入至PATH环境变量中
        编辑文件/etc/profile.d/NAME.sh
            export PATH=/PATH/TO/BIN:$PATH
    (2) 导入帮助手册
        编辑/etc/man.config|man_db.conf文件
            添加一个MANPATH
例:编译安装httpd
 1.解压httpd-2.4.25.tar.bz2到指定目录
    tar xvf httpd-2.4.25.tar.bz2 -C /data/apps 
 2.安装所需相关依赖
    yum install gcc apr-devel apr-util-devel pcre-devel openssl-devel -y
 3.编译安装
    cd /data/apps/httpd-2.4.26
    ./configure --prefix=/apps/http24 --enable-ssl  --disable-auth-basic
 4.make && make install 
 
 5.设置环境变量,开启服务
    vim /etc/profile.d/env.sh
    PATH=/data/apps/httpd24/bin:$PATH
    ./etc/profile.d/env.sh
    apachctl start 

Ubuntu 软件管理

Debian软件包通常为预编译的二进制格式的扩展名“.deb”,类似rpm文件,因此安装快速,无需编译软件。包文件包括特定功能或软件所必需的文件、元数据和指令
dpkg:package manager for Debian,类似于rpm, dpkg是基于Debian的系统的包管理器。可以安装,删除和构建软件包,但无法自动下载和安装软件包或其依赖项
APT:Advanced Packaging Tool,功能强大的软件管理工具,甚至可升级整个Ubuntu的系统,基于客户/服务器架构
APT工作原理:在服务器上先复制所有DEB包,然后用APT的分析工具genbasedir根据每个DEB 包的包头(Header)信息对所有的DEB包进行分析,并将该分析结果记录在文件夹base内的一个DEB 索引清单文件中,一旦APT 服务器内的DEB有所变动,要使用genbasedir产生新的DEB索引清单。客户端在进行安装或升级时先要查询DEB索引清单,从而获知所有具有依赖关系的软件包,并一同下载到客户端以便安装。当客户端需要安装、升级或删除某个软件包时,客户端计算机取得DEB索引清单压缩文件后,会将其解压置放于 /var/cache/apt/,而客户端使用apt-get install或apt-get upgrade命令的时候,就会将这个文件夹内的数据和客户端计算机内的DEB数据库比对,知道哪些DEB已安装、未安装或是可以升级的

dpkg常见用法: man dpkg

dpkg -i package.deb         安装包
dpkg -r package             删除包,不建议,不自动卸载依赖于它的包
dpkg -P package             删除包(包括配置文件)
dpkg -l                     列出当前已安装的包,类似rpm -qa
dpkg -l package             显示该包的简要说明,类似rpm –qi
dpkg -L package             列出该包中所包含的文件,类似rpm –ql
dpkg -S <pattern>           搜索包含pattern的包,类似rpm –qf
dpkg -s package             列出该包的状态,包括详细信息,类似rpm –qi
dpkg --configure package    配置包,-a 使用,配置所有没有配置的软件包
dpkg -c package.deb         列出 deb 包的内容,类似rpm –qpl
dpkg --unpack package.deb   解开 deb 包的内容

dpkg示例

列出系统上安装的所有软件包
    dpkg -l
列出软件包安装的文件
    dpkg -L bash
查看/bin/bash来自于哪个软件包
    dpkg -S /bin/bash
安装本地的 .deb 文件
    dpkg -i /mnt/cdrom/pool/main/z/zip/zip_3.0-11build1_amd64.deb
卸载软件包
    dpkg -r zip
注意:一般建议不要使用dpkg卸载软件包。因为删除包时,其它依赖它的包不会卸载,并且可能无法再正常运行
Debian 使用APT工具来管理包系统,它与 apt 命令不同。在基于 Debian 的 Linux 发行版中,有各种工具可以与 APT 进行交互,以方便用户安装、删除和管理的软件包。apt-get 是其中一个常用的命令行工具,另外一款较为流行的命令行与 GUI 兼顾的工具是 aptitude ,之前最常用的 Linux 包管理命令都被分散在了 apt-get、apt-cache 和 apt-config 这三条命令中
在 2014 年apt 命令发布第一个稳定版,Ubuntu 16.04 引入新特性之一便是 apt 命令,apt 命令解决了命令过于分散的问题,它包括 apt-get 命令出现以来使用最广泛的功能选项,以及 apt-cache 和 apt-config 命令中很少用到的功能。在使用 apt 命令时,用户不必再由 apt-get 转到 apt-cache 或 apt-config,提供管理软件包所需的必要选项
apt 相当于 apt-get、apt-cache 和 apt-config 中最常用命令选项的集合
apt 具有更精减但足够的命令选项,而且参数选项的组织方式更为有效。此外,启用的几个特性也非常有帮助。例如:可以在使用 apt 命令安装或删除程序时看到进度条,apt 还会在更新存储库数据库时提示用户可升级的软件包个数
apt 与 apt-get 有一些类似的命令选项,但它并不能完全向下兼容 apt-get 命令,也即可用 apt 替换部分 apt-get 系列命令,但不是全部
查看帮助:apt help
apt与apt-get命令对比
apt 命令            被取代的命令 命令的功能
apt install         apt-get install 安装软件包
apt remove          apt-get remove 移除软件包
apt purge           apt-get purge 移除软件包及配置文件
apt update          apt-get update 刷新存储库索引
apt upgrade         apt-get upgrade 升级所有可升级的软件包
apt autoremove      apt-get autoremove 自动删除不需要的包
apt full-upgrade    apt-get dist-upgrade 在升级软件包时自动处理依赖关系
apt search          apt-cache search 搜索应用程序
apt show            apt-cache show 显示安装细节

apt 特有的命令

    apt list           列出包含条件的包(已安装,可升级等)
    apt edit-sources   编辑源列表
APT包索引来自/etc/apt/sources.list文件和/etc/apt/sources.list.d目录中定义的存储库的可用包的数据库。要使用存储库中所做的最新更改来更新本地程序包索引
apt命令操作(如安装和删除软件包)记录在/var/log/dpkg.log日志文件中

apt 示例

安装包:
    apt install tree zip
删除包:
    apt remove tree zip
    说明:apt remove中添加--purge选项会删除包配置文件,谨慎使用
更新包索引:
    apt update
升级包:要升级系统,请首先更新软件包索引,再升级
    apt upgrade