!!! DosEmu auf einem LTSP-Client als lokale Applikation

Da ich auf meinen LTSP-Rechnern (LinuxTerminalServer) ein
DOS-Programm benötigte, musste ich auch diese letzte Hürde für die
Linux-Migration unseres Firmen-Netzwerks nehmen. Das Problem ist
nun, daß DosEmu die gesamte Rechenzeit des Rechners an sich reisst
(Multitasking war seinerzeit noch nicht so verbreitet). Also ist es
trotz der Vorteile des LTSP-Systems besser, diese spezielle
Applikation auf dem Client laufen zu lassen.

Grundsätzlich gibt es zwei Möglichkeiten, das Problem anzugehen.
Man kann bei LTSP beim Booten auf jeder virtuellen Konsole ein
bestimmtes Programm starten. So könnte man den Dosemu auf einer
eigenen Konsole laufen lassen. Grundsätzlich wäre es auch möglich,
einen lokalen X-Server nur für lokale Applikationen zu starten.

Am schönsten ist es jedoch wohl, die lokale Applikation auf dem
normalen (also dem entfernten) X-Desktop anzuzeigen. Aus LTSP-Sicht
handelt es sich um
[http://wiki.ltsp.org/twiki/bin/view/Ltsp/LocalApps local
Applications]. Da der Desktop, den man benutzt, jedoch nicht auf
dem Client, sondern auf dem LTSP-Server läuft, muss man also ein
Programm auf einem fremden Rechner (nämlich dem Client) starten.

!! lokale Applikationen ohne Benutzerverwaltung

Hierzu benötigt man einen ssh-Server auf dem Client. Der wird durch
eine Einstellung in der ''lts.conf'' gestartet. Man muss noch
Server-Keys generieren wie in der Doku beschrieben.

Nun ist in der Doku allerdings noch einiges beschrieben, damit die
Applikation auch unter dem richtigen Benutzer läuft und auf das
richtige Homeverzeichnis zugreift. Hierzu muss u.a. NIS und NFS
eingerichtet werden. Allerdings kann man sich das für Dosemu
sparen. Dieses muss sowieso mit root-Rechten laufen. Meine
Applikation greift nicht schreibend auf das Homeverzeichnis zu,
damit ist auch die Benutzerverwaltung unnötig.

Ich habe mich normal als User eingeloggt und __ssh-keygen__
benutzt, um meinem normalen Benutzer eine Schlüsseldatei zu
erzeugen. Den privaten Schlüssel habe ich dann nach
''/opt/ltsp-4.2/i386/root/.ssh/authorized_keys'' kopiert. Ich
musste noch mit 
{{{
  chmod 755 /opt/ltsp-4.2/i386/root
}}}
dafür sorgen, daß der sshd keine Mucken mehr macht. Nach dem
nächsten reboot des Clients läuft der sshd und man kann sich als
Benutzer passwortlos auf dem Client als root einloggen.

!! Dosemu-Paket erstellen

Nun geht es daran, eine fremde Applikation (also dosemu) in das
LTSP-System zu installieren. Da alle Linux-Systeme gleich sind,
habe ich mir zuerst gedacht, ich gehe von der Debian-Installation
aus. Ich habe mit
{{{
  aptitude download dosemu
}}}
das *.deb-Paket heruntergeladen und dieses dann mit
{{{
  mkdir dosemu
  dpkg -x dosemu_1.2.1-3_i386.deb dosemu
}}}
ausgepackt. Dann habe ich aus dem dosemu-Verzeichnis alles
gelöscht, was ich nicht für essentiell wichtig hielt
(Dokumentationen, freedos-Klamotten, Versionen für Ausgabe auf den
X-Server, die ich nicht zu benutzen gedenke, etc.). Dann habe ich
mit
{{{
  ldd usr/bin/dosemu.bin
}}}
nachgesehen, welche Bibliotheken das Programm benutzt. Die
Bibliotheken, die ich nicht im LTSP-root-Baum finden konnte, habe
ich ebenfalls in das dosemu-Verzeichnis kopiert. Dieses ganze
Verzeichnis habe ich in ein Archiv gepackt (man weiss ja nie, wann
man's mal wieder braucht)
{{{
  cd dosemu
  tar czf ../ltsp-dosemu.tgz *
}}}
und dann dieses Archiv in den LTSP-root-Baum ausgepackt.

Dann habe ich meine Dosemu DOS-Installation in das Home-Verzeichnis
von root für den Client kopiert. Wie ich diese Installation
aufgesetzt habe, soll hier nicht Thema sein. Das ist eher ein Thema
für die DosEmu-Seite.

!! Konsole einrichten

Ich muss nun noch dafür sorgen, daß ich ein Icon habe, mit dem ich
eine Konsole starte, diese auf die richtige Schriftgröße und
Terminalgröße setze und dann per ssh den dosemu und evtl. sogar
verschiedene DOS-Programme starten kann.

Die KDE-__Konsole__ ist, was die programmgesteuerte Konfiguration
anbetrifft, ein sehr seltsames Programm. Dennoch habe ich mein
Problem letztlich lösen können. Zuerst habe ich die Schriftart auf
"sehr gross" gestellt (Damit ein 80x25-DOS-Fenster auch den
1024x768er Bildschirm füllt), das Fenster auf eine
nicht-Vollbild-Größe verkleinert und dies dann als
Standard-Einstellung gespeichert. Alle übrigen Einstellungen gebe
ich lieber auf der Kommandozeile an:
{{{
  konsole --nomenubar --notoolbar -TDOS-Fenster --noscrollbar --vt_sz 80x25 --icon etc/bayen/dosicon.xpm -e ssh root@${DISPLAY/:*/} -t dosemu -input "programm\\\\r"
}}}
Ganz hinten ersetze ich ''programm'' durch den Namen meiner
DOS-Applikation. Mein Programm läuft nun innerhalb der Konsole aber
ohne die ganzen Konsole-Menüs drumherum. Wahrscheinlich geht das
mit ''xterm'' oder sowas noch einfacher, aber jetzt läufts und ich
habe im Moment keine Not mehr, hier noch weiterzuforschen.
(Natürlich habe ich meine Konsole-Grundeinstellungen verstellt -
wenn mich das in Zukunft stört, kann ich ja wieder in die Forschung
einsteigen.)

Diesen obigen Befehl baut man nun in ein Icon ein. Ich habe dazu
einen Programmknopf von Konsole neu erstellt und als Befehl die
obige Zeile eingegeben. Als Icon habe ich einen Screenshot meiner
DOS-Applikation als XPM abgespeichert und dem Button zugeordnet
(Das in der Befehlszeile angegebene Icon wird dann nach dem Start
für das Fenster verwendet, sie sind bei mir identisch). Fertig!

!! Drucken vom Client aus

Wenn man mit lokalen Applikationen drucken will, gibt es
verschiedene Möglichkeiten. Man kann z.B. ganz schnell '''lp'''
durch '''ssh user@ltspserver lp''' ersetzen, hat dann aber wieder
die Authentifizierung am Hals bzw. muss seinen Useraccount für alle
Clients (und damit letztlich alle anderen Benutzer) öffnen. Am
elegantesten wäre es, einen normalen CUPS-Client zu installieren.
Auch hier habe ich wieder folgende Vorgehensweise angewandt. Die
benötigten Abhängigkeiten habe ich dabei nach "try and error"
herausgefunden, wobei es natürlich auch möglich ist, alle im
Debian-Paket angegebenen Abhängigkeiten zu installieren. Deren
Liste muss man dann allerdings von Hand aus den Paketbeschreibungen
heraussuchen.
{{{
  aptitude download cupsys-bsd cupsys-client libcupsys2-gnutls10
libgnutls11 libtasn1-2 libcrypt11 libgpg-error0
  mkdir cupsys-client
  dpkg -x cupsys-client_1.1.23-10sarge1_i386.deb cupsys-client
  dpkg -x libcupsys2-gnutls10_1.1.23-10sarge1_i386.deb
cupsys-client
  ...
  cd cupsys-client
  rm -r usr/share
  tar czf ../ltsp-cupsys-client.tgz *
}}}
Das erzeugte Paket entpackt man dann in das root-Verzeichnis der
LTSP-Installation. Der Umweg über das tgz-Paket erspart einem, die
ganze Sache beim nächsten LTSP-Update ganz von vorne machen zu
müssen.
{{{
  cd /opt/ltsp-4.2/i386
  tar xzf ~/ltsp-cupsys-client.tgz
  echo "ServerName printserver" >>etc/cups/client.conf
}}}
(Statt ''printserver'' sollte der Name des CUPS-Servers, also i.A.
der des LTSP-Servers eingetragen werden.) Nun muss noch ein
Spool-Verzeichnis beim Hochfahren des Clients angelegt werden:
{{{
  echo "mkdir -p /var/spool/cups/tmp" >>etc/rc.sysinit.rc
}}}
Jetzt kann man auf dem Client ganz normal drucken. Um also den
Dosemu zum Drucken zu bekommen, schreibt man in
''/opt/ltsp-4.2/i386/dosemu/dosemu.conf'' oder in die
''/opt/ltsp-4.2/i386/root/.dosemurc'' folgendes:
{{{
  $_printer = "Drucker1 Drucker2"
}}}
Nun hat man im Beispiel LPT1 und LPT2 im Dosemu und kann munter
losdrucken.