NFS-Server in LXC

L2x2

Member
Jan 30, 2015
16
0
21
Hallo zusammen,

von Turnkey habe ich mir den Mediaserver geholt und damit einen Container erstellt.

In diesem habe ich noch eine komplette Partition gemountet, die die ganzen Multimediadaten beherbergt.
Code:
lxc.mount.entry: /media/sdb1 /var/lib/lxc/303/rootfs/media/multimedia none bind 0 0

Diese möchte ich jetzt per NFS im Netzwerk zur Verfügung stellen um die Daten darauf einfacher verwalten zu können.

Leider gelingt es mir nicht den NFS-Server zu starten...
Code:
service nfs-kernel-server start
[warn] Not starting NFS kernel daemon: no support in current kernel. ... (warning).

Habe nun stundenlanges suchen im Forum, ganzen www und probieren von diversen vermeintlichen Lösungen mit apparmor hinter mir... leider erfolglos...

hier noch meine aktuelle Confi:
Code:
proxmox-ve: 5.1-26 (running kernel: 4.13.4-1-pve)
pve-manager: 5.1-36 (running version: 5.1-36/131401db)
pve-kernel-4.13.4-1-pve: 4.13.4-26
libpve-http-server-perl: 2.0-8
lvm2: 2.02.168-pve6
corosync: 2.4.2-pve3
libqb0: 1.0.1-1
pve-cluster: 5.0-19
qemu-server: 5.0-18
pve-firmware: 2.0-3
libpve-common-perl: 5.0-25
libpve-guest-common-perl: 2.0-13
libpve-access-control: 5.0-7
libpve-storage-perl: 5.0-17
pve-libspice-server1: 0.12.8-3
vncterm: 1.5-3
pve-docs: 5.1-15
pve-qemu-kvm: 2.9.1-5
pve-container: 2.0-18
pve-firewall: 3.0-5
pve-ha-manager: 2.0-4
ksm-control-daemon: not correctly installed
glusterfs-client: 3.8.8-1
lxc-pve: 2.1.1-2
lxcfs: 2.0.8-1
criu: 2.11.1-1~bpo90
novnc-pve: 0.6-4
smartmontools: 6.5+svn4324-1

Code:
# Do not load this file.  Rather, load /etc/apparmor.d/lxc-containers, which
# will source all profiles under /etc/apparmor.d/lxc

profile lxc-container-default-with-nfsd flags=(attach_disconnected,mediate_deleted) {
  #include <abstractions/lxc/container-base>

  # the container may never be allowed to mount devpts.  If it does, it
  # will remount the host's devpts.  We could allow it to do it with
  # the newinstance option (but, right now, we don't).
  deny mount fstype=devpts,
  mount fstype=nfsd,
  mount fstype=rpc_pipefs,
  mount fstype=cgroup -> /sys/fs/cgroup/**,
}

Code:
arch: amd64
cores: 2
hostname: EmbyServer2018
memory: 4096
net0: name=eth0,bridge=vmbr0,gw=192.168.111.10,hwaddr=66:4B:F7:38:26:C8,ip=192.168.111.35/24,type=veth
ostype: debian
rootfs: Seagate:vm-303-disk-1,size=32G
swap: 4096
lxc.mount.entry: /media/sdb1 /var/lib/lxc/303/rootfs/media/multimedia none bind 0 0
lxc.apparmor.profile: lxc-container-default-with-nfsd
Falls noch irgendwelche Angaben benötigt werden bitte einfach fragen...
 
Keiner eine Lösung oder wenigstens einen Tipp/Link für mich wie ich das auskonfiguriert bekomme?

Oder fehlen noch irgendwelche wichtigen Infos?

Hier noch die Distri vom Container:
Code:
# cat /etc/issue
Debian GNU/Linux 8 \n \l
#cat /proc/version 
Linux version 4.13.4-1-pve (root@nora) (gcc version 6.3.0 20170516 (Debian 6.3.0-18)) #1 SMP PVE 4.13.4-26 (Mon, 6 Nov 2017 11:23:55 +0100)
#cat /etc/debian_version  
8.10
 
Danke für den Link, aber den Thread kenne ich schon... hab ihn schon durch leider ohne Erfolg.

Soweit ich den Thread verstanden habe, war dann die Lösung das neue Template zu verwenden, auch ein Update auf Debian 9 brachte den NFS-Server nicht zum Laufen.

Allerdings möchte ich den Container wenn irgendwie möglich nicht neu aufsetzen... daher suche ich nach einer Alternativlösung...
 
Ich hab den NFSserver immer direkt auf PVE drauf. Anders war das schon bei OpenVZ immer super kompliziert. Für das sind Container halt nicht gemacht.
 
Du meinst also auf dem Host die Platte per NFS freigeben und im Container dann per NFS einbinden?
und dann natürlich das lxc.mount entfernen
Code:
lxc.mount.entry: /media/sdb1 /var/lib/lxc/303/rootfs/media/multimedia none bind 0 0
 
Wenn der NFSserver lokal läuft dann binden KVM's diesen ganz normal ein. Die Kommunikation läuft dann klugerweise über Socket, somit bringt sich auch das VirtioInterface auf der KVM was. Bei LXC wird einfach der/die Ordner unabhängig von der Config eingebunden. Z.b. hier Home:
Code:
..
mp0: /v-machines/home,mp=/home
..
Diese Zeile von dir benötigst du nicht.
 
Da ich gerade meine 2. Cluster Node eingerichtet habe und aber vergessen hatte wie das noch war mit dem NFS habe ich diesen Thread gefunden. Da das Thema ja noch recht frisch ist, möchte ich meine Lösung nicht vorenthalten. Ich denke der einzige Fehler ist, dass es zusätzlich zur lxc/<cid>.conf noch die /var/lib/lxc/<cid>/config gibt, wo die regel ebenfalls eingetragen sein muss.

ich habe das ganze als Gist hier veröffentlicht: gist.github.com/rwenz3l/0907385f6a6690c34eb8e36fa73d8405

und zur sicherheit hier nochmal eingefügt:

------------------------------------------------------------------

# Installing NFS inside LXC Container on Proxmox 5.1

## Host Setup:

Create LXC Container as usual, but do not start it yet.

```bash
# Install NFS-Kernel on Host
apt install nfs-kernel-server

# Create a new AppArmor file:
touch /etc/apparmor.d/lxc/lxc-default-with-nfsd

# Write Profile:
cat > /etc/apparmor.d/lxc/lxc-default-with-nfsd << 'EOF'
# Do not load this file. Rather, load /etc/apparmor.d/lxc-containers, which
# will source all profiles under /etc/apparmor.d/lxc

profile lxc-container-default-with-nfsd flags=(attach_disconnected,mediate_deleted) {
#include <abstractions/lxc/container-base>

# the container may never be allowed to mount devpts. If it does, it
# will remount the host's devpts. We could allow it to do it with
# the newinstance option (but, right now, we don't).
deny mount fstype=devpts,
mount fstype=nfsd,
mount fstype=rpc_pipefs,
mount fstype=cgroup -> /sys/fs/cgroup/**,
}
EOF

# Activate the new Profile:
apparmor_parser -r /etc/apparmor.d/lxc-containers

# Add Profile to Container:
# (in this case: id = 200)
echo 'lxc.apparmor.profile = lxc-container-default-with-nfsd' \
>> /etc/pve/nodes/sniebel/lxc/200.conf

# As well as to it's config:
echo 'lxc.apparmor.profile = lxc-container-default-with-nfsd' \
>> /var/lib/lxc/200/config

# Also add your mountpoint to the container:
# If you have a cluster setup:
echo 'mp0: /mnt/host_storage,mp=/mnt/container_storage' \
>> /etc/pve/nodes/cluster_node/lxc/200.conf

# If you have a single node setup:
echo 'mp0: /mnt/host_storage,mp=/mnt/container_storage' \
>> /etc/pve/lxc/200.conf

# Finall start the container:
lxc-start -n 200
```

## Container Setup:

ssh into the container or do a simple `lxc-attach -n 200` on your host (where 200 is the id).

```
# Install nfs
apt update
apt install nfs-kernel-server

# Edit Exports
nano /etc/exports

# or append like so (example):
echo '/mnt/container_storage 192.168.0.0/16(rw,async,insecure,no_subtree_check,all_squash,anonuid=501,anongid=100,fsid=1)' \
>> /etc/exports

# disconnect from the container

# Restart it:
```

## Host again:

Back on the Host restart the container:

```bash
lxc-stop -n 200
lxc-start -n 200
```

Because the nfs-kernel is on the host, the container cannot access it's status.
`service nfsd status` therefore shows as 'not running' inside the container.
.. this seems to be normal (?)

---

Further useful commands:

```bash
nfsstat # list NFS statistics
```
 

About

The Proxmox community has been around for many years and offers help and support for Proxmox VE, Proxmox Backup Server, and Proxmox Mail Gateway.
We think our community is one of the best thanks to people like you!

Get your subscription!

The Proxmox team works very hard to make sure you are running the best software and getting stable updates and security enhancements, as well as quick enterprise support. Tens of thousands of happy customers have a Proxmox subscription. Get yours easily in our online shop.

Buy now!