zurück : weiter : english


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.

UQLX-Variante:

S.Basic-Erweiterungen sämtlich großgeschrieben,
mit PIF nur dessen Mauszeiger im UQLX-Bild (dazu neue Compiler-Vari QLMOUSE).

Zusätzlich im Paket:

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):


uqlx.i386.rpm (800K)

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.

uqlx.src.rpm (700K)

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...!

uqlx.prg.rpm (2,4M)

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...


Paketzustand prüfen

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

Paketinhalt

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.

Wenn einmal etwas schiefgegangen ist:

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.

Andere gelegentlich recht hilfreiche Abfragen:

"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.


Beispiel für ".uqlxrc"

#
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

 

 

Beispiel für ".uqlx_cprefs"

## .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


zurück : weiter : english


(count)