RPM-LUA(7) Miscellaneous Information Manual RPM-LUA(7) rpm-lua - Lua RPM %scriptlet -p %{lua:...} Lua RPM Lua rpm-macros(7) . Lua . rpm rpm-macroproc(7) Lua RPM macros . Lua macros.foo macros['foo'] . Lua nil . : 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 Lua . ( ) Lua macros macros.() macros[](). o o 1: macros.with('foo') 2: macros.dostuff({'one', 'two', 'three'}) print() Lua . Lua return . : %sum() %{lua: local v = 0 for _, a in ipairs(arg) do v = v + tonumber(a) end return v } Lua opt arg opt arg . . : %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 } Lua RPM : : %pre -p print(' Lua') /bin/sh Lua : . "" . Lua %pretrans . Lua . : Lua . arg . : Lua 1 () 0 () RPM . . arg[2] arg[3] $1 $2 . : %postun -p if arg[2] == 0 then print("erasing") end RPM_INSTALL_PREFIX . : 4.18.0 error( []) Lua . SPEC rpm-spec(5) rpmbuild(1) rpmspec(1) Lua RPM spec: patches spec spec. patch_nums spec spec. sources spec spec. source_nums spec spec. : for i, p in ipairs(patches) do print(string.format("echo %d: %sn", patch_nums[i], patches[i])) end Lua ( Lua RPM) Lua RPM. Lua . rpm RPM: b64decode() base64 . b64encode(). : blob = 'binary data' print(blob) e = rpm.b64encode(blob) print(e) d = rpm.b64decode(e) print(d) b64encode( [ _]) base64 . . b64decode(). define(" ") . . : rpm.define('foo 1') execute( [ 1 [...]) . . . rpm.spawn(). : 4.15.0 : rpm.execute('ls', '-l', '/') expand() RPM . . : rpm.expand('%{_libdir}/mydir') glob( []) . c . : for i, p in ipairs(rpm.glob('*')) do print(p) end interactive() . rpmlua(1) . : rpm --eval "%{lua: rpm.interactive()}" isdefined() . . (: 4.17.0) : if rpm.isdefined('_libdir') then ... end load() . %{load:...} . : rpm.load('my.macros') open( [[.]]) RPM . : o a: o w: o r: () o +: o x: rpm-payloadflags(7) . : 4.17.0 : f = rpm.open('some.txt.gz', 'r.gzdio') print(f:read()) rpm.fd (methods) : fd:close() . : f = rpm.open('file') f:close() fd:flush() . : f = rpm.open('file', 'w') f:write('foo') f:flush() f:close() fd:read([len]) len . : f = rpm.open('/some/file') print(f:read()) fd:seek(mode, offset) . mode set cur end (offset) : . . . lseek(3). : f = rpm.open('newfile', 'w') f:seek('set', 555) f:close() fd:write(buf [, len]) buf len . : f = rpm.open('newfile', 'w') f:write('data data') f:close() fd:reopen(mode) ( rpm.open()). : rpm.open('some.txt.gz') f = f:reopen('r.gzdio') print(f:read())} redirect2null(fdno) () fdno /dev/null ( 4.16 posix.redirect2null()) RPM v4 . `rpm.spawn()` `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({command} [, {actions}]) (Spawn) . {command} . : | | () | |---------|---------------------- | *stdin* | | | *stdout*| | | *stderr*| | : (nil, message, code) . : 4.20 : rpm.spawn({'systemctl', 'restart', 'httpd'}, {stderr='/dev/null'}) undefine(name) . MACROS. . : rpm.undefine('zzz') vercmp(v1, v2) RPM . -1 0 1 v1 v2. rpm-version(7). : RPM 4.16 EVR . : rpm.vercmp('1.2-1', '2.0-1') ver(evr), ver(e, v, r) RPM. evr (epoch) (version) (release) ( ). : e v r EVR Lua. : 4.17.0 : v1 = rpm.ver('5:1.0-2) v2 = rpm.ver(3, '5a', 1) if v1 < v2 then ... end if v1.e then ... end posix Lua (io). posix Lua. posix posix.function(). Lua access(3) posix.access(). access(path [, mode]) / path. access(3). mode : o r: o w: o x: o f: : if posix.access('/bin/rpm', 'x') then ... end chdir(path) path. chdir(1). : posix.chdir('/tmp') chmod(path, mode) /. chmod(2) chmod(1). : posix.chmod('aa', 600) posix.chmod('bb', 'rw-') posix.chmod('cc', 'u+x') chown(path, user, group) / / path. user group /. chown(2) chown(1). : . : posix.chown('aa', 0, 0) posix.chown('bb', 'nobody', 'nobody') ctermid() . ctermid(3). : print(posix.ctermid()) dir([path]) - readdir(3). path . : for i,p in pairs(posix.dir('/')) do print(p..'n') end errno() strerror(3) errno(3) . : f = '/zzz' if not posix.chmod(f, 100) then s, n = posix.errno() print(f, s) end exec(path [, args...]) () . posix.fork(). RPM v4 . rpm.spawn() rpm.execute() . files([path]) . . : for f in posix.files('/') do print(f..'n') end fork() () (Fork) . fork(2). RPM v4 . rpm.spawn() rpm.execute() . : pid = posix.fork() if pid == 0 then posix.exec('/foo/bar') elseif pid > 0 then posix.wait(pid) end getcwd() . getcwd(3). : if posix.getcwd() ~= '/' then ... endif getenv(name) . getenv(3). : if posix.getenv('HOME') ~= posix.getcwd() then print('not at home') end getgroup(group) group(5) . group . . name gid 1 . : print(posix.getgroup('wheel').gid) getlogin() . getlogin(3). : n = posix.getlogin() getpasswd([ [, ]]) passwd(5) . . . : o name o uid o gid o dir o shell o gecos o passwd . : pw = posix.getpasswd(posix.getlogin(), 'shell')| getprocessid([]) . o egid: o euid: o gid: o uid: o pgrp: o pid: o ppid: . : if posix.getprocessid('pid') == 1 then ... end kill(pid [, ]) signal(7) () . : 9 SIGKILL. SIGTERM. kill(2). : posix.kill(posix.getprocessid('pid')) link(_, _) _ _ . link(2). : f = rpm.open('aaa', 'w') posix.link('aaa', 'bbb') mkdir() . mkdir(2). : posix.mkdir('/tmp') mkfifo() FIFO . mkfifo(2). : posix.mkfifo('/tmp/badplace') pathconf( [, ]) pathconf(3) . 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. . : posix.pathconf('/', 'path_max') putenv() . putenv(3). : posix.putenv('HOME=/me') readlink() . readlink(2). : posix.mkdir('aaa') posix.symlink('aaa', 'bbb') print(posix.readlink('bbb')) rmdir() . rmdir(2). : posix.rmdir('/tmp') setgid() . . setgid(2). : . setuid() . . setuid(2). : . : posix.setuid('nobody') sleep() . sleep(3). : posix.sleep(5) stat( [, ]) stat(3) . o mode o ino o dev o nlink o uid o gid o size o atime o mtime o ctime o type. . : 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(_, _) _ _. symlink(2). : posix.mkdir('aaa') posix.symlink('aaa', 'bbb') sysconf([]) sysconf(3). : 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. . : posix.sysconf('open_max')| times([]) times(2). o utime o stime o cutime o cstime o elapsed . : t = posix.times() print(t.utime, t.stime) ttyname([fd]) fd. fd 0 ( ). ttyname(3). : if not posix.ttyname() then ... endif umask([mode]) umask(2) . mode posix.chmod(). : print(posix.umask()) posix.umask(222) posix.umask('ug-w') posix.umask('rw-rw-r--') uname(format) uname(2) . : o %m: o %n: o %r: o %s: o %v: : print(posix.uname('%s %r')) utime(path [, mtime [, ctime]]) . mtime ctime (epoch). utime(2). mtime ctime touch(1). : posix.mkdir('aaa') posix.utime('aaa', 0, 0) wait([pid]) () . pid . wait(2). RPM v4 . rpm.spawn() rpm.execute() . : pid = posix.fork() if pid == 0 then posix.exec('/bin/ls')) elseif pid > 0 then posix.wait(pid) end setenv(name, value [, overwrite]) name. overwrite . setenv(3). : posix.setenv('HOME', '/me', true) unsetenv(name) name . unsetenv(3). : posix.unsetenv('HOME') RPM init.lua %getconfdir /usr/lib/rpm/init.lua. rpm RPM. require %{getconfdir}/lua/. %_rpmluadir . rpm-macros(7) rpm-payloadflags(7) rpmlua(1) rpm-version(7) https://www.lua.org/ 3 . . : . RPM 6.0.1 6 2026 RPM-LUA(7)