Jump to content
Slacky

Про Perl, DBI и sqlite

Recommended Posts

Добрый день.

 

Поиск рыл, ничего не нашел.

Вопрос - не могу прикрутить sqlite к Perl'у. Установил сам Perl, установил perl-dbi. При выполнении простого скрипта

#!/opt/bin/perl

use DBI;
use strict;

my $driver   = "SQLite";
my $database = "test.db";
my $dsn = "DBI:$driver:dbname=$database";
my $userid = "root";
my $password = "654321";
my $dbh = DBI->connect($dsn, $userid, $password, { RaiseError => 1 })
                      or die $DBI::errstr;

print "Opened database successfully\n";

выдает следующее

 

install_driver(SQLite) failed: Can't locate DBD/SQLite.pm in @INC (you may need to install the DBD::SQLite module) (@INC contains: /opt/lib/perl5/5.22 .) at (eval 5) line 3.
Perhaps the DBD::SQLite perl module hasn't been fully installed,
or perhaps the capitalisation of 'SQLite' isn't right.
Available drivers: DBM, ExampleP, File, Gofer, Proxy, Sponge.
 at ./test.pl line 11.
 

С бубном бегал (пытался устанавливать perlbase-anydbm-file и проч. Не помогло.

 

Куда смотреть?

 

Спасибо.

Share this post


Link to post
Share on other sites
1 час назад, Slacky сказал:

Куда смотреть?

Начальная установка Perl включает более 100 пакетов. Можно поставить 1ой командой - http://forums.zyxmon.org/viewtopic.php?p=16476#p16476

Для поддержки sqlite скорее всего одним пакетом не обойтись - изучите список пакетов perl.

Share this post


Link to post
Share on other sites
11 час назад, zyxmon сказал:

Начальная установка Perl включает более 100 пакетов. Можно поставить 1ой командой - http://forums.zyxmon.org/viewtopic.php?p=16476#p16476

Для поддержки sqlite скорее всего одним пакетом не обойтись - изучите список пакетов perl.

Установил, как предлагалось по ссылке. Не помогло.

install_driver(SQLite) failed: Can't locate DBD/SQLite.pm in @INC (you may need to install the DBD::SQLite module) (@INC contains: /opt/lib/perl5/5.22 .) at (eval 5) line 3.
Perhaps the DBD::SQLite perl module hasn't been fully installed,
or perhaps the capitalisation of 'SQLite' isn't right.
Available drivers: DBM, ExampleP, File, Gofer, Proxy, Sponge.
 at ./test.pl line 11.

Share this post


Link to post
Share on other sites
28 минут назад, Slacky сказал:

Установил, как предлагалось по ссылке. Не помогло.

Так это только первая часть. Выше написано....

Share this post


Link to post
Share on other sites
16 минут назад, zyxmon сказал:

Так это только первая часть. Выше написано....

Если честно, про"выше написано" не совсем понял ...

Не понятно, что изучать в пакетах. К тому же, все пакеты от Perl вообще поставить не получается

Configuring perlbase-universal.
Configuring perlbase-storable.
Configuring perlbase-ipc.
Configuring perl-dbi.
Configuring perl-dev.
Configuring perl-image-exiftool.
Configuring perl-net-telnet.
Collected errors:
 * check_data_file_clashes: Package perl-test-harness wants to install file /opt/lib/perl5/5.22/TAP/Base.pm
        But that file is already provided by package  * perlbase-tap
 * check_data_file_clashes: Package perl-test-harness wants to install file /opt/lib/perl5/5.22/TAP/Formatter/Base.pm
        But that file is already provided by package  * perlbase-tap
 * check_data_file_clashes: Package perl-test-harness wants to install file /opt/lib/perl5/5.22/TAP/Formatter/Color.pm
        But that file is already provided by package  * perlbase-tap
 * check_data_file_clashes: Package perl-test-harness wants to install file /opt/lib/perl5/5.22/TAP/Formatter/Console/ParallelSession.pm
        But that file is already provided by package  * perlbase-tap
 

Ну и там много еще чего внизу с perlbase-tap ...

Share this post


Link to post
Share on other sites

Не, все равно не получилось. Создание makefile проходит успешно ...

root@Keenetic_Extra:/opt/usr/src/perl/DBD-SQLite-1.54$ perl Makefile.PL
Checking if your kit is complete...
Looks good
Using DBI 1.634 (for perl 5.022001 on mipsel-linux-glibc) installed in /opt/lib/perl5/5.22/auto/DBI/
Generating a Unix-style Makefile
Writing Makefile for DBD::SQLite
Writing MYMETA.yml and MYMETA.json

А вот дальше этому всему не хватает Driver_xst.h.

root@Keenetic_Extra:/opt/usr/src/perl/DBD-SQLite-1.54$ make
cp lib/DBD/SQLite/VirtualTable/FileContent.pm blib/lib/DBD/SQLite/VirtualTable/FileContent.pm
cp lib/DBD/SQLite/VirtualTable/PerlData.pm blib/lib/DBD/SQLite/VirtualTable/PerlData.pm
cp lib/DBD/SQLite/VirtualTable.pm blib/lib/DBD/SQLite/VirtualTable.pm
cp lib/DBD/SQLite.pm blib/lib/DBD/SQLite.pm
cp lib/DBD/SQLite/Cookbook.pod blib/lib/DBD/SQLite/Cookbook.pod
cp lib/DBD/SQLite/Constants.pm blib/lib/DBD/SQLite/Constants.pm
cp lib/DBD/SQLite/Fulltext_search.pod blib/lib/DBD/SQLite/Fulltext_search.pod
Running Mkbootstrap for DBD::SQLite ()
chmod 644 "SQLite.bs"
make: *** No rule to make target '/opt/lib/perl5/5.22/auto/DBI/Driver_xst.h', needed by 'SQLite.xsi'.  Stop.

В auto/DBI его нет, есть 

root@Keenetic_Extra:/opt/lib/perl5/5.22/auto/DBI$ ls -l
-rwxr-xr-x    1 root     root        139092 Feb 20 08:26 DBI.so
-rw-r--r--    1 root     root         23067 Feb 20 08:26 Driver.xst
 

Поиск рыл, ничего внятного ...

Share this post


Link to post
Share on other sites

Изучите кнопочку CODE на форуме. Если листинг большой - выкладывайте на https://pastebin.com

8 минут назад, Slacky сказал:

А вот дальше этому всему не хватает Driver_xst.h.

это жe target!

PS Наверняка инструкцию выполнили не полностью.

Share this post


Link to post
Share on other sites
59 минут назад, zyxmon сказал:

PS Наверняка инструкцию выполнили не полностью.

Каюсь. Прочел только до установки CPAN-DistnameInfo - ну типа понял. А там дальше несколько по другому. Пока положительным результатом похвастаться не могу - долго это все происходит ...

Share this post


Link to post
Share on other sites

Надеюсь, sqlite3 поставили. Если нет - не будет найдена либа при линковке.

5 минут назад, Slacky сказал:

долго это все происходит ...

Если дошло до тестов - все ок! :-D

Share this post


Link to post
Share on other sites
8 минут назад, zyxmon сказал:

Надеюсь, sqlite3 поставили. Если нет - не будет найдена либа при линковке.

Если дошло до тестов - все ок! :-D

Конечно поставил - sqlite3-cli и libsqlite3.

До тестов не дошло. При попытке установки HTTP::Date пишет, что нашел новую версию cpan, ну ее что-то долго устанавливает ...

Share this post


Link to post
Share on other sites

Инструкция писалась давно, могла частично и устареть. Не так давно на НАСах по ней пакеты ставили.

Вот с неделю назад с форума

Цитата

For those trying to install Net::SSLeay this CPAN line worked for me
o conf makepl_arg 'LIBS="-L/opt/lib -lcrypto -lssl"'

 

Share this post


Link to post
Share on other sites

Дал вечером команду install HTTP::Date и пошел спать.

Утром увидел, что все ок.

All tests successful.
Files=5, Tests=508,  7 wallclock secs ( 1.41 usr  0.10 sys +  4.15 cusr  0.33 csys =  5.99 CPU)
Result: PASS
  GBARR/TimeDate-2.30.tar.gz
  /opt/bin/make test -- OK
Running make install
Use of chdir('') or chdir(undef) as chdir() is deprecated at /opt/lib/perl5/5.22/ExtUtils/Install.pm line 332.
Appending installation info to /opt/lib/perl5/5.22/perllocal.pod
  GBARR/TimeDate-2.30.tar.gz
  /opt/bin/make install  -- OK

cpan[3]> 

Дал команду bye. Висит уже полчаса ...

cpan[3]> bye
Terminal does not support GetHistory.
Lockfile removed.

Ладно, нужно убегать. Оставлю, вечером посмотрю - отлипнет ли ...

Share this post


Link to post
Share on other sites

Отлипла. Но все равно не работает, результат тот же.

Running Mkbootstrap for DBD::SQLite ()
chmod 644 "SQLite.bs"
make: *** No rule to make target '/opt/lib/perl5/5.22/auto/DBI/Driver_xst.h', needed by 'SQLite.xsi'.  Stop.
  ISHIGAKI/DBD-SQLite-1.54.tar.gz
  /opt/bin/make -- NOT OK
Failed during this command:
 ISHIGAKI/DBD-SQLite-1.54.tar.gz              : make NO

Вечером все снесу, попробую по-новой ...

Edited by Slacky

Share this post


Link to post
Share on other sites

По Вашим обрывкам логов ничего сказать нельзя. Swap включите!

Share this post


Link to post
Share on other sites

Попробовал на mipsel - действительно жуткие тормоза. Причем тормозит  CPAN, пишет громадные файлы. Снял.

Можно попробовать ставить руками, только смотреть зависимости и ставить сначала их. Стал ставить DBI (зависимость) - http://search.cpan.org/~timb/DBI-1.636/DBI.pm

make проходит, все нужные файлы компилируются и создаются, а install вываливается 

# make install
Use of chdir('') or chdir(undef) as chdir() is deprecated at /opt/lib/perl5/5.22/ExtUtils/Install.pm line 332.
Use of chdir('') or chdir(undef) as chdir() is deprecated at /opt/lib/perl5/5.22/ExtUtils/Install.pm line 332.
Use of chdir('') or chdir(undef) as chdir() is deprecated at /opt/lib/perl5/5.22/ExtUtils/Install.pm line 332.
Installing /opt/lib/perl5/5.22/auto/DBI/Driver.xst
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
ERROR: Cannot copy 'blib/arch/auto/DBI/Driver.xst' to '/opt/lib/perl5/5.22/auto/DBI/Driver.xst': No such file or directory
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
 at -e line 1.
make: *** [Makefile:1106: pure_site_install] Error 2
root@Keenetic_Extra:/opt/root/perl_install/DBI-1.636$
root@Keenetic_Extra ~/p/DBI-1.636# ls blib/arch/auto/DBI/
DBI.so        Driver.xst    dbd_xsh.h     dbipport.h    dbixs_rev.h
DBIXS.h       Driver_xst.h  dbi_sql.h     dbivport.h

Думаю проще с этим разобраться.

Share this post


Link to post
Share on other sites
21 час назад, zyxmon сказал:

make проходит, все нужные файлы компилируются и создаются, а install вываливается 

Вчера некогда было этим заниматься. Но make у меня не проходит.

А можно попросить листинг посмотреть opkg list-installed?

Share this post


Link to post
Share on other sites
36 минут назад, Slacky сказал:

А можно попросить листинг посмотреть opkg list-installed?

По инструкции все и ставил, включая некоторые coreutils*. Лучше Вы полные листинги выкладывайте на pastebin.

37 минут назад, Slacky сказал:

Но make у меня не проходит.

Должны быть установлены make, gcc, распакованы хедеры, установлены либы, с которыми линковка будет.

Лучше Вам дам лог установки DBI (в самом конце ошибка, файл которые не удается скопировать есть!)

Вот лог - https://pastebin.com/2V6zi0Uu 

Причина проблем, возможно, в самых первых строках лога.

 

Share this post


Link to post
Share on other sites

Очень похоже на проблему чисто ndms. Perl не определяет текущую директорию и установка не проходит.

Share this post


Link to post
Share on other sites
26 минут назад, zyxmon сказал:

Очень похоже на проблему чисто ndms. Perl не определяет текущую директорию и установка не проходит.

Есть решение?

Share this post


Link to post
Share on other sites
51 минуту назад, Slacky сказал:

Есть решение?

Блин. Кто из нас с Вами знгаток по perl и должен решение искать. Проблема то локализована!

Ищите в файле `/opt/lib/perl5/5.22/Cwd.pm` строку `/usr/bin/pwd` и меняете на `/opt/bin/pwd` - после этого все ставится

Files found in blib/arch: installing files in blib/lib into architecture dependent library tree
Installing /opt/lib/perl5/5.22/auto/DBI/Driver.xst
Installing /opt/lib/perl5/5.22/auto/DBI/DBIXS.h
Installing /opt/lib/perl5/5.22/auto/DBI/DBI.so
Installing /opt/lib/perl5/5.22/auto/DBI/dbipport.h
Installing /opt/lib/perl5/5.22/auto/DBI/dbivport.h
Installing /opt/lib/perl5/5.22/auto/DBI/Driver_xst.h
Installing /opt/lib/perl5/5.22/auto/DBI/dbi_sql.h
Installing /opt/lib/perl5/5.22/auto/DBI/dbixs_rev.h
Installing /opt/lib/perl5/5.22/auto/DBI/dbd_xsh.h
Installing /opt/lib/perl5/5.22/dbixs_rev.pl
Installing /opt/lib/perl5/5.22/DBI.pm
....

 

Share this post


Link to post
Share on other sites
4 минуты назад, zyxmon сказал:

Блин. Кто из нас с Вами знгаток по perl и должен решение искать. Проблема то локализована!

Ну если Вы меня знатоком считаете, то конечно спасибо, но это не совсем так. Я довольно плотно изучал (в качестве чистого хобби) С, С++, Perl, Linux и проч. Но это было более 10 лет назад. Последнее время я простой юзер. Знания, когда их не применяешь, забываются ...

Спасибо.

Share this post


Link to post
Share on other sites

Спасибо, все заработало :))

root@Keenetic_Extra:/opt/usr/local/etc/sqlite$ ./test.pl
Opened database successfully

Но если честно, я "оригинальный" DBI не ставил сначала, только из коробки perl-dbi. Потому хедеров и не было ...

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.


  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...