Как установить perl старой версии

Knoppix

Модераторы: Warderer, Модераторы разделов

Ответить
Аватара пользователя
BAF
Сообщения: 225
Статус: Я это я, какой есть такой есть.
ОС: Ubuntu
Контактная информация:

Как установить perl старой версии

Сообщение BAF »

Имеется сервер Debian 7 и демон dhcpd. Все работает. Нужно запилить мониторинг пулов по snmp для cacti.
Решение простое dhcp-snmp скрипт на перле, но вот не задача при запуске скрипта вываливается вот эьто:

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

./script.test dhcp-snmp.conf
defined(%hash) is deprecated at ./script.test line 224.
        (Maybe you should just omit the defined()?)
defined(%hash) is deprecated at ./script.test line 226.
        (Maybe you should just omit the defined()?)
defined(%hash) is deprecated at ./script.test line 228.
        (Maybe you should just omit the defined()?)

На старой версии дебиана все летает.
Сейчас перл стоит: v5.14.2, а на старом шестой версии: v5.10.1

Как бы быть то не подскажите?
Поправите меня, если я не прав, буду тока рад.
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 20794
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: Как установить perl старой версии

Сообщение Bizdelnick »

Не проще ли скрипт поправить? Как и написано в этом сообщении, defined(%hash) обычно можно спокойно заменить на %hash (в скалярном контексте - число элементов хеша, то есть в булевом - истина, если есть хотя бы один элемент, и ложь, если ни одного элемента нет).
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:
Аватара пользователя
Hephaestus
Сообщения: 3729
Статус: Многоуважаемый джинн...
ОС: Slackware64-14.1/14.2
Контактная информация:

Re: Как установить perl старой версии

Сообщение Hephaestus »

BAF писал(а):
18.06.2014 12:30
Как бы быть то не подскажите?
Выяснить, что именно там deprecated и как это реализуется в нынешних версиях.
После чего переписать скрипт под новые условия.

Установка старых версий даже если и удастся (что не факт из-за зависимостей), всё равно будет напоминать о себе при каждом обновлении системы и рано или поздно дело всё-таки дойдет до перекраивания старых скриптов. Поэтому лучше уж сразу. Меньше проблем будет.
Пускай скрипят мои конечности.
Я - повелитель бесконечности...
Мой блог
Спасибо сказали:
Аватара пользователя
BAF
Сообщения: 225
Статус: Я это я, какой есть такой есть.
ОС: Ubuntu
Контактная информация:

Re: Как установить perl старой версии

Сообщение BAF »

Переписать то понятно самый правильный вариант. Но я не програмист, так на шеле скрипт для бекапа и отправки по фтп могу тока накатать. А уж перл ваще загадка великая.
Может тогда посоветуете как по snmp мониторить пулы dhcp? Из всего что я сейчас сделал это закомпили пакет dhcpd-pool, но он показывает только локально.
Поправите меня, если я не прав, буду тока рад.
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 20794
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: Как установить perl старой версии

Сообщение Bizdelnick »

BAF писал(а):
18.06.2014 13:38
я не програмист

Я же написал, что надо сделать. Если сомневаетесь, покажите проблемный кусок кода (строки с 220 по 230 или чуть больше).
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:
Аватара пользователя
BAF
Сообщения: 225
Статус: Я это я, какой есть такой есть.
ОС: Ubuntu
Контактная информация:

Re: Как установить perl старой версии

Сообщение BAF »

Bizdelnick писал(а):
18.06.2014 13:02
Не проще ли скрипт поправить? Как и написано в этом сообщении, defined(%hash) обычно можно спокойно заменить на %hash (в скалярном контексте - число элементов хеша, то есть в булевом - истина, если есть хотя бы один элемент, и ложь, если ни одного элемента нет).


Если бы я понимал в рперле я бы воспользовался вашим советом. Вот код

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

  # Read leases
  if (!open(LEASES, $conf->{"leases"})) {
    printf STDERR "Unable to open leases file '%s'!\n", $conf->{leases};
    return;
  }

  my %l = undef;

  while (my $line = <LEASES>) {
    if ($line =~ /^lease (\d+\.\d+\.\d+\.\d+) \{$/) {
      my $ip = ip2int($1);
      undef %l;

      foreach my $i (keys %{ $conf->{"pools"} }) {
    my $pool = $conf->{"pools"}->{$i};
    my $found = 0;

    foreach my $r (@{ $pool->{"ranges"} }) {
      if (($ip >= $r->{"from"}) && ($ip <= $r->{"to"})) {
        %l = ( "pool" => $i, "ip" => $ip );
        $found = 1;
        last;
      }
    }
    if ($found) {
      last;
    }
      }
    } elsif (defined %l && $line =~ /^\s+ends \d (\d+)\/(\d+)\/(\d+) (\d+):(\d+):(\d+);$/) {
      $l{"ends"} = timegm($6, $5, $4, $3, $2-1, $1);
    } elsif (defined %l && $line =~ /^\s+ends never;$/) {
      $l{"ends"} = -1;
    } elsif (defined %l && $line =~ /^\}$/) {
      $conf->{"pools"}->{$l{"pool"}}->{"leases"}->{$l{"ip"}} = $l{"ends"};
    }
  }

Ссылка на сам скрипт https://yadi.sk/d/4O4CDKZaTt88P
Вот ссылка на сайт создателя http://www.net-track.ch/opensource/dhcpd-snmp/ но сайт не открывается, хотя резолвится.
Поправите меня, если я не прав, буду тока рад.
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 20794
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: Как установить perl старой версии

Сообщение Bizdelnick »

Экий изврат... Ну как-то так:

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

--- dhcp-snmp    2014-06-18 14:56:48.601380034 +0400
+++ dhcp-snmp.fixed    2014-06-18 15:36:19.245950233 +0400
@@ -199,12 +199,12 @@
     return;
   }

-  my %l = undef;
+  my %l;

   while (my $line = <LEASES>) {
     if ($line =~ /^lease (\d+\.\d+\.\d+\.\d+) \{$/) {
       my $ip = ip2int($1);
-      undef %l;
+      %l = ();

       foreach my $i (keys %{ $conf->{"pools"} }) {
     my $pool = $conf->{"pools"}->{$i};
@@ -221,12 +221,14 @@
       last;
     }
       }
-    } elsif (defined %l && $line =~ /^\s+ends \d (\d+)\/(\d+)\/(\d+) (\d+):(\d+):(\d+);$/) {
-      $l{"ends"} = timegm($6, $5, $4, $3, $2-1, $1);
-    } elsif (defined %l && $line =~ /^\s+ends never;$/) {
-      $l{"ends"} = -1;
-    } elsif (defined %l && $line =~ /^\}$/) {
-      $conf->{"pools"}->{$l{"pool"}}->{"leases"}->{$l{"ip"}} = $l{"ends"};
+    } elsif (%l) {
+      if ($line =~ /^\s+ends \d (\d+)\/(\d+)\/(\d+) (\d+):(\d+):(\d+);$/) {
+        $l{"ends"} = timegm($6, $5, $4, $3, $2-1, $1);
+      } elsif ($line =~ /^\s+ends never;$/) {
+        $l{"ends"} = -1;
+      } elsif ($line =~ /^\}$/) {
+        $conf->{"pools"}->{$l{"pool"}}->{"leases"}->{$l{"ip"}} = $l{"ends"};
+      }
     }
   }

dhcp_snmp.fixed.gz
(3.72 КБ) 8 скачиваний
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:
Аватара пользователя
BAF
Сообщения: 225
Статус: Я это я, какой есть такой есть.
ОС: Ubuntu
Контактная информация:

Re: Как установить perl старой версии

Сообщение BAF »

Bizdelnick писал(а):
18.06.2014 15:34
Экий изврат... Ну как-то так:

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

--- dhcp-snmp    2014-06-18 14:56:48.601380034 +0400
+++ dhcp-snmp.fixed    2014-06-18 15:36:19.245950233 +0400
@@ -199,12 +199,12 @@
     return;
   }

-  my %l = undef;
+  my %l;

   while (my $line = <LEASES>) {
     if ($line =~ /^lease (\d+\.\d+\.\d+\.\d+) \{$/) {
       my $ip = ip2int($1);
-      undef %l;
+      %l = ();

       foreach my $i (keys %{ $conf->{"pools"} }) {
     my $pool = $conf->{"pools"}->{$i};
@@ -221,12 +221,14 @@
       last;
     }
       }
-    } elsif (defined %l && $line =~ /^\s+ends \d (\d+)\/(\d+)\/(\d+) (\d+):(\d+):(\d+);$/) {
-      $l{"ends"} = timegm($6, $5, $4, $3, $2-1, $1);
-    } elsif (defined %l && $line =~ /^\s+ends never;$/) {
-      $l{"ends"} = -1;
-    } elsif (defined %l && $line =~ /^\}$/) {
-      $conf->{"pools"}->{$l{"pool"}}->{"leases"}->{$l{"ip"}} = $l{"ends"};
+    } elsif (%l) {
+      if ($line =~ /^\s+ends \d (\d+)\/(\d+)\/(\d+) (\d+):(\d+):(\d+);$/) {
+        $l{"ends"} = timegm($6, $5, $4, $3, $2-1, $1);
+      } elsif ($line =~ /^\s+ends never;$/) {
+        $l{"ends"} = -1;
+      } elsif ($line =~ /^\}$/) {
+        $conf->{"pools"}->{$l{"pool"}}->{"leases"}->{$l{"ip"}} = $l{"ends"};
+      }
     }
   }


У меня нет слов, огромное спасибо за помощь.

Теперь другая проблема
Делаю В snmpd.conf

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

.1.3.6.1.4.1.21695.1.2 DHCPPools /etc/dhcp/dhcp-mrtg/dhcp-snmp /etc/dhcp/dhcp-mrtg/dhcp-snmp.conf

А в ответ

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

pass .1.3.6.1.4.1.21695.1.2  /etc/dhcp/dhcp-mrtg/dhcp-snmp /etc/dhcp/dhcp-mrtg/dhcp-snmp.conf

И в ответ

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

snmpwalk -v 2c -c public 10.245.112.149 .1.3.6.1.4.1.21695.1.2.2
iso.3.6.1.4.1.21695.1.2.2 = No Such Instance currently exists at this OID

Если сделать

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

extend .1.3.6.1.4.1.21695.1.2 DHCPPools /etc/dhcp/dhcp-mrtg/dhcp-snmp /etc/dhcp/dhcp-mrtg/dhcp-snmp.conf

То в ответ

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

snmpwalk -v 2c -c public 10.245.112.149 .1.3.6.1.4.1.21695.1.2.2
iso.3.6.1.4.1.21695.1.2.2.1.2.9.68.72.67.80.80.111.111.108.115 = STRING: "/etc/dhcp/dhcp-mrtg/dhcp-snmp"
iso.3.6.1.4.1.21695.1.2.2.1.3.9.68.72.67.80.80.111.111.108.115 = STRING: "/etc/dhcp/dhcp-mrtg/dhcp-snmp.conf"
iso.3.6.1.4.1.21695.1.2.2.1.4.9.68.72.67.80.80.111.111.108.115 = ""
iso.3.6.1.4.1.21695.1.2.2.1.5.9.68.72.67.80.80.111.111.108.115 = INTEGER: 5
iso.3.6.1.4.1.21695.1.2.2.1.6.9.68.72.67.80.80.111.111.108.115 = INTEGER: 1
iso.3.6.1.4.1.21695.1.2.2.1.7.9.68.72.67.80.80.111.111.108.115 = INTEGER: 1
iso.3.6.1.4.1.21695.1.2.2.1.20.9.68.72.67.80.80.111.111.108.115 = INTEGER: 4
iso.3.6.1.4.1.21695.1.2.2.1.21.9.68.72.67.80.80.111.111.108.115 = INTEGER: 1


Я так понимаю нужен первый способ, но он почему-то не работает, на редхатовском так

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

pass_persist .1.3.6.1.4.1.21695.1.2 /home/dhcp-mrtg/dhcp-snmp /home/dhcp-mrtg/dhcp-snmp.conf

Но на дебиане это не работает, странно.
Поправите меня, если я не прав, буду тока рад.
Спасибо сказали:
Аватара пользователя
BAF
Сообщения: 225
Статус: Я это я, какой есть такой есть.
ОС: Ubuntu
Контактная информация:

Re: Как установить perl старой версии

Сообщение BAF »

У се, проблема решена.
Спасибо Bizdelnick за помощь в изменении скрипта под новый перл. Дальше все просто:

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

pass_persist .1.3.6.1.4.1.21695.1.2 /home/dhcp-mrtg/dhcp-snmp /home/dhcp-mrtg/dhcp-snmp.conf

и все работает:

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

 root@cactiserver:/usr/share/cacti# snmpwalk -v 2c -c public 10.245.112.149 .1.3.6.1.4.1.21695.1.2.2
iso.3.6.1.4.1.21695.1.2.2.1 = INTEGER: 0
iso.3.6.1.4.1.21695.1.2.2.1.1 = INTEGER: 1
iso.3.6.1.4.1.21695.1.2.2.1.10 = INTEGER: 10
iso.3.6.1.4.1.21695.1.2.2.1.11 = INTEGER: 11
iso.3.6.1.4.1.21695.1.2.2.1.12 = INTEGER: 12
iso.3.6.1.4.1.21695.1.2.2.1.13 = INTEGER: 13
iso.3.6.1.4.1.21695.1.2.2.2 = ""
iso.3.6.1.4.1.21695.1.2.2.2.1 = STRING: "LAN"
iso.3.6.1.4.1.21695.1.2.2.2.10 = STRING: "pool_for_PETR_MG_36_1"
iso.3.6.1.4.1.21695.1.2.2.2.11 = STRING: "pool_for_PETR_MG_36_2"
iso.3.6.1.4.1.21695.1.2.2.2.12 = STRING: "pool_for_PETR_MG_36_3"
iso.3.6.1.4.1.21695.1.2.2.2.13 = STRING: "pool_for_PETR_MG_32_1"
iso.3.6.1.4.1.21695.1.2.2.3 = INTEGER: 0
iso.3.6.1.4.1.21695.1.2.2.3.1 = INTEGER: 0
iso.3.6.1.4.1.21695.1.2.2.3.10 = INTEGER: 1021
iso.3.6.1.4.1.21695.1.2.2.3.11 = INTEGER: 1021
iso.3.6.1.4.1.21695.1.2.2.3.12 = INTEGER: 1021
iso.3.6.1.4.1.21695.1.2.2.3.13 = INTEGER: 1021
iso.3.6.1.4.1.21695.1.2.2.4 = INTEGER: 0
iso.3.6.1.4.1.21695.1.2.2.4.1 = INTEGER: 0
iso.3.6.1.4.1.21695.1.2.2.4.10 = INTEGER: 4
iso.3.6.1.4.1.21695.1.2.2.4.11 = INTEGER: 0
iso.3.6.1.4.1.21695.1.2.2.4.12 = INTEGER: 0
iso.3.6.1.4.1.21695.1.2.2.4.13 = INTEGER: 0
iso.3.6.1.4.1.21695.1.2.2.5 = INTEGER: 1
iso.3.6.1.4.1.21695.1.2.2.5.1 = INTEGER: 0
iso.3.6.1.4.1.21695.1.2.2.5.10 = INTEGER: 509
iso.3.6.1.4.1.21695.1.2.2.5.11 = INTEGER: 510
iso.3.6.1.4.1.21695.1.2.2.5.12 = INTEGER: 510
iso.3.6.1.4.1.21695.1.2.2.5.13 = INTEGER: 510
iso.3.6.1.4.1.21695.1.2.2.6 = INTEGER: 0
iso.3.6.1.4.1.21695.1.2.2.6.1 = INTEGER: 0
iso.3.6.1.4.1.21695.1.2.2.6.10 = INTEGER: 1017
iso.3.6.1.4.1.21695.1.2.2.6.11 = INTEGER: 1021
iso.3.6.1.4.1.21695.1.2.2.6.12 = INTEGER: 1021
iso.3.6.1.4.1.21695.1.2.2.6.13 = INTEGER: 1021


Плюсы: есть люди у которых есть время помогать.
Минус: сам нифига ничему не научился.

Еще раз спасибо.
Поправите меня, если я не прав, буду тока рад.
Спасибо сказали:
Аватара пользователя
BAF
Сообщения: 225
Статус: Я это я, какой есть такой есть.
ОС: Ubuntu
Контактная информация:

Re: Как установить perl старой версии

Сообщение BAF »

graph_image.php.png

Вот такие графики получаются благодаря вашей помощи. Еще раз спасибо.
Поправите меня, если я не прав, буду тока рад.
Спасибо сказали:
Ответить