Homelab Update - Proxmox
homelab
linux
Over the past few days i’ve been upgrading my homelab setup. The biggest change - ditching ESXi for open source, KVM hypervisor Proxmox! I wanted to try something with better storage support (proxmox is debian-based and supports ZFS and more flexibility for my non-production environment.
Below are some of the “gotchas” I faced when getting Proxmox up and running!
Remove Enterprise Apt Repository
Running an apt update will fail out-of-the-box, as by default Proxmox is set to pull from the Enterprise apt repos. See the Proxmox wiki for more details. Here are the abbreviated steps on how to fix this:
You’ll want to comment out the line in /etc/apt/sources.list.d/pve-enterprise.list.
Now add the following repo to /etc/apt/sources.list.
deb http://download.proxmox.com/debian/pve buster pve-no-subscription
Adding Second NIC to Proxmox
tags: proxmox new nic no internet, no flashing lights
I recently added a new dual NIC to my existing proxmox machine. I found I wasn’t able to connect to proxmox via my existing motherboard’s network interface.
I saw that both the new (Intel x2) and old interface (Realtek) were all being detected.
root@proxmox:/# lspci
...
...
01:00.0 Ethernet controller: Intel Corporation 82571EB Gigabit Ethernet Controller (rev 06)
01:00.1 Ethernet controller: Intel Corporation 82571EB Gigabit Ethernet Controller (rev 06)
02:00.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL8111/8168/8411 PCI Express Gigabit Ethernet Controller (rev 16)
root@proxmox:/# dmesg | grep eth | head -n 30
3.512907 r8169 0000:02:00.0 eth0: RTL8168h/8111h, b4:2e:99:3c:a1:11, XID 541, IRQ 127
3.512908 r8169 0000:02:00.0 eth0: jumbo features [frames: 9200 bytes, tx checksumming: ko]
3.513604 r8169 0000:02:00.0 enp2s0: renamed from eth0
3.663348 e1000e 0000:01:00.0 eth0: (PCI Express:2.5GT/s:Width x4) 00:15:17:6c:cc:55
3.663349 e1000e 0000:01:00.0 eth0: Intel(R) PRO/1000 Network Connection
3.663430 e1000e 0000:01:00.0 eth0: MAC: 0, PHY: 4, PBA No: C57721-005
3.827424 e1000e 0000:01:00.1 eth1: (PCI Express:2.5GT/s:Width x4) 00:15:17:6c:cc:56
3.827425 e1000e 0000:01:00.1 eth1: Intel(R) PRO/1000 Network Connection
3.827509 e1000e 0000:01:00.1 eth1: MAC: 0, PHY: 4, PBA No: C57721-005
3.828068 e1000e 0000:01:00.0 enp1s0f0: renamed from eth0
3.847163 e1000e 0000:01:00.1 enp1s0f1: renamed from eth1
You can see that my existing (Realtek) ethernet controller had been renamed to enp2s0, and my new network card had taken the “1” place. This renaming was the cause of my issue.
Looking at /etc/network/interfaces, I saw that I needed to fix the bridge-ports entry on vmbr0 to my interface’s new name.
Below shows a snippet of my corrected interfaces file - now bridging my enp1s0f0 interface to the proxmox virtual interface.
iface enp2s0 inet manual
#MOBO RJ-45
iface enp1s0f0 inet manual
#RIGHT RJ-45
iface enp1s0f1 inet manual
#LEFT RJ-45
auto vmbr0
iface vmbr0 inet static
address 10.1.0.11/24
gateway 10.1.0.1
bridge-ports enp1s0f0
bridge-stp off
bridge-fd 0
#WAN
I then simply bring the interface up with ifup enp2s0.
Encrypt ZFS dataset
I wanted a volume (ZFS called these “datasets”) on my ZFS drives to be encrypted. Proxmox has some documention on zfs encryption which I recommend reading first.
For context, i’d already created a MIRRORED zpool in Proxmox GUI with my two 2TB physical drives. The pool is called bulk.
root@proxmox:/# zpool status
pool: bulk
state: ONLINE
scan: none requested
config:
NAME STATE READ WRITE CKSUM
bulk ONLINE 0 0 0
mirror-0 ONLINE 0 0 0
sdb ONLINE 0 0 0
sdc ONLINE 0 0 0
From your proxmox instance, instantiate a new zfs dataset and enable encryption.
root@proxmox:/# zfs create -o encryption=on -o keyformat=passphrase keylocation=prompt bulk/secure
Let Proxmox VE know about this new dataset.
root@proxmox:/# pvesm add zfspool bulk-secure -pool bulk/secure
You can check your work like so. All child datasets from bulk/secure should also inherit these settings.
root@proxmox:/# zfs get encryption bulk
NAME PROPERTY VALUE SOURCE
bulk encryption off default
root@proxmox:/# zfs get encryption bulk/secure
NAME PROPERTY VALUE SOURCE
bulk/secure encryption aes-256-ccm -
root@proxmox:/bulk/secure# zfs list
NAME USED AVAIL REFER MOUNTPOINT
bulk 1.15M 1.76T 96K /bulk
bulk/secure 196K 1.76T 196K /bulk/secure
Mounting Volume
zfs load-key -a
# Enter password
zfs mount bulk/secure
Pulling linux container
Proxmox has native support for LXC (Linux Containers).
In a Proxmox shell, check what containers are preloaded with pveam available.
root@proxmox:/mnt# pveam available | grep ubuntu
system ubuntu-16.04-standard_16.04.5-1_amd64.tar.gz
system ubuntu-18.04-standard_18.04.1-1_amd64.tar.gz
system ubuntu-19.04-standard_19.04-1_amd64.tar.gz
system ubuntu-19.10-standard_19.10-1_amd64.tar.gz
Before using a container, you’ll need to download it.
pveam download local ubuntu-19.10-standard_19.10-1_amd64.tar.gz
Your container should now be availble in the Proxmox GUI!
Locale issues in debian-based LXC container
I sometimes see locale errors a lot in fresh debian LXC containers (esp. when running apt). I’ve found reinstalling locales and configuring it with your own locale (en-US for me).
apt install --reinstall --purge locales
dpkg-reconfigure locales
Enter a Linux Container from Proxmox SSH
Quick one! This is the equivalent of docker exec -it <container name> /bin/bash.
root@proxmox:/# pct enter 102
root@storage:/#
You can get the container ID either from the proxmox web GUI, or from pct list.
Setting Up Time Machine Backups
Lots of guides online seem outdated on enabling time machine on linux. Since Samba 4.8 we’ve been able to advertise sambda shares as time capsules - and it’s very easy!
Proxmox GUI Setup
- Create an Ubuntu container.
- Mount a ZFS share from Proxmox GUI to any mountpoint (
/timemachine).
Container Setup
- Create user with no shell
useradd tmachine --shell /bin/false - Change owner of mounted drive
chown tmachine: /timemachine - Install dependencies
apt install samba avahi-daemon
Samba Setup
In /etc/samba/smb.conf :
[timemachine]
comment = Time Machine
path = /timemachine
browseable = yes
writeable = yes
create mask = 0600
directory mask = 0700
spotlight = yes
vfs objects = catia fruit streams_xattr
fruit:aapl = yes
fruit:time machine = yes
valid users=tmachine
-
Set a password for our user with
smbpasswd -a tmachine -
Restart samba
sudo systemctl restart smbd -
Allow Samba ports through relevant firewalls
All set! You should now see your share in time machine when on the same local network.

Have a comment? Let me know
This post helpful? Buy me a coffee!
