LTSP Fat Client
Linux Terminal Server Project (LTSP) is a collection of free and open source software that turns a normal GNU/Linux installation into a terminal server allowing many people to simultaneously use the same computer.
Introduction to Fat clients
In contrast to the classic LTSP environment, the connected LTSP clients work as Fat Clients where the desktop environment and all programs run locally on the LTSP client, as in a typical desktop machine. This has the advantages of a classic LTSP environment (updates, users and home directories are managed centrally), without the disadvantages of the same (performance problems with many accessing the LTSP server at the same time or graphic-heavy programs / multimedia).
This guide installs and configures LTSP on Ubuntu 16.04 using the LTSP-PNP (Plug and Play) method where chroots are not used and a single-NIC setup with an external DHCP server (e.g. a router) is recommended (but not required) as it uses dnsmasq in proxyDHCP mode. 
Update the server and install necessary software required for clients. Check the files /etc/hostname and /etc/hosts are as desired.
Installation and Configuration
1. ltsp-server dnsmasq epoptes epoptes-client ltsp-client resolvconf rsync are the necessary packages and they can be installated with below command -
sudo apt install ltsp-server dnsmasq epoptes epoptes-client ltsp-client resolvconf rsync
2. Once epoptes is installed one must add the server's user (in the example "administrator") to the new epoptes group. This command will do it:
sudo usermod -G epoptes -a administrator
Note that this new membership will only be activated in the next login.
3. Check the file /etc/network/interfaces for possible lines similar to
#The primary network interface #allow-hotplug eth0 #iface eth0 inet dhcp
If they are not present or they are commented out as above then network-manager will be in control of the network interface which is assumed in this model so go on to step 4.
Otherwise these lines need to be commented out by adding the asterisk symbol as shown above and the config file is saved otherwise step 4 cannot be done. However, the server needs to be rebooted and will render the Internet temporarily unavailable until part (b) of step 4 is done.
So take care to copy down somewhere all of part (b) of step 4 and complete it so the Internet is restored.
4. NetworkManager configuration
We must edit NetworkManager's configuration in two places.
a) Check in /etc/NetworkManager/NetworkManager.conf for the dns= key and comment out the line
(b) Launch nm-connection-editor from the command line. After launching: Choose the Wired connection and click Edit. Click on the IPv4 Settings tab. Choose 'Automatic (DHCP) addresses only' instead of just 'Automatic (DHCP)'. In the DNS servers field enter 127.0.0.1 first followed by one or two external DNS servers, separated by spaces (e.g. 127.0.0.1 184.108.40.206 220.127.116.11). Save these settings and close the window.
and then restart Network Manager with
sudo systemctl restart network-manager
5. Set up dnsmasq as a proxy DHCP server
Create a default configuration file for dnsmasq with the command
sudo ltsp-config dnsmasq
Edit this file /etc/dnsmasq.d/ltsp-server-dnsmasq.conf so that local dns caching is activated. Comment out
When working with a server with one nic (only one subnet with the server, all clients and the router) check to see if the line
corresponds to this subnet. If this is correct comment out the other range line
If on the other hand the server has two nics be sure to connect the gigabit capable device to the switch with the clients and give that device the static ip 192.168.67.1 and leave both lines active (without the # symbol.)
Thus dnsmasq is the dhcp server for that subnet only.
Then restart dnsmasq with the command
sudo systemctl restart dnsmasq
6. Edit the config file /etc/ltsp/update-kernels.conf to have the uncommented lines
7. The version of the kernel running on the server can be determined with the command
Note that at the time of writing the kernel was 4.9.0-6-amd64 in 64bit Stretch thus the command is
sudo dpkg-reconfigure linux-image-4.9.0-6-amd64
This reports update-initramfs: Generating /boot/initrd.img-4.9.0-6-amd64 adding the changes above.
8. Once the server has been updated and any additional software has been installed a new client filesystem image must be created in order for the clients to also have these updates. This is the command
sudo ltsp-update-image --cleanup /
This builds the latest squashfs image for nbd in /opt/ltsp/images and puts the latest kernel into /var/lib/tftboot/ltsp/amd64.) It triggers "ltsp-config nbd-server" to create (if needed) the files /etc/nbd-server/conf.d/swap.conf and /etc/nbd-server/conf.d/ltsp_amd64.conf. Check to see if both are there. It also creates /etc/nbd-client.
9. Then, create the default configuration file for the clients with the command
sudo ltsp-config lts.conf
10. Lastly reboot the server so that all changes are active including the user's membership in the group epoptes.
Resources can be shared locally over the network either using the Apache http server or Samba file server. If the resources are html files like the offline KOER or ICT textbook, it is recommended to share these using the http server. Please follow below instructions to share the resources using Apache.
1. Make sure Apache is installed on the machine. Open the web browser and type localhost to see the default apache page. If you are not seeing it, then run below command do install it -
sudo apt install apache2
2. By default, Apache root directory is located at /var/www/html. We need to create our resources directory here. It can be done with below command:
sudo mkdir -p /var/www/html/resources
3. Now change permissions to make it available on the network:
sudo chmod -R 777 /var/www/html/resources/
4. Copy all the resources organized in separate folders to the resources directory. It can be with Nautilus file manager or directly with command line:
cp -r /your/resource/folder /var/www/html/resources