For the complete documentation index, see llms.txt. This page is also available as Markdown.

38.10 OpenList Deployment

OpenList is an open-source file listing and management tool, a community-driven fork of AList. Through a fully open-source governance model and transparent development process, it defends against trust attacks and ensures long-term reliability, following the AGPL-3.0 license. OpenList inherits all functionality of AList.

Installing OpenList

OpenList Official Binary Package

You can install using the official OpenList binary package.

Please execute the following operations as a regular user:

$ mkdir openlist                           # Create the openlist directory
$ cd openlist                              # Enter the openlist directory
$ fetch https://github.com/OpenListTeam/OpenList/releases/download/v4.0.8/openlist-freebsd-amd64.tar.gz   # Download the OpenList compressed package
$ tar zxvf openlist-freebsd-amd64.tar.gz   # Extract the downloaded compressed package
$ rm openlist-freebsd-amd64.tar.gz         # Delete the compressed package to save space

Tip

According to the Manual Installation documentation and actual testing, there is no need to additionally configure the backend OpenList-Frontend; the documentation provides complete manual installation guidance.

Compiling and Installing OpenList (Optional)

If you need to compile and install OpenList from source, refer to the following steps.

Installing OpenList Dependencies

Install the required dependencies using pkg by executing the following command.

Or install the required dependencies using Ports:

Compilation Build

After installing the dependencies, you can begin compiling and building OpenList. Please execute as a regular user.

Download the OpenList source code by executing the following command:

Start building OpenList by executing the following command.

The compiled file is located in the build directory with the filename OpenList. For convenience in subsequent operations, it is renamed to openlist in the following tutorial.

RC Script

Directory structure:

Tip

The username ykla, hostname ykla, and path /home/ykla appearing in the examples in this section are for illustration only; please replace them with actual values according to your environment.

To facilitate managing the OpenList service, you can write a FreeBSD RC script. Create and edit the /usr/local/etc/rc.d/openlist file and add the following content:

Grant executable permissions to the OpenList service script:

Using the OpenList Service

After the RC script is written, you can use it to manage the OpenList service.

Set the OpenList service to start at boot:

For enhanced security, the process should be executed as a regular user (ykla is an example username; please modify to your actual username).

Set the user running the OpenList service to ykla.

Warning

Note that the owner and group of the OpenList directory must be ykla, i.e., the regular username, otherwise an error will occur:

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.

(Recursively change the owner and group of the /home/ykla/OpenList directory and its contents to ykla):

Initialization

After the service configuration is complete, you can start the OpenList service and initialize it.

Start the OpenList service instance:

Reset the password for the OpenList user admin (please replace your_strong_password with a strong password):

Logging In

After the service initialization is complete, you can access the OpenList web interface through a browser. Access http://ip:5244, replacing ip with the actual LAN address; the username is admin.

OpenList in FreeBSD
OpenList in FreeBSD

References

Specifying an External Player for OpenList (VLC)

OpenList supports playing videos through external players. The following is the configuration method for VLC.

URL Decoding

urlendec is a set of tools for URL encoding and decoding of arbitrary data streams, which can read data from the command line or standard input. This section uses urlendec for URL decoding.

  • Install urlendec using pkg.

  • Or install urlendec using Ports.

Configuring VLC External Player

After installing urlendec, you can configure VLC as an external player. The built-in player in OpenList sometimes cannot play certain videos, but you can call external programs (using xdg-open) via URI to play them.

The video address specified by OpenList for VLC takes the form vlc://http://xxx; you only need to specify the VLC program for URIs starting with vlc://. Please install VLC yourself.

When xdg-open passes the URI to VLC, it includes the vlc:// prefix, which VLC cannot directly parse. Therefore, the prefix must be removed before playback, then VLC is called. The corresponding script is ~/.local/share/applications/vlc-noschema.sh:

Grant executable permissions to the current user:

Create a new userapp-xxx.desktop file (only the xxx field can be changed to the desired name; other fields must not be changed, e.g., userapp-abc.desktop), so that xdg-open can call the above script. In this section, it is the ~/.local/share/applications/userapp-vlc.desktop file:

Register the handler for the vlc:// URI:

Configuring mpv External Player

Create a new file ~/.local/share/applications/mpv-noschema.sh:

Grant executable permissions to the current user:

Multi-Owner Permission Management for Local Storage

When using OpenList to mount local storage, you may encounter file permission issues. Running the service as a regular user is a secure approach, as described above using the user ykla.

In some cases, the owner of the local directories and their subdirectories and files mounted by OpenList may not be ykla, such as directories and files uploaded via HTTP services, directories and files downloaded by aria2 or qBittorrent running in daemon mode, and other similar situations.

Common solutions:

  • Set (group and other) access permissions to allow the OpenList running user to access them.

  • Plan ahead so that all possible services run as the same user, but this method is cumbersome and also causes the proprietary files of various services to lose isolation.

The above solutions are feasible when there are few owner differences, but become inconvenient when there are many differences. In such cases, using bindfs is more appropriate. Bindfs is similar to nullfs, but when mounting a target directory to another location, it can override the owner and group of files.

Installing bindfs

To solve the multi-owner permission issue, you can use the bindfs tool.

  • Install using pkg:

  • Install using Ports:

Test Case

After installing bindfs, you can verify its functionality through the following test case.

  • Run with regular user permissions: Create a directory and its parent directory for storing uploaded web files.

  • Run with root user permissions: Use bindfs to mount /var/www/upload to /home/ykla/extdata/wwwupload, setting the owner and group to ykla.

Here the owner of /var/www/upload is www.

This command mounts /var/www/upload to /home/ykla/extdata/wwwupload.

When user ykla accesses /var/www/upload, the owner of directories and files under it remains unchanged (still www); when accessing /home/ykla/extdata/wwwupload, the owner of directories and files under it all display as ykla.

At this point, OpenList only needs to use local storage to mount /home/ykla/extdata/wwwupload to resolve the access permission issue.

You can also use the --map option, adopting a UID/GID mapping mechanism similar to NFS (used to map certain users/groups to other users/groups), which may be a better choice in some scenarios.

References

Video Scraping

OpenList can work with video scraping tools to obtain related information about multimedia files. This solution uses Zsh; please install it yourself.

"Scraping" here refers to obtaining related information about local multimedia files, including posters, producer information, dubbing, subtitles, and other ancillary content.

OpenList does not have built-in native scraping functionality.

However, by utilizing OpenList's markdown (top.md, bottom.md, readme.md) mechanism, basic metadata display functionality can be achieved.

Using inotify-tools to Monitor Directories

You can use inotify-tools to monitor directory changes, thereby triggering video scraping operations. inotify-tools provides a simple interface for filesystem events in shell scripts.

Installing inotify-tools

  • Install using pkg:

  • Or install using Ports:

Monitoring Script

After installing inotify-tools, you can write a monitoring script to trigger video scraping. Create a new file ~/.monitor.zsh and add the following content:

Grant executable permissions to the current user:

Enable the monitoring script in the background.

Run the monitor script in the background, ignoring hangup signals; output is written to the nohup.out file by default:

Or

References

Writing Scraping Information

After the monitoring script triggers, the scraping information can be written to files such as top.md in the video directory.

TMDb is accessible in China, but may be affected by DNS pollution; it can be accessed normally after resolving DNS pollution. For the specific scraping script, see this gist.

The effect is as follows:

OpenList in FreeBSD
OpenList in FreeBSD

Troubleshooting and Unfinished Items

If you encounter issues while using OpenList, you can check the relevant log files for troubleshooting. This section also lists items that need improvement.

Logs

OpenList logs are located at daemon/start.log.

bindfs Multi-threaded Model Has Defects

If bindfs runs in multi-threaded mode (using the --multithreaded option), there may be security concerns.

This issue requires further analysis and resolution.

Last updated