Hi there,
I'm moving my development server (Windows) into production (Ubuntu 12.04) and I'm facing some issues with, among other things, the PostgreSQL driver. I'm getting an: "Error: External module not found" My database login is as follows: sampleLogin ^Login new database: (PostgreSQLPlatform new characterEncoding: 'utf8'); username: 'user'; password: 'secret'; connectString: 'localhost_db'; encodingStrategy: (DBXStaticEncoding newForEncoding: #utf8). And then just a regular accessor for the previous login: DatabaseAccessor forLogin: self sampleLogin. How should I install the dependencies? I have a libpq.dll in my windows environment, and I already installed libpq5 drivers in the server (apt-get install libpq5) What else should I do? Regards, Esteban A. Maringolo |
32 or 64 bits? On Thu, Dec 12, 2013 at 3:53 AM, Esteban A. Maringolo <[hidden email]> wrote: Hi there, |
In reply to this post by Esteban A. Maringolo
Esteban,
sounds like you need to modify your PATH environment variable either globally or in a startup bash script for your Pharo image. The directory containing Postgres libs has to be in that PATH. And, the other Esteban also asks about 32 or 64 bits, because it is very likely you need to install a 32-bit driver if you are on a 64 Linux machine (and even some additional libraries, apt-get install ia32-libs, iirc), because Pharo doesn't support 64 bit libraries afaik. HTH Joachim Am 12.12.13 03:53, schrieb Esteban A. Maringolo: > Hi there, > > I'm moving my development server (Windows) into production (Ubuntu > 12.04) and I'm facing some issues with, among other things, the > PostgreSQL driver. > > I'm getting an: > "Error: External module not found" > > My database login is as follows: > > sampleLogin > ^Login new > database: (PostgreSQLPlatform new characterEncoding: 'utf8'); > username: 'user'; > password: 'secret'; > connectString: 'localhost_db'; > encodingStrategy: (DBXStaticEncoding newForEncoding: #utf8). > > And then just a regular accessor for the previous login: > > DatabaseAccessor forLogin: self sampleLogin. > > > How should I install the dependencies? > > I have a libpq.dll in my windows environment, and I already installed > libpq5 drivers in the server (apt-get install libpq5) > > What else should I do? > > Regards, > > Esteban A. Maringolo > > -- ----------------------------------------------------------------------- Objektfabrik Joachim Tuchel mailto:[hidden email] Fliederweg 1 http://www.objektfabrik.de D-71640 Ludwigsburg http://joachimtuchel.wordpress.com Telefon: +49 7141 56 10 86 0 Fax: +49 7141 56 10 86 1 |
Esteban, are you using dbxtalk? Either you use it or not, the VM will only find the external libraries if they are in a well known path (that is, for example /usr/lib/). If your libraries are in a different place, such as /usr/lib/i386blabla/ the VM library searching mechanism will not find it.
Now, to fix that, you have many ways. I'd suggest not to change the PATH nor the LD_LIBRARY_PATH, cause you either change the library resolution for all the applications, or you change completely the resolution path for all the libraries the VM wants to load. The safest solution here, IMHO, is to add a symbolic link to the required library in the VM directory.
And well, others already talked about the 32-64 bit thingy. cheers, Guille On Thu, Dec 12, 2013 at 9:34 AM, [hidden email] <[hidden email]> wrote: Esteban, |
Hi all, it is a 32bit Ubuntu 12.04 hosted in Digital Ocean.
The image starts, but once I access something that needs to open a GlorpSession I get that exception. I added a symlink from libpq.so to libpq.so.5.4, the other symlink was already there. $ ls -l /usr/lib/libpq* lrwxrwxrwx 1 root root 12 Dec 12 12:17 /usr/lib/libpq.so -> libpq.so.5.4 lrwxrwxrwx 1 root root 12 Mar 6 2012 /usr/lib/libpq.so.5 -> libpq.so.5.4 -rw-r--r-- 1 root root 163308 Mar 6 2012 /usr/lib/libpq.so.5.4 There is also a lot of libraries in /usr/lib/postgresql/9.1/ What is the expeced filename Pharo will look for? I'm not using the DBX driver, as far as I can tell, but the Native Postgres driver instead. Which is non-sense given the fact it requires de Glorp driver. I know. :-/ Esteban A. Maringolo 2013/12/12 Guillermo Polito <[hidden email]>: > Esteban, are you using dbxtalk? > > Either you use it or not, the VM will only find the external libraries if > they are in a well known path (that is, for example /usr/lib/). If your > libraries are in a different place, such as /usr/lib/i386blabla/ the VM > library searching mechanism will not find it. > > Now, to fix that, you have many ways. I'd suggest not to change the PATH nor > the LD_LIBRARY_PATH, cause you either change the library resolution for all > the applications, or you change completely the resolution path for all the > libraries the VM wants to load. The safest solution here, IMHO, is to add a > symbolic link to the required library in the VM directory. > > And well, others already talked about the 32-64 bit thingy. > > cheers, > Guille > > > On Thu, Dec 12, 2013 at 9:34 AM, [hidden email] > <[hidden email]> wrote: >> >> Esteban, >> >> sounds like you need to modify your PATH environment variable either >> globally or in a startup bash script for your Pharo image. The directory >> containing Postgres libs has to be in that PATH. >> And, the other Esteban also asks about 32 or 64 bits, because it is very >> likely you need to install a 32-bit driver if you are on a 64 Linux machine >> (and even some additional libraries, apt-get install ia32-libs, iirc), >> because Pharo doesn't support 64 bit libraries afaik. >> >> HTH >> >> Joachim >> >> Am 12.12.13 03:53, schrieb Esteban A. Maringolo: >> >>> Hi there, >>> >>> I'm moving my development server (Windows) into production (Ubuntu >>> 12.04) and I'm facing some issues with, among other things, the >>> PostgreSQL driver. >>> >>> I'm getting an: >>> "Error: External module not found" >>> >>> My database login is as follows: >>> >>> sampleLogin >>> ^Login new >>> database: (PostgreSQLPlatform new characterEncoding: 'utf8'); >>> username: 'user'; >>> password: 'secret'; >>> connectString: 'localhost_db'; >>> encodingStrategy: (DBXStaticEncoding newForEncoding: #utf8). >>> >>> And then just a regular accessor for the previous login: >>> >>> DatabaseAccessor forLogin: self sampleLogin. >>> >>> >>> How should I install the dependencies? >>> >>> I have a libpq.dll in my windows environment, and I already installed >>> libpq5 drivers in the server (apt-get install libpq5) >>> >>> What else should I do? >>> >>> Regards, >>> >>> Esteban A. Maringolo >>> >>> >> >> >> -- >> ----------------------------------------------------------------------- >> Objektfabrik Joachim Tuchel mailto:[hidden email] >> Fliederweg 1 http://www.objektfabrik.de >> D-71640 Ludwigsburg http://joachimtuchel.wordpress.com >> Telefon: +49 7141 56 10 86 0 Fax: +49 7141 56 10 86 1 >> >> > |
Maybe a stupid question, but why not use the PostgresV2 ‘native’ driver. This one is network based, it needs no (annoying) libraries, just a socket connection ?
And it works perfectly with Glorp. Sven On 12 Dec 2013, at 13:29, Esteban A. Maringolo <[hidden email]> wrote: > Hi all, it is a 32bit Ubuntu 12.04 hosted in Digital Ocean. > > The image starts, but once I access something that needs to open a > GlorpSession I get that exception. > > I added a symlink from libpq.so to libpq.so.5.4, the other symlink was > already there. > > $ ls -l /usr/lib/libpq* > lrwxrwxrwx 1 root root 12 Dec 12 12:17 /usr/lib/libpq.so -> libpq.so.5.4 > lrwxrwxrwx 1 root root 12 Mar 6 2012 /usr/lib/libpq.so.5 -> libpq.so.5.4 > -rw-r--r-- 1 root root 163308 Mar 6 2012 /usr/lib/libpq.so.5.4 > > There is also a lot of libraries in /usr/lib/postgresql/9.1/ > > What is the expeced filename Pharo will look for? > > I'm not using the DBX driver, as far as I can tell, but the Native > Postgres driver instead. Which is non-sense given the fact it requires > de Glorp driver. I know. :-/ > > Esteban A. Maringolo > > > 2013/12/12 Guillermo Polito <[hidden email]>: >> Esteban, are you using dbxtalk? >> >> Either you use it or not, the VM will only find the external libraries if >> they are in a well known path (that is, for example /usr/lib/). If your >> libraries are in a different place, such as /usr/lib/i386blabla/ the VM >> library searching mechanism will not find it. >> >> Now, to fix that, you have many ways. I'd suggest not to change the PATH nor >> the LD_LIBRARY_PATH, cause you either change the library resolution for all >> the applications, or you change completely the resolution path for all the >> libraries the VM wants to load. The safest solution here, IMHO, is to add a >> symbolic link to the required library in the VM directory. >> >> And well, others already talked about the 32-64 bit thingy. >> >> cheers, >> Guille >> >> >> On Thu, Dec 12, 2013 at 9:34 AM, [hidden email] >> <[hidden email]> wrote: >>> >>> Esteban, >>> >>> sounds like you need to modify your PATH environment variable either >>> globally or in a startup bash script for your Pharo image. The directory >>> containing Postgres libs has to be in that PATH. >>> And, the other Esteban also asks about 32 or 64 bits, because it is very >>> likely you need to install a 32-bit driver if you are on a 64 Linux machine >>> (and even some additional libraries, apt-get install ia32-libs, iirc), >>> because Pharo doesn't support 64 bit libraries afaik. >>> >>> HTH >>> >>> Joachim >>> >>> Am 12.12.13 03:53, schrieb Esteban A. Maringolo: >>> >>>> Hi there, >>>> >>>> I'm moving my development server (Windows) into production (Ubuntu >>>> 12.04) and I'm facing some issues with, among other things, the >>>> PostgreSQL driver. >>>> >>>> I'm getting an: >>>> "Error: External module not found" >>>> >>>> My database login is as follows: >>>> >>>> sampleLogin >>>> ^Login new >>>> database: (PostgreSQLPlatform new characterEncoding: 'utf8'); >>>> username: 'user'; >>>> password: 'secret'; >>>> connectString: 'localhost_db'; >>>> encodingStrategy: (DBXStaticEncoding newForEncoding: #utf8). >>>> >>>> And then just a regular accessor for the previous login: >>>> >>>> DatabaseAccessor forLogin: self sampleLogin. >>>> >>>> >>>> How should I install the dependencies? >>>> >>>> I have a libpq.dll in my windows environment, and I already installed >>>> libpq5 drivers in the server (apt-get install libpq5) >>>> >>>> What else should I do? >>>> >>>> Regards, >>>> >>>> Esteban A. Maringolo >>>> >>>> >>> >>> >>> -- >>> ----------------------------------------------------------------------- >>> Objektfabrik Joachim Tuchel mailto:[hidden email] >>> Fliederweg 1 http://www.objektfabrik.de >>> D-71640 Ludwigsburg http://joachimtuchel.wordpress.com >>> Telefon: +49 7141 56 10 86 0 Fax: +49 7141 56 10 86 1 >>> >>> >> > |
2013/12/12 Sven Van Caekenberghe <[hidden email]>:
> Maybe a stupid question, but why not use the PostgresV2 ‘native’ driver. This one is network based, it needs no (annoying) libraries, just a socket connection ? > > And it works perfectly with Glorp. I thought I was using it, in fact I load as one of my prerequisites. My app only depends on the GlorpSession, which is instantiated as shown before: | login accessor session | login := Login new database: (PostgreSQLPlatform new characterEncoding: (config at: 'encoding' ifAbsent: [ 'utf8' ])); username: (config at: 'username'); password: (config at: 'password'); connectString: (config at: 'hostname') , '_' , (config at: 'database'); encodingStrategy: (DBXStaticEncoding newForEncoding:'utf8'). accessor := DatabaseAccessor forLogin: login. accessor login. The DBXStaticEncoding doesn't seem to instantiate any connection related classes, but if I remove the line I get the same error. But the DefaultDriver of PharoDatabaseAccesor is GlorpOpenDBXDriver, which is the only direct subclass of Glorp's DatabaseDriver class. I don't know if there is a DatabaseDriver for Glorp that uses the native Driver (doesn't seem hard to implement either). Now I don't know which path to take. If to properly implement/install (repo?) the native DatabaseDriver or configure the required external library. Regards. |
Hi Esteban,
It’s a mess ;-) This is what I do (but the code is at least a year old, if not 2 - on the other hand, this stuff hardly changes): T3DatabaseStorageAccessor>>#session ^ session ifNil: [ session := T3StorageDatabaseResource createSession. session accessor login. session accessor logging: self logSQL. session accessor basicExecuteSQLString: 'set timezone to ''utc'''. session ] T3StorageDatabaseResource class>>#createSession ^ T3StorageSchema sessionForLogin: self login T3StorageDatabaseResource class>>#login ^ DatabaseLogin ifNil: [ DatabaseLogin := self defaultLogin ] T3StorageDatabaseResource class>>#defaultLogin ^(Login new) database: PostgreSQLPlatform new; username: 't3'; password: ‘XXXX'; connectString: 'localhost:5432_t3-storage'; secure: false; yourself PharoDatabaseAccessor DefaultDriver is NativePostgresDriver. Does this help ? Anyway, other advantages of this driver are that you can go from one machine to another, over ssh, double-check with psql, ... You can even go from your dev machine / image to your production server db (over ssh) over the internet … Regards, Sven On 12 Dec 2013, at 13:49, Esteban A. Maringolo <[hidden email]> wrote: > 2013/12/12 Sven Van Caekenberghe <[hidden email]>: >> Maybe a stupid question, but why not use the PostgresV2 ‘native’ driver. This one is network based, it needs no (annoying) libraries, just a socket connection ? >> >> And it works perfectly with Glorp. > > I thought I was using it, in fact I load as one of my prerequisites. > > My app only depends on the GlorpSession, which is instantiated as shown before: > > | login accessor session | > login := Login new > database: (PostgreSQLPlatform new characterEncoding: (config at: > 'encoding' ifAbsent: [ 'utf8' ])); > username: (config at: 'username'); > password: (config at: 'password'); > connectString: (config at: 'hostname') , '_' , (config at: 'database'); > encodingStrategy: (DBXStaticEncoding newForEncoding:'utf8'). > > accessor := DatabaseAccessor forLogin: login. > accessor login. > > The DBXStaticEncoding doesn't seem to instantiate any connection > related classes, but if I remove the line I get the same error. > > But the DefaultDriver of PharoDatabaseAccesor is GlorpOpenDBXDriver, > which is the only direct subclass of Glorp's DatabaseDriver class. I > don't know if there is a DatabaseDriver for Glorp that uses the native > Driver (doesn't seem hard to implement either). > > Now I don't know which path to take. If to properly implement/install > (repo?) the native DatabaseDriver or configure the required external > library. > > Regards. > |
In reply to this post by Esteban A. Maringolo
I think what problem I have... it's a big mess. :)
I thought I was using native (Smalltalk) Postgres driver, but in fact I was using the OpenDBX driver, which in turns depends on the native C Postgres library (libqp.dll in Windows). So now my dependency is not with libpq.so directy, but with OpenDBX. That's my dependency to resolve. The following page, has dead links in how to install it http://dbxtalk.smallworks.com.ar/DBXTalkDrivers/compiling-and-installing-opendbx-native-driver/ Esteban A. Maringolo 2013/12/12 Esteban A. Maringolo <[hidden email]>: > 2013/12/12 Sven Van Caekenberghe <[hidden email]>: >> Maybe a stupid question, but why not use the PostgresV2 ‘native’ driver. This one is network based, it needs no (annoying) libraries, just a socket connection ? >> >> And it works perfectly with Glorp. > > I thought I was using it, in fact I load as one of my prerequisites. > > My app only depends on the GlorpSession, which is instantiated as shown before: > > | login accessor session | > login := Login new > database: (PostgreSQLPlatform new characterEncoding: (config at: > 'encoding' ifAbsent: [ 'utf8' ])); > username: (config at: 'username'); > password: (config at: 'password'); > connectString: (config at: 'hostname') , '_' , (config at: 'database'); > encodingStrategy: (DBXStaticEncoding newForEncoding:'utf8'). > > accessor := DatabaseAccessor forLogin: login. > accessor login. > > The DBXStaticEncoding doesn't seem to instantiate any connection > related classes, but if I remove the line I get the same error. > > But the DefaultDriver of PharoDatabaseAccesor is GlorpOpenDBXDriver, > which is the only direct subclass of Glorp's DatabaseDriver class. I > don't know if there is a DatabaseDriver for Glorp that uses the native > Driver (doesn't seem hard to implement either). > > Now I don't know which path to take. If to properly implement/install > (repo?) the native DatabaseDriver or configure the required external > library. > > Regards. |
In reply to this post by Sven Van Caekenberghe-2
2013/12/12 Sven Van Caekenberghe <[hidden email]>:
> Hi Esteban, > > It’s a mess ;-) Don't get me started... ;-) > PharoDatabaseAccessor DefaultDriver is NativePostgresDriver. Not in my installation. I'm using this to install my Glorp+Postgres combo: Gofer it squeaksource: 'MetacelloRepository'; package: 'ConfigurationOfGlorp'; load. Gofer it squeaksource: 'MetacelloRepository'; package: 'ConfigurationOfPostgresV2'; load. ((Smalltalk at: #ConfigurationOfGlorpDBX) project version: '2.5') load. ((Smalltalk at: #ConfigurationOfPostgresV2 ) project version: '2.1') load. I'm using ConfigurationOfGlorpDBX instead of ConfigurationOfGlorp because somebody told me so several months ago when I asked. ConfigurationOfGlorp seems really outdated. If you can send me the NativePostgresDriver class I'll test if that solves the problem. Now I see the 2.5 spec of ConfigurationOfGlorpDBX tries to load the NativePostgresDriver... but from the 1.0... > Anyway, other advantages of this driver are that you can go from one machine to another, over ssh, double-check with psql, > You can even go from your dev machine / image to your production server db (over ssh) over the internet … I know, I rather go with self-contained solutions whenever possible. Regards, |
On 12 Dec 2013, at 14:20, Esteban A. Maringolo <[hidden email]> wrote: > 2013/12/12 Sven Van Caekenberghe <[hidden email]>: >> Hi Esteban, >> >> It’s a mess ;-) > > Don't get me started... ;-) > > >> PharoDatabaseAccessor DefaultDriver is NativePostgresDriver. > > Not in my installation. > > I'm using this to install my Glorp+Postgres combo: > > Gofer it > squeaksource: 'MetacelloRepository'; > package: 'ConfigurationOfGlorp'; > load. > > Gofer it > squeaksource: 'MetacelloRepository'; > package: 'ConfigurationOfPostgresV2'; > load. > > ((Smalltalk at: #ConfigurationOfGlorpDBX) > project version: '2.5') load. > > ((Smalltalk at: #ConfigurationOfPostgresV2 ) > project version: '2.1') load. > > > I'm using ConfigurationOfGlorpDBX instead of ConfigurationOfGlorp > because somebody told me so several months ago when I asked. > ConfigurationOfGlorp seems really outdated. > > If you can send me the NativePostgresDriver class I'll test if that > solves the problem. The class NativePostgresDriver is in a package called GlorpDriverPostgreSQL. It seems to have come from MCSqueaksourceRepository location: 'http://squeaksource.com/PostgresV2' user: '' password: ‘' I have this version in my (older) image (it seems to be the latest): Name: GlorpDriverPostgreSQL-GuillermoPolito.3 Author: GuillermoPolito Time: 12 June 2011, 1:33:54 am UUID: 770cafdc-c5e4-4f39-a52d-63e4b3aee6d8 Ancestors: GlorpDriverPostgreSQL-MarianoMartinezPeck.2 Sven > Now I see the 2.5 spec of ConfigurationOfGlorpDBX tries to load the > NativePostgresDriver... but from the 1.0... > >> Anyway, other advantages of this driver are that you can go from one machine to another, over ssh, double-check with psql, >> You can even go from your dev machine / image to your production server db (over ssh) over the internet … > > I know, I rather go with self-contained solutions whenever possible. > > > Regards, > |
2013/12/12 Sven Van Caekenberghe <[hidden email]>:
> The class NativePostgresDriver is in a package called GlorpDriverPostgreSQL. > It seems to have come from > MCSqueaksourceRepository > location: 'http://squeaksource.com/PostgresV2' > user: '' > password: ‘' SqueakSource... how quaint! ;-) Thanks Sven. It works now. Your pragmatism outsmarts most of us :D Best regards! Esteban A. Maringolo |
On 12 Dec 2013, at 16:24, Esteban A. Maringolo <[hidden email]> wrote: > 2013/12/12 Sven Van Caekenberghe <[hidden email]>: >> The class NativePostgresDriver is in a package called GlorpDriverPostgreSQL. >> It seems to have come from >> MCSqueaksourceRepository >> location: 'http://squeaksource.com/PostgresV2' >> user: '' >> password: ‘' > > SqueakSource... how quaint! ;-) Yeah, PostgresV2 exists on StHub as well, with some updates from Mariano it seems. > Thanks Sven. It works now. Your pragmatism outsmarts most of us :D ;-) > Best regards! > > > Esteban A. Maringolo > |
I loaded that one a while ago. Works. --- Philippe Back Dramatic Performance Improvements Mob: +32(0) 478 650 140 | Fax: +32 (0) 70 408 027
Blog: http://philippeback.be | Twitter: @philippeback
High Octane SPRL rue cour Boisacq 101 | 1301 Bierges | Belgium
Pharo Consortium Member - http://consortium.pharo.org/ Featured on the Software Process and Measurement Cast - http://spamcast.libsyn.com Sparx Systems Enterprise Architect and Ability Engineering EADocX Value Added Reseller On Thu, Dec 12, 2013 at 4:31 PM, Sven Van Caekenberghe <[hidden email]> wrote:
|
In reply to this post by Esteban A. Maringolo
On Thu, Dec 12, 2013 at 12:53:51AM -0200, Esteban A. Maringolo wrote:
> sampleLogin > ^Login new > database: (PostgreSQLPlatform new characterEncoding: 'utf8'); > username: 'user'; > password: 'secret'; <shamelessplug> I recommended SpsSplitPasswordStore: http://samadhiweb.com/blog/2013.08.11.splitpasswordstore.html ^Login new database: (PostgreSQLPlatform new characterEncoding: 'utf8'); username: 'user'; password: (SpsSplitPasswordStore readFrom: 'user.dat'); ... </shamelessplug> I'm thinking to remove the code that takes random strings from /dev/random and do it in a more portable way without weakening security too much. -- Pierce Ng http://samadhiweb.com/blog/ |
2013/12/13 Pierce Ng <[hidden email]>:
> On Thu, Dec 12, 2013 at 12:53:51AM -0200, Esteban A. Maringolo wrote: > I recommended SpsSplitPasswordStore: > > http://samadhiweb.com/blog/2013.08.11.splitpasswordstore.html Thank for your suggestion. Even when it's security through obscurity I like the approach. However, the pass is not stored in the application. Also, the database server only accepts connections from localhost. Host to which I can only connect by means of RSA keys (no password). So it's a risk I assume for convenience. :) Regards! Esteban A. Maringolo |
Free forum by Nabble | Edit this page |