Страница 1 из 1

nginx+perl+netams

Добавлено: 2009-11-20 22:49:49
demonsked
Всем здравствуйте.
Решил считать трафик нетамсом. Поставил, оказалось что веб фейс у него на перле, а веб серв стоит нгинкс к которум этот перл еще прикрутить надо. Ладно нагуглил, вроде прикрутил перл к нгинксу, но видимо не корректно оно работает. А возвращаться к апаче не хочется(хотя знаю что там все зафурыкает). Странички нетамс виснут(в частности логин) или выдает такое

Код: Выделить всё

The page you are looking for is temporarily unavailable.
Please try again later. 
В консоли вижу такое

Код: Выделить всё

Use of uninitialized value in concatenation (.) or string at netams.cgi line 64.
Use of uninitialized value in substitution (s///) at netams.cgi line 76.
Name "main::rightdata" used only once: possible typo at /usr/local/www/****/netams/cgi-bin/admin/index.cgi line 13.
Name "main::L_select_to_do" used only once: possible typo at /usr/local/www/****/netams/cgi-bin/admin/index.cgi line 15.
Name "main::action" used only once: possible typo at /usr/local/www/****/netams/cgi-bin/admin/index.cgi line 7.
Use of uninitialized value in concatenation (.) or string at russian.res line 244.
Use of uninitialized value in concatenation (.) or string at russian.res line 244.
Use of uninitialized value in concatenation (.) or string at russian.res line 244.
Use of uninitialized value in concatenation (.) or string at russian.res line 244.
Use of uninitialized value in concatenation (.) or string at russian.res line 244.
Use of uninitialized value in concatenation (.) or string at russian.res line 244.
Use of uninitialized value in concatenation (.) or string at russian.res line 244.
Use of uninitialized value in concatenation (.) or string at russian.res line 244.
Use of uninitialized value in concatenation (.) or string at russian.res line 244.
Use of uninitialized value in concatenation (.) or string at russian.res line 244.
Use of uninitialized value in concatenation (.) or string at russian.res line 244.
Use of uninitialized value in string eq at netams.cgi line 15.
Use of uninitialized value in string eq at /usr/local/www/****/netams/cgi-bin/admin/index.cgi line 7.
Use of uninitialized value in concatenation (.) or string at netams.cgi line 64.
Use of uninitialized value in concatenation (.) or string at netams.cgi line 65.
Use of uninitialized value in concatenation (.) or string at netams.cgi line 65.
Can't locate Crypt/GeneratePassword.pm in @INC (@INC contains: /usr/local/lib/perl5/5.8.9/BSDPAN /usr/local/lib/perl5/site_perl/5.8.9/mach /usr/local/lib/perl5/site_perl/5.8.9 /usr/local/lib/perl5/5.8.9/mach /usr/local/lib/perl5/5.8.9 .) at /usr/local/www/site/netams/cgi-bin/admin/account.cgi line 85.
Графика отображается если только распихать папки с картинками в каждой папке где скрипты крутятся.
Завожу пользователей - не сохраняются они, конфиг от старых зачистился, а новые не заводятся.
Привожу конфиг нгинкса и скрипт для перла.

Код: Выделить всё

server {
        listen       80;
        server_name  http://www.site.net.ru site.net.ru;

        charset windows-1251;

        access_log  logs/host.access.log  main;
        error_log  logs/host.error.log  error;

        location / {
            root   /usr/local/www/site;
            index  index.html index.htm index.php index.cgi;
        }

        #location ~* \.(gif|jpg|jpeg|png|js|css|rar|exe|sis|sisx|swf|txt)$ {
        #    root   /usr/local/www/site;
        #}

        location /.,ak,234sfyf34.:,.s/ {
            alias       /usr/local/www/phpMyAdmin/;
            index       index.html index.htm index.php;
            auth_basic  "Private Zone";
            auth_basic_user_file /usr/local/www/phpMyAdmin/.htpasswd;
        }

        location /netams/ {
            alias       /usr/local/www/netams/;
            index       index.html index.htm index.php index.cgi;
        }

        #error_page  404              /404.html;

        # redirect server error pages to the static page /50x.html
        #
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   /usr/local/www/nginx-dist;
        }

        location ~ \.php$ {
            root           /usr/local/www/site/;
            fastcgi_pass   127.0.0.1:9000;
            fastcgi_index  index.php;
            fastcgi_param  SCRIPT_FILENAME  /usr/local/www/site$fastcgi_script_name;
            include        fastcgi_params;
        }

        location ~ /cgi-bin/.*\.cgi$ {
            root             /usr/local/www/site/;
            #fastcgi_pass     unix:/var/run/nginx/perl_cgi-dispatch.sock;# через юникс сокет тоже самое.
            fastcgi_pass     127.0.0.1:8999;
            fastcgi_index    index.cgi;
            fastcgi_param    SCRIPT_FILENAME  $document_root$fastcgi_script_name;
            include          fastcgi_params;
        }

        # deny access to .htaccess files, if Apache's document root
        # concurs with nginx's one
        #
        location ~ /\.ht {
            deny  all;
        }
}

Код: Выделить всё

#!/usr/bin/perl

use FCGI;
#perl -MCPAN -e 'install FCGI'
use Socket;
use POSIX qw(setsid);
#use Fcntl;

require 'sys/syscall.ph';

&daemonize;

#this keeps the program alive or something after exec'ing perl scripts
END() { } BEGIN() { }
*CORE::GLOBAL::exit = sub { die "fakeexit\nrc=".shift()."\n"; };
eval q{exit};
if ($@) {
        exit unless $@ =~ /^fakeexit/;
};

&main;

sub daemonize() {
    chdir '/'                 or die "Can't chdir to /: $!";
    defined(my $pid = fork)   or die "Can't fork: $!";
    exit if $pid;
    setsid                    or die "Can't start a new session: $!";
    umask 0;
}

sub main {
        $socket = FCGI::OpenSocket( "127.0.0.1:8999", 10 ); #use IP sockets
        #$socket = FCGI::OpenSocket( "/var/run/nginx/perl_cgi-dispatch.sock", 10 ); #use UNIX sockets - user running this script must have w access to the 'nginx' folder!!
        $request = FCGI::Request( \*STDIN, \*STDOUT, \*STDERR, \%req_params, $socket );
        if ($request) { request_loop()};
            FCGI::CloseSocket( $socket );
}

sub request_loop {
        while( $request->Accept() >= 0 ) {

           #processing any STDIN input from WebServer (for CGI-POST actions)
           $stdin_passthrough ='';
           $req_len = 0 + $req_params{'CONTENT_LENGTH'};
           if (($req_params{'REQUEST_METHOD'} eq 'POST') && ($req_len != 0) ){
                my $bytes_read = 0;
                while ($bytes_read < $req_len) {
                        my $data = '';
                        my $bytes = read(STDIN, $data, ($req_len - $bytes_read));
                        last if ($bytes == 0 || !defined($bytes));
                        $stdin_passthrough .= $data;
                        $bytes_read += $bytes;
                }
            }

            #running the cgi app
            if ( (-x $req_params{SCRIPT_FILENAME}) &&  #can I execute this?
                 (-s $req_params{SCRIPT_FILENAME}) &&  #Is this file empty?
                 (-r $req_params{SCRIPT_FILENAME})     #can I read this file?
            ){
                pipe(CHILD_RD, PARENT_WR);
                my $pid = open(KID_TO_READ, "-|");
                unless(defined($pid)) {
                        print("Content-type: text/plain\r\n\r\n");
                        print "Error: CGI app returned no output - Executing $req_params{SCRIPT_FILENAME} failed !\n";
                        next;
                }
                if ($pid > 0) {
                        close(CHILD_RD);
                        print PARENT_WR $stdin_passthrough;
                        close(PARENT_WR);

                        while(my $s = <KID_TO_READ>) { print $s; }
                        close KID_TO_READ;
                        waitpid($pid, 0);
                } else {
                        foreach $key ( keys %req_params){
                           $ENV{$key} = $req_params{$key};
                        }
                        # cd to the script's local directory
                        if ($req_params{SCRIPT_FILENAME} =~ /^(.*)\/[^\/]+$/) {
                                chdir $1;
                        }

                        close(PARENT_WR);
                        close(STDIN);
                        #fcntl(CHILD_RD, F_DUPFD, 0);
                        syscall(&SYS_dup2, fileno(CHILD_RD), 0);
                        #open(STDIN, "<&CHILD_RD");
                        exec($req_params{SCRIPT_FILENAME});
                        die("exec failed");
                }
            }
            else {
                print("Content-type: text/plain\r\n\r\n");
                print "Error: No such CGI app - $req_params{SCRIPT_FILENAME} may not exist or is not executable by this process.\n";
            }

        }
}
Прошу помочь заставить все это совместно работать.

Re: nginx+perl+netams

Добавлено: 2009-11-20 23:03:01
ProFTP
не установлен модуль

Код: Выделить всё

Crypt/GeneratePassword.pm
почитай инструкцию по установке, там должно быть написано какие модули ставить

Re: nginx+perl+netams

Добавлено: 2009-11-21 0:06:20
demonsked
Поставил модуль частично стало работать.
Пытаясь зайти на login.cgi

Код: Выделить всё

#!/usr/local/bin/perl -w
#
# login.cgi
#
# This script interacts with NeTAMS:login service in order to open an access
# for selected unit(s). You should have template file, with default name 'login.tem'
# in the same directory.
#
#-----------------------------------------------------------------------------
# $Id: login.cgi,v 1.10 2008-01-02 13:29:04 anton Exp $

# Data required to do a script login, change this
require "config.cgi";
$url_to_stat="../stat/clients/";

#-----------------------------------------------------------------------------
use CGI;
require "netams_api.pl";

$cgi=new CGI; # comment this for command-line version
print $cgi->header(-type=>'text/html',-expires=>'now',-charset=>'windows-1251'); # comment this for command-line version

$user=$cgi->param("user");
$password=$cgi->param("password");
$open=$cgi->param("open");
$from=$ENV{"REMOTE_ADDR"};

$tem_h = '<html><head><title>NeTAMS Login</title></head>
<body bgcolor="#ffffff" topmargin="0" marginheight="0" marginwidth="0" leftmargin="0">
<div align=center><form action="login.cgi" method=post>
<table width=700 align=center border=1 cellpadding=0 cellspacing=0>
<tr align=center><td width=100%><img src="../images/logo_sm.jpg" width=376 height=60 alt="" border="0" align=left>
<font size=+2 face="tahoma, arial" color=black><strong>юБРНПХГЮЖХЪ</strong></font><br>
<font size=-1 face="tahoma, arial" color=blue>БШГШБЮЕРЯЪ Я ЮДПЕЯЮ: <strong>%%FROM%%</strong></font></td></tr>
<tr bgcolor=white align=center><td><br> ';

$tem_f = '<br></td></tr></table></form></div></body></html>';

netams_login($sc_host, $sc_port, $sc_user, $sc_passwd);
$tem_h =~ s/%%FROM%%/$from/;

if ($user eq "" or $password eq "") {
                print $tem_h;
                print ' <strong>хЛЪ:</strong> <input type=text name=user size="20">&nbsp;&nbsp;&nbsp;
                                <strong>оЮПНКЭ:</strong> <input type=password name=password size="20">&nbsp;&nbsp;&nbsp;
                                <input type=submit value="бУНД"><br><br> ';
                print $tem_f;
                netams_logout();
                exit;
                }


if ($user ne "" and $password ne "" and $cgi->param("logout") ne "") {
        netams_cmds("enable","conf t","service login");
        ($result)=netams_cmd("logout name $user password $password ip $from");
        $result =~ s/parse: //;
        $result =~ s/login:0//;

        print $tem_h;
        if (-1!=index($result, "OK")) {
                print '<font size=+2 face="tahoma, arial" color="#00bb00"><strong>сЯОЕЬМН</strong></font><br>'."\n";
                print '<font size=-1 face="tahoma, arial" color=blue><a href="'.$url_to_stat.$user.'/">ЯРЮРХЯРХЙЮ</a></font><br>'."\n";
                }
        else {
                print '<font size=+2 face="tahoma, arial" color="#bb0000"><strong>оПНАКЕЛШ</strong></font><br>'."\n";

                }
        print $tem_f;
        netams_logout();
        exit;
        }

netams_cmds("enable","conf t","service login");
($result)=netams_cmd("login name $user password $password ip $from");
$result =~ s/parse: //;
$result =~ s/login:0//;

print $tem_h;
print '<input type=hidden name=user value="'.$user.'" size="20"><input type=hidden name=password value="'.$password.'"size="20">';

if (-1!=index($result, "OK") or index($result,"already logged")>=0 ) {
        print '<font size=+2 face="tahoma, arial" color="#00bb00"><strong>';
        if ( index($result,"already logged") < 0 )      { print 'дНЯРСО ПЮГПЕЬЕМ' }
        else                                            { print $result }
        print '</strong></font><br>'."\n";
        print '<font size=-1 face="tahoma, arial" color=blue><a href="'.$url_to_stat.$user.'/">ЯРЮРХЯРХЙЮ</a></font><br>'."\n";
        print '<input type=submit name=logout value="нЯРЮМНБХРЭ ДНЯРСО"><br>'."\n";
        print ''."\n";
        }
else {
        print '<font size=+2 face="tahoma, arial" color="#bb0000"><strong>б ДНЯРСОЕ НРЙЮГЮМН</strong></font><br>'."\n";
        print $result."<br>\n";
        print '<font size=-1 face="tahoma, arial" color=blue><a href="login.cgi">ОНБРНПХРЭ</a></font>'."\n";

        }

print $tem_f;

netams_logout();
exit;
В консоль сыпется.

Код: Выделить всё

sysread() on closed filehandle NETAMS_SOCKET at netams_api.pl line 68.
sysread() on closed filehandle NETAMS_SOCKET at netams_api.pl line 68.
sysread() on closed filehandle NETAMS_SOCKET at netams_api.pl line 68.
sysread() on closed filehandle NETAMS_SOCKET at netams_api.pl line 68.
sysread() on closed filehandle NETAMS_SOCKET at netams_api.pl line 68.
sysread() on closed filehandle NETAMS_SOCKET at netams_api.pl line 68.
sysread() on closed filehandle NETAMS_SOCKET at netams_api.pl line 68.
sysread() on closed filehandle NETAMS_SOCKET at netams_api.pl line 68.
sysread() on closed filehandle NETAMS_SOCKET at netams_api.pl line 68.
sysread() on closed filehandle NETAMS_SOCKET at netams_api.pl line 68.
sysread() on closed filehandle NETAMS_SOCKET at netams_api.pl line 68.
sysread() on closed filehandle NETAMS_SOCKET at netams_api.pl line 68.
sysread() on closed filehandle NETAMS_SOCKET at netams_api.pl line 68.
sysread() on closed filehandle NETAMS_SOCKET at netams_api.pl line 68.
sysread() on closed filehandle NETAMS_SOCKET at netams_api.pl line 68.
sysread() on closed filehandle NETAMS_SOCKET at netams_api.pl line 68.
sysread() on closed filehandle NETAMS_SOCKET at netams_api.pl line 68.
Пробую на юних сокете, но тоже самое. На офф сайте про модули перла ни слова не сказано.

Re: nginx+perl+netams

Добавлено: 2009-11-21 0:08:44
ProFTP

Код: Выделить всё

sysread() on closed filehandle NETAMS_SOCKET at netams_api.pl line 68.
может доступа/прав нету

Re: nginx+perl+netams

Добавлено: 2009-11-21 0:17:41
demonsked
Эх. Перевел на юник сокет. Права наиполнейшие выставлены на него. Видим вот это.

Код: Выделить всё

Name "main::L_a_created" used only once: possible typo at /usr/local/www/site/netams/cgi-bin/admin/account.cgi line 224.
Name "main::L_a_lastmod" used only once: possible typo at /usr/local/www/site/netams/cgi-bin/admin/account.cgi line 224.
Name "main::lan" used only once: possible typo at /usr/local/www/site/netams/cgi-bin/admin/account.cgi line 15.
Name "main::p5" used only once: possible typo at /usr/local/www/site/netams/cgi-bin/admin/account.cgi line 319.
Name "main::toppane" used only once: possible typo at /usr/local/www/site/netams/cgi-bin/admin/account.cgi line 16.
Name "main::log" used only once: possible typo at /usr/local/www/site/netams/cgi-bin/admin/account.cgi line 315.
Name "main::L_a_createunituser" used only once: possible typo at /usr/local/www/site/netams/cgi-bin/admin/account.cgi line 32.
Name "main::result1" used only once: possible typo at /usr/local/www/site/netams/cgi-bin/admin/account.cgi line 315.
Use of uninitialized value in concatenation (.) or string at russian.res line 244.
Use of uninitialized value in concatenation (.) or string at russian.res line 244.
Use of uninitialized value in concatenation (.) or string at russian.res line 244.
Use of uninitialized value in concatenation (.) or string at russian.res line 244.
Use of uninitialized value in concatenation (.) or string at russian.res line 244.
Use of uninitialized value in concatenation (.) or string at russian.res line 244.
Use of uninitialized value in concatenation (.) or string at russian.res line 244.
Use of uninitialized value in string eq at netams.cgi line 15.
Use of uninitialized value in split at /usr/local/www/site/netams/cgi-bin/admin/account.cgi line 49.
Use of uninitialized value in concatenation (.) or string at /usr/local/www/site/netams/cgi-bin/admin/account.cgi line 73.
Use of uninitialized value in concatenation (.) or string at /usr/local/www/site/netams/cgi-bin/admin/account.cgi line 319.
Use of uninitialized value in concatenation (.) or string at /usr/local/www/site/netams/cgi-bin/admin/account.cgi line 319.
Use of uninitialized value in concatenation (.) or string at /usr/local/www/site/netams/cgi-bin/admin/account.cgi line 319.
Use of uninitialized value in concatenation (.) or string at /usr/local/www/site/netams/cgi-bin/admin/account.cgi line 319.
Use of uninitialized value in concatenation (.) or string at netams.cgi line 64.
Может не верно врапер написан был?

Re: nginx+perl+netams

Добавлено: 2009-11-21 0:25:35
ProFTP
ну это варнинги выдаються, интерпретатор ругается....

я так понял уже работает?

их можешь убрать

Код: Выделить всё

#!/usr/local/bin/perl -w

Код: Выделить всё

#!/usr/local/bin/perl 

Re: nginx+perl+netams

Добавлено: 2009-11-21 0:53:10
demonsked
Да не понять его правильно работает или нет. Видимо сам фейс родной кривоват.
А ак можно проверить отработку перла на nginx? Чтобы точно уверенным быть что врапер работает верно.

Re: nginx+perl+netams

Добавлено: 2009-11-21 2:29:21
ProFTP
если работает - значит работает, не знаю я там что за враперы, может fcgi поставить?

mod_perl2 apache - это максимальный вариант

UPD: я не увидел это и есть FCGI

ты наверное не правильно настроил, я FCGI настраивал только под апач

там гемороя может быть много, поставь обычный CGI

Re: nginx+perl+netams

Добавлено: 2009-11-21 3:01:27
demonsked
Если бы еще знать как поставить просто цги+нгинкс.
Я только за, лишь бы работало.

Re: nginx+perl+netams

Добавлено: 2009-11-21 6:47:42
MASiK
Давным давно, один умный мой знакомый под ником ICe написал netams front который другой мой знакомый сунул в порты, она работет на Php и очень даже удачно работает, почитать можно на http://www.it2k.ru/projects/netams-front/

будут вопросы, ко мне в личку, если что можно её переделать (Самим естественно) но с поддержкой разработчика

а NaWT уже давным давно умер... разраб пропал около 4 лет назад... Куда он пропал не кому не известно, даже есть мысли что умер... Потому что он слишком резко пропал из сети

Re: nginx+perl+netams

Добавлено: 2009-11-24 8:02:24
ProFTP
demonsked писал(а):Если бы еще знать как поставить просто цги+нгинкс.
Я только за, лишь бы работало.

ну что ты сделал?

Re: nginx+perl+netams

Добавлено: 2009-11-24 20:59:18
demonsked
Поставил апач.

Re: nginx+perl+netams

Добавлено: 2009-12-17 11:59:14
ьшч
perl -MCPAN -e 'install Crypt::GeneratePassword'