.\" -*- coding: UTF-8 -*- .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" Generated by scdoc 1.11.4 .\" Complete documentation for this program is not available as a GNU info page .nh .ad l .\" Begin generated content: .\"******************************************************************* .\" .\" This file was generated with po4a. Translate the source file. .\" .\"******************************************************************* .TH RPM\-LUA 7 "8. Januar 2026" "RPM 6.0.1" .PP .SH BEZEICHNUNG .PP rpm\-lua \- in RPM eingebetteter Lua\-Interpreter .PP .SH ÜBERSICHT .PP %scriptlet \-p .PP %{lua:…} .PP .SH BESCHREIBUNG Lua ist eine universelle Programmiersprache, die speziell für die Einbettung in andere Programme entwickelt wurde. RPM enthält einen eingebetteten Lua\-Interpreter für die Verwendung in erweiterten \fBrpm\-macros\fP(7) und Transaktions\-Scriptlets. .PP Der eingebettete Lua\-Interpreter ermöglicht verschiedene Dinge, die mit einfachen Makros oder externen Shell\-Skripten schwierig oder unmöglich sind, beispielsweise die Beseitigung von Abhängigkeitsschleifen aus Paket\-Scriptlets. .PP .SH MAKROS .SS "Zugriff auf Makros" Die \fBrpm\fP\-Erweiterung bietet verschiedene Funktionen für den Umgang mit Makros. Der bequemste Weg, aus der RPM\-Lua\-Umgebung auf \fBrpm\-macroproc\fP(7) zuzugreifen, ist jedoch über die globale \fBmacros\fP\-Tabelle. .PP Lua unterscheidet nicht zwischen Tabellenindex\- und Feldnamensyntax, daher sind \fBmacros.\&foo\fP und \fBmacros['\&foo'\&]\fP gleichwertig. Verwenden Sie, was besser zum Zweck passt. .PP Wie bei jeder echten Lua\-Tabelle werden nicht vorhandene Elemente als \fBnil\fP zurückgegeben. Zuweisungen können zum Definieren oder Aufheben der Definition von Makros verwendet werden. .PP Beispiel: .nf .RS 4 if not macros\&.yours then macros\&.my = \&'my macro\&' end local v = { \&'_libdir\&', \&'_bindir\&', \&'_xbindir\&' } for _, v in ipairs(v) do if not macros[v] then macros[v] = \&'default\&' end end .fi .RE .PP Alle Makros nutzen dieselbe globale Lua\-Ausführungsumgebung. .PP .SS "Aufruf parametrischer Makros" Parametrische Makros (einschließlich aller eingebauten Makros) können Lua\-nativ über die \fBmacros\fP\-Tabelle aufgerufen werden, entweder mit der Syntax \fBmacros.\fP\fIName\fP() oder \fBmacros[\fP\fIName\fP\fB]\fP(). .PP Argumente werden über ein einzelnes Argument übergeben, das entweder .PD 0 .IP \(bu 4 eine einzelne Zeichenfolge, die in diesem Fall mit den makro\-nativen Regeln expandiert und aufgeteilt wird, .IP \(bu 4 oder eine Tabelle ist. In diesem Fall werden die Tabelleninhalte als wörtliche Argumente verwendet, die in keiner Weise erweitert werden. .PD .PP Beispiel 1: .nf .RS 4 macros\&.with(\&'foo\&') .fi .RE .PP Beispiel 2: .nf .RS 4 macros\&.dostuff({\&'one\&', \&'two\&', \&'three\&'}) .fi .RE .PP .SS "Zurückliefern von Daten" Per Definition landet alles, was in Lua mit \fBprint\fP() aufgerufen wird, in der Makroerweiterung. Lua\-Makros können ihre Ausgabe auch mit \fBreturn\fP ausgeben, wodurch Hilfsmakros für die Programmierung natürlicher aussehen. .PP Beispiel: .nf .RS 4 %sum() %{lua: local v = 0 for _, a in ipairs(arg) do v = v + tonumber(a) end return v } .fi .RE .PP .SS "Optionen und Argumente" Parametrische Lua\-Makros erhalten ihre Optionen und Argumente als zwei lokale Tabellen \fBopt\fP und \fBarg\fP, wobei \fBopt\fP verarbeitete Optionswerte enthält, dessen Position (Tabellenschlüssel) durch das Optionszeichen bestimmt wird, und \fBarg\fP numerisch indizierte Argumente enthält. .PP Diese Tabellen sind immer vorhanden, unabhängig davon, ob Optionen oder Argumente tatsächlich übergeben wurden, um die Verwendung zu vereinfachen. .PP Beispiel: .nf .RS 4 %foo(a:b) %{lua: if opt\&.b then print(\&'do b\&') else print(\&'or not\&') end if opt\&.a == \&'s\&' then print(\&'do s\&') end if #arg == 0 then print(\&'no arguments :(\&') else for i = 1, #arg do print(arg[i]) end end } .fi .RE .PP .SH SCRIPTLETS Das interne Lua kann als Interpreter von RPM für alle Transaktionsscriptlets verwendet werden, einschließlich Triggern und Dateitriggern: .PP Beispiel: .nf .RS 4 %pre \-p print(\&'Hello from Lua\&') .fi .RE .PP Während das bewährte \fI/bin/sh\fP für paketbezogene Skriptaktivitäten in der Regel praktischer ist, bietet der eingebettete Lua\-Interpreter einige einzigartige Vorteile für Transaktionsscriptlets: Den Paketen werden keine zusätzlichen Abhängigkeiten hinzugefügt, was dazu beiträgt, Abhängigkeitsschleifen zu vermeiden. Das kann beim frühen »Bootstrap«\-Paketsatz bei einer Erstinstallation ein entscheidender Unterschied sein. .PP Insbesondere ist ein eingebettetes Lua\-Skript die einzige allgemein nutzbare Option in \fB%pretrans\fP\-Skripten während der Erstinstallation eines Systems. .PP Eingebettetes Lua ist außerdem viel schneller als die Ausführung eines möglicherweise schwergewichtigen Interpreters, nur um ein paar Zeilen Shell\-Skript auszuführen. .PP Hinweis: Scriptlets, die das interne Lua verwenden, sollten keine Annahmen über die gemeinsame Nutzung der Ausführungsumgebung mit anderen Scriptlets treffen. .PP .SS Argumente Scriptlet\-Argumente sind über eine globale \fBarg\fP\-Tabelle zugänglich. .PP Hinweis: In Lua beginnen Indizes üblicherweise bei 1 (eins) statt bei 0 (null), und die RPM\-Implementierung folgt dieser Vorgehensweise, ob nun gut oder schlecht. Daher weichen die Indizes der Scriptlet\-Argumente um eins von der allgemeinen Erwartung ab, die auf traditionellen Scriptlet\-Argumenten basiert. Das Argument, das die Anzahl der installierten Paketinstanzen enthält, ist \fBarg[2]\fP, und das ähnliche Argument für Triggerziele ist \fBarg[3]\fP, im Gegensatz zu den traditionellen \fB$1\fP und \fB$2\fP in Shell\-Skripten. .PP Beispiel: .nf .RS 4 %postun \-p if arg[2] == 0 then print("erasing") end .fi .RE .PP .SS "Verschiebbare Pakete" Scriptlets verschiebbarer Pakete enthalten zusätzlich eine globale \fBRPM_INSTALL_PREFIX\fP\-Tabelle, die alle möglichen Präfixe des Pakets enthält. .PP Hinzugefügt: 4.18.0 .PP .SS Rückgabewert Obwohl Scriptlets normalerweise nicht fehlschlagen dürfen, können Sie den Scriptlet\-Fehlerstatus bei Bedarf mit der Lua\-Funktion \fBerror(\fP\fIMeldung\fP, [\fIStufe\fP]\fB)\fP signalisieren. .PP .SH SPEC\-DATEIEN Im Kontext einer \fBrpm\-spec\fP(5)\-Dateianalyse mit \fBrpmbuild\fP(1) oder \fBrpmspec\fP(1) enthält die RPM\-Lua\-Umgebung die folgenden .spec\-abhängigen globalen Tabellen: .PP \fBpatches\fP .RS 4 Die Dateinamen der Patches in der Reihenfolge ihres Erscheinens in der \&.spec\-Datei. .PP .RE \fBpatch_nums\fP .RS 4 Die Nummern der Patches in der Reihenfolge ihres Erscheinens in der \&.spec\-Datei. .PP .RE \fBsources\fP .RS 4 Die Dateinamen der Quellen in der Reihenfolge ihres Erscheinens in der \&.spec\-Datei. .PP .RE \fBsource_nums\fP .RS 4 Die Nummern der Quellen in der Reihenfolge ihres Erscheinens in der \&.spec\-Datei. .PP .RE Beispiel: .nf .RS 4 for i, p in ipairs(patches) do print(string\&.format("echo %d: %sn", patch_nums[i], patches[i])) end .fi .RE .PP .SH ERWEITERUNGEN Zusätzlich zu den Lua\-Standardbibliotheken (abhängig von der Lua\-Version, gegen die RPM gelinkt ist) sind die folgenden Erweiterungen im internen Lua\-Interpreter von RPM verfügbar. Diese können in allen Kontexten verwendet werden, in denen auch das interne Lua verwendet werden kann. .PP .SS RPM\-Erweiterung .PP Die folgenden RPM\-spezifischen Funktionen sind verfügbar: .PP \fBb64decode\fP(\fIArgument\fP) .RS 4 Dekodiert das Argument mit \fBbase64\fP(1). Siehe auch \fBb64decode\fP(). .PP Beispiel: .nf .RS 4 blob = \&'binary data\&' print(blob) e = rpm\&.b64encode(blob) print(e) d = rpm\&.b64decode(e) print(d) .fi .RE .PP .RE \fBb64encode\fP(\fIArgument\fP [, \fIZeilenlänge\fP]) .RS 4 Kodiert das Argument mit \fBbase64\fP(1). Die Zeilenlänge kann optional über ein weiteres Argument angegeben werden. Siehe auch \fBb64encode\fP(). .PP .RE \fBdefine\fP("\fIName\fP \fITextkörper\fP") .RS 4 Definiert ein globales Makro dieses \fINamens\fP mit dem angegebenen \fITextkörper\fP. Siehe auch \fBMAKROS\fP. .PP Beispiel: .nf .RS 4 rpm\&.define(\&'foo 1\&') .fi .RE .PP .RE \fBexecute\fP(\fIPfad\fP [, \fIArgument1\fP [,…]) .RS 4 Führt einen externen Befehl aus. Dies ist beim Ausführen externer Hilfsbefehle praktisch, ohne auf die Shell zurückgreifen zu müssen. Der angegebene \fIPfad\fP ist der auszuführende Befehl, optional gefolgt von einer Reihe von Argumenten, die an den Befehl übergeben werden. .PP Für eine bessere Kontrolle über die Prozessausführung und die Ausgaben, siehe \fBrpm.spawn\fP(). .PP Hinzugefügt: 4.15.0 .PP Beispiel: .nf .RS 4 rpm\&.execute(\&'ls\&', \&'\-l\&', \&'/\&') .fi .RE .RE \fBexpand\fP(\fIArgument\fP) .RS 4 Führt eine RPM\-Makro\-Expansion der Zeichenkette \fIArgument1\fP aus. Siehe auch \fBMAKROS\fP. .PP Beispiel: .nf .RS 4 rpm\&.expand(\&'%{_libdir}/mydir\&') .fi .RE .PP .RE \fBglob\fP(\fIMuster\fP, [\fISchalter\fP]) .RS 4 Gibt eine Tabelle mit Pfadnamen zurück, die mit dem angegebenen \fIMuster\fP übereinstimmen. Wenn \fBc\fP als \fISchalter\fP angegeben ist, wird das \fIMuster\fP zurückgegeben, falls keine Übereinstimmungen vorliegen. .PP Beispiel: .nf .RS 4 for i, p in ipairs(rpm\&.glob(\&'*\&')) do print(p) end .fi .RE .PP .RE \fBinteractive\fP() .RS 4 Startet eine interaktive Sitzung für Test\- und Debuggingzwecke. Verwenden Sie stattdessen \fBrpmlua\fP(1). .PP Beispiel: .nf .RS 4 rpm \-\-eval "%{lua: rpm\&.interactive()}" .fi .RE .PP .RE \fBisdefined\fP(\fIMakro\fP) .RS 4 Prüft, ob das angegebene \fIMakro\fP existiert und ob es parametrisch ist. Es werden zwei boolesche Werte zurückgeliefert. Siehe auch \fBMAKROS\fP. (Hinzugefügt: 4.17.0) .PP Beispiel: .nf .RS 4 if rpm\&.isdefined(\&'_libdir\&') then … end .fi .RE .PP .RE \fBload\fP(\fIPfad\fP) .RS 4 Lädt eine Makro\-Datei aus dem angegebenen Pfad. Entspricht dem integrierten Makro \fB%{load:…}\fP. .PP Beispiel: .nf .RS 4 rpm\&.load(\&'my\&.macros\&') .fi .RE .PP .RE \fBopen\fP(\fIPfad\fP, [\fIModus\fP[.\fISchalter\fP]]) .RS 4 Öffnet einen Datei\-Datenstrom mit RPM\-E/A\-Funktionen, mit Unterstützung für transparente Komprimierung und Dekomprimierung. .PP Der \fIPfad\fP ist eine Zeichenkette mit dem Dateinamen, der optional eine \fIModus\fP\-Zeichenkette folgt, die den Geöffnet\-Status angibt: .PD 0 .IP \(bu 4 \fBa\fP: zum Anhängen geöffnet .IP \(bu 4 \fBw\fP: zum Schreiben geöffnet; abgeschnitten .IP \(bu 4 \fBr\fP: zum Lesen geöffnet (Vorgabe) .IP \(bu 4 \fB+\fP: zum Lesen und Schreiben geöffnet .IP \(bu 4 \fBx\fP: schlägt fehl, wenn die Datei existiert .PD .PP Darauf folgen optional die Nutzdaten\-Schalter (siehe \fBrpm\-payloadflags\fP(7)) für Komprimierung und Dekomprimierung. .PP Hinzugefügt: 4.17.0 .PP Beispiel: .nf .RS 4 f = rpm\&.open(\&'some\&.txt\&.gz\&', \&'r\&.gzdio\&') print(f:read()) .fi .RE .PP Das zurückgelieferte rpm.fd\-Objekt verfügt über die folgenden Methoden: .PP \fBfd:close\fP() .PP Schließt den Datenstrom. .PP Beispiel: .nf .RS 4 f = rpm\&.open(\&'file\&') f:close() .fi .RE .PP \fBfd:flush\fP() .PP Leert den Datenstrom. .PP Beispiel: .nf .RS 4 f = rpm\&.open(\&'file\&', \&'w\&') f:write(\&'foo\&') f:flush() f:close() .fi .RE .PP \fBfd:read\fP([\fIPosition\fP]) .PP Liest Daten aus dem Datenstrom bis zu der angegebenen Byte\-\fIPosition\fP. Falls diese nicht angegeben ist, wird die gesamte Datei gelesen. .PP Beispiel: .nf .RS 4 f = rpm\&.open(\&'/eine/Datei\&') print(f:read()) .fi .RE .PP \fBfd:seek\fP(\fIModus\fP, \fIVersatz\fP) .PP Positioniert den Datei\-Versatz des Datenstroms neu. Der \fIModus\fP ist einer aus \fBset\fP, \fBcur\fP oder \fBend\fP. Der Versatz ist relativ zur aktuellen Position: absolut, relativ zum aktuellen Modus oder relativ zum Ende. Nicht alle Datenströme unterstützen das Durchsuchen. .PP Gibt den Dateiversatz nach der Aktion zurück. .PP Siehe auch \fBlseek\fP(3). .PP Beispiel: .nf .RS 4 f = rpm\&.open(\&'neuedatei\&', \&'w\&') f:seek(\&'set\&', 555) f:close() .fi .RE .PP \fBfd:write\fP(\fIPuffer\fP [, \fILänge\fP]) .PP Schreibt Daten im \fIPuffer\fP in den Datei\-Datenstrom, entweder vollständig oder bis zu der \fILänge\fP Byte, falls angegeben. .PP Beispiel: .nf .RS 4 f = rpm\&.open(\&'neuedatei\&', \&'w\&') f:write(\&'data data\&') f:close() .fi .RE .PP \fBfd:reopen\fP(\fIModus\fP) .PP Öffnet einen Datenstrom mit einem neuen Modus erneut (siehe \fBrpm.open\fP()). .PP Beispiel: .nf .RS 4 rpm\&.open(\&'irgendein\&.txt\&.gz\&') f = f:reopen(\&'r\&.gzdio\&') print(f:read())} .fi .RE .PP .RE \fBredirect2null\fP(\fINummer\fP) (VERALTET) .RS 4 Leitet den Dateideskriptor mit der angegebenen \fINummer\fP nach \fI/dev/null\fP um (vor 4.16 war dies als \fBposix.redirect2null\fP() bekannt). .PP Diese Funktion ist veraltet und nur noch zwecks Abwärtskompatibilität für RPM\-Pakete der Version 4 verfügbar. Verwenden Sie stattdessen \fBrpm.spawn\fP() oder \fBrpm.execute\fP(). .PP .nf .RS 4 pid = posix\&.fork() if pid == 0 then posix\&.redirect2null(2) assert(posix\&.exec(\&'/bin/awk\&')) elseif pid > 0 then posix\&.wait(pid) end .fi .RE .PP .RE \fBspawn\fP({\fIBefehl\fP} [, {\fIAktionen\fP}]) .RS 4 Erzeugt ein externes Programm, das heißt, führt es aus. .PP Der {\fIBefehl\fP} ist eine Tabelle, die aus dem Befehl und dessen Argumenten besteht. Eine optionale zweite Tabelle kann verwendet werden, um verschiedene Aktionen im Zusammenhang mit der Befehlsausführung zu übergeben. Derzeit werden folgende unterstützt: .PP .nf .RS 4 | Aktion | Argument(e) | Beschreibung |\-\-\-\-\-\-\-\-\-|\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\- | *stdin* | Pfad | Standardeingabe zum Pfad umleiten | *stdout*| Pfad | Standardausgabe zum Pfad umleiten | *stderr*| Pfad | Standardfehlerausgabe zum Pfad umleiten .fi .RE .PP Gibt den Exit\-Status des Befehls zurück: Null bei Erfolg oder ein Tripel aus (\fBnil\fP, Meldung, Code) bei Fehlschlag. .PP Hinzugefügt: 4.20 .PP Beispiel: .nf .RS 4 rpm\&.spawn({\&'systemctl\&', \&'restart\&', \&'httpd\&'}, {stderr=\&'/dev/null\&'}) .fi .RE .PP .RE \fBundefine\fP(\fIName\fP) .RS 4 Setzt die Definition eines Makros zurück. Siehe auch \fBMAKROS\fP. .PP Beachten Sie, dass nur die aktuellste Makrodefinition mit dem angegebenen Namen vom Stapel entfernt wird. Das heißt, dass nach einer solchen Aktion zum Zurücksetzen noch Makrodefinitionen mit demselben Namen vorhanden sein können. .PP Beispiel: .nf .RS 4 rpm\&.undefine(\&'zzz\&') .fi .RE .PP .PP .RE \fBvercmp\fP(\fIv1\fP, \fIv2\fP) .RS 4 Führt einen RPM\-Versionsvergleich für Argumentzeichenketten durch. Gibt \-1, 0 oder 1 zurück, wenn \fIv1\fP kleiner, gleich oder größer als \fIv2\fP ist. Siehe \fBrpm\-version\fP(7). .PP Hinweis: In RPM\-Versionen vor 4.16 wurde dies nur auf Versionssegmente angewendet, was bei vollständigen \fIEVR\fP\-Zeichenketten keine korrekten Ergebnisse liefert. .PP Beispiel: .nf .RS 4 rpm\&.vercmp(\&'1\&.2\-1\&', \&'2\&.0\-1\&') .fi .RE .PP .RE \fBver\fP(\fIevr\fP\fB)\fP, \fBver\fP(\fIe\fP, \fIv\fP, \fIr\fP) .RS 4 Erstellt ein RPM\-Versionsobjekt. Dies erfordert entweder eine \fIevr\fP\-Zeichenkette, die in ihre Komponenten zerlegt wird, oder Epoch, Version und Veröffentlichung in separaten Argumenten (die entweder Zeichenketten oder Zahlen sein können). Das Objekt hat drei Attribute: \fBe\fP für Epoch, \fBv\fP für Version und \fBr\fP für Veröffentlichung (\fBr\fPelease), kann in seiner EVR\-Form ausgegeben werden und unterstützt den nativen Vergleich in Lua. .PP Hinzugefügt: 4.17.0 .PP Beispiel: .nf .RS 4 v1 = rpm\&.ver(\&'5:1\&.0\-2) v2 = rpm\&.ver(3, \&'5a\&', 1) if v1 < v2 then … end if v1\&.e then … end .fi .RE .PP .RE .SS POSIX\-Erweiterung .PP Die Lua\-Standardbibliothek bietet einen relativ begrenzten Satz an E/A\-Operationen. Die \fBposix\fP\-Erweiterung verbessert die Möglichkeiten von Lua erheblich. .PP Die folgenden Funktionen sind im \fBposix\fP\-Namensraum verfügbar. Um sie aufzurufen, verwenden Sie \fBposix.function\fP(). Diese Dokumentation konzentriert sich auf die Lua\-API\-Konventionen. Weitere Informationen zu den entsprechenden Systemaufrufen finden Sie im Systemhandbuch, z.B. \fBaccess\fP(3) für \fBposix.access\fP(). .PP \fBaccess\fP(\fIPfad\fP [, \fIModus\fP]B) .RS 4 Testet die Erreichbarkeit der Datei/des Verzeichnisses im angegebenen \fIPfad\fP. Siehe \fBaccess\fP(3). Wenn der \fIModus\fP weggelassen wird, wird das Vorhandensein geprüft, andernfalls handelt es sich um eine Kombination der folgenden Tests: .PD 0 .IP \(bu 4 \fBr\fP: lesbar .IP \(bu 4 \fBw\fP: schreibbar .IP \(bu 4 \fBx\fP: ausführbar .IP \(bu 4 \fBf\fP: existiert .PD .PP Beispiel: .nf .RS 4 if posix\&.access(\&'/bin/rpm\&', \&'x\&') then … end .fi .RE .PP .RE \fBchdir\fP(\fIPfad\fP) .RS 4 Ändert das aktuelle Arbeitsverzeichnis in den angegebenen \fIPfad\fP. Siehe \fBchdir\fP(1). .PP Beispiel: .nf .RS 4 posix\&.chdir(\&'/tmp\&') .fi .RE .PP .RE \fBchmod\fP(\fIPfad\fP, \fIModus\fP) .RS 4 Ändert den Datei\-/Verzeichnismodus. Der Modus kann entweder eine Oktalzahl wie beim Systemaufruf \fBchmod\fP(2) oder eine Zeichenkettendarstellung ähnlich \fBchmod\fP(1) sein. .PP Beispiel: .nf .RS 4 posix\&.chmod(\&'aa\&', 600) posix\&.chmod(\&'bb\&', \&'rw\-\&') posix\&.chmod(\&'cc\&', \&'u+x\&') .fi .RE .PP .RE \fBchown\fP(\fIPfad\fP, \fIBenutzer\fP, \fIGruppe\fP) .RS 4 Ändert den Datei\-/Verzeichnisbesitzer bzw. die Gruppe von \fIPfad\fP. Die Argumente \fIBenutzer\fP und \fIGruppe\fP können entweder numerische ID\-Werte oder Benutzer\-/Gruppennamen sein. Siehe \fBchown\fP(2) und \fBchown\fP(1). .PP Hinweis: Diese Aktion erfordert Administratorrechte. .PP Beispiel: .nf .RS 4 posix\&.chown(\&'aa\&', 0, 0) posix\&.chown(\&'bb\&', \&'nobody\&', \&'nobody\&') .fi .RE .PP .RE \fBctermid\fP() .RS 4 Ermittelt den Namen des steuernden Terminals. Siehe \fBctermid\fP(3). .PP Beispiel: .nf .RS 4 print(posix\&.ctermid()) .fi .RE .PP .RE \fBdir\fP([\fIPfad\fP]) .RS 4 Ermittelt den Verzeichnisinhalt – wie \fBreaddir\fP(3). Wenn kein \fIPfad\fP angegeben ist, wird das aktuelle Verzeichnis verwendet. .PP Beispiel: .nf .RS 4 for i,p in pairs(posix\&.dir(\&'/\&')) do print(p\&.\&.\&'n\&') end .fi .RE .PP .RE \fBerrno\fP() .RS 4 Ermittelt die Meldung \fBstrerror\fP(3) und die entsprechende aktuelle \fBerrno\fP(3)\-Nummer. .PP Beispiel: .nf .RS 4 f = \&'/zzz\&' if not posix\&.chmod(f, 100) then s, n = posix\&.errno() print(f, s) end .fi .RE .PP .RE \fBexec\fP(\fIPfad\fP [, \fIArgumente\fP …]) (VERALTET) .RS 4 Führt ein Programm aus. Dies darf nur gemäß \fBposix.fork\fP() geschehen. .PP Diese Funktion ist veraltet und nur noch zwecks Abwärtskompatibilität für RPM\-Pakete der Version 4 verfügbar. Verwenden Sie stattdessen \fBrpm.spawn\fP() oder \fBrpm.execute\fP(). .PP .RE \fBfiles\fP([\fIPfad\fP]) .RS 4 Iteriert über den Verzeichnisinhalt. Wenn kein Pfad angegeben wird, wird das aktuelle Verzeichnis verwendet. .PP Beispiel: .nf .RS 4 for f in posix\&.files(\&'/\&') do print(f\&.\&.\&'n\&') end .fi .RE .PP .RE \fBfork\fP() (VERALTET) .RS 4 Startet einen neuen Prozess mit \fBfork\fP(2). .PP Diese Funktion ist veraltet und nur noch zwecks Abwärtskompatibilität für RPM\-Pakete der Version 4 verfügbar. Verwenden Sie stattdessen \fBrpm.spawn\fP() oder \fBrpm.execute\fP(). .PP Beispiel: .nf .RS 4 pid = posix\&.fork() if pid == 0 then posix\&.exec(\&'/foo/bar\&') elseif pid > 0 then posix\&.wait(pid) end .fi .RE .PP .RE \fBgetcwd\fP() .RS 4 Ermittelt das aktuelle Verzeichnis. Siehe \fBgetcwd\fP(3). .PP Beispiel: .nf .RS 4 if posix\&.getcwd() ~= \&'/\&' then … endif .fi .RE .PP .RE \fBgetenv\fP(\fIName\fP) .RS 4 Ermittelt eine Umgebungsvariable. Siehe \fBgetenv\fP(3). .PP Beispiel: .nf .RS 4 if posix\&.getenv(\&'HOME\&') ~= posix\&.getcwd() then print(\&'not at home\&') end .fi .RE .PP .RE \fBgetgroup\fP(\fIGruppe\fP) .RS 4 Ermittelt \fBgroup\fP(5)\-Informationen für eine Gruppe. Die \fIGruppe\fP kann entweder eine numerische ID oder ein Gruppenname sein. Wird sie weggelassen, wird die aktuelle Gruppe verwendet. Gibt eine Tabelle zurück, mit den Feldern \fBname\fP und \fBgid\fP, die auf den Gruppennamen bzw. die Gruppen\-ID gesetzt sind, und Indizes ab 1, die die Gruppenmitglieder angeben. .PP Beispiel: .nf .RS 4 print(posix\&.getgroup(\&'wheel\&')\&.gid) .fi .RE .PP .RE \fBgetlogin\fP() .RS 4 Ermittelt den Anmeldenamen. Siehe \fBgetlogin\fP(3). .PP Beispiel: .nf .RS 4 n = posix\&.getlogin() .fi .RE .PP .RE \fBgetpasswd\fP([\fIBenutzer\fP [, \fIAuswahloption\fP]]) .RS 4 Ermittelt Passwortinformationen (siehe \fBpasswd\fP(5)) für ein Benutzerkonto. Der \fIBenutzer\fP kann entweder als numerische ID oder als Benutzername angegeben werden. Falls nicht angegeben, wird die ID des aktuellen Benutzers verwendet. Das optionale Argument \fIAuswahloption\fP kann eines der folgenden sein: .PD 0 .IP \(bu 4 \fBname\fP .IP \(bu 4 \fBuid\fP .IP \(bu 4 \fBgid\fP .IP \(bu 4 \fBdir\fP .IP \(bu 4 \fBshell\fP .IP \(bu 4 \fBgecos\fP .IP \(bu 4 \fBpasswd\fP .PD .PP Falls weggelassen, wird eine Tabelle mit allen diesen Feldern zurückgeliefert. .PP Beispiel: .nf .RS 4 pw = posix\&.getpasswd(posix\&.getlogin(), \&'shell\&')| .fi .RE .PP .RE \fBgetprocessid\fP([\fIAuswahloption\fP]) .RS 4 Ermittelt Informationen zum aktuellen Prozess. Das optionale Argument \fIAuswahloption\fP kann eines der folgenden sein: .PD 0 .IP \(bu 4 \fBegid\fP: effektive Gruppen\-ID .IP \(bu 4 \fBeuid\fP: effektive Benutzer\-ID .IP \(bu 4 \fBgid\fP: Gruppen\-ID .IP \(bu 4 \fBuid\fP: Benutzer\-ID .IP \(bu 4 \fBpgrp\fP: ID der übergeordneten Gruppe .IP \(bu 4 \fBpid\fP: Prozess\-ID .IP \(bu 4 \fBppid\fP: die der \fBpid\fP übergeordnete ID .PD .PP Falls weggelassen, wird eine Tabelle mit allen diesen Feldern zurückgeliefert. .PP Beispiel: .nf .RS 4 if posix\&.getprocessid(\&'pid\&') == 1 then … end .fi .RE .PP .RE \fBkill\fP(\fIPID\fP [, \fIsignal\fP]) .RS 4 Sendet ein Signal (siehe \fBsignal\fP(7)) an einen Prozess. Das \fISignal\fP muss ein numerischer Wert sein, zum Beispiel \fB9\fP für \fBSIGKILL\fP. Falls weggelassen, wird \fBSIGTERM\fP verwendet. Siehe auch \fBkill\fP(2). .PP Beispiel: .nf .RS 4 posix\&.kill(posix\&.getprocessid(\&'pid\&')) .fi .RE .PP .RE \fBlink\fP(\fIalter\-Pfad\fP, \fIneuer\-Pfad\fP) .RS 4 Erstellt einen neuen Namen unter \fIneuer\-Pfad\fP für eine Datei unter \fIalter\-Pfad\fP, auch bekannt als harter Link. Siehe auch \fBlink\fP(2). .PP Beispiel: .nf .RS 4 f = rpm\&.open(\&'aaa\&', \&'w\&') posix\&.link(\&'aaa\&', \&'bbb\&') .fi .RE .PP .RE \fBmkdir\fP(\fIPfad\fP) .RS 4 Erstellt ein neues Verzeichnis im angegebenen \fIPfad\fP. Siehe auch \fBmkdir\fP(2). .PP Beispiel: .nf .RS 4 posix\&.mkdir(\&'/tmp\&') .fi .RE .PP .RE \fBmkfifo\fP(\fIPfad\fP) .RS 4 Erstellt eine FIFO (benannte Weiterleitung) unter \fIPfad\fP. Siehe auch \fBmkfifo\fP(2). .PP Beispiel: .nf .RS 4 posix\&.mkfifo(\&'/tmp/badplace\&') .fi .RE .PP .RE \fBpathconf\fP(\fIPfad\fP [, \fIAuswahloption\fP]) .RS 4 Ermittelt die \fBpathconf\fP(3)\-Informationen für den angegebenen \fIPfad\fP. Das optionale Argument \fIAuswahloption\fP kann eines der Folgenden sein: .PD 0 .IP \(bu 4 \fBlink_max\fP .IP \(bu 4 \fBmax_canon\fP .IP \(bu 4 \fBmax_input\fP .IP \(bu 4 \fBname_max\fP .IP \(bu 4 \fBpath_max\fP .IP \(bu 4 \fBpipe_buf\fP .IP \(bu 4 \fBchown_restricted\fP .IP \(bu 4 \fBno_trunc\fP .IP \(bu 4 \fBvdisable\fP. .PD .PP Falls weggelassen, wird eine Tabelle mit allen diesen Feldern zurückgeliefert. .PP Beispiel: .nf .RS 4 posix\&.pathconf(\&'/\&', \&'path_max\&') .fi .RE .PP .RE \fBputenv\fP(\fIZeichenkette\fP) .RS 4 Ändert eine Umgebungsvariable oder fügt sie hinzu. Siehe auch \fBputenv\fP(3). .PP Beispiel: .nf .RS 4 posix\&.putenv(\&'HOME=/me\&') .fi .RE .PP .RE \fBreadlink\fP(\fIPfad\fP) .RS 4 Liest den Wert eines symbolischen Links im angegebenen \fIPfad\fP. Siehe auch \fBreadlink\fP(2). .PP Beispiel: .nf .RS 4 posix\&.mkdir(\&'aaa\&') posix\&.symlink(\&'aaa\&', \&'bbb\&') print(posix\&.readlink(\&'bbb\&')) .fi .RE .PP .RE \fBrmdir\fP(\fIPfad\fP) .RS 4 Entfernt ein Verzeichnis im angegebenen \fIPfad\fP. Siehe auch \fBrmdir\fP(2). .PP Beispiel: .nf .RS 4 posix\&.rmdir(\&'/tmp\&') .fi .RE .PP .RE \fBsetgid\fP(\fIGruppe\fP) .RS 4 Legt die Gruppenidentität fest. Die \fIGruppe\fP kann entweder als numerische ID oder als Gruppenname angegeben werden. Siehe auch \fBsetgid\fP(2). .PP Hinweis: Diese Aktion erfordert Administratorrechte. .PP .RE \fBsetuid\fP(\fIBenutzer\fP) .RS 4 Legt die Benutzeridentität fest. Der \fIBenutzer\fP kann entweder als numerische ID oder als Benutzername angegeben werden. Siehe auch \fBsetuid\fP(2). .PP Hinweis: Diese Aktion erfordert Administratorrechte. .PP Beispiel: .nf .RS 4 posix\&.setuid(\&'nobody\&') .fi .RE .PP .RE \fBsleep\fP(\fIDauer\fP) .RS 4 Schläft für die angegebene \fIDauer\fP in Sekunden. Siehe auch \fBsleep\fP(3). .PP Beispiel: .nf .RS 4 posix\&.sleep(5) .fi .RE .PP .RE \fBstat\fP(\fIPfad\fP [, \fIAuswahloption\fP]) .RS 4 Ermittelt Statusinformationen (siehe \fBstat\fP(3)) über eine Datei im angegebenen \fIPfad\fP. Das optionale Argument \fIAuswahloption\fP kann eines der Folgenden sein: .PD 0 .IP \(bu 4 \fBmode\fP .IP \(bu 4 \fBino\fP .IP \(bu 4 \fBdev\fP .IP \(bu 4 \fBnlink\fP .IP \(bu 4 \fBuid\fP .IP \(bu 4 \fBgid\fP .IP \(bu 4 \fBsize\fP .IP \(bu 4 \fBatime\fP .IP \(bu 4 \fBmtime\fP .IP \(bu 4 \fBctime\fP .IP \(bu 4 \fBtype\fP. .PD .PP Falls weggelassen, wird eine Tabelle mit allen diesen Feldern zurückgeliefert. .PP Beispiel: .nf .RS 4 print(posix\&.stat(\&'/tmp\&', \&'mode\&'))| s1 = posix\&.stat(\&'f1\&') s2 = posix\&.stat(\&'f2\&') if s1\&.ino == s2\&.ino and s1\&.dev == s2\&.dev then … end .fi .RE .PP .RE \fBsymlink\fP(\fIalter\-Pfad\fP, \fIneuer\-Pfad\fP) .RS 4 Erstellt einen symbolischen Link im \fIneuen\-Pfad\fP, der auf den \fIalten\-Pfad\fP zeigt. Siehe auch \fBsymlink\fP(2). .PP Beispiel: .nf .RS 4 posix\&.mkdir(\&'aaa\&') posix\&.symlink(\&'aaa\&', \&'bbb\&') .fi .RE .PP .RE \fBsysconf\fP([\fIAuswahloption\fP]) .RS 4 Ermittelt \fBsysconf\fP(3)\-Informationen. Das optionale Argument \fIAuswahloption\fP kann eines der Folgenden sein: .PD 0 .IP \(bu 4 \fBarg_max\fP .IP \(bu 4 \fBchild_max\fP .IP \(bu 4 \fBclk_tck\fP .IP \(bu 4 \fBngroups_max\fP .IP \(bu 4 \fBstream_max\fP .IP \(bu 4 \fBtzname_max\fP .IP \(bu 4 \fBopen_max\fP .IP \(bu 4 \fBjob_control\fP .IP \(bu 4 \fBsaved_ids\fP .IP \(bu 4 \fBversion\fP. .PD .PP Falls weggelassen, wird eine Tabelle mit allen diesen Feldern zurückgeliefert. .PP Beispiel: .nf .RS 4 posix\&.sysconf(\&'open_max\&')| .fi .RE .PP .RE \fBtimes\fP([\fIAuswahloption\fP]) .RS 4 Ermittelt \fBtimes\fP(2)\-Informationen für den Prozess und den erwarteten untergeordneten Prozess. Das optionale Argument \fIAuswahloption\fP kann eines der Folgenden sein:: .PD 0 .IP \(bu 4 \fButime\fP .IP \(bu 4 \fBstime\fP .IP \(bu 4 \fBcutime\fP .IP \(bu 4 \fBcstime\fP .IP \(bu 4 \fBelapsed\fP .PD .PP Falls weggelassen, wird eine Tabelle mit allen diesen Feldern zurückgeliefert. .PP Beispiel: .nf .RS 4 t = posix\&.times() print(t\&.utime, t\&.stime) .fi .RE .PP .RE \fBttyname\fP([\fIDateideskriptor\fP]) .RS 4 Ermittelt den Namen eines Terminals, das dem angegebenen \fIDateideskriptor\fP zugeordnet ist. Ist kein \fIDateideskriptor\fP angegeben, wird \fB0\fP (auch bekannt als Standardeingabe) verwendet. Siehe \fBttyname\fP(3). .PP Beispiel: .nf .RS 4 if not posix\&.ttyname() then … endif .fi .RE .PP .RE \fBumask\fP([\fIModus\fP]) .RS 4 Ermittelt die \fBumask\fP(2) des Prozesses oder legt sie fest. Der \fIModus\fP kann als Oktalzahl oder Moduszeichenkette angegeben werden, ähnlich wie \fBposix.chmod\fP(). .PP Beispiel: .nf .RS 4 print(posix\&.umask()) posix\&.umask(222) posix\&.umask(\&'ug\-w\&') posix\&.umask(\&'rw\-rw\-r\-\-\&') .fi .RE .PP .RE \fBuname\fP(\fIFormat\fP) .RS 4 Ermittelt \fBuname\fP(2)\-Informationen über das aktuelle System. Die folgenden Formatanweisungen werden unterstützt: .PP .PD 0 .IP \(bu 4 \fB%m\fP: Name des Hardwaretyps .IP \(bu 4 \fB%n\fP: Name dieses Knotens .IP \(bu 4 \fB%r\fP: Aktuelle Veröffentlichungsstufe dieser Implementierung .IP \(bu 4 \fB%s\fP: Name dieses Betriebssystems .IP \(bu 4 \fB%v\fP: Aktuelle Versionsstufe dieser Implementierung .PD .PP Beispiel: .nf .RS 4 print(posix\&.uname(\&'%s %r\&')) .fi .RE .PP .RE \fButime\fP(\fIPfad\fP [, \fImtime\fP [, \fIctime\fP]]) .RS 4 Ändert die letzten Zugriffs\- und Änderungszeiten. mtime und ctime werden in Sekunden seit der »Epoch« (Beginn der Unix\-Zeitrechnung) ausgedrückt. Siehe \fButime\fP(2). .PP Falls \fImtime\fP oder \fIctime\fP weggelassen werden, wird die aktuelle Zeit verwendet, ähnlich wie bei \fBtouch\fP(1). .PP Beispiel: .nf .RS 4 posix\&.mkdir(\&'aaa\&') posix\&.utime(\&'aaa\&', 0, 0) .fi .RE .PP .RE \fBwait\fP([\fIPID\fP]) (ALS VERALTET MARKIERT) .RS 4 Wartet auf einen untergeordneten Prozess.\& Wenn eine \fIPID\fP angegeben ist, wird auf diesen bestimmten untergeordneten Prozess gewartet. Siehe auch \fBwait\fP(2). .PP Diese Funktion ist veraltet und nur noch zwecks Abwärtskompatibilität für RPM\-Pakete der Version 4 verfügbar. Verwenden Sie stattdessen \fBrpm.spawn\fP() oder \fBrpm.execute\fP(). .PP Beispiel: .nf .RS 4 pid = posix\&.fork() if pid == 0 then posix\&.exec(\&'/bin/ls\&')) elseif pid > 0 then posix\&.wait(pid) end .fi .RE .PP .PP .RE \fBsetenv\fP(\fIName\fP, \fIWert\fP [, \fIÜberschreibung\fP]) .RS 4 Ändern die Umgebungsvariable \fIName\fP oder fügt sie hinzu. Die optionale \fIÜberschreibung\fP ist ein Boolescher Wert, der das Verhalten definiert, wenn bereits eine Variable mit demselben Namen existiert. Siehe auch \fBsetenv\fP(3). .PP Beispiel: .nf .RS 4 posix\&.setenv(\&'HOME\&', \&'/me\&', true) .fi .RE .PP .RE \fBunsetenv\fP(\fIName\fP) .RS 4 Entfernt eine Variable des angegebenen \fINamens\fP aus der Umgebung. Siehe auch \fBunsetenv\fP(3). .PP Beispiel: .nf .RS 4 posix\&.unsetenv(\&'HOME\&') .fi .RE .PP .RE .SH "ERWEITERUNG UND ANPASSUNG" Bei der Initialisierung führt RPM ein globales Lua\-Initialisierungsskript \fIinit.lua\fP aus dem Verzeichnis aus, in das \fB%getconfdir\fP expandiert, typischerweise \fI/usr/lib/rpm/init.lua\fP. Damit kann die RPM\-Lua\-Umgebung angepasst werden, ohne RPM neu kompilieren zu müssen. .PP Für den eingebetteten Lua\-Interpreter werden mit \fBrequire\fP geladene Module primär in \fB%{getconfdir}/lua/\fP gesucht. \fB%_rpmluadir\fP ist eine Abkürzung für diesen Pfad. .PP .SH "SIEHE AUCH" \fBrpm\-macros\fP(7), \fBrpm\-payloadflags\fP(7), \fBrpmlua\fP(1), \fBrpm\-version\fP(7) .PP \fBhttps://www.lua.org/\fP .PP .SH ÜBERSETZUNG Die deutsche Übersetzung dieser Handbuchseite wurde von Mario Blättermann erstellt. .PP Diese Übersetzung ist Freie Dokumentation; lesen Sie die .UR https://www.gnu.org/licenses/gpl-3.0.html GNU General Public License Version 3 .UE oder neuer bezüglich der Copyright-Bedingungen. Es wird KEINE HAFTUNG übernommen. .PP Wenn Sie Fehler in der Übersetzung dieser Handbuchseite finden, schicken Sie bitte eine E-Mail an die Mailingliste der Übersetzer: .MT debian-l10n-german@lists.debian.org .ME .