From owner-freebsd-questions Fri Sep 15 10:36:04 1995 Return-Path: owner-questions Received: (from root@localhost) by freefall.freebsd.org (8.6.12/8.6.6) id KAA25054 for questions-outgoing; Fri, 15 Sep 1995 10:36:04 -0700 Received: from labinfo.iet.unipi.it (labinfo.iet.unipi.it [131.114.9.5]) by freefall.freebsd.org (8.6.12/8.6.6) with ESMTP id KAA25049 for ; Fri, 15 Sep 1995 10:35:59 -0700 Received: from localhost (luigi@localhost) by labinfo.iet.unipi.it (8.6.5/8.6.5) id TAA01988; Fri, 15 Sep 1995 19:38:45 +0200 From: Luigi Rizzo Message-Id: <199509151738.TAA01988@labinfo.iet.unipi.it> Subject: Re: * Can I use DOS filesystem for SWAP? * To: kallio@jyu.fi (Seppo Kallio) Date: Fri, 15 Sep 1995 19:38:44 +0200 (MET DST) Cc: questions@freebsd.org In-Reply-To: from "Seppo Kallio" at Sep 15, 95 06:12:04 pm X-Mailer: ELM [version 2.4 PL23] Content-Type: text Content-Length: 7305 Sender: owner-questions@freebsd.org Precedence: bulk > We have a lot of DOS PCs in labs and etc. > > The diskless FreeBSD+XFree would be a nice X server if it could swap to DOS > file system file. Can FreeBSD use DOS file as SWAP space? We have set up a configuration with shared root and /usr, and swap on the windows swapfile. There are a few tricks to play to have a shared root, while things are much easier for sharing /usr. Note that, to make things easy, I have to export the rootfs with root read permissions. This is a security hole. To avoid this, you have to change permissions to /sbin/init and find some better way to access the master.passwd (maybe YP can help -- but I have never used them). You need to rebuild a kernel, as the default kernel does not have MFS or "vn0". Here follows a small step-by-step guide on what we did here. I apologize for not producing this in .sgml format, but had no time to learn the formatting instructions, and wanted to post these info soon. Hope the details here can be useful, and somebody can include them in the handbook. Luigi ==================================================================== Luigi Rizzo Dip. di Ingegneria dell'Informazione email: luigi@iet.unipi.it Universita' di Pisa tel: +39-50-568533 via Diotisalvi 2, 56126 PISA (Italy) fax: +39-50-568522 http://www.iet.unipi.it/~luigi/ ==================================================================== Configuration of FreeBSD clients with shared / and /usr, swap on local DOS filesystem *** SERVER CONFIGURATION * BOOTPD Create/modify /etc/bootptab to include entries for the various clients. It is convenient to provade a template that can be shared between the various clients, e.g. #example bootptab ... .clients:\ ht=ethernet:sm=255.255.255.0:\ hn:hd=/:bf=/kernel: ... client1:tc=.clients:ha=012345678900:ip=200.0.0.1: client2:tc=.clients:ha=012345678901:ip=200.0.0.2: ... (remember to put the right values for "ha", the hardware address, and "ip", the ip address of the client. * TFTPD * Create a /tftpboot directory to hold the configuration files for the various clients [Note: many of the info in the config file could probably be derived from the parameters supplied by bootpd]. * Create the cfg.xx.xx.xx.xx files in /tftpboot, for each of the clients, e.g. #example cfg.200.0.0.1 hostname client1.my.domain kernel /kernel rootfs 200.0.0.128:/usr/diskless_root * INETD * Modify /etc/inetd.conf to enable BOOTP and TFTP, e.g. add/uncomment the following lines #example inetd.conf bootps dgram udp wait root /usr/libexec/bootpd bootpd tftp dgram udp wait nobody /usr/libexec/tftpd tftpd -l /tftpboot * "kill -HUP" the inetd process * NFS SERVER * Modify /etc/exports to export the root and /usr directories for the clients, e.g. #example exports /usr /usr/diskless_root -ro -maproot=root:wheel client1 client2 ... Some operating systems (e.g. FreeBSD 2.X) allow you to define group of clients that have the same rights. WARNING: you are giving root access rights (although readonly) to all clients in the group. This is required, at least for the master.passwd file. If you don't like this, you have to use a different authentication mechanism (YP ?) * kill -HUP the mountd process * Add, if necessary, the ip to hostname mappings for the clients in /etc/hosts. * SETUP THE ROOT DIRECTORY FOR THE CLIENTS. We assume that the clients share a (readonly) directory named /usr/diskless_root. The per-client files are in a separate filesystem, /var, which is mounted in a memory filesystem on each client and filled up at boot time. To create /usr/diskless_root, start as follows: * create a copy of the original rootfs: mkdir /usr/diskless_root cd / tar cvlf - . | ( cd /usr/diskless_root ; tar xvf - ) * then do the following cd /usr/diskless_root mkdir dos # mountpoint for the local dos filesystem /dev/MAKEDEV dev/vn0 # device entry for mfs * modify etc/sysconfig, by setting the following fields appropriately for the clients: + network interfaces + disable nfs_server and other services * modify etc/inetd.conf to remove unwanted services (e.g. tftpd,bootpd) * modify etc/fstab as appropriate for the clients. They should use NFS-mounted root and /usr, a dos partition, and a memory filesystem. Note that the root partition is specified as rw in the fstab, although exported readonly by the server. #example fstab ... 200.0.0.128:/usr/diskless_root / nfs rw 0 0 200.0.0.1:/usr /usr nfs ro 1 1 /dev/wd0s1 /dos msdos rw 0 0 /dev/null /var mfs rw,-T=myformat 0 0 ... * modify etc/disktab to add a myformat entry. This is used by mount_mfs to derive information on the size and geometry of the partition. These info could be probably given in "fstab", but I was too lazy to figure out the parameters. myformat:\ :dt=ST506:ty=winchester:se#512:nt#256:nc#1:\ :pb#12288:ob#0:tb=swap: \ :pc#12288:oc#0: * move writable files into /var. Some files/directories in the root partition are moved to /var where they can be written. In /usr/diskless_root do the following: mv tmp var/tmp ln -s /var/tmp tmp mv dev var/dev ln -s /var/dev mv root var/root ln -s /var/root * Create a tar archive with all the files which go to the /var partition, as follows (within /usr/diskless_root): tar cvf - var | gzip -9 > files.tgz * modify etc/rc to do some diskless-related actions: basically, identify a diskless machine, mount the filesystems in the right order, create the /var partition in /mfs, extract the files, etc. [IMHO, this change might well go into the standard rc] #example rc ... DISKLESS=NO # default behaviour swapon -a ... if [ "x`hostname`" = "x" ] # netboot sets the hostname then mount -a -t nonfs else DISKLESS=YES mount -a -t nomfs vnconfig - e /dev/vn0 /dos/windows/win386.swp swap mount -a -t mfs df (cd /; gzcat files.tgz | tar xvf - ) fi ... * KERNEL CONFIGURATION The kernel for a diskless machine should contain at least the following, non-standard, entrues: options MFS #Memory Filesystem pseudo-device vn # Vnode driver plus all required devices for operation. Make a new kernel with the above options, and copy it to /usr/diskless_root/kernel *** CLIENT CONFIGURATION The swap area can be built by creating a file of suitable size (same or bigger of what defined in "myformat" above). An example (in DOS): cd \windows echo "swapfile...." >a copy a+a+a+a b # b=64 copy b+b+b+b a # b=256 copy a+a+a+a b # b=1K copy b+b+b+b a # b=4K copy a+a+a+a b # b=16K copy b+b+b+b a # b=64K copy a+a+a+a b # b=256K copy b+b+b+b a # b=1M copy a+a+a+a b # b=4M copy b+b+b win386.swp # 12M del b Then you just have to run netboot.com! Luigi Rizzo (luigi@iet.unipi.it) ====================================================================