У меня есть существующий файл httpd.conf, который я должен заставить работать с экземпляром Vagrant под управлением Ubuntu, который я использую для подготовки с помощью Puppet.
Проблема, с которой я столкнулся, связана с именами модулей. httpd.conf определяет набор таких модулей:
LoadModule access_compat_module modules/mod_access_compat.so
LoadModule actions_module modules/mod_actions.so
LoadModule alias_module modules/mod_alias.so
LoadModule allowmethods_module modules/mod_allowmethods.so
LoadModule asis_module modules/mod_asis.so
LoadModule auth_basic_module modules/mod_auth_basic.so
Чтобы настроить все эти модули, мне нужно сообщить модулю Puppet Apache, который я использую ( Пример42) какие модули я хочу установить и включить. Проблема в том, что имена модулей не совпадение 1: 1 со строками httpd.conf. Другими словами, имена модулей не всегда можно вывести из файла.
Например, вот я, пытаюсь включить первую строку в файле (mod_access_compat.so
):
vagrant@lucid64:~$ sudo a2enmod access_compat
ERROR: Module access_compat does not exist!
vagrant@lucid64:~$ sudo a2enmod access_compat_module
ERROR: Module access_compat_module does not exist!
vagrant@lucid64:~$ sudo a2enmod accesscompat
ERROR: Module accesscompat does not exist!
tl; dr: Как узнать правильное имя модуля для a2enmod
не пытаясь угадать?
a2enmod
[ввод] -> посмотреть все доступные модулиapache2ctl -M
-> увидеть загруженные модули (можно apachectl
на RedHat)Если модуль, который вы ищете, является переменной, вы можете найти его имя внутри /etc/apache2/mods-available/
Использовать find
команда для поиска файла с той частью строки, которую вы знаете о моде,
например find /etc/apache2/mods-available/ -name *\lite\*
вывод /etc/apache2/mods-available/charset_lite.load
поместите нужную строку между *\...\*
как и до или после этого слова
удалите mod_ и .so и загрузите результат:
$ MODUL=mod_auth_basic.so
$ sudo a2enmod $(<<< $MODUL sed 's#mod_\(.*\)\.so#\1#')
Module auth_basic already enabled