Hamacker’s Palace

14 de Abril de 2008

Wine : Borland Delphi 6

Arquivado em: Banco de dados, GNU/Linux, ubuntu — hamacker @ 17:06

Atenção : Este artigo tem nível de dificuldade intermediário e é recomendado apenas para programadores mais experientes com Linux.

As vezes somos forçados a usar ferramentas já consideradas legadas para dar algum tipo de manutenção e sobrevida à eles. Quando você tem tais ferramentas consideradas legadas instaladas no seu computador então não há problemas, mas e quando não as tem e elas não são compatíveis com o sistema operacional em uso ? A única solução que realmente atende essa solução chama-se virtualização. Virtualização é um conceito bastante oportuno e prático, no entanto, há também a opção "B" que estava em oculto, a utilização do WINE no ambiente Linux. O wine é capaz em algumas oportunidade - não são todas - de criar um ambiente hospedeiro que possa tornar compátiveis nosso sistema Linux com ambientes Win95, Win98, WinMe, Win2000, WinXP e WinVista. Para demonstrar a utilização dum sistema como esse, vou praticar um passo-a-passo como de custume para criar um ambiente Wine simulando um Windows 98 que é compátivel com uma das ferramentas de programação mais conhecidas, o Delphi - neste artigo o Delphi 6 com conectividade com o banco de dados MSSQL 6.5 (legado).

Muitas vezes instalar um ambiente WINE é fácil, mas há ambiente mais complexos, por exemplo, neste artigo farei a instalação do WINE + Delphi 6 + MSSQL Client numa partição separada do ~/.wine comum, isto permitirá que o que fizer para fazer o Delphi6 funcionar não interfira nos demais aplicativos e também o inverso, isto é, que outros aplicativos instalados no WINE não interfiram na minha instalação WINE. Estou usando neste artigo Ubuntu Gutsy(7.10) e WINE versão 0.9.59.

Passo 1) Instalando o WINE

cd /tmp

wget http://wine.budgetdedicated.com/apt/387EE263.gpg

sudo apt-key add 387EE263.gpg

sudo wget http://wine.budgetdedicated.com/apt/sources.list.d/gutsy.list -O /etc/apt/sources.list.d/winehq.list

sudo apt-get update

Agora há duas opções : instalar ou atualizar o WINE.

Se já tiver o wine instalado :
sudo apt-get -y upgrade

Se não tiver o wine instalado :
sudo apt-get -y install wine

Passo 2) Criando um diretório para armazenar nossa instalação :

Eu vou utilizar $HOME para referir-se a pasta pessoal de cada usuário, se a pessoa chamar-se “fulano”, a pasta WINE será /home/fulano/delphi6. Isso é apenas um exemplo e voce pode modificar se achar necessário. Execute no terminal :

cd
mkdir /home/$USER/delphi6
export WINEPREFIX="/home/$USER/delphi6"
wineprefixcreate

A variável WINEPREFIX faz um particionamento do WINE, isto é, da sua criação em diante, o WINE achará que seus aplicativos e suas configurações estarão armazenadas na pasta especificada por $WINEPREFIX.

Crie também estes diretórios : (mais tarde eu explico)

mkdir /home/$USER/delphi6/drive_c/desktop
mkdir /home/$USER/delphi6/drive_c/meus_documentos
mkdir /home/$USER/delphi6/drive_c/imagens
mkdir /home/$USER/delphi6/drive_c/musicas
mkdir /home/$USER/delphi6/drive_c/videos
mkdir /home/$USER/delphi6/drive_c/temp

Se por alguma razão, voce interromper a execução desse artigo ou for obrigado a abrir um novo terminal, lembre-se de executar :

export WINEPREFIX="/home/$USER/delphi6"

Antes de executar os novos procedimentos, isto avisará o WINE para reutilizar o que criamos.

Passo 3) Configurando o WINE :

Execute no terminal :

winecfg

Nesse instante um aplicativo gráfico trará os principais parametros do WINE para o qual voce queira ajustar. Iremos ajustar alguns parâmetros :

Na guia “Applications” configure o campo “Windows Version” de “Windows XP” para “Windows 98″.

Isso é requerido porque nosso aplicativo Delphi6 só é compátivel com o Win98, poderia até rodar em versões posteriores do Windows, mas nesse caso, no meu exemplo, o Delphi6 só roda no Win98.

Na guia “Graphics” deixe marcado o checkbox “Allow the window manager to control the windows”.

Isso fará com que o tema que voce tem instalado possa manipular as janelas dos aplicativos WINE.

Na guia “Desktop Integration” existe uma área chamada de “Shell Folder”, nela você precisará configurar alguns caminhos :
“Area de Trabalho” para “/home/$USER/delphi6/drive_c/desktop”
“Meus documentos” para “/home/$USER/delphi6/drive_c/meus_documentos”
“Minhas imagens” para “/home/$USER/delphi6/drive_c/imagens”
“Minhas musicas” para “/home/$USER/delphi6/drive_c/musicas”
“Meus Videos” para “/home/$USER/delphi6/drive_c/videos”

Foi para isso que no passo 2 voce criou as pastas que eu explicaria mais tarde.

Alerta : Alguns mais experientes com o WINE já estariam tentados a incluir DLLs nativas, por gentileza, não façam isso.

Feche o winecfg e a seguir execute no terminal :

wine regedit

Isso abrirá um aplicativo muito conhecido no mundo Windows, o regedit. Precisaremos modificar algumas váriaveis.  Localize a chave “HKEY_CURRENT_USER\Control Panel\International” e mude o valor em sShortDate de “d/M/yyyy” para “dd/MM/yyyy”. Acredite, isso é importante.

Ainda no regedit, localize a chave “HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Session Manager\Environment” e mude seu conteúdo atual que provavelmente é :

C:\windows\system32;C:\windows

Para :

C:\windows\system32;C:\windows;c:\Arquivos de programas\Borland\Delphi6\Bin;c:\Arquivos de programas\Borland\Delphi6\Projects\Bpl;c:\mssql\binn

Essa variável é o “caminho de busca” do Windows, você incluiu alí os caminhos dos binários do Delphi e do cliente MSSQL.
Pronto, pode fechar o regedit.

Em versões posteriores do Ubuntu, não sei porque razão, alguns aplicativos deixam de ser executados com a seguinte mensagem de erro :

winevdm: unable to exec ‘C:\caminho\aplicativo.exe’: DOS memory range unavailable

Não sei porque acontece isso, mas sei a solução, execute no terminal :

sudo sysctl -w vm.mmap_min_addr=0

Agora nosso WINE parece estar razoavelmente configurado e pronto para prosseguir.

Passo 4) Paranóia de segurança :

Elimine o arquivo “/home/$USER/delphi6/dosdevices/z:”, execute :

rm -f  "/home/$USER/delphi6/dosdevices/z:"

A unidade Z: usada pelo WINE dá livre acesso ao seu disco desde a partição raíz (/). Eu considero isso uma falha na segurança grave, talvez seja paranóia minha, mas os aplicativos sob WINE não deveriam enxergar amplitudes maiores do que realmente está programado para fazer.

Passo 5) Criando letra de drive D: para o CDROM no WINE

Assim que um cdrom é inserido e seu conteúdo é exibido pelo GNOME, o WINE cria automáticamente o drive D: apontando para essa unidade. No entanto, as vezes o WINE é  configurado de maneiras diferentes e as vezes essa letra de drive pode não ser criada automática. Para os casos onde D: não foi criado automáticamente voce pode executar no terminal :

ln -s /media/cdrom "/home/$USER/delphi6/dosdevices/d:"

Voce criou um D:  apontando diretamente para o CDROM.

A partir desse instante voce vai ter que inserir o cdrom de instalação do Delphi. Se voce não tem o Delphi em CDROM, mas sim uma cópia de seus arquivos então use o comando acima para ao ínves de D: apontar para o CDROM então apontar para esses arquivos.

Passo 6) Instalando o Microsoft Installer

Benvindo a nossa primeira é única biblioteca nativa. O WINE inclui um fake MSI, isto é, um MSI falso porém funcional para a maioria dos aplicativos, mas existem vezes que surgem aplicativos que se comportam de maneira diferente no fake-msi, o Delphi 6 é um deles. Sem o Microsoft Installer incluso no WINE voce não conseguirá passar da tela de digitação do serial key. Execute os seguintes procedimentos :

Acesse o cdrom do seu Delphi, pois o Microsoft Installer (instmsia.exe) está incluído. Se não estiver, Vá até a página :

http://www.microsoft.com/downloads/details.aspx?familyid=CEBBACD8-C094-4255-B702-DE3BB768148F&displaylang=en

e baixe o programa “instmsia.exe” salvando-o em /home/$USER/delphi6/drive_c/temp

Agora acesse a pasta onde esta o “instmsia.exe”, se foi da internet :

cd /home/$USER/delphi6/drive_c/temp

ou se vai ser do cdrom do Delphi6 :

cd /media/cdrom

E execute-o :

wine ./instmsia.exe

Quando surgir a mensagem :
“Instalação concluída com exito”  ou  “Successfully registered dll L”C:\\windows\\system32\\msi.dll”"

Então a instalação ocorreu conforme era esperado.

Se não aparecer nenhuma mensagem, preocupe-se!, pois provavelmente os passos adiante não funcionarão.

O próximo passo é indicar ao WINE que desejamos usar o MSI nativo e nunca o fake MSI que acompanha o WINE. Execute novamente no terminal :

winecfg

Na guia “Libraries” acrescente a seguinte DLL Override :
msi.dll (native) –> Não use “native, builtin” que é auto-indicado como padrão :

MSI Nativo

Passo 7) Instalando o Delphi :

Vá até o diretório do instalador, e execute :

cd /media/cdrom
wine ./setup.exe

um outro modo de executar o instalador é esse :

wine msiexec /i "Borland Delphi 6.msi"

Não há diferença entre ambos,  pelo menos que eu tenha notado, ambas instalações comportam-se da mesma maneira.

Escolha instalar o item “Delphi 6″ e siga os procedimentos passo-a-passo que são solicitados, Conforme o padrão Next->Next->Finish :
Tela inicial contendo a licença

Se por acaso, você emperrar na etapa do serial number é porque o MSI não foi instalado direito ou você não está usando o msi.dll nativo. Se não houver problema a instalação prosseguirá :

instalação
Durante a instalação poderá ocorrer uma mensagem de erro dizendo que o BDE não teve “merge” para a nova configuração. Nós corrigiremos isso no final :

Erro na instalação do BDE.

Ao final da instalação, execute no terminal :

wineboot

Passo 8) Corrigindo o problema do BDE “unable to merge new configuration”

Se você tentar executar :

wine "/home/$USER/delphi6/drive_c/Arquivos de programas/Arquivos comuns/Borland Shared/BDE/bdeadmin.exe"

Provavelmente o BDE falhará, acontece que há um parametro do BDE pós-instalação que é desprovido de valor e isto impede-o de ser executado, estranho né que o próprio instalador faça isso ?

Para corrigir o problema, terá de criar um idapi32.cfg novinho em folha e para isso será infelizmente será necessário uma máquina com o BDE (SQLLinks incluso) instalado e devidamente configurado. Vá  até a estação Windows, abra o painel de controle, dê um duplo clique no ícone [BDE Administrator]. Selecione a guia “Configuration”, depois abra o item “System->INIT” e procure pelo parâmetro “SHAREDMEMLOCATION” e mude seu conteúdo para “9000″ (sem as aspas) :

Ajustando o BDE
Aplique as novas configurações e em seguida selecione no menu do BDE->Object->Save as Configuration, salve-o com o nome de idapi32.cfg por cima do já existente.

Copie o idapi32.cfg da estação Windows para seu wine em :
"/home/$USER/delphi6/drive_c/Arquivos de programas/Arquivos comuns/Borland Shared/BDE/"

Certifique-se de que haja apenas um idapi32.cfg, pois em algumas oportunidades pode permanecer a versão remanescente do mesmo arquivo, no entanto, em maiúsculo.

Infelizmente, mesmo mudando o parâmetro “SHAREDMEMLOCATION” na estação Windows e exportando-o, ainda assim, o arquivo idapi32.cfg exportado fica com SHAREDMEMLOCATION=nada na máquina onde foi copiado. Isso é irritante, pois forçará nossa intervenção no registro no wine, execute :

wine regedit

E procure pela chave [HKEY_LOCAL_MACHINE\Software\Borland\Database Engine\Settings\SYSTEM\INIT] e localize a variável “SHAREDMEMLOCATION” e troque o valor [em_branco] para [9000]. Pronto ! Agora execute o teste :

wine "/home/$USER/delphi6/drive_c/Arquivos de programas/Arquivos comuns/Borland Shared/BDE/bdeadmin.exe". Se parecer algo como isso aqui :
BDE instalado e configurado.

Então é porque funcionou perfeitamente, caso contrário, isto é, se ainda não estiver funcionando então desista de usar o Delphi. Pois há pouco que se possa fazer com um Delphi onde não se pode usar/manipular o BDE. Aqui comigo funcionou 100%, e reinstalei várias vezes e obtive sucesso em todas, mas o WINE está em constante desenvolvimento e a próxima versão pode estar sabotando.

Passo 9) Executando o Borland Delphi 6 :

Após a conclusão da instalação, precisamos criar um atalho para chamar o Delphi.
É interessante criar um bash-script porque o delphi está numa raiz diferente de ~/.wine e por essa razão não são criados atalhos no menu GNOME/KDE.

Use seu editor favorito para criar este arquivo :
<———– inicio de delphi6.sh ————->
#!/bin/bash
export WINEPREFIX="/home/$USER/delphi6"
# explico mais tarde a opcao : explorer /desktop=Delphi6,1024×768
wine explorer /desktop=Delphi6,1024×768 "c:\\Arquivos de programas\\Borland\\Delphi6\\Bin\\delphi32.exe"
<————- fim de delphi6.sh ————->
Salve o script acima como delphi6.sh e dê permissão de execução :
chmod a+x delphi32.sh

Como o escopo deste artigo é para programadores, voce provavelmente já sabe como criar um atalho para ele na área de trabalho não é mesmo?
Vejamos como fica o delphi 6 quando está carregado :

Note o fundo vazado, onde parte do papel de parede é visto. Pois é, isso é um problema !

Se voce minimizar qualquer uma das janelas do Delphi, elas são minimizadas, porém voce não sabe para exatamente onde ou como retorna-las. Foi por essa razão que usei o paramêtro "explorer /desktop=Delphi6,1024×768", assim todas as janelas são unidas como num desktop virtual e aparecem como uma única aplicação no GNOME Task List :
Virtual Desktop

No exemplo acima, usei 1024×768 como tamanho do desktop virtual, no entanto, é necessário ter cautela no tamanho, pois se voce colocar 100% da sua resolução então vai ter problemas para conseguir manipular direito esta janela enorme. Por isso, ao especificar a resolução tente escolher uma escala menor do que a máxima que seu monitor comporta, por exemplo, seu monitor tiver resolução de 1280×1024 então use um virtual desktop com 1024×768, se seu monitor tem o máximo de 1024×768 então tente 800×600 e assim por diante, essa é apenas uma sugestão porque voce pode usar qualquer tamanho. Meu monitor é widescreen e posso usar tranquilamente 1280×800 e ainda sobra espaço.

Será que compila ? Vejamos :

Compilando programas
Sim, podemos compilar o que quisermos.

Passo 10) Tá tudo liberado !

Tá liberado configurar o WINE do seu jeito, a partir de agora, voce pode acrescentar DLLs nativas, mudar a configuração de Win98 para WinXP, o que voce quiser fazer poderá fazer, mas fique avisado que modificações posteriores podem implicar em melhoria, mas também na inutilização do delphi.

Passo 11) Instalando o cliente do MSSQL 6.5

Um banco de dados legado. Se sua aplicação Delphi acessa um banco desses é necessário a instalação do cliente para esse banco de dados. Especialmente porque o BDE é muito sensível, já no DBExpress é tudo muito mais simples.

Coloque o cdrom do Microsoft SQL e já com a unidade de cdrom montada rode o setup dele :
cd /media/cdrom/sql65/i386
wine ./setup.exe

Vejas as telas em sequencia passo a passo :
Tela de Apresentação

Instalando
Ao se aproximar do FIM, o instalado do MSSQL abre um monte de telas entituladas “gerenciador de programas”, feche todas que aparecerem. E no final voce verá :
Instalação terminada.

Vamos configurar o cliente MSSQL 6.5 :
cd /home/$USER/delphi6/drive_c/MSSQL/BINN
wine windbver.exe

Vejamos algumas telas de configuração :

Configurando NetLibrary

Configurando de forma avançada.

Vamos executar o MSSQL Enterprise Manager :
wine SQLEW.EXE

Vejamos como fica o Enterprise Manager :
Abrindo o Enterprise Manager

12) Instalando o cliente de banco de dados FirebirdSQL

Também é possivel usar essa versão de Delphi para criar e acessar outras base de dados. Tenho usado o Delphi6 para criar aplicações que acessam base de dados FirebirdSQL. Usando componentes IBO, não somente é possivel desenvolver usando a dupla Delphi+WINE, como também os aplicativos gerados também rodam sob o WINE. Se voce quer experimentar isso vai precisar instalar o cliente para banco de dados FirebirdSQL :
Vá até a página :

http://www.firebirdsql.org/index.php?op=files&id=engine_203

e baixe o programa “Firebird-2.0.3.12981-1-Win32.exe” salvando-o em /home/$USER/delphi6/drive_c/temp
cd /home/$USER/delphi6/drive_c/temp
wine ./Firebird-2.0.3.12981-1-Win32.exe

Veja as algumas telas da instalação :

Apenas o cliente.

Note que não é preciso instalar os componentes do Servidor, exatamente porque desejamos ficar apenas com o cliente. Se desejássemos instalar o servidor, teríamos feito no próprio Linux. Vejamos a mensagem de instalação completada :

Termino da instalação.

Será que consigo rodar o Delphi minhas aplicações que acessam base de dados MSSQL e FirebirdSQL ? Certamente que sim.

Passo 13) Testando o acesso a base de dados FirebirdSQL

Um ótimo teste para sabermos se qualquer aplicativo executável win32 acessaria a base de dados Firebird é instalando um gerenciador de banco de dados, existem muitos, mas vou usar o IBOConsole que é bastante simples.

Primeiramente vá até a página :

http://www.mengoni.it/Downloads/

e baixe o arquivo IBOConsoleSetup.exe, salve-o na pasta /home/$USER/delphi6/drive_c/temp.

Para instala-lo execute no terminal :
export WINEPREFIX="/home/$USER/delphi6"
cd /home/$USER/delphi6/drive_c/temp
wine ./IBOConsoleSetup.exe

Prossiga com a instalação com o modo trivial do tipo Next->Next->Finish :
Instalando

Ao completar a instalação, experimente executa-lo no terminal :


export WINEPREFIX="/home/$USER/delphi6"
wine "C:/Arquivos de programas/IBOConsole/IBOConsole.exe"

Registrando um servidor :

Registrando um servidor

Registrando um banco de dados :

Registrando um banco de dados

Recuperando informações do banco de dados :

Recuperando informações do banco de dados

Pois é, funcionou.
Assim podemos ter certeza que a maioria dos aplicativos comerciais que usam Interbase/Firebird podem ser executados no Linux via WINE.

Passo 14) Executando novos aplicativos

Se voce precisar executar novas instalações e agregar mais coisas a instalação do Delphi voce pode executar :

wine explorer shell

Assim voce pode navegar no C:\ e outros drives, executar aplicativos copia-dos para ../drive_c, etc… mas ele é um gerenciador de arquivos e shell simples. Devem existir outros gerenciadores melhores, mas tem que procurar isso no mundo windows e tem que ser um que não dependa do próprio Windows.

Passo 15)Simplificando a vida com um menu seletor

Que tal um script já pronto com um menu seletor semelhante a este :
Menu Seletor.
Baixe este arquivo :

#!/bin/bash
# Borland Delphi 6 for Linux
# Seletor de programas
# By Hamacker (sirhamacker [em] gmail.com)

# Este script só funciona se delphi6 (.wine renomeado)
# estiver no diretorio :

export WINEPREFIX="/home/$USER/delphi6"

if ! [ -d "$WINEPREFIX" ] ; then
echo "Não foi encontrado o diretorio do delphi6 em lugar algum"
echo "Este sistemas esta treinando para encontrar o"
echo "delphi6 nos seguintes lugares :"
echo " /home/$USER/delphi6"
exit 2;
fi

# indo para o diretorio padrao
cd $WINEPREFIX

# setando algumas variaveis a respeito do aplicativo
APP_NAME="delphi6"
APP_DESC="Borland Delphi 6"
app_icon="$WINEPREFIX/delphi6.xpm"

# creating shortcut in desktop area
#SHORTCUT="/usr/share/applications/$APP_NAME.desktop"
SHORTCUT="/home/$USER/.local/share/applications/$APP_NAME.desktop"

if [ -f $SHORTCUT ] ; then
echo "Shortcut for $APP_DESC already exist !"
else
echo "[Desktop Entry]">$SHORTCUT
echo "Encoding=UTF-8">>$SHORTCUT
echo "Version=1.0">>$SHORTCUT
echo "Type=Application">>$SHORTCUT
echo "Exec=$WINEPREFIX/$APP_NAME.sh">>$SHORTCUT
echo "Icon=$app_icon">>$SHORTCUT
echo "X-GNOME-DocPath=">>$SHORTCUT
echo "Terminal=false">>$SHORTCUT
echo "Name=Menu do $APP_DESC">>$SHORTCUT
echo "GenericName=Menu do $APP_DESC">>$SHORTCUT
echo "Comment=Menu do $APP_DESC">>$SHORTCUT
echo "Categories=Development;">>$SHORTCUT
chmod a+x $SHORTCUT
echo "I create a $APP_DESC shortcut for you, enjoy!"
fi;

APP_DELPHI6="c:/Arquivos de programas/Borland/Delphi6/Bin/delphi32.exe"
APP_DBEXPLOR="c:/Arquivos de programas/Borland/Delphi6/Bin/dbexplor.exe"
APP_PCE="c:/Arquivos de programas/Borland/Delphi6/Bin/pce.exe"
APP_SQLMON="c:/Arquivos de programas/Borland/Delphi6/Bin/sqlmon.exe"

clear;
RET="—"
while [ "$RET" != "sair" ] ; do
RET=`zenity –width=700 –height=500 –window-icon=$app_icon \
–list –title "$APP_DESC para Linux" \
–text "Qual aplicativo gostaria de executar ?" \
–column "Nome" \
–column "Descrição" \
"delphi6" "Borland Delphi 6" \
"dbexplor" "SQL Explorer" \
"pce" "Package Collection Editor" \
"sqlmon" "SQL Monitor" \
"mssql" "MSSQL Enterprise Manager" \
"vidylogin" "VIDY Login" \
"iboconsole" "IBOConsole" \
"explorer" "Gerenciador de Arquivos do Windows" \
"taskmgr" "Gerenciador de Tarefas do Windows" \
"regedit" "Editor de Registro do Windows" \
"winecfg" "Configurador do WINE" \
"sair" "Sair"`

if [ "$RET" == "delphi6" ] ; then
echo "Executando $APP_DESC…"
#wine explorer /desktop=Delphi6,1280×800 "$APP_DELPHI6"&
wine explorer /desktop=default,1400×800 "$APP_DELPHI6"&
#wine "$APP_DELPHI6"&
fi

if [ "$RET" == "dbexplor" ] ; then
echo "Executando SQL Explorer…"
wine "$APP_DBEXPLOR"&
fi

if [ "$RET" == "pce" ] ; then
echo "Executando Package Collection Editor…"
wine "$APP_PCE"&
fi

if [ "$RET" == "iboconsole" ] ; then
echo "Executando o iboconsole…"
wine "C:/Arquivos de programas/IBOConsole/IBOConsole.exe"
fi

if [ "$RET" == "sqlmon" ] ; then
echo "Executando SQL Monitor…"
wine "$APP_SQLMON"&
fi

if [ "$RET" == "taskmgr" ] ; then
echo "Executando Windows Task Manager…"
wine taskmgr&
fi

if [ "$RET" == "explorer" ] ; then
echo "Executando Windows Task Manager…"
wine explorer shell&
fi

if [ "$RET" == "vidylogin" ] ; then
echo "Executando o VIDYLogin"
#wine c:/vidy/bin_cs/vidylogin.exe&
wine explorer /desktop=Delphi6 "c:/vidy/bin_cs/vidylogin.exe"
fi

if [ "$RET" == "regedit" ] ; then
echo "Executando Windows Regedit Editor…"
wine regedit&
fi

if [ "$RET" == "mssql" ] ; then
echo "Executando MSSQL Enterprise Manager…"
wine c:/mssql/binn/sqlew.exe&
fi

if [ "$RET" == "winecfg" ] ; then
echo "Executando o configurador do Wine…"
winecfg&
fi
done

unset WINEPREFIX
exit 0;

Salve-o como /home/$USER/delphi6/delphi6.sh. Este é um script-bash que usa um componente chamado zenity, ele fornece alguns componentes graficos para o GNOME. É aconselhável criar ícones no formato .xpm para representar aplicativos como delphi6.xpm, dbexplor.xpm,pce.xpm,sqlmon.xpm.

Sob Licença Creative Commons :

Você pode :

  • criar obras derivadas

Sob as seguintes condições:

  • Atribuição. Você deve dar crédito ao autor original, da forma especificada pelo autor ou licenciante.
  • Uso Não-Comercial. Você não pode utilizar esta obra com finalidades comerciais.
  • Para cada novo uso ou distribuição, você deve deixar claro para outros os termos da licença desta obra.
  • Qualquer uma destas condições podem ser renunciadas, desde que Você obtenha permissão do autor.
  • Nothing in this license impairs or restricts the author’s moral rights.
  • Quando publicado notra mídia, apenas como cortesia, notifique o autor.

Conclusão :

A idéia aqui é apenas instalar algo legado que roda com dificuldades no WINE, mas roda. A maioria dos aplicativos comerciais criados com o Delphi rodam no WINE, e os que não rodam necessitam apenas de modificações pequenas no geral.

Eu estravaguei um pouco instalando o próprio Delphi no WINE para justificar que se o próprio Delphi roda, porque aplicativos criados com ele não rodaria ? Claro que existem excessões, a medida que voce utiliza componentes de terceiros voce começa a comprometer a compatibilidade do WINE, mas não é assim para todos os componentes, por exemplo, estou usando satisfatóriamente a suíte IBO para acessar base de dados do FirebirdSQL, mas poderia usar outras suítes também. Os aplicativos que acessam base de dados MSSQL 6.5 foram feitos com o Delphi6 e estes rodam sob o WINE, inclusive aplicativos que criam sinais na bandeja do Windows fazem o mesmo na bandeja do GNOME.

Este é um blog e não uma página de suporte técnico. O que aprendí passo com prazer a outros, mas não espere que eu apareça e tire as suas dúvidas com programação ou consultoria [não remunerada]. Leve suas dúvidas à listas de discussão onde elas serão apreciadas melhor.

Algo que gostaria de observar é que alguns artigos que postei aqui foram parar em muitos lugares diferentes, eu aprecio isso. No entanto, também foram prar em páginas de assinantes e/ou conteúdo reservado, e disso não gostei muito. A licença de uso dos artigos nesse blog é Creative Commons conforme delineado na página inicial, para evitar o caratér comercial ou exclusividade, daí o motivo de estar colocando neste artigo uma seção dedicada a  Licença de uso para que não passe despercebido pelos copiadores de plantão.

1 de Agosto de 2007

Postgres or not Postgres ?

Arquivado em: Banco de dados, GNU/Linux — hamacker @ 14:05

Pois é, estou iniciando um novo projeto com desenvolvimento de aplicações e banco de dados.

Porém este novo serviço vou ter a possibilidade de escolher entre dois banco de dados : FirebirdSQL(FB) e Postgres (PG).

O FirebirdSQL já conheço muito bem, e em meu ultimo trabalho com ele foi possível migrar um conjunto de aplicações que acessavam base de dados no Microsoft SQL Server para FirebirdSQL, e ficou muito bom, com procedures, tabelas, triggers,… muito melhor do que o anterior MSSQL. O FB para administrar é muito fácil, parece ser realmente um sistema autonomo e não requerendo ninguém para administra-lo, não foi sem mérito que ganhou o primeiro lugar em duas categorias do SourceForge Community Choice Awards.

Minha principal questão é investir no Postgres, afinal não é apenas o treinamento, mas adaptações a serem feitas. Luto muito pelo Linux, voces sabem, mas muitas empresas já usam tecnologias consideradas consagradas e neste caso em particular, apesar de poder escolher qualquer banco de dados(vou escolher entre FB e PG) , a linguagem de programação já esta escolhida : Delphi (versão 7).

FirebirdSQL com Delphi é como um passeio no parque, poucas preocupações. Componentes de acesso VCL(Delphi) nativas para acesso, Ferramentas de Administração (win32 e linux) muito boas, server com opção para Linux,… tornam o terreno fértil para progresso rápido do desenvolvimento.

No entanto, Postgres é terreno novo, sempre ouço falar bem dele, mas também ouço reclamações sobre o seu peso e complexidade. Para não fazer experiências com o cliente, afinal o cliente já ficou decepcionado com a empresa anterior, provavelmente vou ter que fazer um treinamento específico para Postgres, não somente administração, mas também desenvolvimento (embora ache que SQL é SQL em qualquer banco) e correr atrás de componentes VCL e ferramenta para administração.

Meus nobres colegas, gostaria que àqueles que já tem experiência em administrar e desenvolver usando Postgres e/ou FirebirdSQL comentasse o que eu devo esperar desse terreno novo, ou até mesmo se devo experimentar o PG ou ficar na zona de segurança com o FB.

Àqueles que puderem me ajudar, comentando a respeito :

  • Migrou de FirebirdSQL para Postgres ? Como foi a sua migração, tranquila ? O que ficou melhor ? O que ficou pior ?
  • Usa Delphi? que versão e suite de componentes de acesso está usando ?
  • Qual ferramenta de administração de banco usa atualmente para criar os objetos de banco de dados, backup, reparação, etc… ?

O trabalho não é muito grande, a empresa é de porte médio e o sistema atual (também em MSSQL) conta com 5GB de dados, mas como serão desenvolvidos também novos programas, por isso é provável que essa base aumente muito. São cerca de 50 usuários acessando simultaneamente a base, a maioria das operações são insert e update, o projeto feito em MSSQL está bem definido(normatizado) com tabelas e SPs e não usa triggers e pelo que vejo são raras as exclusões no banco, o que dá a entender que foi muito bem planejado. A empresa está mudando porque o MSSQL é a versão 6.5 e migra-lo para a versão mais recente, além dos custos tem a incompatibilidade e muito código teria de ser reescrito e seria quase como partir para outro banco de dados, e se for para mudar que tal um banco de dados livre ? É aqui que eu entro.

Todo o comentário esclarecedor será muito apreciado.

18 de Julho de 2007

Instalando o FirebirdSQL 2

Arquivado em: Banco de dados, GNU/Linux, ubuntu — hamacker @ 14:50

O FirebirdSQL (aka Firebird) é um excelente banco de dados relacional compatível com a conformidade SQL ISO/IEC 9075:2003, ele nasceu Livre depois do fork com o Interbase 6 oferecido pela Borland em julho de 2000, que mais tarde tornou-se proprietário novamente. Daí não teve jeito, nasceu o fork chamado FirebirdSQL. O Banco de Dados Relacional FirebirdSQL roda em Windows, *BSD, Linux e vários sabores de Unix e diferentes tipos de hardwares e processadores, possui uma série de vantagens como concorrência, performance e uma linguagem poderosa para escrever triggers e stored procedures.

Atualmente o FirebirdSQL encontra-se na versão 2.0 e com a versão 2.1 em fase beta, mas há um problema : para sistemas baseados no debian (ubuntu incluso), o Firebird encontra-se nos repositórios como versão 1.5.3, que possui menos recursos do que a versão 2.0. Para resolver essa situação vamos precisar fazer um backport, isto é, pegar o código fonte da versão 2.0 que está em repositórios para versões futuras (Gutsy) e porta-lo para a versão que estou utilizando (Feisty). O backport é melhor do que rodar o instalador (também existente) para linux ou usar o método configure; make; make install porque os binários compatíveis com o nosso sistema já estará ambientado à nossa distribuição.

A receita de bolo abaixo ensina a fazer isso em distros usando Ubuntu, mas a mesma receita pode ser seguida por outros administradores que utilizem uma versão compatível com Debian, bastando modificar a URI no source.list no primeiro passo.

1) Edite o arquivo /etc/apt/sources.list, e acrescente no final dele a seguinte linha :

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

2) Atualizar a base de dados do sistema :

sudo apt-get update

3) Instalar as dependências para compilação do FirebirdSQL 2.0 :

sudo apt-get build-dep firebird2.0

4) Compilar e gerar os pacotes binários no formato .deb :

sudo apt-get -b source firebird2.0

Isso irá baixar os fontes do FirebirdSQL, compilar e gerar pacotes binários no formato .deb para serem instalados em computadores que usem o mesmo sistema que o seu. Esse processo é automátizado, é por isso que administradores Debian gostam tanto do apt. Veja o resultado final num Ubuntu Feisty :

$ ls -1 *.deb
 firebird2.0-classic_2.0.1.12855.ds1-7_i386.deb
 firebird2.0-common_2.0.1.12855.ds1-7_i386.deb
 firebird2.0-dev_2.0.1.12855.ds1-7_all.deb
 firebird2.0-doc_2.0.1.12855.ds1-7_all.deb
 firebird2.0-examples_2.0.1.12855.ds1-7_all.deb
 firebird2.0-super_2.0.1.12855.ds1-7_i386.deb
 firebird-utils_2.0.1.12855.ds1-7_all.deb
 libfbclient2_2.0.1.12855.ds1-7_i386.deb
 libfbembed2_2.0.1.12855.ds1-7_i386.deb

5) Para concluir a instalação :

Muitos pacotes .deb são gerados, mas nem todos devem ser instalados, básicamente o que há ali são documentação, banco de dados de exemplos, cliente de banco de dados (necessário para que aplicações acessem o banco de dados local ou remoto), utilitários (ferramentas de backup, isql) e três sabores do Firebird : SuperServer, Classic e embeded(embarcado). No exemplo abaixo, estarei instalando o FirebirdSQL SuperServer, cliente de banco de dados e os utilitários :

sudo dpkg -i firebird2.0-common_2.0.1.12855.ds1-7_i386.deb  firebird2.0-super_2.0.1.12855.ds1-7_i386.deb \\
   firebird-utils_2.0.1.12855.ds1-7_all.deb \\
   libfbclient2_2.0.1.12855.ds1-7_i386.deb

(os nomes dos binários podem variar conforme a distribuição, versão e método utilizados. As linhas acima são um único comando)

As vezes, podem haver dependências, então se houverem mensagens de erro corroborando isso, então instale-as com o seguinte comando :

sudo apt-get install -f

Se por ventura voce precisar configur a senha do SYSDBA (administrador) em seu sistema, execute o comando :

sudo dpkg-reconfigure firebird2.0-super

Também é possivel com o comando acima, relacionar o serviço do banco de dados do firebird que é iniciado com o boot da máquina para usar o Firebird classic ou super.

6) Para administrar o banco, executar queries e afins numa interface gráfica :

Recomendo a instalação do programa FlameRobin, um frontend gráfico, porém peso-leve (sem dependencias pesadas também), crossplataform (windows, linux, *bsd, macos) e completamente opensource. Voce encontra esse programa na seguinte página :

http://www.flamerobin.org/

Baixe a versão .deb e em seguida :

sudo dpkg -i flamerobin_0.7.6-1_i386.deb
sudo apt-get install -f

Para quem tem o repositório universe habilitado, nem precisa do procedimento acima, basta :

sudo apt-get install flamerobin

7) Convertendo banco de dados de versões anteriores para serem usados no FB2 :
Os arquivos de dados do FB2 não são compátiveis com as versões anteriores, mas não se aflija, a solução é simples : fazer uma cópia de segurança (backup) do banco de dados antigo e restaura-lo no banco de dados novo. Vamos a um outro passo-a-passo :

7.1) Se voce ainda mantém (ou manterá) um FB1.5 em sua rede, então :

a) Faça um backup dele e guarde na maquina onde voce já tem o FB2.0 instalado :

gbak -b -v -t -user "SYSDBA" -password "masterkey" \\
   IP.DO.SERVIDOR:/caminho/para/o/banco/de/dados/arquivo.fdb \\
   /var/lib/firebird/2.0/backup/arquivo.fbk

Repita a mesma operação com o arquivo /var/lib/firebird2/system/security.fdb se desejar guardar também as contas de usuários.

b) Agora restaure-o num arquivo novo, genuinamente compátivel com o FB2.0 :

gbak -r -v -t -user "SYSDBA" -password "masterkey" \\
    /var/lib/firebird/2.0/backup/arquivo.fbk \\
    /var/lib/firebird/2.0/data/arquivo.fdb

A restauração do arquivo security.fbk da-se-a da mesma forma, no entanto, deverá ser restaurado como /var/lib/firebird/2.0/system/security.fdb.

7.2 Se voce vai trocar a versão anterior do FB pela 2.0 no mesmo servidor :

a) Faça a copia de segurança do seu banco de dados antigo (incluindo as contas de usuários), para salvaguardar de problemas e tenha de retornar ao banco de dados antigo, exemplo :

# criando uma pasta para guardar os backups originais
# o fb deverá estar parado para realizar esta operação
mkdir -p /local/do/backup/original

# uma copia das contas dos usuários
cp /var/lib/firebird2/system/security.fdb /local/do/backup/original

# copia dos arquivos de dados que voce possuir
cp /caminho/para/o/banco/de/dados/arquivo.fdb /local/do/backup/original

b) Faça agora um backup (meta-dados e dados) :

gbak -b -v -t -user "SYSDBA" \\
     -password "masterkey" \\
     192.168.1.5:/caminho/para/o/banco/de/dados/arquivo.fdb \\
     /local/do/backup/original/arquivo.fbk

Se voce precisar também das contas dos usuários, repita este procedimento para o arquivo security.fdb .

c) Tendo removido o FB anterior e instalado FB2.0 novo, vamos resturar o backup anterior :

gbak -r -v -t -user "SYSDBA" \\
  -password "masterkey" \\
  /local/do/backup/original/arquivo.fbk \\
  /var/lib/firebird/2.0/data/arquivo.fdb

A restauração do arquivo security.fbk da-se-a da mesma forma, no entanto, deverá ser restaurado como /var/lib/firebird/2.0/system/security.fdb.

7.3 Como definir quem terá acesso físico ao arquivo de dados ?

A pasta /var/lib/firebird/2.0/data é um local já organizado pelo firebird para serem colocados os arquivos de dados, usando esta pasta como referencia voce não precisará se preocupar com permissões, pois nela há permissões suficientes apenas para o usuário firebird(criado pelo próprio firebird) e root, nenhum outro usuário cadastrado no Linux terá acesso a arquivos de dados colocados nesta pasta. Obviamente, se voce quiser um arquivo de dados em outro local voce pode, no entanto, para inibir o arquivo de ser copiado por outro usuário na rede voce terá que nas pastas/arquivos de dados executar o comando :

chmod 700 /home/fbdados
chown firebird.firebird  /home/fbdados
chown firebird.firebird  /home/fbdados/arquivo.fdb
chmod 600 /home/fbdados/arquivo.fdb

Onde /home/fbdados/ representa a pasta onde voce restaurou ou colocou o(s) arquivo(s) de banco de dados. Obviamente, praticar o mesmo comando para os arquivos (arquivo.fdb) é redundancia, no entanto, é bom saber que se a segurança da pasta for trocada acidentalmente ainda o arquivo de dados estará seguro.

Este procedimento é o mesmo que se fazia também nas versões anteriores.

8) Criando aliases para acesso ao banco de dados (opcional) :

Uma dificuldade que muitos sentem ao acessar um arquivo de dados é revelar o path da localização física deste arquivo por ocasião de conectar o banco de dados, isso gera dois problemas principais :

  • Revela a localização física do arquivo de dados, se esta localização for exposta num arquivo texto ou algo do gênero alguém poderá reutilizar essa informação para outros fins.
  • Engessa sua aplicação porque o banco de dados não poderá sair daquele local sem alterar na aplicação ou arquivos de configuração do seu aplicativo.

Esses dois problemas só ocorrem porque não foram criados aliases, as conexões ao invés de referirem-se ao arquivo de dados deveriam referir-se a aliases e este por sua vez foi programado para representar o arquivo de dados com sua localização fisica. Edite o arquivo /etc/firebird/2.0/aliases.conf e acrescente :

principal_dados= /var/lib/firebird/2.0/data/arquivo.fdb

Agora, na sua aplicação voce configura-o para acessar SERVIDOR:principal_dados ao invés do comum SERVIDOR:/caminho/para/arquivo.fdb. Se seu arquivo de dados tiver que mudar de lugar (inclusive de servidor físico), basta alterar o aliases e com isso sua aplicação permanecerá a mesma.

Observações Importantes :

Nem todos os administradores precisam usar o sudo, o sudo normalmente é usado apenas por usuários do sistema Ubuntu e embora a versão do Debian Etch também possa utiliza-lo, é desnecessário quando se estar fazendo uso da conta “root”.

Links uteis :

Documentação a respeito do Firebird :

http://www.firebirdsql.org/index.php?op=doc

Instalação do Firebird (1.5) no Ubuntu, apesar de ser uma versão anterior, ainda é bastante usado :

http://www.firebirdsql.org/manual/ubusetup.html

Migração do banco de dados Microsoft SQL Server (MSSQL) para Firebird, aqui relatando conversões de tipos, funções, etc… :

http://www.firebirdsql.org/manual/migration-mssql.html

Conformidade com o padrão SQL :

http://www.firebirdsql.org/index.php?op=devel⊂=engine&id=SQL_conformance&nosb=1

Lista de discussão em português sobre o FirebirdSQL e FirebirdSQL+PHP (ambas bastante movimentadas) :

http://br.groups.yahoo.com/group/firebird-br/messages

http://tech.groups.yahoo.com/group/firebird-php/messages

E por fim, mas não menos importante, a página oficial sobre o FirebirdSQL :

http://www.firebirdsql.org/

8 de Setembro de 2006

Instale o FlameRobin no seu Ubuntu Dapper

Arquivado em: Banco de dados, GNU/Linux — hamacker @ 15:15

Uma dica importante para aqueles que administram banco de dados FirebirdSQL e se queixam de que não há frontend decente para Administra-los no Linux : Use o Flamerobin.

O Flamerobin entrou num estágio que já pode utiliza-lo sem ter medo, digo isto porque nas versões anteriores ficava muito dificil, voce criava um procedimento armazenado (stored procedure) e sem querer causava um erro de sintaxe e na hora de salvar : crash!

Agora voce pode ficar feliz que a versão atual, a 0.7.5-1 está mais estável. Apesar disso, não existem pacotes prontos para Ubuntu, apenas .tar.gz (fontes), .rpm (redhat packages) e .deb (específico debian unstable). Poderíamos utilizar o pacote para debian, porém a versão 0.7.5-1 para debian é unstable, ou seja, usa dependencias de pacotes/versoes que não supridos pelo dapper, neste caso o caminho é compilar voce mesmo o pacote. Eis o caminho :

Instale as dependencias necessárias para compilação, não se assuste todo programador normalmente já tem o build-essentials instalado na maquina e não pesa muito :

sudo apt-get install debhelper dpatch fakeroot build-essential subversion

Criemos uma pasta para o flamerobin e vamos utiliza-la :

mkdir flamerobin

cd flamerobin

Vamos usar o subversion para baixar as definicoes de pacote .deb do flamerobin e utiliza-las como referencia para o ubuntu :

svn co https://svn.openfmi.net/debian-addons-bg/flamerobin/tags/0.7.5-1/

Façamos um download do codigo fonte do flamerobin (760K) :

wget -vc http://ufpr.dl.sourceforge.net/sourceforge/flamerobin/flamerobin-0.7.5-src.tar.gz

Descompactamos o codigo fonte :

tar zxvf flamerobin-0.7.5-src.tar.gz

Move-mos as definicoes de criacao de pacote .deb para a pasta do flamerobin

mv 0.7.5-1/debian flamerobin-0.7.5-src

Acessemos os fontes :

cd flamerobin-0.7.5-src

Verificamos quais a dependencias necessárias para compilação :

dpkg-checkbuilddeps

E instalamos as dependencias que foram exigidas :

sudo apt-get install firebird2-dev libwxgtk2.6-dev

Instaladas as dependencias, cumprimos algumas regras para geração de pacotes debian :

fakeroot dh_md5sums
fakeroot dh_builddeb

Pronto ! Pacote flamerobin_0.7.5-1_i386.deb foi criado com sucesso na pasta do nível anterior, agora basta instalar :

cd..
sudo dpkg -i flamerobin_0.7.5-1_i386.deb

Eventualmente, ainda podem requerer algumas depedencias como o cliente do Firebird, então para sana-las use :

sudo apt-get install -f

Pronto ! Use e abuse.

Referencias :

http://www.lordphoenix.info/ubuntu/installer-flamerobin-sous-ubuntu-dapper

Blog no WordPress.com.