Note: This is a beta release of Red Hat Bugzilla 5.0. The data contained within is a snapshot of the live data so any changes you make will not be reflected in the production Bugzilla. Also email is disabled so feel free to test any aspect of the site that you want. File any problems you find or give feedback here.
Bug 1768 - Perl DB lib is not opening DB files.
Summary: Perl DB lib is not opening DB files.
Keywords:
Status: CLOSED DUPLICATE of bug 1581
Alias: None
Product: Red Hat Linux
Classification: Retired
Component: perl
Version: 6.0
Hardware: i386
OS: Linux
medium
high
Target Milestone: ---
Assignee: Crutcher Dunnavant
QA Contact:
URL:
Whiteboard:
Depends On:
Blocks:
TreeView+ depends on / blocked
 
Reported: 1999-03-24 23:44 UTC by Wil Harris
Modified: 2008-05-01 15:37 UTC (History)
2 users (show)

Fixed In Version:
Doc Type: Bug Fix
Doc Text:
Clone Of:
Environment:
Last Closed: 1999-04-01 05:56:57 UTC


Attachments (Terms of Use)

Description Wil Harris 1999-03-24 23:44:45 UTC
perl Script that works in 5.2 no longer works in 5.9,
getting errors opening db files, debug output is below. If
more is needed, let me know.

  DB<1> main::(./foetus:97):    close PASS;
  DB<1> main::(./foetus:100):
$stuff=tie(%stuff,'DB_File',"$dbfile",O_CREAT|O_RDWR,0664,$DB_HASH)
|| die "Error: Can't open dbfile: $dbfile\n";
  DB<1>
Fcntl::AUTOLOAD(/usr/lib/perl5/5.00502/i386-linux/Fcntl.pm:118):
118:        (my $constname = $AUTOLOAD) =~ s/.*:://;
  DB<1>
Fcntl::AUTOLOAD(/usr/lib/perl5/5.00502/i386-linux/Fcntl.pm:119):
119:        my $val = constant($constname, 0);
  DB<1>
Fcntl::AUTOLOAD(/usr/lib/perl5/5.00502/i386-linux/Fcntl.pm:120):
120:        if ($! != 0) {
  DB<1>
Fcntl::AUTOLOAD(/usr/lib/perl5/5.00502/i386-linux/Fcntl.pm:131):
131:        *$AUTOLOAD = sub { $val };
  DB<1>
Fcntl::AUTOLOAD(/usr/lib/perl5/5.00502/i386-linux/Fcntl.pm:132):
132:        goto &$AUTOLOAD;
  DB<1>
Fcntl::__ANON__(/usr/lib/perl5/5.00502/i386-linux/Fcntl.pm:131):
131:        *$AUTOLOAD = sub { $val };
  DB<1>
Fcntl::AUTOLOAD(/usr/lib/perl5/5.00502/i386-linux/Fcntl.pm:118):
118:        (my $constname = $AUTOLOAD) =~ s/.*:://;
  DB<1>
Fcntl::AUTOLOAD(/usr/lib/perl5/5.00502/i386-linux/Fcntl.pm:119):
119:        my $val = constant($constname, 0);
  DB<1>
Fcntl::AUTOLOAD(/usr/lib/perl5/5.00502/i386-linux/Fcntl.pm:120):
120:        if ($! != 0) {
  DB<1>
Fcntl::AUTOLOAD(/usr/lib/perl5/5.00502/i386-linux/Fcntl.pm:131):
131:        *$AUTOLOAD = sub { $val };
  DB<1>
Fcntl::AUTOLOAD(/usr/lib/perl5/5.00502/i386-linux/Fcntl.pm:132):
132:        goto &$AUTOLOAD;
  DB<1>
Fcntl::__ANON__(/usr/lib/perl5/5.00502/i386-linux/Fcntl.pm:131):
131:        *$AUTOLOAD = sub { $val };
  DB<1>
DB_File::TIEHASH(/usr/lib/perl5/5.00502/i386-linux/DB_File.pm:260):
260:        tie_hash_or_array(@_) ;
  DB<1>
DB_File::tie_hash_or_array(/usr/lib/perl5/5.00502/i386-linux/DB_File.pm:241):
241:        my (@arg) = @_ ;
  DB<1>
DB_File::tie_hash_or_array(/usr/lib/perl5/5.00502/i386-linux/DB_File.pm:242):
242:        my $tieHASH = ( (caller(1))[3] =~ /TIEHASH/ ) ;
  DB<1>
DB_File::tie_hash_or_array(/usr/lib/perl5/5.00502/i386-linux/DB_File.pm:245):
245:            if @arg >= 5 && ref $arg[4] && $arg[4] =~
/=HASH/ && tied %{ $arg[4] } ;
  DB<1>
DB_File::tie_hash_or_array(/usr/lib/perl5/5.00502/i386-linux/DB_File.pm:244):
244:        $arg[4] = tied %{ $arg[4] }
  DB<1>
DB_File::tie_hash_or_array(/usr/lib/perl5/5.00502/i386-linux/DB_File.pm:244):
244:        $arg[4] = tied %{ $arg[4] }
  DB<1>
DB_File::tie_hash_or_array(/usr/lib/perl5/5.00502/i386-linux/DB_File.pm:248):
248:        if ($db_version > 1 and defined $arg[4] and
$arg[4] =~ /RECNO/ and
249:            $arg[1] and ! -e $arg[1]) {
  DB<1>
DB_File::tie_hash_or_array(/usr/lib/perl5/5.00502/i386-linux/DB_File.pm:255):
255:        DoTie_($tieHASH, @arg) ;
  DB<1> Error: Can't open dbfile: stuff.db

Comment 1 Preston Brown 1999-03-30 21:42:59 UTC
Cristian, I think this relates to bug #1581 rather strongly.

Comment 2 Cristian Gafton 1999-04-01 05:56:59 UTC
*** This bug has been marked as a duplicate of 1581 ***

Comment 3 deh-redhat 1999-05-13 15:45:59 UTC
Despite the appearance that both bugs have to do with perl and
database connectivity, they are probably not related. Bug 1581 has
to do with AnyDBM_File, and bug 1768 has to do with DB_File; these
are different things and use different underlying C routines.

Bug 1768's actual origin is that libdb has changed from db1 to db2
in RedHat 6.0. Notice that perl is looking for libdb, not libdb1:

deh% ldd perl
        libnsl.so.1 => /lib/libnsl.so.1 (0x40019000)
        libdb.so.3 => /lib/libdb.so.3 (0x4002e000)
                      ^^^^^^^^^^^^^^^
        libgdbm.so.2 => /usr/lib/libgdbm.so.2 (0x40068000)
        libdl.so.2 => /lib/libdl.so.2 (0x4006f000)
        libm.so.6 => /lib/libm.so.6 (0x40072000)
        libc.so.6 => /lib/libc.so.6 (0x4008e000)
        libcrypt.so.1 => /lib/libcrypt.so.1 (0x4017c000)
        /lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x40000000)
deh% ls -al /lib/libdb.so.3
lrwxrwxrwx   1 root     root           14 May 12 00:26
/lib/libdb.so.3 -> libdb-2.1.1.so
                   ^^^^^^^^^^^^^^
deh% ls -al /lib/libdb.so.2
lrwxrwxrwx   1 root     root           15 May 12 00:26
/lib/libdb.so.2 -> libdb1-2.1.1.so

Indeed, there is a patch in perl-5.00503-2.src.rpm which attempts to
deal with this:
...
+# Glibc 2.1 comes with db2. If we link against that then databases
created
+# with the older perl (linked with db1) will not be readable by this
+# new perl. So we disable normal "db" and force in the link of db1.
+set `echo X "$libswanted "| sed -e 's/ db / db1 /'`
...

I notice that perl5.005_03/ext/DB_File/Makefile.PL wasn't referenced
in the patch, but contains the following line:
my $LIB = "-ldb" ;


Note You need to log in before you can comment on or make changes to this bug.