FFBox
FFBox copied to clipboard
[Bugs] ArchLinux 下编译的问题
如题。我已经将软件移植到了ArchLinux的AUR (https://aur.archlinux.org/packages/ffbox) ,3.x版本运行正常,但4.0版本编译成功但无法运行。
PKGBUILD
文件内容:
# Maintainer: zxp19821005 <zxp19821005 at 163 dot com>
pkgname=ffbox
_pkgname=FFBox
pkgver=4.0
_electronversion=24
_nodeversion=16
pkgrel=1
pkgdesc="An user-friendly ffmpeg GUI.一个多媒体转码百宝箱/一个 FFmpeg 的套壳"
arch=('x86_64')
url="https://github.com/ttqftech/FFBox"
license=('LicenseRef-custom')
conflicts=("${pkgname}")
depends=(
"electron${_electronversion}-bin"
'ffmpeg'
)
makedepends=(
'gendesk'
'yarn'
'npm'
'nvm'
'git'
)
source=(
"${pkgname}.git::git+${url}.git#tag=v${pkgver}"
"${pkgname}.sh"
)
sha256sums=('99497d0fe95a663951baa9a189343222078208d90e22eeaaa4d0d0408fb6c055'
'0c7b4041ba449cb35cb5cb23503be164af78e85572dda2d8db0ae3dc7fa2629c')
_ensure_local_nvm() {
export NVM_DIR="${srcdir}/.nvm"
source /usr/share/nvm/init-nvm.sh || [[ $? != 1 ]]
nvm install "${_nodeversion}"
nvm use "${_nodeversion}"
}
build() {
sed -e "s|@electronversion@|${_electronversion}|" \
-e "s|@appname@|${pkgname}|g" \
-e "s|@runname@|app|g" \
-e "s|@options@||g" \
-i "${srcdir}/${pkgname}.sh"
_ensure_local_nvm
gendesk -f -n -q --categories="AudioVideo" --name="${_pkgname}" --exec="${pkgname} %U"
cd "${srcdir}/${pkgname}.git"
export npm_config_build_from_source=true
export ELECTRON_SKIP_BINARY_DOWNLOAD=1
export SYSTEM_ELECTRON_VERSION="$(electron${_electronversion} -v | sed 's/v//g')"
export npm_config_target="${SYSTEM_ELECTRON_VERSION}"
export ELECTRONVERSION="${_electronversion}"
export npm_config_disturl=https://electronjs.org/headers
HOME="${srcdir}/.electron-gyp"
pnpm config set store-dir "${srcdir}/.pnpm_store"
pnpm config set cache-dir "${srcdir}/.pnpm_cache"
pnpm config set link-workspace-packages true
if [ `curl -s ipinfo.io/country | grep CN | wc -l ` -ge 1 ];then
export npm_config_registry=https://registry.npmmirror.com
export npm_config_electron_mirror=https://registry.npmmirror.com/-/binary/electron/
export npm_config_electron_builder_binaries_mirror=https://registry.npmmirror.com/-/binary/electron-builder-binaries/
else
echo "Your network is OK."
fi
rm -rf app release pnpm-lock.yaml
sed 's|"electron-builder",|"electron-builder --dir",|g' -i package.json
sed "s|'../FFBoxService'|'../../ffbox/FFBoxService'|g" -i src/main/index.ts
pnpm install
pnpm add -D pkg
install -Dm755 "${srcdir}/.nvm/versions/node/v${_nodeversion}"*/bin/node "${srcdir}/${pkgname}.git/app/backend/node${_nodeversion}-linux-x64"
pnpm run build:everything
}
package() {
install -Dm755 "${srcdir}/${pkgname}.sh" "${pkgdir}/usr/bin/${pkgname}"
install -Dm755 "${srcdir}/${pkgname}.git/release/linux-"*/FFBoxService -t "${pkgdir}/usr/lib/${pkgname}"
cp -r "${srcdir}/${pkgname}.git/release/linux-"*/resources "${pkgdir}/usr/lib/${pkgname}"
install -Dm644 "${srcdir}/${pkgname}.desktop" -t "${pkgdir}/usr/share/applications"
install -Dm644 "${srcdir}/${pkgname}.git/src/renderer/public/images/icon_256_transparent.png" "${pkgdir}/usr/share/pixmaps/${pkgname}.png"
install -Dm644 "${srcdir}/${pkgname}.git/LICENSE" -t "${pkgdir}/usr/share/licenses/${pkgname}"
}
ffbox.sh
文件内容:
#!/bin/bash
set -e
_APPDIR="/usr/lib/@appname@"
_RUNNAME="${_APPDIR}/resources/@runname@"
_OPTIONS="@options@"
export PATH="${_APPDIR}:${PATH}"
export LD_LIBRARY_PATH="${_APPDIR}/swiftshader:${_APPDIR}/lib:${LD_LIBRARY_PATH}"
export ELECTRON_IS_DEV=0
export ELECTRON_FORCE_IS_PACKAGED=true
export NODE_ENV=production
cd "${_APPDIR}"
if [[ $EUID -ne 0 ]] || [[ $ELECTRON_RUN_AS_NODE ]]; then
exec electron@electronversion@ "${_RUNNAME}" "${_OPTIONS}" "$@" || exit $?
else
exec electron@electronversion@ "${_RUNNAME}" "${_OPTIONS}" --no-sandbox "$@" || exit $?
fi
编译日志如下:
$ updpkgsums && makepkg -f && namcap *.zst
==> 获取源代码...
-> 正在升级 ffbox.git git 仓库...
-> 找到 ffbox.sh
==> 正在为源代码文件创建完整性检查值...
==> 正在创建软件包:ffbox 4.0-1 (2024年04月01日 星期一 11时04分08秒)
==> 正在检查运行时依赖关系...
==> 正在检查编译时依赖关系
==> 获取源代码...
-> 正在升级 ffbox.git git 仓库...
-> 找到 ffbox.sh
==> 正在验证 source 文件,使用sha256sums...
ffbox.git ... 通过
ffbox.sh ... 通过
==> 正在释放源码...
-> 正在创建 ffbox.git git 仓库的活动拷贝...
重置分支 'makepkg'
==> 正在删除现存的 $pkgdir/ 目录...
==> 正在开始 build()...
v16.20.2 is already installed.
Now using node v16.20.2 (npm v8.19.4)
Now using node v16.20.2 (npm v8.19.4)
Your network is OK.
WARN 4 deprecated subdependencies found: @types/[email protected], [email protected], [email protected], [email protected]
Packages: +602
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Progress: resolved 640, reused 616, downloaded 0, added 602, done
dependencies:
+ @khanacademy/simple-markdown 0.11.4
+ crypto-js 4.2.0
+ events 3.3.0
+ koa 2.15.2
+ koa-body 6.0.1
+ koa-mount 4.0.0
+ koa-router 12.0.1
+ koa-static 5.0.0
+ path-browserify 1.0.1
+ pinia 2.1.7
+ vue 3.4.21
+ ws 8.16.0
devDependencies:
+ @types/crypto-js 4.2.2
+ @types/koa 2.15.0
+ @types/koa-mount 4.0.5
+ @types/koa-router 7.4.8
+ @types/koa-static 4.0.4
+ @types/node 18.19.28 (20.12.2 is available)
+ @types/path-browserify 1.0.2
+ @types/ws 8.5.10
+ @vitejs/plugin-vue 4.6.2 (5.0.4 is available)
+ @vitejs/plugin-vue-jsx 3.1.0
+ electron 24.8.8 (29.1.6 is available)
+ electron-builder 23.6.0 (24.13.3 is available)
+ eslint 8.57.0
+ less 4.2.0
+ prettier 2.8.8 (3.2.5 is available)
+ ts-loader 9.5.1
+ typescript 4.9.5 (5.4.3 is available)
+ vite 4.5.3 (5.2.7 is available)
+ vite-plugin-vue-type-imports 0.2.5
+ vite-svg-loader 4.0.0 (5.1.0 is available)
+ webpack 5.91.0
+ webpack-cli 5.1.4
Done in 16.8s
WARN 4 deprecated subdependencies found: @types/[email protected], [email protected], [email protected], [email protected]
Packages: +54
++++++++++++++++++++++++++++++++++++++++++++++++++++++
Progress: resolved 691, reused 667, downloaded 0, added 54, done
devDependencies:
+ pkg 5.8.1
Done in 4.4s
> [email protected] build:everything /home/zxp-endeavouros/.cache/paru/clone/ffbox/src/ffbox.git
> npm run build:frontend && npm run build:backend && npm run package
> [email protected] build:frontend
> node scripts/build-frontend.mjs
注入环境变量信息 {"gitCommit":"*2eaef11","isDev":false}
开始编译 main
vite v4.5.3 building for production...
✓ 83 modules transformed.
../app/main/index.cjs 81.44 kB │ gzip: 30.91 kB │ map: 411.69 kB
✓ built in 609ms
开始编译 preload
vite v4.5.3 building for production...
✓ 1 modules transformed.
../app/preload/index.cjs 1.00 kB │ gzip: 0.41 kB │ map: 3.66 kB
✓ built in 13ms
开始编译 renderer
vite v4.5.3 building for production...
transforming (209) ../../node_modules/.pnpm/@[email protected]/node_modules/@khanacademy/perseus-core/dist/es/index.js[@vue/compiler-sfc] the >>> and /deep/ combinators have been deprecated. Use :deep() instead.
[@vue/compiler-sfc] the >>> and /deep/ combinators have been deprecated. Use :deep() instead.
[@vue/compiler-sfc] the >>> and /deep/ combinators have been deprecated. Use :deep() instead.
[@vue/compiler-sfc] the >>> and /deep/ combinators have been deprecated. Use :deep() instead.
✓ 250 modules transformed.
../../app/renderer/index.html 0.60 kB │ gzip: 0.41 kB
../../app/renderer/assets/menu_button-74f06b30.svg 0.75 kB │ gzip: 0.36 kB
../../app/renderer/assets/×-f0bff76c.svg 0.78 kB │ gzip: 0.42 kB
../../app/renderer/assets/deleteNpause_button-5ff38eca.svg 5.97 kB │ gzip: 1.61 kB
../../app/renderer/assets/alipay-56ee6c49.png 8.29 kB
../../app/renderer/assets/wechatpay-03bdfefd.svg 12.59 kB │ gzip: 5.00 kB
../../app/renderer/assets/qqpay-a6406fb6.png 21.97 kB
../../app/renderer/assets/drop_files_ok-4dcedf93.png 25.34 kB
../../app/renderer/assets/drop_files-69d120a3.png 28.42 kB
../../app/renderer/assets/index-99ff6730.css 67.80 kB │ gzip: 11.13 kB
../../app/renderer/assets/index-b5084712.js 398.55 kB │ gzip: 144.31 kB │ map: 1,753.74 kB
✓ built in 3.07s
> [email protected] build:backend
> node scripts/build-backend.mjs
注入环境变量信息 {"gitCommit":"*2eaef11","isDev":false}
开始编译后端
vite v4.5.3 building for production...
✓ 16 modules transformed.
../app/backend/index.cjs 77.04 kB │ gzip: 21.84 kB │ map: 284.02 kB
✓ built in 385ms
> [email protected] pkg:backend:linux
> pkg --config ./config/pkg.linux.config.json ./app/backend/index.cjs
> [email protected]
> Fetching base Node.js binaries to PKG_CACHE_PATH
fetched-v16.16.0-linux-x64 [====================] 100%
> Warning Failed to make bytecode node16-x64 for file /snapshot/ffbox.git/node_modules/.pnpm/[email protected]/node_modules/mime/dist/src/index.js
> Warning Failed to make bytecode node16-x64 for file /snapshot/ffbox.git/node_modules/.pnpm/[email protected]/node_modules/mime/dist/src/Mime.js
> Warning Failed to make bytecode node16-x64 for file /snapshot/ffbox.git/node_modules/.pnpm/[email protected]/node_modules/mime/dist/types/other.js
> Warning Failed to make bytecode node16-x64 for file /snapshot/ffbox.git/node_modules/.pnpm/[email protected]/node_modules/mime/dist/types/standard.js
> [email protected] package
> electron-builder --dir
• electron-builder version=23.6.0 os=6.6.23-1-lts
• loaded configuration file=/home/zxp-endeavouros/.cache/paru/clone/ffbox/src/ffbox.git/electron-builder.json5
• description is missed in the package.json appPackageFile=/home/zxp-endeavouros/.cache/paru/clone/ffbox/src/ffbox.git/package.json
• writing effective config file=release/builder-effective-config.yaml
• packaging platform=linux arch=x64 electron=24.8.8 appOutDir=release/linux-unpacked
• asar usage is disabled — this is strongly not recommended solution=enable asar and use asarUnpack to unpack files that must be externally available
• asar usage is disabled — this is strongly not recommended solution=enable asar and use asarUnpack to unpack files that must be externally available
==> 正在进入 fakeroot 环境...
==> 正在开始 package()...
==> 正在清理安装...
-> 正在删除 libtool 文件...
-> 正在清除不打算要的文件...
-> 正在移除静态库文件...
-> 正在从二进制文件和库中清除不需要的系统符号...
-> 正在压缩 man 及 info 文档...
==> 正在检查打包问题...
==> 正在构建软件包"ffbox"...
-> 正在生成 .PKGINFO 文件...
-> 正在生成 .BUILDINFO 文件...
-> 正在生成 .MTREE 文件...
-> 正在压缩软件包...
: Can't translate pathname 'usr/lib/ffbox/app/app/renderer/assets/×-f0bff76c.svg' to UTF-8==> 正在离开 fakeroot 环境。
==> 完成创建:ffbox 4.0-1 (2024年04月01日 星期一 11时05分19秒)
ffbox W: No ELF files and not an "any" package
ffbox W: File name usr/lib/ffbox/app/app/renderer/assets/×-f0bff76c.svg contains non standard characters
ffbox W: Dependency bash detected and implicitly satisfied (programs ['bash'] needed in scripts ['usr/bin/ffbox'])
ffbox W: Dependency included, but may not be needed ('electron24-bin')
ffbox W: Dependency included, but may not be needed ('ffmpeg')
目前来看,几个问题:
1是缺少pkg
依赖,我自己手动添加了;
2是我这边访问https://registry.npm.taobao.org
总是提示reason: certificate has expired
,然后编译报错,所以我只好删除pnpm-lock.yaml
;个人建议可以生成一个.npmrc
文件,然后指定国内镜像;
3是config
目录里面的pkg.linux.config.json
中需要的node16-linux-x64
我使用代理后能够正常下载,不使用代理无法下载,会报错,且无法正常生成FFBoxService
;我使用nvm
中的node
可执行文件替代无效;
4是按照ArchLinux相关打包准则(https://wiki.archlinux.org/title/Electron_package_guidelines),我直接使用系统自带的electron24
,但找不到FFBoxService
文件,我现在是直接修改src/main/index.ts
文件指定路径,结果虽然没有报错,但是无法正常启动服务,报错信息: “服务器 未连接 连接出错,建议检查网络连接或防火墙。”
3.0 的版本距今已经接近两年了,在这期间我都没维护过,所以 3.0 和更久远的版本暂时是给不了你太多帮助了❤️。
我个人很少接触 Linux 生态,因此 Linux 我只编译了我用过的 debian 的版本。其他方面,你应该会比我了解更多😂。另外,我对 FFBox 的主要精力可能目前只停留在“能用”了,也就是先保证功能,再保证适配。看着官网上叮叮咚咚排着一堆下载按钮,我认为跨平台还是个不小的工作量😂。
同理,我只保证我自己能顺畅写、比较有前端开发经验的人能看懂,不保证多数人能把我的项目编译出来,所以我的 readme 里是没有写如何从零开始编译的。这点望理解😂。
然后是下面几个问题的一些回答:
- 文档中确实遗漏了这点,
pkg
是需要全局安装的一个额外依赖(否则需要修改打包脚本手动指定到项目的 pkg)。 - 淘宝镜像的 SSL 证书在最近过期了,目前我的常用解决方案是
pnpm config get strict-ssl
。后期我可以看下如何更好地解决这个问题。 -
pkg
的问题我倒是很少遇到,暂时不清楚如何配置它的镜像。pkg
的作用是将 node.js 项目编译成单个可执行文件,它不是一个简单的 node 解释器 + js 静态文件那样的东西,而是包含了一些像预编译为字节码之类的东西,所以是不能直接用node
代替的,它们不是同一个东西。 - 我没有接触过 ArchLinux,还不清楚改用系统 electron 是如何实现的,因为在生产环境总得有一个载体负责启动主进程的 js 文件,总不能让用户在 console 里输入
electron main.js
吧?改用系统 electron 的话各种相关路径会发生变化。这里涉及到electron 启动 FFBoxService
和FFBoxService
启动ffmpeg
两个步骤。由于涉及到多个进程的调用,console.log 信息可能不能直接看到。这里推荐一些个人会使用的调试方式,用来看各种方式获取到的路径具体是什么:第一个步骤是通过向渲染进程发送debugMessage
的方式(已经在代码中保留了这些注释掉的内容)去在控制台里接收打印的消息;第二个步骤可以尝试的调试方式是在initFFmpeg
的时候把ffmpegVersion
改成自己要打印的内容,这样它会出现在主界面上的相应位置。