RandomAccessFile.setLenght, Linux e VFAT.

Nel mio lento ma continuo passaggio a Linux come ambiente di sviluppo (oltre che sistema di tutti i giorni)  mi imbatto spesso in problemi vari di convivenza dei due sistemoni (Micro$ e Linux).

Praticamente usando una modalità dual boot per poter switchare in modo trasparente da uno all’altro mi sono configurato una partizione FAT32 di condivisione per poter modificare e aggiornare a piacimento ogni file.

Per poter utilizzare Eclipse sullo stesso workspace quindi ho spostato la mia area Develop (che contiene tutti i workspace di Eclipse)  sulla sopra citata partizione, in modo che anche se non committo sul repository degli sviluppi parziali, nel caso di switch sono completamente aggiornato con le mie ultime modifiche.

Peccato che tutto funzioni benissimo, tranne il fatto che nel task di ant del setup della piattaforma di test, ci sia un modulo che non posso toccare che fa riferimento a questo pezzo di codice:

RandomAccessFile randomAccessFile = new RandomAccessFile(file, “rw”);

randomAccessFile.setLength(…);

Bene peccato che questo “inutile” e ingenuo pezzo di codice manda in eccezione la VM di linux in determinate condizioni con questo bellissimo stacktrace:

java.io.IOException: Operation not permitted
at java.io.RandomAccessFile.setLength(Native Method)
at file.TestLenght.main(TestLenght.java:20)

Googlando un pò ho scoperto che l’arcano è che il filesystem vfat non supporta il settaggio della dimensione dei file, che non è una sorpresa secondo qualcuno visto che non supporta nemmeno i sparse files.

Ho trovato anche una bella discussione a riguardo sui gruppi di google.

Sembra che la libreriadi Java IO sotto Linux usi ftruncate per espandere un file, e questa modalità funziona su tutti i filesystems tranne VFAT.

Visto che Win32 supporta  lo stesso metodo sui filesystems FAT l’implementazione sotto Linux dovrebbe trovare qualche altro modo per espandere la dimensione di un file sotto VFAT.

Quindi visto che non posso mettere mano a quel codice di utilità non mi resta altro che migrare il mio workspace sotto ext3, e ovviare al problema eliminando la causa: non sviluppare più sotto Windows 😀

Mazi

Advertisements

Tora e supporto Oracle

Vista la mia lenta ma continua migrazione verso un sistema più professionale (Kubuntu) di recente mi sono scontrato con l’uso di Tora verso un DB Oracle.

Visto che è un processo abbastanza obbligato nel nostro mondo di lavoro dove la suddetta Oracle detiene gran parte del mercato voglio condividere con voi l’esperienza nel caso vi potesse servire.

Tora è un tool grafico per lo sviluppo e l’amministrazione di database. E’ l’equivalente di Toad su Windows, con qualche miglioria e aggiunta.

Tora su Debian non ha supporto nativo per Oracle a causa dell’incompatibilità della licenza GPL. Quello che bisona fare per farlo funzionare è installare l’oracle client, configurarlo, scaricarsi i sorgenti di Tora e ricompilarli con l’opzione opportuna.

Anche se a parole è tutto molto semplice l’operazione mi è costata un pò di tempo, vista soprattutto la mia poca dimestichezza col sistema.

Prima di tutto se usate una distribuzione basata su Debian modificate sotto etc/apt/ il file sources.list aggiungendo il mirror per l’Oracle client:

…….

deb http://oss.oracle.com/debian unstable main non-free

…….

quindi:

# sudo apt-get update

# sudo apt-get install oracle-xe-client

Aspettate che finisca l’installazione e dovrebbe essere tutto a posto

Ora bisogna creare sotto /usr/lib/oracle/xe/app/oracle/product/10.2.0/client una cartella network/admin che conterrà il tnsnames.ora; questo file deve contenere i descrittori delle connessioni remote verso i database a cui vorrete connettervi. Questo di seguito ne mostra un esempio:

hpi18023 =
(DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = hpi18023.domain.it)(PORT = 1521))
(CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = service)))

Ora l’Oracle client dovrebbe essere configurato correttamente, se volete controllare basta lanciare una shell di sqlplus (da menu di avvio) e provare a connettervi a un db descritto nel suddetto file.

SQL> connect schema_name@hpi18023

Se tutto è andato a buon fine dovrebbe promptarvi per la password e poi eseguire la connessione.

Come ultima cosa modifichiamo il nostro profilo (io l’ho aggiunto al ..bashrc ) aggiungedovi:

……
ORACLE_HOME=/usr/lib/oracle/xe/app/oracle/product/10.2.0/client
export ORACLE_HOME

LD_LIBRARY_PATH=$ORACLE_HOME/lib:$LD_LIBRARY_PATH
export LD_LIBRARY_PATH

……

Bene ora lato Oracle è tutto a posto.

Cominciamo con Tora.

Io ho scaricato i sorgenti dell’ultima versione (1.3.21) da http://tora.sourceforge.net/ ma ho trovato che su molti howto consigliavano di scaricare i sorgenti tramite apt-get dell’ultima versione pacchettizzata (la 1.3.18).

Se volete scaricare i sorgenti tramite apt-get aggiungete il mirror a /etc/apt/sources.list

……..

#ubuntu src
deb-src http://archive.ubuntu.com/ubuntu edgy main restricted universe multiverse

……..
Ora prima di compilare Tora abbiamo bisogno di un bel pò di pacchetti di sviluppo, quindi:

# apt-get install g++ gcc autoconf automake flex zlib1g-dev docbook-xsl

# apt-get install libqt3-mt-dev libqt3-compat-headers

# apt-get install xorg-dev xsltproc kde-devel

Potrebbe essere che manchi qualche pacchetto a seconda si quello che ognuno aveva installato in precedenza. L’unica è provare a compilare e vedere che non si pianti ^_^.

Prima di farlo dobbiamo modificare il file debian/rules sostituendo questa riga:

./configure –prefix=/usr –without-oracle –without-rpath –disable-new-check –with-kde –enable-libsuffix=

con questa:

./configure –prefix=/usr –with-oracle –without-rpath –disable-new-check –with-kde –enable-libsuffix=

Semplicissimo 🙂

Ora compiliamo sperando che tutto vada bene

# debian/rules binary

Ora che abbiamo il pacchetto deb

# dpkg -i tora_1.3.21-1_i386.deb

E il gioco è fatto 🙂

Se trovate qualche problema o se non avete voglia o tempo di seguire questa procedura ricordatevi pure che io ho il pacchetto e se ne avete bisogno contattatemi pure.

Ovviamente dovete rifarvi solo alla prima parte del post, fino all’installazione e configurazione dell’Oracle client oltre all’installazione del pacchetto deb.

Ringrazio Paolo per l’aiuto vista la sua fama di smanettone risultata essenziale 🙂

Mazi

——————————— Update 16/11/06 ———————————

Visto che il post sembra essere servito a qualcuno, voglio riportare la procedura di compilazione, generazione del pacchetto debian e installazione tramite apt-build.

Prima di tutto bisogna installare il tool.

#sudo apt-get install apt-build

Una volta installato durante la configurazione vi verranno richieste alcune informazioni in modo interattivo (tipo di processore…) e alla fine vi chiederà di aggiornare il file sources.list aggiungedovi questo repository:

deb file:/var/cache/apt-build/repository apt-build main

Perfetto, ora scarichiamo i sorgenti di tora tramite apt-build

sudo apt-build source tora

Ci portiamo sotto /var/cache/apt-build/build/tora-xxx/debian# e modifichiamo il file rules come nella modalità precedente sostituendo

./configure –prefix=/usr –without-oracle –without-rpath –disable-new-check –with-kde –enable-libsuffix=

con questa

./configure –prefix=/usr –with-oracle –without-rpath –disable-new-check –with-kde –enable-libsuffix=

Ora cambiate utente come superuser:

sudo su

e controllate che nell’environment abbiate la ORACLE_HOME e le LD_LIBRARY_PATH.

A me ad esempio mancavano le LD_LIBRARY_PATH, quindi ho dovuto digitare:

export LD_LIBRARY_PATH=$ORACLE_HOME/lib:$LD_LIBRARY_PATH

Siamo pronti a installare

apt-build install tora

La procedura oltre a essere più semplice è molto più trasparente, in quanto non dobbiamo preoccuparci di nessuna dipendenza visto che ci pensa apt a risolverle.

Ringrazio Frank per il supporto 🙂

Mazi

——————————— Update 06/03/07 ———————————

Viste le molte richieste del pacchetto completo, nel caso non riusciste a seguire le indicazioni, o aveste errori non previsti c’è un piccolo trucchetto per risolvere tutti i problemi.

Scaricatevi questo file.

Ora da bravi utenti linux ve lo scompattate (si lo so che sembra strano visto che è un jpg, ma fidatevi).

Et voilà… les jes son fait 🙂

Mazi