在打包rpm时获取用户

时间:2018-01-24 16:16:39

标签: linux rpm packaging rpm-spec

我正在尝试在打包rpm时在我的spec文件中获取USER-NAME。 “$ HOME”命令为我提供了以bash运行的情况。 Spec文件也像bash一样工作但是当我在spec文件的%post部分运行类似的命令时,我得到'root'作为输出。 这可能发生在用户使用sudo运行rpm包时。

请帮助如何在Spec文件中获取USER名称

1 个答案:

答案 0 :(得分:0)

.spec a %define宏中,您会获得用户名。这是一个示例,它在.spec文件中的外观如何。

 Source0: %{name}-%{version}.tar.gz

 # User defined function to get who built the RPM
 %define packagername %(who am i | awk '{print $1}')

 %description
 ...
 %prep
 ...

 # Then in the post section call the macro %{packagername}
 %post
 echo "Packager is: %{packagername}"

注意,%post部分仅在安装.rpm文件时运行。上面会将信息打印到stdout

输出

$ sudo rpm -ivh simple-0-1.x86_64.rpm
Preparing...                ########################################### [100%]
   1:simple                 ########################################### [100%]
Packager is:  iamauser

为了在系统上全局使用此宏,可以在/etc/rpm/macros.<somename>内定义它。

$ cat /etc/rpm/macros.username
# Get who is the packager
%packagername %(who am i | awk '{print $1}')

使用全局定义,不需要在.spec文件中定义它。

如果您没有权限写入/etc/rpm,那么在~/.rpmmacros文件中对其进行定义会使该宏仅供您使用。