Skip to content

HellCode666/ibm-aix-nginx-compile

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 

Repository files navigation

Compilando o Nginx com Módulo Stream no AIX

Este repositório contém os scripts e o passo a passo para compilar uma versão customizada do Nginx com o módulo stream habilitado em sistemas IBM AIX. O processo foi desenhado para funcionar mesmo em ambientes restritos que não possuem o gerenciador de pacotes dnf ou acesso direto à internet, utilizando um pacote de instalação offline.

Visão Geral do Processo

A estratégia consiste em duas fases principais:

  1. Preparação (Máquina com Internet): Usar uma máquina AIX com acesso à internet para baixar todos os RPMs necessários para criar um ambiente de compilação (gcc, make, etc.).
  2. Instalação e Compilação (Máquina de Destino): Transferir os RPMs para a máquina de destino (ex: ambiente de trabalho sem dnf), instalar o ambiente de compilação, e então compilar o Nginx a partir do código-fonte com as opções desejadas.

Parte 1: Criando o Pacote do Ambiente de Compilação

O script abaixo deve ser executado em uma máquina AIX com internet. Ele irá baixar todos os 19 RPMs necessários para o gcc, make e suas dependências.

Script: download_build_env.sh

#!/bin/sh

# --- O Baixador Universal de RPMs para o Ambiente de Compilação do Nginx no AIX ---
# Este script contém os links diretos e não depende do DNF nem do Wget.
# Ele usa Perl, que tem alta probabilidade de estar presente em sistemas AIX base.

echo "Iniciando o processo de download do ambiente de compilação completo..."

# Diretório de destino para os RPMs
DEST_DIR="build_environment_rpms_completo"
echo "Criando o diretório de destino: $DEST_DIR"
mkdir -p "$DEST_DIR"
cd "$DEST_DIR"

# Lista completa de URLs dos pacotes necessários (19 pacotes)
URL_LIST="
[https://public.dhe.ibm.com/aix/freeSoftware/aixtoolbox/RPMS/ppc/gmp/gmp-6.3.0-1.aix7.1.ppc.rpm](https://public.dhe.ibm.com/aix/freeSoftware/aixtoolbox/RPMS/ppc/gmp/gmp-6.3.0-1.aix7.1.ppc.rpm)
[https://public.dhe.ibm.com/aix/freeSoftware/aixtoolbox/RPMS/ppc/libmpc/libmpc-1.3.1-1.aix7.1.ppc.rpm](https://public.dhe.ibm.com/aix/freeSoftware/aixtoolbox/RPMS/ppc/libmpc/libmpc-1.3.1-1.aix7.1.ppc.rpm)
[https://public.dhe.ibm.com/aix/freeSoftware/aixtoolbox/RPMS/ppc/make/make-4.4.1-1.aix7.1.ppc.rpm](https://public.dhe.ibm.com/aix/freeSoftware/aixtoolbox/RPMS/ppc/make/make-4.4.1-1.aix7.1.ppc.rpm)
[https://public.dhe.ibm.com/aix/freeSoftware/aixtoolbox/RPMS/ppc/mpfr/mpfr-4.2.1-1.aix7.1.ppc.rpm](https://public.dhe.ibm.com/aix/freeSoftware/aixtoolbox/RPMS/ppc/mpfr/mpfr-4.2.1-1.aix7.1.ppc.rpm)
[https://public.dhe.ibm.com/aix/freeSoftware/aixtoolbox/RPMS/ppc/pcre/pcre-8.44-2.aix6.1.ppc.rpm](https://public.dhe.ibm.com/aix/freeSoftware/aixtoolbox/RPMS/ppc/pcre/pcre-8.44-2.aix6.1.ppc.rpm)
[https://public.dhe.ibm.com/aix/freeSoftware/aixtoolbox/RPMS/ppc/pcre/pcre-devel-8.44-2.aix6.1.ppc.rpm](https://public.dhe.ibm.com/aix/freeSoftware/aixtoolbox/RPMS/ppc/pcre/pcre-devel-8.44-2.aix6.1.ppc.rpm)
[https://public.dhe.ibm.com/aix/freeSoftware/aixtoolbox/RPMS/ppc/sed/sed-4.9-1.aix7.1.ppc.rpm](https://public.dhe.ibm.com/aix/freeSoftware/aixtoolbox/RPMS/ppc/sed/sed-4.9-1.aix7.1.ppc.rpm)
[https://public.dhe.ibm.com/aix/freeSoftware/aixtoolbox/RPMS/ppc/zlib/zlib-devel-1.2.13-1.aix7.1.ppc.rpm](https://public.dhe.ibm.com/aix/freeSoftware/aixtoolbox/RPMS/ppc/zlib/zlib-devel-1.2.13-1.aix7.1.ppc.rpm)
[https://public.dhe.ibm.com/aix/freeSoftware/aixtoolbox/RPMS/ppc-7.2/gcc/gcc-13-1.aix7.2.ppc.rpm](https://public.dhe.ibm.com/aix/freeSoftware/aixtoolbox/RPMS/ppc-7.2/gcc/gcc-13-1.aix7.2.ppc.rpm)
[https://public.dhe.ibm.com/aix/freeSoftware/aixtoolbox/RPMS/ppc-7.2/gcc/gcc-cpp-13-1.aix7.2.ppc.rpm](https://public.dhe.ibm.com/aix/freeSoftware/aixtoolbox/RPMS/ppc-7.2/gcc/gcc-cpp-13-1.aix7.2.ppc.rpm)
[https://public.dhe.ibm.com/aix/freeSoftware/aixtoolbox/RPMS/ppc-7.2/gcc13/gcc13-13.3.0-1.aix7.2.ppc.rpm](https://public.dhe.ibm.com/aix/freeSoftware/aixtoolbox/RPMS/ppc-7.2/gcc13/gcc13-13.3.0-1.aix7.2.ppc.rpm)
[https://public.dhe.ibm.com/aix/freeSoftware/aixtoolbox/RPMS/ppc-7.2/gcc13/gcc13-cpp-13.3.0-1.aix7.2.ppc.rpm](https://public.dhe.ibm.com/aix/freeSoftware/aixtoolbox/RPMS/ppc-7.2/gcc13/gcc13-cpp-13.3.0-1.aix7.2.ppc.rpm)
[https://public.dhe.ibm.com/aix/freeSoftware/aixtoolbox/RPMS/ppc-7.2/gcc13/libgcc13-13.3.0-1.aix7.2.ppc.rpm](https://public.dhe.ibm.com/aix/freeSoftware/aixtoolbox/RPMS/ppc-7.2/gcc13/libgcc13-13.3.0-1.aix7.2.ppc.rpm)
[https://public.dhe.ibm.com/aix/freeSoftware/aixtoolbox/RPMS/ppc-7.2/gcc13/libgomp13-13.3.0-1.aix7.2.ppc.rpm](https://public.dhe.ibm.com/aix/freeSoftware/aixtoolbox/RPMS/ppc-7.2/gcc13/libgomp13-13.3.0-1.aix7.2.ppc.rpm)
[https://public.dhe.ibm.com/aix/freeSoftware/aixtoolbox/RPMS/ppc-7.2/gcc13/libstdcplusplus13-13.3.0-1.aix7.2.ppc.rpm](https://public.dhe.ibm.com/aix/freeSoftware/aixtoolbox/RPMS/ppc-7.2/gcc13/libstdcplusplus13-13.3.0-1.aix7.2.ppc.rpm)
[https://public.dhe.ibm.com/aix/freeSoftware/aixtoolbox/RPMS/ppc/zstd/libzstd-1.5.2-3.aix7.1.ppc.rpm](https://public.dhe.ibm.com/aix/freeSoftware/aixtoolbox/RPMS/ppc/zstd/libzstd-1.5.2-3.aix7.1.ppc.rpm)
[https://public.dhe.ibm.com/aix/freeSoftware/aixtoolbox/RPMS/ppc-7.2/gcc/libgcc-13-1.aix7.2.ppc.rpm](https://public.dhe.ibm.com/aix/freeSoftware/aixtoolbox/RPMS/ppc-7.2/gcc/libgcc-13-1.aix7.2.ppc.rpm)
[https://public.dhe.ibm.com/aix/freeSoftware/aixtoolbox/RPMS/ppc-7.2/gcc/libgomp-13-1.aix7.2.ppc.rpm](https://public.dhe.ibm.com/aix/freeSoftware/aixtoolbox/RPMS/ppc-7.2/gcc/libgomp-13-1.aix7.2.ppc.rpm)
[https://public.dhe.ibm.com/aix/freeSoftware/aixtoolbox/RPMS/ppc-7.2/gcc/libstdcplusplus-13-1.aix7.2.ppc.rpm](https://public.dhe.ibm.com/aix/freeSoftware/aixtoolbox/RPMS/ppc-7.2/gcc/libstdcplusplus-13-1.aix7.2.ppc.rpm)
"

echo "Baixando todos os 19 pacotes necessários usando Perl..."

for url in <span class="math-inline">URL\_LIST; do
file\_name\=</span>(basename "$url")
  echo "-----------------------------------------------------"
  echo "Baixando: $file_name"
  perl -e 'use LWP::Simple; getstore($ARGV[0], $ARGV[1]);' "$url" "$file_name"
  if [ $? -eq 0 ]; then
    echo "SUCESSO."
  else
    echo "ERRO ao baixar o pacote de $url"
  fi
done

echo "-----------------------------------------------------"
echo "Download de todos os pacotes concluído!"
echo "Os arquivos estão em: $(pwd)"

Como Usar o Script

  1. Salve o código acima em um arquivo chamado download_build_env.sh.
  2. Dê permissão de execução: chmod +x download_build_env.sh.
  3. Execute: ./download_build_env.sh.
  4. Ao final, compacte o diretório build_environment_rpms_completo para transferi-lo para a máquina de destino.
    tar -cvf build_env.tar build_environment_rpms_completo

Parte 2: Instalando o Ambiente e Compilando o Nginx

Esta parte é executada na máquina de destino final.

1. Preparação

a. Transfira o arquivo build_env.tar para a máquina de destino e descompacte-o:

tar -xvf build_env.tar

b. Ajuste de Espaço em Disco (Preventivo): Garanta que as partições do AIX tenham espaço suficiente.

chfs -a size=+2G /
chfs -a size=+2G /opt
chfs -a size=+2G /var
chfs -a size=+2G /tmp

2. Instalação do Ambiente de Compilação

a. Entre no diretório com os RPMs e instale/atualize todos de uma vez. A flag -U (Upgrade) lida com pacotes que já possam existir em versões mais antigas.

cd build_environment_rpms_completo
rpm -Uvh *.rpm

3. Compilação do Nginx

a. Baixe o código-fonte do Nginx.

# Use Perl para baixar o tar.gz
perl -e 'use LWP::Simple; getstore("[http://nginx.org/download/nginx-1.27.4.tar.gz](http://nginx.org/download/nginx-1.27.4.tar.gz)", "nginx-1.27.4.tar.gz");'

b. Extraia o código-fonte.

gunzip -c nginx-1.27.4.tar.gz | tar -xvf -
cd nginx-1.27.4

c. Configure o ambiente de shell e execute o script de configuração do Nginx.

# Configura o shell para encontrar o compilador GCC versão 13
export PATH=$PATH:/opt/freeware/bin
export CC=/opt/freeware/bin/gcc-13

# Executa a configuração do Nginx com todas as opções necessárias, incluindo o módulo Stream
./configure --prefix=/opt/freeware/share/nginx --sbin-path=/opt/freeware/sbin/nginx --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --pid-path=/var/run/nginx.pid --user=nginx --group=nginx --with-http_ssl_module --with-http_v2_module --with-stream --with-stream_ssl_module --with-cc-opt='-I/usr/include -I/opt/freeware/include -Wno-error=sign-compare' --with-ld-opt='-L/usr/lib -L/opt/freeware/lib'

d. Compile e instale.

make
make install

Parte 3: Pós-Instalação e Gerenciamento

1. Criação do Usuário de Serviço

O Nginx precisa de um usuário não-privilegiado para rodar seus processos de trabalho.

# Cria o grupo 'nginx'
mkgroup nginx

# Cria o usuário 'nginx' sem permissão de login
mkuser login=false su=false pgrp='nginx' home='/var/empty' nginx

2. Comandos Básicos de Verificação e Gerenciamento

  • Verificar a compilação (confirmar o módulo stream):
    /opt/freeware/sbin/nginx -V | grep stream
  • Testar a sintaxe da configuração:
    /opt/freeware/sbin/nginx -t
  • Ver se o processo está rodando:
    ps -ef | grep nginx
  • Verificar logs (últimas 20 linhas):
    tail -n 20 /var/log/nginx/error.log
    tail -n 20 /var/log/nginx/access.log
  • Comandos de controle direto:
    • Ligar: /opt/freeware/sbin/nginx
    • Parar (gracioso): /opt/freeware/sbin/nginx -s quit
    • Parar (imediato): /opt/freeware/sbin/nginx -s stop

(Opcional) Parte 4: Integração com o SRC do AIX

Para gerenciar o Nginx da forma "nativa" do AIX, você pode registrá-lo como um serviço no System Resource Controller (SRC).

1. Crie o Script de Controle

Salve o código abaixo como /etc/rc.d/init.d/nginx:

#!/bin/sh
# Script de controle do Nginx para o SRC do AIX

NGINX_SBIN="/opt/freeware/sbin/nginx"

case "$1" in
    start)
        echo "Iniciando Nginx..."
        $NGINX_SBIN -t
        if [ $? -eq 0 ]; then
            $NGINX_SBIN
            echo "Nginx iniciado."
        else
            echo "ERRO: Configuração do Nginx inválida. O serviço não foi iniciado."
            exit 1
        fi
        ;;
    stop)
        echo "Parando Nginx..."
        $NGINX_SBIN -s stop
        echo "Comando de parada enviado."
        ;;
    reload)
        echo "Recarregando configuração do Nginx..."
        $NGINX_SBIN -t
        if [ $? -eq 0 ]; then
            $NGINX_SBIN -s reload
            echo "Configuração recarregada."
        else
            echo "ERRO: Configuração do Nginx inválida. O reload não foi executado."
            exit 1
        fi
        ;;
    *)
        echo "Uso: $0 {start|stop|reload}"
        exit 1
        ;;
esac

exit 0

2. Registre o Serviço

# Dê permissão de execução
chmod +x /etc/rc.d/init.d/nginx

# Registre o subsistema no SRC
mkssys -s nginx -p /etc/rc.d/init.d/nginx -u root

3. Tabela de Comandos: systemctl vs. SRC

Ação Comando Linux (systemd) Comando AIX (SRC)
Ver Status systemctl status nginx lssrc -s nginx
Iniciar systemctl start nginx startsrc -s nginx
Parar systemctl stop nginx stopsrc -s nginx
Recarregar systemctl reload nginx refresh -s nginx
Listar Todos systemctl list-units lssrc -a

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published