Estou tentando ativar o módulo mod-nss no Apache2. Então, depois de fazer o que é necessário, estou tentando validar que, de fato, o módulo está carregado.
Pedindo apachectl
# apachectl -M | grep nss
nss_module (shared)
Perguntando ao daemon:
/usr/sbin/httpd-prefork -M | grep nss
-> No output
Então, eu recebo duas saídas diferentes:
- O apachectl afirma que o módulo mod_nss está carregado.
- link
Depois disso, decidi listar os módulos para ambos (em vez de apenas grep-ing para um específico), classificar a saída e depois compará-los.
# diff -Nur httpd_sorted_modules apachectl_sorted_modules
--- httpd_sorted_modules 2016-09-01 13:59:16.297139860 +0200
+++ apachectl_sorted_modules 2016-09-01 13:59:26.680985223 +0200
@@ -15,11 +15,15 @@
expires_module (shared)
http_module (static)
include_module (shared)
+ info_module (shared)
log_config_module (shared)
mime_module (shared)
mpm_prefork_module (static)
negotiation_module (shared)
+ nss_module (shared)
+ php5_module (shared)
reqtimeout_module (shared)
+ rewrite_module (shared)
setenvif_module (shared)
so_module (static)
socache_shmcb_module (shared)
Como você pode ver, o apachectl mostra 4 módulos extras em contraste com o httpd. Por que isso está acontecendo? E em qual devo depositar minha confiança?
Eu tentei ver qual é a diferença entre eles, mas falhei. Aqui estão algumas das minhas descobertas:
o apachectl parece ser um binário independente
# ls -l 'which apachectl'
-rwxr-xr-x 1 root root 3548 Aug 23 13:11 /usr/sbin/apachectl
que vem do apache pkg:
# rpm -qf 'which apachectl'
apache2-2.4.16-12.1.x86_64
que é realmente usado para facilitar o controle sobre o httpd. Aparentemente, há diferença em usá-lo com o SystemD ou o SySVinit. Aqui está uma citação da página man apachectl:
When acting in pass-through mode, apachectl can take all the arguments
available for the httpd binary.
apachectl [ httpd-argument ]
When acting in SysV init mode, apachectl takes simple, one-word
commands, defined below.
apachectl command
Então, se eu solicitar a opção de ajuda -h:
# apachectl -h
Usage: /usr/sbin/httpd-prefork [-D name] [-d directory] [-f file]
[-C "directive"] [-c "directive"]
[-k start|restart|graceful|graceful-stop|stop]
[-v] [-V] [-h] [-l] [-L] [-t] [-T] [-S] [-X]
Options:
-D name : define a name for use in <IfDefine name> directives
-d directory : specify an alternate initial ServerRoot
-f file : specify an alternate ServerConfigFile
-C "directive" : process directive before reading config files
-c "directive" : process directive after reading config files
-e level : show startup errors of level (see LogLevel)
-E file : log startup errors to file
-v : show version number
-V : show compile settings
-h : list available command line options (this page)
-l : list compiled in modules
-L : list available configuration directives
-t -D DUMP_VHOSTS : show parsed vhost settings
-t -D DUMP_RUN_CFG : show parsed run settings
-S : a synonym for -t -D DUMP_VHOSTS -D DUMP_RUN_CFG
-t -D DUMP_MODULES : show all loaded modules
-M : a synonym for -t -D DUMP_MODULES
-t : run syntax check for config files
-T : start without DocumentRoot(s) check
-X : debug mode (only one worker, do not detach)
Parece que está usando o /usr/sbin/httpd-prefork
ou pelo menos o que está escrito.
Mas vamos tentar ver o que o 'httpd' está usando em segundo plano:
# which httpd
/usr/sbin/httpd
que parece ser um link simbólico:
# ls -l 'which httpd'
lrwxrwxrwx 1 root root 23 Aug 25 13:28 /usr/sbin/httpd -> /usr/sbin/httpd-prefork
então usa o /usr/sbin/httpd-prefork
que é o mesmo que o apachectl parece usar. Por exemplo, se eu pedir ajuda -h, recebo:
# /usr/sbin/httpd-prefork -h
Usage: /usr/sbin/httpd-prefork [-D name] [-d directory] [-f file]
[-C "directive"] [-c "directive"]
[-k start|restart|graceful|graceful-stop|stop]
[-v] [-V] [-h] [-l] [-L] [-t] [-T] [-S] [-X]
Options:
-D name : define a name for use in <IfDefine name> directives
-d directory : specify an alternate initial ServerRoot
-f file : specify an alternate ServerConfigFile
-C "directive" : process directive before reading config files
-c "directive" : process directive after reading config files
-e level : show startup errors of level (see LogLevel)
-E file : log startup errors to file
-v : show version number
-V : show compile settings
-h : list available command line options (this page)
-l : list compiled in modules
-L : list available configuration directives
-t -D DUMP_VHOSTS : show parsed vhost settings
-t -D DUMP_RUN_CFG : show parsed run settings
-S : a synonym for -t -D DUMP_VHOSTS -D DUMP_RUN_CFG
-t -D DUMP_MODULES : show all loaded modules
-M : a synonym for -t -D DUMP_MODULES
-t : run syntax check for config files
-T : start without DocumentRoot(s) check
-X : debug mode (only one worker, do not detach)
que é idêntico ao que recebo com apachectl -h
.
No entanto, este vem de outro pacote:
# rpm -qf /usr/sbin/httpd-prefork
apache2-prefork-2.4.16-12.1.x86_64
Além disso, não consigo pensar em uma razão pela qual recebo uma saída diferente quando procuro os módulos carregados: /
Para aqueles que gostariam de saber, estou usando o OpenSUSE Leap 42.1 como minha distribuição Linux e executo o Apache com o Prefork MPM.