• CentOS 8 编译安装程序包示例(httpd)学习笔记


    CentOS 8 编译安装程序包(httpd)


    1. 源码编译介绍

    程序包编译安装步骤:

    源代码 --> 预处理 --> 编译 --> 汇编 --> 链接 --> 执行

    多文件:文件中的代码之间,很可能存在跨文件依赖关系。

    2. 开源代码的获取

    项目官方自建站点:

    apache.org (ASF: Apache Software Foundation)
    mariadb.org
    ...
    
    • 1
    • 2
    • 3

    代码托管:

    Github.com
    gitee.com
    SourceForge.net
    code.google.com
    
    • 1
    • 2
    • 3
    • 4

    3. 编译源代码工具

    • C、C++ 源码编译:使用 make 项目管理器

      configure 脚本 --> Makefile.in --> Makefile

      相关开发工具:

      autoconf:生成 configure 脚本
      automake: 生成 Makefile.in

    • java 源码编译:使用 maven

    4. C 语言源码编译安装过程

    利用编译工具,通常只需要三个步骤:

    • ./configure [options] # 功能:自定义参数和环境检查

      • 通过选项传递参数来指定安装路径(默认在 /usr/local/)、启用特性等,根据用户的指定及 Makefile.in (这是一个模板)文件生产 Makefile 文件。
      • 检查依赖到的外部环境,例如依赖的软件包等。
    • make # 进行编译,生成二进制。也会发现有些依赖包不存在而报错,需要第一步重做

      根据 Makefile 文件,构建应用程序

    • make Install # 仅仅是复制文件到指定的位置而已

      复制文件到相应的路径

    注意:安装前可以查看源码包中的 README、install 帮助文件。

    可以在 CentOS 8 中查看安装的日志:

    /var/log/dnf.rpm.log        # 记录安装过的日志
    
    /var/log/dnf.log            # 记录安装时出现的问题
    
    ]# dnf history               # 可以查看历史
    
    • 1
    • 2
    • 3
    • 4
    • 5

    4.1 编译安装准备

    首先安装相应的包:

    • 开发工具:make、gcc(C/C++ 编译器的 GNU C Complier)
    • 开发环境:开发库(glibc,标准库)、头文件、可以安装开发包组(Development Tools)
    • 软件所需的相关依赖包

    生产实践:基于最小化安装的系统建议安装下面相关包:

    dnf install gcc make gcc-c++ glibc-devel pcre pcre-devel openssl openssl-devel \
        systemd-devel zlib-devel autoconf vim lrzrz tree tmux lsof tcpdump wget \
        net-tools iotop bc bzip2 zip unzip nfs-utils man-pages bash-completion
    
    • 1
    • 2
    • 3

    4.2 编译安装

    第一步:运行 configure 脚步,生成 Makefile 文件。

    一般可以查看源软件包中的 README 和 INSTALL 内容,而获取支持使用的选项:

    ]# ./configure --help
    
    • 1

    选项分类:

    • 安装路径设定

      –prefix=/PATH:指定默认安装路径,默认为 /usr/local/
      –sysconfdir=/PATH:配置文件安装位置
      system types:支持交叉编译

    • 软件特性和相关指定

      optional features:可选特性
      –disable-FEATURE
      –enable-FEATURE[=ARG]
      optional Packages:可选包
      –with-PACKAGE[=ARG]
      –without-PACKAGE[=ARG]

    注意:通常被编译操作依赖的程序包,需要安装此包的开发组件,其包名一般类似于 name-devel-version。

    第二步:make

    第三步:make install

    示例:手动编译安装 tree 最新版。

    • 如果已经安装了软件包,则可以使用 rpm 查询的办法得到官网地址:

      ]# rpm -qi tree
      Name        : tree
      Version     : 1.7.0
      ...
      Vendor      : CentOS
      URL         : http://mama.indstate.edu/users/ice/tree/
      Summary     : File system tree viewer
      ...
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
    • 到网上下载最新的 tree 版本的源码,并编译安装:

      ]# cd /usr/local/src
      ]# wget http://mama.indstate.edu/users/ice/tree/src/tree-2.0.4.tgz
      ]# cd tree-2.0.4
      
      # 如果需要修改相关的内容
      ]# vim INSTALL
      ]# make
      ]# make install
      
      ]# tree --Version
      tree v2.0.4 (c) 1996 - 2022 by Steve Baker, Thomas Moore, Francesc Rocher, Florian Sesser, Kyosuke Tokoro
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
      • 11

    可以查看 make 帮助:

    ]# man make
    
    • 1

    其中有一个选项 -j [N], --jobs[=N] 可以指定同时执行 N 个作业,N 的值建议使用 CPU 的个数。

    4.3 安装后的配置

    1. 二进制程序目录导入至环境变量 PATH 中

      编辑文件 /etc/profile.d/NAME.sh

      export PATH=/PATH/TO/BIN:$PATH

      当然也可以使用符号链接,把命令连接到 PATH 环境变量中的某个目录中。

      ]# ln -sv /path/to/BIN /usr/local/bin/
      
      • 1
    2. 相关用户及文件

      有些开源软件编译后,还需要创建相应的用户和文件。

    3. 导入帮助手册

      编辑文件 /etc/man.config/man_db.conf 文件,添加一个 MANPATH。
      加入的格式为:MANDATORY_MANPATH /path/to/man

    如果在一台机器上进行了编译安装,则可以把安装目录全部拷贝到其他机器上即可。这里有个条件,那就是机器之间应该环境是一致的,否则,可能不能运行。

    4.4 示例:编译安装最新版 httpd-2.4.54:

    • 先安装一些工具

      ]# dnf -y install gcc make apr-devel apr-util-devel pcre-devel openssl-devel redhat-rpm-config
      
      • 1
    • 下载源码 Apache HTTP Server:https://dlcdn.apache.org/httpd/httpd-2.4.54.tar.bz2

      ]# wget https://dlcdn.apache.org/httpd/httpd-2.4.54.tar.bz2
      
      • 1
    • 简单编译安装

      在 make 编译时,出现错误,缺乏 ‘redhat-hardened-ld’,以下命令可以查出所需的包:

      ]# dnf provides *redhat-hardened-ld*
      Last metadata expiration check: 1 day, 1:00:23 ago on Wed 23 Nov 2022 07:47:29 PM CST.
      redhat-rpm-config-125-1.el8.noarch : Red Hat specific rpm configuration files
      Repo        : @System
      Matched from:
      Filename    : /usr/lib/rpm/redhat/redhat-hardened-ld
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      ]# cd httpd-2.4.54
      ]# ./configure --prefix=/apps/httpd24 --enable-ssl
      ]# make -j 2
      ]# make install
      
      ]# cd /apps/httpd24/bin/apachectrl start
      ]# ss -tnl
      State      Recv-Q    Send-Q    Local Address:Port  Peer Address:Port   Process
      LISTEN     0         128             0.0.0.0:22         0.0.0.0:*
      LISTEN     0         128                   *:80               *:*
      LISTEN     0         128                [::]:22            [::]:*
      
      # 注意,防火墙和 SELinux要关闭或设置好
      
      ]# curl localhost
      <html><body><h1>It works!</h1></body></html>
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
      • 11
      • 12
      • 13
      • 14
      • 15
      • 16
    • 配置相关文件

      ]# echo 'PATH=/apps/httpd24/bin:$PATH' > /etc/profile.d/httpd24.sh
      ]# . /etc/profile.d/httpd24.sh
      
      • 1
      • 2
    • 指定使用 apache 用户运行

      ]# useradd -r -s /sbin/nologin -d /var/www -c Apache -u 48 apache
      # 修改其中成 User apache , Group apache
      ]# vim /apps/httpd24/etc/httpd.conf
      
      ]# echo 'PATH=/apps/httpd24/bin:$PATH' > /etc/profile.d/httpd.sh
      
      • 1
      • 2
      • 3
      • 4
      • 5
    • 启动服务

      ]# apachectrl restart
      ]# ps aux              # 查看进程
      
      • 1
      • 2
  • 相关阅读:
    C++设计模式_07_Bridge 桥模式
    Cesium 加载模型不显示
    js直接操作数据库会怎么样
    阿里云的ACP认证与ACE认证含金量高吗?
    树控件的使用
    #循循渐进学51单片机#点亮你的LED#not.2
    windows环境下tensorflow安装
    好看的html网站维护源码
    Java类和对象(一)
    【Ubuntu】解决ubuntu无法上网问题
  • 原文地址:https://blog.csdn.net/qq_39785418/article/details/128003211