LINUX.ORG.RU

Perl установка модуля Mysql через CPAN


0

1

Ставлю через CPAN модуль для поддержки MySQL в perl, установил

#perl -MCPAN -e shell
>install YAML
>install DBD::mysql
>install DBI

install Mysql вылетает с ошибкой

cpan[5]> install Mysql                             
Running install for module 'Mysql'
Running make for C/CA/CAPTTOFU/DBD-mysql-3.0008.tar.gz
  Has already been unwrapped into directory /home/commeta/.cpan/build/DBD-mysql-3.0008-gjTi6t
Could not make: Unknown error
Running make test
  Can't test without successful make
Running make install
  Make had returned bad status, install seems impossible
подскажите в чем грабли? ubuntu 12.04

Не устанавливайте perl модуль mysql через CPAN.

DBD::mysql вы установили, зачем вам Mysql?

hizel ★★★★★ ()
Ответ на: комментарий от hizel

так я это

use Mysql;
$dbh=Mysql->Connect($host,$db,$user,$password);
$sth=$dbh->Query("set character_set_client='cp1251'");
$sth=$dbh->Query("set character_set_results='cp1251'");
$sth=$dbh->Query("set collation_connection='cp1251_general_ci'");
$sth=$dbh->Query("$q_string") or die 'не могу выполнить запрос'.$q_string;
а он мне
./domain2db.pl xn--80aaodpggmcegbabl7bg0f7h.xn--p1ai
Can't locate Mysql.pm in @INC (@INC contains: 
/home/commeta/perl5/lib/perl5/i686-linux-gnu-thread-multi-64int /home/commeta/perl5/lib/perl5/i686-linux-gnu-thread-multi-64int 
/home/commeta/perl5/lib/perl5 
/etc/perl 
/usr/local/lib/perl/5.14.2 
/usr/local/share/perl/5.14.2 
/usr/lib/perl5 /usr/share/perl5
/usr/lib/perl/5.14 
/usr/share/perl/5.14 
/usr/local/lib/site_perl .) at ./domain2db.pl line 30.
BEGIN failed--compilation aborted at ./domain2db.pl line 30.
line 30 это use Mysql;

commeta ()

ubuntu 12.04

sudo apt-get install libyaml-perl libdbi-perl libdbd-mysql-perl

Не превращайте систему в помойку. Ставите модуль из CPAN - убедитесь в том, что его нет в репозитории. Соберите в пакет при помощи cpan2deb.

А для сборки чего угодно установите пакет build-essential.

AITap ★★★★★ ()
Ответ на: комментарий от AITap

Ваша правда, подиспачкал немного систему... так я ему sudo apt-get install libyaml-perl libdbi-perl libdbd-mysql-perl а он всеравно BEGIN failed--compilation aborted at ./domain2db.pl line 30.

я где-то недогоняю чето.

commeta ()
Ответ на: комментарий от AITap

А ещё можно использовать cpanminus.

anonymous ()
Ответ на: комментарий от commeta

Mysql модуль помер примерно сто лет назад. Перепишете на DBI.

hizel ★★★★★ ()
Ответ на: комментарий от commeta

Модуля Mysql в репозитории нет. Вы можете его собрать, но для сборки нужно поставить хотя бы make - пакет build-essential его подтянет.

Но люди выше правильно советуют - перепишите с Mysql на DBI.

AITap ★★★★★ ()
Последнее исправление: AITap (всего исправлений: 1)
Ответ на: комментарий от anonymous

Сильно не пинайте, только начал перловку грызть

#!/usr/bin/perl -w
# -*- coding: utf-8 -*-
#
#  example.pl
#  
#  Copyright 2013 commeta <commeta@ubuntu>
#  
#  This program is free software; you can redistribute it and/or modify
#  it under the terms of the GNU General Public License as published by
#  the Free Software Foundation; either version 2 of the License, or
#  (at your option) any later version.
#  
#  This program is distributed in the hope that it will be useful,
#  but WITHOUT ANY WARRANTY; without even the implied warranty of
#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
#  GNU General Public License for more details.
#  
#  You should have received a copy of the GNU General Public License
#  along with this program; if not, write to the Free Software
#  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
#  MA 02110-1301, USA.

use URI::UTF8::Punycode;
use Encode;
use Net::DNS;
use Net::SSH qw(sshopen2 sshopen3);
use strict;
use warnings;
use Mysql;

my $cmd= "";
my $host= "";  
my @servers= ("x.xx.x.x","x.xx.xx.xx","x.x.x.x","x.x.x.x","x.x.x.x");
my $flg= 0;
  
sub encode_domain {
    my $doma = shift;
    my ($dom2, $dom1) = split /\./, $doma;
    return puny_enc($dom2).'.'.puny_enc($dom1);
}

if(@ARGV < 1){ 
	print  "Не указано название домена!\n";  
	exit;
}
my $domain= $ARGV[0];

print "Домен: ",$domain,"\n";

if($domain !~ m/[a-z].[a-z]/i){
	$domain=encode_domain($domain);
	print "Punycode: ",$domain,"\n";
}

my $res   = Net::DNS::Resolver->new;
my $query = $res->search($domain);
  
if($query){
    foreach my $rr ($query->answer) {
		next unless $rr->type eq "A";
		$host= $rr->address;
        print "ip адрес домена: ",$host, "\n";
    }
} else {
    warn "Ошибка при запросе ip адреса: ", $res->errorstring, "\n";
    exit;
}

foreach(@servers){
	if($_ eq $host){
		print "Домен на нашем хостинге \n";
		$flg= 1;
		last;
	}
}
if($flg == 0){
	die "Домен не на нашем хостинге!\n";
}
$flg=0;

my $result= "";
sub ssh_send{
	my $cmd = shift;
	my $host = shift;
	my $result= "";
	
	sshopen3("good\@$host", *READER, *WRITER, *ERROR, $cmd ) || die "ssh: $!";
	
	while(<WRITER>){
		$result .= $_;
	}
	while(<ERROR>){
		$result .= $_;
	}
	
	close(READER);
	close(WRITER);
	close(ERROR);
	
	return $result;
} 
print "Ищем конфиг апача\n";

$cmd= "cat /etc/apache2/apache2.conf"; 
$result= ssh_send($cmd,$host);
if($result=~/^cat:\s\/etc\/apache2\/(apache2.conf:.+)/){
	print $1,"\n";
	print "Тогда ищем в другом месте\n";
	$cmd= "cat /etc/httpd/conf/httpd.conf";
	$result= ssh_send($cmd,$host);
}
if($result=~/^cat:\s\/etc\/httpd\/conf\/(httpd.conf:.+)/){
	print $1,"\n";
	print "Нету конфига!, ошибка\n";
	exit;
}

print "Ищем путь к каталогу сайта\n";
my $ServerName= "";
my $DocumentRoot= "";
$flg=0;  
my @strs= split "\n", $result;
foreach(@strs){
    if($_=~/^<VirtualHost\s[0-9\.:\s]+>$/) { $flg=1; next;}
    if($_=~/^<\/VirtualHost>$/) { 
		if($ServerName ne "" || $DocumentRoot ne ""){
			if($ServerName eq $domain){
				last;
			}
		} else {
			$flg=0;
			next;
		}
	}
    if($flg == 1){
		if($_=~/ServerName\s([\w\-\.]+)/){ 
			$ServerName= $1; 
			next;
		}
		if($_=~/DocumentRoot\s([\w\-\/\.]+)/){ 
			$DocumentRoot= $1; 
			next;
		}
    }
}
if($ServerName eq "" || $DocumentRoot eq ""){
	print "Не найден DocumentRoot\n";
	exit;
}
print "ServerName: ",$ServerName,"\n";
print "DocumentRoot: ",$DocumentRoot,"\n";

print "Определяем движок:\n";
$cmd= "cat $DocumentRoot/configuration.php"; 
$result= ssh_send($cmd,$host);
if($result=~/^cat:\s.+(configuration\.php.+)/){
	print $1,"\n";
	print "значит не Joomla!\n";
	exit;
}

print "Найден configuration.php\n";
my $db= "";
my $user= "";
my $password= "";
my $dbprefix= "";
if($result=~/class JConfig/){
	print "Похоже на joomla\n";
	if($result=~/public\s\$db\s=\s\'(.+)\';/){
		$db= $1;
	}
	if($result=~/public\s\$user\s=\s\'(.+)\';/){
		$user= $1;
	}
	if($result=~/public\s\$password\s=\s\'(.+)\';/){
		$password= $1;
	}
	if($result=~/public\s\$dbprefix\s=\s\'(.+)\';/){
		$dbprefix= $1;
	}
}

print $result;
if($db eq "" || $user eq "" || $password eq "" || $dbprefix eq ""){
	print "Не найдены данные подключения к базе данных\n";
	print $result;
	exit;
}

print "База данных: $db\n";
print "Пользователь: $user\n";
print "Пароль: $password\n";
print "Префикс таблицы: $dbprefix\n";
print "url myadmin: http://$domain/myadmin/\n";

exit;
print "Смотрим что есть в базе\n";
$dbh=Mysql->Connect($host,$db,$user,$password);
$sth=$dbh->Query("set character_set_client='cp1251'");
$sth=$dbh->Query("set character_set_results='cp1251'");

commeta ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.