为Play scala项目添加RPM包的自定义脚本

时间:2016-02-09 22:11:46

标签: scala rpm rpmbuild playframework-2.4 sbt-native-packager

我想为一个Play scala项目添加一些命令到RPM包(使用sbt-native-packager构建)。例如:

import org.newdawn.slick.Color;
import org.newdawn.slick.GameContainer;
import org.newdawn.slick.Graphics;
import org.newdawn.slick.SlickException;
import org.newdawn.slick.state.BasicGameState;
import org.newdawn.slick.state.StateBasedGame;

public class Menu extends BasicGameState {

    private int ID = 1;

    @Override
    public void init(GameContainer arg0, StateBasedGame arg1) throws SlickException {
    }

    @Override
    public void render(GameContainer container, StateBasedGame game, Graphics g) throws SlickException {
        g.setColor(Color.white);
        g.drawString("Higher or Lower", 50, 10);

        g.drawString("1. Play Game", 50, 100);
        g.drawString("2. High Scores", 50, 120);
        g.drawString("3. Quit", 50, 140);

    }

    @Override
    public void update(GameContainer arg0, StateBasedGame arg1, int arg2) throws SlickException {

    }

    @Override
    public int getID() {
        return ID;
    }

}

以便在通过yum安装RPM软件包时执行它们。

我在一个标准的sbt项目中看到,看起来我们可以使用自定义模板:

mkdir -p /opt/myapp
chmod +w /opt/myapp

但是在Play项目中,我们有以下文件夹:

src/templates/start

我们根本没有app conf project dist 文件夹。

我想知道如何添加自定义命令,这些命令可以在为Play项目安装RPM之前或之后运行。

1 个答案:

答案 0 :(得分:1)

我还没有使用sbt-native-packager的这个功能,但我知道RPM spec文件支持定义在特定事件中运行的脚本(例如%pre - 在安装之前运行)。

看起来sbt-native-package通过覆盖maintainerScripts来支持这一点:

// overriding
import RpmConstants._
maintainerScripts in Rpm := Map(
  Pre -> Seq("""echo "pre-install""""),
  Post -> Seq("""echo "post-install""""),
  Pretrans -> Seq("""echo "pretrans""""),
  Posttrans -> Seq("""echo "posttrans""""),
  Preun -> Seq("""echo "pre-uninstall""""),
  Postun -> Seq("""echo "post-uninstall"""")
)

请注意,这仅适用于sbt-native-package 1.1.0+。

documentation

中详述了其他几种方法