1

我有一个 man 文件,我想在 rpm 安装期间将其安装到 /usr/share/man/man8。这是我的映射。

<mapping>
  <directory>/usr/share/man/man8</directory>
  <documentation>true</documentation> <!-- no difference if I add or remove this -->
  <filemode>644</filemode>
  <username>root</username>
  <groupname>root</groupname>
  <directoryIncluded>false</directoryIncluded>
  <recurseDirectories>false</recurseDirectories>
  <sources>
    <source>
      <location>${project.build.directory}</location>
      <includes>
        <include>mymanpage.8</include>
      </includes>
    </source>
  </sources>
</mapping>

rpm-maven-plugin 错误并告诉我mymanpage.8未找到。我验证了mymanpage.8在目标目录中。然后我注意到插件将mymanpage.8.gz复制到了target/rpm/rpmtest/buildroot/usr/share/man/man8目录。所以我假设插件以某种方式识别它可以 gzip 这个手册页并做到了,但由于我的映射特别包括 mymanpage.8 它抱怨它找不到它。我尝试将包含更改为 mymanpage.8*,但它仍然给我相同的文件未找到错误。

有没有人见过这个?解决方法是什么?

我想我有一个解决方法是将 mymanpage.8 文件复制到我的安装目录,然后在 postinstall scriptlet 中将其移动到 /usr/share/man/man8。

4

3 回答 3

0

问题可能是手册页是在比包更晚的阶段构建的。因此,当 rpm 插件试图打包手册页时,它还不存在。您可以在此处找到生命周期:

https://maven.apache.org/guides/introduction/introduction-to-the-lifecycle.html

因此,请确保在包阶段之前创建手册页并最终在 build 目录中,例如在 generate-resources 中。

于 2017-11-03T00:12:47.010 回答
0

在 rpm 打包之前,有带有“.8”扩展名的手册页。Rpmbuild强制压缩手册页并将其重命名为 .gz 扩展名,因此rpm-maven-plugin找不到扩展名为“.8”的文件。第一个解决方案就是像这样重命名扩展名为 .gz 的未压缩文件

<mapping>
    <directory>/usr/share/man/man8</directory>
    <directoryIncluded>false</directoryIncluded><!-- required for CentOS 7 -->
    <sources>
        <source>
            <!-- rpmbuild rename manpages from *.8 to *.8.gz, so we should use <destination> tag to set new name -->
            <location>generated-docs/mymanpage.8</location>
            <destination>mymanpage.8.gz</destination>
        </source>
    </sources>
<mapping>

现在rpmbuild不再重命名文件,它适用于 CentOS 7(它使用 man-db 包处理手册页),但不适用于 CentOS 6(它使用 man 包处理手册页),CentOS 6 无法打开这样的手册页。

因此,为了修复,需要手动压缩手册页。例如,对于压缩,您可以使用resourcecompressor maven 插件

<plugin>
    <groupId>com.github.ryanholdren</groupId>
    <artifactId>resourcecompressor</artifactId>
    <version>2017-06-24</version>
    <executions>
        <execution>
            <goals>
                <goal>compress</goal>
            </goals>
            <configuration>
                <directory>generated-docs/</directory>
                <filter>\.8$</filter>
                <compression>SMALLEST</compression>
            </configuration>
        </execution>
    </executions>
</plugin>

现在,rpm-maven-plugin可以配置为使用.gz文件(如果需要,可以使用通配符表达式)并且rpmbuild不会尝试重命名和压缩手册页。

<mapping>
    <directory>/usr/share/man/man8</directory>
    <directoryIncluded>false</directoryIncluded><!-- required for CentOS 7 -->
    <sources>
        <source>
            <location>generated-docs/</location>
            <includes>
                <include>*.8.gz</include>
            </includes>
        </source>
    </sources>
</mapping>
于 2020-09-30T16:32:29.307 回答
0

rpm-maven-plugin 将工作委托给 rpmbuild 命令。这些为您压缩手册页。

您可以使用location标签来指定目录,也可以指定文件。

<mapping>
  <directory>/usr/share/man/man8</directory>
  <filemode>644</filemode>
  <username>root</username>
  <groupname>root</groupname>
  <directoryIncluded>false</directoryIncluded>
  <recurseDirectories>false</recurseDirectories>
  <sources>
    <source>
      <location>${project.build.directory}/mymanpage.8</location>
    </source>
  </sources>
</mapping>

如果您更喜欢使用包含,则必须使用通配符模式。

documentation标记不适用于联机帮助页,而是用于其他文档,例如更改日志。请参阅rpm-maven-plugin 文档

于 2017-05-17T15:34:46.223 回答