[[email protected]]# Dicas e tutoriais para técnicos e administradores de sistemas_

Migrando sistemas com o MS-DOS usando o DOSEMU/FreeDOS

24/10/2007

Originalmente publicado no Guia do Hardware em 20/09/2007

É impressionante como ainda existem estabelecimentos comerciais rodando aplicativos em DOS por aí. Em alguns casos, as necessidades tecnológicas do negócio não exigem mesmo mais do que isso. Por outro lado, sistemas dependentes do DOS são excelentes candidatos a uma migração para o LINUX, já que muitos dos programas de DOS rodam perfeitamente no Linux, graças ao DOSEMU e ao FreeDOS.

ATENÇÃO: este artigo é baseado na versão 1.4 do DOSEMU. A versão 1.2 apresenta uma estrutura de diretórios diferente, e algumas das dicas deste artigo não funcionam nela.

1. O que é o FreeDOS?

O FreeDOS é uma implementação gratuita e livre do DOS. No nosso caso, podemos dizer que ele é o DOS em si, sendo capaz de executar os comandos tradicionais de DOS, bem como executar os mais variados programas. No entanto, para que o FreeDOS funcione, é necessário estabelecer uma ponte de comunicação entre o DOS e o Linux. É aqui que entra o DOSEMU.

2. DOSEMU?

O DOSEMU não é o DOS em si. Na verdade, ele funciona mais como uma camada de compatibilidade entre o DOS que você vai utilizar (no nosso caso, o FreeDOS) e o Linux, cuidando, entre outras coisas, do acesso a impressoras e drives de CD. Isso significa que estaremos usando uma dobradinha: o FreeDOS cuida de emular a funcionalidade do DOS, enquanto o DOSEMU "casa" o FreeDOS e o Linux.

3. Instalação

Há pacotes compilados do dosemu para algumas distribuições. Geralmente elas já trazem embutido o FreeDOS, de modo que a instalação consiste em um mero apt-get install dosemu. Se sua distro usa pacotes RPM, é só baixar o arquivo "dosemu-1.4.0-1.i386.rpm (all-in-one RPM, includes FreeDOS)" e instalar com um rpm -Uvh dosemu-1.4.0-1.i386.rpm.

Se não houver pacotes para sua distro, vá em http://dosemu.sourceforge.net/stable/ e baixe os pacotes dosemu-1.4.0.tgz (source) e dosemu-freedos-1.0-bin.tgz (binary). Na data em que este artigo foi escrito, esta era a versão estável do programa. Descompacte o primeiro arquivo com:

  $ tar zxvf dosemu-1.4.0.tgz

O resultado será o diretório dosemu-1.4.0. Agora mova o arquivo dosemu-freedos-1.0-bin.tgz para dentro do diretório, mudando seu nome para dosemu-freedos.tgz:

  $ mv dosemu-freedos-1.0-bin.tgz dosemu-1.4.0/dosemu-freedos.tgz

Agora é só instalar:

  $ cd dosemu-1.4.0
  $ make
  # make install

Você pode iniciar o dosemu ou o xdosemu. Se você tem um ambiente gráfico pode usar o xdosemu, que deve lhe dar menos problemas com a questão de quantidade de linhas, colunas e fontes. Do contrário, use o comando dosemu.

4. Configurando o Hardware

4.1. Impressoras

Via de regras, sua primeira preocupação será a impressora. Como imprimir de dentro do DOSEMU?

É mais simples do que parece. Se você tem uma impressora instalada pelo CUPS saiba que o DOSEMU deve imprimir nela sem problemas. O arquivo de configuração principal do DOSEMU fica em /etc/dosemu/dosemu.conf. Ele traz as opções padrão do DOSEMU comentadas, portanto, se quiser alterar alguma delas terá que descomentar a linha e fazer a alteração. Vejamos a seção do arquivo que trata das impressoras:

  ##############################################################################
  ## Printer and parallel port settings
  # Print commands to use for LPT1, LPT2 and LPT3.
  # Default: "lpr -l", "lpr -l -P lpt2", and "" (disabled)
  # Which means: use the default print queue for LPT1, "lpt2" queue for LPT2.
  # "-l" means raw printing mode (no preprocessing).
  # $_lpt1 = "lpr -l"
  # $_lpt2 = "lpr -l -P lpt2"
  # $_lpt3 = ""
  # idle time in seconds before spooling out. Default: (20)
  # $_printer_timeout = (20)

Os programas de DOS imprimem para a impressora LPT1. Isso costuma causar alguns problemas quando você tenta imprimir para impressoras USB pelo windows. Mas com o DOSEMU o problema não existe. Inclusive, uma alternativa para quem precise imprimir pelo windows para uma impressora USB é rodar o programa através de outro emulador de DOS, o DOSBOX, que roda no Windows. Mas isso é assunto para outro artigo...

A linha # $_lpt1 = "lpr -l" diz que tudo o que os programas enviarem para a impressora na porta LPT1 será encaminhado ao comando lpr -l. lpr é o comando para imprimir no Linux, e a opção -l significa raw printing. E que raios é raw printing? Raw printing significa que o que o programa mandar imprimir será encaminhado à impressora sem nenhuma filtragem prévia. Caso contrário, o documento passaria pelo filtro do CUPS e sairia alterado no fim das contas.

O comando vai imprimir para a impressora padrão. Se quiser mudar esse comportamento, acrescente um -P nome da impressora ao fim do arquivo. O nome da impressora você confere com um cat /etc/printcap.

Aproveitando para dar uma dica: muita gente que usa DOS ainda tem as velhas impressoras matriciais da EPSON. Saiba que diversos desses modelos funcionam perfeitamente com o DOSEMU. Ao acrescentar a impressora pelo CUPS, escolha "Add Printer >> LPT #1 >> Generic >> Generic ESC/P Dot Matrix Printer Foomatic/epson".

4.2. Drives de CD-ROM

A primeira coisa que você precisa fazer para habilitar o CDROM no DOSEMU é modificar o arquivo config.sys, que geralmente fica em ~/.dosemu/drive_c/config.sys. Acrescente esta linha:

  devicehigh=d:\dosemu\cdrom.sys

Talvez a linha já exista, e só precise ser descomentada. Agora vá em seu arquivo autoexec.bat (geralmente em ~/.dosemu/drive_c/autoexec.bat) e acrescente a linha:

  lredir e: linux\fs/media/cdrom c

Isso vai tornar o cdrom montado em /media/cdrom acessível em E:. Sacaram como a coisa funciona? Se o ponto de montagem de seu cdrom é outro, modifique a linha corretamente.

5. Iniciando programas automaticamente

Que tal criar um ícone no Desktop que chama o DOSEMU e automaticamente executa o programa desejado? Essa tarefa é possível graças ao comando unix -e, que é executado automaticamente pelo DOSEMU no autoexec.bat. Ele permite que você acrescente à chamada do DOSEMU o caminho para um programa, fazendo com que ele seja executado. Por exemplo:

  xdosemu "/home/user/diretorio_x/programa_y"

Isso vai abrir automaticamente o programa. Quando você sair dele, o dosemu fecha automaticamente, o que significa que seus usuários nunca terão que ver um prompt de comando na frente deles. Você pode criar um lançador no Desktop e na hora de digitar o programa a ser executado inserir a chamada acima.

6. Iniciando em tela cheia

Dizem (o manual e os usuários) que executar o xdosemu com a opção -w inicia em tela-cheia, mas comigo nunca funcionou, nem no Fedora nem no Ubuntu. Quem sabe em versões ou hardwares diferentes... de qualquer maneira, uma vez que o DOSEMU esteja aberto, você pode dar um <CTRL>+<ALT>+<F> para entrar no modo de tela cheia. Esse sim funcionou comigo.

7. Usando o DOSEMU em ambientes multi-usuários

Quando um usuário usa pela primeira vez o DOSEmu o programa cria uma pasta .dosemu na home. Dentro da pasta .dosemu é criada a pasta drive_c, que será o seu C:, onde todos os seus arquivos serão gravados por padrão.

Acontece que se você estiver operando em um ambiente com vários usuários, cada usuário que acessar o dosemu terá uma nova pasta .dosemu criada na sua home, ou seja: cada usuário terá um C: diferente. Se você quiser que todos os usuários acessem os mesmos arquivos vai ter que dar um jeito nisso.

Uma idéia interessante é criar um grupo chamado dosemu, e incluir os usuários que vão usar o DOS nele, dessa forma:

  # groupadd dosemu
  # gpasswd -a robertobech dosemu
  # gpasswd -a fatimabech dosemu

Com esses comandos eu criei o grupo dosemu e coloquei os usuários robertobech e fatimabech (minha esposa :-) nele. Agora vamos criar a pasta em que o DOSEmu vai gravar nossos arquivos em comum:

  # mkdir /opt/dosemu

Eu escolhi criar a pasta /opt/dosemu, mas voc pode criar a pasta que quiser onde bem entender. O que nós vamos fazer agora é criar um link simbólico na pasta ~/.dosemu/drive_c apontando para /opt/dosemu, assim:

  # ln -s /opt/dosemu /home/robertobech/.dosemu/drive_c/dosemu

Faça o mesmo para os outros usuários. A idéia é que, dentro do C: de cada um, haja uma pasta compartilhada dosemu, que na verdade está em /opt/dosemu. Mas para que todo mundo possa escrever nessa pasta precisamos alterar suas permissões. Vamos fazer com que todos os usuários do grupo dosemu sejam capazes de ler e alterar arquivos nela:

  # chgrp dosemu /opt/dosemu
  # chmod g+w /opt/dosemu

Mas isso não basta, ainda temos um problema. Se o usuário robertobech criar um arquivo em /opt/dosemu, o arquivo não pertencerá ao grupo dosemu, mas sim ao grupo principal do usuário (que dependendo da sua distro pode ser robertobech ou users), e a pobre fatimabech vai continuar sem conseguir modificar o arquivo. O que nós precisamos é de um jeito de dizer ao Linux: "hey, eu quero que todos os arquivos criados abaixo desse diretório pertençam ao grupo que é o dono da pasta, ou seja, ao dosemu". E não é que o tal comando existe? É esse aqui ó:

  chmod g+ws /opt/dosemu

O truque é o "s". É ele que faz com que todos os arquivos criados dentro do /opt/dosemu, incluindo novas pastas, pertençam ao grupo dosemu. Pronto, você agora tem uma pasta comum dentro do DOSemu, a C:\dosemu. Você pode instalar seus programas nela, e todos os usuários terão acesso a ele. Outra coisa interessante é que cada usuário continua tendo seu próprio autoexec.bat dentro da pasta drive_c, e você pode configurar cada um da maneira que achar melhor.

Por alguma razão, eu ainda tive problemas de permissões para criar arquivos em /opt/dosemu enquanto o dono da pasta era o root. Se você tiver esse problema, mude o dono da pasta para um usuário comum e você deverá ser capaz de criar novos arquivos sem problemas, desde que o usuário pertença ao grupo dosemu.

Você ainda pode automatizar as coisas e fazer com que cada novo usuário, ao ser criado, já herde todos esses diretórios: basta copiar a pasta .dosemu de um dos usuários para o diretório /etc/skel.

Uma última observação sobre o modo multi-usuário: quando você usar programas com acesso a bancos de dados no DOSEmu pode ter problemas quando dois usuários tentarem alterar um mesmo registro ao mesmo tempo. Para evitar esse problema, alguns programas usam o programa SHARE. Eu, por exemplo, rodo um programa de exames laboratoriais, e quando um usuário abre um registro o SHARE trava o registro. Se outro usuário tentar modificá-lo nesse meio tempo, surge uma mensagem dizendo que o usuário vai ter que aguardar o registro ser liberado. Para que isso funcione você precisa carregar o SHARE, que vem incluído no FreeDOS: é só chamar o programa digitando share, ou incluir uma linha chamando o share no autoexec.bat do usuário.

8. Live-CD?

Já pensou rodar o FreeDOS por um live-CD, sem ter que instalar o Linux nem nada? Pois você pode: o live-CD está disponível para download no site oficial do FreeDOS.

9. Obtendo ajuda

O DOSEMU conta com uma farta documentação no diretório /usr/share/doc/dosemu/. Se tiver problemas, leia primeiro estes documentos e veja se encontra uma solução.

Se não encontrar, recomendo a lista de usuários do dosemu em [email protected] (detalhes sobre como se inscrever em http://dosemu.sourceforge.net/mailinglist.html). A lista é mais movimentada do que eu imaginava, e os usuários estão sempre dispostos a dar uma força. O usuário Frank Cox, em particular, contribuiu bastante para a elaboração da seção sobre multi-usuários deste artigo ao me indicar um artigo de sua autoria em http://www.melvilletheatre.com/articles/powerbasic-linux/.

10. Conclusão

O DOSEMU pode ser extremamente útil em migrações. Não só ele reproduz as funcionalidades do DOS como em alguns casos vai além - como ao lidar com impressoras USB.

Espero que este documento seja útil a vocês. Adoraria receber suas opiniões e sugestões pelo email [email protected]. Até o próximo artigo!

11. Referências


LINUX para o resgate - Powered by txt2tags