You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用fpm构建deb包时如何将配置和service文件安装到指定路径

调整方案

你的配置存在3个核心问题,导致出现冗余文件、路径不符合预期:

  1. 同时使用--deb-systemd参数和手动指定service文件安装路径,--deb-systemd会自动将service文件打包到/lib/systemd/system目录,你手动指定了/etc/systemd/system路径,导致service文件被重复打包3份
  2. --config-files参数填写的是本地相对路径,fpm会额外将这两个文件打包到deb包的根目录,产生冗余文件
  3. fpm命令行的myprogram.service=/etc/systemd/system/行尾未加续行反斜杠,导致后面的-p参数未被正确识别
  4. description参数用了单引号包裹,内部的shell变量${DEB_PACKAGE_DESCRIPTION}不会被正确展开

符合你要求的目标路径(service放/etc/systemd/system)的配置:

mkdir -p $BUILD_ARTIFACTS_DIR && cp $BINARY_NAME $BUILD_ARTIFACTS_DIR
if which fpm; then
    fpm --description "${DEB_PACKAGE_DESCRIPTION}" -s dir -t deb -n myprogram \
      --config-files /etc/myprogram/myprogram.ini --config-files /etc/systemd/system/myprogram.service \
      --version $VERSION_STRING \
      --deb-user root --deb-group root \
      $BINARY_NAME=/usr/bin/ \
      myprogram.ini=/etc/myprogram/ \
      myprogram.service=/etc/systemd/system/ \
      -p ${DEB_PACKAGE_NAME}-${VERSION_STRING}.deb
fi

更符合Debian规范的可选方案:

Debian官方规范推荐第三方软件的systemd服务文件放到/lib/systemd/system目录,如果你接受这个标准路径,可以保留--deb-systemd参数,fpm会自动处理systemd守护进程重载、服务开机自启的逻辑,配置如下:

mkdir -p $BUILD_ARTIFACTS_DIR && cp $BINARY_NAME $BUILD_ARTIFACTS_DIR
if which fpm; then
    fpm --description "${DEB_PACKAGE_DESCRIPTION}" -s dir -t deb -n myprogram \
      --config-files /etc/myprogram/myprogram.ini \
      --version $VERSION_STRING \
      --deb-user root --deb-group root \
      --deb-systemd myprogram.service \
      $BINARY_NAME=/usr/bin/ \
      myprogram.ini=/etc/myprogram/ \
      -p ${DEB_PACKAGE_NAME}-${VERSION_STRING}.deb
fi

构建完成后用dpkg -c命令检查,就不会出现冗余文件,所有文件都会安装到你指定的目标路径。

内容的提问来源于stack exchange,提问作者cybertextron

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 11:18:00