Regular readers will probably know by now that I’m enamoured of the tiny, all-in-one, Intel-based systems generally referred to as “Mini-PCs”. They are more expensive than a Raspberry Pi, but they come with a case, a PSU, an on-board RTC, generally a decent amount of memory and sometimes built-in eMMC storage, too. Prices have increased over the past few months (the C-19 effect, again), but the bottom-end models (generally the quad-core Atom Z8350 equipped systems) are still available for around the $100 range (GearBest, FastTech, CDiscount, etc).
I already have a few of these mini systems and one which underwhelmed me on first impressions was the AP35 Beelink J3355-based box, mainly because it was advertised as “fanless”, but does have a CPU blower and because the eMMC just would not work reliably. I gave up on the eMMC and put in a small, internal SSD and since then it has been giving sterling service as a mini NAS (ZFS filesystems with TimeMachine as a backup server for various Macs) as well as running a couple of Bhyve virtual machines (doing very light duty). Once I stopped trying to use the eMMC and put it in the basement “computer room”, my opinion of it increased considerably. It’s a little work horse and, although not a speed monster, performs well enough for my requirements and has been absolutely reliable over the past year (again, since I gave up on the eMMC).
I mention that system specifically simply because I’ve been keeping an eye on prices, with the idea of adding another machine to the collection, if the price is right and the target machine has more than two USB-3 ports. I’ve noticed that there are a few other J3355-based models appearing, with a form-factor pretty much the same as the Z8350 systems and priced in the same general area (ie:- the bottom end of the price range). One thing which I’ve noticed recently though, is that almost all of the advertisments for these systems specify the J3355 as a “quad-core” CPU chip. It isn’t. Here’s an excerpt from the dmesg output of the AP35:-
FreeBSD 12.1-RELEASE-p6 GENERIC amd64
FreeBSD clang version 8.0.1 (tags/RELEASE_801/final 366581) (based on LLVM 8.0.1)
VT(efifb): resolution 800×600
Skipping TSC calibration since no legacy devices reported by FADT and CPUID works
CPU: Intel(R) Celeron(R) CPU J3355 @ 2.00GHz (1996.80-MHz K8-class CPU)
Origin=”GenuineIntel” Id=0x506c9 Family=0x6 Model=0x5c Stepping=9
Structured Extended Features=0x2294e283
Structured Extended Features3=0x2c000000
TSC: P-state invariant, performance statistics
real memory = 4294967296 (4096 MB)
avail memory = 3894444032 (3714 MB)
Event timer “LAPIC” quality 600
ACPI APIC Table:
WARNING: L1 data cache covers fewer APIC IDs than a core (0 < 1)
FreeBSD/SMP: Multiprocessor System Detected: 2 CPUs
FreeBSD/SMP: 1 package(s) x 2 core(s)
Having said all of that, here’s a link to a system on FastTech’s site to an MII-V with 4GB/64GB, GbE and four USB-3 ports which, at $112.45 (with free shipping), seems to be the best, generally available deal on this class of machine at the moment …just remember, it is DUAL-core (no matter what they say).
This entry is more of a memo to myself to remind me of what the syntax is for the /usr/local/etc/afp.conf file for FreeBSD-12.1.
I’m consolidating a couple of my servers onto one physical machine (the Beelink AP35 which I mentioned a few months back)†, using FreeBSD as the OS. Not surprisingly, the syntax for the afpd daemon‡ set-up is very different from the ARM-Linux box which is currently running that particular service (which provides a local TimeMachine server for all of the Mac users in the family). This is the magic incantation which worked for me:-
login message = “AFP Service on \”herons\””
vol preset = TimeMachine
log level = default:debug
log file = /var/log/afp.log
uam list = uams_guest.so,uams_dhx.so,uams_dhx2.so
mac charset = MAC_JAPANESE
unix charset = UTF8
mimic model = Xserve
zeroconf = yes
zeroconf name = “Herons-Store”
path = /store/TimeMachine
cnid scheme = dbd
ea = ad
time machine = yes
The “log level” setting of “default:debug” is quite verbose, but really helps with debugging problems during set-up. Once your configuration is up and running you can remove that line completely to go back to the default logging level of “default:note”.
The “Mimic model” setting tells the server which Apple device icon to display on the client machine. Using “Xserve” shows a rack-mount server, but you can also try “TimeCapsule8,119” or “TimeCapsule6,116” to see two different versions of a TimeCapsule icon.
The “zeroconf” lines were essential (in my environment, anyway) to having the clients recognize the new server.
The “charset” lines are probably unnecessary (or at least will need local modification) for users outside of Japan.
† The AP35 is classed as a “mini-pc” (basically a device aimed at the set-top box market, but with an Intel CPU, rather than ARM). This model comes with a dual-core J3355 CPU and 4 x USB3 ports, making it quite a versatile little machine.
‡ Note that the current, “approved” method for implementing a non-Mac hosted TimeMachine is the Samba (SMB) suite. However, the older netatalk method described above is still simpler and a lot lighter (in terms of the number of support packages pulled in when using “pkg install”) than Samba if you only want to implement a TimeMachine instance (as opposed to a general, network file server).
Preface — The machine referred to in this article ships with Windows 10 Home Edition. I won’t be using that OS, but will be describing some of the hardware and giving a couple of tips on getting BSD/Linux running. As far as I know, Windows 10 will run just fine, straight out of the box.
tl;dr — Despite the sales blurb, the AP35 is NOT fanless.
Hint – FreeBSD — If you’re experiencing a freeze during boot immediately after the keyboard is detected, you’ll need to disable the UARTs from the boot command line (this is a frequent problem with newer hardware and not specific to the AP35). Reboot the system and, when the FreeBSD boot menu appears, select option #3 (boot loader prompt). This will drop you into a command line, with an “OK> ” prompt. Enter these lines to disable the UARTs and restart the boot process:-
When your installation has completed (and before rebooting the system), edit the /boot/device.hints (or the /boot/loader.conf.local file, if your system has it) and add the two “set hint…” lines (but -not- the “boot” line) to make this a permanent fix.
Although ESP8266Hints is obviously ESP8266-themed, one of the most popular pages on this blog is the one outlining my experiences with the Z83-II mini-PC, which I bought back at the end of 2016. That machine, despite its diminutive size and “low-powered” Z8350 (quad-cored) CPU is still providing sterling service as a server on the house backbone network and was definitely a bargain (although I wasn’t too sure about that in the first few days following its arrival). Based on that positive (in the end) experience, I decided to take the plunge once more and replace another machine which, although it still works, is getting long in the tooth and uses far too much electricity for the work it actually does (it’s also so old that many distributions are dropping support for that class of machine).
The Beelink AP35 wasn’t the first choice on my shopping list, nor was it the second. I ended up waiting more than a month for this unit to be pushed out of the warehouse door because Gearbest were unable to deliver either of the first two. However, once it was marked as shipped, it made record time in transit and arrived on my doorstep just five days later.
My first impressions were, “Goodness, that’s small!”. It is really tiny. When I go back and look at the pictures in the sales blurb, it’s very obvious that they are composites and not a real photograph of the actual unit itself (look a little closer at the shot with the AP35 in front of two desktop monitors, for instance). The dimensions given in the description are accurate and looking at the close-up images of the unit itself you can gauge the overall size by comparing the USB and RJ45 ports to the width of the case (my photo of the unit, to the left, has a pen and a USB key for real-world scale). You need to ignore all of the spurious size prompts in the composite, sales photos to get a realistic idea of the actual size.
Because the case is made entirely of plastic, it’s also extremely light.
In the “Main Features” section of the sales blurb (just above the specifications), the very first line is:-
“● Excellent heat dissipation performance, through the heat dissipation of the casing, achieving zero noise, giving you a quiet and comfortable environment”
Notice that I just mentioned that the casing is entirely plastic, which isn’t particularly known for its heat transfer characteristics. Well, I can confirm that the “heat dissipation” and “zero noise” claims are complete and utter bollocks†. This system has a cooling fan strapped to the CPU heatsink. It seems to run all of the time, but the speed is normally fairly low, increasing with higher CPU loads. By the standards of something like a gaming PC, it is fairly quiet …but it is certainly not silent (even now, when it’s brand new).
This may not be a big deal for many people, but I have to admit that I wouldn’t have bought this unit if I’d have known that it used a fan.
As you can see from the photo [click on it to see the full-size version], the heatsink and fan actually sit in the top of the case and blow the hot air out through the slots above the HDMI and RJ45 ports. It’s not such a bad design, but I was surprised to find it in such a small case.
To counter the unpleasant surprise of the fan, when I first powered the unit on, I had two pleasant surprises. First, there was a prompt across the bottom of the power-on splash screen with the instructions “DEL for set-up, F7 for boot menu”. Yay! That’s an improvement over the Z83-II, anyway. Secondly, the BIOS is much, much more versatile than the Z83-II and, if anything, has too many settings and sub-menus (it was a relief to find that, for instance, it was possible on this machine to set-up for auto power-on after a power fail). Both of these improvements meant that I didn’t get stuck in the “I’m going to run Windows, no matter what!” loop that the Z83-II suffered from and was able to boot Linux, OpenBSD and FreeBSD with no problem (although installing was a different matter).
Immediately after the warm and fuzzies from the BIOS though, the pendulum swung back in the other direction. I found that the internal 64GB eMMC wasn’t recognized by most non-Windows OSes. I fooled around with this for much too long. FreeBSD-12 was the best candidate I could find to access it, but having successfully installed onto the eMMC, I found that reboots weren’t reliable; more often than not, the system just completely lost track of the eMMC (with timeout errors) and dropped into the “mountroot” prompt. I’ve tried various “quirk” settings, but all without any lasting success.
mmc0: CMD13 failed, RESULT: 2
mmc0: Card at relative address 2 failed to set HS200 timing
mmc0: CMD7 failed, RESULT: 1
mmc0: Card at relative address 2 failed to select
mmcsd0: Error reading EXT_CSD Timeout
device_attach: mmcsd0 attach returned 6
I got sick of mucking around with that fairly quickly and decided to take advantage of the available 2.5″ SSD/HDD mounting point in the base of the unit. [WARNING — Only a 7mm height drive will fit]. I slapped in a Crucial BX500 120GB SSD (the SATA cable is already attached to the mother board of the AP35, with the flying end taped down to the bottom panel of the case, so be gentle when opening it). The BIOS (and FreeBSD) saw the new drive immediately and the install was completed in just a few minutes (no reboot problems so far and none really expected with a standard SATA drive).
The SSD fits very snugly into the bottom of the unit, although there’s very little clearance between the disk and the components on the motherboard. The fan is actually on the other side of the motherboard, so I’d be wary of installing spinning rust in this cramped location due to possible heat problems.
As a plus for the adventurous, there are two slots available (in the area which my SSD now occupies) which look like mSATA to me. I don’t have anything to hand which would fit those, so I can’t comment on how well (or even if) they work and the support posts, along with the silkscreen outlines on the motherboard, left me wondering whether perhaps only one slot could be used at a time. If you have experience using this type of “stepped” mSATA connector, please do leave a comment as to how well they perform and how those two support pillars are meant to work. …and reader Carey Bishop sorted that out for me (and everyone else) when he noticed this additional information on Banggood’s sales page for the AP35:-
Carey also included a couple of links to boards which would fit in those slots (see the comments section at the bottom of the page). The mini-PCIe only accommodates half height cards, which explains the support-post placing. Thanks for that, Carey!
Anyway, once FreeBSD was installed on the SSD, it had absolutely no problem finding and using the 802.11ac WiFi and connecting to our 5GHz router, so another plus point there. The on-board WiFi/Bluetooth module is an Intel AC3165. So far I haven’t got around to testing the Bluetooth functionality, but the fact that the WiFi works so well is a good omen. Note that the two (internal) antenna cables are seriously gunked onto the module, which makes moving the motherboard around a little difficult.
The large connector to the right of the AC3165 in the photo is the motherboard end of the SATA lead for the internal SSD.
So far, so good. The machine has been running flawlessly (but not silently …did I already mention that?) for the last week or so and I’m quite happy with its performance. I’ll no doubt be updating this article with newer information as I attempt to transition it to the intended application on our home backbone, but here’s the short summary, so far:-
Compact enough to fit into a very small space.
Lightweight, so easily portable.
Comes with two HDMI cables, one short and one longer, as well as a wall/monitor mounting kit and screws.
Comes with two, unpopulated internal slots; one 50x30mm mSATA and one half-height 30x27mm mini-PCIe.
Comes with a SATA cable and mounting (with screws) for an internal 2.5″ HDD or SDD.
Normal (rather than cut-down) BIOS available.
Boot/BIOS prompts automatically displayed at power-on.
Dual-band (Intel 3165) WiFi with internal antennas.
Four USB-3.0 ports.
Cheap (currently selling for $140 with free shipping).
Not fanless and not silent.
The internal eMMC doesn’t appear to be very well supported by operating systems other than Windows-10 at this point in time.
As you can see, there really aren’t that many cons. All in all, I think this is very good value for the price. The quality of the build is also good, considering the price point.
There are several use cases that spring to mind for something this cheap and so compact. One example would be a low-cost diskless node; the GbE interface should provide plenty of throughput and the BIOS does seem to allow PXE boot. Another use would be as a low-cost desktop — if you happen to already have a decent monitor,keyboard and mouse set left over from an older machine, this system would be an excellent way to get a younger member of the family going with newer hardware on a slim budget.
Would I buy another one? Probably not, but that’s because of the specific issue of the system not being fanless. If the idea of it having a fan doesn’t bother you, then I’d certainly recommend this little system as being excellent value for money.
Additional OS Info — NomadBSD 1.2, a FreeBSD-12 based distribution intended for use from a USB key, was released a few days ago and, because the OS doesn’t attempt to install itself on your machine (it runs from and stores config info to the USB key), it’s actually a pretty good candidate for testing out the real-world, desktop performance of your new machine. Be sure to select “console frame buffer” and not “auto” from the set-up wizard though (auto seems to screw up frame buffering, but the console setting works fine, even with videos).
This machine is now doing duty on my home network as a replacement for a couple of other (soon to be retired) machines, providing reverse proxy, TimeMachine backup server, NTP, DNS, Mosquitto, etc, etc, services. It is running FreeBSD 12.1 with root on ZFS and the TimeMachine backup on 2x 4TB disks in a zpool mirror.
† — Anglo-Saxon/Middle-English (slang) – Used frequently to mean “nonsense“.