Differences between current version and predecessor to the previous major change of HowToDisklessrootNFSHOWTO.
Other diffs: Previous Revision, Previous Author, or view the Annotated Edit History
Newer page: | version 3 | Last edited on Monday, October 25, 2004 5:16:10 am | by AristotlePagaltzis | |
Older page: | version 2 | Last edited on Friday, June 7, 2002 1:06:29 am | by perry | Revert |
@@ -1,1394 +1 @@
-
-
-
-Root over nfs clients & server Howto.
-
-
-
-----
-
-!!!Root over nfs clients & server Howto.
-
-!!Hans de Goede
-hans@highrise.nl
-v1.0 30 March 1999
-
-
-----
-''Howto setup a server and configure clients for diskless operation from
-a network.
-''
-----
-
-
-
-
-!!1. Introduction
-
-
-*1.1 Copyright
-
-*1.2 Changelog
-
-
-
-
-
-!!2. Basic principle
-
-
-*2.1 Things can't be that simple
-
-
-
-
-
-!!3. Preparing the server
-
-
-*3.1 Building a kernel
-
-*3.2 Creating and populating /tftpboot, making symlinks for /tmp etc.
-
-*3.3 Exporting the appropriate file systems and setting up bootp
-
-
-
-
-
-!!4. Adding workstations
-
-
-*4.1 Creating a boot disk or bootrom
-
-*4.2 Creating a ws dir
-
-*4.3 Add entries to /etc/bootptab and /etc/hosts
-
-*4.4 Booting the ws for the first time
-
-*4.5 Set the ws specific configuration.
-
-
-
-
-
-!!5. Added bonus: booting from cdrom
-
-
-*5.1 Basic Principle
-
-*5.2 Creating a test setup.
-
-*5.3 Creating the cd
-
-*5.4 Boot the cd and test it
-
-
-
-
-
-!!6. Thanks
-
-
-
-
-!!7. Comments
-----
-
-!!1. Introduction
-
-
- This howto is also available at -
-http://xmame.retrogames.com/hans.
-This document describes a setup for nfs over root. This document differs
-from the other root over nfs howto's in 2 ways:
-
-
-
-
-
-#It describes both the server and the client side offering a complete solution,
-it doesn't desribe the generic principles off root over nfs although they will
-become clear. Instead it offers a working setup for root over nfs. One of the
-many possible setup's I might add.
-#
-
-#This solution is unique in that it shares the root of the server with the
-workstations (ws). Instead of having a mini-root per ws. This has a number
-of advantages:
-
-
-#*low diskspace usage
-#*
-
-#*any changes on the serverside are also automagicly made at the client side,
-all configuration has only to be done once!
-#*
-
-#*Very easy adding of new clients
-#*
-
-#*only one system to maintain
-#*
-
-
-#
-
-
-
-This document is heavily based on a !RedHat-5.2 system. Quite a bit of prior
-linux sysadmin experience is assumed in this howto, if you have that it shouldn't
-be a problem to addept this solutions to other distributions.
-
-!!1.1 Copyright
-
-
-
-Well
here's the standard howto legal stuff:
-
-
-This manual may be reproduced and distributed in whole or in part, without
-fee, subject to the following conditions:
-
-
-
-
-
-*The copyright notice above and this permission notice must be preserved
-complete on all complete or partial copies.
-*
-
-*Any translation or derived work must be approved by the author in writing
-before distribution.
-*
-
-*If you distribute this work in part, instructions for obtaining the complete
-version of this manual must be included, and a means for obtaining a complete
-version provided.
-*
-
-*Small portions may be reproduced as illustrations for reviews or quotes
-in other works without this permission notice if proper citation is given.
-
-*
-
-
-
-Exceptions to these rules may be granted for academic purposes: Write to
-the author and ask. These restrictions are here to protect us as authors, not
-to restrict you as learners and educators.
-
-!!1.2 Changelog
-
-
-
-
-
-
-*v0.1, 20 January 1999: First draft written at the HHS, where the setup
-was originally developed.
-*
-
-*v1., 30 March 1999: First released version partially written in time of
-ISM
-*
-
-----
-
-!!2. Basic principle
-
-
-As already said with this setup the clients share basicly the entire root-fs
-with the server. But the clients ofcourse only get read access to it. This
-is basicly how things work.
-
-!!2.1 Things can't be that simple
-
-
-
-Unfortunatly things aren't that simple, there are a couple of problems
-the overcome with this simple setup.
-
-!Each ws needs its own writable copy of a number of dirs
-
-
-A normal linux setup needs to have write access to the following dirs:
-
-
-
-
-
-#/dev
-#
-
-#/var
-#
-
-#/tmp
-#
-
-
-
-There are 3 solutions for this, of which one will only work for /dev:
-
-
-
-
-
-#mount a ramdisk and populate it by untarring a tarball, or by copying a
-template dir.
-
-
-#*Advantages:
-
-
-#*#It's cleaned up every reboot, which removes tmp files and logs. Thus it
-needs no maintaince unlike server sided dirs.
-#*#
-
-#*#It doesn't take up any space on the server, and that it doesn't generate
-any network traffic. A ramdisk takes less server and network resources, and
-is faster.
-#*#
-
-
-#*
-
-#*Disadvantages:
-
-
-#*#It takes memory.
-#*#
-
-#*#The logs aren't kept after a reboot, if you really want logging of all
-your clients tell syslog to redirect the logging to your server.
-#*#
-
-
-#*
-
-
-#
-
-#create a dir for each ws on the server and mount it rw over nfs.
-
-
-#*Advantages & disadvantages:
-
-
-#*#The above arguments work in reverse for serversided dirs.
-#*#
-
-
-#*
-
-
-#
-
-#With kernel 2.2 devfs can be used for /dev, this is a virtual filesystem
-ala /proc for /dev.
-
-
-#*Advantages:
-
-
-#*#Devfs takes very little memory when compared to a ramdisk / no diskspace
-on the server and is very fast. A normal /dev takes at least 1.5 mb since the
-minimal size for a file (and thus for a device) is 1k, and there are somewhere
-around 1200 devices. You can offcourse use a template of a stripped /dev with
-only the entries you need to save some space. 1.5 Mb is a lott for a ramdisk
-and also isn't nice on a server.
-#*#
-
-#*#Devfs automagicly creates entries for newly added & detected devices,
-so no maintainance is needed.
-#*#
-
-
-#*
-
-#*Disadvantages:
-
-
-#*#Any changes to /dev like creating symlinks for the mouse and cdrom are
-lost. Devfs comes with a script called rc.devfs to save these chances. The
-script's provided in this howto will automagicly restore these symlinks settings
-by calling rc.devfs If you make any changes to /dev you need to call the rc.devfs
-yourself to save them by typing:
-#*#
-
-
-/etc/rc.d/rc.devfs save /etc/sysconfig
-
-
-#*
-
-
-#
-
-
-
-As you can see, there are a number of ways to solve this problem. For the
-rest of this Howto the following choices are assumed:
-
-
-
-
-
-*For /dev we'll use Devfs
-*
-
-*For /var and /tmp we'll use a shared ramdisk of 1mb. It's shared to use
-the space as effeciently as possible. /tmp is replaced by a symlink to /var/tmp
-to make the sharing possible.
-*
-
-*Populating the ramdisk with tarballs or template dirs, works equally well.
-But with template dirs it's much easier to make changes, thus we'll use template
-dirs.
-*
-
-
-!Write access to /home might be needed
-
-
-Not really a problem in every unix client/server setup /home is mounted
-rw from the server so we'll just do that ;)
-
-!How does a ws find out it's ip so that it can communicate with the server?
-
-
-Luckily for us, this problem has already been solved and the linux kernel
-has support for 2 ways of autoconfiguration of the ip-address:
-
-
-
-
-
-#RARP
-#
-
-#Bootp
-#
-
-
-
-Rarp is the easiest to setup, bootp is the most flexible. Since most bootroms
-only support bootp that's what we'll use.
-
-!What about ws sepecific configuration
-
-
-On redhat most system dependent config files are already in /etc/sysconfig
-We'll just move those which aren't there and add symlinks. Then we mount a
-seperate /etc/sysconfig on a per ws basis. This is really the only distribution
-dependent part on other distributions you can just create a sysconfig dir,
-move all config files which can't be shared there and create symlinks. Also
-/etc/rc.d/rc3.d, or symilar on other dists, might need to be different for
-the server resp the workstations. Assuming that all ws run the same services
-in runlevel 3, we'll just create a seperate 3th runlevel for the workstations
-and the server:
-
-
-
-
-
-#Create both a /etc/rc.d/rc3.ws and a /etc/rc.d/rc3.server
-#
-
-#make /etc/rc.d/rc3.d a symlink to /etc/sysconfig/rc3.d
-#
-
-#make /etc/sysconfig/rc3.d a symlink to the apropiate /etc/rc.d/rc3.xxx
-#
-
-#replace S99local in rc3.ws by a link to /etc/sysconfig/rc.local so that
-each ws can have it's own rc.local
-#
-
-
-!Miscelancious problems
-
-
-There are a few problems left:
-
-
-
-
-
-#/etc/rc.d/rc.sysinit needs /var, so /var needs to be mounted or created
-before /etc/rc.d/rc.sysinit is run. It would also be nice if the ws-specific
-/etc/sysconfig is mounted before any initscripts are run.
-
-
-#*We'll just source a bootup script for the ws in the very top of /etc/rc.d/rc.sysinit.
-Note this script will then ofcourse also be sourced by the server itself on
-boot, so the script has to detect this and do nothing on the server.
-#*
-
-
-#
-
-#/etc/mtab needs to be writable:
-
-
-#*This is a tricky one, just create a link to /proc/mounts and create an
-empty file mounts in /proc so that fsck and mount don't complain during the
-initscripts when /proc isn't mounted yet. One note smb(u)mount doesn't respect
-mtab being a link and overwrites it. Thus if you want to use smb(u)mount create
-wrapper scripts that restore the symlink.
-#*
-
-
-#
-
-----
-
-!!3. Preparing the server
-
-
-Now it's time to prepare the server to serve diskless clients.
-
-!!3.1 Building a kernel
-
-
-
-The first thing todo is build a kernel with the nescesarry stuff in to
-support root over nfs. Take the following steps to build your kernel:
-
-
-
-
-
-#Since we'll be using redhat-5.2 with kernel-2.2 you should asure yourself
-that your redhat-5.2 is kernel-2.2 ready. !RedHat has got an excellent howto
-on this.
-#
-
-#I use the same kernel for both server and ws, to avoid module conflicts
-since they share the same /lib/modules. If this is not possible in your situation,
-fake different kernel versions by editing the version number in the kernel's
-top makefile. These different versionsnumbers will avoid any conflicts.
-#
-
-#Besides the usual stuff the kernel should have the following:
-
-
-#*ext2 compiled in (if used on server, or for both)
-#*
-
-#*nfs and root-over-nfs compiled in (if used on client or both), to get the
-nfs over root option in 2.2 enable ip-autoconfig in the network options. We'll
-use bootp as configuration method.
-#*
-
-#*ws networkcard support compiled in (if used on client or both)
-#*
-
-#*compile devfs in (required for client, also nice for server)
-#*
-
-#*anything else you normally use, modules for all other devices used on either
-the server or all / some ws etc.
-#*
-
-
-#
-
-#The kernel-src needs to be edited to make the default root-over-nfs mount:
-/tftpboot/<ip>/root instead of just /tftpboot/<ip>. This is to
-get a clean tree in /tftpboot with one dir per ws containing both the root
-for it (a link to the actual server root) and any ws specific dirs.
-
-
-#*For 2.0 This is a define in: "include/linux/nfs_fs.h" called
-"NFS_ROOT"
-#*
-
-#*For 2.2 This is a define in: "fs/nfs/nfsroot.c"
-#*
-
-
-#
-
-#Now just compile the kernel as usual, see the kernel-howto.
-#
-
-#If you don't have /dev/nfsroot yet, create it by typing:
-
-mknod /dev/nfsroot b 0 255.
-
-
-#
-
-#After compiling the kernel set the root to nfsroot by typing:
-
-rdev <path-to-zImage>/zImage /dev/nfsroot
-
-
-#
-
-#Before booting with devfs you need to make a few changes to /etc/conf.modules,
-append the contents of the conf.modules in the devfs documentation to it.
-#
-
-#Since this new kernel is compiled for autoconfig of ip's it will try to
-autoconf the ip of the server during bootup. Which ofcourse will fail since
-it gives out the ip's. To avoid a long timeout add: append="ip=off"
-To the linux section of /etc/lilo.conf.
-#
-
-#Run lilo and boot the new kernel.
-#
-
-#Due to devfs you'll have lost all symlinks on the server. With redhat this
-is usually /dev/mouse and /dev/cdrom. Recreate these. If you also used to use
-special ownerships, chown to appropiate files in /dev. Now save the /dev settings
-(in /etc/sysconfig, since they might be ws specific):
-
-
-#*Copy rc.devfs from the devfs documentation in the kernel source to /etc/rc.d/rc.devfs
-and make it executable
-#*
-
-#*Save the settings by typing:
-
-/etc/rc.d/rc.devfs save /etc/sysconfig
-
-
-#*
-
-
-#
-
-
-!!3.2 Creating and populating /tftpboot, making symlinks for /tmp etc.
-
-
-
-The next step is to create and populate /tftpboot
-
-!The automagic part
-
-
-This is all handled by a big script since putting a long list of commands
-into this howto seemed pretty useless to me. If you want todo this manual just
-read the script and type it in as you go ;)
-
-
-This setup script thus some nasty things like nuke /tmp, temporary kill
-syslog, umount /proc. So make sure that noone is using the machine during this,
-and that X isn't running. Just making sure your the only one logged in on a
-text-console is enough, no need to change runlevels.
-
-
-DISCLAIMER: this script has been tested but nevertheless if it messes up
-your server your on your own. I can take no responsibility what so ever. Lett
-me repeat this howto is only for experienced linux sysadmins. Also this is
-script is designed to be run once and I really mean once. Running it twice
-will nuke: /etc/fstab, /etc/X11/XF86Config, /etc/X11/X and /etc/conf.modules.
-
-
-Now with that said, just cut and paste the script make it executable, execute
-it and pray to the holy penguin that it works ;)
-
-
-
-----
-
-#!/bin/sh
-SERVER_NAME=`hostname -s`
-###
-echo creating /etc/rc.d/rc.ws
-#this basicly just echos the entire script ;)
-echo "#root on nfs stuff
-SERVER=$SERVER_NAME
-#we need proc for mtab, route etc
-mount -t proc /proc /proc
-IP=\`ifconfig eth0|grep inet|cut --field 2 -d ':'|cut --field 1 -d ' '\`
-#if the first mount fails we're probably the server, or atleast something is
-#pretty wrong, so only do the other stuff if the first mount succeeds
-mount \$SERVER:/tftpboot/\$IP/sysconfig /etc/sysconfig -o nolock &&
-{
-#other mounts
-mount \$SERVER:/home /home -o nolock
-mount \$SERVER:/ /\$SERVER -o ro,nolock
-#/var
-echo Creating /var ...
-mke2fs -q -i 1024 /dev/ram1 1024
-mount /dev/ram1 /var -o defaults,rw
-cp -a /tftpboot/var /
-#network stuff
-. /etc/sysconfig/network
-HOSTNAME=\`cat /etc/hosts|grep \$IP|cut --field 2\`
-route add default gw \$GATEWAY
-ifup lo
-}
-#restore devfs settings
-/etc/rc.d/rc.devfs restore /etc/sysconfig
-umount /proc" > /etc/rc.d/rc.ws
-###
-echo splitting runlevel 3 for the client and server
-mv /etc/rc.d/rc3.d /etc/rc.d/rc3.server
-cp -a /etc/rc.d/rc3.server /etc/rc.d/rc3.ws
-rm /etc/rc.d/rc3.ws/*network
-rm /etc/rc.d/rc3.ws/*nfs
-rm /etc/rc.d/rc3.ws/*nfsfs
-rm /etc/rc.d/rc3.ws/S99local
-ln -s /etc/sysconfig/rc.local /etc/rc.d/rc3.ws/S99local
-ln -s /etc/rc.d/rc3.server /etc/sysconfig/rc3.d
-ln -s /etc/sysconfig/rc3.d /etc/rc.d/rc3.d
-###
-echo making tmp a link to /var/tmp
-rm -fR /tmp
-ln -s var/tmp /tmp
-###
-echo moving various files around and create symlinks for them
-echo mtab
-/etc/rc.d/init.d/syslog stop
-umount /proc
-touch /proc/mounts
-mount /proc
-/etc/rc.d/init.d/syslog start
-rm /etc/mtab
-ln -s /proc/mounts /etc/mtab
-echo fstab
-mv /etc/fstab /etc/sysconfig
-ln -s sysconfig/fstab /etc/fstab
-echo X-config files
-mkdir /etc/sysconfig/X11
-mv /etc/X11/X /etc/sysconfig/X11
-ln -s ../sysconfig/X11/X /etc/X11/X
-mv /etc/X11/XF86Config /etc/sysconfig/X11
-ln -s ../sysconfig/X11/XF86Config /etc/X11/XF86Config
-echo conf.modules
-mv /etc/conf.modules /etc/sysconfig
-ln -s sysconfig/conf.modules /etc/conf.modules
-echo isapnp.conf
-mv /etc/isapnp.conf /etc/sysconfig
-ln -s sysconfig/isapnp.conf /etc/isapnp.conf
-###
-echo creating a template dir for the ws directories
-echo /tftpboot/template
-mkdir /home/tftpboot
-ln -s home/tftpboot /tftpboot
-mkdir /tftpboot/template
-mkdir /$SERVER_NAME
-echo root
-ln -s / /tftpboot/template/root
-echo sysconfig
-cp -a /etc/sysconfig /tftpboot/template/sysconfig
-rm -fR /tftpboot/template/sysconfig/network-scripts
-ln -s /$SERVER_NAME/etc/sysconfig/network-scripts \
-/tftpboot/template/sysconfig/network-scripts
-echo NETWORKING=yes > /tftpboot/template/sysconfig/network
-echo `grep "GATEWAY=" /etc/sysconfig/network` >> /tftpboot/template/sysconfig/network
-echo "/dev/nfsroot / nfs defaults 1 1" > /tftpboot/template/sysconfig/fstab
-echo "none /proc proc defaults 0 " >> /tftpboot/template/sysconfig/fstab
-echo "#!/bin/sh" > /tftpboot/template/sysconfig/rc.local
-chmod 755 /tftpboot/template/sysconfig/rc.local
-rm /tftpboot/template/sysconfig/rc3.d
-ln -s /etc/rc.d/rc3.ws /tftpboot/template/sysconfig/rc3.d
-rm /tftpboot/template/sysconfig/isapnp.conf
-echo var
-cp -a /var /tftpboot/var
-rm -fR /tftpboot/var/lib
-ln -s /$SERVER_NAME/var/lib /tftpboot/var/lib
-rm -fR /tftpboot/var/catman
-ln -s /$SERVER_NAME/var/catman /tftpboot/var/catman
-rm -fR /tftpboot/var/log/httpd
-rm -f /tftpboot/var/log/samba/*
-for i in `find /tftpboot/var/log -type f`; do cat /dev/null > $i; done
-rm `find /tftpboot/var/lock -type f`
-rm `find /tftpboot/var/run -type f`
-echo /sbin/fsck.nfs
-echo "#!/bin/sh
-exit " > /sbin/fsck.nfs
-chmod 755 /sbin/fsck.nfs
-echo all done
-
-----
-
-!Manual adjustments to some files
-
-
-Now we need to make a few manual adjustments to the server:
-
-
-
-
-
-#The ws setup script has to be sourced at the very beginning of rc.sysinit,
-so add the following lines directly after setting the PATH:
-----
-
-#for root over nfs workstations.
-/etc/rc.d/rc.ws
-
-----
-
-#
-
-#Strip /etc/rc.d/rc3.ws to a bare minimum. It might be useful to create
-something like rc.local.ws but I'll leave that up to you. Network and nfsfs
-are already setup.The following have been already removed / updated by the
-automagic script:
-
-
-#*network
-#*
-
-#*nfsfs
-#*
-
-#*nfs
-#*
-
-#*rc.local
-#*
-
-
-#
-
-
-!!3.3 Exporting the appropriate file systems and setting up bootp
-
-
-
-The server must ofcourse export the appropriate filesystems and asign the
-ip addresses to the clients.
-
-!Exporting the appropriate file systems
-
-
-We need to export some dir's for the workstations so for the situation
-here at the university I would add the following to /etc/exports:
-
-
-
-----
-
-/ *.st.hhs.nl(ro,no_root_squash)
-/home *.st.hhs.nl(rw,no_root_squash)
-
-----
-
-
-Ofcourse use the apropriate domain ;) and restart nfs by typing:
-
-
-
-
-/etc/rc.d/init.d/nfs restart
-
-
-
-Note for knfsd users: knfsd doesn't allow you to have multiple exports
-on one partition with different permissions. Also knfsd doesn't allow clients
-to go past partition boundaries for example if a client mounts / and /usr is
-a different partition it won't have access to /usr. Thus if you use knfsd,
-at least /home should be on a different partition, the server prepare script
-already puts /tftpboot in /home so that doesn't need a seperate partition.
-If you've got any other partitions your clients should have access to export
-them seperatly and add mount commands for them to /etc/rc.d/rc.ws.
-
-!Setting up bootp
-
-
-
-
-
-#If bootp isn't installed yet install it. It comes with !RedHat.
-#
-
-#Edit /etc/inetd.conf and uncomment the line beginning with bootps, if you
-want to use a bootprom uncomment tftp while your at it.
-#
-
-#Restart inetd by typing:
-
-/etc/rc.d/init.d/inetd restart
-
-
-#
-
-----
-
-!!4. Adding workstations
-
-
-Now that the server is all done, we can start adding workstations.
-
-!!4.1 Creating a boot disk or bootrom
-
-
-
-You'll need ot create a bootrom and / or a bootdisk to boot your workstation.
-
-!Creating a bootdisk
-
-
-Even if you wish to use a bootrom its wise to first test with a bootdisk,
-to create a boot disk just type:
-
-
-
-
-dd if=/<path-to-zImage>/zImage of=/dev/fd0
-
-
-!Creating a bootrom
-
-
-There are a few free package's out there to create bootroms:
-
-
-
-
-
-#netboot, this is IMHO the most complete free package out there. It uses
-standard dos packet drivers so allmost all cards are supported. One very usefull
-hint I got on there mailing list was to pklite the packetdrivers since some
-commercial drivers are to big to fit into the bootrom. Netboot's documentation
-is complete enough, so I won't waste any time reproducing it here, it should
-be more then sufficient to create a bootrom and boot a ws with it. Netboot's
-webpage is: http://www.han.de/~gero/netboot/
-#
-
-#etherboot, this is the other free package out there it has got a few nice
-features like dhcp support, but has limited driver support as it uses its own
-driver format. I haven't used this so I really can't give anymore usefull info.
-Etherboot's webpage is: http://www.slug.org.au/etherboot/
-#
-
-
-
-About the roms themselves. Most cards take ordinary eproms with an 28 pins
-dip housing. These eproms come in size upto 64kB. For most cards you'll need
-32kB eproms with netboot. Some cards drivers will fit into 16kB but the price
-difference of the eproms is minimal. These eproms can be burned with any ordinairy
-eprom burner.
-
-!!4.2 Creating a ws dir
-
-
-
-Just copy over the template by typing:
-
-
-
-
-cd /tftpbootcp -a template <ip>
-
-
-
-You could of course also copy over the dir of a workstation with identical
-mouse, graphicscard and monitor and ommit the configuration in step 5.4.
-
-!!4.3 Add entries to /etc/bootptab and /etc/hosts
-
-
-
-Edit /etc/bootptab and add an entry for your test ws, an example entry
-is:
-
-
-
-----
-
-nfsroot1:hd=/tftpboot:vm=auto:ip=10...237:\
-:ht=ethernet:ha=00201889EE78:\
-:bf=bootImage:rp=/tftpboot/10...237/root
-
-----
-
-
-Replace nfsroot1 by the hostname you want your ws to have. Replace 10...237
-by the ip you want your ws to have (do this twice) and replace 00201889EE78
-by the MAC-ADDRESS of your ws. If you don't know the MAC-ADDRESS of the ws,
-just boot it with the just created boot disk and look for the MAC-ADDRESS in
-the boot messages. There's a chance bootpd is already running so just to make
-sure try to restart it by typing:
-
-
-
-
-killall -HUP bootpd
-
-
-
-Don't worry if it fails, that just means it wasn't running, inetd will
-start it when asked too.
-
-!!4.4 Booting the ws for the first time
-
-
-
-Just boot the ws from the bootdisk. This should get you a working ws in
-textmode, with the exact same setup as your server except for the ip-nr and
-the running services. Even if you want to use a bootprom it's wise to first
-test with the bootdisk, if that works you can try to boot with the bootrom
-see the bootroms documentation for more info.
-
-!!4.5 Set the ws specific configuration.
-
-
-
-Now it's time to configure any ws specific settings:
-
-
-
-
-
-#First off all to get the mouse working, just run mouseconfig. To apply
-the changes, and check that the mouse works type:
-
-/etc/rc.d/init.d restart
-
-
-#
-
-#Run Xconfigurator, when Xconfigurator has probed the card and you can press
-ok don't! Since we have moved the symlink for the Xserver from /etc/X11/X to
-/etc/sysconfig/X11/X Xconfigurator will fail to create the proper link. Thus
-to make sure the rest of Xconfigurator goes well, switch to another console
-and create the link in /etc/sysconfig/X11 to the advised server. Now just finish
-Xconfigurator and test X.
-#
-
-#Configure anything else which is different then the server / template:
-
-
-#*sound: You probaly need to modify isapnp.conf and conf.modules, both are
-already made links to /etc/sysconfig by the server setup script.
-#*
-
-#*cdrom: Link in /dev, entry in /etc/fstab? etc.
-#*
-
-#*rc.local: Make any nescesarry changes.
-#*
-
-
-#
-
-#Save the links and any other changes to /dev type:
-
-/etc/rc.d/rc.devfs save /etc/sysconfig
-
-
-#
-
-#All done.
-#
-
-----
-
-!!5. Added bonus: booting from cdrom
-
-
-Much of the above also goes for booting from cdrom. Since I wanted to document
-howto boot from cdrom anyway, I document it in here to avoid typing a lott
-of the same twice.
-
-
-Why would one want to boot a machine from cd-rom? Booting from cdrom is
-interesting everywhere where one wants to run a very specific application,
-like a kiosk, a library database program or an intenet cafe, and one doesn't
-have a network or a server to use a root over nfs setup.
-
-!!5.1 Basic Principle
-
-
-
-The basic principle is wants again simple, boot with a cdrom as root. To
-make this possible we'll use the rockridge extension to put a unix like filesystem
-on a cd and the Eltorito extension to make cd's bootable.
-
-!Things can't be that simple
-
-
-Ofcourse this setup also has a few problems. most are the same as above:
-
-
-
-
-
-#We'll need write access to: /dev, /var & /tmp.
-
-
-#*We'll just use the same solutions as with root over nfs (see above):
-
-
-#**For /dev we'll use Devfs
-#**
-
-#**For /var and /tmp we'll use a shared ramdisk of 1mb. It's shared to use
-the space as effeciently as possible. /tmp is replaced by a symlink to /var/tmp
-to make the sharing possible.
-#**
-
-#**Populating the ramdisk with tarballs or template dirs, works equally well.
-But with template dirs it's much easier to make changes, thus we'll use template
-dirs.
-#**
-
-
-#*
-
-
-#
-
-#Some apps need write access to /home.
-
-
-#*Put the homedir of the user's who will be running the application in /var,
-and populate it wiht the rest of /var every boot.
-#*
-
-
-#
-
-#/etc/mtab needs to be writable:
-
-
-#*Create a link to /proc/mounts and create an empty file mounts in /proc,
-see above.
-#*
-
-
-#
-
-
-!!5.2 Creating a test setup.
-
-
-
-Now that we know what we want todo and how, it's time to create a test
-setup:
-
-
-
-
-
-#For starters just take one of the machines which you want to use and put
-in a big disk and a cd-burner.
-#
-
-#Install your linux of choice on this machine, and leave a 650mb partition
-free for the test setup. This install will be used to make the iso-image and
-to burn the cd's from, so install the nescesarry tools. It will also be used
-to restore any booboo's which leave the test setup unbootable.
-#
-
-#On the 650 mb partition install your linux of choice with the setup you
-want to have on the cd, this will be the test setup
-#
-
-#Boot the test setup.
-#
-
-#Compile a kernel as described in Section 3.1, follow all the steps, the
-changes need for devfs are still needed! At step 3 of Section 3.1 put in the
-following:
-
-
-#*isofs compiled in
-#*
-
-#*devfs compiled in
-#*
-
-#*cdrom support compiled in
-#*
-
-#*everything else you need either compiled in or as module.
-#*
-
-
-#
-
-#Configure the test setup:
-
-
-#*Create the user which we'll be running the application.
-#*
-
-#*Put it's homedir in /var.
-#*
-
-#*Install the application if needed.
-#*
-
-#*Configure the application if needed.
-#*
-
-#*Configure the user so that the application is automagicly run after login.
-#*
-
-#*Configure linux so that it automaigcly logs in the user.
-#*
-
-#*Configure anything else which needs configuring.
-#*
-
-
-#
-
-#Test that the test setup automagicly boots into the apllication and everything
-works.
-#
-
-#Boot the main install and mount the 650 mb partition on /test of the main
-install.
-#
-
-#Put the following in a file called /test/etc/rc.d/rc.iso, this file we'll
-be sourced at the begining of rc.sysinit to create /var
-----
-
-#/var
-echo Creating /var ...
-mke2fs -q -i 1024 /dev/ram1 1024
-mount /dev/ram1 /var -o defaults,rw
-cp -a /lib/var /
-#restore devfs settings, needs proc
-mount -t proc /proc /proc
-/etc/rc.d/rc.devfs restore /etc/sysconfig
-umount /proc
-
-----
-
-#
-
-#Edit /test/etc/rc.sysinit comment the lines we're the root is remounted
-rw and add the following 2 lines directly afer setting the PATH:
-----
-
-#to boot from cdrom
-. /etc/rc.d/rc.iso
-
-----
-
-#
-
-#Copying the following to a script and executing it, this wil create a template
-for /var and make /tmp and /etc/mtab links.
-----
-
-#!/bin/sh
-echo tmp
-rm -fR /test/tmp
-ln -s var/tmp /test/tmp
-###
-echo mtab
-touch /test/proc/mounts
-rm /test/etc/mtab
-ln -s /proc/mounts /test/etc/mtab
-###
-echo var
-mv /test/var/lib /test/lib/var-lib
-mv /test/var /test/lib
-mkdir /test/var
-ln -s /lib/var-lib /test/lib/var/lib
-rm -fR /test/lib/var/catman
-rm -fR /test/lib/var/log/httpd
-rm -f /test/lib/var/log/samba/*
-for i in `find /test/lib/var/log -type f`; do cat /dev/null > $i; done
-rm `find /test/lib/var/lock -type f`
-rm `find /test/lib/var/run -type f`
-
-----
-
-#
-
-#Remove the creation of /etc/issue* from /test/etc/rc.local it will only
-fail.
-#
-
-#Now boot the test partition again, it will be read only just like a cdrom.
-If something doesn't work reboot to the working partition fix it, try again
-etc. Or you could remount / rw ,fix it then reboot straight into to test partition
-again. To remount / rw type:
-
-mount -o remount,rw /
-
-
-#
-
-
-!!5.3 Creating the cd
-
-
-!Creating a boot image
-
-
-First of all boot into the workign partition. To create a bootable cd we'll
-need an image of a bootable floppy. Just dd-ing a zimage doesn't work since
-the loader at the beginning of the zimage doesn't seem to like the fake floppydrive
-a bootable cd creates. So we'll use syslinux instead.
-
-
-
-
-
-#Get boot.img from a redhat cd
-#
-
-#Mount boot.img somewhere through loopback by typing:
-
-mount boot.img somewhere -o loop -t vfat
-
-
-#
-
-#Remove everything from boot.img except for:
-
-
-#*ldlinux.sys
-#*
-
-#*syslinux.cfg
-#*
-
-
-#
-
-#Cp the kernel-image from the test partition to boot.img.
-#
-
-#Edit syslinux.cfg so that it contains the following, ofcourse replace zImage
-by the appropiote image name:
-----
-
-default linux
-label linux
-kernel zImage
-append root=/dev/<insert your cdrom device here>
-
-----
-
-#
-
-#Umount boot.img:
-
-umount somewhere
-
-
-#
-
-#If your /etc/mtab is a link to /proc/mounts umount won't automagicly free
-/dev/loop0 so free it by typing:
-
-losetup -d /dev/loop0
-
-
-#
-
-
-!Creating the iso image
-
-
-Now that we have the boot image and an install that can boot from a readonly
-mount it's time to create an iso image of the cd:
-
-
-
-
-
-#Copy boot.img to /test
-#
-
-#Cd to the directory where you want to store the image make sure it's on
-a partition with enough free space.
-#
-
-#Now generate the image by typing:
-
-mkisofs -R -b boot.img -c boot.catalog -o boot.iso /test
-
-
-#
-
-
-!Verifying the iso image
-
-
-
-
-
-#Mounting the image throug the loopbackdevice by typing:
-
-mount boot.iso somewhere -o loop -t iso9660
-
-
-#
-
-#Now verify that the contents is ok.
-#
-
-#Umount boot.iso:
-
-umount somewhere
-
-
-#
-
-#If your /etc/mtab is a link to /proc/mounts umount won't automagicly free
-/dev/loop0 so free it by typing:
-
-losetup -d /dev/loop0
-
-
-#
-
-
-!Writing the actual cd
-
-
-Assuming that you've got cdrecord installed and configured for your cd-writer
-type:
-
-
-
-
-cdrecord -v speed=<desired writing speed> dev=<path to your writers
-generic scsi device> boot.iso
-
-
-!!5.4 Boot the cd and test it
-
-
-
-Well the title of this paragraph says it all ;)
-----
-
-!!6. Thanks
-
-
-
-
-
-*The HHS (Haagse Hoge School) a dutch college where I first developed and
-tested this setup for use in a couple of labs. And where the initial version
-of this HOWTO was written.
-*
-
-*ISM a dutch company where I'm doing my final project. Part of the project
-involves diskless machines, so I got to develop this setup further and had
-the time to update this HOWTO.
-*
-
-*All the users who will give me usefull input once this first version is
-out ;)
-*
-
-----
-
-!!7. Comments
-
-
-Comments suggestions and such are welcome. They can be send to Hans de
-Goede at: j.w.r.degoede@et.tudelft
.nl
-----
+Describe [HowToDisklessrootNFSHOWTO]
here.