使用fpm构建deb包时如何将配置和service文件安装到指定路径
调整方案
你的配置存在3个核心问题,导致出现冗余文件、路径不符合预期:
- 同时使用
--deb-systemd参数和手动指定service文件安装路径,--deb-systemd会自动将service文件打包到/lib/systemd/system目录,你手动指定了/etc/systemd/system路径,导致service文件被重复打包3份 --config-files参数填写的是本地相对路径,fpm会额外将这两个文件打包到deb包的根目录,产生冗余文件- fpm命令行的
myprogram.service=/etc/systemd/system/行尾未加续行反斜杠,导致后面的-p参数未被正确识别 - 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
相关产品推荐
相关产品推荐

