UQLX-RPM-Pakete
- die letzten (s.u.) -
UQLX ist ein (z.Zt.) freier Emulator des Sinclair QL für unix- und linux-Systeme.
Dies ist keine eigenständige UQLX-Version, sondern neben dem eigentlichen Zweck des UQLX vor allem (m)ein ganz privates Übungs- und Lern-Vehikel, das daneben auch einen gewissen Gebrauchswert erlangt hat - aus welchem Grunde es hier öffentlich gemacht wurde. Weiter soll das Paket eine handliche Ausstattung für den ersten Einsatz des UQLX liefern. Neben einigen systemspezifischen Patches zum UQLX sind auch die beigefügten QL-Programme rsp. -Texte reines Privatvergnügen und Vorschläge, mitgegeben in der Hoffnung, daß sie nützen mögen...
Das authentische UQLX-Original samt Dokumentation kommt nur von dessen Verfasser (s.u.)!
Der Redhat-Paket-Manager ist ein überaus bequemes Hilfsmittel zur ordentlichen Verwaltung von Programmen. Es läßt sich damit leicht die Übersicht über die vielen Files und deren Abhängigkeit untereinander behalten, aus denen eine Programmsammlung bestehen kann.
Darum habe ich aus einer aktuellen - nicht unbedingt der jüngsten - UQLX-Distribution die RPM-Pakete für ausführbare Programme und die Programmquellen zusammengestellt.
Die benutzte RPM-Version ist 2.5.5.
Zum Compilieren direkt aus dem RPM-Paket muß "patch" ab Version 2.5
vorliegen.
Zum Auspacken der Quellen wird neben "tar" und "gzip" auch "bzip2"
benötigt.
Einwandfreie Installation, Funktion der Programme und fehlerfreies Compilieren sind in meinem Rechnersystem (Suse/Caldera rsp Debian Linux, libc5 oder glibc2.0 rsp 2.1, Kern 2.2.10, i586 ibm-typ pc) eingehend geprüft. Falls anderswo ungeeignete Strukturen oder Programmfehler entstehen, bitte ich (.hpr, H-Peter Recktenwald, Berlin; phpr@snafu.de) um Nachricht, damit ich die Fehlerursache finden und ggf. eine neue Version zusammenstellen kann.
Neben der Hilfe durch Ausprobieren dieser RPM-Pakete wäre es sicher auch ganz nett, wenn jemand die RPM-specfile-Daten für andere Systeme beisteuern könnte...
Muß mal Luft ablassen:
Nachdem die Suse-6.2 wieder mal mit ihren krankhaften "Anpassungen"
erschien, war erneut alles für die Katz; z.B. mußte die gesamte
RPM-Konstellation geändert werden. Jügste Scherze u.a. bei "install",
das mit Fehler abbricht, wenn ein schon vorhandenes Verzeichnis eingerichtet
werden soll, oder "chgrp -R gruppe .*", das nun auch die übergeordneten
Verzeichnisse (und damit das ganze System!) bearbeitet. Von Problemen mit den
diversen libc6-Varianten ganz zu schweigen, wo Programme mal spielen, beim
nächsten Systemstart aber nicht ("man"), oder auch so ganz nach belieben
("lpr"). Und dann die Schlaumeiersprüche über die ach so gewaltigen
"Verbesserungen" der Distribution...
Das macht die Versuche mit dem UQLX nicht gerade zur reinen Freude,
der QL selber ist (mir) zu langsam, und drum
ENDE des dummen Spiels:
Mein QL/ZX81-Kram steht zum
Verkauf (DM 1200 +
p.p - s. "front", erste Seite).
Alle Änderungen werden mit Hilfe eines Patch- und einiger anderer zusätzlicher Files erledigt, sodaß aus dem Quellenpaket ggf. leicht der Originalzustand (wieder)hergestellt werden kann.
Einige Probleme betreffs richtiger Einstellung
der Zugriffsrechte und der Programmausführung verschwinden, wenn
ein für die Gruppe "users"
uneingeschränkt zugängliches Verzeichnis "/root/.qm" mit dem Unterverzeichnis "romdir" bereits vor der Installation
existiert.
Es kann auch schon genügen, nach der Installation irgendein "xterm" zu
starten, damit die neuen Environment-Daten aktiviert werden. Am einfachsten
ist die Installation durch "root".
Ein installierender nicht-root-Benutzer
muß (aktiv) der Gruppe "users" angehören.
Neben o.g. ".qm" sollten dann auch die RPM-Verwaltungsdaten und der
Installationspfad mit entsprechenden Zugriffsrechten versehen sein, z.B.
Besitzer "root", Gruppe "users", Zugriff rwxrwxr-- rsp. rw-rw-r--. Die
wirklich zutreffenden Verzeichnisse wird jeder selbst herauszufinden haben,
solange Distributoren den Filesystem-Standard noch so "virtuos"
interpretieren, wie etwa bei der "SuSE" (5.3 ein Bild des Jammers, 6.2 etwas
besser).
- Wobei dieses Beispiel wegen der freizügigen Zugriffsrechte mit Vorsicht zu genießen ist -
Die zur Verwendung innerhalb des emulierten Systems beigefügten Programme und Texte basieren auf den Bedingungen des QDOS (mit SuperBASIC, MINERVA 1.89/1.97), wie sie u.a. in "PiQ" beschrieben sind.
S.Basic-Erweiterungen sämtlich großgeschrieben,
mit PIF nur dessen Mauszeiger im UQLX-Bild (dazu neue Compiler-Vari QLMOUSE).
T6: Neubearbeitung des TK2 2.13 für UQLX und die MINERVA-Versionen 1.89 rsp 1.97:
Fehler berichtigt, Müll entfernt, Kommandos für die "level-2"-Filesysteme (mit Directories) hinzugefügt, rsp. das Vorhandene entspr. ergänzt; LRESPR auch für Files mit ROM-Header, Einrichten von Basic-Jobs, S.Basic Einzelschritt-Betrieb, Command Line History (ähnlich ALT/ENTER, jedoch in brauchbarer Form), u.v.m.
Die Versionen T6.. spielen NUR mit der jeweils zugehörigen MINERVA-Version, in allen anderen Konstellationen wird irgendwann das System zusammenbrechen.
M89: MINERVA 1.89 u.a. so korrigiert, daß nun bis zu 16MB Speicher benutzt werden kann.
Ermittlung der Puffergröße bei fs_flood für übergroße Bildschirmmaße ergänzt.
QDOS-Kanal 0 gegen CLOSE geschützt (jedoch nicht in der QDOS-Trap!).
Neben weiteren kleineren (compatiblen!) Änderungen auch ein paar Fehler korrigiert.
T6-Variante als 80K-ROM an M89M fest angefügt.
S.Basic
IO2-Sammlung en bloc, nur Code, jüngste Version (8/99).
PEX speziell für UQLX praeparierte Version 35, ohne MODE & CLOSE.
P.E. aus
PIF 1.71 (nur) für UQLX, verkürzt, optimiert, ohne Config-Block & Mäuse.
WMAN 1.52, HOTKEY 2.28, THING 0.05
Neue Pakete (Inhalt einzeln auch >hier< als zip-Archive abrufbar):
Paket erzeugt mit egcc im Debian 2.1 System (glibc 2.1, i586, Kern
2.2.10)
TCP/IP nicht mitcompiliert: Zum einen verbietet sich die direkte
Inet-Verbindung wegen der je nach Betriebsart notwendigen "root"-Rechte des
UQLX von selbst! Zum andern ist der UQLX so etwas schneller. Ohnehin scheint
(mir) der Nutzen eine solchen Netzverbindung ausgerechnet in der
Linux-Umgebung einigermaßen fragwürdig - zumal locale Netze dort
ganz einfach über das Filesystem erreichbar gemacht werden können.
Im übrigen, wer's haben will, nimmt die Quellen.
In der vorliegenden Form und im o.g. Rechnersystem erreicht der Emulator ungefähr die halbe Arbeitsgeschwindigkeit der QXL, in einigen Bereichen (Files, Bildschirm) sogar ein vielfaches davon, sodaß es sich mit dem UQLX recht gut arbeiten läßt...
Hiermit werden die ausführbaren Programme installiert. Ziel ist "/usr/local/uqlx", wobei der Teil "/usr/local" mit Hilfe der --prefix-Angabe in einen beliebigen (vorhandenen) Pfad geändert werden kann, z.b.:
rpm -U --prefix /opt/local uqlx.1386.rpm
für die Installation nach "/opt/local/uqlx".
Dort werden die Unterverzeichnisse "bin"für die UQLX-Varianten, "romdir" für die zu verwendenden QL-ROM-Abbilder und "prog" für die Laufwerksverzeichnisse des Emulators angelegt; dazu, falls noch nicht vorhanden, ".qm" im aktuellen HOME-Verzeichnis, ggf. mit Links auf "romdir" und "prog", sowie "docs" als Verweis auf das Dokumentationsverzeichnis.
Verzeichnisse und Files werden für den Zugriff nur durch Besitzer root und Gruppe users angelegt. Installation muß vom Benutzer root durchgeführt werden.
Die Dokumentation (html und dvi) gelangt in das
entsprechende Standardverzeichnis, wie es in den RPM-Einstellungen vorgegeben
ist, Unterverzeichnis "uqlx-{versionsdatum}" - vorausgesetzt,
es findet sich ein brauchbares File "rpmrc" - was z.B. bei der suse 6.2 mit
RPM-3.0 nicht mehr der Fall ist!
Die X-Vorgaben und Emacs rsp. vi Tagfiles finden sich ebenfalls dort.
Sofern das Verzeichnis existiert und die Files darin noch nicht vorhanden sind, werden die X-Vorgaben Xql und Xqlaw nach "/usr/X11/lib/X11/app-defaults" übertragen. Sie bleiben bei De-Installation erhalten.
Wenn die Datei "~/.uqlxrc" mit den Programmvorgaben noch nicht vorhanden ist, wird sie automatisch vom Muster im doc-Verzeichnis dorthin copiert. Gleiches gilt für die Compiler-Variablen mit der Datei "~/.uqlx_cprefs". Waren jene vor der UQLX-Installation bereits vorhanden, werden sie anstelle der Vorgaben in die Dokumentation übernommen. Die weiter angelegte "~/.uqlxdirs" wird zur ordentlichen Entfernung des Programms benötigt, sie sollte darum weder gelöscht noch modifiziert werden. Bei De-Installation verschwindet sie ebenfalls.
Wegen der Suche nach evtl. schon vorhandenen UQLX-Verzeichnissen kann die Installation ein wenig länger dauern, als erwartet.
Die Quellen lassen sich z.B. wie folgt installieren und compilieren:
rpm -U uqlx.src.rpm
packt die Files aus und bringt sie in den RPM-Standardverzeichnissen
unter.
Im SPECS-Verzeichnis werden dann mit
rpm -ba uqlx-{versionsdatum}-{nummer}.spec
ggf. die Programme compiliert und und installiert, sowie die Binär- und Quellen-Pakete erzeugt.
Interessant - oder aufschlußreich? - sind die Ergebnisse nach
Compilieren mit gcc rsp. egcc: Das in meinem derzeitigen System (debian 2.1,
Kern 2.2.10, glibc) mit egcc erzeugte Programm ist bei sonst identischen
Bedingungen um gut 20% schneller! Die Installation durch gewöhnliche
"user" gelingt problemlos, und "Xgui" spielt ohne alle Mätzchen mit
setuid o.dgl.
Frage mich niemand, woran das liegen mag...!
Ein paar Programme (mit Quellen) und Texte für den Start (flp3 500K, win1 6M) ...
Dieselben Programme und Assembler-/Basic-Quellen sind auch einzeln als zip-Archive verfügbar, darum gibt es hierzu kein Quellen-Paket. - Inhaltsverzeichnis
rpm -U uqlx.prg.rpm
reiht sie in das vorhandene "prog"-Verzeichnis ein. Optionale Angabe des Installationspfades mit --prefix ist wie beim UQLX-Paket zulässig - und erforderlich, wenn sie vorher für uqlx benutzt wurde. Evtl. muß hier auch "--force" angegeben werden, da der RPM partout nicht zum Ersetzen von Dateien aus dem grundlegenden uqlx-Paket zu bewegen war...
Mit den Aufrufen
rpm --checksig uqlx.i386.rpm
rpm --checksig uqlx.src.rpm
rpm --checksig uqlx.prg.rpm
läßt sich die Unversehrtheit der Pakete prüfen.
Wenn deren Zustand in Ordnung ist, erscheint folgender Text:
{rpm-file}: size pgp md5 OK
Auskunft darüber, ob eine gewisse Datei zu einem RPM-Paket gehört und ggf. zu welchem, gibt u.a.:
rpm -q --whatprovides {virtuellespaket}
was im Beispiel UQLX mit jeweils den Namen "uqlx", "qm", "qm-aw" und "Xgui" den Namen des RPM-Pakets liefert, aus dem diese installiert wurden. "virtuellespaket" ist hierbei das, was unter dem Stichwort "provides" bei der Installation oder rpm -qi (s.u.) angezeigt wird.
Liegen ungeeignete Daten an Stellen, die zu Fehlinterpretation durch RPM führen, wird u.U. die Installation abgewiesen. Dies tritt auch ein, wenn z.B. verlorengegangene Dateien aus dem Installationspaket erneuert werden sollen. Ist ansonsten grundsätzlich alles in Ordnung, hilft dann im allgemeinen die Option "--force" weiter:
rpm -U --force altes-paket-nochmal-xxx-.rpm
Mit der erzwungenen Installation kann man sich auch behelfen, wenn einmal die De-Installation eines Pakets nicht (mehr) gelingen will. Die "--force"-Option läßt sich darauf direkt nicht anwenden; nachdem aber ein Paket durch erzwungene Neu-Installation in Ordung gebracht wurde, läßt es sich anschließend ordentlich entfernen - womit dann auch die alte Installation verschwindet, rsp von Hand entfernt werden kann, ohne die RPM-Systemarchive zu stören.
"--force" kann auch erforderlich werden, wenn ergänzende Pakete Dateien enthalten, deren Namen in dem zu erweiternden Grundsystem bereits vorhanden sind: Mir ist es nicht gelungen, z.B. den "Konflikt" aufzuheben, der die Installation des ..prg..-Pakets dadurch verhindert, daß das Überschreiben von ein paar Dateien in jüngerer Version vom RPM schlicht verweigert wird.
"paket" ist nur der Namensteil ohne Versions- und Systembezeichnung, bei "uqlx-990303-5.i386.rpm" z.B. "uqlx".
rpm -qf {pfad+filename}
gibt zu jedem in der eigentlichen Installationsprocedur eingerichteten Filenamen den (vollen) Namen des zugehörigen RPM-Paketes aus - bei wessen De-Installation sie z.B. entfernt würden.
rpm -qi {paket}
liefert allgemeine Informationen zum Paket aus dessen Header-Teil.
rpm -ql {paket}
zeigt die Namen aller durch die Installationsprocedur bearbeiteten Files an.
# SYSROM = minerva_rom.1-97 ROMDIR = ~/.qm/romdir RAMTOP=16000 ## PRINT=lpr -Praw # spielt nicht immer (s.u.): PRINT = cat > /dev/lp0 CPU_HOG=0 FAST_START=1 REAL_WHITE=0 STRICT_LOCK=1 SIZE_1=640x400 SIZE_2=800x600 SIZE_3=1024x768 SER1=/dev/ttyI0 ## (s.u.) ## SER2=/dev/ttyS1 # spielt nicht: # SER3=/dev/ttyI2 # SER4=/dev/ttyS1 # damit druckt auch QUILL ganz problemlos: SER2 = /dev/lp0 DEVICE = MDV1,~/.qm/prog/mdv1/ DEVICE = MDV2,~/.qm/prog/mdv2/ DEVICE = MDV3,~/.qm/prog/win1/ DEVICE = MDV4,~/.qm/prog/win2/ DEVICE = MDV5,~/.qm/prog/win3/ DEVICE = MDV8,~/.qm/prog/win4/ DEVICE = MDV6,~/.qm/prog/win5/ DEVICE = MDV7,~/.qm/prog/win6/ # DEVICE = MDV8,~/.qm/prog/ DEVICE = FLP1,~/.qm/prog/flp1/ DEVICE = FLP2,~/.qm/prog/flp2/ DEVICE = FLP3,~/.qm/prog/flp3/ DEVICE = FLP4,/flp1,qdos-fs DEVICE = FLP5,/flp1 DEVICE = FLP6,~/.qm/prog/qxw/d,qdos-fs DEVICE = FLP7,/cdrom DEVICE = FLP8,~/ # qxl win DEVICE = WIN1,/hda1-c/qxl.win,qdos-fs DEVICE = WIN2,/hda2-f/qxl.win,qdos-fs DEVICE = WIN3,/hda3-g/qxl.win,qdos-fs DEVICE = WIN4,/hda1-c/q4/qxl.win,qdos-fs DEVICE = WIN5,/hda1-c/q5/qxl.win,qdos-fs DEVICE = WIN6,/hda1-c/q6/qxl.win,qdos-fs # DEVICE = WIN7,~/.qm/prog/aux DEVICE = WIN8,/ DEVICE = RAM1,/tmp/.ram1-%x,clean DEVICE = RAM2,/tmp/.ram2-%x,clean # ...und irgendwer nervt mit vermurksten "ram8"-archiven: DEVICE = RAM8,/tmp/.ram8-%x,clean # auch (QDOS-konforme) phantasienamen gelten und ersparen # DEV-, SUB- oder ähnliche Hilfsmittel; allerdings wird öfter # ein DEL_DEFB erforderlich werden (bei Fehler "not found"): DEVICE = HOM1,/home/ql/.qm/win2/doc
## .uqlx_cprefs ## USE_XAW=no LOCAL_OPTFLAGS=-O3 \ -malign-loops=4 \ -malign-functions=4 \ -malign-jumps=4 \ -finline-functions \ -fexpensive-optimizations # die "-malign"-optionen haben wesentliche (ca 20%!) # steigerung der ausführungsgeschwindigkeit bewirkt, # -DHOST_ALIGN=4 macht den code länger, sonst ohne wirkung # mit BUILDFLAGS zusammengefuehrt: BUILD_SPECIALFLAGS= -D__i586__ \ -m486 \ -DU_NODDOT \ -DNEWSERIAL \ -DNEWPTY \ -DUSE_IPC \ -DDO_GRAB \ -DSH_MEM # mit BUILD_SPECIALFLAGS zusammengefuehrt: LOCAL_DEFINES= -UIPDEV -DHPR_STYLE # -DIPDEV macht das ganze nur langsamer # -DHPR_STYLE für großgeschriebene S.Basic-Namen LOCAL_INCLUDES= # LOCAL_LIBPATH= # LOCAL_LINKFLAGS= # als LINKFLAGS uebernommen