diff --git a/en_US.ISO8859-1/articles/formatting-media/article.sgml b/en_US.ISO8859-1/articles/formatting-media/article.sgml
index c2cf44f23e..b2edfb9115 100644
--- a/en_US.ISO8859-1/articles/formatting-media/article.sgml
+++ b/en_US.ISO8859-1/articles/formatting-media/article.sgml
@@ -1,464 +1,464 @@
-
+
Formatting Media For Use With FreeBSD 2.2-RELEASEA TutorialDougWhitedwhite@resnet.uoregon.eduMarch 1997This document describes how to slice, partition, and
format hard disk drives and similar media for use with FreeBSD. The
examples given have been tested under FreeBSD 2.2-GAMMA and may work
for other releases. Introduction & DefinitionsOverviewSuccessfully adding disks to an existing system is the mark of an
experienced system administrator. Slicing, partitioning, and adding
disks requires a careful dance of proper command and name syntax. One
slipped finger and an entire disk could disappear in seconds. This
document is written in an attempt to simplify this process and avoid
accidents. Thankfully, enhancements to existing tools (notably
sysinstall) have greatly improved this process in recent releases of
FreeBSD. There are two possible modes of disk formatting:
compatibility mode: Arranging a
disk so that it has a slice table for use with other operating
systems.dangerously dedicated mode:
Formatting a disk with no slice table. This makes the process of
adding disks easier, however non-FreeBSD operating systems may not
accept the disk. For most cases, dedicated mode is the easiest to set up and use
in existing systems, as a new disk is usually dedicated entirely to
FreeBSD. However, compatibility mode insures optimum interoperability
with future installations at a cost of increased complexity.In addition to selecting the mode, two methods of slicing the
disk are available. One is using the system installation tool
/stand/sysinstall. 2.1.7-RELEASE and later
versions of sysinstall contain code to ease setup
of disks during normal system operation, mainly allowing access to the
Label and Partition editors and a Write feature which will update just
the selected disk and slice without affecting other disks. The other
method is running the tools manually from a root command line. For
dangerously dedicated mode, only three or four commands are involved
while sysinstall requires some manipulation.DefinitionsUNIX disk management over the centuries has invented many new
definitions for old words. The following glossary covers the
definitions used in this document and (hopefully) for FreeBSD in
general. compatibility mode: Arranging a disk so that it has a slice
table for use with other operating systems. Oppose dangerously
dedicated mode.dangerously dedicated mode: Formatting a disk with no slice
table. This makes the process of adding disks easier, however
non-FreeBSD operating systems may not accept the disk. Oppose
compatibility mode.disk: A circular disc, covered with magnetic or similarly
manipulable material, spun by a motor under a head. Data is stored on
the disk by changing the pattern of magnetism on the disc, which can
be later read. Hard disks, CD-ROMs, Magneto-optical,and Zip/Jaz
removables are examples of disks.slice: A division of a disk. Up to four slices are permitted on one
disk in the PC standard. Slices are composed of contiguous sectors.
Slices are recorded in a slice table used by the system BIOS to
locate bootable partitions. The slice table is usually called the
Partition Table in DOS parlance. Maintained by the fdisk utility.partition: A division of a slice. Usually used in reference
to divisions of the FreeBSD slice of a disk. Each filesystem and swap
area on a disk resides in a partition. Maintained using the disklabel
utility.sector: Smallest subdivision of a disk. One sector usually
represents 512 bytes of data.Warnings & PitfallsBuilding disks is not something to take lightly. It is quite possible
to destroy the contents of other disks in your system if the proper
precautions are not taken.Check your work carefully.> It is very simple to destroy
the incorrect disk when working with these commands. When
in doubt consult the kernel boot output for the proper device.Needless to say, we are not responsible for any damage to any data
or hardware that you may experience. You work at your own risk!Zip, Jaz, and Other RemovablesRemovable disks can be formatted in the same way as normal hard
disks. It is essential to have the disk drive connected to the system
and a disk placed in the drive during startup, so the kernel can
determine the drive's geometry. Check the dmesg
output and make sure your device and the disk's size is listed. If
the kernel reports
Can't get the size
then the disk was not in the drive. In this case, you will need to restart the
machine before attempting to format disks.
Formatting Disks in Dedicated ModeIntroductionThis section details how to make disks that are totally dedicated to
FreeBSD. Remember, dedicated mode disks cannot be booted by the PC
architecture.Making Dedicated Mode Disks using Sysinstall/stand/sysinstall, the system installation
utility, has been expanded in recent versions to make the process of
dividing disks properly a less tiring affair. The fdisk and disklabel
editors built into sysinstall are GUI tools that remove much of the
confusion from slicing disks. For FreeBSD versions 2.1.7 and later,
this is perhaps the simplest way to slice disks.Start sysinstall as root by typing
/stand/sysinstall
from the command prompt.Select Index.Select Partition.Select the disk to edit with arrow keys and
SPACE.If you are using this entire disk for FreeBSD, select
A.When asked:
Do you want to do this with a true partition entry so as to remain
cooperative with any future possible operating systems on the
drive(s)?
answer No.When asked if you still want to do this, answer
Yes.Select Write.When warned about Writing on installed systems, answer
Yes.Quitthe FDISK Editor and
ESCAPE back to the Index menu.Select Label from the Index
menu.Label as desired. For a single partition, enter
C to Create a partition, accept the
default size, partition type Filesystem, and a mountpoint (which isn't
used).Enter W when done and confirm to
continue. The filesystem will be newfs'd for you, unless you select
otherwise (for news partitions you'll want to do this!). You'll get
the error:
Error mounting /mnt/dev/wd2s1e on /mnt/blah : No such file or directory
Ignore.
Exit out by repeatedly pressing ESCAPE.Making Dedicated Mode Disks Using the Command LineExecute the following commands, replacing wd2 with the disk
name. Lines beginning with # are comments.
dd if=/dev/zero of=/dev/rwd2 count=2
disklabel /dev/rwd2 | disklabel -B -R -r wd2 /dev/stdin
# We only want one partition, so using slice 'c' should be fine:
newfs /dev/rwd2c
If you need to edit the disklabel to create multiple
partitions (such as swap), use the following:
dd if=/dev/zero of=/dev/rwd2 count=2
disklabel /dev/r$d > /tmp/label
# Edit disklabel to add partitions:
vi /tmp/label
disklabel -B -R -r wd2 /tmp/label
# newfs partitions appropriately
Your disk is now ready for use.Making Compatibility Mode DisksIntroductionThe command line is the easiest way to make dedicated disks, and
the worst way to make compatibility disks. The command-line fdisk
utility requires higher math skills and an in-depth understanding of
the slice table, which is more than most people want to deal with.
Use sysinstall for compatibility disks, as described below.Making Compatibility Mode Disks Using SysinstallStart sysinstall as root by typing
/stand/sysinstall>
from the command prompt.Select Index.Select Partition.Select the disk to edit with arrow keys and
SPACE.
If you are using this entire disk for FreeBSD, select
A.When asked:
Do you want to do this with a true partition entry so as to remain
cooperative with any future possible operating systems on the
drive(s)?
answer yes.Select Write.When asked to install the boot manager, select None with
SPACE then hit ENTER for OK.Quit the FDISK Editor.You'll be asked about the boot manager, select
None
again. Select Label from the Index
menu.Label as desired. For a single partition, accept the
default size, type filesystem, and a mountpoint (which isn't
used).The filesystem will be newfs'd for you, unless you select otherwise (for news partitions you'll want to do this!). You'll get the error:
Error mounting /mnt/dev/wd2s1e on /mnt/blah : No such file or directory
Ignore.
Exit out by repeatedly pressing ESCAPE.Your new disk is now ready for use.Other Disk OperationsAdding Swap SpaceAs a system grows, it's need for swap space can also grow.
Although adding swap space to existing disks is very difficult, a new
disk can be partitioned with additional swap space. To add swap space when adding a disk to a system:
When partitioning the disk, edit the disklabel and
allocate the amount of swap space to add in partition `b' and the
remainder in another partition, such as `a' or `e'. The size is given
in 512 byte blocks. When newfsing the drive, do NOT newfs the `c'
partition. Instead, newfs the partition where the non-swap space
lies.Add an entry to /etc/fstab as follows:
/dev/wd0b none swap sw 0 0
Change /dev/wd0b to the device of the newly added
space.To make the new space immediately available, use the
swapon command.
$ swapon /dev/sd0b
swapon: added /dev/sd0b as swap space
Copying the Contents of DisksSubmitted By: Renaud Waldura (renaud@softway.com) To move file from your original base disk to the fresh new one,
do:
mount /dev/wd2 /mnt
pax -r -w -p e /usr/home /mnt
umount /mnt
rm -rf /usr/home/*
mount /dev/wd2 /usr/home
Creating Striped Disks using CCDCommands Submitted By: Stan Brown (stanb@awod.com)
The Concatenated Disk Driver, or CCD, allows you to treat several identical disks as a single disk.
Striping can result in increased disk performance by distributing reads and
writes across the disks. See the ccd(4) and ccdconfig(4) man pages or the
CCD Homepage for further details.To create a new CCD, execute the following commands. This describes
how to add three disks together; simply add or remove devices as
necessary. Remember that the disks to be striped must be identical.>Before executing these commands, make sure you add the line
pseudo-device ccd 4
to your kernel.
cd /dev ; sh MAKDEV ccd0
disklabel -r -w sd0 auto
disklabel -r -w sd1 auto
disklabel -r -w sd2 auto
disklabel -e sd0c # change type to 4.2BSD
disklabel -e sd1c # change type to 4.2BSD
disklabel -e sd2c # change type to 4.2BSD
ccdconfig ccd0 32 0 /dev/sd0c /dev/sd1c /dev/sd2c
newfs /dev/rccd0c
Now you can mount and use your CCD by referencing device /dev/ccd0c.
CreditsThe author would like to thank the following individuals for
their contributions to this project:
Darryl Okahata
(darrylo@hpnmhjw.sr.hp.com) for his
simple dedicated mode setup documentation which I have used repeatedly
on freebsd-questions.Jordan Hubbard
-(jkh@freebsd.org) for making
+(jkh@FreeBSD.org) for making
sysinstall useful for this type of task.John Fieber
(jfieber@indiana.edu) for making
information and examples of the DocBook DTD on which this document is
based.
-Greg Lehey (grog@freebsd.org) for checking my
+Greg Lehey (grog@FreeBSD.org) for checking my
work and pointing out inaccuracies, as well as miscellaneous support.
diff --git a/en_US.ISO8859-1/articles/mh/article.sgml b/en_US.ISO8859-1/articles/mh/article.sgml
index 3c33cf92ea..a58191f6df 100644
--- a/en_US.ISO8859-1/articles/mh/article.sgml
+++ b/en_US.ISO8859-1/articles/mh/article.sgml
@@ -1,704 +1,704 @@
-
+
An MH PrimerMattMidboematt@garply.comv1.0, 16 January 1996This document contains an introduction to using MH on
FreeBSDIntroductionMH started back in 1977 at the RAND Corporation, where the
initial philosophies behind MH were developed. MH isn't so much a
monolithic email program but a philosophy about how best to develop
tools for reading email. The MH developers have done a great job
adhering to the KISS> principle: Keep It Simple Stupid.
Rather than have one large program for reading, sending and handling
email they have written specialized programs for each part of your
email life. One might liken MH to the specialization that one finds
in insects and nature. Each tool in MH does one thing, and does it
very well.Beyond just the various tools that one uses to handle their
email MH has done an excellent job keeping the configuration of each
of these tools consistent and uniform. In fact, if you are not quite
sure how something is supposed to work or what the arguments for some
command are supposed to be then you can generally guess and be right.
Each MH command is consistent about how it handles reading the
configuration files and how it takes arguments on the command line.
One useful thing to remember is that you can always add a
to the command to have it display the options
for that command.The first thing that you need to do is to make sure that you have
installed the MH package on your FreeBSD machine. If you installed
from CDROM you should be able to execute the following to load mh:
# pkg_add /cdrom/packages/mh-6.8.3.tgz>
You will notice that it created a /usr/local/lib/mh>
directory for you as well as adding several binaries to the
/usr/local/bin> directory. If you would prefer to compile
it yourself then you can anonymous ftp it from ftp.ics.uci.edu or louie.udel.edu.This primer is not a full comprehensive explanation of how MH
works. This is just intended to get you started on the road to
happier, faster mail reading. You should read the man pages for the
various commands. Also you might want to read the comp.mail.mh newsgroup. Also you can
read the FAQ
for MH. The best resource for MH is the O'Reilly and Associates book
written by Jerry Peek.Reading MailThis section covers how to use inc>,
show>, scan>, next>,
prev>, rmm>, rmf>, and
msgchk>. One of the best things about MH is the
consistent interface between programs. A few things to keep in mind
when using these commands is how to specify message lists. In the
case of inc> this doesn't really make any sense but with
commands like show> it is useful to know. A message list can consist of something like 23 20
16> which will act on messages 23, 20 and 16. This is fairly simple
but you can do more useful things like 23-30> which will
act on all the messages between 23 and 30. You can also specify
something like cur:10> which will act on the current
message and the next 9 messages. The cur>,
last>, and first> messages are special
messages that refer to the current, last or first message in the
folder.inc>, msgchk>—read in your new email or check itIf you just type in inc> and hit return>
you will be well on your way to getting started with MH. The first
time you run inc> it will setup your account to use all
the MH defaults and ask you about creating a Mail directory. If you
have mail waiting to be downloaded you will see something that looks
like:
29 01/15 Doug White Re: Another Failed to boot problem<<On Mon, 15 J
30 01/16 "Jordan K. Hubbar Re: FBSD 2.1<<> Do you want a library instead of
31 01/16 Bruce Evans Re: location of bad144 table<<>> >It would appea
32 01/16 "Jordan K. Hubbar Re: video is up<<> Anyway, mrouted won't run, ev
33 01/16 Michael Smith Re: FBSD 2.1<<Nate Williams stands accused of sa
This is the same thing you will see from a scan> (see
). If you just run inc> with no
arguments it will look on your computer for email that is supposed to
be coming to you.A lot of people like to use POP for grabbing their email. MH can do
POP to grab your email. You will need to give inc> a few command
line arguments.
tempest% inc -host mail.pop.org -user username> -norpop>
That tells inc> to go to mail.pop.org> to
download your email, and that your username on their system is
username>. The option tells
inc> to use plain POP3 for downloading your email. MH has
support for a few different dialects of POP. More than likely you
will never ever need to use them though. While you can do more
complex things with inc such as audit files and scan format files
this will get you going.The msgchk> command is used to get information on
whether or not you have new email. msgchk> takes the same
and options that
inc> takes.show>, next> and prev>—displaying and moving through emailshow> is to show a letter in your current folder.
Like inc>, show> is a fairly straightforward
command. If you just type show> and hit return>
then it displays the current message. You can also give specific
message numbers to show:
tempest% show 32 45 56>
This would display message numbers 32, 45 and 56 right after each
other. Unless you change the default behavior show>
basically just does a more> on the email message.next> is used to move onto the next message and
prev> will go to the previous message. Both commands have
an implied show> command so that when you go to the next
message it automatically displays it.scan>—shows you a scan of your messagesscan> will display a brief listing of the messages
in your current folder. This is an example of what the
scan> command will give you.
30+ 01/16 "Jordan K. Hubbar Re: FBSD 2.1<<> Do you want a library instead of
31 01/16 Bruce Evans Re: location of bad144 table<<>> >It would appea
32 01/16 "Jordan K. Hubbar Re: video is up<<> Anyway, mrouted won't run, ev
33 01/16 Michael Smith Re: FBSD 2.1<<Nate Williams stands accused of sa
Like just about everything in MH this display is very configurable.
This is the typical default display. It gives you the message number,
the date on the email, the sender, the subject line, and a sentence
fragment from the very beginning of the email if it can fit it. The
+> means that message is the current message, so if you do
a show> it will display that message.One useful option for scan is the
option. This will list your messages with the highest message number
first and lowest message number last. Another useful option with
scan> is to have it read from a file. If you want to scan
your incoming mailbox on FreeBSD without having to inc> it
you can do scan -file
/var/mail/username>. This can be used with
any file that is in the mbox> format.rmm> and rmf>—remove the current message or folderrmm> is used to remove a mail message. The default
is typically to not actually remove the message but to rename the
file to one that is ignored by the MH commands. You will need to
through periodically and physically delete the removed>
messages.The rmf> command is used to remove folders. This
doesn't just rename the files but actually removes the from the hard
drive so you should be careful when you use this command.A typical session of reading with MHThe first thing that you will want to do is inc>
your new mail. So at a shell prompt just type in inc> and
hit return>.
tempest% inc>
Incorporating new mail into inbox...
36+ 01/19 "Stephen L. Lange Request...<<Please remove me as contact for pind
37 01/19 Matt Thomas Re: kern/950: Two PCI bridge chips fail (multipl
38 01/19 "Amancio Hasty Jr Re: FreeBSD and VAT<<>>> Bill Fenner said: > In
tempest%
This shows you the new email that has been added to your mailbox. So
the next thing to do is show> the email and move around.
tempest% show>
Received: by sashimi.wwa.com (Smail3.1.29.1 #2)
id m0tdMZ2-001W2UC; Fri, 19 Jan 96 13:33 CST
Date: Fri, 19 Jan 1996 13:33:31 -0600 (CST)
From: "Stephen L. Lange" <stvlange@wwa.com>
To: matt@garply.com
Subject: Request...
Message-Id: <Pine.BSD.3.91.960119133211.824A-100000@sashimi.wwa.com>
Mime-Version: 1.0
Content-Type: TEXT/PLAIN; charset=US-ASCII
Please remove me as contact for pindat.com
tempest% rmm>
tempest% next>
Received: from localhost (localhost [127.0.0.1]) by whydos.lkg.dec.com (8.6.11/8
.6.9) with SMTP id RAA24416; Fri, 19 Jan 1996 17:56:48 GMT
Message-Id: <199601191756.RAA24416@whydos.lkg.dec.com>
X-Authentication-Warning: whydos.lkg.dec.com: Host localhost didn't use HELO pro
tocol
To: hsu@clinet.fi
Cc: hackers@FreeBSD.org
Subject: Re: kern/950: Two PCI bridge chips fail (multiple multiport ethernet
boards)
In-Reply-To: Your message of "Fri, 19 Jan 1996 00:18:36 +0100."
<199601182318.AA11772@Sysiphos>
X-Mailer: exmh version 1.5omega 10/6/94
Date: Fri, 19 Jan 1996 17:56:40 +0000
From: Matt Thomas <matt@lkg.dec.com>
Sender: owner-hackers@FreeBSD.org
Precedence: bulk
This is due to a typo in pcireg.h (to
which I am probably the guilty party).The rmm> removed the current message and the
next> command moved me on to the next message.
Now if I wanted to look at ten most recent messages so I could read
one of them here is what I would do:
tempest% scan last:10>
26 01/16 maddy Re: Testing some stuff<<yeah, well, Trinity has
27 01/17 Automatic digest NET-HAPPENINGS Digest - 16 Jan 1996 to 17 Jan 19
28 01/17 Evans A Criswell Re: Hey dude<<>From matt@tempest.garply.com Tue
29 01/16 Karl Heuer need configure/make volunteers<<The FSF is looki
30 01/18 Paul Stephanouk Re: [alt.religion.scientology] Raw Meat (humor)<
31 01/18 Bill Lenherr Re: Linux NIS Solaris<<--- On Thu, 18 Jan 1996 1
34 01/19 John Fieber Re: Stuff for the email section?<<On Fri, 19 Jan
35 01/19 support@foo.garpl [garply.com #1138] parlor<<Hello. This is the Ne
37+ 01/19 Matt Thomas Re: kern/950: Two PCI bridge chips fail (multipl
38 01/19 "Amancio Hasty Jr Re: FreeBSD and VAT<<>>> Bill Fenner said: > In
tempest%
Then if I wanted to read message number 27 I would do a
show 27> and it would be displayed. As you can probably
tell from this sample session MH is pretty easy to use and looking
through emails and displaying them is fairly intuitive and easy.
Folders and Mail SearchingAnybody who gets lots of email definitely wants to be able to
prioritize, stamp, brief, de-brief, and number their emails in a
variety of different ways. MH can do this better than just about
anything. One thing that we haven't really talked about is the
concept of folders. You have undoubtedly come across the folders
concept using other email programs. MH has folders too. MH can even
do sub-folders of a folder. One thing you should keep in mind with MH
is that when you ran inc> for the first time and it asked
you if it could create a Mail> directory it began storing
everything in that directory. If you look at that directory you will
find a directory named inbox>. The inbox>
directory houses all of your incoming mail that hasn't been thrown
anywhere else.Whenever you create a new folder a new directory is going to be
created underneath your MH Mail> directory, and messages
in that folder are going to be stored in that directory. When new
email comes in that new email is thrown into your inbox>
directory with a file name that is equivalent to the message number.
So even if you didn't have any of the MH tools to read your email you
could still use standard UNIX commands to munge around in those
directories and just more your files. It's this simplicity that
really gives you a lot of power with what you can do with your
email.Just as you can use message lists like 23 16 42>
with most MH commands there is a folder option you can specify with
just about every MH command. If you do a scan +freebsd> it
will scan your freebsd> folder, and your current folder
will be changed to freebsd>. If you do a show
+freebsd 23 16 42>, show> is going to switch to your
freebsd> folder and display messages 23, 16 and 42. So
remember that pick>—search email that matches certain criteriapick> is one of the more complex commands in the MH
system. So you might want to read the
pick>1>> man page for a
more thorough understanding. At its simplest level you can do
something like
tempest% pick -search pci>
15
42
55
56
57
This will tell pick> to look through every single line in
every message in your current folder and tell you which message
numbers it found the word pci> in. You can then
show> those messages and read them if you wish or
rmm> them. You would have to specify something like
show 15 42 55-57> to display them though. A slightly more
useful thing to do is this:
tempest% pick -search pci -seq pick>
5 hits
tempest% show pick>
This will show you the same messages you just didn't have to work as
hard to do it. The option is really an
abbreviation of and pick> is
just a sequence which contains the message numbers that matched. You
can use sequences with just about any MH command. So you could have
done an rmm pick> and all those messages would be removed
instead. You sequence can be named anything. If you run pick again it
will overwrite the old sequence if you use the same name.Doing a pick -search can be a bit more time
consuming than just searching for message from someone, or to
someone. So pick> allows you to use the following
predefined search criteria:
search based upon who the message is tosearch based on who is in the cc listsearch for who sent the messagesearch for emails with this subjectfind emails with a matching datsearch for any other component in the header. (i.e.
This allows you to do things like
-tempest% pick -to freebsd-hackers@freebsd.org -seq hackers>
+tempest% pick -to freebsd-hackers@FreeBSD.org -seq hackers>
to get a list of all the email send to the FreeBSD hackers mailing
list. pick> also allows you to group these criteria in
different ways using the following options:
… …… &hellip … …
These commands allow you to do things like
tempest% pick -to freebsd-hackers -and -cc freebsd-hackers>
That will grab all the email in your inbox that was sent to
freebsd-hackers or cc'd to that list. The brace options allow you to
group search criteria together. This is sometimes very necessary as
in the following example
tempest% pick -lbrace -to freebsd-hackers -and
-not -cc freebsd-questions -rbrace -and -subject pci>Basically this says pick (to freebsd-hackers and not cc'd on
freebsd-questions) and the subject is pci. It should look through your
folder and find all messages sent to the freebsd-hackers list that
aren't cc'd to the freebsd-questions list that contain something on
pci in the subject line. Ordinarily you might have to worry about
something called operator precedence. Remember in math how you
evaluate from left to right and you do multiplication and division
first and addition and subtraction second? MH has the same type of
rules for pick>. It's fairly complex so you might want to study
the man page. This document is just to help you get acquainted with
MH.folder>, folders>, refile>—three useful programs for folder maintenanceThere are three programs which are primarily just for
manipulating your folders. The folder> program is used to
switch between folders, pack them, and list them. At its simplest
level you can do a folder +newfolder>> and
you will be switched into newfolder>. From there on
out all your MH commands like comp>, repl>,
scan>, and show> will act on that
newfolder> folder.Sometimes when you are reading and deleting messages you will
develop holes> in your folders. If you do a scan>
you might just see messages 34, 35, 36, 43, 55, 56, 57, 80. If you do
a folder -pack this will renumber all your
messages so that there are no holes. It doesn't actually delete any
messages though. So you may need to periodically go through and
physically delete rmm>'d messages.If you need statistics on your folders you can do a
folders> or folder -all to list all
your folders, how many messages they have, what the current message
is in each one and so on. This line of stats it displays for all your
folders is the same one you get when you change to a folder with
folder +foldername>. A folders> command looks
like this:
Folder # of messages ( range ); cur msg (other files)
announce has 1 message ( 1- 1).
drafts has no messages.
f-hackers has 43 messages ( 1- 43).
f-questions has 16 messages ( 1- 16).
inbox+ has 35 messages ( 1- 38); cur= 37.
lists has 8 messages ( 1- 8).
netfuture has 1 message ( 1- 1).
out has 31 messages ( 1- 31).
personal has 6 messages ( 1- 6).
todo has 58 messages ( 1- 58); cur= 1.
TOTAL= 199 messages in 13 folders.
The refile> command is what you use to move messages
between folders. When you do something like refile 23
+netfuture> message number 23 is moved into the
netfuture> folder. You could also do something like
refile 23 +netfuture/latest> which would put message
number 23 in a subfolder called latest> under the
netfuture> folder. If you want to keep a message in the
current folder and link it you can do a refile -link 23
+netfuture which would keep 23 in your current
inbox> but also list in your netfuture>
folder. You are probably beginning to realize some of the really
powerful things you can do with MH.Sending MailEmail is a two way street for most people so you want to be
able to send something back. The way MH handles sending mail can be a
bit difficult to follow at first, but it allows for incredible
flexibility. The first thing MH does is to copy a components file
into your outgoing email. A components file is basically a skeleton
email letter with stuff like the To: and Subject: headers already in
it. You are then sent into your editor where you fill in the header
information and then type the body of your message below the dashed
lines in the message. Then to the whatnow> program. When
you are at the What now? prompt you can tell it to
send>, list>, edit>,
edit>, push>, and quit>. Most of
these commands are self-explanatory. So the message sending process
involves copying a component file, editing your email, and then
telling the whatnow> program what to do with your
email.comp>, forw>, reply>—compose, forward or reply to a message to someoneThe comp> program has a few useful command line
options. The most important one to know right now is the
option. When MH is installed the default
editor is usually a program called prompter> which comes
with MH. It's not a very exciting editor and basically just gets the
job done. So when you go to compose a message to someone you might
want to use comp -editor /usr/bin/vi/> or comp
-editor /usr/local/bin/pico/> instead. Once you have run
comp you are in your editor and you see
something that looks like this:
To:
cc:
Subject:
--------
You need to put the person you are sending the mail to after the
To:> line. It works the same way for the other headers
also, so you would need to put your subject after the
Subject:> line. Then you would just put the body of your
message after the dashed lines. It may seem a bit simplistic since a
lot of email programs have special requesters that ask you for this
information but there really isn't any point to that. Plus this
really gives you excellent flexibility.
-To:freebsd-rave@freebsd.org>
+To:freebsd-rave@FreeBSD.org>
cc:
Subject:And on the 8th day God created the FreeBSD core team>
--------
Wow this is an amazing operating system. Thanks!>
You can now save this message and exit your editor. You will see the
What now?> prompt and you can type in
send> or s> and hit
-return>. Then the freebsd core team will receive their just
+return>. Then the FreeBSD core team will receive their just
rewards. As I mentioned earlier you can also use other commands, for
example quit> if you don't want to send the
message.The forw> command is stunningly similar. The big
difference being that the message you are forwarding is automatically
included in the outgoing message. When you run forw> it
will forward your current message. You can always tell it to forward
something else by doing something like forw 23> and then
message number 23 will be put in your outgoing message instead of the
current message. Beyond those small differences forw>
functions exactly the same as comp>. You go through the
exact same message sending process.The repl> command will reply to whatever your
current message is, unless you give it a different message to reply
to. repl> will do its best to go ahead and fill in some of
the email headers already. So you will notice that the
To:> header already has the address of the recipient in
there. Also the Subject:> line will already be filled in.
You then go about the normal message composition process and you are
done. One useful command line option to know here is the
option. You can use all>,
to>, cc>, me> after the
option to have repl> automatically
add the various addresses to the cc list in the message. You have
probably noticed that the original message isn't included. This is
because most MH setups are configured to do this from the
start.components>, and replcomps>—components files for comp> and repl>The components> file is usually in
/usr/local/lib/mh. You can copy that file into
your MH Mail directory and edit to contain what you want it to
contain. It is a fairly basic file. You have various email headers at
the top, a dashed line and then nothing. The
comp command just copies this
components> file and then edits it. You can add any
kind of valid RFC822 header you want. For instance you could have
something like this in your components> file:
To:
Fcc: out
Subject:
X-Mailer: MH 6.8.3
-X-Home-Page: http://www.freebsd.org/
+X-Home-Page: http://www.FreeBSD.org/
-------
MH would then copy this components file and throw you into your
editor. The components> file is fairly simple. If you
wanted to have a signature on those messages you would just put your
signature in that components> file.The replcomps> file is a bit more complex. The default
replcomps> looks like this:
%(lit)%(formataddr %<{reply-to}%?{from}%?{sender}%?{return-path}%>)\
%<(nonnull)%(void(width))%(putaddr To: )\n%>\
%(lit)%(formataddr{to})%(formataddr{cc})%(formataddr(me))\
%<(nonnull)%(void(width))%(putaddr cc: )\n%>\
%<{fcc}Fcc: %{fcc}\n%>\
%<{subject}Subject: Re: %{subject}\n%>\
%<{date}In-reply-to: Your message of "\
%<(nodate{date})%{date}%|%(pretty{date})%>."%<{message-id}
%{message-id}%>\n%>\
--------
It's in the same basic format as the components> file but
it contains quite a few extra formatting codes. The
%(lit)> command makes room for the address. The
%(formataddr> is a function that returns a proper email
address. The next part is %< which means if and
the {reply-to}> means the reply-to field in the original
message. So that might be translated this way:
%<if {reply-to} the original message has a reply-to
then give that to formataddr, %? else {from} take the
from address, %? else {sender} take the sender address, %?
else {return-path} take the return-path from the original
message, %> endif.As you can tell MH formatting can get rather involved. You can
probably decipher what most of the other functions and variables
mean. All of the information on writing these format strings is in the
MH-Format man page. The really nice thing is that once you have built
your customized replcomps> file you won't need to touch it
again. No other email program really gives you the power and
flexibility that MH gives you.
diff --git a/en_US.ISO8859-1/articles/multi-os/article.sgml b/en_US.ISO8859-1/articles/multi-os/article.sgml
index 3172597322..f73eebeebe 100644
--- a/en_US.ISO8859-1/articles/multi-os/article.sgml
+++ b/en_US.ISO8859-1/articles/multi-os/article.sgml
@@ -1,682 +1,682 @@
-
+
Installing and Using FreeBSD With Other Operating SystemsJayRichmondjayrich@sysc.com6 August 1996This document discusses how to make FreeBSD coexist
nicely with other popular operating systems such as Linux, MS-DOS,
OS/2, and Windows 95. Special thanks to: Annelise Anderson
andrsn@stanford.edu, Randall Hopper
rhh@ct.picker.com, and Jordan K. Hubbard
jkh@time.cdrom.comOverviewMost people can't fit these operating systems together
comfortably without having a larger hard disk, so special
information on large EIDE drives is included. Because there are so
many combinations of possible operating systems and hard disk
configurations, the section may be of the most use
to you. It contains descriptions of specific working computer setups
that use multiple operating systems.This document assumes that you have already made room on your
hard disk for an additional operating system. Any time you
repartition your hard drive, you run the risk of destroying the data
on the original partitions. However, if your hard drive is completely
occupied by DOS, you might find the FIPS utility (included on the
FreeBSD CD-ROM in the \TOOLS directory or via
-ftp)
+ftp)
useful. It lets you repartition your hard disk without destroying the
data already on it. There is also a commercial program available
called Partition Magic, which lets you size and delete partitions
without consequence.Overview of Boot ManagersThese are just brief descriptions of some of the different boot
managers you may encounter. Depending on your computer setup, you may
find it useful to use more than one of them on the same
system.Boot EasyThis is the default boot manager used with FreeBSD. It has the
ability to boot most anything, including BSD, OS/2 (HPFS), Windows 95
(FAT and FAT32), and Linux. Partitions are selected with the
function keys.OS/2 Boot ManagerThis will boot FAT, HPFS, FFS (FreeBSD), and EXT2
(Linux). It will also boot FAT32 partitions. Partitions are
selected using arrow keys. The OS/2 Boot Manager is the only one to
use its own separate partition, unlike the others which use the
master boot record (MBR). Therefore, it must be installed below the
1024th cylinder to avoid booting problems. It can boot Linux using
LILO when it is part of the boot sector, not the MBR. Go to Linux HOWTOs
on the World Wide Web for more information on booting Linux with
OS/2's boot manager.OS-BSThis is an alternative to Boot Easy. It gives you
more control over the booting process, with the ability to set the
default partition to boot and the booting timeout. The beta version
of this programs allows you to boot by selecting the OS with your
arrow keys. It is included on the FreeBSD CD in the
\TOOLS directory, and via ftp.
+URL="ftp://ftp.FreeBSD.org/pub/FreeBSD/tools">ftp.
LILO, or LInux LOaderThis is a limited boot manager. Will boot FreeBSD, though some
customization work is required in the LILO configuration file.About FAT32FAT32 is the replacement to
the FAT filesystem included in Microsoft's OEM SR2 Beta release,
which is expected to utilitized on computers pre-loaded with Windows
95 towards the end of 1996. It converts the normal FAT file system
and allows you to use smaller cluster sizes for larger hard drives.
FAT32 also modifies the traditional FAT boot sector and allocation
table, making it incompatible with some boot managers.A Typical InstallationLet's say I have two large EIDE hard drives, and I want to
install FreeBSD, Linux, and Windows 95 on them.Here's how I might do it using these hard disks:
/dev/wd0> (first physical hard disk)/dev/wd1> (second hard disk)Both disks have 1416 cylinders.I boot from a MS-DOS or Windows 95 boot disk that
contains the FDISK.EXE> utility and make a small 50 meg
primary partition (35-40 for Windows 95, plus a little breathing
room) on the first disk. Also create a larger partition on the
second hard disk for my Windows applications and data.I reboot and install Windows 95 (easier said than done)
on the C:> partition.The next thing I do is install Linux. I'm not sure about
all the distributions of Linux, but slackware includes LILO (see
). When I am partitioning out my hard disk with
Linux fdisk, I would put all of Linux on the first
drive (maybe 300 megs for a nice root partition and some swap
space).After I install Linux, and are prompted about installing
LILO, make SURE that I install it on the boot sector of my root
Linux partition, not in the MBR (master boot record).The remaining hard disk space can go to FreeBSD. I also
make sure that my FreeBSD root slice does not go beyond the 1024th
cylinder. (The 1024th cylinder is 528 megs into the disk with our
hypothetical 720MB disks). I will use the rest of the hard drive
(about 270 megs) for the /usr> and /> slices
if I wish. The rest of the second hard disk (size depends on the
amount of my Windows application/data partition that I created in
step 1 can go to the /usr/src> slice and swap
space.When viewed with the Windows 95 fdisk> utility, my hard drives
should now look something like this:
---------------------------------------------------------------------
Display Partition Information
Current fixed disk drive: 1
Partition Status Type Volume_Label Mbytes System Usage
C: 1 A PRI DOS 50 FAT** 7%
2 A Non-DOS (Linux) 300 43%
Total disk space is 696 Mbytes (1 Mbyte = 1048576 bytes)
Press Esc to continue
---------------------------------------------------------------------
Display Partition Information
Current fixed disk drive: 2
Partition Status Type Volume_Label Mbytes System Usage
D: 1 A PRI DOS 420 FAT** 60%
Total disk space is 696 Mbytes (1 Mbyte = 1048576 bytes)
Press Esc to continue
---------------------------------------------------------------------
** May say FAT16 or FAT32 if you are using the OEM SR2 update.
See ).Install FreeBSD. I make sure to boot with my first hard
disk set at NORMAL> in the BIOS. If it is not, I'll have
the enter my true disk geometry at boot time (to get this, boot
Windows 95 and consult Microsoft Diagnostics (MSD.EXE>),
or check your BIOS) with the parameter hd0=1416,16,63>
where 1416> is the number of cylinders on my hard
disk, 16> is the number of heads per track, and
63> is the number of sectors per track on the
drive.When partitioning out the hard disk, I make sure to install
Boot Easy on the first disk. I don't worry about the second disk,
nothing is booting off of it.When I reboot, Boot Easy should recognize my three
bootable partitions as DOS (Windows 95), Linux, and BSD
(FreeBSD).Special ConsiderationsMost operating systems are very picky about where and how they are
placed on the hard disk. Windows 95 and DOS need to be on the first
primary partitiin on the first hard disk. OS/2 is the exception. It
can be installed on the first or second disk in a primary or extended
partition. If you are not sure, keep the beginning of the bootable
partitions below the 1024th cylinder.If you install Windows 95 on an existing BSD system, it will
destroy> the MBR, and you will have to reinstall your
previous boot manager. Boot Easy can be reinstalled by using the
BOOTINST.EXE utility included in the \TOOLS directory on the CD-ROM,
and via ftp. You can
+URL="ftp://ftp.FreeBSD.org/pub/FreeBSD/tools">ftp. You can
also re-start the installation process and go to the partition
editor. From there, mark the FreeBSD partition as bootable,
select Boot Manager, and then type W to (W)rite out the information
to the MBR. You can now reboot, and Boot Easy should then
recognize Windows 95 as DOS.Please keep in mind that OS/2 can read FAT and HPFS partitions,
but not FFS (FreeBSD) or EXT2 (Linux) partitions. Likewise, Windows
95 can only read and write to FAT and FAT32 (see ) partitions. FreeBSD can read most file systems, but
currently cannot read HPFS partitions. Linux can read HPFS
partitions, but can't write to them. Recent versions of the Linux
kernel (2.x) can read and write to Windows 95 VFAT partitions (VFAT
is what gives Windows 95 long file names - it's pretty much the same
as FAT). Linux can read and write to most file systems. Got that?
I hope so.Examples(section needs work, please send your example to
jayrich@sysc.com).FreeBSD+Win95: If you installed FreeBSD after Windows 95, you
should see DOS> on the Boot Easy menu. This is Windows
95. If you installed Windows 95 after FreeBSD, read above. As long as your hard disk does not have 1024
cylinders you should not have a problem booting. If one of your
partitions goes beyond the 1024th cylinder however, and you get
messages like invalid system disk> under DOS (Windows 95)
and FreeBSD will not boot, try looking for a setting in your BIOS
called > 1024 cylinder support> or NORMAL/LBA>
mode. DOS may need LBA (Logical Block Addressing) in order to boot
correctly. If the idea of switching BIOS settings every time you
boot up doesn't appeal to you, you can boot FreeBSD through DOS via
the FBSDBOOT.EXE> utility on the CD (It should find your
FreeBSD partition and boot it.)FreeBSD+OS/2+Win95: Nothing new here. OS/2's boot manger
can boot all of these operating systems, so that shouldn't be a
problem.FreeBSD+Linux: You can also use Boot Easy to boot both operating
systems.FreeBSD+Linux+Win95: (see )Other Sources of HelpThere are many Linux HOW-TOs that
deal with multiple operating systems on the same hard disk.The Linux+DOS+Win95+OS2
mini-HOWTO offers help on configuring the OS/2 boot manager, and the
Linux+FreeBSD
mini-HOWTO might be interesting as well. The Linux-HOWTO is
also helpful.The NT Loader
Hacking Guide provides good information on multibooting
Windows NT, '95, and DOS with other operating systems.And Hale Landis's "How It Works" document pack contains some good info
on all sorts of disk geometry and booting related topics. Here are a few
links that might help you find it: ftp://fission.dt.wdc.com/pub/otherdocs/pc_systems/how_it_works/allhiw.zip,
http://www.cs.yorku.ca/People/frank/docs/.Finally, don't overlook FreeBSD's kernel documentation on the booting
procedure, available in the kernel source distribution (it unpacks to
file:/usr/src/sys/i386/boot/biosboot/README.386BSD.Technical Details(Contributed by Randall Hopper,
rhh@ct.picker.com)This section attempts to give you enough basic information
about your hard disks and the disk booting process so that you can
troubleshoot most problems you might encounter when getting set up to
boot several operating systems. It starts in pretty basic terms, so
you may want to skim down in this section until it begins to look
unfamiliar and then start reading.Disk PrimerThree fundamental terms are used to describe the location of
data on your hard disk: Cylinders, Heads, and Sectors. It's not
particularly important to know what these terms relate to except to
know that, together, they identify where data is physically on your
disk.Your disk has a particular number of cylinders, number of
heads, and number of sectors per cylinder-head (a cylinder-head also
known nown as a track). Collectively this information defines the
"physical disk geometry" for your hard disk. There are typically 512
bytes per sector, and 63 sectors per track, with the number of
cylinders and heads varying widely from disk to disk. Thus you can
figure the number of bytes of data that'll fit on your own disk by
calculating: (# of cylinders) × (#
heads) × (63 sectors/track) × (512
bytes/sect)> For example, on my 1.6 Gig Western
Digital AC31600 EIDE hard disk,that's: (3148
cyl) × (16 heads) × (63 sectors/track) × (512
bytes/sect)which is 1,624,670,208 bytes, or around 1.6 Gig.You can find out the physical disk geometry (number of
cylinders, heads, and sectors/track counts) for your hard disks using
ATAID or other programs off the net. Your hard disk probably came
with this information as well. Be careful though: if you're using
BIOS LBA (see ), you can't use just any
program to get the physical geometry. This is because many programs
(e.g. MSD.EXE> or FreeBSD fdisk) don't identify the
physical disk geometry; they instead report the
translated geometry> (virtual numbers from using LBA).
Stay tuned for what that means.One other useful thing about these terms. Given 3
numbers—a cylinder number, a head number, and a
sector-within-track number—you identify a specific absolute
sector (a 512 byte block of data) on your disk. Cylinders and Heads
are numbered up from 0, and Sectors are numbered up from 1.For those that are interested in more technical details,
information on disk geometry, boot sectors, BIOSes, etc. can be found
all over the net. Query Lycos, Yahoo, etc. for boot
sector> or master boot record>. Among the useful info
you'll find are Hale Landis's How It Works> document
pack. See the section for a few pointers to
this pack.Ok, enough terminology. We're talking about booting
here.The Booting ProcessOn the first sector of your disk (Cyl 0, Head 0, Sector 1)
lives the Master Boot Record (MBR). It contains a map of your disk.
It identifies up to 4 partitions>, each of which is a
contiguous chunk of that disk. FreeBSD calls partitions
slices> to avoid confusion with it's own partitions, but
we won't do that here. Each partition can contain its own operating
system.Each partition entry in the MBR has a Partition
ID>, a Start Cylinder/Head/Sector>, and an
End Cylinder/Head/Sector>. The Partition ID tells what
type of partition it is (what OS) and the Start/End tells where it
is. lists a smattering of some common
Partition IDs.
Partition IDs>
ID (hex)Description01Primary DOS12 (12-bit FAT)04Primary DOS16 (16-bit FAT)05Extended DOS06Primary big DOS (> 32MB)0AOS/283Linux (EXT2FS)A5FreeBSD, NetBSD, 386BSD (UFS)
Note that not all partitions are bootable (e.g. Extended DOS).
Some are—some aren't. What makes a partition bootable is the
configuration of the Partition Boot Sector> that exists
at the beginning of each partition.When you configure your favorite boot manager, it looks up the entries
in the MBR partition tables of all your hard disks and lets you name the
entries in that list. Then when you boot, the boot manager is invoked by
special code in the Master Boot Sector of the first probed hard disk on
your system. It looks at the MBR partition table entry corresponding to
the partition choice you made, uses the Start Cylinder/Head/Sector
information for that partition, loads up the Partition Boot Sector for that
partition, and gives it control. That Boot Sector for the partition itself
contains enough information to start loading the operating system on that
partition.One thing we just brushed past that's important to know. All of your
hard disks have MBRs. However, the one that's important is the one on the
disk that's first probed by the BIOS. If you have only IDE hard disks, its
the first IDE disk (e.g. primary disk on first controller). Similarly for
SCSI only systems. If you have both IDE and SCSI hard disks though, the
IDE disk is typically probed first by the BIOS, so the first IDE disk is
the first probed disk. The boot manager you will install will be hooked into
the MBR on this first probed hard disk that we've just described.Booting Limitations and WarningsNow the interesting stuff that you need to watch out for.The dreaded 1024 cylinder limit and how BIOS LBA helpsThe first part of the booting process is all done through the
BIOS, (if that's a new term to you, the BIOS is a software chip on
your system motherboard which provides startup code for your
computer). As such, this first part of the process is subject to the
limitations of the BIOS interface.The BIOS interface used to read the hard disk during this period
(INT 13H, Subfunction 2) allocates 10 bits to the Cylinder Number, 8
bits to the Head Number, and 6 bits to the Sector Number. This
restricts users of this interface (i.e. boot managers hooked into
your disk's MBR as well as OS loaders hooked into the Boot Sectors)
to the following limits:
1024 cylinders, max256 heads , max64 sectors/track, max (actually 63, 0> isn't
available)Now big hard disks have lots of cylinders but not a lot of
heads, so invariably with big hard disks the number of cylinders is
greater than 1024. Given this and the BIOS interface as is, you
can't boot off just anywhere on your hard disk. The boot code (the
boot manager and the OS loader hooked into all bootable partitions'
Boot Sectors) has to reside below cylinder 1024. In fact, if your
hard disk is typical and has 16 heads, this equates to:
1024 cyl/disk × 16 heads/disk × 63 sect/(cyl-head)
× 512 bytes/sectorwhich is around the often-mentioned 528MB limit.This is where BIOS LBA (Logical Block Addressing) comes in. BIOS LBA
gives the user of the BIOS API calls access to physical cylinders above
1024 though the BIOS interfaces by redefining a cylinder. That is, it
remaps your cylinders and heads, making it appear through the BIOS as
though the disk has fewer cylinders and more heads than it actually
does. In other words, it takes advantage of the fact that hard disks have
relatively few heads and lots of cylinders by shifting the balance between
number of cylinders and number of heads so that both numbers lie below the
above-mentioned limits (1024 cylinders, 256 heads).With BIOS LBA, the hard disk size limitation is virtually
removed (well, pushed up to 8 Gigabytes anyway). If you have an LBA
BIOS, you can put FreeBSD or any OS anywhere you want and not hit the
1024 cylinder limit.To use my 1.6 Gig Western Digital as an example again, it's
physical geometry is:
(3148 cyl, 16 heads, 63 sectors/track, 512 bytes/sector)However, my BIOS LBA remaps this to:
( 787 cyl, 64 heads, 63 sectors/track, 512 bytes/sector)giving the same effective size disk, but with cylinder and head
counts within the BIOS API's range (Incidentally, I have both Linux and
FreeBSD existing on one of my hard disks above the 1024th physical
cylinder, and both operating systems boot fine, thanks to BIOS LBA).Boot Managers and Disk AllocationAnother gotcha to watch out when installing boot managers is
allocating space for your boot manager. It's best to be aware of
this issue up front to save yourself from having to reinstall one or
more of your OSs.If you followed the discussion in
about the Master Boot Sector (where the MBR is), Partition Boot
Sectors, and the booting process, you may have been wondering just
exactly where on your hard disk that nifty boot manager is going to
live. Well, some boot managers are small enough to fit entirely
within the Master Boot Sector (Cylinder 0, Head 0, Sector 0) along
with the partition table. Others need a bit more room and actually
extend a few sectors past the Master Boot Sector in the Cylinder 0
Head 0 track, since that's typically free…typically.That's the catch. Some operating systems (FreeBSD included) let
you start their partitions right after the Master Boot Sector at
Cylinder 0, Head 0, Sector 2 if you want. In fact, if you give
FreeBSD's sysinstall a disk with an empty chunk up front or the whole
disk empty, that's where it'll start the FreeBSD partition by default
(at least it did when I fell into this trap). Then when you go to
install your boot manager, if it's one that occupies a few extra
sectors after the MBR, it'll overwrite the front of the first
partition's data. In the case of FreeBSD, this overwrites the
disk label, and renders your FreeBSD partition unbootable.The easy way to avoid this problem (and leave yourself the
flexibility to try different boot managers later) is just to always
leave the first full track on your disk unallocated when you
partition your disk. That is, leave the space from Cylinder 0, Head
0, Sector 2 through Cylinder 0, Head 0, Sector 63 unallocated, and
start your first partition at Cylinder 0, Head 1, Sector 1.
For what it's worth, when you create a DOS partition at the
front of your disk, DOS leaves this space open by default (this is
why some boot managers assume it's free). So creating a DOS
partition up at the front of your disk avoids this problem
altogether. I like to do this myself, creating 1 Meg DOS partition
up front, because it also avoids my primary DOS drive letters
shifting later when I repartition.For reference, the following boot managers use the
Master Boot Sector to store their code and data:
OS-BS 1.35Boot EasyLILOThese boot managers use a few additional sectors after the
Master Boot Sector:
OS-BS 2.0 Beta 8 (sectors 2-5)OS/2's boot managerWhat if your machine won't boot?At some point when installing boot managers, you might leave the
MBR in a state such that your machine won't boot. This is unlikely,
but possible when re-FDISKing underneath an already-installed boot
manager.If you have a bootable DOS partition on your disk, you can boot
off a DOS floppy, and run:
A:\> FDISK /MBR>to put the original, simple DOS boot code back into the system. You can
then boot DOS (and DOS only) off the hard drive. Alternatively, just
re-run your boot manager installation program off a bootable floppy.
diff --git a/en_US.ISO8859-1/articles/new-users/article.sgml b/en_US.ISO8859-1/articles/new-users/article.sgml
index 9c3baeb6b5..89d2522489 100644
--- a/en_US.ISO8859-1/articles/new-users/article.sgml
+++ b/en_US.ISO8859-1/articles/new-users/article.sgml
@@ -1,943 +1,943 @@
-
+
For People New to Both FreeBSD and UnixAnneliseAndersonandrsn@andrsn.stanford.eduAugust 15, 1997Congratulations on installing FreeBSD! This
introduction is for people new to both FreeBSD
and Un*x—so it starts with basics. It
assumes you're using version 2.0.5 or later of FreeBSD as distributed
-by Walnut Creek or FreeBSD.ORG, your system (for now) has a single
+by Walnut Creek or FreeBSD.org, your system (for now) has a single
user (you)—and you're probably pretty good with DOS/Windows or
OS/2.Logging in and Getting OutLog in (when you see login:) as a user you created during
installation or as root. (Your FreeBSD
installation will already have an account for root; root can go
anywhere and do anything, including deleting essential files, so be
careful!) The symbols % and # in the following stand for the prompt
(yours may be different), with % indicating an ordinary user and
# indicating root. To log out (and get a new login: prompt) type
# exit
as often as necessary. Yes, press enter after
commands, and remember that Unix is
case-sensitive—exit, not
EXIT.To shut down the machine type:
# /sbin/shutdown -h now
Or to reboot type
# /sbin/shutdown -r now
or
# /sbin/rebootYou can also reboot with
CtrlAltDelete.
Give it a little time to do its work. This is equivalent to
/sbin/reboot in recent releases of FreeBSD, and is
much, much better than hitting the reset button. You don't want to
have to reinstall this thing, do you?Adding A User with Root PrivilegesIf you didn't create any users when you installed the system and
are thus logged in as root, you should probably create a user now with
# adduser
The first time you use adduser, it might ask for some defaults to save. You
might want to make the default shell csh instead of sh, if it suggests
sh as the default. Otherwise just press enter to accept each default.
These defaults are saved in /etc/adduser.conf,
an editable file.Suppose you create a user jack with
full name Jack Benimble. Give jack a password
if security (even kids around who might pound on the keyboard) is an
issue. When it asks you if you want to invite jack into other
groups, type wheelLogin group is ``jack''. Invite jack into other groups: wheel
This will make it possible to log in as jack and
use the su command to become root. Then you won't
get scolded any more for logging in as root.You can quit adduser any time by typing
CtrlC, and at
the end you'll have a chance to approve your new user or simply type
n for no. You might want to create a
second new user (jill?) so that when you edit jack's login files,
you'll have a hot spare in case something goes wrong.Once you've done this, use exit
to get back to a login prompt and log in as
jack. In general, it's a good idea to do as
much work as possible as an ordinary user who doesn't have the
power—and risk—of root.If you already created a user and you want the user to be able
to su to root, you can log in as root
and edit the file /etc/group, adding jack to the
first line (the group wheel). But first you need to practice
vi, the text editor--or use the simpler text
editor, ee, installed on recent version of
FreeBSD.To delete a user, use the rmuser command.Looking AroundLogged in as an ordinary user, look around and try out some
commands that will access the sources of help and information within
FreeBSD.Here are some commands and what they do:
idTells you who you are!pwdShows you where you are—the current
working directory.lsLists the files in the current directory.ls Lists the files in the current directory with a
* after executables, a / after
directories, and an @ after symbolic links.ls Lists the files in long format—size,
date, permissions.ls Lists hidden dot
files with the others. If you're root, thedot files
show up without the switch.cdChanges directories. cd
.. backs up one level; note the
space after cd. cd
/usr/local goes there. cd
~ goes to the home directory of the
person logged in—e.g., /usr/home/jack.
Try cd /cdrom, and then
ls, to find out if your CDROM is mounted and
working.view filenameLets you look at a file (named
filename without changing it. Try
view /etc/fstab.
:q to quit.cat filenameDisplays filename on screen. If
it's too long and you can see only the end of it, press
ScrollLock and use the up-arrow to
move backward; you can use ScrollLock with man pages
too. Press ScrollLock again to quit scrolling. You
might want to try cat on some of the dot files in
your home directory—cat
.cshrc, cat
.login, cat
.profile.
You'll notice aliases in .cshrc for some of the
ls commands (they're very convenient).
You can create other aliases by editing .cshrc.
You can make these aliases available to all users on the system by
putting them in the system-wide csh configuration file,
/etc/csh.cshrc.Getting Help and InformationHere are some useful sources of help.
Text stands for something of your choice
that you type in—usually a command or filename.apropos textEverything containing string text
in the whatis database.man textThe man page for text. The major
source of documentation for Un*x systems. man
ls will tell you all the ways to use
the ls command. Press Enter to
move through text,
Ctrlb to go
back a page, Ctrlf to
go forward, q or
Ctrlc to
quit.which textTells you where in the user's path the command
text is found.locate textAll the paths where the string text
is found.whatis textTells you what the command text
does and its man page. Typing whatis * will tell
you about all the binaries in the current directory.whereis textFinds the file text, giving its full
path.You might want to try using whatis on some
common useful commands like cat,
more, grep,
mv, find,
tar, chmod,
chown, date, and
script. more lets you read a
page at a time as it does in DOS, e.g., ls -l |
more or more
filename. The
* works as a wildcard—e.g., ls
w* will show you files beginning with
w.Are some of these not working very well? Both
locate and whatis
depend on a database that's rebuilt weekly. If your machine isn't
going to be left on over the weekend (and running FreeBSD), you might
want to run the commands for daily, weekly, and monthly maintenance
now and then. Run them as root and give each one time to finish
before you start the next one, for now.
# /etc/dailyoutput omitted
# /etc/weeklyoutput omitted
# /etc/monthlyoutput omittedIf you get tired waiting, press
AltF2 to get
another virtual console, and log in again.
After all, it's a multi-user, multi-tasking system. Nevertheless
these commands will probably flash messages on your screen while
they're running; you can type clear at the prompt
to clear the screen. Once they've run, you might want to look at
/var/mail/root and
/var/log/messages.Basically running such commands is part of system
administration—and as a single user of a Unix system, you're
your own system administrator. Virtually everything you need to be
root to do is system administration. Such responsibilities aren't
covered very well even in those big fat books on Unix, which seem to
devote a lot of space to pulling down menus in windows managers. You
might want to get one of the two leading books on systems
administration, either Evi Nemeth et.al.'s UNIX System
Administration Handbook (Prentice-Hall, 1995, ISBN
0-13-15051-7)—the second edition with the red cover; or
Æleen Frisch's Essential System
Administration (O'Reilly & Associates, 1993, ISBN
0-937175-80-3). I used Nemeth.Editing TextTo configure your system, you need to edit text files. Most of
them will be in the /etc directory; and you'll
need to su to root to be able to change them. You
can use the easy ee, but in the long run the
text editor vi is worth learning. There's an
excellent tutorial on vi in
/usr/src/contrib/nvi/docs/tutorial if you have
that installed; otherwise you can get it by ftp to
ftp.cdrom.com in the directory
FreeBSD/FreeBSD-current/src/contrib/nvi/docs/tutorial.Before you edit a
file, you should probably back it up. Suppose you want to edit
/etc/rc.conf. You could just use cd
/etc to get to the /etc directory and
do:
# cp rc.conf rc.conf.orig
This would copy rc.conf to
rc.conf.orig, and you could later copy
rc.conf.orig to rc.conf to recover the original. But even
better would be moving (renaming) and then copying back:
# mv rc.conf rc.conf.orig
# cp rc.conf.orig rc.conf
because the mv command preserves the original date
and owner of the file. You can now edit
rc.conf. If you want the original back, you'd
then mv rc.conf rc.conf.myedit
(assuming you want to preserve your edited version) and then
# mv rc.conf.orig rc.conf
to put things back the way they were.To edit a file, type
# vi filename
Move through the text with the arrow keys. Esc (the
escape key) puts vi in command mode. Here are some
commands:
xdelete letter the cursor is ondddelete the entire line (even if it wraps on the screen)iinsert text at the cursorainsert text after the cursor
Once you type i or a, you can enter text.
Esc puts you back in command mode where you can type
:wto write your changes to disk and continue editing:wqto write and quit:q!to quit without saving changes/textto move the cursor to text;
/Enter (the enter key) to find
the next instance of text.Gto go to the end of the filenGto go to line n in
the file, where n is a numberCtrl>L>to redraw the screenCtrl>b>> and Ctrl>f>>go back
and forward a screen, as they
do with more> and view>.Practice with vi> in your home directory by creating
a new file with vi filename>> and adding
and deleting text, saving the file, and calling it up again.
vi> delivers some surprises because it's really quite
complex, and sometimes you'll inadvertently issue a command that will
do something you don't expect. (Some people actually like
vi>—it's more powerful than DOS EDIT—find out
about the :r> command.) Use Esc> one or
more times to be sure you're in command mode and proceed from there
when it gives you trouble, save often with :w>, and
use :q!> to get out and start over (from
your last :w>) when you need to.Now you can cd> to /etc,
su> to root, use vi> to edit the file
/etc/group, and add a user to wheel so the user
has root privileges. Just add a comma and the user's login name to
the end of the first line in the file, press Esc>, and use
:wq> to write the file to disk and quit. Instantly
effective. (You didn't put a space after the comma, did you?)Printing Files from DOSAt this point you probably don't have the printer working, so here's a
way to create a file from a man page, move it to a floppy, and then
print it from DOS. Suppose you want to read carefully about changing
permissions on files (pretty important). You can use the command
man chmod to read about it. The command
# man chmod | col -b > chmod.txt>
will remove formatting codes and send the man page to
the chmod.txt file
instead of showing it on your screen. Now put a dos-formatted
diskette in your floppy drive a, su> to
root, and type
# /sbin/mount -t msdos /dev/fd0 /mnt>
to mount the floppy drive on /mnt.Now (you no longer need to be root, and you can type
exit> to get back to being user jack) you can go to the
directory where you created chmod.txt and copy the file to the floppy
with:
% cp chmod.txt /mnt>
and use ls /mnt to get a directory listing of
/mnt, which should show the file
chmod.txt.You might especially want to make a file from
/sbin/dmesg by typing
% /sbin/dmesg > dmesg.txt>
and copying dmesg.txt to the floppy.
/sbin/dmesg is the boot log record, and it's
useful to understand it because it shows what FreeBSD found when it
booted up. If you ask questions on
-freebsd-questions@FreeBSD.ORG> or on a USENET
+freebsd-questions@FreeBSD.org> or on a USENET
group—like FreeBSD isn't finding my tape drive, what do
I do?—people will want to know what dmesg>
has to say.You can now dismount the floppy drive (as root) to get the disk
out with
# /sbin/umount /mnt>
and reboot to go to DOS. Copy these files to a DOS directory, call
them up with DOS EDIT, Windows Notepad or Wordpad, or a word processor, make a
minor change so the file has to be saved, and print as you normally
would from DOS or Windows. Hope it works! man pages come out best if
printed with the dos print> command. (Copying files from
FreeBSD to a mounted dos partition is in some cases still a little
risky.)Getting the printer printing from FreeBSD involves creating an
appropriate entry in /etc/printcap and creating
a matching spool directory in
/var/spool/output. If your printer is on
lpt0> (what dos calls LPT1>), you may only
need to go to /var/spool/output and (as root)
create the directory lpd> by typing:
mkdir lpd, if it doesn't already
exist.
Then the printer should respond if it's turned on when the system is
booted, and lp or lpr should send a file to the printer. Whether or
not the file actually prints depends on configuring it, which is
covered in the FreeBSD
handbook.>Other Useful Commandsdf>shows file space and mounted systems.ps aux>shows processes running. ps ax> is a narrower form.rm filename>>remove filename>.rm -R dir>>removes a directory dir> and all
subdirectories—careful!ls -Rlists files in the current
directory and all subdirectories;
I used a variant, ls -AFR > where.txt,
to get a list of all
the files in / and (separately)
/usr before I found better
ways to find files.passwd>to change user's password (or root's password)man hier>man page on the Unix file systemUse find> to locate filename in /usr
or any of its subdirectories with
% find /usr -name "filename>">
You can use * as a wildcard in
"filename>"> (which should be in
quotes). If you tell find to search in /
instead of /usr it will look for the file(s) on
all mounted file systems, including the CDROM and the dos
partition.An excellent book that explains Unix commands and utilities is
Abrahams & Larson, Unix for the Impatient
(2nd ed., Addison-Wesley, 1996). There's also a lot of Unix
information on the Internet. Try the Unix Reference
Desk.Next StepsYou should now have the tools you need to get around and edit
files, so you can get everything up and running. There is a great
deal of information in the FreeBSD handbook (which is probably on
-your hard drive) and FreeBSD's
+your hard drive) and FreeBSD's
web site. A wide variety of packages and ports are on the
Walnut Creek CDROM as well
as the web site. The handbook tells you more about how to use them
(get the package if it exists, with pkg_add
/cdrom/packages/All/packagename>>,
where packagename is the filename of the
package). The cdrom has lists of the packages and ports with brief
descriptions in cdrom/packages/index,
cdrom/packages/index.txt, and
cdrom/ports/index, with fuller descriptions in
/cdrom/ports/*/*/pkg/DESCR, where the
*s represent subdirectories of kinds of programs
and program names respectively.If you find the handbook too sophisticated (what with
lndir> and all) on installing ports from the cdrom,
here's what usually works:Find the port you want, say kermit>. There will be
a directory for it on the cdrom. Copy the subdirectory to
/usr/local (a good place for software you add
that should be available to all users) with:
# cp -R /cdrom/ports/comm/kermit /usr/local>
This should result in a /usr/local/kermit
subdirectory that has all the files that the
kermit subdirectory on the CDROM has.Next, create the directory /usr/ports/distfiles
if it doesn't already exist using mkdir>. Now check
check /cdrom/ports/distfiles for a
file with a name that indicates it's the port you want. Copy that
file to /usr/ports/distfiles; in recent versions
you can skip this step, as FreeBSD will do it for you.
In the case of kermit>, there is no
distfile.Then cd> to the subdirectory of
/usr/local/kermit that has the file
Makefile>. Type
# make all install>During this process the port will ftp to get any compressed
files it needs that it didn't find on the cdrom or in
/usr/ports/distfiles. If you don't have your
network running yet and there was no file for the port in
/cdrom/ports/distfiles, you will have to get
the distfile using another machine and copy it to
/usr/ports/distfiles from a floppy or your dos
partition. Read Makefile> (with cat> or
more> or view>) to find out where to go (the
master distribution site) to get the file and what its name is. Its
name will be truncated when downloaded to DOS, and after you get it
into /usr/ports/distfiles you'll have to rename
it (with the mv> command) to its original name so it can
be found. (Use binary file transfers!) Then go back to
/usr/local/kermit, find the directory with
Makefile>, and type make all install>.The other thing that happens when installing ports or packages
is that some other program is needed. If the installation stops with
a message can't find unzip or whatever, you
might need to install the package or port for unzip before you
continue.Once it's installed type rehash> to make FreeBSD
reread the files in the path so it knows what's there. (If you get a
lot of path not found> messages when you use
whereis> or which, you might want to make additions to the
list of directories in the path statement in
.cshrc in your home directory. The path
statement in Unix does the same kind of work it does in DOS, except
the current directory is not (by default) in the path for security
reasons; if the command you want is in the directory you're in, you
need to type ./ before the command to make it
work; no space after the slash.)You might want to get the most recent version of Netscape from
their ftp site. (Netscape
requires the X Window System.) There's now a FreeBSD version, so look
around carefully. Just use gunzip
filename>> and tar xvf
filename>> on it, move the binary to
/usr/local/bin or some other place binaries are
kept, rehash>, and then put the following lines in
.cshrc in each user's home directory or (easier)
in /etc/csh.cshrc, the system-wide csh start-up
file:
setenv XKEYSYMDB /usr/X11R6/lib/X11/XKeysymDB
setenv XNLSPATH /usr/X11R6/lib/X11/nls>
This assumes that the file XKeysymDB> and the directory
nls> are in /usr/X11R6/lib/X11; if
they're not, find them and put them there.If you originally got Netscape as a port using the CDROM (or
ftp), don't replace /usr/local/bin/netscape with
the new netscape binary; this is just a shell script that sets up the
environmental variables for you. Instead rename the new binary to
netscape.bin and replace the old binary, which
is /usr/local/lib/netscape/netscape.bin.Your Working EnvironmentYour shell is the most important part of your working environment.
In DOS, the usual shell is command.com. The shell is what interprets
the commands you type on the command line, and thus communicates with
the rest of the operating system. You can also write shell
scripts, which are like DOS batch files: a series of commands to be
run without your intervention.Two shells come installed with FreeBSD: csh and sh. csh is good for
command-line work, but scripts should be written with sh (or bash). You can
find out what shell you have by typing echo $SHELL.The csh shell is okay, but tcsh does everything csh does and more. It
It allows you to recall commands with the arrow keys and edit them.
It has tab-key completion
of filenames (csh uses the escape key), and it lets you switch to the
directory you were last in with cd -. It's also much
easier to alter your prompt with tcsh. It makes life a lot easier.Here are the three steps for installing a new shell: 1. Install the shell as a port or a package, just as you
would any other port or package. Use rehash and
which tcsh (assuming you're installing tcsh) to
make sure it got installed. 2. As root, edit /etc/shells, adding
a line in the file for the new shell, in this case /usr/local/bin/tcsh,
and save the file. (Some ports may do this for you.) 3. Use the chsh command to change your shell to
tcsh permanently, or type tcsh at the prompt to
change your shell without logging in again.Note: It can be dangerous to change root's shell
to something other than sh or csh on early versions of FreeBSD and many
other versions of Unix; you may not have a working shell when the system
puts you into single user mode. The solution is to use su -m
to become root, which will give you the tcsh as root, because the shell is part
of the environment. You can make this permanent by adding it to your
.tcshrc file as an alias with alias su su -m.>When tcsh starts up, it will read the
/etc/csh.cshrc and /etc/csh.login
files, as does csh. It will also read the
.login file in your home directory and the
.cshrc
file as well, unless you provide a .tcshrc
file. This you can do by simply copying .cshrc
to .tcshrc.Now that you've installed tcsh, you can adjust your prompt. You can
find the details in the manual page for tcsh, but here is a line to
put in your .tcshrc that will tell you how many
commands you have typed, what time it is, and what directory you are in.
It also produces a > if you're an ordinary user and
a # if you're root, but tsch will do that in any
case:
set prompt = "%h %t %~ %# "This should go in the same place as the existing set prompt line
if there is one, or under "if($?prompt) then" if not.
Comment out the old line; you can always switch back to it if you prefer
it. Don't forget the spaces and quotes. You can get the .tcshrc reread by typing source .tcshrc.You can get a listing of other environmental variables that
have been set by typing env at the prompt. The
result will show you your default editor, pager, and terminal type,
among possibly many others. A useful command if you log in from a
remote location and can't run a program because the terminal isn't
capable is
setenv TERM vt100.OtherAs root, you can dismount the CDROM with /sbin/umount
/cdrom>, take it out of the drive, insert another one, and mount it
with /sbin/mount_cd9660 /dev/cd0a /cdrom> assuming
cd0a> is the device name for your CDROM drive. The
most recent versions of FreeBSD let you mount the cdrom with just
/sbin/mount /cdrom.Using the live file system—the second of FreeBSD's CDROM
disks—is useful if you've got limited space. What is on the
live file system varies from release to release. You might try
playing games from the cdrom. This
involves using lndir>, which gets installed with the X
Window System, to tell the program(s) where to find the necessary
files, because they're in the /cdrom file system
instead of in /usr and its subdirectories, which
is where they're expected to be. Read man lndir>.Comments WelcomeIf you use this guide I'd be interested in knowing where it was
unclear and what was left out that you think should be included, and
if it was helpful. My thanks to Eugene W. Stark, professor of
computer science at SUNY-Stony Brook, and John Fieber for helpful
comments.Annelise Anderson, andrsn@andrsn.stanford.edu>
diff --git a/en_US.ISO8859-1/articles/programming-tools/article.sgml b/en_US.ISO8859-1/articles/programming-tools/article.sgml
index 96200e9d95..5a9641729a 100644
--- a/en_US.ISO8859-1/articles/programming-tools/article.sgml
+++ b/en_US.ISO8859-1/articles/programming-tools/article.sgml
@@ -1,1835 +1,1835 @@
-
+
A User's Guide to FreeBSD Programming ToolsJamesRaynard
-jraynard@freebsd.org
+jraynard@FreeBSD.orgAugust 17, 19971997James RaynardThis document is an introduction to using some of the programming
tools supplied with FreeBSD, although much of it will be applicable to
many other versions of Unix. It does not attempt to describe
coding in any detail. Most of the document assumes little or no
previous programming knowledge, although it is hoped that most
programmers will find something of value in itIntroductionFreeBSD offers an excellent development environment. Compilers
for C, C++, and Fortran and an assembler come with the basic system,
not to mention a Perl interpreter and classic Unix tools such as
sed> and awk>. If that is not enough, there are
many more compilers and interpreters in the Ports collection. FreeBSD
is very compatible with standards such as POSIX> and
ANSI> C, as well with its own BSD heritage, so it is
possible to write applications that will compile and run with little
or no modification on a wide range of platforms.However, all this power can be rather overwhelming at first if
you've never written programs on a Unix platform before. This
document aims to help you get up and running, without getting too
deeply into more advanced topics. The intention is that this document
should give you enough of the basics to be able to make some sense of
the documentation.Most of the document requires little or no knowledge of
programming, although it does assume a basic competence with using
Unix and a willingness to learn!Introduction to ProgrammingA program is a set of instructions that tell the computer to do
various things; sometimes the instruction it has to perform depends
on what happened when it performed a previous instruction. This
section gives an overview of the two main ways in which you can give
these instructions, or commands as they are usually
called. One way uses an interpreter>, the other a
compiler>. As human languages are too difficult for a
computer to understand in an unambiguous way, commands are usually
written in one or other languages specially designed for the
purpose.InterpretersWith an interpreter, the language comes as an environment, where you
type in commands at a prompt and the environment executes them for
you. For more complicated programs, you can type the commands into a
file and get the interpreter to load the file and execute the commands
in it. If anything goes wrong, many interpreters will drop you into a
debugger to help you track down the problem.The advantage of this is that you can see the results of your
commands immediately, and mistakes can be corrected readily. The
biggest disadvantage comes when you want to share your programs with
someone. They must have the same interpreter, or you must have some
way of giving it to them, and they need to understand how to use it.
Also users may not appreciate being thrown into a debugger if they
press the wrong key! From a performance point of view, interpreters
can use up a lot of memory, and generally do not generate code as
efficiently as compilers.In my opinion, interpreted languages are the best way to start
if you have not done any programming before. This kind of environment
is typically found with languages like Lisp, Smalltalk, Perl and
Basic. It could also be argued that the Unix shell (sh>,
csh>) is itself an interpreter, and many people do in fact
write shell scripts to help with various
housekeeping> tasks on their machine. Indeed, part of the
original Unix philosophy was to provide lots of small utility
programs that could be linked together in shell scripts to perform
useful tasks.Interpreters available with FreeBSDHere is a list of interpreters that are available as FreeBSD
+URL="ftp://ftp.FreeBSD.org:pub/FreeBSD/packages/">FreeBSD
packages, with a brief discussion of some of the more popular
interpreted languages. To get one of these packages, all you need to do is to click on
the hotlink for the package, then run
$ pkg_add package name>as root. Obviously, you will need to have a fully functional FreeBSD
2.1.0 or later system for the package to work!BASIC>Short for Beginner's All-purpose Symbolic Instruction
Code. Developed in the 1950s for teaching University students to
program and provided with every self-respecting personal computer in
the 1980s, BASIC> has been the first programming language
for many programmers. It's also the foundation for Visual
Basic>.The Bywater
+URL="ftp://ftp.FreeBSD.org:pub/FreeBSD/packages/lang/bwbasic-2.10.tgz">Bywater
Basic Interpreter and the Phil
+URL="ftp://ftp.FreeBSD.org:pub/FreeBSD/packages/lang/pbasic-2.0.tgz">Phil
Cockroft's Basic Interpreter (formerly Rabbit Basic) are
available as FreeBSD FreeBSD
+URL="ftp://ftp.FreeBSD.org:pub/FreeBSD/packages/">FreeBSD
packagesLispA language that was developed in the late 1950s as an alternative to
the number-crunching languages that were popular at the time.
Instead of being based on numbers, Lisp is based on lists; in fact
the name is short for List Processing. Very popular in AI
(Artificial Intelligence) circles.Lisp is an extremely powerful and sophisticated language, but
can be rather large and unwieldy. FreeBSD has GNU
+URL="ftp://ftp.FreeBSD.org:pub/FreeBSD/packages/gcl-2.0.tgz">GNU
Common Lisp available as a package.PerlVery popular with system administrators for writing
scripts; also often used on World Wide Web servers for writing CGI>
scripts.Version 4, which is probably still the most widely-used
version, comes with FreeBSD; the newer Perl
+URL="ftp://ftp.FreeBSD.org:pub/FreeBSD/packages/lang/perl-5.001.tgz">Perl
Version 5 is available as a package.SchemeA dialect of Lisp that is rather more compact and
cleaner than Common Lisp. Popular in Universities as it is simple
enough to teach to undergraduates as a first language, while it has a
high enough level of abstraction to be used in research work.FreeBSD has packages of the
-Elk Scheme Interpreter, the
-MIT Scheme Interpreter and the
-SCM Scheme Interpreter.
+Elk Scheme Interpreter, the
+MIT Scheme Interpreter and the
+SCM Scheme Interpreter.Icon
-The Icon Programming Language.
+The Icon Programming Language.Logo
-Brian Harvey's LOGO Interpreter.
+Brian Harvey's LOGO Interpreter.Python
-The Python Object-Oriented Programming Language
+The Python Object-Oriented Programming LanguageCompilersCompilers are rather different. First of all, you write your
code in a file (or files) using an editor. You then run the compiler
and see if it accepts your program. If it did not compile, grit your
teeth and go back to the editor; if it did compile and gave you a
program, you can run it either at a shell command prompt or in a
debugger to see if it works properly.If you run it in
the shell, you may get a core dump.Obviously, this is not quite as direct as using an interpreter.
However it allows you to do a lot of things which are very difficult
or even impossible with an interpreter, such as writing code which
interacts closely with the operating system—or even writing
your own operating system! It's also useful if you need to write very
efficient code, as the compiler can take its time and optimise the
code, which would not be acceptable in an interpreter. And
distributing a program written for a compiler is usually more
straightforward than one written for an interpreter—you can just
give them a copy of the executable, assuming they have the same
operating system as you.Compiled languages include Pascal, C and C++. C and C++ are rather
unforgiving languages, and best suited to more experienced
programmers; Pascal, on the other hand, was designed as an educational
language, and is quite a good language to start with. Unfortunately,
FreeBSD doesn't have any Pascal support, except for a Pascal-to-C
converter in the ports.As the edit-compile-run-debug cycle is rather tedious when
using separate programs, many commercial compiler makers have
produced Integrated Development Environments (IDEs
for short). FreeBSD does not have an IDE> as such; however
it is possible to use Emacs for this purpose. This is discussed in
.Compiling with ccThis section deals only with the GNU compiler for C and C++,
since that comes with the base FreeBSD system. It can be invoked by
either cc> or gcc>. The details of producing a
program with an interpreter vary considerably between interpreters,
and are usually well covered in the documentation and on-line help
for the interpreter.Once you've written your masterpiece, the next step is to convert it
into something that will (hopefully!) run on FreeBSD. This usually
involves several steps, each of which is done by a separate
program.Pre-process your source code to remove comments and do other
tricks like expanding macros in C.
Check the syntax of your code to see if you have obeyed the
rules of the language. If you have not, it will complain!
Convert the source code into assembly
language—this is very close to machine code, but still
understandable by humans. Allegedly.To be strictly
accurate, cc> converts the source code into its own,
machine-independent p-code> instead of assembly language
at this stage.Convert the assembly language into machine
code—yep, we are talking bits and bytes, ones and zeros
here.Check that you have used things like functions and global
variables in a consistent way. For example, if you have called a
non-existent function, it will complain.If you are trying to produce an executable from several
source code files, work out how to fit them all together.Work out how to produce something that the system's run-time
loader will be able to load into memory and run.Finally, write the executable on the file
system.The word compiling> is often used to refer to just
steps 1 to 4—the others are referred to as
linking>. Sometimes step 1 is referred to as
pre-processing> and steps 3-4 as
assembling>.Fortunately, almost all this detail is hidden from you, as
cc> is a front end that manages calling all these programs
with the right arguments for you; simply typing
$ cc foobar.c>will cause foobar.c> to be compiled by all the
steps above. If you have more than one file to compile, just do
something like
$ cc foo.c bar.c>Note that the syntax checking is just that—checking the
syntax. It will not check for any logical mistakes you may have made,
like putting the program into an infinite loop, or using a bubble
sort when you meant to use a binary sort.In case you
didn't know, a binary sort is an efficient way of sorting things into
order and a bubble sort isn't.There are lots and lots of options for cc>, which
are all in the man page. Here are a few of the most important ones,
with examples of how to use them.The output name of the file. If you do not use this
option, cc> will produce an executable called
a.out>.The reasons for this are buried in
the mists of history.$ cc foobar.c> executable is a.out>>
$ cc -o foobar foobar.c> executable is foobar>>Just compile the file, do not link it. Useful for toy
programs where you just want to check the syntax, or if you are using
a Makefile.$ cc -c foobar.cThis will produce an object file> (not an
executable) called foobar.o. This can be linked
together with other object files into an executable.Create a debug version of the executable. This makes
the compiler put information into the executable about which line of
which source file corresponds to which function call. A debugger can
use this information to show the source code as you step through the
program, which is very useful; the disadvantage
is that all this extra information makes the program much bigger.
Normally, you compile with while you are
developing a program and then compile a release
version without when you're satisfied it
works properly.$ cc -g foobar.cThis will produce a debug version of the
program.Note, we didn't use the
flag to specify the executable name, so we will get an executable
called a.out. Producing a debug version called
foobar is left as an exercise for the
reader!Create an optimised version of the executable. The
compiler performs various clever tricks to try and produce an
executable that runs faster than normal. You can add a number after
the to specify a higher level of optimisation,
but this often exposes bugs in the compiler's optimiser. For
instance, the version of cc that comes with the
2.1.0 release of FreeBSD is known to produce bad code with the
option in some circumstances.Optimisation is usually only turned on when compiling a release
version.$ cc -O -o foobar foobar.cThis will produce an optimised version of
foobar.The following three flags will force cc to
check that your code complies to the relevant international standard,
often referred to as the ANSI standard, though
strictly speaking it is an ISO standard.Enable all the warnings which the authors of
cc believe are worthwhile. Despite the name, it
will not enable all the warnings cc is capable
of.Turn off most, but not all, of the non-ANSI> C
features provided by cc. Despite the name, it does
not guarantee strictly that your code will comply to the
standard.Turn off allcc's non-ANSI> C features.Without these flags, cc will allow you to
use some of its non-standard extensions to the standard. Some of
these are very useful, but will not work with other compilers—in
fact, one of the main aims of the standard is to allow people to
write code that will work with any compiler on any system. This is
known as portable code.Generally, you should try to make your code as portable as
possible, as otherwise you may have to completely re-write the
program later to get it to work somewhere else—and who knows
what you may be using in a few years time?$ cc -Wall -ansi -pedantic -o foobar foobar.cThis will produce an executable foobar
after checking foobar.c for standard
compliance.Specify a function library to be used during when
linking.The most common example of this is when compiling a program that
uses some of the mathematical functions in C. Unlike most other
platforms, these are in a separate library from the standard C one
and you have to tell the compiler to add it.The rule is that if the library is called
libsomething.a, you
give cc the argument
. For example,
the math library is libm.a, so you give
cc the argument . A common
gotcha with the math library is that it has to be the
last library on the command line.$ cc -o foobar foobar.c -lmThis will link the math library functions into
foobar.If you are compiling C++ code, you need to add
, or if you are using
FreeBSD 2.2 or later, to the command line argument to link the C++
library functions. Alternatively, you can run c++
instead of cc, which does this for you.
c++ can also be invoked as g++
on FreeBSD.$ cc -o foobar foobar.cc -lg++For FreeBSD 2.1.6 and earlier>
$ cc -o foobar foobar.cc -lstdc++For FreeBSD 2.2 and later>
$ c++ -o foobar foobar.ccEach of these will both produce an executable
foobar from the C++ source file
foobar.cc. Note that, on Unix systems, C++
source files traditionally end in .C,
.cxx or .cc, rather than
the MS-DOS style .cpp
(which was already used for something else). gcc
used to rely on this to work out what kind of compiler to use on the
source file; however, this restriction no longer applies, so you may
now call your C++ files .cpp with
impunity!Common cc Queries and ProblemsQ. I am trying to write a program which uses the
sin() function and I get an error like this.
What does it mean?
/var/tmp/cc0143941.o: Undefined symbol `_sin' referenced from text segmentA. When using mathematical functions like
sin(), you have to tell cc to
link in the math library, like so:
$ cc -o foobar foobar.c -lmQ. All right, I wrote this simple program to practice using
. All it does is raise 2.1 to the power of 6.
#include <stdio.h>
int main() {
float f;
f = pow(2.1, 6);
printf("2.1 ^ 6 = %f\n", f);
return 0;
}
and I compiled it as:
$ cc temp.c -lm
like you said I should, but I get this when I run it:
$ ./a.out
2.1 ^ 6 = 1023.000000This is not the right answer! What is
going on?A. When the compiler sees you call a function, it checks if it
has already seen a prototype for it. If it has not, it assumes the
function returns an int, which is
definitely not what you want here.Q. So how do I fix this?A. The prototypes for the mathematical functions are in
math.h. If you include this file, the compiler
will be able to find the prototype and it will stop doing strange
things to your calculation!
#include <math.h>
#include <stdio.h>
int main() {
...After recompiling it as you did before, run it:
$ ./a.out
2.1 ^ 6 = 85.766121If you are using any of the mathematical functions,
always include math.h and
remember to link in the math library.Q. I compiled a file called foobar.c and I
cannot find an executable called foobar. Where's
it gone?A. Remember, cc will call the executable
a.out unless you tell it differently. Use the
option:
$ cc -o foobar foobar.cQ. OK, I have an executable called foobar,
I can see it when I run ls, but when I type in
foobar at the command prompt it tells me there is
no such file. Why can it not find it?A. Unlike MS-DOS, Unix does not look in the
current directory when it is trying to find out which executable you
want it to run, unless you tell it to. Either type
./foobar, which means run the file called
foobar in the current directory, or
change your PATH
environment variable so that it looks something like
bin:/usr/bin:/usr/local/bin:.
The dot at the end means look in the current directory if it is not in
any of the others.Q. I called my executable test, but
nothing happens when I run it. What is going on?A. Most Unix systems have a program called
test in /usr/bin and the
shell is picking that one up before it gets to checking the current
directory. Either type:
$ ./test
or choose a better name for your program!Q. I compiled my program and it seemed to run all right at
first, then there was an error and it said something about core
dumped. What does that mean?A. The name core dump dates back to the
very early days of Unix, when the machines used core memory for
storing data. Basically, if the program failed under certain
conditions, the system would write the contents of core memory to
disk in a file called core, which the programmer
could then pore over to find out what went wrong.Q. Fascinating stuff, but what I am supposed to do now?A. Use gdb to analyse the core (see ).Q. When my program dumped core, it said something about a
segmentation fault. What's that?A. This basically means that your program tried to perform some sort
of illegal operation on memory; Unix is designed to protect the
operating system and other programs from rogue programs.Common causes for this are:
Trying to write to a NULL pointer, eg
char *foo = NULL;
strcpy(foo, "bang!");Using a pointer that hasn't been initialised, eg
char *foo;
strcpy(foo, "bang!");
The pointer will have some random value that, with luck,
will point into an area of memory that isn't available to
your program and the kernel will kill your program before
it can do any damage. If you're unlucky, it'll point
somewhere inside your own program and corrupt one of your
data structures, causing the program to fail
mysteriously.Trying to access past the end of an array, eg
int bar[20];
bar[27] = 6; Trying to store something in read-only memory, eg
char *foo = "My string";
strcpy(foo, "bang!");
Unix compilers often put string literals like
"My string" into
read-only areas of memory.Doing naughty things with
malloc() and free(), eg
char bar[80];
free(bar);
or
char *foo = malloc(27);
free(foo);
free(foo);Making one of these mistakes will not always lead to an
error, but they are always bad practice. Some systems and
compilers are more tolerant than others, which is why programs
that ran well on one system can crash when you try them on an
another.Q. Sometimes when I get a core dump it says bus
error. It says in my Unix book that this means a hardware
problem, but the computer still seems to be working. Is this
true?A. No, fortunately not (unless of course you really do have a hardware
problem…). This is usually another way of saying that you
accessed memory in a way you shouldn't have.Q. This dumping core business sounds as though it could be quite
useful, if I can make it happen when I want to. Can I do this, or
do I have to wait until there's an error?A. Yes, just go to another console or xterm, do
$ ps
to find out the process ID of your program, and do
$ kill -ABRT pid
where pid is the
process ID you looked up.This is useful if your program has got stuck in an infinite
loop, for instance. If your program happens to trap
SIGABRT, there are several other signals which have
a similar effect.MakeWhat is make?When you're working on a simple program with only one or two source
files, typing in
$ cc file1.c file2.c
is not too bad, but it quickly becomes very tedious when there are
several files—and it can take a while to compile, too.One way to get around this is to use object files and only recompile
the source file if the source code has changed. So we could have
something like:
$ cc file1.o file2.o … file37.c &hellip
if we'd changed file37.c, but not any of the
others, since the last time we compiled. This may speed up the
compilation quite a bit, but doesn't solve the typing
problem.Or we could write a shell script to solve the typing problem, but it
would have to re-compile everything, making it very inefficient on a
large project.What happens if we have hundreds of source files lying about? What if
we're working in a team with other people who forget to tell us when
they've changed one of their source files that we use?Perhaps we could put the two solutions together and write something
like a shell script that would contain some kind of magic rule saying
when a source file needs compiling. Now all we need now is a program
that can understand these rules, as it's a bit too complicated for the
shell.This program is called make. It reads in a
file, called a makefile, that tells it how
different files depend on each other, and works out which files need
to be re-compiled and which ones don't. For example, a rule could say
something like if fromboz.o is older than
fromboz.c, that means someone must have changed
fromboz.c, so it needs to be
re-compiled. The makefile also has rules telling make
how to re-compile the source file, making it a
much more powerful tool.Makefiles are typically kept in the same directory as the
source they apply to, and can be called
makefile, Makefile or
MAKEFILE. Most programmers use the name
Makefile, as this puts it near the top of a
directory listing, where it can easily be seen.They
don't use the MAKEFILE form as block capitals
are often used for documentation files like
README.Example of using makeHere's a very simple make file:
foo: foo.c
cc -o foo foo.c
It consists of two lines, a dependency line and a creation line.The dependency line here consists of the name of the program
(known as the target), followed by a colon,
then whitespace, then the name of the source file. When
make reads this line, it looks to see if
foo exists; if it exists, it compares the time
foo was last modified to the time
foo.c was last modified. If
foo does not exist, or is older than
foo.c, it then looks at the creation line to
find out what to do. In other words, this is the rule for working out
when foo.c needs to be re-compiled.The creation line starts with a tab (press the
tab key) and then the command you would type to
create foo if you were doing it at a command
prompt. If foo is out of date, or does not
exist, make then executes this command to create
it. In other words, this is the rule which tells make how to
re-compile foo.c.So, when you type make, it will make
sure that foo is up to date with respect to your
latest changes to foo.c. This principle can be
extended to Makefiles with hundreds of
targets—in fact, on FreeBSD, it is possible to compile the
entire operating system just by typing make
world in the appropriate directory!Another useful property of makefiles is that the targets don't have
to be programs. For instance, we could have a make file that looks
like this:
foo: foo.c
cc -o foo foo.c
install:
cp foo /home/meWe can tell make which target we want to make by typing:
$ make targetmake will then only look at that target and ignore any
others. For example, if we type make foo with the
makefile above, make will ignore the install target.If we just type make on its own, make
will always look at the first target and then stop without looking at
any others. So if we typed make here, it will
just go to the foo target, re-compile
foo if necessary, and then stop without going on
to the install target.Notice that the install target doesn't
actually depend on anything! This means that the command on the
following line is always executed when we try to make that target by
typing make install. In this case, it will
copy foo into the user's home directory. This is
often used by application makefiles, so that the application can be
installed in the correct directory when it has been correctly
compiled.This is a slightly confusing subject to try and explain. If you
don't quite understand how make works, the best
thing to do is to write a simple program like hello
world and a make file like the one above and experiment. Then
progress to using more than one source file, or having the source
file include a header file. The touch command is
very useful here—it changes the date on a file without you
having to edit it.FreeBSD MakefilesMakefiles can be rather complicated to write. Fortunately,
BSD-based systems like FreeBSD come with some very powerful ones as
part of the system. One very good example of this is the FreeBSD
ports system. Here's the essential part of a typical ports
Makefile:
MASTER_SITES= ftp://freefall.cdrom.com/pub/FreeBSD/LOCAL_PORTS/
DISTFILES= scheme-microcode+dist-7.3-freebsd.tgz
.include <bsd.port.mk>Now, if we go to the directory for this port and type
make, the following happens:A check is made to see if the source code for this port is
already on the system.If it isn't, an FTP connection to the URL in
MASTER_SITES is set up to download the
source.The checksum for the source is calculated and compared it with
one for a known, good, copy of the source. This is to make sure that
the source was not corrupted while in transit.Any changes required to make the source work on FreeBSD are
applied—this is known as patching.Any special configuration needed for the source is done.
(Many Unix program distributions try to work out which version of
Unix they are being compiled on and which optional Unix features are
present—this is where they are given the information in the
FreeBSD ports scenario).The source code for the program is compiled. In effect,
we change to the directory where the source was unpacked and do
make—the program's own make file has the
necessary information to build the program.We now have a compiled version of the program. If we
wish, we can test it now; when we feel confident about the program,
we can type make install. This will cause the
program and any supporting files it needs to be copied into the
correct location; an entry is also made into a package
database, so that the port can easily be uninstalled later
if we change our mind about it.Now I think you'll agree that's rather impressive for a four
line script!The secret lies in the last line, which tells
make to look in the system makefile called
bsd.port.mk. It's easy to overlook this line,
but this is where all the clever stuff comes from—someone has
written a makefile that tells make to do all the
things above (plus a couple of other things I didn't mention,
including handling any errors that may occur) and anyone can get
access to that just by putting a single line in their own make
file!If you want to have a look at these system makefiles, they're
in /usr/share/mk, but it's probably best to wait
until you've had a bit of practice with makefiles, as they are very
complicated (and if you do look at them, make sure you have a flask
of strong coffee handy!)More advanced uses of makeMake is a very powerful tool, and can do much
more than the simple example above shows. Unfortunately, there are
several different versions of make, and they all
differ considerably. The best way to learn what they can do is
probably to read the documentation—hopefully this introduction will
have given you a base from which you can do this.The version of make that comes with FreeBSD is the Berkeley
make; there is a tutorial for it in
/usr/share/doc/psd/12.make. To view it, do
$ zmore paper.ascii.gz
in that directory.Many applications in the ports use GNU
make, which has a very good set of info
pages. If you have installed any of these ports, GNU
make will automatically have been installed as
gmake. It's also available as a port and package
in its own right.To view the info pages for GNU make,
you will have to edit the dir file in the
/usr/local/info directory to add an entry for
it. This involves adding a line like
* Make: (make). The GNU Make utility.
to the file. Once you have done this, you can type
info and then select
make from the menu (or in
Emacs, do C-h
i).DebuggingThe DebuggerThe debugger that comes with FreeBSD is called
gdb (GNU
debugger). You start it up by typing
$ gdb progname
although most people prefer to run it inside
Emacs. You can do this by:
M-x gdb RET progname RETUsing a debugger allows you to run the program under more
controlled circumstances. Typically, you can step through the program
a line at a time, inspect the value of variables, change them, tell
the debugger to run up to a certain point and then stop, and so on.
You can even attach to a program that's already running, or load a
core file to investigate why the program crashed. It's even possible
to debug the kernel, though that's a little trickier than the user
applications we'll be discussing in this section.gdb has quite good on-line help, as well as
a set of info pages, so this section will concentrate on a few of the
basic commands.Finally, if you find its text-based command-prompt style
off-putting, there's a graphical front-end for it xxgdb
in the ports collection.This section is intended to be an introduction to using
gdb and does not cover specialised topics such as
debugging the kernel.Running a program in the debuggerYou'll need to have compiled the program with the
option to get the most out of using
gdb. It will work without, but you'll only see the
name of the function you're in, instead of the source code. If you
see a line like:
… (no debugging symbols found) …when
gdb starts up, you'll know that the program wasn't
compiled with the option.At the gdb prompt, type break
main. This will tell the debugger to skip over the
preliminary set-up code in the program and start at the beginning of
your code. Now type run to start the
program—it will start at the beginning of the set-up code and
then get stopped by the debugger when it calls
main(). (If you've ever wondered where
main() gets called from, now you know!).You can now step through the program, a line at a time, by
pressing n. If you get to a function call, you can
step into it by pressing s. Once you're in a
function call, you can return from stepping into a function call by
pressing f. You can also use up and
down to take a quick look at the caller.Here's a simple example of how to spot a mistake in a program
with gdb. This is our program (with a deliberate
mistake):
#include <stdio.h>
int bazz(int anint);
main() {
int i;
printf("This is my program\n");
bazz(i);
return 0;
}
int bazz(int anint) {
printf("You gave me %d\n", anint);
return anint;
}This program sets i to be 5
and passes it to a function bazz() which prints
out the number we gave it.When we compile and run the program we get
$ cc -g -o temp temp.c
$ ./temp
This is my program
anint = 4231That wasn't what we expected! Time to see what's going
on!$ gdb temp
GDB is free software and you are welcome to distribute copies of it
under certain conditions; type "show copying" to see the conditions.
There is absolutely no warranty for GDB; type "show warranty" for details.
GDB 4.13 (i386-unknown-freebsd), Copyright 1994 Free Software Foundation, Inc.
(gdb) break main> Skip the set-up code>
Breakpoint 1 at 0x160f: file temp.c, line 9. gdb puts breakpoint at main()>>
(gdb) run> Run as far as main()>>
Starting program: /home/james/tmp/temp Program starts running>
Breakpoint 1, main () at temp.c:9 gdb stops at main()>>
(gdb) n> Go to next line>
This is my program Program prints out>
(gdb) s> step into bazz()>>
bazz (anint=4231) at temp.c:17 gdb displays stack frame>
(gdb)Hang on a minute! How did anint get to be
4231? Didn't we set it to be 5
in main()? Let's move up to
main() and have a look.(gdb) up> Move up call stack>
#1 0x1625 in main () at temp.c:11 gdb displays stack frame>
(gdb) p i> Show us the value of i>>
$1 = 4231 gdb displays 4231>>
Oh dear! Looking at the code, we forgot to initialise
i. We meant to put
…>
main() {
int i;
i = 5;
printf("This is my program\n");
&hellip>
but we left the i=5; line out. As we didn't
initialise i, it had whatever number happened to be
in that area of memory when the program ran, which in this case
happened to be 4231.gdb displays the stack frame
every time we go into or out of a function, even if we're using
up and down to move around the
call stack. This shows the name of the function and the values of
its arguments, which helps us keep track of where we are and what's
going on. (The stack is a storage area where the program stores
information about the arguments passed to functions and where to go
when it returns from a function call).Examining a core fileA core file is basically a file which contains the complete
state of the process when it crashed. In the good old
days, programmers had to print out hex listings of core files
and sweat over machine code manuals, but now life is a bit easier.
Incidentally, under FreeBSD and other 4.4BSD systems, a core file is
called progname>.core> instead of just
core, to make it clearer which program a core
file belongs to.To examine a core file, start up gdb in the
usual way. Instead of typing break or
run, type
(gdb) core progname.core
If you're not in the same directory as the core file, you'll have to
do dir /path/to/core/file first.You should see something like this:
$ gdb a.out
GDB is free software and you are welcome to distribute copies of it
under certain conditions; type "show copying" to see the conditions.
There is absolutely no warranty for GDB; type "show warranty" for details.
GDB 4.13 (i386-unknown-freebsd), Copyright 1994 Free Software Foundation, Inc.
(gdb) core a.out.core
Core was generated by `a.out'.
Program terminated with signal 11, Segmentation fault.
Cannot access memory at address 0x7020796d.
#0 0x164a in bazz (anint=0x5) at temp.c:17
(gdb)In this case, the program was called
a.out, so the core file is called
a.out.core. We can see that the program crashed
due to trying to access an area in memory that was not available to
it in a function called bazz.Sometimes it's useful to be able to see how a function was
called, as the problem could have occurred a long way up the call
stack in a complex program. The bt command causes
gdb to print out a back-trace of the call
stack:
(gdb) bt
#0 0x164a in bazz (anint=0x5) at temp.c:17
#1 0xefbfd888 in end ()
#2 0x162c in main () at temp.c:11
(gdb)The end() function is called when
a program crashes; in this case, the bazz()
function was called from main().Attaching to a running programOne of the neatest features about gdb is
that it can attach to a program that's already running. Of course,
that assumes you have sufficient permissions to do so. A common
problem is when you are stepping through a program that forks, and
you want to trace the child, but the debugger will only let you trace
the parent.What you do is start up another gdb, use
ps to find the process ID for the child, and
do(gdb) attach pid
in gdb, and then debug as usual.That's all very well, you're probably thinking,
but by the time I've done that, the child process will be over
the hill and far away. Fear not, gentle reader, here's how to
do it (courtesy of the gdb info pages):
&hellip
if ((pid = fork()) < 0) /* _Always_ check this */
error();
else if (pid == 0) { /* child */
int PauseMode = 1;
while (PauseMode)
sleep(10); /* Wait until someone attaches to us */
&hellip
} else { /* parent */
&hellip
Now all you have to do is attach to the child, set
PauseMode to 0, and
wait for the sleep() call to return!Using Emacs as a Development EnvironmentEmacsUnfortunately, Unix systems don't come with the kind of
everything-you-ever-wanted-and-lots-more-you-didn't-in-one-gigantic-package
integrated development environments that other systems
have.At least, not unless you pay out very large sums
of money. However, it is possible to set up your
own environment. It may not be as pretty, and it may not be quite as
integrated, but you can set it up the way you want it. And it's free.
And you have the source to it.The key to it all is Emacs. Now there are some people who
loathe it, but many who love it. If you're one of the former, I'm
afraid this section will hold little of interest to you. Also, you'll
need a fair amount of memory to run it—I'd recommend 8MB in
text mode and 16MB in X as the bare minimum to get reasonable
performance.Emacs is basically a highly customisable editor—indeed,
it has been customised to the point where it's more like an operating
system than an editor! Many developers and sysadmins do in fact
spend practically all their time working inside Emacs, leaving it
only to log out.It's impossible even to summarise everything Emacs can do here, but
here are some of the features of interest to developers:
Very powerful editor, allowing search-and-replace on
both strings and regular expressions (patterns), jumping to start/end
of block expression, etc, etc.Pull-down menus and online help.Language-dependent syntax highlighting and
indentation.Completely customisable.You can compile and debug programs within
Emacs.On a compilation error, you can jump to the offending
line of source code.Friendly-ish front-end to the info
program used for reading GNU hypertext documentation, including the
documentation on Emacs itself.Friendly front-end to gdb,
allowing you to look at the source code as you step through your
program.You can read Usenet news and mail while your program
is compiling.And doubtless many more that I've overlooked.Emacs can be installed on FreeBSD using the Emacs
port.Once it's installed, start it up and do C-h
t to read an Emacs tutorial—that means hold down
the control key, press h, let go of
the control key, and then press t.
(Alternatively, you can you use the mouse to select Emacs
Tutorial from the Help menu).Although Emacs does have menus, it's well worth learning the
key bindings, as it's much quicker when you're editing something to
press a couple of keys than to try and find the mouse and then click
on the right place. And, when you're talking to seasoned Emacs users,
you'll find they often casually throw around expressions like
M-x replace-s RET foo RET bar RET
so it's useful to know what they mean. And in any case, Emacs has far
too many useful functions for them to all fit on the menu
bars.Fortunately, it's quite easy to pick up the key-bindings, as
they're displayed next to the menu item. My advice is to use the
menu item for, say, opening a file until you understand how it works
and feel confident with it, then try doing C-x C-f. When you're happy
with that, move on to another menu command.If you can't remember what a particular combination of keys
does, select Describe Key from the
Help menu and type it in—Emacs will tell you
what it does. You can also use the Command
Apropos menu item to find out all the commands which
contain a particular word in them, with the key binding next to
it.By the way, the expression above means hold down the
Meta key, press x, release the
Meta key, type replace-s
(short for replace-string—another feature of
Emacs is that you can abbreviate commands), press the
return key, type foo (the
string you want replaced), press the return key,
type bar (the string you want to replace foo with)
and press return again. Emacs will then do the
search-and-replace operation you've just requested.If you're wondering what on earth the Meta key
is, it's a special key that many Unix workstations have.
Unfortunately, PC's don't have one, so it's usually the
alt key (or if you're unlucky, the escape
key).Oh, and to get out of Emacs, do C-x C-c
(that means hold down the control key, press
x, press c and release the
control key). If you have any unsaved files open,
Emacs will ask you if you want to save them. (Ignore the bit in the
documentation where it says C-z is the usual way
to leave Emacs—that leaves Emacs hanging around in the
background, and is only really useful if you're on a system which
doesn't have virtual terminals).Configuring EmacsEmacs does many wonderful things; some of them are built in,
some of them need to be configured.Instead of using a proprietary macro language for
configuration, Emacs uses a version of Lisp specially adapted for
editors, known as Emacs Lisp. This can be quite useful if you want to
go on and learn something like Common Lisp, as it's considerably
smaller than Common Lisp (although still quite big!).The best way to learn Emacs Lisp is to download the Emacs
TutorialHowever, there's no need to actually know any Lisp to get
started with configuring Emacs, as I've included a sample
.emacs file, which should be enough to get you
started. Just copy it into your home directory and restart Emacs if
it's already running; it will read the commands from the file and
(hopefully) give you a useful basic setup.A sample .emacs fileUnfortunately, there's far too much here to explain it in detail;
however there are one or two points worth mentioning.Everything beginning with a ;> is a
comment and is ignored by Emacs.In the first line, the
-*- Emacs-Lisp -*- is so that we can
edit the .emacs file itself within Emacs and get
all the fancy features for editing Emacs Lisp. Emacs usually tries to
guess this based on the filename, and may not get it right for
.emacs. The tab key is bound to an
indentation function in some modes, so when you press the tab key, it
will indent the current line of code. If you want to put a
tab character in whatever you're writing, hold the
control key down while you're pressing the
tab key.This file supports syntax highlighting for C, C++,
Perl, Lisp and Scheme, by guessing the language from the
filename.Emacs already has a pre-defined function called
next-error. In a compilation output window, this
allows you to move from one compilation error to the next by doing
M-n; we define a complementary function,
previous-error, that allows you to go to a
previous error by doing M-p. The nicest feature of
all is that C-c C-c will open up the source file
in which the error occurred and jump to the appropriate
line. We enable Emacs's ability to act as a server, so
that if you're doing something outside Emacs and you want to edit a
file, you can just type in
$ emacsclient filename
and then you can edit the file in your Emacs!Many
Emacs users set their EDITOR environment to
emacsclient so this happens every time they need
to edit a file.A sample .emacs file;; -*-Emacs-Lisp-*-
;; This file is designed to be re-evaled; use the variable first-time
;; to avoid any problems with this.
(defvar first-time t
"Flag signifying this is the first time that .emacs has been evaled")
;; Meta
(global-set-key "\M- " 'set-mark-command)
(global-set-key "\M-\C-h" 'backward-kill-word)
(global-set-key "\M-\C-r" 'query-replace)
(global-set-key "\M-r" 'replace-string)
(global-set-key "\M-g" 'goto-line)
(global-set-key "\M-h" 'help-command)
;; Function keys
(global-set-key [f1] 'manual-entry)
(global-set-key [f2] 'info)
(global-set-key [f3] 'repeat-complex-command)
(global-set-key [f4] 'advertised-undo)
(global-set-key [f5] 'eval-current-buffer)
(global-set-key [f6] 'buffer-menu)
(global-set-key [f7] 'other-window)
(global-set-key [f8] 'find-file)
(global-set-key [f9] 'save-buffer)
(global-set-key [f10] 'next-error)
(global-set-key [f11] 'compile)
(global-set-key [f12] 'grep)
(global-set-key [C-f1] 'compile)
(global-set-key [C-f2] 'grep)
(global-set-key [C-f3] 'next-error)
(global-set-key [C-f4] 'previous-error)
(global-set-key [C-f5] 'display-faces)
(global-set-key [C-f8] 'dired)
(global-set-key [C-f10] 'kill-compilation)
;; Keypad bindings
(global-set-key [up] "\C-p")
(global-set-key [down] "\C-n")
(global-set-key [left] "\C-b")
(global-set-key [right] "\C-f")
(global-set-key [home] "\C-a")
(global-set-key [end] "\C-e")
(global-set-key [prior] "\M-v")
(global-set-key [next] "\C-v")
(global-set-key [C-up] "\M-\C-b")
(global-set-key [C-down] "\M-\C-f")
(global-set-key [C-left] "\M-b")
(global-set-key [C-right] "\M-f")
(global-set-key [C-home] "\M-<")
(global-set-key [C-end] "\M->")
(global-set-key [C-prior] "\M-<")
(global-set-key [C-next] "\M->")
;; Mouse
(global-set-key [mouse-3] 'imenu)
;; Misc
(global-set-key [C-tab] "\C-q\t") ; Control tab quotes a tab.
(setq backup-by-copying-when-mismatch t)
;; Treat 'y' or <CR> as yes, 'n' as no.
(fset 'yes-or-no-p 'y-or-n-p)
(define-key query-replace-map [return] 'act)
(define-key query-replace-map [?\C-m] 'act)
;; Load packages
(require 'desktop)
(require 'tar-mode)
;; Pretty diff mode
(autoload 'ediff-buffers "ediff" "Intelligent Emacs interface to diff" t)
(autoload 'ediff-files "ediff" "Intelligent Emacs interface to diff" t)
(autoload 'ediff-files-remote "ediff"
"Intelligent Emacs interface to diff") (if first-time
(setq auto-mode-alist
(append '(("\\.cpp$" . c++-mode)
("\\.hpp$" . c++-mode)
("\\.lsp$" . lisp-mode)
("\\.scm$" . scheme-mode)
("\\.pl$" . perl-mode)
) auto-mode-alist)))
;; Auto font lock mode
(defvar font-lock-auto-mode-list
(list 'c-mode 'c++-mode 'c++-c-mode 'emacs-lisp-mode 'lisp-mode 'perl-mode 'scheme-mode)
"List of modes to always start in font-lock-mode")
(defvar font-lock-mode-keyword-alist
'((c++-c-mode . c-font-lock-keywords)
(perl-mode . perl-font-lock-keywords))
"Associations between modes and keywords")
(defun font-lock-auto-mode-select ()
"Automatically select font-lock-mode if the current major mode is
in font-lock-auto-mode-list"
(if (memq major-mode font-lock-auto-mode-list)
(progn
(font-lock-mode t))
)
)
(global-set-key [M-f1] 'font-lock-fontify-buffer)
;; New dabbrev stuff
;(require 'new-dabbrev)
(setq dabbrev-always-check-other-buffers t)
(setq dabbrev-abbrev-char-regexp "\\sw\\|\\s_")
(add-hook 'emacs-lisp-mode-hook
'(lambda ()
(set (make-local-variable 'dabbrev-case-fold-search) nil)
(set (make-local-variable 'dabbrev-case-replace) nil)))
(add-hook 'c-mode-hook
'(lambda ()
(set (make-local-variable 'dabbrev-case-fold-search) nil)
(set (make-local-variable 'dabbrev-case-replace) nil)))
(add-hook 'text-mode-hook
'(lambda ()
(set (make-local-variable 'dabbrev-case-fold-search) t)
(set (make-local-variable 'dabbrev-case-replace) t)))
;; C++ and C mode...
(defun my-c++-mode-hook ()
(setq tab-width 4)
(define-key c++-mode-map "\C-m" 'reindent-then-newline-and-indent)
(define-key c++-mode-map "\C-ce" 'c-comment-edit)
(setq c++-auto-hungry-initial-state 'none)
(setq c++-delete-function 'backward-delete-char)
(setq c++-tab-always-indent t)
(setq c-indent-level 4)
(setq c-continued-statement-offset 4)
(setq c++-empty-arglist-indent 4))
(defun my-c-mode-hook ()
(setq tab-width 4)
(define-key c-mode-map "\C-m" 'reindent-then-newline-and-indent)
(define-key c-mode-map "\C-ce" 'c-comment-edit)
(setq c-auto-hungry-initial-state 'none)
(setq c-delete-function 'backward-delete-char)
(setq c-tab-always-indent t)
;; BSD-ish indentation style
(setq c-indent-level 4)
(setq c-continued-statement-offset 4)
(setq c-brace-offset -4)
(setq c-argdecl-indent 0)
(setq c-label-offset -4))
;; Perl mode
(defun my-perl-mode-hook ()
(setq tab-width 4)
(define-key c++-mode-map "\C-m" 'reindent-then-newline-and-indent)
(setq perl-indent-level 4)
(setq perl-continued-statement-offset 4))
;; Scheme mode...
(defun my-scheme-mode-hook ()
(define-key scheme-mode-map "\C-m" 'reindent-then-newline-and-indent))
;; Emacs-Lisp mode...
(defun my-lisp-mode-hook ()
(define-key lisp-mode-map "\C-m" 'reindent-then-newline-and-indent)
(define-key lisp-mode-map "\C-i" 'lisp-indent-line)
(define-key lisp-mode-map "\C-j" 'eval-print-last-sexp))
;; Add all of the hooks...
(add-hook 'c++-mode-hook 'my-c++-mode-hook)
(add-hook 'c-mode-hook 'my-c-mode-hook)
(add-hook 'scheme-mode-hook 'my-scheme-mode-hook)
(add-hook 'emacs-lisp-mode-hook 'my-lisp-mode-hook)
(add-hook 'lisp-mode-hook 'my-lisp-mode-hook)
(add-hook 'perl-mode-hook 'my-perl-mode-hook)
;; Complement to next-error
(defun previous-error (n)
"Visit previous compilation error message and corresponding source code."
(interactive "p")
(next-error (- n)));; Misc...
(transient-mark-mode 1)
(setq mark-even-if-inactive t)
(setq visible-bell nil)
(setq next-line-add-newlines nil)
(setq compile-command "make")
(setq suggest-key-bindings nil)
(put 'eval-expression 'disabled nil)
(put 'narrow-to-region 'disabled nil)
(put 'set-goal-column 'disabled nil)
;; Elisp archive searching
(autoload 'format-lisp-code-directory "lispdir" nil t)
(autoload 'lisp-dir-apropos "lispdir" nil t)
(autoload 'lisp-dir-retrieve "lispdir" nil t)
(autoload 'lisp-dir-verify "lispdir" nil t)
;; Font lock mode
(defun my-make-face (face colour &optional bold)
"Create a face from a colour and optionally make it bold"
(make-face face)
(copy-face 'default face)
(set-face-foreground face colour)
(if bold (make-face-bold face))
)
(if (eq window-system 'x)
(progn
(my-make-face 'blue "blue")
(my-make-face 'red "red")
(my-make-face 'green "dark green")
(setq font-lock-comment-face 'blue)
(setq font-lock-string-face 'bold)
(setq font-lock-type-face 'bold)
(setq font-lock-keyword-face 'bold)
(setq font-lock-function-name-face 'red)
(setq font-lock-doc-string-face 'green)
(add-hook 'find-file-hooks 'font-lock-auto-mode-select)
(setq baud-rate 1000000)
(global-set-key "\C-cmm" 'menu-bar-mode)
(global-set-key "\C-cms" 'scroll-bar-mode)
(global-set-key [backspace] 'backward-delete-char)
; (global-set-key [delete] 'delete-char)
(standard-display-european t)
(load-library "iso-transl")))
;; X11 or PC using direct screen writes
(if window-system
(progn
;; (global-set-key [M-f1] 'hilit-repaint-command)
;; (global-set-key [M-f2] [?\C-u M-f1])
(setq hilit-mode-enable-list
'(not text-mode c-mode c++-mode emacs-lisp-mode lisp-mode
scheme-mode)
hilit-auto-highlight nil
hilit-auto-rehighlight 'visible
hilit-inhibit-hooks nil
hilit-inhibit-rebinding t)
(require 'hilit19)
(require 'paren))
(setq baud-rate 2400) ; For slow serial connections
)
;; TTY type terminal
(if (and (not window-system)
(not (equal system-type 'ms-dos)))
(progn
(if first-time
(progn
(keyboard-translate ?\C-h ?\C-?)
(keyboard-translate ?\C-? ?\C-h)))))
;; Under UNIX
(if (not (equal system-type 'ms-dos))
(progn
(if first-time
(server-start))))
;; Add any face changes here
(add-hook 'term-setup-hook 'my-term-setup-hook)
(defun my-term-setup-hook ()
(if (eq window-system 'pc)
(progn
;; (set-face-background 'default "red")
)))
;; Restore the "desktop" - do this as late as possible
(if first-time
(progn
(desktop-load-default)
(desktop-read)))
;; Indicate that this file has been read at least once
(setq first-time nil)
;; No need to debug anything now
(setq debug-on-error nil)
;; All done
(message "All done, %s%s" (user-login-name) ".")
Extending the Range of Languages Emacs UnderstandsNow, this is all very well if you only want to program in the
languages already catered for in the .emacs file
(C, C++, Perl, Lisp and Scheme), but what happens if a new language
called whizbang comes out, full of exciting
features?The first thing to do is find out if whizbang
comes with any files that tell Emacs about the language. These
usually end in .el, short for Emacs
Lisp. For example, if whizbang is a FreeBSD
port, we can locate these files by doing
$ find /usr/ports/lang/whizbang -name "*.el" -print
and install them by copying them into the Emacs site Lisp directory. On
FreeBSD 2.1.0-RELEASE, this is
/usr/local/share/emacs/site-lisp.So for example, if the output from the find command was
/usr/ports/lang/whizbang/work/misc/whizbang.el
we would do
$ cp /usr/ports/lang/whizbang/work/misc/whizbang.el /usr/local/share/emacs/site-lispNext, we need to decide what extension whizbang source files
have. Let's say for the sake of argument that they all end in
.wiz. We need to add an entry to our
.emacs file to make sure Emacs will be able to
use the information in whizbang.el.Find the auto-mode-alist entry in
.emacs and add a line for whizbang, such
as:
…>
("\\.lsp$" . lisp-mode)
("\\.wiz$" . whizbang-mode)
("\\.scm$" . scheme-mode)
…>
This means that Emacs will automatically go into
whizbang-mode when you edit a file ending in
.wiz.Just below this, you'll find the
font-lock-auto-mode-list entry. Add
whizbang-mode to it like so:
;; Auto font lock mode
(defvar font-lock-auto-mode-list
(list 'c-mode 'c++-mode 'c++-c-mode 'emacs-lisp-mode 'whizbang-mode 'lisp-mode 'perl-mode 'scheme-mode)
"List of modes to always start in font-lock-mode")
This means that Emacs will always enable
font-lock-mode (ie syntax highlighting) when
editing a .wiz file.And that's all that's needed. If there's anything else you want
done automatically when you open up a .wiz file,
you can add a whizbang-mode hook (see
my-scheme-mode-hook for a simple example that
adds auto-indent).Further ReadingBrian Harvey and Matthew Wright
Simply Scheme
MIT 1994.
ISBN 0-262-08226-8Randall Schwartz
Learning Perl
O'Reilly 1993
ISBN 1-56592-042-2Patrick Henry Winston and Berthold Klaus Paul Horn
Lisp (3rd Edition)
Addison-Wesley 1989
ISBN 0-201-08319-1Brian W. Kernighan and Rob Pike
The Unix Programming Environment
Prentice-Hall 1984
ISBN 0-13-937681-XBrian W. Kernighan and Dennis M. Ritchie
The C Programming Language (2nd Edition)
Prentice-Hall 1988
ISBN 0-13-110362-8Bjarne Stroustrup
The C++ Programming Language
Addison-Wesley 1991
ISBN 0-201-53992-6W. Richard Stevens
Advanced Programming in the Unix Environment
Addison-Wesley 1992
ISBN 0-201-56317-7W. Richard Stevens
Unix Network Programming
Prentice-Hall 1990
ISBN 0-13-949876-1
diff --git a/en_US.ISO8859-1/books/fdp-primer/book.sgml b/en_US.ISO8859-1/books/fdp-primer/book.sgml
index c1e35d9953..57c3e91fa2 100644
--- a/en_US.ISO8859-1/books/fdp-primer/book.sgml
+++ b/en_US.ISO8859-1/books/fdp-primer/book.sgml
@@ -1,281 +1,281 @@
%man;
%chapters;
]>
FreeBSD Documentation Project Primer for New ContributorsNikClayton
- nik@FreeBSD.ORG
+ nik@FreeBSD.org19981999
- Nik Clayton
+ Nik Clayton
- $Date: 1999-07-14 22:31:28 $
+ $Date: 1999-08-29 16:08:38 $
- $Id: book.sgml,v 1.5 1999-07-14 22:31:28 nik Exp $
+ $Id: book.sgml,v 1.6 1999-08-29 16:08:38 jhb Exp $Redistribution and use in source (SGML DocBook) and 'compiled'
forms (SGML, HTML, PDF, PostScript, RTF and so forth) with or without
modification, are permitted provided that the following conditions are
met:Redistributions of source code (SGML DocBook) must retain the
above copyright notice, this list of conditions and the following
disclaimer as the first lines of this file unmodified.Redistributions in compiled form (transformed to other DTDs,
converted to PDF, PostScript, RTF and other formats) must
reproduce the above copyright notice, this list of conditions and
the following disclaimer in the documentation and/or other
materials provided with the distribution.THIS DOCUMENTATION IS PROVIDED BY NIK CLAYTON "AS IS" AND ANY
EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NIK CLAYTON BE LIABLE FOR
ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
DOCUMENTATION, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
DAMAGE.Thank you for becoming a part of the FreeBSD Documentation
Project. Your contribution is extremely valuable.This primer covers everything you will need to know in order
to start contributing to the FreeBSD Documentation Project, from
the tools and software you will be using (both mandatory and
recommended) to the philosophy behind the Documentation
Project.This document is a work in progress, and is not complete. Sections
that are known to be incomplete are indicated with a
* in their name.PrefaceShell PromptsThe following table shows the default system prompt and superuser
prompt. The examples will use this prompt to indicate which user you
should be running the example as.UserPromptNormal user&prompt.user;root&prompt.root;Typographic ConventionsThe following table describes the typographic conventions used in
this book.MeaningExamplesThe name of commands, files, and directories. On screen
computer output.Edit your .login
file.Use ls -a to list all
files.You have mail.What you type, when contrasted with on-screen computer
output.&prompt.user; su
Password:Manual page references.Use su1 to change user names.User and group namesOnly root can do this.EmphasisYou must do this.Command line variables; replace with the real name or
variable.To delete a file, type rm filenameEnvironment variables$HOME is your home directory.Notes, warnings, and examplesWithin the text appear notes, warnings, and examples.Notes are represented like this, and contain information that
you should take note of, as it may affect what you do.Warnings are represented like this, and contain information
warning you about possible damage if you do not follow the
instructions. This damage may be physical, to your hardware or to
you, or it may be non-physical, such as the inadvertant deletion of
important files.A sample exampleExamples are represented like this, and typically contain
examples you should walk through, or show you what the results of a
particular action should be.AcknowledgmentsMy thanks to Sue Blake, Patrick Durusau, Jon Hamilton, Peter
Flynn, and Christopher Maden, who took the time to read early drafts
of this document and offer many valuable comments and
criticisms.
&chap.overview;
&chap.tools;
&chap.sgml-primer;
&chap.sgml-markup;
&chap.stylesheets;
&chap.the-faq;
&chap.the-handbook;
&chap.the-website;
&chap.translations;
&chap.writing-style;
&chap.psgml-mode;
&chap.see-also;
diff --git a/en_US.ISO8859-1/books/fdp-primer/overview/chapter.sgml b/en_US.ISO8859-1/books/fdp-primer/overview/chapter.sgml
index 1322c34a6f..4d7befc2b9 100644
--- a/en_US.ISO8859-1/books/fdp-primer/overview/chapter.sgml
+++ b/en_US.ISO8859-1/books/fdp-primer/overview/chapter.sgml
@@ -1,179 +1,179 @@
OverviewWelcome to the FreeBSD Documentation Project. Good quality
documentation is very important to the success of FreeBSD, and the
FreeBSD Documentation Project (FDP) is how a lot of that documentation
is produced. Your contributions are very valuable.This document's main purpose is to clearly explain how
the FDP is organised, how to write and submit
documentation to the FDP, and how to
effectively use the tools available to you when writing
documentation.Every one is welcome to join the FDP. There is no minimum
membership requirements, no quota of documentation you need to
produce per month. All you need to do is subscribe to the
- freebsd-doc@freebsd.org mailing list.
+ freebsd-doc@FreeBSD.org mailing list.
After you have finished reading this document you should:Know which documentation is maintained by the FDP.Be able to read and understand the SGML source code for the
documentation maintained by the FDP.Be able to make changes to the documentation.Be able to submit your changes back for review and eventual
inclusion in the FreeBSD documentation.The FreeBSD Documentation SetThe FDP is responsible for four categories of FreeBSD
documentation.Manual pagesThe English language system manual pages are not written by
the FDP, as they are part of the base system. However, the FDP can
(and has) re-worded parts of existing manual pages to make them
clearer, or to correct inaccuracies.The translation teams are responsible for translating the
system manual pages in to different languages. These translations
are kept within the FDP.FAQThe FAQ aims to address (in short question and answer format)
questions that are asked, or should be asked, on the various
mailing lists and newsgroups devoted to FreeBSD. The format does
not permit long and comprehensive answers.HandbookThe Handbook aims to be the comprehensive on-line resource and
reference for FreeBSD users.Web siteThis is the main FreeBSD presence on the World Wide Web,
visible at http://www.freebsd.org/
+ url="http://www.FreeBSD.org/">http://www.FreeBSD.org/
and many mirrors around the world. The web site is many people's
first exposure to FreeBSD.These four groups of documentation are all available in the
FreeBSD CVS tree. This means that the logs and changes to these
files are visible to anyone, and anyone can use a program such as
CVSup or
CTM to keep their own local copies of
this documentation.In addition, many people have written tutorials or other web
sites relating to FreeBSD. Some of these are stored in the CVS
repository as well (where the author has agreed to this). In
other cases the author has decided to keep their documentation
separate from the main FreeBSD repository. The FDP endeavours to
provide links to as much of this documentation as
possible.Before you startThis document assumes that you already know:How to maintain an up-to-date local copy of the FreeBSD
documentation. Either by maintaining a local copy of the
FreeBSD CVS repository (using CVS
and either CVSup or
CTM) or by using
CVSup to download just a
checked-out copy.How to download and install new software using either the
FreeBSD Ports system or &man.pkg.add.1;.
diff --git a/en_US.ISO8859-1/books/fdp-primer/see-also/chapter.sgml b/en_US.ISO8859-1/books/fdp-primer/see-also/chapter.sgml
index 2ede72da78..40f6ff58f4 100644
--- a/en_US.ISO8859-1/books/fdp-primer/see-also/chapter.sgml
+++ b/en_US.ISO8859-1/books/fdp-primer/see-also/chapter.sgml
@@ -1,121 +1,121 @@
See AlsoThis document is deliberately not an exhaustive discussion of SGML,
the DTDs listed, and the FreeBSD Documentation Project. For more
information about these, you are encouraged to see the following web
sites.The FreeBSD Documentation Project
- The FreeBSD
+ The FreeBSD
Documentation Project web pages
- The FreeBSD Handbook
+ The FreeBSD HandbookSGMLThe SGML/XML web
page, a comprehensive SGML resourceGentle introduction to SGMLHTMLThe World Wide Web
organisationThe HTML 4.0
specificationDocBookThe Davenport
Group, maintainers of the DocBook DTDThe Linux Documentation ProjectThe Linux Documentation
Project web pages
diff --git a/en_US.ISO8859-1/books/fdp-primer/sgml-markup/chapter.sgml b/en_US.ISO8859-1/books/fdp-primer/sgml-markup/chapter.sgml
index 8a8c216754..dde7e4b3e1 100644
--- a/en_US.ISO8859-1/books/fdp-primer/sgml-markup/chapter.sgml
+++ b/en_US.ISO8859-1/books/fdp-primer/sgml-markup/chapter.sgml
@@ -1,2213 +1,2213 @@
SGML MarkupThis chapter describes the three markup languages you will encounter
when you contribute to the FreeBSD documentation project. Each section
describes the markup language, and details the markup that you are likely
to want to use, or that is already in use.These markup languages contain a large number of elements, and it can
be confusing sometimes to know which element to use for a particular
situation. This section goes through the elements you are most likely to
need, and gives examples of how you would use them.This is not an exhaustive list of elements, since
that would just reiterate the documentation for each language. The aim of
this section is to list those elements more likely to be useful to you.
If you have a question about how best to markup a particular piece of
content, please post it to the FreeBSD Documentation Project mailing list
- freebsd-doc@freebsd.org.
+ freebsd-doc@FreeBSD.org.
Inline vs. blockIn the remainder of this document, when describing elements,
inline means that the element can occur within a
block element, and does not cause a line break. A
block element, by comparison, will cause a line
break (and other processing) when it is encountered.HTMLHTML, the HyperText Markup Language, is the markup language of
choice on the World Wide Web. More information can be found at
<URL:http://www.w3.org/>.HTML is used to markup pages on the FreeBSD web site. It should not
(generally) be used to mark up other documention, since DocBook offers a
far richer set of elements to choose from. Consequently, you will
normally only encounter HTML pages if you are writing for the web
site.HTML has gone through a number of versions, 1, 2, 3.0, 3.2, and the
latest, 4.0 (available in both strict and
loose variants).The HTML DTDs are available from the ports collection in the
textproc/html port. They are automatically
installed as part of the textproc/docproj
port.Formal Public Identifier (FPI)There are a number of HTML FPIs, depending upon the version (also
known as the level) of HTML that you want to declare your document to
be compliant with.The majority of HTML documents on the FreeBSD web site comply with
the loose version of HTML 4.0.
PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"Sectional elementsAn HTML document is normally split in to two sections. The first
section, called the head, contains
meta-information about the document, such as its title, the name of
the author, the parent document, and so on. The second section, the
body, contains the content that will be displayed
to the user.These sections are indicated with head and
body elements respectively. These elements are
contained within the top-level html element.Normal HTML document structure
<html>
<head>
<title>The document's title</title>
</head>
<body>
…
</body>
</html>Block elementsHeadingsHTML allows you to denote headings in your document, at up to
six different levels.The largest and most prominent heading is h1,
then h2, continuing down to
h6.The element's content is the text of the heading.h1, h2, etc.Use:
First section
This is the heading for the first section
This is the heading for the first sub-section
This is the heading for the second section
]]>Generally, an HTML page should have one first level heading
(h1). This can contain many second level
headings (h2), which can in turn contain many
third level headings. Each
hn element should have
the same element, but one further up the hierarchy, preceeding it.
Leaving gaps in the numbering is to be avoided.Bad ordering of
hn elementsUse:
First section
Sub-section
]]>ParagraphsHTML supports a single paragraph element,
p.pUse:
This is a paragraph. It can contain just about any
other element.
]]>
Block quotationsA block quotation is an extended quotation from another document
that should not appear within the current paragraph.blockquoteUse:
A small excerpt from the US Constitution;
We the People of the United States, in Order to form
a more perfect Union, establish Justice, insure domestic
Tranquility, provide for the common defence, promote the general
Welfare, and secure the Blessings of Liberty to ourselves and our
Posterity, do ordain and establish this Constitution for the
United States of America.
]]>ListsYou can present the user with three types of lists, ordered,
unordered, and definition.Typically, each entry in an ordered list will be numbered, while
each entry in an unordered list will be proceeded by a bullet point.
Definition lists are composed of two sections for each entry. The
first section is the term being defined, and the second section is
the definition of the term.Ordered lists are indicated by the ol
element, unordered lists by the ul element, and
definition lists by the dl element.Ordered and unordered lists contain listitems, indicated by the
li element. A listitem can contain textual
content, or it may be further wrapped in one or more
p elements.Definition lists contain definition terms
(dt) and definition descriptions
(dd). A definition term can only contain inline
elements. A definition description can contain other block
elements.ul and olUse:
An unordered list. Listitems will probably be
preceeded by bullets.
First item
Second item
Third item
An ordered list, with list items consisting of multiple
paragraphs. Each item (note: not each paragraph) will be
numbered.
This is the first item. It only has one paragraph.
This is the first paragraph of the second item.
This is the second paragraph of the second item.
This is the first and only paragraph of the third
item.
]]>Definition lists with dlUse:
Term 1
Paragraph 1 of definition 1.
Paragraph 2 of definition 1.
Term 2
Paragraph 1 of definition 2.
Term 3
Paragraph 1 of definition 3. Note that the <p>
element is not required in the single paragraph case.
]]>Pre-formatted textYou can indicate that text should be shown to the user exactly
as it is in the file. Typically, this means that the text is shown
in a fixed font, multiple spaces are not merged in to one, and line
breaks in the text are significant.In order to do this, wrap the content in the
pre element.preYou could use pre to mark up an e-mail
message;
- From: nik@freebsd.org
- To: freebsd-doc@freebsd.org
+ From: nik@FreeBSD.org
+ To: freebsd-doc@FreeBSD.org
Subject: New documentation available
There's a new copy of my primer for contributers to the FreeBSD
Documentation Project available at
-
+
Comments appreciated.
N
]]>TablesMost text-mode browsers (such as Lynx) do not render tables
particularly effectively. If you are relying on the tabular
display of your content, you should consider using alternative
markup to prevent confusion.Mark up tabular information using the table
element. A table consists of one or more table rows
(tr), each containing one or more cells of table
data (td). Each cell can contain other block
elements, such as paragraphs or lists. It can also contain another
table (this nesting can repeat indefinitely). If the cell only
contains one paragraph then you do not need to include the
p element.Simple use of tableUse:
This is a simple 2x2 table.
Top left cell
Top right cell
Bottom left cell
Bottom right cell
]]>A cell can span multiple rows and columns. To indicate this,
add the rowspan and/or colspan
attributes, with values indicating the number of rows of columns
that should be spanned.Using rowspanUse:
One tall thin cell on the left, two short cells next to
it on the right.
Long and thin
Top cell
Bottom cell
]]>Using colspanUse:
One long cell on top, two short cells below it.
Top cell
Bottom left cell
Bottom right cell
]]>Using rowspan and
colspan togetherUse:
On a 3x3 grid, the top left block is a 2x2 set of
cells merged in to one. The other cells are normal.
Top left large cell
Top right cell
Middle right cell
Bottom left cell
Bottom middle cell
Bottom right cell
]]>In-line elementsEmphasising informationYou have two levels of emphasis available in HTML,
em and strong.
em is for a normal level of emphasis and
strong indicates stronger emphasis.Typically, em is rendered in italic and
strong is rendered in bold. This is not always
the case however, and you should not rely on it.em and strongUse:This has been emphasised, while
this has been strongly emphasised.]]>Bold and italicsBecause HTML includes presentational markup, you can also
indicate that particular content should be rendered in bold or
italic. The elements are b and
i respectively.b and iThis is in bold, while this is
in italics.]]>Indicating fixed pitch textIf you have content that should be rendered in a fixed pitch
(typewriter) typeface, use tt (for
“teletype”).ttUse:
This document was originally written by
Nik Clayton, who can be reached by e-mail as
- nik@freebsd.org.]]>
+ nik@FreeBSD.org.]]>
Content sizeYou can indicate that content should be shown in a larger or
smaller font. There are three ways of doing this.Use big and small
around the content you wish to change size. These tags can be
nested, so <big><big>This is much
bigger</big></big> is possible.Use font with the size
attribute set to +1 or -1
respectively. This has the same effect as using
big or small. However,
the use of this approach is deprecated.Use font with the size
attribute set to a number between 1 and 7. The default font size
is 3. This approach is deprecated.big, small, and
fontThe following fragments all do the same thing.
This text is slightly smaller. But
this text is slightly bigger.
This text is slightly smaller. But
this text is slightly bigger
This text is slightly smaller. But
this text is slightly bigger.
]]>
LinksLinks are also in-line elements.Linking to other documents on the WWWIn order to include a link to another document on the WWW you
must know the URL of the document you want to link to.The link is indicated with a, and the
href attribute contains the URL of the target
document. The content of the element becomes the link, and is
normally indicated to the user in some way (underlining, change of
colour, different mouse cursor when over the link, and so
on).Using <a href="...">Use:
More information is available at the
- FreeBSD web site.]]>
+ FreeBSD web site.]]>
These links will take the user to the top of the chosen
document.Linking to other parts of documentsLinking to a point within another document (or within the same
document) requires that the document author include anchors that you
can link to.Anchors are indicated with a and the
name attribute instead of
href.Using <a name="...">Use:This paragraph can be referenced
in other links with the name para1.]]>To link to a named part of a document, write a normal link to
that document, but include the name of the anchor after a
# symbol.Linking to a named part of another documentAssume that the para1 example resides in a
document called foo.html.
More information can be found in the
first paragraph of
foo.html.]]>If you are linking to a named anchor within the same document
then you can omit the document's URL, and just include the name of
the anchor (with the preceeding #).Linking to a named part of another documentAssume that the para1 example resides in
this document
More information can be found in the
first paragraph of this
document.]]>DocBookDocBook was designed by the Davenport Group to be
a DTD for writing technical documentation. As such, and unlike LinuxDoc
and HTML, DocBook is very heavily orientated towards markup that
describes what something is, rather than describing
how it should be presented.formal vs. informalSome elements may exist in two forms, formal
and informal. Typically, the formal version of
the element will consist of a title followed by the information
version of the element. The informal version will not have a
title.The DocBook DTD is available from the ports collection in the
textproc/docbook port. It is automatically
installed as part of the textproc/docproj
port.FreeBSD extensionsThe FreeBSD Documentation Project has extended the DocBook DTD by
adding some new elements. These elements serve to make some of the
markup more precise.Where a FreeBSD specific element is listed below it is clearly
marked.Throughout the rest of this document, the term
“DocBook” is used to mean the FreeBSD extended DocBook
DTD.There is nothing about these extensions that is FreeBSD
specific, it was just felt that they were useful enhancements for
this particular project. Should anyone from any of the other *nix
camps (NetBSD, OpenBSD, Linux, …) be interested in
collaborating on a standard DocBook extension set, please get in
- touch with Nik Clayton nik@freebsd.org.
+ touch with Nik Clayton nik@FreeBSD.org.
Formal Public Identifier (FPI)In compliance with the DocBook guidelines for writing FPIs for
DocBook customisations, the FPI for the FreeBSD extended DocBook DTD
is;
PUBLIC "-//FreeBSD//DTD DocBook V3.1-Based Extension//EN"Sectional elementsDocBook contains a number of elements for marking up the structure
of a book.Generally, the top level (first) element will be
book.A book is organised into chapters. This is a
mandatory requirement. There may be parts between
the book and the chapter to provide another layer of organisation.
The Handbook is arranged in this way.A chapter may (or may not) contain one or more sections. These
are indicated with the sect1 element. If a section
contains another section then use the sect2
element, and so on, up to sect5.Chapters and sections contain the remainder of the content.Starting a bookThe content of the book is contained within the
book element. As well as containing structural
markup, this element can contain elements that include additional
information about the book. This is either meta-information, used
for reference purposes, or additional content used to produce a
title page.This additional information should be contained within
bookinfo.Boilerplate book with
bookinfo
<book>
<bookinfo>
<title>Your title here</title>
<author>
<firstname>Your first name</firstname>
<surname>Your surname</surname>
<affiliation>
<address><email>Your e-mail address</email></address>
</affiliation>
</author>
<copyright>
<year>1998</year>
<holder role="mailto:your e-mail address">Your name</holder>
</copyright>
<pubdate role="rcs">$Date$</pubdate>
<releaseinfo>$Id$</releaseinfo>
<abstract>
<para>Include an abstract of the book's contents here.</para>
</abstract>
</bookinfo>
…
</book>Indicating chaptersUse chapter to mark up your chapters. Each
chapter has a mandatory title.A simple chapterThe chapter's title
...
]]>A chapter can not be empty, it must contain elements in addition
to title. If you need to include an empty
chapter then just use an empty paragraph.Empty chaptersThis is an empty chapter
]]>Sections below chaptersChapters can be broken up into sections, subsections, and so
on. Use the sectn
element. The n indicates the section
number, which identifies the section level.The first sectn is
sect1. You can have one or more of these in a
chapter. They can contain one or more sect2
elements, and so on, down to sect5.Sections in chaptersA sample chapterSome text in the chapter.First section (1.1)
...
Second section (1.2)First sub-section (1.2.1)First sub-sub-section (1.2.1.1)
...
Second sub-section (1.2.2)
...
]]>Subdividing using partsYou can introduce another layer of organisation between
book and chapter with one or
more parts.IntroductionOverview
...
What is FreeBSD?
...
History
...
]]>Block elementsParagraphsDocBook supports three types of paragraphs;
formalpara, para, and
simpara.Most of the time you will only need to use
para. formalpara includes a
title element, and simpara
disallows some elements from within para. Stick
with para.paraUse:
This is a paragraph. It can contain just about any
other element. ]]>Appearance:This is a paragraph. It can contain just about any other
element.Block quotationsA block quotation is an extended quotation from another document
that should not appear within the current paragraph. You will
probably only need it infrequently.Blockquotes can optionally contain a title and an attribution
(or they can be left untitled and unattributed).blockquoteUse:
A small excerpt from the US Constitution;
Preamble to the Constitution of the United States
Copied from a web site somewhereWe the People of the United States, in Order to form a more perfect
Union, establish Justice, insure domestic Tranquility, provide for the
common defence, promote the general Welfare, and secure the Blessings
of Liberty to ourselves and our Posterity, do ordain and establish this
Constitution for the United States of America.
]]>Appearance:
Preamble to the Constitution of the United StatesCopied from a web site somewhereWe the People of the United States, in Order to form a more
perfect Union, establish Justice, insure domestic Tranquility,
provide for the common defence, promote the general Welfare, and
secure the Blessings of Liberty to ourselves and our Posterity,
do ordain and establish this Constitution for the United States
of America.
Tips, notes, warnings, cautions, important information and
sidebars.You may need to include extra information separate from the
main body of the text. Typically this is “meta”
information that the user should be aware of.Depending on the nature of the information, one of
tip, note,
warning, caution, and
important should be used. Alternatively, if the
information is related to the main text but is not one of the above,
use sidebar.The circumstances in which to choose one of these elements over
another is unclear. The DocBook documentation suggests;A Note is for information that should be heeded by all
readers.An Important element is a variation on Note.A Caution is for information regarding possible data loss
or software damage.A Warning is for information regarding possible hardware
damage or injury to life or limb.warningUse:Installing FreeBSD may make you want to delete Windows from your
harddisk.
]]>Installing FreeBSD may make you want to delete Windows from
your harddisk.Lists and proceduresYou will often need to list pieces of information to the user,
or present them with a number of steps that must be carried out in
order to accomplish a particular goal.In order to do this, use itemizedlist,
orderedlist, or
procedureThere are other types of
list element in DocBook, but we're not concerned with those at
the moment.itemizedlist and
orderedlist are similar to the counterparts in
HTML, ul and ol. Each one
consists of one or more listitem elements, and
each listitem contains one or more block
elements. The listitem elements are analagous to
HTMLs li tags. However, unlike HTML they are
required.procedure is slightly different. It consists
of steps, which may in turn consists of more
steps or substeps. Each
step contains block elements.itemizedlist,
orderedlist, and
procedureUse:This is the first itemized item.This is the second itemized item.This is the first ordered item.This is the second ordered item.]]>Appearance:This is the first itemized item.This is the second itemized item.This is the first ordered item.This is the second ordered item.Showing file samplesIf you want to show a fragment of a file (or perhaps a complete
file) to the user, wrap it in the programlisting
element.White space and line breaks within
programlistingare
significant. In particular, this means that the closing tag should
appear on the same line as the last line of the output, otherwise a
spurious blank line will be included.programlistingUse:
When you have finished, your program should look like
this;
#include <stdio.h>
int
main(void)
{
printf("hello, world\n");
}]]>Notice how the angle brackets in the
#include line need to be referenced by their
entities instead of being included literally.Appearance:When you have finished, your program should look like
this;
#include <stdio.h>
int
main(void)
{
printf("hello, world\n");
}There is a mechanism within DocBook for referring to sections
of a previously occuring programlisting, called
callouts (see programlistingco for more
information). I don't fully understand (i.e., have never used)
this feature, so can't document it here. For the mean time, you
can include line numbers within the content, and then refer to
them later on in your description. That will change, as soon as I
find the time to understand and document callouts.TablesUnlike HTML, you do not need to use tables for layout purposes,
as the stylesheet handles those issues for you. Instead, just use
tables for marking up tabular data.In general terms (and see the DocBook documentation for more
detail) a table (which can be either formal or informal) consists of
a table element. This contains at least one
tgroup element, which specifies (as an attribute)
the number of columns in this table group. Within the tablegroup
you can then have one thead element, which
contains elements for the table headings (column headings), and one
tbody which contains the body of the
table.Both tgroup and thead
contain row elements, which in turn contain
entry elements. Each entry
element specifies one cell in the table.informaltableUse:This is column head 1This is column head 2Row 1, column 1Row 1, column 2Row 2, column 1Row 2, column 2
]]>Appearance:This is column head 1This is column head 2Row 1, column 1Row 1, column 2Row 2, column 1Row 2, column 2If you don't want a border around the table the
frame attribute can be added to the
informaltable element with a value of
none (i.e., <informaltable
frame="none">).Tables where frame="none"Appearance:This is column head 1This is column head 2Row 1, column 1Row 1, column 2Row 2, column 1Row 2, column 2Examples for the user to followA lot of the time you need to show examples for the user to
follow. Typically, these will consist of dialogs with the computer;
the user types in a command, the user gets a response back, they
type in another command, and so on.A number of distinct elements and entities come in to play
here.informalexampleMost of the time these examples will occur
“mid-flow” as it were, and you won't need to put a
title on them. So, most of the time, the outermost element
will be informalexample. For those times
when you do need to include a title on the example, use
example.screenEverything the user sees in this example will be on the
computer screen, so the next element is
screen.Within screen, white space is
significant.prompt,
&prompt.root; and
&prompt.user;Some of the things the user will be seeing on the screen
are prompts from the computer (either from the OS, command
shell, or application. These should be marked up using
prompt.As a special case, the two shell prompts for the normal
user and the root user have been provided as entities. Every
time you want to indicate the user is at a shell prompt, use
one of &prompt.root; and
&prompt.user; as necessary. They do
not need to be inside prompt.&prompt.root; and
&prompt.user; are FreeBSD
extensions to DocBook, and are not part of the original
DTD.userinputWhen displaying text that the user should type in, wrap it
in userinput tags. It will probably be
displayed differently to the user.informalexample,
screen, prompt, and
userinputUse:&prompt.user; ls -1
foo1
foo2
foo3
&prompt.user; ls -1 | grep foo2
foo2
&prompt.user; suPassword:
&prompt.root; cat foo2
This is the file called 'foo2'
]]>Appearance:&prompt.user; ls -1
foo1
foo2
foo3
&prompt.user; ls -1 | grep foo2
foo2
&prompt.user; suPassword:
&prompt.root; cat foo2
This is the file called 'foo2'Even though we are displaying the contents of the file
foo2, it is not marked
up as programlisting. Reserve
programlisting for showing fragments of files
outside the context of user actions.In-line elementsEmphasising informationWhen you want to emphasise a particular word or phrase, use
emphasis. This may be presented as italic, or
bold, or might be spoken differently with a text-to-speech
system.There is no way to change the presentation of the emphasis
within your document, no equivalent of HTML's b
and i. If the information you are presenting is
important then consider presenting it in
important rather than
emphasis.emphasisUse:
FreeBSD is without doubt the
premiere Unix like operating system for the Intel architecture.]]>Appearance:FreeBSD is without doubt the premiere Unix
like operating system for the Intel architecture.Applications, commands, options, and citesYou will frequently want to refer to both applications and
commands when writing for the Handbook. The distinction between
them is simple; an application is the name for a suite (or possibly
just 1) of programs that fulfil a particular task. A command is the
name of a program that the user can run.In addition, you will occasionally need to list one or more of
the options that a command might take.Finally, you will often want to list a command with it's manual
section number, in the “command(number)” format so
common in Unix manuals.Mark up application names with
application.When you want to list a command with it's manual section number
(which should be most of the time) the DocBook element is
citerefentry. This will contain a further two
elements, refentrytitle and
manvolnum. The content of
refentrytitle is the name of the command, and the
content of manvolnum is the manual page
section.This can be cumbersome to write, and so a series of general entities
have been created to make this easier. Each entity takes the form
&man.manual-page.manual-section;.The file that contains these entities is in
doc/share/sgml/man-refs.ent, and can be
referred to using this FPI;PUBLIC "-//FreeBSD//ENTITIES DocBook Manual Page Entities//EN"Therefore, the introduction to your documentation will probably
look like this;<!DOCTYPE book PUBLIC "-//FreeBSD//DTD DocBook V3.1-Based Extension//EN" [
<!ENTITY % man PUBLIC "-//FreeBSD//ENTITIES DocBook Manual Page Entities//EN">
%man;
…
]]>Use command when you want to include a
command name “in-line” but present it as something the
user should type in.Use option to mark up a command's
options.This can be confusing, and sometimes the choice is not always
clear. Hopefully this example makes it clearer.Applications, commands, and options.Use:Sendmail is the most
widely used Unix mail application.
Sendmail includes the
sendmail8, &man.sendmail.8;, and &man.newaliases.8;
programs.One of the command line parameters to sendmail8, , will display the current
status of messages in the mail queue. Check this on the command
line by running sendmail -bp.]]>Appearance:Sendmail is the most widely used
Unix mail application.Sendmail includes the
sendmail8, mailq8, and newaliases8 programs.One of the command line parameters to sendmail8, , will display the current
status of messages in the mail queue. Check this on the command
line by running sendmail -bp.Notice how the
&man.command.section; notation is easier to follow.Files, directories, extensionsWhenever you wish to refer to the name of a file, a directory,
or a file extension, use filename.filenameUse:
The SGML source for the Handbook in English can be
found in /usr/doc/en/handbook/. The first
file is called handbook.sgml in that
directory. You should also see a Makefile
and a number of files with a .ent
extension.]]>Appearance:The SGML source for the Handbook in English can be found in
/usr/doc/en/handbook/. The first file is
called handbook.sgml in that directory. You
should also see a Makefile and a number of
files with a .ent extension.DevicesFreeBSD extensionThese elements are part of the FreeBSD extension to DocBook,
and do not exist in the original DocBook DTD.When referring to devices you have two choices. You can either
refer to the device as it appears in /dev, or
you can use the name of the device as it appears in the kernel. For
this latter course, use devicename.Sometimes you will not have a choice. Some devices, such as
networking cards, do not have entries in /dev,
or the entries are markedly different from those entries.devicenameUse:sio is used for serial
communication in FreeBSD. sio manifests
through a number of entries in /dev, including
/dev/ttyd0 and /dev/cuaa0.
By contrast, the networking devices, such as
ed0 do not appear in /dev.
In MS-DOS, the first floppy drive is referred to as
a:. In FreeBSD it is
/dev/fd0.]]>Appearance:sio is used for serial communication
in FreeBSD. sio manifests through a
number of entries in /dev, including
/dev/ttyd0 and
/dev/cuaa0.By contrast, the networking devices, such as
ed0 do not appear in
/dev.In MS-DOS, the first floppy drive is referred to as
a:. In FreeBSD it is
/dev/fd0.Hosts, domains, IP addresses, and so forthFreeBSD extensionThese elements are part of the FreeBSD extension to DocBook,
and do not exist in the original DocBook DTD.You can markup identification information for networked
computers (hosts) in several ways, depending on the nature of the
information. All of them use hostid as the
element, with the role attribute selecting the
type of the marked up information.No role attribute, or
role="hostname"With no role attribute (i.e.,
hostid...hostid the
marked up information is the simple hostname, such as
freefall or wcarchive.
You can explicitly specify this with
role="hostname".role="domainname"The text is a domain name, such as
- freebsd.org or
+ FreeBSD.org or
ngo.org.uk. There is no hostname
component.role="fqdn"The text is a Fully Qualified Domain Name, with both
hostname and domain name parts.role="ipaddr"The text is an IP address, probably expressed as a dotted
quad.role="netmask"The text is a network mask, which might be expressed as a
dotted quad, a hexadecimal string, or as a
/ followed by a number.role="mac"The text is an ethernet MAC address, expressed as a series
of 2 digit hexadecimal numbers seperated by colons.hostid and rolesUse:
The local machine can always be referred to by the
name localhost, which will have the IP address
127.0.0.1.
-The freebsd.org domain
+The FreeBSD.org domain
contains a number of different hosts, including
- freefall.freebsd.org and
- bento.freebsd.org.
+ freefall.FreeBSD.org and
+ bento.FreeBSD.org.When adding an IP alias to an interface (using
ifconfig) always use a
netmask of 255.255.255.255
(which can also be expressed as 0xffffffff.The MAC address uniquely identifies every network card in
in existence. A typical MAC address looks like 08:00:20:87:ef:d0.]]>Appearance:The local machine can always be referred to by the name
localhost, which will have the IP address 127.0.0.1.
- The freebsd.org domain
+ The FreeBSD.org domain
contains a number of different hosts, including freefall.freebsd.org and bento.freebsd.org.
+ role="fqdn">freefall.FreeBSD.org and bento.FreeBSD.org.When adding an IP alias to an interface (using
ifconfig) always use a
netmask of 255.255.255.255 (which
can also be expressed as 0xffffffff.The MAC address uniquely identifies every network card in
existence. A typical MAC address looks like 08:00:20:87:ef:d0.UsernamesFreeBSD extensionThese elements are part of the FreeBSD extension to DocBook,
and do not exist in the original DocBook DTD.When you need to refer to a specific username, such as
root or bin, use
username.usernameUse:
To carry out most system administration functions you
will need to be root.]]>Appearance:To carry out most system administration functions you will
need to be root.Describing MakefilesFreeBSD extensionThese elements are part of the FreeBSD extension to DocBook,
and do not exist in the original DocBook DTD.Two elements exist to describe parts of
Makefiles, maketarget and
makevar.maketarget identifies a build target exported
by a Makefile that can be given as a parameter
to make. makevar identifies a
variable that can be set (in the environment, on the
make command line, or within the
Makefile) to influence the process.maketarget and
makevarUse:
Two common targets in a Makefile
are all and clean.
Typically, invoking all will rebuild the
application, and invoking clean will remove
the temporary files (.o for example) created by
the build process.clean may be controlled by a number of
variables, including CLOBBER and
RECURSE.]]>Appearance:Two common targets in a Makefile are
all and
clean.Typically, invoking all will rebuild
the application, and invoking clean will
remove the temporary files (.o for example)
created by the build process.clean may be controlled by a number
of variables, including CLOBBER and
RECURSE.Literal textYou will often need to include “literal” text in the
Handbook. This is text that is excerpted from another file, or
which should be copied from the Handbook into another file
verbatim.Some of the time, programlisting will be
sufficient to denote this text. programlisting
is not always appropriate, particularly when you want to include a
portion of a file “in-line” with the rest of the
paragraph.On these occasions, use literal.literalUse:
The maxusers 10 line in the kernel
configuration file determines the size of many system tables, and is
a rough guide to how many simultaneous logins the system will
support.]]>Appearance:The maxusers 10 line in the kernel
configuration file determines the size of many system tables, and
is a rough guide to how many simultaneous logins the system will
support.Showing items that the user must fill
inThere will often be times when you want to show the user what to
do, or refer to a file, or command line, or similar, where the user
can not simply copy the examples that you provide, but must instead
include some information themselves.replaceable is designed for this eventuality.
Use it inside other elements to indicate parts
of that element's content that the user must replace.replaceableUse:&prompt.user; man command
]]>Appearance:&prompt.user; man commandreplaceable can be used in many different
elements, including literal. This example also
shows that replaceable should only be wrapped
around the content that the user is meant to
provide. The other content should be left alone.Use:
The maxusers n
line in the kernel configuration file determines the size of many system
tables, and is a rough guide to how many simultaneous logins the system will
support.
For a desktop workstation, 32 is a good value
for n.]]>Appearance:The maxusers n
line in the kernel configuration file determines the size of many
system tables, and is a rough guide to how many simultaneous
logins the system will support.For a desktop workstation, 32 is a good
value for n.LinksLinks are also in-line elements.Linking to other parts of the same documentLinking within the same document requires you to to specify
where you are linking from (i.e., the text the user will click, or
otherwise indicate, as the source of the link) and where you are
linking to (the link's destination).Each element within DocBook has an attribute called
id. You can place text in this attribute to
uniquely name the element it is attached to.This value will be used when you specify the link
source.Normally, you will only be linking to chapters or sections, so
you would add the id attribute to these
elements.id on chapters and sectionsIntroductionThis is the introduction. It contains a subsection,
which is identified as well.Sub-sect 1This is the subsection.
]]>Obviously, you should use more descriptive values. The values
must be unique within the document (i.e., not just the file, but the
document the file might be included in as well). Notice how the
id for the subsection is constructed by appending
text to the id of the chapter. This helps to
ensure that they are unique.If you want to allow the user to jump into a specific portion of
the document (possibly in the middle of a paragraph or an example),
use anchor. This element has no content, but
takes an id attribute.anchor
This paragraph has an embedded
link target in it. It won't show up in
the document.]]>When you want to provide the user with a link they can activate
(probably by clicking) to go to a section of the document that has
an id attribute, you can use either
xref or link.Both of these elements have a linkend
attribute. The value of this attribute should be the value that you
have used in a id attribute (it does not matter
if that value has not yet occured in your document, this will work
for forward links as well as backward links).If you use xref then you have no control over
the text of the link. It will be generated for you.Using xrefAssume that this fragment appears somewhere in a document that
includes the id example;
More information can be found
in .
More specific information can be found
in .]]>The text of the link will be generated automatically, and will
look like (emphasised text indicates the text
that will be the link);
More information can be found in Chapter
One.More specific information can be found in the
section called Sub-sect 1.
Notice how the text from the link is derived from the section
title or the chapter number.This means that you can not use
xref to link to an id
attribute on an anchor element. The
anchor has no content, so the
xref can not generate the text for the
link.If you want to control the text of the link then use
link. This element wraps content, and the
content will be used for the link.Using linkAssume that this fragment appears somewhere in a document that
includes the id example.
More information can be found in
the first chapter.
More specific information can be found in
FreeBSD
+ go to the FreeBSD
home page instead.]]>Appearance:Of course, you could stop reading this document and go to the
- FreeBSD home page
+ FreeBSD home page
instead.* LinuxDocLinuxDoc is an adaptation of the QWERTZ DTD, first adopted by the
Linux Documentation
Project, and subsequently adopted by the FreeBSD Documentation
Project.The LinuxDoc DTD contains primarily appearance related markup rather
than content related markup (i.e., it describes what something looks
like rather than what it is).Both the FreeBSD Documentation Project and the Linux Documentation
Project are migrating from the LinuxDoc DTD to the DocBook DTD.The LinuxDoc DTD is available from the ports collection in the
textproc/linuxdoc category.
diff --git a/en_US.ISO8859-1/books/fdp-primer/tools/chapter.sgml b/en_US.ISO8859-1/books/fdp-primer/tools/chapter.sgml
index 72eeddf8f6..1051eb20c5 100644
--- a/en_US.ISO8859-1/books/fdp-primer/tools/chapter.sgml
+++ b/en_US.ISO8859-1/books/fdp-primer/tools/chapter.sgml
@@ -1,284 +1,284 @@
ToolsThe FDP uses a number of different software tools to help
manage the FreeBSD documentation, convert it to different output
formats, and so on. You will need to use these tools yourself if
you are to work with the FreeBSD documentation.All these tools are available as FreeBSD Ports and Packages,
greatly simplifying the work you have to do to install
them.You will need to install these tools before you work through
any of the examples in later chapters. The actual usage of these
tools is covered in these later chapters.Use textproc/docproj if possibleYou can save yourself a lot of time if you install the
textproc/docproj port. This is a
meta-port which does not contain any software
itself. Instead, it depends on various other ports being installed
correctly. Installing this port should
automatically download and install all of the packages listed in this
chapter that you need that are missing from your system.One of the packages that you might need is the JadeTeX macro set.
In turn, this macro set requires that TeX is installed. TeX is a large
package, and you only need it if you want to produce Postscript or PDF
output.To save yourself time and space you must specify whether or not you
want JadeTeX (and therefore TeX) installed when you install this port.
Either do;
&prompt.root; make JADETEX=yes install
or
&prompt.root; make JADETEX=no install
as necessary.Mandatory toolsSoftwareThese programs are required before you can usefully work with
the FreeBSD documentation. They are all included in
textproc/docproj.SP
(textproc/sp)A suite of applications, including a validating SGML parser,
and an SGML normaliser.Jade
(textproc/jade)A DSSSL implementation. Used for converting marked up
documents to other formats, including HTML and TeX.Tidy
(www/tidy)An HTML 'pretty printer', used to reformat some of the
automatically generated HTML so that it is easier to
follow.Lynx
(www/lynx-current)A text-mode WWW browser, &man.lynx.1; can also convert
HTML files to plain text.DTDs and EntitiesThese are the DTDs and entity sets used by the FDP. They need to
be installed before you can work with any of the documentation.HTML DTD (textproc/html)HTML is the markup language of choice for the World Wide
Web, and is used throughout the FreeBSD web site.LinuxDoc DTD (textproc/linuxdoc)Some FreeBSD documentation is marked up in LinuxDoc. The
FDP is actively migrating from LinuxDoc to DocBook.DocBook DTD (textproc/docbook)DocBook is designed for marking up technical documentation,
and the FDP is migrating from LinuxDoc to DocBook. At the time
of writing, this document, and the FreeBSD Handbook are marked
up in DocBook.ISO 8879 entities
(textproc/iso8879)19 of the ISO 8879:1986 character entity sets used by many
DTDs. Includes named mathematical symbols, additional
characters in the 'latin' character set (accents, diacriticals,
and so on), and greek symbols.StylesheetsThe stylesheets are used when converting and formatting the
documentation for display on screen, printing, and so on.Modular DocBook Stylesheets
(textproc/dsssl-docbook-modular)The Modular DocBook Stylesheets are used when converting
documentation marked up in DocBook to other formats, such as
HTML, or RTF.Optional toolsYou do not need to have any of the following installed. However,
you may find it easier to work with the documentation if you do, and
they may give you more flexibility in the output formats that can be
generated.SoftwareJadeTeX and
teTeX
(print/jadetex and
print/teTeX-beta)Jade and
teTeX are used to convert DocBook
documents to DVI, Postscript, and PDF formats. The
JadeTeX macros are needed in order to
do this.If you do not intend to convert your documentation to one of
these formats (i.e., HTML, plain text, and RTF are sufficient)
then you do not need to install
JadeTeX and
teTeX. This can be a significant
space and time saver, as teTeX is
over 30MB in size.If you decide to install
JadeTeX and
teTeX then you will need to
configure teTeX after
JadeTeX has been installed.
print/jadetex/pkg/MESSAGE contains
detailed instructions explaining what you need to do.Emacs or
xemacs
(editors/emacs or
editors/xemacs)Both these editors include a special mode for editing
documents marked up according to an SGML DTD. This mode
includes commands to reduce the amount of typing you need, and
help reduce the possibility of errors.You do not need to use them, any text editor can be used to
edit marked up documents. You may find they make you
efficient.If anyone has recommendations for other software that is useful
when manipulating SGML documents, please let Nik Clayton
- (nik@freebsd.org) know, so they can be added to this
+ (nik@FreeBSD.org) know, so they can be added to this
list.
diff --git a/en_US.ISO8859-1/books/fdp-primer/translations/chapter.sgml b/en_US.ISO8859-1/books/fdp-primer/translations/chapter.sgml
index 1b3526ab7c..7fab8d7eb2 100644
--- a/en_US.ISO8859-1/books/fdp-primer/translations/chapter.sgml
+++ b/en_US.ISO8859-1/books/fdp-primer/translations/chapter.sgml
@@ -1,474 +1,474 @@
TranslationsThis is the FAQ for people translating the FreeBSD documentation
(FAQ, Handbook, tutorials, man pages, and others) to different
languages.It is very heavily based on the translation FAQ
from the FreeBSD German Documentation Project, originally written by Frank
Grnder elwood@mc5sys.in-berlin.de and translated back to
English by Bernd Warken bwarken@mayn.de.The FAQ maintainer is Nik Clayton
nik@FreeBSD.org.Why a FAQ?More and more people are approaching the freebsd-doc mailing
list and volunteering to translate FreeBSD documentation to other
languages. This FAQ aims to answer their questions so they can start
translating documentation as quickly as possible.What do i18n and l10n
mean?i18n means
internationalisation and l10n
means localisation. They are just a convenient
shorthand.i18n can be read as “i” followed by
18 letters, followed by “n”. Similarly,
l10n is “l” followed by 10 letters,
followed by “n”.Is there a mailing list for translators?Yes, freebsd-translate@ngo.org.uk. Subscribe by
sending a message to
freebsd-translate-request@ngo.org.uk with the word
subscribe in the body of the message.You will receive a reply asking you to confirm your subscription
(in exactly the same manner as the the FreeBSD lists at FreeBSD.org).The primary language of the mailing list is English. However,
posts in other languages will be accepted. The mailing list is not
moderated, but you need to be a member of the list before you can
post to it.The mailing list is archived, but they are not currently
searchable. Sending the message help to
majordomo@ngo.org.uk will send back instructions on
how to access the archive.It is expected that the mailing list will transfer to FreeBSD.org and therefore become
official in the near future.Are more translators needed?Yes. The more people work on translation the faster it gets
done, and the faster changes to the English documentation are
mirrored in the translated documents.You do not have to be a professional translator to be able to
help.What languages do I need to know?Ideally, you will have a good knowledge of written English, and
obviously you will need to be fluent in the language you are
translating to.English is not strictly necessary. For example, you could do a
Hungarian translation of the FAQ from the Spanish
translation.What software do I need to know?It is strongly recommended that you maintain a local copy of the
FreeBSD CVS repository (at least the documentation part) either
using CTM or
CVSup. The "Staying current with FreeBSD"
chapter in the Handbook explains how to use these
applications.You should be comfortable using CVS.
This will allow you to see what has changed between different
versions of the files that make up the documentation.[XXX To Do -- write a tutorial that shows how to use CVSup to
get just the documentation, check it out, and see what's changed
between two arbitrary revisions]How do I find out who else might be translating to the same
language?The Documentation
+ url="http://www.FreeBSD.org/docproj/translations.html">Documentation
Project translations page lists the translation efforts
that are currently known about. If someone else is already working
on translating documentation to your language, please don't
duplicate their efforts. Instead, contact them to see how you can
help.If no one is listed on that page as translating for your
language then send a message to
- freebsd-doc@freebsd.org in case someone else is
+ freebsd-doc@FreeBSD.org in case someone else is
thinking of doing a translation, but hasn't announced it yet.No one else is translating to my language. What do I do?Congratulations, you have just started the “FreeBSD
your-language-here Documentation
Translation Project”. Welcome aboard.First, decide whether or not you've got the time to spare. Since
you are the only person working on your language at the moment it is
going to be your responsibility to publicise your work and
coordinate any volunteers that might want to help you.Write an e-mail to the Documentation Project mailing list,
announcing that you are going to translate the documentation, so the
Documentation Project translations page can be maintained.You should subscribe to the
freebsd-translate@ngo.org.uk mailing list (as
described earlier).If there is already someone in your country providing FreeBSD
mirroring services you should contact them and ask if they can
provide some webspace for your project, and possibly an e-mail
address or mailing list services.Then pick a document and start translating. It is best to start
with something fairly small—either the FAQ, or one of the
tutorials.I've translated some documentation, where do I send it?That depends. If you are already working with a translation team
(such as the Japanese team, or the German team) then they will have
their own procedures for handling submitted documentation, and these
will be outlined on their web pages.If you are the only person working on a particular language (or
you are responsible for a translation project and want to submit
your changes back to the FreeBSD project) then you should send your
translation to the FreeBSD project (see the next question).I'm the only person working on translating to this language, how
do I submit my translation?orWe're a translation team, and want to submit documentation that
our members have translated for us?First, make sure your translation is organised properly. This
means that it should drop in to the existing documentation tree and
build straight away.Currently, the FreeBSD documentation is stored in a top level
directory called doc/. Directories below this
are named according to the language code they are written in, as
defined in ISO639 (/usr/share/misc/iso639 on a
version of FreeBSD newer than 20th January 1999).If your language can be encoded in different ways (for example,
Chinese) then there should be directories below this, one for each
encoding format you have provided.Finally, you should have directories for each document.For example, a hypothetical Swedish translation might look
like doc/
sv/
Makefile
FAQ/
Makefile
*.sgmlsv is the ISO639 code for Swedish. Note the
two Makefiles, which will be used to build the documentation. There
is no separate language code for Swedish, so there is no
intermittent directory between the "sv" and "FAQ"
directoriesThis directory structure is going to change radically quite
soon. Please see the on-going discussions on the
- doc@FreeBSD.org mailing list for more
+ freebsd-doc@FreeBSD.org mailing list for more
information..Use &man.tar.1; and &man.gzip.1; to compress up your
documentation, and send it to the project.&prompt.user; cd doc
&prompt.user; tar cf swedish-docs.tar sv
&prompt.user; gzip -9 swedish-docs.tarPut swedish-docs.tar.gz somewhere. If you
do not have access to your own webspace (perhaps your ISP does not
let you have any) then you can e-mail Nik Clayton
nik@FreeBSD.org, and arrange to e-mail the files
when it is convenient.Either way, you should use &man.send-pr.1; to submit a report
indicating that you have submitted the documentation. It would be
very helpful if you could get other people to look over your
translation and double check it first, since it is unlikely that the
person committing it will be fluent in the language.Someone (probably the Documentation Project Manager, currently
Nik Clayton nik@FreeBSD.org) will then take your
translation and confirm that it builds. In particular, the
following things will be looked at:Do all your files use RCS strings (such as "ID").Does make all in the
sv directory work correctly.Does make install work correctly.If there are any problems then whoever is looking at the
submission will get back to you to try and work them out.If there are no problems then your translation will be committed
as soon as possible.Can I include language or country specific text in my
translation?We would prefer that you did not.For example, suppose that you are translating the Handbook to
Korean, and want to include a section about retailers in Korea in
your Handbook.There's no real reason why that information should not be in the
English (or German, or Spanish, or Japanese, or …) versions
as well. It is feasible that an English speaker in Korea might try
and pick up a copy of FreeBSD whilst over there. It also helps
increase FreeBSD's perceived presence around the globe, which is not
a bad thing.If you have country specific information, please submit it as a
change to the English Handbook (using &man.send-pr.1;) and then
translate the change back to your language in the translated
Handbook.Thanks.How should language specific characters be included?Non-ASCII characters in the documentation should be included
using SGML entities.Briefly, these look like an ampersand (&), the name of the
entity, and a semi-colon (;).The entity names are defined in ISO8879, which is in the ports
tree as textproc/iso8879.A few examples includeééSmall “e” with an acute accentÉÉLarge “E” with an acute accentüüSmall “u” with an umlautAfter you have installed the iso8879 port, the files in
/usr/local/share/sgml/iso8879 contain the
complete list.Addressing the readerIn the English documents, the reader is addressed as
“you”, there is no formal/informal distinction as there
is in some languages.If you are translating to a language which does distinguish, use
whichever form is typically used in other technical documentation in
your language. If in doubt, use a mildly polite form.Do I need to include any additional information in my
translations?Yes.The header of the English version of each document will look
something like this;]]>The exact boilerplate may change, but it will always include an
Id line and the phrase The FreeBSD Documentation
Project.Your translated documents should include their own Id line, and change the
FreeBSD Documentation Project line to
The FreeBSD language
Documentation Project.In addition, you should add a third line which indicates which
revision of the English text this is based on.So, the Spanish version of this file might start]]>
diff --git a/en_US.ISO8859-1/books/handbook/mirrors/chapter.sgml b/en_US.ISO8859-1/books/handbook/mirrors/chapter.sgml
index a3374adbec..19235447d5 100644
--- a/en_US.ISO8859-1/books/handbook/mirrors/chapter.sgml
+++ b/en_US.ISO8859-1/books/handbook/mirrors/chapter.sgml
@@ -1,1492 +1,1492 @@
Obtaining FreeBSDCD-ROM PublishersFreeBSD is available on CD-ROM from Walnut Creek CDROM:
Walnut Creek CDROM4041 Pike Lane, Suite FConcordCA, 94520USA
Phone: +1 925 674-0783
Fax: +1 925 674-0821
Email: info@cdrom.com
WWW: http://www.cdrom.com/FTP SitesThe official sources for FreeBSD are available via anonymous FTP
from:
ftp://ftp.FreeBSD.org/pub/FreeBSD.
The FreeBSD mirror
sites database is more accurate than the mirror listing in the
handbook, as it gets its information form the DNS rather than relying on
static lists of hosts.Additionally, FreeBSD is available via anonymous FTP from the
following mirror sites. If you choose to obtain FreeBSD via anonymous
FTP, please try to use a site near you.Argentina,
Australia,
Brazil,
Canada,
China,
Czech Republic,
Denmark,
Estonia,
Finland,
France,
Germany,
Hong Kong,
Ireland,
Israel,
Japan,
Korea,
Netherlands,
New Zealand,
Poland,
Portugal,
Russia,
Saudi Arabia,
South Africa,
Spain,
Slovak Republic,
Slovenia,
Sweden,
Taiwan,
Thailand,
UK,
Ukraine,
USA.ArgentinaIn case of problems, please contact the hostmaster
hostmaster@ar.FreeBSD.org for this domain.ftp://ftp.ar.FreeBSD.org/pub/FreeBSDAustraliaIn case of problems, please contact the hostmaster
hostmaster@au.FreeBSD.org for this domain.ftp://ftp.au.FreeBSD.org/pub/FreeBSDftp://ftp2.au.FreeBSD.org/pub/FreeBSDftp://ftp3.au.FreeBSD.org/pub/FreeBSDftp://ftp4.au.FreeBSD.org/pub/FreeBSDBrazilIn case of problems, please contact the hostmaster
hostmaster@br.FreeBSD.org for this domain.ftp://ftp.br.FreeBSD.org/pub/FreeBSDftp://ftp2.br.FreeBSD.org/pub/FreeBSDftp://ftp3.br.FreeBSD.org/pub/FreeBSDftp://ftp4.br.FreeBSD.org/pub/FreeBSDftp://ftp5.br.FreeBSD.org/pub/FreeBSDftp://ftp6.br.FreeBSD.org/pub/FreeBSDftp://ftp7.br.FreeBSD.org/pub/FreeBSDCanadaIn case of problems, please contact the hostmaster
hostmaster@ca.FreeBSD.org for this domain.ftp://ftp.ca.FreeBSD.org/pub/FreeBSDChinaIn case of problems, please contact the hostmaster
phj@cn.FreeBSD.org for this domain.ftp://ftp.cn.FreeBSD.org/pub/FreeBSDCzech RepublicIn case of problems, please contact the hostmaster
hostmaster@cz.FreeBSD.org for this domain.ftp://ftp.cz.FreeBSD.org Contact: calda@dzungle.ms.mff.cuni.czftp://sunsite.mff.cuni.cz/OS/FreeBSD Contact: jj@sunsite.mff.cuni.cz.DenmarkIn case of problems, please contact the hostmaster
hostmaster@dk.FreeBSD.org for this domain.ftp://ftp.dk.freeBSD.ORG/pub/FreeBSD
+ url="ftp://ftp.dk.FreeBSD.org/pub/FreeBSD">ftp://ftp.dk.FreeBSD.org/pub/FreeBSD
EstoniaIn case of problems, please contact the hostmaster
hostmaster@ee.FreeBSD.org for this domain.ftp://ftp.ee.FreeBSD.org/pub/FreeBSDFinlandIn case of problems, please contact the hostmaster
hostmaster@fi.FreeBSD.org for this domain.ftp://ftp.fi.FreeBSD.org/pub/FreeBSDFranceIn case of problems, please contact the hostmaster
hostmaster@fr.FreeBSD.org for this domain.ftp://ftp.fr.FreeBSD.org/pub/FreeBSDftp://ftp2.fr.FreeBSD.org/pub/FreeBSDftp://ftp3.fr.FreeBSD.org/pub/FreeBSDGermanyIn case of problems, please contact the hostmaster
hostmaster@de.FreeBSD.org for this domain.ftp://ftp.de.FreeBSD.org/pub/FreeBSDftp://ftp2.de.FreeBSD.org/pub/FreeBSDftp://ftp3.de.FreeBSD.org/pub/FreeBSDftp://ftp4.de.FreeBSD.org/pub/FreeBSDftp://ftp5.de.FreeBSD.org/pub/FreeBSDftp://ftp6.de.FreeBSD.org/pub/FreeBSDftp://ftp7.de.FreeBSD.org/pub/FreeBSDHong Kongftp://ftp.hk.super.net/pub/FreeBSD Contact: ftp-admin@HK.Super.NET.IrelandIn case of problems, please contact the hostmaster
hostmaster@ie.FreeBSD.org for this domain.ftp://ftp.ie.FreeBSD.org/pub/FreeBSDIsraelIn case of problems, please contact the hostmaster
hostmaster@il.FreeBSD.org for this domain.ftp://ftp.il.FreeBSD.org/pub/FreeBSDftp://ftp2.il.FreeBSD.org/pub/FreeBSDJapanIn case of problems, please contact the hostmaster
hostmaster@jp.FreeBSD.org for this domain.ftp://ftp.jp.FreeBSD.org/pub/FreeBSDftp://ftp2.jp.FreeBSD.org/pub/FreeBSDftp://ftp3.jp.FreeBSD.org/pub/FreeBSDftp://ftp4.jp.FreeBSD.org/pub/FreeBSDftp://ftp5.jp.FreeBSD.org/pub/FreeBSDftp://ftp6.jp.FreeBSD.org/pub/FreeBSDKoreaIn case of problems, please contact the hostmaster
hostmaster@kr.FreeBSD.org for this domain.ftp://ftp.kr.FreeBSD.org/pub/FreeBSDftp://ftp2.kr.FreeBSD.org/pub/FreeBSDftp://ftp3.kr.FreeBSD.org/pub/FreeBSDftp://ftp4.kr.FreeBSD.org/pub/FreeBSDftp://ftp5.kr.FreeBSD.org/pub/FreeBSDftp://ftp6.kr.FreeBSD.org/pub/FreeBSDNetherlandsIn case of problems, please contact the hostmaster
hostmaster@nl.FreeBSD.org for this domain.ftp://ftp.nl.FreeBSD.org/pub/FreeBSDNew ZealandIn case of problems, please contact the hostmaster
hostmaster@nz.FreeBSD.org for this domain.ftp://ftp.nz.FreeBSD.org/pub/FreeBSDPolandIn case of problems, please contact the hostmaster
hostmaster@pl.FreeBSD.org for this domain.ftp://ftp.pl.FreeBSD.org/pub/FreeBSDPortugalIn case of problems, please contact the hostmaster
hostmaster@pt.FreeBSD.org for this domain.ftp://ftp.pt.FreeBSD.org/pub/FreeBSDftp://ftp2.pt.FreeBSD.org/pub/FreeBSDRussiaIn case of problems, please contact the hostmaster
hostmaster@ru.FreeBSD.org for this domain.ftp://ftp.ru.FreeBSD.org/pub/FreeBSDftp://ftp2.ru.FreeBSD.org/pub/FreeBSDftp://ftp3.ru.FreeBSD.org/pub/FreeBSDftp://ftp4.ru.FreeBSD.org/pub/FreeBSDSaudi ArabiaIn case of problems, please contact
ftpadmin@isu.net.saftp://ftp.isu.net.sa/pub/mirrors/ftp.freebsd.orgSouth AfricaIn case of problems, please contact the hostmaster
hostmaster@za.FreeBSD.org for this domain.ftp://ftp.za.FreeBSD.org/pub/FreeBSDftp://ftp2.za.FreeBSD.org/pub/FreeBSDftp://ftp3.za.FreeBSD.org/pub/FreeBSDSlovak RepublicIn case of problems, please contact the hostmaster
hostmaster@sk.FreeBSD.org for this domain.ftp://ftp.sk.FreeBSD.org/pub/FreeBSDSloveniaIn case of problems, please contact the hostmaster
hostmaster@si.FreeBSD.org for this domain.ftp://ftp.si.FreeBSD.org/pub/FreeBSDSpainIn case of problems, please contact the hostmaster
hostmaster@es.FreeBSD.org for this domain.ftp://ftp.es.FreeBSD.org/pub/FreeBSDSwedenIn case of problems, please contact the hostmaster
hostmaster@se.FreeBSD.org for this domain.ftp://ftp.se.FreeBSD.org/pub/FreeBSDftp://ftp2.se.FreeBSD.org/pub/FreeBSDftp://ftp3.se.FreeBSD.org/pub/FreeBSDTaiwanIn case of problems, please contact the hostmaster
hostmaster@tw.FreeBSD.org for this domain.ftp://ftp.tw.FreeBSD.org/pub/FreeBSDftp://ftp2.tw.FreeBSD.org/pub/FreeBSDftp://ftp3.tw.FreeBSD.org/pub/FreeBSDThailandftp://ftp.nectec.or.th/pub/FreeBSD Contact: ftpadmin@ftp.nectec.or.th.Ukraineftp://ftp.ua.FreeBSD.org/pub/FreeBSD Contact: freebsd-mnt@lucky.net.UKIn case of problems, please contact the hostmaster
hostmaster@uk.FreeBSD.org for this domain.ftp://ftp.uk.FreeBSD.org/pub/FreeBSDftp://ftp2.uk.FreeBSD.org/pub/FreeBSDftp://ftp3.uk.FreeBSD.org/pub/FreeBSDftp://ftp4.uk.FreeBSD.org/pub/FreeBSDUSAIn case of problems, please contact the hostmaster
hostmaster@FreeBSD.org for this domain.ftp://ftp.FreeBSD.org/pub/FreeBSDftp://ftp2.FreeBSD.org/pub/FreeBSDftp://ftp3.FreeBSD.org/pub/FreeBSDftp://ftp4.FreeBSD.org/pub/FreeBSDftp://ftp5.FreeBSD.org/pub/FreeBSDftp://ftp6.FreeBSD.org/pub/FreeBSDThe latest versions of export-restricted code for FreeBSD (2.0C or
later) (eBones and secure) are being made available at the following
locations. If you are outside the U.S. or Canada, please get secure
(DES) and eBones (Kerberos) from one of the following foreign
distribution sites:South AfricaHostmaster hostmaster@internat.FreeBSD.org for
this domain.ftp://ftp.internat.FreeBSD.org/pub/FreeBSDftp://ftp2.internat.FreeBSD.org/pub/FreeBSDBrazilHostmaster hostmaster@br.FreeBSD.org for this
domain.ftp://ftp.br.FreeBSD.org/pub/FreeBSDFinlandftp://nic.funet.fi/pub/unix/FreeBSD/eurocrypt Contact: count@nic.funet.fi.CTM SitesCTM/FreeBSD is available via anonymous
FTP from the following mirror sites. If you choose to obtain CTM via
anonymous FTP, please try to use a site near you.In case of problems, please contact &a.phk;.California, Bay Area, official sourceftp://ftp.FreeBSD.org/pub/FreeBSD/development/CTMGermany, Trierftp://ftp.uni-trier.de/pub/unix/systems/BSD/FreeBSD/CTMSouth Africa, backup server for old deltasftp://ftp.internat.FreeBSD.org/pub/FreeBSD/CTMTaiwan/R.O.C, Chiayiftp://ctm.tw.FreeBSD.org/pub/FreeBSD/CTMftp://ctm2.tw.FreeBSD.org/pub/FreeBSD/CTMftp://ctm3.tw.FreeBSD.org/pub/freebsd/CTMIf you did not find a mirror near to you or the mirror is
incomplete, try FTP
search at http://ftpsearch.ntnu.no/ftpsearch.
FTP search is a great free archie server in Trondheim, Norway.CVSup SitesCVSup servers for FreeBSD are running
at the following sites:Argentinacvsup.ar.FreeBSD.org (maintainer
msagre@cactus.fi.uba.ar)Australiacvsup.au.FreeBSD.org (maintainer
dawes@physics.usyd.edu.au)Brazilcvsup.br.FreeBSD.org (maintainer
cvsup@cvsup.br.FreeBSD.org)cvsup2.br.FreeBSD.org (maintainer
tps@ti.sk)Canadacvsup.ca.FreeBSD.org (maintainer
dan@jaded.net)Chinacvsup.cn.FreeBSD.org (maintainer
phj@cn.FreeBSD.org)Czech Republiccvsup.cz.FreeBSD.org (maintainer
cejkar@dcse.fee.vutbr.cz)Denmarkcvsup.dk.FreeBSD.org (maintainer
jesper@skriver.dk)Estoniacvsup.ee.FreeBSD.org (maintainer
taavi@uninet.ee)Finlandcvsup.fi.FreeBSD.org (maintainer
count@key.sms.fi)cvsip2.fi.FreeBSD.org (maintainer
count@key.sms.fi)Francecvsup.fr.FreeBSD.org (maintainer
hostmaster@fr.FreeBSD.org)Germanycvsup.de.FreeBSD.org (maintainer
wosch@FreeBSD.org)cvsup2.de.FreeBSD.org (maintainer
petzi@FreeBSD.org)cvsup3.de.FreeBSD.org (maintainer
ag@leo.org)Icelandcvsup.is.FreeBSD.org (maintainer
adam@veda.is)Japancvsup.jp.FreeBSD.org (maintainer
simokawa@sat.t.u-tokyo.ac.jp)cvsup2.jp.FreeBSD.org (maintainer
max@FreeBSD.org)cvsup3.jp.FreeBSD.org (maintainer
shige@cin.nihon-u.ac.jp)cvsup4.jp.FreeBSD.org (maintainer
cvsup-admin@ftp.media.kyoto-u.ac.jp)cvsup5.jp.FreeBSD.org (maintainer
cvsup@imasy.or.jp)Koreacvsup.kr.FreeBSD.org (maintainer
cjh@kr.FreeBSD.org)Netherlandscvsup.nl.FreeBSD.org (maintainer
xaa@xaa.iae.nl)Norwaycvsup.no.FreeBSD.org (maintainer
Tor.Egge@idt.ntnu.no)Polandcvsup.pl.FreeBSD.org (maintainer
Mariusz@kam.pl)Russiacvsup.ru.FreeBSD.org (maintainer
mishania@demos.su)cvsup2.ru.FreeBSD.org (maintainer
dv@dv.ru)Spaincvsup.es.FreeBSD.org (maintainer
jesusr@FreeBSD.org)Swedencvsup.se.FreeBSD.org (maintainer
pantzer@ludd.luth.se)Slovak Republiccvsup.sk.FreeBSD.org (maintainer
tps@tps.sk)cvsup2.sk.FreeBSD.org (maintainer
tps@tps.sk)South Africacvsup.za.FreeBSD.org (maintainer
markm@FreeBSD.org)cvsup2.za.FreeBSD.org (maintainer
markm@FreeBSD.org)Taiwancvsup.tw.FreeBSD.org (maintainer
jdli@freebsd.csie.nctu.edu.tw)Ukrainecvsup2.ua.FreeBSD.org (maintainer
freebsd-mnt@lucky.net)United Kingdomcvsup.uk.FreeBSD.org (maintainer
joe@pavilion.net)cvsup2.uk.FreeBSD.org (maintainer
brian@FreeBSD.org)USAcvsup1.FreeBSD.org (maintainer
skynyrd@opus.cts.cwu.edu), Washington
statecvsup2.FreeBSD.org (maintainer
jdp@FreeBSD.org), Californiacvsup3.FreeBSD.org (maintainer
wollman@FreeBSD.org), Massachusettscvsup5.FreeBSD.org (maintainer
ck@adsu.bellsouth.com), Georgiacvsup6.FreeBSD.org (maintainer
jdp@FreeBSD.org), FloridaThe export-restricted code for FreeBSD (eBones and secure) is
available via CVSup at the following
international repository. Please use this site to get the
export-restricted code, if you are outside the USA or Canada.South Africacvsup.internat.FreeBSD.org (maintainer
markm@FreeBSD.org)The following CVSup site is especially
designed for CTM users. Unlike the other
CVSup mirrors, it is kept up-to-date by CTM.
That means if you CVSupcvs-all with release=cvs from this
site, you get a version of the repository (including the inevitable
.ctm_status file) which is suitable for being
updated using the CTMcvs-cur deltas. This allows users who track the
entire cvs-all tree to go from
CVSup to CTM
without having to rebuild their repository from scratch using a fresh
CTM base delta.This special feature only works for the cvs-all
distribution with cvs as the release tag.
CVSupping any other distribution and/or release will get you the
specified distribution, but it will not be suitable for
CTM updating.Because the current version of CTM does
not preserve the timestamps of files, the timestamps at this mirror
site are not the same as those at other mirror sites. Switching
between this site and other sites is not recommended. It will work
correctly, but will be somewhat inefficient.Germanyctm.FreeBSD.org (maintainer
blank@fox.uni-trier.de)AFS SitesAFS servers for FreeBSD are running at the following sites;SwedenThe path to the files are:
/afs/stacken.kth.se/ftp/pub/FreeBSD
stacken.kth.se # Stacken Computer Club, KTH, Sweden
130.237.234.43 #hot.stacken.kth.se
130.237.237.230 #fishburger.stacken.kth.se
130.237.234.3 #milko.stacken.kth.seMaintainer ftp@stacken.kth.se
diff --git a/en_US.ISO_8859-1/articles/formatting-media/article.sgml b/en_US.ISO_8859-1/articles/formatting-media/article.sgml
index c2cf44f23e..b2edfb9115 100644
--- a/en_US.ISO_8859-1/articles/formatting-media/article.sgml
+++ b/en_US.ISO_8859-1/articles/formatting-media/article.sgml
@@ -1,464 +1,464 @@
-
+
Formatting Media For Use With FreeBSD 2.2-RELEASEA TutorialDougWhitedwhite@resnet.uoregon.eduMarch 1997This document describes how to slice, partition, and
format hard disk drives and similar media for use with FreeBSD. The
examples given have been tested under FreeBSD 2.2-GAMMA and may work
for other releases. Introduction & DefinitionsOverviewSuccessfully adding disks to an existing system is the mark of an
experienced system administrator. Slicing, partitioning, and adding
disks requires a careful dance of proper command and name syntax. One
slipped finger and an entire disk could disappear in seconds. This
document is written in an attempt to simplify this process and avoid
accidents. Thankfully, enhancements to existing tools (notably
sysinstall) have greatly improved this process in recent releases of
FreeBSD. There are two possible modes of disk formatting:
compatibility mode: Arranging a
disk so that it has a slice table for use with other operating
systems.dangerously dedicated mode:
Formatting a disk with no slice table. This makes the process of
adding disks easier, however non-FreeBSD operating systems may not
accept the disk. For most cases, dedicated mode is the easiest to set up and use
in existing systems, as a new disk is usually dedicated entirely to
FreeBSD. However, compatibility mode insures optimum interoperability
with future installations at a cost of increased complexity.In addition to selecting the mode, two methods of slicing the
disk are available. One is using the system installation tool
/stand/sysinstall. 2.1.7-RELEASE and later
versions of sysinstall contain code to ease setup
of disks during normal system operation, mainly allowing access to the
Label and Partition editors and a Write feature which will update just
the selected disk and slice without affecting other disks. The other
method is running the tools manually from a root command line. For
dangerously dedicated mode, only three or four commands are involved
while sysinstall requires some manipulation.DefinitionsUNIX disk management over the centuries has invented many new
definitions for old words. The following glossary covers the
definitions used in this document and (hopefully) for FreeBSD in
general. compatibility mode: Arranging a disk so that it has a slice
table for use with other operating systems. Oppose dangerously
dedicated mode.dangerously dedicated mode: Formatting a disk with no slice
table. This makes the process of adding disks easier, however
non-FreeBSD operating systems may not accept the disk. Oppose
compatibility mode.disk: A circular disc, covered with magnetic or similarly
manipulable material, spun by a motor under a head. Data is stored on
the disk by changing the pattern of magnetism on the disc, which can
be later read. Hard disks, CD-ROMs, Magneto-optical,and Zip/Jaz
removables are examples of disks.slice: A division of a disk. Up to four slices are permitted on one
disk in the PC standard. Slices are composed of contiguous sectors.
Slices are recorded in a slice table used by the system BIOS to
locate bootable partitions. The slice table is usually called the
Partition Table in DOS parlance. Maintained by the fdisk utility.partition: A division of a slice. Usually used in reference
to divisions of the FreeBSD slice of a disk. Each filesystem and swap
area on a disk resides in a partition. Maintained using the disklabel
utility.sector: Smallest subdivision of a disk. One sector usually
represents 512 bytes of data.Warnings & PitfallsBuilding disks is not something to take lightly. It is quite possible
to destroy the contents of other disks in your system if the proper
precautions are not taken.Check your work carefully.> It is very simple to destroy
the incorrect disk when working with these commands. When
in doubt consult the kernel boot output for the proper device.Needless to say, we are not responsible for any damage to any data
or hardware that you may experience. You work at your own risk!Zip, Jaz, and Other RemovablesRemovable disks can be formatted in the same way as normal hard
disks. It is essential to have the disk drive connected to the system
and a disk placed in the drive during startup, so the kernel can
determine the drive's geometry. Check the dmesg
output and make sure your device and the disk's size is listed. If
the kernel reports
Can't get the size
then the disk was not in the drive. In this case, you will need to restart the
machine before attempting to format disks.
Formatting Disks in Dedicated ModeIntroductionThis section details how to make disks that are totally dedicated to
FreeBSD. Remember, dedicated mode disks cannot be booted by the PC
architecture.Making Dedicated Mode Disks using Sysinstall/stand/sysinstall, the system installation
utility, has been expanded in recent versions to make the process of
dividing disks properly a less tiring affair. The fdisk and disklabel
editors built into sysinstall are GUI tools that remove much of the
confusion from slicing disks. For FreeBSD versions 2.1.7 and later,
this is perhaps the simplest way to slice disks.Start sysinstall as root by typing
/stand/sysinstall
from the command prompt.Select Index.Select Partition.Select the disk to edit with arrow keys and
SPACE.If you are using this entire disk for FreeBSD, select
A.When asked:
Do you want to do this with a true partition entry so as to remain
cooperative with any future possible operating systems on the
drive(s)?
answer No.When asked if you still want to do this, answer
Yes.Select Write.When warned about Writing on installed systems, answer
Yes.Quitthe FDISK Editor and
ESCAPE back to the Index menu.Select Label from the Index
menu.Label as desired. For a single partition, enter
C to Create a partition, accept the
default size, partition type Filesystem, and a mountpoint (which isn't
used).Enter W when done and confirm to
continue. The filesystem will be newfs'd for you, unless you select
otherwise (for news partitions you'll want to do this!). You'll get
the error:
Error mounting /mnt/dev/wd2s1e on /mnt/blah : No such file or directory
Ignore.
Exit out by repeatedly pressing ESCAPE.Making Dedicated Mode Disks Using the Command LineExecute the following commands, replacing wd2 with the disk
name. Lines beginning with # are comments.
dd if=/dev/zero of=/dev/rwd2 count=2
disklabel /dev/rwd2 | disklabel -B -R -r wd2 /dev/stdin
# We only want one partition, so using slice 'c' should be fine:
newfs /dev/rwd2c
If you need to edit the disklabel to create multiple
partitions (such as swap), use the following:
dd if=/dev/zero of=/dev/rwd2 count=2
disklabel /dev/r$d > /tmp/label
# Edit disklabel to add partitions:
vi /tmp/label
disklabel -B -R -r wd2 /tmp/label
# newfs partitions appropriately
Your disk is now ready for use.Making Compatibility Mode DisksIntroductionThe command line is the easiest way to make dedicated disks, and
the worst way to make compatibility disks. The command-line fdisk
utility requires higher math skills and an in-depth understanding of
the slice table, which is more than most people want to deal with.
Use sysinstall for compatibility disks, as described below.Making Compatibility Mode Disks Using SysinstallStart sysinstall as root by typing
/stand/sysinstall>
from the command prompt.Select Index.Select Partition.Select the disk to edit with arrow keys and
SPACE.
If you are using this entire disk for FreeBSD, select
A.When asked:
Do you want to do this with a true partition entry so as to remain
cooperative with any future possible operating systems on the
drive(s)?
answer yes.Select Write.When asked to install the boot manager, select None with
SPACE then hit ENTER for OK.Quit the FDISK Editor.You'll be asked about the boot manager, select
None
again. Select Label from the Index
menu.Label as desired. For a single partition, accept the
default size, type filesystem, and a mountpoint (which isn't
used).The filesystem will be newfs'd for you, unless you select otherwise (for news partitions you'll want to do this!). You'll get the error:
Error mounting /mnt/dev/wd2s1e on /mnt/blah : No such file or directory
Ignore.
Exit out by repeatedly pressing ESCAPE.Your new disk is now ready for use.Other Disk OperationsAdding Swap SpaceAs a system grows, it's need for swap space can also grow.
Although adding swap space to existing disks is very difficult, a new
disk can be partitioned with additional swap space. To add swap space when adding a disk to a system:
When partitioning the disk, edit the disklabel and
allocate the amount of swap space to add in partition `b' and the
remainder in another partition, such as `a' or `e'. The size is given
in 512 byte blocks. When newfsing the drive, do NOT newfs the `c'
partition. Instead, newfs the partition where the non-swap space
lies.Add an entry to /etc/fstab as follows:
/dev/wd0b none swap sw 0 0
Change /dev/wd0b to the device of the newly added
space.To make the new space immediately available, use the
swapon command.
$ swapon /dev/sd0b
swapon: added /dev/sd0b as swap space
Copying the Contents of DisksSubmitted By: Renaud Waldura (renaud@softway.com) To move file from your original base disk to the fresh new one,
do:
mount /dev/wd2 /mnt
pax -r -w -p e /usr/home /mnt
umount /mnt
rm -rf /usr/home/*
mount /dev/wd2 /usr/home
Creating Striped Disks using CCDCommands Submitted By: Stan Brown (stanb@awod.com)
The Concatenated Disk Driver, or CCD, allows you to treat several identical disks as a single disk.
Striping can result in increased disk performance by distributing reads and
writes across the disks. See the ccd(4) and ccdconfig(4) man pages or the
CCD Homepage for further details.To create a new CCD, execute the following commands. This describes
how to add three disks together; simply add or remove devices as
necessary. Remember that the disks to be striped must be identical.>Before executing these commands, make sure you add the line
pseudo-device ccd 4
to your kernel.
cd /dev ; sh MAKDEV ccd0
disklabel -r -w sd0 auto
disklabel -r -w sd1 auto
disklabel -r -w sd2 auto
disklabel -e sd0c # change type to 4.2BSD
disklabel -e sd1c # change type to 4.2BSD
disklabel -e sd2c # change type to 4.2BSD
ccdconfig ccd0 32 0 /dev/sd0c /dev/sd1c /dev/sd2c
newfs /dev/rccd0c
Now you can mount and use your CCD by referencing device /dev/ccd0c.
CreditsThe author would like to thank the following individuals for
their contributions to this project:
Darryl Okahata
(darrylo@hpnmhjw.sr.hp.com) for his
simple dedicated mode setup documentation which I have used repeatedly
on freebsd-questions.Jordan Hubbard
-(jkh@freebsd.org) for making
+(jkh@FreeBSD.org) for making
sysinstall useful for this type of task.John Fieber
(jfieber@indiana.edu) for making
information and examples of the DocBook DTD on which this document is
based.
-Greg Lehey (grog@freebsd.org) for checking my
+Greg Lehey (grog@FreeBSD.org) for checking my
work and pointing out inaccuracies, as well as miscellaneous support.
diff --git a/en_US.ISO_8859-1/articles/mh/article.sgml b/en_US.ISO_8859-1/articles/mh/article.sgml
index 3c33cf92ea..a58191f6df 100644
--- a/en_US.ISO_8859-1/articles/mh/article.sgml
+++ b/en_US.ISO_8859-1/articles/mh/article.sgml
@@ -1,704 +1,704 @@
-
+
An MH PrimerMattMidboematt@garply.comv1.0, 16 January 1996This document contains an introduction to using MH on
FreeBSDIntroductionMH started back in 1977 at the RAND Corporation, where the
initial philosophies behind MH were developed. MH isn't so much a
monolithic email program but a philosophy about how best to develop
tools for reading email. The MH developers have done a great job
adhering to the KISS> principle: Keep It Simple Stupid.
Rather than have one large program for reading, sending and handling
email they have written specialized programs for each part of your
email life. One might liken MH to the specialization that one finds
in insects and nature. Each tool in MH does one thing, and does it
very well.Beyond just the various tools that one uses to handle their
email MH has done an excellent job keeping the configuration of each
of these tools consistent and uniform. In fact, if you are not quite
sure how something is supposed to work or what the arguments for some
command are supposed to be then you can generally guess and be right.
Each MH command is consistent about how it handles reading the
configuration files and how it takes arguments on the command line.
One useful thing to remember is that you can always add a
to the command to have it display the options
for that command.The first thing that you need to do is to make sure that you have
installed the MH package on your FreeBSD machine. If you installed
from CDROM you should be able to execute the following to load mh:
# pkg_add /cdrom/packages/mh-6.8.3.tgz>
You will notice that it created a /usr/local/lib/mh>
directory for you as well as adding several binaries to the
/usr/local/bin> directory. If you would prefer to compile
it yourself then you can anonymous ftp it from ftp.ics.uci.edu or louie.udel.edu.This primer is not a full comprehensive explanation of how MH
works. This is just intended to get you started on the road to
happier, faster mail reading. You should read the man pages for the
various commands. Also you might want to read the comp.mail.mh newsgroup. Also you can
read the FAQ
for MH. The best resource for MH is the O'Reilly and Associates book
written by Jerry Peek.Reading MailThis section covers how to use inc>,
show>, scan>, next>,
prev>, rmm>, rmf>, and
msgchk>. One of the best things about MH is the
consistent interface between programs. A few things to keep in mind
when using these commands is how to specify message lists. In the
case of inc> this doesn't really make any sense but with
commands like show> it is useful to know. A message list can consist of something like 23 20
16> which will act on messages 23, 20 and 16. This is fairly simple
but you can do more useful things like 23-30> which will
act on all the messages between 23 and 30. You can also specify
something like cur:10> which will act on the current
message and the next 9 messages. The cur>,
last>, and first> messages are special
messages that refer to the current, last or first message in the
folder.inc>, msgchk>—read in your new email or check itIf you just type in inc> and hit return>
you will be well on your way to getting started with MH. The first
time you run inc> it will setup your account to use all
the MH defaults and ask you about creating a Mail directory. If you
have mail waiting to be downloaded you will see something that looks
like:
29 01/15 Doug White Re: Another Failed to boot problem<<On Mon, 15 J
30 01/16 "Jordan K. Hubbar Re: FBSD 2.1<<> Do you want a library instead of
31 01/16 Bruce Evans Re: location of bad144 table<<>> >It would appea
32 01/16 "Jordan K. Hubbar Re: video is up<<> Anyway, mrouted won't run, ev
33 01/16 Michael Smith Re: FBSD 2.1<<Nate Williams stands accused of sa
This is the same thing you will see from a scan> (see
). If you just run inc> with no
arguments it will look on your computer for email that is supposed to
be coming to you.A lot of people like to use POP for grabbing their email. MH can do
POP to grab your email. You will need to give inc> a few command
line arguments.
tempest% inc -host mail.pop.org -user username> -norpop>
That tells inc> to go to mail.pop.org> to
download your email, and that your username on their system is
username>. The option tells
inc> to use plain POP3 for downloading your email. MH has
support for a few different dialects of POP. More than likely you
will never ever need to use them though. While you can do more
complex things with inc such as audit files and scan format files
this will get you going.The msgchk> command is used to get information on
whether or not you have new email. msgchk> takes the same
and options that
inc> takes.show>, next> and prev>—displaying and moving through emailshow> is to show a letter in your current folder.
Like inc>, show> is a fairly straightforward
command. If you just type show> and hit return>
then it displays the current message. You can also give specific
message numbers to show:
tempest% show 32 45 56>
This would display message numbers 32, 45 and 56 right after each
other. Unless you change the default behavior show>
basically just does a more> on the email message.next> is used to move onto the next message and
prev> will go to the previous message. Both commands have
an implied show> command so that when you go to the next
message it automatically displays it.scan>—shows you a scan of your messagesscan> will display a brief listing of the messages
in your current folder. This is an example of what the
scan> command will give you.
30+ 01/16 "Jordan K. Hubbar Re: FBSD 2.1<<> Do you want a library instead of
31 01/16 Bruce Evans Re: location of bad144 table<<>> >It would appea
32 01/16 "Jordan K. Hubbar Re: video is up<<> Anyway, mrouted won't run, ev
33 01/16 Michael Smith Re: FBSD 2.1<<Nate Williams stands accused of sa
Like just about everything in MH this display is very configurable.
This is the typical default display. It gives you the message number,
the date on the email, the sender, the subject line, and a sentence
fragment from the very beginning of the email if it can fit it. The
+> means that message is the current message, so if you do
a show> it will display that message.One useful option for scan is the
option. This will list your messages with the highest message number
first and lowest message number last. Another useful option with
scan> is to have it read from a file. If you want to scan
your incoming mailbox on FreeBSD without having to inc> it
you can do scan -file
/var/mail/username>. This can be used with
any file that is in the mbox> format.rmm> and rmf>—remove the current message or folderrmm> is used to remove a mail message. The default
is typically to not actually remove the message but to rename the
file to one that is ignored by the MH commands. You will need to
through periodically and physically delete the removed>
messages.The rmf> command is used to remove folders. This
doesn't just rename the files but actually removes the from the hard
drive so you should be careful when you use this command.A typical session of reading with MHThe first thing that you will want to do is inc>
your new mail. So at a shell prompt just type in inc> and
hit return>.
tempest% inc>
Incorporating new mail into inbox...
36+ 01/19 "Stephen L. Lange Request...<<Please remove me as contact for pind
37 01/19 Matt Thomas Re: kern/950: Two PCI bridge chips fail (multipl
38 01/19 "Amancio Hasty Jr Re: FreeBSD and VAT<<>>> Bill Fenner said: > In
tempest%
This shows you the new email that has been added to your mailbox. So
the next thing to do is show> the email and move around.
tempest% show>
Received: by sashimi.wwa.com (Smail3.1.29.1 #2)
id m0tdMZ2-001W2UC; Fri, 19 Jan 96 13:33 CST
Date: Fri, 19 Jan 1996 13:33:31 -0600 (CST)
From: "Stephen L. Lange" <stvlange@wwa.com>
To: matt@garply.com
Subject: Request...
Message-Id: <Pine.BSD.3.91.960119133211.824A-100000@sashimi.wwa.com>
Mime-Version: 1.0
Content-Type: TEXT/PLAIN; charset=US-ASCII
Please remove me as contact for pindat.com
tempest% rmm>
tempest% next>
Received: from localhost (localhost [127.0.0.1]) by whydos.lkg.dec.com (8.6.11/8
.6.9) with SMTP id RAA24416; Fri, 19 Jan 1996 17:56:48 GMT
Message-Id: <199601191756.RAA24416@whydos.lkg.dec.com>
X-Authentication-Warning: whydos.lkg.dec.com: Host localhost didn't use HELO pro
tocol
To: hsu@clinet.fi
Cc: hackers@FreeBSD.org
Subject: Re: kern/950: Two PCI bridge chips fail (multiple multiport ethernet
boards)
In-Reply-To: Your message of "Fri, 19 Jan 1996 00:18:36 +0100."
<199601182318.AA11772@Sysiphos>
X-Mailer: exmh version 1.5omega 10/6/94
Date: Fri, 19 Jan 1996 17:56:40 +0000
From: Matt Thomas <matt@lkg.dec.com>
Sender: owner-hackers@FreeBSD.org
Precedence: bulk
This is due to a typo in pcireg.h (to
which I am probably the guilty party).The rmm> removed the current message and the
next> command moved me on to the next message.
Now if I wanted to look at ten most recent messages so I could read
one of them here is what I would do:
tempest% scan last:10>
26 01/16 maddy Re: Testing some stuff<<yeah, well, Trinity has
27 01/17 Automatic digest NET-HAPPENINGS Digest - 16 Jan 1996 to 17 Jan 19
28 01/17 Evans A Criswell Re: Hey dude<<>From matt@tempest.garply.com Tue
29 01/16 Karl Heuer need configure/make volunteers<<The FSF is looki
30 01/18 Paul Stephanouk Re: [alt.religion.scientology] Raw Meat (humor)<
31 01/18 Bill Lenherr Re: Linux NIS Solaris<<--- On Thu, 18 Jan 1996 1
34 01/19 John Fieber Re: Stuff for the email section?<<On Fri, 19 Jan
35 01/19 support@foo.garpl [garply.com #1138] parlor<<Hello. This is the Ne
37+ 01/19 Matt Thomas Re: kern/950: Two PCI bridge chips fail (multipl
38 01/19 "Amancio Hasty Jr Re: FreeBSD and VAT<<>>> Bill Fenner said: > In
tempest%
Then if I wanted to read message number 27 I would do a
show 27> and it would be displayed. As you can probably
tell from this sample session MH is pretty easy to use and looking
through emails and displaying them is fairly intuitive and easy.
Folders and Mail SearchingAnybody who gets lots of email definitely wants to be able to
prioritize, stamp, brief, de-brief, and number their emails in a
variety of different ways. MH can do this better than just about
anything. One thing that we haven't really talked about is the
concept of folders. You have undoubtedly come across the folders
concept using other email programs. MH has folders too. MH can even
do sub-folders of a folder. One thing you should keep in mind with MH
is that when you ran inc> for the first time and it asked
you if it could create a Mail> directory it began storing
everything in that directory. If you look at that directory you will
find a directory named inbox>. The inbox>
directory houses all of your incoming mail that hasn't been thrown
anywhere else.Whenever you create a new folder a new directory is going to be
created underneath your MH Mail> directory, and messages
in that folder are going to be stored in that directory. When new
email comes in that new email is thrown into your inbox>
directory with a file name that is equivalent to the message number.
So even if you didn't have any of the MH tools to read your email you
could still use standard UNIX commands to munge around in those
directories and just more your files. It's this simplicity that
really gives you a lot of power with what you can do with your
email.Just as you can use message lists like 23 16 42>
with most MH commands there is a folder option you can specify with
just about every MH command. If you do a scan +freebsd> it
will scan your freebsd> folder, and your current folder
will be changed to freebsd>. If you do a show
+freebsd 23 16 42>, show> is going to switch to your
freebsd> folder and display messages 23, 16 and 42. So
remember that pick>—search email that matches certain criteriapick> is one of the more complex commands in the MH
system. So you might want to read the
pick>1>> man page for a
more thorough understanding. At its simplest level you can do
something like
tempest% pick -search pci>
15
42
55
56
57
This will tell pick> to look through every single line in
every message in your current folder and tell you which message
numbers it found the word pci> in. You can then
show> those messages and read them if you wish or
rmm> them. You would have to specify something like
show 15 42 55-57> to display them though. A slightly more
useful thing to do is this:
tempest% pick -search pci -seq pick>
5 hits
tempest% show pick>
This will show you the same messages you just didn't have to work as
hard to do it. The option is really an
abbreviation of and pick> is
just a sequence which contains the message numbers that matched. You
can use sequences with just about any MH command. So you could have
done an rmm pick> and all those messages would be removed
instead. You sequence can be named anything. If you run pick again it
will overwrite the old sequence if you use the same name.Doing a pick -search can be a bit more time
consuming than just searching for message from someone, or to
someone. So pick> allows you to use the following
predefined search criteria:
search based upon who the message is tosearch based on who is in the cc listsearch for who sent the messagesearch for emails with this subjectfind emails with a matching datsearch for any other component in the header. (i.e.
This allows you to do things like
-tempest% pick -to freebsd-hackers@freebsd.org -seq hackers>
+tempest% pick -to freebsd-hackers@FreeBSD.org -seq hackers>
to get a list of all the email send to the FreeBSD hackers mailing
list. pick> also allows you to group these criteria in
different ways using the following options:
… …… &hellip … …
These commands allow you to do things like
tempest% pick -to freebsd-hackers -and -cc freebsd-hackers>
That will grab all the email in your inbox that was sent to
freebsd-hackers or cc'd to that list. The brace options allow you to
group search criteria together. This is sometimes very necessary as
in the following example
tempest% pick -lbrace -to freebsd-hackers -and
-not -cc freebsd-questions -rbrace -and -subject pci>Basically this says pick (to freebsd-hackers and not cc'd on
freebsd-questions) and the subject is pci. It should look through your
folder and find all messages sent to the freebsd-hackers list that
aren't cc'd to the freebsd-questions list that contain something on
pci in the subject line. Ordinarily you might have to worry about
something called operator precedence. Remember in math how you
evaluate from left to right and you do multiplication and division
first and addition and subtraction second? MH has the same type of
rules for pick>. It's fairly complex so you might want to study
the man page. This document is just to help you get acquainted with
MH.folder>, folders>, refile>—three useful programs for folder maintenanceThere are three programs which are primarily just for
manipulating your folders. The folder> program is used to
switch between folders, pack them, and list them. At its simplest
level you can do a folder +newfolder>> and
you will be switched into newfolder>. From there on
out all your MH commands like comp>, repl>,
scan>, and show> will act on that
newfolder> folder.Sometimes when you are reading and deleting messages you will
develop holes> in your folders. If you do a scan>
you might just see messages 34, 35, 36, 43, 55, 56, 57, 80. If you do
a folder -pack this will renumber all your
messages so that there are no holes. It doesn't actually delete any
messages though. So you may need to periodically go through and
physically delete rmm>'d messages.If you need statistics on your folders you can do a
folders> or folder -all to list all
your folders, how many messages they have, what the current message
is in each one and so on. This line of stats it displays for all your
folders is the same one you get when you change to a folder with
folder +foldername>. A folders> command looks
like this:
Folder # of messages ( range ); cur msg (other files)
announce has 1 message ( 1- 1).
drafts has no messages.
f-hackers has 43 messages ( 1- 43).
f-questions has 16 messages ( 1- 16).
inbox+ has 35 messages ( 1- 38); cur= 37.
lists has 8 messages ( 1- 8).
netfuture has 1 message ( 1- 1).
out has 31 messages ( 1- 31).
personal has 6 messages ( 1- 6).
todo has 58 messages ( 1- 58); cur= 1.
TOTAL= 199 messages in 13 folders.
The refile> command is what you use to move messages
between folders. When you do something like refile 23
+netfuture> message number 23 is moved into the
netfuture> folder. You could also do something like
refile 23 +netfuture/latest> which would put message
number 23 in a subfolder called latest> under the
netfuture> folder. If you want to keep a message in the
current folder and link it you can do a refile -link 23
+netfuture which would keep 23 in your current
inbox> but also list in your netfuture>
folder. You are probably beginning to realize some of the really
powerful things you can do with MH.Sending MailEmail is a two way street for most people so you want to be
able to send something back. The way MH handles sending mail can be a
bit difficult to follow at first, but it allows for incredible
flexibility. The first thing MH does is to copy a components file
into your outgoing email. A components file is basically a skeleton
email letter with stuff like the To: and Subject: headers already in
it. You are then sent into your editor where you fill in the header
information and then type the body of your message below the dashed
lines in the message. Then to the whatnow> program. When
you are at the What now? prompt you can tell it to
send>, list>, edit>,
edit>, push>, and quit>. Most of
these commands are self-explanatory. So the message sending process
involves copying a component file, editing your email, and then
telling the whatnow> program what to do with your
email.comp>, forw>, reply>—compose, forward or reply to a message to someoneThe comp> program has a few useful command line
options. The most important one to know right now is the
option. When MH is installed the default
editor is usually a program called prompter> which comes
with MH. It's not a very exciting editor and basically just gets the
job done. So when you go to compose a message to someone you might
want to use comp -editor /usr/bin/vi/> or comp
-editor /usr/local/bin/pico/> instead. Once you have run
comp you are in your editor and you see
something that looks like this:
To:
cc:
Subject:
--------
You need to put the person you are sending the mail to after the
To:> line. It works the same way for the other headers
also, so you would need to put your subject after the
Subject:> line. Then you would just put the body of your
message after the dashed lines. It may seem a bit simplistic since a
lot of email programs have special requesters that ask you for this
information but there really isn't any point to that. Plus this
really gives you excellent flexibility.
-To:freebsd-rave@freebsd.org>
+To:freebsd-rave@FreeBSD.org>
cc:
Subject:And on the 8th day God created the FreeBSD core team>
--------
Wow this is an amazing operating system. Thanks!>
You can now save this message and exit your editor. You will see the
What now?> prompt and you can type in
send> or s> and hit
-return>. Then the freebsd core team will receive their just
+return>. Then the FreeBSD core team will receive their just
rewards. As I mentioned earlier you can also use other commands, for
example quit> if you don't want to send the
message.The forw> command is stunningly similar. The big
difference being that the message you are forwarding is automatically
included in the outgoing message. When you run forw> it
will forward your current message. You can always tell it to forward
something else by doing something like forw 23> and then
message number 23 will be put in your outgoing message instead of the
current message. Beyond those small differences forw>
functions exactly the same as comp>. You go through the
exact same message sending process.The repl> command will reply to whatever your
current message is, unless you give it a different message to reply
to. repl> will do its best to go ahead and fill in some of
the email headers already. So you will notice that the
To:> header already has the address of the recipient in
there. Also the Subject:> line will already be filled in.
You then go about the normal message composition process and you are
done. One useful command line option to know here is the
option. You can use all>,
to>, cc>, me> after the
option to have repl> automatically
add the various addresses to the cc list in the message. You have
probably noticed that the original message isn't included. This is
because most MH setups are configured to do this from the
start.components>, and replcomps>—components files for comp> and repl>The components> file is usually in
/usr/local/lib/mh. You can copy that file into
your MH Mail directory and edit to contain what you want it to
contain. It is a fairly basic file. You have various email headers at
the top, a dashed line and then nothing. The
comp command just copies this
components> file and then edits it. You can add any
kind of valid RFC822 header you want. For instance you could have
something like this in your components> file:
To:
Fcc: out
Subject:
X-Mailer: MH 6.8.3
-X-Home-Page: http://www.freebsd.org/
+X-Home-Page: http://www.FreeBSD.org/
-------
MH would then copy this components file and throw you into your
editor. The components> file is fairly simple. If you
wanted to have a signature on those messages you would just put your
signature in that components> file.The replcomps> file is a bit more complex. The default
replcomps> looks like this:
%(lit)%(formataddr %<{reply-to}%?{from}%?{sender}%?{return-path}%>)\
%<(nonnull)%(void(width))%(putaddr To: )\n%>\
%(lit)%(formataddr{to})%(formataddr{cc})%(formataddr(me))\
%<(nonnull)%(void(width))%(putaddr cc: )\n%>\
%<{fcc}Fcc: %{fcc}\n%>\
%<{subject}Subject: Re: %{subject}\n%>\
%<{date}In-reply-to: Your message of "\
%<(nodate{date})%{date}%|%(pretty{date})%>."%<{message-id}
%{message-id}%>\n%>\
--------
It's in the same basic format as the components> file but
it contains quite a few extra formatting codes. The
%(lit)> command makes room for the address. The
%(formataddr> is a function that returns a proper email
address. The next part is %< which means if and
the {reply-to}> means the reply-to field in the original
message. So that might be translated this way:
%<if {reply-to} the original message has a reply-to
then give that to formataddr, %? else {from} take the
from address, %? else {sender} take the sender address, %?
else {return-path} take the return-path from the original
message, %> endif.As you can tell MH formatting can get rather involved. You can
probably decipher what most of the other functions and variables
mean. All of the information on writing these format strings is in the
MH-Format man page. The really nice thing is that once you have built
your customized replcomps> file you won't need to touch it
again. No other email program really gives you the power and
flexibility that MH gives you.
diff --git a/en_US.ISO_8859-1/articles/multi-os/article.sgml b/en_US.ISO_8859-1/articles/multi-os/article.sgml
index 3172597322..f73eebeebe 100644
--- a/en_US.ISO_8859-1/articles/multi-os/article.sgml
+++ b/en_US.ISO_8859-1/articles/multi-os/article.sgml
@@ -1,682 +1,682 @@
-
+
Installing and Using FreeBSD With Other Operating SystemsJayRichmondjayrich@sysc.com6 August 1996This document discusses how to make FreeBSD coexist
nicely with other popular operating systems such as Linux, MS-DOS,
OS/2, and Windows 95. Special thanks to: Annelise Anderson
andrsn@stanford.edu, Randall Hopper
rhh@ct.picker.com, and Jordan K. Hubbard
jkh@time.cdrom.comOverviewMost people can't fit these operating systems together
comfortably without having a larger hard disk, so special
information on large EIDE drives is included. Because there are so
many combinations of possible operating systems and hard disk
configurations, the section may be of the most use
to you. It contains descriptions of specific working computer setups
that use multiple operating systems.This document assumes that you have already made room on your
hard disk for an additional operating system. Any time you
repartition your hard drive, you run the risk of destroying the data
on the original partitions. However, if your hard drive is completely
occupied by DOS, you might find the FIPS utility (included on the
FreeBSD CD-ROM in the \TOOLS directory or via
-ftp)
+ftp)
useful. It lets you repartition your hard disk without destroying the
data already on it. There is also a commercial program available
called Partition Magic, which lets you size and delete partitions
without consequence.Overview of Boot ManagersThese are just brief descriptions of some of the different boot
managers you may encounter. Depending on your computer setup, you may
find it useful to use more than one of them on the same
system.Boot EasyThis is the default boot manager used with FreeBSD. It has the
ability to boot most anything, including BSD, OS/2 (HPFS), Windows 95
(FAT and FAT32), and Linux. Partitions are selected with the
function keys.OS/2 Boot ManagerThis will boot FAT, HPFS, FFS (FreeBSD), and EXT2
(Linux). It will also boot FAT32 partitions. Partitions are
selected using arrow keys. The OS/2 Boot Manager is the only one to
use its own separate partition, unlike the others which use the
master boot record (MBR). Therefore, it must be installed below the
1024th cylinder to avoid booting problems. It can boot Linux using
LILO when it is part of the boot sector, not the MBR. Go to Linux HOWTOs
on the World Wide Web for more information on booting Linux with
OS/2's boot manager.OS-BSThis is an alternative to Boot Easy. It gives you
more control over the booting process, with the ability to set the
default partition to boot and the booting timeout. The beta version
of this programs allows you to boot by selecting the OS with your
arrow keys. It is included on the FreeBSD CD in the
\TOOLS directory, and via ftp.
+URL="ftp://ftp.FreeBSD.org/pub/FreeBSD/tools">ftp.
LILO, or LInux LOaderThis is a limited boot manager. Will boot FreeBSD, though some
customization work is required in the LILO configuration file.About FAT32FAT32 is the replacement to
the FAT filesystem included in Microsoft's OEM SR2 Beta release,
which is expected to utilitized on computers pre-loaded with Windows
95 towards the end of 1996. It converts the normal FAT file system
and allows you to use smaller cluster sizes for larger hard drives.
FAT32 also modifies the traditional FAT boot sector and allocation
table, making it incompatible with some boot managers.A Typical InstallationLet's say I have two large EIDE hard drives, and I want to
install FreeBSD, Linux, and Windows 95 on them.Here's how I might do it using these hard disks:
/dev/wd0> (first physical hard disk)/dev/wd1> (second hard disk)Both disks have 1416 cylinders.I boot from a MS-DOS or Windows 95 boot disk that
contains the FDISK.EXE> utility and make a small 50 meg
primary partition (35-40 for Windows 95, plus a little breathing
room) on the first disk. Also create a larger partition on the
second hard disk for my Windows applications and data.I reboot and install Windows 95 (easier said than done)
on the C:> partition.The next thing I do is install Linux. I'm not sure about
all the distributions of Linux, but slackware includes LILO (see
). When I am partitioning out my hard disk with
Linux fdisk, I would put all of Linux on the first
drive (maybe 300 megs for a nice root partition and some swap
space).After I install Linux, and are prompted about installing
LILO, make SURE that I install it on the boot sector of my root
Linux partition, not in the MBR (master boot record).The remaining hard disk space can go to FreeBSD. I also
make sure that my FreeBSD root slice does not go beyond the 1024th
cylinder. (The 1024th cylinder is 528 megs into the disk with our
hypothetical 720MB disks). I will use the rest of the hard drive
(about 270 megs) for the /usr> and /> slices
if I wish. The rest of the second hard disk (size depends on the
amount of my Windows application/data partition that I created in
step 1 can go to the /usr/src> slice and swap
space.When viewed with the Windows 95 fdisk> utility, my hard drives
should now look something like this:
---------------------------------------------------------------------
Display Partition Information
Current fixed disk drive: 1
Partition Status Type Volume_Label Mbytes System Usage
C: 1 A PRI DOS 50 FAT** 7%
2 A Non-DOS (Linux) 300 43%
Total disk space is 696 Mbytes (1 Mbyte = 1048576 bytes)
Press Esc to continue
---------------------------------------------------------------------
Display Partition Information
Current fixed disk drive: 2
Partition Status Type Volume_Label Mbytes System Usage
D: 1 A PRI DOS 420 FAT** 60%
Total disk space is 696 Mbytes (1 Mbyte = 1048576 bytes)
Press Esc to continue
---------------------------------------------------------------------
** May say FAT16 or FAT32 if you are using the OEM SR2 update.
See ).Install FreeBSD. I make sure to boot with my first hard
disk set at NORMAL> in the BIOS. If it is not, I'll have
the enter my true disk geometry at boot time (to get this, boot
Windows 95 and consult Microsoft Diagnostics (MSD.EXE>),
or check your BIOS) with the parameter hd0=1416,16,63>
where 1416> is the number of cylinders on my hard
disk, 16> is the number of heads per track, and
63> is the number of sectors per track on the
drive.When partitioning out the hard disk, I make sure to install
Boot Easy on the first disk. I don't worry about the second disk,
nothing is booting off of it.When I reboot, Boot Easy should recognize my three
bootable partitions as DOS (Windows 95), Linux, and BSD
(FreeBSD).Special ConsiderationsMost operating systems are very picky about where and how they are
placed on the hard disk. Windows 95 and DOS need to be on the first
primary partitiin on the first hard disk. OS/2 is the exception. It
can be installed on the first or second disk in a primary or extended
partition. If you are not sure, keep the beginning of the bootable
partitions below the 1024th cylinder.If you install Windows 95 on an existing BSD system, it will
destroy> the MBR, and you will have to reinstall your
previous boot manager. Boot Easy can be reinstalled by using the
BOOTINST.EXE utility included in the \TOOLS directory on the CD-ROM,
and via ftp. You can
+URL="ftp://ftp.FreeBSD.org/pub/FreeBSD/tools">ftp. You can
also re-start the installation process and go to the partition
editor. From there, mark the FreeBSD partition as bootable,
select Boot Manager, and then type W to (W)rite out the information
to the MBR. You can now reboot, and Boot Easy should then
recognize Windows 95 as DOS.Please keep in mind that OS/2 can read FAT and HPFS partitions,
but not FFS (FreeBSD) or EXT2 (Linux) partitions. Likewise, Windows
95 can only read and write to FAT and FAT32 (see ) partitions. FreeBSD can read most file systems, but
currently cannot read HPFS partitions. Linux can read HPFS
partitions, but can't write to them. Recent versions of the Linux
kernel (2.x) can read and write to Windows 95 VFAT partitions (VFAT
is what gives Windows 95 long file names - it's pretty much the same
as FAT). Linux can read and write to most file systems. Got that?
I hope so.Examples(section needs work, please send your example to
jayrich@sysc.com).FreeBSD+Win95: If you installed FreeBSD after Windows 95, you
should see DOS> on the Boot Easy menu. This is Windows
95. If you installed Windows 95 after FreeBSD, read above. As long as your hard disk does not have 1024
cylinders you should not have a problem booting. If one of your
partitions goes beyond the 1024th cylinder however, and you get
messages like invalid system disk> under DOS (Windows 95)
and FreeBSD will not boot, try looking for a setting in your BIOS
called > 1024 cylinder support> or NORMAL/LBA>
mode. DOS may need LBA (Logical Block Addressing) in order to boot
correctly. If the idea of switching BIOS settings every time you
boot up doesn't appeal to you, you can boot FreeBSD through DOS via
the FBSDBOOT.EXE> utility on the CD (It should find your
FreeBSD partition and boot it.)FreeBSD+OS/2+Win95: Nothing new here. OS/2's boot manger
can boot all of these operating systems, so that shouldn't be a
problem.FreeBSD+Linux: You can also use Boot Easy to boot both operating
systems.FreeBSD+Linux+Win95: (see )Other Sources of HelpThere are many Linux HOW-TOs that
deal with multiple operating systems on the same hard disk.The Linux+DOS+Win95+OS2
mini-HOWTO offers help on configuring the OS/2 boot manager, and the
Linux+FreeBSD
mini-HOWTO might be interesting as well. The Linux-HOWTO is
also helpful.The NT Loader
Hacking Guide provides good information on multibooting
Windows NT, '95, and DOS with other operating systems.And Hale Landis's "How It Works" document pack contains some good info
on all sorts of disk geometry and booting related topics. Here are a few
links that might help you find it: ftp://fission.dt.wdc.com/pub/otherdocs/pc_systems/how_it_works/allhiw.zip,
http://www.cs.yorku.ca/People/frank/docs/.Finally, don't overlook FreeBSD's kernel documentation on the booting
procedure, available in the kernel source distribution (it unpacks to
file:/usr/src/sys/i386/boot/biosboot/README.386BSD.Technical Details(Contributed by Randall Hopper,
rhh@ct.picker.com)This section attempts to give you enough basic information
about your hard disks and the disk booting process so that you can
troubleshoot most problems you might encounter when getting set up to
boot several operating systems. It starts in pretty basic terms, so
you may want to skim down in this section until it begins to look
unfamiliar and then start reading.Disk PrimerThree fundamental terms are used to describe the location of
data on your hard disk: Cylinders, Heads, and Sectors. It's not
particularly important to know what these terms relate to except to
know that, together, they identify where data is physically on your
disk.Your disk has a particular number of cylinders, number of
heads, and number of sectors per cylinder-head (a cylinder-head also
known nown as a track). Collectively this information defines the
"physical disk geometry" for your hard disk. There are typically 512
bytes per sector, and 63 sectors per track, with the number of
cylinders and heads varying widely from disk to disk. Thus you can
figure the number of bytes of data that'll fit on your own disk by
calculating: (# of cylinders) × (#
heads) × (63 sectors/track) × (512
bytes/sect)> For example, on my 1.6 Gig Western
Digital AC31600 EIDE hard disk,that's: (3148
cyl) × (16 heads) × (63 sectors/track) × (512
bytes/sect)which is 1,624,670,208 bytes, or around 1.6 Gig.You can find out the physical disk geometry (number of
cylinders, heads, and sectors/track counts) for your hard disks using
ATAID or other programs off the net. Your hard disk probably came
with this information as well. Be careful though: if you're using
BIOS LBA (see ), you can't use just any
program to get the physical geometry. This is because many programs
(e.g. MSD.EXE> or FreeBSD fdisk) don't identify the
physical disk geometry; they instead report the
translated geometry> (virtual numbers from using LBA).
Stay tuned for what that means.One other useful thing about these terms. Given 3
numbers—a cylinder number, a head number, and a
sector-within-track number—you identify a specific absolute
sector (a 512 byte block of data) on your disk. Cylinders and Heads
are numbered up from 0, and Sectors are numbered up from 1.For those that are interested in more technical details,
information on disk geometry, boot sectors, BIOSes, etc. can be found
all over the net. Query Lycos, Yahoo, etc. for boot
sector> or master boot record>. Among the useful info
you'll find are Hale Landis's How It Works> document
pack. See the section for a few pointers to
this pack.Ok, enough terminology. We're talking about booting
here.The Booting ProcessOn the first sector of your disk (Cyl 0, Head 0, Sector 1)
lives the Master Boot Record (MBR). It contains a map of your disk.
It identifies up to 4 partitions>, each of which is a
contiguous chunk of that disk. FreeBSD calls partitions
slices> to avoid confusion with it's own partitions, but
we won't do that here. Each partition can contain its own operating
system.Each partition entry in the MBR has a Partition
ID>, a Start Cylinder/Head/Sector>, and an
End Cylinder/Head/Sector>. The Partition ID tells what
type of partition it is (what OS) and the Start/End tells where it
is. lists a smattering of some common
Partition IDs.
Partition IDs>
ID (hex)Description01Primary DOS12 (12-bit FAT)04Primary DOS16 (16-bit FAT)05Extended DOS06Primary big DOS (> 32MB)0AOS/283Linux (EXT2FS)A5FreeBSD, NetBSD, 386BSD (UFS)
Note that not all partitions are bootable (e.g. Extended DOS).
Some are—some aren't. What makes a partition bootable is the
configuration of the Partition Boot Sector> that exists
at the beginning of each partition.When you configure your favorite boot manager, it looks up the entries
in the MBR partition tables of all your hard disks and lets you name the
entries in that list. Then when you boot, the boot manager is invoked by
special code in the Master Boot Sector of the first probed hard disk on
your system. It looks at the MBR partition table entry corresponding to
the partition choice you made, uses the Start Cylinder/Head/Sector
information for that partition, loads up the Partition Boot Sector for that
partition, and gives it control. That Boot Sector for the partition itself
contains enough information to start loading the operating system on that
partition.One thing we just brushed past that's important to know. All of your
hard disks have MBRs. However, the one that's important is the one on the
disk that's first probed by the BIOS. If you have only IDE hard disks, its
the first IDE disk (e.g. primary disk on first controller). Similarly for
SCSI only systems. If you have both IDE and SCSI hard disks though, the
IDE disk is typically probed first by the BIOS, so the first IDE disk is
the first probed disk. The boot manager you will install will be hooked into
the MBR on this first probed hard disk that we've just described.Booting Limitations and WarningsNow the interesting stuff that you need to watch out for.The dreaded 1024 cylinder limit and how BIOS LBA helpsThe first part of the booting process is all done through the
BIOS, (if that's a new term to you, the BIOS is a software chip on
your system motherboard which provides startup code for your
computer). As such, this first part of the process is subject to the
limitations of the BIOS interface.The BIOS interface used to read the hard disk during this period
(INT 13H, Subfunction 2) allocates 10 bits to the Cylinder Number, 8
bits to the Head Number, and 6 bits to the Sector Number. This
restricts users of this interface (i.e. boot managers hooked into
your disk's MBR as well as OS loaders hooked into the Boot Sectors)
to the following limits:
1024 cylinders, max256 heads , max64 sectors/track, max (actually 63, 0> isn't
available)Now big hard disks have lots of cylinders but not a lot of
heads, so invariably with big hard disks the number of cylinders is
greater than 1024. Given this and the BIOS interface as is, you
can't boot off just anywhere on your hard disk. The boot code (the
boot manager and the OS loader hooked into all bootable partitions'
Boot Sectors) has to reside below cylinder 1024. In fact, if your
hard disk is typical and has 16 heads, this equates to:
1024 cyl/disk × 16 heads/disk × 63 sect/(cyl-head)
× 512 bytes/sectorwhich is around the often-mentioned 528MB limit.This is where BIOS LBA (Logical Block Addressing) comes in. BIOS LBA
gives the user of the BIOS API calls access to physical cylinders above
1024 though the BIOS interfaces by redefining a cylinder. That is, it
remaps your cylinders and heads, making it appear through the BIOS as
though the disk has fewer cylinders and more heads than it actually
does. In other words, it takes advantage of the fact that hard disks have
relatively few heads and lots of cylinders by shifting the balance between
number of cylinders and number of heads so that both numbers lie below the
above-mentioned limits (1024 cylinders, 256 heads).With BIOS LBA, the hard disk size limitation is virtually
removed (well, pushed up to 8 Gigabytes anyway). If you have an LBA
BIOS, you can put FreeBSD or any OS anywhere you want and not hit the
1024 cylinder limit.To use my 1.6 Gig Western Digital as an example again, it's
physical geometry is:
(3148 cyl, 16 heads, 63 sectors/track, 512 bytes/sector)However, my BIOS LBA remaps this to:
( 787 cyl, 64 heads, 63 sectors/track, 512 bytes/sector)giving the same effective size disk, but with cylinder and head
counts within the BIOS API's range (Incidentally, I have both Linux and
FreeBSD existing on one of my hard disks above the 1024th physical
cylinder, and both operating systems boot fine, thanks to BIOS LBA).Boot Managers and Disk AllocationAnother gotcha to watch out when installing boot managers is
allocating space for your boot manager. It's best to be aware of
this issue up front to save yourself from having to reinstall one or
more of your OSs.If you followed the discussion in
about the Master Boot Sector (where the MBR is), Partition Boot
Sectors, and the booting process, you may have been wondering just
exactly where on your hard disk that nifty boot manager is going to
live. Well, some boot managers are small enough to fit entirely
within the Master Boot Sector (Cylinder 0, Head 0, Sector 0) along
with the partition table. Others need a bit more room and actually
extend a few sectors past the Master Boot Sector in the Cylinder 0
Head 0 track, since that's typically free…typically.That's the catch. Some operating systems (FreeBSD included) let
you start their partitions right after the Master Boot Sector at
Cylinder 0, Head 0, Sector 2 if you want. In fact, if you give
FreeBSD's sysinstall a disk with an empty chunk up front or the whole
disk empty, that's where it'll start the FreeBSD partition by default
(at least it did when I fell into this trap). Then when you go to
install your boot manager, if it's one that occupies a few extra
sectors after the MBR, it'll overwrite the front of the first
partition's data. In the case of FreeBSD, this overwrites the
disk label, and renders your FreeBSD partition unbootable.The easy way to avoid this problem (and leave yourself the
flexibility to try different boot managers later) is just to always
leave the first full track on your disk unallocated when you
partition your disk. That is, leave the space from Cylinder 0, Head
0, Sector 2 through Cylinder 0, Head 0, Sector 63 unallocated, and
start your first partition at Cylinder 0, Head 1, Sector 1.
For what it's worth, when you create a DOS partition at the
front of your disk, DOS leaves this space open by default (this is
why some boot managers assume it's free). So creating a DOS
partition up at the front of your disk avoids this problem
altogether. I like to do this myself, creating 1 Meg DOS partition
up front, because it also avoids my primary DOS drive letters
shifting later when I repartition.For reference, the following boot managers use the
Master Boot Sector to store their code and data:
OS-BS 1.35Boot EasyLILOThese boot managers use a few additional sectors after the
Master Boot Sector:
OS-BS 2.0 Beta 8 (sectors 2-5)OS/2's boot managerWhat if your machine won't boot?At some point when installing boot managers, you might leave the
MBR in a state such that your machine won't boot. This is unlikely,
but possible when re-FDISKing underneath an already-installed boot
manager.If you have a bootable DOS partition on your disk, you can boot
off a DOS floppy, and run:
A:\> FDISK /MBR>to put the original, simple DOS boot code back into the system. You can
then boot DOS (and DOS only) off the hard drive. Alternatively, just
re-run your boot manager installation program off a bootable floppy.
diff --git a/en_US.ISO_8859-1/articles/new-users/article.sgml b/en_US.ISO_8859-1/articles/new-users/article.sgml
index 9c3baeb6b5..89d2522489 100644
--- a/en_US.ISO_8859-1/articles/new-users/article.sgml
+++ b/en_US.ISO_8859-1/articles/new-users/article.sgml
@@ -1,943 +1,943 @@
-
+
For People New to Both FreeBSD and UnixAnneliseAndersonandrsn@andrsn.stanford.eduAugust 15, 1997Congratulations on installing FreeBSD! This
introduction is for people new to both FreeBSD
and Un*x—so it starts with basics. It
assumes you're using version 2.0.5 or later of FreeBSD as distributed
-by Walnut Creek or FreeBSD.ORG, your system (for now) has a single
+by Walnut Creek or FreeBSD.org, your system (for now) has a single
user (you)—and you're probably pretty good with DOS/Windows or
OS/2.Logging in and Getting OutLog in (when you see login:) as a user you created during
installation or as root. (Your FreeBSD
installation will already have an account for root; root can go
anywhere and do anything, including deleting essential files, so be
careful!) The symbols % and # in the following stand for the prompt
(yours may be different), with % indicating an ordinary user and
# indicating root. To log out (and get a new login: prompt) type
# exit
as often as necessary. Yes, press enter after
commands, and remember that Unix is
case-sensitive—exit, not
EXIT.To shut down the machine type:
# /sbin/shutdown -h now
Or to reboot type
# /sbin/shutdown -r now
or
# /sbin/rebootYou can also reboot with
CtrlAltDelete.
Give it a little time to do its work. This is equivalent to
/sbin/reboot in recent releases of FreeBSD, and is
much, much better than hitting the reset button. You don't want to
have to reinstall this thing, do you?Adding A User with Root PrivilegesIf you didn't create any users when you installed the system and
are thus logged in as root, you should probably create a user now with
# adduser
The first time you use adduser, it might ask for some defaults to save. You
might want to make the default shell csh instead of sh, if it suggests
sh as the default. Otherwise just press enter to accept each default.
These defaults are saved in /etc/adduser.conf,
an editable file.Suppose you create a user jack with
full name Jack Benimble. Give jack a password
if security (even kids around who might pound on the keyboard) is an
issue. When it asks you if you want to invite jack into other
groups, type wheelLogin group is ``jack''. Invite jack into other groups: wheel
This will make it possible to log in as jack and
use the su command to become root. Then you won't
get scolded any more for logging in as root.You can quit adduser any time by typing
CtrlC, and at
the end you'll have a chance to approve your new user or simply type
n for no. You might want to create a
second new user (jill?) so that when you edit jack's login files,
you'll have a hot spare in case something goes wrong.Once you've done this, use exit
to get back to a login prompt and log in as
jack. In general, it's a good idea to do as
much work as possible as an ordinary user who doesn't have the
power—and risk—of root.If you already created a user and you want the user to be able
to su to root, you can log in as root
and edit the file /etc/group, adding jack to the
first line (the group wheel). But first you need to practice
vi, the text editor--or use the simpler text
editor, ee, installed on recent version of
FreeBSD.To delete a user, use the rmuser command.Looking AroundLogged in as an ordinary user, look around and try out some
commands that will access the sources of help and information within
FreeBSD.Here are some commands and what they do:
idTells you who you are!pwdShows you where you are—the current
working directory.lsLists the files in the current directory.ls Lists the files in the current directory with a
* after executables, a / after
directories, and an @ after symbolic links.ls Lists the files in long format—size,
date, permissions.ls Lists hidden dot
files with the others. If you're root, thedot files
show up without the switch.cdChanges directories. cd
.. backs up one level; note the
space after cd. cd
/usr/local goes there. cd
~ goes to the home directory of the
person logged in—e.g., /usr/home/jack.
Try cd /cdrom, and then
ls, to find out if your CDROM is mounted and
working.view filenameLets you look at a file (named
filename without changing it. Try
view /etc/fstab.
:q to quit.cat filenameDisplays filename on screen. If
it's too long and you can see only the end of it, press
ScrollLock and use the up-arrow to
move backward; you can use ScrollLock with man pages
too. Press ScrollLock again to quit scrolling. You
might want to try cat on some of the dot files in
your home directory—cat
.cshrc, cat
.login, cat
.profile.
You'll notice aliases in .cshrc for some of the
ls commands (they're very convenient).
You can create other aliases by editing .cshrc.
You can make these aliases available to all users on the system by
putting them in the system-wide csh configuration file,
/etc/csh.cshrc.Getting Help and InformationHere are some useful sources of help.
Text stands for something of your choice
that you type in—usually a command or filename.apropos textEverything containing string text
in the whatis database.man textThe man page for text. The major
source of documentation for Un*x systems. man
ls will tell you all the ways to use
the ls command. Press Enter to
move through text,
Ctrlb to go
back a page, Ctrlf to
go forward, q or
Ctrlc to
quit.which textTells you where in the user's path the command
text is found.locate textAll the paths where the string text
is found.whatis textTells you what the command text
does and its man page. Typing whatis * will tell
you about all the binaries in the current directory.whereis textFinds the file text, giving its full
path.You might want to try using whatis on some
common useful commands like cat,
more, grep,
mv, find,
tar, chmod,
chown, date, and
script. more lets you read a
page at a time as it does in DOS, e.g., ls -l |
more or more
filename. The
* works as a wildcard—e.g., ls
w* will show you files beginning with
w.Are some of these not working very well? Both
locate and whatis
depend on a database that's rebuilt weekly. If your machine isn't
going to be left on over the weekend (and running FreeBSD), you might
want to run the commands for daily, weekly, and monthly maintenance
now and then. Run them as root and give each one time to finish
before you start the next one, for now.
# /etc/dailyoutput omitted
# /etc/weeklyoutput omitted
# /etc/monthlyoutput omittedIf you get tired waiting, press
AltF2 to get
another virtual console, and log in again.
After all, it's a multi-user, multi-tasking system. Nevertheless
these commands will probably flash messages on your screen while
they're running; you can type clear at the prompt
to clear the screen. Once they've run, you might want to look at
/var/mail/root and
/var/log/messages.Basically running such commands is part of system
administration—and as a single user of a Unix system, you're
your own system administrator. Virtually everything you need to be
root to do is system administration. Such responsibilities aren't
covered very well even in those big fat books on Unix, which seem to
devote a lot of space to pulling down menus in windows managers. You
might want to get one of the two leading books on systems
administration, either Evi Nemeth et.al.'s UNIX System
Administration Handbook (Prentice-Hall, 1995, ISBN
0-13-15051-7)—the second edition with the red cover; or
Æleen Frisch's Essential System
Administration (O'Reilly & Associates, 1993, ISBN
0-937175-80-3). I used Nemeth.Editing TextTo configure your system, you need to edit text files. Most of
them will be in the /etc directory; and you'll
need to su to root to be able to change them. You
can use the easy ee, but in the long run the
text editor vi is worth learning. There's an
excellent tutorial on vi in
/usr/src/contrib/nvi/docs/tutorial if you have
that installed; otherwise you can get it by ftp to
ftp.cdrom.com in the directory
FreeBSD/FreeBSD-current/src/contrib/nvi/docs/tutorial.Before you edit a
file, you should probably back it up. Suppose you want to edit
/etc/rc.conf. You could just use cd
/etc to get to the /etc directory and
do:
# cp rc.conf rc.conf.orig
This would copy rc.conf to
rc.conf.orig, and you could later copy
rc.conf.orig to rc.conf to recover the original. But even
better would be moving (renaming) and then copying back:
# mv rc.conf rc.conf.orig
# cp rc.conf.orig rc.conf
because the mv command preserves the original date
and owner of the file. You can now edit
rc.conf. If you want the original back, you'd
then mv rc.conf rc.conf.myedit
(assuming you want to preserve your edited version) and then
# mv rc.conf.orig rc.conf
to put things back the way they were.To edit a file, type
# vi filename
Move through the text with the arrow keys. Esc (the
escape key) puts vi in command mode. Here are some
commands:
xdelete letter the cursor is ondddelete the entire line (even if it wraps on the screen)iinsert text at the cursorainsert text after the cursor
Once you type i or a, you can enter text.
Esc puts you back in command mode where you can type
:wto write your changes to disk and continue editing:wqto write and quit:q!to quit without saving changes/textto move the cursor to text;
/Enter (the enter key) to find
the next instance of text.Gto go to the end of the filenGto go to line n in
the file, where n is a numberCtrl>L>to redraw the screenCtrl>b>> and Ctrl>f>>go back
and forward a screen, as they
do with more> and view>.Practice with vi> in your home directory by creating
a new file with vi filename>> and adding
and deleting text, saving the file, and calling it up again.
vi> delivers some surprises because it's really quite
complex, and sometimes you'll inadvertently issue a command that will
do something you don't expect. (Some people actually like
vi>—it's more powerful than DOS EDIT—find out
about the :r> command.) Use Esc> one or
more times to be sure you're in command mode and proceed from there
when it gives you trouble, save often with :w>, and
use :q!> to get out and start over (from
your last :w>) when you need to.Now you can cd> to /etc,
su> to root, use vi> to edit the file
/etc/group, and add a user to wheel so the user
has root privileges. Just add a comma and the user's login name to
the end of the first line in the file, press Esc>, and use
:wq> to write the file to disk and quit. Instantly
effective. (You didn't put a space after the comma, did you?)Printing Files from DOSAt this point you probably don't have the printer working, so here's a
way to create a file from a man page, move it to a floppy, and then
print it from DOS. Suppose you want to read carefully about changing
permissions on files (pretty important). You can use the command
man chmod to read about it. The command
# man chmod | col -b > chmod.txt>
will remove formatting codes and send the man page to
the chmod.txt file
instead of showing it on your screen. Now put a dos-formatted
diskette in your floppy drive a, su> to
root, and type
# /sbin/mount -t msdos /dev/fd0 /mnt>
to mount the floppy drive on /mnt.Now (you no longer need to be root, and you can type
exit> to get back to being user jack) you can go to the
directory where you created chmod.txt and copy the file to the floppy
with:
% cp chmod.txt /mnt>
and use ls /mnt to get a directory listing of
/mnt, which should show the file
chmod.txt.You might especially want to make a file from
/sbin/dmesg by typing
% /sbin/dmesg > dmesg.txt>
and copying dmesg.txt to the floppy.
/sbin/dmesg is the boot log record, and it's
useful to understand it because it shows what FreeBSD found when it
booted up. If you ask questions on
-freebsd-questions@FreeBSD.ORG> or on a USENET
+freebsd-questions@FreeBSD.org> or on a USENET
group—like FreeBSD isn't finding my tape drive, what do
I do?—people will want to know what dmesg>
has to say.You can now dismount the floppy drive (as root) to get the disk
out with
# /sbin/umount /mnt>
and reboot to go to DOS. Copy these files to a DOS directory, call
them up with DOS EDIT, Windows Notepad or Wordpad, or a word processor, make a
minor change so the file has to be saved, and print as you normally
would from DOS or Windows. Hope it works! man pages come out best if
printed with the dos print> command. (Copying files from
FreeBSD to a mounted dos partition is in some cases still a little
risky.)Getting the printer printing from FreeBSD involves creating an
appropriate entry in /etc/printcap and creating
a matching spool directory in
/var/spool/output. If your printer is on
lpt0> (what dos calls LPT1>), you may only
need to go to /var/spool/output and (as root)
create the directory lpd> by typing:
mkdir lpd, if it doesn't already
exist.
Then the printer should respond if it's turned on when the system is
booted, and lp or lpr should send a file to the printer. Whether or
not the file actually prints depends on configuring it, which is
covered in the FreeBSD
handbook.>Other Useful Commandsdf>shows file space and mounted systems.ps aux>shows processes running. ps ax> is a narrower form.rm filename>>remove filename>.rm -R dir>>removes a directory dir> and all
subdirectories—careful!ls -Rlists files in the current
directory and all subdirectories;
I used a variant, ls -AFR > where.txt,
to get a list of all
the files in / and (separately)
/usr before I found better
ways to find files.passwd>to change user's password (or root's password)man hier>man page on the Unix file systemUse find> to locate filename in /usr
or any of its subdirectories with
% find /usr -name "filename>">
You can use * as a wildcard in
"filename>"> (which should be in
quotes). If you tell find to search in /
instead of /usr it will look for the file(s) on
all mounted file systems, including the CDROM and the dos
partition.An excellent book that explains Unix commands and utilities is
Abrahams & Larson, Unix for the Impatient
(2nd ed., Addison-Wesley, 1996). There's also a lot of Unix
information on the Internet. Try the Unix Reference
Desk.Next StepsYou should now have the tools you need to get around and edit
files, so you can get everything up and running. There is a great
deal of information in the FreeBSD handbook (which is probably on
-your hard drive) and FreeBSD's
+your hard drive) and FreeBSD's
web site. A wide variety of packages and ports are on the
Walnut Creek CDROM as well
as the web site. The handbook tells you more about how to use them
(get the package if it exists, with pkg_add
/cdrom/packages/All/packagename>>,
where packagename is the filename of the
package). The cdrom has lists of the packages and ports with brief
descriptions in cdrom/packages/index,
cdrom/packages/index.txt, and
cdrom/ports/index, with fuller descriptions in
/cdrom/ports/*/*/pkg/DESCR, where the
*s represent subdirectories of kinds of programs
and program names respectively.If you find the handbook too sophisticated (what with
lndir> and all) on installing ports from the cdrom,
here's what usually works:Find the port you want, say kermit>. There will be
a directory for it on the cdrom. Copy the subdirectory to
/usr/local (a good place for software you add
that should be available to all users) with:
# cp -R /cdrom/ports/comm/kermit /usr/local>
This should result in a /usr/local/kermit
subdirectory that has all the files that the
kermit subdirectory on the CDROM has.Next, create the directory /usr/ports/distfiles
if it doesn't already exist using mkdir>. Now check
check /cdrom/ports/distfiles for a
file with a name that indicates it's the port you want. Copy that
file to /usr/ports/distfiles; in recent versions
you can skip this step, as FreeBSD will do it for you.
In the case of kermit>, there is no
distfile.Then cd> to the subdirectory of
/usr/local/kermit that has the file
Makefile>. Type
# make all install>During this process the port will ftp to get any compressed
files it needs that it didn't find on the cdrom or in
/usr/ports/distfiles. If you don't have your
network running yet and there was no file for the port in
/cdrom/ports/distfiles, you will have to get
the distfile using another machine and copy it to
/usr/ports/distfiles from a floppy or your dos
partition. Read Makefile> (with cat> or
more> or view>) to find out where to go (the
master distribution site) to get the file and what its name is. Its
name will be truncated when downloaded to DOS, and after you get it
into /usr/ports/distfiles you'll have to rename
it (with the mv> command) to its original name so it can
be found. (Use binary file transfers!) Then go back to
/usr/local/kermit, find the directory with
Makefile>, and type make all install>.The other thing that happens when installing ports or packages
is that some other program is needed. If the installation stops with
a message can't find unzip or whatever, you
might need to install the package or port for unzip before you
continue.Once it's installed type rehash> to make FreeBSD
reread the files in the path so it knows what's there. (If you get a
lot of path not found> messages when you use
whereis> or which, you might want to make additions to the
list of directories in the path statement in
.cshrc in your home directory. The path
statement in Unix does the same kind of work it does in DOS, except
the current directory is not (by default) in the path for security
reasons; if the command you want is in the directory you're in, you
need to type ./ before the command to make it
work; no space after the slash.)You might want to get the most recent version of Netscape from
their ftp site. (Netscape
requires the X Window System.) There's now a FreeBSD version, so look
around carefully. Just use gunzip
filename>> and tar xvf
filename>> on it, move the binary to
/usr/local/bin or some other place binaries are
kept, rehash>, and then put the following lines in
.cshrc in each user's home directory or (easier)
in /etc/csh.cshrc, the system-wide csh start-up
file:
setenv XKEYSYMDB /usr/X11R6/lib/X11/XKeysymDB
setenv XNLSPATH /usr/X11R6/lib/X11/nls>
This assumes that the file XKeysymDB> and the directory
nls> are in /usr/X11R6/lib/X11; if
they're not, find them and put them there.If you originally got Netscape as a port using the CDROM (or
ftp), don't replace /usr/local/bin/netscape with
the new netscape binary; this is just a shell script that sets up the
environmental variables for you. Instead rename the new binary to
netscape.bin and replace the old binary, which
is /usr/local/lib/netscape/netscape.bin.Your Working EnvironmentYour shell is the most important part of your working environment.
In DOS, the usual shell is command.com. The shell is what interprets
the commands you type on the command line, and thus communicates with
the rest of the operating system. You can also write shell
scripts, which are like DOS batch files: a series of commands to be
run without your intervention.Two shells come installed with FreeBSD: csh and sh. csh is good for
command-line work, but scripts should be written with sh (or bash). You can
find out what shell you have by typing echo $SHELL.The csh shell is okay, but tcsh does everything csh does and more. It
It allows you to recall commands with the arrow keys and edit them.
It has tab-key completion
of filenames (csh uses the escape key), and it lets you switch to the
directory you were last in with cd -. It's also much
easier to alter your prompt with tcsh. It makes life a lot easier.Here are the three steps for installing a new shell: 1. Install the shell as a port or a package, just as you
would any other port or package. Use rehash and
which tcsh (assuming you're installing tcsh) to
make sure it got installed. 2. As root, edit /etc/shells, adding
a line in the file for the new shell, in this case /usr/local/bin/tcsh,
and save the file. (Some ports may do this for you.) 3. Use the chsh command to change your shell to
tcsh permanently, or type tcsh at the prompt to
change your shell without logging in again.Note: It can be dangerous to change root's shell
to something other than sh or csh on early versions of FreeBSD and many
other versions of Unix; you may not have a working shell when the system
puts you into single user mode. The solution is to use su -m
to become root, which will give you the tcsh as root, because the shell is part
of the environment. You can make this permanent by adding it to your
.tcshrc file as an alias with alias su su -m.>When tcsh starts up, it will read the
/etc/csh.cshrc and /etc/csh.login
files, as does csh. It will also read the
.login file in your home directory and the
.cshrc
file as well, unless you provide a .tcshrc
file. This you can do by simply copying .cshrc
to .tcshrc.Now that you've installed tcsh, you can adjust your prompt. You can
find the details in the manual page for tcsh, but here is a line to
put in your .tcshrc that will tell you how many
commands you have typed, what time it is, and what directory you are in.
It also produces a > if you're an ordinary user and
a # if you're root, but tsch will do that in any
case:
set prompt = "%h %t %~ %# "This should go in the same place as the existing set prompt line
if there is one, or under "if($?prompt) then" if not.
Comment out the old line; you can always switch back to it if you prefer
it. Don't forget the spaces and quotes. You can get the .tcshrc reread by typing source .tcshrc.You can get a listing of other environmental variables that
have been set by typing env at the prompt. The
result will show you your default editor, pager, and terminal type,
among possibly many others. A useful command if you log in from a
remote location and can't run a program because the terminal isn't
capable is
setenv TERM vt100.OtherAs root, you can dismount the CDROM with /sbin/umount
/cdrom>, take it out of the drive, insert another one, and mount it
with /sbin/mount_cd9660 /dev/cd0a /cdrom> assuming
cd0a> is the device name for your CDROM drive. The
most recent versions of FreeBSD let you mount the cdrom with just
/sbin/mount /cdrom.Using the live file system—the second of FreeBSD's CDROM
disks—is useful if you've got limited space. What is on the
live file system varies from release to release. You might try
playing games from the cdrom. This
involves using lndir>, which gets installed with the X
Window System, to tell the program(s) where to find the necessary
files, because they're in the /cdrom file system
instead of in /usr and its subdirectories, which
is where they're expected to be. Read man lndir>.Comments WelcomeIf you use this guide I'd be interested in knowing where it was
unclear and what was left out that you think should be included, and
if it was helpful. My thanks to Eugene W. Stark, professor of
computer science at SUNY-Stony Brook, and John Fieber for helpful
comments.Annelise Anderson, andrsn@andrsn.stanford.edu>
diff --git a/en_US.ISO_8859-1/articles/programming-tools/article.sgml b/en_US.ISO_8859-1/articles/programming-tools/article.sgml
index 96200e9d95..5a9641729a 100644
--- a/en_US.ISO_8859-1/articles/programming-tools/article.sgml
+++ b/en_US.ISO_8859-1/articles/programming-tools/article.sgml
@@ -1,1835 +1,1835 @@
-
+
A User's Guide to FreeBSD Programming ToolsJamesRaynard
-jraynard@freebsd.org
+jraynard@FreeBSD.orgAugust 17, 19971997James RaynardThis document is an introduction to using some of the programming
tools supplied with FreeBSD, although much of it will be applicable to
many other versions of Unix. It does not attempt to describe
coding in any detail. Most of the document assumes little or no
previous programming knowledge, although it is hoped that most
programmers will find something of value in itIntroductionFreeBSD offers an excellent development environment. Compilers
for C, C++, and Fortran and an assembler come with the basic system,
not to mention a Perl interpreter and classic Unix tools such as
sed> and awk>. If that is not enough, there are
many more compilers and interpreters in the Ports collection. FreeBSD
is very compatible with standards such as POSIX> and
ANSI> C, as well with its own BSD heritage, so it is
possible to write applications that will compile and run with little
or no modification on a wide range of platforms.However, all this power can be rather overwhelming at first if
you've never written programs on a Unix platform before. This
document aims to help you get up and running, without getting too
deeply into more advanced topics. The intention is that this document
should give you enough of the basics to be able to make some sense of
the documentation.Most of the document requires little or no knowledge of
programming, although it does assume a basic competence with using
Unix and a willingness to learn!Introduction to ProgrammingA program is a set of instructions that tell the computer to do
various things; sometimes the instruction it has to perform depends
on what happened when it performed a previous instruction. This
section gives an overview of the two main ways in which you can give
these instructions, or commands as they are usually
called. One way uses an interpreter>, the other a
compiler>. As human languages are too difficult for a
computer to understand in an unambiguous way, commands are usually
written in one or other languages specially designed for the
purpose.InterpretersWith an interpreter, the language comes as an environment, where you
type in commands at a prompt and the environment executes them for
you. For more complicated programs, you can type the commands into a
file and get the interpreter to load the file and execute the commands
in it. If anything goes wrong, many interpreters will drop you into a
debugger to help you track down the problem.The advantage of this is that you can see the results of your
commands immediately, and mistakes can be corrected readily. The
biggest disadvantage comes when you want to share your programs with
someone. They must have the same interpreter, or you must have some
way of giving it to them, and they need to understand how to use it.
Also users may not appreciate being thrown into a debugger if they
press the wrong key! From a performance point of view, interpreters
can use up a lot of memory, and generally do not generate code as
efficiently as compilers.In my opinion, interpreted languages are the best way to start
if you have not done any programming before. This kind of environment
is typically found with languages like Lisp, Smalltalk, Perl and
Basic. It could also be argued that the Unix shell (sh>,
csh>) is itself an interpreter, and many people do in fact
write shell scripts to help with various
housekeeping> tasks on their machine. Indeed, part of the
original Unix philosophy was to provide lots of small utility
programs that could be linked together in shell scripts to perform
useful tasks.Interpreters available with FreeBSDHere is a list of interpreters that are available as FreeBSD
+URL="ftp://ftp.FreeBSD.org:pub/FreeBSD/packages/">FreeBSD
packages, with a brief discussion of some of the more popular
interpreted languages. To get one of these packages, all you need to do is to click on
the hotlink for the package, then run
$ pkg_add package name>as root. Obviously, you will need to have a fully functional FreeBSD
2.1.0 or later system for the package to work!BASIC>Short for Beginner's All-purpose Symbolic Instruction
Code. Developed in the 1950s for teaching University students to
program and provided with every self-respecting personal computer in
the 1980s, BASIC> has been the first programming language
for many programmers. It's also the foundation for Visual
Basic>.The Bywater
+URL="ftp://ftp.FreeBSD.org:pub/FreeBSD/packages/lang/bwbasic-2.10.tgz">Bywater
Basic Interpreter and the Phil
+URL="ftp://ftp.FreeBSD.org:pub/FreeBSD/packages/lang/pbasic-2.0.tgz">Phil
Cockroft's Basic Interpreter (formerly Rabbit Basic) are
available as FreeBSD FreeBSD
+URL="ftp://ftp.FreeBSD.org:pub/FreeBSD/packages/">FreeBSD
packagesLispA language that was developed in the late 1950s as an alternative to
the number-crunching languages that were popular at the time.
Instead of being based on numbers, Lisp is based on lists; in fact
the name is short for List Processing. Very popular in AI
(Artificial Intelligence) circles.Lisp is an extremely powerful and sophisticated language, but
can be rather large and unwieldy. FreeBSD has GNU
+URL="ftp://ftp.FreeBSD.org:pub/FreeBSD/packages/gcl-2.0.tgz">GNU
Common Lisp available as a package.PerlVery popular with system administrators for writing
scripts; also often used on World Wide Web servers for writing CGI>
scripts.Version 4, which is probably still the most widely-used
version, comes with FreeBSD; the newer Perl
+URL="ftp://ftp.FreeBSD.org:pub/FreeBSD/packages/lang/perl-5.001.tgz">Perl
Version 5 is available as a package.SchemeA dialect of Lisp that is rather more compact and
cleaner than Common Lisp. Popular in Universities as it is simple
enough to teach to undergraduates as a first language, while it has a
high enough level of abstraction to be used in research work.FreeBSD has packages of the
-Elk Scheme Interpreter, the
-MIT Scheme Interpreter and the
-SCM Scheme Interpreter.
+Elk Scheme Interpreter, the
+MIT Scheme Interpreter and the
+SCM Scheme Interpreter.Icon
-The Icon Programming Language.
+The Icon Programming Language.Logo
-Brian Harvey's LOGO Interpreter.
+Brian Harvey's LOGO Interpreter.Python
-The Python Object-Oriented Programming Language
+The Python Object-Oriented Programming LanguageCompilersCompilers are rather different. First of all, you write your
code in a file (or files) using an editor. You then run the compiler
and see if it accepts your program. If it did not compile, grit your
teeth and go back to the editor; if it did compile and gave you a
program, you can run it either at a shell command prompt or in a
debugger to see if it works properly.If you run it in
the shell, you may get a core dump.Obviously, this is not quite as direct as using an interpreter.
However it allows you to do a lot of things which are very difficult
or even impossible with an interpreter, such as writing code which
interacts closely with the operating system—or even writing
your own operating system! It's also useful if you need to write very
efficient code, as the compiler can take its time and optimise the
code, which would not be acceptable in an interpreter. And
distributing a program written for a compiler is usually more
straightforward than one written for an interpreter—you can just
give them a copy of the executable, assuming they have the same
operating system as you.Compiled languages include Pascal, C and C++. C and C++ are rather
unforgiving languages, and best suited to more experienced
programmers; Pascal, on the other hand, was designed as an educational
language, and is quite a good language to start with. Unfortunately,
FreeBSD doesn't have any Pascal support, except for a Pascal-to-C
converter in the ports.As the edit-compile-run-debug cycle is rather tedious when
using separate programs, many commercial compiler makers have
produced Integrated Development Environments (IDEs
for short). FreeBSD does not have an IDE> as such; however
it is possible to use Emacs for this purpose. This is discussed in
.Compiling with ccThis section deals only with the GNU compiler for C and C++,
since that comes with the base FreeBSD system. It can be invoked by
either cc> or gcc>. The details of producing a
program with an interpreter vary considerably between interpreters,
and are usually well covered in the documentation and on-line help
for the interpreter.Once you've written your masterpiece, the next step is to convert it
into something that will (hopefully!) run on FreeBSD. This usually
involves several steps, each of which is done by a separate
program.Pre-process your source code to remove comments and do other
tricks like expanding macros in C.
Check the syntax of your code to see if you have obeyed the
rules of the language. If you have not, it will complain!
Convert the source code into assembly
language—this is very close to machine code, but still
understandable by humans. Allegedly.To be strictly
accurate, cc> converts the source code into its own,
machine-independent p-code> instead of assembly language
at this stage.Convert the assembly language into machine
code—yep, we are talking bits and bytes, ones and zeros
here.Check that you have used things like functions and global
variables in a consistent way. For example, if you have called a
non-existent function, it will complain.If you are trying to produce an executable from several
source code files, work out how to fit them all together.Work out how to produce something that the system's run-time
loader will be able to load into memory and run.Finally, write the executable on the file
system.The word compiling> is often used to refer to just
steps 1 to 4—the others are referred to as
linking>. Sometimes step 1 is referred to as
pre-processing> and steps 3-4 as
assembling>.Fortunately, almost all this detail is hidden from you, as
cc> is a front end that manages calling all these programs
with the right arguments for you; simply typing
$ cc foobar.c>will cause foobar.c> to be compiled by all the
steps above. If you have more than one file to compile, just do
something like
$ cc foo.c bar.c>Note that the syntax checking is just that—checking the
syntax. It will not check for any logical mistakes you may have made,
like putting the program into an infinite loop, or using a bubble
sort when you meant to use a binary sort.In case you
didn't know, a binary sort is an efficient way of sorting things into
order and a bubble sort isn't.There are lots and lots of options for cc>, which
are all in the man page. Here are a few of the most important ones,
with examples of how to use them.The output name of the file. If you do not use this
option, cc> will produce an executable called
a.out>.The reasons for this are buried in
the mists of history.$ cc foobar.c> executable is a.out>>
$ cc -o foobar foobar.c> executable is foobar>>Just compile the file, do not link it. Useful for toy
programs where you just want to check the syntax, or if you are using
a Makefile.$ cc -c foobar.cThis will produce an object file> (not an
executable) called foobar.o. This can be linked
together with other object files into an executable.Create a debug version of the executable. This makes
the compiler put information into the executable about which line of
which source file corresponds to which function call. A debugger can
use this information to show the source code as you step through the
program, which is very useful; the disadvantage
is that all this extra information makes the program much bigger.
Normally, you compile with while you are
developing a program and then compile a release
version without when you're satisfied it
works properly.$ cc -g foobar.cThis will produce a debug version of the
program.Note, we didn't use the
flag to specify the executable name, so we will get an executable
called a.out. Producing a debug version called
foobar is left as an exercise for the
reader!Create an optimised version of the executable. The
compiler performs various clever tricks to try and produce an
executable that runs faster than normal. You can add a number after
the to specify a higher level of optimisation,
but this often exposes bugs in the compiler's optimiser. For
instance, the version of cc that comes with the
2.1.0 release of FreeBSD is known to produce bad code with the
option in some circumstances.Optimisation is usually only turned on when compiling a release
version.$ cc -O -o foobar foobar.cThis will produce an optimised version of
foobar.The following three flags will force cc to
check that your code complies to the relevant international standard,
often referred to as the ANSI standard, though
strictly speaking it is an ISO standard.Enable all the warnings which the authors of
cc believe are worthwhile. Despite the name, it
will not enable all the warnings cc is capable
of.Turn off most, but not all, of the non-ANSI> C
features provided by cc. Despite the name, it does
not guarantee strictly that your code will comply to the
standard.Turn off allcc's non-ANSI> C features.Without these flags, cc will allow you to
use some of its non-standard extensions to the standard. Some of
these are very useful, but will not work with other compilers—in
fact, one of the main aims of the standard is to allow people to
write code that will work with any compiler on any system. This is
known as portable code.Generally, you should try to make your code as portable as
possible, as otherwise you may have to completely re-write the
program later to get it to work somewhere else—and who knows
what you may be using in a few years time?$ cc -Wall -ansi -pedantic -o foobar foobar.cThis will produce an executable foobar
after checking foobar.c for standard
compliance.Specify a function library to be used during when
linking.The most common example of this is when compiling a program that
uses some of the mathematical functions in C. Unlike most other
platforms, these are in a separate library from the standard C one
and you have to tell the compiler to add it.The rule is that if the library is called
libsomething.a, you
give cc the argument
. For example,
the math library is libm.a, so you give
cc the argument . A common
gotcha with the math library is that it has to be the
last library on the command line.$ cc -o foobar foobar.c -lmThis will link the math library functions into
foobar.If you are compiling C++ code, you need to add
, or if you are using
FreeBSD 2.2 or later, to the command line argument to link the C++
library functions. Alternatively, you can run c++
instead of cc, which does this for you.
c++ can also be invoked as g++
on FreeBSD.$ cc -o foobar foobar.cc -lg++For FreeBSD 2.1.6 and earlier>
$ cc -o foobar foobar.cc -lstdc++For FreeBSD 2.2 and later>
$ c++ -o foobar foobar.ccEach of these will both produce an executable
foobar from the C++ source file
foobar.cc. Note that, on Unix systems, C++
source files traditionally end in .C,
.cxx or .cc, rather than
the MS-DOS style .cpp
(which was already used for something else). gcc
used to rely on this to work out what kind of compiler to use on the
source file; however, this restriction no longer applies, so you may
now call your C++ files .cpp with
impunity!Common cc Queries and ProblemsQ. I am trying to write a program which uses the
sin() function and I get an error like this.
What does it mean?
/var/tmp/cc0143941.o: Undefined symbol `_sin' referenced from text segmentA. When using mathematical functions like
sin(), you have to tell cc to
link in the math library, like so:
$ cc -o foobar foobar.c -lmQ. All right, I wrote this simple program to practice using
. All it does is raise 2.1 to the power of 6.
#include <stdio.h>
int main() {
float f;
f = pow(2.1, 6);
printf("2.1 ^ 6 = %f\n", f);
return 0;
}
and I compiled it as:
$ cc temp.c -lm
like you said I should, but I get this when I run it:
$ ./a.out
2.1 ^ 6 = 1023.000000This is not the right answer! What is
going on?A. When the compiler sees you call a function, it checks if it
has already seen a prototype for it. If it has not, it assumes the
function returns an int, which is
definitely not what you want here.Q. So how do I fix this?A. The prototypes for the mathematical functions are in
math.h. If you include this file, the compiler
will be able to find the prototype and it will stop doing strange
things to your calculation!
#include <math.h>
#include <stdio.h>
int main() {
...After recompiling it as you did before, run it:
$ ./a.out
2.1 ^ 6 = 85.766121If you are using any of the mathematical functions,
always include math.h and
remember to link in the math library.Q. I compiled a file called foobar.c and I
cannot find an executable called foobar. Where's
it gone?A. Remember, cc will call the executable
a.out unless you tell it differently. Use the
option:
$ cc -o foobar foobar.cQ. OK, I have an executable called foobar,
I can see it when I run ls, but when I type in
foobar at the command prompt it tells me there is
no such file. Why can it not find it?A. Unlike MS-DOS, Unix does not look in the
current directory when it is trying to find out which executable you
want it to run, unless you tell it to. Either type
./foobar, which means run the file called
foobar in the current directory, or
change your PATH
environment variable so that it looks something like
bin:/usr/bin:/usr/local/bin:.
The dot at the end means look in the current directory if it is not in
any of the others.Q. I called my executable test, but
nothing happens when I run it. What is going on?A. Most Unix systems have a program called
test in /usr/bin and the
shell is picking that one up before it gets to checking the current
directory. Either type:
$ ./test
or choose a better name for your program!Q. I compiled my program and it seemed to run all right at
first, then there was an error and it said something about core
dumped. What does that mean?A. The name core dump dates back to the
very early days of Unix, when the machines used core memory for
storing data. Basically, if the program failed under certain
conditions, the system would write the contents of core memory to
disk in a file called core, which the programmer
could then pore over to find out what went wrong.Q. Fascinating stuff, but what I am supposed to do now?A. Use gdb to analyse the core (see ).Q. When my program dumped core, it said something about a
segmentation fault. What's that?A. This basically means that your program tried to perform some sort
of illegal operation on memory; Unix is designed to protect the
operating system and other programs from rogue programs.Common causes for this are:
Trying to write to a NULL pointer, eg
char *foo = NULL;
strcpy(foo, "bang!");Using a pointer that hasn't been initialised, eg
char *foo;
strcpy(foo, "bang!");
The pointer will have some random value that, with luck,
will point into an area of memory that isn't available to
your program and the kernel will kill your program before
it can do any damage. If you're unlucky, it'll point
somewhere inside your own program and corrupt one of your
data structures, causing the program to fail
mysteriously.Trying to access past the end of an array, eg
int bar[20];
bar[27] = 6; Trying to store something in read-only memory, eg
char *foo = "My string";
strcpy(foo, "bang!");
Unix compilers often put string literals like
"My string" into
read-only areas of memory.Doing naughty things with
malloc() and free(), eg
char bar[80];
free(bar);
or
char *foo = malloc(27);
free(foo);
free(foo);Making one of these mistakes will not always lead to an
error, but they are always bad practice. Some systems and
compilers are more tolerant than others, which is why programs
that ran well on one system can crash when you try them on an
another.Q. Sometimes when I get a core dump it says bus
error. It says in my Unix book that this means a hardware
problem, but the computer still seems to be working. Is this
true?A. No, fortunately not (unless of course you really do have a hardware
problem…). This is usually another way of saying that you
accessed memory in a way you shouldn't have.Q. This dumping core business sounds as though it could be quite
useful, if I can make it happen when I want to. Can I do this, or
do I have to wait until there's an error?A. Yes, just go to another console or xterm, do
$ ps
to find out the process ID of your program, and do
$ kill -ABRT pid
where pid is the
process ID you looked up.This is useful if your program has got stuck in an infinite
loop, for instance. If your program happens to trap
SIGABRT, there are several other signals which have
a similar effect.MakeWhat is make?When you're working on a simple program with only one or two source
files, typing in
$ cc file1.c file2.c
is not too bad, but it quickly becomes very tedious when there are
several files—and it can take a while to compile, too.One way to get around this is to use object files and only recompile
the source file if the source code has changed. So we could have
something like:
$ cc file1.o file2.o … file37.c &hellip
if we'd changed file37.c, but not any of the
others, since the last time we compiled. This may speed up the
compilation quite a bit, but doesn't solve the typing
problem.Or we could write a shell script to solve the typing problem, but it
would have to re-compile everything, making it very inefficient on a
large project.What happens if we have hundreds of source files lying about? What if
we're working in a team with other people who forget to tell us when
they've changed one of their source files that we use?Perhaps we could put the two solutions together and write something
like a shell script that would contain some kind of magic rule saying
when a source file needs compiling. Now all we need now is a program
that can understand these rules, as it's a bit too complicated for the
shell.This program is called make. It reads in a
file, called a makefile, that tells it how
different files depend on each other, and works out which files need
to be re-compiled and which ones don't. For example, a rule could say
something like if fromboz.o is older than
fromboz.c, that means someone must have changed
fromboz.c, so it needs to be
re-compiled. The makefile also has rules telling make
how to re-compile the source file, making it a
much more powerful tool.Makefiles are typically kept in the same directory as the
source they apply to, and can be called
makefile, Makefile or
MAKEFILE. Most programmers use the name
Makefile, as this puts it near the top of a
directory listing, where it can easily be seen.They
don't use the MAKEFILE form as block capitals
are often used for documentation files like
README.Example of using makeHere's a very simple make file:
foo: foo.c
cc -o foo foo.c
It consists of two lines, a dependency line and a creation line.The dependency line here consists of the name of the program
(known as the target), followed by a colon,
then whitespace, then the name of the source file. When
make reads this line, it looks to see if
foo exists; if it exists, it compares the time
foo was last modified to the time
foo.c was last modified. If
foo does not exist, or is older than
foo.c, it then looks at the creation line to
find out what to do. In other words, this is the rule for working out
when foo.c needs to be re-compiled.The creation line starts with a tab (press the
tab key) and then the command you would type to
create foo if you were doing it at a command
prompt. If foo is out of date, or does not
exist, make then executes this command to create
it. In other words, this is the rule which tells make how to
re-compile foo.c.So, when you type make, it will make
sure that foo is up to date with respect to your
latest changes to foo.c. This principle can be
extended to Makefiles with hundreds of
targets—in fact, on FreeBSD, it is possible to compile the
entire operating system just by typing make
world in the appropriate directory!Another useful property of makefiles is that the targets don't have
to be programs. For instance, we could have a make file that looks
like this:
foo: foo.c
cc -o foo foo.c
install:
cp foo /home/meWe can tell make which target we want to make by typing:
$ make targetmake will then only look at that target and ignore any
others. For example, if we type make foo with the
makefile above, make will ignore the install target.If we just type make on its own, make
will always look at the first target and then stop without looking at
any others. So if we typed make here, it will
just go to the foo target, re-compile
foo if necessary, and then stop without going on
to the install target.Notice that the install target doesn't
actually depend on anything! This means that the command on the
following line is always executed when we try to make that target by
typing make install. In this case, it will
copy foo into the user's home directory. This is
often used by application makefiles, so that the application can be
installed in the correct directory when it has been correctly
compiled.This is a slightly confusing subject to try and explain. If you
don't quite understand how make works, the best
thing to do is to write a simple program like hello
world and a make file like the one above and experiment. Then
progress to using more than one source file, or having the source
file include a header file. The touch command is
very useful here—it changes the date on a file without you
having to edit it.FreeBSD MakefilesMakefiles can be rather complicated to write. Fortunately,
BSD-based systems like FreeBSD come with some very powerful ones as
part of the system. One very good example of this is the FreeBSD
ports system. Here's the essential part of a typical ports
Makefile:
MASTER_SITES= ftp://freefall.cdrom.com/pub/FreeBSD/LOCAL_PORTS/
DISTFILES= scheme-microcode+dist-7.3-freebsd.tgz
.include <bsd.port.mk>Now, if we go to the directory for this port and type
make, the following happens:A check is made to see if the source code for this port is
already on the system.If it isn't, an FTP connection to the URL in
MASTER_SITES is set up to download the
source.The checksum for the source is calculated and compared it with
one for a known, good, copy of the source. This is to make sure that
the source was not corrupted while in transit.Any changes required to make the source work on FreeBSD are
applied—this is known as patching.Any special configuration needed for the source is done.
(Many Unix program distributions try to work out which version of
Unix they are being compiled on and which optional Unix features are
present—this is where they are given the information in the
FreeBSD ports scenario).The source code for the program is compiled. In effect,
we change to the directory where the source was unpacked and do
make—the program's own make file has the
necessary information to build the program.We now have a compiled version of the program. If we
wish, we can test it now; when we feel confident about the program,
we can type make install. This will cause the
program and any supporting files it needs to be copied into the
correct location; an entry is also made into a package
database, so that the port can easily be uninstalled later
if we change our mind about it.Now I think you'll agree that's rather impressive for a four
line script!The secret lies in the last line, which tells
make to look in the system makefile called
bsd.port.mk. It's easy to overlook this line,
but this is where all the clever stuff comes from—someone has
written a makefile that tells make to do all the
things above (plus a couple of other things I didn't mention,
including handling any errors that may occur) and anyone can get
access to that just by putting a single line in their own make
file!If you want to have a look at these system makefiles, they're
in /usr/share/mk, but it's probably best to wait
until you've had a bit of practice with makefiles, as they are very
complicated (and if you do look at them, make sure you have a flask
of strong coffee handy!)More advanced uses of makeMake is a very powerful tool, and can do much
more than the simple example above shows. Unfortunately, there are
several different versions of make, and they all
differ considerably. The best way to learn what they can do is
probably to read the documentation—hopefully this introduction will
have given you a base from which you can do this.The version of make that comes with FreeBSD is the Berkeley
make; there is a tutorial for it in
/usr/share/doc/psd/12.make. To view it, do
$ zmore paper.ascii.gz
in that directory.Many applications in the ports use GNU
make, which has a very good set of info
pages. If you have installed any of these ports, GNU
make will automatically have been installed as
gmake. It's also available as a port and package
in its own right.To view the info pages for GNU make,
you will have to edit the dir file in the
/usr/local/info directory to add an entry for
it. This involves adding a line like
* Make: (make). The GNU Make utility.
to the file. Once you have done this, you can type
info and then select
make from the menu (or in
Emacs, do C-h
i).DebuggingThe DebuggerThe debugger that comes with FreeBSD is called
gdb (GNU
debugger). You start it up by typing
$ gdb progname
although most people prefer to run it inside
Emacs. You can do this by:
M-x gdb RET progname RETUsing a debugger allows you to run the program under more
controlled circumstances. Typically, you can step through the program
a line at a time, inspect the value of variables, change them, tell
the debugger to run up to a certain point and then stop, and so on.
You can even attach to a program that's already running, or load a
core file to investigate why the program crashed. It's even possible
to debug the kernel, though that's a little trickier than the user
applications we'll be discussing in this section.gdb has quite good on-line help, as well as
a set of info pages, so this section will concentrate on a few of the
basic commands.Finally, if you find its text-based command-prompt style
off-putting, there's a graphical front-end for it xxgdb
in the ports collection.This section is intended to be an introduction to using
gdb and does not cover specialised topics such as
debugging the kernel.Running a program in the debuggerYou'll need to have compiled the program with the
option to get the most out of using
gdb. It will work without, but you'll only see the
name of the function you're in, instead of the source code. If you
see a line like:
… (no debugging symbols found) …when
gdb starts up, you'll know that the program wasn't
compiled with the option.At the gdb prompt, type break
main. This will tell the debugger to skip over the
preliminary set-up code in the program and start at the beginning of
your code. Now type run to start the
program—it will start at the beginning of the set-up code and
then get stopped by the debugger when it calls
main(). (If you've ever wondered where
main() gets called from, now you know!).You can now step through the program, a line at a time, by
pressing n. If you get to a function call, you can
step into it by pressing s. Once you're in a
function call, you can return from stepping into a function call by
pressing f. You can also use up and
down to take a quick look at the caller.Here's a simple example of how to spot a mistake in a program
with gdb. This is our program (with a deliberate
mistake):
#include <stdio.h>
int bazz(int anint);
main() {
int i;
printf("This is my program\n");
bazz(i);
return 0;
}
int bazz(int anint) {
printf("You gave me %d\n", anint);
return anint;
}This program sets i to be 5
and passes it to a function bazz() which prints
out the number we gave it.When we compile and run the program we get
$ cc -g -o temp temp.c
$ ./temp
This is my program
anint = 4231That wasn't what we expected! Time to see what's going
on!$ gdb temp
GDB is free software and you are welcome to distribute copies of it
under certain conditions; type "show copying" to see the conditions.
There is absolutely no warranty for GDB; type "show warranty" for details.
GDB 4.13 (i386-unknown-freebsd), Copyright 1994 Free Software Foundation, Inc.
(gdb) break main> Skip the set-up code>
Breakpoint 1 at 0x160f: file temp.c, line 9. gdb puts breakpoint at main()>>
(gdb) run> Run as far as main()>>
Starting program: /home/james/tmp/temp Program starts running>
Breakpoint 1, main () at temp.c:9 gdb stops at main()>>
(gdb) n> Go to next line>
This is my program Program prints out>
(gdb) s> step into bazz()>>
bazz (anint=4231) at temp.c:17 gdb displays stack frame>
(gdb)Hang on a minute! How did anint get to be
4231? Didn't we set it to be 5
in main()? Let's move up to
main() and have a look.(gdb) up> Move up call stack>
#1 0x1625 in main () at temp.c:11 gdb displays stack frame>
(gdb) p i> Show us the value of i>>
$1 = 4231 gdb displays 4231>>
Oh dear! Looking at the code, we forgot to initialise
i. We meant to put
…>
main() {
int i;
i = 5;
printf("This is my program\n");
&hellip>
but we left the i=5; line out. As we didn't
initialise i, it had whatever number happened to be
in that area of memory when the program ran, which in this case
happened to be 4231.gdb displays the stack frame
every time we go into or out of a function, even if we're using
up and down to move around the
call stack. This shows the name of the function and the values of
its arguments, which helps us keep track of where we are and what's
going on. (The stack is a storage area where the program stores
information about the arguments passed to functions and where to go
when it returns from a function call).Examining a core fileA core file is basically a file which contains the complete
state of the process when it crashed. In the good old
days, programmers had to print out hex listings of core files
and sweat over machine code manuals, but now life is a bit easier.
Incidentally, under FreeBSD and other 4.4BSD systems, a core file is
called progname>.core> instead of just
core, to make it clearer which program a core
file belongs to.To examine a core file, start up gdb in the
usual way. Instead of typing break or
run, type
(gdb) core progname.core
If you're not in the same directory as the core file, you'll have to
do dir /path/to/core/file first.You should see something like this:
$ gdb a.out
GDB is free software and you are welcome to distribute copies of it
under certain conditions; type "show copying" to see the conditions.
There is absolutely no warranty for GDB; type "show warranty" for details.
GDB 4.13 (i386-unknown-freebsd), Copyright 1994 Free Software Foundation, Inc.
(gdb) core a.out.core
Core was generated by `a.out'.
Program terminated with signal 11, Segmentation fault.
Cannot access memory at address 0x7020796d.
#0 0x164a in bazz (anint=0x5) at temp.c:17
(gdb)In this case, the program was called
a.out, so the core file is called
a.out.core. We can see that the program crashed
due to trying to access an area in memory that was not available to
it in a function called bazz.Sometimes it's useful to be able to see how a function was
called, as the problem could have occurred a long way up the call
stack in a complex program. The bt command causes
gdb to print out a back-trace of the call
stack:
(gdb) bt
#0 0x164a in bazz (anint=0x5) at temp.c:17
#1 0xefbfd888 in end ()
#2 0x162c in main () at temp.c:11
(gdb)The end() function is called when
a program crashes; in this case, the bazz()
function was called from main().Attaching to a running programOne of the neatest features about gdb is
that it can attach to a program that's already running. Of course,
that assumes you have sufficient permissions to do so. A common
problem is when you are stepping through a program that forks, and
you want to trace the child, but the debugger will only let you trace
the parent.What you do is start up another gdb, use
ps to find the process ID for the child, and
do(gdb) attach pid
in gdb, and then debug as usual.That's all very well, you're probably thinking,
but by the time I've done that, the child process will be over
the hill and far away. Fear not, gentle reader, here's how to
do it (courtesy of the gdb info pages):
&hellip
if ((pid = fork()) < 0) /* _Always_ check this */
error();
else if (pid == 0) { /* child */
int PauseMode = 1;
while (PauseMode)
sleep(10); /* Wait until someone attaches to us */
&hellip
} else { /* parent */
&hellip
Now all you have to do is attach to the child, set
PauseMode to 0, and
wait for the sleep() call to return!Using Emacs as a Development EnvironmentEmacsUnfortunately, Unix systems don't come with the kind of
everything-you-ever-wanted-and-lots-more-you-didn't-in-one-gigantic-package
integrated development environments that other systems
have.At least, not unless you pay out very large sums
of money. However, it is possible to set up your
own environment. It may not be as pretty, and it may not be quite as
integrated, but you can set it up the way you want it. And it's free.
And you have the source to it.The key to it all is Emacs. Now there are some people who
loathe it, but many who love it. If you're one of the former, I'm
afraid this section will hold little of interest to you. Also, you'll
need a fair amount of memory to run it—I'd recommend 8MB in
text mode and 16MB in X as the bare minimum to get reasonable
performance.Emacs is basically a highly customisable editor—indeed,
it has been customised to the point where it's more like an operating
system than an editor! Many developers and sysadmins do in fact
spend practically all their time working inside Emacs, leaving it
only to log out.It's impossible even to summarise everything Emacs can do here, but
here are some of the features of interest to developers:
Very powerful editor, allowing search-and-replace on
both strings and regular expressions (patterns), jumping to start/end
of block expression, etc, etc.Pull-down menus and online help.Language-dependent syntax highlighting and
indentation.Completely customisable.You can compile and debug programs within
Emacs.On a compilation error, you can jump to the offending
line of source code.Friendly-ish front-end to the info
program used for reading GNU hypertext documentation, including the
documentation on Emacs itself.Friendly front-end to gdb,
allowing you to look at the source code as you step through your
program.You can read Usenet news and mail while your program
is compiling.And doubtless many more that I've overlooked.Emacs can be installed on FreeBSD using the Emacs
port.Once it's installed, start it up and do C-h
t to read an Emacs tutorial—that means hold down
the control key, press h, let go of
the control key, and then press t.
(Alternatively, you can you use the mouse to select Emacs
Tutorial from the Help menu).Although Emacs does have menus, it's well worth learning the
key bindings, as it's much quicker when you're editing something to
press a couple of keys than to try and find the mouse and then click
on the right place. And, when you're talking to seasoned Emacs users,
you'll find they often casually throw around expressions like
M-x replace-s RET foo RET bar RET
so it's useful to know what they mean. And in any case, Emacs has far
too many useful functions for them to all fit on the menu
bars.Fortunately, it's quite easy to pick up the key-bindings, as
they're displayed next to the menu item. My advice is to use the
menu item for, say, opening a file until you understand how it works
and feel confident with it, then try doing C-x C-f. When you're happy
with that, move on to another menu command.If you can't remember what a particular combination of keys
does, select Describe Key from the
Help menu and type it in—Emacs will tell you
what it does. You can also use the Command
Apropos menu item to find out all the commands which
contain a particular word in them, with the key binding next to
it.By the way, the expression above means hold down the
Meta key, press x, release the
Meta key, type replace-s
(short for replace-string—another feature of
Emacs is that you can abbreviate commands), press the
return key, type foo (the
string you want replaced), press the return key,
type bar (the string you want to replace foo with)
and press return again. Emacs will then do the
search-and-replace operation you've just requested.If you're wondering what on earth the Meta key
is, it's a special key that many Unix workstations have.
Unfortunately, PC's don't have one, so it's usually the
alt key (or if you're unlucky, the escape
key).Oh, and to get out of Emacs, do C-x C-c
(that means hold down the control key, press
x, press c and release the
control key). If you have any unsaved files open,
Emacs will ask you if you want to save them. (Ignore the bit in the
documentation where it says C-z is the usual way
to leave Emacs—that leaves Emacs hanging around in the
background, and is only really useful if you're on a system which
doesn't have virtual terminals).Configuring EmacsEmacs does many wonderful things; some of them are built in,
some of them need to be configured.Instead of using a proprietary macro language for
configuration, Emacs uses a version of Lisp specially adapted for
editors, known as Emacs Lisp. This can be quite useful if you want to
go on and learn something like Common Lisp, as it's considerably
smaller than Common Lisp (although still quite big!).The best way to learn Emacs Lisp is to download the Emacs
TutorialHowever, there's no need to actually know any Lisp to get
started with configuring Emacs, as I've included a sample
.emacs file, which should be enough to get you
started. Just copy it into your home directory and restart Emacs if
it's already running; it will read the commands from the file and
(hopefully) give you a useful basic setup.A sample .emacs fileUnfortunately, there's far too much here to explain it in detail;
however there are one or two points worth mentioning.Everything beginning with a ;> is a
comment and is ignored by Emacs.In the first line, the
-*- Emacs-Lisp -*- is so that we can
edit the .emacs file itself within Emacs and get
all the fancy features for editing Emacs Lisp. Emacs usually tries to
guess this based on the filename, and may not get it right for
.emacs. The tab key is bound to an
indentation function in some modes, so when you press the tab key, it
will indent the current line of code. If you want to put a
tab character in whatever you're writing, hold the
control key down while you're pressing the
tab key.This file supports syntax highlighting for C, C++,
Perl, Lisp and Scheme, by guessing the language from the
filename.Emacs already has a pre-defined function called
next-error. In a compilation output window, this
allows you to move from one compilation error to the next by doing
M-n; we define a complementary function,
previous-error, that allows you to go to a
previous error by doing M-p. The nicest feature of
all is that C-c C-c will open up the source file
in which the error occurred and jump to the appropriate
line. We enable Emacs's ability to act as a server, so
that if you're doing something outside Emacs and you want to edit a
file, you can just type in
$ emacsclient filename
and then you can edit the file in your Emacs!Many
Emacs users set their EDITOR environment to
emacsclient so this happens every time they need
to edit a file.A sample .emacs file;; -*-Emacs-Lisp-*-
;; This file is designed to be re-evaled; use the variable first-time
;; to avoid any problems with this.
(defvar first-time t
"Flag signifying this is the first time that .emacs has been evaled")
;; Meta
(global-set-key "\M- " 'set-mark-command)
(global-set-key "\M-\C-h" 'backward-kill-word)
(global-set-key "\M-\C-r" 'query-replace)
(global-set-key "\M-r" 'replace-string)
(global-set-key "\M-g" 'goto-line)
(global-set-key "\M-h" 'help-command)
;; Function keys
(global-set-key [f1] 'manual-entry)
(global-set-key [f2] 'info)
(global-set-key [f3] 'repeat-complex-command)
(global-set-key [f4] 'advertised-undo)
(global-set-key [f5] 'eval-current-buffer)
(global-set-key [f6] 'buffer-menu)
(global-set-key [f7] 'other-window)
(global-set-key [f8] 'find-file)
(global-set-key [f9] 'save-buffer)
(global-set-key [f10] 'next-error)
(global-set-key [f11] 'compile)
(global-set-key [f12] 'grep)
(global-set-key [C-f1] 'compile)
(global-set-key [C-f2] 'grep)
(global-set-key [C-f3] 'next-error)
(global-set-key [C-f4] 'previous-error)
(global-set-key [C-f5] 'display-faces)
(global-set-key [C-f8] 'dired)
(global-set-key [C-f10] 'kill-compilation)
;; Keypad bindings
(global-set-key [up] "\C-p")
(global-set-key [down] "\C-n")
(global-set-key [left] "\C-b")
(global-set-key [right] "\C-f")
(global-set-key [home] "\C-a")
(global-set-key [end] "\C-e")
(global-set-key [prior] "\M-v")
(global-set-key [next] "\C-v")
(global-set-key [C-up] "\M-\C-b")
(global-set-key [C-down] "\M-\C-f")
(global-set-key [C-left] "\M-b")
(global-set-key [C-right] "\M-f")
(global-set-key [C-home] "\M-<")
(global-set-key [C-end] "\M->")
(global-set-key [C-prior] "\M-<")
(global-set-key [C-next] "\M->")
;; Mouse
(global-set-key [mouse-3] 'imenu)
;; Misc
(global-set-key [C-tab] "\C-q\t") ; Control tab quotes a tab.
(setq backup-by-copying-when-mismatch t)
;; Treat 'y' or <CR> as yes, 'n' as no.
(fset 'yes-or-no-p 'y-or-n-p)
(define-key query-replace-map [return] 'act)
(define-key query-replace-map [?\C-m] 'act)
;; Load packages
(require 'desktop)
(require 'tar-mode)
;; Pretty diff mode
(autoload 'ediff-buffers "ediff" "Intelligent Emacs interface to diff" t)
(autoload 'ediff-files "ediff" "Intelligent Emacs interface to diff" t)
(autoload 'ediff-files-remote "ediff"
"Intelligent Emacs interface to diff") (if first-time
(setq auto-mode-alist
(append '(("\\.cpp$" . c++-mode)
("\\.hpp$" . c++-mode)
("\\.lsp$" . lisp-mode)
("\\.scm$" . scheme-mode)
("\\.pl$" . perl-mode)
) auto-mode-alist)))
;; Auto font lock mode
(defvar font-lock-auto-mode-list
(list 'c-mode 'c++-mode 'c++-c-mode 'emacs-lisp-mode 'lisp-mode 'perl-mode 'scheme-mode)
"List of modes to always start in font-lock-mode")
(defvar font-lock-mode-keyword-alist
'((c++-c-mode . c-font-lock-keywords)
(perl-mode . perl-font-lock-keywords))
"Associations between modes and keywords")
(defun font-lock-auto-mode-select ()
"Automatically select font-lock-mode if the current major mode is
in font-lock-auto-mode-list"
(if (memq major-mode font-lock-auto-mode-list)
(progn
(font-lock-mode t))
)
)
(global-set-key [M-f1] 'font-lock-fontify-buffer)
;; New dabbrev stuff
;(require 'new-dabbrev)
(setq dabbrev-always-check-other-buffers t)
(setq dabbrev-abbrev-char-regexp "\\sw\\|\\s_")
(add-hook 'emacs-lisp-mode-hook
'(lambda ()
(set (make-local-variable 'dabbrev-case-fold-search) nil)
(set (make-local-variable 'dabbrev-case-replace) nil)))
(add-hook 'c-mode-hook
'(lambda ()
(set (make-local-variable 'dabbrev-case-fold-search) nil)
(set (make-local-variable 'dabbrev-case-replace) nil)))
(add-hook 'text-mode-hook
'(lambda ()
(set (make-local-variable 'dabbrev-case-fold-search) t)
(set (make-local-variable 'dabbrev-case-replace) t)))
;; C++ and C mode...
(defun my-c++-mode-hook ()
(setq tab-width 4)
(define-key c++-mode-map "\C-m" 'reindent-then-newline-and-indent)
(define-key c++-mode-map "\C-ce" 'c-comment-edit)
(setq c++-auto-hungry-initial-state 'none)
(setq c++-delete-function 'backward-delete-char)
(setq c++-tab-always-indent t)
(setq c-indent-level 4)
(setq c-continued-statement-offset 4)
(setq c++-empty-arglist-indent 4))
(defun my-c-mode-hook ()
(setq tab-width 4)
(define-key c-mode-map "\C-m" 'reindent-then-newline-and-indent)
(define-key c-mode-map "\C-ce" 'c-comment-edit)
(setq c-auto-hungry-initial-state 'none)
(setq c-delete-function 'backward-delete-char)
(setq c-tab-always-indent t)
;; BSD-ish indentation style
(setq c-indent-level 4)
(setq c-continued-statement-offset 4)
(setq c-brace-offset -4)
(setq c-argdecl-indent 0)
(setq c-label-offset -4))
;; Perl mode
(defun my-perl-mode-hook ()
(setq tab-width 4)
(define-key c++-mode-map "\C-m" 'reindent-then-newline-and-indent)
(setq perl-indent-level 4)
(setq perl-continued-statement-offset 4))
;; Scheme mode...
(defun my-scheme-mode-hook ()
(define-key scheme-mode-map "\C-m" 'reindent-then-newline-and-indent))
;; Emacs-Lisp mode...
(defun my-lisp-mode-hook ()
(define-key lisp-mode-map "\C-m" 'reindent-then-newline-and-indent)
(define-key lisp-mode-map "\C-i" 'lisp-indent-line)
(define-key lisp-mode-map "\C-j" 'eval-print-last-sexp))
;; Add all of the hooks...
(add-hook 'c++-mode-hook 'my-c++-mode-hook)
(add-hook 'c-mode-hook 'my-c-mode-hook)
(add-hook 'scheme-mode-hook 'my-scheme-mode-hook)
(add-hook 'emacs-lisp-mode-hook 'my-lisp-mode-hook)
(add-hook 'lisp-mode-hook 'my-lisp-mode-hook)
(add-hook 'perl-mode-hook 'my-perl-mode-hook)
;; Complement to next-error
(defun previous-error (n)
"Visit previous compilation error message and corresponding source code."
(interactive "p")
(next-error (- n)));; Misc...
(transient-mark-mode 1)
(setq mark-even-if-inactive t)
(setq visible-bell nil)
(setq next-line-add-newlines nil)
(setq compile-command "make")
(setq suggest-key-bindings nil)
(put 'eval-expression 'disabled nil)
(put 'narrow-to-region 'disabled nil)
(put 'set-goal-column 'disabled nil)
;; Elisp archive searching
(autoload 'format-lisp-code-directory "lispdir" nil t)
(autoload 'lisp-dir-apropos "lispdir" nil t)
(autoload 'lisp-dir-retrieve "lispdir" nil t)
(autoload 'lisp-dir-verify "lispdir" nil t)
;; Font lock mode
(defun my-make-face (face colour &optional bold)
"Create a face from a colour and optionally make it bold"
(make-face face)
(copy-face 'default face)
(set-face-foreground face colour)
(if bold (make-face-bold face))
)
(if (eq window-system 'x)
(progn
(my-make-face 'blue "blue")
(my-make-face 'red "red")
(my-make-face 'green "dark green")
(setq font-lock-comment-face 'blue)
(setq font-lock-string-face 'bold)
(setq font-lock-type-face 'bold)
(setq font-lock-keyword-face 'bold)
(setq font-lock-function-name-face 'red)
(setq font-lock-doc-string-face 'green)
(add-hook 'find-file-hooks 'font-lock-auto-mode-select)
(setq baud-rate 1000000)
(global-set-key "\C-cmm" 'menu-bar-mode)
(global-set-key "\C-cms" 'scroll-bar-mode)
(global-set-key [backspace] 'backward-delete-char)
; (global-set-key [delete] 'delete-char)
(standard-display-european t)
(load-library "iso-transl")))
;; X11 or PC using direct screen writes
(if window-system
(progn
;; (global-set-key [M-f1] 'hilit-repaint-command)
;; (global-set-key [M-f2] [?\C-u M-f1])
(setq hilit-mode-enable-list
'(not text-mode c-mode c++-mode emacs-lisp-mode lisp-mode
scheme-mode)
hilit-auto-highlight nil
hilit-auto-rehighlight 'visible
hilit-inhibit-hooks nil
hilit-inhibit-rebinding t)
(require 'hilit19)
(require 'paren))
(setq baud-rate 2400) ; For slow serial connections
)
;; TTY type terminal
(if (and (not window-system)
(not (equal system-type 'ms-dos)))
(progn
(if first-time
(progn
(keyboard-translate ?\C-h ?\C-?)
(keyboard-translate ?\C-? ?\C-h)))))
;; Under UNIX
(if (not (equal system-type 'ms-dos))
(progn
(if first-time
(server-start))))
;; Add any face changes here
(add-hook 'term-setup-hook 'my-term-setup-hook)
(defun my-term-setup-hook ()
(if (eq window-system 'pc)
(progn
;; (set-face-background 'default "red")
)))
;; Restore the "desktop" - do this as late as possible
(if first-time
(progn
(desktop-load-default)
(desktop-read)))
;; Indicate that this file has been read at least once
(setq first-time nil)
;; No need to debug anything now
(setq debug-on-error nil)
;; All done
(message "All done, %s%s" (user-login-name) ".")
Extending the Range of Languages Emacs UnderstandsNow, this is all very well if you only want to program in the
languages already catered for in the .emacs file
(C, C++, Perl, Lisp and Scheme), but what happens if a new language
called whizbang comes out, full of exciting
features?The first thing to do is find out if whizbang
comes with any files that tell Emacs about the language. These
usually end in .el, short for Emacs
Lisp. For example, if whizbang is a FreeBSD
port, we can locate these files by doing
$ find /usr/ports/lang/whizbang -name "*.el" -print
and install them by copying them into the Emacs site Lisp directory. On
FreeBSD 2.1.0-RELEASE, this is
/usr/local/share/emacs/site-lisp.So for example, if the output from the find command was
/usr/ports/lang/whizbang/work/misc/whizbang.el
we would do
$ cp /usr/ports/lang/whizbang/work/misc/whizbang.el /usr/local/share/emacs/site-lispNext, we need to decide what extension whizbang source files
have. Let's say for the sake of argument that they all end in
.wiz. We need to add an entry to our
.emacs file to make sure Emacs will be able to
use the information in whizbang.el.Find the auto-mode-alist entry in
.emacs and add a line for whizbang, such
as:
…>
("\\.lsp$" . lisp-mode)
("\\.wiz$" . whizbang-mode)
("\\.scm$" . scheme-mode)
…>
This means that Emacs will automatically go into
whizbang-mode when you edit a file ending in
.wiz.Just below this, you'll find the
font-lock-auto-mode-list entry. Add
whizbang-mode to it like so:
;; Auto font lock mode
(defvar font-lock-auto-mode-list
(list 'c-mode 'c++-mode 'c++-c-mode 'emacs-lisp-mode 'whizbang-mode 'lisp-mode 'perl-mode 'scheme-mode)
"List of modes to always start in font-lock-mode")
This means that Emacs will always enable
font-lock-mode (ie syntax highlighting) when
editing a .wiz file.And that's all that's needed. If there's anything else you want
done automatically when you open up a .wiz file,
you can add a whizbang-mode hook (see
my-scheme-mode-hook for a simple example that
adds auto-indent).Further ReadingBrian Harvey and Matthew Wright
Simply Scheme
MIT 1994.
ISBN 0-262-08226-8Randall Schwartz
Learning Perl
O'Reilly 1993
ISBN 1-56592-042-2Patrick Henry Winston and Berthold Klaus Paul Horn
Lisp (3rd Edition)
Addison-Wesley 1989
ISBN 0-201-08319-1Brian W. Kernighan and Rob Pike
The Unix Programming Environment
Prentice-Hall 1984
ISBN 0-13-937681-XBrian W. Kernighan and Dennis M. Ritchie
The C Programming Language (2nd Edition)
Prentice-Hall 1988
ISBN 0-13-110362-8Bjarne Stroustrup
The C++ Programming Language
Addison-Wesley 1991
ISBN 0-201-53992-6W. Richard Stevens
Advanced Programming in the Unix Environment
Addison-Wesley 1992
ISBN 0-201-56317-7W. Richard Stevens
Unix Network Programming
Prentice-Hall 1990
ISBN 0-13-949876-1
diff --git a/en_US.ISO_8859-1/books/fdp-primer/book.sgml b/en_US.ISO_8859-1/books/fdp-primer/book.sgml
index c1e35d9953..57c3e91fa2 100644
--- a/en_US.ISO_8859-1/books/fdp-primer/book.sgml
+++ b/en_US.ISO_8859-1/books/fdp-primer/book.sgml
@@ -1,281 +1,281 @@
%man;
%chapters;
]>
FreeBSD Documentation Project Primer for New ContributorsNikClayton
- nik@FreeBSD.ORG
+ nik@FreeBSD.org19981999
- Nik Clayton
+ Nik Clayton
- $Date: 1999-07-14 22:31:28 $
+ $Date: 1999-08-29 16:08:38 $
- $Id: book.sgml,v 1.5 1999-07-14 22:31:28 nik Exp $
+ $Id: book.sgml,v 1.6 1999-08-29 16:08:38 jhb Exp $Redistribution and use in source (SGML DocBook) and 'compiled'
forms (SGML, HTML, PDF, PostScript, RTF and so forth) with or without
modification, are permitted provided that the following conditions are
met:Redistributions of source code (SGML DocBook) must retain the
above copyright notice, this list of conditions and the following
disclaimer as the first lines of this file unmodified.Redistributions in compiled form (transformed to other DTDs,
converted to PDF, PostScript, RTF and other formats) must
reproduce the above copyright notice, this list of conditions and
the following disclaimer in the documentation and/or other
materials provided with the distribution.THIS DOCUMENTATION IS PROVIDED BY NIK CLAYTON "AS IS" AND ANY
EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NIK CLAYTON BE LIABLE FOR
ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
DOCUMENTATION, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
DAMAGE.Thank you for becoming a part of the FreeBSD Documentation
Project. Your contribution is extremely valuable.This primer covers everything you will need to know in order
to start contributing to the FreeBSD Documentation Project, from
the tools and software you will be using (both mandatory and
recommended) to the philosophy behind the Documentation
Project.This document is a work in progress, and is not complete. Sections
that are known to be incomplete are indicated with a
* in their name.PrefaceShell PromptsThe following table shows the default system prompt and superuser
prompt. The examples will use this prompt to indicate which user you
should be running the example as.UserPromptNormal user&prompt.user;root&prompt.root;Typographic ConventionsThe following table describes the typographic conventions used in
this book.MeaningExamplesThe name of commands, files, and directories. On screen
computer output.Edit your .login
file.Use ls -a to list all
files.You have mail.What you type, when contrasted with on-screen computer
output.&prompt.user; su
Password:Manual page references.Use su1 to change user names.User and group namesOnly root can do this.EmphasisYou must do this.Command line variables; replace with the real name or
variable.To delete a file, type rm filenameEnvironment variables$HOME is your home directory.Notes, warnings, and examplesWithin the text appear notes, warnings, and examples.Notes are represented like this, and contain information that
you should take note of, as it may affect what you do.Warnings are represented like this, and contain information
warning you about possible damage if you do not follow the
instructions. This damage may be physical, to your hardware or to
you, or it may be non-physical, such as the inadvertant deletion of
important files.A sample exampleExamples are represented like this, and typically contain
examples you should walk through, or show you what the results of a
particular action should be.AcknowledgmentsMy thanks to Sue Blake, Patrick Durusau, Jon Hamilton, Peter
Flynn, and Christopher Maden, who took the time to read early drafts
of this document and offer many valuable comments and
criticisms.
&chap.overview;
&chap.tools;
&chap.sgml-primer;
&chap.sgml-markup;
&chap.stylesheets;
&chap.the-faq;
&chap.the-handbook;
&chap.the-website;
&chap.translations;
&chap.writing-style;
&chap.psgml-mode;
&chap.see-also;
diff --git a/en_US.ISO_8859-1/books/fdp-primer/overview/chapter.sgml b/en_US.ISO_8859-1/books/fdp-primer/overview/chapter.sgml
index 1322c34a6f..4d7befc2b9 100644
--- a/en_US.ISO_8859-1/books/fdp-primer/overview/chapter.sgml
+++ b/en_US.ISO_8859-1/books/fdp-primer/overview/chapter.sgml
@@ -1,179 +1,179 @@
OverviewWelcome to the FreeBSD Documentation Project. Good quality
documentation is very important to the success of FreeBSD, and the
FreeBSD Documentation Project (FDP) is how a lot of that documentation
is produced. Your contributions are very valuable.This document's main purpose is to clearly explain how
the FDP is organised, how to write and submit
documentation to the FDP, and how to
effectively use the tools available to you when writing
documentation.Every one is welcome to join the FDP. There is no minimum
membership requirements, no quota of documentation you need to
produce per month. All you need to do is subscribe to the
- freebsd-doc@freebsd.org mailing list.
+ freebsd-doc@FreeBSD.org mailing list.
After you have finished reading this document you should:Know which documentation is maintained by the FDP.Be able to read and understand the SGML source code for the
documentation maintained by the FDP.Be able to make changes to the documentation.Be able to submit your changes back for review and eventual
inclusion in the FreeBSD documentation.The FreeBSD Documentation SetThe FDP is responsible for four categories of FreeBSD
documentation.Manual pagesThe English language system manual pages are not written by
the FDP, as they are part of the base system. However, the FDP can
(and has) re-worded parts of existing manual pages to make them
clearer, or to correct inaccuracies.The translation teams are responsible for translating the
system manual pages in to different languages. These translations
are kept within the FDP.FAQThe FAQ aims to address (in short question and answer format)
questions that are asked, or should be asked, on the various
mailing lists and newsgroups devoted to FreeBSD. The format does
not permit long and comprehensive answers.HandbookThe Handbook aims to be the comprehensive on-line resource and
reference for FreeBSD users.Web siteThis is the main FreeBSD presence on the World Wide Web,
visible at http://www.freebsd.org/
+ url="http://www.FreeBSD.org/">http://www.FreeBSD.org/
and many mirrors around the world. The web site is many people's
first exposure to FreeBSD.These four groups of documentation are all available in the
FreeBSD CVS tree. This means that the logs and changes to these
files are visible to anyone, and anyone can use a program such as
CVSup or
CTM to keep their own local copies of
this documentation.In addition, many people have written tutorials or other web
sites relating to FreeBSD. Some of these are stored in the CVS
repository as well (where the author has agreed to this). In
other cases the author has decided to keep their documentation
separate from the main FreeBSD repository. The FDP endeavours to
provide links to as much of this documentation as
possible.Before you startThis document assumes that you already know:How to maintain an up-to-date local copy of the FreeBSD
documentation. Either by maintaining a local copy of the
FreeBSD CVS repository (using CVS
and either CVSup or
CTM) or by using
CVSup to download just a
checked-out copy.How to download and install new software using either the
FreeBSD Ports system or &man.pkg.add.1;.
diff --git a/en_US.ISO_8859-1/books/fdp-primer/see-also/chapter.sgml b/en_US.ISO_8859-1/books/fdp-primer/see-also/chapter.sgml
index 2ede72da78..40f6ff58f4 100644
--- a/en_US.ISO_8859-1/books/fdp-primer/see-also/chapter.sgml
+++ b/en_US.ISO_8859-1/books/fdp-primer/see-also/chapter.sgml
@@ -1,121 +1,121 @@
See AlsoThis document is deliberately not an exhaustive discussion of SGML,
the DTDs listed, and the FreeBSD Documentation Project. For more
information about these, you are encouraged to see the following web
sites.The FreeBSD Documentation Project
- The FreeBSD
+ The FreeBSD
Documentation Project web pages
- The FreeBSD Handbook
+ The FreeBSD HandbookSGMLThe SGML/XML web
page, a comprehensive SGML resourceGentle introduction to SGMLHTMLThe World Wide Web
organisationThe HTML 4.0
specificationDocBookThe Davenport
Group, maintainers of the DocBook DTDThe Linux Documentation ProjectThe Linux Documentation
Project web pages
diff --git a/en_US.ISO_8859-1/books/fdp-primer/sgml-markup/chapter.sgml b/en_US.ISO_8859-1/books/fdp-primer/sgml-markup/chapter.sgml
index 8a8c216754..dde7e4b3e1 100644
--- a/en_US.ISO_8859-1/books/fdp-primer/sgml-markup/chapter.sgml
+++ b/en_US.ISO_8859-1/books/fdp-primer/sgml-markup/chapter.sgml
@@ -1,2213 +1,2213 @@
SGML MarkupThis chapter describes the three markup languages you will encounter
when you contribute to the FreeBSD documentation project. Each section
describes the markup language, and details the markup that you are likely
to want to use, or that is already in use.These markup languages contain a large number of elements, and it can
be confusing sometimes to know which element to use for a particular
situation. This section goes through the elements you are most likely to
need, and gives examples of how you would use them.This is not an exhaustive list of elements, since
that would just reiterate the documentation for each language. The aim of
this section is to list those elements more likely to be useful to you.
If you have a question about how best to markup a particular piece of
content, please post it to the FreeBSD Documentation Project mailing list
- freebsd-doc@freebsd.org.
+ freebsd-doc@FreeBSD.org.
Inline vs. blockIn the remainder of this document, when describing elements,
inline means that the element can occur within a
block element, and does not cause a line break. A
block element, by comparison, will cause a line
break (and other processing) when it is encountered.HTMLHTML, the HyperText Markup Language, is the markup language of
choice on the World Wide Web. More information can be found at
<URL:http://www.w3.org/>.HTML is used to markup pages on the FreeBSD web site. It should not
(generally) be used to mark up other documention, since DocBook offers a
far richer set of elements to choose from. Consequently, you will
normally only encounter HTML pages if you are writing for the web
site.HTML has gone through a number of versions, 1, 2, 3.0, 3.2, and the
latest, 4.0 (available in both strict and
loose variants).The HTML DTDs are available from the ports collection in the
textproc/html port. They are automatically
installed as part of the textproc/docproj
port.Formal Public Identifier (FPI)There are a number of HTML FPIs, depending upon the version (also
known as the level) of HTML that you want to declare your document to
be compliant with.The majority of HTML documents on the FreeBSD web site comply with
the loose version of HTML 4.0.
PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"Sectional elementsAn HTML document is normally split in to two sections. The first
section, called the head, contains
meta-information about the document, such as its title, the name of
the author, the parent document, and so on. The second section, the
body, contains the content that will be displayed
to the user.These sections are indicated with head and
body elements respectively. These elements are
contained within the top-level html element.Normal HTML document structure
<html>
<head>
<title>The document's title</title>
</head>
<body>
…
</body>
</html>Block elementsHeadingsHTML allows you to denote headings in your document, at up to
six different levels.The largest and most prominent heading is h1,
then h2, continuing down to
h6.The element's content is the text of the heading.h1, h2, etc.Use:
First section
This is the heading for the first section
This is the heading for the first sub-section
This is the heading for the second section
]]>Generally, an HTML page should have one first level heading
(h1). This can contain many second level
headings (h2), which can in turn contain many
third level headings. Each
hn element should have
the same element, but one further up the hierarchy, preceeding it.
Leaving gaps in the numbering is to be avoided.Bad ordering of
hn elementsUse:
First section
Sub-section
]]>ParagraphsHTML supports a single paragraph element,
p.pUse:
This is a paragraph. It can contain just about any
other element.]]>Block quotationsA block quotation is an extended quotation from another document
that should not appear within the current paragraph.blockquoteUse:
A small excerpt from the US Constitution;
We the People of the United States, in Order to form
a more perfect Union, establish Justice, insure domestic
Tranquility, provide for the common defence, promote the general
Welfare, and secure the Blessings of Liberty to ourselves and our
Posterity, do ordain and establish this Constitution for the
United States of America.
]]>ListsYou can present the user with three types of lists, ordered,
unordered, and definition.Typically, each entry in an ordered list will be numbered, while
each entry in an unordered list will be proceeded by a bullet point.
Definition lists are composed of two sections for each entry. The
first section is the term being defined, and the second section is
the definition of the term.Ordered lists are indicated by the ol
element, unordered lists by the ul element, and
definition lists by the dl element.Ordered and unordered lists contain listitems, indicated by the
li element. A listitem can contain textual
content, or it may be further wrapped in one or more
p elements.Definition lists contain definition terms
(dt) and definition descriptions
(dd). A definition term can only contain inline
elements. A definition description can contain other block
elements.ul and olUse:
An unordered list. Listitems will probably be
preceeded by bullets.
First item
Second item
Third item
An ordered list, with list items consisting of multiple
paragraphs. Each item (note: not each paragraph) will be
numbered.
This is the first item. It only has one paragraph.
This is the first paragraph of the second item.
This is the second paragraph of the second item.
This is the first and only paragraph of the third
item.
]]>Definition lists with dlUse:
Term 1
Paragraph 1 of definition 1.
Paragraph 2 of definition 1.
Term 2
Paragraph 1 of definition 2.
Term 3
Paragraph 1 of definition 3. Note that the <p>
element is not required in the single paragraph case.
]]>Pre-formatted textYou can indicate that text should be shown to the user exactly
as it is in the file. Typically, this means that the text is shown
in a fixed font, multiple spaces are not merged in to one, and line
breaks in the text are significant.In order to do this, wrap the content in the
pre element.preYou could use pre to mark up an e-mail
message;
- From: nik@freebsd.org
- To: freebsd-doc@freebsd.org
+ From: nik@FreeBSD.org
+ To: freebsd-doc@FreeBSD.org
Subject: New documentation available
There's a new copy of my primer for contributers to the FreeBSD
Documentation Project available at
-
+
Comments appreciated.
N
]]>TablesMost text-mode browsers (such as Lynx) do not render tables
particularly effectively. If you are relying on the tabular
display of your content, you should consider using alternative
markup to prevent confusion.Mark up tabular information using the table
element. A table consists of one or more table rows
(tr), each containing one or more cells of table
data (td). Each cell can contain other block
elements, such as paragraphs or lists. It can also contain another
table (this nesting can repeat indefinitely). If the cell only
contains one paragraph then you do not need to include the
p element.Simple use of tableUse:
This is a simple 2x2 table.
Top left cell
Top right cell
Bottom left cell
Bottom right cell
]]>A cell can span multiple rows and columns. To indicate this,
add the rowspan and/or colspan
attributes, with values indicating the number of rows of columns
that should be spanned.Using rowspanUse:
One tall thin cell on the left, two short cells next to
it on the right.
Long and thin
Top cell
Bottom cell
]]>Using colspanUse:
One long cell on top, two short cells below it.
Top cell
Bottom left cell
Bottom right cell
]]>Using rowspan and
colspan togetherUse:
On a 3x3 grid, the top left block is a 2x2 set of
cells merged in to one. The other cells are normal.
Top left large cell
Top right cell
Middle right cell
Bottom left cell
Bottom middle cell
Bottom right cell
]]>In-line elementsEmphasising informationYou have two levels of emphasis available in HTML,
em and strong.
em is for a normal level of emphasis and
strong indicates stronger emphasis.Typically, em is rendered in italic and
strong is rendered in bold. This is not always
the case however, and you should not rely on it.em and strongUse:This has been emphasised, while
this has been strongly emphasised.]]>Bold and italicsBecause HTML includes presentational markup, you can also
indicate that particular content should be rendered in bold or
italic. The elements are b and
i respectively.b and iThis is in bold, while this is
in italics.]]>Indicating fixed pitch textIf you have content that should be rendered in a fixed pitch
(typewriter) typeface, use tt (for
“teletype”).ttUse:
This document was originally written by
Nik Clayton, who can be reached by e-mail as
- nik@freebsd.org.]]>
+ nik@FreeBSD.org.]]>
Content sizeYou can indicate that content should be shown in a larger or
smaller font. There are three ways of doing this.Use big and small
around the content you wish to change size. These tags can be
nested, so <big><big>This is much
bigger</big></big> is possible.Use font with the size
attribute set to +1 or -1
respectively. This has the same effect as using
big or small. However,
the use of this approach is deprecated.Use font with the size
attribute set to a number between 1 and 7. The default font size
is 3. This approach is deprecated.big, small, and
fontThe following fragments all do the same thing.
This text is slightly smaller. But
this text is slightly bigger.
This text is slightly smaller. But
this text is slightly bigger
This text is slightly smaller. But
this text is slightly bigger.
]]>
LinksLinks are also in-line elements.Linking to other documents on the WWWIn order to include a link to another document on the WWW you
must know the URL of the document you want to link to.The link is indicated with a, and the
href attribute contains the URL of the target
document. The content of the element becomes the link, and is
normally indicated to the user in some way (underlining, change of
colour, different mouse cursor when over the link, and so
on).Using <a href="...">Use:
More information is available at the
- FreeBSD web site.]]>
+ FreeBSD web site.]]>
These links will take the user to the top of the chosen
document.Linking to other parts of documentsLinking to a point within another document (or within the same
document) requires that the document author include anchors that you
can link to.Anchors are indicated with a and the
name attribute instead of
href.Using <a name="...">Use:This paragraph can be referenced
in other links with the name para1.]]>To link to a named part of a document, write a normal link to
that document, but include the name of the anchor after a
# symbol.Linking to a named part of another documentAssume that the para1 example resides in a
document called foo.html.
More information can be found in the
first paragraph of
foo.html.]]>If you are linking to a named anchor within the same document
then you can omit the document's URL, and just include the name of
the anchor (with the preceeding #).Linking to a named part of another documentAssume that the para1 example resides in
this document
More information can be found in the
first paragraph of this
document.]]>DocBookDocBook was designed by the Davenport Group to be
a DTD for writing technical documentation. As such, and unlike LinuxDoc
and HTML, DocBook is very heavily orientated towards markup that
describes what something is, rather than describing
how it should be presented.formal vs. informalSome elements may exist in two forms, formal
and informal. Typically, the formal version of
the element will consist of a title followed by the information
version of the element. The informal version will not have a
title.The DocBook DTD is available from the ports collection in the
textproc/docbook port. It is automatically
installed as part of the textproc/docproj
port.FreeBSD extensionsThe FreeBSD Documentation Project has extended the DocBook DTD by
adding some new elements. These elements serve to make some of the
markup more precise.Where a FreeBSD specific element is listed below it is clearly
marked.Throughout the rest of this document, the term
“DocBook” is used to mean the FreeBSD extended DocBook
DTD.There is nothing about these extensions that is FreeBSD
specific, it was just felt that they were useful enhancements for
this particular project. Should anyone from any of the other *nix
camps (NetBSD, OpenBSD, Linux, …) be interested in
collaborating on a standard DocBook extension set, please get in
- touch with Nik Clayton nik@freebsd.org.
+ touch with Nik Clayton nik@FreeBSD.org.
Formal Public Identifier (FPI)In compliance with the DocBook guidelines for writing FPIs for
DocBook customisations, the FPI for the FreeBSD extended DocBook DTD
is;
PUBLIC "-//FreeBSD//DTD DocBook V3.1-Based Extension//EN"Sectional elementsDocBook contains a number of elements for marking up the structure
of a book.Generally, the top level (first) element will be
book.A book is organised into chapters. This is a
mandatory requirement. There may be parts between
the book and the chapter to provide another layer of organisation.
The Handbook is arranged in this way.A chapter may (or may not) contain one or more sections. These
are indicated with the sect1 element. If a section
contains another section then use the sect2
element, and so on, up to sect5.Chapters and sections contain the remainder of the content.Starting a bookThe content of the book is contained within the
book element. As well as containing structural
markup, this element can contain elements that include additional
information about the book. This is either meta-information, used
for reference purposes, or additional content used to produce a
title page.This additional information should be contained within
bookinfo.Boilerplate book with
bookinfo
<book>
<bookinfo>
<title>Your title here</title>
<author>
<firstname>Your first name</firstname>
<surname>Your surname</surname>
<affiliation>
<address><email>Your e-mail address</email></address>
</affiliation>
</author>
<copyright>
<year>1998</year>
<holder role="mailto:your e-mail address">Your name</holder>
</copyright>
<pubdate role="rcs">$Date$</pubdate>
<releaseinfo>$Id$</releaseinfo>
<abstract>
<para>Include an abstract of the book's contents here.</para>
</abstract>
</bookinfo>
…
</book>Indicating chaptersUse chapter to mark up your chapters. Each
chapter has a mandatory title.A simple chapterThe chapter's title
...
]]>
A chapter can not be empty, it must contain elements in addition
to title. If you need to include an empty
chapter then just use an empty paragraph.Empty chaptersThis is an empty chapter
]]>Sections below chaptersChapters can be broken up into sections, subsections, and so
on. Use the sectn
element. The n indicates the section
number, which identifies the section level.The first sectn is
sect1. You can have one or more of these in a
chapter. They can contain one or more sect2
elements, and so on, down to sect5.Sections in chaptersA sample chapterSome text in the chapter.First section (1.1)
...
Second section (1.2)First sub-section (1.2.1)First sub-sub-section (1.2.1.1)
...
Second sub-section (1.2.2)
...
]]>Subdividing using partsYou can introduce another layer of organisation between
book and chapter with one or
more parts.IntroductionOverview
...
What is FreeBSD?
...
History
...
]]>Block elementsParagraphsDocBook supports three types of paragraphs;
formalpara, para, and
simpara.Most of the time you will only need to use
para. formalpara includes a
title element, and simpara
disallows some elements from within para. Stick
with para.paraUse:
This is a paragraph. It can contain just about any
other element. ]]>Appearance:This is a paragraph. It can contain just about any other
element.Block quotationsA block quotation is an extended quotation from another document
that should not appear within the current paragraph. You will
probably only need it infrequently.Blockquotes can optionally contain a title and an attribution
(or they can be left untitled and unattributed).blockquoteUse:
A small excerpt from the US Constitution;
Preamble to the Constitution of the United States
Copied from a web site somewhereWe the People of the United States, in Order to form a more perfect
Union, establish Justice, insure domestic Tranquility, provide for the
common defence, promote the general Welfare, and secure the Blessings
of Liberty to ourselves and our Posterity, do ordain and establish this
Constitution for the United States of America.
]]>Appearance:
Preamble to the Constitution of the United StatesCopied from a web site somewhereWe the People of the United States, in Order to form a more
perfect Union, establish Justice, insure domestic Tranquility,
provide for the common defence, promote the general Welfare, and
secure the Blessings of Liberty to ourselves and our Posterity,
do ordain and establish this Constitution for the United States
of America.
Tips, notes, warnings, cautions, important information and
sidebars.You may need to include extra information separate from the
main body of the text. Typically this is “meta”
information that the user should be aware of.Depending on the nature of the information, one of
tip, note,
warning, caution, and
important should be used. Alternatively, if the
information is related to the main text but is not one of the above,
use sidebar.The circumstances in which to choose one of these elements over
another is unclear. The DocBook documentation suggests;A Note is for information that should be heeded by all
readers.An Important element is a variation on Note.A Caution is for information regarding possible data loss
or software damage.A Warning is for information regarding possible hardware
damage or injury to life or limb.warningUse:Installing FreeBSD may make you want to delete Windows from your
harddisk.
]]>Installing FreeBSD may make you want to delete Windows from
your harddisk.Lists and proceduresYou will often need to list pieces of information to the user,
or present them with a number of steps that must be carried out in
order to accomplish a particular goal.In order to do this, use itemizedlist,
orderedlist, or
procedureThere are other types of
list element in DocBook, but we're not concerned with those at
the moment.itemizedlist and
orderedlist are similar to the counterparts in
HTML, ul and ol. Each one
consists of one or more listitem elements, and
each listitem contains one or more block
elements. The listitem elements are analagous to
HTMLs li tags. However, unlike HTML they are
required.procedure is slightly different. It consists
of steps, which may in turn consists of more
steps or substeps. Each
step contains block elements.itemizedlist,
orderedlist, and
procedureUse:This is the first itemized item.This is the second itemized item.This is the first ordered item.This is the second ordered item.]]>Appearance:This is the first itemized item.This is the second itemized item.This is the first ordered item.This is the second ordered item.Showing file samplesIf you want to show a fragment of a file (or perhaps a complete
file) to the user, wrap it in the programlisting
element.White space and line breaks within
programlistingare
significant. In particular, this means that the closing tag should
appear on the same line as the last line of the output, otherwise a
spurious blank line will be included.programlistingUse:
When you have finished, your program should look like
this;
#include <stdio.h>
int
main(void)
{
printf("hello, world\n");
}]]>Notice how the angle brackets in the
#include line need to be referenced by their
entities instead of being included literally.Appearance:When you have finished, your program should look like
this;
#include <stdio.h>
int
main(void)
{
printf("hello, world\n");
}There is a mechanism within DocBook for referring to sections
of a previously occuring programlisting, called
callouts (see programlistingco for more
information). I don't fully understand (i.e., have never used)
this feature, so can't document it here. For the mean time, you
can include line numbers within the content, and then refer to
them later on in your description. That will change, as soon as I
find the time to understand and document callouts.TablesUnlike HTML, you do not need to use tables for layout purposes,
as the stylesheet handles those issues for you. Instead, just use
tables for marking up tabular data.In general terms (and see the DocBook documentation for more
detail) a table (which can be either formal or informal) consists of
a table element. This contains at least one
tgroup element, which specifies (as an attribute)
the number of columns in this table group. Within the tablegroup
you can then have one thead element, which
contains elements for the table headings (column headings), and one
tbody which contains the body of the
table.Both tgroup and thead
contain row elements, which in turn contain
entry elements. Each entry
element specifies one cell in the table.informaltableUse:This is column head 1This is column head 2Row 1, column 1Row 1, column 2Row 2, column 1Row 2, column 2
]]>Appearance:This is column head 1This is column head 2Row 1, column 1Row 1, column 2Row 2, column 1Row 2, column 2If you don't want a border around the table the
frame attribute can be added to the
informaltable element with a value of
none (i.e., <informaltable
frame="none">).Tables where frame="none"Appearance:This is column head 1This is column head 2Row 1, column 1Row 1, column 2Row 2, column 1Row 2, column 2Examples for the user to followA lot of the time you need to show examples for the user to
follow. Typically, these will consist of dialogs with the computer;
the user types in a command, the user gets a response back, they
type in another command, and so on.A number of distinct elements and entities come in to play
here.informalexampleMost of the time these examples will occur
“mid-flow” as it were, and you won't need to put a
title on them. So, most of the time, the outermost element
will be informalexample. For those times
when you do need to include a title on the example, use
example.screenEverything the user sees in this example will be on the
computer screen, so the next element is
screen.Within screen, white space is
significant.prompt,
&prompt.root; and
&prompt.user;Some of the things the user will be seeing on the screen
are prompts from the computer (either from the OS, command
shell, or application. These should be marked up using
prompt.As a special case, the two shell prompts for the normal
user and the root user have been provided as entities. Every
time you want to indicate the user is at a shell prompt, use
one of &prompt.root; and
&prompt.user; as necessary. They do
not need to be inside prompt.&prompt.root; and
&prompt.user; are FreeBSD
extensions to DocBook, and are not part of the original
DTD.userinputWhen displaying text that the user should type in, wrap it
in userinput tags. It will probably be
displayed differently to the user.informalexample,
screen, prompt, and
userinputUse:&prompt.user; ls -1
foo1
foo2
foo3
&prompt.user; ls -1 | grep foo2
foo2
&prompt.user; suPassword:
&prompt.root; cat foo2
This is the file called 'foo2'
]]>Appearance:&prompt.user; ls -1
foo1
foo2
foo3
&prompt.user; ls -1 | grep foo2
foo2
&prompt.user; suPassword:
&prompt.root; cat foo2
This is the file called 'foo2'Even though we are displaying the contents of the file
foo2, it is not marked
up as programlisting. Reserve
programlisting for showing fragments of files
outside the context of user actions.In-line elementsEmphasising informationWhen you want to emphasise a particular word or phrase, use
emphasis. This may be presented as italic, or
bold, or might be spoken differently with a text-to-speech
system.There is no way to change the presentation of the emphasis
within your document, no equivalent of HTML's b
and i. If the information you are presenting is
important then consider presenting it in
important rather than
emphasis.emphasisUse:
FreeBSD is without doubt the
premiere Unix like operating system for the Intel architecture.]]>Appearance:FreeBSD is without doubt the premiere Unix
like operating system for the Intel architecture.Applications, commands, options, and citesYou will frequently want to refer to both applications and
commands when writing for the Handbook. The distinction between
them is simple; an application is the name for a suite (or possibly
just 1) of programs that fulfil a particular task. A command is the
name of a program that the user can run.In addition, you will occasionally need to list one or more of
the options that a command might take.Finally, you will often want to list a command with it's manual
section number, in the “command(number)” format so
common in Unix manuals.Mark up application names with
application.When you want to list a command with it's manual section number
(which should be most of the time) the DocBook element is
citerefentry. This will contain a further two
elements, refentrytitle and
manvolnum. The content of
refentrytitle is the name of the command, and the
content of manvolnum is the manual page
section.This can be cumbersome to write, and so a series of general entities
have been created to make this easier. Each entity takes the form
&man.manual-page.manual-section;.The file that contains these entities is in
doc/share/sgml/man-refs.ent, and can be
referred to using this FPI;PUBLIC "-//FreeBSD//ENTITIES DocBook Manual Page Entities//EN"Therefore, the introduction to your documentation will probably
look like this;<!DOCTYPE book PUBLIC "-//FreeBSD//DTD DocBook V3.1-Based Extension//EN" [
<!ENTITY % man PUBLIC "-//FreeBSD//ENTITIES DocBook Manual Page Entities//EN">
%man;
…
]]>Use command when you want to include a
command name “in-line” but present it as something the
user should type in.Use option to mark up a command's
options.This can be confusing, and sometimes the choice is not always
clear. Hopefully this example makes it clearer.Applications, commands, and options.Use:Sendmail is the most
widely used Unix mail application.
Sendmail includes the
sendmail8, &man.sendmail.8;, and &man.newaliases.8;
programs.One of the command line parameters to sendmail8, , will display the current
status of messages in the mail queue. Check this on the command
line by running sendmail -bp.]]>Appearance:Sendmail is the most widely used
Unix mail application.Sendmail includes the
sendmail8, mailq8, and newaliases8 programs.One of the command line parameters to sendmail8, , will display the current
status of messages in the mail queue. Check this on the command
line by running sendmail -bp.Notice how the
&man.command.section; notation is easier to follow.Files, directories, extensionsWhenever you wish to refer to the name of a file, a directory,
or a file extension, use filename.filenameUse:
The SGML source for the Handbook in English can be
found in /usr/doc/en/handbook/. The first
file is called handbook.sgml in that
directory. You should also see a Makefile
and a number of files with a .ent
extension.]]>Appearance:The SGML source for the Handbook in English can be found in
/usr/doc/en/handbook/. The first file is
called handbook.sgml in that directory. You
should also see a Makefile and a number of
files with a .ent extension.DevicesFreeBSD extensionThese elements are part of the FreeBSD extension to DocBook,
and do not exist in the original DocBook DTD.When referring to devices you have two choices. You can either
refer to the device as it appears in /dev, or
you can use the name of the device as it appears in the kernel. For
this latter course, use devicename.Sometimes you will not have a choice. Some devices, such as
networking cards, do not have entries in /dev,
or the entries are markedly different from those entries.devicenameUse:sio is used for serial
communication in FreeBSD. sio manifests
through a number of entries in /dev, including
/dev/ttyd0 and /dev/cuaa0.
By contrast, the networking devices, such as
ed0 do not appear in /dev.
In MS-DOS, the first floppy drive is referred to as
a:. In FreeBSD it is
/dev/fd0.]]>Appearance:sio is used for serial communication
in FreeBSD. sio manifests through a
number of entries in /dev, including
/dev/ttyd0 and
/dev/cuaa0.By contrast, the networking devices, such as
ed0 do not appear in
/dev.In MS-DOS, the first floppy drive is referred to as
a:. In FreeBSD it is
/dev/fd0.Hosts, domains, IP addresses, and so forthFreeBSD extensionThese elements are part of the FreeBSD extension to DocBook,
and do not exist in the original DocBook DTD.You can markup identification information for networked
computers (hosts) in several ways, depending on the nature of the
information. All of them use hostid as the
element, with the role attribute selecting the
type of the marked up information.No role attribute, or
role="hostname"With no role attribute (i.e.,
hostid...hostid the
marked up information is the simple hostname, such as
freefall or wcarchive.
You can explicitly specify this with
role="hostname".role="domainname"The text is a domain name, such as
- freebsd.org or
+ FreeBSD.org or
ngo.org.uk. There is no hostname
component.role="fqdn"The text is a Fully Qualified Domain Name, with both
hostname and domain name parts.role="ipaddr"The text is an IP address, probably expressed as a dotted
quad.role="netmask"The text is a network mask, which might be expressed as a
dotted quad, a hexadecimal string, or as a
/ followed by a number.role="mac"The text is an ethernet MAC address, expressed as a series
of 2 digit hexadecimal numbers seperated by colons.hostid and rolesUse:
The local machine can always be referred to by the
name localhost, which will have the IP address
127.0.0.1.
-The freebsd.org domain
+The FreeBSD.org domain
contains a number of different hosts, including
- freefall.freebsd.org and
- bento.freebsd.org.
+ freefall.FreeBSD.org and
+ bento.FreeBSD.org.When adding an IP alias to an interface (using
ifconfig) always use a
netmask of 255.255.255.255
(which can also be expressed as 0xffffffff.The MAC address uniquely identifies every network card in
in existence. A typical MAC address looks like 08:00:20:87:ef:d0.]]>Appearance:The local machine can always be referred to by the name
localhost, which will have the IP address 127.0.0.1.
- The freebsd.org domain
+ The FreeBSD.org domain
contains a number of different hosts, including freefall.freebsd.org and bento.freebsd.org.
+ role="fqdn">freefall.FreeBSD.org and bento.FreeBSD.org.When adding an IP alias to an interface (using
ifconfig) always use a
netmask of 255.255.255.255 (which
can also be expressed as 0xffffffff.The MAC address uniquely identifies every network card in
existence. A typical MAC address looks like 08:00:20:87:ef:d0.UsernamesFreeBSD extensionThese elements are part of the FreeBSD extension to DocBook,
and do not exist in the original DocBook DTD.When you need to refer to a specific username, such as
root or bin, use
username.usernameUse:
To carry out most system administration functions you
will need to be root.]]>Appearance:To carry out most system administration functions you will
need to be root.Describing MakefilesFreeBSD extensionThese elements are part of the FreeBSD extension to DocBook,
and do not exist in the original DocBook DTD.Two elements exist to describe parts of
Makefiles, maketarget and
makevar.maketarget identifies a build target exported
by a Makefile that can be given as a parameter
to make. makevar identifies a
variable that can be set (in the environment, on the
make command line, or within the
Makefile) to influence the process.maketarget and
makevarUse:
Two common targets in a Makefile
are all and clean.
Typically, invoking all will rebuild the
application, and invoking clean will remove
the temporary files (.o for example) created by
the build process.clean may be controlled by a number of
variables, including CLOBBER and
RECURSE.]]>Appearance:Two common targets in a Makefile are
all and
clean.Typically, invoking all will rebuild
the application, and invoking clean will
remove the temporary files (.o for example)
created by the build process.clean may be controlled by a number
of variables, including CLOBBER and
RECURSE.Literal textYou will often need to include “literal” text in the
Handbook. This is text that is excerpted from another file, or
which should be copied from the Handbook into another file
verbatim.Some of the time, programlisting will be
sufficient to denote this text. programlisting
is not always appropriate, particularly when you want to include a
portion of a file “in-line” with the rest of the
paragraph.On these occasions, use literal.literalUse:
The maxusers 10 line in the kernel
configuration file determines the size of many system tables, and is
a rough guide to how many simultaneous logins the system will
support.]]>Appearance:The maxusers 10 line in the kernel
configuration file determines the size of many system tables, and
is a rough guide to how many simultaneous logins the system will
support.Showing items that the user must fill
inThere will often be times when you want to show the user what to
do, or refer to a file, or command line, or similar, where the user
can not simply copy the examples that you provide, but must instead
include some information themselves.replaceable is designed for this eventuality.
Use it inside other elements to indicate parts
of that element's content that the user must replace.replaceableUse:&prompt.user; man command
]]>Appearance:&prompt.user; man commandreplaceable can be used in many different
elements, including literal. This example also
shows that replaceable should only be wrapped
around the content that the user is meant to
provide. The other content should be left alone.Use:
The maxusers n
line in the kernel configuration file determines the size of many system
tables, and is a rough guide to how many simultaneous logins the system will
support.
For a desktop workstation, 32 is a good value
for n.]]>Appearance:The maxusers n
line in the kernel configuration file determines the size of many
system tables, and is a rough guide to how many simultaneous
logins the system will support.For a desktop workstation, 32 is a good
value for n.LinksLinks are also in-line elements.Linking to other parts of the same documentLinking within the same document requires you to to specify
where you are linking from (i.e., the text the user will click, or
otherwise indicate, as the source of the link) and where you are
linking to (the link's destination).Each element within DocBook has an attribute called
id. You can place text in this attribute to
uniquely name the element it is attached to.This value will be used when you specify the link
source.Normally, you will only be linking to chapters or sections, so
you would add the id attribute to these
elements.id on chapters and sectionsIntroductionThis is the introduction. It contains a subsection,
which is identified as well.Sub-sect 1This is the subsection.
]]>Obviously, you should use more descriptive values. The values
must be unique within the document (i.e., not just the file, but the
document the file might be included in as well). Notice how the
id for the subsection is constructed by appending
text to the id of the chapter. This helps to
ensure that they are unique.If you want to allow the user to jump into a specific portion of
the document (possibly in the middle of a paragraph or an example),
use anchor. This element has no content, but
takes an id attribute.anchor
This paragraph has an embedded
link target in it. It won't show up in
the document.]]>When you want to provide the user with a link they can activate
(probably by clicking) to go to a section of the document that has
an id attribute, you can use either
xref or link.Both of these elements have a linkend
attribute. The value of this attribute should be the value that you
have used in a id attribute (it does not matter
if that value has not yet occured in your document, this will work
for forward links as well as backward links).If you use xref then you have no control over
the text of the link. It will be generated for you.Using xrefAssume that this fragment appears somewhere in a document that
includes the id example;
More information can be found
in .
More specific information can be found
in .]]>The text of the link will be generated automatically, and will
look like (emphasised text indicates the text
that will be the link);
More information can be found in Chapter
One.More specific information can be found in the
section called Sub-sect 1.
Notice how the text from the link is derived from the section
title or the chapter number.This means that you can not use
xref to link to an id
attribute on an anchor element. The
anchor has no content, so the
xref can not generate the text for the
link.If you want to control the text of the link then use
link. This element wraps content, and the
content will be used for the link.Using linkAssume that this fragment appears somewhere in a document that
includes the id example.
More information can be found in
the first chapter.
More specific information can be found in
FreeBSD
+ go to the FreeBSD
home page instead.]]>Appearance:Of course, you could stop reading this document and go to the
- FreeBSD home page
+ FreeBSD home page
instead.* LinuxDocLinuxDoc is an adaptation of the QWERTZ DTD, first adopted by the
Linux Documentation
Project, and subsequently adopted by the FreeBSD Documentation
Project.The LinuxDoc DTD contains primarily appearance related markup rather
than content related markup (i.e., it describes what something looks
like rather than what it is).Both the FreeBSD Documentation Project and the Linux Documentation
Project are migrating from the LinuxDoc DTD to the DocBook DTD.The LinuxDoc DTD is available from the ports collection in the
textproc/linuxdoc category.
diff --git a/en_US.ISO_8859-1/books/fdp-primer/the-handbook/chapter.sgml b/en_US.ISO_8859-1/books/fdp-primer/the-handbook/chapter.sgml
index 004ccb34ef..c494990ff9 100644
--- a/en_US.ISO_8859-1/books/fdp-primer/the-handbook/chapter.sgml
+++ b/en_US.ISO_8859-1/books/fdp-primer/the-handbook/chapter.sgml
@@ -1,282 +1,282 @@
* The HandbookLogical structureThe Handbook is written to comply with the FreeBSD DocBook extended
DTD.The Handbook is organised as a DocBook book. It
is then divided into parts, each of which may contain
several chapters. chapters are
further subdivided into sections (sect1) and
subsections (sect2, sect3) and so
on.Physical organisationThe Handbook (and its translations) are in the
doc/language/handbook
subdirectory of the main CVS
repository. language corresponds to the ISO
language code for that translation, en for English,
ja for Japanese, and so on.There are a number of files and directories within the
handbook directory.The Handbook's organisation may change over time, and this
document may lag in detailing the organisational changes. If you have
any questions about how the Handbook is organised, please contact the
- FreeBSD Documentation Project, doc@FreeBSD.ORG.
+ FreeBSD Documentation Project, freebsd-doc@FreeBSD.org.
MakefileThe Makefile defines the rules that are used
to convert the Handbook from its source form (DocBook) to a number of
other target formats (including HTML, PostScript, and plain
text).A more detailed description of the Makefile
is in .handbook.sgmlThis is the top level document in the Handbook. It contains the
Handbook's DOCTYPE
declaration, as well as the elements that describe the
Handbook's structure.handbook.sgml uses parameter entities
to load in the files with the .ent extension.
These files (described later) then define general entities that
are used throughout the rest of the Handbook.directory/chapter.sgmlEach chapter in the Handbook is stored in a file called
chapter.sgml in a separate directory from the
other chapters. Each directory is named after the value of the
id attribute on the chapter
element.For example, if one of the chapter files contains:
...
]]>
then it will be called chapter.sgml in the
kernelconfiguration directory. In general, the
entire contents of the chapter will be held in this file.When the HTML version of the Handbook is produced, this will yield
kernelconfiguration.html. This is because of the
id value, and is not related to the name of the
directory.In earlier versions of the Handbook the files were stored in the
same directory as handbook.sgml, and named after
the value of the id attribute on the file's
chapter element. Moving them in to separate
directories prepares for future plans for the Handbook. Specifically,
it will soon be possible to include images in each chapter. It
makes more sense for each image to be stored in a directory with the
text for the chapter than to try and keep the text for all the
chapters, and all the images, in one large directory. Namespace
collisions would be inevitable, and it is easier to work with several
directories with a few files in them than it is to work with one
directory that has many files in it.A brief look will show that there are many directories with
individual chapter.sgml files, including
basics/chapter.sgml,
introduction/chapter.sgml, and
printing/chapter.sgml.Chapters and/or directories should not be named in a fashion
that reflects their ordering within the Handbook. This ordering
might change as the content within the Handbook is reorganised; this
sort of reorganistion should not (generally) include the need to
rename files (unless entire chapters are being promoted or demoted
within the hierarchy).Each chapter.sgml file will not be a complete
SGML document. In particular, they will not have their own DOCTYPE
line at the start of the file.This is unfortunate for two reasons;It makes it impossible to treat these as generic SGML files
and simply convert them to HTML, RTF, PS, and other formats in the
same way the main Handbook is generated. This
would force you to rebuild the Handbook every
time you want to see the effect a change as had on just one
chapter.Emacs' sgml-mode can not use it to
determine the DTD to use, losing useful benefits of
sgml-mode (element completion, automatic
validation, and so on).Style guideTo keep the source for the Handbook consistent when many different
people are editing it, please follow these style conventions.Letter caseTags are entered in lower case, <para>,
not<PARA>.Text that appears in SGML contexts is generally written in upper
case, <!ENTITY…>, and
<!DOCTYPE…>, not<!entity…> and
<!doctype…>.IndentationEach file starts with indentation set at column 0,
regardless of the indentation level of the file
which might contain this one.Every start tag increases the indentation level by 2 spaces, and
every end tag decreases the indentation level by 2 spaces. Content
within elements should be indented by two spaces if the content runs
over more than one line.For example, the source for this section looks something
like;......IndentationEach file starts with indentation set at column 0,
regardless of the indentation level of the file
which might contain this one.Every start tag increases the indentation level by 2 spaces, and
every end tag decreases the indentation level by 2 spaces. Content
within elements should be indented by two spaces if the content runs
over more than one line.
...
]]>If you use Emacs or
Xemacs to edit the files then
sgml-mode should be loaded automatically, and the
Emacs local variables at the bottom of each file should enforce these
styles.White space changesWhen committing changes, do not commit changes to the
content at the same time as changes to the
formatting.This is so that the teams that convert the Handbook to other
languages can quickly see what content has actually changed in your
commit, without having to decide whether a line has changed because of
the content, or just because it has been refilled.For example, if you have added two sentances to a paragraph, such
that the line lengths on the paragraph now go over 80 columns, first
commit your change with the too-long line lengths. Then fix the line
wrapping, and commit this second change. In the commit message for
the second change, be sure to indicate that this is a whitespace-only
change, and that the translation team can ignore it.Converting the Handbook to other formats
diff --git a/en_US.ISO_8859-1/books/fdp-primer/tools/chapter.sgml b/en_US.ISO_8859-1/books/fdp-primer/tools/chapter.sgml
index 72eeddf8f6..1051eb20c5 100644
--- a/en_US.ISO_8859-1/books/fdp-primer/tools/chapter.sgml
+++ b/en_US.ISO_8859-1/books/fdp-primer/tools/chapter.sgml
@@ -1,284 +1,284 @@
ToolsThe FDP uses a number of different software tools to help
manage the FreeBSD documentation, convert it to different output
formats, and so on. You will need to use these tools yourself if
you are to work with the FreeBSD documentation.All these tools are available as FreeBSD Ports and Packages,
greatly simplifying the work you have to do to install
them.You will need to install these tools before you work through
any of the examples in later chapters. The actual usage of these
tools is covered in these later chapters.Use textproc/docproj if possibleYou can save yourself a lot of time if you install the
textproc/docproj port. This is a
meta-port which does not contain any software
itself. Instead, it depends on various other ports being installed
correctly. Installing this port should
automatically download and install all of the packages listed in this
chapter that you need that are missing from your system.One of the packages that you might need is the JadeTeX macro set.
In turn, this macro set requires that TeX is installed. TeX is a large
package, and you only need it if you want to produce Postscript or PDF
output.To save yourself time and space you must specify whether or not you
want JadeTeX (and therefore TeX) installed when you install this port.
Either do;
&prompt.root; make JADETEX=yes install
or
&prompt.root; make JADETEX=no install
as necessary.Mandatory toolsSoftwareThese programs are required before you can usefully work with
the FreeBSD documentation. They are all included in
textproc/docproj.SP
(textproc/sp)A suite of applications, including a validating SGML parser,
and an SGML normaliser.Jade
(textproc/jade)A DSSSL implementation. Used for converting marked up
documents to other formats, including HTML and TeX.Tidy
(www/tidy)An HTML 'pretty printer', used to reformat some of the
automatically generated HTML so that it is easier to
follow.Lynx
(www/lynx-current)A text-mode WWW browser, &man.lynx.1; can also convert
HTML files to plain text.DTDs and EntitiesThese are the DTDs and entity sets used by the FDP. They need to
be installed before you can work with any of the documentation.HTML DTD (textproc/html)HTML is the markup language of choice for the World Wide
Web, and is used throughout the FreeBSD web site.LinuxDoc DTD (textproc/linuxdoc)Some FreeBSD documentation is marked up in LinuxDoc. The
FDP is actively migrating from LinuxDoc to DocBook.DocBook DTD (textproc/docbook)DocBook is designed for marking up technical documentation,
and the FDP is migrating from LinuxDoc to DocBook. At the time
of writing, this document, and the FreeBSD Handbook are marked
up in DocBook.ISO 8879 entities
(textproc/iso8879)19 of the ISO 8879:1986 character entity sets used by many
DTDs. Includes named mathematical symbols, additional
characters in the 'latin' character set (accents, diacriticals,
and so on), and greek symbols.StylesheetsThe stylesheets are used when converting and formatting the
documentation for display on screen, printing, and so on.Modular DocBook Stylesheets
(textproc/dsssl-docbook-modular)The Modular DocBook Stylesheets are used when converting
documentation marked up in DocBook to other formats, such as
HTML, or RTF.Optional toolsYou do not need to have any of the following installed. However,
you may find it easier to work with the documentation if you do, and
they may give you more flexibility in the output formats that can be
generated.SoftwareJadeTeX and
teTeX
(print/jadetex and
print/teTeX-beta)Jade and
teTeX are used to convert DocBook
documents to DVI, Postscript, and PDF formats. The
JadeTeX macros are needed in order to
do this.If you do not intend to convert your documentation to one of
these formats (i.e., HTML, plain text, and RTF are sufficient)
then you do not need to install
JadeTeX and
teTeX. This can be a significant
space and time saver, as teTeX is
over 30MB in size.If you decide to install
JadeTeX and
teTeX then you will need to
configure teTeX after
JadeTeX has been installed.
print/jadetex/pkg/MESSAGE contains
detailed instructions explaining what you need to do.Emacs or
xemacs
(editors/emacs or
editors/xemacs)Both these editors include a special mode for editing
documents marked up according to an SGML DTD. This mode
includes commands to reduce the amount of typing you need, and
help reduce the possibility of errors.You do not need to use them, any text editor can be used to
edit marked up documents. You may find they make you
efficient.If anyone has recommendations for other software that is useful
when manipulating SGML documents, please let Nik Clayton
- (nik@freebsd.org) know, so they can be added to this
+ (nik@FreeBSD.org) know, so they can be added to this
list.
diff --git a/en_US.ISO_8859-1/books/fdp-primer/translations/chapter.sgml b/en_US.ISO_8859-1/books/fdp-primer/translations/chapter.sgml
index 1b3526ab7c..7fab8d7eb2 100644
--- a/en_US.ISO_8859-1/books/fdp-primer/translations/chapter.sgml
+++ b/en_US.ISO_8859-1/books/fdp-primer/translations/chapter.sgml
@@ -1,474 +1,474 @@
TranslationsThis is the FAQ for people translating the FreeBSD documentation
(FAQ, Handbook, tutorials, man pages, and others) to different
languages.It is very heavily based on the translation FAQ
from the FreeBSD German Documentation Project, originally written by Frank
Grnder elwood@mc5sys.in-berlin.de and translated back to
English by Bernd Warken bwarken@mayn.de.The FAQ maintainer is Nik Clayton
nik@FreeBSD.org.Why a FAQ?More and more people are approaching the freebsd-doc mailing
list and volunteering to translate FreeBSD documentation to other
languages. This FAQ aims to answer their questions so they can start
translating documentation as quickly as possible.What do i18n and l10n
mean?i18n means
internationalisation and l10n
means localisation. They are just a convenient
shorthand.i18n can be read as “i” followed by
18 letters, followed by “n”. Similarly,
l10n is “l” followed by 10 letters,
followed by “n”.Is there a mailing list for translators?Yes, freebsd-translate@ngo.org.uk. Subscribe by
sending a message to
freebsd-translate-request@ngo.org.uk with the word
subscribe in the body of the message.You will receive a reply asking you to confirm your subscription
(in exactly the same manner as the the FreeBSD lists at FreeBSD.org).The primary language of the mailing list is English. However,
posts in other languages will be accepted. The mailing list is not
moderated, but you need to be a member of the list before you can
post to it.The mailing list is archived, but they are not currently
searchable. Sending the message help to
majordomo@ngo.org.uk will send back instructions on
how to access the archive.It is expected that the mailing list will transfer to FreeBSD.org and therefore become
official in the near future.Are more translators needed?Yes. The more people work on translation the faster it gets
done, and the faster changes to the English documentation are
mirrored in the translated documents.You do not have to be a professional translator to be able to
help.What languages do I need to know?Ideally, you will have a good knowledge of written English, and
obviously you will need to be fluent in the language you are
translating to.English is not strictly necessary. For example, you could do a
Hungarian translation of the FAQ from the Spanish
translation.What software do I need to know?It is strongly recommended that you maintain a local copy of the
FreeBSD CVS repository (at least the documentation part) either
using CTM or
CVSup. The "Staying current with FreeBSD"
chapter in the Handbook explains how to use these
applications.You should be comfortable using CVS.
This will allow you to see what has changed between different
versions of the files that make up the documentation.[XXX To Do -- write a tutorial that shows how to use CVSup to
get just the documentation, check it out, and see what's changed
between two arbitrary revisions]How do I find out who else might be translating to the same
language?The Documentation
+ url="http://www.FreeBSD.org/docproj/translations.html">Documentation
Project translations page lists the translation efforts
that are currently known about. If someone else is already working
on translating documentation to your language, please don't
duplicate their efforts. Instead, contact them to see how you can
help.If no one is listed on that page as translating for your
language then send a message to
- freebsd-doc@freebsd.org in case someone else is
+ freebsd-doc@FreeBSD.org in case someone else is
thinking of doing a translation, but hasn't announced it yet.No one else is translating to my language. What do I do?Congratulations, you have just started the “FreeBSD
your-language-here Documentation
Translation Project”. Welcome aboard.First, decide whether or not you've got the time to spare. Since
you are the only person working on your language at the moment it is
going to be your responsibility to publicise your work and
coordinate any volunteers that might want to help you.Write an e-mail to the Documentation Project mailing list,
announcing that you are going to translate the documentation, so the
Documentation Project translations page can be maintained.You should subscribe to the
freebsd-translate@ngo.org.uk mailing list (as
described earlier).If there is already someone in your country providing FreeBSD
mirroring services you should contact them and ask if they can
provide some webspace for your project, and possibly an e-mail
address or mailing list services.Then pick a document and start translating. It is best to start
with something fairly small—either the FAQ, or one of the
tutorials.I've translated some documentation, where do I send it?That depends. If you are already working with a translation team
(such as the Japanese team, or the German team) then they will have
their own procedures for handling submitted documentation, and these
will be outlined on their web pages.If you are the only person working on a particular language (or
you are responsible for a translation project and want to submit
your changes back to the FreeBSD project) then you should send your
translation to the FreeBSD project (see the next question).I'm the only person working on translating to this language, how
do I submit my translation?orWe're a translation team, and want to submit documentation that
our members have translated for us?First, make sure your translation is organised properly. This
means that it should drop in to the existing documentation tree and
build straight away.Currently, the FreeBSD documentation is stored in a top level
directory called doc/. Directories below this
are named according to the language code they are written in, as
defined in ISO639 (/usr/share/misc/iso639 on a
version of FreeBSD newer than 20th January 1999).If your language can be encoded in different ways (for example,
Chinese) then there should be directories below this, one for each
encoding format you have provided.Finally, you should have directories for each document.For example, a hypothetical Swedish translation might look
like doc/
sv/
Makefile
FAQ/
Makefile
*.sgmlsv is the ISO639 code for Swedish. Note the
two Makefiles, which will be used to build the documentation. There
is no separate language code for Swedish, so there is no
intermittent directory between the "sv" and "FAQ"
directoriesThis directory structure is going to change radically quite
soon. Please see the on-going discussions on the
- doc@FreeBSD.org mailing list for more
+ freebsd-doc@FreeBSD.org mailing list for more
information..Use &man.tar.1; and &man.gzip.1; to compress up your
documentation, and send it to the project.&prompt.user; cd doc
&prompt.user; tar cf swedish-docs.tar sv
&prompt.user; gzip -9 swedish-docs.tarPut swedish-docs.tar.gz somewhere. If you
do not have access to your own webspace (perhaps your ISP does not
let you have any) then you can e-mail Nik Clayton
nik@FreeBSD.org, and arrange to e-mail the files
when it is convenient.Either way, you should use &man.send-pr.1; to submit a report
indicating that you have submitted the documentation. It would be
very helpful if you could get other people to look over your
translation and double check it first, since it is unlikely that the
person committing it will be fluent in the language.Someone (probably the Documentation Project Manager, currently
Nik Clayton nik@FreeBSD.org) will then take your
translation and confirm that it builds. In particular, the
following things will be looked at:Do all your files use RCS strings (such as "ID").Does make all in the
sv directory work correctly.Does make install work correctly.If there are any problems then whoever is looking at the
submission will get back to you to try and work them out.If there are no problems then your translation will be committed
as soon as possible.Can I include language or country specific text in my
translation?We would prefer that you did not.For example, suppose that you are translating the Handbook to
Korean, and want to include a section about retailers in Korea in
your Handbook.There's no real reason why that information should not be in the
English (or German, or Spanish, or Japanese, or …) versions
as well. It is feasible that an English speaker in Korea might try
and pick up a copy of FreeBSD whilst over there. It also helps
increase FreeBSD's perceived presence around the globe, which is not
a bad thing.If you have country specific information, please submit it as a
change to the English Handbook (using &man.send-pr.1;) and then
translate the change back to your language in the translated
Handbook.Thanks.How should language specific characters be included?Non-ASCII characters in the documentation should be included
using SGML entities.Briefly, these look like an ampersand (&), the name of the
entity, and a semi-colon (;).The entity names are defined in ISO8879, which is in the ports
tree as textproc/iso8879.A few examples includeééSmall “e” with an acute accentÉÉLarge “E” with an acute accentüüSmall “u” with an umlautAfter you have installed the iso8879 port, the files in
/usr/local/share/sgml/iso8879 contain the
complete list.Addressing the readerIn the English documents, the reader is addressed as
“you”, there is no formal/informal distinction as there
is in some languages.If you are translating to a language which does distinguish, use
whichever form is typically used in other technical documentation in
your language. If in doubt, use a mildly polite form.Do I need to include any additional information in my
translations?Yes.The header of the English version of each document will look
something like this;]]>The exact boilerplate may change, but it will always include an
Id line and the phrase The FreeBSD Documentation
Project.Your translated documents should include their own Id line, and change the
FreeBSD Documentation Project line to
The FreeBSD language
Documentation Project.In addition, you should add a third line which indicates which
revision of the English text this is based on.So, the Spanish version of this file might start]]>
diff --git a/en_US.ISO_8859-1/books/handbook/mirrors/chapter.sgml b/en_US.ISO_8859-1/books/handbook/mirrors/chapter.sgml
index a3374adbec..19235447d5 100644
--- a/en_US.ISO_8859-1/books/handbook/mirrors/chapter.sgml
+++ b/en_US.ISO_8859-1/books/handbook/mirrors/chapter.sgml
@@ -1,1492 +1,1492 @@
Obtaining FreeBSDCD-ROM PublishersFreeBSD is available on CD-ROM from Walnut Creek CDROM:
Walnut Creek CDROM4041 Pike Lane, Suite FConcordCA, 94520USA
Phone: +1 925 674-0783
Fax: +1 925 674-0821
Email: info@cdrom.com
WWW: http://www.cdrom.com/FTP SitesThe official sources for FreeBSD are available via anonymous FTP
from:
ftp://ftp.FreeBSD.org/pub/FreeBSD.
The FreeBSD mirror
sites database is more accurate than the mirror listing in the
handbook, as it gets its information form the DNS rather than relying on
static lists of hosts.Additionally, FreeBSD is available via anonymous FTP from the
following mirror sites. If you choose to obtain FreeBSD via anonymous
FTP, please try to use a site near you.Argentina,
Australia,
Brazil,
Canada,
China,
Czech Republic,
Denmark,
Estonia,
Finland,
France,
Germany,
Hong Kong,
Ireland,
Israel,
Japan,
Korea,
Netherlands,
New Zealand,
Poland,
Portugal,
Russia,
Saudi Arabia,
South Africa,
Spain,
Slovak Republic,
Slovenia,
Sweden,
Taiwan,
Thailand,
UK,
Ukraine,
USA.ArgentinaIn case of problems, please contact the hostmaster
hostmaster@ar.FreeBSD.org for this domain.ftp://ftp.ar.FreeBSD.org/pub/FreeBSDAustraliaIn case of problems, please contact the hostmaster
hostmaster@au.FreeBSD.org for this domain.ftp://ftp.au.FreeBSD.org/pub/FreeBSDftp://ftp2.au.FreeBSD.org/pub/FreeBSDftp://ftp3.au.FreeBSD.org/pub/FreeBSDftp://ftp4.au.FreeBSD.org/pub/FreeBSDBrazilIn case of problems, please contact the hostmaster
hostmaster@br.FreeBSD.org for this domain.ftp://ftp.br.FreeBSD.org/pub/FreeBSDftp://ftp2.br.FreeBSD.org/pub/FreeBSDftp://ftp3.br.FreeBSD.org/pub/FreeBSDftp://ftp4.br.FreeBSD.org/pub/FreeBSDftp://ftp5.br.FreeBSD.org/pub/FreeBSDftp://ftp6.br.FreeBSD.org/pub/FreeBSDftp://ftp7.br.FreeBSD.org/pub/FreeBSDCanadaIn case of problems, please contact the hostmaster
hostmaster@ca.FreeBSD.org for this domain.ftp://ftp.ca.FreeBSD.org/pub/FreeBSDChinaIn case of problems, please contact the hostmaster
phj@cn.FreeBSD.org for this domain.ftp://ftp.cn.FreeBSD.org/pub/FreeBSDCzech RepublicIn case of problems, please contact the hostmaster
hostmaster@cz.FreeBSD.org for this domain.ftp://ftp.cz.FreeBSD.org Contact: calda@dzungle.ms.mff.cuni.czftp://sunsite.mff.cuni.cz/OS/FreeBSD Contact: jj@sunsite.mff.cuni.cz.DenmarkIn case of problems, please contact the hostmaster
hostmaster@dk.FreeBSD.org for this domain.ftp://ftp.dk.freeBSD.ORG/pub/FreeBSD
+ url="ftp://ftp.dk.FreeBSD.org/pub/FreeBSD">ftp://ftp.dk.FreeBSD.org/pub/FreeBSD
EstoniaIn case of problems, please contact the hostmaster
hostmaster@ee.FreeBSD.org for this domain.ftp://ftp.ee.FreeBSD.org/pub/FreeBSDFinlandIn case of problems, please contact the hostmaster
hostmaster@fi.FreeBSD.org for this domain.ftp://ftp.fi.FreeBSD.org/pub/FreeBSDFranceIn case of problems, please contact the hostmaster
hostmaster@fr.FreeBSD.org for this domain.ftp://ftp.fr.FreeBSD.org/pub/FreeBSDftp://ftp2.fr.FreeBSD.org/pub/FreeBSDftp://ftp3.fr.FreeBSD.org/pub/FreeBSDGermanyIn case of problems, please contact the hostmaster
hostmaster@de.FreeBSD.org for this domain.ftp://ftp.de.FreeBSD.org/pub/FreeBSDftp://ftp2.de.FreeBSD.org/pub/FreeBSDftp://ftp3.de.FreeBSD.org/pub/FreeBSDftp://ftp4.de.FreeBSD.org/pub/FreeBSDftp://ftp5.de.FreeBSD.org/pub/FreeBSDftp://ftp6.de.FreeBSD.org/pub/FreeBSDftp://ftp7.de.FreeBSD.org/pub/FreeBSDHong Kongftp://ftp.hk.super.net/pub/FreeBSD Contact: ftp-admin@HK.Super.NET.IrelandIn case of problems, please contact the hostmaster
hostmaster@ie.FreeBSD.org for this domain.ftp://ftp.ie.FreeBSD.org/pub/FreeBSDIsraelIn case of problems, please contact the hostmaster
hostmaster@il.FreeBSD.org for this domain.ftp://ftp.il.FreeBSD.org/pub/FreeBSDftp://ftp2.il.FreeBSD.org/pub/FreeBSDJapanIn case of problems, please contact the hostmaster
hostmaster@jp.FreeBSD.org for this domain.ftp://ftp.jp.FreeBSD.org/pub/FreeBSDftp://ftp2.jp.FreeBSD.org/pub/FreeBSDftp://ftp3.jp.FreeBSD.org/pub/FreeBSDftp://ftp4.jp.FreeBSD.org/pub/FreeBSDftp://ftp5.jp.FreeBSD.org/pub/FreeBSDftp://ftp6.jp.FreeBSD.org/pub/FreeBSDKoreaIn case of problems, please contact the hostmaster
hostmaster@kr.FreeBSD.org for this domain.ftp://ftp.kr.FreeBSD.org/pub/FreeBSDftp://ftp2.kr.FreeBSD.org/pub/FreeBSDftp://ftp3.kr.FreeBSD.org/pub/FreeBSDftp://ftp4.kr.FreeBSD.org/pub/FreeBSDftp://ftp5.kr.FreeBSD.org/pub/FreeBSDftp://ftp6.kr.FreeBSD.org/pub/FreeBSDNetherlandsIn case of problems, please contact the hostmaster
hostmaster@nl.FreeBSD.org for this domain.ftp://ftp.nl.FreeBSD.org/pub/FreeBSDNew ZealandIn case of problems, please contact the hostmaster
hostmaster@nz.FreeBSD.org for this domain.ftp://ftp.nz.FreeBSD.org/pub/FreeBSDPolandIn case of problems, please contact the hostmaster
hostmaster@pl.FreeBSD.org for this domain.ftp://ftp.pl.FreeBSD.org/pub/FreeBSDPortugalIn case of problems, please contact the hostmaster
hostmaster@pt.FreeBSD.org for this domain.ftp://ftp.pt.FreeBSD.org/pub/FreeBSDftp://ftp2.pt.FreeBSD.org/pub/FreeBSDRussiaIn case of problems, please contact the hostmaster
hostmaster@ru.FreeBSD.org for this domain.ftp://ftp.ru.FreeBSD.org/pub/FreeBSDftp://ftp2.ru.FreeBSD.org/pub/FreeBSDftp://ftp3.ru.FreeBSD.org/pub/FreeBSDftp://ftp4.ru.FreeBSD.org/pub/FreeBSDSaudi ArabiaIn case of problems, please contact
ftpadmin@isu.net.saftp://ftp.isu.net.sa/pub/mirrors/ftp.freebsd.orgSouth AfricaIn case of problems, please contact the hostmaster
hostmaster@za.FreeBSD.org for this domain.ftp://ftp.za.FreeBSD.org/pub/FreeBSDftp://ftp2.za.FreeBSD.org/pub/FreeBSDftp://ftp3.za.FreeBSD.org/pub/FreeBSDSlovak RepublicIn case of problems, please contact the hostmaster
hostmaster@sk.FreeBSD.org for this domain.ftp://ftp.sk.FreeBSD.org/pub/FreeBSDSloveniaIn case of problems, please contact the hostmaster
hostmaster@si.FreeBSD.org for this domain.ftp://ftp.si.FreeBSD.org/pub/FreeBSDSpainIn case of problems, please contact the hostmaster
hostmaster@es.FreeBSD.org for this domain.ftp://ftp.es.FreeBSD.org/pub/FreeBSDSwedenIn case of problems, please contact the hostmaster
hostmaster@se.FreeBSD.org for this domain.ftp://ftp.se.FreeBSD.org/pub/FreeBSDftp://ftp2.se.FreeBSD.org/pub/FreeBSDftp://ftp3.se.FreeBSD.org/pub/FreeBSDTaiwanIn case of problems, please contact the hostmaster
hostmaster@tw.FreeBSD.org for this domain.ftp://ftp.tw.FreeBSD.org/pub/FreeBSDftp://ftp2.tw.FreeBSD.org/pub/FreeBSDftp://ftp3.tw.FreeBSD.org/pub/FreeBSDThailandftp://ftp.nectec.or.th/pub/FreeBSD Contact: ftpadmin@ftp.nectec.or.th.Ukraineftp://ftp.ua.FreeBSD.org/pub/FreeBSD Contact: freebsd-mnt@lucky.net.UKIn case of problems, please contact the hostmaster
hostmaster@uk.FreeBSD.org for this domain.ftp://ftp.uk.FreeBSD.org/pub/FreeBSDftp://ftp2.uk.FreeBSD.org/pub/FreeBSDftp://ftp3.uk.FreeBSD.org/pub/FreeBSDftp://ftp4.uk.FreeBSD.org/pub/FreeBSDUSAIn case of problems, please contact the hostmaster
hostmaster@FreeBSD.org for this domain.ftp://ftp.FreeBSD.org/pub/FreeBSDftp://ftp2.FreeBSD.org/pub/FreeBSDftp://ftp3.FreeBSD.org/pub/FreeBSDftp://ftp4.FreeBSD.org/pub/FreeBSDftp://ftp5.FreeBSD.org/pub/FreeBSDftp://ftp6.FreeBSD.org/pub/FreeBSDThe latest versions of export-restricted code for FreeBSD (2.0C or
later) (eBones and secure) are being made available at the following
locations. If you are outside the U.S. or Canada, please get secure
(DES) and eBones (Kerberos) from one of the following foreign
distribution sites:South AfricaHostmaster hostmaster@internat.FreeBSD.org for
this domain.ftp://ftp.internat.FreeBSD.org/pub/FreeBSDftp://ftp2.internat.FreeBSD.org/pub/FreeBSDBrazilHostmaster hostmaster@br.FreeBSD.org for this
domain.ftp://ftp.br.FreeBSD.org/pub/FreeBSDFinlandftp://nic.funet.fi/pub/unix/FreeBSD/eurocrypt Contact: count@nic.funet.fi.CTM SitesCTM/FreeBSD is available via anonymous
FTP from the following mirror sites. If you choose to obtain CTM via
anonymous FTP, please try to use a site near you.In case of problems, please contact &a.phk;.California, Bay Area, official sourceftp://ftp.FreeBSD.org/pub/FreeBSD/development/CTMGermany, Trierftp://ftp.uni-trier.de/pub/unix/systems/BSD/FreeBSD/CTMSouth Africa, backup server for old deltasftp://ftp.internat.FreeBSD.org/pub/FreeBSD/CTMTaiwan/R.O.C, Chiayiftp://ctm.tw.FreeBSD.org/pub/FreeBSD/CTMftp://ctm2.tw.FreeBSD.org/pub/FreeBSD/CTMftp://ctm3.tw.FreeBSD.org/pub/freebsd/CTMIf you did not find a mirror near to you or the mirror is
incomplete, try FTP
search at http://ftpsearch.ntnu.no/ftpsearch.
FTP search is a great free archie server in Trondheim, Norway.CVSup SitesCVSup servers for FreeBSD are running
at the following sites:Argentinacvsup.ar.FreeBSD.org (maintainer
msagre@cactus.fi.uba.ar)Australiacvsup.au.FreeBSD.org (maintainer
dawes@physics.usyd.edu.au)Brazilcvsup.br.FreeBSD.org (maintainer
cvsup@cvsup.br.FreeBSD.org)cvsup2.br.FreeBSD.org (maintainer
tps@ti.sk)Canadacvsup.ca.FreeBSD.org (maintainer
dan@jaded.net)Chinacvsup.cn.FreeBSD.org (maintainer
phj@cn.FreeBSD.org)Czech Republiccvsup.cz.FreeBSD.org (maintainer
cejkar@dcse.fee.vutbr.cz)Denmarkcvsup.dk.FreeBSD.org (maintainer
jesper@skriver.dk)Estoniacvsup.ee.FreeBSD.org (maintainer
taavi@uninet.ee)Finlandcvsup.fi.FreeBSD.org (maintainer
count@key.sms.fi)cvsip2.fi.FreeBSD.org (maintainer
count@key.sms.fi)Francecvsup.fr.FreeBSD.org (maintainer
hostmaster@fr.FreeBSD.org)Germanycvsup.de.FreeBSD.org (maintainer
wosch@FreeBSD.org)cvsup2.de.FreeBSD.org (maintainer
petzi@FreeBSD.org)cvsup3.de.FreeBSD.org (maintainer
ag@leo.org)Icelandcvsup.is.FreeBSD.org (maintainer
adam@veda.is)Japancvsup.jp.FreeBSD.org (maintainer
simokawa@sat.t.u-tokyo.ac.jp)cvsup2.jp.FreeBSD.org (maintainer
max@FreeBSD.org)cvsup3.jp.FreeBSD.org (maintainer
shige@cin.nihon-u.ac.jp)cvsup4.jp.FreeBSD.org (maintainer
cvsup-admin@ftp.media.kyoto-u.ac.jp)cvsup5.jp.FreeBSD.org (maintainer
cvsup@imasy.or.jp)Koreacvsup.kr.FreeBSD.org (maintainer
cjh@kr.FreeBSD.org)Netherlandscvsup.nl.FreeBSD.org (maintainer
xaa@xaa.iae.nl)Norwaycvsup.no.FreeBSD.org (maintainer
Tor.Egge@idt.ntnu.no)Polandcvsup.pl.FreeBSD.org (maintainer
Mariusz@kam.pl)Russiacvsup.ru.FreeBSD.org (maintainer
mishania@demos.su)cvsup2.ru.FreeBSD.org (maintainer
dv@dv.ru)Spaincvsup.es.FreeBSD.org (maintainer
jesusr@FreeBSD.org)Swedencvsup.se.FreeBSD.org (maintainer
pantzer@ludd.luth.se)Slovak Republiccvsup.sk.FreeBSD.org (maintainer
tps@tps.sk)cvsup2.sk.FreeBSD.org (maintainer
tps@tps.sk)South Africacvsup.za.FreeBSD.org (maintainer
markm@FreeBSD.org)cvsup2.za.FreeBSD.org (maintainer
markm@FreeBSD.org)Taiwancvsup.tw.FreeBSD.org (maintainer
jdli@freebsd.csie.nctu.edu.tw)Ukrainecvsup2.ua.FreeBSD.org (maintainer
freebsd-mnt@lucky.net)United Kingdomcvsup.uk.FreeBSD.org (maintainer
joe@pavilion.net)cvsup2.uk.FreeBSD.org (maintainer
brian@FreeBSD.org)USAcvsup1.FreeBSD.org (maintainer
skynyrd@opus.cts.cwu.edu), Washington
statecvsup2.FreeBSD.org (maintainer
jdp@FreeBSD.org), Californiacvsup3.FreeBSD.org (maintainer
wollman@FreeBSD.org), Massachusettscvsup5.FreeBSD.org (maintainer
ck@adsu.bellsouth.com), Georgiacvsup6.FreeBSD.org (maintainer
jdp@FreeBSD.org), FloridaThe export-restricted code for FreeBSD (eBones and secure) is
available via CVSup at the following
international repository. Please use this site to get the
export-restricted code, if you are outside the USA or Canada.South Africacvsup.internat.FreeBSD.org (maintainer
markm@FreeBSD.org)The following CVSup site is especially
designed for CTM users. Unlike the other
CVSup mirrors, it is kept up-to-date by CTM.
That means if you CVSupcvs-all with release=cvs from this
site, you get a version of the repository (including the inevitable
.ctm_status file) which is suitable for being
updated using the CTMcvs-cur deltas. This allows users who track the
entire cvs-all tree to go from
CVSup to CTM
without having to rebuild their repository from scratch using a fresh
CTM base delta.This special feature only works for the cvs-all
distribution with cvs as the release tag.
CVSupping any other distribution and/or release will get you the
specified distribution, but it will not be suitable for
CTM updating.Because the current version of CTM does
not preserve the timestamps of files, the timestamps at this mirror
site are not the same as those at other mirror sites. Switching
between this site and other sites is not recommended. It will work
correctly, but will be somewhat inefficient.Germanyctm.FreeBSD.org (maintainer
blank@fox.uni-trier.de)AFS SitesAFS servers for FreeBSD are running at the following sites;SwedenThe path to the files are:
/afs/stacken.kth.se/ftp/pub/FreeBSD
stacken.kth.se # Stacken Computer Club, KTH, Sweden
130.237.234.43 #hot.stacken.kth.se
130.237.237.230 #fishburger.stacken.kth.se
130.237.234.3 #milko.stacken.kth.seMaintainer ftp@stacken.kth.se