Sometimes I need to use fast, simple and no-password storage over the network in bash, or an ISO storage for Xenserver. So nfs sharing is the best way for this. I have a linux machine with centos 7 and available storage of 1,5TB disk. So, prepare the disk:
fdisk -l /dev/xvdb > n (new partition), and use default options. The use -t (change partition ID) and change it to 83 (Linux). The use -w (write) reboot mkfs.xfs /dev/xvdb1 mkdir /mnt/nfs mount /dev/xvdb1 /mnt/nfs/
If everything is OK, edit /etc/fstab to automount this partition to ours folder, and add this line:
/dev/xvdb1 /mnt/nfs xfs defaults,nosuid,noatime,nodiratime 0 0
The install package nfs-utils, for nfs server:
yum -y install nfs-utils
And allow nfs service in firewalld:
firewall-cmd --permanent --zone=public --add-service=nfs firewall-cmd --reload #if sometimes on clients don't working showmount, and it create an error: showmount -e 11.22.33.44 rpc mount export: RPC: Unable to receive; errno = No route to host #we must add another ports to firewall:
firewall-cmd --permanent --zone=public --add-service=rpc-bind firewall-cmd --permanent --zone=public --add-service=mountd
firewall-cmd --reload
And uncoment this lines in: /etc/sysconfig/nfs (this is no applicable at Centos 8)
MOUNTD_PORT=892 STATD_PORT=662
Now enable nfs-server to run after poweron server and start it:
systemctl enable nfs-server.service systemctl start nfs-server.service
Now we must prepare this folder with this permissions, for read and write for everybody: (this is no applicable at Centos 8)
chown nfsnobody:nfsnobody /mnt/nfs/ -R chmod 755 /mnt/nfs/
And edit file /etc/exports for this folder to by allowed for everybody in network:
/mnt/nfs *(rw,sync,no_root_squash,no_all_squash)
And apply this change:
exportfs -arv
We can see our settings with command “exportfs”:
/mnt/nfs <world>
And from other linux machine, we can mount this folder:
mount 11.22.33.44:/mnt/nfs /mnt/nfs/ #see this disk report space df -h Filesystem Size Used Avail Use% Mounted on 11.22.33.44:/mnt/nfs 1.5T 200G 1.3T 14% /mnt/nfs
And we can test it with 1GB file:
dd if=/dev/zero of=/mnt/nfs/1gb bs=1M count=1000 1048576000 bytes (1.0 GB) copied, 16.4533 s, 63.7 MB/s ... ... ls -lah /mnt/nfs/ drwxr-xr-x. 18 nfsnobody nfsnobody 4.0K Feb 28 10:47 . drwxr-xr-x. 3 root root 4.0K Feb 28 10:24 .. -rw-r--r--. 1 root root 1000M Feb 28 10:47 1gb
Now we can continue with installing apache web server:
yum install httpd -y
systemctl enable httpd.service
firewall-cmd --add-service=http --permanent
firewall-cmd --reload
Now, we create an configuration file for one folder from nfs storage:
vim /etc/httpd/conf.d/media.exmaple.com.conf
<VirtualHost *:80>
ServerAdmin user@example.com
DocumentRoot "/mnt/nfs/kadeco/installs"
ServerName installs.example.com
<Directory "/mnt/nfs/kadeco/installs">
AllowOverride All
Require all granted
Options Indexes
</Directory>
ErrorLog /var/log/httpd/installs.example.com-error_log
CustomLog /var/log/httpd/installs.example.com-access_log common
</VirtualHost>
But we cannot serve this directory:
AH01276: Cannot serve directory /mnt/nfs/kadeco/installs: No matching DirectoryIndex (index.html) found, and server-generated directory index forbidden by Options directive
So, we install som softvare to modify file and folders context with selinux:
yum install setroubleshoot
And change context to this folder:
semanage fcontext -a -t httpd_sys_content_t "/mnt/nfs/kadeco/installs(/.*)?"
restorecon -R /mnt/nfs/kadeco/installs
rm /etc/httpd/conf.d/welcome.conf
systemctl restart httpd.service
Have a fun 🙂