Little Girl's Mostly Linux Blog

NFSUseCase

NFS Use Case

This page was last updated on July 01, 2017.

Introduction

  • This document is a use case example with three computers.
  • The steps in this use case coincide with the steps in my fully commented NFS guide.
  • The example is of a family with three computers.
  • Sally has a computer.
  • Dave has a computer.
  • The two children share a computer.
  • All three computers are in different rooms in the same house.
  • The computers are connected by ethernet and are behind a hardware router.
  • Each computer has a static LAN IP.
  • The computers will use NFS to share certain directories with each other.

Meet the family:

Sally Dave The children

Creating the shares

Step 01 – The family writes down its computer information:

SALLY’S COMPUTER INFORMATION
192.168.1.100 Sally’s LAN IP address.
/home/sally/photos Sally wants to share this folder with Dave.
/home/sally/stories Sally wants to share this folder with the children.
/home/sally/daveshare Sally wants to click this folder to visit Dave’s computer.
/home/sally/childrenshare Sally wants to click this folder to visit the children’s computer.
DAVE’S COMPUTER INFORMATION
192.168.1.200 Dave’s LAN IP address.
/home/dave/work Dave wants to share this folder with Sally.
/home/dave/games Dave wants to share this folder with the children.
/home/dave/sallyshare Dave wants to click this folder to visit Sally’s computer.
/home/dave/childrenshare Dave wants to click this folder to visit the children’s computer.
THE CHILDREN’S COMPUTER INFORMATION
192.168.1.123 The children’s LAN IP address.
/home/children/homework The children want to share this folder with Sally.
/home/children/homework The children want to share this folder with Dave.
/home/children/momshare The children want to click this folder to visit Sally’s computer.
/home/children/dadshare The children want to click this folder to visit Dave’s computer.

Step 02 – The family creates mount points:

SALLY creates a mount point she can use to visit Dave’s computer:

mkdir /home/sally/daveshare

SALLY creates a mount point she can use to visit the children’s computer:

mkdir /home/sally/childrenshare

DAVE creates a mount point he can use to visit Sally’s computer:

mkdir /home/dave/sallyshare

DAVE creates a mount point he can use to visit the children’s computer:

mkdir /home/dave/childrenshare

THE CHILDREN create a mount point they can use to visit Sally’s computer:

mkdir /home/children/momshare

THE CHILDREN create a mount point they can use to visit Dave’s computer:

mkdir /home/children/dadshare

Step 03 – The family installs some software:

SALLY installs some packages:

sudo apt-get install nfs-kernel-server

DAVE installs some packages:

sudo apt-get install nfs-kernel-server

THE CHILDREN install some packages:

sudo apt-get install nfs-kernel-server

Step 04 – The family edits the hosts.deny file:

SALLY edits the hosts.deny file:

kdesudo kate /etc/hosts.deny

SALLY adds this line to the bottom of the file:

rpcbind mountd nfsd statd lockd rquotad : ALL

DAVE edits the hosts.deny file:

kdesudo kate /etc/hosts.deny

DAVE adds this line to the bottom of the file:

rpcbind mountd nfsd statd lockd rquotad : ALL

THE CHILDREN edit the hosts.deny file:

kdesudo kate /etc/hosts.deny

THE CHILDREN add this line to the bottom of the file:

rpcbind mountd nfsd statd lockd rquotad : ALL

Step 05 – The family edits the hosts.allow file:

SALLY edits the hosts.allow file:

kdesudo kate /etc/hosts.allow

SALLY adds this line to the bottom of the file, with references to all of the NFS software, her own computer’s loopback IP, Dave’s IP and the children’s IP:

rpcbind mountd nfsd statd lockd rquotad: 127.0.0.1 192.168.1.200 192.168.1.123

DAVE edits the hosts.allow file:

kdesudo kate /etc/hosts.allow

DAVE adds this line to the bottom of the file, with references to all of the NFS software, his own computer’s loopback IP, Sally’s IP and the children’s IP :

rpcbind mountd nfsd statd lockd rquotad: 127.0.0.1 192.168.1.100 192.168.1.123

THE CHILDREN edit the hosts.allow file:

kdesudo kate /etc/hosts.allow

THE CHILDREN add this line to the bottom of the file, with references to all of the NFS software, their own computer’s loopback IP, Sally’s IP and Dave’s IP :

rpcbind mountd nfsd statd lockd rquotad: 127.0.0.1 192.168.1.100 192.168.1.200

Step 06 – The family edits the exports file:

SALLY edits the exports file:

kdesudo kate /etc/exports

SALLY adds this line to the bottom of the file to share photos with Dave:

/home/sally/photos 192.168.1.200(rw,sync,no_subtree_check)

SALLY adds this line to the bottom of the file to share stories with the children:

/home/sally/stories 192.168.1.123(rw,sync,no_subtree_check)

DAVE edits the exports file:

kdesudo kate /etc/exports

DAVE adds this line to the bottom of the file to share work with Sally:

/home/dave/work 192.168.1.100(rw,sync,no_subtree_check)

DAVE adds this line to the bottom of the file to share games with the children:

/home/dave/games 192.168.1.123(rw,sync,no_subtree_check)

THE CHILDREN edit the exports file:

kdesudo kate /etc/exports

THE CHILDREN add this line to the bottom of the file to share homework with Sally and Dave:

/home/children/homework 192.168.1.100(rw,sync,no_subtree_check) 192.168.1.200(rw,sync,no_subtree_check)

Step 07 – The family edits the fstab file:

SALLY edits the fstab file:

kdesudo kate /etc/fstab

SALLY adds this line to the bottom of the file so she can visit Dave’s share:

192.168.1.200:/home/dave/work /home/sally/daveshare nfs rw,hard,intr,noexec 0 0

SALLY adds this line to the bottom of the file so she can visit the children’s share:

192.168.1.123:/home/children/homework /home/sally/childrenshare nfs rw,hard,intr,noexec 0 0

DAVE edits the fstab file:

kdesudo kate /etc/fstab

DAVE adds this line to the bottom of the file so he can visit Sally’s share:

192.168.1.100:/home/sally/photos /home/dave/sallyshare nfs rw,hard,intr,noexec 0 0

DAVE adds this line to the bottom of the file so he can visit the children’s share:

192.168.1.123:/home/children/homework /home/dave/childrenshare nfs rw,hard,intr,noexec 0 0

THE CHILDREN edit the fstab file:

kdesudo kate /etc/fstab

THE CHILDREN add this line to the bottom of the file so they can visit Sally’s share:

192.168.1.100:/home/sally/stories /home/children/momshare nfs rw,hard,intr,noexec 0 0

THE CHILDREN add this line to the bottom of the file so they can visit Dave’s share:

192.168.1.200:/home/dave/games /home/children/dadshare nfs rw,hard,intr,noexec 0 0

Step 08 – The family edits the nfs-common file:

SALLY edits the nfs-common file:

kdesudo kate /etc/default/nfs-common

SALLY finds this line in the file:

NEED_GSSD=

SALLY replaces it with this line:

NEED_GSSD="no"
DAVE edits the nfs-common file:

kdesudo kate /etc/default/nfs-common

DAVE finds this line in the file:

NEED_GSSD=

DAVE replaces it with this line:

NEED_GSSD="no"
THE CHILDREN edit the nfs-common file:

kdesudo kate /etc/default/nfs-common

THE CHILDREN finds this line in the file:

NEED_GSSD=

THE CHILDREN replaces it with this line:

NEED_GSSD="no"

Step 09 – The family edits the nfs-kernel-server file

SALLY edits the nfs-kernel-server file:

kdesudo kate /etc/default/nfs-kernel-server

SALLY finds the NEED_SVCGSSD line in the file.

SALLY replaces it with this line:

NEED_SVCGSSD="no"
DAVE edits the nfs-common file:

kdesudo kate /etc/default/nfs-kernel-server

DAVE finds the NEED_SVCGSSD line in the file.

DAVE replaces it with this line:

NEED_SVCGSSD="no"
THE CHILDREN edit the nfs-common file:

kdesudo kate /etc/default/nfs-kernel-server

THE CHILDREN find the NEED_SVCGSSD line in the file.

THE CHILDREN replace it with this line:

NEED_SVCGSSD="no"

Step 10 – The family exports the shares:

SALLY exports her shares:

sudo exportfs -ar

DAVE exports his shares:

sudo exportfs -ar

THE CHILDREN export their shares:

sudo exportfs -ar

Step 11 – The family restarts the nfs-kernel-server:

SALLY restarts the nfs-kernel-server:

sudo service nfs-kernel-server restart

DAVE restarts the nfs-kernel-server:

sudo service nfs-kernel-server restart

THE CHILDREN restart the nfs-kernel-server:

sudo service nfs-kernel-server restart

Working with the shares

The family connects to the shares automatically:

SALLY reboots her computer.

If Dave’s computer is already booted, Sally will automatically be connected to Dave’s share.

If the children’s computer is already booted, Sally will automatically be connected to the children’s share.

DAVE reboots his computer.

If Sally’s computer is already booted, Dave will automatically be connected to Sally’s share.

If the children’s computer is already booted, Dave will automatically be connected to the children’s share.

THE CHILDREN reboot their computer.

If Sally’s computer is already booted, the children will automatically be connected to Sally’s share.

If Dave’s computer is already booted, the children will automatically be connected to Dave’s share.

The family connects to the shares manually:

SALLY manually connects to Dave’s share:

sudo mount /home/sally/daveshare

SALLY manually connects to the children’s share:

sudo mount /home/sally/childrenshare

DAVE manually connects to Sally’s share:

sudo mount /home/dave/sallyshare

DAVE manually connects to the children’s share:

sudo mount /home/dave/childrenshare

THE CHILDREN manually connect to Sally’s share:

sudo mount /home/children/momshare

THE CHILDREN manually connect to Dave’s share:

sudo mount /home/children/dadshare

The family uses the shares:

SALLY visits Dave’s share by opening her /home/sally/daveshare folder.

SALLY shares photos with Dave by putting them in her /home/sally/photos folder.

SALLY visits the children’s share by opening her /home/sally/childrenshare folder.

SALLY shares stories with the children by putting them in her /home/sally/stories folder.

DAVE visits Sally’s share by opening his /home/dave/sallyshare folder.

DAVE shares his work with Sally by putting them in his /home/dave/work folder.

DAVE visits the children’s share by opening his /home/dave/childrenshare folder.

DAVE shares games with the children by putting them in his /home/dave/games folder.

THE CHILDREN visit Sally’s share by opening their /home/children/momshare folder.

THE CHILDREN share their homework with Sally by putting it in their /home/children/homework folder.

THE CHILDREN visit Dave’s share by opening their /home/children/dadshare folder.

THE CHILDREN share their homework with Dave by putting it in their /home/children/homework folder.

The family disconnects from the shares:

SALLY stops visiting Dave’s share by disconnecting from it:

sudo umount /home/sally/daveshare

SALLY stops visiting the children’s share by disconnecting from it:

sudo umount /home/sally/childrenshare

DAVE stops visiting Sally’s share by disconnecting from it:

sudo umount /home/dave/sallyshare

DAVE stops visiting the children’s share by disconnecting from it:

sudo umount /home/dave/childrenshare

THE CHILDREN stop visiting Sally’s share by disconnecting from it:

sudo umount /home/children/momshare

THE CHILDREN stop visiting Dave’s share by disconnecting from it:

sudo umount /home/children/dadshare

Examples

These examples show only the relevant information that pertains to NFS. Some files on your computer (like the /etc/fstab file, for instance) may contain more than what is shown here.

/etc/network/interfaces

SALLY’S /etc/network/interfaces file:

auto lo
iface lo inet loopback
address 127.0.0.1
netmask 255.0.0.0

auto eth0
iface eth0 inet static
address 192.168.1.100
netmask 255.255.255.0
gateway 192.168.1.1

DAVE’S /etc/network/interfaces file:

auto lo
iface lo inet loopback
address 127.0.0.1
netmask 255.0.0.0

auto eth0
iface eth0 inet static
address 192.168.1.200
netmask 255.255.255.0
gateway 192.168.1.1

THE CHILDREN’S /etc/network/interfaces file:

auto lo
iface lo inet loopback
address 127.0.0.1
netmask 255.0.0.0

auto eth0
iface eth0 inet static
address 192.168.1.123
netmask 255.255.255.0
gateway 192.168.1.1

/etc/hosts.deny

SALLY’S /etc/hosts.deny file:

# /etc/hosts.deny: list of hosts that are _not_ allowed to access the system.
#                  See the manual pages hosts_access(5) and hosts_options(5).
#
# Example:    ALL: some.host.name, .some.domain
#             ALL EXCEPT in.fingerd: other.host.name, .other.domain
#
# If you're going to protect the portmapper use the name "portmap" for the
# daemon name. Remember that you can only use the keyword "ALL" and IP
# addresses (NOT host or domain names) for the portmapper, as well as for
# rpc.mountd (the NFS mount daemon). See portmap(8) and rpc.mountd(8)
# for further information.
#
# The PARANOID wildcard matches any host whose name does not match its
# address.
#
# You may wish to enable this to ensure any programs that don't
# validate looked up hostnames still leave understandable logs. In past
# versions of Debian this has been the default.
# ALL: PARANOID

rpcbind mountd nfsd statd lockd rquotad: ALL

DAVE’S /etc/hosts.deny file:

# /etc/hosts.deny: list of hosts that are _not_ allowed to access the system.
#                  See the manual pages hosts_access(5) and hosts_options(5).
#
# Example:    ALL: some.host.name, .some.domain
#             ALL EXCEPT in.fingerd: other.host.name, .other.domain
#
# If you're going to protect the portmapper use the name "portmap" for the
# daemon name. Remember that you can only use the keyword "ALL" and IP
# addresses (NOT host or domain names) for the portmapper, as well as for
# rpc.mountd (the NFS mount daemon). See portmap(8) and rpc.mountd(8)
# for further information.
#
# The PARANOID wildcard matches any host whose name does not match its
# address.
#
# You may wish to enable this to ensure any programs that don't
# validate looked up hostnames still leave understandable logs. In past
# versions of Debian this has been the default.
# ALL: PARANOID

rpcbind mountd nfsd statd lockd rquotad: ALL

THE CHILDREN’S /etc/hosts.deny file:

# /etc/hosts.deny: list of hosts that are _not_ allowed to access the system.
#                  See the manual pages hosts_access(5) and hosts_options(5).
#
# Example:    ALL: some.host.name, .some.domain
#             ALL EXCEPT in.fingerd: other.host.name, .other.domain
#
# If you're going to protect the portmapper use the name "portmap" for the
# daemon name. Remember that you can only use the keyword "ALL" and IP
# addresses (NOT host or domain names) for the portmapper, as well as for
# rpc.mountd (the NFS mount daemon). See portmap(8) and rpc.mountd(8)
# for further information.
#
# The PARANOID wildcard matches any host whose name does not match its
# address.
#
# You may wish to enable this to ensure any programs that don't
# validate looked up hostnames still leave understandable logs. In past
# versions of Debian this has been the default.
# ALL: PARANOID

rpcbind mountd nfsd statd lockd rquotad: ALL

/etc/hosts.allow

SALLY’S /etc/hosts.allow file:

# /etc/hosts.allow: list of hosts that are allowed to access the system.
#                   See the manual pages hosts_access(5) and hosts_options(5).
#
# Example:    ALL: LOCAL @some_netgroup
#             ALL: .foobar.edu EXCEPT terminalserver.foobar.edu
#
# If you're going to protect the portmapper use the name "portmap" for the
# daemon name. Remember that you can only use the keyword "ALL" and IP
# addresses (NOT host or domain names) for the portmapper, as well as for
# rpc.mountd (the NFS mount daemon). See portmap(8) and rpc.mountd(8)
# for further information.
#
rpcbind mountd nfsd statd lockd rquotad: 127.0.0.1 192.168.1.200 192.168.1.123

DAVE’S /etc/hosts.allow file:

# /etc/hosts.allow: list of hosts that are allowed to access the system.
#                   See the manual pages hosts_access(5) and hosts_options(5).
#
# Example:    ALL: LOCAL @some_netgroup
#             ALL: .foobar.edu EXCEPT terminalserver.foobar.edu
#
# If you're going to protect the portmapper use the name "portmap" for the
# daemon name. Remember that you can only use the keyword "ALL" and IP
# addresses (NOT host or domain names) for the portmapper, as well as for
# rpc.mountd (the NFS mount daemon). See portmap(8) and rpc.mountd(8)
# for further information.
#
rpcbind mountd nfsd statd lockd rquotad: 127.0.0.1 192.168.1.100 192.168.1.123

THE CHILDREN’S /etc/hosts.allow file:

# /etc/hosts.allow: list of hosts that are allowed to access the system.
#                   See the manual pages hosts_access(5) and hosts_options(5).
#
# Example:    ALL: LOCAL @some_netgroup
#             ALL: .foobar.edu EXCEPT terminalserver.foobar.edu
#
# If you're going to protect the portmapper use the name "portmap" for the
# daemon name. Remember that you can only use the keyword "ALL" and IP
# addresses (NOT host or domain names) for the portmapper, as well as for
# rpc.mountd (the NFS mount daemon). See portmap(8) and rpc.mountd(8)
# for further information.
#
rpcbind mountd nfsd statd lockd rquotad: 127.0.0.1 192.168.1.100 192.168.1.200

/etc/exports

SALLY’S /etc/exports file:

/home/sally/photos 192.168.1.200(rw,sync,no_subtree_check)
/home/sally/stories 192.168.1.123(rw,sync,no_subtree_check)

DAVE’S /etc/exports file:

/home/dave/work 192.168.1.100(rw,sync,no_subtree_check)
/home/dave/games 192.168.1.123(rw,sync,no_subtree_check)

THE CHILDREN’S /etc/exports file:

/home/children/homework 192.168.1.100(rw,sync,no_subtree_check) 192.168.1.200(rw,sync,no_subtree_check)

/etc/fstab

SALLY’S /etc/fstab file:

192.168.1.200:/home/dave/work /home/sally/daveshare nfs rw,hard,intr,noexec 0 0
192.168.1.123:/home/children/homework /home/sally/childrenshare nfs rw,hard,intr,noexec 0 0

DAVE’S /etc/fstab file:

192.168.1.100:/home/sally/photos /home/dave/sallyshare nfs rw,hard,intr,noexec 0 0
192.168.1.123:/home/children/homework /home/dave/childrenshare nfs rw,hard,intr,noexec 0 0

THE CHILDREN’S /etc/fstab file:

192.168.1.100:/home/sally/stories /home/children/momshare nfs rw,hard,intr,noexec 0 0
192.168.1.200:/home/dave/games /home/children/dadshare nfs rw,hard,intr,noexec 0 0

/etc/default/nfs-common

SALLY’S /etc/default/nfs-common file:

# If you do not set values for the NEED_ options, they will be attempted
# autodetected; this should be sufficient for most people. Valid alternatives
# for the NEED_ options are "yes" and "no".

# Do you want to start the statd daemon? It is not needed for NFSv4.
NEED_STATD=

# Options for rpc.statd.
#   Should rpc.statd listen on a specific port? This is especially useful
#   when you have a port-based firewall. To use a fixed port, set this
#   this variable to a statd argument like: "--port 4000 --outgoing-port 4001".
#   For more information, see rpc.statd(8) or http://wiki.debian.org/?SecuringNFS
STATDOPTS=

# Do you want to start the idmapd daemon? It is only needed for NFSv4.
NEED_IDMAPD=yes

# Do you want to start the gssd daemon? It is required for Kerberos mounts.
NEED_GSSD="no"

DAVE’S /etc/default/nfs-common file:

# If you do not set values for the NEED_ options, they will be attempted
# autodetected; this should be sufficient for most people. Valid alternatives
# for the NEED_ options are "yes" and "no".

# Do you want to start the statd daemon? It is not needed for NFSv4.
NEED_STATD=

# Options for rpc.statd.
#   Should rpc.statd listen on a specific port? This is especially useful
#   when you have a port-based firewall. To use a fixed port, set this
#   this variable to a statd argument like: "--port 4000 --outgoing-port 4001".
#   For more information, see rpc.statd(8) or http://wiki.debian.org/?SecuringNFS
STATDOPTS=

# Do you want to start the idmapd daemon? It is only needed for NFSv4.
NEED_IDMAPD=yes

# Do you want to start the gssd daemon? It is required for Kerberos mounts.
NEED_GSSD="no"

THE CHILDREN’S /etc/default/nfs-common file:

# If you do not set values for the NEED_ options, they will be attempted
# autodetected; this should be sufficient for most people. Valid alternatives
# for the NEED_ options are "yes" and "no".

# Do you want to start the statd daemon? It is not needed for NFSv4.
NEED_STATD=

# Options for rpc.statd.
#   Should rpc.statd listen on a specific port? This is especially useful
#   when you have a port-based firewall. To use a fixed port, set this
#   this variable to a statd argument like: "--port 4000 --outgoing-port 4001".
#   For more information, see rpc.statd(8) or http://wiki.debian.org/?SecuringNFS
STATDOPTS=

# Do you want to start the idmapd daemon? It is only needed for NFSv4.
NEED_IDMAPD=yes

# Do you want to start the gssd daemon? It is required for Kerberos mounts.
NEED_GSSD="no"

/etc/default/nfs-kernel-server

SALLY’S /etc/default/nfs-kernel-server file:

# Number of servers to start up
# To disable nfsv4 on the server, specify '--no-nfs-version 4' here
RPCNFSDCOUNT=8

# Runtime priority of server (see nice(1))
RPCNFSDPRIORITY=0

# Options for rpc.mountd.
# If you have a port-based firewall, you might want to set up
# a fixed port here using the --port option. For more information,
# see rpc.mountd(8) or http://wiki.debian.org/SecuringNFS
# To disable NFSv4 on the server, specify '--no-nfs-version 4' here
RPCMOUNTDOPTS=--manage-gids

# Do you want to start the svcgssd daemon? It is only required for Kerberos
# exports. Valid alternatives are "yes" and "no"; the default is "no".
NEED_SVCGSSD="no"

# Options for rpc.svcgssd.
RPCSVCGSSDOPTS=

# Options for rpc.nfsd.
RPCNFSDOPTS=
DAVE’S /etc/default/nfs-kernel-server file:

# Number of servers to start up
# To disable nfsv4 on the server, specify '--no-nfs-version 4' here
RPCNFSDCOUNT=8

# Runtime priority of server (see nice(1))
RPCNFSDPRIORITY=0

# Options for rpc.mountd.
# If you have a port-based firewall, you might want to set up
# a fixed port here using the --port option. For more information,
# see rpc.mountd(8) or http://wiki.debian.org/SecuringNFS
# To disable NFSv4 on the server, specify '--no-nfs-version 4' here
RPCMOUNTDOPTS=--manage-gids

# Do you want to start the svcgssd daemon? It is only required for Kerberos
# exports. Valid alternatives are "yes" and "no"; the default is "no".
NEED_SVCGSSD="no"

# Options for rpc.svcgssd.
RPCSVCGSSDOPTS=

# Options for rpc.nfsd.
RPCNFSDOPTS=
THE CHILDREN’S /etc/default/nfs-kernel-server file:

# Number of servers to start up
# To disable nfsv4 on the server, specify '--no-nfs-version 4' here
RPCNFSDCOUNT=8

# Runtime priority of server (see nice(1))
RPCNFSDPRIORITY=0

# Options for rpc.mountd.
# If you have a port-based firewall, you might want to set up
# a fixed port here using the --port option. For more information,
# see rpc.mountd(8) or http://wiki.debian.org/SecuringNFS
# To disable NFSv4 on the server, specify '--no-nfs-version 4' here
RPCMOUNTDOPTS=--manage-gids

# Do you want to start the svcgssd daemon? It is only required for Kerberos
# exports. Valid alternatives are "yes" and "no"; the default is "no".
NEED_SVCGSSD="no"

# Options for rpc.svcgssd.
RPCSVCGSSDOPTS=

# Options for rpc.nfsd.
RPCNFSDOPTS=

/etc/idmapd.conf

SALLY’S /etc/idmapd.conf file:

[General]

Verbosity = 0
Pipefs-Directory = /run/rpc_pipefs
# set your own domain here, if id differs from FQDN minus hostname
# Domain = localdomain

[Mapping]

Nobody-User = nobody
Nobody-Group = nogroup
DAVE’S /etc/idmapd.conf file:

[General]

Verbosity = 0
Pipefs-Directory = /run/rpc_pipefs
# set your own domain here, if id differs from FQDN minus hostname
# Domain = localdomain

[Mapping]

Nobody-User = nobody
Nobody-Group = nogroup
THE CHILDREN’S /etc/idmapd.conf file:

[General]

Verbosity = 0
Pipefs-Directory = /run/rpc_pipefs
# set your own domain here, if id differs from FQDN minus hostname
# Domain = localdomain

[Mapping]

Nobody-User = nobody
Nobody-Group = nogroup

Obligatory Happy Ending

And they all lived happily ever after. The end.

Leave a Comment »

No comments yet.

RSS feed for comments on this post. TrackBack URI

Comment:

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

Create a free website or blog at WordPress.com.

%d bloggers like this: