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.
A estratégia consiste em duas fases principais:
- 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.). - 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.
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.
#!/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)"- Salve o código acima em um arquivo chamado
download_build_env.sh. - Dê permissão de execução:
chmod +x download_build_env.sh. - Execute:
./download_build_env.sh. - Ao final, compacte o diretório
build_environment_rpms_completopara transferi-lo para a máquina de destino.tar -cvf build_env.tar build_environment_rpms_completo
Esta parte é executada na máquina de destino final.
a. Transfira o arquivo build_env.tar para a máquina de destino e descompacte-o:
tar -xvf build_env.tarb. 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 /tmpa. 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 *.rpma. 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.4c. 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 installO 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- 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
- Ligar:
Para gerenciar o Nginx da forma "nativa" do AIX, você pode registrá-lo como um serviço no System Resource Controller (SRC).
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# 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| 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 |