Настройка mathopd в NetBSD
Установка и настройка mathopd
Для установки mathopd понадобится pkgsrc-wip. Его развёртывание описано на странице Система pkgsrc.
Устанавилваем mathopd из pkgsrc:
# cd /usr/pkgsrc/wip/mathopd
# make install
Копируем скрипт инициализации:
# cp /usr/pkg/share/examples/rc.d/mathopd /etc/rc.d/
Прописываем настройки в файл конфигурации /usr/pkg/etc/mathopd.conf:
ErrorLog /var/log/mathopd/mathopd/error_log
Log /var/log/mathopd/mathopd/access_log.%Y%m%d
LogGMT Off
StayRoot On
User mathopd
Umask 022
#RootDirectory
#CoreDirectory
PIDFile /var/run/mathopd.pid
Tuning {
AcceptMulti On
Clobber On
NumConnections 64
BufSize 12288
InputBufSize 2048
ScriptBufSize 4096
NumHeaders 100
ScriptTimeout 10
Timeout 10
Wait 10
}
LogFormat {
#Ctime
Method
Uri
QueryString
Version
Status
BytesRead
Referer
UserAgent
#RemoteUser
#RemoteAddress
#RemotePort
#ServerName
#ContentLength
#BytesWritten
#LocalAddress
#LocalPort
#TimeTaken
#MicroTime
}
Control {
Admin vladimir@stupin.su
#Error401File
#Error403File
#Error404File
AllowDotfiles Off
SanitizePath On
UserDirectory Off
Types {
image/gif { .gif }
image/png {
.png
.ico
}
image/jpeg { .jpg }
text/css { .css }
text/html { .html }
"text/plain; charset=UTF-8" {
.sh
.txt
.diff
.patch
.c
.py
.pl
.conf
}
application/octet-stream { * }
}
ExtraHeaders {
"Cache-Control: max-age=3600"
}
IndexNames {
index.html
}
}
Server {
Address 0.0.0.0
Port 80
Backlog 128
Virtual {
NoHost
Host stupin.su
Control {
Alias /
Location /srv/stupin.su/
}
}
Virtual {
Host manpages.stupin.su
Control {
Alias /
Location /srv/manpages.stupin.su/
}
}
Virtual {
Host netbsd.stupin.su
Control {
Alias /
Location /srv/netbsd.stupin.su/
}
}
Virtual {
Host thedjbway.stupin.su
Control {
Alias /
Location /srv/thedjbway.stupin.su/
}
}
}
В приведённом файле конфигурации настроены 4 виртуальных узла. Если поступил запрос без заголовка Host:
, то по умолчанию будет использоваться узел stupin.su.
Запускаем mathopd:
# /etc/rc.d/mathopd start
Включаем запуск mathopd в файле /etc/rc.conf:
mathopd=YES
Автоматическая генерация индексных страниц
mathopd не умеет самостоятельно генерировать индексные страницы для каталогов, в которых их нет.
Ниже приведён скрипт на языке AWK для генерации содержимого каталога, в котором нет страницы index.html. Я поместил его в файл /usr/pkg/etc/index.cgi:
#!/usr/bin/awk -f
BEGIN {
printf "Content-Type: text/html\n"
printf "\n";
printf "<html>\n";
printf "<head><title>%s</title></head>\n", ENVIRON["REQUEST_URI"];
printf "<body>\n";
printf "<h1>Index of %s</h1><hr><pre><a href=\"..\">../</a>\n", ENVIRON["REQUEST_URI"];
lscmd="/bin/ls -lT";
nr = 0;
while (lscmd | getline) {
nr++;
if (nr == 1) {
continue;
}
printf "<a href=\"%s\">%s</a>", $10, $10;
if (length($10) < 50) {
for(i = 0; i < 50 - length($10); i++) {
printf " ";
}
}
split($8, t, /:/);
printf " %02d-%s-%04d %02d:%02d", $7, $6, $9, t[1], t[2];
if (substr($1, 1, 1) == "d") {
s = "-";
} else {
s = $5;
}
printf "%20s\n", s;
}
printf "</pre></hr></body>\n";
printf "</html>";
}
Скрипт генерирует индексные страницы по тому же шаблону, по которому их генерирует nginx.
Этот скрипт будет запускаться как CGI-скрипт либо под одним из пользователей:
- если включена опция RunScriptsAsOwner, то скрипт будет запускаться от имени пользователя, который владеет файлом скрипта,
- если опция RunScriptsAsOwner выключена, то будет запускаться от имени пользователя, который указан в опции ScriptUser.
Есть одна маленькая тонкость: если используется второй вариант, то пользователь, указанный в опции ScriptUser должен отличаться от пользователя, указанного в опции User. В противном случае mathopd будет сообщать об ошибке:
cannot run scripts without changing identity
У меня файлами веб-сервера владеет пользователь root, а в качестве группы владельца используется группа mathopd. Для запуска скрипта генерации индексных страниц я создал отдельного пользователя mathopd-cgi, включив его в группу mathopd, следующим образом:
# useradd -c 'mathopd cgi user' -s /sbin/nologin -g mathopd -d /noexistent mathopd-cgi
Осталось добавить в общую секцию Control файла конфигурации следующие настройки, чтобы mathopd вызывал скрипт для генерации индексной страницы:
RunScriptsAsOwner Off
ScriptUser mathopd-cgi
AutoIndexCommand /usr/pkg/etc/index.cgi
Specials {
CGI { .cgi }
}
И перезапустить mathopd:
# /etc/rc.d/mathopd restart