[inizio] [indice generale] [precedente] [successivo] [indice analitico] [contributi]


236. DOSEMU: l'emulatore di hardware DOS compatibile

DOSEMU è fondamentalmente un emulatore dell'hardware x86 per vari sistemi Unix funzionanti su architettura i386. Il suo obiettivo è quello di permettere il funzionamento del sistema operativo Dos (MS-Dos o cloni). Si tratta di un progetto eternamente in fase di sviluppo (alpha), anche se da diversi anni è sufficientemente funzionante. Tuttavia non ci sono punti fermi: da una versione all'altra si possono incontrare novità imprevedibili.

Dal momento che l'emulazione riguarda l'hardware, il Dos deve essere installato all'interno di questo sistema di emulazione, e quindi, è necessaria una copia di questo sistema operativo, insieme alla licenza d'uso.

DOSEMU permette di utilizzare la stessa copia installata del Dos su più terminali contemporaneamente. Se si intende concedere l'utilizzo simultaneo di una singola copia di questo sistema operativo, è necessario un numero maggiore di licenze d'uso, oppure una licenza multipla.

A fianco del lavoro su DOSEMU è anche in corso quello sul progetto FreeDOS per un sistema operativo Dos libero. Per il momento si tratta ancora di software molto carente, ma appena avrà raggiunto un livello minimo accettabile di funzionamento sarà incluso (o abbinato) a DOSEMU.

236.1 Predisporre un ambiente adatto al Dos all'interno di DOSEMU

Perché il sistema operativo Dos possa funzionare all'interno di DOSEMU, occorre preparare un file-immagine di un disco Dos dal quale si possa effettuare l'avvio del Dos stesso. Questo file che viene descritto di seguito, verrà visto dal Dos come disco `C:'.

Successivamente è conveniente predisporre uno spazio all'interno del filesystem del proprio sistema GNU/Linux da utilizzare per i programmi Dos che verrà letto come un disco di rete.

236.1.1 Un disco C: immagine

Per effettuare l'avvio del Dos occorre che sia predisposta l'immagine di un disco di piccole dimensioni. Questo potrebbe essere un file contenuto nella directory `/var/lib/dosemu/', oppure `/var/state/dosemu/', il cui nome inizia normalmente per `/hdimage'.

Attualmente, il file dovrebbe chiamarsi `hdimage.first', e al limite potrebbe essere un collegamento simbolico a un altro file che costituisce l'immagine vera e propria.

Se non esiste questo file è necessario copiarlo dal pacchetto sorgente. Il nome dovrebbe essere `hdimage.dist', o qualcosa di simile. Questa immagine verrà preparata in seguito.

236.1.2 Un disco D: virtuale o di rete

In questa fase conviene preparare una directory che servirà per definire l'inizio (la radice) del disco `D:' virtuale utilizzato dai programmi Dos. Stabiliamo che questo sia `/var/emul/dos/'. Da questo punto in poi, `D:\' è equivalente a `/var/emul/dos/'.

236.1.3 La struttura essenziale del disco D: virtuale

Il disco `D:' virtuale dovrebbe contenere alcune directory che riproducono in pratica il classico ambiente Dos:

Per evitare la proliferazione di directory temporanee, è possibile utilizzare al posto di `/var/emul/dos/temp/' un collegamento simbolico che punti a `/tmp/'.

ln -s /tmp /var/emul/dos/temp

236.2 La configurazione di DOSEMU

La configurazione di DOSEMU consiste nella modifica dei file `/etc/dosemu.conf' e di `/etc/dosemu.users'. Il file `/etc/dosemu.users' permette di definire gli utenti che possono utilizzare DOSEMU, mentre l'altro stabilisce tutte le altre caratteristiche.

Purtroppo, la configurazione di DOSEMU, specialmente per ciò che riguarda il file `/etc/dosemu.conf', è complessa e cambia da versione a versione. Inoltre, DOSEMU può costituire anche un problema per la sicurezza del sistema dal momento che di solito l'eseguibile `dos', deve essere SUID-root (cioè deve appartenere a `root' e avere il bit SUID attivato) per utilizzare funzionalità particolari dell'hardware (soprattutto la scheda video VGA). *1*

236.2.1 /etc/dosemu.users

DOSEMU permette di distinguere alcune categorie di utenti, attribuendogli privilegi differenti, in base a una diversa configurazione nel file `/etc/dosemu.conf'. Queste categorie di utenti dipendono quindi dalla configurazione di questo file.

Il file `/etc/dosemu.users' può contenere righe di commento, introdotte dal simbolo `#', righe vuote, che vengono ignorate, e direttive espresse dalla sintassi seguente:

<utente> [<variabile-di-configurazione>...]

In pratica, si possono abbinare a un utente una o più variabili di configurazione che fanno riferimento a elementi del file `/etc/dosemu.conf'. È da osservare, in particolare, che si può indicare anche un utente particolare, `all', per fare riferimento a tutti gli utenti a cui non si fa menzione in modo esplicito.

A titolo di compromesso, viene mostrato un esempio di configurazione del file `/etc/dosemu.users' che dovrebbe essere sufficiente nella maggior parte delle situazioni. Si tratta in pratica della versione standard distribuita assieme a DOSEMU, con l'aggiunta di qualche utente ipotetico.

# This is a sample /etc/dosemu.users file
# For more details look at ./doc/README.conf

root c_all		# root is allowed to do all weird things
nobody guest		# variable 'guest' is checked in /etc/dosemu.conf
			# to allow only DEXE execution
guest guest		# login guest treated as 'nobody'

# Utenti inseriti normalmente
tizio
caio
semproni

# If you want to allow limited dosemu to all users, uncomment the line below
#all restricted		# all other users have normal user restrictions

Come si intuisce, l'utente `root' ha tutti i diritti necessari a compiere quello che vuole dall'interno di DOSEMU. Sono previsti gli utenti `nobody' e `guest', a cui sono concesse solo poche cose, mentre agli utenti `tizio', `caio' e `semproni' sono concessi privilegi normali. Infine, appare commentata la direttiva `all restricted', con la quale si potrebbe consentire l'utilizzo di DOSEMU a tutti gli altri utenti, con privilegi ridotti.

236.2.2 /etc/dosemu.conf

La preparazione di `/etc/dosemu.conf' è invece più delicata. Il file di esempio già fornito all'interno del pacchetto di distribuzione di DOSEMU è commentato molto dettagliatamente, però è anche molto complesso. Di seguito vengono indicate solo alcune parti particolarmente importanti. Le altre direttive di questo file, possono essere lasciate come sono, ignorandole, almeno fino a quando non si raggiunge una buona esperienza con l'uso di DOSEMU.

# Viene impostata la mappa della tastiera per uniformarsi alla
# disposizione dei tasti in Italia.
$_rawkeyboard = (1)	# bypass normal keyboard input, maybe dangerous
$_layout = "it"		# one of: finnish(-latin1), de(-latin1), be, it, us
			# uk, dk(-latin1), keyb-no, no-latin1, dvorak, po
			# sg(-latin1), fr(-latin1), sf(-latin1), es(-latin1)
			# sw, hu(-latin2), hu-cwi, keyb-user
$_keybint = (on)	# emulate PCish keyboard interrupt


# Vengono definite le potenzialità dello schermo
# (per poter utilizzare la grafica, come impostato in questo
# esempio, occorre avviare il programma dos con i privilegi
# dell'utente root).
$_video = "vga"		# one of: plainvga, vga, ega, mda, mga, cga
$_console = (1)		# use 'console' video
$_graphics = (1)	# use the cards BIOS to set graphics
$_videoportaccess = (1)	# allow videoportaccess when 'graphics' enabled
$_vbios_seg = (0xc000)	# set the address of your VBIOS (e.g. 0xe000)
$_vbios_size = (0x10000)# set the size of your BIOS (e.g. 0x8000)
$_vmemsize = (1024)	# size of regen buffer
$_chipset = ""		# one of: plainvga, trident, et4000, diamond, avance
			# cirrus, matrox, wdvga, paradise
$_dualmon = (0)		# if you have one vga _plus_ one hgc (2 monitors)


# Viene definito l'uso dei dischetti e dell'immagine del disco C:.
$_floppy_a ="threeinch"	# or "fiveinch" or empty, if not existing
$_floppy_b = ""		# ditto for B:

$_hdimage = "hdimage.first" # list of hdimages under /var/lib/dosemu
			# assigned in this order such as
			# "hdimage_c hdimage_d hdimage_e"
			# If the name begins with '/dev/', then partition
			# access is done instead of virtual hdimage such as
			# "/dev/hda1" or "/dev/hda1:ro" for readonly
			# Currently mounted devices and swap are refused.
			# Hdimages and devices may be mixed such as
			# "hdimage_c /dev/hda1 /dev/hda3:ro"
			# Note: 'wholedisk' is _not_ supported.
$_hdimage_r = $_hdimage	# hdimages for 'restricted access (if different)


# Viene definita la stampante.
$_printer = "lp"	# list of (/etc/printcap) printer names to appear as
			# LPT1, LPT2, LPT3 (not all are needed, empty for none)
$_printer_timeout = (20)# idle time in seconds before spooling out

$_ports = ""		# list of portnumbers such as "0x1ce 0x1cf 0x238"
			# or "0x1ce range 0x280,0x29f 310"
			# or "range 0x1a0,(0x1a0+15)"

236.3 Installare e utilizzare il Dos

Il prossimo problema è quello di riuscire a installare il Dos nel file-immagine che servirà per effettuare l'avvio del Dos stesso. L'immagine in questione, che probabilmente è il file `/var/lib/dosemu/hdimage.first', contiene già una serie di programmi Dos che fanno parte di DOSEMU, e come tali non vanno cancellati. Ma l'immagine che viene distribuita così non è avviabile, e il problema è proprio quello di inserirvi il kernel del Dos e l'interprete dei comandi `COMMAND.COM'.

  1. Preparazione di un dischetto di avvio

    Per prima cosa occorre preparare un dischetto Dos avviabile che contenga qualche programma di utilità indispensabile. Da un elaboratore che stia eseguendo il sistema operativo Dos si procede come segue:

    C:> FORMAT A: /S

    C:> COPY C:\DOS\SYS.* A:

    C:> COPY C:\DOS\FDISK.* A:

    Oltre a questi file converrebbe preparare nel dischetto un programma per la creazione e modifica di file di testo. Servirà per preparare i file `CONFIG.SYS' e `AUTOEXEC.BAT'.

  2. Avvio del dischetto attraverso DOSEMU

    È necessario quindi avviare il Dos contenuto nel dischetto appena creato attraverso DOSEMU. Per fare questo, dall'elaboratore GNU/Linux si avvia DOSEMU nel modo seguente:

    dos -A

    Se tutto è andato bene si avvia il Dos, e dopo la richiesta della data e dell'ora appare l'invito classico (il prompt), per l'inserimento dei comandi attraverso la shell (`COMMAND.COM').

    A:\>
    

  3. Trasferimento del sistema

    Per trasferire nel file-immagine il sistema contenuto nel dischetto, in modo da rendere questa immagine avviabile, occorre procedere prima con la creazione di un MBR (Master Boot Record):

    A:\> FDISK /MBR

    quindi con il trasferimento del sistema:

    A:\> SYS C:

    Se è andato tutto bene, adesso il disco `C:', cioè l'immagine, è pronto. *2*

  4. Controllo del disco C:

    Il disco `C:' dovrebbe contenere alcuni file di DOSEMU. Per verificare il contenuto è sufficiente spostarsi in `C:'.

    A:\> C:

    C:\> DIR

  5. Modifica di config.sys

    Trovandosi in `C:', potrebbe essere conveniente modificare i file `CONFIG.SYS' e `AUTOEXEC.BAT'. Si inizia con `CONFIG.SYS'.

    Si stabilisce di poter utilizzare tutte le lettere di unità (drive) a disposizione.

    LASTDRIVE=Z
    

    Si definisce attraverso il driver `EMUFS.SYS' di DOSEMU che la prossima lettera di disco a disposizione punti alla directory `/var/emul/dos/'. Di conseguenza, quella directory verrà interpretata come disco `D:'

    DEVICE=C:\EMUFS.SYS /var/emul/dos
    

    Viene avviato il driver `EMS.SYS' di DOSEMU che si occupa della gestione della memoria estesa.

    DEVICE=C:\EMS.SYS
    

    Se in seguito sarà opportuno, si potrà sempre apportare modifiche a questo file.

  6. Modifica di `AUTOEXEC.BAT'

    Inizialmente il file non necessita di modifiche. Si vedrà in seguito come configurare al meglio questo file.

  7. Conclusione dell'installazione

    Per terminare la sessione di lavoro dell'installazione occorre fare terminare l'esecuzione di DOSEMU che era stato avviato in precedenza con il comando `dos -A'. Per chiudere si utilizza il programma `EXITEMU.COM':

    C:\> C:\EXITEMU

  8. Verifica

    Se tutto è andato come previsto, il Dos è pronto. Si può provare ad avviare il Dos senza l'uso del dischetto semplicemente con il comando:

    dos

    Se ha funzionato, si otterrà l'invito normale:

    C:\>
    

    Per uscire si utilizza il programma `EXITEMU.COM':

    C:\> EXITEMU

236.3.1 I dischi virtuali con LREDIR.COM

Il programma `LREDIR.COM' è in grado di consentire l'accesso a porzioni del filesystem di GNU/Linux attribuendo una lettera di unità. Per esempio:

C:\> LREDIR X: \linux\fs\/home

fa sì che il disco `X:' corrisponda al contenuto della directory `/home/'. Invece,

C:\> LREDIR Y: \linux\fs\${home}

fa sì che il disco `Y:' corrisponda al contenuto della directory personale dell'utente che sta usando DOSEMU.

236.3.2 Il mouse

Teoricamente, DOSEMU è in grado di gestire da solo il mouse. In pratica potrebbe non essere così. In tal caso conviene provare ad avviare un programma apposito all'interno del `CONFIG.SYS' o di `AUTOEXEC.BAT'.

236.3.3 Un esempio di AUTOEXEC.BAT

Nell'esempio seguente viene utilizzato un programma per la gestione del mouse estraneo a DOSEMU. Il disco `D:' era stato definito implicitamente all'interno di `CONFIG.SYS' attraverso `DEVICE=C:\EMUFS.SYS /var/emul/dos'.

@echo off

LREDIR H: linux\fs\${home}
LREDIR R: linux\fs\/mnt/cdrom

PROMPT=$p$g
PATH=c:\
PATH=%PATH%;D:\;D:\DOS

SET TEMP=D:\TEMP

D:

D:\DOS\MOUSE

ECHO "Questo è DOSEMU. Benvenuto!"

236.3.4 DOSEMU e le console virtuali

Quando viene avviato il Dos attraverso DOSEMU, questo opera nella console virtuale sulla quale ci si trova. Di solito per passare da una console virtuale all'altra è sufficiente premere la combinazione [Alt+F1] o [Alt+F2]... Quando ci si trova su una console virtuale all'interno della quale sta funzionando il Dos, per passare a un'altra si agisce con la combinazione [Ctrl+Alt+F1] o [Ctrl+Alt+F2]...

236.3.5 DOSEMU da X

Per avviare il Dos in una finestra del sistema grafico X, conviene avviare DOSEMU attraverso `xdos' che normalmente è un collegamento simbolico a `dos'.

236.3.6 DOSEMU e Mtools

Nelle sezioni precedenti si è visto l'uso del file-immagine `/var/lib/dosemu/hdimage', che costituisce normalmente il disco `C:' per DOSEMU. Questo file non è gestibile con strumenti Unix normali, soprattutto perché non è un'immagine standard. Si tratta dell'immagine di un piccolo disco fisso contenente una partizione, con l'aggiunta di un'intestazione aggiuntiva.

Questo disco `C:' può essere utilizzato principalmente attraverso strumenti Dos all'interno di DOSEMU, così come è stato già mostrato, oppure può essere raggiunto anche tramite Mtools, purché configurato opportunamente. Infatti, è sufficiente informare Mtools sulla posizione esatta in cui ha inizio la prima partizione all'interno del file-immagine, per potervici accedere anche con questo strumento. Potrebbe trattarsi della direttiva seguente, nel file di configurazione `/etc/mtools.conf'.

drive n: file="/var/lib/dosemu/hdimage.first" partition=1 offset=128

In tal modo, per Mtools, il disco `N:' corrisponderebbe al disco `C:' di DOSEMU.

È importante fare attenzione al valore dello scostamento (offset) che potrebbe cambiare da una versione all'altra di DOSEMU.

236.3.7 Implicazioni sulla gestione dei permessi

Il Dos non è un sistema operativo multiutente e di conseguenza non è in grado di attribuire dei permessi ai file. Quando si utilizza il Dos all'interno di DOSEMU, i permessi vengono gestiti in modo predefinito.

Quando si crea un file gli vengono attribuiti i permessi predefiniti in base a quanto stabilito con la maschera dei permessi; inoltre, l'utente e il gruppo proprietario corrispondono all'utente che ha avviato DOSEMU e al gruppo cui questo utente appartiene.

Quando si accede a un file, l'apparenza delle caratteristiche di questo cambiano a seconda che l'accesso avvenga da parte di un utente rispetto a un altro: l'utente che ha creato il file può modificarlo, un altro potrebbe trovarlo protetto in sola lettura.

In particolare, i file contenuti nel file-immagine che costituisce il disco `C:' hanno le proprietà e i permessi del file-immagine stesso.

Ma il Dos non è in grado di gestire tutte le finezze che può invece amministrare un sistema Unix, di conseguenza, quando si tenta di fare qualcosa che i permessi non consentono, si ottengono per lo più delle segnalazioni di errore che normalmente non si vedono quando si usa il Dos da solo senza emulazioni.

Quando si utilizza il Dos con DOSEMU su un sistema al quale accede un solo utente, non dovrebbero porsi problemi: basta che l'unico utente utilizzi sempre lo stesso nominativo (lo stesso UID). Quando lo si utilizza invece in un sistema al quale accedono più utenti, è ragionevole desiderare che i dati personali possano essere inaccessibili agli altri, e quindi, questo modo trasparente di gestire i permessi può essere solo positivo. Quando si vogliono gestire alcune attività in gruppo si può aggirare eventualmente l'ostacolo utilizzando un utente comune creato appositamente per quel compito.

Un'ultima annotazione deve essere fatta per i file eseguibili che non necessitano dei permessi in esecuzione, come invece richiederebbe GNU/Linux. È generalmente sufficiente che ci siano i permessi in lettura. A volte sono necessari anche quelli in scrittura, ma prima di dare questi permessi è meglio verificare, onde evitare di lasciare campo libero a un possibile virus.

---------------------------

Appunti Linux 2000.04.12 --- Copyright © 1997-2000 Daniele Giacomini --  daniele @ pluto.linux.it


1.) Se ci si accontenta di uno schermo a caratteri, senza grafica e senza cornici, non dovrebbe essere necessario attivare il bit SUID.

2.) Il comando `FDISK /MBR' riguarda precisamente MS-Dos, mentre nel caso di cloni le cose potrebbero essere differenti; per esempio potrebbe essere necessario avviare il programma nel modo solito, e poi specificare la richiesta selezionando una voce da un menu.


[inizio] [indice generale] [precedente] [successivo] [indice analitico] [contributi]