RPM-LUA(7) Miscellaneous Information Manual RPM-LUA(7) BEZEICHNUNG rpm-lua - in RPM eingebetteter Lua-Interpreter UBERSICHT %scriptlet -p %{lua:} BESCHREIBUNG Lua ist eine universelle Programmiersprache, die speziell fur die Einbettung in andere Programme entwickelt wurde. RPM enthalt einen eingebetteten Lua-Interpreter fur die Verwendung in erweiterten rpm-macros(7) und Transaktions-Scriptlets. Der eingebettete Lua-Interpreter ermoglicht verschiedene Dinge, die mit einfachen Makros oder externen Shell-Skripten schwierig oder unmoglich sind, beispielsweise die Beseitigung von Abhangigkeitsschleifen aus Paket-Scriptlets. MAKROS Zugriff auf Makros Die rpm-Erweiterung bietet verschiedene Funktionen fur den Umgang mit Makros. Der bequemste Weg, aus der RPM-Lua-Umgebung auf rpm-macroproc(7) zuzugreifen, ist jedoch uber die globale macros-Tabelle. Lua unterscheidet nicht zwischen Tabellenindex- und Feldnamensyntax, daher sind macros.foo und macros['foo'] gleichwertig. Verwenden Sie, was besser zum Zweck passt. Wie bei jeder echten Lua-Tabelle werden nicht vorhandene Elemente als nil zuruckgegeben. Zuweisungen konnen zum Definieren oder Aufheben der Definition von Makros verwendet werden. Beispiel: 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 Alle Makros nutzen dieselbe globale Lua-Ausfuhrungsumgebung. Aufruf parametrischer Makros Parametrische Makros (einschliesslich aller eingebauten Makros) konnen Lua-nativ uber die macros-Tabelle aufgerufen werden, entweder mit der Syntax macros.Name() oder macros[Name](). Argumente werden uber ein einzelnes Argument ubergeben, das entweder o eine einzelne Zeichenfolge, die in diesem Fall mit den makro-nativen Regeln expandiert und aufgeteilt wird, o oder eine Tabelle ist. In diesem Fall werden die Tabelleninhalte als wortliche Argumente verwendet, die in keiner Weise erweitert werden. Beispiel 1: macros.with('foo') Beispiel 2: macros.dostuff({'one', 'two', 'three'}) Zuruckliefern von Daten Per Definition landet alles, was in Lua mit print() aufgerufen wird, in der Makroerweiterung. Lua-Makros konnen ihre Ausgabe auch mit return ausgeben, wodurch Hilfsmakros fur die Programmierung naturlicher aussehen. Beispiel: %sum() %{lua: local v = 0 for _, a in ipairs(arg) do v = v + tonumber(a) end return v } Optionen und Argumente Parametrische Lua-Makros erhalten ihre Optionen und Argumente als zwei lokale Tabellen opt und arg, wobei opt verarbeitete Optionswerte enthalt, dessen Position (Tabellenschlussel) durch das Optionszeichen bestimmt wird, und arg numerisch indizierte Argumente enthalt. Diese Tabellen sind immer vorhanden, unabhangig davon, ob Optionen oder Argumente tatsachlich ubergeben wurden, um die Verwendung zu vereinfachen. Beispiel: %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 } SCRIPTLETS Das interne Lua kann als Interpreter von RPM fur alle Transaktionsscriptlets verwendet werden, einschliesslich Triggern und Dateitriggern: Beispiel: %pre -p print('Hello from Lua') Wahrend das bewahrte /bin/sh fur paketbezogene Skriptaktivitaten in der Regel praktischer ist, bietet der eingebettete Lua-Interpreter einige einzigartige Vorteile fur Transaktionsscriptlets: Den Paketen werden keine zusatzlichen Abhangigkeiten hinzugefugt, was dazu beitragt, Abhangigkeitsschleifen zu vermeiden. Das kann beim fruhen >>Bootstrap<<-Paketsatz bei einer Erstinstallation ein entscheidender Unterschied sein. Insbesondere ist ein eingebettetes Lua-Skript die einzige allgemein nutzbare Option in %pretrans-Skripten wahrend der Erstinstallation eines Systems. Eingebettetes Lua ist ausserdem viel schneller als die Ausfuhrung eines moglicherweise schwergewichtigen Interpreters, nur um ein paar Zeilen Shell-Skript auszufuhren. Hinweis: Scriptlets, die das interne Lua verwenden, sollten keine Annahmen uber die gemeinsame Nutzung der Ausfuhrungsumgebung mit anderen Scriptlets treffen. Argumente Scriptlet-Argumente sind uber eine globale arg-Tabelle zuganglich. Hinweis: In Lua beginnen Indizes ublicherweise 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 enthalt, ist arg[2], und das ahnliche Argument fur Triggerziele ist arg[3], im Gegensatz zu den traditionellen $1 und $2 in Shell-Skripten. Beispiel: %postun -p if arg[2] == 0 then print("erasing") end Verschiebbare Pakete Scriptlets verschiebbarer Pakete enthalten zusatzlich eine globale RPM_INSTALL_PREFIX-Tabelle, die alle moglichen Prafixe des Pakets enthalt. Hinzugefugt: 4.18.0 Ruckgabewert Obwohl Scriptlets normalerweise nicht fehlschlagen durfen, konnen Sie den Scriptlet-Fehlerstatus bei Bedarf mit der Lua-Funktion error(Meldung, [Stufe]) signalisieren. SPEC-DATEIEN Im Kontext einer rpm-spec(5)-Dateianalyse mit rpmbuild(1) oder rpmspec(1) enthalt die RPM-Lua-Umgebung die folgenden .spec-abhangigen globalen Tabellen: patches Die Dateinamen der Patches in der Reihenfolge ihres Erscheinens in der .spec-Datei. patch_nums Die Nummern der Patches in der Reihenfolge ihres Erscheinens in der .spec-Datei. sources Die Dateinamen der Quellen in der Reihenfolge ihres Erscheinens in der .spec-Datei. source_nums Die Nummern der Quellen in der Reihenfolge ihres Erscheinens in der .spec-Datei. Beispiel: for i, p in ipairs(patches) do print(string.format("echo %d: %sn", patch_nums[i], patches[i])) end ERWEITERUNGEN Zusatzlich zu den Lua-Standardbibliotheken (abhangig von der Lua-Version, gegen die RPM gelinkt ist) sind die folgenden Erweiterungen im internen Lua-Interpreter von RPM verfugbar. Diese konnen in allen Kontexten verwendet werden, in denen auch das interne Lua verwendet werden kann. RPM-Erweiterung Die folgenden RPM-spezifischen Funktionen sind verfugbar: b64decode(Argument) Dekodiert das Argument mit base64(1). Siehe auch b64decode(). Beispiel: blob = 'binary data' print(blob) e = rpm.b64encode(blob) print(e) d = rpm.b64decode(e) print(d) b64encode(Argument [, Zeilenlange]) Kodiert das Argument mit base64(1). Die Zeilenlange kann optional uber ein weiteres Argument angegeben werden. Siehe auch b64encode(). define("Name Textkorper") Definiert ein globales Makro dieses Namens mit dem angegebenen Textkorper. Siehe auch MAKROS. Beispiel: rpm.define('foo 1') execute(Pfad [, Argument1 [,]) Fuhrt einen externen Befehl aus. Dies ist beim Ausfuhren externer Hilfsbefehle praktisch, ohne auf die Shell zuruckgreifen zu mussen. Der angegebene Pfad ist der auszufuhrende Befehl, optional gefolgt von einer Reihe von Argumenten, die an den Befehl ubergeben werden. Fur eine bessere Kontrolle uber die Prozessausfuhrung und die Ausgaben, siehe rpm.spawn(). Hinzugefugt: 4.15.0 Beispiel: rpm.execute('ls', '-l', '/') expand(Argument) Fuhrt eine RPM-Makro-Expansion der Zeichenkette Argument1 aus. Siehe auch MAKROS. Beispiel: rpm.expand('%{_libdir}/mydir') glob(Muster, [Schalter]) Gibt eine Tabelle mit Pfadnamen zuruck, die mit dem angegebenen Muster ubereinstimmen. Wenn c als Schalter angegeben ist, wird das Muster zuruckgegeben, falls keine Ubereinstimmungen vorliegen. Beispiel: for i, p in ipairs(rpm.glob('*')) do print(p) end interactive() Startet eine interaktive Sitzung fur Test- und Debuggingzwecke. Verwenden Sie stattdessen rpmlua(1). Beispiel: rpm --eval "%{lua: rpm.interactive()}" isdefined(Makro) Pruft, ob das angegebene Makro existiert und ob es parametrisch ist. Es werden zwei boolesche Werte zuruckgeliefert. Siehe auch MAKROS. (Hinzugefugt: 4.17.0) Beispiel: if rpm.isdefined('_libdir') then end load(Pfad) Ladt eine Makro-Datei aus dem angegebenen Pfad. Entspricht dem integrierten Makro %{load:}. Beispiel: rpm.load('my.macros') open(Pfad, [Modus[.Schalter]]) Offnet einen Datei-Datenstrom mit RPM-E/A-Funktionen, mit Unterstutzung fur transparente Komprimierung und Dekomprimierung. Der Pfad ist eine Zeichenkette mit dem Dateinamen, der optional eine Modus-Zeichenkette folgt, die den Geoffnet-Status angibt: o a: zum Anhangen geoffnet o w: zum Schreiben geoffnet; abgeschnitten o r: zum Lesen geoffnet (Vorgabe) o +: zum Lesen und Schreiben geoffnet o x: schlagt fehl, wenn die Datei existiert Darauf folgen optional die Nutzdaten-Schalter (siehe rpm-payloadflags(7)) fur Komprimierung und Dekomprimierung. Hinzugefugt: 4.17.0 Beispiel: f = rpm.open('some.txt.gz', 'r.gzdio') print(f:read()) Das zuruckgelieferte rpm.fd-Objekt verfugt uber die folgenden Methoden: fd:close() Schliesst den Datenstrom. Beispiel: f = rpm.open('file') f:close() fd:flush() Leert den Datenstrom. Beispiel: f = rpm.open('file', 'w') f:write('foo') f:flush() f:close() fd:read([Position]) Liest Daten aus dem Datenstrom bis zu der angegebenen Byte-Position. Falls diese nicht angegeben ist, wird die gesamte Datei gelesen. Beispiel: f = rpm.open('/eine/Datei') print(f:read()) fd:seek(Modus, Versatz) Positioniert den Datei-Versatz des Datenstroms neu. Der Modus ist einer aus set, cur oder end. Der Versatz ist relativ zur aktuellen Position: absolut, relativ zum aktuellen Modus oder relativ zum Ende. Nicht alle Datenstrome unterstutzen das Durchsuchen. Gibt den Dateiversatz nach der Aktion zuruck. Siehe auch lseek(3). Beispiel: f = rpm.open('neuedatei', 'w') f:seek('set', 555) f:close() fd:write(Puffer [, Lange]) Schreibt Daten im Puffer in den Datei-Datenstrom, entweder vollstandig oder bis zu der Lange Byte, falls angegeben. Beispiel: f = rpm.open('neuedatei', 'w') f:write('data data') f:close() fd:reopen(Modus) Offnet einen Datenstrom mit einem neuen Modus erneut (siehe rpm.open()). Beispiel: rpm.open('irgendein.txt.gz') f = f:reopen('r.gzdio') print(f:read())} redirect2null(Nummer) (VERALTET) Leitet den Dateideskriptor mit der angegebenen Nummer nach /dev/null um (vor 4.16 war dies als posix.redirect2null() bekannt). Diese Funktion ist veraltet und nur noch zwecks Abwartskompatibilitat fur RPM-Pakete der Version 4 verfugbar. Verwenden Sie stattdessen rpm.spawn() oder rpm.execute(). pid = posix.fork() if pid == 0 then posix.redirect2null(2) assert(posix.exec('/bin/awk')) elseif pid > 0 then posix.wait(pid) end spawn({Befehl} [, {Aktionen}]) Erzeugt ein externes Programm, das heisst, fuhrt es aus. Der {Befehl} 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 Befehlsausfuhrung zu ubergeben. Derzeit werden folgende unterstutzt: | Aktion | Argument(e) | Beschreibung |---------|--------------------------- | *stdin* | Pfad | Standardeingabe zum Pfad umleiten | *stdout*| Pfad | Standardausgabe zum Pfad umleiten | *stderr*| Pfad | Standardfehlerausgabe zum Pfad umleiten Gibt den Exit-Status des Befehls zuruck: Null bei Erfolg oder ein Tripel aus (nil, Meldung, Code) bei Fehlschlag. Hinzugefugt: 4.20 Beispiel: rpm.spawn({'systemctl', 'restart', 'httpd'}, {stderr='/dev/null'}) undefine(Name) Setzt die Definition eines Makros zuruck. Siehe auch MAKROS. Beachten Sie, dass nur die aktuellste Makrodefinition mit dem angegebenen Namen vom Stapel entfernt wird. Das heisst, dass nach einer solchen Aktion zum Zurucksetzen noch Makrodefinitionen mit demselben Namen vorhanden sein konnen. Beispiel: rpm.undefine('zzz') vercmp(v1, v2) Fuhrt einen RPM-Versionsvergleich fur Argumentzeichenketten durch. Gibt -1, 0 oder 1 zuruck, wenn v1 kleiner, gleich oder grosser als v2 ist. Siehe rpm-version(7). Hinweis: In RPM-Versionen vor 4.16 wurde dies nur auf Versionssegmente angewendet, was bei vollstandigen EVR-Zeichenketten keine korrekten Ergebnisse liefert. Beispiel: rpm.vercmp('1.2-1', '2.0-1') ver(evr), ver(e, v, r) Erstellt ein RPM-Versionsobjekt. Dies erfordert entweder eine evr-Zeichenkette, die in ihre Komponenten zerlegt wird, oder Epoch, Version und Veroffentlichung in separaten Argumenten (die entweder Zeichenketten oder Zahlen sein konnen). Das Objekt hat drei Attribute: e fur Epoch, v fur Version und r fur Veroffentlichung (release), kann in seiner EVR-Form ausgegeben werden und unterstutzt den nativen Vergleich in Lua. Hinzugefugt: 4.17.0 Beispiel: v1 = rpm.ver('5:1.0-2) v2 = rpm.ver(3, '5a', 1) if v1 < v2 then end if v1.e then end POSIX-Erweiterung Die Lua-Standardbibliothek bietet einen relativ begrenzten Satz an E/A-Operationen. Die posix-Erweiterung verbessert die Moglichkeiten von Lua erheblich. Die folgenden Funktionen sind im posix-Namensraum verfugbar. Um sie aufzurufen, verwenden Sie posix.function(). Diese Dokumentation konzentriert sich auf die Lua-API-Konventionen. Weitere Informationen zu den entsprechenden Systemaufrufen finden Sie im Systemhandbuch, z.B. access(3) fur posix.access(). access(Pfad [, Modus]B) Testet die Erreichbarkeit der Datei/des Verzeichnisses im angegebenen Pfad. Siehe access(3). Wenn der Modus weggelassen wird, wird das Vorhandensein gepruft, andernfalls handelt es sich um eine Kombination der folgenden Tests: o r: lesbar o w: schreibbar o x: ausfuhrbar o f: existiert Beispiel: if posix.access('/bin/rpm', 'x') then end chdir(Pfad) Andert das aktuelle Arbeitsverzeichnis in den angegebenen Pfad. Siehe chdir(1). Beispiel: posix.chdir('/tmp') chmod(Pfad, Modus) Andert den Datei-/Verzeichnismodus. Der Modus kann entweder eine Oktalzahl wie beim Systemaufruf chmod(2) oder eine Zeichenkettendarstellung ahnlich chmod(1) sein. Beispiel: posix.chmod('aa', 600) posix.chmod('bb', 'rw-') posix.chmod('cc', 'u+x') chown(Pfad, Benutzer, Gruppe) Andert den Datei-/Verzeichnisbesitzer bzw. die Gruppe von Pfad. Die Argumente Benutzer und Gruppe konnen entweder numerische ID-Werte oder Benutzer-/Gruppennamen sein. Siehe chown(2) und chown(1). Hinweis: Diese Aktion erfordert Administratorrechte. Beispiel: posix.chown('aa', 0, 0) posix.chown('bb', 'nobody', 'nobody') ctermid() Ermittelt den Namen des steuernden Terminals. Siehe ctermid(3). Beispiel: print(posix.ctermid()) dir([Pfad]) Ermittelt den Verzeichnisinhalt - wie readdir(3). Wenn kein Pfad angegeben ist, wird das aktuelle Verzeichnis verwendet. Beispiel: for i,p in pairs(posix.dir('/')) do print(p..'n') end errno() Ermittelt die Meldung strerror(3) und die entsprechende aktuelle errno(3)-Nummer. Beispiel: f = '/zzz' if not posix.chmod(f, 100) then s, n = posix.errno() print(f, s) end exec(Pfad [, Argumente ]) (VERALTET) Fuhrt ein Programm aus. Dies darf nur gemass posix.fork() geschehen. Diese Funktion ist veraltet und nur noch zwecks Abwartskompatibilitat fur RPM-Pakete der Version 4 verfugbar. Verwenden Sie stattdessen rpm.spawn() oder rpm.execute(). files([Pfad]) Iteriert uber den Verzeichnisinhalt. Wenn kein Pfad angegeben wird, wird das aktuelle Verzeichnis verwendet. Beispiel: for f in posix.files('/') do print(f..'n') end fork() (VERALTET) Startet einen neuen Prozess mit fork(2). Diese Funktion ist veraltet und nur noch zwecks Abwartskompatibilitat fur RPM-Pakete der Version 4 verfugbar. Verwenden Sie stattdessen rpm.spawn() oder rpm.execute(). Beispiel: pid = posix.fork() if pid == 0 then posix.exec('/foo/bar') elseif pid > 0 then posix.wait(pid) end getcwd() Ermittelt das aktuelle Verzeichnis. Siehe getcwd(3). Beispiel: if posix.getcwd() ~= '/' then endif getenv(Name) Ermittelt eine Umgebungsvariable. Siehe getenv(3). Beispiel: if posix.getenv('HOME') ~= posix.getcwd() then print('not at home') end getgroup(Gruppe) Ermittelt group(5)-Informationen fur eine Gruppe. Die Gruppe kann entweder eine numerische ID oder ein Gruppenname sein. Wird sie weggelassen, wird die aktuelle Gruppe verwendet. Gibt eine Tabelle zuruck, mit den Feldern name und gid, die auf den Gruppennamen bzw. die Gruppen-ID gesetzt sind, und Indizes ab 1, die die Gruppenmitglieder angeben. Beispiel: print(posix.getgroup('wheel').gid) getlogin() Ermittelt den Anmeldenamen. Siehe getlogin(3). Beispiel: n = posix.getlogin() getpasswd([Benutzer [, Auswahloption]]) Ermittelt Passwortinformationen (siehe passwd(5)) fur ein Benutzerkonto. Der Benutzer kann entweder als numerische ID oder als Benutzername angegeben werden. Falls nicht angegeben, wird die ID des aktuellen Benutzers verwendet. Das optionale Argument Auswahloption kann eines der folgenden sein: o name o uid o gid o dir o shell o gecos o passwd Falls weggelassen, wird eine Tabelle mit allen diesen Feldern zuruckgeliefert. Beispiel: pw = posix.getpasswd(posix.getlogin(), 'shell')| getprocessid([Auswahloption]) Ermittelt Informationen zum aktuellen Prozess. Das optionale Argument Auswahloption kann eines der folgenden sein: o egid: effektive Gruppen-ID o euid: effektive Benutzer-ID o gid: Gruppen-ID o uid: Benutzer-ID o pgrp: ID der ubergeordneten Gruppe o pid: Prozess-ID o ppid: die der pid ubergeordnete ID Falls weggelassen, wird eine Tabelle mit allen diesen Feldern zuruckgeliefert. Beispiel: if posix.getprocessid('pid') == 1 then end kill(PID [, signal]) Sendet ein Signal (siehe signal(7)) an einen Prozess. Das Signal muss ein numerischer Wert sein, zum Beispiel 9 fur SIGKILL. Falls weggelassen, wird SIGTERM verwendet. Siehe auch kill(2). Beispiel: posix.kill(posix.getprocessid('pid')) link(alter-Pfad, neuer-Pfad) Erstellt einen neuen Namen unter neuer-Pfad fur eine Datei unter alter-Pfad, auch bekannt als harter Link. Siehe auch link(2). Beispiel: f = rpm.open('aaa', 'w') posix.link('aaa', 'bbb') mkdir(Pfad) Erstellt ein neues Verzeichnis im angegebenen Pfad. Siehe auch mkdir(2). Beispiel: posix.mkdir('/tmp') mkfifo(Pfad) Erstellt eine FIFO (benannte Weiterleitung) unter Pfad. Siehe auch mkfifo(2). Beispiel: posix.mkfifo('/tmp/badplace') pathconf(Pfad [, Auswahloption]) Ermittelt die pathconf(3)-Informationen fur den angegebenen Pfad. Das optionale Argument Auswahloption kann eines der Folgenden sein: o link_max o max_canon o max_input o name_max o path_max o pipe_buf o chown_restricted o no_trunc o vdisable. Falls weggelassen, wird eine Tabelle mit allen diesen Feldern zuruckgeliefert. Beispiel: posix.pathconf('/', 'path_max') putenv(Zeichenkette) Andert eine Umgebungsvariable oder fugt sie hinzu. Siehe auch putenv(3). Beispiel: posix.putenv('HOME=/me') readlink(Pfad) Liest den Wert eines symbolischen Links im angegebenen Pfad. Siehe auch readlink(2). Beispiel: posix.mkdir('aaa') posix.symlink('aaa', 'bbb') print(posix.readlink('bbb')) rmdir(Pfad) Entfernt ein Verzeichnis im angegebenen Pfad. Siehe auch rmdir(2). Beispiel: posix.rmdir('/tmp') setgid(Gruppe) Legt die Gruppenidentitat fest. Die Gruppe kann entweder als numerische ID oder als Gruppenname angegeben werden. Siehe auch setgid(2). Hinweis: Diese Aktion erfordert Administratorrechte. setuid(Benutzer) Legt die Benutzeridentitat fest. Der Benutzer kann entweder als numerische ID oder als Benutzername angegeben werden. Siehe auch setuid(2). Hinweis: Diese Aktion erfordert Administratorrechte. Beispiel: posix.setuid('nobody') sleep(Dauer) Schlaft fur die angegebene Dauer in Sekunden. Siehe auch sleep(3). Beispiel: posix.sleep(5) stat(Pfad [, Auswahloption]) Ermittelt Statusinformationen (siehe stat(3)) uber eine Datei im angegebenen Pfad. Das optionale Argument Auswahloption kann eines der Folgenden sein: o mode o ino o dev o nlink o uid o gid o size o atime o mtime o ctime o type. Falls weggelassen, wird eine Tabelle mit allen diesen Feldern zuruckgeliefert. Beispiel: 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 symlink(alter-Pfad, neuer-Pfad) Erstellt einen symbolischen Link im neuen-Pfad, der auf den alten-Pfad zeigt. Siehe auch symlink(2). Beispiel: posix.mkdir('aaa') posix.symlink('aaa', 'bbb') sysconf([Auswahloption]) Ermittelt sysconf(3)-Informationen. Das optionale Argument Auswahloption kann eines der Folgenden sein: o arg_max o child_max o clk_tck o ngroups_max o stream_max o tzname_max o open_max o job_control o saved_ids o version. Falls weggelassen, wird eine Tabelle mit allen diesen Feldern zuruckgeliefert. Beispiel: posix.sysconf('open_max')| times([Auswahloption]) Ermittelt times(2)-Informationen fur den Prozess und den erwarteten untergeordneten Prozess. Das optionale Argument Auswahloption kann eines der Folgenden sein:: o utime o stime o cutime o cstime o elapsed Falls weggelassen, wird eine Tabelle mit allen diesen Feldern zuruckgeliefert. Beispiel: t = posix.times() print(t.utime, t.stime) ttyname([Dateideskriptor]) Ermittelt den Namen eines Terminals, das dem angegebenen Dateideskriptor zugeordnet ist. Ist kein Dateideskriptor angegeben, wird 0 (auch bekannt als Standardeingabe) verwendet. Siehe ttyname(3). Beispiel: if not posix.ttyname() then endif umask([Modus]) Ermittelt die umask(2) des Prozesses oder legt sie fest. Der Modus kann als Oktalzahl oder Moduszeichenkette angegeben werden, ahnlich wie posix.chmod(). Beispiel: print(posix.umask()) posix.umask(222) posix.umask('ug-w') posix.umask('rw-rw-r--') uname(Format) Ermittelt uname(2)-Informationen uber das aktuelle System. Die folgenden Formatanweisungen werden unterstutzt: o %m: Name des Hardwaretyps o %n: Name dieses Knotens o %r: Aktuelle Veroffentlichungsstufe dieser Implementierung o %s: Name dieses Betriebssystems o %v: Aktuelle Versionsstufe dieser Implementierung Beispiel: print(posix.uname('%s %r')) utime(Pfad [, mtime [, ctime]]) Andert die letzten Zugriffs- und Anderungszeiten. mtime und ctime werden in Sekunden seit der >>Epoch<< (Beginn der Unix-Zeitrechnung) ausgedruckt. Siehe utime(2). Falls mtime oder ctime weggelassen werden, wird die aktuelle Zeit verwendet, ahnlich wie bei touch(1). Beispiel: posix.mkdir('aaa') posix.utime('aaa', 0, 0) wait([PID]) (ALS VERALTET MARKIERT) Wartet auf einen untergeordneten Prozess. Wenn eine PID angegeben ist, wird auf diesen bestimmten untergeordneten Prozess gewartet. Siehe auch wait(2). Diese Funktion ist veraltet und nur noch zwecks Abwartskompatibilitat fur RPM-Pakete der Version 4 verfugbar. Verwenden Sie stattdessen rpm.spawn() oder rpm.execute(). Beispiel: pid = posix.fork() if pid == 0 then posix.exec('/bin/ls')) elseif pid > 0 then posix.wait(pid) end setenv(Name, Wert [, Uberschreibung]) Andern die Umgebungsvariable Name oder fugt sie hinzu. Die optionale Uberschreibung ist ein Boolescher Wert, der das Verhalten definiert, wenn bereits eine Variable mit demselben Namen existiert. Siehe auch setenv(3). Beispiel: posix.setenv('HOME', '/me', true) unsetenv(Name) Entfernt eine Variable des angegebenen Namens aus der Umgebung. Siehe auch unsetenv(3). Beispiel: posix.unsetenv('HOME') ERWEITERUNG UND ANPASSUNG Bei der Initialisierung fuhrt RPM ein globales Lua-Initialisierungsskript init.lua aus dem Verzeichnis aus, in das %getconfdir expandiert, typischerweise /usr/lib/rpm/init.lua. Damit kann die RPM-Lua-Umgebung angepasst werden, ohne RPM neu kompilieren zu mussen. Fur den eingebetteten Lua-Interpreter werden mit require geladene Module primar in %{getconfdir}/lua/ gesucht. %_rpmluadir ist eine Abkurzung fur diesen Pfad. SIEHE AUCH rpm-macros(7), rpm-payloadflags(7), rpmlua(1), rpm-version(7) https://www.lua.org/ UBERSETZUNG Die deutsche Ubersetzung dieser Handbuchseite wurde von Mario Blattermann erstellt. Diese Ubersetzung ist Freie Dokumentation; lesen Sie die GNU General Public License Version 3 oder neuer bezuglich der Copyright-Bedingungen. Es wird KEINE HAFTUNG ubernommen. Wenn Sie Fehler in der Ubersetzung dieser Handbuchseite finden, schicken Sie bitte eine E-Mail an die Mailingliste der Ubersetzer: . RPM 6.0.1 8. Januar 2026 RPM-LUA(7)