Данная инструкция позволяет запустить интерпретатор Perl и расширить стек LEMP на ОС Gentoo GNU/Linux.
Настройка LEMP-сервера для Gentoo описана здесь: https://dondub.com/2021/07/zapusk-lemp-servera-v-gentoo/
Устанавливаем необходимые пакеты
# emerge --ask nginx perl fcgiwrap
Затем открываем основной файл конфигурации nginx
# nano /etc/nginx/nginx.conf
и в секции server меняем значения listen и server_name, например так:
server { ... listen 192.168.1.45; server_name gvm45.homenet.local; ... }
После этого запускаем службу nginx и включаем её в автозагрузку
# rc-service nginx start # rc-update add nginx default
Далее создадим два каталога в директории /var/www/localhost/: htdocs для хранения html и/или прочих файлов и cgi-bin для Perl-скриптов
# mkdir /var/www/localhost/{htdocs,cgi-bin}/
и для /var/www/localhost/cgi-bin/ создадим необходимые права
# chmod 755 /var/www/localhost/cgi-bin/
Затем создадим файл конфигурации /etc/nginx/fcgiwrap.conf
# touch /etc/nginx/fcgiwrap.conf
откроем его
# nano /etc/nginx/fcgiwrap.conf
и внесём в него такие строки:
location /cgi-bin/ { gzip off; root /var/www/localhost; fastcgi_pass unix:/var/run/fcgiwrap-unix.sock; include /etc/nginx/fastcgi_params; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; }
Также в основном файле конфигурации nginx в самом конце секции server перед закрывающей скобкой добавим строчку для включения файла конфигурации fcgiwrap.conf:
server { ... include /etc/nginx/fcgiwrap.conf; }
Теперь создадим 2 файла для работы служб fcgiwrap и fcgiwrap-unix-socket и зададим им права на запуск
# touch /etc/init.d/{fcgiwrap,fcgiwrap-unix-socket} # chmod +x /etc/init.d/{fcgiwrap,fcgiwrap-unix-socket}
Откроем первый — /etc/init.d/fcgiwrap
# nano /etc/init.d/fcgiwrap
и впишем скрипт:
#!/sbin/runscript ip="127.0.0.1" port="9001" start() { ebegin "Starting fcgiwrap process..." /usr/sbin/fcgiwrap -s tcp:$ip:$port & tcp_sock=`netstat -tulpn | grep fcgiwrap` echo "Socket details: $tcp_sock" eend $? "Errors were encountered while starting fcgiwrap process" } stop() { ebegin "Stopping fcgiwrap process..." pid=`ps a | grep fcgiwrap | grep tcp | cut -d" " -f1` kill -s 1 $pid tcp_sock=`netstat -tulpn | grep fcgiwrap` if test $tcp_sock = 2> /dev/null ; then echo "Fcgiwrap process successfully stoped" tcp_sock=`netstat -atulpn | grep $port` if test $tcp_sock = 2> /dev/null ; then echo "No open fcgiwrap connection found..." else echo "Wait to close fcgiwrap open connections...please verify with 'status'" echo -e "Socket details: \n$tcp_sock" fi else echo "Fcgiwrap process is still running!" echo "Socket details: $tcp_sock" fi eend $? "Errors were encountered while stopping fcgiwrap process..." } status() { ebegin "Status fcgiwrap process..." tcp_sock=`netstat -atulpn | grep $port` if test $tcp_sock = 2> /dev/null ; then echo "Fcgiwrap process not running" else echo "Fcgiwrap process is running!" echo -e "Socket details: \n$tcp_sock" fi eend $? "Errors were encountered while stopping fcgiwrap process..." }
Данный скрипт был взят отсюда: https://ru.linux-console.net/?p=874
Откроем второй — /etc/init.d/fcgiwrap-unix-socket
# nano /etc/init.d/fcgiwrap-unix-socket
и впишем такой скрипт:
#!/sbin/runscript sock_detail=`ps a | grep fcgiwrap-unix | head -1` start() { ebegin "Starting fcgiwrap-unix-socket process..." /usr/sbin/fcgiwrap -s unix:/run/fcgiwrap-unix.sock & sleep 2 /bin/chown nginx:nginx /run/fcgiwrap-unix.sock sleep 1 sock=`ls -al /run/fcgiwrap-unix.sock` echo "Socket details: $sock" eend $? "Errors were encountered while starting fcgiwrap process" } stop() { ebegin "Stopping fcgiwrap-unix-socket process..." pid=`ps a | grep fcgiwrap | grep unix | cut -d" " -f1` rm -f /run/fcgiwrap-unix.sock kill -s 1 $pid echo "Fcgiwrap process successfully stoped" #killall /usr/sbin/fcgiwrap sleep 1 echo "Socket details: $sock" eend $? "Errors were encountered while stopping fcgiwrap process..." } status() { ebegin "Status fcgiwrap-unix-socket process..." if test -S /run/fcgiwrap-unix.sock; then echo "Process is started with socket: $sock_detail" else echo "Fcgiwrap process not running!" fi eend $? "Errors were encountered while stopping fcgiwrap process..." }
Данный скрипт был взят отсюда: https://ru.linux-console.net/?p=874
Теперь запустим обе службы и включим их в автозагрузку
# rc-service fcgiwrap start # rc-upddate add fcgiwrap default # rc-service fcgiwrap-unix-socket start # rc-update add fcgiwrap-unix-socket default
а также пора перезапустить службу nginx
# rc-service nginx restart
Готово! Теперь создадим проверочный Perl-скрипт welcome.cgi и откроем его
# touch /var/www/localhost/cgi-bin/welcome.cgi # chmod 755 /var/www/localhost/cgi-bin/welcome.cgi # nano /var/www/localhost/cgi-bin/welcome.cgi
запишем в него такие строки:
#!/usr/bin/perl print "Content-Type: text/html; charset=utf-8 \n\n"; print "<h1>Файл welcome.cgi работает!</h1>";
На другой машине в сети в адресной строке браузера введём http://IP_адрес_или_имя_хоста/cgi-bin/welcome.cgi и увидим страницу с сообщением:
Файл welcome.cgi работает!
Также создадим скрипт с краткой информацией о данном сервере
# touch /var/www/localhost/cgi-bin/cgi.pl # chmod 755 /var/www/localhost/cgi-bin/cgi.pl
откроем его
# nano /var/www/localhost/cgi-bin/cgi.pl
и впишем такие строки:
#!/usr/bin/perl print "Content-Type: text/plain; charset=utf-8 \r\n\r\n"; print "Информация о сервере: \n"; foreach ( keys %ENV ) { print "$_\t$ENV{$_}\n"; }
На странице должна отобразиться информация о сервере.
Для подключения к базе данных с помощью скриптов Perl необходимо будет установить и дополнительные пакеты. Это описано здесь: https://dondub.com/2022/03/podklyuchenie-perl-k-lamp-serveru-v-gentoo/