FedFsUtilsTestingRecipes0.8

From Linux NFS

Jump to: navigation, search

Contents

Project: fedfs-utils

[ Project Home | News | Downloads | Docs | Mailing Lists | Source Control | Issues ]


Simple example of basic FedFS setup and operation

The examples in this test procedure assume a Fedora 18 install.

Assume that the package fedfs-utils-server and fedfs-utils-client are installed on perseus.fedfs.org. And that fedfs-utils-server and a nfs-utils built with fedfs-utils-devel installed on zeus.fedfs.org and that fedfs-utils-lib is also installed on zeus.fedfs.org.

We want to setup perseus.fedfs.org to provide the domain root, be able to use FedFS to mount the domain root, and to setup and use a FedFS juntion to access an export on zeus.fedfs.org upon access to a directory within the domain root. And lastly, setup autofs to use the FedFS program map to mount the root of the domain.

Questions still to be answered: 1. When and where (ie. on which server) is rpc.fedfsd used in the procedure below. 2. What is the procedure for setting up a junction on a third unrelated machine.

Setup a forwarding DNS server for fedfs.org

Some of this setup may not be necessary but it is what I use to setup DNS instances for testsing. Also many of the files created in step 1 should be included in a caching nameserver package. Installing the cacheing nameserver package and making appropriate modifications to turn the cacheing nameserver into a forwarding nameserver is really all that needs to be done. Of course the fedfs zone files will always be needed.

The example assumes the private IP address range 192.168.1 is being used and a nameserver that is able to satisfy name resolution for external names is at 192.168.1.1 and the hosts perseus.fedfs.org and zeus.fedfs.org are assigned addresses 192.168.1.32 and 192.168.1.31 respectively.

1. Setup zeus.fedfs.org as a forwarding DNS server:

mkdir -p /var/named/master/fedfs.org
if [ ! -d /var/named/data ]; then
  mkdir /var/named/data
fi

Create /var/named/named.root using:

dig +norec NS > /var/named/named.root

Create /etc/named.rfc1912.zones as:

// named.rfc1912.zones:
//
// ISC BIND named zone configuration for zones recommended by
// RFC 1912 section 4.1 : localhost TLDs and address zones
//
zone "localdomain" IN {
	type master;
	file "localdomain.zone";
	allow-update { none; };
};

zone "localhost" IN {
	type master;
	file "localhost.zone";
	allow-update { none; };
};

zone "0.0.127.in-addr.arpa" IN {
	type master;
	file "named.local";
	allow-update { none; };
};

zone "1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.arpa" IN {
	type master;
	file "named.ip6.local";
	allow-update { none; };
};

zone "255.in-addr.arpa" IN {
	type master;
	file "named.broadcast";
	allow-update { none; };
};

zone "0.in-addr.arpa" IN {
	type master;
	file "named.zero";
	allow-update { none; };
};

Create /var/named/localdomain.zone as:

$TTL	86400
@		IN SOA	localhost root (
				42		; serial (d. adams)
				3H		; refresh
				15M		; retry
				1W		; expiry
				1D )		; minimum
	        IN NS		localhost
localhost	IN A		127.0.0.1

Create /var/named/localhost.zone

$TTL	86400
@		IN SOA	@       root (
				42		; serial (d. adams)
				3H		; refresh
				15M		; retry
				1W		; expiry
				1D )		; minimum

	        IN NS		@
 		IN A		127.0.0.1
		IN AAAA		::1

Create /var/named/named.local as:

$TTL	86400
@		IN SOA	localhost. root.localhost.  (
				1997022700 ; Serial
				28800      ; Refresh
				14400      ; Retry
				3600000    ; Expire
				86400 )    ; Minimum
		IN NS	localhost.
1		IN PTR	localhost.

Create /var/named/named.ip6.local as:

$TTL	86400
@		IN SOA	localhost. root.localhost.  (
				1997022700 ; Serial
				28800      ; Refresh
				14400      ; Retry
				3600000    ; Expire
				86400 )    ; Minimum
		IN NS	localhost.
1		IN PTR	localhost.

Create /var/named/named.broadcast as:

$TTL	86400
@		IN SOA	localhost.      root.localhost. (
				42              ; serial (d. adams)
				3H              ; refresh
				15M             ; retry
				1W              ; expiry
				1D )            ; minimum
		IN NS	localhost.

Create /var/named/named.zero as:

$TTL	86400
@		IN SOA	localhost.      root.localhost. (
				42              ; serial (d. adams)
				3H              ; refresh
				15M             ; retry
				1W              ; expiry
				1D )            ; minimum
		IN NS	localhost.

Create /etc/named.conf as:

options {
	listen-on port 53 { any; };
	listen-on-v6 port 53 { ::1; };
	directory 	"/var/named";
	allow-query     { any; };
	forwarders { 192.168.1.1; };
	recursion yes;
};

logging {
	channel default_debug {
		file "data/named.run";
		severity dynamic;
	};
};

zone "." IN {
	type hint;
	file "named.root";
};

include "/etc/named.rfc1912.zones";

include "/var/named/master/fedfs.org/zone.fedfs.org";

Create /var/named/master/fedfs.org/zone.fedfs.org as:

zone "fedfs.org" {
	type master;
	notify no;
	file "master/fedfs.org/db.fedfs.org";
};
zone "1.168.192.in-addr.arpa" {
	type master;
	notify no;
	file "master/fedfs.org/db.192.168.1";
};

Create /var/named/master/fedfs.org/db.fedfs.org as:

$TTL	3D
@		IN SOA	ns.fedfs.org. hostmaster.fedfs.org. (
				199802152       ; serial, todays date + todays serial #
				8H              ; refresh, seconds
				2H              ; retry, seconds
				4W              ; expire, seconds
				1D )            ; minimum, seconds
		;
		NS ns		; Inet Address of name server
		;
localhost	A	127.0.0.1
ns		A	192.168.1.32
zeus	A	192.168.1.32
perseus	A	192.168.1.31

; Assume these aren't present, they've been left to show an example
; of the SRV record that would be used for a read-write FedFS domain
; rather than the read-only setup we use here.
;_nfs4._domainroot._tcp		SRV	0 0 2049 perseus.fedfs.org.
;_nfs4._write._domainroot._tcp	SRV	0 0 2049 perseus.fedfs.org.

Create /var/named/master/fedfs.org/db.192.168.1 as:

$TTL	3D
@		IN SOA	ns.fedfs.org. hostmaster.fedfs.org. (
				199802151 ; Serial, todays date + todays serial
				8H      ; Refresh
				2H      ; Retry
				4W      ; Expire
				1D)     ; Minimum TTL
		NS ns.fedfs.org.

32		PTR	ns.fedfs.org.
32		PTR	zeus.fedfs.org.
31		PTR	perseus.fedfs.org.
service named start

or

systemctl start named.service

2. On perseus.fedfs.org and zeus.fedfs.org configure /etc/resolve.conf:

cd /etc
cp resolve.conf resolv.conf.orig
echo "domain fedfs.org" > resolve.conf
echo "search fedfs.org" >> resolve.conf
echo "nameserver 192.168.1.32" >> resolve.conf

Setup an NSDB (NameSpace DataBase)

1. Set parameters for NSDB connections:

# nsdbparams(8) is used to set NSDB connection parameters
nsdbparams update -e "dc=fedfs,dc=org" \
			  -D "cn=Manager,dc=fedfs,dc=org" \
			  zeus.fedfs.org

2. Setup an OpenLDAP instance for fedfs.org:

service slapd stop

or

systemctl stop slapd.service

Create /etc/openldap/slapd.conf as:

include         /etc/openldap/schema/core.schema
include         /etc/openldap/schema/cosine.schema
include         /etc/openldap/schema/inetorgperson.schema
include         /etc/openldap/schema/nis.schema
# Get this from the FedFS distribution
include         /etc/openldap/schema/fedfs.schema

pidfile         /var/run/openldap/slapd.pid
argsfile        /var/run/openldap/slapd.args

database        bdb
suffix          "dc=fedfs,dc=org"
rootdn          "cn=Manager,dc=fedfs,dc=org"
rootpw          secret
directory       /var/lib/ldap

index objectClass                       eq,pres
index ou,cn,mail,surname,givenname      eq,pres,sub
index uidNumber,gidNumber,loginShell    eq,pres
index uid,memberUid                     eq,pres,sub
index nisMapName,nisMapEntry            eq,pres,sub

Create fedfs.org-naming-context.ldif as:

dn: dc=fedfs,dc=org
objectClass: domain
dc: fedfs
description: naming context

Create an OpenLDAP instance for fedfs.org:

# Ensure that /etc/openldap/ldap.conf is setup to use fedfs.org
# by commenting out any other URI and BASE directives and then
# add definitions to the end of the configuration.
echo "URI ldap://zeus.fedfs.org/" >> /etc/openldap/ldap.conf
echo "BASE dc=fedfs,dc=org" >> /etc/openldap/ldap.conf
# Setup OpenLDAP for fedfs.org
cd /etc/openldap
restorecon -v slapd.conf

rm -f /var/lib/ldap/*
# supress warnings that this file does not exist
touch /var/lib/ldap/DB_CONFIG

rm -rf slapd.d
slaptest -F slapd.d -f slapd.conf
# I think this will restore the correct ownership
# of the configuration directory tree but it may
# be necessary to chmod -R ldap.ldap slapd.d also.
restorecon -R -v slapd.d

slapadd -l fedfs.org-naming-context.ldif
chown ldap.ldap /var/lib/ldap/*
restorecon -v /var/lib/ldap/*
service slapd start

or

systemctl start slapd.service

4. Add NCI (NSDB Container information) attributes to the naming context LDAP entry:

nsdb-update-nci -l zeus.fedfs.org \
		-D "cn=Manager,dc=fedfs,dc=org" \
		-e "dc=fedfs,dc=org"

Add a FedFS junction within a domain root directory

Assuming there is a file system mounted on /vm (or just a directory we can export) on server zues.fedfs.org which we want to access under the domain root as <domain root mount point>/vm, we will be exporting /.domainroot-fedfs.org as the domain root.

1. Add an entry to /etc/exports on zeus.fedfs.org:

# Add to /etc/exports
/vm	*(ro)
# Restart the nfs service or just re-export the table
exportfs -r

2. Add a junction to the domain root on persues.fedfs.org:

#
# Tell nfsref the LDAP server (the NSDB) we are using to
# record file system name (FSN) and file system location
# (FSL) uuids. This assumes the LDAP connection parameters
# have been setup as in step 1 of "Setup an NSDB".
#
export FEDFS_NSDB_HOST=zeus.fedfs.org

#
# Add the junction metadata to the directory and update
# the NSDB with uuid info of the junction.
#
mkdir -p /.domainroot-fedfs.org/vm
nfsref --type=nfs-fedfs \
	add /.domainroot-fedfs.org/vm \
	zeus.fedfs.org /vm


Setup fedfs domain root export (read-only case)

For this we are seeking to mount the domain root exported from host perseus.fedfs.org.

1. Add an SRV record for the FedFS file server to DNS:

_nfs4._domainroot._tcp SRV 0 0 2049 perseus.fedfs.org.

2. Restart named to make in available.

service named restart

or

systemctl restart named.service

3. Add an entry to /etc/exports on perseus.autofs.test:

#
# Created when we added the junction above.
# mkdir /.domainroot-fedfs.org
#
/.domainroot-fedfs.org	*(ro)

4. Restart NFS:

service nfs restart

or

systemctl restart nfs.service

5. Mount using the FedFS mount utility on a local directory:

mount -v -t fedfs /nfs4/fedfs.org /mnt
mount | grep domainroot
perseus.fedfs.org:/.domainroot-fedfs.org/ on /mnt type nfs4 ...

cd /mnt/vm
#
# This check assumes /etc/mtab is symlinked to /proc/mounts
# as it is in Fedora. Kernel automounted file systems will
# not be present in the text based /etc/mtab and so will not
# be seen in it. Look to /proc/mounts instead in this case.
#
mount | grep ^zeus.fedfs.org.*vm
zeus.fedfs.org:/vm/ on /mnt/vm type nfs4 ...

# Ha, move out of the directory so it can be umounted
cd

5. Lastly cleanup:

#
# This example includes a specific umount of the junction
# (/mnt/vm) but such kernel automounted file systems are
# umounted automatically (when they are not in use) so it
# may not be present when this step is done.
#
umount /mnt/vm
umount /mnt

Setup autofs to automount the domain root

1. Add a line to /etc/auto.master to automount FedFS root domains:

#
# Note that the autofs pseudo option "nobind" probably
# should be used. In the case here it is required because
# the FedFS client also hosts the root of the domain and
# autofs will see the mount is local and perform a bind
# mount instead of an NFS mount. That, of course, means
# file system lookups won't be with an NFS file system
# so NFS referals can't be followed.
#
# Also note that the autofs mount point name must be
# /nfs4 to be able to mount nfs4 root domains.
# 
echo "/nfs4  /usr/sbin/fedfs-map-nfs4 nobind" >> /etc/auto.master

2. Restart or reload the autofs service:

service autofs restart

or

systemctl restart autofs.service

3. Check that we can mount the domain root and the referal:

# automount the root domain.
[raven@perseus ~]$ ls /nfs4/fedfs.org
top.txt  vm
# automount the referal (from a different machine).
[raven@perseus ~]$ ls /nfs4/fedfs.org/vm
lost+found  test.txt
# Check they were mounted.
[raven@perseus ~]$ mount |grep perseus|grep nfs4
perseus.fedfs.org:/.domainroot-fedfs.org/ on /nfs4/fedfs.org type nfs4 ...
[raven@perseus ~]$ mount |grep zeus|grep nfs4
zeus.fedfs.org:/vm/ on /nfs4/fedfs.org/vm type nfs4 ...
Personal tools