17.7 OpenList

  • 功能请求:做成 Port。

安装

官方二进制包

请以普通用户执行:

$ mkdir openlist
$ cd openlist
$ fetch https://github.com/OpenListTeam/OpenList/releases/download/v4.0.8/openlist-freebsd-amd64.tar.gz
$ tar zxvf openlist-freebsd-amd64.tar.gz
$ rm openlist-freebsd-amd64.tar.gz

注意

根据 手动安装 所述及实际测试,无需额外配置后端 OpenList-Frontend。

编译安装(可选)

安装依赖

  • 使用 pkg 安装

# pkg install git go
  • 或者使用 Ports 安装

编译构建

请以普通用户执行:

  • 下载源码

  • 开始构建

编译后的文件即在 build 下。叫 OpenList,为了方便使用,在以下教程中笔者将其重命名为 openlist

编写 RC 脚本

创建并编辑 /usr/local/etc/rc.d/openlist

增加执行权限

使用 openlist 服务

增强安全,使用普通用户执行进程(ykla 是我的普通用户名,改成你自己的):

警告

注意 OpenList 目录的属主和组都必须是 ykla,即你的普通用户名。否则会报错:

FATA[2025-07-06 11:27:56] 1511: failed to open start log file:open /home/ykla/OpenList/daemon/start.log: no such file or directory

修改命令类似于(修改 OpenList 目录及其中所有文件的属主为 ykla):

初始化

重置 admin 密码为 1

登录

http://ip:5244,请将 ip 改为你的局域网地址。用户名是 admin

OpenList in FreeBSD
OpenList in FreeBSD

参考文献

为 OpenList 指定外部播放器(vlc)

地址解码

一组用于对任意数据流进行 URL 编码和解码的工具,可从命令行或标准输入读取数据。我们需要这个 Port 对我们的地址进行解码。

  • 使用 pkg 安装:

  • 或者使用 Ports 安装:

配置 vlc 外部播放器

OpenList 中的内嵌播放器有时不能播放某些视频,但 OpenList 可以通过 URI 调用外部程序(通过 xdg-open )。OpenList 为 vlc 指定的视频地址形如 vlc://http://xxx,只要为 vlc:// 开头的 URI 指定 vlc 程序即可。请自行安装 vlc。

xdg-open 向 vlc 传递 URI 时会包含 vlc:// , vlc 不能打开这样的地址,需要在打开视频地址前先去除,然后调用 vlc,下面是要调用的脚本:

增加执行权限

新建 userapp-xxx.desktop(你只可改动字段 xxx 为你想要的名字,其他字段不可改变。如 userapp-abc.desktop)文件,以便 xdg-open 调用上面的脚本,在本文中为 userapp-vlc.desktop

注册 vlc:// URI 的调用程序

配置 mpv 外部播放器

mpv-noschema.sh

本机存储的多属主权限管理

以普通用户身份运行服务是一种安全的方式,如上文使用了用户 ykla。

有这样的一种情况,在 OpenList 中挂载的本地目录及其子目录和文件属主并非 ykla:如通过 http 服务上传的目录及文件,通过以 daemon 方式运行的 aria2 或 qBitTorrent 下载的目录及文件,还有其它各种情况。这时访问这些目录及其子目录和文件可能会存在权限问题。

常用的解决方案:

  • 通过设置(组和其他)访问权限使 OpenList 的运行用户可以访问。

  • 一开始就规划好,使各种可能的服务都使用同一个用户运行,但这个方法比较麻烦,也会让各种服务的专有文件失去隔离性。

上面的方案在属主不同的情况比较少的时候还是可以的,情况多了就不太方便。这时使 bindfs 就比较方便。Bindfs 类似于 nullfs,但在挂载目标目录到其他位置时,你可以覆盖文件的所有权。

安装 bindfs

  • 使用 pkg 安装:

  • 使用 Ports 安装:

测试用例

  • 以普通用户权限运行

  • 以 root 用户权限运行

这里 /var/www/upload 的属主是 www

该命令将 /var/www/upload 挂载到了 /home/ykla/extdata/wwwupload

用户 ykla 在访问 /var/www/upload 时目录下的目录和文件属主维持不变(仍是 www),访问 /home/ykla/extdata/wwwupload 时目录下的目录和文件属主都认为是 ykla。这时 OpenList 只要用本机存储挂载 /home/ykla/extdata/wwwupload 即可轻松解决访问权限问题。

也可以用 --map 选项,使用类似于 NFS 的 UID/GID 映射机制(用于将某些用户/组映射成其他的用户/组),这在某些时候可能是更好的选择。

参考文献

影视刮削

此方案使用 zsh,请自行安装。

此处的刮削意指获取本地多媒体文件的相关信息,如海报,制作人信息,配音,字幕等周边内容。

OpenList 未内置原生的刮削功能。

但是利用好 OpenList 的 markdown(top.mdbottom.mdreadme.md)就能提供简单的刮削功能。

使用 inotify-tools 监控目录

inotify-tools 为 shell 脚本提供了用于文件系统事件的简单接口。

安装 inotify-tools

  • 使用 pkg 安装:

  • 还可以使用 Ports 安装:

监按脚本

在后台启用监控脚本

参考文献

写入刮削的信息

将刮削的信息写入视频所在目录下的 top.md 等文件。

tmdb 在国内是可用的,但会受到 dns 污染,解决 dns 污染即可。具体刮削脚本参见 https://gist.github.com/ykla/91e27db14e68ba60903e97fe1c437246

效果如下:

OpenList in FreeBSD
OpenList in FreeBSD

故障排除与未竟事宜

日志

OpenList 的日志在 daemon/start.log

bindfs 的 fstab 挂载

待解决

bindfs 的多线程模型有缺陷

如果 bindfs 以多线程模式运行(使用 --multithreaded 选项),可能存在安全问题。

待解决。

最后更新于

这有帮助吗?