This document is hosted by Naked Ape Consulting and is probably completely out-of-date.
Frequently Asked Questions
386BSD, NetBSD, FreeBSD, OpenBSD and
other BSD derived Operating
Systems.
EXTREMELY UNOFFICIAL
Original FAQ by: Terry Lambert
New New FAQ by: Dave Burgess
Last Update: 12 Dec 1997
In the distribution of each of the *BSD systems, there is a LOT of documentation. If you are completely unfamiliar with Unix, there is a reading list recommended in Section 1 of the FAQ. There are also various documents in the /usr/share/doc directory on the installed system. Many of these give detailed information about the design, history, and use of many of the pieces of the *BSD system you are interested. Once you are familiar with Unix-like systems, you can probably graduate to the 'man' program. The 'man' program is a series of manual pages which describe various parts of the system (kernel stuff, file formats, commands, 'C' standard functions, etc.) in enough detail to generally get you where you want to be. The command 'man man' will give you a lot of details. The other command which might help is called 'apropos' (pronounced ap'-rO-pO). This command searches the title lines of every manual page looking for a match in the word you include as an argument. If you have the system running, try the command 'apropos ttys' to get a feel for all the stuff that's out there.
0.0 Master Index.
0.1 A brief history of the *BSD family.
0.1.1 How close is NetBSD (or FreeBSD) to BSD 4.4?
0.1.3 Where can I get more information about the *BSD family of Operating Systems?
0.2 About this FAQ.
0.3 Are there any resources on the Net (like URLs) associated with the BSD family of operating systems?
0.4 How to add your pet answer to the FAQ.
0.5 Administrivia.
0.6 Does anyone reading this have any sense of humor at all?
1.1 Minimum hardware configuration recommended
1.4 Where to get the source and binaries
1.4.1 Where can I get the distribution on CD ROM?
1.5.3 *BSD system mailing lists.
1.5.4 System Updates.
1.6.1 BSD manuals
1.6.2 BSD books
1.6.6 The O'Reilly and Associates BSD 4.4 Set.
1.6.7 Other FAQ's on the net that are relevant
1.7.1 Official distribution sites
2.0 Install process
2.0.1 Boot disks (versions and media formats)
2.0.1.2a The floppy booted, but now the hard disk won't boot?
2.0.1.2b I am trying to reinstall. I run install and it loops asking me if I want to use the whole disk?
2.0.1.4 What are the options on the boot prompt?
2.2 Configuration
2.2.1 Partitions
2.2.1.1 What is a 'disklabel' and why do I need one?
2.2.2 Common Disk Label Problems.
2.2.2.1 Increasing the *BSD partition size.
2.2.2.2 I can access the DOS partition on my second disk from Unix but not DOS? Any suggestions?
2.2.2.3 I want to use my entire 2 Gig drive as the root partition. Why doesn't it work?
2.2.3 How do I get the system to boot from the second hard drive?
2.2.4 How do I disklabel my second hard drive?
2.2.8 What are the options for the boot up prompt?
2.2.11 I am having trouble getting net aliases to work. What could some of the problems be?
2.2.13 I want to hard wire my SCSI devices to a particular device number. Is that possible?
2.3 Common installation problems.
2.3.2 Endless reboot cycles.
2.4 The computer just sits there, or 'that isn't right'.
2.4.1 The boot disk works all right on one computer but not another.
2.4.2 Really strange errors in the various *BSD flavors.
2.4.2.2 Using the new code in NetBSD, I get a "panic: pdti 206067" in pmap_enter(). What should I do?
2.4.3a I get the error "isr 15 and error: isr 17" on an NE2000 card.
2.4.3b I have some card on IRQ2 and it doesn't work; why?
2.4.3c I am getting lousy performance out of my network card. What are some of the other possibilities?
2.4.5 Some of my SCSI devices (like a tape drive) don't work; why?
2.4.7 Is there a SCSI utility which works to fix up the random problems I sometimes have with my drives?
2.5 Other common problems that are attributed to the installation process but are caused other places.
2.5.1 I want to use more than 16 Megabytes of memory. Will any of the BSD based systems support it?
2.6 Customizing the system to meet my needs.
2.6.1 How do I get the system to not display the machine name, but display our company name?
3.0 System Internals
3.1 Kernel
3.1.1 How do I build a kernel?
3.1.1.2 How do I port NetBSD to another platform?
3.1.3 I want to build and profile a kernel. What do I need to do?
3.1.4 Now that I have a kernel, how do I install it?
3.1.5 My system is complaining about stray interrupt 7. Is my machine going to explode or anything?
3.1.6 I keep getting "wd0c: extra interrupt". What does it mean?
3.1.7 I keep getting silo overflow messages, but the system doesn't seem to mind. Is there a problem?
3.1.8 I found a bug in the kernel. How do I report it?
3.2 What exactly is this config file, anyway? What are all of these cryptic notations?
3.2.2 What should I remove from the kernel?
3.2.4 How do I get ddb, the kernel debugger, compiled into the kernel and running?
3.2.6 Can I patch the current running OS image?
3.2.7 Can I have more than one config file? Should I rename it to something else? Any other hints?
3.2.8.2 How do I dedicate 16Meg of memory to nothing but disk buffers?
3.2.9 Where can I learn more about all this?
3.3 Other kernel related kind of questions.
3.3.1 Has the method for system call changed in NetBSD?
3.3.4 Is there a Makefile that does all that happy world-building stuff?
3.3.5 Can NetBSD do cross compilation?
3.4 X11/XFree86/XS3
3.4.1 What options should I define to get the X extensions included?
3.4.2 Where can I get the FAQ for 'X'?
3.4.4 What can I do to figure out why 'X' doesn't work with NetBSD?
3.6 You promised to talk about timezones below. Are you going to?
3.6.1 How do you change the timezone on NetBSD (FreeBSD also?)?
3.8 Optional Op-codes for NetBSD, FreeBSD, and other systems.
4.0 Introduction
4.1 Common (sort of) Kernel-related problems
4.1.2 How do you implement quotas on Net/2 derived BSD systems?
4.1.3 What are the correct permissions for the /tmp, /usr/tmp, and /var/tmp directories?
4.2.1 Loadable Kernel Modules
4.3 Other program building type problems.
4.4 System Administration Questions
4.4.1 Where can I get good books about NetBSD or FreeBSD?
4.4.2 I am concerned about system security. What should I do to protect my system from net attacks?
4.4.3 How can I log failed login attempts?
4.4.4 Can I use a Concatenated Filesystem with NetBSD?
4.4.5 I am really new to Unix System Administration. I need some real basic help.
4.4.5.1 What is the System Administrator's user name?
4.4.5.2 I can't log in as 'su'. What does that message mean when I log in as root.
4.4.5.3 Are there any books I can 'bootstrap' myself with?
4.4.5.4 How about some code examples?
4.5.6 How do I change the default shell for a user?
4.5 Daemon questions
4.5.3 Are there any alternatives to 'NIS' available for NetBSD, et al.?
4.6 Adding new and removing old users.
4.6.1 Where can I FTP the 'adduser' program?
4.6.2 Where can I get a 'rmuser' script?
5.0 Introduction
5.1 A replacement curses program/library.
5.2.1 How do I get a bootable floppy?
5.2.2 How do I maximize the space on a mountable floppy disk.
5.3 Character Device Driver info
5.3.1 Printers
5.3.2 Terminals/Keyboards
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.
5.3.4 What is the trick for getting Kermit to work with rz and sz?
5.4 Tape Drives
5.4.1 Does the tape need to be formatted?
5.4.3 When is erst0 used?
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.4 Can I change the "record" size?
5.4.13 My tape drive doesn't work.
5.4.15 What are the jumper settings for the Archive Viper tape drive?
5.5 Network Stuff
5.5.1 How can I get my system to work as a network router?
5.5.4 How do I set up Multicasting on my system?
5.6 I want to use my ZIP drive. Are there any weird things I need to know?
6.0 Working with DOS and BNR/2 related software.
6.2 Sharing the Disk with MS-DOS
6.2.1 How can I partition my drive to support both MS-DOS and *bsd?
6.2.4 Is there any hope of ever running MS-DOS applications under any of the free BSD systems?
6.2.5 How do I get Linux executables to run under NetBSD?
6.3 Accessing the MS-DOS filesystem
6.4.2 How do I get around the NFS "Permission denied" error?
6.4.5 I get a lot of 'ring buffer overflow' messages using NFS and the ed0 driver. Is there a problem?
6.5 How can I use mtools with the 'new' floppy naming convention?
7.0 Communications
7.1 SLIP/CSLIP
7.2 PPP
7.3 TCP/IP
7.4 UUCP
7.4.1 TIP/CU
7.4.2 What is the magic incantation that allows the modem to dial?
7.5 How do I configure my nameserver?
7.6 Terminals
7.8 Can network attached assets be used by/from NetBSD? FreeBSD? OpenBSD?
7.8.1 Is it possible to Network boot a NetBSD machine from a network on a diskless Sparc?
7.8.3 How can I get ISDN to work?
8.3.3 What is the difference between baud and bits per second?
8.4.2 SCSI controller problems
8.5 SCSI Controllers
8.6 Network Cards
8.7 Printers
8.7.1 How can I print big files (especially from SAMBA, the WfWg network program)?
8.8 Tape Drives.
8.8.1 What are the jumper configurations for the Exabyte 8200 DAT tape drive?
8.10 CD-ROMs
8.10.1 How can I mount my CD-ROM so that it appears to be writable?
9.0 What GNU software has been tested and is working with Net/2 derived BSD systems for the 386?
9.1 Has anyone ever gotten news to work?
9.3 Has anyone tried to get Postgres to work?
9.4 Has anyone gotten the Java Developers Kit working?
9.5 Has anyone ever used any of the BSD systems for a Firewall?
In the beginning, there was Research Unix. Bell Labs, in a
moment of utter abandon said "Let us produce progeny of Unix.
yea verily, that we might garner a market share with this white
elephant." In order to beget as many pretenders to the Unix
throne as possible, they removed most of the copyright notices
and released huge gobbets of code to Universities throughout the
United States. From that humble decision came the very spark of
what has arguably become the most successful, completely free
Unix-style operating system you can make money on.
There were several version of BSD roaming around, but they all
had one thing in common. You HAD to have a source code license
to the original Unix source to get a working version going. The
bulk of the code was written at Berkeley, much of it by
long-haired computer geeks, complete with bad complexions and
pocket protectors. Many Master's Degrees were built on what was
to follow.
Then, suddenly, someone realized the amount of source code from
the original Unix distribution was pretty much down to zilch.
They decided that making the distribution available to the whole
world (not just the select Unix license holders) seemed like a
pretty 'groovy' (to use the vernacular) idea. From that came
the Net distribution.
William and Lynne Jolitz, with their standard flair and panache,
decided to write the pieces that needed to be written. From
that decision came 386BSD Version 0.0. Generally considered to
be unusable, it was nonetheless a major coup, in that one no
longer needed the dreaded 'source license' to produce working
operating system images. Version 0.1 (generally considered to
be the progenitor of all of the subsequent PC BSD systems) was
released on Bastille Day, 1992.
386BSD 0.1 eventually came to be. Linux, the other entrant in
the Free Unix-style OS family, had been running for about a year
by then. Many people, wanting to stick with code that they
already knew and which was in use in the commercial sector,
decided to start using (and fixing) the 386BSD 0.1 code. As such,
many contributions to the system are provided through interaction
by people who communicate via many means. Many new and innovative
features have been added to 386BSD since it's original release in
July of '92. There was an 'unofficial' patchkit which was available
from many anonymous FTP sources which made 386BSD more stable and
usable. Many problems associated with the use of 386BSD Version
0.1 were solved through the application of patches from the
patchkit. Now, more or less overcome by events, the original
386BSD, with its relationship to the AT&T/Berkeley out-of-court
settlement, has become a rare piece of code to find. With some
of the code considered 'suspect', it was removed from FTP sites
world-wide.
To replace the original 386BSD, three newer versions of the
system are available, under new names. NetBSD is the oldest,
FreeBSD followed shortly thereafter. Both systems have evolved
into programs that are superior to their progenitor and both
have sizable (if a little rabid) followings. The third entry in
the group is a fairly recent entrant, called OpenBSD.
Most of the statements made in this FAQ will apply to all three
of the replacement systems, although I will try to differentiate
one from another whenever the difference matters. Any place
that says 386bsd either means the original 386bsd 0.1 or any
of the members of the PC BSD family.
There have been many attempts to polarize the *BSD development
groups in the past. One of the reasons that I am still
maintaining the FAQ is that it simply is a good source for
historical information, as well as a reasonable source for
information that is specific to the implementations of NetBSD,
FreeBSD, and OpenBSD.
It should be remembered that when the *BSD family started out, Bill
and Lynne used a source called the "Berkeley Net Release/2" tape
as their foundation. While this provided a stable starting point,
it also built a possible bomb into the system. Due to a legal
battle (which has now been resolved) the following files are
identified as 'encumbered' in the BNR/2 source tree. These
kernel files are identified as the 'binary only' files in the
BSDI distribution, and either have been or must be replaced
before we can have a truly free OS family. These files are the
primary reason you won't find the original 386BSD Version 0.1
available for FTP anymore.
If you take a look at the README files that accompany each of
these packages, you will find that each is based as closely as
possible to BSD 4.4-Lite. The core development team for FreeBSD
used the 4.4 Lite distribution and re-engineered the missing
pieces to come up with the the current version of FreeBSD. The
NetBSD developers started with the existing 386BSD files, and
compared them to the unencumbered, freely releasable files from
BSD 4.4. For both groups, any files which were not available
(through being encumbered) were written from scratch to provide
the functionality that was needed. Either way, both systems are
close to BSD 4.4. Of course, each has differences that make it
different from the other, and different from regular BSD 4.4.
Here are the current members of the *BSD family. These are
presented in alphabetical order, to avoid implying anything.
386BSD - An older version of BSD now targeted exclusively at
the research and academic community. CD distributions only,
sold by Dr. Dobb's Journal.
FreeBSD - A version of BSD for Intel platforms only and targeted
at a broad user base. See http://www.freebsd.org for details or
ftp://ftp.freebsd.org/pub/FreeBSD for the latest release.
NetBSD - A version of BSD for many different platforms, from
Intel to the 68K to the DEC ALPHA. See http://www.netbsd.org for
more details or ftp://ftp.netbsd.org/pub/NetBSD for the latest
release.
OpenBSD - Another version of BSD. See http://www.openbsd.org for
more details or ftp://ftp.openbsd.org/pub/OpenBSD for the latest
release.
This FAQ consists of several parts:
Section 0. Basic FAQ information
It has been suggested that I remove some of the older, less
relevant information from this FAQ. I have given it some
thought, and I might. Of course, if someone were to do it for
me, it sure wouldn't break my heart.
Jordan Hubbard, one of the FreeBSD core team members, has
offered this missive on that very subject:
[ Note: You could very well simply substitute the word
"NetBSD", "OpenBSD", or "Windows 95" for "Linux" in the
argument that follows ]
From time to time, a thread in both the comp.os.386bsd.misc and
comp.os.linux.misc groups flares up regarding which operating
system is "better", FreeBSD or Linux. This generally provokes
controversy from users on both sides, with one group claiming
that their OS is "better" for some reason and the other group
claiming that the first group doesn't know what the heck it's
talking about.
Both arguments are a waste of time.
Rather than trying to win a rather questionable debate on
relative (and constantly changing) technical merits, we should
be asking ourselves what both groups are REALLY about and what
they represent. This is naturally going to be a matter of
personal opinion, but I believe even the most seriously at-odds
members would agree that both operating systems represent a
unique and long-awaited opportunity: The ability to run a fully
featured operating system on popular, easily affordable
hardware and for which all source code is freely available.
Those who have been in computing for awhile will remember when
the term `operating system' referred almost exclusively to
something provided solely by the hardware vendor, with very
little in the way of alternative options. It was never EVER
given out with source code, and true "wizard" status could only
be achieved by exerting mind-numbing amounts of effort and
patience in digging through forbidden bits of binary data. By
comparison, the situation today seems almost too good to be
true! Certainly, the feeling of achievement that came from
finally ferreting out some esoteric bit of information from a
4MB printed system dump was high, but I don't think that anyone
would argue that it was hardly the most optimal way of truly
getting to know your operating system! :-)
So now, within a very short space of time, we're almost spoiled
for choice in having machines several times more powerful than
the first multi-user VAX machines and available for under
$2000, and we've got not one but SEVERAL perfectly reasonable
free operating systems to chose from. We are in a comparative
paradise, and what are some of us doing? *Complaining* about
it! I suppose too much is never enough, eh? :-)
So, my essential point is simply this: For the first time ever
we have what previous computing generations could only dream
about; powerful computers at a reasonable prices and a
wonderful selection of things to run on them. Be happy, read
the source code you're so privileged to now have available
(*believe* me! What I wouldn't have given, even 5 years ago!)
and spend your energy in making constructive use of it, not in
arguing with the guys on the other side of the fence!
Additionally, it should be said that none of the FreeBSD team
has anything but the highest degree of respect for Linus
Torvalds and his "team" of dedicated volunteers (and we
occasionaly exchange gripe mail about the huge volume of
messages each of us gets as a direct result of being insane
enough to volunteer to do something like this :-). Our common
commitment to the Intel platform also gives us more common
ground (and interests) than one might think and, if anything,
it's a pity that we do not endeavor to share more code and
effort - ideologically, at least, I'd say we share pretty
similar goals.
As to which is "best", I have only one standard reply: Try them
both, see for yourself, think for yourself. Both groups have
given you something for free, at considerable personal effort,
and the least you can do is give them the benefit of exerting
enough effort to try what they're offering out before passing
judgment (or worse, blindly accepting someone else's!).
Whichever you run, you're getting a great deal - enjoy!
Jordan Hubbard
Yup:
http://www.public.iastate.edu:~gendalia/FAQ/FAQ.list.html
http://www.freebsd.org/
http://www.openbsd.org/
http://rfhs1012.fh.uni-regensburg.de/~feyrer/
http://www.cd.chalmers.se/~nh/netbsd.html
http://www.flame.org/netbsd/projects
ftp://ftp.uni-regensburg.de/pub/NetBSD-Amiga/.index.html
ftp://ftp.cdrom.com:/pub/FreeBSD/packages/WWW.tgz
ftp://ftp.netbsd.org:pub/NetBSD/mailing-lists
ftp://flick.lerc.nasa.gov:~ftp/pub/NetBSD/packages/i386
ftp://ftp.iastate.edu:/pub/Netbsd/FAQ
http://sirius.ics.es.osaka-u.ac.jp/~kamahara/NetBSD-X68060
http://wwwipd.ira.uka.de/~frueauf/FAQ/NetBSD-Amiga-X-FAQ.txt
IF you are going to be using IRC in the near future and want to
talk to some of the movers and shakers in NetBSD, the next time
you log in look for one of the following people:
This is the trickiest part of this section of the FAQ. There are
only two criteria for getting an entry made into the FAQ:
1. Your answer should answer a question that seems to come up
with some regularity, or at least perplexes a group of
people from time to time.
2. Your answer should be technically correct. In other words,
answers like 'RTFM' and 'everybody knows that' are not really
good candidates for the FAQ. These answers should spell out,
in a reasonable level of detail, precisely how to fix the
the question asked, or explain the basis for the answer and
leave the implementation of the answer to the questioner.
All answers MUST include a question. This is not as obvious as
it would seem at first glance. An answer could solve many
problems, especially in the realms of system halts or other
catastrophes.
Since I (Dave) am no Unix guru, I rely HEAVILY on the input of
other people to make the FAQ a success. Many questions in the
FAQ have been made largely irrelevant through the patchkits, but
that doesn't means they may not reappear. That is why the old
FAQ questions are still here.
New FAQ questions should be added. I will try to attribute the
question/answer to the author, but I personally think this is a
waste of good disk space. As long as the answers get out, that
should be reward enough :-)
Send all question/answer pairs to burgess@cynjut.neonramp.com,
If you are going to post the Q/A to the net, then do that, but
be sure to mark it as a FAQ entry. I will get it from the net
as easily as I do my E-Mail. Your Q/A will be formatted to
look more or less like the others and be added. Corrections,
deletions, flames, snivels, and whines should be addressed
directly to me here. Either way, I will be sure to send out a
reply letting you know what I have done with your submission.
One last thing. I will assume that I am infalible. :-) I will
not notice any mistakes that you may find. If you find a
mistake and don't tell me, it will very likely stay a mistake.
After all, if I didn't notice it before, why should I notice
it now?
I'm not sure. While reasearching the great 'Linux vs. everyone
else sucks' debate, I received this in E-Mail. The author's
identity has been removed to protect him from the mail-bombs.
For the humor impaired, stop reading now!
Many people ask the question "Which is better? FreeBSD, NetBSD,
OpenBSD, or Linux?" Up until now, not many people are willing
to answer thoroughly and give reasons. I, being a brave soul,
am. This mini-FAQ lists the most significant differences
between Linux, NetBSD, and FreeBSD in a fair and evenhanded
manner. Permission is given to redistribute this mini-FAQ
freely, with attribution. If anyone wants to take the burden
of posting it periodically on the appropriate newsgroups, be
my guest.
This is based on a message I wrote some months ago. I've
tried to update it substantially to reflect the changing
nature of x86 OS's.
A) NetBSD is the best of the three because of it's superb
error handling capabilities (this is the "Net" referred to
in the name). With NetBSD, it's almost impossible to make
a mistake, either in installation, or operation, because the
system will "catch" you as you "fall". NetBSD works on a
wide range of processors, including the Intel 386, 486, and
586, the Sun, Sparc, SGI, MIPS, Macintosh, Motorola 6809,
Krupf, ADC Kentrox, Whirlpool, Amana, Zilog Z80,
Timex-Sinclair, and the Braun. Currently, the NetBSD team
is devoting all of their energies towards finishing the
all-important IBM RT port.
Linux is the successor to an operating system called "Minix".
Linux was developed by Linus Pauling, a Finnish communist.
Linux tries to uphold traditional Marxist values in several
ways; firstly by using GNU tools from the FSF foundation
wherever possible. The Linux kernel is developed by committee,
and the operating system reflects this: rather than having one
"init" process which fathers all others, a group of co-resident
processes with equal powers are created simultaneously. "Kill"
commands are treated as formal protests. Linux networking has
come a long way since it's implementation, and there is no truth
whatsoever to the rumor that sudden losses of IP connectivity
are in any way related to future plans to limit users to 1.5
hours of SLIP or PPP unless they send in the registration fee.
FreeBSD was a radical offshoot of the Linux project; you could
consider it to be of the Trotskyite school. FreeBSD supports
an extremely wide range of PC hardware, as long as it was
obtained at less than cost. FreeBSD is used by Amnesty
International and many other human rights organizations.
FreeBSD supports every peripheral available for the IBM PC
except the ones you have. The FreeBSD team was actually
responsible for porting "Doom" to Linux, in a successful
effort to slow down constructive work by distracting the
central committee with frivolous games. FreeBSD has the
nicest installation of any of the x86 unices -- you install
the boot disks, which then initialize the modem and call
Jordan "Perky" Hubbard, who then comes to your house with the
rest of the disks and completes the installation. The FreeBSD
CD-ROM plays various Nick Cave and Tom Waits songs Jordan is
known to be fond of.
386bsd was written by Bill Jolitz in a fit of pique. It was
based entirely on Sun's widely-respected "Solaris" operating
system, as revenge against Sun's Bill Joy, who rudely chose a
name with the same initials as Jolitz. A new version of 386bsd
will be released very soon. Unfortunately, it will only run on
386es, and thus is unsuitable for anyone with a 486 or Pentium.
486bsd should be released "sometime in 2138," according to
industry insider James Monroe, Sr.
DID YOU KNOW?
=============
1) The Free and Net BSD teams split up in the year 1632. The
cause of the split is uncertain, but it seems to have something
to do with someone named "Janice." They still get together for
drinks occasionally, and remember old times. Every so often,
after tying on a few too many, they end up waking up next to
each other and feel ashamed over their night of pleasure. The
kids still blame themselves.
2) The Linux kernel has actually not changed at all since January,
'94? Linus just increments "version.c" once every 48 hours and
unleashes the "change" on an unsuspecting Internet, bringing FTP
servers to their knees. A book, "The Design and Implementation
of the Linux Operating System," by Gary Marshall James T. Kirk
McUsenet, was rejected by Addison-Wesley on the grounds that they
didn't feel the public was prepared to purchase a book written
on looseleaf paper with diagrams in crayon.
3) All three systems claim to be "POSIX" compliant. However, the
POSIX people have denied knowing anything about it. Scuttlebutt
in the industry is that POSIX will soon be outdated, and will be
replaced by GNOPIX, a FSF standard which implements the TOPS-20
operating system in Scheme.
This section of the FAQ is about the electronic support network
that exists for 386bsd and its off-spring.
Yes. Get FreeBSD, OpenBSD, or NetBSD.
There has been considerable debate about what the REAL minimum
configuration for *BSD is. Some would claim that it is the
smallest computer that an installation will succeed on. Others
claim that it is the smallest usable computer (based on RAM and
speed constraints) and others would claim that it should be
based on using 'X'-windows.
The smallest installable platform is an 80386, using an MGA card,
with at least 4Meg of RAM and a 40 Megabyte hard disk. While not
all SCSI cards (especially EISA) are supported, a great many are
either in the base distribution or through patches. Thanks to
the shared library code in FreeBSD and NetBSD, a 40Meg
installation should be easier now (in spite of the more advanced
functionality) than it ever was before.
A comfortable installation which includes source and binary
distributions, as well as other utilities will work in about
100Meg of hard drive.
'X' requires at least a Hercules MGA; for masochists only, from
what I understand.
See section 8 for more details.
In a new joint venture, John Cargille, DiscNet, Inc., and
InfoMagic, Inc. are pleased to announce their joint release
of the BSDisc. This collaboration should be beneficial to
all of our customers, since it brings to bear more experience,
more support capability, and economies of scale in production.
The BSDisc is scheduled to ship every six months or so. The
current (November 1995) disk is a two CD set with the following:
- NetBSD 1.1
- distribution sets for x86, sparc, mac68k, and amiga
The BSDisc is available both for single-issue purchases, or on
a buying plan. Single-issue price is $35.00; subscription pricing
is $19.50 (or less) per issue, for a minimum length of 3 issues.
(Those prices do not include S/H.)
For single-issue purchases, contact InfoMagic at:
DiscNet, Inc. +1-608-846-9838
841 Acker Pkwy
DeForest, WI 53532 email: bsdisc-info@grilled.cs.wisc.edu
bsdisc-orders@grilled.cs.wisc.edu
European subscriptions, email: bsdisc@altona.ppp.net
I received this note from Jordan back in 1993. It is now sorely
out of date, since there have been many releases of FreeBSD
since then. The ordering info is still correct.
While I will _always_ encourage obtaining FreeBSD through "free"
channels (the Internet, friends, suspicious individuals in dark
alleys), and given that none of us will make any money from CD
sales, or ever have from FreeBSD in general given that WC's
sponsorship is confined to the loan of centralized development
hardware and network access, I still hope that some of you will
find the CD distribution medium convenient enough to order a
FreeBSD CD from Walnut Creek, thus indirectly supporting our
future development work.
If this marriage between commercial and free software interests
proves to be mutually beneficial (which still remains to be seen,
from Walnut Creek's point of view), it is my hope that it may serve
as a model for similar future endeavors. It is an unfortunate fact
that developing free software at this scale costs money, even with
the developers donating their time and efforts, and financing some
of it through the sale of convenient distribution media is one of
the least venal ways I know of going about it.
This CD contains a full FreeBSD 1.0.2 source & binary release, the
sources and binaries for XFree86 2.0, and numerous sources from the
FreeBSD "ports collection". Where space permitted, sources were
provided in both "packed" and "unpacked" forms for easy access both
as an on-line resource and as a source for compressed downloads in BBS
or release-construction situations. The CD is fully ISO9660 compatible
and has been mastered using RockRidge extensions for long filenames on
systems that support it (like FreeBSD! :-).
It is, of course, possible to install the system off the CD from
scratch, given some basic willingness to read a little documentation
and a few blank floppy disks. [ Ed Note. You would be surprised the
number of people that do not see this paragraph...DBB]
For the sake of convenience, I append the ordering information
distilled from FreeBSD's /usr/src/RELNOTES.FreeBSD below.
Walnut Creek CDROM
4041 Pike Lane, Suite D
Concord CA 94520
1-800-786-9907, +1-510-674-0783, +1-510-674-0821 (fax)
Or via the Internet from orders@cdrom.com. A current catalog can
be obtained via ftp from ftp.cdrom.com:/cdrom/catalog.
They accept Visa, Mastercard, American Express, and ship COD
within the United States. California residents please
add 8.25% sales tax.
roman@public.btr.com (Roman Yanovsky roman@btr.com) sent in this
note. I have edited it down some, but left in the bulk of the
stuff in case you need more information:
Subject: Linux Slackware and FreeBSD CD-ROM with X-windows etc.
Trans-Ameritech presents "The best Linux plus FreeBSD CDROM ever"
[ Linux stuff deleted ]
* For hacker's reference an uncompressed FreeBSD source tree is
provided.
* On the BSD side there is a full source and binary distribution
of the "final" FreeBSD 1.0
* If you have questions or problems Trans-Ameritech provides free
support via e-mail within 24 hours.
* We ship the same day as we get the order.
The new CDROM is available for $30 plus shipping/handling. If you
are a current customer, it is only $20. New releases will be
available every 3 month. Subscription is available.
Tel. 408/727-3883
This information is offered with no warranties, guarantees,
franchise offers, or recommendations.
With the elimination of the old 386bsd mailing lists, the only
mailing lists that are still available are the ones for FreeBSD
and NetBSD. Information about the NetBSD lists and how to use
majordomo (the list handler) is available by mailing to
majordomo@sun-lamp.cs.berkeley.edu.
FreeBSD-hackers: for hackers
FreeBSD-questions: misc questions
FreeBSD-bugs: bug reports
FreeBSD-current: discussion of -current (in development)
Send to FreeBSD-hackers-request@freefall.cdrom.com to be added
to the hackers list, and *-questions-request@freefall... to be
added to the questions list.
For information about the NetBSD mailing lists, see the NetBSD
Mailing List FAQ that is posted regularly by Chris Demetriou in
comp.os.386bsd.announce.
There are at least two different ways of getting the updates
for the current source tree for both FreeBSD and NetBSD. The
first is the traditional FTP method, and the other is using a
utility called 'sup'. This program keeps a log of the source
modules that have been updated and sends out only those files
that have been changed. Included below are some sample
instructions from John Brezak <brezak@apollo.hp.com> on how to
run sup for NetBSD. The sup procedures for FreeBSD are similar
and are available via ftp from freefall.cdrom.com in the
~/ftp/pub/sup directory. This directory contains the sup
program, a man page, a sample sup-file and full instructions
for maintaining your sources via 'sup.
There are two types of documentation for *BSD. First is the
set that covers the operation and theory used in BSD-Unix.
The full set of BSD documentation is available via anonymous FTP
via ftp://ocf.berkeley.edu/pub/Library/Computer/doc4.3. To print
this documentation on *BSD systems, replace the ditroff
references in the Makefile with 'groff -e -t -msU {SRC} >out.ps'
to generate PostScript format files. Use different options to
make the output conform to other print styles.
The etc distribution also comes with a documentation directory
/usr/share/doc which has nearly 3Meg of documentation about *BSD.
In addition, on-line manuals are available in the binary
distribution set. It contains specific information on the use
of UNIX utilities and commands. Type "man man" for information
on the online manual.
For learning how to work in the Unix environment, the standard text
is "The Unix Programming Environment," by Kernighan and Pike.
For Unix Administration, the best is "Unix System Administration
Handbook," by Nemeth, Snyder and Seebass.
For systems level programming (i.e., systems calls), I recommend
"Advanced Unix Programming," by Marc Rochkind. Unfortunately it is
out-dated and oriented towards System V.
A new book "Advanced Programming in the Unix Environment," by W.
Richard Stevens is very up-to-date, and an excellent reference,
especially for dealing with POSIX standards issues.
For network programming, "Unix Network Programming," by W. Richard
Stevens is highly regarded.
The 4.3BSD Unix Manuals contain loads of invaluable tutorials and
historical papers in addition to hard copies of on-line documentation.
The six volume set is available from Usenix for $60.00 (email:
office@usenix.org)
The 4.4 BSD Unix Manuals are the authoritative source for
information about the 4.4 BSD release, and by inference the
NetBSD and FreeBSD systems. They are available from O'Reilly
and Associates (the Nutshell series people). In addition the
the six volume set, there is a CD included (at a price) of the
entire 4.4 release. Combine this with the NetBSD 1.0 or FreeBSD
2.0 systems, and you should have a commercial quality operating
system available in no time.
I recommend you look at "The AWK Programming Language," by
Aho, Weinberger and Kernighan. This is a very nice prototyping
language - powerful and easy to use.
Another excellent reference book for *BSD is "The Design and
Implementation of the 4.3BSD UNIX Operating system" by Samuel J.
Leffler, Marshall Kirk McKusick, Michael J. Karels, John S.
Quarterman, 1989, Addison-Wesley, ISBN 0-201-06196-1. While this
book is out of date in many sections, it is purported to be an
excellent source of historical information, if nothing else.
Chris Demetriou recommends the sections on the treatment of
file systems, caching and the networking layer. The sections in
this books which do not apply to *BSD include the VM section,
bootstrapping, and autoconfig.
Here is a list from Hellmuth Michaelis (duplicative as it may seem
to have all of these lists) for more information on *BSD:
Bell Telephone Laboratories, Inc. "UNIX Programmer's Manual, Seventh
Edition, Volume 2". Revised and Expanded Version.
George Pajari, "Writing Unix Device Drivers"
Addison Wesley 1992
Janet I. Egan and Thomas J. Teixeira, "Writing a UNIX Device Driver"
John Wiley & Sons 1989, especially the 30 page appendix
Janet I. Egan and Thomas J. Teixeira, "Writing a UNIX Device Driver"
Second Edition. John Wiley &*BSD1992
Leffler, McKusick, Karels, Quarterman, "The Design and Implementation
of the 4.3BSD UNIX Operating System"
Leffler, McKusick, "The Design and Implementation of the 4.3BSD UNIX
Operating System, Answer Book"
Leffler, McKusick, Karels, Quarterman, "The Design and Implementation
of the 4.4BSD UNIX Operating System"
Maurice J. Bach, "The Design of the UNIX Operating System"
Prentice-Hall 1986
Sun Microsystems Inc., "Writing Device Drivers"
Part No. 800-3851-10, Revision A of 27 March 1990
Hewlett-Packard Company, "HP-UX Driver Development Guide",
Part No. 98577-90013, First Edition 07/91
W. Richard Stevens, "Advanced Programming in the UNIX Environment",
Addison Wesley 1992
Phillip M. Adams, Clovis L. Tondo, "Writing Unix Device Drivers in C",
Prentice Hall 1993
Peter Kettle, Steve Statler, "Writing Device Drivers for SCO UNIX,
A Practical Approach", Addison Wesley 1993
There is also some documentation associated with the pcvt
console driver. Since this documentation is part of the normal
distribution on both FreeBSD and NetBSD, and DOES document a
device driver, it should be considered a good source for more
insight into writing device drivers.
O'Reilly and Associates puts out a five book series that
includes all of the documentation for BSD 4.4. In addition,
they also sell a CD-ROM with all of the publicly releasable
BSD-4.4 code that is available. These books are good references
(perhaps not perfect, since many changes to the system have been
made even since these books were produced) but they do provide a
great deal of background and rationale for the system and the
history for much of the system.
Most FAQs are available by anonymous FTP from rtfm.mit.edu and
via Usenet News in news.answers and/or comp.answers. This FAQ
is no exception (I hope).
FreeBSD's 'home' is FreeBSD.cdrom.com (the home disk of Walnut
Creek). The portions of FreeBSD (versions less than 2.0) that
were encumbered are distributed with the tolerance of
AT&T/USL/Novell/SCO/whoever owns the source for SysV this
week. All FreeBSD versions (with version number >= 2.0) are
based solely on the freely redistributable BSD 4.4 sources.
NetBSD's 'home' is now ftp.NetBSD.Org. All versions of
NetBSD since 0.9 have replaced the kernel code from the 4.3
distribution with the source from the 4.4 distribution. The
only code still in NetBSD from the 4.3 distribution is some user
program code that was uncontested in the USL/UCB agreement.
OpenBSD's 'home' is ftp.openbsd.org. It was based on NetBSD
Version 1.0, so it is (by definition) clean. There are (at
least) two things which differentiate OpenBSD from NetBSD.
One big difference here is that nearly anyone can write
changes to the kernel code in the -current line and make
their updates available. Another is OpenBSD is hosted in
Canada, and therefore has no export restrictions on any of it's
code (specifically the encryption code for DES).
Once the files are on floppies, thoughts usually turn to
questions about how to install the boot image on a floppy. The
rawrite program (for DOS) is used to write the bootable images
(dist.fs and fixit.fs) onto floppies. The same image can used
for 3 1/2 and 5 1/4 high density diskettes. NetBSD uses the .fs
file extension for its floppy images. FreeBSD uses the .flp
extension.
Once the bootable images are written onto the floppies, insert
the dist.fs disk into the A: drive and reboot. If the system
does not boot, see section 2.5 below for more information.
If the disk boots, type install and proceed to use the
INSTALL.NOTES to get more information.
Problems with the install are either related to hardware (i.e.
Do you want to install on your T.V.?) or software. Of the
hardware issues, the most common FAQs are usually straight out
of the installation notes. Of the software issues, there are
only two that really concern us. The first is bad files.
On some systems, files that are loaded from floppy appear to
'go bad' when they arrive on the hard disk. Try some of these
solutions:
- You forgot binary. Don't get insulted. Those of us that FTP
for a living forget sometimes. If so, the distribution will
come out with all different sizes and install will complain
about every disk.
- One or two of the files are no good. Try getting them again.
As a precaution, rename the bad files on your hard drive to
names like foo.1 and bob.23. Copy the files again from floppy.
If they are still bad, rename the file, and the one immediately
before the first bad file (bin01.23 if bin01.24 is bad) and
copy them again. If they are still bad, download those files
again from the distribution site (including the one before and
after the bad one) and try again.
The reason for renaming the files is that sometimes, especially
with drive that do not auto-magically record bad sectors, you
could copy a distribution file onto a bad spot on the disk. If
this happens, you want to isolate the bad spot. The easiest way
to do that is just leave the bad file on it.
For those of you that have received your system on a CD-ROM,
you will need to find at least three things. One is this file.
Since you are reading it, I assume that you got it already. :-)
If you can't read this file (you got it from the newsgroup, for
example) there is one thing that you need to know so you don't
look like a complete idiot on the net.
There is no such thing as a Unix CD-ROM. They are all in
something called the ISO CD-ROM format. You can read them as
the D: drive in DOS, or mount them on your Sun or SVR4 system
or whatever.
Second, you will need to find the directory with the bootable
disk images in it. They will have self explanatory names like:
You get the idea, right? Look for the MS-DOS program
"RAWRITE.EXE". It should be right near the file system (.fs)
files. Another clue for the truly lost will be that the file
system files will all be 1.2 Meg big. These files will fit
onto either a 1.2Meg 5.25 inch diskette, or a 1.44Meg 2.5 inch
diskette. Use rawrite to write the fs files to diskettes and
boot from the diskettes.
The FreeBSD system uses a system 'pretty much' the same as this,
except that the filesystem files are 1.2 Meg files and they all
have a '.flp' extension. Other than that, the instructions
apply.
You did back your system up, right?
For those of you trying to build installation floppies, you
will need to verify the media type on the 'dd' and 'disklabel'
commands in the Makefile. The default is to build to 1.2 Meg
disks (being the smallest in terms of room). Change the 12100
and floppy5 entries to 14410 and floppy3 (respectivly).
When installing NetBSD, the 'set_tmp_dir' and 'extract' programs
are part of the .profile that is booted when you are installing.
This .profile is overwritten as part of the install process, and
extract then disappears. If you need extract again, you can mount
the install disk and source .profile. This will recreate these
two routines.
There is also an install procedure that FreeBSD uses that does
the same job. It is defined as part of the .profile on one of the
installation floppies. You can either copy it from there, or use
the procedure for 'real disk partitioning'.
Failing that, you can use the following process to extract the
sources.
- First, 'cd' to where your files are.
- Assuming you want to extract the kernel sources, use the
following command to extract the files:
"cat ksrc* | tar -xvf - -C /"
This will combine the pieces, feed them to tar, and load the
files in the 'standard' place.
The most likely culprit is your hard disk controller. If you
have an IDE or EIDE controller, it is probably doing some type
of disk translation for you. If this is the case (assume it
is) then you will need to find out the real disk controller
geometry, and rewrite your disk label. See section 2.6.2, but
before doing that get the program pfdisk.exe. This program
will tell you what the controller geometry is (right before
it reboots your computer). Make the disklabel agree with
this program and your system should boot. You may have to
reinstall, but at least your disklabel will be right. Note
that this is a nearly required step for all NetBSD and
FreeBSD installs. You need to know what the disk geometry
is before the BIOS messes with it. If you start having these
kinds of installation problems, I can virtually assure you that
it is because your controller geometry and your disklabel
geometry are different.
NOTE: If the hard disk controller does NOT have an option for
turning off the geometry, you may well be completely out of
luck. There are very few controllers that fall into this
category. The ones that do full time translation will often
boot up in translated mode. pfdisk will help you determine the
correct geometry for your drive by telling you what the geometry
looks like when 386bsd boots up.
But on the other hand, maybe not...
See section 2.5.5 below for a detailed set of instructions about
getting NetBSD (and by implication 386BSD and FreeBSD) to work with
a system that uses full time translation.
The most amazing thing about the boot process in *BSD is the
boot up alternatives that are available. There is little that
a person can NOT do from the boot prompt. The boot diskette or
disk can be selected (fd(1,a) for fd1a (my B: drive is DOS))
can be the source of my kernel. In addition, the name of the
kernel can be chosen (this allows you to boot with a test
kernel or reboot an older kernel if the new one gets hosed).
Finally, there are three choices for options that may or may
not work, depending on the age and proclivities of your boot
blocks. These options are documented in 2.5.9 below.
In single-user (system booted with -s or an error in one of
the processes started by /etc/rc) the root filesystem mounts
as read-only by default. This was intended so that some range
of problems would not be made worse by writes to the disk.
The 'dos' partitions mount as read-only in that there are
reservations as to how well some of the FreeBSD tools work with
the pcfs. The same kind of reservations exist with NetBSD and
the '-t msdosfs' option. These options (-r for read-only, -w
for read-write) can be set in /etc/fstab.
The status of both can be changed with 'mount -wu /{mount.dir}'
(where {mount-dir} is the name of the directory that the
offending partition is mounted) to read-write. Particularly for
the dos filesystem, the man page for mount should be read in
detail and the 'noexec' option examined.
Note that mounting the file systems using the '-a' option will
mount all of the file systems that are normally mounted with
their usual read-write bits set normally. Using this option
makes your root partition writable, and also mounts the rest of
the partitions in your /etc/fstab that are normally mounted
during boot-up.
There is an unusual problem when installing over NFS. This
solution may have been corrected in the documentation that comes
with FreeBSD and NetBSD, but if not, here it is.
The most common problem seems to be that FreeBSD (and by
inference NetBSD and all the other 4.4 based systems) do not
send out NFS requests over privileged ports. Sun's NFS
implementation (and others, once again by inference) expect
precisely the opposite. These systems will quietly fail if you
try to NFS to them.
The usual error message (which may ONLY appear in
/var/adm/messages) is "nfs_server: weak authentication, source
IP address=xx.xx.xx.xx"
SunOS is particularly insidious at this point. The mount
succeeds, but then everything else after that fails. This means
that your FreeBSD or NetBSD system will return an EACCESS error
whenever you try to grab a file from the NFS filesystem. The
solution (tested in FreeBSD) is to include the 'resvport' flag
like this:
In fact, the -P flag provides a solution to the FreeBSD NFS
installation problem. When prompted for server/filesystem, type
in the flag before the server/filesystem pair:
If you are using an 8-bit network card, and want to avoid the
ring buffer overflow problems that seem to come standard with
this class of cards, you can also include the "-r4096 -w4096"
flags between the -P and the server.
By far, the most common configuration questions are partitioning,
followed closely by all of the other software in the system.
Sendmail and named are also problems occasionally, but the
documentation that comes with them usually gets you through. If
you run into a problem, post a question to comp.os.386bsd.questions.
A less frequently asked question is "Where can I get info on how
to configure a kernel?" The answer to this question has been
provided by Richard Murphey (Email address rich@Rice.edu).
smm.02.config.ps.Z describes kernel configuration for the VAX,
however some of it is relevant to 386BSD. There is no freely
available rewrite for 386BSD that I know of.
Most of these manuals are now included in the standard release of
NetBSD and FreeBSD in the /usr/share/doc directories.
This section describes many of the questions that people ask about
hard disk partitioning.
The first is a brief explanation of the BSD system disk partitions.
The BSD partition table supplements the DOS partition table. The
entries in this table are meaningful to BSD. There are eight
partitions in the BSD partition table, and they are normally
lettered from a: to h:. This supplemental partition table is
often referred to as the 'disklabel'.
There have been many good articles in both the mailing lists and
the newsgroups about disk labeling and partitioning. I have
included a few of them here. NOTE: This information has not
really changed since 386BSD 0.1. Some of the specifics may be
out of date (the use of the d: partition, for example) but the
steps and information are still pertinent.
Phil Nelson (pail@cs.wu.edu) writes:
I have installed several disks that have > 1024 cylinders and
have used both DOS and NetBSD. What has worked for me EVERY TIME
is the following:
a) Tell the BIOS that you have 1023 cylinders and the correct
geometry for heads and sectors. (This will limit your DOS part
of the disk to be LESS than the first 1023 cylinders.) You need
to have ALL of your partition A (/dev/wd?a) in the first 1023
cylinders so that the boot program can read the kernel from
the root partition using the BIOS routines. (ed note: You can
specify the full number of cylinders in some BIOSes and it won't
make any difference. The DOS part of the disk will always be less
than 1023 cylinders.)
b) With fdisk, partition your 1023 cylinders as you want them.
c) Use the real geometry in NetBSD. Once the NetBSD kernel is
booted, it does not have the 1024 cylinder limit: that is only
for the BIOS. NetBSD only looks at the BSD disklabel, not the
DOS disk label. The two disk labels (DOS and BSD) may not agree
on the BSD partition size! This isn't a problem, since each
system's idea of the disks geometry is based on different
information.
d) Use NetBSD!
Chris Jones writes:
I was getting different reports of disk geometry from different
programs, so I opened up the computer and read the plastic label
on the drive. I then instructed the BIOS (which, when using
auto-detect disagreed) what the disk geometry was. Then, I
used pfdisk to create partitions. The first thing I did with it
was to tell it what the geometry really was. It said something
about a symbolic mapping and dealt with it. Then I was able to
specify all partitions in real units instead of virtual ones.
NetBSD boots fine, and if memory serves, it is the only program
that has recognized the real disk geometry from the beginning.
This tutorial is provided by by "Hacksaw" <hacksaw@user1.channel1.com>
and provides an excellent overview of the hard disk partitioning
procedure from start to finish.
"Disk Partitioning for the Compleat Idiot"
There are times, in our trials with our computers, that it becomes
necessary to mess about with the disklabel. For those not
knowledgeable of BSD or Unix Systems administration, this somewhat
simple task can be somewhat daunting. This document is the result of
my own short experience.
This does not cover physical installation of the disk. For those who
are having trouble with that, I direct you to any of the fine manuals
dealing with hard drives and your hardware.
It also does not deal with the vagaries of the DOS partition manager.
It assumes you have done that as well, if need be...
After the drive is physically installed and is recognized in the BSD
startup, and it mentions both your drives, in the order you expect
them... Or perhaps just the one, if you had special problems with
installation. Now all you have to do is "disklabel" the drive... Well,
what is *THAT*???
The disklabel is used by the kernel and other utilities to tell how
you want or have the drive set up *logically*.
In a beautiful world, we might have a very free hand at this set-up
and expect it to work. Unfortunately, the authors of the software
dealing with the hard drives either decided or were forced by
circumstance to make certain things about the disklabel inviolate.
When you let the installation disk set the disklabel for you first
drive it comes out like this:
The a: partition is the primary partition.
The b: partition is the swap partition.
The c: partition is the amount of the disk used by 386bsd
(swap and data)
The d: partition is the entire disk (on the PC version only).
Of these, the only one that could be different is a:...
(Note for those of us who have spent far too much time using DOS: the
labels a: b: c: d: e: f: g: h: DO NOT refer to DOS drives, but to
partitions in your 386bsd partition... confusing, eh? For the sake
of consistency I will never make a reference to DOS drives except by
saying something like "DOS drive C:". )
It's possible to divide up the disk a bit differently, but three
things MUST be:
c: must refer to every cylinder you wish 386bsd to use, either
for your data or the swap space.
b: Must always refer to a swap partition. Note that on any
other than the first disk it does not have to, but if you
enable swapping on that drive, and you are using b: for
something else, that something else will be killed.
The reason for this is simple: It's hard coded in.
"WHY?" you ask? (I did...) Probably time constraints, maybe tradition.
But if you look at the code in "isofs" and "ufs" in your sys.386bsd
directory, you will see numerous comments asking some of the same
questions, which leads me to believe this may change in the future,
making our lives both more complicated and easier at the same time...
Getting past the esoteric explanations, here is a method for figuring
out and "labeling" your disk.
We'll start with the disklabel from my second disk, in the form most
understandable by humans... #'s signify the start of a comment.
5 partitions:
# size offset fstype [fsize bsize cpg]
a: 198400 0 4.2BSD 512 4096 16 # (Cyl. 0 - 399)
b: 31744 447392 swap # (Cyl. 902 - 965)
c: 479136 0 unused 0 0 # (Cyl. 0 - 965)
d: 479136 0 unused 0 0 # (Cyl. 0 - 965)
e: 248992 198400 4.2BSD 512 4096 16 # (Cyl. 400 - 901)
Some math:
Looking at the comments at the end and the size and offset columns,
size is a function of (last - first + 1) * sectors per cylinder:
a: 399 - 0 + 1 = 400 * 496 = 198400
b: 965 - 902 + 1 = 64 * 496 = 31744
c: & d: (Since I have no DOS partition, whatsoever)
965 - 0 + 1 = 966 * 496 = 479136
e: 901 - 400 + 1= 502 * 496 = 248992
248992 + 198400 + 31744 = 479136 (all the parts should equal the whole)
Some things I discovered (for all you in novice land like me...)
1. As you can see this disk has 967 cylinders, but I only refer to 966
of them, 0 - 965... This is because it's good practice to leave the
"Landing Zone" cylinder out of it... This is usually the last
cylinder, and it's where the read/write heads hang out when your disk
is off...
Note from TSgt Dave:
Most modern drive heads come to rest on a polished surface inside the
highest cylinder. I could be mistaken, of course, and the Hard Drive
Bible (or other appropriate reference manual) will tell the tale for
each drive.
2. a: can be a regular partition, b: should be swap, c: everything
386bsd will get to use, including swap. d: is the entire disk from
0 - (cylinder_per_disk - 2) [leaving out the Landing Zone]
On the boot drive (The drive that actually contains the kernel), a:
is the boot partition. On all other drives, it is a regular partition.
Regardless of whether you are using DOS or not, the entire a:
partition must reside completely within the first 1024 sectors.
This is a limitation of the PC architecture.
You can then use e - h for your other partitions. I am not sure
whether you could specify b: as other than a swap partition and not
run into trouble, but you could surely make it a zero sized one
starting and stopping on the Landing Zone...
Note from TSgt Dave:
This is a good idea. Another way to accomplish this is to
simply not specify it in the map.
3. Stupid human trick: When doing the math don't forget that 400 - 900
refers to 50*1* cylinders. I did, for a while. No great problem I
suspect, but why waste a cylinder...
4. newfs'ing really is that simple if you have the label right:
"newfs /dev/rwd?x config_template" where the question mark is the
physical disk, the x is a partition letter, and the config_template
is the configuration from /etc/disktab for your disk drive.
* NOTE: This is a thumbnail sketch; read the man page to verify all
of the options and be sure about how to proceed...
5. then fsck the partition:
fsck /dev/rwd?x
Don't forget that fsck should be run on the RAW device.
6. As long as it checks out, you can then mount it and do disk things
with it...
7. Add it to the fstab... (follow the man page). Don't forget
that your new swap partition won't work if your kernel isn't
configured for it, but it won't cause you any problem to have
it there.
One last note from TSgt Dave:
And I have yet to figure out a way to determine if it is or
isn't using the swap partition anyway. There is a program called
'swapinfo' and it is part of the NetBSD source tree. On my system,
it tells me that I never use the swap area. :)
A note for those trying to use the CCD: to figure out what the
disk label should be for your concatenated device, assuming
your disks are identical, just add up the cylinders (minus the
ones your reserved for the individual disk labels). I know
this works for purely concatenated (not striped) IDE disks, I
am assuming it should work on stripped SCSI disks.
Commonly used definitions:
bsize:
Block Size: This is the smallest allocatable area on a disk file
system, sort of. A file uses the maximum amount of blocks until it
can not completely fill up a block.
fsize:
Fragment Size: This is the size of the 'leftover' data that didn't
fit into a full block. For example, assuming a using an 8K Block
Size/1K Fragment Size, a 34.5K file, would use up 4-8K Blocks (4 *
8K = 32K) and 3 1K fragments (3 * 1K = 3K). There is 512 bytes of
wasted space, since 32K + 3K = 35K, which is 512 bytes larger than
34.5K. If you want to reduce the amount of wasted space, you can
reduce your fragment size, but you also reduce the amount of data
you read at one time, so your disk performance decreases also.
A good setup is 8K/1K for performance, but if you are really
concerned about wasted space you can consider using a 4K/512byte
filesystem.
For further information, find an article that explains the Berkeley
FFS in more detail.
cpg:
Cylinders Per Group, it determines the cylinder group size, which
in turn determines the number and location of the alternate
superblocks.
You need to get one or more of the disk tuning programs on the
market and run them.. You can also look at 'tunefs' to help you
with tuning up your file systems. For 99% of the system out
there, the defaults (as outlined in Section 9) are very good and
work well with SCSI and IDE drives.
There is no easy way to increase this swap partition without
relabeling the drive. Unfortunately, relabeling usually involves
reinstalling. That involves re-doing just about everything you have
just finished doing. The good news is that if all you have done is
the base installation, you don't have a lot of time and energy
invested in the system. Take the time, and make sure that your swap
space is at least as big as your memory; many people recommend even
larger. There is no real limit to the size that this space can
take. If you have two disk drives, you can have space space on both.
Simply follow the instructions above, and you will be all set.
If your swap space is smaller than your real memory, system core
dumps will be disabled.
If you have compiled in the VNODEPAGER option in your config
file, you can use vnode files for swap space. The precise
details are exaplined in the man pages, but the easiest way to
start is to include the following line in your /etc/fstab:
/dev/vnd0b swap swap sw
Defining the file for the vnode is fairly straightforward:
vnconfig -c /tmp/swapfile /dev/vnd0b
and actually making it swap is as simple as
swapon /dev/vnd0b
From there, the rest of your questions should be answerable from
the vnconfig manpage.
One kinky problem that almost got me was when I tried to disklabel
my second drive in order to use the DOS partition on it, and use
the rest as swap for BSD (FreeBSD-1.0 Eps, SCSI drive on an
AHA1542B, to be exact). The DOS partition was visible from UNIX,
but *not* from DOS.
What I tried to do:
Using PFDISK (from DOS), make one big DOS partition at the start
and use the rest for a BSD partition (type 165). Something that
came out like
Using BSD disklabel generate disk description/label as documented
in the FAQ. Make only 'c' (total BSD DOS part), 'd' (complete disk)
and 'b' (intended swap) BSD partitions.
Problem:
When writing the label, disklabel would ask about overwriting DOS
partition table. Whether I said y or n, the DOS partition table
was screwed up, as seen from DOS (BSD saw the DOS file system
very nicely indeed).
Cause, solution:
BSD disklabel wants to write the label to the start of the 'a'
partition; I had *not* defined an 'a' partition (since I was
only using the disk for swap). This tells disklabel that the 'a'
partition is the start of the disk, which means there is no DOS
partition. Disklabel then writes the label at the start of the
drive, which is why it talks about overwriting (aha!); this is
*bad* for the DOS partition table. One solution is to have a
non-empty (e.g. one cylinder) 'a' partition at the start of the
BSD part of the disk, and resize the 'b' swap partition
accordingly. Now everything works just fine. Note that
this solution can be used whenever you want the DOS
partition table to be safe and the DOS partition to be
mountable.
One other fly in this ointment. The disklabel program has
historically asked "Overwrite disk with DOS-partition [n]: "
then the normal inclination is to believe the prompt and
press return for 'no'. The default answer may or may not be
'no'. There are several versions of disklabel where the
default answer is actually 'yes' even though the prompt
implies that you can press return and get 'no'. In this case,
it might be best to assume that the default answer doesn't
exist until you have had a chance to actually look at the
disklabel code.
The easiest answer is the architecture of the machine has gotten
you. Because of the limitations of the BIOS, everything the
boot process needs must reside in the first 1023 cylinders on
the disk. Most really big drives have more 'real' tracks than
this, so DOS tries to translate the drive so it doesn't. The
*BSD systems don't; they rely on the disk geometry being
correct, or at least the same as the controller thinks it is.
Once the system is up and running, the BIOS is disabled. This
means that the system no longer has that 1023 track limitation.
What does this mean to you? Make sure that the root partition
(the a: partition above) of your boot drive does not extend
beyond track 1023. If you have a large DOS partition that
covers nearly all of that, you may need to make a VERY small
root partition to make absolutely certain the root does not
extend past 1023.
There are many people that wish to be able to boot DOS or 386bsd
at will. There are several programs that allow this. The
program "os-bs" is one such program, "BOOTEASY" is another, and
there are three or four others. There are problems in some
configurations using the os/2 boot manager for this, so beware.
In addition to being able to boot from either of two partitions,
some people want to operate more than one disk drive (and perhaps
boot from either as well). Christoph Robitschko provided one
description of this. Since there are virtually limitless
possibilities for configurations for BSD systems, it will be
impossible to answer all of the possible questions about these
features. Many people operate with multiple disk drives on one
or more controllers.
Yu-Han Ting provides this tutorial on partitioning and booting
multiple systems with a single hard disk.
Julian Elischer (julian@jules.dialix.oz.au) adds:
To make the boot code default to drive 1 look in
/sys/{arch/}i386/bootboot.c for the following (or similar. The
code may have changed a little and may be in a different
directory:
/***************************************************************\
* As a default set it to the first partition of the first *
* floppy or hard drive *
\***************************************************************/
part = unit = 0;
maj = (drive&0x80 ? 0 : 2); /* a good first bet */
name = names[currname++];
and change it to:
/***************************************************************\
* As a default set it to the first partition of the SECOND *
* floppy or hard drive *
\***************************************************************/
part = 0;
unit = (drive & 0x7F);
maj = (drive&0x80 ? 0 : 2); /* a good first bet */
name = names[currname++];
The obvious answer is to use 'disklabel -w -r /dev/rwd1d'.
Unfortunately, this does not always put a real disklabel on the
drive. The symptom is that the drive labels and can be used
until the system is reset, at which point the system tries to
read the label from the disk. It was never actually written to
the disk, so the operation fails.
There are also reports that the /usr/mdec files are corrupted in
some of the distributions. If you have tried everything else, you
can either load the files from one of the many archive sites that
keep the /usr/mdec files around, or you can recompile them
yourself.
Instead of specifying the entire device path name (i.e. /dev/rsd0c),
only specify the two letters of the device type and the unit number
(i.e. "sd0"). Disklabel figures out the rest, and it works.
For instance, the following line works for me:
disklabel -w -r sd0 <drive-type>
assuming of course that the boot block files are in /usr/mdec/ and
the <drive-type> is in the /etc/disktab.
This is also a symptom of some of the versions of FreeBSD and
NetBSD where the disklabel code was 'fixed' to only write a
disklabel on a drive with a disklabel. Oops.
Also, some folks want to mix SCSI and IDE drive together in the
same system.
A report about someone with an Austin Tower (486DX/50), AMI BIOS,
Caviar 2250 IDE, Adaptec 1542CF, and Toshiba SCSI disk (1.2GB)
posted this set of instructions:
The BIOS is configured to boot from the IDE drive as type 47
(user defined). The IDE drive currently has NetBSD 1.0 BETA on it.
The 1542CF switches are 1-4 off (open), 5-8 on. The meaning is as
follows:
Note that this means the Adaptec 1542CF on-board setup program is
also disabled. If I need to change my SCSI termination, I first
have to enable the Adapted BIOS (sw 6,7,8), enter 1542CF setup
and change termination, then change switches again.
I could not configure the system to boot from the SCSI drive having
the IDE as a secondary drive.
(Ed Note: There is more news on this front all of the time.
Since I personally don't have much interest in doing this (I
boot from my IDE drives and mount my SCSI drives) I don't see
the problem. )
It turns out that what *BSD cannot handle is not translation, but
translation that changes during the boot-up process. For example,
the configuration above will work just fine IF the translation
that the controller uses when it powers up is the same one that it
uses when it boots. On many PC clones, the BIOS loads a different
geometry after it boots to make the geometry agree with one that is
loaded in CMOS. This is the fatal flaw for *BSD. Fortunately,
once the problem has been identified, it is relatively easy to
handle. Simply make sure that the BIOS is configured to set the
controller to the translated geometry that the card powers up
with.
There are several ways to get around these problems with disk
geometry translation. If you are using a SCSI controller, you can
specify the geometry such that each 'cylinder' is 1 Meg (64 sectors
by 32 tracks for example). Most SCSI controllers will blithely
ignore what YOU tell it the geometry is and press on using this
type of 1 Meg cylinder had to get the job done. NOTE: If you are
going to try this, try to ensure that each 'pseudo cylinder' is a
reasonable size (like 1Meg or 512K).
An interesting method for dealing with disk geometry comes from
Alan Barrett (barrett@lucy.ee.und.ac.za):
This sort of problem happens when you try to install NetBSD in a
partition of a disk whose controller does geometry translation. I
have not had time to find the bug that causes the problem. One
option is to disable the geometry translation: Use ide_conf to
find the true geometry, use the CMOS setup program to tell your
BIOS about the true geometry, and reformat everything. I
successfully did that on one of my systems.
If you are not able to, or do not wish to, disable the geometry
translation then the following work-around might work for you.
This requires that the disk have unused space on {cylinder 0,
head 0}, from sector 2 to sector 16. Almost all DOS disks that
I have ever seen satisfy this condition, because they usually
start the DOS partition in {cylinder 0, head 0, sector 1},
leaving most of {cylinder 0, head 0} unused apart from the
partition sector in {cylinder 0, head 0, sector 1}. However,
many partitioning programs like to hide this fact from you,
and pretend that the DOS partition starts at the front of the
disk; don't believe them until you have checked with a raw
disk editor.
0. Make sure you have adequate backups.
1. Use a partition sector editor (fdisk, pfdisk, os-bs,
booteasy, Norton utilities, whatever) to mark the partition
that you want for NetBSD as bootable with type 0xA5
(decimal 165).
2. Halt the system. Boot the NetBSD kernel copy floppy.
When it asks you to insert the floppy for the root file
3. Answer all the installation prompts, using numbers based
on the translated geometry. When it asks if you really
4. Halt the system. Boot to DOS. Run a disk editor program,
such as Norton utilities.
5.1. Verify that the partition sector in {cyl 0, head 0,
sec 1} is undamaged. Verify that the disklabel program
5.2. Verify that the space in {cyl 0, head 0, sectors 2 to
16} is still available. Copy the fifteen sectors containing
5.3. Edit the partition table in {cyl 0, head 0, sec 1}.
Change the system ID of the NetBSD partition from 0xA5
5.4. Edit one of the previously unused partition table entries
(I hope you have one), to contain the following information:
6. Halt the system. Boot the NetBSD kernel copy floppy. When it
asks you to insert the floppy for the root file system, just
press enter without changing disks.
7. Copy the kernel, and proceed with the rest of the installation
as per the instructions provided with NetBSD. It should now
work because of the trickery with the partition table etc.
Bradley W Mazurek (bwm260@skorpio3.usask.ca) writes:
First, I had to change the IDE translation mode in my BIOS.
Rather than using LBA, I used Standard CHS. When I went in
to repartition the disk for DOS, DOS reported that the drive
was only 523Mb (1023cyl, 64h, 63sec/tr), rather than the true
geometry (2100cyl, 64h, 63sec/tr) but I didn't worry about it.
Next I created my DOS partition. I partitioned the disk so that
cylinders 1-999 were DOS. That left cylinders 1000-1023 for
NetBSD. Lots of room! :) Anyway, on a hunch, a friend and I
were hoping NetBSD didn't look at the ending cylinder entry
(1023) of the partition table. Next I calculated the length
of the partition from 1000-2100, put this into the partition
table using the disk editor. The numbers weren't consistent in
the partition table, but DOS ignored the Non-DOS partition,
NetBSD was happy...and we've (DOS, NetBSD and my remaining hair)
all lived happily ever after....
[Ed.Note. The partition table needs to correctly identify the
NetBSD portion of the disk, regardless of whether or not DOS can
handle it. See the section on hard drive partitioning for more
information...]
My suggestion is to try to find an IDE translation mode in your
BIOS for which the number of heads and number of sectors per track
is consistent with the true geometry of your hard drive. Then
perhaps this trick will work.
1. there is _different_ behavior, if one executes
2. Any disklabel write will change not only the data on disk, but
also some data-structures in core. For example, if one tries to
write a complete different disklabel to a complete different place,
say /dev/wd0h, there will be strangeness afterwards. That means,
writing a disklabel and then reading it back, does not have to
mean that the write did succeed. There is an option -r to
disklabel which is said to access the disk directly, but, as
I noticed, the core-data is updated thereby, too.
The following paper explained to me what should happen in sequence
on boot: /usr/src/sys/arch/i386/boot/README.386BSD. It says (in
short):
[...]
1/ the BIOS loads the first block of the disk (called the Master
Boot Record or MBR) and if it has the correct magic numbers, jumps
into it:
2/ The MBR code, looks at the Partition table that is embedded
within it, to determine which is the partition to boot from. If
you are using the os-bs bootblocks (highly recommended) then it
will give you a menu to choose from.
3/ The MBR will load the first record of the selected partition
and if it has (the same) magic numbers, jumps into it. In 386bsd
this is the first stage boot, (or boot1) it is represented in
/usr/mdec by wdboot, asboot and sdboot. If the disk has been set
up without DOS partitioning then this block will be at block zero,
and will have been loaded directly by the BIOS.
4/ Boot1 will look at block0 (which might be itself if there are
no DOS partitions) and will find the 386bsd partition, and using
the information regarding the start position of that partition,
will load the next 13 sectors or so, to around 60000
(640k - 256k). and will jump into it at the appropriate entry
point. Since boot1 and boot2 were compiled together as one file
and then split later, boot1 knows the exact position within
boot2 of the entry point.
Boot 1 also contains a compiled in DOS partition table (in case
it is at block 0), which contains a 386bsd partition starting at
0. This ensures that the same code can work whether or not boot1
is at block 0.
[...]
Steve Gilbert (gilbert@cs.utk.edu) provided us with this answer:
First, If you do a "fdisk wd1" (It may be wd1d, I don't
remember what it wanted), it will list out the partition table
for you. This is something totally different from BSD's idea
of a partition, mind you. The last partition (#3) should be BSD.
All of those figures are correct except for the "ending head" field
which is set to 255 (thus, 256 heads).
1. BACK UP EVERYTHING!
2. fdisk -u wd1
...this will prompt you for the stuff you want to change.
Remember, everything is correct except for the ending
head. Accept all the default values it gives you at first.
You'll have to tell it that you want to explicitly define
the beginning and ending values.
3. My 420 MB Conner drive has 16 heads, so I just enter 15 as
the ending head number.
4. When you are back out of fdisk, you can do another fdisk wd1
to make sure the values are correct. Don't worry if you mess up,
you can always change it again. Anything you didn't back up is
probably gone by now anyway :-)
5. Reboot and watch NO error message pop up!
...remember that all you want to do is fdisk the drive. You do NOT
want to run disklabel again or newfs the partitions again. This will
write the incorrect 256 crap back. I did this three times before
I finally got smart and did it right.
The options are supposed to be as follows:
A related question concerns the options on the 'reboot' program.
These flags are as follows:
As with so many other things in the systems, each of these may
(or may not) work for FreeBSD or NetBSD. Your Mileage May Vary.
One other note about 'reboot'. There are some motherboards which
do not reboot reliably. Instead of rebooting, they simply hang.
While this isn't a definitive answer, some folks have noticed
that have the BIOS relocate option set seems to help them,
especially with Micronics motherboards. If you are having
problems with your system not resetting after a reboot, try
changing the setting on the BIOS relocation option.
This is caused by incorrect settings in /etc/netstart and/or
/etc/hosts.
In /etc/hosts, you must have a line that says:
Errors that will result if you don't do this: ifconfig will not
be able to figure out what IP address goes with the name
'localhost' and you'll get 'localhost: bad value.'
In /etc/netstart, you must do:
Errors that will result if you don't do this: the loopback
device will not be properly configured and/or you will have no
route to it. The result is that programs expecting to have
networking enabled (including syslog and friends) will get
horribly confused.
*AND*, if you're not going to be directly connected to a
network, you should change /etc/host.conf to say:
It's set up the other way around by default. I don't like it
that way myself.
Errors that can result if you don't do this: if you don't have
a nameserver available to you, the resolver will have trouble
translating hostnames into IP addresses. Bogosity levels will
be off the scale. (Note also that if you do have access to a
nameserver, you need to set up /etc/resolv.conf to point to
it.) By changing the order, you'll be telling the resolver to
check the host files for matches *first*, then roll over to the
nameserver (if any) if no match is found.
Make sure that:
- There are no typos in any of the three files mentioned above.
- There are no bogus non-ASCII characters in the files
mentioned above.
- All three files have their read permission bits set.
Lastly, be very careful with /etc/hosts.equiv. If you add a
hostname to it, say 'otherhost.domain,' then root on
otherhost.domain will be able to rsh/rlogin to your machine
without a password.
Once you have everything set correctly, you should be able to
type 'telnet localhost' and establish a connection to yourself.
If you get an error such as 'localhost: unknown host' or
'network unreachable' then you still have work to do.
When the system is starting, the nameserver hasn't started yet.
If you are using any names that must be resolved, the system
will attempt to get the names from the nameserver, When that
fails (three timeouts at one minute apiece) the name will be
resolved from the /etc/hosts file (if the name is available).
There are essentially two ways to solve the immediate problem.
The first is to reduce the number of entries you have in your
/etc/hosts file to the absolute minimum you need for booting and
change the order for host resolution from 'bind file' to 'file
bind'. If you specify a name in any of your start up files and
the name server isn't available, you will still have the hang,
but this is only a small annoyance.
The second (and generally more effective) way to deal with the
problem is to use only numeric addresses in your /etc/* files.
This way, the resolver is never called upon to figure out the
addresses and your boot-up will always 'just work'. This is
sometimes more time intensive to set up, since all of the names
in the files need to be removed and replaced with numbers.
"C'est la vie".
There are many things which will cause network aliases to not
work right. Here are a few:
- Use "netmask 0xffffff00" (or whatever is appropriate) for the
first IP address, and "netmask 0xffffffff" for all aliases that
happen to be in the same (sub)net as the primary one. The
reason this is right (no matter how odd it may seem) is you
have multiple interfaces referring to the same network. You
*have* to chose one of the various interface addresses as the
"gateway" for outgoing packets into this network, you cannot
have them going out through a dozen of addresses simultaneously.
The netmask 0xffffffff prevents the kernel from considering this
IP address as a valid gateway (since it's not pointing to any
network at all).
The correct syntax in /etc/rc.local for declaring a net address
alias (assuming you are updating the eth0 interface) is:
Where the xx.xx.xx.xx are the host address for the alias and the
yy.yy.yy.yy.yy.yy is the interface MAC address (if appropriate).
Bring the PPP connection up again. Retry whatever-it-is that's
failing.
PPP includes a link-level checksum. Watch the packet counts in
the netstat -I ppp? output over time. Check carefully to see
whether the PPP driver is recording input errors (frames whose
CRC failed.) Frames with bad checksums are counted in Ierr
field. A non-zero count indicates _something_, possibly
overruns, is in fact garbling your PPP traffic. If the packets
are being discarded due to errors at the PPP level, they'll
never even get as far as IP.
Also, use netstat (or an SNMP daemon and monitor, if you prefer)
to watch the rate of change of bad packets at the IP and TCP
level. I run "netstat -p ip" "netstat -p tcp". One has to
manually compute the rate of change; netstat's -i option means
something different to, say, vmstat's. (Adding periodic
sampling and rate-of-change to netstat would be a Cool Project.)
At the IP level, the relevant statistics are
At the TCP level, look for, e.g.,
Any of these being non-zero would support the hypothesis of a
bug in the PPP implementation. Unlikely, but one never knows.
It could be that a TCP ack got munged or dropped by your PPP
link; or possibly somewhere else in the Internet. That's not
abnormal on busy links.
What OS is your FTP peer running? Is it a pre-2.0.0 Linux or an
older version of a commercial Unix? If so, have you tried turning
off rfc1323 on your NetBSD machine??
You can do the numbering any way you please. Say I had two
controllers. You could number them as:
Of course, you will need to add devices to the /dev/ directory
for each of them, pointing to their correct major and minor
numbers.
You can also hardwire the 'scsibus' numbers, by doing something
like the following (assuming "whatever" is the SCSI host adapter
driver's name 8-):
whatever0 at whateverbus? [whateverbus config info]
scsibus0 at whatever0
then
etc.
That syntax won't work on ports which use 'old config,' but I
believe an appropriate description of how to do it on them has
already been posted.
The most common configuration for locked down drive numbers is
actually:
You can do the same thing with your tapes, CDs, and other SCSI
devices as well.
There are many common installation problems. This section covers
the most basic and common of these problems. In addition to this
section, you should also read through the other sections of the
FAQ, since many of the less common questions are answered in other
places in the doc.
Another incarnation of this symptom is that the disk geometry on
your disk label (as installed by install) is different than the
geometry your hard drive controller thinks it is using. This
will most often manifest itself on controllers that insist on
operating in some type of translation mode. Normally the fix is to
find out what the controller geometry is and make the disk label
agree. There are programs available to help with this problem.
This class of problems is sometimes caused by an incorrect FTP of
the boot disk. Make sure that the files were grabbed in 'binary'
mode and that the size reported back is 1244000 bytes. Use the
Unix program 'dd' or the DOS program RAWRITE to put these files
onto the diskette. In addition, this is the 'miscellaneous'
section of the FAQ. These problems are included here because they
are usually preceded by 'I just finished installing...'
Another incarnation of this problem is that, sometimes, the major
or minor device numbers for a particular device may not get made
correctly in the install (or upgrade) procedure. If you have a
problem where you can install and everything seems to go well
until you try to boot onto the hard drive, try running the
MAKEDEV script that resides in /dev. More the file to see what
kind of options you should include (if the sd0a drive needs to
be fixed, for example, the command './MAKEDEV sd0' should get
your devices back on the road. If that doesn't work, try one of
the many things below. It could be any (or all) of them....
This could be a problem with many different pieces, some of which
are:
- Misconfigured hardware. The iomem, IRQ, and other board
settings must match the ones listed in the INSTALL.NOTES.
Unfortunately, the INSTALL.NOTES are on the disk that will
not boot. You can grab them via FTP from many archive sites.
This installation file may have many names. Look for something
kind of obvious (like 'install.notes' or 'readme' or
'configuration guide') and you should find it. Finally, there
have been many reports (particularly with the BusLogic SCSI
cards (specifically reported was the BT445C VLB host adapter)
where the system seems to boot up, but starts getting
'stray interrupt c' messages. This is usually caused by people
having there SCSI card set up on some IRQ other than the one
that the kernel expects. The factory default for this card
seems to be IRQ 12, but the kernel wants the card at IRQ 11.
Setting the card (using the configuration program supplied)
changes the setting so that it matches the kernel and the card
then works.
- Unsupported hardware. There are several SCSI controllers on the
market that are not fully supported by 386bsd. This is due in
large part to the way these controllers work. Instead of using
a standard interface and command set for the controllers, most
manufacturers make up their own controller interface language,
which is then translated into SCSI commands which are
interpreted by the drives.
- One or more of the devices in the /dev directory on the
intended root partition was either not created correctly or was
not created at all. Run the program MAKEDEV in the /dev/ directory
to ensure that all of the correct devices are built.
Increase NKPDE in /sys/i386/include/pmap.h. The largest it should
be 31; see question 3.2.8.1 for other useful values. Be sure to
keep the changes around as a patch file, since this is one of the
files that will get overwritten during a source code update.
Note that in the versions of NetBSD newer than 1.2.1, this value
is computed, so you won't need to change it.
The description of this problem is that one of the cards in your
system (most likely the VGA card) is either generating interrupts
or is causing the IRQ 2 to be actively disabled. Older VGA card
used IRQ 2 during vertical retrace to prevent sparklies.
One solution would be to plan on not using your Ethernet card
(or any other card you want on IRQ 2) until you have rebuilt
the kernel so that it expects it at an interrupt other than
IRQ 2 or 9, re-jumper or reconfigure the card to match the IRQ
you have selected, and enable it.
From time to time, this problem will manifest itself as a general
tendency of the network card to transfer either very sporadically
or very slowly. It is precisely the same problem.
James Van Artsdalen (james@bigtex.cactus.org) has offered at
least one solution:
If this is the problem, you can use Scotch tape to cover
the IRQ 2 signal on the VGA's ISA connector.
There has been some discussion as to whether scotch tape is really
appropriate inside a card slot. My answer would be "yes". This is
because the alternate solution of cutting the trace on the video
board seems, to my mind, to reduce the value of the board. It is
possible that, in the future, with a bi-partite driver, you would
want to catch the retrace interrupt to get rid of "sparklies" or to
implement a driver for a very high resolution monitor for X. If
this happens, given a choice between alcohol and solder, I vote for
alcohol.
One other thing to look for (if your video card seems to be the
culprit) is a jumper which enables or disables the card's IRQ 2.
Newer cards may have a jumper of switch which does this, so take
the time and look for it before you get the razor blade out.
Either way, you will probably find that your VGA card uses IRQ 2
strictly for compatibility with older cards. With the advent of
dual-ported memory for video cards, virtually all of these types
of problems have disappeared.
On the XT, there was one interrupt controller, an Intel 8259, which
handled 8 interrupts numbered IRQ0 through IRQ7. IRQs 2 through 7
were accessible via bus lines IRQ2 through IRQ7.
The AT had two interrupt controllers. Due to the design of the
8259, one has to be the master and the rest (up to 8) must be
slaves. Each slave controller output its interrupt request to
and input on the master controller. In the case of the AT, the
master controller handles IRQ0 through IRQ7. The slave handles
IRQ8 through IRQ15. The interrupt request from the slave to the
master goes through IRQ2, which is termed the cascase input.
IRQ2 was chosen to allow future compatabilty with the old XT
hardware; it was the first IRQ that was 'available'.
This means. of course, that the bus line for IRQ2 could no longer
be used for external interrupts. Instead, the bus line that WAS
IRQ2 in the XT became IRQ9 on the AT. This whole issue is
confused further by the fact that some vendors refer to this
external interrupt as IRQ2, while others refer to it as IRQ9. In
either case, if you are talking about an external interrupt, it
means the same thing.
BTW, IRQ8 is used for the Real Time Clock, and does not have an
external interrupt. Here is a map, in case anyone still needs it:
etc.
Even with the newer systems, you run the risk of having a
problem with a SCSI device from time to time. There are some
cards (like the new Adaptec 27* series) that software drivers
are either not in the works or the documentation is simply
unavailable. Another culprit here is that some machines are
very touchy about the quality and length of cables, as well
as SCSI IDs. There was one report of a older hard drive that
took a little longer to spin up than the rest of the drives
in the chain. Whenever this drive was put early in the ID
string (like 1 or 2) it would be 'not found' but if it was
placed near the end (like after the tape drive) it would have
spun up and been found.
The first thing to check when trying to use the 1542C is the setting
of 'Enable Disconnection' under the 'SCSI Device Configuration'
menu. It should be set to YES for all devices, as the manual warns
you.
Matthias Urlichs (urlichs@smurf.ira.uka.de) has provided this
description of the types of things that can cause problems for the
controller and devices attached to it.
The problem is that the Adaptec 1542C has (a) rather powerful line
drivers, and (b) is sensitive to transient signals which can be
induced by them via either a bad cable or a bad external terminator.
A bad cable is almost any cable which doesn't meet SCSI-2 specs.
A bad external terminator is one which doesn't adequately buffer
its resistor network.
So...
- Remove the internal terminator from the last drive in your chain.
Replace with an active SCSI-2 external terminator. Side
improvement: active terminators consume a bit less power.
- Check cables. Specifically, some cables carry less than the
nominal 50 signal wires. Manufacturers sometimes think they can
get away with this because almost all odd-numbered pins are GROUND
anyway. So, if pins 1 and 3 or 3 and 5 are connected, you're
likely to have a marginal cable.
- Make sure that the terminator power is supplied by all devices
and that the power pin is actually connected on your cable. The
problem here is that some idiot device manufacturers save on
2-cent diodes, which means that the thing will pull terminator
power to ground if it's not plugged in. (Two of these on one
bus are even worse.)
- Consider creating your own cabling. Take a 50-wire flat ribbon
and press the appropriate connectors onto it in precisely the
right places. (Move your devices as to minimize cable length.)
Be aware that if a device has two external connectors, you must
take the SCSI bus in at one connector and out at the other
-- don't leave the other connector dangling; this isn't within
the SCSI specs because the cable usually is too long.
- Better but more expensive: use 2-twisted cable. (I.e., wires 1&2
are twisted around each other, wire 3&4, ...) This will improve
reliability because the wires are twisted at different rates.
These cables have short non-twisted segments every 50 cm (1.5')
so that you can press on your connectors instead of heating up
that soldering iron.
- While you're rebuilding your system anyway...: If you have more
than one drive per power supply, check if these drives have
adequate condensors to buffer their power. I have two 80-MB
Seagates which refused to work more than a few hours without
glitches -- then I soldered two 10-uF Tantals onto their power
connector and they've been flawless ever since.
The terminator power is pin 26. Be aware that SCSI counts pins as
they appear on a ribbon cable, not as they're sometimes numbered
on the connectors. Pin 25 is supposed to be disconnected.
That depends on the problem. One of the first things you can
try is Ian Dell's (Ian.Dell@dsto.defence.gov.au) SCSI Disk
Doctor (sdd) package. There are NetBSD i386 and Sparc
executables on ftp://ftp.mono.org/pub/sdd. FreeBSD uses a
couple of utilities which come with the system (scsi and
scsireprobe) to accomplish some of the same operations. Try one
of those (obviously based on your system type) and see if they
don't fix your problem. If they don't, then the prospects are
pretty grim for your drive.
A common cause for this is when all of the right devices aren't
created on the root partition. Since you say you can boot off
of a floppy, do so and check to make sure everything in /dev
exists. You might consider running "MAKEDEV all" to be sure
everything is created.
(Ed.Note: I find that whenever I create a new kernel, it isn't a
'bad' idea to run a precautionary MAKEDEV to make sure that the
devices are created correctly. Since I only build a new kernel
about once a month, it isn't a very costly insurance policy.)
Also, there are known problems with IRQ configurations and the
PCI bus. The system hanging right after the changing root device
message usually indicates a misconfigured IRQ for the controller.
The initial probes by most (all?) drivers are done in polled mode,
only when mounting the disk for real does the kernel begin to do
interrupt driven I/O and DMA.
Is this system a PCI system? Is the SCSI controller a PCI board?
If so, make sure the IRQ configured in the PCI BIOS matches the
IRQ configured for the card.
Also, with PCI, forgetting to enable the slot for "master" in the
BIOS setup or motherboard jumpers or putting a bus mastering card
in a slave only slot will give similar symptoms. The system may not
have problems under DOS because some SCSI BIOS or device drivers
don't actually use the DMA or bus mastering features of the
card... {sigh}, they run in PIO mode under DOS.
When using NetBSD and FreeBSD, there is no SOFTWARE limitation on
more than 16Meg of memory. There are still hardware limitations.
The limit is caused by DMA controllers which copy memory images
around the system. Many cards which people use in VESA and EISA
machines either emulate ISA cards (in order to work with *BSD) or
are really ISA cards. There are reports of people having trouble
with more than 64Meg of memory, but anyone rich enough to have
that kind of memory should be paying for his OS. :-)
Recently some folks have been reporting that they are getting
warnings like these:
This error is caused when the buffer for I/O is beyond the address
range that the ISA bus can reach. With 16M you should be okay,
however, some motherboards do reclaim all or part of the "lost"
384K (from the I/O "hole" from A0000-FFFFF) and put it just beyond
the end of the rest of the memory, so you actually get 16M plus a
little bit.
One fix is bounce buffers. FreeBSD has implemented this, and NetBSD
will as soon as they come up with a method that is compatible with
all of the machines that NetBSD supports.
Another fix is to either turn off the reclaiming of the extra memory
(most motherboards that do this allow you to disable it), hack
machdep.c to force the physical memory used to 16M, or use a 32 bit
bus (EISA, VLB, or PCI) controller.
Jordan K Hubbard (jkh@thrush.lotus.com) has provided this
explanation of the distinction:
Just so long as you're using a DMA-using disk controller in EISA
mode, rather than ISA mode, you can use more than 16 Meg of memory.
For those who may find such a distinction confusing, let me explain:
You can use an ISA controller (such as an Adaptec 1542) in an EISA
machine, but as it will still think it's in an ISA box and refuse to
use the extra address lines, this is no different than having an
ISA machine as far as >16MB is concerned.
You can use an EISA controller in "ISA mode", meaning it uses the
older protocols for compatibility reasons (examples being Adaptec
1742 in "standard" mode, DTC 3290 in "Adaptec" mode, etc.) and
again, does not use the extra address lines.
The only way to get full EISA, 32MB-of-memory-and-everything, mode
is to use an EISA controller in full EISA mode (for Adaptec 1742,
this is "enhanced" mode, for DTC 3290 it's "DTC" mode, the
Ultrastor 24F in EISA (rather than IDE emulation) mode, etc.).
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
In addition, several other types of ISA controllers which do NOT
use DMA will not cause problems. IDE, ESDI, and RLL controllers
are examples of this type of card. The discussion above also applies
to VESA and VLB cards.
So, the bottom line is that you are limited to the amount of memory
that your DMA equipped devices can access. Once again, the weakest
link is the strength of your machine.
Garrett A. Wollman (wollman@emba.uvm.edu) provides us with this
brief discussion in answer to a specific question. It wears well
as a generic answer as well.
When any program tells you ``Device not configured'', it's trying
to tell you something very important about what you tried to do:
namely, that the device you tried to access is not configured
into the running operating system. This is the error message
corresponding to ENXIO.
There are three major causes for this error:
1) The kind of device you requested was not configured into the
system. This is R.W.'s problem; the generic kernels
are not distributed with the Berkeley Packet Filter enabled by
default. To correct this, you must add the appropriate device or
pseudo-device to your kernel configuration file and recompile.
(In this particular case, `pseudo-device bpfilter
number-of-network-interfaces'.)
2) The kind of device you requested was configured into the system,
but either the device you requested would use more than the
maximum you configured into the system, or if a physical device,
was not found during autoconfiguration. To solve this, either
change your configuration file, or change the I/O settings on the
device to match what the file says.
3) The major or minor device number specified by the device's
entry(ies) in /dev is incorrect. To solve this, re-MAKEDEV the
device (read the MAKEDEV script for more details). Hopefully
whatever change caused the kernel's internal device tables to get
changed also updated your MAKEDEV script; otherwise, you will have
to grovel through the kernel to see what is going on.
4) A special case: Although the 'c' drive on most BSD disks is
the entire disk, in many NetBSD and FreeBSD systems, the
entire drive is the 'd' disk. This special case is wired
into many programs, and is recognized by the kernel. From
time to time, folks will try and access the 'c' partition on
their harddrive, only to be rebuffed with a 'device not
configured' error. Mostly, the 'c' partition is unavailable
simply because the partition type is 'unused' even though it
is allocated and has space set aside for it.
Modify the /etc/gettytab file so the default profile uses this:
The inetd program has a 40 start per minute limit for all
programs started out of inetd.conf. You need to add a 'max
starts' option on the end of your 'wait' or 'nowait' option.
For example, try 'nowait.100' if you expect the program to start
90 times a minute.
One of the interesting aspects of *BSD is the fact that it comes
with the complete source. This allows you to make changes to the
system, recompile, and test out your new ideas. This section of
the FAQ describes many of the different aspects of this endeavor
and common problems and pitfalls that are encountered. Kevin Lahey
provided the substantial portion of this section. You can contact
him via E-Mail at (kml@rokkaku.atl.ga.us) or contact Dave Burgess
(burgess@cynjut.neonramp.com).
The kernel can be compiled in a variety of ways to support different
devices and configurations. Compilation is controlled by a config
file that specifies the characteristics of the kernel. A set of
different config files is located in /sys/i386/conf or
/sys/arch/i386/conf. The configuration file names are in upper case.
To build a particular kernel (in this example, we use the GENERICISA
configuration file in NetBSD or FreeBSD):
% cd /sys/i386/conf
% config GENERICISA
% cd /sys/compile/GENERICISA
% make depend
% make
In NetBSD, since there are multiple architectures supported, there
is an architecture line in the middle of the path to these files.
See the build.kernel script in section 3.8 for more information.
Remember, when structures in the kernel change, there are some
programs (ps, top, etc.) that will cease to work correctly. You
will need to recompile these programs as well as the new kernel.
You need to do the following to make sure that your programs get
updated as well as the kernel:
cd /usr/src/include
make install
cd /usr/src/lib/libkvm
make clean && make && make install
cd /usr/src/bin/ps
make clean && make && make install
cd /usr/src/...
We still use the old style K&R definitions easier, because
bringing up a new port on a foreign machine with a brain-damaged
compiler can be impossible, or at least very difficult,
if you don't do it this way. Remember, NetBSD is multi-platform,
and tries to make it as easy as possible to port. Which means
building pieces of the system with someone else's compiler.
You're going to have to recompile the kernel after you modify the
config file. See section 3.2 below for more information about the
config file in general.
Step 1 is to build a profiled kernel:
cd /sys/arch/<X>/conf
Step 2 is to start the profiling process:
log in
Step 3 is to run the application in question
Step 4 is to stop the profile:
kgmon -h
Step 5 is to analyze the output:
gprof /{kernel name} gmon.out > profile
which produces a hierarchical call graph as well as flat
profile. The flat profile is easiest to use for beginners,
although both are good information sources for kernel code
performance.
Your kernel is called /kernel or /netbsd. Copy the new kernel
from /sys/compile/GENERICISA/(whatever) to /, assuming that it
is in that directory. If you really screw up the new kernel,
you want to have something to fall back on, so be sure to
save /kernel to /kernel.old before copying in a new kernel.
No. They are caused by lots of things. They are, as far as
anyone that should be expected to know about this stuff, harmless.
There are ramifications on them being there, but for MOST users
they do not pose a real threat to your operations. For those of
you that are doing REALLY interrupt intensive stuff, you may want
to grab a technical reference and figure out why the 8259 is not
getting reset correctly.
In spite of the number of times this has come up (and people have
even referenced this section) there are still at least two
questions on the net about this. A memorable one was a guy who
was just vehement that the stray int 7 was what was keeping his
system from booting. In fact, he went so far as to say that this
document was practically worthless because I didn't tell him how
to fix it. Of course, once he configured his hard drive controller
so that it was on the right interrupt, his booting problem went
away. I have said it before and I will say it again. For MOST
users they do not pose a real threat to your operations.
I have heard of three people (out of at least 2000) that have
actually have problems so bad that they couldn't proceed. They
bought new computers, and the problem went away.
These stray interrupts are caused by something in the PC.
I have yet to see a convincing explanation of precisely what,
but they are definitely caused by something. There are four
ways to deal with this problem.
1) Ignore them. They are spurious and do not effect the
operation of your computer.
2) Implement the lpt driver. This way, the driver traps
(the lpt driver expects IRQ 7) and then quietly discards them.
That is why when folks implement the lpt driver the 'problem'
goes away. The computer is taught how to ignore them.
3) Do what the original 386bsd code did. Comment out the
diagnostic and associated code that tries to deal with them so
you don't see the error message.
4) Buy a new computer that doesn't cause this problem. It is a
known hardware problem with the 8259 being reset incorrectly in
hardware.
Kalevi Suominen (jks@geom.helsinki.fi) offers this technical
explanation of the 'stray interrupt 7' phenomenon.
In the section of the Intel Peripheral Handbook dealing with
the 8259A there is a description of the 6-step interrupt
sequence for an 80x86 system (and 7-step for an MCS-80/85),
and then the following paragraph:
"If no interrupt request is present at step 4 of either sequence
(i.e., the request was too short in duration) the 8259A will
issue an interrupt level 7. Both the vectoring bytes and the CAS
lines will look like an interrupt level 7 was requested."
This explains how some transient disturbances or improperly
functioning adapter cards could trigger a stray interrupt 7
in a system operating in the *level* interrupt mode (such as
a PS/2 with MCA): An interrupt request will disappear as soon
as the interrupt line goes inactive.
That such interrupts may also occur in a system operating in
the *edge* triggered mode (such as an ordinary PC/AT with ISA)
is a little harder to see. Yet it is possible - even without
malfunctioning hardware - because masking an interrupt request
will hide its presence from the 8259A as well:
1. The interrupt flag (IF) of the 80x86 is reset either
directly (e.g., by a "cli" instruction) or because an
interrupt handler is entered. In the latter case the
corresponding in-service (IS) bit of the 8259A is set
(effectively blocking interrupts of lower priority).
2. The 8259A receives an unmasked interrupt request (IRQn),
and, in case an interrupt is being served and has higher
priority than IRQn, the IS bit of the 8259A is reset by
an end of interrupt (EOI) command. (These steps may occur
in either order.) If IRQn has higher priority (e.g. IRQ0),
no EOI is necessary.
3. The 8259A activates the interrupt (INT) line to the 80x86
(which will ignore it - for the moment).
4. The interrupt mask (IM) bit of the 8259A for IRQn is set.
(A little late, though. The sequence has already started.)
5. The interrupt flag (IF) of the 80x86 is set (either
directly, or as a consequence of e.g. an "iret" instruction).
6. The 80x86 will now acknowledge the INT request by activating
the INTA line of the 8259A.
7. The 8259A will not see the masked IRQn and will continue
by issuing a spurious interrupt of level 7 instead.
The original interrupt request (IRQn) will not be lost, however.
It is preserved by the associated edge sense latch of the 8259A,
and will be acted on after the IM bit has been reset again.
The net result is that a single interrupt request will be
delivered *twice* to the 80x86: first as a stray interrupt 7
and later as the proper interrupt. In particular, it is perfectly
safe to ignore the stray interrupt (other than sending an EOI).
It is just the ghost of an aborted interrupt sequence: the system
was not prepared for it yet.
Bill Roman provides this update, which is so technical I can't
even figure out what to cut out or how to repackage it so it
makes sense to people like me. As an interesting aside, he is
also a Linux user; thereby proving that I'll accept help the FAQ
from everyone:
First of all, Kalevi Suominen's explanation is correct, but
requires just a little more explanation. Step 4 in the data
book concerns the 8259's detection of INTA (interrupt
acknowledge) asserted by the processor. This means that the
processor has detected INT (interrupt request) asserted by the
8259, the previous instruction has ended, and the interrupt
enable flag is true. The processor has begun its interrupt
processing, and the 8259 *must* supply a vector; there is no way
for it to tell the processor "never mind".
INTA causes the 8259 to examine the currently asserted interrupt
requests and return the vector corresponding to the highest
current request. If there is no longer any interrupt request
asserted, it supplies vector 7 as a default. (Intel calls this
"DEFAULT IR7" later in the data book.)
There is thus a race condition between deassertion of an interrupt
request and interrupt servicing by the processor. An interrupt
request which is removed will not always cause DEFAULT IR7 --
only if the request is deasserted after the processor has
detected INT and irrevocably decided to act on it, but before
the 8259 has detected INTA and prioritized its interrupts.
It is easy to see how this could happen when the 8259 is in
level triggered mode, but it is counterintuitive that it should
happen in edge triggered mode. To understand this, it is
necessary to look at Intel's "Priority Cell--Simplified Logic
Diagram" (figure 9 in a 1991 databook I have at hand). The edge
sense latch output is gated by the request; if the request is
latched, then deasserted, the 8259 no longer sees it. There
must be a reason Intel did it this way, but it's sure not
evident to me.
The data book provides a little more information in a later
section titled "Edge and Level Triggered Modes". The most
important point is that the corresponding bit in the In Service
Register is *not* set when the 8259 generates a DEFAULT IR7. If
the IRQ 7 interrupt service routine sees this condition (i.e.,
is entered and ISR bit 7 is zero) it should simply execute an
interrupt return instruction without sending an End of
Interrupt (EOI) command to the 8259. Also, the IRQ 7 interrupt
service routine can be reentered due to this condition. Intel
recommends that the interrupt service routine keep track of
whether it is currently active so this can be detected.
I don't think that changing the interrupt mask bit can cause the
problem, especially if it is changed while the interrupt flag is
clear. As I mentioned, the problem occurs only when the actual
interrupt acknowledge process has begun, which can't happen while
IF is clear.
What can generate DEFAULT IR7 is a device driver that doesn't mask
off its device's interrupt (either in the 8259 or in the device
itself) while it is performing operations which can cause the
device to deassert its interrupt request. For example: imagine
a hypothetical device with an interrupt status register. This
register latches all the device's status which could cause an
interrupt, and clears this status when it is read. If the
processor begins executing the instruction which reads this
register just as a status bit is set, the device will assert
and deassert the request within the space of that instruction.
On an x86 architecture processor I have worked with, this did
indeed generate a DEFAULT IR7. All device drivers should make
sure that the device's interrupt request is disabled while the
device is being serviced. A well-behaved device will never
deassert its request without explicit software action.
This leaves only the poor folks who have had to buy new computers
to get rid of the problem. My suspicion in this case is that
crosstalk on the mainboard is causing glitches on interrupt
request lines. Remember that the f**king wizards at IBM made
the request lines active high instead of active low with a
pull-up (which would have allowed wire-or interrupt sharing).
Some devices (some serial port cards, I believe) use a
tri-state driver to drive the request high, but disable the
driver entirely when the request is deasserted, counting on a
weak pull-down. This leaves interrupt request lines floating,
although the 8259 has the inputs enabled. This is all
conjecture, though.
Provided by: Bill Roman (roman@songdog.eskimo.com)
It means that the drive was already processing a command
(active) when it received an interrupt from the system telling
it to see if it had anything to do. This is mostly harmless
but could indicate that the drive/controller is having problems
if the message appears often.
Not exactly. This simply means that the First in first out
buffer is getting too full. I markedly reduced the incidence
of silo overflows on my system by editing dev/isa/com.c to
change the FIFO threshold from 8 to 4 characters. This way, the
buffer gets more attention and reduces the chance of overflowing
the buffer.
Another possibility is caused when you are using internet over
a telephone line via SLIP or PPP. You might have an unbuffered
UART on your serial port, like the 8250 or the 16450. With the
introduction of the IBM PS/2 systems the first 16550 UART's were
shipped to provide a 16 byte buffer. But unfortunately the buffering
of the original 16550 did not work. The problem was solved with
the improved 16550A UART. If you run MSD (under MSDOS!), an
application that comes with MS-Windows, you can determine the UART
type of your serial ports (by choosing COMS). The UART type is also
showed when your UNIX boots up.
To solve the `silo overflow' problem you can by a Multi/IO card
with a `real' 16550A, or a card with an extra serial port, like
the HAYES ESP card. The Hayes card has a DOSSETUP utility to
configure its port address and IRQ. The port address can be
chosen between 180H and 380H, the IRQ address 3, 4, 5 or 9.
Normally COM1 (tty00) and COM2 (tty01) claim IRQ 3 and 4. So
you can choose (for example) IRQ 9 for the Hayes ESP card.
Then you have to add the appropriate lines in your kernel
configuration:
options COM_HAYESP
device com0 at isa? port "IO_COM1" irq 4
device com1 at isa? port "IO_COM2" irq 3
# com2: Hayes ESP serial port
device com2 at isa? port "IO_COM3" irq 9
For more information on com ports in general, try this URL:
http://comminfo.com/pages/ctsfaq01.htm#q6.
Both NetBSD and FreeBSD include a facility called 'bugfiler'.
While the instructions are included in both system, there is
still some apparent confusion about when to use (and when to
NOT use) bugfiler.
Jordan K. Hubbard (jkh@whisker.lotus.ie) provides us with this
short article for FreeBSD.
To send bug reports, you want to use the sendbug(1) command.
The entire package for sending and filing these bugs is known
as "the bugfiler", which is where the confusion stepped in,
but sendbug is definitely the command you want to use.
Second, it doesn't take a "net connection" to use sendbug,
since all it does is package up your "bug report form" and mail
it to us; no direct Internet connectivity is required, just mail.
So if you can send Internet mail you can use sendbug, or you can
also send mail to the `FreeBSD-bugs@freefall.cdrom.com' address
(do NOT send it to FreeBSD.cdrom.com since it will BOUNCE, this
is not the place to send bugs to, just to ftp stuff from!).
NetBSD has a similar facility, but has a different program and
host for bug reports. The program for NetBSD is called send-pr
and is slightly different in several respects. It is part of
the GNATS system, which the NetBSD core developers started using
in February of 1994. It is recommended that NetBSD users see the
man page on send-pr before filing bug reports.
For getting information from GNATS, see the file doc/BUGS.
There is a email interface to the NetBSD PR database. To query
the database send mail to "query-pr@gnats.netbsd.org". The mail
server will send a bug database listing back to the user.
There are several flags that are useful to send to the mail server.
The flags are entered in the "Subject" line:
--summary Display an one-line entry for each bug
--full Display the full entry for each bug
--help Display a help string containing the rest of the flags.
PR The Problem Report number of a particular bug
For example, to send a query about all the bugs:
$ Mail -s "--summary" query-pr@gnats.netbsd.org < /dev/null
If you want to know more about a particular bug, let's say bug 40:
$ Mail -s "--full 40" query-pr@gnats.netbsd.org < /dev/null
John Conklin is trying to get a page set up at the NetBSD WWW site
(www.netbsd.org) that will allow people to interactively query the
bug database. It should be operational soon.
The config file is the list of all of the optional (and settings
for the mandatory) parts of the kernel. If the system is made
up of static object files which don't change, then all you
should ever need to do is modify the config file, reconfigure
the kernel objects, and relink. Since both NetBSD and FreeBSD
are distributed with source, these files are recompiled and a
kernel is constructed. Some of these have been deprecated, and
may not be in use for a particular version of the system
(i.e. ISO9660 and CD9660 are the same, CD9660 being the newer
version).
Because it takes up space. The kernel is wired into memory, so
every byte it uses comes out of the pool of memory for everything
else. It can't page out sections that aren't in use. If your
kernel is larger than 640K, then it can't be loaded. You'll need
to use Julian Elischer's bootblocks to put it in high memory, which
seem to be fairly complex. Installing them (once they are
compiled) is as easy as using disklabel.
Newer versions of the *BSD kith provide the capability to build
a kernel that is larger than 640K. Complete instructions are
provided in the appropriate systems.
What do you need? If you only have an SCSI controller, you don't
need the wd0 device; if you have another kind of disk controller,
you don't need sd0. Unless you actually HAVE more than one Ethernet
controller, you should comment out all but one of them. If you don't
have an ethernet controller, you don't need any of the controllers or
NFS compiled in. Without a CD-ROM, ISOFS is kind of pointless. Just
look at what you have and think about what you really need.
Increase the count of pseudo-terminals --
pseudo-device pty 12 # or whatever
Every pseudo terminal should have a /dev/pty* entry. If you have 12
pseudo terminals, you should also have at least 12 pty devices in the
/dev directory. The MAKEDEV script in /dev will create as many pseudo-
terminals as you tell it to.
If you are using older versions of the 386BSD family, you will
need to add a line in your config file that looks like this:
device-pseudo ddb
If you are using a more recent version (the division is pretty
unclear about when the switch was made) and do not have any
device-pseudo entries, you will need to add the line:
options DDB
to your config file.
Build the kernel, then run dbsym on it:
% dbsym ./kernel
Install it and go for it. Ctl-Alt-Esc drops you into the debugger.
Note: DDB as shipped originally is a memory hog, and it is very
difficult to get a kernel small enough with enough fun things in it
to debug in 640K
On the NetBSD-sparc system, the L1-A is used by the the DDB
routines to drop you into the debugger.
Yes, this will happen on most architectures on the first compile
of src/gnu/usr.bin/gcc/libgcc. As was stated in the mailing
list before, when you get to this error:
1) run a 'make' in the gcc directory. It will error out (most
likely) on libgcc.
1) Do a 'make install' at this point to install at least gcc,
cpp, and cc1.
2) go back and compile in src/gnu/usr.bin/gcc/ WITHOUT doing
a "make clean"
3) install everything in src/gnu/usr.bin/gcc
In general, I think, the answer is no. The prevailing philosophy
seems to be that one should use sysctl for such things, but that
requires that one has already compiled in the ability to change
the specific variable in question. (I discovered this when I
wanted to patch tickadj at runtime; I added it to kernfs, and
when I offered the patches (which are quite small) I was told
sysctl was the `correct' way. What's incorrect about /kern was
never quite explained; the closest anyone came was to invoke
internationalization concerns. Of course, using /kern also
requires having compiled in support for tweaking the variable
you want to change.)
Besides, unless you've patched securelevel, I don't think there
is any good way to twiddle variables in the running kernel.
/dev/{,k}mem are, I believe, read-only once init sets securelevel
to 1.
If you need to know more about the sysctl command, try
"sysctl -a | more" to get a list of the parameters that can be
modified while the system is running.
You can create as many (or as few) config files as you desire. The
system, once the patchkit is applied, will have between 10 and 15,
each of which implements certain functions or features. In addition,
the normal place for the patchkit to make changes to the config files
is in the GENERICISA file. Since this file should remain unchanged
and available, it is always a good idea to copy this file to a
meaningful name and modify that file. In other words, change every
reference in 3.1.1 from GENERICISA to HAL (or whatever you call your
system).
One final note. Every /sys/compile directory takes up 800K or so;
you might want to watch to see how big these all get.
If you are using Csh, you can simply unlimit your processes in
your system level /etc/csh.cshrc file or your personal .cshrc
file. You can also modify your kernel so that the
amount of memory available is less limiting. J"org Wunsch
(j@tcd-dresden.de) provides us with this brief description:
From a recent posting regarding the problem how much virtual
memory one could get.
| On the other hand, i've also changed the definitions you
| mentioned. But i didn't like to modify the header files, and
| actually, modifying the values is as easy as:
|
| options "DFLDSIZ='(16 * 1024 * 1024)'"
| options "MAXDSIZ='(64 * 1024 * 1024)'"
|
| Include the above lines into your kernel's config file, reconfig
| and rebuild it.
|
This has been reported to work well for NetBSD, but causes
problems in the mkdep step of the kernel compile in FreeBSD.
Check the FreeBSD Web Site for a more definitive answer.
<Insert address of pointer here>.
This is just a hint for those people poking around with compiling
large source files. Especially, due to some gcc problems with large
static arrays, compiling X applications with huge bitmaps would
cause virtual memory trouble. Increasing the limits (o'course, as
long as the h/w resources suffice) could help there.
The default definitions for the above parameters are found in
/usr/include/machine/vmparam.h.
The EXTMEM_SIZE and NKPDE entries need to be specified for in
your system config file. I'm not completely clear on the
concept, but it goes something like this:
The value of EXTMEM_SIZE needs to be set to the number of bytes
in the extended memory range for your system. Since this
excludes the ISA hole and a 4K region claimed by the BIOS, the
value for the machine above would be
((128 * 1024 * 1024) - (384 + 4) * 1024) which equals 133820416
You also need to set NKPDE to something larger than the default
of 12. The best advise seems to be setting it to the maximum
(31) for everything over 64M of real memory.
Both of these can be set in the source (which is the ugly way),
or you can use the "options" keyword in a custom config file.
Look in the "/usr/src/sys/arch/{arch}/conf" directory for the
GENERIC config file, and copy it to a config file name of your
choosing. Near the top, there will be several 'options' listed.
Somewhere in there (placement is not critical) add the lines:
options EXTMEM=133820416 # assuming 128M of mem
options NKPDE=31 # more than 64M of mem
Set BUFPAGES to the number of 4K buffers you want to allocate.
For 16Meg, you would use "options BUFPAGES=4096".
We've skipped over a lot of details here; the straight dope comes
from "Building Berkeley UNIX Kernels with Config", by Samuel J.
Leffler and Michael J. Karels.
Q. Is there something special with the order I need to update
binaries and libraries in? If I drop in the new libc, everything
gives me a bus error. Both shared and static do this.
A. On the port-i386 list, Charles Hannum discussed changing the
system call mechanism (doing it via an INT instead of a call
gate). Looking at src/lib/libc/arch/i386/sys/syscall.S, it looks
like this change is in. Your binaries are (if you are using an
old kernel) probably crashing at each system call now.
So.. first compiling a new kernel with COMPAT_10 in it should make
your newly linked binaries work, I guess (have not recompiled since
the update myself yet). Also don't forget that you need to use
config.new now.
So, the answer is Yes, the mechanism for system calls has
changed, but the old method (using a call gate) is still
available by specifying COMPAT_10 in your configuration file.
The program I use to rebuild my kernel is available from
http://cynjut.neonramp.com/build-kernel
Your best method _by far_ would to to pull down a snapshot
(assuming one exists for your arch) & install all except the etc
tarfile, then diff the etc tarfile contents with your setup to
check for any updates you should make.
If you really want to do it the hard way, here is your map.
# Remember to make yourself a new config (not config.old) kernel
# config file.
#
# This means any old config file you may have had from
# V1.1 needs to have the mainbus changes made. See GENERICADP and look
# for the isa0,eisa0,pci0 at root add the mainbus0 stuff and attached
# your buses to it. For updates to V1.2, you will need to make
# certain the COMPAT_* options are correct.
#
# Make sure you have COMPAT_11 as part of your kernel config
# options.
#
# This assumes that the -current source is in /usr/src
(cd /usr/src/usr.sbin/config ; make && make install && make cleandir)
# if you don't do this, config of your kernel config file will
# fail with errors in files.i386
(cd /usr/src/gnu/usr.bin/gas ; make && make install && make cleandir)
# if you don't do this, you won't be able to build locore.s, with
# errors about cpuid instruction not found
(cd /sys/arch/i386/conf ; config BCC13)
(cd /sys/arch/i386/compile/BCC13 ; make depend && make)
# copy new kernel to /, and boot off it
(cd /usr/src/share/mk ; make install)
# if you don't do this, you'll get errors building gcc, when it
# doesn't know how to make the manual pages (don't know how to
# make gcc.0)
#
# Rebuild yacc first or the yacc from v1.1 dies on Error Code 1 when
# it hits %expect 34 in /usr/src/gnu/gcc/common/c-parse.y. The
# new yacc included with V1.1B handles it, build and install it
# before it gets used in the gcc building.
#
# ***
#
(cd /usr/src/usr.bin/yacc; make && make install && make cleandir)
#
# The build now uses a new tsort option (-q) when it gets to the
# point of 'building standard cc1 library'. At this point if using
# the tsort that comes with V1.1 it dies on a Error 1 and no
# obvious explanation. Going to the common sub-directory under
# gcc (ie. /usr/src/gnu/usr.bin/gcc/common)
# and typing 'make' will reveal the full error.
#
(cd /usr/src/usr.bin/tsort; make && make install && make cleandir)
#
#
cd /usr/src/gnu/usr.bin/gcc
make
#
# Build will die here on libgcc
#
(cd cc; make install)
(cd cc1; make install)
(cd cc1obj; make install)
(cd cc1plus; make install)
(cd cpp; make install)
(cd g++; make install)
(cd libgcc; make; make install)
(cd libobjc; make; make install)
(cd /usr/src/gnu/usr.bin/gcc ; make && make install && make cleandir)
#
# Bernd Wiserner says that the ld.so that will be built next will
# work only with libc.so.12.0, not with libc.so.12.3
# His instructions to make a working ld.so follow:
# Do NOT run ldconfig while doing the folowing 5 lines ...
#
(cd /usr/src/include ; make && make includes)
#
cp -p /usr/libexec/ld.so /usr/libexec/ld.so.good
(cd /usr/src/gnu/usr.bin/ld ; make && make install && make cleandir)
cp -p /usr/libexec/ld.so.good /usr/libexec/ld.so
#
# Then build ld.so again ...
(cd /usr/src/gnu/usr.bin/ld ; make && make install && make cleandir)
# Thanks, Bernd...
# And now the libraries
(cd /usr/src/lib ; make && make install && make cleandir)
(cd /usr/src/bin/sh ; make && make install && make cleandir)
# and now back to the beginning and make the world
#
(cd /usr/src/bin ; make && make install && make cleandir)
(cd /usr/src/sbin ; make && make install && make cleandir)
mkdir /usr/share/doc/usd/13.viref
# otherwise "make install" in /usr/src/usr.bin will fail because
# the destination directory doesn't exist - from Tom Thai
# if you're using the obj directory hierarchy, use the
# initscan.c from the obj directory, otherwise use the initscan.c
# that was created here.
cd /usr/src/usr.bin/lex
if test -d /usr/src/usr.bin/lex/obj ; then
cp initscan.c obj/scan.c
else
cp initscan.c scan.c
fi
# if you don't, then lex won't be built
(cd /usr/src/usr.bin ; make && make install && make cleandir)
(cd /usr/src/usr.sbin ; make && make install && make cleandir)
(cd /usr/src/libexec ; make && make install && make cleandir)
(cd /usr/src/gnu ; make && make install && make cleandir)
(cd /usr/src/share ; make && make install && make cleandir)
mkdir /usr/share/doc/usd/30.rogue /usr/share/doc/usd/31.trek
# otherwise "make install" in /usr/src/games might fail
# if the dirs weren't already there
(cd /usr/src/games ; make && make install && make cleandir)
There is one in the /usr/src directory. Unfortunately, it
seldom gets sent down unless you are using sup to get -current.
If you need it for NetBSD, you can FTP to ftp.netbsd.org and
get it from the src archive.
ftp://ftp.netbsd.org/pub/NetBSD-current/src/Makefile
The same can be said for FreeBSD and OpenBSD, but obviously you
will need to get it from their FTP sites; not NetBSD's.
Sure. Check out the cross-compiling howto for MacBSD for an
example. All of the NetBSD ports should be capable of doing
'pretty much' the same thing.
You can find Colin Wood's MacBSD cross compilation howto at
the following URL:
http://www.macbsd.com/macbsd/howto/cc-HOWTO
Probably not. When the system starts, the kernel malloc pool is
not backed by real memory. As these pages are allocated, real
memory is assigned to them, increasing your memory usage. As
these pages are released, they are returned to the malloc pool,
but the memory is never returned to the system. Eventually,
your malloc area will reach a point of statis, where new pages
are not needed from real memory; the releases to the malloc area
should cover the new pages needed.
Once you have applied the patch kit, the only thing left to do is to
modify the config file to include the following line:
options XSERVER, UCONSOLE
recompile the kernel and the kernel should support X.
Steve Kotsopoulos' general 'X on Intel-based Unix' FAQ
available by anonymous ftp from export.lcs.mit.edu in
/contrib/faq/Intel-Unix-X-faq.
You need to run xdm with the -nodaemon flag. The reason is
xdm normally detaches from the keyboard. This allows other
processes (like getty) to return to reading from the keyboard.
A race condition results, where some keystrokes are sent to
xdm and others are sent to other processes. Using the
-nodaemon flag causes xdm to stay attached to the keyboard
so no other process can use it. This answer comes from Michael
C. Newell (root@wanderer.nsi.nasa.gov)
This bit of trivia is also covered in detail in the X FAQ and
the README that accompanies XFree86.
The best way to debug problems with starting 'X' is to redirect
the output of the 'startx' program to a file:
% startx >& startx.log # csh
% startx 2>&1 > startx.log # sh
With the output from this, the problems should be fairly easy to
identify and (hopefully) fix.
OK, first off, make sure you're using the latest version of
xlock. If you've pulled it out of the /ports/ distribution then
you've got version 1.14. This is woefully ancient, so get the
latest, which at the time of writing is 2.7 (just do an archie
search for 'xlockmore-2.7' to find it).
Get this, compile it up and *make sure it's setuid root*. So,
after you've copied it into /usr/X11R6/bin or wherever, do the
following:
# chown root.wheel ./xlock
# chmod 4755 ./xlock
After that, it should work fine. The problem is that without
being setuid root xlock cannot read the real system passwords.
If you look in /etc/passwd you'll see that the passwords are
all '*'d out, because FreeBSD and NetBSD use shadow passwords.
That's what worked for me. A couple of other suggestions were
raised last time this problem cropped up:
o If you're using a pre-compiled xlock then it might have
been linked against the USA encryption libraries. If you're
outside the States then the encryption libraries are different,
and a US xlock will not be able to read the passwords. The fix
is to get the sources and recompile.
o If you've compiled it from source, made it setuid root, and
it still doesn't work, someone suggested changing the size of
the constant PASSLENGTH in xlock.c from '20' to '40'. I haven't
had to do this, and in v2.7 it's '64' anyway, so it shouldn't
be a problem.
For NetBSD:
Assuming you are trying to simulate a SVR4 system, you want to
create the '/emul/svr4' directory. You will also want to ensure
the "COMPAT_SVR4" option is in your kernel config file. This
option will change in 1.3-current and later, so be sure to check
out the config files included with those versions to ensure you
have the right options.
Note that there are known problems when trying to run a
staically linked Linux ELF executable and you have SVR4
emulation built into your kernel. THe problem is the order in
which ELF executables are processed through the kernel tables.
The SVR4 emulation gets processed first, thus causing the LInux
ELF executable to be improperly processed. This may cause
certain Linux static ELF executables to fail under the *BSD
systems. The way to fix this is to remove SVR4 emulation from
the kernel or switch to a real SVR4 executable.
Also note that newer versions of NetBSD do not make a
distinction between Linux ELF executables and SVR4 ELF
executables. The only difference (from the 1.3 kernel's
viewpoint) is whether they are 32 or 64 bit ELF executables.
With this accomplished, you will need to copy several files into
the emulation directoy. A live example might be best at this
point. Most of this information is include in the
'compat_linux(8)' manpage.
First, set up the '/emul/linux' directory. Within this
directory (and virtually all of the emulation directories) you
will need the following:
etc/ (the emulated /etc directory)
From there, the simplest way to populate these directories is to
use a program like 'cpio' or 'tar' to build an archive. Having
a linux machine available will greatly simplify this. Copy
(basically everything from the Linux (or whatever) /etc and /lib
directories.
Any executables that you need from the Linux system should then
be copied into an appropriate place in the usr/ directory. For
example, when creating the Linux Doom system on NetBSD, you need
to have the following files (which should all come from the
Linux Doom distribution).
usr/X11R6/lib
libX11.so.6.0
usr/bin:
as86
usr/games/doom
README.linuxx
With Doom specifically, you may need to set 'DOOMWAD' (or
whatever it is) to usr/games/doom for it to work correctly.
In addition to the 'X' version, the native version should also
work (with recent versions of NetBSD (1.1+)
It is generally accepted that NetBSD's emulation of the other
systems is pretty close *except for* sound. The audio drivers
in NetBSD are not a robust (yet) as they probably should be.
Don't be surprised if sound emulation works badly, if at all,
for any of the other operating systems emulation works for.
The good news is that work under way (early 1997) in the
-current version of NetBSD (pre 1.3) should fix most of this.
The sound subsystem has been modified so that machine
independent components are seperated from the machine dependent
stuff, and each of the machine dependent parts is getting a
facelist. Ultimately, the NetBSD sounds system should be 100%
compatible with the one from FreeBSD (that was the design goal)
and probably Linux as well.
>I've seen lots of stuff about timezone's being a bit dodgy,
>especially with most European timezones changing over to DST on
>the 27th March. I must say that that was NOT the case for me -
>pumpy (the author's system) is running off the
>/usr/share/zoneinfo/GB-Eire timezone file, (symbolically) linked
>to /etc/localtime, the CMOS clock is running off GMT, and the
>kernel is compiled with "timezone 0".
For a full discussion of this problem, check out the
'options(4)' manpage. It describes the DST and TIMEZONE options
in detail.
In newer kernels, the problems are far less dramatic than they
used to be (see below):
The problems with timezones and real-time clocks is that most
386 hardware is just stupid. It doesn't recognize DST, even
when told to. It can't use network system time during DST
because it makes all the PC clocks off by an hour.
For machines that dual boot DOS and *BSD, one of the simplest
solutions involves using a program called 'clock372' from
Simtelnet (the exact site is not available). After you install
it, you add a couple of lines to your DOS CONFIG.SYS and set the
hardware clock to DST. From there, you build a kernel with DST
and TIMEZONE set to 0 and your whole system "just works".
In older kernels the following works:
I use /usr/share/zoneinfo/MET as /etc/localtime and have the
kernel configured as
timezone -1 dst 4
(My wife is running DOS on this machine for doom sometimes ;-)
I set this strange dst value after diging in some old ultrix(?)
man pages. There were several dst-changing-method listed and 4
was the code for the central europe one.
This gave me an idea... I use an Ultrix box every day, so why not...
Now, I don't know how closely this applies to NetBSD since
Ultrix is based on a much older version of BSD, and this isn't
for the kernel config, but for an envar of timezone values, but
it's at least somewhat enlightening on possible meanings for
these things. Could someone in the know shed light on how
accurately this models the timezone stuff in the kernel config?
When I did "man timezone" this is what I got (portion of this
quoted from the DEC MIPS Ultrix 4.3a timezone(3) manpage,
slightly hacked by me (Michael L. VanLoon (michaelv@iastate.edu))
STD offset [DST [offset][,start[/time],end[/time]]]
the components of the string have the following meaning:
STD and DST Three or more characters that are the
designation for the standard (STD) or
offset Indicates the value to be added to the local
time to arrive at Coordinated Universal Time. The
hh[:mm[:ss]]
The minutes (mm) and seconds (ss) are optional.
start and end Indicates when to change to and back from summer
time. Start describes the date when the change
from standard to summer time occurs and end
Jn The Julian day n (1 < n < 365). Leap
n The zero-based Julian day (0 < n <
Mm.n.d The nth d day of month m (1 < n < 5,
time The time field describes the time when,
in current time, the change to or from
As an example of the previous format, if the TZ environment
variable had the value EST5EDT4,M4.1.0,M10.5.0 it would describe
the rule, which went into effect in 1987, for the Eastern time
zone in the USA. Specifically, EST would be the designation for
standard time, which is 5 hours behind GMT. EDT would be the
designation for DST, which is 4 hours behind GMT. DST starts
on the first Sunday in April and ends on the last Sunday in
October. In both cases, since the time was not specified, the
change to and from DST would occur at the default time of 2:00 AM.
The timezone call remains for compatibility reasons only; it is
impossible to reliably map timezone's arguments (zone, a
`minutes west of GMT' value and DST, a `daylight saving time in
effect' flag) to a time zone abbreviation.
Relink /etc/localtime. This will correct the difference from
GMT (or its trendy equivelant) to your local timezone. In
addition, the kernel needs to be modified to take the clock
time in your CMOS into account. Since most folks that run DOS
prefer to have their clocks set to local time, the timezone
hack was introduced to allow the kernel to adjust the CMOS
clock time to GMT. Once GMT has been computed, the
/etc/localtime file can be referenced to determine the
corrected local time.
All generic kernels are built using the offset from California
(why is anyone's guess:-) so just about everyone's clock will
be off by their timezone offset from Berkeley.
Also, it may pay to actually copy the correct timezone file
rather than link it. That way, you clock will be correct even
in single users mode (when the /usr partition is not even
mounted. The disadvantage of this is that anytime the timezone
file gets updated, you will need to make certain that the file
is copied into the /etc directory.
See ntp FAQ. Apparently, the time correction takes leap seconds
into account twice. The timezone files in our system take the
leap seconds into account in the kernel, and nntp takes the
same 18 leap seconds into account when syncing the time.
Because of that, the time will appear to be off by eighteen
seconds. (Henning Schulzrinne)
I'll append the scripts I use, but be warned, they may bite you if
you are careless...
The main reason I use cvs import is to handle updates from the
``vendor''. The best way I've found is to import _exactly_ what
was shipped. This means unconfigured, and I put config.h, etc,
in .cvsignore. If I have to modify configure.in then obviously
I commit them :-)
MNEMONIC INSTRUCTION
If you have gotten this far, you deserved some humor.
If you have written some addition to the kernel or some other
part of the system, or know of one that feel should be mentioned,
send mail to Dave Burgess (burgess@cynjut.neonramp.com) with all
the relevant information, and it will be added for the next
release.
The answer is "sort of". The problem seems to come from the
fact that the <sgtty.h> interface is not guaranteed to be eight
bit clean. The <termios.h> interface is better, and should be
eight bit clean in all cases. If you find an application that
uses the <sgtty.h> interface, you should either contact the
author and try and get them to use the termios interface or port
the code yourself.
See section 5 for more Terminfo/Termlib information, as well as
a discussion of the new curses library that is available.
From: tinguely@plains.NoDak.edu (Mark Tinguely)
maybe you did not complete the setup, here is a step-by-step
instructions to get them to work:
1) make a kernel with "options QUOTA" installed
2) edit /etc/fstab and include the kinds of quotas you want,
below I used "userquota", you could also add "groupquota".
/dev/wd0h /usr ufs rw,userquota 1 2
3) for each filesystem that is in /etc/fstab that uses quota,
create the file "quota.user" (and "quota.group if appropriate).
Above I have user quotas in the /usr filesystem, so I would:
# touch /usr/quota.user
4) scan filesystem for files ownership (and/or group ownership).
# quotacheck -a
5) now you can add individual quota limits, if you want to add
the same quotas to the many people, then make a template and
replicate the template. If they change for each user, then
edit seperately.
# edquota tinguely
(an editor is kicked up and says something like:
Quotas for user tinguely:
/usr: blocks in use: 11876, limits (soft = 0, hard = 0)
inodes in use: 891, limits (soft = 0, hard = 0)
a limit of 0 means "unlimited". Change these to the appropriate
number of blocks. A soft limit generates a warning, and can be
exceed for period of time (7 days?), after which time a soft limit
is treated like a hard limit. A hard limit denies new writes.
to replicate a template (for this example let us assume "tinguely"
is the template):
# edquota -p tinguely user1 user2 user3 ... userN
6) turn quotas on (usually done in the /etc/rc file, but turn it
on manually so you do not have to reboot right now:
# quotaon
that should take care of setting up quotas. You can look at the
status of use of files with repquota, the -a option lists all
filesystems with quotas.
All of these directories should be owned by bin, group bin, mode
1777. This turns on the sticky bit, so that the only people who
can remove a file from these directories are the owner and root.
Several strides have been made in the past to reduce the amount
of 'cruft' that gets into the default kernel. One way is to
make the kernel so hard to use that practically no one but a
person with precisely the 'right' hardware would be able to use
the system
Another way is to implement something called 'LKM's or "Loadable
Kernel Modules". These are run-time extensions to the system
that allow the distribution kernel to not include things that
people might want, but not nxbeed until they get the system up
and running. While the security concerns of LKMs are valid,
their implementation is such a win that the research to
implement them is well worth it.
It was really _very_ simple to make these, so this is nothing
spectacular. Just something to keep from having to recompile just to
add msdosfs support to a machine. ;)
To try this:
1) get ftp://ftp.flame.org/pub/netbsd/lkm.tar.gz
2) untar it somewhere. It will create a subdirectory
3) follow the directions in lkm/README
Please mail suggestions, and (especially) fixes and more
modules to Michael Graff <explorer@flame.org>. Once it is
clean enough, I'll send it in as a send-pr and see what
happens. :)
One question which still needs to be resolved is where should
these *.o LKM's be installed? The directory '/usr/lkm' would
be a good idea, with the output (modload's -o option) in
/var/run/lkm or something like that.
This is actually two separate questions, but they are close enough
to the same that I can answer them here. The first problem that
anyone building a 'crypt' aware program needs to remember is that
the crypt library is a separate library and requires a '-lcrypt'
to be added at the end of the link line. The other half of the
problem is the 'US Non Export' policy for DES encryption. There
are several good sources (about one per country) for non-US
crypt libraries. IF you are outside the US and need one, look
around on some of the NetBSD/FreeBSD/OpenBSD FTP sites in the
'local area'. By the way. I don't have any good URLs for Mars,
so you might be out of luck.
OpenBSD doesn't appear to have this problem, since it is a
"Canadian" product rather than an American one. Thanks to this,
there is no restriction on exporting (or importing) the crypt
library, so it is no longer needed. With version 2.1 of
OpenBSD, the crypt library doesn't even exist; it is included in
the standard library for the system.
There is a 16 character limit, sort of. The most likely symptom
for this is that the header for the file _after_ the long file
name will be mangled. It turns out that there is a "T" option
that may not be documented very well that provides the correct
functionality for long filename support in ar.
Remove the sys_errlist reference in the source you're compiling.
You can either delete it (there are advantages to just deleting
it) or you can wrap a "#ifdef __NetBSD__/#endif" (obviously only
if you are running NetBSD, FreeBSD and OpenBSD have a similar
mechanism) pair around it. There are religious issues
regarding the use of sys_errlist that involve either system
security (most declaration allow the error list to be written
to) or system internals (there's already a well-defined
library call that performs the sys_errlist lookup). An
anonymous example is included below:
Most stupid packages such as GCC expects extern
(char*)sys_errlist[] whereas 4.4Lite based systems have more
secure extern const (char*) const sys_errlist[] declaration.
Just kick that "cccp.c" in the butt and modify the suspicious
line. Hard to believe GCC still doesn't do that. You're going
to have to do lots of this modification as you encounter more of
such programs.
There is a set of books produced by O'Reilly and associates that
describe in some detail the 4.4 BSD system. The six volume set
includes a book on system administration which directly pertains
to the operation and management of NetBSD and FreeBSD. Also see
the Section 1 for a good list of the books that folks use for
the system. There is also a good list of books (specifically
about writing device drivers) in the 'pcvt' distributions in
NetBSD, FreeBSD, and OpenBSD. It is in a file called
'Bibliography' and contains the pcvt author's list of device
driver books.
With the release of the System Administrators Tool for Analyzing
Networks (SATAN), network security has suddenly become a serious
issue. There are a few things you can do.
-- Get, read, and understand the CERT advisories
-- Get SATAN and run it against your own system or network.
Fix whatever it finds as holes
-- Get courtney, a program that was written to recognize a
SATAN attack pattern and notify you whenever someone tries to
probe your system
-- Log all failed login attempts (see below)
Failed logins are logged (without the attempted login name) at
LOG_NOTICE priority. Failed logins are logged _with_ the
attempted login name at LOG_NOTICE priority, and with the
LOG_AUTHPRIV facility.
If you set up some lines in syslog.conf like:
# The authpriv log file should be restricted access;
# these messages shouldn't go to terminals or publically-readable files.
authpriv.* /var/log/secure
Make absolutely sure, though, that it's really what you want:
logging actual supplied logins is often a great way to offer
cleartext passwords to an adversary...
Which is why you have
authpriv.* /var/log/secure
...,authpriv.none,... /var/log/messages
So none of the authpriv messages (those that actually display
the failed login) goto /var/log/messages, but they do go to
/var/log/secure (which you have with 600 perms.) Bear in mind
that this still does not prevent someone that has hacked into
your system with root privs from reading them. See 4.4.2 for
more information.
The "ccd" device (in -current) provides the capability to span a
file system across multiple hard drive partitions. Jason Thorpe
<thorpej@nas.nasa.gov> has been working on it; if you try it and
have problems, here are the debug instructions:
Considering that the error comes froom the ioctl (rather than the
open) I'm tempted to say it comes from either the vn_open() or
subsequent VOP_*() operations on the components. If you compile
your kernel with `options CCDDEBUG' and set the ccddebug variable
(near the top of ccd.c or with the ddb) to 0x03, you should be able
to see where it fails. If you could send me that information,
that would be most helpful.
Might be the same problem I had; it turns out that the partitions
that you build your concatenated disk device from must not be
marked "unused" in their native disks' labels. This "device not
configured" is the way ccdconfig informs you of this condition... :-)
Actually, I guess this indicates a need for a special "ccd
component" type entry for disklabel? Or should the partition
simply be marked as a "raw" partition, sharing this type with
database log partitions etc?
'Der Mouse' (mouse@collatz.mcrcim.mcgill.edu) adds:
Personally, I think ccd has no business looking at those
partition types. But I definitely think a special ccd-component
partition type is _not_ the way to go; if nothing else, it makes
life hard for people running ports using non-NetBSD disk
partitions. For example, under NetBSD/sparc on a disk with
a SunOS label, there are no partition types in the label, so
it would be impossible to use a ccd that insisted on a special
partition type on such a disk.
Section 0. (Basic FAQ information)
0.0 : Master Index.
0.1 : A brief history of the *BSD family.
0.1.1 : How close is NetBSD (or FreeBSD) to BSD 4.4?
0.1.3 : Where can I get more information about the *BSD family of Operating Systems?
0.2 : About this FAQ.
Section 1. General Network Information
Section 2. Common installation questions
Section 3. Kernel Building and Maintenance
Section 4. Kernel Additions
Section 5. Kernel Replacement Parts
Section 6. Interaction with MS-DOS
Section 7. System Communication
Section 8. NetBSD for the Mac FAQ
Section 9. NetBSD for the Amiga FAQ
...
Section n. NetBSD for the Timex Sinclair FAQ
0.2.1 : I want to start up a thread about why *BSD is or isn't as good as some other operating system. Can anyone suggest a good reason why I shouldn't?
0.3 : Are there any resources on the Net (like URLs) associated with the BSD family of operating systems?
Handle Channel
'hubertf' #netbsd
0.4 : How to add your pet answer to the FAQ.
0.5 : Administrivia.
0.6 : Does anyone reading this have any sense of humor at all?
Q) Which is better? NetBSD, OpenBSD, Linux, or FreeBSD?
Section 1. (General Network Information)
General information
1.0 : I just downloaded all of 386bsd version 0.1 and I can't get [some feature] to work? Do you have any suggestions?
1.1 : Minimum hardware configuration recommended
1.4 : Where to get the source and binaries
1.4.1 : Where can I get the distribution on CD ROM?
- expanded source tree for all architectures
- FreeBSD 2.1.5
- distribution sets for x86
- expanded source and binary trees for x86
- XFree86 binaries for both FreeBSD and NetBSD
- X11R6 (xc as well as contrib)
- BSD-related news archive
- various Answers to Frequently asked Question (FAQs)
+1-800-800-6613
InfoMagic, Inc. Tel: +1-602-526-9565
PO Box 30370 Fax: +1-602-526-9573
Flagstaff, AZ 86003-0370 e-mail: orders@Infomagic.com
info@infomagic.com
For information about subscriptions, contact DiscNet at:
Ordering information:
Trans-Ameritech Enterprises, Inc.
2342A Walsh Ave.
Santa Clara, CA 95051
FAX: 408/727-3882
1.5.3 : *BSD system mailing lists.
There are four mailing lists for FreeBSD and they are:
1.5.4 : System Updates.
1.6 : Documentation available
1.6.1 : BSD manuals
1.6.2 : BSD books
UNIX AND UNIX DEVICE DRIVERS
Holt, Rinehart and Winston 1983
handling the unique features of the BSD system.
Addison Wesley 1988, corrected Reprint 1989
Addison Wesley 1991
available in fine book stores everywhere
In addition, there are many other books which, for one reason or
another, have not made it into this brief list. Rest assured that
this is not intended to be an exhaustive list by any means.
1.6.6 : The O'Reilly and Associates BSD 4.4 Set.
1.6.7 : Other FAQ's on the net that are relevant
1.7.1 : Official distribution sites
Section 2. (Common installation questions)
2.0 : Install process
kerncopy.fs
base0-9.fs
fred.fs
genericaha.fs
boot-me-first.fs
this-is-the-file-with-the-fs-extension.fs
2.0.1 : Boot disks (versions and media formats)
2.0.1.1 : I have the base system installed, and now I want to install the rest of the system. Where did the 'extract' program go?
2.0.1.2a : The floppy booted, but now the hard disk won't boot?
2.0.1.2b : I am trying to reinstall. I run install and it loops asking me if I want to use the whole disk?
2.0.1.4 : What are the options on the boot prompt?
2.0.1.5 : I just used the '-s' option on the boot, but I can't write anything onto the disk. What is wrong? If I use a plain 'mount' command it tells me that my root file system is read-only.
2.1 : Binary distribution
2.1.1 : I want to install by NFS but I am having all kinds of problems connecting to the Sun server where the files are.
# mount -o resvport server:/fs /mnt_point
or to use the -P flag (which does the same thing). See the
mount and mount_nfs man pages for the details.
-P server:/fs
2.2 : Configuration
Ready-to-print PostScript files for each section of the net2 system
maintainer's manual are on nova.cc.purdue.edu in
pub/386bsd/submissions/bsd.manuals.
2.2.1 : Partitions
2.2.1.1 : What is a 'disklabel' and why do I need one?
# /dev/rwd1d:
type: ESDI
disk: maxtor7245
label:
flags:
bytes/sector: 512
sectors/track: 31
tracks/cylinder: 16
sectors/cylinder: 496
cylinders: 967
rpm: 3600
interleave: 1
trackskew: 0
cylinderskew: 0
headswitch: 0 # milliseconds
track-to-track seek: 0 # milliseconds
drivedata: 0
2.2.1.2 : What other kinds of information do I need if I really want to tune my hard drive's performance in conjunction with a newfs?
2.2.2 : Common Disk Label Problems.
2.2.2.1 : Increasing the *BSD partition size.
2.2.2.2 : I can access the DOS partition on my second disk from Unix but not DOS? Any suggestions?
1 6 0 69 DOSbi # ..
2 165 70 98 unkno
for a 99 cyl drive.
2.2.2.3 : I want to use my entire 2 Gig drive as the root partition. Why doesn't it work?
2.5.3 : How do I set up the system so that I can boot from more than one operating system/file-loader without using floppies?
2.2.3 : How do I get the system to boot from the second hard drive?
loadstart:
loadstart:
This way, whatever drive the boot blocks are loaded from, it has
that as default. In my case, I get wd(0,a) when I have my netbsd
drive as C:, and wd(1,a) when I have it as D:. (I've been
swapping drives left right and center the last day getting dos
to boot on one drive and netbsd on another).
2.2.4 : How do I disklabel my second hard drive?
1(off)=Termination software controlled.
2,3,4(off)=I/O Port x330.
5(on)=disable floppy. I use the Austin floppy controller.
6,7,8(on)=disable Adaptec BIOS.
2.2.5 : NetBSD and FreeBSD cannot handle disk geometry translations, but it turns out that my disk geometry is translated. It has five zones, each with a different sec/track! What kind of things can I do about the disk translation my hard disk controller uses?
system, switch to the Install-1 floppy and press enter.
want to label the disk, be brave and say yes.
run as part of the NetBSD install has written the NetBSD
primary boot block to {cylinder xx, head 0, sector 1},
written the disk label to {cyl xx, head 0, sec 2}, and
written the secondary boot program to {cyl xx, head 0,
sectors 3 to 16}. ("xx" represents the translated
cylinder number you chose for the start of the NetBSD
partition. You did choose to start on a cylinder boundary,
I hope.)
the NetBSD disk label and secondary boot block from {cyl
xx, head 0, sectors 2 to 16} to {cyl 0, head 0, sectors 2
to 16}.
(decimal 165) to something else (I use 0xA4, decimal 164),
but keep it flagged as bootable. This will let you boot
to the NetBSD primary boot block.
{sys id = 0xA5, boot flag = 0, start cylinder/head/sector =
0/0/1, end cylinder/head/sector = anything, initial
offset = 0, total size = anything}. This will tell the
NetBSD primary boot block, or a NetBSD system booted from
a floppy, that it should look for the NetBSD disk label
in {cyl 0, head 0, sec 2}.
2.2.6 : I am having trouble installing on the EIDE hard drive. What are some of the things that I need to look into?
disklabel wd0 or
disklabel /dev/wd0c or
disklabel /dev/wd0d
It didn't get quite clear to me, what these differences are exactly.
2.2.7 : My disk label is complaining about '256 heads' in the disklabel. This is obviously bogus, but it doesn't seem to be hurting anything. Is it Okay or should I fix it?
2.2.8 : What are the options for the boot up prompt?
-s............... boot into single user mode
-a............... ask the user what device to use as root
just before mounting it (Not presently supported)
-d............... once you have the kernel loaded and VM and such up
and going, drop into the kernel debugger.
(great for debugging probe code)
-a Ask for a file name to reboot from
-s Reboot into single user mode
-b Don't reboot, just halt
-r Use compiled in Root device
-c Invoke the user configuration routines
-d Transfer control to the kernel debugger, if available
-v Print out all potentially important information
2.2.9 : I am having trouble installing WRT 'syslogd: bind: Can't assign requested address' errors. What are some of the things I should look at? I also am having trouble with the network: 'starting network ... ifconfig: localhost: badvalue'.
127.0.0.1 localhost localhost.{yourdomainhere}
ifconfig lo0 localhost
route add {hostname} localhost
hosts
bind
2.2.10 : When I start up my system, it hangs for three or four minutes during the 'netstart' program. Our network nameserver is working OK, and I use it all the time; my resolv.conf file says to use the network nameserver. Why would netstart have such problems using it?
2.2.11 : I am having trouble getting net aliases to work. What could some of the problems be?
ifconfig eth0 xx.xx.xx.xx netmask 255.255.255.255 alias
route add -host xx.xx.xx.xx localhost
arp -s eth0 yy.yy.yy.yy.yy.yy proxy
2.2.12 : I'm having trouble with the networking code (specifically the PPP stuff to my ISP). How can I debug NetBSD's networking?
0 bad header checksums
0 with size smaller than minimum
0 with data size < data length
0 with header length < data size
0 with data length < header length
0 with bad options
0 with incorrect version number
[...]
0 output packets dropped due to no bufs, etc.
0 discarded for bad checksums
0 discarded for bad header offset fields
0 discarded because packet too short
2.2.13 : I want to hard wire my SCSI devices to a particular device number. Is that possible?
sd10 at scsibus0 target 0 lun ?
sd11 at scsibus0 target 1 lun ?
[...]
sd20 at scsibus1 target 0 lun ?
sd21 at scsibus1 target 1 lun ?
[...]
sd0 at scsibus0 target 0 lun 0
sd0 at scsibus0 target 0 lun 0
sd1 at scsibus0 target 1 lun 0
sd* at scsibus? target ? lun ? # SCSI disk drives
st0 at scsibus0 target 6 lun 0
st* at scsibus? target ? lun ? # SCSI tape drives
cd0 at scsibus? target 5 lun 0
cd* at scsibus? target ? lun ? # SCSI CD-ROM drives
etc.
2.3 : Common installation problems.
2.3.2 : Endless reboot cycles.
2.4 : The computer just sits there, or 'that isn't right'.
2.4.1 : The boot disk works all right on one computer but not another.
2.4.2 : Really strange errors in the various *BSD flavors.
2.4.2.2 : Using the new code in NetBSD, I get a "panic: pdti 206067" in pmap_enter(). What should I do?
2.4.3a : I get the error "isr 15 and error: isr 17" on an NE2000 card.
2.4.3b : I have some card on IRQ2 and it doesn't work; why?
2.4.3c : I am getting lousy performance out of my network card. What are some of the other possibilities?
2.4.4 : What is the difference between IRQ2 and IRQ9? Are they really the same, or are they really different?
Internal External Function
IRQ0 n/a Refresh/Timer
IRQ1 n/a Keyboard
IRQ2 n/a (AT only) Cascade Input to Master
IRQ3 IRQ3 Free (Com port)
IRQ4 IRQ4 Free (Com port)
IRQ5 IRQ5 Free
IRQ6 IRQ6 Floppy Controller
IRQ7 IRQ7 Free (Printer/Sound Card*)
IRQ8 n/a Real Time Clock
IRQ9 IRQ2 Free (Network card)
IRQ10 IRQ10 Free
* NOTE: The IRQ7 entry is spooky. If you use the Interruptless
printer driver (either from 386bsd, NetBSD, or FreeBSD) then you
can still have an interrupting device (like a sound card) on
interrupt 7. Basically, you can as many devices on each IRQ as
you want, but only one of them can be 'actively' interrupting.
2.4.5 : Some of my SCSI devices (like a tape drive) don't work; why?
2.4.6 : I want to use the Adaptec 1542C SCSI controller. What are the problems/tricks you need to know to get it working?
2.4.7 : Is there a SCSI utility which works to fix up the random problems I sometimes have with my drives?
2.4.8 : My system boots OK off the floppy, but once I try to boot from the hard drive, the message "changing root device to sd0a" appears and the system hangs. What is the most likely thing that I have done wrong?
2.5 : Other common problems that are attributed to the installation process but are caused other places.
2.5.1 : I want to use more than 16 Megabytes of memory. Will any of the BSD based systems support it?
hostname /netbsd: sd0: not queued
hostname /netbsd: aha0: DMA beyond end of ISA
hostname /netbsd: sd0: not queued aha0: DMA beyond end of ISA
2.5.2 : I tried to use a device in my computer that should be there. When I did, I got a "Device not configured error." What do I do now?
2.6 : Customizing the system to meet my needs.
2.6.1 : How do I get the system to not display the machine name, but display our company name?
:im=\r\n Company Name (%t)\r\n\n:\
2.6.2 : I have a program that, under normal circumstances, starts once a second. This regularly causes inetd to terminate the program with a 'server failing (looping), service terminated' error. How do I fix this?
Section 3. (Kernel Building and Maintenance)
3.0 : System Internals
3.1 : Kernel
3.1.1 : How do I build a kernel?
3.1.1.1 : Why does the kernel code for NetBSD still use the old K&R style declarations when the ANSI declarations are SO much better?
3.1.1.2 : How do I port NetBSD to another platform?
3.1.2 : I want to do one of the following things: * add a device not in the distributed kernel (third com port, additional disk or tape, line printer driver, etc). * use a patch from the net or the patchkit to fix a kernel bug. * add another swap device. * recompile the kernel to remove extraneous devices so that it takes up less space. * configure more pseudo-terminals to allow for more xterms or network logins.
3.1.3 : I want to build and profile a kernel. What do I need to do?
config -p CONFIG.FILE.OF.YOUR.CHOICE
cd /sys/arch/<X>/compile/CONFIG.FILE.OF.YOUR.CHOICE
make depend
make
<install the kernel and reboot>
su to root
kgmon -r -h
kgmon -b
kgmon -p (this produces the gmon.out file, which is the
profiles kernel information)
3.1.4 : Now that I have a kernel, how do I install it?
3.1.5 : My system is complaining about stray interrupt 7. Is my machine going to explode or anything?
3.1.6 : I keep getting "wd0c: extra interrupt". What does it mean?
3.1.7 : I keep getting silo overflow messages, but the system doesn't seem to mind. Is there a problem?
3.1.8 : I found a bug in the kernel. How do I report it?
3.2 : What exactly is this config file, anyway? What are all of these cryptic notations?
3.2.1 : Okay, fine. Why shouldn't I just add every device I can find to the kernel, so I'll never have to recompile this again?
3.2.2 : What should I remove from the kernel?
3.2.3 : I can't get enough remote login sessions or xterm sessions. I also can only get four sessions working at a time. What can I do?
3.2.4 : How do I get ddb, the kernel debugger, compiled into the kernel and running?
3.2.5 : I'm getting all kinds of errors when I try to build a new version of GCC. How can I upgrade GCC to the most current version?
3.2.6 : Can I patch the current running OS image?
3.2.7 : Can I have more than one config file? Should I rename it to something else? Any other hints?
3.2.8 : I have been getting a lot of "virtual memory exhausted" errors when I am compiling a program with a really big static array. I have 128Meg of memory and 8Gig of swap. How can this be happening?
3.2.8.1 : I am running NetBSD 1.2.1 (or earlier) and really DO have 128 Meg of memory; but the generic kernel only sees the first 64Meg. How can I fix this?
3.2.8.2 : How do I dedicate 16Meg of memory to nothing but disk buffers?
3.2.9 : Where can I learn more about all this?
3.3 : Other kernel related kind of questions.
3.3.1 : Has the method for system call changed in NetBSD?
3.3.2 : Does anyone have a system building script that takes things like building a new config and multiple config files into account?
3.3.3 : How do I upgrade from my release version of NetBSD (and probably FreeBSD) to the '-current' development sources?
3.3.4 : Is there a Makefile that does all that happy world-building stuff?
3.3.5 : Can NetBSD do cross compilation?
3.3.6 : My network memory seems to be leaking. The numbers just keep increasing slowly over time. Is there a problem I need to worry about?
3.4 : X11/XFree86/XS3
3.4.1 : What options should I define to get the X extensions included?
3.4.2 : Where can I get the FAQ for 'X'?
3.4.3 : Why does X drop characters when using xdm? When I run xdm from the console, it keeps losing keystrokes and the shift keys don't always work. Why?
3.4.4 : What can I do to figure out why 'X' doesn't work with NetBSD?
3.4.5 : Under NetBSD and FreeBSD, xlock (or any other program that uses passwords) fails to validate user passwords. Anyone know why?
3.5 : I want to run 'XYZA' which is dynamically linked and from 'some other operating system'. What special things do I have to do to get it working?
lib/ (the emulated /lib directory)
usr/ (the emulated /usr directory)
ld86
doom1.wad
linuxxdoom
sndserver.old
3.6 : You promised to talk about timezones below. Are you going to?
summer (DST) time zone. Only STD is required;
if DST is missing, then summer time does not apply
in this locale. Upper- and lowercase letters are
explicitly allowed. Any characters except a
leading colon (:), digits, comma (,), minus (-),
plus (+), and ASCII NUL are allowed.
offset has the form:
The hour (hh) is required and may be a single
digit. The offset following STD is required. If
no offset follows DST, summer time is assumed to
be one hour ahead of standard time. One or more
digits may be used; the value is always
interpreted as a decimal number. The hour must
be between 0 and 24, and the minutes (and
seconds) - if present - between zero and 59. If
preceded by a "-", the time zone is east of the
Prime Meridian; otherwise it is west (which may
be indicated by an optional preceding "+").
describes the date when the change back
happens. The format of start and end must be
one of the following:
days are not counted. That is, in all
years, including leap years, February
28 is day 59 and March 1 is day 60. It
is impossible to explicitly refer to
the occasional February 29.
365). Leap days are counted, and it is
possible to refer to February 29.
0 < d < 6, 1 < m < 12). When n is 5 it
refers to the last d day of month m.
Day 0 is Sunday.
summer time occurs. Time has the same
format as offset except that no leading
sign (a minus (-) or a plus (+) sign)
is allowed. The default, if time is not
given, is 02:00:00.
3.6.1 : How do you change the timezone on NetBSD (FreeBSD also?)?
3.6.2 : The translation between seconds-since-the-epoch and date differs by about 18 seconds between BSD and other Unixes when running ntp; why?
3.7 : How can I implement CVS to track MY changes to the kernel source tree, yet still follow the -current development tree?
#!/bin/sh
# This is a shell archive.
# remove everything above the "#!/bin/sh" line
# and feed to /bin/sh
# Use -c option to overwrite existing files
#
# Contents:
# README.import
# import.sh
# prune.sh
#
# packed by: <sjg@zen.void.oz.au> on Sat Jun 17 20:00:34 EST 1995
#
PATH=/bin:/usr/bin:/usr/ucb ; export PATH
if test -f README.import -a x$1 != x-c ; then
echo shar: Will not over-write existing file \"README.import\"
else
echo shar: Extracting \"README.import\" \(2902 characters\)
sed 's/^X//' >README.import << '!EOF'
XThe following may be of use to others wanting to use CVS to merge
XNetBSD sources with local changes but are not confident that they have
Xinterpreted the documentation accurately.
X
XMuch thanks to Chris Demetriou (cgd) for taking the time to spell out
Xthe steps he used when merging NetBSD sources without which I might
Xnot have taken the plunge myself :-) The following is based on Chris'
Xtips, though of course any errors are mine.
X
XOk. My NetBSD sources are kept in usr.src, if NetBSD is all
Xyou use CVS for you might want to simply call it src.
X
XI unpack tar files and/or sup into a directory /d2/current.
X
XTo import the entire tree I:
X
Xcd /d2/current/src
X
Xcvs import "-I! " -m "from netbsd-current as of 950508" usr.src NetBSD \
XNetBSD-950508 > /tmp/cvs.out 2>&1
X
XWhere:
Xusr.src is the repository where the imported data goes (so set it
X according to your own needs),
XNetBSD is a vendor tag.
XNetBSD-950508 is a release tag (there can be multiple release tags given).
X
XI use "-I! " as otherise some files that you need (like
Xbin/csh/USD.doc/csh.a) will be ignored.. The space after the ! is
Xneeded.
X
XIt takes quite a while. It is a good idea to save the output to a file.
X
XAt the end you may well get a message like:
X
X cvs checkout -jNetBSD:yesterday -jNetBSD usr.src
X
XThis means there were some conflicts between your local sources and
Xthe import. So I do what it says - but not in my working tree.
X
Xcd /d2/tmp
Xcvs checkout -jNetBSD:yesterday -jNetBSD usr.src > /tmp/merge.out 2>&1
X
XYou can then go find all the files with conflicts.
XEither grep '^C' /tmp/merge.out or find usr.src -name '.#*' -print
XGo edit them to resolce the conflicts. This is usually obvious.
X
XWhen happy.
X
Xcd /d2/tmp/usr.src
Xcvs commit -m"merged local changes with NetBSD-950508"
Xcd ..
Xrm -rf usr.src
X
XOk. Now if you are brave you can:
X
Xcd /usr.src (or whereever your working sources are)
Xcvs update
X
XFinally, you should occasionally make sure you remove old files.
X
XI use a script to do this. It does a diff between files on the NetBSD
Xbranch looking for the latest release tag (eg. NetBSD-950508).
XIf cvs diff remports that a file does not have that tag, it is because
Xit was not present in the import (ie removed).
X
XThe command sequence is:
X
Xcvs diff -s -r NetBSD -r NetBSD-950508 > /tmp/prune.out 2>&1
X
X# check that all went well...
Xcat /tmp/prune.out | awk '/Diffing/ { dir=$NF }
X/NetBSD-/ { file=$NF; print dir "/" file }' > /tmp/pruned
X
Xcat /tmp/pruned | xargs cvs tag -d NetBSD
Xcat /tmp/pruned | xargs rm -f
Xcat /tmp/pruned | xargs cvs delete
X
XNote that this is a slow process on a 486DX33! So don't plan on
Xmerging everything very often. Folk who mainly hack the kernel can do
Xsrc/sys more frequently. The sequence is analogous eg.
X
Xcd /d2/current/src/sys
X
Xcvs import "-I! " -m "from netbsd-current as of 950508" usr.src/sys NetBSD \
XNetBSD-950508 > /tmp/cvs.out 2>&1
X
Xetc.
X
XHope this helps.
X
X--sjg
!EOF
if test 2902 -ne `wc -c < README.import`; then
echo shar: \"README.import\" unpacked with wrong size!
fi
fi
if test -f import.sh -a x$1 != x-c ; then
echo shar: Will not over-write existing file \"import.sh\"
else
echo shar: Extracting \"import.sh\" \(290 characters\)
sed 's/^X//' >import.sh << '!EOF'
X:
Xtoday=`date '+%y%m%d'`
X
Xrep=${1:-usr.src}
X
X# -I! doesn't work, it needs a space after the !
Xcvs import "-I! " -m "from netbsd-current as of $today" $rep NetBSD NetBSD-$today
X
X# cd somewhere
X# cvs checkout -jNetBSD:yesterday -jNetBSD usr.src > /tmp/cvs.out 2>&1
X# merge changes and commit
!EOF
if test 290 -ne `wc -c < import.sh`; then
echo shar: \"import.sh\" unpacked with wrong size!
fi
chmod +x import.sh
fi
if test -f prune.sh -a x$1 != x-c ; then
echo shar: Will not over-write existing file \"prune.sh\"
else
echo shar: Extracting \"prune.sh\" \(491 characters\)
sed 's/^X//' >prune.sh << '!EOF'
X:
Xthen=${1:-`date '+%y%m%d'`}
XTF=/tmp/prune.$$
XTF2=/tmp/prune2.$$
X#S=-s
XS=
X
Xcase `echo -n .` in -n*) N=; C="\c";; *) N=-n; C=;; esac
X
Xask () { echo $N "${2:-$1?} "$C; read $1; }
X
Xcvs diff $S -r NetBSD -r NetBSD-$then > $TF 2>&1 || cat $TF >&2
X
Xcat $TF | awk '/Diffing/ { dir=$NF } /NetBSD-/ { file=$NF; print dir "/" file }' > $TF2
X
Xcat $TF2
Xask proceed
Xcase "$proceed" in
X[yY]*)
Xcat $TF2 | xargs cvs tag -d NetBSD
Xcat $TF2 | xargs rm -f
Xcat $TF2 | xargs cvs delete
X;;
Xesac
Xrm -f $TF $TF2
!EOF
if test 491 -ne `wc -c < prune.sh`; then
echo shar: \"prune.sh\" unpacked with wrong size!
fi
chmod +x prune.sh
fi
exit 0
3.8 : Optional Op-codes for NetBSD, FreeBSD, and other systems.
AAC Alter All Commands
AAR Alter At Random
AB Add Backwards
AFVC Add Finagle's Variable Constant
AIB Attack Innocent Bystander
AWTT Assemble With Tinker Toys
BAC Branch to Alpha Centauri
BAF Blow All Fuses
BAFL Branch And Flush
BBIL Branch on Blown Indicator Light
BBT Branch on Binary Tree
BBW Branch Both Ways
BCF Branch and Catch Fire
BCIL Branch Creating Infinite Loop
BDC Break Down and Cry
BDT Burn Data Tree
BEW Branch Either Way
BF Belch Fire
BH Branch and Hang
BOB Branch On Bug
BOD Beat On the Disk
BOI Bite Operator Immediately
BPDI Be Polite, Don't Interrupt
BPO Branch on Power Off
BRSS Branch on Sunspot
BST Backspace and Stretch Tape
BW Branch on Whim
CDC Close Disk Cover
CDIOOAZ Calm Down, It's Only Ones and Zeros
CEMU Close Eyes and Monkey with User space
CH Create Havoc
CLBR Clobber Register
CM Circulate Memory
CML Compute Meaning of Life
COLB Crash for Operators Lunch Break
CPPR Crumple Printer Paper and Rip
CRASH Continue Running After Stop or Halt
CRB Crash and Burn
CRN Convert to Roman Numerals
CS Crash System
CSL Curse and Swear Loudly
CU Convert to Unary
CVG Convert to Garbage
CWOM Complement Write-Only Memory
CZZC Convert Zone to Zip Code
DBZ Divide By Zero
DC Divide and Conquer
DMNS Do what I Mean, Not what I Say
DMPK Destroy Memory Protect Key
DPMI Declare Programmer Mentally Incompetent
DPR Destroy Program
DTC Destroy This Command
DTE Decrement Telephone Extension
DTVFL Destroy Third Variable From Left
DW Destroy World
ECO Electrocute Computer Operator
EFD Emulate Frisbee Using Disk Pack
EIAO Execute In Any Order
EIOC Execute Invalid Opcode
ENF Emit Noxious Fumes
EO Execute Operator
EROS Erase Read-Only Storage
FLI Flash Lights Impressively
FSM Fold, Spindle and Mutilate
GCAR Get Correct Answer Regardless
GDP Grin Defiantly at Programmer
GFM Go Forth and Multiply
IAE Ignore All Exceptions
IBP Insert Bug and Proceed
ISC Insert Sarcastic Comments
JTZ Jump to Twilight Zone
LCC Load and Clear Core
MAZ Multiply Answer by Zero
MLR Move and Lose Record
MWAG Make Wild-Assed Guess
MWT Malfunction Without Telling
OML Obey Murphy's Laws
PD Play Dead
PDSK Punch Disk
PEHC Punch Extra Holes on Cards
POCL Punch Out Console Lights
POPI Punch Operator Immediately
RA Randomize Answer
RASC Read And Shred Card
RCB Read Command Backwards
RD Reverse Directions
RDA Refuse to Disclose Answer
RDB Run Disk Backwards
RIRG Read Inter-Record Gap
RLI Rotate Left Indefinitely
ROC Randomize Opcodes
RPB Read, Print and Blush
RPM Read Programmer's Mind
RSD On Read Error Self-Destruct
RWCR Rewind Card Reader
SAI Skip All Instructions
SAS Sit and Spin
SCCA Short Circuit on Correct Answer
SFH Set Flags to Half mast
SLMTU=x SLIP MTU size
SLP Sharpen Light Pen
SPS Set Panel Switches
SPSW Scramble Program Status Word
SQPC Sit Quietly and Play with your Crayons
SRDR Shift Right Double Ridiculous
STA Store Anywhere
TARC Take Arithmetic Review Course
TPF Turn Power Off
TPN Turn Power On
UCB Uncouple CPU and Branch
ULDA Unload Accumulator
UP Understand Program
WBT Water Binary Tree
WHFO Wait Until Hell Freezes Over
WI Write Illegibly
WSWW Work in Strange and Wondrous Ways
XSP Execute Systems Programmer
ZAR Zero Any Register
Section 4. (System Additions)
4.0 : Introduction
4.1 : Common (sort of) Kernel-related problems
4.1.1 : Sometimes I have trouble with my system resetting the terminal to seven bit mode. Isn't BSD eight bit clean?
4.1.2 : How do you implement quotas on Net/2 derived BSD systems?
4.1.3 : What are the correct permissions for the /tmp, /usr/tmp, and /var/tmp directories?
4.2 : Available kernel add-ons
4.2.1 : Loadable Kernel Modules
called lkm and all extracted files will go in it.
(I use /usr/src, but that may be a bad place)
4.3 : Other program building type problems.
4.3.1 : I am building a program that requires access to the crypt library. Either I have it and it isn't getting copied into the executable, or I don't have it; why?
4.3.2 : I am having trouble with long file names in my libraries. It seems like there is a 16 character limit in the library somewhere.
4.3.3 : I'm getting annoyed with having this "conflicting types for `sys_errlist'" problem show up nearly every time I build a program. What do I need to do?
4.4 : System Administration Questions
4.4.1 : Where can I get good books about NetBSD or FreeBSD?
4.4.2 : I am concerned about system security. What should I do to protect my system from net attacks?
4.4.3 : How can I log failed login attempts?
4.4.4 : Can I use a Concatenated Filesystem with NetBSD?
4.4.4.1 : Why, when I type "ccdconfig ccd0 16 none /dev/wd0a > /dev/wd1a", do I get back "ccdconfig: ioctl (CCDIOCSET): /dev/ccd0d: Device not configured"?
4.4.5 : I am really new to Unix System Administration. I need some real basic help.