【问题标题】:Get user while packaging rpm打包 rpm 时获取用户
【发布时间】:2018-01-24 16:16:39
【问题描述】:

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

请帮助如何在 Spec 文件中获取用户名

【问题讨论】:

标签: linux rpm packaging rpm-spec


【解决方案1】:

.spec 中,%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 文件中定义它将使该宏仅对您可用。

【讨论】:

  • 感谢您的回答。我只获得用户名,但是,我想获得用户的完整路径(例如:/home/)。顺便说一句,抱歉回复晚了..
猜你喜欢
  • 2013-11-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-09-07
  • 1970-01-01
相关资源
最近更新 更多