Return to BSD News archive
Path: euryale.cc.adfa.oz.au!newshost.carno.net.au!harbinger.cc.monash.edu.au!munnari.OZ.AU!news.ecn.uoknor.edu!news.wildstar.net!news.ececs.uc.edu!news.kei.com!newsfeed.internetmci.com!news.sgi.com!news-out.microserve.net!news-in.microserve.net!news.sprintlink.net!news-dc-2.sprintlink.net!news.sprintlink.net!news-atl-21.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 Subject: [comp.unix.bsd] NetBSD, FreeBSD, and 386BSD (0.1) FAQ (Part 6 of 10) Supersedes: <386bsd-faq-6-842594403@cynjut.neonramp.com> Followup-To: comp.unix.bsd.netbsd.misc Date: 27 Sep 1996 01:00:13 -0500 Organization: Dave's House in Omaha Lines: 737 Approved: news-answers-request@MIT.Edu,cgd@sun-lamp.cs.berkeley.edu Expires: 10/15/96 01:00:04 CDT Message-ID: <386bsd-faq-6-843804004@cynjut.neonramp.com> References: <386bsd-faq-1-843804004@cynjut.neonramp.com> Reply-To: burgess@cynjut.neonramp.com (386bsd 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:258 comp.unix.bsd.freebsd.announce:342 comp.answers:19436 news.answers:75693 Posted-By: auto-faq 3.1.1.2 Archive-name: 386bsd-faq/part6 Section 5. (Kernel Replacements) 5.0 Introduction This section is supposed to document the unusual or optional kernel add-ons that are available from various places. As they are included in the mainstream of the various Berkeley Net Release systems, they will slowly come out of here. If you know of any replacement parts for the kernel, please send Dave Burgess (burgess@cynjut.neonramp.com) a message detailing the package (possibly include a README), where it can be found, and what version of the OS (ie. NetBSD or FreeBSD) it was designed to run under. 5.1 Available Kernel Replacements 5.1.2 pcvt A superset of pccons, this driver supports virtual consoles, and some form of database oriented keyboard mappings. It was also designed to emulate a vt220 terminal as best as possible. (This section originally identified Joerg Wuensch as the author. Hellmuth Michealis is the author of pcvt. Joerg was the author of the original post. This update is from Hellmuth himself. Apologies from the FAQ staff...) The last release of pcvt is version 3.00 and was done on March 1st 1994 to the newsgroup comp.sources.misc, Volume 41, Issue 140-152 (part 1-13). Future releases and upgrades will be done as patches or new releases to that newsgroup. pcvt was recently put into the kernel sourcetree of NetBSD-current (pre 1.0) into /sys/arch/i386/isa/pcvt. pcvt is also available in the FreeBSD contributed tree at location /usr/ports/util/pcvt. The pcvt package consists of: - the driver itself - complete documentation for installation and operation - termcap/terminfo, pcvt.el, rc.local, /etc/ttys, xmodmap examples - cursor, utility to set the cursor size and shape - fed, a curses-based EGA/VGA character set editor - fontedit, utility to edit the VT220 downloadable character set - ispcvt, utility to display the drivers compile time configuration - kcon, utility to setup national keyboard layouts and remap keys - keycap, keyboard mapping database library similar to termcap - loadfont, utility to load up to 4/8 fonts into an EGA/VGA board - mcon, utility to control/configure a keyboard based mouse emulator - scon, utility to runtime configure the video part of pcvt - userkeys, utility to set the VT220 user programmable function keys - vttest, VT100 compatibility torture test program - demo, color- characterset- and attribute demos and more .... See the README-file for the latest release (3.00) of pcvt for lots more information and a complete list of the contributors to this project. 5.1.3 syscons Another superset of pccons that was designed to emulate SCO as well as possible. Many of the ioctls from SysV have been implemented. XFree86 2.0 no longer requires special patches to be run with kernels using this console driver. 5.1.9 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 queueing 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 Postscipt (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 resoultions 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: The first part that confused me was assuming that /dev/com1 is the same as DOS com1, they're not. /dev/com0 is connected to COM1 and (I think) /dev/com1 is connected to COM2. The switch settings for my modem were the same as what I had under DOS, CTS CD RTS et al were set to follow the actual line (i.e. my modem can force them high, which I turn off) Ok that's not too bad. Now you need to edit the /etc/remote file to include a reference to the com port. I have only used NetBSD-0.8, so I'm not sure what the default files are like that come with the other rev's of *BSD. I added the last line (with com0). -------------------------------------------------------- # @(#)remote 5.2 (Berkeley) 6/30/90 # ...stuff deleted... # UNIX system definitions unix1200|1200 Baud dial-out to another UNIX system:\ :el=^U^C^R^O^D^S^Q:ie=%$:oe=^D:tc=dial1200: unix300|300 Baud dial-out to another UNIX system:\ :el=^U^C^R^O^D^S^Q:ie=%$:oe=^D:tc=dial300: ...stuff deleted... dial2400|2400 Baud Hayes attributes:\ :dv=/dev/tty19:br#2400:cu=/dev/tty19:at=hayes:du: dial1200|1200 Baud Hayes attributes:\ :dv=/dev/tty19:br#1200:cu=/dev/tty19:at=hayes:du: # Hardwired line com1c|com1:dv=/dev/com1:br#9600: com1b:dv=/dev/com1:br#2400: com0:com0:dv=/dev/com0:br#9600:at=hayes: ------------------------------------------------ Ok, now if you are running as root you can use type 'tip com0' and you should then be talking to your modem. I use kermit to transfer files, and it wants to create a lock file in (not sure about the exact path) /var/spool/uucp/lock or something along those lines. I made the directory world writeable so I could run kermit with my own uid, rather than root. Also, you may need to add an entry in /etc/remote for com0. Thanks also to thombsr@liciren.li.co.uk for information on how to do this. New problems have surfaced with the latest releases of NetBSD. It seems that the paradigm that the com port used to use was 'less than complte' and much of the code has been replaced. This provides for some interesting new problems. The first is that the Carrier Detect line is no longer ignored, as it was before. This means that programs like kermit and tip/cu either have to be told explicitly to ignore the CD line (in kermit, for example, you would use the 'set carrier off' in your .kermrc) or you need to use the 'stty -f /dev/com? clocal' command before you open the port. If you have trouble getting the settings to 'stick' it is because the ports are now initialized to known settings on the last close of the port. A workaround for this is to use the command: sleep 1000 < /dev/com? tip ... { or } kermit ... This will keep the port open for about 12 minutes while you do whatever it is you need to do. Once the port is open and your connection established, the port will not reset until the final close. Another symptom of this malady is described below. When I 'set line' in kermit, it hangs until I hit my escape character (^\). It *does* set the line (and the rest of my session is normal), but it's annoying because I can't put 'set line' in my .kermrc. The answer is available in the kermit documentation as well as here (now). The following commands are MY .kermrc file: set carrier off set line /dev/com2 set speed 38400 set modem hayes set dial speed on set dial timeout 60 The 'set carrier off' tells kermit to ignore the Carrier Detect line from the modem, and to proceed as if the command were there. This will (as far as I have ever been able to find out) fix the specific problem with not being able to set the line. 5.3.3.2 Adding a modem to NetBSD. 5.3.3.3 Adding a modem to FreeBSD. 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 braindead and stupid, not too unlikely tho 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.11 Where are all the answers to the above and related questions written down? Neither on the net nor in the 4.3BSD manuals nor Administration text which I have could I find this stuff covered! They are in the FAQ :-)... 5.4.12 What else should I know? For example, it seems that a new tape must stretched. How is this done? Use a blowtorch and a pair of pliers; or you can use the non-destructive method and run the tape through a complete fast forward/rewind cycle to get it tight on the spindles. 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 minicartridge drives are supported natively in FreeBSD and experimentatlly in NetBSD. Some aren't (mine for example, is not). If your tape drive is a SCSI based drive, your guess is as good as mine. I don't have one. 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 autodetection. You have to create different devices for different densitys. 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 quirq but it might not work. The cfg0-2 switches is for setting the disconnect size, eg the maximum size transfered before disconnect to allow other scsi devices to acces 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 autodetects 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 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. 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 has 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.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 suprising 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...."