Penguin
Diff: HowToDisklessrootNFSotherHOWTO
EditPageHistoryDiffInfoLikePages

Differences between current version and predecessor to the previous major change of HowToDisklessrootNFSotherHOWTO.

Other diffs: Previous Revision, Previous Author, or view the Annotated Edit History

Newer page: version 3 Last edited on Monday, October 25, 2004 5:15:49 am by AristotlePagaltzis
Older page: version 2 Last edited on Friday, June 7, 2002 1:06:29 am by perry Revert
@@ -1,1310 +1 @@
-  
-  
-  
-Root over NFS - Another Approach  
-  
-  
-  
-----  
-  
-!!!Root over NFS - Another Approach  
-  
-!!George Gousios, cs98011@icsd.aegean.grv1., 2001-09-12  
-  
-  
-----  
-''This HOWTO does not intend to replace the existing Root over NFS  
-Howto's. It is just another approach, particularly useful in large  
-system installations. It is the result of many days of trying to  
-setup a system for the University of the Aegean computer labs. The  
-installation method described here is up and running. The HOWTO is  
-dedicated to all of those guys who programmed these exceptionally  
-good OS and tools. Also dedicated to all people that encouraged me  
-to write it.''  
-----  
-  
-  
-  
-  
-!!1. Introduction  
-  
-  
-*1.1 The setting  
-  
-*1.2 The alternatives  
-  
-*1.3 General Principles  
-  
-  
-  
-  
-  
-!!2. Setting up the server  
-  
-  
-*2.1 Setting up the NFS server  
-  
-*2.2 Setting up the DHCP/BOOTP server  
-  
-*2.3 Preparing the base system  
-  
-  
-  
-  
-  
-!!3. Setting up the clients  
-  
-  
-*3.1 Errata  
-  
-*3.2 Fiddling with scripts and files!  
-  
-*3.3 Booting the base system  
-  
-*3.4 Configuring the system  
-  
-  
-  
-  
-  
-!!4. Preparing the boot disk  
-  
-  
-*4.1 Building a kernel  
-  
-*4.2 Creating the boot disk  
-  
-*4.3 The kernel command line  
-  
-  
-  
-  
-  
-!!5. The magic time  
-  
-  
-  
-  
-!!6. Other Stuff  
-  
-  
-*6.1 Contributors  
-  
-*6.2 Copyrights  
-  
-*6.3 Contacting the author  
-  
-*6.4 Changelog  
-  
-  
-  
-  
-  
-!!7. Appendix  
-  
-  
-*7.1 Appendix A - A script for creating host directories  
-  
-*7.2 Appendix B - A script to create the dhcpd.conf file using arpwatch  
-  
-*7.3 Appendix C - A sample XF86Config file  
-  
-----  
-  
-!!1. Introduction  
-  
-  
-This document does not resemble a common HOWTO, meaning referencing to general principles,  
-but it is rather an on-hand approach to a by nature complex matter.  
-It borrows the structure of the current Root over NFS , but differs from it in the following points:  
-  
-  
-  
-  
-  
-* It provides a working solution fom the distribution used. The distribution specific points should be applicable to all major distributions (!RedHat,SuSE,Debian).  
-*  
-  
-* It uses more up to date tools, ex NFS v3., kernel 2.4., dhcp instead of bootparamd.  
-*  
-  
-* All steps are described in detail, letting the reader to adapt them to his own system. No scripts!  
-*  
-  
-  
-  
-This HOWTO expects that you have a general knowledge of what you are up to, so first read the Diskless Nodes HOW-TO.  
-  
-!!1.1 The setting  
-  
-  
-  
-It is a common case a University computer lab to have a lot PC's running Windows 98 or/and NT and a powerful UNIX server to satisfy the need of an alternative operating environment.  
-This UNIX server is most of times idle or meerly accessed by telnet and running stupid tasks.  
-On the other hand, students, especially those attending a computer science department,  
-feel like taking full advantage of it, just for fun or for "educational purposes" (breaking in, hacking it...).  
-The restrictive environment of telnet does not allow us to enjoy the use of a power server.There are 2 alternatives to that:  
-  
-  
-*Try to persuade the department' s headmaster to approve of the purchase of a bunch of new Unix workstations.  
-*  
-  
-*Try to persuade the same guy to approve of transforming the server to a diskless node server.  
-*  
-  
-  
-  
-The network at the computer lab consists of the following.  
-  
-  
-  
-  
-  
-*UNIX server: SUN Enterprise 3500 with 2 64 bit SPARC@366 Mhz processors and 512 MB of memory. A real monster, isn't it?  
-*  
-  
-*"Dumb" target workstations: 60-70 PC's with variable configurations, ranging from PII 266 to PIII 450 with 64-128 MB RAM.  
-*  
-  
-  
-  
-The task I had to accomplish was the following:  
-Provide a complete working solution without new expenses and without modifying anything but the necessary on the server.  
-  
-  
-  
-  
-!!1.2 The alternatives  
-  
-  
-  
-Being the responsible for the project, I had to choose between a variety of solutions about it.  
-I choose the following, for the reasons illustrated:  
-  
-  
-*The new 2.4 kernel: It provides a robust and fast solution, using less memory than the old 2.2 series.  
-If it is important for your users to attach devices to their PC's then it is the only solution.  
-Also provides NFS v3, and more efficient memory management.  
-*  
-  
-*The KDE 2.1.1 desktop environment: VERY stable, easy to use, Internet enabled, makes the transition from Windows  
-to Linux desktop almost effortless. GNOME + Afterstep is another option, but not as mature as a solution as KDE.  
-*  
-  
-*SuSE 7.0 distribution: My favorite one, IMHO the most balanced  
-between ease of use and understanding of a Linux system structure.  
-*  
-  
-  
-  
-  
-  
-!!1.3 General Principles  
-  
-  
-  
-To be able to boot a Linux system, you have to provide it with the following:  
-  
-  
-*The /sbin directory. There exists the init programm,  
-which is responsible for starting other programms and start up scripts during  
-the boot process. Also, the /sbin directory contains the startup scripts in the case of SuSE,  
-some useful programms like the portmap programm and many other programms that are needed before you mount the /usr directory.  
-*  
-  
-*The /lib directory. It contains the libc libraries that are absolutely necessary if your init is dynamically linked.  
-*  
-  
-*The /bin directory. It contains file commands and shells for running startup scripts.  
-*  
-  
-* The /etc directory. It contains configuration files for most programms and the rc.d directories that is the default for startup scripts.  
-*  
-  
-* The /var directory. It is a spool area for programms that want to write somewhere. It is divided into many subdirectories with alternate usability.  
-*  
-  
-* The /dev directory. It contains character and block special devices that allow programms to communicate with the computers devices via the kernel.  
-*  
-  
-You should notice that after a clean install, the total size of these directories is not that big,  
-ranging from 30 to 40 MB. The main load of files exists in the /usr and /opt directories.  
-So, it is possible to create a directory for every diskless client containing the above listed directories  
-and mount points for directories like /usr that will be exported by the server.  
-The boot process, as assumed by this document, is the following:  
-  
-  
-# The user reboots the computer, and using a diskette boots the Linux kernel.  
-#  
-  
-# The kernel takes control of the system, identifies the system devices, and uses  
-BOOTP to obtain the IP address matching the NIC 's hardware address.  
-#  
-  
-# The init programm is started. Before switching to a run level, it calls a script described in the /etc/inittab file.  
-This script is responsible for building the library cache, initialise and mount a swap file,  
-load some system specific kernel modules and set the hostname.  
-#  
-  
-# The boot script finishes and the init programm switches to the specified runlevel.  
-It starts to execute the scripts located into the /etc/rc.d/rcX directory where 'X' is the name of the runlevel.  
-These scripts are responsible for starting the portmapper and mounting the NFS exported /usr, /home and /opt directories.  
-#  
-  
-# The user is able to login.  
-#  
-  
-To sum up, the system administrator has to do the following tasks:  
-  
-  
-* Prepare a clean install of the system to be exported to the diskless hosts.  
-*  
-  
-* Create the host specific directories  
-*  
-  
-* Control what is going to be started during the diskless clients' boot proces  
-*  
-  
-* Prepare the server to export some directories and start a bootp service.  
-*  
-  
-  
-  
-  
-----  
-  
-!!2. Setting up the server  
-  
-  
-The first, and less tricky, thing to do is to setup the server. The server must be prepared to run these services:  
-  
-  
-* NFS, preferably version 3, for exporting the following directories:  
-/usr, /lib/modules, /opt (at least at SuSE) and /home (unless you have a dedicated file server).  
-*  
-  
-* DHCP server (in bootp mode), for matching the clients' MAC addresses to IP addresses.  
-*  
-  
-Also, the administrator has to create directories for each client,  
-containing nessesary startup files and programs.  
-The directory scheme created for the installation described was like this one:  
-  
-  
-  
-  
-----  
-  
-/usr/local/linux-  
-|-/base-  
-| |-/bin  
-| |-/sbin  
-| |-/etc  
-|  
-|-/workstations-  
-| |  
-| |-195.251.160.100  
-| | |-/bin  
-| | |-/sbin  
-| | |-/etc  
-| |  
-| |-195.251.160.101  
-| |-195.251.160.102  
-| |-base(symbolic link to ../base)  
-  
-----  
-  
-  
-  
-The /base directory contains the whole file system you want to export to your clients.  
-The per IP directories contain files that are needed before mounting the /usr or /lib/modules directories,  
-like the /etc folder. This is a confortable directory structure for 2 purposes:  
-i) You can easily create a basic system at the base directory and copy the per workstation files at the workstation directories easily,  
-with an entry level bash script ii) You can easily add or delete or update workstations by modifying the directories under /workstations.  
-A script for copying the appropriate files (which will be discused later) can be found in Appendix A.  
-  
-  
-  
-  
-!!2.1 Setting up the NFS server  
-  
-  
-  
-An NFS server can be set up in two ways:  
-  
-  
-* Using the /etc/exports file at BSD-compliant Unices like Linux of FreeBSD.  
-*  
-  
-* Using the /etc/dfs/dfstab at SysV Unices like Solaris.  
-*  
-  
-__ /etc/exports:__ The /etc/exports file controls the directories to be exported and the export options per workstation.  
-It has a structure like the following (Linux):  
-  
-  
-  
-----  
-  
-/path/to/dir1 ws1(options) ws2(options)....  
-/path/to/dir2 ws3(options) ws1(options)....  
-  
-----  
-  
-  
-Options include ro or rw, root_squash, wsize, tcp, version.  
-  
-  
-Have a look at the nfs or the exports man page and the NFS Howto for a more detailed description of what these options mean.  
-  
-  
-__/etc/dfs/dfstab:__A typical dfstab file on Solaris should look like the following:  
-  
-  
-  
-----  
-  
-share -F nfs -o rw=193.250.160@,ro=193.250.161@ /export/home  
-share -F nfs -o ro=193.250.160@,root=193.250.161.132 /export/engineering  
-  
-----  
-  
-  
-Of course, these options are discused in detail at the dfstab man page.  
-  
-  
-The directories we want to export are /usr/local/linux/base/usr, /usr/local/linux/base/opt,  
-/usr/local/linux/base/lib/modules and /home, assuming that you 've followed the suggested structure.  
-  
-  
-__Optimising NFS__  
-  
-  
-Of course, this is none of our business but here are some general principles:  
-  
-  
-* Reduce the TCP window size (parameter wsize for Linux) to whatever is closest to the MTU of your network type.  
-For Ethernet, a good value of wsize is 2048 bytes as long as the MTU is 1536 bytes.  
-This is generally a good idea because the main traffic load between the clients and the server  
-consists of little packets and only in the case of starting large programms like X or  
-!StarOffice there is a big number of fragmented packets. Of course this may vary in your case, according to the needs of your users.  
-*  
-  
-* If you plan to have a large installation, break the space for your workstations into 2 or more SCSI disks. This will allow consequent  
-writes and reads on both disks, increasing responce and reducing latency before a request completes  
-*  
-  
-* Always use NFS v3 over TCP. The main reason for migrating from v2 to v3 is the writeback case it offers on both the workstation and  
-the server. Also, mounting NFS over TCP lets you use the first recomentation.  
-\end{itemize}  
-For further optimising use a packet analyzer like Ethereal or tcpdump and dicide your needs.By the way, Sun has written an  
-excellent guide to optimizing NFS performance which, although emphasised on Solaris, is applicable to every  
-modern Unix and is accessible online at  
-http://docs.sun.com.  
-*  
-  
-  
-!!2.2 Setting up the DHCP/BOOTP server  
-  
-  
-  
-Although there are many DHCP or BOOTP servers 'out there', some of which are proprietary,  
-the best option is to use the reference IETF DHCP server.  
-It is the least vulnerable and the most extensible DHCP available.  
-The main server configuration is done through the /etc/dhcpd.conf file.  
-This file is divided into two sections, the general server configuration and the host specific configuration.  
-A typical dhcpd.conf file looks like this, in case that the DHCP/BOOTP server is used in BOOTP mode:  
-  
-  
-subnet 193.250.160.0 netmask 255.255.255.0 {  
-range 193.250.160.10 193.250.160.12;  
-}  
-host george{  
-hardware ethernet 00:60:08:2C:22:20;  
-fixed-address 193.250.160.10;  
-}  
-host earth{  
-hardware ethernet 00:A0:24:A5:FD:E0;  
-fixed-address 193.250.160.12;  
-}  
-  
-  
-  
-  
-This structure is fairly easy to be understood by everyone. For every diskless client we have to  
-supply the programm with a 'host' declaration providing a pair of hardware and IP adresses.  
-The host name provided in the 'host' statement can be everything, but there is a conversion to  
-use the real host name of the client having the specific IP. The range statement in the subnet declaration is not  
-necessary to be the range that you want your clients to have. In fact, if these clients are normal workstations  
-with an operating system that during its boot uses DHCP to obtain an IP address it is not recommended to have  
-the same IP for their operation as diskless clients. If you have specific needs, have a look at dhcpd.conf man page.  
-  
-  
-Another difficulty is how to obtain the IP - MAC address pairs for a large network. The solution is a nice little programm  
-called arpwatch. This programm runs at the background and keeps track of the IP - MAC address pairs of the computers  
-that your computer has contacted in a file that you have specified. The only thing you have to do is to ping the computers  
-you want. At Appendix B there is a script that starts arpwatch, pings a range of subsequent IP's and creates the dhcpd.conf file.  
-If you want to do it manually, start arpwatch when your network is at its peak of usage and wait for some time.  
-On a shared medium network (Ethernet, Tokenring) arpwatch will track down all different IP 's and hardware addresses.  
-  
-  
-  
-  
-!!2.3 Preparing the base system  
-  
-  
-  
-To prepare the base system just install your favorite distribution to a mountable partition on a hard disk with a  
-Unix like operating system  
-already installed. Install all the programms you want to be available to your users.  
-Then you have to transfer the whole partition preserving the links and the character or block devices.  
-This is best done using the tar programm. Boot the previously installed system and execute the following command,  
-assuming that you have mounted the new partition at /mnt:  
-  
-  
-tar cpvf system.tar /mnt/.  
-  
-  
-  
-  
-This command will create a tar archive at the current directory with the whole system to be served to the diskless clients.  
-Then just copy the tar archive to the server using a CDROM or through the network and extract it at the base directory.  
-The command to do this is:  
-  
-  
-tar xvf system.tar /usr/local/linux/base  
-  
-  
-----  
-  
-!!3. Setting up the clients  
-  
-  
-  
-  
-!!3.1 Errata  
-  
-  
-  
-In order to setup the clients, we have to work on the base system. First, we will make some modifications to the startup scripts  
-by hand and second we will boot a workstation with the base system to make sure it works and to polish some details.  
-Note that this part is very distribution specific and perhaps some of those described here are not applicable to your case.  
-I can only guarantee that this works for SuSE 7.. Please, feel free to send me distribution specific copies of this page!  
-  
-!!3.2 Fiddling with scripts and files!  
-  
-  
-  
-After init is started, it executes a script described in /etc/inittab. This script has a very spesific job to do:  
-Bring the system in a state that other programms can be started. In most distributions I can think of this script does the following:  
-  
-  
-# Mounts the /proc, /dev/pts and swap filesystems.  
-#  
-  
-# Activates raid arrays and fscks the root filesystem.  
-#  
-  
-# Adjusts the clock.  
-#  
-  
-# Starts the kernel deamon for autoloading of modules.  
-#  
-  
-# Executes user defined client scripts.  
-#  
-  
-# Set some kernel parameters.  
-#  
-  
-On most distributions I have checked this script is very well commented and it is possible  
-for an experienced user to remove some lines that are not wanted or not applicable during a network boot.  
-I 've also noticed that all programms started do not require the /usr directory to be mounted.  
-If you are trying to netboot a host you must do the following modifications to this script:  
-  
-  
-  
-  
-  
-* Remove all entries that do fsck or initialise raid arrays, and add to the top of the script this  
-command : mount -o remount,rw / because the client has to have rw access to the root directory when it boots.  
-*  
-  
-* Do not let the kernel deamon start until all partitions are mounted  
-*  
-  
-* Mount a swap partition. This is described later.  
-*  
-  
-* Start the portmapper. If your system has a specific directory for starting bootup scripts,  
-place the portmapper startup script there giving it the highest priority possible, for example:  
-ln -s /etc/rc.d/portmap /etc/rc.d/boot/S01portmap if you are using SuSE.  
-*  
-  
-* Place the NFS filesystem mounting script in the system specific directory for boot scripts with priority lower  
-than the portmapper, for example ln -s /etc/rc.d/nfs /etc/rc.d/boot/S02nfs for SuSE.  
-*  
-  
-* Remove all entries that automount local partitions, and all entries that start an automounter deamon for !RedHat.  
-*  
-  
-  
-  
-  
-  
-!How to setup a swap partition  
-  
-  
-This is tricky business! Swapping over NFS is not allowed by the kernel and not functioning either. You cannot use  
-swapon on files that are on an NFS mounted filesystem. We have to do some tricks to enable it:  
-  
-  
-# Create the swap file. Its size can be variable but for a machine with 128 MB of RAM a swap size of 40-50 MB  
-seems reasonable. The command to create the swap file is: dd if=/dev/zero of=/var/swap bs=1k count=Xk  
-where X stands for the number of MB your swap should be. It is also a necessity to put the swap file under /var  
-as long as it is mounted at boot.  
-#  
-  
-# Format the swap file using the mkswapfs command.  
-#  
-  
-# Initialise a loopback device using the swap file. The command is losetup /dev/loop0 /var/swap.  
-#  
-  
-# Mount the loopback device with the command mount /dev/loop0 swap.  
-#  
-  
-You have to initialise a swap partition at the very beginning of the boot process.  
-So place commands 2-4 somewhere near to the top of the startup script.  
-The first command is very time consuming,especially in the case of a loaded network so just copy a swap file in the base system and do not  
-delete it when you create directories for each host.  
-  
-  
-  
-  
-!Modifying /etc/fstab  
-  
-  
-The /etc/fstabfile contains entries for automounting file systems at boot. In our case, we have  
-to place the following lines at the end of it:  
-  
-  
-server_IP:/usr/local/linux/base/usr /usr nfs nfsvers=3,wsize=2048,tcp 0  
-server_IP:/usr/local/linux/base/opt /opt nfs nfsvers=3,wsize=2048,tcp 0  
-server_IP:/usr/local/linux/base/lib/modules /lib/modules nfs nfsvers=3 wsize=2048,tcp 0  
-fileserver_IP:/home /home nfs nfsvers=3,wsize=2048,tcp 0  
-  
-  
-  
-  
-Also, do not forget to comment out lines that mount local partitions.  
-Save this file as /etc/fstab.new because it should not be activated yet,  
-as long as we have to boot the base system first.  
-  
-!Copying password files  
-  
-  
-You must provide the system with to files to let the users perform a login. To do this just copy the files  
-/etc/passwd and /etc/shadow from your file server to the base system.  
-Notice that you have to do it every time you add a user to the system, or a user changes  
-his/her password, so can best be done by creating a cron job.  
-  
-  
-  
-  
-!!3.3 Booting the base system  
-  
-  
-  
-To boot the base system we have to create a boot disk first.  
-Go to the next section and create a boot disk as recommended. Please, change the 'append' line to this one:  
-  
-  
-append init=/sbin/init root=/dev/nfs  
-ip=X:Y:195.251.160.254:255.255.255.:::'off'  
-nfsroot=Y:/usr/local/linux/base vga=0x318  
-(Of course, in a sigle line)  
-  
-  
-where X stands for an unused IP address in your network and Y for the IP address of the NFS server.  
-Of course, you have to export the /usr/local/linux/base directory from the NFS server with the  
-rw,no_root_squash options.  
-Now boot the base system. Everything should work OK, but I don' t think that there is a possibility that you succeeded from the first boot!  
-There are many obscure points, that you have forgotten to edit or I have forgotten to mention.  
-  
-  
-  
-  
-  
-This is the standard method to boot the base system and to add programms or a new kernel to your installation.  
-So backup the files you have edited as well as the boot disk image.  
-  
-  
-After succeeding to boot the system, you are in a complete linux enviroment.  
-Login as root and enjoy a first ride in your newly created system!  
-Now comes the hard time...  
-You have to disable some services that startup automatically and remove some programms not needed by the users.  
-  
-!!3.4 Configuring the system  
-  
-  
-  
-Nearly all distributions start these services:  
-  
-  
-* inetd, the Internet superdeamon responsible for starting other deamons like telnet, ftp etc.  
-*  
-  
-* syslogd, the logging deamon. Not needed on a diskless client not needed because all the modifications are done to files easyly replacable.  
-*  
-  
-* httpd, the apache webserver. Not needed for obvious reasons.  
-*  
-  
-* dhcpclient. Needed for automatic aquisition of an IP address. At out case, this is done by the kernel.  
-*  
-  
-* lpd, the line printer deamon. This is needed only when you have a printer connected to a host. In most cases, this is not needed.  
-*  
-  
-Also, according to your installation, there may be started sshd, nscd, cupsd and other network services not needed on clients.  
-To disable these services, remove their entries from the runtime directory under /etc/rc.d/X.  
-There is a more elegant way to do this under SuSE or !RedHat, using Yast or Linuxconfig.  
-For Yast, go to System administration ---> Change configuration file and using search locate the entries for every service you want to stop.  
-  
-  
-Then, uninstall all these services from the base system. The only service that seems reasonable to me to be left running  
-is the !NameServer caching deamon, which is able to reduce network traffic a lot.  
-  
-  
-Now, you have to edit some files:  
-  
-  
-* /etc/resolv.conf Used to provide a nameserver. Add these  
-entries: nameserver xxx.xxx.xxx.xxx and domain xxxxx ,  
-replacing x with the correct values.  
-*  
-  
-* /etc/hosts Used to match IP addresses to host names localy. Provide the basic servers' names of  
-your network.  
-*  
-  
-* /etc/nntpserver Used to provide a news server. Just append the nameserver 's hostname.  
-*  
-  
-* /etc/fstab Restore the fstab.new file we have created earlier.  
-*  
-  
-  
-!Configuring the language  
-  
-  
-Perhaps, you do not leave in the US or the UK, like me, so you have to configure the language.  
-This is simply done through the .profile file. Just add the following:  
-export LANG="X"where X is your natural language. Then, download a console font which supports your codepage  
-and set, with the help of Yast, the keyboard keymap.  
-Copy .profile to /etc/skel of the file server or to all the users' home directories.  
-  
-!The X window system  
-  
-  
-If you want to provide a working X enviroment for clients with different graphics hardware,  
-you have to use the XFBDev server. If you followed the instructions on howto create a boot disk,  
-you would now be in framebufer mode at 1024x768@16M colors, which is sufficient for use with X windows.  
-Now, you have to configure the X server to load the framebuffer driver. SuSE provides an exellent tool for configuring  
-X wherher it might be version 3 or 4. It is called sax for X 3.3.x and sax2 for X 4.x.  
-To use XFBDev driver start sax with the -s XF86_FBDev option and configure the server according to your hardware.  
-In case you do not use SuSE, most of the work must be done by hand.  
-Create a basic /etc/X11/XF86Config file using xf86config4.  
-Please choose entries that are as much as possible closer to your needs. Then edit the /etc/X11/XF86Config.  
-This file is devided into sections that start with the keyword 'Section' and end with '!EndSection'.  
-Do the following modifications:  
-  
-  
-* Section "Files": Add the path to the direcory where you 've put your fonts.  
-*  
-  
-* Section "Module": Load the GLX module if you want REALLY SLOW Open GL graphics (Load glx)!  
-*  
-  
-* Section "!InputDevice, Driver="mouse"": Add the following lines if you want to use a wheel mouse:  
-  
-  
-Option "Buttons" "5"  
-Option "ZAxisMapping" "4 5"  
-  
-  
-  
-*  
-  
-* Section "Device": Replace everything with the following:  
-  
-  
-!BoardName "!AutoDetected"  
-Driver "fb"  
-Identifier "Device [[ ]"  
-!VendorName "!AutoDetected  
-  
-  
-  
-*  
-  
-* Section "Modes": Replace everything with the following:  
-  
-  
-Identifier "Modes[[]"  
-Modeline "1024x768" 71.39 1024 1040 1216 1 400 768 768 776 802  
-  
-  
-  
-*  
-  
-* Section "Screen": Replace everything with the following  
-  
-  
-!DefaultDepth 16  
-!SubSection "Display"  
-Depth 16  
-Modes "1024x768"  
-!EndSubSection  
-Device "Device[[]"  
-Identifier "Screen[[]"  
-Monitor "Monitor[[]"  
-  
-  
-  
-*  
-  
-* Section "!ServerLayout": Replace everything with the following:  
-  
-  
-Identifier "Layout[[all]"  
-!InputDevice "Keyboard[[]" "!CoreKeyboard"  
-!InputDevice "Mouse[[1]" "!CorePointer"  
-Screen "Screen[[]"  
-  
-  
-and then replace the first argument of the !InputDevice directives with the identifiers which can be found earlier in the file.  
-*  
-  
-I thing that it should be a working configuration for framebuffer systems. For further reference take a  
-look at the XF86Config and the xf86cfg4 man pages. You will find a working XF86Config file at Appendix C.  
-  
-  
-  
-  
-!Configuring network access for KDE2  
-  
-  
-KDE is the most extensible, configurable and internet enabled window manager available,  
-even if we count some commercial ones that are proud of it!  
-To download KDE, ftp to ftp.kde.org and get the rpms for your distribution.  
-There, you can also find vanilla sources and other related projects.  
-  
-  
-The main configuration to KDE is done through the K Control Center.  
-There you can find options for configuring the fonts, colors, backgrounds etc.  
-The most important thing you can configure is the LAN browsing deamon that KDE incorporates, lisa.  
-There is also a readme file under \$KDE2ROOT/share/apps/lisa.  
-After you configure lisa, you have to make it (or her?) start in the background every time the computer is started.  
-Find the lisa 's configuration file under /root. Copy it under /etc.  
-Aftewards, place the command lisa -c /etc/lisa.conf at the /etc/rc.d/boot.local file,  
-or the similar for your installation. Now tell me, which is easiest to search a network Windows or Linux?  
-  
-  
-If your users are coming from the Windows world, they are familiar to find programms at the  
-damned 'Start' menu. To make their transition easy, edit the KDE menu with the Menu Editor programm and  
-add or remove applications there. Then, copy the .kde2 directory from you directory to the /etc/skel directory  
-of your file server. Every new account you create will have access to the menu (and the settings) you have created.  
-  
-  
-  
-----  
-  
-!!4. Preparing the boot disk  
-  
-  
-To prepare a boot disk we just want a kernel, syslinux and a 1,44MB diskette. Syslinux is tiny boot  
-loader, designed specifically to boot a kernel and pass some arguments through its command line using a diskette.  
-As we will see it very easy to configure, too.  
-  
-  
-  
-  
-!!4.1 Building a kernel  
-  
-  
-  
-Always choose the newest kernel to build. As of this time of writing (Wed Sep 12 17:28:22 2001)  
-the newest kernel is 2.4.9. Building an older kernel can only save you time updating the nesessary programms.  
-Also, be sure you have the program versions described in /usr/src/linux/Documentation/Changes.  
-It is a good idea to compile the kernel using the base system to be served. The kernel can be build according to  
-your needs of drivers, but it must contain the following options:  
-  
-  
-*Build in support for the cient 's network card (Network device support ---> Select your card driver).  
-*  
-  
-*Build in support for the BOOTP protocol (Networking options ---> IP: kernel level autoconfiguration ---> IP: BOOTP support).  
-*  
-  
-*Build in support for NFS and root over NFS (File systems ---> Network File Systems ---> NFS file system support  
-and File systems ---> Network File Systems ---> NFS file system support ---> Root over NFS).  
-  
-*  
-  
-* Build in support for loopback devices (Block devices ---> Loopback device support).  
-*  
-  
-Do not forget to compile in the VESA framebuffer driver. Then go on with the familiar kernel compilation routine.  
-Unless you have build the kernel using the base system, copy all the modules created to the base/lib/modules directory  
-of the exported directory structure.  
-The new kernel resides at /usr/src/linux/arch/i386/boot.  
-  
-  
-You also have to set the root device to your kernel. You have to use the rdev programm. Execute the following commands:  
-  
-  
-mknod /dev/boot255 c 0 255  
-rdev /path/to/kernel/file /dev/boot255  
-  
-  
-  
-!!4.2 Creating the boot disk  
-  
-  
-  
-Now, we have to use the syslinux programm. Insert a disk into the first floppy drive and run:  
-  
-  
-syslinux -s /dev/fd0  
-  
-  
-  
-  
-Mount the floppy and notice that syslinux has written 2 files: syslinux.cfg and ldlinux.sys.  
-The second is the boot loader executable. The syslinux.cfg is the programm configuration file.  
-A typical structure for that file is the following:  
-  
-  
-default linux  
-append init=/sbin/init root=/dev/nfs  
-ip=:195.251.160.10:195.251.160.254:255.255.255.:::'bootp'  
-nfsroot=195.251.160.10:/usr/local/linux/ws/\%s vga=0x318  
-prompt 1  
-timeout 30  
-readinfo 2  
-  
-  
-  
-  
-The default statment is the kernel name to be booted and the append is the command line  
-to be passed to the kernel. Now, you have to copy the kernel you have created to the floppy and rename it to 'linux'.  
-  
-  
-  
-  
-!!4.3 The kernel command line  
-  
-  
-  
-To boot a diskless client, its kernel must have the following command line options:  
-  
-  
-*init=/sbin/init: If your init programm is elsewhere just change the path.  
-*  
-  
-*root=/dev/nfs: An alias to say the kernel that it has to mount its root directory over nfs  
-*  
-  
-*ip: This command line option tells the kernel how to get it's IP address and which is the NFS server's address  
-*  
-  
-*nfsroot: Tells the kernel to mount this directory as its root. The % is an alias to the host 's IP address.  
-*  
-  
-*vga: If you want to be able to start X windows in framebuffer mode, switch to a framebuffer mode. The one given stands for 1024x768@16M colors.  
-*  
-  
-  
-  
-All these options are discussed in detail in /usr/src/linux/Documentation/nfsroot.txt.  
-Read it and adjust the given command line to your needs.  
-  
-  
-Now you have created the boot disk you are ready to test the system you have build. Start the NFS and BOOTP services and boot a  
-client with the boot disk. No one has been able to do it from the first time. So go on to the next section!  
-  
-  
-  
-----  
-  
-!!5. The magic time  
-  
-  
-In this section will be discused all the problems that you have and the changes that you propose to the installation.  
-Please feel free to email me and ask about any difficult or not mentioned points in this document.  
-My email is cs98011@icsd.aegean.gr  
-  
-  
-__Q: A DHCP is already running. How do I configure BOOTP, so as no interaction is made with the DHCP?__  
-  
-  
-__A:__ This was the main problem I faced when I installed the system on a running network. DHCP and BOOTP use the same port.  
-When a windows client boots, it issues a DHCP/BOOTP request to locate its IP (of course in case of dynamic IP). When the  
-DHCP server responds, it also returns the IP's of DNS servers, print servers and Domain Controlers. My BOOTP server was  
-responding faster than the Microsoft DHCP server, an so Windows clients were unable to locate their Domain controler. This  
-resulted to users not being able to login! The solution described here was donated by D. Spinellis.  
-  
-  
-Open the /usr/src/linux/net/ipv4 file. This is were all BOOTP autoconfiguration is done.  
-Search for udph.source,udph.dest variables. You will see that they are set to the standard 67/68  
-request/responce ports. Change BOTH values so they use an unused UDP port in your network. A good port pair that no  
-application uses it is 967/968. Now, start your DHCPd with the -p 967 option. Everything must be working OK!  
-  
-  
-  
-----  
-  
-!!6. Other Stuff  
-  
-  
-  
-  
-!!6.1 Contributors  
-  
-  
-  
-  
-  
-  
-*Diomidis Spinellis: Structure and typographical corrections, the DHCP/BOOTP conflict resolution.  
-*  
-  
-  
-!!6.2 Copyrights  
-  
-  
-  
-This document is GNU copylefted by  
-Georgios Gousios.  
-  
-  
-It is covered by the GNU documentation licence.  
-  
-  
-Permission to use, copy, distribute this document for any purpose is hereby granted, provided that the author's / editor's name and this notice appear  
-in all copies and/or supporting documents; and that an unmodified version of this document is made freely available. This document is distributed in the hope that it will be useful,  
-but WITHOUT ANY WARRANTY, either expressed or implied. While every effort has been taken to ensure the accuracy of the information documented herein, the author / editor /  
-maintainer assumes NO RESPONSIBILITY for any errors, or for any damages, direct or consequential, as a result of the use of the  
-information documented herein  
-  
-!!6.3 Contacting the author  
-  
-  
-  
-The author may be contacted via e-mail. For any change, question, error that  
-must be corrected please feel free to contact me. For every contribution you make for this  
-document, your name will be mentioned in the contributors section.  
-  
-!!6.4 Changelog  
-  
-  
-  
-  
-  
-  
-*v0.8, Thu May 24 17:37:13 2001 : First draft written.  
-*  
-  
-*v1., Fri May 25 01:36:25 2001 : The first version is complete (in HTML).  
-*  
-  
-*v1.05, Thu Jul 19 19:09:58 2001: Structure and typos corrections. Also, tranfered to LaTeX.  
-*  
-  
-*v1.1, Wed Sep 12 18:23:29 2001: Transfered to !LinuxDoc SGML, donated to the LDP.  
-*  
-  
-----  
-  
-!!7. Appendix  
-  
-  
-  
-  
-!!7.1 Appendix A - A script for creating host directories  
-  
-  
-  
-  
-  
-  
-#!/usr/bin/bash  
-#This is a script for creating host directories using the  
-#directory scheme illustrated before in this document.  
-#It is written on Solaris and I did not test it on Linux.  
-#Execute it at the ws directory.  
-#Needs as input a file containing space separeted IP  
-#addresses named addr, for example bash# ./script addr  
-#This file must be like this: 195.251.160.10 195.251.160.11 195.251.160.13 ....  
-echo "Creating the tar archive"; echo  
-cd base  
-tar cpf linux.tar ./bin ./dev ./etc ./lib ./sbin ./var  
-mv linux.tar /usr/local/linux/ws/linux.tar  
-cd ..  
-echo "Creating host directories"; echo  
-for addr in $(cat addr)  
-do  
-echo "Working on host $addr"  
-mkdir $addr  
-cd $addr  
-echo " ---Creating nessesary directores"  
-mkdir boot  
-mkdir cdrom  
-mkdir floppy  
-mkdir home  
-mkdir mnt  
-mkdir opt  
-mkdir proc  
-mkdir root  
-mkdir tmp  
-mkdir usr  
-echo " ---Extracting tar archive"  
-ln -s ../linux.tar ./linux.tar  
-tar xf linux.tar  
-rm linux.tar  
-echo " ---Removing unnessesary files"  
-rm -R ./lib/modules/*  
-rm -R ./var/yp  
-rm -R ./var/X11R6/sax  
-rm -R ./var/tmp  
-rm -R ./var/state/dhcp  
-rm -R ./var/squid  
-rm -R ./var/run/*  
-rm -R ./var/opt  
-rm -R ./var/named  
-rm -R ./var/mysql  
-rm -R ./var/lib/amanda  
-rm -R ./var/lib/codadmin  
-rm -R ./var/lib/firewall  
-rm -R ./var/lib/apsfilter  
-rm -R ./var/lib/gdm  
-rm -R ./var/lib/misc  
-rm -R ./var/lib/nobody  
-rm -R ./var/lib/pcmcia  
-rm -R ./var/lib/pgsql  
-rm -R ./var/lib/rpm/*  
-rm -R ./var/lib/setup  
-rm -R ./var/lib/wvdial  
-rm -R ./var/lib/wwwrun  
-rm -R ./var/lib/xdm  
-rm -R ./var/lib/xkb  
-rm -R ./var/lib/YaST/*  
-rm -R ./var/lib/zope  
-rm -R ./var/log/*  
-rm -R ./var/cache/*  
-rm -R ./var/games  
-rm -R ./var/adm/*  
-echo " ---Deciding the hostname"  
-nslookup $addr |sed -n "s/^Name: *//p" >etc/HOSTNAME  
-cd ..  
-i=$(($i+1))  
-echo  
-done  
-echo "Removing the tar archive"  
-rm linux.tar  
-echo  
-exit  
-  
-  
-  
-!!7.2 Appendix B - A script to create the dhcpd.conf file using arpwatch  
-  
-  
-  
-  
-  
-  
-#!/bin/bash  
-#A script that starts arpwatch, pings a range of addresses and creates an  
-#/etc/dhcpd.conf file from the output of arpwatch.  
-#The arp.dat2dhcpd.conf programm is described later.  
-#Do not forget to edit the i variable and the while statement to specify  
-#the range of the addresses you want to ping  
-i=128;  
-echo "Starting arpwatch";echo  
-arpwatch  
-while [[ "$i" -lt 253 ]  
-do  
-addr=195.251.160.$i  
-echo "Now pinging $addr"  
-ping -c 5 $addr >/dev/null  
-i=$(($i+1))  
-done  
-echo  
-exit  
-killproc arpwatch  
-echo "Creating /etc/dhcpd.conf"  
-cat /var/lib/arpwatch/arp.dat |arp.dat2dhcpd.conf >/etc/dhcpd.conf  
-  
-  
-  
-!The arp.dat2dhcpd.conf script  
-  
-  
-  
-  
-  
-#!/usr/bin/perl -n  
-($ether, $ip,$stup1,$name) = split;  
-if ($name eq "") {  
-print "  
-host host$i {  
-hardware ethernet $ether;  
-fixed-address $ip;  
-}  
-";  
-$i++;}  
-else{  
-print "  
-host $name {  
-hardware ethernet $ether;  
-fixed-address $ip;  
-}  
-"}  
-  
-  
-  
-!!7.3 Appendix C - A sample XF86Config file  
-  
-  
-  
-  
-  
-  
-#This file should let X 4..1 work in 1024x768@16M colors  
-#with the fbdev driver using the linux's framebuffer  
-Section "Files"  
-!RgbPath "/usr/X11R6/lib/X11/rgb"  
-!FontPath "/usr/X11R6/lib/X11/fonts/75dpi:unscaled"  
-!FontPath "/usr/X11R6/lib/X11/fonts/local"  
-!FontPath "/usr/X11R6/lib/X11/fonts/misc:unscaled"  
-!FontPath "/usr/X11R6/lib/X11/fonts/100dpi:unscaled"  
-!FontPath "/usr/X11R6/lib/X11/fonts/Type1"  
-!FontPath "/usr/X11R6/lib/X11/fonts/URW"  
-!FontPath "/usr/X11R6/lib/X11/fonts/Speedo"  
-!FontPath "/usr/X11R6/lib/X11/fonts/misc"  
-!FontPath "/usr/X11R6/lib/X11/fonts/75dpi"  
-!FontPath "/usr/X11R6/lib/X11/fonts/100dpi"  
-!FontPath "/usr/X11R6/lib/X11/fonts/PEX"  
-!FontPath "/usr/X11R6/lib/X11/fonts/cyrillic"  
-!FontPath "/usr/X11R6/lib/X11/fonts/latin2/misc"  
-!FontPath "/usr/X11R6/lib/X11/fonts/latin2/75dpi"  
-!FontPath "/usr/X11R6/lib/X11/fonts/latin2/100dpi"  
-!FontPath "/usr/X11R6/lib/X11/fonts/latin7/75dpi"  
-!FontPath "/usr/X11R6/lib/X11/fonts/kwintv"  
-!FontPath "/usr/X11R6/lib/X11/fonts/truetype"  
-!FontPath "/usr/X11R6/lib/X11/fonts/uni"  
-!FontPath "/usr/X11R6/lib/X11/fonts/ucs/misc"  
-!FontPath "/usr/X11R6/lib/X11/fonts/ucs/75dpi"  
-!FontPath "/usr/X11R6/lib/X11/fonts/ucs/100dpi"  
-!FontPath "/usr/X11R6/lib/X11/fonts/xtest"  
-!EndSection  
-Section "!ServerFlags"  
-!AllowMouseOpenFail  
-!EndSection  
-Section "Module"  
-!EndSection  
-# This section is no longer supported  
-# See a template below  
-# Section "XInput"  
-# !EndSection  
-Section "Keyboard"  
-Protocol "Standard"  
-!XkbRules "xfree86"  
-!XkbModel "microsoft"  
-!XkbLayout "us"  
-!EndSection  
-Section "Pointer"  
-Protocol "PS/2"  
-Device "/dev/psaux"  
-!SampleRate 60  
-!BaudRate 1200  
-Buttons 5  
-!EndSection  
-Section "Monitor"  
-Identifier "Primary-Monitor"  
-!VendorName "Unknown"  
-!ModelName "Unknown"  
-!HorizSync 29-64  
-!VertRefresh 47-90  
-Modeline "1400x1050" 59.93 1400 1416 1704 1816 1050 1050 1055 1097  
-Modeline "1280x960" 59.90 1280 1296 1552 1664 960 960 965 1003  
-Modeline "1600x1000" 59.90 1600 1616 1968 2080 1000 1000 1004 1044  
-Modeline "1024x864" 59.89 1024 1040 1216 1328 864 864 870 902  
-Modeline "800x600" 58.55 800 816 928 1040 600 600 608 626  
-Modeline "1152x864" 59.99 1152 1168 1384 1496 864 864 870 902  
-Modeline "1280x1024" 59.90 1280 1296 1552 1664 1024 1024 1029 1070  
-Modeline "640x480" 37.44 640 656 720 832 480 480 486 501  
-Modeline "1024x768" 59.89 1024 1040 1216 1328 768 768 774 802  
-Modeline "1600x1200" 59 .90 1600 1616 1968 2080 1200 1200 1204 1253  
-!EndSection  
-Section "Device"  
-Identifier "Primary-Card"  
-!VendorName "---AUTO DETECTED---"  
-!BoardName "---AUTO DETECTED---"  
-!EndSection  
-Section "Screen"  
-Driver "fbdev"  
-Device "Primary-Card"  
-Monitor "Primary-Monitor"  
-!DefaultColorDepth 16  
-!SubSection "Display"  
-Depth 32  
-Modes "default"  
-!EndSubSection  
-!SubSection "Display"  
-Depth 24  
-Modes "default"  
-!EndSubSection  
-!SubSection "Display"  
-Depth 16  
-Modes "default"  
-Virtual 1024 768  
-!EndSubSection  
-!SubSection "Display"  
-Depth 8  
-Modes "default"  
-!EndSubSection  
-!EndSection  
-Section "Screen"  
-Driver "fbdev"  
-Device "Primary-Card"  
-Monitor "Primary-Monitor"  
-!DefaultColorDepth 16  
-!SubSection "Display"  
-Depth 32  
-Modes "default"  
-!EndSubSection  
-!SubSection "Display"  
-Depth 24  
-Modes "default"  
-!EndSubSection  
-!SubSection "Display"  
-Depth 16  
-Modes "default"  
-Virtual 1024 768  
-!EndSubSection  
-!SubSection "Display"  
-Depth 8  
-Modes "default"  
-!EndSubSection  
-!EndSection  
-  
-  
-  
-  
-  
-----  
+Describe [HowToDisklessrootNFSotherHOWTO ] here.