按照维基上的 spec 文件指南 ,%install 部分。不是说不要在这里设置文件权限吗?应该在 %files 部分进行设置。但是我看 Java 打包指南 里的例子却直接在 %install 部分用 install -m0755 或者 chmod 0755 之类的命令直接设置权限?具体应该怎么做才合适?略有疑问。。。
你明白 %install 的作用吗?
它是用来运行 %make_install 的地方。
所有的 specfile 均基于这个假设。
教程的意思是「不要为了设置权限而设置权限」,这就存在两种情况:
1. 上游安装时会修改权限,比如源代码包里全是 0644,安装可执行包肯定要 0755,上游安装脚本做完了也做对了,你再在 %install 里 chmod 一遍没有意义。
2. 上游做错了,又有几种情况:
1. 这个文件是编译产生的,在 %make_install 后已经直接灌到 %{buildroot} 目录而不是 BUILD 目录了。这时你不应该在 %install 部分去 chmod +x %{buildroot}%{_bindir}/xxx,直接在 %files 部分用 attr(0755,root,root) %{_bindir}/xxx 就能直接改过来。
2. 这个文件是原始目录里就有的文件比如 glib.h,或者 python 这样的 noarch 文件,那应该做权限修复,应该在 %prep 里,%setup -q 解压完压缩包直接就做。没有必要到了 %install 在 %make_install 之前做。
3. 权限错误的情况太多了,可能需要批量修复。那你写 attr(0755,root,root) 就比较累了,可以直接在 %install 里用脚本比如
pushd %{buildroot}%{_bindir}
for i in 1 2 3 4 5 ; do
chmod +x ${i};
done
popd
你偏拿出来一个没有 Makefile 的来作弄自己:
install -m 0755 bin/xxx %{buildroot}%{_bindir}/xxx
这种叫手动安装,你没看到 %{buildroot} 下面连 bin 目录都是自己创建的吗,那一点权限没有你不设置怎么行。严格意义上说这匹配上面的 2.3 节。
是我没说清楚。这次打包的跟前面的那个帖子说的无关。这里打包的是 briss,pdf 文件切边用的,用 java 写的。tarball 直接给了编译好的 jar 文件。注意到 Java 打包指南说打包第三方 jar 是邪恶的。诶诶诶,那我就偷偷打个包自用算了。有空再去源码 svn 仓库检出来看看怎么编译。
我在 /usr/lib/rpm/macros 里发现一个直接用来安装 Java 软件包 的 startscript 的宏 %jpackage_script
根据 rpm --eval %jpackage_script 展开得到的是:
install -d -m 755 $RPM_BUILD_ROOT/usr/bin
cat > $RPM_BUILD_ROOT/usr/bin/%5 << EOF
#!/bin/sh
#
# %{name} script
# JPackage Project <http://www.jpackage.org/>
# Source functions library
_prefer_jre=""
. /usr/share/java-utils/java-functions
# Source system prefs
if -f /etc/java/%{name}.conf ] ; then
. /etc/java/%{name}.conf
fi
# Source user prefs
if -f \$HOME/.%{name}rc ] ; then
. \$HOME/.%{name}rc
fi
# Configuration
MAIN_CLASS=%1
BASE_FLAGS=%2
BASE_OPTIONS=%3
BASE_JARS="%4"
# Set parameters
set_jvm
set_classpath \$BASE_JARS
set_flags \$BASE_FLAGS
set_options \$BASE_OPTIONS
# Let's start
run "\$@"
EOF
但是我在本地用的时候去发现他创建了个文件 %5。。cat > $RPM_BUILD_ROOT/usr/bin/%5 << EOF 。。。这里写的 %5 是怎么回事?
你这回复跟你一楼的帖子一点边都不沾。
Sent from my iPhone 5s using Tapatalk
我只是想说,我都不应该打包这个包的。的确是跑题了
有 %1 ~ %4, 你不知道 %5 什么意思。
那是个宏,你要给参数的,%5 应该就是你喂给这个宏的默认参数,比如包名,脚本名。%1 ~%4 你也可以定义的。
你直接输出这个宏,不给参数,它就认为 %5 本身是参数了,而它又有文件操作(cat),于是就给你输出了个名为 %5 的脚本,不信你用 vim 打开看。
再看了一下,原来这个宏是带参数的。。。那使用这个宏的时候,需要
%jpackage_script arg1 arg2 arg3 arg4 arg5 arg5
加入要省略中间参数,比如 arg2,要怎么做?%jpackage_script arg1 “” arg3 arg4 arg5 arg6 行不行?
自己实验了不行再问。我觉得除了参数五其它都可以直接不写
Sent from my iPhone 5s using Tapatalk