Should Feiniu OS Be Installed on Bare Metal or in a Virtual Machine?

Recently, I built an x86 NAS using an Epson ST190E mini PC equipped with an i3-8300T processor (4 cores, 4 threads), 16GB of DDR4 RAM, a 1TB NVMe M.2 SSD, and two 2TB 2.5-inch SATA HDDs. This article focuses on how I installed Feiniu OS on this machine, with a particular emphasis on comparing the pros and cons of bare-metal installation versus virtualized installation.
Virtual Machine Installation (First Attempt)
Initially, I chose to install Feiniu OS via a virtual machine on PVE 9.0.
I followed the installation guide provided on the Feiniu official website: How to Install Feiniu fnOS on a Virtual Machine? .
However, this guide did not mention GPU passthrough.
Since my i3-8300T has an integrated UHD 630 GPU and my primary use for Feiniu is its photo gallery feature, I needed to solve the issue of passing through the UHD 630 GPU to Feiniu OS.
But this didnāt go smoothly.
I tried two methods:
Using PVEtools
Project address: github.com/ivanhak/pvetools
PVEtools offers many commonly used PVE utilities, allowing quick configuration of apt sources and PCI hardware passthrough, including integrated GPU passthrough.

However, after multiple attempts, I found it unsatisfactoryāthe GPU never showed up in Feiniu.
Manual GPU Passthrough Configuration
With the help of AI, I configured GPU passthrough directly in the PVE terminal.
This mainly involved installing Intel GPU drivers and modifying the /etc/default/grub file.
Using this method, I successfully passed through the UHD 630 GPU to Feiniu OS.
But this led to another issueāI could no longer manage the Feiniu VM from PVE. The PVE panel couldnāt connect to the Feiniu VM and consistently reported the error: VM 100 qmp command 'set_password' failed - Could not set password.
Since I couldnāt resolve this issue, I eventually gave up on the virtual machine approach and reinstalled Feiniu OS on bare metal.
Bare-Metal Installation of Feiniu OS
Installing Feiniu on bare metal was much easier. I just followed the official tutorial and clicked “Next” all the way through.
After accessing the web management interface, I confirmed that the CPUās integrated GPU was automatically detected and working.
However, bare-metal installation wasnāt my original intentionāI had planned to use this machine for other tools as well.
Since I had already installed it on bare metal, I decided to test whether Feiniu could handle an All-in-One setup. Reality quickly proved me wrong.
Issues with the App Store
The first problem arose with 1Panel. After installing 1Panel from the Feiniu App Store, I eagerly opened it, only to find that OpenResty refused to install.
At first, I thought it was a Docker image issue and tried various domestic mirrors, but none worked.
Later, I realized it was a path conflict. Feiniuās 1Panel had set a default www path during OpenResty installation, which needed to be changed to the actual path.
After resolving this, I successfully installed OpenResty but found that I couldnāt add websites.
Upon inspecting the file directory, I noticed that paths like /usr/local/openresty/nginx/conf/conf.d/*.conf and /usr/local/openresty/nginx/conf/default/*.conf didnāt exist. I suspected that this version of 1Panel had been modified by Feiniuāand indeed, it had.
Since Feiniu uses ports 80 and 443 by default, adding websites in 1Panel would require using other ports, which meant modifying nginx settings. However, Feiniu itself relies on nginx, so changing its configuration could introduce instability.
While researching this issue, I came across several posts on the Feiniu forum where users reported that running apt upgrade caused Feiniu to stop updating. This made me hesitant to proceed.
What frustrated me the most was when I paused 1Panel in Feiniuās Docker to add a few portsāafter making the changes, the entire 1Panel application reset itself.
Since my experience with Docker was limited to Baota and 1Panel, I was unfamiliar with basic concepts like container persistence and was left confused for a while.
Looking at the Feiniu App Store, there were no warnings about this. Thankfully, this wasnāt a production environmentāotherwise, 1Panel crashing would have been a major headache.
Next, I tried Baota Panel.
Baota fared slightly betterānginx installed without issues. But it had the same problem as 1Panel: whenever I added a website and tried to open a port in Feiniuās Docker, the entire container reset.
I also attempted to install 1Panel and OpenResty directly in Feiniuās Docker, but after multiple tries, it didnāt work as expected.
During my bare-metal testing, I browsed the Feiniu forum and found numerous posts detailing various issues users encountered.
Of course, Feiniu OS itself is updated frequently, with many new features being added and bugs fixed quickly. However, this rapid update pace could impact the stability of the entire system. If I were to install a soft router in a Feiniu VM, Iām not even sure whether the network would remain functional after a Feiniu OS update.
Reluctantly, I returned to the virtual machine installation approach. I considered forgoing Feiniuās photo gallery and switching to Immich instead, since it can remotely utilize GPU processing. Not having a GPU wouldnāt be a dealbreakerāSynology works fine without one, after all.
Virtual Machine Installation of Feiniu (Second Attempt)
I reinstalled PVE, this time opting for version 8.4 instead of 9.0. PVE 9.0 was just too newāit had only been released 10 days prior, and there were very few tutorials available. Whenever I encountered an issue, it was hard to find solutions, and AI databases couldnāt possibly be updated that quickly.
During the Feiniu installation on PVE 8.4, I didnāt focus on GPU passthrough initially. I proceeded with the default settings and simply clicked through the setup. When adding a second network card in the PCI devices section, I noticed the UHD 630 option and decided to try selecting it.

To my surprise, with just that one click, the GPU showed up in Feiniuās panel.
Looking back at all the time I had wasted trying to configure GPU passthrough, it turned out to be this simple.
All those elaborate PVE GPU passthrough tutorials I found online made it seem complicated, but PVE supported it by default. What a pleasant surprise.

After installing Feiniu, I didnāt experiment with other Docker applications within Feiniu this time. Instead, I just installed the photo gallery and started scanning photos with AI recognition.
Other functionalities can be handled in a separate Ubuntu virtual machine, completely avoiding potential issues within Feiniu that might lead to a reinstallation. Even though Feiniu claims that reinstalling the OS wonāt affect data drives, reconfiguring other features still requires significant effort. Overall, system stability should be the top priority.
Currently, my Feiniu instance is in the initialization phase, requiring substantial computational power. Iāve allocated 3 CPU cores to Feiniu temporarily, leaving 1 core for Ubuntu. Once the photo recognition is complete, Iāll adjust Feiniu to use 2 cores and reserve the remaining one for RouterOS or OpenWrtāI havenāt decided which yet. Given my home network setup, the soft router would have to function as the main router, so I need to evaluate the best approach.
In the next article, Iāll briefly discuss how to secure PVE and Feiniu OS for public network access. I previously tested Feiniuās built-in FN Connect during the trial phase but didnāt feel entirely comfortable with it. During the third installation, I didnāt log into a Feiniu account or enable remote access. After all, Feiniu is still a small company with just over 20 employees. While they have a good privacy record, thereās no guarantee that FN Connect is entirely free of backdoors. Itās better to take extra precautions with important data.