*BSD News Article 90923


Return to BSD News archive

Path: euryale.cc.adfa.oz.au!newshost.carno.net.au!harbinger.cc.monash.edu.au!news.mel.connect.com.au!news.syd.connect.com.au!phaedrus.kralizec.net.au!news.mel.aone.net.au!grumpy.fl.net.au!news.webspan.net!newsfeeds.sol.net!europa.clark.net!cpk-news-hub1.bbnplanet.com!news.bbnplanet.com!news.sprintlink.net!news-peer.sprintlink.net!news-pull.sprintlink.net!news.sprintlink.net!news-ana-7.sprintlink.net!neonramp.com!cynjut.neonramp.com!cynjut.neonramp.com!not-for-mail
From: burgess@cynjut.neonramp.com (Dave Burgess)
Newsgroups: comp.unix.bsd.netbsd.announce,comp.unix.bsd.freebsd.announce,comp.answers,news.answers,comp.unix.openbsd.announce
Subject: [comp.unix.bsd] NetBSD, FreeBSD, and OpenBSD FAQ (Part 6 of 10)
Supersedes: <386bsd-faq-6-857030405@cynjut.neonramp.com>
Followup-To: comp.unix.bsd.netbsd.misc
Date: 13 Mar 1997 02:00:16 -0600
Organization: Dave's House in Omaha
Lines: 595
Approved: news-answers-request@MIT.Edu,cgd@sun-lamp.cs.berkeley.edu
Expires: 03/31/97 02:00:03 CDT
Message-ID: <386bsd-faq-6-858240003@cynjut.neonramp.com>
References: <386bsd-faq-1-858240003@cynjut.neonramp.com>
Reply-To: burgess@cynjut.neonramp.com (BSD FAQ Maintainer)
NNTP-Posting-Host: cynjut.neonramp.com
Keywords: FAQ 386bsd NetBSD FreeBSD !Linux
X-Posting-Frequency: Posted on/about the 13th and the 27th of every month.
Xref: euryale.cc.adfa.oz.au comp.unix.bsd.netbsd.announce:387 comp.unix.bsd.freebsd.announce:502 comp.answers:22746 news.answers:8366

Posted-By: auto-faq 3.1.1.2
Archive-name: 386bsd-faq/part6

Section 5.	(Kernel Replacements)

5.0	Introduction

5.1.4	A replacement curses program/library.

	It is generally accepted that the NetBSD curses can be easily
	replaced by the ncurses package.  It is more complete and offers
	much better support for shared libraries and other advanced
	features.  The current (early 1995 version) is 1.8.5 and is
	available from ftp://netcom.com:/pub/zmbenhal/ncurses/1.8.5.tgz.


5.2	Floppy Disk problems.

5.2.1	How do I get a bootable floppy?

	Several ways, ranging from brain-dead-but-works to simplest.  
	Classification into categories is left to the reader (is there 
	really a difference between 'brain-dead' and 'simple'?:')

	1) rawrite (or dd) dist.fs (or fixit.fs) to a disk,
	   mount it, cd to the mount point, and execute:

		rm -rf .

	   you now have a bootable floppy!;^}

	2) Take your existing dist.fs or fixit.fs boot disk and
	   diskcopy it on a DOS machine.  Mount and rm as in 1)
	   above.  Again, you have a bootable floppy!;^}

	3) Run disklabel on the floppy, e.g.:

		disklabel -w -r fd0a floppy5

	   where 'floppy5' is a 'name' for an entry in the /etc/disktab
	   file.  You'll get a couple of ioctl errors because writing a 
	   label to a floppy isn't supported (yet?), but the boot blocks 
	   have indeed been written.

	4) Write the boot blocks to the floppy:

		cat /usr/mdec/fdboot /usr/mdec/bootfd | dd of=/dev/rfd0a

	   or, more simply:

		cat /usr/mdec/fdboot /usr/mdec/bootfd > /dev/rfd0a

	Methods 3) and 4) require you to run newfs on the floppy, e.g.:

	newfs /dev/rfd0a floppy5

	If you have a floppy that was originally bootable, but the boot
	blocks were somehow damaged, you can use method 3) or 4) to
	restore boot-ability (do _NOT_ run newfs).  You _could_, through
	the convolutions of copying a floppy whose boot blocks are damaged
	to a temporary location and then re-copying to a bootable floppy,
	use method 1) or 2) (if you really want to!;^})

	5)  If the disk is already newfs'ed and is otherwise ready to use,
	disklabel will write the boot blocks on the disk.  Read the man page
	for disklabel.


5.2.2	How do I maximize the space on a mountable floppy disk.

	As you all know, when you are working with a floppy, it is usually
	more important that the floppy have a lot of room, rather than a
	lot of other 'stuff'.  Here is the magic incantation that will
	maximize the amount of free space on the disk.

		newfs -Tfloppy[35] -i[4096 | 8192] -c 80 /dev/fd[0|1]a

	This leaves the disk with fewer inodes and only one cylinder group.


5.3	Character Device Driver info

	These devices are also often referred to as character devices.
	
5.3.1	Printers

	NetBSD and FreeBSD both include both an interrupt and
	non-interrupt driven parallel driver in their stock 
	manifestations.

	It is possible to connect a serial printer to either.  This brief
	tutorial is provided by Daryl Berryhill 
	(djberry2@b25info.b25.ingr.com)

	The way I got my printer to work.

	1) connect a 25 pin to 9 pin null modem cable to printer and 
	   computer.
	2) set printer to 9600 baud, 7 data bits, even parity.
	3) configure /dev/com1 (DOS COM2) port the same way as the printer
	4) add a line to /etc/printcap that says:
	       lp|local line printer:\
		  :lp=/dev/com2:wq:sd=/var/spool/lpd:lf=/var/log/lpd-errs:\
		  :br#9600
	5) type "lpr <add filename here>"
	6) type "lpd"
	   and it should start printing.

	An obvious point, but make sure that you do NOT start a getty on 
	on the com port.  Check the /etc/ttys file and make sure that 
	the com port you select is not active.

	There have been many reports in the past of people not being able 
	to get their parallel port printer working.  One of the problems
	seems to be cables.  Another problem may be with the hardware.  
	A seemingly stupid suggestion is to replace your printer card with
	the cheapest parallel port card you can find.  I am using a $10
	single parallel, two serial port card that I got from Altex.  
	Works great.

	In addition, there are people that want to set up multiple printer
	queues using the BSD queuing mechanism.  Here is a brief tutorial:

	Lpf is mainly intended for processing text and nroffed output...it 
	isn't anything clean...it will do certain games that will mess up 
	PCL output.

	If you're producing straight PCL or PostScript (assuming your LJ 
	takes it), then you want to print directly to the printer w/o any 
	processing.  

	What you really want is a "physical" queue that does no processing, 
	and several logical queues that map back to the physical queue and 
	do processing...or one "smart" queue that does file content 
	recognition and then maps to the raw queue.

	I do something like this for my DeskJet.  There is one raw queue 
	and several logical queues (some postscript that do different 
	resolutions and color depth, some text that do various formatting, 
	etc).  When I get the time I'll be trying to set up a "smarter" 
	queue using aps and maybe some bits from flexfax.

	To map logical to physical queues either use a filter that pipes 
	back into lpr -P<rawqueue> itself, or just point it at the "raw" 
	queue using something like:

	textlp|Text Printing:\
	    :lp=/dev/null:\
	    :if=/usr/libexec/lpr/lpf:\
	    :rm=localhost:\
	    :rp=lj.raw:

	And other entries as needed, you get the idea...to use an output 
	filter instead of the rm/rp approach (more efficent), you can get 
	away with something like:

	    :of=/usr/local/bin/printraw:

	where /usr/local/bin/printraw looks like this:

	#!/bin/sh
	cat | lpr -h -Plj.raw


5.3.2	Terminals/Keyboards

	Terminals are relatively simple to add.  It involves making sure
	the /etc/ttys file identifies the com port (com0, com00, or tty00 
	depending on your configuration) as an active port and a getty is
	running.  The man page for ttys and getty help explain this.

	Many people report that there are sometimes problems running some
	programs on a remote terminal.  There are some known bugs in the
	terminal handler where the parity and bits per character are 
	concerned.  They are being worked on.


5.3.3	Modems/FAX Modems 

5.3.3.1	How do I add a modem to *BSD:

5.3.3.4	Adding a Dial-in/Dial-out FAX to NetBSD or FreeBSD.

	First, here is the known working configuration for these 
	instructions:

	  - HylaFAX 3.0 beta 100. 
	  - Zoom VFX V.32bis Faxmodem; 
	  - Rockwell datapump.

	1: Start faxq from rc.local, no options on the command line.

	Add a line to your /etc/rc.local which starts up the faxq
	program.  Do not include any options on the command line.

	2: Stary faxgetty from init, i.e. a line in /etc/ttys.

	I use the non modem control device; however, it's nonstandard
	hardware and I've modified the driver to always return sighup
	on lost carrier to solve some sticky problems with non modem
	control devices never getting SIGHUP's.

	Basically, I just did as the directions said to do. I ran 
	'faxaddmodem' script to configure the type of modem. I did 
	have to simplify some lines in the script (the ones executed 
	in a subshell) since I think my version of bash doesn't handle 
	subshells correctly.

	RTFM and you should be OK unless your modem is brain dead and
	stupid, not too unlikely to given the current state of Fax
	modems... B^(.


5.3.4	What is the trick for getting Kermit to work with rz and sz?

	Add these lines to your .kermrc file.  They should do the trick.

	define sz !sz \%1 \%2 \%3 \%4 \%5 \%6 \%7 \%8 \%9 < \v(line) > \v(line)
	define rz !rz \%1 \%2 \%3 \%4 \%5 \%6 \%7 \%8 \%9 < \v(line) > \v(line)


5.4	Tape Drives

	This section should help out for those of you that have either
	never used tape drives before, or only have experience with them
	as non-Unix devices.


5.4.1	Does the tape need to be formatted?

	It depends, but I think usually not.  And when it is necessary,
	I don't know how it would be done.  One thing is for certain, 
	though, first....  NEVER use the block devices..  erase them and 
	forget you ever saw them.  All operations on tape should be to 
	the character device (rst0).


5.4.2	If I execute the command 'st -f /dev/st0 status', I get:
		Archive/Tandberg? tape drive, residual=0, blocksize=512
		Density: high = 16 (0x10), medium = 15 (0xf), low = 5 (0x5)
		ds=0
		er=0

	so to write to tape at high-density (QIC-150), presumably I want 
	to use a device with minor number +4 (in st.c, density is computed as
	minor >> 2 & 0x03, where low density == 3 and high == 1):

	You have the idea.. density is controlled by bits 2 and 3

		00 = default
		01 = hi density
		10 = medium density
		11 = low density, 

	Unless the driver knows about you kind of drive the density values
	may need to be set by hand before they make any sense.


5.4.3	When is erst0 used?

	e stands for 'eject' and is bit 1 of the minor.. 
	e.g. eject on close.. many devices can't actually do this.

	There is actually a method to this whole thing:

		r = raw		(rst0)
		e = eject	(erst0)
		n = No rewind	(nrst0 or maybe nerst0)


5.4.4	How is density (bpi) computed?  I am using 3M DC 6250 cassettes 
	which have a 250MB capacity on the Viper 150.  But computing the 
	bits/inch based on 250MB/tape-length (1020 ft.), I get a density 
	of 171335 bpi, which is nowhere near the 10000 bpi associated 
	with QIC-150 in the st(1) man page.  Why the discrepancy?

	These cartridge tapes are written in narrow tracks which 
	alternately begin at opposite ends of the tape.  Track 0 starts 
	at the beginning of the tape, and Track 1 starts at the other 
	end, etc.

	So, how many times does the tape go backwards and forwards?  If 
	there are 17 tracks, your density is 170000 bpi if it is 10000
	bpi per track.  The more tracks, the lower the bpi/track.


5.4.5	How is an appropriate block size determined (and in what units 
	are they specified in the st(1) command)?

	QIC 150 and below should stick to 512 byte blocks a write of 
	1024 bytes from the program will be written as 2 512 byte blocks 
	with no speed penalty.  dd will think it's writing a 1024 byte 
	block but on tape it's 2 x 512.

	Stick to 512 on QIC 150 or less if you ever hope to swap data 
	with anyone else.


5.4.6	From the 4.3BSD mtio(4) man page, it sounds like data is typically
	(traditionally?) stored on tape in eof-terminated sequences of 
	1K records.  

5.4.6.1	Is st's notion of "file" the record sequence between two eof marks?  

5.4.6.2	What about a "record"?  

5.4.6.3	Is a "record" one "block", as determined by st's "blocksize" command?   
	If not, what is the connection between them?  

5.4.6.4	Can I change the "record" size?  
5.4.6.5	When would I want a block size that is different from the default?  
	1KB is the size of writes used by dd or whatever.  QIC specifies 
	512 byte records (well at least its what people use..)  Whatever 
	you write in will be broken into 512 byte sections.  They must be 
	multiples of 512 though.

	If you have written to a tape, a close will automatically append a 
	filemark (eof mark).  You may read the 512 byte blocks back as 
	512 byte records or as 1024 byte records (in which case you'll 
	get 2 at once).  The bigger the unit, the more efficient.

5.4.7.1	How do I write several archives to a single tape?  I tried without 
	success:
		$ st -f /dev/rst4 rewind
		$ tar cf /dev/nst4 archive1
		$ st -f /dev/nrst4 weof
		$ tar cf /dev/nst4 archive2
		$ st -f /dev/nrst4 weof

	First:  throw away the block devices.

	'n' stands for 'No-Rewind-on-close' and will leave the tape 
	positioned ready for another file e.g.

		tar -cf /dev/nrst0 archive1
		tar -cf /dev/nrst0 archive2


5.4.7.2	Later, I would expect to be able to access, say, archive3 via the fsf
	directive to skip over the first two archives.  What is the correct
	sequence?

		st -f /dev/nrst0 rewind
		st -f /dev/nrst0 fsf 2
		tar -xf /dev/rst0 {files}


5.4.8	Since the Viper 150 writes on QIC-150/120, I guess I don't need 
	to worry about writing variable-length records?  How about reading 
	a tape written with variable-length records.  Is this possible 
	with the Viper?  If so, what's involved?


	Who would have written it? :-)

	Presently you can't.  You`re right.  Don't worry about it.

	The new 'st' changes will change this somewhat, though.


5.4.9	The very scant documentation that came with my drive mentions
	a "selectable buffer disconnect size," whose default is 16K.
	This is evidently the "maximum number of bytes that can be 
	sent over the SCSI bus during a single data transfer phase."  
	What's that?  How is it connected st's "blocksize" command?  
	Do I want to use 16K blocks, or might I even want to set the 
	disconnect size to a higher value?

	This suggests that 32 512 blocks will be written at a time.
	This jives with the tape format for some of the lower density 
	cartridges (QIC-40 and 80, for example).  The tape is written 
	in blocks of 32 512-byte blocks, with the last three being used
	for Error Correction Codes.  

	Use dd or tar with 16 k blocks and 32 x 512 byte blocks will be 
	written.

	Also see 5.4.15 (below) for more information if you are using an
	Archive Viper tape drive.


5.4.10	What is "streaming"?  When I tar a directory of files to tape,
	I notice that the tape often stops.  Streaming means it doesn't 
	stop?  How would I get the viper 150 to stream using tar or cpio 
	or dump?

	Use a bigger write size... (more efficient)  Try 16k blocks.

5.4.13	My tape drive doesn't work.  

	OK.  There are lots of reasons why it may not.  The most obvious is
	that there are no devices associated with the device in the kernel.
	You can check this through the use of the 'dmesg' command.  Look
	for tape drives.

	If your tape drive is connected to your floppy controller, it may
	or may not be supported.  Several manufacturers of QIC-40/QIC-80
	mini-cartridge drives are supported natively in FreeBSD and 
	experimentally in NetBSD.  Some aren't (mine for example, is not).


5.4.14	I am trying to restore a tape from a FreeBSD machine on a Sun.
	What kinds of problems should I expect?

	The default blocksize should not be a problem, since they are
	both 20K.  You may need to use "dd if=/dev/rst0 conv=swab |
	<archiver>" instead of extracting directly from tape, just
	in case the byte order causes a problem.  This is especially
	true if you don't use the 'a' and 'c' options in cpio, for
	example.


5.4.15	What are the jumper settings for the Archive Viper tape drive? 

	Vipers can't do auto-detection. You have to create different 
	devices for different densities. Minor number 8 = 120Mb, 
	4 = 150Mb and 12 = QIC-24 (60Mb).  At least this is the only 
	way it works for me, and since it do I haven't bothered to 
	find out why minor 0 doesn't.  If you have a 2525 (525Mb) 
	it uses  ST_Q_SENSE_HELP quirk but it might not work.

	The cfg0-2 switches is for setting the disconnect size, e.g. 
	the maximum size transfered before disconnect to allow other 
	SCSI devices to access the bus. Jumper in sets bit to 1.

		0 = 2kb
		1 = 4kb
		2 = 6kb
		3 = 8kb
		4 = 12kb
		5 = 16kb
		6 = 24kb
		7 = 32kb
	
	I'm using my viper at id 4 and disconnect size 16k. Works 
	perfectly.

5.4.16	My Viper-150 auto-detects fine; however, the first attempt to
	read a tape fails after a boot due to an "illegal SCSI 
	command".  What could be the problem?

	I assume that the driver is trying to use some SCSI-2 
	command to set the default density -- but after that, the 
	drive is perfectly happy to do the tedious density check and 
	off it goes.  I've read all three densities on the drive.  Once
	the drive is set up and the driver realizes there is no density
	command, it just brute forces the drive density and off it goes.


5.4.17	Why haven't we changed the defaults in rdump and rrestore to
	something that makes sense?  I was trying to dump a filesystem 
	to a remote tape and ran into an error complaining about being 
	unable to execute /etc/rmt.  

	Of course, if you get this error, this program doesn't exist.  
	This information comes from ../src/sbin/dump/pathnames.h.  The 
	reason we still use /etc/rmt and /dev/rmt8 is because the 
	rdump and rrestore protocol call for those names.  

	This problem usually won't show up unless the original
	installation of the system was done before NetBSD 0.9 *AND* the
	etc.tar.gz distribution was never done.  This distribution fixes
	this problem by creating the symbolic link from where rmt lives
	to /etc/rmt.  The Makefile for rmt should also create this link
	(I'd check before assuming it does.)


5.5	Network Stuff

	Network devices for NetBSD and FreeBSD include many types of
	Ethernet cards, as well as Serial Line IP and Point to Point
	Protocol.


5.5.1	How can I get my system to work as a network router?

	The first hurdle to overcome is that the default kernels do not
	have the GATEWAY option compiled in.  Without this, it is very
	nearly impossible to use the kernel as a router.

	Once you have the GATEWAY option compiled in, all sorts of things
	magically start to work.  If you haven't got the GATEWAY option
	enabled, you can also use 'sysctl -w net.inet.ip.forwarding=1'
	if you are using FreeBSD or NetBSD versions that support that.
	Remember, once you build the new kernel, you will need to
	install it in the root directory and reboot.

	Once you have the forwarding option set, you will need to make
	certain that you have not included the '-q' option to routed.
	This should be in the routed_flags keyword in /etc/netstart.  If
	you are using multiple internal LANs, you may also want to
	invest in gated instead (see below).

	For those folks that are not using routed, you will need to make
	certain that you have a static route to your network provider
	established.  

	To test your network capability, try running the following
	command:
		
		traceroute -s YOUR_ETHERNET_ADDRESS 129.186.150.150

	Check to see where your packets are hanging up.  It might be
	that someone upstream from you has something broken instead of
	simply assuming it is your fault.


5.5.2	I recently had a problem where I got a message that said "panic: 
	kmem_malloc: mb_map too small".  What is the solution to this
	problem?

	The second hurdle is that sometimes you run out of cluster 
	allocation space in the kernel. This is probably network-related 
	and usually shows up when something is being done using the 
	network (like NFS).  The way to get around this would be to 
	change the value of NMBCLUSTERS in your config file. NMBCLUSTERS 
	is set at 256 by default, and increased to 512 when the GATEWAY 
	option is active. To be very safe, you could add

		options	 NMBCLUSTERS=1024

	to your config file, and recompile. This is reported to work
	with systems that crashed as soon as a large number of people 
	(75+) were connected to it.


5.5.3	Does anyone have an example of a working gated.conf file? I
	can't figure these instructions out at all.

	Here is a sample config file for a machine which has two cards, 
	one of the cards has an alias created like so: 

	ifconfig de1 inet 199.232.137.65 mask 255.255.255.192 alias

	Gated is running with this config:

	interfaces {
	    interface de0 passive;
	    interface de1 passive;
	};

	ospf yes {
	    backbone {
		networks {
		    199.232.136.0 mask 255.255.255.0;
		    199.232.137.0 mask 255.255.255.0;
		};
		interface de0;
	    };
	};

	export proto ospfase {
		proto direct {
			199.232.136.160 mask 255.255.255.224;
			199.232.137.0 mask 255.255.255.0;
		};
	};

	All routing and networking is fine right after I start gated.  
	However, if I leave out the 'interface passive' section, gated 
	shuts down the two routes on de1 after a couple of minutes.  


5.5.4	How do I set up Multicasting on my system?

	If you're trying to join the Mbone, you need to find someone 
	willing to provide you with a "feed", and that person's router 
	will be at the other end of your tunnel. If you're just trying to 
	set up your own private little multicast domain, then you need to 
	set up other such routers on other subnets and interconnect them 
	with tunnels. If you just want to run a little multicast testbed 
	on a single subnet, you don't need any multicast routers at all! 
	See the Mbone FAQ at: 

	   http://www.mediadesign.co.at/newmedia/more/mbone-faq.html

	for more detailed information on all of this...


5.6	I want to use my ZIP drive.  Are there any weird things I need
	to know?

	One of the things that "just work" are ZIP drives.  The -current
	code for both FreeBSD and NetBSD handle ZIP drives very cleanly.
	One of the unusual things about ZIP drives is that most people
	don't know (and the man page is deliberately vague about) is
	once a person has permission to write to the ZIP drive, they can
	mount it onto a directory in their space.  This is new with the
	adoption of BSD 4.4, so it isn't really surprising that it is
	new.
-- 
Dave Burgess  (The man of a thousand E-Mail addresses)
*bsd FAQ Maintainer / SysAdmin for the NetBSD system in my spare bedroom
"Just because something is stupid doesn't mean there isn't someone that 
doesn't want to do it...."