LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1236|回复: 3

制作rpm包时spec脚本的问题……

[复制链接]
发表于 2008-11-17 16:56:56 | 显示全部楼层 |阅读模式
由于安装rpm时,都要有root权限,
所以安装rpm格式的安装包到/usr/bin下时,其用户和用户组都是root。
这样就出现了“普通用户不能访问安装后程序“的问题;

我在spec脚本的%post字段下,
打算用
usersname=`users`
usersgroup=`groups "$usersname"`
chown -R "$usersname":"$usersgroup"  /home/myApp/ 来修改我的程序的用户和用户组,
但是就是不成功,其用户和用户组还是root。

本来我是想用`whoami`来获取当前用户名的,发现它是root(因为安装是要root权限的),所以就用了`users`,除了这个命令,是否还有其他的方法获取当前系统的用户名的???

我把spec脚本贴出来,麻烦给大家看看有什么地方写得不对,该如何解决。谢谢!
我把%prep 到 %install注释掉,是因为只是打包二进制程序,不用编译源码。

还有个问题:
如何把文件类型和图标文件关联?我在ubuntu8.04下,直接copy图片到usr/share/icons/gnome/size()/mimetypes/gnome-mime-application-x-btx.png下就可以;
但是在openSuse11.0下就不行,不知道原因。请大家给个思路。谢谢!

下面是spec脚本:

  1. #
  2. #   RPM "spec" file for the myApp for Linux.
  3. #
  4. #   Original version by adang <adang322@126.com>.
  5. #
  6. #   Copyright 2007-2008 by company Inc., all rights reserved.
  7. #
  8. %define _prefix /usr

  9. Summary: myApp for Linux
  10. Name: myApp
  11. Version: 1.0
  12. Release: 1
  13. Epoch: 1
  14. License: Commercial
  15. Group: Applications/Productivity
  16. Source: %{name}-%{version}.tar.gz
  17. Url: http://www.company.org
  18. Packager: adang <adang322@126.com>
  19. Vendor: company Inc.

  20. # Use buildroot so as not to disturb the version already installed
  21. BuildRoot: /tmp/%{name}-%{version}
  22. BuildArch: x86_64

  23. # Dependencies...
  24. #Requires: libcups(>=2.0)

  25. %description
  26. myApp ......

  27. #%prep
  28. #%setup

  29. #%build
  30. #[ ! -f Makefile ] || make distclean
  31. #%configure
  32. #make

  33. #%install
  34. #[ -n "$RPM_BUILD_ROOT" -a "$RPM_BUILD_ROOT" != "/" ] && rm -rf $RPM_BUILD_ROOT

  35. #%makeinstall
  36. #for doc in ABOUT-NLS AUTHORS README COPYING INSTALL NEWS TODO ChangeLog; do
  37. #rm -f $RPM_BUILD_ROOT%{_prefix}/doc/nothing/$doc;
  38. #done;

  39. %post
  40. #chmod 766 -R /usr/bin/myApp
  41. usersname=`users`
  42. usersgroup=`groups "$usersname"`
  43. chown -R "$usersname" /home/myApp

  44. chown "$usersname" /usr/share/mime-info/myApp.keys
  45. chown "$usersname" /usr/share/mime-info/myApp.mime
  46. chown "$usersname" /usr/share/applications/myApp.desktop
  47. chown "$usersname" /usr/share/application-registry/myApp.application
  48. chown "$usersname" /usr/share/mime/packages/myApp.xml
  49. chown "$usersname" /usr/share/pixmaps/myApp.png
  50. chown "$usersname" /usr/share/icons/gnome/8x8/mimetypes/gnome-mime-application-x-btx.png
  51. chown "$usersname" /usr/share/icons/gnome/48x48/mimetypes/gnome-mime-application-x-btx.png
  52. chown "$usersname" /usr/share/icons/gnome/22x22/mimetypes/gnome-mime-application-x-btx.png
  53. chown "$usersname" /usr/share/icons/gnome/16x16/mimetypes/gnome-mime-application-x-btx.png
  54. chown "$usersname" /usr/share/icons/gnome/32x32/mimetypes/gnome-mime-application-x-btx.png
  55. chown "$usersname" /usr/share/icons/gnome/24x24/mimetypes/gnome-mime-application-x-btx.png

  56. echo "$usersname" >> /home/adang/test
  57. echo `groups "$usersname"` >> /home/adang/test
  58. echo "$usersgroup" >> /home/adang/test

  59. fileName="/usr/share/application/defaults.list"
  60. msg="application/x-btx=myApp.desktop"

  61. count=`grep "$msg" /usr/share/applications/defaults.list`

  62. if [ "$count" != "$msg" ]; then
  63.         echo "$msg" >> /usr/share/applications/defaults.list
  64. fi

  65. update-desktop-database
  66. update-mime-database /usr/share/mime/

  67. ln -s /home/myApp/myApp /usr/bin/myApp
  68. chown "$usersname":"$usersgroup /usr/bin/myApp

  69. ln -s /usr/share/applications/myApp.desktop /usr/share/autostart/myApp.desktop
  70. chown "$usersname":"$usersgroup /usr/share/autostart/myApp.desktop

  71. %postun
  72. rm -r /usr/bin/myApp
  73. rm -r /usr/share/autostart/myApp.desktop

  74. %clean
  75. #[ -n "$RPM_BUILD_ROOT" -a "$RPM_BUILD_ROOT" != "/" ] && rm -rf $RPM_BUILD_ROOT

  76. %files
  77. %defattr(-,"$usersname","$usersgroup")
  78. /home/myApp
  79. /usr/share
复制代码
 楼主| 发表于 2008-11-17 17:29:27 | 显示全部楼层
刚刚试了把
usersname=`users`
usersgroup=`groups "$usersname"`
改为实际的用户名
usersname="adang"
usersgroup="users"
这样就可以。
所以现在的问题是:
在以root权限运行的spec中,如何获取当前系统的用户名(比如我是以adang登录的,那么usersname="adang")?
回复 支持 反对

使用道具 举报

发表于 2008-11-24 00:47:16 | 显示全部楼层
rpm 安装的东西,一般来说 owner 不应该是安装这个 rpm 包的用户。

所以一般不在 rpm 里面处理权限问题。通常你的 makefile 里面应该有 make install 这个选项,在 make install 的脚本里面,用 install 命令已经处理好拥有者和权限的问题了。

当前的登录用户,可以试试 echo $LOGNAME
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-11-28 11:36:25 | 显示全部楼层
谢谢jeff_yecn。
我试试看。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表