diff --git a/de_DE.ISO8859-1/books/handbook/book.sgml b/de_DE.ISO8859-1/books/handbook/book.sgml
index 8046148b22..2162e3a846 100644
--- a/de_DE.ISO8859-1/books/handbook/book.sgml
+++ b/de_DE.ISO8859-1/books/handbook/book.sgml
@@ -1,120 +1,120 @@
%man;
%bookinfo;
%translators;
%chapters;
%authors;
- %mailing-lists;
+ %mailing-lists;
%newsgroups;
]>
FreeBSD HandbuchThe FreeBSD German Documentation Projectde-bsd-translators@de.FreeBSD.orgFebruary 19991995199619971998199920002001The FreeBSD German Documentation Project
&bookinfo.legalnotice;
Willkommen bei FreeBSD! Dieses Handbuch beschreibt die
Installation und den täglichen Umgang mit FreeBSD
Release &rel.current;.
Das Handbuch ist jederzeit unter Bearbeitung
und die Arbeit vieler Einzelpersonen. Manche Kapitel existieren noch
nicht und andere Kapitel müssen auf den neusten Stand
gebracht werden.
Wenn Sie an diesem Projekt mithelfen möchten, senden Sie bitte
eine E-Mail an die &a.de.translators;. Die letzte Version des
Handbuchs ist immer auf dem
FreeBSD Web
Server verfügbar.
Es kann außerdem in verschiedenen Formaten und in komprimierter
Form vom FreeBSD
FTP Server oder einer der vielen
Mirror
Seiten herunter geladen werden.
Vielleicht möchten Sie das Handbuch auch
durchsuchen.Erste Schritte
&chap.basics;
&chap.ports;
System Administration
&chap.users;
&chap.backups;
&chap.sound;
Anhang
&chap.bibliography;
diff --git a/de_DE.ISO8859-1/share/sgml/catalog b/de_DE.ISO8859-1/share/sgml/catalog
index 5ebe8768fc..17caa7cb99 100644
--- a/de_DE.ISO8859-1/share/sgml/catalog
+++ b/de_DE.ISO8859-1/share/sgml/catalog
@@ -1,9 +1,11 @@
-- ...................................................................... --
-- FreeBSD SGML Public Identifiers ...................................... --
- -- $FreeBSD: doc/share/sgml/catalog,v 1.9 2000/07/08 16:31:28 phantom Exp $
+ -- $FreeBSD: doc/de_DE.ISO8859-1/share/sgml/catalog,v 1.1 2000/09/28 23:29:44 nbm Exp $
--
PUBLIC "-//FreeBSD//DOCUMENT DocBook Stylesheet//EN"
"freebsd.dsl"
+PUBLIC "-//FreeBSD//ENTITIES DocBook Mailing List Entities//DE"
+ "mailing-lists.ent"
diff --git a/de_DE.ISO8859-1/books/handbook/mailing-lists.ent b/de_DE.ISO8859-1/share/sgml/mailing-lists.ent
similarity index 97%
rename from de_DE.ISO8859-1/books/handbook/mailing-lists.ent
rename to de_DE.ISO8859-1/share/sgml/mailing-lists.ent
index 6f62fb4418..58185f9821 100644
--- a/de_DE.ISO8859-1/books/handbook/mailing-lists.ent
+++ b/de_DE.ISO8859-1/share/sgml/mailing-lists.ent
@@ -1,114 +1,114 @@
freebsd-advocacy@FreeBSD.org">
freebsd-announce@FreeBSD.org">
freebsd-bugs@FreeBSD.org">
freebsd-chat@FreeBSD.org">
freebsd-core@FreeBSD.org">
freebsd-current@FreeBSD.org">
cvs-all@FreeBSD.org">
freebsd-database@FreeBSD.org">
freebsd-doc@FreeBSD.org">
freebsd-emulation@FreeBSD.org">
freebsd-fs@FreeBSD.org">
freebsd-hackers@FreeBSD.org">
freebsd-hardware@FreeBSD.org">
freebsd-isdn@FreeBSD.org">
freebsd-isp@FreeBSD.org">
freebsd-java@FreeBSD.org">
freebsd-jobs@FreeBSD.org">
freebsd-mobile@FreeBSD.org">
freebsd-mozilla@FreeBSD.org">
freebsd-multimedia@FreeBSD.org">
freebsd-net@FreeBSD.org">
freebsd-newbies@FreeBSD.org">
new-bus-arch@bostonradio.org">
freebsd-ports@FreeBSD.org">
freebsd-questions@FreeBSD.org">
freebsd-scsi@FreeBSD.org">
freebsd-security@FreeBSD.org">
freebsd-security-notifications@FreeBSD.org">
freebsd-small@FreeBSD.org">
freebsd-smp@FreeBSD.org">
freebsd-stable@FreeBSD.org">
freebsd-tokenring@FreeBSD.org">
freebsd-www@FreeBSD.org">
majordomo@FreeBSD.org">
de-bsd-translators@de.FreeBSD.org">
de-bsd-questions@de.FreeBSD.org">
diff --git a/en_US.ISO8859-1/books/arch-handbook/book.sgml b/en_US.ISO8859-1/books/arch-handbook/book.sgml
index 10879f994e..a9c8c3212b 100644
--- a/en_US.ISO8859-1/books/arch-handbook/book.sgml
+++ b/en_US.ISO8859-1/books/arch-handbook/book.sgml
@@ -1,518 +1,518 @@
%bookinfo;
%man;
%chapters;
%authors;
- %mailing-lists;
+ %mailing-lists;
]>
FreeBSD Developers' HandbookThe FreeBSD Documentation ProjectAugust 200020002001The FreeBSD Documentation Project
&bookinfo.legalnotice;
Welcome to the Developers' Handbook. 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. It may also be downloaded in a variety of
formats and compression options from the FreeBSD FTP
server or one of the numerous mirror
sites.IntroductionDeveloping on FreeBSDThis will need to discuss FreeBSD as a development
platform, the vision of BSD, architectural overview, layout of
/usr/src, history, etc.Thank you for considering FreeBSD as your development
platform! We hope it will not let you down.The BSD VisionArchitectural OverviewThe Layout of /usr/srcThe complete source code to FreeBSD is available from our
public CVS repository. The source code is normally installed in
/usr/src which contains the
following subdirectories.DirectoryDescriptionbin/Source for files in
/bincontrib/Source for files from contributed software.crypto/DES sourceetc/Source for files in /etcgames/Source for files in /usr/gamesgnu/Utilities covered by the GNU Public Licenseinclude/Source for files in /usr/includekerberosIV/Source for Kerbereros version IVkerberos5/Source for Kerbereros version 5lib/Source for files in /usr/liblibexec/Source for files in /usr/libexecrelease/Files required to produce a FreeBSD releasesbin/Source for files in /sbinsecure/FreeSec sourcesshare/Source for files in /sbinsys/Kernel source filestools/Tools used for maintenance and testing of
FreeBSDusr.bin/Source for files in /usr/binusr.sbin/Source for files in /usr/sbinBasics
&chap.tools;
&chap.secure;
KernelHistory of the Unix KernelSome history of the Unix/BSD kernel, system calls, how do
processes work, blocking, scheduling, threads (kernel),
context switching, signals, interrupts, modules, etc.
&chap.locking;
Memory Management
&chap.vm;
&chap.dma;
I/O SystemUFSUFS, FFS, Ext2FS, JFS, inodes, buffer cache, labeling,
locking, metadata, soft-updates, LFS, portalfs, procfs,
vnodes, memory sharing, memory objects, TLBs, cachingInterprocess CommunicationSignalsSignals, pipes, semaphores, message queues, shared memory,
ports, sockets, doorsNetworkingSocketsSockets, bpf, IP, TCP, UDP, ICMP, OSI, bridging,
firewalling, NAT, switching, etc
&chap.ipv6;
Network FilesystemsAFSAFS, NFS, SANs etc]Terminal HandlingSysconsSyscons, tty, PCVT, serial console, screen savers,
etcSoundOSSOSS, waveforms, etcDevice Drivers
&chap.driverbasics;
&chap.isa;
&chap.pci;
&chap.scsi;
&chap.usb;
NewBusThis chapter will talk about the FreeBSD NewBus
architecture.Architectures
&chap.x86;
AlphaTalk about the architectural specifics of
FreeBSD/alpha.Explanation of allignment errors, how to fix, how to
ignore.Example assembly language code for FreeBSD/alpha.IA-64Talk about the architectural specifics of
FreeBSD/ia64.DebuggingTrussvarious descriptions on how to debug certain aspects of
the system using truss, ktrace, gdb, kgdb, etcCompatibility LayersLinuxLinux, SVR4, etcAppendicesDaveAPattersonJohnLHennessy1998Morgan Kaufmann Publishers,
Inc.1-55860-428-6Morgan Kaufmann Publishers, Inc.Computer Organization and DesignThe Hardware / Software Interface1-2W.RichardStevens1993Addison Wesley Longman,
Inc.0-201-56317-7Addison Wesley Longman, Inc.Advanced Programming in the Unix Environment1-2MarshallKirkMcKusickKeithBosticMichaelJKarelsJohnSQuarterman1996Addison-Wesley Publishing Company,
Inc.0-201-54979-4Addison-Wesley Publishing Company, Inc.The Design and Implementation of the 4.4 BSD Operating System1-2AlephOnePhrack 49; "Smashing the Stack for Fun and Profit"ChrispinCowanCaltonPuDaveMaierStackGuard; Automatic Adaptive Detection and Prevention of
Buffer-Overflow AttacksToddMillerTheode Raadtstrlcpy and strlcat -- consistent, safe string copy and
concatenation.
diff --git a/en_US.ISO8859-1/books/developers-handbook/book.sgml b/en_US.ISO8859-1/books/developers-handbook/book.sgml
index 10879f994e..a9c8c3212b 100644
--- a/en_US.ISO8859-1/books/developers-handbook/book.sgml
+++ b/en_US.ISO8859-1/books/developers-handbook/book.sgml
@@ -1,518 +1,518 @@
%bookinfo;
%man;
%chapters;
%authors;
- %mailing-lists;
+ %mailing-lists;
]>
FreeBSD Developers' HandbookThe FreeBSD Documentation ProjectAugust 200020002001The FreeBSD Documentation Project
&bookinfo.legalnotice;
Welcome to the Developers' Handbook. 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. It may also be downloaded in a variety of
formats and compression options from the FreeBSD FTP
server or one of the numerous mirror
sites.IntroductionDeveloping on FreeBSDThis will need to discuss FreeBSD as a development
platform, the vision of BSD, architectural overview, layout of
/usr/src, history, etc.Thank you for considering FreeBSD as your development
platform! We hope it will not let you down.The BSD VisionArchitectural OverviewThe Layout of /usr/srcThe complete source code to FreeBSD is available from our
public CVS repository. The source code is normally installed in
/usr/src which contains the
following subdirectories.DirectoryDescriptionbin/Source for files in
/bincontrib/Source for files from contributed software.crypto/DES sourceetc/Source for files in /etcgames/Source for files in /usr/gamesgnu/Utilities covered by the GNU Public Licenseinclude/Source for files in /usr/includekerberosIV/Source for Kerbereros version IVkerberos5/Source for Kerbereros version 5lib/Source for files in /usr/liblibexec/Source for files in /usr/libexecrelease/Files required to produce a FreeBSD releasesbin/Source for files in /sbinsecure/FreeSec sourcesshare/Source for files in /sbinsys/Kernel source filestools/Tools used for maintenance and testing of
FreeBSDusr.bin/Source for files in /usr/binusr.sbin/Source for files in /usr/sbinBasics
&chap.tools;
&chap.secure;
KernelHistory of the Unix KernelSome history of the Unix/BSD kernel, system calls, how do
processes work, blocking, scheduling, threads (kernel),
context switching, signals, interrupts, modules, etc.
&chap.locking;
Memory Management
&chap.vm;
&chap.dma;
I/O SystemUFSUFS, FFS, Ext2FS, JFS, inodes, buffer cache, labeling,
locking, metadata, soft-updates, LFS, portalfs, procfs,
vnodes, memory sharing, memory objects, TLBs, cachingInterprocess CommunicationSignalsSignals, pipes, semaphores, message queues, shared memory,
ports, sockets, doorsNetworkingSocketsSockets, bpf, IP, TCP, UDP, ICMP, OSI, bridging,
firewalling, NAT, switching, etc
&chap.ipv6;
Network FilesystemsAFSAFS, NFS, SANs etc]Terminal HandlingSysconsSyscons, tty, PCVT, serial console, screen savers,
etcSoundOSSOSS, waveforms, etcDevice Drivers
&chap.driverbasics;
&chap.isa;
&chap.pci;
&chap.scsi;
&chap.usb;
NewBusThis chapter will talk about the FreeBSD NewBus
architecture.Architectures
&chap.x86;
AlphaTalk about the architectural specifics of
FreeBSD/alpha.Explanation of allignment errors, how to fix, how to
ignore.Example assembly language code for FreeBSD/alpha.IA-64Talk about the architectural specifics of
FreeBSD/ia64.DebuggingTrussvarious descriptions on how to debug certain aspects of
the system using truss, ktrace, gdb, kgdb, etcCompatibility LayersLinuxLinux, SVR4, etcAppendicesDaveAPattersonJohnLHennessy1998Morgan Kaufmann Publishers,
Inc.1-55860-428-6Morgan Kaufmann Publishers, Inc.Computer Organization and DesignThe Hardware / Software Interface1-2W.RichardStevens1993Addison Wesley Longman,
Inc.0-201-56317-7Addison Wesley Longman, Inc.Advanced Programming in the Unix Environment1-2MarshallKirkMcKusickKeithBosticMichaelJKarelsJohnSQuarterman1996Addison-Wesley Publishing Company,
Inc.0-201-54979-4Addison-Wesley Publishing Company, Inc.The Design and Implementation of the 4.4 BSD Operating System1-2AlephOnePhrack 49; "Smashing the Stack for Fun and Profit"ChrispinCowanCaltonPuDaveMaierStackGuard; Automatic Adaptive Detection and Prevention of
Buffer-Overflow AttacksToddMillerTheode Raadtstrlcpy and strlcat -- consistent, safe string copy and
concatenation.
diff --git a/en_US.ISO8859-1/books/handbook/Makefile b/en_US.ISO8859-1/books/handbook/Makefile
index 60f5dff022..ef29097fe2 100644
--- a/en_US.ISO8859-1/books/handbook/Makefile
+++ b/en_US.ISO8859-1/books/handbook/Makefile
@@ -1,72 +1,71 @@
#
-# $FreeBSD: doc/en_US.ISO_8859-1/books/handbook/Makefile,v 1.31 2001/02/28 22:50:05 nik Exp $
+# $FreeBSD: doc/en_US.ISO8859-1/books/handbook/Makefile,v 1.32 2001/05/14 03:07:50 murray Exp $
#
# Build the FreeBSD Handbook.
#
MAINTAINER=nik@FreeBSD.org
DOC?= book
FORMATS?= html-split
INSTALL_COMPRESSED?= gz
INSTALL_ONLY_COMPRESSED?=
#
# SRCS lists the individual SGML files that make up the document. Changes
# to any of these files will force a rebuild
#
# SGML content
SRCS= book.sgml
SRCS+= advanced-networking/chapter.sgml
SRCS+= backups/chapter.sgml
SRCS+= basics/chapter.sgml
SRCS+= bibliography/chapter.sgml
SRCS+= boot/chapter.sgml
SRCS+= contrib/chapter.sgml
SRCS+= cutting-edge/chapter.sgml
SRCS+= disks/chapter.sgml
SRCS+= eresources/chapter.sgml
SRCS+= hw/chapter.sgml
SRCS+= install/chapter.sgml
SRCS+= introduction/chapter.sgml
SRCS+= kernelconfig/chapter.sgml
SRCS+= kerneldebug/chapter.sgml
SRCS+= kernelopts/chapter.sgml
SRCS+= l10n/chapter.sgml
SRCS+= linuxemu/chapter.sgml
SRCS+= mail/chapter.sgml
SRCS+= mirrors/chapter.sgml
SRCS+= pgpkeys/chapter.sgml
SRCS+= policies/chapter.sgml
SRCS+= ppp-and-slip/chapter.sgml
SRCS+= printing/chapter.sgml
SRCS+= security/chapter.sgml
SRCS+= serialcomms/chapter.sgml
SRCS+= sound/chapter.sgml
SRCS+= staff/chapter.sgml
SRCS+= users/chapter.sgml
SRCS+= x11/chapter.sgml
SRCS+= ports/chapter.sgml
# Entities
SRCS+= authors.ent
SRCS+= chapters.ent
-SRCS+= mailing-lists.ent
SYMLINKS= ${DESTDIR} index.html handbook.html
# XXX The Handbook build currently overflows some internal, hardcoded
# limits in pdftex. Until we split the Handbook up, build the PDF
# version using ps2pdf instead of pdftex.
book.tex-pdf:
touch book.tex-pdf
book.pdf: book.ps
ps2pdf book.ps book.pdf
DOC_PREFIX?= ${.CURDIR}/../../..
.include "${DOC_PREFIX}/share/mk/doc.project.mk"
diff --git a/en_US.ISO8859-1/books/handbook/book.sgml b/en_US.ISO8859-1/books/handbook/book.sgml
index 1d7516a311..1a34aa368c 100644
--- a/en_US.ISO8859-1/books/handbook/book.sgml
+++ b/en_US.ISO8859-1/books/handbook/book.sgml
@@ -1,136 +1,136 @@
%man;
%bookinfo;
%freebsd;
%chapters;
%authors;
- %mailing-lists;
+ %mailing-lists;
%newsgroups;
]>
FreeBSD HandbookThe FreeBSD Documentation ProjectFebruary 19991995199619971998199920002001The 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.
It may also be downloaded in a variety of formats and compression
options from the FreeBSD FTP
server or one of the numerous mirror sites. If you would prefer
to have a hard copy of the handbook, you can purchase one at the
FreeBSD Mall. You
may also want to Search the
Handbook.Getting Started
&chap.introduction;
&chap.install;
&chap.basics;
&chap.ports;
System Administration
&chap.boot;
&chap.users;
&chap.kernelconfig;
&chap.security;
&chap.printing;
&chap.disks;
&chap.backups;
&chap.x11;
&chap.l10n;
&chap.sound;
Network Communications
&chap.serialcomms;
&chap.ppp-and-slip;
&chap.advanced-networking;
&chap.mail;
Advanced topics
&chap.cutting-edge;
&chap.contrib;
&chap.policies;
&chap.kerneldebug;
&chap.linuxemu;
Appendices
&chap.mirrors;
&chap.bibliography;
&chap.eresources;
&chap.staff;
&chap.pgpkeys;
&chap.hw;
diff --git a/en_US.ISO8859-1/books/porters-handbook/book.sgml b/en_US.ISO8859-1/books/porters-handbook/book.sgml
index a3a570a4c7..7a6dce195a 100644
--- a/en_US.ISO8859-1/books/porters-handbook/book.sgml
+++ b/en_US.ISO8859-1/books/porters-handbook/book.sgml
@@ -1,4487 +1,4487 @@
%man;
%bookinfo;
%authors;
-
+
%mailing-lists;
]>
FreeBSD Porter's HandbookThe FreeBSD Documentation ProjectApril 20002000The FreeBSD Documentation
Project
&bookinfo.legalnotice;
Making a port yourselfSo, 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 the &a.ports;.Only a fraction of the variables
(VAR) that can be
overridden are mentioned in this document. Most (if not all)
are documented at the start of bsd.port.mk.
This file uses a non-standard tab setting.
Emacs and
Vim should recognize 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
# Date created: 5 December 1994
# Whom: asami
#
# $FreeBSD$
#
PORTNAME= oneko
PORTVERSION= 1.1b
CATEGORIES= games
MASTER_SITES= ftp://ftp.cs.columbia.edu/archives/X11R5/contrib/
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 $FreeBSD$ 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
pkg-comment,
pkg-descr, and
pkg-plist, and their
pkg- prefix distinguishes them from
other files.pkg-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 screenpkg-descrThis 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.edupkg-plistThis 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 installation, 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
distinfo.Testing the portYou should make sure that the port rules do exactly what you
want them to do, including packaging up the port. These are the
important points you need to verify.pkg-plist does not contain anything not
installed by your portpkg-plist 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 it 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, you 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 DOs and DON'Ts 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!).
Also add a short description of the program you ported
to the Description field of the PR and
the shar or uuencoded tarfile to the
Fix field. The latter one helps the committers
a lot, who use scripts for the ports-work.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 the
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” in the FreeBSD
Handbook and other files. Isn't that great?!? :-)You can make our work a lot easier, if you use a good
description in the synopsis of the problem report.
We prefer something like
“New port: <short description of the port>” for
new ports and
“Update port: <category>/<port> <short description
of the update>” for port updates.
If you stick to this scheme, the chance that one takes a look at
your PR soon is much bigger.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.
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 patch files named
patch-* are found in
PATCHDIR (defaults to the
files 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
we can “house” it ourselves
on ftp.FreeBSD.org.
The distfile must be placed into
~/public_distfiles/ of someone's
freefall account.
Ask the person who commits your port to do this.
This person will also set MASTER_SITES to
MASTER_SITE_LOCAL and
MASTER_SITE_SUBDIR to their
freefall username.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 is only 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-* where
* denotes the sequence in which the
patches will be applied — these are done in
alphabetical order, thus aa
first, ab second and so on. If you wish,
you can use names that indicate the pathnames of the files that
are patched, such as patch-Imakefile or
patch-src-config.h. 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 in your
configure script and save it in the
scripts subdirectory. As mentioned above, you
can also do this with 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 named something like
foozolix-1.2.tar.gz? If so, you can go on
to the next step. If not, you should look at overriding any of
the DISTNAME, 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.PORTNAME and PORTVERSIONYou should set PORTNAME to the
base name of your port, and PORTVERSION
to the version number of the port.PORTREVISION and
PORTEPOCHPORTREVISIONThe PORTREVISION variable is a
monotonically increasing value which is reset to 0 with
every increase of PORTVERSION (i.e.
every time a new official vendor release is made), and
appended to the package name if non-zero.
PORTREVISION is increased each time a
change is made to the FreeBSD port which significantly
affects the content or stucture of the derived
package.Examples of when PORTREVISION should be bumped:Addition of patches to correct security
vulnerabilities, bugs, or to add new functionality to
the FreeBSD port.Changes to the port makefile to enable or disable
compile-time options in the package.Changes in the packing list or the install-time
behaviour of the package (e.g. change to a script
which generates initial data for the package, like ssh
host keys).Version bump of a port's shared library dependency
(in this case, someone trying to install the old
package after installing a newer version of the
dependency will fail since it will look for the old
libfoo.x instead of libfoo.(x+1)).Silent changes to the port distfile which have
significant functional differences, i.e. changes to
the distfile requiring a correction to
distinfo with no corresponding change to
PORTVERSION, where a diff
-ru of the old and new versions shows
non-trivial changes to the code.Examples of changes which do not require a
PORTREVISION bump:Style changes to the port skeleton with no
functional change to what appears in the resulting
package.Changes to MASTER_SITES or
other functional changes to the port which do not
effect the resulting package.Trivial patches to the distfile such as correction
of typos, which are not important enough that users of
the package should go to the trouble of
upgrading.Build fixes which cause a package to become
compilable where it was previously failing (as long as
the changes do not introduce any functional change on
any other platforms on which the port did previously
build). Since PORTREVISION reflects
the content of the package, if no package was
previously buildable then there is no need to increase
PORTREVISION to mark a
change.A rule of thumb is to ask yourself whether a change
committed to a port is something which someone, somewhere,
would benefit from having (either because of an
enhancement, fix, or by virtue that the new package will
actually work for them). If yes, the
PORTREVISION should be bumped so that
automated tools (e.g. pkg_version)
will highlight the fact that a new package is
available.PORTEPOCHFrom time to time a software vendor or FreeBSD porter
will do something silly and release a version of their
software which is actually numerically less than the
previous version. An example of this is a port which goes
from foo-20000801 to foo-1.0 (the former will be
incorrectly treated as a newer version since 20000801 is a
numerically greater value than 1).In situations such as this, the
PORTEPOCH version should be increased.
If PORTEPOCH is nonzero it is appended
to the package name as described in section 0 above.
PORTEPOCH is never decreased or reset
to zero, because that would cause comparison to a package
from an earlier epoch to fail (i.e. the package would not
be detected as out of date): the new version number (e.g.
1.0,1 in the above example) is still
numerically less than the previous version (2000801), but
the ,1 suffix is treated specially by
automated tools and found to be greater than the implied
suffix ",0" on the earlier package)It is expected that PORTEPOCH will
not be used for the majority of ports, and that sensible
use of PORTVERSION can often pre-empt
it becoming necessary if a future release of the software
should change the version structure. However, care is
needed by FreeBSD porters when a vendor release is made
without an official version number - such as a code
"snapshot" release. The temptation is to label the
release with the release date, which will cause problems
as in the example above when a new "official" release is
made.For example, if a snapshot release is made on the date
20000917, and the previous version of the software was
version 1.2, the snapshot release should be given a
PORTVERSION of 1.2.20000917 or similar,
not 20000917, so that the succeeding release, say 1.3, is
still a numerically greater value.Example of PORTREVISION and
PORTEPOCH usageThe gtkmumble port, version 0.10, is committed to the
ports collection.PORTNAME= gtkmumble
PORTVERSION= 0.10PKGNAME becomes
gtkmumble-0.10.A security hole is discovered which requires a local
FreeBSD patch. PORTREVISION is bumped
accordingly.PORTNAME= gtkmumble
PORTVERSIOn= 0.10
PORTREVISION= 1PKGNAME becomes
gtkmumble-0.10_1A new version is released by the vendor, numbered 0.2
(it turns out the author actually intended
0.10 to actually mean
0.1.0, not what comes after
0.9 - oops, too late now). Since the new minor
version 2 is numerically less than the
previous version 10 the
PORTEPOCH must be bumped to manually
force the new package to be detected as "newer". Since it
is a new vendor release of the code,
PORTREVISION is reset to 0 (or removed
from the makefile).PORTNAME= gtkmumble
PORTVERSION= 0.2
PORTEPOCH= 1PKGNAME becomes
gtkmumble-0.2,1The next release is 0.3. Since
PORTEPOCH never decreases, the version
variables are now:PORTNAME= gtkmumble
PORTVERSION= 0.3
PORTEPOCH= 1PKGNAME becomes
gtkmumble-0.3,1If PORTEPOCH were reset
to 0 with this upgrade, someone who had
installed the gtkmumble-0.10_1 package would not detect
the gtkmumble-0.3 package as newer, since
3 is still numerically less than
10.PKGNAMEPREFIX and PKGNAMESUFFIXTwo optional variables, PKGNAMEPREFIX and
PKGNAMESUFFIX, are combined with
PORTNAME and
PORTVERSION to
form PKGNAME as
${PKGNAMEPREFIX}${PORTNAME}${PKGNAMESUFFIX}-${PORTVERSION}.
Make sure this conforms to our guidelines for a good package
name. In particular, you are not allowed to use a
hyphen (-) in
PORTVERSION. Also, if the package name
has the language- or the
compiled.specifics part, use
PKGNAMEPREFIX and
PKGNAMESUFFIX, respectively. Do not make
them part of PORTNAME.DISTNAMEDISTNAME is the name of the port as
called by the authors of the software.
DISTNAME defaults to
${PORTNAME}-${PORTVERSION}, so override it if necessary.
DISTNAME is only used in two places.
First, the distribution file list
(DISTFILES) defaults to
${DISTNAME}${EXTRACT_SUFX}.
Second, the distribution file is expected to extract into a
subdirectory named WRKSRC, which defaults
to work/${DISTNAME}.PKGNAMEPREFIX and
PKGNAMESUFFIX do not affect
DISTNAME. Also note that when
WRKSRC is equal to
work/${PORTNAME}-${PORTVERSION}
while the original source archive is named something other than
${PORTNAME}-${PORTVERSION}${EXTRACT_SUFX},
you should probably leave DISTNAME
alone— you are better off defining
DISTFILES than having to set both
DISTNAME and WRKSRC
(and possibly EXTRACT_SUFX).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 your 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.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 popular
archives such as X-contrib, GNU, or Perl CPAN, you may be able
refer to those sites in an easy compact form using
MASTER_SITE_*
(e.g., MASTER_SITE_XCONTRIB and
MASTER_SITE_PERL_GNU). Simply set
MASTER_SITES to one of these variables and
MASTER_SITE_SUBDIR to the path within the
archive. Here is an example:MASTER_SITES= ${MASTER_SITE_XCONTRIB}
MASTER_SITE_SUBDIR= applicationsThese variables are defined in
/usr/ports/Mk/bsd.sites.mk. There are
new archives added all the time, so make sure to check the
latest version of this file before submitting a port.The 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., WRKSRC) 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, use the EXTRA_PATCHES variable to
point to those files and bsd.port.mk
will automatically apply them for you. In particular, do
not copy patch files into the
PATCHDIR directory—that directory may
not be writable.Note that 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 a detailed description of the responsibilities of maintainers,
refer to the 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, 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
regular 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 into 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, 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 as
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 extraction 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 having the source of
the other port extracted in addition to having it 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 have 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; it 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, use the
variable ${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 always be built (and installed, by default), and the
dependency will go into the packages as well. If this is really
what you need, you should probably write it as
BUILD_DEPENDS and
RUN_DEPENDS instead—at least the
intention will be clear.Optional dependenciesSome large applications can be built in a number of
configurations, adding functionality if one of a number of
libraries or applications is available. Since not all users
want those libraries or applications, the ports system
provides hooks that the port author can use to decide which
configuration should be built. Supporting these properly will
make uses happy, and effectively provide 2 or more ports for the
price of one.The easiest of these to use is
WITHOUT_X11. If the port can be built both
with and without X support, then it should normally be built
with X support. If WITHOUT_X11 is defined,
then the version that does not have X support should be
built.Various parts of GNOME have such knobs, though they are
slightly more difficult to use. The variables to use in the
Makefile are WANT_*
and HAVE_*. If the application can be
built both with or without one of the dependencies listed
below, then the Makefile should set
WANT_PKG, and should build the version that
uses PKG if HAVE_PKG
is defined.The WANT_* variables currently
supported this way are WANT_GLIB,
WANT_GTK, WANT_ESOUND,
WANT_IMLIB, and
WANT_GNOME.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.Shared LibrariesIf your port installs one or more shared libraries, define a
INSTALLS_SHLIB make variable, which will instruct
a bsd.port.mk to run
${LDCONFIG} -m on the directory where the
new library is installed (usually
PREFIX/lib) during
post-install target to register it into the
shared library cache. This variable, when defined, will also
facilitate addition of an appropriate
@exec /sbin/ldconfig -m and
@unexec /sbin/ldconfig -R pair into 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.If you need, you can override default location where the new
library is installed by defining LDCONFIG_DIRS
make variable, which should contain a list of directories into which
shared libraries are to be installed. For example if your port
installs shared libraries into
PREFIX/lib/foo and
PREFIX/lib/bar directories
you could use the following in your
Makefile:INSTALLS_SHLIB= yes
LDCONFIG_DIRS= %%PREFIX%%/lib/foo %%PREFIX%%/lib/barNote that content of LDCONFIG_DIRS is passed
through &man.sed.1; just like the rest of pkg-plist,
so PLIST_SUB substitutions also apply here. It is
recommended that you use %%PREFIX%% for
PREFIX, %%LOCALBASE%% for
LOCALBASE and %%X11BASE%% for
X11BASE.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 for users 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
PKGNAMESUFFIX so
the packages will have different names.This will be best demonstrated by an example. This is part of
japanese/xdvi300/Makefile;PORTNAME= xdvi
PORTVERSION= 17
PKGNAMEPREFIX= ja-
PKGNAMESUFFIX= ${RESOLUTION}
:
# 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 regular set of
subdirectories like FILESDIR and
SCRIPTDIR 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 versionsPlease 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?). 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.ManpagesThe MAN[1-9LN] variables will automatically add
any manpages to pkg-plist (this means you must
not list manpages in the
pkg-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
pkg-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 these 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.
editors/emacs will be used 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. This probably is not a good
idea for ports because you need to duplicate the same information
in three places
(Makefile and
@exec/@unexec of
pkg-plist; see below). However, if you have
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
pkg-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, it was necessary to patch the main
Makefile.in so it would 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. The installation of the
info info file was also removed 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 pkg-plist
--- pkg-plist 1997/03/04 08:04:00 1.15
+++ pkg-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 call
install-info with the installed
info files. (It is no longer necessary to create the
dir file yourself;
install-info automatically creates this
file if it does not exist.)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,8 @@
post-install:
.for file in emacs-19.34 emacsclient etags ctags b2m
strip ${PREFIX}/bin/${file}
.endfor
+.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>Edit pkg-plist and add equivalent
@exec statements and also
@unexec for
pkg_delete.Index: pkg-plist
===================================================================
RCS file: /usr/cvs/ports/editors/emacs/pkg-plist,v
retrieving revision 1.15
diff -u -r1.15 pkg-plist
--- pkg-plist 1997/03/04 08:04:00 1.15
+++ pkg-plist 1997/05/20 10:25:12 1.17
@@ -16,7 +14,14 @@
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 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-* filesThere are some tricks we have not mentioned yet about the
pkg-* files
that come in handy sometimes.pkg-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.pkg-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 as
${SH} pkg-install ${PKGNAME}
PRE-INSTALL and the second time as
${SH} pkg-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.pkg-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 pkg-plist based on make
variablesSome ports, particularly the p5- ports, need to change their
pkg-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 pkg-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
pkg-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 pkg-plist. That way, when you upgrade the port,
you will not have to change dozens (or in some cases, hundreds) of
lines in the pkg-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
pkg-* filesAll the names of pkg-* files
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-* files
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. (PKGDIR defaults to
${MASTERDIR}.)VariableDefault valueCOMMENT${PKGDIR}/pkg-commentDESCR${PKGDIR}/pkg-descrPLIST${PKGDIR}/pkg-plistPKGINSTALL${PKGDIR}/pkg-installPKGDEINSTALL${PKGDIR}/pkg-deinstallPKGREQ${PKGDIR}/pkg-reqPKGMESSAGE${PKGDIR}/pkg-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 of the law in some countries (such as violating a patent).
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 for 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.,
patented 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 Handbook.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 via &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 the PR as is.Once again, please use &man.diff.1; and not &man.shar.1; to send
updates to existing ports!Dos and Don'tsHere is a list of common dos and don'ts 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.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
modify one of the pkg-*
files, 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
${WRKDIRPREFIX}${.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-CURRENT199501, 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 &man.semctl.2; change2270022.2.8-RELEASE2280002.2-STABLE after 2.2.8-RELEASE2280013.0-CURRENT before &man.mount.2; change3000003.0-CURRENT after &man.mount.2; change3000013.0-CURRENT after &man.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-RELEASE3200003.2-STABLE3200013.2-STABLE after binary-incompatible IPFW and
socket changes3200023.3-RELEASE3300003.3-STABLE3300013.3-STABLE after adding &man.mkstemp.3;
to libc3300023.4-RELEASE3400003.4-STABLE3400014.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 &man.dladdr.3;4000034.0-CURRENT after __deregister_frame_info dynamic
linker bug fix (also 4.0-CURRENT after EGCS 1.1.2
integration)
4000044.0-CURRENT after &man.suser.9; API change
(also 4.0-CURRENT after newbus)4000054.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
specinfo pointer4000094.0-CURRENT after fixing a hole
in &man.jail.2;4000104.0-CURRENT after the sigset_t
datatype change4000114.0-CURRENT after the cutover to the GCC 2.95.2
compiler4000124.0-CURRENT after adding pluggable linux-mode
ioctl handlers4000134.0-CURRENT after importing OpenSSL4000144.0-CURRENT after the C++ ABI change in GCC 2.95.2
from -fvtable-thunks to -fno-vtable-thunks by
default4000154.0-CURRENT after importing OpenSSH4000164.0-RELEASE4000174.0-STABLE after 4.0-RELEASE4000184.0-STABLE after merging libxpg4 code into
libc.4000204.0-STABLE after upgrading Binutils to 2.10.0, ELF
branding changes, and tcsh in the base system.4000214.1-RELEASE4100004.1-STABLE after 4.1-RELEASE4100014.1-STABLE after &man.setproctitle.3; moved from
libutil to libc.4100024.1.1-RELEASE4110004.1.1-STABLE after 4.1.1-RELEASE4110014.2-RELEASE4200004.2-STABLE after combining libgcc.a and
libgcc_r.a, and associated GCC linkage changes.4200015.0-CURRENT5000005.0-CURRENT after adding addition ELF header fields,
and changing our ELF binary branding method.5000015.0-CURRENT after kld metadata changes.5000025.0-CURRENT after buf/bio changes.5000035.0-CURRENT after binutils upgrade.5000045.0-CURRENT after merging libxpg4 code into
libc and after TASKQ interface introduction.5000055.0-CURRENT after the addition of AGP
interfaces.5000065.0-CURRENT after Perl upgrade to 5.6.05000075.0-CURRENT after the update of KAME code to
2000/07 sources.5000085.0-CURRENT after ether_ifattach() and
ether_ifdetach() changes.5000095.0-CURRENT after changing mtree defaults
back to original variant, adding -L to follow
symlinks.5000105.0-CURRENT after kqueue API changed.5000115.0-CURRENT after &man.setproctitle.3; moved from
libutil to libc.5000125.0-CURRENT after the first SMPng commit.5000135.0-CURRENT after <sys/select.h> moved to
<sys/selinfo.h>.5000145.0-CURRENT after combining libgcc.a and
libgcc_r.a, and associated GCC linkage changes.5000155.0-CURRENT after change allowing libc and libc_r
to be linked together, deprecating -pthread option.5000165.0-CURRENT after switch from struct ucred to
struct xucred to stabilize kernel-exported API for
mountd et al.5000175.0-CURRENT after addition of CPUTYPE make variable
for controlling CPU-specific optimizations.5000185.0-CURRENT after locale names renaming.500020Note 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 elf)LOCALBASEThe 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
PORTNAME. 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.)You can also use the pkg-message file to
display messages upon installation. See the using
pkg-message section for
details.pkg-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 (${PORTNAME} or
${PKGNAMEPREFIX}${PORTNAME}
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.
pkg-comment, pkg-descr, and
pkg-plist.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
diffs of 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.Make sure your application isn't installing things in
/usr/local instead of PREFIX.
A quick test for this is to do this is:&prompt.root; make clean; make package PREFIX=/var/tmp/port-nameIf anything is installed outside of PREFIX,
making the package creation process will complain that it
can't find the files.This does not test for the existence of internal references,
or correct use of LOCALBASE for references to
files from other ports. Testing the installation in
/var/tmp/port-name
to do that that while you have it installed would do that.Do not set USE_X_PREFIX unless your port
truly requires 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/pixmaps
@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 as 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/nologin
vpopmail:*:89:89::0:0:User &:/usr/local/vpopmail:/nonexistentPlease 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.An example of a Makefile respecting
the CFLAGS variable follows. Note the
+=:CFLAGS += -Wall -WerrorHere is an example which does not respect the
CFLAGS variable:CFLAGS = -Wall -WerrorThe CFLAGS variable is defined on
FreeBSD systems in /etc/make.conf. The
first example appends additional flags to the
CFLAGS variable, preserving any system-wide
definitions. The second example clobbers anything previously
defined.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.README.htmlDo not include the README.html file. This
file is not part of the cvs collection but is generated using the
make readme command.
MiscellaneaThe files pkg-comment,
pkg-descr, 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" line is only needed when the PORTVERSION
variable is not specific enough to describe 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>
#
# $FreeBSD$
[ ^^^^^^^^^ This will be automatically replaced with RCS ID string by CVS
when it is committed to our repository. If upgrading a port, do not alter
this line back to "$FreeBSD$". CVS deals with it automatically.]
#
[section to describe the port itself and the master site - PORTNAME
and PORTVERSION are always first, followed by CATEGORIES,
and then MASTER_SITES, which can be followed by MASTER_SITE_SUBDIR.
PKGNAMEPREFIX and PKGNAMESUFFIX, if needed, will be after that.
Then comes DISTNAME, EXTRACT_SUFX and/or DISTFILES, and then
EXTRACT_ONLY, as necessary.]
PORTNAME= xdvi
PORTVERSION= 18.2
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
PKGNAMEPREFIX= ja-
DISTNAME= xdvi-pl18
[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) whom 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
[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
pkg-plist missing. Create an empty
pkg-plist.&prompt.root; touch pkg-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 honors PREFIX (which it should)
you can then install the port and create the package list.&prompt.root; make install PREFIX=/var/tmp/port-name
&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; it isn't
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.
The info/dir file should not be listed
and appropriate install-info lines should
be added as noted in the info
files section. Any
libraries installed by the port should be listed as specified in the
shared libraries 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_region-name-compiled.specifics-version.numbers.The package name is defined as
${PKGNAMEPREFIX}${PORTNAME}${PKGNAMESUFFIX}-${PORTVERSION}.
Make sure to set the variables to conform to 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.If the port is specific to a certain region within the
language area, add the two letter country code as well.
Examples are en_US for US English and
fr_CH for Swiss French.The language- part should
be set in the PKGNAMEPREFIX variable.The first letter of name part
should be lowercase. (The rest of the name can contain
capital letters, so use your own discretion when you are
converting a software name that has some capital letters in it.)
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 compiled.specifics part
should be set in the PKGNAMESUFFIX
variable.The version string should follow a dash
(-) and be a period-separated list of
integers and single lowercase alphabetics. In particular,
it is not permissible to have another dash inside the
version string. 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. If the software
version has strings like "alpha", "beta", "rc", or "pre", take
the first letter and put it immediately after a period.
If the version string continues after those names, the
numbers should follow the single alphabet without an extra
period between them.The idea is to make it easier to sort ports by looking
at the version string. In particular, make sure version
number components are always delimited by a period, and
if the date is part of the string, use the
yyyy.mm.dd
format, not
dd.mm.yyyy
or the non-Y2K compliant
yy.mm.dd
format.Here are some (real) examples on how to convert the name
as called by the software authors to a suitable package
name:Distribution NamePKGNAMEPREFIXPORTNAMEPKGNAMESUFFIXPORTVERSIONReasonmule-2.2.2(empty)mule(empty)2.2.2No changes requiredXFree86-3.3.6(empty)XFree86(empty)3.3.6No changes requiredEmiClock-1.0.2(empty)emiclock(empty)1.0.2No uppercase names for single programsrdist-1.3alpha(empty)rdist(empty)1.3.aNo strings like alpha
allowedes-0.9-beta1(empty)es(empty)0.9.b1No strings like beta
allowedmailman-2.0rc3(empty)mailman(empty)2.0.r3No strings like rc
allowedv3.3beta021.src(empty)tiff(empty)3.3What the heck was that anyway?tvtwm(empty)tvtwm(empty)pl11Version string always requiredpiewm(empty)piewm(empty)1.0Version string always requiredxvgr-2.10pl1(empty)xvgr(empty)2.10.1pl allowed only when no
major/minor version numbersgawk-2.15.6ja-gawk(empty)2.15.6Japanese language versionpsutils-1.13(empty)psutils-letter1.13Papersize hardcoded at package build timepkfonts(empty)pkfonts3001.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
(yyyy.mm.dd)
as the version.CategoriesAs you already know, ports are classified in several categories.
But for this to work, it is important that porters and users understand
what each category is for and how we decide 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 the AfterStep window manager.archiversArchiving 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 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).elisp*Emacs-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.frenchFrench language support.ftpFTP client and server utilities. If your
port speaks both FTP and HTTP, put it in
ftp with a secondary
category of www.gamesGames.germanGerman language support.gnome*Ports from the GNU Object Model Environment (GNOME)
Project.graphicsGraphics utilities.hebrewHebrew language support.ircInternet Relay Chat utilities.ipv6*IPv6 related software.japaneseJapanese language support.javaJava language support.kde*Ports from the K Desktop Environment (KDE)
Project.koreanKorean language support.langProgramming languages.linux*Linux applications and support utilities.mailMail software.mathNumerical computation software and other utilities
for mathematics.mboneMBone applications.miscMiscellaneous utilities—basically things that
do not belong 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.picobsdPorts to support PicoBSD.plan9*Various programs from Plan9.printPrinting software. Desktop publishing tools
(previewers, etc.) belong here too.python*Software written in python.ruby*Software written in ruby.russianRussian language support.scienceScientific ports that don't fit into other
categories such as astro,
biology and
math.securitySecurity utilities.shellsCommand line shells.sysutilsSystem utilities.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.tcl82*Ports that use Tcl version 8.2 to run.textprocText processing utilities. It does not include
desktop publishing tools, which go to print/.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.tk82*Ports that use Tk version 8.2 to run.tkstep80*Ports that use TkSTEP version 8.0 to run.ukrainianUkrainian language support.vietnameseVietnamese language support.windowmaker*Ports to support the WindowMaker window
managerwwwSoftware related to the World Wide Web. HTML language
support belongs here too.x11The X window system and friends. This category is only
for software that directly supports 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 the 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.zope*Zope support.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 issue. 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
any 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.Emacs modes should be
placed in the same ports category as the application
supported by the mode, not in
editors. For example, an
Emacs mode to edit source
files of some programming language should go into
lang.
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 we import it. If you are a committer, send a note
to the &a.ports; so we can discuss it first—too often new ports are
imported to the 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
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. Now that you know how to do a port,
have 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/catalog b/en_US.ISO8859-1/share/sgml/catalog
index 5ebe8768fc..f92e609315 100644
--- a/en_US.ISO8859-1/share/sgml/catalog
+++ b/en_US.ISO8859-1/share/sgml/catalog
@@ -1,9 +1,11 @@
-- ...................................................................... --
-- FreeBSD SGML Public Identifiers ...................................... --
- -- $FreeBSD: doc/share/sgml/catalog,v 1.9 2000/07/08 16:31:28 phantom Exp $
+ -- $FreeBSD: doc/en_US.ISO8859-1/share/sgml/catalog,v 1.1 2000/09/28 23:29:45 nbm Exp $
--
PUBLIC "-//FreeBSD//DOCUMENT DocBook Stylesheet//EN"
"freebsd.dsl"
+PUBLIC "-//FreeBSD//ENTITIES DocBook Mailing List Entities//EN"
+ "mailing-lists.ent"
diff --git a/en_US.ISO8859-1/books/handbook/mailing-lists.ent b/en_US.ISO8859-1/share/sgml/mailing-lists.ent
similarity index 97%
rename from en_US.ISO8859-1/books/handbook/mailing-lists.ent
rename to en_US.ISO8859-1/share/sgml/mailing-lists.ent
index 24b61d9225..97acf12bb2 100644
--- a/en_US.ISO8859-1/books/handbook/mailing-lists.ent
+++ b/en_US.ISO8859-1/share/sgml/mailing-lists.ent
@@ -1,113 +1,113 @@
freebsd-advocacy@FreeBSD.org">
freebsd-announce@FreeBSD.org">
freebsd-bugs@FreeBSD.org">
freebsd-chat@FreeBSD.org">
cvs-committers@FreeBSD.org">
freebsd-core@FreeBSD.org">
freebsd-current@FreeBSD.org">
cvs-all@FreeBSD.org">
freebsd-database@FreeBSD.org">
freebsd-developers@FreeBSD.org">
freebsd-doc@FreeBSD.org">
freebsd-emulation@FreeBSD.org">
freebsd-fs@FreeBSD.org">
freebsd-hackers@FreeBSD.org">
freebsd-hardware@FreeBSD.org">
freebsd-isdn@FreeBSD.org">
freebsd-isp@FreeBSD.org">
freebsd-java@FreeBSD.org">
freebsd-jobs@FreeBSD.org">
freebsd-mobile@FreeBSD.org">
freebsd-mozilla@FreeBSD.org">
freebsd-multimedia@FreeBSD.org">
freebsd-net@FreeBSD.org">
freebsd-newbies@FreeBSD.org">
new-bus-arch@bostonradio.org">
freebsd-ports@FreeBSD.org">
freebsd-questions@FreeBSD.org">
freebsd-scsi@FreeBSD.org">
freebsd-security@FreeBSD.org">
freebsd-security-notifications@FreeBSD.org">
freebsd-small@FreeBSD.org">
freebsd-smp@FreeBSD.org">
freebsd-stable@FreeBSD.org">
freebsd-tokenring@FreeBSD.org">
freebsd-www@FreeBSD.org">
majordomo@FreeBSD.org">
diff --git a/es_ES.ISO8859-1/books/handbook/Makefile b/es_ES.ISO8859-1/books/handbook/Makefile
index ba06443285..8fba3a95bc 100755
--- a/es_ES.ISO8859-1/books/handbook/Makefile
+++ b/es_ES.ISO8859-1/books/handbook/Makefile
@@ -1,59 +1,58 @@
#
-# $FreeBSD$
+# $FreeBSD: doc/es_ES.ISO8859-1/books/handbook/Makefile,v 1.2 2000/05/28 19:21:43 jesusr Exp $
#
# Build the FreeBSD Handbook.
#
MAINTAINER=jesusr@FreeBSD.org
DOC?= book
FORMATS?= html-split
INSTALL_COMPRESSED?= gz
INSTALL_ONLY_COMPRESSED?=
#
# SRCS lists the individual SGML files that make up the document. Changes
# to any of these files will force a rebuild
#
# SGML content
SRCS= book.sgml
SRCS+= advanced-networking/chapter.sgml
SRCS+= backups/chapter.sgml
SRCS+= basics/chapter.sgml
SRCS+= bibliography/chapter.sgml
SRCS+= contrib/chapter.sgml
SRCS+= cutting-edge/chapter.sgml
SRCS+= disks/chapter.sgml
SRCS+= eresources/chapter.sgml
SRCS+= hw/chapter.sgml
SRCS+= install/chapter.sgml
SRCS+= internals/chapter.sgml
SRCS+= introduction/chapter.sgml
SRCS+= kernelconfig/chapter.sgml
SRCS+= kerneldebug/chapter.sgml
SRCS+= kernelopts/chapter.sgml
SRCS+= l10n/chapter.sgml
SRCS+= linuxemu/chapter.sgml
SRCS+= mail/chapter.sgml
SRCS+= mirrors/chapter.sgml
SRCS+= pgpkeys/chapter.sgml
SRCS+= policies/chapter.sgml
SRCS+= ppp-and-slip/chapter.sgml
SRCS+= printing/chapter.sgml
SRCS+= quotas/chapter.sgml
SRCS+= security/chapter.sgml
SRCS+= serialcomms/chapter.sgml
SRCS+= staff/chapter.sgml
SRCS+= x11/chapter.sgml
SRCS+= ports/chapter.sgml
# Entities
SRCS+= authors.ent
SRCS+= chapters.ent
-SRCS+= mailing-lists.ent
DOC_PREFIX?= ${.CURDIR}/../../..
.include "${DOC_PREFIX}/share/mk/doc.project.mk"
diff --git a/es_ES.ISO8859-1/books/handbook/book.sgml b/es_ES.ISO8859-1/books/handbook/book.sgml
index 40744db275..a9f1dfff07 100755
--- a/es_ES.ISO8859-1/books/handbook/book.sgml
+++ b/es_ES.ISO8859-1/books/handbook/book.sgml
@@ -1,146 +1,146 @@
%man;
%bookinfo;
%chapters;
%authors;
- %mailing-lists;
+ %mailing-lists;
%newsgroups;
]>
Manual de FreeBSDProyecto de Documentacion de FreeBSDdoc@FreeBSD.orgFebrero 19991995199619971998199920002001The FreeBSD Documentation ProjectBienvenido a FreeBSD!. Este manual cubre la instalación y uso
diario de FreeBSD Release &rel.current;. Este
manual está en constante evolución y
es el resultado del trabajo de muchas personas. Algunas secciones no
están completas y otras no están actualizadas. Si
estás interesado en colaborar en este proyecto, envía
un mail a &a.doc;. La última versión de este documento
está siempre disponible en el
servidor World Wide Web de FreeBSD. También está
disponible en texto ,
postscript o HTML vía HTTP o comprimido
con gzip desde el
servidor FTP de FreeBSD o uno de sus numerosos
mirrors.
También puedes
realizar búsquedas en el manual.Empezamos
&chap.introduction;
&chap.install;
&chap.basics;
&chap.ports;
Administración del sistema
&chap.kernelconfig;
&chap.security;
&chap.printing;
&chap.disks;
&chap.backups;
&chap.quotas;
&chap.x11;
&chap.hw;
&chap.l10n;
Comunicaciones en Red
&chap.serialcomms;
&chap.ppp-and-slip;
&chap.advanced-networking;
&chap.mail;
Conceptos Avanzados
&chap.cutting-edge;
&chap.contrib;
&chap.policies;
&chap.kernelopts;
&chap.kerneldebug;
&chap.linuxemu;
&chap.internals;
Apéndices
&chap.mirrors;
&chap.bibliography;
&chap.eresources;
&chap.staff;
&chap.pgpkeys;
diff --git a/es_ES.ISO8859-1/share/sgml/catalog b/es_ES.ISO8859-1/share/sgml/catalog
index 5ebe8768fc..a3628f677f 100644
--- a/es_ES.ISO8859-1/share/sgml/catalog
+++ b/es_ES.ISO8859-1/share/sgml/catalog
@@ -1,9 +1,11 @@
-- ...................................................................... --
-- FreeBSD SGML Public Identifiers ...................................... --
- -- $FreeBSD: doc/share/sgml/catalog,v 1.9 2000/07/08 16:31:28 phantom Exp $
+ -- $FreeBSD: doc/es_ES.ISO8859-1/share/sgml/catalog,v 1.1 2000/09/28 23:29:45 nbm Exp $
--
PUBLIC "-//FreeBSD//DOCUMENT DocBook Stylesheet//EN"
"freebsd.dsl"
+PUBLIC "-//FreeBSD//ENTITIES DocBook Mailing List Entities//ES"
+ "mailing-lists.ent"
diff --git a/es_ES.ISO8859-1/books/handbook/mailing-lists.ent b/es_ES.ISO8859-1/share/sgml/mailing-lists.ent
similarity index 93%
rename from es_ES.ISO8859-1/books/handbook/mailing-lists.ent
rename to es_ES.ISO8859-1/share/sgml/mailing-lists.ent
index a3a3647a21..ecb720befb 100755
--- a/es_ES.ISO8859-1/books/handbook/mailing-lists.ent
+++ b/es_ES.ISO8859-1/share/sgml/mailing-lists.ent
@@ -1,48 +1,48 @@
freebsd-announce@FreeBSD.ORG">
cvs-all@FreeBSD.ORG">
freebsd-doc@FreeBSD.ORG">
freebsd-bugs@FreeBSD.ORG">
freebsd-current@FreeBSD.ORG">
freebsd-emulation@FreeBSD.ORG">
freebsd-fs@FreeBSD.ORG">
freebsd-hackers@FreeBSD.ORG">
freebsd-ports@FreeBSD.ORG">
freebsd-questions@FreeBSD.ORG">
freebsd-scsi@FreeBSD.ORG">
freebsd-stable@FreeBSD.ORG">
majordomo@FreeBSD.ORG">
freebsd-core@FreeBSD.ORG">
diff --git a/fr_FR.ISO8859-1/articles/committers-guide/article.sgml b/fr_FR.ISO8859-1/articles/committers-guide/article.sgml
index b8b412af50..1a48a114b2 100644
--- a/fr_FR.ISO8859-1/articles/committers-guide/article.sgml
+++ b/fr_FR.ISO8859-1/articles/committers-guide/article.sgml
@@ -1,1233 +1,1233 @@
%man;
%urls;
%abstract;
%artheader;
%translators;
%authors;
- %mailing-lists;
+ %mailing-lists;
]>
Le Guide du Nouveau
“Committer”Projet de Documentation de FreeBSDSeptembre 19991999Projet de Documentation de FreeBSDNouveau “committer”,
bienvenue dans l'équipe de développement de FreeBSD !L'objectif de cette documentation est de vous orienter sur la
façon d'utiliser CVS sur la machine d'archive centrale de FreeBSD. Il
est présumé que vous avez déjà une connaissance de base de CVS,
quoique des informations de référence, des guides et Questions
Fréquemment Posées soient disponibles à l'adresse :
http://www.cyclic.com/cyclic-pages/books.htmlBonne chance, et bienvenue à bord !
&abstract.license;
&abstract.disclaimer;
&trans.a.haby;
Détails d'organisationMachine d'archive principalefreefall.FreeBSD.orgMachine d'archive internationale pour les codes de
cryptographieinternat.FreeBSD.orgMéthode de connexion&man.ssh.1;Répertoire CVSROOT/home/ncvsRépertoire CVSROOT pour la version internationale
des codes de cryptographie/home/cvs.cryptAdministrateurs des archives CVS
principales&a.jdp; et &a.peter; ainsi que &a.asami; pour
ports/Administrateur des archives CVS pour la version
internationale des codes de cryptographie&a.markm;Liste de diffusioncvs-committers@FreeBSD.orgEtiquettes CVS importantesRELENG_3 (3.x-STABLE), HEAD (-CURRENT)Il vous est demandé d'utiliser &man.ssh.1; ou &man.telnet.1;
et Kerberos 5 pour vous connecter aux machines d'archive. Ces méthodes
sont globalement plus sûres qu'un simple &man.telnet.1; ou
&man.rlogin.1; parce que la négociation de l'authentification est
cryptée. Par défaut &man.ssh.1; crypte toute la session. Les utilitaires
disponibles &man.ssh-agent.1; et &man.scp.1; sont aussi bien plus
pratiques. Si vous ne connaissez pas &man.ssh.1, reportez-vous à la
.Opérations CVSLes opérations CVS se font habituellement en se connectant à
freefall, vérifiant que votre variable d'environnement
CVSROOT est bien positionnée à
/home/ncvs, et en effectuant les opérations
d'extraction (check-out) et de mise à
jour (check-in) nécessaires. Si vous
avez quelque chose d'entiérement nouveau à ajouter (un nouveau logiciel
porté, du source d'origine externe, etc.), il existe une procédure
appelée easy-import qui facilite cette opération. Elle
ajoute automagiquement une entrée pour le nouveau module, fait ce qu'il
faut via cvs import, etc. – exécutez-la sans
arguments et elle vous demandera tout ce qu'elle a besoin de
savoir.Si vous avez la pratique de CVS à distance et vous considérez
relativement opérationnel sur CVS en général, vous pouvez aussi effectuer
les opérations CVS directement depuis votre machine avec une copie
local à jour des sources. N'oubliez cependant pas de positionner
CVS_RSH à ssh de façon à
utiliser un moyen de transmission sécurisé et fiable. D'une autre côté,
si vous ne savez pas ce que cela veut dire, tenez-vous en s'il vous
plaît à la méthode qui consiste à vous connecter à
freefall et mettre en place vos modifications avec
&man.patch.1;.Si vous avez à utiliser les opérations add et
delete pour faire en fait une opération
mv, il faut une copie sur l'archive plutôt que votre
commande CVS add suivie d'un
delete. Dans ce cas, un Administrateur CVS copiera le(s) fichier(s)
là où il(s) doi(ven)t aller et vous avertira une fois qu'il l'aura fait.
Le but de la copie dans les archives est de conserver l'historique des
modifications, la journalisation. Le Projet FreeBSD accorde une grande
importance à l'historique du projet que CVS nous permet de
conserver.Conventions et TraditionsLes Administrateurs CVS (Peter Wemm et John Polstra) sont les
propriétaires des archives CVS et sont responsables de
chaque et de toute modification directe de
celles-ci pour mise au propre ou rectification d'erreur CVS dûe à un
committer. Personne d'autre ne doit
intervenir directement sur les archives. Si vous faites un fausse
manipulation, une importation incorrecte ou vous trompez d'étiquette
par exemple, n'essayez pas de la
rectifier vous-même ! Envoyez immédiatement un courrier
électronique ou téléphonez à John ou Peter et expliquez leur le
problème. Satoshi Asami est aussi Administrateur CVS pour la partie
ports/ de l'arborescence. Mark Murray est
l'administrateur des archives internationales pour les logiciels de
cryptographie, en Afrique du Sud.Si vous êtes nouveau committer, la
première chose à faire est de vous ajouter vous-même à la liste des
développeurs (section 28.2) du Manuel de Référence. Extraire le manuel
de référence et ajouter une entrée à la liste est relativement facile,
mais c'est néanmoins un bon test initial de vos compétences CVS. Si
vous pouvez le faire, vous n'aurez probablement pas de problèmes par
la suite.L'étape suivante consiste à vous présenter aux autres
committers, sans quoi ils n'auront aucune
idée de qui vous êtes et à quoi vous travaillez. Il n'est pas
nécessaire de rédiger une biographie exhaustive, un paragraphe ou deux
suffiront, pour dire qui vous êtes et à quoi vous comptez travailler sur
FreeBSD. Envoyez-les par courrier électronique à
cvs-committers@FreeBSD.org et vous serez prêt à commencer
à travailler !N'oubliez pas aussi de vous connecter à
hub.FreeBSD.org et de vous y créez un fichier
/var/forward/utilisateur
(où utilisateur est votre nom d'utilisateur),
qui contienne votre adresse de courrier électronique principale où vous
souhaitez que le courrier électronique adressé à
votre_nom_d_utilisateur@FreeBSD.org vous soit
redirigé. Les boîtes aux lettres vraiment volumineuses qui demeurent en
en permanence sur hub sont souvent
accidentellement tronquées sans avertissement, redirigez
donc votre courrier, ou lisez-le, et vous ne le perdrez pas.Tous les nouveaux committers ont un
mentor qui leur est assigné les premiers mois. Votre mentor est plus ou
moins chargé de vous expliquer tout ce que vous ne comprenez pas bien et
est aussi responsable de ce que vous faites à vos débuts. Si vous faites
une soummission erronée, c'est votre mentor qui sera ennuyé et vous
devriez probablement vous fixer comme ligne de conduite de faire passer
vos premières soumissions par lui avant de les intégrer aux
archives.Toutes les soumissions doivent être intégrées d'abord à
-CURRENT, avant d'aller dans
-STABLE. Aucune nouvelle fonctionnalité ou
modification à haut risque ne devrait être intégrée à la branche
-STABLE.Relations entre développeursSi vous travaillez directement sur votre propre code ou sur du code
dont il est bien établi que vous avez la responsabilité, il n'est
probablement pas nécessaire de valider ce que vous allez faire avec
d'autres développeurs avant de soumettre du code. Si vous trouvez un
bogue dans un module qui est manifestement orphelin (il y en a
malheureusement quelques uns), cela s'y applique aussi. Si, au
contraire, vous vous apprêtez à modifier quelque chose qui est
activement maintenu par quelqu'un d'autre (ce n'est qu'en surveillant
la &a.cvsall; que vous pourrez vous faire une idée de ce qu'il l'est et
de ce qui ne l'est pas), envisagez alors de lui envoyer vos
modifications, tout comme vous l'auriez fait quand vous n'étiez pas
committer. Pour les logiciels portés,
vous devriez contacter la personne listée comme
MAINTAINER dans le Makefile.
Pour le reste des archives, si vous n'êtes pas sûr de qui maintient
effectivement tel ou tel module, il peut être utile de passer en revue
le résultat de cvs log pour voir qui a soumis des
modifications dans le passé. Si vous ne trouvez personne, ou si la
personne en charge montre un désinterêt pour la partie en question,
allez-y et faites vos modifications.Si vous avez pour une raison ou une autre des doutes à propos d'une
soumission que vous envisagez, faites-la d'abord examiner par
-hackers avant de l'intégrer. Il vaut mieux que l'on
vous fasse des remarques alors, qu'une fois qu'elle fera partie des
archives CVS. S'il vous arrive de soumettre quelque chose qui soulève
une controverse, envisagez éventuellement de faire marche arrière
en attendant que la question soit réglée. N'oubliez pas – avec
CVS, vous pourrez toujours remettre votre modification en
service.GNATSLe Projet FreeBSD utilise GNATS pour
enregistrer les rapports de bogues et les demandes de modification. Si
vous effectuez une correction ou une modification décrite dans un
PR - Problem Report, rapport
d'anomalie - GNATS, veillez à
utiliser
edit-pr numéro_de_pr
sur freefall pour le fermer. L'usage veut aussi que
vous preniez le temps de fermer les rapports ayant trait à vos
soumission, le cas échéant. Vous pouvez aussi utiliser vous-même
&man.send-pr.1; pour proposer les modifications dont vous pensez qu'il
faut les probablement les faire, après une revue plus extensive par
les autres participants.Vous trouverez plus d'informations sur
GNATS aux adresses suivantes :http://www.cs.utah.edu/csinfo/texinfo/gnats/gnats.htmlhttp://www.FreeBSD.org/support.htmlhttp://www.FreeBSD.org/send-pr.html&man.send-pr.1;Who's WhoEn dehors de Peter Wemm et John Polstra, les administrateurs des
archives, il y a d'autres membres du Projet FreeBSD que vous
rencontrerez probablement dans votre nouvelle fonction de
committer. Rapidement, et en aucun
cas exhaustivement, ce sont :&a.asami;Est le reponsable du catalogue des logiciels portés, ce qui
signifie qu'il a le pouvoir de décision en ce qui concerne toute
modification aux logiciels portés et à leurs macros-instructions
de compilation. Il est aussi responsable la gestion des gels du
code entre deux versions.&a.bde;Est l'Obersturmbahnfuhrer de la
Police du Style. Quand vous soumettez quelque chose que vous
auriez pu faire mieux, Bruce sera là pour vous le signaler.
Remerciez-le qu'il y ait quelqu'un pour le faire.&a.dg;Est notre architecte principal et superviseur du système de
gestion de la mémoire virtuelle. Si vous envisagez une
modification de ce système, voyez cela avec David. Si vous êtes
pris dans une discussion âpre et insoluble avec un autre
participant à propos d'une modification envisagée (ce qui,
heureusement, ne se produit pas souvent), il peut aussi
occasionnellement être nécessaire de demander alors à David
de mettre sa casquette d'Architecte Principal et de prendre la
décision finale.&a.jkh;Est le responsable des versions. Il a la charge de définir les
dates butées et de superviser le processus de mise en place de la
nouvelle version. Pendant les gels du code, il a aussi le pouvoir
de décision sur toutes les modifications sur la branche de code
qui est en cours de finalisation. S'il y a quelque chose que vous
voudriez voir reporter de -CURRENT dans
-STABLE (quelqu'intérêt que cela puisse avoir à
un moment donné), c'est aussi la personne à qui il faut en
parler.&a.markm;Mark est le responsable des archives CVS internationales pour
le code de cryptographie, sur
internat.FreeBSD.org en Afrique du Sud.Mark supervise la plupart du code de cryptographie ; si
vous vous y envisagez des mises à jour, parlez-en s'il vous plaît
d'abord à Mark.&a.steve;Steve est le responsable non officiel de
/usr/src/bin. S'il y a quelque chose
d'important que vous voudriez y voir, vous devriez probablement
envisager d'abord cela avec Steve. Il est aussi administrateur des
“Problem Report”, en
coopération avec &a.phk;.&a.brian;Maintient officiellement
/usr/bin/ppp et
LPD.&a.wollman;Si vous avez besoin d'un conseil sur des points obscurs du
code réseau ou n'êtes pas certain d'une modification que vous
envisagez à ce sous-système, c'est avec Garrett qu'il faut en
discuter.Introduction rapide à SSHMettez à jour et installez le logiciel porté
ssh dans
/usr/ports/security/ssh (il faut une version
1.2.25 ou postérieure).Veillez à exécuter &man.ssh-agent.1; avant toute autre
application. Les utilisateurs de X, par
exemple, le font habituellement depuis leur fichier
.xsession ou
.xinitrc. Reportez-vous à &man.ssh-agent.1;
pour plus de détails.Générez une paire de clés avec &man.ssh-keygen.1;. Ces clés
seront créées dans le répertoire
$HOME/.ssh.Copiez votre clé publique
($HOME/.ssh/identity.pub)
dans le fichier authorized_keys de votre
répertoire utilisateur sur freefall
(i.e.
$HOME/.ssh/authorized_keys).
Vous devriez maintenant pouvoir utiliser &man.ssh-add.1; pour vous
authentifier à chaque début de session. Il vous demandera la phrase clé
pour votre clé privée, et l'enregistrera via votre agent
d'authentification (&man.ssh-agent.1;) de façon à ce que vous n'ayez
plus à la retaper à chaque fois.Testez en faisant quelque chose du style : ssh
freefall.FreeBSD.org ls /usr.Pour plus d'informations, reportez-vous à
/usr/ports/security/ssh, &man.ssh.1;,
&man.ssh-agent.1;, &man.scp.1;, et &man.ssh-keygen.1;.Régles à Suivre par les Committers
FreeBSDRespectez les autres
committers.Discutez de toute modification importante
avant intégration.Respectez les reponsables de la maintenance s'il y en a de
définis par la variable MAINTAINER du
Makefile ou dans le fichier
MAINTAINER au premier niveau de
l'arborescence.N'intervenez jamais directement sur les archives. Demandez au
reponsable de ces archives de le faire.Toute modification controversée doit, si le responsable de
la maintenance ou l'Architecte Principal le demande, être annulée
jusqu'à ce que la discussion soit terminée. Les modifications pour
des questions de sécurité peuvent être effectuées par l'Officier de
Sécurité, malgré les souhaits d'un responsable de la
maintenance.Les modifications doivent être faites dans
-current avant d'être reportées dans
-stable sauf autorisation expresse du
responsable des versions ou si elles ne s'appliquent pas à
-current. Toute modification non triviale ni
urgente doit rester au moins trois jours dans
-current pour être testée suffisamment avant
d'être reportée. Le responsable des versions a les mêmes
prérogatives sur la branche -stable que celles
décrites, pour ce qui concerne l'Architecte Principal, par le règle
#5.Ne vous disputez pas publiquement avec les autres
committers ; cela fait mauvais
effet. Si vous êtes en “profond” désaccord sur un point,
n'en discutez qu'en privé.Respectez tous les gels du code et lisez régulièrement la liste
de diffusion pour les committers pour
savoir quand il y en a.En cas de doute sur une procédure, renseignez-vous
d'abord !Testez vos modifications avant de les intégrer.Comme indiqué, enfreindre l'un de ces règles peut entraîner une
suspension provisoire, et, en cas de récidive, une suppression
permanente des privilèges de committers.
Trois membres ou plus de l'équipe de base, ou l'Architecte Principal et
un autre membre de l'équipe de base, peuvent, s'ils en sont d'accord,
suspendre temporairement ces privilèges jusqu'à ce que l'ensemble de
-core examine la question. En cas
d'urgence (un committer
endommageant les archives), une suspension provisoire peut aussi être
décidée par l'un des administrateurs des archives ou tout autre membre
de l'équipe de base qui se trouve être réveillé à ce moment-là. Seule la
totalité de l'équipe de base peut suspendre pour une durée importante
les droits d'un committer, ou les
retirer définitivement, cette dernière mesure n'étant en général prise
qu'après consultation avec les
committers. Le but de cette règle n'est
pas de faire de l'équipe de base une bande de dictateurs cruels qui
puissent disposer des committers comme de
cannettes vides, mais d'avoir une sorte de fusible pour le projet. Si
quelqu'un est sévèrement incontrôlable, il est important de pouvoir
réagir immédiatement, au lieu d'être paralysé par la discussion. Dans
tous les cas, le committers dont les
privilèges sont suspendus a le droit d'être “entendu”, c'est
à ce moment-là qu'il est décidé de la durée totale de la suspension. Il
peut aussi demander un révision de la décision après 30 jours et tous
les 30 jours ensuite (à moins que la durée totale de la suspension soit
inférieure à 30 jours). Quelqu'un à qui les privilèges ont été
définitivement retiré peut demander que son cas soit revu après 6 mois.
La procédure de révision est strictement
informelle, et, dans tous les cas, l'équipe de base se
réserve le droit de prendre en compte ou d'ignorer les demandes de
révision, si elle pense que sa décision initiale était la bonne.Pour toutes les autres aspects du fonctionnement du projet, l'équipe
de base est un sous-ensemble des
committers et est soumise aux
même règles. Ce n'est pas parce que quelqu'un
appartient à l'équipe de base qu'il est dispensé de suivre les
instructions que l'on vient de donner, les “pouvoirs
spéciaux” de l'équipe de base ne sont effectifs que lorsqu'elle
agit en tant que groupe, pas individuellement.
Individuellement, nous sommes tous d'abord des
committers et ensuite seulement membres
de l'équipe de base.DétailsRespectez les autres
committers.Cela signifie que vous devez traiter les autres
committers en tant que groupe de
co-développeurs qu'ils sont en fait. Malgré nos tentatives
occasionnelles pour prouver le contraire, on ne devient pas
committer en étant stupide et
rien n'est plus irritant que d'être traité comme tel par un de vos
collaborateurs. Que nous apprécions toujours quelqu'un d'autre
ou pas (chacun a ses jours sans), nous devons malgré tout toujours
traiter les autres avec respect, sans quoi
c'est toute l'organisation de l'équipe qui se désagrège
rapidement.Etre capable de travailler ensemble à long terme est le plus
grand atout du projet, bien plus important que n'importe quel
série de modifications du code, et transformer les discussions à
propos du code en disputes qui affectent notre capacité à
travailler harmonieusement ensemble à long terme n'en vaut
vraiment pas la peine, quelque justification que l'on puisse
imaginer.Pour respecter cette règle, n'envoyez pas de courrier
électronique quand vous êtes en colère et ne vous comportez en
outre pas de façon à paraître inutilement aggressif aux autres.
Commencez par vous calmer et réfléchissez à la manière la plus
efficace de convaincre l(es) autre(s) personne(s) de la justesse
de votre point de vue. Ne partez pas sur les chapeaux de roues
pour vous sentir simplement immédiatement mieux au prix d'une
dispute à long terme. Non seulement c'est une mauvaise
“gestion des ressources”, mais les responsables du
projet sanctionneront sévérement les manifestations d'aggressivité
publiques et répétées, jusqu'à suspendre ou vous retirer
définitivement vos privilèges de
committer. Ce n'est pas une chose
qu'ils aiment le moins du monde faire, mais l'unité est la
priorité. Aucune dose de code ou de judicieux conseils ne s'y
mesure.Discutez de toute modification importante
avant intégration.Ce n'est pas dans les archives CVS que les modifications
doivent être intégrées pour validation ou discussion, cela doit
se faire d'abord sur les listes de dicussion et être intégré
ensuite lorsqu'on est arrivé à quelque chose qui approche du
consensus. Cela ne signifie pas que vous deviez demander la
permission avant de corriger chaque erreur évidente de syntaxe ou
d'orthographe dans une page de manuel, mais simplement que vous
devriez essayer de sentir quand vous envisagez une modification
qui n'est pas aussi triviale et qui demande à être discutée au
préalable. Les gens n'ont rien contre les modifications
d'envergure si le résultat en est quelque chose de nettement
meilleur que ce qu'ils avaient auparavant, mais ils n'aiment pas
être surpris par ces modifications. La
meilleure façon de vous assurer que vous allez dans le bon sens et
de faire valider votre code par un ou plusieurs autres
committers.En cas de doute, demandez une validation !Respectez les responsbales de la maintenance, s'il y en
a.De nombreuses parties de FreeBSD n'“appartiennent”
à personne, c'est-à-dire qu'il n'y aura personne pour pousser de
hauts cris si vous faites des modifications sur “leur”
terrain, mais il vaut mieux s'en assurer d'abord. Une de nos
convention est de mettre une ligne indiquant qui maintient dans le
Makefile du paquetage ou de la
sous-arborescence activement maintenue par une ou plusieurs
personnes voyez http://www.FreeBSD.org/handbook/policies.html
pour plus d'information à ce sujet. Quand il y a plusieurs
personnes qui maintiennent une même section de code, les
soumissions d'une de ces personnes sur ces sections doivent être
revues par au moins une des autres personnes qui la maintiennent.
Dans le cas où l'attribution n'est pas claire,
vous pouvez aussi consulter les messages de CVS pour les
fichiers concernés, pour voir si quelqu'un a travaillé dessus
récemment ou travaille de façon prédominante sur ce
domaine.Il y a d'autres parties de FreeBSD qui sont contrôlées par
quelqu'un qui gère tout un domaine de l'évolution de FreeBSD,
l'internationalisation ou le réseau par exemple. Reportez-vous à
http://www.FreeBSD.org/handbook/staff-who.html
pour avoir plus d'informations à ce sujet.N'intervenez jamais directement sur les archives. Demandez à
un responsable des archives de le faire.C'est assez clair - vous n'avez pas le droit de
faire de modifications directement sur les archives, point. En cas
de difficultés, adressez-vous à l'un des responsables des
archives en envoyant un courrier électronique à
cvs@FreeBSD.org et attendez qu'ils corrigent le
problème et vous relancent. N'essayez pas de régler le problème
vous-même !Si vous envisagez de supprimer un étiquette ou d'en mettre une
nouvelle, ou bien d'importer du code sur nouvelle branche, il vous
sera peut-être utile de demander d'abord un avis. Nombreux sont
ceux qui se trompent en faisant cela les premières fois et cela
aboutit à la modification de nombreux fichiers et irrite les
utilisateurs de CVSup/CTM qui recoivent
tout à coup de nombreuses mises à jour inutiles.Toute modification controversée doit, si le responsable de
la maintenance ou l'Architecte Principal le demande, être annulée
jusqu'à ce que la discussion soit terminée. Les modifications pour
des questions de sécurité peuvent être effectuées par l'Officier
de Sécurité, malgré les souhaits d'un responsable de la
maintenance.Ce peut être dur à avaler en cas de conflit (quand chaque
partie est bien sûr convaincue qu'elle a raison) mais CVS permet
d'éviter de prolonger la dispute, il est bien plus facile de
revenir sur les modifications, d'attendre que tout le monde se
calme et d'essayer de voir quelle est la meilleure solution.
S'il s'avère que la modification était la bonne chose à faire,
elle peut-être facilement remise en service. Dans le cas contraire,
les utilisateurs n'auront pas eu à subir l'évolution erronnée le
temps que tout le monde ait débattu de sa pertinence. Il est très
rare que l'on ait à revenir sur des modifications archivées, parce
que la discussion met la plupart du temps en évidence les
interventions controversés ou non justifiées avant même qu'elles
n'aient été intégrées, mais dans les rares cas où cela se produit,
il faut revenir en arrière sans discuter de façon à ce que l'on
puisse immédiatement examiner s'il y avait erreur ou non.Les modifications doivent être faites dans
-current avant d'être reportées dans
-stable sauf autorisation expresse du
responsable des versions ou si elles ne s'appliquent pas à
-current. Toute modification non triviale ni
urgente doit rester au moins trois jours dans
-current pour être testée suffisamment avant
d'être reportée. Le responsable des versions a les mêmes
prérogatives sur la branche -stable que celles
décrites, pour ce qui concerne l'Architecte Principal, par le règle
#5C'est un autre point sans appel parce que c'est
l'ingénieur de version qui est en dernier lieu responsable (et
encaisse les coups) si une modification s'avère mal fondée.
Respectez s'il vous plaît cette règle et coopérez totalement
avec le responsable des versions pour ce qui concerne la branche
-stable. La gestion de la branche
-stable peut parfois paraître excessivement
conservatrice à un observateur occasionnel, mais rappelez vous que
c'est le principe même de -stable et que
-current suit d'autres règles. Il n'y a aucune
raison d'avoir une branche -current si toutes
les modifications vont immédiatement dans
-stable, sans pouvoir d'abord être testées par
les développeurs de -current, laissez donc
passer un peu de temps avant de les reporter dans
-stable, à moins que la modification ne soit
critique, urgente, ou suffisamment triviale pour rendre tout
test ultérieur superflu (correction d'ortographe dans les pages
de manuel, de bogue flagrant ou de faute de frappe, etc.) En
d'autres termes, faites preuve de bon sens.Ne vous disputez pas publiquement avec les autres
committers ; cela fait mauvais
effet. Si vous êtes en “profond” désaccord sur un point,
n'en discutez qu'en privé.Le projet a une image publique à conserver et cette image est
très importante pour nous tous, en particulier si nous voulons
continuer à attirer de nouveaux membres. Il y aura des situations
où, malgré tous les efforts de chacun pour rester mesurés,
certains perdront leur calme et laisserons leur colère s'exprimer,
et le mieux que nous puissions faire est d'essayer d'en minimiser
les effets jusqu'à ce que chacun se soit de nouveau calmé. Cela
signifie que vous ne devez ni laisser exprimer votre colère en
public, ni faire suivre de courriers privés sur des listes ou des
alias publics. Ce que les gens se disent entre eux est souvent
moins édulcoré que ce qu'ils disent en public, et ce type
d'échange n'y a donc pas sa place - cela ne peut
qu'envenimer une situation déjà regrettable. Si la personne qui
vous adresse des reproches prend au moins la précaution de le
faire en privé, ayez vous aussi la correction de le garder pour
vous. Si vous estimez avoir été injustement traité par un autre
développeur et que cela vous soucie, parlez-en à l'équipe de base
plutôt qu'en public. Nous ferons de notre mieux pour jouer les
médiateurs et ramener les choses au raisonnable. Quand la
discussion a trait à une modifications de code et que les
participants n'arrivent apparemment pas à se mettre d'accord,
l'équipe de base peut désigner une troisième partie ayant l'accord
mutuel pour résoudre le problème. Les autres personnes impliquées
doivent alors accepter de se plier aux décisions de cette
troisième partie.Respectez tous les gels du code et lisez régulièrement la
liste de diffusion pour les
committers pour savoir quand il y
en a.Soumettre des modifications pendant un gel du code est
vraiment une grave erreur et l'on attend des
committers qu'ils se tiennent au
courant de ce qui se passe avant de se remanifester après une
longue absence et soumettre 10 Mo de code accumulés pendant ce
temps. Les gens qui se comportent régulièrement de cette façon
verront leurs privilèges de
committers suspendus jusqu'à leur
retour du Joyeux Camp de Rééducation de FreeBSD que nous gérons
au GrЖenland.En cas de doute sur une procédure, renseignez-vous
d'abord !De nombreuses erreurs sont commises parce que quelqu'un est
pressé et estime qu'il sait quelle est la meillleure façon de
faire quelque chose. Il y a des bonnes chances que vous ne sachiez
en fait pas comment faire ce que vous n'avez encore jamais fait et
que vous ayez vraiment besoin de demander d'abord sans quoi vous
allez vous mettre publiquement dans l'embarras. Il n'y a aucune
honte à demander “Comment diable fait-on cela ?”,
nous savons déjà que vous êtes quelqu'un d'intelligent, sans quoi
vous ne seriez pas
committer.Testez vos modifications avant de les intégrer.Cela peut paraître évident, mais si c'était vraiment le cas,
nous ne verrions probablement pas autant de cas où les gens ne le
font manifestement pas. Si vos modifications touchent le noyau,
vérifiez que vous pouvez toujours compiler et
GENERIC et LINT. Si vos
modifications s'appliquent ailleurs, assurez-vous que vous pouvez
toujours compiler l'ensemble du système - make
world. Si vous faites vos modifications sur une branche
donnée, veillez à tester vos modifications sur une machine qui
utilise cette version du système. Si votre modifications risque
de poser des problèmes sur une autre architecture matérielle,
veillez à tester sur toutes les architectures supportées. Nous
n'avons actuellement qu'x86 et Alpha, c'est donc assez facile à
faire. Si vous avez besoin de tester sur l'AXP, votre compte sur
beast.FreeBSD.org vous permet de
compiler et tester des binaires/noyaux/etc. sur Alpha. Quand
d'autres architectures seront ajoutées à la liste des
plates-formes supportées par FreeBSD, des ressources partagées
de test seront disponibles.Autres suggestionsQuand vous intégrez des modifications de la documentation,
utilisez un correcteur orthographique avant de soumettre. Pour toutes
les documentations en SGML, vous devrirez aussi vérifier que vos
directives de formatage sont valides, avec un make
lint.Pour toutes les pages de manuel en ligne, servez-vous de
manck (au catalogue des logiciels portés) sur la
page pour vérifier que toutes les références croisées et noms de
fichiers sont corrects et que les MKLINKs
appropriés sont installés.Questions Fréquemment Posées propres aux logiciels portésImporter un nouveau logicielComment faire pour importer un nouveau logiciel ?Lisez s'il vous plaît d'abord la section sur la copie des
archives.Pour importer un nouveau logiciel, le plus facile est
d'utiliser la procédure easy-import sur
freefall. Elle vous posera quelques questions
et importera directement le logiciel dans le répertoire que vous
aurez indiqué. Elle a été écrite par &a.joerg;, envoyez-lui
s'il vous plaît un courrier électronique si vous avez des
questions à propos de easy-import.Il y a une chose qu'elle ne fera pas à votre place :
ajouter le logiciel au Makefile du
répertoire de niveau supérieur (catégorie). Il faudra le faire
vous-même.Y'a-t-il d'autres choses qu'il faut que je sache quand
j'importe un nouveau logiciel ?Vérifiez votre portage, pour vous assurez qu'il compile et
que le paquetage est correctement construit. Voici ce qu'il est
recommandé de faire :&prompt.user; make install
&prompt.user; make package
&prompt.user; make deinstall
&prompt.user; pkg_add le_paquetage_que_vous_venez_de_compiler
&prompt.user; make deinstall
&prompt.user; make reinstall
&prompt.user; make packageLe chapitre
faire vous-même un
portage du Manuel de Référence vous donnera des
instructions plus détaillées.Utilisez &man.portlint.1; pour vérifier la syntaxe du
portage. Il n'est pas indispensable d'éliminer la totalité des
messages d'avertissement, mais veillez à régler les problèmes
les plus évidents.Si le logiciel porté a été soumis par quelqu'un qui n'a
jamais collaboré au projet auparavant, ajoutez le nom de cette
personne à la section Autres
Collaborateurs du Manuel de Référence.Fermez le PR, si le portage résulte d'un PR. Pour fermer un
PR, il suffit d'exécuter edit-pr
PR# sur
freefall et de modifier la valeur de la
variable state de open
en closed. On vous demandera d'entrer un
commentaire, et c'est tout.Copies des archivesQuand avons-nous besoin qu'une opération de copie soit faite
sur les archives ?Quand vous voulez importer un logiciel en rapport avec un
autre logiciel déjà archivé dans un autre répertoire, envoyez
s'il vous plaît un courrier électronique au responsable des
logiciels portés pour lui demander son avis.
En rapport désigne ici une version
différente ou une version légèrement modifiée. En exemple, on
peut citer print/ghostscript* (versions
différentes) et x11-wm/windowmaker*
(version Anglaise et version internationalisée).Comme autre exemple, on peut citer le cas d'un logiciel porté
déplacé d'un sous-répertoire à un autre, ou d'une modification du
nom d'un répertoire parce que l'auteur a changé le nom de son
logiciel, bien qu'il dérive d'un logiciel déjà importé.Quand n'avons-nous pas besoin q'une
opération de copie soit faite sur les archives ?Quand il n'y a pas d'historique à conserver. Si un logiciel
est importé dans une catégorie erronnée et immédiatement
déplacé, il suffit d'un simple cvs remove de
l'ancien suivi d'un cvs import du
nouveau.Que faut-il que je fasse ?Envoyez un courrier électronique au responsable des
logiciels portés, qui fera la copie de l'ancien emplacement vers
le nouveau. Vous en serez averti, et l'on attendra alors de vous
que vous exécutiez les opérations suivantes :cvs remove de l'ancien logiciel (si
besoin est),Correction du Makefile de niveau
supérieur (catégorie),Mise à jour de
CVSROOT/modulesSi d'autres logiciels dépendent de celui qui vient
d'être mis à jour, correction des lignes décrivant leurs
dépendendances dans leurs
Makefiles,Si le logiciel a changé de catégories, modification en
conséquence de la ligne CATEGORIES du
Makefile du logiciel.Gel des logiciels portésQu'est-ce qu'un gel des logiciels
portés ?Avant livraison d'une nouvelle version, il est nécessaire de
limiter les interventions sur les archives des logiciels portés
pendant une courte période, le temps que les paquetages et la
version elle-même soient compilés. Cela pour garantir la
cohérence entre les différents composants de la version, c'est
cela que l'on appelle le gel des logiciels
portés.Combien de temps dure ce gel ?Habituellement deux à trois jours.Qu'est-ce que cela signifie pour moi ?Pendant le gel des logiciels portés, vous ne devez pas
soumettre quoi que ce soit dans l'arborescence des logiciels
portés, sauf autorisation explicite du responsable des
logiciels. Autorisation explicite correspond ici
à l'un des deux cas de figure suivants :Vous avez posé la question au responsable des logiciels,
et il vous a répondu : Allez-y,
intégrez.Le responsable des ports vous a envoyé un courrier
électronique, soit directement, soit à la liste de
diffusion, pour signaler un problème à corriger sur le
logiciel.Notez bien que vous n'êtes pas implicitement autorisé à
corriger un logiciel pendant un gel simplement parce qu'il ne
compile plus.Comment suis-je averti du début du gel des
logiciels ?Le responsable des logiciels portés enverra des messages
d'avertissement sur la &a.ports; et la &a.committers; pour
annoncer la mise en oeuvre prochaine d'une nouvelle version,
habituellement deux à trois semaines à l'avance. La date exacte
ne sera définitivement fixée que quelques jours avant. Cela
parce que le gel des logiciels doit être synchronisé avec la
mise en oeuvre de la version elle-même, et que ce n'est qu'à ce
moment-là que l'on sait exactement quand cette opération aura
lieu.Quand le gel commencera, il y aura bien sûr une nouvelle
annonce sur la &a.committers;.Comment suis-je averti de la fin du gel des
logiciels ?Quelques heures après la mise en place de la nouvelle
version, le responsable des logiciels enverra un courrier
électronique à la &a.ports; et à la &a.committers pour annoncer
la fin du gel des logiciels. Remarquez que la finalisation de la
version n'implique pas automatiquement la fin du gel. Nous
devons nous assurer qu'un problème de dernière minute ne demande
pas de reconstruction immédiate de la version.Questions diversesComment sais-je si un logiciel porté compile correctement ou
non ?Commencez par consulter
http://bento.FreeBSD.org/~asami/errorlogs/.
Vous y trouverez les messages d'erreurs des dernières
compilations des logiciels portés sous
3-stable et
4-current.Néanmoins, il ne suffit pas qu'un logiciel n'y apparaisse
pas pour pouvoir dire qu'il compile correctement. (Une de ses
dépendances, par exemple, peut ne pas avoir compilé.) Voici les
répertoires de bento, n'hésitez pas à aller y
voir :
/a/asami/portbuild/3/errors messages d'erreur de la dernière compilation de 3-stable
/logs tous les messages de la dernière compilation de 3-stable
/packages messages d'erreur sur les paquetages de la dernière compilation 3-stable
/bak/errors messages d'erreur de la dernière compilation intégrale de 3-stable
/bak/logs tous les messages de la dernière compilation de l'intégrale de 3-stable
/bak/packages messages d'erreur sur les paquetages de la dernière compilation intégrale de 3-stable
/4/errors messages d'erreur de la dernière compilation de 4-current
/logs tous les messages de la dernière compilation de 4-current
/packages messages d'erreur sur les paquetages de la dernière compilation 4-current
/bak/errors messages d'erreur de la dernière compilation intégrale de 4-current
/bak/logs tous les messages de la dernière compilation de l'intégrale de 4-current
/bak/packages messages d'erreur sur les paquetages de la dernière compilation intégrale de 4-current
Essentiellement, si le logiciel apparait dans
packages, ou dans
logs mais pas dans
errors, il compile correctement. (Les
répertoires errors contiennent ce que vous
voyez sur la page Web.)J'ai importé un nouveau logiciel. Dois-je l'ajouter au
fichier INDEX ?Non. Le responsable des logiciels portés regénère
l'INDEX et l'intègre régulièrement aux
archives.Y'a-t-il d'autres fichiers auxquels je ne dois pas
toucher ?Tous les fichiers immédiatement dans
ports/, et tous les fichiers des
sous-répertoires dont le nom commence par une majuscule
(Mk, Tools, etc.). Le
responsable des logiciels est particulièrement susceptible pour
ce qui touche à ports/Mk/bsd.port.mk, n'y
touchez donc pas à moins que vous ne vouliez affronter son
courroux.
diff --git a/fr_FR.ISO8859-1/articles/ddwg/article.sgml b/fr_FR.ISO8859-1/articles/ddwg/article.sgml
index 2605a8f6a0..43c72d4217 100644
--- a/fr_FR.ISO8859-1/articles/ddwg/article.sgml
+++ b/fr_FR.ISO8859-1/articles/ddwg/article.sgml
@@ -1,1861 +1,1861 @@
%man;
%urls;
%abstract;
%artheader;
%translators;
%authors;
- %mailing-lists;
+ %mailing-lists;
]>
Le guide de l'auteur de pilotes de périphériques pour FreeBSDEric L.Hernes
&artheader.copyright;
erich@rrnet.com29 Mai 1996Ce document décrit comment ajouter un module de gestion de
périphérique à FreeBSD. Il n'est pas destiné pour être un
cours d'instruction sur des modules de gestion de périphérique
d'Unix en général. Il est destiné pour les auteurs de module de
gestion de périphérique, au courant du modèle de module de gestion
de périphérique d'Unix, pour travailler sur FreeBSD.
&abstract.license;
&abstract.disclaimer;
&trans.a.dntt;
Spécificité de FreeBSD2.xDШ aux changements de FreeBSD avec le temps, ce guide est
seulement précis en ce qui concerne FreeBSD 2.x. Un guide de
rechange pour FreeBSD 3.x et au-delà est en train d'être écrit.
Contactez Jeroen Ruigrok asmodai@wxs.nl si
vous voulez l'aider à ce sujet.
GénéralitéLe noyau de FreeBSD est très bien
documenté, malheureusement il est entièrement écrit en `C'.Types de pilotes de module de périphériques.CaractèreStructures de donnéesStructure cdevswPoints d'entréed_open()d_open() prend plusieurs arguments, la liste formelle ressemble à
quelque chose comme :
int
d_open(dev_t dev, int flag, int mode, struct proc *p)
d_open() est appelé à chaque ouverture du périphérique.L'argument dev contient le nombre majeur et mineur du
périphérique ouvert. Ils sont disponibles par les macros
major() et minor()Les arguments flag et mode sont comme décrits sur
la page de manuel de
open.
Il est recommandé que vous examiniez
ces derniers pour vous assurer des droits d'accès dans <sys/fcntl.h>
et faire ce qui est exigé. Par exemple si flag est
(O_NONBLOCK | O_EXLOCK) l'ouverture échouerait si il bloquait ou
si l'accès exclusif ne pouvait pas être accordé.
L'argument p contient toutes les informations à propos du
processus actuel.
d_close()d_close() prend la même liste d'argument que d_open():
int
d_close(dev_t dev , int flag , int mode , struct proc *p)
d_close() est seulement appelé à la dernière fermeture de votre
périphérique (par périphérique mineur). Par exemple dans le fragment
suivant de code, d_open() est appelé 3 fois, mais d_close()
seulement une fois.
...
fd1=open("/dev/mydev", O_RDONLY);
fd2=open("/dev/mydev", O_RDONLY);
fd3=open("/dev/mydev", O_RDONLY);
...
<useful stuff with fd1, fd2, fd3 here>
...
close(fd1);
close(fd2);
close(fd3);
...
Les arguments sont semblables à ceux décrits ci-dessus pour
d_open().
d_read() et d_write()d_read() et d_write prennent les listes suivantes d'argument:
int
d_read(dev_t dev, struct uio *uio, int flat)
int
d_write(dev_t dev, struct uio *uio, int flat)
Les points d'entrée de d_read() et de d_write() sont appelés quand
read et
write
sont appelés sur votre périphérique depuis l'espace utilisateur. Le transfert
des données peut être manipulé par la routine du noyau uiomove().
d_ioctl() Sa liste d'argument est comme suit:
int
d_ioctl(dev_t dev, int cmd, caddr_t arg, int flag, struct proc *p)
d_ioctl() est un fourre-tout pour les exécutions qui ne semblent
pas raisonnable dans un paradigme lecture/écriture. Le plus
célèbre de tout les ioctl est probablement celui sur des périphériques
tty, par le
stty.
Le point d'entrée d'ioctl est appelé depuis l'ioctl() de
sys/kern/sys_generic.c
Il y a quatre types différents d'ioctl qui peuvent être implémentés.
<sys/ioccom.h> contient des macros pratiques de
pour définir ces ioctls.
_IO(g, n) pour les opérations de type contrôle.
_IOR(g, n, t) pour des opérations lisant des données d'un
périphérique.
_IOW(g, n, t) pour les opérations écrivant des données
sur un périphérique.
_IOWR(g,n,t) pour les opérations écrivant sur un périphérique
puis lisent les données.
Ici g se rapporte à un groupe /. C'est une valeur
de 8 bits, en général indicative du périphérique ; par exemple, 't'
est utilisé dans des ioctls de tty. n se
rapporte au nombre de l'ioctl dans le groupe. Sur SCO, ce seul nombre
dénote l'ioctl. t est le type de données qui sera
passé au pilote de périphérique; ceci est alors remis à un opérateur
sizeof() du noyau. L'appel système ioctl() fera soit un copyin()
soit un copyout() ou les deux à votre pilote, puis vous
renverra un pointeur à la structure de données dans l'argument
arg de l'appel d'd_ioctl. Actuellement la taille de
données est limitée à une page (4k sur l'i386).
d_stop()d_reset()d_devtotty()d_poll() (3.0 et plus) ou d_select() (2.2)la liste d'argument de d_poll() est comme suit :
void
d_poll(dev_t dev, int events, struct proc *p)
d_poll() est employé pour découvrir si un périphérique
est prêt pour les E/S. Par exemple, attendre que des données du réseau
soient dispnibles, ou que l'utilisateur presse une touche.
Cela correspond à un appel de poll() dans l'espace utilisateur.
L'appel à d_poll() devrait vérifier les événements
indiqués dans le masque d'évènement. Si aucun des événements demandés n'est
en activité, mais qu'elles pourraient devenir actif plus tard, il
devrait enregistrer ceci pour les actions futures du noyau.
d_poll() fait ceci en appelant selrecord() avec une structure
selinfo pour ce périphérique. La somme de toutes ces activités
ressemblent à quelque chose comme ceci:
static struct my_softc {
struct queue rx_queue; /* As example only - not required */
struct queue tx_queue; /* As example only - not required */
struct selinfo selp; /* Required */
} my_softc[NMYDEV];
...
static int
mydevpoll(dev_t dev, int events, struct proc *p)
{
int revents = 0; /* Events we found */
int s;
struct my_softc *sc = &my_softc[dev];
/* We can only check for IN and OUT */
if ((events & (POLLIN|POLLOUT)) == 0)
return(POLLNVAL);
s = splhigh();
/* Writes are if the transmit queue can take them */
if ((events & POLLOUT) &&
!IF_QFULL(sc->tx_queue))
revents |= POLLOUT;
/* ... while reads are OK if we have any data */
if ((events & POLLIN) &&
!IF_QEMPTY(sc->rx_queue))
revents |= POLLIN;
if (revents == 0)
selrecord(p, &sc->selp);
splx(s);
return revents;
}
d_select() est utilisé dans la version 2.2 et
précédentes de FreeBSD. Au lieu de 'events', il prend un simple
entier 'rw', qui peut être FREAD pour la lecture (comme dans
POLLIN ci-dessus), FWRITE pour l'écriture (comme dans POLLOUT ci-dessus),
et 0 pour 'exception' - lorsque quelque chose d'exceptionnel se produit,
comme une carte étant insérée ou retirée pour le pilote de
pccard.
Pour 'select', le fragment correspondant à la description
ci-dessus ressembleraient à ceci:
static int
mydevselect(dev_t dev, int rw, struct proc *p)
{
int ret = 0;
int s;
struct my_softc *sc = &my_softc[dev];
s = splhigh();
switch (rw) {
case FWRITE:
/* Writes are if the transmit queue can take them */
if (!IF_QFULL(sc->tx_queue))
ret = 1;
break;
case FREAD:
/* ... while reads are OK if we have any data */
if (!IF_QEMPTY(sc->rx_queue))
ret = 1;
break;
case 0:
/* This driver never get any exceptions */
break;
}
if(ret == 0)
selrecord(p, &sc->selp);
splx(s);
return(revents);
}
d_mmap()d_strategy()
La liste d'argument de d_strategy() est comme suit :
void
d_strategy(struct buf *bp)
d_strategy() est utilisé pour les périphériques utilisant
des E/S de type disperser-regrouper (scatter-gather).
C'est ce qu'il y a de plus courant dans un périphérique de bloc.
C'est sensiblement différent du modèle de système V, où seulement
le pilote de bloc fait une E/S de type disperser-regrouper.
Sous BSD, les périphériques de caractère sont parfois sommé d'exécuter
une E/S de type disperser-regrouper par l'intermédiaire des appels
systèmes readv() et writev().
Fichiers d'en-têteBlocStructures de données Structure struct bdevsw Structure struct bufPoints d'entréed_open() Décrit dans la section périphérique de caractère.
d_close()Décrit dans la section périphérique de caractère.
d_strategy()Décrit dans la section périphérique de caractère.
d_ioctl()Décrit dans la section périphérique de caractère.
d_dump()d_psize()Fichiers d'en-têteRéseauStructure struct ifnetPoints d'entréeif_init()if_output()if_start()if_done()if_ioctl()if_watchdog()Fichiers d'en-têteProtocole de communicationStructures de donnéesStructure struct lineswPoints d'entréel_open()l_close()l_read()l_write()l_ioctl()l_rint()l_start()l_modem()Fichiers d'en-têteBus SupportésISA -- Architecture Standard d'Industrie (Industry Standard
ArchitectureStructures de donnéesStructure struct isa_deviceCette structure est obligatoire, mais généralement elle est créée par
config à partir du fichier de configuration de noyau.
Elle est requise pour chaque périphérique, c'est à dire que si vous avez
un pilote de périphérique contrôlant deux "serial boards", vous
aurez deux structures isa_device. Si vous construisez un périphérique
comme un LKM, vous devrez créer votre propre structure isa_device afin
de refléter votre configuration (lignes 85 - 131 de pcaudio_lkm.c).
Il y a un équivalence directe ebtre le fichier de configuration et la
structureisa_device. La définition de
/usr/src/sys/i386/isa/isa_device.h
est :
struct isa_device {
int id_id; /* device id */
struct isa_driver *id_driver;
int id_iobase; /* base i/o address */
u_short id_irq; /* interrupt request */
short id_drq; /* DMA request */
caddr_t id_maddr; /* physical i/o memory address on bus (if any)*/
int id_msize; /* size of i/o memory */
inthand2_t *id_intr; /* interrupt interface routine */
int id_unit; /* unit number */
int id_flags; /* flags */
int id_scsiid; /* scsi id if needed */
int id_alive; /* device is present */
#define RI_FAST 1 /* fast interrupt handler */
u_int id_ri_flags; /* flags for register_intr() */
int id_reconfig; /* hot eject device support (such as PCMCIA) */
int id_enabled; /* is device enabled */
int id_conflicts; /* we're allowed to conflict with things */
struct isa_device *id_next; /* used in isa_devlist in userconfig() */
};
Structure struct isa_driverCette structure est définie dans
/usr/src/sys/i386/isa/isa_device.h,
est est requise pour chaque pilote de périphérique. La définition
est :
struct isa_driver {
int (*probe) __P((struct isa_device *idp));
/* test whether device is present */
int (*attach) __P((struct isa_device *idp));
/* setup driver for a device */
char *name; /* device name */
int sensitive_hw; /* true if other probes confuse us */
};
C'est la structure employée par le code sondage/attachement
(probe/attach) pour
détecter et initialiser votre périphérique. Le membre probe
est un pointeur à votre fonction permettant de sonder les périphériques.
Le membre attach est un pointeur vers votre fonction d'attache.
Le membre name est un pointeur de caractère sur le nom de deux
ou trois lettres de votre pilote.
C'est le nom enregistré pendant le processus de
sondage/attachement (et probablement aussi dans
lsdev).
Le membre sensitive_hw est un
indicateur qui aide le code de sondage à déterminer l'ordre du sondage.
Un instantiation typique est:
struct isa_driver mcddriver = { mcd_probe, mcd_attach, "mcd" };
Points d'entréeprobe()probe() prend un pointeur sur une structure isa_device
comme argument et renvoie un int. La valeur de retour est ``zéro'' ou
``non-zéro '' quant à l'absence ou à la présence de votre périphérique.
Ce point d'entrée peut être déclaré comme
static parce qu'il
est accessible par l'intermédiaire du membre
probe de la structre
isa_driver. Cette fonction est destinée à
détecter la présence de votre périphérique seulement et ne devrait
faire aucune configuration du périphérique elle-même.
attach()attach() prend également un pointeur sur une structure
isa_device comme argument et
renvoie un int. La valeur de retour est également ``zéro'' ou
``non-zéro'' indiquant si l'attache a réussie. Cette fonction
est destinée pour faire n'importe quelle initialisation spéciale du
périphérique aussi bien que pour confirmer que le périphérique est utilisable.
Il devrait aussi être déclaré static parce qu'il est accesible
par le membre attach de la structure isa_driver .
Fichiers d'en-têteEISA -- Architecture иtendue de Standard industriel (Extended Industry Standard Architecture)Structures de donnéesStructure struct eisa_dev Structure struct isa_driverPoints d'entréeprobe()Décrit dans la section de périphérique ISA.attach()Décrit dans la section de périphérique ISA.Fichiers d'en-têtePCI -- Bus d'interconnexion Périphérique (Peripheral Computer
Interconnect)Structures de données Structure struct pci_devicenom : Le nom abrégé du périphérique.
sonde: Contrôle si le pilote peut supporter un périphérique avec
ce type. L'étiquette peut être employée pour obtenir plus
d'information avec pci_read_conf(). Voir ci-dessous. Elle renvoie
une chaîne de caractères avec le nom du périphérique, ou un pointeur
NULL si le pilote ne peut pas supporter ce périphérique.
attache: Assigne une structure de contrôle et la prépare. Cette
fonction peut utiliser les fonctions de mapping PCI. Voir
ci-dessous. (identification de configuration) ou type.
compte: Un pointeur sur un compteur d'unité. Il est
employé par le configurateur de PCI pour assigner des numéros.
Points d'entréeprobe()attach()shutdown()Fichiers d'en-têteSCSI -- Small Computer Systems InterfaceStructure de donnéesStructure struct scsi_adapterStructure struct scsi_deviceStructure struct scsi_ctlr_configStructure struct scsi_device_configStructure struct scsi_linkPoints d'entréeattach()init()Fichiers d'en-têtePCCARD (PCMCIA)Structure de donnéesStructure struct slot_contStructure struct pccard_drvStructure struct pccard_devStructure struct slotPoints d'entréehandler()unload()suspend()init()Fichiers d'en-tête<pccard/slot.h>
Incorporation dans le noyauDans FreeBSD, le support des bus d'ISA et EISA est spécifique à
i386. Tandis que FreeBSD lui-même est actuellement
disponible sur la plateforme i386, un certain effort a été fait pour
faire du code portable pour PCI, PCCARD, et SCSI. Le code
spécifique à ISA et EISA réside dans
/usr/src/sys/i386/isa et
/usr/src/sys/i386/eisa respectivement. Le code indépendant de la
machine de PCI, de PCCARD, et de SCSI réside dans
/usr/src/sys/{pci,pccard,scsi}. Le code spécifique i386 quand à lui
réside dans /usr/src/sys/i386/{pci, pccard, scsi}.
Dans FreeBSD, un module de gestion de périphérique peut
être soit sous forme binaire soit sous forme de sources.
Il n'y a aucun endroit ``officiel'' pour mettre les binaires des
pilotes de périphériques. les systèmes BSD utilise quelque
chose comme sys/i386/OBJ. Puisque la plupart des pilotes sont
distribués dans les sources, la discussion suivante se rapporte à un
source pilote de périphérique.
Des binaires de pilotes de périphériques sont
parfois fournis par les constructeurs de matériel qui souhaitent
maintenir les sources de manière propriétaire.
Un pilote typique a son code source sous forme de fichier C,
comme dev.c. Le pilote peut également inclure des
fichiers; devreg.h contient typiquement des déclarations publiques
de registre de périphérique, des macros, et d'autres
déclarations spécifique au pilote de périphérique.
Quelques pilotes appellent parfois ce fichier devvar.h.
Quelques pilotes, tels que
le dgb (pour le Digiboard PC/Xe), exigent que du microcode soit chargé
sur la carte. Pour le pilote de dgb le microcode est compilé
et reporté dans un fichier d'en-tête par
file2c.
Si le pilote de périphérique a des structures de données et des
ioctl qui sont spécifiques au pilote de périphérique ou
périphérique, et
doivent être accessibles de l'espace-utilisateur, elles devraient
être mises dans un fichier d'en-tête séparé qui résidera dans
/usr/include/machine/ (certaines de ces derniers résident dans
/usr/include/sys/). Ceux-ci est typiquement nommé quelque chose comme
ioctl_dev.h ou devio.h.
Si un pilote écrit depuis l'espace
d'utilisateur est identique à un périphérique qui existe déjà, il faut
prendre garde à utiliser les mêmes
interfaces ioctl et structures de données. Par exemple, de l'espace
utilisateur, un lecteur de SCSI CDROM devrait être identique à un
lecteur de cdrom IDE; ou une ligne série sur une carte
intelligente multiport (Digiboard, Cyclades...) devrait être identique
à un périphérique sio. Ces périphériques ont une interface définie
relativement bonne et devraient être utilisées.
Il y a deux méthodes pour lier un pilote dans le
noyau, statiquement et le modèle LKM. La première méthode
est assez standard à travers la famille *BSD. L'autre
méthode a été initialement développée par Sun (je crois), et a
été mis en application dans BSD en utilisant le modèle de Sun.
Je ne crois pas que l'implémentation actuelle utilise encore le moindre
code de Sun.
Modèle Standard Les étapes exigées pour ajouter votre pilote au
noyau standard de FreeBSD sont
Ajout à la liste des pilotes de périphérique
Ajout d'une entrée au [bc]devsw
Ajout d'une entrée du pilote de périphérique au fichier de
configuration du noyau
config,
compilation et installation du noyau
créer les fichiers spéciaux requis
redémarrage
Ajout à la liste des pilotes de périphériqueLe modèle standard pour ajouter un module de gestion de périphérique
au noyau de Berkeley est d'ajouter votre pilote à la liste des
périphériques connus. Cette liste dépend de l'architecture du CPU.
Si le périphérique n'est pas spécifique i386
(PCCARD, PCI, SCSI), le fichier est dans
/usr/src/sys/conf/files.
Si le périphérique est spécifique i386, utilisez
/usr/src/sys/i386/conf/files.i386. Une ligne typique ressemblerait
à :
i386/isa/joy.c optional joy device-driver
Le premier champ relatif est le chemin du module de pilote
par rapport à /usr/src/sys.
Pour le cas d'un pilote binaire, le chemin d'accès serait quelque
chose comme i386/OBJ/joy.o.
Le deuxième champ indique à
config(8)
que c'est un pilote facultatif. Quelques
périphériques sont obligatoires pour que le noyau puisse être construit.
Le troisième champ est le nom du périphérique.
Le quatrième champ indique à config que c'est un
pilote de périphérique (par opposition à juste facultatif). Ceci
dit à config de créer des entrées pour le périphérique dans dans
des structures de /usr/src/sys/compile/KERNEL/ioconf.c.
Il est également possible de créer un fichier
/usr/src/sys/i386/conf/files.KERNEL dont le contenu ignorera le
fichier par défaut files.i386, mais seulement pour le noyau ``KERNEL''.
Faire de la place dans conf.cMaintenant vous devez éditer /usr/src/sys/i386/i386/conf.c
pour faire une entrée pour votre pilote. Quelque part au début,
vous devez déclarer vos points d'entrée. L'entrée pour
le pilote du joystick est:
#include "joy.h"
#if NJOY > 0
d_open_t joyopen;
d_close_t joyclose;
d_rdwr_t joyread;
d_ioctl_t joyioctl;
#else
#define joyopen nxopen
#define joyclose nxclose
#define joyread nxread
#define joyioctl nxioctl
#endif
Cela définit vos points d'entrée, ou points d'entrée nuls qui
renverront ENXIO quand appelé (clause #else).
Le fichier d'en-tête ``joy.h'' est automatiquement produit par
config
quand l'arborescence de construction du noyau est
créé. Cela se réduit habituellement à une seule ligne comme :
#define NJOY 1
ou
#define NJOY 0
ce qui définit le nombre de vos périphériques dans votre noyau.
Vous devez additionnellement ajouter un slot au cdevsw[&rsqb, ou
au bdevsw[&rsqb, selon que ce soit un périphérique caractère,
périphérique bloc, ou les deux si c'est un périphérique bloc
avec une interface brute. L'entrée pour le pilote du joystick
est:
/* open, close, read, write, ioctl, stop, reset, ttys, select, mmap, strat */
struct cdevsw cdevsw[] =
{
...
{ joyopen, joyclose, joyread, nowrite, /*51*/
joyioctl, nostop, nullreset, nodevtotty,/*joystick */
seltrue, nommap, NULL},
...
}
L'ordre est ce qui détermine le nombre majeur de votre
périphérique. C'est pourquoi il y aura toujours une entrée
pour votre pilote, que ce soit des points d'entrée nuls,
ou des points d'entrée actuels. Il est probablement intéressant de
noter que c'est
sensiblement différent de SCO et d'autres dérivés du système V, où
n'importe quel périphérique (dans la théorie) peut avoir n'importe
quel nombre majeur. C'est en grande partie un avantage sur FreeBSD,
sur la manière dont les fichiers spéciaux de périphérique sont créés.
Nous reviendrons en détail sur ceci plus tard.
Ajout de votre périphérique dans le fichier de configuration. Ceci ajoute simplement une ligne décrivant votre périphérique. La
ligne de description du joystick est :
device joy0 at isa? port "IO_GAME"
Ceci indique que nous avons un
périphérique appelé ``joy0'' sur le bus ISA en utilisant
le port E/S ``IO_GAME'' (IO_GAME est une macro définie dans
/usr/src/sys/i386/isa/isa.h).
Une entrée légèrement plus compliquée est pour le pilote ``ix'' :
device ix0 at isa? port 0x300 net irq 10 iomem 0xd0000 iosiz 32768
vector ixintr
Ceci indique que nous avons un périphérique appelé
`ix0 ' sur le bus ISA. Il utilise le port E/S 0x300. Son
interruption sera masqué par d'autres périphériques dans la classe
réseau. Il utilise l'interruption 10. Il utilise 32k de mémoire
partagée à l'adresse physique 0xd0000. Il le définit également
son pilote d'interruption comme étant ``ixintr()''
config
du noyau. Maintenant avec notre fichier de configuration en main,
nous pouvons créer un répertoire de compilation du noyau. Cela peut être
fait en tapant :
# config KERNEL
où KERNEL est le nom de votre fichier de configuration.
La configuration crée un arbre de compilation
pour votre noyau dans /usr/src/sys/compile/KERNEL. Elle crée le fichier
makefile, quelques fichiers C, et quelques fichiers H avec des
macros définissant le nombre de chaque périphérique à inclure dans votre
votre noyau.
Maintenant vous pouvez aller dans le répertoire de compilation et
construire votre noyau. ю chaque fois que vous lancerez config, votre
arbre de construction précédent sera retiré, à moins que vous ne lancez
config avec un -n. Si vous avez configuré et compilé un noyau GENERIC,
vous pouvez faire un ``make links'' afin d'éviter de compiler certains
fichiers à chaque itération. Typiquement, je lance :
# make depend links all
suivi d'un ``make install'' quand le noyau me convient.
Créer les fichiers spéciaux de périphériques Sur FreeBSD, vous avez la responsabilité de faire vos propres fichiers
spéciaux
de périphérique. Le
nombre majeur de votre périphérique est déterminé par le nombre de
slots dans le commutateur de périphérique. Le nombre mineur est
dépendant du pilote, naturellement. Vous pouvez
soit exécuter mknod depuis la ligne de commande, soit liasser faire le
travail à /dev/MAKEDEV.local, ou même
/dev/MAKEDEV.
Je crée parfois un script MAKEDEV.dev qui peut être soit lancé
de manière autonome soit collé dans /dev/MAKEDEV.local.
Redémarrage C'est la partie facile. Il y a un
certain nombre de méthodes pour faire ceci, reboot, fastboot,
shutdown - r, couper le courant, etc. Au démarrage, vous
devriez voir votre XXprobe() appelé, et si tout marche,
votre attach() aussi.
Module du noyau à chargement dynamique (LKM)Il n'y a vraiment aucune procédure définie pour écrire un pilote de
LKM. Ce qui suit est ma propre conception après expérimentation
avec l'interface de périphérique LKM et en regardant le modèle standard
de module de gestion de périphérique, c'est une manière d'ajouter une
interface LKM à un pilote existant sans toucher aux sources (ou binaire)
initiaux de pilote . On recommande cependant,
que si vous projetez de distribuer les sources de votre pilote,
que les parties spécifiques LKM devraient faire partie du pilote
lui-même, compilé de manière conditionnelle par la macro LKM
(c.-à-d. #ifdef LKM).
Cette section se concentrera sur la manière d'écrire la partie spécifique
LKM du pilote. Nous supposerons que nous avons écrit un
pilote qui atterrira dans le modèle standard de
gestion de périphérique, que nous voudrions maintenant mettre en
application comme étant LKM. Nous utiliserons le pilote de pcaudio
comme pilote d'exemple, et développerons une entrée LKM. La
source et le fichier makefile pour le LKM pcaudio , ``pcaudio_lkm.c''
et ``Makefile'', devraient être dans placé /usr/src/lkm/pcaudio.
Ce qui suit est le code commenté de pcaudio_lkm.c.
Lignes 17 - 26
Ceci inclut le fichier ``pca.h'' et fait une compilation conditionnelle
du reste de LKM suivant que vous avez défini ou non le pilote de
périphérique pcaudio.
Cela imite le comportement de config. Dans un pilote de
périphérique standard,
config
produit le fichier pca.h depuis le nombre de périphériques pca
le fichier de config.
17 /*
18 * figure out how many devices we have..
19 */
20
21 #include "pca.h"
22
23 /*
24 * if we have at least one ...
25 */
26 #if NPCA > 0
Lignes 27 - 37
Les fichiers d'en-tête requis depuis divers répertoire d'inclusion.
27 #include <sys/param.h>
28 #include <sys/systm.h>
29 #include <sys/exec.h>
30 #include <sys/conf.h>
31 #include <sys/sysent.h>
32 #include <sys/lkm.h>
33 #include <sys/errno.h>
34 #include <i386/isa/isa_device.h>
35 #include <i386/isa/isa.h>
36
37
Lignes 38 - 51
déclarent vos points d'entrée comme externs .
38 /*
39 * declare your entry points as externs
40 */
41
42 extern int pcaprobe(struct isa_device *);
43 extern int pcaattach(struct isa_device *);
44 extern int pcaopen(dev_t, int, int, struct proc *);
45 extern int pcaclose(dev_t, int, int, struct proc *);
46 extern int pcawrite(dev_t, struct uio *, int);
47 extern int pcaioctl(dev_t, int, caddr_t);
48 extern int pcaselect(dev_t, int, struct proc *);
49 extern void pcaintr(struct clockframe *);
50 extern struct isa_driver pcadriver;
51
Lignes 52 - 70
Cela crée la table d'entrée de commutateur de périphérique pour
votre pilote. Cette table est en gros entièrement mise dans le
système de commutation de périphériques à l'emplacement indiqué par
votre nombre majeur. Dans le modèle standard, c'est dans
/usr/src/sys/i386/i386/conf.c.
NOTE: vous ne pouvez pas sélectionner
un nombre majeur de périphérique plus grand que ce qui existe dans
conf.c, par exemple
il y a 67 slots pour des périphériques caractère, vous ne popuvez pas
utiliser un périphérique (caractère) de numéro majeur 67 ou
plus, sans avoir d'abord réservé de l'espace dans conf.c.
52 /*
53 * build your device switch entry table
54 */
55
56 static struct cdevsw pcacdevsw = {
57 (d_open_t *) pcaopen, /* open */
58 (d_close_t *) pcaclose, /* close */
59 (d_rdwr_t *) enodev, /* read */
60 (d_rdwr_t *) pcawrite, /* write */
61 (d_ioctl_t *) pcaioctl, /* ioctl */
62 (d_stop_t *) enodev, /* stop?? */
63 (d_reset_t *) enodev, /* reset */
64 (d_ttycv_t *) enodev, /* ttys */
65 (d_select_t *) pcaselect, /* select */
66 (d_mmap_t *) enodev, /* mmap */
67 (d_strategy_t *) enodev /* strategy */
68 };
69
70
Lignes 71 - 131
cette section est analogue à la déclaration de fichier de configuration
de votre périphérique. Les membres de la structure isa_device sont
remplis grace à ce qu'il connait de votre périphérique,
port E/S, segment partagé de mémoire, etc...
Nous n'aurons probablement jamais un besoin de deux périphériques
pcaudio dans le noyau, mais cet exemple montre comment
périphériques multiples peuvent être supportés.
71 /*
72 * this lkm arbitrarily supports two
73 * instantiations of the pc-audio device.
74 *
75 * this is for illustration purposes
76 * only, it doesn't make much sense
77 * to have two of these beasts...
78 */
79
80
81 /*
82 * these have a direct correlation to the
83 * config file entries...
84 */
85 struct isa_device pcadev[NPCA] = {
86 {
87 11, /* device id */
88 &pcadriver, /* driver pointer */
89 IO_TIMER1, /* base io address */
90 -1, /* interrupt */
91 -1, /* dma channel */
92 (caddr_t)-1, /* physical io memory */
93 0, /* size of io memory */
94 pcaintr , /* interrupt interface */
95 0, /* unit number */
96 0, /* flags */
97 0, /* scsi id */
98 0, /* is alive */
99 0, /* flags for register_intr */
100 0, /* hot eject device support */
101 1 /* is device enabled */
102 },
103 #if NPCA >1
104 {
105
106 /*
107 * these are all zeros, because it doesn't make
108 * much sense to be here
109 * but it may make sense for your device
110 */
111
112 0, /* device id */
113 &pcadriver, /* driver pointer */
114 0, /* base io address */
115 -1, /* interrupt */
116 -1, /* dma channel */
117 -1, /* physical io memory */
118 0, /* size of io memory */
119 NULL, /* interrupt interface */
120 1, /* unit number */
121 0, /* flags */
122 0, /* scsi id */
123 0, /* is alive */
124 0, /* flags for register_intr */
125 0, /* hot eject device support */
126 1 /* is device enabled */
127 },
128 #endif
129
130 };
131
Lignes 132 - 139
Ceci appelle la macro MOD_DEV du préprocesseur C, qui
installe un module de gestion de périphérique de LKM, par
opposition à un système de fichiers LKM, ou un appel système de LKM.
132 /*
133 * this macro maps to a function which
134 * sets the LKM up for a driver
135 * as opposed to a filesystem, system call, or misc
136 * LKM.
137 */
138 MOD_DEV("pcaudio_mod", LM_DT_CHAR, 24, &pcacdevsw);
139
Lignes 140 - 168
c'est la fonction qui sera appelée lorsque le pilote sera
chargé. Cette fonction essaye de fonctionner comme
/sys/i386/isa/isa.c qui fait les appels de probe/attach pour un
pilote au moment du redémarrage. La plus grande astuce ici est qu'il
met en correspondance l'adresse physique du segment partagé de mémoire, qui est
indiqué dans la structure isa_device à une adresse virtuelle du noyau.
Normalement, l'adresse physique est mise dans le fichier de configuration
qui construit la structure isa_device dans
/usr/src/sys/compile/KERNEL/ioconf.c. La séquence probe/attach de
/usr/src/sys/isa/isa.c traduit l'adresse physique en une virtuelle de
sorte que dans les sous-programmes de probe/attach vous puissiez
faire des choses comme
(int *)id->id_maddr = something;
et se réfère juste au segment partagé de mémoire
par l'intermédiaire de pointeurs.
140 /*
141 * this function is called when the module is
142 * loaded; it tries to mimic the behavior
143 * of the standard probe/attach stuff from
144 * isa.c
145 */
146 int
147 pcaload(){
148 int i;
149 uprintf("PC Audio Driver Loaded\n");
150 for (i=0; i<NPCA; i++){
151 /*
152 * this maps the shared memory address
153 * from physical to virtual, to be
154 * consistent with the way
155 * /usr/src/sys/i386/isa.c handles it.
156 */
157 pcadev[i].id_maddr -=0xa0000;
158 pcadev[i].id_maddr += atdevbase;
159 if ((*pcadriver.probe)(pcadev+i)) {
160 (*(pcadriver.attach))(pcadev+i);
161 } else {
162 uprintf("PC Audio Probe Failed\n");
163 return(1);
164 }
165 }
166 return 0;
167 }
168
Lignes 169 - 179
c'est la fonction appelée quand votre pilote n'est pas
chargé; il affiche juste un message à cet effet.
169 /*
170 * this function is called
171 * when the module is unloaded
172 */
173
174 int
175 pcaunload(){
176 uprintf("PC Audio Driver Unloaded\n");
177 return 0;
178 }
179
Lignes 180 - 190
c'est le point d'entrée qui est indiqué sur la ligne de commande
de modload. Par convention il est nommé <dev>_mod. C'est
ainsi qu'il est défini dans bsd.lkm.mk, le makefile qui
construit le LKM. Si vous nommez votre module suivant cette
convention, vous pouvez faire ``make load'' et ``make unload''
de /usr/src/lkm/pcaudio.Note : Il y a eu tellement de révisions entre la version 2.0 et
2.1. Il peut ou ne peut ne pas être possible d'écrire
un module qui est portable pour chacune des trois versions.
180 /*
181 * this is the entry point specified
182 * on the modload command line
183 */
184
185 int
186 pcaudio_mod(struct lkm_table *lkmtp, int cmd, int ver)
187 {
188 DISPATCH(lkmtp, cmd, ver, pcaload, pcaunload, nosys);
189 }
190
191 #endif /* NICP > 0 */
Idiosyncrasies du type périphériqueCaractèreBlocRéseauLine disciplineIdiosyncrasies du type busISAEISAPCISCSIPCCARDSupport du noyauStructures de donnéesStructure struct kern_devconfCette structure contient quelques informations sur l'état du
périphérique et de son pilote. Elle est définie dans
/usr/src/sys/sys/devconf.h comme ci-dessous :
struct devconf {
char dc_name[MAXDEVNAME]; /* name */
char dc_descr[MAXDEVDESCR]; /* description */
int dc_unit; /* unit number */
int dc_number; /* unique id */
char dc_pname[MAXDEVNAME]; /* name of the parent device */
int dc_punit; /* unit number of the parent */
int dc_pnumber; /* unique id of the parent */
struct machdep_devconf dc_md; /* machine-dependent stuff */
enum dc_state dc_state; /* state of the device (see above) */
enum dc_class dc_class; /* type of device (see above) */
size_t dc_datalen; /* length of data */
char dc_data[1]; /* variable-length data */
};
Structure struct proc Cette structure contient toutes les informations sur un processus.
Elle est dans définie /usr/src/sys/sys/proc.h:
/*
* Description of a process.
*
* This structure contains the information needed to manage a thread of
* control, known in UN*X as a process; it has references to
substructures
* containing descriptions of things that the process uses, but may
share
* with related processes. The process structure and the substructures
* are always addressable except for those marked "(PROC ONLY)" below,
* which might be addressable only on a processor on which the process
* is running.
*/
struct proc {
struct proc *p_forw; /* Doubly-linked run/sleep queue. */
struct proc *p_back;
struct proc *p_next; /* Linked list of active procs */
struct proc **p_prev; /* and zombies. */
/* substructures: */
struct pcred *p_cred; /* Process owner's identity. */
struct filedesc *p_fd; /* Ptr to open files structure. */
struct pstats *p_stats; /* Accounting/statistics (PROC ONLY). */
struct plimit *p_limit; /* Process limits. */
struct vmspace *p_vmspace; /* Address space. */
struct sigacts *p_sigacts; /* Signal actions, state (PROC ONLY). */
#define p_ucred p_cred->pc_ucred
#define p_rlimit p_limit->pl_rlimit
int p_flag; /* P_* flags. */
char p_stat; /* S* process status. */
char p_pad1[3];
pid_t p_pid; /* Process identifier. */
struct proc *p_hash; /* Hashed based on p_pid for kill+exit+... */
struct proc *p_pgrpnxt; /* Pointer to next process in process group. */
struct proc *p_pptr; /* Pointer to process structure of parent. */
struct proc *p_osptr; /* Pointer to older sibling processes. */
/* The following fields are all zeroed upon creation in fork. */
#define p_startzero p_ysptr
struct proc *p_ysptr; /* Pointer to younger siblings. */
struct proc *p_cptr; /* Pointer to youngest living child. */
pid_t p_oppid; /* Save parent pid during ptrace. XXX */
int p_dupfd; /* Sideways return value from fdopen. XXX */
/* scheduling */
u_int p_estcpu; /* Time averaged value of p_cpticks. */
int p_cpticks; /* Ticks of cpu time. */
fixpt_t p_pctcpu; /* %cpu for this process during p_swtime */
void *p_wchan; /* Sleep address. */
char *p_wmesg; /* Reason for sleep. */
u_int p_swtime; /* Time swapped in or out. */
u_int p_slptime; /* Time since last blocked. */
struct itimerval p_realtimer; /* Alarm timer. */
struct timeval p_rtime; /* Real time. */
u_quad_t p_uticks; /* Statclock hits in user mode. */
u_quad_t p_sticks; /* Statclock hits in system mode. */
u_quad_t p_iticks; /* Statclock hits processing intr. */
int p_traceflag; /* Kernel trace points. */
struct vnode *p_tracep; /* Trace to vnode. */
int p_siglist; /* Signals arrived but not delivered. */
struct vnode *p_textvp; /* Vnode of executable. */
char p_lock; /* Process lock (prevent swap) count. */
char p_pad2[3]; /* alignment */
/* End area that is zeroed on creation. */
#define p_endzero p_startcopy
/* The following fields are all copied upon creation in fork. */
#define p_startcopy p_sigmask
sigset_t p_sigmask; /* Current signal mask. */
sigset_t p_sigignore; /* Signals being ignored. */
sigset_t p_sigcatch; /* Signals being caught by user. */
u_char p_priority; /* Process priority. */
u_char p_usrpri; /* User-priority based on p_cpu and p_nice. */
char p_nice; /* Process "nice" value. */
char p_comm[MAXCOMLEN+1];
struct pgrp *p_pgrp; /* Pointer to process group. */
struct sysentvec *p_sysent; /* System call dispatch information. */
struct rtprio p_rtprio; /* Realtime priority. */
/* End area that is copied on creation. */
#define p_endcopy p_addr
struct user *p_addr; /* Kernel virtual addr of u-area (PROC ONLY). */
struct mdproc p_md; /* Any machine-dependent fields. */
u_short p_xstat; /* Exit status for wait; also stop signal. */
u_short p_acflag; /* Accounting flags. */
struct rusage *p_ru; /* Exit information. XXX */
};
Structure struct bufLa structure struct buf est employée pour s'interfacer
avec le cache de la mémoire tampon. Elle est dans
définie /usr/src/sys/sys/buf.h :
/*
* The buffer header describes an I/O operation in the kernel.
*/
struct buf {
LIST_ENTRY(buf) b_hash; /* Hash chain. */
LIST_ENTRY(buf) b_vnbufs; /* Buffer's associated vnode. */
TAILQ_ENTRY(buf) b_freelist; /* Free list position if not active. */
struct buf *b_actf, **b_actb; /* Device driver queue when active. */
struct proc *b_proc; /* Associated proc; NULL if kernel. */
volatile long b_flags; /* B_* flags. */
int b_qindex; /* buffer queue index */
int b_error; /* Errno value. */
long b_bufsize; /* Allocated buffer size. */
long b_bcount; /* Valid bytes in buffer. */
long b_resid; /* Remaining I/O. */
dev_t b_dev; /* Device associated with buffer. */
struct {
caddr_t b_addr; /* Memory, superblocks, indirect etc. */
} b_un;
void *b_saveaddr; /* Original b_addr for physio. */
daddr_t b_lblkno; /* Logical block number. */
daddr_t b_blkno; /* Underlying physical block number. */
/* Function to call upon completion. */
void (*b_iodone) __P((struct buf *));
/* For nested b_iodone's. */
struct iodone_chain *b_iodone_chain;
struct vnode *b_vp; /* Device vnode. */
int b_pfcent; /* Center page when swapping cluster. */
int b_dirtyoff; /* Offset in buffer of dirty region. */
int b_dirtyend; /* Offset of end of dirty region. */
struct ucred *b_rcred; /* Read credentials reference. */
struct ucred *b_wcred; /* Write credentials reference. */
int b_validoff; /* Offset in buffer of valid region. */
int b_validend; /* Offset of end of valid region. */
daddr_t b_pblkno; /* physical block number */
caddr_t b_savekva; /* saved kva for transfer while bouncing */
void *b_driver1; /* for private use by the driver */
void *b_driver2; /* for private use by the driver */
void *b_spc;
struct vm_page *b_pages[(MAXPHYS + PAGE_SIZE - 1)/PAGE_SIZE];
int b_npages;
};
Structure struct uioCette structure est utilisée pour déplacer des données entre le noyau et
les espaces utilisateur par les appels système de read() et de write().
Il est dans défini /usr/src/sys/sys/uio.h :
struct uio {
struct iovec *uio_iov;
int uio_iovcnt;
off_t uio_offset;
int uio_resid;
enum uio_seg uio_segflg;
enum uio_rw uio_rw;
struct proc *uio_procp;
};
FonctionspleinRéférences. FreeBSD Kernel Sources http://www.freebsd.org
NetBSD Kernel Sources http://www.netbsd.org
Writing Device Drivers: Tutorial and Reference;
Tim Burke, Mark A. Parenti, Al, Wojtas;
Digital Press, ISBN 1-55558-141-2.
Writing A Unix Device Driver;
Janet I. Egan, Thomas J. Teixeira;
John Wiley & Sons, ISBN 0-471-62859-X.
Writing Device Drivers for SCO Unix;
Peter Kettle;
diff --git a/fr_FR.ISO8859-1/articles/diskless-x/article.sgml b/fr_FR.ISO8859-1/articles/diskless-x/article.sgml
index 06e7730218..f347877d83 100644
--- a/fr_FR.ISO8859-1/articles/diskless-x/article.sgml
+++ b/fr_FR.ISO8859-1/articles/diskless-x/article.sgml
@@ -1,298 +1,298 @@
%man;
%urls;
%abstract;
%artheader;
%translators;
%authors;
- %mailing-lists;
+ %mailing-lists;
]>
Mise en oeuvre d'un terminal X sans disque dur JerryKendalljerry@kcis.com28 Décembre 19961996Jerry KendallAvec l'aide de quelques amis de la &a.hackers;, j'ai pu mettre en service un terminal X sans disque dur. Pour cela, j'ai d'abord dû installer une station sans disque qui dispose d'un minimum d'utilitaires montés par NFS. J'ai répété l'opération pour disposer de deux systèmes sans disque. Pour les deux, j'ai procédé de la même façon. Le premier est altair.kcis.com. C'est un terminal X sur mon vieux 386DX-40. Il a bien un disque dur de 340 Mo, mais je ne voulais pas y toucher. Il démarre donc à partir de antares.kcis.com sur le réseau Ethernet. Le second est un 486DX2-66. J'ai installé un système FreeBSD (complet) qui n'utilise pas de disque local. Le serveur de démarrage est un Sun 670MP sous SunOs 4.1.3. Les deux systèmes FreeBSD sont configurés de la même façon.Je suis sûr qu'il y a des choses à ajouter à ce document. Faites-moi s'il vous plaît part de vos commentaires.
&abstract.license;
&abstract.disclaimer;
&trans.a.haby;
Préparation de la disquette de démarrage (sur le système sans disque)Les gestionnaires de démarrage via le réseau ne sont pas compatibles avec les TSRs et autres qu'utilise MS-DOS, il est préférable de préparer une disquette de démarrage, ou, si vous le pouvez, de mettre en place un menu MS-DOS qui (par l'intermédiaire des fichiers config.sys/autoexec.bat) vous demande au démarrage quelle configuration charger. C'est cette dernière méthode que j'ai utilisée et elle fonctionne à merveille. Voici mon menu MS-DOS :config.sys[menu]
menuitem=normal, normal
menuitem=unix, unix
[normal]
....
config.sys habituel
...
[unix]autoexec.bat@ECHO OFF
goto %config%
:normal
...
autoexec.bat habituel
...
goto end
:unix
cd \netboot
nb8390.com
:endGénérer les programmes de démarrage en réseau (sur le serveur)Compilez les programmes de “démarrage en réseau” que vous trouverez dans /usr/src/sys/i386/boot/netboot. Lisez les commentaires au début du Makefile. Faites les modifications nécessaires. Faites une sauvegarde de l'original, pour vous prémunir en cas de problèmes. Après compilation, vous devriez obtenir deux exécutables, nb8390.com et nb3c509.com. C'est l'un de ces programmes que vous devrez exécuter sur la machine sans disque. Il chargera le noyau depuis le serveur de démarrage. Recopiez alors ces deux programmes sur la disquette de démarrage que vous avez créée auparavant.Déterminer le programme à utiliser (sur la machine sans disque)Si vous savez quel composant utilise votre carte Ethernet, c'est facile. Si vous avez un circuit NS8390 ou équivalent, servez vous de nb8390.com. Si vous avez un circuit de type 3Com 509, utilisez le programme de démarrage nb3C509.com. Si vous ne savez pas, essayez l'un et si vous avez le message “No adapter found”, essayez avec l'autre. Si rien ne marche, vous êtes livré à vous-même.Démarrer en réseauDémarrez la station sans disque sans fichiers config.sys/autoexec.bat. Essayez d'exécuter le programme de démarrage qui correspond à votre carte Ethernet.Ma carte Ethernet utilise le mode 16bit WD8013 16bit, j'exécute donc
nb8390.com :C:>cd \netbootC:>nb8390Boot from Network (Y/N) ?Y
BOOTP/TFTP/NFS bootstrap loader ESC for menu
Searching for adapter..
WD8013EBT base 0x0300, memory 0x000D8000, addr 00:40:01:43:26:66
Searching for server...La machine sans disque essaye maintenant de trouver un serveur de démarrage. Notez la valeur de addr sur l'avant dernière ligne, vous en aurez besoin ensuire. Redémarrez la machine sans disque et modifiez vos
fichiers config.sys et autoexec.bat pour qu'ils fassent automatiquement ce que vous venez de faire à la main. Peut-être avec un menu. Si vous aviez dû utiliser nb3c509.com au lieu de nb8390.com, les messages seraient identiques. Si vous obtenez le message “No adapter found” après “Searching for adapter...”, vérifiez que vous avez défini les bonnes valeurs dans le Makefile au moment de compiler.Permettre aux systèmes de démarrer via le réseau (sur le serveur)Vérifiez qu'il y a bien des entrées pour tftp et bootps dans le fichier /etc/inetd.conf. Voici le mien :tftp dgram udp wait nobody /usr/libexec/tftpd tftpd
#
# Ajout de qui que vous soyez
bootps dgram udp wait root /usr/libexec/bootpd bootpd /etc/bootptabSi vous devez modifier le fichier /etc/inetd.conf, envoyez ensuite un signal HUP à inetd. Pour cela, utilisez la commande ps -ax | grep inetd | grep -v grep pour connaître le numéro de processus d'inetd. Une fois que vous l'avez, envoyez lui le signal HUP. Cela se fait avec kill -HUP <pid>. Cela obligera inetd à relire ses fichiers de configuration.Vous avez bien noté la valeur de addr dans les messages du programme de démarrage sur la machine sans disque ? C'est maintenant que vous allez en avoir besoin.Ajoutez une entrée à /etc/bootptab (vous devrez peut-être créer ce fichier). Voici à quoi elle doit ressembler :altair:\
:ht=ether:\
:ha=004001432666:\
:sm=255.255.255.0:\
:hn:\
:ds=199.246.76.1:\
:ip=199.246.76.2:\
:gw=199.246.76.1:\
:vm=rfc1048:Ce qui, ligne par ligne, signifie :altairnom du système sans disque, sans nom de domaineht=ethertype matériel “ethernet”ha=004001432666adresse matérielle (le nombre que vous avez noté auparavant)sm=255.255.255.0masque de sous-réseauhndit au serveur de donner au client son nom de machineds=199.246.76.1dit au client quel est son serveur de noms de domaineip=199.246.76.2dit au client quelle est son adresse IPgw=199.246.76.1dit au client quelle est sa passerelle par défautvm=...laissez cela tel queVeillez à bien définir les adresses IP, j'ai inventé celles de l'exemple.Créez le répertoire /tftpboot sur le serveur. Il contiendra les fichiers de configuration pour les systèmes sans disque dont ce sera le serveur de démarrage. Ces fichiers s'appeleront cfg.<ip>, où <ip> est l'adresse IP de la machine sans disque. Le fichier de configuration pour “altair” est /tftpboot/cfg.199.246.76.2. Voici son contenu :rootfs 199.246.76.1:/DiskLess/rootfs/altair
hostname altair.kcis.comLa ligne hostname altair.kcis.com indique seulement au système sans disque quel est son nom qualifié.La ligne rootfs 199.246.76.1:/DiskLess/rootfs/altair lui dit où est son système de fichiers racine qui sera monté par NFS.Ce système de fichiers racine sera monté en lecture seule par NFS.L'arborescence de la machine sans disque peut ensuite être remontée pour autoriser les opérations de lecture/écriture.J'utilise mon 386DX-40 comme terminal X dédié.Voici l'arborescence d'“altair” :/
/bin
/etc
/tmp
/sbin
/dev
/dev/fd
/usr
/var
/var/runEt la liste des fichiers qu'elle contient :-r-xr-xr-x 1 root wheel 779984 Dec 11 23:44 ./kernel
-r-xr-xr-x 1 root bin 299008 Dec 12 00:22 ./bin/sh
-rw-r--r-- 1 root wheel 499 Dec 15 15:54 ./etc/rc
-rw-r--r-- 1 root wheel 1411 Dec 11 23:19 ./etc/ttys
-rw-r--r-- 1 root wheel 157 Dec 15 15:42 ./etc/hosts
-rw-r--r-- 1 root bin 1569 Dec 15 15:26 ./etc/XF86Config.altair
-r-x------ 1 bin bin 151552 Jun 10 1995 ./sbin/init
-r-xr-xr-x 1 bin bin 176128 Jun 10 1995 ./sbin/ifconfig
-r-xr-xr-x 1 bin bin 110592 Jun 10 1995 ./sbin/mount_nfs
-r-xr-xr-x 1 bin bin 135168 Jun 10 1995 ./sbin/reboot
-r-xr-xr-x 1 root bin 73728 Dec 13 22:38 ./sbin/mount
-r-xr-xr-x 1 root wheel 1992 Jun 10 1995 ./dev/MAKEDEV.local
-r-xr-xr-x 1 root wheel 24419 Jun 10 1995 ./dev/MAKEDEVN'oubliez pas d'exécuter MAKEDEV all dans le répertoire dev.Voici enfin mon /etc/rc pour altair :#!/bin/sh
#
PATH=/bin:/
export PATH
#
# configurer l'interface “en boucle”
/sbin/ifconfig lo0 127.0.0.1
#
# configurer la carte Ethernet
/sbin/ifconfig ed0 199.246.76.2 netmask 0xffffff00
#
# monter le système de fichiers racine via NFS
/sbin/mount antares:/DiskLess/rootfs/altair /
#
# monter le système de fichiers /usr via NFS
/sbin/mount antares:/DiskLess/usr /usr
#
/usr/X11R6/bin/XF86_SVGA -query antares -xf86config /etc/XF86Config.altair > /dev/null 2>&1
#
# Rédemarrer lorsque l'on quitte X
/sbin/reboot
#
# Nous avons planté ...
exit 1Vos commentaires et questions sont bienvenus.
diff --git a/fr_FR.ISO8859-1/articles/fonts/article.sgml b/fr_FR.ISO8859-1/articles/fonts/article.sgml
index 9c25025ba2..d65c5193d2 100755
--- a/fr_FR.ISO8859-1/articles/fonts/article.sgml
+++ b/fr_FR.ISO8859-1/articles/fonts/article.sgml
@@ -1,775 +1,775 @@
%man;
%urls;
%abstract;
%artheader;
%translators;
%authors;
- %mailing-lists;
+ %mailing-lists;
]>
FreeBSD et les polices de caractèresUn guide utilisateurDaveBodenstab
&artheader.copyright;
imdave@synet.netMercredi 7 Aout 1996Ce document décrit les différents fichiers de polices de caractères
qui peuvent être utilisés avec FreeBSD et le pilote syscons, X11,
GhostScript et Groff. Des exemples immédiatement applicables sont donnés
pour passer l'affichage à la console en mode 80x60 et pour se servir des
polices “Type 1” avec les programmes d'application
précités.
&abstract.license;
&abstract.disclaimer;
&trans.a.haby;
IntroductionIl y a de nombreuses sources de polices de caractères disponibles,
et l'on peut se demander comment les utiliser avec FreeBSD. La
réponse peut être obtenue en détaillant attentivement la
documentation du composant voulu. Cela peut prendre beaucoup de
temps, ce guide essaie donc de fournir un raccourci pour les autres
personnes que cela intéresserait.Terminologie élémentaireIl y a de nombreux formats de polices de caractères avec chacun
son propre suffixe de nom de fichier. Quelques uns d'entre eux
seront discutés dans ce document:.pfa, .pfbPolices PostScript “Type 1”.
.pfa est le format Ascii
et .pfb le format
Binaire..afmLe fichier de dimensions d'une police
“Type 1”..pfmLe fichier de dimensions pour l'impression d'une police
“Type 1”..ttfPolice “True Type”..fotRéférence indirecte à une police “True Type” (ce
n'est pas la police elle-même)..fon, .fntPolice de caractères “bitmap” pour affichage à
l'écran.Les fichiers .fot sont employés par Windows un
peu de la même façon que des liens symboliques vers le fichiers de police
“True Type” (.ttf). Les fichiers
.fon sont aussi utilisés par Windows. Je ne
connais pas de moyen de se servir de ces fichiers avec FreeBSD.Quels formats de polices de caractères puis-je utiliser?Le format de fichier de police de caractères utile dépend de
l'application. FreeBSD lui-même n'utilise pas de police de
caractères. Ce sont les programmes d'application et/ou les pilotes
qui se servent éventuellement de ces fichiers. Voici un petit tableau
associant application/pilote de périphérique et suffixe des fichiers de
police de caractères:.fnt.pfa.pfb.ttf.afmPilote sysconsOuiGhostScriptOuiOuiOuiX11OuiOuiGroffOuiOuiPovrayOuiLe suffixe .fnt est assez fréquemment utilisé.
Je soupçonne que lorsque quelqu'un veut créer un fichier de police de
caractères spécialisé pour son application, il choisit la plupart du temps
ce suffixe. Il y a donc des chances pour que des fichiers avec ce
suffixe n'aient pas tous le même format; en particulier, les fichiers
.fnt utilisés par le pilote syscons de FreeBSD
n'auront peut-être pas le même format qu'un fichier
.fnt utilisé dans l'environnement DOS/Windows. Je
n'ai jamais essayé d'utiliser d'autres fichiers .fnt
que ceux fournis avec FreeBSD.Configurer une console virtuelle en mode 80x60 lignesIl faut d'abord charger une police de caractères 8x8. Le fichier
/etc/sysconfigN.d.T.:
/etc/rc.conf dans les versions récentes de
FreeBSD. doit donc contenir les lignes:
# choose font 8x8 from /usr/share/syscons/fonts/* (or NO for default)
font8x8=/usr/share/syscons/fonts/cp437-8x8.fnt
La commande pour changer de mode d'affichage est
vidcontrol1:bash$vidcontrol VGA_80x60Différents programmes en mode plein-écran, tel
vi1,
doivent pouvoir déterminer la taille actuelle de l'écran. Elle peut être
configurée avec
stty1:bash$stty crt rows 60 columns 80Pour rendre cela moins fastidieux, ces commandes peuvent être
introduites dans une procédure exécutée au démarrage du système. Voici une
façon de le faire:Modifiez /etc/sysconfig comme expliqué plus
haut,Ajoutez les lignes suivantes à
/etc/rc.local:
for tty in /dev/ttyv?
do
vidcontrol VGA_80x60 <$tty >/dev/null 2>&1
done
Ajoutez les lignes suivantes à
/etc/profile:
TTYNAME=`basename \`tty\``
if expr "$TTYNAME" : 'ttyv' > /dev/null
then
stty crt rows 60 columns 80
fi
Références:
stty1,
vidcontrol1.X11 et les polices “Type 1”X11 peut employer les formats de police de caractères
.pfa et .pfb. Il y a une
référence croisée de chaque fichier sur son nom X11 par l'intermédiaire du
fichier fonts.dir de chaque répertoire.Il y a déjà un répertoire appelé Type1. La façon
la plus immédiate d'ajouter une police de caractères est de la mettre dans
ce répertoire. Une meilleure manière de procéder est de mettre toutes les
nouvelle polices dans un répertoire distinct et d'utiliser un lien
symbolique sur ces nouvelles polices. Il est alors plus facile de
distinguer ses propres polices de celles qui sont fournies d'origine. Par
exemple:Créer un repertoire pour les fichiers de police de
caractères.bash$mkdir -p /usr/local/share/fonts/type1bash$cd /usr/local/share/fonts/type1Y mettre les fichiers .pfa,
.pfb et .afm. On peut aussi
vouloir y conserver les fichiers README et autres
documentations concernant les polices de caractères.bash$cp /cdrom/fonts/atm/showboat/showboat.pfb .bash$cp /cdrom/fonts/atm/showboat/showboat.afm .Tenir à jour un index pour créer les références croisées
sur les polices.bash$echo showboat - InfoMagic CICA, Dec 1994, /fonts/atm/showboat >>INDEXPour pouvoir maintenant utiliser une nouvelle police de caractères, il
faut mettre le fichier à disposition, et mettre à jour le fichier des
noms de polices. Les noms de police X11 se présentent comme suit:
-bitstream-charter-medium-r-normal-xxx-0-0-0-0-p-0-iso8859-1
| | | | | | | | | | | | \ \
| | | | | \ \ \ \ \ \ \ +----+- jeu de caractères
| | | | \ \ \ \ \ \ \ +- largeur moyenne
| | | | \ \ \ \ \ \ +- espacement
| | | \ \ \ \ \ \ +- résolution verticale
| | | \ \ \ \ \ +- résolution horizontale
| | | \ \ \ \ +- points
| | | \ largeur \ +- pixels
| | | \ \
casse famille graisse inclinaison style supplémentaire
Il faut créer un nouveau nom pour chaque nouvelle police. Si la
documentation qui l'accompagne vous donne quelques informations, elle
peut servir de base pour définir ce nom. Si vous n'avez aucune
information, vous pouvez utiliser la commande
strings1 sur le fichier de police. Par
exemple:bash$strings showboat.pfb | more
%!FontType1-1.0: Showboat 001.001
%%CreationDate: 1/15/91 5:16:03 PM
%%VMusage: 1024 45747
% Generated by Fontographer 3.1
% Showboat
1991 by David Rakowski. Alle Rechte Vorbehalten.
FontDirectory/Showboat known{/Showboat findfont dup/UniqueID known{dup
/UniqueID get 4962377 eq exch/FontType get 1 eq and}{pop false}ifelse
{save true}{false}ifelse}{false}ifelse
12 dict begin
/FontInfo 9 dict dup begin
/version (001.001) readonly def
/FullName (Showboat) readonly def
/FamilyName (Showboat) readonly def
/Weight (Medium) readonly def
/ItalicAngle 0 def
/isFixedPitch false def
/UnderlinePosition -106 def
/UnderlineThickness 16 def
/Notice (Showboat
1991 by David Rakowski. Alle Rechte Vorbehalten.) readonly def
end readonly def
/FontName /Showboat def
--stdin--
A partir de ces informations, le nom pourrait être:
-type1-Showboat-medium-r-normal-decorative-0-0-0-0-p-0-iso8859-1
Les composantes de ce nom sont:CasseAppelons simplement toutes nos nouvelles polices
type1.FamilleLe nom de la police.GraisseNormal, gras, médium, semi-gras, etc. D'après les résultats
de strings1 ci-dessus, la police a une
graisse médium.Inclinaisonroman, italique ou
oblique. Comme
ItaliqueAngle vaut 0, nous utiliserons
roman.LargeurNormale, large, condensée, étendue, etc. Jusqu'à ce que nous la
déterminions à l'usage, nous supposerons qu'elle est
normale.Style supplémentaireHabituellement non renseigné, mais nous nous en servons pour
indiquer que la police contient des majuscules décoratives.EspacementProportionnel ou fixe. Comme isFixedPitch
est faux, nous utilisons Proportionnel. Tous ces noms sont arbitraires, mais il faut essayer de rester
compatible avec les conventions existantes. Une police est connue d'une
application X11 sous un nom qui peut éventuellement comporter des
caractères de substitution, il faut donc choisir un nom significatif. On
peut commencer en utilisant simplement:
...-normal-r-normal-...-p-...
comme nom, puis se servir de
xfontsel1 pour visualiser la police et
affiner son nom en fonction de ce à quoi elle ressemble.Donc, pour compléter notre exemple:Rendre la police accessible à X11bash$cd /usr/X11R6/lib/X11/fonts/Type1bash$ln -s /usr/local/share/fonts/type1/showboat.pfb .Editer fonts.scale et
fonts.dir pour y ajouter une ligne décrivant la
nouvelle police et incrémenter le nombre de polices qui est défini en
première lignebash$ex fonts.dir:1p25:1c26.:$ashowboat.pfb -type1-showboat-medium-r-normal-decorative-0-0-0-0-p-0-iso8859-1.:wqfonts.scale et
fonts.dir sont apparemment
identiquesbash$cp fonts.dir fonts.scaleInformer X11 des modificationsbash$xset fp rehashVisualiser la nouvelle policebash$xfontsel -pattern -type1-*Références: xfontsel1,
xset1, The X Window System
in a Nutshell, O'Reilly &
Associates.Utiliser les polices “Type 1” avec GhostScriptGhostScript référence les polices via son fichier
Fontmap. Il doit donc être modifié de la même façon
que le fichier X11 fonts.dir. GhostScript peut
utiliser des fichiers de police de caractères aux formats
.pfa ou .pfb. Voici comment nous
utiliserions la police de l'exemple précédent avec GhostScript:Mettre la police dans le répertoire des polices de
GhostScriptbash$cd /usr/local/share/ghostscript/fontsbash$ln -s /usr/local/share/fonts/type1/showboat.pfb .Editer le fichier Fontmap pour que
GhostScript ait connaissance de la nouvelle policebash$cd /usr/local/share/ghostscript/4.01bash$ex Fontmap:$a/Showboat (showboat.pfb) ; % From CICA /fonts/atm/showboat:wqUtiliser GhostScript pour visualiser la
policebash$gs prfont.ps
Aladdin Ghostscript 4.01 (1996-7-10)
Copyright (C) 1996 Aladdin Enterprises, Menlo Park, CA. All rights
reserved.
This software comes with NO WARRANTY: see the file PUBLIC for details.
Loading Times-Roman font from /usr/local/share/ghostscript/fonts/tir_____.pfb...
/1899520 581354 1300084 13826 0 done.
GS>Showboat DoFont
Loading Showboat font from /usr/local/share/ghostscript/fonts/showboat.pfb...
1939688 565415 1300084 16901 0 done.
>>showpage, press <return> to continue<<
>>showpage, press <return> to continue<<
>>showpage, press <return> to continue<<
GS>quitRéférences: fonts.txt de la distribution de
GhostScript 4.01.Utiliser les polices “Type 1” avec GroffMaintenant que nous pouvons utiliser la nouvelle police avec X11 et
GhostScript, comment faire pour s'en servir aussi avec groff? Tout
d'abord, comme nous nous occupons de polices PostScript
“Type 1”, le périphérique groff à utiliser est
ps. Il faut créer un fichier de police pour
chaque police utilisée par groff. Le nom d'une police groff se résume à un
fichier dans le répertoire
/usr/share/groff_font/devps. Dans notre exemple, ce
pourrait être /usr/share/groff_font/devps/SHOWBOAT.
Il faut créer ce fichier avec les outils fournis par groff.Le premier outil est afmtodit. Il n'est pas
normalement installé et doit donc être extrait de la distribution sous
forme de sources. Je me suis aperçu qu'il fallait modifier la première
ligne du fichier, voici donc ce que j'ai fait:bash$cp /usr/src/gnu/usr.bin/groff/afmtodit/afmtodit.pl /tmpbash$ex /tmp/afmtodit.pl:1c#!/usr/bin/perl -P-.:wqCet outil crée le fichier de police groff à partir du fichier de
dimensions de la police (suffixe .afm). Pour
continuer avec notre exemple:De nombreux fichiers .afm sont au
format Mac... avec des lignes terminées par des ^MIl faut les convertir au style Unix avec des lignes terminées par
des ^Jbash$cd /tmpbash$cat /usr/local/share/fonts/type1/showboat.afm |tr '\015' '\012' >showboat.afmCréons maintenant le fichier de police
groffbash$cd /usr/share/groff_font/devpsbash$/tmp/afmtodit.pl -d DESC -e text.enc /tmp/showboat.afm generate/textmap SHOWBOATLa police peut maintenant être référencée par le nom SHOWBOAT.Si l'on utilise GhostScript pour piloter les imprimantes du système,
il n'y a rien d'autre à faire. Si, par contre, l'on utilise de vraies
imprimantes PostScript, il faut alors charger la police sur l'imprimante
pour pouvoir l'utiliser (à moins que l'imprimante ne dispose de la police
“showboat” en interne ou sur une disquette de polices
accessible). La dernière étape consiste à créer la police chargeable.
L'outil pfbtops est utilisé pour créer le format
.pfa de la police et le fichier
download est modifié pour faire référence à la
nouvelle police. Le fichier download doit indiquer le
nom interne de la police. Ce nom peut être facilement connu à l'aide du
fichier de police groff, comme le montre l'exemple:Créer le fichier de police
.pfabash$fgrep internalname SHOWBOAT
internalname ShowboatDire à groff qu'il faut charger la
policebash$ex download:$aShowboat showboat.pfa.:wqPour tester la police:bash$cd /tmpbash$cat >exemple.t <<EOF.sp 5.ps 15C'est un exemple de police Showboat:.br.ps 48.vs (\n(.s+2)p.sp.ft SHOWBOATABCDEFGHI.brJKLMNOPQR.brSTUVWXYZ.sp.ps 16.vs (\n(.s+2)p.fp 5 SHOWBOAT.ft 5Utilisée comme première lettre d'un paragraphe. Cela ressemblera à:.sp50p\s(48\f5V\s0\fRoici la première phrase d'un paragraphe qui utilisela police showboat pour sa première lettre. Il faut augmenterl'espacement vertical pour laisser de la place pour la premièrelettre.EOFbash$groff -Tps exemple.t >exemple.psPour utiliser GhostScript/GhostViewbash$ghostview exemple.psPour l'imprimerbash$lpr -Ppostscript exemple.psRéférences:
/usr/src/gnu/usr.bin/groff/afmtodit/afmtodit.man,
groff_font5,
groff_char5,
pfbtops1.Peut-on utiliser des polices “True Type”?Le format de police “True Type” est utilisée par Windows,
Windows 95 et le Macintosh. Il est assez répandu et il y a de nombreuses
polices de ce format disponibles.Malheureusement, je connais peu d'applications qui puissent utiliser
ce format: GhostScript et Povray viennent à l'esprit. Le support par
GhostScript est, d'après la documentation, assez rudimentaire et il y a
des chances que le résultat soit moins bon qu'avec les polices
“Type 1”. Povray version 3 est aussi capable d'utiliser des
des polices “True Type”, mais je doute que beaucoup de
personnes créent des documents sous forme de pages générées par lancer de
rayon :-).Il est difficile d'utiliser une police “True Type” avec
groff parce que groff a besoin d'un fichier de description de la police,
et je ne connais pas d'outil pour déterminer les dimensions d'une police
“True Type”. De plus, il faudrait charger la police sur les
imprimantes PostScript avec le format approprié et, de nouveau, groff ne
peut gérer de cette façon les polices “True Type”.Cette situation plutôt désolante changera peut-être bientôt. Le
Projet FreeType développe
actuellement un ensemble d'utilitaire FreeType:Le serveur de polices xfsft pour X11 peut
gérer les polices “TrueType” en plus des polices
ordinaires. Bien que ce soit encore une version béta, elle a la
réputation d'être à peu près utilisable. Voyez
la page de
Juliusz Chroboczek pour plus d'informations. Il y a des
instructions de portage sous FreeBSD sur
la page
logicielle de Stephen Montgomery.xfstt est un autre serveur X11, disponible
sur ftp://sunsite.unc.edu/pub/Linux/X11/fonts.Il y a un programme appelé ttf2bdf qui peut
créer des fichiers BDF utilisables en environnement X à partir de
fichiers “TrueType”. Les binaires pour Linux sont censés
être disponibles sur
ftp://crl.nmsu.edu/CLR/multiling/General/.Pour les personnes qui ont besoin de polices “True
Type” asiatiques, il peut valoir la peine de jetter un coup
d'oeil au serveur de polices XTT. Il y a des
informations sur XTT à l'adresse:
http://hawk.ise.chuo-u.ac.jp/student/person/tshiozak/study/freebsd-at-random/x-tt/index-en.html.et d'autres ...Où peut-on trouver des polices supplémentaires?Il y a de nombreuses polices disponibles sur l'Internet. Elles sont
soit complètement gratuites ou en “partagiciel”. Il y a aussi
de nombreux CD-ROMs peux onéreux qui contiennent beaucoup de polices.
Voici quelques sites Internet (au mois d'Août 1996):ftp://ftp.winsite.com
(auparavant CICA),http://www.simtel.net/,ftp://ftp.coast.net/,http://af-pc-plloyd.ecel.uwa.edu.au/fonts/index.html,http://www.esselte.com/letraset/index.html,http://www.inil.com/users/elfring/esf.htm.D'autres questionsQue sont que les fichiers .pfm?Peut-on générer des fichiers .afm à partir de
fichiers .pfa ou
.pfb?Comment générer des fichiers de correspondance de caractères pour
groff pour les polices PostScript dont les caractères ont des noms qui
ne sont pas standard?Les périphériques xditview et
devX?? peuvent-ils être configurés pour
accéder aux nouvelles polices?Il serait bien d'avoir des exemples d'utilisation de polices
“True Type” avec GhostScript et Povray.
diff --git a/fr_FR.ISO8859-1/articles/formatting-media/article.sgml b/fr_FR.ISO8859-1/articles/formatting-media/article.sgml
index b3da305a77..2db26ace34 100755
--- a/fr_FR.ISO8859-1/articles/formatting-media/article.sgml
+++ b/fr_FR.ISO8859-1/articles/formatting-media/article.sgml
@@ -1,557 +1,557 @@
%man;
%urls;
%abstract;
%artheader;
%translators;
%authors;
- %mailing-lists;
+ %mailing-lists;
]>
Formatage des supports pour FreeBSD 2.2-RELEASEUn guideDougWhite
&artheader.copyright;
dwhite@resnet.uoregon.eduMars 1997Ce document décrit comment découper, partitionner et formater les
disques durs et autres supports similaires pour les utiliser avec
FreeBSD. Les exemples proposés ont été testés avec FreeBSD 2.2-GAMMA et
devraient être applicables à d'autres versions.
&abstract.license;
&abstract.disclaimer;
&trans.a.haby;
Introduction et définitionsRésuméRéussir à ajouter des disques à un système existant est la
marque d'un administrateur système expérimenté. Découper, partitionner
et ajouter des disques requiert de combiner avec soin commande
adéquate et syntaxe de nommage. Une frappe malheureuse et un disque
entier peut disparaître en quelques secondes. Ce document est une
tentative pour simplifier le processus et éviter les accidents.
Heureusement, les outils existants (tout particulièrement
sysinstall)
ont notablement amélioré ce processus dans les dernières versions de
FreeBSD.Il y a deux possibilités de formatage d'un disque:mode compatible: Configurer un disque
pour qu'il ait une table des
tranches - “slices” - utilisable
avec d'autres systèmes d'exploitation.mode dangeureusement dédié: Formater un
disque sans table des
tranches - “slices”.
Cela facilite l'ajout de disques, mais des systèmes d'exploitation
autres que FreeBSD risquent de ne pas reconnaître de tels
disques.Dans la plupart des cas, le mode dédié est le plus facile à mettre
en oeuvre et à utiliser sur des systèmes existants, auquel cas le
nouveau disque est en général entièrement dédié à FreeBSD. Cependant,
le mode compatible garantit le maximum d'interopérabilité avec des
installations ultérieures, au prix d'une plus grande complexité.En plus du choix du mode, il existe deux méthodes pour découper le
disque. La première est d'utiliser l'outil
/stand/sysinstall
d'installation du système. A partir de la version 2.1.7-RELEASE de
FreeBSD,
sysinstall
contient du code qui facilite la
configuration de disques en cours d'opération normale du système,
donnant essentiellement accès aux éditeurs de labels et de partitions,
et comportant un fonctionnalité d'écriture qui ne met à jour que le
disque sélectionné sans toucher aux autres disques. La seconde méthode
consiste à employer les utilitaires, à la main, depuis la ligne de
commande, en session sous le compte super-utilisateur
root. Pour le mode dangeureusement dédié, il n'y
a que trois ou quatre commandes concernées, alors que
sysinstall
demande quelques manipulations.DéfinitionsLa gestion de disques Unix a, au fil des siècles, inventé de
nombreuses nouvelles définitions pour d'anciens mots. Le glossaire
ci-dessous donne les définitions des expressions utilisées dans
ce document et (espérons-le) pour ce qui concerne FreeBSD en
général.mode compatible: Configurer un disque
pour qu'il ait une table des
tranches - “slices” - utilisable
avec d'autres systèmes d'exploitation. C'est le contraire du mode
dangeureusement dédié.mode dangeureusement dédié: Formater un
disque sans table des
tranches - “slices”.
Cela facilite l'ajout de disques, mais des systèmes d'exploitation
autres que FreeBSD risquent de ne pas reconnaître de tels
disques. C'est le contraire du mode compatible.disque: un disque circulaire recouvert d'un matériau magnétique
ou équivalent, qui tourne, mû par un moteur, devant une tête de
lecture. Les données sont enregistrées sur le disque en modifiant
la magnétisation du support, et peuvent être ensuite relues. Les
disques durs, CD-ROMs, disques magnéto-optiques et supports
amovibles Zip ou Jaz, sont des exemples de disques.tranche - “slice”:
une subdivision du disque. Il peut y avoir jusqu'à quatre tranches
sur un disque d'après le standard PC. Les tranches sont constituées
de secteurs adjacents. Les tranches sont décrites par une
“table des tranches” utilisée par le BIOS du système
pour localiser les partitions démarrables. La table des tranches
est habituellement appelée “table des partitions” en
langage DOS. Les tranches sont gérées par l'utilitaire
fdisk.partition: une subdivision de la
tranche - “slice”.
Habituellement utilisée pour désigner les divisions de la tranche
FreeBSD du disque. Chaque système de fichiers et espace de
pagination réside sur une partition. Les partitions sont gérées par
l'utilitaire
disklabel.secteur: la plus petite subdivision d'un disque. Un secteur
contient habituellement 512 octets de données.Avertissements et pièges à éviterInstaller des disques n'est pas quelque chose à prendre à la
légère. Il est tout à fait possible de détruire le contenu d'autres
disques de votre système si vous ne prenez pas les précautions
nécessaires.Vérifiez avec soin ce que vous faites. Il est
très facile d'effacer le mauvais disque quand vous utilisez ces
commandes. En cas de doute, consultez les messages de démarrage du
noyau pour connaître le nom exact du périphérique.Inutile de préciser que nous ne serions en rien responsable des
dégats que vous causeriez à vos données ou à votre matériel. Vous
travaillez à vos risques et périls.Zip, Jaz et autres disques amoviblesLes disques amovibles peuvent être formatés de la même façon que les
disques durs ordinaires. Il est indispensable que le lecteur soit
connecté et qu'il y ait un disque dedans au démarrage du système, pour
que le noyau puisse déterminer la géométrie du disque. Consultez les
résultats de
dmesg
et vérifiez que le disque et sa taille y figurent. Si le noyau émet le
message:
Can't get the size
c'est que le disque n'était pas dans le lecteur. Dans ce cas, vous
devrez redémarrer la machine avant de formater des disques.Formater des disques en mode dédiéIntroductionCette section explique en détail comment configurer des disques
entièrement dédiés à FreeBSD. N'oubliez pas que des disques en mode
dédié ne peuvent pas être utilisés par l'architecture PC pour démarrer
le système.Formater des disques en mode dédié avec Sysinstall/stand/sysinstall, l'utilitaire
d'installation du système, a été amélioré dans les versions récentes
pour rendre le processus de découpage propre des disques moins
pénible. Les éditeurs
fdisk et
disklabel
inclus dans
sysinstall
sont des outils interactifs qui
dissipent une bonne partie de la confusion liée aux opérations de
découpage de disques en “tranches”. Avec FreeBSD 2.1.7 et
ultérieur, c'est probablement la méthode la plus simple pour le
faire.Lancez
sysinstall
en tant que super-utilisateur root en
tapant:&prompt.root; /stand/sysinstallsur la ligne de commande.Sélectionnez .Sélectionnez .Sélectionnez le disque à configurer avec les touches Flèches et
la barre d'espacement.Si vous utilisez tout le disque pour FreeBSD, sélectionnez
.A la question:
Do you want to do this with a true partition entry so as to remain
cooperative with any future possible operating systems on the
drive(s)?
[Voulez-vous créer une vraie entrée de partition pour rester
compatible avec d'éventuels futurs systèmes d'exploitation
sur le(s) disque(s)?]
répondez (Non).Quand on vous demande si vous voulez continuer, répondez
(Oui).Sélectionnez (Ecrire).A l'avertissement à propos de l'écriture sur des systèmes
déjà installés, répondez (Oui).tez l'éditeur
fdisk
et revenez au menu d' avec
Echap.Sélectionnez dans le menu
d'.Libellez le disque comme vous le souhaitez. Si vous ne voulez
qu'une seule partition, tapez C pour créer une
partition, validez la taille proposée par défaut, prenez comme
type de partition (système de fichiers)
et indiquez un point de montage (qui dans ce cas ne sert à
rien).Tapez W une fois que vous avez terminé. Le
système de fichiers sera initialisé avec
newfs
sans que vous n'ayez autre chose à faire, à moins que vous ne
fassiez un autre choix (pour les nouvelles partitions, il faut
initialiser le système de fichiers!). Vous aurez un message
d'erreur:
Error mounting /mnt/dev/wd2s1e on /mnt/blah : No such file or directory
Ne vous en occupez pas.Quittez le programme, en utilisant à plusieurs reprises la
touche Echap.Formater des disques en mode dédié depuis la ligne de
commandeExécutez les commandes suivantes, en substituant à
wd2 le nom de votre disque. Les lignes
qui commencent par # sont des commentaires.dd if=/dev/zero of=/dev/rwd2 count=2disklabel /dev/rwd2 | disklabel -B -R -r wd2 /dev/stdin
# Nous ne voulons qu'une partition, utiliser la tranche 'c' devrait aller:
newfs /dev/rwd2cSi vous avez besoin de modifier le label du disque pour créer
plusieurs partitions (pour la pagination par exemple), utilisez la
séquence suivante:dd if=/dev/zero of=/dev/rwd2 count=2disklabel /dev/r$d > /tmp/label
# Modifiez le label du disque pour ajouter des partitions:
vi /tmp/labeldisklabel -B -R -r wd2 /tmp/label
# Créez les systèmes de fichiers sur les partitions avec newfs selon les besoinsVotre disque est maintenant prêt à être utilisé.Formater des disques en mode compatibleIntroductionTravailler depuis la ligne de commande est la manière la plus facile
de formater des disques dédiés, et la pire pour formater des disques
compatibles. L'utilitaire en ligne de commande
fdisk
demande une bonne connaissance des mathématiques et une compréhension en
profondeur de la structure de la table des “tranches”, qui
dépassent ce dont la plupart des gens souhaitent se préoccuper. Utilisez
sysinstall
comme décrit dans ce qui suit.Formater des disques en mode compatible avec SysinstallLancez
sysinstall
en tant que super-utilisateur root en
tapant:&prompt.root; /stand/sysinstallsur la ligne de commande.Sélectionnez .Sélectionnez .Sélectionnez le disque à configurer avec les touches Flèches et
la barre d'espacement.Si vous utilisez tout le disque pour FreeBSD, sélectionnez
.A la question:
Do you want to do this with a true partition entry so as to remain
cooperative with any future possible operating systems on the
drive(s)?
[Voulez-vous créer une vraie entrée de partition pour rester
compatible avec d'éventuels futurs systèmes d'exploitation
sur le(s) disque(s)?]
répondez (Oui).Sélectionnez (Ecrire).tez l'éditeur
fdisk.A la question à propos du gestionnaire de démarrage, répondez
encore (aucun).Sélectionnez dans le menu
d'.Libellez le disque comme vous le souhaitez. Si vous ne voulez
qu'une seule partition, validez la taille proposée par
défaut, prenez comme type de partition
(système de fichiers) et indiquez un point de montage (qui dans ce
cas ne sert à rien).Le système de fichiers sera initialisé avec
newfs
sans que vous n'ayez autre chose à faire, à moins que vous ne
fassiez un autre choix (pour les nouvelles partitions, il faut
initialiser le système de fichiers!). Vous aurez un message
d'erreur:
Error mounting /mnt/dev/wd2s1e on /mnt/blah : No such file or directory
Ne vous en occupez pas.Quittez le programme, en utilisant à plusieurs reprises la
touche Echap.Votre nouveau disque est prêt à être utilisé.Autres opérations sur les disquesAjout d'espace de paginationAu fur et à mesure que le système grossit, ses besoins d'espace de
pagination peuvent aussi augmenter. Alors qu'il est très difficile
d'ajouter de l'espace de pagination à des disques en service, un nouveau
disque peut être partitionné pour mettre en oeuvre de l'espace de
pagination supplémentaire.Pour ajouter de l'espace de pagination au moment de l'installation
d'un nouveau disque:Au moment de partitionner le disque, éditez son label et
allouer la quantité d'espace de pagination voulue en ajoutant une
partition 'b' et en affectant le reste à une autre partition,
telle que 'a' ou 'e'. La taille est à donner en blocs de 512
octets.Au moment de créer les systèmes de fichiers avec
newfs,
ne formatez pas la partition 'c'. Formatez à la place la partition
qui n'est pas réservée à la pagination.Ajoutez la ligne qui suit à
/etc/fstab:
/dev/wd0b none swap sw 0 0
En remplacant /dev/wd0b par le nom du
nouvel espace de pagination.Pour que l'espace de pagination soit immédiatement utilisable,
utilisez la commande
newfs:&prompt.user; swapon /dev/sd0b
swapon: added /dev/sd0b as swap spaceCopier le contenu d'un disque sur un autreProposé par: Renauld Waldura
renaud@softway.com.Pour déplacer le contenu d'un disque sur un nouveau, faites:&prompt.root; mount /dev/wd2 /mnt
&prompt.root; pax -r -w -p e /usr/home /mnt
&prompt.root; umount /mnt
&prompt.root; rm -rf /usr/home/*
&prompt.root; mount /dev/wd2 /usr/homeCréer des disques à écritures réparties avec
ccdCommandes transmises par: Stan Brown
stanb@awod.com.Le pilote de disques
concaténés - “Concatenated Disk
Driver”, ou CCD - vous permet
d'utiliser plusieurs disques comme s'il s'agissait d'un seul. Les
écritures réparties peuvent augmenter les performances disque en
distribuant les lectures et les écritures sur plusieurs disques.
Voyez les pages de manuel de
ccd4 et
ccdconfig4 ou la
page de
CCD, pour plus d'informations.Pour créer un nouveau CCD, exécutez les commandes ci-dessous.
Elles décrivent comment concaténer trois disques; ajoutez ou
supprimez des périphériques selon vos besoins. Rappelez-vous
que les disques sur lequels se fera la répartition doivent être
identiques.Avant d'exécuter ces commandes, vérifiez que vous avez bien
ajouté la ligne:
pseudo-device ccd 4
à la configuration de votre noyau.&prompt.root; cd /dev ; sh MAKDEV ccd0&prompt.root; disklabel -r -w sd0 auto
&prompt.root; disklabel -r -w sd1 auto
&prompt.root; disklabel -r -w sd2 auto&prompt.root; disklabel -e sd0c # changer le type en 4.2BSD
&prompt.root; disklabel -e sd1c # changer le type en 4.2BSD
&prompt.root; disklabel -e sd2c # changer le type en 4.2BSD&prompt.root; ccdconfig ccd0 32 0 /dev/sd0c /dev/sd1c /dev/sd2c&prompt.root; newfs /dev/rccd0cVous pouvez maintenant monter et utiliser votre CCD en le
référençant comme périphérique
/dev/ccd0c.RemerciementsL'auteur aimerait remercier les personnes suivantes pour leur
contribution à ce projet:Darryl Okahata darrylo@hpnmhjw.sr.hp.com,
pour sa documentation simple sur la configuration de
disques en mode dédié, que j'ai utilisée à plusieurs reprises
sur la &a.questions;.&a.jkh; pour avoir rendu
sysinstall
utile à ce type de tâches.John Fieber jfieber@indiana.edu pour avoir
mis au point la documentation et les exemples d'utilisation de
la DTD Docbook utilisée
pour mettre en forme ce document.&a.grog; pour avoir contrôlé mon travail et mentionné les
inexactitudes, ainsi que pour son concours sur divers points.
diff --git a/fr_FR.ISO8859-1/articles/ip-aliasing/article.sgml b/fr_FR.ISO8859-1/articles/ip-aliasing/article.sgml
index 94dce240ff..7e8715c32b 100755
--- a/fr_FR.ISO8859-1/articles/ip-aliasing/article.sgml
+++ b/fr_FR.ISO8859-1/articles/ip-aliasing/article.sgml
@@ -1,277 +1,277 @@
%man;
%urls;
%abstract;
%artheader;
%translators;
%authors;
- %mailing-lists;
+ %mailing-lists;
]>
Alias IP avec FreeBSD 2.xBenBlack
&artheader.copyright;
black@cypher.net
&abstract.license;
&abstract.disclaimer;
&trans.a.haby;
IntroductionDéfinir des alias IP consiste à affecter plus
d'une adresse IP à une interface réseau. Les alias IP sont typiquement
employés pour héberger des serveurs Web et FTP virtuels et pour
réorganiser ses serveurs sans avoir à mettre à jour d'autres machines
(ce dernier usage est particulièrement utile avec les serveurs de noms
de domaines). Voyez un alias IP comme un petit enfant perché sur le
dos de son interface parente (qui est l'adresse primaire de l'interface
physique).Les alias IP n'ont rien à voir avec la notion
de multi-hébergement - “multi-homing”
(lorsqu'une machine dispose de plus d'une interface réseau active), sauf
au cas où une machine sur plusieurs réseaux fournit des services tels que
ceux listés plus haut. La confusion entre les deux notions est une erreur
propagée du monde Macintosh et vous seriez avisé de ne pas les suivre sur
ce point.Il y a deux commandes essentielles à la mise en place d'alias IP sur
FreeBSD (et sur tous les autres systèmes Unix que j'aie jamais utilisés),
ce sont ifconfig et route.
L'utilisation correcte de ces commandes est décrite ci-dessous. Pour
connaître toutes les subtilités de leur emploi, reportez-vous aux pages de
manuel correspondantes. Il y a deux autres commandes utiles pour vérifier
que tout fonctionne comme il se doit et pour mettre les choses au point
si ce n'est pas le cas. netstat vous permet de
consulter la table de routage du noyau (entre autres choses utiles), et
ping est un appréciable petit outil pour tester l'accès à votre nouvel
alias (comme à toute autre adresse IP).Vous devez être en session sous le compte
super-utilisateur root pour pouvoir exécuter la
plupart des commandes décrites dans ce qui suit.Utiliser ifconfigifconfig
sert à configuer les différentes caractéristiques d'une interface réseau
(adresse, protocole, masque de réseau, etc.).
ifconfig nous
servira ici à ajouter (et parfois à supprimer) les adresses des alias des
interfaces.Dans l'exemple ci-dessous, nous supposerons que notre machine n'a
qu'une seule interface Ethernet 3Com 3C509 (ep0)
d'adresse 192.168.57.82 avec comme masque
de sous-réseau 255.255.255.0, en plus
de l'interface “en boucle” standard
127.0.0.1. Vous devrez bien sûr remplacer
ces valeurs par l'adresse et le masque de sous-réseau de votre(vos)
interface(s). L'adresse et le masque de sous-réseau de l'interface
“en boucle” sont les mêmes sur toutes les machines.Pour ajouter un alias à ep0, nous passons
simplement une commande du style:&prompt.root; ifconfig ep0 inet 192.168.57.10 netmask 255.255.255.255 aliasCe qui dit à FreeBSD que nous définissons une adresse IP
(inet) pour la carte 3Com
(ep0) avec comme adresse
192.168.57.10, comme masque de
sous-réseau (netmask)
255.255.255.255 (i.e., tous
les bits à 1) pour éviter que le système d'exploitation ne proteste qu'il
y a déjà une adresse affectée à cette interface, et que c'est un alias
pour cette interface (alias).Vous pouvez aussi omettre le masque de sous-réseau (ou lui donner une
autre valeur). Jusqu'à FreeBSD 2.1.0 compris, il y a néanmoins un bogue
qui fait que les commandes ifconfig alias échouent à
la première tentative, mais réussissent à la seconde, si vous n'indiquez
pas 255.255.255.255 comme masque de
sous-réseau. Si vous ne donnez pas ce masque de sous-réseau de
255.255.255.255, vous devrez aussi ajouter
une route manuellement, comme décrit ci-dessous.Pour supprimer l'alias, nous exécutons une commande très
similaire:&prompt.root; ifconfig ep0 inet 192.168.57.10 -aliasIl n'y a pas besoin de paramètres supplémentaires, tels que le masque
de sous-réseau, parce que l'alias est entièrement défini par l'adresse IP,
de sorte que FreeBSD peut supprimer toutes les ressources associées en se
basant sur cette adresse.Utiliser routeroute sert
à modifier à la main la table de routage du noyau. Pour nos besoins, une
fois que nous avons donné à FreeBSD l'alias pour l'interface, nous devons
définir une route IP vers cet alias. Si vous avez précisé le masque de
sous-réseau de 255.255.255.255 avec la
commande précédente, vous pouvez vous dispenser de cette étape.Pour ajouter une route vers notre nouvelle interface, nous
exécutons:&prompt.root; route add -host 192.168.57.10 127.0.0.1 0Cela dit à FreeBSD que pour arriver à la machine
192.168.57.10, les paquets doivent être
envoyés sur l'interface “en boucle”
(127.0.0.1 aussi appelée
localhost et que la distance (décompte
de noeuds intermédiaires) est de 0, ce qui signifie
que c'est la machine locale.Pour supprimer cette route, nous exécutons:&prompt.root; route delete -host 192.168.57.10De nouveau, comme la route est entièrement définie par les paramètres
indiqués, nous pouvons laisser de côté les autres données telles que
le masque de sous-réseau et la distance. Pour des informations complètes
sur la commande
route,
voyez les pages de manuel.Tester notre travailMaintenant que nous avons (espérons-le) un alias défini et accessible,
nous devons vérifier qu'il fonctionne correctement. Nous examinerons
d'abord la table de routage du noyau, pour vérifier que la route vers
l'alias est bien présente, puis nous utiliserons
ping pour
nous assurer que des paquets peuvent l'atteindre.Pour voir la table de routage du noyau, sous forme numérique,
tapons:&prompt.user; netstat -nrDans notre exemple, voici à quoi ressemblerait le résultat:
Routing tables
Internet:
Destination Gateway Flags Refs Use Netif Expire
default 192.168.57.1 UGSc 4 964 ep0
127.0.0.1 127.0.0.1 UH 1 39 lo0
192.168.57 link#2 UC 0 0
192.168.57.10/32 link#2 UC 0 0
192.168.57.82 127.0.0.1 UGHS 0 0 lo0
224/4 link#2 UCS 0 0
Nous y voyons la route par défaut, la route vers l'interface
“en boucle”, la route vers notre réseau local et une curieuse
route vers notre alias. Le /32 qui suit l'adresse de
l'alias donne la longueur du masque de sous-réseau (le nombre de 1, en
partant de la gauche). Comme nous avons utilisé un masque de sous-réseau
de 255.255.255.255, la longueur de
celui-ci (le nombre de 1) est de 32.Maintenant que nous avons vérifié que la route est bien dans la table
de routage du noyau, nous pouvons effectuer un contrôle rapide pour nous
assurer que cette route fonctionne bien. Exécutons une commande
ping comme
ci-dessous:&prompt.user; ping 192.168.57.10Si tout va bien, voici ce que nous verrions:
PING 192.168.57.10 (192.168.57.10): 56 data bytes
64 bytes from 192.168.57.10: icmp_seq=0 ttl=255 time=0.313 ms
64 bytes from 192.168.57.10: icmp_seq=1 ttl=255 time=0.197 ms
64 bytes from 192.168.57.10: icmp_seq=2 ttl=255 time=0.190 ms
Appuyons simplement sur
CtrlC pour arrêter
ping si tout
paraît satisfaisant. Il nous “crachera” alors quelques
statistiques, que nous pouvons normalement ignorer. S'il n'y a pas de
retour ou s'il y a des messages d'erreur, quelque chose ne va pas.
Reprenez tout du début et lisez les pages de manuel (non, vraiment,
allez lire les pages de manuel), et, finalement,
posez vos questions sur la &a.questions;.Tout mettre en placeMaintenant que nous avons compris comment utiliser les commandes
ifconfig et
route pour
ajouter et supprimer des alias IP, faisons en sorte que la machine
exécute les commandes voulues au démarrage de façon à ce que l'alias soit
toujours actif.Vers la fin de notre fichier /etc/rc.local, nous
ajouterons la ligne:
ifconfig ep0 inet 192.168.57.10 netmask 255.255.255.255 alias
Si nous utilisons un autre masque de sous-réseau que
255.255.255.255, nous devrons aussi
utiliser la commande
route comme
expliqué plus haut. Il est possible d'ajouter de cette façon autant
d'alias que l'on veut (en supposant que nous disposons de suffisamment
d'adresses allouées). Il suffit de mettre plusieurs commandes comme
la précédente dans /etc/rc.local, avec les adresses
appropriées. Il est même possible de définir comme alias des adresses
d'un autre réseau IP, si ce réseau est aussi routé sur nous. C'est une
situation différente de celle d'une machine avec plusieurs interfaces
physiques qui doivent toujours
avoir des adresses sur des réseaux IP différents.Il y a un certains nombre de points à connaître lorsque l'on utilise
un grand nombre d'alias (plus de ~10), que je citerai.Tout d'abord, il y a un bogue dans toutes les distributions de
bind (le serveur DNS
named fait partie de
BIND) qui empêche le démarrage correct de
named lorsqu'il y a plus de 64 alias sur
une interface. Il n'y a pas de palliatif particulièrement simple, je ne
les mentionnerai donc pas ici.En second lieu, pour éviter de truffer votre fichier
/etc/rc.local de quantité
d'ifconfig, je
vous suggère d'utiliser un fichier à part dans /etc
pour les y mettre. Créez par exemple un fichier
ifconfig.ep0 et mettez-y tous les
ifconfig alias. Puis dans
/etc/rc.local, ajoutez les lignes suivantes:
if [ -x /sbin/ifconfig ]; then
echo -n 'Adding local ifconfigs '
. /etc/ifconfig.ep0
echo ' done.'
fi
Ce fragment de procédure provient d'un fichier
/etc/rc.local fourni par Neil Fowler Wright
neil@corpex.com. Le bricoleur trouvera moyen d'y mettre
des boucles s'il y a plusieurs interfaces dont les alias sont définis
dans différents fichiers ifconfig.*.Où trouver plus d'aideM'envoyer directement un courrier électronique n'est probablement pas
le meilleur moyen d'obtenir de l'aide sur les problèmes d'alias IP. Je
suis assez occupé la plupart du temps, et ai tendance à devenir assez
rouspéteur. Néanmoins, les participants de la &a.questions; sont
amicaux et secourables et répondront à vos questions plus rapidement que
je ne le ferais.Cette page a grandement bénéficié des suggestions de Neil Fowler
Wright, Paul DuBois, Gabe Schuyler, et de Brodie le chat.
diff --git a/fr_FR.ISO8859-1/articles/make-world/article.sgml b/fr_FR.ISO8859-1/articles/make-world/article.sgml
index 137f17dfb3..249879a110 100755
--- a/fr_FR.ISO8859-1/articles/make-world/article.sgml
+++ b/fr_FR.ISO8859-1/articles/make-world/article.sgml
@@ -1,1376 +1,1376 @@
%man;
%urls;
%abstract;
%artheader;
%translators;
%authors;
- %mailing-lists;
+ %mailing-lists;
]>
Refaire votre monde (avec “make world”)10 Juillet 1997Ce document présuppose que vous ayez installé une version du code
source de FreeBSD dans le répertoire /usr/src.
Ce peut être la dernière version de la branche en cours de
développement -current, à moins que vous ne restiez simplement à niveau
sur la branche -stable. Vous pouvez avoir téléchargé l'instantané le plus
récent, ou bien rester à jour en utilisant les mécanismes fournis
par CVSup ou CTM.Dans les deux cas, vous diposez du code source et voulez maintenant
mettre à jour votre système.Il y a un certain nombre d'étapes à effectuer pour y arriver,
et quelques pièges à éviter en cours de route. Ce document vous
guide pas à pas à chacune de ces étapes.Il existe aussi des Traductions
de ce document dans d'autres langues.
&trans.a.haby;
Avertissements préalablesFaites une sauvegardeJe n'insisterai jamais assez sur l'importance de faire un sauvegarde
de votre système avant toute autre chose. Bien qu'il
soit facile de “refaire le monde”
(N.d.T.: recompiler FreeBSD) - si
vous suivez ces instructions, vous ferez forcément des erreurs à un moment
ou à un autre, sans compter les erreurs des autres dans l'arborescence des
sources qui empêcheraient votre système de redémarrer.Assurez-vous que vous avez bien fait une sauvegarde. Ayez une
disquette de maintenance à portée de la main. Je n'ai jamais eu à les
utiliser, et, je touche du bois, espère ne jamais devoir m'en servir,
mais prudence est mère de sûreté.Abonnez-vous à la bonne liste de diffusionLes branches -stable et -current du code de FreeBSD sont, par nature,
en développement. Les gens qui participent au projet
FreeBSD sont humains, et des erreurs se produisent parfois.Ces erreurs sont parfois bénignes. Votre système affiche simplement
un nouveau message d'avertissement. Elles peuvent aussi être
catastrophiques, et empêcher votre sytème de redémarrer, détruire vos
systèmes de fichiers (ou pire).Quand de tels problèmes se produisent, un avertissement
“heads up” est posté sur la liste de diffusion appropriée,
décrivant le problème et les machines concernées. Un message
“all clear” est diffusé quand le problème est
résolu.Si vous restez à niveau sur -stable ou -current et ne lisez pas
FreeBSD-stable@FreeBSD.ORG ou
FreeBSD-current@FreeBSD.ORG, vous allez au devant
d'ennuis.S'il vous plaît, ne me posez pas de questions que vous devriez poster
sur les listes -questions, -current, ou -stable. Je n'ai ni le temps
ni l'environnement nécessaire pour diagnostiquer des problèmes
spécifiques, et n'ai probablement pas votre réponse. Les membres de
ces listes de diffusion sont nombreux, expérimentés et serviables, aussi,
posez leur vos questions. Adressez-moi cependant vos commentaires,
réponses et correctionsEn anglais !.
Si vous vous adressez à moi au sujet de ce
document, merci de m'indiquer le numéro de version
qui se trouve en haut de cette page, que je sache à quelle version vous
faites référence.Ce document est un effort collectif. De nombreuses personnes y ont
participé, elles sont mentionnées dans les
Contributions
en fin de document.Copyright (c) 1997, 1998 Nik Clayton, All rights reserved.Vous pouvez redistribuer et utiliser ce document sous forme
de source (SGML DocBook) ou 'compilé' (HTML, PDF, PostScript, RTF,
etc..) avec ou sans modifications à la condition suivante:Le document redistribué doit inclure la notice de copyright
ci-dessus et l'avertissement ci-dessous, avant le corps du
document.THIS TUTORIAL IS PROVIDED BY NIK CLAYTON “AS IS” AND ANY
EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NIK CLAYTON BE LIABLE FOR ANY
DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
ANY WAY OUT OF THE USE OF THIS TUTORIAL, EVEN IF ADVISED OF THE
POSSIBILITY OF SUCH DAMAGE.CE DOCUMENT EST FOURNI PAR NIK CLAYTON “TEL QUEL” ET
AUCUNE GARANTIE EXPRESSE OU IMPLICITE, Y COMPRIS, MAIS NON LIMITEE,
GARANTIES IMPLICITES DE COMMERCIABILITE ET D'ADEQUATION A UN BUT
PARTICULIER N'EST DONNEE. EN AUCUN CAS NIK CLAYTON NE
SAURAIT ETRE TENU RESPONSABLE
DES DOMMAGES DIRECTS, INDIRECTS, ACCIDENTELS, SPECIAUX OU CONSEQUENTS
(Y COMPRIS, MAIS SANS LIMITATION, LA FOURNITURE DE BIENS ET SERVICES
ANNEXES; DEFAUT D'UTILISABILITE, PERTE DE DONNEES OU DE PROFITS; OU
INTERRUPTION DE TRAVAIL) QUELLE QU'EN SOIT LA CAUSE ET SELON TOUTE
DEFINITION DE RESPONSABILITE, SOIT PAR CONTRAT, RESPONSABILITE STRICTE,
OU PREJUDICE (Y COMPRIS NEGLIGENCE OU AUTRES) IMPUTABLE D'UNE FACON
OU D'UNE AUTRE A L'UTILISATION DE CE DOCUMENT, MEME APRES AVOIR ETE AVISE
DE LA POSSIBILITE D'UN TEL DOMMAGE.Examinez /etc/make.confReportez-vous au fichier /etc/make.conf.
Il contient les valeurs par défaut utilisées par la commande
Tout y est, par défaut, en commentaire. Activez les options qui
vous paraîssent utiles. Pour un utilisateur normal (qui ne développe
pas), il faut probalement utiliser les définitions de CFLAGS et
NOPROFILE.Si votre machine dispose d'une unité de calcul en virgule
flottante (386DX, 486DX, Pentium et ultérieurs) vous pouvez aussi
activer l'option HAVE_FPU.Cette définition a disparu depuis la version 2.2.2 de
FreeBSD.Examinez les autres définitions (COPTFLAGS, NOPORTDOCS et ainsi de
suite) et décidez de celles qui vous conviennent.Mettez à jour le fichier /etc/groupLe répertoire /etc contient la plupart des
informations de configuration de votre système, ainsi que ses procédures
de démarrage. Certaines de ces procédures changent d'une version à l'autre
de FreeBSD.Certains fichiers de configuration sont aussi utilisés en permanence
par le système. En particulier, /etc/group.Il est arrivé que la phase d'installation de “make
world” ait besoin que certains utilisateurs et groupes existent.
Il y a de fortes chances qu'ils n'aient pas été définis avant la mise
à jour. C'est une source de problèmes.L'exemple le plus récent concerne l'ajout du groupe “ppp”
(renommé par la suite “network”). Les utilisateurs ont vu leur
mise à jour avorter à l'installation du sous-sytème
ppp sous un groupe inexistant (chez eux).La solution consiste à examiner le fichier
/usr/src/etc/group et à le comparer à votre propre
liste de groupes. S'il y a des groupes dans le nouveau fichier qui ne
sont pas dans votre fichier, copiez-les. De même, vous devez renommer
tout groupe de votre fichier /etc/group qui a le
même GID, mais un nom différent, qu'un groupe du fichier
/usr/src/etc/group.Si vous êtes particulièrement paranoïaque, vous pouvez contrôler
votre système pour trouver les fichiers appartenant au groupe que vous
renommez ou supprimez. Une commande du type:
find / -group GID -print
vous donnera la liste des fichiers appartenant au groupe
GID
(qui peut être un nom de groupe ou un identifiant numérique).Il vaut mieux recompiler le système en mode mono-utilisateur. En
dehors du fait que cela ira un peu plus vite, la réinstallation va
modifier un grand nombre de fichiers systèmes importants, tous les
binaires de base, les bibliothèques, les fichiers inclus et ainsi de
suite. Les modifier quand le système est en service (en particulier
s'il y a des utilisateurs connectés à ce moment là), c'est aller au devant
de problèmes.
Cela dit, si vous avez confiance en vous, vous pouvez vous en
passer.Version 2.2.5 et ultérieureComme décrit plus bas, la version 2.2.5 et les suivantes de
FreeBSD séparent la recompilation et l'installation. Vous pouvez
dès lors compiler le nouveau système en mode
multi-utilisateurs et passer en mode mono-utilisateur juste pour
l'installer.En tant que super-utilisateur, vous pouvez passer la commande:
sur un système en fonctionnement, pour passer en mode
mono-utilisateur.Ou bien, redémarrez le système, et, à l'invite de démarrage, entrez
l'indicateur . Le système redémarrera en mode
mono-utilisateur. A l'invite de l'interpréteur de commandes, exécutez:
mount -u /
pour effectuer la vérification des systèmes de fichiers, remontez
/ en mode lecture/écriture, et monter tous les
autres systèmes de fichiers UFS listés dans le fichier
/etc/fstab, puis activez la pagination.Effacez /usr/objLes composants du système reconstruit sont au fur et à mesure placés
dans les sous-répertoires de /usr/obj (par défaut).
Ces répertoires masquent ceux de /usr/src.Vous pouvez accélérer le travail de “make world”,
et peut-être vous éviter quelques maux de tête en supprimant aussi
le répertoire /usr/obj.Certains fichiers dans /usr/obj sont marqués
immuables (reportez-vous aux pages de manuel de
chflags(1) pour plus de détails). Il faut d'abord
supprimer cet indicateur.cd /usr/obj
Toutes versionsVous devez être dans le répertoire /usr/src,
donc:
cd /usr/src
(à moins, bien sûr, que votre code source soit ailleurs, auquel cas vous
devez aller dans le répertoire correspondant).Pour recompiler le système, vous utilisez la commande make1. Cette commande lit ses instructions dans le fichier
Makefile, qui décrit comment reconstruire les
modules qui constituent FreeBSD, dans quel ordre,
et ainsi de suite.Le format général de la commande que vous taperez sera:
make Dans cet exemple,
-x
est
une option que vous donnez à make1. Reportez-vous aux pages de manuel pour connaître les
options disponibles.
-DVARIABLE
transmet une
variable au fichier Makefile. Le comportement de
Makefile est défini par ces variables. Ce sont les
mêmes variables que l'on trouve dans
/etc/make.conf, et c'est un autre moyen de les
positionner.Par exemple:
make -DNOPROFILE=true cible
est une autre manière de dire qu'il ne faut pas compiler les
bibliothèques profilées et correspond aux lignes:
NOPROFILE= true
# Avoid compiling profiled librairies
# Ne pas compiler les bibliothèques profilées
du fichier /etc/make.conf.cible dit à make1 ce que vous voulez faire. Chaque
Makefile définit un certains nombre de
“cibles” différentes, et votre choix de cibles détermine
ce qui se passe.Il y a des cibles définies dans le fichier
Makefile que
vous n'avez pas à employer. Ce sont des étapes intermédiaires utilisées
par le processus de recompilation pour décomposer les étapes en
sous-étapes.La plupart du temps, vous n'aurez pas besoin de donner d'options à
make1, et votre commande sera simplement:
make cibleEnregistrez le résultatC'est une bonne idée d'enregistrer le résultat de
make1 dans un ficher. Si quelque chose se passe mal, vous
aurez une trace des messages d'erreur, et la liste complète de ce qui
a été fait. Même si cela ne vous aide pas à diagnostiquer ce qui n'a pas
marché, cela peut aider les autres si vous soumettez votre problème sur
une des listes de diffusion de FreeBSD.La meilleure façon de faire cela est d'utiliser la commande
script1, avec en paramètre le nom du fichier où enregistrer
les résultats. Vous devez faire cela juste avant de recompiler le
système, et taper exit une fois que c'est
terminé.script /var/tmp/mw.out
Script started, output file is /var/tmp/mw.out
… compile, compile, compile …
Si vous le faites, n'enregistrez pas les
résultats dans /tmp. Ce répertoire peut être vidé
au prochain redémarrage du sytème. Il vaut mieux les mettre dans
/var/tmp
(comme dans l'exemple précédent) ou dans le répertoire utilisateur de
root.Version 2.2.2 et antérieure/usr/src/Makefile contient la cible
“world”, qui recompile tout le système et
l'installe.Utilisez donc:
make worldVersion 2.2.5 et ultérieureA partir de la version 2.2.5 de FreeBSD (de fait, c'est la première
version à avoir été créée sur la branche -current, puis rapatriée dans
la branche -stable entre les versions 2.2.2 et 2.2.5) la cible
“world” a été décomposée en deux: “buildworld”
et “installworld”.Comme leurs noms l'indiquent, “buildworld” reconstruit
la nouvelle arborescence dans /usr/obj, et
“installworld” l'installe sur la
machine.C'est très utile pour deux raisons. Tout d'abord, vous pouvez
recompiler en toute sûreté, sans toucher aux composants du système
actuel. Le processus est “autonome”. Vous pouvez donc
exécuter “buildworld” sur une machine en mode
multi-utilisateurs
sans redouter d'effets fâcheux. Je vous recommande néanmoins de toujours
exécuter l'étape “installworld” en mode
mono-utilisateur.En second lieu, cela vous permet d'utiliser des systèmes de fichiers
montés par NFS pour mettre à jour les autres machines de votre réseau.
Si vous avez trois machines, A, B, et C que vous voulez mettre à jour,
exécutez make buildworld et
make installworld sur A. B et C doivent alors monter
par NFS /usr/src et /usr/obj
depuis A, et vous pouvez alors exécuter
make installworld pour
installer le système recompilé sur B et C.La cible “world” existe toujours
et vous pouvez l'utiliser
exactement comme avec la version 2.2.2.
make world exécute
make buildworld suivi de make
installworld.Si vous utilisez séparement make buildworld et
make installworld, vous devez donner à chaque fois
les mêmes paramètres à make1.Par exemple, si vous exécutez:
make -DNOPROFILE=true buildworld
vous devrez ensuite installer les résultats avec:
make -DNOPROFILE=true installworld
sinon il essayera d'installer les bibliothèques profilées
qui n'ont pas été recompilées à l'étape
make buildworld.-current et ultérieureSi vous êtes sur la branche -current, vous pouvez aussi donner
l'option
-j
à make. Cela permet à
make d'exécuter plusieurs programmes
simultanément.C'est particulièrement utile sur une machine avec plusieurs
processeurs. Néanmoins, comme la compilation est plus gourmande en
Entrées/Sorties qu'en CPU, c'est aussi
utile sur une machine mono-processeur.Typiquement, sur une machine mono-processeur, vous exécuteriez:
make -j4 cible
pour autoriser
make1 à exécuter 4 programmes simultanément.
Les constatations empiriques postées sur les listes de diffusion
montrent que c'est en général ce qui apporte le plus de gain en
performances.Si vous avez une machine multi-processeurs et que vous avez
configuré un noyau SMP, essayez des valeurs entre 6 et 10 et voyez quel
bénéfice vous en tirez.N'oubliez pas que c'est toujours expérimental (au moment où j'écris
ceci), et que des modifications de l'arborescence des sources rendent
parfois cette possibilité inutilisable. Si vous n'arrivez pas à recompiler
avec ce paramètre, essayez sans avant de signaler votre problème.En supposant que tout ce passe bien, il vous faudra attendre
entre une heure et demie et une demi-journée.
En règle générale, un P6 200MHz avec plus de 32MB de RAM
et des disques SCSI corrects exécutera make world
en environ une heure et demie. Un P133 32MB prendra 5 à 6
heures. Revoyez ces chiffres à la baisse si vos machines sont
plus lentes…Mettez à jour /etcRecompiler le système ne met pas à jour certains répertoires (en
particulier, /etc, /var et
/usr) pour y installer des fichiers de configuration
nouveaux ou modifiés.
Il vous faudra le faire à la main, à vue, et en utilisant à bon escient
la commande Vous ne pouvez pas vous contenter de copier les fichiers de
/usr/src/etc dans /etc pour
que cela marche. Certains de ces fichiers doivent d'abord être
“installés”.
En effet le répertoire /usr/src/etcn'est pas une simple copie de ce que devrait
contenir votre répertoire/etc. De plus, il y a
des fichiers qui doivent être dans /etc et ne
sont pas dans /usr/src/etc.La façon la plus simple de procéder est d'installer les fichiers
dans un nouveau répertoire, puis de passer en revue les différences.Sauvegardez vos fichiers actuels dans
/etcBien qu'en principe rien ne sera modifié automatiquement dans ce
répertoire, prudence est mère de sûreté. Copiez donc votre répertoire
/etc dans un endroit sûr.
Quelque chose du genre:cp -Rp /etc /etc.oldfera l'affaire (
-R
fait une copie récursive,
-p
conserve la date, les autorisations des fichiers
et ainsi de suite).Vous devez créer un jeu de répertoires provisoires pour y installer
les fichiers de /etc et autres. En général,
je les mets dans /var/tmp/root;
il y a un certain nombre de sous-répertoires à créer. Pour ce faire,
exécutez:
mkdir /var/tmp/root
cd /usr/src/etc
make DESTDIR=/var/tmp/root distrib-dirs distribution
qui va créer l'arborescence nécessaire et y installera les fichiers. Un
grand nombre des sous-répertoires créés dans
/var/tmp/root seront vides et devront être
supprimés. La façon la plus simple de le faire est:
cd /var/tmp/root
find -d . -type d | /usr/bin/perl -lne \
'opendir(D,$_);@f=readdir(D);rmdir if $#f == 1;closedir(D);'
qui fait une recherche en profondeur, examine chaque répertoire, et s'il
ne contient que 2 fichiers (“1” n'est pas une faute de frappe
dans la procédure), i.e. “.” et
“..” supprime le répertoire./var/tmp/root contient maintenant tous les
fichiers à installer à l'endroit requis sous
/. Vous devez ensuite examiner chacun de ces
fichiers pour voir en quoi ils diffèrent de vos propres fichiers.Notez que certains des fichiers qui ont été installés dans
/var/tmp/root commencent par un “.” Au
moment où j'écris ceci, les seuls fichiers concernés sont les fichiers
d'initialisation des interpréteurs de commandes dans
/var/tmp/root/ et
/var/tmp/root/root/, mais il pourrait y en
avoir d'autres
(cela dépend de quand vous lirez ces lignes). Assurez-vous d'utiliser
La manière la plus simple de procéder est d'utiliser la commande
Par exemple:
diff /etc/shells /var/tmp/root/etc/shells
vous indiquera les différences entre votre fichier
/etc/shells et le nouveau fichier
/etc/shells. A partir de là, décidez si vous
allez reporter les modifications que vous y avez apportées ou si vous
allez simplement recopier le nouveau fichier.http://www.nothing-going-on.demon.co.uk/FreeBSD/make-world/dircmp.pl est une
petite procédure Perl (Perl 4.036, qui est installé par défaut à partir de
la version 2.0 de FreeBSD) qui compare les fichiers de deux répertoires
(/etc et
/var/tmp/root/etc par défaut) et liste les fichiers
absents ou différents dans les deux répertoires.Donnez au nouveau répertoire
(/var/tmp/root) un nom qui inclue une date, pour
pouvoir facilement comparer différentes versionsSi vous recompilez fréquemment votre système, vous devrez aussi
souvent mettre à jour /etc, ce qui peut devenir
une vrai corvée.Vous pouvez accélérer le processus en gardant une copie du dernier
jeu de fichiers reportés dans /etc. La
procédure suivante vous suggère comment faire.Recompilez le système comme d'habitude. Au moment de mettre à
jour /etc et les autres répertoires, donnez au
répertoire cible un nom basé sur la date du jour. Si vous faisiez
cela le 14 Février 1998, vous pouviez procéder comme suit:mkdir /var/tmp/root-980214
cd /usr/src/etc
make DESTDIR=/var/tmp/root-980214 \
distrib-dirs distributionReportez les modifications depuis ce répertoire comme décrit
plus haut.Ne supprimez pas le répertoire
/var/tmp/root-980214 quand vous aurez
terminé.Quand vous chargerez la version la plus récente des sources et
la recompilerez, faites de même. Vous aurez alors un nouveau
répertoire,
/var/tmp/root-980221 par exemple
(si vous faites une mise à jour chaque semaine).Vous pouvez maintenant voir les modifications intervenues
d'une semaine à l'autre avec quelque chose comme:
cd /var/tmp
diff -r root-980214 root-980221
qui vous donnera les différences entre tous les fichiers des deux
répertoires.Typiquement, il y aura beaucoup moins de différences
qu'entre /var/tmp/root-980221/etc
et /etc. Comme il y a beaucoup moins de
différences, il est beaucoup plus facile de les reporter dans
le répertoire /etc.Vous pouvez maintenant supprimer le plus ancien des deux
répertoires /var/tmp/root-*:
rm -rf /var/tmp/root-980214Répétez l'opération chaque fois que vous devez reporter
des modifications dans /etc.Vous pouvez utiliser la commande date(1) pour
automatiser la génération des noms de répertoires. Par exemple:
mkdir /var/tmp/root-`date "+%y%m%d"`
crée un répertoire dont le nom dépend de l'année, du mois et
du jour.Mettez à jour /devDEVFSSi vous utilisez DEVFS ce qui suit ne vous concerne probalement
pas.Pour des raisons de sécurité, cette mise à jour se fait en plusieurs
étapes.Copiez tout d'abord /var/tmp/root/dev/MAKEDEV
dans /dev.
cp /var/tmp/root/dev/MAKEDEV /devPrenez maintenant un instantané de l'état de votre répertoire
/dev. Il doit indiquer
les propriétaires, les droits et les codes majeur et mineur de chaque
fichier spécial de périphérique, mais pas leur date de dernière mise à jour.
La façon la plus facile de procéder est d'utiliser
la commande awk pour éliminer les informations inutiles:
cd /dev
ls -l | awk '{print $1, $2, $3, $4, $5, $6, $NF}' > /var/tmp/dev.outEnsuite, recréez tous les fichiers spéciaux de périphériques:.
Reprenez un instantané de l'état de votre répertoire, cette fois-ci
dans /var/tmp/dev2.out. Comparez maintenant ces deux
instantanés pour voir si certains fichiers spéciaux de périphériques
n'ont pas été recréés. Il ne devrait pas en manquer, mais prudence est
mère de sûreté.
diff /var/tmp/dev.out /var/tmp/dev2.outIl manquera peut-être des descripteurs de partitions,
il vous faudra alors exécuter des commandes du type :
sh MAKEDEV sd0s1
pour les recréer. Les détails dépendent de votre installation.Mettez à jour /standCette étape n'est décrite que pour être exhaustif, elle peut être
omise sans danger.Pour être exhaustif, vous pouvez aussi mettre à jour les fichiers de
/stand. Ces fichiers sont des liens physiques sur
le programme /stand/sysinstall. L'édition de liens
de cet exécutable doit être statique, pour qu'on puisse l'utiliser sans
qu'aucun autre système de fichiers (et en particulier
/usr) ne soit monté.cd /usr/src/release/sysinstall
make all installSources antérieurs au 2 Avril 1998Si votre code source date d'avant le 2 Avril 1998, ou que
la version de votre Makefile est inférieure à
1.68 (pour FreeBSD-current et les systèmes 3.x) ou à 1.48.2.21
(pour les systèmes 2.2.x), vous devrez ajouter l'option
NOSHARED=yes comme suit:make NOSHARED=yes all installPour tirer pleinement parti de votre nouveau système, vous devez
recompiler le noyau. C'est pratiquement indispensable, parce que des
structures de données peuvent avoir changé, et des programmes
comme Suivez les instructions du "manuel" pour compiler un nouveau
noyau. Si vous avez déjà recompilé un noyau personnalisé
examinez en détail le fichier de configuration
Une version précédente de ce document suggérait de redémarrer
le système avant de recompiler le noyau. C'est un erreur parce
que :Des commandes comme De même, des utilitaires essentiels comme
/, /usr et ainsi
de suite, ne peuvent plus être montés. Il y a peu de chances
que cela arrive si vous êtes sur la branche -stable, mais c'est plus
probable sur la branche -current après des modifications
importantes.Les LKMs ("Loadable Kernel Modules" - modules du noyau à chargement
dynamique) reconstruits en même temps que “world”
peuvent "planter" un noyau plus ancien.Pour toutes ces raisons, il vaut mieux recompiler et installer un
nouveau noyau avant de redémarrer.Vous devez recompiler le noyau après avoir terminé
make world (ou make
installworld). Si vous ne le faites pas (peut-être
voulez-vous vous assurer que le noyau compile avant de mettre à
jour le système), vous pourriez avoir des problèmes. Cela parce que
votre commande config n'est pas à niveau
avec les sources du noyau.Dans ce cas, exécutez:
/usr/obj/usr/src/usr.sbin/config NOM_DU_NOYAU
pour recompiler le noyau avec la nouvelle version de
config. Cela ne marchera peut-être pas à tous les
coups. Il est recommandé d'en finir avec
make world (ou
make installworld) avant de compiler un nouveau
noyau.Vous en avez fini. Après avoir vérifié que tout semble être en
place, vous pouvez maintenant redémarrez votre système. Un simple
fastboot8 devrait suffire.
fastbootC'est finiVous devriez maintenant avoir mis à jour avec succès votre système
FreeBSD.
Félicitations.Vous aurez peut-être de petits problèmes si des détails vous
ont échappés. Par
exemple, il m'est arrivé d'effacer le fichier
/etc/magic au moment de la mise à jour de
/etc, de ce fait, la commande
file ne marchait plus. Un petit moment de réflexion
et j'ai trouvé que:
cd /usr/src/usr.bin/file
suffisait à régler ce problème.Il n'y a pas de réponse toute faite à cette question, tout dépend
de la nature des évolutions. Je viens juste, par exemple, d'exécuter
CVSup, et les fichiers suivants ont été modifiés depuis ma dernière
recompilation:
src/games/cribbage/instr.csrc/games/sail/pl_main.csrc/release/sysinstall/config.csrc/release/sysinstall/media.csrc/share/mk/bsd.port.mkIl n'y a pas là matière à ce que je recompile mon système. Je
vais simplement aller dans les bons sous-répertoires et exécuter
src/lib/libc/stdlib alors ou je
referais, le monde, ou je recompilerais au moins toutes les parties
du système qui sont liées statiquement
(de même que tout ce que je pourrais avoir ajouté qui serait lié
statiquement).En fin de journée, c'est à vous de voir.
Vous préférerez peut-être recompiler votre système tous les quinze
jours, et laisser les modifications s'empiler pendant ces quinze jours.
Ou bien vous préférez ne recompiler que ce qui a changé et vous faire
confiance pour repérer ce qui en dépend.Et, bien sûr, cela dépend de la fréquence avec laquelle vous voulez
faire vos mises à jour, et de si vous êtes sur la branche -stable ou
sur la branche -current.Ma compilation échoue avec de nombreuses erreurs "signal 12"
(ou tout autre numéro de signal)Cela indique généralement un problème matériel. (Re)faire le
monde est un bon moyen de mettre votre matériel sous pression, et
mettra souvent en évidence des défaillances de la mémoire vive. Cela se
manifeste normalement de soi-même: le compilation échoue en recevant
de mystérieux signaux.Vous pouvez vous en assurer si vous relancer la compilation
et qu'elle échoue en un endroit différent.Dans ce cas, vous ne pouvez guère faire autre chose que
d'intervertir les différents composants de votre matériel pour déterminer
lequel est en cause.Puis-je détruire /usr/obj après avoir
fini?Tout dépend de comment vous voulez refaire le monde par
la suite./usr/obj contient tous les fichiers objets
générés à la compilation. Normalement, une des premières étapes de
“make world” est de supprimer ce répertoire
et de repartir à zéro. Dans ce cas, conserver ce répertoire
/usr/obj après en avoir terminé ne sert pas à
grand chose, alors que vous économiseriez pas mal d'espace disque
(au jour d'aujourd'hui
environ 150Mo).Néanmoins, si vous savez ce que vous faites, vous pouvez faire en
sorte que “make
world” saute cette étape. Les reconstructions ultérieures seront
beaucoup plus rapides, car la plupart des sources n'auront pas besoin
d'être recompilés. Le revers de la médaille est que des
problèmes de dépendance subtils peuvent se manifester, provoquant
l'échec de votre recompilation de manière étrange. Cela génère
fréquemment du bruit sur les listes de diffusion de FreeBSD,
quand quelqu'un se plaint que sa mise à jour a échoué, sans réaliser
qu'il a tenté de brûler les étapes.Si vous aimez vivre dangereusement, passez le paramètre
“NOCLEAN” à make -DNOCLEAN worldUne recompilation interrompue peut-elle être reprise?Tout dépend de jusqu'où vous êtes allé avant de rencontrer un
problème.En général (mais ce n'est pas une règle
absolue) “make world” crée de nouveaux exemplaires
des utilitaires de base (comme gcc, et
make) et des bibliothèques système. Ces outils et
bibliothèques sont ensuite installés. Ils sont ensuite utilisés
pour se reconstruire eux-mêmes, et installés de nouveau. Le système
entier (y compris maintenant les outils usuels, comme
ls ou
grep) est ensuite recompilé avec les nouveaux
outils et bibliothèques de base.Si vous en êtes à cette dernière étape, et que vous le savez
(parce que vous avez consulté les résultats que vous avez enregistrés)
alors vous pouvez (avec une bonne chance de réussite) faire:
… régler le problème …cd /usr/src
qui ne détruira pas les résultats du travail qu'a déjà effectué
“make world”.Si vous voyez le message :
--------------------------------------------------------------
Building everything..
--------------------------------------------------------------
dans les comptes-rendus de “make world”, cette façon de
procéder est probablement sûre.Si vous ne voyez pas ce message, ou doutez de vous, alors prudence
est mère de sûreté, et il vaut mieux tout reprendre depuis le
début.On pose souvent la question sur les listes de diffusion de FreeBSD
de savoir s'il est possible de tout compiler sur une seule machine
puis d'installer les résultats de cette compilation sur d'autres
machines du réseau avec C'est quelque chose que je n'ai jamais fait, aussi les indications
qui suivent m'ont-elles été données par d'autres ou déduites des
Makefiles.La marche exacte à suivre dépend de votre version de FreeBSD.Vous devrez encore mettre à jour /etc et
/dev sur les machines cibles après cette
étape.Version 2.1.7 et antérieuresDans un message adressé à questions@freebsd.org,
Antonio Bemfica a suggéré la méthode suivante:
Date: Thu, 20 Feb 1997 14:05:01 -0400 (AST)
From: Antonio Bemfica <bemfica@militzer.me.tuns.ca>
To: freebsd-questions@freebsd.org
Message-ID: <Pine.BSI.3.94.970220135725.245C-100000@militzer.me.tuns.ca>
Josef Karthauser a demandé:
> Quelqu'un a-t-il la bonne méthode pour mettre à jour
> les machines d'un réseau?
D'abord make world, etc... sur votre machine de référence
Ensuite, montez / and /usr sur la machine distante:
machine_de_référence% mount machine_distante:/ /mnt
machine_de_référence% mount machine_distante:/usr /mnt/usr
Ensuite, faites make install avec /mnt comme cible:
machine_de_référence% make install DESTDIR=/mnt
Répétez cela pour chaque machine de votre réseau.
Cela marche très bien dans mon cas.
Antonio
Ce mécanisme ne fonctionne (autant que je sache) que si
vous pouvez écrire sur /usr/src sur le serveur
NFS, car ce devait être la cible d'“install” avec la
version 2.1.7 et les précédentes.Version 2.2.0 and ultérieuresEntre les versions 2.1.7 et 2.2.0 la cible
“reinstall” a été introduite. Vous pouvez utiliser
la méthode décrite ci-dessus pour
la version 2.1.7, en remplaçant “install” par
“reinstall”.Cela ne demande plus de droits d'écriture
sur le répertoire /usr/src du serveur NFS.Un bogue est apparu avec cette cible entre les versions
1.68 et 1.107 du Makefile, qui impliquait
qu'il fallait
avoir les droits d'écriture. Ce bogue a été corrigé avant la
diffusion de la version 2.2.0 de FreeBSD, mais peut encore poser
problème si vous avez un vieux serveur sous -stable de cette
époque.Version 2.2.5 et ultérieureComme décrit plus haut, les cibles “buildworld” et
“installworld” peuvent être employées pour recompiler
sur une machine, puis monter par NFS
/usr/src et /usr/obj sur
la machine distante et y installer le nouveau système.Comment puis-je accélérer make world?Passez en mode mono-utilisateur.Mettez les répertoires /usr/src et
/usr/obj sur des systèmes de fichiers
et des disques différents. Si possible, installez ces disques
sur des contrôleurs différents.Mieux encore, mettez ces systèmes de fichiers sur
plusieurs disques et utilisez “ccd”
("concatenated disk driver" = pilote de disques concaténés).Ne compilez pas les bibliothèques profilées
(mettez “NOPROFILE=true” dans
/etc/make.conf). Vous n'en avez certainement
pas besoin.Dans /etc/make.conf, positionnez aussi
“CFLAGS” à quelque chose comme “-O -pipe”.
L'optimisation “-O2” est bien plus lente, et la
différence d'optimisation entre “-O” et
“-O2” est en général négligeable. “-pipe”
dit au compilateur d'utiliser des tuyaux (“pipes”)
à la place de fichiers, ce qui économise des accès disque
(mais utilise plus de mémoire).Donnez l'option
-j<n>
au compilateur
(Si vous avez une version suffisamment récente de FreeBSD)
pour exécuter plusieurs programmes en parallèle. Cela améliore
les choses, que vous ayez une machine mono- ou
multi-processeurs. Le système de fichiers qui contient
/usr/src peut être monté (ou remonté) avec l'option
“noatime”. De cette manière, les dates de dernier accès
aux fichiers ne sont pas enregistrées sur disque. Vous n'avez de toute
façon probablement pas besoin de cette information.
“noatime” existe à partir de la version
2.2.0.mount -u -o noatime /usr/srcCet exemple suppose que /usr/src
constitue à lui seul un système de fichiers. Si ce n'est
pas le cas (s'il fait partie de
/usr par exemple) vous devez indiquez
le point de montage de ce système de fichiers, et non
/usr/src.Le système de fichiers où se trouve
/usr/obj
peut être monté (ou remonté) avec l'option “async”.
Les écritures sur disque se font alors de façon asynchrone. En
d'autres termes, le programme reprend immédiatement la main,
mais l'écriture se fait quelques secondes après. Les accès
disque sont ainsi groupés, et le gain en performances est
spectaculaire.Rappelez-vous que cette option rend votre système de
fichiers plus fragile. Avec cette option, les risques sont accrus
qu'en cas de coupure d'alimentation, le système de fichiers soit
irrécupérable quand la machine redémarrera.S'il n'y a que /usr/obj sur ce système
de fichiers, ce n'est pas un problème. S'il contient des
informations
plus sensibles, assurez-vous que vos sauvegardes soient à jour
avant d'activer cette option.mount -u -o async /usr/objComme auparavant, si /usr/obj ne
constitue pas un système de fichiers en soit,
remplacez-le dans l'exemple par le nom du point
de montage qui convient.TraductionsDocument originalL'original de ce document se trouve sur
http://www.nothing-going-on.demon.co.uk/FreeBSD/make-world/make-world.html.JaponaisMAEKAWA Masahide a traduit ce document en
Japonais. Sa traduction est disponible à l'adresse http://www.rr.iij4u.or.jp/~bishop/FreeBSD/mw.html.ContributionsLes personnes suivantes ont contribué d'une façon ou d'une autre à la
rédaction de ce document. Soit directement en suggérant des modifications
ou des améliorations ou en signalant des erreurs, soit par leurs messages
sur les listes de diffusion de FreeBSD, où j'ai puisé sans scrupule de
l'information. Mes remerciements à tous.Antonio Bemfica, bemfica@militzer.me.tuns.caSue Blake, sue@welearn.com.auBrian Haskin, haskin@ptway.comKees Jan Koster, kjk1@ukc.ac.ukA Joseph Kosy, koshy@india.hp.comGreg Lehey, grog@lemis.comWes Peters, softweyr@xmission.comJoseph Stein, joes@wstein.comStudded, studded@dal.netAxel Thimm Axel.Thimm@physik.fu-berlin.deMatthew Thyer Matthew.Thyer@dsto.defence.gov.au
diff --git a/fr_FR.ISO8859-1/articles/mh/article.sgml b/fr_FR.ISO8859-1/articles/mh/article.sgml
index 8c5fe10010..92c765e257 100644
--- a/fr_FR.ISO8859-1/articles/mh/article.sgml
+++ b/fr_FR.ISO8859-1/articles/mh/article.sgml
@@ -1,744 +1,744 @@
%man;
%urls;
%abstract;
%artheader;
%translators;
%authors;
- %mailing-lists;
+ %mailing-lists;
]>
Introduction à MHMattMidboematt@garply.comv1.0, 16 Janvier 1996
&artheader.copyright;
Ce document est une introduction sur la façon d'utiliser MH
sous FreeBSD.
&abstract.license;
&abstract.disclaimer;
&trans.a.gioria;
IntroductionMH débuta en 1977 dans la société RAND
Corporation, oû la philosophie MH fut développée. MH
n'est pas seulement un programme monolithique de courrier
électronique mais plutôt une philosophie sur la meilleure
façon de développer des outils permettant de lire son
courrier. Les développeurs de MH ont fourni un logiciel superbe
tout en adhérent au concept KISS :
“Keep It Simple Stupid” (Rester le plus simple
possible).Plutôt que de disposer d'un seul et complexe logiciel pour
lire, envoyer et gérer ses courriers électroniques, ils
ont écrit une multitude de petits programmes
spécialisés. Certains aimeront MH pour cette
spécificité, d'autres non. Chaque outil de MH effectue une
action, et l'effectue très bien.En plus de tous les outils de gestion des courriers
électroniques, chaque outil MH comporte un mécanisme de
configuration uniforme. En fait, si vous ne savez pas vraiment comment
marche un outil, ou de quels arguments il dispose, vous vous en sortez
généralement très facilement. Toutes les commandes
de MH gèrent de façon identique les fichiers de
configuration et les arguments de la ligne de commande. La chose la plus
importante est de se souvenir que vous pouvez toujours passer l'option
-help
à une commande pour afficher toutes les
options disponibles.Pour commencer, assurez vous que vous avez installé les
programmes de MH sur votre machine. Si vous disposez d'un CDROM vous
devez pouvoir l'installer en exécutant la commande
suivante :#>pkg_add /cdrom/packages/mh-6.8.3.tgzVous verrez alors la création d'un répertoire
/usr/local/lib/mh ainsi que l'ajout de
différents binaires dans le répertoire
/usr/local/bin. Si vous préférez le
compiler vous même, vous pouvez télécharger les
sources en ftp anonyme depuis
ftp.ics.uci.edu ou
louie.udel.edu.Cette introduction n'est pas une explication détaillée
de la façon de fonctionner de MH. Elle vous permettra juste
démarrer sur la route de la façon la plus rapide de lire vos emails. Vous devrez
surement consulter les pages de manuels des différentes commandes par
la suite. De même il serait bon de lire le FAQ
sur MH et de vous abonnez au forum de discussion comp.mail.mh. Cependant la meilleur
ressource sur MH est le livre écrit par Jerry Peek aux éditions
O'Reilly et Associates.Lire le courrierCe chapitre explique les commandes inc,
show, scan, next,
prev>, rmm, rmf, and
msgchk. Le meilleur atout de MH est la consistence de
l'interface entre les différents programmes. La chose la plus
importante à retenir lorsque l'on utilise les différentes commandes,
est la façon de spécifier une liste de messages. Dans le cas de la
commande inc cela n'a aucun sens mais avec des commandes
comme show c'est plus qu'utile.Une liste de messages consiste en quelque chose comme 23 20
16, qui corresponds aux messages 23, 20 et 16. C'est vraiment très
simple, mais vous pouvez avoir des choses plus utiles comme
23-30 correspondant à tous les messages entre le message
23 et le message 30. Vous pouvez aussi spécifier cur:10,
qui correspond au message courant et aux 9 messages suivants. Les
messages curlast, et first
sont des messages spéciaux reférant au message courant, dernier
message, et premier message du dossier.inc, msgchk—lire ou vérifier vos
messagesSi vous tapez la commande inc sans arguments, vous
débutez sur la bonne voie pour lire votre courrier avec MH. La
première fois ou vous utilisez inc, il configurera votre
compte pour utilisez toutes les valeurs par défaut de MH et vous
demandera la création d'un répertoire Mail. Si vous avez des messages
et attente de téléchargement, vous verrez quelque chose qui peut
ressembler à ceci:
29 01/15 Doug White Re: Another Failed to boot problem<<On Mon, 15 J
30 01/16 "Jordan K. Hubbar Re: FBSD 2.1<<> Do you want a library instead of
31 01/16 Bruce Evans Re: location of bad144 table<<>> >It would appea
32 01/16 "Jordan K. Hubbar Re: video is up<<> Anyway, mrouted won't run, ev
33 01/16 Michael Smith Re: FBSD 2.1<<Nate Williams stands accused of sa
Vous obtenez la même vue que si vous utilisiez la commande scan (voir
). Si vous lancez inc sans arguments
, cela vous affiche juste le courrier qui vous est destiné.Enormément de personnes utilisent le protocole POP pour lire
leur mail. MH sait utiliser le protocole POP pour rapatrier les emails
sur votre poste. Vous devez passer plusieurs arguments à
inc pour cela.
tempest% inc -host mail.pop.org -user NomUtilisateur -norpop
Cela invoque la commande inc en lui disant d'aller
télécharger le courrier sur le serveur mail.pop.org,
avec comme nom d'utilisateur NomUtilisateur. L'option
-norpop
demande à la commande inc de
télécharger le courrier en clair suivant le protocole POP3. MH
supporte plusieurs variantes du protocole POP3. Vous n'utiliserez pas
dans la plupart des cas les autres variantes. Vous pouvez effectuer
des taches plus complexes avec inc comme, auditer des
fichiers ou parcourir des fichiers formattés
La commande msgchk vous permet de savoir si
vous avez ou non de nouveaux messages dans votre
boite.msgchk accepte les mêmes options
,
-host
et
-user
, que la commande
inc.show, next et prev—afficher un message et se déplacer dans une boite.show vous permet de visualiser un courrier de votre boite. Comme inc,show est une commande assez franche.Si vous tapez show sans paramètres elle affiche le message courant. Vous pouvez aussi demander l'affichage de messages particuliers en donnant son numéro à show:
tempest% show 32 45 56>
Cela affichera les fichiers numéros 32 45 56 à la suite l'un de
l'autre. Si vous changez rien à la configuration par défaut,
show ne fera rien d'autre qu'un
more sur le fichier contenant votre message.next s'utilise pour se déplacer au message
suivant et prev pour revenir au message
précedent. Ces deux commandes executent automatiquement un
show ce qui vous permet de lire automatiquement le
message suivant ou précédant.scan—Afficher un résumé de vos
messagesscan affiche un bref descriptif de tous les
messages de votre répertoire courant. Voici un exemple d'affichage de
la commande show:
30+ 01/16 "Jordan K. Hubbar Re: FBSD 2.1<<> Do you want a library instead of
31 01/16 Bruce Evans Re: location of bad144 table<<>> >It would appea
32 01/16 "Jordan K. Hubbar Re: video is up<<> Anyway, mrouted won't run, ev
33 01/16 Michael Smith Re: FBSD 2.1<<Nate Williams stands accused of sa
Comme tout dans MH, l'affichage est complètement configurable. Ce qui
est fournit dans l'exemple ci-dessus est l'affichage par défaut. Il
vous permet de visualiser le numéro du message, la date d'envoi,
l'envoyeur, le sujet et une partie du début du message. Le caractère
+ vous indique le message courant donc si vous
tapez la commande show vous visualiserez ce
message.Une option très utile de scan est l'option
-reverse
. Cette option permet de lister l'ensemble de
vos messages en affichant en premier le message ayant le numéro le
plus élevé. Une autre option très interessante de
scan lui permet de lire les données depuis un
fichier. Si vous désirez parcourir votre boite aux lettres de courrier
entrant sans avoir à lancer la commande inc, il
vous suffit de faire scan -file
/var/mail/nom_d_utilisateur. Cela
peut etre fait sur n'importe quel fichier au format
mbox.rmm et rmf— Effacer
le message courant ou le dossierrmm est utilisé pour effacer un message. Par
défaut le message n'est pas vraiment détruit mais renommé en un
fichier dont le nom est ignoré par les commandes de MH. Vous devrez
effacer physiquement de façon périodique les messages
“effacés”.La commande rmf permet d'effacer un
dossier. Cela ne renomme pas les fichiers mais les efface du disque
dur, vous devez donc faire extrèmement attention lorsque vous
l'utilisez.Un session typique de lecture avec MHLa première chose que vous ferez sera de lancer la commande
inc. Donc sous l'interpréteur de commandes tapez
inc et la touche entrée.
tempest% inc
Incorporating new mail into inbox...
36+ 01/19 "Stephen L. Lange Request...<<Please remove me as contact for pind
37 01/19 Matt Thomas Re: kern/950: Two PCI bridge chips fail (multipl
38 01/19 "Amancio Hasty Jr Re: FreeBSD and VAT<<>>> Bill Fenner said: > In
tempest%
Cela vous permet de visualiser les nouveaux messages rapatriés dans
votre boite aux lettres. La commande suivante a éxécuter est
show pour vous permettre de les visualiser et de
vous déplacer dans votre liste de messages.
tempest% show>
Received: by sashimi.wwa.com (Smail3.1.29.1 #2)
id m0tdMZ2-001W2UC; Fri, 19 Jan 96 13:33 CST
Date: Fri, 19 Jan 1996 13:33:31 -0600 (CST)
From: "Stephen L. Lange" <stvlange@wwa.com>
To: matt@garply.com
Subject: Request...
Message-Id: <Pine.BSD.3.91.960119133211.824A-100000@sashimi.wwa.com>
Mime-Version: 1.0
Content-Type: TEXT/PLAIN; charset=US-ASCII
Please remove me as contact for pindat.com
tempest% rmm>
tempest% next>
Received: from localhost (localhost [127.0.0.1]) by whydos.lkg.dec.com (8.6.11/8
.6.9) with SMTP id RAA24416; Fri, 19 Jan 1996 17:56:48 GMT
Message-Id: <199601191756.RAA24416@whydos.lkg.dec.com>
X-Authentication-Warning: whydos.lkg.dec.com: Host localhost didn't use HELO pro
tocol
To: hsu@clinet.fi
Cc: hackers@FreeBSD.org
Subject: Re: kern/950: Two PCI bridge chips fail (multiple multiport ethernet
boards)
In-Reply-To: Your message of "Fri, 19 Jan 1996 00:18:36 +0100."
<199601182318.AA11772@Sysiphos>
X-Mailer: exmh version 1.5omega 10/6/94
Date: Fri, 19 Jan 1996 17:56:40 +0000
From: Matt Thomas <matt@lkg.dec.com>
Sender: owner-hackers@FreeBSD.org
Precedence: bulk
This is due to a typo in pcireg.h (to
which I am probably the guilty party).La commande rmm efface le message courant et
la commande next permet de déplacer le numéro du
message courant au message suivant. Maintenant vous désirez visualiser les
dix courriers les plus récents, pour choisir lequel vous désirez lire:
tempest% scan last:10>
26 01/16 maddy Re: Testing some stuff<<yeah, well, Trinity has
27 01/17 Automatic digest NET-HAPPENINGS Digest - 16 Jan 1996 to 17 Jan 19
28 01/17 Evans A Criswell Re: Hey dude<<>From matt@tempest.garply.com Tue
29 01/16 Karl Heuer need configure/make volunteers<<The FSF is looki
30 01/18 Paul Stephanouk Re: [alt.religion.scientology] Raw Meat (humor)<
31 01/18 Bill Lenherr Re: Linux NIS Solaris<<--- On Thu, 18 Jan 1996 1
34 01/19 John Fieber Re: Stuff for the email section?<<On Fri, 19 Jan
35 01/19 support@foo.garpl [garply.com #1138] parlor<<Hello. This is the Ne
37+ 01/19 Matt Thomas Re: kern/950: Two PCI bridge chips fail (multipl
38 01/19 "Amancio Hasty Jr Re: FreeBSD and VAT<<>>> Bill Fenner said: > In
tempest%
Maintenant vous voulez lire le message numéro 27, donc vous
tapezshow 27 et il s'affiche. Comme vous pouvez
le voir après ce court exemple MH est très simple à utiliser pour
visualiser et lire votre courrier et est de plus très intuitif.
Chercher parmis les messages et les dossiersToute personne qui a beaucoup de mails aime à pouvoir mettre des
priorités, marquer les messages, les numéroter de différentes
façons. MH permet de faire toutes ces taches de façons très simple
comme d'habitude. Une chose dont nous n'avons pas encore parlé est le
concept de dossier. Vous avez surement utilisé le concept de dossier
avec d'autres programmes de lecture de courrier éléctronique. MH a
aussi des dossiers. MH peut aussi avoir des sous-dossiers de
dossiers. Un chose que vous devez avoir à l'esprit quand vous utilisez
la commande inc, pour la première fois, est qu'elle
demande si vous voulez créer le répertoire Mail,
et qu'elle enregistre tout dans ce répertoire. Si vous regardez ce
qu'il se trouve dans ce répertoire, vous verrez un répertoire
inbox. Ce répertoire comporte tous vos nouveaux
messages qui n'ont pas encore été déplacés dans un autre
dossier.Lorsque vous créez un nouveau dossier, un répertoire est crée
sous votre répertoire Mail et les messages à
destination de se dossier sont stockés dans ce répertoire. Lorsque un
nouveau message arrive, il est déposé dans votre répertoire
inbox avec comme nom le numéro du message. Donc
même si vous n'avez pas les outils MH pour lire votre courrier,
vous pouvez utiliser les commandes standards UNIX pour vous déplacer
parmis les dossiers et visualiser vos messages. C'est cette simplicité
qui vous donne autant de puissance dans le traitement de vos
messages.De la meme façon ou vous pouvez utiliser une liste de messages,
comme 23 16 42, avec la plupart des commandes
MH; il y a une option utilisable avec toutes les commandes MH vous
permettant de travailler dans le dossier spécifié. Si vous essayer
scan +freebsd, vous allez parcourir le dossier
freebsd. Si vous faites un show +freebsd
23 16 42, la commande show affichera les
messages 23, 26 et 42 du dossier freebsd. Donc
souvenez vous que la syntaxe
+dossier
. Vous en aurez besoin pour
lancer les commandes dans les différents dossiers. Souvenez vous aussi
que votre dossier de courrier entrant par défaut est
inbox, donc en faisant un folder
+inbox vous aurez la liste de vos nouveaux messages. Bien
sur grace à la flexibilité de MH, vous pourriez changer ce dossier,
mais il y a peu d'interet à le faire.pick— recherche par critères dans les
messagespick est une des commandes les plus
compliquées de MH. Je ne saurais pas mieux vous conseiller que d'aller
voir la page de manuel de
pick1
pour bien la comprendre. La plus simple façon de s'en servir est la
suivante:
tempest% pick -search pci
15
42
55
56
57
Cela vous permet de trouver les numéros de tous les messages
comprenant le mot pci dans une des lignes du
message. Vous pouvez ensuite lancer la commande
show sur ces messages pour les lire ou
rmm pour les effacer. Vous devrez bien sur lancer
la commande suivante show 15 42 55-57 pour les voir
tous. Une façon un peu plus compliquée d'utiliser
pick serait la suivante:
tempest% pick -search pci -seq pick
5 hits
tempest% show pick
Cela vous permet de voir les memes messages que précédemment sans vous
fatiguer. L'option
-seq
n'est rien de plus qu'une
abréviation de l'option
-sequence
et la commande
pick n'est rien de plus qu'une sequence comportant
les numéros des messages vérifiant le critère. Vous pouvez aussi
utiliser la commande rmm pick pour effacer tous les
messages qui répondent au critère. Le nom de la sequence n'est pas
signifiant. Si vous relancez la commande pick de
nouveau, l'ancienne séquence sera effacée si vous utilisez le meme
nom.Si vous n'utilisiez que la commande pick
-search, cela peut prendre plus de temps que de chercher un
message entre un destinataire et un envoyeur. La commande
pick dispose donc de certains critères prédéfinis:
-to
recherche sur le destinataire
-cc
recherche dans le champ cc du message
-from
recherche sur l'expéditeur du message
-subject
recherche dans le sujet du message
-date
recherche par rapport à la date du message
--component
recherche sur un quelconque autre entete. (ex:
--reply-to
pour rechercher dans les entetes reply-to
des messages)Cela permet d'avoir des requetes de ce type:
tempest% pick -to freebsd-hackers@freebsd.org -seq hackers
pour avoir tous les messages envoyés à la liste de diffusion hackers
de FreeBSD. pick vous permet de grouper de
différentes façon en fonctiondu critère.
…
-and
……
-or
&hellip
-not
…
-lbrace
…
-rbrace
Ces options permettent de faire des choses comme ceci:
tempest% pick -to freebsd-hackers -and -cc freebsd-hackers
Cela vous permet de retrouver tous les messages envoyés à la liste
freebsd-hackers ou mis en copie à cette liste. Les options
lbrace
et
rbrace
vous permettent de grouper les critères ensemble. Cela peut
etre util dans certaines situations, comme dans l'exemple suivant:
tempest% pick -lbrace -to freebsd-hackers -and
-not -cc freebsd-questions -rbrace -and -subject pci>Cet exemple vous permet d'extraire tous les mails destinés à la
liste freebsd-hackers (mais qui ne sont pas mis en copie pour la liste
freebsd-questions) et dont le sujet est pci. Normalement vous
vous poseriez la question; mais quelle est la précédence des
opérateurs ? Vous vous rappelez qu'en mathématiques les expressions
sont évaluées de gauche à droite et que la multiplication et la
division ont plus de poids que les additions et les soustractions. MH
utilise les memes règles pour la commande pick. Les
combinaisons peuvent etre très complexes, donc lisez la page de manuel
pour plus d'informations. Ce document est juste la pour vous aider à
découvrir MH.folder, folders,
refile— trois programmes utiles pour gérer vos
dossiers.Il y a trois programmes vous permettant de gérer de façon
primitive vos dossiers. Le programme folder est
utilisé pour changer de dossiers, lister leur contenu. Vous pouvez
lancer la commande folder
+dossier2 et automatiquement,
vous vous retrouverez dans le dossier
dossier2. Alors toutes les commandes MH,
telles que
comp,repl,scan,
et show utiliserons le dossier dossier2.Quelques fois lorsque vous lisez et effacez dans messages vous
avez des discontinuitées dans vos dossiers. Si vous faites un
scan vous pouvez voir les messages 34, 35, 36, 43,
55, 56, 57, 80. Si vous faites un folder -pack,
cela vous permet de renuméroter tous vos messages, et vous n'aurez
plus de disccontinuitées. Cela n'efface aucun message. Vous devez donc
périodiquement faire des rmm sur vos
messages.Si vous desirez des statistiques sur vos dossiers, vous pouvez
faire des folders ou des folder
-all pour obtenir la liste de vos dossiers, combien de
messages comporte chaque dossier et quel est le message courant dans
chacun. La ligne de statistique affichée est la meme que celle que
vous avez lorsque vous changez de dossier avec la commande
folder +dossier2>. Un exemple de la commande
folders pourrait etre:
Folder # of messages ( range ); cur msg (other files)
announce has 1 message ( 1- 1).
drafts has no messages.
f-hackers has 43 messages ( 1- 43).
f-questions has 16 messages ( 1- 16).
inbox+ has 35 messages ( 1- 38); cur= 37.
lists has 8 messages ( 1- 8).
netfuture has 1 message ( 1- 1).
out has 31 messages ( 1- 31).
personal has 6 messages ( 1- 6).
todo has 58 messages ( 1- 58); cur= 1.
TOTAL= 199 messages in 13 folders.
La commande refile vous permet de deplacer
les messages entre les dossiers. Si vous faites un refile 23
+nouveaudossier, le message 23 sera déplacer dans le dossier
nouveaudossier. Vous pouvez tout aussi bien faire
un refile 23 +nouveaudossier/sousdossier1 qui
déplacera le message 23 dans le un sous
dossier,sousdossier1, du dossier
nouveaudossier. Si vous voulez garder un message
dans le dossier courant tout en le mettant dans un autre, vous devez
lancer la commande refile -link 23 +nouveaudossier,
qui gardera le message dans le dossier inbox tout
en le listant dans le dossier
nouveaudossier. Cela vous permet de réaliser
toutes les choses merveilleuses que vous pouvez faire avec MH.Envoyer des messagesL'email est pour beaucoup de gens, comme une rue a double sens,
vous voudrez donc répondre a certains messages. La façon qu'emploie MH
pour envoyer des messages peut etre difficile a comprendre au début,
mais il permet une énorme flexibilitée.La première chose que fait MH,
est de copier un "composant" dans votre file de messages sortant. Un
"composant" est en fait un squelette de message comportant les entetes
To: et Subject:. Le système
lance ensuite votre éditeur favori ou vous pouvez remplir les entetes
et composer le corps du message sous les pointillés dans le
message. Ensuite vous lancez la commande
whatnow. Et lorsque vous avez le prompt
What now?, vous pouvez répondre par une des commandes
suivante send, list, edit,
edit, push, and
quit. La plupart des commandes précédentes
s'expliquent d'elles meme. Donc le processus d'envoi de message est le
suivant; copie du fichier "composant", édition de votre message, et
lancement de la commande whatnow en lui indiquant
quoi faire de votre message.comp>, forw>,
reply>—composer, faire suivre ou répondre à un
messageLa commande comp comporte quelques options de
la ligne de commande intéressantes. La plus importante est
-editor
.Lorsque vous installez MH, un programme
appellé prompter est utiliser comme éditeur de
texte par défaut. Ce n'est pas un éditeur très interessant. Donc
lorsque vous composez un message, vous utiliserez surement
comp -editor /usr/bin/vi ou comp -editor
/usr/local/bin/pico a la place. Après avoir lancer
comp, vous vous trouvez dans votre éditeur de
texte favori et vous voyez quelque chose qui ressemble à ceci:
To:
cc:
Subject:
--------
Vous devez ajoutez l'addresse de votre destinataire apres le mot
To:. Vous devez remplir de la meme manière les
autres entetes, donc vous devez mettre le sujet après le mot
Subject:. Vous pouvez ensuite ajouter le corps de
votre message après les lignes pointillées. Cela peut vous sembler un
peu simpliste par rapport a d'autres programmes de messagerie qui vous
pose des questions et remplissent automatiquement les différents
entete, mais cela vous apporte une excellente flexibilité.
To:freebsd-rave@freebsd.org
cc:
Subject:Et le 8ème jour, Dieu créa le bureau des directeurs de FreeBSD
--------
Ouah, c'est un super système d'exploitation. Merci !
Vous pouvez ensuite, sauvegarder le message et quitter votre
éditeur. Vous aurez alors le prompt What now? et vous
pourrez taper send ou s
et appuyer sur la touche entrée. Alors l'équipe
principal de développemet de FreeBSD recevra votre gratitude. Comme
mentionné précedemment vous pouvez utiliser une des autres réponse,
par exemple quit si vous ne voulez pas envoyer ce
message.La commande forw s'utilise de façon
similaire. La principal différence est que le message que vous envoyez
comprends dans son corps le message courant. Lorsque vous utilisez la
commande forw, vous faites suivre le message
courant a un autre destinataire. Vous pouvez faire suivre un autre
message en utilisant de la façon suivante forw 23
la commande forw, ainsi le message 23 sera ajoute
dans le corps du message composé. A part ces simples différences, la
commande forw, fonctionne de la meme façon que la
commande comp. La commande repl vous permet de répondre au
message courant, sauf si vous lui indiquez un autre numéro de
message. La commande repl essaye de remplir au
mieux les différents champs de l'entete en fonction de ce qui se
trouve dans le message de base. Vous noterez donc que le
champ To: de l'entete comporte deja l'adresse du
destinataire et que la ligne Subject: est deja
remplie. Ensuite vous composez de la façon habituelle votre
message. Un option interessante de cette commande est
-cc
. Vous pouvez utiliser comme parametre
all, to,
cc,me avec cette option;
cela vous permet d'ajouter de façon simple, les adresses en copie du
message original. Vous noterez que le message original n'est pas inclu
par défaut. C'est le comportement par défaut de la plupart des
configuration de MH.
components, et
replcomps—les fichiers de composition pour
comp> and repl>Le fichier components se trouve la plupart
du temps dans le répertoire
/usr/local/lib/mh. Vous pouvez copier ce fichier
dans votre répertoire de MH et l'éditer pour ajouter ce que vous
voulez. Vous avez certaines lignes d'entete de mail par défaut au
début, une ligne pointillée et puis plus rien. La commande
comp ne fait que copier ce fichier et vous permet
ensuite de l'éditer. Vous pouvez ajouter n'importe quel entete valide
(RFC822). Par exemple, vous pourriez avoir le fichier
components suivant:
To:
Fcc: out
Subject:
X-Mailer: MH 6.8.3
X-Comment: FreeBSD the power to serve
X-Home-Page: http://www.freebsd-fr.org/
-------
MH copiera donc ce fichier et vous enverra dans votre éditeur
favori. Le fichier components est très simple. Si
vous désirez inclure une signature, il vous suffit de l'ajouter dans
ce fichier.Le fichier replcomps est un peu plus
complexe. Son contenu par défaut ressemble à ceci:
%(lit)%(formataddr %<{reply-to}%?{from}%?{sender}%?{return-path}%>)\
%<(nonnull)%(void(width))%(putaddr To: )\n%>\
%(lit)%(formataddr{to})%(formataddr{cc})%(formataddr(me))\
%<(nonnull)%(void(width))%(putaddr cc: )\n%>\
%<{fcc}Fcc: %{fcc}\n%>\
%<{subject}Subject: Re: %{subject}\n%>\
%<{date}In-reply-to: Your message of "\
%<(nodate{date})%{date}%|%(pretty{date})%>."%<{message-id}
%{message-id}%>\n%>\
--------
Ce fichier a le meme format de base que le fichier
components mais il comporte un peu plus de codes
de mise en forme. La commande %(lit) crée l'espace
nécessaire pour l'adresse. La commande %(formataddr
est une fonction qui retourne une adresse e-mail cohérente. Le morceau
suivant %< permet de remplir le champ de
l'adresse avec l'adresse correspondante dans le cas ou elle se trouve
dans le champ {reply-to} du message de
l'emetteur. Cela sera donc transfomé de la manière suivante:
%<si {reply-to} dans le message original ou trouve un champ reply-to
alors la mettre dans le champ formataddr, %? sinon
prendre le contenu du champ {from} , %? sinon prendre
le champ {sender} , %?
et en dernier lieu prendre le champ {return-path} , %> endif.Comme vous pouvez le voir, le formattage des champs de MH peut
etre largement étendu. Vous pourrez surment décrypter le maximum des
autres fonctions et des noms de variables. Toutes les autres
informations sur le façon d'écrire ces chaines de formattage se trouve
dans la page de manuel de MH. Donc lorsque vous aurez finit de creer
votre fichier replcomps vous n'aurez plus besoin
d'y toucher. Aucun autre programme ne vous donne autant de flexibilité
et de pouvoir que MH.
diff --git a/fr_FR.ISO8859-1/articles/multi-os/article.sgml b/fr_FR.ISO8859-1/articles/multi-os/article.sgml
index 90b94c6de7..6b2a40dd47 100755
--- a/fr_FR.ISO8859-1/articles/multi-os/article.sgml
+++ b/fr_FR.ISO8859-1/articles/multi-os/article.sgml
@@ -1,700 +1,700 @@
%man;
%urls;
%abstract;
%artheader;
%translators;
%authors;
- %mailing-lists;
+ %mailing-lists;
]>
Installer et utiliser FreeBSD en même temps que d'autres systèmes d'exploitationJayRichmond
&artheader.copyright;
jayrich@sysc.com6 Aout 1996Ce document explique comment faire cohabiter proprement FreeBSD et
d'autres systèmes d'exploitation courants tels que Linux, MS-DOS, OS/2
et Windows 95. Remerciements particuliers à Annelise Anderson
andrsn@stanford.edu, Randall Hopper
rhh@ct.picker.com et Jordan K. Hubbard
jkh@time.cdrom.com.
&abstract.license;
&abstract.disclaimer;
&trans.a.haby;
RésuméLa plupart des gens n'arrivent pas à faire cohabiter leurs divers
systèmes d'exploitation sans des disques de grande capacité,
des informations sur les gros disques EIDE sont donc incluses. Comme il
y a de nombreuses combinaisons possibles de systèmes d'exploitation et
de configurations de disques durs, la section
Exemples sera peut-être celle
qui vous sera la plus utile. Elle décrit plusieurs configurations
d'ordinateurs utilisant plusieurs systèmes d'exploitation.Ce document suppose que vous avez déjà préparé de la place sur votre
disque dur pour un système d'exploitation supplémentaire. Chaque fois que
vous repartitionnez votre disque dur, vous prenez le risque de détruire
les données qui se trouvent sur les partitions existantes. Toutefois, si
votre disque est entièrement occupé par DOS, vous trouverez peut-être le
programme FIPS (qui se trouve sur le CD-ROM FreeBSD dans le répertoire
\TOOLS ou que vous pouvez télécharger par
ftp) utile.
Il vous permet de repartitionner votre disque sans détruire les données
qui s'y trouvent. Il existe aussi une programme commercial appelé
Partition Magic, qui vous permet de dimensionner et de supprimer des
partitions sans dégât.Revue des gestionnaires de démarrageCe ne sont que de brèves descriptions des différents gestionnaires
de démarrage que vous rencontrerez. Selon la configuration de votre
ordinateur, vous pourrez trouver utile d'en employer plus d'un sur le
même système.Boot EasyC'est le gestionnaire de démarrage par défaut de FreeBSD. Il
peut démarrer à peu près n'importe quoi, y compris BSD, OS/2
(HPFS), Windows 95 (FAT et FAT32) et Linux. Les partitions sont
sélectionnées à l'aide des touches fonction.OS/2 Boot ManagerIl démarrera depuis la FAT, HPFS, FFS (FreeBSD) et EXT2
(Linux). Il peut aussi démarrer depuis des partitions FAT32.
Les partitions sont sélectionnées avec les touches Flèches.
Le gestionnaire de démarrage
OS/2 Boot Manager est le
seul à utiliser sa propre partition distincte, à l'inverse des
autres qui utilisent l'enregistrement principal de démarrage
(Master Boot
Record - MBR). Il doit donc être
installé dans les 1024 premiers cylindres pour éviter des
problèmes de démarrage. Il peut charger Linux en utilisant LILO
lorsque ce dernier se trouve sur le secteur de démarrage et non sur
le MBR. Allez sur les
HOWTO Linux
sur le World Wide Web pour plus d'informations sur le démarrage
de Linux avec le gestionnaire de démarrage d'OS/2.OS-BSC'est une alternative à Boot Easy. Il vous donne plus de
contrôle sur le processus de démarrage, avec la possibilité de
sélectionner la partition à démarrer par défaut et le délai de
démarrage. La version béta de ce programme vous permet de
sélectionner le système d'exploitation à démarrer avec les
touches Flèches. Il est inclus sur le CD-ROM FreeBSD dans le
répertoire \TOOLS et vous pouvez le
télécharger par
ftp.LILO, ou LInux LOader (“chargeur Linux”)C'est un gestionnaire de démarrage limité. Il peut démarrer
FreeBSD, mais il faut acommoder son fichier de configuration.A propos de la FAT32: La FAT32
remplace le système de fichiers FAT depuis la version Microsoft
OEM SR2 Béta, qui sera utilisée sur les ordinateurs avec Windows
95 pré-installé vers la fin de 1996. Elle convertit le système
de fichiers FAT habituel et permet d'utiliser des tailles
d'agrégat - “cluster” - plus
petites sur de plus gros disques. La FAT32 modifie aussi le
secteur de démarrage et la table d'allocation habituels de la FAT,
ce qui la rend incompatible avec certains gestionnaires de
démarrage.Une configuration typiqueSupposons que nous ayons deux gros disques EIDE, et que nous
voulions y installer FreeBSD, Linux et Windows 95.Voici comment je procéderais avec ces disques durs:/dev/wd0 (premier disque dur
physique),/dev/wd1 (second disque dur).Ils ont tous deux 1416 cylindres.Je démarre avec une disquette de démarrage MS-DOS ou
Windows qui contient l'utilitaire FDISK.EXE
et crée une petite partition primaire de 50 Mo (35-40 pour Windows
95 et un peu d'espace libre) sur le premier disque. Je crée aussi
une partition plus importante sur le second disque pour mes
applications et mes données Windows.Je redémarre et installe Windows 95 (plus facile à dire qu'à
faire) sur la partition C:.J'installe ensuite Linux. Je ne suis pas certain pour qui
concerne toutes les distributions de Linux, mais la Slackware
comprend LILO (voyez la section
Revue des gestionnaires de
démarrage). Au moment de partitionner mon disque dur
avec l'utilitaire fdisk de Linux,
je mets tout Linux sur le premier disque (peut-être 300 Mo
pour une partition racine confortable et de l'espace de
pagination).Après avoir installé Linux, et quand on me demande si je veux
installer LILO, je fais attention à l'installer
sur le secteur de démarrage de ma partition racine Linux, et non
sur le MBR (Master Boot
Record - enregistrement principal de
démarrage).L'espace restant disponible sur le disque peut servir à
FreeBSD. Je vérifie aussi que la
tranche - “slice” - racine
de FreeBSD ne déborde pas de la limite des 1024 cylindres (1024
cylindres correspond à 528 Mo à partir du début du disque sur nos
hypothétiques disques de 720 Mo). J'utiliserai éventuellement le
reste du disque dur (environ 270 Mo) pour les tranches
/usr et /var. Le
reste du second
disque (l'espace disponible dépend de la taille de ma partition
d'applications/données Windows que j'ai créée à l'étape 1) peut être
utilisé pour la tranche /usr/src et l'espace
de pagination.Vus de l'utilitaire fdisk de Windows 95, mes
disques ressembleraient à ceci:
---------------------------------------------------------------------
Display Partition Information
Current fixed disk drive: 1
Partition Status Type Volume_Label Mbytes System Usage
C: 1 A PRI DOS 50 FAT** 7%
2 A Non-DOS (Linux) 300 43%
Total disk space is 696 Mbytes (1 Mbyte = 1048576 bytes)
Press Esc to continue
---------------------------------------------------------------------
Display Partition Information
Current fixed disk drive: 2
Partition Status Type Volume_Label Mbytes System Usage
D: 1 A PRI DOS 420 FAT** 60%
Total disk space is 696 Mbytes (1 Mbyte = 1048576 bytes)
Press Esc to continue
---------------------------------------------------------------------
Disons FAT16, ou FAT32 si vous utilisez la mise à jour
OEM SR2 (voyez la section
Revue des gestionnaires de
démarrage).J'installe FreeBSD. Je veille à démarrer avec le premier
disque dur défini comme “NORMAL” dans le paramétrage
du BIOS. Sans cela, je devrais indiquer la géométrie réelle de mon
disque au démarrage (pour la connaître, démarrez Windows 95 et
consultez les diagnostics Microsoft (MSD.EXE)
ou allez voir dans le BIOS) avec le paramètre
hd0=1416,16,63 où 1416
est le nombre de cylindres de mon disque dur,
16 est le nombre de têtes par piste et
63 est le nombre de secteurs par
tête.Au moment de partitionner le disque dur, je fais attention à
bien installer Boot Easy sur le premier disque. Je ne m'occupe pas
du second disque, à partir duquel rien n'est démarré.Au redémarrage, Boot Easy devrait reconnaître mes trois
partitions démarrables comme DOS (Windows 95), Linux et BSD
(FreeBSD)Considérations particulièresLa plupart des systèmes d'exploitation sont très chatouilleux sur la
façon et l'endroit où ils sont installés sur le disque dur. Windows 95 et
DOS doivent être sur la première partition primaire du premier disque dur.
OS/2 fait exception. Il peut être sur le premier ou le second disque et
sur une partition primaire ou étendue. Si vous n'êtes pas sûr de vous,
gardez le début des partitions démarrables avant le 1024ème
cylindre.Si vous installez Windows 95 sur un système BSD existant, cela va
“écraser” le MBR, et vous devrez réinstaller votre précédent
gestionnaire de démarrage. Boot Easy peut être réinstallé avec
l'utilitaire BOOTINST.EXE qui se trouve dans le
répertoire \TOOLS du CD-ROM, ou peut être téléchargé
par ftp.
Vous pouvez aussi relancer le processus d'installation et aller dans
l'éditeur de partitions. De là, indiquez que la partition FreeBSD est
démarrable, choisissez l'option
Boot Manager
(gestionnaire de démarrage) et tapez
W pour écrire les informations sur le MBR. Vous
pouvez maintenant redémarrer, et Boot Easy reconnaîtra votre Windows 95
en tant que DOS.N'oubliez pas s'il vous plaît qu'OS/2 peut lire les partitions FAT
et HPFS, mais pas les partitions FFS (FreeBSD) ou EXT2 (Linux). De même,
Windows 95 ne peut que lire et écrire sur les partitions FAT et FAT32
(voyez la section Revue des gestionnaire
de démarrage). FreeBSD peut lire la plupart des systèmes de
fichiers, mais ne sait pas actuellement lire les partitions HPFS. Linux
peut lire les partitions HPFS, mais ne peut pas y écrire. Les versions
récentes du noyau Linux (2.x) peuvent lire et écrire les partitions VFAT
de Windows 95 (La VFAT est ce qui permet à Windows d'utiliser des noms
de fichiers longs - c'est à peu près la même chose que la
FAT). Linux peut lire et écrire sur la plupart des systèmes de fichiers.
Pigé? Je l'espère.Exemples(Cette section a besoin d'être revue, envoyez s'il vous
plaît vos exemples à jayrich@sysc.com.)FreeBSD + Windows 95: Si vous avez installé FreeBSD après Windows 95,
vous devriez voir la mention DOS sur le menu de Boot
Easy. C'est Windows 95. Si vous avez installé Windows 95 après FreeBSD,
lisez la section Considérations
particulières ci-dessus. Tant que votre disque n'a pas 1024
cylindres, vous ne devriez pas avoir de problèmes pour démarrer. Si
toutefois une de vos partitions va au-delà du 1024ème cylindre, et que
vous avez des messages du type invalid system disk
sous DOS (Windows 95) et que FreeBSD ne démarre pas, cherchez dans les
paramètres de configuration de votre BIOS quelque chose appelé
“> 1024 cylinder support” ou
mode “NORMAL/LBA”. DOS peut avoir besoin
du LBA (Logical Block
Adressing - Adressage de bloc logique) pour
démarrer correctement. Si la perspective de modifier les paramètres du
BIOS à chaque démarrage ne vous enchante pas, vous pouvez démarrer
FreeBSD depuis DOS avec l'utilitaire FBSDBOOT.EXE
du CD (il devrait reconnaître votre partition FreeBSD et la
démarrer).FreeBSD + OS/2 + Windows: Rien de nouveau dans ce cas. Le gestionnaire
de démarrage d'OS/2 peut démarrer tous ces systèmes d'exploitation, il ne
devrait pas y avoir de problème.FreeBSD + Linux: Vous pouvez aussi utiliser Boot Easy pour démarrer
les deux systèmes d'exploitation.FreeBSD + Linux + Windows 95: (voyez la section
Une installation typique).Autres endroits où trouver de l'aideIl y a de nombreux
HOWTO Linux
qui traitent des systèmes d'exploitation multiples sur un même
disque.Le
mini-HOWTO
Linux+DOS+Win95+OS2 donne des indications sur la configuration
du gestionnaire de démarrage d'OS/2, et le
mini-HOWTO
Linux+FreeBSD peut aussi vous intéresser.
L'HOWTO
Linux est aussi utile.Le
Guide
de programmation du chargeur NT fournit des informations
intéressantes sur le démarrage de Windows NT, 95 et DOS avec d'autres
systèmes d'exploitation.Le jeu de documents d'Hale Landis, “Comment ça marche”,
contient de bonnes informations sur toutes sortes de géométries de disques
et autres sujets liés au démarrage. Voici quelques liens qui peuvent vous
aider à le trouver:ftp://fission.dt.wdc.com/pub/otherdocs/pc_systems/how_it_works/allhiw.zip,http://www.cs.yorku.ca/People/frank/docs/.Enfin, ne négligez pas la documentation du noyau de FreeBSD sur le
processus de démarrage, disponible dans la distribution du source du
noyau (elle est installée dans
file:/usr/src/sys/i386/boot/biosboot/README.386BSD).Détails Techniques(Contribution de Randall Hopper
rhh@ct.picker.com)Cette section tente de vous donner assez d'informations de base
sur vos disques durs et sur le processus de démarrage à partir d'un
disque pour vous permettre de régler la plupart des problèmes que vous
pourriez rencontrer lorsque vous configurerez le démarrage de plusieurs
systèmes d'exploitation. Elle commence par des choses relativement
élémentaires, vous préférerez donc peut-être la parcourir en diagonale
jusqu'à ce que les points abordés vous paraissent moins familiers et
commencer alors à la lire en détail.Introduction aux disquesTrois termes fondamentaux décrivent la localisation des données
sur vos disques durs: Cylindres, Têtes et Secteurs. Il n'est pas très
important de savoir à quoi ils se rapportent sinon qu'ensemble, ils
définissent où sont physiquement les données sur le disque.Votre disque a un nombre donné de cylindres, de têtes, et de
secteurs par tête-cylindre (un doublet tête-cylindre est aussi appelé
une piste). Ensemble, ces informations définissent la “géométrie
physique” de votre disque. Il y a typiquement 512 octets par
secteur et 63 secteurs par pistes, le nombre de cylindres et de têtes
variant très largement d'un disque à l'autre. Vous pouvez alors
calculer la quantité d'informations que peut enregistrer votre disque
par la formule:
nombre de cylindres X nombre de têtes X 63 secteurs/piste X 512 octets/secteur
Par exemple, pour mon disque Western Digital AC31600 EIDE de 1,6 Go,
cela donne:
3148 cylindres X 16 têtes X 63 secteurs/piste X 512 octets/secteur
c'est-à-dire 1.624.670.208 octets, ou environ 1,6 Go.Vous pouvez connaître la géométrie physique de votre disque dur
(nombre de cylindres, de têtes et de secteurs par piste) avec ATAID
ou d'autres programmes que vous trouverez sur l'Internet. Ces
informations sont peut-être aussi fournies avec votre disque. Faites
cependant attention: si vous utilisez le LBA du BIOS (voyez la section
Restrictions pour le démarrage et
avertissements), vous ne pouvez pas vous servir de n'importe
quel programme pour connaître la géométrie physique. Cela parce que de
nombreux programmes (e.g., MSD.EXE ou
le fdisk de FreeBSD) ne reconnaissent pas la
géométrie physique, ils listent à la place la géométrie
redéfinie (des valeurs virtuelles dues à l'utilisation
du LBA). Continuez à lire pour savoir ce que cela veut dire.Une autre chose à savoir à propos de ces termes. 3
valeurs - un numéro de cylindre, un numéro de tête, et un
numéro du secteur sur la piste - identifient l'adresse absolue
d'un secteur sur votre disque. Les cylindres et les têtes sont
numérotés à partir de 0, et les numéros de secteurs commencent à
1.Ceux que des détails plus techniques intéressent peuvent
trouver un peu partout sur l'Internet des informations sur la géométrie
des disques, les secteurs de démarrage, les BIOS, etc. Faites une
recherche sur Yahoo, Lycos, etc. pour boot sector ou
master boot record. Parmi les choses utiles que vous
trouverez, il y a le jeu de documents
“Comment ça marche” - How It
Works de Hale Landis. Voyez la section
Autres endroits où trouver de l'aide pour
avoir quelques pointeurs vers ces documents.OK, assez de terminologie. Nous sommes censés parler de démarrage
ici.Le processus de démarrageSur le premier secteur de votre disque (cylindre 0, tête 0,
secteur 1) se trouve l'enregistrement principal de
démarrage - Master Boot
Record (MBR). Il contient une carte de votre disque.
Il identifie jusqu'à 4 partitions, chacune d'elle
étant un espace contigu sur ce disque. FreeBSD appelle les partitions
des tranches - slices - pour
éviter la confusion avec ses propres partitions, mais nous
n'utiliserons pas ici ce terme. Chaque partition peut contenir son
propre système d'exploitation.Chaque entrée de partition dans le MBR comprend un
IDentifiant de partition, un
Cylindre/Tête/Secteur de Début et un
Cylindre/Tête/Secteur de Fin. L'IDentifiant de
partition dit de quel type de partition il s'agit (de quel OS) et le
Début/Fin dit où elle se trouve. La table des
IDs de partitions liste un
échantillon d'identifiants de partitions usuels.ID (hex)Description01DOS12 primaire (FAT 12-bit)04DOS16 primaire (FAT 16-bit)05DOS12 étendue06DOS primaire large (> 32 Mo)0AOS/283Linux (EXT2FS)A5FreeBSD, NetBSD, 386BSD (UFS)Toutes les partitions ne dont pas démarrables (e.g. DOS étendue).
Certaines le sont - d'autres ne le sont pas. Ce qui rend
une partition démarrable est la configuration du secteur de démarrage
de la
partition - Partition Boot Sector - qui
est toujours présent au début de chaque partition.Quand vous configurez votre gestionnaire de démarrage favori, il
consulte les entrées dans les tables de partitions du MBR de tous vos
disques et vous donne la possibilité de donner un nom à ces entrées.
Quand vous démarrez ensuite, le gestionnaire de démarrage
est appelé par du code prévu pour cela à partir secteur principal de
démarrage - Master Boot Sector - du
premier disque trouvé sur votre système. Le gestionnaire consulte
l'entrée de la table de partitions du MBR correspondant à la partition
que vous avez choisie, charge le secteur de démarrage de cette partition
et lui passe le contrôle. Ce secteur de démarrage de la partition
elle-même contient suffisamment d'informations pour commencer à charger
le système d'exploitation qui se trouve sur cette partition.Il y a une chose importante à savoir dont nous n'avons pas encore
parlé. Tous vos disques durs ont un MBR. Toutefois, celui qui est
important est celui qui se trouve sur le premier disque reconnu par le
BIOS. Si vous n'avez que des disques durs IDE, c'est le premier disque
IDE (e.g. le disque maître sur le premier contrôleur). De même pour les
systèmes entièrement SCSI. Si vous avez et des disques durs IDE et des
disques durs SCSI, le disque IDE est habituellement le premier disque
dont la présence est testée par le BIOS, le premier disque IDE est donc
le premier disque reconnu. Le gestionnaire de démarrage que vous
installerez sera implémenté sur le premier disque dur reconnu comme
nous venons de l'expliquer.Restrictions pour le démarrage et avertissementsVoici maintenant les choses intéressantes auxquelles il faut
faire attention.
La redoutable limitation à 1024 cylindres et en quoi le LBA du
BIOS peut être utileLa première partie du processus de démarrage est entièrement
confiée au BIOS, (si ce terme est nouveau pour vous, le BIOS est
un circuit électronique sur votre carte mère qui contient le
code de démarrage de votre ordinateur). C'est pourquoi cette
première partie du processus est soumise aux limitations du
BIOS.L'interface BIOS utilisée pour lire le disque dur durant
cette phase (INT 13H, Sous-fonction 2) alloue 10 bits pour le
numéro de cylindre, 8 bits pour le numéro de tête, et 6 bits
pour le numéro de secteur. Cela limite les utilisateurs de
cette interface (i.e. les gestionnaires de démarrage implémentés
sur le MBR du disque ainsi que les chargeurs de systèmes
d'exploitation implémentés sur les secteurs de démarrage) à:1024 cylindres au plus,256 têtes au plus,64 secteurs/piste au plus, (en fait 63, 0 n'est pas
disponible).Or les diques durs de grande capacité ont beaucoup de
cylindres et peu de têtes, le nombre de cylindres de ces disques
est donc invariablement supérieurs à 1024. De ce fait et à cause
de l'interface BIOS telle qu'elle est, vous ne pouvez pas démarrer
n'importe où sur votre disque dur. Le code de démarrage (le
gestionnaire de démarrage et le chargeur du système d'exploitation
implémenté sur les secteurs de démarrage de chaque partition
démarrable) doivent se situer avant le 1024ème cylindre. Si votre
disque dur est standard et a 16 têtes, cela équivaut à:
1024 cylindres/disque X 16 têtes/disque X 63 secteurs/piste X 512 octets
c'est-à-dire la limite souvent citée de 528 Mo.C'est là qu'intervient le LBA (Logical Block
Adressing - “adressage de bloc
logique”) du BIOS. Le LBA du BIOS donne à l'utilisateur
des routines de l'API (Application Programming
Interface - “interface de
programmation”) du BIOS, la possibilité d'accéder aux
cylindres au-delà de 1024 avec les interfaces du BIOS en
redéfinissant le cylindre. Cela signifie qu'il construit une
nouvelle géométrie de vos cylindres et têtes, faisant croire
au BIOS que votre disque a moins de cylindres et plus de têtes
qu'en réalité. En d'autres termes, il profite du fait que les
disques ont relativement peu de têtes et beaucoup de cylindres,
pour modifier le rapport entre nombre de cylindres et nombre de
têtes de façon à ce que tous deux soient inférieurs aux limites
mentionnées ci-dessus (1024 cylindres, 256 têtes).Pour prendre de nouveau l'exemple de mon Western Digital 1,6
Go, il a pour géométrie physique:
(3148 cylindres, 16 têtes, 63 secteurs/piste, 512 octets/secteur)
Alors que le LBA du BIOS la redéfinit comme suit:
( 787 cylindres, 64 têtes, 63 secteurs/piste, 512 octets/secteur)
ce qui correspond à la même capacité physique, mais avec des
nombres de cylindres et de têtes dans les limites acceptables par
les API du BIOS. (Au passage, j'ai sur l'un de mes disques, et
Linux et FreeBSD au-delà du 1024ème cylindre, et les deux démarrent
sans problème, grâce au LBA du BIOS.)Gestionnaires de démarrage et allocation de l'espace
disqueUne autre chose à laquelle il faut faire attention lorsque vous
installez un gestionnaire de démarrage est l'allocation d'espace
disque pour ce gestionnaire. Il vaut mieux être informé de cette
question avant de commencer pour vous éviter d'avoir à réinstaller un
ou plusieurs de vos systèmes d'exploitation.Si vous avez suivi ce qui a été dit sur le
processus de démarrage
à propos du secteur principal de démarrage (où se trouve le MBR),
des secteurs de démarrage des partitions et du processus de démarrage,
vous vous êtes peut-être demandé où va se trouver ce foutu
gestionnaire de démarrage. Bien, certains gestionnaires de démarrage
sont suffisament légers pour tenir entièrement dans le secteur
principal de démarrage (cylindre 0, tête 0, secteur 1) avec la table
de partitions. D'autres ont besoin d'un peu plus d'espace et débordent
en fait de quelques secteurs après le secteur principal de démarrage
sur la piste cylindre 0 tête 0, qui sont normalement libres...
normalement.Là est le hic... Certains systèmes d'exploitation (y compris
FreeBSD) vous permettent de faire débuter vos partitions juste après
le secteur principal de démarrage au cylindre 0, tête 0, secteur 2,
si vous le voulez. En fait, si vous donnez au programme
sysinstall
de FreeBSD, un disque dont le début est vierge ou un disque totalement
vide, c'est là qu'il fera commencer par défaut la partition FreeBSD
(c'est tout du moins ce qu'il a fait quand je suis tombé dans ce
piège). Quand vous installez ensuite le gestionnaire de démarrage, si
c'est l'un de ceux qui occupent quelques secteurs supplémentaires
après le MBR, il écrase les données qui se trouvent au début de la
première partie. Dans le cas de FreeBSD, cela écrase le label du
disque et empêche de démarrer votre partition FreeBSD.Le moyen facile d'éviter ce problème (et de vous garder le
possibilité d'essayer différents gestionnaires de démarrage par la
suite) est de ne pas allouer la première piste du disque quand vous le
partitionnez. Cela réserve l'espace entre le cylindre 0, tête 0,
secteur 2 et le cylindre 0, tête 0, secteur 63, et votre partition
commence au cylindre 1, tête 1, secteur 1. Pour ce que cela vaut,
quand vous créez une partition DOS au début de votre disque, DOS
laisse par défaut cet espace inoccupé (c'est pourquoi certains
gestionnaires de démarrage font l'hypothèse qu'il est disponible).
Mettre une partition DOS au début de votre disque vous permet aussi
d'éviter le problème. C'est ce que je préfère personnellement faire,
mettre une partition DOS de 1 Mo au début, parce que cela évite
aussi que la lettre désignant mon disque DOS primaire soit modifiée
ensuite quand je repartitionne.Pour servir de référence, les gestionnaires de démarrage
suivants n'utilisent que le secteur principal de démarrage pour
mettre leur code et leurs données:OS-BS 1.35,Boot Easy,LILO.Ces gestionnaires de démarrage occupent quelques secteurs
supplémentaires après le secteur principal de démarrage:OS-BS 2.0 Béta 8 (secteurs 2-5),gestionnaire de démarrage d'OS/2.Que faire si votre système ne démarre pas?Il se peut qu'à un moment donné
de l'installation d'un gestionnaire
de démarrage, vous laissiez le MBR dans un état tel que votre machine
ne redémarre plus. C'est peu probable, mais possible lorsque vous
refaites un FDISK alors qu'il y a déjà un gestionnaire de démarrage
installé.Si vous avez une partition DOS démarrable, vous pouvez démarrer
avec une disquette de démarrage DOS, et lancer:A:\>FDISK /MBRpour réinstaller le code d'origine de démarrage simple du DOS
seul sur le système. Vous pouvez alors démarrer DOS (et DOS
uniquement) depuis le disque dur. Une autre solution consiste à
réexécuter le programme d'installation de votre gestionnaire de
démarrage à partir d'une disquette démarrable.
diff --git a/fr_FR.ISO8859-1/articles/new-users/article.sgml b/fr_FR.ISO8859-1/articles/new-users/article.sgml
index 1f69bda228..3f9d12ab90 100755
--- a/fr_FR.ISO8859-1/articles/new-users/article.sgml
+++ b/fr_FR.ISO8859-1/articles/new-users/article.sgml
@@ -1,827 +1,827 @@
%man;
%urls;
%abstract;
%artheader;
%translators;
%authors;
- %mailing-lists;
+ %mailing-lists;
]>
Pour les Nouveaux Venus à FreeBSD et UnixAnneliseAndersonandrsn@hoover.stanford.edu15 Août 1997
&artheader.copyright;
Félicitations pour avoir installé FreeBSD! Cette
introduction concerne les nouveaux venus à la fois à FreeBSD
et à Unix - elle commence donc par les bases. Elle
suppose que vous utilisiez la version 2.0.5 ou une version ultérieure de
FreeBSD telle que distribuée par Walnut Creek ou FreeBSD.ORG, que votre
système n'a (jusqu'à présent) qu'un seul utilisateur (vous) - et que vous
êtes probablement à l'aise avec DOS/Windows ou OS/2.
&abstract.license;
&abstract.disclaimer;
&trans.a.haby;
Initialiser et Terminer une Session UtilisateurOuvrez une session (quand vous obtenez à l'écran l'invite login:) avec le compte utilisateur que vous avez
défini à l'installation ou sous le compte super-utilisateur
root. (FreeBSD a déjà créé le compte root lors de
l'installation; root peut accéder à tous les répertoires et tout faire, y
compris effacer des fichiers essentiels, donc soyez prudents!). Les symboles %
et # dans les exemples sont l'invite du système (la votre peut être différente),
où % correspond à un utilisateur normal et # distingue le compte root.Pour terminer la session (vous obtiendrez à nouveau l'invite
login:), tapez:
# exit
autant de fois que nécessaire. Bien sûr, n'oubliez pas la touche
Entrée à la fin des commandes, et rappelez-vous qu'Unix
fait la distinction entre les majuscules et les
minuscules - exit, mais pas
EXIT.Pour arrêtez l'ordinateur, tapez:
# /sbin/shutdown -h now
Ou, pour le redémarrer, tapez:
# /sbin/shutdown -r now
ou:
# /sbin/rebootVous pouvez aussi redémarrer avec:
CtrlAltDelete.
Laissez au système un peu de temps pour faire son travail. Cette séquence est,
dans les plus récentes versions de FreeBSD, l'équivalent de la commande
/sbin/reboot, et il est nettement préférable de l'employer
que d'utiliser l'interrupteur de réinitialisation de votre machine. A moins que
vous ne vouliez tout réinstaller ?Créer un Nouveau Compte Utilisateur avec les Mêmes Droits que RootSi vous n'avez pas créé de compte utilisateur au moment de l'installation,
et utilisez donc le compte root, vous devriez maintenant définir un nouvel
utilisateur avec:
# adduser
La première fois que vous utiliserez adduser, le programme vous demandera
peut-être de lui indiquer des options par défaut qu'il sauvegardera. Par
exemple, vous préférez peut-être que l'interpréteur de commandes soit csh, s'il
vous propose l'interpréteur sh. Sinon, tapez simplement Entrée pour conserver
les valeurs par défaut. Celles-ci sont enregistrées dans le fichier
/etc/adduser.conf, que vous pouvez éditer.
Supposons que vous ayez créé l'utilisateur jacques dont
le nom est Jacques Dupont. Attribuez un mot de passe
à jacques si la sécurité (pourquoi pas, même des enfants pourraient pianoter
sur le clavier) vous préoccupe. Quand le programme vous demande si vous
voulez que jacques appartienne à d'autres groupes, répondez:
Login group is ``jacques''. Invite jacques into other groups: wheel
Vous pourrez alors ouvrir une session avec le compte
jacques puis utiliser la commande
su pour devenir root. Vous n'aurez dorénavant
plus besoin d'ouvrir immédiatement une session avec le compte root.Vous pouvez quitter adduser à tout moment en tapant
CtrlC, et
pour finir vous pourrez valider le nouveau compte utilisateur ou simplement
taper n pour non. Peut-être voudrez vous créer un second
compte utilisateur (jeanne?), vous aurez ainsi une issue de secours si vous
modifiez les fichiers de configuration de jacques et que quelque chose tourne
mal.Une fois que vous avez fini, utilisez exit
pour revenir à l'invite login:
et ouvrez une session sous le compte jacques. Il est
toujours préférable de travailler autant que possible avec un compte utilisateur
ordinaire qui n'a pas autant de droits - et donc ne présente pas autant de
risques - que root.Si vous avez déjà créé un compte et que vous voulez que cet utilisateur
puisse utiliser su pour devenir root, vous pouvez devenir
root et éditer le fichier /etc/group, pour y ajouter
jacques à la première ligne (le groupe wheel). Familiarisez-vous d'abord avec
l'éditeur de texte vi - ou utilisez l'éditeur plus
simple ee, présent sur les versions les plus récentes
de FreeBSD.Tour d'HorizonSous une session utilisateur ordinaire, faites un tour d'horizon et
essayez quelques commandes qui vous fourniront des informations et de l'aide
quand vous utiliserez FreeBSD.Voici quelques commandes et ce qu'elles font :
idVous dit qui vous êtes!pwdVous dit où vous êtes - le répertoire de travail
courant.lsDonne la liste des fichiers du répertoire courant.ls
-F
Donne la liste des fichiers du répertoire courant suivis d'une
* pour les exécutables, d'un / pour
les répertoires, et d'une @ pour les liens
symboliques.ls
-l
Donne la liste détaillée des fichiers du répertoire courant - taille,
date, autorisations.ls
-a
Liste tous les fichiers, y compris les fichiers “.”
cachés. Si vous êtes root, les fichiers “.” sont visibles
sans l'option
-a
.cdChange de répertoire courant. cd
.. remonte d'un niveau dans l'arborescence;
notez l'espace après cd. cd
/usr/local va dans ce répertoire. cd
~ va dans le répertoire de
l'utilisateur courant - e.g., /usr/home/jacques.
Essayez cd /cdrom, puis
ls, pour voir si votre CDROM est monté et fonctionne.view nom_de fichierVous permet de visualiser le fichier
nom_de_fichier sans le modifier. Essayez
view /etc/fstab.
:q pour quitter.cat nom_de_fichierListe nom_de_fichier à l'écran. S'il
est trop long et que vous n'en voyez que la fin, appuyez sur
Arrêt Défil et utilisez flèche-vers-le-haut
pour revenir en arrière; vous pouvez aussi utiliser Arrêt Défil
avec les pages de manuel. Appuyez à nouveau sur
Arrêt Défil pour
terminer votre lecture. Essayez cat sur quelques fichiers
“.” de votre répertoire utilisateur - cat
.cshrc, cat
.login, cat
.profile.
Notez les alias de quelques commandes ls
dans le fichier .cshrc (ils sont très pratiques).
Vous pouvez créer d'autres alias en éditant le fichier
.cshrc. Vous pouvez aussi les mettre à disposition
de tous les utilisateurs en les définissant dans le fichier de configuration
général /etc/csh.cshrc.Obtenir de l'Aide et de l'InformationVoici quelques moyens d'obtenir de l'aide.
Texte désigne quelque chose de votre choix
- normalement une commande ou un nom de fichier - que vous
tapez.apropos texteTout ce qui contient la chaîne texte
dans la base de données whatis.man texteLa page de manuel pour texte. C'est la
principale source de documentation des systèmes Unix. man
ls vous expliquera toutes les possibilités
d'utilisation de la commande ls. Utilisez
Entrée pour faire défiler le texte,
Ctrlb pour remonter
d'une page, Ctrlf pour
passer à la page suivante, et q ou
Ctrlc pour
quitter.which texteVous dit où se trouve la commande
texte
dans vos chemins d'accès.locate texteTous les répertoires où l'on trouve la chaîne
texte.whatis texteVous dit ce qu'est la commande texte
et où se trouve la page de manuel correspondante.whereis textCherche le fichier texte, et vous en donne
le chemin d'accès complet.Essayez la commande whatis sur quelques utilitaires
d'usage courant comme cat,
more, grep,
mv, find,
tar, chmod,
chown, date et
script. more vous permet de lire
une page à la fois comme sous DOS, e.g., ls -l |
more ou more
nom_de_fichier.
* sert de caractère de substitution - e.g., ls
w* vous donnera la liste de tous les fichiers commençant par
w.Certaines de ces commandes ne fonctionnent pas correctement?
locate et whatis
interrogent une base de données qui est reconstruite chaque semaine.
Si votre machine n'est pas en service le weekend (et sous FreeBSD), vous
devrez peut-être exécuter les commandes de maintenance quotidienne, hebdomadaire
et mensuelle de temps à autre. Faites-le sous le compte root et attendez qu'elles se terminent avant de lancer la suivante.
# /etc/dailysortie non mentionnée
# /etc/weeklysortie non mentionnée
# /etc/monthlysortie non mentionnéeSi vous êtes las d'attendre, appuyez sur
AltF2 pour obtenir une
nouvelle console virtuelle, et rouvrir une session.
Après tout, c'est un système multi-utilisateurs, multi-tâches. Ces
commandes afficheront probablement des messages à l'écran pendant
qu'elles s'exécutent; vous pouvez taper clear pour effacer
l'écran. Une fois qu'elles auront terminé, regardez le contenu des fichiers
/var/mail/root et
/var/log/messages.Utiliser de telles commandes est une des tâches d'administration
système - étant seul utilisateur d'un système Unix, vous êtes votre
propre administrateur système. Pratiquement tout ce que vous aurez à faire
sous le compte root sera l'administration de votre système. Ces tâches
sont souvent mal décrites dans les ouvrages volumineux sur Unix
qui passent plus de temps à détailler les menus des gestionnaires de fenêtres.
Procurez-vous l'un des deux ouvrages de référence sur l'administration système,
soit Evi Nemeth et.al.'s UNIX System
Administration Handbook (Prentice-Hall, 1995, ISBN
0-13-15051-7) - deuxième édition avec une couverture rouge; ou
Æleen Frisch's Essential System
Administration (O'Reilly & Associates, 1993, ISBN
0-937175-80-3)N.d.T.: traduit en français sous le titre
Les Bases de l'Administration Système, chez le même
éditeur.. J'ai personnellement utilisé Nemeth.Editer des Fichiers TextePour configurer votre système, vous devez éditer des fichiers texte. Ils
sont presque tous dans le répertoire /etc; vous devrez
utiliser la commande su pour devenir root pour les
modifier. Vous pouvez vous servir de l'éditeur simple ee,
mais à long terme, cela vaut la peine d'apprendre à utiliser
vi. Il y a une excellente introduction à vi dans
/usr/src/contrib/nvi/docs/tutorial si vous l'avez
installé. Sinon vous pouvez le télécharger par ftp sur
ftp://ftp.cdrom.com
dans le répertoire
FreeBSD/FreeBSD-current/src/contrib/nvi/tutorial.Avant d'éditer un fichier, faites-en une copie de sauvegarde. Supposons
que vous vouliez modifier le fichier /etc/rc.conf. Avec
la commande cd /etc vous allez dans le répertoire
/etc, puis tapez:
# cp rc.conf rc.conf.orig
pour recopier le fichier rc.conf dans
rc.conf.orig, de façon à pouvoir ensuite
recopier rc.conf.orig dans rc.conf pour revenir à la version originale. Il serait
encore mieux de le déplacer (renommer) puis de faire la copie en sens inverse:
# mv rc.conf rc.conf.orig
# cp rc.conf.orig rc.conf
parce que la commande mv conserve la date et le nom du
propriétaire d'origine du fichier. Vous pouvez maintenant éditer le fichier
rc.conf. Si vous voulez revenir à la version d'origine,
utilisez alors mv rc.conf rc.conf.myedit
(en supposant que vous vouliez conserver la version que vous avez modifiée)
puis:
# mv rc.conf.orig rc.conf
pour remettre l'original à sa place.Pour éditer un fichier, tapez:
# vi nom_de_fichier
déplacez vous dans le fichier avec les touches flèches. Echap (la touche d'échappement) met vi en mode commande. Voici
quelques-unes de ces commandes:
xefface le caractère sur lequel se trouve le curseur.ddefface toute la ligne (même si elle dépasse la largeur de l'écran et
s'affiche sur plus d'une ligne).ipermet d'insérer du texte devant la position du curseur.apermet d'insérer du texte après la position du curseur.
Après avoir tapé i ou a,
vous pouvez insérer du texte. Echap vous ramène en mode
commande. Vous pouvez alors taper:
:wpour enregistrer le fichier modifié sur disque et continuer à
l'éditer,:wqpour enregistrer le fichier modifié sur disque et quitter
l'éditeur,:q!pour quitter l'éditeur sans enregistrer vos modifications,/texterecherche la prochaine occurence de texte et
y positionne le curseur; /Entrée (la touche
Entrée) recherche ensuite la prochaine occurrence de texte,Gva à la fin du fichier,nGva à la nième ligne du fichier,Ctrl>L>rafraîchit l'affichage,Ctrl>b>> et Ctrl>f>>remonte ou descend d'une page, de la même façon qu'avec les utilitaires
more> et view>.Entraînez-vous à utiliser vi> dans votre répertoire utilisateur
en créant un nouveau fichier avec vi
nom_de_fichier>> puis ajoutez-y et effacez du texte,
enregistrez le ficher et rééditez-le. vi> peut vous réserver
des surprises parce qu'il est assez complexe, et il vous arrivera de taper
accidentellement des commandes au résultat inattendu. (Certains aiment
vraiment vi> - il est bien plus puissant qu'EDIT
de DOS - voyez par exemple la commande :r> command.) Utilisez
Echap> une ou plusieurs fois pour être sûr que vous êtes en mode
commande quand vous êtes dans l'embarras, enregistrez régulièrement vos
modifications avec la commande :w>, et utilisez la commande
:q!> pour sortir et rééditer la dernière version enregistrée
avec :w> au besoin.Vous pouvez maintenant cd> vers /etc,
su> pour devenir root, utiliser vi> pour éditer le
fichier /etc/group, et ajouter un utilisateur au groupe
wheel pour qu'il ait les mêmes droits que root. Ajoutez juste une virgule puis
le nom de l'utilisateur à la fin de la première ligne, appuyez sur
Echap>, et utilisez la commande :wq> pour enregistrer
le fichier et quitter l'éditeur. La modification est aussitôt prise en compte
par le système. (vous n'avez pas mis de blanc après la virgule,
n'est-ce-pas?)Imprimer des fichiers DOSA ce stade, vous n'avez probablement pas encore configuré FreeBSD
pour pouvoir utiliser votre imprimante. Voici donc une méthode pour
créer un fichier à partir d'une page de manuel, l'enregistrer sur disquette
et l'imprimer sous DOS. Si par exemple, vous voulez lire dans le détail
ce qui concerne la modification des droits d'accès aux fichiers (c'est assez
important), la commande man chmod vous affiche la page de manuel. La commande:
# man chmod > chmod.txt>
recopie la page de manuel dans le fichier chmod.txt au lieu
de l'afficher à l'écran. Mettez maintenant une disquette formatée DOS dans le
lecteur de disquettes A:, su> pour devenir root, et tapez:
# /sbin/mount -t msdos /dev/fd0 /mnt>
pour monter le lecteur de disquettes dans le répertoire
/mnt.Ensuite (plus besoin d'être root, vous pouvez utiliser
exit> pour redevenir l'utilisateur jacques), vous pouvez aller
dans le répertoire où vous avez créé le fichier chmod.txt et le recopier
sur la disquette avec la commande:
% cp chmod.txt /mnt>
puis utiliser ls /mnt pour lister le contenu du répertoire
/mnt, où devrait figurer le fichier
chmod.txt.En particulier, il vous sera utile de créer un fichier à partir du
résultat de la commande
/sbin/dmesg en tapant:
% /sbin/dmesg > dmesg.txt>
et en copiant dmesg.txt sur la disquette.
/sbin/dmesg liste les informations affichées au démarrage
du système, qu'il est utile de comprendre, parce qu'elles décrivent la
configuration matérielle reconnue par FreeBSD au démarrage.
Si vous posez des questions sur freebsd-questions@FreeBSD.ORG> ou
dans un forum USENET - du type “FreeBSD ne reconnaît pas mon
lecteur de bande, que faire ? ” - on vous demandera ce qu'indique
dmesg> sur votre système.Vous pouvez maintenant démonter le lecteur de disquette (sous le compte
root) pour retirer la disquette avec la commande:
# /sbin/umount /mnt>
et redémarrer la machine pour passer sous DOS. Copiez ces fichiers dans un
répertoire DOS, éditez-les avec DOS EDIT, Windows Notepad, ou un traitement
de texte, faites une petite modification pour avoir à les enregistrer et
imprimez-les comme d'habitude sous DOS ou Windows. J'espère que cela marche!
Les pages de manuel s'impriment mieux avec la commande print
du DOS. (Copier des fichiers de FreeBSD vers une partition DOS montée est
dans certains cas encore un peu risqué).Pour pouvoir imprimer depuis FreeBSD, il faut définir l'imprimante dans
le fichier /etc/printcap et créer le répertoire tampon
correspondant dans /var/spool/output. Si votre imprimante
est sur le port lpt0 (qui s'appelle LPT1 sous DOS),
il suffit d'aller dans le répertoire /var/spool/output et
(sous le compte root) de créer le répertoire lpd>, s'il n'existe
pas, en tapant:
# mkdir lpd>
L'imprimante devrait alors répondre si elle était sous tension au démarrage du
système et les commandes lp ou lpr devraient envoyer un fichier à
l'imprimante. Que le fichier s'imprime ou non dépend de la
configuration de l'imprimante, qui est décrite dans le
manuel FreeBSD.>D'autres Commandes Utilesdf>liste les systèmes de fichiers montés, leur taille et leur utilisation.ps aux>liste les processus actifs. ps ax> en est une forme abregée.rm nom_de_fichier>>efface le fichier nom_de_fichier.>rm -R répertoire>>efface le répertoire répertoire> et tous ses
sous-répertoires - attention!ls -Rliste les fichiers du répertoire courant et de tous ses sous-répertoires;
j'en utilisais une variante, ls -AFR > where.txt,
pour avoir la liste de tous les fichiers du répertoire racine
/ et (indépendamment) du répertoire
/usr avant de trouver un meilleur moyen pour rechercher
des fichiers.passwd>pour changer le mot de passe d'un utilisateur
(ou le mot de passe root).man hier>pages de manuel du système de fichier Unix.Avec le commande find> vous pouvez localiser le fichier
nom_de_fichier dans /usr ou un
de ses sous-répertoires:
% find /usr -name "nom_de_fichier>">
Vous pouvez employer * comme caractère de substitution dans
"nom_de_fichier>"> (qui doit être entre guillemets).
Si vous demandez à find d'effectuer la recherche dans /
au lieu de /usr, il va parcourir tous les systèmes de
fichiers montés, y compris le CDROM et la partition DOS.Voici un excellent livre qui détaille les commandes et les utilitaires
du système Unix:
Abrahams & Larson, Unix for the Impatient
(2nd ed., Addison-Wesley, 1996). Vous trouverez aussi beaucoup d'informations
sur Unix sur l'Internet. Essayez l'
Unix Reference
Desk.Etapes SuivantesVous avez maintenant les outils nécessaires à l'exploration du système et
à l'édition de fichiers. Il y a énormement d'informations dans le
manuel FreeBSD
(que vous avez probablement aussi sur votre disque
dur) et sur le
site Internet de FreeBSD. Il y a un grand nombre de logiciels sur le
CDROM de Walnut Creek et sur leur
site Internet. Le "manuel" vous explique comment les utiliser
(installer le logiciel s'il existe, avec pkg_add
/cdrom/packages/All/nom_du_logiciel>>,
où nom_du_logiciel est le nom du fichier
correspondant au logiciel voulu). Le CDROM donne la liste des logiciels
pré-compilés ou non N.d.T: Les logiciels prévus pour être utilisés avec FreeBSD peuvent être pré-compilés (“packages”) ou
disponibles sous forme de code source (“ports”) livré avec
les procédures nécessaires à sa compilation. avec une
courte description de
chacun dans /cdrom/packages/index,
/cdrom/packages/index.txt et
/cdrom/ports/index. Il y a des descriptifs plus détaillés
dans /cdrom/ports/*/*/pkg/DESCR, où les
*s désignent respectivement les sous-répertoires regroupant
les logiciels par catégories et les noms des logiciels.Si vous trouvez le "manuel" trop subtil (avec ses commandes
lndir> et ainsi de suite) en ce qui concerne l'installation des
logiciel à compiler, voici une méthode qui fonctionne habituellement:Trouvez le logiciel que vous voulez, par exemple kermit>. Il
y aura un sous-répertoire correspondant sur le CDROM. Copiez ce sous-répertoire
dans /usr/local (là où l'on met généralement les logiciels
que l'on installe pour les mettre à la disposition de tous les utilisateurs)
avec:
# cp -R /cdrom/ports/comm/kermit /usr/local>
Ceci crée normalement un sous-répertoire /usr/local/kermit
qui contient tous les fichiers du sous-répertoire
kermit du CDROM.Recherchez ensuite dans le répertoire
/cdrom/ports/distfiles un fichier dont le nom
indique que c'est le logiciel que vous voulez installer. Copiez ce fichier dans
/usr/ports/distfiles; avec les versions récentes,
vous pouvez sauter cette étape, FreeBSD s'en chargera.
Dans le cas de kermit>, il n'y a aucun fichier associé dans
/cdrom/ports/distfiles.Puis cd> dans le sous-répertoire de
/usr/local/kermit qui contient le fichier
Makefile>. Tapez:
# make all install>Pendant l'installation, le système ira chercher par ftp les
fichiers compressés qu'il ne trouve pas dans
/usr/ports/distfiles. Si vous n'êtes pas
encore connecté à l'Internet et que le fichier correspondant au
logiciel n'existe pas dans
/cdrom/ports/distfiles, vous devrez récupérer
ce fichier sur une autre machine et le copier dans
/usr/ports/distfiles depuis une disquette ou
votre partition Dos. Lisez Makefile> (Avec cat>,
more> ou view>) pour trouver sur quel site (le
"master distribution site" - site de distribution d'origine) aller pour
récupérer le fichier et pour connaître
son nom. Ce nom sera tronqué si vous téléchargez le fichier sous DOS, et
vous devrez redonner au fichier son nom d'origine après l'avoir recopié
dans /usr/ports/distfiles
(avec la commande mv>) pour que FreeBSD le trouve.
(Utilisez le transfert de fichier en mode binaire!) Revenez ensuite dans
/usr/local/kermit, trouvez le sous-répertoire où est
Makefile>, et tapez make all install>.Il peut aussi arriver quand vous installez des logiciels pré-compilés ou
non qu'un autre logiciel soit nécessaire. Si l'installation s'interrompt avec
un message du style can't find unzip, vous devez d'abord
installer le logiciel unzip avant de continuer.Un fois le logiciel installé, tapez rehash> pour que FreeBSD
relise la liste des fichiers dans les chemins d'accès par défaut, de façon
à ce qu'il sache ce qui s'y trouve. (Si vous obtenez de nombreux messages
d'erreur path not found> avec les commandes
whereis> ou which, ajoutez les répertoires
nécessaires à la liste des chemins d'accès par défaut définis dans le
fichier .cshrc de votre répertoire utilisateur. L'instruction
path d'Unix fonctionne de la même façon que sous DOS, à ceci près que, pour des
raisons de sécurité, le répertoire courant n'y est pas défini (par défaut); si
le programme que vous cherchez se trouve dans le répertoire courant, vous devrez
faire précéder le nom du programme de ./ pour l'exécuter
(pas d'espace après le “/”.) Vous voudrez peut-être installer la version la plus récente de Netscape
depuis leur site ftp. (Netscape
a besoin du gestionnaire graphique X Window.) Il vous faut la version
“unknown bsd”. Appliquez au fichier téléchargé les commandes
gunzip nom_de_fichier>> puis tar xvf
nom_de_fichier>>, recopiez l'exécutable dans
/usr/local/bin ou dans tout autre répertoire où vous mettez les programmes, rehash>, et ajoutez les lignes suivantes aux fichiers
.cshrc dans les répertoires de tous les
utilisateurs ou (plus simplement) au fichier
/etc/csh.cshrc de démarrage de l'interpréteur de commandes
csh applicable à tous les utilisateurs:
setenv XKEYSYMDB /usr/X11R6/lib/X11/XKeysymDB
setenv XNLSPATH /usr/X11R6/lib/X11/nls>
Ce qui présuppose que les fichiers XKeysymDB> et le répertoire
nls> existent dans /usr/X11R6/lib/X11; s'ils
n'y sont pas, trouvez-les et recopiez-les dans ce répertoire.Si vous aviez auparavant installé Netscape depuis le CDROM (ou par
ftp), ne remplacez pas /usr/local/bin/netscape par
le nouveau binaire; ce fichier n'est qu'une procédure qui positionne des
variables d'environnement. Au lieu de cela, renommez le nouveau fichier
binaire en netscape.bin et installez-le à la place
de l'ancien, qui s'appelle /usr/local/lib/netscape/netscape.bin.Votre Environnement de TravailVotre interpréteur de commandes est la composante la plus importante de
votre environnement de travail. C'est l'équivalent de COMMAND.COM sous DOS.
C'est lui qui analyse les commandes que vous tapez au clavier et communique
avec le reste du système d'exploitation. Vous pouvez aussi écrire des
procédures, qui sont l'équivalent des fichiers .BAT de DOS.Deux interpréteurs de commandes sont pré-installés par FreeBSD : csh et
sh. csh est utile pour le travail en ligne de commande, mais vous devriez mieux
écrire vos procédures pour sh (ou bash). echo $SHELL vous
retourne le nom de l'interpréteur que vous utilisez actuellement.L'interpréteur csh est commode, mais tcsh fait tout ce que fait csh et
plus encore. Il vous permet de rappeler des commandes avec les touches flèches
et de les éditer. Il sait compléter les noms de fichiers avec la touche Tab (csh
utilise la touche Echap) et il vous permet de revenir dans le répertoire où vous
étiez auparavant avec cd -. Il est aussi plus facile de
modifier l'invite du système avec tcsh. Il vous rend la vie beaucoup plus
facile.Voici les trois étapes pour installer un nouvel interpréteur de
commandes:Installez l'interpréteur, pré-compilé ou non, comme vous le feriez pour
n'importe quel autre logiciel. Utilisez rehash puis
which tcsh (en supposant que vous installiez tcsh) pour vous
assurer qu'il est bien installé.Sous le compte root, éditez le fichier /etc/shells,
ajoutez-y une ligne pour le nouvel interpréteur, dans notre cas
/usr/local/bin/tcsh, et enregistrez votre modification. (certaines procédures
d'installation font cela pour vous.)Utilisez chsh pour changer de façon permanente
d'interpréteur de commandes, ou tapez tcsh sous l'invite
du système pour changer d'interpréteur sans ouvrir de nouvelle session.Note: Il peut être dangereux de changer l'interpréteur de commandes du
compte root en autre chose que sh ou csh avec les premières versions de FreeBSD
et de nombreuses autres versions d'Unix; vous pourriez ne plus avoir
d'interpréteur de commandes quand le système passe en mode mono-utilisateur.
La solution est d'utiliser su -m pour devenir root et
disposer de tcsh, parce que l'interpréteur de commandes est partie intégrante
de l'environnement. Vous pouvez rendre ce fonctionnement définitif en ajoutant
un alias dans votre fichier .tchsrc:alias su su -mQuand tcsh démarre, il lit les fichiers
/etc/csh.cshrc et /etc/csh.login.
Il lit aussi le fichier .login de votre répertoire
utilisateur, ainsi que le fichier .cshrc, à moins que vous
n'ayez un fichier .tchsrc. Vous pouvez facilement en
créer un en copiant simplement .cshrc dans
.tcshrc.Maintenant que vous avez installé tcsh, vous pouvez modifier l'invite
du système. Vous trouverez plus de détails dans les pages de manuel de tcsh,
mais voici une ligne que vous pouvez mettre dans votre fichier
.tchsrc, qui vous dira combien de commandes vous avez
tapées, quelle heure il est, et dans quel répertoire vous vous
trouvez. Un > sera aussi
affiché si vous êtes un utilisateur ordinaire et un # si vous êtes root, mais
tcsh fait cela de toute façon:set prompt = "%h %t %~ %#"Mettez cette ligne à la place de la ligne "set prompt" s'il y en a déjà
une, ou après la ligne "if($?prompt) then" sinon. Mettez l'ancienne ligne en
commentaire; vous pourrez toujours y revenir si vous le souhaitez. N'oubliez
pas les espaces et les guillemets. Vous pouvez forcer la relecture du fichier
.tchsrc en tapant source .tcshrc.Vous pouvez obtenir la liste des autres variables d'environnement qui ont
été positionnées avec la commande env. Le résultat vous
indiquera entre autres quels sont votre éditeur et votre gestionnaire de page
affichée par défaut, et quel type de terminal vous utilisez. Une
commande utile si vous vous connectez à distance et ne pouvez exécuter un
programme parce que le terminal n'est pas adapté est
setenv TERM vt100.AutresEn tant que root, vous pouvez démonter le CDROM avec /sbin/umount
/cdrom>, le sortir du lecteur, en mettre un autre, et monter ce dernier avec
/sbin/mount_cd9660 /dev/cd0a /cdrom> en supposant que
cd0a> est le nom du périphérique associé à votre lecteur de
CDROMs.Le système de fichier actif - le deuxième CDROM de la
distribution de FreeBSD - est utile si vous manquez d'espace disque.
Vous pouvez essayez d'utiliser emacs> ou des jeux depuis le
cdrom. Vous devrez utiliser lndir>, qui est installé en même temps
que le gestionnaire graphique X Window, pour dire au(x) programme(s)
où trouver les fichiers dont il a besoin, parce qu'ils se trouvent dans le
système de fichiers /cdrom et non dans
/usr et ses sous-répertoires, où ils devraient
normalement être. Lisez man lndir>.Vous pouvez supprimer un utilisateur (par example, jacques) en utilisant
la commande vipw> pour éditer le fichier master.passwd
(n'utilisez pas vi> directement sur le fichier
master.passwd); effacez la ligne pour jacques et sauvez le
fichier. Editez ensuite /etc/group et supprimez toutes
les occurences de jacques.
Enfin, allez dans /usr/home et utilisez
rm -R jacques (pour effacer les fichiers et sous-répertoires
du répertoire utilisateur de jacques).Vos Commentaires sont la BienvenueSi vous utilisez ce guide, je suis interessée de savoir où il ne vous est
pas suffisament clair et ce que vous trouvez qu'il y manque, et aussi s'il vous
a été utile. N.d.T.: en anglais !
Mes remerciements à Eugene W. Stark, professeur d'informatique
à SUNY-Stony Brook, et à John Fieber pour ses commentaires pertinents.Annelise Anderson, andrsn@hoover.stanford.edu>
diff --git a/fr_FR.ISO8859-1/articles/ntfs/article.sgml b/fr_FR.ISO8859-1/articles/ntfs/article.sgml
index 0b3fd9f85c..1304ea67e3 100644
--- a/fr_FR.ISO8859-1/articles/ntfs/article.sgml
+++ b/fr_FR.ISO8859-1/articles/ntfs/article.sgml
@@ -1,490 +1,490 @@
%man;
%urls;
%abstract;
%artheader;
%translators;
%authors;
- %mailing-lists;
+ %mailing-lists;
]>
Installer le pilote NTFS pour FreeBSD
&artheader.copyright;
&abstract.license;
&abstract.disclaimer;
&trans.a.laurand;
Installer le pilote NTFS pour FreeBSD 3.xPour installer ce pilote, vous aurez besoin de recompiler un noyau car
les fichiers d'en-tête utilisés seront mis à niveau.
Pour autant, aucun changement dans le fichier de configuration ne sera
nécessaire. Si vous n'avez pas installé les sources du
noyau, vous pouvez soit recourir à sysinstall,
ou bien entrer successivement en tant que
root :&prompt.root mount -t cd9660 /dev/cd0c /mnt
&prompt.root cd /mnt/src
&prompt.root cat ssys.?? | tar --unlink -zxpvf - -C /usr/srcLe pilote requiert également le fichier
mntopt.h de l'archive source. Pour
extraire son contenu :&prompt.root cd /mnt/src
&prompt.root cat ssbin.?? | tar --unlink -zxpvf - -C /usr/src sbin/mountEnsuite, en tant que root, créez un
répertoire pour y extraire le contenu de l'archive du pilote
ntfs :&prompt.root cd /tmp
&prompt.root mkdir ntfsTéléchargez le fichier d'archive compressé
contenant le code source du pilote ainsi que son fichier de mise à
niveau - patch - dans
/tmp/ntfs. Les deux fichiers dont vous avez besoin
sont ntfs-0.17beta.tgz et
ntfs.0.17beta-0.18beta.diff.Extrayez le contenu du fichier d'archive :&prompt.root cd /tmp/ntfs
&prompt.root tar xzvf ntfs-0.17beta.tgzIl se peut que le numéro de version (0.17beta) soit
différent.Ensuite, appliquez la mise à niveau de la version 0.17 à
la version 0.18.&prompt.root cd /tmp/ntfs/src/sys/ntfs
&prompt.root patch < /tmp/ntfs/ntfs.0.17beta-0.18beta.diffPrenez garde à ce qu'aucune partie ne fasse défaut.
patch1 génère des copies de
sauvegarde des fichiers qu'il met à jour (avec l'extension
.orig), par conséquent, si un problème
survient, recopiez les fichiers .orig, et
recherchez-en la cause.Recopiez maintenant les fichiers sources là où ils
doivent normalement être :&prompt.root cd /tmp/ntfs
&prompt.root cp -p -R -i src /usr/Il faut ensuite mettre à jour
vnode.h :&prompt.root cd /usr/src/sys/sys
&prompt.root patch < /tmp/ntfs/diff/vnode.h.diffEncore une fois, vérifiez que la mise à niveau s'est
bien passée, vous devriez avoir :
Hmm... Looks like a new-style context diff to me...
The text leading up to this was:
--------------------------
|*** ./sys/sys/vnode.h.orig Fri Jan 1 06:12:51 1999
|--- ./sys/sys/vnode.h Wed Dec 2 12:31:31 1998
--------------------------
Patching file vnode.h using Plan A...
Hunk #1 succeeded at 62.
done
Vous allez maintenant pouvoir maintenant compiler l'exécutable
mount_ntfs :&prompt.root cd /usr/src/sbin/mount_ntfs
&prompt.root make
&prompt.root make installainsi que le module du noyau :&prompt.root cd /usr/src/sys/modules/ntfs
&prompt.root make
&prompt.root make installPour finir, il faudra aussi recompiler le noyau (parce que
vnode.h a été modifié). Si vous
utilisez le noyau GENERIC, faites une copie
du fichier de configuration du noyau GENERIC (ce
n'est pas absolument nécessaire, mais de cette manière le
nom du noyau sera mis à jour, et il sera plus facile d'identifier
celui avec lequel vous démarrez). J'ai pour habitude d'utiliser
des noms assez représentatifs, aussi
GENERIC_NTFS me semble-t-il
approprié :&prompt.root cd /usr/src/sys/i386/conf
&prompt.root cp GENERIC GENERIC_NTFS
&prompt.root /usr/sbin/config GENERIC_NTFS
&prompt.root cd ../../compile/GENERIC_NTFS
&prompt.root make depend
&prompt.root make
&prompt.root make installOk, parfait, mais avant de redémarrer avec votre nouveau noyau,
il faut identifier la
tranche - slice - NTFS.
Le numéro de cette tranche va dépendre du format de votre
disque. Pour l'instant, si vous avez une tranche FAT suivie d'une tranche
NTFS et que votre tranche FreeBSD est la dernière, elles seront
numérotées (“da” ou
peut-être “sd” pour les disques SCSI,
si vous avez mis à jour votre système 2.2.x pour passer en
3.1, et ce sera “wd” si vous avez des
disques IDE) :
FAT - da0s1
NTFS - da0s2
FreeBSD - da0s3
Si votre tranche NTFS et votre tranche FreeBSD sont inversées
et que vous avez installé NT avant FreeBSD, ce qui est d'ailleurs la méthode recommandée, vos numéros de
tranches seront les mêmes, mais pas dans le même
ordre :
FAT - da0s1
FreeBSD - da0s3
NTFS - da0s2
Vous pouvez jeter un coup d'oeil au fichier
/etc/fstab pour être sûr du numéro
de la tranche de FreeBSD (et également de celui de la tranche
FAT).Il y a cependant une exception à tout cela, lorsque votre
tranche NTFS est une “partition logique” dans une
“partition étendue”. Les “partitions
logiques” sont toujours numérotées à partir de
5, peut importe le nombre de “partitions” sur le disque. Mon
disque, par exemple, est agencé comme ceci :
FAT - da0s1
FreeBSD - da0s3
Extended partition - da0s2
NTFS - da0s5
Notez qu'une “partition étendue;” se voit attribuer
une
tranche - “slice”,
mais celle-ci ne peut pas être utilisée en tant que telle,
c'est-à-dire que vous ne pouvez pas la monter.Après avoir identifié la tranche NTFS, vous pouvez
ajouter une entrée dans le fichier
/etc/fstab. Notez que l'option ro
signifie que le montage se fera en lecture seule (souvenez-vous que le
pilote est en lecture seule). Cette entrée provoquera le montage
automatique de la tranche NTFS lors du démarrage. Si vous voulez
désactiver cette dernière option, modifiez
ro en ro,noauto, sans aucun espace
ni avant ni après la virgule ! Vous aurez également
besoin d'un point de montage, /ntfs dans cet
exemple, ou si vous préferez, /mnt à
la place de /ntfs dans le fichier
/etc/fstab :
# Device Mountpoint FStype Options Dump Pass#
/dev/da0s5 /ntfs ntfs ro 0 0
Si vous préferez ne pas monter la “partition” au
démarrage, montez-la ensuite en tant que root
avec la commande :&prompt.root mount -t ntfs /dev/da0s5 /ntfsBien entendu, ajustez le fichier de pilote de
périphérique ainsi que le point de montage à votre
système.C'est fait ! Il ne reste plus qu'à
redémarrer.Bon courage ! Installation du pilote NTFS sous FreeBSD 2.2.XPour installer ce pilote, vous aurez besoin de recompiler un noyau car
les fichiers d'en-tête utilisés seront mis à niveau.
Pour autant, aucun changement dans le fichier de configuration ne sera
nécessaire. Si vous n'avez pas installé les sources du
noyau, vous pouvez soit recourir à sysinstall,
ou bien entrer successivement en tant que
root :&prompt.root mount -t cd9660 /dev/cd0c /mnt
&prompt.root cd /mnt/src
&prompt.root cat ssys.?? | tar --unlink -zxpvf - -C /usr/srcLe pilote requiert également les fichiers
mntopt.h de l'archive source. Pour extraire son
contenu, tapez :&prompt.root cd /mnt/src
&prompt.root cat ssbin.?? | tar --unlink -zxpvf - -C /usr/src sbin/mountEnsuite, en tant que root, créez un
répertoire pour extraire le contenu de l'archive du pilote
ntfs :&prompt.root cd /tmp
&prompt.root mkdir ntfsTéléchargez le fichier d'archive compressé
contenant le code source du pilote ainsi que son fichier de mise à
jour dans /tmp/ntfs.Extrayez le contenu de l'archive :&prompt.root cd /tmp/ntfs
&prompt.root tar xzvf ntfs-releng22-0.12beta.tgzIl se peut que le numéro de version (0.12beta) soit
différent.Recopiez maintenant les fichiers sources à l'endroit
adéquat :&prompt.root cd src
&prompt.root cp -p -r * /usr/srcEnsuite, vous devez mettre à niveau les 3 fichiers
d'en-tête du système. Utilisez l'option
Le nom du fichier résultat. Si vous n'utilisez pas cette
option, cc générera un
exécutable appelé
a.outLes raisons de cela se
sont perdues dans les brumes de
l'histoire..&prompt.user; cc foobar.cl'exécutable est a.out
&prompt.user; cc -o foobar foobar.cl'exécutable est foobar
-c
Uniquement compiler le fichier, ne pas faire l'édition de
liens. Utile pour des programmes d'essai, quand vous voulez
simplement vérifier la syntaxe, ou si vous vous servez d'un
Makefile.&prompt.user; cc -c foobar.cCela générera un fichier
objet (et non un exécutable) appelé
foobar.o. Il pourra être lié avec
d'autres fichiers objet pour constituer un exécutable.
-g
Crée une version débogable de l'exécutable
Le compilateur inclut alors dans l'exécutable des
informations de correspondance entre les numéros de ligne du
fichier source et les fonctions appelées. Un débogueur
peut alors utiliser ces informations pour vous afficher le code
source tandis que vous exécutez pas à pas le
programme, ce qui est très utile;
l'inconvénient est que toutes ces informations augmentent
considérablement la taille du programme. Normalement, vous
compilez avec
-g
quand vous développez le
programme, et compilez ensuite une “version de
livraison” quand vous êtes satisfait parce qu'il
fonctionne correctement.&prompt.user; cc -g foobar.cCela produira une version débogable du
programmeRemarquez que nous n'avons pas
utilisé l'indicateur
-o
pour préciser
le nom de l'exécutable, celui-ci s'appelera donc
a.out. Générer une version
débogable appelée foobar est
laissé à titre d'exercice aux soins du
lecteur!.
-O
Génère une version optimisée de
l'exécutable. Le compilateur effectue alors diverses
opérations bien pensées pour essayer de construire
un programme qui aille plus vite que normalement. Vous pouvez
faire suivre
-O
d'un nombre pour demander un
degré plus important d'optimisation, mais cela met souvent
en évidence des bogues dans l'optimiseur du compilateur.
Par exemple, on sait que la version de cc de
FreeBSD 2.1.0 produit du code incorrect avec l'option
-O2
dans certaines circonstances.On n'active en général l'optimisation
qu'à la compilation de la version de livraison.&prompt.user; cc -O -o foobar foobar.cCela construira une version optimisée de
foobar.Les trois indicateurs suivants demanderont à
cc de vérifier que votre code est conforme
à la norme internationale, souvent appelée norme
ANSI, bien que ce soit à proprement parler
une norme ISO.
-Wall
Active tous les messages d'avertissement que les auteurs du
compilateur cc ont jugés
intéressants. Malgré son nom
(“all” - tous),
cela n'active pas tous les messages d'avertissement dont le
compilateur est capable.
-ansi
Désactive la plupart, mais pas toutes, les
possibilités non-ANSI> C fournies par
cc. Malgré son nom, cela ne garantit pas
absolument que votre code soit conforme à la norme.
-pedantic
Désactive toutes les
possibilités non-ANSI> C de
cc.Sans ces indicateurs, cc vous permet d'utiliser
ses extensions non-standard de la norme. Quelques-unes sont très
utiles, mais ne se retrouveront pas sur d'autres
compilateurs - de fait, l'un des objectifs principaux de la
norme est de permettre l'écriture de code qui puissent être
réutilisé avec n'importe quel compilateur sur n'importe
quel système. C'est cela que l'on appelle du code
portable.En général, vous devriez vous efforcer de rendre votre
code aussi portable que possible, sans quoi vous risquez de devoir
réécrire entièrement votre programme par la suite
pour qu'il fonctionne ailleurs - et qui peut dire ce que vous
utiliserez dans quelques années?&prompt.user; cc -Wall -ansi -pedantic -o foobar foobar.cCela générera un exécutable
foobar après avoir vérifié que
foobar.c respecte la norme.
-lbibliothèque
Définit une bibliothèque de fonctions à
utiliser pour l'édition de liens.L'exemple le plus courant est la compilation d'un programme
qui utilise certaines des fonctions mathématiques de C. A
l'inverse de la plupart des autres plates-formes, ces fonctions
sont dans une bibliothèque différente de la
bibliothèque C standard et vous devez préciser au
compilateur qu'il doit l'utiliser.La règle est que si la bibliothèque s'appelle
libquelque_chose.a,
vous donnez à cc l'argument
-lquelque_chose
. Par
exemple, la bibliothèque mathématique s'appelle
libm.a, vous donnez donc à
cc l'argument
-lm
. Un
détail à connaître à propos de la
bibliothèque mathématique est que ce doit
généralement être la dernière sur
la ligne de commande.&prompt.user; cc -o foobar foobar.c -lmCela ajoutera à l'édition de liens de
foobar des fonctions de la
bibliothèque mathématique.Si vous compilez du code C++, vous devrez ajouter
-lg++
, ou
-lstdc++
si vous
utilisez la version 2.2 de FreeBSD ou une version
ultérieure, à la ligne de commande pour
éditer les liens avec les fonctions de la
bibliothèque C++. Au lieu de cela, vous pouvez utiliser la
commande c++ au lieu de cc,
qui fera la même chose à votre place. Sous FreeBSD,
c++ peut aussi être appellé avec
g++.&prompt.user; cc -o foobar foobar.cc -lg++Avec FreeBSD 2.1.6 et antérieurs
&prompt.user; cc -o foobar foobar.cc -lstdc++Avec FreeBSD 2.2 et ultérieurs
&prompt.user; c++ -o foobar foobar.ccChacun de ces exemples construira un exécutable
foobar à partir du fichier source C++
foobar.cc. Remarquez que, sur les
systèmes Unix, les fichiers sources C++ ont
traditionnellement l'extension .C,
.cxx ou .cc,
plutôt que l'extension .cpp
de sytle MS-DOS (qui est déjà
utilisée pour autre chose). gcc se
fiait autrefois à l'extension pour savoir quel type de
compilateur utiliser avec le fichier source, mais cette
restriction ne s'applique plus, vous pouvez donc appeler vos
fichiers C++ .cpp en toute
impunité!Questions et problèmes ccQ. J'essaie d'écrire un programme qui utilise la fonction
sin() et j'obtiens une erreur qui ressemble
à ce qui suit. Qu'est-ce que cela veut dire?
/var/tmp/cc0143941.o: Undefined symbol `_sin' referenced from text segmentR. Quand vous utilisez des fonctions mathématiques telles
que sin(), vous devez dire à
cc d'inclure la bibliothèque
mathématique à l'édition de liens, comme ceci:
&prompt.user; cc -o foobar foobar.c -lmQ. D'accord, j'ai écrit ce petit programme pour
m'entraîner à utiliser
-lm
. Il ne fait
que calculer 2.1 à la puissance 6:
#include <stdio.h>
int main() {
float f;
f = pow(2.1, 6);
printf("2.1 ^ 6 = %f\n", f);
return 0;
}
et l'ai compilé comme ceci:
&prompt.user; cc temp.c -lm
comme vous avez dit qu'il fallait le faire, mais voilà ce que
j'obtiens à l'exécution:
&prompt.user; ./a.out
2.1 ^ 6 = 1023.000000Ce n'est pas la bonne réponse! Que se
passe-t-il?R. Quand le compilateur voit que vous appelez une fonction, il
regarde s'il en a déjà vu un prototype. Si ce n'est pas
le cas, il suppose que la fonction retourne un
int - entier, ce
qui n'est évidemment pas ce que vous souhaitez dans ce
cas.Q. Comment alors régler ce problème?R. Les prototypes des fonctions mathématiques sont dans
math.h. Si vous incluez ce fichier, le
compilateur trouvera le prototype et cessera de vous fournir un
résultat bizarre!
#include <math.h>
#include <stdio.h>
int main() {
...
Après l'avoir recompilé de la même
façon qu'auparavant, exécutez-le:
&prompt.user; ./a.out
2.1 ^ 6 = 85.766121Si vous utilisez la moindre fonction mathématique, incluez
toujoursmath.h et n'oubliez
pas d'utiliser la bibliothèque mathématique à
l'édition de liens.Q. J'ai compilé un fichier appelé
foobar.c et je ne trouve pas d'exécutable
appelé foobar. Où est-il
passé?R. N'oubliez pas, cc appelera
l'exécutable a.out à moins que vous
ne lui disiez de faire autrement. Utilisez l'option
-o nom_de_fichier
:
&prompt.user; cc -o foobar foobar.cQ. OK, si j'ai un exécutable appelé
foobar, je le vois avec ls,
mais quand je tape foobar sur la ligne de commande,
il me dit que le fichier n'existe pas. Pourquoi ne le trouve-t-il
pas?R. A l'inverse de MS-DOS, Unix ne regarde
pas dans le répertoire courant quand il cherche le programme
que vous voulez exécuter, à moins que vous ne le lui
disiez. Soit tapez ./foobar, ce qui veut dire
“exécuter le fichier appelé
foobar du répertoire courant”, ou
modifiez votre variable d'environnement
PATH pour qu'elle ressemble
à:
bin:/usr/bin:/usr/local/bin:.
Le dernier point signifie “chercher dans le répertoire
courant si le fichier n'est pas dans les autres
répertoires”.Q. J'ai appelé mon exécutable
test, mais il ne se passe rien quand je le
lance. Pourquoi?R. Il y a un programme appelé test dans
/usr/bin sur la plupart des systèmes Unix
et c'est celui-là que trouve l'interpréteur de commandes
avant de regarder dans le répertoire courant. Soit tapez:
&prompt.user; ./test
ou choisissez un meilleur nom pour votre programme!Q. J'ai compilé et tout a commencé à
fonctionner correctement, puis il y a eu une erreur et il m'a dit
quelque chose à propos de core dumped.
Qu'est-ce que cela veut dire?A. L'expression core dump date des tous
premiers jours d'Unix, quand les machines utilisaient la
mémoire
centrale - “core memory”
pour stocker les informations. Essentiellement, si le programme
“plantait” dans certaines conditions, le système
enregistrait sur disque le contenu de la mémoire centrale
dans un fichier appelé core, que le
programmeur pouvait ensuite disséquer pour trouver
où les choses avaient mal tournées.Q. Fascinant, mais que suis-je censé faire
maintenant?A. Servez-vous de gdb pour analyser l'image
mémoire (Reportez-vous à la section
Déboguer).R. Quand mon programme a généré une image
mémoire, il a dit quelque chose à propose de
segmentation fault - “erreur
de segmentation”. Qu'est-ce que c'est?Q. Cela signifie essentiellement que votre programme a
essayé d'effectuer une quelconque opération
illégale sur la mémoire; Unix est conçu pour
protéger le système d'exploitation des programmes
mal éduqués.Les raisons les plus courantes en sont:
Essayer d'écrire en mémoire adressée par
un pointeur NULL, e.g.:
char *foo = NULL;
strcpy(foo, "bang!");
Utiliser un pointeur qui n'a pas été
initialisé, e.g.:
char *foo;
strcpy(foo, "bang!");
Le pointeur aura une valeur aléatoire qui, avec de la
chance, adressera une zone mémoire non accessible à
votre programme, de sorte que le noyau tuera ce dernier avant
qu'il ne provoque de dégat. Si vous manquez de chance,
il pointera quelque part à l'intérieur de votre
programme et endommagera l'une de vos structures de
données, provoquant un dysfonctionnement mystérieux
de votre programme.Tenter d'accéder au-delà du dernier
élément d'un tableau, e.g.:
int bar[20];
bar[27] = 6;
Essayer d'enregistrer quelque chose dans une zone de
mémoire accessible en lecture seule, e.g.:
char *foo = "Mon texte";
strcpy(foo, "bang!");
Les compilateurs Unix stockent souvent les chaînes de
caractères constantes comme "Mon texte"
en mémoire accessible en lecture seule.Utiliser incorrectement les fonctions
malloc() et free(),
e.g.:
char bar[80];
free(bar);
ou:
char *foo = malloc(27);
free(foo);
free(foo);
Commettre l'une de ces fautes ne provoquera pas toujours une erreur,
mais ce sont malgré tout des choses à ne pas faire.
Certains systèmes et compilateurs sont plus tolérants que
d'autres, ce qui fait que des programmes qui s'exécutent
correctement sur un système peuvent ne plus fonctionner sur un
autre.Q. Parfois, le programme provoque la génération d'une
image mémoire avec le message bus error.
Mon manuel Unix dit qu'il s'agit d'un erreur matériel, mais
l'ordinateur fonctionne apparemment correctement. Est-ce vrai?R. Fort heureusement, non (à moins bien sûr que vous
n'ayez aussi un problème matériel). C'est habituellement
une autre façon de dire que vous avez accédé
incorrectement à la mémoire.Q. Il me semble que cette histoire de core
dump peut être très utile, si je peux la
provoquer quand je veux. Est-ce possible, ou dois-je attendre qu'il se
produise une erreur?R. Oui, allez simplement sur une autre console ou fenêtre
xterm et tapez:
&prompt.user; ps pour
connaître l'IDentifiant de processus de votre programme, puis:
&prompt.user; kill -ABRT pid
où pid est
l'ID de processus que vous avez recherché.C'est par exemple utile si votre programme est parti dans une boucle
infinie. Au cas où votre programme piégerait les
interruptions SIGABRT, il y a plusieurs autres signaux
qui auront le même effet.MakeQu'est-ce que make?Lorsque vous travaillez sur un programme simple avec seulement un
ou deux fichiers de source, taper:
&prompt.user; cc fichier1.c fichier2.c
n'est pas trop gênant, mais cela devient rapidement très
fastidieux lorsqu'il y a plusieurs fichiers - et cela peut
aussi mettre du temps à compiler.Un façon d'éviter ces problèmes est
d'utiliser des fichiers objets et de ne
recompiler que les fichiers de source dont le contenu a changé.
Nous pourrions alors avoir quelque chose du style:
&prompt.user; cc fichier1.o fichier2.o … file37.c &hellip
si nous avons modifé fichier37.c, et
celui-là uniquement, depuis notre compilation
précédente. Cela peut sérieusement
accélérer la compilation, mais ne résoud pas le
problème de saisie à répétition de la
commande.Nous pourrions aussi écrire une procédure pour
résoudre ce dernier problème, mais ne ne pourrions alors
que lui faire tout recompiler, ce qui serait très peu efficace
sur un gros projet.Que ce passe-t-il si nous avons des centaines de fichiers de
sources? Si nous travaillons en équipe et que d'autres
oublient de nous prévenir des modifications qu'ils ont
apportées à un des fichiers que nous utilisons?Peut-être pourrions-nous rassembler les deux solutions et
écrire quelque chose qui ressemble à une
procédure et comporte une sorte de règle magique
qui dise quand tel fichier de source doit être compilé.
Nous n'aurions plus besoin que d'un programme qui comprennent ces
règles, parce que c'est un peu trop compliqué pour une
procédure.Ce programme s'appelle make. Il lit un fichier,
qu'on appelle un makefile, qui lui dit quelles
sont les dépendances entre les différents fichiers, et
en déduit lesquels ont besoin ou non d'être
recompilés. Par exemple, une règle peut signifier
quelque chose comme “si fromboz.o est plus
ancien que fromboz.c, cela veut dire que
fromboz.c doit avoir été
modifié, il faut donc le recompiler”. Le fichier
“makefile” inclut aussi
des règles qui lui disent comment
recompiler, ce qui en fait un outil encore plus puissant.Ces fichiers “makefiles” sont habituellement
rangés dans le même répertoire que les sources
auxquels ils s'appliquent, et peuvent être appelés
makefile, Makefile ou
MAKEFILE. La plupart des programmeurs utilisent
le nom Makefile, ce qui fait qu'ils se trouvent
alors vers le début de la liste des fichiers et sont ainsi
facilement repérables Ils n'utilisent pas la
variante MAKEFILE parce que les noms en
majuscules servent souvent à désigner les fichiers de
documentation comme
README..Exemple d'utilisation de makeVoici un fichier Makefile
élémentaire :
foo: foo.c
cc -o foo foo.c
Il contient deux lignes, une pour la dépendance et une
pour la génération.La ligne décrivant la dépendance contient le
nom du programme (qu'on appelle la cible),
suivi de “deux points”, puis d'un blanc et du nom
du fichier source. Quand make lit cette ligne,
il regarde si foo existe; s'il existe, il
compare la date de dernière modification de
foo à celle de dernière
modification de foo.c. Si
foo n'existe pas, ou s'il est antérieur
à foo.c, il regarde alors la ligne de
génération pour savoir ce qu'il faut faire. En
d'autres termes, c'est la règle à appliquer pour
savoir si foo.c doit être
recompilé.La ligne de génération commence par une
tabulation (appuyez sur la touche
Tab) suivie de la commande que vous taperiez
pour compiler foo si vous le faisiez sur
la ligne de commande. Si foo n'est pas
à jour ou s'il n'existe pas, make
exécute alors cette commande pour le créer. En
d'autres termes, c'est la règle qui dit à
make comment recompiler
foo.c.Ainsi, quand vous tapez make, il
fera en sorte que foo soit en phase avec les
dernières modifications que vous avez apportées à
foo.c. Ce principe s'étend aux
Makefiles avec des centaines de
cibles - de fait, sur FreeBSD, il est possible de compiler
tout le système d'exploitation en tapant simplement
make world dans le répertoire
adéquat!Une autre particularité de Makefiles
est que les cibles ne sont pas nécessairement des programmes.
Nous pourrions par exemple avoir le Makefile
suivant:
foo: foo.c
cc -o foo foo.c
install:
cp foo /home/me
Nous pouvons dire à make quelle cible
nous voulons atteindre en tapant:
&prompt.user; make ciblemake examinera alors cette cible et ignorera
toutes les autres. Par exemple, si, avec le
Makefile précédent, nous tapons
make foo, make ignorera
la cible install.Si nous tapons simplement make tout
court, il examinera toujours la première cible et
s'arrêtera ensuite sans s'occuper des autres. Si nous
avions tapé make dans ce cas, il
serait simplement allé à la cible
foo, aurait recompilé
foo si nécessaire, et se serait
arrêté sans passer à la cible
install.Remarquez que la cible install ne dépend
en fait de rien du tout! Cela signifie que la commande sur la ligne
suivante est toujours exécutée si nous essayons de
reconstruire cette cible en tapant
make install. Dans ce cas, il copiera
foo dans le répertoire de l'utilisateur.
C'est souvent utilisé par les Makefiles
de logiciels, de sorte que l'application soit installée dans
le bon répertoire, une fois correctement
compilée.C'est un point un peu délicat à expliquer. Si vous
ne comprenez pas exactement comment make
fonctionne, la meilleure chose à faire est d'écrire
un programme simple comme le classique “Bonjour, le
monde!”, un fichier Makefile et de
faire des essais. Compilez ensuite en utilisant plus d'un
fichier source, ou en ayant un fichier source qui inclut un
fichier d'en-tête. La commande touch
vous sera très utile - elle modifie la date
d'un fichier sans que vous ayez à l'éditer.Makefiles FreeBSDL'écriture de Makefiles peut
être assez compliquée. Heurusement, les systèmes
basés sur BSD, comme FreeBSD, en fournissent de très
puissants, intégrés au système. Le catalogue des
logiciels portés de FreeBSD en est un excellent exemple. Voici
l'essentiel d'un de leurs Makefiles typiques:
MASTER_SITES= ftp://freefall.cdrom.com/pub/FreeBSD/LOCAL_PORTS/
DISTFILES= scheme-microcode+dist-7.3-freebsd.tgz
.include <bsd.port.mk>
Si nous allons maintenant dans le répertoire associé
à ce logiciel et tapons make, voici ce
qui se passe:Il regarde si le code source de ce logiciel est
déjà présent sur le système.S'il n'y est pas, une connexion FTP à l'URL
indiquée par MASTER_SITES est
établie pour télécharger le source.La somme de contrôle est calculée sur le source et
comparée à celle calculée sur une version
connue et validée. Cela pour s'assurer que le source n'a
pas été corrompu pendant le transfert.Les modifications nécessaires pour que le code
fonctionne sous FreeBSD sont appliquées - c'est
ce que l'on appelle patcher.Les opérations particulières de configuration
du source sont effectuées. (De nombreuses distributions de
programmes Unix essayent de déterminer sur quel
système elles sont compilées et de quelles
fonctionnalités Unix optionnelles il
dispose - c'est à ce stade du scénario
d'installation de logiciels sous FreeBSD que leur sont fournies
ces informations).Le code source du programme est compilé. De fait, on
passe dans le répertoire où le code a
été décompacté et
make y est exécuté - le
Makefile du programme lui-même contient
les informations nécessaires à sa
compilation.Nous disposons maintenant d'une version compilée du
programme. Si nous le voulons, nous pouvons maintenant la tester;
si nous avons confiance dans le programme, nous pouvons taper
make install. Cela recopiera le programme
et tous les fichiers d'environnement dont il a besoin à
l'endroit adéquat; une entrée sera aussi
créée dans une base de données des
logiciels, de façon à ce qu'il puisse
être désinstallé par la suite, si nous
changeons d'avis.Je pense que vous serez maintenant d'accord pour trouver que c'est
assez impressionnant pour une simple procédure de quatre
lignes!Le secret se trouve à la dernière ligne, qui dit
à make d'aller voir ce qu'il y a dans le
Makefile appelé
bsd.port.mk. Il est facile de rater cette ligne,
mais c'est pourtant de là que vient toute la mécanique
subtile. Quelqu'un a écrit un Makefile
qui dit à make de faire tout ce qui a
été décrit ci-dessus (plus deux ou trois autres
choses dont je n'ai pas parlé, dont le traitement des erreurs
qui pourraient se produire) et tout le monde peut l'utiliser en
mettant simplement cette unique ligne dans son propre
Makefile!Si vous voulez jeter un oeil à ces
Makefiles systèmes, ils sont dans le
répertoire /usr/share/mk, mais il vaut
mieux attendre d'avoir un peu d'expérience des
Makefiles, parce qu'ils sont très
compliqués (et si vous les regardez, ayez sous la main
une bonne dose de café serré!).Utilisation plus poussée de makemake est un outil très puissant, et peut
faire beaucoup plus que l'exemple élémentaire que nous
avons donné. Il y a malheureusement plusieurs versions de
make, et elles sont très
différentes. La meilleure façon de savoir ce qu'elles
peuvent faire est certainement de lire la
documentation - espérons que cette introduction
vous aura fourni les bases pour le faire.La version de make fournie avec FreeBSD est
Berkeley make; elle s'accompagne d'un guide
dans /usr/share/doc/psd/12.make. Pour le
visualiser, tapez:
&prompt.user; zmore paper.ascii.gz
dans ce répertoire.Il y a des nombreux logiciels du catalogue des logiciels
portés qui utilisent GNU make, qui
est très bien documenté dans les pages
“info”. Si vous avez installé un de ces logiciels,
GNU make sera automatiquement installé
sont le nom gmake. Il est aussi disponible sous forme
de logiciel porté ou précompilé autonome.Pour visualiser les pages “info” de
GNU make, il vous faut éditer le
fichier dir du répertoire
/usr/local/info et y ajouter une ligne pour ce
programme. C'est une ligne du genre:
* Make: (make). L'utilitaire GNU Make.
Une fois que c'est fait, vous pouvez taper info
puis sélectionner make dans le menu
(ou sous Emacs, taper C-h
i).DéboguerLe débogueurLe débogueur qui est fourni avec FreeBSD s'appelle
gdb
(GNU débogueur). Vous le lancez en
tapant:
&prompt.user; gdb nom_du_programme
bien que la plupart des gens préfèrent l'exécuter
sous Emacs. Ce qui se fait avec:
M-x gdb RET progname RETSe servir d'un débogueur vous permet d'exécuter le
programme sous contrôle. Vous pouvez typiquement
l'exécuter pas à pas, inspecter les valeurs des
variables, les modifier, dire au débogueur d'exécuter
le programme jusqu'à un certain endroit et de s'y
arrêter, et ainsi de suite. Vous pouvez même
le rattacher à un programme qui est déjà en
cours d'exécution, ou charger une image
mémoire - “core”.
Il est même possible de déboguer le noyau, bien que cela
soit un peu plus compliqué que dans le cas des programmes
utilisateurs, dont nous parlerons dans cette section.gdb dispose d'une assez bonne aide en ligne,
ainsi que d'un jeu de pages “info”, cette section se
concentrera donc sur quelques commandes de base.Enfin, si le mode de fonctionnement en ligne de commande vous
rebute, il existe une interface graphique appelée
xxgdb
au catalogue des logiciels portés.Cette section est destinée à servir d'introduction
à l'utilisation du débogueur et ne couvre pas les
questions spécialisées comme le débogage du
noyau.Exécuter un programme sous le débogueurIl faudra que vous ayez compilé le programme avec l'option
-g
pour tirer le meilleur parti de
gdb. Cela fonctionnera sans cela, mais vous ne
verrez que le nom de la fonction dans laquelle vous êtes, au
lieu du code source. Si vous avez un message du genre:
… (no debugging symbols found) …
au démarrage de gdb, vous saurez que le
programme n'a pas été compilé avec l'option
является для вашего порта
проблематичным, задайте XMKMF=xmkmf. Если порт
использует команду imake, но не воспринимает цель
install.man, то должна быть задана
переменная NO_INSTALL_MANPAGES=yes. Кроме того,
автор программы должен быть пристрелен. :->Если в файле Makefile из дистрибутива вашего
порта в качестве главной цели для построения указано нечто, отличное
от all, то задайте соответствующим образом
переменную ALL_TARGET. То же самое касается
целей install и
INSTALL_TARGET.Особые соглашенияИмеется ещё несколько вещей, которые вы должны иметь в виду при
создании порта. Этот раздел описывает наиболее часто встречающиеся из
них.Динамические библиотекиЕсли ваш порт устанавливает одну или несколько динамических
библиотек, определите переменную INSTALLS_SHLIB,
которая приведёт к запуску из bsd.port.mk команды
${LDCONFIG} -m относительно каталога, в который
устанавливается новая библиотека (как правило, это
PREFIX/lib), во время выполнения
цели post-install для её регистрации в кэше
динамических библиотек. Эта переменная, если она определена, также
приведёт к добавлению соответствующей пары команд
@exec /sbin/ldconfig -m и
@unexec /sbin/ldconfig -R в ваш файл
pkg-plist, так что пользователь, устанавливающий
пакадж, сможет сразу же использовать динамическую библиотеку, а удаление
пакаджа не приведёт к тому, что система будет предполагать, что
библиотека всё ещё имеется в наличии.Если нужно, вы можете переопределить каталог, в который по умолчанию
устанавливается библиотека, задав переменную
LDCONFIG_DIRS, в которой должны быть перечислены
каталоги, в которые устанавливаются динамические библиотеки. Например,
если ваш порт устанавливает динамические библиотеки в каталоги
PREFIX/lib/foo и
PREFIX/lib/bar, то вы можете в
файле Makefile указать следующее:
INSTALLS_SHLIB= yes
LDCONFIG_DIRS= %%PREFIX%%/lib/foo %%PREFIX%%/lib/bar
Заметьте, что значение переменной LDCONFIG_DIRS
передаётся через &man.sed.1;, как и всё остальное в
pkg-plist, так что подстановка значения
PLIST_SUB также происходит здесь. Рекомендуется
использовать %%PREFIX%% для PREFIX,
%%LOCALBASE%% для LOCALBASE и
%%X11BASE%% для X11BASE.MASTERDIRЕсли вашему порту требуется построение довольно различающихся
версий пакаджей через переменную (задающую, например, разрешение,
или размер бумаги), которая принимает различные значения, создайте для
каждого пакаджа отдельный подкаталог, чтобы пользователям было легче
определить, каким пакаджем воспользоваться, но попробуйте использовать
совместно между портами как можно больше файлов. В типичном случае вам
потребуются только очень короткие файлы Makefile
во всех каталогах, кроме одного, если вы будете использовать переменные
с умом. В отдельных файлах Makefiles вы можете
использовать переменную MASTERDIR для указания
каталога, в котором находятся все остальные файлы. Также используйте
переменную как часть PKGNAMESUFFIX, чтобы
пакаджи имели разные имена.Продемонстрируем это на примере. Вот часть файла
japanese/xdvi300/Makefile:
PORTNAME= xdvi
PORTVERSION= 17
PKGNAMEPREFIX= ja-
PKGNAMESUFFIX= ${RESOLUTION}
:
# 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}
.endif
Каталог japanese/xdvi300 содержит также все
обычные патчи, файлы для пакаджа и так далее. Если вы введете здесь
команду make, она возьмет в качестве разрешения
значение по умолчанию (300) и построит порт обычным образом.Для другого разрешения приведем полныйxdvi118/Makefile:
RESOLUTION= 118
MASTERDIR= ${.CURDIR}/../xdvi300
.include ${MASTERDIR}/Makefile
(xdvi240/Makefile и
xdvi400/Makefile похожи). Задание
MASTERDIR говорит bsd.port.mk,
что обычный набор подкаталогов типа FILESDIR и
SCRIPTDIR находится в каталоге
xdvi300. Строчка
RESOLUTION=118 переопределят строку
RESOLUTION=300 в файле
xdvi300/Makefile и порт будет построен с
разрешением 118.Версии динамических библиотекПервым делом прочтите, пожалуйста, наши правила нумерации версий
динамических библиотек для понимания того, что делать с версиями
совместно используемых библиотек вообще. Не полагайтесь слепо на то,
что авторы
программного обеспечения знают, что творят; многие это не понимают.
Очень важно с точностью следовать всем этим правилам, так как мы
получаем достаточно уникальную ситуацию, когда пытаемся иметь несколько
наборов потенциально несовместимых программных пакетов. Невнимательное
включение портов вызывало большие проблемы относительно совместно
используемых библиотек в прошлом (вы когда либо задумывались, почему
порт jpeg-6b имеет библиотеку версии 9?). Если
не уверены, пошлите сообщение по адресу &a.ports;. В большинстве
случаев ваша работа заканчивается определением правильного номера
динамической библиотеки и созданием соответствующих патчей для
реализации этого.Страницы СправочникаПеременные MAN[1-9LN] автоматически добавят любые
страницы Справочника к файлу pkg-plist (это
означает, что вам не нужно указывать страницы
Справочника в файле pkg-plist—обратитесь к
главе о генерации файла PLIST для
получения более подробной информации). Это также позволяет на этапе
установки автоматически упаковывать и распаковывать страницы
Справочника в зависимости от значения переменной
NOMANCOMPRESS в файле
/etc/make.conf.Если ваш порт пытается задать несколько имен для страниц
Справочника при помощи символических или жестких ссылок, то вы должны
использовать переменную MLINKS, чтобы указать на
это. Ссылка, установленная вашим портом, будет уничтожена и создана
заново сценарием bsd.port.mk для проверки того,
что она указывает на правильный файл. Любые страницы Справочника,
перечисленные в переменной MLINKS, не должны фигурировать в файле
pkg-plist.Для указания того, что страницы Справочника нужно сжимать во
время установки, используйте переменную
MANCOMPRESSED. Эта переменная может принимать три
значения - yes, no и
maybe. yes означает, что
страницы Справочника устанавливаются уже сжатыми, no
означает, что они не сжимаются и maybe означает, что
программное обеспечение принимает во внимание значение переменной
NOMANCOMPRESS, так что сценарию
bsd.port.mk ничего дополнительно делать не
нужно.Значение переменной MANCOMPRESSED автоматически
устанавливается в yes, если переменная
USE_IMAKE задана, а
NO_INSTALL_MANPAGES нет, и в значение
no в противном случае. Вам не нужно задавать ее
явно, если значение по умолчанию подходит вашему порту.Если ваш порт определяет корнем для файлов Справочника каталог,
отличный от PREFIX, вы можете использовать
переменную MANPREFIX, чтобы задать его явно. Кроме
того, если страницы только некоторых разделов помещаются в
нестандартное место, например, в случае портов модулей языка Perl, вы
можете установить пути страниц Справочника индивидуально, при помощи
MANsectPREFIX (где
sect принимает значения
1-9, L или
N).Если страницы Справочника помещаются в подкаталоги, соответствующие
некоторому языку, то задайте название языка языка в переменной
MANLANG. Значение этой переменной по умолчанию
равно "" (то есть только английский язык).Вот пример, в котором приводятся все случаи.
MAN1= foo.1
MAN3= bar.3
MAN4= baz.4
MLINKS= foo.1 alt-name.8
MANLANG= "" ja
MAN3PREFIX= ${PREFIX}/share/foobar
MANCOMPRESSED= yes
Здесь указано, что этот порт устанавливает 6 файлов:
${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.gz
Кроме того, файл
${PREFIX}/man/man8/alt-name.8.gz может быть, а
может и не быть установлен вашим портом. В любом случае будет создана
символическая ссылка для объединения страниц Справочника foo(1) и
alt-name(8).Порты, которым требуется MotifСуществует много приложений, которым для компиляции требуется
библиотека Motif (которую можно приобрести у нескольких поставщиков,
хотя есть и бесплатный клон в
x11-toolkits/lesstif, о котором говорится, что с
ним работает множество приложений). Так как это распространенный пакет
и его лицензионное соглашение обычно позволяет распространение
статически скомпонованных бинарных файлов, мы обратили особое внимание
на работу с портами, которым требуется Motif, так чтобы мы могли
легко создавать бинарные файлы, скомпонованные как динамически (для
тех, кто строит приложение из порта), так и статически (для тех, кто
будет распространять приложения в виде пакаджей).REQUIRES_MOTIFЕсли вашему порту требуется Motif, задайте эту переменную в
файле Makefile. Это не позволит людям, у которых нет собственной
копии Motif, даже попытаться построить порт.MOTIFLIBЭта переменная будет установлена сценарием
bsd.port.mk в соответствующее значение,
соответствующее библиотеке Motif. Пожалуйста, измените исходные
тексты для использования этой переменной там, где упоминается
библиотека Motif, в Makefile или
Imakefile.Могут быть два случая:Ели порт обращается к библиотеке Motif как
-lXm в своих файлах
Makefile или Imakefile,
просто подставьте вместо этих обращений
${MOTIFLIB}.Если порт использует XmClientLibs в своем
файле Imakefile, измените это обращение на
${MOTIFLIB} ${XTOOLLIB}
${XLIB}.Заметьте, что переменная MOTIFLIB (как
правило) раскрывается в -L/usr/X11R6/lib -lXm или
/usr/X11R6/lib/libXm.a, так что нет нужды впереди
добавлять -L или -l.Шрифты для X11Если ваш порт устанавливает шрифты для системы X Window, поместите
их в каталог
X11BASE/lib/X11/fonts/local.
Этот каталог впервые появился в XFree86 release 3.3.3. Если он не
существует, то, будьте добры, создайте его и выведите сообщение,
обращающее внимание пользователя на необходимость обновить XFree86 до
версии 3.3.3 или более новой, или по крайней мере добавить этот каталог
к маршруту поиска шрифтов в файле
/etc/XF86Config.Файлы в формате infoНовая версия texinfo (включенная в 2.2.2-RELEASE и выше), содержит
утилиту с именем install-info для установки и
удаления компонент в файле dir. Если ваш порт
устанавливает какие-либо документы в формате info, то, пожалуйста,
следуйте этим инструкциям, чтобы ваш порт/пакадж корректно обновлял
пользовательский файл
PREFIX/info/dir. (Приносим
извинения за размер этого раздела, но это необходимо для объединения
всех файлов info вместе. Если это делается правильно, то будет
создан прекрасный список, так что прислушайтесь
к моим советам!Во-первых, вот что вы (как создатель порта) должны знать
&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. :
Эта программа на будет на самом деле
устанавливать info-файлы; она просто добавляет
или удаляет элементы списка в файле dir.Далее приводится процедура, состоящая из семи шагов, для
преобразования портов к использованию install-info.
В качестве примера я буду использовать
editors/emacs.Посмотрите в исходные тексты документов в формате texinfo и
измените их, вставив директивы @dircategory и
@direntry в файлы, в которых они отсутствуют.
Вот часть моего патча:
--- ./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
:
Формат должен быть для вас самоочевидным. Многие авторы
оставляют среди исходных текстов файл dir,
содержащий все компоненты, которые вам нужны, так что проверьте
еще раз перед тем, как пытаться писать свои собственные. Также
обязательно взгляните на порты, связанные с вашим и приведите в
соответствие имена разделов и формат компонент (мы рекомендуем,
чтобы все текстовые строки начинались с 4й позиции
табуляции).Заметьте, что вы можете указать только одну компоненту info
для файла из-за ошибки в работе утилиты
install-info --delete, которая удаляет только
первую компоненту, даже если вы укажете несколько компонент в
разделе @direntry.Вы можете передать компоненты dir утилите
install-info в качестве аргументов
(
--section
и
--entry
), вместо
того, чтобы изменять исходный текст файлов texinfo, Я не думаю,
что это подходит для портов, потому что вам нужно будет
продублировать информацию в трех местах
(Makefile и
@exec/@unexec в файле
pkg-plist; смотрите ниже). Однако, если файлы
info имеют японскую (или другую многобайтовую кодировку), вам нужно
будет передать дополнительные аргументы команде
install-info, потому что
makeinfo не может работать с такими файлами
texinfo. (Посмотрите файлы Makefile и
pkg-plist в каталоге
japanese/skk на предмет того, как это
сделать).Вернитесь обратно в каталог с портом, выполните команду
make clean; make и проверьте, что файлы info
были вновь сгенерированы из исходного текста texinfo. Так как
исходные тексты texinfo являются более новыми файлами, чем файлы
в формате info, то они должны быть перестроены, когда вы выполняете
команду make; однако многие файлы
Makefile не включают правильные зависимости
для генерации файлов info. В случае emacs, я
изменил главный файл Makefile.in, чтобы
происходил спуск в подкаталог man для
перегенерации файлов info.
--- ./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)
Второй блок изменений был необходим из-за того, что цель по
умолчанию в подкаталоге man называется
info, когда как главный файл
Makefile вызывает цель
all. Я также удалил установку
информационного файла info, потому что в
каталоге /usr/share/info уже имеется файл с
таким же именем (этот патч здесь не показан).Если в файле Makefile есть процедура
установки файла dir, то удалите эту процедуру.
Вашему порту делать этого не надо. Кроме того, удалите все
команды, которые будут пытаться творить что-то с файлом
dir.
--- ./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); \
(Этот шаг необходим, если только вы модифицируете уже
существующий порт.) Взгляните на файл
pkg-plist и удалите все, что пытается изменить
файл info/dir. Это может быть также в файле
pkg-install или в каком-то другом файле, так
что ищите тщательно.
Index: pkg-plist
===================================================================
RCS file: /usr/cvs/ports/editors/emacs/pkg-plist,v
retrieving revision 1.15
diff -u -r1.15 pkg-plist
--- pkg-plist 1997/03/04 08:04:00 1.15
+++ pkg-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-2
Добавьте цель post-install в файл
Makefile для вызова
install-info с именами установленных
файлов info в качестве параметров. (Больше не нужно создавать
файл dir самостоятельно; Программа
install-info автоматически создаст этот файл,
если он не существует.)
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,8 @@
post-install:
.for file in emacs-19.34 emacsclient etags ctags b2m
strip ${PREFIX}/bin/${file}
.endfor
+.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>
Отредактируйте файл pkg-plist, добавив
аналогичные директивы @exec, не забыв о
@unexec для
pkg_delete.
Index: pkg/pkg-plist
===================================================================
RCS file: /usr/cvs/ports/editors/emacs/pkg-plist,v
retrieving revision 1.15
diff -u -r1.15 pkg-plist
--- pkg-plist 1997/03/04 08:04:00 1.15
+++ pkg-plist 1997/05/20 10:25:12 1.17
@@ -16,7 +14,14 @@
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 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-doc
Команды @unexec install-info --delete
указываются до собственно файлов info, чтобы они могли прочесть
файлы. Кроме того, команды @exec install-info
следуют за файлами info и командой @exec,
которая создает файл dir file.Протестируйте вашу
работу и полюбуйтесь ею. :-).
Проверяйте файл dir до и после выполнения
каждого шага.Файлы pkg-*Есть несколько приёмов работы с файлами
pkg-*, которые мы ещё не
описали, но они иногда могут быть очень кстати.pkg-messageЕсли вам нужно вывести сообщение для человека, устанавливающего
приложение, то вы можете поместить сообщение в файл
pkg-message. Эта возможность часто оказывается
полезной для вывода дополнительных шагов установки, которые нужно
предпринять после выполнения команды pkg_add, или
для вывода информации о лицензировании.Файл pkg-message не нужно добавлять в
pkg-plist. И он не будет автоматически
выводиться, если пользователь использует порт, а не пакадж, так что
вы должны будете сами выводить его при выполнении цели
post-install.pkg-installЕсли при установке бинарного пакаджа по команде
pkg_add вашему порту нужно выполнить какие-то
дополнительные действия или команды, то вы можете сделать это с
помощью скрипта pkg-install. Этот скрипт будет
автоматически добавлен к пакаджу, и будет дважды запускаться по
команде pkg_add. Первый раз в виде
${SH} pkg-install ${PKGNAME}
PRE-INSTALL, а второй раз как ${SH} {PKGNAME}
POST-INSTALL.
Для распознавания того, в каком режиме запущен скрипт, можно
использовать параметр $2. Переменная
окружения PKG_PREFIX будет принимать значение,
соответствующее каталогу, в который устанавливается пакадж.
Дополнительная информация находится на странице Справочника о
команде &man.pkg.add.1;.Этот скрипт не запускается автоматически, если вы
устанавливаете порт командой make install.
Если же вам действительно необходимо его запустить, то запустите
его явно из файла Makefile порта.pkg-reqЕсли вашему порту нужно определять, должен ли он устанавливаться
или нет, то вы можете создать скрипт “необходимости”
pkg-req. Он будет вызван автоматически
в момент установки/удаления для определения того, должны ли они
реально выполняться.Изменение содержимого pkg-plist в зависимости
от make-переменныхНекоторые порты, в частности, порты p5-, должны менять содержимое
своих файлов pkg-plist в зависимости от того, с
какими параметрами они были отконфигурированы (или в зависимости от
версии языка perl в случае портов p5-). Чтобы облегчить этот
процесс, любые вхождения ключевых слов %%OSREL%%,
%%PERL_VER%% и %%PERL_VERSION%%
в файле pkg-plist будут заменяться соответствующими
значениями. Значением %%OSREL%% является номер
версии операционной системы (например, 2.2.7).
%%PERL_VERSION%% обозначает полный номер версия
perl (например, 5.00502), а
%%PERL_VER%% - номер версии perl без номера
патча (например, 5.005).Если вам нужно сделать другие подстановки, вы можете указать в
переменной PLIST_SUB список пар
VAR=VALUE,
и все вхождения %%VAR%%
в файле pkg-plist будут заменяться на значение
VALUE.Например, если у вас имеется порт, который устанавливает много
файлов в каталог, зависящий от версии, вы можете задать нечто типа
OCTAVE_VERSION= 2.0.13
PLIST_SUB= OCTAVE_VERSION=${OCTAVE_VERSION}
в файле Makefile и использовать
%%OCTAVE_VERSION%% везде, где нужно указать
номер версии в файле pkg-plist. Таким образом,
при обновлении порта вам не нужно будет менять десятки (а в некоторых
случаях и сотни) строк в файле pkg-plist.Эта подстановка (так же, как и добавление любых страниц Справочника) будет сделана
между выполнением целей do-install и
post-install, посредством чтения файла
PLIST и записью в файл TMPPLIST
(по умолчанию это файл
WRKDIR/.PLIST.mktmp). Так
что если ваш порт строит PLIST на лету, делайте
это во время или до выполнения цели
do-install. Кроме того, если вашему порту
требуется отредактировать получающийся файл, делайте это в цели
post-install изменением файла
TMPPLIST.Изменение имён файлов
pkg-*Все имена файлов
pkg-*
определяются с помощью переменных, так что вы можете изменить их,
если это нужно, в вашем файле Makefile. Это
особенно полезно, если вы используете одни и те же файлы
pkg-*
совместно между несколькими портами или
пишете в один из вышеперечисленных файлов (в главе о записи в каталоги, отличные от
WRKDIR объяснено, почему не рекомендуется
осуществлять запись непосредственно в файлы
pkg-*.Вот список имён переменных и их значений по умолчанию. (Значение
PKGDIR по умолчанию равно
${MASTERDIR}.)ПеременнаяЗначение по умолчаниюCOMMENT${PKGDIR}/pkg-commentDESCR${PKGDIR}/pkg-descrPLIST${PKGDIR}/pkg-plistPKGINSTALL${PKGDIR}/pkg-installPKGDEINSTALL${PKGDIR}/pkg-deinstallPKGREQ${PKGDIR}/pkg-reqPKGMESSAGE${PKGDIR}/pkg-messageПожалуйста, изменяйте значения этих переменных, а не
переопределяйте PKG_ARGS. Если вы измените
значение переменных PKG_ARGS, то эти файлы при
установке из порта будут установлены в каталог
/var/db/pkg некорректно.Проблемы с лицензированиемНекоторые программные пакеты имеют ограниченные лицензии или
их использование в некоторых странах может оказаться (как нарушение
патента). То, что мы можем с этим сделать, сильно
зависит от точных формулировок конкретных лицензионных
соглашений.На вас, как на человека, портирующего приложение, ложится
обязанность прочесть лицензионные соглашения на программное
обеспечение и удостовериться, что проект FreeBSD не будет являться
их нарушителем, если будет заниматься распространением исходного
кода или в откомпилированном виде по ftp или на компакт-дисках. Если
у вас возникли сомнения, то, пожалуйста, обратитесь в
адрес &a.ports;.Имеется две переменные, которые вы можете задать в Makefile
в наиболее часто встречающихся ситуациях:Если порт имеет лицензию типа “не продавать для
достижения прибыли”, задайте в переменной
NO_CDROM строку, описывающую причину этого. Мы
не будем помещать такие порты на компакт-диск во время выпуска
релиза. Дистрибутивный файл и пакадж будут доступны по
ftp.Если получающийся пакадж должен строиться каждый раз уникальным
образом или получающийся бинарный пакадж не может распространяться
по лицензионным соображениям, то в переменной
NO_PACKAGE укажите строку, описывающую причину
этого. Мы не будем помещать такие пакаджи ни на ftp-сервер, ни на
компакт-диск во время выпуска релиза. Однако дистрибутивный файл
будет помещен на оба носителя.Если порт имеет юридические ограничения на использованию
(например, патентованное программное обеспечение) или имеет
лицензию “не для коммерческого использования”, то в
переменной RESTRICTED укажите строку,
описывающую причину этого. Для таких портов ни дистрибутивный
файл, ни пакаджи не будут доступны даже с наших серверов
ftp.Лицензия GNU General Public License (GPL), как версии 1, так и
версии 2, для портов вызвать проблем не должна.Если вы являетесь коммиттером, обязательно обновите также файл
ports/LEGAL.ОбновлениеЕсли вы заметите, что ваш порт устарел по сравнению с последней
авторской версией, первым делом проверьте, что у вас находится самая
последняя версия порта. Вы можете найти их в каталоге
ports/ports-current на зеркальных серверах ftp.
Кроме того, вы можете использовать CVSup для поддержки актуальности
всей Коллекции портов, как это описано в Руководстве.Следующий шаг - это посылка письма человеку, ведущему этот порт
(майнтайнеру), если он указан в файле Makefile
порта. Этот человек может уже работать над обновлением, или иметь
причину не обновлять порт прямо сейчас (например, из-за проблем со
стабильностью функционирования новой версии).Если ведущий попросил сделать обновление вас, или такой персоны не
нашлось, то, пожалуйста, выполните обновление и пошлите рекурсивный
diff-файл (подойдет как в унифицированном, так и контекстно-зависимом
формате, однако коммиттеры предпочитают унифицированный формат)
сравнения нового и старого каталогов нам (например, если каталог с
модифицированным портом называется superedit,
а оригинальный, совпадающий с находящимся в нашем дереве портов,
superedit.bak, то пошлите нам результат выполнения
команды diff -ruN superedit.bak superedit).
Пожалуйста, проверьте результат работы этой команды, так, чтобы все
изменения имели смысл. Лучший способ послать нам diff-файл - включить
его в посылку по команде &man.send-pr.1; (категория
ports). Будьте добры, в сообщении отметьте все
добавленные или удаленные файлы, так как они будут непосредственно
указаны CVS при выполнении операции коммита. Если diff-файл имеет
размер, превышающий 20КБ, сожмите его и обработайте утилитой uuencode;
в противном случае просто включите его как есть в PR.Повторяем еще раз - для посылки обновлений существующих портов
используйте утилиту &man.diff.1;, а не &man.shar.1;!Что нужно, а что нельзя делатьВот список часто встречающихся действий, которые нужно и которые
нельзя делать во время процесса портирования. Вы должны проверять ваш
порт по этому списку, и вы также можете проверять порты в базе
сообщений PR, которые присланы другими людьми. Присылайте любые
комментарии о портах, которые вы проверили, так, как это описано в
главе о Сообщениях об ошибках
и общих замечаниях. Проверка портов в базе сообщений PR позволит
нам быстрее коммиттить их и удостовериться, что вы знаете, что
делаете.Удаление отладочной информации в бинарных файлахУдаляйте отладочную информацию из бинарных файлов. Если в
исходных текстах файлы уже усекается, это прекрасно; в противном
случае вы должны добавить в цель post-install
правило для выполнения этой операции самим. Вот пример:
post-install:
strip ${PREFIX}/bin/xdl
Для проверки того, удалена ли отладочная информация из
установленного выполнимого файла, выполните команду &man.file.1;.
Если утилита не выдаст строку not stripped, то
файл уже обработан.Макросы INSTALL_*Используйте макросы, которые есть в файле
bsd.port.mk для обеспечения правильных прав
доступа и владения файлов в своих целях
*-install.INSTALL_PROGRAM - это команда для
установки бинарных выполнимых файлов.INSTALL_SCRIPT - это команда для установки
выполнимых скриптов.INSTALL_DATA - это команда для установки
совместно используемых файлов данных.INSTALL_MAN - это команда для установки
страниц Справочника и другой документации (никаких файлов она не
сжимает).В основе работы этих макросов лежит команда
install со всеми соответствующими флагами.
Смотрите пример их использования ниже.WRKDIRНе пишите ничего в файлы вне каталога WRKDIR.
Каталог WRKDIR является единственным местом,
которое гарантированно будет доступно для записи во время построения
порта (обратитесь к главе о компиляции портов с
компакт-диска за
примером построения портов из дерева, доступного только для чтения).
Если вам нужно изменить какой-либо из файлов
pkg-*, сделайте это,
переопределив переменную, но не
перезаписывая их.WRKDIRPREFIXДобейтесь того, чтобы ваш порт принимал во внимание значение
переменной WRKDIRPREFIX. Большинство портов об
этом не заботятся. В частности, если вы обращаетесь к каталогу
WRKDIR другого порта, заметьте, что его правильным
местоположением является
WRKDIRPREFIXPORTSDIR/subdir/name/work not PORTSDIR/subdir/work
или .CURDIR/../../subdir/name/work
или что-то подобное.Кроме того, если вы сами задаете WRKDIR, то
должны поставить перед ним знак
${WRKDIRPREFIX}${.CURDIR}.Различение операционных систем и версий ОСВы можете встретиться с кодом, который требует модификаций
или условной компиляции в зависимости от того, с какой версией
UNIX он работает. Если вам нудно сделать такие изменения в коде для
условной компиляции, то вы должны делать изменения как можно
более общими, чтобы мы могли перенести код на системы FreeBSD версий
1.x, а также и на другие системы BSD, такие, как 4.4BSD от CSRG,
BSD/386, 386BSD, NetBSD, и OpenBSD.Предпочтительным способом отделения кода для 4.3BSD/Reno (1990) и
и более новых версий BSD является использование макроса
BSD, определенного в файле
<sys/param.h>. Хорошо, если этот файл уже
включен; если это не так, то добавьте такой код:
#if (defined(__unix__) || defined(unix)) && !defined(USG)
#include <sys/param.h>
#endif
в соответствующем месте файла .c. Мы
надеемся, что все системы, в которых определены эти две константы,
имеют файл sys/param.h. Если вы обнаружите
систему, в которой это не так, мы хотим знать. Пошлите, пожалуйста,
письмо на адрес &a.ports;.Другим способом является использование для этого стиля GNU
Autoconf:
#ifdef HAVE_SYS_PARAM_H
#include <sys/param.h>
#endif
Не забудьте добавить -DHAVE_SYS_PARAM_H к
CFLAGS в файле Makefile
при использовании этого метода.Как только вы включите sys/param.h, то
сможете воспользоваться следующим:
#if (defined(BSD) && (BSD >= 199103))
для определения того, компилируется ли программа на основе кода
Net2 версии 4.3 или более новой версии (например, FreeBSD 1.x,
4.3/Reno, NetBSD 0.9, 386BSD, BSD/386 1.1 и ниже).Используйте:
#if (defined(BSD) && (BSD >= 199306))
для определения того, компилируется ли программа на основе кода
4.4 или более новой (например, FreeBSD 2.x, 4.4, NetBSD 1.0, BSD/386
2.0 и выше).Значение макроса BSD равно
199506 для кода на основе 4.4BSD-Lite2. Оно
задано только для информационной целей. Оно не должно использоваться
для различия между версиями FreeBSD, основанными на коде 4.4-Lite
и версиями, в которые включены изменения из 4.4-Lite2. Вместо этого
нужно использовать макрос __FreeBSD__.Реже используйте:__FreeBSD__ определен во всех версиях
FreeBSD. Используйте его, если изменение, вносимое вами,
касается только FreeBSD. Проблемы
портирования, такие, как использование
sys_errlist[] или
strerror() являются особенностями систем
BSD, а не FreeBSD.Во FreeBSD 2.x, значение __FreeBSD__
определено как 2. В более ранних версиях оно
равно 1. В более поздних версиях это значение
увеличивается в соответствии со старшим номером версии
системы.Если вам нужно отделить системы FreeBSD 1.x от систем
FreeBSD 2.x или 3.x, правильным способом, как правило, будет
использование макроса BSD, описанное выше.
Если это действительно изменение, специфичное для FreeBSD
(например, особая опция для динамической библиотеки при
использовании ld), то для распознавания
систем FreeBSD 2.x и более поздних нормальным будет использование
__FreeBSD__ и
#if __FreeBSD__ > 1. Если вам нужно более
точное определение версий FreeBSD, начиная с 2.0-RELEASE, то
вы можете использовать следующее:
#if __FreeBSD__ >= 2
#include <osreldate.h>
# if __FreeBSD_version >= 199504
/* 2.0.5+ release specific code here */
# endif
#endif
Релиз__FreeBSD_version2.0-RELEASE1194112.1-CURRENT199501, 1995032.0.5-RELEASE1995042.2-CURRENT до выхода 2.11995082.1.0-RELEASE1995112.2-CURRENT до выхода 2.1.51995122.1.5-RELEASE1996072.2-CURRENT до выхода 2.1.61996082.1.6-RELEASE1996122.1.7-RELEASE1996122.2-RELEASE2200002.2.1-RELEASE220000 (без изменений)2.2-STABLE после выхода 2.2.1-RELEASE220000 (без изменений)2.2-STABLE после включения texinfo-3.92210012.2-STABLE после включения top2210022.2.2-RELEASE2220002.2-STABLE после выхода 2.2.2-RELEASE2220012.2.5-RELEASE2250002.2-STABLE после выхода 2.2.5-RELEASE2250012.2-STABLE после появления ldconfig -R2250022.2.6-RELEASE2260002.2.7-RELEASE2270002.2-STABLE после выхода 2.2.7-RELEASE2270012.2-STABLE после изменения в semctl(2)2270022.2.8-RELEASE2280002.2-STABLE после выхода 2.2.8-RELEASE2280013.0-CURRENT до изменения в mount(2)3000003.0-CURRENT после изменения в mount(2)3000013.0-CURRENT после изменения в semctl(2)3000023.0-CURRENT после изменений в аргументах ioctl3000033.0-CURRENT после перехода на формат ELF3000043.0-RELEASE3000053.0-CURRENT после выхода 3.0-RELEASE3000063.0-STABLE после разбиения на ветки 3/43000073.1-RELEASE3100003.1-STABLE после выхода 3.1-RELEASE3100013.1-STABLE после изменения в порядке следования
конструкторов/деструкторов в C++3100023.2-RELEASE3200003.2-STABLE3200013.2-STABLE после несовместимых изменений в IPFW и
сокетах3200023.3-RELEASE3300003.3-STABLE3300013.3-STABLE после добавления mkstemps() в libc3300023.4-RELEASE3400003.4-STABLE3400014.0-CURRENT после появления ветки 3.44000004.0-CURRENT после изменения в работе динамического
компоновщика4000014.0-CURRENT после изменения в порядке следования
конструкторов/деструкторов в C++4000024.0-CURRENT после появления функции dladdr(3)4000034.0-CURRENT после исправления ошибки в работе функции
__deregister_frame_info динамического компоновщика (а также
4.0-CURRENT после интеграции EGCS 1.1.2)4000044.0-CURRENT после изменения интерфейса функции suser(9)
(а также 4.0-CURRENT после появления newbus)4000054.0-CURRENT после изменения в регистрации cdevsw4000064.0-CURRENT после добавления so_cred в проверки на
уровне сокетов4000074.0-CURRENT после добавления обработчика системного
вызова poll в libc_r4000084.0-CURRENT после перехода в ядре с типа
dev_t на указатель
struct specinfo4000094.0-CURRENT после исправления дыры в безопасности
jail(2)4000104.0-CURRENT после изменения в типе данных
sigset_t4000114.0-CURRENT после перехода на компилятор
GCC 2.95.24000124.0-CURRENT после появления добавляемых обработчиков
ioctl режима linux4000134.0-CURRENT после заимствования OpenSSL4000144.0-CURRENT после изменения в C++ ABI компилятора
GCC 2.95.2 по умолчанию с -fvtable-thunks на
-fno-vtable-thunks4000154.0-CURRENT после заимствования OpenSSH4000164.0-RELEASE4000174.0-STABLE после появления 4.0-RELEASE4000184.0-STABLE после интеграции кода библиотеки
libxpg4 в libc.4000204.0-STABLE после обновления пакета Binutils до версии
2.10.0, изменения в схеме пометки выполнимых файлов ELF и
включения tcsh в качестве базового компонента.4000214.1-RELEASE4100004.1-STABLE после выхода 4.1-RELEASE4100014.1-STABLE после переноса функции setproctitle() из
библиотеки libutil в libc.4100024.1.1-RELEASE4110004.1.1-STABLE после выхода 4.1.1-RELEASE4110014.2-RELEASE4200004.2-STABLE после объединения libgcc.a и libgcc_r.a,
а также соответствующих изменений в компоновке
GCC.4200015.0-CURRENT5000005.0-CURRENT после добавления дополнительных полей в
заголовке ELF и изменения метода пометки принадлежности
к определённой системе для выполнимых файлов в формате
ELF.5000015.0-CURRENT после изменений в метаданных kld.5000025.0-CURRENT после изменений buf/bio.5000035.0-CURRENT после обновления binutils.5000045.0-CURRENT после интеграции кода библиотеки libxpg4 в
libc и появления интерфейса TASKQ.5000055.0-CURRENT после добавления интерфейсов AGP.5000065.0-CURRENT после обновления Perl до версии 5.6.05000075.0-CURRENT после обновления кода KAME до версии
2000/07.5000085.0-CURRENT после изменений в ether_ifattach() и
ether_ifdetach().5000095.0-CURRENT после возврата в настройках утилиты mtree,
применяемых по умолчанию, обратно к оригинальным и добавления
флага -L для перехода по символическим ссылкам.5000105.0-CURRENT после изменения в API для kqueue.5000115.0-CURRENT после перемещения setproctitle() из библиотеки
libutil в libc.5000125.0-CURRENT после первого коммита SMPng.5000135.0-CURRENT после переноса <sys/select.h> в
<sys/selinfo.h>.5000145.0-CURRENT после объединения libgcc.a и
libgcc_r.a, а также соответствующих изменений в
компоновке GCC.5000155.0-CURRENT после изменения, позволяющего libc и
libc_r быть скомпонованными вместе, что делает параметр
-pthread ненужным.5000165.0-CURRENT после перехода на использование
struct xucred вместо struct ucred для стабилизиции
экспортируемого API ядра для mountd и т.д.5000175.0-CURRENT после добавления переменной make
CPUTYPE позволяющей контролировать специфичные
для CPU оптимизации.500018Заметьте, что 2.2-STABLE иногда идентифицирует себя как
“2.2.5-STABLE” после 2.2.5-RELEASE. Такой принцип
использовался год и месяц, но мы решили изменить его на более
однозначную систему нумерации старший/младший, начиная с версии
2.2. Это объясняется тем, что параллельная разработка в нескольких
ветках делает непрактичным идентификацию релизов просто по их
реальным датам выпуска. Если вы сейчас делаете порт, вам не стоит
заботиться о старых версиях -CURRENT; они перечислены здесь просто
в информационных целях.Из сотен уже сделанных портов только в одном или двух случаях
потребовалось использование __FreeBSD__. Если
старые порты использовали этот макрос не по назначению, вовсе не
значит, что вам нужно поступать точно также.Написание чего-либо после
bsd.port.mkНе пишите ничего после строки
.include <bsd.port.mk>. Этой строки можно
избежать, включив в где-то в середину вашего файла
Makefile файл
bsd.port.pre.mk, и
файл bsd.port.post.mk в конец.Вам нужно включить либо пару файлов
pre.mk/post.mk, либо
только bsd.port.mk; не смешивайте два этих
случая.В файле bsd.port.pre.mk определяются лишь
несколько переменных, которые могут быть использованы в тестах из
файла Makefile, в файле
bsd.port.post.mk заданы остальные.Вот некоторые важные переменные, определенные в файле
bsd.port.pre.mk (это не полный список, для
выяснения полного списка прочтите, пожалуйста, сам файл
bsd.port.mk).ПеременнаяОписаниеARCHАрхитектура машины в виде, получаемом по команде
uname -m (например,
i386)OPSYSТип операционной системы, получаемый по команде
uname -s (например,
FreeBSD)OSRELВерсия релиза операционной системы (например,
2.1.5 или 2.2.7)OSVERSIONВерсия операционной системы в виде числа, то же, что и
__FreeBSD_version.PORTOBJFORMATФормат объектных файлов, используемых в системе
(aout или elf)LOCALBASEКорень дерева “local” (например,
/usr/local/)X11BASEКорень дерева “X11” (например,
/usr/X11R6)PREFIXКуда, собственно, устанавливается порт (обратитесь к
подробной информации о PREFIX).Если вы задаете переменные USE_IMAKE,
USE_X_PREFIX, или MASTERDIR,
то делайте это перед тем, как включать
bsd.port.pre.mk.Вот несколько примеров того, что вы можете написать после
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
.endif
Установка дополнительной документацииЕсли с вашим программным обеспечением поставляется некоторая
документация, отличающаяся от стандартных страниц Справочника и
файлов info, которая, как вы думаете, будет полезна пользователям,
установите ее в каталог
PREFIX/share/doc. Это может
быть сделано, как и в предыдущем разделе, в цели
post-install.Создайте для вашего порта новый каталог. Имя каталога должно
соответствовать тому, что представляет из себя порт. Обычно это
означает PORTNAME. Однако, если
вы думаете, что пользователь захочет иметь разные версии порта,
установленные одновременно, то вы можете использовать полное имя
PKGNAME.Сделайте установку документации зависящей от переменной
NOPORTDOCS для того, чтобы пользователи могли
выключить это в файле /etc/make.conf, как
здесь:
post-install:
.if !defined(NOPORTDOCS)
${MKDIR} ${PREFIX}/share/doc/xv
${INSTALL_MAN} ${WRKSRC}/docs/xvdocs.ps ${PREFIX}/share/doc/xv
.endif
Не забудьте включить их также в файл
pkg-plist! (Не беспокойтесь здесь о
NOPORTDOCS; на данный момент в пакаджах нет
способа прочитать значения переменных из
/etc/make.conf.)Кроме того, вы можете использовать файл
pkg-message для вывода сообщений во
время установки. За подробной информацией обратитесь к разделу
об использовании
pkg-message.Файл pkg-message не нужно добавлять в
pkg-plist.DIST_SUBDIRНе позволяйте вашему порту засорять
/usr/ports/distfiles. Если вашему порту
требуется сгрузить много файлов, или он содержит имя файла,
могущее вызвать конфликты с другими портами (например,
Makefile), то укажите в переменной
DIST_SUBDIR имя порта (должны подойти
${PORTNAME} или
${PKGNAMEPREFIX}${PORTNAME}). Это изменит значение
переменной DISTDIR со значения по умолчанию
/usr/ports/distfiles к значению
/usr/ports/distfiles/DIST_SUBDIR,
и в результате все, что требуется для порта, будет помещено в этот
подкаталог.Он заглянет также в подкаталог с тем же именем на
основном резервном сервере ftp.FreeBSD.org.
(Явное задание переменной DISTDIR в вашем файле
Makefile этого не сделает, так что, пожалуйста,
воспользуйтесь DIST_SUBDIR.)Это не коснется тех сайтов MASTER_SITES,
которые вы указали в вашем файле Makefile.Информация о пакаджеДайте информацию о пакадже, то есть
pkg-comment, pkg-descr и
pkg-plist.Заметьте, что эти файлы теперь используются не только в
системе пакаджей, и они обязательны, даже если
определена переменная NO_PACKAGE.Строки RCSНе помещайте строки RCS в патчи. CVS будет изменять их при
помещении файлов в дерево портов, и когда мы будем их оттуда
извлекать, они будут уже другие, поэтому применение патчей
окончится неудачей. Строчки RCS предваряются знаком доллара
($), и обычно начинаются с
$Id или
$RCS.Рекурсивные файлы diffИспользование параметра рекурсии (
-r
) с командой
diff для генерации патчей - это хорошо, но все же,
пожалуйста, смотрите на получающиеся патчи, чтобы убедиться в
отсутствии ненужного мусора. В частности, diff между двумя
резервными копиями файлов, файлы Makefile, когда
как порт использует Imake или
GNU-версию программы configure, и так далее,
не нужны, и должны быть удалены. Если вы отредактировали файл
configure.in и запустили
autoconf для перегенерации
configure, не нужно включать файлы diff для
configure (они частенько вырастают до нескольких
тысяч строк!); задайте USE_AUTOCONF=yes и
включите дифф-файл для configure.in.Кроме того, если вы удаляете файл, то это можно сделать и в цели
post-extract, а не внутри патча. Как только
вы будете удовлетворены получающимся дифф-файлом, разбейте его на
несколько по одному патчу на отдельный файл.PREFIXПопытайтесь сделать так, чтобы установка вашего порта
осуществлялась относительно каталога PREFIX.
(Значение этой переменной будет установлено в
LOCALBASE (по умолчанию
/usr/local), если только не заданы переменные
USE_X_PREFIX или USE_IMAKE,
в случае чего он будет принят равным X11BASE
(по умолчанию /usr/X11R6).)Отсутствие явного указания /usr/local или
/usr/X11R6 нигде в исходном коде сделает порт
гораздо более гибким и способным удовлетворить потребности других
серверов. Для портов, которые используют X, это происходит
автоматически; в противном случае зачастую это может быть сделано
простой заменой строк /usr/local (или
/usr/X11R6 для портов X, не использующих imake)
в различных скриптах/файлах Makefile порта на чтение
PREFIX, так как эта переменная автоматически
передается далее на каждом этапе построения и установки.Проверьте, что ваше приложение не устанавливает чего-либо в
каталог /usr/local вместо
PREFIX. Это можно быстро проверить следующим
образом:
&prompt.root; make clean; make package PREFIX=/var/tmp/p
ort-nameЕсли что-то было установлено за пределами
PREFIX, то процесс создания пакаджа сообщит об
отсутствии файлов.Здесь не проверяется ни наличие внешних ссылок, ни корректность
использования LOCALBASE в качестве ссылки на
файлы из других портов. Проверка установки в каталог
/var/tmp/port-name
делает это.Не задавайте переменную USE_X_PREFIX до тех
пор, пока она на самом деле не понадобится для порта (то есть он
будет скомпонован с библиотеками X или нужно будет обращаться к
файлам из X11BASE).Переменная PREFIX может быть переназначена в
вашем файле Makefile или в окружении
пользователя. Однако строго не рекомендуется отдельным портам
устанавливать эту переменную явно в файле
Makefiles.Кроме того, обратитесь к программам/файлам из других портов с
переменными, перечисленными выше, без указания явных маршрутов.
Например, если ваш порт требует, чтобы макро PAGER
являлся полным путем утилиты less, используйте
флаг компилятора:
-DPAGER=\"${PREFIX}/bin/less\"
или
-DPAGER=\"${LOCALBASE}/bin/less\"
если это порт X, вместо того, чтобы задавать
-DPAGER=\"/usr/local/bin/less\". Этот способ
имеет больше шансов на работу, если системный администратор
переместил все дерево `/usr/local' куда-то в другое место.ПодкаталогиПопробуйте поместить все файлы порта в правильных подкаталогах
каталога PREFIX. Некоторые порты игнорируют все
установки и помещают все в подкаталог с именем порта, что
неправильно. Также многие порты помещают все, кроме бинарных файлов,
файлов заголовков и страниц Справочника, в подкаталог каталога
lib, что не очень хорошо соответствует парадигме
BSD. Многие файлы должны быть перемещены в одно из следующих
местоположений: etc
(настроечные/конфигурационные файлы), libexec
(выполнимые файлы, запускаемые из других программ),
sbin (исполнимые файлы для
администраторов/менеджеров системы), info
(документация в формате info для просмотрщика info) или
share (независимые от архитектуры файлы).
Обратитесь к &man.hier.7; для прояснения деталей, правила,
покрывающие /usr, достаточно хорошо подходят
также и к /usr/local. Исключением являются
порты, имеющие дело с “новостями” USENET. Они могут
использовать каталог
PREFIX/news для установки
своих файлов.Очистка пустых каталоговЗаставьте ваш порты очищать за собой при удалении. Обычно это
достигается добавлением строк @dirrm для всех
каталогов, которые создаются этим портом. Вам нужно удалить
подкаталоги до того, как вы сможете удалить родительские
каталоги.
:
lib/X11/oneko/pixmaps/cat.xpm
lib/X11/oneko/sounds/cat.au
:
@dirrm lib/X11/oneko/pixmaps
@dirrm lib/X11/oneko/sounds
@dirrm lib/X11/oneko
Однако иногда @dirrm будет выдавать ошибку,
потому что другие порты тоже используют тот же самый подкаталог. Вы
можете вызвать команду rmdir из
@unexec для удаления без выдачи предупреждений
только пустого каталога.
@unexec rmdir %D/share/doc/gimp 2>/dev/null || true
Эта команда не выведет никаких сообщений об ошибках и не вызовет
аварийного завершения работы pkg_delete, даже если
каталог PREFIX/share/doc/gimp
не пуст из-за того, что другие порты установили сюда какие-то
файлы.Идентификаторы UIDЕсли вашему порты требуется наличие некоторого пользователя в
системе, на которую он устанавливается, пусть скрипт
pkg-install вызовет команду
pw для его автоматического создания. Посмотрите
для примера на net/cvsup-mirror.Если ваш порт должен использовать тот же самый идентификатор
пользователя или группы при установке двоичного пакаджа, который был
при компиляции, то вы должны выбрать свободный UID в диапазоне от 50
до 99 и зарегистрировать его ниже. Взгляните для примера на
japanese/Wnn.Проверьте, что вы не используете UID, уже используемый системой
или другими портами. Вот текущий список UID между 50 и 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/nologin
vpopmail:*:89:89::0:0:User &:/usr/local/vpopmail:/nonexistent
Пожалуйста, при посылке нового (или обновлении старого) порта
напишите замечание, что резервируете новый UID или GID в этом
диапазоне. Это позволит нам держать список зарезервированных
идентификаторов в актуальном состоянии.Поступайте разумноФайл Makefile должен выполнять действия
просто и небеспричинно. Если вы можете сделать что-то на несколько
строк короче или более читабельно, сделайте это. В качестве примеров
можно привести использование конструкций .if
утилиты make вместо соответствующей конструкции if
командного процессора, ненужность переопределения цели
do-extract при возможности переопределения
EXTRACT* и использование
GNU_CONFIGURE вместо
CONFIGURE_ARGS+= --prefix=${PREFIX}.Использование CFLAGSПорт должен принимать во внимание переменную
CFLAGS. Если он этого не делает, то, пожалуйста,
добавьте в файл Makefile строчку
NO_PACKAGE=ignores cflags.Пример файла Makefile, в котором принимается
во внимание переменная CFLAGS, приводится далее.
Отметьте употребление символов +=:
CFLAGS += -Wall -Werror
А вот пример, в котором не учитывается значение переменной
CFLAGS:
CFLAGS = -Wall -Werror
В системе FreeBSD переменная CFLAGS определена
в файле /etc/make.conf. В первом примере к
переменной CFLAGS добавляются дополнительные флаги,
при этом сохраняются все определения, данные ранее на уровне системы.
Во втором примере всё, что было задано ранее, игнорируется.Конфигурационные файлыЕсли для работы порта требуются наличие некоторых
конфигурационных файлов в каталоге
PREFIX/etc,
не просто установите их и перечислите в файле
pkg-plist. Это приведёт к тому, что по команде
pkg_delete или при новой установке файлы,
тщательно отредактированные и настроенные пользователем, будут
уничтожены.Вместо этого установите файлы с примерами с неким расширением
(filename.sample
подойдет) и выведите сообщение, указывающее на то, чтобы
пользователь скопировал и отредактировал файл перед тем, как работать
с программным обеспечением.Утилита portlintПроверяйте вашу работу с помощью утилиты portlint
перед тем, как послать ее нам или выполнить коммитт.ПожеланияПосылайте подходящие изменения/патчи авторам/сопровождающему
для включения в следующий релиз. Это только сделает вашу работу
гораздо легче при выходе следующего релиза.README.htmlНе включайте сюда файл README.html. Этот файл
не является частью дерева cvs, и он генерируется при помощи команды
make readme.РазноеФайлы pkg-comment,
pkg-descr и pkg-plist вы
должны проверять дважды. Если вы просматриваете порт и думаете,
что его можно переформулировать иначе, сделайте это.Пожалуйста, не создавайте дополнительных копий лицензии GNU
General Public License в нашей системе.Будьте внимательны с юридическими вопросами! Не делайте из нас
нелегальных распространителей ПО!Если вы испытываете затруднения…Посмотрите существующие примеры и файл
bsd.port.mk перед тем, как задавать нам вопросы!
;-)Задавайте нам вопросы, если у вас появились проблемы! Не бейтесь
головой об стену! :-)Примерный MakefileВот примерный Makefile, который можно
использовать при создании нового порта. Обязательно удалите все
дополнительные комментарии (те, которые в скобках)!Вам рекомендуется следовать этому формату (соблюдая порядок
следования переменных, пустые строки между разделами, и так далее).
Этот формат разработан для того, чтобы важная информация была легко
найдена. Мы рекомендуем вам воспользоваться утилитой portlint для проверки файла
Makefile.
[заголовок...просто чтобы нам было легче идентифицировать порт.]
# New ports collection makefile for: xdvi
[строчка "version required" необходима только тогда, когда переменная
PORTVERSION недостаточно конкретна для описания порта.]
# Date created: 26 May 1995
[Это человек, который сделал первоначальный порт для FreeBSD, в частности,
тот, кто создал первую версию этого файла Makefile. Запомните, что позже
при обновлении порта эта строка меняться не должна.]
# Whom: Satoshi Asami <asami@FreeBSD.org>
#
# $FreeBSD$
[ ^^^^^^^^^ Эта строка будет автоматически заменена со строчкой RCS ID
системой CVS при выполнении операции коммитта в наше хранилище. При
обновлении порта не приводите эту строку обратно к виду
"$FreeBSD$". CVS сделает все автоматически.]
#
[секция описания собственно порта и основного сервера - сначала всегда
PORTNAME и PORTVERSIONA, за ним следует CATEGORIES, а затем
MASTER_SITES, за которым может идти MASTER_SITE_SUBDIR.
PKGNAMEPREFIX и PKGNAMESUFFIX, если они нужны, следуют за ними.
Затем следует DISTNAME, EXTRACT_SUFX и/или DISTFILES, а потом, если это нужно,
EXTRACT_ONLY.]
PORTNAME= xdvi
PORTVERSION= 18.2.]
CATEGORIES= print
[не забывайте лидирующий слэш ("/")!
если вы не используете макросы MASTER_SITE_*]
MASTER_SITES= ${MASTER_SITE_XCONTRIB}
MASTER_SITE_SUBDIR= applications
PKGNAMEPREFIX= ja-
DISTNAME= xdvi-pl18
[задайте это, если исходный код поставляется не в виде
стандартного файла ".tar.gz"]
EXTRACT_SUFX= .tar.Z
[секция патчей -- может быть пустой]
PATCH_SITES= ftp://ftp.sra.co.jp/pub/X11/japanese/
PATCHFILES= xdvi-18.patch1.gz xdvi-18.patch2.gz
[сопровождающий; *обязательное поле*! Это человек (предпочтительно с
привилегиями на операцию коммитта), с которым может связаться пользователь
для получения ответов на вопросы и посылки сообщений об ошибках - этот
человек должен быть создателем порта или кем-то, кто может передать
вопросы создателю порта. Если вы на самом деле не хотите указывать здесь
свой адрес, задайте здесь "ports@FreeBSD.org".]
MAINTAINER= asami@FreeBSD.org
[зависимости -- могут быть пустыми]
RUN_DEPENDS= gs:${PORTSDIR}/print/ghostscript
LIB_DEPENDS= Xpm.5:${PORTSDIR}/graphics/xpm
[этот раздел для остальных стандартных переменных из bsd.port.mk, кроме
тех, что перечислены выше]
[Если порт задает вопросы во время этапов настройки, построения,
установки...]
IS_INTERACTIVE= yes
[Если распаковка происходит в каталог, отличных от ${DISTNAME}...]
WRKSRC= ${WRKDIR}/xdvi-new
[Если патчи делались не относительно ${WRKSRC}, вам, может быть, не
придется изменять эту переменную]
PATCH_DIST_STRIP= -p1
[Если порт требует скрипта "configure", генеруемого GNU-версией программы
autoconf]
GNU_CONFIGURE= yes
[Если для построения порту требуется GNU-версия утилиты make, а не
/usr/bin/make...]
USE_GMAKE= yes
[Если это приложение X и требует запуска "xmkmf -a"...]
USE_IMAKE= yes
[и так далее]
[В правилах ниже используются нестандартные переменные]
MY_FAVORITE_RESPONSE= "yeah, right"
[теперь специальные правила, в порядке их вызова]
pre-fetch:
я что-то выкачиваю, точно
post-patch:
мне кое-что сделать после применения патча, великолепно
pre-install:
и потом еще кое-что перед установкой, ого
[и, наконец, эпилог]
.include <bsd.port.mk>
Автоматическое создание списка упаковкиПервым делом убедитесь, что ваш порт практически полностью
завершен, осталось только создать pkg-plist.
Создайте пустой файл pkg-plist.
&prompt.root; touch pkg-plistЗатем создайте новый набор каталогов, в которые может быть
установлен ваш порт, и установите все зависимости.
&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-nameСохраните структуру каталогов в новом файле.
&prompt.root; (cd /var/tmp/port-name && find * -type d) > OLD-DIRSЕсли ваш порт принимает во внимание PREFIX (а он
должен это делать), то тогда вы можете установить порт и создать список
упаковки.
&prompt.root; make install PREFIX=/var/tmp/port-name
&prompt.root; (cd /var/tmp/port-name && find * \! -type d) > pkg-plistКроме того, в список упаковки вы должны добавить все вновь
созданные каталоги.
&prompt.root; (cd /var/tmp/port-name && find * -type d) | comm -13 OLD-DIRS - | sed -e 's#^#@dirrm #' >> pkg-plistИ наконец, вам нужно вручную отшлифовать список упаковки. Я
обманул вас, когда сказал, что все происходит автоматически. Страницы
Справочника должны быть перечислены в файле
Makefile порта в переменных
MANn, а не в списке
упаковки. Пользовательские конфигурационные файлы должны быть удалены
или быть установлены как
filename.sample.
Файл info/dir включать в список не нужно, но
должны быть добавлены соответствующие строчки
install-info, так, как это описано в разделе о файлах в формате info. Все
библиотеки, устанавливаемые портом, должны быть перечислены так, как
это описано в разделе о динамических библиотеках.Имена пакаджейДалее описаны некоторые соглашения, которым вы должны следовать
в именовании ваших пакаджей. Они были разработаны для облегчения
просмотра каталога, так как пакаджей уже имеется достаточно много и еще
больше их появляется, а пользователи отвернутся от нас, если список не
понравится их взору!Имя пакаджа должно иметь вид
language_region-name-compiled.specifics-version.numbers.Имя пакаджа определяется как
${PKGNAMEPREFIX}${PORTNAME}${PKGNAMESUFFIX}-${PORTVERSION}.
Вы должны задавать значения переменных в соответствии с этим
форматом.FreeBSD пытается поддерживать языки, на которых разговаривают
ее пользователи. Часть language-
должна быть двухсимвольным сокращением от названия языка по
стандарту ISO-639, если порт специфичен для конкретного языка.
Примерами являются ja для японского,
ru для русского, vi для
вьетнамского, zh для китайского,
ko для корейского и de для
немецкого языков.Если ваш порт специфичен для конкретного региона внутри области
использования языка, добавьте также двухсимвольный код страны.
Примерами являются en_US для US English и
fr_CH для Swiss French.Часть language- должна задаваться в
переменной PKGNAMEPREFIX.Первая буква части name должна быть в нижнем
регистре. (Оставшаяся часть названия может содержать буквы в
верхнем регистре, так что принимайте решение сами, когда преобразуете
имя программного пакета, содержащего в имени некоторое количество
заглавных букв.) Существует традиция именовать модули для Perl 5,
добавляя впереди p5- и преобразуя пару двоеточий в
дефис; например, модуль Data::Dumper будет
именоваться p5-Data-Dumper. Если программное
обеспечение содержит в имени числа, дефисы или подчеркивания, то вы
можете включить также и их (например,
kinput2).Если порт может быть построен с различными статически заданными значениями по
умолчанию (обычно это часть имени каталога в семействе
портов), то часть -compiled.specifics
должна определять вкомпилированные значения по умолчанию (дефис
не обязателен). Примерами являются размеры бумаги и
шрифтов.Часть compiled.specifics должна
задаваться в переменной PKGNAMESUFFIX.Строка с номером версии должна следовать за дефисом
(-) и являться списком разделенных двоеточием
чисел и букв в нижнем регистре. В частности, не разрешается иметь
еще один дефис внутри строки с обозначением номера версии.
Единственным исключением является строчка pl
(означающая `уровень патчей'), которая может использоваться
только тогда, когда у программного обеспечения
нет старшего и младшего номера версии. Если в номер версии
программного обеспечения включена строчка типа "alpha", "beta", "rc"
или "pre", возьмите из неё первую букву и поставьте её непосредственно
после точки. Если после таких строк номер версии ещё продолжается,
то после буквы должно следовать число без дополнительной разделяющей
точки.Смысл такого формата заключается в удобстве сортировки портов
по номеру версии. В частности, следите за тем, чтобы компоненты
номера версии разделялись точкой, и если там присутствует дата,
то используйте формат
yyyy.mm.dd, но не
dd.mm.yyyy
или не совместимый с проблемой Г2000
yy.mm.dd.Вот несколько (реальных) примеров того, как преобразовать имя из
оригинального, придуманного авторами, к подходящему для имени
пакаджа:Имя дистрибутиваPKGNAMEPREFIXPORTNAMEPKGNAMESUFFIXPORTVERSIONОбоснованиеmule-2.2.2(пусто)mule(пусто)2.2.2Изменений не потребовалосьXFree86-3.3.6(пусто)XFree86(пусто)3.3.6Изменений не потребовалосьEmiClock-1.0.2(пусто)emiclock(пусто)1.0.2Для отдельных программ имена с заглавными буквами
запрещеныrdist-1.3alpha(пусто)rdist(пусто)1.3.aСтрочки типа alpha запрещеныes-0.9-beta1(пусто)es(пусто)0.9.b1Строчки типа beta запрещеныmailman-2.0rc3(пусто)mailman(пусто)2.0.r3Строчки типа rc запрещеныv3.3beta021.src(пусто)tiff(пусто)3.3Что это такое было вообще?tvtwm(пусто)tvtwm(пусто)pl11Всегда требуется указание номера версииpiewm(пусто)piewm(пусто)1.0Всегда требуется указание номера версииxvgr-2.10pl1(пусто)xvgr(пусто)2.10.1pl разрешено только при отсутствии
старшего/младшего номера версииgawk-2.15.6ja-gawk(пусто)2.15.6Версия на японском языкеpsutils-1.13(пусто)psutils-letter1.13Размер бумаги задается статически во время построения
пакаджаpkfonts(пусто)pkfonts3001.0Пакадж для шрифтов 300dpiЕсли в исходном коде абсолютно нет информации о номере версии и не
похоже, что автор собирается выпускать другую версию, то в качестве
номера версии задайте просто 1.0 (как в примере с
piewm выше). В противном случае спросите автора программы или
используйте дату
(yyyy.mm.dd)
в качестве номера версии.КатегорииКак вы уже знаете, порты разделяются на несколько категорий.
Но чтобы эта классификация работала хорошо, очень важно, чтобы как те,
кто занимается портированием, так и пользователи понимали, что содержит
каждая категория, и как мы определяем, что помещать в каждую
из них.Текущий список категорийВо-первых, это текущий список категорий. Те, которые отмечены
звездочкой (*), являются
виртуальными категориями—они не имеют
собственного подкаталога в дереве портов.Для каждой виртуальной категории имеется файл
pkg/COMMENT с ее однострочным описанием
в соответствующем подкаталоге (например,
archivers/pkg/COMMENT).КатегорияОписаниеafterstep*Порты, поддерживающие менеджер окон AfterStep.archiversИнструменты для работы с архивами.astroПриложения, связанные с астрономией.audioПоддержка работы со звуком.benchmarksУтилиты для измерения производительности системы.biologyПрограммное обеспечение, связанное с биологией.cadИнструменты Систем Автоматизированного
Проектирования.chineseПоддержка китайского языка.commsКоммуникационное программное обеспечение. В основном
программы для работы с последовательным портом.convertersУтилиты для преобразования символьных форматов.databasesБазы данных.deskutilsТо, что было на столе до изобретения компьютеров.develУтилиты для разработки программного обеспечения. Не
помещайте сюда библиотеки просто потому что это
библиотеки—если они подпадают под какую-то другую
категорию, то их быть здесь не должно.editorsРедакторы общего назначения. Специализированные редакторы
относят к разделу для соответствующих инструментов (например,
редактор математических формул попадает в категорию
math).elisp*Порты для Emacs lisp.emulatorsЭмуляторы других операционных систем. Эмуляторы терминалов
сюда не относятся—те, которые
разработаны для X, должны быть в категории
x11, а текстовые в
comms или misc, в
зависимости от конкретного их предназначения.frenchПоддержка французского языка.ftpКлиенты и серверы FTP. Если ваш порт понимает как FTP,
так и HTTP, поместите его в категорию ftp и
укажите вторичную категорию www.gamesИгры.germanПоддержка немецкого языка.gnome*Порты проекта GNU Object Model Environment (GNOME)
Project.graphicsГрафические утилиты.hebrewПоддержка иврита.ircУтилиты для работы с Internet Relay Chat.ipv6*Программное обеспечение, связанное с IPv6.japaneseПоддержка японского языка.javaПоддержка языка Java.kde*Порты проекта K Desktop Environment (KDE) Project.koreanПоддержка корейского языка.langЯзыки программирования.linux*Linux приложения и утилиты.mailПрограммы для работы с электронной почтой..mathПрограммное обеспечение для численных вычислений и другие
утилиты, связанные с математикой.mboneПриложения для MBone.miscРазличные утилиты—в основном то, что не попадает в
другие категории. Это единственная категория, которая не должна
указываться вместе с любой другой невиртуальной категорией. Если
вы указываете misc вместе с чем-то еще в
строке CATEGORIES, это значит, что вы можете
спокойно удалить misc и просто поместить порт
в этот другой подкаталог!netРазличное сетевое программное обеспечение.newsПрограммное обеспечение для работы с конференциями
USENET.offix*Порты из набора OffiX.palmПрограммная поддержка 3Com Palm(tm).perl5*Порты, которым для работы требуется perl версии 5.plan9*Различные программы из plan9.printПрограммное обеспечение для печати. Инструменты для верстки
(просмотрщики и тому подобное) тоже относятся сюда.python*Программное обеспечение, написанное на языке python.ruby*Программное обеспечение, написанное на языке ruby.russianПоддержка русского языка.securityПрограммы, обеспечивающие безопасность системы.shellsРазличные командные процессоры.sysutilsСистемные утилиты.tcl76*Порты, которым для работы нужен Tcl версии 7.6.tcl80*Порты, которым для работы нужен Tcl версии 8.0.tcl81*Порты, которым для работы нужен Tcl версии 8.1.tcl82*Порты, которым для работы нужен Tcl версии 8.2.textprocУтилиты для текстовой обработки. Инструменты для верстки
помещаются в print/, а не сюда.tk42*Порты, которым для работы нужен Tk версии 4.2.tk80*Порты, которым для работы нужен Tk версии 8.0.tk81*Порты, которым для работы нужен Tk версии 8.1.tk82*Порты, которым для работы нужен Tk версии 8.2.tkstep80*Порты, которым для работы нужен TkSTEP версии 8.0.vietnameseПоддержка вьетнамского языка.windowmaker*Порты, поддерживающие менеджер окон WindowMakerwwwПрограммное обеспечение, связанное с World Wide Web.
Поддержка языка HTML относится сюда же.x11X Window System и иже с ними. Эта категория предназначена
только для программного обеспечения, которое поддерживает
оконную систему. Не помещайте сюда обычные приложения X. Если
ваш порт является приложением для X, задайте
USE_XLIB (что подразумевается при
использовании USE_IMAKE) и укажите подходящую
категорию. Кроме того, многие такие приложения относятся к
категориям x11-* (смотрите ниже).x11-clocksЧасы для X11.x11-fmМенеджеры файлов для X11.x11-fontsШрифты для X11 и утилиты для работы с ними.x11-serversСерверы для X11.x11-toolkitsПакеты разработчика для X11.x11-wmОконные менеджеры для X11.zope*Поддержка zope.Выбор правильной категорииТак как многие категории перекрываются, вам часто необходимо
будет выбирать, какая их них должна быть основной для вашего порта.
Есть несколько правил, по которым можно решить этот вопрос. Вот
список приоритетов, в уменьшающейся степени предпочтения.Сначала всегда идут категории, специфичные для языков.
Например, если ваш порт устанавливает японские шрифты для X11,
то строчка CATEGORIES должна иметь вид
japanese x11-fonts.Более конкретные категории предпочтительней перед точных. В
частности, редактор HTML должен быть описан как
www editors, а не наоборот. Кроме того, вам не
нужно указывать категорию net, если порт
относится к любой из категорий irc,
mail, mbone,
news, security или
www.x11 используется как вторичная категория
только в случае, когда в качестве основной категории указан
естественный язык. В частности, вам не нужно указывать
x11 в качестве категории для
приложений X.Режимы для редактора Emacs должны
помещаться в ту же категорию, что и приложение, которое
поддерживается этим режимом, а не в editors.
Например, режим Emacs для
редактирования исходного кода некоторого языка программирования
должен быть помещен в категорию lang.Если ваш порт решительным образом не подпадает ни под какую
категорию, поместите его в misc.Если вы не уверены в правильности выбора категории, пожалуйста,
отметьте это в вашей посылке по send-pr, чтобы мы
могли обсудить это до того, как включить порт в Коллекцию. Если вы
являетесь коммиттером, пошлите замечание на адрес &a.ports;, чтобы мы
могли обсудить это—зачастую новые порты помещаются не в ту
категорию только для того, чтобы их оттуда сразу же удалили.Изменения в этом документе и системе портовЕсли вы сопровождаете большое количество портов, то должны
отслеживать &a.ports;. Важные изменения в схеме работы портов будут
объявляться здесь. Вы всегда можете найти более подробную информацию о
самых последних изменениях в
журнале изменений CVS файла bsd.port.mk.Вот, парни, и все!Итак, малыш, это был длинный рассказ, не так ли? Спасибо за то,
что вы шли с нами до самого конца. Теперь, когда вы знаете, как
создавать порты, воспользуйтесь этими знаниями и преобразуйте все, что
есть на свете, в порты! Это самый легкий способ принять участие в
Проекте FreeBSD!
:-)
diff --git a/ru_RU.KOI8-R/share/sgml/catalog b/ru_RU.KOI8-R/share/sgml/catalog
index 5ebe8768fc..ca31937605 100644
--- a/ru_RU.KOI8-R/share/sgml/catalog
+++ b/ru_RU.KOI8-R/share/sgml/catalog
@@ -1,9 +1,11 @@
-- ...................................................................... --
-- FreeBSD SGML Public Identifiers ...................................... --
- -- $FreeBSD: doc/share/sgml/catalog,v 1.9 2000/07/08 16:31:28 phantom Exp $
+ -- $FreeBSD: doc/ru_RU.KOI8-R/share/sgml/catalog,v 1.1 2000/09/28 23:29:47 nbm Exp $
--
PUBLIC "-//FreeBSD//DOCUMENT DocBook Stylesheet//EN"
"freebsd.dsl"
+PUBLIC "-//FreeBSD//ENTITIES DocBook Mailing List Entities//RU"
+ "mailing-lists.ent"
diff --git a/ru_RU.KOI8-R/books/handbook/mailing-lists.ent b/ru_RU.KOI8-R/share/sgml/mailing-lists.ent
similarity index 97%
rename from ru_RU.KOI8-R/books/handbook/mailing-lists.ent
rename to ru_RU.KOI8-R/share/sgml/mailing-lists.ent
index 4ea644a172..7d9c6be3ee 100644
--- a/ru_RU.KOI8-R/books/handbook/mailing-lists.ent
+++ b/ru_RU.KOI8-R/share/sgml/mailing-lists.ent
@@ -1,115 +1,115 @@
freebsd-advocacy@FreeBSD.org">
freebsd-announce@FreeBSD.org">
freebsd-bugs@FreeBSD.org">
freebsd-chat@FreeBSD.org">
freebsd-core@FreeBSD.org">
freebsd-current@FreeBSD.org">
cvs-all@FreeBSD.org">
freebsd-database@FreeBSD.org">
freebsd-doc@FreeBSD.org">
freebsd-emulation@FreeBSD.org">
freebsd-fs@FreeBSD.org">
freebsd-hackers@FreeBSD.org">
freebsd-hardware@FreeBSD.org">
freebsd-isdn@FreeBSD.org">
freebsd-isp@FreeBSD.org">
freebsd-java@FreeBSD.org">
freebsd-jobs@FreeBSD.org">
freebsd-mobile@FreeBSD.org">
freebsd-mozilla@FreeBSD.org">
freebsd-multimedia@FreeBSD.org">
freebsd-net@FreeBSD.org">
freebsd-newbies@FreeBSD.org">
new-bus-arch@bostonradio.org">
freebsd-ports@FreeBSD.org">
freebsd-questions@FreeBSD.org">
freebsd-scsi@FreeBSD.org">
freebsd-security@FreeBSD.org">
freebsd-security-notifications@FreeBSD.org">
freebsd-small@FreeBSD.org">
freebsd-smp@FreeBSD.org">
freebsd-stable@FreeBSD.org">
freebsd-tokenring@FreeBSD.org">
www@FreeBSD.org">
majordomo@FreeBSD.org">
ru-freebsd-doc@FreeBSD.ru">