diff --git a/en/handbook/advanced-networking/chapter.sgml b/en/handbook/advanced-networking/chapter.sgml
index a5ed9584f2..8f3ecfdc06 100644
--- a/en/handbook/advanced-networking/chapter.sgml
+++ b/en/handbook/advanced-networking/chapter.sgml
@@ -1,934 +1,934 @@
Advanced NetworkingGateways and RoutesContributed by &a.gryphon;. 6 October
1995.For one machine to be able to find another, there must be a
mechanism in place to describe how to get from one to the other. This is
called Routing. A “route” is a defined pair of addresses: a
“destination” and a “gateway”. The pair
indicates that if you are trying to get to this
destination, send along through this
gateway. There are three types of destinations:
individual hosts, subnets, and “default”. The
“default route” is used if none of the other routes apply.
We will talk a little bit more about default routes later on. There are
also three types of gateways: individual hosts, interfaces (also called
“links”), and ethernet hardware addresses.An exampleTo illustrate different aspects of routing, we will use the
following example which is the output of the command netstat
-r:Destination Gateway Flags Refs Use Netif Expire
default outside-gw UGSc 37 418 ppp0
localhost localhost UH 0 181 lo0
test0 0:e0:b5:36:cf:4f UHLW 5 63288 ed0 77
10.20.30.255 link#1 UHLW 1 2421
foobar.com link#1 UC 0 0
host1 0:e0:a8:37:8:1e UHLW 3 4601 lo0
host2 0:e0:a8:37:8:1e UHLW 0 5 lo0 =>
host2.foobar.com link#1 UC 0 0
224 link#1 UC 0 0The first two lines specify the default route (which we will cover
in the next section) and the localhost route.The interface (Netif column) that it specifies
to use for localhost is
lo0, also known as the loopback device. This
says to keep all traffic for this destination internal, rather than
sending it out over the LAN, since it will only end up back where it
started anyway.The next thing that stands out are the 0:e0:... addresses. These are ethernet hardware
addresses. FreeBSD will automatically identify any hosts
(test0 in the example) on the local ethernet and add
a route for that host, directly to it over the ethernet interface,
ed0. There is also a timeout
(Expire column) associated with this type of route,
which is used if we fail to hear from the host in a specific amount of
time. In this case the route will be automatically deleted. These
hosts are identified using a mechanism known as RIP (Routing
Information Protocol), which figures out routes to local hosts based
upon a shortest path determination.FreeBSD will also add subnet routes for the local subnet (10.20.30.255 is the broadcast address for the
subnet 10.20.30, and foobar.com is the domain name associated
with that subnet). The designation link#1 refers
to the first ethernet card in the machine. You will notice no
additional interface is specified for those.Both of these groups (local network hosts and local subnets) have
their routes automatically configured by a daemon called
routed. If this is not run, then only routes which
are statically defined (ie. entered explicitly) will exist.The host1 line refers to our host, which it
knows by ethernet address. Since we are the sending host, FreeBSD
knows to use the loopback interface (lo0)
rather than sending it out over the ethernet interface.The two host2 lines are an example of what
happens when we use an ifconfig alias (see the section of ethernet for
reasons why we would do this). The => symbol
after the lo0 interface says that not only
are we using the loopback (since this is address also refers to the
local host), but specifically it is an alias. Such routes only show
up on the host that supports the alias; all other hosts on the local
network will simply have a link#1 line for
such.The final line (destination subnet 224) deals
with MultiCasting, which will be covered in a another section.The other column that we should talk about are the
Flags. Each route has different attributes that
are described in the column. Below is a short table of some of these
flags and their meanings:UUp: The route is active.HHost: The route destination is a single host.GGateway: Send anything for this destination on to this
remote system, which will figure out from there where to send
it.SStatic: This route was configured manually, not
automatically generated by the system.CClone: Generates a new route based upon this route for
machines we connect to. This type of route is normally used
for local networks.WWasCloned: Indicated a route that was auto-configured
based upon a local area network (Clone) route.LLink: Route involves references to ethernet
hardware.Default routesWhen the local system needs to make a connection to remote host,
it checks the routing table to determine if a known path exists. If
the remote host falls into a subnet that we know how to reach (Cloned
routes), then the system checks to see if it can connect along that
interface.If all known paths fail, the system has one last option: the
“default” route. This route is a special type of gateway
route (usually the only one present in the system), and is always
marked with a c in the flags field. For hosts on a
local area network, this gateway is set to whatever machine has a
direct connection to the outside world (whether via PPP link, or your
hardware device attached to a dedicated data line).If you are configuring the default route for a machine which
itself is functioning as the gateway to the outside world, then the
default route will be the gateway machine at your Internet Service
Provider's (ISP) site.Let us look at an example of default routes. This is a common
configuration:
[Local2] <--ether--> [Local1] <--PPP--> [ISP-Serv] <--ether--> [T1-GW]
The hosts Local1 and Local2 are
at your site, with the formed being your PPP connection to your ISP's
Terminal Server. Your ISP has a local network at their site, which
has, among other things, the server where you connect and a hardware
device (T1-GW) attached to the ISP's Internet feed.The default routes for each of your machines will be:hostdefault gatewayinterfaceLocal2Local1ethernetLocal1T1-GWPPPA common question is “Why (or how) would we set the T1-GW to
be the default gateway for Local1, rather than the ISP server it is
connected to?”.Remember, since the PPP interface is using an address on the ISP's
local network for your side of the connection, routes for any other
machines on the ISP's local network will be automatically generated.
Hence, you will already know how to reach the T1-GW machine, so there
is no need for the intermediate step of sending traffic to the ISP
server.As a final note, it is common to use the address ...1 as the gateway address for your local
network. So (using the same example), if your local class-C address
space was 10.20.30 and your ISP was
using 10.9.9 then the default routes
would be:
Local2 (10.20.30.2) --> Local1 (10.20.30.1)
Local1 (10.20.30.1, 10.9.9.30) --> T1-GW (10.9.9.1)
Dual homed hostsThere is one other type of configuration that we should cover, and
that is a host that sits on two different networks. Technically, any
machine functioning as a gateway (in the example above, using a PPP
connection) counts as a dual-homed host. But the term is really only
used to refer to a machine that sits on two local-area
networks.In one case, the machine as two ethernet cards, each having an
address on the separate subnets. Alternately, the machine may only
have one ethernet card, and be using ifconfig aliasing. The former is
used if two physically separate ethernet networks are in use, the
latter if there is one physical network segment, but two logically
separate subnets.Either way, routing tables are set up so that each subnet knows
that this machine is the defined gateway (inbound route) to the other
subnet. This configuration, with the machine acting as a Bridge
between the two subnets, is often used when we need to implement
packet filtering or firewall security in either or both
directions.Routing propagationWe have already talked about how we define our routes to the
outside world, but not about how the outside world finds us.We already know that routing tables can be set up so that all
traffic for a particular address space (in our examples, a class-C
subnet) can be sent to a particular host on that network, which will
forward the packets inbound.When you get an address space assigned to your site, your service
provider will set up their routing tables so that all traffic for your
subnet will be sent down your PPP link to your site. But how do sites
across the country know to send to your ISP?There is a system (much like the distributed DNS information) that
keeps track of all assigned address-spaces, and defines their point of
connection to the Internet Backbone. The “Backbone” are
the main trunk lines that carry Internet traffic across the country,
and around the world. Each backbone machine has a copy of a master
set of tables, which direct traffic for a particular network to a
specific backbone carrier, and from there down the chain of service
providers until it reaches your network.It is the task of your service provider to advertise to the
backbone sites that they are the point of connection (and thus the
path inward) for your site. This is known as route
propagation.TroubleshootingSometimes, there is a problem with routing propagation, and some
sites are unable to connect to you. Perhaps the most useful command
for trying to figure out where a routing is breaking down is the
&man.traceroute.8; command. It is equally useful if you cannot seem
to make a connection to a remote machine (i.e. &man.ping.8;
fails).The &man.traceroute.8; command is run with the name of the remote
host you are trying to connect to. It will show the gateway hosts
along the path of the attempt, eventually either reaching the target
host, or terminating because of a lack of connection.For more information, see the manual page for
&man.traceroute.8;.NFSContributed by &a.jlind;.Certain Ethernet adapters for ISA PC systems have limitations which
can lead to serious network problems, particularly with NFS. This
difficulty is not specific to FreeBSD, but FreeBSD systems are affected
by it.The problem nearly always occurs when (FreeBSD) PC systems are
networked with high-performance workstations, such as those made by
Silicon Graphics, Inc., and Sun Microsystems, Inc. The NFS mount will
work fine, and some operations may succeed, but suddenly the server will
seem to become unresponsive to the client, even though requests to and
from other systems continue to be processed. This happens to the client
system, whether the client is the FreeBSD system or the workstation. On
many systems, there is no way to shut down the client gracefully once
this problem has manifested itself. The only solution is often to reset
the client, because the NFS situation cannot be resolved.Though the “correct” solution is to get a higher
performance and capacity Ethernet adapter for the FreeBSD system, there
is a simple workaround that will allow satisfactory operation. If the
FreeBSD system is the server, include the option
on the mount from the client. If the FreeBSD
system is the client, then mount the NFS file
system with the option . These options may be
specified using the fourth field of the fstab entry
on the client for automatic mounts, or by using the
parameter of the mount command for manual mounts.It should be noted that there is a different problem, sometimes
mistaken for this one, when the NFS servers and clients are on different
networks. If that is the case, make certain that
your routers are routing the necessary UDP information, or you will not
get anywhere, no matter what else you are doing.In the following examples, fastws is the host
(interface) name of a high-performance workstation, and
freebox is the host (interface) name of a FreeBSD
system with a lower-performance Ethernet adapter. Also,
/sharedfs will be the exported NFS filesystem (see
man exports), and /project will
be the mount point on the client for the exported file system. In all
cases, note that additional options, such as or
and may be desirable in your
application.Examples for the FreeBSD system (freebox) as the
client: in /etc/fstab on freebox:
fastws:/sharedfs /project nfs rw,-r=1024 0 0As a manual mount command on freebox:&prompt.root; mount -t nfs -o -r=1024 fastws:/sharedfs /projectExamples for the FreeBSD system as the server: in
/etc/fstab on fastws:
freebox:/sharedfs /project nfs rw,-w=1024 0 0As a manual mount command on fastws:&prompt.root; mount -t nfs -o -w=1024 freebox:/sharedfs /projectNearly any 16-bit Ethernet adapter will allow operation without the
above restrictions on the read or write size.For anyone who cares, here is what happens when the failure occurs,
which also explains why it is unrecoverable. NFS typically works with a
“block” size of 8k (though it may do fragments of smaller
sizes). Since the maximum Ethernet packet is around 1500 bytes, the NFS
“block” gets split into multiple Ethernet packets, even
though it is still a single unit to the upper-level code, and must be
received, assembled, and acknowledged as a unit.
The high-performance workstations can pump out the packets which
comprise the NFS unit one right after the other, just as close together
as the standard allows. On the smaller, lower capacity cards, the later
packets overrun the earlier packets of the same unit before they can be
transferred to the host and the unit as a whole cannot be reconstructed
or acknowledged. As a result, the workstation will time out and try
again, but it will try again with the entire 8K unit, and the process
will be repeated, ad infinitum.By keeping the unit size below the Ethernet packet size limitation,
we ensure that any complete Ethernet packet received can be acknowledged
individually, avoiding the deadlock situation.Overruns may still occur when a high-performance workstations is
slamming data out to a PC system, but with the better cards, such
overruns are not guaranteed on NFS “units”. When an overrun
occurs, the units affected will be retransmitted, and there will be a
fair chance that they will be received, assembled, and
acknowledged.Diskless OperationContributed by &a.martin;.netboot.com/netboot.rom
allow you to boot your FreeBSD machine over the network and run FreeBSD
without having a disk on your client. Under 2.0 it is now possible to
have local swap. Swapping over NFS is also still supported.Supported Ethernet cards include: Western Digital/SMC 8003, 8013,
8216 and compatibles; NE1000/NE2000 and compatibles (requires
recompile)Setup InstructionsFind a machine that will be your server. This machine will
require enough disk space to hold the FreeBSD 2.0 binaries and
have bootp, tftp and NFS services available. Tested
machines:HP9000/8xx running HP-UX 9.04 or later (pre 9.04 doesn't
work)Sun/Solaris 2.3. (you may need to get bootp)Set up a bootp server to provide the client with IP, gateway,
netmask.
diskless:\
:ht=ether:\
:ha=0000c01f848a:\
:sm=255.255.255.0:\
:hn:\
:ds=192.1.2.3:\
:ip=192.1.2.4:\
:gw=192.1.2.5:\
:vm=rfc1048:Set up a TFTP server (on same machine as bootp server) to
provide booting information to client. The name of this file is
cfg.X.X.X.X (or
/tftpboot/cfg.X.X.X.X,
it will try both) where X.X.X.X is the
IP address of the client. The contents of this file can be any
valid netboot commands. Under 2.0, netboot has the following
commands:helpprint help listip
print/set client's IP addressserver
print/set bootp/tftp server addressnetmask
print/set netmaskhostname nameprint/set hostnamekernel
print/set kernel namerootfs
print/set root filesystemswapfs
print/set swap filesystemswapsize
set diskless swapsize in Kbytesdiskbootboot from diskautobootcontinue boot processtrans
|turn transceiver on|offflags
set boot flagsA typical completely diskless cfg file might contain:
rootfs 192.1.2.3:/rootfs/myclient
swapfs 192.1.2.3:/swapfs
swapsize 20000
hostname myclient.mydomainA cfg file for a machine with local swap might contain:
rootfs 192.1.2.3:/rootfs/myclient
hostname myclient.mydomainEnsure that your NFS server has exported the root (and swap if
applicable) filesystems to your client, and that the client has
root access to these filesystems A typical
/etc/exports file on FreeBSD might look
like:
/rootfs/myclient -maproot=0:0 myclient.mydomain
/swapfs -maproot=0:0 myclient.mydomainAnd on HP-UX:
/rootfs/myclient -root=myclient.mydomain
/swapfs -root=myclient.mydomainIf you are swapping over NFS (completely diskless
configuration) create a swap file for your client using
dd. If your swapfs command
has the arguments /swapfs and the size 20000
as in the example above, the swapfile for myclient will be called
/swapfs/swap.X.X.X.X
where X.X.X.X is the client's IP addr,
eg:&prompt.root; dd if=/dev/zero of=/swapfs/swap.192.1.2.4 bs=1k count=20000Also, the client's swap space might contain sensitive
information once swapping starts, so make sure to restrict read
and write access to this file to prevent unauthorized
access:&prompt.root; chmod 0600 /swapfs/swap.192.1.2.4Unpack the root filesystem in the directory the client will
use for its root filesystem (/rootfs/myclient
in the example above).On HP-UX systems: The server should be running HP-UX 9.04
or later for HP9000/800 series machines. Prior versions do not
allow the creation of device files over NFS.When extracting /dev in
/rootfs/myclient, beware that some
systems (HPUX) will not create device files that FreeBSD is
happy with. You may have to go to single user mode on the
first bootup (press control-c during the bootup phase), cd
/dev and do a sh ./MAKEDEV
all from the client to fix this.Run netboot.com on the client or make an
EPROM from the netboot.rom fileUsing Shared / and /usr
filesystemsAt present there isn't an officially sanctioned way of doing this,
although I have been using a shared /usr
filesystem and individual / filesystems for each
client. If anyone has any suggestions on how to do this cleanly,
please let me and/or the &a.core; know.Compiling netboot for specific setupsNetboot can be compiled to support NE1000/2000 cards by changing
the configuration in
/sys/i386/boot/netboot/Makefile. See the
comments at the top of this file.ISDNLast modified by &a.wlloyd;.A good resource for information on ISDN technology and hardware is
Dan Kegel's ISDN
Page.A quick simple roadmap to ISDN follows:If you live in Europe I suggest you investigate the ISDN card
section.If you are planning to use ISDN primarily to connect to the
Internet with an Internet Provider on a dialup non-dedicated basis,
I suggest you look into Terminal Adapters. This will give you the
most flexibility, with the fewest problems, if you change
providers.If you are connecting two lans together, or connecting to the
Internet with a dedicated ISDN connection, I suggest you consider
the stand alone router/bridge option.Cost is a significant factor in determining what solution you will
choose. The following options are listed from least expensive to most
expensive.ISDN CardsContributed by &a.hm;.This section is really only relevant to ISDN users in countries
where the DSS1/Q.931 ISDN standard is supported.Some growing number of PC ISDN cards are supported under FreeBSD
2.2.x and up by the isdn4bsd driver package. It is still under
development but the reports show that it is successfully used all over
Europe.The latest isdn4bsd version is available from ftp://isdn4bsd@ftp.consol.de/pub/,
the main isdn4bsd ftp site (you have to log in as user
isdn4bsd , give your mail address as the password
and change to the pub directory. Anonymous ftp
as user ftp or anonymous
will not give the desired result).Isdn4bsd allows you to connect to other ISDN routers using either
IP over raw HDLC or by using synchronous PPP. A telephone answering
machine application is also available.Many ISDN PC cards are supported, mostly the ones with a Siemens
ISDN chipset (ISAC/HSCX), support for other chipsets (from Motorola,
Cologne Chip Designs) is currently under development. For an
up-to-date list of supported cards, please have a look at the README
file.In case you are interested in adding support for a different ISDN
protocol, a currently unsupported ISDN PC card or otherwise enhancing
isdn4bsd, please get in touch with hm@kts.org.A majordomo maintained mailing list is available. To join the
- list, send mail to majordomo@FreeBSD.ORG and
+ list, send mail to majordomo@FreeBSD.org and
specify:
subscribe freebsd-isdnin the body of your message.ISDN Terminal AdaptersTerminal adapters(TA), are to ISDN what modems are to regular
phone lines.Most TA's use the standard hayes modem AT command set, and can be
used as a drop in replacement for a modem.A TA will operate basically the same as a modem except connection
and throughput speeds will be much faster than your old modem. You
will need to configure PPP exactly the same
as for a modem setup. Make sure you set your serial speed as high as
possible.The main advantage of using a TA to connect to an Internet
Provider is that you can do Dynamic PPP. As IP address space becomes
more and more scarce, most providers are not willing to provide you
with a static IP anymore. Most standalone routers are not able to
accommodate dynamic IP allocation.TA's completely rely on the PPP daemon that you are running for
their features and stability of connection. This allows you to
upgrade easily from using a modem to ISDN on a FreeBSD machine, if you
already have PPP setup. However, at the same time any problems you
experienced with the PPP program and are going to persist.If you want maximum stability, use the kernel PPP option, not the user-land iijPPP.The following TA's are know to work with FreeBSD.Motorola BitSurfer and Bitsurfer ProAdtranMost other TA's will probably work as well, TA vendors try to make
sure their product can accept most of the standard modem AT command
set.The real problem with external TA's is like modems you need a good
serial card in your computer.You should read the serial ports
section in the handbook for a detailed understanding of serial
devices, and the differences between asynchronous and synchronous
serial ports.A TA running off a standard PC serial port (asynchronous) limits
you to 115.2Kbs, even though you have a 128Kbs connection. To fully
utilize the 128Kbs that ISDN is capable of, you must move the TA to a
synchronous serial card.Do not be fooled into buying an internal TA and thinking you have
avoided the synchronous/asynchronous issue. Internal TA's simply have
a standard PC serial port chip built into them. All this will do, is
save you having to buy another serial cable, and find another empty
electrical socket.A synchronous card with a TA is at least as fast as a standalone
router, and with a simple 386 FreeBSD box driving it, probably more
flexible.The choice of sync/TA vs standalone router is largely a religious
issue. There has been some discussion of this in the mailing lists.
I suggest you search the archives for the
complete discussion.Standalone ISDN Bridges/RoutersISDN bridges or routers are not at all specific to FreeBSD or any
other operating system. For a more complete description of routing
and bridging technology, please refer to a Networking reference
book.In the context of this page, I will use router and bridge
interchangeably.As the cost of low end ISDN routers/bridges comes down, it will
likely become a more and more popular choice. An ISDN router is a
small box that plugs directly into your local Ethernet network(or
card), and manages its own connection to the other bridge/router. It
has all the software to do PPP and other protocols built in.A router will allow you much faster throughput that a standard TA,
since it will be using a full synchronous ISDN connection.The main problem with ISDN routers and bridges is that
interoperability between manufacturers can still be a problem. If you
are planning to connect to an Internet provider, I recommend that you
discuss your needs with them.If you are planning to connect two lan segments together, ie: home
lan to the office lan, this is the simplest lowest maintenance
solution. Since you are buying the equipment for both sides of the
connection you can be assured that the link will work.For example to connect a home computer or branch office network to
a head office network the following setup could be used.Branch office or Home networkNetwork is 10 Base T Ethernet. Connect router to network cable
with AUI/10BT transceiver, if necessary.
---Sun workstation
|
---FreeBSD box
|
---Windows 95 (Do not admit to owning it)
|
Standalone router
|
ISDN BRI lineIf your home/branch office is only one computer you can use a
twisted pair crossover cable to connect to the standalone router
directly.Head office or other lanNetwork is Twisted Pair Ethernet.
-------Novell Server
| H |
| ---Sun
| |
| U ---FreeBSD
| |
| ---Windows 95
| B |
|___---Standalone router
|
ISDN BRI lineOne large advantage of most routers/bridges is that they allow you
to have 2 separate independent PPP connections to
2 separate sites at the same time. This is not
supported on most TA's, except for specific(expensive) models that
have two serial ports. Do not confuse this with channel bonding, MPP
etc.This can be very useful feature, for example if you have an
dedicated internet ISDN connection at your office and would like to
tap into it, but don't want to get another ISDN line at work. A router
at the office location can manage a dedicated B channel connection
(64Kbs) to the internet, as well as a use the other B channel for a
separate data connection. The second B channel can be used for
dialin, dialout or dynamically bond(MPP etc.) with the first B channel
for more bandwidth.An Ethernet bridge will also allow you to transmit more than just
IP traffic, you can also send IPX/SPX or whatever other protocols you
use.
diff --git a/en/handbook/authors.ent b/en/handbook/authors.ent
index bc15cc25ad..43fd766942 100644
--- a/en/handbook/authors.ent
+++ b/en/handbook/authors.ent
@@ -1,387 +1,387 @@
abial@FreeBSD.org">
ache@FreeBSD.org">
adam@FreeBSD.org">
alc@FreeBSD.org">
alex@FreeBSD.org">
amurai@FreeBSD.org">
andreas@FreeBSD.org">
archie@FreeBSD.org">
asami@FreeBSD.org">
ats@FreeBSD.org">
awebster@pubnix.net">
bde@FreeBSD.org">
billf@FreeBSD.org">
brandon@FreeBSD.org">
brian@FreeBSD.org">
cawimm@FreeBSD.org">
cg@FreeBSD.org">
charnier@FreeBSD.org">
chuckr@glue.umd.edu">
chuckr@FreeBSD.org">
cpiazza@FreeBSD.org">
cracauer@FreeBSD.org">
csgr@FreeBSD.org">
cwt@FreeBSD.org">
danny@FreeBSD.org">
darrenr@FreeBSD.org">
davidn@blaze.net.au">
dbaker@FreeBSD.org">
dburr@FreeBSD.org">
dcs@FreeBSD.org">
deischen@FreeBSD.org">
des@FreeBSD.org">
dfr@FreeBSD.org">
dg@FreeBSD.org">
dick@FreeBSD.org">
dillon@FreeBSD.org">
dima@FreeBSD.org">
dirk@FreeBSD.org">
Dirk.vanGulik@jrc.it">
dt@FreeBSD.org">
dufault@FreeBSD.org">
dwhite@FreeBSD.org">
dyson@FreeBSD.org">
eivind@FreeBSD.org">
ejc@FreeBSD.org">
erich@FreeBSD.org">
faq@FreeBSD.org">
fenner@FreeBSD.org">
flathill@FreeBSD.org">
foxfair@FreeBSD.org">
fsmp@FreeBSD.org">
gallatin@FreeBSD.org">
gclarkii@FreeBSD.org">
gehenna@FreeBSD.org">
gena@NetVision.net.il">
ghelmer@cs.iastate.edu">
gibbs@FreeBSD.org">
gj@FreeBSD.org">
gpalmer@FreeBSD.org">
graichen@FreeBSD.org">
green@FreeBSD.org">
grog@FreeBSD.org">
gryphon@healer.com">
guido@FreeBSD.org">
hanai@FreeBSD.org">
handy@sxt4.physics.montana.edu">
helbig@FreeBSD.org">
hm@FreeBSD.org">
hoek@FreeBSD.org">
hosokawa@FreeBSD.org">
hsu@FreeBSD.org">
imp@FreeBSD.org">
itojun@itojun.org">
iwasaki@FreeBSD.org">
jasone@FreeBSD.org">
jb@cimlogic.com.au">
jdp@FreeBSD.org">
jehamby@lightside.com">
jfieber@FreeBSD.org">
jfitz@FreeBSD.org">
jgreco@FreeBSD.org">
jhay@FreeBSD.org">
jhs@FreeBSD.org">
jkh@FreeBSD.org">
jkoshy@FreeBSD.org">
jlemon@FreeBSD.org">
john@starfire.MN.ORG">
jlrobin@FreeBSD.org">
jmacd@FreeBSD.org">
jmb@FreeBSD.org">
jmg@FreeBSD.org">
jmz@FreeBSD.org">
joerg@FreeBSD.org">
john@FreeBSD.org">
jraynard@FreeBSD.org">
jseger@FreeBSD.org">
julian@FreeBSD.org">
jvh@FreeBSD.org">
karl@FreeBSD.org">
kato@FreeBSD.org">
kelly@plutotech.com">
ken@FreeBSD.org">
kjc@FreeBSD.org">
kris@FreeBSD.org">
kuriyama@FreeBSD.org">
lars@FreeBSD.org">
lile@FreeBSD.org">
ljo@FreeBSD.org">
luoqi@FreeBSD.org">
marcel@FreeBSD.org">
markm@FreeBSD.org">
martin@FreeBSD.org">
max@FreeBSD.org">
mark@vmunix.com">
mbarkah@FreeBSD.org">
mckay@FreeBSD.org">
mckusick@FreeBSD.org">
md@bsc.no">
winter@jurai.net">
mharo@FreeBSD.org">
mjacob@FreeBSD.org">
mks@FreeBSD.org">
motoyuki@FreeBSD.org">
mph@FreeBSD.org">
mpp@FreeBSD.org">
msmith@FreeBSD.org">
nate@FreeBSD.org">
nectar@FreeBSD.org">
newton@FreeBSD.org">
n_hibma@FreeBSD.org">
nik@FreeBSD.org">
nsayer@FreeBSD.org">
nsj@FreeBSD.org">
nyan@FreeBSD.org">
obrien@FreeBSD.org">
olah@FreeBSD.org">
opsys@open-systems.net">
paul@FreeBSD.org">
pb@fasterix.freenix.org">
pds@FreeBSD.org">
peter@FreeBSD.org">
phk@FreeBSD.org">
pjchilds@imforei.apana.org.au">
proven@FreeBSD.org">
pst@FreeBSD.org">
rgrimes@FreeBSD.org">
rhuff@cybercom.net">
ricardag@ag.com.br">
rich@FreeBSD.org">
rnordier@FreeBSD.org">
roberto@FreeBSD.org">
rse@FreeBSD.org">
ru@FreeBSD.org">
sada@FreeBSD.org">
scrappy@FreeBSD.org">
se@FreeBSD.org">
sef@FreeBSD.org">
sheldonh@FreeBSD.org">
shige@FreeBSD.org">
simokawa@FreeBSD.org">
smace@FreeBSD.org">
smpatel@FreeBSD.org">
sos@FreeBSD.org">
stark@FreeBSD.org">
stb@FreeBSD.org">
steve@FreeBSD.org">
swallace@FreeBSD.org">
tanimura@FreeBSD.org">
taoka@FreeBSD.org">
tedm@FreeBSD.org">
tegge@FreeBSD.org">
tg@FreeBSD.org">
thepish@FreeBSD.org">
-tom@freebsd.org">
+tom@FreeBSD.org">
torstenb@FreeBSD.org">
truckman@FreeBSD.org">
ugen@FreeBSD.org">
uhclem@FreeBSD.org">
ulf@FreeBSD.org">
vanilla@FreeBSD.org">
wes@FreeBSD.org">
whiteside@acm.org">
wilko@yedi.iaf.nl">
wlloyd@mpd.ca">
wollman@FreeBSD.org">
wosch@FreeBSD.org">
wpaul@FreeBSD.org">
yokota@FreeBSD.org">
diff --git a/en/handbook/bibliography/chapter.sgml b/en/handbook/bibliography/chapter.sgml
index b11aa28161..aeabf86faf 100644
--- a/en/handbook/bibliography/chapter.sgml
+++ b/en/handbook/bibliography/chapter.sgml
@@ -1,478 +1,478 @@
BibliographyWhile the manual pages provide the definitive reference for individual
pieces of the FreeBSD operating system, they are notorious for not
illustrating how to put the pieces together to make the whole operating
system run smoothly. For this, there is no substitute for a good book on
UNIX system administration and a good users' manual.Books & Magazines Specific to FreeBSDInternational books &
Magazines:Using
FreeBSD (in Chinese).FreeBSD for PC 98'ers (in Japanese), published by SHUWA System
Co, LTD. ISBN 4-87966-468-5 C3055 P2900E.FreeBSD (in Japanese), published by CUTT. ISBN 4-906391-22-2
C3055 P2400E.Complete Introduction to FreeBSD (in Japanese), published by Shoeisha Co., Ltd. ISBN 4-88135-473-6 P3600E.Personal UNIX Starter Kit FreeBSD (in Japanese), published by ASCII. ISBN 4-7561-1733-3 P3000E.FreeBSD Handbook (Japanese translation), published by ASCII. ISBN 4-7561-1580-2
P3800E.FreeBSD mit Methode (in German), published by Computer und
Literatur Verlag/Vertrieb Hanser, 1998. ISBN 3-932311-31-0.FreeBSD Install and Utilization Manual (in Japanese), published by Mainichi Communications Inc..English language books & Magazines:The
Complete FreeBSD, published by Walnut Creek CDROM.Users' GuidesComputer Systems Research Group, UC Berkeley. 4.4BSD
User's Reference Manual. O'Reilly & Associates,
Inc., 1994. ISBN 1-56592-075-9Computer Systems Research Group, UC Berkeley. 4.4BSD
User's Supplementary Documents. O'Reilly &
Associates, Inc., 1994. ISBN 1-56592-076-7UNIX in a Nutshell. O'Reilly &
Associates, Inc., 1990. ISBN 093717520XMui, Linda. What You Need To Know When You Can't Find
Your UNIX System Administrator. O'Reilly &
Associates, Inc., 1995. ISBN 1-56592-104-6Ohio State
University has written a UNIX
Introductory Course which is available online in HTML and
postscript format.
- Jpman Project, Japan
+ Jpman Project, Japan
FreeBSD Users Group. FreeBSD User's
Reference Manual (Japanese translation). Mainichi Communications
Inc., 1998. ISBN4-8399-0088-4 P3800E.Administrators' GuidesAlbitz, Paul and Liu, Cricket. DNS and
BIND, 2nd Ed. O'Reilly & Associates, Inc., 1997.
ISBN 1-56592-236-0Computer Systems Research Group, UC Berkeley. 4.4BSD
System Manager's Manual. O'Reilly & Associates,
Inc., 1994. ISBN 1-56592-080-5Costales, Brian, et al. Sendmail, 2nd Ed.
O'Reilly & Associates, Inc., 1997. ISBN 1-56592-222-0Frisch, Æleen. Essential System
Administration, 2nd Ed. O'Reilly & Associates,
Inc., 1995. ISBN 1-56592-127-5Hunt, Craig. TCP/IP Network
Administration. O'Reilly & Associates, Inc., 1992.
ISBN 0-937175-82-XNemeth, Evi. UNIX System Administration
Handbook. 2nd Ed. Prentice Hall, 1995. ISBN
0131510517Stern, Hal Managing NFS and NIS O'Reilly
& Associates, Inc., 1991. ISBN 0-937175-75-7
- Jpman Project, Japan
+ Jpman Project, Japan
FreeBSD Users Group. FreeBSD System
Administrator's Manual (Japanese translation). Mainichi Communications
Inc., 1998. ISBN4-8399-0109-0 P3300E.Programmers' GuidesAsente, Paul. X Window System Toolkit.
Digital Press. ISBN 1-55558-051-3Computer Systems Research Group, UC Berkeley. 4.4BSD
Programmer's Reference Manual. O'Reilly &
Associates, Inc., 1994. ISBN 1-56592-078-3Computer Systems Research Group, UC Berkeley. 4.4BSD
Programmer's Supplementary Documents. O'Reilly &
Associates, Inc., 1994. ISBN 1-56592-079-1Harbison, Samuel P. and Steele, Guy L. Jr. C: A
Reference Manual. 4rd ed. Prentice Hall, 1995.
ISBN 0-13-326224-3Kernighan, Brian and Dennis M. Ritchie. The C
Programming Language.. PTR Prentice Hall, 1988.
ISBN 0-13-110362-9Lehey, Greg. Porting UNIX Software.
O'Reilly & Associates, Inc., 1995. ISBN 1-56592-126-7Plauger, P. J. The Standard C Library.
Prentice Hall, 1992. ISBN 0-13-131509-9Stevens, W. Richard. Advanced Programming in the UNIX
Environment. Reading, Mass. : Addison-Wesley, 1992
ISBN 0-201-56317-7Stevens, W. Richard. UNIX Network
Programming. 2nd Ed, PTR Prentice Hall, 1998. ISBN
0-13-490012-XWells, Bill. “Writing Serial Drivers for UNIX”.
Dr. Dobb's Journal. 19(15), December 1994.
pp68-71, 97-99.Operating System InternalsAndleigh, Prabhat K. UNIX System
Architecture. Prentice-Hall, Inc., 1990. ISBN
0-13-949843-5Jolitz, William. “Porting UNIX to the 386”.
Dr. Dobb's Journal. January 1991-July
1992.Leffler, Samuel J., Marshall Kirk McKusick, Michael J Karels and
John Quarterman The Design and Implementation of the
4.3BSD UNIX Operating System. Reading, Mass. :
Addison-Wesley, 1989. ISBN 0-201-06196-1Leffler, Samuel J., Marshall Kirk McKusick, The Design
and Implementation of the 4.3BSD UNIX Operating System: Answer
Book. Reading, Mass. : Addison-Wesley, 1991. ISBN
0-201-54629-9McKusick, Marshall Kirk, Keith Bostic, Michael J Karels, and
John Quarterman. The Design and Implementation of the
4.4BSD Operating System. Reading, Mass. :
Addison-Wesley, 1996. ISBN 0-201-54979-4Stevens, W. Richard. TCP/IP Illustrated, Volume 1:
The Protocols. Reading, Mass. : Addison-Wesley,
1996. ISBN 0-201-63346-9Schimmel, Curt. Unix Systems for Modern
Architectures. Reading, Mass. : Addison-Wesley, 1994.
ISBN 0-201-63338-8Stevens, W. Richard. TCP/IP Illustrated, Volume 3:
TCP for Transactions, HTTP, NNTP and the UNIX Domain
Protocols. Reading, Mass. : Addison-Wesley, 1996.
ISBN 0-201-63495-3Vahalia, Uresh. UNIX Internals -- The New
Frontiers. Prentice Hall, 1996. ISBN
0-13-101908-2Wright, Gary R. and W. Richard Stevens. TCP/IP
Illustrated, Volume 2: The Implementation. Reading,
Mass. : Addison-Wesley, 1995. ISBN 0-201-63354-XSecurity ReferenceCheswick, William R. and Steven M. Bellovin. Firewalls
and Internet Security: Repelling the Wily Hacker.
Reading, Mass. : Addison-Wesley, 1995. ISBN
0-201-63357-4Garfinkel, Simson and Gene Spafford. Practical UNIX
Security. 2nd Ed. O'Reilly & Associates, Inc.,
1996. ISBN 1-56592-148-8Garfinkel, Simson. PGP Pretty Good
Privacy O'Reilly & Associates, Inc., 1995. ISBN
1-56592-098-8Hardware ReferenceAnderson, Don and Tom Shanley. Pentium Processor
System Architecture. 2nd Ed. Reading, Mass. :
Addison-Wesley, 1995. ISBN 0-201-40992-5Ferraro, Richard F. Programmer's Guide to the EGA,
VGA, and Super VGA Cards. 3rd ed. Reading, Mass. :
Addison-Wesley, 1995. ISBN 0-201-62490-7Intel Corporation publishes documentation on their CPUs,
chipsets and standards on their developer web site,
usually as PDF files.Shanley, Tom. 80486 System Architecture.
3rd ed. Reading, Mass. : Addison-Wesley, 1995. ISBN
0-201-40994-1Shanley, Tom. ISA System Architecture.
3rd ed. Reading, Mass. : Addison-Wesley, 1995. ISBN
0-201-40996-8Shanley, Tom. PCI System Architecture.
3rd ed. Reading, Mass. : Addison-Wesley, 1995. ISBN
0-201-40993-3Van Gilluwe, Frank. The Undocumented PC.
Reading, Mass: Addison-Wesley Pub. Co., 1994. ISBN
0-201-62277-7UNIX HistoryLion, John Lion's Commentary on UNIX, 6th Ed. With
Source Code. ITP Media Group, 1996. ISBN
1573980137Raymond, Eric S. The New Hacker's Dictonary, 3rd
edition. MIT Press, 1996. ISBN
0-262-68092-0. Also known as the Jargon
FileSalus, Peter H. A quarter century of UNIX.
Addison-Wesley Publishing Company, Inc., 1994. ISBN
0-201-54777-5Simon Garfinkel, Daniel Weise, Steven Strassmann. The
UNIX-HATERS Handbook. IDG Books Worldwide, Inc.,
1994. ISBN 1-56884-203-1Don Libes, Sandy Ressler Life with UNIX
— special edition. Prentice-Hall, Inc., 1989. ISBN
0-13-536657-7The BSD family tree. 1997. ftp://ftp.FreeBSD.org/pub/FreeBSD/FreeBSD-current/src/share/misc/bsd-family-tree or local on a FreeBSD-current machine.The BSD Release Announcements collection.
1997. http://www.de.FreeBSD.ORG/de/ftp/releases/
+ URL="http://www.de.FreeBSD.org/de/ftp/releases/">http://www.de.FreeBSD.org/de/ftp/releases/
Networked Computer Science Technical Reports
Library. http://www.ncstrl.org/Old BSD releases from the Computer Systems Research
group (CSRG). http://www.mckusick.com/csrg/:
The 4CD set covers all BSD versions from 1BSD to 4.4BSD and
4.4BSD-Lite2 (but not 2.11BSD, unfortunately). As well, the last
disk holds the final sources plus the SCCS files.Magazines and JournalsThe C/C++ Users Journal. R&D
Publications Inc. ISSN 1075-2838Sys Admin — The Journal for UNIX System
Administrators Miller Freeman, Inc., ISSN
1061-2688
diff --git a/en/handbook/contrib/chapter.sgml b/en/handbook/contrib/chapter.sgml
index e47079d905..71a6956f69 100644
--- a/en/handbook/contrib/chapter.sgml
+++ b/en/handbook/contrib/chapter.sgml
@@ -1,5765 +1,5765 @@
Contributing to FreeBSDContributed by &a.jkh;.So you want to contribute something to FreeBSD? That is great! We can
always use the help, and FreeBSD is one of those systems that
relies on the contributions of its user base in order
to survive. Your contributions are not only appreciated, they are vital
to FreeBSD's continued growth!Contrary to what some people might also have you believe, you do not
need to be a hot-shot programmer or a close personal friend of the FreeBSD
core team in order to have your contributions accepted. The FreeBSD
Project's development is done by a large and growing number of
international contributors whose ages and areas of technical expertise
vary greatly, and there is always more work to be done than there are
people available to do it.Since the FreeBSD project is responsible for an entire operating
system environment (and its installation) rather than just a kernel or a
few scattered utilities, our TODO list also spans a
very wide range of tasks, from documentation, beta testing and
presentation to highly specialized types of kernel development. No matter
what your skill level, there is almost certainly something you can do to
help the project!Commercial entities engaged in FreeBSD-related enterprises are also
encouraged to contact us. Need a special extension to make your product
work? You will find us receptive to your requests, given that they are not
too outlandish. Working on a value-added product? Please let us know! We
may be able to work cooperatively on some aspect of it. The free software
world is challenging a lot of existing assumptions about how software is
developed, sold, and maintained throughout its life cycle, and we urge you
to at least give it a second look.What Is NeededThe following list of tasks and sub-projects represents something of
an amalgam of the various core team TODO lists and
user requests we have collected over the last couple of months. Where
possible, tasks have been ranked by degree of urgency. If you are
interested in working on one of the tasks you see here, send mail to the
coordinator listed by clicking on their names. If no coordinator has
been appointed, maybe you would like to volunteer?High priority tasksThe following tasks are considered to be urgent, usually because
they represent something that is badly broken or sorely needed:3-stage boot issues. Overall coordination: &a.hackers;Do WinNT compatible drive tagging so that the 3rd stage
can provide an accurate mapping of BIOS geometries for
disks.Filesystem problems. Overall coordination: &a.fs;Fix the MSDOS file system.Clean up and document the nullfs filesystem code.
Coordinator: &a.eivind;Fix the union file system. Coordinator: &a.dg;Implement Int13 vm86 disk driver. Coordinator:
&a.hackers;New bus architecture. Coordinator: &a.newbus;Port existing ISA drivers to new architecture.Move all interrupt-management code to appropriate parts of
the bus drivers.Port PCI subsystem to new architecture. Coordinator:
&a.dfr;Figure out the right way to handle removable devices and
then use that as a substrate on which PC-Card and CardBus
support can be implemented.Resolve the probe/attach priority issue once and for
all.Move any remaining buses over to the new
architecture.Kernel issues. Overall coordination: &a.hackers;Add more pro-active security infrastructure. Overall
coordination: &a.security;Build something like Tripwire(TM) into the kernel, with a
remote and local part. There are a number of cryptographic
issues to getting this right; contact the coordinator for
details. Coordinator: &a.eivind;Make the entire kernel use suser()
instead of comparing to 0. It is presently using about half
of each. Coordinator: &a.eivind;Split securelevels into different parts, to allow an
administrator to throw away those privileges he can throw
away. Setting the overall securelevel needs to have the same
effect as now, obviously. Coordinator: &a.eivind;Make it possible to upload a list of “allowed
program” to BPF, and then block BPF from accepting other
programs. This would allow BPF to be used e.g. for DHCP,
without allowing an attacker to start snooping the local
network.Update the security checker script. We should at least
grab all the checks from the other BSD derivatives, and add
checks that a system with securelevel increased also have
reasonable flags on the relevant parts. Coordinator:
&a.eivind;Add authorization infrastructure to the kernel, to allow
different authorization policies. Part of this could be done
by modifying suser(). Coordinatory:
&a.eivind;Add code to the NFS layer so that you cannot
chdir("..") out of an NFS partition. E.g.,
/usr is a UFS partition with
/usr/src NFS exported. Now it is
possible to use the NFS filehandle for
/usr/src to get access to
/usr.Medium priority tasksThe following tasks need to be done, but not with any particular
urgency:Full KLD based driver support/Configuration Manager.Write a configuration manager (in the 3rd stage boot?)
that probes your hardware in a sane manner, keeps only the
KLDs required for your hardware, etc.PCMCIA/PCCARD. Coordinators: &a.msmith; and &a.phk;Documentation!Reliable operation of the pcic driver (needs
testing).Recognizer and handler for sio.c
(mostly done).Recognizer and handler for ed.c
(mostly done).Recognizer and handler for ep.c
(mostly done).User-mode recognizer and handler (partially done).Advanced Power Management. Coordinators: &a.msmith; and
&a.phk;APM sub-driver (mostly done).IDE/ATA disk sub-driver (partially done).syscons/pcvt sub-driver.Integration with the PCMCIA/PCCARD drivers
(suspend/resume).Low priority tasksThe following tasks are purely cosmetic or represent such an
investment of work that it is not likely that anyone will get them
done anytime soon:The first N items are from Terry Lambert
terry@lambert.orgNetWare Server (protected mode ODI driver) loader and
subservices to allow the use of ODI card drivers supplied with
network cards. The same thing for NDIS drivers and NetWare SCSI
drivers.An "upgrade system" option that works on Linux boxes instead
of just previous rev FreeBSD boxes.Symmetric Multiprocessing with kernel preemption (requires
kernel preemption).A concerted effort at support for portable computers. This is
somewhat handled by changing PCMCIA bridging rules and power
management event handling. But there are things like detecting
internal vs. external display and picking a different screen
resolution based on that fact, not spinning down the disk if the
machine is in dock, and allowing dock-based cards to disappear
without affecting the machines ability to boot (same issue for
PCMCIA).Smaller tasksMost of the tasks listed in the previous sections require either a
considerable investment of time or an in-depth knowledge of the
FreeBSD kernel (or both). However, there are also many useful tasks
which are suitable for "weekend hackers", or people without
programming skills.If you run FreeBSD-current and have a good Internet
connection, there is a machine current.FreeBSD.org which builds a full
release once a day — every now and again, try and install
the latest release from it and report any failures in the
process.Read the freebsd-bugs mailing list. There might be a
problem you can comment constructively on or with patches you
can test. Or you could even try to fix one of the problems
yourself.Read through the FAQ and Handbook periodically. If anything
is badly explained, out of date or even just completely wrong, let
us know. Even better, send us a fix (SGML is not difficult to
learn, but there is no objection to ASCII submissions).Help translate FreeBSD documentation into your native language
(if not already available) — just send an email to &a.doc;
asking if anyone is working on it. Note that you are not
committing yourself to translating every single FreeBSD document
by doing this — in fact, the documentation most in need of
translation is the installation instructions.Read the freebsd-questions mailing list and &ng.misc
occasionally (or even regularly). It can be very satisfying to
share your expertise and help people solve their problems;
sometimes you may even learn something new yourself! These forums
can also be a source of ideas for things to work on.If you know of any bugfixes which have been successfully
applied to -current but have not been merged into -stable after a
decent interval (normally a couple of weeks), send the committer a
polite reminder.Move contributed software to src/contrib
in the source tree.Make sure code in src/contrib is up to
date.Look for year 2000 bugs (and fix any you find!)Build the source tree (or just part of it) with extra warnings
enabled and clean up the warnings.Fix warnings for ports which do deprecated things like using
gets() or including malloc.h.If you have contributed any ports, send your patches back to
the original author (this will make your life easier when they
bring out the next version)Suggest further tasks for this list!How to ContributeContributions to the system generally fall into one or more of the
following 6 categories:Bug reports and general commentaryAn idea or suggestion of general technical
interest should be mailed to the &a.hackers;. Likewise, people with
an interest in such things (and a tolerance for a
high volume of mail!) may subscribe to the
hackers mailing list by sending mail to &a.majordomo;. See mailing lists for more information
about this and other mailing lists.If you find a bug or are submitting a specific change, please
report it using the &man.send-pr.1; program or its WEB-based
equivalent. Try to fill-in each field of the bug report.
Unless they exceed 65KB, include any patches directly in the report.
When including patches, do not use cut-and-paste
because cut-and-paste turns tabs into spaces and makes them unusable.
Consider compressing patches and using &man.uuencode.1; if they exceed
20KB. Upload very large submissions to ftp.FreeBSD.org:/pub/FreeBSD/incoming/.
+ url="ftp://ftp.FreeBSD.org/pub/FreeBSD/incoming/">ftp.FreeBSD.org:/pub/FreeBSD/incoming/.
After filing a report, you should receive confirmation along with
a tracking number. Keep this tracking number so that you can update
us with details about the problem by sending mail to
- bug-followup@FreeBSD.ORG. Use the number as the
+ bug-followup@FreeBSD.org. Use the number as the
message subject, e.g. "Re: kern/3377". Additional
information for any bug report should be submitted this way.If you do not receive confirmation in a timely fashion (3 days to
a week, depending on your email connection) or are, for some reason,
unable to use the &man.send-pr.1; command, then you may ask
someone to file it for you by sending mail to the &a.bugs;.Changes to the documentationChanges to the documentation are overseen by the &a.doc;. Send
submissions and changes (even small ones are welcome!) using
send-pr as described in Bug Reports and General
Commentary.Changes to existing source codeAn addition or change to the existing source code is a somewhat
trickier affair and depends a lot on how far out of date you are with
the current state of the core FreeBSD development. There is a special
on-going release of FreeBSD known as “FreeBSD-current”
which is made available in a variety of ways for the convenience of
developers working actively on the system. See Staying current with FreeBSD for more
information about getting and using FreeBSD-current.Working from older sources unfortunately means that your changes
may sometimes be too obsolete or too divergent for easy re-integration
into FreeBSD. Chances of this can be minimized somewhat by
subscribing to the &a.announce; and the &a.current; lists, where
discussions on the current state of the system take place.Assuming that you can manage to secure fairly up-to-date sources
to base your changes on, the next step is to produce a set of diffs to
send to the FreeBSD maintainers. This is done with the &man.diff.1;
command, with the “context diff” form
being preferred. For example:&prompt.user; diff -c oldfile newfile
or
&prompt.user; diff -c -r olddir newdir
would generate such a set of context diffs for the given source file
or directory hierarchy. See the man page for &man.diff.1; for more
details.Once you have a set of diffs (which you may test with the
&man.patch.1; command), you should submit them for inclusion with
FreeBSD. Use the &man.send-pr.1; program as described in Bug Reports and General Commentary.
Do not just send the diffs to the &a.hackers; or
they will get lost! We greatly appreciate your submission (this is a
volunteer project!); because we are busy, we may not be able to
address it immediately, but it will remain in the pr database until we
do.If you feel it appropriate (e.g. you have added, deleted, or
renamed files), bundle your changes into a tar file
and run the &man.uuencode.1; program on it. Shar archives are also
welcome.If your change is of a potentially sensitive nature, e.g. you are
unsure of copyright issues governing its further distribution or you
are simply not ready to release it without a tighter review first,
then you should send it to &a.core; directly rather than submitting it
with &man.send-pr.1;. The core mailing list reaches a much smaller
group of people who do much of the day-to-day work on FreeBSD. Note
that this group is also very busy and so you
should only send mail to them where it is truly necessary.Please refer to man 9 intro and man 9
style for some information on coding style. We would
appreciate it if you were at least aware of this information before
submitting code.New code or major value-added packagesIn the rare case of a significant contribution of a large body
work, or the addition of an important new feature to FreeBSD, it
becomes almost always necessary to either send changes as uuencode'd
tar files or upload them to our ftp site ftp://ftp.FreeBSD.ORG/pub/FreeBSD/incoming.
+ URL="ftp://ftp.FreeBSD.org/pub/FreeBSD/incoming">ftp://ftp.FreeBSD.org/pub/FreeBSD/incoming.
When working with large amounts of code, the touchy subject of
copyrights also invariably comes up. Acceptable copyrights for code
included in FreeBSD are:The BSD copyright. This copyright is most preferred due to
its “no strings attached” nature and general
attractiveness to commercial enterprises. Far from discouraging
such commercial use, the FreeBSD Project actively encourages such
participation by commercial interests who might eventually be
inclined to invest something of their own into FreeBSD.The GNU Public License, or “GPL”. This license is
not quite as popular with us due to the amount of extra effort
demanded of anyone using the code for commercial purposes, but
given the sheer quantity of GPL'd code we currently require
(compiler, assembler, text formatter, etc) it would be silly to
refuse additional contributions under this license. Code under
the GPL also goes into a different part of the tree, that being
/sys/gnu or
/usr/src/gnu, and is therefore easily
identifiable to anyone for whom the GPL presents a problem.Contributions coming under any other type of copyright must be
carefully reviewed before their inclusion into FreeBSD will be
considered. Contributions for which particularly restrictive
commercial copyrights apply are generally rejected, though the authors
are always encouraged to make such changes available through their own
channels.To place a “BSD-style” copyright on your work, include
the following text at the very beginning of every source code file you
wish to protect, replacing the text between the %%
with the appropriate information.
Copyright (c) %%proper_years_here%%
%%your_name_here%%, %%your_state%% %%your_zip%%.
All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions
are met:
1. Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer as
the first lines of this file unmodified.
2. Redistributions in binary form 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 SOFTWARE IS PROVIDED BY %%your_name_here%% ``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 %%your_name_here%% 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 SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
$Id$For your convenience, a copy of this text can be found in
/usr/share/examples/etc/bsd-style-copyright.Money, Hardware or Internet accessWe are always very happy to accept donations to further the cause
of the FreeBSD Project and, in a volunteer effort like ours, a little
can go a long way! Donations of hardware are also very important to
expanding our list of supported peripherals since we generally lack
the funds to buy such items ourselves.Donating fundsWhile the FreeBSD Project is not a 501(c)(3) (charitable)
corporation and hence cannot offer special tax incentives for any
donations made, any such donations will be gratefully accepted on
behalf of the project by FreeBSD, Inc.FreeBSD, Inc. was founded in early 1995 by &a.jkh; and &a.dg;
with the goal of furthering the aims of the FreeBSD Project and
giving it a minimal corporate presence. Any and all funds donated
(as well as any profits that may eventually be realized by FreeBSD,
Inc.) will be used exclusively to further the project's
goals.Please make any checks payable to FreeBSD, Inc., sent in care of
the following address:FreeBSD, Inc.c/o Jordan Hubbard4041 Pike Lane, Suite FConcordCA, 94520(currently using the Walnut Creek CDROM address until a PO box
can be opened)Wire transfers may also be sent directly to:Bank Of AmericaConcord Main OfficeP.O. Box 37176San FranciscoCA, 94137-5176Routing #: 121-000-358Account #: 01411-07441 (FreeBSD, Inc.)Any correspondence related to donations should be sent to &a.jkh,
either via email or to the FreeBSD, Inc. postal address given above.
If you do not wish to be listed in our donors section, please specify this when
making your donation. Thanks!Donating hardwareDonations of hardware in any of the 3 following categories are
also gladly accepted by the FreeBSD Project:General purpose hardware such as disk drives, memory or
complete systems should be sent to the FreeBSD, Inc. address
listed in the donating funds
section.Hardware for which ongoing compliance testing is desired.
We are currently trying to put together a testing lab of all
components that FreeBSD supports so that proper regression
testing can be done with each new release. We are still lacking
many important pieces (network cards, motherboards, etc) and if
you would like to make such a donation, please contact &a.dg;
for information on which items are still required.Hardware currently unsupported by FreeBSD for which you
would like to see such support added. Please contact the
&a.core; before sending such items as we will need to find a
developer willing to take on the task before we can accept
delivery of new hardware.Donating Internet accessWe can always use new mirror sites for FTP, WWW or
cvsup. If you would like to be such a mirror,
please contact the FreeBSD project administrators
- admin@FreeBSD.ORG for more information.
+ admin@FreeBSD.org for more information.
Donors GalleryThe FreeBSD Project is indebted to the following donors and would
like to publically thank them here!Contributors to the central server
project:The following individuals and businesses made it possible for
the FreeBSD Project to build a new central server machine to
eventually replace freefall.FreeBSD.org
by donating the following items:&a.mbarkah and his employer,
Hemisphere Online, donated a Pentium Pro
(P6) 200Mhz CPUASA
Computers donated a Tyan 1662
motherboard.Joe McGuckin joe@via.net of ViaNet Communications donated
a Kingston ethernet controller.Jack O'Neill jack@diamond.xtalwind.net
donated an NCR 53C875 SCSI controller
card.Ulf Zimmermann ulf@Alameda.net of Alameda Networks donated
128MB of memory, a 4 Gb disk
drive and the case.Direct funding:The following individuals and businesses have generously
contributed direct funding to the project:Annelise Anderson
ANDRSN@HOOVER.STANFORD.EDU&a.dillonEpilogue Technology
Corporation&a.sefDon Scott WildeGianmarco Giovannelli
gmarco@masternet.itJosef C. Grosch joeg@truenorth.orgRobert T. Morris&a.chuckrKenneth P. Stox ken@stox.sa.enteract.com of
Imaginary Landscape,
LLC.Dmitry S. Kohmanyuk dk@dog.farm.orgLaser5 of Japan
(a portion of the profits from sales of their various FreeBSD
CD-ROMs.Fuki Shuppan
Publishing Co. donated a portion of their profits from
Hajimete no FreeBSD (FreeBSD, Getting
started) to the FreeBSD and XFree86 projects.ASCII Corp.
donated a portion of their profits from several FreeBSD-related
books to the FreeBSD project.Yokogawa Electric
Corp has generously donated significant funding to the
FreeBSD project.BuffNETPacific
SolutionsSiemens AG
via Andre
AlbsmeierChris SilvaHardware contributors:The following individuals and businesses have generously
contributed hardware for testing and device driver
development/support:Walnut Creek CDROM for providing the Pentium P5-90 and
486/DX2-66 EISA/VL systems that are being used for our
development work, to say nothing of the network access and other
donations of hardware resources.TRW Financial Systems, Inc. provided 130 PCs, three 68 GB
fileservers, twelve Ethernets, two routers and an ATM switch for
debugging the diskless code.Dermot McDonnell donated the Toshiba XM3401B CDROM drive
currently used in freefall.&a.chuck; contributed his floppy tape streamer for
experimental work.Larry Altneu larry@ALR.COM, and &a.wilko;,
provided Wangtek and Archive QIC-02 tape drives in order to
improve the wt driver.Ernst Winter ewinter@lobo.muc.de contributed
a 2.88 MB floppy drive to the project. This will hopefully
increase the pressure for rewriting the floppy disk driver.
;-)Tekram
Technologies sent one each of their DC-390, DC-390U
and DC-390F FAST and ULTRA SCSI host adapter cards for
regression testing of the NCR and AMD drivers with their cards.
They are also to be applauded for making driver sources for free
operating systems available from their FTP server ftp://ftp.tekram.com/scsi/FreeBSD.Larry M. Augustin contributed not only a
Symbios Sym8751S SCSI card, but also a set of data books,
including one about the forthcoming Sym53c895 chip with Ultra-2
and LVD support, and the latest programming manual with
information on how to safely use the advanced features of the
latest Symbios SCSI chips. Thanks a lot!Christoph Kukulies kuku@FreeBSD.org donated
an FX120 12 speed Mitsumi CDROM drive for IDE CDROM driver
development.Special contributors:Walnut Creek CDROM
has donated almost more than we can say (see the history document for more details).
In particular, we would like to thank them for the original
hardware used for freefall.FreeBSD.ORG, our primary
+ role="fqdn">freefall.FreeBSD.org, our primary
development machine, and for thud.FreeBSD.ORG, a testing and build
+ role="fqdn">thud.FreeBSD.org, a testing and build
box. We are also indebted to them for funding various
contributors over the years and providing us with unrestricted
use of their T1 connection to the Internet.The interface
business GmbH, Dresden has been patiently supporting
&a.joerg; who has often preferred FreeBSD work over paywork, and
used to fall back to their (quite expensive) EUnet Internet
connection whenever his private connection became too slow or
flakey to work with it...Berkeley Software Design,
Inc. has contributed their DOS emulator code to the
remaining BSD world, which is used in the
doscmd command.Core Team AlumniThe following people were members of the FreeBSD core team during
the periods indicated. We thank them for their past efforts in the
service of the FreeBSD project.In rough chronological order:&a.guido (1995 - 1999)&a.dyson (1993 - 1998)&a.nate (1992 - 1996)&a.rgrimes (1992 - 1995)Andreas Schulz (1992 - 1995)&a.csgr (1993 - 1995)&a.paul (1992 - 1995)&a.smace (1993 - 1994)Andrew Moore (1993 - 1994)Christoph Robitschko (1993 - 1994)J. T. Conklin (1992 - 1993)Derived Software ContributorsThis software was originally derived from William F. Jolitz's 386BSD
release 0.1, though almost none of the original 386BSD specific code
remains. This software has been essentially re-implemented from the
4.4BSD-Lite release provided by the Computer Science Research Group
(CSRG) at the University of California, Berkeley and associated academic
contributors.There are also portions of NetBSD and OpenBSD that have been
integrated into FreeBSD as well, and we would therefore like to thank
all the contributors to NetBSD and OpenBSD for their work.Additional FreeBSD Contributors(in alphabetical order by first name):ABURAYA Ryushirou rewsirow@ff.iij4u.or.jpAMAGAI Yoshiji amagai@nue.orgAaron Bornstein aaronb@j51.comAaron Smith aaron@mutex.orgAchim Patzner ap@noses.comAda T Lim ada@bsd.orgAdam Baran badam@mw.mil.plAdam Glass glass@postgres.berkeley.eduAdam McDougall mcdouga9@egr.msu.eduAdrian Colley aecolley@ois.ieAdrian Hall adrian@ibmpcug.co.ukAdrian Mariano adrian@cam.cornell.eduAdrian Steinmann ast@marabu.chAdam Strohl troll@digitalspark.netAdrian T. Filipi-Martin
atf3r@agate.cs.virginia.eduAjit Thyagarajan unknownAkio Morita
amorita@meadow.scphys.kyoto-u.ac.jpAkira SAWADA unknownAkira Watanabe
akira@myaw.ei.meisei-u.ac.jpAkito Fujita fujita@zoo.ncl.omron.co.jpAlain Kalker
A.C.P.M.Kalker@student.utwente.nlAlan Bawden alan@curry.epilogue.comAlec Wolman wolman@cs.washington.eduAled Morris aledm@routers.co.ukAlex garbanzo@hooked.netAlex D. Chen
dhchen@Canvas.dorm7.nccu.edu.twAlex G. Bulushev bag@demos.suAlex Le Heux alexlh@funk.orgAlex Perel veers@disturbed.netAlexander B. Povolotsky tarkhil@mgt.msk.ruAlexander Leidinger
netchild@wurzelausix.CS.Uni-SB.DEAlexander Langer alex@cichlids.comAlexandre Snarskii snar@paranoia.ruAlfred Perlstein bright@rush.netAlistair G. Crooks agc@uts.amdahl.comAllan Saddi asaddi@philosophysw.comAllen Campbell allenc@verinet.comAmakawa Shuhei amakawa@hoh.t.u-tokyo.ac.jpAmancio Hasty hasty@star-gate.comAmir Farah amir@comtrol.comAmy Baron amee@beer.orgAnatoly A. Orehovsky tolik@mpeks.tomsk.suAnatoly Vorobey mellon@pobox.comAnders Nordby nickerne@nome.noAnders Thulin Anders.X.Thulin@telia.seAndras Olah olah@cs.utwente.nlAndre Albsmeier
Andre.Albsmeier@mchp.siemens.deAndre Oppermann andre@pipeline.chAndreas Haakh ah@alman.robin.deAndreas Kohout shanee@rabbit.augusta.deAndreas Lohr andreas@marvin.RoBIN.deAndreas Schulz unknownAndreas Wetzel mickey@deadline.snafu.deAndreas Wrede andreas@planix.comAndres Vega Garcia unknownAndrew Atrens atreand@statcan.caAndrew Boothman andrew@cream.orgAndrew Gillham gillham@andrews.eduAndrew Gordon andrew.gordon@net-tel.co.ukAndrew Herbert andrew@werple.apana.org.auAndrew J. Korty ajk@purdue.eduAndrew L. Moore alm@mclink.comAndrew McRae amcrae@cisco.comAndrew Stevenson andrew@ugh.net.auAndrew Timonin tim@pool1.convey.ruAndrew V. Stesin stesin@elvisti.kiev.uaAndrew Webster awebster@dataradio.comAndrey Zakhvatov andy@icc.surw.chel.suAndy Farkas andyf@speednet.com.auAndy Valencia ajv@csd.mot.comAndy Whitcroft andy@sarc.city.ac.ukAngelo Turetta ATuretta@stylo.itAnthony C. Chavez magus@xmission.comAnthony Yee-Hang Chan yeehang@netcom.comAnton Berezin tobez@plab.ku.dkAntti Kaipila anttik@iki.fiAre Bryne are.bryne@communique.noAri Suutari ari@suutari.iki.fiArjan de Vet devet@IAEhv.nlArne Henrik Juul arnej@Lise.Unit.NOAssar Westerlund assar@sics.seAtsushi Furuta furuta@sra.co.jpAtsushi Murai amurai@spec.co.jpBakul Shah bvs@bitblocks.comBarry Bierbauch pivrnec@vszbr.czBarry Lustig barry@ictv.comBen Hutchinson benhutch@xfiles.org.ukBen Jackson unknownBen Smithurst ben@scientia.demon.co.ukBen Walter bwalter@itachi.swcp.comBenjamin Lewis bhlewis@gte.netBernd Rosauer br@schiele-ct.deBill Kish kish@osf.orgBill Trost trost@cloud.rain.comBlaz Zupan blaz@amis.netBob Van Valzah Bob@whitebarn.comBob Willcox bob@luke.pmr.comBoris Staeblow balu@dva.in-berlin.deBoyd R. Faulkner faulkner@asgard.bga.comBrad Karp karp@eecs.harvard.eduBradley Dunn bradley@dunn.orgBrandon Fosdick bfoz@glue.umd.eduBrandon Gillespie brandon@roguetrader.com&a.wlloydBob Wilcox bob@obiwan.uucpBoyd Faulkner faulkner@mpd.tandem.comBrent J. Nordquist bjn@visi.comBrett Lymn blymn@mulga.awadi.com.AUBrett Taylor
brett@peloton.physics.montana.eduBrian Campbell brianc@pobox.comBrian Clapper bmc@willscreek.comBrian Cully shmit@kublai.comBrian Handy
handy@lambic.space.lockheed.comBrian Litzinger brian@MediaCity.comBrian McGovern bmcgover@cisco.comBrian Moore ziff@houdini.eecs.umich.eduBrian R. Haug haug@conterra.comBrian Tao taob@risc.orgBrion Moss brion@queeg.comBruce A. Mah bmah@ca.sandia.govBruce Albrecht bruce@zuhause.mn.orgBruce Gingery bgingery@gtcs.comBruce J. Keeler loodvrij@gridpoint.comBruce Murphy packrat@iinet.net.auBruce Walter walter@fortean.comCarey Jones mcj@acquiesce.orgCarl Fongheiser cmf@netins.netCarl Mascott cmascott@world.std.comCasper casper@acc.amCastor Fu castor@geocast.comCejka Rudolf cejkar@dcse.fee.vutbr.czChain Lee chain@110.netCharles Hannum mycroft@ai.mit.eduCharles Henrich henrich@msu.eduCharles Mott cmott@srv.netCharles Owens owensc@enc.eduChet Ramey chet@odin.INS.CWRU.EduChia-liang Kao clkao@CirX.ORGChiharu Shibata chi@bd.mbn.or.jpChip Norkus unknownChoi Jun Ho junker@jazz.snu.ac.krChris Costello chris@calldei.comChris Csanady cc@tarsier.ca.sandia.govChris Dabrowski chris@vader.orgChris Dillon cdillon@wolves.k12.mo.usChris Shenton
cshenton@angst.it.hq.nasa.govChris Stenton jacs@gnome.co.ukChris Timmons skynyrd@opus.cts.cwu.eduChris Torek torek@ee.lbl.govChristian Gusenbauer
cg@fimp01.fim.uni-linz.ac.atChristian Haury Christian.Haury@sagem.frChristian Weisgerber
naddy@bigeye.rhein-neckar.deChristoph P. Kukulies kuku@FreeBSD.orgChristoph Robitschko
chmr@edvz.tu-graz.ac.atChristoph Weber-Fahr
wefa@callcenter.systemhaus.netChristopher G. Demetriou
cgd@postgres.berkeley.eduChristopher T. Johnson
cjohnson@neunacht.netgsi.comChrisy Luke chrisy@flix.netChuck Hein chein@cisco.comClive Lin clive@CiRX.ORGColman Reilly careilly@tcd.ieConrad Sabatier conrads@neosoft.comCoranth Gryphon gryphon@healer.comCornelis van der Laan
nils@guru.ims.uni-stuttgart.deCove Schneider cove@brazil.nbn.comCraig Leres leres@ee.lbl.govCraig Loomis unknownCraig Metz cmetz@inner.netCraig Spannring cts@internetcds.comCraig Struble cstruble@vt.eduCristian Ferretti cfs@riemann.mat.puc.clCurt Mayer curt@toad.comCy Schubert cschuber@uumail.gov.bc.caDI. Christian Gusenbauer
cg@scotty.edvz.uni-linz.ac.atDai Ishijima ishijima@tri.pref.osaka.jpDamian Hamill damian@cablenet.netDan Cross tenser@spitfire.ecsel.psu.eduDan Lukes dan@obluda.czDan Nelson dnelson@emsphone.comDan Walters hannibal@cyberstation.netDaniel M. Eischen
deischen@iworks.InterWorks.orgDaniel O'Connor doconnor@gsoft.com.auDaniel Poirot poirot@aio.jsc.nasa.govDaniel Rock rock@cs.uni-sb.deDanny Egen unknownDanny J. Zerkel dzerkel@phofarm.comDarren Reed avalon@coombs.anu.edu.auDave Adkins adkin003@tc.umn.eduDave Andersen angio@aros.netDave Blizzard dblizzar@sprynet.comDave Bodenstab imdave@synet.netDave Burgess burgess@hrd769.brooks.af.milDave Chapeskie dchapes@ddm.on.caDave Cornejo dave@dogwood.comDave Edmondson davided@sco.comDave Glowacki dglo@ssec.wisc.eduDave Marquardt marquard@austin.ibm.comDave Tweten tweten@FreeBSD.orgDavid A. Adkins adkin003@tc.umn.eduDavid A. Bader dbader@umiacs.umd.eduDavid Borman dab@bsdi.comDavid Dawes dawes@XFree86.orgDavid Filo filo@yahoo.comDavid Holland dholland@eecs.harvard.eduDavid Holloway daveh@gwythaint.tamis.comDavid Horwitt dhorwitt@ucsd.eduDavid Hovemeyer daveho@infocom.comDavid Jones dej@qpoint.torfree.netDavid Kelly dkelly@tomcat1.tbe.comDavid Kulp dkulp@neomorphic.comDavid L. Nugent davidn@blaze.net.auDavid Leonard d@scry.dstc.edu.auDavid Malone dwmalone@maths.tcd.ieDavid Muir Sharnoff muir@idiom.comDavid S. Miller davem@jenolan.rutgers.eduDavid Wolfskill dhw@whistle.comDean Gaudet dgaudet@arctic.orgDean Huxley dean@fsa.caDenis Fortin unknownDennis Glatting
dennis.glatting@software-munitions.comDenton Gentry denny1@home.comDerek Inksetter derek@saidev.comDima Sivachenko dima@Chg.RUDirk Keunecke dk@panda.rhein-main.deDirk Nehrling nerle@pdv.deDmitry Khrustalev dima@xyzzy.machaon.ruDmitry Kohmanyuk dk@farm.orgDom Mitchell dom@myrddin.demon.co.ukDominik Brettnacher domi@saargate.deDon Croyle croyle@gelemna.ft-wayne.in.us&a.whiteside;Don Morrison dmorrisn@u.washington.eduDon Yuniskis dgy@rtd.comDonald Maddox dmaddox@conterra.comDoug Barton studded@dal.netDouglas Ambrisko ambrisko@whistle.comDouglas Carmichael dcarmich@mcs.comDouglas Crosher dtc@scrooge.ee.swin.oz.auDrew Derbyshire ahd@kew.comDuncan Barclay dmlb@ragnet.demon.co.ukDustin Sallings dustin@spy.netEckart "Isegrim" Hofmann
Isegrim@Wunder-Nett.orgEd Gold
vegold01@starbase.spd.louisville.eduEd Hudson elh@p5.spnet.comEdward Wang edward@edcom.comEdwin Groothus edwin@nwm.wan.philips.comEiji-usagi-MATSUmoto usagi@clave.gr.jpELISA Font ProjectElmar Bartel
bartel@informatik.tu-muenchen.deEric A. Griff eagriff@global2000.netEric Blood eblood@cs.unr.eduEric J. Haug ejh@slustl.slu.eduEric J. Schwertfeger eric@cybernut.comEric L. Hernes erich@lodgenet.comEric P. Scott eps@sirius.comEric Sprinkle eric@ennovatenetworks.comErich Stefan Boleyn erich@uruk.orgErik E. Rantapaa rantapaa@math.umn.eduErik H. Moe ehm@cris.comErnst Winter ewinter@lobo.muc.deEspen Skoglund espensk@stud.cs.uit.no>Eugene M. Kim astralblue@usa.netEugene Radchenko genie@qsar.chem.msu.suEvan Champion evanc@synapse.netFaried Nawaz fn@Hungry.COMFlemming Jacobsen fj@tfs.comFong-Ching Liaw fong@juniper.netFrancis M J Hsieh mjshieh@life.nthu.edu.twFrank Bartels knarf@camelot.deFrank Chen Hsiung Chan
frankch@waru.life.nthu.edu.twFrank Durda IV uhclem@nemesis.lonestar.orgFrank MacLachlan fpm@n2.netFrank Nobis fn@Radio-do.deFrank Volf volf@oasis.IAEhv.nlFrank ten Wolde franky@pinewood.nlFrank van der Linden frank@fwi.uva.nlFred Cawthorne fcawth@jjarray.umn.eduFred Gilham gilham@csl.sri.comFred Templin templin@erg.sri.comFrederick Earl Gray fgray@rice.eduFUJIMOTO Kensaku
fujimoto@oscar.elec.waseda.ac.jpFUJISHIMA Satsuki k5@respo.or.jpFURUSAWA Kazuhisa
furusawa@com.cs.osakafu-u.ac.jpGabor Kincses gabor@acm.orgGabor Zahemszky zgabor@CoDe.huG. Adam Stanislavadam@whizkidtech.netGarance A Drosehn gad@eclipse.its.rpi.eduGareth McCaughan gjm11@dpmms.cam.ac.ukGary A. Browning gab10@griffcd.amdahl.comGary Howland gary@hotlava.comGary J. garyj@rks32.pcs.dec.comGary Kline kline@thought.orgGaspar Chilingarov nightmar@lemming.acc.amGea-Suan Lin gsl@tpts4.seed.net.twGeoff Rehmet csgr@alpha.ru.ac.zaGeorg Wagner georg.wagner@ubs.comGerard Roudier groudier@club-internet.frGianmarco Giovannelli
gmarco@giovannelli.itGil Kloepfer Jr. gil@limbic.ssdl.comGilad Rom rom_glsa@ein-hashofet.co.ilGinga Kawaguti
ginga@amalthea.phys.s.u-tokyo.ac.jpGiles Lean giles@nemeton.com.auGlen Foster gfoster@gfoster.comGlenn Johnson gljohns@bellsouth.netGodmar Back gback@facility.cs.utah.eduGoran Hammarback goran@astro.uu.seGord Matzigkeit gord@enci.ucalgary.caGordon Greeff gvg@uunet.co.zaGraham Wheeler gram@cdsec.comGreg A. Woods woods@zeus.leitch.comGreg Ansley gja@ansley.comGreg Troxel gdt@ir.bbn.comGreg Ungerer gerg@stallion.oz.auGregory Bond gnb@itga.com.auGregory D. Moncreaff
moncrg@bt340707.res.ray.comGuy Harris guy@netapp.comGuy Helmer ghelmer@cs.iastate.eduHAMADA Naoki hamada@astec.co.jpHONDA Yasuhiro
honda@kashio.info.mie-u.ac.jpHOSOBUCHI Noriyuki hoso@buchi.tama.or.jpHannu Savolainen hannu@voxware.pp.fiHans Huebner hans@artcom.deHans Petter Bieker zerium@webindex.noHans Zuidam hans@brandinnovators.comHarlan Stenn Harlan.Stenn@pfcs.comHarold Barker hbarker@dsms.comHavard Eidnes
Havard.Eidnes@runit.sintef.noHeikki Suonsivu hsu@cs.hut.fiHeiko W. Rupp unknownHelmut F. Wirth hfwirth@ping.atHenrik Vestergaard Draboel
hvd@terry.ping.dkHerb Peyerl hpeyerl@NetBSD.orgHideaki Ohmon ohmon@tom.sfc.keio.ac.jpHidekazu Kuroki hidekazu@cs.titech.ac.jpHideki Yamamoto hyama@acm.orgHideyuki Suzuki
hideyuki@sat.t.u-tokyo.ac.jpHirayama Issei iss@mail.wbs.ne.jpHiroaki Sakai sakai@miya.ee.kagu.sut.ac.jpHiroharu Tamaru tamaru@ap.t.u-tokyo.ac.jpHironori Ikura hikura@kaisei.orgHiroshi Nishikawa nis@pluto.dti.ne.jpHiroya Tsubakimoto unknownHolger Veit Holger.Veit@gmd.deHolm Tiffe holm@geophysik.tu-freiberg.deHorance Chou
horance@freedom.ie.cycu.edu.twHorihiro Kumagai kuma@jp.FreeBSD.orgHOTARU-YA hotaru@tail.netHr.Ladavac lada@ws2301.gud.siemens.co.atHubert Feyrer hubertf@NetBSD.ORGHugh F. Mahon hugh@nsmdserv.cnd.hp.comHugh Mahon h_mahon@fc.hp.comHung-Chi Chu hcchu@r350.ee.ntu.edu.twIMAI Takeshi take-i@ceres.dti.ne.jpIMAMURA Tomoaki
tomoak-i@is.aist-nara.ac.jpIan Dowse iedowse@maths.tcd.ieIan Holland ianh@tortuga.com.auIan Struble ian@broken.netIan Vaudrey i.vaudrey@bigfoot.comIgor Khasilev igor@jabber.paco.odessa.uaIgor Roshchin str@giganda.komkon.orgIgor Sviridov siac@ua.netIgor Vinokurov igor@zynaps.ruIkuo Nakagawa ikuo@isl.intec.co.jpIlya V. Komarov mur@lynx.ruIssei Suzuki issei@jp.FreeBSD.orgItsuro Saito saito@miv.t.u-tokyo.ac.jpJ. Bryant jbryant@argus.flash.netJ. David Lowe lowe@saturn5.comJ. Han hjh@best.comJ. Hawk jhawk@MIT.EDUJ.T. Conklin jtc@cygnus.comJ.T. Jang keith@email.gcn.net.twJack jack@zeus.xtalwind.netJacob Bohn Lorensen jacob@jblhome.ping.mkJagane D Sundar jagane@netcom.comJake Burkholder jake@checker.orgJake Hamby jehamby@lightside.comJames Clark jjc@jclark.comJames D. Stewart jds@c4systm.comJames Jegers jimj@miller.cs.uwm.eduJames Raynard
fhackers@jraynard.demon.co.ukJames T. Liu jtliu@phlebas.rockefeller.eduJames da Silva jds@cs.umd.eduJan Conard
charly@fachschaften.tu-muenchen.deJan Koum jkb@FreeBSD.orgJanick Taillandier
Janick.Taillandier@ratp.frJanusz Kokot janek@gaja.ipan.lublin.plJarle Greipsland jarle@idt.unit.noJason Garman init@risen.orgJason Thorpe thorpej@NetBSD.orgJason Wright jason@OpenBSD.orgJason Young
doogie@forbidden-donut.anet-stl.comJavier Martin Rueda jmrueda@diatel.upm.esJay Fenlason hack@datacube.comJaye Mathisen mrcpu@cdsnet.netJeff Bartig jeffb@doit.wisc.eduJeff Forys jeff@forys.cranbury.nj.usJeff Kletsky Jeff@Wagsky.comJeffrey Evans evans@scnc.k12.mi.usJeffrey Wheat jeff@cetlink.netJens Schweikhardt schweikh@noc.dfn.dJeremy Allison jallison@whistle.comJeremy Chatfield jdc@xinside.comJeremy Lea reg@shale.csir.co.zaJeremy Prior unknownJeroen Ruigrok/Asmodai asmodai@wxs.nlJesse Rosenstock jmr@ugcs.caltech.eduJian-Da Li jdli@csie.nctu.edu.twJim Babb babb@FreeBSD.orgJim Binkley jrb@cs.pdx.eduJim Carroll jim@carroll.comJim Flowers jflowers@ezo.netJim Leppek jleppek@harris.comJim Lowe james@cs.uwm.eduJim Mattson jmattson@sonic.netJim Mercer jim@komodo.reptiles.orgJim Mock jim@phrantic.phear.netJim Wilson wilson@moria.cygnus.comJimbo Bahooli
griffin@blackhole.iceworld.orgJin Guojun jin@george.lbl.govJoachim Kuebart unknownJoao Carlos Mendes Luis jonny@jonny.eng.brJochen Pohl jpo.drs@sni.deJoe "Marcus" Clarke marcus@miami.eduJoe Abley jabley@clear.co.nzJoe Jih-Shian Lu jslu@dns.ntu.edu.twJoe Orthoefer j_orthoefer@tia.netJoe Traister traister@mojozone.orgJoel Faedi Joel.Faedi@esial.u-nancy.frJoel Ray Holveck joelh@gnu.orgJoel Sutton sutton@aardvark.apana.org.auJohan Granlund johan@granlund.nuJohan Karlsson k@numeri.campus.luth.seJohan Larsson johan@moon.campus.luth.seJohann Tonsing jtonsing@mikom.csir.co.zaJohannes Helander unknownJohannes Stille unknownJohn Baldwin jobaldwi@vt.eduJohn Beckett jbeckett@southern.eduJohn Beukema jbeukema@hk.super.netJohn Brezak unknownJohn Capo jc@irbs.comJohn F. Woods jfw@jfwhome.funhouse.comJohn Goerzen
jgoerzen@alexanderwohl.complete.orgJohn Hay jhay@mikom.csir.co.zaJohn Heidemann johnh@isi.eduJohn Hood cgull@owl.orgJohn Kohl unknownJohn Lind john@starfire.mn.orgJohn Mackin john@physiol.su.oz.auJohn P johnp@lodgenet.comJohn Perry perry@vishnu.alias.netJohn Preisler john@vapornet.comJohn Rochester jr@cs.mun.caJohn Sadler john_sadler@alum.mit.eduJohn Saunders john@pacer.nlc.net.auJohn W. DeBoskey jwd@unx.sas.comJohn Wehle john@feith.comJohn Woods jfw@eddie.mit.eduJon Morgan morgan@terminus.trailblazer.comJonathan H N Chin jc254@newton.cam.ac.ukJonathan Hanna
jh@pc-21490.bc.rogers.wave.caJorge Goncalves j@bug.fe.up.ptJorge M. Goncalves ee96199@tom.fe.up.ptJos Backus jbackus@plex.nlJose M. Alcaide jose@we.lc.ehu.esJose Marques jose@nobody.orgJosef Grosch
jgrosch@superior.mooseriver.comJosef Karthauser joe@uk.FreeBSD.orgJoseph Stein joes@wstein.comJosh Gilliam josh@quick.netJosh Tiefenbach josh@ican.netJuergen Lock nox@jelal.hb.north.deJuha Inkari inkari@cc.hut.fiJukka A. Ukkonen jua@iki.fiJulian Assange proff@suburbia.netJulian Coleman j.d.coleman@ncl.ac.uk&a.jhsJulian Jenkins kaveman@magna.com.auJunichi Satoh junichi@jp.FreeBSD.orgJunji SAKAI sakai@jp.FreeBSD.orgJunya WATANABE junya-w@remus.dti.ne.jpK.Higashino a00303@cc.hc.keio.ac.jpKUNISHIMA Takeo kunishi@c.oka-pu.ac.jpKai Vorma vode@snakemail.hut.fiKaleb S. Keithley kaleb@ics.comKaneda Hiloshi vanitas@ma3.seikyou.ne.jpKapil Chowksey kchowksey@hss.hns.comKarl Denninger karl@mcs.comKarl Dietz Karl.Dietz@triplan.comKarl Lehenbauer karl@NeoSoft.comKato Takenori
kato@eclogite.eps.nagoya-u.ac.jpKawanobe Koh kawanobe@st.rim.or.jpKazuhiko Kiriyama kiri@kiri.toba-cmt.ac.jpKazuo Horikawa horikawa@jp.FreeBSD.orgKees Jan Koster kjk1@ukc.ac.ukKeith Bostic bostic@bostic.comKeith E. Walker unknownKeith Moore unknownKeith Sklower unknownKen Hornstein unknownKen Key key@cs.utk.eduKen Mayer kmayer@freegate.comKenji Saito marukun@mx2.nisiq.netKenji Tomita tommyk@da2.so-net.or.jpKenneth Furge kenneth.furge@us.endress.comKenneth Monville desmo@bandwidth.orgKenneth R. Westerback krw@tcn.netKenneth Stailey kstailey@gnu.ai.mit.eduKent Talarico kent@shipwreck.tsoft.netKent Vander Velden graphix@iastate.eduKentaro Inagaki JBD01226@niftyserve.ne.jpKevin Bracey kbracey@art.acorn.co.ukKevin Day toasty@dragondata.comKevin Lahey kml@nas.nasa.govKevin Lokevlo@hello.com.twKevin Street street@iname.comKevin Van Maren vanmaren@fast.cs.utah.eduKiroh HARADA kiroh@kh.rim.or.jpKlaus Klein kleink@layla.inka.deKlaus-J. Wolf Yanestra@t-online.deKoichi Sato copan@ppp.fastnet.or.jpKostya Lukin lukin@okbmei.msk.suKouichi Hirabayashi kh@mogami-wire.co.jpKurt D. Zeilenga Kurt@Boolean.NETKurt Olsen kurto@tiny.mcs.usu.eduL. Jonas Olsson
ljo@ljo-slip.DIALIN.CWRU.EduLars Köller
Lars.Koeller@Uni-Bielefeld.DELarry Altneu larry@ALR.COMLaurence Lopez lopez@mv.mv.comLee Cremeans lcremean@tidalwave.netLiang Tai-hwa
avatar@www.mmlab.cse.yzu.edu.twLon Willett lon%softt.uucp@math.utah.eduLouis A. Mamakos louie@TransSys.COMLouis Mamakos loiue@TransSys.comLucas James Lucas.James@ldjpc.apana.org.auLyndon Nerenberg lyndon@orthanc.comM.C. Wong unknownMANTANI Nobutaka nobutaka@nobutaka.comMIHIRA Sanpei Yoshiro sanpei@sanpei.org
- MITA Yoshio mita@jp.FreeBSD.ORG
+ MITA Yoshio mita@jp.FreeBSD.orgMITSUNAGA Noriaki
mitchy@er.ams.eng.osaka-u.ac.jpMOROHOSHI Akihiko moro@race.u-tokyo.ac.jpMagnus Enbom dot@tinto.campus.luth.seMahesh Neelakanta mahesh@gcomm.comMakoto MATSUSHITA matusita@jp.FreeBSD.orgMakoto WATANABE
watanabe@zlab.phys.nagoya-u.ac.jpMalte Lance malte.lance@gmx.netManu Iyengar
iyengar@grunthos.pscwa.psca.comMarc Frajola marc@dev.comMarc Ramirez mrami@mramirez.sy.yale.eduMarc Slemko marcs@znep.comMarc van Kempen wmbfmk@urc.tue.nlMarc van Woerkom van.woerkom@netcologne.deMarcel Moolenaar marcel@scc.nlMario Sergio Fujikawa Ferreira
lioux@gns.com.brMark Andrews unknownMark Cammidge mark@gmtunx.ee.uct.ac.zaMark Diekhans markd@grizzly.comMark Huizer xaa@stack.nlMark J. Taylor mtaylor@cybernet.comMark Krentel krentel@rice.eduMark Mayo markm@vmunix.comMark Thompson thompson@tgsoft.comMark Tinguely tinguely@plains.nodak.eduMark Treacy unknownMark Valentine mark@linus.demon.co.ukMartin BirgmeierMartin Ibert mib@ppe.bb-data.deMartin Kammerhofer dada@sbox.tu-graz.ac.atMartin Renters martin@tdc.on.caMartti Kuparinen
martti.kuparinen@ericsson.comMasachika ISHIZUKA
ishizuka@isis.min.ntt.jpMas.TAKEMURA unknownMasafumi NAKANE max@wide.ad.jpMasahiro Sekiguchi
seki@sysrap.cs.fujitsu.co.jpMasanobu Saitoh msaitoh@spa.is.uec.ac.jpMasanori Kanaoka kana@saijo.mke.mei.co.jpMasanori Kiriake seiken@ARGV.ACMasatoshi TAMURA
tamrin@shinzan.kuee.kyoto-u.ac.jpMats Lofkvist mal@algonet.seMatt Bartley mbartley@lear35.cytex.comMatt Thomas matt@3am-software.comMatt White mwhite+@CMU.EDUMatthew C. Mead mmead@Glock.COMMatthew Cashdollar mattc@rfcnet.comMatthew Flatt mflatt@cs.rice.eduMatthew Fuller fullermd@futuresouth.comMatthew Stein matt@bdd.netMatthias Pfaller leo@dachau.marco.deMatthias Scheler tron@netbsd.orgMattias Gronlund
Mattias.Gronlund@sa.erisoft.seMattias Pantzare pantzer@ludd.luth.seMaurice Castro
maurice@planet.serc.rmit.edu.auMax Euston meuston@jmrodgers.comMax Khon fjoe@husky.iclub.nsu.ruMaxim Bolotin max@rsu.ruMicha Class
michael_class@hpbbse.bbn.hp.comMichael Butler imb@scgt.oz.auMichael Butschky butsch@computi.erols.comMichael Clay mclay@weareb.org
- Michael Elbel me@FreeBSD.ORG
+ Michael Elbel me@FreeBSD.orgMichael Galassi nerd@percival.rain.comMichael Hancock michaelh@cet.co.jpMichael Hohmuth hohmuth@inf.tu-dresden.deMichael Perlman canuck@caam.rice.eduMichael Petry petry@netwolf.NetMasters.comMichael Reifenberger root@totum.plaut.deMichael Searle searle@longacre.demon.co.ukMichal Listos mcl@Amnesiac.123.orgMichio Karl Jinbo
karl@marcer.nagaokaut.ac.jpMiguel Angel Sagreras
msagre@cactus.fi.uba.arMihoko Tanaka m_tonaka@pa.yokogawa.co.jpMika Nystrom mika@cs.caltech.eduMikael Hybsch micke@dynas.seMikael Karpberg
karpen@ocean.campus.luth.seMike Del repenting@hotmail.comMike Durian durian@plutotech.comMike Durkin mdurkin@tsoft.sf-bay.orgMike E. Matsnev mike@azog.cs.msu.suMike Evans mevans@candle.comMike Grupenhoff kashmir@umiacs.umd.eduMike Hibler mike@marker.cs.utah.eduMike Karels unknownMike McGaughey mmcg@cs.monash.edu.auMike Meyer mwm@shiva.the-park.comMike Mitchell mitchell@ref.tfs.comMike Murphy mrm@alpharel.comMike Peck mike@binghamton.eduMike Spengler mks@msc.eduMikhail A. Sokolov mishania@demos.suMikhail Teterin mi@aldan.ziplink.netMing-I Hseh PA@FreeBSD.ee.Ntu.edu.TWMitsuru IWASAKI iwasaki@pc.jaring.myMitsuru Yoshida mitsuru@riken.go.jpMonte Mitzelfelt monte@gonefishing.orgMorgan Davis root@io.cts.comMostyn Lewis mostyn@mrl.comMotomichi Matsuzaki mzaki@e-mail.ne.jpMotoyuki Kasahara m-kasahr@sra.co.jpMotoyuki Konno motoyuki@snipe.rim.or.jpMunechika Sumikawa sumikawa@kame.netMurray Stokely murray@cdrom.comN.G.Smith ngs@sesame.hensa.ac.ukNAGAO Tadaaki nagao@cs.titech.ac.jpNAKAJI Hiroyuki
nakaji@tutrp.tut.ac.jpNAKAMURA Kazushi nkazushi@highway.or.jpNAKAMURA Motonori
motonori@econ.kyoto-u.ac.jpNIIMI Satoshi sa2c@and.or.jpNOKUBI Hirotaka h-nokubi@yyy.or.jpNadav Eiron nadav@barcode.co.ilNanbor Wang nw1@cs.wustl.eduNaofumi Honda
honda@Kururu.math.sci.hokudai.ac.jpNaoki Hamada nao@tom-yam.or.jpNarvi narvi@haldjas.folklore.eeNathan Ahlstrom nrahlstr@winternet.comNathan Dorfman nathan@rtfm.netNeal Fachan kneel@ishiboo.comNeil Blakey-Milner nbm@rucus.ru.ac.zaNiall Smart rotel@indigo.ieNick Barnes Nick.Barnes@pobox.comNick Handel nhandel@NeoSoft.comNick Hilliard nick@foobar.org&a.nsayer;Nick Williams njw@cs.city.ac.ukNickolay N. Dudorov nnd@itfs.nsk.suNiklas Hallqvist niklas@filippa.appli.seNisha Talagala nisha@cs.berkeley.eduNo Name ZW6T-KND@j.asahi-net.or.jpNo Name adrian@virginia.eduNo Name alex@elvisti.kiev.uaNo Name anto@netscape.netNo Name bobson@egg.ics.nitch.ac.jpNo Name bovynf@awe.beNo Name burg@is.ge.comNo Name chris@gnome.co.ukNo Name colsen@usa.netNo Name coredump@nervosa.comNo Name dannyman@arh0300.urh.uiuc.eduNo Name davids@SECNET.COMNo Name derek@free.orgNo Name devet@adv.IAEhv.nlNo Name djv@bedford.netNo Name dvv@sprint.netNo Name enami@ba2.so-net.or.jpNo Name flash@eru.tubank.msk.suNo Name flash@hway.ruNo Name fn@pain.csrv.uidaho.eduNo Name gclarkii@netport.neosoft.comNo Name gordon@sheaky.lonestar.orgNo Name graaf@iae.nlNo Name greg@greg.rim.or.jpNo Name grossman@cygnus.comNo Name gusw@fub46.zedat.fu-berlin.deNo Name hfir@math.rochester.eduNo Name hnokubi@yyy.or.jpNo Name iaint@css.tuu.utas.edu.auNo Name invis@visi.comNo Name ishisone@sra.co.jpNo Name iverson@lionheart.comNo Name jpt@magic.netNo Name junker@jazz.snu.ac.krNo Name k-sugyou@ccs.mt.nec.co.jpNo Name kenji@reseau.toyonaka.osaka.jpNo Name kfurge@worldnet.att.netNo Name lh@aus.orgNo Name lhecking@nmrc.ucc.ieNo Name mrgreen@mame.mu.oz.auNo Name nakagawa@jp.FreeBSD.orgNo Name ohki@gssm.otsuka.tsukuba.ac.jpNo Name owaki@st.rim.or.jpNo Name pechter@shell.monmouth.comNo Name pete@pelican.pelican.comNo Name pritc003@maroon.tc.umn.eduNo Name risner@stdio.comNo Name roman@rpd.univ.kiev.uaNo Name root@ns2.redline.ruNo Name root@uglabgw.ug.cs.sunysb.eduNo Name stephen.ma@jtec.com.auNo Name sumii@is.s.u-tokyo.ac.jpNo Name takas-su@is.aist-nara.ac.jpNo Name tamone@eig.unige.chNo Name tjevans@raleigh.ibm.comNo Name tony-o@iij.ad.jp amurai@spec.co.jpNo Name torii@tcd.hitachi.co.jpNo Name uenami@imasy.or.jpNo Name uhlar@netlab.skNo Name vode@hut.fiNo Name wlloyd@mpd.caNo Name wlr@furball.wellsfargo.comNo Name wmbfmk@urc.tue.nlNo Name yamagata@nwgpc.kek.jpNo Name ziggy@ryan.orgNobuhiro Yasutomi nobu@psrc.isac.co.jpNobuyuki Koganemaru
kogane@koganemaru.co.jpNorio Suzuki nosuzuki@e-mail.ne.jp
- Noritaka Ishizumi graphite@jp.FreeBSD.ORG
+ Noritaka Ishizumi graphite@jp.FreeBSD.orgNoriyuki Soda soda@sra.co.jpOh Junseon hollywar@mail.holywar.netOlaf Wagner wagner@luthien.in-berlin.deOleg Sharoiko os@rsu.ruOliver Breuninger ob@seicom.NETOliver Friedrichs oliver@secnet.comOliver Fromme
oliver.fromme@heim3.tu-clausthal.deOliver Laumann
net@informatik.uni-bremen.deOliver Oberdorf oly@world.std.comOlof Johansson offe@ludd.luth.se
- Osokin Sergey aka oZZ ozz@freebsd.org.ru
+ Osokin Sergey aka oZZ ozz@FreeBSD.org.ruPace Willisson pace@blitz.comPaco Rosich rosich@modico.eleinf.uv.esPalle Girgensohn girgen@partitur.seParag Patel parag@cgt.comPascal Pederiva pascal@zuo.dec.comPasvorn Boonmark boonmark@juniper.netPatrick Gardella patrick@cre8tivegroup.comPatrick Hausen unknownPaul Antonov apg@demos.suPaul F. Werkowski unknownPaul Fox pgf@foxharp.boston.ma.usPaul Koch koch@thehub.com.auPaul Kranenburg pk@NetBSD.orgPaul Mackerras paulus@cs.anu.edu.auPaul Popelka paulp@uts.amdahl.comPaul S. LaFollette, Jr. unknownPaul Saab paul@mu.orgPaul Sandys myj@nyct.netPaul T. Root proot@horton.iaces.comPaul Vixie paul@vix.comPaulo Menezes paulo@isr.uc.ptPaulo Menezes pm@dee.uc.ptPedro A M Vazquez vazquez@IQM.Unicamp.BRPedro Giffuni giffunip@asme.orgPete Bentley pete@demon.netPeter Childs pjchilds@imforei.apana.org.auPeter Cornelius pc@inr.fzk.dePeter Haight peterh@prognet.comPeter Jeremy perer.jeremy@alcatel.com.auPeter M. Chen pmchen@eecs.umich.eduPeter Much peter@citylink.dinoex.sub.orgPeter Olsson unknownPeter Philipp pjp@bsd-daemon.netPeter Stubbs PETERS@staidan.qld.edu.auPhil Maker pjm@cs.ntu.edu.auPhil Sutherland
philsuth@mycroft.dialix.oz.auPhil Taylor phil@zipmail.co.ukPhilip Musumeci philip@rmit.edu.auPierre Y. Dampure pierre.dampure@k2c.co.ukPius Fischer pius@ienet.comPomegranate daver@flag.blackened.netPowerdog Industries
kevin.ruddy@powerdog.comR. Kym HorsellRajesh Vaidheeswarran rv@fore.comRalf Friedl friedl@informatik.uni-kl.deRandal S. Masutani randal@comtest.comRandall Hopper rhh@ct.picker.comRandall W. Dean rwd@osf.orgRandy Bush rbush@bainbridge.verio.netReinier Bezuidenhout
rbezuide@mikom.csir.co.zaRemy Card Remy.Card@masi.ibp.frRicardas Cepas rch@richard.eu.orgRiccardo Veraldi veraldi@cs.unibo.itRichard Henderson richard@atheist.tamu.eduRichard Hwang rhwang@bigpanda.comRichard Kiss richard@homemail.comRichard J Kuhns rjk@watson.grauel.comRichard M. Neswold
rneswold@drmemory.fnal.govRichard Seaman, Jr. dick@tar.comRichard Stallman rms@gnu.ai.mit.eduRichard Straka straka@user1.inficad.comRichard Tobin richard@cogsci.ed.ac.ukRichard Wackerbarth rkw@Dataplex.NETRichard Winkel rich@math.missouri.eduRichard Wiwatowski rjwiwat@adelaide.on.netRick Macklem rick@snowhite.cis.uoguelph.caRick Macklin unknownRob Austein sra@epilogue.comRob Mallory rmallory@qualcomm.comRob Snow rsnow@txdirect.netRobert Crowe bob@speakez.comRobert D. Thrush rd@phoenix.aii.comRobert Eckardt
roberte@MEP.Ruhr-Uni-Bochum.deRobert Sanders rsanders@mindspring.comRobert Sexton robert@kudra.comRobert Shady rls@id.netRobert Swindells swindellsr@genrad.co.ukRobert Watson robert@cyrus.watson.orgRobert Withrow witr@rwwa.comRobert Yoder unknownRobin Carey
robin@mailgate.dtc.rankxerox.co.ukRoger Hardiman roger@cs.strath.ac.ukRoland Jesse jesse@cs.uni-magdeburg.deRon Bickers rbickers@intercenter.netRon Lenk rlenk@widget.xmission.comRonald Kuehn kuehn@rz.tu-clausthal.deRudolf Cejka unknownRuslan Belkin rus@home2.UA.netRuslan Ermilov ru@ucb.crimea.uaRuslan Shevchenko rssh@cam.grad.kiev.uaRussell L. Carter rcarter@pinyon.orgRussell Vincent rv@groa.uct.ac.zaRyan Younce ryany@pobox.comRyuichiro IMURA imura@cs.titech.ac.jpSANETO Takanori sanewo@strg.sony.co.jpSAWADA Mizuki miz@qb3.so-net.ne.jp
- SUGIMURA Takashi sugimura@jp.FreeBSD.ORG
+ SUGIMURA Takashi sugimura@jp.FreeBSD.orgSURANYI Peter
suranyip@jks.is.tsukuba.ac.jpSakai Hiroaki sakai@miya.ee.kagu.sut.ac.jpSakari Jalovaara sja@tekla.fiSam Hartman hartmans@mit.eduSamuel Lam skl@ScalableNetwork.comSamuele Zannoli zannoli@cs.unibo.itSander Vesik sander@haldjas.folklore.eeSandro Sigala ssigala@globalnet.itSascha Blank blank@fox.uni-trier.deSascha Wildner swildner@channelz.GUN.deSatoh Junichi junichi@astec.co.jpScot Elliott scot@poptart.orgScot W. Hetzel hetzels@westbend.netScott A. Kenney saken@rmta.ml.orgScott Blachowicz
scott.blachowicz@seaslug.orgScott Burris scott@pita.cns.ucla.eduScott Hazen Mueller scott@zorch.sf-bay.orgScott Michel scottm@cs.ucla.eduScott Reynolds scott@clmqt.marquette.mi.usSebastian Strollo seb@erix.ericsson.seSerge A. Babkin babkin@hq.icb.chel.suSerge V. Vakulenko vak@zebub.msk.suSergei Chechetkin
csl@whale.sunbay.crimea.uaSergei S. Laskavy laskavy@pc759.cs.msu.suSergey Gershtein sg@mplik.ruSergey Potapov sp@alkor.ruSergey Shkonda serg@bcs.zp.uaSergey V.Dorokhov svd@kbtelecom.nalnet.ruSergio Lenzi lenzi@bsi.com.brShaun Courtney shaun@emma.eng.uct.ac.zaShawn M. Carey smcarey@mailbox.syr.eduShigio Yamaguchi shigio@wafu.netgate.netShinya Esu esu@yk.rim.or.jpShuichi Tanaka stanaka@bb.mbn.or.jpShunsuke Akiyama akiyama@jp.FreeBSD.orgSimon simon@masi.ibp.frSimon Burge simonb@telstra.com.auSimon J Gerraty sjg@melb.bull.oz.auSimon Marlow simonm@dcs.gla.ac.ukSimon Shapiro shimon@simon-shapiro.orgSin'ichiro MIYATANI siu@phaseone.co.jpSlaven Rezic eserte@cs.tu-berlin.deSoochon Radee slr@mitre.orgSoren Dayton csdayton@midway.uchicago.eduSoren Dossing sauber@netcom.comSoren S. Jorvang soren@dt.dkStefan Bethke stb@hanse.deStefan Eggers seggers@semyam.dinoco.deStefan Moeding s.moeding@ndh.netStefan Petri unknownStefan `Sec` Zehl sec@42.orgSteinar Haug sthaug@nethelp.noStephane E. Potvin sepotvin@videotron.caStephane Legrand stephane@lituus.frStephen Clawson
sclawson@marker.cs.utah.eduStephen F. Combs combssf@salem.ge.comStephen Farrell stephen@farrell.orgStephen Hocking sysseh@devetir.qld.gov.auStephen J. Roznowski sjr@home.netStephen McKay syssgm@devetir.qld.gov.auStephen Melvin melvin@zytek.comSteve Bauer sbauer@rock.sdsmt.eduSteve Coltrin spcoltri@io.comSteve Deering unknownSteve Gerakines steve2@genesis.tiac.netSteve Gericke steveg@comtrol.comSteve Piette steve@simon.chi.il.USSteve Schwarz schwarz@alpharel.comSteven G. Kargl
kargl@troutmask.apl.washington.eduSteven H. Samorodin samorodi@NUXI.comSteven McCanne mccanne@cs.berkeley.eduSteven Plite splite@purdue.eduSteven Wallace unknownStuart Henderson
stuart@internationalschool.co.ukSue Blake sue@welearn.com.auSugimoto Sadahiro ixtl@komaba.utmc.or.jpSugiura Shiro ssugiura@duo.co.jpSujal Patel smpatel@wam.umd.eduSune Stjerneby stjerneby@usa.netSuzuki Yoshiaki
zensyo@ann.tama.kawasaki.jpTadashi Kumano kumano@strl.nhk.or.jpTaguchi Takeshi taguchi@tohoku.iij.ad.jpTakahiro Yugawa yugawa@orleans.rim.or.jpTakanori Watanabe
takawata@shidahara1.planet.sci.kobe-u.ac.jpTakashi Mega mega@minz.orgTakashi Uozu j1594016@ed.kagu.sut.ac.jpTakayuki Ariga a00821@cc.hc.keio.ac.jpTakeru NAIKI naiki@bfd.es.hokudai.ac.jpTakeshi Amaike amaike@iri.co.jpTakeshi MUTOH mutoh@info.nara-k.ac.jpTakeshi Ohashi
ohashi@mickey.ai.kyutech.ac.jpTakeshi WATANABE
watanabe@crayon.earth.s.kobe-u.ac.jpTakuya SHIOZAKI
tshiozak@makino.ise.chuo-u.ac.jpTatoku Ogaito tacha@tera.fukui-med.ac.jpTatsumi HOSOKAWA hosokawa@jp.FreeBSD.orgTed Buswell tbuswell@mediaone.netTed Faber faber@isi.eduTed Lemon mellon@isc.orgTerry Lambert terry@lambert.orgTerry Lee terry@uivlsi.csl.uiuc.eduTetsuya Furukawa tetsuya@secom-sis.co.jpTheo de Raadt deraadt@OpenBSD.orgThomas thomas@mathematik.uni-Bremen.deThomas D. Dean tomdean@ix.netcom.comThomas David Rivers rivers@dignus.comThomas G. McWilliams tgm@netcom.comThomas Gellekum
thomas@ghpc8.ihf.rwth-aachen.deThomas Graichen
graichen@omega.physik.fu-berlin.deThomas König
Thomas.Koenig@ciw.uni-karlsruhe.deThomas Ptacek unknownThomas Stevens tas@stevens.orgThomas Stromberg tstrombe@rtci.comThomas Valentino Crimi
tcrimi+@andrew.cmu.eduThomas Wintergerst thomas@lemur.nord.deÞórður Ívarsson
totii@est.isTim Kientzle kientzle@netcom.comTim Singletary
tsingle@sunland.gsfc.nasa.govTim Wilkinson tim@sarc.city.ac.ukTimo J. Rinne tri@iki.fiTodd Miller millert@openbsd.orgTom root@majestix.cmr.noTom tom@sdf.comTom Gray - DCA dcasba@rain.orgTom Jobbins tom@tom.tjTom Pusateri pusateri@juniper.netTom Rush tarush@mindspring.comTom Samplonius tom@misery.sdf.comTomohiko Kurahashi
kura@melchior.q.t.u-tokyo.ac.jpTony Kimball alk@Think.COMTony Li tli@jnx.comTony Lynn wing@cc.nsysu.edu.twTony Maher tonym@angis.org.auTorbjorn Granlund tege@matematik.su.seToshihiko ARAI toshi@tenchi.ne.jpToshihiko SHIMOKAWA toshi@tea.forus.or.jpToshihiro Kanda candy@kgc.co.jpToshiomi Moriki
Toshiomi.Moriki@ma1.seikyou.ne.jpTrefor S. trefor@flevel.co.ukTrevor Blackwell tlb@viaweb.comURATA Shuichiro s-urata@nmit.tmg.nec.co.jpUdo Schweigert ust@cert.siemens.deUgo Paternostro paterno@dsi.unifi.itUlf Kieber kieber@sax.deUlli Linzen ulli@perceval.camelot.deUstimenko Semen semen@iclub.nsu.ruUwe Arndt arndt@mailhost.uni-koblenz.deVadim Chekan vadim@gc.lviv.uaVadim Kolontsov vadim@tversu.ac.ruVadim Mikhailov mvp@braz.ruVan Jacobson van@ee.lbl.govVasily V. Grechishnikov
bazilio@ns1.ied-vorstu.ac.ruVasim Valejev vasim@uddias.diaspro.comVernon J. Schryver vjs@mica.denver.sgi.comVic Abell abe@cc.purdue.eduVille Eerola ve@sci.fiVincent Poy vince@venus.gaianet.netVincenzo Capuano
VCAPUANO@vmprofs.esoc.esa.deVirgil Champlin champlin@pa.dec.comVladimir A. Jakovenko
vovik@ntu-kpi.kiev.uaVladimir Kushnir kushn@mail.kar.netVsevolod Lobko seva@alex-ua.comW. Gerald Hicks wghicks@bellsouth.netW. Richard Stevens rstevens@noao.eduWalt Howard howard@ee.utah.eduWarren Toomey wkt@csadfa.cs.adfa.oz.auWayne Scott wscott@ichips.intel.comWerner Griessl
werner@btp1da.phy.uni-bayreuth.deWes Santee wsantee@wsantee.oz.netWietse Venema wietse@wzv.win.tue.nlWilfredo Sanchez wsanchez@apple.comWiljo Heinen wiljo@freeside.ki.open.deWilko Bulte wilko@yedi.iaf.nlWill Andrews andrews@technologist.comWillem Jan Withagen wjw@surf.IAE.nlWilliam Jolitz withheldWilliam Liao william@tale.netWojtek Pilorz
wpilorz@celebris.bdk.lublin.plWolfgang Helbig helbig@ba-stuttgart.deWolfgang Solfrank ws@tools.deWolfgang Stanglmeier wolf@FreeBSD.orgWu Ching-hong woju@FreeBSD.ee.Ntu.edu.TWYarema yds@ingress.comYaroslav Terletsky ts@polynet.lviv.uaYasuhito FUTATSUKI futatuki@fureai.or.jpYasuhiro Fukama yasuf@big.or.jpYen-Shuo Su yssu@CCCA.NCTU.edu.twYing-Chieh Liao ijliao@csie.NCTU.edu.twYixin Jin yjin@rain.cs.ucla.eduYoshiaki Uchikawa yoshiaki@kt.rim.or.jpYoshihiko OHTA yohta@bres.tsukuba.ac.jpYoshihisa NAKAGAWA
y-nakaga@ccs.mt.nec.co.jpYoshikazu Goto gotoh@ae.anritsu.co.jpYoshimasa Ohnishi
ohnishi@isc.kyutech.ac.jpYoshishige Arai ryo2@on.rim.or.jpYuichi MATSUTAKA matutaka@osa.att.ne.jpYujiro MIYATA
miyata@bioele.nuee.nagoya-u.ac.jpYukihiro Nakai nacai@iname.comYusuke Nawano azuki@azkey.orgYuu Yashiki s974123@cc.matsuyama-u.ac.jpYuval Yarom yval@cs.huji.ac.ilYves Fonk yves@cpcoup5.tn.tudelft.nlYves Fonk yves@dutncp8.tn.tudelft.nlZach Heilig zach@gaffaneys.comZahemszhky Gabor zgabor@code.huZhong Ming-Xun zmx@mail.CDPA.nsysu.edu.twarci vega@sophia.inria.frder Mouse mouse@Collatz.McRCIM.McGill.EDUfrf frf@xocolatl.comEge Rekk aagero@aage.priv.no386BSD Patch Kit Patch Contributors(in alphabetical order by first name):Adam Glass glass@postgres.berkeley.eduAdrian Hall adrian@ibmpcug.co.ukAndrey A. Chernov ache@astral.msk.suAndrew Herbert andrew@werple.apana.org.auAndrew Moore alm@netcom.comAndy Valencia ajv@csd.mot.comjtk@netcom.comArne Henrik Juul arnej@Lise.Unit.NOBakul Shah bvs@bitblocks.comBarry Lustig barry@ictv.comBob Wilcox bob@obiwan.uucpBranko LankesterBrett Lymn blymn@mulga.awadi.com.AUCharles Hannum mycroft@ai.mit.eduChris G. Demetriou
cgd@postgres.berkeley.eduChris Torek torek@ee.lbl.govChristoph Robitschko
chmr@edvz.tu-graz.ac.atDaniel Poirot poirot@aio.jsc.nasa.govDave Burgess burgess@hrd769.brooks.af.milDave Rivers rivers@ponds.uucpDavid Dawes dawes@physics.su.OZ.AUDavid Greenman dg@Root.COMEric J. Haug ejh@slustl.slu.eduFelix Gaehtgens
felix@escape.vsse.in-berlin.deFrank Maclachlan fpm@crash.cts.comGary A. Browning gab10@griffcd.amdahl.comGary Howland gary@hotlava.comGeoff Rehmet csgr@alpha.ru.ac.zaGoran Hammarback goran@astro.uu.seGuido van Rooij guido@gvr.orgGuy Harris guy@auspex.comHavard Eidnes
Havard.Eidnes@runit.sintef.noHerb Peyerl hpeyerl@novatel.cuc.ab.caHolger Veit Holger.Veit@gmd.deIshii Masahiro, R. Kym HorsellJ.T. Conklin jtc@cygnus.comJagane D Sundar jagane@netcom.comJames Clark jjc@jclark.comJames Jegers jimj@miller.cs.uwm.eduJames W. DolterJames da Silva jds@cs.umd.edu et alJay Fenlason hack@datacube.comJim Wilson wilson@moria.cygnus.comJörg Lohse
lohse@tech7.informatik.uni-hamburg.deJörg Wunsch
joerg_wunsch@uriah.heep.sax.deJohn DysonJohn Woods jfw@eddie.mit.eduJordan K. Hubbard jkh@whisker.hubbard.ieJulian Elischer julian@dialix.oz.au
- Julian Stacey jhs@freebsd.org
+ Julian Stacey jhs@FreeBSD.orgKarl Dietz Karl.Dietz@triplan.comKarl Lehenbauer karl@NeoSoft.comkarl@one.neosoft.comKeith Bostic bostic@toe.CS.Berkeley.EDUKen HughesKent Talarico kent@shipwreck.tsoft.netKevin Lahey kml%rokkaku.UUCP@mathcs.emory.edukml@mosquito.cis.ufl.eduMarc Frajola marc@dev.comMark Tinguely tinguely@plains.nodak.edutinguely@hookie.cs.ndsu.NoDak.eduMartin Renters martin@tdc.on.caMichael Clay mclay@weareb.orgMichael Galassi nerd@percival.rain.comMike Durkin mdurkin@tsoft.sf-bay.orgNaoki Hamada nao@tom-yam.or.jpNate Williams nate@bsd.coe.montana.eduNick Handel nhandel@NeoSoft.comnick@madhouse.neosoft.comPace Willisson pace@blitz.comPaul Kranenburg pk@cs.few.eur.nlPaul Mackerras paulus@cs.anu.edu.auPaul Popelka paulp@uts.amdahl.comPeter da Silva peter@NeoSoft.comPhil Sutherland
philsuth@mycroft.dialix.oz.au
- Poul-Henning Kampphk@FreeBSD.ORG
+ Poul-Henning Kampphk@FreeBSD.orgRalf Friedl friedl@informatik.uni-kl.deRick Macklem root@snowhite.cis.uoguelph.caRobert D. Thrush rd@phoenix.aii.comRodney W. Grimes rgrimes@cdrom.comSascha Wildner swildner@channelz.GUN.deScott Burris scott@pita.cns.ucla.eduScott Reynolds scott@clmqt.marquette.mi.usSean Eric Fagan sef@kithrup.comSimon J Gerraty sjg@melb.bull.oz.ausjg@zen.void.oz.auStephen McKay syssgm@devetir.qld.gov.auTerry Lambert terry@icarus.weber.eduTerry Lee terry@uivlsi.csl.uiuc.eduTor Egge Tor.Egge@idi.ntnu.noWarren Toomey wkt@csadfa.cs.adfa.oz.auWiljo Heinen wiljo@freeside.ki.open.deWilliam Jolitz withheldWolfgang Solfrank ws@tools.deWolfgang Stanglmeier wolf@dentaro.GUN.deYuval Yarom yval@cs.huji.ac.il
diff --git a/en/handbook/cutting-edge/chapter.sgml b/en/handbook/cutting-edge/chapter.sgml
index 484daea3c9..a79fc015cf 100644
--- a/en/handbook/cutting-edge/chapter.sgml
+++ b/en/handbook/cutting-edge/chapter.sgml
@@ -1,2473 +1,2473 @@
The Cutting Edge: FreeBSD-current and FreeBSD-stableFreeBSD is under constant development between releases. For people
who want to be on the cutting edge, there are several easy mechanisms for
keeping your system in sync with the latest developments. Be warned: the
cutting edge is not for everyone! This chapter will help you decide if you
want to track the development system, or stick with one of the released
versions.Staying Current with FreeBSDContributed by &a.jkh;.What is FreeBSD-current?FreeBSD-current is, quite literally, nothing more than a daily
snapshot of the working sources for FreeBSD. These include work in
progress, experimental changes and transitional mechanisms that may or
may not be present in the next official release of the software.
While many of us compile almost daily from FreeBSD-current sources,
there are periods of time when the sources are literally
un-compilable. These problems are generally resolved as expeditiously
as possible, but whether or not FreeBSD-current sources bring disaster
or greatly desired functionality can literally be a matter of which
part of any given 24 hour period you grabbed them in!Who needs FreeBSD-current?FreeBSD-current is made generally available for 3 primary interest
groups:Members of the FreeBSD group who are actively working on some
part of the source tree and for whom keeping “current”
is an absolute requirement.Members of the FreeBSD group who are active testers, willing
to spend time working through problems in order to ensure that
FreeBSD-current remains as sane as possible. These are also people
who wish to make topical suggestions on changes and the general
direction of FreeBSD.Peripheral members of the FreeBSD (or some other) group who
merely wish to keep an eye on things and use the current sources
for reference purposes (e.g. for reading, not
running). These people also make the occasional comment or
contribute code.What is FreeBSD-current not?A fast-track to getting pre-release bits because you heard
there is some cool new feature in there and you want to be the
first on your block to have it.A quick way of getting bug fixes.In any way “officially supported” by us. We do
our best to help people genuinely in one of the 3
“legitimate” FreeBSD-current categories, but we simply
do not have the time to provide tech support
for it. This is not because we are mean and nasty people who do
not like helping people out (we would not even be doing FreeBSD if
we were), it is literally because we cannot answer 400 messages a
day and actually work on FreeBSD! I am sure
that, if given the choice between having us answer lots of
questions or continuing to improve FreeBSD, most of you would vote
for us improving it.Using FreeBSD-currentJoin the &a.current; and the &a.cvsall; . This is not just a
good idea, it is essential. If you are not
on the FreeBSD-current mailing list, you will
not see the comments that people are making about the current
state of the system and thus will probably end up stumbling over a
lot of problems that others have already found and solved. Even
more importantly, you will miss out on important bulletins which
may be critical to your system's continued health.The cvs-all mailing list will allow you to see
the commit log entry for each change as it is made along with any
pertinent information on possible side-effects.To join these lists, send mail to
&a.majordomo; and specify:
subscribe freebsd-current
subscribe cvs-all
in the body of your message. Optionally, you can also say
help and Majordomo will send you full help on
how to subscribe and unsubscribe to the various other mailing
lists we support.Grab the sources from ftp.FreeBSD.ORG. You can do this in three
+ role="fqdn">ftp.FreeBSD.org. You can do this in three
ways:Use the CTM facility. Unless
you have a good TCP/IP connection at a flat rate, this is
the way to do it.Use the cvsup program with
this
supfile. This is the second most recommended
method, since it allows you to grab the entire collection
once and then only what has changed from then on. Many people
run cvsup from cron and keep their sources up-to-date
automatically. For a fairly easy interface to this, simply
type:
Use ftp. The source tree for
FreeBSD-current is always “exported” on: ftp://ftp.FreeBSD.ORG/pub/FreeBSD/FreeBSD-current.
+ URL="ftp://ftp.FreeBSD.org/pub/FreeBSD/FreeBSD-current">ftp://ftp.FreeBSD.org/pub/FreeBSD/FreeBSD-current.
We also use wu-ftpd which allows
compressed/tar'd grabbing of whole trees. e.g. you
see:usr.bin/lexYou can do:
ftp>cd usr.binftp>get lex.tar.Z
and it will get the whole directory for you as a compressed
tar file.Essentially, if you need rapid on-demand access to the source
and communications bandwidth is not a consideration, use
cvsup or ftp. Otherwise,
use CTM.If you are grabbing the sources to run, and not just look at,
then grab all of current, not just selected
portions. The reason for this is that various parts of the source
depend on updates elsewhere, and trying to compile just a subset
is almost guaranteed to get you into trouble.Before compiling current, read the Makefile in
/usr/src carefully. You should at least run
a make world the first time
through as part of the upgrading process. Reading the &a.current;
will keep you up-to-date on other bootstrapping procedures that
sometimes become necessary as we move towards the next
release.Be active! If you are running FreeBSD-current, we want to
know what you have to say about it, especially if you have
suggestions for enhancements or bug fixes. Suggestions with
accompanying code are received most enthusiastically!Staying Stable with FreeBSDContributed by &a.jkh;.What is FreeBSD-stable?FreeBSD-stable is our development branch for a more low-key and
conservative set of changes intended for our next mainstream release.
Changes of an experimental or untested nature do not go into this
branch (see FreeBSD-current).Who needs FreeBSD-stable?If you are a commercial user or someone who puts maximum stability
of their FreeBSD system before all other concerns, you should consider
tracking stable. This is especially true if you
have installed the most recent release (&rel.current;-RELEASE
at the time of this writing) since the stable
branch is effectively a bug-fix stream relative to the previous
release.The stable tree endeavors, above all, to be
fully compilable and stable at all times, but we do occasionally
make mistakes (these are still active sources with
quickly-transmitted updates, after all). We also do our best to
thoroughly test fixes in current before
bringing them into stable, but sometimes our
tests fail to catch every case. If something breaks for you in
stable, please let us know
immediately! (see next section).Using FreeBSD-stableJoin the &a.stable;. This will keep you informed of
build-dependencies that may appear in stable
or any other issues requiring special attention. Developers will
also make announcements in this mailing list when they are
contemplating some controversial fix or update, giving the users a
chance to respond if they have any issues to raise concerning the
proposed change.The cvs-all mailing list will allow you to see
the commit log entry for each change as it is made along with any
pertinent information on possible side-effects.To join these lists, send mail to &a.majordomo; and specify:
subscribe freebsd-stable
subscribe cvs-all
in the body of your message. Optionally, you can also say
help and Majordomo will send you full help on
how to subscribe and unsubscribe to the various other mailing
lists we support.If you are installing a new system and want it to be as stable
as possible, you can simply grab the latest dated branch snapshot
from ftp://releng3.FreeBSD.org/pub/FreeBSD/
and install it like any other release.If you are already running a previous release of 2.2 and wish
to upgrade via sources then you can easily do so from ftp.FreeBSD.ORG. This can be done in one
+ role="fqdn">ftp.FreeBSD.org. This can be done in one
of three ways:Use the CTM facility. Unless
you have a good TCP/IP connection at a flat rate, this is
the way to do it.Use the cvsup program with
this
supfile. This is the second most recommended
method, since it allows you to grab the entire collection
once and then only what has changed from then on. Many people
run cvsup from cron to keep their sources up-to-date
automatically. For a fairly easy interface to this, simply
type;
Use ftp. The source tree for
FreeBSD-stable is always “exported” on: ftp://ftp.FreeBSD.ORG/pub/FreeBSD/FreeBSD-stable
+ URL="ftp://ftp.FreeBSD.org/pub/FreeBSD/FreeBSD-stable">ftp://ftp.FreeBSD.org/pub/FreeBSD/FreeBSD-stable
We also use wu-ftpd which allows
compressed/tar'd grabbing of whole trees. e.g. you
see:usr.bin/lexYou can do:
ftp>cd usr.binftp>get lex.tar.Z
and it will get the whole directory for you as a compressed
tar file.Essentially, if you need rapid on-demand access to the source
and communications bandwidth is not a consideration, use
cvsup or ftp. Otherwise,
use CTM.Before compiling stable, read the Makefile in
/usr/src carefully. You should at least run
a make world the first time
through as part of the upgrading process. Reading the &a.stable;
will keep you up-to-date on other bootstrapping procedures that
sometimes become necessary as we move towards the next
release.Synchronizing Source Trees over the InternetContributed by &a.jkh;.There are various ways of using an Internet (or email) connection to
stay up-to-date with any given area of the FreeBSD project sources, or
all areas, depending on what interests you. The primary services we
offer are Anonymous CVS, CVSup, and CTM.Anonymous CVS and
CVSup use the pull model
of updating sources. In the case of CVSup
the user (or a cron script) invokes the cvsup
program, and it interacts with a cvsupd server
somewhere to bring your files up to date. The updates you receive are
up-to-the-minute and you get them when, and only when, you want them.
You can easily restrict your updates to the specific files or
directories that are of interest to you. Updates are generated on the
fly by the server, according to what you have and what you want to have.
Anonymous CVS is quite a bit more simplistic
than CVSup in that it's just an extension to
CVS which allows it to pull changes directly
from a remote CVS repository. CVSup can do
this far more efficiently, but Anonymous CVS
is easier to use.CTM, on the other hand, does not
interactively compare the sources you have with those on the master
archive or otherwise pull them across.. Instead, a script which
identifies changes in files since its previous run is executed several
times a day on the master CTM machine, any detected changes being
compressed, stamped with a sequence-number and encoded for transmission
over email (in printable ASCII only). Once received, these “CTM
deltas” can then be handed to the &man.ctm.rmail.1; utility which
will automatically decode,
verify and apply the changes to the user's copy of the sources. This
process is far more efficient than CVSup, and
places less strain on our server resources since it is a
push rather than a pull
model.There are other trade-offs, of course. If you inadvertently wipe
out portions of your archive, CVSup will
detect and rebuild the damaged portions for you.
CTM won't do this, and if you wipe some
portion of your source tree out (and don't have it backed up) then you
will have to start from scratch (from the most recent CVS “base
delta”) and rebuild it all with CTM or, with anoncvs, simply
delete the bad bits and resync.For more information on Anonymous CVS,
CTM, and CVSup,
please see one of the following sections:Anonymous CVSContributed by &a.jkh;IntroductionAnonymous CVS (or, as it is otherwise known,
anoncvs) is a feature provided by the CVS
utilities bundled with FreeBSD for synchronizing with a remote CVS
repository. Among other things, it allows users of FreeBSD to
perform, with no special privileges, read-only CVS operations
against one of the FreeBSD project's official anoncvs servers. To
use it, one simply sets the CVSROOT environment
variable to point at the appropriate anoncvs server and then uses
the &man.cvs.1; command to access it like any local
repository.While it can also be said that the CVSup and anoncvs
services both perform essentially the same function, there are
various trade-offs which can influence the user's choice of
synchronization methods. In a nutshell,
CVSup is much more efficient in its usage
of network resources and is by far the most technically
sophisticated of the two, but at a price. To use
CVSup, a special client must first be
installed and configured before any bits can be grabbed, and then
only in the fairly large chunks which
CVSup calls
collections.Anoncvs, by contrast, can be used to
examine anything from an individual file to a specific program (like
ls or grep) by referencing the
CVS module name. Of course, anoncvs is
also only good for read-only operations on the CVS repository, so if
it's your intention to support local development in one repository
shared with the FreeBSD project bits then
CVSup is really your only option.Using Anonymous CVSConfiguring &man.cvs.1; to use an Anonymous CVS repository is a
simple matter of setting the CVSROOT environment
variable to point to one of the FreeBSD project's
anoncvs servers. At the time of this writing,
the following servers are available:USA:
anoncvs@anoncvs.FreeBSD.org:/cvsSince CVS allows one to “check out” virtually any
version of the FreeBSD sources that ever existed (or, in some cases,
will exist :), you need to be familiar with the
revision () flag to &man.cvs.1; and what some of
the permissible values for it in the FreeBSD Project repository
are.There are two kinds of tags, revision tags and branch tags. A
revision tag refers to a specific revision. Its meaning stays the
same from day to day. A branch tag, on the other hand, refers to
the latest revision on a given line of development, at any given
time. Because a branch tag does not refer to a specific revision,
it may mean something different tomorrow than it means today.Here are the branch tags that users might be interested
in:HEADSymbolic name for the main line, or FreeBSD-current. Also
the default when no revision is specified.RELENG_3The line of development for FreeBSD-3.x, also known as
FreeBSD-stable. Not valid for the ports collection.RELENG_2_2The line of development for FreeBSD-2.2.x, also known as
2.2-stable. This branch is mostly obsolete. Not valid for
the ports collection.RELENG_2_1_0The line of development for FreeBSD-2.1.x - this branch is
largely obsolete. Not valid for the ports collection.Here are the revision tags that users might be interested
in:RELENG_3_2_0_RELEASEFreeBSD-3.2. Not valid for the ports collection.RELENG_3_1_0_RELEASEFreeBSD-3.1. Not valid for the ports collection.RELENG_3_0_0_RELEASEFreeBSD-3.0. Not valid for the ports collection.RELENG_2_2_8_RELEASEFreeBSD-2.2.8. Not valid for the ports collection.RELENG_2_2_7_RELEASEFreeBSD-2.2.7. Not valid for the ports collection.RELENG_2_2_6_RELEASEFreeBSD-2.2.6. Not valid for the ports collection.RELENG_2_2_5_RELEASEFreeBSD-2.2.5. Not valid for the ports collection.RELENG_2_2_2_RELEASEFreeBSD-2.2.2. Not valid for the ports collection.RELENG_2_2_1_RELEASEFreeBSD-2.2.1. Not valid for the ports collection.RELENG_2_2_0_RELEASEFreeBSD-2.2.0. Not valid for the ports collection.RELENG_2_1_7_RELEASEFreeBSD-2.1.7. Not valid for the ports collection.RELENG_2_1_6_1_RELEASEFreeBSD-2.1.6.1. Not valid for the ports
collection.RELENG_2_1_6_RELEASEFreeBSD-2.1.6. Not valid for the ports collection.RELENG_2_1_5_RELEASEFreeBSD-2.1.5. Not valid for the ports collection.RELENG_2_1_0_RELEASEFreeBSD-2.1.0. Not valid for the ports collection.When you specify a branch tag, you normally receive the latest
versions of the files on that line of development. If you wish to
receive some past version, you can do so by specifying a date with
the flag. See the &man.cvs.1; man page
for more details.ExamplesWhile it really is recommended that you read the manual page for
&man.cvs.1; thoroughly before doing anything, here are some
quick examples which essentially show how to use Anonymous
CVS:Checking out something from -current (&man.ls.1;) and
deleting it again:
&prompt.user; setenv CVSROOT anoncvs@anoncvs.FreeBSD.org:/cvs
&prompt.user; cvs co ls
&prompt.user; cvs release -d lsChecking out the version of ls(1) in the 2.2-stable
branch:
&prompt.user; setenv CVSROOT anoncvs@anoncvs.FreeBSD.org:/cvs
&prompt.user; cvs co -rRELENG_2_2 ls
&prompt.user; cvs release -d lsCreating a list of changes (as unidiffs) to &man.ls.1;
&prompt.user; setenv CVSROOT anoncvs@anoncvs.FreeBSD.org:/cvs
&prompt.user; cvs rdiff -u -rRELENG_2_2_2_RELEASE -rRELENG_2_2_6_RELEASE lsFinding out what other module names can be used:
&prompt.user; setenv CVSROOT anoncvs@anoncvs.FreeBSD.org:/cvs
&prompt.user; cvs co modules
&prompt.user; more modules/modules
&prompt.user; cvs release -d modulesOther ResourcesThe following additional resources may be helpful in learning
CVS:CVS Tutorial from Cal Poly.Cyclic Software,
commercial maintainers of CVS.CVSWeb is
the FreeBSD Project web interface for CVS.CTMContributed by &a.phk;. Updated
19-October-1997.CTM is a method for keeping a remote
directory tree in sync with a central one. It has been developed for
usage with FreeBSD's source trees, though other people may find it
useful for other purposes as time goes by. Little, if any,
documentation currently exists at this time on the process of creating
deltas, so talk to &a.phk; for more information should you wish to use
CTM for other things.Why should I use CTM?CTM will give you a local copy of the
FreeBSD source trees. There are a number of “flavors”
of the tree available. Whether you wish to track the entire cvs
tree or just one of the branches, CTM can
provide you the information. If you are an active developer on
FreeBSD, but have lousy or non-existent TCP/IP connectivity, or
simply wish to have the changes automatically sent to you,
CTM was made for you. You will need to
obtain up to three deltas per day for the most active branches.
However, you should consider having them sent by automatic email.
The sizes of the updates are always kept as small as possible. This
is typically less than 5K, with an occasional (one in ten) being
10-50K and every now and then a biggie of 100K+ or more coming
around.You will also need to make yourself aware of the various caveats
related to working directly from the development sources rather than
a pre-packaged release. This is particularly true if you choose the
“current” sources. It is recommended that you read
Staying current with FreeBSD.What do I need to use CTM?You will need two things: The CTM
program and the initial deltas to feed it (to get up to
“current” levels).The CTM program has been part of
FreeBSD ever since version 2.0 was released, and lives in
/usr/src/usr.sbin/CTM if you have a copy of the
source online.If you are running a pre-2.0 version of FreeBSD, you can fetch
the current CTM sources directly
from:ftp://ftp.FreeBSD.ORG/pub/FreeBSD/FreeBSD-current/src/usr.sbin/ctm
+ URL="ftp://ftp.FreeBSD.org/pub/FreeBSD/FreeBSD-current/src/usr.sbin/ctm">ftp://ftp.FreeBSD.org/pub/FreeBSD/FreeBSD-current/src/usr.sbin/ctm
The “deltas” you feed CTM
can be had two ways, FTP or e-mail. If you have general FTP access
to the Internet then the following FTP sites support access to
CTM:ftp://ftp.FreeBSD.ORG/pub/FreeBSD/CTM
+ URL="ftp://ftp.FreeBSD.org/pub/FreeBSD/CTM">ftp://ftp.FreeBSD.org/pub/FreeBSD/CTM
or see section mirrors.FTP the relevant directory and fetch the
README file, starting from there.If you may wish to get your deltas via email:Send email to &a.majordomo; to subscribe to one of the
CTM distribution lists.
“ctm-cvs-cur” supports the entire cvs tree.
“ctm-src-cur” supports the head of the development
branch. “ctm-src-2_2” supports the 2.2 release branch,
etc. (If you do not know how to subscribe yourself using majordomo,
send a message first containing the word help
— it will send you back usage instructions.)When you begin receiving your CTM
updates in the mail, you may use the ctm_rmail
program to unpack and apply them. You can actually use the
ctm_rmail program directly from a entry in
/etc/aliases if you want to have the process
run in a fully automated fashion. Check the
ctm_rmail man page for more details.No matter what method you use to get the
CTM deltas, you should subscribe to the
- ctm-announce@FreeBSD.ORG mailing list. In the
+ ctm-announce@FreeBSD.org mailing list. In the
future, this will be the only place where announcements concerning
the operations of the CTM system will
be posted. Send an email to &a.majordomo; with a single line of
subscribe ctm-announce to get added to the
list.Starting off with CTM for the first
timeBefore you can start using CTM
deltas, you will need to get to a starting point for the deltas
produced subsequently to it.First you should determine what you already have. Everyone can
start from an “empty” directory. You must use an
initial “Empty&rdquo delta to start off your
CTM supported tree. At some point it is
intended that one of these “started” deltas be
distributed on the CD for your convenience. This does not currently
happen however.However, since the trees are many tens of megabytes, you should
prefer to start from something already at hand. If you have a
RELEASE CD, you can copy or extract an initial source from it. This
will save a significant transfer of data.You can recognize these “starter” deltas by the
X appended to the number
(src-cur.3210XEmpty.gz for instance). The
designation following the X corresponds to the
origin of your initial “seed”.
Empty is an empty directory. As a rule a base
transition from Empty is produced every 100
deltas. By the way, they are large! 25 to 30 Megabytes of
gzip'ed data is common for the
XEmpty deltas.Once you've picked a base delta to start from, you will also
need all deltas with higher numbers following it.Using CTM in your daily lifeTo apply the deltas, simply say:&prompt.root; cd /where/ever/you/want/the/stuff
&prompt.root; ctm -v -v /where/you/store/your/deltas/src-xxx.*CTM understands deltas which have
been put through gzip, so you do not need to
gunzip them first, this saves disk space.Unless it feels very secure about the entire process,
CTM will not touch your tree. To verify
a delta you can also use the flag and
CTM will not actually touch your tree; it
will merely verify the integrity of the delta and see if it would
apply cleanly to your current tree.There are other options to CTM as
well, see the manual pages or look in the sources for more
information.I would also be very happy if somebody could help with the
“user interface” portions, as I have realized that I
cannot make up my mind on what options should do what, how and
when...That's really all there is to it. Every time you get a new
delta, just run it through CTM to keep
your sources up to date.Do not remove the deltas if they are hard to download again. You
just might want to keep them around in case something bad happens.
Even if you only have floppy disks, consider using
fdwrite to make a copy.Keeping your local changesAs a developer one would like to experiment with and change
files in the source tree. CTM supports
local modifications in a limited way: before checking for the
presence of a file foo, it first looks for
foo.ctm. If this file exists, CTM will operate
on it instead of foo.This behaviour gives us a simple way to maintain local changes:
simply copy the files you plan to modify to the corresponding file
names with a .ctm suffix. Then you can freely
hack the code, while CTM keeps the .ctm file
up-to-date.Other interesting CTM optionsFinding out exactly what would be touched by an
updateYou can determine the list of changes that
CTM will make on your source repository
using the option to
CTM.This is useful if you would like to keep logs of the changes,
pre- or post- process the modified files in any manner, or just
are feeling a tad paranoid :-).Making backups before updatingSometimes you may want to backup all the files that would be
changed by a CTM update.Specifying the option causes
CTM to backup all files that would be
touched by a given CTM delta to
backup-file.Restricting the files touched by an updateSometimes you would be interested in restricting the scope of
a given CTM update, or may be
interested in extracting just a few files from a sequence of
deltas.You can control the list of files that
CTM would operate on by specifying
filtering regular expressions using the and
options.For example, to extract an up-to-date copy of
lib/libc/Makefile from your collection of
saved CTM deltas, run the commands:&prompt.root; cd /where/ever/you/want/to/extract/it/
&prompt.root; ctm -e '^lib/libc/Makefile' ~ctm/src-xxx.*For every file specified in a CTM
delta, the and options are
applied in the order given on the command line. The file is
processed by CTM only if it is marked
as eligible after all the and
options are applied to it.Future plans for CTMTons of them:Use some kind of authentication into the CTM system, so as
to allow detection of spoofed CTM updates.Clean up the options to CTM, they
became confusing and counter intuitive.The bad news is that I am very busy, so any help in doing this
will be most welcome. And do not forget to tell me what you want
also...Miscellaneous stuffAll the “DES infected” (e.g. export controlled)
source is not included. You will get the
“international” version only. If sufficient interest
appears, we will set up a sec-cur sequence too.
There is a sequence of deltas for the ports
collection too, but interest has not been all that high yet. Tell me
if you want an email list for that too and we will consider setting
it up.Thanks!&a.bde;for his pointed pen and invaluable comments.&a.sos;for patience.Stephen McKaywrote ctm_[rs]mail, much
appreciated.&a.jkh;for being so stubborn that I had to make it better.All the usersI hope you like it...CVSupContributed by &a.jdp;.IntroductionCVSup is a software package for
distributing and updating source trees from a master CVS repository
on a remote server host. The FreeBSD sources are maintained in a
CVS repository on a central development machine in California. With
CVSup, FreeBSD users can easily keep
their own source trees up to date.CVSup uses the so-called
pull model of updating. Under the pull model,
each client asks the server for updates, if and when they are
wanted. The server waits passively for update requests from its
clients. Thus all updates are instigated by the client. The server
never sends unsolicited updates. Users must either run the
CVSup client manually to get an update,
or they must set up a cron job to run it
automatically on a regular basis.The term CVSup, capitalized just so,
refers to the entire software package. Its main components are the
client cvsup which runs on each user's machine,
and the server cvsupd which runs at each of the
FreeBSD mirror sites.As you read the FreeBSD documentation and mailing lists, you may
see references to sup.
Sup was the predecessor of
CVSup, and it served a similar purpose.
CVSup is in used in much the same way as
sup and, in fact, uses configuration files which are
backward-compatible with sup's.
Sup is no longer used in the FreeBSD
project, because CVSup is both faster and
more flexible.InstallationThe easiest way to install CVSup if
you are running FreeBSD 2.2 or later is to use either the
port from the FreeBSD ports
collection or the corresponding binary
package, depending on whether you prefer to roll your own
or not.If you are running FreeBSD-2.1.6 or 2.1.7, you unfortunately
cannot use the binary package versions due to the fact that they
require a version of the C library that does not yet exist in
FreeBSD-2.1.{6,7}. You can easily use the
port, however, just as with FreeBSD 2.2. Simply unpack
the tar file, cd to the cvsup subdirectory and type make
install.Because CVSup is written in Modula-3,
both the package and the port require that the Modula-3 runtime
libraries be installed. These are available as the lang/modula-3-lib port and the lang/modula-3-lib-3.6 package.
If you follow the same directions as for cvsup,
these libraries will be compiled and/or installed automatically when
you install the CVSup port or
package.The Modula-3 libraries are rather large, and fetching and
compiling them is not an instantaneous process. For that reason, a
third option is provided. You can get statically
linked FreeBSD executables for
CVSup from the USA distribution
site:ftp://ftp.FreeBSD.org/pub/FreeBSD/development/CVSup/cvsup-bin-16.0.tar.gz (client including GUI).ftp://ftp.FreeBSD.org/pub/FreeBSD/development/CVSup/cvsup.nogui-bin-16.0.tar.gz (client without GUI).ftp://ftp.FreeBSD.org/pub/FreeBSD/development/CVSup/cvsupd-bin-16.0.tar.gz (server).as well as from the many FreeBSD FTP
mirror sites around the world.Most users will need only the client. These executables are
entirely self-contained, and they will run on any version of FreeBSD
from FreeBSD-2.1.0 to FreeBSD-current.In summary, your options for installing CVSup are:FreeBSD-2.2 or later: static binary, port, or
packageFreeBSD-2.1.6, 2.1.7: static binary or portFreeBSD-2.1.5 or earlier: static binaryCVSup ConfigurationCVSup's operation is controlled by a
configuration file called the supfile.
Beginning with FreeBSD-2.2, there are some sample
supfiles in the directory /usr/share/examples/cvsup.
These examples are also available from ftp://ftp.FreeBSD.org/pub/FreeBSD/FreeBSD-current/src/share/examples/cvsup/ if you are on a pre-2.2 system.The information in a supfile answers the
following questions for cvsup:Which files do you want
to receive?Which versions of them do
you want?Where do you want to get
them from?Where do you want to put
them on your own machine?Where do you want to put
your status files?In the following sections, we will construct a typical
supfile by answering each of these questions in
turn. First, we describe the overall structure of a
supfile.A supfile is a text file. Comments begin
with # and extend to the end of the line. Lines
that are blank and lines that contain only comments are
ignored.Each remaining line describes a set of files that the user
wishes to receive. The line begins with the name of a
“collection”, a logical grouping of files defined by the
server. The name of the collection tells the server which files you
want. After the collection name come zero or more fields, separated
by white space. These fields answer the questions listed above.
There are two types of fields: flag fields and value fields. A flag
field consists of a keyword standing alone, e.g.,
delete or compress. A value
field also begins with a keyword, but the keyword is followed
without intervening white space by = and a second
word. For example, release=cvs is a value
field.A supfile typically specifies more than one
collection to receive. One way to structure a
supfile is to specify all of the relevant
fields explicitly for each collection. However, that tends to make
the supfile lines quite long, and it is
inconvenient because most fields are the same for all of the
collections in a supfile.
CVSup provides a defaulting mechanism to
avoid these problems. Lines beginning with the special
pseudo-collection name *default can be used to
set flags and values which will be used as defaults for the
subsequent collections in the supfile. A
default value can be overridden for an individual collection, by
specifying a different value with the collection itself. Defaults
can also be changed or augmented in mid-supfile by additional
*default lines.With this background, we will now proceed to construct a
supfile for receiving and updating the main
source tree of FreeBSD-current.Which files do you want to receive?The files available via CVSup are
organized into named groups called “collections”.
The collections that are available are described here. In this example, we wish
to receive the entire main source tree for the FreeBSD system.
There is a single large collection src-all
which will give us all of that, except the export-controlled
cryptography support. Let us assume for this example that we
are in the USA or Canada. Then we can get the cryptography code
with one additional collection, cvs-crypto.
As a first step toward constructing our
supfile, we simply list these collections,
one per line:
src-all
cvs-cryptoWhich version(s) of them do you want?With CVSup, you can receive
virtually any version of the sources that ever existed. That is
possible because the cvsupd server works directly from the CVS
repository, which contains all of the versions. You specify
which one of them you want using the tag= and
value fields.Be very careful to specify any tag=
fields correctly. Some tags are valid only for certain
collections of files. If you specify an incorrect or
misspelled tag, CVSup will delete files which you probably do
not want deleted. In particular, use only
tag=. for the
ports-* collections.The tag= field names a symbolic tag in
the repository. There are two kinds of tags, revision tags and
branch tags. A revision tag refers to a specific revision. Its
meaning stays the same from day to day. A branch tag, on the
other hand, refers to the latest revision on a given line of
development, at any given time. Because a branch tag does not
refer to a specific revision, it may mean something different
tomorrow than it means today.Here are the branch tags that users might be interested
in:tag=.The main line of development, also known as
FreeBSD-current.The . is not punctuation; it is
the name of the tag. Valid for all collections.RELENG_3The line of development for FreeBSD-3.x, also known as
FreeBSD-stable. Not valid for the ports
collection.RELENG_2_2The line of development for FreeBSD-2.2.x, also known
as 2.2-stable. Not valid for the ports collection.tag=RELENG_2_1_0The line of development for FreeBSD-2.1.x - this
branch is largely obsolete. Not valid for the ports-*
collections.Here are the revision tags that users might be interested
in:tag=RELENG_3_2_0_RELEASEFreeBSD-3.2. Not valid for the ports-*
collections.tag=RELENG_3_1_0_RELEASEFreeBSD-3.1. Not valid for the ports-*
collections.tag=RELENG_3_0_0_RELEASEFreeBSD-3.0. Not valid for the ports-*
collections.tag=RELENG_2_2_8_RELEASEFreeBSD-2.2.8. Not valid for the ports-*
collections.tag=RELENG_2_2_7_RELEASEFreeBSD-2.2.7. Not valid for the ports-*
collections.tag=RELENG_2_2_6_RELEASEFreeBSD-2.2.6. Not valid for the ports-*
collections.tag=RELENG_2_2_5_RELEASEFreeBSD-2.2.5. Not valid for the ports-*
collections.tag=RELENG_2_2_2_RELEASEFreeBSD-2.2.2. Not valid for the ports-*
collections.tag=RELENG_2_2_1_RELEASEFreeBSD-2.2.1. Not valid for the ports-*
collections.tag=RELENG_2_2_0_RELEASEFreeBSD-2.2.0. Not valid for the ports-*
collections.tag=RELENG_2_1_7_RELEASEFreeBSD-2.1.7. Not valid for the ports-*
collections.tag=RELENG_2_1_6_1_RELEASEFreeBSD-2.1.6.1. Not valid for the ports-*
collections.tag=RELENG_2_1_6_RELEASEFreeBSD-2.1.6. Not valid for the ports-*
collections.tag=RELENG_2_1_5_RELEASEFreeBSD-2.1.5. Not valid for the ports-*
collections.tag=RELENG_2_1_0_RELEASEFreeBSD-2.1.0. Not valid for the ports-*
collections.Be very careful to type the tag name exactly as shown.
CVSup cannot distinguish between
valid and invalid tags. If you misspell the tag,
CVSup will behave as though you had
specified a valid tag which happens to refer to no files at
all. It will delete your existing sources in that
case.When you specify a branch tag, you normally receive the
latest versions of the files on that line of development. If
you wish to receive some past version, you can do so by
specifying a date with the value field.
The &man.cvsup.1; manual page explains how to do
that.For our example, we wish to receive FreeBSD-current. We add
this line at the beginning of our
supfile:
*default tag=.There is an important special case that comes into play if
you specify neither a tag= field nor a
date= field. In that case, you receive the
actual RCS files directly from the server's CVS repository,
rather than receiving a particular version. Developers
generally prefer this mode of operation. By maintaining a copy
of the repository itself on their systems, they gain the ability
to browse the revision histories and examine past versions of
files. This gain is achieved at a large cost in terms of disk
space, however.Where do you want to get them from?We use the host= field to tell
cvsup where to obtain its updates. Any of
the CVSup mirror sites will
do, though you should try to select one that is close to you in
cyberspace. In this example we will use a fictional FreeBSD
distribution site, cvsup666.FreeBSD.org:
*default host=cvsup666.FreeBSD.orgYou will need to change the host to one that actually exists
before running CVSup. On any particular run of
cvsup, you can override the host setting on
the command line, with .Where do you want to put them on your own machine?The prefix= field tells
cvsup where to put the files it receives. In
this example, we will put the source files directly into our
main source tree, /usr/src. The
src directory is already implicit in the
collections we have chosen to receive, so this is the correct
specification:
*default prefix=/usrWhere should cvsup maintain its status
files?The cvsup client maintains certain status files in what is
called the “base” directory. These files help
CVSup to work more efficiently, by
keeping track of which updates you have already received. We
will use the standard base directory,
/usr/local/etc/cvsup:
*default base=/usr/local/etc/cvsupThis setting is used by default if it is not specified in
the supfile, so we actually do not need the
above line.If your base directory does not already exist, now would be
a good time to create it. The cvsup client
will refuse to run if the base directory does not exist.Miscellaneous supfile settings:There is one more line of boiler plate that normally needs
to be present in the supfile:
*default release=cvs delete use-rel-suffix compressrelease=cvs indicates that the server
should get its information out of the main FreeBSD CVS
repository. This is virtually always the case, but there are
other possibilities which are beyond the scope of this
discussion.delete gives
CVSup permission to delete files.
You should always specify this, so that
CVSup can keep your source tree fully
up to date. CVSup is careful to
delete only those files for which it is responsible. Any extra
files you happen to have will be left strictly alone.use-rel-suffix is ... arcane. If you
really want to know about it, see the &man.cvsup.1; manual page.
Otherwise, just specify it and do not worry about it.compress enables the use of gzip-style
compression on the communication channel. If your network link
is T1 speed or faster, you probably should not use compression.
Otherwise, it helps substantially.Putting it all together:Here is the entire supfile for our
example:
*default tag=.
*default host=cvsup666.FreeBSD.org
*default prefix=/usr
*default base=/usr/local/etc/cvsup
*default release=cvs delete use-rel-suffix compress
src-all
cvs-cryptoRunning CVSupYou are now ready to try an update. The command line for doing
this is quite simple:&prompt.root; cvsup supfilewhere supfile is
of course the name of the supfile you have just created. Assuming
you are running under X11, cvsup will display a
GUI window with some buttons to do the usual things. Press the
“go” button, and watch it run.Since you are updating your actual /usr/src
tree in this example, you will need to run the program as
root so that cvsup has the
permissions it needs to update your files. Having just created your
configuration file, and having never used this program before, that
might understandably make you nervous. There is an easy way to do a
trial run without touching your precious files. Just create an
empty directory somewhere convenient, and name it as an extra
argument on the command line:&prompt.root; mkdir /var/tmp/dest
&prompt.root; cvsup supfile /var/tmp/destThe directory you specify will be used as the destination
directory for all file updates. CVSup
will examine your usual files in /usr/src, but
it will not modify or delete any of them. Any file updates will
instead land in /var/tmp/dest/usr/src.
CVSup will also leave its base directory
status files untouched when run this way. The new versions of those
files will be written into the specified directory. As long as you
have read access to /usr/src, you do not even
need to be root to perform this kind of trial run.If you are not running X11 or if you just do not like GUIs, you
should add a couple of options to the command line when you run
cvsup:&prompt.root; cvsup -g -L 2 supfileThe tells cvsup not to use its GUI. This is
automatic if you are not running X11, but otherwise you have to
specify it.The tells cvsup to print out the details
of all the file updates it is doing. There are three levels of
verbosity, from to . The
default is 0, which means total silence except for error
messages.There are plenty of other options available. For a brief list
of them, type cvsup -H. For more detailed
descriptions, see the manual page.Once you are satisfied with the way updates are working, you can
arrange for regular runs of cvsup using &man.cron.8;.
Obviously, you should not let cvsup use its GUI when running it from
cron.CVSup File CollectionsThe file collections available via
CVSup are organized hierarchically.
There are a few large collections, and they are divided into smaller
sub-collections. Receiving a large collection is equivalent to
receiving each of its sub-collections. The hierarchical
relationships among collections are reflected by the use of
indentation in the list below.The most commonly used collections are
src-all, cvs-crypto, and
ports-all. The other collections are used only
by small groups of people for specialized purposes, and some mirror
sites may not carry all of them.cvs-all release=cvsThe main FreeBSD CVS repository, excluding the
export-restricted cryptography code.distrib release=cvsFiles related to the distribution and mirroring of
FreeBSD.doc-all release=cvsSources for the FreeBSD handbook and other
documentation.ports-all release=cvsThe FreeBSD ports collection.ports-archivers
release=cvsArchiving tools.ports-astro
release=cvsAstronomical ports.ports-audio
release=cvsSound support.ports-base release=cvsMiscellaneous files at the top of
/usr/ports.ports-benchmarks
release=cvsBenchmarks.ports-biology
release=cvsBiology.ports-cad release=cvsComputer aided design tools.ports-chinese
release=cvsChinese language support.ports-comms
release=cvsCommunication software.ports-converters
release=cvscharacter code converters.ports-databases
release=cvsDatabases.ports-deskutils
release=cvsThings that used to be on the desktop before
computers were invented.ports-devel
release=cvsDevelopment utilities.ports-editors
release=cvsEditors.ports-emulators
release=cvsEmulators for other operating systems.ports-games
release=cvsGames.ports-german
release=cvsGerman language support.ports-graphics
release=cvsGraphics utilities.ports-japanese
release=cvsJapanese language support.ports-korean
release=cvsKorean language support.ports-lang release=cvsProgramming languages.ports-mail release=cvsMail software.ports-math release=cvsNumerical computation software.ports-mbone
release=cvsMBone applications.ports-misc release=cvsMiscellaneous utilities.ports-net release=cvsNetworking software.ports-news release=cvsUSENET news software.ports-palm
release=cvsSoftware support for 3Com Palm(tm) series.ports-plan9
release=cvsVarious programs from Plan9.ports-print
release=cvsPrinting software.ports-russian
release=cvsRussian language support.ports-security
release=cvsSecurity utilities.ports-shells
release=cvsCommand line shells.ports-sysutils
release=cvsSystem utilities.ports-textproc
release=cvstext processing utilities (does not include
desktop publishing).ports-vietnamese
release=cvsVietnamese language support.ports-www release=cvsSoftware related to the World Wide Web.ports-x11 release=cvsPorts to support the X window system.ports-x11-clocks
release=cvsX11 clocks.ports-x11-fm
release=cvsX11 file managers.ports-x11-fonts
release=cvsX11 fonts and font utilities.ports-x11-toolkits
release=cvsX11 toolkits.ports-x11-wmX11 window managers.src-all release=cvsThe main FreeBSD sources, excluding the
export-restricted cryptography code.src-base release=cvsMiscellaneous files at the top of
/usr/src.src-bin release=cvsUser utilities that may be needed in
single-user mode
(/usr/src/bin).src-contrib
release=cvsUtilities and libraries from outside the
FreeBSD project, used relatively unmodified
(/usr/src/contrib).src-etc release=cvsSystem configuration files
(/usr/src/etc).src-games release=cvsGames
(/usr/src/games).src-gnu release=cvsUtilities covered by the GNU Public License
(/usr/src/gnu).src-include
release=cvsHeader files
(/usr/src/include).src-kerberosIV
release=cvsKerberosIV security package
(/usr/src/kerberosIV).src-lib release=cvsLibraries
(/usr/src/lib).src-libexec
release=cvsSystem programs normally executed by other
programs
(/usr/src/libexec).src-release
release=cvsFiles required to produce a FreeBSD release
(/usr/src/release).src-sbin release=cvsSystem utilities for single-user mode
(/usr/src/sbin).src-share release=cvsFiles that can be shared across multiple
systems
(/usr/src/share).src-sys release=cvsThe kernel
(/usr/src/sys).src-tools release=cvsVarious tools for the maintenance of FreeBSD
(/usr/src/tools).src-usrbin release=cvsUser utilities
(/usr/src/usr.bin).src-usrsbin
release=cvsSystem utilities
(/usr/src/usr.sbin).www release=cvsThe sources for the World Wide Web data.cvs-crypto release=cvsThe export-restricted cryptography code.src-crypto release=cvsExport-restricted utilities and libraries from
outside the FreeBSD project, used relatively unmodified
(/usr/src/crypto).src-eBones release=cvsKerberos and DES
(/usr/src/eBones).src-secure release=cvsDES (/usr/src/secure).distrib release=selfThe CVSup server's own configuration files. Used by CVSup
mirror sites.gnats release=currentThe GNATS bug-tracking database.mail-archive release=currentFreeBSD mailing list archive.www release=currentThe installed World Wide Web data. Used by WWW mirror
sites.For more informationFor the CVSup FAQ and other information about CVSup, see The CVSup
Home Page.Most FreeBSD-related discussion of
CVSup takes place on the &a.hackers;.
New versions of the software are announced there, as well as on the
&a.announce;.Questions and bug reports should be addressed to the author of
the program at cvsup-bugs@polstra.com.Using make world to rebuild your systemContributed by &a.nik;.Once you have synchronised your local source tree against a
particular version of FreeBSD (stable,
current and so on) you must then use the source tree
to rebuild the system.Currently, the best source of information on how to do that is a
tutorial available from http://www.nothing-going-on.demon.co.uk/FreeBSD/make-world/make-world.html.A successor to this tutorial will be integrated into the
handbook.
diff --git a/en/handbook/eresources/chapter.sgml b/en/handbook/eresources/chapter.sgml
index ce30750488..f2ee2fc5f1 100644
--- a/en/handbook/eresources/chapter.sgml
+++ b/en/handbook/eresources/chapter.sgml
@@ -1,1370 +1,1370 @@
Resources on the InternetContributed by &a.jkh;.The rapid pace of FreeBSD progress makes print media impractical as a
means of following the latest developments. Electronic resources are the
best, if not often the only, way stay informed of the latest advances.
Since FreeBSD is a volunteer effort, the user community itself also
generally serves as a “technical support department” of sorts,
with electronic mail and USENET news being the most effective way of
reaching that community.The most important points of contact with the FreeBSD user community
are outlined below. If you are aware of other resources not mentioned
here, please send them to the &a.doc;so that they may also be
included.Mailing listsThough many of the FreeBSD development members read USENET, we
cannot always guarantee that we will get to your questions in a timely
fashion (or at all) if you post them only to one of the
comp.unix.bsd.freebsd.* groups. By addressing your
questions to the appropriate mailing list you will reach both us and a
concentrated FreeBSD audience, invariably assuring a better (or at least
faster) response.The charters for the various lists are given at the bottom of this
document. Please read the charter before joining or sending
mail to any list. Most of our list subscribers now receive
many hundreds of FreeBSD related messages every day, and by setting down
charters and rules for proper use we are striving to keep the
signal-to-noise ratio of the lists high. To do less would see the
mailing lists ultimately fail as an effective communications medium for
the project.Archives are kept for all of the mailing lists and can be searched
- using the FreeBSD World
+ using the FreeBSD World
Wide Web server. The keyword searchable archive offers an
excellent way of finding answers to frequently asked questions and
should be consulted before posting a question.List summaryGeneral lists: The following are general
lists which anyone is free (and encouraged) to join:ListPurposefreebsd-advocacyFreeBSD Evangelismfreebsd-announceImportant events and project milestonesfreebsd-bugsBug reportsfreebsd-chatNon-technical items related to the FreeBSD
communityfreebsd-currentDiscussion concerning the use of
FreeBSD-currentfreebsd-ispIssues for Internet Service Providers using
FreeBSDfreebsd-jobsFreeBSD employment and consulting
opportunitiesfreebsd-newbiesNew FreeBSD users activities and discussionsfreebsd-policyFreeBSD Core team policy decisions. Low volume, and
read-onlyfreebsd-questionsUser questions and technical supportfreebsd-stableDiscussion concerning the use of
FreeBSD-stableTechnical lists: The following lists are for
technical discussion. You should read the charter for each list
carefully before joining or sending mail to one as there are firm
guidelines for their use and content.ListPurposefreebsd-afsPorting AFS to FreeBSDfreebsd-alphaPorting FreeBSD to the Alphafreebsd-docCreating FreeBSD related documentsfreebsd-databaseDiscussing database use and development under
FreeBSDfreebsd-emulationEmulation of other systems such as
Linux/DOS/Windowsfreebsd-fsFilesystemsfreebsd-hackersGeneral technical discussionfreebsd-hardwareGeneral discussion of hardware for running
FreeBSDfreebsd-ipfwTechnical discussion concerning the redesign of the IP
firewall codefreebsd-isdnISDN developersfreebsd-javaJava developers and people porting JDKs to
FreeBSDfreebsd-mobileDiscussions about mobile computingfreebsd-mozillaPorting mozilla to FreeBSDfreebsd-netNetworking discussion and TCP/IP/source codefreebsd-platformsConcerning ports to non-Intel architecture
platformsfreebsd-portsDiscussion of the ports collectionfreebsd-scsiThe SCSI subsystemfreebsd-securitySecurity issuesfreebsd-smallUsing FreeBSD in embedded applicationsfreebsd-smpDesign discussions for [A]Symmetric
MultiProcessingfreebsd-sparcPorting FreeBSD to Sparc systemsfreebsd-tokenringSupport Token Ring in FreeBSDLimited lists: The following lists require
- approval from core@FreeBSD.ORG to join, though anyone
+ approval from core@FreeBSD.org to join, though anyone
is free to send messages to them which fall within the scope of their
charters. It is also a good idea establish a presence in the
technical lists before asking to join one of these limited
lists.ListPurposefreebsd-adminAdministrative issuesfreebsd-archArchitecture and design discussionsfreebsd-coreFreeBSD core teamfreebsd-hubsPeople running mirror sites (infrastructural
support)freebsd-installInstallation developmentfreebsd-security-notificationsSecurity notificationsfreebsd-user-groupsUser group coordinationCVS lists: The following lists are for people
interested in seeing the log messages for changes to various areas of
the source tree. They are Read-Only lists and
should not have mail sent to them.ListSource areaArea Description (source for)cvs-all/usr/srcAll changes to the tree (superset)How to subscribeAll mailing lists live on FreeBSD.ORG, so to post to a given list you
+ role="fqdn">FreeBSD.org, so to post to a given list you
simply mail to
- <listname@FreeBSD.ORG>. It will then
+ <listname@FreeBSD.org>. It will then
be redistributed to mailing list members world-wide.To subscribe to a list, send mail to &a.majordomo; and include
subscribe <listname> [<optional address>]
in the body of your message. For example, to subscribe yourself to
freebsd-announce, you'd do:
- &prompt.user; mail majordomo@FreeBSD.ORG
+ &prompt.user; mail majordomo@FreeBSD.org
subscribe freebsd-announce
^DIf you want to subscribe yourself under a different name, or
submit a subscription request for a local mailing list (this is more
efficient if you have several interested parties at one site, and
highly appreciated by us!), you would do something like:
- &prompt.user; mail majordomo@FreeBSD.ORG
+ &prompt.user; mail majordomo@FreeBSD.org
subscribe freebsd-announce local-announce@somesite.com
^DFinally, it is also possible to unsubscribe yourself from a list,
get a list of other list members or see the list of mailing lists
again by sending other types of control messages to majordomo. For a
complete list of available commands, do this:
- &prompt.user; mail majordomo@FreeBSD.ORG
+ &prompt.user; mail majordomo@FreeBSD.org
help
^DAgain, we would like to request that you keep discussion in the
technical mailing lists on a technical track. If you are only
interested in the “high points” then it is suggested that
you join freebsd-announce, which is intended only for infrequent
traffic.List chartersAllFreeBSD mailing lists have certain basic
rules which must be adhered to by anyone using them. Failure to comply
with these guidelines will result in two (2) written warnings from the
FreeBSD Postmaster postmaster@FreeBSD.org, after which,
on a third offense, the poster will removed from all FreeBSD mailing
lists and filtered from further posting to them. We regret that such
rules and measures are necessary at all, but today's Internet is a
pretty harsh environment, it would seem, and many fail to appreciate
just how fragile some of its mechanisms are.Rules of the road:The topic of any posting should adhere to the basic charter of
the list it is posted to, e.g. if the list is about technical
issues then your posting should contain technical discussion.
Ongoing irrelevant chatter or flaming only detracts from the value
of the mailing list for everyone on it and will not be tolerated.
For free-form discussion on no particular topic, the freebsd-chat
freebsd-chat@FreeBSD.org mailing list is freely
available and should be used instead.No posting should be made to more than 2 mailing lists, and
only to 2 when a clear and obvious need to post to both lists
exists. For most lists, there is already a great deal of
subscriber overlap and except for the most esoteric mixes (say
"-stable & -scsi"), there really is no reason to post to more
than one list at a time. If a message is sent to you in such a
way that multiple mailing lists appear on the Cc line then the cc
line should also be trimmed before sending it out again.
You are still responsible for your
own cross-postings, no matter who the originator might have
been.Personal attacks and profanity (in the context of an argument)
are not allowed, and that includes users and developers alike.
Gross breaches of netiquette, like excerpting or reposting private
mail when permission to do so was not and would not be
forthcoming, are frowned upon but not specifically enforced.
However, there are also very few cases where
such content would fit within the charter of a list and it would
therefore probably rate a warning (or ban) on that basis
alone.Advertising of non-FreeBSD related products or services is
strictly prohibited and will result in an immediate ban if it is
clear that the offender is advertising by spam.Individual list charters:FREEBSD-AFSAndrew File SystemThis list is for discussion on porting and using AFS from
CMU/TransarcFREEBSD-ADMINAdministrative issuesThis list is purely for discussion of FreeBSD.org related issues and to
report problems or abuse of project resources. It is a closed
list, though anyone may report a problem (with our systems!) to
it.FREEBSD-ANNOUNCEImportant events / milestonesThis is the mailing list for people interested only in
occasional announcements of significant FreeBSD events. This
includes announcements about snapshots and other releases. It
contains announcements of new FreeBSD capabilities. It may
contain calls for volunteers etc. This is a low volume, strictly
moderated mailing list.FREEBSD-ARCHArchitecture and design
discussionsThis is a moderated list for discussion of FreeBSD
architecture. Messages will mostly be kept technical in nature,
with (rare) exceptions for other messages the moderator deems
need to reach all the subscribers of the list. Examples of
suitable topics;How to re-vamp the build system to have several
customized builds running at the same time.What needs to be fixed with VFS to make Heidemann layers
work.How do we change the device driver interface to be able
to use the ame drivers cleanly on many buses and
architectures?How do I write a network driver?The moderator reserves the right to do minor editing
(spell-checking, grammar correction, trimming) of messages that
are posted to the list. The volume of the list will be kept
low, which may involve having to delay topics until an active
discussion has been resolved.FREEBSD-BUGSBug reportsThis is the mailing list for reporting bugs in FreeBSD
Whenever possible, bugs should be submitted using the
&man.send-pr.1;
command or the WEB
interface to it.FREEBSD-CHATNon technical items related to the FreeBSD
communityThis list contains the overflow from the other lists about
non-technical, social information. It includes discussion about
whether Jordan looks like a toon ferret or not, whether or not
to type in capitals, who is drinking too much coffee, where the
best beer is brewed, who is brewing beer in their basement, and
so on. Occasional announcements of important events (such as
upcoming parties, weddings, births, new jobs, etc) can be made
to the technical lists, but the follow ups should be directed to
this -chat list.FREEBSD-COREFreeBSD core teamThis is an internal mailing list for use by the core
members. Messages can be sent to it when a serious
FreeBSD-related matter requires arbitration or high-level
scrutiny.FREEBSD-CURRENTDiscussions about the use of
FreeBSD-currentThis is the mailing list for users of freebsd-current. It
includes warnings about new features coming out in -current that
will affect the users, and instructions on steps that must be
taken to remain -current. Anyone running “current”
must subscribe to this list. This is a technical mailing list
for which strictly technical content is expected.FREEBSD-CURRENT-DIGESTDiscussions about the use of
FreeBSD-currentThis is the digest version of the freebsd-current mailing
list. The digest consists of all messages sent to
freebsd-current bundled together and mailed out as a single
message. The average digest size is about 40kB. This list is
Read-Only and should not be posted
to.FREEBSD-DOCDocumentation projectThis mailing list is for the discussion of issues and
projects related to the creation of documenation for FreeBSD.
The members of this mailing list are collectively referred to as
“The FreeBSD Documentation Project”. It is an open
list; feel free to join and contribute!FREEBSD-FSFilesystemsDiscussions concerning FreeBSD filesystems. This is a
technical mailing list for which strictly technical content is
expected.FREEBSD-IPFWIP FirewallThis is the forum for technical discussions concerning the
redesign of the IP firewall code in FreeBSD. This is a
technical mailing list for which strictly technical content is
expected.FREEBSD-ISDNISDN CommunicationsThis is the mailing list for people discussing the
development of ISDN support for FreeBSD.FREEBSD-JAVAJava DevelopmentThis is the mailing list for people discussing the
development of significant Java applications for FreeBSD and the
porting and maintenance of JDKs.FREEBSD-HACKERSTechnical discussionsThis is a forum for technical discussions related to
FreeBSD. This is the primary technical mailing list. It is for
individuals actively working on FreeBSD, to bring up problems or
discuss alternative solutions. Individuals interested in
following the technical discussion are also welcome. This is a
technical mailing list for which strictly technical content is
expected.FREEBSD-HACKERS-DIGESTTechnical discussionsThis is the digest version of the freebsd-hackers mailing
list. The digest consists of all messages sent to
freebsd-hackers bundled together and mailed out as a single
message. The average digest size is about 40kB. This list is
Read-Only and should not be posted
to.FREEBSD-HARDWAREGeneral discussion of FreeBSD
hardwareGeneral discussion about the types of hardware that FreeBSD
runs on, various problems and suggestions concerning what to buy
or avoid.FREEBSD-INSTALLInstallation discussionThis mailing list is for discussing FreeBSD installation
development for the future releases and is closed.FREEBSD-ISPIssues for Internet Service
ProvidersThis mailing list is for discussing topics relevant to
Internet Service Providers (ISPs) using FreeBSD. This is a
technical mailing list for which strictly technical content is
expected.FREEBSD-NEWBIESNewbies activities discussionWe cover any of the activities of newbies that are not
already dealt with elsewhere, including: independent learning
and problem solving techniques, finding and using resources and
asking for help elsewhere, how to use mailing lists and which
lists to use, general chat, making mistakes, boasting, sharing
ideas, stories, moral (but not technical) support, and taking an
active part in the FreeBSD community. We take our problems and
support questions to freebsd-questions, and use freebsd-newbies
to meet others who are doing the same things that we do as
newbies.FREEBSD-PLATFORMSPorting to Non-Intel platformsCross-platform FreeBSD issues, general discussion and
proposals for non-Intel FreeBSD ports. This is a technical
mailing list for which strictly technical content is
expected.FREEBSD-POLICYCore team policy decisionsThis is a low volume, read-only mailing list for FreeBSD
Core Team Policy decisions.FREEBSD-PORTSDiscussion of
“ports”Discussions concerning FreeBSD's “ports
collection” (/usr/ports), proposed
ports, modifications to ports collection infrastructure and
general coordination efforts. This is a technical mailing list
for which strictly technical content is expected.FREEBSD-QUESTIONSUser questionsThis is the mailing list for questions about FreeBSD. You
should not send “how to” questions to the technical
lists unless you consider the question to be pretty
technical.FREEBSD-QUESTIONS-DIGESTUser questionsThis is the digest version of the freebsd-questions mailing
list. The digest consists of all messages sent to
freebsd-questions bundled together and mailed out as a single
message. The average digest size is about 40kB.FREEBSD-SCSISCSI subsystemThis is the mailing list for people working on the scsi
subsystem for FreeBSD. This is a technical mailing list for
which strictly technical content is expected.FREEBSD-SECURITYSecurity issuesFreeBSD computer security issues (DES, Kerberos, known
security holes and fixes, etc). This is a technical mailing
list for which strictly technical content is expected.FREEBSD-SECURITY-NOTIFICATIONSSecurity Notifications
Notifications of FreeBSD security problems and fixes. This is
not a discussion list. The discussion list is
FreeBSD-security.FREEBSD-SMALLThis list discusses topics related to unusually small and
embedded FreeBSD installations. This is a technical mailing
list for which strictly technical content is expected.FREEBSD-STABLEDiscussions about the use of
FreeBSD-stableThis is the mailing list for users of freebsd-stable. It
includes warnings about new features coming out in -stable that
will affect the users, and instructions on steps that must be
taken to remain -stable. Anyone running “stable”
should subscribe to this list. This is a technical mailing list
for which strictly technical content is expected.FREEBSD-USER-GROUPSUser Group Coordination ListThis is the mailing list for the coordinators from each of
the local area Users Groups to discuss matters with each other
and a designated individual from the Core Team. This mail list
should be limited to meeting synopsis and coordination of
projects that span User Groups. It is a closed list.Usenet newsgroupsIn addition to two FreeBSD specific newsgroups, there are many
others in which FreeBSD is discussed or are otherwise relevant to
FreeBSD users. Keyword
searchable archives are available for some of these newsgroups
from courtesy of Warren Toomey wkt@cs.adfa.oz.au.BSD specific newsgroupscomp.unix.bsd.freebsd.announcecomp.unix.bsd.freebsd.miscOther Unix newsgroups of interestcomp.unixcomp.unix.questionscomp.unix.admincomp.unix.programmercomp.unix.shellcomp.unix.user-friendlycomp.security.unixcomp.sources.unixcomp.unix.advocacycomp.unix.misccomp.bugs.4bsdcomp.bugs.4bsd.ucb-fixescomp.unix.bsdX Window Systemcomp.windows.x.i386unixcomp.windows.xcomp.windows.x.appscomp.windows.x.announcecomp.windows.x.intrinsicscomp.windows.x.motifcomp.windows.x.pexcomp.emulators.ms-windows.wineWorld Wide Web servershttp://www.FreeBSD.ORG/
+ url="http://www.FreeBSD.org/">http://www.FreeBSD.org/
— Central Server.http://www.au.FreeBSD.org/FreeBSD/ — Australia/1.http://www2.au.FreeBSD.org/FreeBSD/ — Australia/2.http://www3.au.FreeBSD.org/FreeBSD/ — Australia/3.http://www.br.FreeBSD.org/www.freebsd.org/ — Brazil/1.
+ url="http://www.br.FreeBSD.org/www.FreeBSD.org/">http://www.br.FreeBSD.org/www.FreeBSD.org/ — Brazil/1.
http://www2.br.FreeBSD.org/www.freebsd.org/ — Brazil/2.
+ url="http://www2.br.FreeBSD.org/www.FreeBSD.org/">http://www2.br.FreeBSD.org/www.FreeBSD.org/ — Brazil/2.
http://www3.br.FreeBSD.org/ — Brazil/3.http://www.bg.FreeBSD.org/ — Bulgaria.http://www.ca.FreeBSD.org/ — Canada/1.http://FreeBSD.kawartha.com/ — Canada/2.http://www.dk.FreeBSD.org/ — Denmark.http://www.ee.FreeBSD.org/ — Estonia.http://www.fi.FreeBSD.org/ — Finland/1.http://www2.fi.FreeBSD.org/ — Finland/2.http://www.fr.FreeBSD.org/ — France.http://www.de.FreeBSD.org/ — Germany/1.http://www1.de.FreeBSD.org/ — Germany/2.http://www.de.FreeBSD.org/ — Germany/3.http://www.hu.FreeBSD.org/ — Hungary.http://www.is.FreeBSD.org/ — Iceland.http://www.ie.FreeBSD.org/ — Ireland.http://www.jp.FreeBSD.org/www.freebsd.org/ — Japan.
+ url="http://www.jp.FreeBSD.org/www.FreeBSD.org/">http://www.jp.FreeBSD.org/www.FreeBSD.org/ — Japan.
http://www.kr.FreeBSD.org/ — Korea.http://rama.asiapac.net/freebsd/ — Malaysia.http://www.nl.FreeBSD.org/ — Netherlands.http://www.no.FreeBSD.org/ — Norway.http://www.pt.FreeBSD.org/ — Portugal/1.http://www2.pt.FreeBSD.org/ — Portugal/2.http://www3.pt.FreeBSD.org/ — Portugal/3.http://www.ro.FreeBSD.org/ — Romania.http://www.ru.FreeBSD.org/ — Russia/1.http://www2.ru.FreeBSD.org/ — Russia/2.http://www3.ru.FreeBSD.org/ — Russia/3.http://www4.ru.FreeBSD.org/ — Russia/4.http://www.sk.FreeBSD.org/ — Slovak Republic.http://www.si.FreeBSD.org/ — Slovenia.http://www.es.FreeBSD.org/ — Spain.http://www.za.FreeBSD.org/ — South Africa/1.http://www2.za.FreeBSD.org/ — South Africa/2.http://www.se.FreeBSD.org/www.freebsd.org/ — Sweden.
+ url="http://www.se.FreeBSD.org/www.FreeBSD.org/">http://www.se.FreeBSD.org/www.FreeBSD.org/ — Sweden.
http://www.tr.FreeBSD.org/ — Turkey.http://www.ua.FreeBSD.org/ — Ukraine/1.http://www2.ua.FreeBSD.org/ — Ukraine/2.http://www.uk.FreeBSD.org/ — United Kingdom.http://freebsd.advansys.net/ — USA/Indiana.http://www6.FreeBSD.org/ — USA/Oregon.http://www2.FreeBSD.org/ — USA/Texas.Email AddressesThe following user groups provide FreeBSD related email addresses
for their members. The listed administrator reserves the right to
revoke the address if it is abused in any way.DomainFacilitiesUser GroupAdministratorukug.uk.FreeBSD.orgForwarding onlyfreebsd-users@uk.FreeBSD.orgJosef L. Karthauser
joe@uk.FreeBSD.orgShell AccountsThe following user groups provide shell accounts for people who are
actively supporting the FreeBSD project. The listed administrator
reserves the right to cancel the account if it is abused in any
way.HostAccessFacilitiesAdministratorstorm.uk.FreeBSD.orgssh onlyRead-only cvs, personal webspace, email&a.brian
diff --git a/en/handbook/handbook.sgml b/en/handbook/handbook.sgml
index 1d7be84714..3c599ca076 100644
--- a/en/handbook/handbook.sgml
+++ b/en/handbook/handbook.sgml
@@ -1,129 +1,129 @@
%man;
%bookinfo;
%chapters;
%authors;
%mailing-lists;
%newsgroups;
]>
FreeBSD HandbookThe FreeBSD Documentation ProjectFebruary 199919951996199719981999The FreeBSD Documentation Project
&bookinfo.legalnotice;
Welcome to FreeBSD! This handbook covers the installation and day
to day use of FreeBSD Release &rel.current;.
This manual is a work in progress and is the work
of many individuals. Many sections do not yet exist and some of those
that do exist need to be updated. If you are interested in helping
with this project, send email to the &a.doc;. The latest version of
this document is always available from the FreeBSD World Wide Web server.
+ URL="http://www.FreeBSD.org/">FreeBSD World Wide Web server.
It may also be downloaded in a variety of formats and compression
options from the FreeBSD FTP
+ url="ftp://ftp.FreeBSD.org/pub/FreeBSD/doc">FreeBSD FTP
server or one of the numerous mirror sites. You may also want to
- Search the
+ Search the
Handbook.Getting Started
&chap.introduction;
&chap.install;
&chap.basics;
&chap.ports
System Administration
&chap.kernelconfig;
&chap.security;
&chap.printing;
&chap.disks;
&chap.backups;
&chap.quotas;
&chap.x11;
&chap.hw;
&chap.l10n;
Network Communications
&chap.serialcomms;
&chap.ppp-and-slip;
&chap.advanced-networking;
&chap.mail;
Advanced topics
&chap.cutting-edge;
&chap.contrib;
&chap.policies;
&chap.kernelopts;
&chap.kerneldebug;
&chap.linuxemu;
&chap.internals;
Appendices
&chap.mirrors;
&chap.bibliography;
&chap.eresources;
&chap.staff;
&chap.pgpkeys;
diff --git a/en/handbook/install/chapter.sgml b/en/handbook/install/chapter.sgml
index a6df6724f4..dd4f0a4930 100644
--- a/en/handbook/install/chapter.sgml
+++ b/en/handbook/install/chapter.sgml
@@ -1,1307 +1,1307 @@
Installing FreeBSDSo, you would like to try out FreeBSD on your system? This section is
a quick-start guide for what you need to do. FreeBSD can be installed
from a variety of media including CD-ROM, floppy disk, magnetic tape, an
MS-DOS partition and, if you have a network connection, via anonymous ftp
or NFS.Regardless of the installation media you choose, you can get started
by creating the installation disks as described
below. Booting your computer into the FreeBSD installer, even if you
are not planning on installing FreeBSD right away, will provide important
information about compatibility between FreeBSD and your hardware which
may, in turn, dictate which installation options are even possible. It
can also provide early clues to any compatibility problems which could
prevent FreeBSD running on your system at all.If you plan on installing via anonymous FTP then the installation
floppies are all you need to download and create—the installation
program itself will handle any further required downloading directly
(using an ethernet connection, a modem and ppp dialip #, etc).For more information on obtaining the latest FreeBSD distributions,
please see Obtaining FreeBSD in the
Appendix.So, to get the show on the road, follow these steps:Review the supported
configurations section of this installation guide to be sure
that your hardware is supported by FreeBSD. It may be helpful to make
a list of any special cards you have installed, such as SCSI
controllers, Ethernet adapters or sound cards. This list should
include relevant configuration parameters such as interrupts (IRQ) and
IO port addresses.If you are installing FreeBSD from CDROM media then you have
several different installation options:If the CD has been mastered with El Torrito boot support and
your system supports direct booting from CDROM (and many older
systems do not), simply insert the CD into
the drive and boot directly from it.If you are running DOS and have the proper drivers to access
your CD, run the install.bat script provided on the CD. This will
attempt to boot into the FreeBSD installation straight from
DOS.You must do this from actual DOS and not a Windows DOS
box.If you also want to install FreeBSD from your DOS partition
(perhaps because your CDROM drive is completely unsupported by
FreeBSD) then run the setup program first to copy the appropriate
files from the CD to your DOS partition, afterwards running
install.If either of the two proceeding methods work then you can
simply skip the rest of this section, otherwise your final option
is to create a set of boot floppies from the
floppies\kern.flp and
floppies\mfsroot.flp images—proceed to
step 4 for instructions on how to do this.If you do not have a CDROM distribution then simply read the installation
+ url="ftp://ftp.FreeBSD.org/pub/FreeBSD/&rel.current;-RELEASE/floppies/README.TXT">installation
boot image information to find out what files you need to
download first.Make the installation boot disks from the image files:If you are using MS-DOS then download fdimage.exe
+ URL="ftp://ftp.FreeBSD.org/pub/FreeBSD/tools/fdimage.exe">fdimage.exe
or get it from tools\fdimage.exe on the CDROM
and then run it like so:E:\>tools\fdimage floppies\kern.flp a:The fdimage program will format the
A: drive and then copy the
kern.flp image onto it (assuming that you are
at the top level of a FreeBSD distribution and the floppy images
live in the floppies subdirectory, as is
typically the case).If you are using a UNIX system to create the floppy
images:&prompt.root; dd if=kern.flp of=disk_devicedisk_device is the
/dev entry for the floppy drive. On FreeBSD
systems, this is /dev/rfd0 for the
A: drive and
/dev/rfd1 for the B:
drive.With the kern.flp in the
A: drive, reboot your computer. The next
request you should get is for the mfsroot.flp
floppy, after which the installation will proceed normally.If you do not type anything at the boot
prompt which appears during this process, FreeBSD will automatically
boot with its default configuration after a delay of about five
seconds. As FreeBSD boots, it probes your computer to determine what
hardware is installed. The results of this probing is displayed on
the screen.When the booting process is finished, The main FreeBSD
installation menu will be displayed.If something goes wrong…Due to limitations of the PC architecture, it is impossible for
probing to be 100 percent reliable. In the event that your hardware is
incorrectly identified, or that the probing causes your computer to lock
up, first check the supported
configurations section of this installation guide to be sure that
your hardware is indeed supported by FreeBSD.If your hardware is supported, reset the computer and when the visual
kernel configuration choice is presented, take it. This puts FreeBSD into
a configuration mode where you can supply hints about your hardware. The
FreeBSD kernel on the installation disk is configured assuming that most
hardware devices are in their factory default configuration in terms of
IRQs, IO addresses and DMA channels. If your hardware has been
reconfigured, you will most likely need to use the configuration editor to
tell FreeBSD where things are.It is also possible that a probe for a device not present will cause a
later probe for another device that is present to fail. In that case, the
probes for the conflicting driver(s) should be disabled.Do not disable any device you will need during installation, such as
your screen (sc0). If the installation wedges
or fails mysteriously after leaving the configuration editor, you have
probably removed or changed something that you should not have. Simply
reboot and try again.In the configuration mode, you can:List the device drivers installed in the kernel.Disable device drivers for hardware not present in your
system.Change the IRQ, DRQ, and IO port addresses used by a device
driver.After adjusting the kernel to match how you have your hardware
configured, type Q to continue booting with the new
settings.After FreeBSD has been installed, changes made in the configuration
mode will be permanent so you do not have to reconfigure every time you
boot. Even so, it is likely that you will want to build a custom kernel
to optimize the performance of your system. See Kernel configuration for more information
on creating custom kernels.Supported ConfigurationsFreeBSD currently runs on a wide variety of ISA, VLB, EISA and PCI
bus based PC's, ranging from 386sx to Pentium class machines (though the
386sx is not recommended). Support for generic IDE or ESDI drive
configurations, various SCSI controller, network and serial cards is
also provided.A minimum of four megabytes of RAM is required to run FreeBSD. To
run the X Window System, eight megabytes of RAM is the recommended
minimum.Following is a list of all disk controllers and Ethernet cards
currently known to work with FreeBSD. Other configurations may very
well work, and we have simply not received any indication of
this.Disk ControllersWD1003 (any generic MFM/RLL)WD1007 (any generic IDE/ESDI)IDEATAAdaptec 1535 ISA SCSI controllersAdaptec 154x series ISA SCSI controllersAdaptec 174x series EISA SCSI controller in standard and
enhanced mode.Adaptec 274X/284X/2920C/2930U2/294x/2950/3940/3950
(Narrow/Wide/Twin) series EISA/VLB/PCI SCSI controllers.Adaptec AIC7850, AIC7860, AIC7880, AIC789x, on-board SCSI
controllers.AdvanSys SCSI controllers (all models).BusLogic MultiMaster controllers:BusLogic/Mylex "Flashpoint" adapters are NOT yet
supported.BusLogic MultiMaster "W" Series Host Adapters:BT-948BT-958BT-958DBusLogic MultiMaster "C" Series Host Adapters:BT-946CBT-956CBT-956CDBT-445CBT-747CBT-757CBT-757CDBT-545CBT-540CFBusLogic MultiMaster "S" Series Host Adapters:BT-445SBT-747SBT-747DBT-757SBT-757DBT-545SBT-542DBT-742ABT-542BBusLogic MultiMaster "A" Series Host Adapters:BT-742ABT-542BAMI FastDisk controllers that are true BusLogic
MultiMaster clones are also supported.DPT SmartCACHE Plus, SmartCACHE III, SmartRAID III, SmartCACHE
IV and SmartRAID IV SCSI/RAID controllers are supported. The DPT
SmartRAID/CACHE V is not yet supported.Compaq Intelligent Disk Array Controllers: IDA, IDA-2, IAES,
SMART, SMART-2/E, Smart-2/P, SMART-2SL, Smart Array 3200,
Smart Array 3100ES and Smart Array 221.SymBios (formerly NCR) 53C810, 53C810a, 53C815, 53C820,
53C825a, 53C860, 53C875, 53C875j, 53C885, 53C895 and 53C896 PCI
SCSI controllers:ASUS SC-200Data Technology DTC3130 (all variants)Diamond FirePort (all)NCR cards (all)Symbios cards (all)Tekram DC390W, 390U and 390FTyan S1365QLogic 1020, 1040, 1040B, 1080, 1240 and 2100 SCSI and Fibre
Channel AdaptersDTC 3290 EISA SCSI controller in 1542 emulation mode.With all supported SCSI controllers, full support is provided for
SCSI-I & SCSI-II peripherals, including hard disks, optical disks,
tape drives (including DAT and 8mm Exabyte), medium changers,
processor target devices and CDROM drives. WORM devices that support
CDROM commands are supported for read-only access by the CDROM driver.
WORM/CD-R/CD-RW writing support is provided by cdrecord, which is in
the ports tree.The following CD-ROM type systems are supported at this
time:SoundBlaster SCSI and ProAudio Spectrum SCSI
(cd)Mitsumi (all models) proprietary interface
(mcd)Matsushita/Panasonic (Creative) CR-562/CR-563 proprietary
interface (matcd)Sony proprietary interface (scd)ATAPI IDE interface (wcd)The following drivers were supported under the old SCSI subsystem,
but are NOT YET supported under the new CAM SCSI subsystem:Tekram DC390 and DC390T controllers (maybe other cards based
on the AMD 53c974 as well).NCR5380/NCR53400 ("ProAudio Spectrum") SCSI controller.UltraStor 14F, 24F and 34F SCSI controllers.Seagate ST01/02 SCSI controllers.Future Domain 8xx/950 series SCSI controllers.WD7000 SCSI controller.Adaptec 1510 series ISA SCSI controllers (not for bootable
devices)Adaptec 152x series ISA SCSI controllersAdaptec AIC-6260 and AIC-6360 based boards, which includes the
AHA-152x and SoundBlaster SCSI cards.Ethernet cardsAllied-Telesis AT1700 and RE2000 cardsSMC Elite 16 WD8013 Ethernet interface, and most other
WD8003E, WD8003EBT, WD8003W, WD8013W, WD8003S, WD8003SBT and
WD8013EBT based clones. SMC Elite Ultra and 9432TX based cards
are also supported.DEC EtherWORKS III NICs (DE203, DE204, and DE205)DEC EtherWORKS II NICs (DE200, DE201, DE202, and DE422)DEC DC21040/DC21041/DC21140 based NICs:ASUS PCI-L101-TBAccton ENI1203Cogent EM960PCICompex CPXPCI/32CD-Link DE-530DEC DE435DEC DE450Danpex EN-9400P3JCIS Condor JC1260Kingston KNE100TXLinksys EtherPCIMylex LNP101SMC EtherPower 10/100 (Model 9332)SMC EtherPower (Model 8432)SMC EtherPower (2)Zynx ZX314Zynx ZX342DEC FDDI (DEFPA/DEFEA) NICsFujitsu FMV-181 and FMV-182Fujitsu MB86960A/MB86965AIntel EtherExpressIntel EtherExpress Pro/100B 100Mbit.Isolan AT 4141-0 (16 bit)Isolink 4110 (8 bit)Lucent WaveLAN wireless networking interface.Novell NE1000, NE2000, and NE2100 ethernet interface.3Com 3C501 cards3Com 3C503 Etherlink II3Com 3c505 Etherlink/+3Com 3C507 Etherlink 16/TP3Com 3C509, 3C579, 3C589 (PCMCIA) Etherlink III3Com 3C590, 3C595 Etherlink III3Com 3C90x cards.HP PC Lan Plus (27247B and 27252A)Toshiba ethernet cardsPCMCIA ethernet cards from IBM and National Semiconductor are
also supported.FreeBSD does not currently support PnP (plug-n-play) features
present on some ethernet cards. If your card has PnP and is giving
you problems, try disabling its PnP features.Miscellaneous devicesAST 4 port serial card using shared IRQ.ARNET 8 port serial card using shared IRQ.BOCA IOAT66 6 port serial card using shared IRQ.BOCA 2016 16 port serial card using shared IRQ.Cyclades Cyclom-y Serial Board.STB 4 port card using shared IRQ.SDL Communications Riscom/8 Serial Board.SDL Communications RISCom/N2 and N2pci sync serial
cards.Digiboard Sync/570i high-speed sync serial card.Decision-Computer Intl. “Eight-Serial” 8 port
serial cards using shared IRQ.Adlib, SoundBlaster, SoundBlaster Pro, ProAudioSpectrum,
Gravis UltraSound, Gravis UltraSound MAX and Roland MPU-401 sound
cards.Matrox Meteor video frame grabber.Creative Labs Video spigot frame grabber.Omnimedia Talisman frame grabber.Brooktree BT848 chip based frame grabbers.X-10 power controllers.PC joystick and speaker.FreeBSD does not currently support IBM's microchannel (MCA)
bus.Preparing for the InstallationThere are a number of different methods by which FreeBSD can be
installed. The following describes what preparation needs to be done
for each type.Before installing from CDROMIf your CDROM is of an unsupported type, then please skip to MS-DOS Preparation.There is not a lot of preparatory work that needs to be done to
successfully install from one of Walnut Creek's FreeBSD CDROMs (other
CDROM distributions may work as well, though we cannot say for certain
as we have no hand or say in how they are created). You can either
boot into the CD installation directly from DOS using Walnut Creek's
supplied install.bat batch file or you can make
boot floppies with the makeflp.bat command.For the easiest interface of all (from DOS), type
view. This will bring up a DOS menu utility that
leads you through all the available options.If you are creating the boot floppies from a UNIX machine, see
the beginning of this guide for
examples of how to create the boot floppies.Once you have booted from DOS or floppy, you should then be able
to select CDROM as the media type in the Media menu and load the
entire distribution from CDROM. No other types of installation media
should be required.After your system is fully installed and you have rebooted from
the hard disk, you can mount the CDROM at any time by typing:
mount /cdromBefore removing the CD again, also note that it is necessary to
first type: umount /cdrom. Do not just remove it
from the drive!Before invoking the installation, be sure that the CDROM is in
the drive so that the install probe can find it. This is also true
if you wish the CDROM to be added to the default system
configuration automatically during the install (whether or not you
actually use it as the installation media).Finally, if you would like people to be able to FTP install
FreeBSD directly from the CDROM in your machine, you will find it
quite easy. After the machine is fully installed, you simply need to
add the following line to the password file (using the vipw
command):
ftp:*:99:99::0:0:FTP:/cdrom:/nonexistentAnyone with network connectivity to your machine (and permission
to log into it) can now chose a Media type of FTP and type in:
ftp://your machine
after picking “Other” in the ftp sites menu.Before installing from FloppyIf you must install from floppy disks, either due to unsupported
hardware or simply because you enjoy doing things the hard way, you
must first prepare some floppies for the install.You will need, at minimum, as many 1.44MB or 1.2MB floppies as it
takes to hold all files in the bin (binary distribution) directory.
If you are preparing these floppies under DOS, then THESE floppies
must be formatted using the MS-DOS FORMAT
command. If you are using Windows, use the Windows File Manager
format command.Do not trust Factory Preformatted floppies!
Format them again yourself, just to make sure. Many problems reported
by our users in the past have resulted from the use of improperly
formatted media, which is why I am taking such special care to mention
it here!If you are creating the floppies from another FreeBSD machine, a
format is still not a bad idea though you do not need to put a DOS
filesystem on each floppy. You can use the
disklabel and newfs commands to
put a UFS filesystem on them instead, as the following sequence of
commands (for a 3.5" 1.44MB floppy disk) illustrates:&prompt.root; fdformat -f 1440 fd0.1440
&prompt.root; disklabel -w -r fd0.1440 floppy3
&prompt.root; newfs -t 2 -u 18 -l 1 -i 65536 /dev/rfd0Use fd0.1200 and floppy5
for 5.25" 1.2MB disks.Then you can mount and write to them like any other file
system.After you have formatted the floppies, you will need to copy the
files onto them. The distribution files are split into chunks
conveniently sized so that 5 of them will fit on a conventional 1.44MB
floppy. Go through all your floppies, packing as many files as will
fit on each one, until you have got all the distributions you want
packed up in this fashion. Each distribution should go into a
subdirectory on the floppy, e.g.: a:\bin\bin.aa,
a:\bin\bin.ab, and so on.Once you come to the Media screen of the install, select
“Floppy” and you will be prompted for the rest.Before installing from a MS-DOS partitionTo prepare for installation from an MS-DOS partition, copy the
files from the distribution into a directory called
c:\freebsd. The directory tree structure of the
CDROM must be partially reproduced within this directory so we suggest
using the DOS xcopy command. For example, to
prepare for a minimal installation of FreeBSD:C:\>md c:\freebsdC:\>xcopy /s e:\bin c:\freebsd\bin\C:\>xcopy /s e:\manpages c:\freebsd\manpages\Assuming that C: is where you have free
space and E: is where your CDROM is
mounted.For as many DISTS you wish to install from MS-DOS
(and you have free space for), install each one under
c:\freebsd — the BIN dist
is only the minimal requirement.Before installing from QIC/SCSI TapeInstalling from tape is probably the easiest method, short of an
on-line install using FTP or a CDROM install. The installation
program expects the files to be simply tar'ed onto the tape, so after
getting all of the files for distribution you are interested in,
simply tar them onto the tape with a command like:&prompt.root; cd /freebsd/distdir
&prompt.root; tar cvf /dev/rwt0 dist1 ... dist2When you go to do the installation, you should also make sure that
you leave enough room in some temporary directory (which you will be
allowed to choose) to accommodate the full
contents of the tape you have created. Due to the non-random access
nature of tapes, this method of installation requires quite a bit of
temporary storage. You should expect to require as much temporary
storage as you have stuff written on tape.When going to do the installation, the tape must be in the drive
before booting from the boot floppy. The
installation probe may otherwise fail to find it.Before installing over a networkYou can do network installations over 3 types of communications
links:Serial portSLIP or PPPParallel portPLIP (laplink cable)EthernetA standard ethernet controller (includes some
PCMCIA).SLIP support is rather primitive, and limited primarily to
hard-wired links, such as a serial cable running between a laptop
computer and another computer. The link should be hard-wired as the
SLIP installation does not currently offer a dialing capability; that
facility is provided with the PPP utility, which should be used in
preference to SLIP whenever possible.If you are using a modem, then PPP is almost certainly your only
choice. Make sure that you have your service provider's information
handy as you will need to know it fairly soon in the installation
process. You will need to know how to dial your ISP using the
“AT commands” specific to your modem, as the PPP dialer
provides only a very simple terminal emulator. If you are using PAP or
CHAP, you will need to type the necessary set
authname and set authkey commands
before typing term. Refer to the user-ppp handbook and FAQ entries for further
information. If you have problems, logging can be directed to the
screen using the command set log local ....If a hard-wired connection to another FreeBSD (2.0R or later)
machine is available, you might also consider installing over a
“laplink” parallel port cable. The data rate over the
parallel port is much higher than what is typically possible over a
serial line (up to 50k/sec), thus resulting in a quicker
installation.Finally, for the fastest possible network installation, an
ethernet adaptor is always a good choice! FreeBSD supports most common
PC ethernet cards, a table of supported cards (and their required
settings) is provided in Supported
Hardware. If you are using one of the supported PCMCIA
ethernet cards, also be sure that it is plugged in
before the laptop is powered on! FreeBSD does
not, unfortunately, currently support hot insertion of PCMCIA cards
during installation.You will also need to know your IP address on the network, the
netmask value for your address class, and the name of your machine.
Your system administrator can tell you which values to use for your
particular network setup. If you will be referring to other hosts by
name rather than IP address, you will also need a name server and
possibly the address of a gateway (if you are using PPP, it is your
provider's IP address) to use in talking to it. If you do not know
the answers to all or most of these questions, then you should really
probably talk to your system administrator first
before trying this type of installation.Once you have a network link of some sort working, the
installation can continue over NFS or FTP.Preparing for NFS installationNFS installation is fairly straight-forward: Simply copy the
FreeBSD distribution files you want onto a server somewhere and then
point the NFS media selection at it.If this server supports only “privileged port”
access (as is generally the default for Sun workstations), you will
need to set this option in the Options menu before installation can
proceed.If you have a poor quality ethernet card which suffers from very
slow transfer rates, you may also wish to toggle the appropriate
Options flag.In order for NFS installation to work, the server must support
subdir mounts, e.g., if your FreeBSD &rel.current; distribution
directory lives on:
ziggy:/usr/archive/stuff/FreeBSD Then
ziggy will have to allow the direct mounting of
/usr/archive/stuff/FreeBSD, not just
/usr or
/usr/archive/stuff.In FreeBSD's /etc/exports file, this is
controlled by the option. Other NFS
servers may have different conventions. If you are getting
Permission Denied messages from the server
then it is likely that you do not have this enabled properly.Preparing for FTP InstallationFTP installation may be done from any mirror site containing a
reasonably up-to-date version of FreeBSD &rel.current;. A full menu
of reasonable choices from almost anywhere in the world is provided
by the FTP site menu.If you are installing from some other FTP site not listed in
this menu, or you are having troubles getting your name server
configured properly, you can also specify your own URL by selecting
the “Other” choice in that menu. A URL can also be a
direct IP address, so the following would work in the absence of a
name server:ftp://165.113.121.81/pub/FreeBSD/&rel.current;-RELEASEThere are two FTP installation modes you can use:FTP ActiveFor all FTP transfers, use “Active” mode.
This will not work through firewalls, but will often work with
older ftp servers that do not support passive mode. If your
connection hangs with passive mode (the default), try
active!FTP PassiveFor all FTP transfers, use “Passive” mode.
This allows the user to pass through firewalls that do not
allow incoming connections on random port addresses.Active and passive modes are not the same as a
“proxy” connection, where a proxy FTP server is
listening and forwarding FTP requests!For a proxy FTP server, you should usually give name of the
server you really want as a part of the username, after an @-sign.
The proxy server then 'fakes' the real server. An example: Say you
want to install from ftp.FreeBSD.org,
using the proxy FTP server foo.bar.com,
listening on port 1234.In this case, you go to the options menu, set the FTP username
to ftp@ftp.FreeBSD.org, and the password to your e-mail address. As
your installation media, you specify FTP (or passive FTP, if the
proxy support it), and the URL
ftp://foo.bar.com:1234/pub/FreeBSD /pub/FreeBSD from ftp.FreeBSD.org is proxied under foo.bar.com, allowing you to install from
that machine (which fetch the files from
ftp.FreeBSD.org as your installation
requests them).Installing FreeBSDOnce you have taken note of the appropriate preinstallation steps,
you should be able to install FreeBSD without any further
trouble.Should this not be true, then you may wish to go back and re-read
the relevant preparation section above for the installation media type
you are trying to use, perhaps there is a helpful hint there that you
missed the first time? If you are having hardware trouble, or FreeBSD
refuses to boot at all, read the Hardware Guide provided on the boot
floppy for a list of possible solutions.The FreeBSD boot floppies contain all the on-line documentation you
should need to be able to navigate through an installation and if it
does not then we would like to know what you found most confusing. Send
your comments to the &a.doc;. It is the objective of the FreeBSD
installation program (sysinstall) to be self-documenting enough that
painful “step-by-step” guides are no longer necessary. It
may take us a little while to reach that objective, but that is the
objective!Meanwhile, you may also find the following “typical
installation sequence” to be helpful:Boot the kern.flp floppy and, when asked,
remove it and insert the mfsroot.flp floppy and
hit return. After a boot sequence which can take anywhere from 30
seconds to 3 minutes, depending on your hardware, you should be
presented with a menu of initial choices. If the
kern.flp floppy does not boot at all, or the
boot hangs at some stage, go read the Q&A section of the
Hardware Guide for possible causes.Press F1. You should see some basic usage instructions on the
menu system and general navigation. If you have not used this menu
system before then please read this
thoroughly!Select the Options item and set any special preferences you may
have.Select a Novice, Custom or Express install, depending on whether
or not you would like the installation to help you through a typical
installation, give you a high degree of control over each step of
the installation or simply whizz through it (using reasonable
defaults when possible) as fast as possible. If you have never used
FreeBSD before then the Novice installation method is most
recommended.The final configuration menu choice allows you to further
configure your FreeBSD installation by giving you menu-driven access
to various system defaults. Some items, like networking, may be
especially important if you did a CDROM/Tape/Floppy installation and
have not yet configured your network interfaces (assuming you have
any). Properly configuring such interfaces here will allow FreeBSD
to come up on the network when you first reboot from the hard
disk.MS-DOS User's Questions and AnswersMany FreeBSD users wish to install FreeBSD on PCs inhabited by
MS-DOS. Here are some commonly asked questions about installing FreeBSD
on such systems.Help! I have no space! Do I need to delete everything
first?If your machine is already running MS-DOS and has little or no free
space available for FreeBSD's installation, all is not lost! You may
find the FIPS utility, provided in the tools
directory on the FreeBSD CDROM or on the various FreeBSD ftp sites, to
be quite useful.FIPS allows you to split an existing MS-DOS partition into two
pieces, preserving the original partition and allowing you to install
onto the second free piece. You first defragment your MS-DOS partition,
using the DOS 6.xx DEFRAG utility or the Norton Disk tools, then run
FIPS. It will prompt you for the rest of the information it needs.
Afterwards, you can reboot and install FreeBSD on the new free slice.
See the Distributions menu for an estimation of how
much free space you will need for the kind of installation you
want.Can I use compressed MS-DOS filesystems from
FreeBSD?No. If you are using a utility such as Stacker(tm) or
DoubleSpace(tm), FreeBSD will only be able to use whatever portion of
the filesystem you leave uncompressed. The rest of the filesystem will
show up as one large file (the stacked/dblspaced file!). Do
not remove that file! You will probably regret it
greatly!It is probably better to create another uncompressed MS-DOS primary
partition and use this for communications between MS-DOS and
FreeBSD.Can I mount my MS-DOS extended
partitions?Yes. DOS extended partitions are mapped in at the end of the other
“slices” in FreeBSD, e.g. your D:
drive might be /dev/da0s5, your
E: drive /dev/da0s6, and
so on. This example assumes, of course, that your extended partition is
on SCSI drive 0. For IDE drives, substitute wd for
da appropriately. You otherwise mount extended
partitions exactly like you would mount any other DOS drive,
e.g.:&prompt.root; mount -t msdos /dev/da0s5 /dos_d
diff --git a/en/handbook/mail/chapter.sgml b/en/handbook/mail/chapter.sgml
index b23aeb0078..8c7df7d362 100644
--- a/en/handbook/mail/chapter.sgml
+++ b/en/handbook/mail/chapter.sgml
@@ -1,567 +1,567 @@
Electronic MailContributed by &a.wlloyd;.Electronic Mail configuration is the subject of many System Administration books. If you plan
on doing anything beyond setting up one mailhost for your network, you
need industrial strength help.Some parts of E-Mail configuration are controlled in the Domain Name
System (DNS). If you are going to run your own own DNS server check out
/etc/namedb and man -k named for
more information.Basic InformationThese are the major programs involved in an E-Mail exchange. A
“mailhost” is a server that is responsible for delivering
and receiving all email for your host, and possibly your network.User programThis is a program like elm,
pine, mail, or
something more sophisticated like a WWW browser. This program will
simply pass off all e-mail transactions to the local
“mailhost” , either by calling sendmail
or delivering it over TCP.Mailhost Server DaemonUsually this program is sendmail or
smail running in the background. Turn it off or
change the command line options in /etc/rc.conf
(or, prior to FreeBSD 2.2.2, /etc/sysconfig). It
is best to leave it on, unless you have a specific reason to want it
off. Example: You are building a Firewall.You should be aware that sendmail is a
potential weak link in a secure site. Some versions of
sendmail have known security problems.sendmail does two jobs. It looks after
delivering and receiving mail.If sendmail needs to deliver mail off your site
it will look up in the DNS to determine the actual host that will
receive mail for the destination.If it is acting as a delivery agent sendmail
will take the message from the local queue and deliver it across the
Internet to another sendmail on the receivers computer.DNS — Name ServiceThe Domain Name System and its daemon named,
contain the database mapping hostname to IP address, and hostname to
mailhost. The IP address is specified in an A record. The MX record
specifies the mailhost that will receive mail for you. If you do not
have a MX record mail for your hostname, the mail will be delivered to
your host directly.Unless you are running your own DNS server, you will not be able
to change any information in the DNS yourself. If you are using an
Internet Provider, speak to them.POP ServersThis program gets the mail from your mailbox and gives it to your
browser. If you want to run a POP server on your computer, you will
need to do 2 things.Get pop software from the Ports collection that can be
found in /usr/ports or packages collection.
This handbook section has a complete reference on the Ports system.Modify /etc/inetd.conf to load the POP
server.The pop program will have instructions with it. Read them.ConfigurationBasicAs your FreeBSD system comes “out of the box”[TM], you
should be able to send E-mail to external hosts as long as you have
/etc/resolv.conf setup or are running a name
server. If you want to have mail for your host delivered to your
specific host,there are two methods:Run a name server (man -k named) and have
your own domain smallminingco.com
Get mail delivered to the current DNS name for your host. Ie:
dorm6.ahouse.school.edu No matter what option you choose, to have mail delivered directly
to your host, you must be a full Internet host. You must have a
permanent IP address. IE: NO dynamic PPP. If you are behind a
firewall, the firewall must be passing on smtp traffic to you. From
/etc/services:
smtp 25/tcp mail #Simple Mail TransferIf you want to receive mail at your host itself, you must make
sure that the DNS MX entry points to your host address, or there is no
MX entry for your DNS name.Try this:&prompt.root; hostname
-newbsdbox.freebsd.org
-&prompt.root; host newbsdbox.freebsd.org
-newbsdbox.freebsd.org has address 204.216.27.xx
+newbsdbox.FreeBSD.org
+&prompt.root; host newbsdbox.FreeBSD.org
+newbsdbox.FreeBSD.org has address 204.216.27.xx
If that is all that comes out for your machine, mail directory to
- root@newbsdbox.freebsd.org will work no
+ root@newbsdbox.FreeBSD.org will work no
problems.If instead, you have this:
- &prompt.root; host newbsdbox.freebsd.org
+ &prompt.root; host newbsdbox.FreeBSD.org
newbsdbox.FreeBSD.org has address 204.216.27.xx
newbsdbox.FreeBSD.org mail is handled (pri=10) by freefall.FreeBSD.orgAll mail sent to your host directly will end up on
freefall, under the same username.This information is setup in your domain name server. This should
be the same host that is listed as your primary nameserver in
/etc/resolv.confThe DNS record that carries mail routing information is the Mail
eXchange entry. If no MX entry exists, mail will be delivered directly
to the host by way of the Address record.The MX entry for freefall.FreeBSD.org
at one time.
freefall MX 30 mail.crl.net
freefall MX 40 agora.rdrop.com
freefall HINFO Pentium FreeBSD
freefall MX 10 freefall.FreeBSD.org
freefall MX 20 who.cdrom.com
freefall A 204.216.27.xx
freefall CNAME www.FreeBSD.orgfreefall has many MX entries. The lowest MX
number gets the mail in the end. The others will queue mail
temporarily, if freefall is busy or down.Alternate MX sites should have separate connections to the
Internet, to be most useful. An Internet Provider or other friendly
site can provide this service.dig, nslookup, and
host are your friends.Mail for your Domain (Network).To setup up a network mailhost, you need to direct the mail from
arriving at all the workstations. In other words, you want to hijack
all mail for *.smallminingco.com
and divert it to one machine, your “mailhost”.The network users on their workstations will most likely pick up
their mail over POP or telnet.A user account with the same username should
exist on both machines. Please use adduser to do
this as required. If you set the shell to
/nonexistent the user will not be allowed to
login.The mailhost that you will be using must be designated the
Mail eXchange for each workstation. This must be arranged in DNS (ie
BIND, named). Please refer to a Networking book for in-depth
information.You basically need to add these lines in your DNS server.
pc24.smallminingco.com A xxx.xxx.xxx.xxx ; Workstation ip
MX 10 smtp.smallminingco.com ; Your mailhostYou cannot do this yourself unless you are running a DNS server.
If you do not want to run a DNS server, get somebody else like your
Internet Provider to do it.This will redirect mail for the workstation to the Mail eXchange
host. It does not matter what machine the A record points to, the mail
will be sent to the MX host.This feature is used to implement Virtual E-Mail Hosting.ExampleI have a customer with domain foo.bar and I want all mail for
foo.bar to be sent to my machine smtp.smalliap.com. You must make an
entry in your DNS server like:
foo.bar MX 10 smtp.smalliap.com ; your mailhostThe A record is not needed if you only want E-Mail for the domain.
IE: Don't expect ping foo.bar to work unless an
Address record for foo.bar exists as well.On the mailhost that actually accepts mail for final delivery to a
mailbox, sendmail must be told what hosts it will
be accepting mail for.Add pc24.smallminingco.com to
/etc/sendmail.cw (if you are using
FEATURE(use_cw_file)), or add a Cw
myhost.smalliap.com line to
/etc/sendmail.cfIf you plan on doing anything serious with
sendmail you should install the
sendmail source. The source has plenty of
documentation with it. You will find information on getting
sendmail source from the UUCP information.Setting up UUCP.Stolen from the FAQ.The sendmail configuration that ships with FreeBSD is suited for
sites that connect directly to the Internet. Sites that wish to
exchange their mail via UUCP must install another
sendmail configuration file.Tweaking /etc/sendmail.cf manually is
considered something for purists. Sendmail version 8 comes with a new
approach of generating config files via some m4
preprocessing, where the actual hand-crafted configuration is on a
higher abstraction level. You should use the configuration files under
/usr/src/usr.sbin/sendmail/cf.If you did not install your system with full sources, the
sendmail config stuff has been broken out into a
separate source distribution tarball just for you. Assuming you have
your CD-ROM mounted, do:&prompt.root; cd /usr/src
&prompt.root; tar -xvzf /cdrom/dists/src/ssmailcf.aaDo not panic, this is only a few hundred kilobytes in size. The
file README in the cf
directory can serve as a basic introduction to m4
configuration.For UUCP delivery, you are best advised to use the
mailertable feature. This constitutes a database
that sendmail can use to base its routing decision
upon.First, you have to create your .mc file. The
directory /usr/src/usr.sbin/sendmail/cf/cf is the
home of these files. Look around, there are already a few examples.
Assuming you have named your file foo.mc, all you
need to do in order to convert it into a valid
sendmail.cf is:&prompt.root; cd /usr/src/usr.sbin/sendmail/cf/cf
&prompt.root; make foo.cfIf you don't have a /usr/obj hiearchy,
then:&prompt.root; cp foo.cf /etc/sendmail.cfOtherwise:&prompt.root; cp /usr/obj/`pwd`/foo.cf /etc/sendmail.cfA typical .mc file might look like:
include(`../m4/cf.m4')
VERSIONID(`Your version number')
OSTYPE(bsd4.4)
FEATURE(nodns)
FEATURE(nocanonify)
FEATURE(mailertable)
define(`UUCP_RELAY', your.uucp.relay)
define(`UUCP_MAX_SIZE', 200000)
MAILER(local)
MAILER(smtp)
MAILER(uucp)
Cw your.alias.host.name
Cw youruucpnodename.UUCPThe nodns and nocanonify
features will prevent any usage of the DNS during mail delivery. The
UUCP_RELAY clause is needed for bizarre reasons, do
not ask. Simply put an Internet hostname there that is able to handle
.UUCP pseudo-domain addresses; most likely, you will enter the mail
relay of your ISP there.Once you have this, you need this file called
/etc/mailertable. A typical example of this
gender again:
#
# makemap hash /etc/mailertable.db < /etc/mailertable
#
horus.interface-business.de uucp-dom:horus
.interface-business.de uucp-dom:if-bus
interface-business.de uucp-dom:if-bus
.heep.sax.de smtp8:%1 horus.UUCP
uucp-dom:horus if-bus.UUCP
uucp-dom:if-bus . uucp-dom:saxAs you can see, this is part of a real-life file. The first three
lines handle special cases where domain-addressed mail should not be
sent out to the default route, but instead to some UUCP neighbor in
order to “shortcut” the delivery path. The next line
handles mail to the local Ethernet domain that can be delivered using
SMTP. Finally, the UUCP neighbors are mentioned in the .UUCP
pseudo-domain notation, to allow for a
uucp-neighbor!recipient override of the default
rules. The last line is always a single dot, matching everything else,
with UUCP delivery to a UUCP neighbor that serves as your universal
mail gateway to the world. All of the node names behind the
uucp-dom: keyword must be valid UUCP neighbors, as
you can verify using the command uuname.As a reminder that this file needs to be converted into a DBM
database file before being usable, the command line to accomplish this
is best placed as a comment at the top of the
mailertable. You always have to execute this
command each time you change your
mailertable.Final hint: if you are uncertain whether some particular mail
routing would work, remember the option to
sendmail. It starts sendmail in
“address test mode”; simply enter 0,
followed by the address you wish to test for the mail routing. The
last line tells you the used internal mail agent, the destination host
this agent will be called with, and the (possibly translated) address.
Leave this mode by typing Control-D.&prompt.user; sendmail -bt
ADDRESS TEST MODE (ruleset 3 NOT automatically invoked)
Enter <ruleset> <address>
>0 foo@interface-business.de
rewrite: ruleset 0 input: foo @ interface-business . de
…
rewrite: ruleset 0 returns: $# uucp-dom $@ if-bus $: foo < @ interface-business . deFAQMigration from FAQ.Why do I have to use the FQDN for hosts on my site?You will probably find that the host is actually in a different
domain; for example, if you are in foo.bar.edu and you wish to reach a host called
mumble in the bar.edu domain, you will have to refer to
it by the fully-qualified domain name, mumble.bar.edu, instead of just
mumble.Traditionally, this was allowed by BSD BIND resolvers. However the
current version of BIND that ships with
FreeBSD no longer provides default abbreviations for non-fully
qualified domain names other than the domain you are in. So an
unqualified host mumble must either be found as
mumble.foo.bar.edu, or it will be
searched for in the root domain.This is different from the previous behavior, where the search
continued across mumble.bar.edu,
and mumble.edu. Have a look at RFC
1535 for why this was considered bad practice, or even a security
hole.As a good workaround, you can place the line
search foo.bar.edu bar.edu
instead of the previous
domain foo.bar.edu
into your /etc/resolv.conf. However, make sure
that the search order does not go beyond the “boundary between
local and public administration”, as RFC 1535 calls it.Sendmail says mail loops back to
myselfThis is answered in the sendmail FAQ as follows:
* I am getting "Local configuration error" messages, such as:
553 relay.domain.net config error: mail loops back to myself
554 <user@domain.net>... Local configuration error
How can I solve this problem?
You have asked mail to the domain (e.g., domain.net) to be
forwarded to a specific host (in this case, relay.domain.net)
by using an MX record, but the relay machine does not recognize
itself as domain.net. Add domain.net to /etc/sendmail.cw
(if you are using FEATURE(use_cw_file)) or add "Cw domain.net"
to /etc/sendmail.cf.The sendmail FAQ is in
/usr/src/usr.sbin/sendmail and is recommended
reading if you want to do any “tweaking” of your mail
setup.How can I do E-Mail with a dialup PPP host?You want to connect a FreeBSD box on a lan, to the Internet. The
FreeBSD box will be a mail gateway for the lan. The PPP connection is
non-dedicated.There are at least two way to do this.The other is to use UUCP.The key is to get a Internet site to provide secondary MX services
for your domain. For example:
bigco.com. MX 10 bigco.com.
MX 20 smalliap.com.Only one host should be specified as the final recipient ( add
Cw bigco.com in
/etc/sendmail.cf on bigco.com).When the senders sendmail is trying to deliver
the mail it will try to connect to you over the modem link. It will
most likely time out because you are not online.
sendmail will automatically deliver it to the
secondary MX site, ie your Internet provider. The secondary MX site
will try every (sendmail_flags = "-bd -q15m" in
/etc/rc.conf ) 15 minutes to connect to your host
to deliver the mail to the primary MX site.You might want to use something like this as a login
script.
#!/bin/sh
# Put me in /usr/local/bin/pppbigco
( sleep 60 ; /usr/sbin/sendmail -q ) &
/usr/sbin/ppp -direct pppbigcoIf you are going to create a separate login script for a user you
could use sendmail -qRbigco.com instead in the
script above. This will force all mail in your queue for bigco.com to
be processed immediately.A further refinement of the situation is as follows.Message stolen from the freebsd-isp mailing list.
> we provide the secondary mx for a customer. The customer connects to
> our services several times a day automatically to get the mails to
> his primary mx (We do not call his site when a mail for his domains
> arrived). Our sendmail sends the mailqueue every 30 minutes. At the
> moment he has to stay 30 minutes online to be sure that all mail is
> gone to the primary mx.
>
> Is there a command that would initiate sendmail to send all the mails
> now? The user has not root-privileges on our machine of course.
In the 'privacy flags' section of sendmail.cf, there is a definition
Opgoaway,restrictqrun
Remove restrictqrun to allow non-root users to start the queue processing.
You might also like to rearrange the MXs. We are the 1st MX for our
customers like this, and we have defined:
# If we are the best MX for a host, try directly instead of generating
# local config error.
OwTrue
That way a remote site will deliver straight to you, without trying
the customer connection. You then send to your customer. Only works for
"hosts", so you need to get your customer to name their mail machine
"customer.com" as well as "hostname.customer.com" in the DNS. Just put
an A record in the DNS for "customer.com".
diff --git a/en/handbook/mailing-lists.ent b/en/handbook/mailing-lists.ent
index 3e9e85fe41..4a59f66dfe 100644
--- a/en/handbook/mailing-lists.ent
+++ b/en/handbook/mailing-lists.ent
@@ -1,104 +1,104 @@
freebsd-advocacy@FreeBSD.ORG">
+ freebsd-advocacy@FreeBSD.org">
freebsd-announce@FreeBSD.ORG">
+ freebsd-announce@FreeBSD.org">
freebsd-bugs@FreeBSD.ORG">
+ freebsd-bugs@FreeBSD.org">
freebsd-chat@FreeBSD.ORG">
+ freebsd-chat@FreeBSD.org">
freebsd-core@FreeBSD.ORG">
+ freebsd-core@FreeBSD.org">
freebsd-current@FreeBSD.ORG">
+ freebsd-current@FreeBSD.org">
cvs-all@FreeBSD.ORG">
+ cvs-all@FreeBSD.org">
freebsd-database@FreeBSD.ORG">
+ freebsd-database@FreeBSD.org">
freebsd-doc@FreeBSD.ORG">
+ freebsd-doc@FreeBSD.org">
freebsd-emulation@FreeBSD.ORG">
+ freebsd-emulation@FreeBSD.org">
freebsd-fs@FreeBSD.ORG">
+ freebsd-fs@FreeBSD.org">
freebsd-hackers@FreeBSD.ORG">
+ freebsd-hackers@FreeBSD.org">
freebsd-hardware@FreeBSD.ORG">
+ freebsd-hardware@FreeBSD.org">
freebsd-isdn@FreeBSD.ORG">
+ freebsd-isdn@FreeBSD.org">
freebsd-isp@FreeBSD.ORG">
+ freebsd-isp@FreeBSD.org">
freebsd-java@FreeBSD.ORG">
+ freebsd-java@FreeBSD.org">
freebsd-jobs@FreeBSD.ORG">
+ freebsd-jobs@FreeBSD.org">
freebsd-mobile@FreeBSD.ORG">
+ freebsd-mobile@FreeBSD.org">
freebsd-mozilla@FreeBSD.ORG">
+ freebsd-mozilla@FreeBSD.org">
freebsd-multimedia@FreeBSD.ORG">
+ freebsd-multimedia@FreeBSD.org">
freebsd-net@FreeBSD.ORG">
+ freebsd-net@FreeBSD.org">
freebsd-newbies@FreeBSD.ORG">
+ freebsd-newbies@FreeBSD.org">
new-bus-arch@bostonradio.org">
freebsd-ports@FreeBSD.ORG">
+ freebsd-ports@FreeBSD.org">
freebsd-questions@FreeBSD.ORG">
+ freebsd-questions@FreeBSD.org">
freebsd-scsi@FreeBSD.ORG">
+ freebsd-scsi@FreeBSD.org">
freebsd-security@FreeBSD.ORG">
+ freebsd-security@FreeBSD.org">
freebsd-security-notifications@FreeBSD.ORG">
+ freebsd-security-notifications@FreeBSD.org">
freebsd-small@FreeBSD.ORG">
+ freebsd-small@FreeBSD.org">
freebsd-smp@FreeBSD.ORG">
+ freebsd-smp@FreeBSD.org">
freebsd-stable@FreeBSD.ORG">
+ freebsd-stable@FreeBSD.org">
freebsd-tokenring@FreeBSD.ORG">
+ freebsd-tokenring@FreeBSD.org">
-majordomo@FreeBSD.ORG">
+majordomo@FreeBSD.org">
diff --git a/en/handbook/mirrors/chapter.sgml b/en/handbook/mirrors/chapter.sgml
index 0952b0819d..9c5cba7e52 100644
--- a/en/handbook/mirrors/chapter.sgml
+++ b/en/handbook/mirrors/chapter.sgml
@@ -1,1457 +1,1457 @@
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,
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/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/FreeBSDEstoniaIn 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)Canadacvsup.ca.FreeBSD.org (maintainer
dan@jaded.net)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)
+ 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/handbook/pgpkeys/chapter.sgml b/en/handbook/pgpkeys/chapter.sgml
index 984b27dd97..53e2f8a6d6 100644
--- a/en/handbook/pgpkeys/chapter.sgml
+++ b/en/handbook/pgpkeys/chapter.sgml
@@ -1,624 +1,624 @@
PGP keysIn case you need to verify a signature or send encrypted email to one
of the officers or core team members a number of keys are provided here
for your convenience.OfficersFreeBSD Security Officer
security-officer@FreeBSD.org
-FreeBSD Security Officer <security-officer@freebsd.org>
+FreeBSD Security Officer <security-officer@FreeBSD.org>
Fingerprint = 41 08 4E BB DB 41 60 71 F9 E5 0E 98 73 AF 3F 11
-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: 2.6.3i
mQCNAzF7MY4AAAEEAK7qBgPuBejER5HQbQlsOldk3ZVWXlRj54raz3IbuAUrDrQL
h3g57T9QY++f3Mot2LAf5lDJbsMfWrtwPrPwCCFRYQd6XH778a+l4ju5axyjrt/L
Ciw9RrOC+WaPv3lIdLuqYge2QRC1LvKACIPNbIcgbnLeRGLovFUuHi5z0oilAAUR
tDdGcmVlQlNEIFNlY3VyaXR5IE9mZmljZXIgPHNlY3VyaXR5LW9mZmljZXJAZnJl
ZWJzZC5vcmc+iQCVAwUQMX6yrOJgpPLZnQjrAQHyowQA1Nv2AY8vJIrdp2ttV6RU
tZBYnI7gTO3sFC2bhIHsCvfVU3JphfqWQ7AnTXcD2yPjGcchUfc/EcL1tSlqW4y7
PMP4GHZp9vHog1NAsgLC9Y1P/1cOeuhZ0pDpZZ5zxTo6TQcCBjQA6KhiBFP4TJql
3olFfPBh3B/Tu3dqmEbSWpuJAJUDBRAxez3C9RVb+45ULV0BAak8A/9JIG/jRJaz
QbKom6wMw852C/Z0qBLJy7KdN30099zMjQYeC9PnlkZ0USjQ4TSpC8UerYv6IfhV
nNY6gyF2Hx4CbEFlopnfA1c4yxtXKti1kSN6wBy/ki3SmqtfDhPQ4Q31p63cSe5A
3aoHcjvWuqPLpW4ba2uHVKGP3g7SSt6AOYkAlQMFEDF8mz0ff6kIA1j8vQEBmZcD
/REaUPDRx6qr1XRQlMs6pfgNKEwnKmcUzQLCvKBnYYGmD5ydPLxCPSFnPcPthaUb
5zVgMTjfjS2fkEiRrua4duGRgqN4xY7VRAsIQeMSITBOZeBZZf2oa9Ntidr5PumS
9uQ9bvdfWMpsemk2MaRG9BSoy5Wvy8VxROYYUwpT8Cf2iQCVAwUQMXsyqWtaZ42B
sqd5AQHKjAQAvolI30Nyu3IyTfNeCb/DvOe9tlOn/o+VUDNJiE/PuBe1s2Y94a/P
BfcohpKC2kza3NiW6lLTp00OWQsuu0QAPc02vYOyseZWy4y3Phnw60pWzLcFdemT
0GiYS5Xm1o9nAhPFciybn9j1q8UadIlIq0wbqWgdInBT8YI/l4f5sf6JAJUDBRAx
ezKXVS4eLnPSiKUBAc5OBACIXTlKqQC3B53qt7bNMV46m81fuw1PhKaJEI033mCD
ovzyEFFQeOyRXeu25Jg9Bq0Sn37ynISucHSmt2tUD5W0+p1MUGyTqnfqejMUWBzO
v4Xhp6a8RtDdUMBOTtro16iulGiRrCKxzVgEl4i+9Z0ZiE6BWlg5AetoF5n3mGk1
lw==
=ipyA
-----END PGP PUBLIC KEY BLOCK-----&a.imp;
Warner Losh <imp@village.org>
- aka <imp@freebsd.org>
+ aka <imp@FreeBSD.org>
Fingerprint = D4 31 FD B9 F7 90 17 E8 37 C5 E7 7F CF A6 C1 B9
-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: 2.6.2
mQCNAzDzTiAAAAEEAK8D7KWEbVFUrmlqhUEnAvphNIqHEbqqT8s+c5f5c2uHtlcH
V4mV2TlUaDSVBN4+/D70oHmZc4IgiQwMPCWRrSezg9z/MaKlWhaslc8YT6Xc1q+o
EP/fAdKUrq49H0QQbkQk6Ks5wKW6v9AOvdmsS6ZJEcet6d9G4dxynu/2qPVhAAUR
tCBNLiBXYXJuZXIgTG9zaCA8aW1wQHZpbGxhZ2Uub3JnPokAlQMFEDM/SK1VLh4u
c9KIpQEBFPsD/1n0YuuUPvD4CismZ9bx9M84y5sxLolgFEfP9Ux196ZSeaPpkA0g
C9YX/IyIy5VHh3372SDWN5iVSDYPwtCmZziwIV2YxzPtZw0nUu82P/Fn8ynlCSWB
5povLZmgrWijTJdnUWI0ApVBUTQoiW5MyrNN51H3HLWXGoXMgQFZXKWYiQCVAwUQ
MzmhkfUVW/uOVC1dAQG3+AP/T1HL/5EYF0ij0yQmNTzt1cLt0b1e3N3zN/wPFFWs
BfrQ+nsv1zw7cEgxLtktk73wBGM9jUIdJu8phgLtl5a0m9UjBq5oxrJaNJr6UTxN
a+sFkapTLT1g84UFUO/+8qRB12v+hZr2WeXMYjHAFUT18mp3xwjW9DUV+2fW1Wag
YDKJAJUDBRAzOYK1s1pi61mfMj0BARBbA/930CHswOF0HIr+4YYUs1ejDnZ2J3zn
icTZhl9uAfEQq++Xor1x476j67Z9fESxyHltUxCmwxsJ1uOJRwzjyEoMlyFrIN4C
dE0C8g8BF+sRTt7VLURLERvlBvFrVZueXSnXvmMoWFnqpSpt3EmN6TNaLe8Cm87a
k6EvQy0dpnkPKokAlQMFEDD9Lorccp7v9qj1YQEBrRUD/3N4cCMWjzsIFp2Vh9y+
RzUrblyF84tJyA7Rr1p+A7dxf7je3Zx5QMEXosWL1WGnS5vC9YH2WZwv6sCU61gU
rSy9z8KHlBEHh+Z6fdRMrjd9byPf+n3cktT0NhS23oXB1ZhNZcB2KKhVPlNctMqO
3gTYx+Nlo6xqjR+J2NnBYU8p
=7fQV
-----END PGP PUBLIC KEY BLOCK-----Core Team members&a.asami;
Satoshi Asami <asami@cs.berkeley.edu>
- aka <asami@FreeBSD.ORG>
+ aka <asami@FreeBSD.org>
Fingerprint = EB 3C 68 9E FB 6C EB 3F DB 2E 0F 10 8F CE 79 CA
-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: 2.6.2
mQCNAzPVyoQAAAEEAL7W+kipxB171Z4SVyyL9skaA7hG3eRsSOWk7lfvfUBLtPog
f3OKwrApoc/jwLf4+Qpdzv5DLEt/6Hd/clskhJ+q1gMNHyZ5ABmUxrTRRNvJMTrb
3fPU3oZj7sL/MyiFaT1zF8EaMP/iS2ZtcFsbYOqGeA8E/58uk4NA0SoeCNiJAAUR
tCVTYXRvc2hpIEFzYW1pIDxhc2FtaUBjcy5iZXJrZWxleS5lZHU+iQCVAwUQM/AT
+EqGN2HYnOMZAQF11QP/eSXb2FuTb1yX5yoo1Im8YnIk1SEgCGbyEbOMMBznVNDy
5g2TAD0ofLxPxy5Vodjg8rf+lfMVtO5amUH6aNcORXRncE83T10JmeM6JEp0T6jw
zOHKz8jRzygYLBayGsNIJ4BGxa4LeaGxJpO1ZEvRlNkPH/YEXK5oQmq9/DlrtYOJ
AEUDBRAz42JT8ng6GBbVvu0BAU8nAYCsJ8PiJpRUGlrz6rxjX8hqM1v3vqFHLcG+
G52nVMBSy+RZBgzsYIPwI5EZtWAKb22JAJUDBRAz4QBWdbtuOHaj97EBAaQPA/46
+NLUp+Wubl90JoonoXocwAg88tvAUVSzsxPXj0lvypAiSI2AJKsmn+5PuQ+/IoQy
lywRsxiQ5GD7C72SZ1yw2WI9DWFeAi+qa4b8n9fcLYrnHpyCY+zxEpu4pam8FJ7H
JocEUZz5HRoKKOLHErzXDiuTkkm72b1glmCqAQvnB4kAlQMFEDPZ3gyDQNEqHgjY
iQEBFfUEALu2C0uo+1Z7C5+xshWRYY5xNCzK20O6bANVJ+CO2fih96KhwsMof3lw
fDso5HJSwgFd8WT/sR+Wwzz6BAE5UtgsQq5GcsdYQuGI1yIlCYUpDp5sgswNm+OA
bX5a+r4F/ZJqrqT1J56Mer0VVsNfe5nIRsjd/rnFAFVfjcQtaQmjiQCVAwUQM9uV
mcdm8Q+/vPRJAQELHgP9GqNiMpLQlZig17fDnCJ73P0e5t/hRLFehZDlmEI2TK7j
Yeqbw078nZgyyuljZ7YsbstRIsWVCxobX5eH1kX+hIxuUqCAkCsWUY4abG89kHJr
XGQn6X1CX7xbZ+b6b9jLK+bJKFcLSfyqR3M2eCyscSiZYkWKQ5l3FYvbUzkeb6K0
IVNhdG9zaGkgQXNhbWkgPGFzYW1pQEZyZWVCU0QuT1JHPg==
=39SC
-----END PGP PUBLIC KEY BLOCK-----&a.jmb;
Jonathan M. Bresler <jmb@FreeBSD.org>
f16 Fingerprint16 = 31 57 41 56 06 C1 40 13 C5 1C E3 E5 DC 62 0E FB
-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: PGPfreeware 5.0i for non-commercial use
mQCNAzG2GToAAAEEANI6+4SJAAgBpl53XcfEr1M9wZyBqC0tzpie7Zm4vhv3hO8s
o5BizSbcJheQimQiZAY4OnlrCpPxijMFSaihshs/VMAz1qbisUYAMqwGEO/T4QIB
nWNo0Q/qOniLMxUrxS1RpeW5vbghErHBKUX9GVhxbiVfbwc4wAHbXdKX5jjdAAUR
tCVKb25hdGhhbiBNLiBCcmVzbGVyIDxqbWJARnJlZUJTRC5PUkc+iQCVAwUQNbtI
gAHbXdKX5jjdAQHamQP+OQr10QRknamIPmuHmFYJZ0jU9XPIvTTMuOiUYLcXlTdn
GyTUuzhbEywgtOldW2V5iA8platXThtqC68NsnN/xQfHA5xmFXVbayNKn8H5stDY
2s/4+CZ06mmJfqYmONF1RCbUk/M84rVT3Gn2tydsxFh4Pm32lf4WREZWRiLqmw+J
AJUDBRA0DfF99RVb+45ULV0BAcZ0BACCydiSUG1VR0a5DBcHdtin2iZMPsJUPRqJ
tWvP6VeI8OFpNWQ4LW6ETAvn35HxV2kCcQMyht1kMD+KEJz7r8Vb94TS7KtZnNvk
2D1XUx8Locj6xel5c/Lnzlnnp7Bp1XbJj2u/NzCaZQ0eYBdP/k7RLYBYHQQln5x7
BOuiRJNVU4kAlQMFEDQLcShVLh4uc9KIpQEBJv4D/3mDrD0MM9EYOVuyXik3UGVI
8quYNA9ErVcLdt10NjYc16VI2HOnYVgPRag3Wt7W8wlXShpokfC/vCNt7f5JgRf8
h2a1/MjQxtlD+4/Js8k7GLa53oLon6YQYk32IEKexoLPwIRO4L2BHWa3GzHJJSP2
aTR/Ep90/pLdAOu/oJDUiQCVAwUQMqyL0LNaYutZnzI9AQF25QP9GFXhBrz2tiWz
2+0gWbpcGNnyZbfsVjF6ojGDdmsjJMyWCGw49XR/vPKYIJY9EYo4t49GIajRkISQ
NNiIz22fBAjT2uY9YlvnTJ9NJleMfHr4dybo7oEKYMWWijQzGjqf2m8wf9OaaofE
KwBX6nxcRbKsxm/BVLKczGYl3XtjkcuJAJUDBRA1ol5TZWCprDT5+dUBATzXA/9h
/ZUuhoRKTWViaistGJfWi26FB/Km5nDQBr/Erw3XksQCMwTLyEugg6dahQ1u9Y5E
5tKPxbB69eF+7JXVHE/z3zizR6VL3sdRx74TPacPsdhZRjChEQc0htLLYAPkJrFP
VAzAlSlm7qd+MXf8fJovQs6xPtZJXukQukPNlhqZ94kAPwMFEDSH/kF4tXKgazlt
bxECfk4AoO+VaFVfguUkWX10pPSSfvPyPKqiAJ4xn8RSIe1ttmnqkkDMhLh00mKj
lLQuSm9uYXRoYW4gTS4gQnJlc2xlciA8Sm9uYXRoYW4uQnJlc2xlckBVU2kubmV0
PokAlQMFEDXbdSkB213Sl+Y43QEBV/4D/RLJNTrtAqJ1ATxXWv9g8Cr3/YF0GTmx
5dIrJOpBup7eSSmiM/BL9Is4YMsoVbXCI/8TqA67TMICvq35PZU4wboQB8DqBAr+
gQ8578M7Ekw1OAF6JXY6AF2P8k7hMcVBcVOACELPT/NyPNByG5QRDoNmlsokJaWU
/2ls4QSBZZlb
=zbCw
-----END PGP PUBLIC KEY BLOCK-----&a.ache;
Andrey A. Chernov <ache@FreeBSD.org>
aka <ache@nagual.pp.ru>
Key fingerprint = 33 03 9F 48 33 7B 4A 15 63 48 88 0A C4 97 FD 49
-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: 2.6.3ia
mQCNAiqUMGQAAAEEAPGhcD6A2Buey5LYz0sphDLpVgOZc/bb9UHAbaGKUAGXmafs
Dcb2HnsuYGgX/zrQXuCi/wIGtXcZWB97APtKOhFsZnPinDR5n/dde/mw9FnuhwqD
m+rKSL1HlN0z/Msa5y7g16760wHhSR6NoBSEG5wQAHIMMq7Q0uJgpPLZnQjrAAUT
tCVBbmRyZXkgQS4gQ2hlcm5vdiA8YWNoZUBuYWd1YWwucHAucnU+iQCVAwUQM2Ez
u+JgpPLZnQjrAQEyugP8DPnS8ixJ5OeuYgPFQf5sy6l+LrB6hyaS+lgsUPahWjNY
cnaDmfda/q/BV5d4+y5rlQe/pjnYG7/yQuAR3jhlXz8XDrqlBOnW9AtYjDt5rMfJ
aGFTGXAPGZ6k6zQZE0/YurT8ia3qjvuZm3Fw4NJrHRx7ETHRvVJDvxA6Ggsvmr20
JEFuZHJleSBBLiBDaGVybm92IDxhY2hlQEZyZWVCU0Qub3JnPokAlQMFEDR5uVbi
YKTy2Z0I6wEBLgED/2mn+hw4/3peLx0Sb9LNx//NfCCkVefSf2G9Qwhx6dvwbX7h
mFca97h7BQN4GubU1Z5Ffs6TeamSBrotBYGmOCwvJ6S9WigF9YHQIQ3B4LEjskAt
pcjU583y42zM11kkvEuQU2Gde61daIylJyOxsgpjSWpkxq50fgY2kLMfgl/ftCZB
bmRyZXkgQS4gQ2hlcm5vdiA8YWNoZUBuaWV0enNjaGUubmV0PokAlQMFEDR5svDi
YKTy2Z0I6wEBOTQD/0OTCAXIjuak363mjERvzSkVsNtIH9hA1l0w6Z95+iH0fHrW
xXKT0vBZE0y0Em+S3cotLL0bMmVE3F3D3GyxhBVmgzjyx0NYNoiQjYdi+6g/PV30
Cn4vOO6hBBpSyI6vY6qGNqcsawuRtHNvK/53MpOfKwSlICEBYQimcZhkci+EtCJB
bmRyZXkgQS4gQ2hlcm5vdiA8YWNoZUBuYWd1YWwucnU+iQCVAwUQMcm5HeJgpPLZ
nQjrAQHwvQP9GdmAf1gdcuayHEgNkc11macPH11cwWjYjzA2YoecFMGV7iqKK8QY
rr1MjbGXf8DAG8Ubfm0QbI8Lj8iG3NgqIru0c72UuHGSn/APfGGG0AtPX5UK/k7B
gI0Ca2po6NA5nrSp8tDsdEz/4gyea84RXl2prtTf5Jj07hflbRstGXK0MkFuZHJl
eSBBLiBDaGVybm92LCBCbGFjayBNYWdlIDxhY2hlQGFzdHJhbC5tc2suc3U+iQCV
AwUQMCsAo5/rGryoL8h3AQHq1QQAidyNFqA9hvrmMcjpY7csJVFlGvj574Wj4GPa
o3pZeuQaMBmsWqaXLYnWU/Aldb6kTz6+nRcQX50zFH0THSPfApwEW7yybSTI5apJ
mWT3qhKN2vmLNg2yNzhqLTzHLD1lH3i1pfQq8WevrNfjLUco5S/VuekTma/osnzC
Cw7fQzCJAJUDBRAwKvwoa1pnjYGyp3kBARihBACoXr3qfG65hFCyKJISmjOvaoGr
anxUIkeDS0yQdTHzhQ+dwB1OhhK15E0Nwr0MKajLMm90n6+Zdb5y/FIjpPriu8dI
rlHrWZlewa88eEDM+Q/NxT1iYg+HaKDAE171jmLpSpCL0MiJtO0i36L3ekVD7Hv8
vffOZHPSHirIzJOZTYkAlQMFEDAau6zFLUdtDb+QbQEBQX8D/AxwkYeFaYxZYMFO
DHIvSk23hAsjCmUA2Uil1FeWAusb+o8xRfPDc7TnosrIifJqbF5+fcHCG5VSTGlh
Bhd18YWUeabf/h9O2BsQX55yWRuB2x3diJ1xI/VVdG+rxlMCmE4ZR1Tl9x+Mtun9
KqKVpB39VlkCBYQ3hlgNt/TJUY4riQCVAwUQMBHMmyJRltlmbQBRAQFQkwP/YC3a
hs3ZMMoriOlt3ZxGNUUPTF7rIER3j+c7mqGG46dEnDB5sUrkzacpoLX5sj1tGR3b
vz9a4vmk1Av3KFNNvrZZ3/BZFGpq3mCTiAC9zsyNYQ8L0AfGIUO5goCIjqwOTNQI
AOpNsJ5S+nMAkQB4YmmNlI6GTb3D18zfhPZ6uciJAJUCBRAwD0sl4uW74fteFRkB
AWsAA/9NYqBRBKbmltQDpyK4+jBAYjkXBJmARFXKJYTlnTgOHMpZqoVyW96xnaa5
MzxEiu7ZWm5oL10QDIp1krkBP2KcmvfSMMHb5aGCCQc2/P8NlfXAuHtNGzYiI0UA
Iwi8ih/S1liVfvnqF9uV3d3koE7VsQ9OA4Qo0ZL2ggW+/gEaYIkAlQMFEDAOz6qx
/IyHe3rl4QEBIvYD/jIr8Xqo/2I5gncghSeFR01n0vELFIvaF4cHofGzyzBpYsfA
+6pgFI1IM+LUF3kbUkAY/2uSf9U5ECcaMCTWCwVgJVO+oG075SHEM4buhrzutZiM
1dTyTaepaPpTyRMUUx9ZMMYJs7sbqLId1eDwrJxUPhrBNvf/w2W2sYHSY8cdiQCV
AwUQMAzqgHcdkq6JcsfBAQGTxwQAtgeLFi2rhSOdllpDXUwz+SS6bEjFTWgRsWFM
y9QnOcqryw7LyuFmWein4jasjY033JsODfWQPiPVNA3UEnXVg9+n8AvNMPO8JkRv
Cn1eNg0VaJy9J368uArio93agd2Yf/R5r+QEuPjIssVk8hdcy/luEhSiXWf6bLMV
HEA0J+OJAJUDBRAwDUi+4mCk8tmdCOsBAatBBACHB+qtW880seRCDZLjl/bT1b14
5po60U7u6a3PEBkY0NA72tWDQuRPF/Cn/0+VdFNxQUsgkrbwaJWOoi0KQsvlOm3R
rsxKbn9uvEKLxExyKH3pxp76kvz/lEWwEeKvBK+84Pb1lzpG3W7u2XDfi3VQPTi3
5SZMAHc6C0Ct/mjNlYkAlQMFEDAMrPD7wj+NsTMUOQEBJckD/ik4WsZzm2qOx9Fw
erGq7Zwchc+Jq1YeN5PxpzqSf4AG7+7dFIn+oe6X2FcIzgbYY+IfmgJIHEVjDHH5
+uAXyb6l4iKc89eQawO3t88pfHLJWbTzmnvgz2cMrxt94HRvgkHfvcpGEgbyldq6
EB33OunazFcfZFRIcXk1sfyLDvYE
=1ahV
-----END PGP PUBLIC KEY BLOCK-----&a.jkh;
Jordan K. Hubbard <jkh@FreeBSD.org>
Fingerprint = 3C F2 27 7E 4A 6C 09 0A 4B C9 47 CD 4F 4D 0B 20
-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: 2.6.3ia
mQCNAzFjX0IAAAEEAML+nm9/kDNPp43ZUZGjYkm2QLtoC1Wxr8JulZXqk7qmhYcQ
jvX+fyoriJ6/7ZlnLe2oG5j9tZOnRLPvMaz0g9CpW6Dz3nkXrNPkmOFV9B8D94Mk
tyFeRJFqnkCuqBj6D+H8FtBwEeeTecSh2tJ0bZZTXnAMhxeOdvUVW/uOVC1dAAUR
tCNKb3JkYW4gSy4gSHViYmFyZCA8amtoQEZyZWVCU0Qub3JnPokBFQMFEDXCTXQM
j46yp4IfPQEBwO8IAIN0J09AXBf86dFUTFGcAMrEQqOF5IL+KGorAjzuYxERhKfD
ZV7jA+sCQqxkWfcVcE20kVyVYqzZIkio9a5zXP6TwA247JkPt54S1PmMDYHNlRIY
laXlNoji+4q3HP2DfHqXRT2859rYpm/fG/v6pWkos5voPKcZ2OFEp9W+Ap88oqw+
5rx4VetZNJq1Epmis4INj6XqNqj85+MOOIYE+f445ohDM6B/Mxazd6cHFGGIR+az
VjZ6lCDMLjzhB5+FqfrDLYuMjqkMTR5z9DL+psUvPlCkYbQ11NEWtEmiIWjUcNJN
GCxGzv5bXk0XPu3ADwbPkFE2usW1cSM7AQFiwuyJAJUDBRAxe+Q9a1pnjYGyp3kB
AV7XA/oCSL/Cc2USpQ2ckwkGpyvIkYBPszIcabSNJAzm2hsU9Qa6WOPxD8olDddB
uJNiW/gznPC4NsQ0N8Zr4IqRX/TTDVf04WhLmd8AN9SOrVv2q0BKgU6fLuk979tJ
utrewH6PR2qBOjAaR0FJNk4pcYAHeT+e7KaKy96YFvWKIyDvc4kAlQMFEDF8ldof
f6kIA1j8vQEBDH4D/0Zm0oNlpXrAE1EOFrmp43HURHbij8n0Gra1w9sbfo4PV+/H
U8ojTdWLy6r0+prH7NODCkgtIQNpqLuqM8PF2pPtUJj9HwTmSqfaT/LMztfPA6PQ
csyT7xxdXl0+4xTDl1avGSJfYsI8XCAy85cTs+PQwuyzugE/iykJO1Bnj/paiQCV
AwUQMXvlBvUVW/uOVC1dAQF2fQP/RfYC6RrpFTZHjo2qsUHSRk0vmsYfwG5NHP5y
oQBMsaQJeSckN4n2JOgR4T75U4vS62aFxgPLJP3lOHkU2Vc7xhAuBvsbGr5RP8c5
LvPOeUEyz6ZArp1KUHrtcM2iK1FBOmY4dOYphWyWMkDgYExabqlrAq7FKZftpq/C
BiMRuaw=
=C/Jw
-----END PGP PUBLIC KEY BLOCK-----&a.phk;
Poul-Henning Kamp <phk@FreeBSD.org>
Fingerprint = A3 F3 88 28 2F 9B 99 A2 49 F4 E2 FA 5A 78 8B 3E
-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: 2.6.3ia
mQCNAzAdpMIAAAEEALHDgrFUwhZtb7PbXg3upELoDVEUPFRwnmpJH1rRqyROUGcI
ooVe7u+FQlIs5OsXK8ECs/5Wpe2UrZSzHvjwBYOND5H42YtI5UULZLRCo5bFfTVA
K9Rpo5icfTsYihrzU2nmnycwFMk+jYXyT/ZDYWDP/BM9iLjj0x9/qQgDWPy9AAUR
tCNQb3VsLUhlbm5pbmcgS2FtcCA8cGhrQEZyZWVCU0Qub3JnPokAlQMFEDQQ0aZ1
u244dqP3sQEBu4ID/jXFFeJgs2MdTDNOZM/FbfDhI4qxAbYUsqS3+Ra16yd8Wd/A
jV+IHJE2NomFWl8UrUjCGinXiwzPgK1OfFJrS9Og1wQLvAl0X84BA8MTP9BQr4w7
6I/RbksgUSrVCIO8MJwlydjSPocWGBeXlVjbZxXzyuJk7H+TG+zuI5BuBcNIiQCV
AwUQMwYr2rNaYutZnzI9AQHiIQP/XxtBWFXaBRgVLEhRNpS07YdU+LsZGlLOZehN
9L4UnJFHQQPNOpMey2gF7Y95aBOw5/1xS5vlQpwmRFCntWsm/gqdzK6rulfr1r5A
y94LO5TAC6ucNu396Y4vo1TyD1STnRC466KlvmtQtAtFGgXlORWLL9URLzcRFd1h
D0yXd9aJAJUDBRAxfo19a1pnjYGyp3kBAQqyA/4v64vP3l1F0Sadn6ias761hkz/
SMdTuLzILmofSCC4o4KWMjiWJHs2Soo41QlZi1+xMHzV32JKiwFlGtPHqL+EHyXy
Q4H3vmf9/1KF+0XCaMtgI0wWUMziPSTJK8xXbRRmMDK/0F4TnVVaUhnmf+h5K7O6
XdmejDTa0X/NWcicmIkAlQMFEDF8lef1FVv7jlQtXQEBcnwD/0ro1PpUtlkLmreD
tsGTkNa7MFLegrYRvDDrHOwPZH152W2jPUncY+eArQJakeHiTDmJNpFagLZglhE0
bqJyca+UwCXX+6upAclWHEBMg2byiWMMqyPVEEnpUoHM1sIkgdNWlfQAmipRBfYh
2LyCgWvR8CbtwPYIFvUmGgB3MR87iQCVAwUQMUseXB9/qQgDWPy9AQGPkwP/WEDy
El2Gkvua9COtMAifot2vTwuvWWpNopIEx0Ivey4aVbRLD90gGCJw8OGDEtqFPcNV
8aIiy3fYVKXGZZjvCKd7zRfhNmQn0eLDcymq2OX3aPrMc2rRlkT4Jx425ukR1gsO
qiQAgw91aWhY8dlw/EKzk8ojm52x4VgXaBACMjaJAJUDBRAxOUOg72G56RHVjtUB
AbL4A/9HOn5Qa0lq9tKI/HkSdc5fGQD/66VdCBAb292RbB7CS/EM07MdbcqRRYIa
0+0gwQ3OdsWPdCVgH5RIhp/WiC+UPkR1cY8N9Mg2kTwJfZZfNqN+BgWlgRMPN27C
OhYNl8Q33Nl9CpBLrZWABF44jPeT0EvvTzP/5ZQ7T75EsYKYiYkAlQMFEDDmryQA
8tkJ67sbQQEBPdsEALCj6v1OBuJLLJTlxmmrkqAZPVzt5QdeO3Eqa2tcPWcU0nqP
vHYMzZcZ7oFg58NZsWrhSQQDIB5e+K65Q/h6dC7W/aDskZd64jxtEznX2kt0/MOr
8OdsDis1K2f9KQftrAx81KmVwW4Tqtzl7NWTDXt44fMOtibCwVq8v2DFkTJy
=JKbP
-----END PGP PUBLIC KEY BLOCK-----&a.rich;
Rich Murphey <rich@FreeBSD.org>
fingerprint = AF A0 60 C4 84 D6 0C 73 D1 EF C0 E9 9D 21 DB E4
-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: 2.6.2
mQCNAy97V+MAAAEEALiNM3FCwm3qrCe81E20UOSlNclOWfZHNAyOyj1ahHeINvo1
FBF2Gd5Lbj0y8SLMno5yJ6P4F4r+x3jwHZrzAIwMs/lxDXRtB0VeVWnlj6a3Rezs
wbfaTeSVyh5JohEcKdoYiMG5wjATOwK/NAwIPthB1RzRjnEeer3HI3ZYNEOpAAUR
tCRSaWNoIE11cnBoZXkgPHJpY2hAbGFtcHJleS51dG1iLmVkdT6JAJUDBRAve15W
vccjdlg0Q6kBAZTZBACcNd/LiVnMFURPrO4pVRn1sVQeokVX7izeWQ7siE31Iy7g
Sb97WRLEYDi686osaGfsuKNA87Rm+q5F+jxeUV4w4szoqp60gGvCbD0KCB2hWraP
/2s2qdVAxhfcoTin/Qp1ZWvXxFF7imGA/IjYIfB42VkaRYu6BwLEm3YAGfGcSw==
=QoiM
-----END PGP PUBLIC KEY BLOCK-----&a.jdp;
John D. Polstra <jdp@polstra.com>
Fingerprint = 54 3A 90 59 6B A4 9D 61 BF 1D 03 09 35 8D F6 0D
-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: 2.6.2
mQCNAzMElMEAAAEEALizp6ZW9QifQgWoFmG3cXhzQ1+Gt+a4S1adC/TdHdBvw1M/
I6Ok7TC0dKF8blW3VRgeHo4F3XhGn+n9MqIdboh4HJC5Iiy63m98sVLJSwyGO4oM
dkEGyyCLxqP6h/DU/tzNBdqFzetGtYvU4ftt3RO0a506cr2CHcdm8Q+/vPRJAAUR
tCFKb2huIEQuIFBvbHN0cmEgPGpkcEBwb2xzdHJhLmNvbT6JAJUDBRAzBNBE9RVb
+45ULV0BAWgiA/0WWO3+c3qlptPCHJ3DFm6gG/qNKsY94agL/mHOr0fxMP5l2qKX
O6a1bWkvGoYq0EwoKGFfn0QeHiCl6jVi3CdBX+W7bObMcoi+foqZ6zluOWBC1Jdk
WQ5/DeqQGYXqbYjqO8voCScTAPge3XlMwVpMZTv24u+nYxtLkE0ZcwtY9IkAlQMF
EDMEt/DHZvEPv7z0SQEBXh8D/2egM5ckIRpGz9kcFTDClgdWWtlgwC1iI2p9gEhq
aufy+FUJlZS4GSQLWB0BlrTmDC9HuyQ+KZqKFRbVZLyzkH7WFs4zDmwQryLV5wkN
C4BRRBXZfWy8s4+zT2WQD1aPO+ZsgRauYLkJgTvXTPU2JCN62Nsd8R7bJS5tuHEm
7HGmiQCVAwUQMwSvHB9/qQgDWPy9AQFAhAQAgJ1AlbKITrEoJ0+pLIsov3eQ348m
SVHEBGIkU3Xznjr8NzT9aYtq4TIzt8jplqP3QoV1ka1yYpZf0NjvfZ+ffYp/sIaU
wPbEpgtmHnVWJAebMbNs/Ad1w8GDvxEt9IaCbMJGZnHmfnEqOBIxF7VBDPHHoJxM
V31K/PIoYsHAy5w=
=cHFa
-----END PGP PUBLIC KEY BLOCK-----&a.guido;
Guido van Rooij <guido@gvr.win.tue.nl>
Fingerprint = 16 79 09 F3 C0 E4 28 A7 32 62 FA F6 60 31 C0 ED
-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: 2.6.2
mQCNAzGeO84AAAEEAKKAY91Na//DXwlUusr9GVESSlVwVP6DyH1wcZXhfN1fyZHq
SwhMCEdHYoojQds+VqD1iiZQvv1RLByBgj622PDAPN4+Z49HjGs7YbZsUNuQqPPU
wRPpP6ty69x1hPKq1sQIB5MS4radpCM+4wbZbhxv7l4rP3RWUbNaYutZnzI9AAUR
tCZHdWlkbyB2YW4gUm9vaWogPGd1aWRvQGd2ci53aW4udHVlLm5sPokAlQMFEDMG
Hcgff6kIA1j8vQEBbYgD/jm9xHuUuY+iXDkOzpCXBYACYEZDV913MjtyBAmaVqYo
Rh5HFimkGXe+rCo78Aau0hc57fFMTsJqnuWEqVt3GRq28hSK1FOZ7ni9/XibHcmN
rt2yugl3hYpClijo4nrDL1NxibbamkGW/vFGcljS0jqXz6NDVbGx5Oo7HBByxByz
iQCVAwUQMhmtVjt/x7zOdmsfAQFuVQQApsVUTigT5YWjQA9Nd5Z0+a/oVtZpyw5Z
OljLJP3vqJdMa6TidhfcatjHbFTve5x1dmjFgMX/MQTd8zf/+Xccy/PX4+lnKNpP
eSf1Y4aK+E8KHmBGd6GzX6CIboyGYLS9e3kGnN06F2AQtaLyJFgQ71wRaGuyKmQG
FwTn7jiKb1aJAJUDBRAyEOLXPt3iN6QQUSEBATwQA/9jqu0Nbk154+Pn+9mJX/YT
fYR2UqK/5FKCqgL5Nt/Deg2re0zMD1f8F9Dj6vuAAxq8hnOkIHKlWolMjkRKkzJi
mSPEWl3AuHJ31k948J8it4f8kq/o44usIA2KKVMlI63Q/rmNdfWCyiYQEVGcRbTm
GTdZIHYCOgV5dOo4ebFqgYkAlQMFEDIE1nMEJn15jgpJ0QEBW6kEAKqN8XSgzTqf
CrxFXT07MlHhfdbKUTNUoboxCGCLNW05vf1A8F5fdE5i14LiwkldWIzPxWD+Sa3L
fNPCfCZTaCiyGcLyTzVfBHA18MBAOOX6JiTpdcm22jLGUWBf/aJK3yz/nfbWntd/
LRHysIdVp29lP5BF+J9/Lzbb/9LxP1taiQCVAwUQMgRXZ44CzbsJWQz9AQFf7gP/
Qa2FS5S6RYKG3rYanWADVe/ikFV2lxuM1azlWbsmljXvKVWGe6cV693nS5lGGAjx
lbd2ADwXjlkNhv45HLWFm9PEveO9Jjr6tMuXVt8N2pxiX+1PLUN9CtphTIU7Yfjn
s6ryZZfwGHSfIxNGi5ua2SoXhg0svaYnxHxXmOtH24iJAJUDBRAyAkpV8qaAEa3W
TBkBARfQBAC+S3kbulEAN3SI7/A+A/dtl9DfZezT9C4SRBGsl2clQFMGIXmMQ/7v
7lLXrKQ7U2zVbgNfU8smw5h2vBIL6f1PyexSmc3mz9JY4er8KeZpcf6H0rSkHl+i
d7TF0GvuTdNPFO8hc9En+GG6QHOqbkB4NRZ6cwtfwUMhk2FHXBnjF4kAlQMFEDH5
FFukUJAsCdPmTQEBe74EAMBsxDnbD9cuI5MfF/QeTNEG4BIVUZtAkDme4Eg7zvsP
d3DeJKCGeNjiCWYrRTCGwaCWzMQk+/+MOmdkI6Oml+AIurJLoHceHS9jP1izdP7f
N2jkdeJSBsixunbQWtUElSgOQQ4iF5kqwBhxtOfEP/L9QsoydRMR1yB6WPD75H7V
iQCVAwUQMZ9YNGtaZ42Bsqd5AQH0PAQAhpVlAc3ZM/KOTywBSh8zWKVlSk3q/zGn
k7hJmFThnlhH1723+WmXE8aAPJi+VXOWJUFQgwELJ6R8jSU2qvk2m1VWyYSqRKvc
VRQMqT2wjss0GE1Ngg7tMrkRHT0il7E2xxIb8vMrIwmdkbTfYqBUhhGnsWPHZHq7
MoA1/b+rK7CJAJUDBRAxnvXh3IDyptUyfLkBAYTDA/4mEKlIP/EUX2Zmxgrd/JQB
hqcQlkTrBAaDOnOqe/4oewMKR7yaMpztYhJs97i03Vu3fgoLhDspE55ooEeHj0r4
cOdiWfYDsjSFUYSPNVhW4OSruMA3c29ynMqNHD7hpr3rcCPUi7J2RncocOcCjjK2
BQb/9IAUNeK4C9gPxMEZLokAlQMFEDGeO86zWmLrWZ8yPQEBEEID/2fPEUrSX3Yk
j5TJPFZ9MNX0lEo7AHYjnJgEbNI4pYm6C3PnMlsYfCSQDHuXmRQHAOWSdwOLvCkN
F8eDaF3M6u0urgeVJ+KVUnTz2+LZoZs12XSZKCte0HxjbvPpWMTTrYyimGezH79C
mgDVjsHaYOx3EXF0nnDmtXurGioEmW1J
=mSvM
-----END PGP PUBLIC KEY BLOCK-----&a.peter;
Peter Wemm <peter@FreeBSD.org>
aka <peter@spinner.dialix.com>
aka <peter@haywire.dialix.com>
aka <peter@perth.dialix.oz.au>
Key fingerprint = 47 05 04 CA 4C EE F8 93 F6 DB 02 92 6D F5 58 8A
-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: 2.6.3ia
mQCNAy9/FJwAAAEEALxs9dE9tFd0Ru1TXdq301KfEoe5uYKKuldHRBOacG2Wny6/
W3Ill57hOi2+xmq5X/mHkapywxvy4cyLdt31i4GEKDvxpDvEzAYcy2n9dIup/eg2
kEhRBX9G5k/LKM4NQsRIieaIEGGgCZRm0lINqw495aZYrPpO4EqGN2HYnOMZAAUT
tCVQZXRlciBXZW1tIDxwZXRlckBoYXl3aXJlLmRpYWxpeC5jb20+iQCVAwUQMwWT
cXW7bjh2o/exAQEFkQP+LIx5zKlYp1uR24xGApMFNrNtjh+iDIWnxxb2M2Kb6x4G
9z6OmbUCoDTGrX9SSL2Usm2RD0BZfyv9D9QRWC2TSOPkPRqQgIycc11vgbLolJJN
eixqsxlFeKLGEx9eRQCCbo3dQIUjc2yaOe484QamhsK1nL5xpoNWI1P9zIOpDiGJ
AJUDBRAxsRPqSoY3Ydic4xkBAbWLA/9q1Fdnnk4unpGQsG31Qbtr4AzaQD5m/JHI
4gRmSmbj6luJMgNG3fpO06Gd/Z7uxyCJB8pTst2a8C/ljOYZxWT+5uSzkQXeMi5c
YcI1sZbUpkHtmqPW623hr1PB3ZLA1TIcTbQW+NzJsxQ1Pc6XG9fGkT9WXQW3Xhet
AP+juVTAhLQlUGV0ZXIgV2VtbSA8cGV0ZXJAcGVydGguZGlhbGl4Lm96LmF1PokA
lQMFEDGxFCFKhjdh2JzjGQEB6XkD/2HOwfuFrnQUtdwFPUkgtEqNeSr64jQ3Maz8
xgEtbaw/ym1PbhbCk311UWQq4+izZE2xktHTFClJfaMnxVIfboPyuiSF99KHiWnf
/Gspet0S7m/+RXIwZi1qSqvAanxMiA7kKgFSCmchzas8TQcyyXHtn/gl9v0khJkb
/fv3R20btB5QZXRlciBXZW1tIDxwZXRlckBGcmVlQlNELm9yZz6JAJUDBRAxsRJd
SoY3Ydic4xkBAZJUA/4i/NWHz5LIH/R4IF/3V3LleFyMFr5EPFY0/4mcv2v+ju9g
brOEM/xd4LlPrx1XqPeZ74JQ6K9mHR64RhKR7ZJJ9A+12yr5dVqihe911KyLKab9
4qZUHYi36WQu2VtLGnw/t8Jg44fQSzbBF5q9iTzcfNOYhRkSD3BdDrC3llywO7Ql
UGV0ZXIgV2VtbSA8cGV0ZXJAc3Bpbm5lci5kaWFsaXguY29tPokAlQMFEDGxEi1K
hjdh2JzjGQEBdA4EAKmNFlj8RF9HQsoI3UabnvYqAWN5wCwEB4u+Zf8zq6OHic23
TzoK1SPlmSdBE1dXXQGS6aiDkLT+xOdeewNs7nfUIcH/DBjSuklAOJzKliXPQW7E
kuKNwy4eq5bl+j3HB27i+WBXhn6OaNNQY674LGaR41EGq44Wo5ATcIicig/z
=gv+h
-----END PGP PUBLIC KEY BLOCK-----&a.joerg;
Type Bits/KeyID Date User ID
pub 1024/76A3F7B1 1996/04/27 Joerg Wunsch <joerg_wunsch@uriah.heep.sax.de>
Key fingerprint = DC 47 E6 E4 FF A6 E9 8F 93 21 E0 7D F9 12 D6 4E
Joerg Wunsch <joerg_wunsch@interface-business.de>
Joerg Wunsch <j@uriah.heep.sax.de>
Joerg Wunsch <j@interface-business.de>
-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: 2.6.3ia
mQCNAzGCFeAAAAEEAKmRBU2Nvc7nZy1Ouid61HunA/5hF4O91cXm71/KPaT7dskz
q5sFXvPJPpawwvqHPHfEbAK42ZaywyFp59L1GaYj87Pda+PlAYRJyY2DJl5/7JPe
ziq+7B8MdvbX6D526sdmcR+jPXPbHznASjkx9DPmK+7TgFujyXW7bjh2o/exAAUR
tC1Kb2VyZyBXdW5zY2ggPGpvZXJnX3d1bnNjaEB1cmlhaC5oZWVwLnNheC5kZT6J
AJUDBRA0FFkBs1pi61mfMj0BAfDCA/oCfkjrhvRwRCpSL8klJ1YDoUJdmw+v4nJc
pw3OpYXbwKOPLClsE7K3KCQscHel7auf91nrekAwbrXv9Clp0TegYeAQNjw5vZ9f
L6UZ5l3fH8E2GGA7+kqgNWs1KxAnG5GdUvJ9viyrWm8dqWRGo+loDWlZ12L2OgAD
fp7jVZTI1okAlQMFEDQPrLoff6kIA1j8vQEB2XQEAK/+SsQPCT/X4RB/PBbxUr28
GpGJMn3AafAaA3plYw3nb4ONbqEw9tJtofAn4UeGraiWw8nHYR2DAzoAjR6OzuX3
TtUV+57BIzrTPHcNkb6h8fPuHU+dFzR+LNoPaGJsFeov6w+Ug6qS9wa5FGDAgaRo
LHSyBxcRVoCbOEaS5S5EiQCVAwUQM5BktWVgqaw0+fnVAQGKPwP+OiWho3Zm2GKp
lEjiZ5zx3y8upzb+r1Qutb08jr2Ewja04hLg0fCrt6Ad3DoVqxe4POghIpmHM4O4
tcW92THQil70CLzfCxtfUc6eDzoP3krD1/Gwpm2hGrmYA9b/ez9+r2vKBbnUhPmC
glx5pf1IzHU9R2XyQz9Xu7FI2baOSZqJAJUDBRAyCIWZdbtuOHaj97EBAVMzA/41
VIph36l+yO9WGKkEB+NYbYOz2W/kyi74kXLvLdTXcRYFaCSZORSsQKPGNMrPZUoL
oAKxE25AoCgl5towqr/sCcu0A0MMvJddUvlQ2T+ylSpGmWchqoXCN7FdGyxrZ5zz
xzLIvtcio6kaHd76XxyJpltCASupdD53nEtxnu8sRrQxSm9lcmcgV3Vuc2NoIDxq
b2VyZ193dW5zY2hAaW50ZXJmYWNlLWJ1c2luZXNzLmRlPokAlQMFEDIIhfR1u244
dqP3sQEBWoID/RhBm+qtW+hu2fqAj9d8CVgEKJugrxZIpXuCKFvO+bCgQtogt9EX
+TJh4s8UUdcFkyEIu8CT2C3Rrr1grvckfxvrTgzSzvtYyv1072X3GkVY+SlUMBMA
rdl1qNW23oT7Q558ajnsaL065XJ5m7HacgTTikiofYG8i1s7TrsEeq6PtCJKb2Vy
ZyBXdW5zY2ggPGpAdXJpYWguaGVlcC5zYXguZGU+iQCVAwUQMaS91D4gHQUlG9CZ
AQGYOwQAhPpiobK3d/fz+jWrbQgjkoO+j39glYGXb22+6iuEprFRs/ufKYtjljNT
NK3B4DWSkyIPawcuO4Lotijp6jke2bsjFSSashGWcsJlpnwsv7EeFItT3oWTTTQQ
ItPbtNyLW6M6xB+jLGtaAvJqfOlzgO9BLfHuA2LY+WvbVW447SWJAJUDBRAxqWRs
dbtuOHaj97EBAXDBA/49rzZB5akkTSbt/gNd38OJgC+H8N5da25vV9dD3KoAvXfW
fw7OxIsxvQ/Ab+rJmukrrWxPdsC+1WU1+1rGa4PvJp/VJRDes2awGrn+iO7/cQoS
IVziC27JpcbvjLvLVcBIiy1yT/RvJ+87a3jPRHt3VFGcpFh4KykxxSNiyGygl4kA
lQMFEDGCUB31FVv7jlQtXQEB5KgD/iIJZe5lFkPr2B/Cr7BKMVBot1/JSu05NsHg
JZ3uK15w4mVtNPZcFi/dKbn+qRM6LKDFe/GF0HZD/ZD1FJt8yQjzF2w340B+F2GG
EOwnClqZDtEAqnIBzM/ECQQqH+6Bi8gpkFZrFgg5eON7ikqmusDnOlYStM/CBfgp
SbR8kDmFtCZKb2VyZyBXdW5zY2ggPGpAaW50ZXJmYWNlLWJ1c2luZXNzLmRlPokA
lQMFEDHioSdlYKmsNPn51QEByz8D/10uMrwP7MdaXnptd1XNFhpaAPYTVAOcaKlY
OGI/LLR9PiU3FbqXO+7INhaxFjBxa0Tw/p4au5Lq1+Mx81edHniJZNS8tz3I3goi
jIC3+jn2gnVAWnK5UZUTUVUn/JLVk/oSaIJNIMMDaw4J9xPVVkb+Fh1A+XqtPsVa
YESrNp0+iQCVAwUQMwXkzcdm8Q+/vPRJAQEA4QQAgNNX1HFgXrMetDb+w6yEGQDk
JCDAY9b6mA2HNeKLQAhsoZl4HwA1+iuQaCgo3lyFC+1Sf097OUTs74z5X1vCedqV
oFw9CxI3xuctt3pJCbbN68flOlnq0WdYouWWGlFwLlh5PEy//VtwX9lqgsizlhzi
t+fX6BT4BgKi5baDhrWJAJUDBRAyCKveD9eCJxX4hUkBAebMA/9mRPy6K6i7TX2R
jUKSl2p5oYrXPk12Zsw4ijuktslxzQhOCyMSCGK2UEC4UM9MXp1H1JZQxN/DcfnM
7VaUt+Ve0wZ6DC9gBSHJ1hKVxHe5XTj26mIr4rcXNy2XEDMK9QsnBxIAZnBVTjSO
LdhqqSMp3ULLOpBlRL2RYrqi27IXr4kAlQMFEDGpbnd1u244dqP3sQEBJnQD/RVS
Azgf4uorv3fpbosI0LE3LUufAYGBSJNJnskeKyudZkNkI5zGGDwVneH/cSkKT4OR
ooeqcTBxKeMaMuXPVl30QahgNwWjfuTvl5OZ8orsQGGWIn5FhqYXsKkjEGxIOBOf
vvlVQ0UbcR0N2+5F6Mb5GqrXZpIesn7jFJpkQKPU
=97h7
-----END PGP PUBLIC KEY BLOCK-----Developers&a.wosch;
Type Bits/KeyID Date User ID
pub 1024/2B7181AD 1997/08/09 Wolfram Schneider <wosch@FreeBSD.org>
Key fingerprint = CA 16 91 D9 75 33 F1 07 1B F0 B4 9F 3E 95 B6 09
-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: 2.6.3ia
mQCNAzPs+aEAAAEEAJqqMm2I9CxWMuHDvuVO/uh0QT0az5ByOktwYLxGXQmqPG1G
Q3hVuHWYs5Vfm/ARU9CRcVHFyqGQ3LepoRhDHk+JcASHan7ptdFsz7xk1iNNEoe0
vE2rns38HIbiyQ/2OZd4XsyhFOFtExNoBuyDyNoe3HbHVBQT7TmN/mkrcYGtAAUR
tCVXb2xmcmFtIFNjaG5laWRlciA8d29zY2hARnJlZUJTRC5vcmc+iQCVAwUQNxnH
AzmN/mkrcYGtAQF5vgP/SLOiI4AwuPHGwUFkwWPRtRzYSySXqwaPCop5mVak27wk
pCxGdzoJO2UgcE812Jt92Qas91yTT0gsSvOVNATaf0TM3KnKg5ZXT1QIzYevWtuv
2ovAG4au3lwiFPDJstnNAPcgLF3OPni5RCUqBjpZFhb/8YDfWYsMcyn4IEaJKre0
JFdvbGZyYW0gU2NobmVpZGVyIDxzY2huZWlkZXJAemliLmRlPokAlQMFEDcZxu85
jf5pK3GBrQEBCRgD/jPj1Ogx4O769soiguL1XEHcxhqtrpKZkKwxmDLRa0kJFwLp
bBJ3Qz3vwaB7n5gQU0JiL1B2M7IxVeHbiIV5pKp7FD248sm+HZvBg6aSnCg2JPUh
sHd1tK5X4SB5cjFt3Cj0LIN9/c9EUxm3SoML9bovmze60DckErrRNOuTk1IntCJX
b2xmcmFtIFNjaG5laWRlciA8d29zY2hAYXBmZWwuZGU+iQEVAwUQNmfWXAjJLLJO
sC7dAQEASAgAnE4g2fwMmFkQy17ATivljEaDZN/m0GdXHctdZ8CaPrWk/9/PTNK+
U6xCewqIKVwtqxVBMU1VpXUhWXfANWCB7a07D+2GrlB9JwO5NMFJ6g0WI/GCUXjC
xb3NTkNsvppL8Rdgc8wc4f23GG4CXVggdTD2oUjUH5Bl7afgOT4xLPAqePhS7hFB
UnMsbA94OfxPtHe5oqyaXt6cXH/SgphRhzPPZq0yjg0Ef+zfHVamvZ6Xl2aLZmSv
Cc/rb0ShYDYi39ly9OPPiBPGbSVw2Gg804qx3XAKiTFkLsbYQnRt7WuCPsOVjFkf
CbQS31TaclOyzenZdCAezubGIcrJAKZjMIkAlQMFEDPs+aE5jf5pK3GBrQEBlIAD
/3CRq6P0m1fi9fbPxnptuipnoFB/m3yF6IdhM8kSe4XlXcm7tS60gxQKZgBO3bDA
5QANcHdl41Vg95yBAZepPie6iQeAAoylRrONeIy6XShjx3S0WKmA4+C8kBTL+vwa
UqF9YJ1qesZQtsXlkWp/Z7N12RkueVAVQ7wRPwfnz6E3tC5Xb2xmcmFtIFNjaG5l
aWRlciA8d29zY2hAcGFua2UuZGUuZnJlZWJzZC5vcmc+iQCVAwUQNxnEqTmN/mkr
cYGtAQFnpQP9EpRZdG6oYN7d5abvIMN82Z9x71a4QBER+R62mU47wqdRG2b6jMMh
3k07b2oiprVuPhRw/GEPPQevb6RRT6SD9CPYAGfK3MDE8ZkMj4d+7cZDRJQ35sxv
gAzQwuA9l7kS0mt5jFRPcEg5/KpuyehRLckjx8jpEM7cEJDHXhBIuVg=
=3V1R
-----END PGP PUBLIC KEY BLOCK-----&a.brian;
Type Bits/KeyID Date User ID
pub 1024/666A7421 1997/04/30 Brian Somers <brian@awfulhak.org>
Key fingerprint = 2D 91 BD C2 94 2C 46 8F 8F 09 C4 FC AD 12 3B 21
Brian Somers <brian@uk.FreeBSD.org>
Brian Somers <brian@OpenBSD.org>
Brian Somers <brian@FreeBSD.org>
-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: 2.6.3ia
mQCNAzNmogUAAAEEALdsjVsV2dzO8UU4EEo7z3nYuvB2Q6YJ8sBUYjB8/vfR5oZ9
7aEQjgY5//pXvS30rHUB9ghk4kIFSljzeMudE0K2zH5n2sxpLbBKWZRDLS7xnrDC
I3j9CNKwQBzMPs0fUT46gp96nf1X8wPiJXkDUEia/c0bRbXlLw7tvOdmanQhAAUR
tCFCcmlhbiBTb21lcnMgPGJyaWFuQGF3ZnVsaGFrLm9yZz6JAJUDBRA3Fjs4H3+p
CANY/L0BAZOxBACTZ1zPdaJzEdT4AfrebQbaU4ytEeodnVXZIkc8Il+LDlDOUAIe
k5PgnHTRM4yiwcZuYQrCDRFgdOofcFfRo0PD7mGFzd22qPGmbvHiDBCYCyhlkPXW
IDeoA1cX77JlU1NFdy0dZwuX7csaMlpjCkOPc7+856mr6pQi48zj7yZtrYkAlQMF
EDcUqZ2dZ0EADG4SFQEBEm0EAL2bBNc4vpxPrg3ATdZ/PekpL6lYj3s9pBf8f7eY
LXq438A/ywiWkrL74gXxcZ2Ey9AHZW+rbJPzUbrfMAgP3uWobeSvDyKRo1wtKnTY
Hy+OEIbBIHDmIUuK3L7KupBf7WAI46Q7fnyz0txvtRruDjvfoyl9/TSRfIKcaw2a
INh7iQCVAwUQNwyWpmdKPfFUsXG5AQEIrAQAmukv2u9ihcnO2Zaak265I+gYozu+
biAngdXNfhTGMeExFzdzQ8Qe7EJugMpIDEkJq2goY35sGitD+ogSVWECjcVbHIAP
M2u9axFGlK7fDOmmkH2ZWDMtwx2I5dZps3q2g9mY2O9Az5Yokp7GW7viSpWXHTRH
xOsuY6aze71U7RWJAHUDBRA3DAEvDuwDH3697LEBAWRHAv9XXkub6mir/DCxzKI2
AE3tek40lRfU6Iukjl/uzT9GXcL3uEjIewiPTwN+k4IL+qcCEdv8WZgv/tO45r59
IZQsicNaSAsKX/6Cxha6Hosg1jw4rjdyz13rgYRi/nreq5mJAJUDBRA2r0CM9p+f
Pnxlu7UBAYObA/40s5SwEpXTrePO78AoUFEa5Z4bgyxkpT7BVbq6m/oQtK509Xe2
M2y0XTLkd86oXpjyKzGzWq8T6ZTKNdF9+5LhS2ylJytdPq1AjDk2BocffWX4+pXn
RPiC6XcNdYGiQL8OTHvZESYQDiHeMfwA8WdMzFK1R80nJMwANYXjJJrLzYkAlQMF
EDNt51zvs7EFZlNtbQEBW0UD/jZB6UDdEFdhS0hxgahv5CxaQDWQbIEpAY9JL1yg
d1RWMKUFGXdRkWZmHEA4NvtwFFeam/HZm4yuGf8yldMyo84loTcVib7lKh4CumGx
FT5Pxeh/F8u9EeQzclRFSMhVl0BA2/HEGyjw0kbkprI/RD3pXD7ewTAUrj2O3XhE
InLgiQCVAwUQM3O9vWyr6JZzEUkFAQF9nAP9Hco0V/3Kl70N5ryPVgh41nUTd7Td
6fUjx8yPoSZLX8vVZ8XMyd8ULFmzsmA+2QG4HcKo/x/4s50O3o8c+o1qSYj0Tp+K
4Z8lneMVlgBNdrRcq4ijEgk0qGqSlsXyLElkVPEXAADBVgzf6yqvipDwXNVzl6e3
GPLE8U2TAnBFZX6JAJUDBRAzZqIFDu2852ZqdCEBATsuBACI3ofP7N3xuHSc7pWL
NsnFYVEc9utBaclcagxjLLzwPKzMBcLjNGyGXIZQNB0d4//UMUJcMS7vwZ8MIton
VubbnJVHuQvENloRRARtarF+LC7OLMCORrGtbt0FtYgvBaqtgXlNcKXD6hRT+ghR
bi3q34akA7Xw8tiFIxdVgSusALQjQnJpYW4gU29tZXJzIDxicmlhbkB1ay5GcmVl
QlNELm9yZz6JAJUDBRA3FLWcnWdBAAxuEhUBAcYYBACos9nKETuaH+z2h0Ws+IIY
mN9FEm8wpPUcQmX5GFhfBUQ+rJbflzv0jJ/f2ac9qJHgIIAlJ3pMkfMpU8UYHEuo
VCe4ZTU5sr4ZdBaF9kpm2OriFgZwIv4QAi7dCMu9ZwGRtZ3+z3DQsVSagucjZTIe
yTUR6K+7E3YXANQjOdqFZYkAlQMFEDcUpeQO7bznZmp0IQEB4HED/Ru3NjwWO1gl
xEiLTzRpU31Rh1Izw1lhVMVJkLAGBw9ieSkjvdIkuhqV1i+W4wKBClT0UOE28Kjp
WbBKPFIASRYzN4ySwpprsG5H45EFQosovYG/HPcMzXU2GMj0iwVTxnMq7I8oH588
ExHqfEN2ARD3ngmB2499ruyGl26pW/BftCBCcmlhbiBTb21lcnMgPGJyaWFuQE9w
ZW5CU0Qub3JnPokAlQMFEDcUtW6dZ0EADG4SFQEBQwsD/j9B/lkltIdnQdjOqR/b
dOBgJCtUf905y6kD+k4kbxeT1YAaA65KJ2o/Zj+i+69F2+BUJ/3kYB7prKwut2h0
ek1ZtncGxoAsQdFJ5JSeMkwUZ5qtGeCmVPb59+KPq3nU6p3RI8Bn77FzK//Qy+IW
/WFVJbf/6NCNCbyRiRjPbGl/iQCVAwUQNxSlyA7tvOdmanQhAQFzMAP/dvtsj3yB
C+seiy6fB/nS+NnKBoff3Ekv57FsZraGt4z9n4sW61eywaiRzuKlhHqrDE17STKa
fBOaV1Ntl7js7og5IFPWNlVh1cK+spDmd655D8pyshziDF6fSAsqGfTn35xl23Xj
O20MMK44j4I5V6rEyUDBDrmX49J56OFkfwa0IEJyaWFuIFNvbWVycyA8YnJpYW5A
RnJlZUJTRC5vcmc+iQCVAwUQNxS1Y51nQQAMbhIVAQHPBQP+IMUlE4DtEvSZFtG4
YK9usfHSkStIafh/F/JzSsqdceLZgwcuifbemw79Rhvqhp0Cyp7kuI2kHO3a19kZ
3ZXlDl3VDg41SV/Z5LzNw9vaZKuF/vtGaktOjac5E5aznWGIA5czwsRgydEOcd8O
VPMUMrdNWRI6XROtnbZaRSwmD8aJAJUDBRA3FKWuDu2852ZqdCEBAWVJA/4x3Mje
QKV+KQoO6mOyoIcD4GK1DjWDvNHGujJbFGBmARjr/PCm2cq42cPzBxnfRhCfyEvN
aesNB0NjLjRU/m7ziyVn92flAzHqqmU36aEdqooXUY2T3vOYzo+bM7VtInarG1iU
qw1G19GgXUwUkPvy9+dNIM/aYoI/e0Iv3P9uug==
=R3k0
-----END PGP PUBLIC KEY BLOCK-----
diff --git a/en/handbook/policies/chapter.sgml b/en/handbook/policies/chapter.sgml
index 76f8f4f2d6..83cf490b8a 100644
--- a/en/handbook/policies/chapter.sgml
+++ b/en/handbook/policies/chapter.sgml
@@ -1,391 +1,391 @@
Source Tree Guidelines and PoliciesContributed by &a.phk;.This chapter documents various guidelines and policies in force for
the FreeBSD source tree.MAINTAINER on MakefilesJune 1996.If a particular portion of the FreeBSD distribution is being
maintained by a person or group of persons, they can communicate this
fact to the world by adding a
MAINTAINER= email-addresses
line to the Makefiles covering this portion of the
source tree.The semantics of this are as follows:The maintainer owns and is responsible for that code. This means
that he is responsible for fixing bugs and answer problem reports
pertaining to that piece of the code, and in the case of contributed
software, for tracking new versions, as appropriate.Changes to directories which have a maintainer defined shall be sent
to the maintainer for review before being committed. Only if the
maintainer does not respond for an unacceptable period of time, to
several emails, will it be acceptable to commit changes without review
by the maintainer. However, it is suggested that you try and have the
changes reviewed by someone else if at all possible.It is of course not acceptable to add a person or group as
maintainer unless they agree to assume this duty. On the other hand it
doesn't have to be a committer and it can easily be a group of
people.Contributed SoftwareContributed by &a.phk; and &a.obrien;. June 1996.Some parts of the FreeBSD distribution consist of software that is
actively being maintained outside the FreeBSD project. For historical
reasons, we call this contributed software. Some
examples are perl, gcc and patch.Over the last couple of years, various methods have been used in
dealing with this type of software and all have some number of
advantages and drawbacks. No clear winner has emerged.Since this is the case, after some debate one of these methods has
been selected as the “official” method and will be required
for future imports of software of this kind. Furthermore, it is
strongly suggested that existing contributed software converge on this
model over time, as it has significant advantages over the old method,
including the ability to easily obtain diffs relative to the
“official” versions of the source by everyone (even without
cvs access). This will make it significantly easier to return changes
to the primary developers of the contributed software.Ultimately, however, it comes down to the people actually doing the
work. If using this model is particularly unsuited to the package being
dealt with, exceptions to these rules may be granted only with the
approval of the core team and with the general consensus of the other
developers. The ability to maintain the package in the future will be a
key issue in the decisions.Because of some unfortunate design limitations with the RCS file
format and CVS's use of vendor branches, minor, trivial and/or
cosmetic changes are strongly discouraged on
files that are still tracking the vendor branch. “Spelling
fixes” are explicitly included here under the
“cosmetic” category and are to be avoided for files with
revision 1.1.x.x. The repository bloat impact from a single character
change can be rather dramatic.The Tcl embedded programming
language will be used as example of how this model works:src/contrib/tcl contains the source as
distributed by the maintainers of this package. Parts that are entirely
not applicable for FreeBSD can be removed. In the case of Tcl, the
mac, win and
compat subdirectories were eliminated before the
importsrc/lib/libtcl contains only a "bmake style"
Makefile that uses the standard
bsd.lib.mk makefile rules to produce the library
and install the documentation.src/usr.bin/tclsh contains only a bmake style
Makefile which will produce and install the
tclsh program and its associated man-pages using the
standard bsd.prog.mk rules.src/tools/tools/tcl_bmake contains a couple of
shell-scripts that can be of help when the tcl software needs updating.
These are not part of the built or installed software.The important thing here is that the
src/contrib/tcl directory is created according to
the rules: It is supposed to contain the sources as distributed (on a
proper CVS vendor-branch and without RCS keyword expansion) with as few
FreeBSD-specific changes as possible. The 'easy-import' tool on
freefall will assist in doing the import, but if there are any doubts on
how to go about it, it is imperative that you ask first and not blunder
ahead and hope it “works out”. CVS is not forgiving of
import accidents and a fair amount of effort is required to back out
major mistakes.Because of the previously mentioned design limitations with CVS's
vendor branches, it is required that “official” patches from
the vendor be applied to the original distributed sources and the result
re-imported onto the vendor branch again. Official patches should never
be patched into the FreeBSD checked out version and "committed", as this
destroys the vendor branch coherency and makes importing future versions
rather difficult as there will be conflicts.Since many packages contain files that are meant for compatibility
with other architectures and environments that FreeBSD, it is
permissible to remove parts of the distribution tree that are of no
interest to FreeBSD in order to save space. Files containing copyright
notices and release-note kind of information applicable to the remaining
files shall not be removed.If it seems easier, the bmakeMakefiles can be produced from the dist tree
automatically by some utility, something which would hopefully make it
even easier to upgrade to a new version. If this is done, be sure to
check in such utilities (as necessary) in the
src/tools directory along with the port itself so
that it is available to future maintainers.In the src/contrib/tcl level directory, a file
called FREEBSD-upgrade should be added and it
should states things like:Which files have been left outWhere the original distribution was obtained from and/or the
official master site.Where to send patches back to the original authorsPerhaps an overview of the FreeBSD-specific changes that have
been made.However, please do not import FREEBSD-upgrade
with the contributed source. Rather you should cvs add
FREEBSD-upgrade ; cvs ci after the initial import. Example
wording from src/contrib/cpio is below:
This directory contains virgin sources of the original distribution files
on a "vendor" branch. Do not, under any circumstances, attempt to upgrade
the files in this directory via patches and a cvs commit. New versions or
official-patch versions must be imported. Please remember to import with
"-ko" to prevent CVS from corrupting any vendor RCS Ids.
For the import of GNU cpio 2.4.2, the following files were removed:
INSTALL cpio.info mkdir.c
Makefile.in cpio.texi mkinstalldirs
To upgrade to a newer version of cpio, when it is available:
1. Unpack the new version into an empty directory.
[Do not make ANY changes to the files.]
2. Remove the files listed above and any others that don't apply to
FreeBSD.
3. Use the command:
cvs import -ko -m 'Virgin import of GNU cpio v<version>' \
src/contrib/cpio GNU cpio_<version>
For example, to do the import of version 2.4.2, I typed:
cvs import -ko -m 'Virgin import of GNU v2.4.2' \
src/contrib/cpio GNU cpio_2_4_2
4. Follow the instructions printed out in step 3 to resolve any
conflicts between local FreeBSD changes and the newer version.
Do not, under any circumstances, deviate from this procedure.
To make local changes to cpio, simply patch and commit to the main
branch (aka HEAD). Never make local changes on the GNU branch.
All local changes should be submitted to "cpio@gnu.ai.mit.edu" for
inclusion in the next vendor release.
-obrien@freebsd.org - 30 March 1997
+obrien@FreeBSD.org - 30 March 1997
Encumbered filesIt might occasionally be necessary to include an encumbered file in
the FreeBSD source tree. For example, if a device requires a small
piece of binary code to be loaded to it before the device will operate,
and we do not have the source to that code, then the binary file is said
to be encumbered. The following policies apply to including encumbered
files in the FreeBSD source tree.Any file which is interpreted or executed by the system CPU(s)
and not in source format is encumbered.Any file with a license more restrictive than BSD or GNU is
encumbered.A file which contains downloadable binary data for use by the
hardware is not encumbered, unless (1) or (2) apply to it. It must
be stored in an architecture neutral ASCII format (file2c or
uuencoding is recommended).Any encumbered file requires specific approval from the Core team before it is added to the
CVS repository.Encumbered files go in src/contrib or
src/sys/contrib.The entire module should be kept together. There is no point in
splitting it, unless there is code-sharing with non-encumbered
code.Object files are named
arch/filename.o.uu>.Kernel files;Should always be referenced in
conf/files.* (for build simplicity).Should always be in LINT, but the Core team decides per case if it
should be commented out or not. The Core team can, of course, change
their minds later on.The Release Engineer
decides whether or not it goes in to the release.User-land files;The Core team decides if
the code should be part of make world.The Release Engineer
decides if it goes in to the release.Shared LibrariesContributed by &a.asami;, &a.peter;, and &a.obrien; 9
December 1996.If you are adding shared library support to a port or other piece of
software that doesn't have one, the version numbers should follow these
rules. Generally, the resulting numbers will have nothing to do with
the release version of the software.The three principles of shared library building are:Start from 1.0If there is a change that is backwards compatible, bump minor
numberIf there is an incompatible change, bump major numberFor instance, added functions and bugfixes result in the minor
version number being bumped, while deleted functions, changed function
call syntax etc. will force the major version number to change.Stick to version numbers of the form major.minor
(x.y). Our
dynamic linker does not handle version numbers of the form
x.y.z
well. Any version number after the y
(ie. the third digit) is totally ignored when comparing shared lib
version numbers to decide which library to link with. Given two shared
libraries that differ only in the “micro” revision,
ld.so will link with the higher one. Ie: if you link
with libfoo.so.3.3.3, the linker only records
3.3 in the headers, and will link with anything
starting with
libfoo.so.3.(anything >=
3).(highest
available).ld.so will always use the highest
“minor” revision. Ie: it will use
libc.so.2.2 in preference to
libc.so.2.0, even if the program was initially
linked with libc.so.2.0.For non-port libraries, it is also our policy to change the shared
library version number only once between releases. When you make a
change to a system library that requires the version number to be
bumped, check the Makefile's commit logs. It is the
responsibility of the committer to ensure that the first such change
since the release will result in the shared library version number in
the Makefile to be updated, and any subsequent
changes will not.
diff --git a/en/handbook/ports/chapter.sgml b/en/handbook/ports/chapter.sgml
index 48f3214119..e4fe0a0efd 100644
--- a/en/handbook/ports/chapter.sgml
+++ b/en/handbook/ports/chapter.sgml
@@ -1,4660 +1,4660 @@
Installing Applications: The Ports collectionContributed by &a.jraynard;.The FreeBSD Ports collection allows you to compile and install a very
wide range of applications with a minimum of effort.For all the hype about open standards, getting a program to work on
different versions of Unix in the real world can be a tedious and tricky
business, as anyone who has tried it will know. You may be lucky enough
to find that the program you want will compile cleanly on your system,
install itself in all the right places and run flawlessly “out of
the box”, but this is unfortunately rather rare. With most
programs, you will find yourself doing a fair bit of head-scratching, and
there are quite a few programs that will result in premature greying, or
even chronic alopecia...Some software distributions have attacked this problem by providing
configuration scripts. Some of these are very clever, but they have an
unfortunate tendency to triumphantly announce that your system is
something you have never heard of and then ask you lots of questions that
sound like a final exam in system-level Unix programming (Does
your system's gethitlist function return a const pointer to a fromboz or
a pointer to a const fromboz? Do you have Foonix style unacceptable
exception handling? And if not, why not?).Fortunately, with the Ports collection, all the hard work involved has
already been done, and you can just type make install
and get a working program.Why Have a Ports Collection?The base FreeBSD system comes with a very wide range of tools and
system utilities, but a lot of popular programs are not in the base
system, for good reasons:-Programs that some people cannot live without and other people
cannot stand, such as a certain Lisp-based editor.Programs which are too specialised to put in the base system
(CAD, databases).Programs which fall into the “I must have a look at that
when I get a spare minute” category, rather than
system-critical ones (some languages, perhaps).Programs that are far too much fun to be supplied with a serious
operating system like FreeBSD ;-)However many programs you put in the base system, people will
always want more, and a line has to be drawn somewhere (otherwise
FreeBSD distributions would become absolutely enormous).Obviously it would be unreasonable to expect everyone to port their
favourite programs by hand (not to mention a tremendous amount of
duplicated work), so the FreeBSD Project came up with an ingenious way
of using standard tools that would automate the process.Incidentally, this is an excellent illustration of how “the
Unix way” works in practice by combining a set of simple but very
flexible tools into something very powerful.How Does the Ports Collection Work?Programs are typically distributed on the Internet as a tarball consisting of a Makefile and
the source code for the program and usually some instructions (which are
unfortunately not always as instructive as they could be), with perhaps
a configuration script.The standard scenario is that you FTP down the tarball, extract it
somewhere, glance through the instructions, make any changes that seem
necessary, run the configure script to set things up and use the
standard make program to compile and install the
program from the source.FreeBSD ports still use the tarball mechanism, but use a skeleton to hold the
"knowledge" of how to get the program working on FreeBSD,
rather than expecting the user to be able to work it out. They also
supply their own customised Makefile, so that almost every port
can be built in the same way.If you look at a port skeleton (either on your FreeBSD
system or the
FTP site) and expect to find all sorts of pointy-headed rocket
science lurking there, you may be disappointed by the one or two rather
unexciting-looking files and directories you find there. (We will
discuss in a minute how to go about Getting a port).“How on earth can this do anything?” I hear you cry.
“There is no source code there!”Fear not, gentle reader, all will become clear (hopefully). Let us
see what happens if we try and install a port. I have chosen
ElectricFence, a useful tool for developers,
as the skeleton is more straightforward than most.If you are trying this at home, you will need to be root.&prompt.root; cd /usr/ports/devel/ElectricFence
&prompt.root; make install
>> Checksum OK for ElectricFence-2.0.5.tar.gz.
===> Extracting for ElectricFence-2.0.5
===> Patching for ElectricFence-2.0.5
===> Applying FreeBSD patches for ElectricFence-2.0.5
===> Configuring for ElectricFence-2.0.5
===> Building for ElectricFence-2.0.5
[lots of compiler output...]
===> Installing for ElectricFence-2.0.5
===> Warning: your umask is "0002". If this is not desired, set it to
an appropriate value and install this port again by ``make reinstall''.
install -c -o root -g wheel -m 444 /usr/ports/devel/ElectricFence/work/ElectricFence-2.0.5/libefence.a /usr/local/lib
install -c -o root -g wheel -m 444 /usr/ports/devel/ElectricFence/work/ElectricFence-2.0.5/libefence.3 /usr/local/man/man3
===> Compressing manual pages for ElectricFence-2.0.5
===> Registering installation for ElectricFence-2.0.5To avoid confusing the issue, I have completely removed the build
output.If you tried this yourself, you may well have got something like
this at the start:-&prompt.root; make install
>> ElectricFence-2.0.5.tar.gz doesn't seem to exist on this system.
>> Attempting to fetch from ftp://ftp.doc.ic.ac.uk/Mirrors/sunsite.unc.edu/pub/Linux/devel/lang/c/.The make program has noticed that you did not
have a local copy of the source code and tried to FTP it down so it
could get the job done. I already had the source handy in my example,
so it did not need to fetch it.Let's go through this and see what the make
program was doing.Locate the source code tarball. If it is not available
locally, try to grab it from an FTP site.Run a checksum test on the
tarball to make sure it has not been tampered with, accidentally
truncated, downloaded in ASCII mode, struck by neutrinos while in
transit, etc.Extract the tarball into a temporary work directory.Apply any patches needed to
get the source to compile and run under FreeBSD.Run any configuration script required by the build process and
correctly answer any questions it asks.(Finally!) Compile the code.Install the program executable and other supporting files, man
pages, etc. under the /usr/local hierarchy
(unless this is an X11 program,
then it will be under /usr/X11R6),
where they will not get mixed up with system programs. This also
makes sure that all the ports you install will go in the same place,
instead of being flung all over your system.Register the installation in a database. This means that, if
you do not like the program, you can cleanly remove all traces of it from your
system.Scroll up to the make output and see if you can
match these steps to it. And if you were not impressed before, you
should be by now!Getting a FreeBSD PortThere are two ways of getting hold of the FreeBSD port for a
program. One requires a FreeBSD CDROM,
the other involves using an Internet
Connection.Compiling ports from CDROMAssuming that your FreeBSD CDROM is in the drive and mounted on
/cdrom (and the mount point
must be /cdrom), you should
then be able to build ports just as you normally do and the port
collection's built in search path should find the tarballs in
/cdrom/ports/distfiles/ (if they exist there)
rather than downloading them over the net.Another way of doing this, if you want to just use the port
skeletons on the CDROM, is to set these variables in
/etc/make.conf:
PORTSDIR= /cdrom/ports
DISTDIR= /tmp/distfiles
WRKDIRPREFIX= /tmpSubstitute /tmp for any place you have enough
free space. Then, just cd to the appropriate
subdirectory under /cdrom/ports and type
make install as usual.
WRKDIRPREFIX will cause the port to be build under
/tmp/cdrom/ports; for instance,
games/oneko will be built under
/tmp/cdrom/ports/games/oneko.There are some ports for which we cannot provide the original
source in the CDROM due to licensing limitations. In that case, you
will need to look at the section on Compiling ports using an Internet
connection.Compiling ports from the InternetIf you do not have a CDROM, or you want to make sure you get the
very latest version of the port you want, you will need to download
the skeleton for the port. Now
this might sound like rather a fiddly job full of pitfalls, but it is
actually very easy.First, if you are running a release version of FreeBSD, make sure
you get the appropriate “upgrade kit” for your release
from the ports web
page. These packages include files that have been updated
since the release that you may need to compile new ports.The key to the skeletons is that the FreeBSD FTP server can create
on-the-fly tarballs for you.
Here is how it works, with the gnats program in the databases
directory as an example (the bits in square brackets are comments. Do
not type them in if you are trying this yourself!):-&prompt.root; cd /usr/ports
&prompt.root; mkdir databases
&prompt.root; cd databases
&prompt.root; ftp ftp.FreeBSD.org
[log in as `ftp' and give your email address when asked for a
password. Remember to use binary (also known as image) mode!]
ftp>cd /pub/FreeBSD/ports/ports/databasesftp>get gnats.tar
[tars up the gnats skeleton for us]
ftp>quit
&prompt.root; tar xf gnats.tar
[extract the gnats skeleton]
&prompt.root; cd gnats
&prompt.root; make install
[build and install gnats]What happened here? We connected to the FTP server in the usual
way and went to its databases sub-directory.
When we gave it the command get gnats.tar, the FTP
server tarred up the gnats
directory for us.We then extracted the gnats skeleton and went into the gnats
directory to build the port. As we explained earlier, the make process noticed we
did not have a copy of the source locally, so it fetched one before
extracting, patching and building it.Let us try something more ambitious now. Instead of getting a
single port skeleton, we will get a whole sub-directory, for example all
the database skeletons in the ports collection. It looks almost the
same:-&prompt.root; cd /usr/ports
&prompt.root; ftp ftp.FreeBSD.org
[log in as `ftp' and give your email address when asked for a
password. Remember to use binary (also known as image) mode!]
ftp>cd /pub/FreeBSD/ports/portsftp>get databases.tar
[tars up the databases directory for us]
ftp>quit
&prompt.root; tar xf databases.tar
[extract all the database skeletons]
&prompt.root; cd databases
&prompt.root; make install
[build and install all the database ports]With half a dozen straightforward commands, we have now got a set
of database programs on our FreeBSD machine! All we did that was
different from getting a single port skeleton and building it was that
we got a whole directory at once, and compiled everything in it at
once. Pretty impressive, no?If you expect to be installing many ports, it is probably worth
downloading all the ports directories.SkeletonsA team of compulsive hackers who have forgotten to eat in a frantic
attempt to make a deadline? Something unpleasant lurking in the FreeBSD
attic? No, a skeleton here is a minimal framework that supplies
everything needed to make the ports magic work.MakefileThe most important component of a skeleton is the Makefile. This
contains various statements that specify how the port should be
compiled and installed. Here is the Makefile for
ElectricFence:-
# New ports collection makefile for: Electric Fence
# Version required: 2.0.5
# Date created: 13 November 1997
# Whom: jraynard
#
# $Id$
#
DISTNAME= ElectricFence-2.0.5
CATEGORIES= devel
MASTER_SITES= ${MASTER_SITE_SUNSITE}
MASTER_SITE_SUBDIR= devel/lang/c
-MAINTAINER= jraynard@freebsd.org
+MAINTAINER= jraynard@FreeBSD.org
MAN3= libefence.3
do-install:
${INSTALL_DATA} ${WRKSRC}/libefence.a ${PREFIX}/lib
${INSTALL_MAN} ${WRKSRC}/libefence.3 ${PREFIX}/man/man3
.include <bsd.port.mk>The lines beginning with a "#" sign are comments for the
benefit of human readers (as in most Unix script files).DISTNAME specifies the name of the tarball, but without the
extension.CATEGORIES states what kind of program this is.
In this case, a utility for developers. See the categories section of this
handbook for a complete list.MASTER_SITES is the URL(s) of the master FTP
site, which is used to retrieve the tarball if it is not available on the
local system. This is a site which is regarded as reputable, and is
normally the one from which the program is officially distributed (in
so far as any software is "officially" distributed on the
Internet).MAINTAINER is the email address of the person
who is responsible for updating the skeleton if, for example a new
version of the program comes out.Skipping over the next few lines for a minute, the line
.include <bsd.port.mk> says that the other
statements and commands needed for this port are in a standard file
called bsd.port.mk. As these are the same for
all ports, there is no point in duplicating them all over the place,
so they are kept in a single standard file.This is probably not the place to go into a detailed examination
of how Makefiles work; suffice it to say that the line starting with
MAN3 ensures that the ElectricFence man page is
compressed after installation, to help conserve your precious disk
space. The original port did not provide an
install target, so the three lines from
do-install ensure that the files produced by
this port are placed in the correct destination.The files directoryThe file containing the checksum for the port is called
md5, after the MD5 algorithm used for ports
checksums. It lives in a directory with the slightly confusing name
of files.This directory can also contain other miscellaneous files that are
required by the port and do not belong anywhere else.The patches directoryThis directory contains the patches needed to make everything work
properly under FreeBSD.The pkg directoryThis program contains three quite useful files:-COMMENT — a one-line description of
the program.DESCR — a more detailed
description.PLIST — a list of all the files
that will be created when the program is installed.What to do when a port does not work.Oh. You can do one of four (4) things :Fix it yourself. Technical details on how ports work can be
found in Porting applications.Gripe. This is done by e-mail only! Send
such e-mail to the maintainer of the port, first. Type
make maintainer or read the
Makefile to find the maintainer's email
address. Remember to include the name/version of
the port (copy the $Id: line from the
Makefile), and the output leading up-to the
error, inclusive. If you do not get a satisfactory response,
you can try filing a bug report with send-pr.
Forget it. This is the easiest for most — very few of the
programs in ports can be classified as essential!Grab the pre-compiled package from a ftp server. The
“master” package collection is on FreeBSD's FTP server
in the packages
directory, though check your local mirror first, please!
These are more likely to work (on the whole) than trying to compile
from source and a lot faster besides! Use the &man.pkg.add.1;
program to install a package file on your
system.Some Questions and AnswersQ. I thought this was going to be a discussion about
modems??!A. Ah. You must be thinking of the serial ports on the back of
your computer. We are using “port” here to mean the
result of “porting” a program from one version of Unix
to another. (It is an unfortunate bad habit of computer people to
use the same word to refer to several completely different
things).Q. I thought you were supposed to use packages to install extra
programs?A. Yes, that is usually the quickest and easiest way of doing
it.Q. So why bother with ports then?A. Several reasons:-The licensing conditions on some software distributions
require that they be distributed as source code, not
binaries.Some people do not trust binary distributions. At least
with source code you can (in theory) read through it and look
for potential problems yourself.If you have some local patches, you will need the source to
add them yourself.You might have opinions on how a program should be compiled
that differ from the person who did the package — some
people have strong views on what optimisation setting should be
used, whether to build debug versions and then strip them or
not, etc. etc.Some people like having code around, so they can read it if
they get bored, hack around with it, borrow from it (licence
terms permitting, of course!) and so on.If you ain't got the source, it ain't software! ;-) Q. What is a patch?A. A patch is a small (usually) file that specifies how to go
from one version of a file to another. It contains text that says,
in effect, things like “delete line 23”, “add
these two lines after line 468” or “change line 197 to
this”. Also known as a “diff”, since it is
generated by a program of that name. Q. What is all this about
tarballs?A. It is a file ending in .tar or
.tar.gz (with variations like
.tar.Z, or even .tgz if
you are trying to squeeze the names into a DOS filesystem).Basically, it is a directory tree that has been archived into a
single file (.tar) and optionally compressed
(.gz). This technique was originally used for
Tape ARchives (hence the
name tar), but it is a widely used way of
distributing program source code around the Internet.You can see what files are in them, or even extract them
yourself, by using the standard Unix tar program, which comes with
the base FreeBSD system, like this:-&prompt.user; tar tvzf foobar.tar.gz
&prompt.user; tar xzvf foobar.tar.gz
&prompt.user; tar tvf foobar.tar
&prompt.user; tar xvf foobar.tar Q. And a checksum?A. It is a number generated by adding up all the data in the
file you want to check. If any of the characters change, the
checksum will no longer be equal to the total, so a simple
comparison will allow you to spot the difference. (In practice, it
is done in a more complicated way to spot problems like
position-swapping, which will not show up with a simplistic
addition).Q. I did what you said for compiling
ports from a CDROM and it worked great until I tried to
install the kermit port:-&prompt.root; make install
>> cku190.tar.gz doesn't seem to exist on this system.
>> Attempting to fetch from ftp://kermit.columbia.edu/kermit/archives/.Why can it not be found? Have I got a dud CDROM?A. The licensing terms for kermit do not allow us to put the
tarball for it on the CDROM, so you will have to fetch it by hand
— sorry! The reason why you got all those error messages was
because you were not connected to the Internet at the time. Once
you have downloaded it from any of the sites above, you can re-start
the process (try and choose the nearest site to you, though, to save
your time and the Internet's bandwidth).Q. I did that, but when I tried to put it into
/usr/ports/distfiles I got some error about not
having permission.A. The ports mechanism looks for the tarball in
/usr/ports/distfiles, but you will not be able
to copy anything there because it is sym-linked to the CDROM, which
is read-only. You can tell it to look somewhere else by
doing&prompt.root; make DISTDIR=/where/you/put/it installQ. Does the ports scheme only work if you have everything in
/usr/ports? My system administrator says I must
put everything under
/u/people/guests/wurzburger, but it does not
seem to work.A. You can use the PORTSDIR and
PREFIX variables to tell the ports mechanism to
use different directories. For instance,&prompt.root; make PORTSDIR=/u/people/guests/wurzburger/ports installwill compile the port in
/u/people/guests/wurzburger/ports and install
everything under /usr/local.&prompt.root; make PREFIX=/u/people/guests/wurzburger/local installwill compile it in /usr/ports and install
it in /u/people/guests/wurzburger/local.And of course&prompt.root; make PORTSDIR=.../ports PREFIX=.../local installwill combine the two (it is too long to fit on the page if I
write it in full, but I am sure you get the idea).If you do not fancy typing all that in every time you install a
port (and to be honest, who would?), it is a good idea to put these
variables into your environment.Q. I do not have a FreeBSD CDROM, but I would like to have all
the tarballs handy on my system so I do not have to wait for a
download every time I install a port. Is there an easy way to get
them all at once?A. To get every single tarball for the ports collection,
do&prompt.root; cd /usr/ports
&prompt.root; make fetchFor all the tarballs for a single ports directory, do&prompt.root; cd /usr/ports/directory
&prompt.root; make fetchand for just one port — well, I think you have guessed
already.Q. I know it is probably faster to fetch the tarballs from one
of the FreeBSD mirror sites close by. Is there any way to tell the
port to fetch them from servers other than ones listed in the
MASTER_SITES?A. Yes. If you know, for example, ftp.FreeBSD.ORG is much closer than sites
+ role="fqdn">ftp.FreeBSD.org is much closer than sites
listed in MASTER_SITES, do as following
example.&prompt.root; cd /usr/ports/directory
-&prompt.root; make MASTER_SITE_OVERRIDE=ftp://ftp.FreeBSD.ORG/pub/FreeBSD/ports/distfiles/ fetch
+&prompt.root; make MASTER_SITE_OVERRIDE=ftp://ftp.FreeBSD.org/pub/FreeBSD/ports/distfiles/ fetchQ. I want to know what files make is going to need before it
tries to pull them down.A. make fetch-list will display a list of
the files needed for a port.Q. Is there any way to stop the port from compiling? I want to
do some hacking on the source before I install it, but it is a bit
tiresome having to watch it and hit control-C every time.A. Doing make extract will stop it after it
has fetched and extracted the source code.Q. I am trying to make my own port and I want to be able to
stop it compiling until I have had a chance to see if my patches
worked properly. Is there something like make
extract, but for patches?A. Yep, make patch is what you want. You
will probably find the PATCH_DEBUG option useful
as well. And by the way, thank you for your efforts!Q. I have heard that some compiler options can cause bugs. Is
this true? How can I make sure that I compile ports with the right
settings?A. Yes, with version 2.6.3 of gcc (the
version shipped with FreeBSD 2.1.0 and 2.1.5), the
option could result in buggy code unless you
used the option as well.
(Most of the ports do not use ). You
should be able to specify the compiler options
used by something like&prompt.root; make CFLAGS='-O2 -fno-strength-reduce' installor by editing /etc/make.conf, but
unfortunately not all ports respect this. The surest way is to do
make configure, then go into the source directory
and inspect the Makefiles by hand, but this can get tedious if the
source has lots of sub-directories, each with their own
Makefiles.Q. There are so many ports it is hard to find the one I want.
Is there a list anywhere of what ports are available?A. Look in the INDEX file in
/usr/ports. If you would like to search the
ports collection for a keyword, you can do that too. For example,
you can find ports relevant to the LISP programming language
using:&prompt.user; cd /usr/ports
&prompt.user; make search key=lispQ. I went to install the foo port but the
system suddenly stopped compiling it and starting compiling the
bar port. What is going on?A. The foo port needs something that is
supplied with bar — for instance, if
foo uses graphics, bar might
have a library with useful graphics processing routines. Or
bar might be a tool that is needed to compile the
foo port. Q. I installed the
grizzle program from the ports and frankly it is
a complete waste of disk space. I want to delete it but I do not
know where it put all the files. Any clues?A. No problem, just do&prompt.root; pkg_delete grizzle-6.5Alternatively, you can do&prompt.root; cd /usr/ports/somewhere/grizzle
&prompt.root; make deinstall
Q. Hang on a minute, you have to know the version number to use
that command. You do not seriously expect me to remember that, do
you??A. Not at all, you can find it out by doing&prompt.root; pkg_info -a | grep grizzle
Information for grizzle-6.5:
grizzle-6.5 - the combined piano tutorial, LOGO interpreter and shoot 'em up arcade game.Q. Talking of disk space, the ports directory seems to be
taking up an awful lot of room. Is it safe to go in there and
delete things?A. Yes, if you have installed the program and are fairly
certain you will not need the source again, there is no point in
keeping it hanging around. The best way to do this is&prompt.root; cd /usr/ports
&prompt.root; make cleanwhich will go through all the ports subdirectories and delete
everything except the skeletons for each port.Q. I tried that and it still left all those tarballs or
whatever you called them in the distfiles
directory. Can I delete those as well?A. Yes, if you are sure you have finished with them, those can
go as well.Q. I like having lots and lots of programs to play with. Is
there any way of installing all the ports in one go?A. Just do&prompt.root; cd /usr/ports
&prompt.root; make installQ. OK, I tried that, but I thought it would take a very long
time so I went to bed and left it to get on with it. When I looked
at the computer this morning, it had only done three and a half
ports. Did something go wrong?A. No, the problem is that some of the ports need to ask you
questions that we cannot answer for you (eg “Do you want to
print on A4 or US letter sized paper?”) and they need to have
someone on hand to answer them.Q. I really do not want to spend all day staring at the
monitor. Any better ideas?A. OK, do this before you go to bed/work/the local
park:-&prompt.root cd /usr/ports
&prompt.root; make -DBATCH installThis will install every port that does not
require user input. Then, when you come back, do&prompt.root; cd /usr/ports
&prompt.root; make -DIS_INTERACTIVE installto finish the job.Q. At work, we are using frobble, which is
in your ports collection, but we have altered it quite a bit to get
it to do what we need. Is there any way of making our own packages,
so we can distribute it more easily around our sites?A. No problem, assuming you know how to make patches for your
changes:-&prompt.root; cd /usr/ports/somewhere/frobble
&prompt.root; make extract
&prompt.root; cd work/frobble-2.8
[Apply your patches]
&prompt.root; cd ../..
&prompt.root; make packageQ. This ports stuff is really clever. I am desperate to find
out how you did it. What is the secret?A. Nothing secret about it at all, just look at the
bsd.ports.mk and
bsd.ports.subdir.mk files in your makefiles
directory.Readers with an aversion to intricate shell-scripts are
advised not to follow this link...)Making a port yourselfContributed by &a.jkh;, &a.gpalmer;, &a.asami;, &a.obrien;,
and &a.hoek;. 28 August 1996.So, now you are interested in making your own port or upgrading
an existing one? Great!What follows are some guidelines for creating a new port for
FreeBSD. If you want to upgrade an existing port, you should read this
and then read .When this document is not sufficiently detailed, you should refer to
/usr/ports/Mk/bsd.port.mk, which all port Makefiles
include. Even if you do not hack Makefiles daily, it is well
commented, and you will still gain much knowledge from it.
Additionally, you may send specific questions to &a.ports;.Only a fraction of the overridable variables
(VAR) are mentioned in
this document. Most (if not all) are documented at the start of
bsd.port.mk. This file users a non-standard tab
setting. Emacs and
Vim should recognise the setting on loading
the file. Both vi and ex can be
set to use the correct value by typing :set tabstop=4
once the file has been loaded.Quick PortingThis section tells you how to do a quick port. In many cases, it
is not enough, but we will see.First, get the original tarball and put it into
DISTDIR, which defaults to
/usr/ports/distfiles.The following assumes that the software compiled out-of-the-box,
i.e., there was absolutely no change required for the port to work
on your FreeBSD box. If you needed to change something, you will
have to refer to the next section too.Writing the MakefileThe minimal Makefile would look something
like this:
# New ports collection makefile for: oneko
# Version required: 1.1b
# Date created: 5 December 1994
# Whom: asami
#
# $Id$
#
DISTNAME= oneko-1.1b
CATEGORIES= games
MASTER_SITES= ftp://ftp.cs.columbia.edu/archives/X11R5/contrib/
-MAINTAINER= asami@FreeBSD.ORG
+MAINTAINER= asami@FreeBSD.org
MAN1= oneko.1
MANCOMPRESSED= yes
USE_IMAKE= yes
.include <bsd.port.mk>See if you can figure it out. Do not worry about the contents
of the $Id$ line, it will be filled in
automatically by CVS when the port is imported to our main ports
tree. You can find a more detailed example in the sample Makefile section.Writing the description filesThere are three description files that are required for any
port, whether they actually package or not. They are
COMMENT, DESCR, and
PLIST, and reside in the
pkg subdirectory.COMMENTThis is the one-line description of the port.
Please do not include the package name (or
version number of the software) in the comment. The comment
should begin with a capital, and end without a period. Here
is an example:
A cat chasing a mouse all over the screenDESCRThis is a longer description of the port. One to a few
paragraphs concisely explaining what the port does is
sufficient.This is not a manual or an in-depth
description on how to use or compile the port! Please
be careful if you are copying from the
README or manpage; too often
they are not a concise description of the port or are in an
awkward format (e.g., manpages have justified spacing). If the
ported software has an official WWW homepage, you should list it
here. Prefix one of the websites with
WWW: so that automated tools will work
correctly.It is recommended that you sign your name at the end of this
file, as in:
This is a port of oneko, in which a cat chases a poor mouse all over
the screen.
:
(etc.)
WWW: http://www.oneko.org/
- Satoshi
asami@cs.berkeley.eduPLISTThis file lists all the files installed by the port. It is
also called the “packing list” because the package is
generated by packing the files listed here. The pathnames are
relative to the installation prefix (usually
/usr/local or
/usr/X11R6). If you are using the
MANn variables (as
you should be), do not list any manpages here.Here is a small example:
bin/oneko
lib/X11/app-defaults/Oneko
lib/X11/oneko/cat1.xpm
lib/X11/oneko/cat2.xpm
lib/X11/oneko/mouse.xpm
@dirrm lib/X11/onekoRefer to the &man.pkg.create.1; man page for details on the
packing list.You should list all the files, but not the name directories,
in the list. Also, if the port creates directories for itself
during installtion, make sure to add @dirrm
lines as necessary to remove them when the port is
deleted.It is recommended that you keep all the filenames in this
file sorted alphabetically. It will make verifying the changes
when you upgrade the port much easier.Creating a packing list manually can be a very tedious
task. If the port installs a large numbers of files, creating the packing list
automatically might save time.Creating the checksum fileJust type make makesum. The ports make rules
will automatically generate the file
files/md5.Testing the portYou should make sure that the port rules do exactly what you
want it to do, including packaging up the port. These are the
important points you need to verify.PLIST does not contain anything not
installed by your portPLIST contains everything that is
installed by your portYour port can be installed multiple times using the
reinstall targetYour port cleans up
after itself upon deinstallRecommended test orderingmake installmake packagemake deinstallpkg_add package-namemake deinstallmake reinstallmake packageMake sure that there are not any warnings issued in any of the
package and
deinstall stages, After step 3, check to
see if all the new directories are correctly deleted. Also, try
using the software after step 4, to ensure that is works correctly
when installed from a package.Checking your port with portlintPlease use portlint to see if your port
conforms to our guidelines. The portlint program
is part of the ports collection. In particular, your may want to
check if the Makefile is in
the right shape and the package is named
appropriately.Submitting the portFirst, make sure you have read the Do's and Dont's section.Now that you are happy with your port, the only thing remaining
is to put it in the main FreeBSD ports tree and make everybody else
happy about it too. We do not need your work
directory or the pkgname.tgz package, so delete
them now. Next, simply include the output of shar `find
port_dir` in a bug report and send it with the
&man.send-pr.1; program (see Bug
Reports and General Commentary for more information about
&man.send-pr.1;. If the uncompressed port is larger than 20KB,
you should compress it into a tarfile and use &man.uuencode.1;
before including it in the bug report (uuencoded tarfiles are
acceptable even if the bug report is smaller than 20KB but are not
preferred). Be sure to classify the bug report as category
ports and class
change-request. (Do not mark the report
confidential!)One more time, do not include the original source
distfile, the work directory, or the package
you built with make package.In the past, we asked you to upload new port submissions in
our ftp site (ftp.FreeBSD.org). This
is no longer recommended as read access is turned off on that
incoming/ directory of that site due to the
large amount of pirated software showing up there.We will look at your port, get back to you if necessary, and put
it in the tree. Your name will also appear in the list of
“Additional FreeBSD contributors” on the FreeBSD
Handbook and other files. Isn't that great?!? :)Slow PortingOk, so it was not that simple, and the port required some
modifications to get it to work. In this section, we will explain,
step by step, how to modify it to get it to work with the ports
paradigm.How things workFirst, this is the sequence of events which occurs when the user
first types make in your port's directory, and
you may find that having bsd.port.mk in another
window while you read this really helps to understand it.But do not worry if you do not really understand what
bsd.port.mk is doing, not many people do...
:>The fetch target is run. The
fetch target is responsible for making
sure that the tarball exists locally in
DISTDIR. If fetch
cannot find the required files in DISTDIR it
will look up the URL MASTER_SITES, which is
set in the Makefile, as well as our main ftp site at ftp://ftp.FreeBSD.org/pub/FreeBSD/ports/distfiles/,
where we put sanctioned distfiles as backup. It will then
attempt to fetch the named distribution file with
FETCH, assuming that the requesting site has
direct access to the Internet. If that succeeds, it will save
the file in DISTDIR for future use and
proceed.The extract target is run. It
looks for your port's distribution file (typically a gzip'd
tarball) in DISTDIR and unpacks it into a
temporary subdirectory specified by WRKDIR
(defaults to work).The patch target is run. First,
any patches defined in PATCHFILES are
applied. Second, if any patches are found in
PATCHDIR (defaults to the
patches subdirectory), they are applied at
this time in alphabetical order.The configure target is run. This
can do any one of many different things.If it exists, scripts/configure is
run.If HAS_CONFIGURE or
GNU_CONFIGURE is set,
WRKSRC/configure is
run.If USE_IMAKE is set,
XMKMF (default: xmkmf
-a) is run.The build target is run. This is
responsible for descending into the port's private working
directory (WRKSRC) and building it. If
USE_GMAKE is set, GNU make
will be used, otherwise the system make will
be used.The above are the default actions. In addition, you can define
targets
pre-something or
post-something,
or put scripts with those names, in the scripts
subdirectory, and they will be run before or after the default
actions are done.For example, if you have a post-extract
target defined in your Makefile, and a file
pre-build in the scripts
subdirectory, the post-extract target will
be called after the regular extraction actions, and the
pre-build script will be executed before the
default build rules are done. It is recommended that you use
Makefile targets if the actions are simple
enough, because it will be easier for someone to figure out what
kind of non-default action the port requires.The default actions are done by the
bsd.port.mk targets
do-something.
For example, the commands to extract a port are in the target
do-extract. If you are not happy with the
default target, you can fix it by redefining the
do-something
target in your Makefile.The “main” targets (e.g.,
extract,
configure, etc.) do nothing more than
make sure all the stages up to that one are completed and call
the real targets or scripts, and they are not intended to be
changed. If you want to fix the extraction, fix
do-extract, but never ever touch
extract!Now that you understand what goes on when the user types
make, let us go through the recommended steps to
create the perfect port.Getting the original sourcesGet the original sources (normally) as a compressed tarball
(foo.tar.gz or
foo.tar.Z) and copy
it into DISTDIR. Always use
mainstream sources when and where you
can.If you cannot find a ftp/http site that is well-connected to the
net, or can only find sites that have irritatingly non-standard
formats, you might want to put a copy on a reliable ftp or http
server that you control (e.g., your home page). Make sure you set
MASTER_SITES to reflect your choice.If you cannot find somewhere convenient and reliable to put the
distfile (if you are a FreeBSD committer, you can just put it in
your public_html/ directory on
freefall), we can “house” it ourselves
by putting it on
ftp://ftp.FreeBSD.org/pub/FreeBSD/ports/distfiles/LOCAL_PORTS/
as the last resort. Please refer to this location as
MASTER_SITE_LOCAL. Send mail to the &a.ports;if
you are not sure what to do.If your port's distfile changes all the time for no good reason,
consider putting the distfile in your home page and listing it as
the first MASTER_SITES. This will prevent users
from getting checksum mismatch errors, and
also reduce the workload of maintainers of our ftp site. Also, if
there isonly one master site for the port, it is recommended that
you house a backup at your site and list it as the second
MASTER_SITES.If your port requires some additional `patches' that are
available on the Internet, fetch them too and put them in
DISTDIR. Do not worry if they come from a site
other than where you got the main source tarball, we have a way to
handle these situations (see the description of PATCHFILES below).Modifying the portUnpack a copy of the tarball in a private directory and make
whatever changes are necessary to get the port to compile properly
under the current version of FreeBSD. Keep careful
track of everything you do, as you will be automating
the process shortly. Everything, including the deletion, addition
or modification of files should be doable using an automated script
or patch file when your port is finished.If your port requires significant user interaction/customization
to compile or install, you should take a look at one of Larry Wall's
classic Configure scripts and perhaps do
something similar yourself. The goal of the new ports collection is
to make each port as “plug-and-play” as possible for the
end-user while using a minimum of disk space.Unless explicitly stated, patch files, scripts, and other
files you have created and contributed to the FreeBSD ports
collection are assumed to be covered by the standard BSD copyright
conditions.PatchingIn the preparation of the port, files that have been added or
changed can be picked up with a recursive diff for later feeding to
patch. Each set of patches you wish to apply should be collected
into a file named
patch-xx where
xx denotes the sequence in which the
patches will be applied — these are done in
alphabetical order, thus aa
first, ab second and so on. These files should
be stored in PATCHDIR, from where they will be
automatically applied. All patches should be relative to
WRKSRC (generally the directory your port's
tarball unpacks itself into, that being where the build is done).
To make fixes and upgrades easier, you should avoid having more than
one patch fix the same file (e.g., patch-aa and
patch-ab both changing
WRKSRC/foobar.c).ConfiguringInclude any additional customization commands to your
configure script and save it in the
scripts subdirectory. As mentioned above, you
can also do this as Makefile targets and/or
scripts with the name pre-configure or
post-configure.Handling user inputIf your port requires user input to build, configure or install,
then set IS_INTERACTIVE in your Makefile. This
will allow “overnight builds” to skip your port if the
user sets the variable BATCH in his environment (and
if the user sets the variable INTERACTIVE, then
only those ports requiring interaction are
built).It is also recommended that if there are reasonable default
answers to the questions, you check the
PACKAGE_BUILDING variable and turn off the
interactive script when it is set. This will allow us to build the
packages for CD-ROMs and ftp.Configuring the MakefileConfiguring the Makefile is pretty simple, and again we suggest
that you look at existing examples before starting. Also, there is a
sample Makefile in this
handbook, so take a look and please follow the ordering of variables
and sections in that template to make your port easier for others to
read.Now, consider the following problems in sequence as you design
your new Makefile:The original sourceDoes it live in DISTDIR as a standard gzip'd
tarball? If so, you can go on to the next step. If not, you should
look at overriding any of the EXTRACT_CMD,
EXTRACT_BEFORE_ARGS,
EXTRACT_AFTER_ARGS,
EXTRACT_SUFX, or DISTFILES
variables, depending on how alien a format your port's distribution
file is. (The most common case is
EXTRACT_SUFX=.tar.Z, when the tarball is
condensed by regular compress, not gzip.)In the worst case, you can simply create your own
do-extract target to override the default,
though this should be rarely, if ever, necessary.DISTNAMEYou should set DISTNAME to be the base name
of your port. The default rules expect the distribution file list
(DISTFILES) to be named
DISTNAMEEXTRACT_SUFX which, if
it is a normal tarball, is going to be something like
foozolix-1.0.tar.gz for a setting of
DISTNAME=foozolix-1.0.The default rules also expect the tarball(s) to extract into a
subdirectory called
work/DISTNAME, e.g.
work/foozolix-1.0/.All this behavior can be overridden, of course; it simply
represents the most common time-saving defaults. For a port
requiring multiple distribution files, simply set
DISTFILES explicitly. If only a subset of
DISTFILES are actual extractable archives, then
set them up in EXTRACT_ONLY, which will override
the DISTFILES list when it comes to extraction,
and the rest will be just left in DISTDIR for
later use.PKGNAMEIf DISTNAME does not conform to our guidelines for a good package
name, you should set the PKGNAME
variable to something better. See the abovementioned guidelines for
more details.CATEGORIESWhen a package is created, it is put under
/usr/ports/packages/All and links are made from
one or more subdirectories of
/usr/ports/packages. The names of these
subdirectories are specified by the variable
CATEGORIES. It is intended to make life easier
for the user when he is wading through the pile of packages on the
ftp site or the CD-ROM. Please take a look at the existing categories and pick the ones
that are suitable for your port.This list also determines where in the ports tree the port is
imported. If you put more than one category here, it is assumed
that the port files will be put in the subdirectory with the name in
the first category. See the categories section for more
discussion about how to pick the right categories.If you port truly belongs to something that is different from
all the existing ones, you can even create a new category name. In
that case, please send mail to the &a.ports; to propose a new
category.There is no error checking for category names. make
package will happily create a new directory if you
mistype the category name, so be careful!MASTER_SITESRecord the directory part of the ftp/http-URL pointing at the
original tarball in MASTER_SITES. Do not forget
the trailing slash (/)!The make macros will try to use this
specification for grabbing the distribution file with
FETCH if they cannot find it already on the
system.It is recommended that you put multiple sites on this list,
preferably from different continents. This will safeguard against
wide-area network problems, and we are even planning to add support
for automatically determining the closest master site and fetching
from there!If the original tarball is part of one of the following popular
archives: X-contrib, GNU, Perl CPAN, TeX CTAN, or Linux Sunsite, you
refer to those sites in an easy compact form using
MASTER_SITE_XCONTRIB,
MASTER_SITE_GNU,
MASTER_SITE_PERL_CPAN,
MASTER_SITE_TEX_CTAN, and
MASTER_SITE_SUNSITE. Simply set
MASTER_SITE_SUBDIR to the path with in the
archive. Here is an example:
MASTER_SITES= ${MASTER_SITE_XCONTRIB}
MASTER_SITE_SUBDIR= applicationsThe user can also set the MASTER_SITE_*
variables in /etc/make.conf to override our
choices, and use their favorite mirrors of these popular archives
instead.PATCHFILESIf your port requires some additional patches that are available
by ftp or http, set PATCHFILES to the names of
the files and PATCH_SITES to the URL of the
directory that contains them (the format is the same as
MASTER_SITES).If the patch is not relative to the top of the source tree
(i.e., WKRSRC) because it contains some extra
pathnames, set PATCH_DIST_STRIP accordingly. For
instance, if all the pathnames in the patch have an extra
foozolix-1.0/ in front of the filenames, then set
PATCH_DIST_STRIP=-p1.Do not worry if the patches are compressed, they will be
decompressed automatically if the filenames end with
.gz or .Z.If the patch is distributed with some other files, such as
documentation, in a gzip'd tarball, you cannot just use
PATCHFILES. If that is the case, add the name
and the location of the patch tarball to
DISTFILES and MASTER_SITES.
Then, from the pre-patch target, apply the
patch either by running the patch command from there, or copying the
patch file into the PATCHDIR directory and
calling it
patch-xx.Note the tarball will have been extracted alongside the
regular source by then, so there is no need to explicitly extract
it if it is a regular gzip'd or compress'd tarball. If you do the
latter, take extra care not to overwrite something that already
exists in that directory. Also do not forget to add a command to
remove the copied patch in the pre-clean
target.MAINTAINERSet your mail-address here. Please. :)For detailed description of the responsibility of maintainers,
refer to MAINTAINER on
Makefiles section.DependenciesMany ports depend on other ports. There are five variables that
you can use to ensure that all the required bits will be on the
user's machine. There are also some pre-supported dependency
variables for common cases, plus a few more to control the behaviour
of dependencies.LIB_DEPENDSThis variable specifies the shared libraries this port depends
on. It is a list of
lib:dir:target
tuples where lib is the name of the
shared library, and dir is the
directory in which to find it in case it is not available, and
target is the target to call in that
directory. For example, LIB_DEPENDS=
jpeg.9:${PORTSDIR}/graphics/jpeg:install
will check for a shared jpeg library with major version 9, and
descend into the graphics/jpeg subdirectory
of your ports tree to build and install it if it is not found.
The target part can be omitted if it is
equal to DEPENDS_TARGET (which defaults to
install).The lib part is an argument given
to ldconfig -r | grep -wF. There shall be no
reqular expressions in this variable.The dependency is checked twice, once from within the
extract target and then from within the
install target. Also, the name of the
dependency is put in to the package so that
pkg_add will automatically install it if it is
not on the user's system.RUN_DEPENDSThis variable specifies executables or files this port depends
on during run-time. It is a list of
path:dir:target
tuples where path is the name of the
executable or file, and dir is the
directory in which to find it in case it is not available, and
target is the target to call in that
directory. If path starts with a slash
(/), it is treated as a file and its existence
is tested with test -e; otherwise, it is
assumed to be an executable, and which -s is
used to determine if the program exists in the user's search
path.For example,
RUN_DEPENDS= ${PREFIX}/etc/innd:${PORTSDIR}/news/inn \
wish8.0:${PORTSDIR}/x11-toolkits/tk80will check if the file or directory
/usr/local/etc/innd exists, and build and
install it from the news/inn subdirectory of
the ports tree if it is not found. It will also see if an
executable called wish8.0 is in your search
path, and descend into the x11-toolkits/tk80
subdirectory of your ports tree to build and install it if it is
not found.In this case, innd is actually an
executable; if an executable is in a place that is not expected
to be in a normal user's search path, you should use the full
pathname.The dependency is checked from within the
install target. Also, the name of the
dependency is put in to the package so that
pkg_add will automatically install it if it is
not on the user's system. The target
part can be omitted if it is the same
DEPENDS_TARGET.BUILD_DEPENDSThis variable specifies executables or files this port
requires to build. Like RUN_DEPENDS, it is a
list of
path:dir:target
tuples. For example, BUILD_DEPENDS=
unzip:${PORTSDIR}/archivers/unzip will check
for an executable called unzip, and descend
into the archivers/unzip subdirectory of your
ports tree to build and install it if it is not found.“build” here means everything from extracting to
compilation. The dependency is checked from within the
extract target. The
target part can be omitted if it is
the same as DEPENDS_TARGETFETCH_DEPENDSThis variable specifies executables or files this port
requires to fetch. Like the previous two, it is a list of
path:dir:target
tuples. For example, FETCH_DEPENDS=
ncftp2:${PORTSDIR}/net/ncftp2 will check for an
executable called ncftp2, and descend into the
net/ncftp2 subdirectory of your ports tree to
build and install it if it is not found.The dependency is checked from within the
fetch target. The
target part can be omitted if it is the
same as DEPENDS_TARGET.DEPENDSIf there is a dependency that does not fall into either of the
above four categories, or your port requires to have the source of
the other port extracted in addition to having them installed,
then use this variable. This is a list of
dir:target,
as there is nothing to check, unlike the previous four. The
target part can be omitted if it is the
same as DEPENDS_TARGET.Common dependency variablesDefine USE_XLIB=yes if your port requires
the X Window System to be installed (it is implied by
USE_IMAKE). Define
USE_GMAKE=yes if your port requires GNU
make instead of BSD make.
Define USE_AUTOCONF=yes if your port requires
GNU autoconf to be run. Define USE_QT=yes if
your port uses the latest qt toolkit. Use
USE_PERL5=yes if your port requires version 5
of the perl language. (The last is especially important since
some versions of FreeBSD has perl5 as part of the base system
while others do not.)Notes on dependenciesAs mentioned above, the default target to call when a
dependency is required is DEPENDS_TARGET.
It defaults to install. This is a user
variable; is is never defined in a port's
Makefile. If your port needs a special way
to handle a dependency, use the :target part of
the *_DEPENDS variables instead of redefining
DEPENDS_TARGET.When you type make clean, its dependencies
are automatically cleaned too. If you do not wish this to happen,
define the variable NOCLEANDEPENDS in your
environment.To depend on another port unconditionally, it is customary to
use the string nonexistent as the first field
of BUILD_DEPENDS or
RUN_DEPENDS. Use this only when you need to
the to get to the source of the other port. You can often save
compilation time by specifying the target too. For
instance
BUILD_DEPENDS= /nonexistent:${PORTSDIR}/graphics/jpeg:extract
will always descend to the JPEG port and extract it.Do not use DEPENDS unless there is no other
way the behaviour you want can be accomplished. It will cause the
other port to be always build (and installed, by default), and the
dependency will go into the packages as well. If this is really
what you need, I recommend you write it as
BUILD_DEPENDS and
RUN_DEPENDS instead—at least the
intention will be clear.Building mechanismsIf your package uses GNU make, set
USE_GMAKE=yes. If your package uses
configure, set
HAS_CONFIGURE=yes. If your package uses GNU
configure, set
GNU_CONFIGURE=yes (this implies
HAS_CONFIGURE). If you want to give some extra
arguments to configure (the default argument list
--prefix=${PREFIX} for GNU
configure and empty for non-GNU
configure), set those extra arguments in
CONFIGURE_ARGS. If your package uses GNU
autoconf, set
USE_AUTOCONF=yes. This implies
GNU_CONFIGURE, and will cause
autoconf to be run before
configure.If your package is an X application that creates
Makefiles from Imakefiles
using imake, then set
USE_IMAKE=yes. This will cause the configure
stage to automatically do an xmkmf -a. If the
flag is a problem for your port, set
XMKMF=xmkmf. If the port uses
imake but does not understand the
install.man target,
NO_INSTALL_MANPAGES=yes should be set. In
addition, the author of the original port should be shot. :>If your port's source Makefile has
something else than all as the main build
target, set ALL_TARGET accordingly. Same goes
for install and
INSTALL_TARGET.Special considerationsThere are some more things you have to take into account when you
create a port. This section explains the most common of those.ldconfigIf your port installs a shared library, add a
post-install target to your
Makefile that runs ${LDCONFIG}
-m on the directory where the new library is installed
(usually PREFIX/lib) to
register it into the shared library cache.Also, add a matching @exec /sbin/ldconfig -m
and @unexec /sbin/ldconfig -R pair to your
pkg/PLIST file so that a user who installed the
package can start using the shared library immediately and
deinstallation will not cause the system to still believe the
library is there. These lines should immediately follow the line
for the shared library itself, as in:
lib/libtvl80.so.1
@exec /sbin/ldconfig -m %D/lib
@unexec /sbin/ldconfig -RNever, ever, ever add a line that says
ldconfig without any arguments to your
Makefile or pkg/PLIST.
This will reset the shared library cache to the contents of
/usr/lib only, and will royally screw up the
user's machine ("Help, xinit does not run anymore after I install
this port!"). Anybody who does this will be shot and cut in 65,536
pieces by a rusty knife and have is liver chopped out by a bunch of
crows and will eternally rot to death in the deepest bowels of hell
(not necessarily in that order…)ELF supportSince FreeBSD is moving to ELF shortly after 3.0-RELEASE, we need
to convert many ports that build shared libraries to support ELF.
Complicating this task is that a 3.0 system can run as both ELF and
a.out, and we wish to unofficially support the 2.2 as long as
possible. Below are the guidelines on how to convert a.out only ports
to support both a.out and ELF compilation.Some part of this list is only applicable during the conversion,
but will be left here for awhile for reference in case you have come
across some old port you wish to upgrade.Moving a.out libraries out of the wayA.out libraries should be moved out of
/usr/local/lib and similar to an
aout subdirectory. (If you do not move them out
of the way, ELF ports will happily overwrite a.out libraries.) The
move-aout-libs target in the 3.0-CURRENT
src/Makefile (called from
aout-to-elf) will do this for you. It will
only move a.out libs so it is safe to call it on a system with both
ELF and a.out libs in the standard directories.FormatThe ports tree will build packages in the format the machine is
in. This means a.out for 2.2 and a.out or ELF for 3.0 depending on
what `objformat` returns. Also, once users move
a.out libraries to a subdirectory, building a.out libraries will be
unsupported. (I.e., it may still work if you know what you are
doing, but you are on your own.)If a port only works for a.out, set
BROKEN_ELF to a string describing the reason
why. Such ports will be skipped during a build on an ELF
system.PORTOBJFORMATbsd.port.mk will set
PORTOBJFORMAT to aout or
elf and export it in the environments
CONFIGURE_ENV, SCRIPTS_ENV and
MAKE_ENV. (It's always going to be
aout in 2.2-STABLE). It is also passed to
PLIST_SUB as
PORTOBJFORMAT=${PORTOBJFORMAT}. (See comment on
ldconfig lines below.)The variable is set using this line in
bsd.port.mk:
PORTOBJFORMAT!= test -x /usr/bin/objformat && /usr/bin/objformat || echo aoutPorts' make processes should use this variable to decide what to
do. However, if the port's configure script
already automatically detects an ELF system, it is not necessary to
refer to PORTOBJFORMAT.Building shared librariesThe following are differences in handling shared libraries for
a.out and ELF.Shared library versionsAn ELF shared library should be called
libfoo.so.M
where M is the single version number,
and an a.out library should be called
libfoo.so.M.N
where M is the major version and
N is the the minor version number.
Do not mix those; never install an ELF
shared library called
libfoo.so.N.M
or an a.out shared library (or symlink) called
libfoo.so.N.Linker command linesAssuming cc -shared is used rather than
ld directly, the only difference is that you
need to add
on the command line for ELF.You need to install a symlink from
libfoo.so to
libfoo.so.N to make
ELF linkers happy. Since it should be listed in
PLIST too, and it won't hurt in the a.out case
(some ports even require the link for dynamic loading), you should
just make this link regardless of the setting of
PORTOBJFORMAT.LIB_DEPENDSAll port Makefiles are edited to remove minor numbers from
LIB_DEPENDS, and also to have the regexp support
removed. (E.g., foo\\.1\\.\\(33|40\\) becomes
foo.2.) They will be matched using grep
-wF.PLISTPLIST should contain the short (ELF) shlib
names if the a.out minor number is zero, and the long (a.out) names
otherwise. bsd.port.mk will automatically add
.0 to the end of short shlib lines if
PORTOBJFORMAT equals aout, and
will delete the minor number from long shlib names if
PORTOBJFORMAT equals
elf.In cases where you really need to install shlibs with two
versions on an ELF system or those with one version on an a.out
system (for instance, ports that install compatibility libraries for
other operating systems), define the variable
NO_FILTER_SHLIBS. This will turn off the editing
of PLIST mentioned in the previous
paragraph.ldconfigThe ldconfig line in Makefiles should
read:
${SETENV} OBJFORMAT=${PORTOBJFORMAT} ${LDCONFIG} -m ....In PLIST it should read;
@exec /usr/bin/env OBJFORMAT=%%PORTOBJFORMAT%% /sbin/ldconfig -m ...
@unexec /usr/bin/env OBJFORMAT=%%PORTOBJFORMAT%% /sbin/ldconfig -RThis is to ensure that the correct ldconfig
will be called depending on the format of the package, not the
default format of the system.MASTERDIRIf your port needs to build slightly different versions of
packages by having a variable (for instance, resolution, or paper
size) take different values, create one subdirectory per package to
make it easier forusers to see what to do, but try to share as many
files as possible between ports. Typically you only need a very short
Makefile in all but one of the directories if you
use variables cleverly. In the sole Makefiles,
you can use MASTERDIR to specify the directory
where the rest of the files are. Also, use a variable as part of
PKGNAME so
the packages will have different names.This will be best demonstrated by an example. This is part of
japanese/xdvi300/Makefile;
PKGNAME= ja-xdvi${RESOLUTION}-17
:
# default
RESOLUTION?= 300
.if ${RESOLUTION} != 118 && ${RESOLUTION} != 240 && \
${RESOLUTION} != 300 && ${RESOLUTION} != 400
@${ECHO} "Error: invalid value for RESOLUTION: \"${RESOLUTION}\""
@${ECHO} "Possible values are: 118, 240, 300 (default) and 400."
@${FALSE}
.endifjapanese/xdvi300 also has all the regular
patches, package files, etc. If you type make
there, it will take the default value for the resolution (300) and
build the port normally.As for other resolutions, this is the entirexdvi118/Makefile;
RESOLUTION= 118
MASTERDIR= ${.CURDIR}/../xdvi300
.include ${MASTERDIR}/Makefile(xdvi240/Makefile and
xdvi400/Makefile are similar). The
MASTERDIR definition tells
bsd.port.mk that the refulat set of
subdirectories like PATCHDIR and
PKGDIR are to be found under
xdvi300. The RESOLUTION=118
line will override the RESOLUTION=300 line in
xdvi300/Makefile and the port will be built with
resolution set to 118.Shared library versionsFirst, please read our policy on
shared library versioning to understand what to do with
shared library versions in general. Do not blindly assume software
authors know what they are doing; many of them do not. It is very
important that these details are carefully considered, as we have
quite a unique situation where we are trying to have dozens of
potentially incompatible software pairs co-exist. Careless port
imports have caused great trouble regarding shared libraries in the
past (ever wondered why the port jpeg-6b has a
shared library version of 9.0?). If in doubt, send a message to the
&a.ports;. Most of the time, your job ends by determining the right
shared library version and making appropriate patches to implement
it.However, if there is a port which is a different version of the
same software already in the tree, the situation is much more complex.
In short, the FreeBSD implementation does not allow the user to
specify to the linker which version of shared library to link against
(the linker will always pick the highest numbered version). This
means, if there is a libfoo.so.3.2 and
libfoo.so.4.0 in the system, there is no way to
tell the linker to link a particular application to
libfoo.so.3.2. It is essentially completely
overshadowed in terms of compilation-time linkage. In this case, the
only solution is to rename the base part of the
shared library. For instance, change
libfoo.so.4.0 to
libfoo4.so.1.0 so both version 3.2 and 4.0 can be
linked from other ports.ManpagesThe MAN[1-9LN] variables will automatically add
any manpages to pkg/PLIST (this means you must
not list manpages in the
PLIST—see generating PLIST for more). It also
makes the install stage automatically compress or uncompress manpages
depending on the setting of NOMANCOMPRESS in
/etc/make.conf.If your port tries to install multiple names for manpages using
symlinks or hardlinks, you must use the MLINKS
variable to identify these. The link installed by your port will
be destroyed and recreated by bsd.port.mk
to make sure it points to the correct file. Any manpages
listed in MLINKS must not be listed in the
PLIST.To specify whether the manpages are compressed upon installation,
use the MANCOMPRESSED variable. This variable can
take three values, yes, no and
maybe. yes means manpages are
already installed compressed, no means they are
not, and maybe means the software already respects
the value of NOMANCOMPRESS so
bsd.port.mk does not have to do anything
special.MANCOMPRESSED is automatically set to
yes if USE_IMAKE is set and
NO_INSTALL_MANPAGES is not set, and to
no otherwise. You do not have to explicitly define
it unless the default is not suitable for your port.If your port anchors its man tree somewhere other than
PREFIX, you can use the
MANPREFIX to set it. Also, if only manpages in
certain sections go in a non-standard place, such as some Perl modules
ports, you can set individual man paths using
MANsectPREFIX (where
sect is one of 1-9,
L or N).If your manpages go to language-specific subdirectories, set the
name of the languages to MANLANG. The value of
this variable defaults to "" (i.e., English
only).Here is an example that puts it all together.
MAN1= foo.1
MAN3= bar.3
MAN4= baz.4
MLINKS= foo.1 alt-name.8
MANLANG= "" ja
MAN3PREFIX= ${PREFIX}/share/foobar
MANCOMPRESSED= yesThis states that six files are installed by this port;
${PREFIX}/man/man1/foo.1.gz
${PREFIX}/man/ja/man1/foo.1.gz
${PREFIX}/share/foobar/man/man3/bar.3.gz
${PREFIX}/share/foobar/man/ja/man3/bar.3.gz
${PREFIX}/man/man4/baz.4.gz
${PREFIX}/man/ja/man4/baz.4.gzAdditionally ${PREFIX}/man/man8/alt-name.8.gz
may or may-not be installed by your port. Regardless, a
symlink will be made to join the foo(1) manpage and
alt-name(8) manpage.Ports that require MotifThere are many programs that require a Motif library (available
from several commercial vendors, while there is a free clone reported
to be able to run many applications in
x11-toolkits/lesstif) to compile. Since it is a
popular toolkit and their licenses usually permit redistribution of
statically linked binaries, we have made special provisions for
handling ports that require Motif in a way that we can easily compile
binaries linked either dynamically (for people who are compiling from
the port) or statically (for people who distribute packages).REQUIRES_MOTIFIf your port requires Motif, define this variable in the
Makefile. This will prevent people who do not own a copy of Motif
from even attempting to build it.MOTIFLIBThis variable will be set by bsd.port.mk to
be the appropriate reference to the Motif library. Please patch the
source to use this wherever the Motif library is referenced in the
Makefile or
Imakefile.There are two common cases:If the port refers to the Motif library as
-lXm in its Makefile or
Imakefile, simply substitute
${MOTIFLIB} for it.If the port uses XmClientLibs in its
Imakefile, change it to
${MOTIFLIB} ${XTOOLLIB}
${XLIB}.Note that MOTIFLIB (usually) expands to
-L/usr/X11R6/lib -lXm or
/usr/X11R6/lib/libXm.a, so there is no need to
add -L or -l in front.X11 fontsIf your port installs fonts for the X Window system, put them in
X11BASE/lib/X11/fonts/local.
This directory is new to XFree86 release 3.3.3. If it does not exist,
please create it, and print out a message urging the user to update
their XFree86 to 3.3.3 or newer, or at least add this directory to the
font path in /etc/XF86Config.Info filesThe new version of texinfo (included in 2.2.2-RELEASE and onwards)
contains a utility called install-info to add and
delete entries to the dir file. If your port
installs any info documents, please follow this instructions so your
port/package will correctly update the user's
PREFIX/info/dir file. (Sorry
for the length of this section, but is it imperative to weave all the
info files together. If done correctly, it will produce a
beautiful listing, so please bear with me!First, this is what you (as a porter) need to know&prompt.user; install-info --help
install-info [OPTION]... [INFO-FILE [DIR-FILE]]
Install INFO-FILE in the Info directory file DIR-FILE.
Options:
--delete Delete existing entries in INFO-FILE;
don't insert any new entries.
:
--entry=TEXT Insert TEXT as an Info directory entry.
:
--section=SEC Put this file's entries in section SEC of the directory. :This program will not actually install info
files; it merely inserts or deletes entries in the
dir file.Here's a seven-step procedure to convert ports to use
install-info. I will use
editors/emacs as an example.Look at the texinfo sources and make a patch to insert
@dircategory and @direntry
statements to files that do not have them. This is part of my
patch:
--- ./man/vip.texi.org Fri Jun 16 15:31:11 1995
+++ ./man/vip.texi Tue May 20 01:28:33 1997
@@ -2,6 +2,10 @@
@setfilename ../info/vip
@settitle VIP
+@dircategory The Emacs editor and associated tools
+@direntry
+* VIP: (vip). A VI-emulation for Emacs.
+@end direntry
@iftex
@finalout
:The format should be self-explanatory. Many authors leave a
dir file in the source tree that contains all
the entries you need, so look around before you try to write your
own. Also, make sure you look into related ports and make the
section names and entry indentations consistent (we recommend that
all entry text start at the 4th tab stop).Note that you can put only one info entry per file because
of a bug in install-info --delete that
deletes only the first entry if you specify multiple entries in
the @direntry section.You can give the dir entries to
install-info as arguments
( and ) instead
of patching the texinfo sources. I do not think this is a good
idea for ports because you need to duplicate the same information
in three places
(Makefile and
@exec/@unexec of
PLIST; see below). However, if you have a
Japanese (or other multibyte encoding) info files, you will have
to use the extra arguments to install-info
because makeinfo cannot handle those texinfo
sources. (See Makefile and
PLIST of japanese/skk
for examples on how to do this).Go back to the port directory and do a make clean;
make and verify that the info files are regenerated
from the texinfo sources. Since the texinfo sources are newer than
the info files, they should be rebuilt when you type
make; but many Makefiles
do not include correct dependencies for info files. In
emacs' case, I had to patch the main
Makefile.in so it will descend into the
man subdirectory to rebuild the info
pages.
--- ./Makefile.in.org Mon Aug 19 21:12:19 1996
+++ ./Makefile.in Tue Apr 15 00:15:28 1997
@@ -184,7 +184,7 @@
# Subdirectories to make recursively. `lisp' is not included
# because the compiled lisp files are part of the distribution
# and you cannot remake them without installing Emacs first.
-SUBDIR = lib-src src
+SUBDIR = lib-src src man
# The makefiles of the directories in $SUBDIR.
SUBDIR_MAKEFILES = lib-src/Makefile man/Makefile src/Makefile oldXMenu/Makefile lwlib/Makefile
--- ./man/Makefile.in.org Thu Jun 27 15:27:19 1996
+++ ./man/Makefile.in Tue Apr 15 00:29:52 1997
@@ -66,6 +66,7 @@
${srcdir}/gnu1.texi \
${srcdir}/glossary.texi
+all: info
info: $(INFO_TARGETS)
dvi: $(DVI_TARGETS)The second hunk was necessary because the default target in
the man subdir is called
info, while the main
Makefile wants to call
all. I also deleted the installation of
the info info file because we already have
one with the same name in /usr/share/info
(that patch is not shown here).If there is a place in the Makefile that
is installing the dir file, delete it. Your
port may not be doing it. Also, remove any commands that are
otherwise mucking around with the dir
file.
--- ./Makefile.in.org Mon Aug 19 21:12:19 1996
+++ ./Makefile.in Mon Apr 14 23:38:07 1997
@@ -368,14 +368,8 @@
if [ `(cd ${srcdir}/info && /bin/pwd)` != `(cd ${infodir} && /bin/pwd)` ]; \
then \
(cd ${infodir}; \
- if [ -f dir ]; then \
- if [ ! -f dir.old ]; then mv -f dir dir.old; \
- else mv -f dir dir.bak; fi; \
- fi; \
cd ${srcdir}/info ; \
- (cd $${thisdir}; ${INSTALL_DATA} ${srcdir}/info/dir ${infodir}/dir); \
- (cd $${thisdir}; chmod a+r ${infodir}/dir); \
for f in ccmode* cl* dired-x* ediff* emacs* forms* gnus* info* message* mh-e* sc* vip*; do \
(cd $${thisdir}; \
${INSTALL_DATA} ${srcdir}/info/$$f ${infodir}/$$f; \
chmod a+r ${infodir}/$$f); \(This step is only necessary if you are modifying an existing
port.) Take a look at pkg/PLIST and delete
anything that is trying to patch up info/dir.
They may be in pkg/INSTALL or some other
file, so search extensively.
Index: pkg/PLIST
===================================================================
RCS file: /usr/cvs/ports/editors/emacs/pkg/PLIST,v
retrieving revision 1.15
diff -u -r1.15 PLIST
--- PLIST 1997/03/04 08:04:00 1.15
+++ PLIST 1997/04/15 06:32:12
@@ -15,9 +15,6 @@
man/man1/emacs.1.gz
man/man1/etags.1.gz
man/man1/ctags.1.gz
-@unexec cp %D/info/dir %D/info/dir.bak
-info/dir
-@unexec cp %D/info/dir.bak %D/info/dir
info/cl
info/cl-1
info/cl-2Add a post-install target to the
Makefile to create a dir
file if it is not there. Also, call
install-info with the installed info
files.
Index: Makefile
===================================================================
RCS file: /usr/cvs/ports/editors/emacs/Makefile,v
retrieving revision 1.26
diff -u -r1.26 Makefile
--- Makefile 1996/11/19 13:14:40 1.26
+++ Makefile 1997/05/20 10:25:09 1.28
@@ -20,5 +20,11 @@
post-install:
.for file in emacs-19.34 emacsclient etags ctags b2m
strip ${PREFIX}/bin/${file}
.endfor
+ if [ ! -f ${PREFIX}/info/dir ]; then \
+ ${SED} -ne '1,/Menu:/p' /usr/share/info/dir > ${PREFIX}/info/dir; \
+ fi
+.for info in emacs vip viper forms gnus mh-e cl sc dired-x ediff ccmode
+ install-info ${PREFIX}/info/${info} ${PREFIX}/info/dir
+.endfor
.include <bsd.port.mk>Do not use anything other than
/usr/share/info/dir and the above command to
create a new info file. In fact, I would add the first three lines
of the above patch to bsd.port.mk if you (the
porter) would not have to do it in PLIST by
yourself anyway.Edit PLIST and add equivalent
@exec statements and also
@unexec for pkg_delete. You
do not need to delete info/dir with
@unexec.
Index: pkg/PLIST
===================================================================
RCS file: /usr/cvs/ports/editors/emacs/pkg/PLIST,v
retrieving revision 1.15
diff -u -r1.15 PLIST
--- PLIST 1997/03/04 08:04:00 1.15
+++ PLIST 1997/05/20 10:25:12 1.17
@@ -16,7 +14,15 @@
man/man1/etags.1.gz
man/man1/ctags.1.gz
+@unexec install-info --delete %D/info/emacs %D/info/dir
:
+@unexec install-info --delete %D/info/ccmode %D/info/dir
info/cl
info/cl-1
@@ -87,6 +94,18 @@
info/viper-3
info/viper-4
+@exec [ -f %D/info/dir ] || sed -ne '1,/Menu:/p' /usr/share/info/dir > %D/info/dir
+@exec install-info %D/info/emacs %D/info/dir
:
+@exec install-info %D/info/ccmode %D/info/dir
libexec/emacs/19.34/i386--freebsd/cvtmail
libexec/emacs/19.34/i386--freebsd/digest-docThe @unexec install-info --delete
commands have to be listed before the info files themselves so
they can read the files. Also, the @exec
install-info commands have to be after the info
files and the @exec command that creates the
the dir file.Test and admire your
work. :). Check the
dir file before and after each step.The pkg/ subdirectoryThere are some tricks we have not mentioned yet about the
pkg/ subdirectory that come in handy
sometimes.MESSAGEIf you need to display a message to the installer, you may place
the message in pkg/MESSAGE. This capability is
often useful to display additional installation steps to be taken
after a pkg_add or to display licensing
information.The pkg/MESSAGE file does not need to be
added to pkg/PLIST. Also, it will not get
automatically printed if the user is using the port, not the
package, so you should probably display it from the
post-install target yourself.INSTALLIf your port needs to execute commands when the binary package
is installed with pkg_add you can do this via the
pkg/INSTALL script. This script will
automatically be added to the package, and will be run twice by
pkg_add. The first time will as INSTALL
${PKGNAME} PRE-INSTALL and the second time as
INSTALL ${PKGNAME} POST-INSTALL.
$2 can be tested to determine which mode
the script is being run in. The PKG_PREFIX
environmental variable will be set to the package installation
directory. See &man.pkg.add.1; for
additional information.This script is not run automatically if you install the port
with make install. If you are depending on it
being run, you will have to explicitly call it from your port's
Makefile.REQIf your port needs to determine if it should install or not, you
can create a pkg/REQ “requirements”
script. It will be invoked automatically at
installation/deinstallation time to determine whether or not
installation/deinstallation should proceed.Changing PLIST based on make
variablesSome ports, particularly the p5- ports, need to change their
PLIST depending on what options they are
configured with (or version of perl, in the case of p5- ports). To
make this easy, any instances in the PLIST of
%%OSREL%%, %%PERL_VER%%, and
%%PERL_VERSION%% will be substituted for
appropriately. The value of %%OSREL%% is the
numeric revision of the operating system (e.g.,
2.2.7). %%PERL_VERSION%% is
the full version number of perl (e.g., 5.00502)
and %%PERL_VER%% is the perl version number minus
the patchlevel (e.g., 5.005).If you need to make other substitutions, you can set the
PLIST_SUB variable with a list of
VAR=VALUE
pairs and instances of
%%VAR%%' will be
substituted with VALUE in the
PLIST.For instance, if you have a port that installs many files in a
version-specific subdirectory, you can put something like
OCTAVE_VERSION= 2.0.13
PLIST_SUB= OCTAVE_VERSION=${OCTAVE_VERSION}
in the Makefile and use
%%OCTAVE_VERSION%% wherever the version shows up
in PLIST. That way, when you upgrade the port,
you will not have to change dozens (or in some cases, hundreds) of
lines in the PLIST.This substitution (as well as addition of any man pages) will be done between
the do-install and
post-install targets, by reading from
PLIST and writing to TMPPLIST
(default:
WRKDIR/.PLIST.mktmp). So if
your port builds PLIST on the fly, do so in or
before do-install. Also, if your port
needs to edit the resulting file, do so in
post-install to a file named
TMPPLIST.Changing the names of files in the
pkg subdirectoryAll the filenames in the pkg subdirectory
are defined using variables so you can change them in your
Makefile if need be. This is especially useful
when you are sharing the same pkg subdirectory
among several ports or have to write to one of the above files (see
writing to places other than
WRKDIR for why it is a bad idea to write
directly in to the pkg subdirectory.Here is a list of variable names and their default
values.VariableDefault valueCOMMENT${PKGDIR}/DESCRDESCR${PKGDIR}/DESCRPLIST${PKGDIR}/PLISTPKGINSTALL${PKGDIR}/PKGINSTALLPKGDEINSTALL${PKGDIR}/PKGDEINSTALLPKGREQ${PKGDIR}/REQPKGMESSAGE${PKGDIR}/MESSAGEPlease change these variables rather than overriding
PKG_ARGS. If you change
PKG_ARGS, those files will not correctly be
installed in /var/db/pkg upon install from a
port.Licensing ProblemsSome software packages have restrictive licenses or can be in
violation to the law (PKP's patent on public key crypto, ITAR (export
of crypto software) to name just two of them). What we can do with
them varies a lot, depending on the exact wordings of the respective
licenses.It is your responsibility as a porter to read the licensing
terms of the software and make sure that the FreeBSD project will
not be held accountable of violating them by redistributing the
source or compiled binaries either via ftp or CD-ROM. If in doubt,
please contact the &a.ports;.There are two variables you can set in the Makefile to handle the
situations that arise frequently:If the port has a “do not sell for profit” type of
license, set the variable NO_CDROM to a string
describing the reason why. We will make sure such ports will not go
into the CD-ROM come release time. The distfile and package will
still be available via ftp.If the resulting package needs to be built uniquely for each
site, or the resulting binary package cannot be distributed due to
licensing; set the variable NO_PACKAGE to a
string describing the reason why. We will make sure such packages
will not go on the ftp site, nor into the CD-ROM come release time.
The distfile will still be included on both however.If the port has legal restrictions on who can use it (e.g.,
crypto stuff) or has a “no commercial use” license,
set the variable RESTRICTED to be the string
describing the reason why. For such ports, the distfiles/packages
will not be available even from our ftp sites.The GNU General Public License (GPL), both version 1 and 2,
should not be a problem for ports.If you are a committer, make sure you update the
ports/LEGAL file too.UpgradingWhen you notice that a port is out of date compared to the latest
version from the original authors, first make sure you have the latest
port. You can find them in the
ports/ports-current directory of the ftp mirror
sites. You may also use CVSup to keep your whole ports collection
up-to-date, as described in .The next step is to send a mail to the maintainer, if one is
listed in the port's Makefile. That person may
already be working on an upgrade, or have a reason to not upgrade the
port right now (because of, for example, stability problems of the new
version).If the maintainer asks you to do the upgrade or there is not any
such person to begin with, please make the upgrade and send the
recursive diff (either unified or context diff is fine, but port
committers appear to prefer unified diff more) of the new and old
ports directories to us (e.g., if your modified port directory is
called superedit and the original as in our tree
is superedit.bak, then send us the result of
diff -ruN superedit.bak superedit). Please examine
the output to make sure all the changes make sense. The best way to
send us the diff is by including it to &man.send-pr.1; (category
ports). Please mention any added or deleted files
in the message, as they have to be explicitly specified to CVS when
doing a commit. If the diff is more than about 20KB, please compress
and uuencode it; otherwise, just include it in as is in the PR.Once again, please use &man.diff.1; and not &man.shar.1; to send
updates to existing ports!Do's and Dont'sHere is a list of common do's and dont's that you encounter during
the porting process.You should check your own port against this list,
but you can also check ports in the PR database that others have
submitted. Submit any comments on ports you check as described in
Bug Reports and General
Commentary. Checking ports in the PR database will both make
it faster for us to commit them, and prove that you know what you are
doing.Strip BinariesDo strip binaries. If the original source already strips the
binaries, fine; otherwise you should add a
post-install rule to to it yourself. Here is an
example;
post-install:
strip ${PREFIX}/bin/xdlUse the &man.file.1; command on the installed executable to
check whether the binary is stripped or not. If it does not say
not stripped, it is stripped.INSTALL_* macrosDo use the macros provided in bsd.port.mk
to ensure correct modes and ownership of files in your own
*-install targets. They are:INSTALL_PROGRAM is a command to install
binary executables.INSTALL_SCRIPT is a command to install
executable scripts.INSTALL_DATA is a command to install
sharable data.INSTALL_MAN is a command to install
manpages and other documentation (it does not compress
anything).These are basically the install command with
all the appropriate flags. See below for an example on how to use
them.WRKDIRDo not write anything to files outside
WRKDIR. WRKDIR is the only
place that is guaranteed to be writable during the port build (see
compiling ports from CDROM for an
example of building ports from a read-only tree). If you need to
modigy some file in PKGDIR, do so by redefining a variable, not by
writing over it.WRKDIRPREFIXMake sure your port honors WRKDIRPREFIX.
Most ports do not have to worry about this. In particular, if you
are referring to a WRKDIR of another port, note
that the correct location is
WRKDIRPREFIXPORTSDIR/subdir/name/work not PORTSDIR/subdir/name/work or .CURDIR/../../subdir/name/work or some such.Also, if you are defining WRKDIR yourself,
make sure you prepend
${WKRDIRPREFIX}${.CURDIR} in the
front.Differentiating operating systems and OS versionsYou may come across code that needs modifications or conditional
compilation based upon what version of UNIX it is running under. If
you need to make such changes to the code for conditional
compilation, make sure you make the changes as general as possible
so that we can back-port code to FreeBSD 1.x systems and cross-port
to other BSD systems such as 4.4BSD from CSRG, BSD/386, 386BSD,
NetBSD, and OpenBSD.The preferred way to tell 4.3BSD/Reno (1990) and newer versions
of the BSD code apart is by using the BSD macro
defined in <sys/param.h>. Hopefully that
file is already included; if not, add the code:
#if (defined(__unix__) || defined(unix)) && !defined(USG)
#include <sys/param.h>
#endifto the proper place in the .c file. We
believe that every system that defines these two symbols has
sys/param.h. If you find a system that
does not, we would like to know. Please send mail to the
&a.ports;.Another way is to use the GNU Autoconf style of doing
this:
#ifdef HAVE_SYS_PARAM_H
#include <sys/param.h>
#endifDo not forget to add -DHAVE_SYS_PARAM_H to the
CFLAGS in the Makefile for
this method.Once you have sys/param.h included, you may
use:
#if (defined(BSD) && (BSD >= 199103))to detect if the code is being compiled on a 4.3 Net2 code base
or newer (e.g. FreeBSD 1.x, 4.3/Reno, NetBSD 0.9, 386BSD, BSD/386
1.1 and below).Use:
#if (defined(BSD) && (BSD >= 199306))to detect if the code is being compiled on a 4.4 code base or
newer (e.g. FreeBSD 2.x, 4.4, NetBSD 1.0, BSD/386 2.0 or
above).The value of the BSD macro is
199506 for the 4.4BSD-Lite2 code base. This is
stated for informational purposes only. It should not be used to
distinguish between versions of FreeBSD based only on 4.4-Lite vs.
versions that have merged in changes from 4.4-Lite2. The
__FreeBSD__ macro should be used instead.Use sparingly:__FreeBSD__ is defined in all versions of
FreeBSD. Use it if the change you are making
only affects FreeBSD. Porting gotchas like
the use of sys_errlist[] vs
strerror() are Berkeleyisms, not FreeBSD
changes.In FreeBSD 2.x, __FreeBSD__ is defined to
be 2. In earlier versions, it is
1. Later versions will bump it to match
their major version number.If you need to tell the difference between a FreeBSD 1.x
system and a FreeBSD 2.x or 3.x system, usually the right answer
is to use the BSD macros described above. If
there actually is a FreeBSD specific change (such as special
shared library options when using ld) then it
is OK to use __FreeBSD__ and #if
__FreeBSD__ > 1 to detect a FreeBSD 2.x and later
system. If you need more granularity in detecting FreeBSD
systems since 2.0-RELEASE you can use the following:
#if __FreeBSD__ >= 2
#include <osreldate.h>
# if __FreeBSD_version >= 199504
/* 2.0.5+ release specific code here */
# endif
#endifRelease__FreeBSD_version2.0-RELEASE1194112.1-CURRENTs199501, 1995032.0.5-RELEASE1995042.2-CURRENT before 2.11995082.1.0-RELEASE1995112.2-CURRENT before 2.1.51995122.1.5-RELEASE1996072.2-CURRENT before 2.1.61996082.1.6-RELEASE1996122.1.7-RELEASE1996122.2-RELEASE2200002.2.1-RELEASE220000 (no change)2.2-STABLE after 2.2.1-RELEASE220000 (no change)2.2-STABLE after texinfo-3.92210012.2-STABLE after top2210022.2.2-RELEASE2220002.2-STABLE after 2.2.2-RELEASE2220012.2.5-RELEASE2250002.2-STABLE after 2.2.5-RELEASE2250012.2-STABLE after ldconfig -R merge2250022.2.6-RELEASE2260002.2.7-RELEASE2270002.2-STABLE after 2.2.7-RELEASE2270012.2-STABLE after semctl(2) change2270022.2.8-RELEASE2280002.2-STABLE after 2.2.8-RELEASE2280013.0-CURRENT before mount(2) change3000003.0-CURRENT after mount(2) change3000013.0-CURRENT after semctl(2) change3000023.0-CURRENT after ioctl arg changes3000033.0-CURRENT after ELF conversion3000043.0-RELEASE3000053.0-CURRENT after 3.0-RELEASE3000063.0-STABLE after 3/4 branch3000073.1-RELEASE3100003.1-STABLE after 3.1-RELEASE3100013.1-STABLE after C++ constructor/destructor order
change3100023.2-STABLE3200014.0-CURRENT after 3/4 branch4000004.0-CURRENT after change in dynamic linker
handling4000014.0-CURRENT after C++ constructor/destructor
order change4000024.0-CURRENT after functioning dladdr(3)4000034.0-CURRENT after newbus4000044.0-CURRENT after suser(9) API change4000054.0-CURRENT after cdevsw registration change4000064.0-CURRENT after the addition of so_cred for
socket level credentials4000074.0-CURRENT after the addition of a poll syscall
wrapper to libc_r4000084.0-CURRENT after the change of the kernel's
dev_t type to struct
spacinfo pointer400009Note that 2.2-STABLE sometimes identifies itself as
“2.2.5-STABLE” after the 2.2.5-RELEASE. The pattern
used to be year followed by the month, but we decided to change it
to a more straightforward major/minor system starting from 2.2.
This is because the parallel development on several branches made
it infeasible to classify the releases simply by their real
release dates. If you are making a port now, you do not have to
worry about old -CURRENTs; they are listed here just for your
reference.In the hundreds of ports that have been done, there have only
been one or two cases where __FreeBSD__ should
have been used. Just because an earlier port screwed up and used it
in the wrong place does not mean you should do so too.Writing something after
bsd.port.mkDo not write anything after the .include
<bsd.port.mk> line. it usually can be avoided by
including bsd.port.pre.mk somewhere in the
middle of your Makefile and
bsd.port.post.mk at the end.You need to include either the
pre.mk/post.mk pair or
bsd.port.mk only; do not mix these two.bsd.port.pre.mk only defines a few
variables, which can be used in tests in the
Makefile, bsd.port.post.mk
defines the rest.Here are some important variables defined in
bsd.port.pre.mk (this is not the complete list,
please read bsd.port.mk for the complete
list).VariableDescriptionARCHThe architecture as returned by uname
-m (e.g., i386)OPSYSThe operating system type, as returned by
uname -s (e.g.,
FreeBSD)OSRELThe release version of the operating system (e.g.,
2.1.5 or
2.2.7)OSVERSIONThe numeric version of the operating system, same as
__FreeBSD_version.PORTOBJFORMATThe object format of the system
(aout or elfLOCALBASEThe base of the “local” tree (e.g.,
/usr/local/)X11BASEThe base of the “X11” tree (e.g.,
/usr/X11R6)PREFIXWhere the port installs itself (see more on
PREFIX).If you have to define the variables
USE_IMAKE, USE_X_PREFIX, or
MASTERDIR, do so before including
bsd.port.pre.mk.Here are some examples of things you can write after
bsd.port.pre.mk;
# no need to compile lang/perl5 if perl5 is already in system
.if ${OSVERSION} > 300003
BROKEN= perl is in system
.endif
# only one shlib version number for ELF
.if ${PORTOBJFORMAT} == "elf"
TCL_LIB_FILE= ${TCL_LIB}.${SHLIB_MAJOR}
.else
TCL_LIB_FILE= ${TCL_LIB}.${SHLIB_MAJOR}.${SHLIB_MINOR}
.endif
# software already makes link for ELF, but not for a.out
post-install:
.if ${PORTOBJFORMAT} == "aout"
${LN} -sf liblinpack.so.1.0 ${PREFIX}/lib/liblinpack.so
.endifInstall additional documentationIf your software has some documentation other than the standard
man and info pages that you think is useful for the user, install it
under PREFIX/share/doc.
This can be done, like the previous item, in the
post-install target.Create a new directory for your port. The directory name should
reflect what the port is. This usually means
PKGNAME minus the version part. However, if you
think the user might want different versions of the port to be
installed at the same time, you can use the whole
PKGNAME.Make the installation dependent to the variable
NOPORTDOCS so that users can disable it in
/etc/make.conf, like this:
post-install:
.if !defined(NOPORTDOCS)
${MKDIR}${PREFIX}/share/doc/xv
${INSTALL_MAN} ${WRKSRC}/docs/xvdocs.ps ${PREFIX}/share/doc/xv
.endifDo not forget to add them to pkg/PLIST too!
(Do not worry about NOPORTDOCS here; there is
currently no way for the packages to read variables from
/etc/make.conf.)Also you can use the pkg/MESSAGE file to
display messages upon installation. See the using
pkg/MESSAGE section for
details.MESSAGE does not need to be added to
pkg/PLIST).DIST_SUBDIRDo not let your port clutter
/usr/ports/distfiles. If your port requires a
lot of files to be fetched, or contains a file that has a name that
might conflict with other ports (e.g.,
Makefile), set DIST_SUBDIR
to the name of the port (PKGNAME without the
version part should work fine). This will change
DISTDIR from the default
/usr/ports/distfiles to
/usr/ports/distfiles/DIST_SUBDIR,
and in effect puts everything that is required for your port into
that subdirectory.It will also look at the subdirectory with the same name on the
backup master site at ftp.FreeBSD.org.
(Setting DISTDIR explicitly in your
Makefile will not accomplish this, so please use
DIST_SUBDIR.)This does not affect the MASTER_SITES you
define in your Makefile.Package informationDo include package information, i.e.
COMMENT, DESCR, and
PLIST, in pkg.Note that these files are not used only for packaging anymore,
and are mandatory now, even if
NO_PACKAGE is set.RCS stringsDo not put RCS strings in patches. CVS will mangle them when we
put the files into the ports tree, and when we check them out again,
they will come out different and the patch will fail. RCS strings
are surrounded by dollar ($) signs, and
typically start with $Id or
$RCS.Recursive diffUsing the recurse () option to
diff to generate patches is fine, but please take
a look at the resulting patches to make sure you do not have any
unnecessary junk in there. In particular, diffs between two backup
files, Makefiles when the port uses
Imake or GNU configure, etc.,
are unnecessary and should be deleted. If you had to edit
configure.in and run
autoconf to regenerate
configure, do not take the diffs of
configure (it often grows to a few thousand
lines!); define USE_AUTOCONF=yes and take the
diffsof configure.in.Also, if you had to delete a file, then you can do it in the
post-extract target rather than as part of
the patch. Once you are happy with the resulting diff, please split
it up into one source file per patch file.PREFIXDo try to make your port install relative to
PREFIX. (The value of this variable will be set
to LOCALBASE (default
/usr/local), unless
USE_X_PREFIX or USE_IMAKE is
set, in which case it will be X11BASE (default
/usr/X11R6).)Not hard-coding /usr/local or
/usr/X11R6 anywhere in the source will make the
port much more flexible and able to cater to the needs of other
sites. For X ports that use imake, this is
automatic; otherwise, this can often be done by simply replacing the
occurrences of /usr/local (or
/usr/X11R6 for X ports that do not use imake)
in the various scripts/Makefiles in the port to read
PREFIX, as this variable is automatically passed
down to every stage of the build and install processes.Do not set USE_X_PREFIX unless your port
truly require it (i.e., it links against X libs or it needs to
reference files in X11BASE).The variable PREFIX can be reassigned in your
Makefile or in the user's environment.
However, it is strongly discouraged for individual ports to set this
variable explicitly in the Makefiles.Also, refer to programs/files from other ports with the
variables mentioned above, not explicit pathnames. For instance, if
your port requires a macro PAGER to be the full
pathname of less, use the compiler flag:
-DPAGER=\"${PREFIX}/bin/less\"
or
-DPAGER=\"${LOCALBASE}/bin/less\"
if this is an X port, instead of
-DPAGER=\"/usr/local/bin/less\". This way it will
have a better chance of working if the system administrator has
moved the whole `/usr/local' tree somewhere else.SubdirectoriesTry to let the port put things in the right subdirectories of
PREFIX. Some ports lump everything and put it in
the subdirectory with the port's name, which is incorrect. Also,
many ports put everything except binaries, header files and manual
pages in the a subdirectory of lib, which does
not bode well with the BSD paradigm. Many of the files should be
moved to one of the following: etc
(setup/configuration files), libexec
(executables started internally), sbin
(executables for superusers/managers), info
(documentation for info browser) or share
(architecture independent files). See man &man.hier.7; for details,
the rules governing
/usr pretty much apply to
/usr/local too. The exception are ports
dealing with USENET “news”. They may use
PREFIX/news as a destination
for their files.Cleaning up empty directoriesDo make your ports clean up after themselves when they are
deinstalled. This is usually accomplished by adding
@dirrm lines for all directories that are
specifically created by the port. You need to delete subdirectories
before you can delete parent directories.
:
lib/X11/oneko/pixmaps/cat.xpm
lib/X11/oneko/sounds/cat.au
:
@dirrm lib/X11/oneko/pixmals
@dirrm lib/X11/oneko/sounds
@dirrm lib/X11/onekoHowever, sometimes @dirrm will give you
errors because other ports also share the same subdirectory. You
can call rmdir from @unexec to
remove only empty directories without warning.
@unexec rmdir %D/share/doc/gimp 2>/dev/null || trueThis will neither print any error messages nor cause
pkg_delete to exit abnormally even if
PREFIX/share/doc/gimp is not
empty due to other ports installing some files in there.UIDsIf your port requires a certain user to be on the installed
system, let the pkg/INSTALL script call
pw to create it automatically. Look at
net/cvsup-mirror for an example.If your port must use the same user/group ID number when it is
installed a binary package as when it was compiled, then you must
choose a free UID from 50 to 99 and register it below. Look at
japanese/Wnn for an example.Make sure you do not use a UID already used by the system or
other ports. This is the current list of UIDs between 50 and
99.
majordom:*:54:54:Majordomo Pseudo User:/usr/local/majordomo:/nonexistent
cyrus:*:60:60:the cyrus mail server:/nonexistent:/nonexistent
gnats:*:61:1:GNATS database owner:/usr/local/share/gnats/gnats-db:/bin/sh
uucp:*:66:66:UUCP pseudo-user:/var/spool/uucppublic:/usr/libexec/uucp/uucico
xten:*:67:67:X-10 daemon:/usr/local/xten:/nonexistent
pop:*:68:6:Post Office Owner (popper):/nonexistent:/nonexistent
wnn:*:69:7:Wnn:/nonexistent:/nonexistent
ifmail:*:70:66:Ifmail user:/nonexistent:/nonexistent
pgsql:*:70:70:PostgreSQL pseudo-user:/usr/local/pgsql:/bin/sh
ircd:*:72:72:IRCd hybrid:/nonexistent:/nonexistent
alias:*:81:81:QMail user:/var/qmail/alias:/nonexistent
qmaill:*:83:81:QMail user:/var/qmail:/nonexistent
qmaild:*:82:81:QMail user:/var/qmail:/nonexistent
qmailq:*:85:82:QMail user:/var/qmail:/nonexistent
qmails:*:87:82:QMail user:/var/qmail:/nonexistent
qmailp:*:84:81:QMail user:/var/qmail:/nonexistent
qmailr:*:86:82:QMail user:/var/qmail:/nonexistent
msql:*:87:87:mSQL-2 pseudo-user:/var/db/msqldb:/bin/sh
mysql:*:88:88:MySQL Daemon:/var/db/mysql:/sbin/nologinPlease include a notice when you submit a port (or an upgrade)
that reserves a new UID or GID in this range. This allows us to
keep the list of reserved IDs up to date.Do things rationallyThe Makefile should do things simply and
reasonably. If you can make it a couple of lines shorter or more
readable, then do so. Examples include using a make
.if construct instead of a shell
if construct, not redefining
do-extract if you can redefine
EXTRACT* instead, and using
GNU_CONFIGURE instead of CONFIGURE_ARGS
+= --prefix=${PREFIX}.Respect CFLAGSThe port should respect the CFLAGS variable.
If it does not, please add NO_PACKAGE=ignores
cflags to the Makefile.Configuration filesIf your port requires some configuration files in
PREFIX/etc, do
not just install them and list them in
pkg/PLIST. That will cause
pkg_delete to delete files carefully edited by
the user and a new installation to wipe them out.Instead, install sample files with a suffix
(filename.sample
will work well) and print out a message pointing out that the
user has to copy and edit the file before the software can be made
to work.PortlintDo check your work with portlint
before you submit or commit it.FeedbackDo send applicable changes/patches to the original
author/maintainer for inclusion in next release of the code. This
will only make your job that much easier for the next
release.MiscellaneaThe files pkg/DESCR,
pkg/COMMENT, and pkg/PLIST
should each be double-checked. If you are reviewing a port and feel
they can be worded better, do so.Do not copy more copies of the GNU General Public License into
our system, please.Please be careful to note any legal issues! Do not let us
illegally distribute software!If you are stuck…Do look at existing examples and the
bsd.port.mk file before asking us questions!
;)Do ask us questions if you have any trouble! Do not just beat
your head against a wall! :)A Sample MakefileHere is a sample Makefile that you can use to
create a new port. Make sure you remove all the extra comments (ones
between brackets)!It is recommended that you follow this format (ordering of
variables, empty lines between sections, etc.). This format is
designed so that the most important information is easy to locate. We
recommend that you use portlint to check the
Makefile.
[the header...just to make it easier for us to identify the ports.]
# New ports collection makefile for: xdvi
[the version required header should updated when upgrading a port.]
# Version required: pl18 [things like "1.5alpha" are fine here too]
[this is the date when the first version of this Makefile was created.
Never change this when doing an update of the port.]
# Date created: 26 May 1995
[this is the person who did the original port to FreeBSD, in particular, the
person who wrote the first version of this Makefile. Remember, this should
not be changed when upgrading the port later.]
-# Whom: Satoshi Asami <asami@FreeBSD.ORG>
+# Whom: Satoshi Asami <asami@FreeBSD.org>
#
# $Id$
[ ^^^^ This will be automatically replaced with RCS ID string by CVS
when it is committed to our repository.]
#
[section to describe the port itself and the master site - DISTNAME
is always first, followed by PKGNAME (if necessary), CATEGORIES,
and then MASTER_SITES, which can be followed by MASTER_SITE_SUBDIR.
After those, one of EXTRACT_SUFX or DISTFILES can be specified too.]
DISTNAME= xdvi
PKGNAME= xdvi-pl18
CATEGORIES= print
[do not forget the trailing slash ("/")!
if you are not using MASTER_SITE_* macros]
MASTER_SITES= ${MASTER_SITE_XCONTRIB}
MASTER_SITE_SUBDIR= applications
[set this if the source is not in the standard ".tar.gz" form]
EXTRACT_SUFX= .tar.Z
[section for distributed patches -- can be empty]
PATCH_SITES= ftp://ftp.sra.co.jp/pub/X11/japanese/
PATCHFILES= xdvi-18.patch1.gz xdvi-18.patch2.gz
[maintainer; *mandatory*! This is the person (preferably with commit
privileges) who a user can contact for questions and bug reports - this
person should be the porter or someone who can forward questions to the
original porter reasonably promptly. If you really do not want to have
- your address here, set it to "ports@FreeBSD.ORG".]
-MAINTAINER= asami@FreeBSD.ORG
+ your address here, set it to "ports@FreeBSD.org".]
+MAINTAINER= asami@FreeBSD.org
[dependencies -- can be empty]
RUN_DEPENDS= gs:${PORTSDIR}/print/ghostscript
LIB_DEPENDS= Xpm.5:${PORTSDIR}/graphics/xpm
[this section is for other standard bsd.port.mk variables that do not
belong to any of the above]
[If it asks questions during configure, build, install...]
IS_INTERACTIVE= yes
[If it extracts to a directory other than ${DISTNAME}...]
WRKSRC= ${WRKDIR}/xdvi-new
[If the distributed patches were not made relative to ${WRKSRC}, you
may need to tweak this]
PATCH_DIST_STRIP= -p1
[If it requires a "configure" script generated by GNU autoconf to be run]
GNU_CONFIGURE= yes
[If it requires GNU make, not /usr/bin/make, to build...]
USE_GMAKE= yes
[If it is an X application and requires "xmkmf -a" to be run...]
USE_IMAKE= yes
[et cetera.]
[non-standard variables to be used in the rules below]
MY_FAVORITE_RESPONSE= "yeah, right"
[then the special rules, in the order they are called]
pre-fetch:
i go fetch something, yeah
post-patch:
i need to do something after patch, great
pre-install:
and then some more stuff before installing, wow
[and then the epilogue]
.include <bsd.port.mk>Automated package list creationFirst, make sure your port is almost complete, with only
PLIST missing. Create an empty
PLIST.&prompt.root; touch PLISTNext, create a new set of directories which your port can be
installed, and install any dependencies.&prompt.root; mtree -U -f /etc/mtree/BSD.local.dist -d -e -p /var/tmp/port-name
&prompt.root; make depends PREFIX=/var/tmp/port-nameStore the directory structure in a new file.&prompt.root; (cd /var/tmp/port-name && find * \! -type d) > OLD-DIRSIf your port honours PREFIX (which it should)
you can then install the port and create the package list.&prompt.root; make install PREFIX=/var/tmp
&prompt.root; (cd /var/tmp/port-name && find * \! -type d) > pkg/PLISTYou must also add any newly created directories to the packing
list.&prompt.root; (cd /var/tmp/port-name && find * -type d) | comm -13 OLD-DIRS - | sed -e 's#^#@dirrm#' >> pkg/PLISTFinally, you need to tidy up the packing list by hand. I lied
when I said this was all automated. Manual pages should be listed in
the port's Makefile under
MANn, and not in the
package list. User configuration files should be removed, or
installed as
filename.sample. Any
libraries installed by the port should be listed as specified in the
ldconfig section.Package NamesThe following are the conventions you should follow in naming your
packages. This is to have our package directory easy to scan, as
there are already lots and lots of packages and users are going to
turn away if they hurt their eyes!The package name should look like
language-name-compiled.specifics-version.numbers.If your DISTNAME does not look like that, set
PKGNAME to something in that format.FreeBSD strives to support the native language of its users.
The language- part should be a two
letter abbreviation of the natural language defined by ISO-639 if
the port is specific to a certain language. Examples are
ja for Japanese, ru for
Russian, vi for Vietnamese,
zh for Chinese, ko for
Korean and de for German.The name part should be all lowercases,
except for a really large package (with lots of programs in it).
Things like XFree86 (yes there really is a port of it, check it
out) and ImageMagick fall into this category. Otherwise, convert
the name (or at least the first letter) to lowercase. If the
capital letters are important to the name (for example, with
one-letter names like R or
V) you may use capital letters at your
discretion. There is a tradition of naming Perl 5 modules by
prepending p5- and converting the double-colon
separator to a hyphen; for example, the
Data::Dumper module becomes
p5-Data-Dumper. If the software in question
has numbers, hyphens, or underscores in its name, you may include
them as well (like kinput2).If the port can be built with different hardcoded defaults (usually
part of the directory name in a family of ports), the
-compiled.specifics part should state
the compiled-in defaults (the hyphen is optional). Examples are
papersize and font units.The version string should be a period-separated list of
integers and single lowercase alphabetics. The only exception is
the string pl (meaning `patchlevel'), which can
be used only when there are no major and
minor version numbers in the software.Here are some (real) examples on how to convert a
DISTNAME into a suitable
PKGNAME:Distribution NamePackage NameReasonmule-2.2.2.mule-2.2.2No changes requiredXFree86-3.1.2XFree86-3.1.2No changes requiredEmiClock-1.0.2emiclock-1.0.2No uppercase names for single programsgmod1.4gmod-1.4Need a hyphen before version numbersxmris.4.0.2xmris-4.0.2Need a hyphen before version numbersrdist-1.3alphardist-1.3aNo strings like alpha
allowedes-0.9-beta1es-0.9b1No strings like beta
allowedv3.3beta021.srctiff-3.3What the heck was that anyway?tvtwmtvtwm-pl11Version string always requiredpiewmpiewm-1.0Version string always requiredxvgr-2.10pl1xvgr-2.10.1pl allowed only when no
major/minor version numbersgawk-2.15.6ja-gawk-2.15.6Japanese language versionpsutils-1.13psutils-letter-1.13Papersize hardcoded at package build timepkfontspkfonts300-1.0Package for 300dpi fontsIf there is absolutely no trace of version information in the
original source and it is unlikely that the original author will ever
release another version, just set the version string to
1.0 (like the piewm example above). Otherwise, ask
the original author or use the date string
(yy.mm.dd) as the version.CategoriesAs you already know, ports are classified in several categories.
But for this to wor, it is important that porters and users understand
what each category and how we deicde what to put in each
category.Current list of categoriesFirst, this is the current list of port categories. Those
marked with an asterisk (*) are
virtual categories—those that do not have
a corresponding subdirectory in the ports tree.For non-virtual categories, you will find a one-line
description in the pkg/COMMENT file in that
subdirectory (e.g.,
archivers/pkg/COMMENT).CategoryDescriptionafterstep*Ports to support AfterStep window managerarchiversArchiving tools.astroAstronomical ports.audioSound support.benchmarksBenchmarking utilities.biologyBiology-related software.cadComputer aided design tools.chineseChinese language support.commsCommunication software. Mostly software to talk to
your serial port.convertersCharacter code converters.databasesDatabases.deskutilsThings that used to be on the desktop before
computers were invented.develDevelopment utilities. Do not put libraries here just
because they are libraries—unless they truly do not
belong to anywhere else, they should not be in this
category.editorsGeneral editors. Specialized editors go in the section
for those tools (e.g., a mathematical-formula editor will go
in math).elispEmacs-lisp ports.emulatorsEmulators for other operating systems. Terminal
emulators do not belong
here—X-based ones should go to
x11 and text-based ones to either
comms or misc,
depending on the exact functionality.gamesGames.germanGerman language support.graphicsGraphics utilities.ircInternet Chat Relay utilities.japaneseJapanese language support.javaJava languge support.kde*Ports that form the K Desktop Environment
(kde).koreanKorean language support.langProgramming languages.mailMail software.mathNumerical computation software and other utilities
for mathematics.mboneMBone applications.miscMiscellaneous utilities—basically things that
does not belong to anywhere else. This is the only category
that should not appear with any other non-virtual category.
If you have misc with something else in
your CATEGORIES line, that means you can
safely delete misc and just put the port
in that other subdirectory!netMiscellaneous networking software.newsUSENET news software.offix*Ports from the OffiX suite.palmSoftware support for the 3Com Palm(tm) series.perl5*Ports that require perl version 5 to run.plan9*Various programs from Plan9.printPrinting software. Desktop publishing tools
(previewers, etc.) belong here too.python*Software written in python.russianRussian language support.securitySecurity utilities.shellsCommand line shells.sysutilsSystem utilities.tcl75*Ports that use tcl version 7.5 to run.tcl76*Ports that use tcl version 7.6 to run.tcl80*Ports that use tcl version 8.0 to run.tcl81*Ports that use tcl version 8.1 to run.textprocText processing utilities. It does not include
desktop publishing tools, which go to print/.tk41*Ports that use tk version 4.1 to run.tk42*Ports that use tk version 4.2 to run.tk80*Ports that use tk version 8.0 to run.tk81*Ports that use tk version 8.1 to run.vietnameseVietnamese language support.windowmaker*Ports to support the WindowMaker window
managerwwwSoftware related to the World Wide Web. HTML language
support belong here too.x11The X window system and friends. This category is only
for software that directly support the window system. Do not
put regular X applications here. If your port is an X
application, define USE_XLIB (implied by
USE_IMAKE) and put it in appropriate
categories. Also, many of them go into other
x11-* categories (see below).x11-clocksX11 clocks.x11-fmX11 file managers.x11-fontsX11 fonts and font utilities.x11-serversX11 servers.x11-toolkitsX11 toolkits.x11-wmX11 window managers.Choosing the right categoryAs many of the categories overlap, you often have to choose
which of the categories should be the primary category of your port.
There are several rules that govern this usse. Here is the list of
priorities, in decreasing order of precedence.Language specific categories always come first. For
example, if your port installs Japanese X11 fonts, then your
CATEGORIES line would read japanese
x11-fonts.Specific categories win over less-specific ones. For
instance, an HTML editor should be listed as www
editors, not the other way around. Also, you do not
need to list net when the port belongs to
either of irc, mail,
mbone, news,
security, or www.x11 is used as a secondary category only
when the primary category is a natural language. In particular,
you should not put x11 in the category line
for X applications.If your port truly does not belong anywhere else, put it in
misc.If you are not sure about the category, please put a comment to
that effect in your send-pr submission so we can
discuss it before import it. (If you are a committer, send a note
&a.ports; so we can discuss it first—too often new ports are
imported to a wrong category only to be moved right away.)Changes to this document and the ports systemIf you maintain a lot of ports, you should consider following the
&a.ports;. Important changes to the way ports work will be announced
there. You can always find more detailed information on the latest
changes by looking at the
+ url="http://www.FreeBSD.org/cgi/cvsweb.cgi/ports/Mk/bsd.port.mk"> the
bsd.port.mk CVS log.That is It, Folks!Boy, this sure was a long tutorial, wasn't it? Thanks for
following us to here, really.Well, now that you know how to do a port, let us go at it and
convert everything in the world into ports! That is the easiest way to
start contributing to the FreeBSD Project! :)
diff --git a/en_US.ISO8859-1/articles/contributing/article.sgml b/en_US.ISO8859-1/articles/contributing/article.sgml
index 555f684ace..4c3daa4b29 100644
--- a/en_US.ISO8859-1/articles/contributing/article.sgml
+++ b/en_US.ISO8859-1/articles/contributing/article.sgml
@@ -1,5765 +1,5765 @@
Contributing to FreeBSDContributed by &a.jkh;.So you want to contribute something to FreeBSD? That is great! We can
always use the help, and FreeBSD is one of those systems that
relies on the contributions of its user base in order
to survive. Your contributions are not only appreciated, they are vital
to FreeBSD's continued growth!Contrary to what some people might also have you believe, you do not
need to be a hot-shot programmer or a close personal friend of the FreeBSD
core team in order to have your contributions accepted. The FreeBSD
Project's development is done by a large and growing number of
international contributors whose ages and areas of technical expertise
vary greatly, and there is always more work to be done than there are
people available to do it.Since the FreeBSD project is responsible for an entire operating
system environment (and its installation) rather than just a kernel or a
few scattered utilities, our TODO list also spans a
very wide range of tasks, from documentation, beta testing and
presentation to highly specialized types of kernel development. No matter
what your skill level, there is almost certainly something you can do to
help the project!Commercial entities engaged in FreeBSD-related enterprises are also
encouraged to contact us. Need a special extension to make your product
work? You will find us receptive to your requests, given that they are not
too outlandish. Working on a value-added product? Please let us know! We
may be able to work cooperatively on some aspect of it. The free software
world is challenging a lot of existing assumptions about how software is
developed, sold, and maintained throughout its life cycle, and we urge you
to at least give it a second look.What Is NeededThe following list of tasks and sub-projects represents something of
an amalgam of the various core team TODO lists and
user requests we have collected over the last couple of months. Where
possible, tasks have been ranked by degree of urgency. If you are
interested in working on one of the tasks you see here, send mail to the
coordinator listed by clicking on their names. If no coordinator has
been appointed, maybe you would like to volunteer?High priority tasksThe following tasks are considered to be urgent, usually because
they represent something that is badly broken or sorely needed:3-stage boot issues. Overall coordination: &a.hackers;Do WinNT compatible drive tagging so that the 3rd stage
can provide an accurate mapping of BIOS geometries for
disks.Filesystem problems. Overall coordination: &a.fs;Fix the MSDOS file system.Clean up and document the nullfs filesystem code.
Coordinator: &a.eivind;Fix the union file system. Coordinator: &a.dg;Implement Int13 vm86 disk driver. Coordinator:
&a.hackers;New bus architecture. Coordinator: &a.newbus;Port existing ISA drivers to new architecture.Move all interrupt-management code to appropriate parts of
the bus drivers.Port PCI subsystem to new architecture. Coordinator:
&a.dfr;Figure out the right way to handle removable devices and
then use that as a substrate on which PC-Card and CardBus
support can be implemented.Resolve the probe/attach priority issue once and for
all.Move any remaining buses over to the new
architecture.Kernel issues. Overall coordination: &a.hackers;Add more pro-active security infrastructure. Overall
coordination: &a.security;Build something like Tripwire(TM) into the kernel, with a
remote and local part. There are a number of cryptographic
issues to getting this right; contact the coordinator for
details. Coordinator: &a.eivind;Make the entire kernel use suser()
instead of comparing to 0. It is presently using about half
of each. Coordinator: &a.eivind;Split securelevels into different parts, to allow an
administrator to throw away those privileges he can throw
away. Setting the overall securelevel needs to have the same
effect as now, obviously. Coordinator: &a.eivind;Make it possible to upload a list of “allowed
program” to BPF, and then block BPF from accepting other
programs. This would allow BPF to be used e.g. for DHCP,
without allowing an attacker to start snooping the local
network.Update the security checker script. We should at least
grab all the checks from the other BSD derivatives, and add
checks that a system with securelevel increased also have
reasonable flags on the relevant parts. Coordinator:
&a.eivind;Add authorization infrastructure to the kernel, to allow
different authorization policies. Part of this could be done
by modifying suser(). Coordinatory:
&a.eivind;Add code to the NFS layer so that you cannot
chdir("..") out of an NFS partition. E.g.,
/usr is a UFS partition with
/usr/src NFS exported. Now it is
possible to use the NFS filehandle for
/usr/src to get access to
/usr.Medium priority tasksThe following tasks need to be done, but not with any particular
urgency:Full KLD based driver support/Configuration Manager.Write a configuration manager (in the 3rd stage boot?)
that probes your hardware in a sane manner, keeps only the
KLDs required for your hardware, etc.PCMCIA/PCCARD. Coordinators: &a.msmith; and &a.phk;Documentation!Reliable operation of the pcic driver (needs
testing).Recognizer and handler for sio.c
(mostly done).Recognizer and handler for ed.c
(mostly done).Recognizer and handler for ep.c
(mostly done).User-mode recognizer and handler (partially done).Advanced Power Management. Coordinators: &a.msmith; and
&a.phk;APM sub-driver (mostly done).IDE/ATA disk sub-driver (partially done).syscons/pcvt sub-driver.Integration with the PCMCIA/PCCARD drivers
(suspend/resume).Low priority tasksThe following tasks are purely cosmetic or represent such an
investment of work that it is not likely that anyone will get them
done anytime soon:The first N items are from Terry Lambert
terry@lambert.orgNetWare Server (protected mode ODI driver) loader and
subservices to allow the use of ODI card drivers supplied with
network cards. The same thing for NDIS drivers and NetWare SCSI
drivers.An "upgrade system" option that works on Linux boxes instead
of just previous rev FreeBSD boxes.Symmetric Multiprocessing with kernel preemption (requires
kernel preemption).A concerted effort at support for portable computers. This is
somewhat handled by changing PCMCIA bridging rules and power
management event handling. But there are things like detecting
internal vs. external display and picking a different screen
resolution based on that fact, not spinning down the disk if the
machine is in dock, and allowing dock-based cards to disappear
without affecting the machines ability to boot (same issue for
PCMCIA).Smaller tasksMost of the tasks listed in the previous sections require either a
considerable investment of time or an in-depth knowledge of the
FreeBSD kernel (or both). However, there are also many useful tasks
which are suitable for "weekend hackers", or people without
programming skills.If you run FreeBSD-current and have a good Internet
connection, there is a machine current.FreeBSD.org which builds a full
release once a day — every now and again, try and install
the latest release from it and report any failures in the
process.Read the freebsd-bugs mailing list. There might be a
problem you can comment constructively on or with patches you
can test. Or you could even try to fix one of the problems
yourself.Read through the FAQ and Handbook periodically. If anything
is badly explained, out of date or even just completely wrong, let
us know. Even better, send us a fix (SGML is not difficult to
learn, but there is no objection to ASCII submissions).Help translate FreeBSD documentation into your native language
(if not already available) — just send an email to &a.doc;
asking if anyone is working on it. Note that you are not
committing yourself to translating every single FreeBSD document
by doing this — in fact, the documentation most in need of
translation is the installation instructions.Read the freebsd-questions mailing list and &ng.misc
occasionally (or even regularly). It can be very satisfying to
share your expertise and help people solve their problems;
sometimes you may even learn something new yourself! These forums
can also be a source of ideas for things to work on.If you know of any bugfixes which have been successfully
applied to -current but have not been merged into -stable after a
decent interval (normally a couple of weeks), send the committer a
polite reminder.Move contributed software to src/contrib
in the source tree.Make sure code in src/contrib is up to
date.Look for year 2000 bugs (and fix any you find!)Build the source tree (or just part of it) with extra warnings
enabled and clean up the warnings.Fix warnings for ports which do deprecated things like using
gets() or including malloc.h.If you have contributed any ports, send your patches back to
the original author (this will make your life easier when they
bring out the next version)Suggest further tasks for this list!How to ContributeContributions to the system generally fall into one or more of the
following 6 categories:Bug reports and general commentaryAn idea or suggestion of general technical
interest should be mailed to the &a.hackers;. Likewise, people with
an interest in such things (and a tolerance for a
high volume of mail!) may subscribe to the
hackers mailing list by sending mail to &a.majordomo;. See mailing lists for more information
about this and other mailing lists.If you find a bug or are submitting a specific change, please
report it using the &man.send-pr.1; program or its WEB-based
equivalent. Try to fill-in each field of the bug report.
Unless they exceed 65KB, include any patches directly in the report.
When including patches, do not use cut-and-paste
because cut-and-paste turns tabs into spaces and makes them unusable.
Consider compressing patches and using &man.uuencode.1; if they exceed
20KB. Upload very large submissions to ftp.FreeBSD.org:/pub/FreeBSD/incoming/.
+ url="ftp://ftp.FreeBSD.org/pub/FreeBSD/incoming/">ftp.FreeBSD.org:/pub/FreeBSD/incoming/.
After filing a report, you should receive confirmation along with
a tracking number. Keep this tracking number so that you can update
us with details about the problem by sending mail to
- bug-followup@FreeBSD.ORG. Use the number as the
+ bug-followup@FreeBSD.org. Use the number as the
message subject, e.g. "Re: kern/3377". Additional
information for any bug report should be submitted this way.If you do not receive confirmation in a timely fashion (3 days to
a week, depending on your email connection) or are, for some reason,
unable to use the &man.send-pr.1; command, then you may ask
someone to file it for you by sending mail to the &a.bugs;.Changes to the documentationChanges to the documentation are overseen by the &a.doc;. Send
submissions and changes (even small ones are welcome!) using
send-pr as described in Bug Reports and General
Commentary.Changes to existing source codeAn addition or change to the existing source code is a somewhat
trickier affair and depends a lot on how far out of date you are with
the current state of the core FreeBSD development. There is a special
on-going release of FreeBSD known as “FreeBSD-current”
which is made available in a variety of ways for the convenience of
developers working actively on the system. See Staying current with FreeBSD for more
information about getting and using FreeBSD-current.Working from older sources unfortunately means that your changes
may sometimes be too obsolete or too divergent for easy re-integration
into FreeBSD. Chances of this can be minimized somewhat by
subscribing to the &a.announce; and the &a.current; lists, where
discussions on the current state of the system take place.Assuming that you can manage to secure fairly up-to-date sources
to base your changes on, the next step is to produce a set of diffs to
send to the FreeBSD maintainers. This is done with the &man.diff.1;
command, with the “context diff” form
being preferred. For example:&prompt.user; diff -c oldfile newfile
or
&prompt.user; diff -c -r olddir newdir
would generate such a set of context diffs for the given source file
or directory hierarchy. See the man page for &man.diff.1; for more
details.Once you have a set of diffs (which you may test with the
&man.patch.1; command), you should submit them for inclusion with
FreeBSD. Use the &man.send-pr.1; program as described in Bug Reports and General Commentary.
Do not just send the diffs to the &a.hackers; or
they will get lost! We greatly appreciate your submission (this is a
volunteer project!); because we are busy, we may not be able to
address it immediately, but it will remain in the pr database until we
do.If you feel it appropriate (e.g. you have added, deleted, or
renamed files), bundle your changes into a tar file
and run the &man.uuencode.1; program on it. Shar archives are also
welcome.If your change is of a potentially sensitive nature, e.g. you are
unsure of copyright issues governing its further distribution or you
are simply not ready to release it without a tighter review first,
then you should send it to &a.core; directly rather than submitting it
with &man.send-pr.1;. The core mailing list reaches a much smaller
group of people who do much of the day-to-day work on FreeBSD. Note
that this group is also very busy and so you
should only send mail to them where it is truly necessary.Please refer to man 9 intro and man 9
style for some information on coding style. We would
appreciate it if you were at least aware of this information before
submitting code.New code or major value-added packagesIn the rare case of a significant contribution of a large body
work, or the addition of an important new feature to FreeBSD, it
becomes almost always necessary to either send changes as uuencode'd
tar files or upload them to our ftp site ftp://ftp.FreeBSD.ORG/pub/FreeBSD/incoming.
+ URL="ftp://ftp.FreeBSD.org/pub/FreeBSD/incoming">ftp://ftp.FreeBSD.org/pub/FreeBSD/incoming.
When working with large amounts of code, the touchy subject of
copyrights also invariably comes up. Acceptable copyrights for code
included in FreeBSD are:The BSD copyright. This copyright is most preferred due to
its “no strings attached” nature and general
attractiveness to commercial enterprises. Far from discouraging
such commercial use, the FreeBSD Project actively encourages such
participation by commercial interests who might eventually be
inclined to invest something of their own into FreeBSD.The GNU Public License, or “GPL”. This license is
not quite as popular with us due to the amount of extra effort
demanded of anyone using the code for commercial purposes, but
given the sheer quantity of GPL'd code we currently require
(compiler, assembler, text formatter, etc) it would be silly to
refuse additional contributions under this license. Code under
the GPL also goes into a different part of the tree, that being
/sys/gnu or
/usr/src/gnu, and is therefore easily
identifiable to anyone for whom the GPL presents a problem.Contributions coming under any other type of copyright must be
carefully reviewed before their inclusion into FreeBSD will be
considered. Contributions for which particularly restrictive
commercial copyrights apply are generally rejected, though the authors
are always encouraged to make such changes available through their own
channels.To place a “BSD-style” copyright on your work, include
the following text at the very beginning of every source code file you
wish to protect, replacing the text between the %%
with the appropriate information.
Copyright (c) %%proper_years_here%%
%%your_name_here%%, %%your_state%% %%your_zip%%.
All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions
are met:
1. Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer as
the first lines of this file unmodified.
2. Redistributions in binary form 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 SOFTWARE IS PROVIDED BY %%your_name_here%% ``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 %%your_name_here%% 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 SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
$Id$For your convenience, a copy of this text can be found in
/usr/share/examples/etc/bsd-style-copyright.Money, Hardware or Internet accessWe are always very happy to accept donations to further the cause
of the FreeBSD Project and, in a volunteer effort like ours, a little
can go a long way! Donations of hardware are also very important to
expanding our list of supported peripherals since we generally lack
the funds to buy such items ourselves.Donating fundsWhile the FreeBSD Project is not a 501(c)(3) (charitable)
corporation and hence cannot offer special tax incentives for any
donations made, any such donations will be gratefully accepted on
behalf of the project by FreeBSD, Inc.FreeBSD, Inc. was founded in early 1995 by &a.jkh; and &a.dg;
with the goal of furthering the aims of the FreeBSD Project and
giving it a minimal corporate presence. Any and all funds donated
(as well as any profits that may eventually be realized by FreeBSD,
Inc.) will be used exclusively to further the project's
goals.Please make any checks payable to FreeBSD, Inc., sent in care of
the following address:FreeBSD, Inc.c/o Jordan Hubbard4041 Pike Lane, Suite FConcordCA, 94520(currently using the Walnut Creek CDROM address until a PO box
can be opened)Wire transfers may also be sent directly to:Bank Of AmericaConcord Main OfficeP.O. Box 37176San FranciscoCA, 94137-5176Routing #: 121-000-358Account #: 01411-07441 (FreeBSD, Inc.)Any correspondence related to donations should be sent to &a.jkh,
either via email or to the FreeBSD, Inc. postal address given above.
If you do not wish to be listed in our donors section, please specify this when
making your donation. Thanks!Donating hardwareDonations of hardware in any of the 3 following categories are
also gladly accepted by the FreeBSD Project:General purpose hardware such as disk drives, memory or
complete systems should be sent to the FreeBSD, Inc. address
listed in the donating funds
section.Hardware for which ongoing compliance testing is desired.
We are currently trying to put together a testing lab of all
components that FreeBSD supports so that proper regression
testing can be done with each new release. We are still lacking
many important pieces (network cards, motherboards, etc) and if
you would like to make such a donation, please contact &a.dg;
for information on which items are still required.Hardware currently unsupported by FreeBSD for which you
would like to see such support added. Please contact the
&a.core; before sending such items as we will need to find a
developer willing to take on the task before we can accept
delivery of new hardware.Donating Internet accessWe can always use new mirror sites for FTP, WWW or
cvsup. If you would like to be such a mirror,
please contact the FreeBSD project administrators
- admin@FreeBSD.ORG for more information.
+ admin@FreeBSD.org for more information.
Donors GalleryThe FreeBSD Project is indebted to the following donors and would
like to publically thank them here!Contributors to the central server
project:The following individuals and businesses made it possible for
the FreeBSD Project to build a new central server machine to
eventually replace freefall.FreeBSD.org
by donating the following items:&a.mbarkah and his employer,
Hemisphere Online, donated a Pentium Pro
(P6) 200Mhz CPUASA
Computers donated a Tyan 1662
motherboard.Joe McGuckin joe@via.net of ViaNet Communications donated
a Kingston ethernet controller.Jack O'Neill jack@diamond.xtalwind.net
donated an NCR 53C875 SCSI controller
card.Ulf Zimmermann ulf@Alameda.net of Alameda Networks donated
128MB of memory, a 4 Gb disk
drive and the case.Direct funding:The following individuals and businesses have generously
contributed direct funding to the project:Annelise Anderson
ANDRSN@HOOVER.STANFORD.EDU&a.dillonEpilogue Technology
Corporation&a.sefDon Scott WildeGianmarco Giovannelli
gmarco@masternet.itJosef C. Grosch joeg@truenorth.orgRobert T. Morris&a.chuckrKenneth P. Stox ken@stox.sa.enteract.com of
Imaginary Landscape,
LLC.Dmitry S. Kohmanyuk dk@dog.farm.orgLaser5 of Japan
(a portion of the profits from sales of their various FreeBSD
CD-ROMs.Fuki Shuppan
Publishing Co. donated a portion of their profits from
Hajimete no FreeBSD (FreeBSD, Getting
started) to the FreeBSD and XFree86 projects.ASCII Corp.
donated a portion of their profits from several FreeBSD-related
books to the FreeBSD project.Yokogawa Electric
Corp has generously donated significant funding to the
FreeBSD project.BuffNETPacific
SolutionsSiemens AG
via Andre
AlbsmeierChris SilvaHardware contributors:The following individuals and businesses have generously
contributed hardware for testing and device driver
development/support:Walnut Creek CDROM for providing the Pentium P5-90 and
486/DX2-66 EISA/VL systems that are being used for our
development work, to say nothing of the network access and other
donations of hardware resources.TRW Financial Systems, Inc. provided 130 PCs, three 68 GB
fileservers, twelve Ethernets, two routers and an ATM switch for
debugging the diskless code.Dermot McDonnell donated the Toshiba XM3401B CDROM drive
currently used in freefall.&a.chuck; contributed his floppy tape streamer for
experimental work.Larry Altneu larry@ALR.COM, and &a.wilko;,
provided Wangtek and Archive QIC-02 tape drives in order to
improve the wt driver.Ernst Winter ewinter@lobo.muc.de contributed
a 2.88 MB floppy drive to the project. This will hopefully
increase the pressure for rewriting the floppy disk driver.
;-)Tekram
Technologies sent one each of their DC-390, DC-390U
and DC-390F FAST and ULTRA SCSI host adapter cards for
regression testing of the NCR and AMD drivers with their cards.
They are also to be applauded for making driver sources for free
operating systems available from their FTP server ftp://ftp.tekram.com/scsi/FreeBSD.Larry M. Augustin contributed not only a
Symbios Sym8751S SCSI card, but also a set of data books,
including one about the forthcoming Sym53c895 chip with Ultra-2
and LVD support, and the latest programming manual with
information on how to safely use the advanced features of the
latest Symbios SCSI chips. Thanks a lot!Christoph Kukulies kuku@FreeBSD.org donated
an FX120 12 speed Mitsumi CDROM drive for IDE CDROM driver
development.Special contributors:Walnut Creek CDROM
has donated almost more than we can say (see the history document for more details).
In particular, we would like to thank them for the original
hardware used for freefall.FreeBSD.ORG, our primary
+ role="fqdn">freefall.FreeBSD.org, our primary
development machine, and for thud.FreeBSD.ORG, a testing and build
+ role="fqdn">thud.FreeBSD.org, a testing and build
box. We are also indebted to them for funding various
contributors over the years and providing us with unrestricted
use of their T1 connection to the Internet.The interface
business GmbH, Dresden has been patiently supporting
&a.joerg; who has often preferred FreeBSD work over paywork, and
used to fall back to their (quite expensive) EUnet Internet
connection whenever his private connection became too slow or
flakey to work with it...Berkeley Software Design,
Inc. has contributed their DOS emulator code to the
remaining BSD world, which is used in the
doscmd command.Core Team AlumniThe following people were members of the FreeBSD core team during
the periods indicated. We thank them for their past efforts in the
service of the FreeBSD project.In rough chronological order:&a.guido (1995 - 1999)&a.dyson (1993 - 1998)&a.nate (1992 - 1996)&a.rgrimes (1992 - 1995)Andreas Schulz (1992 - 1995)&a.csgr (1993 - 1995)&a.paul (1992 - 1995)&a.smace (1993 - 1994)Andrew Moore (1993 - 1994)Christoph Robitschko (1993 - 1994)J. T. Conklin (1992 - 1993)Derived Software ContributorsThis software was originally derived from William F. Jolitz's 386BSD
release 0.1, though almost none of the original 386BSD specific code
remains. This software has been essentially re-implemented from the
4.4BSD-Lite release provided by the Computer Science Research Group
(CSRG) at the University of California, Berkeley and associated academic
contributors.There are also portions of NetBSD and OpenBSD that have been
integrated into FreeBSD as well, and we would therefore like to thank
all the contributors to NetBSD and OpenBSD for their work.Additional FreeBSD Contributors(in alphabetical order by first name):ABURAYA Ryushirou rewsirow@ff.iij4u.or.jpAMAGAI Yoshiji amagai@nue.orgAaron Bornstein aaronb@j51.comAaron Smith aaron@mutex.orgAchim Patzner ap@noses.comAda T Lim ada@bsd.orgAdam Baran badam@mw.mil.plAdam Glass glass@postgres.berkeley.eduAdam McDougall mcdouga9@egr.msu.eduAdrian Colley aecolley@ois.ieAdrian Hall adrian@ibmpcug.co.ukAdrian Mariano adrian@cam.cornell.eduAdrian Steinmann ast@marabu.chAdam Strohl troll@digitalspark.netAdrian T. Filipi-Martin
atf3r@agate.cs.virginia.eduAjit Thyagarajan unknownAkio Morita
amorita@meadow.scphys.kyoto-u.ac.jpAkira SAWADA unknownAkira Watanabe
akira@myaw.ei.meisei-u.ac.jpAkito Fujita fujita@zoo.ncl.omron.co.jpAlain Kalker
A.C.P.M.Kalker@student.utwente.nlAlan Bawden alan@curry.epilogue.comAlec Wolman wolman@cs.washington.eduAled Morris aledm@routers.co.ukAlex garbanzo@hooked.netAlex D. Chen
dhchen@Canvas.dorm7.nccu.edu.twAlex G. Bulushev bag@demos.suAlex Le Heux alexlh@funk.orgAlex Perel veers@disturbed.netAlexander B. Povolotsky tarkhil@mgt.msk.ruAlexander Leidinger
netchild@wurzelausix.CS.Uni-SB.DEAlexander Langer alex@cichlids.comAlexandre Snarskii snar@paranoia.ruAlfred Perlstein bright@rush.netAlistair G. Crooks agc@uts.amdahl.comAllan Saddi asaddi@philosophysw.comAllen Campbell allenc@verinet.comAmakawa Shuhei amakawa@hoh.t.u-tokyo.ac.jpAmancio Hasty hasty@star-gate.comAmir Farah amir@comtrol.comAmy Baron amee@beer.orgAnatoly A. Orehovsky tolik@mpeks.tomsk.suAnatoly Vorobey mellon@pobox.comAnders Nordby nickerne@nome.noAnders Thulin Anders.X.Thulin@telia.seAndras Olah olah@cs.utwente.nlAndre Albsmeier
Andre.Albsmeier@mchp.siemens.deAndre Oppermann andre@pipeline.chAndreas Haakh ah@alman.robin.deAndreas Kohout shanee@rabbit.augusta.deAndreas Lohr andreas@marvin.RoBIN.deAndreas Schulz unknownAndreas Wetzel mickey@deadline.snafu.deAndreas Wrede andreas@planix.comAndres Vega Garcia unknownAndrew Atrens atreand@statcan.caAndrew Boothman andrew@cream.orgAndrew Gillham gillham@andrews.eduAndrew Gordon andrew.gordon@net-tel.co.ukAndrew Herbert andrew@werple.apana.org.auAndrew J. Korty ajk@purdue.eduAndrew L. Moore alm@mclink.comAndrew McRae amcrae@cisco.comAndrew Stevenson andrew@ugh.net.auAndrew Timonin tim@pool1.convey.ruAndrew V. Stesin stesin@elvisti.kiev.uaAndrew Webster awebster@dataradio.comAndrey Zakhvatov andy@icc.surw.chel.suAndy Farkas andyf@speednet.com.auAndy Valencia ajv@csd.mot.comAndy Whitcroft andy@sarc.city.ac.ukAngelo Turetta ATuretta@stylo.itAnthony C. Chavez magus@xmission.comAnthony Yee-Hang Chan yeehang@netcom.comAnton Berezin tobez@plab.ku.dkAntti Kaipila anttik@iki.fiAre Bryne are.bryne@communique.noAri Suutari ari@suutari.iki.fiArjan de Vet devet@IAEhv.nlArne Henrik Juul arnej@Lise.Unit.NOAssar Westerlund assar@sics.seAtsushi Furuta furuta@sra.co.jpAtsushi Murai amurai@spec.co.jpBakul Shah bvs@bitblocks.comBarry Bierbauch pivrnec@vszbr.czBarry Lustig barry@ictv.comBen Hutchinson benhutch@xfiles.org.ukBen Jackson unknownBen Smithurst ben@scientia.demon.co.ukBen Walter bwalter@itachi.swcp.comBenjamin Lewis bhlewis@gte.netBernd Rosauer br@schiele-ct.deBill Kish kish@osf.orgBill Trost trost@cloud.rain.comBlaz Zupan blaz@amis.netBob Van Valzah Bob@whitebarn.comBob Willcox bob@luke.pmr.comBoris Staeblow balu@dva.in-berlin.deBoyd R. Faulkner faulkner@asgard.bga.comBrad Karp karp@eecs.harvard.eduBradley Dunn bradley@dunn.orgBrandon Fosdick bfoz@glue.umd.eduBrandon Gillespie brandon@roguetrader.com&a.wlloydBob Wilcox bob@obiwan.uucpBoyd Faulkner faulkner@mpd.tandem.comBrent J. Nordquist bjn@visi.comBrett Lymn blymn@mulga.awadi.com.AUBrett Taylor
brett@peloton.physics.montana.eduBrian Campbell brianc@pobox.comBrian Clapper bmc@willscreek.comBrian Cully shmit@kublai.comBrian Handy
handy@lambic.space.lockheed.comBrian Litzinger brian@MediaCity.comBrian McGovern bmcgover@cisco.comBrian Moore ziff@houdini.eecs.umich.eduBrian R. Haug haug@conterra.comBrian Tao taob@risc.orgBrion Moss brion@queeg.comBruce A. Mah bmah@ca.sandia.govBruce Albrecht bruce@zuhause.mn.orgBruce Gingery bgingery@gtcs.comBruce J. Keeler loodvrij@gridpoint.comBruce Murphy packrat@iinet.net.auBruce Walter walter@fortean.comCarey Jones mcj@acquiesce.orgCarl Fongheiser cmf@netins.netCarl Mascott cmascott@world.std.comCasper casper@acc.amCastor Fu castor@geocast.comCejka Rudolf cejkar@dcse.fee.vutbr.czChain Lee chain@110.netCharles Hannum mycroft@ai.mit.eduCharles Henrich henrich@msu.eduCharles Mott cmott@srv.netCharles Owens owensc@enc.eduChet Ramey chet@odin.INS.CWRU.EduChia-liang Kao clkao@CirX.ORGChiharu Shibata chi@bd.mbn.or.jpChip Norkus unknownChoi Jun Ho junker@jazz.snu.ac.krChris Costello chris@calldei.comChris Csanady cc@tarsier.ca.sandia.govChris Dabrowski chris@vader.orgChris Dillon cdillon@wolves.k12.mo.usChris Shenton
cshenton@angst.it.hq.nasa.govChris Stenton jacs@gnome.co.ukChris Timmons skynyrd@opus.cts.cwu.eduChris Torek torek@ee.lbl.govChristian Gusenbauer
cg@fimp01.fim.uni-linz.ac.atChristian Haury Christian.Haury@sagem.frChristian Weisgerber
naddy@bigeye.rhein-neckar.deChristoph P. Kukulies kuku@FreeBSD.orgChristoph Robitschko
chmr@edvz.tu-graz.ac.atChristoph Weber-Fahr
wefa@callcenter.systemhaus.netChristopher G. Demetriou
cgd@postgres.berkeley.eduChristopher T. Johnson
cjohnson@neunacht.netgsi.comChrisy Luke chrisy@flix.netChuck Hein chein@cisco.comClive Lin clive@CiRX.ORGColman Reilly careilly@tcd.ieConrad Sabatier conrads@neosoft.comCoranth Gryphon gryphon@healer.comCornelis van der Laan
nils@guru.ims.uni-stuttgart.deCove Schneider cove@brazil.nbn.comCraig Leres leres@ee.lbl.govCraig Loomis unknownCraig Metz cmetz@inner.netCraig Spannring cts@internetcds.comCraig Struble cstruble@vt.eduCristian Ferretti cfs@riemann.mat.puc.clCurt Mayer curt@toad.comCy Schubert cschuber@uumail.gov.bc.caDI. Christian Gusenbauer
cg@scotty.edvz.uni-linz.ac.atDai Ishijima ishijima@tri.pref.osaka.jpDamian Hamill damian@cablenet.netDan Cross tenser@spitfire.ecsel.psu.eduDan Lukes dan@obluda.czDan Nelson dnelson@emsphone.comDan Walters hannibal@cyberstation.netDaniel M. Eischen
deischen@iworks.InterWorks.orgDaniel O'Connor doconnor@gsoft.com.auDaniel Poirot poirot@aio.jsc.nasa.govDaniel Rock rock@cs.uni-sb.deDanny Egen unknownDanny J. Zerkel dzerkel@phofarm.comDarren Reed avalon@coombs.anu.edu.auDave Adkins adkin003@tc.umn.eduDave Andersen angio@aros.netDave Blizzard dblizzar@sprynet.comDave Bodenstab imdave@synet.netDave Burgess burgess@hrd769.brooks.af.milDave Chapeskie dchapes@ddm.on.caDave Cornejo dave@dogwood.comDave Edmondson davided@sco.comDave Glowacki dglo@ssec.wisc.eduDave Marquardt marquard@austin.ibm.comDave Tweten tweten@FreeBSD.orgDavid A. Adkins adkin003@tc.umn.eduDavid A. Bader dbader@umiacs.umd.eduDavid Borman dab@bsdi.comDavid Dawes dawes@XFree86.orgDavid Filo filo@yahoo.comDavid Holland dholland@eecs.harvard.eduDavid Holloway daveh@gwythaint.tamis.comDavid Horwitt dhorwitt@ucsd.eduDavid Hovemeyer daveho@infocom.comDavid Jones dej@qpoint.torfree.netDavid Kelly dkelly@tomcat1.tbe.comDavid Kulp dkulp@neomorphic.comDavid L. Nugent davidn@blaze.net.auDavid Leonard d@scry.dstc.edu.auDavid Malone dwmalone@maths.tcd.ieDavid Muir Sharnoff muir@idiom.comDavid S. Miller davem@jenolan.rutgers.eduDavid Wolfskill dhw@whistle.comDean Gaudet dgaudet@arctic.orgDean Huxley dean@fsa.caDenis Fortin unknownDennis Glatting
dennis.glatting@software-munitions.comDenton Gentry denny1@home.comDerek Inksetter derek@saidev.comDima Sivachenko dima@Chg.RUDirk Keunecke dk@panda.rhein-main.deDirk Nehrling nerle@pdv.deDmitry Khrustalev dima@xyzzy.machaon.ruDmitry Kohmanyuk dk@farm.orgDom Mitchell dom@myrddin.demon.co.ukDominik Brettnacher domi@saargate.deDon Croyle croyle@gelemna.ft-wayne.in.us&a.whiteside;Don Morrison dmorrisn@u.washington.eduDon Yuniskis dgy@rtd.comDonald Maddox dmaddox@conterra.comDoug Barton studded@dal.netDouglas Ambrisko ambrisko@whistle.comDouglas Carmichael dcarmich@mcs.comDouglas Crosher dtc@scrooge.ee.swin.oz.auDrew Derbyshire ahd@kew.comDuncan Barclay dmlb@ragnet.demon.co.ukDustin Sallings dustin@spy.netEckart "Isegrim" Hofmann
Isegrim@Wunder-Nett.orgEd Gold
vegold01@starbase.spd.louisville.eduEd Hudson elh@p5.spnet.comEdward Wang edward@edcom.comEdwin Groothus edwin@nwm.wan.philips.comEiji-usagi-MATSUmoto usagi@clave.gr.jpELISA Font ProjectElmar Bartel
bartel@informatik.tu-muenchen.deEric A. Griff eagriff@global2000.netEric Blood eblood@cs.unr.eduEric J. Haug ejh@slustl.slu.eduEric J. Schwertfeger eric@cybernut.comEric L. Hernes erich@lodgenet.comEric P. Scott eps@sirius.comEric Sprinkle eric@ennovatenetworks.comErich Stefan Boleyn erich@uruk.orgErik E. Rantapaa rantapaa@math.umn.eduErik H. Moe ehm@cris.comErnst Winter ewinter@lobo.muc.deEspen Skoglund espensk@stud.cs.uit.no>Eugene M. Kim astralblue@usa.netEugene Radchenko genie@qsar.chem.msu.suEvan Champion evanc@synapse.netFaried Nawaz fn@Hungry.COMFlemming Jacobsen fj@tfs.comFong-Ching Liaw fong@juniper.netFrancis M J Hsieh mjshieh@life.nthu.edu.twFrank Bartels knarf@camelot.deFrank Chen Hsiung Chan
frankch@waru.life.nthu.edu.twFrank Durda IV uhclem@nemesis.lonestar.orgFrank MacLachlan fpm@n2.netFrank Nobis fn@Radio-do.deFrank Volf volf@oasis.IAEhv.nlFrank ten Wolde franky@pinewood.nlFrank van der Linden frank@fwi.uva.nlFred Cawthorne fcawth@jjarray.umn.eduFred Gilham gilham@csl.sri.comFred Templin templin@erg.sri.comFrederick Earl Gray fgray@rice.eduFUJIMOTO Kensaku
fujimoto@oscar.elec.waseda.ac.jpFUJISHIMA Satsuki k5@respo.or.jpFURUSAWA Kazuhisa
furusawa@com.cs.osakafu-u.ac.jpGabor Kincses gabor@acm.orgGabor Zahemszky zgabor@CoDe.huG. Adam Stanislavadam@whizkidtech.netGarance A Drosehn gad@eclipse.its.rpi.eduGareth McCaughan gjm11@dpmms.cam.ac.ukGary A. Browning gab10@griffcd.amdahl.comGary Howland gary@hotlava.comGary J. garyj@rks32.pcs.dec.comGary Kline kline@thought.orgGaspar Chilingarov nightmar@lemming.acc.amGea-Suan Lin gsl@tpts4.seed.net.twGeoff Rehmet csgr@alpha.ru.ac.zaGeorg Wagner georg.wagner@ubs.comGerard Roudier groudier@club-internet.frGianmarco Giovannelli
gmarco@giovannelli.itGil Kloepfer Jr. gil@limbic.ssdl.comGilad Rom rom_glsa@ein-hashofet.co.ilGinga Kawaguti
ginga@amalthea.phys.s.u-tokyo.ac.jpGiles Lean giles@nemeton.com.auGlen Foster gfoster@gfoster.comGlenn Johnson gljohns@bellsouth.netGodmar Back gback@facility.cs.utah.eduGoran Hammarback goran@astro.uu.seGord Matzigkeit gord@enci.ucalgary.caGordon Greeff gvg@uunet.co.zaGraham Wheeler gram@cdsec.comGreg A. Woods woods@zeus.leitch.comGreg Ansley gja@ansley.comGreg Troxel gdt@ir.bbn.comGreg Ungerer gerg@stallion.oz.auGregory Bond gnb@itga.com.auGregory D. Moncreaff
moncrg@bt340707.res.ray.comGuy Harris guy@netapp.comGuy Helmer ghelmer@cs.iastate.eduHAMADA Naoki hamada@astec.co.jpHONDA Yasuhiro
honda@kashio.info.mie-u.ac.jpHOSOBUCHI Noriyuki hoso@buchi.tama.or.jpHannu Savolainen hannu@voxware.pp.fiHans Huebner hans@artcom.deHans Petter Bieker zerium@webindex.noHans Zuidam hans@brandinnovators.comHarlan Stenn Harlan.Stenn@pfcs.comHarold Barker hbarker@dsms.comHavard Eidnes
Havard.Eidnes@runit.sintef.noHeikki Suonsivu hsu@cs.hut.fiHeiko W. Rupp unknownHelmut F. Wirth hfwirth@ping.atHenrik Vestergaard Draboel
hvd@terry.ping.dkHerb Peyerl hpeyerl@NetBSD.orgHideaki Ohmon ohmon@tom.sfc.keio.ac.jpHidekazu Kuroki hidekazu@cs.titech.ac.jpHideki Yamamoto hyama@acm.orgHideyuki Suzuki
hideyuki@sat.t.u-tokyo.ac.jpHirayama Issei iss@mail.wbs.ne.jpHiroaki Sakai sakai@miya.ee.kagu.sut.ac.jpHiroharu Tamaru tamaru@ap.t.u-tokyo.ac.jpHironori Ikura hikura@kaisei.orgHiroshi Nishikawa nis@pluto.dti.ne.jpHiroya Tsubakimoto unknownHolger Veit Holger.Veit@gmd.deHolm Tiffe holm@geophysik.tu-freiberg.deHorance Chou
horance@freedom.ie.cycu.edu.twHorihiro Kumagai kuma@jp.FreeBSD.orgHOTARU-YA hotaru@tail.netHr.Ladavac lada@ws2301.gud.siemens.co.atHubert Feyrer hubertf@NetBSD.ORGHugh F. Mahon hugh@nsmdserv.cnd.hp.comHugh Mahon h_mahon@fc.hp.comHung-Chi Chu hcchu@r350.ee.ntu.edu.twIMAI Takeshi take-i@ceres.dti.ne.jpIMAMURA Tomoaki
tomoak-i@is.aist-nara.ac.jpIan Dowse iedowse@maths.tcd.ieIan Holland ianh@tortuga.com.auIan Struble ian@broken.netIan Vaudrey i.vaudrey@bigfoot.comIgor Khasilev igor@jabber.paco.odessa.uaIgor Roshchin str@giganda.komkon.orgIgor Sviridov siac@ua.netIgor Vinokurov igor@zynaps.ruIkuo Nakagawa ikuo@isl.intec.co.jpIlya V. Komarov mur@lynx.ruIssei Suzuki issei@jp.FreeBSD.orgItsuro Saito saito@miv.t.u-tokyo.ac.jpJ. Bryant jbryant@argus.flash.netJ. David Lowe lowe@saturn5.comJ. Han hjh@best.comJ. Hawk jhawk@MIT.EDUJ.T. Conklin jtc@cygnus.comJ.T. Jang keith@email.gcn.net.twJack jack@zeus.xtalwind.netJacob Bohn Lorensen jacob@jblhome.ping.mkJagane D Sundar jagane@netcom.comJake Burkholder jake@checker.orgJake Hamby jehamby@lightside.comJames Clark jjc@jclark.comJames D. Stewart jds@c4systm.comJames Jegers jimj@miller.cs.uwm.eduJames Raynard
fhackers@jraynard.demon.co.ukJames T. Liu jtliu@phlebas.rockefeller.eduJames da Silva jds@cs.umd.eduJan Conard
charly@fachschaften.tu-muenchen.deJan Koum jkb@FreeBSD.orgJanick Taillandier
Janick.Taillandier@ratp.frJanusz Kokot janek@gaja.ipan.lublin.plJarle Greipsland jarle@idt.unit.noJason Garman init@risen.orgJason Thorpe thorpej@NetBSD.orgJason Wright jason@OpenBSD.orgJason Young
doogie@forbidden-donut.anet-stl.comJavier Martin Rueda jmrueda@diatel.upm.esJay Fenlason hack@datacube.comJaye Mathisen mrcpu@cdsnet.netJeff Bartig jeffb@doit.wisc.eduJeff Forys jeff@forys.cranbury.nj.usJeff Kletsky Jeff@Wagsky.comJeffrey Evans evans@scnc.k12.mi.usJeffrey Wheat jeff@cetlink.netJens Schweikhardt schweikh@noc.dfn.dJeremy Allison jallison@whistle.comJeremy Chatfield jdc@xinside.comJeremy Lea reg@shale.csir.co.zaJeremy Prior unknownJeroen Ruigrok/Asmodai asmodai@wxs.nlJesse Rosenstock jmr@ugcs.caltech.eduJian-Da Li jdli@csie.nctu.edu.twJim Babb babb@FreeBSD.orgJim Binkley jrb@cs.pdx.eduJim Carroll jim@carroll.comJim Flowers jflowers@ezo.netJim Leppek jleppek@harris.comJim Lowe james@cs.uwm.eduJim Mattson jmattson@sonic.netJim Mercer jim@komodo.reptiles.orgJim Mock jim@phrantic.phear.netJim Wilson wilson@moria.cygnus.comJimbo Bahooli
griffin@blackhole.iceworld.orgJin Guojun jin@george.lbl.govJoachim Kuebart unknownJoao Carlos Mendes Luis jonny@jonny.eng.brJochen Pohl jpo.drs@sni.deJoe "Marcus" Clarke marcus@miami.eduJoe Abley jabley@clear.co.nzJoe Jih-Shian Lu jslu@dns.ntu.edu.twJoe Orthoefer j_orthoefer@tia.netJoe Traister traister@mojozone.orgJoel Faedi Joel.Faedi@esial.u-nancy.frJoel Ray Holveck joelh@gnu.orgJoel Sutton sutton@aardvark.apana.org.auJohan Granlund johan@granlund.nuJohan Karlsson k@numeri.campus.luth.seJohan Larsson johan@moon.campus.luth.seJohann Tonsing jtonsing@mikom.csir.co.zaJohannes Helander unknownJohannes Stille unknownJohn Baldwin jobaldwi@vt.eduJohn Beckett jbeckett@southern.eduJohn Beukema jbeukema@hk.super.netJohn Brezak unknownJohn Capo jc@irbs.comJohn F. Woods jfw@jfwhome.funhouse.comJohn Goerzen
jgoerzen@alexanderwohl.complete.orgJohn Hay jhay@mikom.csir.co.zaJohn Heidemann johnh@isi.eduJohn Hood cgull@owl.orgJohn Kohl unknownJohn Lind john@starfire.mn.orgJohn Mackin john@physiol.su.oz.auJohn P johnp@lodgenet.comJohn Perry perry@vishnu.alias.netJohn Preisler john@vapornet.comJohn Rochester jr@cs.mun.caJohn Sadler john_sadler@alum.mit.eduJohn Saunders john@pacer.nlc.net.auJohn W. DeBoskey jwd@unx.sas.comJohn Wehle john@feith.comJohn Woods jfw@eddie.mit.eduJon Morgan morgan@terminus.trailblazer.comJonathan H N Chin jc254@newton.cam.ac.ukJonathan Hanna
jh@pc-21490.bc.rogers.wave.caJorge Goncalves j@bug.fe.up.ptJorge M. Goncalves ee96199@tom.fe.up.ptJos Backus jbackus@plex.nlJose M. Alcaide jose@we.lc.ehu.esJose Marques jose@nobody.orgJosef Grosch
jgrosch@superior.mooseriver.comJosef Karthauser joe@uk.FreeBSD.orgJoseph Stein joes@wstein.comJosh Gilliam josh@quick.netJosh Tiefenbach josh@ican.netJuergen Lock nox@jelal.hb.north.deJuha Inkari inkari@cc.hut.fiJukka A. Ukkonen jua@iki.fiJulian Assange proff@suburbia.netJulian Coleman j.d.coleman@ncl.ac.uk&a.jhsJulian Jenkins kaveman@magna.com.auJunichi Satoh junichi@jp.FreeBSD.orgJunji SAKAI sakai@jp.FreeBSD.orgJunya WATANABE junya-w@remus.dti.ne.jpK.Higashino a00303@cc.hc.keio.ac.jpKUNISHIMA Takeo kunishi@c.oka-pu.ac.jpKai Vorma vode@snakemail.hut.fiKaleb S. Keithley kaleb@ics.comKaneda Hiloshi vanitas@ma3.seikyou.ne.jpKapil Chowksey kchowksey@hss.hns.comKarl Denninger karl@mcs.comKarl Dietz Karl.Dietz@triplan.comKarl Lehenbauer karl@NeoSoft.comKato Takenori
kato@eclogite.eps.nagoya-u.ac.jpKawanobe Koh kawanobe@st.rim.or.jpKazuhiko Kiriyama kiri@kiri.toba-cmt.ac.jpKazuo Horikawa horikawa@jp.FreeBSD.orgKees Jan Koster kjk1@ukc.ac.ukKeith Bostic bostic@bostic.comKeith E. Walker unknownKeith Moore unknownKeith Sklower unknownKen Hornstein unknownKen Key key@cs.utk.eduKen Mayer kmayer@freegate.comKenji Saito marukun@mx2.nisiq.netKenji Tomita tommyk@da2.so-net.or.jpKenneth Furge kenneth.furge@us.endress.comKenneth Monville desmo@bandwidth.orgKenneth R. Westerback krw@tcn.netKenneth Stailey kstailey@gnu.ai.mit.eduKent Talarico kent@shipwreck.tsoft.netKent Vander Velden graphix@iastate.eduKentaro Inagaki JBD01226@niftyserve.ne.jpKevin Bracey kbracey@art.acorn.co.ukKevin Day toasty@dragondata.comKevin Lahey kml@nas.nasa.govKevin Lokevlo@hello.com.twKevin Street street@iname.comKevin Van Maren vanmaren@fast.cs.utah.eduKiroh HARADA kiroh@kh.rim.or.jpKlaus Klein kleink@layla.inka.deKlaus-J. Wolf Yanestra@t-online.deKoichi Sato copan@ppp.fastnet.or.jpKostya Lukin lukin@okbmei.msk.suKouichi Hirabayashi kh@mogami-wire.co.jpKurt D. Zeilenga Kurt@Boolean.NETKurt Olsen kurto@tiny.mcs.usu.eduL. Jonas Olsson
ljo@ljo-slip.DIALIN.CWRU.EduLars Köller
Lars.Koeller@Uni-Bielefeld.DELarry Altneu larry@ALR.COMLaurence Lopez lopez@mv.mv.comLee Cremeans lcremean@tidalwave.netLiang Tai-hwa
avatar@www.mmlab.cse.yzu.edu.twLon Willett lon%softt.uucp@math.utah.eduLouis A. Mamakos louie@TransSys.COMLouis Mamakos loiue@TransSys.comLucas James Lucas.James@ldjpc.apana.org.auLyndon Nerenberg lyndon@orthanc.comM.C. Wong unknownMANTANI Nobutaka nobutaka@nobutaka.comMIHIRA Sanpei Yoshiro sanpei@sanpei.org
- MITA Yoshio mita@jp.FreeBSD.ORG
+ MITA Yoshio mita@jp.FreeBSD.orgMITSUNAGA Noriaki
mitchy@er.ams.eng.osaka-u.ac.jpMOROHOSHI Akihiko moro@race.u-tokyo.ac.jpMagnus Enbom dot@tinto.campus.luth.seMahesh Neelakanta mahesh@gcomm.comMakoto MATSUSHITA matusita@jp.FreeBSD.orgMakoto WATANABE
watanabe@zlab.phys.nagoya-u.ac.jpMalte Lance malte.lance@gmx.netManu Iyengar
iyengar@grunthos.pscwa.psca.comMarc Frajola marc@dev.comMarc Ramirez mrami@mramirez.sy.yale.eduMarc Slemko marcs@znep.comMarc van Kempen wmbfmk@urc.tue.nlMarc van Woerkom van.woerkom@netcologne.deMarcel Moolenaar marcel@scc.nlMario Sergio Fujikawa Ferreira
lioux@gns.com.brMark Andrews unknownMark Cammidge mark@gmtunx.ee.uct.ac.zaMark Diekhans markd@grizzly.comMark Huizer xaa@stack.nlMark J. Taylor mtaylor@cybernet.comMark Krentel krentel@rice.eduMark Mayo markm@vmunix.comMark Thompson thompson@tgsoft.comMark Tinguely tinguely@plains.nodak.eduMark Treacy unknownMark Valentine mark@linus.demon.co.ukMartin BirgmeierMartin Ibert mib@ppe.bb-data.deMartin Kammerhofer dada@sbox.tu-graz.ac.atMartin Renters martin@tdc.on.caMartti Kuparinen
martti.kuparinen@ericsson.comMasachika ISHIZUKA
ishizuka@isis.min.ntt.jpMas.TAKEMURA unknownMasafumi NAKANE max@wide.ad.jpMasahiro Sekiguchi
seki@sysrap.cs.fujitsu.co.jpMasanobu Saitoh msaitoh@spa.is.uec.ac.jpMasanori Kanaoka kana@saijo.mke.mei.co.jpMasanori Kiriake seiken@ARGV.ACMasatoshi TAMURA
tamrin@shinzan.kuee.kyoto-u.ac.jpMats Lofkvist mal@algonet.seMatt Bartley mbartley@lear35.cytex.comMatt Thomas matt@3am-software.comMatt White mwhite+@CMU.EDUMatthew C. Mead mmead@Glock.COMMatthew Cashdollar mattc@rfcnet.comMatthew Flatt mflatt@cs.rice.eduMatthew Fuller fullermd@futuresouth.comMatthew Stein matt@bdd.netMatthias Pfaller leo@dachau.marco.deMatthias Scheler tron@netbsd.orgMattias Gronlund
Mattias.Gronlund@sa.erisoft.seMattias Pantzare pantzer@ludd.luth.seMaurice Castro
maurice@planet.serc.rmit.edu.auMax Euston meuston@jmrodgers.comMax Khon fjoe@husky.iclub.nsu.ruMaxim Bolotin max@rsu.ruMicha Class
michael_class@hpbbse.bbn.hp.comMichael Butler imb@scgt.oz.auMichael Butschky butsch@computi.erols.comMichael Clay mclay@weareb.org
- Michael Elbel me@FreeBSD.ORG
+ Michael Elbel me@FreeBSD.orgMichael Galassi nerd@percival.rain.comMichael Hancock michaelh@cet.co.jpMichael Hohmuth hohmuth@inf.tu-dresden.deMichael Perlman canuck@caam.rice.eduMichael Petry petry@netwolf.NetMasters.comMichael Reifenberger root@totum.plaut.deMichael Searle searle@longacre.demon.co.ukMichal Listos mcl@Amnesiac.123.orgMichio Karl Jinbo
karl@marcer.nagaokaut.ac.jpMiguel Angel Sagreras
msagre@cactus.fi.uba.arMihoko Tanaka m_tonaka@pa.yokogawa.co.jpMika Nystrom mika@cs.caltech.eduMikael Hybsch micke@dynas.seMikael Karpberg
karpen@ocean.campus.luth.seMike Del repenting@hotmail.comMike Durian durian@plutotech.comMike Durkin mdurkin@tsoft.sf-bay.orgMike E. Matsnev mike@azog.cs.msu.suMike Evans mevans@candle.comMike Grupenhoff kashmir@umiacs.umd.eduMike Hibler mike@marker.cs.utah.eduMike Karels unknownMike McGaughey mmcg@cs.monash.edu.auMike Meyer mwm@shiva.the-park.comMike Mitchell mitchell@ref.tfs.comMike Murphy mrm@alpharel.comMike Peck mike@binghamton.eduMike Spengler mks@msc.eduMikhail A. Sokolov mishania@demos.suMikhail Teterin mi@aldan.ziplink.netMing-I Hseh PA@FreeBSD.ee.Ntu.edu.TWMitsuru IWASAKI iwasaki@pc.jaring.myMitsuru Yoshida mitsuru@riken.go.jpMonte Mitzelfelt monte@gonefishing.orgMorgan Davis root@io.cts.comMostyn Lewis mostyn@mrl.comMotomichi Matsuzaki mzaki@e-mail.ne.jpMotoyuki Kasahara m-kasahr@sra.co.jpMotoyuki Konno motoyuki@snipe.rim.or.jpMunechika Sumikawa sumikawa@kame.netMurray Stokely murray@cdrom.comN.G.Smith ngs@sesame.hensa.ac.ukNAGAO Tadaaki nagao@cs.titech.ac.jpNAKAJI Hiroyuki
nakaji@tutrp.tut.ac.jpNAKAMURA Kazushi nkazushi@highway.or.jpNAKAMURA Motonori
motonori@econ.kyoto-u.ac.jpNIIMI Satoshi sa2c@and.or.jpNOKUBI Hirotaka h-nokubi@yyy.or.jpNadav Eiron nadav@barcode.co.ilNanbor Wang nw1@cs.wustl.eduNaofumi Honda
honda@Kururu.math.sci.hokudai.ac.jpNaoki Hamada nao@tom-yam.or.jpNarvi narvi@haldjas.folklore.eeNathan Ahlstrom nrahlstr@winternet.comNathan Dorfman nathan@rtfm.netNeal Fachan kneel@ishiboo.comNeil Blakey-Milner nbm@rucus.ru.ac.zaNiall Smart rotel@indigo.ieNick Barnes Nick.Barnes@pobox.comNick Handel nhandel@NeoSoft.comNick Hilliard nick@foobar.org&a.nsayer;Nick Williams njw@cs.city.ac.ukNickolay N. Dudorov nnd@itfs.nsk.suNiklas Hallqvist niklas@filippa.appli.seNisha Talagala nisha@cs.berkeley.eduNo Name ZW6T-KND@j.asahi-net.or.jpNo Name adrian@virginia.eduNo Name alex@elvisti.kiev.uaNo Name anto@netscape.netNo Name bobson@egg.ics.nitch.ac.jpNo Name bovynf@awe.beNo Name burg@is.ge.comNo Name chris@gnome.co.ukNo Name colsen@usa.netNo Name coredump@nervosa.comNo Name dannyman@arh0300.urh.uiuc.eduNo Name davids@SECNET.COMNo Name derek@free.orgNo Name devet@adv.IAEhv.nlNo Name djv@bedford.netNo Name dvv@sprint.netNo Name enami@ba2.so-net.or.jpNo Name flash@eru.tubank.msk.suNo Name flash@hway.ruNo Name fn@pain.csrv.uidaho.eduNo Name gclarkii@netport.neosoft.comNo Name gordon@sheaky.lonestar.orgNo Name graaf@iae.nlNo Name greg@greg.rim.or.jpNo Name grossman@cygnus.comNo Name gusw@fub46.zedat.fu-berlin.deNo Name hfir@math.rochester.eduNo Name hnokubi@yyy.or.jpNo Name iaint@css.tuu.utas.edu.auNo Name invis@visi.comNo Name ishisone@sra.co.jpNo Name iverson@lionheart.comNo Name jpt@magic.netNo Name junker@jazz.snu.ac.krNo Name k-sugyou@ccs.mt.nec.co.jpNo Name kenji@reseau.toyonaka.osaka.jpNo Name kfurge@worldnet.att.netNo Name lh@aus.orgNo Name lhecking@nmrc.ucc.ieNo Name mrgreen@mame.mu.oz.auNo Name nakagawa@jp.FreeBSD.orgNo Name ohki@gssm.otsuka.tsukuba.ac.jpNo Name owaki@st.rim.or.jpNo Name pechter@shell.monmouth.comNo Name pete@pelican.pelican.comNo Name pritc003@maroon.tc.umn.eduNo Name risner@stdio.comNo Name roman@rpd.univ.kiev.uaNo Name root@ns2.redline.ruNo Name root@uglabgw.ug.cs.sunysb.eduNo Name stephen.ma@jtec.com.auNo Name sumii@is.s.u-tokyo.ac.jpNo Name takas-su@is.aist-nara.ac.jpNo Name tamone@eig.unige.chNo Name tjevans@raleigh.ibm.comNo Name tony-o@iij.ad.jp amurai@spec.co.jpNo Name torii@tcd.hitachi.co.jpNo Name uenami@imasy.or.jpNo Name uhlar@netlab.skNo Name vode@hut.fiNo Name wlloyd@mpd.caNo Name wlr@furball.wellsfargo.comNo Name wmbfmk@urc.tue.nlNo Name yamagata@nwgpc.kek.jpNo Name ziggy@ryan.orgNobuhiro Yasutomi nobu@psrc.isac.co.jpNobuyuki Koganemaru
kogane@koganemaru.co.jpNorio Suzuki nosuzuki@e-mail.ne.jp
- Noritaka Ishizumi graphite@jp.FreeBSD.ORG
+ Noritaka Ishizumi graphite@jp.FreeBSD.orgNoriyuki Soda soda@sra.co.jpOh Junseon hollywar@mail.holywar.netOlaf Wagner wagner@luthien.in-berlin.deOleg Sharoiko os@rsu.ruOliver Breuninger ob@seicom.NETOliver Friedrichs oliver@secnet.comOliver Fromme
oliver.fromme@heim3.tu-clausthal.deOliver Laumann
net@informatik.uni-bremen.deOliver Oberdorf oly@world.std.comOlof Johansson offe@ludd.luth.se
- Osokin Sergey aka oZZ ozz@freebsd.org.ru
+ Osokin Sergey aka oZZ ozz@FreeBSD.org.ruPace Willisson pace@blitz.comPaco Rosich rosich@modico.eleinf.uv.esPalle Girgensohn girgen@partitur.seParag Patel parag@cgt.comPascal Pederiva pascal@zuo.dec.comPasvorn Boonmark boonmark@juniper.netPatrick Gardella patrick@cre8tivegroup.comPatrick Hausen unknownPaul Antonov apg@demos.suPaul F. Werkowski unknownPaul Fox pgf@foxharp.boston.ma.usPaul Koch koch@thehub.com.auPaul Kranenburg pk@NetBSD.orgPaul Mackerras paulus@cs.anu.edu.auPaul Popelka paulp@uts.amdahl.comPaul S. LaFollette, Jr. unknownPaul Saab paul@mu.orgPaul Sandys myj@nyct.netPaul T. Root proot@horton.iaces.comPaul Vixie paul@vix.comPaulo Menezes paulo@isr.uc.ptPaulo Menezes pm@dee.uc.ptPedro A M Vazquez vazquez@IQM.Unicamp.BRPedro Giffuni giffunip@asme.orgPete Bentley pete@demon.netPeter Childs pjchilds@imforei.apana.org.auPeter Cornelius pc@inr.fzk.dePeter Haight peterh@prognet.comPeter Jeremy perer.jeremy@alcatel.com.auPeter M. Chen pmchen@eecs.umich.eduPeter Much peter@citylink.dinoex.sub.orgPeter Olsson unknownPeter Philipp pjp@bsd-daemon.netPeter Stubbs PETERS@staidan.qld.edu.auPhil Maker pjm@cs.ntu.edu.auPhil Sutherland
philsuth@mycroft.dialix.oz.auPhil Taylor phil@zipmail.co.ukPhilip Musumeci philip@rmit.edu.auPierre Y. Dampure pierre.dampure@k2c.co.ukPius Fischer pius@ienet.comPomegranate daver@flag.blackened.netPowerdog Industries
kevin.ruddy@powerdog.comR. Kym HorsellRajesh Vaidheeswarran rv@fore.comRalf Friedl friedl@informatik.uni-kl.deRandal S. Masutani randal@comtest.comRandall Hopper rhh@ct.picker.comRandall W. Dean rwd@osf.orgRandy Bush rbush@bainbridge.verio.netReinier Bezuidenhout
rbezuide@mikom.csir.co.zaRemy Card Remy.Card@masi.ibp.frRicardas Cepas rch@richard.eu.orgRiccardo Veraldi veraldi@cs.unibo.itRichard Henderson richard@atheist.tamu.eduRichard Hwang rhwang@bigpanda.comRichard Kiss richard@homemail.comRichard J Kuhns rjk@watson.grauel.comRichard M. Neswold
rneswold@drmemory.fnal.govRichard Seaman, Jr. dick@tar.comRichard Stallman rms@gnu.ai.mit.eduRichard Straka straka@user1.inficad.comRichard Tobin richard@cogsci.ed.ac.ukRichard Wackerbarth rkw@Dataplex.NETRichard Winkel rich@math.missouri.eduRichard Wiwatowski rjwiwat@adelaide.on.netRick Macklem rick@snowhite.cis.uoguelph.caRick Macklin unknownRob Austein sra@epilogue.comRob Mallory rmallory@qualcomm.comRob Snow rsnow@txdirect.netRobert Crowe bob@speakez.comRobert D. Thrush rd@phoenix.aii.comRobert Eckardt
roberte@MEP.Ruhr-Uni-Bochum.deRobert Sanders rsanders@mindspring.comRobert Sexton robert@kudra.comRobert Shady rls@id.netRobert Swindells swindellsr@genrad.co.ukRobert Watson robert@cyrus.watson.orgRobert Withrow witr@rwwa.comRobert Yoder unknownRobin Carey
robin@mailgate.dtc.rankxerox.co.ukRoger Hardiman roger@cs.strath.ac.ukRoland Jesse jesse@cs.uni-magdeburg.deRon Bickers rbickers@intercenter.netRon Lenk rlenk@widget.xmission.comRonald Kuehn kuehn@rz.tu-clausthal.deRudolf Cejka unknownRuslan Belkin rus@home2.UA.netRuslan Ermilov ru@ucb.crimea.uaRuslan Shevchenko rssh@cam.grad.kiev.uaRussell L. Carter rcarter@pinyon.orgRussell Vincent rv@groa.uct.ac.zaRyan Younce ryany@pobox.comRyuichiro IMURA imura@cs.titech.ac.jpSANETO Takanori sanewo@strg.sony.co.jpSAWADA Mizuki miz@qb3.so-net.ne.jp
- SUGIMURA Takashi sugimura@jp.FreeBSD.ORG
+ SUGIMURA Takashi sugimura@jp.FreeBSD.orgSURANYI Peter
suranyip@jks.is.tsukuba.ac.jpSakai Hiroaki sakai@miya.ee.kagu.sut.ac.jpSakari Jalovaara sja@tekla.fiSam Hartman hartmans@mit.eduSamuel Lam skl@ScalableNetwork.comSamuele Zannoli zannoli@cs.unibo.itSander Vesik sander@haldjas.folklore.eeSandro Sigala ssigala@globalnet.itSascha Blank blank@fox.uni-trier.deSascha Wildner swildner@channelz.GUN.deSatoh Junichi junichi@astec.co.jpScot Elliott scot@poptart.orgScot W. Hetzel hetzels@westbend.netScott A. Kenney saken@rmta.ml.orgScott Blachowicz
scott.blachowicz@seaslug.orgScott Burris scott@pita.cns.ucla.eduScott Hazen Mueller scott@zorch.sf-bay.orgScott Michel scottm@cs.ucla.eduScott Reynolds scott@clmqt.marquette.mi.usSebastian Strollo seb@erix.ericsson.seSerge A. Babkin babkin@hq.icb.chel.suSerge V. Vakulenko vak@zebub.msk.suSergei Chechetkin
csl@whale.sunbay.crimea.uaSergei S. Laskavy laskavy@pc759.cs.msu.suSergey Gershtein sg@mplik.ruSergey Potapov sp@alkor.ruSergey Shkonda serg@bcs.zp.uaSergey V.Dorokhov svd@kbtelecom.nalnet.ruSergio Lenzi lenzi@bsi.com.brShaun Courtney shaun@emma.eng.uct.ac.zaShawn M. Carey smcarey@mailbox.syr.eduShigio Yamaguchi shigio@wafu.netgate.netShinya Esu esu@yk.rim.or.jpShuichi Tanaka stanaka@bb.mbn.or.jpShunsuke Akiyama akiyama@jp.FreeBSD.orgSimon simon@masi.ibp.frSimon Burge simonb@telstra.com.auSimon J Gerraty sjg@melb.bull.oz.auSimon Marlow simonm@dcs.gla.ac.ukSimon Shapiro shimon@simon-shapiro.orgSin'ichiro MIYATANI siu@phaseone.co.jpSlaven Rezic eserte@cs.tu-berlin.deSoochon Radee slr@mitre.orgSoren Dayton csdayton@midway.uchicago.eduSoren Dossing sauber@netcom.comSoren S. Jorvang soren@dt.dkStefan Bethke stb@hanse.deStefan Eggers seggers@semyam.dinoco.deStefan Moeding s.moeding@ndh.netStefan Petri unknownStefan `Sec` Zehl sec@42.orgSteinar Haug sthaug@nethelp.noStephane E. Potvin sepotvin@videotron.caStephane Legrand stephane@lituus.frStephen Clawson
sclawson@marker.cs.utah.eduStephen F. Combs combssf@salem.ge.comStephen Farrell stephen@farrell.orgStephen Hocking sysseh@devetir.qld.gov.auStephen J. Roznowski sjr@home.netStephen McKay syssgm@devetir.qld.gov.auStephen Melvin melvin@zytek.comSteve Bauer sbauer@rock.sdsmt.eduSteve Coltrin spcoltri@io.comSteve Deering unknownSteve Gerakines steve2@genesis.tiac.netSteve Gericke steveg@comtrol.comSteve Piette steve@simon.chi.il.USSteve Schwarz schwarz@alpharel.comSteven G. Kargl
kargl@troutmask.apl.washington.eduSteven H. Samorodin samorodi@NUXI.comSteven McCanne mccanne@cs.berkeley.eduSteven Plite splite@purdue.eduSteven Wallace unknownStuart Henderson
stuart@internationalschool.co.ukSue Blake sue@welearn.com.auSugimoto Sadahiro ixtl@komaba.utmc.or.jpSugiura Shiro ssugiura@duo.co.jpSujal Patel smpatel@wam.umd.eduSune Stjerneby stjerneby@usa.netSuzuki Yoshiaki
zensyo@ann.tama.kawasaki.jpTadashi Kumano kumano@strl.nhk.or.jpTaguchi Takeshi taguchi@tohoku.iij.ad.jpTakahiro Yugawa yugawa@orleans.rim.or.jpTakanori Watanabe
takawata@shidahara1.planet.sci.kobe-u.ac.jpTakashi Mega mega@minz.orgTakashi Uozu j1594016@ed.kagu.sut.ac.jpTakayuki Ariga a00821@cc.hc.keio.ac.jpTakeru NAIKI naiki@bfd.es.hokudai.ac.jpTakeshi Amaike amaike@iri.co.jpTakeshi MUTOH mutoh@info.nara-k.ac.jpTakeshi Ohashi
ohashi@mickey.ai.kyutech.ac.jpTakeshi WATANABE
watanabe@crayon.earth.s.kobe-u.ac.jpTakuya SHIOZAKI
tshiozak@makino.ise.chuo-u.ac.jpTatoku Ogaito tacha@tera.fukui-med.ac.jpTatsumi HOSOKAWA hosokawa@jp.FreeBSD.orgTed Buswell tbuswell@mediaone.netTed Faber faber@isi.eduTed Lemon mellon@isc.orgTerry Lambert terry@lambert.orgTerry Lee terry@uivlsi.csl.uiuc.eduTetsuya Furukawa tetsuya@secom-sis.co.jpTheo de Raadt deraadt@OpenBSD.orgThomas thomas@mathematik.uni-Bremen.deThomas D. Dean tomdean@ix.netcom.comThomas David Rivers rivers@dignus.comThomas G. McWilliams tgm@netcom.comThomas Gellekum
thomas@ghpc8.ihf.rwth-aachen.deThomas Graichen
graichen@omega.physik.fu-berlin.deThomas König
Thomas.Koenig@ciw.uni-karlsruhe.deThomas Ptacek unknownThomas Stevens tas@stevens.orgThomas Stromberg tstrombe@rtci.comThomas Valentino Crimi
tcrimi+@andrew.cmu.eduThomas Wintergerst thomas@lemur.nord.deÞórður Ívarsson
totii@est.isTim Kientzle kientzle@netcom.comTim Singletary
tsingle@sunland.gsfc.nasa.govTim Wilkinson tim@sarc.city.ac.ukTimo J. Rinne tri@iki.fiTodd Miller millert@openbsd.orgTom root@majestix.cmr.noTom tom@sdf.comTom Gray - DCA dcasba@rain.orgTom Jobbins tom@tom.tjTom Pusateri pusateri@juniper.netTom Rush tarush@mindspring.comTom Samplonius tom@misery.sdf.comTomohiko Kurahashi
kura@melchior.q.t.u-tokyo.ac.jpTony Kimball alk@Think.COMTony Li tli@jnx.comTony Lynn wing@cc.nsysu.edu.twTony Maher tonym@angis.org.auTorbjorn Granlund tege@matematik.su.seToshihiko ARAI toshi@tenchi.ne.jpToshihiko SHIMOKAWA toshi@tea.forus.or.jpToshihiro Kanda candy@kgc.co.jpToshiomi Moriki
Toshiomi.Moriki@ma1.seikyou.ne.jpTrefor S. trefor@flevel.co.ukTrevor Blackwell tlb@viaweb.comURATA Shuichiro s-urata@nmit.tmg.nec.co.jpUdo Schweigert ust@cert.siemens.deUgo Paternostro paterno@dsi.unifi.itUlf Kieber kieber@sax.deUlli Linzen ulli@perceval.camelot.deUstimenko Semen semen@iclub.nsu.ruUwe Arndt arndt@mailhost.uni-koblenz.deVadim Chekan vadim@gc.lviv.uaVadim Kolontsov vadim@tversu.ac.ruVadim Mikhailov mvp@braz.ruVan Jacobson van@ee.lbl.govVasily V. Grechishnikov
bazilio@ns1.ied-vorstu.ac.ruVasim Valejev vasim@uddias.diaspro.comVernon J. Schryver vjs@mica.denver.sgi.comVic Abell abe@cc.purdue.eduVille Eerola ve@sci.fiVincent Poy vince@venus.gaianet.netVincenzo Capuano
VCAPUANO@vmprofs.esoc.esa.deVirgil Champlin champlin@pa.dec.comVladimir A. Jakovenko
vovik@ntu-kpi.kiev.uaVladimir Kushnir kushn@mail.kar.netVsevolod Lobko seva@alex-ua.comW. Gerald Hicks wghicks@bellsouth.netW. Richard Stevens rstevens@noao.eduWalt Howard howard@ee.utah.eduWarren Toomey wkt@csadfa.cs.adfa.oz.auWayne Scott wscott@ichips.intel.comWerner Griessl
werner@btp1da.phy.uni-bayreuth.deWes Santee wsantee@wsantee.oz.netWietse Venema wietse@wzv.win.tue.nlWilfredo Sanchez wsanchez@apple.comWiljo Heinen wiljo@freeside.ki.open.deWilko Bulte wilko@yedi.iaf.nlWill Andrews andrews@technologist.comWillem Jan Withagen wjw@surf.IAE.nlWilliam Jolitz withheldWilliam Liao william@tale.netWojtek Pilorz
wpilorz@celebris.bdk.lublin.plWolfgang Helbig helbig@ba-stuttgart.deWolfgang Solfrank ws@tools.deWolfgang Stanglmeier wolf@FreeBSD.orgWu Ching-hong woju@FreeBSD.ee.Ntu.edu.TWYarema yds@ingress.comYaroslav Terletsky ts@polynet.lviv.uaYasuhito FUTATSUKI futatuki@fureai.or.jpYasuhiro Fukama yasuf@big.or.jpYen-Shuo Su yssu@CCCA.NCTU.edu.twYing-Chieh Liao ijliao@csie.NCTU.edu.twYixin Jin yjin@rain.cs.ucla.eduYoshiaki Uchikawa yoshiaki@kt.rim.or.jpYoshihiko OHTA yohta@bres.tsukuba.ac.jpYoshihisa NAKAGAWA
y-nakaga@ccs.mt.nec.co.jpYoshikazu Goto gotoh@ae.anritsu.co.jpYoshimasa Ohnishi
ohnishi@isc.kyutech.ac.jpYoshishige Arai ryo2@on.rim.or.jpYuichi MATSUTAKA matutaka@osa.att.ne.jpYujiro MIYATA
miyata@bioele.nuee.nagoya-u.ac.jpYukihiro Nakai nacai@iname.comYusuke Nawano azuki@azkey.orgYuu Yashiki s974123@cc.matsuyama-u.ac.jpYuval Yarom yval@cs.huji.ac.ilYves Fonk yves@cpcoup5.tn.tudelft.nlYves Fonk yves@dutncp8.tn.tudelft.nlZach Heilig zach@gaffaneys.comZahemszhky Gabor zgabor@code.huZhong Ming-Xun zmx@mail.CDPA.nsysu.edu.twarci vega@sophia.inria.frder Mouse mouse@Collatz.McRCIM.McGill.EDUfrf frf@xocolatl.comEge Rekk aagero@aage.priv.no386BSD Patch Kit Patch Contributors(in alphabetical order by first name):Adam Glass glass@postgres.berkeley.eduAdrian Hall adrian@ibmpcug.co.ukAndrey A. Chernov ache@astral.msk.suAndrew Herbert andrew@werple.apana.org.auAndrew Moore alm@netcom.comAndy Valencia ajv@csd.mot.comjtk@netcom.comArne Henrik Juul arnej@Lise.Unit.NOBakul Shah bvs@bitblocks.comBarry Lustig barry@ictv.comBob Wilcox bob@obiwan.uucpBranko LankesterBrett Lymn blymn@mulga.awadi.com.AUCharles Hannum mycroft@ai.mit.eduChris G. Demetriou
cgd@postgres.berkeley.eduChris Torek torek@ee.lbl.govChristoph Robitschko
chmr@edvz.tu-graz.ac.atDaniel Poirot poirot@aio.jsc.nasa.govDave Burgess burgess@hrd769.brooks.af.milDave Rivers rivers@ponds.uucpDavid Dawes dawes@physics.su.OZ.AUDavid Greenman dg@Root.COMEric J. Haug ejh@slustl.slu.eduFelix Gaehtgens
felix@escape.vsse.in-berlin.deFrank Maclachlan fpm@crash.cts.comGary A. Browning gab10@griffcd.amdahl.comGary Howland gary@hotlava.comGeoff Rehmet csgr@alpha.ru.ac.zaGoran Hammarback goran@astro.uu.seGuido van Rooij guido@gvr.orgGuy Harris guy@auspex.comHavard Eidnes
Havard.Eidnes@runit.sintef.noHerb Peyerl hpeyerl@novatel.cuc.ab.caHolger Veit Holger.Veit@gmd.deIshii Masahiro, R. Kym HorsellJ.T. Conklin jtc@cygnus.comJagane D Sundar jagane@netcom.comJames Clark jjc@jclark.comJames Jegers jimj@miller.cs.uwm.eduJames W. DolterJames da Silva jds@cs.umd.edu et alJay Fenlason hack@datacube.comJim Wilson wilson@moria.cygnus.comJörg Lohse
lohse@tech7.informatik.uni-hamburg.deJörg Wunsch
joerg_wunsch@uriah.heep.sax.deJohn DysonJohn Woods jfw@eddie.mit.eduJordan K. Hubbard jkh@whisker.hubbard.ieJulian Elischer julian@dialix.oz.au
- Julian Stacey jhs@freebsd.org
+ Julian Stacey jhs@FreeBSD.orgKarl Dietz Karl.Dietz@triplan.comKarl Lehenbauer karl@NeoSoft.comkarl@one.neosoft.comKeith Bostic bostic@toe.CS.Berkeley.EDUKen HughesKent Talarico kent@shipwreck.tsoft.netKevin Lahey kml%rokkaku.UUCP@mathcs.emory.edukml@mosquito.cis.ufl.eduMarc Frajola marc@dev.comMark Tinguely tinguely@plains.nodak.edutinguely@hookie.cs.ndsu.NoDak.eduMartin Renters martin@tdc.on.caMichael Clay mclay@weareb.orgMichael Galassi nerd@percival.rain.comMike Durkin mdurkin@tsoft.sf-bay.orgNaoki Hamada nao@tom-yam.or.jpNate Williams nate@bsd.coe.montana.eduNick Handel nhandel@NeoSoft.comnick@madhouse.neosoft.comPace Willisson pace@blitz.comPaul Kranenburg pk@cs.few.eur.nlPaul Mackerras paulus@cs.anu.edu.auPaul Popelka paulp@uts.amdahl.comPeter da Silva peter@NeoSoft.comPhil Sutherland
philsuth@mycroft.dialix.oz.au
- Poul-Henning Kampphk@FreeBSD.ORG
+ Poul-Henning Kampphk@FreeBSD.orgRalf Friedl friedl@informatik.uni-kl.deRick Macklem root@snowhite.cis.uoguelph.caRobert D. Thrush rd@phoenix.aii.comRodney W. Grimes rgrimes@cdrom.comSascha Wildner swildner@channelz.GUN.deScott Burris scott@pita.cns.ucla.eduScott Reynolds scott@clmqt.marquette.mi.usSean Eric Fagan sef@kithrup.comSimon J Gerraty sjg@melb.bull.oz.ausjg@zen.void.oz.auStephen McKay syssgm@devetir.qld.gov.auTerry Lambert terry@icarus.weber.eduTerry Lee terry@uivlsi.csl.uiuc.eduTor Egge Tor.Egge@idi.ntnu.noWarren Toomey wkt@csadfa.cs.adfa.oz.auWiljo Heinen wiljo@freeside.ki.open.deWilliam Jolitz withheldWolfgang Solfrank ws@tools.deWolfgang Stanglmeier wolf@dentaro.GUN.deYuval Yarom yval@cs.huji.ac.il
diff --git a/en_US.ISO8859-1/books/developers-handbook/policies/chapter.sgml b/en_US.ISO8859-1/books/developers-handbook/policies/chapter.sgml
index 76f8f4f2d6..83cf490b8a 100644
--- a/en_US.ISO8859-1/books/developers-handbook/policies/chapter.sgml
+++ b/en_US.ISO8859-1/books/developers-handbook/policies/chapter.sgml
@@ -1,391 +1,391 @@
Source Tree Guidelines and PoliciesContributed by &a.phk;.This chapter documents various guidelines and policies in force for
the FreeBSD source tree.MAINTAINER on MakefilesJune 1996.If a particular portion of the FreeBSD distribution is being
maintained by a person or group of persons, they can communicate this
fact to the world by adding a
MAINTAINER= email-addresses
line to the Makefiles covering this portion of the
source tree.The semantics of this are as follows:The maintainer owns and is responsible for that code. This means
that he is responsible for fixing bugs and answer problem reports
pertaining to that piece of the code, and in the case of contributed
software, for tracking new versions, as appropriate.Changes to directories which have a maintainer defined shall be sent
to the maintainer for review before being committed. Only if the
maintainer does not respond for an unacceptable period of time, to
several emails, will it be acceptable to commit changes without review
by the maintainer. However, it is suggested that you try and have the
changes reviewed by someone else if at all possible.It is of course not acceptable to add a person or group as
maintainer unless they agree to assume this duty. On the other hand it
doesn't have to be a committer and it can easily be a group of
people.Contributed SoftwareContributed by &a.phk; and &a.obrien;. June 1996.Some parts of the FreeBSD distribution consist of software that is
actively being maintained outside the FreeBSD project. For historical
reasons, we call this contributed software. Some
examples are perl, gcc and patch.Over the last couple of years, various methods have been used in
dealing with this type of software and all have some number of
advantages and drawbacks. No clear winner has emerged.Since this is the case, after some debate one of these methods has
been selected as the “official” method and will be required
for future imports of software of this kind. Furthermore, it is
strongly suggested that existing contributed software converge on this
model over time, as it has significant advantages over the old method,
including the ability to easily obtain diffs relative to the
“official” versions of the source by everyone (even without
cvs access). This will make it significantly easier to return changes
to the primary developers of the contributed software.Ultimately, however, it comes down to the people actually doing the
work. If using this model is particularly unsuited to the package being
dealt with, exceptions to these rules may be granted only with the
approval of the core team and with the general consensus of the other
developers. The ability to maintain the package in the future will be a
key issue in the decisions.Because of some unfortunate design limitations with the RCS file
format and CVS's use of vendor branches, minor, trivial and/or
cosmetic changes are strongly discouraged on
files that are still tracking the vendor branch. “Spelling
fixes” are explicitly included here under the
“cosmetic” category and are to be avoided for files with
revision 1.1.x.x. The repository bloat impact from a single character
change can be rather dramatic.The Tcl embedded programming
language will be used as example of how this model works:src/contrib/tcl contains the source as
distributed by the maintainers of this package. Parts that are entirely
not applicable for FreeBSD can be removed. In the case of Tcl, the
mac, win and
compat subdirectories were eliminated before the
importsrc/lib/libtcl contains only a "bmake style"
Makefile that uses the standard
bsd.lib.mk makefile rules to produce the library
and install the documentation.src/usr.bin/tclsh contains only a bmake style
Makefile which will produce and install the
tclsh program and its associated man-pages using the
standard bsd.prog.mk rules.src/tools/tools/tcl_bmake contains a couple of
shell-scripts that can be of help when the tcl software needs updating.
These are not part of the built or installed software.The important thing here is that the
src/contrib/tcl directory is created according to
the rules: It is supposed to contain the sources as distributed (on a
proper CVS vendor-branch and without RCS keyword expansion) with as few
FreeBSD-specific changes as possible. The 'easy-import' tool on
freefall will assist in doing the import, but if there are any doubts on
how to go about it, it is imperative that you ask first and not blunder
ahead and hope it “works out”. CVS is not forgiving of
import accidents and a fair amount of effort is required to back out
major mistakes.Because of the previously mentioned design limitations with CVS's
vendor branches, it is required that “official” patches from
the vendor be applied to the original distributed sources and the result
re-imported onto the vendor branch again. Official patches should never
be patched into the FreeBSD checked out version and "committed", as this
destroys the vendor branch coherency and makes importing future versions
rather difficult as there will be conflicts.Since many packages contain files that are meant for compatibility
with other architectures and environments that FreeBSD, it is
permissible to remove parts of the distribution tree that are of no
interest to FreeBSD in order to save space. Files containing copyright
notices and release-note kind of information applicable to the remaining
files shall not be removed.If it seems easier, the bmakeMakefiles can be produced from the dist tree
automatically by some utility, something which would hopefully make it
even easier to upgrade to a new version. If this is done, be sure to
check in such utilities (as necessary) in the
src/tools directory along with the port itself so
that it is available to future maintainers.In the src/contrib/tcl level directory, a file
called FREEBSD-upgrade should be added and it
should states things like:Which files have been left outWhere the original distribution was obtained from and/or the
official master site.Where to send patches back to the original authorsPerhaps an overview of the FreeBSD-specific changes that have
been made.However, please do not import FREEBSD-upgrade
with the contributed source. Rather you should cvs add
FREEBSD-upgrade ; cvs ci after the initial import. Example
wording from src/contrib/cpio is below:
This directory contains virgin sources of the original distribution files
on a "vendor" branch. Do not, under any circumstances, attempt to upgrade
the files in this directory via patches and a cvs commit. New versions or
official-patch versions must be imported. Please remember to import with
"-ko" to prevent CVS from corrupting any vendor RCS Ids.
For the import of GNU cpio 2.4.2, the following files were removed:
INSTALL cpio.info mkdir.c
Makefile.in cpio.texi mkinstalldirs
To upgrade to a newer version of cpio, when it is available:
1. Unpack the new version into an empty directory.
[Do not make ANY changes to the files.]
2. Remove the files listed above and any others that don't apply to
FreeBSD.
3. Use the command:
cvs import -ko -m 'Virgin import of GNU cpio v<version>' \
src/contrib/cpio GNU cpio_<version>
For example, to do the import of version 2.4.2, I typed:
cvs import -ko -m 'Virgin import of GNU v2.4.2' \
src/contrib/cpio GNU cpio_2_4_2
4. Follow the instructions printed out in step 3 to resolve any
conflicts between local FreeBSD changes and the newer version.
Do not, under any circumstances, deviate from this procedure.
To make local changes to cpio, simply patch and commit to the main
branch (aka HEAD). Never make local changes on the GNU branch.
All local changes should be submitted to "cpio@gnu.ai.mit.edu" for
inclusion in the next vendor release.
-obrien@freebsd.org - 30 March 1997
+obrien@FreeBSD.org - 30 March 1997
Encumbered filesIt might occasionally be necessary to include an encumbered file in
the FreeBSD source tree. For example, if a device requires a small
piece of binary code to be loaded to it before the device will operate,
and we do not have the source to that code, then the binary file is said
to be encumbered. The following policies apply to including encumbered
files in the FreeBSD source tree.Any file which is interpreted or executed by the system CPU(s)
and not in source format is encumbered.Any file with a license more restrictive than BSD or GNU is
encumbered.A file which contains downloadable binary data for use by the
hardware is not encumbered, unless (1) or (2) apply to it. It must
be stored in an architecture neutral ASCII format (file2c or
uuencoding is recommended).Any encumbered file requires specific approval from the Core team before it is added to the
CVS repository.Encumbered files go in src/contrib or
src/sys/contrib.The entire module should be kept together. There is no point in
splitting it, unless there is code-sharing with non-encumbered
code.Object files are named
arch/filename.o.uu>.Kernel files;Should always be referenced in
conf/files.* (for build simplicity).Should always be in LINT, but the Core team decides per case if it
should be commented out or not. The Core team can, of course, change
their minds later on.The Release Engineer
decides whether or not it goes in to the release.User-land files;The Core team decides if
the code should be part of make world.The Release Engineer
decides if it goes in to the release.Shared LibrariesContributed by &a.asami;, &a.peter;, and &a.obrien; 9
December 1996.If you are adding shared library support to a port or other piece of
software that doesn't have one, the version numbers should follow these
rules. Generally, the resulting numbers will have nothing to do with
the release version of the software.The three principles of shared library building are:Start from 1.0If there is a change that is backwards compatible, bump minor
numberIf there is an incompatible change, bump major numberFor instance, added functions and bugfixes result in the minor
version number being bumped, while deleted functions, changed function
call syntax etc. will force the major version number to change.Stick to version numbers of the form major.minor
(x.y). Our
dynamic linker does not handle version numbers of the form
x.y.z
well. Any version number after the y
(ie. the third digit) is totally ignored when comparing shared lib
version numbers to decide which library to link with. Given two shared
libraries that differ only in the “micro” revision,
ld.so will link with the higher one. Ie: if you link
with libfoo.so.3.3.3, the linker only records
3.3 in the headers, and will link with anything
starting with
libfoo.so.3.(anything >=
3).(highest
available).ld.so will always use the highest
“minor” revision. Ie: it will use
libc.so.2.2 in preference to
libc.so.2.0, even if the program was initially
linked with libc.so.2.0.For non-port libraries, it is also our policy to change the shared
library version number only once between releases. When you make a
change to a system library that requires the version number to be
bumped, check the Makefile's commit logs. It is the
responsibility of the committer to ensure that the first such change
since the release will result in the shared library version number in
the Makefile to be updated, and any subsequent
changes will not.
diff --git a/en_US.ISO8859-1/books/handbook/advanced-networking/chapter.sgml b/en_US.ISO8859-1/books/handbook/advanced-networking/chapter.sgml
index a5ed9584f2..8f3ecfdc06 100644
--- a/en_US.ISO8859-1/books/handbook/advanced-networking/chapter.sgml
+++ b/en_US.ISO8859-1/books/handbook/advanced-networking/chapter.sgml
@@ -1,934 +1,934 @@
Advanced NetworkingGateways and RoutesContributed by &a.gryphon;. 6 October
1995.For one machine to be able to find another, there must be a
mechanism in place to describe how to get from one to the other. This is
called Routing. A “route” is a defined pair of addresses: a
“destination” and a “gateway”. The pair
indicates that if you are trying to get to this
destination, send along through this
gateway. There are three types of destinations:
individual hosts, subnets, and “default”. The
“default route” is used if none of the other routes apply.
We will talk a little bit more about default routes later on. There are
also three types of gateways: individual hosts, interfaces (also called
“links”), and ethernet hardware addresses.An exampleTo illustrate different aspects of routing, we will use the
following example which is the output of the command netstat
-r:Destination Gateway Flags Refs Use Netif Expire
default outside-gw UGSc 37 418 ppp0
localhost localhost UH 0 181 lo0
test0 0:e0:b5:36:cf:4f UHLW 5 63288 ed0 77
10.20.30.255 link#1 UHLW 1 2421
foobar.com link#1 UC 0 0
host1 0:e0:a8:37:8:1e UHLW 3 4601 lo0
host2 0:e0:a8:37:8:1e UHLW 0 5 lo0 =>
host2.foobar.com link#1 UC 0 0
224 link#1 UC 0 0The first two lines specify the default route (which we will cover
in the next section) and the localhost route.The interface (Netif column) that it specifies
to use for localhost is
lo0, also known as the loopback device. This
says to keep all traffic for this destination internal, rather than
sending it out over the LAN, since it will only end up back where it
started anyway.The next thing that stands out are the 0:e0:... addresses. These are ethernet hardware
addresses. FreeBSD will automatically identify any hosts
(test0 in the example) on the local ethernet and add
a route for that host, directly to it over the ethernet interface,
ed0. There is also a timeout
(Expire column) associated with this type of route,
which is used if we fail to hear from the host in a specific amount of
time. In this case the route will be automatically deleted. These
hosts are identified using a mechanism known as RIP (Routing
Information Protocol), which figures out routes to local hosts based
upon a shortest path determination.FreeBSD will also add subnet routes for the local subnet (10.20.30.255 is the broadcast address for the
subnet 10.20.30, and foobar.com is the domain name associated
with that subnet). The designation link#1 refers
to the first ethernet card in the machine. You will notice no
additional interface is specified for those.Both of these groups (local network hosts and local subnets) have
their routes automatically configured by a daemon called
routed. If this is not run, then only routes which
are statically defined (ie. entered explicitly) will exist.The host1 line refers to our host, which it
knows by ethernet address. Since we are the sending host, FreeBSD
knows to use the loopback interface (lo0)
rather than sending it out over the ethernet interface.The two host2 lines are an example of what
happens when we use an ifconfig alias (see the section of ethernet for
reasons why we would do this). The => symbol
after the lo0 interface says that not only
are we using the loopback (since this is address also refers to the
local host), but specifically it is an alias. Such routes only show
up on the host that supports the alias; all other hosts on the local
network will simply have a link#1 line for
such.The final line (destination subnet 224) deals
with MultiCasting, which will be covered in a another section.The other column that we should talk about are the
Flags. Each route has different attributes that
are described in the column. Below is a short table of some of these
flags and their meanings:UUp: The route is active.HHost: The route destination is a single host.GGateway: Send anything for this destination on to this
remote system, which will figure out from there where to send
it.SStatic: This route was configured manually, not
automatically generated by the system.CClone: Generates a new route based upon this route for
machines we connect to. This type of route is normally used
for local networks.WWasCloned: Indicated a route that was auto-configured
based upon a local area network (Clone) route.LLink: Route involves references to ethernet
hardware.Default routesWhen the local system needs to make a connection to remote host,
it checks the routing table to determine if a known path exists. If
the remote host falls into a subnet that we know how to reach (Cloned
routes), then the system checks to see if it can connect along that
interface.If all known paths fail, the system has one last option: the
“default” route. This route is a special type of gateway
route (usually the only one present in the system), and is always
marked with a c in the flags field. For hosts on a
local area network, this gateway is set to whatever machine has a
direct connection to the outside world (whether via PPP link, or your
hardware device attached to a dedicated data line).If you are configuring the default route for a machine which
itself is functioning as the gateway to the outside world, then the
default route will be the gateway machine at your Internet Service
Provider's (ISP) site.Let us look at an example of default routes. This is a common
configuration:
[Local2] <--ether--> [Local1] <--PPP--> [ISP-Serv] <--ether--> [T1-GW]
The hosts Local1 and Local2 are
at your site, with the formed being your PPP connection to your ISP's
Terminal Server. Your ISP has a local network at their site, which
has, among other things, the server where you connect and a hardware
device (T1-GW) attached to the ISP's Internet feed.The default routes for each of your machines will be:hostdefault gatewayinterfaceLocal2Local1ethernetLocal1T1-GWPPPA common question is “Why (or how) would we set the T1-GW to
be the default gateway for Local1, rather than the ISP server it is
connected to?”.Remember, since the PPP interface is using an address on the ISP's
local network for your side of the connection, routes for any other
machines on the ISP's local network will be automatically generated.
Hence, you will already know how to reach the T1-GW machine, so there
is no need for the intermediate step of sending traffic to the ISP
server.As a final note, it is common to use the address ...1 as the gateway address for your local
network. So (using the same example), if your local class-C address
space was 10.20.30 and your ISP was
using 10.9.9 then the default routes
would be:
Local2 (10.20.30.2) --> Local1 (10.20.30.1)
Local1 (10.20.30.1, 10.9.9.30) --> T1-GW (10.9.9.1)
Dual homed hostsThere is one other type of configuration that we should cover, and
that is a host that sits on two different networks. Technically, any
machine functioning as a gateway (in the example above, using a PPP
connection) counts as a dual-homed host. But the term is really only
used to refer to a machine that sits on two local-area
networks.In one case, the machine as two ethernet cards, each having an
address on the separate subnets. Alternately, the machine may only
have one ethernet card, and be using ifconfig aliasing. The former is
used if two physically separate ethernet networks are in use, the
latter if there is one physical network segment, but two logically
separate subnets.Either way, routing tables are set up so that each subnet knows
that this machine is the defined gateway (inbound route) to the other
subnet. This configuration, with the machine acting as a Bridge
between the two subnets, is often used when we need to implement
packet filtering or firewall security in either or both
directions.Routing propagationWe have already talked about how we define our routes to the
outside world, but not about how the outside world finds us.We already know that routing tables can be set up so that all
traffic for a particular address space (in our examples, a class-C
subnet) can be sent to a particular host on that network, which will
forward the packets inbound.When you get an address space assigned to your site, your service
provider will set up their routing tables so that all traffic for your
subnet will be sent down your PPP link to your site. But how do sites
across the country know to send to your ISP?There is a system (much like the distributed DNS information) that
keeps track of all assigned address-spaces, and defines their point of
connection to the Internet Backbone. The “Backbone” are
the main trunk lines that carry Internet traffic across the country,
and around the world. Each backbone machine has a copy of a master
set of tables, which direct traffic for a particular network to a
specific backbone carrier, and from there down the chain of service
providers until it reaches your network.It is the task of your service provider to advertise to the
backbone sites that they are the point of connection (and thus the
path inward) for your site. This is known as route
propagation.TroubleshootingSometimes, there is a problem with routing propagation, and some
sites are unable to connect to you. Perhaps the most useful command
for trying to figure out where a routing is breaking down is the
&man.traceroute.8; command. It is equally useful if you cannot seem
to make a connection to a remote machine (i.e. &man.ping.8;
fails).The &man.traceroute.8; command is run with the name of the remote
host you are trying to connect to. It will show the gateway hosts
along the path of the attempt, eventually either reaching the target
host, or terminating because of a lack of connection.For more information, see the manual page for
&man.traceroute.8;.NFSContributed by &a.jlind;.Certain Ethernet adapters for ISA PC systems have limitations which
can lead to serious network problems, particularly with NFS. This
difficulty is not specific to FreeBSD, but FreeBSD systems are affected
by it.The problem nearly always occurs when (FreeBSD) PC systems are
networked with high-performance workstations, such as those made by
Silicon Graphics, Inc., and Sun Microsystems, Inc. The NFS mount will
work fine, and some operations may succeed, but suddenly the server will
seem to become unresponsive to the client, even though requests to and
from other systems continue to be processed. This happens to the client
system, whether the client is the FreeBSD system or the workstation. On
many systems, there is no way to shut down the client gracefully once
this problem has manifested itself. The only solution is often to reset
the client, because the NFS situation cannot be resolved.Though the “correct” solution is to get a higher
performance and capacity Ethernet adapter for the FreeBSD system, there
is a simple workaround that will allow satisfactory operation. If the
FreeBSD system is the server, include the option
on the mount from the client. If the FreeBSD
system is the client, then mount the NFS file
system with the option . These options may be
specified using the fourth field of the fstab entry
on the client for automatic mounts, or by using the
parameter of the mount command for manual mounts.It should be noted that there is a different problem, sometimes
mistaken for this one, when the NFS servers and clients are on different
networks. If that is the case, make certain that
your routers are routing the necessary UDP information, or you will not
get anywhere, no matter what else you are doing.In the following examples, fastws is the host
(interface) name of a high-performance workstation, and
freebox is the host (interface) name of a FreeBSD
system with a lower-performance Ethernet adapter. Also,
/sharedfs will be the exported NFS filesystem (see
man exports), and /project will
be the mount point on the client for the exported file system. In all
cases, note that additional options, such as or
and may be desirable in your
application.Examples for the FreeBSD system (freebox) as the
client: in /etc/fstab on freebox:
fastws:/sharedfs /project nfs rw,-r=1024 0 0As a manual mount command on freebox:&prompt.root; mount -t nfs -o -r=1024 fastws:/sharedfs /projectExamples for the FreeBSD system as the server: in
/etc/fstab on fastws:
freebox:/sharedfs /project nfs rw,-w=1024 0 0As a manual mount command on fastws:&prompt.root; mount -t nfs -o -w=1024 freebox:/sharedfs /projectNearly any 16-bit Ethernet adapter will allow operation without the
above restrictions on the read or write size.For anyone who cares, here is what happens when the failure occurs,
which also explains why it is unrecoverable. NFS typically works with a
“block” size of 8k (though it may do fragments of smaller
sizes). Since the maximum Ethernet packet is around 1500 bytes, the NFS
“block” gets split into multiple Ethernet packets, even
though it is still a single unit to the upper-level code, and must be
received, assembled, and acknowledged as a unit.
The high-performance workstations can pump out the packets which
comprise the NFS unit one right after the other, just as close together
as the standard allows. On the smaller, lower capacity cards, the later
packets overrun the earlier packets of the same unit before they can be
transferred to the host and the unit as a whole cannot be reconstructed
or acknowledged. As a result, the workstation will time out and try
again, but it will try again with the entire 8K unit, and the process
will be repeated, ad infinitum.By keeping the unit size below the Ethernet packet size limitation,
we ensure that any complete Ethernet packet received can be acknowledged
individually, avoiding the deadlock situation.Overruns may still occur when a high-performance workstations is
slamming data out to a PC system, but with the better cards, such
overruns are not guaranteed on NFS “units”. When an overrun
occurs, the units affected will be retransmitted, and there will be a
fair chance that they will be received, assembled, and
acknowledged.Diskless OperationContributed by &a.martin;.netboot.com/netboot.rom
allow you to boot your FreeBSD machine over the network and run FreeBSD
without having a disk on your client. Under 2.0 it is now possible to
have local swap. Swapping over NFS is also still supported.Supported Ethernet cards include: Western Digital/SMC 8003, 8013,
8216 and compatibles; NE1000/NE2000 and compatibles (requires
recompile)Setup InstructionsFind a machine that will be your server. This machine will
require enough disk space to hold the FreeBSD 2.0 binaries and
have bootp, tftp and NFS services available. Tested
machines:HP9000/8xx running HP-UX 9.04 or later (pre 9.04 doesn't
work)Sun/Solaris 2.3. (you may need to get bootp)Set up a bootp server to provide the client with IP, gateway,
netmask.
diskless:\
:ht=ether:\
:ha=0000c01f848a:\
:sm=255.255.255.0:\
:hn:\
:ds=192.1.2.3:\
:ip=192.1.2.4:\
:gw=192.1.2.5:\
:vm=rfc1048:Set up a TFTP server (on same machine as bootp server) to
provide booting information to client. The name of this file is
cfg.X.X.X.X (or
/tftpboot/cfg.X.X.X.X,
it will try both) where X.X.X.X is the
IP address of the client. The contents of this file can be any
valid netboot commands. Under 2.0, netboot has the following
commands:helpprint help listip
print/set client's IP addressserver
print/set bootp/tftp server addressnetmask
print/set netmaskhostname nameprint/set hostnamekernel
print/set kernel namerootfs
print/set root filesystemswapfs
print/set swap filesystemswapsize
set diskless swapsize in Kbytesdiskbootboot from diskautobootcontinue boot processtrans
|turn transceiver on|offflags
set boot flagsA typical completely diskless cfg file might contain:
rootfs 192.1.2.3:/rootfs/myclient
swapfs 192.1.2.3:/swapfs
swapsize 20000
hostname myclient.mydomainA cfg file for a machine with local swap might contain:
rootfs 192.1.2.3:/rootfs/myclient
hostname myclient.mydomainEnsure that your NFS server has exported the root (and swap if
applicable) filesystems to your client, and that the client has
root access to these filesystems A typical
/etc/exports file on FreeBSD might look
like:
/rootfs/myclient -maproot=0:0 myclient.mydomain
/swapfs -maproot=0:0 myclient.mydomainAnd on HP-UX:
/rootfs/myclient -root=myclient.mydomain
/swapfs -root=myclient.mydomainIf you are swapping over NFS (completely diskless
configuration) create a swap file for your client using
dd. If your swapfs command
has the arguments /swapfs and the size 20000
as in the example above, the swapfile for myclient will be called
/swapfs/swap.X.X.X.X
where X.X.X.X is the client's IP addr,
eg:&prompt.root; dd if=/dev/zero of=/swapfs/swap.192.1.2.4 bs=1k count=20000Also, the client's swap space might contain sensitive
information once swapping starts, so make sure to restrict read
and write access to this file to prevent unauthorized
access:&prompt.root; chmod 0600 /swapfs/swap.192.1.2.4Unpack the root filesystem in the directory the client will
use for its root filesystem (/rootfs/myclient
in the example above).On HP-UX systems: The server should be running HP-UX 9.04
or later for HP9000/800 series machines. Prior versions do not
allow the creation of device files over NFS.When extracting /dev in
/rootfs/myclient, beware that some
systems (HPUX) will not create device files that FreeBSD is
happy with. You may have to go to single user mode on the
first bootup (press control-c during the bootup phase), cd
/dev and do a sh ./MAKEDEV
all from the client to fix this.Run netboot.com on the client or make an
EPROM from the netboot.rom fileUsing Shared / and /usr
filesystemsAt present there isn't an officially sanctioned way of doing this,
although I have been using a shared /usr
filesystem and individual / filesystems for each
client. If anyone has any suggestions on how to do this cleanly,
please let me and/or the &a.core; know.Compiling netboot for specific setupsNetboot can be compiled to support NE1000/2000 cards by changing
the configuration in
/sys/i386/boot/netboot/Makefile. See the
comments at the top of this file.ISDNLast modified by &a.wlloyd;.A good resource for information on ISDN technology and hardware is
Dan Kegel's ISDN
Page.A quick simple roadmap to ISDN follows:If you live in Europe I suggest you investigate the ISDN card
section.If you are planning to use ISDN primarily to connect to the
Internet with an Internet Provider on a dialup non-dedicated basis,
I suggest you look into Terminal Adapters. This will give you the
most flexibility, with the fewest problems, if you change
providers.If you are connecting two lans together, or connecting to the
Internet with a dedicated ISDN connection, I suggest you consider
the stand alone router/bridge option.Cost is a significant factor in determining what solution you will
choose. The following options are listed from least expensive to most
expensive.ISDN CardsContributed by &a.hm;.This section is really only relevant to ISDN users in countries
where the DSS1/Q.931 ISDN standard is supported.Some growing number of PC ISDN cards are supported under FreeBSD
2.2.x and up by the isdn4bsd driver package. It is still under
development but the reports show that it is successfully used all over
Europe.The latest isdn4bsd version is available from ftp://isdn4bsd@ftp.consol.de/pub/,
the main isdn4bsd ftp site (you have to log in as user
isdn4bsd , give your mail address as the password
and change to the pub directory. Anonymous ftp
as user ftp or anonymous
will not give the desired result).Isdn4bsd allows you to connect to other ISDN routers using either
IP over raw HDLC or by using synchronous PPP. A telephone answering
machine application is also available.Many ISDN PC cards are supported, mostly the ones with a Siemens
ISDN chipset (ISAC/HSCX), support for other chipsets (from Motorola,
Cologne Chip Designs) is currently under development. For an
up-to-date list of supported cards, please have a look at the README
file.In case you are interested in adding support for a different ISDN
protocol, a currently unsupported ISDN PC card or otherwise enhancing
isdn4bsd, please get in touch with hm@kts.org.A majordomo maintained mailing list is available. To join the
- list, send mail to majordomo@FreeBSD.ORG and
+ list, send mail to majordomo@FreeBSD.org and
specify:
subscribe freebsd-isdnin the body of your message.ISDN Terminal AdaptersTerminal adapters(TA), are to ISDN what modems are to regular
phone lines.Most TA's use the standard hayes modem AT command set, and can be
used as a drop in replacement for a modem.A TA will operate basically the same as a modem except connection
and throughput speeds will be much faster than your old modem. You
will need to configure PPP exactly the same
as for a modem setup. Make sure you set your serial speed as high as
possible.The main advantage of using a TA to connect to an Internet
Provider is that you can do Dynamic PPP. As IP address space becomes
more and more scarce, most providers are not willing to provide you
with a static IP anymore. Most standalone routers are not able to
accommodate dynamic IP allocation.TA's completely rely on the PPP daemon that you are running for
their features and stability of connection. This allows you to
upgrade easily from using a modem to ISDN on a FreeBSD machine, if you
already have PPP setup. However, at the same time any problems you
experienced with the PPP program and are going to persist.If you want maximum stability, use the kernel PPP option, not the user-land iijPPP.The following TA's are know to work with FreeBSD.Motorola BitSurfer and Bitsurfer ProAdtranMost other TA's will probably work as well, TA vendors try to make
sure their product can accept most of the standard modem AT command
set.The real problem with external TA's is like modems you need a good
serial card in your computer.You should read the serial ports
section in the handbook for a detailed understanding of serial
devices, and the differences between asynchronous and synchronous
serial ports.A TA running off a standard PC serial port (asynchronous) limits
you to 115.2Kbs, even though you have a 128Kbs connection. To fully
utilize the 128Kbs that ISDN is capable of, you must move the TA to a
synchronous serial card.Do not be fooled into buying an internal TA and thinking you have
avoided the synchronous/asynchronous issue. Internal TA's simply have
a standard PC serial port chip built into them. All this will do, is
save you having to buy another serial cable, and find another empty
electrical socket.A synchronous card with a TA is at least as fast as a standalone
router, and with a simple 386 FreeBSD box driving it, probably more
flexible.The choice of sync/TA vs standalone router is largely a religious
issue. There has been some discussion of this in the mailing lists.
I suggest you search the archives for the
complete discussion.Standalone ISDN Bridges/RoutersISDN bridges or routers are not at all specific to FreeBSD or any
other operating system. For a more complete description of routing
and bridging technology, please refer to a Networking reference
book.In the context of this page, I will use router and bridge
interchangeably.As the cost of low end ISDN routers/bridges comes down, it will
likely become a more and more popular choice. An ISDN router is a
small box that plugs directly into your local Ethernet network(or
card), and manages its own connection to the other bridge/router. It
has all the software to do PPP and other protocols built in.A router will allow you much faster throughput that a standard TA,
since it will be using a full synchronous ISDN connection.The main problem with ISDN routers and bridges is that
interoperability between manufacturers can still be a problem. If you
are planning to connect to an Internet provider, I recommend that you
discuss your needs with them.If you are planning to connect two lan segments together, ie: home
lan to the office lan, this is the simplest lowest maintenance
solution. Since you are buying the equipment for both sides of the
connection you can be assured that the link will work.For example to connect a home computer or branch office network to
a head office network the following setup could be used.Branch office or Home networkNetwork is 10 Base T Ethernet. Connect router to network cable
with AUI/10BT transceiver, if necessary.
---Sun workstation
|
---FreeBSD box
|
---Windows 95 (Do not admit to owning it)
|
Standalone router
|
ISDN BRI lineIf your home/branch office is only one computer you can use a
twisted pair crossover cable to connect to the standalone router
directly.Head office or other lanNetwork is Twisted Pair Ethernet.
-------Novell Server
| H |
| ---Sun
| |
| U ---FreeBSD
| |
| ---Windows 95
| B |
|___---Standalone router
|
ISDN BRI lineOne large advantage of most routers/bridges is that they allow you
to have 2 separate independent PPP connections to
2 separate sites at the same time. This is not
supported on most TA's, except for specific(expensive) models that
have two serial ports. Do not confuse this with channel bonding, MPP
etc.This can be very useful feature, for example if you have an
dedicated internet ISDN connection at your office and would like to
tap into it, but don't want to get another ISDN line at work. A router
at the office location can manage a dedicated B channel connection
(64Kbs) to the internet, as well as a use the other B channel for a
separate data connection. The second B channel can be used for
dialin, dialout or dynamically bond(MPP etc.) with the first B channel
for more bandwidth.An Ethernet bridge will also allow you to transmit more than just
IP traffic, you can also send IPX/SPX or whatever other protocols you
use.
diff --git a/en_US.ISO8859-1/books/handbook/authors.ent b/en_US.ISO8859-1/books/handbook/authors.ent
index bc15cc25ad..43fd766942 100644
--- a/en_US.ISO8859-1/books/handbook/authors.ent
+++ b/en_US.ISO8859-1/books/handbook/authors.ent
@@ -1,387 +1,387 @@
abial@FreeBSD.org">
ache@FreeBSD.org">
adam@FreeBSD.org">
alc@FreeBSD.org">
alex@FreeBSD.org">
amurai@FreeBSD.org">
andreas@FreeBSD.org">
archie@FreeBSD.org">
asami@FreeBSD.org">
ats@FreeBSD.org">
awebster@pubnix.net">
bde@FreeBSD.org">
billf@FreeBSD.org">
brandon@FreeBSD.org">
brian@FreeBSD.org">
cawimm@FreeBSD.org">
cg@FreeBSD.org">
charnier@FreeBSD.org">
chuckr@glue.umd.edu">
chuckr@FreeBSD.org">
cpiazza@FreeBSD.org">
cracauer@FreeBSD.org">
csgr@FreeBSD.org">
cwt@FreeBSD.org">
danny@FreeBSD.org">
darrenr@FreeBSD.org">
davidn@blaze.net.au">
dbaker@FreeBSD.org">
dburr@FreeBSD.org">
dcs@FreeBSD.org">
deischen@FreeBSD.org">
des@FreeBSD.org">
dfr@FreeBSD.org">
dg@FreeBSD.org">
dick@FreeBSD.org">
dillon@FreeBSD.org">
dima@FreeBSD.org">
dirk@FreeBSD.org">
Dirk.vanGulik@jrc.it">
dt@FreeBSD.org">
dufault@FreeBSD.org">
dwhite@FreeBSD.org">
dyson@FreeBSD.org">
eivind@FreeBSD.org">
ejc@FreeBSD.org">
erich@FreeBSD.org">
faq@FreeBSD.org">
fenner@FreeBSD.org">
flathill@FreeBSD.org">
foxfair@FreeBSD.org">
fsmp@FreeBSD.org">
gallatin@FreeBSD.org">
gclarkii@FreeBSD.org">
gehenna@FreeBSD.org">
gena@NetVision.net.il">
ghelmer@cs.iastate.edu">
gibbs@FreeBSD.org">
gj@FreeBSD.org">
gpalmer@FreeBSD.org">
graichen@FreeBSD.org">
green@FreeBSD.org">
grog@FreeBSD.org">
gryphon@healer.com">
guido@FreeBSD.org">
hanai@FreeBSD.org">
handy@sxt4.physics.montana.edu">
helbig@FreeBSD.org">
hm@FreeBSD.org">
hoek@FreeBSD.org">
hosokawa@FreeBSD.org">
hsu@FreeBSD.org">
imp@FreeBSD.org">
itojun@itojun.org">
iwasaki@FreeBSD.org">
jasone@FreeBSD.org">
jb@cimlogic.com.au">
jdp@FreeBSD.org">
jehamby@lightside.com">
jfieber@FreeBSD.org">
jfitz@FreeBSD.org">
jgreco@FreeBSD.org">
jhay@FreeBSD.org">
jhs@FreeBSD.org">
jkh@FreeBSD.org">
jkoshy@FreeBSD.org">
jlemon@FreeBSD.org">
john@starfire.MN.ORG">
jlrobin@FreeBSD.org">
jmacd@FreeBSD.org">
jmb@FreeBSD.org">
jmg@FreeBSD.org">
jmz@FreeBSD.org">
joerg@FreeBSD.org">
john@FreeBSD.org">
jraynard@FreeBSD.org">
jseger@FreeBSD.org">
julian@FreeBSD.org">
jvh@FreeBSD.org">
karl@FreeBSD.org">
kato@FreeBSD.org">
kelly@plutotech.com">
ken@FreeBSD.org">
kjc@FreeBSD.org">
kris@FreeBSD.org">
kuriyama@FreeBSD.org">
lars@FreeBSD.org">
lile@FreeBSD.org">
ljo@FreeBSD.org">
luoqi@FreeBSD.org">
marcel@FreeBSD.org">
markm@FreeBSD.org">
martin@FreeBSD.org">
max@FreeBSD.org">
mark@vmunix.com">
mbarkah@FreeBSD.org">
mckay@FreeBSD.org">
mckusick@FreeBSD.org">
md@bsc.no">
winter@jurai.net">
mharo@FreeBSD.org">
mjacob@FreeBSD.org">
mks@FreeBSD.org">
motoyuki@FreeBSD.org">
mph@FreeBSD.org">
mpp@FreeBSD.org">
msmith@FreeBSD.org">
nate@FreeBSD.org">
nectar@FreeBSD.org">
newton@FreeBSD.org">
n_hibma@FreeBSD.org">
nik@FreeBSD.org">
nsayer@FreeBSD.org">
nsj@FreeBSD.org">
nyan@FreeBSD.org">
obrien@FreeBSD.org">
olah@FreeBSD.org">
opsys@open-systems.net">
paul@FreeBSD.org">
pb@fasterix.freenix.org">
pds@FreeBSD.org">
peter@FreeBSD.org">
phk@FreeBSD.org">
pjchilds@imforei.apana.org.au">
proven@FreeBSD.org">
pst@FreeBSD.org">
rgrimes@FreeBSD.org">
rhuff@cybercom.net">
ricardag@ag.com.br">
rich@FreeBSD.org">
rnordier@FreeBSD.org">
roberto@FreeBSD.org">
rse@FreeBSD.org">
ru@FreeBSD.org">
sada@FreeBSD.org">
scrappy@FreeBSD.org">
se@FreeBSD.org">
sef@FreeBSD.org">
sheldonh@FreeBSD.org">
shige@FreeBSD.org">
simokawa@FreeBSD.org">
smace@FreeBSD.org">
smpatel@FreeBSD.org">
sos@FreeBSD.org">
stark@FreeBSD.org">
stb@FreeBSD.org">
steve@FreeBSD.org">
swallace@FreeBSD.org">
tanimura@FreeBSD.org">
taoka@FreeBSD.org">
tedm@FreeBSD.org">
tegge@FreeBSD.org">
tg@FreeBSD.org">
thepish@FreeBSD.org">
-tom@freebsd.org">
+tom@FreeBSD.org">
torstenb@FreeBSD.org">
truckman@FreeBSD.org">
ugen@FreeBSD.org">
uhclem@FreeBSD.org">
ulf@FreeBSD.org">
vanilla@FreeBSD.org">
wes@FreeBSD.org">
whiteside@acm.org">
wilko@yedi.iaf.nl">
wlloyd@mpd.ca">
wollman@FreeBSD.org">
wosch@FreeBSD.org">
wpaul@FreeBSD.org">
yokota@FreeBSD.org">
diff --git a/en_US.ISO8859-1/books/handbook/bibliography/chapter.sgml b/en_US.ISO8859-1/books/handbook/bibliography/chapter.sgml
index b11aa28161..aeabf86faf 100644
--- a/en_US.ISO8859-1/books/handbook/bibliography/chapter.sgml
+++ b/en_US.ISO8859-1/books/handbook/bibliography/chapter.sgml
@@ -1,478 +1,478 @@
BibliographyWhile the manual pages provide the definitive reference for individual
pieces of the FreeBSD operating system, they are notorious for not
illustrating how to put the pieces together to make the whole operating
system run smoothly. For this, there is no substitute for a good book on
UNIX system administration and a good users' manual.Books & Magazines Specific to FreeBSDInternational books &
Magazines:Using
FreeBSD (in Chinese).FreeBSD for PC 98'ers (in Japanese), published by SHUWA System
Co, LTD. ISBN 4-87966-468-5 C3055 P2900E.FreeBSD (in Japanese), published by CUTT. ISBN 4-906391-22-2
C3055 P2400E.Complete Introduction to FreeBSD (in Japanese), published by Shoeisha Co., Ltd. ISBN 4-88135-473-6 P3600E.Personal UNIX Starter Kit FreeBSD (in Japanese), published by ASCII. ISBN 4-7561-1733-3 P3000E.FreeBSD Handbook (Japanese translation), published by ASCII. ISBN 4-7561-1580-2
P3800E.FreeBSD mit Methode (in German), published by Computer und
Literatur Verlag/Vertrieb Hanser, 1998. ISBN 3-932311-31-0.FreeBSD Install and Utilization Manual (in Japanese), published by Mainichi Communications Inc..English language books & Magazines:The
Complete FreeBSD, published by Walnut Creek CDROM.Users' GuidesComputer Systems Research Group, UC Berkeley. 4.4BSD
User's Reference Manual. O'Reilly & Associates,
Inc., 1994. ISBN 1-56592-075-9Computer Systems Research Group, UC Berkeley. 4.4BSD
User's Supplementary Documents. O'Reilly &
Associates, Inc., 1994. ISBN 1-56592-076-7UNIX in a Nutshell. O'Reilly &
Associates, Inc., 1990. ISBN 093717520XMui, Linda. What You Need To Know When You Can't Find
Your UNIX System Administrator. O'Reilly &
Associates, Inc., 1995. ISBN 1-56592-104-6Ohio State
University has written a UNIX
Introductory Course which is available online in HTML and
postscript format.
- Jpman Project, Japan
+ Jpman Project, Japan
FreeBSD Users Group. FreeBSD User's
Reference Manual (Japanese translation). Mainichi Communications
Inc., 1998. ISBN4-8399-0088-4 P3800E.Administrators' GuidesAlbitz, Paul and Liu, Cricket. DNS and
BIND, 2nd Ed. O'Reilly & Associates, Inc., 1997.
ISBN 1-56592-236-0Computer Systems Research Group, UC Berkeley. 4.4BSD
System Manager's Manual. O'Reilly & Associates,
Inc., 1994. ISBN 1-56592-080-5Costales, Brian, et al. Sendmail, 2nd Ed.
O'Reilly & Associates, Inc., 1997. ISBN 1-56592-222-0Frisch, Æleen. Essential System
Administration, 2nd Ed. O'Reilly & Associates,
Inc., 1995. ISBN 1-56592-127-5Hunt, Craig. TCP/IP Network
Administration. O'Reilly & Associates, Inc., 1992.
ISBN 0-937175-82-XNemeth, Evi. UNIX System Administration
Handbook. 2nd Ed. Prentice Hall, 1995. ISBN
0131510517Stern, Hal Managing NFS and NIS O'Reilly
& Associates, Inc., 1991. ISBN 0-937175-75-7
- Jpman Project, Japan
+ Jpman Project, Japan
FreeBSD Users Group. FreeBSD System
Administrator's Manual (Japanese translation). Mainichi Communications
Inc., 1998. ISBN4-8399-0109-0 P3300E.Programmers' GuidesAsente, Paul. X Window System Toolkit.
Digital Press. ISBN 1-55558-051-3Computer Systems Research Group, UC Berkeley. 4.4BSD
Programmer's Reference Manual. O'Reilly &
Associates, Inc., 1994. ISBN 1-56592-078-3Computer Systems Research Group, UC Berkeley. 4.4BSD
Programmer's Supplementary Documents. O'Reilly &
Associates, Inc., 1994. ISBN 1-56592-079-1Harbison, Samuel P. and Steele, Guy L. Jr. C: A
Reference Manual. 4rd ed. Prentice Hall, 1995.
ISBN 0-13-326224-3Kernighan, Brian and Dennis M. Ritchie. The C
Programming Language.. PTR Prentice Hall, 1988.
ISBN 0-13-110362-9Lehey, Greg. Porting UNIX Software.
O'Reilly & Associates, Inc., 1995. ISBN 1-56592-126-7Plauger, P. J. The Standard C Library.
Prentice Hall, 1992. ISBN 0-13-131509-9Stevens, W. Richard. Advanced Programming in the UNIX
Environment. Reading, Mass. : Addison-Wesley, 1992
ISBN 0-201-56317-7Stevens, W. Richard. UNIX Network
Programming. 2nd Ed, PTR Prentice Hall, 1998. ISBN
0-13-490012-XWells, Bill. “Writing Serial Drivers for UNIX”.
Dr. Dobb's Journal. 19(15), December 1994.
pp68-71, 97-99.Operating System InternalsAndleigh, Prabhat K. UNIX System
Architecture. Prentice-Hall, Inc., 1990. ISBN
0-13-949843-5Jolitz, William. “Porting UNIX to the 386”.
Dr. Dobb's Journal. January 1991-July
1992.Leffler, Samuel J., Marshall Kirk McKusick, Michael J Karels and
John Quarterman The Design and Implementation of the
4.3BSD UNIX Operating System. Reading, Mass. :
Addison-Wesley, 1989. ISBN 0-201-06196-1Leffler, Samuel J., Marshall Kirk McKusick, The Design
and Implementation of the 4.3BSD UNIX Operating System: Answer
Book. Reading, Mass. : Addison-Wesley, 1991. ISBN
0-201-54629-9McKusick, Marshall Kirk, Keith Bostic, Michael J Karels, and
John Quarterman. The Design and Implementation of the
4.4BSD Operating System. Reading, Mass. :
Addison-Wesley, 1996. ISBN 0-201-54979-4Stevens, W. Richard. TCP/IP Illustrated, Volume 1:
The Protocols. Reading, Mass. : Addison-Wesley,
1996. ISBN 0-201-63346-9Schimmel, Curt. Unix Systems for Modern
Architectures. Reading, Mass. : Addison-Wesley, 1994.
ISBN 0-201-63338-8Stevens, W. Richard. TCP/IP Illustrated, Volume 3:
TCP for Transactions, HTTP, NNTP and the UNIX Domain
Protocols. Reading, Mass. : Addison-Wesley, 1996.
ISBN 0-201-63495-3Vahalia, Uresh. UNIX Internals -- The New
Frontiers. Prentice Hall, 1996. ISBN
0-13-101908-2Wright, Gary R. and W. Richard Stevens. TCP/IP
Illustrated, Volume 2: The Implementation. Reading,
Mass. : Addison-Wesley, 1995. ISBN 0-201-63354-XSecurity ReferenceCheswick, William R. and Steven M. Bellovin. Firewalls
and Internet Security: Repelling the Wily Hacker.
Reading, Mass. : Addison-Wesley, 1995. ISBN
0-201-63357-4Garfinkel, Simson and Gene Spafford. Practical UNIX
Security. 2nd Ed. O'Reilly & Associates, Inc.,
1996. ISBN 1-56592-148-8Garfinkel, Simson. PGP Pretty Good
Privacy O'Reilly & Associates, Inc., 1995. ISBN
1-56592-098-8Hardware ReferenceAnderson, Don and Tom Shanley. Pentium Processor
System Architecture. 2nd Ed. Reading, Mass. :
Addison-Wesley, 1995. ISBN 0-201-40992-5Ferraro, Richard F. Programmer's Guide to the EGA,
VGA, and Super VGA Cards. 3rd ed. Reading, Mass. :
Addison-Wesley, 1995. ISBN 0-201-62490-7Intel Corporation publishes documentation on their CPUs,
chipsets and standards on their developer web site,
usually as PDF files.Shanley, Tom. 80486 System Architecture.
3rd ed. Reading, Mass. : Addison-Wesley, 1995. ISBN
0-201-40994-1Shanley, Tom. ISA System Architecture.
3rd ed. Reading, Mass. : Addison-Wesley, 1995. ISBN
0-201-40996-8Shanley, Tom. PCI System Architecture.
3rd ed. Reading, Mass. : Addison-Wesley, 1995. ISBN
0-201-40993-3Van Gilluwe, Frank. The Undocumented PC.
Reading, Mass: Addison-Wesley Pub. Co., 1994. ISBN
0-201-62277-7UNIX HistoryLion, John Lion's Commentary on UNIX, 6th Ed. With
Source Code. ITP Media Group, 1996. ISBN
1573980137Raymond, Eric S. The New Hacker's Dictonary, 3rd
edition. MIT Press, 1996. ISBN
0-262-68092-0. Also known as the Jargon
FileSalus, Peter H. A quarter century of UNIX.
Addison-Wesley Publishing Company, Inc., 1994. ISBN
0-201-54777-5Simon Garfinkel, Daniel Weise, Steven Strassmann. The
UNIX-HATERS Handbook. IDG Books Worldwide, Inc.,
1994. ISBN 1-56884-203-1Don Libes, Sandy Ressler Life with UNIX
— special edition. Prentice-Hall, Inc., 1989. ISBN
0-13-536657-7The BSD family tree. 1997. ftp://ftp.FreeBSD.org/pub/FreeBSD/FreeBSD-current/src/share/misc/bsd-family-tree or local on a FreeBSD-current machine.The BSD Release Announcements collection.
1997. http://www.de.FreeBSD.ORG/de/ftp/releases/
+ URL="http://www.de.FreeBSD.org/de/ftp/releases/">http://www.de.FreeBSD.org/de/ftp/releases/
Networked Computer Science Technical Reports
Library. http://www.ncstrl.org/Old BSD releases from the Computer Systems Research
group (CSRG). http://www.mckusick.com/csrg/:
The 4CD set covers all BSD versions from 1BSD to 4.4BSD and
4.4BSD-Lite2 (but not 2.11BSD, unfortunately). As well, the last
disk holds the final sources plus the SCCS files.Magazines and JournalsThe C/C++ Users Journal. R&D
Publications Inc. ISSN 1075-2838Sys Admin — The Journal for UNIX System
Administrators Miller Freeman, Inc., ISSN
1061-2688
diff --git a/en_US.ISO8859-1/books/handbook/book.sgml b/en_US.ISO8859-1/books/handbook/book.sgml
index cfff571210..e8432b2364 100644
--- a/en_US.ISO8859-1/books/handbook/book.sgml
+++ b/en_US.ISO8859-1/books/handbook/book.sgml
@@ -1,129 +1,129 @@
%man;
%bookinfo;
%chapters;
%authors;
%mailing-lists;
%newsgroups;
]>
FreeBSD HandbookThe FreeBSD Documentation ProjectFebruary 199919951996199719981999The FreeBSD Documentation Project
&bookinfo.legalnotice;
Welcome to FreeBSD! This handbook covers the installation and day
to day use of FreeBSD Release &rel.current;.
This manual is a work in progress and is the work
of many individuals. Many sections do not yet exist and some of those
that do exist need to be updated. If you are interested in helping
with this project, send email to the &a.doc;. The latest version of
this document is always available from the FreeBSD World Wide Web server.
+ URL="http://www.FreeBSD.org/">FreeBSD World Wide Web server.
It may also be downloaded in a variety of formats and compression
options from the FreeBSD FTP
+ url="ftp://ftp.FreeBSD.org/pub/FreeBSD/doc">FreeBSD FTP
server or one of the numerous mirror sites. You may also want to
- Search the
+ Search the
Handbook.Getting Started
&chap.introduction;
&chap.install;
&chap.basics;
&chap.ports
System Administration
&chap.kernelconfig;
&chap.security;
&chap.printing;
&chap.disks;
&chap.backups;
&chap.quotas;
&chap.x11;
&chap.hw;
&chap.l10n;
Network Communications
&chap.serialcomms;
&chap.ppp-and-slip;
&chap.advanced-networking;
&chap.mail;
Advanced topics
&chap.cutting-edge;
&chap.contrib;
&chap.policies;
&chap.kernelopts;
&chap.kerneldebug;
&chap.linuxemu;
&chap.internals;
Appendices
&chap.mirrors;
&chap.bibliography;
&chap.eresources;
&chap.staff;
&chap.pgpkeys;
diff --git a/en_US.ISO8859-1/books/handbook/contrib/chapter.sgml b/en_US.ISO8859-1/books/handbook/contrib/chapter.sgml
index e47079d905..71a6956f69 100644
--- a/en_US.ISO8859-1/books/handbook/contrib/chapter.sgml
+++ b/en_US.ISO8859-1/books/handbook/contrib/chapter.sgml
@@ -1,5765 +1,5765 @@
Contributing to FreeBSDContributed by &a.jkh;.So you want to contribute something to FreeBSD? That is great! We can
always use the help, and FreeBSD is one of those systems that
relies on the contributions of its user base in order
to survive. Your contributions are not only appreciated, they are vital
to FreeBSD's continued growth!Contrary to what some people might also have you believe, you do not
need to be a hot-shot programmer or a close personal friend of the FreeBSD
core team in order to have your contributions accepted. The FreeBSD
Project's development is done by a large and growing number of
international contributors whose ages and areas of technical expertise
vary greatly, and there is always more work to be done than there are
people available to do it.Since the FreeBSD project is responsible for an entire operating
system environment (and its installation) rather than just a kernel or a
few scattered utilities, our TODO list also spans a
very wide range of tasks, from documentation, beta testing and
presentation to highly specialized types of kernel development. No matter
what your skill level, there is almost certainly something you can do to
help the project!Commercial entities engaged in FreeBSD-related enterprises are also
encouraged to contact us. Need a special extension to make your product
work? You will find us receptive to your requests, given that they are not
too outlandish. Working on a value-added product? Please let us know! We
may be able to work cooperatively on some aspect of it. The free software
world is challenging a lot of existing assumptions about how software is
developed, sold, and maintained throughout its life cycle, and we urge you
to at least give it a second look.What Is NeededThe following list of tasks and sub-projects represents something of
an amalgam of the various core team TODO lists and
user requests we have collected over the last couple of months. Where
possible, tasks have been ranked by degree of urgency. If you are
interested in working on one of the tasks you see here, send mail to the
coordinator listed by clicking on their names. If no coordinator has
been appointed, maybe you would like to volunteer?High priority tasksThe following tasks are considered to be urgent, usually because
they represent something that is badly broken or sorely needed:3-stage boot issues. Overall coordination: &a.hackers;Do WinNT compatible drive tagging so that the 3rd stage
can provide an accurate mapping of BIOS geometries for
disks.Filesystem problems. Overall coordination: &a.fs;Fix the MSDOS file system.Clean up and document the nullfs filesystem code.
Coordinator: &a.eivind;Fix the union file system. Coordinator: &a.dg;Implement Int13 vm86 disk driver. Coordinator:
&a.hackers;New bus architecture. Coordinator: &a.newbus;Port existing ISA drivers to new architecture.Move all interrupt-management code to appropriate parts of
the bus drivers.Port PCI subsystem to new architecture. Coordinator:
&a.dfr;Figure out the right way to handle removable devices and
then use that as a substrate on which PC-Card and CardBus
support can be implemented.Resolve the probe/attach priority issue once and for
all.Move any remaining buses over to the new
architecture.Kernel issues. Overall coordination: &a.hackers;Add more pro-active security infrastructure. Overall
coordination: &a.security;Build something like Tripwire(TM) into the kernel, with a
remote and local part. There are a number of cryptographic
issues to getting this right; contact the coordinator for
details. Coordinator: &a.eivind;Make the entire kernel use suser()
instead of comparing to 0. It is presently using about half
of each. Coordinator: &a.eivind;Split securelevels into different parts, to allow an
administrator to throw away those privileges he can throw
away. Setting the overall securelevel needs to have the same
effect as now, obviously. Coordinator: &a.eivind;Make it possible to upload a list of “allowed
program” to BPF, and then block BPF from accepting other
programs. This would allow BPF to be used e.g. for DHCP,
without allowing an attacker to start snooping the local
network.Update the security checker script. We should at least
grab all the checks from the other BSD derivatives, and add
checks that a system with securelevel increased also have
reasonable flags on the relevant parts. Coordinator:
&a.eivind;Add authorization infrastructure to the kernel, to allow
different authorization policies. Part of this could be done
by modifying suser(). Coordinatory:
&a.eivind;Add code to the NFS layer so that you cannot
chdir("..") out of an NFS partition. E.g.,
/usr is a UFS partition with
/usr/src NFS exported. Now it is
possible to use the NFS filehandle for
/usr/src to get access to
/usr.Medium priority tasksThe following tasks need to be done, but not with any particular
urgency:Full KLD based driver support/Configuration Manager.Write a configuration manager (in the 3rd stage boot?)
that probes your hardware in a sane manner, keeps only the
KLDs required for your hardware, etc.PCMCIA/PCCARD. Coordinators: &a.msmith; and &a.phk;Documentation!Reliable operation of the pcic driver (needs
testing).Recognizer and handler for sio.c
(mostly done).Recognizer and handler for ed.c
(mostly done).Recognizer and handler for ep.c
(mostly done).User-mode recognizer and handler (partially done).Advanced Power Management. Coordinators: &a.msmith; and
&a.phk;APM sub-driver (mostly done).IDE/ATA disk sub-driver (partially done).syscons/pcvt sub-driver.Integration with the PCMCIA/PCCARD drivers
(suspend/resume).Low priority tasksThe following tasks are purely cosmetic or represent such an
investment of work that it is not likely that anyone will get them
done anytime soon:The first N items are from Terry Lambert
terry@lambert.orgNetWare Server (protected mode ODI driver) loader and
subservices to allow the use of ODI card drivers supplied with
network cards. The same thing for NDIS drivers and NetWare SCSI
drivers.An "upgrade system" option that works on Linux boxes instead
of just previous rev FreeBSD boxes.Symmetric Multiprocessing with kernel preemption (requires
kernel preemption).A concerted effort at support for portable computers. This is
somewhat handled by changing PCMCIA bridging rules and power
management event handling. But there are things like detecting
internal vs. external display and picking a different screen
resolution based on that fact, not spinning down the disk if the
machine is in dock, and allowing dock-based cards to disappear
without affecting the machines ability to boot (same issue for
PCMCIA).Smaller tasksMost of the tasks listed in the previous sections require either a
considerable investment of time or an in-depth knowledge of the
FreeBSD kernel (or both). However, there are also many useful tasks
which are suitable for "weekend hackers", or people without
programming skills.If you run FreeBSD-current and have a good Internet
connection, there is a machine current.FreeBSD.org which builds a full
release once a day — every now and again, try and install
the latest release from it and report any failures in the
process.Read the freebsd-bugs mailing list. There might be a
problem you can comment constructively on or with patches you
can test. Or you could even try to fix one of the problems
yourself.Read through the FAQ and Handbook periodically. If anything
is badly explained, out of date or even just completely wrong, let
us know. Even better, send us a fix (SGML is not difficult to
learn, but there is no objection to ASCII submissions).Help translate FreeBSD documentation into your native language
(if not already available) — just send an email to &a.doc;
asking if anyone is working on it. Note that you are not
committing yourself to translating every single FreeBSD document
by doing this — in fact, the documentation most in need of
translation is the installation instructions.Read the freebsd-questions mailing list and &ng.misc
occasionally (or even regularly). It can be very satisfying to
share your expertise and help people solve their problems;
sometimes you may even learn something new yourself! These forums
can also be a source of ideas for things to work on.If you know of any bugfixes which have been successfully
applied to -current but have not been merged into -stable after a
decent interval (normally a couple of weeks), send the committer a
polite reminder.Move contributed software to src/contrib
in the source tree.Make sure code in src/contrib is up to
date.Look for year 2000 bugs (and fix any you find!)Build the source tree (or just part of it) with extra warnings
enabled and clean up the warnings.Fix warnings for ports which do deprecated things like using
gets() or including malloc.h.If you have contributed any ports, send your patches back to
the original author (this will make your life easier when they
bring out the next version)Suggest further tasks for this list!How to ContributeContributions to the system generally fall into one or more of the
following 6 categories:Bug reports and general commentaryAn idea or suggestion of general technical
interest should be mailed to the &a.hackers;. Likewise, people with
an interest in such things (and a tolerance for a
high volume of mail!) may subscribe to the
hackers mailing list by sending mail to &a.majordomo;. See mailing lists for more information
about this and other mailing lists.If you find a bug or are submitting a specific change, please
report it using the &man.send-pr.1; program or its WEB-based
equivalent. Try to fill-in each field of the bug report.
Unless they exceed 65KB, include any patches directly in the report.
When including patches, do not use cut-and-paste
because cut-and-paste turns tabs into spaces and makes them unusable.
Consider compressing patches and using &man.uuencode.1; if they exceed
20KB. Upload very large submissions to ftp.FreeBSD.org:/pub/FreeBSD/incoming/.
+ url="ftp://ftp.FreeBSD.org/pub/FreeBSD/incoming/">ftp.FreeBSD.org:/pub/FreeBSD/incoming/.
After filing a report, you should receive confirmation along with
a tracking number. Keep this tracking number so that you can update
us with details about the problem by sending mail to
- bug-followup@FreeBSD.ORG. Use the number as the
+ bug-followup@FreeBSD.org. Use the number as the
message subject, e.g. "Re: kern/3377". Additional
information for any bug report should be submitted this way.If you do not receive confirmation in a timely fashion (3 days to
a week, depending on your email connection) or are, for some reason,
unable to use the &man.send-pr.1; command, then you may ask
someone to file it for you by sending mail to the &a.bugs;.Changes to the documentationChanges to the documentation are overseen by the &a.doc;. Send
submissions and changes (even small ones are welcome!) using
send-pr as described in Bug Reports and General
Commentary.Changes to existing source codeAn addition or change to the existing source code is a somewhat
trickier affair and depends a lot on how far out of date you are with
the current state of the core FreeBSD development. There is a special
on-going release of FreeBSD known as “FreeBSD-current”
which is made available in a variety of ways for the convenience of
developers working actively on the system. See Staying current with FreeBSD for more
information about getting and using FreeBSD-current.Working from older sources unfortunately means that your changes
may sometimes be too obsolete or too divergent for easy re-integration
into FreeBSD. Chances of this can be minimized somewhat by
subscribing to the &a.announce; and the &a.current; lists, where
discussions on the current state of the system take place.Assuming that you can manage to secure fairly up-to-date sources
to base your changes on, the next step is to produce a set of diffs to
send to the FreeBSD maintainers. This is done with the &man.diff.1;
command, with the “context diff” form
being preferred. For example:&prompt.user; diff -c oldfile newfile
or
&prompt.user; diff -c -r olddir newdir
would generate such a set of context diffs for the given source file
or directory hierarchy. See the man page for &man.diff.1; for more
details.Once you have a set of diffs (which you may test with the
&man.patch.1; command), you should submit them for inclusion with
FreeBSD. Use the &man.send-pr.1; program as described in Bug Reports and General Commentary.
Do not just send the diffs to the &a.hackers; or
they will get lost! We greatly appreciate your submission (this is a
volunteer project!); because we are busy, we may not be able to
address it immediately, but it will remain in the pr database until we
do.If you feel it appropriate (e.g. you have added, deleted, or
renamed files), bundle your changes into a tar file
and run the &man.uuencode.1; program on it. Shar archives are also
welcome.If your change is of a potentially sensitive nature, e.g. you are
unsure of copyright issues governing its further distribution or you
are simply not ready to release it without a tighter review first,
then you should send it to &a.core; directly rather than submitting it
with &man.send-pr.1;. The core mailing list reaches a much smaller
group of people who do much of the day-to-day work on FreeBSD. Note
that this group is also very busy and so you
should only send mail to them where it is truly necessary.Please refer to man 9 intro and man 9
style for some information on coding style. We would
appreciate it if you were at least aware of this information before
submitting code.New code or major value-added packagesIn the rare case of a significant contribution of a large body
work, or the addition of an important new feature to FreeBSD, it
becomes almost always necessary to either send changes as uuencode'd
tar files or upload them to our ftp site ftp://ftp.FreeBSD.ORG/pub/FreeBSD/incoming.
+ URL="ftp://ftp.FreeBSD.org/pub/FreeBSD/incoming">ftp://ftp.FreeBSD.org/pub/FreeBSD/incoming.
When working with large amounts of code, the touchy subject of
copyrights also invariably comes up. Acceptable copyrights for code
included in FreeBSD are:The BSD copyright. This copyright is most preferred due to
its “no strings attached” nature and general
attractiveness to commercial enterprises. Far from discouraging
such commercial use, the FreeBSD Project actively encourages such
participation by commercial interests who might eventually be
inclined to invest something of their own into FreeBSD.The GNU Public License, or “GPL”. This license is
not quite as popular with us due to the amount of extra effort
demanded of anyone using the code for commercial purposes, but
given the sheer quantity of GPL'd code we currently require
(compiler, assembler, text formatter, etc) it would be silly to
refuse additional contributions under this license. Code under
the GPL also goes into a different part of the tree, that being
/sys/gnu or
/usr/src/gnu, and is therefore easily
identifiable to anyone for whom the GPL presents a problem.Contributions coming under any other type of copyright must be
carefully reviewed before their inclusion into FreeBSD will be
considered. Contributions for which particularly restrictive
commercial copyrights apply are generally rejected, though the authors
are always encouraged to make such changes available through their own
channels.To place a “BSD-style” copyright on your work, include
the following text at the very beginning of every source code file you
wish to protect, replacing the text between the %%
with the appropriate information.
Copyright (c) %%proper_years_here%%
%%your_name_here%%, %%your_state%% %%your_zip%%.
All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions
are met:
1. Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer as
the first lines of this file unmodified.
2. Redistributions in binary form 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 SOFTWARE IS PROVIDED BY %%your_name_here%% ``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 %%your_name_here%% 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 SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
$Id$For your convenience, a copy of this text can be found in
/usr/share/examples/etc/bsd-style-copyright.Money, Hardware or Internet accessWe are always very happy to accept donations to further the cause
of the FreeBSD Project and, in a volunteer effort like ours, a little
can go a long way! Donations of hardware are also very important to
expanding our list of supported peripherals since we generally lack
the funds to buy such items ourselves.Donating fundsWhile the FreeBSD Project is not a 501(c)(3) (charitable)
corporation and hence cannot offer special tax incentives for any
donations made, any such donations will be gratefully accepted on
behalf of the project by FreeBSD, Inc.FreeBSD, Inc. was founded in early 1995 by &a.jkh; and &a.dg;
with the goal of furthering the aims of the FreeBSD Project and
giving it a minimal corporate presence. Any and all funds donated
(as well as any profits that may eventually be realized by FreeBSD,
Inc.) will be used exclusively to further the project's
goals.Please make any checks payable to FreeBSD, Inc., sent in care of
the following address:FreeBSD, Inc.c/o Jordan Hubbard4041 Pike Lane, Suite FConcordCA, 94520(currently using the Walnut Creek CDROM address until a PO box
can be opened)Wire transfers may also be sent directly to:Bank Of AmericaConcord Main OfficeP.O. Box 37176San FranciscoCA, 94137-5176Routing #: 121-000-358Account #: 01411-07441 (FreeBSD, Inc.)Any correspondence related to donations should be sent to &a.jkh,
either via email or to the FreeBSD, Inc. postal address given above.
If you do not wish to be listed in our donors section, please specify this when
making your donation. Thanks!Donating hardwareDonations of hardware in any of the 3 following categories are
also gladly accepted by the FreeBSD Project:General purpose hardware such as disk drives, memory or
complete systems should be sent to the FreeBSD, Inc. address
listed in the donating funds
section.Hardware for which ongoing compliance testing is desired.
We are currently trying to put together a testing lab of all
components that FreeBSD supports so that proper regression
testing can be done with each new release. We are still lacking
many important pieces (network cards, motherboards, etc) and if
you would like to make such a donation, please contact &a.dg;
for information on which items are still required.Hardware currently unsupported by FreeBSD for which you
would like to see such support added. Please contact the
&a.core; before sending such items as we will need to find a
developer willing to take on the task before we can accept
delivery of new hardware.Donating Internet accessWe can always use new mirror sites for FTP, WWW or
cvsup. If you would like to be such a mirror,
please contact the FreeBSD project administrators
- admin@FreeBSD.ORG for more information.
+ admin@FreeBSD.org for more information.
Donors GalleryThe FreeBSD Project is indebted to the following donors and would
like to publically thank them here!Contributors to the central server
project:The following individuals and businesses made it possible for
the FreeBSD Project to build a new central server machine to
eventually replace freefall.FreeBSD.org
by donating the following items:&a.mbarkah and his employer,
Hemisphere Online, donated a Pentium Pro
(P6) 200Mhz CPUASA
Computers donated a Tyan 1662
motherboard.Joe McGuckin joe@via.net of ViaNet Communications donated
a Kingston ethernet controller.Jack O'Neill jack@diamond.xtalwind.net
donated an NCR 53C875 SCSI controller
card.Ulf Zimmermann ulf@Alameda.net of Alameda Networks donated
128MB of memory, a 4 Gb disk
drive and the case.Direct funding:The following individuals and businesses have generously
contributed direct funding to the project:Annelise Anderson
ANDRSN@HOOVER.STANFORD.EDU&a.dillonEpilogue Technology
Corporation&a.sefDon Scott WildeGianmarco Giovannelli
gmarco@masternet.itJosef C. Grosch joeg@truenorth.orgRobert T. Morris&a.chuckrKenneth P. Stox ken@stox.sa.enteract.com of
Imaginary Landscape,
LLC.Dmitry S. Kohmanyuk dk@dog.farm.orgLaser5 of Japan
(a portion of the profits from sales of their various FreeBSD
CD-ROMs.Fuki Shuppan
Publishing Co. donated a portion of their profits from
Hajimete no FreeBSD (FreeBSD, Getting
started) to the FreeBSD and XFree86 projects.ASCII Corp.
donated a portion of their profits from several FreeBSD-related
books to the FreeBSD project.Yokogawa Electric
Corp has generously donated significant funding to the
FreeBSD project.BuffNETPacific
SolutionsSiemens AG
via Andre
AlbsmeierChris SilvaHardware contributors:The following individuals and businesses have generously
contributed hardware for testing and device driver
development/support:Walnut Creek CDROM for providing the Pentium P5-90 and
486/DX2-66 EISA/VL systems that are being used for our
development work, to say nothing of the network access and other
donations of hardware resources.TRW Financial Systems, Inc. provided 130 PCs, three 68 GB
fileservers, twelve Ethernets, two routers and an ATM switch for
debugging the diskless code.Dermot McDonnell donated the Toshiba XM3401B CDROM drive
currently used in freefall.&a.chuck; contributed his floppy tape streamer for
experimental work.Larry Altneu larry@ALR.COM, and &a.wilko;,
provided Wangtek and Archive QIC-02 tape drives in order to
improve the wt driver.Ernst Winter ewinter@lobo.muc.de contributed
a 2.88 MB floppy drive to the project. This will hopefully
increase the pressure for rewriting the floppy disk driver.
;-)Tekram
Technologies sent one each of their DC-390, DC-390U
and DC-390F FAST and ULTRA SCSI host adapter cards for
regression testing of the NCR and AMD drivers with their cards.
They are also to be applauded for making driver sources for free
operating systems available from their FTP server ftp://ftp.tekram.com/scsi/FreeBSD.Larry M. Augustin contributed not only a
Symbios Sym8751S SCSI card, but also a set of data books,
including one about the forthcoming Sym53c895 chip with Ultra-2
and LVD support, and the latest programming manual with
information on how to safely use the advanced features of the
latest Symbios SCSI chips. Thanks a lot!Christoph Kukulies kuku@FreeBSD.org donated
an FX120 12 speed Mitsumi CDROM drive for IDE CDROM driver
development.Special contributors:Walnut Creek CDROM
has donated almost more than we can say (see the history document for more details).
In particular, we would like to thank them for the original
hardware used for freefall.FreeBSD.ORG, our primary
+ role="fqdn">freefall.FreeBSD.org, our primary
development machine, and for thud.FreeBSD.ORG, a testing and build
+ role="fqdn">thud.FreeBSD.org, a testing and build
box. We are also indebted to them for funding various
contributors over the years and providing us with unrestricted
use of their T1 connection to the Internet.The interface
business GmbH, Dresden has been patiently supporting
&a.joerg; who has often preferred FreeBSD work over paywork, and
used to fall back to their (quite expensive) EUnet Internet
connection whenever his private connection became too slow or
flakey to work with it...Berkeley Software Design,
Inc. has contributed their DOS emulator code to the
remaining BSD world, which is used in the
doscmd command.Core Team AlumniThe following people were members of the FreeBSD core team during
the periods indicated. We thank them for their past efforts in the
service of the FreeBSD project.In rough chronological order:&a.guido (1995 - 1999)&a.dyson (1993 - 1998)&a.nate (1992 - 1996)&a.rgrimes (1992 - 1995)Andreas Schulz (1992 - 1995)&a.csgr (1993 - 1995)&a.paul (1992 - 1995)&a.smace (1993 - 1994)Andrew Moore (1993 - 1994)Christoph Robitschko (1993 - 1994)J. T. Conklin (1992 - 1993)Derived Software ContributorsThis software was originally derived from William F. Jolitz's 386BSD
release 0.1, though almost none of the original 386BSD specific code
remains. This software has been essentially re-implemented from the
4.4BSD-Lite release provided by the Computer Science Research Group
(CSRG) at the University of California, Berkeley and associated academic
contributors.There are also portions of NetBSD and OpenBSD that have been
integrated into FreeBSD as well, and we would therefore like to thank
all the contributors to NetBSD and OpenBSD for their work.Additional FreeBSD Contributors(in alphabetical order by first name):ABURAYA Ryushirou rewsirow@ff.iij4u.or.jpAMAGAI Yoshiji amagai@nue.orgAaron Bornstein aaronb@j51.comAaron Smith aaron@mutex.orgAchim Patzner ap@noses.comAda T Lim ada@bsd.orgAdam Baran badam@mw.mil.plAdam Glass glass@postgres.berkeley.eduAdam McDougall mcdouga9@egr.msu.eduAdrian Colley aecolley@ois.ieAdrian Hall adrian@ibmpcug.co.ukAdrian Mariano adrian@cam.cornell.eduAdrian Steinmann ast@marabu.chAdam Strohl troll@digitalspark.netAdrian T. Filipi-Martin
atf3r@agate.cs.virginia.eduAjit Thyagarajan unknownAkio Morita
amorita@meadow.scphys.kyoto-u.ac.jpAkira SAWADA unknownAkira Watanabe
akira@myaw.ei.meisei-u.ac.jpAkito Fujita fujita@zoo.ncl.omron.co.jpAlain Kalker
A.C.P.M.Kalker@student.utwente.nlAlan Bawden alan@curry.epilogue.comAlec Wolman wolman@cs.washington.eduAled Morris aledm@routers.co.ukAlex garbanzo@hooked.netAlex D. Chen
dhchen@Canvas.dorm7.nccu.edu.twAlex G. Bulushev bag@demos.suAlex Le Heux alexlh@funk.orgAlex Perel veers@disturbed.netAlexander B. Povolotsky tarkhil@mgt.msk.ruAlexander Leidinger
netchild@wurzelausix.CS.Uni-SB.DEAlexander Langer alex@cichlids.comAlexandre Snarskii snar@paranoia.ruAlfred Perlstein bright@rush.netAlistair G. Crooks agc@uts.amdahl.comAllan Saddi asaddi@philosophysw.comAllen Campbell allenc@verinet.comAmakawa Shuhei amakawa@hoh.t.u-tokyo.ac.jpAmancio Hasty hasty@star-gate.comAmir Farah amir@comtrol.comAmy Baron amee@beer.orgAnatoly A. Orehovsky tolik@mpeks.tomsk.suAnatoly Vorobey mellon@pobox.comAnders Nordby nickerne@nome.noAnders Thulin Anders.X.Thulin@telia.seAndras Olah olah@cs.utwente.nlAndre Albsmeier
Andre.Albsmeier@mchp.siemens.deAndre Oppermann andre@pipeline.chAndreas Haakh ah@alman.robin.deAndreas Kohout shanee@rabbit.augusta.deAndreas Lohr andreas@marvin.RoBIN.deAndreas Schulz unknownAndreas Wetzel mickey@deadline.snafu.deAndreas Wrede andreas@planix.comAndres Vega Garcia unknownAndrew Atrens atreand@statcan.caAndrew Boothman andrew@cream.orgAndrew Gillham gillham@andrews.eduAndrew Gordon andrew.gordon@net-tel.co.ukAndrew Herbert andrew@werple.apana.org.auAndrew J. Korty ajk@purdue.eduAndrew L. Moore alm@mclink.comAndrew McRae amcrae@cisco.comAndrew Stevenson andrew@ugh.net.auAndrew Timonin tim@pool1.convey.ruAndrew V. Stesin stesin@elvisti.kiev.uaAndrew Webster awebster@dataradio.comAndrey Zakhvatov andy@icc.surw.chel.suAndy Farkas andyf@speednet.com.auAndy Valencia ajv@csd.mot.comAndy Whitcroft andy@sarc.city.ac.ukAngelo Turetta ATuretta@stylo.itAnthony C. Chavez magus@xmission.comAnthony Yee-Hang Chan yeehang@netcom.comAnton Berezin tobez@plab.ku.dkAntti Kaipila anttik@iki.fiAre Bryne are.bryne@communique.noAri Suutari ari@suutari.iki.fiArjan de Vet devet@IAEhv.nlArne Henrik Juul arnej@Lise.Unit.NOAssar Westerlund assar@sics.seAtsushi Furuta furuta@sra.co.jpAtsushi Murai amurai@spec.co.jpBakul Shah bvs@bitblocks.comBarry Bierbauch pivrnec@vszbr.czBarry Lustig barry@ictv.comBen Hutchinson benhutch@xfiles.org.ukBen Jackson unknownBen Smithurst ben@scientia.demon.co.ukBen Walter bwalter@itachi.swcp.comBenjamin Lewis bhlewis@gte.netBernd Rosauer br@schiele-ct.deBill Kish kish@osf.orgBill Trost trost@cloud.rain.comBlaz Zupan blaz@amis.netBob Van Valzah Bob@whitebarn.comBob Willcox bob@luke.pmr.comBoris Staeblow balu@dva.in-berlin.deBoyd R. Faulkner faulkner@asgard.bga.comBrad Karp karp@eecs.harvard.eduBradley Dunn bradley@dunn.orgBrandon Fosdick bfoz@glue.umd.eduBrandon Gillespie brandon@roguetrader.com&a.wlloydBob Wilcox bob@obiwan.uucpBoyd Faulkner faulkner@mpd.tandem.comBrent J. Nordquist bjn@visi.comBrett Lymn blymn@mulga.awadi.com.AUBrett Taylor
brett@peloton.physics.montana.eduBrian Campbell brianc@pobox.comBrian Clapper bmc@willscreek.comBrian Cully shmit@kublai.comBrian Handy
handy@lambic.space.lockheed.comBrian Litzinger brian@MediaCity.comBrian McGovern bmcgover@cisco.comBrian Moore ziff@houdini.eecs.umich.eduBrian R. Haug haug@conterra.comBrian Tao taob@risc.orgBrion Moss brion@queeg.comBruce A. Mah bmah@ca.sandia.govBruce Albrecht bruce@zuhause.mn.orgBruce Gingery bgingery@gtcs.comBruce J. Keeler loodvrij@gridpoint.comBruce Murphy packrat@iinet.net.auBruce Walter walter@fortean.comCarey Jones mcj@acquiesce.orgCarl Fongheiser cmf@netins.netCarl Mascott cmascott@world.std.comCasper casper@acc.amCastor Fu castor@geocast.comCejka Rudolf cejkar@dcse.fee.vutbr.czChain Lee chain@110.netCharles Hannum mycroft@ai.mit.eduCharles Henrich henrich@msu.eduCharles Mott cmott@srv.netCharles Owens owensc@enc.eduChet Ramey chet@odin.INS.CWRU.EduChia-liang Kao clkao@CirX.ORGChiharu Shibata chi@bd.mbn.or.jpChip Norkus unknownChoi Jun Ho junker@jazz.snu.ac.krChris Costello chris@calldei.comChris Csanady cc@tarsier.ca.sandia.govChris Dabrowski chris@vader.orgChris Dillon cdillon@wolves.k12.mo.usChris Shenton
cshenton@angst.it.hq.nasa.govChris Stenton jacs@gnome.co.ukChris Timmons skynyrd@opus.cts.cwu.eduChris Torek torek@ee.lbl.govChristian Gusenbauer
cg@fimp01.fim.uni-linz.ac.atChristian Haury Christian.Haury@sagem.frChristian Weisgerber
naddy@bigeye.rhein-neckar.deChristoph P. Kukulies kuku@FreeBSD.orgChristoph Robitschko
chmr@edvz.tu-graz.ac.atChristoph Weber-Fahr
wefa@callcenter.systemhaus.netChristopher G. Demetriou
cgd@postgres.berkeley.eduChristopher T. Johnson
cjohnson@neunacht.netgsi.comChrisy Luke chrisy@flix.netChuck Hein chein@cisco.comClive Lin clive@CiRX.ORGColman Reilly careilly@tcd.ieConrad Sabatier conrads@neosoft.comCoranth Gryphon gryphon@healer.comCornelis van der Laan
nils@guru.ims.uni-stuttgart.deCove Schneider cove@brazil.nbn.comCraig Leres leres@ee.lbl.govCraig Loomis unknownCraig Metz cmetz@inner.netCraig Spannring cts@internetcds.comCraig Struble cstruble@vt.eduCristian Ferretti cfs@riemann.mat.puc.clCurt Mayer curt@toad.comCy Schubert cschuber@uumail.gov.bc.caDI. Christian Gusenbauer
cg@scotty.edvz.uni-linz.ac.atDai Ishijima ishijima@tri.pref.osaka.jpDamian Hamill damian@cablenet.netDan Cross tenser@spitfire.ecsel.psu.eduDan Lukes dan@obluda.czDan Nelson dnelson@emsphone.comDan Walters hannibal@cyberstation.netDaniel M. Eischen
deischen@iworks.InterWorks.orgDaniel O'Connor doconnor@gsoft.com.auDaniel Poirot poirot@aio.jsc.nasa.govDaniel Rock rock@cs.uni-sb.deDanny Egen unknownDanny J. Zerkel dzerkel@phofarm.comDarren Reed avalon@coombs.anu.edu.auDave Adkins adkin003@tc.umn.eduDave Andersen angio@aros.netDave Blizzard dblizzar@sprynet.comDave Bodenstab imdave@synet.netDave Burgess burgess@hrd769.brooks.af.milDave Chapeskie dchapes@ddm.on.caDave Cornejo dave@dogwood.comDave Edmondson davided@sco.comDave Glowacki dglo@ssec.wisc.eduDave Marquardt marquard@austin.ibm.comDave Tweten tweten@FreeBSD.orgDavid A. Adkins adkin003@tc.umn.eduDavid A. Bader dbader@umiacs.umd.eduDavid Borman dab@bsdi.comDavid Dawes dawes@XFree86.orgDavid Filo filo@yahoo.comDavid Holland dholland@eecs.harvard.eduDavid Holloway daveh@gwythaint.tamis.comDavid Horwitt dhorwitt@ucsd.eduDavid Hovemeyer daveho@infocom.comDavid Jones dej@qpoint.torfree.netDavid Kelly dkelly@tomcat1.tbe.comDavid Kulp dkulp@neomorphic.comDavid L. Nugent davidn@blaze.net.auDavid Leonard d@scry.dstc.edu.auDavid Malone dwmalone@maths.tcd.ieDavid Muir Sharnoff muir@idiom.comDavid S. Miller davem@jenolan.rutgers.eduDavid Wolfskill dhw@whistle.comDean Gaudet dgaudet@arctic.orgDean Huxley dean@fsa.caDenis Fortin unknownDennis Glatting
dennis.glatting@software-munitions.comDenton Gentry denny1@home.comDerek Inksetter derek@saidev.comDima Sivachenko dima@Chg.RUDirk Keunecke dk@panda.rhein-main.deDirk Nehrling nerle@pdv.deDmitry Khrustalev dima@xyzzy.machaon.ruDmitry Kohmanyuk dk@farm.orgDom Mitchell dom@myrddin.demon.co.ukDominik Brettnacher domi@saargate.deDon Croyle croyle@gelemna.ft-wayne.in.us&a.whiteside;Don Morrison dmorrisn@u.washington.eduDon Yuniskis dgy@rtd.comDonald Maddox dmaddox@conterra.comDoug Barton studded@dal.netDouglas Ambrisko ambrisko@whistle.comDouglas Carmichael dcarmich@mcs.comDouglas Crosher dtc@scrooge.ee.swin.oz.auDrew Derbyshire ahd@kew.comDuncan Barclay dmlb@ragnet.demon.co.ukDustin Sallings dustin@spy.netEckart "Isegrim" Hofmann
Isegrim@Wunder-Nett.orgEd Gold
vegold01@starbase.spd.louisville.eduEd Hudson elh@p5.spnet.comEdward Wang edward@edcom.comEdwin Groothus edwin@nwm.wan.philips.comEiji-usagi-MATSUmoto usagi@clave.gr.jpELISA Font ProjectElmar Bartel
bartel@informatik.tu-muenchen.deEric A. Griff eagriff@global2000.netEric Blood eblood@cs.unr.eduEric J. Haug ejh@slustl.slu.eduEric J. Schwertfeger eric@cybernut.comEric L. Hernes erich@lodgenet.comEric P. Scott eps@sirius.comEric Sprinkle eric@ennovatenetworks.comErich Stefan Boleyn erich@uruk.orgErik E. Rantapaa rantapaa@math.umn.eduErik H. Moe ehm@cris.comErnst Winter ewinter@lobo.muc.deEspen Skoglund espensk@stud.cs.uit.no>Eugene M. Kim astralblue@usa.netEugene Radchenko genie@qsar.chem.msu.suEvan Champion evanc@synapse.netFaried Nawaz fn@Hungry.COMFlemming Jacobsen fj@tfs.comFong-Ching Liaw fong@juniper.netFrancis M J Hsieh mjshieh@life.nthu.edu.twFrank Bartels knarf@camelot.deFrank Chen Hsiung Chan
frankch@waru.life.nthu.edu.twFrank Durda IV uhclem@nemesis.lonestar.orgFrank MacLachlan fpm@n2.netFrank Nobis fn@Radio-do.deFrank Volf volf@oasis.IAEhv.nlFrank ten Wolde franky@pinewood.nlFrank van der Linden frank@fwi.uva.nlFred Cawthorne fcawth@jjarray.umn.eduFred Gilham gilham@csl.sri.comFred Templin templin@erg.sri.comFrederick Earl Gray fgray@rice.eduFUJIMOTO Kensaku
fujimoto@oscar.elec.waseda.ac.jpFUJISHIMA Satsuki k5@respo.or.jpFURUSAWA Kazuhisa
furusawa@com.cs.osakafu-u.ac.jpGabor Kincses gabor@acm.orgGabor Zahemszky zgabor@CoDe.huG. Adam Stanislavadam@whizkidtech.netGarance A Drosehn gad@eclipse.its.rpi.eduGareth McCaughan gjm11@dpmms.cam.ac.ukGary A. Browning gab10@griffcd.amdahl.comGary Howland gary@hotlava.comGary J. garyj@rks32.pcs.dec.comGary Kline kline@thought.orgGaspar Chilingarov nightmar@lemming.acc.amGea-Suan Lin gsl@tpts4.seed.net.twGeoff Rehmet csgr@alpha.ru.ac.zaGeorg Wagner georg.wagner@ubs.comGerard Roudier groudier@club-internet.frGianmarco Giovannelli
gmarco@giovannelli.itGil Kloepfer Jr. gil@limbic.ssdl.comGilad Rom rom_glsa@ein-hashofet.co.ilGinga Kawaguti
ginga@amalthea.phys.s.u-tokyo.ac.jpGiles Lean giles@nemeton.com.auGlen Foster gfoster@gfoster.comGlenn Johnson gljohns@bellsouth.netGodmar Back gback@facility.cs.utah.eduGoran Hammarback goran@astro.uu.seGord Matzigkeit gord@enci.ucalgary.caGordon Greeff gvg@uunet.co.zaGraham Wheeler gram@cdsec.comGreg A. Woods woods@zeus.leitch.comGreg Ansley gja@ansley.comGreg Troxel gdt@ir.bbn.comGreg Ungerer gerg@stallion.oz.auGregory Bond gnb@itga.com.auGregory D. Moncreaff
moncrg@bt340707.res.ray.comGuy Harris guy@netapp.comGuy Helmer ghelmer@cs.iastate.eduHAMADA Naoki hamada@astec.co.jpHONDA Yasuhiro
honda@kashio.info.mie-u.ac.jpHOSOBUCHI Noriyuki hoso@buchi.tama.or.jpHannu Savolainen hannu@voxware.pp.fiHans Huebner hans@artcom.deHans Petter Bieker zerium@webindex.noHans Zuidam hans@brandinnovators.comHarlan Stenn Harlan.Stenn@pfcs.comHarold Barker hbarker@dsms.comHavard Eidnes
Havard.Eidnes@runit.sintef.noHeikki Suonsivu hsu@cs.hut.fiHeiko W. Rupp unknownHelmut F. Wirth hfwirth@ping.atHenrik Vestergaard Draboel
hvd@terry.ping.dkHerb Peyerl hpeyerl@NetBSD.orgHideaki Ohmon ohmon@tom.sfc.keio.ac.jpHidekazu Kuroki hidekazu@cs.titech.ac.jpHideki Yamamoto hyama@acm.orgHideyuki Suzuki
hideyuki@sat.t.u-tokyo.ac.jpHirayama Issei iss@mail.wbs.ne.jpHiroaki Sakai sakai@miya.ee.kagu.sut.ac.jpHiroharu Tamaru tamaru@ap.t.u-tokyo.ac.jpHironori Ikura hikura@kaisei.orgHiroshi Nishikawa nis@pluto.dti.ne.jpHiroya Tsubakimoto unknownHolger Veit Holger.Veit@gmd.deHolm Tiffe holm@geophysik.tu-freiberg.deHorance Chou
horance@freedom.ie.cycu.edu.twHorihiro Kumagai kuma@jp.FreeBSD.orgHOTARU-YA hotaru@tail.netHr.Ladavac lada@ws2301.gud.siemens.co.atHubert Feyrer hubertf@NetBSD.ORGHugh F. Mahon hugh@nsmdserv.cnd.hp.comHugh Mahon h_mahon@fc.hp.comHung-Chi Chu hcchu@r350.ee.ntu.edu.twIMAI Takeshi take-i@ceres.dti.ne.jpIMAMURA Tomoaki
tomoak-i@is.aist-nara.ac.jpIan Dowse iedowse@maths.tcd.ieIan Holland ianh@tortuga.com.auIan Struble ian@broken.netIan Vaudrey i.vaudrey@bigfoot.comIgor Khasilev igor@jabber.paco.odessa.uaIgor Roshchin str@giganda.komkon.orgIgor Sviridov siac@ua.netIgor Vinokurov igor@zynaps.ruIkuo Nakagawa ikuo@isl.intec.co.jpIlya V. Komarov mur@lynx.ruIssei Suzuki issei@jp.FreeBSD.orgItsuro Saito saito@miv.t.u-tokyo.ac.jpJ. Bryant jbryant@argus.flash.netJ. David Lowe lowe@saturn5.comJ. Han hjh@best.comJ. Hawk jhawk@MIT.EDUJ.T. Conklin jtc@cygnus.comJ.T. Jang keith@email.gcn.net.twJack jack@zeus.xtalwind.netJacob Bohn Lorensen jacob@jblhome.ping.mkJagane D Sundar jagane@netcom.comJake Burkholder jake@checker.orgJake Hamby jehamby@lightside.comJames Clark jjc@jclark.comJames D. Stewart jds@c4systm.comJames Jegers jimj@miller.cs.uwm.eduJames Raynard
fhackers@jraynard.demon.co.ukJames T. Liu jtliu@phlebas.rockefeller.eduJames da Silva jds@cs.umd.eduJan Conard
charly@fachschaften.tu-muenchen.deJan Koum jkb@FreeBSD.orgJanick Taillandier
Janick.Taillandier@ratp.frJanusz Kokot janek@gaja.ipan.lublin.plJarle Greipsland jarle@idt.unit.noJason Garman init@risen.orgJason Thorpe thorpej@NetBSD.orgJason Wright jason@OpenBSD.orgJason Young
doogie@forbidden-donut.anet-stl.comJavier Martin Rueda jmrueda@diatel.upm.esJay Fenlason hack@datacube.comJaye Mathisen mrcpu@cdsnet.netJeff Bartig jeffb@doit.wisc.eduJeff Forys jeff@forys.cranbury.nj.usJeff Kletsky Jeff@Wagsky.comJeffrey Evans evans@scnc.k12.mi.usJeffrey Wheat jeff@cetlink.netJens Schweikhardt schweikh@noc.dfn.dJeremy Allison jallison@whistle.comJeremy Chatfield jdc@xinside.comJeremy Lea reg@shale.csir.co.zaJeremy Prior unknownJeroen Ruigrok/Asmodai asmodai@wxs.nlJesse Rosenstock jmr@ugcs.caltech.eduJian-Da Li jdli@csie.nctu.edu.twJim Babb babb@FreeBSD.orgJim Binkley jrb@cs.pdx.eduJim Carroll jim@carroll.comJim Flowers jflowers@ezo.netJim Leppek jleppek@harris.comJim Lowe james@cs.uwm.eduJim Mattson jmattson@sonic.netJim Mercer jim@komodo.reptiles.orgJim Mock jim@phrantic.phear.netJim Wilson wilson@moria.cygnus.comJimbo Bahooli
griffin@blackhole.iceworld.orgJin Guojun jin@george.lbl.govJoachim Kuebart unknownJoao Carlos Mendes Luis jonny@jonny.eng.brJochen Pohl jpo.drs@sni.deJoe "Marcus" Clarke marcus@miami.eduJoe Abley jabley@clear.co.nzJoe Jih-Shian Lu jslu@dns.ntu.edu.twJoe Orthoefer j_orthoefer@tia.netJoe Traister traister@mojozone.orgJoel Faedi Joel.Faedi@esial.u-nancy.frJoel Ray Holveck joelh@gnu.orgJoel Sutton sutton@aardvark.apana.org.auJohan Granlund johan@granlund.nuJohan Karlsson k@numeri.campus.luth.seJohan Larsson johan@moon.campus.luth.seJohann Tonsing jtonsing@mikom.csir.co.zaJohannes Helander unknownJohannes Stille unknownJohn Baldwin jobaldwi@vt.eduJohn Beckett jbeckett@southern.eduJohn Beukema jbeukema@hk.super.netJohn Brezak unknownJohn Capo jc@irbs.comJohn F. Woods jfw@jfwhome.funhouse.comJohn Goerzen
jgoerzen@alexanderwohl.complete.orgJohn Hay jhay@mikom.csir.co.zaJohn Heidemann johnh@isi.eduJohn Hood cgull@owl.orgJohn Kohl unknownJohn Lind john@starfire.mn.orgJohn Mackin john@physiol.su.oz.auJohn P johnp@lodgenet.comJohn Perry perry@vishnu.alias.netJohn Preisler john@vapornet.comJohn Rochester jr@cs.mun.caJohn Sadler john_sadler@alum.mit.eduJohn Saunders john@pacer.nlc.net.auJohn W. DeBoskey jwd@unx.sas.comJohn Wehle john@feith.comJohn Woods jfw@eddie.mit.eduJon Morgan morgan@terminus.trailblazer.comJonathan H N Chin jc254@newton.cam.ac.ukJonathan Hanna
jh@pc-21490.bc.rogers.wave.caJorge Goncalves j@bug.fe.up.ptJorge M. Goncalves ee96199@tom.fe.up.ptJos Backus jbackus@plex.nlJose M. Alcaide jose@we.lc.ehu.esJose Marques jose@nobody.orgJosef Grosch
jgrosch@superior.mooseriver.comJosef Karthauser joe@uk.FreeBSD.orgJoseph Stein joes@wstein.comJosh Gilliam josh@quick.netJosh Tiefenbach josh@ican.netJuergen Lock nox@jelal.hb.north.deJuha Inkari inkari@cc.hut.fiJukka A. Ukkonen jua@iki.fiJulian Assange proff@suburbia.netJulian Coleman j.d.coleman@ncl.ac.uk&a.jhsJulian Jenkins kaveman@magna.com.auJunichi Satoh junichi@jp.FreeBSD.orgJunji SAKAI sakai@jp.FreeBSD.orgJunya WATANABE junya-w@remus.dti.ne.jpK.Higashino a00303@cc.hc.keio.ac.jpKUNISHIMA Takeo kunishi@c.oka-pu.ac.jpKai Vorma vode@snakemail.hut.fiKaleb S. Keithley kaleb@ics.comKaneda Hiloshi vanitas@ma3.seikyou.ne.jpKapil Chowksey kchowksey@hss.hns.comKarl Denninger karl@mcs.comKarl Dietz Karl.Dietz@triplan.comKarl Lehenbauer karl@NeoSoft.comKato Takenori
kato@eclogite.eps.nagoya-u.ac.jpKawanobe Koh kawanobe@st.rim.or.jpKazuhiko Kiriyama kiri@kiri.toba-cmt.ac.jpKazuo Horikawa horikawa@jp.FreeBSD.orgKees Jan Koster kjk1@ukc.ac.ukKeith Bostic bostic@bostic.comKeith E. Walker unknownKeith Moore unknownKeith Sklower unknownKen Hornstein unknownKen Key key@cs.utk.eduKen Mayer kmayer@freegate.comKenji Saito marukun@mx2.nisiq.netKenji Tomita tommyk@da2.so-net.or.jpKenneth Furge kenneth.furge@us.endress.comKenneth Monville desmo@bandwidth.orgKenneth R. Westerback krw@tcn.netKenneth Stailey kstailey@gnu.ai.mit.eduKent Talarico kent@shipwreck.tsoft.netKent Vander Velden graphix@iastate.eduKentaro Inagaki JBD01226@niftyserve.ne.jpKevin Bracey kbracey@art.acorn.co.ukKevin Day toasty@dragondata.comKevin Lahey kml@nas.nasa.govKevin Lokevlo@hello.com.twKevin Street street@iname.comKevin Van Maren vanmaren@fast.cs.utah.eduKiroh HARADA kiroh@kh.rim.or.jpKlaus Klein kleink@layla.inka.deKlaus-J. Wolf Yanestra@t-online.deKoichi Sato copan@ppp.fastnet.or.jpKostya Lukin lukin@okbmei.msk.suKouichi Hirabayashi kh@mogami-wire.co.jpKurt D. Zeilenga Kurt@Boolean.NETKurt Olsen kurto@tiny.mcs.usu.eduL. Jonas Olsson
ljo@ljo-slip.DIALIN.CWRU.EduLars Köller
Lars.Koeller@Uni-Bielefeld.DELarry Altneu larry@ALR.COMLaurence Lopez lopez@mv.mv.comLee Cremeans lcremean@tidalwave.netLiang Tai-hwa
avatar@www.mmlab.cse.yzu.edu.twLon Willett lon%softt.uucp@math.utah.eduLouis A. Mamakos louie@TransSys.COMLouis Mamakos loiue@TransSys.comLucas James Lucas.James@ldjpc.apana.org.auLyndon Nerenberg lyndon@orthanc.comM.C. Wong unknownMANTANI Nobutaka nobutaka@nobutaka.comMIHIRA Sanpei Yoshiro sanpei@sanpei.org
- MITA Yoshio mita@jp.FreeBSD.ORG
+ MITA Yoshio mita@jp.FreeBSD.orgMITSUNAGA Noriaki
mitchy@er.ams.eng.osaka-u.ac.jpMOROHOSHI Akihiko moro@race.u-tokyo.ac.jpMagnus Enbom dot@tinto.campus.luth.seMahesh Neelakanta mahesh@gcomm.comMakoto MATSUSHITA matusita@jp.FreeBSD.orgMakoto WATANABE
watanabe@zlab.phys.nagoya-u.ac.jpMalte Lance malte.lance@gmx.netManu Iyengar
iyengar@grunthos.pscwa.psca.comMarc Frajola marc@dev.comMarc Ramirez mrami@mramirez.sy.yale.eduMarc Slemko marcs@znep.comMarc van Kempen wmbfmk@urc.tue.nlMarc van Woerkom van.woerkom@netcologne.deMarcel Moolenaar marcel@scc.nlMario Sergio Fujikawa Ferreira
lioux@gns.com.brMark Andrews unknownMark Cammidge mark@gmtunx.ee.uct.ac.zaMark Diekhans markd@grizzly.comMark Huizer xaa@stack.nlMark J. Taylor mtaylor@cybernet.comMark Krentel krentel@rice.eduMark Mayo markm@vmunix.comMark Thompson thompson@tgsoft.comMark Tinguely tinguely@plains.nodak.eduMark Treacy unknownMark Valentine mark@linus.demon.co.ukMartin BirgmeierMartin Ibert mib@ppe.bb-data.deMartin Kammerhofer dada@sbox.tu-graz.ac.atMartin Renters martin@tdc.on.caMartti Kuparinen
martti.kuparinen@ericsson.comMasachika ISHIZUKA
ishizuka@isis.min.ntt.jpMas.TAKEMURA unknownMasafumi NAKANE max@wide.ad.jpMasahiro Sekiguchi
seki@sysrap.cs.fujitsu.co.jpMasanobu Saitoh msaitoh@spa.is.uec.ac.jpMasanori Kanaoka kana@saijo.mke.mei.co.jpMasanori Kiriake seiken@ARGV.ACMasatoshi TAMURA
tamrin@shinzan.kuee.kyoto-u.ac.jpMats Lofkvist mal@algonet.seMatt Bartley mbartley@lear35.cytex.comMatt Thomas matt@3am-software.comMatt White mwhite+@CMU.EDUMatthew C. Mead mmead@Glock.COMMatthew Cashdollar mattc@rfcnet.comMatthew Flatt mflatt@cs.rice.eduMatthew Fuller fullermd@futuresouth.comMatthew Stein matt@bdd.netMatthias Pfaller leo@dachau.marco.deMatthias Scheler tron@netbsd.orgMattias Gronlund
Mattias.Gronlund@sa.erisoft.seMattias Pantzare pantzer@ludd.luth.seMaurice Castro
maurice@planet.serc.rmit.edu.auMax Euston meuston@jmrodgers.comMax Khon fjoe@husky.iclub.nsu.ruMaxim Bolotin max@rsu.ruMicha Class
michael_class@hpbbse.bbn.hp.comMichael Butler imb@scgt.oz.auMichael Butschky butsch@computi.erols.comMichael Clay mclay@weareb.org
- Michael Elbel me@FreeBSD.ORG
+ Michael Elbel me@FreeBSD.orgMichael Galassi nerd@percival.rain.comMichael Hancock michaelh@cet.co.jpMichael Hohmuth hohmuth@inf.tu-dresden.deMichael Perlman canuck@caam.rice.eduMichael Petry petry@netwolf.NetMasters.comMichael Reifenberger root@totum.plaut.deMichael Searle searle@longacre.demon.co.ukMichal Listos mcl@Amnesiac.123.orgMichio Karl Jinbo
karl@marcer.nagaokaut.ac.jpMiguel Angel Sagreras
msagre@cactus.fi.uba.arMihoko Tanaka m_tonaka@pa.yokogawa.co.jpMika Nystrom mika@cs.caltech.eduMikael Hybsch micke@dynas.seMikael Karpberg
karpen@ocean.campus.luth.seMike Del repenting@hotmail.comMike Durian durian@plutotech.comMike Durkin mdurkin@tsoft.sf-bay.orgMike E. Matsnev mike@azog.cs.msu.suMike Evans mevans@candle.comMike Grupenhoff kashmir@umiacs.umd.eduMike Hibler mike@marker.cs.utah.eduMike Karels unknownMike McGaughey mmcg@cs.monash.edu.auMike Meyer mwm@shiva.the-park.comMike Mitchell mitchell@ref.tfs.comMike Murphy mrm@alpharel.comMike Peck mike@binghamton.eduMike Spengler mks@msc.eduMikhail A. Sokolov mishania@demos.suMikhail Teterin mi@aldan.ziplink.netMing-I Hseh PA@FreeBSD.ee.Ntu.edu.TWMitsuru IWASAKI iwasaki@pc.jaring.myMitsuru Yoshida mitsuru@riken.go.jpMonte Mitzelfelt monte@gonefishing.orgMorgan Davis root@io.cts.comMostyn Lewis mostyn@mrl.comMotomichi Matsuzaki mzaki@e-mail.ne.jpMotoyuki Kasahara m-kasahr@sra.co.jpMotoyuki Konno motoyuki@snipe.rim.or.jpMunechika Sumikawa sumikawa@kame.netMurray Stokely murray@cdrom.comN.G.Smith ngs@sesame.hensa.ac.ukNAGAO Tadaaki nagao@cs.titech.ac.jpNAKAJI Hiroyuki
nakaji@tutrp.tut.ac.jpNAKAMURA Kazushi nkazushi@highway.or.jpNAKAMURA Motonori
motonori@econ.kyoto-u.ac.jpNIIMI Satoshi sa2c@and.or.jpNOKUBI Hirotaka h-nokubi@yyy.or.jpNadav Eiron nadav@barcode.co.ilNanbor Wang nw1@cs.wustl.eduNaofumi Honda
honda@Kururu.math.sci.hokudai.ac.jpNaoki Hamada nao@tom-yam.or.jpNarvi narvi@haldjas.folklore.eeNathan Ahlstrom nrahlstr@winternet.comNathan Dorfman nathan@rtfm.netNeal Fachan kneel@ishiboo.comNeil Blakey-Milner nbm@rucus.ru.ac.zaNiall Smart rotel@indigo.ieNick Barnes Nick.Barnes@pobox.comNick Handel nhandel@NeoSoft.comNick Hilliard nick@foobar.org&a.nsayer;Nick Williams njw@cs.city.ac.ukNickolay N. Dudorov nnd@itfs.nsk.suNiklas Hallqvist niklas@filippa.appli.seNisha Talagala nisha@cs.berkeley.eduNo Name ZW6T-KND@j.asahi-net.or.jpNo Name adrian@virginia.eduNo Name alex@elvisti.kiev.uaNo Name anto@netscape.netNo Name bobson@egg.ics.nitch.ac.jpNo Name bovynf@awe.beNo Name burg@is.ge.comNo Name chris@gnome.co.ukNo Name colsen@usa.netNo Name coredump@nervosa.comNo Name dannyman@arh0300.urh.uiuc.eduNo Name davids@SECNET.COMNo Name derek@free.orgNo Name devet@adv.IAEhv.nlNo Name djv@bedford.netNo Name dvv@sprint.netNo Name enami@ba2.so-net.or.jpNo Name flash@eru.tubank.msk.suNo Name flash@hway.ruNo Name fn@pain.csrv.uidaho.eduNo Name gclarkii@netport.neosoft.comNo Name gordon@sheaky.lonestar.orgNo Name graaf@iae.nlNo Name greg@greg.rim.or.jpNo Name grossman@cygnus.comNo Name gusw@fub46.zedat.fu-berlin.deNo Name hfir@math.rochester.eduNo Name hnokubi@yyy.or.jpNo Name iaint@css.tuu.utas.edu.auNo Name invis@visi.comNo Name ishisone@sra.co.jpNo Name iverson@lionheart.comNo Name jpt@magic.netNo Name junker@jazz.snu.ac.krNo Name k-sugyou@ccs.mt.nec.co.jpNo Name kenji@reseau.toyonaka.osaka.jpNo Name kfurge@worldnet.att.netNo Name lh@aus.orgNo Name lhecking@nmrc.ucc.ieNo Name mrgreen@mame.mu.oz.auNo Name nakagawa@jp.FreeBSD.orgNo Name ohki@gssm.otsuka.tsukuba.ac.jpNo Name owaki@st.rim.or.jpNo Name pechter@shell.monmouth.comNo Name pete@pelican.pelican.comNo Name pritc003@maroon.tc.umn.eduNo Name risner@stdio.comNo Name roman@rpd.univ.kiev.uaNo Name root@ns2.redline.ruNo Name root@uglabgw.ug.cs.sunysb.eduNo Name stephen.ma@jtec.com.auNo Name sumii@is.s.u-tokyo.ac.jpNo Name takas-su@is.aist-nara.ac.jpNo Name tamone@eig.unige.chNo Name tjevans@raleigh.ibm.comNo Name tony-o@iij.ad.jp amurai@spec.co.jpNo Name torii@tcd.hitachi.co.jpNo Name uenami@imasy.or.jpNo Name uhlar@netlab.skNo Name vode@hut.fiNo Name wlloyd@mpd.caNo Name wlr@furball.wellsfargo.comNo Name wmbfmk@urc.tue.nlNo Name yamagata@nwgpc.kek.jpNo Name ziggy@ryan.orgNobuhiro Yasutomi nobu@psrc.isac.co.jpNobuyuki Koganemaru
kogane@koganemaru.co.jpNorio Suzuki nosuzuki@e-mail.ne.jp
- Noritaka Ishizumi graphite@jp.FreeBSD.ORG
+ Noritaka Ishizumi graphite@jp.FreeBSD.orgNoriyuki Soda soda@sra.co.jpOh Junseon hollywar@mail.holywar.netOlaf Wagner wagner@luthien.in-berlin.deOleg Sharoiko os@rsu.ruOliver Breuninger ob@seicom.NETOliver Friedrichs oliver@secnet.comOliver Fromme
oliver.fromme@heim3.tu-clausthal.deOliver Laumann
net@informatik.uni-bremen.deOliver Oberdorf oly@world.std.comOlof Johansson offe@ludd.luth.se
- Osokin Sergey aka oZZ ozz@freebsd.org.ru
+ Osokin Sergey aka oZZ ozz@FreeBSD.org.ruPace Willisson pace@blitz.comPaco Rosich rosich@modico.eleinf.uv.esPalle Girgensohn girgen@partitur.seParag Patel parag@cgt.comPascal Pederiva pascal@zuo.dec.comPasvorn Boonmark boonmark@juniper.netPatrick Gardella patrick@cre8tivegroup.comPatrick Hausen unknownPaul Antonov apg@demos.suPaul F. Werkowski unknownPaul Fox pgf@foxharp.boston.ma.usPaul Koch koch@thehub.com.auPaul Kranenburg pk@NetBSD.orgPaul Mackerras paulus@cs.anu.edu.auPaul Popelka paulp@uts.amdahl.comPaul S. LaFollette, Jr. unknownPaul Saab paul@mu.orgPaul Sandys myj@nyct.netPaul T. Root proot@horton.iaces.comPaul Vixie paul@vix.comPaulo Menezes paulo@isr.uc.ptPaulo Menezes pm@dee.uc.ptPedro A M Vazquez vazquez@IQM.Unicamp.BRPedro Giffuni giffunip@asme.orgPete Bentley pete@demon.netPeter Childs pjchilds@imforei.apana.org.auPeter Cornelius pc@inr.fzk.dePeter Haight peterh@prognet.comPeter Jeremy perer.jeremy@alcatel.com.auPeter M. Chen pmchen@eecs.umich.eduPeter Much peter@citylink.dinoex.sub.orgPeter Olsson unknownPeter Philipp pjp@bsd-daemon.netPeter Stubbs PETERS@staidan.qld.edu.auPhil Maker pjm@cs.ntu.edu.auPhil Sutherland
philsuth@mycroft.dialix.oz.auPhil Taylor phil@zipmail.co.ukPhilip Musumeci philip@rmit.edu.auPierre Y. Dampure pierre.dampure@k2c.co.ukPius Fischer pius@ienet.comPomegranate daver@flag.blackened.netPowerdog Industries
kevin.ruddy@powerdog.comR. Kym HorsellRajesh Vaidheeswarran rv@fore.comRalf Friedl friedl@informatik.uni-kl.deRandal S. Masutani randal@comtest.comRandall Hopper rhh@ct.picker.comRandall W. Dean rwd@osf.orgRandy Bush rbush@bainbridge.verio.netReinier Bezuidenhout
rbezuide@mikom.csir.co.zaRemy Card Remy.Card@masi.ibp.frRicardas Cepas rch@richard.eu.orgRiccardo Veraldi veraldi@cs.unibo.itRichard Henderson richard@atheist.tamu.eduRichard Hwang rhwang@bigpanda.comRichard Kiss richard@homemail.comRichard J Kuhns rjk@watson.grauel.comRichard M. Neswold
rneswold@drmemory.fnal.govRichard Seaman, Jr. dick@tar.comRichard Stallman rms@gnu.ai.mit.eduRichard Straka straka@user1.inficad.comRichard Tobin richard@cogsci.ed.ac.ukRichard Wackerbarth rkw@Dataplex.NETRichard Winkel rich@math.missouri.eduRichard Wiwatowski rjwiwat@adelaide.on.netRick Macklem rick@snowhite.cis.uoguelph.caRick Macklin unknownRob Austein sra@epilogue.comRob Mallory rmallory@qualcomm.comRob Snow rsnow@txdirect.netRobert Crowe bob@speakez.comRobert D. Thrush rd@phoenix.aii.comRobert Eckardt
roberte@MEP.Ruhr-Uni-Bochum.deRobert Sanders rsanders@mindspring.comRobert Sexton robert@kudra.comRobert Shady rls@id.netRobert Swindells swindellsr@genrad.co.ukRobert Watson robert@cyrus.watson.orgRobert Withrow witr@rwwa.comRobert Yoder unknownRobin Carey
robin@mailgate.dtc.rankxerox.co.ukRoger Hardiman roger@cs.strath.ac.ukRoland Jesse jesse@cs.uni-magdeburg.deRon Bickers rbickers@intercenter.netRon Lenk rlenk@widget.xmission.comRonald Kuehn kuehn@rz.tu-clausthal.deRudolf Cejka unknownRuslan Belkin rus@home2.UA.netRuslan Ermilov ru@ucb.crimea.uaRuslan Shevchenko rssh@cam.grad.kiev.uaRussell L. Carter rcarter@pinyon.orgRussell Vincent rv@groa.uct.ac.zaRyan Younce ryany@pobox.comRyuichiro IMURA imura@cs.titech.ac.jpSANETO Takanori sanewo@strg.sony.co.jpSAWADA Mizuki miz@qb3.so-net.ne.jp
- SUGIMURA Takashi sugimura@jp.FreeBSD.ORG
+ SUGIMURA Takashi sugimura@jp.FreeBSD.orgSURANYI Peter
suranyip@jks.is.tsukuba.ac.jpSakai Hiroaki sakai@miya.ee.kagu.sut.ac.jpSakari Jalovaara sja@tekla.fiSam Hartman hartmans@mit.eduSamuel Lam skl@ScalableNetwork.comSamuele Zannoli zannoli@cs.unibo.itSander Vesik sander@haldjas.folklore.eeSandro Sigala ssigala@globalnet.itSascha Blank blank@fox.uni-trier.deSascha Wildner swildner@channelz.GUN.deSatoh Junichi junichi@astec.co.jpScot Elliott scot@poptart.orgScot W. Hetzel hetzels@westbend.netScott A. Kenney saken@rmta.ml.orgScott Blachowicz
scott.blachowicz@seaslug.orgScott Burris scott@pita.cns.ucla.eduScott Hazen Mueller scott@zorch.sf-bay.orgScott Michel scottm@cs.ucla.eduScott Reynolds scott@clmqt.marquette.mi.usSebastian Strollo seb@erix.ericsson.seSerge A. Babkin babkin@hq.icb.chel.suSerge V. Vakulenko vak@zebub.msk.suSergei Chechetkin
csl@whale.sunbay.crimea.uaSergei S. Laskavy laskavy@pc759.cs.msu.suSergey Gershtein sg@mplik.ruSergey Potapov sp@alkor.ruSergey Shkonda serg@bcs.zp.uaSergey V.Dorokhov svd@kbtelecom.nalnet.ruSergio Lenzi lenzi@bsi.com.brShaun Courtney shaun@emma.eng.uct.ac.zaShawn M. Carey smcarey@mailbox.syr.eduShigio Yamaguchi shigio@wafu.netgate.netShinya Esu esu@yk.rim.or.jpShuichi Tanaka stanaka@bb.mbn.or.jpShunsuke Akiyama akiyama@jp.FreeBSD.orgSimon simon@masi.ibp.frSimon Burge simonb@telstra.com.auSimon J Gerraty sjg@melb.bull.oz.auSimon Marlow simonm@dcs.gla.ac.ukSimon Shapiro shimon@simon-shapiro.orgSin'ichiro MIYATANI siu@phaseone.co.jpSlaven Rezic eserte@cs.tu-berlin.deSoochon Radee slr@mitre.orgSoren Dayton csdayton@midway.uchicago.eduSoren Dossing sauber@netcom.comSoren S. Jorvang soren@dt.dkStefan Bethke stb@hanse.deStefan Eggers seggers@semyam.dinoco.deStefan Moeding s.moeding@ndh.netStefan Petri unknownStefan `Sec` Zehl sec@42.orgSteinar Haug sthaug@nethelp.noStephane E. Potvin sepotvin@videotron.caStephane Legrand stephane@lituus.frStephen Clawson
sclawson@marker.cs.utah.eduStephen F. Combs combssf@salem.ge.comStephen Farrell stephen@farrell.orgStephen Hocking sysseh@devetir.qld.gov.auStephen J. Roznowski sjr@home.netStephen McKay syssgm@devetir.qld.gov.auStephen Melvin melvin@zytek.comSteve Bauer sbauer@rock.sdsmt.eduSteve Coltrin spcoltri@io.comSteve Deering unknownSteve Gerakines steve2@genesis.tiac.netSteve Gericke steveg@comtrol.comSteve Piette steve@simon.chi.il.USSteve Schwarz schwarz@alpharel.comSteven G. Kargl
kargl@troutmask.apl.washington.eduSteven H. Samorodin samorodi@NUXI.comSteven McCanne mccanne@cs.berkeley.eduSteven Plite splite@purdue.eduSteven Wallace unknownStuart Henderson
stuart@internationalschool.co.ukSue Blake sue@welearn.com.auSugimoto Sadahiro ixtl@komaba.utmc.or.jpSugiura Shiro ssugiura@duo.co.jpSujal Patel smpatel@wam.umd.eduSune Stjerneby stjerneby@usa.netSuzuki Yoshiaki
zensyo@ann.tama.kawasaki.jpTadashi Kumano kumano@strl.nhk.or.jpTaguchi Takeshi taguchi@tohoku.iij.ad.jpTakahiro Yugawa yugawa@orleans.rim.or.jpTakanori Watanabe
takawata@shidahara1.planet.sci.kobe-u.ac.jpTakashi Mega mega@minz.orgTakashi Uozu j1594016@ed.kagu.sut.ac.jpTakayuki Ariga a00821@cc.hc.keio.ac.jpTakeru NAIKI naiki@bfd.es.hokudai.ac.jpTakeshi Amaike amaike@iri.co.jpTakeshi MUTOH mutoh@info.nara-k.ac.jpTakeshi Ohashi
ohashi@mickey.ai.kyutech.ac.jpTakeshi WATANABE
watanabe@crayon.earth.s.kobe-u.ac.jpTakuya SHIOZAKI
tshiozak@makino.ise.chuo-u.ac.jpTatoku Ogaito tacha@tera.fukui-med.ac.jpTatsumi HOSOKAWA hosokawa@jp.FreeBSD.orgTed Buswell tbuswell@mediaone.netTed Faber faber@isi.eduTed Lemon mellon@isc.orgTerry Lambert terry@lambert.orgTerry Lee terry@uivlsi.csl.uiuc.eduTetsuya Furukawa tetsuya@secom-sis.co.jpTheo de Raadt deraadt@OpenBSD.orgThomas thomas@mathematik.uni-Bremen.deThomas D. Dean tomdean@ix.netcom.comThomas David Rivers rivers@dignus.comThomas G. McWilliams tgm@netcom.comThomas Gellekum
thomas@ghpc8.ihf.rwth-aachen.deThomas Graichen
graichen@omega.physik.fu-berlin.deThomas König
Thomas.Koenig@ciw.uni-karlsruhe.deThomas Ptacek unknownThomas Stevens tas@stevens.orgThomas Stromberg tstrombe@rtci.comThomas Valentino Crimi
tcrimi+@andrew.cmu.eduThomas Wintergerst thomas@lemur.nord.deÞórður Ívarsson
totii@est.isTim Kientzle kientzle@netcom.comTim Singletary
tsingle@sunland.gsfc.nasa.govTim Wilkinson tim@sarc.city.ac.ukTimo J. Rinne tri@iki.fiTodd Miller millert@openbsd.orgTom root@majestix.cmr.noTom tom@sdf.comTom Gray - DCA dcasba@rain.orgTom Jobbins tom@tom.tjTom Pusateri pusateri@juniper.netTom Rush tarush@mindspring.comTom Samplonius tom@misery.sdf.comTomohiko Kurahashi
kura@melchior.q.t.u-tokyo.ac.jpTony Kimball alk@Think.COMTony Li tli@jnx.comTony Lynn wing@cc.nsysu.edu.twTony Maher tonym@angis.org.auTorbjorn Granlund tege@matematik.su.seToshihiko ARAI toshi@tenchi.ne.jpToshihiko SHIMOKAWA toshi@tea.forus.or.jpToshihiro Kanda candy@kgc.co.jpToshiomi Moriki
Toshiomi.Moriki@ma1.seikyou.ne.jpTrefor S. trefor@flevel.co.ukTrevor Blackwell tlb@viaweb.comURATA Shuichiro s-urata@nmit.tmg.nec.co.jpUdo Schweigert ust@cert.siemens.deUgo Paternostro paterno@dsi.unifi.itUlf Kieber kieber@sax.deUlli Linzen ulli@perceval.camelot.deUstimenko Semen semen@iclub.nsu.ruUwe Arndt arndt@mailhost.uni-koblenz.deVadim Chekan vadim@gc.lviv.uaVadim Kolontsov vadim@tversu.ac.ruVadim Mikhailov mvp@braz.ruVan Jacobson van@ee.lbl.govVasily V. Grechishnikov
bazilio@ns1.ied-vorstu.ac.ruVasim Valejev vasim@uddias.diaspro.comVernon J. Schryver vjs@mica.denver.sgi.comVic Abell abe@cc.purdue.eduVille Eerola ve@sci.fiVincent Poy vince@venus.gaianet.netVincenzo Capuano
VCAPUANO@vmprofs.esoc.esa.deVirgil Champlin champlin@pa.dec.comVladimir A. Jakovenko
vovik@ntu-kpi.kiev.uaVladimir Kushnir kushn@mail.kar.netVsevolod Lobko seva@alex-ua.comW. Gerald Hicks wghicks@bellsouth.netW. Richard Stevens rstevens@noao.eduWalt Howard howard@ee.utah.eduWarren Toomey wkt@csadfa.cs.adfa.oz.auWayne Scott wscott@ichips.intel.comWerner Griessl
werner@btp1da.phy.uni-bayreuth.deWes Santee wsantee@wsantee.oz.netWietse Venema wietse@wzv.win.tue.nlWilfredo Sanchez wsanchez@apple.comWiljo Heinen wiljo@freeside.ki.open.deWilko Bulte wilko@yedi.iaf.nlWill Andrews andrews@technologist.comWillem Jan Withagen wjw@surf.IAE.nlWilliam Jolitz withheldWilliam Liao william@tale.netWojtek Pilorz
wpilorz@celebris.bdk.lublin.plWolfgang Helbig helbig@ba-stuttgart.deWolfgang Solfrank ws@tools.deWolfgang Stanglmeier wolf@FreeBSD.orgWu Ching-hong woju@FreeBSD.ee.Ntu.edu.TWYarema yds@ingress.comYaroslav Terletsky ts@polynet.lviv.uaYasuhito FUTATSUKI futatuki@fureai.or.jpYasuhiro Fukama yasuf@big.or.jpYen-Shuo Su yssu@CCCA.NCTU.edu.twYing-Chieh Liao ijliao@csie.NCTU.edu.twYixin Jin yjin@rain.cs.ucla.eduYoshiaki Uchikawa yoshiaki@kt.rim.or.jpYoshihiko OHTA yohta@bres.tsukuba.ac.jpYoshihisa NAKAGAWA
y-nakaga@ccs.mt.nec.co.jpYoshikazu Goto gotoh@ae.anritsu.co.jpYoshimasa Ohnishi
ohnishi@isc.kyutech.ac.jpYoshishige Arai ryo2@on.rim.or.jpYuichi MATSUTAKA matutaka@osa.att.ne.jpYujiro MIYATA
miyata@bioele.nuee.nagoya-u.ac.jpYukihiro Nakai nacai@iname.comYusuke Nawano azuki@azkey.orgYuu Yashiki s974123@cc.matsuyama-u.ac.jpYuval Yarom yval@cs.huji.ac.ilYves Fonk yves@cpcoup5.tn.tudelft.nlYves Fonk yves@dutncp8.tn.tudelft.nlZach Heilig zach@gaffaneys.comZahemszhky Gabor zgabor@code.huZhong Ming-Xun zmx@mail.CDPA.nsysu.edu.twarci vega@sophia.inria.frder Mouse mouse@Collatz.McRCIM.McGill.EDUfrf frf@xocolatl.comEge Rekk aagero@aage.priv.no386BSD Patch Kit Patch Contributors(in alphabetical order by first name):Adam Glass glass@postgres.berkeley.eduAdrian Hall adrian@ibmpcug.co.ukAndrey A. Chernov ache@astral.msk.suAndrew Herbert andrew@werple.apana.org.auAndrew Moore alm@netcom.comAndy Valencia ajv@csd.mot.comjtk@netcom.comArne Henrik Juul arnej@Lise.Unit.NOBakul Shah bvs@bitblocks.comBarry Lustig barry@ictv.comBob Wilcox bob@obiwan.uucpBranko LankesterBrett Lymn blymn@mulga.awadi.com.AUCharles Hannum mycroft@ai.mit.eduChris G. Demetriou
cgd@postgres.berkeley.eduChris Torek torek@ee.lbl.govChristoph Robitschko
chmr@edvz.tu-graz.ac.atDaniel Poirot poirot@aio.jsc.nasa.govDave Burgess burgess@hrd769.brooks.af.milDave Rivers rivers@ponds.uucpDavid Dawes dawes@physics.su.OZ.AUDavid Greenman dg@Root.COMEric J. Haug ejh@slustl.slu.eduFelix Gaehtgens
felix@escape.vsse.in-berlin.deFrank Maclachlan fpm@crash.cts.comGary A. Browning gab10@griffcd.amdahl.comGary Howland gary@hotlava.comGeoff Rehmet csgr@alpha.ru.ac.zaGoran Hammarback goran@astro.uu.seGuido van Rooij guido@gvr.orgGuy Harris guy@auspex.comHavard Eidnes
Havard.Eidnes@runit.sintef.noHerb Peyerl hpeyerl@novatel.cuc.ab.caHolger Veit Holger.Veit@gmd.deIshii Masahiro, R. Kym HorsellJ.T. Conklin jtc@cygnus.comJagane D Sundar jagane@netcom.comJames Clark jjc@jclark.comJames Jegers jimj@miller.cs.uwm.eduJames W. DolterJames da Silva jds@cs.umd.edu et alJay Fenlason hack@datacube.comJim Wilson wilson@moria.cygnus.comJörg Lohse
lohse@tech7.informatik.uni-hamburg.deJörg Wunsch
joerg_wunsch@uriah.heep.sax.deJohn DysonJohn Woods jfw@eddie.mit.eduJordan K. Hubbard jkh@whisker.hubbard.ieJulian Elischer julian@dialix.oz.au
- Julian Stacey jhs@freebsd.org
+ Julian Stacey jhs@FreeBSD.orgKarl Dietz Karl.Dietz@triplan.comKarl Lehenbauer karl@NeoSoft.comkarl@one.neosoft.comKeith Bostic bostic@toe.CS.Berkeley.EDUKen HughesKent Talarico kent@shipwreck.tsoft.netKevin Lahey kml%rokkaku.UUCP@mathcs.emory.edukml@mosquito.cis.ufl.eduMarc Frajola marc@dev.comMark Tinguely tinguely@plains.nodak.edutinguely@hookie.cs.ndsu.NoDak.eduMartin Renters martin@tdc.on.caMichael Clay mclay@weareb.orgMichael Galassi nerd@percival.rain.comMike Durkin mdurkin@tsoft.sf-bay.orgNaoki Hamada nao@tom-yam.or.jpNate Williams nate@bsd.coe.montana.eduNick Handel nhandel@NeoSoft.comnick@madhouse.neosoft.comPace Willisson pace@blitz.comPaul Kranenburg pk@cs.few.eur.nlPaul Mackerras paulus@cs.anu.edu.auPaul Popelka paulp@uts.amdahl.comPeter da Silva peter@NeoSoft.comPhil Sutherland
philsuth@mycroft.dialix.oz.au
- Poul-Henning Kampphk@FreeBSD.ORG
+ Poul-Henning Kampphk@FreeBSD.orgRalf Friedl friedl@informatik.uni-kl.deRick Macklem root@snowhite.cis.uoguelph.caRobert D. Thrush rd@phoenix.aii.comRodney W. Grimes rgrimes@cdrom.comSascha Wildner swildner@channelz.GUN.deScott Burris scott@pita.cns.ucla.eduScott Reynolds scott@clmqt.marquette.mi.usSean Eric Fagan sef@kithrup.comSimon J Gerraty sjg@melb.bull.oz.ausjg@zen.void.oz.auStephen McKay syssgm@devetir.qld.gov.auTerry Lambert terry@icarus.weber.eduTerry Lee terry@uivlsi.csl.uiuc.eduTor Egge Tor.Egge@idi.ntnu.noWarren Toomey wkt@csadfa.cs.adfa.oz.auWiljo Heinen wiljo@freeside.ki.open.deWilliam Jolitz withheldWolfgang Solfrank ws@tools.deWolfgang Stanglmeier wolf@dentaro.GUN.deYuval Yarom yval@cs.huji.ac.il
diff --git a/en_US.ISO8859-1/books/handbook/cutting-edge/chapter.sgml b/en_US.ISO8859-1/books/handbook/cutting-edge/chapter.sgml
index 484daea3c9..a79fc015cf 100644
--- a/en_US.ISO8859-1/books/handbook/cutting-edge/chapter.sgml
+++ b/en_US.ISO8859-1/books/handbook/cutting-edge/chapter.sgml
@@ -1,2473 +1,2473 @@
The Cutting Edge: FreeBSD-current and FreeBSD-stableFreeBSD is under constant development between releases. For people
who want to be on the cutting edge, there are several easy mechanisms for
keeping your system in sync with the latest developments. Be warned: the
cutting edge is not for everyone! This chapter will help you decide if you
want to track the development system, or stick with one of the released
versions.Staying Current with FreeBSDContributed by &a.jkh;.What is FreeBSD-current?FreeBSD-current is, quite literally, nothing more than a daily
snapshot of the working sources for FreeBSD. These include work in
progress, experimental changes and transitional mechanisms that may or
may not be present in the next official release of the software.
While many of us compile almost daily from FreeBSD-current sources,
there are periods of time when the sources are literally
un-compilable. These problems are generally resolved as expeditiously
as possible, but whether or not FreeBSD-current sources bring disaster
or greatly desired functionality can literally be a matter of which
part of any given 24 hour period you grabbed them in!Who needs FreeBSD-current?FreeBSD-current is made generally available for 3 primary interest
groups:Members of the FreeBSD group who are actively working on some
part of the source tree and for whom keeping “current”
is an absolute requirement.Members of the FreeBSD group who are active testers, willing
to spend time working through problems in order to ensure that
FreeBSD-current remains as sane as possible. These are also people
who wish to make topical suggestions on changes and the general
direction of FreeBSD.Peripheral members of the FreeBSD (or some other) group who
merely wish to keep an eye on things and use the current sources
for reference purposes (e.g. for reading, not
running). These people also make the occasional comment or
contribute code.What is FreeBSD-current not?A fast-track to getting pre-release bits because you heard
there is some cool new feature in there and you want to be the
first on your block to have it.A quick way of getting bug fixes.In any way “officially supported” by us. We do
our best to help people genuinely in one of the 3
“legitimate” FreeBSD-current categories, but we simply
do not have the time to provide tech support
for it. This is not because we are mean and nasty people who do
not like helping people out (we would not even be doing FreeBSD if
we were), it is literally because we cannot answer 400 messages a
day and actually work on FreeBSD! I am sure
that, if given the choice between having us answer lots of
questions or continuing to improve FreeBSD, most of you would vote
for us improving it.Using FreeBSD-currentJoin the &a.current; and the &a.cvsall; . This is not just a
good idea, it is essential. If you are not
on the FreeBSD-current mailing list, you will
not see the comments that people are making about the current
state of the system and thus will probably end up stumbling over a
lot of problems that others have already found and solved. Even
more importantly, you will miss out on important bulletins which
may be critical to your system's continued health.The cvs-all mailing list will allow you to see
the commit log entry for each change as it is made along with any
pertinent information on possible side-effects.To join these lists, send mail to
&a.majordomo; and specify:
subscribe freebsd-current
subscribe cvs-all
in the body of your message. Optionally, you can also say
help and Majordomo will send you full help on
how to subscribe and unsubscribe to the various other mailing
lists we support.Grab the sources from ftp.FreeBSD.ORG. You can do this in three
+ role="fqdn">ftp.FreeBSD.org. You can do this in three
ways:Use the CTM facility. Unless
you have a good TCP/IP connection at a flat rate, this is
the way to do it.Use the cvsup program with
this
supfile. This is the second most recommended
method, since it allows you to grab the entire collection
once and then only what has changed from then on. Many people
run cvsup from cron and keep their sources up-to-date
automatically. For a fairly easy interface to this, simply
type:
Use ftp. The source tree for
FreeBSD-current is always “exported” on: ftp://ftp.FreeBSD.ORG/pub/FreeBSD/FreeBSD-current.
+ URL="ftp://ftp.FreeBSD.org/pub/FreeBSD/FreeBSD-current">ftp://ftp.FreeBSD.org/pub/FreeBSD/FreeBSD-current.
We also use wu-ftpd which allows
compressed/tar'd grabbing of whole trees. e.g. you
see:usr.bin/lexYou can do:
ftp>cd usr.binftp>get lex.tar.Z
and it will get the whole directory for you as a compressed
tar file.Essentially, if you need rapid on-demand access to the source
and communications bandwidth is not a consideration, use
cvsup or ftp. Otherwise,
use CTM.If you are grabbing the sources to run, and not just look at,
then grab all of current, not just selected
portions. The reason for this is that various parts of the source
depend on updates elsewhere, and trying to compile just a subset
is almost guaranteed to get you into trouble.Before compiling current, read the Makefile in
/usr/src carefully. You should at least run
a make world the first time
through as part of the upgrading process. Reading the &a.current;
will keep you up-to-date on other bootstrapping procedures that
sometimes become necessary as we move towards the next
release.Be active! If you are running FreeBSD-current, we want to
know what you have to say about it, especially if you have
suggestions for enhancements or bug fixes. Suggestions with
accompanying code are received most enthusiastically!Staying Stable with FreeBSDContributed by &a.jkh;.What is FreeBSD-stable?FreeBSD-stable is our development branch for a more low-key and
conservative set of changes intended for our next mainstream release.
Changes of an experimental or untested nature do not go into this
branch (see FreeBSD-current).Who needs FreeBSD-stable?If you are a commercial user or someone who puts maximum stability
of their FreeBSD system before all other concerns, you should consider
tracking stable. This is especially true if you
have installed the most recent release (&rel.current;-RELEASE
at the time of this writing) since the stable
branch is effectively a bug-fix stream relative to the previous
release.The stable tree endeavors, above all, to be
fully compilable and stable at all times, but we do occasionally
make mistakes (these are still active sources with
quickly-transmitted updates, after all). We also do our best to
thoroughly test fixes in current before
bringing them into stable, but sometimes our
tests fail to catch every case. If something breaks for you in
stable, please let us know
immediately! (see next section).Using FreeBSD-stableJoin the &a.stable;. This will keep you informed of
build-dependencies that may appear in stable
or any other issues requiring special attention. Developers will
also make announcements in this mailing list when they are
contemplating some controversial fix or update, giving the users a
chance to respond if they have any issues to raise concerning the
proposed change.The cvs-all mailing list will allow you to see
the commit log entry for each change as it is made along with any
pertinent information on possible side-effects.To join these lists, send mail to &a.majordomo; and specify:
subscribe freebsd-stable
subscribe cvs-all
in the body of your message. Optionally, you can also say
help and Majordomo will send you full help on
how to subscribe and unsubscribe to the various other mailing
lists we support.If you are installing a new system and want it to be as stable
as possible, you can simply grab the latest dated branch snapshot
from ftp://releng3.FreeBSD.org/pub/FreeBSD/
and install it like any other release.If you are already running a previous release of 2.2 and wish
to upgrade via sources then you can easily do so from ftp.FreeBSD.ORG. This can be done in one
+ role="fqdn">ftp.FreeBSD.org. This can be done in one
of three ways:Use the CTM facility. Unless
you have a good TCP/IP connection at a flat rate, this is
the way to do it.Use the cvsup program with
this
supfile. This is the second most recommended
method, since it allows you to grab the entire collection
once and then only what has changed from then on. Many people
run cvsup from cron to keep their sources up-to-date
automatically. For a fairly easy interface to this, simply
type;
Use ftp. The source tree for
FreeBSD-stable is always “exported” on: ftp://ftp.FreeBSD.ORG/pub/FreeBSD/FreeBSD-stable
+ URL="ftp://ftp.FreeBSD.org/pub/FreeBSD/FreeBSD-stable">ftp://ftp.FreeBSD.org/pub/FreeBSD/FreeBSD-stable
We also use wu-ftpd which allows
compressed/tar'd grabbing of whole trees. e.g. you
see:usr.bin/lexYou can do:
ftp>cd usr.binftp>get lex.tar.Z
and it will get the whole directory for you as a compressed
tar file.Essentially, if you need rapid on-demand access to the source
and communications bandwidth is not a consideration, use
cvsup or ftp. Otherwise,
use CTM.Before compiling stable, read the Makefile in
/usr/src carefully. You should at least run
a make world the first time
through as part of the upgrading process. Reading the &a.stable;
will keep you up-to-date on other bootstrapping procedures that
sometimes become necessary as we move towards the next
release.Synchronizing Source Trees over the InternetContributed by &a.jkh;.There are various ways of using an Internet (or email) connection to
stay up-to-date with any given area of the FreeBSD project sources, or
all areas, depending on what interests you. The primary services we
offer are Anonymous CVS, CVSup, and CTM.Anonymous CVS and
CVSup use the pull model
of updating sources. In the case of CVSup
the user (or a cron script) invokes the cvsup
program, and it interacts with a cvsupd server
somewhere to bring your files up to date. The updates you receive are
up-to-the-minute and you get them when, and only when, you want them.
You can easily restrict your updates to the specific files or
directories that are of interest to you. Updates are generated on the
fly by the server, according to what you have and what you want to have.
Anonymous CVS is quite a bit more simplistic
than CVSup in that it's just an extension to
CVS which allows it to pull changes directly
from a remote CVS repository. CVSup can do
this far more efficiently, but Anonymous CVS
is easier to use.CTM, on the other hand, does not
interactively compare the sources you have with those on the master
archive or otherwise pull them across.. Instead, a script which
identifies changes in files since its previous run is executed several
times a day on the master CTM machine, any detected changes being
compressed, stamped with a sequence-number and encoded for transmission
over email (in printable ASCII only). Once received, these “CTM
deltas” can then be handed to the &man.ctm.rmail.1; utility which
will automatically decode,
verify and apply the changes to the user's copy of the sources. This
process is far more efficient than CVSup, and
places less strain on our server resources since it is a
push rather than a pull
model.There are other trade-offs, of course. If you inadvertently wipe
out portions of your archive, CVSup will
detect and rebuild the damaged portions for you.
CTM won't do this, and if you wipe some
portion of your source tree out (and don't have it backed up) then you
will have to start from scratch (from the most recent CVS “base
delta”) and rebuild it all with CTM or, with anoncvs, simply
delete the bad bits and resync.For more information on Anonymous CVS,
CTM, and CVSup,
please see one of the following sections:Anonymous CVSContributed by &a.jkh;IntroductionAnonymous CVS (or, as it is otherwise known,
anoncvs) is a feature provided by the CVS
utilities bundled with FreeBSD for synchronizing with a remote CVS
repository. Among other things, it allows users of FreeBSD to
perform, with no special privileges, read-only CVS operations
against one of the FreeBSD project's official anoncvs servers. To
use it, one simply sets the CVSROOT environment
variable to point at the appropriate anoncvs server and then uses
the &man.cvs.1; command to access it like any local
repository.While it can also be said that the CVSup and anoncvs
services both perform essentially the same function, there are
various trade-offs which can influence the user's choice of
synchronization methods. In a nutshell,
CVSup is much more efficient in its usage
of network resources and is by far the most technically
sophisticated of the two, but at a price. To use
CVSup, a special client must first be
installed and configured before any bits can be grabbed, and then
only in the fairly large chunks which
CVSup calls
collections.Anoncvs, by contrast, can be used to
examine anything from an individual file to a specific program (like
ls or grep) by referencing the
CVS module name. Of course, anoncvs is
also only good for read-only operations on the CVS repository, so if
it's your intention to support local development in one repository
shared with the FreeBSD project bits then
CVSup is really your only option.Using Anonymous CVSConfiguring &man.cvs.1; to use an Anonymous CVS repository is a
simple matter of setting the CVSROOT environment
variable to point to one of the FreeBSD project's
anoncvs servers. At the time of this writing,
the following servers are available:USA:
anoncvs@anoncvs.FreeBSD.org:/cvsSince CVS allows one to “check out” virtually any
version of the FreeBSD sources that ever existed (or, in some cases,
will exist :), you need to be familiar with the
revision () flag to &man.cvs.1; and what some of
the permissible values for it in the FreeBSD Project repository
are.There are two kinds of tags, revision tags and branch tags. A
revision tag refers to a specific revision. Its meaning stays the
same from day to day. A branch tag, on the other hand, refers to
the latest revision on a given line of development, at any given
time. Because a branch tag does not refer to a specific revision,
it may mean something different tomorrow than it means today.Here are the branch tags that users might be interested
in:HEADSymbolic name for the main line, or FreeBSD-current. Also
the default when no revision is specified.RELENG_3The line of development for FreeBSD-3.x, also known as
FreeBSD-stable. Not valid for the ports collection.RELENG_2_2The line of development for FreeBSD-2.2.x, also known as
2.2-stable. This branch is mostly obsolete. Not valid for
the ports collection.RELENG_2_1_0The line of development for FreeBSD-2.1.x - this branch is
largely obsolete. Not valid for the ports collection.Here are the revision tags that users might be interested
in:RELENG_3_2_0_RELEASEFreeBSD-3.2. Not valid for the ports collection.RELENG_3_1_0_RELEASEFreeBSD-3.1. Not valid for the ports collection.RELENG_3_0_0_RELEASEFreeBSD-3.0. Not valid for the ports collection.RELENG_2_2_8_RELEASEFreeBSD-2.2.8. Not valid for the ports collection.RELENG_2_2_7_RELEASEFreeBSD-2.2.7. Not valid for the ports collection.RELENG_2_2_6_RELEASEFreeBSD-2.2.6. Not valid for the ports collection.RELENG_2_2_5_RELEASEFreeBSD-2.2.5. Not valid for the ports collection.RELENG_2_2_2_RELEASEFreeBSD-2.2.2. Not valid for the ports collection.RELENG_2_2_1_RELEASEFreeBSD-2.2.1. Not valid for the ports collection.RELENG_2_2_0_RELEASEFreeBSD-2.2.0. Not valid for the ports collection.RELENG_2_1_7_RELEASEFreeBSD-2.1.7. Not valid for the ports collection.RELENG_2_1_6_1_RELEASEFreeBSD-2.1.6.1. Not valid for the ports
collection.RELENG_2_1_6_RELEASEFreeBSD-2.1.6. Not valid for the ports collection.RELENG_2_1_5_RELEASEFreeBSD-2.1.5. Not valid for the ports collection.RELENG_2_1_0_RELEASEFreeBSD-2.1.0. Not valid for the ports collection.When you specify a branch tag, you normally receive the latest
versions of the files on that line of development. If you wish to
receive some past version, you can do so by specifying a date with
the flag. See the &man.cvs.1; man page
for more details.ExamplesWhile it really is recommended that you read the manual page for
&man.cvs.1; thoroughly before doing anything, here are some
quick examples which essentially show how to use Anonymous
CVS:Checking out something from -current (&man.ls.1;) and
deleting it again:
&prompt.user; setenv CVSROOT anoncvs@anoncvs.FreeBSD.org:/cvs
&prompt.user; cvs co ls
&prompt.user; cvs release -d lsChecking out the version of ls(1) in the 2.2-stable
branch:
&prompt.user; setenv CVSROOT anoncvs@anoncvs.FreeBSD.org:/cvs
&prompt.user; cvs co -rRELENG_2_2 ls
&prompt.user; cvs release -d lsCreating a list of changes (as unidiffs) to &man.ls.1;
&prompt.user; setenv CVSROOT anoncvs@anoncvs.FreeBSD.org:/cvs
&prompt.user; cvs rdiff -u -rRELENG_2_2_2_RELEASE -rRELENG_2_2_6_RELEASE lsFinding out what other module names can be used:
&prompt.user; setenv CVSROOT anoncvs@anoncvs.FreeBSD.org:/cvs
&prompt.user; cvs co modules
&prompt.user; more modules/modules
&prompt.user; cvs release -d modulesOther ResourcesThe following additional resources may be helpful in learning
CVS:CVS Tutorial from Cal Poly.Cyclic Software,
commercial maintainers of CVS.CVSWeb is
the FreeBSD Project web interface for CVS.CTMContributed by &a.phk;. Updated
19-October-1997.CTM is a method for keeping a remote
directory tree in sync with a central one. It has been developed for
usage with FreeBSD's source trees, though other people may find it
useful for other purposes as time goes by. Little, if any,
documentation currently exists at this time on the process of creating
deltas, so talk to &a.phk; for more information should you wish to use
CTM for other things.Why should I use CTM?CTM will give you a local copy of the
FreeBSD source trees. There are a number of “flavors”
of the tree available. Whether you wish to track the entire cvs
tree or just one of the branches, CTM can
provide you the information. If you are an active developer on
FreeBSD, but have lousy or non-existent TCP/IP connectivity, or
simply wish to have the changes automatically sent to you,
CTM was made for you. You will need to
obtain up to three deltas per day for the most active branches.
However, you should consider having them sent by automatic email.
The sizes of the updates are always kept as small as possible. This
is typically less than 5K, with an occasional (one in ten) being
10-50K and every now and then a biggie of 100K+ or more coming
around.You will also need to make yourself aware of the various caveats
related to working directly from the development sources rather than
a pre-packaged release. This is particularly true if you choose the
“current” sources. It is recommended that you read
Staying current with FreeBSD.What do I need to use CTM?You will need two things: The CTM
program and the initial deltas to feed it (to get up to
“current” levels).The CTM program has been part of
FreeBSD ever since version 2.0 was released, and lives in
/usr/src/usr.sbin/CTM if you have a copy of the
source online.If you are running a pre-2.0 version of FreeBSD, you can fetch
the current CTM sources directly
from:ftp://ftp.FreeBSD.ORG/pub/FreeBSD/FreeBSD-current/src/usr.sbin/ctm
+ URL="ftp://ftp.FreeBSD.org/pub/FreeBSD/FreeBSD-current/src/usr.sbin/ctm">ftp://ftp.FreeBSD.org/pub/FreeBSD/FreeBSD-current/src/usr.sbin/ctm
The “deltas” you feed CTM
can be had two ways, FTP or e-mail. If you have general FTP access
to the Internet then the following FTP sites support access to
CTM:ftp://ftp.FreeBSD.ORG/pub/FreeBSD/CTM
+ URL="ftp://ftp.FreeBSD.org/pub/FreeBSD/CTM">ftp://ftp.FreeBSD.org/pub/FreeBSD/CTM
or see section mirrors.FTP the relevant directory and fetch the
README file, starting from there.If you may wish to get your deltas via email:Send email to &a.majordomo; to subscribe to one of the
CTM distribution lists.
“ctm-cvs-cur” supports the entire cvs tree.
“ctm-src-cur” supports the head of the development
branch. “ctm-src-2_2” supports the 2.2 release branch,
etc. (If you do not know how to subscribe yourself using majordomo,
send a message first containing the word help
— it will send you back usage instructions.)When you begin receiving your CTM
updates in the mail, you may use the ctm_rmail
program to unpack and apply them. You can actually use the
ctm_rmail program directly from a entry in
/etc/aliases if you want to have the process
run in a fully automated fashion. Check the
ctm_rmail man page for more details.No matter what method you use to get the
CTM deltas, you should subscribe to the
- ctm-announce@FreeBSD.ORG mailing list. In the
+ ctm-announce@FreeBSD.org mailing list. In the
future, this will be the only place where announcements concerning
the operations of the CTM system will
be posted. Send an email to &a.majordomo; with a single line of
subscribe ctm-announce to get added to the
list.Starting off with CTM for the first
timeBefore you can start using CTM
deltas, you will need to get to a starting point for the deltas
produced subsequently to it.First you should determine what you already have. Everyone can
start from an “empty” directory. You must use an
initial “Empty&rdquo delta to start off your
CTM supported tree. At some point it is
intended that one of these “started” deltas be
distributed on the CD for your convenience. This does not currently
happen however.However, since the trees are many tens of megabytes, you should
prefer to start from something already at hand. If you have a
RELEASE CD, you can copy or extract an initial source from it. This
will save a significant transfer of data.You can recognize these “starter” deltas by the
X appended to the number
(src-cur.3210XEmpty.gz for instance). The
designation following the X corresponds to the
origin of your initial “seed”.
Empty is an empty directory. As a rule a base
transition from Empty is produced every 100
deltas. By the way, they are large! 25 to 30 Megabytes of
gzip'ed data is common for the
XEmpty deltas.Once you've picked a base delta to start from, you will also
need all deltas with higher numbers following it.Using CTM in your daily lifeTo apply the deltas, simply say:&prompt.root; cd /where/ever/you/want/the/stuff
&prompt.root; ctm -v -v /where/you/store/your/deltas/src-xxx.*CTM understands deltas which have
been put through gzip, so you do not need to
gunzip them first, this saves disk space.Unless it feels very secure about the entire process,
CTM will not touch your tree. To verify
a delta you can also use the flag and
CTM will not actually touch your tree; it
will merely verify the integrity of the delta and see if it would
apply cleanly to your current tree.There are other options to CTM as
well, see the manual pages or look in the sources for more
information.I would also be very happy if somebody could help with the
“user interface” portions, as I have realized that I
cannot make up my mind on what options should do what, how and
when...That's really all there is to it. Every time you get a new
delta, just run it through CTM to keep
your sources up to date.Do not remove the deltas if they are hard to download again. You
just might want to keep them around in case something bad happens.
Even if you only have floppy disks, consider using
fdwrite to make a copy.Keeping your local changesAs a developer one would like to experiment with and change
files in the source tree. CTM supports
local modifications in a limited way: before checking for the
presence of a file foo, it first looks for
foo.ctm. If this file exists, CTM will operate
on it instead of foo.This behaviour gives us a simple way to maintain local changes:
simply copy the files you plan to modify to the corresponding file
names with a .ctm suffix. Then you can freely
hack the code, while CTM keeps the .ctm file
up-to-date.Other interesting CTM optionsFinding out exactly what would be touched by an
updateYou can determine the list of changes that
CTM will make on your source repository
using the option to
CTM.This is useful if you would like to keep logs of the changes,
pre- or post- process the modified files in any manner, or just
are feeling a tad paranoid :-).Making backups before updatingSometimes you may want to backup all the files that would be
changed by a CTM update.Specifying the option causes
CTM to backup all files that would be
touched by a given CTM delta to
backup-file.Restricting the files touched by an updateSometimes you would be interested in restricting the scope of
a given CTM update, or may be
interested in extracting just a few files from a sequence of
deltas.You can control the list of files that
CTM would operate on by specifying
filtering regular expressions using the and
options.For example, to extract an up-to-date copy of
lib/libc/Makefile from your collection of
saved CTM deltas, run the commands:&prompt.root; cd /where/ever/you/want/to/extract/it/
&prompt.root; ctm -e '^lib/libc/Makefile' ~ctm/src-xxx.*For every file specified in a CTM
delta, the and options are
applied in the order given on the command line. The file is
processed by CTM only if it is marked
as eligible after all the and
options are applied to it.Future plans for CTMTons of them:Use some kind of authentication into the CTM system, so as
to allow detection of spoofed CTM updates.Clean up the options to CTM, they
became confusing and counter intuitive.The bad news is that I am very busy, so any help in doing this
will be most welcome. And do not forget to tell me what you want
also...Miscellaneous stuffAll the “DES infected” (e.g. export controlled)
source is not included. You will get the
“international” version only. If sufficient interest
appears, we will set up a sec-cur sequence too.
There is a sequence of deltas for the ports
collection too, but interest has not been all that high yet. Tell me
if you want an email list for that too and we will consider setting
it up.Thanks!&a.bde;for his pointed pen and invaluable comments.&a.sos;for patience.Stephen McKaywrote ctm_[rs]mail, much
appreciated.&a.jkh;for being so stubborn that I had to make it better.All the usersI hope you like it...CVSupContributed by &a.jdp;.IntroductionCVSup is a software package for
distributing and updating source trees from a master CVS repository
on a remote server host. The FreeBSD sources are maintained in a
CVS repository on a central development machine in California. With
CVSup, FreeBSD users can easily keep
their own source trees up to date.CVSup uses the so-called
pull model of updating. Under the pull model,
each client asks the server for updates, if and when they are
wanted. The server waits passively for update requests from its
clients. Thus all updates are instigated by the client. The server
never sends unsolicited updates. Users must either run the
CVSup client manually to get an update,
or they must set up a cron job to run it
automatically on a regular basis.The term CVSup, capitalized just so,
refers to the entire software package. Its main components are the
client cvsup which runs on each user's machine,
and the server cvsupd which runs at each of the
FreeBSD mirror sites.As you read the FreeBSD documentation and mailing lists, you may
see references to sup.
Sup was the predecessor of
CVSup, and it served a similar purpose.
CVSup is in used in much the same way as
sup and, in fact, uses configuration files which are
backward-compatible with sup's.
Sup is no longer used in the FreeBSD
project, because CVSup is both faster and
more flexible.InstallationThe easiest way to install CVSup if
you are running FreeBSD 2.2 or later is to use either the
port from the FreeBSD ports
collection or the corresponding binary
package, depending on whether you prefer to roll your own
or not.If you are running FreeBSD-2.1.6 or 2.1.7, you unfortunately
cannot use the binary package versions due to the fact that they
require a version of the C library that does not yet exist in
FreeBSD-2.1.{6,7}. You can easily use the
port, however, just as with FreeBSD 2.2. Simply unpack
the tar file, cd to the cvsup subdirectory and type make
install.Because CVSup is written in Modula-3,
both the package and the port require that the Modula-3 runtime
libraries be installed. These are available as the lang/modula-3-lib port and the lang/modula-3-lib-3.6 package.
If you follow the same directions as for cvsup,
these libraries will be compiled and/or installed automatically when
you install the CVSup port or
package.The Modula-3 libraries are rather large, and fetching and
compiling them is not an instantaneous process. For that reason, a
third option is provided. You can get statically
linked FreeBSD executables for
CVSup from the USA distribution
site:ftp://ftp.FreeBSD.org/pub/FreeBSD/development/CVSup/cvsup-bin-16.0.tar.gz (client including GUI).ftp://ftp.FreeBSD.org/pub/FreeBSD/development/CVSup/cvsup.nogui-bin-16.0.tar.gz (client without GUI).ftp://ftp.FreeBSD.org/pub/FreeBSD/development/CVSup/cvsupd-bin-16.0.tar.gz (server).as well as from the many FreeBSD FTP
mirror sites around the world.Most users will need only the client. These executables are
entirely self-contained, and they will run on any version of FreeBSD
from FreeBSD-2.1.0 to FreeBSD-current.In summary, your options for installing CVSup are:FreeBSD-2.2 or later: static binary, port, or
packageFreeBSD-2.1.6, 2.1.7: static binary or portFreeBSD-2.1.5 or earlier: static binaryCVSup ConfigurationCVSup's operation is controlled by a
configuration file called the supfile.
Beginning with FreeBSD-2.2, there are some sample
supfiles in the directory /usr/share/examples/cvsup.
These examples are also available from ftp://ftp.FreeBSD.org/pub/FreeBSD/FreeBSD-current/src/share/examples/cvsup/ if you are on a pre-2.2 system.The information in a supfile answers the
following questions for cvsup:Which files do you want
to receive?Which versions of them do
you want?Where do you want to get
them from?Where do you want to put
them on your own machine?Where do you want to put
your status files?In the following sections, we will construct a typical
supfile by answering each of these questions in
turn. First, we describe the overall structure of a
supfile.A supfile is a text file. Comments begin
with # and extend to the end of the line. Lines
that are blank and lines that contain only comments are
ignored.Each remaining line describes a set of files that the user
wishes to receive. The line begins with the name of a
“collection”, a logical grouping of files defined by the
server. The name of the collection tells the server which files you
want. After the collection name come zero or more fields, separated
by white space. These fields answer the questions listed above.
There are two types of fields: flag fields and value fields. A flag
field consists of a keyword standing alone, e.g.,
delete or compress. A value
field also begins with a keyword, but the keyword is followed
without intervening white space by = and a second
word. For example, release=cvs is a value
field.A supfile typically specifies more than one
collection to receive. One way to structure a
supfile is to specify all of the relevant
fields explicitly for each collection. However, that tends to make
the supfile lines quite long, and it is
inconvenient because most fields are the same for all of the
collections in a supfile.
CVSup provides a defaulting mechanism to
avoid these problems. Lines beginning with the special
pseudo-collection name *default can be used to
set flags and values which will be used as defaults for the
subsequent collections in the supfile. A
default value can be overridden for an individual collection, by
specifying a different value with the collection itself. Defaults
can also be changed or augmented in mid-supfile by additional
*default lines.With this background, we will now proceed to construct a
supfile for receiving and updating the main
source tree of FreeBSD-current.Which files do you want to receive?The files available via CVSup are
organized into named groups called “collections”.
The collections that are available are described here. In this example, we wish
to receive the entire main source tree for the FreeBSD system.
There is a single large collection src-all
which will give us all of that, except the export-controlled
cryptography support. Let us assume for this example that we
are in the USA or Canada. Then we can get the cryptography code
with one additional collection, cvs-crypto.
As a first step toward constructing our
supfile, we simply list these collections,
one per line:
src-all
cvs-cryptoWhich version(s) of them do you want?With CVSup, you can receive
virtually any version of the sources that ever existed. That is
possible because the cvsupd server works directly from the CVS
repository, which contains all of the versions. You specify
which one of them you want using the tag= and
value fields.Be very careful to specify any tag=
fields correctly. Some tags are valid only for certain
collections of files. If you specify an incorrect or
misspelled tag, CVSup will delete files which you probably do
not want deleted. In particular, use only
tag=. for the
ports-* collections.The tag= field names a symbolic tag in
the repository. There are two kinds of tags, revision tags and
branch tags. A revision tag refers to a specific revision. Its
meaning stays the same from day to day. A branch tag, on the
other hand, refers to the latest revision on a given line of
development, at any given time. Because a branch tag does not
refer to a specific revision, it may mean something different
tomorrow than it means today.Here are the branch tags that users might be interested
in:tag=.The main line of development, also known as
FreeBSD-current.The . is not punctuation; it is
the name of the tag. Valid for all collections.RELENG_3The line of development for FreeBSD-3.x, also known as
FreeBSD-stable. Not valid for the ports
collection.RELENG_2_2The line of development for FreeBSD-2.2.x, also known
as 2.2-stable. Not valid for the ports collection.tag=RELENG_2_1_0The line of development for FreeBSD-2.1.x - this
branch is largely obsolete. Not valid for the ports-*
collections.Here are the revision tags that users might be interested
in:tag=RELENG_3_2_0_RELEASEFreeBSD-3.2. Not valid for the ports-*
collections.tag=RELENG_3_1_0_RELEASEFreeBSD-3.1. Not valid for the ports-*
collections.tag=RELENG_3_0_0_RELEASEFreeBSD-3.0. Not valid for the ports-*
collections.tag=RELENG_2_2_8_RELEASEFreeBSD-2.2.8. Not valid for the ports-*
collections.tag=RELENG_2_2_7_RELEASEFreeBSD-2.2.7. Not valid for the ports-*
collections.tag=RELENG_2_2_6_RELEASEFreeBSD-2.2.6. Not valid for the ports-*
collections.tag=RELENG_2_2_5_RELEASEFreeBSD-2.2.5. Not valid for the ports-*
collections.tag=RELENG_2_2_2_RELEASEFreeBSD-2.2.2. Not valid for the ports-*
collections.tag=RELENG_2_2_1_RELEASEFreeBSD-2.2.1. Not valid for the ports-*
collections.tag=RELENG_2_2_0_RELEASEFreeBSD-2.2.0. Not valid for the ports-*
collections.tag=RELENG_2_1_7_RELEASEFreeBSD-2.1.7. Not valid for the ports-*
collections.tag=RELENG_2_1_6_1_RELEASEFreeBSD-2.1.6.1. Not valid for the ports-*
collections.tag=RELENG_2_1_6_RELEASEFreeBSD-2.1.6. Not valid for the ports-*
collections.tag=RELENG_2_1_5_RELEASEFreeBSD-2.1.5. Not valid for the ports-*
collections.tag=RELENG_2_1_0_RELEASEFreeBSD-2.1.0. Not valid for the ports-*
collections.Be very careful to type the tag name exactly as shown.
CVSup cannot distinguish between
valid and invalid tags. If you misspell the tag,
CVSup will behave as though you had
specified a valid tag which happens to refer to no files at
all. It will delete your existing sources in that
case.When you specify a branch tag, you normally receive the
latest versions of the files on that line of development. If
you wish to receive some past version, you can do so by
specifying a date with the value field.
The &man.cvsup.1; manual page explains how to do
that.For our example, we wish to receive FreeBSD-current. We add
this line at the beginning of our
supfile:
*default tag=.There is an important special case that comes into play if
you specify neither a tag= field nor a
date= field. In that case, you receive the
actual RCS files directly from the server's CVS repository,
rather than receiving a particular version. Developers
generally prefer this mode of operation. By maintaining a copy
of the repository itself on their systems, they gain the ability
to browse the revision histories and examine past versions of
files. This gain is achieved at a large cost in terms of disk
space, however.Where do you want to get them from?We use the host= field to tell
cvsup where to obtain its updates. Any of
the CVSup mirror sites will
do, though you should try to select one that is close to you in
cyberspace. In this example we will use a fictional FreeBSD
distribution site, cvsup666.FreeBSD.org:
*default host=cvsup666.FreeBSD.orgYou will need to change the host to one that actually exists
before running CVSup. On any particular run of
cvsup, you can override the host setting on
the command line, with .Where do you want to put them on your own machine?The prefix= field tells
cvsup where to put the files it receives. In
this example, we will put the source files directly into our
main source tree, /usr/src. The
src directory is already implicit in the
collections we have chosen to receive, so this is the correct
specification:
*default prefix=/usrWhere should cvsup maintain its status
files?The cvsup client maintains certain status files in what is
called the “base” directory. These files help
CVSup to work more efficiently, by
keeping track of which updates you have already received. We
will use the standard base directory,
/usr/local/etc/cvsup:
*default base=/usr/local/etc/cvsupThis setting is used by default if it is not specified in
the supfile, so we actually do not need the
above line.If your base directory does not already exist, now would be
a good time to create it. The cvsup client
will refuse to run if the base directory does not exist.Miscellaneous supfile settings:There is one more line of boiler plate that normally needs
to be present in the supfile:
*default release=cvs delete use-rel-suffix compressrelease=cvs indicates that the server
should get its information out of the main FreeBSD CVS
repository. This is virtually always the case, but there are
other possibilities which are beyond the scope of this
discussion.delete gives
CVSup permission to delete files.
You should always specify this, so that
CVSup can keep your source tree fully
up to date. CVSup is careful to
delete only those files for which it is responsible. Any extra
files you happen to have will be left strictly alone.use-rel-suffix is ... arcane. If you
really want to know about it, see the &man.cvsup.1; manual page.
Otherwise, just specify it and do not worry about it.compress enables the use of gzip-style
compression on the communication channel. If your network link
is T1 speed or faster, you probably should not use compression.
Otherwise, it helps substantially.Putting it all together:Here is the entire supfile for our
example:
*default tag=.
*default host=cvsup666.FreeBSD.org
*default prefix=/usr
*default base=/usr/local/etc/cvsup
*default release=cvs delete use-rel-suffix compress
src-all
cvs-cryptoRunning CVSupYou are now ready to try an update. The command line for doing
this is quite simple:&prompt.root; cvsup supfilewhere supfile is
of course the name of the supfile you have just created. Assuming
you are running under X11, cvsup will display a
GUI window with some buttons to do the usual things. Press the
“go” button, and watch it run.Since you are updating your actual /usr/src
tree in this example, you will need to run the program as
root so that cvsup has the
permissions it needs to update your files. Having just created your
configuration file, and having never used this program before, that
might understandably make you nervous. There is an easy way to do a
trial run without touching your precious files. Just create an
empty directory somewhere convenient, and name it as an extra
argument on the command line:&prompt.root; mkdir /var/tmp/dest
&prompt.root; cvsup supfile /var/tmp/destThe directory you specify will be used as the destination
directory for all file updates. CVSup
will examine your usual files in /usr/src, but
it will not modify or delete any of them. Any file updates will
instead land in /var/tmp/dest/usr/src.
CVSup will also leave its base directory
status files untouched when run this way. The new versions of those
files will be written into the specified directory. As long as you
have read access to /usr/src, you do not even
need to be root to perform this kind of trial run.If you are not running X11 or if you just do not like GUIs, you
should add a couple of options to the command line when you run
cvsup:&prompt.root; cvsup -g -L 2 supfileThe tells cvsup not to use its GUI. This is
automatic if you are not running X11, but otherwise you have to
specify it.The tells cvsup to print out the details
of all the file updates it is doing. There are three levels of
verbosity, from to . The
default is 0, which means total silence except for error
messages.There are plenty of other options available. For a brief list
of them, type cvsup -H. For more detailed
descriptions, see the manual page.Once you are satisfied with the way updates are working, you can
arrange for regular runs of cvsup using &man.cron.8;.
Obviously, you should not let cvsup use its GUI when running it from
cron.CVSup File CollectionsThe file collections available via
CVSup are organized hierarchically.
There are a few large collections, and they are divided into smaller
sub-collections. Receiving a large collection is equivalent to
receiving each of its sub-collections. The hierarchical
relationships among collections are reflected by the use of
indentation in the list below.The most commonly used collections are
src-all, cvs-crypto, and
ports-all. The other collections are used only
by small groups of people for specialized purposes, and some mirror
sites may not carry all of them.cvs-all release=cvsThe main FreeBSD CVS repository, excluding the
export-restricted cryptography code.distrib release=cvsFiles related to the distribution and mirroring of
FreeBSD.doc-all release=cvsSources for the FreeBSD handbook and other
documentation.ports-all release=cvsThe FreeBSD ports collection.ports-archivers
release=cvsArchiving tools.ports-astro
release=cvsAstronomical ports.ports-audio
release=cvsSound support.ports-base release=cvsMiscellaneous files at the top of
/usr/ports.ports-benchmarks
release=cvsBenchmarks.ports-biology
release=cvsBiology.ports-cad release=cvsComputer aided design tools.ports-chinese
release=cvsChinese language support.ports-comms
release=cvsCommunication software.ports-converters
release=cvscharacter code converters.ports-databases
release=cvsDatabases.ports-deskutils
release=cvsThings that used to be on the desktop before
computers were invented.ports-devel
release=cvsDevelopment utilities.ports-editors
release=cvsEditors.ports-emulators
release=cvsEmulators for other operating systems.ports-games
release=cvsGames.ports-german
release=cvsGerman language support.ports-graphics
release=cvsGraphics utilities.ports-japanese
release=cvsJapanese language support.ports-korean
release=cvsKorean language support.ports-lang release=cvsProgramming languages.ports-mail release=cvsMail software.ports-math release=cvsNumerical computation software.ports-mbone
release=cvsMBone applications.ports-misc release=cvsMiscellaneous utilities.ports-net release=cvsNetworking software.ports-news release=cvsUSENET news software.ports-palm
release=cvsSoftware support for 3Com Palm(tm) series.ports-plan9
release=cvsVarious programs from Plan9.ports-print
release=cvsPrinting software.ports-russian
release=cvsRussian language support.ports-security
release=cvsSecurity utilities.ports-shells
release=cvsCommand line shells.ports-sysutils
release=cvsSystem utilities.ports-textproc
release=cvstext processing utilities (does not include
desktop publishing).ports-vietnamese
release=cvsVietnamese language support.ports-www release=cvsSoftware related to the World Wide Web.ports-x11 release=cvsPorts to support the X window system.ports-x11-clocks
release=cvsX11 clocks.ports-x11-fm
release=cvsX11 file managers.ports-x11-fonts
release=cvsX11 fonts and font utilities.ports-x11-toolkits
release=cvsX11 toolkits.ports-x11-wmX11 window managers.src-all release=cvsThe main FreeBSD sources, excluding the
export-restricted cryptography code.src-base release=cvsMiscellaneous files at the top of
/usr/src.src-bin release=cvsUser utilities that may be needed in
single-user mode
(/usr/src/bin).src-contrib
release=cvsUtilities and libraries from outside the
FreeBSD project, used relatively unmodified
(/usr/src/contrib).src-etc release=cvsSystem configuration files
(/usr/src/etc).src-games release=cvsGames
(/usr/src/games).src-gnu release=cvsUtilities covered by the GNU Public License
(/usr/src/gnu).src-include
release=cvsHeader files
(/usr/src/include).src-kerberosIV
release=cvsKerberosIV security package
(/usr/src/kerberosIV).src-lib release=cvsLibraries
(/usr/src/lib).src-libexec
release=cvsSystem programs normally executed by other
programs
(/usr/src/libexec).src-release
release=cvsFiles required to produce a FreeBSD release
(/usr/src/release).src-sbin release=cvsSystem utilities for single-user mode
(/usr/src/sbin).src-share release=cvsFiles that can be shared across multiple
systems
(/usr/src/share).src-sys release=cvsThe kernel
(/usr/src/sys).src-tools release=cvsVarious tools for the maintenance of FreeBSD
(/usr/src/tools).src-usrbin release=cvsUser utilities
(/usr/src/usr.bin).src-usrsbin
release=cvsSystem utilities
(/usr/src/usr.sbin).www release=cvsThe sources for the World Wide Web data.cvs-crypto release=cvsThe export-restricted cryptography code.src-crypto release=cvsExport-restricted utilities and libraries from
outside the FreeBSD project, used relatively unmodified
(/usr/src/crypto).src-eBones release=cvsKerberos and DES
(/usr/src/eBones).src-secure release=cvsDES (/usr/src/secure).distrib release=selfThe CVSup server's own configuration files. Used by CVSup
mirror sites.gnats release=currentThe GNATS bug-tracking database.mail-archive release=currentFreeBSD mailing list archive.www release=currentThe installed World Wide Web data. Used by WWW mirror
sites.For more informationFor the CVSup FAQ and other information about CVSup, see The CVSup
Home Page.Most FreeBSD-related discussion of
CVSup takes place on the &a.hackers;.
New versions of the software are announced there, as well as on the
&a.announce;.Questions and bug reports should be addressed to the author of
the program at cvsup-bugs@polstra.com.Using make world to rebuild your systemContributed by &a.nik;.Once you have synchronised your local source tree against a
particular version of FreeBSD (stable,
current and so on) you must then use the source tree
to rebuild the system.Currently, the best source of information on how to do that is a
tutorial available from http://www.nothing-going-on.demon.co.uk/FreeBSD/make-world/make-world.html.A successor to this tutorial will be integrated into the
handbook.
diff --git a/en_US.ISO8859-1/books/handbook/eresources/chapter.sgml b/en_US.ISO8859-1/books/handbook/eresources/chapter.sgml
index ce30750488..f2ee2fc5f1 100644
--- a/en_US.ISO8859-1/books/handbook/eresources/chapter.sgml
+++ b/en_US.ISO8859-1/books/handbook/eresources/chapter.sgml
@@ -1,1370 +1,1370 @@
Resources on the InternetContributed by &a.jkh;.The rapid pace of FreeBSD progress makes print media impractical as a
means of following the latest developments. Electronic resources are the
best, if not often the only, way stay informed of the latest advances.
Since FreeBSD is a volunteer effort, the user community itself also
generally serves as a “technical support department” of sorts,
with electronic mail and USENET news being the most effective way of
reaching that community.The most important points of contact with the FreeBSD user community
are outlined below. If you are aware of other resources not mentioned
here, please send them to the &a.doc;so that they may also be
included.Mailing listsThough many of the FreeBSD development members read USENET, we
cannot always guarantee that we will get to your questions in a timely
fashion (or at all) if you post them only to one of the
comp.unix.bsd.freebsd.* groups. By addressing your
questions to the appropriate mailing list you will reach both us and a
concentrated FreeBSD audience, invariably assuring a better (or at least
faster) response.The charters for the various lists are given at the bottom of this
document. Please read the charter before joining or sending
mail to any list. Most of our list subscribers now receive
many hundreds of FreeBSD related messages every day, and by setting down
charters and rules for proper use we are striving to keep the
signal-to-noise ratio of the lists high. To do less would see the
mailing lists ultimately fail as an effective communications medium for
the project.Archives are kept for all of the mailing lists and can be searched
- using the FreeBSD World
+ using the FreeBSD World
Wide Web server. The keyword searchable archive offers an
excellent way of finding answers to frequently asked questions and
should be consulted before posting a question.List summaryGeneral lists: The following are general
lists which anyone is free (and encouraged) to join:ListPurposefreebsd-advocacyFreeBSD Evangelismfreebsd-announceImportant events and project milestonesfreebsd-bugsBug reportsfreebsd-chatNon-technical items related to the FreeBSD
communityfreebsd-currentDiscussion concerning the use of
FreeBSD-currentfreebsd-ispIssues for Internet Service Providers using
FreeBSDfreebsd-jobsFreeBSD employment and consulting
opportunitiesfreebsd-newbiesNew FreeBSD users activities and discussionsfreebsd-policyFreeBSD Core team policy decisions. Low volume, and
read-onlyfreebsd-questionsUser questions and technical supportfreebsd-stableDiscussion concerning the use of
FreeBSD-stableTechnical lists: The following lists are for
technical discussion. You should read the charter for each list
carefully before joining or sending mail to one as there are firm
guidelines for their use and content.ListPurposefreebsd-afsPorting AFS to FreeBSDfreebsd-alphaPorting FreeBSD to the Alphafreebsd-docCreating FreeBSD related documentsfreebsd-databaseDiscussing database use and development under
FreeBSDfreebsd-emulationEmulation of other systems such as
Linux/DOS/Windowsfreebsd-fsFilesystemsfreebsd-hackersGeneral technical discussionfreebsd-hardwareGeneral discussion of hardware for running
FreeBSDfreebsd-ipfwTechnical discussion concerning the redesign of the IP
firewall codefreebsd-isdnISDN developersfreebsd-javaJava developers and people porting JDKs to
FreeBSDfreebsd-mobileDiscussions about mobile computingfreebsd-mozillaPorting mozilla to FreeBSDfreebsd-netNetworking discussion and TCP/IP/source codefreebsd-platformsConcerning ports to non-Intel architecture
platformsfreebsd-portsDiscussion of the ports collectionfreebsd-scsiThe SCSI subsystemfreebsd-securitySecurity issuesfreebsd-smallUsing FreeBSD in embedded applicationsfreebsd-smpDesign discussions for [A]Symmetric
MultiProcessingfreebsd-sparcPorting FreeBSD to Sparc systemsfreebsd-tokenringSupport Token Ring in FreeBSDLimited lists: The following lists require
- approval from core@FreeBSD.ORG to join, though anyone
+ approval from core@FreeBSD.org to join, though anyone
is free to send messages to them which fall within the scope of their
charters. It is also a good idea establish a presence in the
technical lists before asking to join one of these limited
lists.ListPurposefreebsd-adminAdministrative issuesfreebsd-archArchitecture and design discussionsfreebsd-coreFreeBSD core teamfreebsd-hubsPeople running mirror sites (infrastructural
support)freebsd-installInstallation developmentfreebsd-security-notificationsSecurity notificationsfreebsd-user-groupsUser group coordinationCVS lists: The following lists are for people
interested in seeing the log messages for changes to various areas of
the source tree. They are Read-Only lists and
should not have mail sent to them.ListSource areaArea Description (source for)cvs-all/usr/srcAll changes to the tree (superset)How to subscribeAll mailing lists live on FreeBSD.ORG, so to post to a given list you
+ role="fqdn">FreeBSD.org, so to post to a given list you
simply mail to
- <listname@FreeBSD.ORG>. It will then
+ <listname@FreeBSD.org>. It will then
be redistributed to mailing list members world-wide.To subscribe to a list, send mail to &a.majordomo; and include
subscribe <listname> [<optional address>]
in the body of your message. For example, to subscribe yourself to
freebsd-announce, you'd do:
- &prompt.user; mail majordomo@FreeBSD.ORG
+ &prompt.user; mail majordomo@FreeBSD.org
subscribe freebsd-announce
^DIf you want to subscribe yourself under a different name, or
submit a subscription request for a local mailing list (this is more
efficient if you have several interested parties at one site, and
highly appreciated by us!), you would do something like:
- &prompt.user; mail majordomo@FreeBSD.ORG
+ &prompt.user; mail majordomo@FreeBSD.org
subscribe freebsd-announce local-announce@somesite.com
^DFinally, it is also possible to unsubscribe yourself from a list,
get a list of other list members or see the list of mailing lists
again by sending other types of control messages to majordomo. For a
complete list of available commands, do this:
- &prompt.user; mail majordomo@FreeBSD.ORG
+ &prompt.user; mail majordomo@FreeBSD.org
help
^DAgain, we would like to request that you keep discussion in the
technical mailing lists on a technical track. If you are only
interested in the “high points” then it is suggested that
you join freebsd-announce, which is intended only for infrequent
traffic.List chartersAllFreeBSD mailing lists have certain basic
rules which must be adhered to by anyone using them. Failure to comply
with these guidelines will result in two (2) written warnings from the
FreeBSD Postmaster postmaster@FreeBSD.org, after which,
on a third offense, the poster will removed from all FreeBSD mailing
lists and filtered from further posting to them. We regret that such
rules and measures are necessary at all, but today's Internet is a
pretty harsh environment, it would seem, and many fail to appreciate
just how fragile some of its mechanisms are.Rules of the road:The topic of any posting should adhere to the basic charter of
the list it is posted to, e.g. if the list is about technical
issues then your posting should contain technical discussion.
Ongoing irrelevant chatter or flaming only detracts from the value
of the mailing list for everyone on it and will not be tolerated.
For free-form discussion on no particular topic, the freebsd-chat
freebsd-chat@FreeBSD.org mailing list is freely
available and should be used instead.No posting should be made to more than 2 mailing lists, and
only to 2 when a clear and obvious need to post to both lists
exists. For most lists, there is already a great deal of
subscriber overlap and except for the most esoteric mixes (say
"-stable & -scsi"), there really is no reason to post to more
than one list at a time. If a message is sent to you in such a
way that multiple mailing lists appear on the Cc line then the cc
line should also be trimmed before sending it out again.
You are still responsible for your
own cross-postings, no matter who the originator might have
been.Personal attacks and profanity (in the context of an argument)
are not allowed, and that includes users and developers alike.
Gross breaches of netiquette, like excerpting or reposting private
mail when permission to do so was not and would not be
forthcoming, are frowned upon but not specifically enforced.
However, there are also very few cases where
such content would fit within the charter of a list and it would
therefore probably rate a warning (or ban) on that basis
alone.Advertising of non-FreeBSD related products or services is
strictly prohibited and will result in an immediate ban if it is
clear that the offender is advertising by spam.Individual list charters:FREEBSD-AFSAndrew File SystemThis list is for discussion on porting and using AFS from
CMU/TransarcFREEBSD-ADMINAdministrative issuesThis list is purely for discussion of FreeBSD.org related issues and to
report problems or abuse of project resources. It is a closed
list, though anyone may report a problem (with our systems!) to
it.FREEBSD-ANNOUNCEImportant events / milestonesThis is the mailing list for people interested only in
occasional announcements of significant FreeBSD events. This
includes announcements about snapshots and other releases. It
contains announcements of new FreeBSD capabilities. It may
contain calls for volunteers etc. This is a low volume, strictly
moderated mailing list.FREEBSD-ARCHArchitecture and design
discussionsThis is a moderated list for discussion of FreeBSD
architecture. Messages will mostly be kept technical in nature,
with (rare) exceptions for other messages the moderator deems
need to reach all the subscribers of the list. Examples of
suitable topics;How to re-vamp the build system to have several
customized builds running at the same time.What needs to be fixed with VFS to make Heidemann layers
work.How do we change the device driver interface to be able
to use the ame drivers cleanly on many buses and
architectures?How do I write a network driver?The moderator reserves the right to do minor editing
(spell-checking, grammar correction, trimming) of messages that
are posted to the list. The volume of the list will be kept
low, which may involve having to delay topics until an active
discussion has been resolved.FREEBSD-BUGSBug reportsThis is the mailing list for reporting bugs in FreeBSD
Whenever possible, bugs should be submitted using the
&man.send-pr.1;
command or the WEB
interface to it.FREEBSD-CHATNon technical items related to the FreeBSD
communityThis list contains the overflow from the other lists about
non-technical, social information. It includes discussion about
whether Jordan looks like a toon ferret or not, whether or not
to type in capitals, who is drinking too much coffee, where the
best beer is brewed, who is brewing beer in their basement, and
so on. Occasional announcements of important events (such as
upcoming parties, weddings, births, new jobs, etc) can be made
to the technical lists, but the follow ups should be directed to
this -chat list.FREEBSD-COREFreeBSD core teamThis is an internal mailing list for use by the core
members. Messages can be sent to it when a serious
FreeBSD-related matter requires arbitration or high-level
scrutiny.FREEBSD-CURRENTDiscussions about the use of
FreeBSD-currentThis is the mailing list for users of freebsd-current. It
includes warnings about new features coming out in -current that
will affect the users, and instructions on steps that must be
taken to remain -current. Anyone running “current”
must subscribe to this list. This is a technical mailing list
for which strictly technical content is expected.FREEBSD-CURRENT-DIGESTDiscussions about the use of
FreeBSD-currentThis is the digest version of the freebsd-current mailing
list. The digest consists of all messages sent to
freebsd-current bundled together and mailed out as a single
message. The average digest size is about 40kB. This list is
Read-Only and should not be posted
to.FREEBSD-DOCDocumentation projectThis mailing list is for the discussion of issues and
projects related to the creation of documenation for FreeBSD.
The members of this mailing list are collectively referred to as
“The FreeBSD Documentation Project”. It is an open
list; feel free to join and contribute!FREEBSD-FSFilesystemsDiscussions concerning FreeBSD filesystems. This is a
technical mailing list for which strictly technical content is
expected.FREEBSD-IPFWIP FirewallThis is the forum for technical discussions concerning the
redesign of the IP firewall code in FreeBSD. This is a
technical mailing list for which strictly technical content is
expected.FREEBSD-ISDNISDN CommunicationsThis is the mailing list for people discussing the
development of ISDN support for FreeBSD.FREEBSD-JAVAJava DevelopmentThis is the mailing list for people discussing the
development of significant Java applications for FreeBSD and the
porting and maintenance of JDKs.FREEBSD-HACKERSTechnical discussionsThis is a forum for technical discussions related to
FreeBSD. This is the primary technical mailing list. It is for
individuals actively working on FreeBSD, to bring up problems or
discuss alternative solutions. Individuals interested in
following the technical discussion are also welcome. This is a
technical mailing list for which strictly technical content is
expected.FREEBSD-HACKERS-DIGESTTechnical discussionsThis is the digest version of the freebsd-hackers mailing
list. The digest consists of all messages sent to
freebsd-hackers bundled together and mailed out as a single
message. The average digest size is about 40kB. This list is
Read-Only and should not be posted
to.FREEBSD-HARDWAREGeneral discussion of FreeBSD
hardwareGeneral discussion about the types of hardware that FreeBSD
runs on, various problems and suggestions concerning what to buy
or avoid.FREEBSD-INSTALLInstallation discussionThis mailing list is for discussing FreeBSD installation
development for the future releases and is closed.FREEBSD-ISPIssues for Internet Service
ProvidersThis mailing list is for discussing topics relevant to
Internet Service Providers (ISPs) using FreeBSD. This is a
technical mailing list for which strictly technical content is
expected.FREEBSD-NEWBIESNewbies activities discussionWe cover any of the activities of newbies that are not
already dealt with elsewhere, including: independent learning
and problem solving techniques, finding and using resources and
asking for help elsewhere, how to use mailing lists and which
lists to use, general chat, making mistakes, boasting, sharing
ideas, stories, moral (but not technical) support, and taking an
active part in the FreeBSD community. We take our problems and
support questions to freebsd-questions, and use freebsd-newbies
to meet others who are doing the same things that we do as
newbies.FREEBSD-PLATFORMSPorting to Non-Intel platformsCross-platform FreeBSD issues, general discussion and
proposals for non-Intel FreeBSD ports. This is a technical
mailing list for which strictly technical content is
expected.FREEBSD-POLICYCore team policy decisionsThis is a low volume, read-only mailing list for FreeBSD
Core Team Policy decisions.FREEBSD-PORTSDiscussion of
“ports”Discussions concerning FreeBSD's “ports
collection” (/usr/ports), proposed
ports, modifications to ports collection infrastructure and
general coordination efforts. This is a technical mailing list
for which strictly technical content is expected.FREEBSD-QUESTIONSUser questionsThis is the mailing list for questions about FreeBSD. You
should not send “how to” questions to the technical
lists unless you consider the question to be pretty
technical.FREEBSD-QUESTIONS-DIGESTUser questionsThis is the digest version of the freebsd-questions mailing
list. The digest consists of all messages sent to
freebsd-questions bundled together and mailed out as a single
message. The average digest size is about 40kB.FREEBSD-SCSISCSI subsystemThis is the mailing list for people working on the scsi
subsystem for FreeBSD. This is a technical mailing list for
which strictly technical content is expected.FREEBSD-SECURITYSecurity issuesFreeBSD computer security issues (DES, Kerberos, known
security holes and fixes, etc). This is a technical mailing
list for which strictly technical content is expected.FREEBSD-SECURITY-NOTIFICATIONSSecurity Notifications
Notifications of FreeBSD security problems and fixes. This is
not a discussion list. The discussion list is
FreeBSD-security.FREEBSD-SMALLThis list discusses topics related to unusually small and
embedded FreeBSD installations. This is a technical mailing
list for which strictly technical content is expected.FREEBSD-STABLEDiscussions about the use of
FreeBSD-stableThis is the mailing list for users of freebsd-stable. It
includes warnings about new features coming out in -stable that
will affect the users, and instructions on steps that must be
taken to remain -stable. Anyone running “stable”
should subscribe to this list. This is a technical mailing list
for which strictly technical content is expected.FREEBSD-USER-GROUPSUser Group Coordination ListThis is the mailing list for the coordinators from each of
the local area Users Groups to discuss matters with each other
and a designated individual from the Core Team. This mail list
should be limited to meeting synopsis and coordination of
projects that span User Groups. It is a closed list.Usenet newsgroupsIn addition to two FreeBSD specific newsgroups, there are many
others in which FreeBSD is discussed or are otherwise relevant to
FreeBSD users. Keyword
searchable archives are available for some of these newsgroups
from courtesy of Warren Toomey wkt@cs.adfa.oz.au.BSD specific newsgroupscomp.unix.bsd.freebsd.announcecomp.unix.bsd.freebsd.miscOther Unix newsgroups of interestcomp.unixcomp.unix.questionscomp.unix.admincomp.unix.programmercomp.unix.shellcomp.unix.user-friendlycomp.security.unixcomp.sources.unixcomp.unix.advocacycomp.unix.misccomp.bugs.4bsdcomp.bugs.4bsd.ucb-fixescomp.unix.bsdX Window Systemcomp.windows.x.i386unixcomp.windows.xcomp.windows.x.appscomp.windows.x.announcecomp.windows.x.intrinsicscomp.windows.x.motifcomp.windows.x.pexcomp.emulators.ms-windows.wineWorld Wide Web servershttp://www.FreeBSD.ORG/
+ url="http://www.FreeBSD.org/">http://www.FreeBSD.org/
— Central Server.http://www.au.FreeBSD.org/FreeBSD/ — Australia/1.http://www2.au.FreeBSD.org/FreeBSD/ — Australia/2.http://www3.au.FreeBSD.org/FreeBSD/ — Australia/3.http://www.br.FreeBSD.org/www.freebsd.org/ — Brazil/1.
+ url="http://www.br.FreeBSD.org/www.FreeBSD.org/">http://www.br.FreeBSD.org/www.FreeBSD.org/ — Brazil/1.
http://www2.br.FreeBSD.org/www.freebsd.org/ — Brazil/2.
+ url="http://www2.br.FreeBSD.org/www.FreeBSD.org/">http://www2.br.FreeBSD.org/www.FreeBSD.org/ — Brazil/2.
http://www3.br.FreeBSD.org/ — Brazil/3.http://www.bg.FreeBSD.org/ — Bulgaria.http://www.ca.FreeBSD.org/ — Canada/1.http://FreeBSD.kawartha.com/ — Canada/2.http://www.dk.FreeBSD.org/ — Denmark.http://www.ee.FreeBSD.org/ — Estonia.http://www.fi.FreeBSD.org/ — Finland/1.http://www2.fi.FreeBSD.org/ — Finland/2.http://www.fr.FreeBSD.org/ — France.http://www.de.FreeBSD.org/ — Germany/1.http://www1.de.FreeBSD.org/ — Germany/2.http://www.de.FreeBSD.org/ — Germany/3.http://www.hu.FreeBSD.org/ — Hungary.http://www.is.FreeBSD.org/ — Iceland.http://www.ie.FreeBSD.org/ — Ireland.http://www.jp.FreeBSD.org/www.freebsd.org/ — Japan.
+ url="http://www.jp.FreeBSD.org/www.FreeBSD.org/">http://www.jp.FreeBSD.org/www.FreeBSD.org/ — Japan.
http://www.kr.FreeBSD.org/ — Korea.http://rama.asiapac.net/freebsd/ — Malaysia.http://www.nl.FreeBSD.org/ — Netherlands.http://www.no.FreeBSD.org/ — Norway.http://www.pt.FreeBSD.org/ — Portugal/1.http://www2.pt.FreeBSD.org/ — Portugal/2.http://www3.pt.FreeBSD.org/ — Portugal/3.http://www.ro.FreeBSD.org/ — Romania.http://www.ru.FreeBSD.org/ — Russia/1.http://www2.ru.FreeBSD.org/ — Russia/2.http://www3.ru.FreeBSD.org/ — Russia/3.http://www4.ru.FreeBSD.org/ — Russia/4.http://www.sk.FreeBSD.org/ — Slovak Republic.http://www.si.FreeBSD.org/ — Slovenia.http://www.es.FreeBSD.org/ — Spain.http://www.za.FreeBSD.org/ — South Africa/1.http://www2.za.FreeBSD.org/ — South Africa/2.http://www.se.FreeBSD.org/www.freebsd.org/ — Sweden.
+ url="http://www.se.FreeBSD.org/www.FreeBSD.org/">http://www.se.FreeBSD.org/www.FreeBSD.org/ — Sweden.
http://www.tr.FreeBSD.org/ — Turkey.http://www.ua.FreeBSD.org/ — Ukraine/1.http://www2.ua.FreeBSD.org/ — Ukraine/2.http://www.uk.FreeBSD.org/ — United Kingdom.http://freebsd.advansys.net/ — USA/Indiana.http://www6.FreeBSD.org/ — USA/Oregon.http://www2.FreeBSD.org/ — USA/Texas.Email AddressesThe following user groups provide FreeBSD related email addresses
for their members. The listed administrator reserves the right to
revoke the address if it is abused in any way.DomainFacilitiesUser GroupAdministratorukug.uk.FreeBSD.orgForwarding onlyfreebsd-users@uk.FreeBSD.orgJosef L. Karthauser
joe@uk.FreeBSD.orgShell AccountsThe following user groups provide shell accounts for people who are
actively supporting the FreeBSD project. The listed administrator
reserves the right to cancel the account if it is abused in any
way.HostAccessFacilitiesAdministratorstorm.uk.FreeBSD.orgssh onlyRead-only cvs, personal webspace, email&a.brian
diff --git a/en_US.ISO8859-1/books/handbook/install/chapter.sgml b/en_US.ISO8859-1/books/handbook/install/chapter.sgml
index a6df6724f4..dd4f0a4930 100644
--- a/en_US.ISO8859-1/books/handbook/install/chapter.sgml
+++ b/en_US.ISO8859-1/books/handbook/install/chapter.sgml
@@ -1,1307 +1,1307 @@
Installing FreeBSDSo, you would like to try out FreeBSD on your system? This section is
a quick-start guide for what you need to do. FreeBSD can be installed
from a variety of media including CD-ROM, floppy disk, magnetic tape, an
MS-DOS partition and, if you have a network connection, via anonymous ftp
or NFS.Regardless of the installation media you choose, you can get started
by creating the installation disks as described
below. Booting your computer into the FreeBSD installer, even if you
are not planning on installing FreeBSD right away, will provide important
information about compatibility between FreeBSD and your hardware which
may, in turn, dictate which installation options are even possible. It
can also provide early clues to any compatibility problems which could
prevent FreeBSD running on your system at all.If you plan on installing via anonymous FTP then the installation
floppies are all you need to download and create—the installation
program itself will handle any further required downloading directly
(using an ethernet connection, a modem and ppp dialip #, etc).For more information on obtaining the latest FreeBSD distributions,
please see Obtaining FreeBSD in the
Appendix.So, to get the show on the road, follow these steps:Review the supported
configurations section of this installation guide to be sure
that your hardware is supported by FreeBSD. It may be helpful to make
a list of any special cards you have installed, such as SCSI
controllers, Ethernet adapters or sound cards. This list should
include relevant configuration parameters such as interrupts (IRQ) and
IO port addresses.If you are installing FreeBSD from CDROM media then you have
several different installation options:If the CD has been mastered with El Torrito boot support and
your system supports direct booting from CDROM (and many older
systems do not), simply insert the CD into
the drive and boot directly from it.If you are running DOS and have the proper drivers to access
your CD, run the install.bat script provided on the CD. This will
attempt to boot into the FreeBSD installation straight from
DOS.You must do this from actual DOS and not a Windows DOS
box.If you also want to install FreeBSD from your DOS partition
(perhaps because your CDROM drive is completely unsupported by
FreeBSD) then run the setup program first to copy the appropriate
files from the CD to your DOS partition, afterwards running
install.If either of the two proceeding methods work then you can
simply skip the rest of this section, otherwise your final option
is to create a set of boot floppies from the
floppies\kern.flp and
floppies\mfsroot.flp images—proceed to
step 4 for instructions on how to do this.If you do not have a CDROM distribution then simply read the installation
+ url="ftp://ftp.FreeBSD.org/pub/FreeBSD/&rel.current;-RELEASE/floppies/README.TXT">installation
boot image information to find out what files you need to
download first.Make the installation boot disks from the image files:If you are using MS-DOS then download fdimage.exe
+ URL="ftp://ftp.FreeBSD.org/pub/FreeBSD/tools/fdimage.exe">fdimage.exe
or get it from tools\fdimage.exe on the CDROM
and then run it like so:E:\>tools\fdimage floppies\kern.flp a:The fdimage program will format the
A: drive and then copy the
kern.flp image onto it (assuming that you are
at the top level of a FreeBSD distribution and the floppy images
live in the floppies subdirectory, as is
typically the case).If you are using a UNIX system to create the floppy
images:&prompt.root; dd if=kern.flp of=disk_devicedisk_device is the
/dev entry for the floppy drive. On FreeBSD
systems, this is /dev/rfd0 for the
A: drive and
/dev/rfd1 for the B:
drive.With the kern.flp in the
A: drive, reboot your computer. The next
request you should get is for the mfsroot.flp
floppy, after which the installation will proceed normally.If you do not type anything at the boot
prompt which appears during this process, FreeBSD will automatically
boot with its default configuration after a delay of about five
seconds. As FreeBSD boots, it probes your computer to determine what
hardware is installed. The results of this probing is displayed on
the screen.When the booting process is finished, The main FreeBSD
installation menu will be displayed.If something goes wrong…Due to limitations of the PC architecture, it is impossible for
probing to be 100 percent reliable. In the event that your hardware is
incorrectly identified, or that the probing causes your computer to lock
up, first check the supported
configurations section of this installation guide to be sure that
your hardware is indeed supported by FreeBSD.If your hardware is supported, reset the computer and when the visual
kernel configuration choice is presented, take it. This puts FreeBSD into
a configuration mode where you can supply hints about your hardware. The
FreeBSD kernel on the installation disk is configured assuming that most
hardware devices are in their factory default configuration in terms of
IRQs, IO addresses and DMA channels. If your hardware has been
reconfigured, you will most likely need to use the configuration editor to
tell FreeBSD where things are.It is also possible that a probe for a device not present will cause a
later probe for another device that is present to fail. In that case, the
probes for the conflicting driver(s) should be disabled.Do not disable any device you will need during installation, such as
your screen (sc0). If the installation wedges
or fails mysteriously after leaving the configuration editor, you have
probably removed or changed something that you should not have. Simply
reboot and try again.In the configuration mode, you can:List the device drivers installed in the kernel.Disable device drivers for hardware not present in your
system.Change the IRQ, DRQ, and IO port addresses used by a device
driver.After adjusting the kernel to match how you have your hardware
configured, type Q to continue booting with the new
settings.After FreeBSD has been installed, changes made in the configuration
mode will be permanent so you do not have to reconfigure every time you
boot. Even so, it is likely that you will want to build a custom kernel
to optimize the performance of your system. See Kernel configuration for more information
on creating custom kernels.Supported ConfigurationsFreeBSD currently runs on a wide variety of ISA, VLB, EISA and PCI
bus based PC's, ranging from 386sx to Pentium class machines (though the
386sx is not recommended). Support for generic IDE or ESDI drive
configurations, various SCSI controller, network and serial cards is
also provided.A minimum of four megabytes of RAM is required to run FreeBSD. To
run the X Window System, eight megabytes of RAM is the recommended
minimum.Following is a list of all disk controllers and Ethernet cards
currently known to work with FreeBSD. Other configurations may very
well work, and we have simply not received any indication of
this.Disk ControllersWD1003 (any generic MFM/RLL)WD1007 (any generic IDE/ESDI)IDEATAAdaptec 1535 ISA SCSI controllersAdaptec 154x series ISA SCSI controllersAdaptec 174x series EISA SCSI controller in standard and
enhanced mode.Adaptec 274X/284X/2920C/2930U2/294x/2950/3940/3950
(Narrow/Wide/Twin) series EISA/VLB/PCI SCSI controllers.Adaptec AIC7850, AIC7860, AIC7880, AIC789x, on-board SCSI
controllers.AdvanSys SCSI controllers (all models).BusLogic MultiMaster controllers:BusLogic/Mylex "Flashpoint" adapters are NOT yet
supported.BusLogic MultiMaster "W" Series Host Adapters:BT-948BT-958BT-958DBusLogic MultiMaster "C" Series Host Adapters:BT-946CBT-956CBT-956CDBT-445CBT-747CBT-757CBT-757CDBT-545CBT-540CFBusLogic MultiMaster "S" Series Host Adapters:BT-445SBT-747SBT-747DBT-757SBT-757DBT-545SBT-542DBT-742ABT-542BBusLogic MultiMaster "A" Series Host Adapters:BT-742ABT-542BAMI FastDisk controllers that are true BusLogic
MultiMaster clones are also supported.DPT SmartCACHE Plus, SmartCACHE III, SmartRAID III, SmartCACHE
IV and SmartRAID IV SCSI/RAID controllers are supported. The DPT
SmartRAID/CACHE V is not yet supported.Compaq Intelligent Disk Array Controllers: IDA, IDA-2, IAES,
SMART, SMART-2/E, Smart-2/P, SMART-2SL, Smart Array 3200,
Smart Array 3100ES and Smart Array 221.SymBios (formerly NCR) 53C810, 53C810a, 53C815, 53C820,
53C825a, 53C860, 53C875, 53C875j, 53C885, 53C895 and 53C896 PCI
SCSI controllers:ASUS SC-200Data Technology DTC3130 (all variants)Diamond FirePort (all)NCR cards (all)Symbios cards (all)Tekram DC390W, 390U and 390FTyan S1365QLogic 1020, 1040, 1040B, 1080, 1240 and 2100 SCSI and Fibre
Channel AdaptersDTC 3290 EISA SCSI controller in 1542 emulation mode.With all supported SCSI controllers, full support is provided for
SCSI-I & SCSI-II peripherals, including hard disks, optical disks,
tape drives (including DAT and 8mm Exabyte), medium changers,
processor target devices and CDROM drives. WORM devices that support
CDROM commands are supported for read-only access by the CDROM driver.
WORM/CD-R/CD-RW writing support is provided by cdrecord, which is in
the ports tree.The following CD-ROM type systems are supported at this
time:SoundBlaster SCSI and ProAudio Spectrum SCSI
(cd)Mitsumi (all models) proprietary interface
(mcd)Matsushita/Panasonic (Creative) CR-562/CR-563 proprietary
interface (matcd)Sony proprietary interface (scd)ATAPI IDE interface (wcd)The following drivers were supported under the old SCSI subsystem,
but are NOT YET supported under the new CAM SCSI subsystem:Tekram DC390 and DC390T controllers (maybe other cards based
on the AMD 53c974 as well).NCR5380/NCR53400 ("ProAudio Spectrum") SCSI controller.UltraStor 14F, 24F and 34F SCSI controllers.Seagate ST01/02 SCSI controllers.Future Domain 8xx/950 series SCSI controllers.WD7000 SCSI controller.Adaptec 1510 series ISA SCSI controllers (not for bootable
devices)Adaptec 152x series ISA SCSI controllersAdaptec AIC-6260 and AIC-6360 based boards, which includes the
AHA-152x and SoundBlaster SCSI cards.Ethernet cardsAllied-Telesis AT1700 and RE2000 cardsSMC Elite 16 WD8013 Ethernet interface, and most other
WD8003E, WD8003EBT, WD8003W, WD8013W, WD8003S, WD8003SBT and
WD8013EBT based clones. SMC Elite Ultra and 9432TX based cards
are also supported.DEC EtherWORKS III NICs (DE203, DE204, and DE205)DEC EtherWORKS II NICs (DE200, DE201, DE202, and DE422)DEC DC21040/DC21041/DC21140 based NICs:ASUS PCI-L101-TBAccton ENI1203Cogent EM960PCICompex CPXPCI/32CD-Link DE-530DEC DE435DEC DE450Danpex EN-9400P3JCIS Condor JC1260Kingston KNE100TXLinksys EtherPCIMylex LNP101SMC EtherPower 10/100 (Model 9332)SMC EtherPower (Model 8432)SMC EtherPower (2)Zynx ZX314Zynx ZX342DEC FDDI (DEFPA/DEFEA) NICsFujitsu FMV-181 and FMV-182Fujitsu MB86960A/MB86965AIntel EtherExpressIntel EtherExpress Pro/100B 100Mbit.Isolan AT 4141-0 (16 bit)Isolink 4110 (8 bit)Lucent WaveLAN wireless networking interface.Novell NE1000, NE2000, and NE2100 ethernet interface.3Com 3C501 cards3Com 3C503 Etherlink II3Com 3c505 Etherlink/+3Com 3C507 Etherlink 16/TP3Com 3C509, 3C579, 3C589 (PCMCIA) Etherlink III3Com 3C590, 3C595 Etherlink III3Com 3C90x cards.HP PC Lan Plus (27247B and 27252A)Toshiba ethernet cardsPCMCIA ethernet cards from IBM and National Semiconductor are
also supported.FreeBSD does not currently support PnP (plug-n-play) features
present on some ethernet cards. If your card has PnP and is giving
you problems, try disabling its PnP features.Miscellaneous devicesAST 4 port serial card using shared IRQ.ARNET 8 port serial card using shared IRQ.BOCA IOAT66 6 port serial card using shared IRQ.BOCA 2016 16 port serial card using shared IRQ.Cyclades Cyclom-y Serial Board.STB 4 port card using shared IRQ.SDL Communications Riscom/8 Serial Board.SDL Communications RISCom/N2 and N2pci sync serial
cards.Digiboard Sync/570i high-speed sync serial card.Decision-Computer Intl. “Eight-Serial” 8 port
serial cards using shared IRQ.Adlib, SoundBlaster, SoundBlaster Pro, ProAudioSpectrum,
Gravis UltraSound, Gravis UltraSound MAX and Roland MPU-401 sound
cards.Matrox Meteor video frame grabber.Creative Labs Video spigot frame grabber.Omnimedia Talisman frame grabber.Brooktree BT848 chip based frame grabbers.X-10 power controllers.PC joystick and speaker.FreeBSD does not currently support IBM's microchannel (MCA)
bus.Preparing for the InstallationThere are a number of different methods by which FreeBSD can be
installed. The following describes what preparation needs to be done
for each type.Before installing from CDROMIf your CDROM is of an unsupported type, then please skip to MS-DOS Preparation.There is not a lot of preparatory work that needs to be done to
successfully install from one of Walnut Creek's FreeBSD CDROMs (other
CDROM distributions may work as well, though we cannot say for certain
as we have no hand or say in how they are created). You can either
boot into the CD installation directly from DOS using Walnut Creek's
supplied install.bat batch file or you can make
boot floppies with the makeflp.bat command.For the easiest interface of all (from DOS), type
view. This will bring up a DOS menu utility that
leads you through all the available options.If you are creating the boot floppies from a UNIX machine, see
the beginning of this guide for
examples of how to create the boot floppies.Once you have booted from DOS or floppy, you should then be able
to select CDROM as the media type in the Media menu and load the
entire distribution from CDROM. No other types of installation media
should be required.After your system is fully installed and you have rebooted from
the hard disk, you can mount the CDROM at any time by typing:
mount /cdromBefore removing the CD again, also note that it is necessary to
first type: umount /cdrom. Do not just remove it
from the drive!Before invoking the installation, be sure that the CDROM is in
the drive so that the install probe can find it. This is also true
if you wish the CDROM to be added to the default system
configuration automatically during the install (whether or not you
actually use it as the installation media).Finally, if you would like people to be able to FTP install
FreeBSD directly from the CDROM in your machine, you will find it
quite easy. After the machine is fully installed, you simply need to
add the following line to the password file (using the vipw
command):
ftp:*:99:99::0:0:FTP:/cdrom:/nonexistentAnyone with network connectivity to your machine (and permission
to log into it) can now chose a Media type of FTP and type in:
ftp://your machine
after picking “Other” in the ftp sites menu.Before installing from FloppyIf you must install from floppy disks, either due to unsupported
hardware or simply because you enjoy doing things the hard way, you
must first prepare some floppies for the install.You will need, at minimum, as many 1.44MB or 1.2MB floppies as it
takes to hold all files in the bin (binary distribution) directory.
If you are preparing these floppies under DOS, then THESE floppies
must be formatted using the MS-DOS FORMAT
command. If you are using Windows, use the Windows File Manager
format command.Do not trust Factory Preformatted floppies!
Format them again yourself, just to make sure. Many problems reported
by our users in the past have resulted from the use of improperly
formatted media, which is why I am taking such special care to mention
it here!If you are creating the floppies from another FreeBSD machine, a
format is still not a bad idea though you do not need to put a DOS
filesystem on each floppy. You can use the
disklabel and newfs commands to
put a UFS filesystem on them instead, as the following sequence of
commands (for a 3.5" 1.44MB floppy disk) illustrates:&prompt.root; fdformat -f 1440 fd0.1440
&prompt.root; disklabel -w -r fd0.1440 floppy3
&prompt.root; newfs -t 2 -u 18 -l 1 -i 65536 /dev/rfd0Use fd0.1200 and floppy5
for 5.25" 1.2MB disks.Then you can mount and write to them like any other file
system.After you have formatted the floppies, you will need to copy the
files onto them. The distribution files are split into chunks
conveniently sized so that 5 of them will fit on a conventional 1.44MB
floppy. Go through all your floppies, packing as many files as will
fit on each one, until you have got all the distributions you want
packed up in this fashion. Each distribution should go into a
subdirectory on the floppy, e.g.: a:\bin\bin.aa,
a:\bin\bin.ab, and so on.Once you come to the Media screen of the install, select
“Floppy” and you will be prompted for the rest.Before installing from a MS-DOS partitionTo prepare for installation from an MS-DOS partition, copy the
files from the distribution into a directory called
c:\freebsd. The directory tree structure of the
CDROM must be partially reproduced within this directory so we suggest
using the DOS xcopy command. For example, to
prepare for a minimal installation of FreeBSD:C:\>md c:\freebsdC:\>xcopy /s e:\bin c:\freebsd\bin\C:\>xcopy /s e:\manpages c:\freebsd\manpages\Assuming that C: is where you have free
space and E: is where your CDROM is
mounted.For as many DISTS you wish to install from MS-DOS
(and you have free space for), install each one under
c:\freebsd — the BIN dist
is only the minimal requirement.Before installing from QIC/SCSI TapeInstalling from tape is probably the easiest method, short of an
on-line install using FTP or a CDROM install. The installation
program expects the files to be simply tar'ed onto the tape, so after
getting all of the files for distribution you are interested in,
simply tar them onto the tape with a command like:&prompt.root; cd /freebsd/distdir
&prompt.root; tar cvf /dev/rwt0 dist1 ... dist2When you go to do the installation, you should also make sure that
you leave enough room in some temporary directory (which you will be
allowed to choose) to accommodate the full
contents of the tape you have created. Due to the non-random access
nature of tapes, this method of installation requires quite a bit of
temporary storage. You should expect to require as much temporary
storage as you have stuff written on tape.When going to do the installation, the tape must be in the drive
before booting from the boot floppy. The
installation probe may otherwise fail to find it.Before installing over a networkYou can do network installations over 3 types of communications
links:Serial portSLIP or PPPParallel portPLIP (laplink cable)EthernetA standard ethernet controller (includes some
PCMCIA).SLIP support is rather primitive, and limited primarily to
hard-wired links, such as a serial cable running between a laptop
computer and another computer. The link should be hard-wired as the
SLIP installation does not currently offer a dialing capability; that
facility is provided with the PPP utility, which should be used in
preference to SLIP whenever possible.If you are using a modem, then PPP is almost certainly your only
choice. Make sure that you have your service provider's information
handy as you will need to know it fairly soon in the installation
process. You will need to know how to dial your ISP using the
“AT commands” specific to your modem, as the PPP dialer
provides only a very simple terminal emulator. If you are using PAP or
CHAP, you will need to type the necessary set
authname and set authkey commands
before typing term. Refer to the user-ppp handbook and FAQ entries for further
information. If you have problems, logging can be directed to the
screen using the command set log local ....If a hard-wired connection to another FreeBSD (2.0R or later)
machine is available, you might also consider installing over a
“laplink” parallel port cable. The data rate over the
parallel port is much higher than what is typically possible over a
serial line (up to 50k/sec), thus resulting in a quicker
installation.Finally, for the fastest possible network installation, an
ethernet adaptor is always a good choice! FreeBSD supports most common
PC ethernet cards, a table of supported cards (and their required
settings) is provided in Supported
Hardware. If you are using one of the supported PCMCIA
ethernet cards, also be sure that it is plugged in
before the laptop is powered on! FreeBSD does
not, unfortunately, currently support hot insertion of PCMCIA cards
during installation.You will also need to know your IP address on the network, the
netmask value for your address class, and the name of your machine.
Your system administrator can tell you which values to use for your
particular network setup. If you will be referring to other hosts by
name rather than IP address, you will also need a name server and
possibly the address of a gateway (if you are using PPP, it is your
provider's IP address) to use in talking to it. If you do not know
the answers to all or most of these questions, then you should really
probably talk to your system administrator first
before trying this type of installation.Once you have a network link of some sort working, the
installation can continue over NFS or FTP.Preparing for NFS installationNFS installation is fairly straight-forward: Simply copy the
FreeBSD distribution files you want onto a server somewhere and then
point the NFS media selection at it.If this server supports only “privileged port”
access (as is generally the default for Sun workstations), you will
need to set this option in the Options menu before installation can
proceed.If you have a poor quality ethernet card which suffers from very
slow transfer rates, you may also wish to toggle the appropriate
Options flag.In order for NFS installation to work, the server must support
subdir mounts, e.g., if your FreeBSD &rel.current; distribution
directory lives on:
ziggy:/usr/archive/stuff/FreeBSD Then
ziggy will have to allow the direct mounting of
/usr/archive/stuff/FreeBSD, not just
/usr or
/usr/archive/stuff.In FreeBSD's /etc/exports file, this is
controlled by the option. Other NFS
servers may have different conventions. If you are getting
Permission Denied messages from the server
then it is likely that you do not have this enabled properly.Preparing for FTP InstallationFTP installation may be done from any mirror site containing a
reasonably up-to-date version of FreeBSD &rel.current;. A full menu
of reasonable choices from almost anywhere in the world is provided
by the FTP site menu.If you are installing from some other FTP site not listed in
this menu, or you are having troubles getting your name server
configured properly, you can also specify your own URL by selecting
the “Other” choice in that menu. A URL can also be a
direct IP address, so the following would work in the absence of a
name server:ftp://165.113.121.81/pub/FreeBSD/&rel.current;-RELEASEThere are two FTP installation modes you can use:FTP ActiveFor all FTP transfers, use “Active” mode.
This will not work through firewalls, but will often work with
older ftp servers that do not support passive mode. If your
connection hangs with passive mode (the default), try
active!FTP PassiveFor all FTP transfers, use “Passive” mode.
This allows the user to pass through firewalls that do not
allow incoming connections on random port addresses.Active and passive modes are not the same as a
“proxy” connection, where a proxy FTP server is
listening and forwarding FTP requests!For a proxy FTP server, you should usually give name of the
server you really want as a part of the username, after an @-sign.
The proxy server then 'fakes' the real server. An example: Say you
want to install from ftp.FreeBSD.org,
using the proxy FTP server foo.bar.com,
listening on port 1234.In this case, you go to the options menu, set the FTP username
to ftp@ftp.FreeBSD.org, and the password to your e-mail address. As
your installation media, you specify FTP (or passive FTP, if the
proxy support it), and the URL
ftp://foo.bar.com:1234/pub/FreeBSD /pub/FreeBSD from ftp.FreeBSD.org is proxied under foo.bar.com, allowing you to install from
that machine (which fetch the files from
ftp.FreeBSD.org as your installation
requests them).Installing FreeBSDOnce you have taken note of the appropriate preinstallation steps,
you should be able to install FreeBSD without any further
trouble.Should this not be true, then you may wish to go back and re-read
the relevant preparation section above for the installation media type
you are trying to use, perhaps there is a helpful hint there that you
missed the first time? If you are having hardware trouble, or FreeBSD
refuses to boot at all, read the Hardware Guide provided on the boot
floppy for a list of possible solutions.The FreeBSD boot floppies contain all the on-line documentation you
should need to be able to navigate through an installation and if it
does not then we would like to know what you found most confusing. Send
your comments to the &a.doc;. It is the objective of the FreeBSD
installation program (sysinstall) to be self-documenting enough that
painful “step-by-step” guides are no longer necessary. It
may take us a little while to reach that objective, but that is the
objective!Meanwhile, you may also find the following “typical
installation sequence” to be helpful:Boot the kern.flp floppy and, when asked,
remove it and insert the mfsroot.flp floppy and
hit return. After a boot sequence which can take anywhere from 30
seconds to 3 minutes, depending on your hardware, you should be
presented with a menu of initial choices. If the
kern.flp floppy does not boot at all, or the
boot hangs at some stage, go read the Q&A section of the
Hardware Guide for possible causes.Press F1. You should see some basic usage instructions on the
menu system and general navigation. If you have not used this menu
system before then please read this
thoroughly!Select the Options item and set any special preferences you may
have.Select a Novice, Custom or Express install, depending on whether
or not you would like the installation to help you through a typical
installation, give you a high degree of control over each step of
the installation or simply whizz through it (using reasonable
defaults when possible) as fast as possible. If you have never used
FreeBSD before then the Novice installation method is most
recommended.The final configuration menu choice allows you to further
configure your FreeBSD installation by giving you menu-driven access
to various system defaults. Some items, like networking, may be
especially important if you did a CDROM/Tape/Floppy installation and
have not yet configured your network interfaces (assuming you have
any). Properly configuring such interfaces here will allow FreeBSD
to come up on the network when you first reboot from the hard
disk.MS-DOS User's Questions and AnswersMany FreeBSD users wish to install FreeBSD on PCs inhabited by
MS-DOS. Here are some commonly asked questions about installing FreeBSD
on such systems.Help! I have no space! Do I need to delete everything
first?If your machine is already running MS-DOS and has little or no free
space available for FreeBSD's installation, all is not lost! You may
find the FIPS utility, provided in the tools
directory on the FreeBSD CDROM or on the various FreeBSD ftp sites, to
be quite useful.FIPS allows you to split an existing MS-DOS partition into two
pieces, preserving the original partition and allowing you to install
onto the second free piece. You first defragment your MS-DOS partition,
using the DOS 6.xx DEFRAG utility or the Norton Disk tools, then run
FIPS. It will prompt you for the rest of the information it needs.
Afterwards, you can reboot and install FreeBSD on the new free slice.
See the Distributions menu for an estimation of how
much free space you will need for the kind of installation you
want.Can I use compressed MS-DOS filesystems from
FreeBSD?No. If you are using a utility such as Stacker(tm) or
DoubleSpace(tm), FreeBSD will only be able to use whatever portion of
the filesystem you leave uncompressed. The rest of the filesystem will
show up as one large file (the stacked/dblspaced file!). Do
not remove that file! You will probably regret it
greatly!It is probably better to create another uncompressed MS-DOS primary
partition and use this for communications between MS-DOS and
FreeBSD.Can I mount my MS-DOS extended
partitions?Yes. DOS extended partitions are mapped in at the end of the other
“slices” in FreeBSD, e.g. your D:
drive might be /dev/da0s5, your
E: drive /dev/da0s6, and
so on. This example assumes, of course, that your extended partition is
on SCSI drive 0. For IDE drives, substitute wd for
da appropriately. You otherwise mount extended
partitions exactly like you would mount any other DOS drive,
e.g.:&prompt.root; mount -t msdos /dev/da0s5 /dos_d
diff --git a/en_US.ISO8859-1/books/handbook/mail/chapter.sgml b/en_US.ISO8859-1/books/handbook/mail/chapter.sgml
index b23aeb0078..8c7df7d362 100644
--- a/en_US.ISO8859-1/books/handbook/mail/chapter.sgml
+++ b/en_US.ISO8859-1/books/handbook/mail/chapter.sgml
@@ -1,567 +1,567 @@
Electronic MailContributed by &a.wlloyd;.Electronic Mail configuration is the subject of many System Administration books. If you plan
on doing anything beyond setting up one mailhost for your network, you
need industrial strength help.Some parts of E-Mail configuration are controlled in the Domain Name
System (DNS). If you are going to run your own own DNS server check out
/etc/namedb and man -k named for
more information.Basic InformationThese are the major programs involved in an E-Mail exchange. A
“mailhost” is a server that is responsible for delivering
and receiving all email for your host, and possibly your network.User programThis is a program like elm,
pine, mail, or
something more sophisticated like a WWW browser. This program will
simply pass off all e-mail transactions to the local
“mailhost” , either by calling sendmail
or delivering it over TCP.Mailhost Server DaemonUsually this program is sendmail or
smail running in the background. Turn it off or
change the command line options in /etc/rc.conf
(or, prior to FreeBSD 2.2.2, /etc/sysconfig). It
is best to leave it on, unless you have a specific reason to want it
off. Example: You are building a Firewall.You should be aware that sendmail is a
potential weak link in a secure site. Some versions of
sendmail have known security problems.sendmail does two jobs. It looks after
delivering and receiving mail.If sendmail needs to deliver mail off your site
it will look up in the DNS to determine the actual host that will
receive mail for the destination.If it is acting as a delivery agent sendmail
will take the message from the local queue and deliver it across the
Internet to another sendmail on the receivers computer.DNS — Name ServiceThe Domain Name System and its daemon named,
contain the database mapping hostname to IP address, and hostname to
mailhost. The IP address is specified in an A record. The MX record
specifies the mailhost that will receive mail for you. If you do not
have a MX record mail for your hostname, the mail will be delivered to
your host directly.Unless you are running your own DNS server, you will not be able
to change any information in the DNS yourself. If you are using an
Internet Provider, speak to them.POP ServersThis program gets the mail from your mailbox and gives it to your
browser. If you want to run a POP server on your computer, you will
need to do 2 things.Get pop software from the Ports collection that can be
found in /usr/ports or packages collection.
This handbook section has a complete reference on the Ports system.Modify /etc/inetd.conf to load the POP
server.The pop program will have instructions with it. Read them.ConfigurationBasicAs your FreeBSD system comes “out of the box”[TM], you
should be able to send E-mail to external hosts as long as you have
/etc/resolv.conf setup or are running a name
server. If you want to have mail for your host delivered to your
specific host,there are two methods:Run a name server (man -k named) and have
your own domain smallminingco.com
Get mail delivered to the current DNS name for your host. Ie:
dorm6.ahouse.school.edu No matter what option you choose, to have mail delivered directly
to your host, you must be a full Internet host. You must have a
permanent IP address. IE: NO dynamic PPP. If you are behind a
firewall, the firewall must be passing on smtp traffic to you. From
/etc/services:
smtp 25/tcp mail #Simple Mail TransferIf you want to receive mail at your host itself, you must make
sure that the DNS MX entry points to your host address, or there is no
MX entry for your DNS name.Try this:&prompt.root; hostname
-newbsdbox.freebsd.org
-&prompt.root; host newbsdbox.freebsd.org
-newbsdbox.freebsd.org has address 204.216.27.xx
+newbsdbox.FreeBSD.org
+&prompt.root; host newbsdbox.FreeBSD.org
+newbsdbox.FreeBSD.org has address 204.216.27.xx
If that is all that comes out for your machine, mail directory to
- root@newbsdbox.freebsd.org will work no
+ root@newbsdbox.FreeBSD.org will work no
problems.If instead, you have this:
- &prompt.root; host newbsdbox.freebsd.org
+ &prompt.root; host newbsdbox.FreeBSD.org
newbsdbox.FreeBSD.org has address 204.216.27.xx
newbsdbox.FreeBSD.org mail is handled (pri=10) by freefall.FreeBSD.orgAll mail sent to your host directly will end up on
freefall, under the same username.This information is setup in your domain name server. This should
be the same host that is listed as your primary nameserver in
/etc/resolv.confThe DNS record that carries mail routing information is the Mail
eXchange entry. If no MX entry exists, mail will be delivered directly
to the host by way of the Address record.The MX entry for freefall.FreeBSD.org
at one time.
freefall MX 30 mail.crl.net
freefall MX 40 agora.rdrop.com
freefall HINFO Pentium FreeBSD
freefall MX 10 freefall.FreeBSD.org
freefall MX 20 who.cdrom.com
freefall A 204.216.27.xx
freefall CNAME www.FreeBSD.orgfreefall has many MX entries. The lowest MX
number gets the mail in the end. The others will queue mail
temporarily, if freefall is busy or down.Alternate MX sites should have separate connections to the
Internet, to be most useful. An Internet Provider or other friendly
site can provide this service.dig, nslookup, and
host are your friends.Mail for your Domain (Network).To setup up a network mailhost, you need to direct the mail from
arriving at all the workstations. In other words, you want to hijack
all mail for *.smallminingco.com
and divert it to one machine, your “mailhost”.The network users on their workstations will most likely pick up
their mail over POP or telnet.A user account with the same username should
exist on both machines. Please use adduser to do
this as required. If you set the shell to
/nonexistent the user will not be allowed to
login.The mailhost that you will be using must be designated the
Mail eXchange for each workstation. This must be arranged in DNS (ie
BIND, named). Please refer to a Networking book for in-depth
information.You basically need to add these lines in your DNS server.
pc24.smallminingco.com A xxx.xxx.xxx.xxx ; Workstation ip
MX 10 smtp.smallminingco.com ; Your mailhostYou cannot do this yourself unless you are running a DNS server.
If you do not want to run a DNS server, get somebody else like your
Internet Provider to do it.This will redirect mail for the workstation to the Mail eXchange
host. It does not matter what machine the A record points to, the mail
will be sent to the MX host.This feature is used to implement Virtual E-Mail Hosting.ExampleI have a customer with domain foo.bar and I want all mail for
foo.bar to be sent to my machine smtp.smalliap.com. You must make an
entry in your DNS server like:
foo.bar MX 10 smtp.smalliap.com ; your mailhostThe A record is not needed if you only want E-Mail for the domain.
IE: Don't expect ping foo.bar to work unless an
Address record for foo.bar exists as well.On the mailhost that actually accepts mail for final delivery to a
mailbox, sendmail must be told what hosts it will
be accepting mail for.Add pc24.smallminingco.com to
/etc/sendmail.cw (if you are using
FEATURE(use_cw_file)), or add a Cw
myhost.smalliap.com line to
/etc/sendmail.cfIf you plan on doing anything serious with
sendmail you should install the
sendmail source. The source has plenty of
documentation with it. You will find information on getting
sendmail source from the UUCP information.Setting up UUCP.Stolen from the FAQ.The sendmail configuration that ships with FreeBSD is suited for
sites that connect directly to the Internet. Sites that wish to
exchange their mail via UUCP must install another
sendmail configuration file.Tweaking /etc/sendmail.cf manually is
considered something for purists. Sendmail version 8 comes with a new
approach of generating config files via some m4
preprocessing, where the actual hand-crafted configuration is on a
higher abstraction level. You should use the configuration files under
/usr/src/usr.sbin/sendmail/cf.If you did not install your system with full sources, the
sendmail config stuff has been broken out into a
separate source distribution tarball just for you. Assuming you have
your CD-ROM mounted, do:&prompt.root; cd /usr/src
&prompt.root; tar -xvzf /cdrom/dists/src/ssmailcf.aaDo not panic, this is only a few hundred kilobytes in size. The
file README in the cf
directory can serve as a basic introduction to m4
configuration.For UUCP delivery, you are best advised to use the
mailertable feature. This constitutes a database
that sendmail can use to base its routing decision
upon.First, you have to create your .mc file. The
directory /usr/src/usr.sbin/sendmail/cf/cf is the
home of these files. Look around, there are already a few examples.
Assuming you have named your file foo.mc, all you
need to do in order to convert it into a valid
sendmail.cf is:&prompt.root; cd /usr/src/usr.sbin/sendmail/cf/cf
&prompt.root; make foo.cfIf you don't have a /usr/obj hiearchy,
then:&prompt.root; cp foo.cf /etc/sendmail.cfOtherwise:&prompt.root; cp /usr/obj/`pwd`/foo.cf /etc/sendmail.cfA typical .mc file might look like:
include(`../m4/cf.m4')
VERSIONID(`Your version number')
OSTYPE(bsd4.4)
FEATURE(nodns)
FEATURE(nocanonify)
FEATURE(mailertable)
define(`UUCP_RELAY', your.uucp.relay)
define(`UUCP_MAX_SIZE', 200000)
MAILER(local)
MAILER(smtp)
MAILER(uucp)
Cw your.alias.host.name
Cw youruucpnodename.UUCPThe nodns and nocanonify
features will prevent any usage of the DNS during mail delivery. The
UUCP_RELAY clause is needed for bizarre reasons, do
not ask. Simply put an Internet hostname there that is able to handle
.UUCP pseudo-domain addresses; most likely, you will enter the mail
relay of your ISP there.Once you have this, you need this file called
/etc/mailertable. A typical example of this
gender again:
#
# makemap hash /etc/mailertable.db < /etc/mailertable
#
horus.interface-business.de uucp-dom:horus
.interface-business.de uucp-dom:if-bus
interface-business.de uucp-dom:if-bus
.heep.sax.de smtp8:%1 horus.UUCP
uucp-dom:horus if-bus.UUCP
uucp-dom:if-bus . uucp-dom:saxAs you can see, this is part of a real-life file. The first three
lines handle special cases where domain-addressed mail should not be
sent out to the default route, but instead to some UUCP neighbor in
order to “shortcut” the delivery path. The next line
handles mail to the local Ethernet domain that can be delivered using
SMTP. Finally, the UUCP neighbors are mentioned in the .UUCP
pseudo-domain notation, to allow for a
uucp-neighbor!recipient override of the default
rules. The last line is always a single dot, matching everything else,
with UUCP delivery to a UUCP neighbor that serves as your universal
mail gateway to the world. All of the node names behind the
uucp-dom: keyword must be valid UUCP neighbors, as
you can verify using the command uuname.As a reminder that this file needs to be converted into a DBM
database file before being usable, the command line to accomplish this
is best placed as a comment at the top of the
mailertable. You always have to execute this
command each time you change your
mailertable.Final hint: if you are uncertain whether some particular mail
routing would work, remember the option to
sendmail. It starts sendmail in
“address test mode”; simply enter 0,
followed by the address you wish to test for the mail routing. The
last line tells you the used internal mail agent, the destination host
this agent will be called with, and the (possibly translated) address.
Leave this mode by typing Control-D.&prompt.user; sendmail -bt
ADDRESS TEST MODE (ruleset 3 NOT automatically invoked)
Enter <ruleset> <address>
>0 foo@interface-business.de
rewrite: ruleset 0 input: foo @ interface-business . de
…
rewrite: ruleset 0 returns: $# uucp-dom $@ if-bus $: foo < @ interface-business . deFAQMigration from FAQ.Why do I have to use the FQDN for hosts on my site?You will probably find that the host is actually in a different
domain; for example, if you are in foo.bar.edu and you wish to reach a host called
mumble in the bar.edu domain, you will have to refer to
it by the fully-qualified domain name, mumble.bar.edu, instead of just
mumble.Traditionally, this was allowed by BSD BIND resolvers. However the
current version of BIND that ships with
FreeBSD no longer provides default abbreviations for non-fully
qualified domain names other than the domain you are in. So an
unqualified host mumble must either be found as
mumble.foo.bar.edu, or it will be
searched for in the root domain.This is different from the previous behavior, where the search
continued across mumble.bar.edu,
and mumble.edu. Have a look at RFC
1535 for why this was considered bad practice, or even a security
hole.As a good workaround, you can place the line
search foo.bar.edu bar.edu
instead of the previous
domain foo.bar.edu
into your /etc/resolv.conf. However, make sure
that the search order does not go beyond the “boundary between
local and public administration”, as RFC 1535 calls it.Sendmail says mail loops back to
myselfThis is answered in the sendmail FAQ as follows:
* I am getting "Local configuration error" messages, such as:
553 relay.domain.net config error: mail loops back to myself
554 <user@domain.net>... Local configuration error
How can I solve this problem?
You have asked mail to the domain (e.g., domain.net) to be
forwarded to a specific host (in this case, relay.domain.net)
by using an MX record, but the relay machine does not recognize
itself as domain.net. Add domain.net to /etc/sendmail.cw
(if you are using FEATURE(use_cw_file)) or add "Cw domain.net"
to /etc/sendmail.cf.The sendmail FAQ is in
/usr/src/usr.sbin/sendmail and is recommended
reading if you want to do any “tweaking” of your mail
setup.How can I do E-Mail with a dialup PPP host?You want to connect a FreeBSD box on a lan, to the Internet. The
FreeBSD box will be a mail gateway for the lan. The PPP connection is
non-dedicated.There are at least two way to do this.The other is to use UUCP.The key is to get a Internet site to provide secondary MX services
for your domain. For example:
bigco.com. MX 10 bigco.com.
MX 20 smalliap.com.Only one host should be specified as the final recipient ( add
Cw bigco.com in
/etc/sendmail.cf on bigco.com).When the senders sendmail is trying to deliver
the mail it will try to connect to you over the modem link. It will
most likely time out because you are not online.
sendmail will automatically deliver it to the
secondary MX site, ie your Internet provider. The secondary MX site
will try every (sendmail_flags = "-bd -q15m" in
/etc/rc.conf ) 15 minutes to connect to your host
to deliver the mail to the primary MX site.You might want to use something like this as a login
script.
#!/bin/sh
# Put me in /usr/local/bin/pppbigco
( sleep 60 ; /usr/sbin/sendmail -q ) &
/usr/sbin/ppp -direct pppbigcoIf you are going to create a separate login script for a user you
could use sendmail -qRbigco.com instead in the
script above. This will force all mail in your queue for bigco.com to
be processed immediately.A further refinement of the situation is as follows.Message stolen from the freebsd-isp mailing list.
> we provide the secondary mx for a customer. The customer connects to
> our services several times a day automatically to get the mails to
> his primary mx (We do not call his site when a mail for his domains
> arrived). Our sendmail sends the mailqueue every 30 minutes. At the
> moment he has to stay 30 minutes online to be sure that all mail is
> gone to the primary mx.
>
> Is there a command that would initiate sendmail to send all the mails
> now? The user has not root-privileges on our machine of course.
In the 'privacy flags' section of sendmail.cf, there is a definition
Opgoaway,restrictqrun
Remove restrictqrun to allow non-root users to start the queue processing.
You might also like to rearrange the MXs. We are the 1st MX for our
customers like this, and we have defined:
# If we are the best MX for a host, try directly instead of generating
# local config error.
OwTrue
That way a remote site will deliver straight to you, without trying
the customer connection. You then send to your customer. Only works for
"hosts", so you need to get your customer to name their mail machine
"customer.com" as well as "hostname.customer.com" in the DNS. Just put
an A record in the DNS for "customer.com".
diff --git a/en_US.ISO8859-1/books/handbook/mailing-lists.ent b/en_US.ISO8859-1/books/handbook/mailing-lists.ent
index 3e9e85fe41..4a59f66dfe 100644
--- a/en_US.ISO8859-1/books/handbook/mailing-lists.ent
+++ b/en_US.ISO8859-1/books/handbook/mailing-lists.ent
@@ -1,104 +1,104 @@
freebsd-advocacy@FreeBSD.ORG">
+ freebsd-advocacy@FreeBSD.org">
freebsd-announce@FreeBSD.ORG">
+ freebsd-announce@FreeBSD.org">
freebsd-bugs@FreeBSD.ORG">
+ freebsd-bugs@FreeBSD.org">
freebsd-chat@FreeBSD.ORG">
+ freebsd-chat@FreeBSD.org">
freebsd-core@FreeBSD.ORG">
+ freebsd-core@FreeBSD.org">
freebsd-current@FreeBSD.ORG">
+ freebsd-current@FreeBSD.org">
cvs-all@FreeBSD.ORG">
+ cvs-all@FreeBSD.org">
freebsd-database@FreeBSD.ORG">
+ freebsd-database@FreeBSD.org">
freebsd-doc@FreeBSD.ORG">
+ freebsd-doc@FreeBSD.org">
freebsd-emulation@FreeBSD.ORG">
+ freebsd-emulation@FreeBSD.org">
freebsd-fs@FreeBSD.ORG">
+ freebsd-fs@FreeBSD.org">
freebsd-hackers@FreeBSD.ORG">
+ freebsd-hackers@FreeBSD.org">
freebsd-hardware@FreeBSD.ORG">
+ freebsd-hardware@FreeBSD.org">
freebsd-isdn@FreeBSD.ORG">
+ freebsd-isdn@FreeBSD.org">
freebsd-isp@FreeBSD.ORG">
+ freebsd-isp@FreeBSD.org">
freebsd-java@FreeBSD.ORG">
+ freebsd-java@FreeBSD.org">
freebsd-jobs@FreeBSD.ORG">
+ freebsd-jobs@FreeBSD.org">
freebsd-mobile@FreeBSD.ORG">
+ freebsd-mobile@FreeBSD.org">
freebsd-mozilla@FreeBSD.ORG">
+ freebsd-mozilla@FreeBSD.org">
freebsd-multimedia@FreeBSD.ORG">
+ freebsd-multimedia@FreeBSD.org">
freebsd-net@FreeBSD.ORG">
+ freebsd-net@FreeBSD.org">
freebsd-newbies@FreeBSD.ORG">
+ freebsd-newbies@FreeBSD.org">
new-bus-arch@bostonradio.org">
freebsd-ports@FreeBSD.ORG">
+ freebsd-ports@FreeBSD.org">
freebsd-questions@FreeBSD.ORG">
+ freebsd-questions@FreeBSD.org">
freebsd-scsi@FreeBSD.ORG">
+ freebsd-scsi@FreeBSD.org">
freebsd-security@FreeBSD.ORG">
+ freebsd-security@FreeBSD.org">
freebsd-security-notifications@FreeBSD.ORG">
+ freebsd-security-notifications@FreeBSD.org">
freebsd-small@FreeBSD.ORG">
+ freebsd-small@FreeBSD.org">
freebsd-smp@FreeBSD.ORG">
+ freebsd-smp@FreeBSD.org">
freebsd-stable@FreeBSD.ORG">
+ freebsd-stable@FreeBSD.org">
freebsd-tokenring@FreeBSD.ORG">
+ freebsd-tokenring@FreeBSD.org">
-majordomo@FreeBSD.ORG">
+majordomo@FreeBSD.org">
diff --git a/en_US.ISO8859-1/books/handbook/mirrors/chapter.sgml b/en_US.ISO8859-1/books/handbook/mirrors/chapter.sgml
index 0952b0819d..9c5cba7e52 100644
--- a/en_US.ISO8859-1/books/handbook/mirrors/chapter.sgml
+++ b/en_US.ISO8859-1/books/handbook/mirrors/chapter.sgml
@@ -1,1457 +1,1457 @@
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,
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/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/FreeBSDEstoniaIn 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)Canadacvsup.ca.FreeBSD.org (maintainer
dan@jaded.net)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)
+ 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.ISO8859-1/books/handbook/pgpkeys/chapter.sgml b/en_US.ISO8859-1/books/handbook/pgpkeys/chapter.sgml
index 984b27dd97..53e2f8a6d6 100644
--- a/en_US.ISO8859-1/books/handbook/pgpkeys/chapter.sgml
+++ b/en_US.ISO8859-1/books/handbook/pgpkeys/chapter.sgml
@@ -1,624 +1,624 @@
PGP keysIn case you need to verify a signature or send encrypted email to one
of the officers or core team members a number of keys are provided here
for your convenience.OfficersFreeBSD Security Officer
security-officer@FreeBSD.org
-FreeBSD Security Officer <security-officer@freebsd.org>
+FreeBSD Security Officer <security-officer@FreeBSD.org>
Fingerprint = 41 08 4E BB DB 41 60 71 F9 E5 0E 98 73 AF 3F 11
-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: 2.6.3i
mQCNAzF7MY4AAAEEAK7qBgPuBejER5HQbQlsOldk3ZVWXlRj54raz3IbuAUrDrQL
h3g57T9QY++f3Mot2LAf5lDJbsMfWrtwPrPwCCFRYQd6XH778a+l4ju5axyjrt/L
Ciw9RrOC+WaPv3lIdLuqYge2QRC1LvKACIPNbIcgbnLeRGLovFUuHi5z0oilAAUR
tDdGcmVlQlNEIFNlY3VyaXR5IE9mZmljZXIgPHNlY3VyaXR5LW9mZmljZXJAZnJl
ZWJzZC5vcmc+iQCVAwUQMX6yrOJgpPLZnQjrAQHyowQA1Nv2AY8vJIrdp2ttV6RU
tZBYnI7gTO3sFC2bhIHsCvfVU3JphfqWQ7AnTXcD2yPjGcchUfc/EcL1tSlqW4y7
PMP4GHZp9vHog1NAsgLC9Y1P/1cOeuhZ0pDpZZ5zxTo6TQcCBjQA6KhiBFP4TJql
3olFfPBh3B/Tu3dqmEbSWpuJAJUDBRAxez3C9RVb+45ULV0BAak8A/9JIG/jRJaz
QbKom6wMw852C/Z0qBLJy7KdN30099zMjQYeC9PnlkZ0USjQ4TSpC8UerYv6IfhV
nNY6gyF2Hx4CbEFlopnfA1c4yxtXKti1kSN6wBy/ki3SmqtfDhPQ4Q31p63cSe5A
3aoHcjvWuqPLpW4ba2uHVKGP3g7SSt6AOYkAlQMFEDF8mz0ff6kIA1j8vQEBmZcD
/REaUPDRx6qr1XRQlMs6pfgNKEwnKmcUzQLCvKBnYYGmD5ydPLxCPSFnPcPthaUb
5zVgMTjfjS2fkEiRrua4duGRgqN4xY7VRAsIQeMSITBOZeBZZf2oa9Ntidr5PumS
9uQ9bvdfWMpsemk2MaRG9BSoy5Wvy8VxROYYUwpT8Cf2iQCVAwUQMXsyqWtaZ42B
sqd5AQHKjAQAvolI30Nyu3IyTfNeCb/DvOe9tlOn/o+VUDNJiE/PuBe1s2Y94a/P
BfcohpKC2kza3NiW6lLTp00OWQsuu0QAPc02vYOyseZWy4y3Phnw60pWzLcFdemT
0GiYS5Xm1o9nAhPFciybn9j1q8UadIlIq0wbqWgdInBT8YI/l4f5sf6JAJUDBRAx
ezKXVS4eLnPSiKUBAc5OBACIXTlKqQC3B53qt7bNMV46m81fuw1PhKaJEI033mCD
ovzyEFFQeOyRXeu25Jg9Bq0Sn37ynISucHSmt2tUD5W0+p1MUGyTqnfqejMUWBzO
v4Xhp6a8RtDdUMBOTtro16iulGiRrCKxzVgEl4i+9Z0ZiE6BWlg5AetoF5n3mGk1
lw==
=ipyA
-----END PGP PUBLIC KEY BLOCK-----&a.imp;
Warner Losh <imp@village.org>
- aka <imp@freebsd.org>
+ aka <imp@FreeBSD.org>
Fingerprint = D4 31 FD B9 F7 90 17 E8 37 C5 E7 7F CF A6 C1 B9
-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: 2.6.2
mQCNAzDzTiAAAAEEAK8D7KWEbVFUrmlqhUEnAvphNIqHEbqqT8s+c5f5c2uHtlcH
V4mV2TlUaDSVBN4+/D70oHmZc4IgiQwMPCWRrSezg9z/MaKlWhaslc8YT6Xc1q+o
EP/fAdKUrq49H0QQbkQk6Ks5wKW6v9AOvdmsS6ZJEcet6d9G4dxynu/2qPVhAAUR
tCBNLiBXYXJuZXIgTG9zaCA8aW1wQHZpbGxhZ2Uub3JnPokAlQMFEDM/SK1VLh4u
c9KIpQEBFPsD/1n0YuuUPvD4CismZ9bx9M84y5sxLolgFEfP9Ux196ZSeaPpkA0g
C9YX/IyIy5VHh3372SDWN5iVSDYPwtCmZziwIV2YxzPtZw0nUu82P/Fn8ynlCSWB
5povLZmgrWijTJdnUWI0ApVBUTQoiW5MyrNN51H3HLWXGoXMgQFZXKWYiQCVAwUQ
MzmhkfUVW/uOVC1dAQG3+AP/T1HL/5EYF0ij0yQmNTzt1cLt0b1e3N3zN/wPFFWs
BfrQ+nsv1zw7cEgxLtktk73wBGM9jUIdJu8phgLtl5a0m9UjBq5oxrJaNJr6UTxN
a+sFkapTLT1g84UFUO/+8qRB12v+hZr2WeXMYjHAFUT18mp3xwjW9DUV+2fW1Wag
YDKJAJUDBRAzOYK1s1pi61mfMj0BARBbA/930CHswOF0HIr+4YYUs1ejDnZ2J3zn
icTZhl9uAfEQq++Xor1x476j67Z9fESxyHltUxCmwxsJ1uOJRwzjyEoMlyFrIN4C
dE0C8g8BF+sRTt7VLURLERvlBvFrVZueXSnXvmMoWFnqpSpt3EmN6TNaLe8Cm87a
k6EvQy0dpnkPKokAlQMFEDD9Lorccp7v9qj1YQEBrRUD/3N4cCMWjzsIFp2Vh9y+
RzUrblyF84tJyA7Rr1p+A7dxf7je3Zx5QMEXosWL1WGnS5vC9YH2WZwv6sCU61gU
rSy9z8KHlBEHh+Z6fdRMrjd9byPf+n3cktT0NhS23oXB1ZhNZcB2KKhVPlNctMqO
3gTYx+Nlo6xqjR+J2NnBYU8p
=7fQV
-----END PGP PUBLIC KEY BLOCK-----Core Team members&a.asami;
Satoshi Asami <asami@cs.berkeley.edu>
- aka <asami@FreeBSD.ORG>
+ aka <asami@FreeBSD.org>
Fingerprint = EB 3C 68 9E FB 6C EB 3F DB 2E 0F 10 8F CE 79 CA
-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: 2.6.2
mQCNAzPVyoQAAAEEAL7W+kipxB171Z4SVyyL9skaA7hG3eRsSOWk7lfvfUBLtPog
f3OKwrApoc/jwLf4+Qpdzv5DLEt/6Hd/clskhJ+q1gMNHyZ5ABmUxrTRRNvJMTrb
3fPU3oZj7sL/MyiFaT1zF8EaMP/iS2ZtcFsbYOqGeA8E/58uk4NA0SoeCNiJAAUR
tCVTYXRvc2hpIEFzYW1pIDxhc2FtaUBjcy5iZXJrZWxleS5lZHU+iQCVAwUQM/AT
+EqGN2HYnOMZAQF11QP/eSXb2FuTb1yX5yoo1Im8YnIk1SEgCGbyEbOMMBznVNDy
5g2TAD0ofLxPxy5Vodjg8rf+lfMVtO5amUH6aNcORXRncE83T10JmeM6JEp0T6jw
zOHKz8jRzygYLBayGsNIJ4BGxa4LeaGxJpO1ZEvRlNkPH/YEXK5oQmq9/DlrtYOJ
AEUDBRAz42JT8ng6GBbVvu0BAU8nAYCsJ8PiJpRUGlrz6rxjX8hqM1v3vqFHLcG+
G52nVMBSy+RZBgzsYIPwI5EZtWAKb22JAJUDBRAz4QBWdbtuOHaj97EBAaQPA/46
+NLUp+Wubl90JoonoXocwAg88tvAUVSzsxPXj0lvypAiSI2AJKsmn+5PuQ+/IoQy
lywRsxiQ5GD7C72SZ1yw2WI9DWFeAi+qa4b8n9fcLYrnHpyCY+zxEpu4pam8FJ7H
JocEUZz5HRoKKOLHErzXDiuTkkm72b1glmCqAQvnB4kAlQMFEDPZ3gyDQNEqHgjY
iQEBFfUEALu2C0uo+1Z7C5+xshWRYY5xNCzK20O6bANVJ+CO2fih96KhwsMof3lw
fDso5HJSwgFd8WT/sR+Wwzz6BAE5UtgsQq5GcsdYQuGI1yIlCYUpDp5sgswNm+OA
bX5a+r4F/ZJqrqT1J56Mer0VVsNfe5nIRsjd/rnFAFVfjcQtaQmjiQCVAwUQM9uV
mcdm8Q+/vPRJAQELHgP9GqNiMpLQlZig17fDnCJ73P0e5t/hRLFehZDlmEI2TK7j
Yeqbw078nZgyyuljZ7YsbstRIsWVCxobX5eH1kX+hIxuUqCAkCsWUY4abG89kHJr
XGQn6X1CX7xbZ+b6b9jLK+bJKFcLSfyqR3M2eCyscSiZYkWKQ5l3FYvbUzkeb6K0
IVNhdG9zaGkgQXNhbWkgPGFzYW1pQEZyZWVCU0QuT1JHPg==
=39SC
-----END PGP PUBLIC KEY BLOCK-----&a.jmb;
Jonathan M. Bresler <jmb@FreeBSD.org>
f16 Fingerprint16 = 31 57 41 56 06 C1 40 13 C5 1C E3 E5 DC 62 0E FB
-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: PGPfreeware 5.0i for non-commercial use
mQCNAzG2GToAAAEEANI6+4SJAAgBpl53XcfEr1M9wZyBqC0tzpie7Zm4vhv3hO8s
o5BizSbcJheQimQiZAY4OnlrCpPxijMFSaihshs/VMAz1qbisUYAMqwGEO/T4QIB
nWNo0Q/qOniLMxUrxS1RpeW5vbghErHBKUX9GVhxbiVfbwc4wAHbXdKX5jjdAAUR
tCVKb25hdGhhbiBNLiBCcmVzbGVyIDxqbWJARnJlZUJTRC5PUkc+iQCVAwUQNbtI
gAHbXdKX5jjdAQHamQP+OQr10QRknamIPmuHmFYJZ0jU9XPIvTTMuOiUYLcXlTdn
GyTUuzhbEywgtOldW2V5iA8platXThtqC68NsnN/xQfHA5xmFXVbayNKn8H5stDY
2s/4+CZ06mmJfqYmONF1RCbUk/M84rVT3Gn2tydsxFh4Pm32lf4WREZWRiLqmw+J
AJUDBRA0DfF99RVb+45ULV0BAcZ0BACCydiSUG1VR0a5DBcHdtin2iZMPsJUPRqJ
tWvP6VeI8OFpNWQ4LW6ETAvn35HxV2kCcQMyht1kMD+KEJz7r8Vb94TS7KtZnNvk
2D1XUx8Locj6xel5c/Lnzlnnp7Bp1XbJj2u/NzCaZQ0eYBdP/k7RLYBYHQQln5x7
BOuiRJNVU4kAlQMFEDQLcShVLh4uc9KIpQEBJv4D/3mDrD0MM9EYOVuyXik3UGVI
8quYNA9ErVcLdt10NjYc16VI2HOnYVgPRag3Wt7W8wlXShpokfC/vCNt7f5JgRf8
h2a1/MjQxtlD+4/Js8k7GLa53oLon6YQYk32IEKexoLPwIRO4L2BHWa3GzHJJSP2
aTR/Ep90/pLdAOu/oJDUiQCVAwUQMqyL0LNaYutZnzI9AQF25QP9GFXhBrz2tiWz
2+0gWbpcGNnyZbfsVjF6ojGDdmsjJMyWCGw49XR/vPKYIJY9EYo4t49GIajRkISQ
NNiIz22fBAjT2uY9YlvnTJ9NJleMfHr4dybo7oEKYMWWijQzGjqf2m8wf9OaaofE
KwBX6nxcRbKsxm/BVLKczGYl3XtjkcuJAJUDBRA1ol5TZWCprDT5+dUBATzXA/9h
/ZUuhoRKTWViaistGJfWi26FB/Km5nDQBr/Erw3XksQCMwTLyEugg6dahQ1u9Y5E
5tKPxbB69eF+7JXVHE/z3zizR6VL3sdRx74TPacPsdhZRjChEQc0htLLYAPkJrFP
VAzAlSlm7qd+MXf8fJovQs6xPtZJXukQukPNlhqZ94kAPwMFEDSH/kF4tXKgazlt
bxECfk4AoO+VaFVfguUkWX10pPSSfvPyPKqiAJ4xn8RSIe1ttmnqkkDMhLh00mKj
lLQuSm9uYXRoYW4gTS4gQnJlc2xlciA8Sm9uYXRoYW4uQnJlc2xlckBVU2kubmV0
PokAlQMFEDXbdSkB213Sl+Y43QEBV/4D/RLJNTrtAqJ1ATxXWv9g8Cr3/YF0GTmx
5dIrJOpBup7eSSmiM/BL9Is4YMsoVbXCI/8TqA67TMICvq35PZU4wboQB8DqBAr+
gQ8578M7Ekw1OAF6JXY6AF2P8k7hMcVBcVOACELPT/NyPNByG5QRDoNmlsokJaWU
/2ls4QSBZZlb
=zbCw
-----END PGP PUBLIC KEY BLOCK-----&a.ache;
Andrey A. Chernov <ache@FreeBSD.org>
aka <ache@nagual.pp.ru>
Key fingerprint = 33 03 9F 48 33 7B 4A 15 63 48 88 0A C4 97 FD 49
-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: 2.6.3ia
mQCNAiqUMGQAAAEEAPGhcD6A2Buey5LYz0sphDLpVgOZc/bb9UHAbaGKUAGXmafs
Dcb2HnsuYGgX/zrQXuCi/wIGtXcZWB97APtKOhFsZnPinDR5n/dde/mw9FnuhwqD
m+rKSL1HlN0z/Msa5y7g16760wHhSR6NoBSEG5wQAHIMMq7Q0uJgpPLZnQjrAAUT
tCVBbmRyZXkgQS4gQ2hlcm5vdiA8YWNoZUBuYWd1YWwucHAucnU+iQCVAwUQM2Ez
u+JgpPLZnQjrAQEyugP8DPnS8ixJ5OeuYgPFQf5sy6l+LrB6hyaS+lgsUPahWjNY
cnaDmfda/q/BV5d4+y5rlQe/pjnYG7/yQuAR3jhlXz8XDrqlBOnW9AtYjDt5rMfJ
aGFTGXAPGZ6k6zQZE0/YurT8ia3qjvuZm3Fw4NJrHRx7ETHRvVJDvxA6Ggsvmr20
JEFuZHJleSBBLiBDaGVybm92IDxhY2hlQEZyZWVCU0Qub3JnPokAlQMFEDR5uVbi
YKTy2Z0I6wEBLgED/2mn+hw4/3peLx0Sb9LNx//NfCCkVefSf2G9Qwhx6dvwbX7h
mFca97h7BQN4GubU1Z5Ffs6TeamSBrotBYGmOCwvJ6S9WigF9YHQIQ3B4LEjskAt
pcjU583y42zM11kkvEuQU2Gde61daIylJyOxsgpjSWpkxq50fgY2kLMfgl/ftCZB
bmRyZXkgQS4gQ2hlcm5vdiA8YWNoZUBuaWV0enNjaGUubmV0PokAlQMFEDR5svDi
YKTy2Z0I6wEBOTQD/0OTCAXIjuak363mjERvzSkVsNtIH9hA1l0w6Z95+iH0fHrW
xXKT0vBZE0y0Em+S3cotLL0bMmVE3F3D3GyxhBVmgzjyx0NYNoiQjYdi+6g/PV30
Cn4vOO6hBBpSyI6vY6qGNqcsawuRtHNvK/53MpOfKwSlICEBYQimcZhkci+EtCJB
bmRyZXkgQS4gQ2hlcm5vdiA8YWNoZUBuYWd1YWwucnU+iQCVAwUQMcm5HeJgpPLZ
nQjrAQHwvQP9GdmAf1gdcuayHEgNkc11macPH11cwWjYjzA2YoecFMGV7iqKK8QY
rr1MjbGXf8DAG8Ubfm0QbI8Lj8iG3NgqIru0c72UuHGSn/APfGGG0AtPX5UK/k7B
gI0Ca2po6NA5nrSp8tDsdEz/4gyea84RXl2prtTf5Jj07hflbRstGXK0MkFuZHJl
eSBBLiBDaGVybm92LCBCbGFjayBNYWdlIDxhY2hlQGFzdHJhbC5tc2suc3U+iQCV
AwUQMCsAo5/rGryoL8h3AQHq1QQAidyNFqA9hvrmMcjpY7csJVFlGvj574Wj4GPa
o3pZeuQaMBmsWqaXLYnWU/Aldb6kTz6+nRcQX50zFH0THSPfApwEW7yybSTI5apJ
mWT3qhKN2vmLNg2yNzhqLTzHLD1lH3i1pfQq8WevrNfjLUco5S/VuekTma/osnzC
Cw7fQzCJAJUDBRAwKvwoa1pnjYGyp3kBARihBACoXr3qfG65hFCyKJISmjOvaoGr
anxUIkeDS0yQdTHzhQ+dwB1OhhK15E0Nwr0MKajLMm90n6+Zdb5y/FIjpPriu8dI
rlHrWZlewa88eEDM+Q/NxT1iYg+HaKDAE171jmLpSpCL0MiJtO0i36L3ekVD7Hv8
vffOZHPSHirIzJOZTYkAlQMFEDAau6zFLUdtDb+QbQEBQX8D/AxwkYeFaYxZYMFO
DHIvSk23hAsjCmUA2Uil1FeWAusb+o8xRfPDc7TnosrIifJqbF5+fcHCG5VSTGlh
Bhd18YWUeabf/h9O2BsQX55yWRuB2x3diJ1xI/VVdG+rxlMCmE4ZR1Tl9x+Mtun9
KqKVpB39VlkCBYQ3hlgNt/TJUY4riQCVAwUQMBHMmyJRltlmbQBRAQFQkwP/YC3a
hs3ZMMoriOlt3ZxGNUUPTF7rIER3j+c7mqGG46dEnDB5sUrkzacpoLX5sj1tGR3b
vz9a4vmk1Av3KFNNvrZZ3/BZFGpq3mCTiAC9zsyNYQ8L0AfGIUO5goCIjqwOTNQI
AOpNsJ5S+nMAkQB4YmmNlI6GTb3D18zfhPZ6uciJAJUCBRAwD0sl4uW74fteFRkB
AWsAA/9NYqBRBKbmltQDpyK4+jBAYjkXBJmARFXKJYTlnTgOHMpZqoVyW96xnaa5
MzxEiu7ZWm5oL10QDIp1krkBP2KcmvfSMMHb5aGCCQc2/P8NlfXAuHtNGzYiI0UA
Iwi8ih/S1liVfvnqF9uV3d3koE7VsQ9OA4Qo0ZL2ggW+/gEaYIkAlQMFEDAOz6qx
/IyHe3rl4QEBIvYD/jIr8Xqo/2I5gncghSeFR01n0vELFIvaF4cHofGzyzBpYsfA
+6pgFI1IM+LUF3kbUkAY/2uSf9U5ECcaMCTWCwVgJVO+oG075SHEM4buhrzutZiM
1dTyTaepaPpTyRMUUx9ZMMYJs7sbqLId1eDwrJxUPhrBNvf/w2W2sYHSY8cdiQCV
AwUQMAzqgHcdkq6JcsfBAQGTxwQAtgeLFi2rhSOdllpDXUwz+SS6bEjFTWgRsWFM
y9QnOcqryw7LyuFmWein4jasjY033JsODfWQPiPVNA3UEnXVg9+n8AvNMPO8JkRv
Cn1eNg0VaJy9J368uArio93agd2Yf/R5r+QEuPjIssVk8hdcy/luEhSiXWf6bLMV
HEA0J+OJAJUDBRAwDUi+4mCk8tmdCOsBAatBBACHB+qtW880seRCDZLjl/bT1b14
5po60U7u6a3PEBkY0NA72tWDQuRPF/Cn/0+VdFNxQUsgkrbwaJWOoi0KQsvlOm3R
rsxKbn9uvEKLxExyKH3pxp76kvz/lEWwEeKvBK+84Pb1lzpG3W7u2XDfi3VQPTi3
5SZMAHc6C0Ct/mjNlYkAlQMFEDAMrPD7wj+NsTMUOQEBJckD/ik4WsZzm2qOx9Fw
erGq7Zwchc+Jq1YeN5PxpzqSf4AG7+7dFIn+oe6X2FcIzgbYY+IfmgJIHEVjDHH5
+uAXyb6l4iKc89eQawO3t88pfHLJWbTzmnvgz2cMrxt94HRvgkHfvcpGEgbyldq6
EB33OunazFcfZFRIcXk1sfyLDvYE
=1ahV
-----END PGP PUBLIC KEY BLOCK-----&a.jkh;
Jordan K. Hubbard <jkh@FreeBSD.org>
Fingerprint = 3C F2 27 7E 4A 6C 09 0A 4B C9 47 CD 4F 4D 0B 20
-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: 2.6.3ia
mQCNAzFjX0IAAAEEAML+nm9/kDNPp43ZUZGjYkm2QLtoC1Wxr8JulZXqk7qmhYcQ
jvX+fyoriJ6/7ZlnLe2oG5j9tZOnRLPvMaz0g9CpW6Dz3nkXrNPkmOFV9B8D94Mk
tyFeRJFqnkCuqBj6D+H8FtBwEeeTecSh2tJ0bZZTXnAMhxeOdvUVW/uOVC1dAAUR
tCNKb3JkYW4gSy4gSHViYmFyZCA8amtoQEZyZWVCU0Qub3JnPokBFQMFEDXCTXQM
j46yp4IfPQEBwO8IAIN0J09AXBf86dFUTFGcAMrEQqOF5IL+KGorAjzuYxERhKfD
ZV7jA+sCQqxkWfcVcE20kVyVYqzZIkio9a5zXP6TwA247JkPt54S1PmMDYHNlRIY
laXlNoji+4q3HP2DfHqXRT2859rYpm/fG/v6pWkos5voPKcZ2OFEp9W+Ap88oqw+
5rx4VetZNJq1Epmis4INj6XqNqj85+MOOIYE+f445ohDM6B/Mxazd6cHFGGIR+az
VjZ6lCDMLjzhB5+FqfrDLYuMjqkMTR5z9DL+psUvPlCkYbQ11NEWtEmiIWjUcNJN
GCxGzv5bXk0XPu3ADwbPkFE2usW1cSM7AQFiwuyJAJUDBRAxe+Q9a1pnjYGyp3kB
AV7XA/oCSL/Cc2USpQ2ckwkGpyvIkYBPszIcabSNJAzm2hsU9Qa6WOPxD8olDddB
uJNiW/gznPC4NsQ0N8Zr4IqRX/TTDVf04WhLmd8AN9SOrVv2q0BKgU6fLuk979tJ
utrewH6PR2qBOjAaR0FJNk4pcYAHeT+e7KaKy96YFvWKIyDvc4kAlQMFEDF8ldof
f6kIA1j8vQEBDH4D/0Zm0oNlpXrAE1EOFrmp43HURHbij8n0Gra1w9sbfo4PV+/H
U8ojTdWLy6r0+prH7NODCkgtIQNpqLuqM8PF2pPtUJj9HwTmSqfaT/LMztfPA6PQ
csyT7xxdXl0+4xTDl1avGSJfYsI8XCAy85cTs+PQwuyzugE/iykJO1Bnj/paiQCV
AwUQMXvlBvUVW/uOVC1dAQF2fQP/RfYC6RrpFTZHjo2qsUHSRk0vmsYfwG5NHP5y
oQBMsaQJeSckN4n2JOgR4T75U4vS62aFxgPLJP3lOHkU2Vc7xhAuBvsbGr5RP8c5
LvPOeUEyz6ZArp1KUHrtcM2iK1FBOmY4dOYphWyWMkDgYExabqlrAq7FKZftpq/C
BiMRuaw=
=C/Jw
-----END PGP PUBLIC KEY BLOCK-----&a.phk;
Poul-Henning Kamp <phk@FreeBSD.org>
Fingerprint = A3 F3 88 28 2F 9B 99 A2 49 F4 E2 FA 5A 78 8B 3E
-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: 2.6.3ia
mQCNAzAdpMIAAAEEALHDgrFUwhZtb7PbXg3upELoDVEUPFRwnmpJH1rRqyROUGcI
ooVe7u+FQlIs5OsXK8ECs/5Wpe2UrZSzHvjwBYOND5H42YtI5UULZLRCo5bFfTVA
K9Rpo5icfTsYihrzU2nmnycwFMk+jYXyT/ZDYWDP/BM9iLjj0x9/qQgDWPy9AAUR
tCNQb3VsLUhlbm5pbmcgS2FtcCA8cGhrQEZyZWVCU0Qub3JnPokAlQMFEDQQ0aZ1
u244dqP3sQEBu4ID/jXFFeJgs2MdTDNOZM/FbfDhI4qxAbYUsqS3+Ra16yd8Wd/A
jV+IHJE2NomFWl8UrUjCGinXiwzPgK1OfFJrS9Og1wQLvAl0X84BA8MTP9BQr4w7
6I/RbksgUSrVCIO8MJwlydjSPocWGBeXlVjbZxXzyuJk7H+TG+zuI5BuBcNIiQCV
AwUQMwYr2rNaYutZnzI9AQHiIQP/XxtBWFXaBRgVLEhRNpS07YdU+LsZGlLOZehN
9L4UnJFHQQPNOpMey2gF7Y95aBOw5/1xS5vlQpwmRFCntWsm/gqdzK6rulfr1r5A
y94LO5TAC6ucNu396Y4vo1TyD1STnRC466KlvmtQtAtFGgXlORWLL9URLzcRFd1h
D0yXd9aJAJUDBRAxfo19a1pnjYGyp3kBAQqyA/4v64vP3l1F0Sadn6ias761hkz/
SMdTuLzILmofSCC4o4KWMjiWJHs2Soo41QlZi1+xMHzV32JKiwFlGtPHqL+EHyXy
Q4H3vmf9/1KF+0XCaMtgI0wWUMziPSTJK8xXbRRmMDK/0F4TnVVaUhnmf+h5K7O6
XdmejDTa0X/NWcicmIkAlQMFEDF8lef1FVv7jlQtXQEBcnwD/0ro1PpUtlkLmreD
tsGTkNa7MFLegrYRvDDrHOwPZH152W2jPUncY+eArQJakeHiTDmJNpFagLZglhE0
bqJyca+UwCXX+6upAclWHEBMg2byiWMMqyPVEEnpUoHM1sIkgdNWlfQAmipRBfYh
2LyCgWvR8CbtwPYIFvUmGgB3MR87iQCVAwUQMUseXB9/qQgDWPy9AQGPkwP/WEDy
El2Gkvua9COtMAifot2vTwuvWWpNopIEx0Ivey4aVbRLD90gGCJw8OGDEtqFPcNV
8aIiy3fYVKXGZZjvCKd7zRfhNmQn0eLDcymq2OX3aPrMc2rRlkT4Jx425ukR1gsO
qiQAgw91aWhY8dlw/EKzk8ojm52x4VgXaBACMjaJAJUDBRAxOUOg72G56RHVjtUB
AbL4A/9HOn5Qa0lq9tKI/HkSdc5fGQD/66VdCBAb292RbB7CS/EM07MdbcqRRYIa
0+0gwQ3OdsWPdCVgH5RIhp/WiC+UPkR1cY8N9Mg2kTwJfZZfNqN+BgWlgRMPN27C
OhYNl8Q33Nl9CpBLrZWABF44jPeT0EvvTzP/5ZQ7T75EsYKYiYkAlQMFEDDmryQA
8tkJ67sbQQEBPdsEALCj6v1OBuJLLJTlxmmrkqAZPVzt5QdeO3Eqa2tcPWcU0nqP
vHYMzZcZ7oFg58NZsWrhSQQDIB5e+K65Q/h6dC7W/aDskZd64jxtEznX2kt0/MOr
8OdsDis1K2f9KQftrAx81KmVwW4Tqtzl7NWTDXt44fMOtibCwVq8v2DFkTJy
=JKbP
-----END PGP PUBLIC KEY BLOCK-----&a.rich;
Rich Murphey <rich@FreeBSD.org>
fingerprint = AF A0 60 C4 84 D6 0C 73 D1 EF C0 E9 9D 21 DB E4
-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: 2.6.2
mQCNAy97V+MAAAEEALiNM3FCwm3qrCe81E20UOSlNclOWfZHNAyOyj1ahHeINvo1
FBF2Gd5Lbj0y8SLMno5yJ6P4F4r+x3jwHZrzAIwMs/lxDXRtB0VeVWnlj6a3Rezs
wbfaTeSVyh5JohEcKdoYiMG5wjATOwK/NAwIPthB1RzRjnEeer3HI3ZYNEOpAAUR
tCRSaWNoIE11cnBoZXkgPHJpY2hAbGFtcHJleS51dG1iLmVkdT6JAJUDBRAve15W
vccjdlg0Q6kBAZTZBACcNd/LiVnMFURPrO4pVRn1sVQeokVX7izeWQ7siE31Iy7g
Sb97WRLEYDi686osaGfsuKNA87Rm+q5F+jxeUV4w4szoqp60gGvCbD0KCB2hWraP
/2s2qdVAxhfcoTin/Qp1ZWvXxFF7imGA/IjYIfB42VkaRYu6BwLEm3YAGfGcSw==
=QoiM
-----END PGP PUBLIC KEY BLOCK-----&a.jdp;
John D. Polstra <jdp@polstra.com>
Fingerprint = 54 3A 90 59 6B A4 9D 61 BF 1D 03 09 35 8D F6 0D
-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: 2.6.2
mQCNAzMElMEAAAEEALizp6ZW9QifQgWoFmG3cXhzQ1+Gt+a4S1adC/TdHdBvw1M/
I6Ok7TC0dKF8blW3VRgeHo4F3XhGn+n9MqIdboh4HJC5Iiy63m98sVLJSwyGO4oM
dkEGyyCLxqP6h/DU/tzNBdqFzetGtYvU4ftt3RO0a506cr2CHcdm8Q+/vPRJAAUR
tCFKb2huIEQuIFBvbHN0cmEgPGpkcEBwb2xzdHJhLmNvbT6JAJUDBRAzBNBE9RVb
+45ULV0BAWgiA/0WWO3+c3qlptPCHJ3DFm6gG/qNKsY94agL/mHOr0fxMP5l2qKX
O6a1bWkvGoYq0EwoKGFfn0QeHiCl6jVi3CdBX+W7bObMcoi+foqZ6zluOWBC1Jdk
WQ5/DeqQGYXqbYjqO8voCScTAPge3XlMwVpMZTv24u+nYxtLkE0ZcwtY9IkAlQMF
EDMEt/DHZvEPv7z0SQEBXh8D/2egM5ckIRpGz9kcFTDClgdWWtlgwC1iI2p9gEhq
aufy+FUJlZS4GSQLWB0BlrTmDC9HuyQ+KZqKFRbVZLyzkH7WFs4zDmwQryLV5wkN
C4BRRBXZfWy8s4+zT2WQD1aPO+ZsgRauYLkJgTvXTPU2JCN62Nsd8R7bJS5tuHEm
7HGmiQCVAwUQMwSvHB9/qQgDWPy9AQFAhAQAgJ1AlbKITrEoJ0+pLIsov3eQ348m
SVHEBGIkU3Xznjr8NzT9aYtq4TIzt8jplqP3QoV1ka1yYpZf0NjvfZ+ffYp/sIaU
wPbEpgtmHnVWJAebMbNs/Ad1w8GDvxEt9IaCbMJGZnHmfnEqOBIxF7VBDPHHoJxM
V31K/PIoYsHAy5w=
=cHFa
-----END PGP PUBLIC KEY BLOCK-----&a.guido;
Guido van Rooij <guido@gvr.win.tue.nl>
Fingerprint = 16 79 09 F3 C0 E4 28 A7 32 62 FA F6 60 31 C0 ED
-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: 2.6.2
mQCNAzGeO84AAAEEAKKAY91Na//DXwlUusr9GVESSlVwVP6DyH1wcZXhfN1fyZHq
SwhMCEdHYoojQds+VqD1iiZQvv1RLByBgj622PDAPN4+Z49HjGs7YbZsUNuQqPPU
wRPpP6ty69x1hPKq1sQIB5MS4radpCM+4wbZbhxv7l4rP3RWUbNaYutZnzI9AAUR
tCZHdWlkbyB2YW4gUm9vaWogPGd1aWRvQGd2ci53aW4udHVlLm5sPokAlQMFEDMG
Hcgff6kIA1j8vQEBbYgD/jm9xHuUuY+iXDkOzpCXBYACYEZDV913MjtyBAmaVqYo
Rh5HFimkGXe+rCo78Aau0hc57fFMTsJqnuWEqVt3GRq28hSK1FOZ7ni9/XibHcmN
rt2yugl3hYpClijo4nrDL1NxibbamkGW/vFGcljS0jqXz6NDVbGx5Oo7HBByxByz
iQCVAwUQMhmtVjt/x7zOdmsfAQFuVQQApsVUTigT5YWjQA9Nd5Z0+a/oVtZpyw5Z
OljLJP3vqJdMa6TidhfcatjHbFTve5x1dmjFgMX/MQTd8zf/+Xccy/PX4+lnKNpP
eSf1Y4aK+E8KHmBGd6GzX6CIboyGYLS9e3kGnN06F2AQtaLyJFgQ71wRaGuyKmQG
FwTn7jiKb1aJAJUDBRAyEOLXPt3iN6QQUSEBATwQA/9jqu0Nbk154+Pn+9mJX/YT
fYR2UqK/5FKCqgL5Nt/Deg2re0zMD1f8F9Dj6vuAAxq8hnOkIHKlWolMjkRKkzJi
mSPEWl3AuHJ31k948J8it4f8kq/o44usIA2KKVMlI63Q/rmNdfWCyiYQEVGcRbTm
GTdZIHYCOgV5dOo4ebFqgYkAlQMFEDIE1nMEJn15jgpJ0QEBW6kEAKqN8XSgzTqf
CrxFXT07MlHhfdbKUTNUoboxCGCLNW05vf1A8F5fdE5i14LiwkldWIzPxWD+Sa3L
fNPCfCZTaCiyGcLyTzVfBHA18MBAOOX6JiTpdcm22jLGUWBf/aJK3yz/nfbWntd/
LRHysIdVp29lP5BF+J9/Lzbb/9LxP1taiQCVAwUQMgRXZ44CzbsJWQz9AQFf7gP/
Qa2FS5S6RYKG3rYanWADVe/ikFV2lxuM1azlWbsmljXvKVWGe6cV693nS5lGGAjx
lbd2ADwXjlkNhv45HLWFm9PEveO9Jjr6tMuXVt8N2pxiX+1PLUN9CtphTIU7Yfjn
s6ryZZfwGHSfIxNGi5ua2SoXhg0svaYnxHxXmOtH24iJAJUDBRAyAkpV8qaAEa3W
TBkBARfQBAC+S3kbulEAN3SI7/A+A/dtl9DfZezT9C4SRBGsl2clQFMGIXmMQ/7v
7lLXrKQ7U2zVbgNfU8smw5h2vBIL6f1PyexSmc3mz9JY4er8KeZpcf6H0rSkHl+i
d7TF0GvuTdNPFO8hc9En+GG6QHOqbkB4NRZ6cwtfwUMhk2FHXBnjF4kAlQMFEDH5
FFukUJAsCdPmTQEBe74EAMBsxDnbD9cuI5MfF/QeTNEG4BIVUZtAkDme4Eg7zvsP
d3DeJKCGeNjiCWYrRTCGwaCWzMQk+/+MOmdkI6Oml+AIurJLoHceHS9jP1izdP7f
N2jkdeJSBsixunbQWtUElSgOQQ4iF5kqwBhxtOfEP/L9QsoydRMR1yB6WPD75H7V
iQCVAwUQMZ9YNGtaZ42Bsqd5AQH0PAQAhpVlAc3ZM/KOTywBSh8zWKVlSk3q/zGn
k7hJmFThnlhH1723+WmXE8aAPJi+VXOWJUFQgwELJ6R8jSU2qvk2m1VWyYSqRKvc
VRQMqT2wjss0GE1Ngg7tMrkRHT0il7E2xxIb8vMrIwmdkbTfYqBUhhGnsWPHZHq7
MoA1/b+rK7CJAJUDBRAxnvXh3IDyptUyfLkBAYTDA/4mEKlIP/EUX2Zmxgrd/JQB
hqcQlkTrBAaDOnOqe/4oewMKR7yaMpztYhJs97i03Vu3fgoLhDspE55ooEeHj0r4
cOdiWfYDsjSFUYSPNVhW4OSruMA3c29ynMqNHD7hpr3rcCPUi7J2RncocOcCjjK2
BQb/9IAUNeK4C9gPxMEZLokAlQMFEDGeO86zWmLrWZ8yPQEBEEID/2fPEUrSX3Yk
j5TJPFZ9MNX0lEo7AHYjnJgEbNI4pYm6C3PnMlsYfCSQDHuXmRQHAOWSdwOLvCkN
F8eDaF3M6u0urgeVJ+KVUnTz2+LZoZs12XSZKCte0HxjbvPpWMTTrYyimGezH79C
mgDVjsHaYOx3EXF0nnDmtXurGioEmW1J
=mSvM
-----END PGP PUBLIC KEY BLOCK-----&a.peter;
Peter Wemm <peter@FreeBSD.org>
aka <peter@spinner.dialix.com>
aka <peter@haywire.dialix.com>
aka <peter@perth.dialix.oz.au>
Key fingerprint = 47 05 04 CA 4C EE F8 93 F6 DB 02 92 6D F5 58 8A
-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: 2.6.3ia
mQCNAy9/FJwAAAEEALxs9dE9tFd0Ru1TXdq301KfEoe5uYKKuldHRBOacG2Wny6/
W3Ill57hOi2+xmq5X/mHkapywxvy4cyLdt31i4GEKDvxpDvEzAYcy2n9dIup/eg2
kEhRBX9G5k/LKM4NQsRIieaIEGGgCZRm0lINqw495aZYrPpO4EqGN2HYnOMZAAUT
tCVQZXRlciBXZW1tIDxwZXRlckBoYXl3aXJlLmRpYWxpeC5jb20+iQCVAwUQMwWT
cXW7bjh2o/exAQEFkQP+LIx5zKlYp1uR24xGApMFNrNtjh+iDIWnxxb2M2Kb6x4G
9z6OmbUCoDTGrX9SSL2Usm2RD0BZfyv9D9QRWC2TSOPkPRqQgIycc11vgbLolJJN
eixqsxlFeKLGEx9eRQCCbo3dQIUjc2yaOe484QamhsK1nL5xpoNWI1P9zIOpDiGJ
AJUDBRAxsRPqSoY3Ydic4xkBAbWLA/9q1Fdnnk4unpGQsG31Qbtr4AzaQD5m/JHI
4gRmSmbj6luJMgNG3fpO06Gd/Z7uxyCJB8pTst2a8C/ljOYZxWT+5uSzkQXeMi5c
YcI1sZbUpkHtmqPW623hr1PB3ZLA1TIcTbQW+NzJsxQ1Pc6XG9fGkT9WXQW3Xhet
AP+juVTAhLQlUGV0ZXIgV2VtbSA8cGV0ZXJAcGVydGguZGlhbGl4Lm96LmF1PokA
lQMFEDGxFCFKhjdh2JzjGQEB6XkD/2HOwfuFrnQUtdwFPUkgtEqNeSr64jQ3Maz8
xgEtbaw/ym1PbhbCk311UWQq4+izZE2xktHTFClJfaMnxVIfboPyuiSF99KHiWnf
/Gspet0S7m/+RXIwZi1qSqvAanxMiA7kKgFSCmchzas8TQcyyXHtn/gl9v0khJkb
/fv3R20btB5QZXRlciBXZW1tIDxwZXRlckBGcmVlQlNELm9yZz6JAJUDBRAxsRJd
SoY3Ydic4xkBAZJUA/4i/NWHz5LIH/R4IF/3V3LleFyMFr5EPFY0/4mcv2v+ju9g
brOEM/xd4LlPrx1XqPeZ74JQ6K9mHR64RhKR7ZJJ9A+12yr5dVqihe911KyLKab9
4qZUHYi36WQu2VtLGnw/t8Jg44fQSzbBF5q9iTzcfNOYhRkSD3BdDrC3llywO7Ql
UGV0ZXIgV2VtbSA8cGV0ZXJAc3Bpbm5lci5kaWFsaXguY29tPokAlQMFEDGxEi1K
hjdh2JzjGQEBdA4EAKmNFlj8RF9HQsoI3UabnvYqAWN5wCwEB4u+Zf8zq6OHic23
TzoK1SPlmSdBE1dXXQGS6aiDkLT+xOdeewNs7nfUIcH/DBjSuklAOJzKliXPQW7E
kuKNwy4eq5bl+j3HB27i+WBXhn6OaNNQY674LGaR41EGq44Wo5ATcIicig/z
=gv+h
-----END PGP PUBLIC KEY BLOCK-----&a.joerg;
Type Bits/KeyID Date User ID
pub 1024/76A3F7B1 1996/04/27 Joerg Wunsch <joerg_wunsch@uriah.heep.sax.de>
Key fingerprint = DC 47 E6 E4 FF A6 E9 8F 93 21 E0 7D F9 12 D6 4E
Joerg Wunsch <joerg_wunsch@interface-business.de>
Joerg Wunsch <j@uriah.heep.sax.de>
Joerg Wunsch <j@interface-business.de>
-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: 2.6.3ia
mQCNAzGCFeAAAAEEAKmRBU2Nvc7nZy1Ouid61HunA/5hF4O91cXm71/KPaT7dskz
q5sFXvPJPpawwvqHPHfEbAK42ZaywyFp59L1GaYj87Pda+PlAYRJyY2DJl5/7JPe
ziq+7B8MdvbX6D526sdmcR+jPXPbHznASjkx9DPmK+7TgFujyXW7bjh2o/exAAUR
tC1Kb2VyZyBXdW5zY2ggPGpvZXJnX3d1bnNjaEB1cmlhaC5oZWVwLnNheC5kZT6J
AJUDBRA0FFkBs1pi61mfMj0BAfDCA/oCfkjrhvRwRCpSL8klJ1YDoUJdmw+v4nJc
pw3OpYXbwKOPLClsE7K3KCQscHel7auf91nrekAwbrXv9Clp0TegYeAQNjw5vZ9f
L6UZ5l3fH8E2GGA7+kqgNWs1KxAnG5GdUvJ9viyrWm8dqWRGo+loDWlZ12L2OgAD
fp7jVZTI1okAlQMFEDQPrLoff6kIA1j8vQEB2XQEAK/+SsQPCT/X4RB/PBbxUr28
GpGJMn3AafAaA3plYw3nb4ONbqEw9tJtofAn4UeGraiWw8nHYR2DAzoAjR6OzuX3
TtUV+57BIzrTPHcNkb6h8fPuHU+dFzR+LNoPaGJsFeov6w+Ug6qS9wa5FGDAgaRo
LHSyBxcRVoCbOEaS5S5EiQCVAwUQM5BktWVgqaw0+fnVAQGKPwP+OiWho3Zm2GKp
lEjiZ5zx3y8upzb+r1Qutb08jr2Ewja04hLg0fCrt6Ad3DoVqxe4POghIpmHM4O4
tcW92THQil70CLzfCxtfUc6eDzoP3krD1/Gwpm2hGrmYA9b/ez9+r2vKBbnUhPmC
glx5pf1IzHU9R2XyQz9Xu7FI2baOSZqJAJUDBRAyCIWZdbtuOHaj97EBAVMzA/41
VIph36l+yO9WGKkEB+NYbYOz2W/kyi74kXLvLdTXcRYFaCSZORSsQKPGNMrPZUoL
oAKxE25AoCgl5towqr/sCcu0A0MMvJddUvlQ2T+ylSpGmWchqoXCN7FdGyxrZ5zz
xzLIvtcio6kaHd76XxyJpltCASupdD53nEtxnu8sRrQxSm9lcmcgV3Vuc2NoIDxq
b2VyZ193dW5zY2hAaW50ZXJmYWNlLWJ1c2luZXNzLmRlPokAlQMFEDIIhfR1u244
dqP3sQEBWoID/RhBm+qtW+hu2fqAj9d8CVgEKJugrxZIpXuCKFvO+bCgQtogt9EX
+TJh4s8UUdcFkyEIu8CT2C3Rrr1grvckfxvrTgzSzvtYyv1072X3GkVY+SlUMBMA
rdl1qNW23oT7Q558ajnsaL065XJ5m7HacgTTikiofYG8i1s7TrsEeq6PtCJKb2Vy
ZyBXdW5zY2ggPGpAdXJpYWguaGVlcC5zYXguZGU+iQCVAwUQMaS91D4gHQUlG9CZ
AQGYOwQAhPpiobK3d/fz+jWrbQgjkoO+j39glYGXb22+6iuEprFRs/ufKYtjljNT
NK3B4DWSkyIPawcuO4Lotijp6jke2bsjFSSashGWcsJlpnwsv7EeFItT3oWTTTQQ
ItPbtNyLW6M6xB+jLGtaAvJqfOlzgO9BLfHuA2LY+WvbVW447SWJAJUDBRAxqWRs
dbtuOHaj97EBAXDBA/49rzZB5akkTSbt/gNd38OJgC+H8N5da25vV9dD3KoAvXfW
fw7OxIsxvQ/Ab+rJmukrrWxPdsC+1WU1+1rGa4PvJp/VJRDes2awGrn+iO7/cQoS
IVziC27JpcbvjLvLVcBIiy1yT/RvJ+87a3jPRHt3VFGcpFh4KykxxSNiyGygl4kA
lQMFEDGCUB31FVv7jlQtXQEB5KgD/iIJZe5lFkPr2B/Cr7BKMVBot1/JSu05NsHg
JZ3uK15w4mVtNPZcFi/dKbn+qRM6LKDFe/GF0HZD/ZD1FJt8yQjzF2w340B+F2GG
EOwnClqZDtEAqnIBzM/ECQQqH+6Bi8gpkFZrFgg5eON7ikqmusDnOlYStM/CBfgp
SbR8kDmFtCZKb2VyZyBXdW5zY2ggPGpAaW50ZXJmYWNlLWJ1c2luZXNzLmRlPokA
lQMFEDHioSdlYKmsNPn51QEByz8D/10uMrwP7MdaXnptd1XNFhpaAPYTVAOcaKlY
OGI/LLR9PiU3FbqXO+7INhaxFjBxa0Tw/p4au5Lq1+Mx81edHniJZNS8tz3I3goi
jIC3+jn2gnVAWnK5UZUTUVUn/JLVk/oSaIJNIMMDaw4J9xPVVkb+Fh1A+XqtPsVa
YESrNp0+iQCVAwUQMwXkzcdm8Q+/vPRJAQEA4QQAgNNX1HFgXrMetDb+w6yEGQDk
JCDAY9b6mA2HNeKLQAhsoZl4HwA1+iuQaCgo3lyFC+1Sf097OUTs74z5X1vCedqV
oFw9CxI3xuctt3pJCbbN68flOlnq0WdYouWWGlFwLlh5PEy//VtwX9lqgsizlhzi
t+fX6BT4BgKi5baDhrWJAJUDBRAyCKveD9eCJxX4hUkBAebMA/9mRPy6K6i7TX2R
jUKSl2p5oYrXPk12Zsw4ijuktslxzQhOCyMSCGK2UEC4UM9MXp1H1JZQxN/DcfnM
7VaUt+Ve0wZ6DC9gBSHJ1hKVxHe5XTj26mIr4rcXNy2XEDMK9QsnBxIAZnBVTjSO
LdhqqSMp3ULLOpBlRL2RYrqi27IXr4kAlQMFEDGpbnd1u244dqP3sQEBJnQD/RVS
Azgf4uorv3fpbosI0LE3LUufAYGBSJNJnskeKyudZkNkI5zGGDwVneH/cSkKT4OR
ooeqcTBxKeMaMuXPVl30QahgNwWjfuTvl5OZ8orsQGGWIn5FhqYXsKkjEGxIOBOf
vvlVQ0UbcR0N2+5F6Mb5GqrXZpIesn7jFJpkQKPU
=97h7
-----END PGP PUBLIC KEY BLOCK-----Developers&a.wosch;
Type Bits/KeyID Date User ID
pub 1024/2B7181AD 1997/08/09 Wolfram Schneider <wosch@FreeBSD.org>
Key fingerprint = CA 16 91 D9 75 33 F1 07 1B F0 B4 9F 3E 95 B6 09
-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: 2.6.3ia
mQCNAzPs+aEAAAEEAJqqMm2I9CxWMuHDvuVO/uh0QT0az5ByOktwYLxGXQmqPG1G
Q3hVuHWYs5Vfm/ARU9CRcVHFyqGQ3LepoRhDHk+JcASHan7ptdFsz7xk1iNNEoe0
vE2rns38HIbiyQ/2OZd4XsyhFOFtExNoBuyDyNoe3HbHVBQT7TmN/mkrcYGtAAUR
tCVXb2xmcmFtIFNjaG5laWRlciA8d29zY2hARnJlZUJTRC5vcmc+iQCVAwUQNxnH
AzmN/mkrcYGtAQF5vgP/SLOiI4AwuPHGwUFkwWPRtRzYSySXqwaPCop5mVak27wk
pCxGdzoJO2UgcE812Jt92Qas91yTT0gsSvOVNATaf0TM3KnKg5ZXT1QIzYevWtuv
2ovAG4au3lwiFPDJstnNAPcgLF3OPni5RCUqBjpZFhb/8YDfWYsMcyn4IEaJKre0
JFdvbGZyYW0gU2NobmVpZGVyIDxzY2huZWlkZXJAemliLmRlPokAlQMFEDcZxu85
jf5pK3GBrQEBCRgD/jPj1Ogx4O769soiguL1XEHcxhqtrpKZkKwxmDLRa0kJFwLp
bBJ3Qz3vwaB7n5gQU0JiL1B2M7IxVeHbiIV5pKp7FD248sm+HZvBg6aSnCg2JPUh
sHd1tK5X4SB5cjFt3Cj0LIN9/c9EUxm3SoML9bovmze60DckErrRNOuTk1IntCJX
b2xmcmFtIFNjaG5laWRlciA8d29zY2hAYXBmZWwuZGU+iQEVAwUQNmfWXAjJLLJO
sC7dAQEASAgAnE4g2fwMmFkQy17ATivljEaDZN/m0GdXHctdZ8CaPrWk/9/PTNK+
U6xCewqIKVwtqxVBMU1VpXUhWXfANWCB7a07D+2GrlB9JwO5NMFJ6g0WI/GCUXjC
xb3NTkNsvppL8Rdgc8wc4f23GG4CXVggdTD2oUjUH5Bl7afgOT4xLPAqePhS7hFB
UnMsbA94OfxPtHe5oqyaXt6cXH/SgphRhzPPZq0yjg0Ef+zfHVamvZ6Xl2aLZmSv
Cc/rb0ShYDYi39ly9OPPiBPGbSVw2Gg804qx3XAKiTFkLsbYQnRt7WuCPsOVjFkf
CbQS31TaclOyzenZdCAezubGIcrJAKZjMIkAlQMFEDPs+aE5jf5pK3GBrQEBlIAD
/3CRq6P0m1fi9fbPxnptuipnoFB/m3yF6IdhM8kSe4XlXcm7tS60gxQKZgBO3bDA
5QANcHdl41Vg95yBAZepPie6iQeAAoylRrONeIy6XShjx3S0WKmA4+C8kBTL+vwa
UqF9YJ1qesZQtsXlkWp/Z7N12RkueVAVQ7wRPwfnz6E3tC5Xb2xmcmFtIFNjaG5l
aWRlciA8d29zY2hAcGFua2UuZGUuZnJlZWJzZC5vcmc+iQCVAwUQNxnEqTmN/mkr
cYGtAQFnpQP9EpRZdG6oYN7d5abvIMN82Z9x71a4QBER+R62mU47wqdRG2b6jMMh
3k07b2oiprVuPhRw/GEPPQevb6RRT6SD9CPYAGfK3MDE8ZkMj4d+7cZDRJQ35sxv
gAzQwuA9l7kS0mt5jFRPcEg5/KpuyehRLckjx8jpEM7cEJDHXhBIuVg=
=3V1R
-----END PGP PUBLIC KEY BLOCK-----&a.brian;
Type Bits/KeyID Date User ID
pub 1024/666A7421 1997/04/30 Brian Somers <brian@awfulhak.org>
Key fingerprint = 2D 91 BD C2 94 2C 46 8F 8F 09 C4 FC AD 12 3B 21
Brian Somers <brian@uk.FreeBSD.org>
Brian Somers <brian@OpenBSD.org>
Brian Somers <brian@FreeBSD.org>
-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: 2.6.3ia
mQCNAzNmogUAAAEEALdsjVsV2dzO8UU4EEo7z3nYuvB2Q6YJ8sBUYjB8/vfR5oZ9
7aEQjgY5//pXvS30rHUB9ghk4kIFSljzeMudE0K2zH5n2sxpLbBKWZRDLS7xnrDC
I3j9CNKwQBzMPs0fUT46gp96nf1X8wPiJXkDUEia/c0bRbXlLw7tvOdmanQhAAUR
tCFCcmlhbiBTb21lcnMgPGJyaWFuQGF3ZnVsaGFrLm9yZz6JAJUDBRA3Fjs4H3+p
CANY/L0BAZOxBACTZ1zPdaJzEdT4AfrebQbaU4ytEeodnVXZIkc8Il+LDlDOUAIe
k5PgnHTRM4yiwcZuYQrCDRFgdOofcFfRo0PD7mGFzd22qPGmbvHiDBCYCyhlkPXW
IDeoA1cX77JlU1NFdy0dZwuX7csaMlpjCkOPc7+856mr6pQi48zj7yZtrYkAlQMF
EDcUqZ2dZ0EADG4SFQEBEm0EAL2bBNc4vpxPrg3ATdZ/PekpL6lYj3s9pBf8f7eY
LXq438A/ywiWkrL74gXxcZ2Ey9AHZW+rbJPzUbrfMAgP3uWobeSvDyKRo1wtKnTY
Hy+OEIbBIHDmIUuK3L7KupBf7WAI46Q7fnyz0txvtRruDjvfoyl9/TSRfIKcaw2a
INh7iQCVAwUQNwyWpmdKPfFUsXG5AQEIrAQAmukv2u9ihcnO2Zaak265I+gYozu+
biAngdXNfhTGMeExFzdzQ8Qe7EJugMpIDEkJq2goY35sGitD+ogSVWECjcVbHIAP
M2u9axFGlK7fDOmmkH2ZWDMtwx2I5dZps3q2g9mY2O9Az5Yokp7GW7viSpWXHTRH
xOsuY6aze71U7RWJAHUDBRA3DAEvDuwDH3697LEBAWRHAv9XXkub6mir/DCxzKI2
AE3tek40lRfU6Iukjl/uzT9GXcL3uEjIewiPTwN+k4IL+qcCEdv8WZgv/tO45r59
IZQsicNaSAsKX/6Cxha6Hosg1jw4rjdyz13rgYRi/nreq5mJAJUDBRA2r0CM9p+f
Pnxlu7UBAYObA/40s5SwEpXTrePO78AoUFEa5Z4bgyxkpT7BVbq6m/oQtK509Xe2
M2y0XTLkd86oXpjyKzGzWq8T6ZTKNdF9+5LhS2ylJytdPq1AjDk2BocffWX4+pXn
RPiC6XcNdYGiQL8OTHvZESYQDiHeMfwA8WdMzFK1R80nJMwANYXjJJrLzYkAlQMF
EDNt51zvs7EFZlNtbQEBW0UD/jZB6UDdEFdhS0hxgahv5CxaQDWQbIEpAY9JL1yg
d1RWMKUFGXdRkWZmHEA4NvtwFFeam/HZm4yuGf8yldMyo84loTcVib7lKh4CumGx
FT5Pxeh/F8u9EeQzclRFSMhVl0BA2/HEGyjw0kbkprI/RD3pXD7ewTAUrj2O3XhE
InLgiQCVAwUQM3O9vWyr6JZzEUkFAQF9nAP9Hco0V/3Kl70N5ryPVgh41nUTd7Td
6fUjx8yPoSZLX8vVZ8XMyd8ULFmzsmA+2QG4HcKo/x/4s50O3o8c+o1qSYj0Tp+K
4Z8lneMVlgBNdrRcq4ijEgk0qGqSlsXyLElkVPEXAADBVgzf6yqvipDwXNVzl6e3
GPLE8U2TAnBFZX6JAJUDBRAzZqIFDu2852ZqdCEBATsuBACI3ofP7N3xuHSc7pWL
NsnFYVEc9utBaclcagxjLLzwPKzMBcLjNGyGXIZQNB0d4//UMUJcMS7vwZ8MIton
VubbnJVHuQvENloRRARtarF+LC7OLMCORrGtbt0FtYgvBaqtgXlNcKXD6hRT+ghR
bi3q34akA7Xw8tiFIxdVgSusALQjQnJpYW4gU29tZXJzIDxicmlhbkB1ay5GcmVl
QlNELm9yZz6JAJUDBRA3FLWcnWdBAAxuEhUBAcYYBACos9nKETuaH+z2h0Ws+IIY
mN9FEm8wpPUcQmX5GFhfBUQ+rJbflzv0jJ/f2ac9qJHgIIAlJ3pMkfMpU8UYHEuo
VCe4ZTU5sr4ZdBaF9kpm2OriFgZwIv4QAi7dCMu9ZwGRtZ3+z3DQsVSagucjZTIe
yTUR6K+7E3YXANQjOdqFZYkAlQMFEDcUpeQO7bznZmp0IQEB4HED/Ru3NjwWO1gl
xEiLTzRpU31Rh1Izw1lhVMVJkLAGBw9ieSkjvdIkuhqV1i+W4wKBClT0UOE28Kjp
WbBKPFIASRYzN4ySwpprsG5H45EFQosovYG/HPcMzXU2GMj0iwVTxnMq7I8oH588
ExHqfEN2ARD3ngmB2499ruyGl26pW/BftCBCcmlhbiBTb21lcnMgPGJyaWFuQE9w
ZW5CU0Qub3JnPokAlQMFEDcUtW6dZ0EADG4SFQEBQwsD/j9B/lkltIdnQdjOqR/b
dOBgJCtUf905y6kD+k4kbxeT1YAaA65KJ2o/Zj+i+69F2+BUJ/3kYB7prKwut2h0
ek1ZtncGxoAsQdFJ5JSeMkwUZ5qtGeCmVPb59+KPq3nU6p3RI8Bn77FzK//Qy+IW
/WFVJbf/6NCNCbyRiRjPbGl/iQCVAwUQNxSlyA7tvOdmanQhAQFzMAP/dvtsj3yB
C+seiy6fB/nS+NnKBoff3Ekv57FsZraGt4z9n4sW61eywaiRzuKlhHqrDE17STKa
fBOaV1Ntl7js7og5IFPWNlVh1cK+spDmd655D8pyshziDF6fSAsqGfTn35xl23Xj
O20MMK44j4I5V6rEyUDBDrmX49J56OFkfwa0IEJyaWFuIFNvbWVycyA8YnJpYW5A
RnJlZUJTRC5vcmc+iQCVAwUQNxS1Y51nQQAMbhIVAQHPBQP+IMUlE4DtEvSZFtG4
YK9usfHSkStIafh/F/JzSsqdceLZgwcuifbemw79Rhvqhp0Cyp7kuI2kHO3a19kZ
3ZXlDl3VDg41SV/Z5LzNw9vaZKuF/vtGaktOjac5E5aznWGIA5czwsRgydEOcd8O
VPMUMrdNWRI6XROtnbZaRSwmD8aJAJUDBRA3FKWuDu2852ZqdCEBAWVJA/4x3Mje
QKV+KQoO6mOyoIcD4GK1DjWDvNHGujJbFGBmARjr/PCm2cq42cPzBxnfRhCfyEvN
aesNB0NjLjRU/m7ziyVn92flAzHqqmU36aEdqooXUY2T3vOYzo+bM7VtInarG1iU
qw1G19GgXUwUkPvy9+dNIM/aYoI/e0Iv3P9uug==
=R3k0
-----END PGP PUBLIC KEY BLOCK-----
diff --git a/en_US.ISO8859-1/books/handbook/policies/chapter.sgml b/en_US.ISO8859-1/books/handbook/policies/chapter.sgml
index 76f8f4f2d6..83cf490b8a 100644
--- a/en_US.ISO8859-1/books/handbook/policies/chapter.sgml
+++ b/en_US.ISO8859-1/books/handbook/policies/chapter.sgml
@@ -1,391 +1,391 @@
Source Tree Guidelines and PoliciesContributed by &a.phk;.This chapter documents various guidelines and policies in force for
the FreeBSD source tree.MAINTAINER on MakefilesJune 1996.If a particular portion of the FreeBSD distribution is being
maintained by a person or group of persons, they can communicate this
fact to the world by adding a
MAINTAINER= email-addresses
line to the Makefiles covering this portion of the
source tree.The semantics of this are as follows:The maintainer owns and is responsible for that code. This means
that he is responsible for fixing bugs and answer problem reports
pertaining to that piece of the code, and in the case of contributed
software, for tracking new versions, as appropriate.Changes to directories which have a maintainer defined shall be sent
to the maintainer for review before being committed. Only if the
maintainer does not respond for an unacceptable period of time, to
several emails, will it be acceptable to commit changes without review
by the maintainer. However, it is suggested that you try and have the
changes reviewed by someone else if at all possible.It is of course not acceptable to add a person or group as
maintainer unless they agree to assume this duty. On the other hand it
doesn't have to be a committer and it can easily be a group of
people.Contributed SoftwareContributed by &a.phk; and &a.obrien;. June 1996.Some parts of the FreeBSD distribution consist of software that is
actively being maintained outside the FreeBSD project. For historical
reasons, we call this contributed software. Some
examples are perl, gcc and patch.Over the last couple of years, various methods have been used in
dealing with this type of software and all have some number of
advantages and drawbacks. No clear winner has emerged.Since this is the case, after some debate one of these methods has
been selected as the “official” method and will be required
for future imports of software of this kind. Furthermore, it is
strongly suggested that existing contributed software converge on this
model over time, as it has significant advantages over the old method,
including the ability to easily obtain diffs relative to the
“official” versions of the source by everyone (even without
cvs access). This will make it significantly easier to return changes
to the primary developers of the contributed software.Ultimately, however, it comes down to the people actually doing the
work. If using this model is particularly unsuited to the package being
dealt with, exceptions to these rules may be granted only with the
approval of the core team and with the general consensus of the other
developers. The ability to maintain the package in the future will be a
key issue in the decisions.Because of some unfortunate design limitations with the RCS file
format and CVS's use of vendor branches, minor, trivial and/or
cosmetic changes are strongly discouraged on
files that are still tracking the vendor branch. “Spelling
fixes” are explicitly included here under the
“cosmetic” category and are to be avoided for files with
revision 1.1.x.x. The repository bloat impact from a single character
change can be rather dramatic.The Tcl embedded programming
language will be used as example of how this model works:src/contrib/tcl contains the source as
distributed by the maintainers of this package. Parts that are entirely
not applicable for FreeBSD can be removed. In the case of Tcl, the
mac, win and
compat subdirectories were eliminated before the
importsrc/lib/libtcl contains only a "bmake style"
Makefile that uses the standard
bsd.lib.mk makefile rules to produce the library
and install the documentation.src/usr.bin/tclsh contains only a bmake style
Makefile which will produce and install the
tclsh program and its associated man-pages using the
standard bsd.prog.mk rules.src/tools/tools/tcl_bmake contains a couple of
shell-scripts that can be of help when the tcl software needs updating.
These are not part of the built or installed software.The important thing here is that the
src/contrib/tcl directory is created according to
the rules: It is supposed to contain the sources as distributed (on a
proper CVS vendor-branch and without RCS keyword expansion) with as few
FreeBSD-specific changes as possible. The 'easy-import' tool on
freefall will assist in doing the import, but if there are any doubts on
how to go about it, it is imperative that you ask first and not blunder
ahead and hope it “works out”. CVS is not forgiving of
import accidents and a fair amount of effort is required to back out
major mistakes.Because of the previously mentioned design limitations with CVS's
vendor branches, it is required that “official” patches from
the vendor be applied to the original distributed sources and the result
re-imported onto the vendor branch again. Official patches should never
be patched into the FreeBSD checked out version and "committed", as this
destroys the vendor branch coherency and makes importing future versions
rather difficult as there will be conflicts.Since many packages contain files that are meant for compatibility
with other architectures and environments that FreeBSD, it is
permissible to remove parts of the distribution tree that are of no
interest to FreeBSD in order to save space. Files containing copyright
notices and release-note kind of information applicable to the remaining
files shall not be removed.If it seems easier, the bmakeMakefiles can be produced from the dist tree
automatically by some utility, something which would hopefully make it
even easier to upgrade to a new version. If this is done, be sure to
check in such utilities (as necessary) in the
src/tools directory along with the port itself so
that it is available to future maintainers.In the src/contrib/tcl level directory, a file
called FREEBSD-upgrade should be added and it
should states things like:Which files have been left outWhere the original distribution was obtained from and/or the
official master site.Where to send patches back to the original authorsPerhaps an overview of the FreeBSD-specific changes that have
been made.However, please do not import FREEBSD-upgrade
with the contributed source. Rather you should cvs add
FREEBSD-upgrade ; cvs ci after the initial import. Example
wording from src/contrib/cpio is below:
This directory contains virgin sources of the original distribution files
on a "vendor" branch. Do not, under any circumstances, attempt to upgrade
the files in this directory via patches and a cvs commit. New versions or
official-patch versions must be imported. Please remember to import with
"-ko" to prevent CVS from corrupting any vendor RCS Ids.
For the import of GNU cpio 2.4.2, the following files were removed:
INSTALL cpio.info mkdir.c
Makefile.in cpio.texi mkinstalldirs
To upgrade to a newer version of cpio, when it is available:
1. Unpack the new version into an empty directory.
[Do not make ANY changes to the files.]
2. Remove the files listed above and any others that don't apply to
FreeBSD.
3. Use the command:
cvs import -ko -m 'Virgin import of GNU cpio v<version>' \
src/contrib/cpio GNU cpio_<version>
For example, to do the import of version 2.4.2, I typed:
cvs import -ko -m 'Virgin import of GNU v2.4.2' \
src/contrib/cpio GNU cpio_2_4_2
4. Follow the instructions printed out in step 3 to resolve any
conflicts between local FreeBSD changes and the newer version.
Do not, under any circumstances, deviate from this procedure.
To make local changes to cpio, simply patch and commit to the main
branch (aka HEAD). Never make local changes on the GNU branch.
All local changes should be submitted to "cpio@gnu.ai.mit.edu" for
inclusion in the next vendor release.
-obrien@freebsd.org - 30 March 1997
+obrien@FreeBSD.org - 30 March 1997
Encumbered filesIt might occasionally be necessary to include an encumbered file in
the FreeBSD source tree. For example, if a device requires a small
piece of binary code to be loaded to it before the device will operate,
and we do not have the source to that code, then the binary file is said
to be encumbered. The following policies apply to including encumbered
files in the FreeBSD source tree.Any file which is interpreted or executed by the system CPU(s)
and not in source format is encumbered.Any file with a license more restrictive than BSD or GNU is
encumbered.A file which contains downloadable binary data for use by the
hardware is not encumbered, unless (1) or (2) apply to it. It must
be stored in an architecture neutral ASCII format (file2c or
uuencoding is recommended).Any encumbered file requires specific approval from the Core team before it is added to the
CVS repository.Encumbered files go in src/contrib or
src/sys/contrib.The entire module should be kept together. There is no point in
splitting it, unless there is code-sharing with non-encumbered
code.Object files are named
arch/filename.o.uu>.Kernel files;Should always be referenced in
conf/files.* (for build simplicity).Should always be in LINT, but the Core team decides per case if it
should be commented out or not. The Core team can, of course, change
their minds later on.The Release Engineer
decides whether or not it goes in to the release.User-land files;The Core team decides if
the code should be part of make world.The Release Engineer
decides if it goes in to the release.Shared LibrariesContributed by &a.asami;, &a.peter;, and &a.obrien; 9
December 1996.If you are adding shared library support to a port or other piece of
software that doesn't have one, the version numbers should follow these
rules. Generally, the resulting numbers will have nothing to do with
the release version of the software.The three principles of shared library building are:Start from 1.0If there is a change that is backwards compatible, bump minor
numberIf there is an incompatible change, bump major numberFor instance, added functions and bugfixes result in the minor
version number being bumped, while deleted functions, changed function
call syntax etc. will force the major version number to change.Stick to version numbers of the form major.minor
(x.y). Our
dynamic linker does not handle version numbers of the form
x.y.z
well. Any version number after the y
(ie. the third digit) is totally ignored when comparing shared lib
version numbers to decide which library to link with. Given two shared
libraries that differ only in the “micro” revision,
ld.so will link with the higher one. Ie: if you link
with libfoo.so.3.3.3, the linker only records
3.3 in the headers, and will link with anything
starting with
libfoo.so.3.(anything >=
3).(highest
available).ld.so will always use the highest
“minor” revision. Ie: it will use
libc.so.2.2 in preference to
libc.so.2.0, even if the program was initially
linked with libc.so.2.0.For non-port libraries, it is also our policy to change the shared
library version number only once between releases. When you make a
change to a system library that requires the version number to be
bumped, check the Makefile's commit logs. It is the
responsibility of the committer to ensure that the first such change
since the release will result in the shared library version number in
the Makefile to be updated, and any subsequent
changes will not.
diff --git a/en_US.ISO8859-1/books/handbook/ports/chapter.sgml b/en_US.ISO8859-1/books/handbook/ports/chapter.sgml
index 48f3214119..e4fe0a0efd 100644
--- a/en_US.ISO8859-1/books/handbook/ports/chapter.sgml
+++ b/en_US.ISO8859-1/books/handbook/ports/chapter.sgml
@@ -1,4660 +1,4660 @@
Installing Applications: The Ports collectionContributed by &a.jraynard;.The FreeBSD Ports collection allows you to compile and install a very
wide range of applications with a minimum of effort.For all the hype about open standards, getting a program to work on
different versions of Unix in the real world can be a tedious and tricky
business, as anyone who has tried it will know. You may be lucky enough
to find that the program you want will compile cleanly on your system,
install itself in all the right places and run flawlessly “out of
the box”, but this is unfortunately rather rare. With most
programs, you will find yourself doing a fair bit of head-scratching, and
there are quite a few programs that will result in premature greying, or
even chronic alopecia...Some software distributions have attacked this problem by providing
configuration scripts. Some of these are very clever, but they have an
unfortunate tendency to triumphantly announce that your system is
something you have never heard of and then ask you lots of questions that
sound like a final exam in system-level Unix programming (Does
your system's gethitlist function return a const pointer to a fromboz or
a pointer to a const fromboz? Do you have Foonix style unacceptable
exception handling? And if not, why not?).Fortunately, with the Ports collection, all the hard work involved has
already been done, and you can just type make install
and get a working program.Why Have a Ports Collection?The base FreeBSD system comes with a very wide range of tools and
system utilities, but a lot of popular programs are not in the base
system, for good reasons:-Programs that some people cannot live without and other people
cannot stand, such as a certain Lisp-based editor.Programs which are too specialised to put in the base system
(CAD, databases).Programs which fall into the “I must have a look at that
when I get a spare minute” category, rather than
system-critical ones (some languages, perhaps).Programs that are far too much fun to be supplied with a serious
operating system like FreeBSD ;-)However many programs you put in the base system, people will
always want more, and a line has to be drawn somewhere (otherwise
FreeBSD distributions would become absolutely enormous).Obviously it would be unreasonable to expect everyone to port their
favourite programs by hand (not to mention a tremendous amount of
duplicated work), so the FreeBSD Project came up with an ingenious way
of using standard tools that would automate the process.Incidentally, this is an excellent illustration of how “the
Unix way” works in practice by combining a set of simple but very
flexible tools into something very powerful.How Does the Ports Collection Work?Programs are typically distributed on the Internet as a tarball consisting of a Makefile and
the source code for the program and usually some instructions (which are
unfortunately not always as instructive as they could be), with perhaps
a configuration script.The standard scenario is that you FTP down the tarball, extract it
somewhere, glance through the instructions, make any changes that seem
necessary, run the configure script to set things up and use the
standard make program to compile and install the
program from the source.FreeBSD ports still use the tarball mechanism, but use a skeleton to hold the
"knowledge" of how to get the program working on FreeBSD,
rather than expecting the user to be able to work it out. They also
supply their own customised Makefile, so that almost every port
can be built in the same way.If you look at a port skeleton (either on your FreeBSD
system or the
FTP site) and expect to find all sorts of pointy-headed rocket
science lurking there, you may be disappointed by the one or two rather
unexciting-looking files and directories you find there. (We will
discuss in a minute how to go about Getting a port).“How on earth can this do anything?” I hear you cry.
“There is no source code there!”Fear not, gentle reader, all will become clear (hopefully). Let us
see what happens if we try and install a port. I have chosen
ElectricFence, a useful tool for developers,
as the skeleton is more straightforward than most.If you are trying this at home, you will need to be root.&prompt.root; cd /usr/ports/devel/ElectricFence
&prompt.root; make install
>> Checksum OK for ElectricFence-2.0.5.tar.gz.
===> Extracting for ElectricFence-2.0.5
===> Patching for ElectricFence-2.0.5
===> Applying FreeBSD patches for ElectricFence-2.0.5
===> Configuring for ElectricFence-2.0.5
===> Building for ElectricFence-2.0.5
[lots of compiler output...]
===> Installing for ElectricFence-2.0.5
===> Warning: your umask is "0002". If this is not desired, set it to
an appropriate value and install this port again by ``make reinstall''.
install -c -o root -g wheel -m 444 /usr/ports/devel/ElectricFence/work/ElectricFence-2.0.5/libefence.a /usr/local/lib
install -c -o root -g wheel -m 444 /usr/ports/devel/ElectricFence/work/ElectricFence-2.0.5/libefence.3 /usr/local/man/man3
===> Compressing manual pages for ElectricFence-2.0.5
===> Registering installation for ElectricFence-2.0.5To avoid confusing the issue, I have completely removed the build
output.If you tried this yourself, you may well have got something like
this at the start:-&prompt.root; make install
>> ElectricFence-2.0.5.tar.gz doesn't seem to exist on this system.
>> Attempting to fetch from ftp://ftp.doc.ic.ac.uk/Mirrors/sunsite.unc.edu/pub/Linux/devel/lang/c/.The make program has noticed that you did not
have a local copy of the source code and tried to FTP it down so it
could get the job done. I already had the source handy in my example,
so it did not need to fetch it.Let's go through this and see what the make
program was doing.Locate the source code tarball. If it is not available
locally, try to grab it from an FTP site.Run a checksum test on the
tarball to make sure it has not been tampered with, accidentally
truncated, downloaded in ASCII mode, struck by neutrinos while in
transit, etc.Extract the tarball into a temporary work directory.Apply any patches needed to
get the source to compile and run under FreeBSD.Run any configuration script required by the build process and
correctly answer any questions it asks.(Finally!) Compile the code.Install the program executable and other supporting files, man
pages, etc. under the /usr/local hierarchy
(unless this is an X11 program,
then it will be under /usr/X11R6),
where they will not get mixed up with system programs. This also
makes sure that all the ports you install will go in the same place,
instead of being flung all over your system.Register the installation in a database. This means that, if
you do not like the program, you can cleanly remove all traces of it from your
system.Scroll up to the make output and see if you can
match these steps to it. And if you were not impressed before, you
should be by now!Getting a FreeBSD PortThere are two ways of getting hold of the FreeBSD port for a
program. One requires a FreeBSD CDROM,
the other involves using an Internet
Connection.Compiling ports from CDROMAssuming that your FreeBSD CDROM is in the drive and mounted on
/cdrom (and the mount point
must be /cdrom), you should
then be able to build ports just as you normally do and the port
collection's built in search path should find the tarballs in
/cdrom/ports/distfiles/ (if they exist there)
rather than downloading them over the net.Another way of doing this, if you want to just use the port
skeletons on the CDROM, is to set these variables in
/etc/make.conf:
PORTSDIR= /cdrom/ports
DISTDIR= /tmp/distfiles
WRKDIRPREFIX= /tmpSubstitute /tmp for any place you have enough
free space. Then, just cd to the appropriate
subdirectory under /cdrom/ports and type
make install as usual.
WRKDIRPREFIX will cause the port to be build under
/tmp/cdrom/ports; for instance,
games/oneko will be built under
/tmp/cdrom/ports/games/oneko.There are some ports for which we cannot provide the original
source in the CDROM due to licensing limitations. In that case, you
will need to look at the section on Compiling ports using an Internet
connection.Compiling ports from the InternetIf you do not have a CDROM, or you want to make sure you get the
very latest version of the port you want, you will need to download
the skeleton for the port. Now
this might sound like rather a fiddly job full of pitfalls, but it is
actually very easy.First, if you are running a release version of FreeBSD, make sure
you get the appropriate “upgrade kit” for your release
from the ports web
page. These packages include files that have been updated
since the release that you may need to compile new ports.The key to the skeletons is that the FreeBSD FTP server can create
on-the-fly tarballs for you.
Here is how it works, with the gnats program in the databases
directory as an example (the bits in square brackets are comments. Do
not type them in if you are trying this yourself!):-&prompt.root; cd /usr/ports
&prompt.root; mkdir databases
&prompt.root; cd databases
&prompt.root; ftp ftp.FreeBSD.org
[log in as `ftp' and give your email address when asked for a
password. Remember to use binary (also known as image) mode!]
ftp>cd /pub/FreeBSD/ports/ports/databasesftp>get gnats.tar
[tars up the gnats skeleton for us]
ftp>quit
&prompt.root; tar xf gnats.tar
[extract the gnats skeleton]
&prompt.root; cd gnats
&prompt.root; make install
[build and install gnats]What happened here? We connected to the FTP server in the usual
way and went to its databases sub-directory.
When we gave it the command get gnats.tar, the FTP
server tarred up the gnats
directory for us.We then extracted the gnats skeleton and went into the gnats
directory to build the port. As we explained earlier, the make process noticed we
did not have a copy of the source locally, so it fetched one before
extracting, patching and building it.Let us try something more ambitious now. Instead of getting a
single port skeleton, we will get a whole sub-directory, for example all
the database skeletons in the ports collection. It looks almost the
same:-&prompt.root; cd /usr/ports
&prompt.root; ftp ftp.FreeBSD.org
[log in as `ftp' and give your email address when asked for a
password. Remember to use binary (also known as image) mode!]
ftp>cd /pub/FreeBSD/ports/portsftp>get databases.tar
[tars up the databases directory for us]
ftp>quit
&prompt.root; tar xf databases.tar
[extract all the database skeletons]
&prompt.root; cd databases
&prompt.root; make install
[build and install all the database ports]With half a dozen straightforward commands, we have now got a set
of database programs on our FreeBSD machine! All we did that was
different from getting a single port skeleton and building it was that
we got a whole directory at once, and compiled everything in it at
once. Pretty impressive, no?If you expect to be installing many ports, it is probably worth
downloading all the ports directories.SkeletonsA team of compulsive hackers who have forgotten to eat in a frantic
attempt to make a deadline? Something unpleasant lurking in the FreeBSD
attic? No, a skeleton here is a minimal framework that supplies
everything needed to make the ports magic work.MakefileThe most important component of a skeleton is the Makefile. This
contains various statements that specify how the port should be
compiled and installed. Here is the Makefile for
ElectricFence:-
# New ports collection makefile for: Electric Fence
# Version required: 2.0.5
# Date created: 13 November 1997
# Whom: jraynard
#
# $Id$
#
DISTNAME= ElectricFence-2.0.5
CATEGORIES= devel
MASTER_SITES= ${MASTER_SITE_SUNSITE}
MASTER_SITE_SUBDIR= devel/lang/c
-MAINTAINER= jraynard@freebsd.org
+MAINTAINER= jraynard@FreeBSD.org
MAN3= libefence.3
do-install:
${INSTALL_DATA} ${WRKSRC}/libefence.a ${PREFIX}/lib
${INSTALL_MAN} ${WRKSRC}/libefence.3 ${PREFIX}/man/man3
.include <bsd.port.mk>The lines beginning with a "#" sign are comments for the
benefit of human readers (as in most Unix script files).DISTNAME specifies the name of the tarball, but without the
extension.CATEGORIES states what kind of program this is.
In this case, a utility for developers. See the categories section of this
handbook for a complete list.MASTER_SITES is the URL(s) of the master FTP
site, which is used to retrieve the tarball if it is not available on the
local system. This is a site which is regarded as reputable, and is
normally the one from which the program is officially distributed (in
so far as any software is "officially" distributed on the
Internet).MAINTAINER is the email address of the person
who is responsible for updating the skeleton if, for example a new
version of the program comes out.Skipping over the next few lines for a minute, the line
.include <bsd.port.mk> says that the other
statements and commands needed for this port are in a standard file
called bsd.port.mk. As these are the same for
all ports, there is no point in duplicating them all over the place,
so they are kept in a single standard file.This is probably not the place to go into a detailed examination
of how Makefiles work; suffice it to say that the line starting with
MAN3 ensures that the ElectricFence man page is
compressed after installation, to help conserve your precious disk
space. The original port did not provide an
install target, so the three lines from
do-install ensure that the files produced by
this port are placed in the correct destination.The files directoryThe file containing the checksum for the port is called
md5, after the MD5 algorithm used for ports
checksums. It lives in a directory with the slightly confusing name
of files.This directory can also contain other miscellaneous files that are
required by the port and do not belong anywhere else.The patches directoryThis directory contains the patches needed to make everything work
properly under FreeBSD.The pkg directoryThis program contains three quite useful files:-COMMENT — a one-line description of
the program.DESCR — a more detailed
description.PLIST — a list of all the files
that will be created when the program is installed.What to do when a port does not work.Oh. You can do one of four (4) things :Fix it yourself. Technical details on how ports work can be
found in Porting applications.Gripe. This is done by e-mail only! Send
such e-mail to the maintainer of the port, first. Type
make maintainer or read the
Makefile to find the maintainer's email
address. Remember to include the name/version of
the port (copy the $Id: line from the
Makefile), and the output leading up-to the
error, inclusive. If you do not get a satisfactory response,
you can try filing a bug report with send-pr.
Forget it. This is the easiest for most — very few of the
programs in ports can be classified as essential!Grab the pre-compiled package from a ftp server. The
“master” package collection is on FreeBSD's FTP server
in the packages
directory, though check your local mirror first, please!
These are more likely to work (on the whole) than trying to compile
from source and a lot faster besides! Use the &man.pkg.add.1;
program to install a package file on your
system.Some Questions and AnswersQ. I thought this was going to be a discussion about
modems??!A. Ah. You must be thinking of the serial ports on the back of
your computer. We are using “port” here to mean the
result of “porting” a program from one version of Unix
to another. (It is an unfortunate bad habit of computer people to
use the same word to refer to several completely different
things).Q. I thought you were supposed to use packages to install extra
programs?A. Yes, that is usually the quickest and easiest way of doing
it.Q. So why bother with ports then?A. Several reasons:-The licensing conditions on some software distributions
require that they be distributed as source code, not
binaries.Some people do not trust binary distributions. At least
with source code you can (in theory) read through it and look
for potential problems yourself.If you have some local patches, you will need the source to
add them yourself.You might have opinions on how a program should be compiled
that differ from the person who did the package — some
people have strong views on what optimisation setting should be
used, whether to build debug versions and then strip them or
not, etc. etc.Some people like having code around, so they can read it if
they get bored, hack around with it, borrow from it (licence
terms permitting, of course!) and so on.If you ain't got the source, it ain't software! ;-) Q. What is a patch?A. A patch is a small (usually) file that specifies how to go
from one version of a file to another. It contains text that says,
in effect, things like “delete line 23”, “add
these two lines after line 468” or “change line 197 to
this”. Also known as a “diff”, since it is
generated by a program of that name. Q. What is all this about
tarballs?A. It is a file ending in .tar or
.tar.gz (with variations like
.tar.Z, or even .tgz if
you are trying to squeeze the names into a DOS filesystem).Basically, it is a directory tree that has been archived into a
single file (.tar) and optionally compressed
(.gz). This technique was originally used for
Tape ARchives (hence the
name tar), but it is a widely used way of
distributing program source code around the Internet.You can see what files are in them, or even extract them
yourself, by using the standard Unix tar program, which comes with
the base FreeBSD system, like this:-&prompt.user; tar tvzf foobar.tar.gz
&prompt.user; tar xzvf foobar.tar.gz
&prompt.user; tar tvf foobar.tar
&prompt.user; tar xvf foobar.tar Q. And a checksum?A. It is a number generated by adding up all the data in the
file you want to check. If any of the characters change, the
checksum will no longer be equal to the total, so a simple
comparison will allow you to spot the difference. (In practice, it
is done in a more complicated way to spot problems like
position-swapping, which will not show up with a simplistic
addition).Q. I did what you said for compiling
ports from a CDROM and it worked great until I tried to
install the kermit port:-&prompt.root; make install
>> cku190.tar.gz doesn't seem to exist on this system.
>> Attempting to fetch from ftp://kermit.columbia.edu/kermit/archives/.Why can it not be found? Have I got a dud CDROM?A. The licensing terms for kermit do not allow us to put the
tarball for it on the CDROM, so you will have to fetch it by hand
— sorry! The reason why you got all those error messages was
because you were not connected to the Internet at the time. Once
you have downloaded it from any of the sites above, you can re-start
the process (try and choose the nearest site to you, though, to save
your time and the Internet's bandwidth).Q. I did that, but when I tried to put it into
/usr/ports/distfiles I got some error about not
having permission.A. The ports mechanism looks for the tarball in
/usr/ports/distfiles, but you will not be able
to copy anything there because it is sym-linked to the CDROM, which
is read-only. You can tell it to look somewhere else by
doing&prompt.root; make DISTDIR=/where/you/put/it installQ. Does the ports scheme only work if you have everything in
/usr/ports? My system administrator says I must
put everything under
/u/people/guests/wurzburger, but it does not
seem to work.A. You can use the PORTSDIR and
PREFIX variables to tell the ports mechanism to
use different directories. For instance,&prompt.root; make PORTSDIR=/u/people/guests/wurzburger/ports installwill compile the port in
/u/people/guests/wurzburger/ports and install
everything under /usr/local.&prompt.root; make PREFIX=/u/people/guests/wurzburger/local installwill compile it in /usr/ports and install
it in /u/people/guests/wurzburger/local.And of course&prompt.root; make PORTSDIR=.../ports PREFIX=.../local installwill combine the two (it is too long to fit on the page if I
write it in full, but I am sure you get the idea).If you do not fancy typing all that in every time you install a
port (and to be honest, who would?), it is a good idea to put these
variables into your environment.Q. I do not have a FreeBSD CDROM, but I would like to have all
the tarballs handy on my system so I do not have to wait for a
download every time I install a port. Is there an easy way to get
them all at once?A. To get every single tarball for the ports collection,
do&prompt.root; cd /usr/ports
&prompt.root; make fetchFor all the tarballs for a single ports directory, do&prompt.root; cd /usr/ports/directory
&prompt.root; make fetchand for just one port — well, I think you have guessed
already.Q. I know it is probably faster to fetch the tarballs from one
of the FreeBSD mirror sites close by. Is there any way to tell the
port to fetch them from servers other than ones listed in the
MASTER_SITES?A. Yes. If you know, for example, ftp.FreeBSD.ORG is much closer than sites
+ role="fqdn">ftp.FreeBSD.org is much closer than sites
listed in MASTER_SITES, do as following
example.&prompt.root; cd /usr/ports/directory
-&prompt.root; make MASTER_SITE_OVERRIDE=ftp://ftp.FreeBSD.ORG/pub/FreeBSD/ports/distfiles/ fetch
+&prompt.root; make MASTER_SITE_OVERRIDE=ftp://ftp.FreeBSD.org/pub/FreeBSD/ports/distfiles/ fetchQ. I want to know what files make is going to need before it
tries to pull them down.A. make fetch-list will display a list of
the files needed for a port.Q. Is there any way to stop the port from compiling? I want to
do some hacking on the source before I install it, but it is a bit
tiresome having to watch it and hit control-C every time.A. Doing make extract will stop it after it
has fetched and extracted the source code.Q. I am trying to make my own port and I want to be able to
stop it compiling until I have had a chance to see if my patches
worked properly. Is there something like make
extract, but for patches?A. Yep, make patch is what you want. You
will probably find the PATCH_DEBUG option useful
as well. And by the way, thank you for your efforts!Q. I have heard that some compiler options can cause bugs. Is
this true? How can I make sure that I compile ports with the right
settings?A. Yes, with version 2.6.3 of gcc (the
version shipped with FreeBSD 2.1.0 and 2.1.5), the
option could result in buggy code unless you
used the option as well.
(Most of the ports do not use ). You
should be able to specify the compiler options
used by something like&prompt.root; make CFLAGS='-O2 -fno-strength-reduce' installor by editing /etc/make.conf, but
unfortunately not all ports respect this. The surest way is to do
make configure, then go into the source directory
and inspect the Makefiles by hand, but this can get tedious if the
source has lots of sub-directories, each with their own
Makefiles.Q. There are so many ports it is hard to find the one I want.
Is there a list anywhere of what ports are available?A. Look in the INDEX file in
/usr/ports. If you would like to search the
ports collection for a keyword, you can do that too. For example,
you can find ports relevant to the LISP programming language
using:&prompt.user; cd /usr/ports
&prompt.user; make search key=lispQ. I went to install the foo port but the
system suddenly stopped compiling it and starting compiling the
bar port. What is going on?A. The foo port needs something that is
supplied with bar — for instance, if
foo uses graphics, bar might
have a library with useful graphics processing routines. Or
bar might be a tool that is needed to compile the
foo port. Q. I installed the
grizzle program from the ports and frankly it is
a complete waste of disk space. I want to delete it but I do not
know where it put all the files. Any clues?A. No problem, just do&prompt.root; pkg_delete grizzle-6.5Alternatively, you can do&prompt.root; cd /usr/ports/somewhere/grizzle
&prompt.root; make deinstall
Q. Hang on a minute, you have to know the version number to use
that command. You do not seriously expect me to remember that, do
you??A. Not at all, you can find it out by doing&prompt.root; pkg_info -a | grep grizzle
Information for grizzle-6.5:
grizzle-6.5 - the combined piano tutorial, LOGO interpreter and shoot 'em up arcade game.Q. Talking of disk space, the ports directory seems to be
taking up an awful lot of room. Is it safe to go in there and
delete things?A. Yes, if you have installed the program and are fairly
certain you will not need the source again, there is no point in
keeping it hanging around. The best way to do this is&prompt.root; cd /usr/ports
&prompt.root; make cleanwhich will go through all the ports subdirectories and delete
everything except the skeletons for each port.Q. I tried that and it still left all those tarballs or
whatever you called them in the distfiles
directory. Can I delete those as well?A. Yes, if you are sure you have finished with them, those can
go as well.Q. I like having lots and lots of programs to play with. Is
there any way of installing all the ports in one go?A. Just do&prompt.root; cd /usr/ports
&prompt.root; make installQ. OK, I tried that, but I thought it would take a very long
time so I went to bed and left it to get on with it. When I looked
at the computer this morning, it had only done three and a half
ports. Did something go wrong?A. No, the problem is that some of the ports need to ask you
questions that we cannot answer for you (eg “Do you want to
print on A4 or US letter sized paper?”) and they need to have
someone on hand to answer them.Q. I really do not want to spend all day staring at the
monitor. Any better ideas?A. OK, do this before you go to bed/work/the local
park:-&prompt.root cd /usr/ports
&prompt.root; make -DBATCH installThis will install every port that does not
require user input. Then, when you come back, do&prompt.root; cd /usr/ports
&prompt.root; make -DIS_INTERACTIVE installto finish the job.Q. At work, we are using frobble, which is
in your ports collection, but we have altered it quite a bit to get
it to do what we need. Is there any way of making our own packages,
so we can distribute it more easily around our sites?A. No problem, assuming you know how to make patches for your
changes:-&prompt.root; cd /usr/ports/somewhere/frobble
&prompt.root; make extract
&prompt.root; cd work/frobble-2.8
[Apply your patches]
&prompt.root; cd ../..
&prompt.root; make packageQ. This ports stuff is really clever. I am desperate to find
out how you did it. What is the secret?A. Nothing secret about it at all, just look at the
bsd.ports.mk and
bsd.ports.subdir.mk files in your makefiles
directory.Readers with an aversion to intricate shell-scripts are
advised not to follow this link...)Making a port yourselfContributed by &a.jkh;, &a.gpalmer;, &a.asami;, &a.obrien;,
and &a.hoek;. 28 August 1996.So, now you are interested in making your own port or upgrading
an existing one? Great!What follows are some guidelines for creating a new port for
FreeBSD. If you want to upgrade an existing port, you should read this
and then read .When this document is not sufficiently detailed, you should refer to
/usr/ports/Mk/bsd.port.mk, which all port Makefiles
include. Even if you do not hack Makefiles daily, it is well
commented, and you will still gain much knowledge from it.
Additionally, you may send specific questions to &a.ports;.Only a fraction of the overridable variables
(VAR) are mentioned in
this document. Most (if not all) are documented at the start of
bsd.port.mk. This file users a non-standard tab
setting. Emacs and
Vim should recognise the setting on loading
the file. Both vi and ex can be
set to use the correct value by typing :set tabstop=4
once the file has been loaded.Quick PortingThis section tells you how to do a quick port. In many cases, it
is not enough, but we will see.First, get the original tarball and put it into
DISTDIR, which defaults to
/usr/ports/distfiles.The following assumes that the software compiled out-of-the-box,
i.e., there was absolutely no change required for the port to work
on your FreeBSD box. If you needed to change something, you will
have to refer to the next section too.Writing the MakefileThe minimal Makefile would look something
like this:
# New ports collection makefile for: oneko
# Version required: 1.1b
# Date created: 5 December 1994
# Whom: asami
#
# $Id$
#
DISTNAME= oneko-1.1b
CATEGORIES= games
MASTER_SITES= ftp://ftp.cs.columbia.edu/archives/X11R5/contrib/
-MAINTAINER= asami@FreeBSD.ORG
+MAINTAINER= asami@FreeBSD.org
MAN1= oneko.1
MANCOMPRESSED= yes
USE_IMAKE= yes
.include <bsd.port.mk>See if you can figure it out. Do not worry about the contents
of the $Id$ line, it will be filled in
automatically by CVS when the port is imported to our main ports
tree. You can find a more detailed example in the sample Makefile section.Writing the description filesThere are three description files that are required for any
port, whether they actually package or not. They are
COMMENT, DESCR, and
PLIST, and reside in the
pkg subdirectory.COMMENTThis is the one-line description of the port.
Please do not include the package name (or
version number of the software) in the comment. The comment
should begin with a capital, and end without a period. Here
is an example:
A cat chasing a mouse all over the screenDESCRThis is a longer description of the port. One to a few
paragraphs concisely explaining what the port does is
sufficient.This is not a manual or an in-depth
description on how to use or compile the port! Please
be careful if you are copying from the
README or manpage; too often
they are not a concise description of the port or are in an
awkward format (e.g., manpages have justified spacing). If the
ported software has an official WWW homepage, you should list it
here. Prefix one of the websites with
WWW: so that automated tools will work
correctly.It is recommended that you sign your name at the end of this
file, as in:
This is a port of oneko, in which a cat chases a poor mouse all over
the screen.
:
(etc.)
WWW: http://www.oneko.org/
- Satoshi
asami@cs.berkeley.eduPLISTThis file lists all the files installed by the port. It is
also called the “packing list” because the package is
generated by packing the files listed here. The pathnames are
relative to the installation prefix (usually
/usr/local or
/usr/X11R6). If you are using the
MANn variables (as
you should be), do not list any manpages here.Here is a small example:
bin/oneko
lib/X11/app-defaults/Oneko
lib/X11/oneko/cat1.xpm
lib/X11/oneko/cat2.xpm
lib/X11/oneko/mouse.xpm
@dirrm lib/X11/onekoRefer to the &man.pkg.create.1; man page for details on the
packing list.You should list all the files, but not the name directories,
in the list. Also, if the port creates directories for itself
during installtion, make sure to add @dirrm
lines as necessary to remove them when the port is
deleted.It is recommended that you keep all the filenames in this
file sorted alphabetically. It will make verifying the changes
when you upgrade the port much easier.Creating a packing list manually can be a very tedious
task. If the port installs a large numbers of files, creating the packing list
automatically might save time.Creating the checksum fileJust type make makesum. The ports make rules
will automatically generate the file
files/md5.Testing the portYou should make sure that the port rules do exactly what you
want it to do, including packaging up the port. These are the
important points you need to verify.PLIST does not contain anything not
installed by your portPLIST contains everything that is
installed by your portYour port can be installed multiple times using the
reinstall targetYour port cleans up
after itself upon deinstallRecommended test orderingmake installmake packagemake deinstallpkg_add package-namemake deinstallmake reinstallmake packageMake sure that there are not any warnings issued in any of the
package and
deinstall stages, After step 3, check to
see if all the new directories are correctly deleted. Also, try
using the software after step 4, to ensure that is works correctly
when installed from a package.Checking your port with portlintPlease use portlint to see if your port
conforms to our guidelines. The portlint program
is part of the ports collection. In particular, your may want to
check if the Makefile is in
the right shape and the package is named
appropriately.Submitting the portFirst, make sure you have read the Do's and Dont's section.Now that you are happy with your port, the only thing remaining
is to put it in the main FreeBSD ports tree and make everybody else
happy about it too. We do not need your work
directory or the pkgname.tgz package, so delete
them now. Next, simply include the output of shar `find
port_dir` in a bug report and send it with the
&man.send-pr.1; program (see Bug
Reports and General Commentary for more information about
&man.send-pr.1;. If the uncompressed port is larger than 20KB,
you should compress it into a tarfile and use &man.uuencode.1;
before including it in the bug report (uuencoded tarfiles are
acceptable even if the bug report is smaller than 20KB but are not
preferred). Be sure to classify the bug report as category
ports and class
change-request. (Do not mark the report
confidential!)One more time, do not include the original source
distfile, the work directory, or the package
you built with make package.In the past, we asked you to upload new port submissions in
our ftp site (ftp.FreeBSD.org). This
is no longer recommended as read access is turned off on that
incoming/ directory of that site due to the
large amount of pirated software showing up there.We will look at your port, get back to you if necessary, and put
it in the tree. Your name will also appear in the list of
“Additional FreeBSD contributors” on the FreeBSD
Handbook and other files. Isn't that great?!? :)Slow PortingOk, so it was not that simple, and the port required some
modifications to get it to work. In this section, we will explain,
step by step, how to modify it to get it to work with the ports
paradigm.How things workFirst, this is the sequence of events which occurs when the user
first types make in your port's directory, and
you may find that having bsd.port.mk in another
window while you read this really helps to understand it.But do not worry if you do not really understand what
bsd.port.mk is doing, not many people do...
:>The fetch target is run. The
fetch target is responsible for making
sure that the tarball exists locally in
DISTDIR. If fetch
cannot find the required files in DISTDIR it
will look up the URL MASTER_SITES, which is
set in the Makefile, as well as our main ftp site at ftp://ftp.FreeBSD.org/pub/FreeBSD/ports/distfiles/,
where we put sanctioned distfiles as backup. It will then
attempt to fetch the named distribution file with
FETCH, assuming that the requesting site has
direct access to the Internet. If that succeeds, it will save
the file in DISTDIR for future use and
proceed.The extract target is run. It
looks for your port's distribution file (typically a gzip'd
tarball) in DISTDIR and unpacks it into a
temporary subdirectory specified by WRKDIR
(defaults to work).The patch target is run. First,
any patches defined in PATCHFILES are
applied. Second, if any patches are found in
PATCHDIR (defaults to the
patches subdirectory), they are applied at
this time in alphabetical order.The configure target is run. This
can do any one of many different things.If it exists, scripts/configure is
run.If HAS_CONFIGURE or
GNU_CONFIGURE is set,
WRKSRC/configure is
run.If USE_IMAKE is set,
XMKMF (default: xmkmf
-a) is run.The build target is run. This is
responsible for descending into the port's private working
directory (WRKSRC) and building it. If
USE_GMAKE is set, GNU make
will be used, otherwise the system make will
be used.The above are the default actions. In addition, you can define
targets
pre-something or
post-something,
or put scripts with those names, in the scripts
subdirectory, and they will be run before or after the default
actions are done.For example, if you have a post-extract
target defined in your Makefile, and a file
pre-build in the scripts
subdirectory, the post-extract target will
be called after the regular extraction actions, and the
pre-build script will be executed before the
default build rules are done. It is recommended that you use
Makefile targets if the actions are simple
enough, because it will be easier for someone to figure out what
kind of non-default action the port requires.The default actions are done by the
bsd.port.mk targets
do-something.
For example, the commands to extract a port are in the target
do-extract. If you are not happy with the
default target, you can fix it by redefining the
do-something
target in your Makefile.The “main” targets (e.g.,
extract,
configure, etc.) do nothing more than
make sure all the stages up to that one are completed and call
the real targets or scripts, and they are not intended to be
changed. If you want to fix the extraction, fix
do-extract, but never ever touch
extract!Now that you understand what goes on when the user types
make, let us go through the recommended steps to
create the perfect port.Getting the original sourcesGet the original sources (normally) as a compressed tarball
(foo.tar.gz or
foo.tar.Z) and copy
it into DISTDIR. Always use
mainstream sources when and where you
can.If you cannot find a ftp/http site that is well-connected to the
net, or can only find sites that have irritatingly non-standard
formats, you might want to put a copy on a reliable ftp or http
server that you control (e.g., your home page). Make sure you set
MASTER_SITES to reflect your choice.If you cannot find somewhere convenient and reliable to put the
distfile (if you are a FreeBSD committer, you can just put it in
your public_html/ directory on
freefall), we can “house” it ourselves
by putting it on
ftp://ftp.FreeBSD.org/pub/FreeBSD/ports/distfiles/LOCAL_PORTS/
as the last resort. Please refer to this location as
MASTER_SITE_LOCAL. Send mail to the &a.ports;if
you are not sure what to do.If your port's distfile changes all the time for no good reason,
consider putting the distfile in your home page and listing it as
the first MASTER_SITES. This will prevent users
from getting checksum mismatch errors, and
also reduce the workload of maintainers of our ftp site. Also, if
there isonly one master site for the port, it is recommended that
you house a backup at your site and list it as the second
MASTER_SITES.If your port requires some additional `patches' that are
available on the Internet, fetch them too and put them in
DISTDIR. Do not worry if they come from a site
other than where you got the main source tarball, we have a way to
handle these situations (see the description of PATCHFILES below).Modifying the portUnpack a copy of the tarball in a private directory and make
whatever changes are necessary to get the port to compile properly
under the current version of FreeBSD. Keep careful
track of everything you do, as you will be automating
the process shortly. Everything, including the deletion, addition
or modification of files should be doable using an automated script
or patch file when your port is finished.If your port requires significant user interaction/customization
to compile or install, you should take a look at one of Larry Wall's
classic Configure scripts and perhaps do
something similar yourself. The goal of the new ports collection is
to make each port as “plug-and-play” as possible for the
end-user while using a minimum of disk space.Unless explicitly stated, patch files, scripts, and other
files you have created and contributed to the FreeBSD ports
collection are assumed to be covered by the standard BSD copyright
conditions.PatchingIn the preparation of the port, files that have been added or
changed can be picked up with a recursive diff for later feeding to
patch. Each set of patches you wish to apply should be collected
into a file named
patch-xx where
xx denotes the sequence in which the
patches will be applied — these are done in
alphabetical order, thus aa
first, ab second and so on. These files should
be stored in PATCHDIR, from where they will be
automatically applied. All patches should be relative to
WRKSRC (generally the directory your port's
tarball unpacks itself into, that being where the build is done).
To make fixes and upgrades easier, you should avoid having more than
one patch fix the same file (e.g., patch-aa and
patch-ab both changing
WRKSRC/foobar.c).ConfiguringInclude any additional customization commands to your
configure script and save it in the
scripts subdirectory. As mentioned above, you
can also do this as Makefile targets and/or
scripts with the name pre-configure or
post-configure.Handling user inputIf your port requires user input to build, configure or install,
then set IS_INTERACTIVE in your Makefile. This
will allow “overnight builds” to skip your port if the
user sets the variable BATCH in his environment (and
if the user sets the variable INTERACTIVE, then
only those ports requiring interaction are
built).It is also recommended that if there are reasonable default
answers to the questions, you check the
PACKAGE_BUILDING variable and turn off the
interactive script when it is set. This will allow us to build the
packages for CD-ROMs and ftp.Configuring the MakefileConfiguring the Makefile is pretty simple, and again we suggest
that you look at existing examples before starting. Also, there is a
sample Makefile in this
handbook, so take a look and please follow the ordering of variables
and sections in that template to make your port easier for others to
read.Now, consider the following problems in sequence as you design
your new Makefile:The original sourceDoes it live in DISTDIR as a standard gzip'd
tarball? If so, you can go on to the next step. If not, you should
look at overriding any of the EXTRACT_CMD,
EXTRACT_BEFORE_ARGS,
EXTRACT_AFTER_ARGS,
EXTRACT_SUFX, or DISTFILES
variables, depending on how alien a format your port's distribution
file is. (The most common case is
EXTRACT_SUFX=.tar.Z, when the tarball is
condensed by regular compress, not gzip.)In the worst case, you can simply create your own
do-extract target to override the default,
though this should be rarely, if ever, necessary.DISTNAMEYou should set DISTNAME to be the base name
of your port. The default rules expect the distribution file list
(DISTFILES) to be named
DISTNAMEEXTRACT_SUFX which, if
it is a normal tarball, is going to be something like
foozolix-1.0.tar.gz for a setting of
DISTNAME=foozolix-1.0.The default rules also expect the tarball(s) to extract into a
subdirectory called
work/DISTNAME, e.g.
work/foozolix-1.0/.All this behavior can be overridden, of course; it simply
represents the most common time-saving defaults. For a port
requiring multiple distribution files, simply set
DISTFILES explicitly. If only a subset of
DISTFILES are actual extractable archives, then
set them up in EXTRACT_ONLY, which will override
the DISTFILES list when it comes to extraction,
and the rest will be just left in DISTDIR for
later use.PKGNAMEIf DISTNAME does not conform to our guidelines for a good package
name, you should set the PKGNAME
variable to something better. See the abovementioned guidelines for
more details.CATEGORIESWhen a package is created, it is put under
/usr/ports/packages/All and links are made from
one or more subdirectories of
/usr/ports/packages. The names of these
subdirectories are specified by the variable
CATEGORIES. It is intended to make life easier
for the user when he is wading through the pile of packages on the
ftp site or the CD-ROM. Please take a look at the existing categories and pick the ones
that are suitable for your port.This list also determines where in the ports tree the port is
imported. If you put more than one category here, it is assumed
that the port files will be put in the subdirectory with the name in
the first category. See the categories section for more
discussion about how to pick the right categories.If you port truly belongs to something that is different from
all the existing ones, you can even create a new category name. In
that case, please send mail to the &a.ports; to propose a new
category.There is no error checking for category names. make
package will happily create a new directory if you
mistype the category name, so be careful!MASTER_SITESRecord the directory part of the ftp/http-URL pointing at the
original tarball in MASTER_SITES. Do not forget
the trailing slash (/)!The make macros will try to use this
specification for grabbing the distribution file with
FETCH if they cannot find it already on the
system.It is recommended that you put multiple sites on this list,
preferably from different continents. This will safeguard against
wide-area network problems, and we are even planning to add support
for automatically determining the closest master site and fetching
from there!If the original tarball is part of one of the following popular
archives: X-contrib, GNU, Perl CPAN, TeX CTAN, or Linux Sunsite, you
refer to those sites in an easy compact form using
MASTER_SITE_XCONTRIB,
MASTER_SITE_GNU,
MASTER_SITE_PERL_CPAN,
MASTER_SITE_TEX_CTAN, and
MASTER_SITE_SUNSITE. Simply set
MASTER_SITE_SUBDIR to the path with in the
archive. Here is an example:
MASTER_SITES= ${MASTER_SITE_XCONTRIB}
MASTER_SITE_SUBDIR= applicationsThe user can also set the MASTER_SITE_*
variables in /etc/make.conf to override our
choices, and use their favorite mirrors of these popular archives
instead.PATCHFILESIf your port requires some additional patches that are available
by ftp or http, set PATCHFILES to the names of
the files and PATCH_SITES to the URL of the
directory that contains them (the format is the same as
MASTER_SITES).If the patch is not relative to the top of the source tree
(i.e., WKRSRC) because it contains some extra
pathnames, set PATCH_DIST_STRIP accordingly. For
instance, if all the pathnames in the patch have an extra
foozolix-1.0/ in front of the filenames, then set
PATCH_DIST_STRIP=-p1.Do not worry if the patches are compressed, they will be
decompressed automatically if the filenames end with
.gz or .Z.If the patch is distributed with some other files, such as
documentation, in a gzip'd tarball, you cannot just use
PATCHFILES. If that is the case, add the name
and the location of the patch tarball to
DISTFILES and MASTER_SITES.
Then, from the pre-patch target, apply the
patch either by running the patch command from there, or copying the
patch file into the PATCHDIR directory and
calling it
patch-xx.Note the tarball will have been extracted alongside the
regular source by then, so there is no need to explicitly extract
it if it is a regular gzip'd or compress'd tarball. If you do the
latter, take extra care not to overwrite something that already
exists in that directory. Also do not forget to add a command to
remove the copied patch in the pre-clean
target.MAINTAINERSet your mail-address here. Please. :)For detailed description of the responsibility of maintainers,
refer to MAINTAINER on
Makefiles section.DependenciesMany ports depend on other ports. There are five variables that
you can use to ensure that all the required bits will be on the
user's machine. There are also some pre-supported dependency
variables for common cases, plus a few more to control the behaviour
of dependencies.LIB_DEPENDSThis variable specifies the shared libraries this port depends
on. It is a list of
lib:dir:target
tuples where lib is the name of the
shared library, and dir is the
directory in which to find it in case it is not available, and
target is the target to call in that
directory. For example, LIB_DEPENDS=
jpeg.9:${PORTSDIR}/graphics/jpeg:install
will check for a shared jpeg library with major version 9, and
descend into the graphics/jpeg subdirectory
of your ports tree to build and install it if it is not found.
The target part can be omitted if it is
equal to DEPENDS_TARGET (which defaults to
install).The lib part is an argument given
to ldconfig -r | grep -wF. There shall be no
reqular expressions in this variable.The dependency is checked twice, once from within the
extract target and then from within the
install target. Also, the name of the
dependency is put in to the package so that
pkg_add will automatically install it if it is
not on the user's system.RUN_DEPENDSThis variable specifies executables or files this port depends
on during run-time. It is a list of
path:dir:target
tuples where path is the name of the
executable or file, and dir is the
directory in which to find it in case it is not available, and
target is the target to call in that
directory. If path starts with a slash
(/), it is treated as a file and its existence
is tested with test -e; otherwise, it is
assumed to be an executable, and which -s is
used to determine if the program exists in the user's search
path.For example,
RUN_DEPENDS= ${PREFIX}/etc/innd:${PORTSDIR}/news/inn \
wish8.0:${PORTSDIR}/x11-toolkits/tk80will check if the file or directory
/usr/local/etc/innd exists, and build and
install it from the news/inn subdirectory of
the ports tree if it is not found. It will also see if an
executable called wish8.0 is in your search
path, and descend into the x11-toolkits/tk80
subdirectory of your ports tree to build and install it if it is
not found.In this case, innd is actually an
executable; if an executable is in a place that is not expected
to be in a normal user's search path, you should use the full
pathname.The dependency is checked from within the
install target. Also, the name of the
dependency is put in to the package so that
pkg_add will automatically install it if it is
not on the user's system. The target
part can be omitted if it is the same
DEPENDS_TARGET.BUILD_DEPENDSThis variable specifies executables or files this port
requires to build. Like RUN_DEPENDS, it is a
list of
path:dir:target
tuples. For example, BUILD_DEPENDS=
unzip:${PORTSDIR}/archivers/unzip will check
for an executable called unzip, and descend
into the archivers/unzip subdirectory of your
ports tree to build and install it if it is not found.“build” here means everything from extracting to
compilation. The dependency is checked from within the
extract target. The
target part can be omitted if it is
the same as DEPENDS_TARGETFETCH_DEPENDSThis variable specifies executables or files this port
requires to fetch. Like the previous two, it is a list of
path:dir:target
tuples. For example, FETCH_DEPENDS=
ncftp2:${PORTSDIR}/net/ncftp2 will check for an
executable called ncftp2, and descend into the
net/ncftp2 subdirectory of your ports tree to
build and install it if it is not found.The dependency is checked from within the
fetch target. The
target part can be omitted if it is the
same as DEPENDS_TARGET.DEPENDSIf there is a dependency that does not fall into either of the
above four categories, or your port requires to have the source of
the other port extracted in addition to having them installed,
then use this variable. This is a list of
dir:target,
as there is nothing to check, unlike the previous four. The
target part can be omitted if it is the
same as DEPENDS_TARGET.Common dependency variablesDefine USE_XLIB=yes if your port requires
the X Window System to be installed (it is implied by
USE_IMAKE). Define
USE_GMAKE=yes if your port requires GNU
make instead of BSD make.
Define USE_AUTOCONF=yes if your port requires
GNU autoconf to be run. Define USE_QT=yes if
your port uses the latest qt toolkit. Use
USE_PERL5=yes if your port requires version 5
of the perl language. (The last is especially important since
some versions of FreeBSD has perl5 as part of the base system
while others do not.)Notes on dependenciesAs mentioned above, the default target to call when a
dependency is required is DEPENDS_TARGET.
It defaults to install. This is a user
variable; is is never defined in a port's
Makefile. If your port needs a special way
to handle a dependency, use the :target part of
the *_DEPENDS variables instead of redefining
DEPENDS_TARGET.When you type make clean, its dependencies
are automatically cleaned too. If you do not wish this to happen,
define the variable NOCLEANDEPENDS in your
environment.To depend on another port unconditionally, it is customary to
use the string nonexistent as the first field
of BUILD_DEPENDS or
RUN_DEPENDS. Use this only when you need to
the to get to the source of the other port. You can often save
compilation time by specifying the target too. For
instance
BUILD_DEPENDS= /nonexistent:${PORTSDIR}/graphics/jpeg:extract
will always descend to the JPEG port and extract it.Do not use DEPENDS unless there is no other
way the behaviour you want can be accomplished. It will cause the
other port to be always build (and installed, by default), and the
dependency will go into the packages as well. If this is really
what you need, I recommend you write it as
BUILD_DEPENDS and
RUN_DEPENDS instead—at least the
intention will be clear.Building mechanismsIf your package uses GNU make, set
USE_GMAKE=yes. If your package uses
configure, set
HAS_CONFIGURE=yes. If your package uses GNU
configure, set
GNU_CONFIGURE=yes (this implies
HAS_CONFIGURE). If you want to give some extra
arguments to configure (the default argument list
--prefix=${PREFIX} for GNU
configure and empty for non-GNU
configure), set those extra arguments in
CONFIGURE_ARGS. If your package uses GNU
autoconf, set
USE_AUTOCONF=yes. This implies
GNU_CONFIGURE, and will cause
autoconf to be run before
configure.If your package is an X application that creates
Makefiles from Imakefiles
using imake, then set
USE_IMAKE=yes. This will cause the configure
stage to automatically do an xmkmf -a. If the
flag is a problem for your port, set
XMKMF=xmkmf. If the port uses
imake but does not understand the
install.man target,
NO_INSTALL_MANPAGES=yes should be set. In
addition, the author of the original port should be shot. :>If your port's source Makefile has
something else than all as the main build
target, set ALL_TARGET accordingly. Same goes
for install and
INSTALL_TARGET.Special considerationsThere are some more things you have to take into account when you
create a port. This section explains the most common of those.ldconfigIf your port installs a shared library, add a
post-install target to your
Makefile that runs ${LDCONFIG}
-m on the directory where the new library is installed
(usually PREFIX/lib) to
register it into the shared library cache.Also, add a matching @exec /sbin/ldconfig -m
and @unexec /sbin/ldconfig -R pair to your
pkg/PLIST file so that a user who installed the
package can start using the shared library immediately and
deinstallation will not cause the system to still believe the
library is there. These lines should immediately follow the line
for the shared library itself, as in:
lib/libtvl80.so.1
@exec /sbin/ldconfig -m %D/lib
@unexec /sbin/ldconfig -RNever, ever, ever add a line that says
ldconfig without any arguments to your
Makefile or pkg/PLIST.
This will reset the shared library cache to the contents of
/usr/lib only, and will royally screw up the
user's machine ("Help, xinit does not run anymore after I install
this port!"). Anybody who does this will be shot and cut in 65,536
pieces by a rusty knife and have is liver chopped out by a bunch of
crows and will eternally rot to death in the deepest bowels of hell
(not necessarily in that order…)ELF supportSince FreeBSD is moving to ELF shortly after 3.0-RELEASE, we need
to convert many ports that build shared libraries to support ELF.
Complicating this task is that a 3.0 system can run as both ELF and
a.out, and we wish to unofficially support the 2.2 as long as
possible. Below are the guidelines on how to convert a.out only ports
to support both a.out and ELF compilation.Some part of this list is only applicable during the conversion,
but will be left here for awhile for reference in case you have come
across some old port you wish to upgrade.Moving a.out libraries out of the wayA.out libraries should be moved out of
/usr/local/lib and similar to an
aout subdirectory. (If you do not move them out
of the way, ELF ports will happily overwrite a.out libraries.) The
move-aout-libs target in the 3.0-CURRENT
src/Makefile (called from
aout-to-elf) will do this for you. It will
only move a.out libs so it is safe to call it on a system with both
ELF and a.out libs in the standard directories.FormatThe ports tree will build packages in the format the machine is
in. This means a.out for 2.2 and a.out or ELF for 3.0 depending on
what `objformat` returns. Also, once users move
a.out libraries to a subdirectory, building a.out libraries will be
unsupported. (I.e., it may still work if you know what you are
doing, but you are on your own.)If a port only works for a.out, set
BROKEN_ELF to a string describing the reason
why. Such ports will be skipped during a build on an ELF
system.PORTOBJFORMATbsd.port.mk will set
PORTOBJFORMAT to aout or
elf and export it in the environments
CONFIGURE_ENV, SCRIPTS_ENV and
MAKE_ENV. (It's always going to be
aout in 2.2-STABLE). It is also passed to
PLIST_SUB as
PORTOBJFORMAT=${PORTOBJFORMAT}. (See comment on
ldconfig lines below.)The variable is set using this line in
bsd.port.mk:
PORTOBJFORMAT!= test -x /usr/bin/objformat && /usr/bin/objformat || echo aoutPorts' make processes should use this variable to decide what to
do. However, if the port's configure script
already automatically detects an ELF system, it is not necessary to
refer to PORTOBJFORMAT.Building shared librariesThe following are differences in handling shared libraries for
a.out and ELF.Shared library versionsAn ELF shared library should be called
libfoo.so.M
where M is the single version number,
and an a.out library should be called
libfoo.so.M.N
where M is the major version and
N is the the minor version number.
Do not mix those; never install an ELF
shared library called
libfoo.so.N.M
or an a.out shared library (or symlink) called
libfoo.so.N.Linker command linesAssuming cc -shared is used rather than
ld directly, the only difference is that you
need to add
on the command line for ELF.You need to install a symlink from
libfoo.so to
libfoo.so.N to make
ELF linkers happy. Since it should be listed in
PLIST too, and it won't hurt in the a.out case
(some ports even require the link for dynamic loading), you should
just make this link regardless of the setting of
PORTOBJFORMAT.LIB_DEPENDSAll port Makefiles are edited to remove minor numbers from
LIB_DEPENDS, and also to have the regexp support
removed. (E.g., foo\\.1\\.\\(33|40\\) becomes
foo.2.) They will be matched using grep
-wF.PLISTPLIST should contain the short (ELF) shlib
names if the a.out minor number is zero, and the long (a.out) names
otherwise. bsd.port.mk will automatically add
.0 to the end of short shlib lines if
PORTOBJFORMAT equals aout, and
will delete the minor number from long shlib names if
PORTOBJFORMAT equals
elf.In cases where you really need to install shlibs with two
versions on an ELF system or those with one version on an a.out
system (for instance, ports that install compatibility libraries for
other operating systems), define the variable
NO_FILTER_SHLIBS. This will turn off the editing
of PLIST mentioned in the previous
paragraph.ldconfigThe ldconfig line in Makefiles should
read:
${SETENV} OBJFORMAT=${PORTOBJFORMAT} ${LDCONFIG} -m ....In PLIST it should read;
@exec /usr/bin/env OBJFORMAT=%%PORTOBJFORMAT%% /sbin/ldconfig -m ...
@unexec /usr/bin/env OBJFORMAT=%%PORTOBJFORMAT%% /sbin/ldconfig -RThis is to ensure that the correct ldconfig
will be called depending on the format of the package, not the
default format of the system.MASTERDIRIf your port needs to build slightly different versions of
packages by having a variable (for instance, resolution, or paper
size) take different values, create one subdirectory per package to
make it easier forusers to see what to do, but try to share as many
files as possible between ports. Typically you only need a very short
Makefile in all but one of the directories if you
use variables cleverly. In the sole Makefiles,
you can use MASTERDIR to specify the directory
where the rest of the files are. Also, use a variable as part of
PKGNAME so
the packages will have different names.This will be best demonstrated by an example. This is part of
japanese/xdvi300/Makefile;
PKGNAME= ja-xdvi${RESOLUTION}-17
:
# default
RESOLUTION?= 300
.if ${RESOLUTION} != 118 && ${RESOLUTION} != 240 && \
${RESOLUTION} != 300 && ${RESOLUTION} != 400
@${ECHO} "Error: invalid value for RESOLUTION: \"${RESOLUTION}\""
@${ECHO} "Possible values are: 118, 240, 300 (default) and 400."
@${FALSE}
.endifjapanese/xdvi300 also has all the regular
patches, package files, etc. If you type make
there, it will take the default value for the resolution (300) and
build the port normally.As for other resolutions, this is the entirexdvi118/Makefile;
RESOLUTION= 118
MASTERDIR= ${.CURDIR}/../xdvi300
.include ${MASTERDIR}/Makefile(xdvi240/Makefile and
xdvi400/Makefile are similar). The
MASTERDIR definition tells
bsd.port.mk that the refulat set of
subdirectories like PATCHDIR and
PKGDIR are to be found under
xdvi300. The RESOLUTION=118
line will override the RESOLUTION=300 line in
xdvi300/Makefile and the port will be built with
resolution set to 118.Shared library versionsFirst, please read our policy on
shared library versioning to understand what to do with
shared library versions in general. Do not blindly assume software
authors know what they are doing; many of them do not. It is very
important that these details are carefully considered, as we have
quite a unique situation where we are trying to have dozens of
potentially incompatible software pairs co-exist. Careless port
imports have caused great trouble regarding shared libraries in the
past (ever wondered why the port jpeg-6b has a
shared library version of 9.0?). If in doubt, send a message to the
&a.ports;. Most of the time, your job ends by determining the right
shared library version and making appropriate patches to implement
it.However, if there is a port which is a different version of the
same software already in the tree, the situation is much more complex.
In short, the FreeBSD implementation does not allow the user to
specify to the linker which version of shared library to link against
(the linker will always pick the highest numbered version). This
means, if there is a libfoo.so.3.2 and
libfoo.so.4.0 in the system, there is no way to
tell the linker to link a particular application to
libfoo.so.3.2. It is essentially completely
overshadowed in terms of compilation-time linkage. In this case, the
only solution is to rename the base part of the
shared library. For instance, change
libfoo.so.4.0 to
libfoo4.so.1.0 so both version 3.2 and 4.0 can be
linked from other ports.ManpagesThe MAN[1-9LN] variables will automatically add
any manpages to pkg/PLIST (this means you must
not list manpages in the
PLIST—see generating PLIST for more). It also
makes the install stage automatically compress or uncompress manpages
depending on the setting of NOMANCOMPRESS in
/etc/make.conf.If your port tries to install multiple names for manpages using
symlinks or hardlinks, you must use the MLINKS
variable to identify these. The link installed by your port will
be destroyed and recreated by bsd.port.mk
to make sure it points to the correct file. Any manpages
listed in MLINKS must not be listed in the
PLIST.To specify whether the manpages are compressed upon installation,
use the MANCOMPRESSED variable. This variable can
take three values, yes, no and
maybe. yes means manpages are
already installed compressed, no means they are
not, and maybe means the software already respects
the value of NOMANCOMPRESS so
bsd.port.mk does not have to do anything
special.MANCOMPRESSED is automatically set to
yes if USE_IMAKE is set and
NO_INSTALL_MANPAGES is not set, and to
no otherwise. You do not have to explicitly define
it unless the default is not suitable for your port.If your port anchors its man tree somewhere other than
PREFIX, you can use the
MANPREFIX to set it. Also, if only manpages in
certain sections go in a non-standard place, such as some Perl modules
ports, you can set individual man paths using
MANsectPREFIX (where
sect is one of 1-9,
L or N).If your manpages go to language-specific subdirectories, set the
name of the languages to MANLANG. The value of
this variable defaults to "" (i.e., English
only).Here is an example that puts it all together.
MAN1= foo.1
MAN3= bar.3
MAN4= baz.4
MLINKS= foo.1 alt-name.8
MANLANG= "" ja
MAN3PREFIX= ${PREFIX}/share/foobar
MANCOMPRESSED= yesThis states that six files are installed by this port;
${PREFIX}/man/man1/foo.1.gz
${PREFIX}/man/ja/man1/foo.1.gz
${PREFIX}/share/foobar/man/man3/bar.3.gz
${PREFIX}/share/foobar/man/ja/man3/bar.3.gz
${PREFIX}/man/man4/baz.4.gz
${PREFIX}/man/ja/man4/baz.4.gzAdditionally ${PREFIX}/man/man8/alt-name.8.gz
may or may-not be installed by your port. Regardless, a
symlink will be made to join the foo(1) manpage and
alt-name(8) manpage.Ports that require MotifThere are many programs that require a Motif library (available
from several commercial vendors, while there is a free clone reported
to be able to run many applications in
x11-toolkits/lesstif) to compile. Since it is a
popular toolkit and their licenses usually permit redistribution of
statically linked binaries, we have made special provisions for
handling ports that require Motif in a way that we can easily compile
binaries linked either dynamically (for people who are compiling from
the port) or statically (for people who distribute packages).REQUIRES_MOTIFIf your port requires Motif, define this variable in the
Makefile. This will prevent people who do not own a copy of Motif
from even attempting to build it.MOTIFLIBThis variable will be set by bsd.port.mk to
be the appropriate reference to the Motif library. Please patch the
source to use this wherever the Motif library is referenced in the
Makefile or
Imakefile.There are two common cases:If the port refers to the Motif library as
-lXm in its Makefile or
Imakefile, simply substitute
${MOTIFLIB} for it.If the port uses XmClientLibs in its
Imakefile, change it to
${MOTIFLIB} ${XTOOLLIB}
${XLIB}.Note that MOTIFLIB (usually) expands to
-L/usr/X11R6/lib -lXm or
/usr/X11R6/lib/libXm.a, so there is no need to
add -L or -l in front.X11 fontsIf your port installs fonts for the X Window system, put them in
X11BASE/lib/X11/fonts/local.
This directory is new to XFree86 release 3.3.3. If it does not exist,
please create it, and print out a message urging the user to update
their XFree86 to 3.3.3 or newer, or at least add this directory to the
font path in /etc/XF86Config.Info filesThe new version of texinfo (included in 2.2.2-RELEASE and onwards)
contains a utility called install-info to add and
delete entries to the dir file. If your port
installs any info documents, please follow this instructions so your
port/package will correctly update the user's
PREFIX/info/dir file. (Sorry
for the length of this section, but is it imperative to weave all the
info files together. If done correctly, it will produce a
beautiful listing, so please bear with me!First, this is what you (as a porter) need to know&prompt.user; install-info --help
install-info [OPTION]... [INFO-FILE [DIR-FILE]]
Install INFO-FILE in the Info directory file DIR-FILE.
Options:
--delete Delete existing entries in INFO-FILE;
don't insert any new entries.
:
--entry=TEXT Insert TEXT as an Info directory entry.
:
--section=SEC Put this file's entries in section SEC of the directory. :This program will not actually install info
files; it merely inserts or deletes entries in the
dir file.Here's a seven-step procedure to convert ports to use
install-info. I will use
editors/emacs as an example.Look at the texinfo sources and make a patch to insert
@dircategory and @direntry
statements to files that do not have them. This is part of my
patch:
--- ./man/vip.texi.org Fri Jun 16 15:31:11 1995
+++ ./man/vip.texi Tue May 20 01:28:33 1997
@@ -2,6 +2,10 @@
@setfilename ../info/vip
@settitle VIP
+@dircategory The Emacs editor and associated tools
+@direntry
+* VIP: (vip). A VI-emulation for Emacs.
+@end direntry
@iftex
@finalout
:The format should be self-explanatory. Many authors leave a
dir file in the source tree that contains all
the entries you need, so look around before you try to write your
own. Also, make sure you look into related ports and make the
section names and entry indentations consistent (we recommend that
all entry text start at the 4th tab stop).Note that you can put only one info entry per file because
of a bug in install-info --delete that
deletes only the first entry if you specify multiple entries in
the @direntry section.You can give the dir entries to
install-info as arguments
( and ) instead
of patching the texinfo sources. I do not think this is a good
idea for ports because you need to duplicate the same information
in three places
(Makefile and
@exec/@unexec of
PLIST; see below). However, if you have a
Japanese (or other multibyte encoding) info files, you will have
to use the extra arguments to install-info
because makeinfo cannot handle those texinfo
sources. (See Makefile and
PLIST of japanese/skk
for examples on how to do this).Go back to the port directory and do a make clean;
make and verify that the info files are regenerated
from the texinfo sources. Since the texinfo sources are newer than
the info files, they should be rebuilt when you type
make; but many Makefiles
do not include correct dependencies for info files. In
emacs' case, I had to patch the main
Makefile.in so it will descend into the
man subdirectory to rebuild the info
pages.
--- ./Makefile.in.org Mon Aug 19 21:12:19 1996
+++ ./Makefile.in Tue Apr 15 00:15:28 1997
@@ -184,7 +184,7 @@
# Subdirectories to make recursively. `lisp' is not included
# because the compiled lisp files are part of the distribution
# and you cannot remake them without installing Emacs first.
-SUBDIR = lib-src src
+SUBDIR = lib-src src man
# The makefiles of the directories in $SUBDIR.
SUBDIR_MAKEFILES = lib-src/Makefile man/Makefile src/Makefile oldXMenu/Makefile lwlib/Makefile
--- ./man/Makefile.in.org Thu Jun 27 15:27:19 1996
+++ ./man/Makefile.in Tue Apr 15 00:29:52 1997
@@ -66,6 +66,7 @@
${srcdir}/gnu1.texi \
${srcdir}/glossary.texi
+all: info
info: $(INFO_TARGETS)
dvi: $(DVI_TARGETS)The second hunk was necessary because the default target in
the man subdir is called
info, while the main
Makefile wants to call
all. I also deleted the installation of
the info info file because we already have
one with the same name in /usr/share/info
(that patch is not shown here).If there is a place in the Makefile that
is installing the dir file, delete it. Your
port may not be doing it. Also, remove any commands that are
otherwise mucking around with the dir
file.
--- ./Makefile.in.org Mon Aug 19 21:12:19 1996
+++ ./Makefile.in Mon Apr 14 23:38:07 1997
@@ -368,14 +368,8 @@
if [ `(cd ${srcdir}/info && /bin/pwd)` != `(cd ${infodir} && /bin/pwd)` ]; \
then \
(cd ${infodir}; \
- if [ -f dir ]; then \
- if [ ! -f dir.old ]; then mv -f dir dir.old; \
- else mv -f dir dir.bak; fi; \
- fi; \
cd ${srcdir}/info ; \
- (cd $${thisdir}; ${INSTALL_DATA} ${srcdir}/info/dir ${infodir}/dir); \
- (cd $${thisdir}; chmod a+r ${infodir}/dir); \
for f in ccmode* cl* dired-x* ediff* emacs* forms* gnus* info* message* mh-e* sc* vip*; do \
(cd $${thisdir}; \
${INSTALL_DATA} ${srcdir}/info/$$f ${infodir}/$$f; \
chmod a+r ${infodir}/$$f); \(This step is only necessary if you are modifying an existing
port.) Take a look at pkg/PLIST and delete
anything that is trying to patch up info/dir.
They may be in pkg/INSTALL or some other
file, so search extensively.
Index: pkg/PLIST
===================================================================
RCS file: /usr/cvs/ports/editors/emacs/pkg/PLIST,v
retrieving revision 1.15
diff -u -r1.15 PLIST
--- PLIST 1997/03/04 08:04:00 1.15
+++ PLIST 1997/04/15 06:32:12
@@ -15,9 +15,6 @@
man/man1/emacs.1.gz
man/man1/etags.1.gz
man/man1/ctags.1.gz
-@unexec cp %D/info/dir %D/info/dir.bak
-info/dir
-@unexec cp %D/info/dir.bak %D/info/dir
info/cl
info/cl-1
info/cl-2Add a post-install target to the
Makefile to create a dir
file if it is not there. Also, call
install-info with the installed info
files.
Index: Makefile
===================================================================
RCS file: /usr/cvs/ports/editors/emacs/Makefile,v
retrieving revision 1.26
diff -u -r1.26 Makefile
--- Makefile 1996/11/19 13:14:40 1.26
+++ Makefile 1997/05/20 10:25:09 1.28
@@ -20,5 +20,11 @@
post-install:
.for file in emacs-19.34 emacsclient etags ctags b2m
strip ${PREFIX}/bin/${file}
.endfor
+ if [ ! -f ${PREFIX}/info/dir ]; then \
+ ${SED} -ne '1,/Menu:/p' /usr/share/info/dir > ${PREFIX}/info/dir; \
+ fi
+.for info in emacs vip viper forms gnus mh-e cl sc dired-x ediff ccmode
+ install-info ${PREFIX}/info/${info} ${PREFIX}/info/dir
+.endfor
.include <bsd.port.mk>Do not use anything other than
/usr/share/info/dir and the above command to
create a new info file. In fact, I would add the first three lines
of the above patch to bsd.port.mk if you (the
porter) would not have to do it in PLIST by
yourself anyway.Edit PLIST and add equivalent
@exec statements and also
@unexec for pkg_delete. You
do not need to delete info/dir with
@unexec.
Index: pkg/PLIST
===================================================================
RCS file: /usr/cvs/ports/editors/emacs/pkg/PLIST,v
retrieving revision 1.15
diff -u -r1.15 PLIST
--- PLIST 1997/03/04 08:04:00 1.15
+++ PLIST 1997/05/20 10:25:12 1.17
@@ -16,7 +14,15 @@
man/man1/etags.1.gz
man/man1/ctags.1.gz
+@unexec install-info --delete %D/info/emacs %D/info/dir
:
+@unexec install-info --delete %D/info/ccmode %D/info/dir
info/cl
info/cl-1
@@ -87,6 +94,18 @@
info/viper-3
info/viper-4
+@exec [ -f %D/info/dir ] || sed -ne '1,/Menu:/p' /usr/share/info/dir > %D/info/dir
+@exec install-info %D/info/emacs %D/info/dir
:
+@exec install-info %D/info/ccmode %D/info/dir
libexec/emacs/19.34/i386--freebsd/cvtmail
libexec/emacs/19.34/i386--freebsd/digest-docThe @unexec install-info --delete
commands have to be listed before the info files themselves so
they can read the files. Also, the @exec
install-info commands have to be after the info
files and the @exec command that creates the
the dir file.Test and admire your
work. :). Check the
dir file before and after each step.The pkg/ subdirectoryThere are some tricks we have not mentioned yet about the
pkg/ subdirectory that come in handy
sometimes.MESSAGEIf you need to display a message to the installer, you may place
the message in pkg/MESSAGE. This capability is
often useful to display additional installation steps to be taken
after a pkg_add or to display licensing
information.The pkg/MESSAGE file does not need to be
added to pkg/PLIST. Also, it will not get
automatically printed if the user is using the port, not the
package, so you should probably display it from the
post-install target yourself.INSTALLIf your port needs to execute commands when the binary package
is installed with pkg_add you can do this via the
pkg/INSTALL script. This script will
automatically be added to the package, and will be run twice by
pkg_add. The first time will as INSTALL
${PKGNAME} PRE-INSTALL and the second time as
INSTALL ${PKGNAME} POST-INSTALL.
$2 can be tested to determine which mode
the script is being run in. The PKG_PREFIX
environmental variable will be set to the package installation
directory. See &man.pkg.add.1; for
additional information.This script is not run automatically if you install the port
with make install. If you are depending on it
being run, you will have to explicitly call it from your port's
Makefile.REQIf your port needs to determine if it should install or not, you
can create a pkg/REQ “requirements”
script. It will be invoked automatically at
installation/deinstallation time to determine whether or not
installation/deinstallation should proceed.Changing PLIST based on make
variablesSome ports, particularly the p5- ports, need to change their
PLIST depending on what options they are
configured with (or version of perl, in the case of p5- ports). To
make this easy, any instances in the PLIST of
%%OSREL%%, %%PERL_VER%%, and
%%PERL_VERSION%% will be substituted for
appropriately. The value of %%OSREL%% is the
numeric revision of the operating system (e.g.,
2.2.7). %%PERL_VERSION%% is
the full version number of perl (e.g., 5.00502)
and %%PERL_VER%% is the perl version number minus
the patchlevel (e.g., 5.005).If you need to make other substitutions, you can set the
PLIST_SUB variable with a list of
VAR=VALUE
pairs and instances of
%%VAR%%' will be
substituted with VALUE in the
PLIST.For instance, if you have a port that installs many files in a
version-specific subdirectory, you can put something like
OCTAVE_VERSION= 2.0.13
PLIST_SUB= OCTAVE_VERSION=${OCTAVE_VERSION}
in the Makefile and use
%%OCTAVE_VERSION%% wherever the version shows up
in PLIST. That way, when you upgrade the port,
you will not have to change dozens (or in some cases, hundreds) of
lines in the PLIST.This substitution (as well as addition of any man pages) will be done between
the do-install and
post-install targets, by reading from
PLIST and writing to TMPPLIST
(default:
WRKDIR/.PLIST.mktmp). So if
your port builds PLIST on the fly, do so in or
before do-install. Also, if your port
needs to edit the resulting file, do so in
post-install to a file named
TMPPLIST.Changing the names of files in the
pkg subdirectoryAll the filenames in the pkg subdirectory
are defined using variables so you can change them in your
Makefile if need be. This is especially useful
when you are sharing the same pkg subdirectory
among several ports or have to write to one of the above files (see
writing to places other than
WRKDIR for why it is a bad idea to write
directly in to the pkg subdirectory.Here is a list of variable names and their default
values.VariableDefault valueCOMMENT${PKGDIR}/DESCRDESCR${PKGDIR}/DESCRPLIST${PKGDIR}/PLISTPKGINSTALL${PKGDIR}/PKGINSTALLPKGDEINSTALL${PKGDIR}/PKGDEINSTALLPKGREQ${PKGDIR}/REQPKGMESSAGE${PKGDIR}/MESSAGEPlease change these variables rather than overriding
PKG_ARGS. If you change
PKG_ARGS, those files will not correctly be
installed in /var/db/pkg upon install from a
port.Licensing ProblemsSome software packages have restrictive licenses or can be in
violation to the law (PKP's patent on public key crypto, ITAR (export
of crypto software) to name just two of them). What we can do with
them varies a lot, depending on the exact wordings of the respective
licenses.It is your responsibility as a porter to read the licensing
terms of the software and make sure that the FreeBSD project will
not be held accountable of violating them by redistributing the
source or compiled binaries either via ftp or CD-ROM. If in doubt,
please contact the &a.ports;.There are two variables you can set in the Makefile to handle the
situations that arise frequently:If the port has a “do not sell for profit” type of
license, set the variable NO_CDROM to a string
describing the reason why. We will make sure such ports will not go
into the CD-ROM come release time. The distfile and package will
still be available via ftp.If the resulting package needs to be built uniquely for each
site, or the resulting binary package cannot be distributed due to
licensing; set the variable NO_PACKAGE to a
string describing the reason why. We will make sure such packages
will not go on the ftp site, nor into the CD-ROM come release time.
The distfile will still be included on both however.If the port has legal restrictions on who can use it (e.g.,
crypto stuff) or has a “no commercial use” license,
set the variable RESTRICTED to be the string
describing the reason why. For such ports, the distfiles/packages
will not be available even from our ftp sites.The GNU General Public License (GPL), both version 1 and 2,
should not be a problem for ports.If you are a committer, make sure you update the
ports/LEGAL file too.UpgradingWhen you notice that a port is out of date compared to the latest
version from the original authors, first make sure you have the latest
port. You can find them in the
ports/ports-current directory of the ftp mirror
sites. You may also use CVSup to keep your whole ports collection
up-to-date, as described in .The next step is to send a mail to the maintainer, if one is
listed in the port's Makefile. That person may
already be working on an upgrade, or have a reason to not upgrade the
port right now (because of, for example, stability problems of the new
version).If the maintainer asks you to do the upgrade or there is not any
such person to begin with, please make the upgrade and send the
recursive diff (either unified or context diff is fine, but port
committers appear to prefer unified diff more) of the new and old
ports directories to us (e.g., if your modified port directory is
called superedit and the original as in our tree
is superedit.bak, then send us the result of
diff -ruN superedit.bak superedit). Please examine
the output to make sure all the changes make sense. The best way to
send us the diff is by including it to &man.send-pr.1; (category
ports). Please mention any added or deleted files
in the message, as they have to be explicitly specified to CVS when
doing a commit. If the diff is more than about 20KB, please compress
and uuencode it; otherwise, just include it in as is in the PR.Once again, please use &man.diff.1; and not &man.shar.1; to send
updates to existing ports!Do's and Dont'sHere is a list of common do's and dont's that you encounter during
the porting process.You should check your own port against this list,
but you can also check ports in the PR database that others have
submitted. Submit any comments on ports you check as described in
Bug Reports and General
Commentary. Checking ports in the PR database will both make
it faster for us to commit them, and prove that you know what you are
doing.Strip BinariesDo strip binaries. If the original source already strips the
binaries, fine; otherwise you should add a
post-install rule to to it yourself. Here is an
example;
post-install:
strip ${PREFIX}/bin/xdlUse the &man.file.1; command on the installed executable to
check whether the binary is stripped or not. If it does not say
not stripped, it is stripped.INSTALL_* macrosDo use the macros provided in bsd.port.mk
to ensure correct modes and ownership of files in your own
*-install targets. They are:INSTALL_PROGRAM is a command to install
binary executables.INSTALL_SCRIPT is a command to install
executable scripts.INSTALL_DATA is a command to install
sharable data.INSTALL_MAN is a command to install
manpages and other documentation (it does not compress
anything).These are basically the install command with
all the appropriate flags. See below for an example on how to use
them.WRKDIRDo not write anything to files outside
WRKDIR. WRKDIR is the only
place that is guaranteed to be writable during the port build (see
compiling ports from CDROM for an
example of building ports from a read-only tree). If you need to
modigy some file in PKGDIR, do so by redefining a variable, not by
writing over it.WRKDIRPREFIXMake sure your port honors WRKDIRPREFIX.
Most ports do not have to worry about this. In particular, if you
are referring to a WRKDIR of another port, note
that the correct location is
WRKDIRPREFIXPORTSDIR/subdir/name/work not PORTSDIR/subdir/name/work or .CURDIR/../../subdir/name/work or some such.Also, if you are defining WRKDIR yourself,
make sure you prepend
${WKRDIRPREFIX}${.CURDIR} in the
front.Differentiating operating systems and OS versionsYou may come across code that needs modifications or conditional
compilation based upon what version of UNIX it is running under. If
you need to make such changes to the code for conditional
compilation, make sure you make the changes as general as possible
so that we can back-port code to FreeBSD 1.x systems and cross-port
to other BSD systems such as 4.4BSD from CSRG, BSD/386, 386BSD,
NetBSD, and OpenBSD.The preferred way to tell 4.3BSD/Reno (1990) and newer versions
of the BSD code apart is by using the BSD macro
defined in <sys/param.h>. Hopefully that
file is already included; if not, add the code:
#if (defined(__unix__) || defined(unix)) && !defined(USG)
#include <sys/param.h>
#endifto the proper place in the .c file. We
believe that every system that defines these two symbols has
sys/param.h. If you find a system that
does not, we would like to know. Please send mail to the
&a.ports;.Another way is to use the GNU Autoconf style of doing
this:
#ifdef HAVE_SYS_PARAM_H
#include <sys/param.h>
#endifDo not forget to add -DHAVE_SYS_PARAM_H to the
CFLAGS in the Makefile for
this method.Once you have sys/param.h included, you may
use:
#if (defined(BSD) && (BSD >= 199103))to detect if the code is being compiled on a 4.3 Net2 code base
or newer (e.g. FreeBSD 1.x, 4.3/Reno, NetBSD 0.9, 386BSD, BSD/386
1.1 and below).Use:
#if (defined(BSD) && (BSD >= 199306))to detect if the code is being compiled on a 4.4 code base or
newer (e.g. FreeBSD 2.x, 4.4, NetBSD 1.0, BSD/386 2.0 or
above).The value of the BSD macro is
199506 for the 4.4BSD-Lite2 code base. This is
stated for informational purposes only. It should not be used to
distinguish between versions of FreeBSD based only on 4.4-Lite vs.
versions that have merged in changes from 4.4-Lite2. The
__FreeBSD__ macro should be used instead.Use sparingly:__FreeBSD__ is defined in all versions of
FreeBSD. Use it if the change you are making
only affects FreeBSD. Porting gotchas like
the use of sys_errlist[] vs
strerror() are Berkeleyisms, not FreeBSD
changes.In FreeBSD 2.x, __FreeBSD__ is defined to
be 2. In earlier versions, it is
1. Later versions will bump it to match
their major version number.If you need to tell the difference between a FreeBSD 1.x
system and a FreeBSD 2.x or 3.x system, usually the right answer
is to use the BSD macros described above. If
there actually is a FreeBSD specific change (such as special
shared library options when using ld) then it
is OK to use __FreeBSD__ and #if
__FreeBSD__ > 1 to detect a FreeBSD 2.x and later
system. If you need more granularity in detecting FreeBSD
systems since 2.0-RELEASE you can use the following:
#if __FreeBSD__ >= 2
#include <osreldate.h>
# if __FreeBSD_version >= 199504
/* 2.0.5+ release specific code here */
# endif
#endifRelease__FreeBSD_version2.0-RELEASE1194112.1-CURRENTs199501, 1995032.0.5-RELEASE1995042.2-CURRENT before 2.11995082.1.0-RELEASE1995112.2-CURRENT before 2.1.51995122.1.5-RELEASE1996072.2-CURRENT before 2.1.61996082.1.6-RELEASE1996122.1.7-RELEASE1996122.2-RELEASE2200002.2.1-RELEASE220000 (no change)2.2-STABLE after 2.2.1-RELEASE220000 (no change)2.2-STABLE after texinfo-3.92210012.2-STABLE after top2210022.2.2-RELEASE2220002.2-STABLE after 2.2.2-RELEASE2220012.2.5-RELEASE2250002.2-STABLE after 2.2.5-RELEASE2250012.2-STABLE after ldconfig -R merge2250022.2.6-RELEASE2260002.2.7-RELEASE2270002.2-STABLE after 2.2.7-RELEASE2270012.2-STABLE after semctl(2) change2270022.2.8-RELEASE2280002.2-STABLE after 2.2.8-RELEASE2280013.0-CURRENT before mount(2) change3000003.0-CURRENT after mount(2) change3000013.0-CURRENT after semctl(2) change3000023.0-CURRENT after ioctl arg changes3000033.0-CURRENT after ELF conversion3000043.0-RELEASE3000053.0-CURRENT after 3.0-RELEASE3000063.0-STABLE after 3/4 branch3000073.1-RELEASE3100003.1-STABLE after 3.1-RELEASE3100013.1-STABLE after C++ constructor/destructor order
change3100023.2-STABLE3200014.0-CURRENT after 3/4 branch4000004.0-CURRENT after change in dynamic linker
handling4000014.0-CURRENT after C++ constructor/destructor
order change4000024.0-CURRENT after functioning dladdr(3)4000034.0-CURRENT after newbus4000044.0-CURRENT after suser(9) API change4000054.0-CURRENT after cdevsw registration change4000064.0-CURRENT after the addition of so_cred for
socket level credentials4000074.0-CURRENT after the addition of a poll syscall
wrapper to libc_r4000084.0-CURRENT after the change of the kernel's
dev_t type to struct
spacinfo pointer400009Note that 2.2-STABLE sometimes identifies itself as
“2.2.5-STABLE” after the 2.2.5-RELEASE. The pattern
used to be year followed by the month, but we decided to change it
to a more straightforward major/minor system starting from 2.2.
This is because the parallel development on several branches made
it infeasible to classify the releases simply by their real
release dates. If you are making a port now, you do not have to
worry about old -CURRENTs; they are listed here just for your
reference.In the hundreds of ports that have been done, there have only
been one or two cases where __FreeBSD__ should
have been used. Just because an earlier port screwed up and used it
in the wrong place does not mean you should do so too.Writing something after
bsd.port.mkDo not write anything after the .include
<bsd.port.mk> line. it usually can be avoided by
including bsd.port.pre.mk somewhere in the
middle of your Makefile and
bsd.port.post.mk at the end.You need to include either the
pre.mk/post.mk pair or
bsd.port.mk only; do not mix these two.bsd.port.pre.mk only defines a few
variables, which can be used in tests in the
Makefile, bsd.port.post.mk
defines the rest.Here are some important variables defined in
bsd.port.pre.mk (this is not the complete list,
please read bsd.port.mk for the complete
list).VariableDescriptionARCHThe architecture as returned by uname
-m (e.g., i386)OPSYSThe operating system type, as returned by
uname -s (e.g.,
FreeBSD)OSRELThe release version of the operating system (e.g.,
2.1.5 or
2.2.7)OSVERSIONThe numeric version of the operating system, same as
__FreeBSD_version.PORTOBJFORMATThe object format of the system
(aout or elfLOCALBASEThe base of the “local” tree (e.g.,
/usr/local/)X11BASEThe base of the “X11” tree (e.g.,
/usr/X11R6)PREFIXWhere the port installs itself (see more on
PREFIX).If you have to define the variables
USE_IMAKE, USE_X_PREFIX, or
MASTERDIR, do so before including
bsd.port.pre.mk.Here are some examples of things you can write after
bsd.port.pre.mk;
# no need to compile lang/perl5 if perl5 is already in system
.if ${OSVERSION} > 300003
BROKEN= perl is in system
.endif
# only one shlib version number for ELF
.if ${PORTOBJFORMAT} == "elf"
TCL_LIB_FILE= ${TCL_LIB}.${SHLIB_MAJOR}
.else
TCL_LIB_FILE= ${TCL_LIB}.${SHLIB_MAJOR}.${SHLIB_MINOR}
.endif
# software already makes link for ELF, but not for a.out
post-install:
.if ${PORTOBJFORMAT} == "aout"
${LN} -sf liblinpack.so.1.0 ${PREFIX}/lib/liblinpack.so
.endifInstall additional documentationIf your software has some documentation other than the standard
man and info pages that you think is useful for the user, install it
under PREFIX/share/doc.
This can be done, like the previous item, in the
post-install target.Create a new directory for your port. The directory name should
reflect what the port is. This usually means
PKGNAME minus the version part. However, if you
think the user might want different versions of the port to be
installed at the same time, you can use the whole
PKGNAME.Make the installation dependent to the variable
NOPORTDOCS so that users can disable it in
/etc/make.conf, like this:
post-install:
.if !defined(NOPORTDOCS)
${MKDIR}${PREFIX}/share/doc/xv
${INSTALL_MAN} ${WRKSRC}/docs/xvdocs.ps ${PREFIX}/share/doc/xv
.endifDo not forget to add them to pkg/PLIST too!
(Do not worry about NOPORTDOCS here; there is
currently no way for the packages to read variables from
/etc/make.conf.)Also you can use the pkg/MESSAGE file to
display messages upon installation. See the using
pkg/MESSAGE section for
details.MESSAGE does not need to be added to
pkg/PLIST).DIST_SUBDIRDo not let your port clutter
/usr/ports/distfiles. If your port requires a
lot of files to be fetched, or contains a file that has a name that
might conflict with other ports (e.g.,
Makefile), set DIST_SUBDIR
to the name of the port (PKGNAME without the
version part should work fine). This will change
DISTDIR from the default
/usr/ports/distfiles to
/usr/ports/distfiles/DIST_SUBDIR,
and in effect puts everything that is required for your port into
that subdirectory.It will also look at the subdirectory with the same name on the
backup master site at ftp.FreeBSD.org.
(Setting DISTDIR explicitly in your
Makefile will not accomplish this, so please use
DIST_SUBDIR.)This does not affect the MASTER_SITES you
define in your Makefile.Package informationDo include package information, i.e.
COMMENT, DESCR, and
PLIST, in pkg.Note that these files are not used only for packaging anymore,
and are mandatory now, even if
NO_PACKAGE is set.RCS stringsDo not put RCS strings in patches. CVS will mangle them when we
put the files into the ports tree, and when we check them out again,
they will come out different and the patch will fail. RCS strings
are surrounded by dollar ($) signs, and
typically start with $Id or
$RCS.Recursive diffUsing the recurse () option to
diff to generate patches is fine, but please take
a look at the resulting patches to make sure you do not have any
unnecessary junk in there. In particular, diffs between two backup
files, Makefiles when the port uses
Imake or GNU configure, etc.,
are unnecessary and should be deleted. If you had to edit
configure.in and run
autoconf to regenerate
configure, do not take the diffs of
configure (it often grows to a few thousand
lines!); define USE_AUTOCONF=yes and take the
diffsof configure.in.Also, if you had to delete a file, then you can do it in the
post-extract target rather than as part of
the patch. Once you are happy with the resulting diff, please split
it up into one source file per patch file.PREFIXDo try to make your port install relative to
PREFIX. (The value of this variable will be set
to LOCALBASE (default
/usr/local), unless
USE_X_PREFIX or USE_IMAKE is
set, in which case it will be X11BASE (default
/usr/X11R6).)Not hard-coding /usr/local or
/usr/X11R6 anywhere in the source will make the
port much more flexible and able to cater to the needs of other
sites. For X ports that use imake, this is
automatic; otherwise, this can often be done by simply replacing the
occurrences of /usr/local (or
/usr/X11R6 for X ports that do not use imake)
in the various scripts/Makefiles in the port to read
PREFIX, as this variable is automatically passed
down to every stage of the build and install processes.Do not set USE_X_PREFIX unless your port
truly require it (i.e., it links against X libs or it needs to
reference files in X11BASE).The variable PREFIX can be reassigned in your
Makefile or in the user's environment.
However, it is strongly discouraged for individual ports to set this
variable explicitly in the Makefiles.Also, refer to programs/files from other ports with the
variables mentioned above, not explicit pathnames. For instance, if
your port requires a macro PAGER to be the full
pathname of less, use the compiler flag:
-DPAGER=\"${PREFIX}/bin/less\"
or
-DPAGER=\"${LOCALBASE}/bin/less\"
if this is an X port, instead of
-DPAGER=\"/usr/local/bin/less\". This way it will
have a better chance of working if the system administrator has
moved the whole `/usr/local' tree somewhere else.SubdirectoriesTry to let the port put things in the right subdirectories of
PREFIX. Some ports lump everything and put it in
the subdirectory with the port's name, which is incorrect. Also,
many ports put everything except binaries, header files and manual
pages in the a subdirectory of lib, which does
not bode well with the BSD paradigm. Many of the files should be
moved to one of the following: etc
(setup/configuration files), libexec
(executables started internally), sbin
(executables for superusers/managers), info
(documentation for info browser) or share
(architecture independent files). See man &man.hier.7; for details,
the rules governing
/usr pretty much apply to
/usr/local too. The exception are ports
dealing with USENET “news”. They may use
PREFIX/news as a destination
for their files.Cleaning up empty directoriesDo make your ports clean up after themselves when they are
deinstalled. This is usually accomplished by adding
@dirrm lines for all directories that are
specifically created by the port. You need to delete subdirectories
before you can delete parent directories.
:
lib/X11/oneko/pixmaps/cat.xpm
lib/X11/oneko/sounds/cat.au
:
@dirrm lib/X11/oneko/pixmals
@dirrm lib/X11/oneko/sounds
@dirrm lib/X11/onekoHowever, sometimes @dirrm will give you
errors because other ports also share the same subdirectory. You
can call rmdir from @unexec to
remove only empty directories without warning.
@unexec rmdir %D/share/doc/gimp 2>/dev/null || trueThis will neither print any error messages nor cause
pkg_delete to exit abnormally even if
PREFIX/share/doc/gimp is not
empty due to other ports installing some files in there.UIDsIf your port requires a certain user to be on the installed
system, let the pkg/INSTALL script call
pw to create it automatically. Look at
net/cvsup-mirror for an example.If your port must use the same user/group ID number when it is
installed a binary package as when it was compiled, then you must
choose a free UID from 50 to 99 and register it below. Look at
japanese/Wnn for an example.Make sure you do not use a UID already used by the system or
other ports. This is the current list of UIDs between 50 and
99.
majordom:*:54:54:Majordomo Pseudo User:/usr/local/majordomo:/nonexistent
cyrus:*:60:60:the cyrus mail server:/nonexistent:/nonexistent
gnats:*:61:1:GNATS database owner:/usr/local/share/gnats/gnats-db:/bin/sh
uucp:*:66:66:UUCP pseudo-user:/var/spool/uucppublic:/usr/libexec/uucp/uucico
xten:*:67:67:X-10 daemon:/usr/local/xten:/nonexistent
pop:*:68:6:Post Office Owner (popper):/nonexistent:/nonexistent
wnn:*:69:7:Wnn:/nonexistent:/nonexistent
ifmail:*:70:66:Ifmail user:/nonexistent:/nonexistent
pgsql:*:70:70:PostgreSQL pseudo-user:/usr/local/pgsql:/bin/sh
ircd:*:72:72:IRCd hybrid:/nonexistent:/nonexistent
alias:*:81:81:QMail user:/var/qmail/alias:/nonexistent
qmaill:*:83:81:QMail user:/var/qmail:/nonexistent
qmaild:*:82:81:QMail user:/var/qmail:/nonexistent
qmailq:*:85:82:QMail user:/var/qmail:/nonexistent
qmails:*:87:82:QMail user:/var/qmail:/nonexistent
qmailp:*:84:81:QMail user:/var/qmail:/nonexistent
qmailr:*:86:82:QMail user:/var/qmail:/nonexistent
msql:*:87:87:mSQL-2 pseudo-user:/var/db/msqldb:/bin/sh
mysql:*:88:88:MySQL Daemon:/var/db/mysql:/sbin/nologinPlease include a notice when you submit a port (or an upgrade)
that reserves a new UID or GID in this range. This allows us to
keep the list of reserved IDs up to date.Do things rationallyThe Makefile should do things simply and
reasonably. If you can make it a couple of lines shorter or more
readable, then do so. Examples include using a make
.if construct instead of a shell
if construct, not redefining
do-extract if you can redefine
EXTRACT* instead, and using
GNU_CONFIGURE instead of CONFIGURE_ARGS
+= --prefix=${PREFIX}.Respect CFLAGSThe port should respect the CFLAGS variable.
If it does not, please add NO_PACKAGE=ignores
cflags to the Makefile.Configuration filesIf your port requires some configuration files in
PREFIX/etc, do
not just install them and list them in
pkg/PLIST. That will cause
pkg_delete to delete files carefully edited by
the user and a new installation to wipe them out.Instead, install sample files with a suffix
(filename.sample
will work well) and print out a message pointing out that the
user has to copy and edit the file before the software can be made
to work.PortlintDo check your work with portlint
before you submit or commit it.FeedbackDo send applicable changes/patches to the original
author/maintainer for inclusion in next release of the code. This
will only make your job that much easier for the next
release.MiscellaneaThe files pkg/DESCR,
pkg/COMMENT, and pkg/PLIST
should each be double-checked. If you are reviewing a port and feel
they can be worded better, do so.Do not copy more copies of the GNU General Public License into
our system, please.Please be careful to note any legal issues! Do not let us
illegally distribute software!If you are stuck…Do look at existing examples and the
bsd.port.mk file before asking us questions!
;)Do ask us questions if you have any trouble! Do not just beat
your head against a wall! :)A Sample MakefileHere is a sample Makefile that you can use to
create a new port. Make sure you remove all the extra comments (ones
between brackets)!It is recommended that you follow this format (ordering of
variables, empty lines between sections, etc.). This format is
designed so that the most important information is easy to locate. We
recommend that you use portlint to check the
Makefile.
[the header...just to make it easier for us to identify the ports.]
# New ports collection makefile for: xdvi
[the version required header should updated when upgrading a port.]
# Version required: pl18 [things like "1.5alpha" are fine here too]
[this is the date when the first version of this Makefile was created.
Never change this when doing an update of the port.]
# Date created: 26 May 1995
[this is the person who did the original port to FreeBSD, in particular, the
person who wrote the first version of this Makefile. Remember, this should
not be changed when upgrading the port later.]
-# Whom: Satoshi Asami <asami@FreeBSD.ORG>
+# Whom: Satoshi Asami <asami@FreeBSD.org>
#
# $Id$
[ ^^^^ This will be automatically replaced with RCS ID string by CVS
when it is committed to our repository.]
#
[section to describe the port itself and the master site - DISTNAME
is always first, followed by PKGNAME (if necessary), CATEGORIES,
and then MASTER_SITES, which can be followed by MASTER_SITE_SUBDIR.
After those, one of EXTRACT_SUFX or DISTFILES can be specified too.]
DISTNAME= xdvi
PKGNAME= xdvi-pl18
CATEGORIES= print
[do not forget the trailing slash ("/")!
if you are not using MASTER_SITE_* macros]
MASTER_SITES= ${MASTER_SITE_XCONTRIB}
MASTER_SITE_SUBDIR= applications
[set this if the source is not in the standard ".tar.gz" form]
EXTRACT_SUFX= .tar.Z
[section for distributed patches -- can be empty]
PATCH_SITES= ftp://ftp.sra.co.jp/pub/X11/japanese/
PATCHFILES= xdvi-18.patch1.gz xdvi-18.patch2.gz
[maintainer; *mandatory*! This is the person (preferably with commit
privileges) who a user can contact for questions and bug reports - this
person should be the porter or someone who can forward questions to the
original porter reasonably promptly. If you really do not want to have
- your address here, set it to "ports@FreeBSD.ORG".]
-MAINTAINER= asami@FreeBSD.ORG
+ your address here, set it to "ports@FreeBSD.org".]
+MAINTAINER= asami@FreeBSD.org
[dependencies -- can be empty]
RUN_DEPENDS= gs:${PORTSDIR}/print/ghostscript
LIB_DEPENDS= Xpm.5:${PORTSDIR}/graphics/xpm
[this section is for other standard bsd.port.mk variables that do not
belong to any of the above]
[If it asks questions during configure, build, install...]
IS_INTERACTIVE= yes
[If it extracts to a directory other than ${DISTNAME}...]
WRKSRC= ${WRKDIR}/xdvi-new
[If the distributed patches were not made relative to ${WRKSRC}, you
may need to tweak this]
PATCH_DIST_STRIP= -p1
[If it requires a "configure" script generated by GNU autoconf to be run]
GNU_CONFIGURE= yes
[If it requires GNU make, not /usr/bin/make, to build...]
USE_GMAKE= yes
[If it is an X application and requires "xmkmf -a" to be run...]
USE_IMAKE= yes
[et cetera.]
[non-standard variables to be used in the rules below]
MY_FAVORITE_RESPONSE= "yeah, right"
[then the special rules, in the order they are called]
pre-fetch:
i go fetch something, yeah
post-patch:
i need to do something after patch, great
pre-install:
and then some more stuff before installing, wow
[and then the epilogue]
.include <bsd.port.mk>Automated package list creationFirst, make sure your port is almost complete, with only
PLIST missing. Create an empty
PLIST.&prompt.root; touch PLISTNext, create a new set of directories which your port can be
installed, and install any dependencies.&prompt.root; mtree -U -f /etc/mtree/BSD.local.dist -d -e -p /var/tmp/port-name
&prompt.root; make depends PREFIX=/var/tmp/port-nameStore the directory structure in a new file.&prompt.root; (cd /var/tmp/port-name && find * \! -type d) > OLD-DIRSIf your port honours PREFIX (which it should)
you can then install the port and create the package list.&prompt.root; make install PREFIX=/var/tmp
&prompt.root; (cd /var/tmp/port-name && find * \! -type d) > pkg/PLISTYou must also add any newly created directories to the packing
list.&prompt.root; (cd /var/tmp/port-name && find * -type d) | comm -13 OLD-DIRS - | sed -e 's#^#@dirrm#' >> pkg/PLISTFinally, you need to tidy up the packing list by hand. I lied
when I said this was all automated. Manual pages should be listed in
the port's Makefile under
MANn, and not in the
package list. User configuration files should be removed, or
installed as
filename.sample. Any
libraries installed by the port should be listed as specified in the
ldconfig section.Package NamesThe following are the conventions you should follow in naming your
packages. This is to have our package directory easy to scan, as
there are already lots and lots of packages and users are going to
turn away if they hurt their eyes!The package name should look like
language-name-compiled.specifics-version.numbers.If your DISTNAME does not look like that, set
PKGNAME to something in that format.FreeBSD strives to support the native language of its users.
The language- part should be a two
letter abbreviation of the natural language defined by ISO-639 if
the port is specific to a certain language. Examples are
ja for Japanese, ru for
Russian, vi for Vietnamese,
zh for Chinese, ko for
Korean and de for German.The name part should be all lowercases,
except for a really large package (with lots of programs in it).
Things like XFree86 (yes there really is a port of it, check it
out) and ImageMagick fall into this category. Otherwise, convert
the name (or at least the first letter) to lowercase. If the
capital letters are important to the name (for example, with
one-letter names like R or
V) you may use capital letters at your
discretion. There is a tradition of naming Perl 5 modules by
prepending p5- and converting the double-colon
separator to a hyphen; for example, the
Data::Dumper module becomes
p5-Data-Dumper. If the software in question
has numbers, hyphens, or underscores in its name, you may include
them as well (like kinput2).If the port can be built with different hardcoded defaults (usually
part of the directory name in a family of ports), the
-compiled.specifics part should state
the compiled-in defaults (the hyphen is optional). Examples are
papersize and font units.The version string should be a period-separated list of
integers and single lowercase alphabetics. The only exception is
the string pl (meaning `patchlevel'), which can
be used only when there are no major and
minor version numbers in the software.Here are some (real) examples on how to convert a
DISTNAME into a suitable
PKGNAME:Distribution NamePackage NameReasonmule-2.2.2.mule-2.2.2No changes requiredXFree86-3.1.2XFree86-3.1.2No changes requiredEmiClock-1.0.2emiclock-1.0.2No uppercase names for single programsgmod1.4gmod-1.4Need a hyphen before version numbersxmris.4.0.2xmris-4.0.2Need a hyphen before version numbersrdist-1.3alphardist-1.3aNo strings like alpha
allowedes-0.9-beta1es-0.9b1No strings like beta
allowedv3.3beta021.srctiff-3.3What the heck was that anyway?tvtwmtvtwm-pl11Version string always requiredpiewmpiewm-1.0Version string always requiredxvgr-2.10pl1xvgr-2.10.1pl allowed only when no
major/minor version numbersgawk-2.15.6ja-gawk-2.15.6Japanese language versionpsutils-1.13psutils-letter-1.13Papersize hardcoded at package build timepkfontspkfonts300-1.0Package for 300dpi fontsIf there is absolutely no trace of version information in the
original source and it is unlikely that the original author will ever
release another version, just set the version string to
1.0 (like the piewm example above). Otherwise, ask
the original author or use the date string
(yy.mm.dd) as the version.CategoriesAs you already know, ports are classified in several categories.
But for this to wor, it is important that porters and users understand
what each category and how we deicde what to put in each
category.Current list of categoriesFirst, this is the current list of port categories. Those
marked with an asterisk (*) are
virtual categories—those that do not have
a corresponding subdirectory in the ports tree.For non-virtual categories, you will find a one-line
description in the pkg/COMMENT file in that
subdirectory (e.g.,
archivers/pkg/COMMENT).CategoryDescriptionafterstep*Ports to support AfterStep window managerarchiversArchiving tools.astroAstronomical ports.audioSound support.benchmarksBenchmarking utilities.biologyBiology-related software.cadComputer aided design tools.chineseChinese language support.commsCommunication software. Mostly software to talk to
your serial port.convertersCharacter code converters.databasesDatabases.deskutilsThings that used to be on the desktop before
computers were invented.develDevelopment utilities. Do not put libraries here just
because they are libraries—unless they truly do not
belong to anywhere else, they should not be in this
category.editorsGeneral editors. Specialized editors go in the section
for those tools (e.g., a mathematical-formula editor will go
in math).elispEmacs-lisp ports.emulatorsEmulators for other operating systems. Terminal
emulators do not belong
here—X-based ones should go to
x11 and text-based ones to either
comms or misc,
depending on the exact functionality.gamesGames.germanGerman language support.graphicsGraphics utilities.ircInternet Chat Relay utilities.japaneseJapanese language support.javaJava languge support.kde*Ports that form the K Desktop Environment
(kde).koreanKorean language support.langProgramming languages.mailMail software.mathNumerical computation software and other utilities
for mathematics.mboneMBone applications.miscMiscellaneous utilities—basically things that
does not belong to anywhere else. This is the only category
that should not appear with any other non-virtual category.
If you have misc with something else in
your CATEGORIES line, that means you can
safely delete misc and just put the port
in that other subdirectory!netMiscellaneous networking software.newsUSENET news software.offix*Ports from the OffiX suite.palmSoftware support for the 3Com Palm(tm) series.perl5*Ports that require perl version 5 to run.plan9*Various programs from Plan9.printPrinting software. Desktop publishing tools
(previewers, etc.) belong here too.python*Software written in python.russianRussian language support.securitySecurity utilities.shellsCommand line shells.sysutilsSystem utilities.tcl75*Ports that use tcl version 7.5 to run.tcl76*Ports that use tcl version 7.6 to run.tcl80*Ports that use tcl version 8.0 to run.tcl81*Ports that use tcl version 8.1 to run.textprocText processing utilities. It does not include
desktop publishing tools, which go to print/.tk41*Ports that use tk version 4.1 to run.tk42*Ports that use tk version 4.2 to run.tk80*Ports that use tk version 8.0 to run.tk81*Ports that use tk version 8.1 to run.vietnameseVietnamese language support.windowmaker*Ports to support the WindowMaker window
managerwwwSoftware related to the World Wide Web. HTML language
support belong here too.x11The X window system and friends. This category is only
for software that directly support the window system. Do not
put regular X applications here. If your port is an X
application, define USE_XLIB (implied by
USE_IMAKE) and put it in appropriate
categories. Also, many of them go into other
x11-* categories (see below).x11-clocksX11 clocks.x11-fmX11 file managers.x11-fontsX11 fonts and font utilities.x11-serversX11 servers.x11-toolkitsX11 toolkits.x11-wmX11 window managers.Choosing the right categoryAs many of the categories overlap, you often have to choose
which of the categories should be the primary category of your port.
There are several rules that govern this usse. Here is the list of
priorities, in decreasing order of precedence.Language specific categories always come first. For
example, if your port installs Japanese X11 fonts, then your
CATEGORIES line would read japanese
x11-fonts.Specific categories win over less-specific ones. For
instance, an HTML editor should be listed as www
editors, not the other way around. Also, you do not
need to list net when the port belongs to
either of irc, mail,
mbone, news,
security, or www.x11 is used as a secondary category only
when the primary category is a natural language. In particular,
you should not put x11 in the category line
for X applications.If your port truly does not belong anywhere else, put it in
misc.If you are not sure about the category, please put a comment to
that effect in your send-pr submission so we can
discuss it before import it. (If you are a committer, send a note
&a.ports; so we can discuss it first—too often new ports are
imported to a wrong category only to be moved right away.)Changes to this document and the ports systemIf you maintain a lot of ports, you should consider following the
&a.ports;. Important changes to the way ports work will be announced
there. You can always find more detailed information on the latest
changes by looking at the
+ url="http://www.FreeBSD.org/cgi/cvsweb.cgi/ports/Mk/bsd.port.mk"> the
bsd.port.mk CVS log.That is It, Folks!Boy, this sure was a long tutorial, wasn't it? Thanks for
following us to here, really.Well, now that you know how to do a port, let us go at it and
convert everything in the world into ports! That is the easiest way to
start contributing to the FreeBSD Project! :)
diff --git a/en_US.ISO8859-1/books/porters-handbook/book.sgml b/en_US.ISO8859-1/books/porters-handbook/book.sgml
index 6761767edb..98d9b59fc7 100644
--- a/en_US.ISO8859-1/books/porters-handbook/book.sgml
+++ b/en_US.ISO8859-1/books/porters-handbook/book.sgml
@@ -1,4660 +1,4660 @@
Installing Applications: The Ports collectionContributed by &a.jraynard;.The FreeBSD Ports collection allows you to compile and install a very
wide range of applications with a minimum of effort.For all the hype about open standards, getting a program to work on
different versions of Unix in the real world can be a tedious and tricky
business, as anyone who has tried it will know. You may be lucky enough
to find that the program you want will compile cleanly on your system,
install itself in all the right places and run flawlessly “out of
the box”, but this is unfortunately rather rare. With most
programs, you will find yourself doing a fair bit of head-scratching, and
there are quite a few programs that will result in premature greying, or
even chronic alopecia...Some software distributions have attacked this problem by providing
configuration scripts. Some of these are very clever, but they have an
unfortunate tendency to triumphantly announce that your system is
something you have never heard of and then ask you lots of questions that
sound like a final exam in system-level Unix programming (Does
your system's gethitlist function return a const pointer to a fromboz or
a pointer to a const fromboz? Do you have Foonix style unacceptable
exception handling? And if not, why not?).Fortunately, with the Ports collection, all the hard work involved has
already been done, and you can just type make install
and get a working program.Why Have a Ports Collection?The base FreeBSD system comes with a very wide range of tools and
system utilities, but a lot of popular programs are not in the base
system, for good reasons:-Programs that some people cannot live without and other people
cannot stand, such as a certain Lisp-based editor.Programs which are too specialised to put in the base system
(CAD, databases).Programs which fall into the “I must have a look at that
when I get a spare minute” category, rather than
system-critical ones (some languages, perhaps).Programs that are far too much fun to be supplied with a serious
operating system like FreeBSD ;-)However many programs you put in the base system, people will
always want more, and a line has to be drawn somewhere (otherwise
FreeBSD distributions would become absolutely enormous).Obviously it would be unreasonable to expect everyone to port their
favourite programs by hand (not to mention a tremendous amount of
duplicated work), so the FreeBSD Project came up with an ingenious way
of using standard tools that would automate the process.Incidentally, this is an excellent illustration of how “the
Unix way” works in practice by combining a set of simple but very
flexible tools into something very powerful.How Does the Ports Collection Work?Programs are typically distributed on the Internet as a tarball consisting of a Makefile and
the source code for the program and usually some instructions (which are
unfortunately not always as instructive as they could be), with perhaps
a configuration script.The standard scenario is that you FTP down the tarball, extract it
somewhere, glance through the instructions, make any changes that seem
necessary, run the configure script to set things up and use the
standard make program to compile and install the
program from the source.FreeBSD ports still use the tarball mechanism, but use a skeleton to hold the
"knowledge" of how to get the program working on FreeBSD,
rather than expecting the user to be able to work it out. They also
supply their own customised Makefile, so that almost every port
can be built in the same way.If you look at a port skeleton (either on your FreeBSD
system or the
FTP site) and expect to find all sorts of pointy-headed rocket
science lurking there, you may be disappointed by the one or two rather
unexciting-looking files and directories you find there. (We will
discuss in a minute how to go about Getting a port).“How on earth can this do anything?” I hear you cry.
“There is no source code there!”Fear not, gentle reader, all will become clear (hopefully). Let us
see what happens if we try and install a port. I have chosen
ElectricFence, a useful tool for developers,
as the skeleton is more straightforward than most.If you are trying this at home, you will need to be root.&prompt.root; cd /usr/ports/devel/ElectricFence
&prompt.root; make install
>> Checksum OK for ElectricFence-2.0.5.tar.gz.
===> Extracting for ElectricFence-2.0.5
===> Patching for ElectricFence-2.0.5
===> Applying FreeBSD patches for ElectricFence-2.0.5
===> Configuring for ElectricFence-2.0.5
===> Building for ElectricFence-2.0.5
[lots of compiler output...]
===> Installing for ElectricFence-2.0.5
===> Warning: your umask is "0002". If this is not desired, set it to
an appropriate value and install this port again by ``make reinstall''.
install -c -o root -g wheel -m 444 /usr/ports/devel/ElectricFence/work/ElectricFence-2.0.5/libefence.a /usr/local/lib
install -c -o root -g wheel -m 444 /usr/ports/devel/ElectricFence/work/ElectricFence-2.0.5/libefence.3 /usr/local/man/man3
===> Compressing manual pages for ElectricFence-2.0.5
===> Registering installation for ElectricFence-2.0.5To avoid confusing the issue, I have completely removed the build
output.If you tried this yourself, you may well have got something like
this at the start:-&prompt.root; make install
>> ElectricFence-2.0.5.tar.gz doesn't seem to exist on this system.
>> Attempting to fetch from ftp://ftp.doc.ic.ac.uk/Mirrors/sunsite.unc.edu/pub/Linux/devel/lang/c/.The make program has noticed that you did not
have a local copy of the source code and tried to FTP it down so it
could get the job done. I already had the source handy in my example,
so it did not need to fetch it.Let's go through this and see what the make
program was doing.Locate the source code tarball. If it is not available
locally, try to grab it from an FTP site.Run a checksum test on the
tarball to make sure it has not been tampered with, accidentally
truncated, downloaded in ASCII mode, struck by neutrinos while in
transit, etc.Extract the tarball into a temporary work directory.Apply any patches needed to
get the source to compile and run under FreeBSD.Run any configuration script required by the build process and
correctly answer any questions it asks.(Finally!) Compile the code.Install the program executable and other supporting files, man
pages, etc. under the /usr/local hierarchy
(unless this is an X11 program,
then it will be under /usr/X11R6),
where they will not get mixed up with system programs. This also
makes sure that all the ports you install will go in the same place,
instead of being flung all over your system.Register the installation in a database. This means that, if
you do not like the program, you can cleanly remove all traces of it from your
system.Scroll up to the make output and see if you can
match these steps to it. And if you were not impressed before, you
should be by now!Getting a FreeBSD PortThere are two ways of getting hold of the FreeBSD port for a
program. One requires a FreeBSD CDROM,
the other involves using an Internet
Connection.Compiling ports from CDROMAssuming that your FreeBSD CDROM is in the drive and mounted on
/cdrom (and the mount point
must be /cdrom), you should
then be able to build ports just as you normally do and the port
collection's built in search path should find the tarballs in
/cdrom/ports/distfiles/ (if they exist there)
rather than downloading them over the net.Another way of doing this, if you want to just use the port
skeletons on the CDROM, is to set these variables in
/etc/make.conf:
PORTSDIR= /cdrom/ports
DISTDIR= /tmp/distfiles
WRKDIRPREFIX= /tmpSubstitute /tmp for any place you have enough
free space. Then, just cd to the appropriate
subdirectory under /cdrom/ports and type
make install as usual.
WRKDIRPREFIX will cause the port to be build under
/tmp/cdrom/ports; for instance,
games/oneko will be built under
/tmp/cdrom/ports/games/oneko.There are some ports for which we cannot provide the original
source in the CDROM due to licensing limitations. In that case, you
will need to look at the section on Compiling ports using an Internet
connection.Compiling ports from the InternetIf you do not have a CDROM, or you want to make sure you get the
very latest version of the port you want, you will need to download
the skeleton for the port. Now
this might sound like rather a fiddly job full of pitfalls, but it is
actually very easy.First, if you are running a release version of FreeBSD, make sure
you get the appropriate “upgrade kit” for your release
from the ports web
page. These packages include files that have been updated
since the release that you may need to compile new ports.The key to the skeletons is that the FreeBSD FTP server can create
on-the-fly tarballs for you.
Here is how it works, with the gnats program in the databases
directory as an example (the bits in square brackets are comments. Do
not type them in if you are trying this yourself!):-&prompt.root; cd /usr/ports
&prompt.root; mkdir databases
&prompt.root; cd databases
&prompt.root; ftp ftp.FreeBSD.org
[log in as `ftp' and give your email address when asked for a
password. Remember to use binary (also known as image) mode!]
ftp>cd /pub/FreeBSD/ports/ports/databasesftp>get gnats.tar
[tars up the gnats skeleton for us]
ftp>quit
&prompt.root; tar xf gnats.tar
[extract the gnats skeleton]
&prompt.root; cd gnats
&prompt.root; make install
[build and install gnats]What happened here? We connected to the FTP server in the usual
way and went to its databases sub-directory.
When we gave it the command get gnats.tar, the FTP
server tarred up the gnats
directory for us.We then extracted the gnats skeleton and went into the gnats
directory to build the port. As we explained earlier, the make process noticed we
did not have a copy of the source locally, so it fetched one before
extracting, patching and building it.Let us try something more ambitious now. Instead of getting a
single port skeleton, we will get a whole sub-directory, for example all
the database skeletons in the ports collection. It looks almost the
same:-&prompt.root; cd /usr/ports
&prompt.root; ftp ftp.FreeBSD.org
[log in as `ftp' and give your email address when asked for a
password. Remember to use binary (also known as image) mode!]
ftp>cd /pub/FreeBSD/ports/portsftp>get databases.tar
[tars up the databases directory for us]
ftp>quit
&prompt.root; tar xf databases.tar
[extract all the database skeletons]
&prompt.root; cd databases
&prompt.root; make install
[build and install all the database ports]With half a dozen straightforward commands, we have now got a set
of database programs on our FreeBSD machine! All we did that was
different from getting a single port skeleton and building it was that
we got a whole directory at once, and compiled everything in it at
once. Pretty impressive, no?If you expect to be installing many ports, it is probably worth
downloading all the ports directories.SkeletonsA team of compulsive hackers who have forgotten to eat in a frantic
attempt to make a deadline? Something unpleasant lurking in the FreeBSD
attic? No, a skeleton here is a minimal framework that supplies
everything needed to make the ports magic work.MakefileThe most important component of a skeleton is the Makefile. This
contains various statements that specify how the port should be
compiled and installed. Here is the Makefile for
ElectricFence:-
# New ports collection makefile for: Electric Fence
# Version required: 2.0.5
# Date created: 13 November 1997
# Whom: jraynard
#
# $Id$
#
DISTNAME= ElectricFence-2.0.5
CATEGORIES= devel
MASTER_SITES= ${MASTER_SITE_SUNSITE}
MASTER_SITE_SUBDIR= devel/lang/c
-MAINTAINER= jraynard@freebsd.org
+MAINTAINER= jraynard@FreeBSD.org
MAN3= libefence.3
do-install:
${INSTALL_DATA} ${WRKSRC}/libefence.a ${PREFIX}/lib
${INSTALL_MAN} ${WRKSRC}/libefence.3 ${PREFIX}/man/man3
.include <bsd.port.mk>The lines beginning with a "#" sign are comments for the
benefit of human readers (as in most Unix script files).DISTNAME specifies the name of the tarball, but without the
extension.CATEGORIES states what kind of program this is.
In this case, a utility for developers. See the categories section of this
handbook for a complete list.MASTER_SITES is the URL(s) of the master FTP
site, which is used to retrieve the tarball if it is not available on the
local system. This is a site which is regarded as reputable, and is
normally the one from which the program is officially distributed (in
so far as any software is "officially" distributed on the
Internet).MAINTAINER is the email address of the person
who is responsible for updating the skeleton if, for example a new
version of the program comes out.Skipping over the next few lines for a minute, the line
.include <bsd.port.mk> says that the other
statements and commands needed for this port are in a standard file
called bsd.port.mk. As these are the same for
all ports, there is no point in duplicating them all over the place,
so they are kept in a single standard file.This is probably not the place to go into a detailed examination
of how Makefiles work; suffice it to say that the line starting with
MAN3 ensures that the ElectricFence man page is
compressed after installation, to help conserve your precious disk
space. The original port did not provide an
install target, so the three lines from
do-install ensure that the files produced by
this port are placed in the correct destination.The files directoryThe file containing the checksum for the port is called
md5, after the MD5 algorithm used for ports
checksums. It lives in a directory with the slightly confusing name
of files.This directory can also contain other miscellaneous files that are
required by the port and do not belong anywhere else.The patches directoryThis directory contains the patches needed to make everything work
properly under FreeBSD.The pkg directoryThis program contains three quite useful files:-COMMENT — a one-line description of
the program.DESCR — a more detailed
description.PLIST — a list of all the files
that will be created when the program is installed.What to do when a port does not work.Oh. You can do one of four (4) things :Fix it yourself. Technical details on how ports work can be
found in Porting applications.Gripe. This is done by e-mail only! Send
such e-mail to the maintainer of the port, first. Type
make maintainer or read the
Makefile to find the maintainer's email
address. Remember to include the name/version of
the port (copy the $Id: line from the
Makefile), and the output leading up-to the
error, inclusive. If you do not get a satisfactory response,
you can try filing a bug report with send-pr.
Forget it. This is the easiest for most — very few of the
programs in ports can be classified as essential!Grab the pre-compiled package from a ftp server. The
“master” package collection is on FreeBSD's FTP server
in the packages
directory, though check your local mirror first, please!
These are more likely to work (on the whole) than trying to compile
from source and a lot faster besides! Use the &man.pkg.add.1;
program to install a package file on your
system.Some Questions and AnswersQ. I thought this was going to be a discussion about
modems??!A. Ah. You must be thinking of the serial ports on the back of
your computer. We are using “port” here to mean the
result of “porting” a program from one version of Unix
to another. (It is an unfortunate bad habit of computer people to
use the same word to refer to several completely different
things).Q. I thought you were supposed to use packages to install extra
programs?A. Yes, that is usually the quickest and easiest way of doing
it.Q. So why bother with ports then?A. Several reasons:-The licensing conditions on some software distributions
require that they be distributed as source code, not
binaries.Some people do not trust binary distributions. At least
with source code you can (in theory) read through it and look
for potential problems yourself.If you have some local patches, you will need the source to
add them yourself.You might have opinions on how a program should be compiled
that differ from the person who did the package — some
people have strong views on what optimisation setting should be
used, whether to build debug versions and then strip them or
not, etc. etc.Some people like having code around, so they can read it if
they get bored, hack around with it, borrow from it (licence
terms permitting, of course!) and so on.If you ain't got the source, it ain't software! ;-) Q. What is a patch?A. A patch is a small (usually) file that specifies how to go
from one version of a file to another. It contains text that says,
in effect, things like “delete line 23”, “add
these two lines after line 468” or “change line 197 to
this”. Also known as a “diff”, since it is
generated by a program of that name. Q. What is all this about
tarballs?A. It is a file ending in .tar or
.tar.gz (with variations like
.tar.Z, or even .tgz if
you are trying to squeeze the names into a DOS filesystem).Basically, it is a directory tree that has been archived into a
single file (.tar) and optionally compressed
(.gz). This technique was originally used for
Tape ARchives (hence the
name tar), but it is a widely used way of
distributing program source code around the Internet.You can see what files are in them, or even extract them
yourself, by using the standard Unix tar program, which comes with
the base FreeBSD system, like this:-&prompt.user; tar tvzf foobar.tar.gz
&prompt.user; tar xzvf foobar.tar.gz
&prompt.user; tar tvf foobar.tar
&prompt.user; tar xvf foobar.tar Q. And a checksum?A. It is a number generated by adding up all the data in the
file you want to check. If any of the characters change, the
checksum will no longer be equal to the total, so a simple
comparison will allow you to spot the difference. (In practice, it
is done in a more complicated way to spot problems like
position-swapping, which will not show up with a simplistic
addition).Q. I did what you said for compiling
ports from a CDROM and it worked great until I tried to
install the kermit port:-&prompt.root; make install
>> cku190.tar.gz doesn't seem to exist on this system.
>> Attempting to fetch from ftp://kermit.columbia.edu/kermit/archives/.Why can it not be found? Have I got a dud CDROM?A. The licensing terms for kermit do not allow us to put the
tarball for it on the CDROM, so you will have to fetch it by hand
— sorry! The reason why you got all those error messages was
because you were not connected to the Internet at the time. Once
you have downloaded it from any of the sites above, you can re-start
the process (try and choose the nearest site to you, though, to save
your time and the Internet's bandwidth).Q. I did that, but when I tried to put it into
/usr/ports/distfiles I got some error about not
having permission.A. The ports mechanism looks for the tarball in
/usr/ports/distfiles, but you will not be able
to copy anything there because it is sym-linked to the CDROM, which
is read-only. You can tell it to look somewhere else by
doing&prompt.root; make DISTDIR=/where/you/put/it installQ. Does the ports scheme only work if you have everything in
/usr/ports? My system administrator says I must
put everything under
/u/people/guests/wurzburger, but it does not
seem to work.A. You can use the PORTSDIR and
PREFIX variables to tell the ports mechanism to
use different directories. For instance,&prompt.root; make PORTSDIR=/u/people/guests/wurzburger/ports installwill compile the port in
/u/people/guests/wurzburger/ports and install
everything under /usr/local.&prompt.root; make PREFIX=/u/people/guests/wurzburger/local installwill compile it in /usr/ports and install
it in /u/people/guests/wurzburger/local.And of course&prompt.root; make PORTSDIR=.../ports PREFIX=.../local installwill combine the two (it is too long to fit on the page if I
write it in full, but I am sure you get the idea).If you do not fancy typing all that in every time you install a
port (and to be honest, who would?), it is a good idea to put these
variables into your environment.Q. I do not have a FreeBSD CDROM, but I would like to have all
the tarballs handy on my system so I do not have to wait for a
download every time I install a port. Is there an easy way to get
them all at once?A. To get every single tarball for the ports collection,
do&prompt.root; cd /usr/ports
&prompt.root; make fetchFor all the tarballs for a single ports directory, do&prompt.root; cd /usr/ports/directory
&prompt.root; make fetchand for just one port — well, I think you have guessed
already.Q. I know it is probably faster to fetch the tarballs from one
of the FreeBSD mirror sites close by. Is there any way to tell the
port to fetch them from servers other than ones listed in the
MASTER_SITES?A. Yes. If you know, for example, ftp.FreeBSD.ORG is much closer than sites
+ role="fqdn">ftp.FreeBSD.org is much closer than sites
listed in MASTER_SITES, do as following
example.&prompt.root; cd /usr/ports/directory
-&prompt.root; make MASTER_SITE_OVERRIDE=ftp://ftp.FreeBSD.ORG/pub/FreeBSD/ports/distfiles/ fetch
+&prompt.root; make MASTER_SITE_OVERRIDE=ftp://ftp.FreeBSD.org/pub/FreeBSD/ports/distfiles/ fetchQ. I want to know what files make is going to need before it
tries to pull them down.A. make fetch-list will display a list of
the files needed for a port.Q. Is there any way to stop the port from compiling? I want to
do some hacking on the source before I install it, but it is a bit
tiresome having to watch it and hit control-C every time.A. Doing make extract will stop it after it
has fetched and extracted the source code.Q. I am trying to make my own port and I want to be able to
stop it compiling until I have had a chance to see if my patches
worked properly. Is there something like make
extract, but for patches?A. Yep, make patch is what you want. You
will probably find the PATCH_DEBUG option useful
as well. And by the way, thank you for your efforts!Q. I have heard that some compiler options can cause bugs. Is
this true? How can I make sure that I compile ports with the right
settings?A. Yes, with version 2.6.3 of gcc (the
version shipped with FreeBSD 2.1.0 and 2.1.5), the
option could result in buggy code unless you
used the option as well.
(Most of the ports do not use ). You
should be able to specify the compiler options
used by something like&prompt.root; make CFLAGS='-O2 -fno-strength-reduce' installor by editing /etc/make.conf, but
unfortunately not all ports respect this. The surest way is to do
make configure, then go into the source directory
and inspect the Makefiles by hand, but this can get tedious if the
source has lots of sub-directories, each with their own
Makefiles.Q. There are so many ports it is hard to find the one I want.
Is there a list anywhere of what ports are available?A. Look in the INDEX file in
/usr/ports. If you would like to search the
ports collection for a keyword, you can do that too. For example,
you can find ports relevant to the LISP programming language
using:&prompt.user; cd /usr/ports
&prompt.user; make search key=lispQ. I went to install the foo port but the
system suddenly stopped compiling it and starting compiling the
bar port. What is going on?A. The foo port needs something that is
supplied with bar — for instance, if
foo uses graphics, bar might
have a library with useful graphics processing routines. Or
bar might be a tool that is needed to compile the
foo port. Q. I installed the
grizzle program from the ports and frankly it is
a complete waste of disk space. I want to delete it but I do not
know where it put all the files. Any clues?A. No problem, just do&prompt.root; pkg_delete grizzle-6.5Alternatively, you can do&prompt.root; cd /usr/ports/somewhere/grizzle
&prompt.root; make deinstall
Q. Hang on a minute, you have to know the version number to use
that command. You do not seriously expect me to remember that, do
you??A. Not at all, you can find it out by doing&prompt.root; pkg_info -a | grep grizzle
Information for grizzle-6.5:
grizzle-6.5 - the combined piano tutorial, LOGO interpreter and shoot 'em up arcade game.Q. Talking of disk space, the ports directory seems to be
taking up an awful lot of room. Is it safe to go in there and
delete things?A. Yes, if you have installed the program and are fairly
certain you will not need the source again, there is no point in
keeping it hanging around. The best way to do this is&prompt.root; cd /usr/ports
&prompt.root; make cleanwhich will go through all the ports subdirectories and delete
everything except the skeletons for each port.Q. I tried that and it still left all those tarballs or
whatever you called them in the distfiles
directory. Can I delete those as well?A. Yes, if you are sure you have finished with them, those can
go as well.Q. I like having lots and lots of programs to play with. Is
there any way of installing all the ports in one go?A. Just do&prompt.root; cd /usr/ports
&prompt.root; make installQ. OK, I tried that, but I thought it would take a very long
time so I went to bed and left it to get on with it. When I looked
at the computer this morning, it had only done three and a half
ports. Did something go wrong?A. No, the problem is that some of the ports need to ask you
questions that we cannot answer for you (eg “Do you want to
print on A4 or US letter sized paper?”) and they need to have
someone on hand to answer them.Q. I really do not want to spend all day staring at the
monitor. Any better ideas?A. OK, do this before you go to bed/work/the local
park:-&prompt.root cd /usr/ports
&prompt.root; make -DBATCH installThis will install every port that does not
require user input. Then, when you come back, do&prompt.root; cd /usr/ports
&prompt.root; make -DIS_INTERACTIVE installto finish the job.Q. At work, we are using frobble, which is
in your ports collection, but we have altered it quite a bit to get
it to do what we need. Is there any way of making our own packages,
so we can distribute it more easily around our sites?A. No problem, assuming you know how to make patches for your
changes:-&prompt.root; cd /usr/ports/somewhere/frobble
&prompt.root; make extract
&prompt.root; cd work/frobble-2.8
[Apply your patches]
&prompt.root; cd ../..
&prompt.root; make packageQ. This ports stuff is really clever. I am desperate to find
out how you did it. What is the secret?A. Nothing secret about it at all, just look at the
bsd.ports.mk and
bsd.ports.subdir.mk files in your makefiles
directory.Readers with an aversion to intricate shell-scripts are
advised not to follow this link...)Making a port yourselfContributed by &a.jkh;, &a.gpalmer;, &a.asami;, &a.obrien;,
and &a.hoek;. 28 August 1996.So, now you are interested in making your own port or upgrading
an existing one? Great!What follows are some guidelines for creating a new port for
FreeBSD. If you want to upgrade an existing port, you should read this
and then read .When this document is not sufficiently detailed, you should refer to
/usr/ports/Mk/bsd.port.mk, which all port Makefiles
include. Even if you do not hack Makefiles daily, it is well
commented, and you will still gain much knowledge from it.
Additionally, you may send specific questions to &a.ports;.Only a fraction of the overridable variables
(VAR) are mentioned in
this document. Most (if not all) are documented at the start of
bsd.port.mk. This file users a non-standard tab
setting. Emacs and
Vim should recognise the setting on loading
the file. Both vi and ex can be
set to use the correct value by typing :set tabstop=4
once the file has been loaded.Quick PortingThis section tells you how to do a quick port. In many cases, it
is not enough, but we will see.First, get the original tarball and put it into
DISTDIR, which defaults to
/usr/ports/distfiles.The following assumes that the software compiled out-of-the-box,
i.e., there was absolutely no change required for the port to work
on your FreeBSD box. If you needed to change something, you will
have to refer to the next section too.Writing the MakefileThe minimal Makefile would look something
like this:
# New ports collection makefile for: oneko
# Version required: 1.1b
# Date created: 5 December 1994
# Whom: asami
#
# $Id$
#
DISTNAME= oneko-1.1b
CATEGORIES= games
MASTER_SITES= ftp://ftp.cs.columbia.edu/archives/X11R5/contrib/
-MAINTAINER= asami@FreeBSD.ORG
+MAINTAINER= asami@FreeBSD.org
MAN1= oneko.1
MANCOMPRESSED= yes
USE_IMAKE= yes
.include <bsd.port.mk>See if you can figure it out. Do not worry about the contents
of the $Id$ line, it will be filled in
automatically by CVS when the port is imported to our main ports
tree. You can find a more detailed example in the sample Makefile section.Writing the description filesThere are three description files that are required for any
port, whether they actually package or not. They are
COMMENT, DESCR, and
PLIST, and reside in the
pkg subdirectory.COMMENTThis is the one-line description of the port.
Please do not include the package name (or
version number of the software) in the comment. The comment
should begin with a capital, and end without a period. Here
is an example:
A cat chasing a mouse all over the screenDESCRThis is a longer description of the port. One to a few
paragraphs concisely explaining what the port does is
sufficient.This is not a manual or an in-depth
description on how to use or compile the port! Please
be careful if you are copying from the
README or manpage; too often
they are not a concise description of the port or are in an
awkward format (e.g., manpages have justified spacing). If the
ported software has an official WWW homepage, you should list it
here. Prefix one of the websites with
WWW: so that automated tools will work
correctly.It is recommended that you sign your name at the end of this
file, as in:
This is a port of oneko, in which a cat chases a poor mouse all over
the screen.
:
(etc.)
WWW: http://www.oneko.org/
- Satoshi
asami@cs.berkeley.eduPLISTThis file lists all the files installed by the port. It is
also called the “packing list” because the package is
generated by packing the files listed here. The pathnames are
relative to the installation prefix (usually
/usr/local or
/usr/X11R6). If you are using the
MANn variables (as
you should be), do not list any manpages here.Here is a small example:
bin/oneko
lib/X11/app-defaults/Oneko
lib/X11/oneko/cat1.xpm
lib/X11/oneko/cat2.xpm
lib/X11/oneko/mouse.xpm
@dirrm lib/X11/onekoRefer to the &man.pkg.create.1; man page for details on the
packing list.You should list all the files, but not the name directories,
in the list. Also, if the port creates directories for itself
during installtion, make sure to add @dirrm
lines as necessary to remove them when the port is
deleted.It is recommended that you keep all the filenames in this
file sorted alphabetically. It will make verifying the changes
when you upgrade the port much easier.Creating a packing list manually can be a very tedious
task. If the port installs a large numbers of files, creating the packing list
automatically might save time.Creating the checksum fileJust type make makesum. The ports make rules
will automatically generate the file
files/md5.Testing the portYou should make sure that the port rules do exactly what you
want it to do, including packaging up the port. These are the
important points you need to verify.PLIST does not contain anything not
installed by your portPLIST contains everything that is
installed by your portYour port can be installed multiple times using the
reinstall targetYour port cleans up
after itself upon deinstallRecommended test orderingmake installmake packagemake deinstallpkg_add package-namemake deinstallmake reinstallmake packageMake sure that there are not any warnings issued in any of the
package and
deinstall stages, After step 3, check to
see if all the new directories are correctly deleted. Also, try
using the software after step 4, to ensure that is works correctly
when installed from a package.Checking your port with portlintPlease use portlint to see if your port
conforms to our guidelines. The portlint program
is part of the ports collection. In particular, your may want to
check if the Makefile is in
the right shape and the package is named
appropriately.Submitting the portFirst, make sure you have read the Do's and Dont's section.Now that you are happy with your port, the only thing remaining
is to put it in the main FreeBSD ports tree and make everybody else
happy about it too. We do not need your work
directory or the pkgname.tgz package, so delete
them now. Next, simply include the output of shar `find
port_dir` in a bug report and send it with the
&man.send-pr.1; program (see Bug
Reports and General Commentary for more information about
&man.send-pr.1;. If the uncompressed port is larger than 20KB,
you should compress it into a tarfile and use &man.uuencode.1;
before including it in the bug report (uuencoded tarfiles are
acceptable even if the bug report is smaller than 20KB but are not
preferred). Be sure to classify the bug report as category
ports and class
change-request. (Do not mark the report
confidential!)One more time, do not include the original source
distfile, the work directory, or the package
you built with make package.In the past, we asked you to upload new port submissions in
our ftp site (ftp.FreeBSD.org). This
is no longer recommended as read access is turned off on that
incoming/ directory of that site due to the
large amount of pirated software showing up there.We will look at your port, get back to you if necessary, and put
it in the tree. Your name will also appear in the list of
“Additional FreeBSD contributors” on the FreeBSD
Handbook and other files. Isn't that great?!? :)Slow PortingOk, so it was not that simple, and the port required some
modifications to get it to work. In this section, we will explain,
step by step, how to modify it to get it to work with the ports
paradigm.How things workFirst, this is the sequence of events which occurs when the user
first types make in your port's directory, and
you may find that having bsd.port.mk in another
window while you read this really helps to understand it.But do not worry if you do not really understand what
bsd.port.mk is doing, not many people do...
:>The fetch target is run. The
fetch target is responsible for making
sure that the tarball exists locally in
DISTDIR. If fetch
cannot find the required files in DISTDIR it
will look up the URL MASTER_SITES, which is
set in the Makefile, as well as our main ftp site at ftp://ftp.FreeBSD.org/pub/FreeBSD/ports/distfiles/,
where we put sanctioned distfiles as backup. It will then
attempt to fetch the named distribution file with
FETCH, assuming that the requesting site has
direct access to the Internet. If that succeeds, it will save
the file in DISTDIR for future use and
proceed.The extract target is run. It
looks for your port's distribution file (typically a gzip'd
tarball) in DISTDIR and unpacks it into a
temporary subdirectory specified by WRKDIR
(defaults to work).The patch target is run. First,
any patches defined in PATCHFILES are
applied. Second, if any patches are found in
PATCHDIR (defaults to the
patches subdirectory), they are applied at
this time in alphabetical order.The configure target is run. This
can do any one of many different things.If it exists, scripts/configure is
run.If HAS_CONFIGURE or
GNU_CONFIGURE is set,
WRKSRC/configure is
run.If USE_IMAKE is set,
XMKMF (default: xmkmf
-a) is run.The build target is run. This is
responsible for descending into the port's private working
directory (WRKSRC) and building it. If
USE_GMAKE is set, GNU make
will be used, otherwise the system make will
be used.The above are the default actions. In addition, you can define
targets
pre-something or
post-something,
or put scripts with those names, in the scripts
subdirectory, and they will be run before or after the default
actions are done.For example, if you have a post-extract
target defined in your Makefile, and a file
pre-build in the scripts
subdirectory, the post-extract target will
be called after the regular extraction actions, and the
pre-build script will be executed before the
default build rules are done. It is recommended that you use
Makefile targets if the actions are simple
enough, because it will be easier for someone to figure out what
kind of non-default action the port requires.The default actions are done by the
bsd.port.mk targets
do-something.
For example, the commands to extract a port are in the target
do-extract. If you are not happy with the
default target, you can fix it by redefining the
do-something
target in your Makefile.The “main” targets (e.g.,
extract,
configure, etc.) do nothing more than
make sure all the stages up to that one are completed and call
the real targets or scripts, and they are not intended to be
changed. If you want to fix the extraction, fix
do-extract, but never ever touch
extract!Now that you understand what goes on when the user types
make, let us go through the recommended steps to
create the perfect port.Getting the original sourcesGet the original sources (normally) as a compressed tarball
(foo.tar.gz or
foo.tar.Z) and copy
it into DISTDIR. Always use
mainstream sources when and where you
can.If you cannot find a ftp/http site that is well-connected to the
net, or can only find sites that have irritatingly non-standard
formats, you might want to put a copy on a reliable ftp or http
server that you control (e.g., your home page). Make sure you set
MASTER_SITES to reflect your choice.If you cannot find somewhere convenient and reliable to put the
distfile (if you are a FreeBSD committer, you can just put it in
your public_html/ directory on
freefall), we can “house” it ourselves
by putting it on
ftp://ftp.FreeBSD.org/pub/FreeBSD/ports/distfiles/LOCAL_PORTS/
as the last resort. Please refer to this location as
MASTER_SITE_LOCAL. Send mail to the &a.ports;if
you are not sure what to do.If your port's distfile changes all the time for no good reason,
consider putting the distfile in your home page and listing it as
the first MASTER_SITES. This will prevent users
from getting checksum mismatch errors, and
also reduce the workload of maintainers of our ftp site. Also, if
there isonly one master site for the port, it is recommended that
you house a backup at your site and list it as the second
MASTER_SITES.If your port requires some additional `patches' that are
available on the Internet, fetch them too and put them in
DISTDIR. Do not worry if they come from a site
other than where you got the main source tarball, we have a way to
handle these situations (see the description of PATCHFILES below).Modifying the portUnpack a copy of the tarball in a private directory and make
whatever changes are necessary to get the port to compile properly
under the current version of FreeBSD. Keep careful
track of everything you do, as you will be automating
the process shortly. Everything, including the deletion, addition
or modification of files should be doable using an automated script
or patch file when your port is finished.If your port requires significant user interaction/customization
to compile or install, you should take a look at one of Larry Wall's
classic Configure scripts and perhaps do
something similar yourself. The goal of the new ports collection is
to make each port as “plug-and-play” as possible for the
end-user while using a minimum of disk space.Unless explicitly stated, patch files, scripts, and other
files you have created and contributed to the FreeBSD ports
collection are assumed to be covered by the standard BSD copyright
conditions.PatchingIn the preparation of the port, files that have been added or
changed can be picked up with a recursive diff for later feeding to
patch. Each set of patches you wish to apply should be collected
into a file named
patch-xx where
xx denotes the sequence in which the
patches will be applied — these are done in
alphabetical order, thus aa
first, ab second and so on. These files should
be stored in PATCHDIR, from where they will be
automatically applied. All patches should be relative to
WRKSRC (generally the directory your port's
tarball unpacks itself into, that being where the build is done).
To make fixes and upgrades easier, you should avoid having more than
one patch fix the same file (e.g., patch-aa and
patch-ab both changing
WRKSRC/foobar.c).ConfiguringInclude any additional customization commands to your
configure script and save it in the
scripts subdirectory. As mentioned above, you
can also do this as Makefile targets and/or
scripts with the name pre-configure or
post-configure.Handling user inputIf your port requires user input to build, configure or install,
then set IS_INTERACTIVE in your Makefile. This
will allow “overnight builds” to skip your port if the
user sets the variable BATCH in his environment (and
if the user sets the variable INTERACTIVE, then
only those ports requiring interaction are
built).It is also recommended that if there are reasonable default
answers to the questions, you check the
PACKAGE_BUILDING variable and turn off the
interactive script when it is set. This will allow us to build the
packages for CD-ROMs and ftp.Configuring the MakefileConfiguring the Makefile is pretty simple, and again we suggest
that you look at existing examples before starting. Also, there is a
sample Makefile in this
handbook, so take a look and please follow the ordering of variables
and sections in that template to make your port easier for others to
read.Now, consider the following problems in sequence as you design
your new Makefile:The original sourceDoes it live in DISTDIR as a standard gzip'd
tarball? If so, you can go on to the next step. If not, you should
look at overriding any of the EXTRACT_CMD,
EXTRACT_BEFORE_ARGS,
EXTRACT_AFTER_ARGS,
EXTRACT_SUFX, or DISTFILES
variables, depending on how alien a format your port's distribution
file is. (The most common case is
EXTRACT_SUFX=.tar.Z, when the tarball is
condensed by regular compress, not gzip.)In the worst case, you can simply create your own
do-extract target to override the default,
though this should be rarely, if ever, necessary.DISTNAMEYou should set DISTNAME to be the base name
of your port. The default rules expect the distribution file list
(DISTFILES) to be named
DISTNAMEEXTRACT_SUFX which, if
it is a normal tarball, is going to be something like
foozolix-1.0.tar.gz for a setting of
DISTNAME=foozolix-1.0.The default rules also expect the tarball(s) to extract into a
subdirectory called
work/DISTNAME, e.g.
work/foozolix-1.0/.All this behavior can be overridden, of course; it simply
represents the most common time-saving defaults. For a port
requiring multiple distribution files, simply set
DISTFILES explicitly. If only a subset of
DISTFILES are actual extractable archives, then
set them up in EXTRACT_ONLY, which will override
the DISTFILES list when it comes to extraction,
and the rest will be just left in DISTDIR for
later use.PKGNAMEIf DISTNAME does not conform to our guidelines for a good package
name, you should set the PKGNAME
variable to something better. See the abovementioned guidelines for
more details.CATEGORIESWhen a package is created, it is put under
/usr/ports/packages/All and links are made from
one or more subdirectories of
/usr/ports/packages. The names of these
subdirectories are specified by the variable
CATEGORIES. It is intended to make life easier
for the user when he is wading through the pile of packages on the
ftp site or the CD-ROM. Please take a look at the existing categories and pick the ones
that are suitable for your port.This list also determines where in the ports tree the port is
imported. If you put more than one category here, it is assumed
that the port files will be put in the subdirectory with the name in
the first category. See the categories section for more
discussion about how to pick the right categories.If you port truly belongs to something that is different from
all the existing ones, you can even create a new category name. In
that case, please send mail to the &a.ports; to propose a new
category.There is no error checking for category names. make
package will happily create a new directory if you
mistype the category name, so be careful!MASTER_SITESRecord the directory part of the ftp/http-URL pointing at the
original tarball in MASTER_SITES. Do not forget
the trailing slash (/)!The make macros will try to use this
specification for grabbing the distribution file with
FETCH if they cannot find it already on the
system.It is recommended that you put multiple sites on this list,
preferably from different continents. This will safeguard against
wide-area network problems, and we are even planning to add support
for automatically determining the closest master site and fetching
from there!If the original tarball is part of one of the following popular
archives: X-contrib, GNU, Perl CPAN, TeX CTAN, or Linux Sunsite, you
refer to those sites in an easy compact form using
MASTER_SITE_XCONTRIB,
MASTER_SITE_GNU,
MASTER_SITE_PERL_CPAN,
MASTER_SITE_TEX_CTAN, and
MASTER_SITE_SUNSITE. Simply set
MASTER_SITE_SUBDIR to the path with in the
archive. Here is an example:
MASTER_SITES= ${MASTER_SITE_XCONTRIB}
MASTER_SITE_SUBDIR= applicationsThe user can also set the MASTER_SITE_*
variables in /etc/make.conf to override our
choices, and use their favorite mirrors of these popular archives
instead.PATCHFILESIf your port requires some additional patches that are available
by ftp or http, set PATCHFILES to the names of
the files and PATCH_SITES to the URL of the
directory that contains them (the format is the same as
MASTER_SITES).If the patch is not relative to the top of the source tree
(i.e., WKRSRC) because it contains some extra
pathnames, set PATCH_DIST_STRIP accordingly. For
instance, if all the pathnames in the patch have an extra
foozolix-1.0/ in front of the filenames, then set
PATCH_DIST_STRIP=-p1.Do not worry if the patches are compressed, they will be
decompressed automatically if the filenames end with
.gz or .Z.If the patch is distributed with some other files, such as
documentation, in a gzip'd tarball, you cannot just use
PATCHFILES. If that is the case, add the name
and the location of the patch tarball to
DISTFILES and MASTER_SITES.
Then, from the pre-patch target, apply the
patch either by running the patch command from there, or copying the
patch file into the PATCHDIR directory and
calling it
patch-xx.Note the tarball will have been extracted alongside the
regular source by then, so there is no need to explicitly extract
it if it is a regular gzip'd or compress'd tarball. If you do the
latter, take extra care not to overwrite something that already
exists in that directory. Also do not forget to add a command to
remove the copied patch in the pre-clean
target.MAINTAINERSet your mail-address here. Please. :)For detailed description of the responsibility of maintainers,
refer to MAINTAINER on
Makefiles section.DependenciesMany ports depend on other ports. There are five variables that
you can use to ensure that all the required bits will be on the
user's machine. There are also some pre-supported dependency
variables for common cases, plus a few more to control the behaviour
of dependencies.LIB_DEPENDSThis variable specifies the shared libraries this port depends
on. It is a list of
lib:dir:target
tuples where lib is the name of the
shared library, and dir is the
directory in which to find it in case it is not available, and
target is the target to call in that
directory. For example, LIB_DEPENDS=
jpeg.9:${PORTSDIR}/graphics/jpeg:install
will check for a shared jpeg library with major version 9, and
descend into the graphics/jpeg subdirectory
of your ports tree to build and install it if it is not found.
The target part can be omitted if it is
equal to DEPENDS_TARGET (which defaults to
install).The lib part is an argument given
to ldconfig -r | grep -wF. There shall be no
reqular expressions in this variable.The dependency is checked twice, once from within the
extract target and then from within the
install target. Also, the name of the
dependency is put in to the package so that
pkg_add will automatically install it if it is
not on the user's system.RUN_DEPENDSThis variable specifies executables or files this port depends
on during run-time. It is a list of
path:dir:target
tuples where path is the name of the
executable or file, and dir is the
directory in which to find it in case it is not available, and
target is the target to call in that
directory. If path starts with a slash
(/), it is treated as a file and its existence
is tested with test -e; otherwise, it is
assumed to be an executable, and which -s is
used to determine if the program exists in the user's search
path.For example,
RUN_DEPENDS= ${PREFIX}/etc/innd:${PORTSDIR}/news/inn \
wish8.0:${PORTSDIR}/x11-toolkits/tk80will check if the file or directory
/usr/local/etc/innd exists, and build and
install it from the news/inn subdirectory of
the ports tree if it is not found. It will also see if an
executable called wish8.0 is in your search
path, and descend into the x11-toolkits/tk80
subdirectory of your ports tree to build and install it if it is
not found.In this case, innd is actually an
executable; if an executable is in a place that is not expected
to be in a normal user's search path, you should use the full
pathname.The dependency is checked from within the
install target. Also, the name of the
dependency is put in to the package so that
pkg_add will automatically install it if it is
not on the user's system. The target
part can be omitted if it is the same
DEPENDS_TARGET.BUILD_DEPENDSThis variable specifies executables or files this port
requires to build. Like RUN_DEPENDS, it is a
list of
path:dir:target
tuples. For example, BUILD_DEPENDS=
unzip:${PORTSDIR}/archivers/unzip will check
for an executable called unzip, and descend
into the archivers/unzip subdirectory of your
ports tree to build and install it if it is not found.“build” here means everything from extracting to
compilation. The dependency is checked from within the
extract target. The
target part can be omitted if it is
the same as DEPENDS_TARGETFETCH_DEPENDSThis variable specifies executables or files this port
requires to fetch. Like the previous two, it is a list of
path:dir:target
tuples. For example, FETCH_DEPENDS=
ncftp2:${PORTSDIR}/net/ncftp2 will check for an
executable called ncftp2, and descend into the
net/ncftp2 subdirectory of your ports tree to
build and install it if it is not found.The dependency is checked from within the
fetch target. The
target part can be omitted if it is the
same as DEPENDS_TARGET.DEPENDSIf there is a dependency that does not fall into either of the
above four categories, or your port requires to have the source of
the other port extracted in addition to having them installed,
then use this variable. This is a list of
dir:target,
as there is nothing to check, unlike the previous four. The
target part can be omitted if it is the
same as DEPENDS_TARGET.Common dependency variablesDefine USE_XLIB=yes if your port requires
the X Window System to be installed (it is implied by
USE_IMAKE). Define
USE_GMAKE=yes if your port requires GNU
make instead of BSD make.
Define USE_AUTOCONF=yes if your port requires
GNU autoconf to be run. Define USE_QT=yes if
your port uses the latest qt toolkit. Use
USE_PERL5=yes if your port requires version 5
of the perl language. (The last is especially important since
some versions of FreeBSD has perl5 as part of the base system
while others do not.)Notes on dependenciesAs mentioned above, the default target to call when a
dependency is required is DEPENDS_TARGET.
It defaults to install. This is a user
variable; is is never defined in a port's
Makefile. If your port needs a special way
to handle a dependency, use the :target part of
the *_DEPENDS variables instead of redefining
DEPENDS_TARGET.When you type make clean, its dependencies
are automatically cleaned too. If you do not wish this to happen,
define the variable NOCLEANDEPENDS in your
environment.To depend on another port unconditionally, it is customary to
use the string nonexistent as the first field
of BUILD_DEPENDS or
RUN_DEPENDS. Use this only when you need to
the to get to the source of the other port. You can often save
compilation time by specifying the target too. For
instance
BUILD_DEPENDS= /nonexistent:${PORTSDIR}/graphics/jpeg:extract
will always descend to the JPEG port and extract it.Do not use DEPENDS unless there is no other
way the behaviour you want can be accomplished. It will cause the
other port to be always build (and installed, by default), and the
dependency will go into the packages as well. If this is really
what you need, I recommend you write it as
BUILD_DEPENDS and
RUN_DEPENDS instead—at least the
intention will be clear.Building mechanismsIf your package uses GNU make, set
USE_GMAKE=yes. If your package uses
configure, set
HAS_CONFIGURE=yes. If your package uses GNU
configure, set
GNU_CONFIGURE=yes (this implies
HAS_CONFIGURE). If you want to give some extra
arguments to configure (the default argument list
--prefix=${PREFIX} for GNU
configure and empty for non-GNU
configure), set those extra arguments in
CONFIGURE_ARGS. If your package uses GNU
autoconf, set
USE_AUTOCONF=yes. This implies
GNU_CONFIGURE, and will cause
autoconf to be run before
configure.If your package is an X application that creates
Makefiles from Imakefiles
using imake, then set
USE_IMAKE=yes. This will cause the configure
stage to automatically do an xmkmf -a. If the
flag is a problem for your port, set
XMKMF=xmkmf. If the port uses
imake but does not understand the
install.man target,
NO_INSTALL_MANPAGES=yes should be set. In
addition, the author of the original port should be shot. :>If your port's source Makefile has
something else than all as the main build
target, set ALL_TARGET accordingly. Same goes
for install and
INSTALL_TARGET.Special considerationsThere are some more things you have to take into account when you
create a port. This section explains the most common of those.ldconfigIf your port installs a shared library, add a
post-install target to your
Makefile that runs ${LDCONFIG}
-m on the directory where the new library is installed
(usually PREFIX/lib) to
register it into the shared library cache.Also, add a matching @exec /sbin/ldconfig -m
and @unexec /sbin/ldconfig -R pair to your
pkg/PLIST file so that a user who installed the
package can start using the shared library immediately and
deinstallation will not cause the system to still believe the
library is there. These lines should immediately follow the line
for the shared library itself, as in:
lib/libtvl80.so.1
@exec /sbin/ldconfig -m %D/lib
@unexec /sbin/ldconfig -RNever, ever, ever add a line that says
ldconfig without any arguments to your
Makefile or pkg/PLIST.
This will reset the shared library cache to the contents of
/usr/lib only, and will royally screw up the
user's machine ("Help, xinit does not run anymore after I install
this port!"). Anybody who does this will be shot and cut in 65,536
pieces by a rusty knife and have is liver chopped out by a bunch of
crows and will eternally rot to death in the deepest bowels of hell
(not necessarily in that order…)ELF supportSince FreeBSD is moving to ELF shortly after 3.0-RELEASE, we need
to convert many ports that build shared libraries to support ELF.
Complicating this task is that a 3.0 system can run as both ELF and
a.out, and we wish to unofficially support the 2.2 as long as
possible. Below are the guidelines on how to convert a.out only ports
to support both a.out and ELF compilation.Some part of this list is only applicable during the conversion,
but will be left here for awhile for reference in case you have come
across some old port you wish to upgrade.Moving a.out libraries out of the wayA.out libraries should be moved out of
/usr/local/lib and similar to an
aout subdirectory. (If you do not move them out
of the way, ELF ports will happily overwrite a.out libraries.) The
move-aout-libs target in the 3.0-CURRENT
src/Makefile (called from
aout-to-elf) will do this for you. It will
only move a.out libs so it is safe to call it on a system with both
ELF and a.out libs in the standard directories.FormatThe ports tree will build packages in the format the machine is
in. This means a.out for 2.2 and a.out or ELF for 3.0 depending on
what `objformat` returns. Also, once users move
a.out libraries to a subdirectory, building a.out libraries will be
unsupported. (I.e., it may still work if you know what you are
doing, but you are on your own.)If a port only works for a.out, set
BROKEN_ELF to a string describing the reason
why. Such ports will be skipped during a build on an ELF
system.PORTOBJFORMATbsd.port.mk will set
PORTOBJFORMAT to aout or
elf and export it in the environments
CONFIGURE_ENV, SCRIPTS_ENV and
MAKE_ENV. (It's always going to be
aout in 2.2-STABLE). It is also passed to
PLIST_SUB as
PORTOBJFORMAT=${PORTOBJFORMAT}. (See comment on
ldconfig lines below.)The variable is set using this line in
bsd.port.mk:
PORTOBJFORMAT!= test -x /usr/bin/objformat && /usr/bin/objformat || echo aoutPorts' make processes should use this variable to decide what to
do. However, if the port's configure script
already automatically detects an ELF system, it is not necessary to
refer to PORTOBJFORMAT.Building shared librariesThe following are differences in handling shared libraries for
a.out and ELF.Shared library versionsAn ELF shared library should be called
libfoo.so.M
where M is the single version number,
and an a.out library should be called
libfoo.so.M.N
where M is the major version and
N is the the minor version number.
Do not mix those; never install an ELF
shared library called
libfoo.so.N.M
or an a.out shared library (or symlink) called
libfoo.so.N.Linker command linesAssuming cc -shared is used rather than
ld directly, the only difference is that you
need to add
on the command line for ELF.You need to install a symlink from
libfoo.so to
libfoo.so.N to make
ELF linkers happy. Since it should be listed in
PLIST too, and it won't hurt in the a.out case
(some ports even require the link for dynamic loading), you should
just make this link regardless of the setting of
PORTOBJFORMAT.LIB_DEPENDSAll port Makefiles are edited to remove minor numbers from
LIB_DEPENDS, and also to have the regexp support
removed. (E.g., foo\\.1\\.\\(33|40\\) becomes
foo.2.) They will be matched using grep
-wF.PLISTPLIST should contain the short (ELF) shlib
names if the a.out minor number is zero, and the long (a.out) names
otherwise. bsd.port.mk will automatically add
.0 to the end of short shlib lines if
PORTOBJFORMAT equals aout, and
will delete the minor number from long shlib names if
PORTOBJFORMAT equals
elf.In cases where you really need to install shlibs with two
versions on an ELF system or those with one version on an a.out
system (for instance, ports that install compatibility libraries for
other operating systems), define the variable
NO_FILTER_SHLIBS. This will turn off the editing
of PLIST mentioned in the previous
paragraph.ldconfigThe ldconfig line in Makefiles should
read:
${SETENV} OBJFORMAT=${PORTOBJFORMAT} ${LDCONFIG} -m ....In PLIST it should read;
@exec /usr/bin/env OBJFORMAT=%%PORTOBJFORMAT%% /sbin/ldconfig -m ...
@unexec /usr/bin/env OBJFORMAT=%%PORTOBJFORMAT%% /sbin/ldconfig -RThis is to ensure that the correct ldconfig
will be called depending on the format of the package, not the
default format of the system.MASTERDIRIf your port needs to build slightly different versions of
packages by having a variable (for instance, resolution, or paper
size) take different values, create one subdirectory per package to
make it easier forusers to see what to do, but try to share as many
files as possible between ports. Typically you only need a very short
Makefile in all but one of the directories if you
use variables cleverly. In the sole Makefiles,
you can use MASTERDIR to specify the directory
where the rest of the files are. Also, use a variable as part of
PKGNAME so
the packages will have different names.This will be best demonstrated by an example. This is part of
japanese/xdvi300/Makefile;
PKGNAME= ja-xdvi${RESOLUTION}-17
:
# default
RESOLUTION?= 300
.if ${RESOLUTION} != 118 && ${RESOLUTION} != 240 && \
${RESOLUTION} != 300 && ${RESOLUTION} != 400
@${ECHO} "Error: invalid value for RESOLUTION: \"${RESOLUTION}\""
@${ECHO} "Possible values are: 118, 240, 300 (default) and 400."
@${FALSE}
.endifjapanese/xdvi300 also has all the regular
patches, package files, etc. If you type make
there, it will take the default value for the resolution (300) and
build the port normally.As for other resolutions, this is the entirexdvi118/Makefile;
RESOLUTION= 118
MASTERDIR= ${.CURDIR}/../xdvi300
.include ${MASTERDIR}/Makefile(xdvi240/Makefile and
xdvi400/Makefile are similar). The
MASTERDIR definition tells
bsd.port.mk that the refulat set of
subdirectories like PATCHDIR and
PKGDIR are to be found under
xdvi300. The RESOLUTION=118
line will override the RESOLUTION=300 line in
xdvi300/Makefile and the port will be built with
resolution set to 118.Shared library versionsFirst, please read our policy on
shared library versioning to understand what to do with
shared library versions in general. Do not blindly assume software
authors know what they are doing; many of them do not. It is very
important that these details are carefully considered, as we have
quite a unique situation where we are trying to have dozens of
potentially incompatible software pairs co-exist. Careless port
imports have caused great trouble regarding shared libraries in the
past (ever wondered why the port jpeg-6b has a
shared library version of 9.0?). If in doubt, send a message to the
&a.ports;. Most of the time, your job ends by determining the right
shared library version and making appropriate patches to implement
it.However, if there is a port which is a different version of the
same software already in the tree, the situation is much more complex.
In short, the FreeBSD implementation does not allow the user to
specify to the linker which version of shared library to link against
(the linker will always pick the highest numbered version). This
means, if there is a libfoo.so.3.2 and
libfoo.so.4.0 in the system, there is no way to
tell the linker to link a particular application to
libfoo.so.3.2. It is essentially completely
overshadowed in terms of compilation-time linkage. In this case, the
only solution is to rename the base part of the
shared library. For instance, change
libfoo.so.4.0 to
libfoo4.so.1.0 so both version 3.2 and 4.0 can be
linked from other ports.ManpagesThe MAN[1-9LN] variables will automatically add
any manpages to pkg/PLIST (this means you must
not list manpages in the
PLIST—see generating PLIST for more). It also
makes the install stage automatically compress or uncompress manpages
depending on the setting of NOMANCOMPRESS in
/etc/make.conf.If your port tries to install multiple names for manpages using
symlinks or hardlinks, you must use the MLINKS
variable to identify these. The link installed by your port will
be destroyed and recreated by bsd.port.mk
to make sure it points to the correct file. Any manpages
listed in MLINKS must not be listed in the
PLIST.To specify whether the manpages are compressed upon installation,
use the MANCOMPRESSED variable. This variable can
take three values, yes, no and
maybe. yes means manpages are
already installed compressed, no means they are
not, and maybe means the software already respects
the value of NOMANCOMPRESS so
bsd.port.mk does not have to do anything
special.MANCOMPRESSED is automatically set to
yes if USE_IMAKE is set and
NO_INSTALL_MANPAGES is not set, and to
no otherwise. You do not have to explicitly define
it unless the default is not suitable for your port.If your port anchors its man tree somewhere other than
PREFIX, you can use the
MANPREFIX to set it. Also, if only manpages in
certain sections go in a non-standard place, such as some Perl modules
ports, you can set individual man paths using
MANsectPREFIX (where
sect is one of 1-9,
L or N).If your manpages go to language-specific subdirectories, set the
name of the languages to MANLANG. The value of
this variable defaults to "" (i.e., English
only).Here is an example that puts it all together.
MAN1= foo.1
MAN3= bar.3
MAN4= baz.4
MLINKS= foo.1 alt-name.8
MANLANG= "" ja
MAN3PREFIX= ${PREFIX}/share/foobar
MANCOMPRESSED= yesThis states that six files are installed by this port;
${PREFIX}/man/man1/foo.1.gz
${PREFIX}/man/ja/man1/foo.1.gz
${PREFIX}/share/foobar/man/man3/bar.3.gz
${PREFIX}/share/foobar/man/ja/man3/bar.3.gz
${PREFIX}/man/man4/baz.4.gz
${PREFIX}/man/ja/man4/baz.4.gzAdditionally ${PREFIX}/man/man8/alt-name.8.gz
may or may-not be installed by your port. Regardless, a
symlink will be made to join the foo(1) manpage and
alt-name(8) manpage.Ports that require MotifThere are many programs that require a Motif library (available
from several commercial vendors, while there is a free clone reported
to be able to run many applications in
x11-toolkits/lesstif) to compile. Since it is a
popular toolkit and their licenses usually permit redistribution of
statically linked binaries, we have made special provisions for
handling ports that require Motif in a way that we can easily compile
binaries linked either dynamically (for people who are compiling from
the port) or statically (for people who distribute packages).REQUIRES_MOTIFIf your port requires Motif, define this variable in the
Makefile. This will prevent people who do not own a copy of Motif
from even attempting to build it.MOTIFLIBThis variable will be set by bsd.port.mk to
be the appropriate reference to the Motif library. Please patch the
source to use this wherever the Motif library is referenced in the
Makefile or
Imakefile.There are two common cases:If the port refers to the Motif library as
-lXm in its Makefile or
Imakefile, simply substitute
${MOTIFLIB} for it.If the port uses XmClientLibs in its
Imakefile, change it to
${MOTIFLIB} ${XTOOLLIB}
${XLIB}.Note that MOTIFLIB (usually) expands to
-L/usr/X11R6/lib -lXm or
/usr/X11R6/lib/libXm.a, so there is no need to
add -L or -l in front.X11 fontsIf your port installs fonts for the X Window system, put them in
X11BASE/lib/X11/fonts/local.
This directory is new to XFree86 release 3.3.3. If it does not exist,
please create it, and print out a message urging the user to update
their XFree86 to 3.3.3 or newer, or at least add this directory to the
font path in /etc/XF86Config.Info filesThe new version of texinfo (included in 2.2.2-RELEASE and onwards)
contains a utility called install-info to add and
delete entries to the dir file. If your port
installs any info documents, please follow this instructions so your
port/package will correctly update the user's
PREFIX/info/dir file. (Sorry
for the length of this section, but is it imperative to weave all the
info files together. If done correctly, it will produce a
beautiful listing, so please bear with me!First, this is what you (as a porter) need to know&prompt.user; install-info --help
install-info [OPTION]... [INFO-FILE [DIR-FILE]]
Install INFO-FILE in the Info directory file DIR-FILE.
Options:
--delete Delete existing entries in INFO-FILE;
don't insert any new entries.
:
--entry=TEXT Insert TEXT as an Info directory entry.
:
--section=SEC Put this file's entries in section SEC of the directory. :This program will not actually install info
files; it merely inserts or deletes entries in the
dir file.Here's a seven-step procedure to convert ports to use
install-info. I will use
editors/emacs as an example.Look at the texinfo sources and make a patch to insert
@dircategory and @direntry
statements to files that do not have them. This is part of my
patch:
--- ./man/vip.texi.org Fri Jun 16 15:31:11 1995
+++ ./man/vip.texi Tue May 20 01:28:33 1997
@@ -2,6 +2,10 @@
@setfilename ../info/vip
@settitle VIP
+@dircategory The Emacs editor and associated tools
+@direntry
+* VIP: (vip). A VI-emulation for Emacs.
+@end direntry
@iftex
@finalout
:The format should be self-explanatory. Many authors leave a
dir file in the source tree that contains all
the entries you need, so look around before you try to write your
own. Also, make sure you look into related ports and make the
section names and entry indentations consistent (we recommend that
all entry text start at the 4th tab stop).Note that you can put only one info entry per file because
of a bug in install-info --delete that
deletes only the first entry if you specify multiple entries in
the @direntry section.You can give the dir entries to
install-info as arguments
( and ) instead
of patching the texinfo sources. I do not think this is a good
idea for ports because you need to duplicate the same information
in three places
(Makefile and
@exec/@unexec of
PLIST; see below). However, if you have a
Japanese (or other multibyte encoding) info files, you will have
to use the extra arguments to install-info
because makeinfo cannot handle those texinfo
sources. (See Makefile and
PLIST of japanese/skk
for examples on how to do this).Go back to the port directory and do a make clean;
make and verify that the info files are regenerated
from the texinfo sources. Since the texinfo sources are newer than
the info files, they should be rebuilt when you type
make; but many Makefiles
do not include correct dependencies for info files. In
emacs' case, I had to patch the main
Makefile.in so it will descend into the
man subdirectory to rebuild the info
pages.
--- ./Makefile.in.org Mon Aug 19 21:12:19 1996
+++ ./Makefile.in Tue Apr 15 00:15:28 1997
@@ -184,7 +184,7 @@
# Subdirectories to make recursively. `lisp' is not included
# because the compiled lisp files are part of the distribution
# and you cannot remake them without installing Emacs first.
-SUBDIR = lib-src src
+SUBDIR = lib-src src man
# The makefiles of the directories in $SUBDIR.
SUBDIR_MAKEFILES = lib-src/Makefile man/Makefile src/Makefile oldXMenu/Makefile lwlib/Makefile
--- ./man/Makefile.in.org Thu Jun 27 15:27:19 1996
+++ ./man/Makefile.in Tue Apr 15 00:29:52 1997
@@ -66,6 +66,7 @@
${srcdir}/gnu1.texi \
${srcdir}/glossary.texi
+all: info
info: $(INFO_TARGETS)
dvi: $(DVI_TARGETS)The second hunk was necessary because the default target in
the man subdir is called
info, while the main
Makefile wants to call
all. I also deleted the installation of
the info info file because we already have
one with the same name in /usr/share/info
(that patch is not shown here).If there is a place in the Makefile that
is installing the dir file, delete it. Your
port may not be doing it. Also, remove any commands that are
otherwise mucking around with the dir
file.
--- ./Makefile.in.org Mon Aug 19 21:12:19 1996
+++ ./Makefile.in Mon Apr 14 23:38:07 1997
@@ -368,14 +368,8 @@
if [ `(cd ${srcdir}/info && /bin/pwd)` != `(cd ${infodir} && /bin/pwd)` ]; \
then \
(cd ${infodir}; \
- if [ -f dir ]; then \
- if [ ! -f dir.old ]; then mv -f dir dir.old; \
- else mv -f dir dir.bak; fi; \
- fi; \
cd ${srcdir}/info ; \
- (cd $${thisdir}; ${INSTALL_DATA} ${srcdir}/info/dir ${infodir}/dir); \
- (cd $${thisdir}; chmod a+r ${infodir}/dir); \
for f in ccmode* cl* dired-x* ediff* emacs* forms* gnus* info* message* mh-e* sc* vip*; do \
(cd $${thisdir}; \
${INSTALL_DATA} ${srcdir}/info/$$f ${infodir}/$$f; \
chmod a+r ${infodir}/$$f); \(This step is only necessary if you are modifying an existing
port.) Take a look at pkg/PLIST and delete
anything that is trying to patch up info/dir.
They may be in pkg/INSTALL or some other
file, so search extensively.
Index: pkg/PLIST
===================================================================
RCS file: /usr/cvs/ports/editors/emacs/pkg/PLIST,v
retrieving revision 1.15
diff -u -r1.15 PLIST
--- PLIST 1997/03/04 08:04:00 1.15
+++ PLIST 1997/04/15 06:32:12
@@ -15,9 +15,6 @@
man/man1/emacs.1.gz
man/man1/etags.1.gz
man/man1/ctags.1.gz
-@unexec cp %D/info/dir %D/info/dir.bak
-info/dir
-@unexec cp %D/info/dir.bak %D/info/dir
info/cl
info/cl-1
info/cl-2Add a post-install target to the
Makefile to create a dir
file if it is not there. Also, call
install-info with the installed info
files.
Index: Makefile
===================================================================
RCS file: /usr/cvs/ports/editors/emacs/Makefile,v
retrieving revision 1.26
diff -u -r1.26 Makefile
--- Makefile 1996/11/19 13:14:40 1.26
+++ Makefile 1997/05/20 10:25:09 1.28
@@ -20,5 +20,11 @@
post-install:
.for file in emacs-19.34 emacsclient etags ctags b2m
strip ${PREFIX}/bin/${file}
.endfor
+ if [ ! -f ${PREFIX}/info/dir ]; then \
+ ${SED} -ne '1,/Menu:/p' /usr/share/info/dir > ${PREFIX}/info/dir; \
+ fi
+.for info in emacs vip viper forms gnus mh-e cl sc dired-x ediff ccmode
+ install-info ${PREFIX}/info/${info} ${PREFIX}/info/dir
+.endfor
.include <bsd.port.mk>Do not use anything other than
/usr/share/info/dir and the above command to
create a new info file. In fact, I would add the first three lines
of the above patch to bsd.port.mk if you (the
porter) would not have to do it in PLIST by
yourself anyway.Edit PLIST and add equivalent
@exec statements and also
@unexec for pkg_delete. You
do not need to delete info/dir with
@unexec.
Index: pkg/PLIST
===================================================================
RCS file: /usr/cvs/ports/editors/emacs/pkg/PLIST,v
retrieving revision 1.15
diff -u -r1.15 PLIST
--- PLIST 1997/03/04 08:04:00 1.15
+++ PLIST 1997/05/20 10:25:12 1.17
@@ -16,7 +14,15 @@
man/man1/etags.1.gz
man/man1/ctags.1.gz
+@unexec install-info --delete %D/info/emacs %D/info/dir
:
+@unexec install-info --delete %D/info/ccmode %D/info/dir
info/cl
info/cl-1
@@ -87,6 +94,18 @@
info/viper-3
info/viper-4
+@exec [ -f %D/info/dir ] || sed -ne '1,/Menu:/p' /usr/share/info/dir > %D/info/dir
+@exec install-info %D/info/emacs %D/info/dir
:
+@exec install-info %D/info/ccmode %D/info/dir
libexec/emacs/19.34/i386--freebsd/cvtmail
libexec/emacs/19.34/i386--freebsd/digest-docThe @unexec install-info --delete
commands have to be listed before the info files themselves so
they can read the files. Also, the @exec
install-info commands have to be after the info
files and the @exec command that creates the
the dir file.Test and admire your
work. :). Check the
dir file before and after each step.The pkg/ subdirectoryThere are some tricks we have not mentioned yet about the
pkg/ subdirectory that come in handy
sometimes.MESSAGEIf you need to display a message to the installer, you may place
the message in pkg/MESSAGE. This capability is
often useful to display additional installation steps to be taken
after a pkg_add or to display licensing
information.The pkg/MESSAGE file does not need to be
added to pkg/PLIST. Also, it will not get
automatically printed if the user is using the port, not the
package, so you should probably display it from the
post-install target yourself.INSTALLIf your port needs to execute commands when the binary package
is installed with pkg_add you can do this via the
pkg/INSTALL script. This script will
automatically be added to the package, and will be run twice by
pkg_add. The first time will as INSTALL
${PKGNAME} PRE-INSTALL and the second time as
INSTALL ${PKGNAME} POST-INSTALL.
$2 can be tested to determine which mode
the script is being run in. The PKG_PREFIX
environmental variable will be set to the package installation
directory. See &man.pkg.add.1; for
additional information.This script is not run automatically if you install the port
with make install. If you are depending on it
being run, you will have to explicitly call it from your port's
Makefile.REQIf your port needs to determine if it should install or not, you
can create a pkg/REQ “requirements”
script. It will be invoked automatically at
installation/deinstallation time to determine whether or not
installation/deinstallation should proceed.Changing PLIST based on make
variablesSome ports, particularly the p5- ports, need to change their
PLIST depending on what options they are
configured with (or version of perl, in the case of p5- ports). To
make this easy, any instances in the PLIST of
%%OSREL%%, %%PERL_VER%%, and
%%PERL_VERSION%% will be substituted for
appropriately. The value of %%OSREL%% is the
numeric revision of the operating system (e.g.,
2.2.7). %%PERL_VERSION%% is
the full version number of perl (e.g., 5.00502)
and %%PERL_VER%% is the perl version number minus
the patchlevel (e.g., 5.005).If you need to make other substitutions, you can set the
PLIST_SUB variable with a list of
VAR=VALUE
pairs and instances of
%%VAR%%' will be
substituted with VALUE in the
PLIST.For instance, if you have a port that installs many files in a
version-specific subdirectory, you can put something like
OCTAVE_VERSION= 2.0.13
PLIST_SUB= OCTAVE_VERSION=${OCTAVE_VERSION}
in the Makefile and use
%%OCTAVE_VERSION%% wherever the version shows up
in PLIST. That way, when you upgrade the port,
you will not have to change dozens (or in some cases, hundreds) of
lines in the PLIST.This substitution (as well as addition of any man pages) will be done between
the do-install and
post-install targets, by reading from
PLIST and writing to TMPPLIST
(default:
WRKDIR/.PLIST.mktmp). So if
your port builds PLIST on the fly, do so in or
before do-install. Also, if your port
needs to edit the resulting file, do so in
post-install to a file named
TMPPLIST.Changing the names of files in the
pkg subdirectoryAll the filenames in the pkg subdirectory
are defined using variables so you can change them in your
Makefile if need be. This is especially useful
when you are sharing the same pkg subdirectory
among several ports or have to write to one of the above files (see
writing to places other than
WRKDIR for why it is a bad idea to write
directly in to the pkg subdirectory.Here is a list of variable names and their default
values.VariableDefault valueCOMMENT${PKGDIR}/DESCRDESCR${PKGDIR}/DESCRPLIST${PKGDIR}/PLISTPKGINSTALL${PKGDIR}/PKGINSTALLPKGDEINSTALL${PKGDIR}/PKGDEINSTALLPKGREQ${PKGDIR}/REQPKGMESSAGE${PKGDIR}/MESSAGEPlease change these variables rather than overriding
PKG_ARGS. If you change
PKG_ARGS, those files will not correctly be
installed in /var/db/pkg upon install from a
port.Licensing ProblemsSome software packages have restrictive licenses or can be in
violation to the law (PKP's patent on public key crypto, ITAR (export
of crypto software) to name just two of them). What we can do with
them varies a lot, depending on the exact wordings of the respective
licenses.It is your responsibility as a porter to read the licensing
terms of the software and make sure that the FreeBSD project will
not be held accountable of violating them by redistributing the
source or compiled binaries either via ftp or CD-ROM. If in doubt,
please contact the &a.ports;.There are two variables you can set in the Makefile to handle the
situations that arise frequently:If the port has a “do not sell for profit” type of
license, set the variable NO_CDROM to a string
describing the reason why. We will make sure such ports will not go
into the CD-ROM come release time. The distfile and package will
still be available via ftp.If the resulting package needs to be built uniquely for each
site, or the resulting binary package cannot be distributed due to
licensing; set the variable NO_PACKAGE to a
string describing the reason why. We will make sure such packages
will not go on the ftp site, nor into the CD-ROM come release time.
The distfile will still be included on both however.If the port has legal restrictions on who can use it (e.g.,
crypto stuff) or has a “no commercial use” license,
set the variable RESTRICTED to be the string
describing the reason why. For such ports, the distfiles/packages
will not be available even from our ftp sites.The GNU General Public License (GPL), both version 1 and 2,
should not be a problem for ports.If you are a committer, make sure you update the
ports/LEGAL file too.UpgradingWhen you notice that a port is out of date compared to the latest
version from the original authors, first make sure you have the latest
port. You can find them in the
ports/ports-current directory of the ftp mirror
sites. You may also use CVSup to keep your whole ports collection
up-to-date, as described in .The next step is to send a mail to the maintainer, if one is
listed in the port's Makefile. That person may
already be working on an upgrade, or have a reason to not upgrade the
port right now (because of, for example, stability problems of the new
version).If the maintainer asks you to do the upgrade or there is not any
such person to begin with, please make the upgrade and send the
recursive diff (either unified or context diff is fine, but port
committers appear to prefer unified diff more) of the new and old
ports directories to us (e.g., if your modified port directory is
called superedit and the original as in our tree
is superedit.bak, then send us the result of
diff -ruN superedit.bak superedit). Please examine
the output to make sure all the changes make sense. The best way to
send us the diff is by including it to &man.send-pr.1; (category
ports). Please mention any added or deleted files
in the message, as they have to be explicitly specified to CVS when
doing a commit. If the diff is more than about 20KB, please compress
and uuencode it; otherwise, just include it in as is in the PR.Once again, please use &man.diff.1; and not &man.shar.1; to send
updates to existing ports!Do's and Dont'sHere is a list of common do's and dont's that you encounter during
the porting process.You should check your own port against this list,
but you can also check ports in the PR database that others have
submitted. Submit any comments on ports you check as described in
Bug Reports and General
Commentary. Checking ports in the PR database will both make
it faster for us to commit them, and prove that you know what you are
doing.Strip BinariesDo strip binaries. If the original source already strips the
binaries, fine; otherwise you should add a
post-install rule to to it yourself. Here is an
example;
post-install:
strip ${PREFIX}/bin/xdlUse the &man.file.1; command on the installed executable to
check whether the binary is stripped or not. If it does not say
not stripped, it is stripped.INSTALL_* macrosDo use the macros provided in bsd.port.mk
to ensure correct modes and ownership of files in your own
*-install targets. They are:INSTALL_PROGRAM is a command to install
binary executables.INSTALL_SCRIPT is a command to install
executable scripts.INSTALL_DATA is a command to install
sharable data.INSTALL_MAN is a command to install
manpages and other documentation (it does not compress
anything).These are basically the install command with
all the appropriate flags. See below for an example on how to use
them.WRKDIRDo not write anything to files outside
WRKDIR. WRKDIR is the only
place that is guaranteed to be writable during the port build (see
compiling ports from CDROM for an
example of building ports from a read-only tree). If you need to
modigy some file in PKGDIR, do so by redefining a variable, not by
writing over it.WRKDIRPREFIXMake sure your port honors WRKDIRPREFIX.
Most ports do not have to worry about this. In particular, if you
are referring to a WRKDIR of another port, note
that the correct location is
WRKDIRPREFIXPORTSDIR/subdir/name/work not PORTSDIR/subdir/name/work or .CURDIR/../../subdir/name/work or some such.Also, if you are defining WRKDIR yourself,
make sure you prepend
${WKRDIRPREFIX}${.CURDIR} in the
front.Differentiating operating systems and OS versionsYou may come across code that needs modifications or conditional
compilation based upon what version of UNIX it is running under. If
you need to make such changes to the code for conditional
compilation, make sure you make the changes as general as possible
so that we can back-port code to FreeBSD 1.x systems and cross-port
to other BSD systems such as 4.4BSD from CSRG, BSD/386, 386BSD,
NetBSD, and OpenBSD.The preferred way to tell 4.3BSD/Reno (1990) and newer versions
of the BSD code apart is by using the BSD macro
defined in <sys/param.h>. Hopefully that
file is already included; if not, add the code:
#if (defined(__unix__) || defined(unix)) && !defined(USG)
#include <sys/param.h>
#endifto the proper place in the .c file. We
believe that every system that defines these two symbols has
sys/param.h. If you find a system that
does not, we would like to know. Please send mail to the
&a.ports;.Another way is to use the GNU Autoconf style of doing
this:
#ifdef HAVE_SYS_PARAM_H
#include <sys/param.h>
#endifDo not forget to add -DHAVE_SYS_PARAM_H to the
CFLAGS in the Makefile for
this method.Once you have sys/param.h included, you may
use:
#if (defined(BSD) && (BSD >= 199103))to detect if the code is being compiled on a 4.3 Net2 code base
or newer (e.g. FreeBSD 1.x, 4.3/Reno, NetBSD 0.9, 386BSD, BSD/386
1.1 and below).Use:
#if (defined(BSD) && (BSD >= 199306))to detect if the code is being compiled on a 4.4 code base or
newer (e.g. FreeBSD 2.x, 4.4, NetBSD 1.0, BSD/386 2.0 or
above).The value of the BSD macro is
199506 for the 4.4BSD-Lite2 code base. This is
stated for informational purposes only. It should not be used to
distinguish between versions of FreeBSD based only on 4.4-Lite vs.
versions that have merged in changes from 4.4-Lite2. The
__FreeBSD__ macro should be used instead.Use sparingly:__FreeBSD__ is defined in all versions of
FreeBSD. Use it if the change you are making
only affects FreeBSD. Porting gotchas like
the use of sys_errlist[] vs
strerror() are Berkeleyisms, not FreeBSD
changes.In FreeBSD 2.x, __FreeBSD__ is defined to
be 2. In earlier versions, it is
1. Later versions will bump it to match
their major version number.If you need to tell the difference between a FreeBSD 1.x
system and a FreeBSD 2.x or 3.x system, usually the right answer
is to use the BSD macros described above. If
there actually is a FreeBSD specific change (such as special
shared library options when using ld) then it
is OK to use __FreeBSD__ and #if
__FreeBSD__ > 1 to detect a FreeBSD 2.x and later
system. If you need more granularity in detecting FreeBSD
systems since 2.0-RELEASE you can use the following:
#if __FreeBSD__ >= 2
#include <osreldate.h>
# if __FreeBSD_version >= 199504
/* 2.0.5+ release specific code here */
# endif
#endifRelease__FreeBSD_version2.0-RELEASE1194112.1-CURRENTs199501, 1995032.0.5-RELEASE1995042.2-CURRENT before 2.11995082.1.0-RELEASE1995112.2-CURRENT before 2.1.51995122.1.5-RELEASE1996072.2-CURRENT before 2.1.61996082.1.6-RELEASE1996122.1.7-RELEASE1996122.2-RELEASE2200002.2.1-RELEASE220000 (no change)2.2-STABLE after 2.2.1-RELEASE220000 (no change)2.2-STABLE after texinfo-3.92210012.2-STABLE after top2210022.2.2-RELEASE2220002.2-STABLE after 2.2.2-RELEASE2220012.2.5-RELEASE2250002.2-STABLE after 2.2.5-RELEASE2250012.2-STABLE after ldconfig -R merge2250022.2.6-RELEASE2260002.2.7-RELEASE2270002.2-STABLE after 2.2.7-RELEASE2270012.2-STABLE after semctl(2) change2270022.2.8-RELEASE2280002.2-STABLE after 2.2.8-RELEASE2280013.0-CURRENT before mount(2) change3000003.0-CURRENT after mount(2) change3000013.0-CURRENT after semctl(2) change3000023.0-CURRENT after ioctl arg changes3000033.0-CURRENT after ELF conversion3000043.0-RELEASE3000053.0-CURRENT after 3.0-RELEASE3000063.0-STABLE after 3/4 branch3000073.1-RELEASE3100003.1-STABLE after 3.1-RELEASE3100013.1-STABLE after C++ constructor/destructor order
change3100023.2-STABLE3200014.0-CURRENT after 3/4 branch4000004.0-CURRENT after change in dynamic linker
handling4000014.0-CURRENT after C++ constructor/destructor
order change4000024.0-CURRENT after functioning dladdr(3)4000034.0-CURRENT after newbus4000044.0-CURRENT after suser(9) API change4000054.0-CURRENT after cdevsw registration change4000064.0-CURRENT after the addition of so_cred for
socket level credentials4000074.0-CURRENT after the addition of a poll syscall
wrapper to libc_r4000084.0-CURRENT after the change of the kernel's
dev_t type to struct
spacinfo pointer400009Note that 2.2-STABLE sometimes identifies itself as
“2.2.5-STABLE” after the 2.2.5-RELEASE. The pattern
used to be year followed by the month, but we decided to change it
to a more straightforward major/minor system starting from 2.2.
This is because the parallel development on several branches made
it infeasible to classify the releases simply by their real
release dates. If you are making a port now, you do not have to
worry about old -CURRENTs; they are listed here just for your
reference.In the hundreds of ports that have been done, there have only
been one or two cases where __FreeBSD__ should
have been used. Just because an earlier port screwed up and used it
in the wrong place does not mean you should do so too.Writing something after
bsd.port.mkDo not write anything after the .include
<bsd.port.mk> line. it usually can be avoided by
including bsd.port.pre.mk somewhere in the
middle of your Makefile and
bsd.port.post.mk at the end.You need to include either the
pre.mk/post.mk pair or
bsd.port.mk only; do not mix these two.bsd.port.pre.mk only defines a few
variables, which can be used in tests in the
Makefile, bsd.port.post.mk
defines the rest.Here are some important variables defined in
bsd.port.pre.mk (this is not the complete list,
please read bsd.port.mk for the complete
list).VariableDescriptionARCHThe architecture as returned by uname
-m (e.g., i386)OPSYSThe operating system type, as returned by
uname -s (e.g.,
FreeBSD)OSRELThe release version of the operating system (e.g.,
2.1.5 or
2.2.7)OSVERSIONThe numeric version of the operating system, same as
__FreeBSD_version.PORTOBJFORMATThe object format of the system
(aout or elfLOCALBASEThe base of the “local” tree (e.g.,
/usr/local/)X11BASEThe base of the “X11” tree (e.g.,
/usr/X11R6)PREFIXWhere the port installs itself (see more on
PREFIX).If you have to define the variables
USE_IMAKE, USE_X_PREFIX, or
MASTERDIR, do so before including
bsd.port.pre.mk.Here are some examples of things you can write after
bsd.port.pre.mk;
# no need to compile lang/perl5 if perl5 is already in system
.if ${OSVERSION} > 300003
BROKEN= perl is in system
.endif
# only one shlib version number for ELF
.if ${PORTOBJFORMAT} == "elf"
TCL_LIB_FILE= ${TCL_LIB}.${SHLIB_MAJOR}
.else
TCL_LIB_FILE= ${TCL_LIB}.${SHLIB_MAJOR}.${SHLIB_MINOR}
.endif
# software already makes link for ELF, but not for a.out
post-install:
.if ${PORTOBJFORMAT} == "aout"
${LN} -sf liblinpack.so.1.0 ${PREFIX}/lib/liblinpack.so
.endifInstall additional documentationIf your software has some documentation other than the standard
man and info pages that you think is useful for the user, install it
under PREFIX/share/doc.
This can be done, like the previous item, in the
post-install target.Create a new directory for your port. The directory name should
reflect what the port is. This usually means
PKGNAME minus the version part. However, if you
think the user might want different versions of the port to be
installed at the same time, you can use the whole
PKGNAME.Make the installation dependent to the variable
NOPORTDOCS so that users can disable it in
/etc/make.conf, like this:
post-install:
.if !defined(NOPORTDOCS)
${MKDIR}${PREFIX}/share/doc/xv
${INSTALL_MAN} ${WRKSRC}/docs/xvdocs.ps ${PREFIX}/share/doc/xv
.endifDo not forget to add them to pkg/PLIST too!
(Do not worry about NOPORTDOCS here; there is
currently no way for the packages to read variables from
/etc/make.conf.)Also you can use the pkg/MESSAGE file to
display messages upon installation. See the using
pkg/MESSAGE section for
details.MESSAGE does not need to be added to
pkg/PLIST).DIST_SUBDIRDo not let your port clutter
/usr/ports/distfiles. If your port requires a
lot of files to be fetched, or contains a file that has a name that
might conflict with other ports (e.g.,
Makefile), set DIST_SUBDIR
to the name of the port (PKGNAME without the
version part should work fine). This will change
DISTDIR from the default
/usr/ports/distfiles to
/usr/ports/distfiles/DIST_SUBDIR,
and in effect puts everything that is required for your port into
that subdirectory.It will also look at the subdirectory with the same name on the
backup master site at ftp.FreeBSD.org.
(Setting DISTDIR explicitly in your
Makefile will not accomplish this, so please use
DIST_SUBDIR.)This does not affect the MASTER_SITES you
define in your Makefile.Package informationDo include package information, i.e.
COMMENT, DESCR, and
PLIST, in pkg.Note that these files are not used only for packaging anymore,
and are mandatory now, even if
NO_PACKAGE is set.RCS stringsDo not put RCS strings in patches. CVS will mangle them when we
put the files into the ports tree, and when we check them out again,
they will come out different and the patch will fail. RCS strings
are surrounded by dollar ($) signs, and
typically start with $Id or
$RCS.Recursive diffUsing the recurse () option to
diff to generate patches is fine, but please take
a look at the resulting patches to make sure you do not have any
unnecessary junk in there. In particular, diffs between two backup
files, Makefiles when the port uses
Imake or GNU configure, etc.,
are unnecessary and should be deleted. If you had to edit
configure.in and run
autoconf to regenerate
configure, do not take the diffs of
configure (it often grows to a few thousand
lines!); define USE_AUTOCONF=yes and take the
diffsof configure.in.Also, if you had to delete a file, then you can do it in the
post-extract target rather than as part of
the patch. Once you are happy with the resulting diff, please split
it up into one source file per patch file.PREFIXDo try to make your port install relative to
PREFIX. (The value of this variable will be set
to LOCALBASE (default
/usr/local), unless
USE_X_PREFIX or USE_IMAKE is
set, in which case it will be X11BASE (default
/usr/X11R6).)Not hard-coding /usr/local or
/usr/X11R6 anywhere in the source will make the
port much more flexible and able to cater to the needs of other
sites. For X ports that use imake, this is
automatic; otherwise, this can often be done by simply replacing the
occurrences of /usr/local (or
/usr/X11R6 for X ports that do not use imake)
in the various scripts/Makefiles in the port to read
PREFIX, as this variable is automatically passed
down to every stage of the build and install processes.Do not set USE_X_PREFIX unless your port
truly require it (i.e., it links against X libs or it needs to
reference files in X11BASE).The variable PREFIX can be reassigned in your
Makefile or in the user's environment.
However, it is strongly discouraged for individual ports to set this
variable explicitly in the Makefiles.Also, refer to programs/files from other ports with the
variables mentioned above, not explicit pathnames. For instance, if
your port requires a macro PAGER to be the full
pathname of less, use the compiler flag:
-DPAGER=\"${PREFIX}/bin/less\"
or
-DPAGER=\"${LOCALBASE}/bin/less\"
if this is an X port, instead of
-DPAGER=\"/usr/local/bin/less\". This way it will
have a better chance of working if the system administrator has
moved the whole `/usr/local' tree somewhere else.SubdirectoriesTry to let the port put things in the right subdirectories of
PREFIX. Some ports lump everything and put it in
the subdirectory with the port's name, which is incorrect. Also,
many ports put everything except binaries, header files and manual
pages in the a subdirectory of lib, which does
not bode well with the BSD paradigm. Many of the files should be
moved to one of the following: etc
(setup/configuration files), libexec
(executables started internally), sbin
(executables for superusers/managers), info
(documentation for info browser) or share
(architecture independent files). See man &man.hier.7; for details,
the rules governing
/usr pretty much apply to
/usr/local too. The exception are ports
dealing with USENET “news”. They may use
PREFIX/news as a destination
for their files.Cleaning up empty directoriesDo make your ports clean up after themselves when they are
deinstalled. This is usually accomplished by adding
@dirrm lines for all directories that are
specifically created by the port. You need to delete subdirectories
before you can delete parent directories.
:
lib/X11/oneko/pixmaps/cat.xpm
lib/X11/oneko/sounds/cat.au
:
@dirrm lib/X11/oneko/pixmals
@dirrm lib/X11/oneko/sounds
@dirrm lib/X11/onekoHowever, sometimes @dirrm will give you
errors because other ports also share the same subdirectory. You
can call rmdir from @unexec to
remove only empty directories without warning.
@unexec rmdir %D/share/doc/gimp 2>/dev/null || trueThis will neither print any error messages nor cause
pkg_delete to exit abnormally even if
PREFIX/share/doc/gimp is not
empty due to other ports installing some files in there.UIDsIf your port requires a certain user to be on the installed
system, let the pkg/INSTALL script call
pw to create it automatically. Look at
net/cvsup-mirror for an example.If your port must use the same user/group ID number when it is
installed a binary package as when it was compiled, then you must
choose a free UID from 50 to 99 and register it below. Look at
japanese/Wnn for an example.Make sure you do not use a UID already used by the system or
other ports. This is the current list of UIDs between 50 and
99.
majordom:*:54:54:Majordomo Pseudo User:/usr/local/majordomo:/nonexistent
cyrus:*:60:60:the cyrus mail server:/nonexistent:/nonexistent
gnats:*:61:1:GNATS database owner:/usr/local/share/gnats/gnats-db:/bin/sh
uucp:*:66:66:UUCP pseudo-user:/var/spool/uucppublic:/usr/libexec/uucp/uucico
xten:*:67:67:X-10 daemon:/usr/local/xten:/nonexistent
pop:*:68:6:Post Office Owner (popper):/nonexistent:/nonexistent
wnn:*:69:7:Wnn:/nonexistent:/nonexistent
ifmail:*:70:66:Ifmail user:/nonexistent:/nonexistent
pgsql:*:70:70:PostgreSQL pseudo-user:/usr/local/pgsql:/bin/sh
ircd:*:72:72:IRCd hybrid:/nonexistent:/nonexistent
alias:*:81:81:QMail user:/var/qmail/alias:/nonexistent
qmaill:*:83:81:QMail user:/var/qmail:/nonexistent
qmaild:*:82:81:QMail user:/var/qmail:/nonexistent
qmailq:*:85:82:QMail user:/var/qmail:/nonexistent
qmails:*:87:82:QMail user:/var/qmail:/nonexistent
qmailp:*:84:81:QMail user:/var/qmail:/nonexistent
qmailr:*:86:82:QMail user:/var/qmail:/nonexistent
msql:*:87:87:mSQL-2 pseudo-user:/var/db/msqldb:/bin/sh
mysql:*:88:88:MySQL Daemon:/var/db/mysql:/sbin/nologinPlease include a notice when you submit a port (or an upgrade)
that reserves a new UID or GID in this range. This allows us to
keep the list of reserved IDs up to date.Do things rationallyThe Makefile should do things simply and
reasonably. If you can make it a couple of lines shorter or more
readable, then do so. Examples include using a make
.if construct instead of a shell
if construct, not redefining
do-extract if you can redefine
EXTRACT* instead, and using
GNU_CONFIGURE instead of CONFIGURE_ARGS
+= --prefix=${PREFIX}.Respect CFLAGSThe port should respect the CFLAGS variable.
If it does not, please add NO_PACKAGE=ignores
cflags to the Makefile.Configuration filesIf your port requires some configuration files in
PREFIX/etc, do
not just install them and list them in
pkg/PLIST. That will cause
pkg_delete to delete files carefully edited by
the user and a new installation to wipe them out.Instead, install sample files with a suffix
(filename.sample
will work well) and print out a message pointing out that the
user has to copy and edit the file before the software can be made
to work.PortlintDo check your work with portlint
before you submit or commit it.FeedbackDo send applicable changes/patches to the original
author/maintainer for inclusion in next release of the code. This
will only make your job that much easier for the next
release.MiscellaneaThe files pkg/DESCR,
pkg/COMMENT, and pkg/PLIST
should each be double-checked. If you are reviewing a port and feel
they can be worded better, do so.Do not copy more copies of the GNU General Public License into
our system, please.Please be careful to note any legal issues! Do not let us
illegally distribute software!If you are stuck…Do look at existing examples and the
bsd.port.mk file before asking us questions!
;)Do ask us questions if you have any trouble! Do not just beat
your head against a wall! :)A Sample MakefileHere is a sample Makefile that you can use to
create a new port. Make sure you remove all the extra comments (ones
between brackets)!It is recommended that you follow this format (ordering of
variables, empty lines between sections, etc.). This format is
designed so that the most important information is easy to locate. We
recommend that you use portlint to check the
Makefile.
[the header...just to make it easier for us to identify the ports.]
# New ports collection makefile for: xdvi
[the version required header should updated when upgrading a port.]
# Version required: pl18 [things like "1.5alpha" are fine here too]
[this is the date when the first version of this Makefile was created.
Never change this when doing an update of the port.]
# Date created: 26 May 1995
[this is the person who did the original port to FreeBSD, in particular, the
person who wrote the first version of this Makefile. Remember, this should
not be changed when upgrading the port later.]
-# Whom: Satoshi Asami <asami@FreeBSD.ORG>
+# Whom: Satoshi Asami <asami@FreeBSD.org>
#
# $Id$
[ ^^^^ This will be automatically replaced with RCS ID string by CVS
when it is committed to our repository.]
#
[section to describe the port itself and the master site - DISTNAME
is always first, followed by PKGNAME (if necessary), CATEGORIES,
and then MASTER_SITES, which can be followed by MASTER_SITE_SUBDIR.
After those, one of EXTRACT_SUFX or DISTFILES can be specified too.]
DISTNAME= xdvi
PKGNAME= xdvi-pl18
CATEGORIES= print
[do not forget the trailing slash ("/")!
if you are not using MASTER_SITE_* macros]
MASTER_SITES= ${MASTER_SITE_XCONTRIB}
MASTER_SITE_SUBDIR= applications
[set this if the source is not in the standard ".tar.gz" form]
EXTRACT_SUFX= .tar.Z
[section for distributed patches -- can be empty]
PATCH_SITES= ftp://ftp.sra.co.jp/pub/X11/japanese/
PATCHFILES= xdvi-18.patch1.gz xdvi-18.patch2.gz
[maintainer; *mandatory*! This is the person (preferably with commit
privileges) who a user can contact for questions and bug reports - this
person should be the porter or someone who can forward questions to the
original porter reasonably promptly. If you really do not want to have
- your address here, set it to "ports@FreeBSD.ORG".]
-MAINTAINER= asami@FreeBSD.ORG
+ your address here, set it to "ports@FreeBSD.org".]
+MAINTAINER= asami@FreeBSD.org
[dependencies -- can be empty]
RUN_DEPENDS= gs:${PORTSDIR}/print/ghostscript
LIB_DEPENDS= Xpm.5:${PORTSDIR}/graphics/xpm
[this section is for other standard bsd.port.mk variables that do not
belong to any of the above]
[If it asks questions during configure, build, install...]
IS_INTERACTIVE= yes
[If it extracts to a directory other than ${DISTNAME}...]
WRKSRC= ${WRKDIR}/xdvi-new
[If the distributed patches were not made relative to ${WRKSRC}, you
may need to tweak this]
PATCH_DIST_STRIP= -p1
[If it requires a "configure" script generated by GNU autoconf to be run]
GNU_CONFIGURE= yes
[If it requires GNU make, not /usr/bin/make, to build...]
USE_GMAKE= yes
[If it is an X application and requires "xmkmf -a" to be run...]
USE_IMAKE= yes
[et cetera.]
[non-standard variables to be used in the rules below]
MY_FAVORITE_RESPONSE= "yeah, right"
[then the special rules, in the order they are called]
pre-fetch:
i go fetch something, yeah
post-patch:
i need to do something after patch, great
pre-install:
and then some more stuff before installing, wow
[and then the epilogue]
.include <bsd.port.mk>Automated package list creationFirst, make sure your port is almost complete, with only
PLIST missing. Create an empty
PLIST.&prompt.root; touch PLISTNext, create a new set of directories which your port can be
installed, and install any dependencies.&prompt.root; mtree -U -f /etc/mtree/BSD.local.dist -d -e -p /var/tmp/port-name
&prompt.root; make depends PREFIX=/var/tmp/port-nameStore the directory structure in a new file.&prompt.root; (cd /var/tmp/port-name && find * \! -type d) > OLD-DIRSIf your port honours PREFIX (which it should)
you can then install the port and create the package list.&prompt.root; make install PREFIX=/var/tmp
&prompt.root; (cd /var/tmp/port-name && find * \! -type d) > pkg/PLISTYou must also add any newly created directories to the packing
list.&prompt.root; (cd /var/tmp/port-name && find * -type d) | comm -13 OLD-DIRS - | sed -e 's#^#@dirrm#' >> pkg/PLISTFinally, you need to tidy up the packing list by hand. I lied
when I said this was all automated. Manual pages should be listed in
the port's Makefile under
MANn, and not in the
package list. User configuration files should be removed, or
installed as
filename.sample. Any
libraries installed by the port should be listed as specified in the
ldconfig section.Package NamesThe following are the conventions you should follow in naming your
packages. This is to have our package directory easy to scan, as
there are already lots and lots of packages and users are going to
turn away if they hurt their eyes!The package name should look like
language-name-compiled.specifics-version.numbers.If your DISTNAME does not look like that, set
PKGNAME to something in that format.FreeBSD strives to support the native language of its users.
The language- part should be a two
letter abbreviation of the natural language defined by ISO-639 if
the port is specific to a certain language. Examples are
ja for Japanese, ru for
Russian, vi for Vietnamese,
zh for Chinese, ko for
Korean and de for German.The name part should be all lowercases,
except for a really large package (with lots of programs in it).
Things like XFree86 (yes there really is a port of it, check it
out) and ImageMagick fall into this category. Otherwise, convert
the name (or at least the first letter) to lowercase. If the
capital letters are important to the name (for example, with
one-letter names like R or
V) you may use capital letters at your
discretion. There is a tradition of naming Perl 5 modules by
prepending p5- and converting the double-colon
separator to a hyphen; for example, the
Data::Dumper module becomes
p5-Data-Dumper. If the software in question
has numbers, hyphens, or underscores in its name, you may include
them as well (like kinput2).If the port can be built with different hardcoded defaults (usually
part of the directory name in a family of ports), the
-compiled.specifics part should state
the compiled-in defaults (the hyphen is optional). Examples are
papersize and font units.The version string should be a period-separated list of
integers and single lowercase alphabetics. The only exception is
the string pl (meaning `patchlevel'), which can
be used only when there are no major and
minor version numbers in the software.Here are some (real) examples on how to convert a
DISTNAME into a suitable
PKGNAME:Distribution NamePackage NameReasonmule-2.2.2.mule-2.2.2No changes requiredXFree86-3.1.2XFree86-3.1.2No changes requiredEmiClock-1.0.2emiclock-1.0.2No uppercase names for single programsgmod1.4gmod-1.4Need a hyphen before version numbersxmris.4.0.2xmris-4.0.2Need a hyphen before version numbersrdist-1.3alphardist-1.3aNo strings like alpha
allowedes-0.9-beta1es-0.9b1No strings like beta
allowedv3.3beta021.srctiff-3.3What the heck was that anyway?tvtwmtvtwm-pl11Version string always requiredpiewmpiewm-1.0Version string always requiredxvgr-2.10pl1xvgr-2.10.1pl allowed only when no
major/minor version numbersgawk-2.15.6ja-gawk-2.15.6Japanese language versionpsutils-1.13psutils-letter-1.13Papersize hardcoded at package build timepkfontspkfonts300-1.0Package for 300dpi fontsIf there is absolutely no trace of version information in the
original source and it is unlikely that the original author will ever
release another version, just set the version string to
1.0 (like the piewm example above). Otherwise, ask
the original author or use the date string
(yy.mm.dd) as the version.CategoriesAs you already know, ports are classified in several categories.
But for this to wor, it is important that porters and users understand
what each category and how we deicde what to put in each
category.Current list of categoriesFirst, this is the current list of port categories. Those
marked with an asterisk (*) are
virtual categories—those that do not have
a corresponding subdirectory in the ports tree.For non-virtual categories, you will find a one-line
description in the pkg/COMMENT file in that
subdirectory (e.g.,
archivers/pkg/COMMENT).CategoryDescriptionafterstep*Ports to support AfterStep window managerarchiversArchiving tools.astroAstronomical ports.audioSound support.benchmarksBenchmarking utilities.biologyBiology-related software.cadComputer aided design tools.chineseChinese language support.commsCommunication software. Mostly software to talk to
your serial port.convertersCharacter code converters.databasesDatabases.deskutilsThings that used to be on the desktop before
computers were invented.develDevelopment utilities. Do not put libraries here just
because they are libraries—unless they truly do not
belong to anywhere else, they should not be in this
category.editorsGeneral editors. Specialized editors go in the section
for those tools (e.g., a mathematical-formula editor will go
in math).elispEmacs-lisp ports.emulatorsEmulators for other operating systems. Terminal
emulators do not belong
here—X-based ones should go to
x11 and text-based ones to either
comms or misc,
depending on the exact functionality.gamesGames.germanGerman language support.graphicsGraphics utilities.ircInternet Chat Relay utilities.japaneseJapanese language support.javaJava languge support.kde*Ports that form the K Desktop Environment
(kde).koreanKorean language support.langProgramming languages.mailMail software.mathNumerical computation software and other utilities
for mathematics.mboneMBone applications.miscMiscellaneous utilities—basically things that
does not belong to anywhere else. This is the only category
that should not appear with any other non-virtual category.
If you have misc with something else in
your CATEGORIES line, that means you can
safely delete misc and just put the port
in that other subdirectory!netMiscellaneous networking software.newsUSENET news software.offix*Ports from the OffiX suite.palmSoftware support for the 3Com Palm(tm) series.perl5*Ports that require perl version 5 to run.plan9*Various programs from Plan9.printPrinting software. Desktop publishing tools
(previewers, etc.) belong here too.python*Software written in python.russianRussian language support.securitySecurity utilities.shellsCommand line shells.sysutilsSystem utilities.tcl75*Ports that use tcl version 7.5 to run.tcl76*Ports that use tcl version 7.6 to run.tcl80*Ports that use tcl version 8.0 to run.tcl81*Ports that use tcl version 8.1 to run.textprocText processing utilities. It does not include
desktop publishing tools, which go to print/.tk41*Ports that use tk version 4.1 to run.tk42*Ports that use tk version 4.2 to run.tk80*Ports that use tk version 8.0 to run.tk81*Ports that use tk version 8.1 to run.vietnameseVietnamese language support.windowmaker*Ports to support the WindowMaker window
managerwwwSoftware related to the World Wide Web. HTML language
support belong here too.x11The X window system and friends. This category is only
for software that directly support the window system. Do not
put regular X applications here. If your port is an X
application, define USE_XLIB (implied by
USE_IMAKE) and put it in appropriate
categories. Also, many of them go into other
x11-* categories (see below).x11-clocksX11 clocks.x11-fmX11 file managers.x11-fontsX11 fonts and font utilities.x11-serversX11 servers.x11-toolkitsX11 toolkits.x11-wmX11 window managers.Choosing the right categoryAs many of the categories overlap, you often have to choose
which of the categories should be the primary category of your port.
There are several rules that govern this usse. Here is the list of
priorities, in decreasing order of precedence.Language specific categories always come first. For
example, if your port installs Japanese X11 fonts, then your
CATEGORIES line would read japanese
x11-fonts.Specific categories win over less-specific ones. For
instance, an HTML editor should be listed as www
editors, not the other way around. Also, you do not
need to list net when the port belongs to
either of irc, mail,
mbone, news,
security, or www.x11 is used as a secondary category only
when the primary category is a natural language. In particular,
you should not put x11 in the category line
for X applications.If your port truly does not belong anywhere else, put it in
misc.If you are not sure about the category, please put a comment to
that effect in your send-pr submission so we can
discuss it before import it. (If you are a committer, send a note
&a.ports; so we can discuss it first—too often new ports are
imported to a wrong category only to be moved right away.)Changes to this document and the ports systemIf you maintain a lot of ports, you should consider following the
&a.ports;. Important changes to the way ports work will be announced
there. You can always find more detailed information on the latest
changes by looking at the
+ url="http://www.FreeBSD.org/cgi/cvsweb.cgi/ports/Mk/bsd.port.mk"> the
bsd.port.mk CVS log.That is It, Folks!Boy, this sure was a long tutorial, wasn't it? Thanks for
following us to here, really.Well, now that you know how to do a port, let us go at it and
convert everything in the world into ports! That is the easiest way to
start contributing to the FreeBSD Project! :)
diff --git a/en_US.ISO8859-1/share/sgml/authors.ent b/en_US.ISO8859-1/share/sgml/authors.ent
index bc15cc25ad..43fd766942 100644
--- a/en_US.ISO8859-1/share/sgml/authors.ent
+++ b/en_US.ISO8859-1/share/sgml/authors.ent
@@ -1,387 +1,387 @@
abial@FreeBSD.org">
ache@FreeBSD.org">
adam@FreeBSD.org">
alc@FreeBSD.org">
alex@FreeBSD.org">
amurai@FreeBSD.org">
andreas@FreeBSD.org">
archie@FreeBSD.org">
asami@FreeBSD.org">
ats@FreeBSD.org">
awebster@pubnix.net">
bde@FreeBSD.org">
billf@FreeBSD.org">
brandon@FreeBSD.org">
brian@FreeBSD.org">
cawimm@FreeBSD.org">
cg@FreeBSD.org">
charnier@FreeBSD.org">
chuckr@glue.umd.edu">
chuckr@FreeBSD.org">
cpiazza@FreeBSD.org">
cracauer@FreeBSD.org">
csgr@FreeBSD.org">
cwt@FreeBSD.org">
danny@FreeBSD.org">
darrenr@FreeBSD.org">
davidn@blaze.net.au">
dbaker@FreeBSD.org">
dburr@FreeBSD.org">
dcs@FreeBSD.org">
deischen@FreeBSD.org">
des@FreeBSD.org">
dfr@FreeBSD.org">
dg@FreeBSD.org">
dick@FreeBSD.org">
dillon@FreeBSD.org">
dima@FreeBSD.org">
dirk@FreeBSD.org">
Dirk.vanGulik@jrc.it">
dt@FreeBSD.org">
dufault@FreeBSD.org">
dwhite@FreeBSD.org">
dyson@FreeBSD.org">
eivind@FreeBSD.org">
ejc@FreeBSD.org">
erich@FreeBSD.org">
faq@FreeBSD.org">
fenner@FreeBSD.org">
flathill@FreeBSD.org">
foxfair@FreeBSD.org">
fsmp@FreeBSD.org">
gallatin@FreeBSD.org">
gclarkii@FreeBSD.org">
gehenna@FreeBSD.org">
gena@NetVision.net.il">
ghelmer@cs.iastate.edu">
gibbs@FreeBSD.org">
gj@FreeBSD.org">
gpalmer@FreeBSD.org">
graichen@FreeBSD.org">
green@FreeBSD.org">
grog@FreeBSD.org">
gryphon@healer.com">
guido@FreeBSD.org">
hanai@FreeBSD.org">
handy@sxt4.physics.montana.edu">
helbig@FreeBSD.org">
hm@FreeBSD.org">
hoek@FreeBSD.org">
hosokawa@FreeBSD.org">
hsu@FreeBSD.org">
imp@FreeBSD.org">
itojun@itojun.org">
iwasaki@FreeBSD.org">
jasone@FreeBSD.org">
jb@cimlogic.com.au">
jdp@FreeBSD.org">
jehamby@lightside.com">
jfieber@FreeBSD.org">
jfitz@FreeBSD.org">
jgreco@FreeBSD.org">
jhay@FreeBSD.org">
jhs@FreeBSD.org">
jkh@FreeBSD.org">
jkoshy@FreeBSD.org">
jlemon@FreeBSD.org">
john@starfire.MN.ORG">
jlrobin@FreeBSD.org">
jmacd@FreeBSD.org">
jmb@FreeBSD.org">
jmg@FreeBSD.org">
jmz@FreeBSD.org">
joerg@FreeBSD.org">
john@FreeBSD.org">
jraynard@FreeBSD.org">
jseger@FreeBSD.org">
julian@FreeBSD.org">
jvh@FreeBSD.org">
karl@FreeBSD.org">
kato@FreeBSD.org">
kelly@plutotech.com">
ken@FreeBSD.org">
kjc@FreeBSD.org">
kris@FreeBSD.org">
kuriyama@FreeBSD.org">
lars@FreeBSD.org">
lile@FreeBSD.org">
ljo@FreeBSD.org">
luoqi@FreeBSD.org">
marcel@FreeBSD.org">
markm@FreeBSD.org">
martin@FreeBSD.org">
max@FreeBSD.org">
mark@vmunix.com">
mbarkah@FreeBSD.org">
mckay@FreeBSD.org">
mckusick@FreeBSD.org">
md@bsc.no">
winter@jurai.net">
mharo@FreeBSD.org">
mjacob@FreeBSD.org">
mks@FreeBSD.org">
motoyuki@FreeBSD.org">
mph@FreeBSD.org">
mpp@FreeBSD.org">
msmith@FreeBSD.org">
nate@FreeBSD.org">
nectar@FreeBSD.org">
newton@FreeBSD.org">
n_hibma@FreeBSD.org">
nik@FreeBSD.org">
nsayer@FreeBSD.org">
nsj@FreeBSD.org">
nyan@FreeBSD.org">
obrien@FreeBSD.org">
olah@FreeBSD.org">
opsys@open-systems.net">
paul@FreeBSD.org">
pb@fasterix.freenix.org">
pds@FreeBSD.org">
peter@FreeBSD.org">
phk@FreeBSD.org">
pjchilds@imforei.apana.org.au">
proven@FreeBSD.org">
pst@FreeBSD.org">
rgrimes@FreeBSD.org">
rhuff@cybercom.net">
ricardag@ag.com.br">
rich@FreeBSD.org">
rnordier@FreeBSD.org">
roberto@FreeBSD.org">
rse@FreeBSD.org">
ru@FreeBSD.org">
sada@FreeBSD.org">
scrappy@FreeBSD.org">
se@FreeBSD.org">
sef@FreeBSD.org">
sheldonh@FreeBSD.org">
shige@FreeBSD.org">
simokawa@FreeBSD.org">
smace@FreeBSD.org">
smpatel@FreeBSD.org">
sos@FreeBSD.org">
stark@FreeBSD.org">
stb@FreeBSD.org">
steve@FreeBSD.org">
swallace@FreeBSD.org">
tanimura@FreeBSD.org">
taoka@FreeBSD.org">
tedm@FreeBSD.org">
tegge@FreeBSD.org">
tg@FreeBSD.org">
thepish@FreeBSD.org">
-tom@freebsd.org">
+tom@FreeBSD.org">
torstenb@FreeBSD.org">
truckman@FreeBSD.org">
ugen@FreeBSD.org">
uhclem@FreeBSD.org">
ulf@FreeBSD.org">
vanilla@FreeBSD.org">
wes@FreeBSD.org">
whiteside@acm.org">
wilko@yedi.iaf.nl">
wlloyd@mpd.ca">
wollman@FreeBSD.org">
wosch@FreeBSD.org">
wpaul@FreeBSD.org">
yokota@FreeBSD.org">
diff --git a/en_US.ISO_8859-1/books/handbook/advanced-networking/chapter.sgml b/en_US.ISO_8859-1/books/handbook/advanced-networking/chapter.sgml
index a5ed9584f2..8f3ecfdc06 100644
--- a/en_US.ISO_8859-1/books/handbook/advanced-networking/chapter.sgml
+++ b/en_US.ISO_8859-1/books/handbook/advanced-networking/chapter.sgml
@@ -1,934 +1,934 @@
Advanced NetworkingGateways and RoutesContributed by &a.gryphon;. 6 October
1995.For one machine to be able to find another, there must be a
mechanism in place to describe how to get from one to the other. This is
called Routing. A “route” is a defined pair of addresses: a
“destination” and a “gateway”. The pair
indicates that if you are trying to get to this
destination, send along through this
gateway. There are three types of destinations:
individual hosts, subnets, and “default”. The
“default route” is used if none of the other routes apply.
We will talk a little bit more about default routes later on. There are
also three types of gateways: individual hosts, interfaces (also called
“links”), and ethernet hardware addresses.An exampleTo illustrate different aspects of routing, we will use the
following example which is the output of the command netstat
-r:Destination Gateway Flags Refs Use Netif Expire
default outside-gw UGSc 37 418 ppp0
localhost localhost UH 0 181 lo0
test0 0:e0:b5:36:cf:4f UHLW 5 63288 ed0 77
10.20.30.255 link#1 UHLW 1 2421
foobar.com link#1 UC 0 0
host1 0:e0:a8:37:8:1e UHLW 3 4601 lo0
host2 0:e0:a8:37:8:1e UHLW 0 5 lo0 =>
host2.foobar.com link#1 UC 0 0
224 link#1 UC 0 0The first two lines specify the default route (which we will cover
in the next section) and the localhost route.The interface (Netif column) that it specifies
to use for localhost is
lo0, also known as the loopback device. This
says to keep all traffic for this destination internal, rather than
sending it out over the LAN, since it will only end up back where it
started anyway.The next thing that stands out are the 0:e0:... addresses. These are ethernet hardware
addresses. FreeBSD will automatically identify any hosts
(test0 in the example) on the local ethernet and add
a route for that host, directly to it over the ethernet interface,
ed0. There is also a timeout
(Expire column) associated with this type of route,
which is used if we fail to hear from the host in a specific amount of
time. In this case the route will be automatically deleted. These
hosts are identified using a mechanism known as RIP (Routing
Information Protocol), which figures out routes to local hosts based
upon a shortest path determination.FreeBSD will also add subnet routes for the local subnet (10.20.30.255 is the broadcast address for the
subnet 10.20.30, and foobar.com is the domain name associated
with that subnet). The designation link#1 refers
to the first ethernet card in the machine. You will notice no
additional interface is specified for those.Both of these groups (local network hosts and local subnets) have
their routes automatically configured by a daemon called
routed. If this is not run, then only routes which
are statically defined (ie. entered explicitly) will exist.The host1 line refers to our host, which it
knows by ethernet address. Since we are the sending host, FreeBSD
knows to use the loopback interface (lo0)
rather than sending it out over the ethernet interface.The two host2 lines are an example of what
happens when we use an ifconfig alias (see the section of ethernet for
reasons why we would do this). The => symbol
after the lo0 interface says that not only
are we using the loopback (since this is address also refers to the
local host), but specifically it is an alias. Such routes only show
up on the host that supports the alias; all other hosts on the local
network will simply have a link#1 line for
such.The final line (destination subnet 224) deals
with MultiCasting, which will be covered in a another section.The other column that we should talk about are the
Flags. Each route has different attributes that
are described in the column. Below is a short table of some of these
flags and their meanings:UUp: The route is active.HHost: The route destination is a single host.GGateway: Send anything for this destination on to this
remote system, which will figure out from there where to send
it.SStatic: This route was configured manually, not
automatically generated by the system.CClone: Generates a new route based upon this route for
machines we connect to. This type of route is normally used
for local networks.WWasCloned: Indicated a route that was auto-configured
based upon a local area network (Clone) route.LLink: Route involves references to ethernet
hardware.Default routesWhen the local system needs to make a connection to remote host,
it checks the routing table to determine if a known path exists. If
the remote host falls into a subnet that we know how to reach (Cloned
routes), then the system checks to see if it can connect along that
interface.If all known paths fail, the system has one last option: the
“default” route. This route is a special type of gateway
route (usually the only one present in the system), and is always
marked with a c in the flags field. For hosts on a
local area network, this gateway is set to whatever machine has a
direct connection to the outside world (whether via PPP link, or your
hardware device attached to a dedicated data line).If you are configuring the default route for a machine which
itself is functioning as the gateway to the outside world, then the
default route will be the gateway machine at your Internet Service
Provider's (ISP) site.Let us look at an example of default routes. This is a common
configuration:
[Local2] <--ether--> [Local1] <--PPP--> [ISP-Serv] <--ether--> [T1-GW]
The hosts Local1 and Local2 are
at your site, with the formed being your PPP connection to your ISP's
Terminal Server. Your ISP has a local network at their site, which
has, among other things, the server where you connect and a hardware
device (T1-GW) attached to the ISP's Internet feed.The default routes for each of your machines will be:hostdefault gatewayinterfaceLocal2Local1ethernetLocal1T1-GWPPPA common question is “Why (or how) would we set the T1-GW to
be the default gateway for Local1, rather than the ISP server it is
connected to?”.Remember, since the PPP interface is using an address on the ISP's
local network for your side of the connection, routes for any other
machines on the ISP's local network will be automatically generated.
Hence, you will already know how to reach the T1-GW machine, so there
is no need for the intermediate step of sending traffic to the ISP
server.As a final note, it is common to use the address ...1 as the gateway address for your local
network. So (using the same example), if your local class-C address
space was 10.20.30 and your ISP was
using 10.9.9 then the default routes
would be:
Local2 (10.20.30.2) --> Local1 (10.20.30.1)
Local1 (10.20.30.1, 10.9.9.30) --> T1-GW (10.9.9.1)
Dual homed hostsThere is one other type of configuration that we should cover, and
that is a host that sits on two different networks. Technically, any
machine functioning as a gateway (in the example above, using a PPP
connection) counts as a dual-homed host. But the term is really only
used to refer to a machine that sits on two local-area
networks.In one case, the machine as two ethernet cards, each having an
address on the separate subnets. Alternately, the machine may only
have one ethernet card, and be using ifconfig aliasing. The former is
used if two physically separate ethernet networks are in use, the
latter if there is one physical network segment, but two logically
separate subnets.Either way, routing tables are set up so that each subnet knows
that this machine is the defined gateway (inbound route) to the other
subnet. This configuration, with the machine acting as a Bridge
between the two subnets, is often used when we need to implement
packet filtering or firewall security in either or both
directions.Routing propagationWe have already talked about how we define our routes to the
outside world, but not about how the outside world finds us.We already know that routing tables can be set up so that all
traffic for a particular address space (in our examples, a class-C
subnet) can be sent to a particular host on that network, which will
forward the packets inbound.When you get an address space assigned to your site, your service
provider will set up their routing tables so that all traffic for your
subnet will be sent down your PPP link to your site. But how do sites
across the country know to send to your ISP?There is a system (much like the distributed DNS information) that
keeps track of all assigned address-spaces, and defines their point of
connection to the Internet Backbone. The “Backbone” are
the main trunk lines that carry Internet traffic across the country,
and around the world. Each backbone machine has a copy of a master
set of tables, which direct traffic for a particular network to a
specific backbone carrier, and from there down the chain of service
providers until it reaches your network.It is the task of your service provider to advertise to the
backbone sites that they are the point of connection (and thus the
path inward) for your site. This is known as route
propagation.TroubleshootingSometimes, there is a problem with routing propagation, and some
sites are unable to connect to you. Perhaps the most useful command
for trying to figure out where a routing is breaking down is the
&man.traceroute.8; command. It is equally useful if you cannot seem
to make a connection to a remote machine (i.e. &man.ping.8;
fails).The &man.traceroute.8; command is run with the name of the remote
host you are trying to connect to. It will show the gateway hosts
along the path of the attempt, eventually either reaching the target
host, or terminating because of a lack of connection.For more information, see the manual page for
&man.traceroute.8;.NFSContributed by &a.jlind;.Certain Ethernet adapters for ISA PC systems have limitations which
can lead to serious network problems, particularly with NFS. This
difficulty is not specific to FreeBSD, but FreeBSD systems are affected
by it.The problem nearly always occurs when (FreeBSD) PC systems are
networked with high-performance workstations, such as those made by
Silicon Graphics, Inc., and Sun Microsystems, Inc. The NFS mount will
work fine, and some operations may succeed, but suddenly the server will
seem to become unresponsive to the client, even though requests to and
from other systems continue to be processed. This happens to the client
system, whether the client is the FreeBSD system or the workstation. On
many systems, there is no way to shut down the client gracefully once
this problem has manifested itself. The only solution is often to reset
the client, because the NFS situation cannot be resolved.Though the “correct” solution is to get a higher
performance and capacity Ethernet adapter for the FreeBSD system, there
is a simple workaround that will allow satisfactory operation. If the
FreeBSD system is the server, include the option
on the mount from the client. If the FreeBSD
system is the client, then mount the NFS file
system with the option . These options may be
specified using the fourth field of the fstab entry
on the client for automatic mounts, or by using the
parameter of the mount command for manual mounts.It should be noted that there is a different problem, sometimes
mistaken for this one, when the NFS servers and clients are on different
networks. If that is the case, make certain that
your routers are routing the necessary UDP information, or you will not
get anywhere, no matter what else you are doing.In the following examples, fastws is the host
(interface) name of a high-performance workstation, and
freebox is the host (interface) name of a FreeBSD
system with a lower-performance Ethernet adapter. Also,
/sharedfs will be the exported NFS filesystem (see
man exports), and /project will
be the mount point on the client for the exported file system. In all
cases, note that additional options, such as or
and may be desirable in your
application.Examples for the FreeBSD system (freebox) as the
client: in /etc/fstab on freebox:
fastws:/sharedfs /project nfs rw,-r=1024 0 0As a manual mount command on freebox:&prompt.root; mount -t nfs -o -r=1024 fastws:/sharedfs /projectExamples for the FreeBSD system as the server: in
/etc/fstab on fastws:
freebox:/sharedfs /project nfs rw,-w=1024 0 0As a manual mount command on fastws:&prompt.root; mount -t nfs -o -w=1024 freebox:/sharedfs /projectNearly any 16-bit Ethernet adapter will allow operation without the
above restrictions on the read or write size.For anyone who cares, here is what happens when the failure occurs,
which also explains why it is unrecoverable. NFS typically works with a
“block” size of 8k (though it may do fragments of smaller
sizes). Since the maximum Ethernet packet is around 1500 bytes, the NFS
“block” gets split into multiple Ethernet packets, even
though it is still a single unit to the upper-level code, and must be
received, assembled, and acknowledged as a unit.
The high-performance workstations can pump out the packets which
comprise the NFS unit one right after the other, just as close together
as the standard allows. On the smaller, lower capacity cards, the later
packets overrun the earlier packets of the same unit before they can be
transferred to the host and the unit as a whole cannot be reconstructed
or acknowledged. As a result, the workstation will time out and try
again, but it will try again with the entire 8K unit, and the process
will be repeated, ad infinitum.By keeping the unit size below the Ethernet packet size limitation,
we ensure that any complete Ethernet packet received can be acknowledged
individually, avoiding the deadlock situation.Overruns may still occur when a high-performance workstations is
slamming data out to a PC system, but with the better cards, such
overruns are not guaranteed on NFS “units”. When an overrun
occurs, the units affected will be retransmitted, and there will be a
fair chance that they will be received, assembled, and
acknowledged.Diskless OperationContributed by &a.martin;.netboot.com/netboot.rom
allow you to boot your FreeBSD machine over the network and run FreeBSD
without having a disk on your client. Under 2.0 it is now possible to
have local swap. Swapping over NFS is also still supported.Supported Ethernet cards include: Western Digital/SMC 8003, 8013,
8216 and compatibles; NE1000/NE2000 and compatibles (requires
recompile)Setup InstructionsFind a machine that will be your server. This machine will
require enough disk space to hold the FreeBSD 2.0 binaries and
have bootp, tftp and NFS services available. Tested
machines:HP9000/8xx running HP-UX 9.04 or later (pre 9.04 doesn't
work)Sun/Solaris 2.3. (you may need to get bootp)Set up a bootp server to provide the client with IP, gateway,
netmask.
diskless:\
:ht=ether:\
:ha=0000c01f848a:\
:sm=255.255.255.0:\
:hn:\
:ds=192.1.2.3:\
:ip=192.1.2.4:\
:gw=192.1.2.5:\
:vm=rfc1048:Set up a TFTP server (on same machine as bootp server) to
provide booting information to client. The name of this file is
cfg.X.X.X.X (or
/tftpboot/cfg.X.X.X.X,
it will try both) where X.X.X.X is the
IP address of the client. The contents of this file can be any
valid netboot commands. Under 2.0, netboot has the following
commands:helpprint help listip
print/set client's IP addressserver
print/set bootp/tftp server addressnetmask
print/set netmaskhostname nameprint/set hostnamekernel
print/set kernel namerootfs
print/set root filesystemswapfs
print/set swap filesystemswapsize
set diskless swapsize in Kbytesdiskbootboot from diskautobootcontinue boot processtrans
|turn transceiver on|offflags
set boot flagsA typical completely diskless cfg file might contain:
rootfs 192.1.2.3:/rootfs/myclient
swapfs 192.1.2.3:/swapfs
swapsize 20000
hostname myclient.mydomainA cfg file for a machine with local swap might contain:
rootfs 192.1.2.3:/rootfs/myclient
hostname myclient.mydomainEnsure that your NFS server has exported the root (and swap if
applicable) filesystems to your client, and that the client has
root access to these filesystems A typical
/etc/exports file on FreeBSD might look
like:
/rootfs/myclient -maproot=0:0 myclient.mydomain
/swapfs -maproot=0:0 myclient.mydomainAnd on HP-UX:
/rootfs/myclient -root=myclient.mydomain
/swapfs -root=myclient.mydomainIf you are swapping over NFS (completely diskless
configuration) create a swap file for your client using
dd. If your swapfs command
has the arguments /swapfs and the size 20000
as in the example above, the swapfile for myclient will be called
/swapfs/swap.X.X.X.X
where X.X.X.X is the client's IP addr,
eg:&prompt.root; dd if=/dev/zero of=/swapfs/swap.192.1.2.4 bs=1k count=20000Also, the client's swap space might contain sensitive
information once swapping starts, so make sure to restrict read
and write access to this file to prevent unauthorized
access:&prompt.root; chmod 0600 /swapfs/swap.192.1.2.4Unpack the root filesystem in the directory the client will
use for its root filesystem (/rootfs/myclient
in the example above).On HP-UX systems: The server should be running HP-UX 9.04
or later for HP9000/800 series machines. Prior versions do not
allow the creation of device files over NFS.When extracting /dev in
/rootfs/myclient, beware that some
systems (HPUX) will not create device files that FreeBSD is
happy with. You may have to go to single user mode on the
first bootup (press control-c during the bootup phase), cd
/dev and do a sh ./MAKEDEV
all from the client to fix this.Run netboot.com on the client or make an
EPROM from the netboot.rom fileUsing Shared / and /usr
filesystemsAt present there isn't an officially sanctioned way of doing this,
although I have been using a shared /usr
filesystem and individual / filesystems for each
client. If anyone has any suggestions on how to do this cleanly,
please let me and/or the &a.core; know.Compiling netboot for specific setupsNetboot can be compiled to support NE1000/2000 cards by changing
the configuration in
/sys/i386/boot/netboot/Makefile. See the
comments at the top of this file.ISDNLast modified by &a.wlloyd;.A good resource for information on ISDN technology and hardware is
Dan Kegel's ISDN
Page.A quick simple roadmap to ISDN follows:If you live in Europe I suggest you investigate the ISDN card
section.If you are planning to use ISDN primarily to connect to the
Internet with an Internet Provider on a dialup non-dedicated basis,
I suggest you look into Terminal Adapters. This will give you the
most flexibility, with the fewest problems, if you change
providers.If you are connecting two lans together, or connecting to the
Internet with a dedicated ISDN connection, I suggest you consider
the stand alone router/bridge option.Cost is a significant factor in determining what solution you will
choose. The following options are listed from least expensive to most
expensive.ISDN CardsContributed by &a.hm;.This section is really only relevant to ISDN users in countries
where the DSS1/Q.931 ISDN standard is supported.Some growing number of PC ISDN cards are supported under FreeBSD
2.2.x and up by the isdn4bsd driver package. It is still under
development but the reports show that it is successfully used all over
Europe.The latest isdn4bsd version is available from ftp://isdn4bsd@ftp.consol.de/pub/,
the main isdn4bsd ftp site (you have to log in as user
isdn4bsd , give your mail address as the password
and change to the pub directory. Anonymous ftp
as user ftp or anonymous
will not give the desired result).Isdn4bsd allows you to connect to other ISDN routers using either
IP over raw HDLC or by using synchronous PPP. A telephone answering
machine application is also available.Many ISDN PC cards are supported, mostly the ones with a Siemens
ISDN chipset (ISAC/HSCX), support for other chipsets (from Motorola,
Cologne Chip Designs) is currently under development. For an
up-to-date list of supported cards, please have a look at the README
file.In case you are interested in adding support for a different ISDN
protocol, a currently unsupported ISDN PC card or otherwise enhancing
isdn4bsd, please get in touch with hm@kts.org.A majordomo maintained mailing list is available. To join the
- list, send mail to majordomo@FreeBSD.ORG and
+ list, send mail to majordomo@FreeBSD.org and
specify:
subscribe freebsd-isdnin the body of your message.ISDN Terminal AdaptersTerminal adapters(TA), are to ISDN what modems are to regular
phone lines.Most TA's use the standard hayes modem AT command set, and can be
used as a drop in replacement for a modem.A TA will operate basically the same as a modem except connection
and throughput speeds will be much faster than your old modem. You
will need to configure PPP exactly the same
as for a modem setup. Make sure you set your serial speed as high as
possible.The main advantage of using a TA to connect to an Internet
Provider is that you can do Dynamic PPP. As IP address space becomes
more and more scarce, most providers are not willing to provide you
with a static IP anymore. Most standalone routers are not able to
accommodate dynamic IP allocation.TA's completely rely on the PPP daemon that you are running for
their features and stability of connection. This allows you to
upgrade easily from using a modem to ISDN on a FreeBSD machine, if you
already have PPP setup. However, at the same time any problems you
experienced with the PPP program and are going to persist.If you want maximum stability, use the kernel PPP option, not the user-land iijPPP.The following TA's are know to work with FreeBSD.Motorola BitSurfer and Bitsurfer ProAdtranMost other TA's will probably work as well, TA vendors try to make
sure their product can accept most of the standard modem AT command
set.The real problem with external TA's is like modems you need a good
serial card in your computer.You should read the serial ports
section in the handbook for a detailed understanding of serial
devices, and the differences between asynchronous and synchronous
serial ports.A TA running off a standard PC serial port (asynchronous) limits
you to 115.2Kbs, even though you have a 128Kbs connection. To fully
utilize the 128Kbs that ISDN is capable of, you must move the TA to a
synchronous serial card.Do not be fooled into buying an internal TA and thinking you have
avoided the synchronous/asynchronous issue. Internal TA's simply have
a standard PC serial port chip built into them. All this will do, is
save you having to buy another serial cable, and find another empty
electrical socket.A synchronous card with a TA is at least as fast as a standalone
router, and with a simple 386 FreeBSD box driving it, probably more
flexible.The choice of sync/TA vs standalone router is largely a religious
issue. There has been some discussion of this in the mailing lists.
I suggest you search the archives for the
complete discussion.Standalone ISDN Bridges/RoutersISDN bridges or routers are not at all specific to FreeBSD or any
other operating system. For a more complete description of routing
and bridging technology, please refer to a Networking reference
book.In the context of this page, I will use router and bridge
interchangeably.As the cost of low end ISDN routers/bridges comes down, it will
likely become a more and more popular choice. An ISDN router is a
small box that plugs directly into your local Ethernet network(or
card), and manages its own connection to the other bridge/router. It
has all the software to do PPP and other protocols built in.A router will allow you much faster throughput that a standard TA,
since it will be using a full synchronous ISDN connection.The main problem with ISDN routers and bridges is that
interoperability between manufacturers can still be a problem. If you
are planning to connect to an Internet provider, I recommend that you
discuss your needs with them.If you are planning to connect two lan segments together, ie: home
lan to the office lan, this is the simplest lowest maintenance
solution. Since you are buying the equipment for both sides of the
connection you can be assured that the link will work.For example to connect a home computer or branch office network to
a head office network the following setup could be used.Branch office or Home networkNetwork is 10 Base T Ethernet. Connect router to network cable
with AUI/10BT transceiver, if necessary.
---Sun workstation
|
---FreeBSD box
|
---Windows 95 (Do not admit to owning it)
|
Standalone router
|
ISDN BRI lineIf your home/branch office is only one computer you can use a
twisted pair crossover cable to connect to the standalone router
directly.Head office or other lanNetwork is Twisted Pair Ethernet.
-------Novell Server
| H |
| ---Sun
| |
| U ---FreeBSD
| |
| ---Windows 95
| B |
|___---Standalone router
|
ISDN BRI lineOne large advantage of most routers/bridges is that they allow you
to have 2 separate independent PPP connections to
2 separate sites at the same time. This is not
supported on most TA's, except for specific(expensive) models that
have two serial ports. Do not confuse this with channel bonding, MPP
etc.This can be very useful feature, for example if you have an
dedicated internet ISDN connection at your office and would like to
tap into it, but don't want to get another ISDN line at work. A router
at the office location can manage a dedicated B channel connection
(64Kbs) to the internet, as well as a use the other B channel for a
separate data connection. The second B channel can be used for
dialin, dialout or dynamically bond(MPP etc.) with the first B channel
for more bandwidth.An Ethernet bridge will also allow you to transmit more than just
IP traffic, you can also send IPX/SPX or whatever other protocols you
use.
diff --git a/en_US.ISO_8859-1/books/handbook/authors.ent b/en_US.ISO_8859-1/books/handbook/authors.ent
index bc15cc25ad..43fd766942 100644
--- a/en_US.ISO_8859-1/books/handbook/authors.ent
+++ b/en_US.ISO_8859-1/books/handbook/authors.ent
@@ -1,387 +1,387 @@
abial@FreeBSD.org">
ache@FreeBSD.org">
adam@FreeBSD.org">
alc@FreeBSD.org">
alex@FreeBSD.org">
amurai@FreeBSD.org">
andreas@FreeBSD.org">
archie@FreeBSD.org">
asami@FreeBSD.org">
ats@FreeBSD.org">
awebster@pubnix.net">
bde@FreeBSD.org">
billf@FreeBSD.org">
brandon@FreeBSD.org">
brian@FreeBSD.org">
cawimm@FreeBSD.org">
cg@FreeBSD.org">
charnier@FreeBSD.org">
chuckr@glue.umd.edu">
chuckr@FreeBSD.org">
cpiazza@FreeBSD.org">
cracauer@FreeBSD.org">
csgr@FreeBSD.org">
cwt@FreeBSD.org">
danny@FreeBSD.org">
darrenr@FreeBSD.org">
davidn@blaze.net.au">
dbaker@FreeBSD.org">
dburr@FreeBSD.org">
dcs@FreeBSD.org">
deischen@FreeBSD.org">
des@FreeBSD.org">
dfr@FreeBSD.org">
dg@FreeBSD.org">
dick@FreeBSD.org">
dillon@FreeBSD.org">
dima@FreeBSD.org">
dirk@FreeBSD.org">
Dirk.vanGulik@jrc.it">
dt@FreeBSD.org">
dufault@FreeBSD.org">
dwhite@FreeBSD.org">
dyson@FreeBSD.org">
eivind@FreeBSD.org">
ejc@FreeBSD.org">
erich@FreeBSD.org">
faq@FreeBSD.org">
fenner@FreeBSD.org">
flathill@FreeBSD.org">
foxfair@FreeBSD.org">
fsmp@FreeBSD.org">
gallatin@FreeBSD.org">
gclarkii@FreeBSD.org">
gehenna@FreeBSD.org">
gena@NetVision.net.il">
ghelmer@cs.iastate.edu">
gibbs@FreeBSD.org">
gj@FreeBSD.org">
gpalmer@FreeBSD.org">
graichen@FreeBSD.org">
green@FreeBSD.org">
grog@FreeBSD.org">
gryphon@healer.com">
guido@FreeBSD.org">
hanai@FreeBSD.org">
handy@sxt4.physics.montana.edu">
helbig@FreeBSD.org">
hm@FreeBSD.org">
hoek@FreeBSD.org">
hosokawa@FreeBSD.org">
hsu@FreeBSD.org">
imp@FreeBSD.org">
itojun@itojun.org">
iwasaki@FreeBSD.org">
jasone@FreeBSD.org">
jb@cimlogic.com.au">
jdp@FreeBSD.org">
jehamby@lightside.com">
jfieber@FreeBSD.org">
jfitz@FreeBSD.org">
jgreco@FreeBSD.org">
jhay@FreeBSD.org">
jhs@FreeBSD.org">
jkh@FreeBSD.org">
jkoshy@FreeBSD.org">
jlemon@FreeBSD.org">
john@starfire.MN.ORG">
jlrobin@FreeBSD.org">
jmacd@FreeBSD.org">
jmb@FreeBSD.org">
jmg@FreeBSD.org">
jmz@FreeBSD.org">
joerg@FreeBSD.org">
john@FreeBSD.org">
jraynard@FreeBSD.org">
jseger@FreeBSD.org">
julian@FreeBSD.org">
jvh@FreeBSD.org">
karl@FreeBSD.org">
kato@FreeBSD.org">
kelly@plutotech.com">
ken@FreeBSD.org">
kjc@FreeBSD.org">
kris@FreeBSD.org">
kuriyama@FreeBSD.org">
lars@FreeBSD.org">
lile@FreeBSD.org">
ljo@FreeBSD.org">
luoqi@FreeBSD.org">
marcel@FreeBSD.org">
markm@FreeBSD.org">
martin@FreeBSD.org">
max@FreeBSD.org">
mark@vmunix.com">
mbarkah@FreeBSD.org">
mckay@FreeBSD.org">
mckusick@FreeBSD.org">
md@bsc.no">
winter@jurai.net">
mharo@FreeBSD.org">
mjacob@FreeBSD.org">
mks@FreeBSD.org">
motoyuki@FreeBSD.org">
mph@FreeBSD.org">
mpp@FreeBSD.org">
msmith@FreeBSD.org">
nate@FreeBSD.org">
nectar@FreeBSD.org">
newton@FreeBSD.org">
n_hibma@FreeBSD.org">
nik@FreeBSD.org">
nsayer@FreeBSD.org">
nsj@FreeBSD.org">
nyan@FreeBSD.org">
obrien@FreeBSD.org">
olah@FreeBSD.org">
opsys@open-systems.net">
paul@FreeBSD.org">
pb@fasterix.freenix.org">
pds@FreeBSD.org">
peter@FreeBSD.org">
phk@FreeBSD.org">
pjchilds@imforei.apana.org.au">
proven@FreeBSD.org">
pst@FreeBSD.org">
rgrimes@FreeBSD.org">
rhuff@cybercom.net">
ricardag@ag.com.br">
rich@FreeBSD.org">
rnordier@FreeBSD.org">
roberto@FreeBSD.org">
rse@FreeBSD.org">
ru@FreeBSD.org">
sada@FreeBSD.org">
scrappy@FreeBSD.org">
se@FreeBSD.org">
sef@FreeBSD.org">
sheldonh@FreeBSD.org">
shige@FreeBSD.org">
simokawa@FreeBSD.org">
smace@FreeBSD.org">
smpatel@FreeBSD.org">
sos@FreeBSD.org">
stark@FreeBSD.org">
stb@FreeBSD.org">
steve@FreeBSD.org">
swallace@FreeBSD.org">
tanimura@FreeBSD.org">
taoka@FreeBSD.org">
tedm@FreeBSD.org">
tegge@FreeBSD.org">
tg@FreeBSD.org">
thepish@FreeBSD.org">
-tom@freebsd.org">
+tom@FreeBSD.org">
torstenb@FreeBSD.org">
truckman@FreeBSD.org">
ugen@FreeBSD.org">
uhclem@FreeBSD.org">
ulf@FreeBSD.org">
vanilla@FreeBSD.org">
wes@FreeBSD.org">
whiteside@acm.org">
wilko@yedi.iaf.nl">
wlloyd@mpd.ca">
wollman@FreeBSD.org">
wosch@FreeBSD.org">
wpaul@FreeBSD.org">
yokota@FreeBSD.org">
diff --git a/en_US.ISO_8859-1/books/handbook/bibliography/chapter.sgml b/en_US.ISO_8859-1/books/handbook/bibliography/chapter.sgml
index b11aa28161..aeabf86faf 100644
--- a/en_US.ISO_8859-1/books/handbook/bibliography/chapter.sgml
+++ b/en_US.ISO_8859-1/books/handbook/bibliography/chapter.sgml
@@ -1,478 +1,478 @@
BibliographyWhile the manual pages provide the definitive reference for individual
pieces of the FreeBSD operating system, they are notorious for not
illustrating how to put the pieces together to make the whole operating
system run smoothly. For this, there is no substitute for a good book on
UNIX system administration and a good users' manual.Books & Magazines Specific to FreeBSDInternational books &
Magazines:Using
FreeBSD (in Chinese).FreeBSD for PC 98'ers (in Japanese), published by SHUWA System
Co, LTD. ISBN 4-87966-468-5 C3055 P2900E.FreeBSD (in Japanese), published by CUTT. ISBN 4-906391-22-2
C3055 P2400E.Complete Introduction to FreeBSD (in Japanese), published by Shoeisha Co., Ltd. ISBN 4-88135-473-6 P3600E.Personal UNIX Starter Kit FreeBSD (in Japanese), published by ASCII. ISBN 4-7561-1733-3 P3000E.FreeBSD Handbook (Japanese translation), published by ASCII. ISBN 4-7561-1580-2
P3800E.FreeBSD mit Methode (in German), published by Computer und
Literatur Verlag/Vertrieb Hanser, 1998. ISBN 3-932311-31-0.FreeBSD Install and Utilization Manual (in Japanese), published by Mainichi Communications Inc..English language books & Magazines:The
Complete FreeBSD, published by Walnut Creek CDROM.Users' GuidesComputer Systems Research Group, UC Berkeley. 4.4BSD
User's Reference Manual. O'Reilly & Associates,
Inc., 1994. ISBN 1-56592-075-9Computer Systems Research Group, UC Berkeley. 4.4BSD
User's Supplementary Documents. O'Reilly &
Associates, Inc., 1994. ISBN 1-56592-076-7UNIX in a Nutshell. O'Reilly &
Associates, Inc., 1990. ISBN 093717520XMui, Linda. What You Need To Know When You Can't Find
Your UNIX System Administrator. O'Reilly &
Associates, Inc., 1995. ISBN 1-56592-104-6Ohio State
University has written a UNIX
Introductory Course which is available online in HTML and
postscript format.
- Jpman Project, Japan
+ Jpman Project, Japan
FreeBSD Users Group. FreeBSD User's
Reference Manual (Japanese translation). Mainichi Communications
Inc., 1998. ISBN4-8399-0088-4 P3800E.Administrators' GuidesAlbitz, Paul and Liu, Cricket. DNS and
BIND, 2nd Ed. O'Reilly & Associates, Inc., 1997.
ISBN 1-56592-236-0Computer Systems Research Group, UC Berkeley. 4.4BSD
System Manager's Manual. O'Reilly & Associates,
Inc., 1994. ISBN 1-56592-080-5Costales, Brian, et al. Sendmail, 2nd Ed.
O'Reilly & Associates, Inc., 1997. ISBN 1-56592-222-0Frisch, Æleen. Essential System
Administration, 2nd Ed. O'Reilly & Associates,
Inc., 1995. ISBN 1-56592-127-5Hunt, Craig. TCP/IP Network
Administration. O'Reilly & Associates, Inc., 1992.
ISBN 0-937175-82-XNemeth, Evi. UNIX System Administration
Handbook. 2nd Ed. Prentice Hall, 1995. ISBN
0131510517Stern, Hal Managing NFS and NIS O'Reilly
& Associates, Inc., 1991. ISBN 0-937175-75-7
- Jpman Project, Japan
+ Jpman Project, Japan
FreeBSD Users Group. FreeBSD System
Administrator's Manual (Japanese translation). Mainichi Communications
Inc., 1998. ISBN4-8399-0109-0 P3300E.Programmers' GuidesAsente, Paul. X Window System Toolkit.
Digital Press. ISBN 1-55558-051-3Computer Systems Research Group, UC Berkeley. 4.4BSD
Programmer's Reference Manual. O'Reilly &
Associates, Inc., 1994. ISBN 1-56592-078-3Computer Systems Research Group, UC Berkeley. 4.4BSD
Programmer's Supplementary Documents. O'Reilly &
Associates, Inc., 1994. ISBN 1-56592-079-1Harbison, Samuel P. and Steele, Guy L. Jr. C: A
Reference Manual. 4rd ed. Prentice Hall, 1995.
ISBN 0-13-326224-3Kernighan, Brian and Dennis M. Ritchie. The C
Programming Language.. PTR Prentice Hall, 1988.
ISBN 0-13-110362-9Lehey, Greg. Porting UNIX Software.
O'Reilly & Associates, Inc., 1995. ISBN 1-56592-126-7Plauger, P. J. The Standard C Library.
Prentice Hall, 1992. ISBN 0-13-131509-9Stevens, W. Richard. Advanced Programming in the UNIX
Environment. Reading, Mass. : Addison-Wesley, 1992
ISBN 0-201-56317-7Stevens, W. Richard. UNIX Network
Programming. 2nd Ed, PTR Prentice Hall, 1998. ISBN
0-13-490012-XWells, Bill. “Writing Serial Drivers for UNIX”.
Dr. Dobb's Journal. 19(15), December 1994.
pp68-71, 97-99.Operating System InternalsAndleigh, Prabhat K. UNIX System
Architecture. Prentice-Hall, Inc., 1990. ISBN
0-13-949843-5Jolitz, William. “Porting UNIX to the 386”.
Dr. Dobb's Journal. January 1991-July
1992.Leffler, Samuel J., Marshall Kirk McKusick, Michael J Karels and
John Quarterman The Design and Implementation of the
4.3BSD UNIX Operating System. Reading, Mass. :
Addison-Wesley, 1989. ISBN 0-201-06196-1Leffler, Samuel J., Marshall Kirk McKusick, The Design
and Implementation of the 4.3BSD UNIX Operating System: Answer
Book. Reading, Mass. : Addison-Wesley, 1991. ISBN
0-201-54629-9McKusick, Marshall Kirk, Keith Bostic, Michael J Karels, and
John Quarterman. The Design and Implementation of the
4.4BSD Operating System. Reading, Mass. :
Addison-Wesley, 1996. ISBN 0-201-54979-4Stevens, W. Richard. TCP/IP Illustrated, Volume 1:
The Protocols. Reading, Mass. : Addison-Wesley,
1996. ISBN 0-201-63346-9Schimmel, Curt. Unix Systems for Modern
Architectures. Reading, Mass. : Addison-Wesley, 1994.
ISBN 0-201-63338-8Stevens, W. Richard. TCP/IP Illustrated, Volume 3:
TCP for Transactions, HTTP, NNTP and the UNIX Domain
Protocols. Reading, Mass. : Addison-Wesley, 1996.
ISBN 0-201-63495-3Vahalia, Uresh. UNIX Internals -- The New
Frontiers. Prentice Hall, 1996. ISBN
0-13-101908-2Wright, Gary R. and W. Richard Stevens. TCP/IP
Illustrated, Volume 2: The Implementation. Reading,
Mass. : Addison-Wesley, 1995. ISBN 0-201-63354-XSecurity ReferenceCheswick, William R. and Steven M. Bellovin. Firewalls
and Internet Security: Repelling the Wily Hacker.
Reading, Mass. : Addison-Wesley, 1995. ISBN
0-201-63357-4Garfinkel, Simson and Gene Spafford. Practical UNIX
Security. 2nd Ed. O'Reilly & Associates, Inc.,
1996. ISBN 1-56592-148-8Garfinkel, Simson. PGP Pretty Good
Privacy O'Reilly & Associates, Inc., 1995. ISBN
1-56592-098-8Hardware ReferenceAnderson, Don and Tom Shanley. Pentium Processor
System Architecture. 2nd Ed. Reading, Mass. :
Addison-Wesley, 1995. ISBN 0-201-40992-5Ferraro, Richard F. Programmer's Guide to the EGA,
VGA, and Super VGA Cards. 3rd ed. Reading, Mass. :
Addison-Wesley, 1995. ISBN 0-201-62490-7Intel Corporation publishes documentation on their CPUs,
chipsets and standards on their developer web site,
usually as PDF files.Shanley, Tom. 80486 System Architecture.
3rd ed. Reading, Mass. : Addison-Wesley, 1995. ISBN
0-201-40994-1Shanley, Tom. ISA System Architecture.
3rd ed. Reading, Mass. : Addison-Wesley, 1995. ISBN
0-201-40996-8Shanley, Tom. PCI System Architecture.
3rd ed. Reading, Mass. : Addison-Wesley, 1995. ISBN
0-201-40993-3Van Gilluwe, Frank. The Undocumented PC.
Reading, Mass: Addison-Wesley Pub. Co., 1994. ISBN
0-201-62277-7UNIX HistoryLion, John Lion's Commentary on UNIX, 6th Ed. With
Source Code. ITP Media Group, 1996. ISBN
1573980137Raymond, Eric S. The New Hacker's Dictonary, 3rd
edition. MIT Press, 1996. ISBN
0-262-68092-0. Also known as the Jargon
FileSalus, Peter H. A quarter century of UNIX.
Addison-Wesley Publishing Company, Inc., 1994. ISBN
0-201-54777-5Simon Garfinkel, Daniel Weise, Steven Strassmann. The
UNIX-HATERS Handbook. IDG Books Worldwide, Inc.,
1994. ISBN 1-56884-203-1Don Libes, Sandy Ressler Life with UNIX
— special edition. Prentice-Hall, Inc., 1989. ISBN
0-13-536657-7The BSD family tree. 1997. ftp://ftp.FreeBSD.org/pub/FreeBSD/FreeBSD-current/src/share/misc/bsd-family-tree or local on a FreeBSD-current machine.The BSD Release Announcements collection.
1997. http://www.de.FreeBSD.ORG/de/ftp/releases/
+ URL="http://www.de.FreeBSD.org/de/ftp/releases/">http://www.de.FreeBSD.org/de/ftp/releases/
Networked Computer Science Technical Reports
Library. http://www.ncstrl.org/Old BSD releases from the Computer Systems Research
group (CSRG). http://www.mckusick.com/csrg/:
The 4CD set covers all BSD versions from 1BSD to 4.4BSD and
4.4BSD-Lite2 (but not 2.11BSD, unfortunately). As well, the last
disk holds the final sources plus the SCCS files.Magazines and JournalsThe C/C++ Users Journal. R&D
Publications Inc. ISSN 1075-2838Sys Admin — The Journal for UNIX System
Administrators Miller Freeman, Inc., ISSN
1061-2688
diff --git a/en_US.ISO_8859-1/books/handbook/book.sgml b/en_US.ISO_8859-1/books/handbook/book.sgml
index cfff571210..e8432b2364 100644
--- a/en_US.ISO_8859-1/books/handbook/book.sgml
+++ b/en_US.ISO_8859-1/books/handbook/book.sgml
@@ -1,129 +1,129 @@
%man;
%bookinfo;
%chapters;
%authors;
%mailing-lists;
%newsgroups;
]>
FreeBSD HandbookThe FreeBSD Documentation ProjectFebruary 199919951996199719981999The FreeBSD Documentation Project
&bookinfo.legalnotice;
Welcome to FreeBSD! This handbook covers the installation and day
to day use of FreeBSD Release &rel.current;.
This manual is a work in progress and is the work
of many individuals. Many sections do not yet exist and some of those
that do exist need to be updated. If you are interested in helping
with this project, send email to the &a.doc;. The latest version of
this document is always available from the FreeBSD World Wide Web server.
+ URL="http://www.FreeBSD.org/">FreeBSD World Wide Web server.
It may also be downloaded in a variety of formats and compression
options from the FreeBSD FTP
+ url="ftp://ftp.FreeBSD.org/pub/FreeBSD/doc">FreeBSD FTP
server or one of the numerous mirror sites. You may also want to
- Search the
+ Search the
Handbook.Getting Started
&chap.introduction;
&chap.install;
&chap.basics;
&chap.ports
System Administration
&chap.kernelconfig;
&chap.security;
&chap.printing;
&chap.disks;
&chap.backups;
&chap.quotas;
&chap.x11;
&chap.hw;
&chap.l10n;
Network Communications
&chap.serialcomms;
&chap.ppp-and-slip;
&chap.advanced-networking;
&chap.mail;
Advanced topics
&chap.cutting-edge;
&chap.contrib;
&chap.policies;
&chap.kernelopts;
&chap.kerneldebug;
&chap.linuxemu;
&chap.internals;
Appendices
&chap.mirrors;
&chap.bibliography;
&chap.eresources;
&chap.staff;
&chap.pgpkeys;
diff --git a/en_US.ISO_8859-1/books/handbook/contrib/chapter.sgml b/en_US.ISO_8859-1/books/handbook/contrib/chapter.sgml
index e47079d905..71a6956f69 100644
--- a/en_US.ISO_8859-1/books/handbook/contrib/chapter.sgml
+++ b/en_US.ISO_8859-1/books/handbook/contrib/chapter.sgml
@@ -1,5765 +1,5765 @@
Contributing to FreeBSDContributed by &a.jkh;.So you want to contribute something to FreeBSD? That is great! We can
always use the help, and FreeBSD is one of those systems that
relies on the contributions of its user base in order
to survive. Your contributions are not only appreciated, they are vital
to FreeBSD's continued growth!Contrary to what some people might also have you believe, you do not
need to be a hot-shot programmer or a close personal friend of the FreeBSD
core team in order to have your contributions accepted. The FreeBSD
Project's development is done by a large and growing number of
international contributors whose ages and areas of technical expertise
vary greatly, and there is always more work to be done than there are
people available to do it.Since the FreeBSD project is responsible for an entire operating
system environment (and its installation) rather than just a kernel or a
few scattered utilities, our TODO list also spans a
very wide range of tasks, from documentation, beta testing and
presentation to highly specialized types of kernel development. No matter
what your skill level, there is almost certainly something you can do to
help the project!Commercial entities engaged in FreeBSD-related enterprises are also
encouraged to contact us. Need a special extension to make your product
work? You will find us receptive to your requests, given that they are not
too outlandish. Working on a value-added product? Please let us know! We
may be able to work cooperatively on some aspect of it. The free software
world is challenging a lot of existing assumptions about how software is
developed, sold, and maintained throughout its life cycle, and we urge you
to at least give it a second look.What Is NeededThe following list of tasks and sub-projects represents something of
an amalgam of the various core team TODO lists and
user requests we have collected over the last couple of months. Where
possible, tasks have been ranked by degree of urgency. If you are
interested in working on one of the tasks you see here, send mail to the
coordinator listed by clicking on their names. If no coordinator has
been appointed, maybe you would like to volunteer?High priority tasksThe following tasks are considered to be urgent, usually because
they represent something that is badly broken or sorely needed:3-stage boot issues. Overall coordination: &a.hackers;Do WinNT compatible drive tagging so that the 3rd stage
can provide an accurate mapping of BIOS geometries for
disks.Filesystem problems. Overall coordination: &a.fs;Fix the MSDOS file system.Clean up and document the nullfs filesystem code.
Coordinator: &a.eivind;Fix the union file system. Coordinator: &a.dg;Implement Int13 vm86 disk driver. Coordinator:
&a.hackers;New bus architecture. Coordinator: &a.newbus;Port existing ISA drivers to new architecture.Move all interrupt-management code to appropriate parts of
the bus drivers.Port PCI subsystem to new architecture. Coordinator:
&a.dfr;Figure out the right way to handle removable devices and
then use that as a substrate on which PC-Card and CardBus
support can be implemented.Resolve the probe/attach priority issue once and for
all.Move any remaining buses over to the new
architecture.Kernel issues. Overall coordination: &a.hackers;Add more pro-active security infrastructure. Overall
coordination: &a.security;Build something like Tripwire(TM) into the kernel, with a
remote and local part. There are a number of cryptographic
issues to getting this right; contact the coordinator for
details. Coordinator: &a.eivind;Make the entire kernel use suser()
instead of comparing to 0. It is presently using about half
of each. Coordinator: &a.eivind;Split securelevels into different parts, to allow an
administrator to throw away those privileges he can throw
away. Setting the overall securelevel needs to have the same
effect as now, obviously. Coordinator: &a.eivind;Make it possible to upload a list of “allowed
program” to BPF, and then block BPF from accepting other
programs. This would allow BPF to be used e.g. for DHCP,
without allowing an attacker to start snooping the local
network.Update the security checker script. We should at least
grab all the checks from the other BSD derivatives, and add
checks that a system with securelevel increased also have
reasonable flags on the relevant parts. Coordinator:
&a.eivind;Add authorization infrastructure to the kernel, to allow
different authorization policies. Part of this could be done
by modifying suser(). Coordinatory:
&a.eivind;Add code to the NFS layer so that you cannot
chdir("..") out of an NFS partition. E.g.,
/usr is a UFS partition with
/usr/src NFS exported. Now it is
possible to use the NFS filehandle for
/usr/src to get access to
/usr.Medium priority tasksThe following tasks need to be done, but not with any particular
urgency:Full KLD based driver support/Configuration Manager.Write a configuration manager (in the 3rd stage boot?)
that probes your hardware in a sane manner, keeps only the
KLDs required for your hardware, etc.PCMCIA/PCCARD. Coordinators: &a.msmith; and &a.phk;Documentation!Reliable operation of the pcic driver (needs
testing).Recognizer and handler for sio.c
(mostly done).Recognizer and handler for ed.c
(mostly done).Recognizer and handler for ep.c
(mostly done).User-mode recognizer and handler (partially done).Advanced Power Management. Coordinators: &a.msmith; and
&a.phk;APM sub-driver (mostly done).IDE/ATA disk sub-driver (partially done).syscons/pcvt sub-driver.Integration with the PCMCIA/PCCARD drivers
(suspend/resume).Low priority tasksThe following tasks are purely cosmetic or represent such an
investment of work that it is not likely that anyone will get them
done anytime soon:The first N items are from Terry Lambert
terry@lambert.orgNetWare Server (protected mode ODI driver) loader and
subservices to allow the use of ODI card drivers supplied with
network cards. The same thing for NDIS drivers and NetWare SCSI
drivers.An "upgrade system" option that works on Linux boxes instead
of just previous rev FreeBSD boxes.Symmetric Multiprocessing with kernel preemption (requires
kernel preemption).A concerted effort at support for portable computers. This is
somewhat handled by changing PCMCIA bridging rules and power
management event handling. But there are things like detecting
internal vs. external display and picking a different screen
resolution based on that fact, not spinning down the disk if the
machine is in dock, and allowing dock-based cards to disappear
without affecting the machines ability to boot (same issue for
PCMCIA).Smaller tasksMost of the tasks listed in the previous sections require either a
considerable investment of time or an in-depth knowledge of the
FreeBSD kernel (or both). However, there are also many useful tasks
which are suitable for "weekend hackers", or people without
programming skills.If you run FreeBSD-current and have a good Internet
connection, there is a machine current.FreeBSD.org which builds a full
release once a day — every now and again, try and install
the latest release from it and report any failures in the
process.Read the freebsd-bugs mailing list. There might be a
problem you can comment constructively on or with patches you
can test. Or you could even try to fix one of the problems
yourself.Read through the FAQ and Handbook periodically. If anything
is badly explained, out of date or even just completely wrong, let
us know. Even better, send us a fix (SGML is not difficult to
learn, but there is no objection to ASCII submissions).Help translate FreeBSD documentation into your native language
(if not already available) — just send an email to &a.doc;
asking if anyone is working on it. Note that you are not
committing yourself to translating every single FreeBSD document
by doing this — in fact, the documentation most in need of
translation is the installation instructions.Read the freebsd-questions mailing list and &ng.misc
occasionally (or even regularly). It can be very satisfying to
share your expertise and help people solve their problems;
sometimes you may even learn something new yourself! These forums
can also be a source of ideas for things to work on.If you know of any bugfixes which have been successfully
applied to -current but have not been merged into -stable after a
decent interval (normally a couple of weeks), send the committer a
polite reminder.Move contributed software to src/contrib
in the source tree.Make sure code in src/contrib is up to
date.Look for year 2000 bugs (and fix any you find!)Build the source tree (or just part of it) with extra warnings
enabled and clean up the warnings.Fix warnings for ports which do deprecated things like using
gets() or including malloc.h.If you have contributed any ports, send your patches back to
the original author (this will make your life easier when they
bring out the next version)Suggest further tasks for this list!How to ContributeContributions to the system generally fall into one or more of the
following 6 categories:Bug reports and general commentaryAn idea or suggestion of general technical
interest should be mailed to the &a.hackers;. Likewise, people with
an interest in such things (and a tolerance for a
high volume of mail!) may subscribe to the
hackers mailing list by sending mail to &a.majordomo;. See mailing lists for more information
about this and other mailing lists.If you find a bug or are submitting a specific change, please
report it using the &man.send-pr.1; program or its WEB-based
equivalent. Try to fill-in each field of the bug report.
Unless they exceed 65KB, include any patches directly in the report.
When including patches, do not use cut-and-paste
because cut-and-paste turns tabs into spaces and makes them unusable.
Consider compressing patches and using &man.uuencode.1; if they exceed
20KB. Upload very large submissions to ftp.FreeBSD.org:/pub/FreeBSD/incoming/.
+ url="ftp://ftp.FreeBSD.org/pub/FreeBSD/incoming/">ftp.FreeBSD.org:/pub/FreeBSD/incoming/.
After filing a report, you should receive confirmation along with
a tracking number. Keep this tracking number so that you can update
us with details about the problem by sending mail to
- bug-followup@FreeBSD.ORG. Use the number as the
+ bug-followup@FreeBSD.org. Use the number as the
message subject, e.g. "Re: kern/3377". Additional
information for any bug report should be submitted this way.If you do not receive confirmation in a timely fashion (3 days to
a week, depending on your email connection) or are, for some reason,
unable to use the &man.send-pr.1; command, then you may ask
someone to file it for you by sending mail to the &a.bugs;.Changes to the documentationChanges to the documentation are overseen by the &a.doc;. Send
submissions and changes (even small ones are welcome!) using
send-pr as described in Bug Reports and General
Commentary.Changes to existing source codeAn addition or change to the existing source code is a somewhat
trickier affair and depends a lot on how far out of date you are with
the current state of the core FreeBSD development. There is a special
on-going release of FreeBSD known as “FreeBSD-current”
which is made available in a variety of ways for the convenience of
developers working actively on the system. See Staying current with FreeBSD for more
information about getting and using FreeBSD-current.Working from older sources unfortunately means that your changes
may sometimes be too obsolete or too divergent for easy re-integration
into FreeBSD. Chances of this can be minimized somewhat by
subscribing to the &a.announce; and the &a.current; lists, where
discussions on the current state of the system take place.Assuming that you can manage to secure fairly up-to-date sources
to base your changes on, the next step is to produce a set of diffs to
send to the FreeBSD maintainers. This is done with the &man.diff.1;
command, with the “context diff” form
being preferred. For example:&prompt.user; diff -c oldfile newfile
or
&prompt.user; diff -c -r olddir newdir
would generate such a set of context diffs for the given source file
or directory hierarchy. See the man page for &man.diff.1; for more
details.Once you have a set of diffs (which you may test with the
&man.patch.1; command), you should submit them for inclusion with
FreeBSD. Use the &man.send-pr.1; program as described in Bug Reports and General Commentary.
Do not just send the diffs to the &a.hackers; or
they will get lost! We greatly appreciate your submission (this is a
volunteer project!); because we are busy, we may not be able to
address it immediately, but it will remain in the pr database until we
do.If you feel it appropriate (e.g. you have added, deleted, or
renamed files), bundle your changes into a tar file
and run the &man.uuencode.1; program on it. Shar archives are also
welcome.If your change is of a potentially sensitive nature, e.g. you are
unsure of copyright issues governing its further distribution or you
are simply not ready to release it without a tighter review first,
then you should send it to &a.core; directly rather than submitting it
with &man.send-pr.1;. The core mailing list reaches a much smaller
group of people who do much of the day-to-day work on FreeBSD. Note
that this group is also very busy and so you
should only send mail to them where it is truly necessary.Please refer to man 9 intro and man 9
style for some information on coding style. We would
appreciate it if you were at least aware of this information before
submitting code.New code or major value-added packagesIn the rare case of a significant contribution of a large body
work, or the addition of an important new feature to FreeBSD, it
becomes almost always necessary to either send changes as uuencode'd
tar files or upload them to our ftp site ftp://ftp.FreeBSD.ORG/pub/FreeBSD/incoming.
+ URL="ftp://ftp.FreeBSD.org/pub/FreeBSD/incoming">ftp://ftp.FreeBSD.org/pub/FreeBSD/incoming.
When working with large amounts of code, the touchy subject of
copyrights also invariably comes up. Acceptable copyrights for code
included in FreeBSD are:The BSD copyright. This copyright is most preferred due to
its “no strings attached” nature and general
attractiveness to commercial enterprises. Far from discouraging
such commercial use, the FreeBSD Project actively encourages such
participation by commercial interests who might eventually be
inclined to invest something of their own into FreeBSD.The GNU Public License, or “GPL”. This license is
not quite as popular with us due to the amount of extra effort
demanded of anyone using the code for commercial purposes, but
given the sheer quantity of GPL'd code we currently require
(compiler, assembler, text formatter, etc) it would be silly to
refuse additional contributions under this license. Code under
the GPL also goes into a different part of the tree, that being
/sys/gnu or
/usr/src/gnu, and is therefore easily
identifiable to anyone for whom the GPL presents a problem.Contributions coming under any other type of copyright must be
carefully reviewed before their inclusion into FreeBSD will be
considered. Contributions for which particularly restrictive
commercial copyrights apply are generally rejected, though the authors
are always encouraged to make such changes available through their own
channels.To place a “BSD-style” copyright on your work, include
the following text at the very beginning of every source code file you
wish to protect, replacing the text between the %%
with the appropriate information.
Copyright (c) %%proper_years_here%%
%%your_name_here%%, %%your_state%% %%your_zip%%.
All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions
are met:
1. Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer as
the first lines of this file unmodified.
2. Redistributions in binary form 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 SOFTWARE IS PROVIDED BY %%your_name_here%% ``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 %%your_name_here%% 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 SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
$Id$For your convenience, a copy of this text can be found in
/usr/share/examples/etc/bsd-style-copyright.Money, Hardware or Internet accessWe are always very happy to accept donations to further the cause
of the FreeBSD Project and, in a volunteer effort like ours, a little
can go a long way! Donations of hardware are also very important to
expanding our list of supported peripherals since we generally lack
the funds to buy such items ourselves.Donating fundsWhile the FreeBSD Project is not a 501(c)(3) (charitable)
corporation and hence cannot offer special tax incentives for any
donations made, any such donations will be gratefully accepted on
behalf of the project by FreeBSD, Inc.FreeBSD, Inc. was founded in early 1995 by &a.jkh; and &a.dg;
with the goal of furthering the aims of the FreeBSD Project and
giving it a minimal corporate presence. Any and all funds donated
(as well as any profits that may eventually be realized by FreeBSD,
Inc.) will be used exclusively to further the project's
goals.Please make any checks payable to FreeBSD, Inc., sent in care of
the following address:FreeBSD, Inc.c/o Jordan Hubbard4041 Pike Lane, Suite FConcordCA, 94520(currently using the Walnut Creek CDROM address until a PO box
can be opened)Wire transfers may also be sent directly to:Bank Of AmericaConcord Main OfficeP.O. Box 37176San FranciscoCA, 94137-5176Routing #: 121-000-358Account #: 01411-07441 (FreeBSD, Inc.)Any correspondence related to donations should be sent to &a.jkh,
either via email or to the FreeBSD, Inc. postal address given above.
If you do not wish to be listed in our donors section, please specify this when
making your donation. Thanks!Donating hardwareDonations of hardware in any of the 3 following categories are
also gladly accepted by the FreeBSD Project:General purpose hardware such as disk drives, memory or
complete systems should be sent to the FreeBSD, Inc. address
listed in the donating funds
section.Hardware for which ongoing compliance testing is desired.
We are currently trying to put together a testing lab of all
components that FreeBSD supports so that proper regression
testing can be done with each new release. We are still lacking
many important pieces (network cards, motherboards, etc) and if
you would like to make such a donation, please contact &a.dg;
for information on which items are still required.Hardware currently unsupported by FreeBSD for which you
would like to see such support added. Please contact the
&a.core; before sending such items as we will need to find a
developer willing to take on the task before we can accept
delivery of new hardware.Donating Internet accessWe can always use new mirror sites for FTP, WWW or
cvsup. If you would like to be such a mirror,
please contact the FreeBSD project administrators
- admin@FreeBSD.ORG for more information.
+ admin@FreeBSD.org for more information.
Donors GalleryThe FreeBSD Project is indebted to the following donors and would
like to publically thank them here!Contributors to the central server
project:The following individuals and businesses made it possible for
the FreeBSD Project to build a new central server machine to
eventually replace freefall.FreeBSD.org
by donating the following items:&a.mbarkah and his employer,
Hemisphere Online, donated a Pentium Pro
(P6) 200Mhz CPUASA
Computers donated a Tyan 1662
motherboard.Joe McGuckin joe@via.net of ViaNet Communications donated
a Kingston ethernet controller.Jack O'Neill jack@diamond.xtalwind.net
donated an NCR 53C875 SCSI controller
card.Ulf Zimmermann ulf@Alameda.net of Alameda Networks donated
128MB of memory, a 4 Gb disk
drive and the case.Direct funding:The following individuals and businesses have generously
contributed direct funding to the project:Annelise Anderson
ANDRSN@HOOVER.STANFORD.EDU&a.dillonEpilogue Technology
Corporation&a.sefDon Scott WildeGianmarco Giovannelli
gmarco@masternet.itJosef C. Grosch joeg@truenorth.orgRobert T. Morris&a.chuckrKenneth P. Stox ken@stox.sa.enteract.com of
Imaginary Landscape,
LLC.Dmitry S. Kohmanyuk dk@dog.farm.orgLaser5 of Japan
(a portion of the profits from sales of their various FreeBSD
CD-ROMs.Fuki Shuppan
Publishing Co. donated a portion of their profits from
Hajimete no FreeBSD (FreeBSD, Getting
started) to the FreeBSD and XFree86 projects.ASCII Corp.
donated a portion of their profits from several FreeBSD-related
books to the FreeBSD project.Yokogawa Electric
Corp has generously donated significant funding to the
FreeBSD project.BuffNETPacific
SolutionsSiemens AG
via Andre
AlbsmeierChris SilvaHardware contributors:The following individuals and businesses have generously
contributed hardware for testing and device driver
development/support:Walnut Creek CDROM for providing the Pentium P5-90 and
486/DX2-66 EISA/VL systems that are being used for our
development work, to say nothing of the network access and other
donations of hardware resources.TRW Financial Systems, Inc. provided 130 PCs, three 68 GB
fileservers, twelve Ethernets, two routers and an ATM switch for
debugging the diskless code.Dermot McDonnell donated the Toshiba XM3401B CDROM drive
currently used in freefall.&a.chuck; contributed his floppy tape streamer for
experimental work.Larry Altneu larry@ALR.COM, and &a.wilko;,
provided Wangtek and Archive QIC-02 tape drives in order to
improve the wt driver.Ernst Winter ewinter@lobo.muc.de contributed
a 2.88 MB floppy drive to the project. This will hopefully
increase the pressure for rewriting the floppy disk driver.
;-)Tekram
Technologies sent one each of their DC-390, DC-390U
and DC-390F FAST and ULTRA SCSI host adapter cards for
regression testing of the NCR and AMD drivers with their cards.
They are also to be applauded for making driver sources for free
operating systems available from their FTP server ftp://ftp.tekram.com/scsi/FreeBSD.Larry M. Augustin contributed not only a
Symbios Sym8751S SCSI card, but also a set of data books,
including one about the forthcoming Sym53c895 chip with Ultra-2
and LVD support, and the latest programming manual with
information on how to safely use the advanced features of the
latest Symbios SCSI chips. Thanks a lot!Christoph Kukulies kuku@FreeBSD.org donated
an FX120 12 speed Mitsumi CDROM drive for IDE CDROM driver
development.Special contributors:Walnut Creek CDROM
has donated almost more than we can say (see the history document for more details).
In particular, we would like to thank them for the original
hardware used for freefall.FreeBSD.ORG, our primary
+ role="fqdn">freefall.FreeBSD.org, our primary
development machine, and for thud.FreeBSD.ORG, a testing and build
+ role="fqdn">thud.FreeBSD.org, a testing and build
box. We are also indebted to them for funding various
contributors over the years and providing us with unrestricted
use of their T1 connection to the Internet.The interface
business GmbH, Dresden has been patiently supporting
&a.joerg; who has often preferred FreeBSD work over paywork, and
used to fall back to their (quite expensive) EUnet Internet
connection whenever his private connection became too slow or
flakey to work with it...Berkeley Software Design,
Inc. has contributed their DOS emulator code to the
remaining BSD world, which is used in the
doscmd command.Core Team AlumniThe following people were members of the FreeBSD core team during
the periods indicated. We thank them for their past efforts in the
service of the FreeBSD project.In rough chronological order:&a.guido (1995 - 1999)&a.dyson (1993 - 1998)&a.nate (1992 - 1996)&a.rgrimes (1992 - 1995)Andreas Schulz (1992 - 1995)&a.csgr (1993 - 1995)&a.paul (1992 - 1995)&a.smace (1993 - 1994)Andrew Moore (1993 - 1994)Christoph Robitschko (1993 - 1994)J. T. Conklin (1992 - 1993)Derived Software ContributorsThis software was originally derived from William F. Jolitz's 386BSD
release 0.1, though almost none of the original 386BSD specific code
remains. This software has been essentially re-implemented from the
4.4BSD-Lite release provided by the Computer Science Research Group
(CSRG) at the University of California, Berkeley and associated academic
contributors.There are also portions of NetBSD and OpenBSD that have been
integrated into FreeBSD as well, and we would therefore like to thank
all the contributors to NetBSD and OpenBSD for their work.Additional FreeBSD Contributors(in alphabetical order by first name):ABURAYA Ryushirou rewsirow@ff.iij4u.or.jpAMAGAI Yoshiji amagai@nue.orgAaron Bornstein aaronb@j51.comAaron Smith aaron@mutex.orgAchim Patzner ap@noses.comAda T Lim ada@bsd.orgAdam Baran badam@mw.mil.plAdam Glass glass@postgres.berkeley.eduAdam McDougall mcdouga9@egr.msu.eduAdrian Colley aecolley@ois.ieAdrian Hall adrian@ibmpcug.co.ukAdrian Mariano adrian@cam.cornell.eduAdrian Steinmann ast@marabu.chAdam Strohl troll@digitalspark.netAdrian T. Filipi-Martin
atf3r@agate.cs.virginia.eduAjit Thyagarajan unknownAkio Morita
amorita@meadow.scphys.kyoto-u.ac.jpAkira SAWADA unknownAkira Watanabe
akira@myaw.ei.meisei-u.ac.jpAkito Fujita fujita@zoo.ncl.omron.co.jpAlain Kalker
A.C.P.M.Kalker@student.utwente.nlAlan Bawden alan@curry.epilogue.comAlec Wolman wolman@cs.washington.eduAled Morris aledm@routers.co.ukAlex garbanzo@hooked.netAlex D. Chen
dhchen@Canvas.dorm7.nccu.edu.twAlex G. Bulushev bag@demos.suAlex Le Heux alexlh@funk.orgAlex Perel veers@disturbed.netAlexander B. Povolotsky tarkhil@mgt.msk.ruAlexander Leidinger
netchild@wurzelausix.CS.Uni-SB.DEAlexander Langer alex@cichlids.comAlexandre Snarskii snar@paranoia.ruAlfred Perlstein bright@rush.netAlistair G. Crooks agc@uts.amdahl.comAllan Saddi asaddi@philosophysw.comAllen Campbell allenc@verinet.comAmakawa Shuhei amakawa@hoh.t.u-tokyo.ac.jpAmancio Hasty hasty@star-gate.comAmir Farah amir@comtrol.comAmy Baron amee@beer.orgAnatoly A. Orehovsky tolik@mpeks.tomsk.suAnatoly Vorobey mellon@pobox.comAnders Nordby nickerne@nome.noAnders Thulin Anders.X.Thulin@telia.seAndras Olah olah@cs.utwente.nlAndre Albsmeier
Andre.Albsmeier@mchp.siemens.deAndre Oppermann andre@pipeline.chAndreas Haakh ah@alman.robin.deAndreas Kohout shanee@rabbit.augusta.deAndreas Lohr andreas@marvin.RoBIN.deAndreas Schulz unknownAndreas Wetzel mickey@deadline.snafu.deAndreas Wrede andreas@planix.comAndres Vega Garcia unknownAndrew Atrens atreand@statcan.caAndrew Boothman andrew@cream.orgAndrew Gillham gillham@andrews.eduAndrew Gordon andrew.gordon@net-tel.co.ukAndrew Herbert andrew@werple.apana.org.auAndrew J. Korty ajk@purdue.eduAndrew L. Moore alm@mclink.comAndrew McRae amcrae@cisco.comAndrew Stevenson andrew@ugh.net.auAndrew Timonin tim@pool1.convey.ruAndrew V. Stesin stesin@elvisti.kiev.uaAndrew Webster awebster@dataradio.comAndrey Zakhvatov andy@icc.surw.chel.suAndy Farkas andyf@speednet.com.auAndy Valencia ajv@csd.mot.comAndy Whitcroft andy@sarc.city.ac.ukAngelo Turetta ATuretta@stylo.itAnthony C. Chavez magus@xmission.comAnthony Yee-Hang Chan yeehang@netcom.comAnton Berezin tobez@plab.ku.dkAntti Kaipila anttik@iki.fiAre Bryne are.bryne@communique.noAri Suutari ari@suutari.iki.fiArjan de Vet devet@IAEhv.nlArne Henrik Juul arnej@Lise.Unit.NOAssar Westerlund assar@sics.seAtsushi Furuta furuta@sra.co.jpAtsushi Murai amurai@spec.co.jpBakul Shah bvs@bitblocks.comBarry Bierbauch pivrnec@vszbr.czBarry Lustig barry@ictv.comBen Hutchinson benhutch@xfiles.org.ukBen Jackson unknownBen Smithurst ben@scientia.demon.co.ukBen Walter bwalter@itachi.swcp.comBenjamin Lewis bhlewis@gte.netBernd Rosauer br@schiele-ct.deBill Kish kish@osf.orgBill Trost trost@cloud.rain.comBlaz Zupan blaz@amis.netBob Van Valzah Bob@whitebarn.comBob Willcox bob@luke.pmr.comBoris Staeblow balu@dva.in-berlin.deBoyd R. Faulkner faulkner@asgard.bga.comBrad Karp karp@eecs.harvard.eduBradley Dunn bradley@dunn.orgBrandon Fosdick bfoz@glue.umd.eduBrandon Gillespie brandon@roguetrader.com&a.wlloydBob Wilcox bob@obiwan.uucpBoyd Faulkner faulkner@mpd.tandem.comBrent J. Nordquist bjn@visi.comBrett Lymn blymn@mulga.awadi.com.AUBrett Taylor
brett@peloton.physics.montana.eduBrian Campbell brianc@pobox.comBrian Clapper bmc@willscreek.comBrian Cully shmit@kublai.comBrian Handy
handy@lambic.space.lockheed.comBrian Litzinger brian@MediaCity.comBrian McGovern bmcgover@cisco.comBrian Moore ziff@houdini.eecs.umich.eduBrian R. Haug haug@conterra.comBrian Tao taob@risc.orgBrion Moss brion@queeg.comBruce A. Mah bmah@ca.sandia.govBruce Albrecht bruce@zuhause.mn.orgBruce Gingery bgingery@gtcs.comBruce J. Keeler loodvrij@gridpoint.comBruce Murphy packrat@iinet.net.auBruce Walter walter@fortean.comCarey Jones mcj@acquiesce.orgCarl Fongheiser cmf@netins.netCarl Mascott cmascott@world.std.comCasper casper@acc.amCastor Fu castor@geocast.comCejka Rudolf cejkar@dcse.fee.vutbr.czChain Lee chain@110.netCharles Hannum mycroft@ai.mit.eduCharles Henrich henrich@msu.eduCharles Mott cmott@srv.netCharles Owens owensc@enc.eduChet Ramey chet@odin.INS.CWRU.EduChia-liang Kao clkao@CirX.ORGChiharu Shibata chi@bd.mbn.or.jpChip Norkus unknownChoi Jun Ho junker@jazz.snu.ac.krChris Costello chris@calldei.comChris Csanady cc@tarsier.ca.sandia.govChris Dabrowski chris@vader.orgChris Dillon cdillon@wolves.k12.mo.usChris Shenton
cshenton@angst.it.hq.nasa.govChris Stenton jacs@gnome.co.ukChris Timmons skynyrd@opus.cts.cwu.eduChris Torek torek@ee.lbl.govChristian Gusenbauer
cg@fimp01.fim.uni-linz.ac.atChristian Haury Christian.Haury@sagem.frChristian Weisgerber
naddy@bigeye.rhein-neckar.deChristoph P. Kukulies kuku@FreeBSD.orgChristoph Robitschko
chmr@edvz.tu-graz.ac.atChristoph Weber-Fahr
wefa@callcenter.systemhaus.netChristopher G. Demetriou
cgd@postgres.berkeley.eduChristopher T. Johnson
cjohnson@neunacht.netgsi.comChrisy Luke chrisy@flix.netChuck Hein chein@cisco.comClive Lin clive@CiRX.ORGColman Reilly careilly@tcd.ieConrad Sabatier conrads@neosoft.comCoranth Gryphon gryphon@healer.comCornelis van der Laan
nils@guru.ims.uni-stuttgart.deCove Schneider cove@brazil.nbn.comCraig Leres leres@ee.lbl.govCraig Loomis unknownCraig Metz cmetz@inner.netCraig Spannring cts@internetcds.comCraig Struble cstruble@vt.eduCristian Ferretti cfs@riemann.mat.puc.clCurt Mayer curt@toad.comCy Schubert cschuber@uumail.gov.bc.caDI. Christian Gusenbauer
cg@scotty.edvz.uni-linz.ac.atDai Ishijima ishijima@tri.pref.osaka.jpDamian Hamill damian@cablenet.netDan Cross tenser@spitfire.ecsel.psu.eduDan Lukes dan@obluda.czDan Nelson dnelson@emsphone.comDan Walters hannibal@cyberstation.netDaniel M. Eischen
deischen@iworks.InterWorks.orgDaniel O'Connor doconnor@gsoft.com.auDaniel Poirot poirot@aio.jsc.nasa.govDaniel Rock rock@cs.uni-sb.deDanny Egen unknownDanny J. Zerkel dzerkel@phofarm.comDarren Reed avalon@coombs.anu.edu.auDave Adkins adkin003@tc.umn.eduDave Andersen angio@aros.netDave Blizzard dblizzar@sprynet.comDave Bodenstab imdave@synet.netDave Burgess burgess@hrd769.brooks.af.milDave Chapeskie dchapes@ddm.on.caDave Cornejo dave@dogwood.comDave Edmondson davided@sco.comDave Glowacki dglo@ssec.wisc.eduDave Marquardt marquard@austin.ibm.comDave Tweten tweten@FreeBSD.orgDavid A. Adkins adkin003@tc.umn.eduDavid A. Bader dbader@umiacs.umd.eduDavid Borman dab@bsdi.comDavid Dawes dawes@XFree86.orgDavid Filo filo@yahoo.comDavid Holland dholland@eecs.harvard.eduDavid Holloway daveh@gwythaint.tamis.comDavid Horwitt dhorwitt@ucsd.eduDavid Hovemeyer daveho@infocom.comDavid Jones dej@qpoint.torfree.netDavid Kelly dkelly@tomcat1.tbe.comDavid Kulp dkulp@neomorphic.comDavid L. Nugent davidn@blaze.net.auDavid Leonard d@scry.dstc.edu.auDavid Malone dwmalone@maths.tcd.ieDavid Muir Sharnoff muir@idiom.comDavid S. Miller davem@jenolan.rutgers.eduDavid Wolfskill dhw@whistle.comDean Gaudet dgaudet@arctic.orgDean Huxley dean@fsa.caDenis Fortin unknownDennis Glatting
dennis.glatting@software-munitions.comDenton Gentry denny1@home.comDerek Inksetter derek@saidev.comDima Sivachenko dima@Chg.RUDirk Keunecke dk@panda.rhein-main.deDirk Nehrling nerle@pdv.deDmitry Khrustalev dima@xyzzy.machaon.ruDmitry Kohmanyuk dk@farm.orgDom Mitchell dom@myrddin.demon.co.ukDominik Brettnacher domi@saargate.deDon Croyle croyle@gelemna.ft-wayne.in.us&a.whiteside;Don Morrison dmorrisn@u.washington.eduDon Yuniskis dgy@rtd.comDonald Maddox dmaddox@conterra.comDoug Barton studded@dal.netDouglas Ambrisko ambrisko@whistle.comDouglas Carmichael dcarmich@mcs.comDouglas Crosher dtc@scrooge.ee.swin.oz.auDrew Derbyshire ahd@kew.comDuncan Barclay dmlb@ragnet.demon.co.ukDustin Sallings dustin@spy.netEckart "Isegrim" Hofmann
Isegrim@Wunder-Nett.orgEd Gold
vegold01@starbase.spd.louisville.eduEd Hudson elh@p5.spnet.comEdward Wang edward@edcom.comEdwin Groothus edwin@nwm.wan.philips.comEiji-usagi-MATSUmoto usagi@clave.gr.jpELISA Font ProjectElmar Bartel
bartel@informatik.tu-muenchen.deEric A. Griff eagriff@global2000.netEric Blood eblood@cs.unr.eduEric J. Haug ejh@slustl.slu.eduEric J. Schwertfeger eric@cybernut.comEric L. Hernes erich@lodgenet.comEric P. Scott eps@sirius.comEric Sprinkle eric@ennovatenetworks.comErich Stefan Boleyn erich@uruk.orgErik E. Rantapaa rantapaa@math.umn.eduErik H. Moe ehm@cris.comErnst Winter ewinter@lobo.muc.deEspen Skoglund espensk@stud.cs.uit.no>Eugene M. Kim astralblue@usa.netEugene Radchenko genie@qsar.chem.msu.suEvan Champion evanc@synapse.netFaried Nawaz fn@Hungry.COMFlemming Jacobsen fj@tfs.comFong-Ching Liaw fong@juniper.netFrancis M J Hsieh mjshieh@life.nthu.edu.twFrank Bartels knarf@camelot.deFrank Chen Hsiung Chan
frankch@waru.life.nthu.edu.twFrank Durda IV uhclem@nemesis.lonestar.orgFrank MacLachlan fpm@n2.netFrank Nobis fn@Radio-do.deFrank Volf volf@oasis.IAEhv.nlFrank ten Wolde franky@pinewood.nlFrank van der Linden frank@fwi.uva.nlFred Cawthorne fcawth@jjarray.umn.eduFred Gilham gilham@csl.sri.comFred Templin templin@erg.sri.comFrederick Earl Gray fgray@rice.eduFUJIMOTO Kensaku
fujimoto@oscar.elec.waseda.ac.jpFUJISHIMA Satsuki k5@respo.or.jpFURUSAWA Kazuhisa
furusawa@com.cs.osakafu-u.ac.jpGabor Kincses gabor@acm.orgGabor Zahemszky zgabor@CoDe.huG. Adam Stanislavadam@whizkidtech.netGarance A Drosehn gad@eclipse.its.rpi.eduGareth McCaughan gjm11@dpmms.cam.ac.ukGary A. Browning gab10@griffcd.amdahl.comGary Howland gary@hotlava.comGary J. garyj@rks32.pcs.dec.comGary Kline kline@thought.orgGaspar Chilingarov nightmar@lemming.acc.amGea-Suan Lin gsl@tpts4.seed.net.twGeoff Rehmet csgr@alpha.ru.ac.zaGeorg Wagner georg.wagner@ubs.comGerard Roudier groudier@club-internet.frGianmarco Giovannelli
gmarco@giovannelli.itGil Kloepfer Jr. gil@limbic.ssdl.comGilad Rom rom_glsa@ein-hashofet.co.ilGinga Kawaguti
ginga@amalthea.phys.s.u-tokyo.ac.jpGiles Lean giles@nemeton.com.auGlen Foster gfoster@gfoster.comGlenn Johnson gljohns@bellsouth.netGodmar Back gback@facility.cs.utah.eduGoran Hammarback goran@astro.uu.seGord Matzigkeit gord@enci.ucalgary.caGordon Greeff gvg@uunet.co.zaGraham Wheeler gram@cdsec.comGreg A. Woods woods@zeus.leitch.comGreg Ansley gja@ansley.comGreg Troxel gdt@ir.bbn.comGreg Ungerer gerg@stallion.oz.auGregory Bond gnb@itga.com.auGregory D. Moncreaff
moncrg@bt340707.res.ray.comGuy Harris guy@netapp.comGuy Helmer ghelmer@cs.iastate.eduHAMADA Naoki hamada@astec.co.jpHONDA Yasuhiro
honda@kashio.info.mie-u.ac.jpHOSOBUCHI Noriyuki hoso@buchi.tama.or.jpHannu Savolainen hannu@voxware.pp.fiHans Huebner hans@artcom.deHans Petter Bieker zerium@webindex.noHans Zuidam hans@brandinnovators.comHarlan Stenn Harlan.Stenn@pfcs.comHarold Barker hbarker@dsms.comHavard Eidnes
Havard.Eidnes@runit.sintef.noHeikki Suonsivu hsu@cs.hut.fiHeiko W. Rupp unknownHelmut F. Wirth hfwirth@ping.atHenrik Vestergaard Draboel
hvd@terry.ping.dkHerb Peyerl hpeyerl@NetBSD.orgHideaki Ohmon ohmon@tom.sfc.keio.ac.jpHidekazu Kuroki hidekazu@cs.titech.ac.jpHideki Yamamoto hyama@acm.orgHideyuki Suzuki
hideyuki@sat.t.u-tokyo.ac.jpHirayama Issei iss@mail.wbs.ne.jpHiroaki Sakai sakai@miya.ee.kagu.sut.ac.jpHiroharu Tamaru tamaru@ap.t.u-tokyo.ac.jpHironori Ikura hikura@kaisei.orgHiroshi Nishikawa nis@pluto.dti.ne.jpHiroya Tsubakimoto unknownHolger Veit Holger.Veit@gmd.deHolm Tiffe holm@geophysik.tu-freiberg.deHorance Chou
horance@freedom.ie.cycu.edu.twHorihiro Kumagai kuma@jp.FreeBSD.orgHOTARU-YA hotaru@tail.netHr.Ladavac lada@ws2301.gud.siemens.co.atHubert Feyrer hubertf@NetBSD.ORGHugh F. Mahon hugh@nsmdserv.cnd.hp.comHugh Mahon h_mahon@fc.hp.comHung-Chi Chu hcchu@r350.ee.ntu.edu.twIMAI Takeshi take-i@ceres.dti.ne.jpIMAMURA Tomoaki
tomoak-i@is.aist-nara.ac.jpIan Dowse iedowse@maths.tcd.ieIan Holland ianh@tortuga.com.auIan Struble ian@broken.netIan Vaudrey i.vaudrey@bigfoot.comIgor Khasilev igor@jabber.paco.odessa.uaIgor Roshchin str@giganda.komkon.orgIgor Sviridov siac@ua.netIgor Vinokurov igor@zynaps.ruIkuo Nakagawa ikuo@isl.intec.co.jpIlya V. Komarov mur@lynx.ruIssei Suzuki issei@jp.FreeBSD.orgItsuro Saito saito@miv.t.u-tokyo.ac.jpJ. Bryant jbryant@argus.flash.netJ. David Lowe lowe@saturn5.comJ. Han hjh@best.comJ. Hawk jhawk@MIT.EDUJ.T. Conklin jtc@cygnus.comJ.T. Jang keith@email.gcn.net.twJack jack@zeus.xtalwind.netJacob Bohn Lorensen jacob@jblhome.ping.mkJagane D Sundar jagane@netcom.comJake Burkholder jake@checker.orgJake Hamby jehamby@lightside.comJames Clark jjc@jclark.comJames D. Stewart jds@c4systm.comJames Jegers jimj@miller.cs.uwm.eduJames Raynard
fhackers@jraynard.demon.co.ukJames T. Liu jtliu@phlebas.rockefeller.eduJames da Silva jds@cs.umd.eduJan Conard
charly@fachschaften.tu-muenchen.deJan Koum jkb@FreeBSD.orgJanick Taillandier
Janick.Taillandier@ratp.frJanusz Kokot janek@gaja.ipan.lublin.plJarle Greipsland jarle@idt.unit.noJason Garman init@risen.orgJason Thorpe thorpej@NetBSD.orgJason Wright jason@OpenBSD.orgJason Young
doogie@forbidden-donut.anet-stl.comJavier Martin Rueda jmrueda@diatel.upm.esJay Fenlason hack@datacube.comJaye Mathisen mrcpu@cdsnet.netJeff Bartig jeffb@doit.wisc.eduJeff Forys jeff@forys.cranbury.nj.usJeff Kletsky Jeff@Wagsky.comJeffrey Evans evans@scnc.k12.mi.usJeffrey Wheat jeff@cetlink.netJens Schweikhardt schweikh@noc.dfn.dJeremy Allison jallison@whistle.comJeremy Chatfield jdc@xinside.comJeremy Lea reg@shale.csir.co.zaJeremy Prior unknownJeroen Ruigrok/Asmodai asmodai@wxs.nlJesse Rosenstock jmr@ugcs.caltech.eduJian-Da Li jdli@csie.nctu.edu.twJim Babb babb@FreeBSD.orgJim Binkley jrb@cs.pdx.eduJim Carroll jim@carroll.comJim Flowers jflowers@ezo.netJim Leppek jleppek@harris.comJim Lowe james@cs.uwm.eduJim Mattson jmattson@sonic.netJim Mercer jim@komodo.reptiles.orgJim Mock jim@phrantic.phear.netJim Wilson wilson@moria.cygnus.comJimbo Bahooli
griffin@blackhole.iceworld.orgJin Guojun jin@george.lbl.govJoachim Kuebart unknownJoao Carlos Mendes Luis jonny@jonny.eng.brJochen Pohl jpo.drs@sni.deJoe "Marcus" Clarke marcus@miami.eduJoe Abley jabley@clear.co.nzJoe Jih-Shian Lu jslu@dns.ntu.edu.twJoe Orthoefer j_orthoefer@tia.netJoe Traister traister@mojozone.orgJoel Faedi Joel.Faedi@esial.u-nancy.frJoel Ray Holveck joelh@gnu.orgJoel Sutton sutton@aardvark.apana.org.auJohan Granlund johan@granlund.nuJohan Karlsson k@numeri.campus.luth.seJohan Larsson johan@moon.campus.luth.seJohann Tonsing jtonsing@mikom.csir.co.zaJohannes Helander unknownJohannes Stille unknownJohn Baldwin jobaldwi@vt.eduJohn Beckett jbeckett@southern.eduJohn Beukema jbeukema@hk.super.netJohn Brezak unknownJohn Capo jc@irbs.comJohn F. Woods jfw@jfwhome.funhouse.comJohn Goerzen
jgoerzen@alexanderwohl.complete.orgJohn Hay jhay@mikom.csir.co.zaJohn Heidemann johnh@isi.eduJohn Hood cgull@owl.orgJohn Kohl unknownJohn Lind john@starfire.mn.orgJohn Mackin john@physiol.su.oz.auJohn P johnp@lodgenet.comJohn Perry perry@vishnu.alias.netJohn Preisler john@vapornet.comJohn Rochester jr@cs.mun.caJohn Sadler john_sadler@alum.mit.eduJohn Saunders john@pacer.nlc.net.auJohn W. DeBoskey jwd@unx.sas.comJohn Wehle john@feith.comJohn Woods jfw@eddie.mit.eduJon Morgan morgan@terminus.trailblazer.comJonathan H N Chin jc254@newton.cam.ac.ukJonathan Hanna
jh@pc-21490.bc.rogers.wave.caJorge Goncalves j@bug.fe.up.ptJorge M. Goncalves ee96199@tom.fe.up.ptJos Backus jbackus@plex.nlJose M. Alcaide jose@we.lc.ehu.esJose Marques jose@nobody.orgJosef Grosch
jgrosch@superior.mooseriver.comJosef Karthauser joe@uk.FreeBSD.orgJoseph Stein joes@wstein.comJosh Gilliam josh@quick.netJosh Tiefenbach josh@ican.netJuergen Lock nox@jelal.hb.north.deJuha Inkari inkari@cc.hut.fiJukka A. Ukkonen jua@iki.fiJulian Assange proff@suburbia.netJulian Coleman j.d.coleman@ncl.ac.uk&a.jhsJulian Jenkins kaveman@magna.com.auJunichi Satoh junichi@jp.FreeBSD.orgJunji SAKAI sakai@jp.FreeBSD.orgJunya WATANABE junya-w@remus.dti.ne.jpK.Higashino a00303@cc.hc.keio.ac.jpKUNISHIMA Takeo kunishi@c.oka-pu.ac.jpKai Vorma vode@snakemail.hut.fiKaleb S. Keithley kaleb@ics.comKaneda Hiloshi vanitas@ma3.seikyou.ne.jpKapil Chowksey kchowksey@hss.hns.comKarl Denninger karl@mcs.comKarl Dietz Karl.Dietz@triplan.comKarl Lehenbauer karl@NeoSoft.comKato Takenori
kato@eclogite.eps.nagoya-u.ac.jpKawanobe Koh kawanobe@st.rim.or.jpKazuhiko Kiriyama kiri@kiri.toba-cmt.ac.jpKazuo Horikawa horikawa@jp.FreeBSD.orgKees Jan Koster kjk1@ukc.ac.ukKeith Bostic bostic@bostic.comKeith E. Walker unknownKeith Moore unknownKeith Sklower unknownKen Hornstein unknownKen Key key@cs.utk.eduKen Mayer kmayer@freegate.comKenji Saito marukun@mx2.nisiq.netKenji Tomita tommyk@da2.so-net.or.jpKenneth Furge kenneth.furge@us.endress.comKenneth Monville desmo@bandwidth.orgKenneth R. Westerback krw@tcn.netKenneth Stailey kstailey@gnu.ai.mit.eduKent Talarico kent@shipwreck.tsoft.netKent Vander Velden graphix@iastate.eduKentaro Inagaki JBD01226@niftyserve.ne.jpKevin Bracey kbracey@art.acorn.co.ukKevin Day toasty@dragondata.comKevin Lahey kml@nas.nasa.govKevin Lokevlo@hello.com.twKevin Street street@iname.comKevin Van Maren vanmaren@fast.cs.utah.eduKiroh HARADA kiroh@kh.rim.or.jpKlaus Klein kleink@layla.inka.deKlaus-J. Wolf Yanestra@t-online.deKoichi Sato copan@ppp.fastnet.or.jpKostya Lukin lukin@okbmei.msk.suKouichi Hirabayashi kh@mogami-wire.co.jpKurt D. Zeilenga Kurt@Boolean.NETKurt Olsen kurto@tiny.mcs.usu.eduL. Jonas Olsson
ljo@ljo-slip.DIALIN.CWRU.EduLars Köller
Lars.Koeller@Uni-Bielefeld.DELarry Altneu larry@ALR.COMLaurence Lopez lopez@mv.mv.comLee Cremeans lcremean@tidalwave.netLiang Tai-hwa
avatar@www.mmlab.cse.yzu.edu.twLon Willett lon%softt.uucp@math.utah.eduLouis A. Mamakos louie@TransSys.COMLouis Mamakos loiue@TransSys.comLucas James Lucas.James@ldjpc.apana.org.auLyndon Nerenberg lyndon@orthanc.comM.C. Wong unknownMANTANI Nobutaka nobutaka@nobutaka.comMIHIRA Sanpei Yoshiro sanpei@sanpei.org
- MITA Yoshio mita@jp.FreeBSD.ORG
+ MITA Yoshio mita@jp.FreeBSD.orgMITSUNAGA Noriaki
mitchy@er.ams.eng.osaka-u.ac.jpMOROHOSHI Akihiko moro@race.u-tokyo.ac.jpMagnus Enbom dot@tinto.campus.luth.seMahesh Neelakanta mahesh@gcomm.comMakoto MATSUSHITA matusita@jp.FreeBSD.orgMakoto WATANABE
watanabe@zlab.phys.nagoya-u.ac.jpMalte Lance malte.lance@gmx.netManu Iyengar
iyengar@grunthos.pscwa.psca.comMarc Frajola marc@dev.comMarc Ramirez mrami@mramirez.sy.yale.eduMarc Slemko marcs@znep.comMarc van Kempen wmbfmk@urc.tue.nlMarc van Woerkom van.woerkom@netcologne.deMarcel Moolenaar marcel@scc.nlMario Sergio Fujikawa Ferreira
lioux@gns.com.brMark Andrews unknownMark Cammidge mark@gmtunx.ee.uct.ac.zaMark Diekhans markd@grizzly.comMark Huizer xaa@stack.nlMark J. Taylor mtaylor@cybernet.comMark Krentel krentel@rice.eduMark Mayo markm@vmunix.comMark Thompson thompson@tgsoft.comMark Tinguely tinguely@plains.nodak.eduMark Treacy unknownMark Valentine mark@linus.demon.co.ukMartin BirgmeierMartin Ibert mib@ppe.bb-data.deMartin Kammerhofer dada@sbox.tu-graz.ac.atMartin Renters martin@tdc.on.caMartti Kuparinen
martti.kuparinen@ericsson.comMasachika ISHIZUKA
ishizuka@isis.min.ntt.jpMas.TAKEMURA unknownMasafumi NAKANE max@wide.ad.jpMasahiro Sekiguchi
seki@sysrap.cs.fujitsu.co.jpMasanobu Saitoh msaitoh@spa.is.uec.ac.jpMasanori Kanaoka kana@saijo.mke.mei.co.jpMasanori Kiriake seiken@ARGV.ACMasatoshi TAMURA
tamrin@shinzan.kuee.kyoto-u.ac.jpMats Lofkvist mal@algonet.seMatt Bartley mbartley@lear35.cytex.comMatt Thomas matt@3am-software.comMatt White mwhite+@CMU.EDUMatthew C. Mead mmead@Glock.COMMatthew Cashdollar mattc@rfcnet.comMatthew Flatt mflatt@cs.rice.eduMatthew Fuller fullermd@futuresouth.comMatthew Stein matt@bdd.netMatthias Pfaller leo@dachau.marco.deMatthias Scheler tron@netbsd.orgMattias Gronlund
Mattias.Gronlund@sa.erisoft.seMattias Pantzare pantzer@ludd.luth.seMaurice Castro
maurice@planet.serc.rmit.edu.auMax Euston meuston@jmrodgers.comMax Khon fjoe@husky.iclub.nsu.ruMaxim Bolotin max@rsu.ruMicha Class
michael_class@hpbbse.bbn.hp.comMichael Butler imb@scgt.oz.auMichael Butschky butsch@computi.erols.comMichael Clay mclay@weareb.org
- Michael Elbel me@FreeBSD.ORG
+ Michael Elbel me@FreeBSD.orgMichael Galassi nerd@percival.rain.comMichael Hancock michaelh@cet.co.jpMichael Hohmuth hohmuth@inf.tu-dresden.deMichael Perlman canuck@caam.rice.eduMichael Petry petry@netwolf.NetMasters.comMichael Reifenberger root@totum.plaut.deMichael Searle searle@longacre.demon.co.ukMichal Listos mcl@Amnesiac.123.orgMichio Karl Jinbo
karl@marcer.nagaokaut.ac.jpMiguel Angel Sagreras
msagre@cactus.fi.uba.arMihoko Tanaka m_tonaka@pa.yokogawa.co.jpMika Nystrom mika@cs.caltech.eduMikael Hybsch micke@dynas.seMikael Karpberg
karpen@ocean.campus.luth.seMike Del repenting@hotmail.comMike Durian durian@plutotech.comMike Durkin mdurkin@tsoft.sf-bay.orgMike E. Matsnev mike@azog.cs.msu.suMike Evans mevans@candle.comMike Grupenhoff kashmir@umiacs.umd.eduMike Hibler mike@marker.cs.utah.eduMike Karels unknownMike McGaughey mmcg@cs.monash.edu.auMike Meyer mwm@shiva.the-park.comMike Mitchell mitchell@ref.tfs.comMike Murphy mrm@alpharel.comMike Peck mike@binghamton.eduMike Spengler mks@msc.eduMikhail A. Sokolov mishania@demos.suMikhail Teterin mi@aldan.ziplink.netMing-I Hseh PA@FreeBSD.ee.Ntu.edu.TWMitsuru IWASAKI iwasaki@pc.jaring.myMitsuru Yoshida mitsuru@riken.go.jpMonte Mitzelfelt monte@gonefishing.orgMorgan Davis root@io.cts.comMostyn Lewis mostyn@mrl.comMotomichi Matsuzaki mzaki@e-mail.ne.jpMotoyuki Kasahara m-kasahr@sra.co.jpMotoyuki Konno motoyuki@snipe.rim.or.jpMunechika Sumikawa sumikawa@kame.netMurray Stokely murray@cdrom.comN.G.Smith ngs@sesame.hensa.ac.ukNAGAO Tadaaki nagao@cs.titech.ac.jpNAKAJI Hiroyuki
nakaji@tutrp.tut.ac.jpNAKAMURA Kazushi nkazushi@highway.or.jpNAKAMURA Motonori
motonori@econ.kyoto-u.ac.jpNIIMI Satoshi sa2c@and.or.jpNOKUBI Hirotaka h-nokubi@yyy.or.jpNadav Eiron nadav@barcode.co.ilNanbor Wang nw1@cs.wustl.eduNaofumi Honda
honda@Kururu.math.sci.hokudai.ac.jpNaoki Hamada nao@tom-yam.or.jpNarvi narvi@haldjas.folklore.eeNathan Ahlstrom nrahlstr@winternet.comNathan Dorfman nathan@rtfm.netNeal Fachan kneel@ishiboo.comNeil Blakey-Milner nbm@rucus.ru.ac.zaNiall Smart rotel@indigo.ieNick Barnes Nick.Barnes@pobox.comNick Handel nhandel@NeoSoft.comNick Hilliard nick@foobar.org&a.nsayer;Nick Williams njw@cs.city.ac.ukNickolay N. Dudorov nnd@itfs.nsk.suNiklas Hallqvist niklas@filippa.appli.seNisha Talagala nisha@cs.berkeley.eduNo Name ZW6T-KND@j.asahi-net.or.jpNo Name adrian@virginia.eduNo Name alex@elvisti.kiev.uaNo Name anto@netscape.netNo Name bobson@egg.ics.nitch.ac.jpNo Name bovynf@awe.beNo Name burg@is.ge.comNo Name chris@gnome.co.ukNo Name colsen@usa.netNo Name coredump@nervosa.comNo Name dannyman@arh0300.urh.uiuc.eduNo Name davids@SECNET.COMNo Name derek@free.orgNo Name devet@adv.IAEhv.nlNo Name djv@bedford.netNo Name dvv@sprint.netNo Name enami@ba2.so-net.or.jpNo Name flash@eru.tubank.msk.suNo Name flash@hway.ruNo Name fn@pain.csrv.uidaho.eduNo Name gclarkii@netport.neosoft.comNo Name gordon@sheaky.lonestar.orgNo Name graaf@iae.nlNo Name greg@greg.rim.or.jpNo Name grossman@cygnus.comNo Name gusw@fub46.zedat.fu-berlin.deNo Name hfir@math.rochester.eduNo Name hnokubi@yyy.or.jpNo Name iaint@css.tuu.utas.edu.auNo Name invis@visi.comNo Name ishisone@sra.co.jpNo Name iverson@lionheart.comNo Name jpt@magic.netNo Name junker@jazz.snu.ac.krNo Name k-sugyou@ccs.mt.nec.co.jpNo Name kenji@reseau.toyonaka.osaka.jpNo Name kfurge@worldnet.att.netNo Name lh@aus.orgNo Name lhecking@nmrc.ucc.ieNo Name mrgreen@mame.mu.oz.auNo Name nakagawa@jp.FreeBSD.orgNo Name ohki@gssm.otsuka.tsukuba.ac.jpNo Name owaki@st.rim.or.jpNo Name pechter@shell.monmouth.comNo Name pete@pelican.pelican.comNo Name pritc003@maroon.tc.umn.eduNo Name risner@stdio.comNo Name roman@rpd.univ.kiev.uaNo Name root@ns2.redline.ruNo Name root@uglabgw.ug.cs.sunysb.eduNo Name stephen.ma@jtec.com.auNo Name sumii@is.s.u-tokyo.ac.jpNo Name takas-su@is.aist-nara.ac.jpNo Name tamone@eig.unige.chNo Name tjevans@raleigh.ibm.comNo Name tony-o@iij.ad.jp amurai@spec.co.jpNo Name torii@tcd.hitachi.co.jpNo Name uenami@imasy.or.jpNo Name uhlar@netlab.skNo Name vode@hut.fiNo Name wlloyd@mpd.caNo Name wlr@furball.wellsfargo.comNo Name wmbfmk@urc.tue.nlNo Name yamagata@nwgpc.kek.jpNo Name ziggy@ryan.orgNobuhiro Yasutomi nobu@psrc.isac.co.jpNobuyuki Koganemaru
kogane@koganemaru.co.jpNorio Suzuki nosuzuki@e-mail.ne.jp
- Noritaka Ishizumi graphite@jp.FreeBSD.ORG
+ Noritaka Ishizumi graphite@jp.FreeBSD.orgNoriyuki Soda soda@sra.co.jpOh Junseon hollywar@mail.holywar.netOlaf Wagner wagner@luthien.in-berlin.deOleg Sharoiko os@rsu.ruOliver Breuninger ob@seicom.NETOliver Friedrichs oliver@secnet.comOliver Fromme
oliver.fromme@heim3.tu-clausthal.deOliver Laumann
net@informatik.uni-bremen.deOliver Oberdorf oly@world.std.comOlof Johansson offe@ludd.luth.se
- Osokin Sergey aka oZZ ozz@freebsd.org.ru
+ Osokin Sergey aka oZZ ozz@FreeBSD.org.ruPace Willisson pace@blitz.comPaco Rosich rosich@modico.eleinf.uv.esPalle Girgensohn girgen@partitur.seParag Patel parag@cgt.comPascal Pederiva pascal@zuo.dec.comPasvorn Boonmark boonmark@juniper.netPatrick Gardella patrick@cre8tivegroup.comPatrick Hausen unknownPaul Antonov apg@demos.suPaul F. Werkowski unknownPaul Fox pgf@foxharp.boston.ma.usPaul Koch koch@thehub.com.auPaul Kranenburg pk@NetBSD.orgPaul Mackerras paulus@cs.anu.edu.auPaul Popelka paulp@uts.amdahl.comPaul S. LaFollette, Jr. unknownPaul Saab paul@mu.orgPaul Sandys myj@nyct.netPaul T. Root proot@horton.iaces.comPaul Vixie paul@vix.comPaulo Menezes paulo@isr.uc.ptPaulo Menezes pm@dee.uc.ptPedro A M Vazquez vazquez@IQM.Unicamp.BRPedro Giffuni giffunip@asme.orgPete Bentley pete@demon.netPeter Childs pjchilds@imforei.apana.org.auPeter Cornelius pc@inr.fzk.dePeter Haight peterh@prognet.comPeter Jeremy perer.jeremy@alcatel.com.auPeter M. Chen pmchen@eecs.umich.eduPeter Much peter@citylink.dinoex.sub.orgPeter Olsson unknownPeter Philipp pjp@bsd-daemon.netPeter Stubbs PETERS@staidan.qld.edu.auPhil Maker pjm@cs.ntu.edu.auPhil Sutherland
philsuth@mycroft.dialix.oz.auPhil Taylor phil@zipmail.co.ukPhilip Musumeci philip@rmit.edu.auPierre Y. Dampure pierre.dampure@k2c.co.ukPius Fischer pius@ienet.comPomegranate daver@flag.blackened.netPowerdog Industries
kevin.ruddy@powerdog.comR. Kym HorsellRajesh Vaidheeswarran rv@fore.comRalf Friedl friedl@informatik.uni-kl.deRandal S. Masutani randal@comtest.comRandall Hopper rhh@ct.picker.comRandall W. Dean rwd@osf.orgRandy Bush rbush@bainbridge.verio.netReinier Bezuidenhout
rbezuide@mikom.csir.co.zaRemy Card Remy.Card@masi.ibp.frRicardas Cepas rch@richard.eu.orgRiccardo Veraldi veraldi@cs.unibo.itRichard Henderson richard@atheist.tamu.eduRichard Hwang rhwang@bigpanda.comRichard Kiss richard@homemail.comRichard J Kuhns rjk@watson.grauel.comRichard M. Neswold
rneswold@drmemory.fnal.govRichard Seaman, Jr. dick@tar.comRichard Stallman rms@gnu.ai.mit.eduRichard Straka straka@user1.inficad.comRichard Tobin richard@cogsci.ed.ac.ukRichard Wackerbarth rkw@Dataplex.NETRichard Winkel rich@math.missouri.eduRichard Wiwatowski rjwiwat@adelaide.on.netRick Macklem rick@snowhite.cis.uoguelph.caRick Macklin unknownRob Austein sra@epilogue.comRob Mallory rmallory@qualcomm.comRob Snow rsnow@txdirect.netRobert Crowe bob@speakez.comRobert D. Thrush rd@phoenix.aii.comRobert Eckardt
roberte@MEP.Ruhr-Uni-Bochum.deRobert Sanders rsanders@mindspring.comRobert Sexton robert@kudra.comRobert Shady rls@id.netRobert Swindells swindellsr@genrad.co.ukRobert Watson robert@cyrus.watson.orgRobert Withrow witr@rwwa.comRobert Yoder unknownRobin Carey
robin@mailgate.dtc.rankxerox.co.ukRoger Hardiman roger@cs.strath.ac.ukRoland Jesse jesse@cs.uni-magdeburg.deRon Bickers rbickers@intercenter.netRon Lenk rlenk@widget.xmission.comRonald Kuehn kuehn@rz.tu-clausthal.deRudolf Cejka unknownRuslan Belkin rus@home2.UA.netRuslan Ermilov ru@ucb.crimea.uaRuslan Shevchenko rssh@cam.grad.kiev.uaRussell L. Carter rcarter@pinyon.orgRussell Vincent rv@groa.uct.ac.zaRyan Younce ryany@pobox.comRyuichiro IMURA imura@cs.titech.ac.jpSANETO Takanori sanewo@strg.sony.co.jpSAWADA Mizuki miz@qb3.so-net.ne.jp
- SUGIMURA Takashi sugimura@jp.FreeBSD.ORG
+ SUGIMURA Takashi sugimura@jp.FreeBSD.orgSURANYI Peter
suranyip@jks.is.tsukuba.ac.jpSakai Hiroaki sakai@miya.ee.kagu.sut.ac.jpSakari Jalovaara sja@tekla.fiSam Hartman hartmans@mit.eduSamuel Lam skl@ScalableNetwork.comSamuele Zannoli zannoli@cs.unibo.itSander Vesik sander@haldjas.folklore.eeSandro Sigala ssigala@globalnet.itSascha Blank blank@fox.uni-trier.deSascha Wildner swildner@channelz.GUN.deSatoh Junichi junichi@astec.co.jpScot Elliott scot@poptart.orgScot W. Hetzel hetzels@westbend.netScott A. Kenney saken@rmta.ml.orgScott Blachowicz
scott.blachowicz@seaslug.orgScott Burris scott@pita.cns.ucla.eduScott Hazen Mueller scott@zorch.sf-bay.orgScott Michel scottm@cs.ucla.eduScott Reynolds scott@clmqt.marquette.mi.usSebastian Strollo seb@erix.ericsson.seSerge A. Babkin babkin@hq.icb.chel.suSerge V. Vakulenko vak@zebub.msk.suSergei Chechetkin
csl@whale.sunbay.crimea.uaSergei S. Laskavy laskavy@pc759.cs.msu.suSergey Gershtein sg@mplik.ruSergey Potapov sp@alkor.ruSergey Shkonda serg@bcs.zp.uaSergey V.Dorokhov svd@kbtelecom.nalnet.ruSergio Lenzi lenzi@bsi.com.brShaun Courtney shaun@emma.eng.uct.ac.zaShawn M. Carey smcarey@mailbox.syr.eduShigio Yamaguchi shigio@wafu.netgate.netShinya Esu esu@yk.rim.or.jpShuichi Tanaka stanaka@bb.mbn.or.jpShunsuke Akiyama akiyama@jp.FreeBSD.orgSimon simon@masi.ibp.frSimon Burge simonb@telstra.com.auSimon J Gerraty sjg@melb.bull.oz.auSimon Marlow simonm@dcs.gla.ac.ukSimon Shapiro shimon@simon-shapiro.orgSin'ichiro MIYATANI siu@phaseone.co.jpSlaven Rezic eserte@cs.tu-berlin.deSoochon Radee slr@mitre.orgSoren Dayton csdayton@midway.uchicago.eduSoren Dossing sauber@netcom.comSoren S. Jorvang soren@dt.dkStefan Bethke stb@hanse.deStefan Eggers seggers@semyam.dinoco.deStefan Moeding s.moeding@ndh.netStefan Petri unknownStefan `Sec` Zehl sec@42.orgSteinar Haug sthaug@nethelp.noStephane E. Potvin sepotvin@videotron.caStephane Legrand stephane@lituus.frStephen Clawson
sclawson@marker.cs.utah.eduStephen F. Combs combssf@salem.ge.comStephen Farrell stephen@farrell.orgStephen Hocking sysseh@devetir.qld.gov.auStephen J. Roznowski sjr@home.netStephen McKay syssgm@devetir.qld.gov.auStephen Melvin melvin@zytek.comSteve Bauer sbauer@rock.sdsmt.eduSteve Coltrin spcoltri@io.comSteve Deering unknownSteve Gerakines steve2@genesis.tiac.netSteve Gericke steveg@comtrol.comSteve Piette steve@simon.chi.il.USSteve Schwarz schwarz@alpharel.comSteven G. Kargl
kargl@troutmask.apl.washington.eduSteven H. Samorodin samorodi@NUXI.comSteven McCanne mccanne@cs.berkeley.eduSteven Plite splite@purdue.eduSteven Wallace unknownStuart Henderson
stuart@internationalschool.co.ukSue Blake sue@welearn.com.auSugimoto Sadahiro ixtl@komaba.utmc.or.jpSugiura Shiro ssugiura@duo.co.jpSujal Patel smpatel@wam.umd.eduSune Stjerneby stjerneby@usa.netSuzuki Yoshiaki
zensyo@ann.tama.kawasaki.jpTadashi Kumano kumano@strl.nhk.or.jpTaguchi Takeshi taguchi@tohoku.iij.ad.jpTakahiro Yugawa yugawa@orleans.rim.or.jpTakanori Watanabe
takawata@shidahara1.planet.sci.kobe-u.ac.jpTakashi Mega mega@minz.orgTakashi Uozu j1594016@ed.kagu.sut.ac.jpTakayuki Ariga a00821@cc.hc.keio.ac.jpTakeru NAIKI naiki@bfd.es.hokudai.ac.jpTakeshi Amaike amaike@iri.co.jpTakeshi MUTOH mutoh@info.nara-k.ac.jpTakeshi Ohashi
ohashi@mickey.ai.kyutech.ac.jpTakeshi WATANABE
watanabe@crayon.earth.s.kobe-u.ac.jpTakuya SHIOZAKI
tshiozak@makino.ise.chuo-u.ac.jpTatoku Ogaito tacha@tera.fukui-med.ac.jpTatsumi HOSOKAWA hosokawa@jp.FreeBSD.orgTed Buswell tbuswell@mediaone.netTed Faber faber@isi.eduTed Lemon mellon@isc.orgTerry Lambert terry@lambert.orgTerry Lee terry@uivlsi.csl.uiuc.eduTetsuya Furukawa tetsuya@secom-sis.co.jpTheo de Raadt deraadt@OpenBSD.orgThomas thomas@mathematik.uni-Bremen.deThomas D. Dean tomdean@ix.netcom.comThomas David Rivers rivers@dignus.comThomas G. McWilliams tgm@netcom.comThomas Gellekum
thomas@ghpc8.ihf.rwth-aachen.deThomas Graichen
graichen@omega.physik.fu-berlin.deThomas König
Thomas.Koenig@ciw.uni-karlsruhe.deThomas Ptacek unknownThomas Stevens tas@stevens.orgThomas Stromberg tstrombe@rtci.comThomas Valentino Crimi
tcrimi+@andrew.cmu.eduThomas Wintergerst thomas@lemur.nord.deÞórður Ívarsson
totii@est.isTim Kientzle kientzle@netcom.comTim Singletary
tsingle@sunland.gsfc.nasa.govTim Wilkinson tim@sarc.city.ac.ukTimo J. Rinne tri@iki.fiTodd Miller millert@openbsd.orgTom root@majestix.cmr.noTom tom@sdf.comTom Gray - DCA dcasba@rain.orgTom Jobbins tom@tom.tjTom Pusateri pusateri@juniper.netTom Rush tarush@mindspring.comTom Samplonius tom@misery.sdf.comTomohiko Kurahashi
kura@melchior.q.t.u-tokyo.ac.jpTony Kimball alk@Think.COMTony Li tli@jnx.comTony Lynn wing@cc.nsysu.edu.twTony Maher tonym@angis.org.auTorbjorn Granlund tege@matematik.su.seToshihiko ARAI toshi@tenchi.ne.jpToshihiko SHIMOKAWA toshi@tea.forus.or.jpToshihiro Kanda candy@kgc.co.jpToshiomi Moriki
Toshiomi.Moriki@ma1.seikyou.ne.jpTrefor S. trefor@flevel.co.ukTrevor Blackwell tlb@viaweb.comURATA Shuichiro s-urata@nmit.tmg.nec.co.jpUdo Schweigert ust@cert.siemens.deUgo Paternostro paterno@dsi.unifi.itUlf Kieber kieber@sax.deUlli Linzen ulli@perceval.camelot.deUstimenko Semen semen@iclub.nsu.ruUwe Arndt arndt@mailhost.uni-koblenz.deVadim Chekan vadim@gc.lviv.uaVadim Kolontsov vadim@tversu.ac.ruVadim Mikhailov mvp@braz.ruVan Jacobson van@ee.lbl.govVasily V. Grechishnikov
bazilio@ns1.ied-vorstu.ac.ruVasim Valejev vasim@uddias.diaspro.comVernon J. Schryver vjs@mica.denver.sgi.comVic Abell abe@cc.purdue.eduVille Eerola ve@sci.fiVincent Poy vince@venus.gaianet.netVincenzo Capuano
VCAPUANO@vmprofs.esoc.esa.deVirgil Champlin champlin@pa.dec.comVladimir A. Jakovenko
vovik@ntu-kpi.kiev.uaVladimir Kushnir kushn@mail.kar.netVsevolod Lobko seva@alex-ua.comW. Gerald Hicks wghicks@bellsouth.netW. Richard Stevens rstevens@noao.eduWalt Howard howard@ee.utah.eduWarren Toomey wkt@csadfa.cs.adfa.oz.auWayne Scott wscott@ichips.intel.comWerner Griessl
werner@btp1da.phy.uni-bayreuth.deWes Santee wsantee@wsantee.oz.netWietse Venema wietse@wzv.win.tue.nlWilfredo Sanchez wsanchez@apple.comWiljo Heinen wiljo@freeside.ki.open.deWilko Bulte wilko@yedi.iaf.nlWill Andrews andrews@technologist.comWillem Jan Withagen wjw@surf.IAE.nlWilliam Jolitz withheldWilliam Liao william@tale.netWojtek Pilorz
wpilorz@celebris.bdk.lublin.plWolfgang Helbig helbig@ba-stuttgart.deWolfgang Solfrank ws@tools.deWolfgang Stanglmeier wolf@FreeBSD.orgWu Ching-hong woju@FreeBSD.ee.Ntu.edu.TWYarema yds@ingress.comYaroslav Terletsky ts@polynet.lviv.uaYasuhito FUTATSUKI futatuki@fureai.or.jpYasuhiro Fukama yasuf@big.or.jpYen-Shuo Su yssu@CCCA.NCTU.edu.twYing-Chieh Liao ijliao@csie.NCTU.edu.twYixin Jin yjin@rain.cs.ucla.eduYoshiaki Uchikawa yoshiaki@kt.rim.or.jpYoshihiko OHTA yohta@bres.tsukuba.ac.jpYoshihisa NAKAGAWA
y-nakaga@ccs.mt.nec.co.jpYoshikazu Goto gotoh@ae.anritsu.co.jpYoshimasa Ohnishi
ohnishi@isc.kyutech.ac.jpYoshishige Arai ryo2@on.rim.or.jpYuichi MATSUTAKA matutaka@osa.att.ne.jpYujiro MIYATA
miyata@bioele.nuee.nagoya-u.ac.jpYukihiro Nakai nacai@iname.comYusuke Nawano azuki@azkey.orgYuu Yashiki s974123@cc.matsuyama-u.ac.jpYuval Yarom yval@cs.huji.ac.ilYves Fonk yves@cpcoup5.tn.tudelft.nlYves Fonk yves@dutncp8.tn.tudelft.nlZach Heilig zach@gaffaneys.comZahemszhky Gabor zgabor@code.huZhong Ming-Xun zmx@mail.CDPA.nsysu.edu.twarci vega@sophia.inria.frder Mouse mouse@Collatz.McRCIM.McGill.EDUfrf frf@xocolatl.comEge Rekk aagero@aage.priv.no386BSD Patch Kit Patch Contributors(in alphabetical order by first name):Adam Glass glass@postgres.berkeley.eduAdrian Hall adrian@ibmpcug.co.ukAndrey A. Chernov ache@astral.msk.suAndrew Herbert andrew@werple.apana.org.auAndrew Moore alm@netcom.comAndy Valencia ajv@csd.mot.comjtk@netcom.comArne Henrik Juul arnej@Lise.Unit.NOBakul Shah bvs@bitblocks.comBarry Lustig barry@ictv.comBob Wilcox bob@obiwan.uucpBranko LankesterBrett Lymn blymn@mulga.awadi.com.AUCharles Hannum mycroft@ai.mit.eduChris G. Demetriou
cgd@postgres.berkeley.eduChris Torek torek@ee.lbl.govChristoph Robitschko
chmr@edvz.tu-graz.ac.atDaniel Poirot poirot@aio.jsc.nasa.govDave Burgess burgess@hrd769.brooks.af.milDave Rivers rivers@ponds.uucpDavid Dawes dawes@physics.su.OZ.AUDavid Greenman dg@Root.COMEric J. Haug ejh@slustl.slu.eduFelix Gaehtgens
felix@escape.vsse.in-berlin.deFrank Maclachlan fpm@crash.cts.comGary A. Browning gab10@griffcd.amdahl.comGary Howland gary@hotlava.comGeoff Rehmet csgr@alpha.ru.ac.zaGoran Hammarback goran@astro.uu.seGuido van Rooij guido@gvr.orgGuy Harris guy@auspex.comHavard Eidnes
Havard.Eidnes@runit.sintef.noHerb Peyerl hpeyerl@novatel.cuc.ab.caHolger Veit Holger.Veit@gmd.deIshii Masahiro, R. Kym HorsellJ.T. Conklin jtc@cygnus.comJagane D Sundar jagane@netcom.comJames Clark jjc@jclark.comJames Jegers jimj@miller.cs.uwm.eduJames W. DolterJames da Silva jds@cs.umd.edu et alJay Fenlason hack@datacube.comJim Wilson wilson@moria.cygnus.comJörg Lohse
lohse@tech7.informatik.uni-hamburg.deJörg Wunsch
joerg_wunsch@uriah.heep.sax.deJohn DysonJohn Woods jfw@eddie.mit.eduJordan K. Hubbard jkh@whisker.hubbard.ieJulian Elischer julian@dialix.oz.au
- Julian Stacey jhs@freebsd.org
+ Julian Stacey jhs@FreeBSD.orgKarl Dietz Karl.Dietz@triplan.comKarl Lehenbauer karl@NeoSoft.comkarl@one.neosoft.comKeith Bostic bostic@toe.CS.Berkeley.EDUKen HughesKent Talarico kent@shipwreck.tsoft.netKevin Lahey kml%rokkaku.UUCP@mathcs.emory.edukml@mosquito.cis.ufl.eduMarc Frajola marc@dev.comMark Tinguely tinguely@plains.nodak.edutinguely@hookie.cs.ndsu.NoDak.eduMartin Renters martin@tdc.on.caMichael Clay mclay@weareb.orgMichael Galassi nerd@percival.rain.comMike Durkin mdurkin@tsoft.sf-bay.orgNaoki Hamada nao@tom-yam.or.jpNate Williams nate@bsd.coe.montana.eduNick Handel nhandel@NeoSoft.comnick@madhouse.neosoft.comPace Willisson pace@blitz.comPaul Kranenburg pk@cs.few.eur.nlPaul Mackerras paulus@cs.anu.edu.auPaul Popelka paulp@uts.amdahl.comPeter da Silva peter@NeoSoft.comPhil Sutherland
philsuth@mycroft.dialix.oz.au
- Poul-Henning Kampphk@FreeBSD.ORG
+ Poul-Henning Kampphk@FreeBSD.orgRalf Friedl friedl@informatik.uni-kl.deRick Macklem root@snowhite.cis.uoguelph.caRobert D. Thrush rd@phoenix.aii.comRodney W. Grimes rgrimes@cdrom.comSascha Wildner swildner@channelz.GUN.deScott Burris scott@pita.cns.ucla.eduScott Reynolds scott@clmqt.marquette.mi.usSean Eric Fagan sef@kithrup.comSimon J Gerraty sjg@melb.bull.oz.ausjg@zen.void.oz.auStephen McKay syssgm@devetir.qld.gov.auTerry Lambert terry@icarus.weber.eduTerry Lee terry@uivlsi.csl.uiuc.eduTor Egge Tor.Egge@idi.ntnu.noWarren Toomey wkt@csadfa.cs.adfa.oz.auWiljo Heinen wiljo@freeside.ki.open.deWilliam Jolitz withheldWolfgang Solfrank ws@tools.deWolfgang Stanglmeier wolf@dentaro.GUN.deYuval Yarom yval@cs.huji.ac.il
diff --git a/en_US.ISO_8859-1/books/handbook/cutting-edge/chapter.sgml b/en_US.ISO_8859-1/books/handbook/cutting-edge/chapter.sgml
index 484daea3c9..a79fc015cf 100644
--- a/en_US.ISO_8859-1/books/handbook/cutting-edge/chapter.sgml
+++ b/en_US.ISO_8859-1/books/handbook/cutting-edge/chapter.sgml
@@ -1,2473 +1,2473 @@
The Cutting Edge: FreeBSD-current and FreeBSD-stableFreeBSD is under constant development between releases. For people
who want to be on the cutting edge, there are several easy mechanisms for
keeping your system in sync with the latest developments. Be warned: the
cutting edge is not for everyone! This chapter will help you decide if you
want to track the development system, or stick with one of the released
versions.Staying Current with FreeBSDContributed by &a.jkh;.What is FreeBSD-current?FreeBSD-current is, quite literally, nothing more than a daily
snapshot of the working sources for FreeBSD. These include work in
progress, experimental changes and transitional mechanisms that may or
may not be present in the next official release of the software.
While many of us compile almost daily from FreeBSD-current sources,
there are periods of time when the sources are literally
un-compilable. These problems are generally resolved as expeditiously
as possible, but whether or not FreeBSD-current sources bring disaster
or greatly desired functionality can literally be a matter of which
part of any given 24 hour period you grabbed them in!Who needs FreeBSD-current?FreeBSD-current is made generally available for 3 primary interest
groups:Members of the FreeBSD group who are actively working on some
part of the source tree and for whom keeping “current”
is an absolute requirement.Members of the FreeBSD group who are active testers, willing
to spend time working through problems in order to ensure that
FreeBSD-current remains as sane as possible. These are also people
who wish to make topical suggestions on changes and the general
direction of FreeBSD.Peripheral members of the FreeBSD (or some other) group who
merely wish to keep an eye on things and use the current sources
for reference purposes (e.g. for reading, not
running). These people also make the occasional comment or
contribute code.What is FreeBSD-current not?A fast-track to getting pre-release bits because you heard
there is some cool new feature in there and you want to be the
first on your block to have it.A quick way of getting bug fixes.In any way “officially supported” by us. We do
our best to help people genuinely in one of the 3
“legitimate” FreeBSD-current categories, but we simply
do not have the time to provide tech support
for it. This is not because we are mean and nasty people who do
not like helping people out (we would not even be doing FreeBSD if
we were), it is literally because we cannot answer 400 messages a
day and actually work on FreeBSD! I am sure
that, if given the choice between having us answer lots of
questions or continuing to improve FreeBSD, most of you would vote
for us improving it.Using FreeBSD-currentJoin the &a.current; and the &a.cvsall; . This is not just a
good idea, it is essential. If you are not
on the FreeBSD-current mailing list, you will
not see the comments that people are making about the current
state of the system and thus will probably end up stumbling over a
lot of problems that others have already found and solved. Even
more importantly, you will miss out on important bulletins which
may be critical to your system's continued health.The cvs-all mailing list will allow you to see
the commit log entry for each change as it is made along with any
pertinent information on possible side-effects.To join these lists, send mail to
&a.majordomo; and specify:
subscribe freebsd-current
subscribe cvs-all
in the body of your message. Optionally, you can also say
help and Majordomo will send you full help on
how to subscribe and unsubscribe to the various other mailing
lists we support.Grab the sources from ftp.FreeBSD.ORG. You can do this in three
+ role="fqdn">ftp.FreeBSD.org. You can do this in three
ways:Use the CTM facility. Unless
you have a good TCP/IP connection at a flat rate, this is
the way to do it.Use the cvsup program with
this
supfile. This is the second most recommended
method, since it allows you to grab the entire collection
once and then only what has changed from then on. Many people
run cvsup from cron and keep their sources up-to-date
automatically. For a fairly easy interface to this, simply
type:
Use ftp. The source tree for
FreeBSD-current is always “exported” on: ftp://ftp.FreeBSD.ORG/pub/FreeBSD/FreeBSD-current.
+ URL="ftp://ftp.FreeBSD.org/pub/FreeBSD/FreeBSD-current">ftp://ftp.FreeBSD.org/pub/FreeBSD/FreeBSD-current.
We also use wu-ftpd which allows
compressed/tar'd grabbing of whole trees. e.g. you
see:usr.bin/lexYou can do:
ftp>cd usr.binftp>get lex.tar.Z
and it will get the whole directory for you as a compressed
tar file.Essentially, if you need rapid on-demand access to the source
and communications bandwidth is not a consideration, use
cvsup or ftp. Otherwise,
use CTM.If you are grabbing the sources to run, and not just look at,
then grab all of current, not just selected
portions. The reason for this is that various parts of the source
depend on updates elsewhere, and trying to compile just a subset
is almost guaranteed to get you into trouble.Before compiling current, read the Makefile in
/usr/src carefully. You should at least run
a make world the first time
through as part of the upgrading process. Reading the &a.current;
will keep you up-to-date on other bootstrapping procedures that
sometimes become necessary as we move towards the next
release.Be active! If you are running FreeBSD-current, we want to
know what you have to say about it, especially if you have
suggestions for enhancements or bug fixes. Suggestions with
accompanying code are received most enthusiastically!Staying Stable with FreeBSDContributed by &a.jkh;.What is FreeBSD-stable?FreeBSD-stable is our development branch for a more low-key and
conservative set of changes intended for our next mainstream release.
Changes of an experimental or untested nature do not go into this
branch (see FreeBSD-current).Who needs FreeBSD-stable?If you are a commercial user or someone who puts maximum stability
of their FreeBSD system before all other concerns, you should consider
tracking stable. This is especially true if you
have installed the most recent release (&rel.current;-RELEASE
at the time of this writing) since the stable
branch is effectively a bug-fix stream relative to the previous
release.The stable tree endeavors, above all, to be
fully compilable and stable at all times, but we do occasionally
make mistakes (these are still active sources with
quickly-transmitted updates, after all). We also do our best to
thoroughly test fixes in current before
bringing them into stable, but sometimes our
tests fail to catch every case. If something breaks for you in
stable, please let us know
immediately! (see next section).Using FreeBSD-stableJoin the &a.stable;. This will keep you informed of
build-dependencies that may appear in stable
or any other issues requiring special attention. Developers will
also make announcements in this mailing list when they are
contemplating some controversial fix or update, giving the users a
chance to respond if they have any issues to raise concerning the
proposed change.The cvs-all mailing list will allow you to see
the commit log entry for each change as it is made along with any
pertinent information on possible side-effects.To join these lists, send mail to &a.majordomo; and specify:
subscribe freebsd-stable
subscribe cvs-all
in the body of your message. Optionally, you can also say
help and Majordomo will send you full help on
how to subscribe and unsubscribe to the various other mailing
lists we support.If you are installing a new system and want it to be as stable
as possible, you can simply grab the latest dated branch snapshot
from ftp://releng3.FreeBSD.org/pub/FreeBSD/
and install it like any other release.If you are already running a previous release of 2.2 and wish
to upgrade via sources then you can easily do so from ftp.FreeBSD.ORG. This can be done in one
+ role="fqdn">ftp.FreeBSD.org. This can be done in one
of three ways:Use the CTM facility. Unless
you have a good TCP/IP connection at a flat rate, this is
the way to do it.Use the cvsup program with
this
supfile. This is the second most recommended
method, since it allows you to grab the entire collection
once and then only what has changed from then on. Many people
run cvsup from cron to keep their sources up-to-date
automatically. For a fairly easy interface to this, simply
type;
Use ftp. The source tree for
FreeBSD-stable is always “exported” on: ftp://ftp.FreeBSD.ORG/pub/FreeBSD/FreeBSD-stable
+ URL="ftp://ftp.FreeBSD.org/pub/FreeBSD/FreeBSD-stable">ftp://ftp.FreeBSD.org/pub/FreeBSD/FreeBSD-stable
We also use wu-ftpd which allows
compressed/tar'd grabbing of whole trees. e.g. you
see:usr.bin/lexYou can do:
ftp>cd usr.binftp>get lex.tar.Z
and it will get the whole directory for you as a compressed
tar file.Essentially, if you need rapid on-demand access to the source
and communications bandwidth is not a consideration, use
cvsup or ftp. Otherwise,
use CTM.Before compiling stable, read the Makefile in
/usr/src carefully. You should at least run
a make world the first time
through as part of the upgrading process. Reading the &a.stable;
will keep you up-to-date on other bootstrapping procedures that
sometimes become necessary as we move towards the next
release.Synchronizing Source Trees over the InternetContributed by &a.jkh;.There are various ways of using an Internet (or email) connection to
stay up-to-date with any given area of the FreeBSD project sources, or
all areas, depending on what interests you. The primary services we
offer are Anonymous CVS, CVSup, and CTM.Anonymous CVS and
CVSup use the pull model
of updating sources. In the case of CVSup
the user (or a cron script) invokes the cvsup
program, and it interacts with a cvsupd server
somewhere to bring your files up to date. The updates you receive are
up-to-the-minute and you get them when, and only when, you want them.
You can easily restrict your updates to the specific files or
directories that are of interest to you. Updates are generated on the
fly by the server, according to what you have and what you want to have.
Anonymous CVS is quite a bit more simplistic
than CVSup in that it's just an extension to
CVS which allows it to pull changes directly
from a remote CVS repository. CVSup can do
this far more efficiently, but Anonymous CVS
is easier to use.CTM, on the other hand, does not
interactively compare the sources you have with those on the master
archive or otherwise pull them across.. Instead, a script which
identifies changes in files since its previous run is executed several
times a day on the master CTM machine, any detected changes being
compressed, stamped with a sequence-number and encoded for transmission
over email (in printable ASCII only). Once received, these “CTM
deltas” can then be handed to the &man.ctm.rmail.1; utility which
will automatically decode,
verify and apply the changes to the user's copy of the sources. This
process is far more efficient than CVSup, and
places less strain on our server resources since it is a
push rather than a pull
model.There are other trade-offs, of course. If you inadvertently wipe
out portions of your archive, CVSup will
detect and rebuild the damaged portions for you.
CTM won't do this, and if you wipe some
portion of your source tree out (and don't have it backed up) then you
will have to start from scratch (from the most recent CVS “base
delta”) and rebuild it all with CTM or, with anoncvs, simply
delete the bad bits and resync.For more information on Anonymous CVS,
CTM, and CVSup,
please see one of the following sections:Anonymous CVSContributed by &a.jkh;IntroductionAnonymous CVS (or, as it is otherwise known,
anoncvs) is a feature provided by the CVS
utilities bundled with FreeBSD for synchronizing with a remote CVS
repository. Among other things, it allows users of FreeBSD to
perform, with no special privileges, read-only CVS operations
against one of the FreeBSD project's official anoncvs servers. To
use it, one simply sets the CVSROOT environment
variable to point at the appropriate anoncvs server and then uses
the &man.cvs.1; command to access it like any local
repository.While it can also be said that the CVSup and anoncvs
services both perform essentially the same function, there are
various trade-offs which can influence the user's choice of
synchronization methods. In a nutshell,
CVSup is much more efficient in its usage
of network resources and is by far the most technically
sophisticated of the two, but at a price. To use
CVSup, a special client must first be
installed and configured before any bits can be grabbed, and then
only in the fairly large chunks which
CVSup calls
collections.Anoncvs, by contrast, can be used to
examine anything from an individual file to a specific program (like
ls or grep) by referencing the
CVS module name. Of course, anoncvs is
also only good for read-only operations on the CVS repository, so if
it's your intention to support local development in one repository
shared with the FreeBSD project bits then
CVSup is really your only option.Using Anonymous CVSConfiguring &man.cvs.1; to use an Anonymous CVS repository is a
simple matter of setting the CVSROOT environment
variable to point to one of the FreeBSD project's
anoncvs servers. At the time of this writing,
the following servers are available:USA:
anoncvs@anoncvs.FreeBSD.org:/cvsSince CVS allows one to “check out” virtually any
version of the FreeBSD sources that ever existed (or, in some cases,
will exist :), you need to be familiar with the
revision () flag to &man.cvs.1; and what some of
the permissible values for it in the FreeBSD Project repository
are.There are two kinds of tags, revision tags and branch tags. A
revision tag refers to a specific revision. Its meaning stays the
same from day to day. A branch tag, on the other hand, refers to
the latest revision on a given line of development, at any given
time. Because a branch tag does not refer to a specific revision,
it may mean something different tomorrow than it means today.Here are the branch tags that users might be interested
in:HEADSymbolic name for the main line, or FreeBSD-current. Also
the default when no revision is specified.RELENG_3The line of development for FreeBSD-3.x, also known as
FreeBSD-stable. Not valid for the ports collection.RELENG_2_2The line of development for FreeBSD-2.2.x, also known as
2.2-stable. This branch is mostly obsolete. Not valid for
the ports collection.RELENG_2_1_0The line of development for FreeBSD-2.1.x - this branch is
largely obsolete. Not valid for the ports collection.Here are the revision tags that users might be interested
in:RELENG_3_2_0_RELEASEFreeBSD-3.2. Not valid for the ports collection.RELENG_3_1_0_RELEASEFreeBSD-3.1. Not valid for the ports collection.RELENG_3_0_0_RELEASEFreeBSD-3.0. Not valid for the ports collection.RELENG_2_2_8_RELEASEFreeBSD-2.2.8. Not valid for the ports collection.RELENG_2_2_7_RELEASEFreeBSD-2.2.7. Not valid for the ports collection.RELENG_2_2_6_RELEASEFreeBSD-2.2.6. Not valid for the ports collection.RELENG_2_2_5_RELEASEFreeBSD-2.2.5. Not valid for the ports collection.RELENG_2_2_2_RELEASEFreeBSD-2.2.2. Not valid for the ports collection.RELENG_2_2_1_RELEASEFreeBSD-2.2.1. Not valid for the ports collection.RELENG_2_2_0_RELEASEFreeBSD-2.2.0. Not valid for the ports collection.RELENG_2_1_7_RELEASEFreeBSD-2.1.7. Not valid for the ports collection.RELENG_2_1_6_1_RELEASEFreeBSD-2.1.6.1. Not valid for the ports
collection.RELENG_2_1_6_RELEASEFreeBSD-2.1.6. Not valid for the ports collection.RELENG_2_1_5_RELEASEFreeBSD-2.1.5. Not valid for the ports collection.RELENG_2_1_0_RELEASEFreeBSD-2.1.0. Not valid for the ports collection.When you specify a branch tag, you normally receive the latest
versions of the files on that line of development. If you wish to
receive some past version, you can do so by specifying a date with
the flag. See the &man.cvs.1; man page
for more details.ExamplesWhile it really is recommended that you read the manual page for
&man.cvs.1; thoroughly before doing anything, here are some
quick examples which essentially show how to use Anonymous
CVS:Checking out something from -current (&man.ls.1;) and
deleting it again:
&prompt.user; setenv CVSROOT anoncvs@anoncvs.FreeBSD.org:/cvs
&prompt.user; cvs co ls
&prompt.user; cvs release -d lsChecking out the version of ls(1) in the 2.2-stable
branch:
&prompt.user; setenv CVSROOT anoncvs@anoncvs.FreeBSD.org:/cvs
&prompt.user; cvs co -rRELENG_2_2 ls
&prompt.user; cvs release -d lsCreating a list of changes (as unidiffs) to &man.ls.1;
&prompt.user; setenv CVSROOT anoncvs@anoncvs.FreeBSD.org:/cvs
&prompt.user; cvs rdiff -u -rRELENG_2_2_2_RELEASE -rRELENG_2_2_6_RELEASE lsFinding out what other module names can be used:
&prompt.user; setenv CVSROOT anoncvs@anoncvs.FreeBSD.org:/cvs
&prompt.user; cvs co modules
&prompt.user; more modules/modules
&prompt.user; cvs release -d modulesOther ResourcesThe following additional resources may be helpful in learning
CVS:CVS Tutorial from Cal Poly.Cyclic Software,
commercial maintainers of CVS.CVSWeb is
the FreeBSD Project web interface for CVS.CTMContributed by &a.phk;. Updated
19-October-1997.CTM is a method for keeping a remote
directory tree in sync with a central one. It has been developed for
usage with FreeBSD's source trees, though other people may find it
useful for other purposes as time goes by. Little, if any,
documentation currently exists at this time on the process of creating
deltas, so talk to &a.phk; for more information should you wish to use
CTM for other things.Why should I use CTM?CTM will give you a local copy of the
FreeBSD source trees. There are a number of “flavors”
of the tree available. Whether you wish to track the entire cvs
tree or just one of the branches, CTM can
provide you the information. If you are an active developer on
FreeBSD, but have lousy or non-existent TCP/IP connectivity, or
simply wish to have the changes automatically sent to you,
CTM was made for you. You will need to
obtain up to three deltas per day for the most active branches.
However, you should consider having them sent by automatic email.
The sizes of the updates are always kept as small as possible. This
is typically less than 5K, with an occasional (one in ten) being
10-50K and every now and then a biggie of 100K+ or more coming
around.You will also need to make yourself aware of the various caveats
related to working directly from the development sources rather than
a pre-packaged release. This is particularly true if you choose the
“current” sources. It is recommended that you read
Staying current with FreeBSD.What do I need to use CTM?You will need two things: The CTM
program and the initial deltas to feed it (to get up to
“current” levels).The CTM program has been part of
FreeBSD ever since version 2.0 was released, and lives in
/usr/src/usr.sbin/CTM if you have a copy of the
source online.If you are running a pre-2.0 version of FreeBSD, you can fetch
the current CTM sources directly
from:ftp://ftp.FreeBSD.ORG/pub/FreeBSD/FreeBSD-current/src/usr.sbin/ctm
+ URL="ftp://ftp.FreeBSD.org/pub/FreeBSD/FreeBSD-current/src/usr.sbin/ctm">ftp://ftp.FreeBSD.org/pub/FreeBSD/FreeBSD-current/src/usr.sbin/ctm
The “deltas” you feed CTM
can be had two ways, FTP or e-mail. If you have general FTP access
to the Internet then the following FTP sites support access to
CTM:ftp://ftp.FreeBSD.ORG/pub/FreeBSD/CTM
+ URL="ftp://ftp.FreeBSD.org/pub/FreeBSD/CTM">ftp://ftp.FreeBSD.org/pub/FreeBSD/CTM
or see section mirrors.FTP the relevant directory and fetch the
README file, starting from there.If you may wish to get your deltas via email:Send email to &a.majordomo; to subscribe to one of the
CTM distribution lists.
“ctm-cvs-cur” supports the entire cvs tree.
“ctm-src-cur” supports the head of the development
branch. “ctm-src-2_2” supports the 2.2 release branch,
etc. (If you do not know how to subscribe yourself using majordomo,
send a message first containing the word help
— it will send you back usage instructions.)When you begin receiving your CTM
updates in the mail, you may use the ctm_rmail
program to unpack and apply them. You can actually use the
ctm_rmail program directly from a entry in
/etc/aliases if you want to have the process
run in a fully automated fashion. Check the
ctm_rmail man page for more details.No matter what method you use to get the
CTM deltas, you should subscribe to the
- ctm-announce@FreeBSD.ORG mailing list. In the
+ ctm-announce@FreeBSD.org mailing list. In the
future, this will be the only place where announcements concerning
the operations of the CTM system will
be posted. Send an email to &a.majordomo; with a single line of
subscribe ctm-announce to get added to the
list.Starting off with CTM for the first
timeBefore you can start using CTM
deltas, you will need to get to a starting point for the deltas
produced subsequently to it.First you should determine what you already have. Everyone can
start from an “empty” directory. You must use an
initial “Empty&rdquo delta to start off your
CTM supported tree. At some point it is
intended that one of these “started” deltas be
distributed on the CD for your convenience. This does not currently
happen however.However, since the trees are many tens of megabytes, you should
prefer to start from something already at hand. If you have a
RELEASE CD, you can copy or extract an initial source from it. This
will save a significant transfer of data.You can recognize these “starter” deltas by the
X appended to the number
(src-cur.3210XEmpty.gz for instance). The
designation following the X corresponds to the
origin of your initial “seed”.
Empty is an empty directory. As a rule a base
transition from Empty is produced every 100
deltas. By the way, they are large! 25 to 30 Megabytes of
gzip'ed data is common for the
XEmpty deltas.Once you've picked a base delta to start from, you will also
need all deltas with higher numbers following it.Using CTM in your daily lifeTo apply the deltas, simply say:&prompt.root; cd /where/ever/you/want/the/stuff
&prompt.root; ctm -v -v /where/you/store/your/deltas/src-xxx.*CTM understands deltas which have
been put through gzip, so you do not need to
gunzip them first, this saves disk space.Unless it feels very secure about the entire process,
CTM will not touch your tree. To verify
a delta you can also use the flag and
CTM will not actually touch your tree; it
will merely verify the integrity of the delta and see if it would
apply cleanly to your current tree.There are other options to CTM as
well, see the manual pages or look in the sources for more
information.I would also be very happy if somebody could help with the
“user interface” portions, as I have realized that I
cannot make up my mind on what options should do what, how and
when...That's really all there is to it. Every time you get a new
delta, just run it through CTM to keep
your sources up to date.Do not remove the deltas if they are hard to download again. You
just might want to keep them around in case something bad happens.
Even if you only have floppy disks, consider using
fdwrite to make a copy.Keeping your local changesAs a developer one would like to experiment with and change
files in the source tree. CTM supports
local modifications in a limited way: before checking for the
presence of a file foo, it first looks for
foo.ctm. If this file exists, CTM will operate
on it instead of foo.This behaviour gives us a simple way to maintain local changes:
simply copy the files you plan to modify to the corresponding file
names with a .ctm suffix. Then you can freely
hack the code, while CTM keeps the .ctm file
up-to-date.Other interesting CTM optionsFinding out exactly what would be touched by an
updateYou can determine the list of changes that
CTM will make on your source repository
using the option to
CTM.This is useful if you would like to keep logs of the changes,
pre- or post- process the modified files in any manner, or just
are feeling a tad paranoid :-).Making backups before updatingSometimes you may want to backup all the files that would be
changed by a CTM update.Specifying the option causes
CTM to backup all files that would be
touched by a given CTM delta to
backup-file.Restricting the files touched by an updateSometimes you would be interested in restricting the scope of
a given CTM update, or may be
interested in extracting just a few files from a sequence of
deltas.You can control the list of files that
CTM would operate on by specifying
filtering regular expressions using the and
options.For example, to extract an up-to-date copy of
lib/libc/Makefile from your collection of
saved CTM deltas, run the commands:&prompt.root; cd /where/ever/you/want/to/extract/it/
&prompt.root; ctm -e '^lib/libc/Makefile' ~ctm/src-xxx.*For every file specified in a CTM
delta, the and options are
applied in the order given on the command line. The file is
processed by CTM only if it is marked
as eligible after all the and
options are applied to it.Future plans for CTMTons of them:Use some kind of authentication into the CTM system, so as
to allow detection of spoofed CTM updates.Clean up the options to CTM, they
became confusing and counter intuitive.The bad news is that I am very busy, so any help in doing this
will be most welcome. And do not forget to tell me what you want
also...Miscellaneous stuffAll the “DES infected” (e.g. export controlled)
source is not included. You will get the
“international” version only. If sufficient interest
appears, we will set up a sec-cur sequence too.
There is a sequence of deltas for the ports
collection too, but interest has not been all that high yet. Tell me
if you want an email list for that too and we will consider setting
it up.Thanks!&a.bde;for his pointed pen and invaluable comments.&a.sos;for patience.Stephen McKaywrote ctm_[rs]mail, much
appreciated.&a.jkh;for being so stubborn that I had to make it better.All the usersI hope you like it...CVSupContributed by &a.jdp;.IntroductionCVSup is a software package for
distributing and updating source trees from a master CVS repository
on a remote server host. The FreeBSD sources are maintained in a
CVS repository on a central development machine in California. With
CVSup, FreeBSD users can easily keep
their own source trees up to date.CVSup uses the so-called
pull model of updating. Under the pull model,
each client asks the server for updates, if and when they are
wanted. The server waits passively for update requests from its
clients. Thus all updates are instigated by the client. The server
never sends unsolicited updates. Users must either run the
CVSup client manually to get an update,
or they must set up a cron job to run it
automatically on a regular basis.The term CVSup, capitalized just so,
refers to the entire software package. Its main components are the
client cvsup which runs on each user's machine,
and the server cvsupd which runs at each of the
FreeBSD mirror sites.As you read the FreeBSD documentation and mailing lists, you may
see references to sup.
Sup was the predecessor of
CVSup, and it served a similar purpose.
CVSup is in used in much the same way as
sup and, in fact, uses configuration files which are
backward-compatible with sup's.
Sup is no longer used in the FreeBSD
project, because CVSup is both faster and
more flexible.InstallationThe easiest way to install CVSup if
you are running FreeBSD 2.2 or later is to use either the
port from the FreeBSD ports
collection or the corresponding binary
package, depending on whether you prefer to roll your own
or not.If you are running FreeBSD-2.1.6 or 2.1.7, you unfortunately
cannot use the binary package versions due to the fact that they
require a version of the C library that does not yet exist in
FreeBSD-2.1.{6,7}. You can easily use the
port, however, just as with FreeBSD 2.2. Simply unpack
the tar file, cd to the cvsup subdirectory and type make
install.Because CVSup is written in Modula-3,
both the package and the port require that the Modula-3 runtime
libraries be installed. These are available as the lang/modula-3-lib port and the lang/modula-3-lib-3.6 package.
If you follow the same directions as for cvsup,
these libraries will be compiled and/or installed automatically when
you install the CVSup port or
package.The Modula-3 libraries are rather large, and fetching and
compiling them is not an instantaneous process. For that reason, a
third option is provided. You can get statically
linked FreeBSD executables for
CVSup from the USA distribution
site:ftp://ftp.FreeBSD.org/pub/FreeBSD/development/CVSup/cvsup-bin-16.0.tar.gz (client including GUI).ftp://ftp.FreeBSD.org/pub/FreeBSD/development/CVSup/cvsup.nogui-bin-16.0.tar.gz (client without GUI).ftp://ftp.FreeBSD.org/pub/FreeBSD/development/CVSup/cvsupd-bin-16.0.tar.gz (server).as well as from the many FreeBSD FTP
mirror sites around the world.Most users will need only the client. These executables are
entirely self-contained, and they will run on any version of FreeBSD
from FreeBSD-2.1.0 to FreeBSD-current.In summary, your options for installing CVSup are:FreeBSD-2.2 or later: static binary, port, or
packageFreeBSD-2.1.6, 2.1.7: static binary or portFreeBSD-2.1.5 or earlier: static binaryCVSup ConfigurationCVSup's operation is controlled by a
configuration file called the supfile.
Beginning with FreeBSD-2.2, there are some sample
supfiles in the directory /usr/share/examples/cvsup.
These examples are also available from ftp://ftp.FreeBSD.org/pub/FreeBSD/FreeBSD-current/src/share/examples/cvsup/ if you are on a pre-2.2 system.The information in a supfile answers the
following questions for cvsup:Which files do you want
to receive?Which versions of them do
you want?Where do you want to get
them from?Where do you want to put
them on your own machine?Where do you want to put
your status files?In the following sections, we will construct a typical
supfile by answering each of these questions in
turn. First, we describe the overall structure of a
supfile.A supfile is a text file. Comments begin
with # and extend to the end of the line. Lines
that are blank and lines that contain only comments are
ignored.Each remaining line describes a set of files that the user
wishes to receive. The line begins with the name of a
“collection”, a logical grouping of files defined by the
server. The name of the collection tells the server which files you
want. After the collection name come zero or more fields, separated
by white space. These fields answer the questions listed above.
There are two types of fields: flag fields and value fields. A flag
field consists of a keyword standing alone, e.g.,
delete or compress. A value
field also begins with a keyword, but the keyword is followed
without intervening white space by = and a second
word. For example, release=cvs is a value
field.A supfile typically specifies more than one
collection to receive. One way to structure a
supfile is to specify all of the relevant
fields explicitly for each collection. However, that tends to make
the supfile lines quite long, and it is
inconvenient because most fields are the same for all of the
collections in a supfile.
CVSup provides a defaulting mechanism to
avoid these problems. Lines beginning with the special
pseudo-collection name *default can be used to
set flags and values which will be used as defaults for the
subsequent collections in the supfile. A
default value can be overridden for an individual collection, by
specifying a different value with the collection itself. Defaults
can also be changed or augmented in mid-supfile by additional
*default lines.With this background, we will now proceed to construct a
supfile for receiving and updating the main
source tree of FreeBSD-current.Which files do you want to receive?The files available via CVSup are
organized into named groups called “collections”.
The collections that are available are described here. In this example, we wish
to receive the entire main source tree for the FreeBSD system.
There is a single large collection src-all
which will give us all of that, except the export-controlled
cryptography support. Let us assume for this example that we
are in the USA or Canada. Then we can get the cryptography code
with one additional collection, cvs-crypto.
As a first step toward constructing our
supfile, we simply list these collections,
one per line:
src-all
cvs-cryptoWhich version(s) of them do you want?With CVSup, you can receive
virtually any version of the sources that ever existed. That is
possible because the cvsupd server works directly from the CVS
repository, which contains all of the versions. You specify
which one of them you want using the tag= and
value fields.Be very careful to specify any tag=
fields correctly. Some tags are valid only for certain
collections of files. If you specify an incorrect or
misspelled tag, CVSup will delete files which you probably do
not want deleted. In particular, use only
tag=. for the
ports-* collections.The tag= field names a symbolic tag in
the repository. There are two kinds of tags, revision tags and
branch tags. A revision tag refers to a specific revision. Its
meaning stays the same from day to day. A branch tag, on the
other hand, refers to the latest revision on a given line of
development, at any given time. Because a branch tag does not
refer to a specific revision, it may mean something different
tomorrow than it means today.Here are the branch tags that users might be interested
in:tag=.The main line of development, also known as
FreeBSD-current.The . is not punctuation; it is
the name of the tag. Valid for all collections.RELENG_3The line of development for FreeBSD-3.x, also known as
FreeBSD-stable. Not valid for the ports
collection.RELENG_2_2The line of development for FreeBSD-2.2.x, also known
as 2.2-stable. Not valid for the ports collection.tag=RELENG_2_1_0The line of development for FreeBSD-2.1.x - this
branch is largely obsolete. Not valid for the ports-*
collections.Here are the revision tags that users might be interested
in:tag=RELENG_3_2_0_RELEASEFreeBSD-3.2. Not valid for the ports-*
collections.tag=RELENG_3_1_0_RELEASEFreeBSD-3.1. Not valid for the ports-*
collections.tag=RELENG_3_0_0_RELEASEFreeBSD-3.0. Not valid for the ports-*
collections.tag=RELENG_2_2_8_RELEASEFreeBSD-2.2.8. Not valid for the ports-*
collections.tag=RELENG_2_2_7_RELEASEFreeBSD-2.2.7. Not valid for the ports-*
collections.tag=RELENG_2_2_6_RELEASEFreeBSD-2.2.6. Not valid for the ports-*
collections.tag=RELENG_2_2_5_RELEASEFreeBSD-2.2.5. Not valid for the ports-*
collections.tag=RELENG_2_2_2_RELEASEFreeBSD-2.2.2. Not valid for the ports-*
collections.tag=RELENG_2_2_1_RELEASEFreeBSD-2.2.1. Not valid for the ports-*
collections.tag=RELENG_2_2_0_RELEASEFreeBSD-2.2.0. Not valid for the ports-*
collections.tag=RELENG_2_1_7_RELEASEFreeBSD-2.1.7. Not valid for the ports-*
collections.tag=RELENG_2_1_6_1_RELEASEFreeBSD-2.1.6.1. Not valid for the ports-*
collections.tag=RELENG_2_1_6_RELEASEFreeBSD-2.1.6. Not valid for the ports-*
collections.tag=RELENG_2_1_5_RELEASEFreeBSD-2.1.5. Not valid for the ports-*
collections.tag=RELENG_2_1_0_RELEASEFreeBSD-2.1.0. Not valid for the ports-*
collections.Be very careful to type the tag name exactly as shown.
CVSup cannot distinguish between
valid and invalid tags. If you misspell the tag,
CVSup will behave as though you had
specified a valid tag which happens to refer to no files at
all. It will delete your existing sources in that
case.When you specify a branch tag, you normally receive the
latest versions of the files on that line of development. If
you wish to receive some past version, you can do so by
specifying a date with the value field.
The &man.cvsup.1; manual page explains how to do
that.For our example, we wish to receive FreeBSD-current. We add
this line at the beginning of our
supfile:
*default tag=.There is an important special case that comes into play if
you specify neither a tag= field nor a
date= field. In that case, you receive the
actual RCS files directly from the server's CVS repository,
rather than receiving a particular version. Developers
generally prefer this mode of operation. By maintaining a copy
of the repository itself on their systems, they gain the ability
to browse the revision histories and examine past versions of
files. This gain is achieved at a large cost in terms of disk
space, however.Where do you want to get them from?We use the host= field to tell
cvsup where to obtain its updates. Any of
the CVSup mirror sites will
do, though you should try to select one that is close to you in
cyberspace. In this example we will use a fictional FreeBSD
distribution site, cvsup666.FreeBSD.org:
*default host=cvsup666.FreeBSD.orgYou will need to change the host to one that actually exists
before running CVSup. On any particular run of
cvsup, you can override the host setting on
the command line, with .Where do you want to put them on your own machine?The prefix= field tells
cvsup where to put the files it receives. In
this example, we will put the source files directly into our
main source tree, /usr/src. The
src directory is already implicit in the
collections we have chosen to receive, so this is the correct
specification:
*default prefix=/usrWhere should cvsup maintain its status
files?The cvsup client maintains certain status files in what is
called the “base” directory. These files help
CVSup to work more efficiently, by
keeping track of which updates you have already received. We
will use the standard base directory,
/usr/local/etc/cvsup:
*default base=/usr/local/etc/cvsupThis setting is used by default if it is not specified in
the supfile, so we actually do not need the
above line.If your base directory does not already exist, now would be
a good time to create it. The cvsup client
will refuse to run if the base directory does not exist.Miscellaneous supfile settings:There is one more line of boiler plate that normally needs
to be present in the supfile:
*default release=cvs delete use-rel-suffix compressrelease=cvs indicates that the server
should get its information out of the main FreeBSD CVS
repository. This is virtually always the case, but there are
other possibilities which are beyond the scope of this
discussion.delete gives
CVSup permission to delete files.
You should always specify this, so that
CVSup can keep your source tree fully
up to date. CVSup is careful to
delete only those files for which it is responsible. Any extra
files you happen to have will be left strictly alone.use-rel-suffix is ... arcane. If you
really want to know about it, see the &man.cvsup.1; manual page.
Otherwise, just specify it and do not worry about it.compress enables the use of gzip-style
compression on the communication channel. If your network link
is T1 speed or faster, you probably should not use compression.
Otherwise, it helps substantially.Putting it all together:Here is the entire supfile for our
example:
*default tag=.
*default host=cvsup666.FreeBSD.org
*default prefix=/usr
*default base=/usr/local/etc/cvsup
*default release=cvs delete use-rel-suffix compress
src-all
cvs-cryptoRunning CVSupYou are now ready to try an update. The command line for doing
this is quite simple:&prompt.root; cvsup supfilewhere supfile is
of course the name of the supfile you have just created. Assuming
you are running under X11, cvsup will display a
GUI window with some buttons to do the usual things. Press the
“go” button, and watch it run.Since you are updating your actual /usr/src
tree in this example, you will need to run the program as
root so that cvsup has the
permissions it needs to update your files. Having just created your
configuration file, and having never used this program before, that
might understandably make you nervous. There is an easy way to do a
trial run without touching your precious files. Just create an
empty directory somewhere convenient, and name it as an extra
argument on the command line:&prompt.root; mkdir /var/tmp/dest
&prompt.root; cvsup supfile /var/tmp/destThe directory you specify will be used as the destination
directory for all file updates. CVSup
will examine your usual files in /usr/src, but
it will not modify or delete any of them. Any file updates will
instead land in /var/tmp/dest/usr/src.
CVSup will also leave its base directory
status files untouched when run this way. The new versions of those
files will be written into the specified directory. As long as you
have read access to /usr/src, you do not even
need to be root to perform this kind of trial run.If you are not running X11 or if you just do not like GUIs, you
should add a couple of options to the command line when you run
cvsup:&prompt.root; cvsup -g -L 2 supfileThe tells cvsup not to use its GUI. This is
automatic if you are not running X11, but otherwise you have to
specify it.The tells cvsup to print out the details
of all the file updates it is doing. There are three levels of
verbosity, from to . The
default is 0, which means total silence except for error
messages.There are plenty of other options available. For a brief list
of them, type cvsup -H. For more detailed
descriptions, see the manual page.Once you are satisfied with the way updates are working, you can
arrange for regular runs of cvsup using &man.cron.8;.
Obviously, you should not let cvsup use its GUI when running it from
cron.CVSup File CollectionsThe file collections available via
CVSup are organized hierarchically.
There are a few large collections, and they are divided into smaller
sub-collections. Receiving a large collection is equivalent to
receiving each of its sub-collections. The hierarchical
relationships among collections are reflected by the use of
indentation in the list below.The most commonly used collections are
src-all, cvs-crypto, and
ports-all. The other collections are used only
by small groups of people for specialized purposes, and some mirror
sites may not carry all of them.cvs-all release=cvsThe main FreeBSD CVS repository, excluding the
export-restricted cryptography code.distrib release=cvsFiles related to the distribution and mirroring of
FreeBSD.doc-all release=cvsSources for the FreeBSD handbook and other
documentation.ports-all release=cvsThe FreeBSD ports collection.ports-archivers
release=cvsArchiving tools.ports-astro
release=cvsAstronomical ports.ports-audio
release=cvsSound support.ports-base release=cvsMiscellaneous files at the top of
/usr/ports.ports-benchmarks
release=cvsBenchmarks.ports-biology
release=cvsBiology.ports-cad release=cvsComputer aided design tools.ports-chinese
release=cvsChinese language support.ports-comms
release=cvsCommunication software.ports-converters
release=cvscharacter code converters.ports-databases
release=cvsDatabases.ports-deskutils
release=cvsThings that used to be on the desktop before
computers were invented.ports-devel
release=cvsDevelopment utilities.ports-editors
release=cvsEditors.ports-emulators
release=cvsEmulators for other operating systems.ports-games
release=cvsGames.ports-german
release=cvsGerman language support.ports-graphics
release=cvsGraphics utilities.ports-japanese
release=cvsJapanese language support.ports-korean
release=cvsKorean language support.ports-lang release=cvsProgramming languages.ports-mail release=cvsMail software.ports-math release=cvsNumerical computation software.ports-mbone
release=cvsMBone applications.ports-misc release=cvsMiscellaneous utilities.ports-net release=cvsNetworking software.ports-news release=cvsUSENET news software.ports-palm
release=cvsSoftware support for 3Com Palm(tm) series.ports-plan9
release=cvsVarious programs from Plan9.ports-print
release=cvsPrinting software.ports-russian
release=cvsRussian language support.ports-security
release=cvsSecurity utilities.ports-shells
release=cvsCommand line shells.ports-sysutils
release=cvsSystem utilities.ports-textproc
release=cvstext processing utilities (does not include
desktop publishing).ports-vietnamese
release=cvsVietnamese language support.ports-www release=cvsSoftware related to the World Wide Web.ports-x11 release=cvsPorts to support the X window system.ports-x11-clocks
release=cvsX11 clocks.ports-x11-fm
release=cvsX11 file managers.ports-x11-fonts
release=cvsX11 fonts and font utilities.ports-x11-toolkits
release=cvsX11 toolkits.ports-x11-wmX11 window managers.src-all release=cvsThe main FreeBSD sources, excluding the
export-restricted cryptography code.src-base release=cvsMiscellaneous files at the top of
/usr/src.src-bin release=cvsUser utilities that may be needed in
single-user mode
(/usr/src/bin).src-contrib
release=cvsUtilities and libraries from outside the
FreeBSD project, used relatively unmodified
(/usr/src/contrib).src-etc release=cvsSystem configuration files
(/usr/src/etc).src-games release=cvsGames
(/usr/src/games).src-gnu release=cvsUtilities covered by the GNU Public License
(/usr/src/gnu).src-include
release=cvsHeader files
(/usr/src/include).src-kerberosIV
release=cvsKerberosIV security package
(/usr/src/kerberosIV).src-lib release=cvsLibraries
(/usr/src/lib).src-libexec
release=cvsSystem programs normally executed by other
programs
(/usr/src/libexec).src-release
release=cvsFiles required to produce a FreeBSD release
(/usr/src/release).src-sbin release=cvsSystem utilities for single-user mode
(/usr/src/sbin).src-share release=cvsFiles that can be shared across multiple
systems
(/usr/src/share).src-sys release=cvsThe kernel
(/usr/src/sys).src-tools release=cvsVarious tools for the maintenance of FreeBSD
(/usr/src/tools).src-usrbin release=cvsUser utilities
(/usr/src/usr.bin).src-usrsbin
release=cvsSystem utilities
(/usr/src/usr.sbin).www release=cvsThe sources for the World Wide Web data.cvs-crypto release=cvsThe export-restricted cryptography code.src-crypto release=cvsExport-restricted utilities and libraries from
outside the FreeBSD project, used relatively unmodified
(/usr/src/crypto).src-eBones release=cvsKerberos and DES
(/usr/src/eBones).src-secure release=cvsDES (/usr/src/secure).distrib release=selfThe CVSup server's own configuration files. Used by CVSup
mirror sites.gnats release=currentThe GNATS bug-tracking database.mail-archive release=currentFreeBSD mailing list archive.www release=currentThe installed World Wide Web data. Used by WWW mirror
sites.For more informationFor the CVSup FAQ and other information about CVSup, see The CVSup
Home Page.Most FreeBSD-related discussion of
CVSup takes place on the &a.hackers;.
New versions of the software are announced there, as well as on the
&a.announce;.Questions and bug reports should be addressed to the author of
the program at cvsup-bugs@polstra.com.Using make world to rebuild your systemContributed by &a.nik;.Once you have synchronised your local source tree against a
particular version of FreeBSD (stable,
current and so on) you must then use the source tree
to rebuild the system.Currently, the best source of information on how to do that is a
tutorial available from http://www.nothing-going-on.demon.co.uk/FreeBSD/make-world/make-world.html.A successor to this tutorial will be integrated into the
handbook.
diff --git a/en_US.ISO_8859-1/books/handbook/eresources/chapter.sgml b/en_US.ISO_8859-1/books/handbook/eresources/chapter.sgml
index ce30750488..f2ee2fc5f1 100644
--- a/en_US.ISO_8859-1/books/handbook/eresources/chapter.sgml
+++ b/en_US.ISO_8859-1/books/handbook/eresources/chapter.sgml
@@ -1,1370 +1,1370 @@
Resources on the InternetContributed by &a.jkh;.The rapid pace of FreeBSD progress makes print media impractical as a
means of following the latest developments. Electronic resources are the
best, if not often the only, way stay informed of the latest advances.
Since FreeBSD is a volunteer effort, the user community itself also
generally serves as a “technical support department” of sorts,
with electronic mail and USENET news being the most effective way of
reaching that community.The most important points of contact with the FreeBSD user community
are outlined below. If you are aware of other resources not mentioned
here, please send them to the &a.doc;so that they may also be
included.Mailing listsThough many of the FreeBSD development members read USENET, we
cannot always guarantee that we will get to your questions in a timely
fashion (or at all) if you post them only to one of the
comp.unix.bsd.freebsd.* groups. By addressing your
questions to the appropriate mailing list you will reach both us and a
concentrated FreeBSD audience, invariably assuring a better (or at least
faster) response.The charters for the various lists are given at the bottom of this
document. Please read the charter before joining or sending
mail to any list. Most of our list subscribers now receive
many hundreds of FreeBSD related messages every day, and by setting down
charters and rules for proper use we are striving to keep the
signal-to-noise ratio of the lists high. To do less would see the
mailing lists ultimately fail as an effective communications medium for
the project.Archives are kept for all of the mailing lists and can be searched
- using the FreeBSD World
+ using the FreeBSD World
Wide Web server. The keyword searchable archive offers an
excellent way of finding answers to frequently asked questions and
should be consulted before posting a question.List summaryGeneral lists: The following are general
lists which anyone is free (and encouraged) to join:ListPurposefreebsd-advocacyFreeBSD Evangelismfreebsd-announceImportant events and project milestonesfreebsd-bugsBug reportsfreebsd-chatNon-technical items related to the FreeBSD
communityfreebsd-currentDiscussion concerning the use of
FreeBSD-currentfreebsd-ispIssues for Internet Service Providers using
FreeBSDfreebsd-jobsFreeBSD employment and consulting
opportunitiesfreebsd-newbiesNew FreeBSD users activities and discussionsfreebsd-policyFreeBSD Core team policy decisions. Low volume, and
read-onlyfreebsd-questionsUser questions and technical supportfreebsd-stableDiscussion concerning the use of
FreeBSD-stableTechnical lists: The following lists are for
technical discussion. You should read the charter for each list
carefully before joining or sending mail to one as there are firm
guidelines for their use and content.ListPurposefreebsd-afsPorting AFS to FreeBSDfreebsd-alphaPorting FreeBSD to the Alphafreebsd-docCreating FreeBSD related documentsfreebsd-databaseDiscussing database use and development under
FreeBSDfreebsd-emulationEmulation of other systems such as
Linux/DOS/Windowsfreebsd-fsFilesystemsfreebsd-hackersGeneral technical discussionfreebsd-hardwareGeneral discussion of hardware for running
FreeBSDfreebsd-ipfwTechnical discussion concerning the redesign of the IP
firewall codefreebsd-isdnISDN developersfreebsd-javaJava developers and people porting JDKs to
FreeBSDfreebsd-mobileDiscussions about mobile computingfreebsd-mozillaPorting mozilla to FreeBSDfreebsd-netNetworking discussion and TCP/IP/source codefreebsd-platformsConcerning ports to non-Intel architecture
platformsfreebsd-portsDiscussion of the ports collectionfreebsd-scsiThe SCSI subsystemfreebsd-securitySecurity issuesfreebsd-smallUsing FreeBSD in embedded applicationsfreebsd-smpDesign discussions for [A]Symmetric
MultiProcessingfreebsd-sparcPorting FreeBSD to Sparc systemsfreebsd-tokenringSupport Token Ring in FreeBSDLimited lists: The following lists require
- approval from core@FreeBSD.ORG to join, though anyone
+ approval from core@FreeBSD.org to join, though anyone
is free to send messages to them which fall within the scope of their
charters. It is also a good idea establish a presence in the
technical lists before asking to join one of these limited
lists.ListPurposefreebsd-adminAdministrative issuesfreebsd-archArchitecture and design discussionsfreebsd-coreFreeBSD core teamfreebsd-hubsPeople running mirror sites (infrastructural
support)freebsd-installInstallation developmentfreebsd-security-notificationsSecurity notificationsfreebsd-user-groupsUser group coordinationCVS lists: The following lists are for people
interested in seeing the log messages for changes to various areas of
the source tree. They are Read-Only lists and
should not have mail sent to them.ListSource areaArea Description (source for)cvs-all/usr/srcAll changes to the tree (superset)How to subscribeAll mailing lists live on FreeBSD.ORG, so to post to a given list you
+ role="fqdn">FreeBSD.org, so to post to a given list you
simply mail to
- <listname@FreeBSD.ORG>. It will then
+ <listname@FreeBSD.org>. It will then
be redistributed to mailing list members world-wide.To subscribe to a list, send mail to &a.majordomo; and include
subscribe <listname> [<optional address>]
in the body of your message. For example, to subscribe yourself to
freebsd-announce, you'd do:
- &prompt.user; mail majordomo@FreeBSD.ORG
+ &prompt.user; mail majordomo@FreeBSD.org
subscribe freebsd-announce
^DIf you want to subscribe yourself under a different name, or
submit a subscription request for a local mailing list (this is more
efficient if you have several interested parties at one site, and
highly appreciated by us!), you would do something like:
- &prompt.user; mail majordomo@FreeBSD.ORG
+ &prompt.user; mail majordomo@FreeBSD.org
subscribe freebsd-announce local-announce@somesite.com
^DFinally, it is also possible to unsubscribe yourself from a list,
get a list of other list members or see the list of mailing lists
again by sending other types of control messages to majordomo. For a
complete list of available commands, do this:
- &prompt.user; mail majordomo@FreeBSD.ORG
+ &prompt.user; mail majordomo@FreeBSD.org
help
^DAgain, we would like to request that you keep discussion in the
technical mailing lists on a technical track. If you are only
interested in the “high points” then it is suggested that
you join freebsd-announce, which is intended only for infrequent
traffic.List chartersAllFreeBSD mailing lists have certain basic
rules which must be adhered to by anyone using them. Failure to comply
with these guidelines will result in two (2) written warnings from the
FreeBSD Postmaster postmaster@FreeBSD.org, after which,
on a third offense, the poster will removed from all FreeBSD mailing
lists and filtered from further posting to them. We regret that such
rules and measures are necessary at all, but today's Internet is a
pretty harsh environment, it would seem, and many fail to appreciate
just how fragile some of its mechanisms are.Rules of the road:The topic of any posting should adhere to the basic charter of
the list it is posted to, e.g. if the list is about technical
issues then your posting should contain technical discussion.
Ongoing irrelevant chatter or flaming only detracts from the value
of the mailing list for everyone on it and will not be tolerated.
For free-form discussion on no particular topic, the freebsd-chat
freebsd-chat@FreeBSD.org mailing list is freely
available and should be used instead.No posting should be made to more than 2 mailing lists, and
only to 2 when a clear and obvious need to post to both lists
exists. For most lists, there is already a great deal of
subscriber overlap and except for the most esoteric mixes (say
"-stable & -scsi"), there really is no reason to post to more
than one list at a time. If a message is sent to you in such a
way that multiple mailing lists appear on the Cc line then the cc
line should also be trimmed before sending it out again.
You are still responsible for your
own cross-postings, no matter who the originator might have
been.Personal attacks and profanity (in the context of an argument)
are not allowed, and that includes users and developers alike.
Gross breaches of netiquette, like excerpting or reposting private
mail when permission to do so was not and would not be
forthcoming, are frowned upon but not specifically enforced.
However, there are also very few cases where
such content would fit within the charter of a list and it would
therefore probably rate a warning (or ban) on that basis
alone.Advertising of non-FreeBSD related products or services is
strictly prohibited and will result in an immediate ban if it is
clear that the offender is advertising by spam.Individual list charters:FREEBSD-AFSAndrew File SystemThis list is for discussion on porting and using AFS from
CMU/TransarcFREEBSD-ADMINAdministrative issuesThis list is purely for discussion of FreeBSD.org related issues and to
report problems or abuse of project resources. It is a closed
list, though anyone may report a problem (with our systems!) to
it.FREEBSD-ANNOUNCEImportant events / milestonesThis is the mailing list for people interested only in
occasional announcements of significant FreeBSD events. This
includes announcements about snapshots and other releases. It
contains announcements of new FreeBSD capabilities. It may
contain calls for volunteers etc. This is a low volume, strictly
moderated mailing list.FREEBSD-ARCHArchitecture and design
discussionsThis is a moderated list for discussion of FreeBSD
architecture. Messages will mostly be kept technical in nature,
with (rare) exceptions for other messages the moderator deems
need to reach all the subscribers of the list. Examples of
suitable topics;How to re-vamp the build system to have several
customized builds running at the same time.What needs to be fixed with VFS to make Heidemann layers
work.How do we change the device driver interface to be able
to use the ame drivers cleanly on many buses and
architectures?How do I write a network driver?The moderator reserves the right to do minor editing
(spell-checking, grammar correction, trimming) of messages that
are posted to the list. The volume of the list will be kept
low, which may involve having to delay topics until an active
discussion has been resolved.FREEBSD-BUGSBug reportsThis is the mailing list for reporting bugs in FreeBSD
Whenever possible, bugs should be submitted using the
&man.send-pr.1;
command or the WEB
interface to it.FREEBSD-CHATNon technical items related to the FreeBSD
communityThis list contains the overflow from the other lists about
non-technical, social information. It includes discussion about
whether Jordan looks like a toon ferret or not, whether or not
to type in capitals, who is drinking too much coffee, where the
best beer is brewed, who is brewing beer in their basement, and
so on. Occasional announcements of important events (such as
upcoming parties, weddings, births, new jobs, etc) can be made
to the technical lists, but the follow ups should be directed to
this -chat list.FREEBSD-COREFreeBSD core teamThis is an internal mailing list for use by the core
members. Messages can be sent to it when a serious
FreeBSD-related matter requires arbitration or high-level
scrutiny.FREEBSD-CURRENTDiscussions about the use of
FreeBSD-currentThis is the mailing list for users of freebsd-current. It
includes warnings about new features coming out in -current that
will affect the users, and instructions on steps that must be
taken to remain -current. Anyone running “current”
must subscribe to this list. This is a technical mailing list
for which strictly technical content is expected.FREEBSD-CURRENT-DIGESTDiscussions about the use of
FreeBSD-currentThis is the digest version of the freebsd-current mailing
list. The digest consists of all messages sent to
freebsd-current bundled together and mailed out as a single
message. The average digest size is about 40kB. This list is
Read-Only and should not be posted
to.FREEBSD-DOCDocumentation projectThis mailing list is for the discussion of issues and
projects related to the creation of documenation for FreeBSD.
The members of this mailing list are collectively referred to as
“The FreeBSD Documentation Project”. It is an open
list; feel free to join and contribute!FREEBSD-FSFilesystemsDiscussions concerning FreeBSD filesystems. This is a
technical mailing list for which strictly technical content is
expected.FREEBSD-IPFWIP FirewallThis is the forum for technical discussions concerning the
redesign of the IP firewall code in FreeBSD. This is a
technical mailing list for which strictly technical content is
expected.FREEBSD-ISDNISDN CommunicationsThis is the mailing list for people discussing the
development of ISDN support for FreeBSD.FREEBSD-JAVAJava DevelopmentThis is the mailing list for people discussing the
development of significant Java applications for FreeBSD and the
porting and maintenance of JDKs.FREEBSD-HACKERSTechnical discussionsThis is a forum for technical discussions related to
FreeBSD. This is the primary technical mailing list. It is for
individuals actively working on FreeBSD, to bring up problems or
discuss alternative solutions. Individuals interested in
following the technical discussion are also welcome. This is a
technical mailing list for which strictly technical content is
expected.FREEBSD-HACKERS-DIGESTTechnical discussionsThis is the digest version of the freebsd-hackers mailing
list. The digest consists of all messages sent to
freebsd-hackers bundled together and mailed out as a single
message. The average digest size is about 40kB. This list is
Read-Only and should not be posted
to.FREEBSD-HARDWAREGeneral discussion of FreeBSD
hardwareGeneral discussion about the types of hardware that FreeBSD
runs on, various problems and suggestions concerning what to buy
or avoid.FREEBSD-INSTALLInstallation discussionThis mailing list is for discussing FreeBSD installation
development for the future releases and is closed.FREEBSD-ISPIssues for Internet Service
ProvidersThis mailing list is for discussing topics relevant to
Internet Service Providers (ISPs) using FreeBSD. This is a
technical mailing list for which strictly technical content is
expected.FREEBSD-NEWBIESNewbies activities discussionWe cover any of the activities of newbies that are not
already dealt with elsewhere, including: independent learning
and problem solving techniques, finding and using resources and
asking for help elsewhere, how to use mailing lists and which
lists to use, general chat, making mistakes, boasting, sharing
ideas, stories, moral (but not technical) support, and taking an
active part in the FreeBSD community. We take our problems and
support questions to freebsd-questions, and use freebsd-newbies
to meet others who are doing the same things that we do as
newbies.FREEBSD-PLATFORMSPorting to Non-Intel platformsCross-platform FreeBSD issues, general discussion and
proposals for non-Intel FreeBSD ports. This is a technical
mailing list for which strictly technical content is
expected.FREEBSD-POLICYCore team policy decisionsThis is a low volume, read-only mailing list for FreeBSD
Core Team Policy decisions.FREEBSD-PORTSDiscussion of
“ports”Discussions concerning FreeBSD's “ports
collection” (/usr/ports), proposed
ports, modifications to ports collection infrastructure and
general coordination efforts. This is a technical mailing list
for which strictly technical content is expected.FREEBSD-QUESTIONSUser questionsThis is the mailing list for questions about FreeBSD. You
should not send “how to” questions to the technical
lists unless you consider the question to be pretty
technical.FREEBSD-QUESTIONS-DIGESTUser questionsThis is the digest version of the freebsd-questions mailing
list. The digest consists of all messages sent to
freebsd-questions bundled together and mailed out as a single
message. The average digest size is about 40kB.FREEBSD-SCSISCSI subsystemThis is the mailing list for people working on the scsi
subsystem for FreeBSD. This is a technical mailing list for
which strictly technical content is expected.FREEBSD-SECURITYSecurity issuesFreeBSD computer security issues (DES, Kerberos, known
security holes and fixes, etc). This is a technical mailing
list for which strictly technical content is expected.FREEBSD-SECURITY-NOTIFICATIONSSecurity Notifications
Notifications of FreeBSD security problems and fixes. This is
not a discussion list. The discussion list is
FreeBSD-security.FREEBSD-SMALLThis list discusses topics related to unusually small and
embedded FreeBSD installations. This is a technical mailing
list for which strictly technical content is expected.FREEBSD-STABLEDiscussions about the use of
FreeBSD-stableThis is the mailing list for users of freebsd-stable. It
includes warnings about new features coming out in -stable that
will affect the users, and instructions on steps that must be
taken to remain -stable. Anyone running “stable”
should subscribe to this list. This is a technical mailing list
for which strictly technical content is expected.FREEBSD-USER-GROUPSUser Group Coordination ListThis is the mailing list for the coordinators from each of
the local area Users Groups to discuss matters with each other
and a designated individual from the Core Team. This mail list
should be limited to meeting synopsis and coordination of
projects that span User Groups. It is a closed list.Usenet newsgroupsIn addition to two FreeBSD specific newsgroups, there are many
others in which FreeBSD is discussed or are otherwise relevant to
FreeBSD users. Keyword
searchable archives are available for some of these newsgroups
from courtesy of Warren Toomey wkt@cs.adfa.oz.au.BSD specific newsgroupscomp.unix.bsd.freebsd.announcecomp.unix.bsd.freebsd.miscOther Unix newsgroups of interestcomp.unixcomp.unix.questionscomp.unix.admincomp.unix.programmercomp.unix.shellcomp.unix.user-friendlycomp.security.unixcomp.sources.unixcomp.unix.advocacycomp.unix.misccomp.bugs.4bsdcomp.bugs.4bsd.ucb-fixescomp.unix.bsdX Window Systemcomp.windows.x.i386unixcomp.windows.xcomp.windows.x.appscomp.windows.x.announcecomp.windows.x.intrinsicscomp.windows.x.motifcomp.windows.x.pexcomp.emulators.ms-windows.wineWorld Wide Web servershttp://www.FreeBSD.ORG/
+ url="http://www.FreeBSD.org/">http://www.FreeBSD.org/
— Central Server.http://www.au.FreeBSD.org/FreeBSD/ — Australia/1.http://www2.au.FreeBSD.org/FreeBSD/ — Australia/2.http://www3.au.FreeBSD.org/FreeBSD/ — Australia/3.http://www.br.FreeBSD.org/www.freebsd.org/ — Brazil/1.
+ url="http://www.br.FreeBSD.org/www.FreeBSD.org/">http://www.br.FreeBSD.org/www.FreeBSD.org/ — Brazil/1.
http://www2.br.FreeBSD.org/www.freebsd.org/ — Brazil/2.
+ url="http://www2.br.FreeBSD.org/www.FreeBSD.org/">http://www2.br.FreeBSD.org/www.FreeBSD.org/ — Brazil/2.
http://www3.br.FreeBSD.org/ — Brazil/3.http://www.bg.FreeBSD.org/ — Bulgaria.http://www.ca.FreeBSD.org/ — Canada/1.http://FreeBSD.kawartha.com/ — Canada/2.http://www.dk.FreeBSD.org/ — Denmark.http://www.ee.FreeBSD.org/ — Estonia.http://www.fi.FreeBSD.org/ — Finland/1.http://www2.fi.FreeBSD.org/ — Finland/2.http://www.fr.FreeBSD.org/ — France.http://www.de.FreeBSD.org/ — Germany/1.http://www1.de.FreeBSD.org/ — Germany/2.http://www.de.FreeBSD.org/ — Germany/3.http://www.hu.FreeBSD.org/ — Hungary.http://www.is.FreeBSD.org/ — Iceland.http://www.ie.FreeBSD.org/ — Ireland.http://www.jp.FreeBSD.org/www.freebsd.org/ — Japan.
+ url="http://www.jp.FreeBSD.org/www.FreeBSD.org/">http://www.jp.FreeBSD.org/www.FreeBSD.org/ — Japan.
http://www.kr.FreeBSD.org/ — Korea.http://rama.asiapac.net/freebsd/ — Malaysia.http://www.nl.FreeBSD.org/ — Netherlands.http://www.no.FreeBSD.org/ — Norway.http://www.pt.FreeBSD.org/ — Portugal/1.http://www2.pt.FreeBSD.org/ — Portugal/2.http://www3.pt.FreeBSD.org/ — Portugal/3.http://www.ro.FreeBSD.org/ — Romania.http://www.ru.FreeBSD.org/ — Russia/1.http://www2.ru.FreeBSD.org/ — Russia/2.http://www3.ru.FreeBSD.org/ — Russia/3.http://www4.ru.FreeBSD.org/ — Russia/4.http://www.sk.FreeBSD.org/ — Slovak Republic.http://www.si.FreeBSD.org/ — Slovenia.http://www.es.FreeBSD.org/ — Spain.http://www.za.FreeBSD.org/ — South Africa/1.http://www2.za.FreeBSD.org/ — South Africa/2.http://www.se.FreeBSD.org/www.freebsd.org/ — Sweden.
+ url="http://www.se.FreeBSD.org/www.FreeBSD.org/">http://www.se.FreeBSD.org/www.FreeBSD.org/ — Sweden.
http://www.tr.FreeBSD.org/ — Turkey.http://www.ua.FreeBSD.org/ — Ukraine/1.http://www2.ua.FreeBSD.org/ — Ukraine/2.http://www.uk.FreeBSD.org/ — United Kingdom.http://freebsd.advansys.net/ — USA/Indiana.http://www6.FreeBSD.org/ — USA/Oregon.http://www2.FreeBSD.org/ — USA/Texas.Email AddressesThe following user groups provide FreeBSD related email addresses
for their members. The listed administrator reserves the right to
revoke the address if it is abused in any way.DomainFacilitiesUser GroupAdministratorukug.uk.FreeBSD.orgForwarding onlyfreebsd-users@uk.FreeBSD.orgJosef L. Karthauser
joe@uk.FreeBSD.orgShell AccountsThe following user groups provide shell accounts for people who are
actively supporting the FreeBSD project. The listed administrator
reserves the right to cancel the account if it is abused in any
way.HostAccessFacilitiesAdministratorstorm.uk.FreeBSD.orgssh onlyRead-only cvs, personal webspace, email&a.brian
diff --git a/en_US.ISO_8859-1/books/handbook/install/chapter.sgml b/en_US.ISO_8859-1/books/handbook/install/chapter.sgml
index a6df6724f4..dd4f0a4930 100644
--- a/en_US.ISO_8859-1/books/handbook/install/chapter.sgml
+++ b/en_US.ISO_8859-1/books/handbook/install/chapter.sgml
@@ -1,1307 +1,1307 @@
Installing FreeBSDSo, you would like to try out FreeBSD on your system? This section is
a quick-start guide for what you need to do. FreeBSD can be installed
from a variety of media including CD-ROM, floppy disk, magnetic tape, an
MS-DOS partition and, if you have a network connection, via anonymous ftp
or NFS.Regardless of the installation media you choose, you can get started
by creating the installation disks as described
below. Booting your computer into the FreeBSD installer, even if you
are not planning on installing FreeBSD right away, will provide important
information about compatibility between FreeBSD and your hardware which
may, in turn, dictate which installation options are even possible. It
can also provide early clues to any compatibility problems which could
prevent FreeBSD running on your system at all.If you plan on installing via anonymous FTP then the installation
floppies are all you need to download and create—the installation
program itself will handle any further required downloading directly
(using an ethernet connection, a modem and ppp dialip #, etc).For more information on obtaining the latest FreeBSD distributions,
please see Obtaining FreeBSD in the
Appendix.So, to get the show on the road, follow these steps:Review the supported
configurations section of this installation guide to be sure
that your hardware is supported by FreeBSD. It may be helpful to make
a list of any special cards you have installed, such as SCSI
controllers, Ethernet adapters or sound cards. This list should
include relevant configuration parameters such as interrupts (IRQ) and
IO port addresses.If you are installing FreeBSD from CDROM media then you have
several different installation options:If the CD has been mastered with El Torrito boot support and
your system supports direct booting from CDROM (and many older
systems do not), simply insert the CD into
the drive and boot directly from it.If you are running DOS and have the proper drivers to access
your CD, run the install.bat script provided on the CD. This will
attempt to boot into the FreeBSD installation straight from
DOS.You must do this from actual DOS and not a Windows DOS
box.If you also want to install FreeBSD from your DOS partition
(perhaps because your CDROM drive is completely unsupported by
FreeBSD) then run the setup program first to copy the appropriate
files from the CD to your DOS partition, afterwards running
install.If either of the two proceeding methods work then you can
simply skip the rest of this section, otherwise your final option
is to create a set of boot floppies from the
floppies\kern.flp and
floppies\mfsroot.flp images—proceed to
step 4 for instructions on how to do this.If you do not have a CDROM distribution then simply read the installation
+ url="ftp://ftp.FreeBSD.org/pub/FreeBSD/&rel.current;-RELEASE/floppies/README.TXT">installation
boot image information to find out what files you need to
download first.Make the installation boot disks from the image files:If you are using MS-DOS then download fdimage.exe
+ URL="ftp://ftp.FreeBSD.org/pub/FreeBSD/tools/fdimage.exe">fdimage.exe
or get it from tools\fdimage.exe on the CDROM
and then run it like so:E:\>tools\fdimage floppies\kern.flp a:The fdimage program will format the
A: drive and then copy the
kern.flp image onto it (assuming that you are
at the top level of a FreeBSD distribution and the floppy images
live in the floppies subdirectory, as is
typically the case).If you are using a UNIX system to create the floppy
images:&prompt.root; dd if=kern.flp of=disk_devicedisk_device is the
/dev entry for the floppy drive. On FreeBSD
systems, this is /dev/rfd0 for the
A: drive and
/dev/rfd1 for the B:
drive.With the kern.flp in the
A: drive, reboot your computer. The next
request you should get is for the mfsroot.flp
floppy, after which the installation will proceed normally.If you do not type anything at the boot
prompt which appears during this process, FreeBSD will automatically
boot with its default configuration after a delay of about five
seconds. As FreeBSD boots, it probes your computer to determine what
hardware is installed. The results of this probing is displayed on
the screen.When the booting process is finished, The main FreeBSD
installation menu will be displayed.If something goes wrong…Due to limitations of the PC architecture, it is impossible for
probing to be 100 percent reliable. In the event that your hardware is
incorrectly identified, or that the probing causes your computer to lock
up, first check the supported
configurations section of this installation guide to be sure that
your hardware is indeed supported by FreeBSD.If your hardware is supported, reset the computer and when the visual
kernel configuration choice is presented, take it. This puts FreeBSD into
a configuration mode where you can supply hints about your hardware. The
FreeBSD kernel on the installation disk is configured assuming that most
hardware devices are in their factory default configuration in terms of
IRQs, IO addresses and DMA channels. If your hardware has been
reconfigured, you will most likely need to use the configuration editor to
tell FreeBSD where things are.It is also possible that a probe for a device not present will cause a
later probe for another device that is present to fail. In that case, the
probes for the conflicting driver(s) should be disabled.Do not disable any device you will need during installation, such as
your screen (sc0). If the installation wedges
or fails mysteriously after leaving the configuration editor, you have
probably removed or changed something that you should not have. Simply
reboot and try again.In the configuration mode, you can:List the device drivers installed in the kernel.Disable device drivers for hardware not present in your
system.Change the IRQ, DRQ, and IO port addresses used by a device
driver.After adjusting the kernel to match how you have your hardware
configured, type Q to continue booting with the new
settings.After FreeBSD has been installed, changes made in the configuration
mode will be permanent so you do not have to reconfigure every time you
boot. Even so, it is likely that you will want to build a custom kernel
to optimize the performance of your system. See Kernel configuration for more information
on creating custom kernels.Supported ConfigurationsFreeBSD currently runs on a wide variety of ISA, VLB, EISA and PCI
bus based PC's, ranging from 386sx to Pentium class machines (though the
386sx is not recommended). Support for generic IDE or ESDI drive
configurations, various SCSI controller, network and serial cards is
also provided.A minimum of four megabytes of RAM is required to run FreeBSD. To
run the X Window System, eight megabytes of RAM is the recommended
minimum.Following is a list of all disk controllers and Ethernet cards
currently known to work with FreeBSD. Other configurations may very
well work, and we have simply not received any indication of
this.Disk ControllersWD1003 (any generic MFM/RLL)WD1007 (any generic IDE/ESDI)IDEATAAdaptec 1535 ISA SCSI controllersAdaptec 154x series ISA SCSI controllersAdaptec 174x series EISA SCSI controller in standard and
enhanced mode.Adaptec 274X/284X/2920C/2930U2/294x/2950/3940/3950
(Narrow/Wide/Twin) series EISA/VLB/PCI SCSI controllers.Adaptec AIC7850, AIC7860, AIC7880, AIC789x, on-board SCSI
controllers.AdvanSys SCSI controllers (all models).BusLogic MultiMaster controllers:BusLogic/Mylex "Flashpoint" adapters are NOT yet
supported.BusLogic MultiMaster "W" Series Host Adapters:BT-948BT-958BT-958DBusLogic MultiMaster "C" Series Host Adapters:BT-946CBT-956CBT-956CDBT-445CBT-747CBT-757CBT-757CDBT-545CBT-540CFBusLogic MultiMaster "S" Series Host Adapters:BT-445SBT-747SBT-747DBT-757SBT-757DBT-545SBT-542DBT-742ABT-542BBusLogic MultiMaster "A" Series Host Adapters:BT-742ABT-542BAMI FastDisk controllers that are true BusLogic
MultiMaster clones are also supported.DPT SmartCACHE Plus, SmartCACHE III, SmartRAID III, SmartCACHE
IV and SmartRAID IV SCSI/RAID controllers are supported. The DPT
SmartRAID/CACHE V is not yet supported.Compaq Intelligent Disk Array Controllers: IDA, IDA-2, IAES,
SMART, SMART-2/E, Smart-2/P, SMART-2SL, Smart Array 3200,
Smart Array 3100ES and Smart Array 221.SymBios (formerly NCR) 53C810, 53C810a, 53C815, 53C820,
53C825a, 53C860, 53C875, 53C875j, 53C885, 53C895 and 53C896 PCI
SCSI controllers:ASUS SC-200Data Technology DTC3130 (all variants)Diamond FirePort (all)NCR cards (all)Symbios cards (all)Tekram DC390W, 390U and 390FTyan S1365QLogic 1020, 1040, 1040B, 1080, 1240 and 2100 SCSI and Fibre
Channel AdaptersDTC 3290 EISA SCSI controller in 1542 emulation mode.With all supported SCSI controllers, full support is provided for
SCSI-I & SCSI-II peripherals, including hard disks, optical disks,
tape drives (including DAT and 8mm Exabyte), medium changers,
processor target devices and CDROM drives. WORM devices that support
CDROM commands are supported for read-only access by the CDROM driver.
WORM/CD-R/CD-RW writing support is provided by cdrecord, which is in
the ports tree.The following CD-ROM type systems are supported at this
time:SoundBlaster SCSI and ProAudio Spectrum SCSI
(cd)Mitsumi (all models) proprietary interface
(mcd)Matsushita/Panasonic (Creative) CR-562/CR-563 proprietary
interface (matcd)Sony proprietary interface (scd)ATAPI IDE interface (wcd)The following drivers were supported under the old SCSI subsystem,
but are NOT YET supported under the new CAM SCSI subsystem:Tekram DC390 and DC390T controllers (maybe other cards based
on the AMD 53c974 as well).NCR5380/NCR53400 ("ProAudio Spectrum") SCSI controller.UltraStor 14F, 24F and 34F SCSI controllers.Seagate ST01/02 SCSI controllers.Future Domain 8xx/950 series SCSI controllers.WD7000 SCSI controller.Adaptec 1510 series ISA SCSI controllers (not for bootable
devices)Adaptec 152x series ISA SCSI controllersAdaptec AIC-6260 and AIC-6360 based boards, which includes the
AHA-152x and SoundBlaster SCSI cards.Ethernet cardsAllied-Telesis AT1700 and RE2000 cardsSMC Elite 16 WD8013 Ethernet interface, and most other
WD8003E, WD8003EBT, WD8003W, WD8013W, WD8003S, WD8003SBT and
WD8013EBT based clones. SMC Elite Ultra and 9432TX based cards
are also supported.DEC EtherWORKS III NICs (DE203, DE204, and DE205)DEC EtherWORKS II NICs (DE200, DE201, DE202, and DE422)DEC DC21040/DC21041/DC21140 based NICs:ASUS PCI-L101-TBAccton ENI1203Cogent EM960PCICompex CPXPCI/32CD-Link DE-530DEC DE435DEC DE450Danpex EN-9400P3JCIS Condor JC1260Kingston KNE100TXLinksys EtherPCIMylex LNP101SMC EtherPower 10/100 (Model 9332)SMC EtherPower (Model 8432)SMC EtherPower (2)Zynx ZX314Zynx ZX342DEC FDDI (DEFPA/DEFEA) NICsFujitsu FMV-181 and FMV-182Fujitsu MB86960A/MB86965AIntel EtherExpressIntel EtherExpress Pro/100B 100Mbit.Isolan AT 4141-0 (16 bit)Isolink 4110 (8 bit)Lucent WaveLAN wireless networking interface.Novell NE1000, NE2000, and NE2100 ethernet interface.3Com 3C501 cards3Com 3C503 Etherlink II3Com 3c505 Etherlink/+3Com 3C507 Etherlink 16/TP3Com 3C509, 3C579, 3C589 (PCMCIA) Etherlink III3Com 3C590, 3C595 Etherlink III3Com 3C90x cards.HP PC Lan Plus (27247B and 27252A)Toshiba ethernet cardsPCMCIA ethernet cards from IBM and National Semiconductor are
also supported.FreeBSD does not currently support PnP (plug-n-play) features
present on some ethernet cards. If your card has PnP and is giving
you problems, try disabling its PnP features.Miscellaneous devicesAST 4 port serial card using shared IRQ.ARNET 8 port serial card using shared IRQ.BOCA IOAT66 6 port serial card using shared IRQ.BOCA 2016 16 port serial card using shared IRQ.Cyclades Cyclom-y Serial Board.STB 4 port card using shared IRQ.SDL Communications Riscom/8 Serial Board.SDL Communications RISCom/N2 and N2pci sync serial
cards.Digiboard Sync/570i high-speed sync serial card.Decision-Computer Intl. “Eight-Serial” 8 port
serial cards using shared IRQ.Adlib, SoundBlaster, SoundBlaster Pro, ProAudioSpectrum,
Gravis UltraSound, Gravis UltraSound MAX and Roland MPU-401 sound
cards.Matrox Meteor video frame grabber.Creative Labs Video spigot frame grabber.Omnimedia Talisman frame grabber.Brooktree BT848 chip based frame grabbers.X-10 power controllers.PC joystick and speaker.FreeBSD does not currently support IBM's microchannel (MCA)
bus.Preparing for the InstallationThere are a number of different methods by which FreeBSD can be
installed. The following describes what preparation needs to be done
for each type.Before installing from CDROMIf your CDROM is of an unsupported type, then please skip to MS-DOS Preparation.There is not a lot of preparatory work that needs to be done to
successfully install from one of Walnut Creek's FreeBSD CDROMs (other
CDROM distributions may work as well, though we cannot say for certain
as we have no hand or say in how they are created). You can either
boot into the CD installation directly from DOS using Walnut Creek's
supplied install.bat batch file or you can make
boot floppies with the makeflp.bat command.For the easiest interface of all (from DOS), type
view. This will bring up a DOS menu utility that
leads you through all the available options.If you are creating the boot floppies from a UNIX machine, see
the beginning of this guide for
examples of how to create the boot floppies.Once you have booted from DOS or floppy, you should then be able
to select CDROM as the media type in the Media menu and load the
entire distribution from CDROM. No other types of installation media
should be required.After your system is fully installed and you have rebooted from
the hard disk, you can mount the CDROM at any time by typing:
mount /cdromBefore removing the CD again, also note that it is necessary to
first type: umount /cdrom. Do not just remove it
from the drive!Before invoking the installation, be sure that the CDROM is in
the drive so that the install probe can find it. This is also true
if you wish the CDROM to be added to the default system
configuration automatically during the install (whether or not you
actually use it as the installation media).Finally, if you would like people to be able to FTP install
FreeBSD directly from the CDROM in your machine, you will find it
quite easy. After the machine is fully installed, you simply need to
add the following line to the password file (using the vipw
command):
ftp:*:99:99::0:0:FTP:/cdrom:/nonexistentAnyone with network connectivity to your machine (and permission
to log into it) can now chose a Media type of FTP and type in:
ftp://your machine
after picking “Other” in the ftp sites menu.Before installing from FloppyIf you must install from floppy disks, either due to unsupported
hardware or simply because you enjoy doing things the hard way, you
must first prepare some floppies for the install.You will need, at minimum, as many 1.44MB or 1.2MB floppies as it
takes to hold all files in the bin (binary distribution) directory.
If you are preparing these floppies under DOS, then THESE floppies
must be formatted using the MS-DOS FORMAT
command. If you are using Windows, use the Windows File Manager
format command.Do not trust Factory Preformatted floppies!
Format them again yourself, just to make sure. Many problems reported
by our users in the past have resulted from the use of improperly
formatted media, which is why I am taking such special care to mention
it here!If you are creating the floppies from another FreeBSD machine, a
format is still not a bad idea though you do not need to put a DOS
filesystem on each floppy. You can use the
disklabel and newfs commands to
put a UFS filesystem on them instead, as the following sequence of
commands (for a 3.5" 1.44MB floppy disk) illustrates:&prompt.root; fdformat -f 1440 fd0.1440
&prompt.root; disklabel -w -r fd0.1440 floppy3
&prompt.root; newfs -t 2 -u 18 -l 1 -i 65536 /dev/rfd0Use fd0.1200 and floppy5
for 5.25" 1.2MB disks.Then you can mount and write to them like any other file
system.After you have formatted the floppies, you will need to copy the
files onto them. The distribution files are split into chunks
conveniently sized so that 5 of them will fit on a conventional 1.44MB
floppy. Go through all your floppies, packing as many files as will
fit on each one, until you have got all the distributions you want
packed up in this fashion. Each distribution should go into a
subdirectory on the floppy, e.g.: a:\bin\bin.aa,
a:\bin\bin.ab, and so on.Once you come to the Media screen of the install, select
“Floppy” and you will be prompted for the rest.Before installing from a MS-DOS partitionTo prepare for installation from an MS-DOS partition, copy the
files from the distribution into a directory called
c:\freebsd. The directory tree structure of the
CDROM must be partially reproduced within this directory so we suggest
using the DOS xcopy command. For example, to
prepare for a minimal installation of FreeBSD:C:\>md c:\freebsdC:\>xcopy /s e:\bin c:\freebsd\bin\C:\>xcopy /s e:\manpages c:\freebsd\manpages\Assuming that C: is where you have free
space and E: is where your CDROM is
mounted.For as many DISTS you wish to install from MS-DOS
(and you have free space for), install each one under
c:\freebsd — the BIN dist
is only the minimal requirement.Before installing from QIC/SCSI TapeInstalling from tape is probably the easiest method, short of an
on-line install using FTP or a CDROM install. The installation
program expects the files to be simply tar'ed onto the tape, so after
getting all of the files for distribution you are interested in,
simply tar them onto the tape with a command like:&prompt.root; cd /freebsd/distdir
&prompt.root; tar cvf /dev/rwt0 dist1 ... dist2When you go to do the installation, you should also make sure that
you leave enough room in some temporary directory (which you will be
allowed to choose) to accommodate the full
contents of the tape you have created. Due to the non-random access
nature of tapes, this method of installation requires quite a bit of
temporary storage. You should expect to require as much temporary
storage as you have stuff written on tape.When going to do the installation, the tape must be in the drive
before booting from the boot floppy. The
installation probe may otherwise fail to find it.Before installing over a networkYou can do network installations over 3 types of communications
links:Serial portSLIP or PPPParallel portPLIP (laplink cable)EthernetA standard ethernet controller (includes some
PCMCIA).SLIP support is rather primitive, and limited primarily to
hard-wired links, such as a serial cable running between a laptop
computer and another computer. The link should be hard-wired as the
SLIP installation does not currently offer a dialing capability; that
facility is provided with the PPP utility, which should be used in
preference to SLIP whenever possible.If you are using a modem, then PPP is almost certainly your only
choice. Make sure that you have your service provider's information
handy as you will need to know it fairly soon in the installation
process. You will need to know how to dial your ISP using the
“AT commands” specific to your modem, as the PPP dialer
provides only a very simple terminal emulator. If you are using PAP or
CHAP, you will need to type the necessary set
authname and set authkey commands
before typing term. Refer to the user-ppp handbook and FAQ entries for further
information. If you have problems, logging can be directed to the
screen using the command set log local ....If a hard-wired connection to another FreeBSD (2.0R or later)
machine is available, you might also consider installing over a
“laplink” parallel port cable. The data rate over the
parallel port is much higher than what is typically possible over a
serial line (up to 50k/sec), thus resulting in a quicker
installation.Finally, for the fastest possible network installation, an
ethernet adaptor is always a good choice! FreeBSD supports most common
PC ethernet cards, a table of supported cards (and their required
settings) is provided in Supported
Hardware. If you are using one of the supported PCMCIA
ethernet cards, also be sure that it is plugged in
before the laptop is powered on! FreeBSD does
not, unfortunately, currently support hot insertion of PCMCIA cards
during installation.You will also need to know your IP address on the network, the
netmask value for your address class, and the name of your machine.
Your system administrator can tell you which values to use for your
particular network setup. If you will be referring to other hosts by
name rather than IP address, you will also need a name server and
possibly the address of a gateway (if you are using PPP, it is your
provider's IP address) to use in talking to it. If you do not know
the answers to all or most of these questions, then you should really
probably talk to your system administrator first
before trying this type of installation.Once you have a network link of some sort working, the
installation can continue over NFS or FTP.Preparing for NFS installationNFS installation is fairly straight-forward: Simply copy the
FreeBSD distribution files you want onto a server somewhere and then
point the NFS media selection at it.If this server supports only “privileged port”
access (as is generally the default for Sun workstations), you will
need to set this option in the Options menu before installation can
proceed.If you have a poor quality ethernet card which suffers from very
slow transfer rates, you may also wish to toggle the appropriate
Options flag.In order for NFS installation to work, the server must support
subdir mounts, e.g., if your FreeBSD &rel.current; distribution
directory lives on:
ziggy:/usr/archive/stuff/FreeBSD Then
ziggy will have to allow the direct mounting of
/usr/archive/stuff/FreeBSD, not just
/usr or
/usr/archive/stuff.In FreeBSD's /etc/exports file, this is
controlled by the option. Other NFS
servers may have different conventions. If you are getting
Permission Denied messages from the server
then it is likely that you do not have this enabled properly.Preparing for FTP InstallationFTP installation may be done from any mirror site containing a
reasonably up-to-date version of FreeBSD &rel.current;. A full menu
of reasonable choices from almost anywhere in the world is provided
by the FTP site menu.If you are installing from some other FTP site not listed in
this menu, or you are having troubles getting your name server
configured properly, you can also specify your own URL by selecting
the “Other” choice in that menu. A URL can also be a
direct IP address, so the following would work in the absence of a
name server:ftp://165.113.121.81/pub/FreeBSD/&rel.current;-RELEASEThere are two FTP installation modes you can use:FTP ActiveFor all FTP transfers, use “Active” mode.
This will not work through firewalls, but will often work with
older ftp servers that do not support passive mode. If your
connection hangs with passive mode (the default), try
active!FTP PassiveFor all FTP transfers, use “Passive” mode.
This allows the user to pass through firewalls that do not
allow incoming connections on random port addresses.Active and passive modes are not the same as a
“proxy” connection, where a proxy FTP server is
listening and forwarding FTP requests!For a proxy FTP server, you should usually give name of the
server you really want as a part of the username, after an @-sign.
The proxy server then 'fakes' the real server. An example: Say you
want to install from ftp.FreeBSD.org,
using the proxy FTP server foo.bar.com,
listening on port 1234.In this case, you go to the options menu, set the FTP username
to ftp@ftp.FreeBSD.org, and the password to your e-mail address. As
your installation media, you specify FTP (or passive FTP, if the
proxy support it), and the URL
ftp://foo.bar.com:1234/pub/FreeBSD /pub/FreeBSD from ftp.FreeBSD.org is proxied under foo.bar.com, allowing you to install from
that machine (which fetch the files from
ftp.FreeBSD.org as your installation
requests them).Installing FreeBSDOnce you have taken note of the appropriate preinstallation steps,
you should be able to install FreeBSD without any further
trouble.Should this not be true, then you may wish to go back and re-read
the relevant preparation section above for the installation media type
you are trying to use, perhaps there is a helpful hint there that you
missed the first time? If you are having hardware trouble, or FreeBSD
refuses to boot at all, read the Hardware Guide provided on the boot
floppy for a list of possible solutions.The FreeBSD boot floppies contain all the on-line documentation you
should need to be able to navigate through an installation and if it
does not then we would like to know what you found most confusing. Send
your comments to the &a.doc;. It is the objective of the FreeBSD
installation program (sysinstall) to be self-documenting enough that
painful “step-by-step” guides are no longer necessary. It
may take us a little while to reach that objective, but that is the
objective!Meanwhile, you may also find the following “typical
installation sequence” to be helpful:Boot the kern.flp floppy and, when asked,
remove it and insert the mfsroot.flp floppy and
hit return. After a boot sequence which can take anywhere from 30
seconds to 3 minutes, depending on your hardware, you should be
presented with a menu of initial choices. If the
kern.flp floppy does not boot at all, or the
boot hangs at some stage, go read the Q&A section of the
Hardware Guide for possible causes.Press F1. You should see some basic usage instructions on the
menu system and general navigation. If you have not used this menu
system before then please read this
thoroughly!Select the Options item and set any special preferences you may
have.Select a Novice, Custom or Express install, depending on whether
or not you would like the installation to help you through a typical
installation, give you a high degree of control over each step of
the installation or simply whizz through it (using reasonable
defaults when possible) as fast as possible. If you have never used
FreeBSD before then the Novice installation method is most
recommended.The final configuration menu choice allows you to further
configure your FreeBSD installation by giving you menu-driven access
to various system defaults. Some items, like networking, may be
especially important if you did a CDROM/Tape/Floppy installation and
have not yet configured your network interfaces (assuming you have
any). Properly configuring such interfaces here will allow FreeBSD
to come up on the network when you first reboot from the hard
disk.MS-DOS User's Questions and AnswersMany FreeBSD users wish to install FreeBSD on PCs inhabited by
MS-DOS. Here are some commonly asked questions about installing FreeBSD
on such systems.Help! I have no space! Do I need to delete everything
first?If your machine is already running MS-DOS and has little or no free
space available for FreeBSD's installation, all is not lost! You may
find the FIPS utility, provided in the tools
directory on the FreeBSD CDROM or on the various FreeBSD ftp sites, to
be quite useful.FIPS allows you to split an existing MS-DOS partition into two
pieces, preserving the original partition and allowing you to install
onto the second free piece. You first defragment your MS-DOS partition,
using the DOS 6.xx DEFRAG utility or the Norton Disk tools, then run
FIPS. It will prompt you for the rest of the information it needs.
Afterwards, you can reboot and install FreeBSD on the new free slice.
See the Distributions menu for an estimation of how
much free space you will need for the kind of installation you
want.Can I use compressed MS-DOS filesystems from
FreeBSD?No. If you are using a utility such as Stacker(tm) or
DoubleSpace(tm), FreeBSD will only be able to use whatever portion of
the filesystem you leave uncompressed. The rest of the filesystem will
show up as one large file (the stacked/dblspaced file!). Do
not remove that file! You will probably regret it
greatly!It is probably better to create another uncompressed MS-DOS primary
partition and use this for communications between MS-DOS and
FreeBSD.Can I mount my MS-DOS extended
partitions?Yes. DOS extended partitions are mapped in at the end of the other
“slices” in FreeBSD, e.g. your D:
drive might be /dev/da0s5, your
E: drive /dev/da0s6, and
so on. This example assumes, of course, that your extended partition is
on SCSI drive 0. For IDE drives, substitute wd for
da appropriately. You otherwise mount extended
partitions exactly like you would mount any other DOS drive,
e.g.:&prompt.root; mount -t msdos /dev/da0s5 /dos_d
diff --git a/en_US.ISO_8859-1/books/handbook/mail/chapter.sgml b/en_US.ISO_8859-1/books/handbook/mail/chapter.sgml
index b23aeb0078..8c7df7d362 100644
--- a/en_US.ISO_8859-1/books/handbook/mail/chapter.sgml
+++ b/en_US.ISO_8859-1/books/handbook/mail/chapter.sgml
@@ -1,567 +1,567 @@
Electronic MailContributed by &a.wlloyd;.Electronic Mail configuration is the subject of many System Administration books. If you plan
on doing anything beyond setting up one mailhost for your network, you
need industrial strength help.Some parts of E-Mail configuration are controlled in the Domain Name
System (DNS). If you are going to run your own own DNS server check out
/etc/namedb and man -k named for
more information.Basic InformationThese are the major programs involved in an E-Mail exchange. A
“mailhost” is a server that is responsible for delivering
and receiving all email for your host, and possibly your network.User programThis is a program like elm,
pine, mail, or
something more sophisticated like a WWW browser. This program will
simply pass off all e-mail transactions to the local
“mailhost” , either by calling sendmail
or delivering it over TCP.Mailhost Server DaemonUsually this program is sendmail or
smail running in the background. Turn it off or
change the command line options in /etc/rc.conf
(or, prior to FreeBSD 2.2.2, /etc/sysconfig). It
is best to leave it on, unless you have a specific reason to want it
off. Example: You are building a Firewall.You should be aware that sendmail is a
potential weak link in a secure site. Some versions of
sendmail have known security problems.sendmail does two jobs. It looks after
delivering and receiving mail.If sendmail needs to deliver mail off your site
it will look up in the DNS to determine the actual host that will
receive mail for the destination.If it is acting as a delivery agent sendmail
will take the message from the local queue and deliver it across the
Internet to another sendmail on the receivers computer.DNS — Name ServiceThe Domain Name System and its daemon named,
contain the database mapping hostname to IP address, and hostname to
mailhost. The IP address is specified in an A record. The MX record
specifies the mailhost that will receive mail for you. If you do not
have a MX record mail for your hostname, the mail will be delivered to
your host directly.Unless you are running your own DNS server, you will not be able
to change any information in the DNS yourself. If you are using an
Internet Provider, speak to them.POP ServersThis program gets the mail from your mailbox and gives it to your
browser. If you want to run a POP server on your computer, you will
need to do 2 things.Get pop software from the Ports collection that can be
found in /usr/ports or packages collection.
This handbook section has a complete reference on the Ports system.Modify /etc/inetd.conf to load the POP
server.The pop program will have instructions with it. Read them.ConfigurationBasicAs your FreeBSD system comes “out of the box”[TM], you
should be able to send E-mail to external hosts as long as you have
/etc/resolv.conf setup or are running a name
server. If you want to have mail for your host delivered to your
specific host,there are two methods:Run a name server (man -k named) and have
your own domain smallminingco.com
Get mail delivered to the current DNS name for your host. Ie:
dorm6.ahouse.school.edu No matter what option you choose, to have mail delivered directly
to your host, you must be a full Internet host. You must have a
permanent IP address. IE: NO dynamic PPP. If you are behind a
firewall, the firewall must be passing on smtp traffic to you. From
/etc/services:
smtp 25/tcp mail #Simple Mail TransferIf you want to receive mail at your host itself, you must make
sure that the DNS MX entry points to your host address, or there is no
MX entry for your DNS name.Try this:&prompt.root; hostname
-newbsdbox.freebsd.org
-&prompt.root; host newbsdbox.freebsd.org
-newbsdbox.freebsd.org has address 204.216.27.xx
+newbsdbox.FreeBSD.org
+&prompt.root; host newbsdbox.FreeBSD.org
+newbsdbox.FreeBSD.org has address 204.216.27.xx
If that is all that comes out for your machine, mail directory to
- root@newbsdbox.freebsd.org will work no
+ root@newbsdbox.FreeBSD.org will work no
problems.If instead, you have this:
- &prompt.root; host newbsdbox.freebsd.org
+ &prompt.root; host newbsdbox.FreeBSD.org
newbsdbox.FreeBSD.org has address 204.216.27.xx
newbsdbox.FreeBSD.org mail is handled (pri=10) by freefall.FreeBSD.orgAll mail sent to your host directly will end up on
freefall, under the same username.This information is setup in your domain name server. This should
be the same host that is listed as your primary nameserver in
/etc/resolv.confThe DNS record that carries mail routing information is the Mail
eXchange entry. If no MX entry exists, mail will be delivered directly
to the host by way of the Address record.The MX entry for freefall.FreeBSD.org
at one time.
freefall MX 30 mail.crl.net
freefall MX 40 agora.rdrop.com
freefall HINFO Pentium FreeBSD
freefall MX 10 freefall.FreeBSD.org
freefall MX 20 who.cdrom.com
freefall A 204.216.27.xx
freefall CNAME www.FreeBSD.orgfreefall has many MX entries. The lowest MX
number gets the mail in the end. The others will queue mail
temporarily, if freefall is busy or down.Alternate MX sites should have separate connections to the
Internet, to be most useful. An Internet Provider or other friendly
site can provide this service.dig, nslookup, and
host are your friends.Mail for your Domain (Network).To setup up a network mailhost, you need to direct the mail from
arriving at all the workstations. In other words, you want to hijack
all mail for *.smallminingco.com
and divert it to one machine, your “mailhost”.The network users on their workstations will most likely pick up
their mail over POP or telnet.A user account with the same username should
exist on both machines. Please use adduser to do
this as required. If you set the shell to
/nonexistent the user will not be allowed to
login.The mailhost that you will be using must be designated the
Mail eXchange for each workstation. This must be arranged in DNS (ie
BIND, named). Please refer to a Networking book for in-depth
information.You basically need to add these lines in your DNS server.
pc24.smallminingco.com A xxx.xxx.xxx.xxx ; Workstation ip
MX 10 smtp.smallminingco.com ; Your mailhostYou cannot do this yourself unless you are running a DNS server.
If you do not want to run a DNS server, get somebody else like your
Internet Provider to do it.This will redirect mail for the workstation to the Mail eXchange
host. It does not matter what machine the A record points to, the mail
will be sent to the MX host.This feature is used to implement Virtual E-Mail Hosting.ExampleI have a customer with domain foo.bar and I want all mail for
foo.bar to be sent to my machine smtp.smalliap.com. You must make an
entry in your DNS server like:
foo.bar MX 10 smtp.smalliap.com ; your mailhostThe A record is not needed if you only want E-Mail for the domain.
IE: Don't expect ping foo.bar to work unless an
Address record for foo.bar exists as well.On the mailhost that actually accepts mail for final delivery to a
mailbox, sendmail must be told what hosts it will
be accepting mail for.Add pc24.smallminingco.com to
/etc/sendmail.cw (if you are using
FEATURE(use_cw_file)), or add a Cw
myhost.smalliap.com line to
/etc/sendmail.cfIf you plan on doing anything serious with
sendmail you should install the
sendmail source. The source has plenty of
documentation with it. You will find information on getting
sendmail source from the UUCP information.Setting up UUCP.Stolen from the FAQ.The sendmail configuration that ships with FreeBSD is suited for
sites that connect directly to the Internet. Sites that wish to
exchange their mail via UUCP must install another
sendmail configuration file.Tweaking /etc/sendmail.cf manually is
considered something for purists. Sendmail version 8 comes with a new
approach of generating config files via some m4
preprocessing, where the actual hand-crafted configuration is on a
higher abstraction level. You should use the configuration files under
/usr/src/usr.sbin/sendmail/cf.If you did not install your system with full sources, the
sendmail config stuff has been broken out into a
separate source distribution tarball just for you. Assuming you have
your CD-ROM mounted, do:&prompt.root; cd /usr/src
&prompt.root; tar -xvzf /cdrom/dists/src/ssmailcf.aaDo not panic, this is only a few hundred kilobytes in size. The
file README in the cf
directory can serve as a basic introduction to m4
configuration.For UUCP delivery, you are best advised to use the
mailertable feature. This constitutes a database
that sendmail can use to base its routing decision
upon.First, you have to create your .mc file. The
directory /usr/src/usr.sbin/sendmail/cf/cf is the
home of these files. Look around, there are already a few examples.
Assuming you have named your file foo.mc, all you
need to do in order to convert it into a valid
sendmail.cf is:&prompt.root; cd /usr/src/usr.sbin/sendmail/cf/cf
&prompt.root; make foo.cfIf you don't have a /usr/obj hiearchy,
then:&prompt.root; cp foo.cf /etc/sendmail.cfOtherwise:&prompt.root; cp /usr/obj/`pwd`/foo.cf /etc/sendmail.cfA typical .mc file might look like:
include(`../m4/cf.m4')
VERSIONID(`Your version number')
OSTYPE(bsd4.4)
FEATURE(nodns)
FEATURE(nocanonify)
FEATURE(mailertable)
define(`UUCP_RELAY', your.uucp.relay)
define(`UUCP_MAX_SIZE', 200000)
MAILER(local)
MAILER(smtp)
MAILER(uucp)
Cw your.alias.host.name
Cw youruucpnodename.UUCPThe nodns and nocanonify
features will prevent any usage of the DNS during mail delivery. The
UUCP_RELAY clause is needed for bizarre reasons, do
not ask. Simply put an Internet hostname there that is able to handle
.UUCP pseudo-domain addresses; most likely, you will enter the mail
relay of your ISP there.Once you have this, you need this file called
/etc/mailertable. A typical example of this
gender again:
#
# makemap hash /etc/mailertable.db < /etc/mailertable
#
horus.interface-business.de uucp-dom:horus
.interface-business.de uucp-dom:if-bus
interface-business.de uucp-dom:if-bus
.heep.sax.de smtp8:%1 horus.UUCP
uucp-dom:horus if-bus.UUCP
uucp-dom:if-bus . uucp-dom:saxAs you can see, this is part of a real-life file. The first three
lines handle special cases where domain-addressed mail should not be
sent out to the default route, but instead to some UUCP neighbor in
order to “shortcut” the delivery path. The next line
handles mail to the local Ethernet domain that can be delivered using
SMTP. Finally, the UUCP neighbors are mentioned in the .UUCP
pseudo-domain notation, to allow for a
uucp-neighbor!recipient override of the default
rules. The last line is always a single dot, matching everything else,
with UUCP delivery to a UUCP neighbor that serves as your universal
mail gateway to the world. All of the node names behind the
uucp-dom: keyword must be valid UUCP neighbors, as
you can verify using the command uuname.As a reminder that this file needs to be converted into a DBM
database file before being usable, the command line to accomplish this
is best placed as a comment at the top of the
mailertable. You always have to execute this
command each time you change your
mailertable.Final hint: if you are uncertain whether some particular mail
routing would work, remember the option to
sendmail. It starts sendmail in
“address test mode”; simply enter 0,
followed by the address you wish to test for the mail routing. The
last line tells you the used internal mail agent, the destination host
this agent will be called with, and the (possibly translated) address.
Leave this mode by typing Control-D.&prompt.user; sendmail -bt
ADDRESS TEST MODE (ruleset 3 NOT automatically invoked)
Enter <ruleset> <address>
>0 foo@interface-business.de
rewrite: ruleset 0 input: foo @ interface-business . de
…
rewrite: ruleset 0 returns: $# uucp-dom $@ if-bus $: foo < @ interface-business . deFAQMigration from FAQ.Why do I have to use the FQDN for hosts on my site?You will probably find that the host is actually in a different
domain; for example, if you are in foo.bar.edu and you wish to reach a host called
mumble in the bar.edu domain, you will have to refer to
it by the fully-qualified domain name, mumble.bar.edu, instead of just
mumble.Traditionally, this was allowed by BSD BIND resolvers. However the
current version of BIND that ships with
FreeBSD no longer provides default abbreviations for non-fully
qualified domain names other than the domain you are in. So an
unqualified host mumble must either be found as
mumble.foo.bar.edu, or it will be
searched for in the root domain.This is different from the previous behavior, where the search
continued across mumble.bar.edu,
and mumble.edu. Have a look at RFC
1535 for why this was considered bad practice, or even a security
hole.As a good workaround, you can place the line
search foo.bar.edu bar.edu
instead of the previous
domain foo.bar.edu
into your /etc/resolv.conf. However, make sure
that the search order does not go beyond the “boundary between
local and public administration”, as RFC 1535 calls it.Sendmail says mail loops back to
myselfThis is answered in the sendmail FAQ as follows:
* I am getting "Local configuration error" messages, such as:
553 relay.domain.net config error: mail loops back to myself
554 <user@domain.net>... Local configuration error
How can I solve this problem?
You have asked mail to the domain (e.g., domain.net) to be
forwarded to a specific host (in this case, relay.domain.net)
by using an MX record, but the relay machine does not recognize
itself as domain.net. Add domain.net to /etc/sendmail.cw
(if you are using FEATURE(use_cw_file)) or add "Cw domain.net"
to /etc/sendmail.cf.The sendmail FAQ is in
/usr/src/usr.sbin/sendmail and is recommended
reading if you want to do any “tweaking” of your mail
setup.How can I do E-Mail with a dialup PPP host?You want to connect a FreeBSD box on a lan, to the Internet. The
FreeBSD box will be a mail gateway for the lan. The PPP connection is
non-dedicated.There are at least two way to do this.The other is to use UUCP.The key is to get a Internet site to provide secondary MX services
for your domain. For example:
bigco.com. MX 10 bigco.com.
MX 20 smalliap.com.Only one host should be specified as the final recipient ( add
Cw bigco.com in
/etc/sendmail.cf on bigco.com).When the senders sendmail is trying to deliver
the mail it will try to connect to you over the modem link. It will
most likely time out because you are not online.
sendmail will automatically deliver it to the
secondary MX site, ie your Internet provider. The secondary MX site
will try every (sendmail_flags = "-bd -q15m" in
/etc/rc.conf ) 15 minutes to connect to your host
to deliver the mail to the primary MX site.You might want to use something like this as a login
script.
#!/bin/sh
# Put me in /usr/local/bin/pppbigco
( sleep 60 ; /usr/sbin/sendmail -q ) &
/usr/sbin/ppp -direct pppbigcoIf you are going to create a separate login script for a user you
could use sendmail -qRbigco.com instead in the
script above. This will force all mail in your queue for bigco.com to
be processed immediately.A further refinement of the situation is as follows.Message stolen from the freebsd-isp mailing list.
> we provide the secondary mx for a customer. The customer connects to
> our services several times a day automatically to get the mails to
> his primary mx (We do not call his site when a mail for his domains
> arrived). Our sendmail sends the mailqueue every 30 minutes. At the
> moment he has to stay 30 minutes online to be sure that all mail is
> gone to the primary mx.
>
> Is there a command that would initiate sendmail to send all the mails
> now? The user has not root-privileges on our machine of course.
In the 'privacy flags' section of sendmail.cf, there is a definition
Opgoaway,restrictqrun
Remove restrictqrun to allow non-root users to start the queue processing.
You might also like to rearrange the MXs. We are the 1st MX for our
customers like this, and we have defined:
# If we are the best MX for a host, try directly instead of generating
# local config error.
OwTrue
That way a remote site will deliver straight to you, without trying
the customer connection. You then send to your customer. Only works for
"hosts", so you need to get your customer to name their mail machine
"customer.com" as well as "hostname.customer.com" in the DNS. Just put
an A record in the DNS for "customer.com".
diff --git a/en_US.ISO_8859-1/books/handbook/mailing-lists.ent b/en_US.ISO_8859-1/books/handbook/mailing-lists.ent
index 3e9e85fe41..4a59f66dfe 100644
--- a/en_US.ISO_8859-1/books/handbook/mailing-lists.ent
+++ b/en_US.ISO_8859-1/books/handbook/mailing-lists.ent
@@ -1,104 +1,104 @@
freebsd-advocacy@FreeBSD.ORG">
+ freebsd-advocacy@FreeBSD.org">
freebsd-announce@FreeBSD.ORG">
+ freebsd-announce@FreeBSD.org">
freebsd-bugs@FreeBSD.ORG">
+ freebsd-bugs@FreeBSD.org">
freebsd-chat@FreeBSD.ORG">
+ freebsd-chat@FreeBSD.org">
freebsd-core@FreeBSD.ORG">
+ freebsd-core@FreeBSD.org">
freebsd-current@FreeBSD.ORG">
+ freebsd-current@FreeBSD.org">
cvs-all@FreeBSD.ORG">
+ cvs-all@FreeBSD.org">
freebsd-database@FreeBSD.ORG">
+ freebsd-database@FreeBSD.org">
freebsd-doc@FreeBSD.ORG">
+ freebsd-doc@FreeBSD.org">
freebsd-emulation@FreeBSD.ORG">
+ freebsd-emulation@FreeBSD.org">
freebsd-fs@FreeBSD.ORG">
+ freebsd-fs@FreeBSD.org">
freebsd-hackers@FreeBSD.ORG">
+ freebsd-hackers@FreeBSD.org">
freebsd-hardware@FreeBSD.ORG">
+ freebsd-hardware@FreeBSD.org">
freebsd-isdn@FreeBSD.ORG">
+ freebsd-isdn@FreeBSD.org">
freebsd-isp@FreeBSD.ORG">
+ freebsd-isp@FreeBSD.org">
freebsd-java@FreeBSD.ORG">
+ freebsd-java@FreeBSD.org">
freebsd-jobs@FreeBSD.ORG">
+ freebsd-jobs@FreeBSD.org">
freebsd-mobile@FreeBSD.ORG">
+ freebsd-mobile@FreeBSD.org">
freebsd-mozilla@FreeBSD.ORG">
+ freebsd-mozilla@FreeBSD.org">
freebsd-multimedia@FreeBSD.ORG">
+ freebsd-multimedia@FreeBSD.org">
freebsd-net@FreeBSD.ORG">
+ freebsd-net@FreeBSD.org">
freebsd-newbies@FreeBSD.ORG">
+ freebsd-newbies@FreeBSD.org">
new-bus-arch@bostonradio.org">
freebsd-ports@FreeBSD.ORG">
+ freebsd-ports@FreeBSD.org">
freebsd-questions@FreeBSD.ORG">
+ freebsd-questions@FreeBSD.org">
freebsd-scsi@FreeBSD.ORG">
+ freebsd-scsi@FreeBSD.org">
freebsd-security@FreeBSD.ORG">
+ freebsd-security@FreeBSD.org">
freebsd-security-notifications@FreeBSD.ORG">
+ freebsd-security-notifications@FreeBSD.org">
freebsd-small@FreeBSD.ORG">
+ freebsd-small@FreeBSD.org">
freebsd-smp@FreeBSD.ORG">
+ freebsd-smp@FreeBSD.org">
freebsd-stable@FreeBSD.ORG">
+ freebsd-stable@FreeBSD.org">
freebsd-tokenring@FreeBSD.ORG">
+ freebsd-tokenring@FreeBSD.org">
-majordomo@FreeBSD.ORG">
+majordomo@FreeBSD.org">
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 0952b0819d..9c5cba7e52 100644
--- a/en_US.ISO_8859-1/books/handbook/mirrors/chapter.sgml
+++ b/en_US.ISO_8859-1/books/handbook/mirrors/chapter.sgml
@@ -1,1457 +1,1457 @@
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,
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/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/FreeBSDEstoniaIn 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)Canadacvsup.ca.FreeBSD.org (maintainer
dan@jaded.net)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)
+ 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/books/handbook/pgpkeys/chapter.sgml b/en_US.ISO_8859-1/books/handbook/pgpkeys/chapter.sgml
index 984b27dd97..53e2f8a6d6 100644
--- a/en_US.ISO_8859-1/books/handbook/pgpkeys/chapter.sgml
+++ b/en_US.ISO_8859-1/books/handbook/pgpkeys/chapter.sgml
@@ -1,624 +1,624 @@
PGP keysIn case you need to verify a signature or send encrypted email to one
of the officers or core team members a number of keys are provided here
for your convenience.OfficersFreeBSD Security Officer
security-officer@FreeBSD.org
-FreeBSD Security Officer <security-officer@freebsd.org>
+FreeBSD Security Officer <security-officer@FreeBSD.org>
Fingerprint = 41 08 4E BB DB 41 60 71 F9 E5 0E 98 73 AF 3F 11
-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: 2.6.3i
mQCNAzF7MY4AAAEEAK7qBgPuBejER5HQbQlsOldk3ZVWXlRj54raz3IbuAUrDrQL
h3g57T9QY++f3Mot2LAf5lDJbsMfWrtwPrPwCCFRYQd6XH778a+l4ju5axyjrt/L
Ciw9RrOC+WaPv3lIdLuqYge2QRC1LvKACIPNbIcgbnLeRGLovFUuHi5z0oilAAUR
tDdGcmVlQlNEIFNlY3VyaXR5IE9mZmljZXIgPHNlY3VyaXR5LW9mZmljZXJAZnJl
ZWJzZC5vcmc+iQCVAwUQMX6yrOJgpPLZnQjrAQHyowQA1Nv2AY8vJIrdp2ttV6RU
tZBYnI7gTO3sFC2bhIHsCvfVU3JphfqWQ7AnTXcD2yPjGcchUfc/EcL1tSlqW4y7
PMP4GHZp9vHog1NAsgLC9Y1P/1cOeuhZ0pDpZZ5zxTo6TQcCBjQA6KhiBFP4TJql
3olFfPBh3B/Tu3dqmEbSWpuJAJUDBRAxez3C9RVb+45ULV0BAak8A/9JIG/jRJaz
QbKom6wMw852C/Z0qBLJy7KdN30099zMjQYeC9PnlkZ0USjQ4TSpC8UerYv6IfhV
nNY6gyF2Hx4CbEFlopnfA1c4yxtXKti1kSN6wBy/ki3SmqtfDhPQ4Q31p63cSe5A
3aoHcjvWuqPLpW4ba2uHVKGP3g7SSt6AOYkAlQMFEDF8mz0ff6kIA1j8vQEBmZcD
/REaUPDRx6qr1XRQlMs6pfgNKEwnKmcUzQLCvKBnYYGmD5ydPLxCPSFnPcPthaUb
5zVgMTjfjS2fkEiRrua4duGRgqN4xY7VRAsIQeMSITBOZeBZZf2oa9Ntidr5PumS
9uQ9bvdfWMpsemk2MaRG9BSoy5Wvy8VxROYYUwpT8Cf2iQCVAwUQMXsyqWtaZ42B
sqd5AQHKjAQAvolI30Nyu3IyTfNeCb/DvOe9tlOn/o+VUDNJiE/PuBe1s2Y94a/P
BfcohpKC2kza3NiW6lLTp00OWQsuu0QAPc02vYOyseZWy4y3Phnw60pWzLcFdemT
0GiYS5Xm1o9nAhPFciybn9j1q8UadIlIq0wbqWgdInBT8YI/l4f5sf6JAJUDBRAx
ezKXVS4eLnPSiKUBAc5OBACIXTlKqQC3B53qt7bNMV46m81fuw1PhKaJEI033mCD
ovzyEFFQeOyRXeu25Jg9Bq0Sn37ynISucHSmt2tUD5W0+p1MUGyTqnfqejMUWBzO
v4Xhp6a8RtDdUMBOTtro16iulGiRrCKxzVgEl4i+9Z0ZiE6BWlg5AetoF5n3mGk1
lw==
=ipyA
-----END PGP PUBLIC KEY BLOCK-----&a.imp;
Warner Losh <imp@village.org>
- aka <imp@freebsd.org>
+ aka <imp@FreeBSD.org>
Fingerprint = D4 31 FD B9 F7 90 17 E8 37 C5 E7 7F CF A6 C1 B9
-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: 2.6.2
mQCNAzDzTiAAAAEEAK8D7KWEbVFUrmlqhUEnAvphNIqHEbqqT8s+c5f5c2uHtlcH
V4mV2TlUaDSVBN4+/D70oHmZc4IgiQwMPCWRrSezg9z/MaKlWhaslc8YT6Xc1q+o
EP/fAdKUrq49H0QQbkQk6Ks5wKW6v9AOvdmsS6ZJEcet6d9G4dxynu/2qPVhAAUR
tCBNLiBXYXJuZXIgTG9zaCA8aW1wQHZpbGxhZ2Uub3JnPokAlQMFEDM/SK1VLh4u
c9KIpQEBFPsD/1n0YuuUPvD4CismZ9bx9M84y5sxLolgFEfP9Ux196ZSeaPpkA0g
C9YX/IyIy5VHh3372SDWN5iVSDYPwtCmZziwIV2YxzPtZw0nUu82P/Fn8ynlCSWB
5povLZmgrWijTJdnUWI0ApVBUTQoiW5MyrNN51H3HLWXGoXMgQFZXKWYiQCVAwUQ
MzmhkfUVW/uOVC1dAQG3+AP/T1HL/5EYF0ij0yQmNTzt1cLt0b1e3N3zN/wPFFWs
BfrQ+nsv1zw7cEgxLtktk73wBGM9jUIdJu8phgLtl5a0m9UjBq5oxrJaNJr6UTxN
a+sFkapTLT1g84UFUO/+8qRB12v+hZr2WeXMYjHAFUT18mp3xwjW9DUV+2fW1Wag
YDKJAJUDBRAzOYK1s1pi61mfMj0BARBbA/930CHswOF0HIr+4YYUs1ejDnZ2J3zn
icTZhl9uAfEQq++Xor1x476j67Z9fESxyHltUxCmwxsJ1uOJRwzjyEoMlyFrIN4C
dE0C8g8BF+sRTt7VLURLERvlBvFrVZueXSnXvmMoWFnqpSpt3EmN6TNaLe8Cm87a
k6EvQy0dpnkPKokAlQMFEDD9Lorccp7v9qj1YQEBrRUD/3N4cCMWjzsIFp2Vh9y+
RzUrblyF84tJyA7Rr1p+A7dxf7je3Zx5QMEXosWL1WGnS5vC9YH2WZwv6sCU61gU
rSy9z8KHlBEHh+Z6fdRMrjd9byPf+n3cktT0NhS23oXB1ZhNZcB2KKhVPlNctMqO
3gTYx+Nlo6xqjR+J2NnBYU8p
=7fQV
-----END PGP PUBLIC KEY BLOCK-----Core Team members&a.asami;
Satoshi Asami <asami@cs.berkeley.edu>
- aka <asami@FreeBSD.ORG>
+ aka <asami@FreeBSD.org>
Fingerprint = EB 3C 68 9E FB 6C EB 3F DB 2E 0F 10 8F CE 79 CA
-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: 2.6.2
mQCNAzPVyoQAAAEEAL7W+kipxB171Z4SVyyL9skaA7hG3eRsSOWk7lfvfUBLtPog
f3OKwrApoc/jwLf4+Qpdzv5DLEt/6Hd/clskhJ+q1gMNHyZ5ABmUxrTRRNvJMTrb
3fPU3oZj7sL/MyiFaT1zF8EaMP/iS2ZtcFsbYOqGeA8E/58uk4NA0SoeCNiJAAUR
tCVTYXRvc2hpIEFzYW1pIDxhc2FtaUBjcy5iZXJrZWxleS5lZHU+iQCVAwUQM/AT
+EqGN2HYnOMZAQF11QP/eSXb2FuTb1yX5yoo1Im8YnIk1SEgCGbyEbOMMBznVNDy
5g2TAD0ofLxPxy5Vodjg8rf+lfMVtO5amUH6aNcORXRncE83T10JmeM6JEp0T6jw
zOHKz8jRzygYLBayGsNIJ4BGxa4LeaGxJpO1ZEvRlNkPH/YEXK5oQmq9/DlrtYOJ
AEUDBRAz42JT8ng6GBbVvu0BAU8nAYCsJ8PiJpRUGlrz6rxjX8hqM1v3vqFHLcG+
G52nVMBSy+RZBgzsYIPwI5EZtWAKb22JAJUDBRAz4QBWdbtuOHaj97EBAaQPA/46
+NLUp+Wubl90JoonoXocwAg88tvAUVSzsxPXj0lvypAiSI2AJKsmn+5PuQ+/IoQy
lywRsxiQ5GD7C72SZ1yw2WI9DWFeAi+qa4b8n9fcLYrnHpyCY+zxEpu4pam8FJ7H
JocEUZz5HRoKKOLHErzXDiuTkkm72b1glmCqAQvnB4kAlQMFEDPZ3gyDQNEqHgjY
iQEBFfUEALu2C0uo+1Z7C5+xshWRYY5xNCzK20O6bANVJ+CO2fih96KhwsMof3lw
fDso5HJSwgFd8WT/sR+Wwzz6BAE5UtgsQq5GcsdYQuGI1yIlCYUpDp5sgswNm+OA
bX5a+r4F/ZJqrqT1J56Mer0VVsNfe5nIRsjd/rnFAFVfjcQtaQmjiQCVAwUQM9uV
mcdm8Q+/vPRJAQELHgP9GqNiMpLQlZig17fDnCJ73P0e5t/hRLFehZDlmEI2TK7j
Yeqbw078nZgyyuljZ7YsbstRIsWVCxobX5eH1kX+hIxuUqCAkCsWUY4abG89kHJr
XGQn6X1CX7xbZ+b6b9jLK+bJKFcLSfyqR3M2eCyscSiZYkWKQ5l3FYvbUzkeb6K0
IVNhdG9zaGkgQXNhbWkgPGFzYW1pQEZyZWVCU0QuT1JHPg==
=39SC
-----END PGP PUBLIC KEY BLOCK-----&a.jmb;
Jonathan M. Bresler <jmb@FreeBSD.org>
f16 Fingerprint16 = 31 57 41 56 06 C1 40 13 C5 1C E3 E5 DC 62 0E FB
-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: PGPfreeware 5.0i for non-commercial use
mQCNAzG2GToAAAEEANI6+4SJAAgBpl53XcfEr1M9wZyBqC0tzpie7Zm4vhv3hO8s
o5BizSbcJheQimQiZAY4OnlrCpPxijMFSaihshs/VMAz1qbisUYAMqwGEO/T4QIB
nWNo0Q/qOniLMxUrxS1RpeW5vbghErHBKUX9GVhxbiVfbwc4wAHbXdKX5jjdAAUR
tCVKb25hdGhhbiBNLiBCcmVzbGVyIDxqbWJARnJlZUJTRC5PUkc+iQCVAwUQNbtI
gAHbXdKX5jjdAQHamQP+OQr10QRknamIPmuHmFYJZ0jU9XPIvTTMuOiUYLcXlTdn
GyTUuzhbEywgtOldW2V5iA8platXThtqC68NsnN/xQfHA5xmFXVbayNKn8H5stDY
2s/4+CZ06mmJfqYmONF1RCbUk/M84rVT3Gn2tydsxFh4Pm32lf4WREZWRiLqmw+J
AJUDBRA0DfF99RVb+45ULV0BAcZ0BACCydiSUG1VR0a5DBcHdtin2iZMPsJUPRqJ
tWvP6VeI8OFpNWQ4LW6ETAvn35HxV2kCcQMyht1kMD+KEJz7r8Vb94TS7KtZnNvk
2D1XUx8Locj6xel5c/Lnzlnnp7Bp1XbJj2u/NzCaZQ0eYBdP/k7RLYBYHQQln5x7
BOuiRJNVU4kAlQMFEDQLcShVLh4uc9KIpQEBJv4D/3mDrD0MM9EYOVuyXik3UGVI
8quYNA9ErVcLdt10NjYc16VI2HOnYVgPRag3Wt7W8wlXShpokfC/vCNt7f5JgRf8
h2a1/MjQxtlD+4/Js8k7GLa53oLon6YQYk32IEKexoLPwIRO4L2BHWa3GzHJJSP2
aTR/Ep90/pLdAOu/oJDUiQCVAwUQMqyL0LNaYutZnzI9AQF25QP9GFXhBrz2tiWz
2+0gWbpcGNnyZbfsVjF6ojGDdmsjJMyWCGw49XR/vPKYIJY9EYo4t49GIajRkISQ
NNiIz22fBAjT2uY9YlvnTJ9NJleMfHr4dybo7oEKYMWWijQzGjqf2m8wf9OaaofE
KwBX6nxcRbKsxm/BVLKczGYl3XtjkcuJAJUDBRA1ol5TZWCprDT5+dUBATzXA/9h
/ZUuhoRKTWViaistGJfWi26FB/Km5nDQBr/Erw3XksQCMwTLyEugg6dahQ1u9Y5E
5tKPxbB69eF+7JXVHE/z3zizR6VL3sdRx74TPacPsdhZRjChEQc0htLLYAPkJrFP
VAzAlSlm7qd+MXf8fJovQs6xPtZJXukQukPNlhqZ94kAPwMFEDSH/kF4tXKgazlt
bxECfk4AoO+VaFVfguUkWX10pPSSfvPyPKqiAJ4xn8RSIe1ttmnqkkDMhLh00mKj
lLQuSm9uYXRoYW4gTS4gQnJlc2xlciA8Sm9uYXRoYW4uQnJlc2xlckBVU2kubmV0
PokAlQMFEDXbdSkB213Sl+Y43QEBV/4D/RLJNTrtAqJ1ATxXWv9g8Cr3/YF0GTmx
5dIrJOpBup7eSSmiM/BL9Is4YMsoVbXCI/8TqA67TMICvq35PZU4wboQB8DqBAr+
gQ8578M7Ekw1OAF6JXY6AF2P8k7hMcVBcVOACELPT/NyPNByG5QRDoNmlsokJaWU
/2ls4QSBZZlb
=zbCw
-----END PGP PUBLIC KEY BLOCK-----&a.ache;
Andrey A. Chernov <ache@FreeBSD.org>
aka <ache@nagual.pp.ru>
Key fingerprint = 33 03 9F 48 33 7B 4A 15 63 48 88 0A C4 97 FD 49
-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: 2.6.3ia
mQCNAiqUMGQAAAEEAPGhcD6A2Buey5LYz0sphDLpVgOZc/bb9UHAbaGKUAGXmafs
Dcb2HnsuYGgX/zrQXuCi/wIGtXcZWB97APtKOhFsZnPinDR5n/dde/mw9FnuhwqD
m+rKSL1HlN0z/Msa5y7g16760wHhSR6NoBSEG5wQAHIMMq7Q0uJgpPLZnQjrAAUT
tCVBbmRyZXkgQS4gQ2hlcm5vdiA8YWNoZUBuYWd1YWwucHAucnU+iQCVAwUQM2Ez
u+JgpPLZnQjrAQEyugP8DPnS8ixJ5OeuYgPFQf5sy6l+LrB6hyaS+lgsUPahWjNY
cnaDmfda/q/BV5d4+y5rlQe/pjnYG7/yQuAR3jhlXz8XDrqlBOnW9AtYjDt5rMfJ
aGFTGXAPGZ6k6zQZE0/YurT8ia3qjvuZm3Fw4NJrHRx7ETHRvVJDvxA6Ggsvmr20
JEFuZHJleSBBLiBDaGVybm92IDxhY2hlQEZyZWVCU0Qub3JnPokAlQMFEDR5uVbi
YKTy2Z0I6wEBLgED/2mn+hw4/3peLx0Sb9LNx//NfCCkVefSf2G9Qwhx6dvwbX7h
mFca97h7BQN4GubU1Z5Ffs6TeamSBrotBYGmOCwvJ6S9WigF9YHQIQ3B4LEjskAt
pcjU583y42zM11kkvEuQU2Gde61daIylJyOxsgpjSWpkxq50fgY2kLMfgl/ftCZB
bmRyZXkgQS4gQ2hlcm5vdiA8YWNoZUBuaWV0enNjaGUubmV0PokAlQMFEDR5svDi
YKTy2Z0I6wEBOTQD/0OTCAXIjuak363mjERvzSkVsNtIH9hA1l0w6Z95+iH0fHrW
xXKT0vBZE0y0Em+S3cotLL0bMmVE3F3D3GyxhBVmgzjyx0NYNoiQjYdi+6g/PV30
Cn4vOO6hBBpSyI6vY6qGNqcsawuRtHNvK/53MpOfKwSlICEBYQimcZhkci+EtCJB
bmRyZXkgQS4gQ2hlcm5vdiA8YWNoZUBuYWd1YWwucnU+iQCVAwUQMcm5HeJgpPLZ
nQjrAQHwvQP9GdmAf1gdcuayHEgNkc11macPH11cwWjYjzA2YoecFMGV7iqKK8QY
rr1MjbGXf8DAG8Ubfm0QbI8Lj8iG3NgqIru0c72UuHGSn/APfGGG0AtPX5UK/k7B
gI0Ca2po6NA5nrSp8tDsdEz/4gyea84RXl2prtTf5Jj07hflbRstGXK0MkFuZHJl
eSBBLiBDaGVybm92LCBCbGFjayBNYWdlIDxhY2hlQGFzdHJhbC5tc2suc3U+iQCV
AwUQMCsAo5/rGryoL8h3AQHq1QQAidyNFqA9hvrmMcjpY7csJVFlGvj574Wj4GPa
o3pZeuQaMBmsWqaXLYnWU/Aldb6kTz6+nRcQX50zFH0THSPfApwEW7yybSTI5apJ
mWT3qhKN2vmLNg2yNzhqLTzHLD1lH3i1pfQq8WevrNfjLUco5S/VuekTma/osnzC
Cw7fQzCJAJUDBRAwKvwoa1pnjYGyp3kBARihBACoXr3qfG65hFCyKJISmjOvaoGr
anxUIkeDS0yQdTHzhQ+dwB1OhhK15E0Nwr0MKajLMm90n6+Zdb5y/FIjpPriu8dI
rlHrWZlewa88eEDM+Q/NxT1iYg+HaKDAE171jmLpSpCL0MiJtO0i36L3ekVD7Hv8
vffOZHPSHirIzJOZTYkAlQMFEDAau6zFLUdtDb+QbQEBQX8D/AxwkYeFaYxZYMFO
DHIvSk23hAsjCmUA2Uil1FeWAusb+o8xRfPDc7TnosrIifJqbF5+fcHCG5VSTGlh
Bhd18YWUeabf/h9O2BsQX55yWRuB2x3diJ1xI/VVdG+rxlMCmE4ZR1Tl9x+Mtun9
KqKVpB39VlkCBYQ3hlgNt/TJUY4riQCVAwUQMBHMmyJRltlmbQBRAQFQkwP/YC3a
hs3ZMMoriOlt3ZxGNUUPTF7rIER3j+c7mqGG46dEnDB5sUrkzacpoLX5sj1tGR3b
vz9a4vmk1Av3KFNNvrZZ3/BZFGpq3mCTiAC9zsyNYQ8L0AfGIUO5goCIjqwOTNQI
AOpNsJ5S+nMAkQB4YmmNlI6GTb3D18zfhPZ6uciJAJUCBRAwD0sl4uW74fteFRkB
AWsAA/9NYqBRBKbmltQDpyK4+jBAYjkXBJmARFXKJYTlnTgOHMpZqoVyW96xnaa5
MzxEiu7ZWm5oL10QDIp1krkBP2KcmvfSMMHb5aGCCQc2/P8NlfXAuHtNGzYiI0UA
Iwi8ih/S1liVfvnqF9uV3d3koE7VsQ9OA4Qo0ZL2ggW+/gEaYIkAlQMFEDAOz6qx
/IyHe3rl4QEBIvYD/jIr8Xqo/2I5gncghSeFR01n0vELFIvaF4cHofGzyzBpYsfA
+6pgFI1IM+LUF3kbUkAY/2uSf9U5ECcaMCTWCwVgJVO+oG075SHEM4buhrzutZiM
1dTyTaepaPpTyRMUUx9ZMMYJs7sbqLId1eDwrJxUPhrBNvf/w2W2sYHSY8cdiQCV
AwUQMAzqgHcdkq6JcsfBAQGTxwQAtgeLFi2rhSOdllpDXUwz+SS6bEjFTWgRsWFM
y9QnOcqryw7LyuFmWein4jasjY033JsODfWQPiPVNA3UEnXVg9+n8AvNMPO8JkRv
Cn1eNg0VaJy9J368uArio93agd2Yf/R5r+QEuPjIssVk8hdcy/luEhSiXWf6bLMV
HEA0J+OJAJUDBRAwDUi+4mCk8tmdCOsBAatBBACHB+qtW880seRCDZLjl/bT1b14
5po60U7u6a3PEBkY0NA72tWDQuRPF/Cn/0+VdFNxQUsgkrbwaJWOoi0KQsvlOm3R
rsxKbn9uvEKLxExyKH3pxp76kvz/lEWwEeKvBK+84Pb1lzpG3W7u2XDfi3VQPTi3
5SZMAHc6C0Ct/mjNlYkAlQMFEDAMrPD7wj+NsTMUOQEBJckD/ik4WsZzm2qOx9Fw
erGq7Zwchc+Jq1YeN5PxpzqSf4AG7+7dFIn+oe6X2FcIzgbYY+IfmgJIHEVjDHH5
+uAXyb6l4iKc89eQawO3t88pfHLJWbTzmnvgz2cMrxt94HRvgkHfvcpGEgbyldq6
EB33OunazFcfZFRIcXk1sfyLDvYE
=1ahV
-----END PGP PUBLIC KEY BLOCK-----&a.jkh;
Jordan K. Hubbard <jkh@FreeBSD.org>
Fingerprint = 3C F2 27 7E 4A 6C 09 0A 4B C9 47 CD 4F 4D 0B 20
-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: 2.6.3ia
mQCNAzFjX0IAAAEEAML+nm9/kDNPp43ZUZGjYkm2QLtoC1Wxr8JulZXqk7qmhYcQ
jvX+fyoriJ6/7ZlnLe2oG5j9tZOnRLPvMaz0g9CpW6Dz3nkXrNPkmOFV9B8D94Mk
tyFeRJFqnkCuqBj6D+H8FtBwEeeTecSh2tJ0bZZTXnAMhxeOdvUVW/uOVC1dAAUR
tCNKb3JkYW4gSy4gSHViYmFyZCA8amtoQEZyZWVCU0Qub3JnPokBFQMFEDXCTXQM
j46yp4IfPQEBwO8IAIN0J09AXBf86dFUTFGcAMrEQqOF5IL+KGorAjzuYxERhKfD
ZV7jA+sCQqxkWfcVcE20kVyVYqzZIkio9a5zXP6TwA247JkPt54S1PmMDYHNlRIY
laXlNoji+4q3HP2DfHqXRT2859rYpm/fG/v6pWkos5voPKcZ2OFEp9W+Ap88oqw+
5rx4VetZNJq1Epmis4INj6XqNqj85+MOOIYE+f445ohDM6B/Mxazd6cHFGGIR+az
VjZ6lCDMLjzhB5+FqfrDLYuMjqkMTR5z9DL+psUvPlCkYbQ11NEWtEmiIWjUcNJN
GCxGzv5bXk0XPu3ADwbPkFE2usW1cSM7AQFiwuyJAJUDBRAxe+Q9a1pnjYGyp3kB
AV7XA/oCSL/Cc2USpQ2ckwkGpyvIkYBPszIcabSNJAzm2hsU9Qa6WOPxD8olDddB
uJNiW/gznPC4NsQ0N8Zr4IqRX/TTDVf04WhLmd8AN9SOrVv2q0BKgU6fLuk979tJ
utrewH6PR2qBOjAaR0FJNk4pcYAHeT+e7KaKy96YFvWKIyDvc4kAlQMFEDF8ldof
f6kIA1j8vQEBDH4D/0Zm0oNlpXrAE1EOFrmp43HURHbij8n0Gra1w9sbfo4PV+/H
U8ojTdWLy6r0+prH7NODCkgtIQNpqLuqM8PF2pPtUJj9HwTmSqfaT/LMztfPA6PQ
csyT7xxdXl0+4xTDl1avGSJfYsI8XCAy85cTs+PQwuyzugE/iykJO1Bnj/paiQCV
AwUQMXvlBvUVW/uOVC1dAQF2fQP/RfYC6RrpFTZHjo2qsUHSRk0vmsYfwG5NHP5y
oQBMsaQJeSckN4n2JOgR4T75U4vS62aFxgPLJP3lOHkU2Vc7xhAuBvsbGr5RP8c5
LvPOeUEyz6ZArp1KUHrtcM2iK1FBOmY4dOYphWyWMkDgYExabqlrAq7FKZftpq/C
BiMRuaw=
=C/Jw
-----END PGP PUBLIC KEY BLOCK-----&a.phk;
Poul-Henning Kamp <phk@FreeBSD.org>
Fingerprint = A3 F3 88 28 2F 9B 99 A2 49 F4 E2 FA 5A 78 8B 3E
-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: 2.6.3ia
mQCNAzAdpMIAAAEEALHDgrFUwhZtb7PbXg3upELoDVEUPFRwnmpJH1rRqyROUGcI
ooVe7u+FQlIs5OsXK8ECs/5Wpe2UrZSzHvjwBYOND5H42YtI5UULZLRCo5bFfTVA
K9Rpo5icfTsYihrzU2nmnycwFMk+jYXyT/ZDYWDP/BM9iLjj0x9/qQgDWPy9AAUR
tCNQb3VsLUhlbm5pbmcgS2FtcCA8cGhrQEZyZWVCU0Qub3JnPokAlQMFEDQQ0aZ1
u244dqP3sQEBu4ID/jXFFeJgs2MdTDNOZM/FbfDhI4qxAbYUsqS3+Ra16yd8Wd/A
jV+IHJE2NomFWl8UrUjCGinXiwzPgK1OfFJrS9Og1wQLvAl0X84BA8MTP9BQr4w7
6I/RbksgUSrVCIO8MJwlydjSPocWGBeXlVjbZxXzyuJk7H+TG+zuI5BuBcNIiQCV
AwUQMwYr2rNaYutZnzI9AQHiIQP/XxtBWFXaBRgVLEhRNpS07YdU+LsZGlLOZehN
9L4UnJFHQQPNOpMey2gF7Y95aBOw5/1xS5vlQpwmRFCntWsm/gqdzK6rulfr1r5A
y94LO5TAC6ucNu396Y4vo1TyD1STnRC466KlvmtQtAtFGgXlORWLL9URLzcRFd1h
D0yXd9aJAJUDBRAxfo19a1pnjYGyp3kBAQqyA/4v64vP3l1F0Sadn6ias761hkz/
SMdTuLzILmofSCC4o4KWMjiWJHs2Soo41QlZi1+xMHzV32JKiwFlGtPHqL+EHyXy
Q4H3vmf9/1KF+0XCaMtgI0wWUMziPSTJK8xXbRRmMDK/0F4TnVVaUhnmf+h5K7O6
XdmejDTa0X/NWcicmIkAlQMFEDF8lef1FVv7jlQtXQEBcnwD/0ro1PpUtlkLmreD
tsGTkNa7MFLegrYRvDDrHOwPZH152W2jPUncY+eArQJakeHiTDmJNpFagLZglhE0
bqJyca+UwCXX+6upAclWHEBMg2byiWMMqyPVEEnpUoHM1sIkgdNWlfQAmipRBfYh
2LyCgWvR8CbtwPYIFvUmGgB3MR87iQCVAwUQMUseXB9/qQgDWPy9AQGPkwP/WEDy
El2Gkvua9COtMAifot2vTwuvWWpNopIEx0Ivey4aVbRLD90gGCJw8OGDEtqFPcNV
8aIiy3fYVKXGZZjvCKd7zRfhNmQn0eLDcymq2OX3aPrMc2rRlkT4Jx425ukR1gsO
qiQAgw91aWhY8dlw/EKzk8ojm52x4VgXaBACMjaJAJUDBRAxOUOg72G56RHVjtUB
AbL4A/9HOn5Qa0lq9tKI/HkSdc5fGQD/66VdCBAb292RbB7CS/EM07MdbcqRRYIa
0+0gwQ3OdsWPdCVgH5RIhp/WiC+UPkR1cY8N9Mg2kTwJfZZfNqN+BgWlgRMPN27C
OhYNl8Q33Nl9CpBLrZWABF44jPeT0EvvTzP/5ZQ7T75EsYKYiYkAlQMFEDDmryQA
8tkJ67sbQQEBPdsEALCj6v1OBuJLLJTlxmmrkqAZPVzt5QdeO3Eqa2tcPWcU0nqP
vHYMzZcZ7oFg58NZsWrhSQQDIB5e+K65Q/h6dC7W/aDskZd64jxtEznX2kt0/MOr
8OdsDis1K2f9KQftrAx81KmVwW4Tqtzl7NWTDXt44fMOtibCwVq8v2DFkTJy
=JKbP
-----END PGP PUBLIC KEY BLOCK-----&a.rich;
Rich Murphey <rich@FreeBSD.org>
fingerprint = AF A0 60 C4 84 D6 0C 73 D1 EF C0 E9 9D 21 DB E4
-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: 2.6.2
mQCNAy97V+MAAAEEALiNM3FCwm3qrCe81E20UOSlNclOWfZHNAyOyj1ahHeINvo1
FBF2Gd5Lbj0y8SLMno5yJ6P4F4r+x3jwHZrzAIwMs/lxDXRtB0VeVWnlj6a3Rezs
wbfaTeSVyh5JohEcKdoYiMG5wjATOwK/NAwIPthB1RzRjnEeer3HI3ZYNEOpAAUR
tCRSaWNoIE11cnBoZXkgPHJpY2hAbGFtcHJleS51dG1iLmVkdT6JAJUDBRAve15W
vccjdlg0Q6kBAZTZBACcNd/LiVnMFURPrO4pVRn1sVQeokVX7izeWQ7siE31Iy7g
Sb97WRLEYDi686osaGfsuKNA87Rm+q5F+jxeUV4w4szoqp60gGvCbD0KCB2hWraP
/2s2qdVAxhfcoTin/Qp1ZWvXxFF7imGA/IjYIfB42VkaRYu6BwLEm3YAGfGcSw==
=QoiM
-----END PGP PUBLIC KEY BLOCK-----&a.jdp;
John D. Polstra <jdp@polstra.com>
Fingerprint = 54 3A 90 59 6B A4 9D 61 BF 1D 03 09 35 8D F6 0D
-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: 2.6.2
mQCNAzMElMEAAAEEALizp6ZW9QifQgWoFmG3cXhzQ1+Gt+a4S1adC/TdHdBvw1M/
I6Ok7TC0dKF8blW3VRgeHo4F3XhGn+n9MqIdboh4HJC5Iiy63m98sVLJSwyGO4oM
dkEGyyCLxqP6h/DU/tzNBdqFzetGtYvU4ftt3RO0a506cr2CHcdm8Q+/vPRJAAUR
tCFKb2huIEQuIFBvbHN0cmEgPGpkcEBwb2xzdHJhLmNvbT6JAJUDBRAzBNBE9RVb
+45ULV0BAWgiA/0WWO3+c3qlptPCHJ3DFm6gG/qNKsY94agL/mHOr0fxMP5l2qKX
O6a1bWkvGoYq0EwoKGFfn0QeHiCl6jVi3CdBX+W7bObMcoi+foqZ6zluOWBC1Jdk
WQ5/DeqQGYXqbYjqO8voCScTAPge3XlMwVpMZTv24u+nYxtLkE0ZcwtY9IkAlQMF
EDMEt/DHZvEPv7z0SQEBXh8D/2egM5ckIRpGz9kcFTDClgdWWtlgwC1iI2p9gEhq
aufy+FUJlZS4GSQLWB0BlrTmDC9HuyQ+KZqKFRbVZLyzkH7WFs4zDmwQryLV5wkN
C4BRRBXZfWy8s4+zT2WQD1aPO+ZsgRauYLkJgTvXTPU2JCN62Nsd8R7bJS5tuHEm
7HGmiQCVAwUQMwSvHB9/qQgDWPy9AQFAhAQAgJ1AlbKITrEoJ0+pLIsov3eQ348m
SVHEBGIkU3Xznjr8NzT9aYtq4TIzt8jplqP3QoV1ka1yYpZf0NjvfZ+ffYp/sIaU
wPbEpgtmHnVWJAebMbNs/Ad1w8GDvxEt9IaCbMJGZnHmfnEqOBIxF7VBDPHHoJxM
V31K/PIoYsHAy5w=
=cHFa
-----END PGP PUBLIC KEY BLOCK-----&a.guido;
Guido van Rooij <guido@gvr.win.tue.nl>
Fingerprint = 16 79 09 F3 C0 E4 28 A7 32 62 FA F6 60 31 C0 ED
-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: 2.6.2
mQCNAzGeO84AAAEEAKKAY91Na//DXwlUusr9GVESSlVwVP6DyH1wcZXhfN1fyZHq
SwhMCEdHYoojQds+VqD1iiZQvv1RLByBgj622PDAPN4+Z49HjGs7YbZsUNuQqPPU
wRPpP6ty69x1hPKq1sQIB5MS4radpCM+4wbZbhxv7l4rP3RWUbNaYutZnzI9AAUR
tCZHdWlkbyB2YW4gUm9vaWogPGd1aWRvQGd2ci53aW4udHVlLm5sPokAlQMFEDMG
Hcgff6kIA1j8vQEBbYgD/jm9xHuUuY+iXDkOzpCXBYACYEZDV913MjtyBAmaVqYo
Rh5HFimkGXe+rCo78Aau0hc57fFMTsJqnuWEqVt3GRq28hSK1FOZ7ni9/XibHcmN
rt2yugl3hYpClijo4nrDL1NxibbamkGW/vFGcljS0jqXz6NDVbGx5Oo7HBByxByz
iQCVAwUQMhmtVjt/x7zOdmsfAQFuVQQApsVUTigT5YWjQA9Nd5Z0+a/oVtZpyw5Z
OljLJP3vqJdMa6TidhfcatjHbFTve5x1dmjFgMX/MQTd8zf/+Xccy/PX4+lnKNpP
eSf1Y4aK+E8KHmBGd6GzX6CIboyGYLS9e3kGnN06F2AQtaLyJFgQ71wRaGuyKmQG
FwTn7jiKb1aJAJUDBRAyEOLXPt3iN6QQUSEBATwQA/9jqu0Nbk154+Pn+9mJX/YT
fYR2UqK/5FKCqgL5Nt/Deg2re0zMD1f8F9Dj6vuAAxq8hnOkIHKlWolMjkRKkzJi
mSPEWl3AuHJ31k948J8it4f8kq/o44usIA2KKVMlI63Q/rmNdfWCyiYQEVGcRbTm
GTdZIHYCOgV5dOo4ebFqgYkAlQMFEDIE1nMEJn15jgpJ0QEBW6kEAKqN8XSgzTqf
CrxFXT07MlHhfdbKUTNUoboxCGCLNW05vf1A8F5fdE5i14LiwkldWIzPxWD+Sa3L
fNPCfCZTaCiyGcLyTzVfBHA18MBAOOX6JiTpdcm22jLGUWBf/aJK3yz/nfbWntd/
LRHysIdVp29lP5BF+J9/Lzbb/9LxP1taiQCVAwUQMgRXZ44CzbsJWQz9AQFf7gP/
Qa2FS5S6RYKG3rYanWADVe/ikFV2lxuM1azlWbsmljXvKVWGe6cV693nS5lGGAjx
lbd2ADwXjlkNhv45HLWFm9PEveO9Jjr6tMuXVt8N2pxiX+1PLUN9CtphTIU7Yfjn
s6ryZZfwGHSfIxNGi5ua2SoXhg0svaYnxHxXmOtH24iJAJUDBRAyAkpV8qaAEa3W
TBkBARfQBAC+S3kbulEAN3SI7/A+A/dtl9DfZezT9C4SRBGsl2clQFMGIXmMQ/7v
7lLXrKQ7U2zVbgNfU8smw5h2vBIL6f1PyexSmc3mz9JY4er8KeZpcf6H0rSkHl+i
d7TF0GvuTdNPFO8hc9En+GG6QHOqbkB4NRZ6cwtfwUMhk2FHXBnjF4kAlQMFEDH5
FFukUJAsCdPmTQEBe74EAMBsxDnbD9cuI5MfF/QeTNEG4BIVUZtAkDme4Eg7zvsP
d3DeJKCGeNjiCWYrRTCGwaCWzMQk+/+MOmdkI6Oml+AIurJLoHceHS9jP1izdP7f
N2jkdeJSBsixunbQWtUElSgOQQ4iF5kqwBhxtOfEP/L9QsoydRMR1yB6WPD75H7V
iQCVAwUQMZ9YNGtaZ42Bsqd5AQH0PAQAhpVlAc3ZM/KOTywBSh8zWKVlSk3q/zGn
k7hJmFThnlhH1723+WmXE8aAPJi+VXOWJUFQgwELJ6R8jSU2qvk2m1VWyYSqRKvc
VRQMqT2wjss0GE1Ngg7tMrkRHT0il7E2xxIb8vMrIwmdkbTfYqBUhhGnsWPHZHq7
MoA1/b+rK7CJAJUDBRAxnvXh3IDyptUyfLkBAYTDA/4mEKlIP/EUX2Zmxgrd/JQB
hqcQlkTrBAaDOnOqe/4oewMKR7yaMpztYhJs97i03Vu3fgoLhDspE55ooEeHj0r4
cOdiWfYDsjSFUYSPNVhW4OSruMA3c29ynMqNHD7hpr3rcCPUi7J2RncocOcCjjK2
BQb/9IAUNeK4C9gPxMEZLokAlQMFEDGeO86zWmLrWZ8yPQEBEEID/2fPEUrSX3Yk
j5TJPFZ9MNX0lEo7AHYjnJgEbNI4pYm6C3PnMlsYfCSQDHuXmRQHAOWSdwOLvCkN
F8eDaF3M6u0urgeVJ+KVUnTz2+LZoZs12XSZKCte0HxjbvPpWMTTrYyimGezH79C
mgDVjsHaYOx3EXF0nnDmtXurGioEmW1J
=mSvM
-----END PGP PUBLIC KEY BLOCK-----&a.peter;
Peter Wemm <peter@FreeBSD.org>
aka <peter@spinner.dialix.com>
aka <peter@haywire.dialix.com>
aka <peter@perth.dialix.oz.au>
Key fingerprint = 47 05 04 CA 4C EE F8 93 F6 DB 02 92 6D F5 58 8A
-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: 2.6.3ia
mQCNAy9/FJwAAAEEALxs9dE9tFd0Ru1TXdq301KfEoe5uYKKuldHRBOacG2Wny6/
W3Ill57hOi2+xmq5X/mHkapywxvy4cyLdt31i4GEKDvxpDvEzAYcy2n9dIup/eg2
kEhRBX9G5k/LKM4NQsRIieaIEGGgCZRm0lINqw495aZYrPpO4EqGN2HYnOMZAAUT
tCVQZXRlciBXZW1tIDxwZXRlckBoYXl3aXJlLmRpYWxpeC5jb20+iQCVAwUQMwWT
cXW7bjh2o/exAQEFkQP+LIx5zKlYp1uR24xGApMFNrNtjh+iDIWnxxb2M2Kb6x4G
9z6OmbUCoDTGrX9SSL2Usm2RD0BZfyv9D9QRWC2TSOPkPRqQgIycc11vgbLolJJN
eixqsxlFeKLGEx9eRQCCbo3dQIUjc2yaOe484QamhsK1nL5xpoNWI1P9zIOpDiGJ
AJUDBRAxsRPqSoY3Ydic4xkBAbWLA/9q1Fdnnk4unpGQsG31Qbtr4AzaQD5m/JHI
4gRmSmbj6luJMgNG3fpO06Gd/Z7uxyCJB8pTst2a8C/ljOYZxWT+5uSzkQXeMi5c
YcI1sZbUpkHtmqPW623hr1PB3ZLA1TIcTbQW+NzJsxQ1Pc6XG9fGkT9WXQW3Xhet
AP+juVTAhLQlUGV0ZXIgV2VtbSA8cGV0ZXJAcGVydGguZGlhbGl4Lm96LmF1PokA
lQMFEDGxFCFKhjdh2JzjGQEB6XkD/2HOwfuFrnQUtdwFPUkgtEqNeSr64jQ3Maz8
xgEtbaw/ym1PbhbCk311UWQq4+izZE2xktHTFClJfaMnxVIfboPyuiSF99KHiWnf
/Gspet0S7m/+RXIwZi1qSqvAanxMiA7kKgFSCmchzas8TQcyyXHtn/gl9v0khJkb
/fv3R20btB5QZXRlciBXZW1tIDxwZXRlckBGcmVlQlNELm9yZz6JAJUDBRAxsRJd
SoY3Ydic4xkBAZJUA/4i/NWHz5LIH/R4IF/3V3LleFyMFr5EPFY0/4mcv2v+ju9g
brOEM/xd4LlPrx1XqPeZ74JQ6K9mHR64RhKR7ZJJ9A+12yr5dVqihe911KyLKab9
4qZUHYi36WQu2VtLGnw/t8Jg44fQSzbBF5q9iTzcfNOYhRkSD3BdDrC3llywO7Ql
UGV0ZXIgV2VtbSA8cGV0ZXJAc3Bpbm5lci5kaWFsaXguY29tPokAlQMFEDGxEi1K
hjdh2JzjGQEBdA4EAKmNFlj8RF9HQsoI3UabnvYqAWN5wCwEB4u+Zf8zq6OHic23
TzoK1SPlmSdBE1dXXQGS6aiDkLT+xOdeewNs7nfUIcH/DBjSuklAOJzKliXPQW7E
kuKNwy4eq5bl+j3HB27i+WBXhn6OaNNQY674LGaR41EGq44Wo5ATcIicig/z
=gv+h
-----END PGP PUBLIC KEY BLOCK-----&a.joerg;
Type Bits/KeyID Date User ID
pub 1024/76A3F7B1 1996/04/27 Joerg Wunsch <joerg_wunsch@uriah.heep.sax.de>
Key fingerprint = DC 47 E6 E4 FF A6 E9 8F 93 21 E0 7D F9 12 D6 4E
Joerg Wunsch <joerg_wunsch@interface-business.de>
Joerg Wunsch <j@uriah.heep.sax.de>
Joerg Wunsch <j@interface-business.de>
-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: 2.6.3ia
mQCNAzGCFeAAAAEEAKmRBU2Nvc7nZy1Ouid61HunA/5hF4O91cXm71/KPaT7dskz
q5sFXvPJPpawwvqHPHfEbAK42ZaywyFp59L1GaYj87Pda+PlAYRJyY2DJl5/7JPe
ziq+7B8MdvbX6D526sdmcR+jPXPbHznASjkx9DPmK+7TgFujyXW7bjh2o/exAAUR
tC1Kb2VyZyBXdW5zY2ggPGpvZXJnX3d1bnNjaEB1cmlhaC5oZWVwLnNheC5kZT6J
AJUDBRA0FFkBs1pi61mfMj0BAfDCA/oCfkjrhvRwRCpSL8klJ1YDoUJdmw+v4nJc
pw3OpYXbwKOPLClsE7K3KCQscHel7auf91nrekAwbrXv9Clp0TegYeAQNjw5vZ9f
L6UZ5l3fH8E2GGA7+kqgNWs1KxAnG5GdUvJ9viyrWm8dqWRGo+loDWlZ12L2OgAD
fp7jVZTI1okAlQMFEDQPrLoff6kIA1j8vQEB2XQEAK/+SsQPCT/X4RB/PBbxUr28
GpGJMn3AafAaA3plYw3nb4ONbqEw9tJtofAn4UeGraiWw8nHYR2DAzoAjR6OzuX3
TtUV+57BIzrTPHcNkb6h8fPuHU+dFzR+LNoPaGJsFeov6w+Ug6qS9wa5FGDAgaRo
LHSyBxcRVoCbOEaS5S5EiQCVAwUQM5BktWVgqaw0+fnVAQGKPwP+OiWho3Zm2GKp
lEjiZ5zx3y8upzb+r1Qutb08jr2Ewja04hLg0fCrt6Ad3DoVqxe4POghIpmHM4O4
tcW92THQil70CLzfCxtfUc6eDzoP3krD1/Gwpm2hGrmYA9b/ez9+r2vKBbnUhPmC
glx5pf1IzHU9R2XyQz9Xu7FI2baOSZqJAJUDBRAyCIWZdbtuOHaj97EBAVMzA/41
VIph36l+yO9WGKkEB+NYbYOz2W/kyi74kXLvLdTXcRYFaCSZORSsQKPGNMrPZUoL
oAKxE25AoCgl5towqr/sCcu0A0MMvJddUvlQ2T+ylSpGmWchqoXCN7FdGyxrZ5zz
xzLIvtcio6kaHd76XxyJpltCASupdD53nEtxnu8sRrQxSm9lcmcgV3Vuc2NoIDxq
b2VyZ193dW5zY2hAaW50ZXJmYWNlLWJ1c2luZXNzLmRlPokAlQMFEDIIhfR1u244
dqP3sQEBWoID/RhBm+qtW+hu2fqAj9d8CVgEKJugrxZIpXuCKFvO+bCgQtogt9EX
+TJh4s8UUdcFkyEIu8CT2C3Rrr1grvckfxvrTgzSzvtYyv1072X3GkVY+SlUMBMA
rdl1qNW23oT7Q558ajnsaL065XJ5m7HacgTTikiofYG8i1s7TrsEeq6PtCJKb2Vy
ZyBXdW5zY2ggPGpAdXJpYWguaGVlcC5zYXguZGU+iQCVAwUQMaS91D4gHQUlG9CZ
AQGYOwQAhPpiobK3d/fz+jWrbQgjkoO+j39glYGXb22+6iuEprFRs/ufKYtjljNT
NK3B4DWSkyIPawcuO4Lotijp6jke2bsjFSSashGWcsJlpnwsv7EeFItT3oWTTTQQ
ItPbtNyLW6M6xB+jLGtaAvJqfOlzgO9BLfHuA2LY+WvbVW447SWJAJUDBRAxqWRs
dbtuOHaj97EBAXDBA/49rzZB5akkTSbt/gNd38OJgC+H8N5da25vV9dD3KoAvXfW
fw7OxIsxvQ/Ab+rJmukrrWxPdsC+1WU1+1rGa4PvJp/VJRDes2awGrn+iO7/cQoS
IVziC27JpcbvjLvLVcBIiy1yT/RvJ+87a3jPRHt3VFGcpFh4KykxxSNiyGygl4kA
lQMFEDGCUB31FVv7jlQtXQEB5KgD/iIJZe5lFkPr2B/Cr7BKMVBot1/JSu05NsHg
JZ3uK15w4mVtNPZcFi/dKbn+qRM6LKDFe/GF0HZD/ZD1FJt8yQjzF2w340B+F2GG
EOwnClqZDtEAqnIBzM/ECQQqH+6Bi8gpkFZrFgg5eON7ikqmusDnOlYStM/CBfgp
SbR8kDmFtCZKb2VyZyBXdW5zY2ggPGpAaW50ZXJmYWNlLWJ1c2luZXNzLmRlPokA
lQMFEDHioSdlYKmsNPn51QEByz8D/10uMrwP7MdaXnptd1XNFhpaAPYTVAOcaKlY
OGI/LLR9PiU3FbqXO+7INhaxFjBxa0Tw/p4au5Lq1+Mx81edHniJZNS8tz3I3goi
jIC3+jn2gnVAWnK5UZUTUVUn/JLVk/oSaIJNIMMDaw4J9xPVVkb+Fh1A+XqtPsVa
YESrNp0+iQCVAwUQMwXkzcdm8Q+/vPRJAQEA4QQAgNNX1HFgXrMetDb+w6yEGQDk
JCDAY9b6mA2HNeKLQAhsoZl4HwA1+iuQaCgo3lyFC+1Sf097OUTs74z5X1vCedqV
oFw9CxI3xuctt3pJCbbN68flOlnq0WdYouWWGlFwLlh5PEy//VtwX9lqgsizlhzi
t+fX6BT4BgKi5baDhrWJAJUDBRAyCKveD9eCJxX4hUkBAebMA/9mRPy6K6i7TX2R
jUKSl2p5oYrXPk12Zsw4ijuktslxzQhOCyMSCGK2UEC4UM9MXp1H1JZQxN/DcfnM
7VaUt+Ve0wZ6DC9gBSHJ1hKVxHe5XTj26mIr4rcXNy2XEDMK9QsnBxIAZnBVTjSO
LdhqqSMp3ULLOpBlRL2RYrqi27IXr4kAlQMFEDGpbnd1u244dqP3sQEBJnQD/RVS
Azgf4uorv3fpbosI0LE3LUufAYGBSJNJnskeKyudZkNkI5zGGDwVneH/cSkKT4OR
ooeqcTBxKeMaMuXPVl30QahgNwWjfuTvl5OZ8orsQGGWIn5FhqYXsKkjEGxIOBOf
vvlVQ0UbcR0N2+5F6Mb5GqrXZpIesn7jFJpkQKPU
=97h7
-----END PGP PUBLIC KEY BLOCK-----Developers&a.wosch;
Type Bits/KeyID Date User ID
pub 1024/2B7181AD 1997/08/09 Wolfram Schneider <wosch@FreeBSD.org>
Key fingerprint = CA 16 91 D9 75 33 F1 07 1B F0 B4 9F 3E 95 B6 09
-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: 2.6.3ia
mQCNAzPs+aEAAAEEAJqqMm2I9CxWMuHDvuVO/uh0QT0az5ByOktwYLxGXQmqPG1G
Q3hVuHWYs5Vfm/ARU9CRcVHFyqGQ3LepoRhDHk+JcASHan7ptdFsz7xk1iNNEoe0
vE2rns38HIbiyQ/2OZd4XsyhFOFtExNoBuyDyNoe3HbHVBQT7TmN/mkrcYGtAAUR
tCVXb2xmcmFtIFNjaG5laWRlciA8d29zY2hARnJlZUJTRC5vcmc+iQCVAwUQNxnH
AzmN/mkrcYGtAQF5vgP/SLOiI4AwuPHGwUFkwWPRtRzYSySXqwaPCop5mVak27wk
pCxGdzoJO2UgcE812Jt92Qas91yTT0gsSvOVNATaf0TM3KnKg5ZXT1QIzYevWtuv
2ovAG4au3lwiFPDJstnNAPcgLF3OPni5RCUqBjpZFhb/8YDfWYsMcyn4IEaJKre0
JFdvbGZyYW0gU2NobmVpZGVyIDxzY2huZWlkZXJAemliLmRlPokAlQMFEDcZxu85
jf5pK3GBrQEBCRgD/jPj1Ogx4O769soiguL1XEHcxhqtrpKZkKwxmDLRa0kJFwLp
bBJ3Qz3vwaB7n5gQU0JiL1B2M7IxVeHbiIV5pKp7FD248sm+HZvBg6aSnCg2JPUh
sHd1tK5X4SB5cjFt3Cj0LIN9/c9EUxm3SoML9bovmze60DckErrRNOuTk1IntCJX
b2xmcmFtIFNjaG5laWRlciA8d29zY2hAYXBmZWwuZGU+iQEVAwUQNmfWXAjJLLJO
sC7dAQEASAgAnE4g2fwMmFkQy17ATivljEaDZN/m0GdXHctdZ8CaPrWk/9/PTNK+
U6xCewqIKVwtqxVBMU1VpXUhWXfANWCB7a07D+2GrlB9JwO5NMFJ6g0WI/GCUXjC
xb3NTkNsvppL8Rdgc8wc4f23GG4CXVggdTD2oUjUH5Bl7afgOT4xLPAqePhS7hFB
UnMsbA94OfxPtHe5oqyaXt6cXH/SgphRhzPPZq0yjg0Ef+zfHVamvZ6Xl2aLZmSv
Cc/rb0ShYDYi39ly9OPPiBPGbSVw2Gg804qx3XAKiTFkLsbYQnRt7WuCPsOVjFkf
CbQS31TaclOyzenZdCAezubGIcrJAKZjMIkAlQMFEDPs+aE5jf5pK3GBrQEBlIAD
/3CRq6P0m1fi9fbPxnptuipnoFB/m3yF6IdhM8kSe4XlXcm7tS60gxQKZgBO3bDA
5QANcHdl41Vg95yBAZepPie6iQeAAoylRrONeIy6XShjx3S0WKmA4+C8kBTL+vwa
UqF9YJ1qesZQtsXlkWp/Z7N12RkueVAVQ7wRPwfnz6E3tC5Xb2xmcmFtIFNjaG5l
aWRlciA8d29zY2hAcGFua2UuZGUuZnJlZWJzZC5vcmc+iQCVAwUQNxnEqTmN/mkr
cYGtAQFnpQP9EpRZdG6oYN7d5abvIMN82Z9x71a4QBER+R62mU47wqdRG2b6jMMh
3k07b2oiprVuPhRw/GEPPQevb6RRT6SD9CPYAGfK3MDE8ZkMj4d+7cZDRJQ35sxv
gAzQwuA9l7kS0mt5jFRPcEg5/KpuyehRLckjx8jpEM7cEJDHXhBIuVg=
=3V1R
-----END PGP PUBLIC KEY BLOCK-----&a.brian;
Type Bits/KeyID Date User ID
pub 1024/666A7421 1997/04/30 Brian Somers <brian@awfulhak.org>
Key fingerprint = 2D 91 BD C2 94 2C 46 8F 8F 09 C4 FC AD 12 3B 21
Brian Somers <brian@uk.FreeBSD.org>
Brian Somers <brian@OpenBSD.org>
Brian Somers <brian@FreeBSD.org>
-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: 2.6.3ia
mQCNAzNmogUAAAEEALdsjVsV2dzO8UU4EEo7z3nYuvB2Q6YJ8sBUYjB8/vfR5oZ9
7aEQjgY5//pXvS30rHUB9ghk4kIFSljzeMudE0K2zH5n2sxpLbBKWZRDLS7xnrDC
I3j9CNKwQBzMPs0fUT46gp96nf1X8wPiJXkDUEia/c0bRbXlLw7tvOdmanQhAAUR
tCFCcmlhbiBTb21lcnMgPGJyaWFuQGF3ZnVsaGFrLm9yZz6JAJUDBRA3Fjs4H3+p
CANY/L0BAZOxBACTZ1zPdaJzEdT4AfrebQbaU4ytEeodnVXZIkc8Il+LDlDOUAIe
k5PgnHTRM4yiwcZuYQrCDRFgdOofcFfRo0PD7mGFzd22qPGmbvHiDBCYCyhlkPXW
IDeoA1cX77JlU1NFdy0dZwuX7csaMlpjCkOPc7+856mr6pQi48zj7yZtrYkAlQMF
EDcUqZ2dZ0EADG4SFQEBEm0EAL2bBNc4vpxPrg3ATdZ/PekpL6lYj3s9pBf8f7eY
LXq438A/ywiWkrL74gXxcZ2Ey9AHZW+rbJPzUbrfMAgP3uWobeSvDyKRo1wtKnTY
Hy+OEIbBIHDmIUuK3L7KupBf7WAI46Q7fnyz0txvtRruDjvfoyl9/TSRfIKcaw2a
INh7iQCVAwUQNwyWpmdKPfFUsXG5AQEIrAQAmukv2u9ihcnO2Zaak265I+gYozu+
biAngdXNfhTGMeExFzdzQ8Qe7EJugMpIDEkJq2goY35sGitD+ogSVWECjcVbHIAP
M2u9axFGlK7fDOmmkH2ZWDMtwx2I5dZps3q2g9mY2O9Az5Yokp7GW7viSpWXHTRH
xOsuY6aze71U7RWJAHUDBRA3DAEvDuwDH3697LEBAWRHAv9XXkub6mir/DCxzKI2
AE3tek40lRfU6Iukjl/uzT9GXcL3uEjIewiPTwN+k4IL+qcCEdv8WZgv/tO45r59
IZQsicNaSAsKX/6Cxha6Hosg1jw4rjdyz13rgYRi/nreq5mJAJUDBRA2r0CM9p+f
Pnxlu7UBAYObA/40s5SwEpXTrePO78AoUFEa5Z4bgyxkpT7BVbq6m/oQtK509Xe2
M2y0XTLkd86oXpjyKzGzWq8T6ZTKNdF9+5LhS2ylJytdPq1AjDk2BocffWX4+pXn
RPiC6XcNdYGiQL8OTHvZESYQDiHeMfwA8WdMzFK1R80nJMwANYXjJJrLzYkAlQMF
EDNt51zvs7EFZlNtbQEBW0UD/jZB6UDdEFdhS0hxgahv5CxaQDWQbIEpAY9JL1yg
d1RWMKUFGXdRkWZmHEA4NvtwFFeam/HZm4yuGf8yldMyo84loTcVib7lKh4CumGx
FT5Pxeh/F8u9EeQzclRFSMhVl0BA2/HEGyjw0kbkprI/RD3pXD7ewTAUrj2O3XhE
InLgiQCVAwUQM3O9vWyr6JZzEUkFAQF9nAP9Hco0V/3Kl70N5ryPVgh41nUTd7Td
6fUjx8yPoSZLX8vVZ8XMyd8ULFmzsmA+2QG4HcKo/x/4s50O3o8c+o1qSYj0Tp+K
4Z8lneMVlgBNdrRcq4ijEgk0qGqSlsXyLElkVPEXAADBVgzf6yqvipDwXNVzl6e3
GPLE8U2TAnBFZX6JAJUDBRAzZqIFDu2852ZqdCEBATsuBACI3ofP7N3xuHSc7pWL
NsnFYVEc9utBaclcagxjLLzwPKzMBcLjNGyGXIZQNB0d4//UMUJcMS7vwZ8MIton
VubbnJVHuQvENloRRARtarF+LC7OLMCORrGtbt0FtYgvBaqtgXlNcKXD6hRT+ghR
bi3q34akA7Xw8tiFIxdVgSusALQjQnJpYW4gU29tZXJzIDxicmlhbkB1ay5GcmVl
QlNELm9yZz6JAJUDBRA3FLWcnWdBAAxuEhUBAcYYBACos9nKETuaH+z2h0Ws+IIY
mN9FEm8wpPUcQmX5GFhfBUQ+rJbflzv0jJ/f2ac9qJHgIIAlJ3pMkfMpU8UYHEuo
VCe4ZTU5sr4ZdBaF9kpm2OriFgZwIv4QAi7dCMu9ZwGRtZ3+z3DQsVSagucjZTIe
yTUR6K+7E3YXANQjOdqFZYkAlQMFEDcUpeQO7bznZmp0IQEB4HED/Ru3NjwWO1gl
xEiLTzRpU31Rh1Izw1lhVMVJkLAGBw9ieSkjvdIkuhqV1i+W4wKBClT0UOE28Kjp
WbBKPFIASRYzN4ySwpprsG5H45EFQosovYG/HPcMzXU2GMj0iwVTxnMq7I8oH588
ExHqfEN2ARD3ngmB2499ruyGl26pW/BftCBCcmlhbiBTb21lcnMgPGJyaWFuQE9w
ZW5CU0Qub3JnPokAlQMFEDcUtW6dZ0EADG4SFQEBQwsD/j9B/lkltIdnQdjOqR/b
dOBgJCtUf905y6kD+k4kbxeT1YAaA65KJ2o/Zj+i+69F2+BUJ/3kYB7prKwut2h0
ek1ZtncGxoAsQdFJ5JSeMkwUZ5qtGeCmVPb59+KPq3nU6p3RI8Bn77FzK//Qy+IW
/WFVJbf/6NCNCbyRiRjPbGl/iQCVAwUQNxSlyA7tvOdmanQhAQFzMAP/dvtsj3yB
C+seiy6fB/nS+NnKBoff3Ekv57FsZraGt4z9n4sW61eywaiRzuKlhHqrDE17STKa
fBOaV1Ntl7js7og5IFPWNlVh1cK+spDmd655D8pyshziDF6fSAsqGfTn35xl23Xj
O20MMK44j4I5V6rEyUDBDrmX49J56OFkfwa0IEJyaWFuIFNvbWVycyA8YnJpYW5A
RnJlZUJTRC5vcmc+iQCVAwUQNxS1Y51nQQAMbhIVAQHPBQP+IMUlE4DtEvSZFtG4
YK9usfHSkStIafh/F/JzSsqdceLZgwcuifbemw79Rhvqhp0Cyp7kuI2kHO3a19kZ
3ZXlDl3VDg41SV/Z5LzNw9vaZKuF/vtGaktOjac5E5aznWGIA5czwsRgydEOcd8O
VPMUMrdNWRI6XROtnbZaRSwmD8aJAJUDBRA3FKWuDu2852ZqdCEBAWVJA/4x3Mje
QKV+KQoO6mOyoIcD4GK1DjWDvNHGujJbFGBmARjr/PCm2cq42cPzBxnfRhCfyEvN
aesNB0NjLjRU/m7ziyVn92flAzHqqmU36aEdqooXUY2T3vOYzo+bM7VtInarG1iU
qw1G19GgXUwUkPvy9+dNIM/aYoI/e0Iv3P9uug==
=R3k0
-----END PGP PUBLIC KEY BLOCK-----
diff --git a/en_US.ISO_8859-1/books/handbook/policies/chapter.sgml b/en_US.ISO_8859-1/books/handbook/policies/chapter.sgml
index 76f8f4f2d6..83cf490b8a 100644
--- a/en_US.ISO_8859-1/books/handbook/policies/chapter.sgml
+++ b/en_US.ISO_8859-1/books/handbook/policies/chapter.sgml
@@ -1,391 +1,391 @@
Source Tree Guidelines and PoliciesContributed by &a.phk;.This chapter documents various guidelines and policies in force for
the FreeBSD source tree.MAINTAINER on MakefilesJune 1996.If a particular portion of the FreeBSD distribution is being
maintained by a person or group of persons, they can communicate this
fact to the world by adding a
MAINTAINER= email-addresses
line to the Makefiles covering this portion of the
source tree.The semantics of this are as follows:The maintainer owns and is responsible for that code. This means
that he is responsible for fixing bugs and answer problem reports
pertaining to that piece of the code, and in the case of contributed
software, for tracking new versions, as appropriate.Changes to directories which have a maintainer defined shall be sent
to the maintainer for review before being committed. Only if the
maintainer does not respond for an unacceptable period of time, to
several emails, will it be acceptable to commit changes without review
by the maintainer. However, it is suggested that you try and have the
changes reviewed by someone else if at all possible.It is of course not acceptable to add a person or group as
maintainer unless they agree to assume this duty. On the other hand it
doesn't have to be a committer and it can easily be a group of
people.Contributed SoftwareContributed by &a.phk; and &a.obrien;. June 1996.Some parts of the FreeBSD distribution consist of software that is
actively being maintained outside the FreeBSD project. For historical
reasons, we call this contributed software. Some
examples are perl, gcc and patch.Over the last couple of years, various methods have been used in
dealing with this type of software and all have some number of
advantages and drawbacks. No clear winner has emerged.Since this is the case, after some debate one of these methods has
been selected as the “official” method and will be required
for future imports of software of this kind. Furthermore, it is
strongly suggested that existing contributed software converge on this
model over time, as it has significant advantages over the old method,
including the ability to easily obtain diffs relative to the
“official” versions of the source by everyone (even without
cvs access). This will make it significantly easier to return changes
to the primary developers of the contributed software.Ultimately, however, it comes down to the people actually doing the
work. If using this model is particularly unsuited to the package being
dealt with, exceptions to these rules may be granted only with the
approval of the core team and with the general consensus of the other
developers. The ability to maintain the package in the future will be a
key issue in the decisions.Because of some unfortunate design limitations with the RCS file
format and CVS's use of vendor branches, minor, trivial and/or
cosmetic changes are strongly discouraged on
files that are still tracking the vendor branch. “Spelling
fixes” are explicitly included here under the
“cosmetic” category and are to be avoided for files with
revision 1.1.x.x. The repository bloat impact from a single character
change can be rather dramatic.The Tcl embedded programming
language will be used as example of how this model works:src/contrib/tcl contains the source as
distributed by the maintainers of this package. Parts that are entirely
not applicable for FreeBSD can be removed. In the case of Tcl, the
mac, win and
compat subdirectories were eliminated before the
importsrc/lib/libtcl contains only a "bmake style"
Makefile that uses the standard
bsd.lib.mk makefile rules to produce the library
and install the documentation.src/usr.bin/tclsh contains only a bmake style
Makefile which will produce and install the
tclsh program and its associated man-pages using the
standard bsd.prog.mk rules.src/tools/tools/tcl_bmake contains a couple of
shell-scripts that can be of help when the tcl software needs updating.
These are not part of the built or installed software.The important thing here is that the
src/contrib/tcl directory is created according to
the rules: It is supposed to contain the sources as distributed (on a
proper CVS vendor-branch and without RCS keyword expansion) with as few
FreeBSD-specific changes as possible. The 'easy-import' tool on
freefall will assist in doing the import, but if there are any doubts on
how to go about it, it is imperative that you ask first and not blunder
ahead and hope it “works out”. CVS is not forgiving of
import accidents and a fair amount of effort is required to back out
major mistakes.Because of the previously mentioned design limitations with CVS's
vendor branches, it is required that “official” patches from
the vendor be applied to the original distributed sources and the result
re-imported onto the vendor branch again. Official patches should never
be patched into the FreeBSD checked out version and "committed", as this
destroys the vendor branch coherency and makes importing future versions
rather difficult as there will be conflicts.Since many packages contain files that are meant for compatibility
with other architectures and environments that FreeBSD, it is
permissible to remove parts of the distribution tree that are of no
interest to FreeBSD in order to save space. Files containing copyright
notices and release-note kind of information applicable to the remaining
files shall not be removed.If it seems easier, the bmakeMakefiles can be produced from the dist tree
automatically by some utility, something which would hopefully make it
even easier to upgrade to a new version. If this is done, be sure to
check in such utilities (as necessary) in the
src/tools directory along with the port itself so
that it is available to future maintainers.In the src/contrib/tcl level directory, a file
called FREEBSD-upgrade should be added and it
should states things like:Which files have been left outWhere the original distribution was obtained from and/or the
official master site.Where to send patches back to the original authorsPerhaps an overview of the FreeBSD-specific changes that have
been made.However, please do not import FREEBSD-upgrade
with the contributed source. Rather you should cvs add
FREEBSD-upgrade ; cvs ci after the initial import. Example
wording from src/contrib/cpio is below:
This directory contains virgin sources of the original distribution files
on a "vendor" branch. Do not, under any circumstances, attempt to upgrade
the files in this directory via patches and a cvs commit. New versions or
official-patch versions must be imported. Please remember to import with
"-ko" to prevent CVS from corrupting any vendor RCS Ids.
For the import of GNU cpio 2.4.2, the following files were removed:
INSTALL cpio.info mkdir.c
Makefile.in cpio.texi mkinstalldirs
To upgrade to a newer version of cpio, when it is available:
1. Unpack the new version into an empty directory.
[Do not make ANY changes to the files.]
2. Remove the files listed above and any others that don't apply to
FreeBSD.
3. Use the command:
cvs import -ko -m 'Virgin import of GNU cpio v<version>' \
src/contrib/cpio GNU cpio_<version>
For example, to do the import of version 2.4.2, I typed:
cvs import -ko -m 'Virgin import of GNU v2.4.2' \
src/contrib/cpio GNU cpio_2_4_2
4. Follow the instructions printed out in step 3 to resolve any
conflicts between local FreeBSD changes and the newer version.
Do not, under any circumstances, deviate from this procedure.
To make local changes to cpio, simply patch and commit to the main
branch (aka HEAD). Never make local changes on the GNU branch.
All local changes should be submitted to "cpio@gnu.ai.mit.edu" for
inclusion in the next vendor release.
-obrien@freebsd.org - 30 March 1997
+obrien@FreeBSD.org - 30 March 1997
Encumbered filesIt might occasionally be necessary to include an encumbered file in
the FreeBSD source tree. For example, if a device requires a small
piece of binary code to be loaded to it before the device will operate,
and we do not have the source to that code, then the binary file is said
to be encumbered. The following policies apply to including encumbered
files in the FreeBSD source tree.Any file which is interpreted or executed by the system CPU(s)
and not in source format is encumbered.Any file with a license more restrictive than BSD or GNU is
encumbered.A file which contains downloadable binary data for use by the
hardware is not encumbered, unless (1) or (2) apply to it. It must
be stored in an architecture neutral ASCII format (file2c or
uuencoding is recommended).Any encumbered file requires specific approval from the Core team before it is added to the
CVS repository.Encumbered files go in src/contrib or
src/sys/contrib.The entire module should be kept together. There is no point in
splitting it, unless there is code-sharing with non-encumbered
code.Object files are named
arch/filename.o.uu>.Kernel files;Should always be referenced in
conf/files.* (for build simplicity).Should always be in LINT, but the Core team decides per case if it
should be commented out or not. The Core team can, of course, change
their minds later on.The Release Engineer
decides whether or not it goes in to the release.User-land files;The Core team decides if
the code should be part of make world.The Release Engineer
decides if it goes in to the release.Shared LibrariesContributed by &a.asami;, &a.peter;, and &a.obrien; 9
December 1996.If you are adding shared library support to a port or other piece of
software that doesn't have one, the version numbers should follow these
rules. Generally, the resulting numbers will have nothing to do with
the release version of the software.The three principles of shared library building are:Start from 1.0If there is a change that is backwards compatible, bump minor
numberIf there is an incompatible change, bump major numberFor instance, added functions and bugfixes result in the minor
version number being bumped, while deleted functions, changed function
call syntax etc. will force the major version number to change.Stick to version numbers of the form major.minor
(x.y). Our
dynamic linker does not handle version numbers of the form
x.y.z
well. Any version number after the y
(ie. the third digit) is totally ignored when comparing shared lib
version numbers to decide which library to link with. Given two shared
libraries that differ only in the “micro” revision,
ld.so will link with the higher one. Ie: if you link
with libfoo.so.3.3.3, the linker only records
3.3 in the headers, and will link with anything
starting with
libfoo.so.3.(anything >=
3).(highest
available).ld.so will always use the highest
“minor” revision. Ie: it will use
libc.so.2.2 in preference to
libc.so.2.0, even if the program was initially
linked with libc.so.2.0.For non-port libraries, it is also our policy to change the shared
library version number only once between releases. When you make a
change to a system library that requires the version number to be
bumped, check the Makefile's commit logs. It is the
responsibility of the committer to ensure that the first such change
since the release will result in the shared library version number in
the Makefile to be updated, and any subsequent
changes will not.
diff --git a/en_US.ISO_8859-1/books/handbook/ports/chapter.sgml b/en_US.ISO_8859-1/books/handbook/ports/chapter.sgml
index 48f3214119..e4fe0a0efd 100644
--- a/en_US.ISO_8859-1/books/handbook/ports/chapter.sgml
+++ b/en_US.ISO_8859-1/books/handbook/ports/chapter.sgml
@@ -1,4660 +1,4660 @@
Installing Applications: The Ports collectionContributed by &a.jraynard;.The FreeBSD Ports collection allows you to compile and install a very
wide range of applications with a minimum of effort.For all the hype about open standards, getting a program to work on
different versions of Unix in the real world can be a tedious and tricky
business, as anyone who has tried it will know. You may be lucky enough
to find that the program you want will compile cleanly on your system,
install itself in all the right places and run flawlessly “out of
the box”, but this is unfortunately rather rare. With most
programs, you will find yourself doing a fair bit of head-scratching, and
there are quite a few programs that will result in premature greying, or
even chronic alopecia...Some software distributions have attacked this problem by providing
configuration scripts. Some of these are very clever, but they have an
unfortunate tendency to triumphantly announce that your system is
something you have never heard of and then ask you lots of questions that
sound like a final exam in system-level Unix programming (Does
your system's gethitlist function return a const pointer to a fromboz or
a pointer to a const fromboz? Do you have Foonix style unacceptable
exception handling? And if not, why not?).Fortunately, with the Ports collection, all the hard work involved has
already been done, and you can just type make install
and get a working program.Why Have a Ports Collection?The base FreeBSD system comes with a very wide range of tools and
system utilities, but a lot of popular programs are not in the base
system, for good reasons:-Programs that some people cannot live without and other people
cannot stand, such as a certain Lisp-based editor.Programs which are too specialised to put in the base system
(CAD, databases).Programs which fall into the “I must have a look at that
when I get a spare minute” category, rather than
system-critical ones (some languages, perhaps).Programs that are far too much fun to be supplied with a serious
operating system like FreeBSD ;-)However many programs you put in the base system, people will
always want more, and a line has to be drawn somewhere (otherwise
FreeBSD distributions would become absolutely enormous).Obviously it would be unreasonable to expect everyone to port their
favourite programs by hand (not to mention a tremendous amount of
duplicated work), so the FreeBSD Project came up with an ingenious way
of using standard tools that would automate the process.Incidentally, this is an excellent illustration of how “the
Unix way” works in practice by combining a set of simple but very
flexible tools into something very powerful.How Does the Ports Collection Work?Programs are typically distributed on the Internet as a tarball consisting of a Makefile and
the source code for the program and usually some instructions (which are
unfortunately not always as instructive as they could be), with perhaps
a configuration script.The standard scenario is that you FTP down the tarball, extract it
somewhere, glance through the instructions, make any changes that seem
necessary, run the configure script to set things up and use the
standard make program to compile and install the
program from the source.FreeBSD ports still use the tarball mechanism, but use a skeleton to hold the
"knowledge" of how to get the program working on FreeBSD,
rather than expecting the user to be able to work it out. They also
supply their own customised Makefile, so that almost every port
can be built in the same way.If you look at a port skeleton (either on your FreeBSD
system or the
FTP site) and expect to find all sorts of pointy-headed rocket
science lurking there, you may be disappointed by the one or two rather
unexciting-looking files and directories you find there. (We will
discuss in a minute how to go about Getting a port).“How on earth can this do anything?” I hear you cry.
“There is no source code there!”Fear not, gentle reader, all will become clear (hopefully). Let us
see what happens if we try and install a port. I have chosen
ElectricFence, a useful tool for developers,
as the skeleton is more straightforward than most.If you are trying this at home, you will need to be root.&prompt.root; cd /usr/ports/devel/ElectricFence
&prompt.root; make install
>> Checksum OK for ElectricFence-2.0.5.tar.gz.
===> Extracting for ElectricFence-2.0.5
===> Patching for ElectricFence-2.0.5
===> Applying FreeBSD patches for ElectricFence-2.0.5
===> Configuring for ElectricFence-2.0.5
===> Building for ElectricFence-2.0.5
[lots of compiler output...]
===> Installing for ElectricFence-2.0.5
===> Warning: your umask is "0002". If this is not desired, set it to
an appropriate value and install this port again by ``make reinstall''.
install -c -o root -g wheel -m 444 /usr/ports/devel/ElectricFence/work/ElectricFence-2.0.5/libefence.a /usr/local/lib
install -c -o root -g wheel -m 444 /usr/ports/devel/ElectricFence/work/ElectricFence-2.0.5/libefence.3 /usr/local/man/man3
===> Compressing manual pages for ElectricFence-2.0.5
===> Registering installation for ElectricFence-2.0.5To avoid confusing the issue, I have completely removed the build
output.If you tried this yourself, you may well have got something like
this at the start:-&prompt.root; make install
>> ElectricFence-2.0.5.tar.gz doesn't seem to exist on this system.
>> Attempting to fetch from ftp://ftp.doc.ic.ac.uk/Mirrors/sunsite.unc.edu/pub/Linux/devel/lang/c/.The make program has noticed that you did not
have a local copy of the source code and tried to FTP it down so it
could get the job done. I already had the source handy in my example,
so it did not need to fetch it.Let's go through this and see what the make
program was doing.Locate the source code tarball. If it is not available
locally, try to grab it from an FTP site.Run a checksum test on the
tarball to make sure it has not been tampered with, accidentally
truncated, downloaded in ASCII mode, struck by neutrinos while in
transit, etc.Extract the tarball into a temporary work directory.Apply any patches needed to
get the source to compile and run under FreeBSD.Run any configuration script required by the build process and
correctly answer any questions it asks.(Finally!) Compile the code.Install the program executable and other supporting files, man
pages, etc. under the /usr/local hierarchy
(unless this is an X11 program,
then it will be under /usr/X11R6),
where they will not get mixed up with system programs. This also
makes sure that all the ports you install will go in the same place,
instead of being flung all over your system.Register the installation in a database. This means that, if
you do not like the program, you can cleanly remove all traces of it from your
system.Scroll up to the make output and see if you can
match these steps to it. And if you were not impressed before, you
should be by now!Getting a FreeBSD PortThere are two ways of getting hold of the FreeBSD port for a
program. One requires a FreeBSD CDROM,
the other involves using an Internet
Connection.Compiling ports from CDROMAssuming that your FreeBSD CDROM is in the drive and mounted on
/cdrom (and the mount point
must be /cdrom), you should
then be able to build ports just as you normally do and the port
collection's built in search path should find the tarballs in
/cdrom/ports/distfiles/ (if they exist there)
rather than downloading them over the net.Another way of doing this, if you want to just use the port
skeletons on the CDROM, is to set these variables in
/etc/make.conf:
PORTSDIR= /cdrom/ports
DISTDIR= /tmp/distfiles
WRKDIRPREFIX= /tmpSubstitute /tmp for any place you have enough
free space. Then, just cd to the appropriate
subdirectory under /cdrom/ports and type
make install as usual.
WRKDIRPREFIX will cause the port to be build under
/tmp/cdrom/ports; for instance,
games/oneko will be built under
/tmp/cdrom/ports/games/oneko.There are some ports for which we cannot provide the original
source in the CDROM due to licensing limitations. In that case, you
will need to look at the section on Compiling ports using an Internet
connection.Compiling ports from the InternetIf you do not have a CDROM, or you want to make sure you get the
very latest version of the port you want, you will need to download
the skeleton for the port. Now
this might sound like rather a fiddly job full of pitfalls, but it is
actually very easy.First, if you are running a release version of FreeBSD, make sure
you get the appropriate “upgrade kit” for your release
from the ports web
page. These packages include files that have been updated
since the release that you may need to compile new ports.The key to the skeletons is that the FreeBSD FTP server can create
on-the-fly tarballs for you.
Here is how it works, with the gnats program in the databases
directory as an example (the bits in square brackets are comments. Do
not type them in if you are trying this yourself!):-&prompt.root; cd /usr/ports
&prompt.root; mkdir databases
&prompt.root; cd databases
&prompt.root; ftp ftp.FreeBSD.org
[log in as `ftp' and give your email address when asked for a
password. Remember to use binary (also known as image) mode!]
ftp>cd /pub/FreeBSD/ports/ports/databasesftp>get gnats.tar
[tars up the gnats skeleton for us]
ftp>quit
&prompt.root; tar xf gnats.tar
[extract the gnats skeleton]
&prompt.root; cd gnats
&prompt.root; make install
[build and install gnats]What happened here? We connected to the FTP server in the usual
way and went to its databases sub-directory.
When we gave it the command get gnats.tar, the FTP
server tarred up the gnats
directory for us.We then extracted the gnats skeleton and went into the gnats
directory to build the port. As we explained earlier, the make process noticed we
did not have a copy of the source locally, so it fetched one before
extracting, patching and building it.Let us try something more ambitious now. Instead of getting a
single port skeleton, we will get a whole sub-directory, for example all
the database skeletons in the ports collection. It looks almost the
same:-&prompt.root; cd /usr/ports
&prompt.root; ftp ftp.FreeBSD.org
[log in as `ftp' and give your email address when asked for a
password. Remember to use binary (also known as image) mode!]
ftp>cd /pub/FreeBSD/ports/portsftp>get databases.tar
[tars up the databases directory for us]
ftp>quit
&prompt.root; tar xf databases.tar
[extract all the database skeletons]
&prompt.root; cd databases
&prompt.root; make install
[build and install all the database ports]With half a dozen straightforward commands, we have now got a set
of database programs on our FreeBSD machine! All we did that was
different from getting a single port skeleton and building it was that
we got a whole directory at once, and compiled everything in it at
once. Pretty impressive, no?If you expect to be installing many ports, it is probably worth
downloading all the ports directories.SkeletonsA team of compulsive hackers who have forgotten to eat in a frantic
attempt to make a deadline? Something unpleasant lurking in the FreeBSD
attic? No, a skeleton here is a minimal framework that supplies
everything needed to make the ports magic work.MakefileThe most important component of a skeleton is the Makefile. This
contains various statements that specify how the port should be
compiled and installed. Here is the Makefile for
ElectricFence:-
# New ports collection makefile for: Electric Fence
# Version required: 2.0.5
# Date created: 13 November 1997
# Whom: jraynard
#
# $Id$
#
DISTNAME= ElectricFence-2.0.5
CATEGORIES= devel
MASTER_SITES= ${MASTER_SITE_SUNSITE}
MASTER_SITE_SUBDIR= devel/lang/c
-MAINTAINER= jraynard@freebsd.org
+MAINTAINER= jraynard@FreeBSD.org
MAN3= libefence.3
do-install:
${INSTALL_DATA} ${WRKSRC}/libefence.a ${PREFIX}/lib
${INSTALL_MAN} ${WRKSRC}/libefence.3 ${PREFIX}/man/man3
.include <bsd.port.mk>The lines beginning with a "#" sign are comments for the
benefit of human readers (as in most Unix script files).DISTNAME specifies the name of the tarball, but without the
extension.CATEGORIES states what kind of program this is.
In this case, a utility for developers. See the categories section of this
handbook for a complete list.MASTER_SITES is the URL(s) of the master FTP
site, which is used to retrieve the tarball if it is not available on the
local system. This is a site which is regarded as reputable, and is
normally the one from which the program is officially distributed (in
so far as any software is "officially" distributed on the
Internet).MAINTAINER is the email address of the person
who is responsible for updating the skeleton if, for example a new
version of the program comes out.Skipping over the next few lines for a minute, the line
.include <bsd.port.mk> says that the other
statements and commands needed for this port are in a standard file
called bsd.port.mk. As these are the same for
all ports, there is no point in duplicating them all over the place,
so they are kept in a single standard file.This is probably not the place to go into a detailed examination
of how Makefiles work; suffice it to say that the line starting with
MAN3 ensures that the ElectricFence man page is
compressed after installation, to help conserve your precious disk
space. The original port did not provide an
install target, so the three lines from
do-install ensure that the files produced by
this port are placed in the correct destination.The files directoryThe file containing the checksum for the port is called
md5, after the MD5 algorithm used for ports
checksums. It lives in a directory with the slightly confusing name
of files.This directory can also contain other miscellaneous files that are
required by the port and do not belong anywhere else.The patches directoryThis directory contains the patches needed to make everything work
properly under FreeBSD.The pkg directoryThis program contains three quite useful files:-COMMENT — a one-line description of
the program.DESCR — a more detailed
description.PLIST — a list of all the files
that will be created when the program is installed.What to do when a port does not work.Oh. You can do one of four (4) things :Fix it yourself. Technical details on how ports work can be
found in Porting applications.Gripe. This is done by e-mail only! Send
such e-mail to the maintainer of the port, first. Type
make maintainer or read the
Makefile to find the maintainer's email
address. Remember to include the name/version of
the port (copy the $Id: line from the
Makefile), and the output leading up-to the
error, inclusive. If you do not get a satisfactory response,
you can try filing a bug report with send-pr.
Forget it. This is the easiest for most — very few of the
programs in ports can be classified as essential!Grab the pre-compiled package from a ftp server. The
“master” package collection is on FreeBSD's FTP server
in the packages
directory, though check your local mirror first, please!
These are more likely to work (on the whole) than trying to compile
from source and a lot faster besides! Use the &man.pkg.add.1;
program to install a package file on your
system.Some Questions and AnswersQ. I thought this was going to be a discussion about
modems??!A. Ah. You must be thinking of the serial ports on the back of
your computer. We are using “port” here to mean the
result of “porting” a program from one version of Unix
to another. (It is an unfortunate bad habit of computer people to
use the same word to refer to several completely different
things).Q. I thought you were supposed to use packages to install extra
programs?A. Yes, that is usually the quickest and easiest way of doing
it.Q. So why bother with ports then?A. Several reasons:-The licensing conditions on some software distributions
require that they be distributed as source code, not
binaries.Some people do not trust binary distributions. At least
with source code you can (in theory) read through it and look
for potential problems yourself.If you have some local patches, you will need the source to
add them yourself.You might have opinions on how a program should be compiled
that differ from the person who did the package — some
people have strong views on what optimisation setting should be
used, whether to build debug versions and then strip them or
not, etc. etc.Some people like having code around, so they can read it if
they get bored, hack around with it, borrow from it (licence
terms permitting, of course!) and so on.If you ain't got the source, it ain't software! ;-) Q. What is a patch?A. A patch is a small (usually) file that specifies how to go
from one version of a file to another. It contains text that says,
in effect, things like “delete line 23”, “add
these two lines after line 468” or “change line 197 to
this”. Also known as a “diff”, since it is
generated by a program of that name. Q. What is all this about
tarballs?A. It is a file ending in .tar or
.tar.gz (with variations like
.tar.Z, or even .tgz if
you are trying to squeeze the names into a DOS filesystem).Basically, it is a directory tree that has been archived into a
single file (.tar) and optionally compressed
(.gz). This technique was originally used for
Tape ARchives (hence the
name tar), but it is a widely used way of
distributing program source code around the Internet.You can see what files are in them, or even extract them
yourself, by using the standard Unix tar program, which comes with
the base FreeBSD system, like this:-&prompt.user; tar tvzf foobar.tar.gz
&prompt.user; tar xzvf foobar.tar.gz
&prompt.user; tar tvf foobar.tar
&prompt.user; tar xvf foobar.tar Q. And a checksum?A. It is a number generated by adding up all the data in the
file you want to check. If any of the characters change, the
checksum will no longer be equal to the total, so a simple
comparison will allow you to spot the difference. (In practice, it
is done in a more complicated way to spot problems like
position-swapping, which will not show up with a simplistic
addition).Q. I did what you said for compiling
ports from a CDROM and it worked great until I tried to
install the kermit port:-&prompt.root; make install
>> cku190.tar.gz doesn't seem to exist on this system.
>> Attempting to fetch from ftp://kermit.columbia.edu/kermit/archives/.Why can it not be found? Have I got a dud CDROM?A. The licensing terms for kermit do not allow us to put the
tarball for it on the CDROM, so you will have to fetch it by hand
— sorry! The reason why you got all those error messages was
because you were not connected to the Internet at the time. Once
you have downloaded it from any of the sites above, you can re-start
the process (try and choose the nearest site to you, though, to save
your time and the Internet's bandwidth).Q. I did that, but when I tried to put it into
/usr/ports/distfiles I got some error about not
having permission.A. The ports mechanism looks for the tarball in
/usr/ports/distfiles, but you will not be able
to copy anything there because it is sym-linked to the CDROM, which
is read-only. You can tell it to look somewhere else by
doing&prompt.root; make DISTDIR=/where/you/put/it installQ. Does the ports scheme only work if you have everything in
/usr/ports? My system administrator says I must
put everything under
/u/people/guests/wurzburger, but it does not
seem to work.A. You can use the PORTSDIR and
PREFIX variables to tell the ports mechanism to
use different directories. For instance,&prompt.root; make PORTSDIR=/u/people/guests/wurzburger/ports installwill compile the port in
/u/people/guests/wurzburger/ports and install
everything under /usr/local.&prompt.root; make PREFIX=/u/people/guests/wurzburger/local installwill compile it in /usr/ports and install
it in /u/people/guests/wurzburger/local.And of course&prompt.root; make PORTSDIR=.../ports PREFIX=.../local installwill combine the two (it is too long to fit on the page if I
write it in full, but I am sure you get the idea).If you do not fancy typing all that in every time you install a
port (and to be honest, who would?), it is a good idea to put these
variables into your environment.Q. I do not have a FreeBSD CDROM, but I would like to have all
the tarballs handy on my system so I do not have to wait for a
download every time I install a port. Is there an easy way to get
them all at once?A. To get every single tarball for the ports collection,
do&prompt.root; cd /usr/ports
&prompt.root; make fetchFor all the tarballs for a single ports directory, do&prompt.root; cd /usr/ports/directory
&prompt.root; make fetchand for just one port — well, I think you have guessed
already.Q. I know it is probably faster to fetch the tarballs from one
of the FreeBSD mirror sites close by. Is there any way to tell the
port to fetch them from servers other than ones listed in the
MASTER_SITES?A. Yes. If you know, for example, ftp.FreeBSD.ORG is much closer than sites
+ role="fqdn">ftp.FreeBSD.org is much closer than sites
listed in MASTER_SITES, do as following
example.&prompt.root; cd /usr/ports/directory
-&prompt.root; make MASTER_SITE_OVERRIDE=ftp://ftp.FreeBSD.ORG/pub/FreeBSD/ports/distfiles/ fetch
+&prompt.root; make MASTER_SITE_OVERRIDE=ftp://ftp.FreeBSD.org/pub/FreeBSD/ports/distfiles/ fetchQ. I want to know what files make is going to need before it
tries to pull them down.A. make fetch-list will display a list of
the files needed for a port.Q. Is there any way to stop the port from compiling? I want to
do some hacking on the source before I install it, but it is a bit
tiresome having to watch it and hit control-C every time.A. Doing make extract will stop it after it
has fetched and extracted the source code.Q. I am trying to make my own port and I want to be able to
stop it compiling until I have had a chance to see if my patches
worked properly. Is there something like make
extract, but for patches?A. Yep, make patch is what you want. You
will probably find the PATCH_DEBUG option useful
as well. And by the way, thank you for your efforts!Q. I have heard that some compiler options can cause bugs. Is
this true? How can I make sure that I compile ports with the right
settings?A. Yes, with version 2.6.3 of gcc (the
version shipped with FreeBSD 2.1.0 and 2.1.5), the
option could result in buggy code unless you
used the option as well.
(Most of the ports do not use ). You
should be able to specify the compiler options
used by something like&prompt.root; make CFLAGS='-O2 -fno-strength-reduce' installor by editing /etc/make.conf, but
unfortunately not all ports respect this. The surest way is to do
make configure, then go into the source directory
and inspect the Makefiles by hand, but this can get tedious if the
source has lots of sub-directories, each with their own
Makefiles.Q. There are so many ports it is hard to find the one I want.
Is there a list anywhere of what ports are available?A. Look in the INDEX file in
/usr/ports. If you would like to search the
ports collection for a keyword, you can do that too. For example,
you can find ports relevant to the LISP programming language
using:&prompt.user; cd /usr/ports
&prompt.user; make search key=lispQ. I went to install the foo port but the
system suddenly stopped compiling it and starting compiling the
bar port. What is going on?A. The foo port needs something that is
supplied with bar — for instance, if
foo uses graphics, bar might
have a library with useful graphics processing routines. Or
bar might be a tool that is needed to compile the
foo port. Q. I installed the
grizzle program from the ports and frankly it is
a complete waste of disk space. I want to delete it but I do not
know where it put all the files. Any clues?A. No problem, just do&prompt.root; pkg_delete grizzle-6.5Alternatively, you can do&prompt.root; cd /usr/ports/somewhere/grizzle
&prompt.root; make deinstall
Q. Hang on a minute, you have to know the version number to use
that command. You do not seriously expect me to remember that, do
you??A. Not at all, you can find it out by doing&prompt.root; pkg_info -a | grep grizzle
Information for grizzle-6.5:
grizzle-6.5 - the combined piano tutorial, LOGO interpreter and shoot 'em up arcade game.Q. Talking of disk space, the ports directory seems to be
taking up an awful lot of room. Is it safe to go in there and
delete things?A. Yes, if you have installed the program and are fairly
certain you will not need the source again, there is no point in
keeping it hanging around. The best way to do this is&prompt.root; cd /usr/ports
&prompt.root; make cleanwhich will go through all the ports subdirectories and delete
everything except the skeletons for each port.Q. I tried that and it still left all those tarballs or
whatever you called them in the distfiles
directory. Can I delete those as well?A. Yes, if you are sure you have finished with them, those can
go as well.Q. I like having lots and lots of programs to play with. Is
there any way of installing all the ports in one go?A. Just do&prompt.root; cd /usr/ports
&prompt.root; make installQ. OK, I tried that, but I thought it would take a very long
time so I went to bed and left it to get on with it. When I looked
at the computer this morning, it had only done three and a half
ports. Did something go wrong?A. No, the problem is that some of the ports need to ask you
questions that we cannot answer for you (eg “Do you want to
print on A4 or US letter sized paper?”) and they need to have
someone on hand to answer them.Q. I really do not want to spend all day staring at the
monitor. Any better ideas?A. OK, do this before you go to bed/work/the local
park:-&prompt.root cd /usr/ports
&prompt.root; make -DBATCH installThis will install every port that does not
require user input. Then, when you come back, do&prompt.root; cd /usr/ports
&prompt.root; make -DIS_INTERACTIVE installto finish the job.Q. At work, we are using frobble, which is
in your ports collection, but we have altered it quite a bit to get
it to do what we need. Is there any way of making our own packages,
so we can distribute it more easily around our sites?A. No problem, assuming you know how to make patches for your
changes:-&prompt.root; cd /usr/ports/somewhere/frobble
&prompt.root; make extract
&prompt.root; cd work/frobble-2.8
[Apply your patches]
&prompt.root; cd ../..
&prompt.root; make packageQ. This ports stuff is really clever. I am desperate to find
out how you did it. What is the secret?A. Nothing secret about it at all, just look at the
bsd.ports.mk and
bsd.ports.subdir.mk files in your makefiles
directory.Readers with an aversion to intricate shell-scripts are
advised not to follow this link...)Making a port yourselfContributed by &a.jkh;, &a.gpalmer;, &a.asami;, &a.obrien;,
and &a.hoek;. 28 August 1996.So, now you are interested in making your own port or upgrading
an existing one? Great!What follows are some guidelines for creating a new port for
FreeBSD. If you want to upgrade an existing port, you should read this
and then read .When this document is not sufficiently detailed, you should refer to
/usr/ports/Mk/bsd.port.mk, which all port Makefiles
include. Even if you do not hack Makefiles daily, it is well
commented, and you will still gain much knowledge from it.
Additionally, you may send specific questions to &a.ports;.Only a fraction of the overridable variables
(VAR) are mentioned in
this document. Most (if not all) are documented at the start of
bsd.port.mk. This file users a non-standard tab
setting. Emacs and
Vim should recognise the setting on loading
the file. Both vi and ex can be
set to use the correct value by typing :set tabstop=4
once the file has been loaded.Quick PortingThis section tells you how to do a quick port. In many cases, it
is not enough, but we will see.First, get the original tarball and put it into
DISTDIR, which defaults to
/usr/ports/distfiles.The following assumes that the software compiled out-of-the-box,
i.e., there was absolutely no change required for the port to work
on your FreeBSD box. If you needed to change something, you will
have to refer to the next section too.Writing the MakefileThe minimal Makefile would look something
like this:
# New ports collection makefile for: oneko
# Version required: 1.1b
# Date created: 5 December 1994
# Whom: asami
#
# $Id$
#
DISTNAME= oneko-1.1b
CATEGORIES= games
MASTER_SITES= ftp://ftp.cs.columbia.edu/archives/X11R5/contrib/
-MAINTAINER= asami@FreeBSD.ORG
+MAINTAINER= asami@FreeBSD.org
MAN1= oneko.1
MANCOMPRESSED= yes
USE_IMAKE= yes
.include <bsd.port.mk>See if you can figure it out. Do not worry about the contents
of the $Id$ line, it will be filled in
automatically by CVS when the port is imported to our main ports
tree. You can find a more detailed example in the sample Makefile section.Writing the description filesThere are three description files that are required for any
port, whether they actually package or not. They are
COMMENT, DESCR, and
PLIST, and reside in the
pkg subdirectory.COMMENTThis is the one-line description of the port.
Please do not include the package name (or
version number of the software) in the comment. The comment
should begin with a capital, and end without a period. Here
is an example:
A cat chasing a mouse all over the screenDESCRThis is a longer description of the port. One to a few
paragraphs concisely explaining what the port does is
sufficient.This is not a manual or an in-depth
description on how to use or compile the port! Please
be careful if you are copying from the
README or manpage; too often
they are not a concise description of the port or are in an
awkward format (e.g., manpages have justified spacing). If the
ported software has an official WWW homepage, you should list it
here. Prefix one of the websites with
WWW: so that automated tools will work
correctly.It is recommended that you sign your name at the end of this
file, as in:
This is a port of oneko, in which a cat chases a poor mouse all over
the screen.
:
(etc.)
WWW: http://www.oneko.org/
- Satoshi
asami@cs.berkeley.eduPLISTThis file lists all the files installed by the port. It is
also called the “packing list” because the package is
generated by packing the files listed here. The pathnames are
relative to the installation prefix (usually
/usr/local or
/usr/X11R6). If you are using the
MANn variables (as
you should be), do not list any manpages here.Here is a small example:
bin/oneko
lib/X11/app-defaults/Oneko
lib/X11/oneko/cat1.xpm
lib/X11/oneko/cat2.xpm
lib/X11/oneko/mouse.xpm
@dirrm lib/X11/onekoRefer to the &man.pkg.create.1; man page for details on the
packing list.You should list all the files, but not the name directories,
in the list. Also, if the port creates directories for itself
during installtion, make sure to add @dirrm
lines as necessary to remove them when the port is
deleted.It is recommended that you keep all the filenames in this
file sorted alphabetically. It will make verifying the changes
when you upgrade the port much easier.Creating a packing list manually can be a very tedious
task. If the port installs a large numbers of files, creating the packing list
automatically might save time.Creating the checksum fileJust type make makesum. The ports make rules
will automatically generate the file
files/md5.Testing the portYou should make sure that the port rules do exactly what you
want it to do, including packaging up the port. These are the
important points you need to verify.PLIST does not contain anything not
installed by your portPLIST contains everything that is
installed by your portYour port can be installed multiple times using the
reinstall targetYour port cleans up
after itself upon deinstallRecommended test orderingmake installmake packagemake deinstallpkg_add package-namemake deinstallmake reinstallmake packageMake sure that there are not any warnings issued in any of the
package and
deinstall stages, After step 3, check to
see if all the new directories are correctly deleted. Also, try
using the software after step 4, to ensure that is works correctly
when installed from a package.Checking your port with portlintPlease use portlint to see if your port
conforms to our guidelines. The portlint program
is part of the ports collection. In particular, your may want to
check if the Makefile is in
the right shape and the package is named
appropriately.Submitting the portFirst, make sure you have read the Do's and Dont's section.Now that you are happy with your port, the only thing remaining
is to put it in the main FreeBSD ports tree and make everybody else
happy about it too. We do not need your work
directory or the pkgname.tgz package, so delete
them now. Next, simply include the output of shar `find
port_dir` in a bug report and send it with the
&man.send-pr.1; program (see Bug
Reports and General Commentary for more information about
&man.send-pr.1;. If the uncompressed port is larger than 20KB,
you should compress it into a tarfile and use &man.uuencode.1;
before including it in the bug report (uuencoded tarfiles are
acceptable even if the bug report is smaller than 20KB but are not
preferred). Be sure to classify the bug report as category
ports and class
change-request. (Do not mark the report
confidential!)One more time, do not include the original source
distfile, the work directory, or the package
you built with make package.In the past, we asked you to upload new port submissions in
our ftp site (ftp.FreeBSD.org). This
is no longer recommended as read access is turned off on that
incoming/ directory of that site due to the
large amount of pirated software showing up there.We will look at your port, get back to you if necessary, and put
it in the tree. Your name will also appear in the list of
“Additional FreeBSD contributors” on the FreeBSD
Handbook and other files. Isn't that great?!? :)Slow PortingOk, so it was not that simple, and the port required some
modifications to get it to work. In this section, we will explain,
step by step, how to modify it to get it to work with the ports
paradigm.How things workFirst, this is the sequence of events which occurs when the user
first types make in your port's directory, and
you may find that having bsd.port.mk in another
window while you read this really helps to understand it.But do not worry if you do not really understand what
bsd.port.mk is doing, not many people do...
:>The fetch target is run. The
fetch target is responsible for making
sure that the tarball exists locally in
DISTDIR. If fetch
cannot find the required files in DISTDIR it
will look up the URL MASTER_SITES, which is
set in the Makefile, as well as our main ftp site at ftp://ftp.FreeBSD.org/pub/FreeBSD/ports/distfiles/,
where we put sanctioned distfiles as backup. It will then
attempt to fetch the named distribution file with
FETCH, assuming that the requesting site has
direct access to the Internet. If that succeeds, it will save
the file in DISTDIR for future use and
proceed.The extract target is run. It
looks for your port's distribution file (typically a gzip'd
tarball) in DISTDIR and unpacks it into a
temporary subdirectory specified by WRKDIR
(defaults to work).The patch target is run. First,
any patches defined in PATCHFILES are
applied. Second, if any patches are found in
PATCHDIR (defaults to the
patches subdirectory), they are applied at
this time in alphabetical order.The configure target is run. This
can do any one of many different things.If it exists, scripts/configure is
run.If HAS_CONFIGURE or
GNU_CONFIGURE is set,
WRKSRC/configure is
run.If USE_IMAKE is set,
XMKMF (default: xmkmf
-a) is run.The build target is run. This is
responsible for descending into the port's private working
directory (WRKSRC) and building it. If
USE_GMAKE is set, GNU make
will be used, otherwise the system make will
be used.The above are the default actions. In addition, you can define
targets
pre-something or
post-something,
or put scripts with those names, in the scripts
subdirectory, and they will be run before or after the default
actions are done.For example, if you have a post-extract
target defined in your Makefile, and a file
pre-build in the scripts
subdirectory, the post-extract target will
be called after the regular extraction actions, and the
pre-build script will be executed before the
default build rules are done. It is recommended that you use
Makefile targets if the actions are simple
enough, because it will be easier for someone to figure out what
kind of non-default action the port requires.The default actions are done by the
bsd.port.mk targets
do-something.
For example, the commands to extract a port are in the target
do-extract. If you are not happy with the
default target, you can fix it by redefining the
do-something
target in your Makefile.The “main” targets (e.g.,
extract,
configure, etc.) do nothing more than
make sure all the stages up to that one are completed and call
the real targets or scripts, and they are not intended to be
changed. If you want to fix the extraction, fix
do-extract, but never ever touch
extract!Now that you understand what goes on when the user types
make, let us go through the recommended steps to
create the perfect port.Getting the original sourcesGet the original sources (normally) as a compressed tarball
(foo.tar.gz or
foo.tar.Z) and copy
it into DISTDIR. Always use
mainstream sources when and where you
can.If you cannot find a ftp/http site that is well-connected to the
net, or can only find sites that have irritatingly non-standard
formats, you might want to put a copy on a reliable ftp or http
server that you control (e.g., your home page). Make sure you set
MASTER_SITES to reflect your choice.If you cannot find somewhere convenient and reliable to put the
distfile (if you are a FreeBSD committer, you can just put it in
your public_html/ directory on
freefall), we can “house” it ourselves
by putting it on
ftp://ftp.FreeBSD.org/pub/FreeBSD/ports/distfiles/LOCAL_PORTS/
as the last resort. Please refer to this location as
MASTER_SITE_LOCAL. Send mail to the &a.ports;if
you are not sure what to do.If your port's distfile changes all the time for no good reason,
consider putting the distfile in your home page and listing it as
the first MASTER_SITES. This will prevent users
from getting checksum mismatch errors, and
also reduce the workload of maintainers of our ftp site. Also, if
there isonly one master site for the port, it is recommended that
you house a backup at your site and list it as the second
MASTER_SITES.If your port requires some additional `patches' that are
available on the Internet, fetch them too and put them in
DISTDIR. Do not worry if they come from a site
other than where you got the main source tarball, we have a way to
handle these situations (see the description of PATCHFILES below).Modifying the portUnpack a copy of the tarball in a private directory and make
whatever changes are necessary to get the port to compile properly
under the current version of FreeBSD. Keep careful
track of everything you do, as you will be automating
the process shortly. Everything, including the deletion, addition
or modification of files should be doable using an automated script
or patch file when your port is finished.If your port requires significant user interaction/customization
to compile or install, you should take a look at one of Larry Wall's
classic Configure scripts and perhaps do
something similar yourself. The goal of the new ports collection is
to make each port as “plug-and-play” as possible for the
end-user while using a minimum of disk space.Unless explicitly stated, patch files, scripts, and other
files you have created and contributed to the FreeBSD ports
collection are assumed to be covered by the standard BSD copyright
conditions.PatchingIn the preparation of the port, files that have been added or
changed can be picked up with a recursive diff for later feeding to
patch. Each set of patches you wish to apply should be collected
into a file named
patch-xx where
xx denotes the sequence in which the
patches will be applied — these are done in
alphabetical order, thus aa
first, ab second and so on. These files should
be stored in PATCHDIR, from where they will be
automatically applied. All patches should be relative to
WRKSRC (generally the directory your port's
tarball unpacks itself into, that being where the build is done).
To make fixes and upgrades easier, you should avoid having more than
one patch fix the same file (e.g., patch-aa and
patch-ab both changing
WRKSRC/foobar.c).ConfiguringInclude any additional customization commands to your
configure script and save it in the
scripts subdirectory. As mentioned above, you
can also do this as Makefile targets and/or
scripts with the name pre-configure or
post-configure.Handling user inputIf your port requires user input to build, configure or install,
then set IS_INTERACTIVE in your Makefile. This
will allow “overnight builds” to skip your port if the
user sets the variable BATCH in his environment (and
if the user sets the variable INTERACTIVE, then
only those ports requiring interaction are
built).It is also recommended that if there are reasonable default
answers to the questions, you check the
PACKAGE_BUILDING variable and turn off the
interactive script when it is set. This will allow us to build the
packages for CD-ROMs and ftp.Configuring the MakefileConfiguring the Makefile is pretty simple, and again we suggest
that you look at existing examples before starting. Also, there is a
sample Makefile in this
handbook, so take a look and please follow the ordering of variables
and sections in that template to make your port easier for others to
read.Now, consider the following problems in sequence as you design
your new Makefile:The original sourceDoes it live in DISTDIR as a standard gzip'd
tarball? If so, you can go on to the next step. If not, you should
look at overriding any of the EXTRACT_CMD,
EXTRACT_BEFORE_ARGS,
EXTRACT_AFTER_ARGS,
EXTRACT_SUFX, or DISTFILES
variables, depending on how alien a format your port's distribution
file is. (The most common case is
EXTRACT_SUFX=.tar.Z, when the tarball is
condensed by regular compress, not gzip.)In the worst case, you can simply create your own
do-extract target to override the default,
though this should be rarely, if ever, necessary.DISTNAMEYou should set DISTNAME to be the base name
of your port. The default rules expect the distribution file list
(DISTFILES) to be named
DISTNAMEEXTRACT_SUFX which, if
it is a normal tarball, is going to be something like
foozolix-1.0.tar.gz for a setting of
DISTNAME=foozolix-1.0.The default rules also expect the tarball(s) to extract into a
subdirectory called
work/DISTNAME, e.g.
work/foozolix-1.0/.All this behavior can be overridden, of course; it simply
represents the most common time-saving defaults. For a port
requiring multiple distribution files, simply set
DISTFILES explicitly. If only a subset of
DISTFILES are actual extractable archives, then
set them up in EXTRACT_ONLY, which will override
the DISTFILES list when it comes to extraction,
and the rest will be just left in DISTDIR for
later use.PKGNAMEIf DISTNAME does not conform to our guidelines for a good package
name, you should set the PKGNAME
variable to something better. See the abovementioned guidelines for
more details.CATEGORIESWhen a package is created, it is put under
/usr/ports/packages/All and links are made from
one or more subdirectories of
/usr/ports/packages. The names of these
subdirectories are specified by the variable
CATEGORIES. It is intended to make life easier
for the user when he is wading through the pile of packages on the
ftp site or the CD-ROM. Please take a look at the existing categories and pick the ones
that are suitable for your port.This list also determines where in the ports tree the port is
imported. If you put more than one category here, it is assumed
that the port files will be put in the subdirectory with the name in
the first category. See the categories section for more
discussion about how to pick the right categories.If you port truly belongs to something that is different from
all the existing ones, you can even create a new category name. In
that case, please send mail to the &a.ports; to propose a new
category.There is no error checking for category names. make
package will happily create a new directory if you
mistype the category name, so be careful!MASTER_SITESRecord the directory part of the ftp/http-URL pointing at the
original tarball in MASTER_SITES. Do not forget
the trailing slash (/)!The make macros will try to use this
specification for grabbing the distribution file with
FETCH if they cannot find it already on the
system.It is recommended that you put multiple sites on this list,
preferably from different continents. This will safeguard against
wide-area network problems, and we are even planning to add support
for automatically determining the closest master site and fetching
from there!If the original tarball is part of one of the following popular
archives: X-contrib, GNU, Perl CPAN, TeX CTAN, or Linux Sunsite, you
refer to those sites in an easy compact form using
MASTER_SITE_XCONTRIB,
MASTER_SITE_GNU,
MASTER_SITE_PERL_CPAN,
MASTER_SITE_TEX_CTAN, and
MASTER_SITE_SUNSITE. Simply set
MASTER_SITE_SUBDIR to the path with in the
archive. Here is an example:
MASTER_SITES= ${MASTER_SITE_XCONTRIB}
MASTER_SITE_SUBDIR= applicationsThe user can also set the MASTER_SITE_*
variables in /etc/make.conf to override our
choices, and use their favorite mirrors of these popular archives
instead.PATCHFILESIf your port requires some additional patches that are available
by ftp or http, set PATCHFILES to the names of
the files and PATCH_SITES to the URL of the
directory that contains them (the format is the same as
MASTER_SITES).If the patch is not relative to the top of the source tree
(i.e., WKRSRC) because it contains some extra
pathnames, set PATCH_DIST_STRIP accordingly. For
instance, if all the pathnames in the patch have an extra
foozolix-1.0/ in front of the filenames, then set
PATCH_DIST_STRIP=-p1.Do not worry if the patches are compressed, they will be
decompressed automatically if the filenames end with
.gz or .Z.If the patch is distributed with some other files, such as
documentation, in a gzip'd tarball, you cannot just use
PATCHFILES. If that is the case, add the name
and the location of the patch tarball to
DISTFILES and MASTER_SITES.
Then, from the pre-patch target, apply the
patch either by running the patch command from there, or copying the
patch file into the PATCHDIR directory and
calling it
patch-xx.Note the tarball will have been extracted alongside the
regular source by then, so there is no need to explicitly extract
it if it is a regular gzip'd or compress'd tarball. If you do the
latter, take extra care not to overwrite something that already
exists in that directory. Also do not forget to add a command to
remove the copied patch in the pre-clean
target.MAINTAINERSet your mail-address here. Please. :)For detailed description of the responsibility of maintainers,
refer to MAINTAINER on
Makefiles section.DependenciesMany ports depend on other ports. There are five variables that
you can use to ensure that all the required bits will be on the
user's machine. There are also some pre-supported dependency
variables for common cases, plus a few more to control the behaviour
of dependencies.LIB_DEPENDSThis variable specifies the shared libraries this port depends
on. It is a list of
lib:dir:target
tuples where lib is the name of the
shared library, and dir is the
directory in which to find it in case it is not available, and
target is the target to call in that
directory. For example, LIB_DEPENDS=
jpeg.9:${PORTSDIR}/graphics/jpeg:install
will check for a shared jpeg library with major version 9, and
descend into the graphics/jpeg subdirectory
of your ports tree to build and install it if it is not found.
The target part can be omitted if it is
equal to DEPENDS_TARGET (which defaults to
install).The lib part is an argument given
to ldconfig -r | grep -wF. There shall be no
reqular expressions in this variable.The dependency is checked twice, once from within the
extract target and then from within the
install target. Also, the name of the
dependency is put in to the package so that
pkg_add will automatically install it if it is
not on the user's system.RUN_DEPENDSThis variable specifies executables or files this port depends
on during run-time. It is a list of
path:dir:target
tuples where path is the name of the
executable or file, and dir is the
directory in which to find it in case it is not available, and
target is the target to call in that
directory. If path starts with a slash
(/), it is treated as a file and its existence
is tested with test -e; otherwise, it is
assumed to be an executable, and which -s is
used to determine if the program exists in the user's search
path.For example,
RUN_DEPENDS= ${PREFIX}/etc/innd:${PORTSDIR}/news/inn \
wish8.0:${PORTSDIR}/x11-toolkits/tk80will check if the file or directory
/usr/local/etc/innd exists, and build and
install it from the news/inn subdirectory of
the ports tree if it is not found. It will also see if an
executable called wish8.0 is in your search
path, and descend into the x11-toolkits/tk80
subdirectory of your ports tree to build and install it if it is
not found.In this case, innd is actually an
executable; if an executable is in a place that is not expected
to be in a normal user's search path, you should use the full
pathname.The dependency is checked from within the
install target. Also, the name of the
dependency is put in to the package so that
pkg_add will automatically install it if it is
not on the user's system. The target
part can be omitted if it is the same
DEPENDS_TARGET.BUILD_DEPENDSThis variable specifies executables or files this port
requires to build. Like RUN_DEPENDS, it is a
list of
path:dir:target
tuples. For example, BUILD_DEPENDS=
unzip:${PORTSDIR}/archivers/unzip will check
for an executable called unzip, and descend
into the archivers/unzip subdirectory of your
ports tree to build and install it if it is not found.“build” here means everything from extracting to
compilation. The dependency is checked from within the
extract target. The
target part can be omitted if it is
the same as DEPENDS_TARGETFETCH_DEPENDSThis variable specifies executables or files this port
requires to fetch. Like the previous two, it is a list of
path:dir:target
tuples. For example, FETCH_DEPENDS=
ncftp2:${PORTSDIR}/net/ncftp2 will check for an
executable called ncftp2, and descend into the
net/ncftp2 subdirectory of your ports tree to
build and install it if it is not found.The dependency is checked from within the
fetch target. The
target part can be omitted if it is the
same as DEPENDS_TARGET.DEPENDSIf there is a dependency that does not fall into either of the
above four categories, or your port requires to have the source of
the other port extracted in addition to having them installed,
then use this variable. This is a list of
dir:target,
as there is nothing to check, unlike the previous four. The
target part can be omitted if it is the
same as DEPENDS_TARGET.Common dependency variablesDefine USE_XLIB=yes if your port requires
the X Window System to be installed (it is implied by
USE_IMAKE). Define
USE_GMAKE=yes if your port requires GNU
make instead of BSD make.
Define USE_AUTOCONF=yes if your port requires
GNU autoconf to be run. Define USE_QT=yes if
your port uses the latest qt toolkit. Use
USE_PERL5=yes if your port requires version 5
of the perl language. (The last is especially important since
some versions of FreeBSD has perl5 as part of the base system
while others do not.)Notes on dependenciesAs mentioned above, the default target to call when a
dependency is required is DEPENDS_TARGET.
It defaults to install. This is a user
variable; is is never defined in a port's
Makefile. If your port needs a special way
to handle a dependency, use the :target part of
the *_DEPENDS variables instead of redefining
DEPENDS_TARGET.When you type make clean, its dependencies
are automatically cleaned too. If you do not wish this to happen,
define the variable NOCLEANDEPENDS in your
environment.To depend on another port unconditionally, it is customary to
use the string nonexistent as the first field
of BUILD_DEPENDS or
RUN_DEPENDS. Use this only when you need to
the to get to the source of the other port. You can often save
compilation time by specifying the target too. For
instance
BUILD_DEPENDS= /nonexistent:${PORTSDIR}/graphics/jpeg:extract
will always descend to the JPEG port and extract it.Do not use DEPENDS unless there is no other
way the behaviour you want can be accomplished. It will cause the
other port to be always build (and installed, by default), and the
dependency will go into the packages as well. If this is really
what you need, I recommend you write it as
BUILD_DEPENDS and
RUN_DEPENDS instead—at least the
intention will be clear.Building mechanismsIf your package uses GNU make, set
USE_GMAKE=yes. If your package uses
configure, set
HAS_CONFIGURE=yes. If your package uses GNU
configure, set
GNU_CONFIGURE=yes (this implies
HAS_CONFIGURE). If you want to give some extra
arguments to configure (the default argument list
--prefix=${PREFIX} for GNU
configure and empty for non-GNU
configure), set those extra arguments in
CONFIGURE_ARGS. If your package uses GNU
autoconf, set
USE_AUTOCONF=yes. This implies
GNU_CONFIGURE, and will cause
autoconf to be run before
configure.If your package is an X application that creates
Makefiles from Imakefiles
using imake, then set
USE_IMAKE=yes. This will cause the configure
stage to automatically do an xmkmf -a. If the
flag is a problem for your port, set
XMKMF=xmkmf. If the port uses
imake but does not understand the
install.man target,
NO_INSTALL_MANPAGES=yes should be set. In
addition, the author of the original port should be shot. :>If your port's source Makefile has
something else than all as the main build
target, set ALL_TARGET accordingly. Same goes
for install and
INSTALL_TARGET.Special considerationsThere are some more things you have to take into account when you
create a port. This section explains the most common of those.ldconfigIf your port installs a shared library, add a
post-install target to your
Makefile that runs ${LDCONFIG}
-m on the directory where the new library is installed
(usually PREFIX/lib) to
register it into the shared library cache.Also, add a matching @exec /sbin/ldconfig -m
and @unexec /sbin/ldconfig -R pair to your
pkg/PLIST file so that a user who installed the
package can start using the shared library immediately and
deinstallation will not cause the system to still believe the
library is there. These lines should immediately follow the line
for the shared library itself, as in:
lib/libtvl80.so.1
@exec /sbin/ldconfig -m %D/lib
@unexec /sbin/ldconfig -RNever, ever, ever add a line that says
ldconfig without any arguments to your
Makefile or pkg/PLIST.
This will reset the shared library cache to the contents of
/usr/lib only, and will royally screw up the
user's machine ("Help, xinit does not run anymore after I install
this port!"). Anybody who does this will be shot and cut in 65,536
pieces by a rusty knife and have is liver chopped out by a bunch of
crows and will eternally rot to death in the deepest bowels of hell
(not necessarily in that order…)ELF supportSince FreeBSD is moving to ELF shortly after 3.0-RELEASE, we need
to convert many ports that build shared libraries to support ELF.
Complicating this task is that a 3.0 system can run as both ELF and
a.out, and we wish to unofficially support the 2.2 as long as
possible. Below are the guidelines on how to convert a.out only ports
to support both a.out and ELF compilation.Some part of this list is only applicable during the conversion,
but will be left here for awhile for reference in case you have come
across some old port you wish to upgrade.Moving a.out libraries out of the wayA.out libraries should be moved out of
/usr/local/lib and similar to an
aout subdirectory. (If you do not move them out
of the way, ELF ports will happily overwrite a.out libraries.) The
move-aout-libs target in the 3.0-CURRENT
src/Makefile (called from
aout-to-elf) will do this for you. It will
only move a.out libs so it is safe to call it on a system with both
ELF and a.out libs in the standard directories.FormatThe ports tree will build packages in the format the machine is
in. This means a.out for 2.2 and a.out or ELF for 3.0 depending on
what `objformat` returns. Also, once users move
a.out libraries to a subdirectory, building a.out libraries will be
unsupported. (I.e., it may still work if you know what you are
doing, but you are on your own.)If a port only works for a.out, set
BROKEN_ELF to a string describing the reason
why. Such ports will be skipped during a build on an ELF
system.PORTOBJFORMATbsd.port.mk will set
PORTOBJFORMAT to aout or
elf and export it in the environments
CONFIGURE_ENV, SCRIPTS_ENV and
MAKE_ENV. (It's always going to be
aout in 2.2-STABLE). It is also passed to
PLIST_SUB as
PORTOBJFORMAT=${PORTOBJFORMAT}. (See comment on
ldconfig lines below.)The variable is set using this line in
bsd.port.mk:
PORTOBJFORMAT!= test -x /usr/bin/objformat && /usr/bin/objformat || echo aoutPorts' make processes should use this variable to decide what to
do. However, if the port's configure script
already automatically detects an ELF system, it is not necessary to
refer to PORTOBJFORMAT.Building shared librariesThe following are differences in handling shared libraries for
a.out and ELF.Shared library versionsAn ELF shared library should be called
libfoo.so.M
where M is the single version number,
and an a.out library should be called
libfoo.so.M.N
where M is the major version and
N is the the minor version number.
Do not mix those; never install an ELF
shared library called
libfoo.so.N.M
or an a.out shared library (or symlink) called
libfoo.so.N.Linker command linesAssuming cc -shared is used rather than
ld directly, the only difference is that you
need to add
on the command line for ELF.You need to install a symlink from
libfoo.so to
libfoo.so.N to make
ELF linkers happy. Since it should be listed in
PLIST too, and it won't hurt in the a.out case
(some ports even require the link for dynamic loading), you should
just make this link regardless of the setting of
PORTOBJFORMAT.LIB_DEPENDSAll port Makefiles are edited to remove minor numbers from
LIB_DEPENDS, and also to have the regexp support
removed. (E.g., foo\\.1\\.\\(33|40\\) becomes
foo.2.) They will be matched using grep
-wF.PLISTPLIST should contain the short (ELF) shlib
names if the a.out minor number is zero, and the long (a.out) names
otherwise. bsd.port.mk will automatically add
.0 to the end of short shlib lines if
PORTOBJFORMAT equals aout, and
will delete the minor number from long shlib names if
PORTOBJFORMAT equals
elf.In cases where you really need to install shlibs with two
versions on an ELF system or those with one version on an a.out
system (for instance, ports that install compatibility libraries for
other operating systems), define the variable
NO_FILTER_SHLIBS. This will turn off the editing
of PLIST mentioned in the previous
paragraph.ldconfigThe ldconfig line in Makefiles should
read:
${SETENV} OBJFORMAT=${PORTOBJFORMAT} ${LDCONFIG} -m ....In PLIST it should read;
@exec /usr/bin/env OBJFORMAT=%%PORTOBJFORMAT%% /sbin/ldconfig -m ...
@unexec /usr/bin/env OBJFORMAT=%%PORTOBJFORMAT%% /sbin/ldconfig -RThis is to ensure that the correct ldconfig
will be called depending on the format of the package, not the
default format of the system.MASTERDIRIf your port needs to build slightly different versions of
packages by having a variable (for instance, resolution, or paper
size) take different values, create one subdirectory per package to
make it easier forusers to see what to do, but try to share as many
files as possible between ports. Typically you only need a very short
Makefile in all but one of the directories if you
use variables cleverly. In the sole Makefiles,
you can use MASTERDIR to specify the directory
where the rest of the files are. Also, use a variable as part of
PKGNAME so
the packages will have different names.This will be best demonstrated by an example. This is part of
japanese/xdvi300/Makefile;
PKGNAME= ja-xdvi${RESOLUTION}-17
:
# default
RESOLUTION?= 300
.if ${RESOLUTION} != 118 && ${RESOLUTION} != 240 && \
${RESOLUTION} != 300 && ${RESOLUTION} != 400
@${ECHO} "Error: invalid value for RESOLUTION: \"${RESOLUTION}\""
@${ECHO} "Possible values are: 118, 240, 300 (default) and 400."
@${FALSE}
.endifjapanese/xdvi300 also has all the regular
patches, package files, etc. If you type make
there, it will take the default value for the resolution (300) and
build the port normally.As for other resolutions, this is the entirexdvi118/Makefile;
RESOLUTION= 118
MASTERDIR= ${.CURDIR}/../xdvi300
.include ${MASTERDIR}/Makefile(xdvi240/Makefile and
xdvi400/Makefile are similar). The
MASTERDIR definition tells
bsd.port.mk that the refulat set of
subdirectories like PATCHDIR and
PKGDIR are to be found under
xdvi300. The RESOLUTION=118
line will override the RESOLUTION=300 line in
xdvi300/Makefile and the port will be built with
resolution set to 118.Shared library versionsFirst, please read our policy on
shared library versioning to understand what to do with
shared library versions in general. Do not blindly assume software
authors know what they are doing; many of them do not. It is very
important that these details are carefully considered, as we have
quite a unique situation where we are trying to have dozens of
potentially incompatible software pairs co-exist. Careless port
imports have caused great trouble regarding shared libraries in the
past (ever wondered why the port jpeg-6b has a
shared library version of 9.0?). If in doubt, send a message to the
&a.ports;. Most of the time, your job ends by determining the right
shared library version and making appropriate patches to implement
it.However, if there is a port which is a different version of the
same software already in the tree, the situation is much more complex.
In short, the FreeBSD implementation does not allow the user to
specify to the linker which version of shared library to link against
(the linker will always pick the highest numbered version). This
means, if there is a libfoo.so.3.2 and
libfoo.so.4.0 in the system, there is no way to
tell the linker to link a particular application to
libfoo.so.3.2. It is essentially completely
overshadowed in terms of compilation-time linkage. In this case, the
only solution is to rename the base part of the
shared library. For instance, change
libfoo.so.4.0 to
libfoo4.so.1.0 so both version 3.2 and 4.0 can be
linked from other ports.ManpagesThe MAN[1-9LN] variables will automatically add
any manpages to pkg/PLIST (this means you must
not list manpages in the
PLIST—see generating PLIST for more). It also
makes the install stage automatically compress or uncompress manpages
depending on the setting of NOMANCOMPRESS in
/etc/make.conf.If your port tries to install multiple names for manpages using
symlinks or hardlinks, you must use the MLINKS
variable to identify these. The link installed by your port will
be destroyed and recreated by bsd.port.mk
to make sure it points to the correct file. Any manpages
listed in MLINKS must not be listed in the
PLIST.To specify whether the manpages are compressed upon installation,
use the MANCOMPRESSED variable. This variable can
take three values, yes, no and
maybe. yes means manpages are
already installed compressed, no means they are
not, and maybe means the software already respects
the value of NOMANCOMPRESS so
bsd.port.mk does not have to do anything
special.MANCOMPRESSED is automatically set to
yes if USE_IMAKE is set and
NO_INSTALL_MANPAGES is not set, and to
no otherwise. You do not have to explicitly define
it unless the default is not suitable for your port.If your port anchors its man tree somewhere other than
PREFIX, you can use the
MANPREFIX to set it. Also, if only manpages in
certain sections go in a non-standard place, such as some Perl modules
ports, you can set individual man paths using
MANsectPREFIX (where
sect is one of 1-9,
L or N).If your manpages go to language-specific subdirectories, set the
name of the languages to MANLANG. The value of
this variable defaults to "" (i.e., English
only).Here is an example that puts it all together.
MAN1= foo.1
MAN3= bar.3
MAN4= baz.4
MLINKS= foo.1 alt-name.8
MANLANG= "" ja
MAN3PREFIX= ${PREFIX}/share/foobar
MANCOMPRESSED= yesThis states that six files are installed by this port;
${PREFIX}/man/man1/foo.1.gz
${PREFIX}/man/ja/man1/foo.1.gz
${PREFIX}/share/foobar/man/man3/bar.3.gz
${PREFIX}/share/foobar/man/ja/man3/bar.3.gz
${PREFIX}/man/man4/baz.4.gz
${PREFIX}/man/ja/man4/baz.4.gzAdditionally ${PREFIX}/man/man8/alt-name.8.gz
may or may-not be installed by your port. Regardless, a
symlink will be made to join the foo(1) manpage and
alt-name(8) manpage.Ports that require MotifThere are many programs that require a Motif library (available
from several commercial vendors, while there is a free clone reported
to be able to run many applications in
x11-toolkits/lesstif) to compile. Since it is a
popular toolkit and their licenses usually permit redistribution of
statically linked binaries, we have made special provisions for
handling ports that require Motif in a way that we can easily compile
binaries linked either dynamically (for people who are compiling from
the port) or statically (for people who distribute packages).REQUIRES_MOTIFIf your port requires Motif, define this variable in the
Makefile. This will prevent people who do not own a copy of Motif
from even attempting to build it.MOTIFLIBThis variable will be set by bsd.port.mk to
be the appropriate reference to the Motif library. Please patch the
source to use this wherever the Motif library is referenced in the
Makefile or
Imakefile.There are two common cases:If the port refers to the Motif library as
-lXm in its Makefile or
Imakefile, simply substitute
${MOTIFLIB} for it.If the port uses XmClientLibs in its
Imakefile, change it to
${MOTIFLIB} ${XTOOLLIB}
${XLIB}.Note that MOTIFLIB (usually) expands to
-L/usr/X11R6/lib -lXm or
/usr/X11R6/lib/libXm.a, so there is no need to
add -L or -l in front.X11 fontsIf your port installs fonts for the X Window system, put them in
X11BASE/lib/X11/fonts/local.
This directory is new to XFree86 release 3.3.3. If it does not exist,
please create it, and print out a message urging the user to update
their XFree86 to 3.3.3 or newer, or at least add this directory to the
font path in /etc/XF86Config.Info filesThe new version of texinfo (included in 2.2.2-RELEASE and onwards)
contains a utility called install-info to add and
delete entries to the dir file. If your port
installs any info documents, please follow this instructions so your
port/package will correctly update the user's
PREFIX/info/dir file. (Sorry
for the length of this section, but is it imperative to weave all the
info files together. If done correctly, it will produce a
beautiful listing, so please bear with me!First, this is what you (as a porter) need to know&prompt.user; install-info --help
install-info [OPTION]... [INFO-FILE [DIR-FILE]]
Install INFO-FILE in the Info directory file DIR-FILE.
Options:
--delete Delete existing entries in INFO-FILE;
don't insert any new entries.
:
--entry=TEXT Insert TEXT as an Info directory entry.
:
--section=SEC Put this file's entries in section SEC of the directory. :This program will not actually install info
files; it merely inserts or deletes entries in the
dir file.Here's a seven-step procedure to convert ports to use
install-info. I will use
editors/emacs as an example.Look at the texinfo sources and make a patch to insert
@dircategory and @direntry
statements to files that do not have them. This is part of my
patch:
--- ./man/vip.texi.org Fri Jun 16 15:31:11 1995
+++ ./man/vip.texi Tue May 20 01:28:33 1997
@@ -2,6 +2,10 @@
@setfilename ../info/vip
@settitle VIP
+@dircategory The Emacs editor and associated tools
+@direntry
+* VIP: (vip). A VI-emulation for Emacs.
+@end direntry
@iftex
@finalout
:The format should be self-explanatory. Many authors leave a
dir file in the source tree that contains all
the entries you need, so look around before you try to write your
own. Also, make sure you look into related ports and make the
section names and entry indentations consistent (we recommend that
all entry text start at the 4th tab stop).Note that you can put only one info entry per file because
of a bug in install-info --delete that
deletes only the first entry if you specify multiple entries in
the @direntry section.You can give the dir entries to
install-info as arguments
( and ) instead
of patching the texinfo sources. I do not think this is a good
idea for ports because you need to duplicate the same information
in three places
(Makefile and
@exec/@unexec of
PLIST; see below). However, if you have a
Japanese (or other multibyte encoding) info files, you will have
to use the extra arguments to install-info
because makeinfo cannot handle those texinfo
sources. (See Makefile and
PLIST of japanese/skk
for examples on how to do this).Go back to the port directory and do a make clean;
make and verify that the info files are regenerated
from the texinfo sources. Since the texinfo sources are newer than
the info files, they should be rebuilt when you type
make; but many Makefiles
do not include correct dependencies for info files. In
emacs' case, I had to patch the main
Makefile.in so it will descend into the
man subdirectory to rebuild the info
pages.
--- ./Makefile.in.org Mon Aug 19 21:12:19 1996
+++ ./Makefile.in Tue Apr 15 00:15:28 1997
@@ -184,7 +184,7 @@
# Subdirectories to make recursively. `lisp' is not included
# because the compiled lisp files are part of the distribution
# and you cannot remake them without installing Emacs first.
-SUBDIR = lib-src src
+SUBDIR = lib-src src man
# The makefiles of the directories in $SUBDIR.
SUBDIR_MAKEFILES = lib-src/Makefile man/Makefile src/Makefile oldXMenu/Makefile lwlib/Makefile
--- ./man/Makefile.in.org Thu Jun 27 15:27:19 1996
+++ ./man/Makefile.in Tue Apr 15 00:29:52 1997
@@ -66,6 +66,7 @@
${srcdir}/gnu1.texi \
${srcdir}/glossary.texi
+all: info
info: $(INFO_TARGETS)
dvi: $(DVI_TARGETS)The second hunk was necessary because the default target in
the man subdir is called
info, while the main
Makefile wants to call
all. I also deleted the installation of
the info info file because we already have
one with the same name in /usr/share/info
(that patch is not shown here).If there is a place in the Makefile that
is installing the dir file, delete it. Your
port may not be doing it. Also, remove any commands that are
otherwise mucking around with the dir
file.
--- ./Makefile.in.org Mon Aug 19 21:12:19 1996
+++ ./Makefile.in Mon Apr 14 23:38:07 1997
@@ -368,14 +368,8 @@
if [ `(cd ${srcdir}/info && /bin/pwd)` != `(cd ${infodir} && /bin/pwd)` ]; \
then \
(cd ${infodir}; \
- if [ -f dir ]; then \
- if [ ! -f dir.old ]; then mv -f dir dir.old; \
- else mv -f dir dir.bak; fi; \
- fi; \
cd ${srcdir}/info ; \
- (cd $${thisdir}; ${INSTALL_DATA} ${srcdir}/info/dir ${infodir}/dir); \
- (cd $${thisdir}; chmod a+r ${infodir}/dir); \
for f in ccmode* cl* dired-x* ediff* emacs* forms* gnus* info* message* mh-e* sc* vip*; do \
(cd $${thisdir}; \
${INSTALL_DATA} ${srcdir}/info/$$f ${infodir}/$$f; \
chmod a+r ${infodir}/$$f); \(This step is only necessary if you are modifying an existing
port.) Take a look at pkg/PLIST and delete
anything that is trying to patch up info/dir.
They may be in pkg/INSTALL or some other
file, so search extensively.
Index: pkg/PLIST
===================================================================
RCS file: /usr/cvs/ports/editors/emacs/pkg/PLIST,v
retrieving revision 1.15
diff -u -r1.15 PLIST
--- PLIST 1997/03/04 08:04:00 1.15
+++ PLIST 1997/04/15 06:32:12
@@ -15,9 +15,6 @@
man/man1/emacs.1.gz
man/man1/etags.1.gz
man/man1/ctags.1.gz
-@unexec cp %D/info/dir %D/info/dir.bak
-info/dir
-@unexec cp %D/info/dir.bak %D/info/dir
info/cl
info/cl-1
info/cl-2Add a post-install target to the
Makefile to create a dir
file if it is not there. Also, call
install-info with the installed info
files.
Index: Makefile
===================================================================
RCS file: /usr/cvs/ports/editors/emacs/Makefile,v
retrieving revision 1.26
diff -u -r1.26 Makefile
--- Makefile 1996/11/19 13:14:40 1.26
+++ Makefile 1997/05/20 10:25:09 1.28
@@ -20,5 +20,11 @@
post-install:
.for file in emacs-19.34 emacsclient etags ctags b2m
strip ${PREFIX}/bin/${file}
.endfor
+ if [ ! -f ${PREFIX}/info/dir ]; then \
+ ${SED} -ne '1,/Menu:/p' /usr/share/info/dir > ${PREFIX}/info/dir; \
+ fi
+.for info in emacs vip viper forms gnus mh-e cl sc dired-x ediff ccmode
+ install-info ${PREFIX}/info/${info} ${PREFIX}/info/dir
+.endfor
.include <bsd.port.mk>Do not use anything other than
/usr/share/info/dir and the above command to
create a new info file. In fact, I would add the first three lines
of the above patch to bsd.port.mk if you (the
porter) would not have to do it in PLIST by
yourself anyway.Edit PLIST and add equivalent
@exec statements and also
@unexec for pkg_delete. You
do not need to delete info/dir with
@unexec.
Index: pkg/PLIST
===================================================================
RCS file: /usr/cvs/ports/editors/emacs/pkg/PLIST,v
retrieving revision 1.15
diff -u -r1.15 PLIST
--- PLIST 1997/03/04 08:04:00 1.15
+++ PLIST 1997/05/20 10:25:12 1.17
@@ -16,7 +14,15 @@
man/man1/etags.1.gz
man/man1/ctags.1.gz
+@unexec install-info --delete %D/info/emacs %D/info/dir
:
+@unexec install-info --delete %D/info/ccmode %D/info/dir
info/cl
info/cl-1
@@ -87,6 +94,18 @@
info/viper-3
info/viper-4
+@exec [ -f %D/info/dir ] || sed -ne '1,/Menu:/p' /usr/share/info/dir > %D/info/dir
+@exec install-info %D/info/emacs %D/info/dir
:
+@exec install-info %D/info/ccmode %D/info/dir
libexec/emacs/19.34/i386--freebsd/cvtmail
libexec/emacs/19.34/i386--freebsd/digest-docThe @unexec install-info --delete
commands have to be listed before the info files themselves so
they can read the files. Also, the @exec
install-info commands have to be after the info
files and the @exec command that creates the
the dir file.Test and admire your
work. :). Check the
dir file before and after each step.The pkg/ subdirectoryThere are some tricks we have not mentioned yet about the
pkg/ subdirectory that come in handy
sometimes.MESSAGEIf you need to display a message to the installer, you may place
the message in pkg/MESSAGE. This capability is
often useful to display additional installation steps to be taken
after a pkg_add or to display licensing
information.The pkg/MESSAGE file does not need to be
added to pkg/PLIST. Also, it will not get
automatically printed if the user is using the port, not the
package, so you should probably display it from the
post-install target yourself.INSTALLIf your port needs to execute commands when the binary package
is installed with pkg_add you can do this via the
pkg/INSTALL script. This script will
automatically be added to the package, and will be run twice by
pkg_add. The first time will as INSTALL
${PKGNAME} PRE-INSTALL and the second time as
INSTALL ${PKGNAME} POST-INSTALL.
$2 can be tested to determine which mode
the script is being run in. The PKG_PREFIX
environmental variable will be set to the package installation
directory. See &man.pkg.add.1; for
additional information.This script is not run automatically if you install the port
with make install. If you are depending on it
being run, you will have to explicitly call it from your port's
Makefile.REQIf your port needs to determine if it should install or not, you
can create a pkg/REQ “requirements”
script. It will be invoked automatically at
installation/deinstallation time to determine whether or not
installation/deinstallation should proceed.Changing PLIST based on make
variablesSome ports, particularly the p5- ports, need to change their
PLIST depending on what options they are
configured with (or version of perl, in the case of p5- ports). To
make this easy, any instances in the PLIST of
%%OSREL%%, %%PERL_VER%%, and
%%PERL_VERSION%% will be substituted for
appropriately. The value of %%OSREL%% is the
numeric revision of the operating system (e.g.,
2.2.7). %%PERL_VERSION%% is
the full version number of perl (e.g., 5.00502)
and %%PERL_VER%% is the perl version number minus
the patchlevel (e.g., 5.005).If you need to make other substitutions, you can set the
PLIST_SUB variable with a list of
VAR=VALUE
pairs and instances of
%%VAR%%' will be
substituted with VALUE in the
PLIST.For instance, if you have a port that installs many files in a
version-specific subdirectory, you can put something like
OCTAVE_VERSION= 2.0.13
PLIST_SUB= OCTAVE_VERSION=${OCTAVE_VERSION}
in the Makefile and use
%%OCTAVE_VERSION%% wherever the version shows up
in PLIST. That way, when you upgrade the port,
you will not have to change dozens (or in some cases, hundreds) of
lines in the PLIST.This substitution (as well as addition of any man pages) will be done between
the do-install and
post-install targets, by reading from
PLIST and writing to TMPPLIST
(default:
WRKDIR/.PLIST.mktmp). So if
your port builds PLIST on the fly, do so in or
before do-install. Also, if your port
needs to edit the resulting file, do so in
post-install to a file named
TMPPLIST.Changing the names of files in the
pkg subdirectoryAll the filenames in the pkg subdirectory
are defined using variables so you can change them in your
Makefile if need be. This is especially useful
when you are sharing the same pkg subdirectory
among several ports or have to write to one of the above files (see
writing to places other than
WRKDIR for why it is a bad idea to write
directly in to the pkg subdirectory.Here is a list of variable names and their default
values.VariableDefault valueCOMMENT${PKGDIR}/DESCRDESCR${PKGDIR}/DESCRPLIST${PKGDIR}/PLISTPKGINSTALL${PKGDIR}/PKGINSTALLPKGDEINSTALL${PKGDIR}/PKGDEINSTALLPKGREQ${PKGDIR}/REQPKGMESSAGE${PKGDIR}/MESSAGEPlease change these variables rather than overriding
PKG_ARGS. If you change
PKG_ARGS, those files will not correctly be
installed in /var/db/pkg upon install from a
port.Licensing ProblemsSome software packages have restrictive licenses or can be in
violation to the law (PKP's patent on public key crypto, ITAR (export
of crypto software) to name just two of them). What we can do with
them varies a lot, depending on the exact wordings of the respective
licenses.It is your responsibility as a porter to read the licensing
terms of the software and make sure that the FreeBSD project will
not be held accountable of violating them by redistributing the
source or compiled binaries either via ftp or CD-ROM. If in doubt,
please contact the &a.ports;.There are two variables you can set in the Makefile to handle the
situations that arise frequently:If the port has a “do not sell for profit” type of
license, set the variable NO_CDROM to a string
describing the reason why. We will make sure such ports will not go
into the CD-ROM come release time. The distfile and package will
still be available via ftp.If the resulting package needs to be built uniquely for each
site, or the resulting binary package cannot be distributed due to
licensing; set the variable NO_PACKAGE to a
string describing the reason why. We will make sure such packages
will not go on the ftp site, nor into the CD-ROM come release time.
The distfile will still be included on both however.If the port has legal restrictions on who can use it (e.g.,
crypto stuff) or has a “no commercial use” license,
set the variable RESTRICTED to be the string
describing the reason why. For such ports, the distfiles/packages
will not be available even from our ftp sites.The GNU General Public License (GPL), both version 1 and 2,
should not be a problem for ports.If you are a committer, make sure you update the
ports/LEGAL file too.UpgradingWhen you notice that a port is out of date compared to the latest
version from the original authors, first make sure you have the latest
port. You can find them in the
ports/ports-current directory of the ftp mirror
sites. You may also use CVSup to keep your whole ports collection
up-to-date, as described in .The next step is to send a mail to the maintainer, if one is
listed in the port's Makefile. That person may
already be working on an upgrade, or have a reason to not upgrade the
port right now (because of, for example, stability problems of the new
version).If the maintainer asks you to do the upgrade or there is not any
such person to begin with, please make the upgrade and send the
recursive diff (either unified or context diff is fine, but port
committers appear to prefer unified diff more) of the new and old
ports directories to us (e.g., if your modified port directory is
called superedit and the original as in our tree
is superedit.bak, then send us the result of
diff -ruN superedit.bak superedit). Please examine
the output to make sure all the changes make sense. The best way to
send us the diff is by including it to &man.send-pr.1; (category
ports). Please mention any added or deleted files
in the message, as they have to be explicitly specified to CVS when
doing a commit. If the diff is more than about 20KB, please compress
and uuencode it; otherwise, just include it in as is in the PR.Once again, please use &man.diff.1; and not &man.shar.1; to send
updates to existing ports!Do's and Dont'sHere is a list of common do's and dont's that you encounter during
the porting process.You should check your own port against this list,
but you can also check ports in the PR database that others have
submitted. Submit any comments on ports you check as described in
Bug Reports and General
Commentary. Checking ports in the PR database will both make
it faster for us to commit them, and prove that you know what you are
doing.Strip BinariesDo strip binaries. If the original source already strips the
binaries, fine; otherwise you should add a
post-install rule to to it yourself. Here is an
example;
post-install:
strip ${PREFIX}/bin/xdlUse the &man.file.1; command on the installed executable to
check whether the binary is stripped or not. If it does not say
not stripped, it is stripped.INSTALL_* macrosDo use the macros provided in bsd.port.mk
to ensure correct modes and ownership of files in your own
*-install targets. They are:INSTALL_PROGRAM is a command to install
binary executables.INSTALL_SCRIPT is a command to install
executable scripts.INSTALL_DATA is a command to install
sharable data.INSTALL_MAN is a command to install
manpages and other documentation (it does not compress
anything).These are basically the install command with
all the appropriate flags. See below for an example on how to use
them.WRKDIRDo not write anything to files outside
WRKDIR. WRKDIR is the only
place that is guaranteed to be writable during the port build (see
compiling ports from CDROM for an
example of building ports from a read-only tree). If you need to
modigy some file in PKGDIR, do so by redefining a variable, not by
writing over it.WRKDIRPREFIXMake sure your port honors WRKDIRPREFIX.
Most ports do not have to worry about this. In particular, if you
are referring to a WRKDIR of another port, note
that the correct location is
WRKDIRPREFIXPORTSDIR/subdir/name/work not PORTSDIR/subdir/name/work or .CURDIR/../../subdir/name/work or some such.Also, if you are defining WRKDIR yourself,
make sure you prepend
${WKRDIRPREFIX}${.CURDIR} in the
front.Differentiating operating systems and OS versionsYou may come across code that needs modifications or conditional
compilation based upon what version of UNIX it is running under. If
you need to make such changes to the code for conditional
compilation, make sure you make the changes as general as possible
so that we can back-port code to FreeBSD 1.x systems and cross-port
to other BSD systems such as 4.4BSD from CSRG, BSD/386, 386BSD,
NetBSD, and OpenBSD.The preferred way to tell 4.3BSD/Reno (1990) and newer versions
of the BSD code apart is by using the BSD macro
defined in <sys/param.h>. Hopefully that
file is already included; if not, add the code:
#if (defined(__unix__) || defined(unix)) && !defined(USG)
#include <sys/param.h>
#endifto the proper place in the .c file. We
believe that every system that defines these two symbols has
sys/param.h. If you find a system that
does not, we would like to know. Please send mail to the
&a.ports;.Another way is to use the GNU Autoconf style of doing
this:
#ifdef HAVE_SYS_PARAM_H
#include <sys/param.h>
#endifDo not forget to add -DHAVE_SYS_PARAM_H to the
CFLAGS in the Makefile for
this method.Once you have sys/param.h included, you may
use:
#if (defined(BSD) && (BSD >= 199103))to detect if the code is being compiled on a 4.3 Net2 code base
or newer (e.g. FreeBSD 1.x, 4.3/Reno, NetBSD 0.9, 386BSD, BSD/386
1.1 and below).Use:
#if (defined(BSD) && (BSD >= 199306))to detect if the code is being compiled on a 4.4 code base or
newer (e.g. FreeBSD 2.x, 4.4, NetBSD 1.0, BSD/386 2.0 or
above).The value of the BSD macro is
199506 for the 4.4BSD-Lite2 code base. This is
stated for informational purposes only. It should not be used to
distinguish between versions of FreeBSD based only on 4.4-Lite vs.
versions that have merged in changes from 4.4-Lite2. The
__FreeBSD__ macro should be used instead.Use sparingly:__FreeBSD__ is defined in all versions of
FreeBSD. Use it if the change you are making
only affects FreeBSD. Porting gotchas like
the use of sys_errlist[] vs
strerror() are Berkeleyisms, not FreeBSD
changes.In FreeBSD 2.x, __FreeBSD__ is defined to
be 2. In earlier versions, it is
1. Later versions will bump it to match
their major version number.If you need to tell the difference between a FreeBSD 1.x
system and a FreeBSD 2.x or 3.x system, usually the right answer
is to use the BSD macros described above. If
there actually is a FreeBSD specific change (such as special
shared library options when using ld) then it
is OK to use __FreeBSD__ and #if
__FreeBSD__ > 1 to detect a FreeBSD 2.x and later
system. If you need more granularity in detecting FreeBSD
systems since 2.0-RELEASE you can use the following:
#if __FreeBSD__ >= 2
#include <osreldate.h>
# if __FreeBSD_version >= 199504
/* 2.0.5+ release specific code here */
# endif
#endifRelease__FreeBSD_version2.0-RELEASE1194112.1-CURRENTs199501, 1995032.0.5-RELEASE1995042.2-CURRENT before 2.11995082.1.0-RELEASE1995112.2-CURRENT before 2.1.51995122.1.5-RELEASE1996072.2-CURRENT before 2.1.61996082.1.6-RELEASE1996122.1.7-RELEASE1996122.2-RELEASE2200002.2.1-RELEASE220000 (no change)2.2-STABLE after 2.2.1-RELEASE220000 (no change)2.2-STABLE after texinfo-3.92210012.2-STABLE after top2210022.2.2-RELEASE2220002.2-STABLE after 2.2.2-RELEASE2220012.2.5-RELEASE2250002.2-STABLE after 2.2.5-RELEASE2250012.2-STABLE after ldconfig -R merge2250022.2.6-RELEASE2260002.2.7-RELEASE2270002.2-STABLE after 2.2.7-RELEASE2270012.2-STABLE after semctl(2) change2270022.2.8-RELEASE2280002.2-STABLE after 2.2.8-RELEASE2280013.0-CURRENT before mount(2) change3000003.0-CURRENT after mount(2) change3000013.0-CURRENT after semctl(2) change3000023.0-CURRENT after ioctl arg changes3000033.0-CURRENT after ELF conversion3000043.0-RELEASE3000053.0-CURRENT after 3.0-RELEASE3000063.0-STABLE after 3/4 branch3000073.1-RELEASE3100003.1-STABLE after 3.1-RELEASE3100013.1-STABLE after C++ constructor/destructor order
change3100023.2-STABLE3200014.0-CURRENT after 3/4 branch4000004.0-CURRENT after change in dynamic linker
handling4000014.0-CURRENT after C++ constructor/destructor
order change4000024.0-CURRENT after functioning dladdr(3)4000034.0-CURRENT after newbus4000044.0-CURRENT after suser(9) API change4000054.0-CURRENT after cdevsw registration change4000064.0-CURRENT after the addition of so_cred for
socket level credentials4000074.0-CURRENT after the addition of a poll syscall
wrapper to libc_r4000084.0-CURRENT after the change of the kernel's
dev_t type to struct
spacinfo pointer400009Note that 2.2-STABLE sometimes identifies itself as
“2.2.5-STABLE” after the 2.2.5-RELEASE. The pattern
used to be year followed by the month, but we decided to change it
to a more straightforward major/minor system starting from 2.2.
This is because the parallel development on several branches made
it infeasible to classify the releases simply by their real
release dates. If you are making a port now, you do not have to
worry about old -CURRENTs; they are listed here just for your
reference.In the hundreds of ports that have been done, there have only
been one or two cases where __FreeBSD__ should
have been used. Just because an earlier port screwed up and used it
in the wrong place does not mean you should do so too.Writing something after
bsd.port.mkDo not write anything after the .include
<bsd.port.mk> line. it usually can be avoided by
including bsd.port.pre.mk somewhere in the
middle of your Makefile and
bsd.port.post.mk at the end.You need to include either the
pre.mk/post.mk pair or
bsd.port.mk only; do not mix these two.bsd.port.pre.mk only defines a few
variables, which can be used in tests in the
Makefile, bsd.port.post.mk
defines the rest.Here are some important variables defined in
bsd.port.pre.mk (this is not the complete list,
please read bsd.port.mk for the complete
list).VariableDescriptionARCHThe architecture as returned by uname
-m (e.g., i386)OPSYSThe operating system type, as returned by
uname -s (e.g.,
FreeBSD)OSRELThe release version of the operating system (e.g.,
2.1.5 or
2.2.7)OSVERSIONThe numeric version of the operating system, same as
__FreeBSD_version.PORTOBJFORMATThe object format of the system
(aout or elfLOCALBASEThe base of the “local” tree (e.g.,
/usr/local/)X11BASEThe base of the “X11” tree (e.g.,
/usr/X11R6)PREFIXWhere the port installs itself (see more on
PREFIX).If you have to define the variables
USE_IMAKE, USE_X_PREFIX, or
MASTERDIR, do so before including
bsd.port.pre.mk.Here are some examples of things you can write after
bsd.port.pre.mk;
# no need to compile lang/perl5 if perl5 is already in system
.if ${OSVERSION} > 300003
BROKEN= perl is in system
.endif
# only one shlib version number for ELF
.if ${PORTOBJFORMAT} == "elf"
TCL_LIB_FILE= ${TCL_LIB}.${SHLIB_MAJOR}
.else
TCL_LIB_FILE= ${TCL_LIB}.${SHLIB_MAJOR}.${SHLIB_MINOR}
.endif
# software already makes link for ELF, but not for a.out
post-install:
.if ${PORTOBJFORMAT} == "aout"
${LN} -sf liblinpack.so.1.0 ${PREFIX}/lib/liblinpack.so
.endifInstall additional documentationIf your software has some documentation other than the standard
man and info pages that you think is useful for the user, install it
under PREFIX/share/doc.
This can be done, like the previous item, in the
post-install target.Create a new directory for your port. The directory name should
reflect what the port is. This usually means
PKGNAME minus the version part. However, if you
think the user might want different versions of the port to be
installed at the same time, you can use the whole
PKGNAME.Make the installation dependent to the variable
NOPORTDOCS so that users can disable it in
/etc/make.conf, like this:
post-install:
.if !defined(NOPORTDOCS)
${MKDIR}${PREFIX}/share/doc/xv
${INSTALL_MAN} ${WRKSRC}/docs/xvdocs.ps ${PREFIX}/share/doc/xv
.endifDo not forget to add them to pkg/PLIST too!
(Do not worry about NOPORTDOCS here; there is
currently no way for the packages to read variables from
/etc/make.conf.)Also you can use the pkg/MESSAGE file to
display messages upon installation. See the using
pkg/MESSAGE section for
details.MESSAGE does not need to be added to
pkg/PLIST).DIST_SUBDIRDo not let your port clutter
/usr/ports/distfiles. If your port requires a
lot of files to be fetched, or contains a file that has a name that
might conflict with other ports (e.g.,
Makefile), set DIST_SUBDIR
to the name of the port (PKGNAME without the
version part should work fine). This will change
DISTDIR from the default
/usr/ports/distfiles to
/usr/ports/distfiles/DIST_SUBDIR,
and in effect puts everything that is required for your port into
that subdirectory.It will also look at the subdirectory with the same name on the
backup master site at ftp.FreeBSD.org.
(Setting DISTDIR explicitly in your
Makefile will not accomplish this, so please use
DIST_SUBDIR.)This does not affect the MASTER_SITES you
define in your Makefile.Package informationDo include package information, i.e.
COMMENT, DESCR, and
PLIST, in pkg.Note that these files are not used only for packaging anymore,
and are mandatory now, even if
NO_PACKAGE is set.RCS stringsDo not put RCS strings in patches. CVS will mangle them when we
put the files into the ports tree, and when we check them out again,
they will come out different and the patch will fail. RCS strings
are surrounded by dollar ($) signs, and
typically start with $Id or
$RCS.Recursive diffUsing the recurse () option to
diff to generate patches is fine, but please take
a look at the resulting patches to make sure you do not have any
unnecessary junk in there. In particular, diffs between two backup
files, Makefiles when the port uses
Imake or GNU configure, etc.,
are unnecessary and should be deleted. If you had to edit
configure.in and run
autoconf to regenerate
configure, do not take the diffs of
configure (it often grows to a few thousand
lines!); define USE_AUTOCONF=yes and take the
diffsof configure.in.Also, if you had to delete a file, then you can do it in the
post-extract target rather than as part of
the patch. Once you are happy with the resulting diff, please split
it up into one source file per patch file.PREFIXDo try to make your port install relative to
PREFIX. (The value of this variable will be set
to LOCALBASE (default
/usr/local), unless
USE_X_PREFIX or USE_IMAKE is
set, in which case it will be X11BASE (default
/usr/X11R6).)Not hard-coding /usr/local or
/usr/X11R6 anywhere in the source will make the
port much more flexible and able to cater to the needs of other
sites. For X ports that use imake, this is
automatic; otherwise, this can often be done by simply replacing the
occurrences of /usr/local (or
/usr/X11R6 for X ports that do not use imake)
in the various scripts/Makefiles in the port to read
PREFIX, as this variable is automatically passed
down to every stage of the build and install processes.Do not set USE_X_PREFIX unless your port
truly require it (i.e., it links against X libs or it needs to
reference files in X11BASE).The variable PREFIX can be reassigned in your
Makefile or in the user's environment.
However, it is strongly discouraged for individual ports to set this
variable explicitly in the Makefiles.Also, refer to programs/files from other ports with the
variables mentioned above, not explicit pathnames. For instance, if
your port requires a macro PAGER to be the full
pathname of less, use the compiler flag:
-DPAGER=\"${PREFIX}/bin/less\"
or
-DPAGER=\"${LOCALBASE}/bin/less\"
if this is an X port, instead of
-DPAGER=\"/usr/local/bin/less\". This way it will
have a better chance of working if the system administrator has
moved the whole `/usr/local' tree somewhere else.SubdirectoriesTry to let the port put things in the right subdirectories of
PREFIX. Some ports lump everything and put it in
the subdirectory with the port's name, which is incorrect. Also,
many ports put everything except binaries, header files and manual
pages in the a subdirectory of lib, which does
not bode well with the BSD paradigm. Many of the files should be
moved to one of the following: etc
(setup/configuration files), libexec
(executables started internally), sbin
(executables for superusers/managers), info
(documentation for info browser) or share
(architecture independent files). See man &man.hier.7; for details,
the rules governing
/usr pretty much apply to
/usr/local too. The exception are ports
dealing with USENET “news”. They may use
PREFIX/news as a destination
for their files.Cleaning up empty directoriesDo make your ports clean up after themselves when they are
deinstalled. This is usually accomplished by adding
@dirrm lines for all directories that are
specifically created by the port. You need to delete subdirectories
before you can delete parent directories.
:
lib/X11/oneko/pixmaps/cat.xpm
lib/X11/oneko/sounds/cat.au
:
@dirrm lib/X11/oneko/pixmals
@dirrm lib/X11/oneko/sounds
@dirrm lib/X11/onekoHowever, sometimes @dirrm will give you
errors because other ports also share the same subdirectory. You
can call rmdir from @unexec to
remove only empty directories without warning.
@unexec rmdir %D/share/doc/gimp 2>/dev/null || trueThis will neither print any error messages nor cause
pkg_delete to exit abnormally even if
PREFIX/share/doc/gimp is not
empty due to other ports installing some files in there.UIDsIf your port requires a certain user to be on the installed
system, let the pkg/INSTALL script call
pw to create it automatically. Look at
net/cvsup-mirror for an example.If your port must use the same user/group ID number when it is
installed a binary package as when it was compiled, then you must
choose a free UID from 50 to 99 and register it below. Look at
japanese/Wnn for an example.Make sure you do not use a UID already used by the system or
other ports. This is the current list of UIDs between 50 and
99.
majordom:*:54:54:Majordomo Pseudo User:/usr/local/majordomo:/nonexistent
cyrus:*:60:60:the cyrus mail server:/nonexistent:/nonexistent
gnats:*:61:1:GNATS database owner:/usr/local/share/gnats/gnats-db:/bin/sh
uucp:*:66:66:UUCP pseudo-user:/var/spool/uucppublic:/usr/libexec/uucp/uucico
xten:*:67:67:X-10 daemon:/usr/local/xten:/nonexistent
pop:*:68:6:Post Office Owner (popper):/nonexistent:/nonexistent
wnn:*:69:7:Wnn:/nonexistent:/nonexistent
ifmail:*:70:66:Ifmail user:/nonexistent:/nonexistent
pgsql:*:70:70:PostgreSQL pseudo-user:/usr/local/pgsql:/bin/sh
ircd:*:72:72:IRCd hybrid:/nonexistent:/nonexistent
alias:*:81:81:QMail user:/var/qmail/alias:/nonexistent
qmaill:*:83:81:QMail user:/var/qmail:/nonexistent
qmaild:*:82:81:QMail user:/var/qmail:/nonexistent
qmailq:*:85:82:QMail user:/var/qmail:/nonexistent
qmails:*:87:82:QMail user:/var/qmail:/nonexistent
qmailp:*:84:81:QMail user:/var/qmail:/nonexistent
qmailr:*:86:82:QMail user:/var/qmail:/nonexistent
msql:*:87:87:mSQL-2 pseudo-user:/var/db/msqldb:/bin/sh
mysql:*:88:88:MySQL Daemon:/var/db/mysql:/sbin/nologinPlease include a notice when you submit a port (or an upgrade)
that reserves a new UID or GID in this range. This allows us to
keep the list of reserved IDs up to date.Do things rationallyThe Makefile should do things simply and
reasonably. If you can make it a couple of lines shorter or more
readable, then do so. Examples include using a make
.if construct instead of a shell
if construct, not redefining
do-extract if you can redefine
EXTRACT* instead, and using
GNU_CONFIGURE instead of CONFIGURE_ARGS
+= --prefix=${PREFIX}.Respect CFLAGSThe port should respect the CFLAGS variable.
If it does not, please add NO_PACKAGE=ignores
cflags to the Makefile.Configuration filesIf your port requires some configuration files in
PREFIX/etc, do
not just install them and list them in
pkg/PLIST. That will cause
pkg_delete to delete files carefully edited by
the user and a new installation to wipe them out.Instead, install sample files with a suffix
(filename.sample
will work well) and print out a message pointing out that the
user has to copy and edit the file before the software can be made
to work.PortlintDo check your work with portlint
before you submit or commit it.FeedbackDo send applicable changes/patches to the original
author/maintainer for inclusion in next release of the code. This
will only make your job that much easier for the next
release.MiscellaneaThe files pkg/DESCR,
pkg/COMMENT, and pkg/PLIST
should each be double-checked. If you are reviewing a port and feel
they can be worded better, do so.Do not copy more copies of the GNU General Public License into
our system, please.Please be careful to note any legal issues! Do not let us
illegally distribute software!If you are stuck…Do look at existing examples and the
bsd.port.mk file before asking us questions!
;)Do ask us questions if you have any trouble! Do not just beat
your head against a wall! :)A Sample MakefileHere is a sample Makefile that you can use to
create a new port. Make sure you remove all the extra comments (ones
between brackets)!It is recommended that you follow this format (ordering of
variables, empty lines between sections, etc.). This format is
designed so that the most important information is easy to locate. We
recommend that you use portlint to check the
Makefile.
[the header...just to make it easier for us to identify the ports.]
# New ports collection makefile for: xdvi
[the version required header should updated when upgrading a port.]
# Version required: pl18 [things like "1.5alpha" are fine here too]
[this is the date when the first version of this Makefile was created.
Never change this when doing an update of the port.]
# Date created: 26 May 1995
[this is the person who did the original port to FreeBSD, in particular, the
person who wrote the first version of this Makefile. Remember, this should
not be changed when upgrading the port later.]
-# Whom: Satoshi Asami <asami@FreeBSD.ORG>
+# Whom: Satoshi Asami <asami@FreeBSD.org>
#
# $Id$
[ ^^^^ This will be automatically replaced with RCS ID string by CVS
when it is committed to our repository.]
#
[section to describe the port itself and the master site - DISTNAME
is always first, followed by PKGNAME (if necessary), CATEGORIES,
and then MASTER_SITES, which can be followed by MASTER_SITE_SUBDIR.
After those, one of EXTRACT_SUFX or DISTFILES can be specified too.]
DISTNAME= xdvi
PKGNAME= xdvi-pl18
CATEGORIES= print
[do not forget the trailing slash ("/")!
if you are not using MASTER_SITE_* macros]
MASTER_SITES= ${MASTER_SITE_XCONTRIB}
MASTER_SITE_SUBDIR= applications
[set this if the source is not in the standard ".tar.gz" form]
EXTRACT_SUFX= .tar.Z
[section for distributed patches -- can be empty]
PATCH_SITES= ftp://ftp.sra.co.jp/pub/X11/japanese/
PATCHFILES= xdvi-18.patch1.gz xdvi-18.patch2.gz
[maintainer; *mandatory*! This is the person (preferably with commit
privileges) who a user can contact for questions and bug reports - this
person should be the porter or someone who can forward questions to the
original porter reasonably promptly. If you really do not want to have
- your address here, set it to "ports@FreeBSD.ORG".]
-MAINTAINER= asami@FreeBSD.ORG
+ your address here, set it to "ports@FreeBSD.org".]
+MAINTAINER= asami@FreeBSD.org
[dependencies -- can be empty]
RUN_DEPENDS= gs:${PORTSDIR}/print/ghostscript
LIB_DEPENDS= Xpm.5:${PORTSDIR}/graphics/xpm
[this section is for other standard bsd.port.mk variables that do not
belong to any of the above]
[If it asks questions during configure, build, install...]
IS_INTERACTIVE= yes
[If it extracts to a directory other than ${DISTNAME}...]
WRKSRC= ${WRKDIR}/xdvi-new
[If the distributed patches were not made relative to ${WRKSRC}, you
may need to tweak this]
PATCH_DIST_STRIP= -p1
[If it requires a "configure" script generated by GNU autoconf to be run]
GNU_CONFIGURE= yes
[If it requires GNU make, not /usr/bin/make, to build...]
USE_GMAKE= yes
[If it is an X application and requires "xmkmf -a" to be run...]
USE_IMAKE= yes
[et cetera.]
[non-standard variables to be used in the rules below]
MY_FAVORITE_RESPONSE= "yeah, right"
[then the special rules, in the order they are called]
pre-fetch:
i go fetch something, yeah
post-patch:
i need to do something after patch, great
pre-install:
and then some more stuff before installing, wow
[and then the epilogue]
.include <bsd.port.mk>Automated package list creationFirst, make sure your port is almost complete, with only
PLIST missing. Create an empty
PLIST.&prompt.root; touch PLISTNext, create a new set of directories which your port can be
installed, and install any dependencies.&prompt.root; mtree -U -f /etc/mtree/BSD.local.dist -d -e -p /var/tmp/port-name
&prompt.root; make depends PREFIX=/var/tmp/port-nameStore the directory structure in a new file.&prompt.root; (cd /var/tmp/port-name && find * \! -type d) > OLD-DIRSIf your port honours PREFIX (which it should)
you can then install the port and create the package list.&prompt.root; make install PREFIX=/var/tmp
&prompt.root; (cd /var/tmp/port-name && find * \! -type d) > pkg/PLISTYou must also add any newly created directories to the packing
list.&prompt.root; (cd /var/tmp/port-name && find * -type d) | comm -13 OLD-DIRS - | sed -e 's#^#@dirrm#' >> pkg/PLISTFinally, you need to tidy up the packing list by hand. I lied
when I said this was all automated. Manual pages should be listed in
the port's Makefile under
MANn, and not in the
package list. User configuration files should be removed, or
installed as
filename.sample. Any
libraries installed by the port should be listed as specified in the
ldconfig section.Package NamesThe following are the conventions you should follow in naming your
packages. This is to have our package directory easy to scan, as
there are already lots and lots of packages and users are going to
turn away if they hurt their eyes!The package name should look like
language-name-compiled.specifics-version.numbers.If your DISTNAME does not look like that, set
PKGNAME to something in that format.FreeBSD strives to support the native language of its users.
The language- part should be a two
letter abbreviation of the natural language defined by ISO-639 if
the port is specific to a certain language. Examples are
ja for Japanese, ru for
Russian, vi for Vietnamese,
zh for Chinese, ko for
Korean and de for German.The name part should be all lowercases,
except for a really large package (with lots of programs in it).
Things like XFree86 (yes there really is a port of it, check it
out) and ImageMagick fall into this category. Otherwise, convert
the name (or at least the first letter) to lowercase. If the
capital letters are important to the name (for example, with
one-letter names like R or
V) you may use capital letters at your
discretion. There is a tradition of naming Perl 5 modules by
prepending p5- and converting the double-colon
separator to a hyphen; for example, the
Data::Dumper module becomes
p5-Data-Dumper. If the software in question
has numbers, hyphens, or underscores in its name, you may include
them as well (like kinput2).If the port can be built with different hardcoded defaults (usually
part of the directory name in a family of ports), the
-compiled.specifics part should state
the compiled-in defaults (the hyphen is optional). Examples are
papersize and font units.The version string should be a period-separated list of
integers and single lowercase alphabetics. The only exception is
the string pl (meaning `patchlevel'), which can
be used only when there are no major and
minor version numbers in the software.Here are some (real) examples on how to convert a
DISTNAME into a suitable
PKGNAME:Distribution NamePackage NameReasonmule-2.2.2.mule-2.2.2No changes requiredXFree86-3.1.2XFree86-3.1.2No changes requiredEmiClock-1.0.2emiclock-1.0.2No uppercase names for single programsgmod1.4gmod-1.4Need a hyphen before version numbersxmris.4.0.2xmris-4.0.2Need a hyphen before version numbersrdist-1.3alphardist-1.3aNo strings like alpha
allowedes-0.9-beta1es-0.9b1No strings like beta
allowedv3.3beta021.srctiff-3.3What the heck was that anyway?tvtwmtvtwm-pl11Version string always requiredpiewmpiewm-1.0Version string always requiredxvgr-2.10pl1xvgr-2.10.1pl allowed only when no
major/minor version numbersgawk-2.15.6ja-gawk-2.15.6Japanese language versionpsutils-1.13psutils-letter-1.13Papersize hardcoded at package build timepkfontspkfonts300-1.0Package for 300dpi fontsIf there is absolutely no trace of version information in the
original source and it is unlikely that the original author will ever
release another version, just set the version string to
1.0 (like the piewm example above). Otherwise, ask
the original author or use the date string
(yy.mm.dd) as the version.CategoriesAs you already know, ports are classified in several categories.
But for this to wor, it is important that porters and users understand
what each category and how we deicde what to put in each
category.Current list of categoriesFirst, this is the current list of port categories. Those
marked with an asterisk (*) are
virtual categories—those that do not have
a corresponding subdirectory in the ports tree.For non-virtual categories, you will find a one-line
description in the pkg/COMMENT file in that
subdirectory (e.g.,
archivers/pkg/COMMENT).CategoryDescriptionafterstep*Ports to support AfterStep window managerarchiversArchiving tools.astroAstronomical ports.audioSound support.benchmarksBenchmarking utilities.biologyBiology-related software.cadComputer aided design tools.chineseChinese language support.commsCommunication software. Mostly software to talk to
your serial port.convertersCharacter code converters.databasesDatabases.deskutilsThings that used to be on the desktop before
computers were invented.develDevelopment utilities. Do not put libraries here just
because they are libraries—unless they truly do not
belong to anywhere else, they should not be in this
category.editorsGeneral editors. Specialized editors go in the section
for those tools (e.g., a mathematical-formula editor will go
in math).elispEmacs-lisp ports.emulatorsEmulators for other operating systems. Terminal
emulators do not belong
here—X-based ones should go to
x11 and text-based ones to either
comms or misc,
depending on the exact functionality.gamesGames.germanGerman language support.graphicsGraphics utilities.ircInternet Chat Relay utilities.japaneseJapanese language support.javaJava languge support.kde*Ports that form the K Desktop Environment
(kde).koreanKorean language support.langProgramming languages.mailMail software.mathNumerical computation software and other utilities
for mathematics.mboneMBone applications.miscMiscellaneous utilities—basically things that
does not belong to anywhere else. This is the only category
that should not appear with any other non-virtual category.
If you have misc with something else in
your CATEGORIES line, that means you can
safely delete misc and just put the port
in that other subdirectory!netMiscellaneous networking software.newsUSENET news software.offix*Ports from the OffiX suite.palmSoftware support for the 3Com Palm(tm) series.perl5*Ports that require perl version 5 to run.plan9*Various programs from Plan9.printPrinting software. Desktop publishing tools
(previewers, etc.) belong here too.python*Software written in python.russianRussian language support.securitySecurity utilities.shellsCommand line shells.sysutilsSystem utilities.tcl75*Ports that use tcl version 7.5 to run.tcl76*Ports that use tcl version 7.6 to run.tcl80*Ports that use tcl version 8.0 to run.tcl81*Ports that use tcl version 8.1 to run.textprocText processing utilities. It does not include
desktop publishing tools, which go to print/.tk41*Ports that use tk version 4.1 to run.tk42*Ports that use tk version 4.2 to run.tk80*Ports that use tk version 8.0 to run.tk81*Ports that use tk version 8.1 to run.vietnameseVietnamese language support.windowmaker*Ports to support the WindowMaker window
managerwwwSoftware related to the World Wide Web. HTML language
support belong here too.x11The X window system and friends. This category is only
for software that directly support the window system. Do not
put regular X applications here. If your port is an X
application, define USE_XLIB (implied by
USE_IMAKE) and put it in appropriate
categories. Also, many of them go into other
x11-* categories (see below).x11-clocksX11 clocks.x11-fmX11 file managers.x11-fontsX11 fonts and font utilities.x11-serversX11 servers.x11-toolkitsX11 toolkits.x11-wmX11 window managers.Choosing the right categoryAs many of the categories overlap, you often have to choose
which of the categories should be the primary category of your port.
There are several rules that govern this usse. Here is the list of
priorities, in decreasing order of precedence.Language specific categories always come first. For
example, if your port installs Japanese X11 fonts, then your
CATEGORIES line would read japanese
x11-fonts.Specific categories win over less-specific ones. For
instance, an HTML editor should be listed as www
editors, not the other way around. Also, you do not
need to list net when the port belongs to
either of irc, mail,
mbone, news,
security, or www.x11 is used as a secondary category only
when the primary category is a natural language. In particular,
you should not put x11 in the category line
for X applications.If your port truly does not belong anywhere else, put it in
misc.If you are not sure about the category, please put a comment to
that effect in your send-pr submission so we can
discuss it before import it. (If you are a committer, send a note
&a.ports; so we can discuss it first—too often new ports are
imported to a wrong category only to be moved right away.)Changes to this document and the ports systemIf you maintain a lot of ports, you should consider following the
&a.ports;. Important changes to the way ports work will be announced
there. You can always find more detailed information on the latest
changes by looking at the
+ url="http://www.FreeBSD.org/cgi/cvsweb.cgi/ports/Mk/bsd.port.mk"> the
bsd.port.mk CVS log.That is It, Folks!Boy, this sure was a long tutorial, wasn't it? Thanks for
following us to here, really.Well, now that you know how to do a port, let us go at it and
convert everything in the world into ports! That is the easiest way to
start contributing to the FreeBSD Project! :)
diff --git a/en_US.ISO_8859-1/books/porters-handbook/book.sgml b/en_US.ISO_8859-1/books/porters-handbook/book.sgml
index 6761767edb..98d9b59fc7 100644
--- a/en_US.ISO_8859-1/books/porters-handbook/book.sgml
+++ b/en_US.ISO_8859-1/books/porters-handbook/book.sgml
@@ -1,4660 +1,4660 @@
Installing Applications: The Ports collectionContributed by &a.jraynard;.The FreeBSD Ports collection allows you to compile and install a very
wide range of applications with a minimum of effort.For all the hype about open standards, getting a program to work on
different versions of Unix in the real world can be a tedious and tricky
business, as anyone who has tried it will know. You may be lucky enough
to find that the program you want will compile cleanly on your system,
install itself in all the right places and run flawlessly “out of
the box”, but this is unfortunately rather rare. With most
programs, you will find yourself doing a fair bit of head-scratching, and
there are quite a few programs that will result in premature greying, or
even chronic alopecia...Some software distributions have attacked this problem by providing
configuration scripts. Some of these are very clever, but they have an
unfortunate tendency to triumphantly announce that your system is
something you have never heard of and then ask you lots of questions that
sound like a final exam in system-level Unix programming (Does
your system's gethitlist function return a const pointer to a fromboz or
a pointer to a const fromboz? Do you have Foonix style unacceptable
exception handling? And if not, why not?).Fortunately, with the Ports collection, all the hard work involved has
already been done, and you can just type make install
and get a working program.Why Have a Ports Collection?The base FreeBSD system comes with a very wide range of tools and
system utilities, but a lot of popular programs are not in the base
system, for good reasons:-Programs that some people cannot live without and other people
cannot stand, such as a certain Lisp-based editor.Programs which are too specialised to put in the base system
(CAD, databases).Programs which fall into the “I must have a look at that
when I get a spare minute” category, rather than
system-critical ones (some languages, perhaps).Programs that are far too much fun to be supplied with a serious
operating system like FreeBSD ;-)However many programs you put in the base system, people will
always want more, and a line has to be drawn somewhere (otherwise
FreeBSD distributions would become absolutely enormous).Obviously it would be unreasonable to expect everyone to port their
favourite programs by hand (not to mention a tremendous amount of
duplicated work), so the FreeBSD Project came up with an ingenious way
of using standard tools that would automate the process.Incidentally, this is an excellent illustration of how “the
Unix way” works in practice by combining a set of simple but very
flexible tools into something very powerful.How Does the Ports Collection Work?Programs are typically distributed on the Internet as a tarball consisting of a Makefile and
the source code for the program and usually some instructions (which are
unfortunately not always as instructive as they could be), with perhaps
a configuration script.The standard scenario is that you FTP down the tarball, extract it
somewhere, glance through the instructions, make any changes that seem
necessary, run the configure script to set things up and use the
standard make program to compile and install the
program from the source.FreeBSD ports still use the tarball mechanism, but use a skeleton to hold the
"knowledge" of how to get the program working on FreeBSD,
rather than expecting the user to be able to work it out. They also
supply their own customised Makefile, so that almost every port
can be built in the same way.If you look at a port skeleton (either on your FreeBSD
system or the
FTP site) and expect to find all sorts of pointy-headed rocket
science lurking there, you may be disappointed by the one or two rather
unexciting-looking files and directories you find there. (We will
discuss in a minute how to go about Getting a port).“How on earth can this do anything?” I hear you cry.
“There is no source code there!”Fear not, gentle reader, all will become clear (hopefully). Let us
see what happens if we try and install a port. I have chosen
ElectricFence, a useful tool for developers,
as the skeleton is more straightforward than most.If you are trying this at home, you will need to be root.&prompt.root; cd /usr/ports/devel/ElectricFence
&prompt.root; make install
>> Checksum OK for ElectricFence-2.0.5.tar.gz.
===> Extracting for ElectricFence-2.0.5
===> Patching for ElectricFence-2.0.5
===> Applying FreeBSD patches for ElectricFence-2.0.5
===> Configuring for ElectricFence-2.0.5
===> Building for ElectricFence-2.0.5
[lots of compiler output...]
===> Installing for ElectricFence-2.0.5
===> Warning: your umask is "0002". If this is not desired, set it to
an appropriate value and install this port again by ``make reinstall''.
install -c -o root -g wheel -m 444 /usr/ports/devel/ElectricFence/work/ElectricFence-2.0.5/libefence.a /usr/local/lib
install -c -o root -g wheel -m 444 /usr/ports/devel/ElectricFence/work/ElectricFence-2.0.5/libefence.3 /usr/local/man/man3
===> Compressing manual pages for ElectricFence-2.0.5
===> Registering installation for ElectricFence-2.0.5To avoid confusing the issue, I have completely removed the build
output.If you tried this yourself, you may well have got something like
this at the start:-&prompt.root; make install
>> ElectricFence-2.0.5.tar.gz doesn't seem to exist on this system.
>> Attempting to fetch from ftp://ftp.doc.ic.ac.uk/Mirrors/sunsite.unc.edu/pub/Linux/devel/lang/c/.The make program has noticed that you did not
have a local copy of the source code and tried to FTP it down so it
could get the job done. I already had the source handy in my example,
so it did not need to fetch it.Let's go through this and see what the make
program was doing.Locate the source code tarball. If it is not available
locally, try to grab it from an FTP site.Run a checksum test on the
tarball to make sure it has not been tampered with, accidentally
truncated, downloaded in ASCII mode, struck by neutrinos while in
transit, etc.Extract the tarball into a temporary work directory.Apply any patches needed to
get the source to compile and run under FreeBSD.Run any configuration script required by the build process and
correctly answer any questions it asks.(Finally!) Compile the code.Install the program executable and other supporting files, man
pages, etc. under the /usr/local hierarchy
(unless this is an X11 program,
then it will be under /usr/X11R6),
where they will not get mixed up with system programs. This also
makes sure that all the ports you install will go in the same place,
instead of being flung all over your system.Register the installation in a database. This means that, if
you do not like the program, you can cleanly remove all traces of it from your
system.Scroll up to the make output and see if you can
match these steps to it. And if you were not impressed before, you
should be by now!Getting a FreeBSD PortThere are two ways of getting hold of the FreeBSD port for a
program. One requires a FreeBSD CDROM,
the other involves using an Internet
Connection.Compiling ports from CDROMAssuming that your FreeBSD CDROM is in the drive and mounted on
/cdrom (and the mount point
must be /cdrom), you should
then be able to build ports just as you normally do and the port
collection's built in search path should find the tarballs in
/cdrom/ports/distfiles/ (if they exist there)
rather than downloading them over the net.Another way of doing this, if you want to just use the port
skeletons on the CDROM, is to set these variables in
/etc/make.conf:
PORTSDIR= /cdrom/ports
DISTDIR= /tmp/distfiles
WRKDIRPREFIX= /tmpSubstitute /tmp for any place you have enough
free space. Then, just cd to the appropriate
subdirectory under /cdrom/ports and type
make install as usual.
WRKDIRPREFIX will cause the port to be build under
/tmp/cdrom/ports; for instance,
games/oneko will be built under
/tmp/cdrom/ports/games/oneko.There are some ports for which we cannot provide the original
source in the CDROM due to licensing limitations. In that case, you
will need to look at the section on Compiling ports using an Internet
connection.Compiling ports from the InternetIf you do not have a CDROM, or you want to make sure you get the
very latest version of the port you want, you will need to download
the skeleton for the port. Now
this might sound like rather a fiddly job full of pitfalls, but it is
actually very easy.First, if you are running a release version of FreeBSD, make sure
you get the appropriate “upgrade kit” for your release
from the ports web
page. These packages include files that have been updated
since the release that you may need to compile new ports.The key to the skeletons is that the FreeBSD FTP server can create
on-the-fly tarballs for you.
Here is how it works, with the gnats program in the databases
directory as an example (the bits in square brackets are comments. Do
not type them in if you are trying this yourself!):-&prompt.root; cd /usr/ports
&prompt.root; mkdir databases
&prompt.root; cd databases
&prompt.root; ftp ftp.FreeBSD.org
[log in as `ftp' and give your email address when asked for a
password. Remember to use binary (also known as image) mode!]
ftp>cd /pub/FreeBSD/ports/ports/databasesftp>get gnats.tar
[tars up the gnats skeleton for us]
ftp>quit
&prompt.root; tar xf gnats.tar
[extract the gnats skeleton]
&prompt.root; cd gnats
&prompt.root; make install
[build and install gnats]What happened here? We connected to the FTP server in the usual
way and went to its databases sub-directory.
When we gave it the command get gnats.tar, the FTP
server tarred up the gnats
directory for us.We then extracted the gnats skeleton and went into the gnats
directory to build the port. As we explained earlier, the make process noticed we
did not have a copy of the source locally, so it fetched one before
extracting, patching and building it.Let us try something more ambitious now. Instead of getting a
single port skeleton, we will get a whole sub-directory, for example all
the database skeletons in the ports collection. It looks almost the
same:-&prompt.root; cd /usr/ports
&prompt.root; ftp ftp.FreeBSD.org
[log in as `ftp' and give your email address when asked for a
password. Remember to use binary (also known as image) mode!]
ftp>cd /pub/FreeBSD/ports/portsftp>get databases.tar
[tars up the databases directory for us]
ftp>quit
&prompt.root; tar xf databases.tar
[extract all the database skeletons]
&prompt.root; cd databases
&prompt.root; make install
[build and install all the database ports]With half a dozen straightforward commands, we have now got a set
of database programs on our FreeBSD machine! All we did that was
different from getting a single port skeleton and building it was that
we got a whole directory at once, and compiled everything in it at
once. Pretty impressive, no?If you expect to be installing many ports, it is probably worth
downloading all the ports directories.SkeletonsA team of compulsive hackers who have forgotten to eat in a frantic
attempt to make a deadline? Something unpleasant lurking in the FreeBSD
attic? No, a skeleton here is a minimal framework that supplies
everything needed to make the ports magic work.MakefileThe most important component of a skeleton is the Makefile. This
contains various statements that specify how the port should be
compiled and installed. Here is the Makefile for
ElectricFence:-
# New ports collection makefile for: Electric Fence
# Version required: 2.0.5
# Date created: 13 November 1997
# Whom: jraynard
#
# $Id$
#
DISTNAME= ElectricFence-2.0.5
CATEGORIES= devel
MASTER_SITES= ${MASTER_SITE_SUNSITE}
MASTER_SITE_SUBDIR= devel/lang/c
-MAINTAINER= jraynard@freebsd.org
+MAINTAINER= jraynard@FreeBSD.org
MAN3= libefence.3
do-install:
${INSTALL_DATA} ${WRKSRC}/libefence.a ${PREFIX}/lib
${INSTALL_MAN} ${WRKSRC}/libefence.3 ${PREFIX}/man/man3
.include <bsd.port.mk>The lines beginning with a "#" sign are comments for the
benefit of human readers (as in most Unix script files).DISTNAME specifies the name of the tarball, but without the
extension.CATEGORIES states what kind of program this is.
In this case, a utility for developers. See the categories section of this
handbook for a complete list.MASTER_SITES is the URL(s) of the master FTP
site, which is used to retrieve the tarball if it is not available on the
local system. This is a site which is regarded as reputable, and is
normally the one from which the program is officially distributed (in
so far as any software is "officially" distributed on the
Internet).MAINTAINER is the email address of the person
who is responsible for updating the skeleton if, for example a new
version of the program comes out.Skipping over the next few lines for a minute, the line
.include <bsd.port.mk> says that the other
statements and commands needed for this port are in a standard file
called bsd.port.mk. As these are the same for
all ports, there is no point in duplicating them all over the place,
so they are kept in a single standard file.This is probably not the place to go into a detailed examination
of how Makefiles work; suffice it to say that the line starting with
MAN3 ensures that the ElectricFence man page is
compressed after installation, to help conserve your precious disk
space. The original port did not provide an
install target, so the three lines from
do-install ensure that the files produced by
this port are placed in the correct destination.The files directoryThe file containing the checksum for the port is called
md5, after the MD5 algorithm used for ports
checksums. It lives in a directory with the slightly confusing name
of files.This directory can also contain other miscellaneous files that are
required by the port and do not belong anywhere else.The patches directoryThis directory contains the patches needed to make everything work
properly under FreeBSD.The pkg directoryThis program contains three quite useful files:-COMMENT — a one-line description of
the program.DESCR — a more detailed
description.PLIST — a list of all the files
that will be created when the program is installed.What to do when a port does not work.Oh. You can do one of four (4) things :Fix it yourself. Technical details on how ports work can be
found in Porting applications.Gripe. This is done by e-mail only! Send
such e-mail to the maintainer of the port, first. Type
make maintainer or read the
Makefile to find the maintainer's email
address. Remember to include the name/version of
the port (copy the $Id: line from the
Makefile), and the output leading up-to the
error, inclusive. If you do not get a satisfactory response,
you can try filing a bug report with send-pr.
Forget it. This is the easiest for most — very few of the
programs in ports can be classified as essential!Grab the pre-compiled package from a ftp server. The
“master” package collection is on FreeBSD's FTP server
in the packages
directory, though check your local mirror first, please!
These are more likely to work (on the whole) than trying to compile
from source and a lot faster besides! Use the &man.pkg.add.1;
program to install a package file on your
system.Some Questions and AnswersQ. I thought this was going to be a discussion about
modems??!A. Ah. You must be thinking of the serial ports on the back of
your computer. We are using “port” here to mean the
result of “porting” a program from one version of Unix
to another. (It is an unfortunate bad habit of computer people to
use the same word to refer to several completely different
things).Q. I thought you were supposed to use packages to install extra
programs?A. Yes, that is usually the quickest and easiest way of doing
it.Q. So why bother with ports then?A. Several reasons:-The licensing conditions on some software distributions
require that they be distributed as source code, not
binaries.Some people do not trust binary distributions. At least
with source code you can (in theory) read through it and look
for potential problems yourself.If you have some local patches, you will need the source to
add them yourself.You might have opinions on how a program should be compiled
that differ from the person who did the package — some
people have strong views on what optimisation setting should be
used, whether to build debug versions and then strip them or
not, etc. etc.Some people like having code around, so they can read it if
they get bored, hack around with it, borrow from it (licence
terms permitting, of course!) and so on.If you ain't got the source, it ain't software! ;-) Q. What is a patch?A. A patch is a small (usually) file that specifies how to go
from one version of a file to another. It contains text that says,
in effect, things like “delete line 23”, “add
these two lines after line 468” or “change line 197 to
this”. Also known as a “diff”, since it is
generated by a program of that name. Q. What is all this about
tarballs?A. It is a file ending in .tar or
.tar.gz (with variations like
.tar.Z, or even .tgz if
you are trying to squeeze the names into a DOS filesystem).Basically, it is a directory tree that has been archived into a
single file (.tar) and optionally compressed
(.gz). This technique was originally used for
Tape ARchives (hence the
name tar), but it is a widely used way of
distributing program source code around the Internet.You can see what files are in them, or even extract them
yourself, by using the standard Unix tar program, which comes with
the base FreeBSD system, like this:-&prompt.user; tar tvzf foobar.tar.gz
&prompt.user; tar xzvf foobar.tar.gz
&prompt.user; tar tvf foobar.tar
&prompt.user; tar xvf foobar.tar Q. And a checksum?A. It is a number generated by adding up all the data in the
file you want to check. If any of the characters change, the
checksum will no longer be equal to the total, so a simple
comparison will allow you to spot the difference. (In practice, it
is done in a more complicated way to spot problems like
position-swapping, which will not show up with a simplistic
addition).Q. I did what you said for compiling
ports from a CDROM and it worked great until I tried to
install the kermit port:-&prompt.root; make install
>> cku190.tar.gz doesn't seem to exist on this system.
>> Attempting to fetch from ftp://kermit.columbia.edu/kermit/archives/.Why can it not be found? Have I got a dud CDROM?A. The licensing terms for kermit do not allow us to put the
tarball for it on the CDROM, so you will have to fetch it by hand
— sorry! The reason why you got all those error messages was
because you were not connected to the Internet at the time. Once
you have downloaded it from any of the sites above, you can re-start
the process (try and choose the nearest site to you, though, to save
your time and the Internet's bandwidth).Q. I did that, but when I tried to put it into
/usr/ports/distfiles I got some error about not
having permission.A. The ports mechanism looks for the tarball in
/usr/ports/distfiles, but you will not be able
to copy anything there because it is sym-linked to the CDROM, which
is read-only. You can tell it to look somewhere else by
doing&prompt.root; make DISTDIR=/where/you/put/it installQ. Does the ports scheme only work if you have everything in
/usr/ports? My system administrator says I must
put everything under
/u/people/guests/wurzburger, but it does not
seem to work.A. You can use the PORTSDIR and
PREFIX variables to tell the ports mechanism to
use different directories. For instance,&prompt.root; make PORTSDIR=/u/people/guests/wurzburger/ports installwill compile the port in
/u/people/guests/wurzburger/ports and install
everything under /usr/local.&prompt.root; make PREFIX=/u/people/guests/wurzburger/local installwill compile it in /usr/ports and install
it in /u/people/guests/wurzburger/local.And of course&prompt.root; make PORTSDIR=.../ports PREFIX=.../local installwill combine the two (it is too long to fit on the page if I
write it in full, but I am sure you get the idea).If you do not fancy typing all that in every time you install a
port (and to be honest, who would?), it is a good idea to put these
variables into your environment.Q. I do not have a FreeBSD CDROM, but I would like to have all
the tarballs handy on my system so I do not have to wait for a
download every time I install a port. Is there an easy way to get
them all at once?A. To get every single tarball for the ports collection,
do&prompt.root; cd /usr/ports
&prompt.root; make fetchFor all the tarballs for a single ports directory, do&prompt.root; cd /usr/ports/directory
&prompt.root; make fetchand for just one port — well, I think you have guessed
already.Q. I know it is probably faster to fetch the tarballs from one
of the FreeBSD mirror sites close by. Is there any way to tell the
port to fetch them from servers other than ones listed in the
MASTER_SITES?A. Yes. If you know, for example, ftp.FreeBSD.ORG is much closer than sites
+ role="fqdn">ftp.FreeBSD.org is much closer than sites
listed in MASTER_SITES, do as following
example.&prompt.root; cd /usr/ports/directory
-&prompt.root; make MASTER_SITE_OVERRIDE=ftp://ftp.FreeBSD.ORG/pub/FreeBSD/ports/distfiles/ fetch
+&prompt.root; make MASTER_SITE_OVERRIDE=ftp://ftp.FreeBSD.org/pub/FreeBSD/ports/distfiles/ fetchQ. I want to know what files make is going to need before it
tries to pull them down.A. make fetch-list will display a list of
the files needed for a port.Q. Is there any way to stop the port from compiling? I want to
do some hacking on the source before I install it, but it is a bit
tiresome having to watch it and hit control-C every time.A. Doing make extract will stop it after it
has fetched and extracted the source code.Q. I am trying to make my own port and I want to be able to
stop it compiling until I have had a chance to see if my patches
worked properly. Is there something like make
extract, but for patches?A. Yep, make patch is what you want. You
will probably find the PATCH_DEBUG option useful
as well. And by the way, thank you for your efforts!Q. I have heard that some compiler options can cause bugs. Is
this true? How can I make sure that I compile ports with the right
settings?A. Yes, with version 2.6.3 of gcc (the
version shipped with FreeBSD 2.1.0 and 2.1.5), the
option could result in buggy code unless you
used the option as well.
(Most of the ports do not use ). You
should be able to specify the compiler options
used by something like&prompt.root; make CFLAGS='-O2 -fno-strength-reduce' installor by editing /etc/make.conf, but
unfortunately not all ports respect this. The surest way is to do
make configure, then go into the source directory
and inspect the Makefiles by hand, but this can get tedious if the
source has lots of sub-directories, each with their own
Makefiles.Q. There are so many ports it is hard to find the one I want.
Is there a list anywhere of what ports are available?A. Look in the INDEX file in
/usr/ports. If you would like to search the
ports collection for a keyword, you can do that too. For example,
you can find ports relevant to the LISP programming language
using:&prompt.user; cd /usr/ports
&prompt.user; make search key=lispQ. I went to install the foo port but the
system suddenly stopped compiling it and starting compiling the
bar port. What is going on?A. The foo port needs something that is
supplied with bar — for instance, if
foo uses graphics, bar might
have a library with useful graphics processing routines. Or
bar might be a tool that is needed to compile the
foo port. Q. I installed the
grizzle program from the ports and frankly it is
a complete waste of disk space. I want to delete it but I do not
know where it put all the files. Any clues?A. No problem, just do&prompt.root; pkg_delete grizzle-6.5Alternatively, you can do&prompt.root; cd /usr/ports/somewhere/grizzle
&prompt.root; make deinstall
Q. Hang on a minute, you have to know the version number to use
that command. You do not seriously expect me to remember that, do
you??A. Not at all, you can find it out by doing&prompt.root; pkg_info -a | grep grizzle
Information for grizzle-6.5:
grizzle-6.5 - the combined piano tutorial, LOGO interpreter and shoot 'em up arcade game.Q. Talking of disk space, the ports directory seems to be
taking up an awful lot of room. Is it safe to go in there and
delete things?A. Yes, if you have installed the program and are fairly
certain you will not need the source again, there is no point in
keeping it hanging around. The best way to do this is&prompt.root; cd /usr/ports
&prompt.root; make cleanwhich will go through all the ports subdirectories and delete
everything except the skeletons for each port.Q. I tried that and it still left all those tarballs or
whatever you called them in the distfiles
directory. Can I delete those as well?A. Yes, if you are sure you have finished with them, those can
go as well.Q. I like having lots and lots of programs to play with. Is
there any way of installing all the ports in one go?A. Just do&prompt.root; cd /usr/ports
&prompt.root; make installQ. OK, I tried that, but I thought it would take a very long
time so I went to bed and left it to get on with it. When I looked
at the computer this morning, it had only done three and a half
ports. Did something go wrong?A. No, the problem is that some of the ports need to ask you
questions that we cannot answer for you (eg “Do you want to
print on A4 or US letter sized paper?”) and they need to have
someone on hand to answer them.Q. I really do not want to spend all day staring at the
monitor. Any better ideas?A. OK, do this before you go to bed/work/the local
park:-&prompt.root cd /usr/ports
&prompt.root; make -DBATCH installThis will install every port that does not
require user input. Then, when you come back, do&prompt.root; cd /usr/ports
&prompt.root; make -DIS_INTERACTIVE installto finish the job.Q. At work, we are using frobble, which is
in your ports collection, but we have altered it quite a bit to get
it to do what we need. Is there any way of making our own packages,
so we can distribute it more easily around our sites?A. No problem, assuming you know how to make patches for your
changes:-&prompt.root; cd /usr/ports/somewhere/frobble
&prompt.root; make extract
&prompt.root; cd work/frobble-2.8
[Apply your patches]
&prompt.root; cd ../..
&prompt.root; make packageQ. This ports stuff is really clever. I am desperate to find
out how you did it. What is the secret?A. Nothing secret about it at all, just look at the
bsd.ports.mk and
bsd.ports.subdir.mk files in your makefiles
directory.Readers with an aversion to intricate shell-scripts are
advised not to follow this link...)Making a port yourselfContributed by &a.jkh;, &a.gpalmer;, &a.asami;, &a.obrien;,
and &a.hoek;. 28 August 1996.So, now you are interested in making your own port or upgrading
an existing one? Great!What follows are some guidelines for creating a new port for
FreeBSD. If you want to upgrade an existing port, you should read this
and then read .When this document is not sufficiently detailed, you should refer to
/usr/ports/Mk/bsd.port.mk, which all port Makefiles
include. Even if you do not hack Makefiles daily, it is well
commented, and you will still gain much knowledge from it.
Additionally, you may send specific questions to &a.ports;.Only a fraction of the overridable variables
(VAR) are mentioned in
this document. Most (if not all) are documented at the start of
bsd.port.mk. This file users a non-standard tab
setting. Emacs and
Vim should recognise the setting on loading
the file. Both vi and ex can be
set to use the correct value by typing :set tabstop=4
once the file has been loaded.Quick PortingThis section tells you how to do a quick port. In many cases, it
is not enough, but we will see.First, get the original tarball and put it into
DISTDIR, which defaults to
/usr/ports/distfiles.The following assumes that the software compiled out-of-the-box,
i.e., there was absolutely no change required for the port to work
on your FreeBSD box. If you needed to change something, you will
have to refer to the next section too.Writing the MakefileThe minimal Makefile would look something
like this:
# New ports collection makefile for: oneko
# Version required: 1.1b
# Date created: 5 December 1994
# Whom: asami
#
# $Id$
#
DISTNAME= oneko-1.1b
CATEGORIES= games
MASTER_SITES= ftp://ftp.cs.columbia.edu/archives/X11R5/contrib/
-MAINTAINER= asami@FreeBSD.ORG
+MAINTAINER= asami@FreeBSD.org
MAN1= oneko.1
MANCOMPRESSED= yes
USE_IMAKE= yes
.include <bsd.port.mk>See if you can figure it out. Do not worry about the contents
of the $Id$ line, it will be filled in
automatically by CVS when the port is imported to our main ports
tree. You can find a more detailed example in the sample Makefile section.Writing the description filesThere are three description files that are required for any
port, whether they actually package or not. They are
COMMENT, DESCR, and
PLIST, and reside in the
pkg subdirectory.COMMENTThis is the one-line description of the port.
Please do not include the package name (or
version number of the software) in the comment. The comment
should begin with a capital, and end without a period. Here
is an example:
A cat chasing a mouse all over the screenDESCRThis is a longer description of the port. One to a few
paragraphs concisely explaining what the port does is
sufficient.This is not a manual or an in-depth
description on how to use or compile the port! Please
be careful if you are copying from the
README or manpage; too often
they are not a concise description of the port or are in an
awkward format (e.g., manpages have justified spacing). If the
ported software has an official WWW homepage, you should list it
here. Prefix one of the websites with
WWW: so that automated tools will work
correctly.It is recommended that you sign your name at the end of this
file, as in:
This is a port of oneko, in which a cat chases a poor mouse all over
the screen.
:
(etc.)
WWW: http://www.oneko.org/
- Satoshi
asami@cs.berkeley.eduPLISTThis file lists all the files installed by the port. It is
also called the “packing list” because the package is
generated by packing the files listed here. The pathnames are
relative to the installation prefix (usually
/usr/local or
/usr/X11R6). If you are using the
MANn variables (as
you should be), do not list any manpages here.Here is a small example:
bin/oneko
lib/X11/app-defaults/Oneko
lib/X11/oneko/cat1.xpm
lib/X11/oneko/cat2.xpm
lib/X11/oneko/mouse.xpm
@dirrm lib/X11/onekoRefer to the &man.pkg.create.1; man page for details on the
packing list.You should list all the files, but not the name directories,
in the list. Also, if the port creates directories for itself
during installtion, make sure to add @dirrm
lines as necessary to remove them when the port is
deleted.It is recommended that you keep all the filenames in this
file sorted alphabetically. It will make verifying the changes
when you upgrade the port much easier.Creating a packing list manually can be a very tedious
task. If the port installs a large numbers of files, creating the packing list
automatically might save time.Creating the checksum fileJust type make makesum. The ports make rules
will automatically generate the file
files/md5.Testing the portYou should make sure that the port rules do exactly what you
want it to do, including packaging up the port. These are the
important points you need to verify.PLIST does not contain anything not
installed by your portPLIST contains everything that is
installed by your portYour port can be installed multiple times using the
reinstall targetYour port cleans up
after itself upon deinstallRecommended test orderingmake installmake packagemake deinstallpkg_add package-namemake deinstallmake reinstallmake packageMake sure that there are not any warnings issued in any of the
package and
deinstall stages, After step 3, check to
see if all the new directories are correctly deleted. Also, try
using the software after step 4, to ensure that is works correctly
when installed from a package.Checking your port with portlintPlease use portlint to see if your port
conforms to our guidelines. The portlint program
is part of the ports collection. In particular, your may want to
check if the Makefile is in
the right shape and the package is named
appropriately.Submitting the portFirst, make sure you have read the Do's and Dont's section.Now that you are happy with your port, the only thing remaining
is to put it in the main FreeBSD ports tree and make everybody else
happy about it too. We do not need your work
directory or the pkgname.tgz package, so delete
them now. Next, simply include the output of shar `find
port_dir` in a bug report and send it with the
&man.send-pr.1; program (see Bug
Reports and General Commentary for more information about
&man.send-pr.1;. If the uncompressed port is larger than 20KB,
you should compress it into a tarfile and use &man.uuencode.1;
before including it in the bug report (uuencoded tarfiles are
acceptable even if the bug report is smaller than 20KB but are not
preferred). Be sure to classify the bug report as category
ports and class
change-request. (Do not mark the report
confidential!)One more time, do not include the original source
distfile, the work directory, or the package
you built with make package.In the past, we asked you to upload new port submissions in
our ftp site (ftp.FreeBSD.org). This
is no longer recommended as read access is turned off on that
incoming/ directory of that site due to the
large amount of pirated software showing up there.We will look at your port, get back to you if necessary, and put
it in the tree. Your name will also appear in the list of
“Additional FreeBSD contributors” on the FreeBSD
Handbook and other files. Isn't that great?!? :)Slow PortingOk, so it was not that simple, and the port required some
modifications to get it to work. In this section, we will explain,
step by step, how to modify it to get it to work with the ports
paradigm.How things workFirst, this is the sequence of events which occurs when the user
first types make in your port's directory, and
you may find that having bsd.port.mk in another
window while you read this really helps to understand it.But do not worry if you do not really understand what
bsd.port.mk is doing, not many people do...
:>The fetch target is run. The
fetch target is responsible for making
sure that the tarball exists locally in
DISTDIR. If fetch
cannot find the required files in DISTDIR it
will look up the URL MASTER_SITES, which is
set in the Makefile, as well as our main ftp site at ftp://ftp.FreeBSD.org/pub/FreeBSD/ports/distfiles/,
where we put sanctioned distfiles as backup. It will then
attempt to fetch the named distribution file with
FETCH, assuming that the requesting site has
direct access to the Internet. If that succeeds, it will save
the file in DISTDIR for future use and
proceed.The extract target is run. It
looks for your port's distribution file (typically a gzip'd
tarball) in DISTDIR and unpacks it into a
temporary subdirectory specified by WRKDIR
(defaults to work).The patch target is run. First,
any patches defined in PATCHFILES are
applied. Second, if any patches are found in
PATCHDIR (defaults to the
patches subdirectory), they are applied at
this time in alphabetical order.The configure target is run. This
can do any one of many different things.If it exists, scripts/configure is
run.If HAS_CONFIGURE or
GNU_CONFIGURE is set,
WRKSRC/configure is
run.If USE_IMAKE is set,
XMKMF (default: xmkmf
-a) is run.The build target is run. This is
responsible for descending into the port's private working
directory (WRKSRC) and building it. If
USE_GMAKE is set, GNU make
will be used, otherwise the system make will
be used.The above are the default actions. In addition, you can define
targets
pre-something or
post-something,
or put scripts with those names, in the scripts
subdirectory, and they will be run before or after the default
actions are done.For example, if you have a post-extract
target defined in your Makefile, and a file
pre-build in the scripts
subdirectory, the post-extract target will
be called after the regular extraction actions, and the
pre-build script will be executed before the
default build rules are done. It is recommended that you use
Makefile targets if the actions are simple
enough, because it will be easier for someone to figure out what
kind of non-default action the port requires.The default actions are done by the
bsd.port.mk targets
do-something.
For example, the commands to extract a port are in the target
do-extract. If you are not happy with the
default target, you can fix it by redefining the
do-something
target in your Makefile.The “main” targets (e.g.,
extract,
configure, etc.) do nothing more than
make sure all the stages up to that one are completed and call
the real targets or scripts, and they are not intended to be
changed. If you want to fix the extraction, fix
do-extract, but never ever touch
extract!Now that you understand what goes on when the user types
make, let us go through the recommended steps to
create the perfect port.Getting the original sourcesGet the original sources (normally) as a compressed tarball
(foo.tar.gz or
foo.tar.Z) and copy
it into DISTDIR. Always use
mainstream sources when and where you
can.If you cannot find a ftp/http site that is well-connected to the
net, or can only find sites that have irritatingly non-standard
formats, you might want to put a copy on a reliable ftp or http
server that you control (e.g., your home page). Make sure you set
MASTER_SITES to reflect your choice.If you cannot find somewhere convenient and reliable to put the
distfile (if you are a FreeBSD committer, you can just put it in
your public_html/ directory on
freefall), we can “house” it ourselves
by putting it on
ftp://ftp.FreeBSD.org/pub/FreeBSD/ports/distfiles/LOCAL_PORTS/
as the last resort. Please refer to this location as
MASTER_SITE_LOCAL. Send mail to the &a.ports;if
you are not sure what to do.If your port's distfile changes all the time for no good reason,
consider putting the distfile in your home page and listing it as
the first MASTER_SITES. This will prevent users
from getting checksum mismatch errors, and
also reduce the workload of maintainers of our ftp site. Also, if
there isonly one master site for the port, it is recommended that
you house a backup at your site and list it as the second
MASTER_SITES.If your port requires some additional `patches' that are
available on the Internet, fetch them too and put them in
DISTDIR. Do not worry if they come from a site
other than where you got the main source tarball, we have a way to
handle these situations (see the description of PATCHFILES below).Modifying the portUnpack a copy of the tarball in a private directory and make
whatever changes are necessary to get the port to compile properly
under the current version of FreeBSD. Keep careful
track of everything you do, as you will be automating
the process shortly. Everything, including the deletion, addition
or modification of files should be doable using an automated script
or patch file when your port is finished.If your port requires significant user interaction/customization
to compile or install, you should take a look at one of Larry Wall's
classic Configure scripts and perhaps do
something similar yourself. The goal of the new ports collection is
to make each port as “plug-and-play” as possible for the
end-user while using a minimum of disk space.Unless explicitly stated, patch files, scripts, and other
files you have created and contributed to the FreeBSD ports
collection are assumed to be covered by the standard BSD copyright
conditions.PatchingIn the preparation of the port, files that have been added or
changed can be picked up with a recursive diff for later feeding to
patch. Each set of patches you wish to apply should be collected
into a file named
patch-xx where
xx denotes the sequence in which the
patches will be applied — these are done in
alphabetical order, thus aa
first, ab second and so on. These files should
be stored in PATCHDIR, from where they will be
automatically applied. All patches should be relative to
WRKSRC (generally the directory your port's
tarball unpacks itself into, that being where the build is done).
To make fixes and upgrades easier, you should avoid having more than
one patch fix the same file (e.g., patch-aa and
patch-ab both changing
WRKSRC/foobar.c).ConfiguringInclude any additional customization commands to your
configure script and save it in the
scripts subdirectory. As mentioned above, you
can also do this as Makefile targets and/or
scripts with the name pre-configure or
post-configure.Handling user inputIf your port requires user input to build, configure or install,
then set IS_INTERACTIVE in your Makefile. This
will allow “overnight builds” to skip your port if the
user sets the variable BATCH in his environment (and
if the user sets the variable INTERACTIVE, then
only those ports requiring interaction are
built).It is also recommended that if there are reasonable default
answers to the questions, you check the
PACKAGE_BUILDING variable and turn off the
interactive script when it is set. This will allow us to build the
packages for CD-ROMs and ftp.Configuring the MakefileConfiguring the Makefile is pretty simple, and again we suggest
that you look at existing examples before starting. Also, there is a
sample Makefile in this
handbook, so take a look and please follow the ordering of variables
and sections in that template to make your port easier for others to
read.Now, consider the following problems in sequence as you design
your new Makefile:The original sourceDoes it live in DISTDIR as a standard gzip'd
tarball? If so, you can go on to the next step. If not, you should
look at overriding any of the EXTRACT_CMD,
EXTRACT_BEFORE_ARGS,
EXTRACT_AFTER_ARGS,
EXTRACT_SUFX, or DISTFILES
variables, depending on how alien a format your port's distribution
file is. (The most common case is
EXTRACT_SUFX=.tar.Z, when the tarball is
condensed by regular compress, not gzip.)In the worst case, you can simply create your own
do-extract target to override the default,
though this should be rarely, if ever, necessary.DISTNAMEYou should set DISTNAME to be the base name
of your port. The default rules expect the distribution file list
(DISTFILES) to be named
DISTNAMEEXTRACT_SUFX which, if
it is a normal tarball, is going to be something like
foozolix-1.0.tar.gz for a setting of
DISTNAME=foozolix-1.0.The default rules also expect the tarball(s) to extract into a
subdirectory called
work/DISTNAME, e.g.
work/foozolix-1.0/.All this behavior can be overridden, of course; it simply
represents the most common time-saving defaults. For a port
requiring multiple distribution files, simply set
DISTFILES explicitly. If only a subset of
DISTFILES are actual extractable archives, then
set them up in EXTRACT_ONLY, which will override
the DISTFILES list when it comes to extraction,
and the rest will be just left in DISTDIR for
later use.PKGNAMEIf DISTNAME does not conform to our guidelines for a good package
name, you should set the PKGNAME
variable to something better. See the abovementioned guidelines for
more details.CATEGORIESWhen a package is created, it is put under
/usr/ports/packages/All and links are made from
one or more subdirectories of
/usr/ports/packages. The names of these
subdirectories are specified by the variable
CATEGORIES. It is intended to make life easier
for the user when he is wading through the pile of packages on the
ftp site or the CD-ROM. Please take a look at the existing categories and pick the ones
that are suitable for your port.This list also determines where in the ports tree the port is
imported. If you put more than one category here, it is assumed
that the port files will be put in the subdirectory with the name in
the first category. See the categories section for more
discussion about how to pick the right categories.If you port truly belongs to something that is different from
all the existing ones, you can even create a new category name. In
that case, please send mail to the &a.ports; to propose a new
category.There is no error checking for category names. make
package will happily create a new directory if you
mistype the category name, so be careful!MASTER_SITESRecord the directory part of the ftp/http-URL pointing at the
original tarball in MASTER_SITES. Do not forget
the trailing slash (/)!The make macros will try to use this
specification for grabbing the distribution file with
FETCH if they cannot find it already on the
system.It is recommended that you put multiple sites on this list,
preferably from different continents. This will safeguard against
wide-area network problems, and we are even planning to add support
for automatically determining the closest master site and fetching
from there!If the original tarball is part of one of the following popular
archives: X-contrib, GNU, Perl CPAN, TeX CTAN, or Linux Sunsite, you
refer to those sites in an easy compact form using
MASTER_SITE_XCONTRIB,
MASTER_SITE_GNU,
MASTER_SITE_PERL_CPAN,
MASTER_SITE_TEX_CTAN, and
MASTER_SITE_SUNSITE. Simply set
MASTER_SITE_SUBDIR to the path with in the
archive. Here is an example:
MASTER_SITES= ${MASTER_SITE_XCONTRIB}
MASTER_SITE_SUBDIR= applicationsThe user can also set the MASTER_SITE_*
variables in /etc/make.conf to override our
choices, and use their favorite mirrors of these popular archives
instead.PATCHFILESIf your port requires some additional patches that are available
by ftp or http, set PATCHFILES to the names of
the files and PATCH_SITES to the URL of the
directory that contains them (the format is the same as
MASTER_SITES).If the patch is not relative to the top of the source tree
(i.e., WKRSRC) because it contains some extra
pathnames, set PATCH_DIST_STRIP accordingly. For
instance, if all the pathnames in the patch have an extra
foozolix-1.0/ in front of the filenames, then set
PATCH_DIST_STRIP=-p1.Do not worry if the patches are compressed, they will be
decompressed automatically if the filenames end with
.gz or .Z.If the patch is distributed with some other files, such as
documentation, in a gzip'd tarball, you cannot just use
PATCHFILES. If that is the case, add the name
and the location of the patch tarball to
DISTFILES and MASTER_SITES.
Then, from the pre-patch target, apply the
patch either by running the patch command from there, or copying the
patch file into the PATCHDIR directory and
calling it
patch-xx.Note the tarball will have been extracted alongside the
regular source by then, so there is no need to explicitly extract
it if it is a regular gzip'd or compress'd tarball. If you do the
latter, take extra care not to overwrite something that already
exists in that directory. Also do not forget to add a command to
remove the copied patch in the pre-clean
target.MAINTAINERSet your mail-address here. Please. :)For detailed description of the responsibility of maintainers,
refer to MAINTAINER on
Makefiles section.DependenciesMany ports depend on other ports. There are five variables that
you can use to ensure that all the required bits will be on the
user's machine. There are also some pre-supported dependency
variables for common cases, plus a few more to control the behaviour
of dependencies.LIB_DEPENDSThis variable specifies the shared libraries this port depends
on. It is a list of
lib:dir:target
tuples where lib is the name of the
shared library, and dir is the
directory in which to find it in case it is not available, and
target is the target to call in that
directory. For example, LIB_DEPENDS=
jpeg.9:${PORTSDIR}/graphics/jpeg:install
will check for a shared jpeg library with major version 9, and
descend into the graphics/jpeg subdirectory
of your ports tree to build and install it if it is not found.
The target part can be omitted if it is
equal to DEPENDS_TARGET (which defaults to
install).The lib part is an argument given
to ldconfig -r | grep -wF. There shall be no
reqular expressions in this variable.The dependency is checked twice, once from within the
extract target and then from within the
install target. Also, the name of the
dependency is put in to the package so that
pkg_add will automatically install it if it is
not on the user's system.RUN_DEPENDSThis variable specifies executables or files this port depends
on during run-time. It is a list of
path:dir:target
tuples where path is the name of the
executable or file, and dir is the
directory in which to find it in case it is not available, and
target is the target to call in that
directory. If path starts with a slash
(/), it is treated as a file and its existence
is tested with test -e; otherwise, it is
assumed to be an executable, and which -s is
used to determine if the program exists in the user's search
path.For example,
RUN_DEPENDS= ${PREFIX}/etc/innd:${PORTSDIR}/news/inn \
wish8.0:${PORTSDIR}/x11-toolkits/tk80will check if the file or directory
/usr/local/etc/innd exists, and build and
install it from the news/inn subdirectory of
the ports tree if it is not found. It will also see if an
executable called wish8.0 is in your search
path, and descend into the x11-toolkits/tk80
subdirectory of your ports tree to build and install it if it is
not found.In this case, innd is actually an
executable; if an executable is in a place that is not expected
to be in a normal user's search path, you should use the full
pathname.The dependency is checked from within the
install target. Also, the name of the
dependency is put in to the package so that
pkg_add will automatically install it if it is
not on the user's system. The target
part can be omitted if it is the same
DEPENDS_TARGET.BUILD_DEPENDSThis variable specifies executables or files this port
requires to build. Like RUN_DEPENDS, it is a
list of
path:dir:target
tuples. For example, BUILD_DEPENDS=
unzip:${PORTSDIR}/archivers/unzip will check
for an executable called unzip, and descend
into the archivers/unzip subdirectory of your
ports tree to build and install it if it is not found.“build” here means everything from extracting to
compilation. The dependency is checked from within the
extract target. The
target part can be omitted if it is
the same as DEPENDS_TARGETFETCH_DEPENDSThis variable specifies executables or files this port
requires to fetch. Like the previous two, it is a list of
path:dir:target
tuples. For example, FETCH_DEPENDS=
ncftp2:${PORTSDIR}/net/ncftp2 will check for an
executable called ncftp2, and descend into the
net/ncftp2 subdirectory of your ports tree to
build and install it if it is not found.The dependency is checked from within the
fetch target. The
target part can be omitted if it is the
same as DEPENDS_TARGET.DEPENDSIf there is a dependency that does not fall into either of the
above four categories, or your port requires to have the source of
the other port extracted in addition to having them installed,
then use this variable. This is a list of
dir:target,
as there is nothing to check, unlike the previous four. The
target part can be omitted if it is the
same as DEPENDS_TARGET.Common dependency variablesDefine USE_XLIB=yes if your port requires
the X Window System to be installed (it is implied by
USE_IMAKE). Define
USE_GMAKE=yes if your port requires GNU
make instead of BSD make.
Define USE_AUTOCONF=yes if your port requires
GNU autoconf to be run. Define USE_QT=yes if
your port uses the latest qt toolkit. Use
USE_PERL5=yes if your port requires version 5
of the perl language. (The last is especially important since
some versions of FreeBSD has perl5 as part of the base system
while others do not.)Notes on dependenciesAs mentioned above, the default target to call when a
dependency is required is DEPENDS_TARGET.
It defaults to install. This is a user
variable; is is never defined in a port's
Makefile. If your port needs a special way
to handle a dependency, use the :target part of
the *_DEPENDS variables instead of redefining
DEPENDS_TARGET.When you type make clean, its dependencies
are automatically cleaned too. If you do not wish this to happen,
define the variable NOCLEANDEPENDS in your
environment.To depend on another port unconditionally, it is customary to
use the string nonexistent as the first field
of BUILD_DEPENDS or
RUN_DEPENDS. Use this only when you need to
the to get to the source of the other port. You can often save
compilation time by specifying the target too. For
instance
BUILD_DEPENDS= /nonexistent:${PORTSDIR}/graphics/jpeg:extract
will always descend to the JPEG port and extract it.Do not use DEPENDS unless there is no other
way the behaviour you want can be accomplished. It will cause the
other port to be always build (and installed, by default), and the
dependency will go into the packages as well. If this is really
what you need, I recommend you write it as
BUILD_DEPENDS and
RUN_DEPENDS instead—at least the
intention will be clear.Building mechanismsIf your package uses GNU make, set
USE_GMAKE=yes. If your package uses
configure, set
HAS_CONFIGURE=yes. If your package uses GNU
configure, set
GNU_CONFIGURE=yes (this implies
HAS_CONFIGURE). If you want to give some extra
arguments to configure (the default argument list
--prefix=${PREFIX} for GNU
configure and empty for non-GNU
configure), set those extra arguments in
CONFIGURE_ARGS. If your package uses GNU
autoconf, set
USE_AUTOCONF=yes. This implies
GNU_CONFIGURE, and will cause
autoconf to be run before
configure.If your package is an X application that creates
Makefiles from Imakefiles
using imake, then set
USE_IMAKE=yes. This will cause the configure
stage to automatically do an xmkmf -a. If the
flag is a problem for your port, set
XMKMF=xmkmf. If the port uses
imake but does not understand the
install.man target,
NO_INSTALL_MANPAGES=yes should be set. In
addition, the author of the original port should be shot. :>If your port's source Makefile has
something else than all as the main build
target, set ALL_TARGET accordingly. Same goes
for install and
INSTALL_TARGET.Special considerationsThere are some more things you have to take into account when you
create a port. This section explains the most common of those.ldconfigIf your port installs a shared library, add a
post-install target to your
Makefile that runs ${LDCONFIG}
-m on the directory where the new library is installed
(usually PREFIX/lib) to
register it into the shared library cache.Also, add a matching @exec /sbin/ldconfig -m
and @unexec /sbin/ldconfig -R pair to your
pkg/PLIST file so that a user who installed the
package can start using the shared library immediately and
deinstallation will not cause the system to still believe the
library is there. These lines should immediately follow the line
for the shared library itself, as in:
lib/libtvl80.so.1
@exec /sbin/ldconfig -m %D/lib
@unexec /sbin/ldconfig -RNever, ever, ever add a line that says
ldconfig without any arguments to your
Makefile or pkg/PLIST.
This will reset the shared library cache to the contents of
/usr/lib only, and will royally screw up the
user's machine ("Help, xinit does not run anymore after I install
this port!"). Anybody who does this will be shot and cut in 65,536
pieces by a rusty knife and have is liver chopped out by a bunch of
crows and will eternally rot to death in the deepest bowels of hell
(not necessarily in that order…)ELF supportSince FreeBSD is moving to ELF shortly after 3.0-RELEASE, we need
to convert many ports that build shared libraries to support ELF.
Complicating this task is that a 3.0 system can run as both ELF and
a.out, and we wish to unofficially support the 2.2 as long as
possible. Below are the guidelines on how to convert a.out only ports
to support both a.out and ELF compilation.Some part of this list is only applicable during the conversion,
but will be left here for awhile for reference in case you have come
across some old port you wish to upgrade.Moving a.out libraries out of the wayA.out libraries should be moved out of
/usr/local/lib and similar to an
aout subdirectory. (If you do not move them out
of the way, ELF ports will happily overwrite a.out libraries.) The
move-aout-libs target in the 3.0-CURRENT
src/Makefile (called from
aout-to-elf) will do this for you. It will
only move a.out libs so it is safe to call it on a system with both
ELF and a.out libs in the standard directories.FormatThe ports tree will build packages in the format the machine is
in. This means a.out for 2.2 and a.out or ELF for 3.0 depending on
what `objformat` returns. Also, once users move
a.out libraries to a subdirectory, building a.out libraries will be
unsupported. (I.e., it may still work if you know what you are
doing, but you are on your own.)If a port only works for a.out, set
BROKEN_ELF to a string describing the reason
why. Such ports will be skipped during a build on an ELF
system.PORTOBJFORMATbsd.port.mk will set
PORTOBJFORMAT to aout or
elf and export it in the environments
CONFIGURE_ENV, SCRIPTS_ENV and
MAKE_ENV. (It's always going to be
aout in 2.2-STABLE). It is also passed to
PLIST_SUB as
PORTOBJFORMAT=${PORTOBJFORMAT}. (See comment on
ldconfig lines below.)The variable is set using this line in
bsd.port.mk:
PORTOBJFORMAT!= test -x /usr/bin/objformat && /usr/bin/objformat || echo aoutPorts' make processes should use this variable to decide what to
do. However, if the port's configure script
already automatically detects an ELF system, it is not necessary to
refer to PORTOBJFORMAT.Building shared librariesThe following are differences in handling shared libraries for
a.out and ELF.Shared library versionsAn ELF shared library should be called
libfoo.so.M
where M is the single version number,
and an a.out library should be called
libfoo.so.M.N
where M is the major version and
N is the the minor version number.
Do not mix those; never install an ELF
shared library called
libfoo.so.N.M
or an a.out shared library (or symlink) called
libfoo.so.N.Linker command linesAssuming cc -shared is used rather than
ld directly, the only difference is that you
need to add
on the command line for ELF.You need to install a symlink from
libfoo.so to
libfoo.so.N to make
ELF linkers happy. Since it should be listed in
PLIST too, and it won't hurt in the a.out case
(some ports even require the link for dynamic loading), you should
just make this link regardless of the setting of
PORTOBJFORMAT.LIB_DEPENDSAll port Makefiles are edited to remove minor numbers from
LIB_DEPENDS, and also to have the regexp support
removed. (E.g., foo\\.1\\.\\(33|40\\) becomes
foo.2.) They will be matched using grep
-wF.PLISTPLIST should contain the short (ELF) shlib
names if the a.out minor number is zero, and the long (a.out) names
otherwise. bsd.port.mk will automatically add
.0 to the end of short shlib lines if
PORTOBJFORMAT equals aout, and
will delete the minor number from long shlib names if
PORTOBJFORMAT equals
elf.In cases where you really need to install shlibs with two
versions on an ELF system or those with one version on an a.out
system (for instance, ports that install compatibility libraries for
other operating systems), define the variable
NO_FILTER_SHLIBS. This will turn off the editing
of PLIST mentioned in the previous
paragraph.ldconfigThe ldconfig line in Makefiles should
read:
${SETENV} OBJFORMAT=${PORTOBJFORMAT} ${LDCONFIG} -m ....In PLIST it should read;
@exec /usr/bin/env OBJFORMAT=%%PORTOBJFORMAT%% /sbin/ldconfig -m ...
@unexec /usr/bin/env OBJFORMAT=%%PORTOBJFORMAT%% /sbin/ldconfig -RThis is to ensure that the correct ldconfig
will be called depending on the format of the package, not the
default format of the system.MASTERDIRIf your port needs to build slightly different versions of
packages by having a variable (for instance, resolution, or paper
size) take different values, create one subdirectory per package to
make it easier forusers to see what to do, but try to share as many
files as possible between ports. Typically you only need a very short
Makefile in all but one of the directories if you
use variables cleverly. In the sole Makefiles,
you can use MASTERDIR to specify the directory
where the rest of the files are. Also, use a variable as part of
PKGNAME so
the packages will have different names.This will be best demonstrated by an example. This is part of
japanese/xdvi300/Makefile;
PKGNAME= ja-xdvi${RESOLUTION}-17
:
# default
RESOLUTION?= 300
.if ${RESOLUTION} != 118 && ${RESOLUTION} != 240 && \
${RESOLUTION} != 300 && ${RESOLUTION} != 400
@${ECHO} "Error: invalid value for RESOLUTION: \"${RESOLUTION}\""
@${ECHO} "Possible values are: 118, 240, 300 (default) and 400."
@${FALSE}
.endifjapanese/xdvi300 also has all the regular
patches, package files, etc. If you type make
there, it will take the default value for the resolution (300) and
build the port normally.As for other resolutions, this is the entirexdvi118/Makefile;
RESOLUTION= 118
MASTERDIR= ${.CURDIR}/../xdvi300
.include ${MASTERDIR}/Makefile(xdvi240/Makefile and
xdvi400/Makefile are similar). The
MASTERDIR definition tells
bsd.port.mk that the refulat set of
subdirectories like PATCHDIR and
PKGDIR are to be found under
xdvi300. The RESOLUTION=118
line will override the RESOLUTION=300 line in
xdvi300/Makefile and the port will be built with
resolution set to 118.Shared library versionsFirst, please read our policy on
shared library versioning to understand what to do with
shared library versions in general. Do not blindly assume software
authors know what they are doing; many of them do not. It is very
important that these details are carefully considered, as we have
quite a unique situation where we are trying to have dozens of
potentially incompatible software pairs co-exist. Careless port
imports have caused great trouble regarding shared libraries in the
past (ever wondered why the port jpeg-6b has a
shared library version of 9.0?). If in doubt, send a message to the
&a.ports;. Most of the time, your job ends by determining the right
shared library version and making appropriate patches to implement
it.However, if there is a port which is a different version of the
same software already in the tree, the situation is much more complex.
In short, the FreeBSD implementation does not allow the user to
specify to the linker which version of shared library to link against
(the linker will always pick the highest numbered version). This
means, if there is a libfoo.so.3.2 and
libfoo.so.4.0 in the system, there is no way to
tell the linker to link a particular application to
libfoo.so.3.2. It is essentially completely
overshadowed in terms of compilation-time linkage. In this case, the
only solution is to rename the base part of the
shared library. For instance, change
libfoo.so.4.0 to
libfoo4.so.1.0 so both version 3.2 and 4.0 can be
linked from other ports.ManpagesThe MAN[1-9LN] variables will automatically add
any manpages to pkg/PLIST (this means you must
not list manpages in the
PLIST—see generating PLIST for more). It also
makes the install stage automatically compress or uncompress manpages
depending on the setting of NOMANCOMPRESS in
/etc/make.conf.If your port tries to install multiple names for manpages using
symlinks or hardlinks, you must use the MLINKS
variable to identify these. The link installed by your port will
be destroyed and recreated by bsd.port.mk
to make sure it points to the correct file. Any manpages
listed in MLINKS must not be listed in the
PLIST.To specify whether the manpages are compressed upon installation,
use the MANCOMPRESSED variable. This variable can
take three values, yes, no and
maybe. yes means manpages are
already installed compressed, no means they are
not, and maybe means the software already respects
the value of NOMANCOMPRESS so
bsd.port.mk does not have to do anything
special.MANCOMPRESSED is automatically set to
yes if USE_IMAKE is set and
NO_INSTALL_MANPAGES is not set, and to
no otherwise. You do not have to explicitly define
it unless the default is not suitable for your port.If your port anchors its man tree somewhere other than
PREFIX, you can use the
MANPREFIX to set it. Also, if only manpages in
certain sections go in a non-standard place, such as some Perl modules
ports, you can set individual man paths using
MANsectPREFIX (where
sect is one of 1-9,
L or N).If your manpages go to language-specific subdirectories, set the
name of the languages to MANLANG. The value of
this variable defaults to "" (i.e., English
only).Here is an example that puts it all together.
MAN1= foo.1
MAN3= bar.3
MAN4= baz.4
MLINKS= foo.1 alt-name.8
MANLANG= "" ja
MAN3PREFIX= ${PREFIX}/share/foobar
MANCOMPRESSED= yesThis states that six files are installed by this port;
${PREFIX}/man/man1/foo.1.gz
${PREFIX}/man/ja/man1/foo.1.gz
${PREFIX}/share/foobar/man/man3/bar.3.gz
${PREFIX}/share/foobar/man/ja/man3/bar.3.gz
${PREFIX}/man/man4/baz.4.gz
${PREFIX}/man/ja/man4/baz.4.gzAdditionally ${PREFIX}/man/man8/alt-name.8.gz
may or may-not be installed by your port. Regardless, a
symlink will be made to join the foo(1) manpage and
alt-name(8) manpage.Ports that require MotifThere are many programs that require a Motif library (available
from several commercial vendors, while there is a free clone reported
to be able to run many applications in
x11-toolkits/lesstif) to compile. Since it is a
popular toolkit and their licenses usually permit redistribution of
statically linked binaries, we have made special provisions for
handling ports that require Motif in a way that we can easily compile
binaries linked either dynamically (for people who are compiling from
the port) or statically (for people who distribute packages).REQUIRES_MOTIFIf your port requires Motif, define this variable in the
Makefile. This will prevent people who do not own a copy of Motif
from even attempting to build it.MOTIFLIBThis variable will be set by bsd.port.mk to
be the appropriate reference to the Motif library. Please patch the
source to use this wherever the Motif library is referenced in the
Makefile or
Imakefile.There are two common cases:If the port refers to the Motif library as
-lXm in its Makefile or
Imakefile, simply substitute
${MOTIFLIB} for it.If the port uses XmClientLibs in its
Imakefile, change it to
${MOTIFLIB} ${XTOOLLIB}
${XLIB}.Note that MOTIFLIB (usually) expands to
-L/usr/X11R6/lib -lXm or
/usr/X11R6/lib/libXm.a, so there is no need to
add -L or -l in front.X11 fontsIf your port installs fonts for the X Window system, put them in
X11BASE/lib/X11/fonts/local.
This directory is new to XFree86 release 3.3.3. If it does not exist,
please create it, and print out a message urging the user to update
their XFree86 to 3.3.3 or newer, or at least add this directory to the
font path in /etc/XF86Config.Info filesThe new version of texinfo (included in 2.2.2-RELEASE and onwards)
contains a utility called install-info to add and
delete entries to the dir file. If your port
installs any info documents, please follow this instructions so your
port/package will correctly update the user's
PREFIX/info/dir file. (Sorry
for the length of this section, but is it imperative to weave all the
info files together. If done correctly, it will produce a
beautiful listing, so please bear with me!First, this is what you (as a porter) need to know&prompt.user; install-info --help
install-info [OPTION]... [INFO-FILE [DIR-FILE]]
Install INFO-FILE in the Info directory file DIR-FILE.
Options:
--delete Delete existing entries in INFO-FILE;
don't insert any new entries.
:
--entry=TEXT Insert TEXT as an Info directory entry.
:
--section=SEC Put this file's entries in section SEC of the directory. :This program will not actually install info
files; it merely inserts or deletes entries in the
dir file.Here's a seven-step procedure to convert ports to use
install-info. I will use
editors/emacs as an example.Look at the texinfo sources and make a patch to insert
@dircategory and @direntry
statements to files that do not have them. This is part of my
patch:
--- ./man/vip.texi.org Fri Jun 16 15:31:11 1995
+++ ./man/vip.texi Tue May 20 01:28:33 1997
@@ -2,6 +2,10 @@
@setfilename ../info/vip
@settitle VIP
+@dircategory The Emacs editor and associated tools
+@direntry
+* VIP: (vip). A VI-emulation for Emacs.
+@end direntry
@iftex
@finalout
:The format should be self-explanatory. Many authors leave a
dir file in the source tree that contains all
the entries you need, so look around before you try to write your
own. Also, make sure you look into related ports and make the
section names and entry indentations consistent (we recommend that
all entry text start at the 4th tab stop).Note that you can put only one info entry per file because
of a bug in install-info --delete that
deletes only the first entry if you specify multiple entries in
the @direntry section.You can give the dir entries to
install-info as arguments
( and ) instead
of patching the texinfo sources. I do not think this is a good
idea for ports because you need to duplicate the same information
in three places
(Makefile and
@exec/@unexec of
PLIST; see below). However, if you have a
Japanese (or other multibyte encoding) info files, you will have
to use the extra arguments to install-info
because makeinfo cannot handle those texinfo
sources. (See Makefile and
PLIST of japanese/skk
for examples on how to do this).Go back to the port directory and do a make clean;
make and verify that the info files are regenerated
from the texinfo sources. Since the texinfo sources are newer than
the info files, they should be rebuilt when you type
make; but many Makefiles
do not include correct dependencies for info files. In
emacs' case, I had to patch the main
Makefile.in so it will descend into the
man subdirectory to rebuild the info
pages.
--- ./Makefile.in.org Mon Aug 19 21:12:19 1996
+++ ./Makefile.in Tue Apr 15 00:15:28 1997
@@ -184,7 +184,7 @@
# Subdirectories to make recursively. `lisp' is not included
# because the compiled lisp files are part of the distribution
# and you cannot remake them without installing Emacs first.
-SUBDIR = lib-src src
+SUBDIR = lib-src src man
# The makefiles of the directories in $SUBDIR.
SUBDIR_MAKEFILES = lib-src/Makefile man/Makefile src/Makefile oldXMenu/Makefile lwlib/Makefile
--- ./man/Makefile.in.org Thu Jun 27 15:27:19 1996
+++ ./man/Makefile.in Tue Apr 15 00:29:52 1997
@@ -66,6 +66,7 @@
${srcdir}/gnu1.texi \
${srcdir}/glossary.texi
+all: info
info: $(INFO_TARGETS)
dvi: $(DVI_TARGETS)The second hunk was necessary because the default target in
the man subdir is called
info, while the main
Makefile wants to call
all. I also deleted the installation of
the info info file because we already have
one with the same name in /usr/share/info
(that patch is not shown here).If there is a place in the Makefile that
is installing the dir file, delete it. Your
port may not be doing it. Also, remove any commands that are
otherwise mucking around with the dir
file.
--- ./Makefile.in.org Mon Aug 19 21:12:19 1996
+++ ./Makefile.in Mon Apr 14 23:38:07 1997
@@ -368,14 +368,8 @@
if [ `(cd ${srcdir}/info && /bin/pwd)` != `(cd ${infodir} && /bin/pwd)` ]; \
then \
(cd ${infodir}; \
- if [ -f dir ]; then \
- if [ ! -f dir.old ]; then mv -f dir dir.old; \
- else mv -f dir dir.bak; fi; \
- fi; \
cd ${srcdir}/info ; \
- (cd $${thisdir}; ${INSTALL_DATA} ${srcdir}/info/dir ${infodir}/dir); \
- (cd $${thisdir}; chmod a+r ${infodir}/dir); \
for f in ccmode* cl* dired-x* ediff* emacs* forms* gnus* info* message* mh-e* sc* vip*; do \
(cd $${thisdir}; \
${INSTALL_DATA} ${srcdir}/info/$$f ${infodir}/$$f; \
chmod a+r ${infodir}/$$f); \(This step is only necessary if you are modifying an existing
port.) Take a look at pkg/PLIST and delete
anything that is trying to patch up info/dir.
They may be in pkg/INSTALL or some other
file, so search extensively.
Index: pkg/PLIST
===================================================================
RCS file: /usr/cvs/ports/editors/emacs/pkg/PLIST,v
retrieving revision 1.15
diff -u -r1.15 PLIST
--- PLIST 1997/03/04 08:04:00 1.15
+++ PLIST 1997/04/15 06:32:12
@@ -15,9 +15,6 @@
man/man1/emacs.1.gz
man/man1/etags.1.gz
man/man1/ctags.1.gz
-@unexec cp %D/info/dir %D/info/dir.bak
-info/dir
-@unexec cp %D/info/dir.bak %D/info/dir
info/cl
info/cl-1
info/cl-2Add a post-install target to the
Makefile to create a dir
file if it is not there. Also, call
install-info with the installed info
files.
Index: Makefile
===================================================================
RCS file: /usr/cvs/ports/editors/emacs/Makefile,v
retrieving revision 1.26
diff -u -r1.26 Makefile
--- Makefile 1996/11/19 13:14:40 1.26
+++ Makefile 1997/05/20 10:25:09 1.28
@@ -20,5 +20,11 @@
post-install:
.for file in emacs-19.34 emacsclient etags ctags b2m
strip ${PREFIX}/bin/${file}
.endfor
+ if [ ! -f ${PREFIX}/info/dir ]; then \
+ ${SED} -ne '1,/Menu:/p' /usr/share/info/dir > ${PREFIX}/info/dir; \
+ fi
+.for info in emacs vip viper forms gnus mh-e cl sc dired-x ediff ccmode
+ install-info ${PREFIX}/info/${info} ${PREFIX}/info/dir
+.endfor
.include <bsd.port.mk>Do not use anything other than
/usr/share/info/dir and the above command to
create a new info file. In fact, I would add the first three lines
of the above patch to bsd.port.mk if you (the
porter) would not have to do it in PLIST by
yourself anyway.Edit PLIST and add equivalent
@exec statements and also
@unexec for pkg_delete. You
do not need to delete info/dir with
@unexec.
Index: pkg/PLIST
===================================================================
RCS file: /usr/cvs/ports/editors/emacs/pkg/PLIST,v
retrieving revision 1.15
diff -u -r1.15 PLIST
--- PLIST 1997/03/04 08:04:00 1.15
+++ PLIST 1997/05/20 10:25:12 1.17
@@ -16,7 +14,15 @@
man/man1/etags.1.gz
man/man1/ctags.1.gz
+@unexec install-info --delete %D/info/emacs %D/info/dir
:
+@unexec install-info --delete %D/info/ccmode %D/info/dir
info/cl
info/cl-1
@@ -87,6 +94,18 @@
info/viper-3
info/viper-4
+@exec [ -f %D/info/dir ] || sed -ne '1,/Menu:/p' /usr/share/info/dir > %D/info/dir
+@exec install-info %D/info/emacs %D/info/dir
:
+@exec install-info %D/info/ccmode %D/info/dir
libexec/emacs/19.34/i386--freebsd/cvtmail
libexec/emacs/19.34/i386--freebsd/digest-docThe @unexec install-info --delete
commands have to be listed before the info files themselves so
they can read the files. Also, the @exec
install-info commands have to be after the info
files and the @exec command that creates the
the dir file.Test and admire your
work. :). Check the
dir file before and after each step.The pkg/ subdirectoryThere are some tricks we have not mentioned yet about the
pkg/ subdirectory that come in handy
sometimes.MESSAGEIf you need to display a message to the installer, you may place
the message in pkg/MESSAGE. This capability is
often useful to display additional installation steps to be taken
after a pkg_add or to display licensing
information.The pkg/MESSAGE file does not need to be
added to pkg/PLIST. Also, it will not get
automatically printed if the user is using the port, not the
package, so you should probably display it from the
post-install target yourself.INSTALLIf your port needs to execute commands when the binary package
is installed with pkg_add you can do this via the
pkg/INSTALL script. This script will
automatically be added to the package, and will be run twice by
pkg_add. The first time will as INSTALL
${PKGNAME} PRE-INSTALL and the second time as
INSTALL ${PKGNAME} POST-INSTALL.
$2 can be tested to determine which mode
the script is being run in. The PKG_PREFIX
environmental variable will be set to the package installation
directory. See &man.pkg.add.1; for
additional information.This script is not run automatically if you install the port
with make install. If you are depending on it
being run, you will have to explicitly call it from your port's
Makefile.REQIf your port needs to determine if it should install or not, you
can create a pkg/REQ “requirements”
script. It will be invoked automatically at
installation/deinstallation time to determine whether or not
installation/deinstallation should proceed.Changing PLIST based on make
variablesSome ports, particularly the p5- ports, need to change their
PLIST depending on what options they are
configured with (or version of perl, in the case of p5- ports). To
make this easy, any instances in the PLIST of
%%OSREL%%, %%PERL_VER%%, and
%%PERL_VERSION%% will be substituted for
appropriately. The value of %%OSREL%% is the
numeric revision of the operating system (e.g.,
2.2.7). %%PERL_VERSION%% is
the full version number of perl (e.g., 5.00502)
and %%PERL_VER%% is the perl version number minus
the patchlevel (e.g., 5.005).If you need to make other substitutions, you can set the
PLIST_SUB variable with a list of
VAR=VALUE
pairs and instances of
%%VAR%%' will be
substituted with VALUE in the
PLIST.For instance, if you have a port that installs many files in a
version-specific subdirectory, you can put something like
OCTAVE_VERSION= 2.0.13
PLIST_SUB= OCTAVE_VERSION=${OCTAVE_VERSION}
in the Makefile and use
%%OCTAVE_VERSION%% wherever the version shows up
in PLIST. That way, when you upgrade the port,
you will not have to change dozens (or in some cases, hundreds) of
lines in the PLIST.This substitution (as well as addition of any man pages) will be done between
the do-install and
post-install targets, by reading from
PLIST and writing to TMPPLIST
(default:
WRKDIR/.PLIST.mktmp). So if
your port builds PLIST on the fly, do so in or
before do-install. Also, if your port
needs to edit the resulting file, do so in
post-install to a file named
TMPPLIST.Changing the names of files in the
pkg subdirectoryAll the filenames in the pkg subdirectory
are defined using variables so you can change them in your
Makefile if need be. This is especially useful
when you are sharing the same pkg subdirectory
among several ports or have to write to one of the above files (see
writing to places other than
WRKDIR for why it is a bad idea to write
directly in to the pkg subdirectory.Here is a list of variable names and their default
values.VariableDefault valueCOMMENT${PKGDIR}/DESCRDESCR${PKGDIR}/DESCRPLIST${PKGDIR}/PLISTPKGINSTALL${PKGDIR}/PKGINSTALLPKGDEINSTALL${PKGDIR}/PKGDEINSTALLPKGREQ${PKGDIR}/REQPKGMESSAGE${PKGDIR}/MESSAGEPlease change these variables rather than overriding
PKG_ARGS. If you change
PKG_ARGS, those files will not correctly be
installed in /var/db/pkg upon install from a
port.Licensing ProblemsSome software packages have restrictive licenses or can be in
violation to the law (PKP's patent on public key crypto, ITAR (export
of crypto software) to name just two of them). What we can do with
them varies a lot, depending on the exact wordings of the respective
licenses.It is your responsibility as a porter to read the licensing
terms of the software and make sure that the FreeBSD project will
not be held accountable of violating them by redistributing the
source or compiled binaries either via ftp or CD-ROM. If in doubt,
please contact the &a.ports;.There are two variables you can set in the Makefile to handle the
situations that arise frequently:If the port has a “do not sell for profit” type of
license, set the variable NO_CDROM to a string
describing the reason why. We will make sure such ports will not go
into the CD-ROM come release time. The distfile and package will
still be available via ftp.If the resulting package needs to be built uniquely for each
site, or the resulting binary package cannot be distributed due to
licensing; set the variable NO_PACKAGE to a
string describing the reason why. We will make sure such packages
will not go on the ftp site, nor into the CD-ROM come release time.
The distfile will still be included on both however.If the port has legal restrictions on who can use it (e.g.,
crypto stuff) or has a “no commercial use” license,
set the variable RESTRICTED to be the string
describing the reason why. For such ports, the distfiles/packages
will not be available even from our ftp sites.The GNU General Public License (GPL), both version 1 and 2,
should not be a problem for ports.If you are a committer, make sure you update the
ports/LEGAL file too.UpgradingWhen you notice that a port is out of date compared to the latest
version from the original authors, first make sure you have the latest
port. You can find them in the
ports/ports-current directory of the ftp mirror
sites. You may also use CVSup to keep your whole ports collection
up-to-date, as described in .The next step is to send a mail to the maintainer, if one is
listed in the port's Makefile. That person may
already be working on an upgrade, or have a reason to not upgrade the
port right now (because of, for example, stability problems of the new
version).If the maintainer asks you to do the upgrade or there is not any
such person to begin with, please make the upgrade and send the
recursive diff (either unified or context diff is fine, but port
committers appear to prefer unified diff more) of the new and old
ports directories to us (e.g., if your modified port directory is
called superedit and the original as in our tree
is superedit.bak, then send us the result of
diff -ruN superedit.bak superedit). Please examine
the output to make sure all the changes make sense. The best way to
send us the diff is by including it to &man.send-pr.1; (category
ports). Please mention any added or deleted files
in the message, as they have to be explicitly specified to CVS when
doing a commit. If the diff is more than about 20KB, please compress
and uuencode it; otherwise, just include it in as is in the PR.Once again, please use &man.diff.1; and not &man.shar.1; to send
updates to existing ports!Do's and Dont'sHere is a list of common do's and dont's that you encounter during
the porting process.You should check your own port against this list,
but you can also check ports in the PR database that others have
submitted. Submit any comments on ports you check as described in
Bug Reports and General
Commentary. Checking ports in the PR database will both make
it faster for us to commit them, and prove that you know what you are
doing.Strip BinariesDo strip binaries. If the original source already strips the
binaries, fine; otherwise you should add a
post-install rule to to it yourself. Here is an
example;
post-install:
strip ${PREFIX}/bin/xdlUse the &man.file.1; command on the installed executable to
check whether the binary is stripped or not. If it does not say
not stripped, it is stripped.INSTALL_* macrosDo use the macros provided in bsd.port.mk
to ensure correct modes and ownership of files in your own
*-install targets. They are:INSTALL_PROGRAM is a command to install
binary executables.INSTALL_SCRIPT is a command to install
executable scripts.INSTALL_DATA is a command to install
sharable data.INSTALL_MAN is a command to install
manpages and other documentation (it does not compress
anything).These are basically the install command with
all the appropriate flags. See below for an example on how to use
them.WRKDIRDo not write anything to files outside
WRKDIR. WRKDIR is the only
place that is guaranteed to be writable during the port build (see
compiling ports from CDROM for an
example of building ports from a read-only tree). If you need to
modigy some file in PKGDIR, do so by redefining a variable, not by
writing over it.WRKDIRPREFIXMake sure your port honors WRKDIRPREFIX.
Most ports do not have to worry about this. In particular, if you
are referring to a WRKDIR of another port, note
that the correct location is
WRKDIRPREFIXPORTSDIR/subdir/name/work not PORTSDIR/subdir/name/work or .CURDIR/../../subdir/name/work or some such.Also, if you are defining WRKDIR yourself,
make sure you prepend
${WKRDIRPREFIX}${.CURDIR} in the
front.Differentiating operating systems and OS versionsYou may come across code that needs modifications or conditional
compilation based upon what version of UNIX it is running under. If
you need to make such changes to the code for conditional
compilation, make sure you make the changes as general as possible
so that we can back-port code to FreeBSD 1.x systems and cross-port
to other BSD systems such as 4.4BSD from CSRG, BSD/386, 386BSD,
NetBSD, and OpenBSD.The preferred way to tell 4.3BSD/Reno (1990) and newer versions
of the BSD code apart is by using the BSD macro
defined in <sys/param.h>. Hopefully that
file is already included; if not, add the code:
#if (defined(__unix__) || defined(unix)) && !defined(USG)
#include <sys/param.h>
#endifto the proper place in the .c file. We
believe that every system that defines these two symbols has
sys/param.h. If you find a system that
does not, we would like to know. Please send mail to the
&a.ports;.Another way is to use the GNU Autoconf style of doing
this:
#ifdef HAVE_SYS_PARAM_H
#include <sys/param.h>
#endifDo not forget to add -DHAVE_SYS_PARAM_H to the
CFLAGS in the Makefile for
this method.Once you have sys/param.h included, you may
use:
#if (defined(BSD) && (BSD >= 199103))to detect if the code is being compiled on a 4.3 Net2 code base
or newer (e.g. FreeBSD 1.x, 4.3/Reno, NetBSD 0.9, 386BSD, BSD/386
1.1 and below).Use:
#if (defined(BSD) && (BSD >= 199306))to detect if the code is being compiled on a 4.4 code base or
newer (e.g. FreeBSD 2.x, 4.4, NetBSD 1.0, BSD/386 2.0 or
above).The value of the BSD macro is
199506 for the 4.4BSD-Lite2 code base. This is
stated for informational purposes only. It should not be used to
distinguish between versions of FreeBSD based only on 4.4-Lite vs.
versions that have merged in changes from 4.4-Lite2. The
__FreeBSD__ macro should be used instead.Use sparingly:__FreeBSD__ is defined in all versions of
FreeBSD. Use it if the change you are making
only affects FreeBSD. Porting gotchas like
the use of sys_errlist[] vs
strerror() are Berkeleyisms, not FreeBSD
changes.In FreeBSD 2.x, __FreeBSD__ is defined to
be 2. In earlier versions, it is
1. Later versions will bump it to match
their major version number.If you need to tell the difference between a FreeBSD 1.x
system and a FreeBSD 2.x or 3.x system, usually the right answer
is to use the BSD macros described above. If
there actually is a FreeBSD specific change (such as special
shared library options when using ld) then it
is OK to use __FreeBSD__ and #if
__FreeBSD__ > 1 to detect a FreeBSD 2.x and later
system. If you need more granularity in detecting FreeBSD
systems since 2.0-RELEASE you can use the following:
#if __FreeBSD__ >= 2
#include <osreldate.h>
# if __FreeBSD_version >= 199504
/* 2.0.5+ release specific code here */
# endif
#endifRelease__FreeBSD_version2.0-RELEASE1194112.1-CURRENTs199501, 1995032.0.5-RELEASE1995042.2-CURRENT before 2.11995082.1.0-RELEASE1995112.2-CURRENT before 2.1.51995122.1.5-RELEASE1996072.2-CURRENT before 2.1.61996082.1.6-RELEASE1996122.1.7-RELEASE1996122.2-RELEASE2200002.2.1-RELEASE220000 (no change)2.2-STABLE after 2.2.1-RELEASE220000 (no change)2.2-STABLE after texinfo-3.92210012.2-STABLE after top2210022.2.2-RELEASE2220002.2-STABLE after 2.2.2-RELEASE2220012.2.5-RELEASE2250002.2-STABLE after 2.2.5-RELEASE2250012.2-STABLE after ldconfig -R merge2250022.2.6-RELEASE2260002.2.7-RELEASE2270002.2-STABLE after 2.2.7-RELEASE2270012.2-STABLE after semctl(2) change2270022.2.8-RELEASE2280002.2-STABLE after 2.2.8-RELEASE2280013.0-CURRENT before mount(2) change3000003.0-CURRENT after mount(2) change3000013.0-CURRENT after semctl(2) change3000023.0-CURRENT after ioctl arg changes3000033.0-CURRENT after ELF conversion3000043.0-RELEASE3000053.0-CURRENT after 3.0-RELEASE3000063.0-STABLE after 3/4 branch3000073.1-RELEASE3100003.1-STABLE after 3.1-RELEASE3100013.1-STABLE after C++ constructor/destructor order
change3100023.2-STABLE3200014.0-CURRENT after 3/4 branch4000004.0-CURRENT after change in dynamic linker
handling4000014.0-CURRENT after C++ constructor/destructor
order change4000024.0-CURRENT after functioning dladdr(3)4000034.0-CURRENT after newbus4000044.0-CURRENT after suser(9) API change4000054.0-CURRENT after cdevsw registration change4000064.0-CURRENT after the addition of so_cred for
socket level credentials4000074.0-CURRENT after the addition of a poll syscall
wrapper to libc_r4000084.0-CURRENT after the change of the kernel's
dev_t type to struct
spacinfo pointer400009Note that 2.2-STABLE sometimes identifies itself as
“2.2.5-STABLE” after the 2.2.5-RELEASE. The pattern
used to be year followed by the month, but we decided to change it
to a more straightforward major/minor system starting from 2.2.
This is because the parallel development on several branches made
it infeasible to classify the releases simply by their real
release dates. If you are making a port now, you do not have to
worry about old -CURRENTs; they are listed here just for your
reference.In the hundreds of ports that have been done, there have only
been one or two cases where __FreeBSD__ should
have been used. Just because an earlier port screwed up and used it
in the wrong place does not mean you should do so too.Writing something after
bsd.port.mkDo not write anything after the .include
<bsd.port.mk> line. it usually can be avoided by
including bsd.port.pre.mk somewhere in the
middle of your Makefile and
bsd.port.post.mk at the end.You need to include either the
pre.mk/post.mk pair or
bsd.port.mk only; do not mix these two.bsd.port.pre.mk only defines a few
variables, which can be used in tests in the
Makefile, bsd.port.post.mk
defines the rest.Here are some important variables defined in
bsd.port.pre.mk (this is not the complete list,
please read bsd.port.mk for the complete
list).VariableDescriptionARCHThe architecture as returned by uname
-m (e.g., i386)OPSYSThe operating system type, as returned by
uname -s (e.g.,
FreeBSD)OSRELThe release version of the operating system (e.g.,
2.1.5 or
2.2.7)OSVERSIONThe numeric version of the operating system, same as
__FreeBSD_version.PORTOBJFORMATThe object format of the system
(aout or elfLOCALBASEThe base of the “local” tree (e.g.,
/usr/local/)X11BASEThe base of the “X11” tree (e.g.,
/usr/X11R6)PREFIXWhere the port installs itself (see more on
PREFIX).If you have to define the variables
USE_IMAKE, USE_X_PREFIX, or
MASTERDIR, do so before including
bsd.port.pre.mk.Here are some examples of things you can write after
bsd.port.pre.mk;
# no need to compile lang/perl5 if perl5 is already in system
.if ${OSVERSION} > 300003
BROKEN= perl is in system
.endif
# only one shlib version number for ELF
.if ${PORTOBJFORMAT} == "elf"
TCL_LIB_FILE= ${TCL_LIB}.${SHLIB_MAJOR}
.else
TCL_LIB_FILE= ${TCL_LIB}.${SHLIB_MAJOR}.${SHLIB_MINOR}
.endif
# software already makes link for ELF, but not for a.out
post-install:
.if ${PORTOBJFORMAT} == "aout"
${LN} -sf liblinpack.so.1.0 ${PREFIX}/lib/liblinpack.so
.endifInstall additional documentationIf your software has some documentation other than the standard
man and info pages that you think is useful for the user, install it
under PREFIX/share/doc.
This can be done, like the previous item, in the
post-install target.Create a new directory for your port. The directory name should
reflect what the port is. This usually means
PKGNAME minus the version part. However, if you
think the user might want different versions of the port to be
installed at the same time, you can use the whole
PKGNAME.Make the installation dependent to the variable
NOPORTDOCS so that users can disable it in
/etc/make.conf, like this:
post-install:
.if !defined(NOPORTDOCS)
${MKDIR}${PREFIX}/share/doc/xv
${INSTALL_MAN} ${WRKSRC}/docs/xvdocs.ps ${PREFIX}/share/doc/xv
.endifDo not forget to add them to pkg/PLIST too!
(Do not worry about NOPORTDOCS here; there is
currently no way for the packages to read variables from
/etc/make.conf.)Also you can use the pkg/MESSAGE file to
display messages upon installation. See the using
pkg/MESSAGE section for
details.MESSAGE does not need to be added to
pkg/PLIST).DIST_SUBDIRDo not let your port clutter
/usr/ports/distfiles. If your port requires a
lot of files to be fetched, or contains a file that has a name that
might conflict with other ports (e.g.,
Makefile), set DIST_SUBDIR
to the name of the port (PKGNAME without the
version part should work fine). This will change
DISTDIR from the default
/usr/ports/distfiles to
/usr/ports/distfiles/DIST_SUBDIR,
and in effect puts everything that is required for your port into
that subdirectory.It will also look at the subdirectory with the same name on the
backup master site at ftp.FreeBSD.org.
(Setting DISTDIR explicitly in your
Makefile will not accomplish this, so please use
DIST_SUBDIR.)This does not affect the MASTER_SITES you
define in your Makefile.Package informationDo include package information, i.e.
COMMENT, DESCR, and
PLIST, in pkg.Note that these files are not used only for packaging anymore,
and are mandatory now, even if
NO_PACKAGE is set.RCS stringsDo not put RCS strings in patches. CVS will mangle them when we
put the files into the ports tree, and when we check them out again,
they will come out different and the patch will fail. RCS strings
are surrounded by dollar ($) signs, and
typically start with $Id or
$RCS.Recursive diffUsing the recurse () option to
diff to generate patches is fine, but please take
a look at the resulting patches to make sure you do not have any
unnecessary junk in there. In particular, diffs between two backup
files, Makefiles when the port uses
Imake or GNU configure, etc.,
are unnecessary and should be deleted. If you had to edit
configure.in and run
autoconf to regenerate
configure, do not take the diffs of
configure (it often grows to a few thousand
lines!); define USE_AUTOCONF=yes and take the
diffsof configure.in.Also, if you had to delete a file, then you can do it in the
post-extract target rather than as part of
the patch. Once you are happy with the resulting diff, please split
it up into one source file per patch file.PREFIXDo try to make your port install relative to
PREFIX. (The value of this variable will be set
to LOCALBASE (default
/usr/local), unless
USE_X_PREFIX or USE_IMAKE is
set, in which case it will be X11BASE (default
/usr/X11R6).)Not hard-coding /usr/local or
/usr/X11R6 anywhere in the source will make the
port much more flexible and able to cater to the needs of other
sites. For X ports that use imake, this is
automatic; otherwise, this can often be done by simply replacing the
occurrences of /usr/local (or
/usr/X11R6 for X ports that do not use imake)
in the various scripts/Makefiles in the port to read
PREFIX, as this variable is automatically passed
down to every stage of the build and install processes.Do not set USE_X_PREFIX unless your port
truly require it (i.e., it links against X libs or it needs to
reference files in X11BASE).The variable PREFIX can be reassigned in your
Makefile or in the user's environment.
However, it is strongly discouraged for individual ports to set this
variable explicitly in the Makefiles.Also, refer to programs/files from other ports with the
variables mentioned above, not explicit pathnames. For instance, if
your port requires a macro PAGER to be the full
pathname of less, use the compiler flag:
-DPAGER=\"${PREFIX}/bin/less\"
or
-DPAGER=\"${LOCALBASE}/bin/less\"
if this is an X port, instead of
-DPAGER=\"/usr/local/bin/less\". This way it will
have a better chance of working if the system administrator has
moved the whole `/usr/local' tree somewhere else.SubdirectoriesTry to let the port put things in the right subdirectories of
PREFIX. Some ports lump everything and put it in
the subdirectory with the port's name, which is incorrect. Also,
many ports put everything except binaries, header files and manual
pages in the a subdirectory of lib, which does
not bode well with the BSD paradigm. Many of the files should be
moved to one of the following: etc
(setup/configuration files), libexec
(executables started internally), sbin
(executables for superusers/managers), info
(documentation for info browser) or share
(architecture independent files). See man &man.hier.7; for details,
the rules governing
/usr pretty much apply to
/usr/local too. The exception are ports
dealing with USENET “news”. They may use
PREFIX/news as a destination
for their files.Cleaning up empty directoriesDo make your ports clean up after themselves when they are
deinstalled. This is usually accomplished by adding
@dirrm lines for all directories that are
specifically created by the port. You need to delete subdirectories
before you can delete parent directories.
:
lib/X11/oneko/pixmaps/cat.xpm
lib/X11/oneko/sounds/cat.au
:
@dirrm lib/X11/oneko/pixmals
@dirrm lib/X11/oneko/sounds
@dirrm lib/X11/onekoHowever, sometimes @dirrm will give you
errors because other ports also share the same subdirectory. You
can call rmdir from @unexec to
remove only empty directories without warning.
@unexec rmdir %D/share/doc/gimp 2>/dev/null || trueThis will neither print any error messages nor cause
pkg_delete to exit abnormally even if
PREFIX/share/doc/gimp is not
empty due to other ports installing some files in there.UIDsIf your port requires a certain user to be on the installed
system, let the pkg/INSTALL script call
pw to create it automatically. Look at
net/cvsup-mirror for an example.If your port must use the same user/group ID number when it is
installed a binary package as when it was compiled, then you must
choose a free UID from 50 to 99 and register it below. Look at
japanese/Wnn for an example.Make sure you do not use a UID already used by the system or
other ports. This is the current list of UIDs between 50 and
99.
majordom:*:54:54:Majordomo Pseudo User:/usr/local/majordomo:/nonexistent
cyrus:*:60:60:the cyrus mail server:/nonexistent:/nonexistent
gnats:*:61:1:GNATS database owner:/usr/local/share/gnats/gnats-db:/bin/sh
uucp:*:66:66:UUCP pseudo-user:/var/spool/uucppublic:/usr/libexec/uucp/uucico
xten:*:67:67:X-10 daemon:/usr/local/xten:/nonexistent
pop:*:68:6:Post Office Owner (popper):/nonexistent:/nonexistent
wnn:*:69:7:Wnn:/nonexistent:/nonexistent
ifmail:*:70:66:Ifmail user:/nonexistent:/nonexistent
pgsql:*:70:70:PostgreSQL pseudo-user:/usr/local/pgsql:/bin/sh
ircd:*:72:72:IRCd hybrid:/nonexistent:/nonexistent
alias:*:81:81:QMail user:/var/qmail/alias:/nonexistent
qmaill:*:83:81:QMail user:/var/qmail:/nonexistent
qmaild:*:82:81:QMail user:/var/qmail:/nonexistent
qmailq:*:85:82:QMail user:/var/qmail:/nonexistent
qmails:*:87:82:QMail user:/var/qmail:/nonexistent
qmailp:*:84:81:QMail user:/var/qmail:/nonexistent
qmailr:*:86:82:QMail user:/var/qmail:/nonexistent
msql:*:87:87:mSQL-2 pseudo-user:/var/db/msqldb:/bin/sh
mysql:*:88:88:MySQL Daemon:/var/db/mysql:/sbin/nologinPlease include a notice when you submit a port (or an upgrade)
that reserves a new UID or GID in this range. This allows us to
keep the list of reserved IDs up to date.Do things rationallyThe Makefile should do things simply and
reasonably. If you can make it a couple of lines shorter or more
readable, then do so. Examples include using a make
.if construct instead of a shell
if construct, not redefining
do-extract if you can redefine
EXTRACT* instead, and using
GNU_CONFIGURE instead of CONFIGURE_ARGS
+= --prefix=${PREFIX}.Respect CFLAGSThe port should respect the CFLAGS variable.
If it does not, please add NO_PACKAGE=ignores
cflags to the Makefile.Configuration filesIf your port requires some configuration files in
PREFIX/etc, do
not just install them and list them in
pkg/PLIST. That will cause
pkg_delete to delete files carefully edited by
the user and a new installation to wipe them out.Instead, install sample files with a suffix
(filename.sample
will work well) and print out a message pointing out that the
user has to copy and edit the file before the software can be made
to work.PortlintDo check your work with portlint
before you submit or commit it.FeedbackDo send applicable changes/patches to the original
author/maintainer for inclusion in next release of the code. This
will only make your job that much easier for the next
release.MiscellaneaThe files pkg/DESCR,
pkg/COMMENT, and pkg/PLIST
should each be double-checked. If you are reviewing a port and feel
they can be worded better, do so.Do not copy more copies of the GNU General Public License into
our system, please.Please be careful to note any legal issues! Do not let us
illegally distribute software!If you are stuck…Do look at existing examples and the
bsd.port.mk file before asking us questions!
;)Do ask us questions if you have any trouble! Do not just beat
your head against a wall! :)A Sample MakefileHere is a sample Makefile that you can use to
create a new port. Make sure you remove all the extra comments (ones
between brackets)!It is recommended that you follow this format (ordering of
variables, empty lines between sections, etc.). This format is
designed so that the most important information is easy to locate. We
recommend that you use portlint to check the
Makefile.
[the header...just to make it easier for us to identify the ports.]
# New ports collection makefile for: xdvi
[the version required header should updated when upgrading a port.]
# Version required: pl18 [things like "1.5alpha" are fine here too]
[this is the date when the first version of this Makefile was created.
Never change this when doing an update of the port.]
# Date created: 26 May 1995
[this is the person who did the original port to FreeBSD, in particular, the
person who wrote the first version of this Makefile. Remember, this should
not be changed when upgrading the port later.]
-# Whom: Satoshi Asami <asami@FreeBSD.ORG>
+# Whom: Satoshi Asami <asami@FreeBSD.org>
#
# $Id$
[ ^^^^ This will be automatically replaced with RCS ID string by CVS
when it is committed to our repository.]
#
[section to describe the port itself and the master site - DISTNAME
is always first, followed by PKGNAME (if necessary), CATEGORIES,
and then MASTER_SITES, which can be followed by MASTER_SITE_SUBDIR.
After those, one of EXTRACT_SUFX or DISTFILES can be specified too.]
DISTNAME= xdvi
PKGNAME= xdvi-pl18
CATEGORIES= print
[do not forget the trailing slash ("/")!
if you are not using MASTER_SITE_* macros]
MASTER_SITES= ${MASTER_SITE_XCONTRIB}
MASTER_SITE_SUBDIR= applications
[set this if the source is not in the standard ".tar.gz" form]
EXTRACT_SUFX= .tar.Z
[section for distributed patches -- can be empty]
PATCH_SITES= ftp://ftp.sra.co.jp/pub/X11/japanese/
PATCHFILES= xdvi-18.patch1.gz xdvi-18.patch2.gz
[maintainer; *mandatory*! This is the person (preferably with commit
privileges) who a user can contact for questions and bug reports - this
person should be the porter or someone who can forward questions to the
original porter reasonably promptly. If you really do not want to have
- your address here, set it to "ports@FreeBSD.ORG".]
-MAINTAINER= asami@FreeBSD.ORG
+ your address here, set it to "ports@FreeBSD.org".]
+MAINTAINER= asami@FreeBSD.org
[dependencies -- can be empty]
RUN_DEPENDS= gs:${PORTSDIR}/print/ghostscript
LIB_DEPENDS= Xpm.5:${PORTSDIR}/graphics/xpm
[this section is for other standard bsd.port.mk variables that do not
belong to any of the above]
[If it asks questions during configure, build, install...]
IS_INTERACTIVE= yes
[If it extracts to a directory other than ${DISTNAME}...]
WRKSRC= ${WRKDIR}/xdvi-new
[If the distributed patches were not made relative to ${WRKSRC}, you
may need to tweak this]
PATCH_DIST_STRIP= -p1
[If it requires a "configure" script generated by GNU autoconf to be run]
GNU_CONFIGURE= yes
[If it requires GNU make, not /usr/bin/make, to build...]
USE_GMAKE= yes
[If it is an X application and requires "xmkmf -a" to be run...]
USE_IMAKE= yes
[et cetera.]
[non-standard variables to be used in the rules below]
MY_FAVORITE_RESPONSE= "yeah, right"
[then the special rules, in the order they are called]
pre-fetch:
i go fetch something, yeah
post-patch:
i need to do something after patch, great
pre-install:
and then some more stuff before installing, wow
[and then the epilogue]
.include <bsd.port.mk>Automated package list creationFirst, make sure your port is almost complete, with only
PLIST missing. Create an empty
PLIST.&prompt.root; touch PLISTNext, create a new set of directories which your port can be
installed, and install any dependencies.&prompt.root; mtree -U -f /etc/mtree/BSD.local.dist -d -e -p /var/tmp/port-name
&prompt.root; make depends PREFIX=/var/tmp/port-nameStore the directory structure in a new file.&prompt.root; (cd /var/tmp/port-name && find * \! -type d) > OLD-DIRSIf your port honours PREFIX (which it should)
you can then install the port and create the package list.&prompt.root; make install PREFIX=/var/tmp
&prompt.root; (cd /var/tmp/port-name && find * \! -type d) > pkg/PLISTYou must also add any newly created directories to the packing
list.&prompt.root; (cd /var/tmp/port-name && find * -type d) | comm -13 OLD-DIRS - | sed -e 's#^#@dirrm#' >> pkg/PLISTFinally, you need to tidy up the packing list by hand. I lied
when I said this was all automated. Manual pages should be listed in
the port's Makefile under
MANn, and not in the
package list. User configuration files should be removed, or
installed as
filename.sample. Any
libraries installed by the port should be listed as specified in the
ldconfig section.Package NamesThe following are the conventions you should follow in naming your
packages. This is to have our package directory easy to scan, as
there are already lots and lots of packages and users are going to
turn away if they hurt their eyes!The package name should look like
language-name-compiled.specifics-version.numbers.If your DISTNAME does not look like that, set
PKGNAME to something in that format.FreeBSD strives to support the native language of its users.
The language- part should be a two
letter abbreviation of the natural language defined by ISO-639 if
the port is specific to a certain language. Examples are
ja for Japanese, ru for
Russian, vi for Vietnamese,
zh for Chinese, ko for
Korean and de for German.The name part should be all lowercases,
except for a really large package (with lots of programs in it).
Things like XFree86 (yes there really is a port of it, check it
out) and ImageMagick fall into this category. Otherwise, convert
the name (or at least the first letter) to lowercase. If the
capital letters are important to the name (for example, with
one-letter names like R or
V) you may use capital letters at your
discretion. There is a tradition of naming Perl 5 modules by
prepending p5- and converting the double-colon
separator to a hyphen; for example, the
Data::Dumper module becomes
p5-Data-Dumper. If the software in question
has numbers, hyphens, or underscores in its name, you may include
them as well (like kinput2).If the port can be built with different hardcoded defaults (usually
part of the directory name in a family of ports), the
-compiled.specifics part should state
the compiled-in defaults (the hyphen is optional). Examples are
papersize and font units.The version string should be a period-separated list of
integers and single lowercase alphabetics. The only exception is
the string pl (meaning `patchlevel'), which can
be used only when there are no major and
minor version numbers in the software.Here are some (real) examples on how to convert a
DISTNAME into a suitable
PKGNAME:Distribution NamePackage NameReasonmule-2.2.2.mule-2.2.2No changes requiredXFree86-3.1.2XFree86-3.1.2No changes requiredEmiClock-1.0.2emiclock-1.0.2No uppercase names for single programsgmod1.4gmod-1.4Need a hyphen before version numbersxmris.4.0.2xmris-4.0.2Need a hyphen before version numbersrdist-1.3alphardist-1.3aNo strings like alpha
allowedes-0.9-beta1es-0.9b1No strings like beta
allowedv3.3beta021.srctiff-3.3What the heck was that anyway?tvtwmtvtwm-pl11Version string always requiredpiewmpiewm-1.0Version string always requiredxvgr-2.10pl1xvgr-2.10.1pl allowed only when no
major/minor version numbersgawk-2.15.6ja-gawk-2.15.6Japanese language versionpsutils-1.13psutils-letter-1.13Papersize hardcoded at package build timepkfontspkfonts300-1.0Package for 300dpi fontsIf there is absolutely no trace of version information in the
original source and it is unlikely that the original author will ever
release another version, just set the version string to
1.0 (like the piewm example above). Otherwise, ask
the original author or use the date string
(yy.mm.dd) as the version.CategoriesAs you already know, ports are classified in several categories.
But for this to wor, it is important that porters and users understand
what each category and how we deicde what to put in each
category.Current list of categoriesFirst, this is the current list of port categories. Those
marked with an asterisk (*) are
virtual categories—those that do not have
a corresponding subdirectory in the ports tree.For non-virtual categories, you will find a one-line
description in the pkg/COMMENT file in that
subdirectory (e.g.,
archivers/pkg/COMMENT).CategoryDescriptionafterstep*Ports to support AfterStep window managerarchiversArchiving tools.astroAstronomical ports.audioSound support.benchmarksBenchmarking utilities.biologyBiology-related software.cadComputer aided design tools.chineseChinese language support.commsCommunication software. Mostly software to talk to
your serial port.convertersCharacter code converters.databasesDatabases.deskutilsThings that used to be on the desktop before
computers were invented.develDevelopment utilities. Do not put libraries here just
because they are libraries—unless they truly do not
belong to anywhere else, they should not be in this
category.editorsGeneral editors. Specialized editors go in the section
for those tools (e.g., a mathematical-formula editor will go
in math).elispEmacs-lisp ports.emulatorsEmulators for other operating systems. Terminal
emulators do not belong
here—X-based ones should go to
x11 and text-based ones to either
comms or misc,
depending on the exact functionality.gamesGames.germanGerman language support.graphicsGraphics utilities.ircInternet Chat Relay utilities.japaneseJapanese language support.javaJava languge support.kde*Ports that form the K Desktop Environment
(kde).koreanKorean language support.langProgramming languages.mailMail software.mathNumerical computation software and other utilities
for mathematics.mboneMBone applications.miscMiscellaneous utilities—basically things that
does not belong to anywhere else. This is the only category
that should not appear with any other non-virtual category.
If you have misc with something else in
your CATEGORIES line, that means you can
safely delete misc and just put the port
in that other subdirectory!netMiscellaneous networking software.newsUSENET news software.offix*Ports from the OffiX suite.palmSoftware support for the 3Com Palm(tm) series.perl5*Ports that require perl version 5 to run.plan9*Various programs from Plan9.printPrinting software. Desktop publishing tools
(previewers, etc.) belong here too.python*Software written in python.russianRussian language support.securitySecurity utilities.shellsCommand line shells.sysutilsSystem utilities.tcl75*Ports that use tcl version 7.5 to run.tcl76*Ports that use tcl version 7.6 to run.tcl80*Ports that use tcl version 8.0 to run.tcl81*Ports that use tcl version 8.1 to run.textprocText processing utilities. It does not include
desktop publishing tools, which go to print/.tk41*Ports that use tk version 4.1 to run.tk42*Ports that use tk version 4.2 to run.tk80*Ports that use tk version 8.0 to run.tk81*Ports that use tk version 8.1 to run.vietnameseVietnamese language support.windowmaker*Ports to support the WindowMaker window
managerwwwSoftware related to the World Wide Web. HTML language
support belong here too.x11The X window system and friends. This category is only
for software that directly support the window system. Do not
put regular X applications here. If your port is an X
application, define USE_XLIB (implied by
USE_IMAKE) and put it in appropriate
categories. Also, many of them go into other
x11-* categories (see below).x11-clocksX11 clocks.x11-fmX11 file managers.x11-fontsX11 fonts and font utilities.x11-serversX11 servers.x11-toolkitsX11 toolkits.x11-wmX11 window managers.Choosing the right categoryAs many of the categories overlap, you often have to choose
which of the categories should be the primary category of your port.
There are several rules that govern this usse. Here is the list of
priorities, in decreasing order of precedence.Language specific categories always come first. For
example, if your port installs Japanese X11 fonts, then your
CATEGORIES line would read japanese
x11-fonts.Specific categories win over less-specific ones. For
instance, an HTML editor should be listed as www
editors, not the other way around. Also, you do not
need to list net when the port belongs to
either of irc, mail,
mbone, news,
security, or www.x11 is used as a secondary category only
when the primary category is a natural language. In particular,
you should not put x11 in the category line
for X applications.If your port truly does not belong anywhere else, put it in
misc.If you are not sure about the category, please put a comment to
that effect in your send-pr submission so we can
discuss it before import it. (If you are a committer, send a note
&a.ports; so we can discuss it first—too often new ports are
imported to a wrong category only to be moved right away.)Changes to this document and the ports systemIf you maintain a lot of ports, you should consider following the
&a.ports;. Important changes to the way ports work will be announced
there. You can always find more detailed information on the latest
changes by looking at the
+ url="http://www.FreeBSD.org/cgi/cvsweb.cgi/ports/Mk/bsd.port.mk"> the
bsd.port.mk CVS log.That is It, Folks!Boy, this sure was a long tutorial, wasn't it? Thanks for
following us to here, really.Well, now that you know how to do a port, let us go at it and
convert everything in the world into ports! That is the easiest way to
start contributing to the FreeBSD Project! :)