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 Handbuch The FreeBSD German Documentation Project
de-bsd-translators@de.FreeBSD.org
February 1999 1995 1996 1997 1998 1999 2000 2001 The 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' Handbook The FreeBSD Documentation Project August 2000 2000 2001 The 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. Introduction Developing on FreeBSD This 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 Vision Architectural Overview The Layout of /usr/src The 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. Directory Description bin/ Source for files in /bin contrib/ Source for files from contributed software. crypto/ DES source etc/ Source for files in /etc games/ Source for files in /usr/games gnu/ Utilities covered by the GNU Public License include/ Source for files in /usr/include kerberosIV/ Source for Kerbereros version IV kerberos5/ Source for Kerbereros version 5 lib/ Source for files in /usr/lib libexec/ Source for files in /usr/libexec release/ Files required to produce a FreeBSD release sbin/ Source for files in /sbin secure/ FreeSec sources share/ Source for files in /sbin sys/ Kernel source files tools/ Tools used for maintenance and testing of FreeBSD usr.bin/ Source for files in /usr/bin usr.sbin/ Source for files in /usr/sbin Basics &chap.tools; &chap.secure; Kernel History of the Unix Kernel Some 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 System UFS UFS, FFS, Ext2FS, JFS, inodes, buffer cache, labeling, locking, metadata, soft-updates, LFS, portalfs, procfs, vnodes, memory sharing, memory objects, TLBs, caching Interprocess Communication Signals Signals, pipes, semaphores, message queues, shared memory, ports, sockets, doors Networking Sockets Sockets, bpf, IP, TCP, UDP, ICMP, OSI, bridging, firewalling, NAT, switching, etc &chap.ipv6; Network Filesystems AFS AFS, NFS, SANs etc] Terminal Handling Syscons Syscons, tty, PCVT, serial console, screen savers, etc Sound OSS OSS, waveforms, etc Device Drivers &chap.driverbasics; &chap.isa; &chap.pci; &chap.scsi; &chap.usb; NewBus This chapter will talk about the FreeBSD NewBus architecture. Architectures &chap.x86; Alpha Talk 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-64 Talk about the architectural specifics of FreeBSD/ia64. Debugging Truss various descriptions on how to debug certain aspects of the system using truss, ktrace, gdb, kgdb, etc Compatibility Layers Linux Linux, SVR4, etc Appendices Dave A Patterson John L Hennessy 1998Morgan Kaufmann Publishers, Inc. 1-55860-428-6 Morgan Kaufmann Publishers, Inc. Computer Organization and Design The Hardware / Software Interface 1-2 W. Richard Stevens 1993Addison Wesley Longman, Inc. 0-201-56317-7 Addison Wesley Longman, Inc. Advanced Programming in the Unix Environment 1-2 Marshall Kirk McKusick Keith Bostic Michael J Karels John S Quarterman 1996Addison-Wesley Publishing Company, Inc. 0-201-54979-4 Addison-Wesley Publishing Company, Inc. The Design and Implementation of the 4.4 BSD Operating System 1-2 Aleph One Phrack 49; "Smashing the Stack for Fun and Profit" Chrispin Cowan Calton Pu Dave Maier StackGuard; Automatic Adaptive Detection and Prevention of Buffer-Overflow Attacks Todd Miller Theo de Raadt strlcpy 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' Handbook The FreeBSD Documentation Project August 2000 2000 2001 The 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. Introduction Developing on FreeBSD This 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 Vision Architectural Overview The Layout of /usr/src The 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. Directory Description bin/ Source for files in /bin contrib/ Source for files from contributed software. crypto/ DES source etc/ Source for files in /etc games/ Source for files in /usr/games gnu/ Utilities covered by the GNU Public License include/ Source for files in /usr/include kerberosIV/ Source for Kerbereros version IV kerberos5/ Source for Kerbereros version 5 lib/ Source for files in /usr/lib libexec/ Source for files in /usr/libexec release/ Files required to produce a FreeBSD release sbin/ Source for files in /sbin secure/ FreeSec sources share/ Source for files in /sbin sys/ Kernel source files tools/ Tools used for maintenance and testing of FreeBSD usr.bin/ Source for files in /usr/bin usr.sbin/ Source for files in /usr/sbin Basics &chap.tools; &chap.secure; Kernel History of the Unix Kernel Some 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 System UFS UFS, FFS, Ext2FS, JFS, inodes, buffer cache, labeling, locking, metadata, soft-updates, LFS, portalfs, procfs, vnodes, memory sharing, memory objects, TLBs, caching Interprocess Communication Signals Signals, pipes, semaphores, message queues, shared memory, ports, sockets, doors Networking Sockets Sockets, bpf, IP, TCP, UDP, ICMP, OSI, bridging, firewalling, NAT, switching, etc &chap.ipv6; Network Filesystems AFS AFS, NFS, SANs etc] Terminal Handling Syscons Syscons, tty, PCVT, serial console, screen savers, etc Sound OSS OSS, waveforms, etc Device Drivers &chap.driverbasics; &chap.isa; &chap.pci; &chap.scsi; &chap.usb; NewBus This chapter will talk about the FreeBSD NewBus architecture. Architectures &chap.x86; Alpha Talk 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-64 Talk about the architectural specifics of FreeBSD/ia64. Debugging Truss various descriptions on how to debug certain aspects of the system using truss, ktrace, gdb, kgdb, etc Compatibility Layers Linux Linux, SVR4, etc Appendices Dave A Patterson John L Hennessy 1998Morgan Kaufmann Publishers, Inc. 1-55860-428-6 Morgan Kaufmann Publishers, Inc. Computer Organization and Design The Hardware / Software Interface 1-2 W. Richard Stevens 1993Addison Wesley Longman, Inc. 0-201-56317-7 Addison Wesley Longman, Inc. Advanced Programming in the Unix Environment 1-2 Marshall Kirk McKusick Keith Bostic Michael J Karels John S Quarterman 1996Addison-Wesley Publishing Company, Inc. 0-201-54979-4 Addison-Wesley Publishing Company, Inc. The Design and Implementation of the 4.4 BSD Operating System 1-2 Aleph One Phrack 49; "Smashing the Stack for Fun and Profit" Chrispin Cowan Calton Pu Dave Maier StackGuard; Automatic Adaptive Detection and Prevention of Buffer-Overflow Attacks Todd Miller Theo de Raadt strlcpy 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 Handbook The FreeBSD Documentation Project February 1999 1995 1996 1997 1998 1999 2000 2001 The 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 Handbook The FreeBSD Documentation Project April 2000 2000 The FreeBSD Documentation Project &bookinfo.legalnotice; Making a port yourself So, now you are interested in making your own port or upgrading an existing one? Great! What follows are some guidelines for creating a new port for FreeBSD. If you want to upgrade an existing port, you should read this and then read . When this document is not sufficiently detailed, you should refer to /usr/ports/Mk/bsd.port.mk, which all port Makefiles include. Even if you do not hack Makefiles daily, it is well commented, and you will still gain much knowledge from it. Additionally, you may send specific questions to 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 Porting This 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 <filename>Makefile</filename> The 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 files There 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. <filename>pkg-comment</filename> This 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 screen <filename>pkg-descr</filename> This 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.edu <filename>pkg-plist</filename> This 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/oneko Refer 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 file Just type make makesum. The ports make rules will automatically generate the file distinfo. Testing the port You 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 port pkg-plist contains everything that is installed by your port Your port can be installed multiple times using the reinstall target Your port cleans up after itself upon deinstall Recommended test ordering make install make package make deinstall pkg_add package-name make deinstall make reinstall make package Make 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 <command>portlint</command> Please 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 port First, 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 Porting Ok, 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 work First, 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 sources Get 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 port Unpack 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. Patching In 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). Configuring Include 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 input If 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 Makefile Configuring 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 source Does 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. <makevar>PORTNAME</makevar> and <makevar>PORTVERSION</makevar> You should set PORTNAME to the base name of your port, and PORTVERSION to the version number of the port. <makevar>PORTREVISION</makevar> and <makevar>PORTEPOCH</makevar> <makevar>PORTREVISION</makevar> The 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. <makevar>PORTEPOCH</makevar> From 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 <makevar>PORTREVISION</makevar> and <makevar>PORTEPOCH</makevar> usage The gtkmumble port, version 0.10, is committed to the ports collection. PORTNAME= gtkmumble PORTVERSION= 0.10 PKGNAME 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= 1 PKGNAME becomes gtkmumble-0.10_1 A 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= 1 PKGNAME becomes gtkmumble-0.2,1 The next release is 0.3. Since PORTEPOCH never decreases, the version variables are now: PORTNAME= gtkmumble PORTVERSION= 0.3 PORTEPOCH= 1 PKGNAME becomes gtkmumble-0.3,1 If 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. <makevar>PKGNAMEPREFIX</makevar> and <makevar>PKGNAMESUFFIX</makevar> Two 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. <makevar>DISTNAME</makevar> DISTNAME 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). <makevar>CATEGORIES</makevar> When 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. <makevar>MASTER_SITES</makevar> Record 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= applications These 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. <makevar>PATCHFILES</makevar> If 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. <makevar>MAINTAINER</makevar> Set your mail-address here. Please. :-) For a detailed description of the responsibilities of maintainers, refer to the MAINTAINER on Makefiles section. Dependencies Many 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. <makevar>LIB_DEPENDS</makevar> This 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. <makevar>RUN_DEPENDS</makevar> This 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/tk80 will 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. <makevar>BUILD_DEPENDS</makevar> This 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_TARGET <makevar>FETCH_DEPENDS</makevar> This 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. <makevar>DEPENDS</makevar> If 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 variables Define 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 dependencies As 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 dependencies Some 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 mechanisms If 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 considerations There are some more things you have to take into account when you create a port. This section explains the most common of those. Shared Libraries If 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/bar Note 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. <makevar>MASTERDIR</makevar> If 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} .endif japanese/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 entire xdvi118/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 versions Please read our policy on shared library versioning to understand what to do with shared library versions in general. Do not blindly assume software authors know what they are doing; many of them do not. It is very important that these details are carefully considered, as we have quite a unique situation where we are trying to have dozens of potentially incompatible software pairs co-exist. Careless port imports have caused great trouble regarding shared libraries in the past (ever wondered why the port jpeg-6b has a shared library version of 9?). 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. Manpages The 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= yes This 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.gz Additionally ${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 Motif There 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). <makevar>REQUIRES_MOTIF</makevar> If 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. <makevar>MOTIFLIB</makevar> This 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 fonts If 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 files The 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-2 Add 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-doc The @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 <filename>pkg-<replaceable>*</replaceable></filename> files There are some tricks we have not mentioned yet about the pkg-* files that come in handy sometimes. <filename>pkg-message</filename> If 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. <filename>pkg-install</filename> If 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. <filename>pkg-req</filename> If 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 <filename>pkg-plist</filename> based on make variables Some 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 <filename>pkg-<replaceable>*</replaceable></filename> files All 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}.) Variable Default value COMMENT ${PKGDIR}/pkg-comment DESCR ${PKGDIR}/pkg-descr PLIST ${PKGDIR}/pkg-plist PKGINSTALL ${PKGDIR}/pkg-install PKGDEINSTALL ${PKGDIR}/pkg-deinstall PKGREQ ${PKGDIR}/pkg-req PKGMESSAGE ${PKGDIR}/pkg-message Please 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 Problems Some 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. Upgrading When 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! <anchor id="porting-dads">Dos and Don'ts Here 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 Binaries Do 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/xdl Use 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_* macros Do 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. <makevar>WRKDIR</makevar> Do 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. <makevar>WRKDIRPREFIX</makevar> Make 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 versions You 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> #endif to 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> #endif Do 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 #endif Release __FreeBSD_version 2.0-RELEASE 119411 2.1-CURRENT 199501, 199503 2.0.5-RELEASE 199504 2.2-CURRENT before 2.1 199508 2.1.0-RELEASE 199511 2.2-CURRENT before 2.1.5 199512 2.1.5-RELEASE 199607 2.2-CURRENT before 2.1.6 199608 2.1.6-RELEASE 199612 2.1.7-RELEASE 199612 2.2-RELEASE 220000 2.2.1-RELEASE 220000 (no change) 2.2-STABLE after 2.2.1-RELEASE 220000 (no change) 2.2-STABLE after texinfo-3.9 221001 2.2-STABLE after top 221002 2.2.2-RELEASE 222000 2.2-STABLE after 2.2.2-RELEASE 222001 2.2.5-RELEASE 225000 2.2-STABLE after 2.2.5-RELEASE 225001 2.2-STABLE after ldconfig -R merge 225002 2.2.6-RELEASE 226000 2.2.7-RELEASE 227000 2.2-STABLE after 2.2.7-RELEASE 227001 2.2-STABLE after &man.semctl.2; change 227002 2.2.8-RELEASE 228000 2.2-STABLE after 2.2.8-RELEASE 228001 3.0-CURRENT before &man.mount.2; change 300000 3.0-CURRENT after &man.mount.2; change 300001 3.0-CURRENT after &man.semctl.2; change 300002 3.0-CURRENT after ioctl arg changes 300003 3.0-CURRENT after ELF conversion 300004 3.0-RELEASE 300005 3.0-CURRENT after 3.0-RELEASE 300006 3.0-STABLE after 3/4 branch 300007 3.1-RELEASE 310000 3.1-STABLE after 3.1-RELEASE 310001 3.1-STABLE after C++ constructor/destructor order change 310002 3.2-RELEASE 320000 3.2-STABLE 320001 3.2-STABLE after binary-incompatible IPFW and socket changes 320002 3.3-RELEASE 330000 3.3-STABLE 330001 3.3-STABLE after adding &man.mkstemp.3; to libc 330002 3.4-RELEASE 340000 3.4-STABLE 340001 4.0-CURRENT after 3.4 branch 400000 4.0-CURRENT after change in dynamic linker handling 400001 4.0-CURRENT after C++ constructor/destructor order change 400002 4.0-CURRENT after functioning &man.dladdr.3; 400003 4.0-CURRENT after __deregister_frame_info dynamic linker bug fix (also 4.0-CURRENT after EGCS 1.1.2 integration) 400004 4.0-CURRENT after &man.suser.9; API change (also 4.0-CURRENT after newbus) 400005 4.0-CURRENT after cdevsw registration change 400006 4.0-CURRENT after the addition of so_cred for socket level credentials 400007 4.0-CURRENT after the addition of a poll syscall wrapper to libc_r 400008 4.0-CURRENT after the change of the kernel's dev_t type to struct specinfo pointer 400009 4.0-CURRENT after fixing a hole in &man.jail.2; 400010 4.0-CURRENT after the sigset_t datatype change 400011 4.0-CURRENT after the cutover to the GCC 2.95.2 compiler 400012 4.0-CURRENT after adding pluggable linux-mode ioctl handlers 400013 4.0-CURRENT after importing OpenSSL 400014 4.0-CURRENT after the C++ ABI change in GCC 2.95.2 from -fvtable-thunks to -fno-vtable-thunks by default 400015 4.0-CURRENT after importing OpenSSH 400016 4.0-RELEASE 400017 4.0-STABLE after 4.0-RELEASE 400018 4.0-STABLE after merging libxpg4 code into libc. 400020 4.0-STABLE after upgrading Binutils to 2.10.0, ELF branding changes, and tcsh in the base system. 400021 4.1-RELEASE 410000 4.1-STABLE after 4.1-RELEASE 410001 4.1-STABLE after &man.setproctitle.3; moved from libutil to libc. 410002 4.1.1-RELEASE 411000 4.1.1-STABLE after 4.1.1-RELEASE 411001 4.2-RELEASE 420000 4.2-STABLE after combining libgcc.a and libgcc_r.a, and associated GCC linkage changes. 420001 5.0-CURRENT 500000 5.0-CURRENT after adding addition ELF header fields, and changing our ELF binary branding method. 500001 5.0-CURRENT after kld metadata changes. 500002 5.0-CURRENT after buf/bio changes. 500003 5.0-CURRENT after binutils upgrade. 500004 5.0-CURRENT after merging libxpg4 code into libc and after TASKQ interface introduction. 500005 5.0-CURRENT after the addition of AGP interfaces. 500006 5.0-CURRENT after Perl upgrade to 5.6.0 500007 5.0-CURRENT after the update of KAME code to 2000/07 sources. 500008 5.0-CURRENT after ether_ifattach() and ether_ifdetach() changes. 500009 5.0-CURRENT after changing mtree defaults back to original variant, adding -L to follow symlinks. 500010 5.0-CURRENT after kqueue API changed. 500011 5.0-CURRENT after &man.setproctitle.3; moved from libutil to libc. 500012 5.0-CURRENT after the first SMPng commit. 500013 5.0-CURRENT after <sys/select.h> moved to <sys/selinfo.h>. 500014 5.0-CURRENT after combining libgcc.a and libgcc_r.a, and associated GCC linkage changes. 500015 5.0-CURRENT after change allowing libc and libc_r to be linked together, deprecating -pthread option. 500016 5.0-CURRENT after switch from struct ucred to struct xucred to stabilize kernel-exported API for mountd et al. 500017 5.0-CURRENT after addition of CPUTYPE make variable for controlling CPU-specific optimizations. 500018 5.0-CURRENT after locale names renaming. 500020 Note 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 <filename>bsd.port.mk</filename> Do 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). Variable Description ARCH The architecture as returned by uname -m (e.g., i386) OPSYS The operating system type, as returned by uname -s (e.g., FreeBSD) OSREL The release version of the operating system (e.g., 2.1.5 or 2.2.7) OSVERSION The numeric version of the operating system, same as __FreeBSD_version. PORTOBJFORMAT The object format of the system (aout or elf) LOCALBASE The base of the “local” tree (e.g., /usr/local/) X11BASE The base of the “X11” tree (e.g., /usr/X11R6) PREFIX Where 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 .endif Install additional documentation If 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 .endif Do 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. <makevar>DIST_SUBDIR</makevar> Do 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 information Do 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 strings Do 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 diff Using 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. <makevar>PREFIX</makevar> Do 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-name If 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. Subdirectories Try 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 directories Do 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/oneko However, 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 || true This 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. UIDs If 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:/nonexistent Please 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 rationally The 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 <makevar>CFLAGS</makevar> The 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 -Werror Here is an example which does not respect the CFLAGS variable: CFLAGS = -Wall -Werror The 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 files If 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. Portlint Do check your work with portlint before you submit or commit it. Feedback Do 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. <filename>README.html</filename> Do not include the README.html file. This file is not part of the cvs collection but is generated using the make readme command. Miscellanea The 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 <filename>Makefile</filename> Here 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 creation First, make sure your port is almost complete, with only pkg-plist missing. Create an empty pkg-plist. &prompt.root; touch pkg-plist Next, 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-name Store the directory structure in a new file. &prompt.root; (cd /var/tmp/port-name && find * -type d) > OLD-DIRS If 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-plist You 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-plist Finally, 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 Names The 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 Name PKGNAMEPREFIX PORTNAME PKGNAMESUFFIX PORTVERSION Reason mule-2.2.2 (empty) mule (empty) 2.2.2 No changes required XFree86-3.3.6 (empty) XFree86 (empty) 3.3.6 No changes required EmiClock-1.0.2 (empty) emiclock (empty) 1.0.2 No uppercase names for single programs rdist-1.3alpha (empty) rdist (empty) 1.3.a No strings like alpha allowed es-0.9-beta1 (empty) es (empty) 0.9.b1 No strings like beta allowed mailman-2.0rc3 (empty) mailman (empty) 2.0.r3 No strings like rc allowed v3.3beta021.src (empty) tiff (empty) 3.3 What the heck was that anyway? tvtwm (empty) tvtwm (empty) pl11 Version string always required piewm (empty) piewm (empty) 1.0 Version string always required xvgr-2.10pl1 (empty) xvgr (empty) 2.10.1 pl allowed only when no major/minor version numbers gawk-2.15.6 ja- gawk (empty) 2.15.6 Japanese language version psutils-1.13 (empty) psutils -letter 1.13 Papersize hardcoded at package build time pkfonts (empty) pkfonts 300 1.0 Package for 300dpi fonts If 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. Categories As 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 categories First, 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). Category Description afterstep* Ports to support the AfterStep window manager. archivers Archiving tools. astro Astronomical ports. audio Sound support. benchmarks Benchmarking utilities. biology Biology-related software. cad Computer aided design tools. chinese Chinese language support. comms Communication software. Mostly software to talk to your serial port. converters Character code converters. databases Databases. deskutils Things that used to be on the desktop before computers were invented. devel Development 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. editors General editors. Specialized editors go in the section for those tools (e.g., a mathematical-formula editor will go in math). elisp* Emacs-lisp ports. emulators Emulators 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. french French language support. ftp FTP client and server utilities. If your port speaks both FTP and HTTP, put it in ftp with a secondary category of www. games Games. german German language support. gnome* Ports from the GNU Object Model Environment (GNOME) Project. graphics Graphics utilities. hebrew Hebrew language support. irc Internet Relay Chat utilities. ipv6* IPv6 related software. japanese Japanese language support. java Java language support. kde* Ports from the K Desktop Environment (KDE) Project. korean Korean language support. lang Programming languages. linux* Linux applications and support utilities. mail Mail software. math Numerical computation software and other utilities for mathematics. mbone MBone applications. misc Miscellaneous 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! net Miscellaneous networking software. news USENET news software. offix* Ports from the OffiX suite. palm Software support for the 3Com Palm(tm) series. perl5* Ports that require perl version 5 to run. picobsd Ports to support PicoBSD. plan9* Various programs from Plan9. print Printing software. Desktop publishing tools (previewers, etc.) belong here too. python* Software written in python. ruby* Software written in ruby. russian Russian language support. science Scientific ports that don't fit into other categories such as astro, biology and math. security Security utilities. shells Command line shells. sysutils System 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. textproc Text 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. ukrainian Ukrainian language support. vietnamese Vietnamese language support. windowmaker* Ports to support the WindowMaker window manager www Software related to the World Wide Web. HTML language support belongs here too. x11 The 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-clocks X11 clocks. x11-fm X11 file managers. x11-fonts X11 fonts and font utilities. x11-servers X11 servers. x11-toolkits X11 toolkits. x11-wm X11 window managers. zope* Zope support. Choosing the right category As 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 system If 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 FreeBSD Proyecto de Documentacion de FreeBSD
doc@FreeBSD.org
Febrero 1999 1995 1996 1997 1998 1999 2000 2001 The FreeBSD Documentation Project Bienvenido 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 “<foreignphrase>Committer</foreignphrase>” Projet de Documentation de FreeBSD Septembre 1999 1999 Projet de Documentation de FreeBSD Nouveau “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.html Bonne chance, et bienvenue à bord ! &abstract.license; &abstract.disclaimer; &trans.a.haby; Détails d'organisation Machine d'archive principale freefall.FreeBSD.org Machine d'archive internationale pour les codes de cryptographie internat.FreeBSD.org Méthode de connexion &man.ssh.1; Répertoire CVSROOT /home/ncvs Répertoire CVSROOT pour la version internationale des codes de cryptographie /home/cvs.crypt Administrateurs 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 diffusion cvs-committers@FreeBSD.org Etiquettes CVS importantes RELENG_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 CVS Les 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 Traditions Les 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éveloppeurs Si 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. GNATS Le 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.html http://www.FreeBSD.org/support.html http://www.FreeBSD.org/send-pr.html &man.send-pr.1; Who's Who En 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 à <application>SSH</application> Mettez à 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 <foreignphrase>Committers</foreignphrase> FreeBSD Respectez 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étails Respectez 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 #5 C'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 suggestions Quand 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és Importer un nouveau logiciel Comment 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 package Le 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 archives Quand 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/modules Si 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és Qu'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 diverses Comment 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 FreeBSD Eric L. Hernes &artheader.copyright; erich@rrnet.com 29 Mai 1996 Ce 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.x DШ 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ère Structures de données Structure cdevsw Points d'entrée <function>d_open()</function> 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. <function>d_close()</function> 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(). <function>d_read()</function> et <function>d_write()</function> 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(). <function>d_ioctl()</function> 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). <function>d_stop()</function> <function>d_reset()</function> <function>d_devtotty()</function> <function>d_poll()</function> (3.0 et plus) ou <function>d_select()</function> (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); } <function>d_mmap()</function> <function>d_strategy()</function> 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ête Bloc Structures de données Structure struct bdevsw Structure struct buf Points d'entrée <function>d_open()</function> Décrit dans la section périphérique de caractère. <function>d_close()</function> Décrit dans la section périphérique de caractère. <function>d_strategy()</function> Décrit dans la section périphérique de caractère. <function>d_ioctl()</function> Décrit dans la section périphérique de caractère. <function>d_dump()</function> <function>d_psize()</function> Fichiers d'en-tête Réseau Structure struct ifnet Points d'entrée <function>if_init()</function> <function>if_output()</function> <function>if_start()</function> <function>if_done()</function> <function>if_ioctl()</function> <function>if_watchdog()</function> Fichiers d'en-tête Protocole de communication Structures de données Structure struct linesw Points d'entrée <function>l_open()</function> <function>l_close()</function> <function>l_read()</function> <function>l_write()</function> <function>l_ioctl()</function> <function>l_rint()</function> <function>l_start()</function> <function>l_modem()</function> Fichiers d'en-tête Bus Supportés ISA -- Architecture Standard d'Industrie (<foreignphrase>Industry Standard Architecture</foreignphrase> Structures de données Structure <citerefentry><refentrytitle>struct isa_device</refentrytitle></citerefentry> Cette 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 <citerefentry><refentrytitle>struct isa_driver</refentrytitle></citerefentry> Cette 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ée <function>probe()</function> 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. <function>attach()</function> 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ête EISA -- Architecture иtendue de Standard industriel (<foreignphrase>Extended Industry Standard Architecture</foreignphrase>) Structures de données Structure struct eisa_dev Structure struct isa_driver Points d'entrée <function>probe()</function> Décrit dans la section de périphérique ISA. <function>attach()</function> Décrit dans la section de périphérique ISA. Fichiers d'en-tête PCI -- Bus d'interconnexion Périphérique (<foreignphrase>Peripheral Computer Interconnect</foreignphrase>) Structures de données Structure struct pci_device nom : 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ée <function>probe()</function> <function>attach()</function> <function>shutdown()</function> Fichiers d'en-tête SCSI -- <foreignphrase>Small Computer Systems Interface</foreignphrase> Structure de données Structure struct scsi_adapter Structure struct scsi_device Structure struct scsi_ctlr_config Structure struct scsi_device_config Structure struct scsi_link Points d'entrée <function>attach()</function> <function>init()</function> Fichiers d'en-tête PCCARD (PCMCIA) Structure de données Structure struct slot_cont Structure struct pccard_drv Structure struct pccard_dev Structure struct slot Points d'entrée <function>handler()</function> <function>unload()</function> <function>suspend()</function> <function>init()</function> Fichiers d'en-tête <pccard/slot.h> Incorporation dans le noyau Dans 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érique Le 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.c Maintenant 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()'' <ulink url="http://www.freebsd.org/cgi/man.cgi?config(8)">config</ulink> 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érique Caractère Bloc Réseau Line discipline Idiosyncrasies du type bus ISA EISA PCI SCSI PCCARD Support du noyau Structures de données Structure <citerefentry><refentrytitle>struct kern_devconf</refentrytitle></citerefentry> Cette 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 <citerefentry><refentrytitle>struct proc</refentrytitle></citerefentry> 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 <citerefentry><refentrytitle>struct buf</refentrytitle></citerefentry> La 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 <citerefentry><refentrytitle>struct uio</refentrytitle></citerefentry> Cette 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; }; Fonctions plein Ré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 Jerry Kendall
jerry@kcis.com
28 Décembre 1996 1996 Jerry Kendall Avec 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 : <filename>config.sys</filename> [menu] menuitem=normal, normal menuitem=unix, unix [normal] .... config.sys habituel ... [unix] <filename>autoexec.bat</filename> @ECHO OFF goto %config% :normal ... autoexec.bat habituel ... goto end :unix cd \netboot nb8390.com :end Gé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éseau Dé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 \netboot C:> nb8390 Boot 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/bootptab Si 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 : altair nom du système sans disque, sans nom de domaine ht=ether type matériel “ethernet” ha=004001432666 adresse matérielle (le nombre que vous avez noté auparavant) sm=255.255.255.0 masque de sous-réseau hn dit au serveur de donner au client son nom de machine ds=199.246.76.1 dit au client quel est son serveur de noms de domaine ip=199.246.76.2 dit au client quelle est son adresse IP gw=199.246.76.1 dit au client quelle est sa passerelle par défaut vm=... laissez cela tel que Veillez à 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.com La 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/run Et 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/MAKEDEV N'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 1 Vos 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ères Un guide utilisateur Dave Bodenstab &artheader.copyright; imdave@synet.net Mercredi 7 Aout 1996 Ce 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; Introduction Il 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émentaire Il 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, .pfb Polices PostScript “Type 1”. .pfa est le format Ascii et .pfb le format Binaire. .afm Le fichier de dimensions d'une police “Type 1”. .pfm Le fichier de dimensions pour l'impression d'une police “Type 1”. .ttf Police “True Type”. .fot Référence indirecte à une police “True Type” (ce n'est pas la police elle-même). .fon, .fnt Police 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 .afm Pilote syscons Oui GhostScript Oui Oui Oui X11 Oui Oui Groff Oui Oui Povray Oui Le 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 lignes Il 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 vidcontrol 1: bash$ vidcontrol VGA_80x60 Différents programmes en mode plein-écran, tel vi 1, doivent pouvoir déterminer la taille actuelle de l'écran. Elle peut être configurée avec stty 1: bash$ stty crt rows 60 columns 80 Pour 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: stty 1, vidcontrol 1. 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/type1 bash$ cd /usr/local/share/fonts/type1 Y 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 >>INDEX Pour 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 strings 1 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: Casse Appelons simplement toutes nos nouvelles polices type1. Famille Le nom de la police. Graisse Normal, gras, médium, semi-gras, etc. D'après les résultats de strings 1 ci-dessus, la police a une graisse médium. Inclinaison roman, italique ou oblique. Comme ItaliqueAngle vaut 0, nous utiliserons roman. Largeur Normale, large, condensée, étendue, etc. Jusqu'à ce que nous la déterminions à l'usage, nous supposerons qu'elle est normale. Style supplémentaire Habituellement non renseigné, mais nous nous en servons pour indiquer que la police contient des majuscules décoratives. Espacement Proportionnel 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 xfontsel 1 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 à X11 bash$ cd /usr/X11R6/lib/X11/fonts/Type1 bash$ 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 ligne bash$ ex fonts.dir :1p 25 :1c 26 . :$a showboat.pfb -type1-showboat-medium-r-normal-decorative-0-0-0-0-p-0-iso8859-1 . :wq fonts.scale et fonts.dir sont apparemment identiques bash$ cp fonts.dir fonts.scale Informer X11 des modifications bash$ xset fp rehash Visualiser la nouvelle police bash$ xfontsel -pattern -type1-* Références: xfontsel 1, xset 1, The X Window System in a Nutshell, O'Reilly & Associates. Utiliser les polices “Type 1” avec GhostScript GhostScript 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 GhostScript bash$ cd /usr/local/share/ghostscript/fonts bash$ ln -s /usr/local/share/fonts/type1/showboat.pfb . Editer le fichier Fontmap pour que GhostScript ait connaissance de la nouvelle police bash$ cd /usr/local/share/ghostscript/4.01 bash$ ex Fontmap :$a /Showboat (showboat.pfb) ; % From CICA /fonts/atm/showboat :wq Utiliser GhostScript pour visualiser la police bash$ 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> quit Références: fonts.txt de la distribution de GhostScript 4.01. Utiliser les polices “Type 1” avec Groff Maintenant 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 /tmp bash$ ex /tmp/afmtodit.pl :1c #!/usr/bin/perl -P- . :wq Cet 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 ^M Il faut les convertir au style Unix avec des lignes terminées par des ^J bash$ cd /tmp bash$ cat /usr/local/share/fonts/type1/showboat.afm | tr '\015' '\012' >showboat.afm Créons maintenant le fichier de police groff bash$ cd /usr/share/groff_font/devps bash$ /tmp/afmtodit.pl -d DESC -e text.enc /tmp/showboat.afm generate/textmap SHOWBOAT La 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 .pfa bash$ fgrep internalname SHOWBOAT internalname Showboat Dire à groff qu'il faut charger la police bash$ ex download :$a Showboat showboat.pfa . :wq Pour tester la police: bash$ cd /tmp bash$ cat >exemple.t <<EOF .sp 5 .ps 15 C'est un exemple de police Showboat: .br .ps 48 .vs (\n(.s+2)p .sp .ft SHOWBOAT ABCDEFGHI .br JKLMNOPQR .br STUVWXYZ .sp .ps 16 .vs (\n(.s+2)p .fp 5 SHOWBOAT .ft 5 Utilisée comme première lettre d'un paragraphe. Cela ressemblera à: .sp50p \s(48\f5V\s0\fRoici la première phrase d'un paragraphe qui utilise la police showboat pour sa première lettre. Il faut augmenter l'espacement vertical pour laisser de la place pour la première lettre. EOF bash$ groff -Tps exemple.t >exemple.ps Pour utiliser GhostScript/GhostView bash$ ghostview exemple.ps Pour l'imprimer bash$ lpr -Ppostscript exemple.ps Références: /usr/src/gnu/usr.bin/groff/afmtodit/afmtodit.man, groff_font 5, groff_char 5, pfbtops 1. 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 questions Que 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-RELEASE Un guide Doug White &artheader.copyright; dwhite@resnet.uoregon.edu Mars 1997 Ce 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éfinitions Ré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éfinitions La 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 à éviter Installer 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 amovibles Les 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é Introduction Cette 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/sysinstall sur 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 commande Exé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=2 disklabel /dev/rwd2 | disklabel -B -R -r wd2 /dev/stdin # Nous ne voulons qu'une partition, utiliser la tranche 'c' devrait aller: newfs /dev/rwd2c Si 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=2 disklabel /dev/r$d > /tmp/label # Modifiez le label du disque pour ajouter des partitions: vi /tmp/label disklabel -B -R -r wd2 /tmp/label # Créez les systèmes de fichiers sur les partitions avec newfs selon les besoins Votre disque est maintenant prêt à être utilisé. Formater des disques en mode compatible Introduction Travailler 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 Sysinstall Lancez sysinstall en tant que super-utilisateur root en tapant: &prompt.root; /stand/sysinstall sur 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 disques Ajout d'espace de pagination Au 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 space Copier le contenu d'un disque sur un autre Proposé 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/home Créer des disques à écritures réparties avec <devicename>ccd</devicename> Commandes 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 ccd 4 et ccdconfig 4 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/rccd0c Vous pouvez maintenant monter et utiliser votre CCD en le référençant comme périphérique /dev/ccd0c. Remerciements L'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.x Ben Black &artheader.copyright; black@cypher.net &abstract.license; &abstract.disclaimer; &trans.a.haby; Introduction Dé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 <command>ifconfig</command> ifconfig 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 alias Ce 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 -alias Il 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 <command>route</command> route 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 0 Cela 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.10 De 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 travail Maintenant 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 -nr Dans 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.10 Si 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 place Maintenant 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'aide M'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 1997 Ce 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éalables Faites une sauvegarde Je 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 diffusion Les 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 <filename>/etc/make.conf</filename> Reportez-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.</para> <para>Cette définition a disparu depuis la version 2.2.2 de FreeBSD.</para> </note> <para>Examinez les autres définitions (COPTFLAGS, NOPORTDOCS et ainsi de suite) et décidez de celles qui vous conviennent.</para> </sect1> <sect1> <title>Mettez à jour le fichier <filename>/etc/group</filename> Le 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.</para> <para>Cela dit, si vous avez confiance en vous, vous pouvez vous en passer.</para> <note> <title>Version 2.2.5 et ultérieure Comme 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 <filename>/usr/obj</filename> Les 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 <title>Toutes versions Vous 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 make 1 . 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, est une option que vous donnez à make 1 . Reportez-vous aux pages de manuel pour connaître les options disponibles. 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 à make 1 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 à make 1 , et votre commande sera simplement: make cible Enregistrez le résultat C'est une bonne idée d'enregistrer le résultat de make 1 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 script 1 , 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 world Version 2.2.5 et ultérieure A 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 à make 1 . 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érieure Si vous êtes sur la branche -current, vous pouvez aussi donner l'option à 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 make 1 à 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.</para> <para>En règle générale, un P6 200MHz avec plus de 32MB de RAM et des disques SCSI corrects exécutera <command>make world</command> en environ une heure et demie. Un P133 32MB prendra 5 à 6 heures. Revoyez ces chiffres à la baisse si vos machines sont plus lentes…</para> </sect2> </sect1> <sect1> <title>Mettez à jour <filename>/etc</filename> Recompiler 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/etc n'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 <filename>/etc</filename> Bien 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.old fera l'affaire ( fait une copie récursive, 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 (<filename>/var/tmp/root</filename>) un nom qui inclue une date, pour pouvoir facilement comparer différentes versions Si 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 distribution Reportez 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-980214 Ré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 <filename>/dev</filename> DEVFS Si 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 /dev Prenez 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.out Ensuite, 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.out Il 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 <filename>/stand</filename> Cette é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 install Sources antérieurs au 2 Avril 1998 Si 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 install Pour 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 <command/ps/ et <command/top/ ne marcheront pas tant que le système et le noyau ne seront pas au même niveau de version.</para> <para>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 <filename/LINT/ pour voir s'il y a de nouvelles options dont vous pourriez tirer parti.</para> <para>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 :</para> <itemizedlist> <listitem><para>Des commandes comme <command/ps/, <command/ifconfig/ and <command/sysctl/ peuvent ne plus fonctionner. Dans ce cas, votre machine ne peut plus se connecter au réseau.</para></listitem> <listitem><para>De même, des utilitaires essentiels comme <command/mount/ peuvent aussi être inutilisables, auquel cas <filename>/</filename>, <filename>/usr</filename> 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.</para></listitem> <listitem> <para>Les LKMs ("Loadable Kernel Modules" - modules du noyau à chargement dynamique) reconstruits en même temps que “world” peuvent "planter" un noyau plus ancien.</para> </listitem> </itemizedlist> <para>Pour toutes ces raisons, il vaut mieux recompiler et installer un nouveau noyau avant de redémarrer.</para> <para>Vous devez recompiler le noyau après avoir terminé <userinput>make world</userinput> (ou <userinput>make installworld</userinput>). 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 <command>config</command> n'est pas à niveau avec les sources du noyau.</para> <para>Dans ce cas, exécutez: <informalexample> <screen><prompt/#/ <userinput>/usr/obj/usr/src/usr.sbin/config <replaceable>NOM_DU_NOYAU</replaceable></userinput></screen> </informalexample> pour recompiler le noyau avec la nouvelle version de <command>config</command>. Cela ne marchera peut-être pas à tous les coups. Il est recommandé d'en finir avec <userinput>make world</userinput> (ou <userinput>make installworld</userinput>) avant de compiler un nouveau noyau.</para> </sect1> <sect1> <title/Redémarrez/ <para>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 <citerefentry> <refentrytitle>fastboot</refentrytitle> <manvolnum>8</manvolnum> </citerefentry> devrait suffire.</para> <informalexample> <screen><prompt/#/ <userinput>fastboot</userinput></screen> </informalexample> </sect1> <sect1> <title>C'est fini Vous 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. <title/Dois-je refaire le monde à chaque évolution?/ <para>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:</para> <informalexample> <screen><filename>src/games/cribbage/instr.c</filename> <filename>src/games/sail/pl_main.c</filename> <filename>src/release/sysinstall/config.c</filename> <filename>src/release/sysinstall/media.c</filename> <filename>src/share/mk/bsd.port.mk</filename></screen> </informalexample> <para>Il 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 <command/make all install/, et c'est à peu près tout. Mais s'il y a des évolutions importantes, par exemple sur <filename>src/lib/libc/stdlib</filename> 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).</para> <para>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.</para> <para>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.</para> </sect2> <sect2> <title>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 <filename>/usr/obj</filename> 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 world Une 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 <command/make install/.</para> <para>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 <filename>Makefile</filename>s.</para> <para>La marche exacte à suivre dépend de votre version de FreeBSD.</para> <note> <para>Vous devrez encore mettre à jour <filename>/etc</filename> et <filename>/dev</filename> sur les machines cibles après cette étape.</para> </note> <sect3> <title>Version 2.1.7 et antérieures Dans 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érieures Entre 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érieure Comme 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 <command>make world</command>? 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 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/src Cet 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/obj Comme 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. Traductions Document original L'original de ce document se trouve sur http://www.nothing-going-on.demon.co.uk/FreeBSD/make-world/make-world.html. Japonais MAEKAWA Masahide a traduit ce document en Japonais. Sa traduction est disponible à l'adresse http://www.rr.iij4u.or.jp/~bishop/FreeBSD/mw.html. Contributions Les 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.ca Sue Blake, sue@welearn.com.au Brian Haskin, haskin@ptway.com Kees Jan Koster, kjk1@ukc.ac.uk A Joseph Kosy, koshy@india.hp.com Greg Lehey, grog@lemis.com Wes Peters, softweyr@xmission.com Joseph Stein, joes@wstein.com Studded, studded@dal.net Axel Thimm Axel.Thimm@physik.fu-berlin.de Matthew 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 à MH Matt Midboe
matt@garply.com
v1.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;
Introduction MH 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 à 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.tgz Vous 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 courrier Ce 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. <command>inc</command>, <command>msgchk</command>—lire ou vérifier vos messages Si 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 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 , et , que la commande inc. <command>show</command>, <command>next</command> et <command>prev</command>—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. <command>scan</command>—Afficher un résumé de vos messages scan 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 . 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. <command>rmm</command> et <command>rmf</command>— Effacer le message courant ou le dossier rmm 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 MH La 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 dossiers Toute 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 . 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. <command>pick</command>— recherche par critères dans les messages pick 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 n'est rien de plus qu'une abréviation de l'option 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: recherche sur le destinataire recherche dans le champ cc du message recherche sur l'expéditeur du message recherche dans le sujet du message recherche par rapport à la date du message recherche sur un quelconque autre entete. (ex: 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. &hellip 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 et 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. <command>folder</command>, <command>folders</command>, <command>refile</command>— 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 messages L'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. <command>comp</>, <command>forw</>, <command>reply</>—composer, faire suivre ou répondre à un message La commande comp comporte quelques options de la ligne de commande intéressantes. La plus importante est .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 . 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. <filename>components</filename>, et <filename>replcomps</filename>—les fichiers de composition pour <command>comp</> and <command>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'exploitation Jay Richmond &artheader.copyright; jayrich@sysc.com 6 Aout 1996 Ce 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émarrage Ce 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 Easy C'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 Manager Il 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-BS C'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 typique Supposons 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,631416 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ères La 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 (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'aide Il 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 disques Trois 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émarrage Sur 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) Description 01 DOS12 primaire (FAT 12-bit) 04 DOS16 primaire (FAT 16-bit) 05 DOS12 étendue 06 DOS primaire large (> 32 Mo) 0A OS/2 83 Linux (EXT2FS) A5 FreeBSD, 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 utile La 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 disque Une 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 /MBR pour 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 Unix Annelise Anderson
andrsn@hoover.stanford.edu
15 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 Utilisateur Ouvrez 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/reboot Vous 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 Root Si 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'Horizon Sous 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 : id Vous dit qui vous êtes! pwd Vous dit où vous êtes - le répertoire de travail courant. ls Donne la liste des fichiers du répertoire courant. ls 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 Donne la liste détaillée des fichiers du répertoire courant - taille, date, autorisations. ls Liste tous les fichiers, y compris les fichiers “.” cachés. Si vous êtes root, les fichiers “.” sont visibles sans l'option . cd Change 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 fichier Vous permet de visualiser le fichier nom_de_fichier sans le modifier. Essayez view /etc/fstab. :q pour quitter. cat nom_de_fichier Liste 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'Information Voici 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 texte Tout ce qui contient la chaîne texte dans la base de données whatis. man texte La 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 texte Vous dit où se trouve la commande texte dans vos chemins d'accès. locate texte Tous les répertoires où l'on trouve la chaîne texte. whatis texte Vous dit ce qu'est la commande texte et où se trouve la page de manuel correspondante. whereis text Cherche 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/daily sortie non mentionnée # /etc/weekly sortie non mentionnée # /etc/monthly sortie non mentionnée Si 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 Texte Pour 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: x efface le caractère sur lequel se trouve le curseur. dd efface toute la ligne (même si elle dépasse la largeur de l'écran et s'affiche sur plus d'une ligne). i permet d'insérer du texte devant la position du curseur. a permet 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: :w pour enregistrer le fichier modifié sur disque et continuer à l'éditer, :wq pour enregistrer le fichier modifié sur disque et quitter l'éditeur, :q! pour quitter l'éditeur sans enregistrer vos modifications, /texte recherche la prochaine occurence de texte et y positionne le curseur; /Entrée (la touche Entrée) recherche ensuite la prochaine occurrence de texte, G va à la fin du fichier, nG va à la nième ligne du fichier, CtrlL rafraîchit l'affichage, Ctrlb et Ctrlf 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 DOS A 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 Utiles df 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 -R liste 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 Suivantes Vous 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 Travail Votre 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 -m Quand 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. Autres En 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 Bienvenue Si 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.x Pour 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/src Le 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/mount Ensuite, 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 ntfs Té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.tgz Il 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.diff Prenez garde à ce qu'aucune partie ne fasse défaut. patch 1 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.diff Encore 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 install ainsi que le module du noyau : &prompt.root cd /usr/src/sys/modules/ntfs &prompt.root make &prompt.root make install Pour 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 install Ok, 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 /ntfs Bien 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.X Pour 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/src Le 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/mount Ensuite, 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 ntfs Té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.tgz Il 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/src Ensuite, vous devez mettre à niveau les 3 fichiers d'en-tête du système. Utilisez l'option (L minuscule) qui permet d'ignorer la différence d'espacement, car j'ai remarqué que l'utilisation des touches TAB et Espace rendait incompatible les fichiers originaux et les fichiers diff. &prompt.root cd /usr/src/sys/sys &prompt.root patch -l malloc.h /tmp/ntfs/diff/malloc.h.diff &prompt.root patch -l mount.h /tmp/ntfs/diff/mount.h.diff &prompt.root patch -l vnode.h /tmp/ntfs/diff/vnode.h.diff Si cette opération réussit, vous verrez s'afficher quelque chose de similaire à : 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 00:17:30 1999 |--- ./sys/sys/vnode.h Fri Jan 1 00:17:35 1999 -------------------------- Patching file vnode.h using Plan A... Hunk #1 succeeded at 58. done Si malencontreusement, un (ou plusieurs) fichier de mise à jour faisait défaut, sachez que patch fait toujours des copies des fichiers originaux avec le même nom suivi de l'extension .orig. Maintenant, vous pouvez compiler le pilote. Il est nécessaire d'ajouter BINDIR=/usr/sbin qui n'est pas défini dans le Makefile. &prompt.root cd /usr/src/sbin/i386/mount_ntfs &prompt.root make &prompt.root make BINDIR=/usr/sbin install Compilez ensuite les modules du noyau : &prompt.root cd /usr/src/lkm &prompt.root make &prompt.root make install Pour finir, vous devez recompiler le noyau. Si vous utilisez le noyau GENERIC, faites une copie du fichier de configuration du noyau GENERIC (ce n'est pas absolument nécessaire, mias de cette manière le nom du noyau sera mis à jour, et ce sera plus facile pour identifier le noyau avec lequel vous démarrez). J'ai pour habitude d'utiliser des noms assez représentatifs, aussi GENERIC_NTFS me semble 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 install Ok, 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 (remplacez “w” par “s” pour les disques SCSI) : FAT - wd0s1 NTFS - wd0s2 FreeBSD - wd0s3 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 - wd0s1 FreeBSD - wd0s3 NTFS - wd0s2 Vous pouvez jeter un coup d'oeil au fichier /etc/fstab pour être sûr du numéro de la tranche 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 - sd0s1 FreeBSD - sd0s3 Extended partition - sd0s2               NTFS - sd0s5 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/sd0s5 /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/sd0s5 /ntfs Bien 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. Si vous avez choisi de monter la “partition” au démarrage, vous verrez s'afficher quelques messages de diagnostic tout à fait inoffensifs : ntfs_init(): ntfs_mountfs(): bps: 512, spc: 1, media: f8, mftrecsz: 2 (2 sects) ntfs_mountfs(): mftcn: 0x315e5|0x287245 ntfs_mountfs(): case-sens., uid: 0, gid: 0, mode: 777 ntfs_iget(): read $MFT ntnode ntfs_mountfs(): reading $UpCase....OK Bon courage !
diff --git a/fr_FR.ISO8859-1/articles/ppp/article.sgml b/fr_FR.ISO8859-1/articles/ppp/article.sgml index 4c587ef4f4..a65d87a10c 100755 --- a/fr_FR.ISO8859-1/articles/ppp/article.sgml +++ b/fr_FR.ISO8859-1/articles/ppp/article.sgml @@ -1,1894 +1,1894 @@ %man; %urls; %abstract; %artheader; %translators; %authors; - %mailing-lists; + %mailing-lists; ]>
Pédants Principes PPP &artheader.copyright; &abstract.license; &abstract.disclaimer; &trans.a.haby; Introduction Le protocole de connexion PPP en mode utilisateur de la version 2.2 de FreeBSD (appelé aussi “IIJ-PPP”) supporte maintenant la réécriture de paquets pour les connexions à l'Internet. Cette possibilité, connue aussi sous le nom de “Mascarade (Masquerading)”, “Alias IP (IP Aliasing)”, ou “Traduction d'Adresse Réseau (Network Adresse Translation)”, permet à un système FreeBSD d'interagir comme routeur de connexion à la demande entre un réseau local et un fournisseur d'accès à Internet. Les machines du réseau local peuvent utiliser l'unique connexion de la machine FreeBSD à l'Internet pour échanger des informations avec ce dernier. But de ce document Ce documentN.d.T: Si vous souhaitez consulter le document original en langue anglaise, il se trouve sur http://www.FreeBSD.org/ppp/ppp.html. vous explique comment: Configurer le système FreeBSD pour permettre les connexions vers l'extérieur, Partager une seule connexion vers l'extérieur avec les autres machines du réseau, Configurer les machines Windows pour utiliser la machine FreeBSD comme passerelle vers l'Internet. Bien que l'objectif de ce document soit avant tout d'expliquer comment configurer la traduction d'adresses IP, il fournit aussi des exemples d'installation et de configuration des autres composants. Chaque section est indépendante et peut être utilisée pour configurer divers aspects d'une passerelle FreeBSD entre plusieurs réseaux. Mise en oeuvre du réseau local Bien que le programme ppp puisse, et soit généralement utilisé pour fournir des services à la seule machine FreeBSD, il peut aussi servir à en faire une “passerelle” ou “routeur” entre les autres dispositifs reliés au réseau local et l'Internet ou tout autre service connecté. Topologie classique du réseau Ce document s'applique à un réseau local dont la topologie est - classiquement - la suivante: +=========+ =======> Connexion à Internet ( Wanadoo, AOL, etc. ) | | \ | FreeBSD |======= | "Curly" | | | +====+====+ | |=================+============+====| <== Réseau Local Ethernet | | | +====+====+ +====+====+ +====+====+ | | | | | | | Win95 | | WFW | | WinNT | | "Larry" | | "Moe" | | "Shemp" | | | | | | | +=========+ +=========+ +=========+ Hypothèses sur le réseau local Pour les besoins de notre exemple, nous supposerons que : Il y a trois stations et un serveur reliés par le réseau Ethernet local: un serveur FreeBSD (“Curly”) avec un contrôleur Ethernet NE-2000 configuré sur “ed0”, une station de travail Windows 95 (“Larry”) avec les pilotes TCP/IP 32-bits natifs de Microsoft, une station de travail Windows for Workgroups (“Larry”) avec les extension TCP/IP 16-bits de Microsoft, une station de travail Windows NT (“Larry”) avec les pilotes TCP/IP 32-bits natifs de Microsoft. Les adresses IP du réseau Ethernet sur lequel se base notre exemple ont été attribuées dans l'espace d'adresses privées défini par la RFC-1597, comme suit: Nom Adresse IP "Curly" 192.168.1.1 # La machine FreeBSD "Larry" 192.168.1.2 # La machine Windows 95 "Moe" 192.168.1.3 # La machine Windows for Workgroups "Shemp" 192.168.1.4 # La machine Windows NT Nous supposerons aussi que le modem est connecté sur le premier port série (/dev/cuaa0 ou COM1: selon la terminologie DOS) de la machine FreeBSD. Enfin, nous supposerons que notre fournisseur d'accès Internet nous fournit automatiquement les adresses IP des deux extrémités de la liaison PPP (point à point) : celle de notre machine FreeBSD et celle de la machine du côté du fournisseur (adressage dynamique). Les détails de configuration de la connexion de la machine FreeBSD à l'extérieur sont donnés au chapitre Configuration du système FreeBSD. Configuration du système FreeBSD Il y a trois informations à fournir au système FreeBSD avant de le relier au réseau local de notre exemple: Son nom de machine (hostname), “Curly” dans notre exemple, La configuration de son interface réseau, Le fichier /etc/hosts (qui liste les noms et les adresses IP des autres machines du réseau). Si vous avez installé FreeBSD via une connexion réseau, il est possible que certaines de ces informations soient déjà définies. Même si vous pensez que votre système FreeBSD a déjà été correctement configuré au moment de l'installation, il vous mieux vous assurer de la validité de chacune de ces informations pour vous éviter des ennuis par la suite. Contrôler le nom de la machine FreeBSD Il est possible que le nom de la machine FreeBSD ait été défini et enregistré lors de l'installation du système. Pour le vérifier, entrez, à l'invite du système, la commande suivante: # hostname Le nom de la machine FreeBSD sera affiché sur une seule ligne. Si ce nom paraît correct (c'est très subjectif :-), vous pouvez passer au paragraphe Contrôler la configuration de l'interface Ethernet. Dans notre exemple, le résultat de la commande hostname devrait être “curly.my.domain” si le nom de la machine a été correctement défini à l'installation, ou ensuite. (A ce stade, ne vous préoccupez pas du suffixe “.my.domain”, nous verrons cela par la suite. Ce qui compte maintenant est le nom qui précède le premier “.”) Si le nom de machine n'a pas été défini à l'installation, la réponse de hostname sera probablement “myname.my.domain”. Vous devez alors éditer le fichier /etc/rc.conf pour définir le nom du système. Définir le nom de la machine FreeBSD Vous devez être en session sous “root” pour éditer les fichiers de configuration du système. Si vous introduisez des erreurs dans les fichiers de configuration, il y a de fortes chances que votre système ne redémarre pas correctement! Soyez prudents ! Le nom de machine du système FreeBSD est défini au démarrage par le fichier /etc/rc.conf. Utilisez l'éditeur par défaut (“ee”) pour éditer ce fichier. Sous une session “root”, visualisez le fichier dans l'éditeur avec la commande: # ee /etc/rc.conf Avec les touches flèches, allez jusqu'à la ligne qui définit le nom de machine du système FreeBSD. Par défaut, vous y trouvez: --- ### Basic network options: ### hostname="myname.my.domain" # Set this ! --- Remplacez ces lignes, par exemple, par: --- ### Basic network options: ### hostname="curly.my.domain" # Set this ! --- Une fois la modification faite, appuyez sur la touche Echap pour aller dans le menu de commandes de l'éditeur. Choisissez “leave editor” (quitter l'éditeur) et sélectionnez bien l'option “save changes” (enregistrer les modifications) quand la question vous est posée. Contrôler la configuration de l'interface Ethernet Rappelons nos hypothèses : l'interface Ethernet de la machine s'appelle “ed0”. C'est la valeur par défaut pour les contrôleurs NE-1000, NE-2000, WD/SMC modèles 8003, 8013 et Elite Ultra (8216). Les fichiers d'interface d'autres modèles de contrôleurs peuvent avoir d'autres noms sous FreeBSD. Si vous n'êtes pas certain du nom correspondant à votre contrôleur, consultez les Questions Fréquemment Posées à propos de FreeBSD (“FAQ”) et substituez la bonne valeur dans les exemples qui suivent. De la même façon que pour le nom de la machine, l'interface Ethernet du système FreeBSD a peut-être été configurée à l'installation. Pour consulter la configuration des interfaces (Ethernet et autres) de votre système FreeBSD), utilisez la commande suivante: # ifconfig -a Soit en clair: "Donnes-moi la CONFIGuration des InterFaces de mes périphériques réseau." Par exemple: # ifconfig -a ed0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500 inet 192.168.1.1 netmask 0xffffff00 broadcast 192.168.1.255 ether 01:02:03:04:05:06 lp0: flags=8810<POINTOPOINT,SIMPLEX,MULTICAST> mtu 1500 tun0: flags=8050<POINTOPOINT,RUNNING, MULTICAST> mtu 1500 l0: flags=c010<OINTOPOINT,LINK2,MULTICAST> mtu 552 ppp0: flags=8010<POINTOPOINT,MULTICAST> mtu 1500 lo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> mtu 16384 inet 127.0.0.1 netmask 0xff000000 # Sur cet exemple, les périphériques suivants sont reconnus : ed0: l'interface Ethernet, lp0: l'interface parallèle (que nous n'utiliserons pas ici), tun0: l'interface SLIP (IP sur ligne série, que nous n'utiliserons pas ici), ppp0: un autre interface PPP (pour le module ppp intégré au noyau, que n'utiliserons pas ici), lp0: l'interface "en boucle" - "loopback" - que nous n'utiliserons pas non plus). Dans l'exemple, l'interface “ed0” est active (“UP”) et fonctionne (“RUNNING”). Les indications importantes sont: L'interface est active (“UP”), Elle a une adresse Ethernet (“inet”), dans notre cas: 192.168.1.1, Elle a un masque de sous-réseau (“netmask”; 0xffffff00 qui équivaut à 255.255.255.0) correct, Elle a une adresse de diffusion (“broadcast”; ici, 192.168.1.255) valide. Si la ligne décrivant l'interface Ethernet mentionne quelque chose comme: ed0: flags=8802<BROADCAST,SIMPLEX,MULTICAST> mtu 1500 ether 01:02:03:04:05:06 c'est que cette interface n'est pas encore configurée. Si l'interface Ethernet est déjà configurée, vous pouvez passer directement au paragraphe Renseigner la liste des autres machines du réseau. Sinon, continuez en séquence. Configurer votre interface Ethernet Vous devez être en session sous “root” pour éditer les fichiers de configuration du système. Si vous introduisez des erreurs dans les fichiers de configuration, il y a de fortes chances que votre système ne redémarre pas correctement! Soyez prudents ! Les paramètres de configuration des interfaces réseau sont définis au démarrage par le fichier /etc/rc.conf. Utilisez l'éditeur par défaut (“ee”) pour éditer ce fichier. Sous une session “root”, visualisez le fichier dans l'éditeur avec la commande: # ee /etc/rc.conf Vers la vingtième ligne environ du fichier, se trouve la section qui définit quelles interfaces réseau doivent être mises en service au démarrage. Le fichier de configuration par défaut contient la ligne : network_interfaces="lo0" # List of network interfaces (lo0 is loopback) que vous devrez modifier pour dire à FreeBSD que vous voulez ajouter un autre périphérique, en l'occurence l'interface “ed0”, en: network_interfaces="lo0 ed0" # List of network interfaces (lo0 is loopback) (Faites attention à l'espace entre la définition de l'interface en boucle “lo0” et l'interface Ethernet “ed0”.) Si le nom correspondant à votre interface n'est pas “ed0”,n'oubliez pas de mettre la valeur adéquate à la place. Si vous avez installé FreeBSD via une connexion réseau, la ligne “network_interfaces” comporte peut-être déjà un référence à votre carte Ethernet. Dans ce cas, assurez vous que son nom soit correct. Les lignes qui suivent celles où sont listées les interfaces à mettre en service décrivent les paramètres de chacune de ces interfaces. Dans le fichier /etc/rc.conf par défaut, il n'y a qu'un seule ligne qui dit: ifconfig_lo0="inet 127.0.0.1" # default loopback device configuration Vous devrez ajouter une ligne qui définisse les caractéristiques de votre interface “ed0”. Si vous avez installé FreeBSD via une connexion réseau, la ligne “ifconfig_ed0=” existe peut-être déjà. Vérifiez alors qu'elle contienne bien les bonnes valeurs. En nous référant à notre exemple, nous insérerons la ligne suivante, immédiatement après la définition de l'interface “en boucle”: ifconfig_ed0="inet 192.168.1.1 netmask 255.255.255.0" Après modification, cette section du fichier /etc/rc.conf doit ressembler à: --- network_interfaces="lo0 ed0" # List of network interfaces (lo0 is loopback) ifconfig_lo0="inet 127.0.0.1" # default loopback device configuration ifconfig_ed0="inet 192.168.1.1 netmask 255.255.255.0" --- Un fois que vous avez fait toutes les modifications nécessaires, appuyez sur la touche Echap pour aller dans le menu de commandes de l'éditeur. Choisissez “leave editor” (quitter l'éditeur) et sélectionnez bien l'option “save changes” (enregistrer les modifications) quand la question vous est posée. Autoriser la transmission de paquets Par défaut, FreeBSD n'active pas le transmission de paquets entre les différentes interfaces réseau d'une machine. En d'autres termes, les fonctions de routage (aussi appelées de passerelle) ne sont pas disponibles. Si vous voulez utiliser le programme ppp comme poste Internet autonome et non comme passerelle entre le réseau local et votre fournisseur d'accès à Internet, vous pouvez passer directement au paragraphe Renseigner la liste des autres machines du réseau. Si vous voulez utiliser le programme ppp pour connecter à la fois votre machine FreeBSD (pour servir de routeur) et les autres postes du réseau local, vous devez autoriser la transmission de paquets IP. Pour cela, vous devez éditer le fichier /etc/rc.conf. Visualisez le fichier dans l'éditeur avec la commande: # ee /etc/rc.conf Vers la quatre-vingt-cinquième ligne environ, vous trouverez la section qui contrôle la transmission de paquets. Elle ressemblera a ceci: --- gateway_enable="NO" # Set to YES if the host will be a gateway --- Modifiez-la en: --- gateway_enable="YES" # Set to YES if the host will be a gateway --- et quittez l'éditeur (en enregistrant vos modifications!). Cette ligne contient peut-être déjà gateway_enable="YES" si la transmission de paquets IP a été autorisée au moment de l'installation du système FreeBSD. Renseigner la liste des autres machines du réseau (<filename>/etc/hosts</filename>) La dernière étape de la configuration du réseau local vu de la machine FreeBSD consiste à créer la liste des noms et des adresses TCP/IP des différentes machines raccordées au réseau local. Cette liste est définie dans le fichier /etc/hosts. Par défaut, ce fichier ne contient qu'une ligne: le nom et l'adresse de l'interface “en boucle”. Par convention, ce nom est toujours “localhost” et son adresse 127.0.0.1. (Reportez-vous à l'exemple de configuration des interfaces au paragraphe Contrôler la configuration de l'interface Ethernet.) Pour éditer le fichier /etc/hosts, tapez la commande: # ee /etc/hosts Allez jusqu'à la fin du fichier (en lisant au passage les commentaires, ce sont des informations utiles!) et ajoutez (toujours dans le cas du réseau de notre exemple) les noms et les adresses IP suivantes: 192.168.1.1 curly curly.my.domain # machine FreeBSD 192.168.1.2 larry larry.my.domain # machine Windows 95 192.168.1.3 moe moe.my.domain # machine Windows for Workgroups 192.168.1.4 shemp shemp.my.domain # machine Windows NT (Vous ne devez pas modifier la ligne “127.0.0.1 localhost”.) Une fois que vous avez ajouté ces lignes, appuyez sur la touche Echap pour aller dans le menu de commandes de l'éditeur. Choisissez “leave editor” (quitter l'éditeur) et sélectionnez bien l'option “save changes” (enregistrer les modifications) quand la question vous est posée. Tester le système FreeBSD Félicitations! Une fois que vous en êtes arrivé là, votre machine FreeBSD est maintenant une machine UNIX connectée au réseau! Si vous avez dû modifier votre fichier /etc/rc.conf, il faut redémarrer votre machine FreeBSD. Cela va faire deux choses importantes: Appliquer les modifications de configuration des interfaces, et: Vérifier que le système redémarre sans erreur de configuration flagrante. Vérifier le bon fonctionnement de l'interface “en boucle” Pour vérifier que l'interface “en boucle” est correctement configurée, ouvrez une session sous “root” et tapez: # ping localhost Vous devriez voir défiler des messages du type: # ping localhost PING localhost.my.domain. (127.0.0.1): 56 bytes 64 bytes from 127.0.0.1: icmp_seq=0 ttl=255 time=0.219 ms 64 bytes from 127.0.0.1: icmp_seq=1 ttl=255 time=0.200 ms 64 bytes from 127.0.0.1: icmp_seq=2 ttl=255 time=0.187 ms [...] jusqu'à ce que vous tapiez CtrlC pour arrêter ce délire. Vérifier le bon fonctionnement de l'interface Ethernet Pour vérifier que l'interface Ethernet est correctement configurée, tapez: # ping curly Vous devriez voir: # ping curly PING curly.my.domain. (192.168.1.1): 56 bytes 64 bytes from 192.168.1.1: icmp_seq=0 ttl=255 time=0.219 ms 64 bytes from 192.168.1.1: icmp_seq=1 ttl=255 time=0.200 ms 64 bytes from 192.168.1.1: icmp_seq=2 ttl=255 time=0.187 ms [...] L'information importante dans ces deux exemples est que les noms (“localhost” et “curly”) correspondent bien à leurs adresses IP (127.0.0.1 et 192.168.1.1). Cela confirme que le fichier /etc/hosts est correct. Si les noms et les adresses apparaîssent correctement dans les résultats de la commande ping mais que des messages d'erreur sont affichés, quelque chose ne va pas dans la configuration des interfaces. Retournez au paragraphe Contrôler le nom de la machine FreeBSD et vérifiez de nouveau votre configuration. Si maintenant, tout va bien, passez à la section suivante. Configurer la liaison PPP vers l'extérieur Il y a deux façons d'utiliser le programme ppp: en mode “Interactif” et en mode “Automatique”. En mode Interactif, vous: Etablissez manuellement la connexion avec votre fournisseur d'accès Internet, Surfez, transférez des fichiers et envoyez du courrier électronique, etc. Coupez manuellement la connexion avec votre fournisseur d'accès Internet. En mode Automatique, le programme ppp surveille silencieusement les opérations du système FreeBSD et se connecte et se déconnecte automagiquement à votre fournisseur d'accès selon le besoin, intégrant de façon transparente l'Internet à votre réseau. Sauvegarder vos fichiers de configuration <command>ppp</command> d'origine Avant de modifier les fichiers qu'utilise ppp, il est bon de sauvegarder les fichiers par défaut créés à l'installation de FreeBSD. Ouvrez une session sous le compte “root”, et suivez la procédure ci-dessous: Allez dans le répertoire /etc: # cd etc Faites un copie des fichiers d'origine du répertoire ppp: # cp -R ppp ppp.ORIGINAL Vous devriez maintenant avoir un répertoire ppp et un répertoire ppp.ORIGINAL dans le répertoire etc. Créer vos propres fichiers de configuration de <command>ppp</command> Par défaut, la procédure d'installation de FreeBSD crée un certain nombre de fichiers d'exemple dans le répertoire /etc/ppp. Prenez un peu de temps pour parcourir ces fichiers. Ce sont des exemples empruntés à des systèmes qui fonctionnent et ils illustrent les différentes possibilités du programme ppp. Je vous encourage fortement à étudier ces exemples et à les adapter à votre configuration. Pour plus d'informations sur le programme ppp, lisez les pages de manuel: # man ppp Pour plus d'informations sur le langage chat, utilisé par ppp pour établir la connexion, lisez les pages de manuel: # man chat La suite de ce chapitre décrit le contenu recommandé des fichiers de configurations de ppp. Le fichier <filename>/etc/ppp/ppp.conf</filename> Le fichier /etc/ppp/ppp.conf contient les informations et les paramètres nécessaires pour établir une connexion vers l'extérieur. Le Manuel FreeBSD décrit en détail le contenu et la syntaxe de ce fichier. N'est décrite ici que la configuration minimale nécessaire pour arriver à établir une connexion. Voici le fichier /etc/ppp/ppp.conf que nous utiliserons sur notre passerelle entre le réseau local et l'Internet: #################################################################### # Fichier de Configuration de PPP ('/etc/ppp/ppp.conf') # # Paramètres par défaut: Ces commandes sont toujours exécutées # quand PPP est appelé et s'appliquent à toutes les configurations #################################################################### default: set device /dev/cuaa0 set speed 57600 disable pred1 deny pred1 disable lqr deny lqr set dial "ABORT BUSY ABORT NO\\sCARRIER TIMEOUT 5 \"\" ATE1Q0M0 OK-AT-OK\\dATDT\\T TIMEOUT 40 CONNECT" set redial 3 10 # # #################################################################### # # Configuration utilisée en mode interactif : # # appelée par: `ppp -alias interactive` # #################################################################### interactive: set authname Your_User_ID_On_Remote_System set authkey Your_Password_On_Remote_System set phone 1-800-123-4567 set timeout 300 set openmode active accept chap # #################################################################### # # Configuration utilisée en mode à la demande ( automatique) # # appelée par: 'ppp -auto -alias demand' # #################################################################### demand: set authname Your_User_ID_On_Remote_System set authkey Your_Password_On_Remote_System set phone 1-800-123-4567 set timeout 300 set openmode active accept chap set ifaddr 127.1.1.1/0 127.2.2.2/0 255.255.255.0 add 0 0 127.2.2.2 ################################################################ # Fin de /etc/ppp/ppp.conf Ce fichier, recopié tel quel d'un système opérationnel, comporte trois parties: La section “default” La section “default:” contient les informations et paramètres utilisés par toutes les autres sections du fichier. Cette section est donc implicitement ajoutée à toutes les autres. C'est l'endroit idéal pour définir les valeurs par défaut qui s'appliquent à toutes les connexions vers l'extérieur; en particulier, la configuration du modem et le dialogue d'initialisation de la connexion, qui ne changent pas, quel que soit le système distant auquel vous vous connectez. Voici le détail de chacune des lignes de la section “default:” du fichier /etc/ppp/ppp.conf: set device /dev/cuaa0 Cette instruction dit au programme ppp d'utiliser le premier port série. Sous FreeBSD, le périphérique “/dev/cuaa0” correspond au port appelé “COM1:” de DOS, Windows, Windows 95, etc. Si votre modem est sur le port “COM2”: vous devrez mettre “/dev/cuaa1”. “/dev/cuaa2” serait le port “COM3:”. set speed 57600 Cette ligne indique au programme ppp la vitesse en émission et en réception entre le port série et le modem. Bien que le modem de notre configuration fonctionne à 28.8 Kbps, donner la valeur 56000 permet à la liaison série de fonctionner suffisamment vite pour gérer la compression de données intégrée aux modems les plus récents. Si vous avez des problèmes pour dialoguer avec votre modem à cette vitesse, descendez à une valeur inférieure: 38400, voir aussi faible que 19200. disable pred1 deny pred1 Ces deux lignes désactivent la compression “CCP/Predictor 1” dont est capable le programme ppp. La version actuelle de ppp supporte la compression de données selon la définition provisoire des standards Internet. Malheureusement, de nombreux fournisseurs d'accès ont des équipements qui n'offrent pas cette possibilité. Comme la plupart des modems récents sont capables de compression à la volée, vous ne perdrez probablement pas grand-chose en termes de performances en désactivant cette possibilité sur votre machine FreeBSD et en interdisant au site distant de vous la réclamer. disable lqr deny lqr Ces deux lignes contrôlent l'“audit de la qualité de la liaison (Link Quality Reporting)” qui est partie intégrante des spécifications du protocole PPP. (Voyez la RFC-1989 pour plus de détails.) La première ligne, “disable lqr” instruit le programme ppp de ne pas émettre de demandes de contrôle de la qualité de la liaison à la machine distante. La seconde ligne, “deny lqr” instruit le progamme ppp de ne pas accepter de demandes de contrôle de la qualité de la liaison de la machine distante. Comme la plupart des modems ont des procédures intégrées de détection et de correction d'erreur et que l'audit LQR est rarement intégralement implémentée par les constructeurs, il vaut en général mieux ne pas utiliser cette possibilité. set dial "ABORT BUSY ABORT NO\\sCARRIER TIMEOUT 5 \"\" ATE1Q0M0 OK-AT-OK\\dATADT\\T TIMEOUT 40 CONNECT" (Cette instruction doit être écrite sur une seule ligne; ne tenez pas compte du formatage sur deux lignes, si elle se présente ainsi dans ce document.) Cette ligne décrit le dialogue entre le programme ppp et le modem qui doit permettre d'établir la connexion et fournit des instructions rudimentaires sur la marche à suivre: Une tentative d'appel échoue si le modem renvoie le code d'erreur “BUSY (occupé)”, Une tentative d'appel échoue aussi si le modem renvoie le code d'erreur “NO CARRIER (pas de porteuse),”, Le programme ppp doit constater, avec un délai maximum de cinq secondes entre chaque événement, la séquence d'événements suivants: Initialement, le programme ppp n'attend pas de réponse du modem (c'est le sens de la chaîne \"\" dans l'instruction), Le programme enverra au modem la chaîne “ATE1Q0M0” et attendra la réponse “OK”. Si cette réponse n'arrive pas, il enverra la commande d'interrogation “AT” et attendra à nouveau une réponse “OK”, Le programme devra attendre une seconde (c'est le sens de la chaîne “\\d” dans l'instruction), et envoyer la séquence d'appel au modem. Le préfixe “ATDT” est la commande d'appel standard pour les lignes téléphoniques à fréquences vocales. Si vous n'avez pas de ligne à fréquence vocale, remplacez “ATDT” par “ATDP”. La chaîne “\\T” sera remplacée par le numéro de téléphone réel (qui sera défini plus loin par la ligne “set dial”). Pour finir, avec un délai d'attente de quarante secondes au maximum, le programme ppp doit recevoir un code d'acquittement “CONNECT” du modem. Un échec à une phase quelconque de ce dialogue sera interpreté comme un échec d'appel et la connexion ne sera pas établie. (Pour avoir une description détaillée du mini-langage de commande utilisé par ppp, reportez-vous aux pages de manuel de chat.) set redial 3 10 Cette ligne indique au programme ppp qu'en cas d'échec, il peut faire jusqu'à trois nouvelles tentatives avec un temps d'attente de dix secondes entre chaque nouvel appel. La section “interactive” La section “interactive:” contient les valeurs et les paramètres utilisés par les connexions PPP interactives avec un système distant particulier. Les lignes de la section “default:” sont automatiquement incluses dans cette section. L'exemple donné ci-dessous suppose que vous vous connectiez à un système qui sait identifier un utilisateur sans avoir à utiliser une série de commandes baroques. Nous supposerons que le protocole CHAP est utilisé pour initialiser la session. A priori, si un système Windows 95 peut établir la connexion d'un simple clic sur le bouton “Connecter”, la configuration donnée en exemple devrait fonctionner. Si, à l'inverse, quand vous vous connectez chez votre fournisseur d'accès avec les utilitaires de Microsoft Windows 95, vous devez utiliser l'option “Utiliser des procédures de connexion”N.d.T: ne disposant du matériel nécessaire au contrôle de certains de ces libellés dans les versions françisées de Windows, ils ont été traduits du document en langue anglaise. En cas d'inexactitude, le lecteur voudra bien rectifier de lui-même.. il vous faudra alors lire les pages de manuel de ppp pour trouver des exemples de fichiers de configuration de PPP comportant des procédures “expect / reponse” pour établir votre connexion et vous devrez utiliser la commande “set login” à cet effet. Ou mieux, trouvez-vous un fournisseur d'accès qui offre l'authentification par PAP ou CHAP! La configuration donnée en exemple a été utilisée avec succès pour se connecter: à Divers Shiva LanRovers, au réseau IBM (http://www.ibm.net), à AT&T WorlNet (http://www.att.com/worldnet), à Erol's (http://www.erols.com). Voici la description de chacune des lignes de la section “interactive:” du fichier /etc/ppp/ppp.conf de l'exemple: set authname Votre_Nom_d_Utilisateur_du_Système_Distant Cette ligne définit avec quel nom d'utilisateur vous vous connectez au système distant. set authkey Votre_Mot_de_Passe_Utilisateur_du_Système_Distant Cette ligne définit le mot de passe que vous utilisez pour vous connecter au système distant. set phone 012345678789 C'est le numéro de téléphone avec lequel vous joignez le système distant. set timeout 300 Cette ligne indique au programme ppp de couper la ligne s'il n'y a aucun échange pendant cinq minutes (300 secondes). Vous pouvez adapter cette ligne à votre besoin particulier. set openmode active Cette ligne dit au programme ppp de négocier la connexion dès que la liaison entre les modems est établie. Certains sites distants le font automatiquement, d'autres non. Cette instruction permet à votre site d'initialiser la négociation. accept chap Cette ligne dit au programme ppp d'utiliser le protocole CHAP “Challenge Handsake Autentification Protocole (protocole d'authentification par poignée de main avec défi de décryptage)” pour vous authentifier. Les valeurs échangées entre le système local et le système distant pour transmettre le nom d'utilisateur et le mot de passe sont définies par les lignes “authname” et “authkey”. La section “demand” La section “demand:” contient les valeurs et les paramètres utilisés par les connexions PPP automatiques avec un système distant particulier. Les lignes de la section “default:” sont automatiquement incluses dans cette section. A l'exception des deux dernières lignes, cette section est identique à la section qui définit la configuration “interactive”. Comme indiqué au paragraphe La section “interactive”, l'exemple donné ci-dessous suppose que vous vous connectiez à un système qui comprenne le protocole CHAP pour initialiser la session. Voici la description de chacune des lignes de la section “demand:” du fichier /etc/ppp/ppp.conf de l'exemple: set authname Votre_Nom_d_Utilisateur_du_Système_Distant Cette ligne définit avec quel nom d'utilisateur vous vous connectez au système distant. set authkey Votre_Mot_de_Passe_Utilisateur_du_Système_Distant Cette ligne définit le mot de passe que vous utilisez pour vous connecter au système distant. set phone 012345678789 C'est le numéro de téléphone avec lequel vous joignez le système distant. set timeout 300 Cette ligne indique au programme ppp de couper la ligne s'il n'y a aucun échange pendant cinq minutes (300 secondes). Vous pouvez adapter cette ligne à votre besoin particulier. set openmode active Cette ligne dit au programme ppp de négocier la connexion dès que la liaison entre les modems est établie. Certains sites distants le font automatiquement, d'autres non. Cette instruction permet à votre site d'initialiser la négociation. accept chap Cette ligne dit au programme ppp d'utiliser le protocole CHAP “Challenge Handsake Autentification Protocole (protocole d'authentification par poignée de main avec défi de décryptage)” pour vous authentifier. Les valeurs échangées entre le système local et le système distant pour transmettre le nom d'utilisateur et le mot de passe sont définies par les lignes “authname” et “authkey” set ifaddr 127.1.1.1/0 127.2.2.2/0 255.255.255.0 Cette commande définit une paire d'adresses IP fictives pour les deux extrémités de la liaison point-à-point. Elle dit au programme ppp d'utiliser l'adresse 127.1.1.1 pour l'extrémité locale de la liaison gérée par le pilote de périphérique “tun0 (tunnel)”(Reportez-vous au manuel FreeBSD pour une description de ce pilote) et l'adresse 127.2.2.2 pour l'extrémité distante. Le “/0” qui les suit précise le nombre de digits significatifs de ces adresses, qui peuvent, (et doivent en fait) être négociées entre les deux systèmes une fois la liaison établie. 255.255.255.0 est le masque de sous-réseau qui s'applique à ces deux pseudo-interfaces. Rappelez-vous, nous avons supposé que votre fournisseur d'accès vous assigne les adresses des deux extrémités de la ligne! Si votre fournisseur vous a donné une adresse particulière, vous pouvez la mentionner sur cette ligne à la place de l'adresse 127.1.1.1. Inversement, si votre fournisseur vous a donné une adresse particulière pour son côté de la liaison, vous pouvez la mentionner sur cette ligne à la place de l'adresse 127.2.2.2. Dans les deux cas, il vaut mieux conserver le “/0” après les deux adresses. Cela laisse la possibilité au programme ppp de changer d'adresse(s) s'il en a besoin. add 0 0 127.2.2.2 Cette dernière ligne dit au programme ppp d'ajouter une route par défaut pour le trafic vers l'adresse (fictive) 127.2.2.2 du fournisseur d'accès. Si vous avez donnée l'adresse que vous a indiqué votre fournisseur d'accès à la place de l'adresse 127.2.2.2 à la ligne “set ifaddr”, vous devez utiliser la même adresse ici, à la place de 127.2.2.2. En ajoutant cette route “fictive” pour le trafic IP, le programme ppp peut, successivement, avant et au moment d'établir la liaison: Accepter des paquets que FreeBSD ne sait pas encore comment rediriger, Etablir la connexion avec votre fournisseur d'accès, Reconfigurer les adresses IP des deux côtés de la ligne, Transmettre les paquets entre votre sytème local et votre fournisseur d'accès, automatiquement! Une fois le nombre de secondes défini par l'instruction “timeout” de la section “default” écoulé sans trafic TCP/IP, le programme ppp coupe automatiquement la connexion, et le processus peut recommencer. Le fichier <filename>/etc/ppp/ppp.linkup</filename> L'autre fichier nécessaire à la configuration de ppp est /etc/ppp/ppp.linkup. Ce fichier contient les instructions qui définissent ce que ppp doit faire une fois que la connexion est établie. Dans le cas d'une connexion à la demande, le programme ppp doit supprimer la route par défaut vers l'adresse IP fictive du système distant (127.2.2.2 dans notre exemple plus haut) et définir une nouvelle route vers l'adresse IP réelle de ce système (obtenue à l'établissement de la connexion). Voici un bon exemple de fichier /etc/ppp/ppp.linkup: #########################################################################= # # Fichier PPP Link Up ('/etc/ppp/ppp.linkup') # # Ce fichier est consulté une fois que PPP a établi une connexion # # Ce fichier est lu dans l'ordre suivant : # # 1) En premier, l'adresse IP qui nous a été assignée est recherchée # et la/les commande(s) associée(s) exécutée(s) # # 2) Si l'adresse IP n'est pas trouvée, alors l'étiquette donnée au # démarrage de PPP est recherchée, et la/les commande(s) associée(s) # exécutée(s) # # 3) Si ni l'une ni l'autre n'ont été trouvées, les commandes associées # à l'étiquette 'MYADDR:' sont exécutées. # #########################################################################= # # Cette section correspond à la configuration "demand" de # /etc/ppp/ppp.conf: demand: delete ALL add 0 0 HISADDR # # Toutes les autres configurations de /etc/ppp/ppp.conf utilisent # ce qui suit: # MYADDR: add 0 0 HISADDR ######################################################################## # Fin de /etc/ppp/ppp.linkup Remarquez qu'une section de ce fichier s'appelle “demand:”, tout comme dans le fichier /etc/ppp/ppp.conf. Cette section dit au programme ppp ce qu'il doit faire, une fois la connexion à la demande établie: Supprimer toutes les informations de routage qu'il a déjà créées, Ajouter une route par défaut vers l'adresse réelle de la machine distante. Il est capital que les configurations définies dans le fichier /etc/ppp/ppp.conf et qui comportent les lignes “set ifaddr” et “add 0 0” (i.e.: les configurations de connexion à la demande) exécutent les instructions “delete ALL” et “add 0 0 HISADDR” du fichier /etc/ppp/ppp.linkup. C'est le mécanisme qui contrôle la configuration de la liaison dans le cas d'une connexion à la demande. Toutes les configurations qui ne sont pas explicitement définies dans le fichier /etc/ppp/ppp.linkup utiliseront les commandes listées dans la section “MYADDR:” de ce fichier. C'est ce que feront les connexions manuelles (comme dans notre exemple “interactive:”). Cette section ajoute simplement une route par défaut vers l'adresse IP du fournisseur d'accès (à l'autre extrémité de la ligne). Alias IP Toutes les étapes précédentes s'appliquent à un systeme FreeBSD utilisé pour se connecter à la demande à un fournisseur d'accès Internet. Si vous cherchez simplement, en lisant ce guide, à connecter votre systeme FreeBSD à l'Internet, vous pouvez passer directement au chapitre Tester le réseau. Une possibilité très intéressante du programme ppp en mode “connexion à la demande” est sa capacité à aiguiller automatiquement le trafic vers les autres systèmes du réseau local. On donne à cela des noms divers “alias IP (IP Aliasing)”, “traduction d'adresse réseau (Network Adress Translation)”, “mascarade d'adresse (Adress Masquerading)” ou “mandatement transparent (Transparent Proxying)”. Quelle que soit la terminologie employée, ce fonctionnement n'est cependant pas automatique. Si le programme ppp est démarré de façon habituelle, il ne fera pas transiter de paquets entre l'interface avec le réseau local et la liaison vers l'extérieur. En effet, seul le système FreeBSD est connecté à l'Internet; les autres systèmes ne peuvent pas partager la même connexion. Par exemple, si le programme ppp est lancé par: # ppp interactive ou: # ppp -auto demand correspondant respectivement aux modes manuel et automatique, alors il établira une connexion à l'Internet pour la seule machine FreeBSD. Pour démarrer le programme ppp pour l'utiliser comme passerelle entre le réseau local et l'Internet, il faut utiliser l'une des commandes suivantes: # ppp -alias interactive ou: # ppp -auto -alias demand Alternativement, vous pouvez utiliser l'instruction “alias enable yes” dans votre fichier de configuration de ppp (Reportez-vous aux pages de manuel pour plus de détails). Gardez cela présent à l'esprit si vous passez maintenant au chapitre Configurer les systèmes Windows. Configurer les Systèmes Windows Comme indiqué au Chapitre Mise en oeuvre du réseau local, le réseau de notre exemple comporte un système FreeBSD (“Curly”) qui sert de passerelle (ou routeur) pour un réseau local composé de trois moutures différentes de systèmes Windows. Pour que ces stations puissent utiliser Curly comme routeur, elles doivent être correctement configurées. Notez bien que l'on ne vous explique pas ici comment configurer les postes Windows pour qu'ils puissent se connecter eux-mêmes. Si vous cherchez de bonnes explications sur le sujet, voyez http://www.aladdin.co.uk/techweb. Configurer Windows 95 Il est relativement simple de configurer Windows 95 pour relier un poste à votre réseau local. Le configuration réseau Windows 95 doit être légérement modifiée pour pouvoir utiliser le système FreeBSD comme passerelle par défaut vers votre fournisseur d'accès. Effectuez les étapes suivantes: Créer le fichier Windows 95 <filename>hosts</filename> Pour vous connecter aux autres postes TCP/IP du réseau local, vous devrez installer une copie du fichier hosts que vous avez créé sur votre système FreeBSD au paragraphe Renseigner la liste des autres machines du réseau. Cliquez sur le bouton “Démarrer”, choisissez “Exécuter ...”, lancez notepad \WINDOWS\HOSTS et cliquez sur “OK”, Sous l'éditeur, entrez les noms et les adresses des machines recopiés du fichier hosts du paragraphe Renseigner la liste des autres machines du réseau, Une fois que c'est fait, quittez notepad (assurez-vous d'avoir enregistré le fichier!). Définir le configuration réseau TCP/IP Windows 95 Cliquez sur le bouton “Démarrer” de la barre de tâches, Choisissez “Paramètres” et “Panneau de Configuration”, Double-cliquez sur l'icône réseau pour l'ouvrir. Les paramètres des éléments du réseau sont tous affichés. Sélectionnez l'option “Configuration” et faites défiler la liste des composants installés pour choisir la ligne “TCP/IP ->votre interface” (où votre interface est le nom ou le modèle de votre contrôleur Ethernet), Si “TCP/IP” ne figure pas dans la liste des composants réseau installés, cliquez sur le bouton “Ajouter” pour l'installer avant de continuer Ajouter | Protocoles | Microsoft | TCP/IP | OK. Cliquez sur le bouton “Propriétés” pour afficher la liste des paramètres associés au composant TCP. Configurer les informations relatives à l'adresse IP Choisissez l'onglet “Adresse IP” Enfoncez le bouton “Spécifier une adresse IP”. (Dans notre exemple, le système Windows 95 est celui que nous avons appelé “Larry”.) Dans la zone “Adresse IP”, entrez “192.168.1.2”, Entrez “255.255.255.0” dans le zone “Masque de Sous-réseau”. Configurer les informations relatives à la passerelle Cliquez sur l'onglet “Passerelle”. Dans le réseau de notre exemple, c'est le système FreeBSD qui sera notre passerelle vers l'Internet (routant les paquets entre le réseau local Ethernet et la connexion PPP). Entrez l'adresse IP de l'interface Ethernet de la machine FreeBSD, “192.168.1.1”, dans la zone “Nouvelle Passerelle” et cliquez sur le bouton “Ajouter”. S'il y a d'autres passerelles définies dans les “Passerelles Installées”, peut-être devrez-vous les supprimer. Configurer les informations relatives au DNS Nous supposons que votre fournisseur d'accès Internet vous a donné une liste de serveurs de noms de domaines (Domain Name Servers) - ou “Serveurs DNS” - que vous devez utiliser. Si vous voulez mettre en service un serveur DNS sur votre machine FreeBSD, reportez-vous au chapitre Exercices pour l'étudiant intéressé pour avoir des indications sur l'installation d'un serveur DNS sur une machine FreeBSD. Cliquez sur l'onglet “Configuration DNS”, Assurez-vous que l'option “Activer DNS” est bien sélectionnée, (Si cette option n'est pas sélectionnée, seules les machines définies dans votre fichier hosts seront accessibles et vous ne pourrez pas “surfer” comme vous le souhaitez!) Dans la zone “Hôte”, entrez le nom du poste Windows 95, dans notre cas : “Larry”, Dans la zone “Domaine”, entrez le nom du réseau local, dans notre cas : “my.domain”, Dans la zone “Ordre de recherche DNS”, entrez les adresses IP des serveurs DNS que votre fournisseur vous a données, cliquez sur “Ajouter” à chaque adresse que vous définissez. Répétez l'opération autant de fois que nécessaire pour entrer toutes les adresses que votre fournisseur vous a indiquées. Autres options TCP/IP Windows 95 Pour nos besoins, les paramètres des sections “Avancées”, “Configuration WINS” et “Liens” sont inutiles. Si vous souhaitez utiliser le service de noms Internet de Windows (Windows Internet Naming Service - “WINS”), vous trouverez plus d'informations sur http://www.localnet.org, en particulier en ce qui concerne le partage de fichiers de façon transparente à travers l'Internet. Pour finir Cliquez sur “OK” pour fermer la fenêtre “Propriétés TCP/IP”, Cliquez sur “OK” pour fermer la fenêtre “Panneau de Contrôle Réseau”, Redémarrez votre ordinateur si on vous le demande. C'est tout! Configurer Windows NT Il est relativement simple de configurer Windows NT pour relier un poste à votre réseau local. Les procédures sont semblables à celles suivies pour Windows 95 à quelques différences près quant à l'interface utilisateur. Les étapes décrites ci-dessous s'appliquent à Windows NT 4.0 Workstation, mais les principes sont les mêmes pour Windows NT 3.5x. Si vous installez un poste Windows NT 3.5x, vous pouvez vous référer au paragraphe Configurer Windows for Workgroups, en effet, l'interface utilisateur est la même pour NT 3.5x et WfW. Effectuez les opérations suivantes: Créer le fichier Windows NT <filename>hosts</filename> Pour vous connecter aux autres postes TCP/IP du réseau local, vous devrez installer une copie du fichier hosts que vous avez créé sur votre système FreeBSD au paragraphe Configurer Windows for Workgroups. Cliquez sur le bouton “Démarrer”, choisissez “Exécuter ...”, lancez notepad \WINDOWS\SYSTEM\DRIVERS\ETC\HOSTS et cliquez sur “OK”, Sous l'éditeur, entrez les noms et les adresses des machines recopiés du fichier hosts du paragraphe Renseigner la liste des autres machines du réseau, Une fois que c'est fait, quittez notepad (assurez-vous d'avoir enregistré le fichier!). Définir le configuration réseau TCP/IP Windows NT Cliquez sur le bouton “Démarrer” de la barre de tâches, Choisissez “Paramètres” et “Panneau de Configuration”, Double-cliquez sur l'icône réseau pour l'ouvrir, Dans l'onglet “Identification”, vérifiez les informations des zones “Nom d'Ordinateur” et “Workgroup”. Dans notre exemple, “Shemp” sera le nom de la machine, et “Stooges” celui du groupe de travail. Choisissez “Modifier” pour corriger ces valeurs au besoin, Choisissez l'onglet “Protocoles”. Les Protocoles Réseau installés seront affichés. Il peut y en avoir un certain nombre, mais le seul qui nous intéresse ici est le “Protocole TCP/IP”. Si le “Protocole TCP/IP” n'apparaît pas dans la liste, cliquez sur le bouton “Ajouter” pour l'installer. Ajouter | Protocole TCP/IP | OK. Sélectionnez “Protocole TCP/IP” et cliquez sur le bouton “Propriétés”. Les différentes propriétés associées à TCP/IP apparaîtront. Configurer les informations relatives à l'adresse IP Vérifiez que l'interface Ethernet est bien définie dans la zone “Carte Réseau”; si ce n'est pas le cas, parcourez la liste des contrôleurs jusqu'à ce que l'interface adéquate soit affichée. Choisissez l'option “Spécifier une Adresse IP” pour activer les trois zones de texte, Dans notre exemple, le poste Windows NT est celui qui s'appele “Shemp”. Dans la zone “Adresse IP”, entrez “192.168.1.4”, Entrez “255.255.255.0” dans le zone “Masque de Sous-réseau.”. Configurer les informations relatives à la passerelle Dans le réseau de notre exemple, c'est le système FreeBSD qui sera notre passerelle vers l'Internet (routant les paquets entre le réseau local Ethernet et la connexion PPP). S'il n'y a rien encore dans la zone “Nouvelle Passerelle”, entrez l'adresse IP de l'interface Ethernet de la machine FreeBSD, “192.168.1.1”, dans cette zone et cliquez sur le bouton “Ajouter”. Sinon, utilisez le bouton "Avancées" et la fonction “Ajouter” pour ajouter cette nouvelle passerelle. S'il y a d'autres passerelles définies dans les “Passerelles Installées”, peut-être devrez-vous les supprimer. Configurer les informations relatives au DNS Nous supposons que votre fournisseur d'accès Internet vous a donné une liste de serveurs de noms de domaines (Domain Name Servers) - ou “Serveurs DNS” - que vous devez utiliser. Si vous voulez mettre en service un serveur DNS sur votre machine FreeBSD, reportez-vous au chapitre Exercices pour l'étudiant intéressé pour avoir des indications sur l'installation d'un serveur DNS sur une machine FreeBSD. Cliquez sur le bouton “DNS”, Dans la zone “Nom d'Hôte”, entrez le nom du poste Windows NT, dans notre cas : “Shemp”, Dans la zone “Domaine”, entrez le nom du réseau local, dans notre cas : “my.domain”, Dans la zone “Ordre de recherche du service DNS”, entrez les adresses IP des serveurs DNS que votre fournisseur vous a données, cliquez sur “Ajouter” à chaque adresse que vous définissez. Répétez l'opération autant de fois que nécessaire pour entrer toutes les adresses que votre fournisseur vous a indiquées. Autres options TCP/IP Windows NT Pour nos besoins, les paramètres des sections “Adresses WINS” et “Routage” sont inutiles. Si vous souhaitez utiliser le service de noms Internet de Windows (Windows Internet Naming Service - “WINS”), vous trouverez plus d'informations sur http://www.localnet.org, en particulier en ce qui concerne le partage de fichiers de façon transparente à travers l'Internet. Pour finir Cliquez sur “OK” pour fermer la fenêtre “Propriétés TCP/IP”, Cliquez sur “OK” pour fermer la fenêtre “Panneau de Contrôle Réseau”, Redémarrez votre ordinateur si on vous le demande. C'est tout! Configurer Windows for Workgroups Pour qu'un poste Windows for Workgroups puisse être utilisé en réseau, il faut avoir installé les pilotes qui sont sur la disquette Microsoft TCP/IP. Ces pilotes ne sont pas inclus avec WfW et les disquettes qui vont avec. S'il vous en faut une copie, ils sont disponibles sur ftp://ftp.microsoft.com/peropsys/windows/public/tcpip. Une fois que les pilotes TCP/IP ont été installés, effectuez les opérations suivantes: Créer le fichier Windows for Workgroups <filename>hosts</filename> Pour vous connecter aux autres postes TCP/IP du réseau local, vous devrez installer une copie du fichier hosts que vous avez créé sur votre système FreeBSD au paragraphe Renseigner la liste des autres machines du réseau. Dans le Gestionnaire de Programmes, cliquez sur le bouton “Fichier”, choisissez “Exécuter ...”, lancez notepad \WINDOWS\HOSTS et cliquez sur “OK”, Sous l'éditeur, entrez les noms et les adresses des machines recopiés du fichier hosts de Renseigner la liste des autres machines du réseau, Une fois que c'est fait, quittez notepad (assurez-vous d'avoir enregistré le fichier!). Définir le configuration réseau TCP/IP Windows for Workgroups Dans le Gestionnaire de Programmes, ouvrez le groupe “Réseau” en double-cliquant sur l'icône, Double-cliquez sur l'icône “Paramètres Réseau”, Dans la boîte de dialogue “Pilotes Réseau”, double-cliquez sur l'option “Microsoft TCP/IP-32”. Configurer les informations relatives à l'adresse IP Vérifiez que l'interface Ethernet est bien définie dans la liste “Carte Réseau”; si ce n'est pas le cas, parcourez la liste des contrôleurs jusqu'à ce que l'interface adéquate soit affichée et sélectionnez-la en cliquant dessus. Vérifiez que l'option “Activer la Configuration DHCP Automatique” n'est pas sélectionnée. Si c'est le cas, cliquez dessus pour effacer le “X”. Dans notre exemple, le poste Windows for Workgroups est celui qui s'appelle “Moe”; dans la zone “Adresse IP”, entrez “192.168.1.3”, Entrez “255.255.255.0” dans le zone “Masque de Sous-réseau”. Configurer les informations relatives à la passerelle Dans le réseau de notre exemple, c'est le système FreeBSD qui sera notre passerelle vers l'Internet (routant les paquets entre le réseau local Ethernet et la connexion PPP). Entrez l'adresse IP de l'interface Ethernet de la machine FreeBSD, “192.168.1.1”, dans la zone “Passerelle par Défaut”. Configurer les informations relatives au DNS Nous supposons toujours que votre fournisseur d'accès Internet vous a donné une liste de serveurs de noms de domaines (Domain Name Servers) - ou “Serveurs DNS” - que vous devez utiliser. Si vous voulez mettre en service un serveur DNS sur votre machine FreeBSD, reportez-vous au chapitre Exercices pour l'étudiant intéressé pour avoir des indications sur l'installation d'un serveur DNS sur une machine FreeBSD. Cliquez sur l'onglet “Configuration DNS”, Dans la zone “Hôte”, entrez le nom du poste Windows for Workgroups, dans notre cas : “Moe”, Dans la zone “Domaine”, entrez le nom du réseau local, dans notre cas : “my.domain”, Dans la zone “Ordre de recherche DNS”, entrez les adresses IP des serveurs DNS que votre fournisseur vous a données, cliquez sur “Ajouter” à chaque adresse que vous définissez. Répétez l'opération autant de fois que nécessaire pour entrer toutes les adresses que votre fournisseur vous a indiquées, Cliquez sur “OK” pour fermer la fenêtre “Configuration DNS”. Pour finir Cliquez sur “OK” pour fermer la fenêtre “Propriétés TCP/IP”, Cliquez sur “OK” pour fermer la fenêtre “Panneau de Contrôle Réseau”, Redémarrez votre ordinateur si on vous le demande. C'est tout! Tester le réseau Une fois que vous aurez terminé les opérations nécessaires décrites plus haut, votre passerelle PPP vers l'Internet devrait être opérationnelle. Tester la connexion vers l'extérieur La première chose à vérifier est que la connexion s'établisse entre votre modem et votre fournisseur d'accès. Tester le réseau local *** à faire *** Exercices pour l'étudiant intéressé Gérer un mini-DNS Bien que gérer une hiérarchie du service de noms de domaines (“Domain Name Service” - DNS) puisse être une tâche diabolique, il est tout à fait faisable d'installer un mini-serveur DNS sur le sytème FreeBSD qui vous sert aussi de passerelle vers votre fournisseur d'accès. A partir des fichiers existants dans /etc/namedb après installation de FreeBSD, il est possible de définir un serveur DNS qui ait autorité sur le réseau de notre exemple et serve d'interface avec l'architecture DNS de l'Internet. Pour cette configuration minimale, il suffit de trois fichiers: /etc/namedb/named.boot /etc/namedb/named.root /etc/namedb/mydomain.db Le fichier /etc/namedb/named.root est automatiquement initialisé à l'installation de FreeBSD, les deux autres fichiers doivent être renseignés manuellement. Le fichier <filename>/etc/namedb/named.boot</filename> Le fichier /etc/namedb/named.boot décrit la configuration initiale du serveur DNS. Essentiellement, il indique au serveur de noms: Où sont les fichiers de configuration, De quels “noms de domaines” il a la responsabilité, Où trouver les autres serveurs DNS. Avec l'éditeur ee, créez un fichier /etc/namedb/named.boot comme suit: ; fichier de démarrage pour un mini-serveur de noms de domaines directory /etc/namedb ; type domain source machine/fichier fichier de sauvegarde cache . named.root primary my.domain. mydomain.db Les lignes qui commencent par un point-virgule sont des commentaires. Voici la signification des autres lignes: directory /etc/namedb Dit au serveur de noms où trouver les fichiers de configuration référencés dans la suite du fichier /etc/namedb/named.boot. cache . named.root Dit au serveur de noms que la liste des serveurs de la racine (“Root Servers”) se trouve dans le fichier named.root. (Ce fichier est inclus dans l'installation standard et n'est pas décrit ici.) primary my.domain mydomain.db Dit au serveur de noms qu'il a “autorité” sur un domaine DNS appelé “my.domain” et que la liste des adresses IP des machines du domaine “my.domain” (le réseau local) se trouve dans le fichier /etc/namedb/mydomain.db. Une fois créé et sauvegardé le fichier /etc/namedb/named.boot, passez à l'étape suivante pour créer le fichier /etc/namedb/named.db. Le fichier <filename>/etc/namedb/named.db</filename> Le fichier /etc/namedb/named.boot liste les noms et les adresses IP de toutes les machines du réseau local. Pour une description détaillée des instructions de ce fichier, reportez-vous aux pages de manuel de named. Le fichier /etc/namedb/named.boot de notre serveur DNS minimum contient les lignes suivantes: @ IN SOA my.domain. root.my.domain. ( 961230 ; Serial 3600 ; Refresh 300 ; Retry 3600000 ; Expire 3600 ) ; Minimum IN NS curly.my.domain. curly.my.domain. IN A 192.168.1.1 # The FreeBSD box larry.my.domain. IN A 192.168.1.2 # The Win'95 box moe.my.domain. IN A 192.168.1.3 # The WfW box shemp.my.domain. IN A 192.168.1.4 # The Windows NT box $ORIGIN 1.168.192.IN-ADDR.ARPA IN NS curly.my.domain. 1 IN PTR curly.my.domain. 2 IN PTR larry.my.domain. 3 IN PTR moe.my.domain. 4 IN PTR shemp.my.domain. $ORIGIN 0.0.127.IN-ADDR.ARPA IN NS curly.my.domain. 1 IN PTR localhost.my.domain. Brièvement, ce fichier déclare que le serveur DNS local est: Le “Début d'Autorité” (Start Of Authority) pour le domaine appelé “my.domain”, Le serveur de noms (Name Server - “NS”) pour “my.domain”, Responsable de la résolution inverse des adresses IP qui commencent par “192.168.1” et “127.0.0” (“$ORIGIN ...”). Pour ajouter de nouvelles machines, vous devez ajouter deux lignes pour chaque système; une dans la section du haut où les noms des systèmes sont associés aux adresses Internet (“IN A”), et une autre ligne qui associe inversement l'adresse au nom de la machine (“IN PTR”), dans la section “$ORIGIN 1.168.192.IN-ADDR.ARPA”. Démarrer le serveur DNS Par défaut, le serveur DNS (/etc/sbin/named) n'est pas lancé au démarrage du système. Vous pouvez modifier ce comportement en rectifiant une seule ligne dans le fichier /etc/rc.conf, comme suit: Avec l'éditeur ee, visualisez le fichier /etc/rc.conf. Descendez d'une quarantaine de lignes jusqu'à ce que vous trouviez la section qui dit: --- named_enable="NO" # Run named, the DNS server (or NO). named_flags="-b /etc/namedb/named.boot" # Flags to named (if enabled). --- et modifiez-la en: --- named_enable="YES" # Run named, the DNS server (or NO). named_flags="-b /etc/namedb/named.boot" # Flags to named (if enabled). --- Sauvegardez le fichier et redémarrez le système. Vous pouvez aussi démarrer le serveur DNS avec la commande suivante: # named -b /etc/namedb/named.boot Chaque fois que vous modifiez les fichiers du répertoire /etc/namedb/named.boot, vous devez faire relire ces modifications par le serveur DNS avec la commande suivante: # kill -HUP `cat /var/run/named.pid` Essayer les filtres PPP Le programme ppp a la capacité d'appliquer des règles de filtrage au trafic qu'il route. Bien que cela ne soit pas aussi sécurisé qu'un véritable coupe-feu, cela autorise quelques contrôles d'accès à la liaison. (“man ipfw” pour plus d'informations sur la configuration d'un système FreeBSD plus sécurisé.) La documentation complète des différents filtres et règles utilisables avec le programme ppp se trouve dans les pages de manuel de ppp. Il y a quatre classes de filtres qui s'appliquent au programme ppp: afilter - filtre compteur d'accès (ou “Keep Alive” - garder en vie) Ils définissent quels événements sont ignorés par l'instruction set timeout=. dfilter - filtre d'appel Ils définissent quels événements sont ignorés par ppp en mode connexion à la demande. ifilter - filtre d'entrée Ils définissent quels paquets entrants sont acceptés ou refusés par le programme ppp. ofilter - filtre de sortie Ils définissent quels paquets sortants sont acceptés ou refusés par le programme ppp. L'exemple qui suit est un extrait de la configuration d'un système opérationnel qui donne une bonne base pour un fonctionnement Internet “normal”, tout en empêchant que ppp accepte n'importe quoi sur la liaison. Les commentaires décrivent la logique de chaque jeu de règles.: # # filtres KeepAlive # ne pa prendre en compte les paquets ICMP,DNS et RIP # set afilter 0 deny icmp set afilter 1 deny udp src eq 53 set afilter 2 deny udp dst eq 53 set afilter 3 deny udp src eq 520 set afilter 4 deny udp dst eq 520 set afilter 5 permit 0/0 0/0 # # filtre d'appel: # Note: ICMP établira la connexion dans cette configuration! # set dfilter 0 permit 0/0 0/0 # # autoriser les paquets ident # set ifilter 0 permit tcp dst eq 113 set ofilter 0 permit tcp src eq 113 # # autoriser les connexions telnet à l'Internet # set ifilter 1 permit tcp src eq 23 estab set ofilter 1 permit tcp dst eq 23 # # autoriser l'accès ftp à l'Internet # set ifilter 2 permit tcp src eq 21 estab set ofilter 2 permit tcp dst eq 21 set ifilter 3 permit tcp src eq 20 dst gt 1023 set ofilter 3 permit tcp dst eq 20 # # autoriser les requêtes DNS # set ifilter 4 permit udp src eq 53 set ofilter 4 permit udp dst eq 53 # # autoriser les transferts de zone DNS # set ifilter 5 permit tcp src eq 53 set ofilter 5 permit tcp dst eq 53 # # autoriser l'accès depuis/vers le réseau local # set ifilter 6 permit 0/0 192.168.1.0/24 set ofilter 6 permit 192.168.1.0/24 0/0 # # autoriser les réponses au ping et traceroute # set ifilter 7 permit icmp set ofilter 7 permit icmp set ifilter 8 permit udp dst gt 33433 set ofilter 9 permit udp dst gt 33433 # # autoriser cvsup # set ifilter 9 permit tcp src eq 5998 set ofilter 9 permit tcp dst eq 5998 set ifilter 10 permit tcp src eq 5999 set ofilter 10 permit tcp dst eq 5999 # # autoriser NTP pour la synchronization des horloges # set ifilter 11 permit tcp src eq 123 dst eq 123 set ofilter 11 permit tcp src eq 123 dst eq 123 set ifilter 12 permit udp src eq 123 dst eq 123 set ofilter 12 permit udp src eq 123 dst eq 123 # # SMTP serait une bonne idée! # set ifilter 13 permit tcp src eq 25 set ofilter 13 permit tcp dst eq 25 # # # nous utilisons beaucoup whois, donc nous le laissons passer # set ifilter 14 permit tcp src eq 43 set ofilter 14 permit tcp dst eq 43 set ifilter 15 permit udp src eq 43 set ofilter 15 permit udp dst eq 43 # # si aucune des conditions ci-dessus n'est remplie, le paquet est refusé #------- Il peut y avoir jusqu'à vingt règles dans chaque classe de filtres. Dans chaque classe, les règles sont numérotées séquentiellement de 0 à 20, mais aucune règle dans une classe particulière n'est appliquée tant que la règle “0” n'est pas définie! Si vous décidez de ne pas utiliser de règles de filtrage dans votre configuration du programme ppp, alors TOUT le trafic de/vers votre système sera accepté lorsqu'il est connecté à votre fournisseur d'accès. Si vous décidez d'appliquer des règles de filtrages, ajoutez les lignes précédentes à votre fichier /etc/ppp/ppp.conf dans l'une des sections “default”, “demand” ou “interactive” (ou à toutes - c'est à vous de voir).
diff --git a/fr_FR.ISO8859-1/articles/programming-tools/article.sgml b/fr_FR.ISO8859-1/articles/programming-tools/article.sgml index 60b613df59..3cf63f5963 100755 --- a/fr_FR.ISO8859-1/articles/programming-tools/article.sgml +++ b/fr_FR.ISO8859-1/articles/programming-tools/article.sgml @@ -1,2001 +1,2001 @@ %man; %urls; %abstract; %artheader; %translators; %authors; - %mailing-lists; + %mailing-lists; ]>
Les outils de développement sous FreeBSD : Guide de l'utilisateur James Raynard
jraynard@freebsd.org
17 Août 1997 Copyright © James Raynard, 1997. Ce document est une introduction à l'utilisation de quelques-uns des outils de programmation fournis avec FreeBSD, quoique l'essentiel reste aussi valable pour de nombreuses autres versions d'Unix. Il ne cherche pas à expliquer en détail comment coder. La plus grande partie du document suppose que vous n'avez aucune ou peu de notions préalables de programmation, bien que l'on espère que la plupart des programmeurs y trouveront quelque chose qui leur sera utile. &abstract.disclaimer; &trans.a.haby;
Introduction<anchor id=foo> FreeBSD fournit un excellent environnement de développement. Le système de base comprend des compilateurs C, C++ et Fortran, et un assembleur, pour ne pas mentionner l'interpréteur Perl et les outils Unix classiques comme sed et awk. Si cela ne vous suffit pas, il y a beaucoup d'autres compilateurs et interpréteurs au catalogue des logiciels portés. FreeBSD est très largement compatible avec les standards comme POSIX et ANSI C, de même qu'avec son propre héritage BSD, il est donc possible d'écrire des applications qui compilent et s'exécutent sur une grande variété de plates-formes. Toute cette puissance, toutefois, peut submerger au premier abord, si vous n'avez jamais auparavant écrit de programme sur une plate-forme Unix. Ce document vise à vous aider à vous y mettre, sans approfondir trop les questions les plus avancées. L'intention est de vous fournir suffisamment de bases pour vous permettre de tirer ensuite profit de la documentation. La plus grande partie du document ne demande aucune ou peu de connaissance de la programmation mais suppose une compétence de base dans l'utilisation d'Unix et la volonté d'apprendre! Introduction à la programmation Un programme est une série d'instructions qui dit à l'ordinateur de faire des choses diverses; l'instruction qu'il doit exécuter dépend parfois de ce qui s'est passé lorsqu'il a exécuté une instruction précédente. Cette section vous donne un aperçu des deux principales méthodes pour transmettre ces instructions, ou “commandes” comme on les appellent. L'une est d'utiliser un interpréteur, l'autre de se servir d'un compilateur. Comme les langues humaines sont trop compliquées pour être comprises sans ambiguïté par un ordinateur, les commandes sont généralement écrites dans l'un ou l'autre des languages spécialement conçus à cet effet. Interpréteurs Dans le cas d'un interpréteur, le langage s'accompagne d'un environnement, sous lequel vous tapez des commandes à son invite et qui les exécute pour vous. Pour des programmes plus compliqués, vous pouvez saisir les commandes dans un fichier et le faire charger et exécuter les commandes qu'il contient par l'interpréteur. Si quelque chose se passe mal, la plupart des interpréteurs passeront le contrôle à un débogueur pour vous aider à trouver l'origine du problème. Cela a l'avantage de vous permettre de voir immédiatement le résultat de vos commandes et de corriger sur le champ vos erreurs. Le principal inconvénient survient lorsque vous voulez partager vos programmes avec d'autres. Il faut qu'ils aient le même interpréteur que vous ou que vous ayez le moyen de leur fournir cet interpréteur; il faut aussi qu'ils comprennent comment s'en servir. Les utilisateurs peuvent aussi ne pas apprécier de se retrouver sous un débogueur s'ils appuyent sur la mauvaise touche! Du point de vue de la performance, les interpréteurs utilisent parfois beaucoup de mémoire et ne générent habituellement pas le code aussi efficacement que les compilateurs. A mon avis, les langages interprétés sont le meilleur moyen de débuter si vous n'avez jamais programmé auparavant. On trouve typiquement ce genre d'environnement avec des langages tels que Lisp, Smalltalk, Perl et Basic. On peut aussi avancer que le shell Unix est lui-même un interpréteur, beaucoup écrivent en fait avec des procédures - scripts - pour se faciliter le travail d'administration de leur machine. De fait, une partie de la philosphie d'origine d'Unix était de fournir nombre de petits programmes utilitaires qui puissent être utilisés de concert dans des procédures pour effectuer des tâches utiles. Interpréteurs disponibles pour FreeBSD Voici une liste des interpréteurs disponibles sous forme de “paquetages” FreeBSD, accompagnée d'une brève description des langages interprétés les plus répandus. Pour vous procurer l'un de ces “paquetages”, il vous suffit de cliquer sur le lien correspondant et d'exécuter ensuite: &prompt.root; pkg_add nom_du_paquetage sous le compte super-utilisateur root. Il faut bien évidemment que vous ayez un système FreeBSD 2.1.0 ou ultérieur en état de marche pour que le logiciel fonctionne. BASIC Abréviation pour “Beginner's All-purpose Symbolic Instruction Code” - code d'instructions symbolique universel pour les débutants. Développé dans les années 50 pour apprendre la programmation aux étudiants des Universités et fourni avec tout ordinateur personnel qui se respectait dans les années 80, BASIC a été le premier langage pour de nombreux programmeurs. C'est aussi la base de Visual Basic. L'interpréteur Basic Bywater et l'interpréteur Basic de Phil Cockroft (appelé auparavant “Rabbit Basic”) sont disponibles sous forme de “paquetages” FreeBSD. Lisp Un langage développé à la fin des années 1950 comme alternative aux langages “dévoreurs de nombres” qui e´taient populaires à l'époque. Au lieu d'être basé sur les nombres, Lisp repose sur les listes; de fait, son nom est une abréviation pour “List Processing” - traitement de listes. Trés répandu dans les milieux de l'IA (Intelligence Artificielle). Lisp est un langage très puissant et sophistiqué, mais peut être assez lourd et bavard. FreeBSD dispose de GNU Common Lisp sous forme de “paquetage”. Perl Très employé par les administrateurs système pour écrire des procédures; et souvent aussi sur les serveurs World Wide Web pour écrire des procédures CGI. La Version 4, qui est probablement encore la version la plus largement répandue est fournie avec FreeBSD; le plus récent Perl Version 5 est disponible sous forme de “paquetage”. Scheme Un dialecte de Lisp qui est plutôt plus compact et plus propre que Common Lisp. Courant dans les Universités parce qu'il est assez facile à enseigner en premier cycle comme langage d'initiation et présente un niveau d'abstraction suffisant pour être utilisé pour du travail de recherche. FreeBSD offre en “paquetages” l'Interpréteur Scheme Elk, l'Interpréteur Scheme du MIT et l'Interpréteur Scheme SCM. Icon Le langage de programmation Icon. Logo L'interpréteur LOGO de Brian Harvey. Python Le langage de programmation orienté objet Python. Compilateurs Les compilateurs sont assez différents. Vous écrivez d'abord votre code dans un(des) fichiers(s) à l'aide d'un éditeur. Vous exécutez ensuite le compilateur et voyez s'il valide votre programme. S'il ne le compile pas, serrez les dents et retournez sous l'éditeur. S'il le compile et vous en fait un programme, vous pouvez l'utiliser soit à l'invite de l'interpréteur de commande, soit en vous servant d'un débogueur pour voir s'il fonctionne correctementDans le cas contraire, si vous l'exécutez sur la ligne de commande, il peut éventuellement planter - “core dump”.. Ce n'est évidemment pas aussi immédiat que de se servir d'un interpréteur. Cela vous permet cependant de faire beaucoup de choses qui sont très difficiles ou même irréalisables avec un interpréteur, comme écrire du code qui interagisse étroitement avec le système d'exploitation -  ou même écrire votre propre système d'exploitation! C'est aussi utile si vous avez besoin d'écrire du code très efficace, parce que le compilateur peut prendre son temps et optimiser le code, ce qui ne serait pas acceptable d'un interpréteur. Distribuer un programme écrit pour un compilateur est généralement plus facile - il suffit de livrer une copie de l'exécutable, en supposant que les destinataires aient le même système d'exploitation que vous. Les langages compilés incluent Pascal, C et C++. C et C++ sont des langages qui pardonnent assez peu, et plus adaptés aux programmeurs plus expérimentés. Pascal, d'un autre côté, a été conçu pour l'enseignement, et est un assez bon langage avec lequel commencer. Malheureusement, FreeBSD n'a aucun support pour Pascal, à l'exception d'un convertisseur de Pascal en C, au catalogue des logiciels portés. Comme le cycle “édition-compilation-exécution-débogage” est assez fastidieux, de nombreux fournisseurs de compilateurs commerciaux ont produit des Environnements de Développement Intégrés (EDI en abrégé). FreeBSD ne dispose pas d'EDI en tant que tel; il est cependant possible d'utiliser Emacs à cet effet. C'est expliqué à la section Utiliser Emacs comme environnement de développement. Compiler avec <command>cc</command> Cette section ne s'occupe que du compilateur GNU pour C et C++, qui est fourni de base avec le système FreeBSD. Il peut être appelé soit avec la commande cc, soit avec gcc. Les détails de la réalisation d'un programme avec un interpréteur varient considérablement d'un interpréteur à l'autre, est sont généralement bien décrits par l'aide en ligne de l'interpréteur. Une fois que vous avez écrit votre chef-d'oeuvre, l'étape suivante consiste à le convertir en quelque chose qui (espérons-le!) s'exécutera sous FreeBSD. Cela demande habituellement plusieurs opérations successives, dont chacune est confiée à un programme différent. Pré-processer votre code source pour en éliminer les commentaires et faire diverses autres choses, comme la substitution des macros-instructions en C. Vérifier la syntaxe de votre code pour s'assurer que vous avez respecté les règles du langage. Si ce n'est pas le cas, il rouspétera. Convertir le code source en langage assembleur - c'est très proche du code machine, mais encore compréhensible par des êtres humains. C'est du moins ce que l'on prétendPour être rigoureusement exact, cc convertit le code source en un P-code qui lui est propre, et ne dépend pas de la machine, et non en assembleur à ce stade.. Convertir le langage assembleur en code machine - oui, nous parlons ici de bits et d'octets, de zéros et de uns. Vérifier que vous avez utilisé de façon cohérente les fonctions et les variables globales. Si, par exemple, vous avez appelé une fonction qui n'existe pas, il s'en plaindra. Si vous essayez de générer un programme à partir de plusieurs fichiers de source, faire ce qu'il faut pour les regrouper. S'arranger pour produire quelque chose que le chargeur de programmes du système pourra mettre en mémoire et exécuter. Le mot compiler est souvent utilisé pour ne désigner que les étapes 1 à 4 - les autres sont appelées édition de liens. L'étape 1 est parfois appelée pré-processer et les étapes 3-4 assembler. Heureusement, pratiquement tous ces détails vous sont transparents, car la commande cc est une interface qui gère pour vous l'appel de ces différents programmes avec les bons arguments; taper simplement: &prompt.user; cc foobar.c effectue la compilation de foobar.c en passant par toutes les étapes décrites ci-dessus. Si vous avez à compiler plus d'un fichier, faites simplement quelque chose comme: &prompt.user; cc foo.c bar.c Notez que la vérification syntaxique ne consiste qu'en cela: vérifier la syntaxe. Il n'y aura pas de contrôle sur les erreurs logiques que vous auriez commises, comme faire exécuter au programme une boucle infinie ou utiliser un tri à bulles au lieu d'un tri par arbre binaireAu cas où vous ne le sauriez pas, un tri par arbre binaire est une manière efficace d'ordonner des données, ce qui n'est pas le cas du tri à bulles.. cc dispose d'une quantité d'options, qui sont toutes décrites dans les pages de manuel. En voici quelques-unes des plus importantes, et la façon de les utiliser. 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.c l'exécutable est a.out &prompt.user; cc -o foobar foobar.c l'exécutable est foobar 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.c Cela 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. 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 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.c Cela produira une version débogable du programmeRemarquez que nous n'avons pas utilisé l'indicateur 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!. 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 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 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.c Cela 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. 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. 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. 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.c Cela générera un exécutable foobar après avoir vérifié que foobar.c respecte la norme. 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 . Par exemple, la bibliothèque mathématique s'appelle libm.a, vous donnez donc à cc l'argument . 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 -lm Cela ajoutera à l'édition de liens de foobar des fonctions de la bibliothèque mathématique. Si vous compilez du code C++, vous devrez ajouter , ou 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.cc Chacun 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 <command>cc</command> Q. 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 segment R. 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 -lm Q. D'accord, j'ai écrit ce petit programme pour m'entraîner à utiliser . 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.000000 Ce 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.766121 Si vous utilisez la moindre fonction mathématique, incluez toujours math.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 : &prompt.user; cc -o foobar foobar.c Q. 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 pidpid 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. Make Qu'est-ce que <command>make</command>? 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.ofile37.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 <command>make</command> Voici 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 cible make 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 FreeBSD L'é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 <command>make</command> make 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éboguer Le débogueur Le 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 RET Se 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ébogueur Il faudra que vous ayez compilé le programme avec l'option 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 . A l'invite de gdb, tapez break main. Cela dira au débogueur d'exécuter le code préliminaire de mise en oeuvre dans le programme et de s'arrêter au début de votre programme. Tapez maintenant run pour lancer le programme - il commencera au début du code préliminaire et sera interrompu par le débogueur sur l'appel de main(). (Si vous vous étiez jamais demandé d'où la fonction main() était appelée, vous le savez maintenant!). Vous pouvez maintenant exécuter le programme une ligne à la fois, en appuyant sur n. Si vous arrivez sur un appel de fonction, vous pouvez passer dans la fonction en appuyant sur s. Une fois dans la fonction, vous pouvez terminer son exécution et en sortir en tapant f. Vous pouvez aussi utiliser up et down pour jeter un coup d'oeil au code appelant. Voici un exemple simple de la manière de diagnostiquer une erreur dans un programme avec gdb. Voici notre programme (intentionnellement faux): #include <stdio.h> int bazz(int un_entier); main() {       int i;       printf("C'est mon programme\n");       bazz(i);       return 0; } int bazz(int un_entier) {       printf("Vous m'avez donné %d\n", un_entier);       return un_entier; } Ce programme affecte à i la valeur 5 et la passe à la fonction bazz() qui affiche la valeur que nous lui donnons en paramètre. Quand nous compilons et exécutons le programme, nous obtenons: &prompt.user; cc -g -o temp temp.c &prompt.user; ./temp C'est mon programme Vous m'avez donné 4231 Ce n'est pas ce à quoi nous nous attendions! C'est le moment d'aller voir ce qui ce passe! &prompt.user; gdb temp GDB is free software and you are welcome to distribute copies of it under certain conditions; type "show copying" to see the conditions. There is absolutely no warranty for GDB; type "show warranty" for details. GDB 4.13 (i386-unknown-freebsd), Copyright 1994 Free Software Foundation, Inc. (gdb) break main Exécuter le code d'initialisation Breakpoint 1 at 0x160f: file temp.c, line 9. gdb met un pont d'arrêt à l'appel de main() (gdb) run Exécuter jusqu'à main() Starting program: /home/james/tmp/temp Le programme démarre Breakpoint 1, main () at temp.c:9 gdb s'arrête à main() (gdb) n Aller à la ligne suivante C'est mon programme Le programme imprime (gdb) s Aller dans bazz() bazz (un_entier=4231) at temp.c:17 gdb affiche la position dans la pile d'appel (gdb) Une minute! Comment un_entier peut-il valoir 4231? Ne l'avons-nous pas initialisé à 5 dans main()? Revenons à main() et jetons un oeil. (gdb) up Remonter d'un cran dans la pile d'appel #1 0x1625 in main () at temp.c:11 gdb affiche la position dans la pile d'appel (gdb) p i Afficher la valeur de i $1 = 4231 gdb affiche 4231 Et oui! Si nous regardons le code, nous avons oublié d'initialiser i. Nous voulions mettre: main() {       int i;       i = 5;       printf("C'est mon programme\n"); &hellip mais nous avons oublié la ligne i=5;. Comme nous n'avons pas initialisé i, il prend la valeur qui se trouve à cet endroit de la mémoire quand le programme s'exécute, dans notre cas, il s'est trouvé que c'était 4231. gdb affiche l'endroit où nous nous trouvons dans la pile d'appel, chaque fois que nous entrons ou sortons d'une fonction, même si nous utilisons up et down pour nous déplacer dans la pile. Cela nous donne le nom de la fonction et les valeurs de ses paramètres, ce qui nous aide à repérer où nous sommes et ce qu'il se passe. (La pile d'appel est une zone de mémoire où le programme enregistre les informations sur les paramètres passés aux fonctions et où aller quand il ressort d'un fonction appelée.) Examiner un fichier “<foreignphrase>core</foreignphrase>” Un fichier “core” est essentiellement un fichier qui contient l'état complet du programme au moment où il s'est “planté”. Au “bon vieux temps”, les programmeurs devaient imprimer le contenu en hexadécimal des fichiers “core” et transpirer sur des manuels de code machine, mais la vie est aujourd'hui un peu plus facile. Au passage, sous FreeBSD et les autres systèmes 4.4BSD, un fichier “core” s'appelle nom_du_programme.core, et non core tout court, de façon à ce que l'on sache à quel programme il correspond. Pour examiner un fichier “core”, lancez gdb comme d'habitude. Au lieu de taper break ou run, tapez: (gdb) core nom_du_programme.core Si vous n'êtes pas dans le même répertoire que le fichier “core”, vous devrez d'abord faire dir /ou/se/trouve/le/fichier/core. Vous devriez voir quelque chose comme: &prompt.user; gdb a.out GDB is free software and you are welcome to distribute copies of it under certain conditions; type "show copying" to see the conditions. There is absolutely no warranty for GDB; type "show warranty" for details. GDB 4.13 (i386-unknown-freebsd), Copyright 1994 Free Software Foundation, Inc. (gdb) core a.out.core Core was generated by `a.out'. Program terminated with signal 11, Segmentation fault. Cannot access memory at address 0x7020796d. #0 0x164a in bazz (un_entier=0x5) at temp.c:17 (gdb) Dans ce cas, le programme s'appelait a.out, le fichier “core” s'appelle donc a.out.core. Nous constatons que le programme s'est terminé en erreur à cause d'une tentative d'accès à une zone de mémoire qui n'était pas accessible dans une fonction appelé bazz. Il est parfois utile de pouvoir savoir comment une fonction a été appelée, parce que le problème peut s'être produit bien au-dessus dans la pile d'appel dans un programme complexe. La commande bt dit à gdb d'imprimer en remontant la pile d'appel: (gdb) bt #0 0x164a in bazz (un_entier=0x5) at temp.c:17 #1 0xefbfd888 in end () #2 0x162c in main () at temp.c:11 (gdb) La fonction end() est appelée quand un programme échoue; dans le cas présent, la fonction bazz() a été appelée par main(). Prendre le contrôle d'un programme en cours d'exécution Une des possibilités les plus intéressantes de gdb est qu'il peut se rattacher à un programme en cours d'exécution. Il faut bien sûr que vous ayez les autorisations suffisantes pour le faire. Le cas d'un programme qui “fourche” - fork - est un problème classique, lorsque vous voulez suivre le déroulement du processus fils, alors que le débogueur ne vous permet que de tracer le processus père. Vous lancez alors un autre gdb, utilisez ps pour connaître l'IDentifiant de processus du fils, puis faites: (gdb) attach pid sous gdb, et déboguez alors comme d'habitude. “Tout cela est bien beau”, vous dites vous peut-être, “mais le temps que j'ai fait tout ça, le processus fils aura déjà fait un bon bout de chemin”. Rien à craindre, aimable lecteur, voici ce qu'il faut faire (emprunté aux pages “info” de gdb): &hellip if ((pid = fork()) < 0)         /* _Toujours_ effectuer se contrôle */       error(); else if (pid == 0) {            /* C'est le processus fils */       int PauseMode = 1;       while (PauseMode)             sleep(10);          /* Attendre que quelqu'un se rattache à nous */       … } else {                        /* parent */       … Il n'y a plus qu'à se rattacher au fils, positionner PauseMode à 0, et attendre que l'appel de sleep() nous rende la main! Utiliser Emacs comme environnement de développement Emacs Les systèmes Unix ne s'accompagnent malheureusement pas du type d'environnement de développement intégré du genre “tout ce que vous avez toujours voulu et encore beaucoup plus en un seul monstrueux paquetage” dont disposent d'autres systèmesAu moins, pas à moins que vous ne soyez prêt à les payer une somme astronomique.. Il est cependant possible de mettre au point votre propre environnement. Il ne sera peut-être pas aussi esthétique et il ne sera peut-être pas aussi intégré, mais vous pourrez le configurer comme vous le voulez. Et il est gratuit. En plus, vous en avez les sources. Emacs est la clé de tout. Il y a bien des gens qui le décrient, mais nombreux sont ceux qui l'aiment. Si vous êtes des premiers, j'ai peur que cette section n'ait que peu d'intérêt pour vous. Il vous faudra aussi pas mal de mémoire pour l'utiliser. Je conseille 8Mo en mode texte et 16Mo sous X comme strict minimum pour avoir des temps de réponse raisonnables. Emacs est essentiellement un éditeur extrêmement configurable - il a de fait été configuré au point de ressembler plus à un système d'exploitation qu'à un éditeur! De nombreux développeurs et administrateurs système passent le plus clair de leur temps à travailler sous Emacs, le quittant seulement pour se déconnecter. Il est impossible de même résumer ici tout ce qu'Emacs est capable de faire, mais voici quelques fonctionnalités qui intéressent les développeurs: Editeur très puissant qui permet et de rechercher et remplacer des chaînes de caractères et d'utiliser pour le faire des expressions régulières (motifs), d'aller au début ou à la fin de blocs syntaxiques, etc, etc. Menus déroulants et aide en ligne. Mise en valeur et indentation en fonction de la syntaxe du langage utilisé. Complètement configurable. Vous pouvez compiler et déboguer des programmes depuis Emacs. En cas d'erreur à la compilation, vous pouvez aller directement à la ligne qui en est la cause. Interface ergonomique au programme info qui sert à lire la documentation hypertexte GNU, dont celle d'Emacs lui-même. Interface conviviale pour gdb, qui vous permet de visualiser le code source en même temps que vous exécutez pas à pas le programme. Vous pouvez lire les “news” Usenet et votre courrier électronique pendant que votre programme compile. Et sans aucun doute bien d'autres choses qui m'ont échappées. Emacs peut être installé sous FreeBSD sous forme de logiciel porté. Une fois qu'il est installé, lancez-le et tapez C-h t - ce qui signifie maintenir enfoncée la touche Ctrl, taper h, relâcher la touche Ctrl, et appuyer ensuite sur t -  pour lire le guide d'Emacs (Vous pouvez aussi utiliser la souris pour sélectionner Emacs Tutorial - “Guide Emacs” - depuis le menu Help - “Aide”). Bien qu'Emacs ait des menus, il vaut la peine d'apprendre à utiliser les raccourcis claviers, parce qu'il est bien plus rapide quand vous éditez quelque chose d'appuyer sur deux ou trois touches que de courir après la souris et cliquer ensuite au bon endroit. Si, par ailleurs, vous discutez avec des utilisateurs expérimentés d'Emacs, vous vous aperceverez qu'ils utilisent assez couramment des expressions comme “M-x replace-s RET foo RET bar RET”, il peut donc servir de comprendre ce qu'ils veulent dire. Et de toute façon, Emacs a bien plus de fonctions utiles qu'il ne peut en tenir sur une barre de menus. Il est heureusement assez facile de découvrir les raccourcis claviers, ils sont affichés dans les menus. Je vous conseille d'utiliser les menus pour, par exemple, ouvrir un fichier jusqu'à ce que vous compreniez comment cela marche et ayez suffisamment confiance en vous, puis d'essayer C-x C-f. Une fois que cela vous convient, passez à une autre des commandes des menus. Si vous ne vous rappelez pas ce que fait une combinaison donnée de touches, choisissez Describe Key - “Description d'une touche” - dans le menu Help - “Aide” - et tapez cette combinaison - Emacs vous dira ce qu'elle fait. Vous pouvez aussi utiliser le choix Command Apropos - “A propos d'une commande” - pour connaître toutes les commandes comportant un mot donné et les touches qui leur correspondent. Au fait, l'expression plus haut signifie: enfoncer la touche Méta, appuyer sur x, relâcher la touche Méta, taper replace-s (abréviation de replace-string - “remplacer une chaîne de caractères” - une autre caractéristique d'Emacs est de vous permettre d'abréger les commandes), appuyer sur Entrée, taper foo (la chaîne que vous voulez remplacer), appuyer sur Entrée, taper bar (la chaîne avec laquelle vous voulez remplacer foo) et appuyer encore sur Entrée. Emacs effectuera alors l'opération de recherche et remplacement que vous venez de demander. Si vous vous demandez ce qu'est la touche Méta, c'est une touche spéciale qu'ont beaucoup de stations Unix. Malheureusement, les PCs n'en ont pas, c'est habituellement la touche Alt qui est utilisée (ou si vous n'avez pas de chance, la touche Echap). Oh, et pour sortir d'Emacs, tapez C-x C-c (Ce qui signifie: enfoncer la touche Ctrl, appuyer sur c, appuyer sur x et relâcher la touche Ctrl). S'il y a des fichiers ouverts que vous n'avez pas sauvegardés, Emacs vous demandera si vous voulez les sauvegarder. (Oubliez que la documentation dit que la méthode habituelle pour quitter Emacs est d'utiliser C-z - cela laisse Emacs actif en tâche de fond et n'est réellement utile que si vous êtes sur un système qui ne gère pas de terminaux virtuels). Configurer Emacs Emacs fait des choses admirables; certaines fonctionnalités sont incorporées, d'autres doivent être configurées. Au lieu d'utiliser un langage de macros-instructions propriétaires, Emacs se sert d'une version de Lisp spécialement adaptée aux éditeurs, connue sous le nom de Emacs Lisp. Ce peut être très utile si vous voulez aller plus loin et apprendre ensuite par exemple Common Lisp, parce qu'il est considérablement plus léger que Common Lisp (quoique qu'encore assez imposant!). La meilleure façon d'apprendre Emacs Lisp est de télécharger le Guide Emacs Lisp. Il n'y a cependant pas besoin de connaître quoique ce soit à Lisp pour commencer à configurer Emacs, parce que j'ai inclu un fichier .emacs d'exemple, qui devrait suffire au début. Copiez-le simplement dans votre répertoire utilisateur et relancez Emacs, s'il s'exécute déjà; il lira les commandes du fichier et (je l'espère) vous fournira une configuration de base utile. Un exemple de fichier <filename>.emacs</filename> Il contient malheureusement beaucoup trop de choses pour tout expliquer en détails; il y a cependant un ou deux points intéressants à mentionner. Tout ce qui commence par un ; est en commentaire et est ignoré par Emacs. La première ligne, -*- Emacs-Lisp -*- permet d'éditer le fichier .emacs lui-même sous Emacs et de profiter de toutes les fonctionnalitées liées à l'édition de code Emacs Lisp. Emacs tente habituellement de deviner le type de fichier en fonction de son nom, mais risque de ne pas y arriver pour le fichier .emacs. La touche Tab est utilisée pour l'indentation dans certains modes, de sorte que si vous appuyez sur cette touche cela indente la ligne de code courante. Si vous voulez mettre un caractère tabulation dans votre texte, enfoncer la touche Ctrl en même temps que vous appuyez sur Tab. Ce fichier permet le mise en valeur syntaxique de code C, C++, Perl, Lisp et Scheme, en déterminant le langage d'après le nom du fichier édité. Emacs a déjà une fonction prédéfinie appelée next-error - “erreur suivante”. Dans la fenêtre de résultats d'une compilation, cela vous permet d'aller d'une erreur à la suivante avec M-n; nous définissons la fonction complémentaire previous-error - “erreur précédente”, qui vous permet de retourner à l'erreur précédente avec M-p. Le plus sympathique est que C-c C-c ouvrira le fichier source où l'erreur s'est produite et ira à la ligne concernée. Nous activons la possibilité qu'a Emacs d'agir comme serveur, de façon à ce que si vous travaillez hors d'Emacs et voulez éditer un fichier, il vous suffise de taper: &prompt.user; emacsclient nom_du_fichier pour pouvoir ensuite le modifier avec Emacs!De nombreux utilisateurs d'Emacs affectent à leur variable d'environnement EDITOR la valeur emacsclient de façon à ce que ce soit ce qui se produise chaque fois qu'ils ont besoin d'éditer un fichier.. Un exemple de fichier <filename>.emacs</filename> ;; -*-Emacs-Lisp-*- ;; Ce fichier est conçu pour être relu; la variable ;; first-time est utilisée pour éviter les problèmes ;; que cela pourra poser. (defvar first-time t "Indicateur signifiant que le fichier .emacs est lu pour la première fois") ;; Méta (global-set-key "\M- " 'set-mark-command) (global-set-key "\M-\C-h" 'backward-kill-word) (global-set-key "\M-\C-r" 'query-replace) (global-set-key "\M-r" 'replace-string) (global-set-key "\M-g" 'goto-line) (global-set-key "\M-h" 'help-command) ;; Touches fonction (global-set-key [f1] 'manual-entry) (global-set-key [f2] 'info) (global-set-key [f3] 'repeat-complex-command) (global-set-key [f4] 'advertised-undo) (global-set-key [f5] 'eval-current-buffer) (global-set-key [f6] 'buffer-menu) (global-set-key [f7] 'other-window) (global-set-key [f8] 'find-file) (global-set-key [f9] 'save-buffer) (global-set-key [f10] 'next-error) (global-set-key [f11] 'compile) (global-set-key [f12] 'grep) (global-set-key [C-f1] 'compile) (global-set-key [C-f2] 'grep) (global-set-key [C-f3] 'next-error) (global-set-key [C-f4] 'previous-error) (global-set-key [C-f5] 'display-faces) (global-set-key [C-f8] 'dired) (global-set-key [C-f10] 'kill-compilation) ;; Touches curseur (global-set-key [up] "\C-p") (global-set-key [down] "\C-n") (global-set-key [left] "\C-b") (global-set-key [right] "\C-f") (global-set-key [home] "\C-a") (global-set-key [end] "\C-e") (global-set-key [prior] "\M-v") (global-set-key [next] "\C-v") (global-set-key [C-up] "\M-\C-b") (global-set-key [C-down] "\M-\C-f") (global-set-key [C-left] "\M-b") (global-set-key [C-right] "\M-f") (global-set-key [C-home] "\M-<") (global-set-key [C-end] "\M->") (global-set-key [C-prior] "\M-<") (global-set-key [C-next] "\M->") ;; Souris (global-set-key [mouse-3] 'imenu) ;; Divers (global-set-key [C-tab] "\C-q\t") ; Ctrl tab = caractère tabulation. (setq backup-by-copying-when-mismatch t) ;; 'y' ou <CR> équivaut à yes, 'n' à no. (fset 'yes-or-no-p 'y-or-n-p) (define-key query-replace-map [return] 'act) (define-key query-replace-map [?\C-m] 'act) ;; Paquetages à charger (require 'desktop) (require 'tar-mode) ;; Mode diff évolué (autoload 'ediff-buffers "ediff" "Interface Emacs intelligente pour diff" t) (autoload 'ediff-files "ediff" "Interface Emacs intelligente pour diff" t) (autoload 'ediff-files-remote "ediff" "Interface Emacs intelligente pour diff") (if first-time     (setq auto-mode-alist           (append '(("\\.cpp$" . c++-mode)                      ("\\.hpp$" . c++-mode)                      ("\\.lsp$" . lisp-mode)                      ("\\.scm$" . scheme-mode)                      ("\\.pl$" . perl-mode)                      ) auto-mode-alist))) ;; Mise en valeur syntaxique automatique (defvar font-lock-auto-mode-list (list 'c-mode 'c++-mode 'c++-c-mode 'emacs-lisp-mode 'lisp-mode 'perl-mode 'scheme-mode) "Listes des modes à démarrer toujours avec mise en valeur") (defvar font-lock-mode-keyword-alist '((c++-c-mode . c-font-lock-keywords) (perl-mode . perl-font-lock-keywords)) "Associations entre modes et mots-clés") (defun font-lock-auto-mode-select () "Sélectionne automatiquement type de mise en valeur si le major mode courant est dans font-lock-auto-mode-list" (if (memq major-mode font-lock-auto-mode-list) (progn       (font-lock-mode t)) ) ) (global-set-key [M-f1] 'font-lock-fontify-buffer) ;; Nouveau dabbrev ;(require 'new-dabbrev) (setq dabbrev-always-check-other-buffers t) (setq dabbrev-abbrev-char-regexp "\\sw\\|\\s_") (add-hook 'emacs-lisp-mode-hook           '(lambda ()             (set (make-local-variable 'dabbrev-case-fold-search) nil)             (set (make-local-variable 'dabbrev-case-replace) nil))) (add-hook 'c-mode-hook           '(lambda ()             (set (make-local-variable 'dabbrev-case-fold-search) nil)             (set (make-local-variable 'dabbrev-case-replace) nil))) (add-hook 'text-mode-hook           '(lambda ()             (set (make-local-variable 'dabbrev-case-fold-search) t)             (set (make-local-variable 'dabbrev-case-replace) t))) ;; Mode C++ et C... (defun my-c++-mode-hook () (setq tab-width 4) (define-key c++-mode-map "\C-m" 'reindent-then-newline-and-indent) (define-key c++-mode-map "\C-ce" 'c-comment-edit) (setq c++-auto-hungry-initial-state 'none) (setq c++-delete-function 'backward-delete-char) (setq c++-tab-always-indent t) (setq c-indent-level 4) (setq c-continued-statement-offset 4) (setq c++-empty-arglist-indent 4)) (defun my-c-mode-hook () (setq tab-width 4) (define-key c-mode-map "\C-m" 'reindent-then-newline-and-indent) (define-key c-mode-map "\C-ce" 'c-comment-edit) (setq c-auto-hungry-initial-state 'none) (setq c-delete-function 'backward-delete-char) (setq c-tab-always-indent t) ;; indentation style BSD (setq c-indent-level 4) (setq c-continued-statement-offset 4) (setq c-brace-offset -4) (setq c-argdecl-indent 0) (setq c-label-offset -4)) ;; Mode Perl... (defun my-perl-mode-hook () (setq tab-width 4) (define-key c++-mode-map "\C-m" 'reindent-then-newline-and-indent) (setq perl-indent-level 4) (setq perl-continued-statement-offset 4)) ;; Mode Scheme... (defun my-scheme-mode-hook () (define-key scheme-mode-map "\C-m" 'reindent-then-newline-and-indent)) ;; Mode Emacs-Lisp... (defun my-lisp-mode-hook () (define-key lisp-mode-map "\C-m" 'reindent-then-newline-and-indent) (define-key lisp-mode-map "\C-i" 'lisp-indent-line) (define-key lisp-mode-map "\C-j" 'eval-print-last-sexp)) ;; Ajouts des précédents (add-hook 'c++-mode-hook 'my-c++-mode-hook) (add-hook 'c-mode-hook 'my-c-mode-hook) (add-hook 'scheme-mode-hook 'my-scheme-mode-hook) (add-hook 'emacs-lisp-mode-hook 'my-lisp-mode-hook) (add-hook 'lisp-mode-hook 'my-lisp-mode-hook) (add-hook 'perl-mode-hook 'my-perl-mode-hook) ;; L'inverse de next-error (defun previous-error (n) "Aller à l'erreur de compilation précédente et au code correspondant." (interactive "p") (next-error (- n))) ;; Divers... (transient-mark-mode 1) (setq mark-even-if-inactive t) (setq visible-bell nil) (setq next-line-add-newlines nil) (setq compile-command "make") (setq suggest-key-bindings nil) (put 'eval-expression 'disabled nil) (put 'narrow-to-region 'disabled nil) (put 'set-goal-column 'disabled nil) ;; Recherche dans les archives Elisp (autoload 'format-lisp-code-directory "lispdir" nil t) (autoload 'lisp-dir-apropos "lispdir" nil t) (autoload 'lisp-dir-retrieve "lispdir" nil t) (autoload 'lisp-dir-verify "lispdir" nil t) ;; Mise en valeur syntaxique (defun my-make-face (face colour &optional bold) "Créer une apparence pour une couleur, éventuellement en gras" (make-face face) (copy-face 'default face) (set-face-foreground face colour) (if bold (make-face-bold face)) ) (if (eq window-system 'x) (progn (my-make-face 'blue "blue") (my-make-face 'red "red") (my-make-face 'green "dark green") (setq font-lock-comment-face 'blue) (setq font-lock-string-face 'bold) (setq font-lock-type-face 'bold) (setq font-lock-keyword-face 'bold) (setq font-lock-function-name-face 'red) (setq font-lock-doc-string-face 'green) (add-hook 'find-file-hooks 'font-lock-auto-mode-select) (setq baud-rate 1000000) (global-set-key "\C-cmm" 'menu-bar-mode) (global-set-key "\C-cms" 'scroll-bar-mode) (global-set-key [backspace] 'backward-delete-char)                                        ; (global-set-key [delete] 'delete-char) (standard-display-european t) (load-library "iso-transl"))) ;; X11 ou PC écrivant directement à l'écran (if window-system (progn ;; (global-set-key [M-f1] 'hilit-repaint-command) ;; (global-set-key [M-f2] [?\C-u M-f1]) (setq hilit-mode-enable-list              '(not text-mode c-mode c++-mode emacs-lisp-mode lisp-mode                    scheme-mode)              hilit-auto-highlight nil              hilit-auto-rehighlight 'visible              hilit-inhibit-hooks nil              hilit-inhibit-rebinding t) (require 'hilit19) (require 'paren)) (setq baud-rate 2400) ; Pour les connections série lentes ) ;; Terminal type TTY (if (and (not window-system)          (not (equal system-type 'ms-dos)))     (progn       (if first-time           (progn             (keyboard-translate ?\C-h ?\C-?)             (keyboard-translate ?\C-? ?\C-h))))) ;; Sous UNIX (if (not (equal system-type 'ms-dos))     (progn       (if first-time           (server-start)))) ;; Ajouter ici toute modification d'apparence des caractères (add-hook 'term-setup-hook 'my-term-setup-hook) (defun my-term-setup-hook () (if (eq window-system 'pc) (progn ;; (set-face-background 'default "red") ))) ;; Restaurer le "bureau" - le faire le plus tard possible (if first-time (progn (desktop-load-default) (desktop-read))) ;; Indique que le fichier a été lu au moins une fois (setq first-time nil) ;; Plus besoin de déboguer quoi que ce soit maintenant. (setq debug-on-error nil) ;; C'est tout (message "OK, %s%s" (user-login-name) ".") Permettre à Emacs de comprendre de nouveaux langages Bon, tout cela est très bien si vous ne voulez programmer qu'avec les langages déjà introduits dans le fichier .emacs (C, C++, Perl, Lisp et Scheme), mais que se passe-t-il quand un nouveau langage appelé “whizbang” fait son apparition, avec plein de nouvelles fonctionnalités attrayantes? La première chose à faire est de regarder si whizbang s'accompagne de fichiers de configuration d'Emacs pour ce langage. Ces fichiers ont généralement comme extension .el, raccourci pour “Emacs Lisp”. Par exemple, si whizbang est un logiciel porté pour FreeBSD, ces fichiers peuvent être repérés par: &prompt.user; find /usr/ports/lang/whizbang -name "*.el" -print et il faut les installer en le copiant dans le répertoire du “site Lisp” d'Emacs. Sous FreeBSD 2.1.0-RELEASE, c'est le répertoire /usr/local/share/emacs/site-lisp. Ainsi par exemple, si la commande précédente nous donnait: /usr/ports/lang/whizbang/work/misc/whizbang.el nous le copierions alors comme suit: &prompt.user; cp /usr/ports/lang/whizbang/work/misc/whizbang.el /usr/local/share/emacs/site-lisp Décidons ensuite de l'extension que doivent avoir les fichiers source whizbang. Supposons, pour les besoins de l'exemple, qu'ils se terminent tous par .wiz. Il faut ajouter une entrée à notre fichier .emacs, pour être sûr qu'Emacs puisse utiliser les informations du fichier whizbang.el. Recherchons l'entrée auto-mode-alist dans .emacs et ajoutons une ligne pour whizbang, par exemple: ("\\.lsp$" . lisp-mode) ("\\.wiz$" . whizbang-mode) ("\\.scm$" . scheme-mode) Cela signifie qu'Emacs passera automatiquement en whizbang-mode à l'édition d'un fichier d'extension .wiz. Juste après, il y a une entrée font-lock-auto-mode-list. Ajoutez-y whizbang-mode comme ceci: ;; Auto font-lock-mode (defvar font-lock-auto-mode-list (list 'c-mode 'c++-mode 'c++-c-mode 'emacs-lisp-mode 'whizbang-mode 'lisp-mode 'perl-mode 'scheme-mode) "Listes des modes à démarrer toujours en font-lock-mode") Ce qui signifie qu'Emacs activera toujours le font-lock-mode (i.e., la mise en valeur syntaxique) à l'édition d'un fichier .wiz. Cela suffit. S'il y a autre chose que vous voulez automatiser à l'ouverture d'un fichier .wiz, vous pouvez ajouter un whizbang-mode hook (voyez mon my-scheme-mode-hook pour avoir un exemple simple qui ajoute un auto-indent - indentation automatique). A lire pour aller plus loin Brian Harvey et Matthew Wright Simply Scheme MIT 1994. ISBN 0-262-08226-8 Randall Schwartz Learning Perl O'Reilly 1993 ISBN 1-56592-042-2 Patrick Henry Winston et Berthold Klaus Paul Horn Lisp (3rd Edition) Addison-Wesley 1989 ISBN 0-201-08319-1 Brian W. Kernighan et Rob Pike The Unix Programming Environment Prentice-Hall 1984 ISBN 0-13-937681-X Brian W. Kernighan et Dennis M. Ritchie The C Programming Language (2nd Edition) Prentice-Hall 1988 ISBN 0-13-110362-8 Bjarne Stroustrup The C++ Programming Language Addison-Wesley 1991 ISBN 0-201-53992-6 W. Richard Stevens Advanced Programming in the Unix Environment Addison-Wesley 1992 ISBN 0-201-56317-7 W. Richard Stevens Unix Network Programming Prentice-Hall 1990 ISBN 0-13-949876-1
diff --git a/fr_FR.ISO8859-1/articles/zip-drive/article.sgml b/fr_FR.ISO8859-1/articles/zip-drive/article.sgml index 2f5acbe491..088b052288 100644 --- a/fr_FR.ISO8859-1/articles/zip-drive/article.sgml +++ b/fr_FR.ISO8859-1/articles/zip-drive/article.sgml @@ -1,304 +1,304 @@ %man; %urls; %abstract; %artheader; %translators; %authors; - %mailing-lists; + %mailing-lists; ]>
Les lecteurs ZIP Jason Bacon
acadix@execpc.com
&abstract.license; &abstract.disclaimer; &trans.a.boucey;
Les bases au sujet des lecteurs ZIP Les disques ZIP sont des disques magnИtiques amovibles de grande capacitИ, accessibles en lecture et en Иcriture par les lecteurs ZIP de marque IOMEGA. Les disques ZIP sont similaires aux disquettes, en Иtant cependant bien plus rapides et en ayant une capacitИ bien supИrieure. Alors qu'une disquette comporte typiquement 1.44 Mo, les disques ZIP sont disponibles en deux capacitИs, Ю savoir 100 Mo et 250 Mo. Les lecteurs ZIP ne doivent pas Йtre confondus avec super-disquette, un lecteur de disquette de 120 Mo de capacitИ, qui accepte aussi les traditionnelles disquettes de 1.44 Mo de capacitИ. IOMEGA vends aussi un lecteur Ю la capacitИ et aux performances supИrieurs appelИ JAZZ. Les lecteurs JAZZ sont livrИs en 1 Go et 2 Go de capacitИ. Les lecteurs ZIP sont disponibles en unitИ interne ou externe, utilisant l'une des trois interfaces suivantes : L'interface SCSI (Small Computer Standard Interface) est l'interface la plus rapide, la plus sophistiquИe, la plus extensible, et la plus chХre. L'interface SCSI est utilisИe sur tous types d'ordinateur, du PC Ю la station de travail RISC, jusqu'aux mini-ordinateurs, pour connecter tous types de pИriphИriques tels que lecteurs de disque, lecteurs de bande, scanners, etc. Les lecteurs ZIP SCSI peuvent Йtre internes ou externes, Иtant entendu que votre adaptateur SCSI possХde un connecteur externe. Si vous utilisez un matИriel SCSI externe, il est important de ne jamais le connecter ni le dИconnecter tout pendant que l'ordinateur est en fonctionnement. Faire ceci risque de causer des dommages aux systХmes de fichiers sur les disques en cours de connection. Si vous souhaitez le maximum de performance et la plus grande facilitИ d'installation, l'interface SCSI est le meilleur choix. Cela demandera certainement l'adjonction d'un adaptateur SCSI, puisque la majoritИ des PC (exception faite des serveurs hautes performances) ne comportent pas d'origine de support SCSI. Chaque adaptateur peut prendre en charge 7 ou 15 pИriphИriques SCSI, selon le modХle. Chaque pИriphИrique SCSI a son propre contrТleur, et ces contrТleurs sont assez intelligents et bien standardisИs (le second `S' de SCSI est l'abrИviation de Standard), ce qui signifie , du point de vue du systХme d'exploitation, que tous les lecteurs de disques SCSI sont quasiment identiques, ceci vaut aussi pour les lecteurs de bandes, etc. Pour prendre en charge du matИriel SCSI, le systХme d'exploitation n'a besoin que d'un pilote (driver) propre Ю l'adaptateur utilisИ, et un pilote gИnИrique propre Ю chaque type de matИriel, Ю savoir un pilote pour disque SCSI, un pilote pour lecteur de bande, et ainsi de suite. Il y a certains matИriels SCSI qui peuvent Йtre mieux utilisИs grБce Ю des pilotes spИcialisИs (comme par exemple les lecteurs DAT), mais, gИnИralement, ils fonctionnent bien avec le pilote gИnИrique. Il se peut alors que le pilote gИnИrique ne prenne pas en compte un certain nombre de caractХristiques spИcifiques. Utiliser un lecteur ZIP SCSI consiste simplement Ю dИterminer quel fichier matИriel dans le rИpertoire /dev reprИsente le lecteur ZIP. Pour ce faire, on peut observer les messages lors de l'amorГage de BSD (ou dans /var/log/messages aprХs le dИmarrage), oЫ vous verrez une ligne ressemblant fort Ю ceci: da1: <IOMEGA ZIP 100 D.13> Removable Direct Access SCSI-2 Device Cela signifie que le lecteur ZIP est reprИsentИ par le fichier /dev/da1. L'interface IDE (Integrated Drive Electronics) est une interface de lecteur de disque bon marchИ utilisИe pour les ordinateurs de bureau. La plus grande partie des matИriels IDE est strictement interne. Les performances des lecteurs ZIP IDE sont comparables Ю celles des lecteurs ZIP SCSI (l'interface IDE n'est pas aussi rapide que l'interface SCSI, mais les performances des lecteurs ZIP sont limitИes essentiellement par leur mИcanique, non pas Ю cause du bus SCSI). L'inconvИnient de l'interface IDE sont les limites qu'elle impose. La plupart des adaptateurs IDE ne peuvent prendre en charge que deux pИriphИriques, et ne sont en gИnИral pas conГues pour le long terme. Par exemple, l'interface originelle IDE ne prend pas en charge les disques durs comportant plus de 1024 cylindres, ce qui oblige de nombreuses personnes Ю mettre Ю jour prИmaturИment leurs Иquipements. Si vous prИvoyez d'Иtendre votre PC par l'adjonction d'un nouveau disque dur, d'un lecteur de bande, ou d'un scanner, vous pouvez investir dans un adaptateur SCSI et ZIP SCSI afin d'Иviter des problХmes dans le futur. Les pИriphИriques IDE sous FreeBSD sont prИfixИs par un w. Par exemple, un disque dur IDE peut Йtre /dev/wd0, un lecteur de cdrom IDE (ATAPI) peut Йtre /dev/wcd1, et ainsi de suite. L'interface port parallХle est populaire grБce aux pИriphИriques externes portables tels que lecteurs ZIP externes, scanners, parce que potentiellement chaque ordinateur possХde un port parallХle standard (habituellement utilisИ pour les imprimantes). Ceci rend aisИ pour tout un chacun le transfert de donnИes entre ordinateurs par simple le transport de ces lecteurs ZIP. Les performances seront en gИnИral moindre qu'avec un lecteur ZIP ou IDE, du fait de la vitesse limitИe du port parallХle. Cette vitesse varie considИrablement d'un ordinateur Ю l'autre, et peut souvent Йtre configurИe Ю partir du systХme BIOS. Certaines machines demanderont une configuration du BIOS pour pouvoir faire fonctionner le port parallХle en mode bidirectionnel (Les ports parallХles ont seulement ИtИ conГus Ю l'origine pour fournir des donnИes sortantes vers les imprimantes) ZIP parallХle : Le pilote <devicename>vpo</devicename> Pour utiliser un lecteur ZIP port parallХle sous FreeBSD, le pilote vpo doit Йtre configurИ dans le noyau. Les lecteurs ZIP port parallХle ont aussi un contrТleur SCSI intИgrИ. Le pilote vpo authorise le noyau FreeBSD Ю communiquer avec le contrТleur SCSI du lecteur ZIP au travers du port parallХle. Depuis que le pilote vpo ne fait plus parti du noyau en standard (au moins pour FreeBSD 3.2), vous avez Ю reconstruire le noyau afin de rendre accessible ce pИriphИrique. La dИmarche de reconstruction d'un noyau est indiquИe en dИtails dans une autre section. Les Иtapes suivantes indiquent briХvement la dИmarche Ю suivre afin de mettre en Иtat de marche le pilote vpo: Lancer /stand/sysinstall, et installer les sources du noyau sur votre systХme. &prompt.root; cd /sys/i386/conf &prompt.root; cp GENERIC MYKERNEL Editer MYKERNEL, changer la ligne ident en MYKERNEL, et dИcommenter la ligne dИcrivant le pilote vpo. Si vous possИdez un second port parallХle, vous pourriez avoir besoin de copier la section dИdiИe Ю ppc0 pour crИer le pИriphИrique ppc1. Le second port parallХle utilise gИnИralement l'IRQ 5 et l'adresse 378. Seul l'IRQ est requise pour le fichier de configuration. Si votre disque dur est un SCSI, vous courez au devant d'un problХme dans l'ordre de la dИtection des pИriphИriques, qui entrainera le systХme Ю tenter d'utiliser le lecteur ZIP en tant que pИriphИrique racine. Le dИmarrage Иchouera alors, Ю moins que vous ayez installИ un systХme de fichiers racine sur le disque ZIP! Dans ce cas, vous aurez besoin de forcer le noyau Ю lier le disque SCSI racine Ю /dev/da0, Ю savoir le disque SCSI racine. Cela assignera alors le disque ZIP au prochain disque SCSI disponible, Ю savoir /dev/da1. Pour forcer votre disque dur SCSI en da0, changer la ligne device da0 en disk da0 at scbus0 target 0 unit 0 Vous aurez probablement Ю changer la cible afin de la faire correspondre Ю l' ID SCSI de votre disque dur. vous devrez aussi forcer l'entrИe scbus0 afin de l'ajuster Ю votre contrТleur. Par exemple, si vous avez un contrТleur 15xx de chez Adaptec, vous changerez controller scbus0 en controller scbus0 at aha0 En dernier lieu, puisque vous Иtes en train d'Иditer le fichier de configuration du noyau, profitez-en pour Тter tous les pilotes inutiles. Cela doit Йtre fait avec de grandes prИcautions, et seulement si vous avez assez confiance en vous en ce qui concerne les modifications du noyau. тter les pilotes inutiles rИduira la taille du noyau, laissant plus de mИmoire disponible Ю vos applications. Afin de dИterminer les pilotes qui ne sont pas nИcessaires, allez Ю la fin du fichier /var/log/messages, et recherchez les lignes comportant "not found" (non trouvИ). Commenter alors ces pИriphИriques dans votre fichier de configuration (par un # en tЙte de ligne). Vous pouvez aussi changer d'autres options afin de rИduire la taille et d'accroНtre la rapiditИ de votre noyau. Lisez la section concernant la reconstruction du noyau pour de plus amples informations. Il est maintenant temps de compiler le noyau: &prompt.root; /usr/sbin/config MYKERNEL &prompt.root; cd ../../compile/MYKERNEL &prompt.root; make clean depend && make all install AprХs le reconstruction du noyau, vous devez redИmarrer. Assurez-vous que le lecteur ZIP est connectИ au port parallХle avant que le dИmarrage ne commence. Vous devriez voir apparaНtre le lecteur ZIP parmi les messages de dИmarrage en tant que pИriphИrique vp0 ou vp1, selon le port parallХle auquel le lecteur est rattachИ. Vous devez pouvoir voir aussi Ю quel fichier pИriphИrique le lecteur ZIP a ИtИ associИ. Ce sera /dev/da0 si vous n'avez pas d'autre disque SCSI dans le systХme, ou /dev/da1 si vous avez un disque dur SCSI Ю la racine de votre systХme. Monter les disques ZIP Pour accИder Ю un disque ZIP, vous avez simplement Ю le monter, comme n'importe quel autre pИriphИrique. Le systХme de fichiers est reprИsentИ par la quatriХme tranche sur le pИriphИrique, que ce soit pour un disque ZIP en SCSI ou en parallХle, vous devriez faire: &prompt.root; mount_msdos /dev/da1s4 /mnt Pour les lecteurs ZIP IDE: &prompt.root; mount_msdos /dev/wd1s4 /mnt Cela facilitera aussi les choses de mettre Ю jour /etc/fstab afin de rendre le montage plus aisИ. Ajoutez une ligne telle que la suivante, ajustИe Ю votre systХme: /dev/da1s4 /zip msdos rw,noauto 0 0 et crИer le rИpertoire /zip. Vous pouvez alors monter simplement en tapant &prompt.root; mount /zip et dИmonter en entrant &prompt.root; umount /zip Pour savoir plus sur le format de /etc/fstab, voir &man.fstab.5;. Vous pouvez aussi crИer un systХme de fichiers FreeBSD sur un disque ZIP en utilisant &man.newfs.8;. Cependant, le disque ne sera utilisable que par un systХme FreeBSD, et peut-Йtre par quelques clТnes Unix reconnaissant le systХme de fichiers FreeBSD (mais certainement pas par DOS ou Windows).
diff --git a/fr_FR.ISO8859-1/books/faq/book.sgml b/fr_FR.ISO8859-1/books/faq/book.sgml index eecc13fafa..c82e4287f7 100644 --- a/fr_FR.ISO8859-1/books/faq/book.sgml +++ b/fr_FR.ISO8859-1/books/faq/book.sgml @@ -1,97 +1,97 @@ %urls; %translators; %authors; - %mailing-lists; + %mailing-lists; %includes; ]> Questions Fréquemment Posées sur FreeBSD 2.X Sébastien GIORIA
gioria@FreeBSD.org
Tuyet Tram DANG NGOC
dntt@prism.uvsq.fr
Septembre - Décembre 1998
Ceci est la FAQ pour les versions de FreeBSD 2.X. Toutes les entrées sont relatives à FreeBSD 2.05 et les versions ultérieures.Toutes les entrées finissant avec <XXX> sont en cours de construction. Si vous êtes intéressé par ce projet, envoyez un email sur la "mailing-list" : freebsd-questions@freebsd-fr.org. La dernière version de ce document est disponible en anglais à l'adresse suivante : FreeBSD World Wide Web server . Ce document est également disponible en format texte et en format postscript Nous recherchons des relecteurs pour la correction de cette FAQ.
&preface; &install; &hardware; &troubleshoot; &commercial; &applications; &kernelconfig; &admin; &x; &network; &serial; &misc; &hackers; &acknowledgments;
diff --git a/fr_FR.ISO8859-1/books/fdp-primer/Makefile b/fr_FR.ISO8859-1/books/fdp-primer/Makefile index 0f8428ab7a..723d396da8 100644 --- a/fr_FR.ISO8859-1/books/fdp-primer/Makefile +++ b/fr_FR.ISO8859-1/books/fdp-primer/Makefile @@ -1,47 +1,46 @@ # # The FreeBSD Documentation Project # The FreeBSD French Documentation Project # # Compilation de l'Introduction au Projet de Documentation de FreeBSD # -# $FreeBSD: doc/fr_FR.ISO8859-1/books/fdp-primer/Makefile,v 1.2 2000/11/10 12:30:58 kuriyama Exp $ +# $FreeBSD: doc/fr_FR.ISO8859-1/books/fdp-primer/Makefile,v 1.3 2001/06/11 01:19:01 ache Exp $ # Original revision: 1.6 # MAINTAINER=nik@FreeBSD.ORG DOC?= book FORMATS?= html-split html 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+= overview/chapter.sgml SRCS+= psgml-mode/chapter.sgml SRCS+= see-also/chapter.sgml SRCS+= sgml-markup/chapter.sgml SRCS+= sgml-primer/chapter.sgml SRCS+= stylesheets/chapter.sgml SRCS+= the-faq/chapter.sgml SRCS+= the-handbook/chapter.sgml SRCS+= the-website/chapter.sgml SRCS+= tools/chapter.sgml SRCS+= translations/chapter.sgml SRCS+= writing-style/chapter.sgml # Entities SRCS+= chapters.ent -SRCS+= ../handbook/mailing-lists.ent SRCS+= ../../../en_US.ISO8859-1/books/handbook/authors.ent DOC_PREFIX?= ${.CURDIR}/../../.. .include "${DOC_PREFIX}/share/mk/doc.project.mk" diff --git a/fr_FR.ISO8859-1/books/fdp-primer/book.sgml b/fr_FR.ISO8859-1/books/fdp-primer/book.sgml index 8fa2d69f68..1492132b81 100644 --- a/fr_FR.ISO8859-1/books/fdp-primer/book.sgml +++ b/fr_FR.ISO8859-1/books/fdp-primer/book.sgml @@ -1,303 +1,303 @@ %man; %urls; %bookinfo; %translators; %chapters; %authors; - %mailing-lists; + %mailing-lists; ]> Introduction au Projet de Documentation de FreeBSD pour les nouveaux participants Nik Clayton
nik@FreeBSD.ORG
1998 1999 Nik Clayton - $Date: 2001-06-11 01:19:02 $ + $Date: 2001-06-21 03:38:28 $ - $Id: book.sgml,v 1.3 2001-06-11 01:19:02 ache Exp $ + $Id: book.sgml,v 1.4 2001-06-21 03:38:28 chris Exp $ La redistribution et l'utilisation du code source (SGML), et compilé (HTML, PostScript, etc.), modifiés ou non, sont soumises aux conditions suivantes : Le code source (SGML DocBook) distribué doit conserver le copyright ci-dessus, la présente liste de conditions et l'avertissement qui la suit, sans modifications, en tête de ce fichier. Le code source distribué sous forme compilé (transformation vers d'autres DTDs, conversion en PDF, PostScript, RTF et autres formats) doit faire apparaître dans la documentation et/ou les autres composants distribués, le copyright ci-dessus, la présente liste de conditions et l'avertissement qui la suit. CE DOCUMENT EST FOURNI PAR NIK CLAYTON “TEL QUEL” ET AUCUNE GARANTIE EXPRESSE OU IMPLICITE, Y COMPRIS, MAIS NON LIMITÉE, GARANTIES IMPLICITES DE COMMERCIABILITÉ ET D'ADÉQUATION À UN BUT PARTICULIER N'EST DONNÉE. EN AUCUN CAS NIK CLAYTON NE SAURAIT ÊTRE TENU RESPONSABLE DES DOMMAGES DIRECTS, INDIRECTS, ACCIDENTELS, SPÉCIAUX, EXEMPLAIRES OU CONSÉQUENTS (Y COMPRIS, MAIS SANS LIMITATION, LA FOURNITURE DE BIENS ET SERVICES ANNEXES  DÉFAUT D'UTILISABILITÉ, PERTE DE DONNÉES OU DE PROFITS ; OU INTERRUPTION DE TRAVAIL) QUELLE QU'EN SOIT LA CAUSE ET SELON TOUTE DÉFINITION DE RESPONSABILITÉ, SOIT PAR CONTRAT, RESPONSABILITÉ STRICTE, OU PRÉJUDICE (Y COMPRIS NÉGLIGENCE OU AUTRES) IMPUTABLES D'UNE FAÇON OU D'UNE AUTRE À L'UTILISATION DE CE DOCUMENT, MÊME APRES AVOIR ÉTÉ AVISÉ DE LA POSSIBILITÉ DE TELS DOMMAGES. Merci de votre participation au Projet de Documentation de FreeBSD. Votre contribution est très utile. Cette introduction décrit tout ce que vous devez savoir pour commencer à participer au projet de documentation de FreeBSD, des outils et logiciels que vous utiliserez (indispensables et facultatifs) à la philosophie sous-jacente au Projet de Documentation. Ce document est en cours de rédaction et n'est pas terminé. Les sections inachevées sont indiquées par un astérisque - * - qui précède leur nom. &trans.a.haby;
Préface Invites de l'interpréteur de commandes La table ci-dessous donne les invites par défaut du système pour un utilisateur normal et pour le super-utilisateur. Elles sont utilisées dans les exemples pour indiquer quel utilisateur doit appliquer l'exemple. Utilisateur Invite Utilisateur normal &prompt.user; root &prompt.root; Conventions Typographiques La table ci-dessous décrit les conventions typographiques utilisées dans le présent ouvrage. Signification Exemples Noms de commandes, fichiers et répertoires. Affichage à l'écran de l'ordinateur. Modifiez votre fichier .login.Utilisez ls -a pour avoir la liste de tous les fichiers.Vous avez reçu du courrier. Ce que vous tapez, par opposition à ce que l'ordinateur affiche. &prompt.user; su Password: Références aux pages de manuel Utilisez su 1 pour changer de nom d'utilisateur. Noms d'utilisateurs et de groupes Seul root peut le faire. Mise en valeur Vous devez le faire. Variables sur la ligne de commande ; à remplacer par le nom ou la valeur effectif. Pour supprimer un fichier, tapez rm nom_du_fichier. Variables d'environnement $HOME est votre répertoire utilisateur. Notes, avertissements et exemples Dans le cours du texte, il peut y avoir des notes, des avertissements et des exemples. Les notes apparaissent comme ceci, et contiennent des informations que vous devriez prendre en considération, parce qu'elles peuvent avoir une incidence sur ce que vous faites. Les avertissements apparaissent comme ceci, et vous préviennent de problèmes potentiels si vous n'appliquez pas ces instructions. Des dégats peuvent être causés à votre matériel, ou ne pas être physiques, suppression inopinée de fichiers importants par exemple. Un exemple d'exemple Les exemples apparaissent comme ceci, et sont généralement des exemples que vous devriez tester ou qui vous montrent quels doivent être les résultats d'une opération donnée. Remerciements Mes remerciements à Sue Blake, Patrick Durusau, Jon Hamilton, Peter Flynn et Christopher Maden, qui ont pris le temps de lire les premières versions de ce document et ont apporté de nombreux commentaires et critiques utiles. &chap.overview; &chap.tools; &chap.sgml-primer; &chap.sgml-markup; &chap.stylesheets; &chap.the-faq; &chap.the-handbook; &chap.the-website; &chap.translations; &chap.writing-style; &chap.psgml-mode; &chap.see-also;
diff --git a/fr_FR.ISO8859-1/books/handbook/Makefile b/fr_FR.ISO8859-1/books/handbook/Makefile index 2637828c1f..3c451178f7 100644 --- a/fr_FR.ISO8859-1/books/handbook/Makefile +++ b/fr_FR.ISO8859-1/books/handbook/Makefile @@ -1,67 +1,66 @@ # # The FreeBSD Documentation Project # The FreeBSD French Documentation Project # # Compilation du Manuel de Reference de FreeBSD # -# $FreeBSD: doc/fr_FR.ISO8859-1/books/handbook/Makefile,v 1.1 1999/11/10 21:28:38 nik Exp $ +# $FreeBSD: doc/fr_FR.ISO8859-1/books/handbook/Makefile,v 1.2 2001/06/11 01:19:05 ache Exp $ # Original revision: 1.25 # # # Nik is only the maintainer until Sebastien GIORIA's commit privs are # sorted out and he can maintain this. # 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+= 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+= ../../../en_US.ISO8859-1/books/handbook/authors.ent SRCS+= chapters.ent -SRCS+= mailing-lists.ent DOC_PREFIX?= ${.CURDIR}/../../.. .include "${DOC_PREFIX}/share/mk/doc.project.mk" diff --git a/fr_FR.ISO8859-1/books/handbook/book.sgml b/fr_FR.ISO8859-1/books/handbook/book.sgml index 52369cbd0a..ed4a212270 100644 --- a/fr_FR.ISO8859-1/books/handbook/book.sgml +++ b/fr_FR.ISO8859-1/books/handbook/book.sgml @@ -1,142 +1,142 @@ %man; %urls; %bookinfo; %translators; %chapters; %authors; - %mailing-lists; + %mailing-lists; ]> Manuel FreeBSD Groupe de Documentation de FreeBSD 1999 Groupe de Documentation de FreeBSD &bookinfo.legalnotice; Bienvenue à FreeBSD! Ce manuel décrit l'installation et l'utilisation quotidienne de la Version &rel.current de FreeBSD. Ce manuel est en constante évolution. Il est le résultat du travail de nombreuses personnes. Certaines sections ne sont pas encore rédigées et celles qui le sont ont besoin d'être mises à jour. Si vous voulez participer à ce projet, envoyez un courrier électronique à la &a.doc;. La dernière version anglaise de ce document est disponible sur le serveur World Wide Web FreeBSD. Il existe aussi une version texte, PostScript ou HTML téléchargeable depuis le serveur FTP FreeBSD ou l'un des nombreux sites miroirs. Vous pouvez aussi faire des recherches dans le Manuel. N.d.T.: La version française est publiée sur le serveur World Wide Web du groupe de traduction en langue française de la documentation de FreeBSD. N.d.T.: Contactez la &a.fr-doc si vous voulez collaborer à la traduction. La traduction de ce manuel est “en cours”. Dans la table des matières ci-dessous: Les chapitres marqués de deux astérisques sont en cours de traduction. Les chapitres marqués de trois astérisques sont à traduire. L'astérisque simple est réservé aux chapitres et sections en cours de rédaction dans la version U.S. Pour commencer &chap.introduction; &chap.install; &chap.basics; &chap.ports; Administration Système &chap.kernelconfig; &chap.security; &chap.printing; &chap.disks; &chap.backups; &chap.quotas; &chap.x11; &chap.hw; &chap.l10n; Réseau &chap.serialcomms; &chap.ppp-and-slip; &chap.advanced-networking; &chap.mail; Questions avancées &chap.cutting-edge; &chap.contrib; &chap.policies; &chap.kernelopts; &chap.kerneldebug; &chap.linuxemu; &chap.internals; Annexes &chap.mirrors; &chap.bibliography; &chap.eresources; &chap.staff; &chap.pgpkeys; diff --git a/fr_FR.ISO8859-1/share/sgml/catalog b/fr_FR.ISO8859-1/share/sgml/catalog index 5ebe8768fc..4ecaa76c57 100644 --- a/fr_FR.ISO8859-1/share/sgml/catalog +++ b/fr_FR.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/fr_FR.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//FR" + "mailing-lists.ent" diff --git a/fr_FR.ISO8859-1/books/handbook/mailing-lists.ent b/fr_FR.ISO8859-1/share/sgml/mailing-lists.ent similarity index 98% rename from fr_FR.ISO8859-1/books/handbook/mailing-lists.ent rename to fr_FR.ISO8859-1/share/sgml/mailing-lists.ent index 40523ef292..535889de0a 100644 --- a/fr_FR.ISO8859-1/books/handbook/mailing-lists.ent +++ b/fr_FR.ISO8859-1/share/sgml/mailing-lists.ent @@ -1,113 +1,113 @@ freebsd-announce@FreeBSD.ORG"> freebsd-advocacy@FreeBSD.ORG"> cvs-all@FreeBSD.ORG"> committers de FreeBSD cvs-committers@FreeBSD.ORG"> freebsd-database@FreeBSD.ORG"> freebsd-france@freebsd.francenet.fr"> freebsd-doc@FreeBSD.ORG"> freebsd-bugs@FreeBSD.ORG"> freebsd-chat@FreeBSD.ORG"> freebsd-current@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"> 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"> majordomo@FreeBSD.ORG"> freebsd-core@FreeBSD.ORG"> diff --git a/ja_JP.eucJP/books/faq/book.sgml b/ja_JP.eucJP/books/faq/book.sgml index b59ad0dabc..37119eb7f8 100644 --- a/ja_JP.eucJP/books/faq/book.sgml +++ b/ja_JP.eucJP/books/faq/book.sgml @@ -1,14332 +1,14332 @@ %man; %authors; %jauthors; - %mailing-lists; + %mailing-lists; %newsgroups; ]> FreeBSD 2.X, 3.X, 4.X ╓к╓д╓╓╓ф╓н FAQ (╓Х╓╞╓╒╓К╪алД╓х╓╫╓неЗ╓╗) FreeBSD ╔и╔╜╔Е╔А╔С╔ф║╪╔╥╔Г╔С╔в╔М╔╦╔╖╔╞╔х - $FreeBSD: doc/ja_JP.eucJP/books/faq/book.sgml,v 1.41 2001/03/08 22:18:23 hrs Exp $ + $FreeBSD: doc/ja_JP.eucJP/books/faq/book.sgml,v 1.42 2001/06/11 01:20:08 ache Exp $ ╓Ё╓нй╦╫Я╓о FreeBSD ╔╥╔╧╔ф╔Ю║╕╔п║╪╔╦╔Г╔С 2.X, 3.X, 4.X ╓к╓д╓╓╓ф╓н FAQ ╓г╓╧. фц╓кцг╓О╓Й╓╛╓й╓╓╦б╓Й, ╓и╓н╧Юлэ╓Б FreeBSD 2.0.5 ╟й╧ъ╓н╓Б╓н╓РашдЙ╓╥╓ф╓╓╓ч╓╧. <XXX> ╓н╓д╓╓╓ф╓╓╓К╧Юлэ╓о╓ч╓ю╨Н╤хцФ╓н╓Б╓н╓г╓╧. ╓Ё╓н FreeBSD ╔и╔╜╔Е╔А╔С╔ф║╪╔╥╔Г╔С╔в╔М╔╦╔╖╔╞╔х╓к╤╗но╓╥╓©╓╓╓х╩в╓О╓Л╓КйЩ╓о, &a.doc; ╓ч╓г(╠я╦Л╓г)ее╩р╔А║╪╔К╓РаВ╓ц╓ф╓╞╓ю╓╣╓╓. ╓Ё╓нй╦╫Я╓н╨г©╥╔п║╪╔╦╔Г╔С╓о, ╓╓╓д╓г╓Б фЭкэ╧ЯфБхг FreeBSD World Wide Web ╔╣║╪╔п╓Д FreeBSD World Wide Web ╔╣║╪╔п╓г ╦╚╓К╓Ё╓х╓╛╓г╓╜╓ч╓╧. ╓ч╓©, ╓р╓х╓д╓н╣ПбГ╓й HTML ╔у╔║╔╓╔К╓х╓╥╓ф HTTP ╓г╔ю╔╕╔С╔М║╪╔и╓╧╓К╓Ё╓х╓Б╓г╓╜╓ч╓╧. ╔в╔Л║╪╔С╔ф╔╜╔╧╔х, PostScript, PDF, ╓╙╓Х╓с╓╫╓нб╬╓н╥а╪╟╓н╓Б╓н╓о FreeBSD FTP ╔╣║╪╔п╓кцж╓╚╓Л╓ф╓╓╓ч╓╧. ╓ч╓©, FAQ ╓н╦║╨В╓Б╡дг╫╓г╓╧. 2000 г╞ 3 ╥Н╦╫╨ъ, HTML хг╟йЁ╟╓нфЭкэ╦Л FAQ ╓омя╟у╓╣╓Л╓ф╓╓╓ч╓╩╓С. фЭкэ╦Лхг╓н╨Ню╝╓о FreeBSD фЭкэ╦Л╔и╔╜╔Е╔А╔С╔ф║╪╔╥╔Г╔С╔в╔М╔╦╔╖╔╞╔х╓╛ ╔╙╔Й╔╦╔й╔К╓н╠я╦Лхг╓Р╓Б╓х╓к╓╥╓ф╧т╓й╓ц╓ф╓╓╓ч╓╧. фЭкэ╦ЛлУ╓╙╓Х╓с, фЭкэ╦Лхг╓н╓ъ╓к╢ьо╒╓╧╓К╓Ё╓х╓о, &a.jp.doc-jp; ╓к╓╙╓╓╓ффЭкэ╦Л╓г╣дою╓╣╓Л╓ф╓╓╓ч╓╧. и╛мв╓к╠Ч╓╦╓ффЭкэ╦Л╔и╔╜╔Е╔А╔С╔ф║╪╔╥╔Г╔С╔в╔М╔╦╔╖╔╞╔х╓╚╓И, FreeBSD Documentation Project ╓кбп╓╥╓ф╔у╔ё║╪╔и╔п╔ц╔╞╓Р╧т╓й╓╓╓ч╓╧╓н╓г, ╠я╦Л╓╛фю╟у╓г╓й╓╓йЩ╓о &a.jp.doc-jp; ╓ч╓гфЭкэ╦Л╓г╔Ё╔А╔С╔х╓Р╓╙╢С╓╩╓╞╓ю╓╣╓╓. ╓ч╓©, ╓Ё╓н FreeBSD FAQ ╓х╓ойл╓к, фЭкэ╓н FreeBSD ╔Ф║╪╔╤м╜╩ж╓к╓Х╓ц╓ф ╔А║╪╔Й╔С╔╟╔Й╔╧╔х &a.jp.users-jp; ╓Д╔к╔Е║╪╔╧╔╟╔К║╪╔в fj.os.bsd.freebsd ╓й╓и╓ь╓неЙ╧ф╓Р╓Б╓х╓к╨Ню╝╓╣╓Л╓© QandA ╓╛╦ЬЁ╚╓╣╓Л╓ф╓╓╓ч╓╧. фц╓кфЭкэ╦Л╢д╤╜╓й╓ифЭкэ╦гм╜╓ноцбЙ╓╛╫╪╪б╓╥╓ф╓╓╓ч╓╧╓н╓г, ╓Ё╓а╓И╓Б╧Г╓О╓╩╓ф╓╢мВ╓╞╓ю╓╣╓╓. ╓ч╓╗╓╛╓╜ лУ: ╓╞╓Й╓Д╓ч kuriyama@opt.phys.waseda.ac.jp, ╡ж╟Ф ╧юг╥ hanai@jp.FreeBSD.org, &a.jp.nakai;, ╨ёлН ╦╣г╥ motoyuki@jp.FreeBSD.org, &a.jp.sugimura;, 1997 г╞ 11 ╥Н 5 фЭ. FreeBSD 2.X-4.X FAQ ╓ь╓Х╓╕╓Ё╓╫! Usenet ╓н FAQ ╓╛╓╫╓╕╓г╓╒╓К╓Х╓╕╓к, ╓Ё╓нй╦╫Я╓Б FreeBSD ╔╙╔з╔Л║╪╔ф╔ё╔С╔╟╔╥╔╧╔ф╔Ю╓к╢ь╓╥╓ф ияхк╓к©р╓м╓И╓Л╓К╪алД╓РлжмЕ╓╧╓К╓Ё╓х╓Рлэе╙╓х╓╥╓ф╓╓╓ч╓╧(╓Б╓а╓М╓С╓╫╓Л╓кбп╓╧╓КеЗ╓╗╓Б!). FAQ ╓окэмХ╔п╔С╔ииЩ╓Р╦╨╓И╓╥, ф╠╓╦╪алД╓╛╡©еы╓Б╥╚╓Ййж╓╣╓Л╓К╓н╓РхР╓╠╓К╓©╓А╓к╨Н╓И╓Л╓©╓Б╓н╓г╓╧╓╛, ╨г╤А╓ом╜мя╓й╬ПйС╦╩╓х╦╚╓й╓╣╓Л╓К╓Х╓╕╓к╓й╓ц╓ф╓╜╓ч╓╥╓©. ╓Ё╓н FAQ ╓Р╓г╓╜╓К╦б╓Йм╜мя╓й╓Б╓н╓к╓╥╓Х╓╕╓х, ╓╒╓И╓Ф╓Кеьно╓╛╓о╓И╓О╓Л╓ф╓╓╓ч╓╧. ╓Б╓╥╡©╓╚╓╥╓И╓н╡Ча╠╟ф╓╛иБ╓╚╓С╓ю╓И, ╓╪╓р &a.faq; ╓ч╓г╔А║╪╔К╓РаВ╓ц╓ф╓╞╓ю╓╣╓╓. FreeBSD ╓ц╓ф╡©? FreeBSD ╓х╓о╟Л╦ю╓г╦ю╓╗╓п, ╔╚╔Й╔у╔╘╔К╔к╔╒бГЁь╔п║╪╔╞╔Л╔╓╧╩╓╚╓И ╔Й╔Й║╪╔╧╓╣╓Л╓© 4.4BSD-Lite ╓х 4.4BSD-Lite2 ╓к╓Х╓К ╤╞╡╫╓н╟ЛиТ╓кмЁмХ╓╧╓К, i386 ╓╙╓Х╓с Alpha/AXP ╥о╓н╔в╔И╔ц╔х╔у╔╘║╪╔Ю╦Ч╓╠╓н UN*X ╔И╔╓╔╞╓й╔╙╔з╔Л║╪╔ф╔ё╔С╔╟╔╥╔╧╔ф╔Ю╓г╓╧. ╢жюэе╙╓к╓оф╠╓╦╔п║╪╔╞╔Л╔╓╧╩╓н Net/2 ╓Р William Jolitz ╓╛ i386 ╥о╓к╟э©╒╓╥╓© 386BSD ╓Б╢П╓к╓╥╓ф╓╓╓ч╓╧╓╛, 386BSD ╓н╔Ё║╪╔и╓о╓ш╓х╓С╓и╩д╓ц╓ф╓╓╓ч╓╩╓С. FreeBSD ╓к╓д╓╓╓ф╓н╬э╨ы╓х, ╡©╓╛╓г╓╜╓К╓╚╓к╓д╓╓╓ф╓о FreeBSD ╓н╔ш║╪╔Ю╔з║╪╔╦ ╓Р╩╡╬х╓╥╓ф╓╞╓ю╓╣╓╓. FreeBSD ╓о╢К╤х╓Д╔╓╔С╔©║╪╔м╔ц╔х╔╣║╪╔с╔╧╔в╔М╔п╔╓╔ю, ╦╕╣Ф╪т, ╔Ё╔С╔т╔Е║╪╔©юЛлГ╡х, Ёью╦, ╡хдМ╓н╔Ф║╪╔╤╓й╓и╓к╓Х╓Й, ╤хлЁ╓Д╤╣╟И, ╦ДЁз╓кмя╓╓╓И╓Л╓ф╓╓╓ч╓╧. ╓Ё╓Л╓И╓к╢ь╓╥╓ф╓о FreeBSD ╔╝╔Ц╔И╔Й║╪╓Р╓╢мВ╓╞╓ю╓╣╓╓. FreeBSD ╓к╢ь╓╧╓К╓Х╓Й╬э╓╥╓╓╬ПйС╓о FreeBSD ╔о╔С╔и╔ж╔ц╔╞╓Р╩╡╬х╓╥╓ф╓╞╓ю╓╣╓╓. FreeBSD ╓╛лэ╩ь╓╥╓ф╓╓╓К╓Б╓н FreeBSD ╔в╔М╔╦╔╖╔╞╔х╓нлэе╙╓о, ╓╓╓╚╓й╓Кмяес╓к╓Б╩хмя╓г╓╜, ╡©╓Ию╘╦б╓н╓й╓╓╔╫╔у╔х╔╕╔╖╔╒╓Р╤║╣К╓╧╓К╓Ё╓х╓г╓╧. ╩Д╓©╓а╓нб©╓╞╓о, ╔Ё║╪╔и(╓╫╓╥╓ф╔в╔М╔╦╔╖╔╞╔х)╓кбп╓╥╓ф╓╚╓й╓Й╓неЙ╩Я╓Р╓╥╓ф╓╜╓ф╓╙╓Й, ╓Ё╓Л╓╚╓И╓Бб©╬╞╓нбЕ╫Ч╓о╓╒╓ц╓ф╓БеЙ╩Я╓РбЁ╓╠╓ф╧т╓╞╓д╓Б╓Й╓г╓╧. ╓©╓ю, б╬╓н©мцё╓к╓Бф╠╓╦╓Х╓╕╓йиИц╢╓Р╓╧╓К╓Х╓╕╓к╪Гд╔╓╥╓ф╓╓╓К╓О╓╠╓г╓о╓╒╓Й╓ч╓╩╓С. FreeBSD ╓к╤╫лё╓Р╩Щ╓ц╓ф╓╓╓К╟Л©м╩д╓И╓╨а╢╓ф╓н©м║╧╓к, лэе╙╓Р╦бдЙ╓╥╓й╓╓╓г╔Ё║╪╔и╓РдС╤║╓╧╓К╓Ё╓х. ╓Ё╓Л╓╛, ╩Д╓©╓а╓н╨г╫И╓н╓╫╓╥╓ф╨гбГ╓н║жг╓лЁ║в╓г╓╒╓К╓х©╝╓╦╓ф╓╓╓ч╓╧. ╓╫╓╕╓╧╓Л╓п, ╔Ё║╪╔и╓о╡дг╫╓й╦б╓Й╧╜╓╞╩х╓О╓Л, ╨гбГ╓н╡╦╥ц╓Р╓Б╓©╓И╓╧╓Ё╓х╓╛╓г╓╜╓К╓г╓╥╓Г╓╕. ╓Ё╓Л╓╛, ╩Д╓©╓а╓╛г╝нУ╓к╩ы╩Щ╓╥╓ф╓╓╓К╔у╔Й║╪╔╫╔у╔х╔╕╔╖╔╒╓н╨г╓Б╢Пкэе╙╓йлэе╙╓г╓╒╓К╓х, ╩Д╓о©╝╓╦╓ф╓╓╓ч╓╧. ╩Д╓©╓а╓н╔╫║╪╔╧╔д╔Й║╪╓к╢ч╓ч╓Л╓К╔╫║╪╔╧╓н╓╕╓а, GNU ╟Лхл╦Ьм╜╩хмя╣ЖбЗ(GPL) ╓ч╓©╓о GNU ╔И╔╓╔ж╔И╔Й ╟Лхл╦Ьм╜╩хмя╣ЖбЗ(GLPL) ╓к╫╬╓ц╓ф╓╓╓К╓Б╓н╓к╓д╓╓╓ф╓о, б©╬╞ю╘╦б╓╛╡й╓╣╓Л╓ф╓╓╓ч╓╧. ╓©╓ю╓╥, ╔╫║╪╔╧╔Ё║╪╔и╓ь╓н╔╒╔╞╔╩╔╧╓нйщ╬з╓х╓╓╓╕, ╟Лхл╓ню╘╦б╓х╓о╓╓╓О╓п╣у╓ню╘╦б╓г╓╧. ╓©╓ю╓╥ GPL ╔╫╔у╔х╔╕╔╖╔╒╓Р╬╕мя╓гмЬмя╓╧╓К╬Л╧Г, ╓╣╓И╓кйё╩╗╓к╓й╓К╓н╓охР╓╠╓И╓Л╓ч╓╩╓С. ╓╫╓н╓©╓А, ╓╫╓Л╓И╓н╔╫╔у╔х╔╕╔╖╔╒╓Р, ╓Х╓Йю╘╦б╓н╬╞╓й╓╓ BSD цЬ╨Н╦╒╓к╫╬╓ц╓©╔╫╔у╔х╔╕╔╖╔╒╓гцж╓╜╢╧╓╗╓Кеьно╓Р, ╡дг╫╓й╦б╓ЙфЭ║╧бЁ╓╠╓ф╓╓╓ч╓╧. лУцМ GPL ╓г╓о, ║ж╔╫║╪╔╧╔Ё║╪╔и╓Р╪б╨щ╓к╪У╓╠╪Х╓К╓╚, ╓╒╓К╓╓╓о╢Ук╬╓╥╓╣╓╗╓╧╓Л╓п╓╫╓Л╓РфЧ╪Й╓╧╓К╓Ё╓х╓╛╡дг╫╓г╓╒╓К╓Ё╓х║в╓Р╣А╓А╓ф╓╓╓ч╓╧. ╓и╓╕╓╥╓ф FreeBSD ╓х╦ф╓п╓Л╓ф╓╓╓К╓н╓г╓╧╓╚? л╣на(free)╓г╩х╓╕╓Ё╓х╓╛╓г╓╜╓К(╬╕мЬмя╓Б╢ч╓Ю). ╔╙╔з╔Л║╪╔ф╔ё╔С╔╟╔╥╔╧╔ф╔Ю╓н╢╟а╢╓й╔╫║╪╔╧╔Ё║╪╔и╓╛╪╚мЁ(freely)╓к╪Й╓кфЧ╓Й, ╬╕мЬмя║╕хС╬╕мЬмя╓к╓╚╓╚╓О╓И╓╨, ╨гдЦ╦б╓ню╘╦б╓гб╬╓н╩е╩Ж╓ь╓нмЬмя, гшиш, фЁфЧ╓╛╡дг╫. ╡Чни╓Д╔п╔╟╔у╔ё╔ц╔╞╔╧╓╛╓╒╓К╬Л╧Г, ц╞╓г╓Б(free)╓╫╓н╔Ё║╪╔и╓РдС╫п╓г╓╜, ╔╫║╪╔╧╔д╔Й║╪╓к╡ц╓╗╓К╓Ё╓х╓╛╓г╓╜╓ч╓╧ (╓╓╓╞╓д╓╚╓н╢йц╠╓й╬Р╥О╓к╓о╫╬╓ц╓ф╓Б╓И╓╓╓ч╓╧). йЛ╧Я╦Л╓╛╠я╦Л╓г╓й╓╓фи╪т╓н╓©╓А╓к, ╓Ё╓Ё╓г╓о free ╓х╓╓╓╕ц╠╦Л╓╛фС╓д╓н╟улё╓гмя╓╓╓И╓Л╓ф╓╓╓К╓Ё╓х╓Р╩ье╕╓╥╓ф╓╙╓╞╓хй╛╓╚╓Й╓Д╓╧╓╓╓╚╓Бцн╓Л╓ч╓╩╓С. ╓р╓х╓д╓о║жл╣на╓г╓╒╓К║в╓х╓╓╓╕╓Ё╓х, ╓Б╓╕╓р╓х╓д╓о║ж╪╚й╛╓н╓Д╓Й╓©╓╓╓Х╓╕╓к╓г╓╜╓К║в╓х╓╓╓╕╓Ё╓х╓г╓╧. FreeBSD ╓н╔Ё║╪╔и╓г╓г╓╜╓й╓╓╓╓╓╞╓д╓╚╓н╓Ё╓х (╪╚й╛╓╛╫Я╓╓╓©╓Б╓н╓ю╓х╣╤╓К╓й╓и)╓Р╫Э╓╠╓п, ╓╒╓й╓©╓о╪╚й╛╓н╓Д╓Й╓©╓╓╓Ё╓х╓Р╓Д╓К╓Ё╓х╓╛╡дг╫╓й╓н╓г╓╧. FreeBSD ╓н╨г©╥╔п║╪╔╦╔Г╔С╓о? 4.2 ╓╛╨г©╥╓н STABLE ╔п║╪╔╦╔Г╔С╓г, 2000 г╞ 11 ╥Н╓к╔Й╔Й║╪╔╧╓╣╓Л╓ч╓╥╓©. ╓ч╓©, ╓Ё╓Л╓о╨г©╥╓н RELEASE ╔п║╪╔╦╔Г╔С╓г╓Б╓╒╓Й╓ч╓╧. ╢йц╠╓к╦ю╓ц╓ф╓╥╓ч╓╕╓х, -STABLE ╓о╨г©╥╓н -CURRENT ╓н╔╧╔й╔ц╔в╔╥╔Г╔ц╔х╓н╓╧╓п╓И╓╥╓╓©╥╣║г╫╓н©Т║╧╓Х╓Й╓Б, ╟бдЙю╜╓хйя╧╧╡С©Т╓н╬╞╓й╓╣╓Р╧╔╓Ю ISP ╓Д, б╬╓н╢К╤х╓н╔Ф║╪╔╤╓Р╔©║╪╔╡╔ц╔х╓к╓╥╓ф╓╓╓ч╓╧. ╔Й╔Й║╪╔╧╓о╓Ё╓нфС╪ОнЮ╓н╔ж╔И╔С╔а╓г╧т╓й╓О╓Л╓ч╓╧╓╛, (-STABLE ╓ххФЁс╓╧╓К╓хб©╬╞)ит╟бдЙ╓йф╟╨Н╓╛╓╒╓К╓х╓╓╓╕╓Ё╓х╓Р╣Жмф╓г╓╜╓К╓й╓И, и╛мв╓х╓й╓К╓н╓о -CURRENT ╓нйЩ╓ю╓╠╓г╓╥╓Г╓╕. Ёф╔Й╔Й║╪╔╧╓о ©Т╔╚╥НкХ╓к╓╥╓╚╧т╓й╓О╓Л╓ч╓╩╓С. б©╓╞╓н©м║╧╓╛ FreeBSD ╓н╔╫║╪╔╧╓Р╓╫╓н╔Й╔Й║╪╔╧╓Х╓Й╓Б ╨г©╥╓н╬Убж╓к╟щ╩Щ╓╥╓ф╓╓╓К(FreeBSD-current ╓х FreeBSD-stable ╓к╢ь╓╧╓К╪алД╓Б╩╡╬х╓╥╓ф╓╞╓ю╓╣╓╓) ╓н╓г╓╧╓╛, ╔╫║╪╔╧╓х╓╓╓╕╓н╓о╬О╓к╡Чйя╓╣╓ЛбЁ╓╠╓ф╓╓╓К╓©╓А, ╓╫╓╕╓╧╓К╓Ё╓х╓о╟Л╪О╓н╢╥нЦ╓к╓й╓ц╓ф╓╓╓ч╓╧. FreeBSD-CURRENT╓ц╓ф╡©? FreeBSD-CURRENT ╓о╔╙╔з╔Л║╪╔ф╔ё╔С╔╟╔╥╔╧╔ф╔Ю╓н╓нЁ╚х╞╔п║╪╔╦╔Г╔С╓г, ╓Д╓╛╓ф 5.0-RELEASE ╓х╓й╓Й╓ч╓╧. ╓Х╓ц╓ф╓Ё╓Л╓о, ╓╫╓Ё╓к╥х╓О╓ц╓ф╓╓╓КЁ╚х╞╪т╓Д, ╓и╓С╓й╬ЦЁ╡╓Р╓Б╬Х╓Й╠ш╓╗╓ф╓╓╓╠╓К╔©╔у╓й╟╕╧╔╡х╓©╓а╓к╓х╓ц╓ф╓н╓ъ╤╫лё╓нбп╬щ╓х╓й╓К╓Б╓н╓г╓╧. -CURRENT ╓н╩хмя╓к╨щ╓╥╓ф╓н╬э╨ы╓о FreeBSD ╔о╔С╔и╔ж╔ц╔╞ ╓н ╢ьо╒╓╧╓К╔╩╔╞╔╥╔Г╔С ╓Р╩╡╬х╓╥╓ф╓╞╓ю╓╣╓╓. ╔╙╔з╔Л║╪╔ф╔ё╔С╔╟╔╥╔╧╔ф╔Ю╓кфКюВ╓ъ╓╛╓й╓╓╬Л╧Г╓Д, ╓╫╓Л╓╛╟Л╩Че╙╓кх╞ю╦╓╥╓ф╓╓╓КлДбЙ╓й╓н╓╚, ╓╫╓Л╓х╓Бкэ╪ае╙╓йлДбЙ╓╚╓Р╦╚╤к╓А╓Кг╫но╓╛╓й╓╓╬Л╧Г╓о, FreeBSD-CURRENT ╓Р╩х╓╕╓ы╓╜╓г╓о╓╒╓Й╓ч╓╩╓С. ╓Ё╓н╔ж╔И╔С╔а╓о╩Ч║╧╣ч╥Ц╓кЁхд╔╓╣╓Л╓©╓Й, ╔╥╔╧╔ф╔Ю╓╛╧╫цш╓г╓╜╓й╓╓╬Убж╓к╓й╓К╓Ё╓х╓Б╓а╓Г╓ц╓а╓Е╓╕╓╒╓Й╓ч╓╧. FreeBSD-CURRENT ╓Р╩х╓╕©м╓олДбЙ╓Рй╛юо╓╥, ║ж╬╝╓╣╓й╥Г╢ы║в╓г╓о╓й╓╞, лю╓И╓╚╓к╢ж╟Ц╓╓╓г╓╒╓К╓х╩в╓О╓Л╓К╓Б╓н╓ю╓╠╓РйС╧П╓г╓╜╓К╓Б╓н╓хашдЙ╓╣╓Л╓ф╓╓╓ч╓╧. ║жmake world ╓╥╓©╓И group ╢ь╥╦╓г╔╗╔И║╪╓╛╓г╓ч╓╥╓©║в╓н╓Х╓╕╓й╪алД╓о, -CURRENT ╔А║╪╔Й╔С╔╟╔Й╔╧╔х╓г╓о╥зйн╓н╢Ц╨╧╓╥╓г╓╒╓╥╓И╓О╓Л╓К╓Ё╓х╓Б╓╒╓Й╓ч╓╧. кХфЭ, ╓╫╓н╩Чею╓н -CURRENT ╓х -STABLE ╓н╔Ё║╪╔и╓Р╦╣╓к snapshot ╓╛╨Ню╝╓╣╓Л╓ф╓╓╓ч╓╧. ╦╫╨ъ╓о, ╓╫╓н snapshot ╓нгшиш╓БмЬмя╡дг╫╓г╓╧. ╓╫╓Л╓╬╓Л╓н snapshot ╓к╓о╟й╡╪╓н╓Х╓╕╓йлэе╙╓╛╓╒╓Й╓ч╓╧. ╔╓╔С╔╧╔х║╪╔К╔в╔М╔╟╔И╔Ю╓н╨г©╥хг╓н╔ф╔╧╔х. ╩Н╓╥╓ф╓ъ╓©╓╓╓╠╓Л╓и, ╢Паце╙╓й╫Й╓╚╓ИкХфЭйя╓О╓К╓Х╓╕╓й╓Б╓н╓Рди╓╓╓╚╓╠╓К╩Ч╢ж╓Б╔п╔С╔ииЩ╓Бл╣╓╓, ╓х╓╓╓╕©м╓к╓Б -CURRENT ╓Д -STABLE ╓Р╩х╓╗╓К╓Х╓╕╓к╓╧╓К. ╓ч╓©, ╓╫╓н╓Х╓╕╓й©м╓©╓а╓н╔╥╔╧╔ф╔Ю╟э╧т╓н╓©╓А╓н╪Й╓ц╪Х╓ЙаА╓╓йЩк║╓РдС╤║╓╧╓К. ╓╒╓х╓г╓х╓С╓г╓Б╓й╓╓╓Ё╓х╓Р╓╥╓ф╓╥╓ч╓ц╓©╩Ч╓н╓©╓А╓к, лДбЙ╓х╓й╓К╔Ё║╪╔и╓нфцдЙ╓н╩╡╬х╢П╫Юею╓Рйщб╦╓╥╓ф╓╙╓╞. (дл╬О╓о CVS ╓╛╓Ё╓╕╓╓╓╕╔о╔в╔к╔С╔╟╓н╓Х╓╕╓й╤╡╓М╓╥╓╓╩Жбж╓Рки╩ъ╓╥╓ф ╓╓╓К╓С╓г╓╧╓╠╓и╓м :) ╔ф╔╧╔х╓╛и╛мв╓й©╥╓╥╓╓╣║г╫╓Р, ╓г╓╜╓К╦б╓Йб©╓╞╓н╠ё╓Л╔ф╔╧╔©║╪╓к╩Н╓╥╓ф╓Б╓И╓╕. ╓и╓С╓йлэе╙╓г╓╒╓Л, -CURRENT snapshot ╓╛ю╫ий╔Л╔ы╔К╓ний╪а╓г╓╒╓К╓х╓н╧м╓╗╓к╢П╓е╓╞мв╣А╓о╧т╓О╓й╓╓╓г╓╞╓ю╓╣╓╓. ╟бдЙю╜╓Д╔ф╔╧╔х╫╫й╛ю╜╓к╓Ё╓ю╓О╓К©м╓о, ╢╟а╢╓й╔Й╔Й║╪╔╧, ╓╒╓К╓╓╓о -STABLE snapshot ╓╚╓Ин╔╓Л╓ф╓о╓╓╓╠╓ч╓╩╓С. ╔╧╔й╔ц╔в╔╥╔Г╔ц╔х╔Й╔Й║╪╔╧╓о, 5.0-CURRENT ╓╛ ftp://current.FreeBSD.org/pub/FreeBSD/ ╓╚╓И, 4-STABLE ╓╛ releng4.FreeBSD.org ╓╚╓Ид╬юэфЧ╪Й╡дг╫╓г╓╧. ╓ч╓©, 3-STABLE ╔╧╔й╔ц╔в╔╥╔Г╔ц╔х╓о, ╓Ё╓нй╦╬о╓н╪╧и╝╩Чею (2000 г╞ 5 ╥Н) ╓г╨Ню╝╓╣╓Л╓ф╓╓╓ч╓╩╓С. ╔╧╔й╔ц╔в╔╥╔Г╔ц╔х╔Й╔Й║╪╔╧╓о, ╦╫╨ъ, Ё╚х╞╓Дйщ╪И╨Н╤х╓╛╧т╓й╓О╓Л╓ф╓╓╓К╓╧╓ы╓ф╓н╔ж╔И╔С╔а╓к╓╙╓╓╓ф, й©╤я╓╥╓ф╟ЛфЭ╟Л╡С╨Ню╝╓╣╓Л╓ч╓╧. FreeBSD-STABLE ╓н╔Ё╔С╔╩╔в╔х╓о╡©╓г╓╧╓╚? FreeBSD 2.0.5 ╓╛╔Й╔Й║╪╔╧╓╣╓Л╓©╦Е, ╩Д╓©╓а╓о FreeBSD ╓нЁ╚х╞╓Р 2 ╥оеЩ╓кй╛ЁД╓╧╓К╓Ё╓х╓к╓╥╓ч╓╥╓©. ╟Л╓д╓о -STABLE ╓х╓╓╓╕╔ж╔И╔С╔а╓г, ╔п╔╟╓н╫╓ю╣╓о╓╥╓ц╓╚╓Й╔ф╔╧╔х╓╣╓Л, ╣║г╫╓н╤╞╡╫╓о╬╞╓╥╓╨╓д╓╥╓╚╧т╓О╓Л╓ч╓╩╓С(╣ч╓ййя╧╧╓Д╪б╦Ёе╙╣║г╫╓Рк╬╓ч╓й╓╓, ╔╓╔С╔©║╪╔м╔ц╔х╔╣║╪╔с╔╧╔в╔М╔п╔╓╔ю╓Д╠дмЬ╢К╤х╦Ч╓╠). ╓Б╓╕╟ЛйЩ╓н╔ж╔И╔С╔а╓о -CURRENT ╓г, 2.0 ╓╛╔Й╔Й║╪╔╧╓╣╓Л╓ф╟ймХ 5.0-RELEASE(╓╫╓╥╓ф╓╫╓н╦Е╓Б)╓ь╦Ч╓╠╓фл╝║╧╓хбЁ╓╓╓ф╓╓╓К╓Б╓н╓г╓╧. ASCII ╓гиа╓╓╓©╢йц╠╓й©ч╓╛╓О╓╚╓Й╓Д╓╧╓╓╓╚╓о╪╚©╝╓╛╓╒╓Й╓ч╓╩╓С╓╛, ╓Ё╓С╓й╢╤╓╦╓к╓й╓Й╓ч╓╧. 2.0 | | | [2.1-STABLE] *BRANCH* 2.0.5 -> 2.1 -> 2.1.5 -> 2.1.6 -> 2.1.7.1 [2.1-STABLE ╫╙н╩] | (1997/03) | | | [2.2-STABLE] *BRANCH* 2.2.1 -> 2.2.2-RELEASE -> 2.2.5 -> 2.2.6 -> 2.2.7 -> 2.2.8 [╫╙н╩] | (1997/03) (1997/10) (1998/04) (1998/07) (1998/12) | | 3.0-SNAPs (1997 г╞бХ╟Л╩мх╬╢ЭЁ╚╩о) | | 3.0-RELEASE (1998/10) | | [3.0-STABLE] *BRANCH* 3.1-RELEASE (1999/02) -> 3.2 -> 3.3 -> 3.4 -> 3.5 -> 3.5.1 | (1999/05) (1999/09) (1999/12) (2000/06) (2000/07) | [4.0-STABLE] *BRANCH* 4.0 (2000/03) ->4.1 -> 4.1.1 -> 4.2 -> ... ╬╜мХ╓н 4.x ╔Й╔Й║╪╔╧ ... | | (2000/07) (2000/09) (2000/11) | \|/ + [5.0-CURRENT ╓х╓╥╓ф╥ябЁцФ] -CURRENT ╔ж╔И╔С╔а╓о 5.0 ╓х╓╫╓нюХ╓ь╦Ч╓╠╓ф╓Ф╓ц╓╞╓Й╓х©й╡╫╓РбЁ╓╠╓ф╓╓╓ч╓╧. ╫╬мХ╓╒╓ц╓© 2.2-STABLE ╔ж╔И╔С╔а╓о 2.2.8 ╓н╔Й╔Й║╪╔╧╓Р╓Б╓ц╓ф╫╙н╩╓╥╓ч╓╥╓©. 3-STABLE ╓╛╓╫╓Л╓кбЕ╓О╓Й, 2000 г╞ 7 ╥Н╓к 3.5.1-RELEASE (╨г╦Е╓н 3.X ╔Й╔Й║╪╔╧) ╓╛╔Й╔Й║╪╔╧╓╣╓Л╓ч╓╥╓©. 2000 г╞ 3 ╥Н (3.5 ╓н╦ЬЁ╚а╟╓к╓й╓Й╓ч╓╧╓╛) ╓к╓о, 3-STABLE ╔ж╔И╔С╔а╓о╓ш╓э, 4-STABLE ╔ж╔И╔С╔а╓к╓Х╓ц╓фцж╓╜╢╧╓╗╓И╓Л╓ч╓╥╓©. 4.2-RELEASE ╓о 2000 г╞ 11 ╥Н╓к╔Й╔Й║╪╔╧╓╣╓Л╓ч╓╥╓©. 4-STABLE ╓о╦╫╨ъ -STABLE ╔ж╔И╔С╔а╓гЁХх╞╓кЁ╚х╞╓╛бЁ╓╠╓И╓Л╓ф╓╓╓ч╓╧╓╛, 3-STABLE ╓ь╓н╔п╔╟╓н╫╓ю╣ (╓ш╓х╓С╓и╓╛╔╩╔╜╔Е╔Й╔ф╔ё╢ьо╒╓н╓Б╓н) ╓Б╓ч╓ю╧т╓й╓О╓Л╓ф╓╓╓ч╓╧. 3.X ╔ж╔И╔С╔а╓о 2000 г╞╓н╡ф╓к╓о╦Ь╪╟╓кЁ╚х╞╓╛╫╙н╩╓╧╓Км╫дЙ╓г╓╧. ╦╫╨ъ╓н current branch ╓о 5.0-CURRENT ╓г╓╒╓Й, ╨г╫И╓н 5.0 ╥онС╓н╔Й╔Й║╪╔╧м╫дЙ╓о╓ч╓ю╥ХдЙ╓╥╓ф╓╓╓ч╓╩╓С. FreeBSD ╓н╔Й╔Й║╪╔╧╓о╓╓╓д╨Н╓И╓Л╓К╓н╓г╓╧╓╚? FreeBSD ╔Ё╔╒╔а║╪╔Ю╓о╦╤б╖е╙╓к, ©╥╓╥╓╓╣║г╫╓Д╔п╔╟╔у╔ё╔ц╔╞╔╧╓╛╫╪й╛╫╦╓ч╓Й, ╔Й╔Й║╪╔╧╓н╟бдЙю╜╓Рб╩╓й╓╕╓Ё╓х╓╛л╣╓╓╓Х╓╕, ╓╣╓ч╓╤╓ч╓ййя╧╧╓╛╫╫й╛╓к╟бдЙ╓╥╓ф╓╓╓К╓х╓╓╓╕╬Р╥О╓РкЧ╓©╓╥╓ф╓╓╓К╬Л╧Г╓к╓н╓ъ, ©╥╓╥╓╓╔п║╪╔╦╔Г╔С╓н FreeBSD ╓Р╔Й╔Й║╪╔╧╓╥╓ч╓╧. ╓©╓х╓╗╓Ё╓нмя©╢©╪╓╣╓╛©╥╓╥╓╓╣║г╫╓╛╩х╓╗╓К╓Х╓╕╓к╓й╓К╓Ё╓х╓Р бт╓ак╬╓С╓г╓╓╓К╔Ф║╪╔╤╓Рмъ╣АиткЧ╓к╓╣╓╩╓К╓х╓╥╓ф╓Б, б©╓╞╓н╔Ф║╪╔╤╓о╓Ё╓н╓Ё╓х╓Р FreeBSD ╓н╨г╓Бни╓╓╫Й╓н╟Л╓д╓ю╓х╧м╓╗╓ф╓╓╓ч╓╧. ╔Й╔Й║╪╔╧╓н╨Ню╝╓о, й©╤яе╙╓к╦ю╓ц╓ф╓╙╓Х╓╫ 4 ╔Ж╥Н╓╢╓х╓к╧т╓й╓О╓Л╓ч╓╧. ╓Б╓╕╬╞╓╥╩и╥Ц╓╛мъ╓╥╓╓(╓╒╓К╓╓╓обт╓а╠С╓╥╓╓)йЩ║╧╦Ч╓╠╓к╓о, кХфЭ╔п╔╓╔й╔Й╔╧╔й╔ц╔в╔╥╔Г╔ц╔х╓╛╨Ню╝╓╣╓Л╓ф╓╓╓ч╓╧. ╬Е╣╜╓Р╩╡╬х╓╥╓ф╓╞╓ю╓╣╓╓. FreeBSD ╓о PC мя╓ю╓╠╓╥╓╚╓й╓╓╓н? FreeBSD 3.x ╟й╧ъ╓о x86 ╔╒║╪╔╜╔ф╔╞╔а╔Ц╓хф╠мм, DEC Alpha ╓г╓Бф╟╨Н╓╥╓ч╓╧. ╓ч╓©, SPARC, PowerPC, IA64 ╓ь╓н╟э©╒╓х╓╓╓╕╤╫лё©╪╓╓оц╓Б╓╒╓Й╓ч╓╧. ╟ш╓й╓К╔╒║╪╔╜╔ф╔╞╔а╔Ц╓н╔ч╔╥╔С╓Р ╩Щ╓ц╓ф╓╓╓ф, ╓Ф╓ц╓╞╓Йбт╓ф╓й╓╓╓х╓╓╓╕╬Л╧Г╓к╓о╪║╓н URL ╓Р ╩╡╬х╓╥╓ф╓╞╓ю╓╣╓╓. NetBSD ╓ч╓©╓о OpenBSD. FreeBSD ╓нюуг╓╪т╓о╓╓╓ц╓©╓╓ц╞? ╔в╔М╔╦╔╖╔╞╔х╓на╢бне╙╓ййЩ╦Чю╜╓Д, ц╞╓к╔╫║╪╔╧╔д╔Й║╪╓к╔Ё║╪╔и╓н╫Я╓╜╧Ч╓ъ╦╒╦б╓Рм©╓╗╓К╓╚, ╓й╓и╓х╓╓╓ц╓© FreeBSD ╔в╔М╔╦╔╖╔╞╔х╓к╢ь╓╧╓К╫емв╓й╟у╩в╥ХдЙ╓о, 9 л╬╓╚╓И╓й╓К╔Ё╔╒╔а║╪╔Ю(core team)╓к╓Х╓ц╓ф╓й╓╣╓Л╓ч╓╧. ╔╫║╪╔╧╔д╔Й║╪╓Рд╬юэйя╧╧╓г╓╜╓К©м╓о╓Б╓ц╓хб©╓╞, 200 л╬╟й╬Е╓н╔╫║╪╔╧╔д╔Й║╪╢имЩ╪т(committer) ╓╛╓╓╓ч╓╧. ╓╥╓╚╓╥, ╔А║╪╔Й╔С╔╟╔Й╔╧╔х╓гюХ╧т╓╥╓ф╣дою╓╣╓Л╓К, дл╬О╓нйя╧╧╓г╓о╓й╓╓╓Б╓н╓н╣дою╓ь╓н╩╡╡ц╓к╓о, ╟Люзю╘╦б╓о╓╒╓Й╓ч╓╩╓С. ╓и╓Ё╓╚╓И FreeBSD ╓РфЧ╪Й╓г╓╜╓ч╓╧╓╚? FreeBSD ╓н╓╧╓ы╓ф╓н╪Гмв╓й╔Й╔Й║╪╔╧╓о anonymous FTP ╥пмЁ╓г FreeBSD FTP ╔╣╔╓╔х ╓╚╓ИфЧ╪Й╓г╓╜╓ч╓╧. ╦╫╨ъ╓н 3.X-STABLE ╔Й╔Й║╪╔╧, 3.5.1-RELEASE ╓о 3.5.1-RELEASE ╓н╔г╔ё╔Л╔╞╔х╔Й╓к╓╒╓Й╓ч╓╧. ╦╫╨ъ╓н 4-STABLE ╔Й╔Й║╪╔╧, 4.2-RELEASE ╓о 4.2-RELEASE ╓н╔г╔ё╔Л╔╞╔х╔Й╓к╓╒╓Й╓ч╓╧. 4.X Snapshot ╓о, ╓ш╓э╟ЛфЭ╓к╟Л╡С╨Ню╝╓╣╓Л╓ф╓╓╓ч╓╧. 5.0 Snapshot ╔Й╔Й║╪╔╧╓о -CURRENT ╔ж╔И╔С╔амя╓к╟ЛфЭ╓к╟Л╡С╨Ню╝╓╣╓Л╓ф╓╙╓Й, ╓Ё╓Л╓И╓о╫Ц©Х╓к╨гюХц╪╓нЁ╚х╞╪т╓╙╓Х╓с╔ф╔╧╔©║╪╓н╓©╓А╓кдС╤║╓╣╓Л╓ф╓╓╓ч╓╧. ╓ч╓©, FreeBSD ╓о CD-ROM ╓г╓БфЧ╪Й╓г╓╜, ╪║╓н╓х╓Ё╓М╓гцМй╦╓г╓╜╓ч╓╧.
BSDi 4041 Pike Lane, Suite F Concord, CA 94520 USA Orders: +1 800 786-9907 Questions: +1 925 674-0783 FAX: +1 925 674-0821 email: BSDi Orders address WWW: BSDi Home page
╔╙║╪╔╧╔х╔И╔Й╔╒╓г╓о, ╪║╓н╓х╓Ё╓М╓клД╓╓╧Г╓О╓╩╓ф╓╞╓ю╓╣╓╓.
Advanced Multimedia Distributors Factory 1/1 Ovata Drive Tullamarine, Melbourne Victoria Australia Voice: +61 3 9338 6777 CDROM Support BBS 17 Irvine St Peppermint Grove, WA 6011 Voice: +61 9 385-3793 Fax: +61 9 385-2360
╔╓╔╝╔Й╔╧╓н╬Л╧Г╓о╪║╓н╓х╓Ё╓М╓г╓╧.
The Public Domain & Shareware Library Winscombe House, Beacon Rd Crowborough Sussex. TN6 1UL Voice: +44 1892 663-298 Fax: +44 1892 667-473
FreeBSD ╓н╔А║╪╔Й╔С╔╟╔Й╔╧╔х╓к╓д╓╓╓фцн╓Й╓©╓╓╓н╓г╓╧╓╛? ╢╟а╢╓й╬ПйС╓╛ FreeBSD ╔о╔С╔и╔ж╔ц╔╞╓н╔А║╪╔Й╔С╔╟╔Й╔╧╔х╓нюА ╓к╓╒╓Й╓ч╓╧. FreeBSD ╓ню╬нЯ 2000 г╞лДбЙ╓к╢ь╓╧╓К╬ПйС╓о╓и╓Ё╓к╓╒╓Й╓ч╓╧╓╚? ╢╟а╢╓й╬ПйС╓╛ FreeBSD Y2K ╓н╔з║╪╔╦ ╓к╓╒╓Й╓ч╓╧. FreeBSD ╓н╔к╔Е║╪╔╧╔╟╔К║╪╔в╓о╡©╓╛╓╒╓Й╓ч╓╧╓╚? ╢╟а╢╓й╬ПйС╓╛ FreeBSD ╔о╔С╔и╔ж╔ц╔╞╓н╔к╔Е║╪╔╧╔╟╔К║╪╔в╓нюА╓к╓╒╓Й╓ч╓╧. FreeBSD ╓н IRC(Internet Relay Chat)╓к╓д╓╓╓ф╡©╓╚╬ПйС╓о╓╒╓Й╓ч╓╧╓╚? ╓╒╓Й╓ч╓╧. ╟й╡╪╓н╓Х╓╕╓к, ╓ш╓х╓С╓и╓нм╜л╬╓й IRC ╔м╔ц╔х╔О║╪╔╞╓к╓о FreeBSD ╓н╔а╔Ц╔ц╔х╔а╔Ц╔С╔м╔К╓╛╓╒╓Й╓ч╓╧. EFNet ╓н Channel #FreeBSD ╓о FreeBSD ╢ь╥╦╓н╔у╔╘║╪╔И╔Ю╓г╓╧╓╛, ╓╫╓Ё╓г╣╩╫яе╙╔╣╔щ║╪╔х╓Р╢Эбт╓╥╓ф╓о╓╓╓╠╓ч╓╩╓С. ╓╫╓Ё╓к╓╓╓К©м╓©╓а╓о╓╒╓й╓©╓Р╔ч╔к╔Е╔╒╔К╔з║╪╔╦╓Рфи╓Ю╓х╓╚, ╦╕╣Ф╓Р╓╧╓К╓х╓╚╓х╓╓╓ц╓©╤Ло╚╓╚╓И╠С╓╤╓╠╓Х╓╕╓х╓╥╓ч╓╧. ╓ч╓╨бХ╟Л╓к, ╓Ё╓Л╓о╔а╔Ц╔ц╔х╔а╔Ц╔С╔м╔К╓г╓╒╓Й, ╓╫╓Ё╓к╓╒╓К╔х╔т╔ц╔╞╔╧╓онЬ©мйГ╫╦, ╔╧╔щ║╪╔д, Ёкй╪╢О╓х╓╓╓ц╓©╓Х╓╕╓й╓Б╓н╓г╓╒╓Й, FreeBSD ╓Бф╠нС╓к╟╥╓О╓Л╓ф╓╓╓ч╓╧. ╟Л╠ЧцМ╟у╓╥╓ч╓╥╓©╓╚╓И╓м! ╓Ё╓Л╓о irc.chat.org ╓н╔╣║╪╔п║╪╬Е╓к╓╒╓Й╓ч╓╧. EFNet ╓н Channel #FreeBSDhelp ╓о FreeBSD ╔Ф║╪╔╤╓н╔ь╔К╔вюЛмя╔а╔Ц╔м╔К╓г╓╧. ╩╡╡ц╪т╓о #FreeBSD ╔а╔Ц╔м╔К╓Х╓Й╓Б©фюз╓к╪алД╓кеЗ╓╗╓ф╓╞╓Л╓ч╓╧. DALNET ╓н Channel #FreeBSD ╓о╔╒╔А╔Й╔╚╓г╓о irc.dal.net, ╔Х║╪╔М╔ц╔я╓г╓о irc.eu.dal.net ╓к╓╒╓Й╓ч╓╧. UNDERNET ╓н Channel #FreeBSD ╓о╔╒╔А╔Й╔╚╓г╓о us.undernet.org, ╔Х║╪╔М╔ц╔я╓г╓о eu.undernet.org ╓к╓╒╓Й╓ч╓╧. ╓Ё╓Ё╓о╔ь╔К╔в╔а╔Ц╔С╔м╔К╓г╓╧. ╔и╔╜╔Е╔А╔С╔х╓Рфи╓А╓К╫ЮхВ╓Р╓╥╓ф╓╚╓ИмЬмя╓╥╓ф╓╞╓ю╓╣╓╓. HybNet ╓н Channel #FreeBSD ╓о irc.FreeBSD.org ╓к╓╒╓Й╓ч╓╧. ╓Ё╓н╔а╔Ц╔С╔м╔К╓о╓ь╔К╔в╔а╔Ц╔С╔м╔К╓г╓╧. ╓╫╓Л╓╬╓Л╓н╔а╔Ц╔С╔м╔К╓ойл╦д╓н╓Б╓н╓г, ╦ъ╓╓╓кюэбЁ╓╣╓Л╓ф╓╓╓ч╓╩╓С. ╔а╔Ц╔ц╔х╓н╔╧╔©╔╓╔К╓Б╟Ц╓ц╓ф╓╓╓ч╓╧╓н╓г, ╪╚й╛╓н╔а╔Ц╔ц╔х╓н╔╧╔©╔╓╔К╓к╓╒╓ц╓©╓Б╓н╓Р╦╚╓д╓╠╓К╓©╓А╓к╟Л╓д╟Л╓д╩Н╓╧╓н╓Б╓╓╓╓╓г╓╥╓Г╓╕. ╓╒╓И╓Ф╓К╪ОнЮ╓н IRC ╔х╔И╔у╔ё╔ц╔╞╓н╓©╓А, ╪╨нИ╓й╓Ё╓х╓Р╓╓╓╕╪Ц╪т╓©╓а(г╞гз╓нйЩ╓о╬╞©Т╓г╓╧)╓н╓©╓А╓к╣║╥Ы╓Рб╩╓м╓©╓Й, ╪Й╓киИ╓╗╓й╓╞╓й╓ц╓ф╓Б╣╓╓к╓╥╓ф╓о╓╓╓╠╓ч╓╩╓С. FreeBSD ╓нкэ &a.doc; ╓к╔Ё╔С╔©╔╞╔х╓╥╓ф╓ъ╓ф╓╞╓ю╓╣╓╓(╓╣╓И╓к╩╡╡ц╓╧╓Л╓п╓Б╓ц╓х╓Х╓╓╓г╓╥╓Г╓╕). ╓Ё╓н╔А║╪╔Й╔С╔╟╔Й╔╧╔х╓о FreeBSD ╢ьо╒╓нй╦╫Я╓к╢ь╓╧╓К╣дою╓н╓©╓А╓н╓Б╓н╓г╓╧. FreeBSD ╓к╢ь╓╧╓К╪алД╓кбп╓╥╓ф╓о, &a.questions; ╓х╓╓╓╕╔А║╪╔Й╔С╔╟╔Й╔╧╔х╓╛╓╒╓Й╓ч╓╧. FreeBSD ╔о╔С╔и╔ж╔ц╔╞╓Б╓╒╓Й╓ч╓╧. ╓Ё╓Л╓о╦╫╨ъ╨Н╤хцФ╓г, ит╢╟а╢╓ю╓ц╓©╓Й╨г©╥╬ПйС╓г╓й╓╓╓Б╓н╓╛╢ч╓ч╓Л╓ф╓╓╓К╓Ё╓х╓кцМ╟у╓╥╓ф╓╞╓ю╓╣╓╓. FreeBSD ╓н╔╛╔╓╔икэ╓н╥ХдЙхг╓о, Greg Lehey ╓╛╫Я╓╓╓© The Complete FreeBSD ╓г╓╧. ╓Ё╓Л╓о BSDi (╓╚╓д╓ф╓н Walnut Creek CDROM) Books ╓╚╓И╫пхг╓╣╓Л╓ф╓╓╓ч╓╧. ╦╫╨ъ╓обХфСхг╓к╓й╓ц╓ф╓╓╓ф, ╔╓╔С╔╧╔х║╪╔К, ╔╥╔╧╔ф╔Ю╢имЩ╔╛╔╓╔и, ╔в╔М╔╟╔И╔ЮюъдЙ╓н╔ь╔К╔в, ╔ч╔к╔Е╔╒╔К╔з║╪╔╦╓ч╓г╓нфБмф╓╛ 1,750 ╔з║╪╔╦╓к╓О╓©╓ц╓ф╫Я╓╚╓Л╓ф╓╓╓ч╓╧. ╓Ё╓нкэ╓о(╓╫╓╥╓ф╦╫╨ъ╓н FreeBSD ╔Й╔Й║╪╔╧╓о) BSDi, CheapBytes, ╓ч╓©╓о╨г╢С╓Й╓н╫Яе╧╓гцМй╦╓╧╓К╓Ё╓х╓╛╓г╓╜╓ч╓╧. ISBN ╔Ё║╪╔и╓о 1-57176-227-2 ╓г╓╧. ╓ч╓©, FreeBSD ╓о Berkeley 4.4BSD-Lite ╔ы║╪╔╧╓й╓н╓г, б©╓╞╓н 4.4BSD ╓н╔ч╔к╔Е╔╒╔К╓╛ FreeBSD ╓к╓Б╠Чмя╓г╓╜╓ч╓╧. O'Reilly and Associates ╓╛╟й╡╪╓н╔ч╔к╔Е╔╒╔К╓Р╫пхг╓╥╓ф╓╓╓ч╓╧. 4.4BSD System Manager's Manual By Computer Systems Research Group, UC Berkeley 1st Edition June 1994, 804 pages ISBN: 1-56592-080-5 4.4BSD User's Reference Manual By Computer Systems Research Group, UC Berkeley 1st Edition June 1994, 905 pages ISBN: 1-56592-075-9 4.4BSD User's Supplementary Documents By Computer Systems Research Group, UC Berkeley 1st Edition July 1994, 712 pages ISBN: 1-56592-076-7 4.4BSD Programmer's Reference Manual By Computer Systems Research Group, UC Berkeley 1st Edition June 1994, 886 pages ISBN: 1-56592-078-3 4.4BSD Programmer's Supplementary Documents By Computer Systems Research Group, UC Berkeley 1st Edition July 1994, 596 pages ISBN: 1-56592-079-1 ╓Ё╓Л╓И╓н╬э╨ы╓йюБлю╓╛ WWW ╥пмЁ╓г 4.4BSD books description ╓╚╓Ифи╓Ю╓Ё╓х╓╛╓г╓╜╓ч╓╧. хнгД©Т╓╛╬╞╓й╓╓╓©╓А╓Ё╓Л╓И╓н╔ч╔к╔Е╔╒╔К╓офЧ╪Й╓╥╓к╓╞╓╓╓╚╓Б╓╥╓Л╓ч╓╩╓С. 4.4BSD ╓н╔╚║╪╔м╔К╧╫ю╝╓к╓д╓╓╓ф╓Х╓Йе╟дЛе╙╓кцн╓Й╓©╓╓╓н╓й╓И, ╓Ё╓Л╓й╓И╢ж╟Ц╓╓╓й╓╓╓г╓╥╓Г╓╕. McKusick, Marshall Kirk, Keith Bostic, Michael J Karels, and John Quarterman. The Design and Implementation of the 4.4BSD Operating System. Reading, Mass. : Addison-Wesley, 1996. ISBN: 0-201-54979-4 ╔╥╔╧╔ф╔Ю╢имЩ╓к╓д╓╓╓ф╩╡╧м╓к╓й╓Ккэ╓о╪║╓н╓Б╓н╓г╓╧. Evi Nemeth, Garth Snyder, Scott Seebass & Trent R. Hein, ``Unix System Administration Handbook'', Prentice-Hall, 1995 ISBN: 0-13-151051-7 ╫Ихг╓н╓Б╓н╓г╓о╓й╓╞, юж╓╓╔╚╔п║╪╓нбХфСхг╓г╓╒╓К╓╚ Ёнг╖╓╥╓ф╓╞╓ю╓╣╓╓. ╓Ё╓нкэ╓о TCP/IP ╓ю╓╠╓г╓й╓╞ DNS, NFS, SLIP/PPP, sendmail, INN/NNTP, ╟У╨Ч╓й╓и╓н╢Пац╓Р╟╥╓ц╓ф╓╓╓ч╓╧. ╧Б╡а╓г╓╧╓╛(╓╙╓Х╓╫ US$45-$55), гЦ╓╕╡ацм╓о╓╒╓Й╓ч╓╧. ╓ч╓©, ©╖║╧╓й╔д║╪╔К╓н╔╫║╪╔╧╔Ё║╪╔и╓╛фЧ╓ц╓© CD-ROM ╓╛иуб╟╓╥╓ф╓╓╓ч╓╧. ╓╥╓╚╓╥, ╓╫╓Л╓И╓н╓ш╓х╓С╓и╓о FreeBSD 2.2.6R CD-ROM ╓к╪Що©╓╣╓Л╓ф╓╓╓ч╓╧(╓╣╓И╓к FreeBSD CD-ROM ╓н╪Що©й╙╓нйЩ╓╛╓Х╓Й©╥╓╥╓╓╬Л╧Г╓╛╓╒╓Й╓ч╓╧). ╬ЦЁ╡йС╧П(PR; Problem Report) ╔г║╪╔©╔ы║╪╔╧╓к╔╒╔╞╔╩╔╧╓╧╓КйЩк║╓о? ╔Ф║╪╔╤╓╚╓И╓нйя╧╧мв╣А╓╛╓ч╓х╓А╓И╓Л╓ф╓╓╓К Problem Report ╔г║╪╔©╔ы║╪╔╧╓о, ╬ЦЁ╡йС╧П╓н web ╔ы║╪╔╧╓н╔╓╔С╔©╔у╔╖║╪╔╧╓Рдл╓╥╓ф, дС╫п╓хлД╓╓╧Г╓О╓╩╓Р╧т╓й╓╕╓Ё╓х╓╛╓г╓╜╓ч╓╧. ╓ч╓©, send-pr(1) ╔Ё╔ч╔С╔и╓Р╩хмя╓╥╓ф, ее╩р╔А║╪╔К╥пмЁ╓г╬ЦЁ╡йС╧П╓Дйя╧╧мв╣А╓РдС╫п╓╧╓К╓Ё╓х╓Б╓г╓╜╓ч╓╧. ╔в╔Л╔╓╔С╔ф╔╜╔╧╔х(ASCII)хг ╓Д PostScript хг╓н FreeBSD й╦╫Я╓о╓й╓╓╓н╓г╓╥╓Г╓╕╓╚? ╓о╓╓, ╓Б╓а╓М╓С╓╒╓Й╓ч╓╧. ©Тб©╓╞╓н╟ш╓й╓К╔у╔╘║╪╔ч╔ц╔х, ╟╣╫л╥а╪╟╓нй╦╫Я╓╛ FreeBSD FTP ╔╣╔╓╔х╓н /pub/FreeBSD/doc/ ╓х╓╓╓╕╔г╔ё╔Л╔╞╔х╔Й╓╚╓ИфЧ╪Й╡дг╫╓г╓╧. й╦╫Я╓о, ╪║╓н╓Х╓╕╓й╓╣╓ч╓╤╓ч╓й╢яею╓╚╓Ий╛нЮ╓╣╓Л╓ф╓╓╓ч╓╧. faq ╓Д handbook ╓х╓╓╓ц╓©й╦╫Ял╬╓к╓Х╓Кй╛нЮ. й╦╫Я╓н╦ю╦Л╓х╔╗╔С╔Ё║╪╔г╔ё╔С╔╟╓к╓Х╓Кй╛нЮ. ╓Ё╓Л╓о FreeBSD ╔╥╔╧╔ф╔Ю╓н /usr/share/locale ╓к╓╒╓К locale л╬╓к╢П╓е╓╓╓ф╓╓╓ч╓╧. ╦╫╨ъмЬмя╡дг╫╓й╦ю╦Л, ╔╗╔С╔Ё║╪╔г╔ё╔С╔╟╓о╟й╡╪╓н╓х╓╙╓Й╓г╓╧. л╬а╟ ╟улё en_US.ISO8859-1 ╠я╦Л(йф╧Я) es_ES.ISO8859-1 ╔╧╔з╔╓╔С╦Л fr_FR.ISO8859-1 ╔у╔И╔С╔╧╦Л ja_JP.eucJP фЭкэ╦Л(EUC ╔╗╔С╔Ё║╪╔г╔ё╔С╔╟) ru_RU.KOI8-R ╔М╔╥╔╒╦Л(KOI8-R ╔╗╔С╔Ё║╪╔г╔ё╔С╔╟) zh_TW.Big5 цФ╧Я╦Л(Big5 ╔╗╔С╔Ё║╪╔г╔ё╔С╔╟) ╦ю╦Л╓к╓Х╓ц╓ф╓о╫ЮхВ╓╣╓Л╓ф╓╓╓й╓╓й╦╫Я╓Бб╦╨ъ╓╥╓ч╓╧. й╦╫Я╓н╥а╪╟╓к╓Х╓Кй╛нЮ. й╦╫Я╓о©Тб©╓╞╓н╟ш╓й╓К╫пно╥а╪╟╓Рмя╟у╓╥, ╡дг╫╓й╦б╓Й╫юфП╓йбп╠Ч╓╛╓г╓╜╓К╓Х╓╕╓к╓╥╓ф╓╓╓ч╓╧. ╦╫╨ъ, мЬмя╡дг╫╓йй╦╫Я╥а╪╟╓о╟й╡╪╓н╓х╓╙╓Й╓г╓╧. й╦╫Я╥а╪╟ ╟улё html-split ╔╣╔╓╔╨╓н╬╝╓╣╓╓, ╔Й╔С╔╞╓╣╓Л╓©йё©Т╓н HTML ╔у╔║╔╓╔К html й╦╫Яа╢бн╓Р╢ч╓С╓ю, ц╠╟Л╓нбГ╓╜╓й╔у╔║╔╓╔К pdb iSilo ╓гмЬмя╡дг╫╓й Palm Pilot ╔г║╪╔©╔ы║╪╔╧╥а╪╟ pdf Adobe ╪р╓н PDF(Portable Document Format)╥а╪╟ ps Postscript ╥а╪╟ rtf Microsoft ╪р╓н╔Й╔ц╔а╔ф╔╜╔╧╔х╥а╪╟ ╓Ё╓н╥а╪╟╓Р Word ╓гфи╓ъ╧Ч╓С╓ю╬Л╧Г, ╔з║╪╔╦хж╧Ф╓о╪╚ф╟е╙╓к╧╧©╥╓╣╓Л╓ч╓╩╓С. ╔з║╪╔╦хж╧Ф╓Р╧╧©╥╓╧╓К╓к╓ой╦╫Я╓Рфи╓ъ╧Ч╓С╓г╓╚╓И CTRL+A, CTRL+END, F9 ╓Р╡║╓╥╓ф╓╞╓ю╓╣╓╓. txt ╔в╔Л╔╓╔С╔ф╔╜╔╧╔х╥а╪╟ ╟╣╫л╓х package ╥а╪╟╓к╓Х╓Кй╛нЮ. ╦╫╨ъмЬмя╓╣╓Л╓ф╓╓╓К╓н╓о╪║╓н 3 ╪ОнЮ╓г╓╧. html-split ╥а╪╟╓н╬Л╧Г, ╔у╔║╔╓╔К╓о╓ч╓╨, &man.tar.1; ╓Р╩х╓ц╓ф╓ч╓х╓А╓И╓Л, ╓ч╓х╓А╓И╓Л╓© .tar ╔у╔║╔╓╔К╓о╪║╓к╡РюБ╓╧╓КйЩ╪╟╓г╟╣╫л╓╣╓Л╓ч╓╧. ╓╫╓нб╬╓н╥а╪╟╓н╬Л╧Г, ╔у╔║╔╓╔К╓о book.format (нЦ╓╗╓п book.pdb, book.html ╓й╓и) ╓х╓╓╓╕ц╠╟Л╓н╔у╔║╔╓╔К╓г╓╧. ╬Е╓к╓╒╓╡╓©╔у╔║╔╓╔К╓о 3 ╪ОнЮ╓нйЩ╪╟╓н╓╓╓╨╓Л╓╚╓г╟╣╫л╓╣╓Л╓ч╓╧. йЩ╪╟ юБлю zip Zip ╥а╪╟. FreeBSD ╓г╟╣╫л╓Р╦╣╓клА╓╧╓к╓о, ╓ч╓╨ archivers/unzip ╓н port ╓Р╔╓╔С╔╧╔х║╪╔К╓╧╓Ки╛мв╓╛╓╒╓Й╓ч╓╧. gz GNU Zip ╥а╪╟. ╟╣╫л╓Р╦╣╓клА╓╧╓к╓о, FreeBSD ╓к╢ч╓ч╓Л╓К &man.gunzip.1; ╓Р╩х╓╓╓ч╓╧. bz2 BZip2 ╥а╪╟. б╬╓н╥а╪╟╓кхФ╓ы╓фиА╣з╓╥╓ф╓╓╓ч╓╩╓С╓╛, ╟Лхле╙╓к╔у╔║╔╓╔К╔╣╔╓╔╨╓╛╬╝╓╣╓╞╓й╓Й╓ч╓╧. ╟╣╫л╓Р╦╣╓клА╓╧╓к╓о, archivers/bzip2 port ╓Р╔╓╔С╔╧╔х║╪╔К╓╥╓ф╓╞╓ю╓╣╓╓. Postscript хг╓н╔о╔С╔и╔ж╔ц╔╞╓╛ BZip2 ╥а╪╟╓г╟╣╫л╓╣╓Л╓ф╓╓╓К╬Л╧Г, ╔у╔║╔╓╔Кл╬╓о handbook/ ╔г╔ё╔Л╔╞╔х╔Й╓нцФ╓н book.sgml.bz2 ╓к╓й╓Й╓ч╓╧. ╓╣╓ч╓╤╓ч╓й╥а╪╟╓кю╟╥а╓╣╓Л╓©й╦╫Я╓о, ╟й╡╪╓к╫р╓ы╓К╓Х╓╕╓к FreeBSD ╓н package ╓х╓╥╓ф╓БдС╤║╓╣╓Л╓ф╓╓╓ч╓╧. ╔ю╔╕╔С╔М║╪╔и╓╧╓Кй╦╫Я╓х╟╣╫л╥а╪╟╓Ра╙бР╓╥╓©╓И, й╦╫Я╓Р FreeBSD package ╓х╓╥╓ф╔ю╔╕╔С╔М║╪╔и╓╧╓К╓╚╓и╓╕╓╚╥Х╓А╓й╓╠╓Л╓п╓й╓Й╓ч╓╩╓С. package ╓х╓╥╓ф╔ю╔╕╔С╔М║╪╔и╓╥╓ф╔╓╔С╔╧╔х║╪╔К╓╧╓К╬Л╧Г╓к╓о, й╦╫Я╓Р &man.pkg.add.1; ╓Д &man.pkg.delete.1; ╓х╓╓╓ц╓©, иАдл╓н FreeBSD package ╢имЩ╔╥╔╧╔ф╔Ю╓Рмя╓╓╓©╢имЩ╓╛╡дг╫╓г╓╒╓К╓х╓╓╓╕мЬею╓╛╓╒╓Й╓ч╓╧. й╦╫Я╓н package ╓Р╔ю╔╕╔С╔М║╪╔и╓╥╓ф╔╓╔С╔╧╔х║╪╔К╓╧╓К╓Ё╓х╓к╥Х╓А╓©╓И, ╓ч╓╨╓о╔ю╔╕╔С╔М║╪╔и╓╧╓К╔у╔║╔╓╔Кл╬╓Рцн╓Ки╛мв╓╛╓╒╓Й╓ч╓╧. й╦╫Я╓н package ╓о, packages ╓х╓╓╓╕╔г╔ё╔Л╔╞╔х╔Й╓кцж╓╚╓Л╓ф╓╓╓ч╓╧. ╓╫╓╥╓ф╓╫╓Л╓╬╓Л╓н package ╔у╔║╔╓╔К╓о, й╦╫Ял╬.╦ю╦Л.╔╗╔С╔Ё║╪╔г╔ё╔С╔╟.╥а╪╟.tgz ╓х╓╓╓╕╓Х╓╕╓йл╬а╟╓к╓й╓ц╓ф╓╓╓ч╓╧. ╓©╓х╓╗╓п, FAQ ╓н╠я╦Лхг╓г PDF ╥а╪╟╓н╓Б╓н╓о, faq.en_US.ISO8859-1.pdf.tgz ╓х╓╓╓╕╔у╔║╔╓╔Кл╬╓г╓╧. ╔у╔║╔╓╔Кл╬╓╛╓О╓╚╓ц╓©╓И, ╪║╓н╓Х╓╕╓й╔Ё╔ч╔С╔и╓г╠я╦Лхг╓н PDF ╥а╪╟ FAQ ╓н package ╓Р╔╓╔С╔╧╔х║╪╔К╓╧╓К╓Ё╓х╓╛╓г╓╜╓ч╓╧. &prompt.root; pkg_add ftp://ftp.FreeBSD.org/pub/FreeBSD/doc/packages/faq.en_US.ISO8859-1.pdf.tgz ╔╓╔С╔╧╔х║╪╔К╓н╫╙н╩╦Е╓о &man.pkg.info.1; ╓Р╩х╓╓, ╔у╔║╔╓╔К╓╛╓и╓Ё╓к╔╓╔С╔╧╔х║╪╔К╓╣╓Л╓©╓╚╓Рд╢╓ы╓К╓Ё╓х╓╛╓г╓╜╓ч╓╧. &prompt.root; pkg_info -f faq.en_US.ISO8859-1.pdf Information for faq.en_US.ISO8859-1.pdf: Packing list: Package name: faq.en_US.ISO8859-1.pdf CWD to /usr/share/doc/en_US.ISO8859-1/books/faq File: book.pdf CWD to . File: +COMMENT (ignored) File: +DESC (ignored) ╓╢мВ╓к╓й╓К╓х╓О╓╚╓К╓х╓╙╓Й, book.pdf ╓о /usr/share/doc/en_US.ISO8859-1/books/faq ╓к╔╓╔С╔╧╔х║╪╔К╓╣╓Л╓ч╓╧. package ╓РмЬмя╓╥╓й╓╓╬Л╧Г╓о, ╪╚й╛╓г╟╣╫л╓╣╓Л╓©╔у╔║╔╓╔К╓Р╔ю╔╕╔С╔М║╪╔и╓╥╓ф╦╣╓клА╓╥, е╛юз╓й╬Л╫Й╓к╓╫╓Л╓Р╔Ё╔т║╪╓╧╓Ки╛мв╓╛╓╒╓Й╓ч╓╧. ╓©╓х╓╗╓п, й╛ЁД╓╣╓Л╓© HTML хг╓н FAQ ╓г, &man.gzip.1; ╓г╟╣╫л╓╣╓Л╓ф╓╓╓К╓Б╓н╓о en_US.ISO8859-1/books/faq/book.html-split.tar.gz ╓х╓╓╓╕╔у╔║╔╓╔К╓г╓╧. ╓Ё╓Л╓Р╔ю╔╕╔С╔М║╪╔и╓╥╓ф╟╣╫л╓Р╦╣╓клА╓╧╓к╓о, ╪║╓н╓Х╓╕╓к╓╧╓Ки╛мв╓╛╓╒╓К╓г╓╥╓Г╓╕. &prompt.root; fetch ftp://ftp.freebsd.org/pub/FreeBSD/doc/en_US.ISO8859-1/books/faq/book.html-split.tar.gz &prompt.root; gzip -d book.html-split.tar.gz &prompt.root; tar xvf book.html-split.tar ╓Ё╓╕╓╧╓К╓х, йё©Т╓н .html ╔у╔║╔╓╔К╓╛╨Ню╝╓╣╓Л╓ч╓╧. цФ©╢╓х╓й╓ц╓ф╓╓╓К╓н╓о index.html ╓х╓╓╓╕л╬а╟╓н╔у╔║╔╓╔К╓г, лэ╪║╓Да╟╫Я╓╜, й╦╫Я╓нб╬╓ниТй╛╓ь╓н╔Й╔С╔╞╓╛╢ч╓ч╓Л╓ф╓╓╓ч╓╧. ╓Ё╓Л╓И╓н╔у╔║╔╓╔К╓о, и╛мв╓к╠Ч╓╦╓фб╬╓н╬Л╫Й╓к╔Ё╔т║╪╓╥╓ф╓Б╧╫╓╓╓ч╓╩╓С. FreeBSD ╓н╔╕╔╖╔ж╔╣╔╓╔х╓н╔ъ╔И║╪╔╣╔╓╔х╓к╓й╓Й╓©╓╓╓г╓╧! ╬╣цн╓╥╓ч╓╥╓©! ╔╕╔╖╔ж╔з║╪╔╦╓Р╔ъ╔И║╪╓╧╓К╓к╓о╓╓╓╞╓д╓╚╓н╪Йцй╓╛╓╒╓Й╓ч╓╧. CVSup ╓Р╩х╓╓╓ч╓╧. CVSup ╓Р╩х╓ц╓ф CVSup ╔╣║╪╔п╓кюэбЁ╓╧╓К╓Ё╓х╓г, ю╟╥а╓╣╓Л╓©╔у╔║╔╓╔К╓Р╪Х╓ц╓ф╓╞╓К╓Ё╓х╓╛╓г╓╜╓ч╓╧. ╔╕╔╖╔ж╔з║╪╔╦╓Р╪Хфю╓╧╓К╬Л╧Г╓о, /usr/share/examples/cvsup/www-supfile ╓к╓╒╓К supfile ╓ннЦ╓Р╩╡╧м╓к╓╥╓ф╓╞╓ю╓╣╓╓. FTP ╓Р╩х╓ц╓ф╔ъ╔И║╪╔Й╔С╔╟╓╥╓ч╓╧. ╓╒╓й╓©╓н╧╔╓╜╓й FTP ╔ъ╔И║╪╔Й╔С╔╟╔д║╪╔К╓Р╩х╓ц╓ф, FTP ╔╣║╪╔п╓кцж╓╓╓ф╓╒╓К web ╔╣╔╓╔х╓н╔Ё╔т║╪╓Р╔ю╔╕╔С╔М║╪╔и╓╧╓К╓Ё╓х╓╛╓г╓╜╓ч╓╧. ╔©╔╕╔С╔М║╪╔и╓оц╠╫Ц╓к ftp://ftp.FreeBSD.org/pub/FreeBSD/FreeBSD-CURRENT/www ╓╚╓И╩о╓А╓ф╓╞╓ю╓╣╓╓. ╓Ё╓нй╦╫Я╓Рб╬╓н╦ю╦Л╓ккщлУ╓╥╓©╓╓╓н╓г╓╧╓╛? йС╫╥╓о╩ый╖╓╗╓ч╓╩╓С╓╛, й╦╫Я╓нкщлУ╓РдС╫п╓╥╓ф╓╞╓ю╓╣╓КйЩ╓к╓о, ╔у╔Й║╪╓н CD, T ╔╥╔Ц╔д╓н╪Йгш╓Д, ╔о╔С╔и╔ж╔ц╔╞╓к╓╒╓К╧в╦╔╪т╟ЛмВ╓ь╓непо©╓Р╧т╓й╓╓╓©╓╓╓х╩в╓╓╓ч╓╧. кщлУ╨Н╤х╓Р╓о╓╦╓А╓Ка╟╓к, &a.doc; ╓ьо╒мМ╓╧╓К╓Х╓╕╓к╓╙╢Й╓╓╓╥╓ч╓╧. кщлУ╨Н╤х╓Р╪Йеа╓╕╓х╓╓╓╕©м╓╛╦╫╓О╓Л╓К╓╚╓Бцн╓Л╓ч╓╩╓С╓╥. ╢Ш╓ккщлУ╔а║╪╔Ю╓╛╓╒╓ц╓ф, ╓╒╓й╓©╓н╩╡╡ц╓Р╢©╥ч╓╥╓ф╓╞╓Л╓К╓╚╓Бцн╓Л╓ч╓╩╓С. ╓╫╓нб╬╓н╬ПйС ╟й╡╪╓н╔к╔Е║╪╔╧╔╟╔К║╪╔в╓к╓о FreeBSD ╔Ф║╪╔╤╓кд╬юэ╢ь╥╦╓н╓╒╓К╣дою╓╛╧т╓О╓Л╓ф╓ч╓╧. comp.unix.bsd.freebsd.announce (moderated) comp.unix.bsd.freebsd.misc comp.unix.bsd.misc Web ╬Е╓н╔Й╔╫║╪╔╧: FreeBSD ╓н╔ш║╪╔Ю╔з║╪╔╦ ╔И╔ц╔в╔х╔ц╔в PC ╓Р╩Щ╓ц╓ф╓╓╓КйЩ╓о, лб╓╕╓Ё╓х╓й╓╞фЭкэ╓н╨ыюН цё╦й╩А╓н Mobile Computing ╓н╔з║╪╔╦ ╓Р╦╚╓ч╓╥╓Г╓╕. SMP (Symmetric MultiProcessing) ╓к╢ь╓╧╓К╬ПйС╓о, SMP ╔╣╔щ║╪╔х╔з║╪╔╦╓Р╓╢мВ╓╞╓ю╓╣╓╓. FreeBSD ╓н╔ч╔К╔а╔А╔г╔ё╔╒╔╒╔в╔Й╔╠║╪╔╥╔Г╔С╓к╢ь╓╧╓К╬ПйС╓о, ╔ч╔К╔а╔А╔г╔ё╔╒╓н╔з║╪╔╦╓Р╓╢мВ╓╞╓ю╓╣╓╓. фц╓к Bt848 ╔с╔г╔╙╔╜╔Ц╔в╔а╔Ц╔а╔ц╔в╓к╤╫лё╓н╓╒╓КйЩ╓о, ╔Й╔С╔╞╓Р╓©╓и╓ц╓ф╓ъ╓ф╓╞╓ю╓╣╓╓. FreeBSD ╔о╔С╔и╔ж╔ц╔╞╓к╓о, ╪б╓к╢╟ю╝╓╣╓Л╓©╩╡╧м©ч╫Я╓н╟ЛмВ╓╛╓╒╓Й, гЦ╓╕╓ы╓╜кэ╓Р╓╣╓╛╓╥╓ф╓╓╓КйЩ╓офи╓Ю╡ацм╓╛╓╒╓Й╓ч╓╧.
╔╓╔С╔╧╔х║╪╔К лУ: &a.jp.iwasaki;, &a.jp.mrt;, 1997 г╞ 11 ╥Н 8 фЭ. FreeBSD ╓РфЧ╪Й╓╧╓К╓к╓о, ╓и╓н╔у╔║╔╓╔К╓Р╔ю╔╕╔С╔М║╪╔и╓╧╓Л╓пни╓╓╓н╓г╓╥╓Г╓╕╓╚? FreeBSD 3.1-RELEASE ╟йа╟╓г╓о, ╔╓╔С╔╧╔х║╪╔К╓н╨щ╓ки╛мв╓й╓н╓о floppies/boot.flp ╓хл╬а╟╓н╓д╓╓╓© ╟Л╓д╓н╔у╔М╔ц╔т║╪╔г╔ё╔╧╔╞╔╓╔А║╪╔╦╓ю╓╠╓г╓╥╓©. ╓╥╓╚╓╥ FreeBSD 3.1-RELEASE ╟й╧ъ, иЩ╧╜╓╓╪ОнЮ╓н╔о║╪╔и╔╕╔╖╔╒╔╣╔щ║╪╔х╓╛╢Пкэ╔╥╔╧╔ф╔Ю╓кди╡ц╓╣╓Л, ╓╫╓н╔╣╔щ║╪╔х╓╛и╛мв╓х╓╧╓Кмфнл╓РйД╓╕╓©╓А, 3.X ╓х 4.X ╓н╥онС╓г╓о©╥╓©╓к, floppies/kernel.flp ╓╙╓Х╓с floppies/mfsroot.flp ╓х╓╓╓╕, фС╓д╓н╔у╔М╔ц╔т║╪╔г╔ё╔╧╔╞╔╓╔А║╪╔╦╓Р╩х╓╕╓Х╓╕╓к╓й╓Й╓ч╓╥╓©. ╓Ё╓Л╓И╓н╔╓╔А║╪╔╦╓Р╔у╔М╔ц╔т║╪╔г╔ё╔╧╔╞╓к╫Я╓╜╧Ч╓Ю╓к╓о, fdimage ╓Д &man.dd.1; ╓х╓╓╓ц╓©╔д║╪╔К╓╛и╛мв╓х╓й╓Й╓ч╓╧. (DOS ╔у╔║╔╓╔К╔╥╔╧╔ф╔Ю╓╚╓И╓н╔╓╔С╔╧╔х║╪╔К╓й╓и╓г) ╓╒╓й╓©╪╚©х╓╛╪Йф╟╓ггшиш╔у╔║╔╓╔К╓Р╔ю╔╕╔С╔М║╪╔и╓╧╓К╬Л╧Г╓к╓о, ╟й╡╪╓нгшиш╔у╔║╔╓╔К╓Р╔ю╔╕╔С╔М║╪╔и╓╧╓К╓Ё╓х╓Р╓╙╓╧╓╧╓А╓╥╓ч╓╧. bin/ manpages/ compat*/ doc/ src/ssys.* ╓Ё╓н╪Й╫Г╓н╢╟а╢╓йюБлю╓х, ╟Лхле╙╓й╔╓╔С╔╧╔х║╪╔К╩Ч╓нлДбЙ╓к╓д╓╓╓ф╓о FreeBSD ╔о╔С╔и╔ж╔ц╔╞╓н╔╓╔С╔╧╔х║╪╔К╓нюА ╓Р╩╡╬х╓╥╓ф╓╞╓ю╓╣╓╓. ╔ж║╪╔х╔у╔М╔ц╔т║╪╔╓╔А║╪╔╦╓╛╟ЛкГ╓н╔у╔М╔ц╔т║╪╔г╔ё╔╧╔╞╓кг╪╓ч╓И╓й╓╓╓ъ╓©╓╓! 3.5 ╔╓╔С╔а(1.44MB)╓н╔у╔М╔ц╔т║╪╔г╔ё╔╧╔╞╓к╓о, 1474560 ╔п╔╓╔х╓н╔г║╪╔©╓РЁйг╪╓г╓╜╓ч╓╧. ╔ж║╪╔х╔╓╔А║╪╔╦╓о╓а╓Г╓╕╓и 1474560 ╔п╔╓╔х╓нбГ╓╜╓╣╓г╓╧. ╔ж║╪╔х╔у╔М╔ц╔т║╪╔г╔ё╔╧╔╞╓Р╫ЮхВ╓╧╓К╨щ╓н╓Х╓╞╓╒╓К╢ж╟Ц╓╓╓к╓о, ╟й╡╪╓н╓Б╓н╓╛╓╒╓Й╓ч╓╧. FTP ╓к╓Х╓ц╓ф╔у╔М╔ц╔т║╪╔╓╔А║╪╔╦╓Р╔ю╔╕╔С╔М║╪╔и╓╧╓К╨щ╓к, ╔п╔╓╔й╔Й(binary)╔Б║╪╔и╓к╓╥╓ф╓╓╓й╓╚╓ц╓©. FTP ╔╞╔И╔╓╔╒╔С╔х╓нцФ╓к╓о, е╬аВ╔Б║╪╔и╓н╔г╔у╔╘╔К╔х╓Р╔╒╔╧╔╜║╪(ascii)╔Б║╪╔и╓к╓╥╓ф, ╔╞╔И╔╓╔╒╔С╔хб╕╔╥╔╧╔ф╔Ю╓н╢╥╫╛╓к╓╒╓╕╓Х╓╕, ╓╧╓ы╓ф╓н╧ткЖ╓нй╦╩З╓Рйя╧╧╓╧╓К╓Б╓н╓╛╓╒╓Й╓ч╓╧. ╓Ё╓н╬Л╧Г╓о╬О╓к, ╔ж║╪╔х╔╓╔А║╪╔╦╓╛╡У╓Л╓©╓Б╓н╓к╓й╓Й╓ч╓╧. ╔ю╔╕╔С╔М║╪╔и╓╥╓©╔ж║╪╔х╔╓╔А║╪╔╦╓н╔╣╔╓╔╨╓Р╔а╔╖╔ц╔╞╓╥╓ф╓╞╓ю╓╣╓╓. ╔╣║╪╔п╬Е╓н╓Б╓н╓хю╣Ён╓к╟Лцв╓╥╓й╓╠╓Л╓п, ╔ю╔╕╔С╔М║╪╔и╓н╫ХмЩ╓Р╣©╓╓╓ч╓╥╓Г╓╕. ╓Ё╓Л╓Р╡СхР╓╧╓К╓к╓о, ╔╣║╪╔п╓кюэбЁ╓╥╓ф╔╓╔А║╪╔╦╓н╔ю╔╕╔С╔М║╪╔и╓РЁ╚╩о╓╧╓Ка╟╓к FTP ╓н╔Ё╔ч╔С╔и╔в╔М╔С╔в╔х╓г binary ╓х╔©╔╓╔в╓╥╓ч╓╧. ╔ж║╪╔х╔╓╔А║╪╔╦╓Р DOS ╓н copy ╔Ё╔ч╔С╔и(╓ч╓©╓о GUI ╓нф╠еЫ╓н╔д║╪╔К)╓г╔у╔М╔ц╔т║╪╔г╔ё╔╧╔╞╓ье╬аВ╓╥╓©. copy ╓н╓Х╓╕╓й╔в╔М╔╟╔И╔Ю╓о, д╬юэ╣╞ф╟╓╧╓К╓Х╓╕╓к╨Ню╝╓╣╓Л╓©╔ж║╪╔х╔╓╔А║╪╔╦╓Р╓╕╓ч╓╞╫ХмЩ╓г╓╜╓ч╓╩╓С. ╔╓╔А║╪╔╦╓к╓о╔у╔М╔ц╔т║╪╔г╔ё╔╧╔╞╓н╢╟а╢╓йцФ©х╓╛╔х╔И╔ц╔╞ц╠╟л╓гЁйг╪╓╣╓Л╓ф╓╙╓Й, ╔у╔М╔ц╔т║╪╔г╔ё╔╧╔╞╬Е╓кдл╬О╓н╔у╔║╔╓╔К╓х╓╥╓ф Ёйг╪╓╣╓Л╓К╓Х╓╕╓кашдЙ╓╣╓Л╓ф╓╓╓К╓О╓╠╓г╓о╓╒╓Й╓ч╓╩╓С. FreeBSD ╓н╔╓╔С╔╧╔х║╪╔К╓к╣╜╫р╓╣╓Л╓ф╓╓╓К╓Х╓╕╓к, дЦ╔Л╔ы╔К╓н╔д║╪╔К(╓©╓х╓╗╓п fdimage ╓Д rawrite) ╓Р╩хмя╓╥╓ф╓╫╓н╓ч╓ч╓н(raw)╓н╬Убж╓г╔у╔М╔ц╔т║╪╔г╔ё╔╧╔╞╓к е╬аВ╓╧╓Ки╛мв╓╛╓╒╓Й╓ч╓╧. FreeBSD ╓н╔╓╔С╔╧╔х║╪╔К╓к╓д╓╓╓ф╓нюБлю╫Я╓о╓и╓Ё╓к╓╒╓Й╓ч╓╧╓╚? ╔╓╔С╔╧╔х║╪╔К╓нюБлю╫Я╓оFreeBSD ╔о╔С╔и╔ж╔ц╔╞╓н╔╓╔С╔╧╔х║╪╔К╓н╬о╓к╓╒╓Й╓ч╓╧. FreeBSD ╓Рф╟╨Н╓╣╓╩╓К╓к╓о╡©╓╛и╛мв╓г╓╧╓╚? 386 ╟й╬Е╓н PC, 5MB ╟й╬Е╓н RAM, ╓╫╓╥╓ф╨гдЦ 60MB ╓н╔о║╪╔и╔г╔ё╔╧╔╞мфнл╓╛и╛мв╓х╓й╓Й╓ч╓╧. ╔М║╪╔╗╔С╔и╓н MDA ╔╚║╪╔и╓г╓Бф╟╨Н╓╥╓ч╓╧╓╛, X11R6 ╓Р╩х╓╕╓к╓о VGA ╓╚╓╫╓Л╟й╬Е╓н╔с╔г╔╙╔╚║╪╔и╓╛и╛мв╓х╓й╓Й╓ч╓╧. ╓Б╓╢мВ╓╞╓ю╓╣╓╓. 4 MB ╓╥╓╚╔А╔Б╔Й╓╛╓й╓╓╓н╓г╓╧╓╛, ╔╓╔С╔╧╔х║╪╔К╓г╓╜╓ч╓╧╓╚? 4MB ╓н╔╥╔╧╔ф╔Ю╓к╔╓╔С╔╧╔х║╪╔К╓г╓╜╓©╨г╦Е╓н FreeBSD ╓о FreeBSD 2.1.7 ╓г╓╥╓©. 2.2 ╓Р╢ч╓Ю╓Х╓Й©╥╓╥╓╓╔п║╪╔╦╔Г╔С╓н FreeBSD ╓о©╥╣╛╓н╔╓╔С╔╧╔х║╪╔К╓к╨гдЦ 5MB ╓ои╛мв╓к╓й╓Й╓ч╓╧. ╓©╓ю╓╥, ╔╓╔С╔╧╔х║╪╔К╔в╔М╔╟╔И╔Ю╓╛ 4MB ╓г╓оф╟╨Н╓╥╓й╓╓╓ю╓╠╓г, 3.0 ╓Р╢ч╓Ю FreeBSD ╓н╓╧╓ы╓ф╓н╔п║╪╔╦╔Г╔С╓о 4MB ╓н RAM ╓гф╟╨Н╡дг╫╓г╓╧. ╔╓╔С╔╧╔х║╪╔К╓╧╓К╩Ч╓ю╓╠╓╣╓И╓к 4MB ди╡ц╓╥╓ф╓╙╓╜, ╔╥╔╧╔ф╔Ю╓╛╔╩╔ц╔х╔╒╔ц╔в╓╣╓Л╓фф╟╨Н╓╧╓К╓Х╓╕╓к╓й╓ц╓©╦Е, ╓ч╓© 4MB╓Р╪Х╓Й╫п╓╥╓ф╦╣╓клА╓╧╓Ё╓х╓Б╓г╓╜╓ч╓╧. ╓╒╓К╓╓╓о 4MB ╓Х╓Йб©╓╞╔А╔Б╔Й╓РеК╨э╓╥╓©╔╥╔╧╔ф╔Ю╓к╔г╔ё╔╧╔╞╓Р╩Щ╓ц╓ф╓╓╓╜, ╓╫╓н╔ч╔╥╔С╓г╔╓╔С╔╧╔х║╪╔К╓╥╓©╦Е╓к╔г╔ё╔╧╔╞╓РлА╓╧╓Ё╓х╓Б╓г╓╜╓ч╓╧. ╓ч╓©, FreeBSD 2.1.7 ╓г╓╒╓ц╓ф╓Б, 4MB ╓г╓о╔╓╔С╔╧╔х║╪╔К╓г╓╜╓й╓╓╬Л╧Г╓╛╓╒╓Й╓ч╓╧. ю╣Ён╓к╓о, 640KB ╓н╔ы║╪╔╧╔А╔Б╔Й + 3MB ╓нЁхд╔╔А╔Б╔Й╓г╓о, ╔╓╔С╔╧╔х║╪╔К╓о╓г╓╜╓ч╓╩╓С. ╓Б╓╥╔ч╔╥╔С╓н╔ч╔╤║╪╔э║╪╔и╓╛ 640KB ╓╚╓И 1MB ╓ннн╟Х╓г║ж╪╨╓О╓Л╓©║в╔А╔Б╔Й╓Р╨ф╔ч╔ц╔в╓г╓╜╓К╬Л╧Г╓о, FreeBSD 2.1.7 ╓Р╔╓╔С╔╧╔х║╪╔К╓г╓╜╓К╓╚╓Б╓╥╓Л╓ч╓╩╓С. BIOS ╓н╔╩╔ц╔х╔╒╔ц╔в╡Хлл╓г, remap ╓н╔╙╔в╔╥╔Г╔С╓Рц╣╓╥╓фм╜╦З(enable)╓к╓╥╓ф╓ъ╓ф╓╞╓ю╓╣╓╓. ╓ч╓©, ROM shadowing ╓Рл╣╦З(disable)╓к╓╧╓Ки╛мв╓Б╓╒╓Й╓ч╓╧. ╢йц╠╓й╓Д╓ЙйЩ╓х╓╥╓ф╓о, ╔╓╔С╔╧╔х║╪╔К╓╧╓К╩Ч╓ю╓╠╓╒╓х 4MB ди╡ц╓╥╓ф╓╙╓╞йЩк║╓╛╓╒╓Й╓ч╓╧. и╛мв╓й╔╙╔в╔╥╔Г╔С╓ю╓╠╓Ра╙бР╓╥╓ф╔╚╔╧╔©╔Ю╔╚║╪╔м╔К╓Р╧╫цш╓╥, ╓ч╓© 4MB ╓Р╪Х╓Й╫п╓╥╓ф╓Б╓х╓клА╓╩╓п╓╓╓╓╓н╓г╓╧. ╓ч╓©, 2.0.5 ╓Р╔╓╔С╔╧╔х║╪╔К╓╥╓ф, ╓╫╓Л╓╚╓И 2.1.7 ╓н╔╓╔С╔╧╔х║╪╔И╓н upgrade ╔╙╔в╔╥╔Г╔С╓г╔╥╔╧╔ф╔Ю╓Р 2.1.7 ╓ь╔╒╔ц╔в╔╟╔Л║╪╔и ╓╧╓К╓х╓╓╓╕╓Д╓ЙйЩ╓Б╓╒╓Й╓ч╓╧. ╔╓╔С╔╧╔х║╪╔К╓╥╓©╓╒╓х╓г╔╚╔╧╔©╔Ю╔╚║╪╔м╔К╓н╧╫цш╓Р╓╥╓©╬Л╧Г╓к╓о, 4MB ╓г╓Бф╟╨Н╓╥╓ч╓╧. 2MB╓г╣╞ф╟╓кю╝╦Ы╓╥╓©©м╓Б╓╓╓ч╓╧(╓г╓Б╓╫╓н╔╥╔╧╔ф╔Ю╓о, ╓ш╓х╓С╓и╩х╓╓╓Б╓н╓к╓й╓Й╓ч╓╩╓С╓г╓╥╓© :-)). ╪╚й╛мя╓н╔╓╔С╔╧╔х║╪╔К╔у╔М╔ц╔т║╪╓Р╨Н╓К╓к╓о? ╦╫╨ъ╓о╔╚╔╧╔©╔Ю╔╓╔С╔╧╔х║╪╔К╔у╔М╔ц╔т║╪╔г╔ё╔╧╔╞║ж╓ю╓╠║в╓Р╨Н╓КйЩк║╓о╓╒╓Й╓ч╓╩╓С. ╔╚╔╧╔©╔Ю╔╓╔С╔╧╔х║╪╔К╔у╔М╔ц╔т║╪╔г╔ё╔╧╔╞╔╓╔А║╪╔╦╓Р╢ч╓Ю, release ╢д╤╜а╢бн╓Р©╥╓©╓к╨Н╓Ки╛мв╓╛╓╒╓Й╓ч╓╧. ╔╚╔╧╔©╔Ю╓н release ╢д╤╜╓Р╓д╓╞╓К╓к╓о, ╓Ё╓Ё╓н╩ь╪╗╓к╓╥╓©╓╛╓ц╓ф╓╞╓ю╓╣╓╓. ╪╚й╛╓н PC ╓кйё©Т╓н╔╙╔з╔Л║╪╔ф╔ё╔С╔╟╔╥╔╧╔ф╔Ю╓РфЧ╓Л╓К╓к╓о? multi-OS ╓н╔з║╪╔╦╓Р╓╢мВ╓╞╓ю╓╣╓╓. ф╠╓╦╔ч╔╥╔С╓г Windows 95/98 ╓х╤╕б╦╓г╓╜╓ч╓╧╓╚? ╓ч╓╨ Windows 95/98 ╓Р╔╓╔С╔╧╔х║╪╔К╓╥╓ф╓╚╓И, ╓╫╓н╓╒╓х╓г FreeBSD ╓Р╔╓╔С╔╧╔х║╪╔К╓╥╓ф╓╞╓ю╓╣╓╓. FreeBSD ╓н╔ж║╪╔х╔ч╔м║╪╔╦╔Ц╓╛ Win95 ╓х FreeBSD ╓н╔ж║╪╔х╢имЩ╓Р╓╥╓ф╓╞╓Л╓К╓Х╓╕╓к╓й╓Й╓ч╓╧. Windows 95/98 ╓Р╦Е╓к╔╓╔С╔╧╔х║╪╔К╓╥╓©╬Л╧Г╓о╓р╓и╓╓╓Ё╓х╓к, лД╓╓╧Г╓О╓╩╓К╓Ё╓х╓Б╓й╓╞╔ж║╪╔х╔ч╔м║╪╔╦╔Ц╓Р╬Е╫Я╓╜╓╥╓ф╓╥╓ч╓╓╓ч╓╧. ╓╫╓╕╓й╓ц╓ф╓╥╓ч╓ц╓©╬Л╧Г╓о╪║╓нюА╓Р╓╢мВ╓╞╓ю╓╣╓╓. Windows 95/98 ╓╛╔ж║╪╔х╔ч╔м║╪╔╦╔Ц╓Рды╓╥╓а╓Ц╓ц╓©! ╓и╓╕╓Д╓ц╓флА╓╧╓н? ╔ж║╪╔х╔ч╔м║╪╔╦╔Ц╓н╨ф╔╓╔С╔╧╔х║╪╔К╓нйЩк║╓х╓╥╓ф, FreeBSD ╓г╓о╟й╡╪╓к╪╗╓╧╩╟дл╓Й╓нйЩк║╓╛мя╟у╓╣╓Л╓ф╓╓╓ч╓╧. DOS ╓Р╣╞ф╟╓╥, FreeBSD ╓нгшишй╙╓нцФ╓к╓╒╓К tools/ ╔г╔ё╔Л╔╞╔х╔Й╓ь╟эф╟╓╥, bootinst.exe ╓Рц╣╓╥╓ф╓╞╓ю╓╣╓╓. ╓╫╓╥╓ф╪║╓н╓Х╓╕╓к╪б╧т╓╥╓ч╓╧. ...\TOOLS> bootinst.exe boot.bin ╓Ё╓╕╓╧╓К╓Ё╓х╓г, ╔ж║╪╔х╔ч╔м║╪╔╦╔Ц╓╛╨ф╔╓╔С╔╧╔х║╪╔К╓╣╓Л╓ч╓╧. FreeBSD ╓н╔ж║╪╔х╔у╔М╔ц╔т║╪╔г╔ё╔╧╔╞╓╚╓И╣╞ф╟╓╥, ║ж╔╚╔╧╔©╔Ю║в╔╓╔С╔╧╔х║╪╔К╔А╔к╔Е║╪╓Ра╙бР╓╥, бЁ╓╓╓ф║ж╔я║╪╔ф╔ё╔╥╔Г╔С║в╓Ра╙бР╓╥╓ч╓╧. ╔ж║╪╔х╔ч╔м║╪╔╦╔Ц╓╛╔╓╔С╔╧╔х║╪╔К╓╣╓Л╓ф╓╓╓©╔и╔И╔╓╔ж(б©й╛╨г╫И╓н╓Б╓н)╓Ра╙бР╓╥, ╔я║╪╔ф╔ё╔╥╔Г╔С╔╗╔г╔ё╔©╓к╓©╓и╓ЙцЕ╓╓╓©╓И, (╡©╓Бйя╧╧╓╩╓╨)╓╫╓н╓ч╓ч (W)rite ╓Р╩ьдЙ╓╥╓ч╓╧. Ёнг╖╓н╔А╔ц╔╩║╪╔╦╓╛╫п╓ч╓╧╓н╓г║ж╓о╓╓(Y)║в╓хеЗ╓╗, ╔ж║╪╔х╔ч╔м║╪╔╦╔Ца╙бР╓н╡Хлл╓гЁн╪б╓к Boot Manager ╓Ра╙бР╓╥╓ч╓╧. ╓Ё╓Л╓г╔ж║╪╔х╔ч╔м║╪╔╦╔Ц╓╛╔г╔ё╔╧╔╞╓к╨ф╓с╫Я╓╜╧Ч╓ч╓Л╓ч╓╧. ╔╓╔С╔╧╔х║╪╔К╔А╔к╔Е║╪╓╚╓Их╢╓╠╓ф╨ф╣╞ф╟╓╧╓К╓х, ╔о║╪╔и╔г╔ё╔╧╔╞╓о╦╣дл╓Й╓к╓й╓Й╓ч╓╧. FreeBSD ╣╞ф╟╔у╔М╔ц╔т║╪ (╓Б╓╥╓╞╓о CD-ROM) ╓╚╓И╣╞ф╟╓╥, Fixit ╔А╔к╔Е║╪╓Ра╙бР╓╥╓ч╓╧. Fixit ╔у╔М╔ц╔т║╪╓╚ CD-ROM #2 (live ╔у╔║╔╓╔К╔╥╔╧╔ф╔Ю╔╙╔в╔╥╔Г╔С) ╓н╧╔╓╜╓ййЩ╓Р╓Ра╙бР╓╥╓ф fixit ╔╥╔╖╔К╓кфЧ╓Й╓ч╓╧. ╓╫╓╥╓ф, ╪║╓н╔Ё╔ч╔С╔и╓Р╪б╧т╓╥╓ф╓╞╓ю╓╣╓╓. Fixit# fdisk -B -b /boot/boot0 ╣╞ф╟╔г╔п╔╓╔╧ ╣╞ф╟╔г╔п╔╓╔╧ ╓ниТй╛╓о, ╓©╓х╓╗╓п ad0 (╟Лхжлэ╓н IDE ╔г╔ё╔╧╔╞), ad4 (╔╩╔╚╔С╔ю╔Й IDE ╔Ё╔С╔х╔М║╪╔И╓н╟Лхжлэ╓н IDE ╔г╔ё╔╧╔╞), da0 (╟Лхжлэ╓н SCSI ╔г╔ё╔╧╔╞) ╓й╓и╓х╓╓╓ц╓©, ╪б╨щ╓н╣╞ф╟╔г╔п╔╓╔╧╓Ри╫╓╥╓ф╓╓╓ч╓╧. IBM Thinkpad ╓н A, T, X ╔╥╔Й║╪╔╨╓н╓╓╓╨╓Л╓╚╓Р╩Щ╓ц╓ф╓╓╓ч╓╧. FreeBSD ╓Р╔╓╔С╔╧╔х║╪╔К╓╥╓©╓И╣╞ф╟╓╥╓й╓╞╓й╓ц╓ф╓╥╓ч╓╓╓ч╓╥╓©. ╓и╓╕╓╧╓Л╓п╓╓╓╓╓г╓╧╓╚? ╓Ё╓Л╓И╓н╔ч╔╥╔С╓к╩х╓О╓Л╓ф╓╓╓К╫И╢Э╓н╔Й╔с╔╦╔Г╔С╓н IBM BIOS ╓к╓о╔п╔╟╓╛╓╒╓Й, FreeBSD ╓н╔я║╪╔ф╔ё╔╥╔Г╔С╓Р╔г╔ё╔╧╔╞╔╣╔╧╔з╔С╔имя╓н FAT нн╟Х╓ю╓х╦Мг╖╓╥╓ч╓╧. ╓╫╓н╓©╓А, BIOS ╓╛ FreeBSD ╓н╔я║╪╔ф╔ё╔╥╔Г╔С╓Р ╦║╫п╓╥╓©╓х╓Ё╓М╓г╔╥╔╧╔ф╔Ю╓╛╔о╔С╔╟ (дД╩ъ) ╓╥╓ф╓╥╓ч╓╓╓ч╓╧. IBM ╓Ё╓Л╓о Keith Frechette kfrechet@us.ibm.com ╓╚╓И╓н╔А║╪╔К╓к╓Х╓Й╓ч╓╧. ╓к╓Х╓Л╓п, ╟й╡╪╓н╔Б╔г╔К/BIOS ╔Й╔Й║╪╔╧хж╧Ф╓к╓о╫╓ю╣╓╛╢ч╓ч╓Л╓ф╓╓╓ч╓╧. ╔Б╔г╔К BIOS ╔Й╔с╔╦╔Г╔Схж╧Ф T20 IYET49WW ╟й╧ъ T21 KZET22WW ╟й╧ъ A20p IVET62WW ╟й╧ъ A20m IWET54WW ╟й╧ъ A21p KYET27WW ╟й╧ъ A21m KXET24WW ╟й╧ъ A21e KUET30WW ╓Б╓╥лДбЙ╓н╓╒╓К BIOS ╓Р╩х╓ц╓ф╓╓╓ф╔╒╔ц╔в╔╟╔Л║╪╔и╓╛а╙╓ы╓й╓╓╬Л╧Г, FreeBSD ╓Р╔╓╔С╔╧╔х║╪╔К╓╥╓ф╓╚╓И FreeBSD ╓╛╩х╓ц╓ф╓╓╓К╔я║╪╔ф╔ё╔╥╔Г╔С ID ╓Рйя╧╧╓╥, йя╧╧╓╣╓Л╓©╔я║╪╔ф╔ё╔╥╔Г╔С ID ╓Рю╣╓╥╓╞╟╥╓╕╓Ё╓х╓н╓г╓╜╓К ©╥╓╥╓╓╣╞ф╟╔ж╔М╔ц╔╞╓Р╔╓╔С╔╧╔х║╪╔К╓╧╓К╓Ё╓х╓г╡Р╥Х╓╧╓К╓Ё╓х╓╛╓г╓╜╓ч╓╧. ╓╫╓Л╓к╓о╓ч╓╨, ╔╩╔К╔у╔ф╔╧╔х╡Хлл╓Рдл╡А╓╧╓К╬Убж╓к╓ч╓г╔ч╔╥╔С╓Р╡СиЭ╓╣╓╩╓Ки╛мв╓╛╓╒╓Й╓ч╓╧. ╓╫╓н╓©╓А╓к╓о, ╔ч╔╥╔С╓╛╔в╔И╔╓╔ч╔Й╔г╔ё╔╧╔╞╓╚╓И FreeBSD ╔я║╪╔ф╔ё╔╥╔Г╔С╓Р╦╚╓д╓╠╓й╓╓╓Х╓╕╓к╓╥╓ф╣╞ф╟╓╥╓й╓╠╓Л╓п╓й╓Й╓ч╓╩╓С. ╓©╓х╓╗╓п, ╟Леы╔о║╪╔и╔г╔ё╔╧╔╞╓РЁ╟╓╥╓ф╓╥╓ч╓ц╓ф, ╓╫╓н╔г╔ё╔╧╔╞╓Р╦е╓╓ ThinkPad (ThinkPad 600 ╓й╓и) ╓Д╔г╔╧╔╞╔х╔ц╔в PC ╓ке╛юз╓ййя╢╧╔╠║╪╔ж╔К╓гюэбЁ╓╥╓ч╓╧. ╓╫╓н╦Е FreeBSD ╓н╔я║╪╔ф╔ё╔╥╔Г╔С╓Р╨О╫Э╓╥, ╔о║╪╔и╔г╔ё╔╧╔╞╓Р╦╣╓н ThinkPad ╓клА╓╥╓ч╓╧. ╓Ё╓╕╓╧╓К╓Ё╓х╓г ThinkPad ╓о╣╞ф╟╡дг╫╓й╬Убж╓клА╓К╓о╓╨╓г╓╧. ╔ч╔╥╔С╓╛╓а╓Ц╓С╓хф╟╓╞╓Х╓╕╓к╓й╓ц╓©╓И, ╟й╡╪╓ниЭ╣Л╪Й╫Г╓к╫╬╓ц╓ф FreeBSD ╓Р╔╓╔С╔╧╔х║╪╔К╓╧╓К╓Ё╓х╓╛╓г╓╜╓ч╓╧. http://people.freebsd.org/~bmah/ThinkPad/ ╓╚╓И boot1 ╓х boot2 ╓Р╔ю╔╕╔С╔М║╪╔и╓╥╓ч╓╧. ╓Ё╓Л╓И╓н╔у╔║╔╓╔К╓о, ╓╒╓х╓ги╛мв╓к╓й╓ц╓©╩Ч, ╪Х╓Й╫п╓╩╓К╬Л╫Й╓кцж╓╓╓ф╓╙╓╜╓ч╓╧. ThinkPad ╓киАдл╓к FreeBSD ╓Р╔╓╔С╔╧╔х║╪╔К╓╥╓ч╓╧. ╓©╓ю╓╥, Dangerously Dedicated ╔Б║╪╔и╓Р╩х╓ц╓ф╓о╓╓╓╠╓ч╓╩╓С. ╓ч╓©, ╔╓╔С╔╧╔х║╪╔К╓╛╫╙╓О╓ц╓ф╓Б╨ф╣╞ф╟╓╥╓ф╓о╓╓╓╠╓ч╓╩╓С. ╤ш╣ч╔ш╔М╔╟╔И╔у╔ё╔ц╔╞╔╥╔╖╔К (Emergency Holographic Shell) (ALTF4) ╓кюз╓Йбь╓╗╓К╓╚, fixit ╔╥╔╖╔К╓Р╣╞ф╟╓╥╓ч╓╧. &man.fdisk.8; ╓Р╩х╓ц╓ф FreeBSD ╓н╔я║╪╔ф╔ё╔╥╔Г╔С ID ╓Р 165 ╓╚╓И 166 ╓к йя╧╧╓╥╓ч╓╧ (╓Ё╓Л╓о OpenBSD ╓г╩х╓О╓Л╓ф╓╓╓К╓Б╓н╓г╓╧). boot1 ╓х boot2 ╓н╔у╔║╔╓╔К╓Р╔М║╪╔╚╔К╔у╔║╔╓╔К╔╥╔╧╔ф╔Ю╓к╩Щ╓ц╓фмХ╓ч╓╧. &man.disklabel.8; ╓Р╩х╓ц╓ф boot1 ╓х boot2 ╓Р FreeBSD ╓н╔╧╔И╔╓╔╧╓к╫Я╓╜╧Ч╓ъ╓ч╓╧. &prompt.root; disklabel -B -b boot1 -s boot2 ad0sn n ╓о, ╓╒╓й╓©╓╛ FreeBSD ╓Р╔╓╔С╔╧╔х║╪╔К╓╥╓©╔╧╔И╔╓╔╧╓нхж╧Ф╓г╓╧. ╨ф╣╞ф╟╓╥╓ч╓╧. ╣╞ф╟╔в╔М╔С╔в╔х╓о OpenBSD ╓х╪╗╓╥╓ч╓╧╓╛, ╪б╨щ╓к╓о, ╓╫╓Л╓г FreeBSD ╓╛╣╞ф╟╓╥╓ч╓╧. ╓Ё╓нйЩк║╓г FreeBSD ╓х OpenBSD ╓Р╔г╔Е╔╒╔К╔ж║╪╔х╓╧╓КйЩк║╓о, фи╪т╓ь╓ннЩ╫╛лДбЙ╓х╓╥╓ч╓╥╓Г╓╕. итни╔ж╔М╔ц╔╞╓н╓╒╓К╔г╔ё╔╧╔╞╓к╔╓╔С╔╧╔х║╪╔К╓г╓╜╓ч╓╧╓╚? FreeBSD 3.0 ╟йа╟╓н╔╥╔╧╔ф╔Ю╓г╓о, итни╔ж╔М╔ц╔╞╓Р╪╚ф╟е╙╓к╨ф╔ч╔ц╔т╔С╔╟╓╧╓К bad144 ╓х╓╓╓╕╔Ф║╪╔ф╔ё╔Й╔ф╔ё╓╛╢ч╓ч╓Л╓ф╓╓╓ч╓╥╓©╓╛, ╦╫╨ъ╓н IDE ╔и╔И╔╓╔ж╓о╔и╔И╔╓╔ж╪╚©х╓╛╓Ё╓н╣║г╫╓РхВ╓╗╓ф╓╓╓К╓©╓А, bad144 ╓о FreeBSD ╔╫║╪╔╧╔д╔Й║╪╓╚╓И╨О╫Э╓╣╓Л╓ч╓╥╓©. FreeBSD 3.0 ╓╚╓╫╓Л╟й╧ъ╓Р╔╓╔С╔╧╔х║╪╔К╓╥╓©╓╓╓х╩в╓ц╓ф╓╓╓К╓й╓И, хФЁсе╙©╥╓╥╓╓╔г╔ё╔╧╔╞╔и╔И╔╓╔ж╓Р╧ьфЧ╓╧╓К╓Ё╓х╓Р╤╞╓╞╓╙╓╧╓╧╓А╓╥╓ч╓╧. ©╥╓╥╓╓╔и╔И╔╓╔ж╓Р╧ьфЧ╓╧╓К╣╓╓╛╓й╓╠╓Л╓п, FreeBSD 2.x ╓РмЬмя╓╧╓К╓ы╓╜╓г╓╧. ╦╫╨ъ╓н IDE ╔и╔И╔╓╔ж╓гитни╔ж╔М╔ц╔╞╓к╓Х╓К╔╗╔И║╪╓╛х╞ю╦╓╥╓©╬Л╧Г, ╓ч╓Б╓й╓╞╔и╔И╔╓╔ж╓╛╦н╬Ц╓╧╓К╡дг╫ю╜╓╛╓╒╓Й╓ч╓╧ (╓╫╓Л╓о╓╫╓н╔и╔И╔╓╔жфБб╒╓н╨ф╔ч╔ц╔т╔С╔╟╣║г╫╓г╓о итни╔ж╔М╔ц╔╞╓╛╫╓ю╣╓г╓╜╓й╓╞╓й╓ц╓©╓х╓╓╓╕╓Ё╓х╓г╓╒╓Й, ╔г╔ё╔╧╔╞╓╛╓р╓и╓╞╡У╓Л╓ф╓╓╓К╓Ё╓х╓Р╟улё╓╥╓ч╓╧). ©╥╓╥╓╓╔о║╪╔и╔г╔ё╔╧╔╞╔и╔И╔╓╔ж╓к╦Р╢╧╓╥╓ч╓╥╓Г╓╕. итни╔ж╔М╔ц╔╞╓н╓╒╓К SCSI ╔и╔И╔╓╔ж╓н╬Л╧Г╓о, ╓Ё╓н╡СеЗ╓Р╩╡╬х╓╥╓ф╓╞╓ю╓╣╓╓. ╔╓╔С╔╧╔х║╪╔И╓╚╓И╣╞ф╟╓╥╓©╓Ийя╓й╓Ё╓х╓к╓й╓Й╓ч╓╥╓©! ╔╓╔С╔╧╔х║╪╔И╓╚╓И╣╞ф╟╓╥╓Х╓╕╓х╓╥╓©╓х╓╜╓к, ╔ч╔╥╔С╓╛╦г╓ч╓ц╓ф╓╥ ╓ч╓╕╓х╓╚╪╚аЁ╓х╨ф╣╞ф╟╓╥╓ф╓╥╓ч╓╕╓х╓╓╓ц╓©╦╫╬щ╓г╓╒╓Л╓п, ╪║╓н╩╟╓д╓н╧Юлэ╓РЁнг╖╓╥╓ф╓╞╓ю╓╣╓╓. ©╥ий╓н, ╔у╔╘║╪╔ч╔ц╔х╓╥╓©╓ф╓н, ╔╗╔И║╪╓н╓й╓╓╔у╔М╔ц╔т║╪╔г╔ё╔╧╔╞╓Р╩х╓ц╓ф╓╓╓ч╓╧╓╚? (╩╟г╞╢ж╓Б╔ы╔ц╔и╓н╡╪╓кйЭцж╓╣╓Л╓ф╓╓╓©╩╗╩О╓ниуо©╓ъ╓©╓╓╓й╓Д╓д╓г╓о╓й╓╞╓ф, гЦ╓ц╓ф╓╜╓©╓п╓╚╓Й╓н©╥ий╓Р╩х╓ц╓ф╓╞╓ю╓╣╓╓) ╔у╔М╔ц╔т║╪╔╓╔А║╪╔╦╓Р╔п╔╓╔й╔Й╔Б║╪╔и╓г╔ю╔╕╔С╔М║╪╔и╓╥╓ч╓╥╓©╓╚? (╨╓╓ц╓©╢И╓Р╓╥╓й╓╓╓г╓╞╓ю╓╣╓╓. ╩Д╓©╓а╓нцФ╓г╟Лхжм╔╫╗╓й©м╓г╓╣╓╗, ╬╞╓й╓╞╓х╓Б╟Л╡С╓о╔п╔╓╔й╔Й╔у╔║╔╓╔К╓Р ASCII ╔Б║╪╔и╓г╩в╓╓╓╛╓╠╓╨╔ю╔╕╔С╔М║╪╔и╓╥╓©╓Ё╓х╓╛╓╒╓К╓н╓г╓╧!) Windows95 ╓╒╓К╓╓╓о Windows98 ╓Р╩хмя╓╥╓ф╓╓╓К╓й╓И, ╓╒╓Й╓н╓ч╓ч╓нкэй╙╓н DOS ╓г fdimage ╓╚ rawrite ╓Р╪б╧т╓╥╓ч╓╥╓©╓╚? ╓Ё╓Л╓И╓н OS ╓о╔г╔ё╔╧╔╞╨Ню╝╔в╔М╔╟╔И╔Ю╓н╓Х╓╕╓й, ╔о║╪╔и╔╕╔╖╔╒╓кд╬юэ╫Я╓╜╧Ч╓ъ╓Р╧т╓й╓╕╔в╔М╔╟╔И╔Ю╓к╢Ё╬д╓╧╓К╡дг╫ю╜╓╛╓╒╓Й╓ч╓╧. GUI ╓нцФ╓н DOS ╔╥╔╖╔КфБиТ╓гф╟╨Н╓╥╓ф╓╓╓К╬Л╧Г╓г╓Б, ╓Ё╓нлДбЙ╓ох╞ю╦╓╥╓ч╓╧. ╓ч╓©, Netscape ╓г╔ж║╪╔х╔╓╔А║╪╔╦╓Р╔ю╔╕╔С╔М║╪╔и╓╧╓К╬Л╧Г╓БлДбЙ╓╛╓╒╓К╓Ё╓х╓╛йС╧П╓╣╓Л╓ф╓╓╓ч╓╧╓н╓г, ╓г╓╜╓Л╓пйл╓н FTP ╔╞╔И╔╓╔╒╔С╔х╓Р╩х╓╕╓н╓╛╓Х╓╓╓г╓╥╓Г╓╕. APAPI CD-ROM ╓╚╓И╣╞ф╟╓╥╓©╓н╓г╓╧╓╛, ╔╓╔С╔╧╔х║╪╔К╔в╔М╔╟╔И╔Ю╓о CD-ROM ╓╛╦╚╓д╓╚╓Й╓ч╓╩╓С╓х╦ю╓ц╓ф╓╜╓ч╓╧. CD-ROM ╓о╓и╓Ё╓к╧т╓ц╓ф╓╥╓ч╓ц╓©╓н╓г╓╥╓Г╓╕╓╚? ╓Ё╓нлДбЙ╓одл╬О, CD-ROM ╔и╔И╔╓╔ж╓нюъдЙ╔ъ╔╧╓к╓Х╓ц╓фх╞ю╦╓╥╓ч╓╧. бГиТй╛╓н PC ╓н CD-ROM ╔и╔И╔╓╔ж╓о, ╔╩╔╚╔С╔ю╔Йб╕╓н IDE ╔Ё╔С╔х╔М║╪╔И╓н╔╧╔Л║╪╔ж╔г╔п╔╓╔╧╓х╓╥╓фюэбЁ╓╣╓Л, ╔ч╔╧╔©╔г╔п╔╓╔╧╓╛╓й╓╓╬Убж╓г╫п╡ы╓╣╓Л╓ф╓╓╓ч╓╧. ╓Ё╓нюэбЁйЩк║╓о ATAPI ╣╛Ёй╟Цх©╓й╓н╓г, Windows ╓о╣╛Ёй╓и╓╙╓Й╓кф╟╓╓╓©╓Й, ф╟╓╚╓й╓╚╓ц╓©╓Й╓╥╓ч╓╧╓╛, BIOS ╓о╣╞ф╟╩Ч╓к╣╛Ёй╟Цх©╓Рл╣╩К╓╥╓ч╓╧. ╓╫╓н╓©╓А BIOS ╓о╣╞ф╟╩Ч╓к CD-ROM ╓Р╦╚╓д╓╠╓И╓Л╓ч╓╧╓╛, FreeBSD ╓о CD-ROM ╓Р╦╚╓д╓╠╓И╓Л╓╨, ╔╓╔С╔╧╔х║╪╔К╓Р╢╟н╩╓г╓╜╓й╓╓╓н╓г╓╧. CD-ROM ╓╛ юэбЁ╓╣╓Л╓ф╓╓╓К IDE ╔Ё╔С╔х╔М║╪╔И╓н╔ч╔╧╔©╔г╔п╔╓╔╧╓х╓й╓К╓Х╓╕╓кюъдЙ╓╧╓К╓╚, ╓Б╓╥╓╞╓о╔ч╔╧╔©, ╔╧╔Л║╪╔ж╓нн╬йЩ╓к╔г╔п╔╓╔╧╓╛юэбЁ╓╣╓Л╓ф╓╓╓К╓Х╓╕╓к╔╥╔╧╔ф╔Ю╓Р╨ф╧╫ю╝╓╥╓ф╓╞╓ю╓╣╓╓. ╓╒╓Л╓Л? ╔ф║╪╔в╓╚╓И╔╓╔С╔╧╔х║╪╔К╓г╓╜╓ч╓╩╓С! FreeBSD 2.1.7R ╓Р╔ф║╪╔в╓╚╓И╔╓╔С╔╧╔х║╪╔К╓╧╓К╬Л╧Г, tar ╔ж╔М╔ц╔╞╔╣╔╓╔╨╓Р 10(5120 ╔п╔╓╔х)╓к╓╥╓©╔ф║╪╔в╓Р╨Н╓Ки╛мв╓╛╓╒╓Й╓ч╓╧. ╔г╔у╔╘╔К╔х ╓н tar ╔ж╔М╔ц╔╞╔╣╔╓╔╨╓о 20(10240 ╔п╔╓╔х)╓г, ╓Ё╓н╔г╔у╔╘╔К╔х╔╣╔╓╔╨╓г╨Н╓И╓Л╓©╔ф║╪╔в╓г╓о FreeBSD 2.1.7R ╓Р╔╓╔С╔╧╔х║╪╔К╓╧╓К╓Ё╓х╓о╓г╓╜╓ч╓╩╓С. ╓Б╓╥╓Ё╓╕╓╥╓©╔ф║╪╔в╓Р╩х╓╕╓х, ╔Л╔Ё║╪╔и╔╣╔╓╔╨╓╛бГ╓╜╓╧╓╝╓К╓х╓╓╓╕╔╗╔И║╪╓╛╣╞╓╜╓К╓Ё╓х╓к╓й╓Й╓ч╓╧. PLIP ╥пмЁ╓гфС╓д FreeBSD box ╓РюэбЁ╓╥╓©╓╓╓н╓г╓╧╓╛ Laplink ╔я╔И╔Л╔К╔╠║╪╔ж╔К╓Рмя╟у╓╥╓ф, н╬йЩ╓н PC ╓н╔╚║╪╔м╔К╓к lpt ╔и╔И╔╓╔п╓╛ах╓ъ╧Ч╓ч╓Л╓ф╓╓╓К╓Ё╓х╓РЁнг╖╓╥╓ф╓╞╓ю╓╣╓╓. &prompt.user; dmesg | grep lp lpt0 at 0x378-0x37f irq 7 on isa lpt0: Interrupt-driven port lp0: TCP/IP capable interface ╔я╔И╔Л╔К╔╓╔С╔©╔у╔╖║╪╔╧╓к Laplink ╔я╔И╔Л╔К╔╠║╪╔ж╔К╓РюэбЁ╓╥╓ч╓╧. root ╓к╓й╓ц╓ф, н╬йЩ╓г lp0 ╓н╔м╔ц╔х╔О║╪╔╞╔╓╔С╔©╔у╔╖║╪╔╧╔я╔И╔А║╪╔©╓РюъдЙ╓╥╓ч╓╧. нЦ╓╗╓п, ╔ш╔╧╔х max ╓х moritz ╓РюэбЁ╓╥╓©╓╓╬Л╧Г, max <-----> moritz IP Address 10.0.0.1 10.0.0.2 max б╕╓г╪║╓н╓Х╓╕╓к╓╥╓ф, &prompt.root; ifconfig lp0 10.0.0.1 10.0.0.2 moritz б╕╓гф╠мм╓к╪║╓н╓Х╓╕╓к╓╥╓ч╓╧. &prompt.root; ifconfig lp0 10.0.0.2 10.0.0.1 ╟й╬Е╓г╓╧! &man.lp.4; ╓х &man.lpt.4; ╓н╔ч╔к╔Е╔╒╔К╔з║╪╔╦╓Б╩╡╬х╓╥╓ф╓╞╓ю╓╣╓╓. ╓ч╓©, /etc/hosts ╓к╔ш╔╧╔х╓нди╡ц╓Б╓╥╓ч╓╥╓Г╓╕. 127.0.0.1 localhost.my.domain localhost 10.0.0.1 max.my.domain max 10.0.0.2 moritz.my.domain moritz ф╟╨НЁнг╖╓о╪║╓н╓Х╓╕╓к╓╥╓ч╓╧. max б╕: &prompt.user; ifconfig lp0 lp0: flags=8851<UP,POINTOPOINT,RUNNING,SIMPLEX,MULTICAST> mtu 1500 inet 10.0.0.1 --> 10.0.0.2 netmask 0xff000000 &prompt.user; netstat -r Routing tables Internet: Destination Gateway Flags Refs Use Netif Expire moritz max UH 4 127592 lp0 &prompt.user; ping -c 4 moritz PING moritz (10.0.0.2): 56 data bytes 64 bytes from 10.0.0.2: icmp_seq=0 ttl=255 time=2.774 ms 64 bytes from 10.0.0.2: icmp_seq=1 ttl=255 time=2.530 ms 64 bytes from 10.0.0.2: icmp_seq=2 ttl=255 time=2.556 ms 64 bytes from 10.0.0.2: icmp_seq=3 ttl=255 time=2.714 ms --- moritz ping statistics --- 4 packets transmitted, 4 packets received, 0% packet loss round-trip min/avg/max/stddev = 2.530/2.643/2.774/0.103 ms ╔И╔ц╔в╔х╔ц╔в PC ╓к PLIP ╥пмЁ╓г╔╓╔С╔╧╔х║╪╔К╓г╓╜╓ч╓╧╓╚? ╪║╓н╓Х╓╕╓к╓╥╓ф, фС╓д╓н╔Ё╔С╔т╔Е║╪╔©╓Р Laplink ╔я╔И╔Л╔К╔╠║╪╔ж╔К╓гюэбЁ╓╥╓ф╓╞╓ю╓╣╓╓. ╔м╔ц╔х╔О║╪╔╞юэбЁмя╓н╔я╔И╔Л╔К╔╠║╪╔ж╔К╓н╥КюЧ A-name A б╕ B б╕ юБлю ╔щ║╪╔х / ╔с╔ц╔х DATA0 -ERROR 2 15 15 2 Data 0/0x01 1/0x08 DATA1 +SLCT 3 13 13 3 Data 0/0x02 1/0x10 DATA2 +PE 4 12 12 4 Data 0/0x04 1/0x20 DATA3 -ACK 5 10 10 5 Strobe 0/0x08 1/0x40 DATA4 BUSY 6 11 11 6 Data 0/0x10 1/0x80 GND 18-25 18-25 GND -
╓ч╓©, Mobile Computing ╓к╓д╓╓╓ф╓н╔з║╪╔╦╓Б╓╢мВ╓╞╓ю╓╣╓╓.
╔о║╪╔и╔г╔ё╔╧╔╞╔и╔И╔╓╔ж╓к╓о, ╓и╓н╔╦╔╙╔А╔х╔Й╓Р╩х╓╕╓ы╓╜╓г╓╥╓Г╓╕╓╚? ╓Ё╓Ё╓г╔г╔ё╔╧╔╞╓н║ж╔╦╔╙╔А╔х╔Й║в╓х╓о, ╔г╔ё╔╧╔╞╓н╔╥╔Й╔С╔ю, ╔ь╔ц╔ю, ╔х╔И╔ц╔╞еЖ╓Й╓н╔╩╔╞╔©╓н©Т╓Р╟улё╓╥╓ф╓╓╓ч╓╧ - йь╣╧╬Е, C/H/S ╓х╓╧╓К╓Ё╓х╓к╓╥╓ч╓╧. ╓Ё╓Л╓о╔г╔ё╔╧╔╞╓н╓и╓ннн╟Х╓гфи╓ъ╫Я╓╜╓Р ╧т╓й╓╕╓╚╓Р PC ╓н BIOS ╓╛╥ХдЙ╓╧╓К╪Йцй╓х╓й╓Й╓ч╓╧. ╓Ё╓Л╓к╓д╓╓╓ф╓о╓╒╓КмЩмЁ╓н╓©╓А╓к, ╦М╡Р╓╣╓Л╓ф╓╓╓Кею╓╛б©╓╓╓Х╓╕╓г╓╧. ╓ч╓╨╨г╫И╓к, FreeBSD ╓о╔г╔ё╔╧╔╞╔ж╔М╔ц╔╞╓гф╟╨Н╓╥╓ф╓╓╓К╓©╓А, SCSI ╔и╔И╔╓╔ж╓нй╙мЩе╙╓й╔╦╔╙╔А╔х╔Й╓х╓╓╓╕╦ю╓╓йЩ╓о, ╓ч╓ц╓©╓╞╦╚еЖ╟Ц╓╓╓н╓Б╓н╓г╓╧. ╩Ж╪б, ╔╩╔╞╔©╓нл╘еы╓о╔г╔ё╔╧╔╞╓к╓Х╓ц╓ф╓ч╓а╓ч╓а╓г╓╒╓К╓©╓А, й╙мЩе╙╓й╔╦╔╙╔А╔х╔Й╓х╓╓╓╕╓Б╓н╓об╦╨ъ╓╥╓ч╓╩╓С. ю╫б╓╪т╓╛║жкэеЖ╓н║вй╙мЩе╙╓й╔╦╔╙╔А╔х╔Й╓х╦Ьи╫╓╥╓ф╓╓╓К╓Б╓н╓одл╬О, хЮ╓И╓╛╦║╨╨╓╥╓ффю╓©╨г╬╝╓н╩хмяит╡дмфнл╓н╥К╡л╓н╔╦╔╙╔А╔х╔Й╓н╓Ё╓х╓г╓╧. IDE ╓н╬Л╧Г, FreeBSD ╓о C/H/S ╓гф╟╨Н╓╥╓ч╓╧╓╛, ╨г╤А╓н╔и╔И╔╓╔ж╓о╓╧╓ы╓ф, ╓Ё╓Л╓РфБиТ╓г╩╡╬х╓╧╓К╔ж╔М╔ц╔╞╓кйя╢╧╓╥╓ф╓╓╓ч╓╧. лДбЙ╓о╓х╓й╓К╓н╓ооюмЩе╙╓й╔╦╔╙╔А╔х╔Й╓г╓╧. ╓Ё╓Л╓о BIOS ╓╛╓╫╓н╔г╔ё╔╧╔╞╓н╔╦╔╙╔А╔х╔Й╓к╓д╓╓╓фд╢╓ы╓©╨щ╓к╪Хфю╓╣╓Л╓К╓Б╓н╓г╓╒╓Й, ╓╫╓н╦Е╓н╔г╔ё╔╧╔╞╓ь╓н╔╒╔╞╔╩╔╧╓к╩хмя╓╥╓ч╓╧. FreeBSD ╓о╣╞ф╟╩Ч╓к BIOS ╓Р╩хмя╓╧╓К╓©╓А, ╓Ё╓Л╓Рю╣╓╥╓╞╪Хфю╓╧╓К╓Ё╓х╓охС╬О╓к╫емв╓й╓Ё╓х╓й╓н╓г╓╧. ╪б╨щ╓к, ╔г╔ё╔╧╔╞╬Е╓кйё©Т╓н╔╙╔з╔Л║╪╔ф╔ё╔С╔╟╔╥╔╧╔ф╔Ю╓╛╓╒╓К╬Л╧Г╓о, ╔╦╔╙╔А╔х╔Й╓о╓и╓Ё╓╚╓И╓г╓Бф╠╓╦╓Х╓╕╓к╡Р╪А╓╣╓Л╓Ки╛мв╓╛╓╒╓Й╓ч╓╧. ╓╫╓╕╓╥╓й╓╓╓х, ╣╞ф╟╩Ч╓к©╪╧О╓йлДбЙ╓╛х╞ю╦╓╥╓ч╓╧. SCSI ╔г╔ё╔╧╔╞╓г╓о, ╩хмя╓╧╓К╔╦╔╙╔А╔х╔Й╓о╔Ё╔С╔х╔М║╪╔И╓нЁхд╔ BIOS ╔х╔И╔С╔╧╔Л║╪╔╥╔Г╔С(>1GB ╓н DOS ╔г╔ё╔╧╔╞╔и╔И╔╓╔ж╓н╔╣╔щ║╪╔х ╓х╓Б╦ф╓п╓Л╓ч╓╧)╓╛м╜╦З╓к╓й╓ц╓ф╓╓╓К╓╚╓и╓╕╓╚╓к╓Х╓Й╓ч╓╧. л╣╦З╓к╓й╓ц╓ф╓╓╓К╬Л╧Г, N ╔╥╔Й╔С╔ю, 64 ╔ь╔ц╔и, 32 ╔╩╔╞╔©/╔х╔И╔ц╔╞╓Р╩хмя╓╥╓ч╓╧╓╛, ╓Ё╓Ё╓г `N' ╓о MB ц╠╟л╓н╔г╔ё╔╧╔╞мфнл╓г╓╧. нЦ╓╗╓п, 2GB ╔г╔ё╔╧╔╞╓о╦╚╓╚╓╠╬Е 2048 ╔╥╔Й╔С╔ю, 64 ╔ь╔ц╔и, 32 ╔╩╔╞╔©/╔х╔И╔ц╔╞╓х╓й╓Й╓ч╓╧. ╓╫╓Л╓╛║жм╜╦З║в╓к╓й╓ц╓ф╓╙╓Й(MS-DOS ╓г╓о╓Ё╓нйЩк║╓г, ╓╒╓Кю╘╦б╓Р╡СхР╓╧╓К╬Л╧Г╓Б╓╒╓Й╓ч╓╧), ╔г╔ё╔╧╔╞мфнл╓╛ 1GB ╓Р╠ш╓╗╓К╬Л╧Г╓о, M ╔╥╔Й╔С╔ю, 63 ╔╩╔╞╔©/╔х╔И╔ц╔╞ (64 ║ж╓г╓о╓й╓╞║в), 255 ╔ь╔ц╔и╓Р╩хмя╓╥╓ч╓╧. `M' ╓о MB ц╠╟л╓н╔г╔ё╔╧╔╞мфнл╓Р 7.844238(!) ╓гЁД╓ц╓©цм╓х╓й╓Й╓ч╓╧. ╓х╓╓╓╕╓Ё╓х╓г, 2GB ╔г╔ё╔╧╔╞╓ннЦ╓г╓о, 261 ╔╥╔Й╔С╔ю, 63 ╔╩╔╞╔©/╔х╔И╔ц╔╞, 255 ╔ь╔ц╔и╓х╓й╓Й╓ч╓╧. (лУцМ: ╟й╬Е╓о Adaptec ╪р╓х NCR ╪рю╫╓н SCSI ╔╒╔ю╔в╔©╓н╬Л╧Г╓г╓╧. SCSI ╔╒╔ю╔в╔©╓к╓Х╓ц╓фйя╢╧╓н©Тцм╓╛йя╓О╓ц╓ф╓╞╓К╓н╓г╔ч╔к╔Е╔╒╔К╓Р ╩╡╬х╓╥╓ф╓╞╓ю╓╣╓╓.) ╓Ё╓Л╓к╓д╓╓╓ф╓Х╓╞й╛╓╚╓И╓й╓╓╬Л╧Г╓Д FreeBSD ╓╛╔╓╔С╔╧╔х║╪╔КцФ╓кю╣╓╥╓╞╔╦╔╙╔А╔х╔Й╓Р╪Хфю╓г╓╜╓й╓╓╬Л╧Г, ╓Ё╓Л╓Р╡СхР╓╧╓К╓Б╓ц╓х╓Б╢йц╠╓ййЩк║╓о, ╔г╔ё╔╧╔╞╓к╬╝╓╣╓й DOS ╔я║╪╔ф╔ё╔╥╔Г╔С╓Р╨Н╓К╓Ё╓х╓г╓╧. ╓╫╓╕╓╧╓К╓хю╣╓╥╓╓╔╦╔╙╔А╔х╔Й╓╛╪Хфю╓╣╓Л╓К╓о╓╨╓г╓╧(╓╫╓╥╓ф, ╩д╓╥╓ф╓╙╓╜╓©╓╞╓й╓╓╓х╓╚, ╔м╔ц╔х╔О║╪╔╞╔╚║╪╔и╓н╔в╔М╔╟╔И╔ъ╔С╔╟мя╓к╩х╓╓╓©╓╓╬Л╧Г╓й╓и╓к╓о, ╓╓╓д╓г╓Б╔я║╪╔ф╔ё╔╥╔Г╔С╔╗╔г╔ё╔©╓г DOS ╔я║╪╔ф╔ё╔╥╔Г╔С╓Р╨О╫Э╓╧╓К╓Ё╓х╓╛╓г╓╜╓ч╓╧). ╓Б╓╕╟Л╓д╓нйЩк║╓х╓╥╓ф, FreeBSD ╓х╟Л╫О╓к╓кгшиш╓╣╓Л╓ф╓╓╓К╔у╔Й║╪╓г╩х╓╗╓К╔Ф║╪╔ф╔ё╔Й╔ф╔ё╓к pfdisk.exe (FreeBSD CD-ROM ╓н tools ╔г╔ё╔Л╔╞╔х╔Й╓Д, б╬╓н╓╣╓ч╓╤╓ч╓й FTP ╔╣╔╓╔х╓к╓╒╓Й╓ч╓╧)╓х╦ф╓п╓Л╓К╓Б╓н╓╛╓╒╓Й, ╔г╔ё╔╧╔╞╬Е╓нб╬╓н╔╙╔з╔Л║╪╔ф╔ё╔С╔╟╔╥╔╧╔ф╔Ю╓╛╩хмя╓╥╓ф╓╓╓К ╔╦╔╙╔А╔х╔Й╓Рд╢╓ы╓К╓н╓клРн╘╓а╓ч╓╧. ╓Ё╓н╔╦╔╙╔А╔х╔Й╬ПйС╓о, ╔я║╪╔ф╔ё╔╥╔Г╔С╔╗╔г╔ё╔©╓кфЧно╓╧╓К╓Ё╓х╓╛╓г╓╜╓ч╓╧. ╔г╔ё╔╧╔╞╓нй╛ЁД╓н╩ейЩ╓г╡©╓╚ю╘╦б╓о╓╒╓Й╓ч╓╧╓╚? ╓о╓╓. BIOS ╓╛╔╚║╪╔м╔К╓Р╣╞ф╟╓г╓╜╓К╓Х╓╕╓к╔К║╪╔х╔я║╪╔ф╔ё╔╥╔Г╔С╓╛ 1024 ╔╥╔Й╔С╔ю╟йфБ╓к╓╒╓К╓Ё╓х╓РЁнг╖╓╧╓Ки╛мв╓╛╓╒╓Й╓ч╓╧(╓Ё╓Л╓о FreeBSD ╓г╓о╓й╓╞ PC ╓н BIOS ╓ню╘╦б╓г╓╧). SCSI ╔и╔И╔╓╔ж╓г╓о, дл╬О╓о╔К║╪╔х╔я║╪╔ф╔ё╔╥╔Г╔С╓╛╨г╫И╓н 1024MB ╓к╪Щ╓ч╓ц╓ф╓╓╓К╓Ё╓х╓╛а╟дС╓х╓й╓Й╓ч╓╧(╓ч╓©╓оЁхд╔ BIOS ╔х╔И╔С╔╧╔Л║╪╔╥╔Г╔С╓╛м╜╦З╓к╓й╓ц╓ф╓╓╓К╬Л╧Г╓о╨г╫И╓н 4096MB - б╬╓н╪алД╓Р╓╢мВ╓╞╓ю╓╣╓╓). IDE ╓г╓╫╓Л╓каЙеЖ╓╧╓Кцм╓о 504MB ╓х╓й╓Й╓ч╓╧(лУцМ: E-IDE бп╠Ч╓н BIOS еК╨э╔ч╔╥╔С╓н╬Л╧Г╓о IDE ╓н 504MB ╓х╓╓╓╕ю╘╦б╓о╓╒╓Й╓ч╓╩╓С). бГмфнл╔г╔ё╔╧╔╞╓Р╩Щ╓ц╓ф╓╓╓ч╓╧╓╛, ╔г╔ё╔╧╔╞╔ч╔м║╪╔╦╔Ц╓о╩х╓╗╓ч╓╧╓╚? FreeBSD ╓о Ontrack Disk Manager ╓Рг╖╪╠╓╥, ╓Ё╓Л╓Р╧мн╦╓к╓╓╓Л╓ч╓╧. б╬╓н╔г╔ё╔╧╔╞╔ч╔м║╪╔╦╔Ц╓о╔╣╔щ║╪╔х╓╥╓ч╓╩╓С. ╔г╔ё╔╧╔╞а╢бн╓Р FreeBSD ╓г╩х╓╓╓©╓╓╬Л╧Г, ╔г╔ё╔╧╔╞╔ч╔м║╪╔╦╔Ц╓ои╛мв╓╒╓Й╓ч╓╩╓С. BIOS ╓╛╟╥╓╗╓Кмфнл(дл╬О 504MB)╓╓╓ц╓я╓╓╓г╔г╔ё╔╧╔╞╓нюъдЙ╓Р╧т╓й╓╕╓х, FreeBSD ╓о╪б╨щ╓нмфнл╓Р╩╩╫п╓╧╓К╓о╓╨╓г╓╧. MFM ╔Ё╔С╔х╔М║╪╔Ииу╓╜╓н╦е╓╓╔г╔ё╔╧╔╞╓Р╩х╓ц╓ф╓╓╓К╬Л╧Г╓о, FreeBSD ╓к╩хмя╓╧╓К╔╥╔Й╔С╔ю©Т╓Р╬э╨ы╓к╩ьдЙ╓╧╓Ки╛мв╓╛╓╒╓Й╓ч╓╧. FreeBSD ╓хб╬╓н╔╙╔з╔Л║╪╔ф╔ё╔С╔╟╔╥╔╧╔ф╔Ю╓╛фЧ╓ц╓ф╓╓╓К╔г╔ё╔╧╔╞╓Р╩хмя╓╥╓©╓╓╬Л╧Г╓о, ╔г╔ё╔╧╔╞╔ч╔м║╪╔╦╔Ц╓й╓╥╓г╓Б╓г╓╜╓К╓г╓╥╓Г╓╕. FreeBSD ╓н╣╞ф╟╔я║╪╔ф╔ё╔╥╔Г╔С╓хб╬╓н╔╙╔з╔Л║╪╔ф╔ё╔С╔╟╔╥╔╧╔ф╔Юмя╓н╔╧╔И╔╓╔╧╓╛, ╨г╫И╓н 1024 ╔╥╔Й╔С╔юфБ╓к╪Щ╓ч╓ц╓ф╓╓╓К╩Ж╓РЁнг╖╓╧╓К╓ю╓╠╓г╓╧. ╣╓╓к╓й╓КйЩ╓о, ╣╞ф╟╔я║╪╔ф╔ё╔╥╔Г╔С╓Р 20 ╔А╔╛╔п╔╓╔х╓╟╓И╓╓╓к╓╥╓фбГ╓╜╓А╓к╓╧╓К╓х╓х╓Х╓╓╓г╓╥╓Г╓╕. FreeBSD ╓н╣╞ф╟╩Ч╓к Missing Operating System ╓хи╫╪╗╓╣╓Л╓ч╓╧ ╓Ё╓Л╓о FreeBSD ╓Д DOS, ╓╫╓н╓ш╓╚╓н OS ╓╛╔г╔ё╔╧╔╞нн╟Х╔╦╔╙╔А╔х╔Й ╓н╓х╓И╓╗йЩ╓г╬вфм╓╥╓╒╓ц╓ф╓╓╓К╓Ё╓х╓╚╓И╣╞╓Ё╓Ке╣╥©е╙╓йнЦ╓г╓╧. ╓Ё╓╕╓й╓ц╓©╓И FreeBSD ╓Р╔╓╔С╔╧╔х║╪╔К╓╥д╬╓╧╟йЁ╟╓к╓о╓╒╓Й╓ч╓╩╓С╓╛, б╬╓н╓х╓Ё╓М╓гюБлю╓╥╓©╪Й╫Г╓к╓╥╓©╓╛╓ц╓ф╓Д╓Л╓п, ╓ш╓э╢ж╟Ц╓╓╓й╓╞╓╕╓ч╓╞╓╓╓╞╓о╓╨╓г╓╧. ╔ж║╪╔х╔ч╔м║╪╔╦╔Ц╓н F? ╔в╔М╔С╔в╔х╓╛и╫╪╗╓╣╓Л╓ч╓╩╓С. ╓Ё╓Л╓о╓╧╓г╓ка╟╓к╪алД╓╣╓Л╓ф╓╓╓КлДбЙ╓н╓Б╓╕╟Л╓д╓н╬и╬У╓г╓╧. BIOS ╓н╔╦╔╙╔А╔х╔Й╓х FreeBSD ╓н╔╦╔╙╔А╔х╔ЙюъдЙ╓╛╟Лцв╓╥╓ф╓╓╓й╓╓╓н╓г╓╧! ╔Ё╔С╔х╔М║╪╔И╓Д BIOS ╓╛╔╥╔Й╔С╔ю╓нйя╢╧(>1GB ╔и╔И╔╓╔ж╓н ╔╣╔щ║╪╔х╓х╓Б╦ф╓п╓Л╓ч╓╧)╓Р╔╣╔щ║╪╔х╓╥╓ф╓╓╓©╓И, ╓╫╓нюъдЙ╓Рл╣╦З╡╫╓╥╓ф FreeBSD ╓Р╔╓╔С╔╧╔х║╪╔К╓╥д╬╓╥╓ф╓ъ╓ф╓╞╓ю╓╣╓╓. ╔╫║╪╔╧╓Ра╢иТ╔╓╔С╔╧╔х║╪╔К╓╧╓Ки╛мв╓о╓╒╓Й╓ч╓╧╓╚? ╟Лхле╙╓к╓о║ж╓╓╓╓╓╗║в╓г╓╧. ╓╥╓╚╓╥╨гдЦ╓г╓Б, base ╔╫║╪╔╧╔╜╔ц╔х(╓Ё╓Л╓к╓о╓Ё╓н FAQ ╓г╫р╓ы╓И╓Л╓ф╓╓╓К╔у╔║╔╓╔К╓н╓╓╓╞╓д╓╚╓╛╢ч╓ч╓Л╓ф╓╓╓ч╓╧)╓х, sys (kernel) ╔╫║╪╔╧╔╜╔ц╔х(╓Ё╓Л╓к╓о╔╚║╪╔м╔К╓н╔╫║╪╔╧╓╛╢ч╓ч╓Л╓ф╓╓╓ч╓╧) ╓Р╔╓╔С╔╧╔х║╪╔К╓╧╓К╩Ж╓Р╤╞╓╞╓╙╓╧╓╧╓А╓╥╓ч╓╧. дл╬О, ╡©╓╚╓н╪б╧т╓к╔╫║╪╔╧╓╛и╛мв╓к╓й╓К╩Ж╓о╓╒╓Й╓ч╓╩╓С. ╓╥╓╚╓╥, ╔╚║╪╔м╔К╓Р╔Ё╔С╔у╔ё╔╟╔Л║╪╔╥╔Г╔С╓╧╓К╓©╓А╓н╔в╔М╔╟╔И╔Ю &man.config.8; ╓Р╪б╧т╓╧╓К╩Ч╓онЦЁ╟╓г╓╧. ╔╚║╪╔м╔К╓н╔╫║╪╔╧╓Р╔╓╔С╔╧╔х║╪╔К╓╥╓й╓╞╓ф╓Б╓Х╓╓нЦ╓х╓╥╓ф, ╓и╓Ё╓╚йл╓н╬Л╫Й╓╚╓И╔╚║╪╔м╔К╓н╔╫║╪╔╧╓Рфи╓ъ╧Ч╓ъюЛмя╓г NFS ╔ч╔╕╔С╔х╓╧╓К╓Ё╓х╓╛╓г╓╜╓ч╓╧. ╓ч╓©, ╓╫╓Ё╓╚╓И©╥╓╥╓╓╔п╔╓╔й╔Й╓Р╨Ню╝╓г╓╜╓К╓Х╓╕╓к╓Б╓й╓ц╓ф╓╓╓ч╓╧. (╔╚║╪╔м╔К╔╫║╪╔╧╓ню╘╦б╓╛╓╒╓К╓н╓г, д╬юэ /usr/src ╓Р╔ч╔╕╔С╔х╓╧╓К╩Ж╓о╓╙╓╧╓╧╓А╓г╓╜╓ч╓╩╓С. ╓╫╓Л╓Х╓Й╓Б╓и╓Ё╓╚йл╓н╔г╔ё╔Л╔╞╔х╔Й╓к╔ч╔╕╔С╔х╓╥╓ф, ╔╫║╪╔╧╔д╔Й║╪╓нйёю╫╓╛╓г╓╜╓К╓Х╓╕╓ке╛юз╓к╔╥╔С╔э╔Й╔ц╔╞╔Й╔С╔╞╓Рд╔╓ц╓ф╓╞╓ю╓╣╓╓.) ╔╫║╪╔╧╓Р╔м╔ц╔х╔О║╪╔╞╬Е╓к╩Щ╓а, ╓╫╓Ё╓╚╓И╔╥╔╧╔ф╔Ю╓Р╔с╔К╔и╓╧╓К╓Х╓╕╓к╓╥╓ф╓╙╓╠╓п, FreeBSD ╓н╬╜мХ╓н╔Й╔Й║╪╔╧╓ь╓н╔╒╔ц╔в╔╟╔Л║╪╔и╓╛╓╨╓ц╓х╢йц╠╓к╓й╓Й╓ч╓╧. ╪б╨щ╓к╔╫║╪╔╧╓н╔╣╔ж╔╩╔ц╔х╓Ра╙бР╓╧╓К╓к╓о, ╔╥╔╧╔ф╔Ю╔╓╔С╔╧╔х║╪╔К╔д║╪╔К╓н║жгшиш╔у╔║╔╓╔К║в╔А╔к╔Е║╪╓к╓╒╓К, ║ж╔╚╔╧╔©╔Ю║в╔А╔к╔Е║╪╓Р╩хмя╓╥╓ч╓╧. ╔╚║╪╔м╔К╓ои╛╓╨╨Н╓Йд╬╓╣╓й╓╞╓а╓Ц╓й╓И╓й╓╓╓С╓г╓╧╓╚? ╔╚║╪╔м╔К╓Р©╥╓╥╓╞╨Н╓Йд╬╓╧╓н╓о╦╣║╧, FreeBSD ╓н╔╓╔С╔╧╔х║╪╔К╩Ч╓ки╛©э╓н╨Н╤х╓г╓╥╓©. ╓г╓Б╨г╤А╓н╔Й╔Й║╪╔╧╓г╓о, ╓х╓ф╓Б╔Ф║╪╔╤╔у╔Л╔С╔и╔Й╓й╔╚║╪╔м╔КюъдЙ╔д║╪╔К╓н╡╦╥ц╓Р╪У╓╠╓ф╓╓╓ч╓╧. FreeBSD ╓н╣╞ф╟╔в╔М╔С╔в╔х (boot:) ╓г ╓х╔©╔╓╔в╓╧╓Л╓п╔с╔╦╔Е╔╒╔К╓йюъдЙ╡Хлл╓к╓й╓Й, ╓ш╓х╓С╓и╓н╟Лхле╙╓й ISA ╔╚║╪╔и╓к╓д╓╓╓ф╓н╔╚║╪╔м╔К╓нюъдЙ╓Р╓╧╓К╓Ё╓х╓╛╓г╓╜╓К╓н╓г╓╧. ╨ё╓г╓Б, и╛мв╓й╔г╔п╔╓╔╧╔и╔И╔╓╔п╓ю╓╠╓Рах╓ъ╧Ч╓С╓ю╔╚║╪╔м╔К╓Р╨Н╓К╓Ё╓х╓о╓Х╓╓╩Ж╓х╓╣╓Л╓ф╓╓╓ч╓╧. ╓ш╓С╓н╓а╓Г╓ц╓х╓ю╓╠╔А╔Б╔Й╓РюАлС╓г╓╜╓ч╓╧╓╚╓И╓м. ╓г╓Б╓ш╓х╓С╓и╓н╔╥╔╧╔ф╔Ю╓г╓о, ╓Б╓о╓Д╓и╓╕╓╥╓ф╓Б╓Д╓И╓й╓╞╓а╓Ц╓й╓И╓й╓╓╓Ё╓х╓г╓о╓й╓╓╓н╓г╓╧. DES ╓х MD5, ╓и╓а╓И╓н╔я╔╧╔О║╪╔и╓Р╩х╓╕╓ы╓╜╓й╓н╓г╓╥╓Г╓╕╓╚? ╓ч╓©, ╔Ф║╪╔╤╓╛╓и╓а╓И╓Р╩х╓╕╓Ё╓х╓к╓й╓К╓╚╩ьдЙ╓╧╓КйЩк║╓о╓╒╓Й╓ч╓╧╓╚? FreeBSD ╓ни╦╫Ю╓н╔я╔╧╔О║╪╔и╔у╔╘║╪╔ч╔ц╔х╓о MD5 ╓Р╩х╓ц╓©╓Б╓н╓г╓╧. ╓Ё╓Л╓о DES ╔╒╔К╔╢╔Й╔╨╔Ю╓к╢П╓е╓╓╓©╪Йк║╓Рмя╓╓╓К UNIX ╓неаеЩе╙╓й╔я╔╧╔О║╪╔и╔у╔╘║╪╔ч╔ц╔х╓Х╓Й╟ба╢ (secure) ╓ю╓х ©╝╓╦╓И╓Л╓ф╓╓╓К╓Б╓н╓г╓╧. DES ╔я╔╧╔О║╪╔и╓о ╓╒╓й╓©╓╛ FreeBSD ╓н╔я╔╧╔О║╪╔и╔у╔║╔╓╔К╓Р, ╟ба╢ю╜╓кнТ╓К╔я╔╧╔О║╪╔и╔у╔╘║╪╔ч╔ц╔х╓РмЬмя╓╥╓ф╓╓╓К╦е╓╓ OS ╓х╤╕м╜╓╥╓й╓╠╓Л╓п╓й╓И╓й╓╞╓й╓ц╓©╓х╓╜╓н╓©╓А╓к мЬмя╡дг╫╓к╓й╓ц╓ф╓╓╓ч╓╧ (╓Ё╓Л╓омЬмя╓╧╓К╓©╓А╓к╓о, sysinstall ╓╚╓И crypto гшишй╙╓н╔╓╔С╔╧╔х║╪╔К а╙╓ж╓╚, ╔╫║╪╔╧╓╚╓И build ╓╥╓ф╓╓╓К╓й╓И, crypto ╓н╔╫║╪╔╧╓╛╔╓╔С╔╧╔х║╪╔К╓╣╓Л╓ф╓╓╓Ки╛мв╓╛╓╒╓Й╓ч╓╧). ©╥╓╥╓╓╔я╔╧╔О║╪╔и╓к╓и╓а╓И╓н╔я╔╧╔О║╪╔и╔у╔╘║╪╔ч╔ц╔х╓Р╩х╓╕╓╚╓о /etc/login.conf ╓нцФ╓н passwd_format ╓х╓╓╓╕ login ╔╠║╪╔я╔с╔Й╔ф╔ё╓гю╘╦Ф╓╣╓Л╓ч╓╧. ╓Ё╓н╔╠║╪╔я╔с╔Й╔ф╔ё╓о des (мЬмя╓г╓╜╓К╓й╓И) ╓╚ md5 ╓н╓и╓а╓И╓╚╓нцм╓Р╪Х╓Й╓ч╓╧. login ╔╠║╪╔я╔с╔Й╔ф╔ё╓н╬э╨ы╓к╓д╓╓╓ф╓о login.conf(5) ╓Р ╩╡╬х╓╥╓ф╓╞╓ю╓╣╓╓|╓╒!|. ╔ж║╪╔х╔у╔М╔ц╔т║╪╓г╣╞ф╟╓╧╓К╓х, Probing Devices... ╓н╡Хлл╓г╔о╔С╔╟╔╒╔ц╔в╓╥╓ч╓╧. IDE Zip ╓╚ Jaz ╔и╔И╔╓╔ж╓╛юэбЁ╓╣╓Л╓ф╓╓╓©╓И, ╓╫╓Л╓Р╪Х╓ЙЁ╟╓╥╓ф╓Б╓╕╟Леы╩Н╓╥╓ф╓ъ╓ч╓╥╓Г╓╕. ╔ж║╪╔х╔у╔М╔ц╔т║╪╓о╓Ё╓н╪О╓н╔и╔И╔╓╔ж╓Р╦Мг╖╓╥╓ф╓╥╓ч╓╕╓н╓г╓╧. ╔╥╔╧╔ф╔Ю╓╛╔╓╔С╔╧╔х║╪╔К╓╣╓Л╓©╦Е╓о, ╓╫╓н╔и╔И╔╓╔ж╓Р╨феыюэбЁ╓╧╓К╓Ё╓х╓╛╓г╓╜╓ч╓╧. ╓╕╓ч╓╞╓╓╓╠╓п╓Ё╓нлДбЙ╓о╬╜мХ╓н╔Й╔Й║╪╔╧╓г╡Р╥Х╓╣╓Л╓К╓г╓╥╓Г╓╕. ╔╓╔С╔╧╔х║╪╔К╫╙н╩╦Е╓к╔╥╔╧╔ф╔Ю╓Р╨ф╣╞ф╟╓╧╓К╓х, panic: cant mount root ╓н╔╗╔И║╪╓х╓й╓Й╓ч╓╧. ╓Ё╓н╔╗╔И║╪╓о╔г╔ё╔╧╔╞╔г╔п╔╓╔╧╓к╓д╓╓╓ф, ╣╞ф╟╔ж╔М╔ц╔╞╓х╔╚║╪╔м╔К╓нг╖╪╠╓╛╨╝мП╓╥╓ф╓╓╓К╓©╓А╓к╣╞╓Ё╓Й╓ч╓╧. ╓Ё╓н╔╗╔И║╪╓одл╬О, 2 бФ╓н IDE ╔г╔ё╔╧╔╞╓╛╓╫╓Л╓╬╓Лйл╓н IDE ╔Ё╔С╔х╔М║╪╔И╓н╔ч╔╧╔©║╪╓к╟Л╓д╓╨╓дюэбЁ╓╣╓Л╓ф╓╓╓К╔╥╔╧╔ф╔Ю╓к╓╙╓╓╓ф, FreeBSD ╓╛╔╩╔╚╔С╔ю╔Й IDE ╔Ё╔С╔х╔М║╪╔И╓кюэбЁ╓╣╓Л╓©╔г╔ё╔╧╔╞╓к╔╓╔С╔╧╔х║╪╔К╓╣╓Л╓ф╓╓╓К╬Л╧Г╓кх╞ю╦╓╥╓ч╓╧. ╣╞ф╟╔ж╔М╔ц╔╞╓о FreeBSD ╓╛ wd1(2 бФлэ╓н BIOS ╔г╔ё╔╧╔╞)╓к╔╓╔С╔╧╔х║╪╔К ╓╣╓Л╓ф╓╓╓К╓хг╖╪╠╓╧╓К╓н╓кбп╓╥, ╔╚║╪╔м╔К╓о╔╩╔╚╔С╔ю╔Й IDE ╓н 1 бФлэ╓н╔о║╪╔и╔г╔ё╔╧╔╞╓г╓╒╓К wd2 ╓к╔╓╔С╔╧╔х║╪╔К╓╣╓Л╓ф╓╓╓К╓хг╖╪╠╓╧╓К╓н╓г╓╧. ╔г╔п╔╓╔╧╦║╫п╦Е╓г, ╔╚║╪╔м╔К╓о╣╞ф╟╔ж╔М╔ц╔╞╓╛╣╞ф╟╔г╔ё╔╧╔╞╓ю╓хг╖╪╠╓╥╓©╔г╔ё╔╧╔╞╓г╓╒╓К wd1 ╓Р╔ч╔╕╔С╔х╓╥╓Х╓╕╓х╓╥╓ч╓╧. ╓╥╓╚╓╥, ╪б╨щ╓к╓о╣╞ф╟╔г╔ё╔╧╔╞╓о wd2 ╓й╓н╓г╪╨гт╓╥╓ф╓╥╓ч╓╕╓н╓г╓╧. ╓Ё╓нлДбЙ╓Р╡Р╥Х╓╧╓К╓к╓о, ╟й╡╪╓н╓и╓Л╓╚╟Л╓д╓Р╧т╓ц╓ф╓╞╓ю╓╣╓╓. FreeBSD 3.3 ╟й╧ъ╓РмЬмя╓╥╓ф╓╓╓К╬Л╧Г╓к╓о, ╔╥╔╧╔ф╔Ю╓Р╨ф╣╞ф╟╓╥╓ф, Booting kernel in 10 seconds; hit [Enter] to interrupt ╓╛и╫╪╗╓╣╓Л╓ф╓╓╓К╢ж╓к Enter ╔╜║╪╓Р╡║╓╥╓ч╓╧. ╓╧╓К╓х, ╔ж║╪╔х╔М║╪╔ю╓к╟э╧т╓╥╓ч╓╧. ╓╫╓╕╓╥╓©╓И, set root_disk_unit="disk_number" ╓хфЧно╓╥╓ч╓╧. FreeBSD ╓╛╨г╫И╓н IDE ╔Ё╔С╔х╔М║╪╔И╓н╔ч╔╧╔©║╪╓кюэбЁ╓╣╓Л╓©╔и╔И╔╓╔ж╓к╔╓╔С╔╧╔х║╪╔К╓╣╓Л╓ф╓╓╓Л╓п, disk_number ╓о 0 ╓г╓╧. ╓ч╓©, ╨г╫И╓н IDE ╔Ё╔С╔х╔М║╪╔И╓н╔╧╔Л║╪╔ж╓й╓И 1, фСхжлэ╓нIDE ╔Ё╔С╔х╔М║╪╔И╓н╔ч╔╧╔©║╪╓й╓И 2, фСхжлэ╓нIDE ╔Ё╔С╔х╔М║╪╔И╓н╔╧╔Л║╪╔ж╓й╓И 3 ╓к╓й╓Й╓ч╓╧. ╓╫╓н╦Е, boot ╓хфЧно╓╥╓ч╓╧. ╔╥╔╧╔ф╔Ю╓о╓╜╓а╓С╓х╨ф╣╞ф╟╓╧╓К╓о╓╨╓г╓╧. ╓Ё╓нйя╧╧╓Р╧╠╣ве╙╓й╓Б╓н╓к╓╧╓К(╓д╓ч╓Й, ╨ф╣╞ф╟╓Дее╦╩╓РфЧ╓Л╓Кеы╓к╓Ё╓наЮ╨Н╓╧╓Ки╛мв╓╛╓й╓╓╓Х╓╕╓к╓╧╓К)╓к╓о, /boot/loader.conf.local ╓к root_disk_unit="disk_number" ╓х╓╓╓╕╧т╓Рди╡ц╓╥╓ф╓╞╓ю╓╣╓╓. FreeBSD 3.2 ╟йа╟╓РмЬмя╓╥╓ф╓╓╓К╬Л╧Г╓о, Boot: ╔в╔М╔С╔в╔х╓г 1:wd(2,a)kernel ╓хфЧно╓╥╓ф╔╗╔С╔©║╪╔╜║╪╓Р╡║╓╥╓ч╓╧. ╔╥╔╧╔ф╔Ю╓╛╣╞ф╟╓╥╓©╓И, echo "1:wd(2,a)kernel" > /boot.config ╓х╓╓╓╕╔Ё╔ч╔С╔и╓Р╪б╧т╓╥╓ф╓Ё╓Л╓Р╔г╔у╔╘╔К╔х╓н╔ж║╪╔хй╦╩ЗнС╓х╓╥╓ч╓╧. FreeBSD ╓н╔г╔ё╔╧╔╞╓Р╔в╔И╔╓╔ч╔Й IDE ╔Ё╔С╔х╔М║╪╔И╓кюэбЁ╓╥╓ф, ╔о║╪╔и╔г╔ё╔╧╔╞╓╛о╒бЁ╓╥╓©╔и╔И╔╓╔жхж╧Ф╓гг╖╪╠╓╣╓Л╓К╓Х╓╕╓к╓╥╓ч╓╧. ╔╚║╪╔м╔К╓н╔Ё╔С╔у╔ё╔╟╔Л║╪╔╥╔Г╔С╔у╔║╔╓╔К╓г wd ╓н╧т╓Р╟й╡╪╓н╓Х╓╕╓кйя╧╧╓╥, ╔╚║╪╔м╔К╓н╨ф╧╫цш╓Р╧т╓ц╓ф, ©╥╓╥╓╓╔╚║╪╔м╔К╓Р╔╓╔С╔╧╔х║╪╔К╓╥╓ч╓╧. controller wdc0 at isa? port "IO_WD1" bio irq 14 vector wdintr disk wd0 at wdc0 drive 0 # disk wd1 at wdc0 drive 1 # ╓Ё╓н╧т╓Р╔Ё╔А╔С╔х╔╒╔╕╔х controller wdc1 at isa? port "IO_WD2" bio irq 15 vector wdintr disk wd1 at wdc1 drive 0 # wd2 ╓╚╓И wd1 ╓ьйя╧╧ disk wd2 at wdc1 drive 1 # wd3 ╓╚╓И wd2 ╓ьйя╧╧ ╔г╔ё╔╧╔╞╓нюэбЁ╓Рйя╧╧╓╥╓ф╦╣╓нюъдЙ╓клА╓╥╓©╓╓╬Л╧Г╓о, ╔г╔ё╔╧╔╞╓Р ╓╙к╬╓ъ╓нюъдЙ╓ндл╓Й╓нюэбЁ╓клА╓╥╓ф╓╚╓И╨ф╣╞ф╟╓╥╓ч╓╧. ╔╥╔╧╔ф╔Ю╓ою╣╬О╓к╣╞ф╟╓╧╓К╓о╓╨╓г╓╧. ╔А╔Б╔Й╓нбГ╓╜╓╣╓ню╘╦б╓о? г╖╪╠╓г╓╜╓К╔А╔Б╔Й╓н╬Е╦б╓о, 4GB ╓г╓╧. ╓Ё╓н╧╫ю╝╓о╩Н╦Ё╨я╓ъ╓г, ╬э╨ы╓о wcarchive's configuration ╓Р╓╢мВ╓╞╓ю╓╣╓╓. ╓Ё╓н╓Х╓╕╓к╓©╓╞╓╣╓С╓н╔А╔Б╔Й╓Р╔ч╔╥╔С╓кфЁфЧ╓╥╓Х╓╕╓х╓╓╓╕╬Л╧Г╓к╓о, цМ╟у╓╛и╛мв╓г╓╧. ECC ╣║г╫╓Р╔╣╔щ║╪╔х╓╥, ╓й╓╙╓╚╓д мфнлю╜иИ╡ы(лУцМ: б©╓╞╓н╔А╔Б╔Йаг╩р╓омфнлю╜иИ╡ы╓х╓╥╓фф╞╓╜╓ч╓╧╓╛, ╔А╔Б╔Й╔п╔╧╬Е╓кмфнлю╜иИ╡ы╓╛аЩ╓╗╓К╓х©╝╧Ф╓неацё╓╛цы╓Л, ╦Мф╟╨Н╓н╦╤╟Ь╓х╓й╓Й╓ч╓╧)╓Р дЦ╦╨╓╣╓╩╓К╓©╓А, 18 ╔а╔ц╔в╧╫ю╝╓н╔А╔Б╔Й╔Б╔╦╔Е║╪╔К╓Х╓Й 9 ╔а╔ц╔в╧╫ю╝╓н╔А╔Б╔Й╔Б╔╦╔Е║╪╔К╓Ра╙бР╓╧╓К╓Ё╓х╓╛, ╓╙╓╫╓И╓╞к╬╓ч╓╥╓╓╓г╓╥╓Г╓╕. ffs ╔у╔║╔╓╔К╔╥╔╧╔ф╔Ю╓нбГ╓╜╓╣╓ню╘╦б╓о? ffs ╔у╔║╔╓╔К╔╥╔╧╔ф╔Ю╓н╬Л╧Г, оюмЩе╙╓й╨гбГ╓н╬Е╦б╓о 8 TB(2G ╔ж╔М╔ц╔╞), ╔г╔у╔╘╔К╔х╓н╔ж╔М╔ц╔╞╔╣╔╓╔╨╓Р 8K ╓х╓╧╓К╓х 16 TB╓х╓й╓Й╓ч╓╧. ╪б╨щлДбЙ╓х╓╥╓ф, 1 TB ╓н╔╫╔у╔х╔╕╔╖╔╒╓н╦бЁ╕╓╛╓╒╓Й╓ч╓╧╓╛, ╫╓ю╣╓╧╓Л╓п 4 TB ╓н╔у╔║╔╓╔К╔╥╔╧╔ф╔Ю╓╛╡дг╫╓г╓╧(╪б╨щ╓кб╦╨ъ╓╥╓ч╓╧). ╟Л╓д╓н ffs ╓н╔у╔║╔╓╔К╓н╨гбГ╓н╔╣╔╓╔╨╓о, ╔ж╔М╔ц╔╞╔╣╔╓╔╨╓╛ 4K ╓н╬Л╧Г╓г лС 1G ╔ж╔М╔ц╔╞(4 TB)╓г╓╧. ╨гбГ╔у╔║╔╓╔К╔╣╔╓╔╨ fs ╔ж╔М╔ц╔╞╔╣╔╓╔╨ 2.2.7-stable 3.0-current ф╟╨НЁнг╖╨я╓ъ╓н╔╣╔╓╔╨ ф╟╨Н╓╧╓К╓о╓╨╓н╔╣╔╓╔╨ 4K 4T-1 4T-1 4T-1 4+t 8K 32+G 8T-1 32+G 32T-1 16K 128+G 16T-1 128+G 32T-1 32K 512+G 32T-1 512+G 64T-1 64K 2048+G 64T-1 2048+G 128T-1
fs ╔ж╔М╔ц╔╞╔╣╔╓╔╨╓╛ 4K ╓н╬Л╧Г╓о╩╟╫е╢жюэ╔ж╔М╔ц╔╞╓╛╩хмя╓╣╓Л, ╓╓╓е╓Л╓н╬Л╧Г╓г╓Б╩╟╫е╢жюэ╔ж╔М╔ц╔╞╓Р╩хмя╓╥╓фи╫╦╫╓г╓╜╓К╨гбГ╓н fs ╔ж╔М╔ц╔╞хж╧Ф (╓╙╓Х╓╫ 1K^3 + 1K^2 + 1K) ╓кю╘╦б╓╣╓Л╓К╓о╓╨╓й╓н╓г╓╧╓╛, ╪б╨щ╓о fs ╔ж╔М╔ц╔╞хж╧Ф╓н (╢ж╟Ц╓ц╓©) ╬Е╦б 1G-1 ╓гю╘╦б╓╣╓Л╓ч╓╧. fs ╔ж╔М╔ц╔╞хж╧Ф╓ню╘╦б╓о 2G-1 ╓х╓й╓К╓о╓╨╓г╓╧. 2G-1 иу╤А╓к fs ╔ж╔М╔ц╔╞хж╧Ф╓н╔п╔╟╓╛б©╬╞╓╒╓Й╓ч╓╧╓╛, fs ╔ж╔М╔ц╔╞╔╣╔╓╔╨╓╛ 4K ╓н╬Л╧Г╓о, ╓Ё╓Ё╓ч╓г╓н╔ж╔М╔ц╔╞хж╧Ф╓к╓оеЧцё╓╥╓ч╓╩╓С. ╔ж╔М╔ц╔╞╔╣╔╓╔╨╓╛ 8K ╟й╬Е╓н╬Л╧Г, ╓╓╓╨╓Л╓н╬Л╧Г╓Б fs ╔ж╔М╔ц╔╞хж╧Ф╓н╬Е╦б 2G-1 ╓гю╘╦б╓╣╓Л╓К╓о╓╨╓г╓╧╓╛, ╪б╨щ╓о fs ╔ж╔М╔ц╔╞хж╧Ф╓н╬Е╦б 1G-1 ╓гю╘╦б╓╣╓Л╓ч╓╧. нЦЁ╟е╙╓к -STABLE ╓г╓о╩╟╫е╢жюэ╔ж╔М╔ц╔╞╓ч╓г╓оеЧцё╓╥╓й╓╓╓©╓А, ю╘╦б╓офС╫е╢жюэ╔ж╔М╔ц╔╞╓ги╫╦╫╓г╓╜╓К╨гбГ╓н fs ╔ж╔М╔ц╔╞хж╧Ф (╓╙╓Х╓╫ (blocksize/4)^2 + (blocksize/4)) ╓х╓й╓Й╓ч╓╧. -CURRENT ╓г╓о╓Ё╓ню╘╦б╓Рд╤╓╗╓К╓хлДбЙ╓Р╟З╓╜╣╞╓Ё╓╧╓╚╓Б╓╥╓Л╓ч╓╩╓С. ю╣╓╥╓╓ю╘╦бцм╓г╓╒╓К 2G-1 ╔ж╔М╔ц╔╞╓Р╩хмя╓╧╓К╓хлю╓И╓╚╓клДбЙ╓╛╫п╓ч╓╧.
╔у╔М╔ц╔т║╪╓к 1 TB ╓н╔у╔║╔╓╔К╓РЁйг╪╓╧╓К╓к╓о? ╢С╧ф: Bruce Evans, 1998 г╞ 9 ╥Н ╓О╓©╓╥╓н╓х╓Ё╓М╓г╓о, ╔у╔М╔ц╔т║╪╓к╓╓╓╞╓д╓╚╓н╪б╨щ╓н╔у╔║╔╓╔К╓Рйщб╦╓╥╓ф╓╓╓ч╓╧ :-). ╨гбГ╓н╔у╔║╔╓╔К╔╣╔╓╔╨╓о╨гбГ╓н╔г╔ё╔╧╔╞╔╣╔╓╔╨╓х╓о╓╒╓ч╓Й╢ь╥╦╓о╓╒╓Й╓ч╓╩╓С. ╨гбГ╓н╔г╔ё╔╧╔╞╔╣╔╓╔╨╓о 1 TB ╓г╓╧. ╔у╔║╔╓╔К╔╣╔╓╔╨╓╛╔г╔ё╔╧╔╞╔╣╔╓╔╨╓Х╓ЙбГ╓╜╓╞╓й╓Й╓╕╓К╓х╓╓╓╕╓н╓о╩емм╓г╓╧. ╟й╡╪╓ннЦ╓о, 32K ╓н╔г╔ё╔╧╔╞мфнл(3 ╓д╓н╢жюэ╔ж╔М╔ц╔╞╓х 1 ╓д╓н╔г║╪╔©╔ж╔М╔ц╔╞)╓Р╩х╓ц╓ф, ╬╝╓╣╓й╔К║╪╔х╔я║╪╔ф╔ё╔╥╔Г╔С╓к 8T-1 ╓нбГ╓╜╓╣╓н╔у╔║╔╓╔К╓Р╨Ню╝╓╥╓ч╓╧. ╓Ё╓Ё╓г╓н dd ╔Ё╔ч╔С╔и╓обГ╓╜╓й╔у╔║╔╓╔К╓╛╟╥╓╗╓К╓Б╓н╓╛и╛мв╓г╓╧. &prompt.user; cat foo df . dd if=/dev/zero of=z bs=1 seek=`echo 2^43 - 2 | bc` count=1 ls -l z du z df . &prompt.user; sh foo Filesystem 1024-blocks Used Avail Capacity Mounted on /dev/da0a 64479 27702 31619 47% / 1+0 records in 1+0 records out 1 bytes transferred in 0.000187 secs (5346 bytes/sec) -rw-r--r-- 1 bde bin 8796093022207 Sep 7 16:04 z 32 z Filesystem 1024-blocks Used Avail Capacity Mounted on /dev/da0a 64479 27734 31587 47% / ©╥╓╥╓╓╔╚║╪╔м╔К╓Р╔Ё╔С╔я╔╓╔К╓╥╓©╓И, ╣╞ф╟╩Ч╓к archsw.readin.failed ╓х╓╓╓╕╔╗╔И║╪╔А╔ц╔╩║╪╔╦╓╛и╫╪╗╓╣╓Л╓К╓Х╓╕╓к╓й╓ц╓ф╓╥╓ч╓╓╓ч╓╥╓©. ╔М║╪╔ю╓╛╔╧╔©║╪╔х╓╧╓Ка╟╓н | ╓╛и╫╪╗╓╣╓Л╓ф╓╓╓К╓х╓╜╓к╡©╓╚╔╜║╪╓Р╡║╓╧╓Ё╓х╓г, ╣╞ф╟╓н╔╩╔╚╔С╔и╔╧╔ф║╪╔╦╓╚╓Ид╬юэ, ╣╞ф╟╓╧╓К╔╚║╪╔м╔К╓Р╩ьдЙ╓╥╓ф╣╞ф╟╓╧╓К╓Ё╓х╓╛╓г╓╜╓ч╓╧. фц╓к, ╔╚║╪╔м╔К╓н╔╫║╪╔╧╓Р╧╧©╥╓╥, make world ╓╥╓й╓╓╓г©╥╓╥╓╓╔╚║╪╔м╔К╓ю╓╠╔╓╔С╔╧╔х║╪╔К╓╥╓©╬Л╧Г╓к╓Ё╓н╬и╬У╓╛╦╫╓О╓Л╓ч╓╧. ╓Ё╓╕╓╓╓╕аЮ╨Н╓оф╟╨Н╓╛йщ╬з╓╣╓Л╓ч╓╩╓С. ╓╜╓а╓С╓х make world ╓╥╓ф╓╞╓ю╓╣╓╓. 3.X ╓╚╓И 4.X ╓к╔╒╔ц╔в╔╟╔Л║╪╔и╓╧╓К╓к╓о╓и╓╕╓╥╓©╓Ини╓╓╓н╓г╓╧╓╚? ╔╒╔ц╔в╔╟╔Л║╪╔и╓к╓о, ╔п╔╓╔й╔Й╔╧╔й╔ц╔в╔╥╔Г╔ц╔х╓Р╩х╓╕╓Ё╓х╓Р╤╞╓╞╓╙╓╧╓╧╓А╓╥╓ч╓╧. 4-STABLE ╔╧╔й╔ц╔в╔╥╔Г╔ц╔х╓о releng4.FreeBSD.org ╓╚╓ИфЧ╪Й╡дг╫╓г╓╧. ╔╫║╪╔╧╓Р╩х╓ц╓ф╔╒╔ц╔в╔╟╔Л║╪╔и╓╧╓К╬Л╧Г╓о, ╬э╨ы╓к╓д╓╓╓ф FreeBSD ╔о╔С╔и╔ж╔ц╔╞╓Р╩╡╬х╓╧╓К╓Х╓╕╓к╓╥╓ф╓╞╓ю╓╣╓╓. ╔╫║╪╔╧╓Р╩х╓ц╓©╔╒╔ц╔в╔╟╔Л║╪╔и╓о, ╢╥╓Л╓ф╓╓╓й╓╓╔Ф║╪╔╤╓к╓о╓ч╓ц╓©╓╞╓╙╓╧╓╧╓А╓г╓╜╓ч╓╩╓С. 3.X -> 4.X ╓н╬Л╧Г╓офц╓к╓╫╓╕╓г╓╧. ╔╫║╪╔╧╓Р╩х╓ц╓©╔╒╔ц╔в╔╟╔Л║╪╔и╓Р╩Н╓╧а╟╓к, ╪Й╫Г╓РцМ╟у©╪╓╞фи╓Ю╓Х╓╕╓к©╢╓╛╓╠╓ф╓╞╓ю╓╣╓╓.
╔о║╪╔и╔╕╔╖╔╒╔Ё╔С╔я╔а╔с╔Й╔ф╔ё лУ: ╓к╓╥╓╚ nishika@cheerful.com, 1997 г╞ 11 ╥Н 12 фЭ. FreeBSD ╓о, ╓и╓С╓й╔о║╪╔и╔г╔ё╔╧╔╞╔и╔И╔╓╔ж╓Р╔╣╔щ║╪╔х╓╥╓ф╓╓╓К╓н╓г╓╧╓╚? FreeBSD ╓о, EIDE ╓х SCSI ╔о║╪╔и╔г╔ё╔╧╔╞╔и╔И╔╓╔ж╓Р╔╣╔щ║╪╔х╓╥╓ф╓╓╓ч╓╧(╦ъ╢╧╔Ё╔С╔х╔М║╪╔И╓Б╢ч╓ъ╓ч╓╧. ╪║╓нюА╩╡╬х). ╓ч╓©фх╪╚╓н Western Digital ╔╓╔С╔©╔у╔╖║╪╔╧╓Р╩хмя╓╥╓ф╓╓╓К╓╧╓ы╓ф╓н╔и╔И╔╓╔ж(MFM, RLL, ESDI, ╓Б╓а╓М╓С IDE)╓Б╔╣╔щ║╪╔х╓╥╓ф╓╓╓ч╓╧. фх╪╚╩емм╓н╔╓╔С╔©╔у╔╖║╪╔╧╓Р╩хмя╓╧╓К ESDI ╔Ё╔С╔х╔М║╪╔И╓г╓оф╟╨Н╓╥╓й╓╓╓Б╓н╓╛╓╒╓Й, WD1002/3/6/7 ╓х╓╫╓н╦ъ╢╧╔╓╔С╔©╔у╔╖║╪╔╧╓х╬вфм╓╥╓ч╓╧. ╓и╓н SCSI ╔Ё╔С╔х╔М║╪╔И╓Р╔╣╔щ║╪╔х╓╥╓ф╓╓╓К╓н╓г╓╧╓╚? FreeBSD ╔о╔С╔и╔ж╔ц╔╞╓к╣╜╓╣╓Л╓ф╓╓╓К╢╟а╢╓й╔Й╔╧╔х╓Р╩╡╬х╓╥╓ф╓╞╓ю╓╣╓╓. ╓и╓С╓й CD-ROM ╔и╔И╔╓╔ж╓Р╔╣╔щ║╪╔х╓╥╓ф╓╓╓К╓н╓г╓╧╓╚? ╔╣╔щ║╪╔х╓╣╓Л╓ф╓╓╓К SCSI ╔Ё╔С╔х╔М║╪╔И╓кюэбЁ╓г╓╜╓К SCSI ╔и╔И╔╓╔ж╓о, ╓╧╓ы╓ф╔╣╔щ║╪╔х╓╣╓Л╓ф╓╓╓ч╓╧. ╓ч╓©, ╟й╡╪╓нюЛмя CD-ROM ╔╓╔С╔©╔у╔╖║╪╔╧╓Б╔╣╔щ║╪╔х╓╥╓ф╓╓╓ч╓╧. ╔ъ╔д╔ъ LU002(8bit), LU005(16bit) ╓╙╓Х╓с FX001D(16bit 2гэб╝). ╔╫╔к║╪ CDU 31/33A Sound Blaster хС SCSI ╔©╔╓╔в╓н CD-ROM ╬╬╡╪/Panasonic CD-ROM ATAPI ╦ъ╢╧╓н IDE CD-ROM SCSI ╓г╓й╓╓╔╚║╪╔и╓о╓╧╓ы╓ф, SCSI ╔и╔И╔╓╔ж╓Х╓Й╓Б╤к╓А╓фф╟╨Нб╝еы╓╛ цы╓╓╓Ё╓х╓╛цн╓И╓Л╓ф╓╙╓Й, ATAPI CD-ROM ╓к╓оф╟╨Н╓╥╓й╓╓╓Б╓н╓Б╓╒╓К╓Х╓╕╓г╓╧. BSDi ╓н FreeBSD 2.2 CD-ROM ╓╚╓И╓о CD ╓╚╓И╓нд╬юэ╣╞ф╟╓╛ ╔╣╔щ║╪╔х╓╣╓Л╓ф╓╓╓ч╓╧. ZIP ╔и╔И╔╓╔ж╓Р╔╣╔щ║╪╔х╓╥╓ф╓╓╓ч╓╧╓╚? ╓Б╓а╓М╓С, FreeBSD ╓о SCSI ZIP ╔и╔И╔╓╔ж(Ё╟иу╓╠)╓Р╔╣╔щ║╪╔х╓╥╓ф╓╓╓ч╓╧. ZIP ╔и╔И╔╓╔ж╓о SCSI ID ╓Р 5 ╓╚ 6 ╓кюъдЙ╓╥╓©╬Убж╓г╓й╓И╩хмя╓г╓╜╓ч╓╧╓╛, ╓Б╓╥ SCSI ╔ш╔╧╔х╔╒╔ю╔в╔©╓н BIOS ╓╛╔╣╔щ║╪╔х╓╥╓ф╓╣╓╗╓╓╓Л╓п ZIP ╔и╔И╔╓╔ж╓╚╓И╣╞ф╟╓╣╓╩╓К╓Ё╓х╓Б╓г╓╜╓ч╓╧. ╩Д╓о╓и╓н╔ш╔╧╔х╔╒╔ю╔в╔©╓╛ SCSI ID ╓Р 0 ╓Д 1 ╟йЁ╟╓кюъдЙ╓╥╓©╔г╔п╔╓╔╧╓╚╓И╣╞ф╟╓г╓╜╓К╓н╓╚цн╓Й╓ч╓╩╓С╓╛... ╔и╔╜╔Е╔А╔С╔х╓Р╩╡╬х╓╥╓ф╓╞╓ю╓╣╓╓(╓╕╓ч╓╞╓╓╓ц╓©╬Л╧Г╓о╤╣╓╗╓ф╓╞╓ю╓╣╓╓). ATAPI(IDE) ZIP ╔и╔И╔╓╔ж╓о, FreeBSD 2.2.6 ╟й╧ъ╓н╔п║╪╔╦╔Г╔С╓г╔╣╔щ║╪╔х╓╣╓Л╓ф╓╓╓ч╓╧. ╔п║╪╔╦╔Г╔С 3.0 ╟й╧ъ╓н FreeBSD ╓г╓о, ╔я╔И╔Л╔К╔щ║╪╔хюэбЁ╓н ZIP ╔и╔И╔╓╔ж╓Р╔╣╔щ║╪╔х╓╥╓ф╓╓╓ч╓╧. ╨г╤А╓н╔п║╪╔╦╔Г╔С╓н FreeBSD ╓Р╓╙╩х╓╓╓г╓╥╓©╓И, ╔╚║╪╔м╔К╔Ё╔С╔у╔ё╔╟╔Л║╪╔╥╔Г╔С╔у╔║╔╓╔К╓к scbus0, da0, ppbus0, vp0 ╓нЁф╔и╔И╔╓╔п╓╛╣╜╫р╓╣╓Л╓ф╓╓╓К╓Ё╓х╓РЁнг╖╓╥╓ф╓╞╓ю╓╣╓╓. (GENERIC ╔╚║╪╔м╔К╓к╓о vp0 ╓Р╫Э╓╞╓╧╓ы╓ф╓н╔и╔И╔╓╔п╓╛╢ч╓ч╓Л╓ф╓╓╓ч╓╧). ╓Ё╓Л╓И╓╧╓ы╓ф╓н╔и╔И╔╓╔п╓╛╓╒╓Л╓п, ╔я╔И╔Л╔К╔щ║╪╔х╓н╔и╔И╔╓╔ж╓о /dev/da0s4 ╓х╓й╓Й╓ч╓╧. ╔г╔ё╔╧╔╞╓о mount /dev/da0s4 /mnt ╓х╓╧╓К╓╚ mount_msdos /dev/da0s4 /mnt (DOS ╔г╔ё╔╧╔╞╓н╬Л╧Г) ╓х╓╧╓К╓Ё╓х╓г╔ч╔╕╔С╔х╓г╓╜╓ч╓╧. ╓╫╓Л╓╚╓И╔Й╔Ю║╪╔п╔ж╔К╔и╔И╔╓╔ж╓к╢ь╓╧╓КцМ╟у╓╙╓Х╓с, ║ж╔у╔╘║╪╔ч╔ц╔х║в╓к╢ь╓╧╓КцМ╟у╓к╓д╓╓╓ф╓Б Ёнг╖╓╥╓ф╓╙╓╓╓ф╓╞╓ю╓╣╓╓. ╓г╓о, JAZ ╓Д EZ, ╓╫╓Л╓╚╓И╓╫╓нб╬╓н╔Й╔Ю║╪╔п╔ж╔К╔и╔И╔╓╔ж╓о╔╣╔щ║╪╔х╓╥╓ф╓╓╓ч╓╧╓╚? FreeBSD ╓г╓о, IDE ╔п║╪╔╦╔Г╔С╓н EZ ╔и╔И╔╓╔ж╓Р╫Э╓╞╓╧╓ы╓ф╓н SCSI ╔г╔п╔╓╔╧╓о, SCSI ╓н╔г╔ё╔╧╔╞╓хф╠еЫ╓к╟╥╓О╓Л╓ч╓╧. ╓ч╓© IDE EZ ╓о IDE ╔и╔И╔╓╔ж╓хф╠еЫ╓х╓й╓Й╓ч╓╧. ╔╥╔╧╔ф╔Ю╡тф╞цФ╓н╔А╔г╔ё╔╒╦Р╢╧╓к╓д╓╓╓ф FreeBSD ╓╛╓и╓Л╓ш╓и╓╕╓ч╓╞ф╟╓╞╓╚дЙ╓╚╓г╓о╓╒╓Й╓ч╓╩╓С. ╓Б╓а╓М╓С╔А╔г╔ё╔╒╓РфЧ╓Лбь╓╗╓Ка╟╓к╓╫╓н╔и╔И╔╓╔ж╓н╔ч╔╕╔С╔х╓Р╡Р╫Э╓╥╓й╓╠╓Л╓п╓╓╓╠╓й╓╓╓г╓╥╓Г╓╕╓╥, FreeBSD ╓╛╓╫╓Л╓И╓Рг╖╪╠╓╧╓К╓к╓о, ╣╞ф╟╩Ч╓кЁ╟иТ╔Ф╔к╔ц╔х╓к╓Бее╦╩╓╛еЙфЧ╓╣╓Л╓ф╓╓╓К╓Ё╓х╓РЁнг╖╓╥╓й╓╠╓Л╓п╓╓╓╠╓й╓╓╓г╓╥╓Г╓╕. ║ж╔у╔╘║╪╔ч╔ц╔х║в╓к╢ь╓╧╓КцМ╟у╓Б╩╡╬х╓н╓Ё╓х. ╓и╓н╔ч╔К╔а╔щ║╪╔х╔╥╔Й╔╒╔К╔╚║╪╔и╓Р╔╣╔щ║╪╔х╓╥╓ф╓╓╓ч╓╧╓╚? ╟ЛмВ╓о ╓╫╓нб╬╓н╔г╔п╔╓╔╧╓нюА╓к╓╒╓Й╓ч╓╧. л╣л╬╓н╔╚║╪╔и╓к╓Б╓╕╓ч╓╞ф╟╓╞╓Б╓н╓╛╓╒╓Й, фц╓к AST ╦ъ╢╧╓х╓╓╓О╓Л╓ф╓╓╓К╓Б╓н╓кб©╓╞╦╚╓И╓Л╓ч╓╧. ╔╚║╪╔июъдЙ╓н╬э╨ы╓й╬ПйС╓о, &man.sio.4; ╓н╔ч╔к╔Е╔╒╔К╔з║╪╔╦╓Р╩╡╬х╓╥╓ф╓╞╓ю╓╣╓╓. USB ╔╜║╪╔э║╪╔и╓Р╩Щ╓ц╓ф╓╓╓К╓н╓г╓╧╓╛, FreeBSD ╓г╩х╓╗╓ч╓╧╓╚? USB ╔г╔п╔╓╔╧╓о FreeBSD 3.1 ╓╚╓И╔╣╔щ║╪╔х╓╣╓Л╓ч╓╥╓©╓╛, ╪баУ╓о FreeBSD 3.2 ╓г╓╒╓ц╓ф╓Б╓ч╓ю╢╟а╢╓г╓о╓й╓╓╓©╓А, и╛╓╨╓╥╓Б╟бдЙ╓╥╓фф╟╨Н╓╧╓К╓х╓о╦б╓Й╓ч╓╩╓С. ╓Б╓╥, ╓╫╓Л╓г╓Б USB ╔╜║╪╔э║╪╔и╓Р╩х╓ц╓ф╓ъ╓©╓╓╓х╓╓╓╕©м╓о, ╟й╡╪╓н╪Й╫Г╓Р╩Н╓╥╓ф╓ъ╓ф╓╞╓ю╓╣╓╓. FreeBSD 3.2 ╓╚, ╓╫╓Л╟й╧ъ╓Р╩х╓╓╓ч╓╧. ╔╚║╪╔м╔К╔Ё╔С╔у╔ё╔╟╔Л║╪╔╥╔Г╔С╔у╔║╔╓╔К╓к╟й╡╪╓н╧т╓Рди╡ц╓╥, ╔╚║╪╔м╔К╓Р╨ф╧╫цш╓╥╓ч╓╧. device uhci device ohci device usb device ukbd options KBD_INSTALL_CDEV FreeBSD 4.0 ╓Х╓Йа╟╓н╔п║╪╔╦╔Г╔С╓г╓о, бЕ╓О╓Й╓к╪║╓н╓Х╓╕╓к╓╥╓ч╓╧. controller uhci0 controller ohci0 controller usb0 controller ukbd0 options KBD_INSTALL_CDEV /dev ╔г╔ё╔Л╔╞╔х╔Й╓к╟эф╟╓╥, ╪║╓н╓Х╓╕╓к╓╥╓ф╔г╔п╔╓╔╧╔н║╪╔и╓Р╨Ню╝╓╥╓ч╓╧. &prompt.root; cd /dev &prompt.root; ./MAKEDEV kbd0 kbd1 /etc/rc.conf ╓Рйт╫╦╓╥, ╟й╡╪╓н╧т╓Рди╡ц╓╥╓ч╓╧. usbd_enable="YES" usbd_flags="" ╔╥╔╧╔ф╔Ю╓Р╨ф╣╞ф╟╓╣╓╩╓©╦Е, AT, USB н╬йЩ╓н╔╜║╪╔э║╪╔и╓╛юэбЁ╓╣╓Л╓ф╓╓╓Л╓п, AT ╔╜║╪╔э║╪╔и╓о /dev/kbd0 ╓к, USB ╔╜║╪╔э║╪╔и╓о /dev/kbd1╓к╓й╓Й╓ч╓╧. ╟ЛйЩ, USB ╔╜║╪╔э║╪╔и╓ю╓╠╓╛юэбЁ╓╣╓Л╓ф╓╓╓К╓й╓И, /dev/ukbd0 ╓х╓й╓Й╓ч╓╧. USB ╔╜║╪╔э║╪╔и╓Р╔Ё╔С╔╫║╪╔К╓гмЬмя╓╧╓К╓к╓о, ╓╫╓Л╓Р╔Ё╔С╔╫║╪╔К╔и╔И╔╓╔п╓кбп╓╥╓флю╪╗е╙╓к╩ьдЙ╓╧╓Ки╛мв╓╛╓╒╓Й╓ч╓╧. ╔╥╔╧╔ф╔Ю╓н╫И╢Э╡╫╓н╨щ╓к, ╪║╓к╪╗╓╧╓Х╓╕╓й╔Ё╔ч╔С╔и╓Р╪б╧т╓╥╓ф╓╞╓ю╓╣╓╓. &prompt.root; kbdcontrol -k /dev/kbd1 < /dev/ttyv0 > /dev/null ╓©╓ю╓╥, USB ╔╜║╪╔э║╪╔и╓╥╓╚юэбЁ╓╣╓Л╓ф╓╓╓й╓╓╬Л╧Г, ╓╫╓Л╓о /dev/kbd0 ╓х╓╥╓ф╔╒╔╞╔╩╔╧╓╣╓Л╓ч╓╧╓н╓г, ╔Ё╔ч╔С╔и╓о╪║╓н╓Х╓╕╓к╓╥╓й╓╠╓Л╓п╓й╓Й╓ч╓╩╓С. ╓╢цМ╟у╓╞╓ю╓╣╓╓. &prompt.root; kbdcontrol -k /dev/kbd0 < /dev/ttyv0 > /dev/null ╬Е╓н╔Ё╔ч╔С╔и╓о, /etc/rc.i386 ╓кди╡ц╓╧╓К╓хни╓╓╓г╓╥╓Г╓╕. ╓Ё╓нюъдЙ╓Р╟Леы╧т╓й╓ц╓ф╓╓╓Л╓п, X ╢д╤╜╓г╓Бфц╓кб╬╓нюъдЙ╓й╓╥╓к USB ╔╜║╪╔э║╪╔и╓╛мЬмя╓г╓╜╓ч╓╧. USB ╔╜║╪╔э║╪╔и╓нЁХюЧачх╢(╔ш╔ц╔х╔в╔И╔╟╣║г╫)╓о, ╓ч╓ю╓╙╓╫╓И╓╞╓╜╓а╓С╓хф╟╨Н╓╥╓й╓╓╓х╩в╓О╓Л╓ч╓╧. ╔х╔И╔ж╔К╓РхР╓╠╓К╓©╓А╓к╓Б, ╔╜║╪╔э║╪╔и╓о╔╥╔╧╔ф╔Ю╓Р╣╞ф╟╓╣╓╩╓Ка╟╓кюэбЁ╓╥╓ф╓╙╓╜, ╔╥╔Ц╔ц╔х╔ю╔╕╔С╓╧╓К╓ч╓г╓о╓╨╓╣╓й╓╓╓Х╓╕╓к╓╥╓©йЩ╓╛ни╓╓╓г╓╥╓Г╓╕. ╬э╨ы╓к╓д╓╓╓ф╓о, &man.ukbd.4; ╓н╔ч╔к╔Е╔╒╔К╔з║╪╔╦╓Р╩╡╬х╓╥╓ф╓╞╓ю╓╣╓╓. да╓╥╓╓╔п╔╧╔ч╔╕╔╧╓Р╩Щ╓ц╓ф╓╓╓К╓н╓г╓╧╓╛, ╓и╓н╓Х╓╕╓кюъдЙ╓╧╓Л╓п╓╓╓╓╓н╓г╓╧╓╚? FreeBSD ╓о Microsoft, Logitech, ATI еЫ╓н╔А║╪╔╚║╪╓╚╓И╫п╓ф╓╓╓К╔п╔╧╔ч╔╕╔╧╓х InPort ╔п╔╧╔ч╔╕╔╧╓Р╔╣╔щ║╪╔х╓╥╓ф╓╓╓ч╓╧. FreeBSD 2.X ╓н╬Л╧Г, ╔п╔╧╔ч╔╕╔╧╓н╔г╔п╔╓╔╧╔и╔И╔╓╔п╓о GENERIC ╔╚║╪╔м╔К╓ки╦╫Ю╓г╢ч╓ч╓Л╓ч╓╧╓╛, FreeBSD 3.X ╟й╧ъ╓г╓ои╦╫Ю╓г╢ч╓ч╓Л╓ф╓╓╓ч╓╩╓С. ╓Б╓╥╔п╔╧╔ч╔╕╔╧╓н╔г╔п╔╓╔╧ ╔и╔И╔╓╔п╓Р╢ч╓Ю╔╚║╪╔м╔К╓Р╪╚й╛╓г╧╫цш╓╧╓К╬Л╧Г╓к╓о, ╔╚║╪╔м╔К╔Ё╔С╔у╔ё╔╟╔Л║╪╔╥╔Г╔С╔у╔║╔╓╔К╓к╟й╡╪╓н╧т╓╛╢ч╓ч╓Л╓ф╓╓╓К╓Ё╓х╓РЁнг╖╓╥╓ф╓╞╓ю╓╣╓╓. ╓╫╓Л╓о FreeBSD 3.0 ╓Р╢ч╓Ю, ╓╫╓Л╟йа╟╓н╔Й╔Й║╪╔╧╓н╬Л╧Г╓о╪║╓н╓х╓╙╓Й, device mse0 at isa? port 0x23c tty irq5 vector mseintr FreeBSD 3.X ╓г╓о, ╪║╓н╓х╓╙╓Й╓г╓╧. device mse0 at isa? port 0x23c tty irq5 ╓╫╓╥╓ф FreeBSD 4.X ╓х╓╫╓Л╟й╧ъ╓г╓о, ╪║╓н╓Х╓╕╓к╓й╓Й╓ч╓╧. device mse0 at isa? port 0x23c irq5 дл╬О╔п╔╧╔ч╔╕╔╧╓к╓оюЛмя╓н╔╓╔С╔©╔у╔╖║╪╔╧╔╚║╪╔и╓╛иМб╟╓╥╓ф╓╓╓ч╓╧. ╔╓╔С╔©╔у╔╖║╪╔╧╔╚║╪╔и╓к╓Х╓ц╓ф╓о╔щ║╪╔х╔╒╔и╔Л╔╧╓ДЁД╓Й╧Ч╓ъхж╧Ф╓Р╬Е╣╜╓н юъдЙ╟йЁ╟╓кйя╧╧╓г╓╜╓К╓╚╓Б╓╥╓Л╓ч╓╩╓С. ╬э╓╥╓╞╓о╔п╔╧╔ч╔╕╔╧╓н╔ч╔к╔Е╔╒╔К╓х &man.mse.4; ╓н╔ч╔к╔Е╔╒╔К╔з║╪╔╦╓Р╩╡╬х╓╥╓ф╓╞╓ю╓╣╓╓. PS/2 ╔ч╔╕╔╧(║ж╔ч╔╕╔╧╔щ║╪╔х╔ч╔╕╔╧║в, ║ж╔╜║╪╔э║╪╔и╔ч╔╕╔╧║в)╓Р ╩х╓╕╓к╓о╓и╓н╓Х╓╕╓кюъдЙ╓╧╓Л╓п╓╓╓╓╓н╓г╓╧╓╚? ╓╒╓й╓©╓╛ 2.2.5 ╟й╧ъ╓н╔п║╪╔╦╔Г╔С FreeBSD ╓Р╩х╓ц╓ф╓╓╓К╓н╓й╓И, и╛мв╓й╔и╔И╔╓╔п psm ╓о╔╚║╪╔м╔К╓к╢ч╓ч╓Л╓ф╓╓╓фм╜╦З╓к╓й╓ц╓ф╓╓╓ч╓╧. ╔╚║╪╔м╔К╓о╣╞ф╟╩Ч╓к PS/2 ╔ч╔╕╔╧╓Р╦║╫п╓╧╓К╓г╓╥╓Г╓╕. ╓╒╓й╓©╓н╩х╓ц╓ф╓╓╓К FreeBSD ╓╛хФЁсе╙©╥╓╥╓╓╓╠╓Л╓иа╟╓н╔п║╪╔╦╔Г╔С(2.1.x ╟й╧ъ)╓н╓Б╓н╓й╓И, ╔╓╔С╔╧╔х║╪╔К╓н╩Ч╓к, ц╠╓к╔╚║╪╔м╔К╓н╔Ё╔С╔у╔ё╔╟╔Л║╪╔╥╔Г╔С╓н╔А╔к╔Е║╪╬Е╓г PS/2 ╔ч╔╕╔╧╓Рм╜╦З╡╫╓╧╓К╓ю╓╠╓г╓╧, ╓╒╓К╓╓╓о╦Е╓г boot: ╔в╔М╔С╔в╔х╬Е╓г ╓Р╩ьдЙ╓╧╓К╓Ё╓х╓г╓Б╔А╔к╔Е║╪╓о╦╫╓Л╓ч╓╧. ╔г╔у╔╘╔К╔х╓г╓ол╣╦З╓кюъдЙ╓╣╓Л╓ф╓╓╓ч╓╧╓н╓г, лю╪╗е╙╓км╜╦З╡╫╓╥╓ф╓╒╓╡╓й╓╓╓х╓╓╓╠╓ч╓╩╓С. ╓╒╓й╓©╓н╩х╓ц╓ф╓╓╓К FreeBSD ╓╛хФЁсе╙╦е╓╓╓Б╓н╓й╓И, ╔╚║╪╔м╔К╔Ё╔С╔у╔ё╔╟╔Л║╪╔╥╔Г╔С╔у╔║╔╓╔К╓к╟й╡╪╓н╧т╓Р╡ц╓╗╓ф ╔╚║╪╔м╔К╓Р╨ф╔Ё╔С╔я╔╓╔К╓╧╓Ки╛мв╓╛╓╒╓Й╓ч╓╧. ╓╫╓Л╓о FreeBSD 3.0 ╓Р╢ч╓Ю, ╓╫╓Л╟йа╟╓н╔Й╔Й║╪╔╧╓г╓о╪║╓н╓х╓╙╓Й, device psm0 at isa? port "IO_KBD" conflicts tty irq 12 vector psmintr FreeBSD 3.1 ╓Р╢ч╓Ю, ╓╫╓Л╟й╧ъ╓н╔Й╔Й║╪╔╧╓г╓о╪║╓н╓х╓╙╓Й, device psm0 at isa? tty irq 12 FreeBSD 4.0 ╓х╓╫╓Л╟й╧ъ╓н╔Й╔Й║╪╔╧╓г╓о╪║╓н╓х╓╙╓Й╓г╓╧. device psm0 at atkbdc? irq 12 ╔╚║╪╔м╔К╓н╨ф╧╫цш╓к╓д╓╓╓ф╓Х╓╞цн╓И╓й╓╓╓н╓г╓╒╓Л╓п, ╔╚║╪╔м╔К╓н╔Ё╔С╔у╔ё╔╟╔Л║╪╔╥╔Г╔С╓Р╩╡╬х╓╥╓ф╓╞╓ю╓╣╓╓. ╣╞ф╟╩Ч╓к╔╚║╪╔м╔К╓╛ psm0 ╓Р╦║╫п╓╥╓©╓И, psm0 ╓н╔╗╔С╔х╔Й╓╛ /dev ╓нцФ╓к╓╒╓К╓Ё╓х╓РЁнг╖╓╥╓ф╓╞╓ю╓╣╓╓. ╓╫╓Л╓к╓о, ╟й╡╪╓н╓Х╓╕╓к╓╥╓ч╓╧. &prompt.root; cd /dev; sh MAKEDEV psm0 ╓Ё╓Л╓о root ╓г╔М╔╟╔╓╔С╓╥╓ф╓╓╓К╓х╓╜╓к╧т╓й╓ц╓ф╓╞╓ю╓╣╓╓. X Window System ╟йЁ╟╓н╢д╤╜╓г╔ч╔╕╔╧╓Р╩х╓╕╓Ё╓х╓о╡дг╫╓г╓╧╓╚? ╓Б╓╥╔г╔у╔╘╔К╔х╓н╔Ё╔С╔╫║╪╔К╔и╔И╔╓╔п╓г╓╒╓К syscons ╓Р╩х╓ц╓ф╓╓╓К╓н╓г╓╒╓Л╓п, ╔ф╔╜╔╧╔х╔Ё╔С╔╫║╪╔К╬Е╓г╔ч╔╕╔╧╓Р╩х╓ц╓ф, ╔ф╔╜╔╧╔х╓н╔╚╔ц╔х╔╒╔С╔и╔з║╪╔╧╔х╓╛╓г╓╜╓ч╓╧. ╔ч╔╕╔╧╔г║╪╔Б╔С╓г╓╒╓К moused ╓Р╣╞ф╟╓╥, ╡╬аш╔Ё╔С╔╫║╪╔К╓г╔ч╔╕╔╧╔щ╔╓╔С╔©╓Рм╜╦З╓к╓╥╓ф╓╞╓ю╓╣╓╓. &prompt.root; moused -p /dev/xxxx -t yyyy &prompt.root; vidcontrol -m on ╓Ё╓Ё╓г xxxx ╓о╔ч╔╕╔╧╓н╔г╔п╔╓╔╧л╬, yyyy ╓о╔ч╔╕╔╧╓н╔в╔М╔х╔Ё╔К╔©╔╓╔в╓г╓╧. ╔╣╔щ║╪╔х╓╣╓Л╓ф╓╓╓К╔в╔М╔х╔Ё╔К╔©╔╓╔в╓к╓д╓╓╓ф╓о &man.moused.8; ╓н╔ч╔к╔Е╔╒╔К╔з║╪╔╦╓Р╩╡╬х╓╥╓ф╓╞╓ю╓╣╓╓. ╔╥╔╧╔ф╔Ю╓Р╣╞ф╟╓╧╓К╩Ч╓к╪╚ф╟е╙╓к moused ╓Р╣╞ф╟╓╥╓©╓╓╬Л╧Г╓к╓о, ╪║╓н╓Х╓╕╓к╓╥╓ч╓╧. FreeBSD 2.2.1 ╓г╓о╟й╡╪╓нйя©Т╓Р /etc/sysconfig ╓гюъдЙ╓╥╓ф╓╞╓ю╓╣╓╓. mousedtype="yyyy" mousedport="xxxx" mousedflags="" FreeBSD 2.2.2 ╟й╧ъ╓н╔п║╪╔╦╔Г╔С╓г╓о /etc/rc.conf ╓г╟й╡╪╓н╓Х╓╕╓кюъдЙ╓╥╓ч╓╧. moused_type="yyyy" moused_port="xxxx" moused_flags="" FreeBSD 3.1 ╓х╓╫╓Л╟й╧ъ╓г PS/2 ╔ч╔╕╔╧╓РмЬмя╓╧╓К╬Л╧Г╓о, moused_enable="YES" ╓Р /etc/rc.conf ╓к╫Я╓╜╡ц╓╗╓К╓ю╓╠╓г╓╧. ╓ч╓©, ╣╞ф╟╩Ч╓к╓╧╓ы╓ф╓н╡╬ашц╪кЖ╓г, и╦╫Ю╓н╔Ё╔С╔╫║╪╔К╓к╡ц╓╗╔ч╔╕╔╧╔г║╪╔Б╔С╓Б╩х╓╗╓К╓Х╓╕╓к╓╥╓©╓╓, ╓х╓╓╓╕╬Л╧Г╓к╓о, ╟й╡╪╓н╧т╓Р /etc/rc.conf ╓к╡ц╓╗╓ч╓╧. allscreens_flags="-m on" FreeBSD 2.2.6 ╟й╧ъ╓н╬Л╧Г╓г хФЁсе╙©╥╓╥╓╓╔╥╔Й╔╒╔К╔ч╔╕╔╧╓Р╩х╓ц╓ф╓╓╓К╓й╓И╓п, ╔ч╔╕╔╧╔г║╪╔Б╔С╓о╔ч╔╕╔╧╓н╔в╔М╔х╔Ё╔К╔©╔╓╔в╓Р╪╚ф╟х╫йл╓г╓╜╓ч╓╧. ╪╚ф╟х╫йл╓Р╩Н╓ъ╓К╓к╓о, ╔в╔М╔х╔Ё╔К╔©╔╓╔в╓х╓╥╓ф auto ╓Р╩ьдЙ╓╥╓ч╓╧. ╔ч╔╕╔╧╔г║╪╔Б╔С╓Р╪б╧тцФ╓о, ╔ч╔╕╔╧╔г║╪╔Б╔С╓хб╬╓н╔в╔М╔╟╔И╔Ю(нЦ╓╗╓п X Window System)╓н╢ж╓г╔ч╔╕╔╧╓ь╓н╔╒╔╞╔╩╔╧╓Рд╢ю╟╓╥╓й╓╠╓Л╓п╓й╓Й╓ч╓╩╓С. ╓Ё╓нлДбЙ╓к╓д╓╓╓ф╓о X ╓х╔ч╔╕╔╧╓Р╓╢мВ╓╞╓ю╓╣╓╓. ╔ч╔╕╔╧╓Р╩х╓ц╓ф, ╔ф╔╜╔╧╔х╔Ё╔С╔╫║╪╔К╓г╔╚╔ц╔х╔╒╔С╔и╔з║╪╔╧╔х╓╧╓К╓к╓о╓и╓╕╓╥╓©╓И╓Х╓╓╓н╓г╓╧╓╚? ╔ч╔╕╔╧╔г║╪╔Б╔С╓Р╣╞ф╟ (а╟╓н╪алД╓кбп╓╧╓КеЗ╓╗╓Р╩╡╬х╓╥╓ф╓╞╓ю╓╣╓╓) ╓╥╓©╓╒╓х, ╔э╔©╔С 1(╨╦╔э╔©╔С)╓Р╡║╓╥╓й╓╛╓И╔ч╔╕╔╧╓Рф╟╓╚╓╥╓фхо╟о╓Р╩ьдЙ╓╥╓ч╓╧. ╔э╔©╔С 2(цФ╔э╔©╔С)╓ч╓©╓о╔э╔©╔С 3(╠╕╔э╔©╔С)╓Р╔╞╔Й╔ц╔╞╓╧╓К╓х╔ф╔╜╔╧╔х ╔╚║╪╔╫╔К╓н╟лцж╓ка╙бР╓╥╓©хо╟о╓н╔ф╔╜╔╧╔х╓╛╔з║╪╔╧╔х╓╣╓Л╓ч╓╧. FreeBSD 2.2.6 ╟й╧ъ╓г╓о, ╔э╔©╔С 2 ╓Р╔╞╔Й╔ц╔╞╓╧╓К╓х╔з║╪╔╧╔х╓╣╓Л, ╔э╔©╔С 3 ╓Р╔╞╔Й╔ц╔╞╓╥╓©╬Л╧Г╓к╢Шб╦╓на╙бРхо╟о╓╛╦╫╨ъ╓н╔ч╔╕╔╧╔щ╔╓╔С╔©╓н╟лцж╓ч╓г ║ж╠Дд╧╓ч╓©╓оц╩╫л║в╓╣╓Л╓ч╓╧. ╓Б╓╥╔ч╔╕╔╧╓кцФ╔э╔©╔С╓╛╓й╓╓╓й╓И, moused ╓н╔╙╔в╔╥╔Г╔С╓Р╩х╓ц╓фцФ╔э╔©╔С╓н╔╗╔ъ╔Е╔Л║╪╔╥╔Г╔С╓Р╓╧╓К╓╚, б╬╓н╔э╔©╔С╓РцФ╔э╔©╔С╓х╓╥╓ф╩х╓╕╩Ж╓╛╓г╓╜╓ч╓╧. ╬э╓╥╓╞╓о &man.moused.8; ╓н╔ч╔к╔Е╔╒╔К╔з║╪╔╦╓Р╩╡╬х╓╥╓ф╓╞╓ю╓╣╓╓. USB ╔ч╔╕╔╧╓Р╩Щ╓ц╓ф╓╓╓К╓н╓г╓╧╓╛, FreeBSD ╓г╩х╓╗╓ч╓╧╓╚? USB ╔г╔п╔╓╔╧╓о FreeBSD 3.1 ╓╚╓И╔╣╔щ║╪╔х╓╣╓Л╓ч╓╥╓©╓╛, ╪баУ╓о FreeBSD 3.2 ╓г╓╒╓ц╓ф╓Б╓ч╓ю╢╟а╢╓г╓о╓й╓╓╓©╓А, и╛╓╨╓╥╓Б╟бдЙ╓╥╓фф╟╨Н╓╧╓К╓х╓о╦б╓Й╓ч╓╩╓С. ╓Б╓╥, ╓╫╓Л╓г╓Б USB ╔ч╔╕╔╧╓Р╩х╓ц╓ф╓ъ╓©╓╓╓х╓╓╓╕©м╓о, ╟й╡╪╓н╪Й╫Г╓Р╩Н╓╥╓ф╓ъ╓ф╓╞╓ю╓╣╓╓. FreeBSD 3.2 ╓╚, ╓╫╓Л╟й╧ъ╓Р╩х╓╓╓ч╓╧. ╔╚║╪╔м╔К╔Ё╔С╔у╔ё╔╟╔Л║╪╔╥╔Г╔С╔у╔║╔╓╔К╓к╟й╡╪╓н╧т╓Рди╡ц╓╥, ╔╚║╪╔м╔К╓Р╨ф╧╫цш╓╥╓ч╓╧. device uhci device ohci device usb device ums FreeBSD 4.0 ╓Х╓Йа╟╓н╔п║╪╔╦╔Г╔С╓г╓о, бЕ╓О╓Й╓к╪║╓н╓Х╓╕╓к╓╥╓ч╓╧. controller uhci0 controller ohci0 controller usb0 device ums0 /dev ╔г╔ё╔Л╔╞╔х╔Й╓к╟эф╟╓╥, ╪║╓н╓Х╓╕╓к╓╥╓ф╔г╔п╔╓╔╧╔н║╪╔и╓Р╨Ню╝╓╥╓ч╓╧. &prompt.root; cd /dev &prompt.root; ./MAKEDEV ums0 /etc/rc.conf ╓Рйт╫╦╓╥, ╟й╡╪╓н╧т╓Рди╡ц╓╥╓ч╓╧. moused_enable="YES" moused_type="auto" moused_port="/dev/ums0" moused_flags="" usbd_enable="YES" usbd_flags="" moused ╓нюъдЙ╓н╬э╨ы╓к╓д╓╓╓ф╓о, а╟╧Ю╓Б╩╡╬х╓╥╓ф╓╞╓ю╓╣╓╓. X ╓н╔╩╔ц╔╥╔Г╔С╓г USB ╔ч╔╕╔╧╓Р╩х╓╕╓к╓о, XF86Config ╓Рйт╫╦╓╧╓Ки╛мв╓╛╓╒╓Й╓ч╓╧. XFree86 3.3.2, ╓Б╓╥╓╞╓о╓╫╓Л╟й╧ъ╓РмЬмя╓╥╓ф╓╓╓К╬Л╧Г╓о, Pointer ╔╩╔╞╔╥╔Г╔С╓╛╪║╓н╓Х╓╕╓к╓й╓ц╓ф╓╓╓К╓Ё╓х╓РЁнг╖╓╥╓ф╓╞╓ю╓╣╓╓. Device "/dev/sysmouse" Protocol "Auto" ╓╫╓Л╓Х╓Йа╟╓н╔п║╪╔╦╔Г╔С╓н XFree86 ╓РмЬмя╓╥╓ф╓╓╓К╬Л╧Г╓о, Pointer ╔╩╔╞╔╥╔Г╔С╓╛╪║╓н╓Х╓╕╓к╓й╓ц╓ф╓╓╓К╓Ё╓х╓РЁнг╖╓╥╓ф╓╞╓ю╓╣╓╓. Device "/dev/sysmouse" Protocol "SysMouse" X ╢д╤╜╓г╓н╔ч╔╕╔╧╓нмЬмя╓к╓д╓╓╓ф╓о, б╬╓н╧Ю╓Б╩╡╬х╓╥╓ф╓╞╓ю╓╣╓╓. USB ╔ч╔╕╔╧╓нЁХюЧачх╢(╔ш╔ц╔х╔в╔И╔╟╣║г╫)╓о, ╓ч╓ю╓╙╓╫╓И╓╞╓╜╓а╓С╓хф╟╨Н╓╥╓й╓╓╓х╩в╓О╓Л╓ч╓╧. ╔х╔И╔ж╔К╓РхР╓╠╓К╓©╓А╓к╓Б, ╔ч╔╕╔╧╓о╔╥╔╧╔ф╔Ю╓Р╣╞ф╟╓╣╓╩╓Ка╟╓кюэбЁ╓╥╓ф╓╙╓╜, ╔╥╔Ц╔ц╔х╔ю╔╕╔С╓╧╓К╓ч╓г╓о╓╨╓╣╓й╓╓╓Х╓╕╓к╓╥╓©йЩ╓╛ни╓╓╓г╓╥╓Г╓╕. ╓О╓©╓╥╓н╔ч╔╕╔╧╓к╓о╔ш╔╓║╪╔К╣║г╫╓ДйьмЬ╓й╔э╔©╔С╓╛╓д╓╓╓ф╓╓╓К╓н╓г╓╧╓╛, ╓Ё╓Л╓о FreeBSD ╓г╓Б╩х╓╗╓К╓н╓г╓╧╓╚? еЗ╓╗╓о╩дг╟╓й╓╛╓И║ж╬Л╧Г╓к╓Х╓Й╓ч╓╧║в╓г╓╧. ╓Ё╓╕╓╥╓©╔ч╔╕╔╧╓ниу╡це╙╓й╣║г╫╓обГдЯ╓н╬Л╧Г, фц╪Л╓й╔и╔И╔╓╔п╓Ри╛мв╓х╓╥╓ч╓╧. ╔ч╔╕╔╧╓н╔г╔п╔╓╔╧╔и╔И╔╓╔п╓Д╔Ф║╪╔╤╓н╔в╔М╔╟╔И╔Ю╓╛ ╓╫╓н╔ч╔╕╔╧╓кбп╓╧╓К╦гм╜╓н╔╣╔щ║╪╔х╓Р╓╥╓ф╓╓╓й╓╓╬Л╧Г╓к╓о, и╦╫Юе╙╓й 2 ╔э╔©╔С/3 ╔э╔©╔С╔ч╔╕╔╧╓н╓Х╓╕╓к©╤иЯ╓╓╓ч╓╧. X ╔╕╔ё╔С╔и╔╕╔╥╔╧╔ф╔Ю╓н╢д╤╜╓г╓н╔ш╔╓║╪╔К╓н╩х╓╓йЩ╓к╓д╓╓╓ф╓о, X ╓х╔ш╔╓║╪╔К╓н╧Ю╓Р╓╢мВ╓╞╓ю╓╣╓╓. ╓О╓©╓╥╓н╔ч╔╕╔╧╓о╓╜╓а╓С╓хф╟╓╓╓ф╓╞╓Л╓й╓╓╓Х╓╕╓г╓╧. ╔ч╔╕╔╧╔╚║╪╔╫╔К╓╛╡ХллцФ╓Р╓х╓с╓ч╓О╓Й╓ч╓╧. ╓Ё╓н╔ч╔╕╔╧╓к╓о╔ш╔╓║╪╔К╓╛╓д╓╓╓ф╓╓╓ф, юэбЁ╓о PS/2 ╔щ║╪╔х╓г╓╧. FreeBSD 3.2 ╓╙╓Х╓с╓╫╓Л╟йа╟╓н PS/2 ╔ч╔╕╔╧╔и╔И╔╓╔п psm ╓к╓о, Logitech ╔Б╔г╔К M-S48 ╓х╓╫╓н OEM ╓н╔ш╔╓║╪╔К╔ч╔╕╔╧╓гит╤Я╧Г╓╛х╞ю╦╓╥╓ч╓╧. ╟й╡╪╓н╔я╔ц╔а╓Р /sys/i386/isa/psm.c ╓ке╛мя╓╥╓ф, ╔╚║╪╔м╔К╓Р╨ф╧╫цш╓╥╓ф╓╞╓ю╓╣╓╓. Index: psm.c =================================================================== RCS file: /src/CVS/src/sys/i386/isa/Attic/psm.c,v retrieving revision 1.60.2.1 retrieving revision 1.60.2.2 diff -u -r1.60.2.1 -r1.60.2.2 --- psm.c 1999/06/03 12:41:13 1.60.2.1 +++ psm.c 1999/07/12 13:40:52 1.60.2.2 @@ -959,14 +959,28 @@ sc->mode.packetsize = vendortype[i].packetsize; /* set mouse parameters */ +#if 0 + /* + * A version of Logitech FirstMouse+ won't report wheel movement, + * if SET_DEFAULTS is sent... Don't use this command. + * This fix was found by Takashi Nishida. + */ i = send_aux_command(sc->kbdc, PSMC_SET_DEFAULTS); if (verbose >= 2) printf("psm%d: SET_DEFAULTS return code:%04x\n", unit, i); +#endif if (sc->config & PSM_CONFIG_RESOLUTION) { sc->mode.resolution = set_mouse_resolution(sc->kbdc, - (sc->config & PSM_CONFIG_RESOLUTION) - 1); + (sc->config & PSM_CONFIG_RESOLUTION) - 1); + } else if (sc->mode.resolution >= 0) { + sc->mode.resolution + = set_mouse_resolution(sc->kbdc, sc->dflt_mode.resolution); + } + if (sc->mode.rate > 0) { + sc->mode.rate = set_mouse_sampling_rate(sc->kbdc, sc->dflt_mode.rate); } + set_mouse_scaling(sc->kbdc, 1); /* request a data packet and extract sync. bits */ if (get_mouse_status(sc->kbdc, stat, 1, 3) < 3) { FreeBSD 3.2 ╓Х╓Й©╥╓╥╓╓╔Й╔Й║╪╔╧╓г╓о╓╜╓а╓С╓хф╟╨Н╓╧╓К╓о╓╨╓г╓╧. ╔И╔ц╔в╔х╔ц╔в PC ╓н╔ч╔╕╔╧/╔х╔И╔ц╔╞╔э║╪╔К/╔©╔ц╔а╔я╔ц╔и╓о╩х╓╗╓ч╓╧╓╚? а╟╓н╪алД╓кбп╓╧╓КеЗ╓╗╓х, ╔Б╔п╔╓╔К╔Ё╔С╔т╔Е║╪╔ф╔ё╔С╔╟╓н╔з║╪╔╦╓Р╓╢мВ╓╞╓ю╓╣╓╓. ╓и╓С╓й╔ф║╪╔в╔и╔И╔╓╔ж╓Р╔╣╔щ║╪╔х╓╥╓ф╓╓╓ч╓╧╓╚? FreeBSD ╓о SCSI ╓х QIC-36 (QIC-02 ╔╓╔С╔©╔у╔╖║╪╔╧иу╓╜) ╓Р╔╣╔щ║╪╔х╓╥╓ф╓╓╓ч╓╧. ╓Ё╓Л╓И╓к╓о 8-mm (Exabyte ╓х╦ф╓п╓Л╓ф╓╓╓ч╓╧) ╓Д DAT ╔и╔И╔╓╔ж╓Б╢ч╓ч╓Л╓ф╓╓╓ч╓╧. ╫И╢Э╓н 8-mm ╔и╔И╔╓╔ж╓нцФ╓к╓о SCSI-2 ╓х╓ч╓ц╓©╓╞╦ъ╢╧ю╜╓Р╩Щ╓©╓й╓╓╓Б╓н╓╛╓╒╓Й╓ч╓╧. ╓Ё╓Л╓И╓о FreeBSD ╬Е╓г╓оф╟╨Н╓╥╓ч╓╩╓С. ╓и╓С╓й╔ф║╪╔в╔а╔╖╔С╔╦╔Ц║╪╓Р╔╣╔щ║╪╔х╓╥╓ф╓╓╓ч╓╧╓╚? FreeBSD 2.2 ╓о ch(4) ╔г╔п╔╓╔╧╓х chio(1) ╔Ё╔ч╔С╔и╓Р╩хмя╓╥╓© SCSI ╔а╔╖╔С╔╦╔Ц║╪╓Р╔╣╔щ║╪╔х╓╥╓ф╓╓╓ч╓╧. ╪б╨щ╓н╔а╔╖╔С╔╦╔Ц║╪╓ню╘╦ФйЩк║╓н╬э╨ы╓о, chio(1) ╓н╔ч╔к╔Е╔╒╔К╔з║╪╔╦╓Р╩╡╬х╓╥╓ф╓╞╓ю╓╣╓╓. ╩хмя╓╥╓ф╓╓╓Кю╫ий╓╛ AMANDA ╓н╓Х╓╕╓к╔а╔╖╔С╔╦╔Ц║╪╓кбп╠Ч╨я╓ъ╓н╓Б╓н╓г╓й╓╓╬Л╧Г╓о, ╪║╓н╓Ё╓х╓к╓д╓╓╓фн╠╟у╓╥╓ф╓╞╓ю╓╣╓╓. ╓╫╓Л╓И╓ню╫ий╓ог╓╟у╓н╔щ╔╓╔С╔х╢ж╓н╔ф║╪╔в╓н╟эф╟╓Рю╘╦Ф╓╧╓К╓ю╓╠╓й╓н╓г, ╔ф║╪╔в╓╛╓и╓н╔╧╔М╔ц╔х╓кфЧ╓ц╓ф╓╓╓К╓╚, ╦╫╨ъ╔и╔И╔╓╔ж╓к╓╒╓К╔ф║╪╔в╓╛ ╓и╓н╔╧╔М╔ц╔х╓клА╓К╓ы╓╜╓╚╓Ргд╟╝╓╥╓ф╓╙╓╞и╛мв╓╛╓╒╓Й╓ч╓╧. ╓и╓С╓й╔╣╔╕╔С╔и╔╚║╪╔и╓Р╔╣╔щ║╪╔х╓╥╓ф╓╓╓ч╓╧╓╚? FreeBSD ╓о SoundBlaster, SoundBlaster Pro, SoundBlaster 16, Pro Audio Spectrum 16, AdLib ╓╫╓Л╓╚╓И Gravis UltraSound ╔╣╔╕╔С╔и╔╚║╪╔и╓Р ╔╣╔щ║╪╔х╓╥╓ф╓╓╓ч╓╧. MPU-401 ╓Д╓╫╓н╦ъ╢╧╔╚║╪╔и╓Б╣║г╫╓кю╘╦б╓о╓╒╓К╓Б╓н╓н ╔╣╔щ║╪╔х╓╣╓Л╓ф╓╓╓ч╓╧. ╔ч╔╓╔╞╔М╔╫╔у╔х╔╣╔╕╔С╔и╔╥╔╧╔ф╔Ю╓н╔╧╔з╔ц╔╞╓к╫Ю╣Р ╓╥╓©╔╚║╪╔и╓Б, pcm ╔и╔И╔╓╔п╓г╔╣╔щ║╪╔х╓╣╓Л╓ф╓╓╓ч╓╧. ╓Ё╓Л╓И╓о╔╣╔╕╔С╔и╓к╓д╓╓╓ф╓н╓ъ╓ноц╓г╓╧! ╓Ё╓Л╓И╓н╔и╔И╔╓╔п╓о CD-ROM, SCSI, ╔╚║╪╔и╬Е╓к╓╒╓К╔╦╔Г╔╓╔╧╔ф╔ё╔ц╔╞╓Р╔╣╔щ║╪╔х╓╥╓ф╓╓╓ч╓╩╓С (SoundBlaster ╓онЦЁ╟╓г╓╧). SoundBlaster SCSI ╔╓╔С╔©╔у╔╖║╪╔╧╓ххС SCSI CD-ROM ╓о╔╣╔щ║╪╔х╓╥╓ф╓╓╓ч╓╧╓╛, ╓╫╓н╔г╔п╔╓╔╧╓╚╓И╓о╣╞ф╟╓г╓╜╓ч╓╩╓С. pcm ╔и╔И╔╓╔п╓г es1370 ╓╚╓И╡╩╓╛╫п╓й╓╓╓н╓о╓и╓╕╓к╓╚╓й╓Й╓ч╓╩╓С╓╚? ╔ч╔╥╔С╓Р╣╞ф╟╓╧╓К╓╢╓х╓к╟й╡╪╓н╔Ё╔ч╔С╔и╓Р╪б╧т╓╥╓ф╓╞╓ю╓╣╓╓. &prompt.root; mixer pcm 100 vol 100 cd 100 ╓и╓С╓й╔м╔ц╔х╔О║╪╔╞╔╚║╪╔и╓Р╔╣╔щ║╪╔х╓╥╓ф╓╓╓ч╓╧╓╚? ╓Х╓Й╢╟а╢╓й╟ЛмВ╓к╓д╓╓╓ф╓о╔╓║╪╔╣╔м╔ц╔х╔╚║╪╔и╓нюА╓Р╩╡╬х╓╥╓ф╓╞╓ю╓╣╓╓. ©Тцм╠И╩╩╔Ё╔в╔М╔╩╔ц╔╣╓Р╩Щ╓ц╓ф╓╓╓ч╓╩╓С╓╛, ╡©╓╚╓ч╓╨╓╓╓г╓╥╓Г╓╕╓╚? ╓Ё╓Л╓И╓о 386/486SX/486SLC ╓Р╩Щ╓ц╓ф╓╓╓К╬Л╧Г╓к╠ф╤а╓╥╓ч╓╧ - ╓ш╓╚╓н╔ч╔╥╔С╓г╓о CPU ╓кфБб╒╓╣╓Л╓ф╓╓╓ч╓╧. ╟Лхл╓к╓Ё╓Л╓И╓олДбЙ╓х╓о╓й╓Й╓ч╓╩╓С. ╓╥╓╚╓╥, ©Тцм╠И╩╩╔╗╔ъ╔Е╔Л║╪╔╥╔Г╔С╔Ё║╪╔и╓н╔я╔у╔╘║╪╔ч╔С╔╧╓╚, ю╣Ён╓╣╓н╓╓╓╨╓Л╓╚╓Ра╙бР╓╧╓К╬У╤╥╓╛╓╒╓Й╓ч╓╧(╬э╓╥╓╞╓о FP ╔╗╔ъ╔Е╔Л║╪╔╥╔Г╔С ╓к╓д╓╓╓ф╓нюА╓Р╓╢мВ╓╞╓ю╓╣╓╓). ╓х╓╞╓к, X ╬Е╓г╦л╓Риа╓╞╨щ╓к╓х╓ф╓Бцы╓╞╓й╓К╓Ё╓х╓г╓╥╓Г╓╕. ©Тцм╠И╩╩╔Ё╔в╔М╔╩╔ц╔╣╓Р╧ьфЧ╓╣╓Л╓К╓Ё╓х╓Р╤╞╓╞╓╙╓╧╓╧╓А╓╥╓ч╓╧. ╓х╓ф╓БлРн╘╓д╓Ё╓х╓г╓╥╓Г╓╕. б╬╓н©Тцм╠И╩╩╔Ё╔в╔М╔╩╔ц╔╣╓Х╓Й╓Бм╔╓Л╓©╔Ё╔в╔М╔╩╔ц╔╣╓Б╓╒╓Й╓ч╓╧. ╓Ё╓Л╓о╦ю╓╓╓к╓╞╓╓╓Ё╓х╓й╓н╓г╓╧╓╛, Intel ╓РгЦ╓╕╓©╓А╓клЖ╣╞╓к╓й╓К©м╓Б╓╓╓й╓╓╓г╓╥╓Г╓╕. ╓╫╓Л╓╛ FreeBSD ╬Е╓гф╟╓╞╓х╓╓╓╕Ён©╝╓╛╓й╓╓╓н╓й╓И, ╔╞╔М║╪╔С╓к╓╢мя©╢╓Р. FreeBSD ╓╛╔╣╔щ║╪╔х╓╧╓К╔г╔п╔╓╔╧╓об╬╓к╓Б╓╒╓К╓С╓г╓╥╓Г╓╕╓╚? FreeBSD ╔о╔С╔и╔ж╔ц╔╞╓к╣╜╓╣╓Л╓ф╓╓╓К, ╔╣╔щ║╪╔х╓╣╓Л╓ф╓╓╓Кб╬╓н╔г╔п╔╓╔╧╓н╟ЛмВ╓Р╩╡╬х╓╥╓ф╓╞╓ю╓╣╓╓. ╔я╔О║╪╔ч╔м║╪╔╦╔А╔С╔х╣║г╫иу╓╜╓н╔И╔ц╔в╔х╔ц╔в PC ╓Р╩Щ╓ц╓ф╓╓╓К╓н╓г╓╧╓╛... FreeBSD ╓о╟ЛиТ╓н╔ч╔╥╔С╓н APM ╓Р╔╣╔щ║╪╔х╓╥╓ф╓╓╓ч╓╧. LINT ╔╚║╪╔м╔К╔Ё╔С╔у╔ё╔╟╔у╔║╔╓╔К ╓н APM ╓ниТй╛╓Р╓╢мВ╓╞╓ю╓╣╓╓. Micron ╔╥╔╧╔ф╔Ю╓╛╣╞ф╟╩Ч╓к╦г╓ч╓ц╓ф╓╥╓ч╓╓╓ч╓╧. фцдЙ╓н Micron ю╫╓н╔ч╔╤║╪╔э║╪╔и╓нцФ╓к╓о, PCI BIOS ╓╛╣╛Ёйдл╓Й╓к ╪баУ╓╣╓Л╓ф╓╓╓й╓╓╓©╓А╓к FreeBSD ╓н╣╞ф╟╓к╪╨гт╓╧╓К╓Б╓н╓╛╓╒╓Й╓ч╓╧. ╓╫╓н BIOS ╓о, PCI ╔г╔п╔╓╔╧╓Р╓╒╓К╔╒╔и╔Л╔╧╓гюъдЙ╓╥╓©╓хйС╧П╓╧╓К╓к╓Б ╢ь╓О╓И╓╨, ╪б╨щ╓к╓о╓╫╓╕╓╥╓ф╓╓╓й╓╓╓н╓г╓╧. ╓Ё╓нлДбЙ╓Р╡СхР╓╧╓К╓к╓о, BIOS ╓н Plug and Play Operating System ╓Рл╣╦З╓кюъдЙ╓╥╓ф╓╞╓ю╓╣╓╓. ╓ч╓©, ╓Х╓Й╬э╓╥╓╓╬ПйС╓о http://cesdis.gsfc.nasa.gov/linux/drivers/vortex.html#micron ╓Р╩╡╬х╓╥╓ф╓╞╓ю╓╣╓╓. ©╥╓╥╓╓ Adaptec ╔Ё╔С╔х╔М║╪╔И╓Р╩Щ╓ц╓ф╓╓╓К╓н╓г╓╧╓╛, FreeBSD ╓╛╦║╫п╓г╓╜╓й╓╓╓Х╓╕╓г╓╧. ©╥╓╥╓╓ AIC789x ╔╥╔Й║╪╔╨╓н Adaptec ╔а╔ц╔в╓о, 3.0 ╓г╔г╔с╔Е║╪╓╥╓© CAM SCSI ╔у╔Л║╪╔Ю╔О║╪╔╞╓г╔╣╔щ║╪╔х╓╣╓Л╓ф╓╓╓ч╓╧. 2.2-STABLE ╓н╔я╔ц╔а╓о ftp://ftp.FreeBSD.org/pub/FreeBSD/development/cam/ ╓к╓╒╓Й╓ч╓╧. CAM ╔╥╔╧╔ф╔Ю╓╛фЧ╓ц╓ф╓╓╓К╧Б╣║г╫╔ж║╪╔х╔у╔М╔ц╔т║╪╓о http://people.FreeBSD.org/~abial/cam-boot/ ╓к╓╒╓Й╓ч╓╧. ╓и╓а╓И╓н╬Л╧Г╓к╓╥╓ф╓Б, ╨Н╤х╓Р╩о╓А╓Ка╟╓к README ╓Р╓╙фи╓ъ╓╞╓ю╓╣╓╓. фБб╒╓н Plug & Play ╔Б╔г╔Ю╓Р╩Щ╓ц╓ф╓╓╓К╓н╓г╓╧╓╛, FreeBSD ╓╛╦║╫п╓г╓╜╓й╓╓╓Х╓╕╓г╓╧. ╔Б╔г╔Ю╓н PnP ID ╓Р ╔╥╔Й╔╒╔К╔и╔И╔╓╔п╓н PnP ID ╔Й╔╧╔х╓кди╡ц╓╧╓Ки╛мв╓╛╓╒╓К╓г╓╥╓Г╓╕. Plug & Play ╔╣╔щ║╪╔х╓Рм╜╦З╓к╓╧╓К╓к╓о, controller pnp0 ╓Р╔Ё╔С╔у╔ё╔╟╔Л║╪╔╥╔Г╔С ╔у╔║╔╓╔К╓киу╓╠╡ц╓╗, ©╥╓╥╓╓╔╚║╪╔м╔К╓Р╔Ё╔С╔я╔╓╔К╓╥╓ф╔╥╔╧╔ф╔Ю╓Р╨ф╣╞ф╟╓╥╓ф╓╞╓ю╓╣╓╓. ╔╚║╪╔м╔К╓о, ╦║╫п╓╥╓©а╢╓ф╓н╔г╔п╔╓╔╧╓н PnP ID ╓Ри╫╪╗╓╥╓ч╓╧. ╔Б╔г╔Ю╓нмС╓к╓╒╓К PnP ID ╓Р /sys/i386/isa/sio.c ╓н 2777 ╧тлэ╓╞╓И╓╓╓к╓╒╓К╔ф║╪╔ж╔К╓к╫Я╓╜фЧ╓Л╓ф╓╞╓ю╓╣╓╓. ╔ф║╪╔ж╔К╓Р╦╚╓д╓╠╓К╓к╓о, ╧╫б╓бн siopnp_ids[] ╓нй╦╩ЗнС SUP1310 ╓Рц╣╓╥╓ч╓╧. ╔╚║╪╔м╔К╓Р╨Н╓Йд╬╓╥╓©╓И╔╓╔С╔╧╔х║╪╔К╓╥, ╔╥╔╧╔ф╔Ю╓Р╨ф╣╞ф╟╓╥╓ф╓╞╓ю╓╣╓╓. ╓╫╓╕╓╧╓Л╓п, ╔Б╔г╔Ю╓╛╦║╫п╓╣╓Л╓К╓о╓╨╓г╓╧. ╣╞ф╟╩Ч╓н╔Ё╔С╔у╔ё╔╟╔Л║╪╔╥╔Г╔С╓н╨щ╓к, pnp ╔Ё╔ч╔С╔и╓Р╩хмя╓╥╓ф PnP ╓нюъдЙ╓Р╔ч╔к╔Е╔╒╔К╓г╧т╓й╓О╓й╓╠╓Л╓п╓й╓И╓й╓╓╓╚╓Б╓╥╓Л╓ч╓╩╓С. ╓╫╓н╬Л╧Г, ╔Б╔г╔Ю╓Р╦║╫п╓╣╓╩╓К╓©╓А╓н╔Ё╔ч╔С╔и╓о pnp 1 0 enable os irq0 3 drq0 0 port0 0x2f8 ╓н╓Х╓╕╓к╓й╓Й╓ч╓╧. ╔╥╔Й╔╒╔К╔Ё╔С╔╫║╪╔К╓г boot: ╔в╔М╔С╔в╔х╓Ри╫╪╗╓╧╓К╓к╓о╓и╓╕╓╧╓Л╓п╓╓╓╓? options COMCONSOLE ╓Р╩ьдЙ╓╥╓ф╔╚║╪╔м╔К╓Р╧╫цш╓╥╓ф╓╞╓ю╓╣╓╓. ╓╫╓╥╓ф /boot.config ╓Р╨Ню╝╓╥╓ф ╓х╓ю╓╠╫Я╓╜фЧ╓Л╓ф╓╞╓ю╓╣╓╓. ╓╫╓н╦Е, ╔╜║╪╔э║╪╔и╓Р╔╥╔╧╔ф╔Ю╓╚╓Их╢╓╜╓ч╓╧. /usr/src/sys/i386/boot/biosboot/README.serial ╓к, ╓Ё╓Л╓к╢ь╓╧╓К╬ПйС╓╛╫Я╓╚╓Л╓ф╓╓╓ч╓╧. ╓й╓╪ Micron ╔Ё╔С╔т╔Е║╪╔©╓г 3Com PCI ╔м╔ц╔х╔О║╪╔╞╔╚║╪╔и╓╛ф╟╓╚╓й╓╓╓н╓г╓╥╓Г╓╕? фцдЙ╓н Micron ю╫╓н╔ч╔╤║╪╔э║╪╔и╓нцФ╓к╓о, PCI BIOS ╓╛╣╛Ёйдл╓Й╓к ╪баУ╓╣╓Л╓ф╓╓╓й╓╓╓©╓А╓к FreeBSD ╓н╣╞ф╟╓к╪╨гт╓╧╓К╓Б╓н╓╛╓╒╓Й╓ч╓╧. ╓╫╓н BIOS ╓о, PCI ╔г╔п╔╓╔╧╓Р╓╒╓К╔╒╔и╔Л╔╧╓гюъдЙ╓╥╓©╓хйС╧П╓╧╓К╓к╓Б ╢ь╓О╓И╓╨, ╪б╨щ╓к╓о╓╫╓╕╓╥╓ф╓╓╓й╓╓╓н╓г╓╧. ╓Ё╓нлДбЙ╓Р╡СхР╓╧╓К╓к╓о, BIOS ╓н Plug and Play Operating System ╓Рл╣╦З╓кюъдЙ╓╥╓ф╓╞╓ю╓╣╓╓. ╓ч╓©, ╓Х╓Й╬э╓╥╓╓╬ПйС╓о http://cesdis.gsfc.nasa.gov/linux/drivers/vortex.html#micron ╓Р╩╡╬х╓╥╓ф╓╞╓ю╓╣╓╓. бп╬н╥©╔ч╔К╔а╔в╔М╔╩╔╥╔С╔╟(SMP)╓Р╔╣╔щ║╪╔х╓╥╓ф╓╓╓ч╓╧╓╚? SMP ╓о, 3.0-STABLE ╓х╓╫╓Л╟й╧ъ╓н╔Й╔Й║╪╔╧╓г╓н╓ъ╔╣╔щ║╪╔х╓╣╓Л╓ф╓╓╓ч╓╧. GENERIC ╔╚║╪╔м╔К╓г╓о SMP ╓ом╜╦З╡╫╓╣╓Л╓ф╓╓╓ч╓╩╓С╓н╓г, SMP ╓Рм╜╦З╡╫╓╧╓К╓к╓о╔╚║╪╔м╔К╓Р╨ф╧╫цш╓╧╓Ки╛мв╓╛╓╒╓Й╓ч╓╧. /sys/i386/conf/LINT ╓Р╦╚╓ф, ╔╚║╪╔м╔К╔Ё╔С╔у╔ё╔╟╔у╔║╔╓╔К╓к╓и╓н╔╙╔в╔╥╔Г╔С╓Рди╡ц╓╧╓Л╓пни╓╓╓н╓╚Ён╓╚╓А╓ф╓╞╓ю╓╣╓╓. ASUS K7V ╔ч╔╤║╪╔э║╪╔и╓н╔╥╔╧╔ф╔Ю╓г╔ж║╪╔х╔у╔М╔ц╔т║╪╓Р╩х╓╕╓х, ╔╥╔╧╔ф╔Ю╓╛╔о╔С╔╟╔╒╔ц╔в╓╥╓ч╓╧. бп╠Ч╨Ж╓о╓╒╓Й╓ч╓╩╓С╓╚? BIOS ╔╩╔ц╔х╔╒╔ц╔в╓г╣╞ф╟╩Ч╓н╔╕╔ё╔К╔╧йщ╦Н╣║г╫╓Рл╣╦З╡╫╓╥╓ф╓╞╓ю╓╣╓╓. ╔х╔И╔ж╔К╔╥╔Е║╪╔ф╔ё╔С╔╟ лУ: &a.jp.yoshiaki;, 1997 г╞ 11 ╥Н 10 фЭ. ╔о║╪╔и╔г╔ё╔╧╔╞╓китни╔ж╔М╔ц╔╞╓╛╓╒╓Й╓ч╓╧! SCSI ╔г╔ё╔╧╔╞╓н╬Л╧Г╓о╪╚ф╟е╙╓к╨ф╔ч╔ц╔в╓╧╓К╣║г╫╓╛╓╒╓К╓о╓╨╓г╓╧. ╓╥╓╚╓╥, мЩ╡Р╓╥фЯ╓╓мЩмЁ╓╚╓Иб©╓╞╓н╔и╔И╔╓╔ж╓╛╓Ё╓н╣║г╫╓╛л╣╦З╡╫ ╓╣╓Л╓ф╫п╡ы╓╣╓Л╓ф╓╓╓ч╓╧... ╓Ё╓Л╓Рм╜╦З╡╫╓╧╓К╓к╓о, ╨г╫И╓н╔г╔п╔╓╔╧╓н╔Б║╪╔и╔з║╪╔╦╓Рйя╧╧╓╧╓Ки╛мв╓╛╓╒╓Й╓ч╓╧. ╓Ё╓Л╓о╪║╓н╔Ё╔ч╔С╔и╓Р╪б╧т╓╧╓К╓Ё╓х╓г, FreeBSD ╬Е╓г╧т╓й╓╕╓Ё╓х╓╛╓г╓╜╓ч╓╧(root ╦╒╦б╓г╧т╓й╓╓╓ч╓╧). &prompt.root; scsi -f /dev/rsd0c -m 1 -e -P 3 ╓╫╓╥╓ф, AWRE ╓х ARRE ╓нцм╓Р 0 ╓╚╓И 1 ╓ьйя╧╧╓╥╓ч╓╧ AWRE (Auto Write Reallocation Enbld): 1 ARRE (Auto Read Reallocation Enbld): 1 ╟й╡╪╓о, Ted Mittelstaedt ╩А╓╚╓И╢С╓╩╓И╓Л╓©╓Б╓н╓г╓╧. IDE ╔и╔И╔╓╔ж╓н╬Л╧Г╓одл╬О, итни╔ж╔М╔ц╔╞╓оюЬ╨ъе╙╓й╬ЦЁ╡╓нцШ╦У╓г╓╧. ╨г╤А╓н IDE ╔и╔И╔╓╔ж╓о, фБиТ╓нитни╔ж╔М╔ц╔╞╨ф╔ч╔ц╔т╔С╔╟╣║г╫╓Рм╜╦З╓к╓╥╓©╬Убж╓г ╫п╡ы╓╣╓Л╓ф╓╓╓ч╓╧. ╓ч╓©, ╨ёфЭ╓н IDE ╔о║╪╔и╔г╔ё╔╧╔╞╔А║╪╔╚╓о, ╫п╡ы╟й╧ъ╓китни╔ж╔М╔ц╔╞╓╛х╞ю╦╓╧╓К╓Ё╓х╓к╢ь╓╥╓фйщ╬з╓РдС╤║╓╥╓ф╓╓╓ф, итни╔ж╔М╔ц╔╞╓н╓╒╓К╔г╔ё╔╧╔╞╔и╔И╔╓╔ж╓Р╦Р╢╧╓╧╓К╔╣║╪╔с╔╧╓Р╧т╓й╓ц╓ф╓╓╓ч╓╧. ╓Б╓╥, итни╔ж╔М╔ц╔╞╓н╓╒╓К IDE ╔г╔ё╔╧╔╞╔и╔И╔╓╔ж╓РиЭ╣Л╓╥╓Х╓╕╓х╩в╓╕╓й╓И, IDE ╔и╔И╔╓╔ж╔А║╪╔╚╓╛дС╤║╓╧╓К IDE ©гцг╔в╔М╔╟╔И╔Ю╓Р╔ю╔╕╔С╔М║╪╔и╓╥╓ф, ╓╫╓н╔и╔И╔╓╔ж╓к╩х╓ц╓ф╓ъ╓ф╓╞╓ю╓╣╓╓. ╓Ё╓н╪О╓н╔в╔М╔╟╔И╔Ю╓обГдЯ, ╔и╔И╔╓╔ж╓ню╘╦ФиТй╛╓кбп╓╥╓фитни╔ж╔М╔ц╔╞╓Р╨фаЖ╨╨╓╥, итни╔ж╔М╔ц╔╞╓Р╩хмяитг╫╓к╓╧╓К╓Х╓╕╓к╔╩╔ц╔х╓╧╓К╓Ё╓х╓╛╓г╓╜╓ч╓╧. ESDI, RLL ╓╙╓Х╓с MFM ╔и╔И╔╓╔ж╓н╬Л╧Г, итни╔ж╔М╔ц╔╞╓о╔и╔И╔╓╔ж╓ню╣╬О╓йиТй╛╓г╓╒╓Й, ╟Лхле╙╓к╦ю╓ц╓ф╬ЦЁ╡╓Ри╫╓╧╓Б╓н╓г╓о╓╒╓Й╓ч╓╩╓С. PC ╓г╓о, ╔г╔ё╔╧╔╞╔и╔И╔╓╔ж╔Ё╔С╔х╔М║╪╔И╔╚║╪╔и╓х BIOS ╓╛итни╔ж╔М╔ц╔╞╓н╩хмяитг╫╡╫╓н╨Н╤х╓Р╧т╓й╓╓╓ч╓╧. DOS ╓й╓и, ╔г╔ё╔╧╔╞╔╒╔╞╔╩╔╧╓к BIOS ╓Р╥пмЁ╓╧╓К OS ╓к╓х╓ц╓ф╓ом╜╦З╓кф╞╓╜╓ч╓╧╓╛, FreeBSD ╓н╔г╔ё╔╧╔╞╔и╔И╔╓╔п╓о BIOS ╓РмЬмя╓╥╓ч╓╩╓С. ╓╫╓н╓©╓А, бЕбь╓х╓╥╓ф bad144 ╓х╓╓╓╕╣║╧╫╓╛б╦╨ъ╓╥╓ч╓╧. bad144 ╓о, wd ╔и╔И╔╓╔п╓г╓ю╓╠ (╓д╓ч╓Й FreeBSD 4.0 ╓г╓о╔╣╔щ║╪╔х╓╣╓Л╓ф╓╓╓й╓╓)ф╟╨Н╓╥, SCSI ╔и╔И╔╓╔п╓кмЬмя╓╧╓К╓Ё╓х╓о ╓г╓╜╓ч╓╩╓С. bad144 ╓о, ╦║╫п╓╣╓Л╓©итни╔╩╔╞╔©╓Р╔╧╔з╔╥╔Ц╔К╔у╔║╔╓╔К╓к╣╜о©╓╧╓К╓х╓╓╓╕╣║г╫╓Р╩Щ╓ц╓ф╓╓╓ч╓╧. bad144 ╓РмЬмя╓╧╓К╬Е╓г, цМ╟у╓╥╓й╓╠╓Л╓п╓й╓И╓й╓╓ею╓╛╟Л╓д╓╒╓Й╓ч╓╧. ╓╫╓Л╓о, итни╔ж╔М╔ц╔╞╔╧╔з╔╥╔Ц╔К╔у╔║╔╓╔К╓о, ╔г╔ё╔╧╔╞╓н╨г╫╙╔х╔И╔ц╔╞╓кцж╓╚╓Л╓К╓х╓╓╓╕╓Ё╓х╓г╓╧. ╓Ё╓н╔у╔║╔╓╔К╓к╓о, ╔г╔ё╔╧╔╞╓нюХф╛╓ниу╤А, /kernel ╔у╔║╔╓╔К╓╛╟лцж╓╥╓ф╓╓╓К╓г╓╒╓М╓╕иТй╛╓гх╞ю╦╓╥╓©итни╔╩╔╞╔©╓╛╣╜о©╓╣╓Л╓ф╓╓╓ч╓╧. ╓╥╓©╓╛╓ц╓ф, ╓Ё╓н╔у╔║╔╓╔К╓о BIOS ╔Ё║╪╔К╓Р╩х╓ц╓ф╔╚║╪╔м╔К╔у╔║╔╓╔К╓Рфи╓ъ╧Ч╓Ю╣╞ф╟╔в╔М╔╟╔И╔Ю╓╛, ╔╒╔╞╔╩╔╧╡дг╫╓г╓й╓╠╓Л╓п╓й╓Й╓ч╓╩╓С. ╓Ё╓Л╓о╓д╓ч╓Й, bad144 ╓РмЬмя╓╧╓К╔г╔ё╔╧╔╞╓о 1024 ╔╥╔Й╔С╔ю, 16 ╔ь╔ц╔и, 63 ╔╩╔╞╔©╓Рд╤╓╗╓ф╓о╓й╓И╓й╓╓╓х╓╓╓╕╓Ё╓х╓Р╟улё╓╥, bad144 ╓РмЬмя╓╥╓©╔г╔ё╔╧╔╞╓╛╪б╪а 500MB ╓Рд╤╓╗╓И╓Л╓й╓╓╓Ё╓х╓к╓й╓Й╓ч╓╧. bad144 ╓Р╩х╓╕╓к╓о, FreeBSD ╓н╔╓╔С╔╧╔х║╪╔К╩Ч╓ки╫╪╗╓╣╓Л╓К fdisk ╡Хлл╓г Bad Block аЖ╨╨╓Р ON ╓кюъдЙ╓╧╓К╓ю╓╠╓г╓╧. ╓Ё╓Л╓о, FreeBSD 2.2.7 ╟й╧ъ╓г╣║г╫╓╥╓ч╓╧. ╔г╔ё╔╧╔╞╓о, 1024 ╔╥╔Й╔С╔ю╟йфБ╓г╓й╓╠╓Л╓п╓й╓Й╓ч╓╩╓С. ╔г╔ё╔╧╔╞╔и╔И╔╓╔ж╓о╩Жа╟╓к╬╞╓й╓╞╓х╓Б 4 ╩Ч╢ж, ╔г╔ё╔╧╔╞╓╛╡╧еы╓к╓Х╓ц╓фкдд╔╓╥, ╔х╔И╔ц╔╞╓к╤й╓╛╓Й╓╛╫п╓К╓ч╓г╡Се╬╓╣╓╩╓К╓Ё╓х╓Р╓╙а╕╓А╓╥╓ч╓╧(лУцМ: ╡╧еыйя╡╫╓кбп╓╧╓Ккдд╔╓к╓Х╓ц╓ф, ╔г╔ё╔╧╔╞╓╛хЫ╬╝йя╥а╓╧╓К╓Ё╓х╓к╓Х╓Йх╞ю╦╓╧╓Китни╔╩╔╞╔©╓РЁн╪б╓к╦║╫п╓╧╓К╓©╓А╓г╓╧). бГмфнл╓н ESDI ╔и╔И╔╓╔ж╓н╓Х╓╕╓к 1024 ╔╥╔Й╔С╔ю╓Рд╤╓╗╓К╔г╔ё╔╧╔╞╓н╬Л╧Г, DOS ╬Е╓г╓╫╓н╔г╔ё╔╧╔╞╓╛мЬмя╓г╓╜╓К╓Х╓╕, ESDI ╔Ё╔С╔х╔М║╪╔И╓офц╪Л╓ййя╢╧╔Б║╪╔и╓РмЬмя╓╥╓ч╓╧. fdisk ╓н set geometry ╔Ё╔ч╔С╔и╓Р╩х╓ц╓ф йя╢╧╓╣╓Л╓©(translated) ╔╦╔╙╔А╔х╔Й╓кюзбь╓╗╓К╓х, wd ╔и╔И╔╓╔п╓о╓Ё╓нйя╢╧╔Б║╪╔и╓Р╡Р╪А╓г╓╜╓ч╓╧. ╓╫╓н╨щ, FreeBSD ╔я║╪╔ф╔ё╔╥╔Г╔С╓Р╨Ню╝╓╧╓К╓н╓к dangerously dedicated ╔Б║╪╔и╓РмЬмя╓╥╓ф╓о╓╓╓╠╓ч╓╩╓С. ╓Ё╓н╔Б║╪╔и╓о, ╓╫╓н╓Х╓╕╓й╔╦╔╙╔А╔х╔Й╓Рл╣╩К╓╧╓К╓╚╓И╓г╓╧. ╓©╓х╓╗ fdisk ╓╛╔╙║╪╔п║╪╔И╔╓╔и╓╣╓Л╓©╔╦╔╙╔А╔х╔Й╬ПйС╓Р╩х╓ц╓©╓х╓╥╓ф╓Б, ╟маЁ╓х╓╥╓ф╔г╔ё╔╧╔╞╓н©©╓нбГ╓╜╓╣╓Рйщ╩Щ╓╥╓ф╓╓╓К╓©╓А, бГ╓╜╓╧╓╝╓К FreeBSD ╔я║╪╔ф╔ё╔╥╔Г╔С╓Р╨Ню╝╓╥╓Х╓╕╓х╓╥╓ф╓╥╓ч╓╕╓г╓╥╓Г╓╕. ╔г╔ё╔╧╔╞╔╦╔╙╔А╔х╔Й╬ПйС╓╛йя╢╧╓╣╓Л╓©╔╦╔╙╔А╔х╔Й╬ПйС╓к╓╚╓О╓ц╓ф╓╓╓К╬Л╧Г╓о, ╪Йф╟╓г╔ж╔М╔ц╔╞©Т╓РфЧно╓╥, ╔я║╪╔ф╔ё╔╥╔Г╔С╓Р╨Ню╝╓╧╓Ки╛мв╓╛╓╒╓Й╓ч╓╧. бГмфнл╓н ESDI ╔г╔ё╔╧╔╞╓Р ESDI ╔Ё╔С╔х╔М║╪╔И╓г╔╩╔ц╔х╔╒╔ц╔в╓╧╓К╓к╓о, ╓а╓Г╓ц╓х╓╥╓©╔х╔Й╔ц╔╞╓Р╩х╓╓╓ч╓╧. ╓ч╓╨, DOS ╓н╔г╔ё╔╧╔╞╓г╣╞ф╟╓╥╓ф ╓╫╓н╔г╔ё╔╧╔╞╓Р DOS ╔я║╪╔ф╔ё╔╥╔Г╔С╓х╓╥╓ф╔у╔╘║╪╔ч╔ц╔х╓╥╓ч╓╧. ╓╫╓╥╓ф FreeBSD ╓Р╣╞ф╟╓╥, ╔╓╔С╔╧╔х║╪╔И╓н fdisk ╡Хлл╓г DOS ╔я║╪╔ф╔ё╔╥╔Г╔С╓н╔ж╔М╔ц╔╞╔╣╔╓╔╨╓х╔ж╔М╔ц╔╞©Т╓Рфи╓ъ╓х╓Й, ╔А╔Б╓╥╓ф╓╙╓╜╓ч╓╧. ╔╦╔╙╔А╔х╔Й╬ПйС╓Р DOS ╓╛мЬмя╓╥╓ф╓╓╓К╓Б╓н╓хф╠╟Л╓к╨фюъдЙ╓╥, DOS ╔я║╪╔ф╔ё╔╥╔Г╔С╓Р╨О╫Э╓╥╓ф cooperative FreeBSD ╔я║╪╔ф╔ё╔╥╔Г╔С╓Р юХдЬ╣╜о©╓╥╓©╔ж╔М╔ц╔╞╔╣╔╓╔╨╓Р╩х╓ц╓ф╨Ню╝╓╥╓ф╓╞╓ю╓╣╓╓. ╓╫╓н╔я║╪╔ф╔ё╔╥╔Г╔С╓Р╣╞ф╟╡дг╫╔я║╪╔ф╔ё╔╥╔Г╔С╓кюъдЙ╓╥, итни╔ж╔М╔ц╔╞аЖ╨╨╓Р м╜╦З╓к╓╥╓ч╓╧. ╪б╨щ╓н╔╓╔С╔╧╔х║╪╔К╓г╓о, ╔у╔║╔╓╔К╔╥╔╧╔ф╔Ю╓╛╨Ню╝╓╣╓Л╓Ка╟╓к bad144 ╓╛╨г╫И╓к╪б╧т╓╣╓Л╓ч╓╧(Alt-F2 ╓Р╡║╓╧╓Ё╓х╓г╬У╤╥╓РЁнг╖╓г╓╜╓ч╓╧). итни╔╩╔╞╔©╔у╔║╔╓╔К╓Р╨Ню╝цФ╓к╡©╓И╓╚╓н╬ЦЁ╡╓╛х╞ю╦╓╥╓©╓й╓И, ╔╥╔╧╔ф╔Ю╓Р╨ф╣╞ф╟╓╥╓ф, ╓Б╓╕╟Леы╨г╫И╓╚╓И╓Д╓Йд╬╓╥╓к╓й╓Й╓ч╓╧. ╓╙╓╫╓И╓╞╔г╔ё╔╧╔╞╔╦╔╙╔А╔х╔Й╬ПйС╓нюъдЙ╓РбГ╓╜╓╞╓╥╓╧╓╝╓ф╓╓╓К╓н╓г╓╥╓Г╓╕. (╓Д╓Йд╬╓╥╓о, DOS ╓к╓Х╓К╔у╔╘║╪╔ч╔ц╔х╓х╔я║╪╔ф╔ё╔╥╔Г╔СЁнйщ╓Р╢ч╓ъ╓ч╓╧) ╓Б╓╥, итни╔ж╔М╔ц╔╞╓н╨ф╔ч╔ц╔т╔С╔╟╓Рм╜╦З╓к╓╥╓ф╓╓╓фитни╔ж╔М╔ц╔╞╓╛╦╚иу╓╚╓ц╓©╓И, ╔и╔И╔╓╔ж╓н╦Р╢╧╓Р╧м╓╗╓ф╓╞╓ю╓╣╓╓. итни╔ж╔М╔ц╔╞╓о, ╩Ч╢ж╓х╓х╓Б╓к╟╜╡╫╓╧╓К╓╚╓И╓г╓╧. Bustek 742a EISA SCSI ╓╛г╖╪╠╓╣╓Л╓ч╓╩╓С. ╓Ё╓н╬ПйС╓о 742a ╓н╓©╓А╓н╓Б╓н╓г╓╧╓╛, б╬╓н Buslogic ╔╚║╪╔и╓к╓д╓╓╓ф╓Б ф╠мм╓н╓Ё╓х╓╛╦ю╓╗╓ч╓╧. (Bustek = Buslogic) 742a ╔╚║╪╔и╓к╓обГ╓╜╓╞╓О╓╠╓ф 2 ╓д╓н║ж╔п║╪╔╦╔Г╔С║в╓╛б╦╨ъ╓╥╓ч╓╧. ╔о║╪╔и╔╕╔╖╔╒╔Й╔с╔╦╔Г╔С╓н A-G ╓х H ╟й╧ъ╓г╓╧. ╔Й╔с╔╦╔Г╔С╓н й╦╩З╓о╔╚║╪╔и╓н╤Ы╓к╓╒╓К╔╒╔╩╔С╔ж╔Йхж╧Ф╓н╦Е╓М╓к╓╒╓Й╓ч╓╧. 742a ╓офС╓д╓н ROM ╔а╔ц╔в╓Р╩Щ╓ц╓ф╓╙╓Й, ╟Л╓д╓о BIOS ╔а╔ц╔в╓г ╓Б╓╕╟Л╓д╓о╔у╔║║╪╔Ю╔╕╔╖╔╒╔а╔ц╔в╓г╓╧. FreeBSD ╓о╓╒╓й╓©╓н ╩Щ╓ц╓ф╓╓╓К╓Б╓н╓╛╓и╓н BIOS ╔п║╪╔╦╔Г╔С╓╚╓олДбЙ╓╒╓Й╓ч╓╩╓С╓╛, ╔у╔║║╪╔Ю╔╕╔╖╔╒╔п║╪╔╦╔Г╔С╓к╓д╓╓╓ф╓олДбЙ╓х╓й╓Й╓ч╓╧. Buslogic ╓н╣╩╫я╔╣╔щ║╪╔хиТлГ╓ко╒мМ╓╧╓Л╓п, ╔╒╔ц╔в╔╟╔Л║╪╔ихг╓н ROM ╓РаВ╓ц╓ф╓╞╓Л╓К╓Ё╓х╓г╓╥╓Г╓╕. BIOS ╔а╔ц╔в╓х ╔у╔║║╪╔Ю╔╕╔╖╔╒╔а╔ц╔в╓о╔з╔╒╓г╫п╡ы╓╣╓Л╓ч╓╧. ╔╒╔ю╔в╔©╔╚║╪╔и╓н╔о║╪╔и╔╕╔╖╔╒╔Й╔с╔╦╔Г╔С╓к╓╒╓О╓╩╓© ╨г╓Б©╥╓╥╓╓╔у╔║║╪╔Ю╔╕╔╖╔╒ ROM ╓Р╩хмя╓╥╓й╓╠╓Л╓п╓й╓Й╓ч╓╩╓С. ╔Й╔с╔╦╔Г╔С A-G ╓н╔╚║╪╔и╓к╓о, 2.41/2.21 ╓ч╓г╓н BIOS/╔у╔║║╪╔Ю╔╕╔╖╔╒╓н╔╩╔ц╔х╓Р╩хмя╓╧╓К╓Ё╓х╓╛╓г╓╜╓ч╓╧. ╔Й╔с╔╦╔Г╔С H ╟й╧ъ╓н╔╚║╪╔и╓к╓о, ╨г©╥╓н╓Б╓н╓г╓╒╓К 4.70/3.37 ╓н BIOS/╔у╔║║╪╔Ю╔╕╔╖╔╒╓н╔╩╔ц╔х╓Р ╩хмя╓╧╓К╓Ё╓х╓╛╓г╓╜╓ч╓╧. ╓Ё╓Л╓И╓н╔у╔║║╪╔Ю╔╕╔╖╔╒╓н╟Ц╓╓╓о, ╔у╔║║╪╔Ю╔╕╔╖╔╒ 3.37 ╓╛ ║ж╔И╔╕╔С╔и╔М╔с╔СйЩ╪╟║в ╓Р╔╣╔щ║╪╔х╓╥╓ф╓╓╓К╓х╓Ё╓М╓╚╓И╓╜╓ф╓╓╓ч╓╧. Buslogic ╓н╔╚║╪╔и╓к╓о, ю╫б╓хж╧Ф╓Б╧О╟У╓╣╓Л╓ф╓╓╓ч╓╧. ╦е╓╓ ╔о║╪╔и╔╕╔╖╔╒╔Й╔с╔╦╔Г╔С╓н╔╚║╪╔и╓Р╩Щ╓ц╓ф╓╓╓К╬Л╧Г╓о, Buslogic ╓н RMA иТлГ╓клД╓╓╧Г╓О╓╩╓фю╫б╓хж╧Ф╓Реа╓╗╓К╓х, ©╥╓╥╓╓╔о║╪╔и╔╕╔╖╔╒╔Й╔с╔╦╔Г╔С╓н ╔╚║╪╔и╓к╦Р╢╧╓╧╓К╓Ё╓х╓Б╓г╓╜╓ч╓╧. ╓Б╓╥╔╚║╪╔и╓╛╫╫й╛©╥╓╥╓╠╓Л╓п, хЮ╓И╓о ╦Р╢╧╓к╠Ч╓╦╓ф╓╞╓Л╓К╓г╓╥╓Г╓╕. FreeBSD 2.1 ╓о ╔у╔║║╪╔Ю╔╕╔╖╔╒╔Й╔с╔╦╔Г╔С 2.21 ╟й╧ъ╓н╓Б╓н╓Р╔╣╔щ║╪╔х╓╥╓ф╓╓╓ч╓╧. ╓Ё╓Л╓Х╓Й╓Б╦е╓╓╔у╔║║╪╔Ю╔╕╔╖╔╒╔Й╔с╔╦╔Г╔С╓н╓Б╓н╓о, Buslogic ╔╚║╪╔и╓х╓╥╓фю╣╬О╓кг╖╪╠╓╣╓Л╓ч╓╩╓С. ╓╥╓╚╓╥, Adaptec 1540 ╓х╓╥╓фг╖╪╠╓╣╓Л╓К╓╚╓Б╓╥╓Л╓ч╓╩╓С. ╫И╢Э╓н Buslogic ╓н╔у╔║║╪╔Ю╔╕╔╖╔╒╓о AHA1540 ║ж╦ъ╢╧║в╔Б║╪╔и╓Р ╩Щ╓ц╓ф╓╓╓ч╓╧. ╓╥╓╚╓╥, EISA ╔╚║╪╔и╓к╓х╓ц╓ф╓Ё╓Л╓о ╓Х╓╓╓Ё╓х╓г╓о╓╒╓Й╓ч╓╩╓С. ╦е╓╓╔о║╪╔и╔╕╔╖╔╒╔Й╔с╔╦╔Г╔С╓н╔╚║╪╔и╓Р╩Щ╓ц╓ф╓╓╓ф╔у╔║║╪╔Ю╔╕╔╖╔╒ 2.21 ╓РфЧ╪Й╓╧╓К╓н╓г╓╒╓Л╓п, ╔╦╔Ц╔С╔я W1 ╓н╟лцж╓Р╔г╔у╔╘╔К╔х╓н A-B ╓╚╓И B-C ╓к╧Г╓О╓╩╓Ки╛мв╓╛╓╒╓К╓г╓╥╓Г╓╕. HP Netserver ╬Е╓н╔╙╔С╔э║╪╔и SCSI ╔Ё╔С╔х╔М║╪╔И╓╛г╖╪╠╓╣╓Л╓ч╓╩╓С. ╢Пкэе╙╓к╓Ё╓Л╓о╢Шцн╓нлДбЙ╓г╓╧. HP Netserver ╔ч╔╥╔С╓н EISA ╔╙╔С╔э║╪╔и SCSI ╔Ё╔С╔х╔М║╪╔И╓о EISA ╓н╔╧╔М╔ц╔ххж╧Ф 11 ╓РюЙм╜╓╥╓ч╓╧╓╛, ║жкэеЖ╓н║вEISA ╔╧╔М╔ц╔х╓о╓╧╓ы╓ф╓╫╓Л╓Х╓Й╓Ба╟╓н╔╒╔и╔Л╔╧╓кгшцж╓╣╓Л╓ф╓╓╓К╓н╓г╓╧. ╩дг╟╓й╓╛╓И, 10 хж╟й╬Е╓н EISA ╔╧╔М╔ц╔х╓о PCI ╓кЁД╓ЙеЖ╓ф╓И╓Л╓©╔╒╔и╔Л╔╧╤У╢ж╓х╬вфм╓╥, FreeBSD ╓н╪╚ф╟╔Ё╔С╔у╔ё╔╟╔Л║╪╔╥╔Г╔С╓о, ╦╫╬У╓г╓о╓╕╓ч╓╞╓Ё╓н╬У╤╥╓Р╫ХмЩ╓г╓╜╓ф╓╓╓й╓╓╓н╓г╓╧. ╓г╓╧╓╚╓И╦╫╩Чею╓г╓н╨гни╓нйЩк║╓о, ╔╚║╪╔м╔К╔╙╔в╔╥╔Г╔С╓н EISA_SLOTS ╓Р 12 ╓кйя╓╗, ╔╒╔и╔Л╔╧╤У╢ж╓н╬вфм╓╛╓й╓╓╓╚╓н ╓Х╓╕╓й╓у╓Й╓Р╓╣╓╩╓К╓Ё╓х╓г╓╧ :) ╔╚║╪╔м╔К╓н╨ф╧╫цш╓к╣╜╫р╓╣╓Л╓ф╓╓╓К╓Х╓╕╓к╓╥╓ф╔╚║╪╔м╔К╓Р╨ф╧╫цш╓╥╓ф╓╞╓ю╓╣╓╓. ╓Б╓а╓М╓С, ╓Ё╓Л╓о╓Ё╓н╓Х╓╕╓й╔ч╔╥╔С╓к╔╓╔С╔╧╔х║╪╔К╓╧╓К╨щ╓к ║жмЯ╓╛юХ╓╚, ╥э╓╛юХ╓╚║в╓х╓╓╓ц╓©лДбЙ╓Рю╦╓ъ╫п╓╧╓Ё╓х╓к╓й╓Й╓ч╓╧. ╓Ё╓нлДбЙ╓Р╡СхР╓╧╓К╓©╓А╓к, ╔Ф║╪╔╤╔Ё╔С╔у╔ё╔╟(UserConfig) ╓нцФ╓к╓офцйл╓й╩еах╓ъ╓╛ах╓ъ╧Ч╓ч╓Л╓ф╓╓╓ч╓╧. ╓Ё╓н╓х╓╜ visual ╔╓╔С╔©╔у╔╖║╪╔╧╓о╩хмя╓╩╓╨, ╔Ё╔ч╔С╔и╔И╔╓╔С╔╓╔С╔©╔у╔╖║╪╔╧╓Р╩хмя╓╥╓ф╓╞╓ю╓╣╓╓. ц╠╫Ц╓к eisa 12 quit ╓х╔в╔М╔С╔в╔х╬Е╓╚╓Ибг╓а╧Ч╓ъ, ╦Е╓оиАдл╓к╔╓╔С╔╧╔х║╪╔К╓Р╧т╓й╓ц╓ф╓╞╓ю╓╣╓╓. ╓х╓к╓╚╓╞╔╚╔╧╔©╔Ю╔╚║╪╔м╔К╓н╔Ё╔С╔я╔╓╔К╓х╔╓╔С╔╧╔х║╪╔К╓Р╧т╓й╓╕╓Ё╓х╓Р ╓╙╓╧╓╧╓А╓╥╓ч╓╧. ╓╕╓ч╓╞╓╓╓╠╓п, ╬╜мХ╓н╔п║╪╔╦╔Г╔С╓г╓о╓Ё╓нлДбЙ╓╛╡Р╥Х╓╥╓ф╓╓╓К╓Ё╓х╓г╓╥╓Г╓╕. HP Netserver ╓г╓о╢М╦╠Ёп╦Г╓нюЛмя╔г╔ё╔╧╔╞╓о╩хмя╓г╓╜╓ч╓╩╓С. ╬э╨ы╓к╓д╓╓╓ф╓о ╓Ё╓нцМ╟у╩Ж╧Ю╓Р╓╢мВ╓╞╓ю╓╣╓╓. ╓Ё╓н CMD640 IDE ╔Ё╔С╔х╔М║╪╔И╓о╓и╓Ё╓╚╓╙╓╚╓╥╓╓╓Х╓╕╓г╓╧. ╓╫╓Л╓о╡У╓Л╓ф╓╓╓К╓н╓г╓╧. н╬йЩ╓н╔а╔Ц╔С╔м╔К╓Рф╠╩Ч╓кю╘╦Ф╓г╓╜╓й╓╓╓н╓г╓╧. ╦╫╨ъ, ╓Ё╓н╔а╔ц╔в╓Р╩х╓ц╓ф╓╓╓К╔╥╔╧╔ф╔Ю╓Р╪╚ф╟е╙╓к╦║╫п╓╥╓ф, ╓╕╓ч╓╞ф╟╓╚╓╧╓©╓А╓н╓╥╓╞╓ъ╓╛╩х╓╗╓К╓Х╓╕╓к╓й╓ц╓ф╓╓╓ч╓╧. ╓╞╓О╓╥╓╞╓о wd(4) ╓н╔ч╔к╔Е╔╒╔К╔з║╪╔╦╓Р╩╡╬х╓╥╓ф╓╞╓ю╓╣╓╓. CMD640 IDE ╔Ё╔С╔х╔М║╪╔И╓Р╩х╓ц╓ф╓╓╓К╔╥╔╧╔ф╔Ю╓г FreeBSD 2.2.1 ╓╒╓К╓╓╓о 2.2.2 ╓Р╩х╓╓, ╓╚╓д╔╩╔╚╔С╔ю╔Й╓н╔а╔Ц╔м╔К╓Р╩х╓╓╓©╓╓╓н╓г╓╒╓Л╓п, options "CMD640" ╓Рм╜╦З╓к╓╥╓ф╔╚║╪╔м╔К╓Р╨Н╓Йд╬╓╥╓ф╓╞╓ю╓╣╓╓. FreeBSD 2.2.5 ╟й╧ъ╓г╓о, ╔г╔у╔╘╔К╔х╓г╓╫╓╕╓й╓ц╓ф╓╓╓ч╓╧. ed1: timeout ╓н╓Х╓╕╓й╔А╔ц╔╩║╪╔╦╓╛╓╓╓д╓Б╫п╓ч╓╧. ╓©╓ж╓С IRQ ╓н╬вфм╓╛╦╤╟Ь╓г╓╥╓Г╓╕ (фС╓д╓н╔э║╪╔и╓╛ф╠╓╦ IRQ ╓Р╩хмя╓╥╓ф╓╓╓К╓й╓и). FreeBSD 2.0.5R ╟йа╟╓о╓Ё╓Л╓к╢ь╓╥╓ф╢╡бГ╓г, IRQ ╓н╬вфм╓╛╓╒╓ц╓ф╓Б╔м╔ц╔х╔О║╪╔╞╔и╔И╔╓╔п╓о╣║г╫╓╥╓ф╓╓╓ч╓╥╓©. ╓╥╓╚╓╥ 2.0.5R ╟й╧ъ╓о╓Б╓о╓Д, IRQ ╓н╬вфм╓к╢╡бГ╓г╓о╓╒╓Й╓ч╓╩╓С. ╔╙╔в╔╥╔Г╔С╓Р╓д╓╠╓ф╣╞ф╟╓╥, ed0/de0/... ╓н╔╗╔С╔х╔Й╓Р╔э║╪╔и╓нюъдЙ╓к╧Г╓О╓╩╓ф╓╞╓ю╓╣╓╓. ╔м╔ц╔х╔О║╪╔╞╔╚║╪╔и╓н BNC ╔Ё╔м╔╞╔©(лУцМ: 10BASE-2 ╔©╔╓╔в╓н╔╓╔С╔©║╪╔у╔╖║╪╔╧) ╓Р╩х╓ц╓ф╓╓╓К╬Л╧Г, ╔г╔п╔╓╔╧╓н╔©╔╓╔Ю╔╒╔╕╔х╓о╔©║╪╔ъ╔м║╪╔╥╔Г╔С╓нитни╓к╓Х╓ц╓ф╓Б╣╞╓╜╓ч╓╧. ╓Ё╓Л╓Р╔а╔╖╔ц╔╞╓╧╓К╓к╓о╔╠║╪╔ж╔К╓РЁ╟╓╥╓ф╔©║╪╔ъ╔м║╪╔©╓Рд╬юэ NIC ╓кюэбЁ╓╥╓ч╓╧. ╓╫╓╥╓ф╔╗╔И║╪╔А╔ц╔╩║╪╔╦╓╛╬ц╓╗╓К╓╚╓и╓╕╓╚ Ёнг╖╓╥╓ч╓╧. NE2000 ╔Ё╔С╔я╔а╔ж╔К╔╚║╪╔и╓н╓й╓╚╓к╓о, UTP ╔щ║╪╔х╓н╔Й╔С╔╞╓╛╓й╓╚╓ц╓©╓Й╔╠║╪╔ж╔К╓╛юэбЁ╓╣╓Л╓ф╓╓╓й╓╓╬Л╧Г╓к ╓Ё╓н╔╗╔И║╪╓Р╫п╓╧╓Б╓н╓╛╓╒╓Й╓ч╓╧. CDROM ╓Р╔ч╔╕╔С╔х╓╥╓Х╓╕╓х╓╧╓К╓х Incorrect super block ╓х╦ю╓О╓Л╓ч╓╧. mount ╓к╔ч╔╕╔С╔х╓╥╓©╓╓╔г╔п╔╓╔╧╓н╔©╔╓╔в╓Р╩ьдЙ╓╧╓Ки╛мв╓╛╓╒╓Й╓ч╓╧. ╔г╔у╔╘╔К╔х╓г╓о mount(8) ╓о╔у╔║╔╓╔К╔╥╔╧╔ф╔Ю╓Р ufs ╓х╓ъ╓й╓╥╓ч╓╧. CDROM ╓н╔у╔║╔╓╔К╔╥╔╧╔ф╔Ю╓Р ╔ч╔╕╔С╔х╓╥╓©╓╓╓н╓г╓╒╓Л╓п ╓х mount(8) ╓к╔╙╔в╔╥╔Г╔С╓Р╓д╓╠╓флю╪╗╓╧╓Ки╛мв╓╛╓╒╓Й╓ч╓╧. ╓Ё╓Л╓о╓Б╓а╓М╓С CDROM ╓╛ ISO 9660 ╔у╔║╔╓╔К╔╥╔╧╔ф╔Ю╓г╓╒╓К╬Л╧Г╓г╓╧. ╓ш╓х╓С╓и╓н CDROM ╓о╓Ё╓н╥а╪╟╓г╓╧. 1.1R ╓н FreeBSD ╓г╓о (лУцМ: 2.1.5R, 2.2R ╓г╓Бф╠мм╓г╓╧) ╪╚ф╟е╙╓к Rock Ridge Ёхд╔(д╧╓╓╔у╔║╔╓╔Кл╬╓ь╓нбп╠Ч)╓Р╓╕╓ч╓╞╡Р╪А╓╥╓ч╓╧. CDROM ╓н╔г╔п╔╓╔╧ /dev/cd0c ╓Р /mnt ╓к╔ч╔╕╔С╔х╓╥╓©╓╓╬Л╧Г╓ннЦ╓г╓о, ╪║╓н╓Х╓╕╓к╓╥╓ч╓╧. &prompt.root; mount -t cd9660 /dev/cd0c /mnt ╔г╔п╔╓╔╧╓нл╬а╟╓о╔╓╔С╔©╔у╔╖║╪╔╧╓к╓Х╓ц╓ф╓ойл╓нл╬а╟╓к╓й╓ц╓ф╓╓╓К ╓╚╓Б╓╥╓Л╓й╓╓╓н╓гцМ╟у╓╥╓ф╓╞╓ю╓╣╓╓(/dev/cd0c ╓о╓Ё╓н╬Л╧Г╓ннЦ╓г╓╧). ╔╙╔в╔╥╔Г╔С ╓к╓Х╓ц╓ф mount_cd9660 ╔Ё╔ч╔С╔и╓╛╪б╧т╓╣╓Л╓К╓Ё╓х╓кцМ╟у╓╥╓ф╓╞╓ю╓╣╓╓. ╓Ё╓н╓©╓АнЦ╓о╪║╓н╓Х╓╕╓к╓╧╓К╓Ё╓х╓Б╓г╓╜╓ч╓╧. &prompt.root; mount_cd9660 /dev/cd0c /mnt CDROM ╓Р╔ч╔╕╔С╔х╓╥╓Х╓╕╓х╓╧╓К╓х Device not configured ╓х╦ю╓О╓Л╓ч╓╧. ╓Ё╓Л╓о ╟Лхле╙╓к CDROM ╔и╔И╔╓╔ж╓нцФ╓к CDROM ╓╛фЧ╓ц╓ф╓╓╓й╓╓╓╚, ╔и╔И╔╓╔ж╓╛╔п╔╧╬Е╓к╦╚╓╗╓й╓╓╓Ё╓х╓Р╟улё╓╥╓ч╓╧. ╔и╔И╔╓╔ж╓к CDROM ╓РфЧ╓Л╓К╓╚, IDE (ATAPI) ╓г╓╒╓Л╓п master/slave ╓н╬Убж╓Р╔а╔╖╔ц╔╞╓╥╓ф╓╞╓ю╓╣╓╓. ╓ч╓©, CDROM ╔и╔И╔╓╔ж╓к CDROM ╓РфЧ╓Л╓ф╓╚╓Иг╖╪╠╓╧╓К╓ч╓г╓к╓о©Тиц╓╚╓╚╓Й╓ч╓╧╓н╓г, ╬╞╓╥бт╓ц╓ф╓ъ╓ф╓╞╓ю╓╣╓╓. SCSI CDROM ╓г╓о╔п╔╧╔Й╔╩╔ц╔х╓ь╓н╠ЧеЗ╩Ч╢ж╓╛цы╓╓╓©╓А╓к, ╪╨гт╓╧╓К╓Ё╓х╓╛╓╒╓К╓╚╓Б╓╥╓Л╓ч╓╩╓С. SCSI CDROM ╓Р╩Щ╓ц╓ф╓╓╓К╬Л╧Г╓о, ╔╚║╪╔м╔К╔Ё╔С╔у╔ё╔╟╔Л║╪╔╥╔Г╔С╔у╔║╔╓╔К╓к╟й╡╪╓н╧т╓Р╡ц╓╗╓ф ╨ф╔Ё╔С╔я╔╓╔К╓╥╓ф╩Н╓╥╓ф╓ъ╓ф╓╞╓ю╓╣╓╓. лУцМ ╦╫╨ъ╓н GENERIC ╔╚║╪╔м╔К╓г╓о╬Е╓нюъдЙ╓о╔г╔у╔╘╔К╔х╓к╓й╓ц╓ф╓╓╓ч╓╧. лДбЙ╓н╓╒╓К╬Л╧Г╓о SCSI_DELAY ╓н©Тцм╓РаЩ╓Д╓╥╓ф╓ъ╓ф╓╞╓ю╓╣╓╓. options "SCSI_DELAY=15" ╩Д╓н╔в╔Й╔С╔©╓о╓х╓ф╓д╓Б╓й╓╞цы╓╓╓н╓г╓╧. ╓и╓╕╓╥╓©╓И╓Х╓╓╓н╓г╓╥╓Г╓╕? ╔я╔И╔Л╔К╔╓╔С╔©╔у╔╖║╪╔╧╓г, лДбЙ╓о╓х╓С╓г╓Б╓й╓╞цы╓╓╓ю╓╠╓г╓╒╓К╓й╓И, ╔в╔Й╔С╔©╔э║╪╔х╓Р polled ╔Б║╪╔и╓кюъдЙ╓╥╓ф╓ъ╓ф╓╞╓ю╓╣╓╓. &prompt.root; lptcontrol -p HP ╓н©╥╓╥╓╓╔в╔Й╔С╔©╓к╓о, ЁД╓Й╧Ч╓ъ╔Б║╪╔и╓г╩х╓╗╓й╓╓╓Б╓н╓╛╓╒╓К╓Х╓╕╓г╓╧(╢╟а╢╓к╓О╓╚╓ц╓©╓О╓╠╓г╓о╓╒╓Й╓ч╓╩╓С╓╛). ╔©╔╓╔ъ╔С╔╟╓нлДбЙ╓н╓Х╓╕╓к╩в╓О╓Л╓ч╓╧. ╓О╓©╓╥╓н╔в╔М╔╟╔И╔Ю╓о╩Ч║╧ Signal 11 ╓н╔╗╔И║╪╓г╩ъ╓ч╓ц╓ф╓╥╓ч╓╓╓ч╓╧. Signal 11 ╔╗╔И║╪╓о╔╙╔з╔Л║╪╔ф╔ё╔С╔╟╔╥╔╧╔ф╔Ю╓╛ ╣Ж╡д╓Рм©╓╗╓ф╓╓╓й╓╓╔А╔Б╔Й╓к╔╒╔╞╔╩╔╧╓╥╓Х╓╕╓х╓╥╓©╓х╓╜╓кх╞ю╦╓╥╓ч╓╧. ╓Ё╓н╓Х╓╕╓й╓Ё╓х╓╛╔И╔С╔ю╔Ю╓й╢жЁж╓г╣╞╓ц╓ф╓╓╓К╓Х╓╕╓й╓И, цМ╟у©╪╓╞д╢╨╨╓╥╓ф╓╓╓ц╓©йЩ╓╛ни╓╓╓г╓╧. ╓Ё╓н╪Й╓нлДбЙ╓о╓©╓╓╓ф╓╓╓н╬Л╧Г, ╟й╡╪╓н╓и╓а╓И╓╚╓г╓╧. ╓╫╓нлДбЙ╓╛фцдЙ╓н, ╓╒╓й╓©╓╛╪╚й╛╓гЁ╚х╞╓╥╓©╔╒╔в╔Й╔╠║╪╔╥╔Г╔С╓г╓н╓ъ╣╞╓ц╓ф╓╓╓К╓й╓И, ╓╒╓й╓©╓н╔Ё║╪╔и╓к╔п╔╟╓╛╓╒╓К╓н╓г╓╥╓Г╓╕. ╓╫╓Л╓╛ FreeBSD ╓н╔ы║╪╔╧╔╥╔╧╔ф╔Ю╓н╟ЛиТ╓х╢ьо╒╓╧╓КлДбЙ╓й╓И, ╔Ё║╪╔и╓к╔п╔╟╓╛╓╒╓К╓х╓╓╓╕╓Ё╓х╓к╓й╓Й╓ч╓╧. ╓╥╓╚╓╥╓ш╓х╓С╓и╓н╬Л╧Г, иАдл╓н FAQ ╓нфи╪т╓╛╓╫╓н╓Х╓╕╓й╔Ё║╪╔и╓Р╩х╓╕╓Х╓╕╓к╓й╓К╓╨╓ц╓ха╟╓к, ╓╫╓╕╓╓╓ц╓©лДбЙ╓ох╞╦╚╓╣╓Л, ╫╓ю╣╓╣╓Л╓ф╓╓╓К╓о╓╨╓г╓╧ (╓╫╓Л╓╛ -current ╓нлРлэ╓й╓н╓г╓╧╓╚╓И). ╓╫╓Л╓╛ FreeBSD ╓н╔п╔╟╓г╓о║ж╓й╓╓║в╓х╓╓╓╕╥ХдЙе╙╓й╔╠║╪╔╧╓х╓╥╓ф, ╓╫╓нлДбЙ╓нх╞ю╦╓╛╔в╔М╔╟╔И╔Ю╓Р╔Ё╔С╔я╔╓╔К╓╥╓ф╓╓╓К╓х╓╜╓г╓╒╓Й, ╔Ё╔С╔я╔╓╔КкХ╓ккХ╡С, ╔Ё╔С╔я╔╓╔И╓н╣Сф╟╓╛йя╓К╓х╓╓╓╕╓Б╓н╓╛╓╒╓Й╓ч╓╧. ╓©╓х╓╗╓п, ╓╒╓й╓©╓╛ make buildworld ╓Р╪б╧т╓╥╓ф╓╓╓ф, ╔Ё╔С╔я╔╓╔И╓╛ ls.c ╓╚╓И ls.o ╓Р╔Ё╔С╔я╔╓╔К╓╥╓Х╓╕╓х╓╥╓©╓х╓╜╓к ╔Ё╔С╔я╔╓╔К╓к╪╨гт╓╥╓©╓х╓╥╓ч╓╧. ╓Б╓╕╟Леы make buildworld ╓Р╪б╧т╓╥╓©╓х╓╜╓к, ╓ч╓ц╓©╓╞ф╠╓╦╬Л╫Й╓г╔Ё╔С╔я╔╓╔К╓╛╪╨гт╓╥╓©╓н╓й╓И, ╓╫╓Л╓о build ╓╛╡У╓Л╓ф╓╓╓К (лУцМ: ╓д╓ч╓Й╔╫║╪╔╧╓к╔п╔╟╓╛╓╒╓К) ╓х╦ю╓╕╓Ё╓х╓г╓╧ -- ╔╫║╪╔╧╓Р╧╧©╥╓╥╓ф╓Д╓Й╓й╓╙╓╥╓ф╓ъ╓ф╓╞╓ю╓╣╓╓. ╓Б╓╥╔Ё╔С╔я╔╓╔К╓╛йл╓н╬Л╫Й╓г╓╥╓╞╓╦╓ц╓ф╓╓╓©╓И, ╓╫╓Л╓о╔о║╪╔и╔╕╔╖╔╒╓нлДбЙ╓г╓╧. ╓╒╓й╓©╓н╓Д╓К╓ы╓╜╩Ж╓о: а╟╪т╓н╬Л╧Г╓о, ╓╫╓н╔в╔М╔╟╔И╔Ю╓н╢ж╟Ц╓ц╓©╔╒╔и╔Л╔╧╓ь╔╒╔╞╔╩╔╧╓╥╓Х╓╕╓х╓╥╓ф╓╓╓КиТй╛╓Р, gdb еЫ╓н╔г╔п╔ц╔╛╓г╦╚╓д╓╠╓ф╫╓ю╣╓╥╓ч╓╧. ╦Е╪т╓н╬Л╧Г╓о, ╔о║╪╔и╔╕╔╖╔╒╓клДбЙ╓╛╓й╓╓╓Ё╓х╓РЁн╓╚╓А╓Ки╛мв╓╛╓╒╓Й╓ч╓╧. ╓╫╓н╟Лхле╙╓й╦╤╟Ь╓х╓╥╓ф : ╔о║╪╔и╔г╔ё╔╧╔╞╓╛г╝╓Р╩Щ╓а╓╧╓╝╓ф╓╓╓К╓╚╓Бцн╓Л╓ч╓╩╓С: ╔╠║╪╔╧╓н╔у╔║╔С╓╛╓а╓Ц╓С╓хф╟╓╓╓ф╓╓╓ф╔г╔ё╔╧╔╞╓РнД╓Д╓╥╓ф╓╓╓К╓╚ Ён╓╚╓А╓ф╓╞╓ю╓╣╓╓ (╓©╓ж╓С, б╬╓ниТий╓Б╡Аг╝╓╥╓ф╓╓╓ч╓╧). CPU ╓╛╔╙║╪╔п║╪╔р║╪╔х╓╥╓ф╓╓╓ч╓╧: CPU ╓Р╔╙║╪╔п║╪╔╞╔М╔ц╔╞╓╥╓ф╓╓╓ч╓╩╓С╓╚? ╓╣╓Б╓й╓╠╓Л╓п CPU ╔у╔║╔С╓╛╩Ю╓С╓г╓╓╓К╓н╓╚╓Б╓╥╓Л╓ч╓╩╓С. ╓╓╓╨╓Л╓к╓╩╓Х, ╬╞╓й╓╞╓х╓БлДбЙ╡Р╥Х╓н╢ж╓г╓о ╔о║╪╔и╔╕╔╖╔╒╓╛ф╟╓╞╓ы╓╞╩ьдЙ╓╣╓Л╓©╬Р╥О╓гф╟╓╚╓╥╓ф╓╞╓ю╓╣╓╓. ╔╞╔М╔ц╔╞╓о╔г╔у╔╘╔К╔х╓нюъдЙ╓клА╓╥╓ф╓╞╓ю╓╣╓╓. ╓Б╓╥╓╒╓й╓©╓╛╔╞╔М╔ц╔╞╔╒╔ц╔в╓Р╓╥╓ф╓╓╓К╓н╓й╓И, цы╓╓╔╥╔╧╔ф╔Ю╓г╓Б, ╔╥╔╧╔ф╔Ю╓╛╬ф╓╜иу╓╓╓ф гЦ╓╓╢╧╓╗╓й╓╠╓Л╓п╓й╓И╓й╓╞╓й╓К╓Х╓Й╓╨╓ц╓х╔ч╔╥╓ю╓х╓╓╓╕╓Ё╓х╓Р Ёп╓╗╓ф╓╙╓╓╓©йЩ╓╛ни╓╓╓г╓╥╓Г╓╕. бГ╓╜╓╓╔Ё╔ъ╔Е╔к╔ф╔ё╓г╓офц╓к, ╓╒╓й╓©╓╛╓╫╓Л╓╛╟ба╢╓ю╓х╩в╓ц╓ф╓╓╓К╓╚╓и╓╕╓╚╓о╢ь╥╦╓й╓╞, ╔╙║╪╔п║╪╔╞╔М╔ц╔╞╓╥╓©╔╥╔╧╔ф╔Ю╓кх╞ю╦╓╥╓©лДбЙ╓к╓оф╠╬Пе╙╓г╓о╓╒╓Й╓ч╓╩╓С. ╡Ь╓╥╓╓╔А╔Б╔Й: ╓Б╓╥йё©Т╓н SIMM ╓Д DIMM ╓Р╩х╓ц╓ф╓╓╓К╓й╓И╓╫╓Л╓Ра╢иТх╢╓╓╓ф╓╚╓И Ёф SIMM ╓Д DIMM ╓Рйл╦д╓ках╓ъ╧Ч╓С╓ю╔╥╔╧╔ф╔Ю╓Рн╘╓а╬Е╓╡╓ф╓К╓Ё╓х╓г ╓и╓н DIMM/SIMM ╓╛╡Ь╓╥╓╓╓н╓╚, ╓╫╓Л╓х╓Бах╧Г╓О╓╩╓╛╟╜╓╓╓н╓╚ ╓хлДбЙ╓ниЩ╓╛╤╧╓ч╓Й╓ч╓╧. Ёз╢яе╙╓╧╓╝╓К╔ч╔╤║╪╔э║╪╔и╓нюъдЙ: ╓ш╓х╓С╓и╓н╬Л╧Г╓ки╦╫ЮюъдЙ╓г╫╫й╛╓й╔©╔╓╔ъ╔С╔╟╓Р, BIOS ╓нюъдЙ╓Д╔ч╔╤║╪╔э║╪╔и╬Е╓н╔╦╔Ц╔С╔я╔т╔С╓Рйя╓╗╓К╓Ё╓х╓г, ╓╣╓ч╓╤╓ч╓кйя╧╧╓╧╓К╓Ё╓х╓╛╓г╓╜╓ч╓╧. ╓╥╓╚╓╥╩Ч╓к╓о RAM ╓н ╔╒╔╞╔╩╔╧╔╕╔╖╔╓╔х╓РдЦ╓╞╓╥╓╧╓╝╓©╓Й RAM Speed: Turbo ╓Д ╓╫╓н╪Й╓н BIOS ╓нюъдЙ╓г╓╙╓╚╓╥╓й╣Сф╟╓╛╣╞╓Ё╓К╓Ё╓х╓╛╓╒╓Й╓ч╓╧. BIOS ╓Ри╦╫Ю╓нюъдЙ╓клА╓╧╓х╓╓╓╕╓н╓о╓╓╓╓╔╒╔╓╔г╔ё╔╒╓г╓╧╓╛, ╓╫╓на╟╓к╓╒╓й╓©╓нюъдЙ╓Р╫Я╓╜н╠╓А╓ф╓╙╓╓╓©йЩ╓╛╓╓╓╓╓г╓╥╓Г╓╕. ╔ч╔╤║╪╔э║╪╔и╓ь╓нее╦╩╓╛╟бдЙ╓╥╓ф╓╓╓й╓╓. ╓Б╓╥╩х╓ц╓ф╓╓╓й╓╓ I/O ╔э║╪╔и╓Д╔о║╪╔и╔г╔ё╔╧╔╞, CDROM еЫ╓╛╓╒╓К╓й╓И, ╟Лц╤╓╫╓Л╓И╓╚╓Иее╦╩╔╠║╪╔ж╔К╓Рх╢╓╜, ее╦╩╓╛╬╝╓╣╓йиИ╡ы╓й╓И╓й╓С╓х╓╚ф╟╨Н╓╧╓К╓╚Ёнг╖╓╥╓ч╓╥╓Г╓╕. ╓╒╓К╓╓╓ойл╓нее╦╩╓Р╩Н╓╥╓ф╓ъ╓ч╓╥╓Г╓╕. ╓╫╓н╩Ч╓о╓й╓К╓ы╓╞, ╬╞╓╥мфнл╓нбГ╓╜╓╓╓Б╓н╓г╩Н╓╥╓ч╓╥╓Г╓╕ (╓©╓х╓╗╓п, ╨ё╓нее╦╩мфнл╓╛ 250W ╓ю╓ц╓©╓И 300W ╓н╓Б╓н╓Р╩Н╓╥╓ч╓╧). SIG11 FAQ (╡╪╓к╪╗╓╥╓ч╓╧) ╓к╓о╓Ё╓Л╓И╓нлДбЙ╓н╓╧╓ы╓ф╓╛ ╬э╓╥╓╞юБлю╓╣╓Л╓ф╓╓╓ч╓╧. Linux ╓н╩Кею╓к╢П╓е╓╞╓Б╓н╓г╓╧╓╛, ╓Ё╓Л╓Бфи╓С╓г╓╙╓╓╓©йЩ╓╛╓╓╓╓╓г╓╥╓Г╓╕. ╓╫╓Ё╓г╓о╓ч╓©, ╔А╔Б╔Й╓н╔ф╔╧╔х╓Р╧т╓╕╔╫╔у╔х╔╕╔╖╔╒╓Д, ╔о║╪╔и╔╕╔╖╔╒╓╛╓й╓╪лДбЙ╓н╓╒╓К╔А╔Б╔Й╓Р╦╚ф╗╓╥╓ф╓╥╓ч╓╕╓╚╓к╓д╓╓╓ф╓Б ╣дою╓╣╓Л╓ф╓╓╓ч╓╧. ╨г╦Е╓к, ╓Ё╓Л╓И╓╛╓и╓Л╓Б╫У╓╠╓к╓й╓И╓й╓╚╓ц╓©╓И, FreeBSD ╓н╔п╔╟╓Рх╞╦╚╓╥╓©╡дг╫ю╜╓╛╓╒╓Й╓ч╓╧. ╟й╡╪╓нюБлю╓Рфи╓С╓г╬ЦЁ╡йС╧П╓РаВ╓ц╓ф╓╞╓ю╓╣╓╓. ╬э╨ы╓й FAQ ╓о, the SIG11 problem FAQ ╓к╓╒╓Й╓ч╓╧. ╣╞ф╟╓н╩Ч╓к╡Хлл╓╛©©╓ц╟е╓к╓й╓ц╓фф╠╢Э╓Б╪Х╓Л╓ч╓╩╓С. ╓Ё╓Л╓о ATI Mach 64 ╔с╔г╔╙╔╚║╪╔и╓н╢Шцн╓нлДбЙ╓г╓╧. ╓Ё╓нлДбЙ╓о╔╚║╪╔и╓╛╔╒╔и╔Л╔╧ 2e8 ╓Р╩х╓╓, 4 хжлэ╓н╔╥╔Й╔╒╔К╔щ║╪╔х╓Б╓Ё╓Ё╓Р╩х╓╕╓х╓╓╓╕╓Ё╓х╓к╓╒╓Й╓ч╓╧. &man.sio.4; ╔и╔И╔╓╔п╓н╔п╔╟(╩емм?)╓н╓©╓А, 4 хжлэ╓н╔╥╔Й╔╒╔К╔щ║╪╔х╓╛╓й╓╞╓ф╓Б, дл╬О╓Ё╓н╔╒╔и╔Л╔╧╓Р╩х╓╕ sio3(4 хжлэ╓н╔щ║╪╔х╓к╓╒╓©╓Й╓ч╓╧) ╓Рл╣╦З╓к╓╥╓ф╓Б, ╔и╔И╔╓╔п╓о╓Ё╓н╔╒╔и╔Л╔╧╓Р╓╣╓О╓Й╓ч╓╧. ╔п╔╟╓╛╫╓ю╣╓╣╓Л╓К╓ч╓г╓о, ╪║╓н╓Х╓╕╓к╓╥╓фбп╫Х╓╥╓ф╓╞╓ю╓╣╓╓. ╣╞ф╟╔в╔М╔С╔в╔х╓╛╫п╓©╓И ╓хфЧно╓╥╓ч╓╧ (╓Ё╓Л╓к╓Х╓Й╔╚║╪╔м╔К╓о╔Ё╔С╔у╔ё╔╟╔Л║╪╔╥╔Г╔С╔Б║╪╔и╓кфЧ╓Й╓ч╓╧). sio0, sio1, sio2, sio3(╓Ё╓Л╓И╓╧╓ы╓ф)╓Рл╣╦З╓к╓╥╓ч╓╧. ╓Ё╓Л╓к╓Х╓ц╓ф &man.sio.4; ╔и╔И╔╓╔п╓оф╟╨Н╓╥╓й╓╞╓й╓Й╓ч╓╧╓╛, лДбЙ╓о╓╒╓Й╓ч╓╩╓С. exit ╓х╔©╔╓╔в╓╥╓ф╣╞ф╟╓РбЁ╧т╓╥╓ч╓╧. ╓Б╓╥╔╥╔Й╔╒╔К╔щ║╪╔х╓Рм╜╦З╓к╓╥╓©╓╓╓н╓г╓╒╓Л╓п╟й╡╪╓нйя╧╧╓Р╧т╓й╓ц╓ф ©╥╓╥╓╓╔╚║╪╔м╔К╓Р╨Н╓Ки╛мв╓╛╓╒╓Й╓ч╓╧. /usr/src/sys/i386/isa/sio.c ╓нцФ╓г 1 ╔У╫Й╓╒╓К 0x2e8 ╓х╓╓╓╕й╦╩ЗнС╓Рц╣╓╥, ╓Ё╓нй╦╩ЗнС╓х╓╫╓н╪Йа╟╓к╓╒╓К╔Ё╔С╔ч╓Р╨О╫Э╓╥╓ч╓╧(╦Е╓М╓н╔Ё╔С╔ч╓о╩д╓╥╓ч╓╧). ╦Е╓одл╬О╓н╪ЙбЁ╓╜╓к╓╥╓©╓╛╓ц╓ф©╥╓╥╓╓╔╚║╪╔м╔К╓Р╨Н╓Й╓ч╓╧. ╓Ё╓нбп╫Х╓Р╧т╓й╓ц╓©╦Е╓г╓Б╓ч╓ю X ╔╕╔ё╔С╔и╔╕╔╥╔╧╔ф╔Ю╓о╓╕╓ч╓╞ф╟╓╚╓й╓╓╓╚╓Б╓╥╓Л╓ч╓╩╓С. ╓╫╓н╬Л╧Г╓о, ╩хмя╓╥╓ф╓╓╓К XFree86 ╓╛╓╧╓╞╓й╓╞╓х╓Б XFree86 3.3.3 ╟й╧ъ╓г╓╒╓К╓Ё╓х╓РЁн╓╚╓А╓ф╓╞╓ю╓╣╓╓. ╓╫╓Л╟й╧ъ╓н╔п║╪╔╦╔Г╔С╓г╓о, Mach64 ╔╚║╪╔и╓Д╓╫╓Л╓И╓н╔╚║╪╔и╓н╓©╓А╓к╓д╓╞╓И╓Л╓© X ╔╣║╪╔п ╓нах╧Ч╓ъ╓Р╔╣╔щ║╪╔х╓╥╓ч╓╧. 128MB ╓н RAM ╓╛╓╒╓К╓н╓г╓╧╓╛, 64MB ╓╥╓╚г╖╪╠╓╥╓ч╓╩╓С. FreeBSD ╓╛╔А╔Б╔Й╓н╔╣╔╓╔╨╓Р BIOS ╓╚╓И╪Хфю╓╧╓КйЩк║╓ню╘╦б╓к╓Х╓Й, KB ц╠╟л╓г 16 ╔с╔ц╔хй╛╓ч╓г╓╥╓╚╦║╫п╓г╓╜╓ч╓╩╓С(╓╧╓й╓О╓а╨гбГ 65535KB=64MB ╓г╓╧. ╓Ё╓Л╓Х╓Й╬╞╓й╓╓╬Л╧Г╓Б╓╒╓Й╓ч╓╧. ╓╒╓К BIOS ╓н╬Л╧Г╓о╔А╔Б╔Й╔╣╔╓╔╨╓╛ 16MB ╓кю╘╦б╓╣╓Л╓ч╓╧). 64MB ╟й╬Е╓н╔А╔Б╔Й╓Рюя╓С╓г╓╓╓К╬Л╧Г, FreeBSD ╓о╓╫╓Л╓Р╦║╫п╓╥╓Х╓╕╓х╓╥╓ч╓╧. ╓╥╓╚╓╥╓╫╓н╩Н╓ъ╓о╪╨гт╓╧╓К╓╚╓Б╓╥╓Л╓ч╓╩╓С. ╓Ё╓нлДбЙ╓Р╡СхР╓╧╓К╓к╓о, ╟й╡╪╓к╪╗╓╧╔╚║╪╔м╔К╔╙╔в╔╥╔Г╔С╓Р╩хмя╓╧╓Ки╛мв╓╛╓╒╓Й╓ч╓╧. ╢╟а╢╓й╔А╔Б╔Й╬ПйС╓Р BIOS ╓╚╓И╪Хфю╓╧╓КйЩк║╓Б╓╒╓Й╓ч╓╧╓╛, ╣╞ф╟╔ж╔М╔ц╔╞╓к╤У╓╜╓╛л╣╓╓╓©╓А╪баУ╓г╓╜╓ч╓╩╓С. ╣╞ф╟╔ж╔М╔ц╔╞╓нлДбЙ╓╛╡Р╥Х╓╣╓Л╓Л╓п, ╓╓╓д╓╚Ёхд╔ BIOS ╣║г╫╓Р╩хмя╓╥╓ф╢╟а╢╓й╔А╔Б╔Й╬ПйС╓Р╪Хфю╓г╓╜╓К╓Х╓╕╓к╓й╓К╓г╓╥╓Г╓╕. ╓х╓Й╓╒╓╗╓╨╦╫╨ъ╓о, ╔╚║╪╔м╔К╔╙╔в╔╥╔Г╔С╓Р╩х╓ц╓ф╓╞╓ю╓╣╓╓. options "MAXMEM=n" n ╓к╓о, ╔╜╔М╔п╔╓╔хц╠╟л╓г╔А╔Б╔Й╓ннл╓Р╩ьдЙ╓╥╓ч╓╧. 128MB ╓н╬Л╧Г╓о, 131072 ╓х╓й╓Й╓ч╓╧. FreeBSD 2.0 ╓╛ kmem_map too small! ╓х╦ю╓ц╓ф╔я╔к╔ц╔╞╓╥╓ч╓╧. ╔А╔ц╔╩║╪╔╦╓о, mb_map too small! ╓н╬Л╧Г╓Б╓╒╓Й╓ч╓╧. ╓Ё╓н╔я╔к╔ц╔╞╓о, ╔м╔ц╔х╔О║╪╔╞╔п╔ц╔у╔║(фц╓к mbuf ╔╞╔И╔╧╔©)╓н╡╬аш╔А╔Б╔Й╓╛л╣╓╞╓й╓ц╓©╓Ё╓х╓Р╪╗╓╥╓ч╓╧. ╟й╡╪╓н╔╙╔в╔╥╔Г╔С╓Р╔╚║╪╔м╔К╔Ё╔С╔у╔ё╔╟╔у╔║╔╓╔К╓кди╡ц╓╥╓ф mbuf ╔╞╔И╔╧╔©╓к╩хмя╓г╓╜╓К╡╬аш╔А╔Б╔Й╓ннл╓РаЩ╓Д╓╥╓ф╓╞╓ю╓╣╓╓. options "NMBCLUSTERS=n" n ╓к╓о, ф╠╩Ч╓к╩хмя╓╥╓©╓╓ TCP ╔Ё╔м╔╞╔╥╔Г╔С╓н©Т╓к╠Ч╓╦╓ф 512 ╓╚╓И 4096 ╓ч╓г╓н©Тцм╓Р╩ьдЙ╓г╓╜╓ч╓╧. ╓х╓Й╓╒╓╗╓╨ 2048 ╓Р╩Н╓╥╓ф╓ъ╓К╓н╓Р╓╙╓╧╓╧╓А╓╥╓ч╓╧. ╓Ё╓Л╓г╔я╔к╔ц╔╞╓о╢╟а╢╓нм╫ки╓г╓╜╓К╓о╓╨╓г╓╧. mbuf ╔╞╔И╔╧╔©╓нЁД╓ЙеЖ╓ф, ╩хмя╬У╤╥╓к╓д╓╓╓ф╓о, netstat -m ╓гцн╓К╓Ё╓х╓╛╓г╓╜╓ч╓╧. NMBCLUSTERS ╓н╔г╔у╔╘╔К╔хцм╓о 512 + MAXUSERS * 16 ╓г╓╧. ©╥╓╥╓╓╔╚║╪╔м╔К╓г╨ф╣╞ф╟╓╧╓К╓х CMAP busy panic ╓х╓й╓ц╓ф╔я╔к╔ц╔╞╓Р╣╞╓Ё╓╥╓ф╓╥╓ч╓╓╓ч╓╧. ╔у╔║╔╓╔К /var/db/kvm_*.db ╓к╓╙╓╓╓фхо╟оЁ╟╓н╔г║╪╔©╓Р╦║╫п╓╧╓К╓©╓А╓н╔М╔╦╔ц╔╞╓о╪╨гт╓╧╓К╓Ё╓х╓╛╓╒╓Й, ╓Ё╓╕╓╥╓©л╥╫Б╓н╓╒╓К╔у╔║╔╓╔К╓Р╩хмя╓╧╓К╓Ё╓х╓г╔я╔к╔ц╔╞╓Р╟З╓╜╣╞╓Ё╓╧╓Ё╓х╓╛╓╒╓Й╓ч╓╧. ╓Ё╓Л╓╛╣╞╓Ё╓ц╓©╓й╓И, ╔╥╔С╔╟╔К╔Ф║╪╔╤╓г╨ф╣╞ф╟╓╥╓©╦Е╓к, ╟й╡╪╓н╔Ё╔ч╔С╔и╓Р╪б╧т╓╥╓ф╓╞╓ю╓╣╓╓. &prompt.root; rm /var/db/kvm_*.db ahc0: brkadrint, Illegal Host Access at seqaddr 0x0 ╓х╓╓╓╕╔╗╔И║╪╓╛╫п╓ч╓╧ ╓Ё╓Л╓о Ultrastor SCSI Host Adapter ╓х╬вфм╓╥╓ф╓╓╓ч╓╧. ╣╞ф╟╩Ч╓к kernel configuration ╔А╔к╔Е║╪╓кфЧ╓Й, лДбЙ╓Р╣╞╓Ё╓╥╓ф╓╓╓К uha0 ╓Р disable ╓к╓╥╓ч╓╥╓Г╓╕. sendmail ╓╛ mail loops back to myself ╓х╓╓╓╕╔А╔ц╔╩║╪╔╦╓Р╫п╓╧╓н╓г╓╧╓╛. ╓Ё╓н╩Ж╓о, sendmail FAQ ╓к╪║╓н╓Х╓╕╓к╫Я╓╓╓ф╓╒╓Й╓ч╓╧. * "Local configuration error" ╓х╓╓╓╕╔А╔ц╔╩║╪╔╦╓╛╫п╓ч╓╧. нЦ╓╗╓п: 553 relay.domain.net config error: mail loops back to myself 554 <user@domain.net>... Local configuration error ╓н╓Х╓╕╓йй╙╓г╓╧╓╛, ╓и╓н╓Х╓╕╓к╓╥╓©╓И╓Ё╓нлДбЙ╓Р╡Р╥Х╓г╓╜╓ч╓╧╓╚? ╓Ё╓Л╓о, ╓©╓х╓╗╓п domain.net ╓н╓Х╓╕╓й╔и╔А╔╓╔С╟╦╓ф╓н╔А║╪╔К╓Р MX record ╓г фцдЙ╓н╔ш╔╧╔х (╓Ё╓Ё╓г╓о relay.domain.net) ╓каВ╓М╓╕╓х╓╥╓©╓н╓к, ╓╫╓н╔ш╔╧╔х╓г╓о domain.net ╟╦╓ф╓н╔А║╪╔К╓Р╪У╓╠╪Х╓Л╓К╓Х╓╕╓йюъдЙ╓к ╓й╓ц╓ф╓╓╓й╓╓╬Л╧Г╓г╓╧. юъдЙ╓н╨щ╓к FEATURE(use_cw_file) ╓Р ╩ьдЙ╓╥╓ф╓╒╓К╬Л╧Г╓к╓о /etc/sendmail.cw ╓нцФ╓к domain.net ╓Р ди╡ц╓╥╓ф╓╞╓ю╓╣╓╓. ╓Б╓╥╓╞╓о, /etc/sendmail.cf ╓нцФ╓к "Cw domain.net" ╓Рди╡ц╓╥╓ф╓╞╓ю╓╣╓╓. ╓Б╓о╓Д╦╫╨ъ╓н sendmail FAQ ╓о sendmail release ╓х╓о╟Л╫О╓к╓ойщ╪И╓╣╓Л╓ф╓╓╓ч╓╩╓С. ╓╥╓╚╓╥╪║╓н╔м╔ц╔х╔к╔Е║╪╔╧╓кдЙ╢Эе╙╓кеЙ╧ф╓╣╓Л╓ф╓ч╓╧. comp.mail.sendmail, comp.mail.misc, comp.mail.smail, comp.answers, news.answers. ╓ч╓©, ╔А║╪╔К╥пмЁ╓г╔Ё╔т║╪╓РфЧ╪Й╓╧╓К╬Л╧Г╓о mail-server@rtfm.mit.edu ╟╦╓ч╓гкэй╦╓к send usenet/news.answers/mail/sendmail-faq ╓х╫Я╓╓╓фаВ╓Й╓ч╓╧. ╔Й╔Б║╪╔х╔ч╔╥╔С╬Е╓н╔у╔К╔╧╔╞╔Й║╪╔С╔╒╔в╔Й╔╠║╪╔╥╔Г╔С╓╛╓╕╓ч╓╞ф╟╓╚╓й╓╓ ╔Й╔Б║╪╔х╔ч╔╥╔С╓н╔©║╪╔ъ╔й╔К╔©╔╓╔в╓╛ FreeBSD ╓н╔Ё╔С╔╫║╪╔К╓ги╛мв╓х╓╣╓Л╓ф╓╓╓К cons25 ╟йЁ╟╓н╓Б╓н╓г╓╧. ╓Ё╓нлДбЙ╓Р╡Р╥Х╓╥╓╕╓КйЩк║╓о╓╓╓М╓╓╓М╓╒╓Й╓ч╓╧: ╔Й╔Б║╪╔х╔ч╔╥╔С╓к╔М╔╟╔╓╔С╓╥╓©╦Е, ╓╫╓н╔Й╔Б║╪╔х╔ч╔╥╔С╓╛ ansi ╓╚ sco ╓н╔©║╪╔ъ╔й╔К╔©╔╓╔в╓Рцн╓ц╓ф╓╓╓К╓й╓И, shell йя©Т╓н TERM ╓к╓╫╓Л╓И╓н╓╓╓╨╓Л╓╚╓РюъдЙ╓╥╓ч╓╧. FreeBSD ╓н╔Ё╔С╔╫║╪╔Кб╕╓г screen ╓н╓Х╓╕╓й VT100 ╔╗╔ъ╔Е╔Л║╪╔©╓Р╩хмя╓╥╓ч╓╧. screen ╓о╟Л╓д╓н╔©║╪╔ъ╔й╔К╓нцФ╓гйё©Т╓н╔╩╔ц╔╥╔Г╔С╓РйбнСф╟╨Н╓╣╓╩╓К╓Ё╓х╓╛╓г╓╜╓ч╓╧╓╥, кэмХ╓н╣║г╫╓Бм╔╓Л╓ф╓╓╓ч╓╧. Ёф║╧╓н screen ╓н╔╕╔ё╔С╔и╔╕╓о VT100 ╔©║╪╔ъ╔й╔К╓н╓Х╓╕╓к©╤╓КиЯ╓╕╓н╓г, ╔Й╔Б║╪╔хб╕╓гюъдЙ╓╣╓Л╓К╓ы╓╜ TERM йя©Т╓о vt100 ╓х╓й╓Й╓ч╓╧. ╔Й╔Б║╪╔х╔ч╔╥╔С╓н╔©║╪╔ъ╔й╔К╔г║╪╔©╔ы║╪╔╧╓к cons25 ╓н╔╗╔С╔х╔Й╓Р╔╓╔С╔╧╔х║╪╔К╓╥╓ч╓╧. ╓Ё╓н╔╓╔С╔╧╔х║╪╔КйЩк║╓о╔Й╔Б║╪╔х╔ч╔╥╔С╓н╔╙╔з╔Л║╪╔ф╔ё╔С╔╟╔╥╔╧╔ф╔Ю╓к╟мб╦╓╥╓ч╓╧. ╔Й╔Б║╪╔х╓н╔╥╔╧╔ф╔Ю╓н╔╥╔╧╔ф╔Ю╢имЩ╔ч╔к╔Е╔╒╔К╓╛лР╓кн╘╓д╓Ё╓х╓г╓╥╓Г╓╕. FreeBSD б╕╓г X ╔╣║╪╔п╓Р╣╞ф╟╓╥╓ф, ╔Й╔Б║╪╔х╔ч╔╥╔С╓к xterm ╓Д rxvt ╓н╓Х╓╕╓й X ╔ы║╪╔╧╓н╔©║╪╔ъ╔й╔К╔╗╔ъ╔Е╔Л║╪╔©╓Р╩х╓ц╓ф╔М╔╟╔╓╔С╓╥╓ч╓╧. (лУцМ: фЭкэ╦Л╓╛и╛мв╓й╬Л╧Г╓о kterm еЫ╓Р мЬмя╓╥╓ч╓╧) ╔Й╔Б║╪╔х╔ш╔╧╔х╓н TERM йя©Т╓о xterm ╓Б╓╥╓╞╓о vt100(лУцМ: ╓Б╓╥╓╞╓о kterm) ╓кюъдЙ╓╥╓ч╓╧. ╩Д╓н╔ч╔╥╔С╓г calcru: negative time... ╓хи╫╪╗╓╣╓Л╓К╓н╓г╓╧╓╛ ╓Ё╓Л╓о, ЁД╓Й╧Ч╓ъ╓к╢ьо╒╓╧╓К╓╣╓ч╓╤╓ч╓йит╤Я╧Г╓к╓Х╓ц╓фх╞ю╦╓╥╓ч╓╧. ╓╒╓К╓╓╓о, ╓╒╓К╔г╔п╔╓╔╧╓╛╦╣║╧╩Щ╓ц╓ф╓╓╓К╔п╔╟╓╛и╫лл╡╫╓╥╓©╓н╓╚╓Бцн╓Л╓ч╓╩╓С. ╓Ё╓н╬и╬У╓Р╨ф╦╫╓╣╓╩╓К╟Л╓д╓нйЩк║╓х╓╥╓ф, ╔я╔И╔Л╔К╔щ║╪╔х╬Е╓г, TCP/IP ╓Р бГ╓╜╓й MTU ╓гаЖ╓И╓╩╓К╓х╓╓╓╕╓Б╓н╓╛╓╒╓Й╓ч╓╧. ╔╟╔И╔у╔ё╔ц╔╞╔╒╔╞╔╩╔И╔Л║╪╔©╓╛╓Ё╓н╬и╬У╓Р╣╞╓Ё╓╧╓Ё╓х╓╛╓╒╓Й╓ч╓╧╓╛, ╓╫╓н╬Л╧Г╓о╓ч╓╨, ╔╚║╪╔и╓нЁД╓Й╧Ч╓ъюъдЙ╓РЁнг╖╓╥╓ф╓╞╓ю╓╣╓╓. ╓Ё╓нлДбЙ╓ниШ╨Нмя╓х╓╥╓ф, ╔в╔М╔╩╔╧╓╛ SIGXCPU exceeded cpu time limit ╓х╓╓╓╕╔А╔ц╔╩║╪╔╦╓х╓х╓Б╓к╫╙н╩╓╥╓ф╓╥╓ч╓╕, ╓х╓╓╓╕╓Б╓н╓╛╓╒╓Й╓ч╓╧. 1998 г╞ 11 ╥Н 29 фЭ╓к╦ЬЁ╚╓╣╓Л╓© FreeBSD 3.0 ╟й╧ъ╓г ╓Ё╓нлДбЙ╓╛╡Р╥Х╓╥╓й╓╓╓й╓И, ╪║╓н sysctl йя©Т╓Р╔╩╔ц╔х╓╥╓ф╓╞╓ю╓╣╓╓. &prompt.root; sysctl -w kern.timecounter.method=1 ╓Ё╓Л╓о, ╔я╔у╔╘║╪╔ч╔С╔╧╓ь╤╞╓╓╠ф╤а╓Рм©╓╗╓ч╓╧╓╛, лДбЙ╓нх╞ю╦╓кхФ╓ы╓Л╓п╓╙╓╫╓И╓╞╣╓╓к╓й╓И╓й╓╓дЬеы╓г╓╥╓Г╓╕. ╓Б╓╥, ╓Ё╓Л╓г╓Б╓ч╓юлДбЙ╓╛╩д╓К╓Х╓╕╓й╓И, ╔╚║╪╔м╔К╔╙╔в╔╥╔Г╔С╓н NTIMECOUNTER ╓РбГ╓╜╓йцм╓каЩ╓Д╓╥╓ф╓╞╓ю╓╣╓╓. NTIMECOUNTER=20 ╓к╓ч╓гаЩ╓Д╓╥╓ф╓Б╡Р╥Х╓╥╓й╓╓╬Л╧Г╓о, ╥в╩Ч╫ХмЩ╓н©╝мЙю╜╓╛йщ╓ф╓й╓╓дЬ╓нЁД╓Й╧Ч╓ъ╓╛, ╓╫╓н╔ч╔╥╔С╬Е╓г╣╞╓Ё╓ц╓ф╓╓╓К╓Ё╓х╓Р╟улё╓╥╓ч╓╧. pcm0 not found ╓х╓╓╓╕и╫╪╗╓Р╦╚╓©╓Й ╔╚║╪╔м╔К╔Ё╔С╔у╔ё╔╟╔Л║╪╔╥╔Г╔С╔у╔║╔╓╔К╓к╓о device pcm0 ╓х ╫Я╓╓╓ф╓╒╓К╓н╓к╔╣╔╕╔С╔и╔╚║╪╔и╓╛ pcm1 ╓х╓╥╓ф х╞╦╚╓╣╓Л╓©╓Й╓╥╓ч╓╧. ╓Ё╓Л╓о FreeBSD 3.x ╓г PCI ╓н╔╣╔╕╔С╔и╔╚║╪╔и╓Р╩х╓ц╓ф╓╓╓К╓х╓╜╓к х╞ю╦╓╥╓ч╓╧. pcm0 ╔г╔п╔╓╔╧╓о ISA ╓н╔╚║╪╔июЛмя╓км╫лС╓╣╓Л╓ф╓╓╓К╓Б╓н╓г╓╧. ╓Ё╓н╓©╓А, ╓╒╓й╓©╓╛ PCI ╔╚║╪╔и╓Р╩Щ╓ц╓ф╓╓╓К╓х╓╜╓о╓Ё╓н╔╗╔И║╪╓╛и╫╪╗╓╣╓Л, ╔╚║╪╔и╓о pcm1 ╓х╓╥╓ф╦║╫п╓╣╓Л╓ч╓╧. ╓Ё╓н╥ы╧П╓Р, ц╠╓к╔╚║╪╔м╔К╔Ё╔С╔у╔ё╔╟╔у╔║╔╓╔К╓неЖЁ╨╧т╓Р device pcm1 ╓кйя╧╧╓╧╓К╓Ё╓х╓г мчю╘╓╧╓К╓Ё╓х╓о╓г╓╜╓ч╓╩╓С. ╓╫╓н╩Ч╓о pcm1 ╓╛ ISA ╔╚║╪╔и╓н╓©╓А╓км╫лС╓╣╓Л, PCI ╓н╔╚║╪╔и╓о pcm2 ╓х╓╥╓ф (pcm1 not found ╓н╥ы╧П╓х╓х╓Б╓к) ╦║╫п╓╣╓Л╓ч╓╧. PCI ╓н╔╣╔╕╔С╔и╔╚║╪╔и╓Р╩Щ╓ц╓ф╓╓╓К╓н╓й╓И╓п, ╟й╡╪╓н╓Х╓╕╓к╓╥╓ф snd0 ╔г╔п╔╓╔╧╓н╓╚╓О╓Й╓к snd1 ╓Р╨Н╓Ки╛мв╓╛╓╒╓Й╓ч╓╧. &prompt.root; cd /dev &prompt.root; ./MAKEDEV snd1 ╓Ё╓н╬У╤╥╓о FreeBSD 4.x ╓г╓ою╦╓╦╓ч╓╩╓С. б©╓╞╓неьно╓н╥К╡л╓Х╓Й PnP цФ©╢╓к╨Н╓Йбь╓╗╓И╓Л, ╦╫╨ъ, pcm0 ╔г╔п╔╓╔╧╓о ISA ╔╚║╪╔июЛмя╓км╫лС╓╣╓Л╓©╓Б╓н╓г╓о╓й╓╞╓й╓Й╓ч╓╥╓©. ╔в╔И╔╟╔╒╔С╔и╔в╔Л╔╓╓н╔╚║╪╔и╓╛г╖╪╠╓╣╓Л╓й╓╞╓й╓Й╓ч╓╥╓© (╓ч╓©╓о, unknown ╓хг╖╪╠╓╣╓Л╓К╓Х╓╕╓к╓й╓Й╓ч╓╥╓©). ╦╫╨ъ╓н FreeBSD 4.x ╓о╓Х╓Й PnP цФ©╢╓к ╓й╓ц╓ф╓╓╓ч╓╧. ╓╫╓ниШ╨Нмя╓н╠ф╤а╓г, FreeBSD 3.x ╓гф╟╓╓╓ф╓╓╓© PnP ╔г╔п╔╓╔╧ (╓©╓х╓╗╓п╔╣╔╕╔С╔и╔╚║╪╔и╓ДфБб╒╔Б╔г╔Ю) ╓нцФ╓к╓о, ф╟╓╚╓й╓╞╓й╓ц╓ф╓╥╓ч╓ц╓©╓Б╓н╓Б╓╒╓Й╓ч╓╧. ╓Ё╓н╣Сф╟╓н╦╤╟Ь╓о Peter Wemm ╓╛ freebsd-questions ╔А║╪╔Й╔С╔╟╔Й╔╧╔х╓к╫Я╓╓╓©, ╟й╡╪╓н ║жFreeBSD 4.x ╓к╔╒╔ц╔в╔╟╔Л║╪╔и╓╥╓©╓х╓Ё╓МфБб╒╔Б╔г╔Ю╓╛ ╦╚╓д╓╚╓И╓й╓╞╓й╓ц╓©║в╓х╓╓╓╕╔А║╪╔К╓г╡РюБ╓╣╓Л╓ф╓╓╓ч╓╧. (╓О╓╚╓Й╓Д╓╧╓╞╓╧╓К╓©╓А╓к [] фБ╓к ╔Ё╔А╔С╔х╓Р╡ц╓╗╓ч╓╥╓©).
PnP BIOS ╓о╓╒╓И╓╚╓╦╓А, [╔Б╔г╔Ю╓Р] ╔щ║╪╔х╤У╢ж╓кб╦╨ъ╓╥╓ф╓╓╓К╓╚╓н╓Х╓╕╓кюъдЙ╓╥╓ч╓╧. ╓╫╓н╓©╓А [3.x ╓г╓о] ╫╬мХ╓н╪Йк║╓к╢П╓е╓╞ ISA ╔г╔п╔╓╔╧╓н╦║╨В╓к╓Х╓Й, ╔Б╔г╔Ю╓нб╦╨ъ╓Р║жх╞╦╚║в╓г╓╜╓ч╓╧. 4.0 ╓н ISA ╔Ё║╪╔и╓о, ╓Х╓Й PnP цФ©╢╓к╓й╓ц╓ф╓╓╓ч╓╧. [3.x ╓г╓о] ISA ╔г╔п╔╓╔╧╓н╦║╨В╓╛║ж╓о╓╟╓Л╓©║в╔г╔п╔╓╔╧╓Рх╞╦╚╓╥╓ф, ╪║╓к PNP ╔г╔п╔╓╔╧ ID ╓н╔ч╔ц╔а╓╛╧т╓й╓О╓Л╓К╓Ё╓х╓г╔Й╔╫║╪╔╧╓н╤╔╧Г╓╛х╞ю╦╓╥, ╔г╔п╔╓╔╧╓н╦║╨В╓к╪╨гт╓╧╓К╡дг╫ю╜╓╛╓╒╓Й╓ч╓╧. ╓╥╓©╓╛╓ц╓ф, 4,0 ╓н ISA ╔Ё║╪╔и╓г╓о фС╫е╓к╦║╨В╓╥╓й╓╓╓Х╓╕, ╔в╔М╔╟╔И╔ч╔ж╔К╓й╔╚║╪╔и╓Р ╨г╫И╓кл╣╦З╓к╓╥╓ф╓╓╓ч╓╧. ╓Ё╓Л╓о, бп╠Ч╓╥╓ф╓╓╓К PnP ╔о║╪╔и╔╕╔╖╔╒╓н PnP ID ╓╛, м╫╓А╓О╓╚╓ц╓ф╓╓╓Ки╛мв╓╛╓╒╓К, ╓х╓╓╓╕╓Ё╓х╓Р╟улё╓╥╓ч╓╧. ╔Ф║╪╔╤╓╛╓Ё╓н╣Сф╟╓к╓Б╓ц╓х╪Й╓РфЧ╓Л╓И╓Л╓К╓Х╓╕╓к╓╧╓К╓Ё╓х╓╛ TODO ╔Й╔╧╔хцФ╓к╓╒╓╡╓И╓Л╓ф╓╓╓ч╓╧.
3.0 ╓гф╟╨Н╓╥╓ф╓╓╓©╔г╔п╔╓╔╧╓Р 4.0 ╓г╓Бф╟╨Н╓╧╓К╓Х╓╕╓к╓╧╓К╓к╓о, ╓╫╓Л╓н PnP ID ╓Рд╢╓ы, ISA ╔г╔п╔╓╔╧╓н╦║╨В╓╛ PnP ╔г╔п╔╓╔╧╓н╪╠йл╓к╩х╓ц╓ф╓╓╓К╔Й╔╧╔х╓к╓╫╓Л╓Рди╡ц╓╧╓Ки╛мв╓╛╓╒╓Й╓ч╓╧. ╔г╔п╔╓╔╧╓н╦║╨В╓к╩х╓О╓Л╓К &man.pnpinfo.8; ╓Рмя╓╓╓ф, PnP ID ╓Рфю╓К╓Ё╓х╓╛╓г╓╜╓ч╓╧. ╓©╓х╓╗╓п, фБб╒╔Б╔г╔Ю╓к╢ь╓╧╓К &man.pnpinfo.8; ╓н╫пно╓о, ╟й╡╪╓н╓Х╓╕╓к╓й╓Й╓ч╓╧. &prompt.root; pnpinfo Checking for Plug-n-Play devices... Card assigned CSN #1 Vendor ID PMC2430 (0x3024a341), Serial Number 0xffffffff PnP Version 1.0, Vendor Version 0 Device Description: Pace 56 Voice Internal Plug & Play Modem Logical Device ID: PMC2430 0x3024a341 #0 Device supports I/O Range Check TAG Start DF I/O Range 0x3f8 .. 0x3f8, alignment 0x8, len 0x8 [16-bit addr] IRQ: 4 - only one type (true/edge) [more TAG lines elided] TAG End DF End Tag Successfully got 31 resources, 1 logical fdevs -- card select # 0x0001 CSN PMC2430 (0x3024a341), Serial Number 0xffffffff Logical device #0 IO: 0x03e8 0x03e8 0x03e8 0x03e8 0x03e8 0x03e8 0x03e8 0x03e8 IRQ 5 0 DMA 4 0 IO range check 0x00 activate 0x01 и╛мв╓й╬ПйС╓о, ╫пно╓нкаф╛╓к╓╒╓К Vendor ID ╧т╓к╓╒╓Й╓ч╓╧. ╓╚╓ц╓Ё╓нцФ╓н 16 ©й©Т (нЦ╓нцФ╓г╓о 0x3024a341) ╓╛ PnP ID ╓г, д╬а╟╓нй╦╩ЗнС (PMC2430) ╓о╔Ф╔к║╪╔╞╓й ASCII ID ╓г╓╧. ╓Ё╓н╬ПйС╓о╔у╔║╔╓╔К /usr/src/sys/isa/sio.c ╓к ди╡ц╓╧╓Ки╛мв╓╛╓╒╓Й╓ч╓╧. ╓ч╓╨╪╨гт╓╥╓©╓х╓╜╓кхВ╓╗╓ф sio.c ╓н ╔п╔ц╔╞╔╒╔ц╔в╓Р╪Х╓К╓ы╓╜╓г╓╧. ╬ЦЁ╡йС╧П╓РаВ╓К╓©╓А╓к╫╓ю╣╔я╔ц╔а╓Р ╨Н╓К╩Ч╓к╓Би╛мв╓к╓й╓К╓г╓╥╓Г╓╕ (send-pr ╓╥╓Х╓╕╓х╓╥╓ф╓╓╓ч╓╧╓Х╓м║╘). sio.c ╓Рйт╫╦╓╥╓ф╟й╡╪╓н╧т╓Рц╣╓╥╓ф╓╞╓ю╓╣╓╓. static struct isa_pnp_id sio_ids[] = { ╓╫╓╥╓ф╓╒╓й╓©╓н╔г╔п╔╓╔╧╓н╔╗╔С╔х╔Й╓Рди╡ц╓╧╓Кю╣╓╥╓╓╬Л╫Й╓Рц╣╓╥╓ч╓╧. ╔╗╔С╔х╔Й╓о╟й╡╪╓н╓Х╓╕╓й╥а╓Р╓╥╓ф╓╓╓ф, &man.pnpinfo.8; ╓н ╫пно╓к╓╒╓К ╔г╔п╔╓╔╧╓нюБлю╓на╢иТ (╓Б╓╥╪Щ╓ч╓Л╓п) ╓╚╟ЛиТ╓х╓х╓Б╓к╧т╓н╠╕╓нйЩ╓н╔Ё╔А╔С╔хнн╟Х╓к╫Я╓╚╓Л╓ф╓╓╓К ASCII ╔ы╔С╔ю ID ╓г╔╫║╪╔х╓╣╓Л╓ф╓╓╓ч╓╧. {0x0f804f3f, NULL}, /* OZO800f - Zoom 2812 (56k Modem) */ {0x39804f3f, NULL}, /* OZO8039 - Zoom 56k flex */ {0x3024a341, NULL}, /* PMC2430 - Pace 56 Voice Internal Modem */ {0x1000eb49, NULL}, /* ROK0010 - Rockwell ? */ {0x5002734a, NULL}, /* RSS0250 - 5614Jx3(G) Internal Modem */ ╓╒╓й╓©╓н╔г╔п╔╓╔╧╓н16©й©Т╓н╔ы╔С╔ю ID ╓Рю╣╓╥╓╓╬Л╫Й╓к ди╡ц╓╥, ╔у╔║╔╓╔К╓Р╔╩║╪╔ж╓╥╓ф╔╚║╪╔м╔К╓Р╨Н╓Йд╬╓╥╓ф╨ф╣╞ф╟╓╥╓ч╓╧. ╓╒╓й╓©╓н╔г╔п╔╓╔╧╓о FreeBSD 3.x ╓н╩Ч╓хф╠╓╦╓Х╓╕╓к sio ╓х╓╥╓ф╦╚╓д╓╚╓К╓Х╓╕╓к╓й╓ц╓ф╓╓╓К╓о╓╨╓г╓╧.
top ╓Д systat ╓н ╪б╧тцФ╓к nlist failed ╓х╓╓╓╕ ╔╗╔И║╪╓╛╓г╓ч╓╧. ╓Ё╓н╔╗╔И║╪╓о, ╪б╧т╓╥╓Х╓╕╓х╓╥╓©╔╒╔в╔Й╔╠║╪╔╥╔Г╔С╓╛ ╓╒╓К╔╚║╪╔м╔К╔╥╔С╔э╔К╓Р╦║╨В╓╥╓©╥К╡л, ╡©╓И╓╚╓нмЩмЁ╓г╓╫╓н╦║╨В╓к╪╨гт╓╥╓©, ╓х╓╓╓╕╓Ё╓х╓Р╟улё╓╥╓ф╓╓╓ч╓╧. ╓Ё╓Л╓о, ╟й╡╪╓к╪╗╓╧╓╓╓╨╓Л╓╚╓нмЩмЁ╓к╓Х╓К╓Б╓н╓г╓╧. ╔╚║╪╔м╔К╓х╔Ф║╪╔╤╔И╔С╔и╓╛ф╠╢Э╓╥╓ф╓╓╓й╓╓ (╓д╓ч╓Й ╔╚║╪╔м╔К╓о©╥╓╥╓╓╓Б╓н╓Р╧╫цш╓╥╓©╓╛, installworld ╓о╧т╓й╓ц╓ф╓╓╓й╓╓. ╓╒╓К╓╓╓о╓╫╓н╣у) ╓н╓г, ╔╥╔С╔э╔К╔ф║╪╔ж╔К╓╛╔Ф║╪╔╤╔╒╔в╔Й╔╠║╪╔╥╔Г╔С╓н╧м╓╗╓ф╓╓╓К╓Б╓н╓х╟ш╓й╓ц╓ф╓╓╓К. ╓Б╓╥╓Ё╓н╔╠║╪╔╧╓й╓И, ╟Ло╒╓н╔╒╔ц╔в╔╟╔Л║╪╔и╪Й╫Г╓к╫╬╓ц╓ф╔╒╔ц╔в╔╟╔Л║╪╔и╓Р╧т╓й╓ц╓ф╓╞╓ю╓╣╓╓ (ю╣╓╥╓╓╓Д╓ЙйЩ╓о /usr/src/UPDATING ╓к╫Я╓╓╓ф╓╒╓Й╓ч╓╧). ╔╚║╪╔м╔К╓Р╔М║╪╔и╓╧╓К╓н╓к /boot/loader ╓Р╩х╓О╓╨, д╬юэ boot2 (&man.boot.8; ╩╡╬х) ╓╚╓И╔М║╪╔и╓╥╓ф╓╓╓К. ╓Б╓а╓М╓С /boot/loader ╓Р╩х╓О╓й╓╞╓х╓БлДбЙ╓о╓й╓╓╓н╓г╓╧╓╛, /boot/loader ╓о╟Лхле╙╓к, ╔Ф║╪╔╤╔╒╔в╔Й╔╠║╪╔╥╔Г╔С╓╚╓И╔╚║╪╔м╔К╔╥╔С╔э╔К╓Р ╔╒╔╞╔╩╔╧╓г╓╜╓К╓Х╓╕╓к╓╧╓К╓©╓А╓н╣║г╫╓Р╩Щ╓ц╓ф╓╓╓ч╓╧.
╬╕мя╔╒╔в╔Й╔╠║╪╔╥╔Г╔С лУ: ╩Ё╡╪ ╫ъ junkun@esys.tsukuba.ac.jp, 1997 г╞ 11 ╥Н 10 фЭ. ╓Ё╓н╬о╓о╓ч╓ю╓ч╓ю╬ПйС╓╛б╜╓Й╓ч╓╩╓С. ╬ПйС╓Рди╡ц╓╥╓ф╓╞╓Л╓К╓Х╓╕╓й╢К╤х╓Рбт╓ак╬╓С╓г╓╓╓ч╓╧. FreeBSD ╔╟╔К║╪╔в╓о╓Ё╓Ё╓к╨э╓ц╓ф╓╓╓К╢К╤х╓╚╓И╓н╤Ба╛е╙╓й╩ы╠Г╓Р╢Эбт╓╥╓ф╓о╓╓╓ч╓╩╓С╓н╓г, йТ╩е╨Н╤х╓н╟Л╓д╓х╓╥╓ф╥г╨э╓╥╓ф╓╓╓ч╓╧(╓╫╓╥╓ф FreeBSD ╓╛╥╦╓О╓КюКеа╓о, д╧╓╓лэ╓г╦╚╓К╓х FreeBSD ╓кбп╓╥╓ф╓Х╓╓йЩ╦Ч╓ьф╞╓╞╓х╩в╓ц╓ф╓╓╓ч╓╧). ╩Д╓©╓а╓о╬╕мя╔╫╔у╔х╔╕╔╖╔╒╔ы╔С╔ю╓к, ╓Ё╓Ё╓гю╫ий╓РюКеа╓╥╓ф╓Б╓И╓╕╓Ё╓х╓Рк╬╓С╓г╓╓╓ч╓╧. ╬э╓╥╓╞╓о, ╬╕мя╔╫╔у╔х╔╕╔╖╔╒╔ы╔С╔юмВ╓н╔з║╪╔╦╓Р╓╢мВ╓╞╓ю╓╣╓╓. FreeBSD мя╓н Motif ╓о╓и╓╕╓Д╓ц╓©╓И╪Й╓кфЧ╓Й╓ч╓╧╓╚ FreeBSD мя╓ннВ╡ахг ELF Motif 2.1.20 (i386 хг, Alpha хг) ╓к╢ь╓╧╓К╬ПйС╓оApps2go ╓╚╓И ╪Й╓кфЧ╓Л╓К╓Ё╓х╓╛╓г╓╜╓ч╓╧. ╓Ё╓ню╫ий╓к╓о, ║жЁ╚х╞╪тхг(development edition)║в ╓х, ╓Х╓Й╟б╡а╓й║ж╔И╔С╔©╔╓╔Юхг(runtime edition)║в ╓нфС╓д╓нхг╓╛╓╒╓Й╓ч╓╧. ╓Ё╓Л╓И╓ню╫ий╓о╟й╡╪╓нй╙╓╛╢ч╓ч╓Л╓ф╓╓╓ч╓╧. OSF/Motif manager, xmbind, panner, wsm. uil, mrm, xm, xmcxx, ╔╓╔С╔╞╔К║╪╔и╔у╔║╔╓╔К╓Д Imake ╔у╔║╔╓╔К╓х╓╓╓ц╓©Ё╚х╞╪т╦Ч╓╠╔╜╔ц╔х FreeBSD 3.0 ╟й╧ъ╓гмЬмя╓г╓╜╓К ELF хг╔╧╔©╔ф╔ё╔ц╔╞╔И╔╓╔ж╔И╔Й, ╓╙╓Х╓с╔ю╔╓╔й╔ъ╔ц╔╞╔И╔╓╔ж╔И╔Й ╔г╔Б╔С╔╧╔х╔Л║╪╔╥╔Г╔С╔в╔М╔╟╔И╔Ю цМй╦╓╧╓К╨щ╓к╓о FreeBSD мя╓н Motif ╓г╓╒╓К╓Ё╓х╓Р╓╜╓а╓С╓х Ёнг╖╓╥╓ф╓╞╓ю╓╣╓╓(╓╒╓й╓©╓нмъ╓╥╓╓╔╒║╪╔╜╔ф╔╞╔а╔Ц╓Р╩ьдЙ╓╧╓К╓н╓Б к╨╓Л╓й╓╓╓г╓╞╓ю╓╣╓╓!). NetBSD ╓Д OpenBSD мя╓н Motif ╓Б╓ч╓©, Apps2go╓╚╓ИхнгД╓╣╓Л╓ф╓╓╓ч╓╧. ╦╫╨ъ, FTP ╓к╓Х╓К ╔ю╔╕╔С╔М║╪╔и╓н╓ъмЬмя╡дг╫╓г╓╧. ╓Х╓Й╬э╓╥╓╓╬ПйС╓о Apps2go WWW page лД╓╓╧Г╓О╓╩╓о Sales ╓ч╓©╓о Support ее╩р╔А║╪╔К╔╒╔и╔Л╔╧. ╓Б╓╥╓╞╓о phone (817) 431 8775 or +1 817 431-8775 б╬╓н FreeBSD мя Motif 2.1(ELF хг, a.out хг) ╓к╢ь╓╧╓К╬ПйС╓о Metro Link ╓╚╓И╪Й╓кфЧ╓Л╓К╓Ё╓х╓╛╓г╓╜╓ч╓╧. ╓Ё╓ню╫ий╓о╟й╡╪╓нй╙╓╛╢ч╓ч╓Л╓ф╓╓╓ч╓╧. OSF/Motif manager, xmbind, panner, wsm. uil, mrm, xm, xmcxx, ╔╓╔С╔╞╔К║╪╔и╔у╔║╔╓╔К╓Д Imake ╔у╔║╔╓╔К╓х╓╓╓ц╓©Ё╚х╞╪т╦Ч╓╠╔╜╔ц╔х ╔╧╔©╔ф╔ё╔ц╔╞╔И╔╓╔ж╔И╔Й, ╓╙╓Х╓с╔ю╔╓╔й╔ъ╔ц╔╞╔И╔╓╔ж╔И╔Й. (FreeBSD 3.0 ╟й╧ъ╓гмЬмя╓г╓╜╓К ELF хг╓╚, FreeBSD 2.2.8 ╟йа╟╓гмЬмя╓г╓╜╓К a.out хг╓Р╩ьдЙ╓╥╓ф╓╞╓ю╓╣╓╓) ╔г╔Б╔С╔╧╔х╔Л║╪╔╥╔Г╔С╔в╔М╔╟╔И╔Ю ю╟╥а╨я╓ъ╓н╔ч╔к╔Е╔╒╔К╔з║╪╔╦ цМй╦╓╧╓К╨щ╓к╓о FreeBSD мя╓н Motif ╓г╓╒╓К╓Ё╓х╓Р╓╜╓а╓С╓х Ёнг╖╓╥╓ф╓╞╓ю╓╣╓╓. Linux мя╓н Motif ╓Б Metri Link ╓╚╓ИхнгД╓╣╓Л╓ф╓╓╓ч╓╧. ╦╫╨ъ, CDROM ╓╙╓Х╓с FTP ╓к╓Х╓К╔ю╔╕╔С╔М║╪╔и╓╛мЬмя╡дг╫╓г╓╧. FreeBSD мя╓н a.out хг Motif 2.0 ╓к╢ь╓╧╓К╬ПйС╓о Xi Graphics ╓╚╓И ╪Й╓кфЧ╓Л╓К╓Ё╓х╓╛╓г╓╜╓ч╓╧. ╓Ё╓ню╫ий╓о╟й╡╪╓нй╙╓╛╢ч╓ч╓Л╓ф╓╓╓ч╓╧. OSF/Motif manager, xmbind, panner, wsm. uil, mrm, xm, xmcxx, ╔╓╔С╔╞╔К║╪╔и╔у╔║╔╓╔К╓Д Imake ╔у╔║╔╓╔К╓х╓╓╓ц╓©Ё╚х╞╪т╦Ч╓╠╔╜╔ц╔х FreeBSD 2.2.8 ╟йа╟╓н╔п║╪╔╦╔Г╔С╓гмЬмя╓г╓╜╓К╔╧╔©╔ф╔ё╔ц╔╞╔И╔╓╔ж╔И╔Й, ╓╙╓Х╓с╔ю╔╓╔й╔ъ╔ц╔╞╔И╔╓╔ж╔И╔Й ╔г╔Б╔С╔╧╔х╔Л║╪╔╥╔Г╔С╔в╔М╔╟╔И╔Ю ю╟╥а╨я╓ъ╓н╔ч╔к╔Е╔╒╔К╔з║╪╔╦ цМй╦╓╧╓К╨щ╓к╓о FreeBSD мя╓н Motif ╓г╓╒╓К╓Ё╓х╓Р╓╜╓а╓С╓х Ёнг╖╓╥╓ф╓╞╓ю╓╣╓╓. BSDI ╓Д Linux мя╓н Motif ╓Б╓ч╓©, Xi Graphics ╓╚╓ИхнгД╓╣╓Л╓ф╓╓╓ч╓╧. ╦╫╨ъ╔у╔М╔ц╔т║╪╔г╔ё╔╧╔╞ 4кГах╓г╓╧╓╛, ╬╜мХе╙╓к╓о CDE ╓н╓Х╓╕╓кеЩ╧Г╓╣╓Л╓© CD ╓кйя╓О╓К╓г╓╥╓Г╓╕. FreeBSD мя╓н CDE ╓о╓и╓╕╓Д╓ц╓©╓И╪Й╓кфЧ╓Й╓ч╓╧╓╚ ╟йа╟ Xi Graphics ╓Х╓Й FreeBSD мя╓н CDE ╓╛ хнгД╓╣╓Л╓ф╓╓╓ч╓╥╓©╓╛, ╦╫╨ъ╓о╢Ш╓кхнгД╓╛╫╙н╩╓╥╓ф╓╓╓ч╓╧. KDE б©╓╞╓нею╓г CDE ╓хнЮ╩В╓╥╓ф╓╓╓К╔╙║╪╔в╔С╔╫║╪╔╧╓н X11 ╔г╔╧╔╞╔х╔ц╔в╢д╤╜╓г╓╧. xfce ╓н ╔К╔ц╔╞ & ╔у╔ё║╪╔К(лУцМ: Ё╟╢я╓ДаЮ╨НйЩк║╓н╓Ё╓х)╓Б╣╓╓кфЧ╓К╓╚╓Бцн╓Л╓ч╓╩╓С. KDE, xfce ╓о, ╓╓╓╨╓Л╓Б FreeBSD Ports Collection ╓к╢ч╓ч╓Л╓ф╓╓╓ч╓╧. ╧Б╣║г╫╓й╬╕мя X ╔╣║╪╔п╓ц╓ф╓╒╓К╓С╓г╓╧╓╚? ╓о╓╓, Xi Graphics ╓х Metro Link ╓╚╓И, FreeBSD ╓ш╓╚ Intel ╔ы║╪╔╧╓н╔╥╔╧╔ф╔Ю╓гф╟╨Н╓╧╓К Accelerated-X ╓х╓╓╓╕ю╫ий╓╛хнгД╓╣╓Л╓ф╓╓╓ч╓╧. Metro Link ╓о, FreeBSD ╓н╔я╔ц╔╠║╪╔╦аЮ╨Н╔д║╪╔К╓РмЬмя╓╧╓К╓Ё╓х╓г мф╟в╓кюъдЙ╓╛╧т╓й╓╗╓К╓ш╓╚, ©Тб©╓╞╓н╔с╔г╔╙╔э║╪╔и╓Р╔╣╔щ║╪╔х╓╥╓© ╧Б╣║г╫╓й X ╔╣║╪╔п╓РдС╤║╓╥╓ф╓╓╓ч╓╧. гшиш╓о╔п╔╓╔й╔Й╥а╪╟╓н╓ъ╓г, FTP ╓╛мЬмя╡дг╫╓г╓╧. ╓Б╓а╓М╓С, ╓х╓ф╓Б╟б╡а($39)╓к╪Й╓кфЧ╓Л╓К╓Ё╓х╓╛╓г╓╜╓ч╓╧. ╓ч╓©, Metro Link ╓о ELF хг, a.out хг╓н FreeBSD мя Motif ╓БхнгД╓╥╓ф╓╓╓ч╓╧(а╟╓Р╩╡╬х). ╓Х╓Й╬э╓╥╓╓╬ПйС╓о Metro Link WWW page лД╓╓╧Г╓О╓╩╓о Sales ╓ч╓©╓о Support ее╩р╔А║╪╔К╔╒╔и╔Л╔╧ ╓Б╓╥╓╞╓о phone (954) 938-0283 or +1 954 938-0283 Xi Graphics ╓╛дС╤║╓╥╓ф╓╓╓К╧Бю╜г╫╓й X ╔╣║╪╔п╓оЁз╓кюъдЙ╓Р╧т╓й╓╗╓К╓ш╓╚, ©Тб©╓╞╓н╔с╔г╔╙╔э║╪╔и ╓Р╔╣╔щ║╪╔х╓╥╓ф╓╓╓ч╓╧. ╔╣║╪╔п╓о╔п╔╓╔й╔Й╓н╓ъ╓╛╢ч╓ч╓Л╓ч╓╧. FreeBSD мя╓х Linux мя╓неЩ╧Г╓╣╓Л╓©╔у╔М╔ц╔т║╪╔г╔ё╔╧╔╞╓кфЧ╓ц╓ф╓╓╓ч╓╧. Xi Graphics ╓о Laptop ╔╣╔щ║╪╔х╓кфц╡╫╓╥╓©╧Бю╜г╫ X ╔╣║╪╔п╓БдС╤║╓╥╓ф╓╓╓ч╓╧. ╔п║╪╔╦╔Г╔С 5.0 ╓н║ж╦ъ╢╧╔г╔Б║в╓╛л╣на╓гфЧ╪Й╓г╓╜╓ч╓╧. ╓ч╓© Xi Graphics ╓о FreeBSD мя╓н Motif ╓х CDE ╓БхнгД╓╥╓ф╓╓╓ч╓╧ (а╟╓Р╩╡╬х). ╓Х╓Й╬э╓╥╓╓╬ПйС╓о Xi Graphics WWW page лД╓╓╧Г╓╩╓о Sales ╓ч╓©╓о Support ╓Б╓╥╓╞╓о phone (800) 946 7433 or +1 303 298-7478. FreeBSD мя╓н╔г║╪╔©╔ы║╪╔╧╔╥╔╧╔ф╔Ю╓о╓╒╓Й╓ч╓╧╓╚? ╓Б╓а╓М╓С╓г╓╧. FreeBSD ╓н╔╕╔╖╔ж╔╣╔╓╔х╓к╓╒╓К ╬╕мя╔ы╔С╔ю║╪ ╓х╓╓╓╕╔╩╔╞╔╥╔Г╔С╓Р╓╢мВ╓╞╓ю╓╣╓╓. ╓ч╓©, FreeBSD Ports Collection ╓н╔г║╪╔©╔ы║╪╔╧╓н╔╩╔╞╔╥╔Г╔С╓Б╩╡╧м╓к╓й╓К╓г╓╥╓Г╓╕. Oracle ╓Р FreeBSD ╬Е╓гф╟╓╚╓╧╓Ё╓х╓о╓г╓╜╓ч╓╧╓╚? ╓о╓╓. Linux хг Oracle ╓Р FreeBSD ╓г╔╩╔ц╔х╔╒╔ц╔в╓╧╓К╓©╓А╓нйЩк║╓о, ╪║╓к╪╗╓╧╔з║╪╔╦╓к╬э╓╥╓╞╫Я╓╚╓Л╓ф╓╓╓ч╓╧. http://www.scc.nl/~marcel/howto-oracle.html http://www.lf.net/lf/pi/oracle/install-linux-oracle-on-freebsd ╔Ф║╪╔╤╔╒╔в╔Й╔╠║╪╔╥╔Г╔С лУ: ╩Ё╡╪ ╫ъ junkun@esys.tsukuba.ac.jp, &a.jp.shou;, 1997 г╞ 11 ╥Н 8 фЭ. ╓╫╓╕╓╓╓╕╔Ф║╪╔╤╔╒╔в╔Й╔╠║╪╔╥╔Г╔С╓о╓и╓Ё╓к╓╒╓К╓н? FreeBSD╓к╟э©╒╓╣╓Л╓©╔╫╔у╔х╔╕╔╖╔╒╔я╔ц╔╠║╪╔╦╓к╓д╓╓╓ф╓о, FreeBSD Ports Collection ╓н╔з║╪╔╦╓Р╓╢мВ╓╞╓ю╓╣╓╓. ╓Ё╓н╔Й╔╧╔х╓к╓о╦╫╨ъ 3400 ╓Р╠ш╓╗╓К╧Юлэ╓╛╓╒╓Й, ╓╥╓╚╓БкХфЭ╧╧©╥╓╣╓Л╓ф╓╓╓ч╓╧. ╓Ё╓н╔з║╪╔╦╓Р╓Ё╓ч╓А╓кк╛╓Л╓К╓╚, freebsd-announce ╔А║╪╔Й╔С╔╟╔Й╔╧╔х╓Р╧ьфи╓╧╓К╓х, ©╥╓╥╓╞фЧ╓ц╓© ports ╓РдЙ╢Эе╙╓к╔а╔╖╔ц╔╞╓╧╓К╓Ё╓х╓╛╓г╓╜╓ч╓╧. бГиТй╛╓н ports ╓о 2.2 ╓х 3.x ╓╙╓Х╓с 4.x ╔ж╔И╔С╔а╓гмЬмя╓г╓╜╓К╓о╓╨╓г╓╧. б©╓╞╓о 2.1.x ╥о╓н╔╥╔╧╔ф╔Ю╓г╓Бф╠мм╓кф╟╨Н╓╧╓К╓г╓╥╓Г╓╕. FreeBSD ╓н╔Й╔Й║╪╔╧╓╛╫п╓Кеы╓к, ╓╫╓н╔Й╔Й║╪╔╧╓н╩Чею╓г╓н ports ╔д╔Й║╪╓н ╔╧╔й╔ц╔в╔╥╔Г╔ц╔х╓╛╩ё╓И╓Л, ports/ ╔г╔ё╔Л╔╞╔х╔Й╓к г╪╓А╓И╓Л╓К╓Ё╓х╓к╓й╓ц╓ф╓╓╓ч╓╧. ╓ч╓©, package ╓х╓╓╓╕╧м╓╗╓Б╨нмя╓╣╓Л╓ф╓╓╓ч╓╧. ╓Ё╓Л╓о╢Пкэе╙╓к╓о gzip ╓г╟╣╫л╓╣╓Л╓©╔п╔╓╔й╔Й╔г╔ё╔╧╔х╔Й╔с╔Е║╪╔╥╔Г╔С╓к, ╔╓╔С╔╧╔х║╪╔К╩Ч╓к╢д╤╜╓к╧Г╓О╓╩╓©╨Н╤х╓╛и╛мв╓к╓й╓ц╓©╬Л╧Г, ╧т╓╕╣║г╫╓Рб©╬╞иу╓╠╡ц╓╗╓©╓Б╓н╓г╓╧. package ╓Р╩х╓╗╓п, ╓и╓н╓Х╓╕╓й╔у╔║╔╓╔К╓╛гшишй╙╓х╓╥╓ф╢ч╓ч╓Л╓ф╓╓╓К╓╚, ╓х╦ю╓ц╓©╨ы╓╚╓╓╩Жйа╓к╓╓╓а╓╓╓ахя╓О╓╣╓Л╓К╓Ё╓х╓й╓╞, ╢йц╠╓к╔╓╔С╔╧╔х║╪╔К╓Д╔╒╔С╔╓╔С╔╧╔х║╪╔К╓Р╥╚╓Ййж╓╧╓Ё╓х╓╛╓г╓╜╓ч╓╧. ╔╓╔С╔╧╔х║╪╔К╓╥╓©╓╓ package ╓╛╓╒╓К╓й╓И, /stand/sysinstall╓н, ║ж╔╓╔С╔╧╔х║╪╔К╦Е╓н FreeBSD ╓нюъдЙ╓Р╧т╓╕║в╓н╡╪╓к╓╒╓К package ╓н╔╓╔С╔╧╔х║╪╔К╔А╔к╔Е║╪╓Р╩х╓╕╓╚, package ╓н╔у╔║╔╓╔Кл╬╓Р╩ьдЙ╓╥╓ф pkg_add(1) ╓Р╩хмя╓╥╓ф╓╞╓ю╓╣╓╓. package ╓н╔у╔║╔╓╔Кл╬╓к╓о, дл╬ОкЖхЬ╓к .tgz ╓╛╓д╓╓╓ф╓╓╓ч╓╧. CDROM ╓Р╓╢╩хмя╓нйЩ╓о, CD ╓н packages/All ╔г╔ё╔Л╔╞╔х╔Й╓╚╓И╓╫╓Л╓И╓н╔у╔║╔╓╔К╓РмЬмя╓╧╓К╓Ё╓х╓╛╓г╓╜╓ч╓╧. ╓ч╓©, ╟й╡╪╓н╬Л╫Й╓╚╓И, FreeBSD ╓нЁф╪О╔п║╪╔╦╔Г╔С╓к╓╒╓О╓╩╓© package ╓Р╔ю╔╕╔С╔М║╪╔и╓╧╓К ╓Ё╓х╓Б╓г╓╜╓ч╓╧. 2.2.8-RELEASE/2.2.8-STABLE мя ftp://ftp.FreeBSD.org/pub/FreeBSD/ports/i386/packages-2.2.8/ 3.X-RELEASE/3.X-STABLE мя ftp://ftp.FreeBSD.org/pub/FreeBSD/ports/i386/packages-3-stable/ 4.X-RELEASE/4-STABLE мя ftp://ftp.FreeBSD.org/pub/FreeBSD/ports/i386/packages-4-stable/ 5.X-CURRENT мя ftp://ftp.FreeBSD.org/pub/FreeBSD/ports/i386/packages-5-current ╓╙╤А╓╞╓н╔ъ╔И║╪╔╣╔╓╔х╓Б╓╢мЬмя╓╞╓ю╓╣╓╓. ©╥╓╥╓╓ ports ╓╛бЁ║╧╓хди╡ц╓╣╓Л╓ф╓╓╓К╬Убж╓й╓н╓г, а╢╓ф╓н ports ╓к бп╠Ч╓╧╓К package ╓╛б╦╨ъ╓╧╓К╓О╓╠╓г╓о╓й╓╓╓Ё╓х╓РЁп╓╗╓ф╓╙╓╓╓ф╓╞╓ю╓╣╓╓. дЙ╢Эе╙╓к ftp.FreeBSD.org ╔ч╔╧╔©║╪╔╣╔╓╔х╓Рк╛╓Л╓ф, ╓и╓н╓Х╓╕╓й package ╓╛мЬмя╓г╓╜╓К╓н╓╚╔а╔╖╔ц╔╞╓╧╓К╓н╓Бни╓╓╓г╓╥╓Г╓╕. ╓й╓╪ /bin/sh ╓о╓Ё╓С╓й╓кдЦ╣║г╫╓й╓н╓г╓╧╓╚? ╓и╓╕╓╥╓ф bash ╓Дб╬╓н╔╥╔╖╔К╓Р╨нмя╓╥╓й╓╓╓н╓г╓╥╓Г╓╕? ╓╫╓Л╓о, POSIX ╓╛╓╫╓н╓Х╓╕╓й╔╥╔╖╔К╓╛╓╒╓К╓Ё╓х╓Р╣╛дЙ╓╥╓ф╓╓╓К╓╚╓И╓г╓╧. ╓Б╓ц╓х╧Ч╓ъфЧ╓ц╓©╡СеЗ: б©╓╞╓н╔Ф║╪╔╤╓о, б©╓╞╓н╔╥╔╧╔ф╔Ю╓гф╠╓╦╓Х╓╕╓кф╟╨Н╓г╓╜╓К╔╥╔╖╔К╔╧╔╞╔Й╔в╔х╓Р╫Я╓╞и╛мв╓╛╓╒╓Й╓ч╓╧. ╓Ё╓Л╓╛, POSIX ╓г╔╥╔╖╔К╓Д╔Ф║╪╔ф╔ё╔Й╔ф╔ё╔Ё╔ч╔С╔и╓╛╨ы╓╞╣╛дЙ╓╣╓Л╓ф╓╓╓КмЩмЁ╓г╓╧. ╓ш╓х╓С╓и╓╧╓ы╓ф╓н╔╧╔╞╔Й╔в╔х╓о Bourne shell ╓г╫Я╓╚╓Л╓ф╓╓╓К╓н╓г╓╧╓╛, ╓╫╓Л╓о, ©Тб©╓╞╓н╫емв╓й╔в╔М╔╟╔И╔ъ╔С╔╟╔╓╔С╔©╔у╔╖╔╓╔╧(&man.make.1;, &man.system.3;, &man.popen.3;, ╓Д Perl ╓Д Tcl еЫ╓ннЮ╩В╓н ╧Б©Е╫Ю╔╧╔╞╔Й╔в╔х╦ю╦Л)╓╛, ╔Ё╔ч╔С╔и╓н╡Р╪А╓к Bourne shell ╓Р╩х╓╕╓╚╓И╓г╓╧. ╓Ё╓н╓Х╓╕╓к Bourne shell ╓╛╤к╓А╓фияхк╓к╓╚╓д╧╜хо╟о╓г╩х╓О╓Л╓ф╓╓╓К╓©╓А, агаА╓╞╣╞ф╟╓г╓╜╓фЁн╪б╓кф╟╨Н╓╥, ╔А╔Б╔Й╓Р╬╞╓╥╓╥╓╚╬цхЯ╓╥╓й╓╓╓х╓╓╓╕╓Ё╓х╓╛ ╫емв╓к╓й╓Й╓ч╓╧. ╢Шб╦╓н╪баУ╓о, ╩Д╓©╓а╓к╡дг╫╓й╦б╓Й╓Ё╓Л╓И╓нб©╓╞╓нмв╣А╓Рф╠╩Ч╓ккЧб╜╓╧╓К╓Ё╓х╓╛╓г╓╜╓К╨гни╓н╓Б╓н╓г╓╧. /bin/sh ╓Р╬╝╓╣╓╓╓ч╓ч╓кйщ╓д╓©╓А, ╩Д╓©╓а╓об╬╓н╔╥╔╖╔К╓╛╩Щ╓дмм║╧╓ййьмЬ╓й╣║г╫╓РдС╤║╓╥╓ф╓╓╓ч╓╩╓С. Ports ╔Ё╔Л╔╞╔╥╔Г╔С╓╛ bash ╓Д scsh, tcsh, zsh ╓й╓и╓н б©╣║г╫╓й╔╥╔╖╔К╓Р╢ч╓С╓г╓╓╓К╓╚╓И╓г╓╧. (╓Ё╓Л╓И╓н╔╥╔╖╔К╓╧╓ы╓ф╓н ╔А╔Б╔Й╩хмя╬У╤╥╓о, ps -u ╓н VSZ ╓Д RSS ╓н╧т╓г, ╓╒╓й╓©╪╚©х╓╛Ёнг╖╓╧╓К╓Ё╓х╓╛╓г╓╜╓ч╓╧.) libc.so.3.0 ╓о╓и╓Ё╓к╓╒╓Й╓ч╓╧╓╚? FreeBSD 2.1.x ╓н╔╥╔╧╔ф╔Ю╓г 2.2 ╟й╧ъмя╓н package ╓Рф╟╓╚╓╫╓╕╓х╓╥╓ф╓╓╓ч╓╧╓м? а╟╓н╔╩╔╞╔╥╔Г╔С╓Рфи╓С╓г, ╔╥╔╧╔ф╔Ю╓к╧Г╓ц╓©ю╣╓╥╓╓ port/package ╓РфЧ╪Й╓╥╓ф╓╞╓ю╓╣╓╓. Error: can't find libc.so.4.0 ╓х╓╓╓╕╔А╔ц╔╩║╪╔╦╓╛и╫╪╗╓╣╓Л╓К╓н╓г╓╧╓╛. ╡©╓╚╓н╪Й╟Ц╓╓╓г, 4.X ╓х 5.X ╓н╔╥╔╧╔ф╔Юмя package ╓Р╔ю╔╕╔С╔М║╪╔и╓╥, FreeBSD 2.X, ╓Б╓╥╓╞╓о 3.X ╓н╔╥╔╧╔ф╔Ю╓к╔╓╔С╔╧╔х║╪╔К╓╥╓ф╓╥╓ч╓ц╓©╓н╓г╓╥╓Г╓╕. бп╠Ч╓╧╓Кю╣╓╥╓╓╔п║╪╔╦╔Г╔С╓н package ╓Р╔ю╔╕╔С╔М║╪╔и╓╥╓ф╓╞╓ю╓╣╓╓. 386/486SX ╓н╔ч╔╥╔С╓г ghostscript ╓Рф╟╓╚╓╧╓х╔╗╔И║╪╓╛╓г╓ч╓╧. ╓╒╓й╓©╓н╔ч╔╥╔С╓к╓о©Тцм╠И╩╩╔в╔М╔╩╔ц╔╣╓╛еЦ╨э╓╣╓Л╓ф╓╓╓ч╓╩╓С╓м? ╔╚║╪╔м╔К╓к╔Ё╔в╔М╔╩╔ц╔╣╓нбЕ╓О╓Й╓х╓й╓К©Тцм╠И╩╩╔╗╔ъ╔Е╔Л║╪╔©╓Рди╡ц╓╧╓Ки╛мв╓╛╓╒╓Й╓ч╓╧. ╟й╡╪╓н╔╙╔в╔╥╔Г╔С╓Р╔╚║╪╔м╔К╓н╔Ё╔С╔у╔ё╔╟╔Л║╪╔╥╔Г╔С╔у╔║╔╓╔К╓кди╡ц╓╥╓ф, ╔╚║╪╔м╔К╓Р╨ф╧╫цш╓╥╓ф╓╞╓ю╓╣╓╓. options GPL_MATH_EMULATE ╓Ё╓н╔╙╔в╔╥╔Г╔С╓Рди╡ц╓╧╓К╬Л╧Г, MATH_EMULATE ╓н╧т╓Р╨О╫Э╓╥╓ф╓╞╓ю╓╣╓╓. SCO/iBCS2 ╓н╔╒╔в╔Й╔╠║╪╔╥╔Г╔С╓Р╪б╧т╓╧╓К╓х, socksys ╓гмН╓а╓ф╓╥╓ч╓╓╓ч╓╧. (FreeBSD 3.0 ╓х╓╫╓Л╟йа╟╓н╓ъ) ╓ч╓╨╨г╫И╓к /etc/sysconfig(╓ч╓©╓о /etc/rc.conf)╓нцФ╓н ╨г╦Е╓н╔╩╔╞╔╥╔Г╔С╓Рйт╫╦╓╥, ╟й╡╪╓нйя©Т╓Р YES ╓кд╬╓╥╓ч╓╧. # Set to YES if you want ibcs2 (SCO) emulation loaded at startup ibcs2=NO ╓Ё╓Л╓г╔╥╔╧╔ф╔Ю╓н╣╞ф╟╩Ч╓к ibcs2 ╔╚║╪╔м╔К╔Б╔╦╔Е║╪╔К╓╛фи╓ъ╧Ч╓ч╓К╓Х╓╕╓к╓й╓Й╓ч╓╧. ╪║╓к /compat/ibcs2/dev/ ╓Р╟й╡╪╓н╓Х╓╕╓кйт╫╦╓╥╓ч╓╧. lrwxr-xr-x 1 root wheel 9 Oct 15 22:20 X0R@ -> /dev/null lrwxr-xr-x 1 root wheel 7 Oct 15 22:20 nfsd@ -> socksys -rw-rw-r-- 1 root wheel 0 Oct 28 12:02 null lrwxr-xr-x 1 root wheel 9 Oct 15 22:20 socksys@ -> /dev/null crw-rw-rw- 1 root wheel 41, 1 Oct 15 22:14 spx open ╓Д close ╓н╫ХмЩ╓о, socksys ╓╚╓И /dev/null ╓ь╔╥╔С╔э╔Й╔ц╔╞╔Й╔С╔╞╓Рд╔╓К╓Ё╓х╓гбЕмя╓╥╓ч╓╧. ╩д╓Й╓н╫ХмЩ╓о, -CURRENT ╓кфЧ╓ц╓ф╓╓╓К╔Ё║╪╔и╓╛ц╢еЖ╓╥╓ф╓╓╓ч╓╧. ╓Ё╓Л╓о╟йа╟╓н╓Б╓н╓Х╓Й ╓╨╓ц╓х╔╧╔ц╔╜╔Й╓╥╓©йЩк║╓г╓╧. INN(╔╓╔С╔©║╪╔м╔ц╔х╔к╔Е║╪╔╧)╓нюъдЙйЩк║╓о? inn ╓н package ╓Д port ╓Р╔╓╔С╔╧╔х║╪╔К╓╥╓©╓╒╓х╓к Dave Barr's INN Page ╓Р╦╚╓ф╓ъ╓ч╓╥╓Г╓╕. ╫И©╢╪т╦Ч╓╠╓н INN FAQ ╓╛╓╒╓Й╓ч╓╧. ╓и╓н╔п║╪╔╦╔Г╔С╓н Microsoft FrontPage ╓Р╪Й╓кфЧ╓Л╓Ки╛мв╓╛╓╒╓Й╓ч╓╧╓╚? ╔К║╪╔╞, ports ╓Р╩х╓╕╓н╓ю! ╔я╔ц╔а╫ХмЩ╨я╓ъ╓н Apache ╓╛ ports ╔д╔Й║╪╓╚╓ИфЧ╪Й╓г╓╜╓ч╓╧. FreeBSD ╓о Java ╓Р╔╣╔щ║╪╔х╓╥╓ф╓╓╓ч╓╧╓╚? ╓о╓╓. http://www.FreeBSD.org/java/ ╓Р╓╢мВ╓╞╓ю╓╣╓╓. фЭкэ╦ЛлУ ╓Б╓╒╓Й╓ч╓╧. 3.x-STABLE ╓Р╨э╓╩╓ф╓╓╓К╔ч╔╥╔С╓г port ╓╛╔Ё╔С╔я╔╓╔К╓г╓╜╓й╓╓╓Ё╓х╓╛╓╒╓Й╓ч╓╧. ╓╫╓Л╓о╓и╓╕╓╥╓ф╓г╓╧╓╚? ╓Б╓╥, ╓╫╓н╩Чею╓н -CURRENT ╓╚ -STABLE ╓кхФ╓ы╓ф╓╨╓ц╓х╦е╓╓╔п║╪╔╦╔Г╔С╓н FreeBSD ╓РмЬмя╓╥╓ф╓╓╓К╓й╓И, http://www.FreeBSD.org/ports/ ╓к╓╒╓К ports ╔╒╔ц╔в╔╟╔Л║╪╔и╔╜╔ц╔х╓╛и╛мв╓г╓╧. ╨г©╥╓н FreeBSD ╓РмЬмя╓╥╓ф╓╓╓К╓н╓кх╞ю╦╓╧╓К╬Л╧Г╓о╓╙╓╫╓И╓╞, -CURRENT ╓г╓ою╣╬О╓й╓н╓к -STABLE ╓г╓о╓╕╓ч╓╞ф╟╓╚╓й╓╞╓й╓К╓Х╓╕╓ййя╧╧╓╛╓╫╓н port ╓кбп╓╥╓ф╧т╓й╓О╓Л, ╪УмЩ╓╣╓Л╓ф╓╥╓ч╓ц╓ф╓╓╓К╓н╓г╓╥╓Г╓╕. ports ╔Ё╔Л╔╞╔╥╔Г╔С╓о -CURRENT ╓х -STABLE, н╬йЩ╓н╔ж╔И╔С╔а╓гф╟╓╚╓й╓╠╓Л╓п╓й╓И╓й╓╓╓Б╓н╓г╓╧╓н╓г, ╓Б╓╥╓╫╓Л╓Рх╞╦╚╓╥╓©╓И send-pr(1) ╔Ё╔ч╔С╔и╓Р╩х╓ц╓ф╔п╔╟╔Л╔щ║╪╔х╓ндС╫п╓Р╓╙╢Й╓╓╓╥╓ч╓╧. ld.so ╓о╓и╓Ё╓к╓╒╓Й╓ч╓╧╓╚? 3.1-R ╟й╧ъ╓й╓и╓н Elf ╡╫╓╣╓Л╓©╔ч╔╥╔С╓г Netscape Navigator ╓й╓и╓н aout ╥а╪╟╓н╔╒╔в╔Й╔╠║╪╔╥╔Г╔С╓Рф╟╓╚╓╧╓х╓╜╓к╓о, /usr/libexec/ld.so ╓х aout ╔И╔╓╔ж╔И╔Й╓н╔у╔║╔╓╔К╓╛и╛мв╓г╓╧. ╓╫╓Л╓И╓огшишй╙╓н compat22 ╓кг╪╓А╓И╓Л╓ф╓╓╓ч╓╧. /stand/sysinstall ╓Д compat22 ╔╣╔ж╔г╔ё╔Л╔╞╔х╔ЙфБ╓н install.sh ╓Р╩х╓ц╓ф compat22 ╓Р╔╓╔С╔╧╔х║╪╔К╓╥╓ф╓╞╓ю╓╣╓╓. ╧Г╓О╓╩╓ф 3.1-R ╓х 3.2-R ╓н ERRATA ╓Б╓╙фи╓ъ╓╞╓ю╓╣╓╓. ╔╚║╪╔м╔К╔Ё╔С╔у╔ё╔╟╔Л║╪╔╥╔Г╔С лУ: &a.jp.kiroh;, 1997 г╞ 11 ╥Н 10 фЭ. ╔╚║╪╔м╔К╓Р╔╚╔╧╔©╔ч╔╓╔╨╓╥╓©╓╓╓С╓г╓╧╓╛, фЯ╓╥╓╓╓г╓╧╓╚? а╢аЁфЯ╓╥╓╞╓╒╓Й╓ч╓╩╓С. ╔╚║╪╔м╔К╓н╨ф╧╫цш╓Рд╢╓ы╓ф╓╞╓ю╓╣╓╓. ╓╕╓ч╓╞ф╟╨Н╓╧╓К╔╚║╪╔м╔К╓╛╓г╓╜╓©╓И, фЭиуфЧ╓Й╓н╔╚║╪╔м╔К╓н╔╧╔й╔ц╔в╔╥╔Г╔ц╔х╓Р kernel.YYMMDD ╓н╓Х╓╕╓к╨Ню╝╓╧╓К╓Ё╓х╓Р╓╙╓╧╓╧╓А╓╥╓ч╓╧. ╓Ё╓╕╓╥╓ф╓╙╓╠╓п, ╪║╓к╔╚║╪╔м╔К╓н╧╫цш╓Р╓Д╓ц╓ф╓╕╓ч╓╞╓╓╓╚╓й╓╞╓й╓ц╓ф╓╥╓ч╓ц╓ф╓Б, kernel.GENERIC ╓к╓О╓╤╓О╓╤лА╓Ки╛мв╓╛╓й╓╞╓й╓Й╓ч╓╧. ╓Ё╓Л╓о, GENERIC ╔╚║╪╔м╔К╓г╔╣╔щ║╪╔х╓╣╓Л╓й╓╓╔г╔п╔╓╔╧╓╚╓И╣╞ф╟╓╥╓ф╓╓╓К╬Л╧Г╓о, фц╓к╫емв╓г╓╧(╥п╦Ё╪т╓о╦Л╓К╓ц╓ф╓Д╓д╓г╓╧). _hw_float ╓╛л╣╓╓╓н╓г, ╔╚║╪╔м╔К╓н╔Ё╔С╔я╔╓╔К╓╛╓╕╓ч╓╞╓╓╓╜╓ч╓╩╓С. ©Дб╛╓г╓╧╓╠╓и, ©Тцм╠И╩╩╔Ё╔в╔М╔╩╔ц╔╣╓Р╩Щ╓ц╓ф╓й╓╓╓╚╓И╓х╩в╓ц╓ф, npx0 ╓Р╔╚║╪╔м╔К╔Ё╔С╔у╔ё╔╟╔у╔║╔╓╔К╓╚╓И╨О╫Э╓╥╓а╓Ц╓ц╓©╓С╓╦╓Ц╓й╓╓╓г╓╧╓╚? npx0 ╓ои╛©э╓г╓╧. ╔Ё╔в╔М╔╩╔ц╔╣╓╛╓й╓╞╓ф╓Б, npx0 ╔г╔п╔╓╔╧╓о╨О╫Э╓╥╓ф╓о╓╓╓╠╓ч╓╩╓С. ╓О╓©╓╥╓н╔╚║╪╔м╔К╓о╓и╓╕╓╥╓ф╓Ё╓С╓й╓кбГ╓╜╓╓ (10MB ╟й╬Е) ╓н╓г╓╥╓Г╓╕╓╚? ╓Ё╓Л╓о╔г╔п╔ц╔╟╔Б║╪╔и╓г╔╚║╪╔м╔К╓Р╧╫цш╓╥╓ф╓╓╓К╓Ё╓х╓╛╦╤╟Ь╓г╓╧. ╔г╔п╔ц╔╟╔Б║╪╔и╓г╧╫цш╓╣╓Л╓©╔╚║╪╔м╔К╓о, ╔г╔п╔ц╔╟╓кмя╓╓╓И╓Л╓КкдбГ╓й╔╥╔С╔э╔К╬ПйС╓Р╢ч╓С╓г╓╓╓К╓©╓А, ╔╚║╪╔м╔К╓н╔╣╔╓╔╨╓╛хС╬О╓кбГ╓╜╓╞╓й╓Й╓ч╓╧. ╓©╓ю╓╥ FreeBSD 3.0 ╓х╓╫╓Л╟й╧ъ╓н╔╥╔╧╔ф╔Ю╓н╬Л╧Г╓о ╔╚║╪╔м╔К╓н╔╣╔╓╔╨╓о╬╝╓╣╓╞╓й╓Й╓ч╓╧╓╥, ╔г╔п╔ц╔╟╔╚║╪╔м╔К╓Р╪б╧т╓╧╓К╩Ч╓н╔я╔у╔╘║╪╔ч╔С╔╧╓ндЦ╡╪╓Б╓╒╓Й╓ч╓╩╓С. ╓ч╓©, ╓╫╓н╔╚║╪╔м╔К╓о╔╥╔╧╔ф╔Ю╓╛╔я╔к╔ц╔╞╓╥╓©╬Л╧Г╓км╜мя╓г╓╧. ╓╥╓╚╓╥, мфнл╓н╬╝╓╣╓й╔г╔ё╔╧╔╞╓г╔╥╔╧╔ф╔Ю╓Р╠©мя╓╥╓ф╓╓╓©╓Й, ц╠╓к╔г╔п╔ц╔╟╔╚║╪╔м╔К╓Р╪б╧т╓╥╓©╓╞╓й╓╓╬Л╧Г╓о, ╟й╡╪╓нн╬йЩ╓╛еЖ╓ф╓о╓ч╓ц╓ф╓╓╓К╓╚╓и╓╕╓╚Ёнг╖╓╥╓ф╓╞╓ю╓╣╓╓. ╔╚║╪╔м╔К╔Ё╔С╔у╔ё╔╟╔у╔║╔╓╔К╓к╟й╡╪╓н╧т╓╛╫Я╓╚╓Л╓ф╓╓╓й╓╓╓Ё╓х. makeoptions DEBUG=-g config ╓Р╪б╧т╓╧╓К╨щ, ╔╙╔в╔╥╔Г╔С╓Риу╓╠╓ф╓╓╓й╓╓╓Ё╓х. ╬Е╓к╫Я╓╚╓Л╓©╩ьдЙ╓он╬йЩ╓х╓Б╔╚║╪╔м╔К╓Р╔г╔п╔ц╔╟╔Б║╪╔и╓г╧╫цш╓╧╓К╓©╓А╓н╓Б╓н╓г╓╧. ╬Е╓н╪Й╫Г╓Р╫╬╓ц╓ф╓╓╓К╦б╓Й, ╔╚║╪╔м╔К╓РиАдл╓к╧╫цш╓╥╓ф╔╣╔╓╔╨╓н╬╝╓╣╓й╔╚║╪╔м╔К╓Рфю╓К╓Ё╓х╓╛╓г╓╜╓ч╓╧. ╓╫╓н╬Л╧Г╓н╔╚║╪╔м╔К╔╣╔╓╔╨╓о, ╓╙╓Х╓╫ 1.5MB ╓╚╓И 2MB дЬеы╓к╓й╓Й╓ч╓╧. ╔ч╔К╔а╔щ║╪╔х╔╥╔Й╔╒╔К╓н╔Ё║╪╔и╓гЁД╓Й╧Ч╓ъ╓╛╬вфм╓╥╓ф╓╓╓ч╓╧. Q. ╔ч╔К╔а╔щ║╪╔х╔╥╔Й╔╒╔К╓Р ╔╣╔щ║╪╔х╓╧╓К╔Ё║╪╔и╓Р╢ч╓С╓ю╔╚║╪╔м╔К╓Р╔Ё╔С╔я╔╓╔К╓╥╓Х╓╕╓х╓╧╓К╓х, ╨г╫И╓н╔щ║╪╔х╓ю╓╠╦║╫п╓╣╓Л, ╩д╓Й╓н╔щ║╪╔х╓оЁД╓Й╧Ч╓ъ╓н╤╔╧Г╓н╓©╓А╔╧╔╜╔ц╔в╓╣╓Л╓©╓х╦ю╓О╓Л╓ч╓╧. ╓и╓╕╓Д╓ц╓©╓И╓╓╓╓╓г╓╥╓Г╓╕╓╚? A. ╓Ё╓Ё╓г╓нлДбЙ╓о, FreeBSD ╓к╓о╔о║╪╔и╔╕╔╖╔╒╓ч╓©╓о╔╫╔у╔х╔╕╔╖╔╒╓н╤╔╧Г╓к╓Х╓Й, ╔╚║╪╔м╔К╓╛╔╞╔И╔ц╔╥╔Е╓╧╓К╓н╓Рки╓╟╔Ё║╪╔и╓╛╢ч╓ч╓Л╓ф╓╓╓К╓х╓╓╓╕ею╓г╓╧. ╡Р╥Х╓╧╓К╓к╓о, ╨г╫И╓н╔щ║╪╔х╓к╓ю╓╠ IRQ ╓нюъдЙ╓Р╫Я╓╜, ╩д╓Й╓о IRQ ╓нюъдЙ╓Р╨О╫Э╓╥╓ч╓╧. ╟й╡╪╓кнЦ╓Р╪╗╓╥╓ч╓╧. # Multiport high-speed serial line - 16550 UARTS # device sio2 at isa? port 0x2a0 tty irq 5 flags 0x501 vector siointr device sio3 at isa? port 0x2a8 tty flags 0x501 vector siointr device sio4 at isa? port 0x2b0 tty flags 0x501 vector siointr device sio5 at isa? port 0x2b8 tty flags 0x501 vector siointr ╔╚║╪╔м╔К╓Р╧╫цш╓к╓╓╓д╓Б╪╨гт╓╥╓ч╓╧. GENERIC ╔╚║╪╔м╔К╓Б╧╫цш╓г╓╜╓ч╓╩╓С. ╓╣╓ч╓╤╓ч╓ймЩмЁ╓╛╧м╓╗╓И╓Л╓ч╓╧. ╟й╡╪, ╫Г╓кнС╣╜╓╥╓ч╓╧. ╓╒╓й╓©╓о©╥╓╥╓╓ make buildkernel ╓Д make installkernel ╔©║╪╔╡╔ц╔х╓Р╩х╓О╓╨, ╦╫╨ъаЖ╓ц╓ф╓╓╓К╔╥╔╧╔ф╔Ю╓Р╧╫цш╓╥╓©╩Ч╓х╟ш╓й╓К╔╫║╪╔╧╔д╔Й║╪╓Р ╧╫цш╓╥╓Х╓╕╓х╓╥╓ф╓╓╓К (╓©╓х╓╗╓п, 4.0-RELEASE ╓н╔╥╔╧╔ф╔Ю╬Е╓г 4.2-RELEASE ╓Р╧╫цш╓╥╓Х╓╕╓х╓╥╓ф╓╓╓К) ╓н╓г╓о╓й╓╓╓г╓╥╓Г╓╕╓╚? ╓Б╓╥╔╥╔╧╔ф╔Ю╓Р╔╒╔ц╔в╔╟╔Л║╪╔и╓╥╓Х╓╕╓х╓╥╓ф╓╓╓К╓н╓й╓И, /usr/src/UPDATING ╔у╔║╔╓╔К╓Р ╤╕дл╧Юлэ (COMMON ITEMS) юА╓кцМ╟у╓╥╓й╓╛╓И╨г╦Е╓ч╓г╓╙фи╓ъ╓╞╓ю╓╣╓╓. ╓╒╓й╓©╓о©╥╓╥╓╓ make buildkernel ╓Д make installkernel ╔©║╪╔╡╔ц╔х╓Р ╩х╓ц╓ф╓╓╓К╓н╓к╓Б╢ь╓О╓И╓╨, make buildworld ╓Р╧т╓й╓ц╓ф╓╓╓й╓╓╓н╓г╓о╓й╓╓╓г╓╥╓Г╓╕╓╚? make buildkernel ╔©║╪╔╡╔ц╔х╓о, make buildworld ╔©║╪╔╡╔ц╔х╓к╓Х╓ц╓ф╨Н╓И╓Л╓К╔у╔║╔╓╔К╓к╟мб╦╓╥╓ф╓╓╓ч╓╧ ╓╫╓н╓©╓А, make buildkernel ╓╛ю╣╬О╓к╫╙н╩╓╧╓К╓©╓А╓к╓о make buildworld ╔©║╪╔╡╔ц╔х╓╛ю╣╬О╓к╢╟н╩╓╥╓ф╓╓╓Ки╛мв╓╛╓╒╓Й╓ч╓╧. ╧╫цш╓╥╓Х╓╕╓х╓╥╓ф╓╓╓К╓н╓╛ FreeBSD-STABLE ╓ю╓ц╓©╓х╓╥╓ф╓Б, ╓╒╓й╓©╓╛фЧ╪Й╓╥╓©╔╫║╪╔╧╔д╔Й║╪╓╛╡©╓И╓╚╓нмЩмЁ╓г ╫Я╓╜╢╧╓О╓ц╓©╓Й, ╡У╓Л╓ф╓╥╓ч╓ц╓ф╓╓╓К╓н╓╚╓Бцн╓Л╓ч╓╩╓С. FreeBSD-STABLE ╓о╓ш╓х╓С╓и╓н╬Л╧Г, ╓╜╓а╓С╓х╧╫цш╓г╓╜╓К╓Х╓╕╓к╓й╓ц╓ф╓╓╓ч╓╧╓╛, Ён╪б╓к╧╫цш╡дг╫╓г╓╒╓К╓Ё╓х╓╛йщ╬з╓╣╓Л╓ф╓╓╓К╓н╓о ╔Й╔Й║╪╔╧хг╓ю╓╠╓г╓╧. ╟Леы╔╫║╪╔╧╔д╔Й║╪╓Р╨ф╪Хфю╓╥╓ф, лДбЙ╓╛╡Р╥Х╓╥╓й╓╓╓╚╓и╓╕╓╚╩Н╓╥╓ф╓ъ╓ф╓╞╓ю╓╣╓╓. ╓ч╓©, ╓╒╓К╔╣║╪╔п╓╚╓И╪Хфю╓╥╓©╩Ч╓клДбЙ╓╛х╞ю╦╓╥╓©╓И, йл╓н╔╣║╪╔п╓Р╩Н╓╧╓н╓Б╦З╡л╓╛╓╒╓К╓╚╓Бцн╓Л╓ч╓╩╓С. ╔╥╔╧╔ф╔Ю╢имЩ лУ: ╓к╓╥╓╚ nishika@cheerful.com, 1997 г╞ 11 ╥Н 12 фЭ. ╔╥╔╧╔ф╔Ю╔╧╔©║╪╔х╔╒╔ц╔в╔у╔║╔╓╔К╓о╓и╓Ё╓к╓╒╓К╓н╓г╓╧╓╚? FreeBSD 2.0.5R ╓╚╓И 2.2.1R ╓ч╓г╓о, ╔в╔И╔╓╔ч╔Й╔Ё╔С╔у╔ё╔╟╔Л║╪╔╥╔Г╔С╔у╔║╔╓╔К╓о /etc/sysconfig ╓к╓╒╓Й╓ч╓╧. ╔╙╔в╔╥╔Г╔С╓о╓╧╓ы╓ф, ╓Ё╓н╔у╔║╔╓╔К╓х /etc/rc ╓╙╓Х╓с /etc/netstart╓х╓╓╓ц╓©, йл╓н╔у╔║╔╓╔К╓к╩ьдЙ╓╣╓Л╓ф╓╓╓ч╓╧. ╔у╔║╔╓╔К /etc/sysconfig ╓Р╦╚╓ф, ╔╥╔╧╔ф╔Ю╓ке╛╧Г╓╧╓К╓Х╓╕╓кйя╧╧╓╥╓ф╓╞╓ю╓╣╓╓. ╓Ё╓н╔у╔║╔╓╔К╓к╓о, ╓╫╓Л╓╬╓Л╓н╬Л╫Й╓к╡©╓Р╫Я╓╠╓п╓╓╓╓╓н╓╚╓Ри╫╓╧╔Ё╔А╔С╔х╓╛╓©╓╞╓╣╓С╫Я╓╚╓Л╓ф╓╓╓ч╓╧. FreeBSD 2.2.2 ╓╚╓И 3.0 ╓ч╓г╓н╔╥╔╧╔ф╔Ю╓г╓о, /etc/sysconfig ╓о, ╓Х╓Йй╛╓Й╓Д╓╧╓╓л╬а╟╓н rc.conf ╓к╡Чл╬╓╣╓Л, ╓╫╓Л╓к╫╬╓ц╓ф╫Я╪╟╓Б╓╓╓╞╓ж╓С╡Ч╓А╓И╓Л╓ф╓╓╓ч╓╧. /etc/netstart ╓Б /etc/rc.network ╓к╡Чл╬╓╣╓Л, а╢иТ╓н╔у╔║╔╓╔К╓Р cp /usr/src/etc/rc* /etc ╓г╟Леы╓к╔Ё╔т║╪╓╧╓К╓Ё╓х╓╛╫пмХ╓К╓Х╓╕╓к╓й╓Й╓ч╓╧. FreeBSD 3.1 ╓х╓╫╓Л╟й╧ъ╓г╓о, /etc/rc.conf ╓╛ /etc/defaults/rc.conf ╓к╟эф╟╓╥╓ч╓╥╓©. ╓Ё╓н╔у╔║╔╓╔К╓Рйт╫╦╓╥╓ф╓о╓╓╓╠╓ч╓╩╓С! бЕ╓О╓Й╓к, /etc/defaults/rc.conf ╓нцФ╓гйя╓╗╓©╓╓╔╗╔С╔х╔Й╓н╧т╓Р /etc/rc.conf ╓к╔Ё╔т║╪╓╥, ╓╫╓Ё╓гйя╧╧╓╧╓К╓Х╓╕╓к╓╥╓ф╓╞╓ю╓╣╓╓. ╓©╓х╓╗╓п named ╓Р╣╞ф╟╓╥╓©╓╓╓х╓╥╓ч╓╥╓Г╓╕. FreeBSD 3.1 ╓╚╓╫╓Л╟й╧ъ╓н╔╥╔╧╔ф╔Ю╓г FreeBSD иуб╟╓н DNS ╔╣║╪╔п╓Р╣╞ф╟╓╧╓К╓к╓о, ╪║╓н╓Х╓╕╓к╓╧╓К╓ю╓╠╓г╓╧. &prompt.root; echo named_enable="YES" >> /etc/rc.conf FreeBSD 3.1 ╓╚╓╫╓Л╟й╧ъ╓г╔М║╪╔╚╔К╔╣║╪╔с╔╧╓Р╣╞ф╟╓╧╓К╓©╓А╓к╓о, /usr/local/etc/rc.d ╔г╔ё╔Л╔╞╔х╔Й╓к╔╥╔╖╔К╔╧╔╞╔Й╔в╔х╓Рцж╓╜╓ч╓╧. ╔╥╔╖╔К╔╧╔╞╔Й╔в╔х╓о╣╞ф╟╡дг╫╓кюъдЙ╓╥, ╔у╔║╔╓╔Кл╬╓╛ .sh ╓г╫╙╓О╓ц╓ф╓╓╓й╓╠╓Л╓п╓й╓Й╓ч╓╩╓С. FreeBSD 3.0 ╓х╓╫╓Л╟йа╟╓н╔Й╔Й║╪╔╧╓г╓о, /etc/rc.local ╓Рйт╫╦╓╧╓Ки╛мв╓╛╓╒╓Й╓ч╓╧. ╔у╔║╔╓╔К /etc/rc.serial ╓о╔╥╔Й╔╒╔К╔щ║╪╔х╓н╫И╢Э╡╫(╓©╓х╓╗╓п╔щ║╪╔х╓нюъдЙ╓Р╦гдЙ╓╥╓©╓ЙеЫ║╧)╓н╓©╓А╓к╓╒╓Й╓ч╓╧. ╔у╔║╔╓╔К /etc/rc.i386 ╓о iBCS2 ╔╗╔ъ╔Е╔Л║╪╔╥╔Г╔С╓н╓Х╓╕╓й Intel ╔╒║╪╔╜╔ф╔╞╔а╔Ц╦гм╜╓нюъдЙ╓Д, PC ╔╥╔╧╔ф╔Ю╔Ё╔С╔╫║╪╔КюъдЙ╓н╓©╓А╓к╓╒╓Й╓ч╓╧. ╢йц╠╓к╔Ф║╪╔╤╓Рди╡ц╓╧╓К╓к╓о╓и╓╕╓╧╓Л╓п╓╓╓╓╓н╓г╓╧╓╚? adduser ╔Ё╔ч╔С╔и╓Р╩хмя╓╥╓ф╓╞╓ю╓╣╓╓. ╓ч╓©, pw ╔Ё╔ч╔С╔и╓Рмя╓╓╓К╓Ё╓х╓г, ╓╣╓И╓к╨ы╓╚╓╓аЮ╨Н╓╛╡дг╫╓г╓╧. ╔Ф║╪╔╤╓Р╨О╫Э╓╧╓К╓к╓о rmuser ╔Ё╔ч╔С╔и╓Р╩хмя╓╥╓ф╓╞╓ю╓╣╓╓. ╥╚╓Ййж╓╥╓к╓й╓Й╓ч╓╧╓╛, pw ╓г╓Б╧╫╓╓╓ч╓╩╓С. FreeBSD ╔╥╔╧╔ф╔Ю╓к©╥╓╥╓╓╔о║╪╔и╔г╔ё╔╧╔╞╓Рди╡ц╓╧╓К╓к╓о? www.FreeBSD.org ╓к╫Я╓╚╓Л╓ф╓╓╓К╔г╔ё╔╧╔╞╔у╔╘║╪╔ч╔ц╔х╔а╔Е║╪╔х╔Й╔╒╔К╓Р╩╡╬х╓╥╓ф╓╞╓ю╓╣╓╓. ©╥╓╥╓╓╔Й╔Ю║╪╔п╔ж╔К╔и╔И╔╓╔ж╓Р╩Щ╓ц╓ф╓╓╓ч╓╧╓╛, ╓и╓╕╓Д╓ц╓ф╩х╓╕╓н? ╓╫╓н╔Й╔Ю║╪╔п╔ж╔К╔и╔И╔╓╔ж╓╛ ZIP ╓г╓╒╓Л EZ drive ╓г╓╒╓Л (╓╒╓К╓╓╓о╓Б╓╥╓╫╓╕╓╓╓╕иВ╓к╩х╓╓╓©╓╓╓н╓й╓И, ╔у╔М╔ц╔т║╪╓г╓╒╓Л), ╓ч╓©╔о║╪╔и╔г╔ё╔╧╔╞╓г╓╒╓Л, ╟Лц╤╔╥╔╧╔ф╔Ю╓к╔╓╔С╔╧╔х║╪╔К╓╣╓Л╓фг╖╪╠╓╣╓Л, ╔╚║╪╔х╔Й╔ц╔╦, ╔у╔М╔ц╔т║╪еЫ║╧╓╛ачфЧ╓╣╓Л╓ф╓╓╓Л╓п, ╓Ё╓х╓о╓и╓н╔г╔п╔╓╔╧╓г╓Ба╢╓╞ф╠╓╦╓Х╓╕╓к©й╓ъ╓ч╓╧. (╓Ё╓н╔╩╔╞╔╥╔Г╔С╓оMark Mayo's ZIP FAQ ╓к╢П╓е╓╓╓ф╓╓╓ч╓╧.) ZIP ╔и╔И╔╓╔ж╓Д╔у╔М╔ц╔т║╪╓г, ╓╧╓г╓к DOS ╓н╔у╔║╔╓╔К╔╥╔╧╔ф╔Ю╓г ╔у╔╘║╪╔ч╔ц╔х╓╥╓ф╓╒╓К╬Л╧Г, ╪║╓н╔Ё╔ч╔С╔и╓Р╩х╓╕╓Ё╓х╓╛╓г╓╜╓ч╓╧. ╓Ё╓Л╓о╔у╔М╔ц╔т║╪╓н╬Л╧Г╓г╓╧. &prompt.root; mount -t msdos /dev/fd0c /floppy ╫п╡ы╩Ч╓нюъдЙ╓н ZIP ╔г╔ё╔╧╔╞╓г╓о╓Ё╓╕╓г╓╧. &prompt.root; mount -t msdos /dev/da2s4 /zip ╓╫╓нб╬╓н╔г╔ё╔╧╔╞╓к╢ь╓╥╓ф╓о, fdisk ╓Д /stand/sysinstall ╓Р╩х╓ц╓ф, ╓и╓н╓Х╓╕╓к╔Л╔╓╔╒╔╕╔х╓╣╓Л╓ф╓╓╓К╓╚Ён╓╚╓А╓ф╓╞╓ю╓╣╓╓. ╟й╧ъ╓о ZIP ╔и╔И╔╓╔ж╓╛ 3 хжлэ╓н SCSI ╔г╔ё╔╧╔╞╓г, da2 ╓хг╖╪╠╓╣╓Л╓ф╓╓╓К╬Л╧Г╓ннЦ╓г╓╧. б╬©м╓х╤╕м╜╓╥╓й╓╠╓Л╓п╓й╓И╓й╓╓╔у╔М╔ц╔т║╪╓Д╔Й╔Ю║╪╔п╔ж╔К╔г╔ё╔╧╔╞ ╓г╓й╓╠╓Л╓п, BSD ╔у╔║╔╓╔К╔╥╔╧╔ф╔Ю╓Р╨э╓╩╓ф╓╥╓ч╓╕╓н╓╛ни╓╓╧м╓╗╓г╓╥╓Г╓╕. ╔М╔С╔╟╔у╔║╔╓╔Кл╬╓Б╔╣╔щ║╪╔х╓╣╓Л, ╔я╔у╔╘║╪╔ч╔С╔╧╓о╬╞╓й╓╞╓х╓Б 2 гэ╓о╦Ч╬Е╓╥╓ч╓╧╓╥, ╓╙╓ч╓╠╓к╓╨╓ц╓х╟бдЙ╓╥╓ф╓╓╓ч╓╧. ╓ч╓╨╨г╫И╓к, DOS ╔Л╔ы╔К╓г╓н╔я║╪╔ф╔ё╔╥╔Г╔С / ╔у╔║╔╓╔К╔╥╔╧╔ф╔Ю╓Рл╣╦З╓к╓╥╓ф╓╙╓╞и╛мв╓╛╓╒╓Й╓ч╓╧. ╩хмя╓╧╓К╓н╓о fdisk ╓г╓Б /stand/sysinstall ╓г╓Б╥К╧╫╓г╓╧. йё©Т╓н╔╙╔з╔Л║╪╔ф╔ё╔С╔╟╔╥╔╧╔ф╔Ю╓РфЧ╓Л╓К╓Ё╓х╓Р╧мн╦╓╧╓К и╛мв╓╛╓й╓╓╓Х╓╕╓ймфнл╓н╬╝╓╣╓й╔и╔И╔╓╔ж╓н╬Л╧Г╓о, ╪║╓н╓Х╓╕╓к FAT ╔я║╪╔ф╔ё╔╥╔Г╔С╔ф║╪╔ж╔К (╔╧╔И╔╓╔╧) а╢бн╓РхТ╓п╓╥╓ф, BSD ╓н╔я║╪╔ф╔ё╔╥╔Г╔СюъдЙ╓Р╧т╓╕╓ю╓╠╓гни╓╓╓г╓╥╓Г╓╕. &prompt.root; dd if=/dev/zero of=/dev/rda2 count=2 &prompt.root; disklabel -Brw da2 auto йё©Т╓н BSD ╔я║╪╔ф╔ё╔╥╔Г╔С╓Р╓д╓╞╓К╬Л╧Г, disklabel ╓╚ /stand/sysinstall ╓Р╩х╓╓╓ч╓╧. ╦гдЙ╔г╔ё╔╧╔╞╬Е╓к╔╧╔О╔ц╔внн╟Х╓Р╡ц╓╗╓К╬Л╧Г, ╓╫╓╕╓╓╓╕╓Ё╓х╓Р╓╥╓©╓╓╓х╩в╓╕╓н╓о╓Б╓ц╓х╓Б╓г╓╧╓╛, ZIP ╓н╓Х╓╕╓й╔Й╔Ю║╪╔п╔ж╔К╔и╔И╔╓╔ж╓н╬Е╓г╓о╓╫╓╕╓╓╓╕╧м╓╗╓оите╛юз ╓г╓╥╓Г╓╕. ╨г╦Е╓к, ©╥╓╥╓╓╔у╔║╔╓╔К╔╥╔╧╔ф╔Ю╓Р╓д╓╞╓Й╓ч╓╧. ╔г╔ё╔╧╔╞а╢бн╓Р╩хмя╓╧╓К ZIP ╔и╔И╔╓╔ж╓н╬Л╧Г╓о, ╟й╡╪╓н╓Х╓╕╓к╓╥╓ч╓╧. &prompt.root; newfs /dev/rda2c ╪║╓к╔ч╔╕╔С╔х╓╥╓ч╓╧. &prompt.root; mount /dev/da2c /zip ╓ч╓©, ╪║╓н╓Х╓╕╓й╧т╓Р /etc/fstab ╓кфЧ╓Л╓ф╓╙╓╞╓н╓Бни╓╓╧м╓╗╓г╓╥╓Г╓╕. mount /zip ╓хфЧно╓╧╓К╓ю╓╠╓г╔ч╔╕╔С╔х╓г╓╜╓К╓Х╓╕╓к╓й╓Й╓ч╓╧. /dev/da2c /zip ffs rw,noauto 0 0 ╪╚й╛╓н crontab ╔у╔║╔╓╔К╓Рйт╫╦╓╥╓©╦Е root: not found ╓н╓Х╓╕╓й╔А╔ц╔╩║╪╔╦╓╛╠Д║╧╓хи╫╪╗╓╣╓Л╓К╓н╓г╓╧╓╛, ╓Ё╓Л╓о╓й╓╪╓г╓╧╓╚? ╓Ё╓Л╓одл╬О, ╔╥╔╧╔ф╔Ю crontab (/etc/crontab) ╓Рйт╫╦╓╥, &man.crontab.1; ╓Р╩х╓ц╓ф╔╓╔С╔╧╔х║╪╔К╓╥╓©╬Л╧Г╓к╣╞╓Ё╓Й╓ч╓╧. &prompt.root; crontab /etc/crontab ╓Ё╓нйЩк║╓ою╣╓╥╓╞╓╒╓Й╓ч╓╩╓С. ╔╥╔╧╔ф╔Ю crontab ╓н╔у╔╘║╪╔ч╔ц╔х╓о &man.crontab.1; ╓╛╧╧©╥╓╧╓КЁф╔Ф║╪╔╤╓н crontab ╓х╓о╟ш╓й╓Й╓ч╓╧ (╔у╔╘║╪╔ч╔ц╔х╓наЙ╟Цею╓н╬э╨ы╓о &man.crontab.5; ╓гюБлю╓╣╓Л╓ф╓╓╓ч╓╧). ╓Б╓╥╓Ё╓н╓Х╓╕╓йаЮ╨Н╓Р╓╥╓ф╓╥╓ч╓ц╓©╓й╓И, ╓╒╓И╓©╓й crontab ╓о╦М╓ц╓©╔у╔╘║╪╔ч╔ц╔х╓н /etc/crontab ╓н╔Ё╔т║╪╓к╓й╓ц╓ф╓╥╓ч╓ц╓ф╓╓╓К╓╚╓И╓г╓╧. ╟й╡╪╓н╔Ё╔ч╔С╔и╓г╨О╫Э╓╥╓ф╓╞╓ю╓╣╓╓. &prompt.root; crontab -r ╨ёеы /etc/crontab ╓Рйт╫╦╓╧╓К╩Ч╓о, ╓╫╓нйя╧╧╓Р &man.cron.8; ╓кеа╓╗╓К╓Х╓╕╓йаЮ╨Н╓Р╓╥╓ф╓о╓╓╓╠╓ч╓╩╓С. &man.cron.8; ╓о, ╪╚ф╟е╙╓к╓╫╓нйя╧╧╓Рг╖╪╠╓╧╓К╓╚╓И╓г╓╧. ╓Б╓╥╓╒╓й╓©╓╛╡©╓╚╓Р╟ЛфЭ╟Л╡С, ╓╒╓К╓╓╓о╟Л╫╣╢ж╓Д╟Л╔Ж╥Н╓к╟Л╡С╓ю╓╠ ╪б╧т╓╣╓╩╓©╓╓╓й╓И, ╔╥╔╖╔К╔╧╔╞╔Й╔в╔х╓Р /usr/local/etc/periodic ╓кди╡ц╓╥, &man.periodic.8; ╔Ё╔ч╔С╔и╓к╔╥╔╧╔ф╔Ю╓н cron ╔╧╔╠╔╦╔Е║╪╔К╓╚╓И б╬╓ндЙ╢Эе╙╓й╔╥╔╧╔ф╔Ю╓н╔©╔╧╔╞╓х╓х╓Б╓к ╪б╧т╓╣╓╩╓©╓ш╓╕╓╛ни╓╓╓╚╓Б╓╥╓Л╓ч╓╩╓С. ╓Ё╓н╔╗╔И║╪╓н╪б╨щ╓н╦╤╟Ь╓о, ╔╥╔╧╔ф╔Ю crontab ╓к╓о ╓и╓н╔Ф║╪╔╤╦╒╦б╓г╔Ё╔ч╔С╔и╓Р╪б╧т╓╧╓К╓╚╓Р╩ьдЙ╓╧╓Км╬й╛╓й╔у╔ё║╪╔К╔и╓╛╓╒╓К╓Ё╓х╓к╓Х╓К╓Б╓н╓г╓╧. FreeBSD ╓ке╨иу╓╣╓Л╓ф╓╓╓Ки╦╫Ю╓н╔╥╔╧╔ф╔Ю crontab ╓к╓о, ╓╧╓ы╓ф╓н╔╗╔С╔х╔Й╓к root ╓╛╫Я╓╚╓Л╓ф╓╓╓ч╓╧. ╓Ё╓н crontab ╓╛ root ╔Ф║╪╔╤╓н crontab (╔╥╔╧╔ф╔Ю crontab ╓х╓о ╟ш╓й╓Й╓ч╓╧) ╓х╓╥╓ф╩х╓О╓Л╓©╬Л╧Г, &man.cron.8; ╓о root ╓Р╪б╧т╓╧╓К╔Ё╔ч╔С╔и╓н╨г╫И╓нц╠╦Л╓ю╓хг╖╪╠╓╥╓ч╓╧╓╛, ╓╫╓н╓Х╓╕╓й╔Ё╔ч╔С╔и╓об╦╨ъ╓╥╓й╓╓╓н╓г╓╧. rc.conf ╓Д╓╫╓нб╬╓н ╔╧╔©║╪╔х╔╒╔ц╔в╔у╔║╔╓╔К╓Р╫Я╓╜╢ж╟Ц╓╗╓ф╓╥╓ч╓╓╓ч╓╥╓©. ╓╥╓╚╓Б╓╫╓н╓©╓А╔у╔║╔╓╔К╔╥╔╧╔ф╔Ю╓╛╔Й║╪╔и╔╙╔С╔Й║╪╓к╓й╓ц╓ф╓╥╓ч╓ц╓ф╓╓╓ф йт╫╦╓╛╓г╓╜╓ч╓╩╓С. ╓и╓╕╓╧╓Л╓п╓╓╓╓╓г╓╧╓╚? ╔╥╔╖╔К╓н╔я╔╧л╬╓РфЧно╓╧╓К╔в╔М╔С╔в╔х╓╛и╫╪╗╓╣╓Л╓©╓х╓╜╓к, ц╠╓к ENTER ╓Р╡║╓╥, mount / ╓Р ╪б╧т╓╥╓ф╓╫╔К║╪╔х╔у╔║╔╓╔К╔╥╔╧╔ф╔Ю╓Р╨ф╔ч╔╕╔С╔х╓╣╓╩╓К╓ч╓╧. ╓ч╓©, ╓╙╣╓╓кфЧ╓Й╓н╔╗╔г╔ё╔©╓╛╓╒╓К╔у╔║╔╓╔К╔╥╔╧╔ф╔Ю╓Р ╔ч╔╕╔С╔х╓╧╓К╓©╓А╓к mount -a -t ufs ╓Р ╓╧╓Ки╛мв╓╛╓╒╓К╓╚╓Бцн╓Л╓ч╓╩╓С. ╓╒╓й╓©╓н╓╙╣╓╓кфЧ╓Й╓н╔╗╔г╔ё╔©╓╛ ╔м╔ц╔х╔О║╪╔╞╔у╔║╔╓╔К╔╥╔╧╔ф╔Ю╬Е╓к╓╒╓К╬Л╧Г╓о, ╔м╔ц╔х╔О║╪╔╞╔у╔║╔╓╔К╔╥╔╧╔ф╔Ю╓Р╔ч╔╕╔С╔х╓╧╓Ка╟╓к╔м╔ц╔х╔О║╪╔╞╓Р ╪Йф╟╓гюъдЙ╓╧╓К╓╚, &man.ed.1; ╓н╓Х╓╕╓й╔М║╪╔╚╔К╔у╔║╔╓╔К╔╥╔╧╔ф╔Ю╓к╓╒╓К ╔╗╔г╔ё╔©╓Р╩х╓╕╓╚╓╥╓й╓╠╓Л╓п╓й╓Й╓ч╓╩╓С. &man.vi.1; ╓Д &man.emacs.1; ╓нмм╓й╔у╔К╔╧╔╞╔Й║╪╔С╔╗╔г╔ё╔©╓Р ╩х╓╕╓д╓Б╓Й╓й╓И export TERM=cons25 ╓х ╓Д╓ц╓ф╔╗╔г╔ё╔©╓╛ &man.termcap.5; ╔г║╪╔©╔ы║╪╔╧╓╚╓Ию╣╓╥╓╓ ╔г║╪╔©╓Рфи╓ъ╪Х╓Л╓К╓Х╓╕╓к╓╥╓й╓╠╓Л╓п╓й╓Й╓ч╓╩╓С. ╓Ё╓Л╓Р╧т╓ц╓©╓╒╓х╓о╓╓╓д╓Б╓хф╠мм, /etc/rc.conf ╓Рйт╫╦╓╥╓ф╢ж╟Ц╓╓╓РдШю╣╓╧╓К╓Ё╓х╓╛╓г╓╜╓К╓Х╓╕╓к╓й╓Й╓ч╓╧. ╔╚║╪╔м╔К╣╞ф╟╔А╔ц╔╩║╪╔╦╓нд╬╦Е╓ки╫╪╗╓╣╓Л╓©╔╗╔И║╪╔А╔ц╔╩║╪╔╦╓к╓о, лДбЙ╓н╣╞╓Ё╓ц╓©╔у╔║╔╓╔КфБ╓г╓н╧тхж╧Ф╓Ри╫╪╗╓╣╓Л╓ф╓╓╓К╓о╓╨╓г╓╧. ╓и╓н╓Х╓╕╓к╓╥╓©╓И DOS ╓нЁхд╔╔я║╪╔ф╔ё╔╥╔Г╔С╓Р╔ч╔╕╔С╔х╓г╓╜╓ч╓╧╓╚? DOS Ёхд╔╔я║╪╔ф╔ё╔╥╔Г╔С╓о, ╓╧╓ы╓ф╓н╢Пкэ╔я║╪╔ф╔ё╔╥╔Г╔С╓н╦Е╓кг╖╪╠╓╣╓Л╓ч╓╧. ╓©╓х╓╗╓п, 2бФлэ╓н SCSI╔и╔И╔╓╔ж╓нЁхд╔╔я║╪╔ф╔ё╔╥╔Г╔С╓к E ╔я║╪╔ф╔ё╔╥╔Г╔С╓╛╓╒╓К╓х╓╥╓ч╓╧╓х, ╓Ё╓Л╓о /dev ╓к║ж╔╧╔И╔╓╔╧ 5 ║в╓н╔╧╔з╔╥╔Ц╔К╔у╔║╔╓╔К╓Р╨Н╓Ки╛мв╓╛╓╒╓Й, /dev/da1s5 ╓х╓╥╓ф╔ч╔╕╔С╔х╓╣╓Л╓ч╓╧. &prompt.root; cd /dev &prompt.root; ./MAKEDEV da1s5 &prompt.root; mount -t msdos /dev/da1s5 /dos/e б╬╓н╔╥╔╧╔ф╔Ю╓н╔у╔║╔╓╔К╔╥╔╧╔ф╔Ю╓Р FreeBSD ╓г╔ч╔╕╔С╔х╓╧╓К╓Ё╓х╓о╓г╓╜╓ч╓╧╓╚? Digital UNIX: UFS CDROM ╓од╬юэ FreeBSD ╓г╔ч╔╕╔С╔х╓╧╓К╓Ё╓х╓╛╓г╓╜╓ч╓╧. Digital UNIX ╓Д╓╫╓Л╟йЁ╟╓н╔╥╔╧╔ф╔Ю╓н╔╣╔щ║╪╔х╓╧╓К UFS ╓н╔г╔ё╔╧╔╞╔я║╪╔ф╔ё╔╥╔Г╔С╓Р╔ч╔╕╔С╔х╓╧╓К╓Ё╓х╓о╓Б╓ц╓хйё╩╗╓й╓Ё╓х╓г, ╔╙╔з╔Л║╪╔ф╔ё╔С╔╟╔╥╔╧╔ф╔Ю╓н╔г╔ё╔╧╔╞╔я║╪╔ф╔ё╔╥╔Г╔С╓н╬э╨ы╓к╟мб╦╓╥╓ч╓╧. Linux: 2.2 ╟й╧ъ╓о ext2fs ╔я║╪╔ф╔ё╔╥╔Г╔С╓Р╔╣╔щ║╪╔х╓╥╓ч╓╧. ╔ч╔к╔Е╔╒╔К╓н mount_ext2fs ╓Р╦╚╓ф╓╞╓ю╓╣╓╓. ╓Х╓Йб©╓╞╓н╬ПйС╓╛╓╒╓Й╓ч╓╧. NT: FreeBSD мя╓нфи╓ъ╓ю╓╥╓н╓ъ╡дг╫╓й NTFS ╔и╔И╔╓╔п╓╛╓╒╓Й╓ч╓╧. ╬э╓╥╓╞╓о, Mark Ovens ╩А╓к╓Х╓ц╓ф╫Я╓╚╓Л╓©╔а╔Е║╪╔х╔Й╔╒╔К http://ukug.uk.freebsd.org/~mark/ntfs_install.html ╓Р╓╢мВ╓╞╓ю╓╣╓╓. ╓Ё╓нлДбЙ╓к╓д╓╓╓фб╬╓н╬ПйС╓╛╓╒╓Л╓п, б╬╓н©м╓╚╓И╢╤╪у╓╣╓Л╓К╓г╓╥╓Г╓╕. ╓и╓н╓Х╓╕╓к╓╥╓©╓И FreeBSD ╓Р NT ╔М║╪╔ю║╪╓╚╓И╣╞ф╟╓╣╓╩╓К╓Ё╓х╓╛╓г╓╜╓ч╓╧╓╚? ╓Ё╓н╪Й╫Г╓о 2.2.x ╓х(╣╞ф╟╓╛ 3 ╓д╓н╔╧╔ф║╪╔╦╓кй╛╓╚╓Л╓ф╓╓╓К)3.x ╓н╔╥╔╧╔ф╔Ю╓х╓гб©╬╞╟ш╓й╓Й╓ч╓╧. FreeBSD ╓н╔м╔╓╔ф╔ё╔ж╔К║╪╔х╔я║╪╔ф╔ё╔╥╔Г╔С╓н╨г╫И╓н╔╩╔╞╔©╓Р╔у╔║╔╓╔К╓к╓╥╓ф DOS/NT ╔я║╪╔ф╔ё╔╥╔Г╔С╬Е╓кцж╓╞╓х╓╓╓╕╡Х╢Эе╙╓й╔╒╔╓╔г╔ё╔╒╓╛╓╒╓Й╓ч╓╧. ╔у╔║╔╓╔Кл╬╓Р c:\bootsect.bsd(c:\bootsect.dos ╓╚╓И╓нх╞аш╓г╓╧)╓х╓╥╓©╓х╓╥╓ч╓╧. c:\boot.ini╔у╔║╔╓╔К╓Р╪║╓н╓Х╓╕╓кйт╫╦╓╥╓ч╓╧. [boot loader] timeout=30 default=multi(0)disk(0)rdisk(0)partition(1)\WINDOWS [operating systems] multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="Windows NT" C:\BOOTSECT.BSD="FreeBSD" C:\="DOS" ╓Ё╓н╪Й╫Г╓о, мЬмя╓╥╓ф╓╓╓К╔╥╔╧╔ф╔Ю╓╛ 2.2.x ╓г╓╒╓Й, DOS, NT, FreeBSD ╓╒╓К╓╓╓о╓╫╓нб╬╓н╔╙╔з╔Л║╪╔ф╔ё╔С╔╟╔╥╔╧╔ф╔Ю╓╛╓╧╓ы╓ф, ф╠╓╦╔г╔ё╔╧╔╞╓н╓╫╓Л╓╬╓Л╓н fdisk ╔я║╪╔ф╔ё╔╥╔Г╔С╓к╔╓╔С╔╧╔х║╪╔К╓╣╓Л╓ф╓╓╓К╓Ё╓х╓РашдЙ╓╥╓ф╓╓╓ч╓╧. ╩Д╓н╬Л╧Г╓о, DOS ╓х NT ╓о╨г╫И╓н╔я║╪╔ф╔ё╔╥╔Г╔С, FreeBSD╓о 2хжлэ╓к╓╒╓Й╓ч╓╧. ╓ч╓©, FreeBSD ╓о MBR ╓Р╩х╓О╓╨╓к, ╔м╔╓╔ф╔ё╔ж╔я║╪╔ф╔ё╔╥╔Г╔С╓╚╓И╣╞ф╟╓╧╓К╓Х╓╕╓к╔╓╔С╔╧╔х║╪╔К╓╥╓ф╓╒╓Й╓ч╓╧. (лУцМ: FreeBSD ╓н╔╓╔С╔╧╔х║╪╔К╓г╓о╔ж║╪╔х╔ч╔м╔╦╔Ц╓Р╩х╓О╓╨╓ки╦╫Ю MBR ╓Р╩х╓╕╬Л╧Г╓каЙеЖ╓╥╓ч╓╧) (╓Б╓╥ NTFS ╓кйя╢╧╓╥╓ф╓╥╓ч╓ц╓ф╓╓╓К╓й╓И)DOS ╔у╔╘║╪╔ч╔ц╔х╓н╔у╔М╔ц╔т║╪╔г╔ё╔╧╔╞╓╚ FAT ╔я║╪╔ф╔ё╔╥╔Г╔С╓Р /mnt ╓к DOS ╔ч╔╕╔С╔х╓╥╓ч╓╧. &prompt.root; dd if=/dev/rda0a of=/mnt/bootsect.bsd bs=512 count=1 ╨ф╣╞ф╟╓╥╓ф╓╥╓ф DOS ╓╚ NT ╓кюзбь╓╗╓ч╓╧. NTFS ╔Ф║╪╔╤╓о bootsect.bsd ╓Д bootsect.lnx ╓Р╔у╔М╔ц╔т║╪╔г╔ё╔╧╔╞╓╚╓И C:\ ╓ь╔Ё╔т║╪╓╥╓ч╓╧. boot.ini ╓н╔у╔║╔╓╔Кб╟ю╜(╔я║╪╔ъ╔ц╔╥╔Г╔С)╓нйя╧╧╓Р╟й╡╪╓н╓Х╓╕╓к╧т╓й╓╓╓ч╓╧. > attrib -s -r c:\boot.ini ╬Е╓ннЦ╓н boot.ini ╓г╪╗╓╥╓©╓Х╓╕╓йю╣╓╥╓╓╔╗╔С╔х╔Й╓Р╡ц╓╗, ╔у╔║╔╓╔Кб╟ю╜╓Р╦╣╓клА╓╥╓ч╓╧. > attrib +s +r c:\boot.ini FreeBSD ╓╛ MBR ╓╚╓И╣╞ф╟╓╧╓К╓Х╓╕╓к╓й╓ц╓ф╓╓╓К╬Л╧Г, ╓╫╓Л╓╬╓Л╓н╔м╔╓╔ф╔ё╔ж╔я║╪╔ф╔ё╔╥╔Г╔С╓╚╓И╣╞ф╟╓╧╓К╓Х╓╕╓кюъдЙ╓╥╓©╦Е╓г, DOS ╓╚╓И fdisk ╔Ё╔ч╔С╔и╓Р╪б╧т╓╥╓ф╦╣╓клА╓╥╓ф╓╞╓ю╓╣╓╓. FreeBSD 3.X ╓к╓╙╓╠╓К╪Й╫Г╓о, ╓Ё╓Л╓Х╓Й╓╓╓╞╓ж╓С╢йц╠╓г╓╧. FreeBSD ╓╛ NT ╣╞ф╟╔я║╪╔ф╔ё╔╥╔Г╔С╓х╓╥╓фф╠╓╦╔г╔ё╔╧╔╞╓к╔╓╔С╔╧╔х║╪╔К╓╣╓Л╓ф╓╓╓К╬Л╧Г╓к╓о, /boot/boot1 ╓Рц╠╫Ц╓к C:\BOOTSECT.BSD ╓ь╔Ё╔т║╪╓╥╓ч╓╧. ╓Б╓╥ FreeBSD ╓╛╟ш╓й╓ц╓©╔г╔ё╔╧╔╞╓к╔╓╔С╔╧╔х║╪╔К╓╣╓Л╓ф╓╓╓К╬Л╧Г╓к╓о, /boot/boot1 ╓г╓оф╟╨Н╓╥╓ч╓╩╓С╓н╓г, /boot/boot0 ╓╛и╛мв╓г╓╧. ╓Ё╓Ё╓г /boot/boot1 ╓нбЕ╓О╓Й╓к /boot/boot0 ╓Р╔Ё╔т║╪╓╧╓К╓Х╓╕╓й╓Ё╓х╓Р╓╥╓ф╓о╓╓╓╠╓ч╓╩╓С! ╓╫╓╕╓╧╓К╓х, ╔я║╪╔ф╔ё╔╥╔Г╔С╔ф║╪╔ж╔К╓Р╬Е╫Я╓╜╓╥╓ф╓╥╓ч╓╓, ╔Ё╔С╔т╔Е║╪╔©╓╛╣╞ф╟╓г╓╜╓й╓╞╓й╓ц╓ф╓╥╓ч╓╓╓ч╓╧. /boot/boot0 ╓Р╔╓╔С╔╧╔х║╪╔К╓╧╓К╓к╓о, sysinstall ╓н╔ж║╪╔х╔ч╔м║╪╔╦╔Ц╓РмЬмя╓╧╓К╓╚╓и╓╕╓╚©р╓м╓И╓Л╓К╡Хлл╓г FreeBSD ╔ж║╪╔х╔ч╔м║╪╔╦╔Ц╓Ра╙бР╓╧╓Ки╛мв╓╛╓╒╓Й╓ч╓╧. /boot/boot0 ╓н╔я║╪╔ф╔ё╔╥╔Г╔С╔ф║╪╔ж╔КиТй╛╓о NULL й╦╩З╓гкД╓А╓И╓Л╓ф╓╓╓К╓н╓г╓╧╓╛, sysinstall ╓о /boot/boot0 ╓Р MBR ╓к╔Ё╔т║╪╓╧╓Ка╟╓к╔я║╪╔ф╔ё╔╥╔Г╔С╔ф║╪╔ж╔К╓Р╓╜╓а╓С╓х╔Ё╔т║╪╓╥╓ф╓╞╓Л╓К╓╚╓И╓г╓╧. FreeBSD ╔ж║╪╔х╔ч╔м║╪╔╦╔Ц╓о╨г╦Е╓к╣╞ф╟╓╥╓© OS ╓Р╣╜о©╓╧╓К╓©╓А╓к ╔я║╪╔ф╔ё╔╥╔Г╔С╔ф║╪╔ж╔К╓н╨г╦Е╓к╣╞ф╟╓╥╓© OS ╓н╔╗╔С╔х╔Й╓к╓╒╓К╔╒╔╞╔ф╔ё╔ж╔у╔И╔╟╓Р╔╩╔ц╔х╓╥, 512 ╔п╔╓╔ха╢бн╓Р MBR ╓к╫Я╓╜лА╓╥╓ч╓╧. ╓Ё╓Л╓о /boot/boot0 ╓Р C:\BOOTSECT.BSD ╓к╔Ё╔т║╪╓╥, ╔╗╔С╔х╔Й╓н╟Л╓д╓к╔╒╔╞╔ф╔ё╔ж╔у╔И╔╟╓Р╔╩╔ц╔х╓╥╓ф╤У╓н╔я║╪╔ф╔ё╔╥╔Г╔С╔ф║╪╔ж╔К╓Р MBR ╓к╫Я╓╜╧Ч╓Ю╓Ё╓х╓хф╠╓╦╓г╓╧. FreeBSD ╓х Linux ╓Р LILO ╓╚╓И╣╞ф╟╓╧╓К╓к╓о? FreeBSD ╓х Linux ╓╛ф╠╓╦╔г╔ё╔╧╔╞╓к╔╓╔С╔╧╔х║╪╔К╓╣╓Л╓ф╓╓╓К╬Л╧Г, ц╠╓к Linux ╟йЁ╟╓н OS ╓Р╣╞ф╟╓╧╓К╓©╓А╓н LILO ╓н╔╓╔С╔╧╔х║╪╔К╪Й╫Г╓к ╫╬╓╗╓п╓╓╓╓╓ю╓╠╓г╓╧. хС╬О╓к╢йц╠╓к╓г╓о╓╒╓Й╓ч╓╧╓╛, ╣╜╓╥╓ф╓ъ╓ч╓╥╓Г╓╕. Linux ╓Р╣╞ф╟╓╥, /etc/lilo.conf ╓к╟й╡╪╓н╧т╓Р╡ц╓╗╓ф ╓╞╓ю╓╣╓╓. other=/dev/hda2 table=/dev/hda label=FreeBSD (╬Е╣╜╓н╪Й╫Г╓о FreeBSD ╓н╔╧╔И╔╓╔╧╓╛ Linux ╓╚╓И /dev/hda2 ╓х╓╓╓╕л╬а╟╓г╦╚╓╗╓ф╓╓╓К╓х╡╬дЙ╓╥╓ф╓╓╓ч╓╧. ╓╒╓й╓©╓нюъдЙ╓к╓╒╓О╓╩╓ф╓╞╓ю╓╣╓╓) ╓╫╓н╦Е, lilo ╓Р root ╓г╪б╧т╓╧╓Л╓п╢╟н╩╓г╓╧. FreeBSD ╓╛йл╓н╔г╔ё╔╧╔╞╓к╔╓╔С╔╧╔х║╪╔К╓╣╓Л╓ф╓╓╓К╓н╓й╓И, LILO ╓н╔╗╔С╔х╔Й╓к loader=/boot/chain.b ╓Рди╡ц╓╥╓ф╓╞╓ю╓╣╓╓. нЦ╓╗╓п, ╓Ё╓н╓Х╓╕╓к╓й╓Й╓ч╓╧. other=/dev/dab4 table=/dev/dab loader=/boot/chain.b label=FreeBSD ╬Л╧Г╓к╓Х╓ц╓ф╓о, фС╓длэ╓н╔г╔ё╔╧╔╞╓Рю╣╓╥╓╞╣╞ф╟╓╧╓К╓©╓А╓к FreeBSD ╔ж║╪╔х╔М║╪╔ю╓к BIOS ╔и╔И╔╓╔жхж╧Ф╓Р╩ьдЙ╓╧╓Ки╛мв╓╛╓╒╓К╓╚╓Б╓╥╓Л╓ч╓╩╓С. нЦ╓╗╓п, FreeBSD SCSI ╔г╔ё╔╧╔╞╓╛ BIOS ╓к╓Х╓ц╓ф BIOS ╔г╔ё╔╧╔╞ 1 ╓х╓╥╓фг╖╪╠╓╣╓Л╓К╓н╓й╓И, FreeBSD ╓н╔ж║╪╔х╔М║╪╔ю╓н╔в╔М╔С╔в╔х╓г, ╪║╓н╓Х╓╕╓к╩ьдЙ╓╧╓Ки╛мв╓╛╓╒╓Й╓ч╓╧. Boot: 1:da(0,a)/kernel FreeBSD 2.2.5 ╓Д╓╫╓Л╟й╧ъ╓нхг╓г╓о, ╣╞ф╟╩Ч╓к╬Е╣╜╓н╓Ё╓х╓Р╧т╓й╓╕ ╓ю╓╠╓г╪╚ф╟е╙╓к boot(8) ╓╛юъдЙ╓╣╓Л╓ч╓╧. Linux+FreeBSD mini-HOWTO ╓╛ FreeBSD ╓х Linux ╓х╓РаЙ╦ъ╓к╩х╓╗╓К╓Х╓╕╓к╓╧╓К╓©╓А╓н╓Х╓╓╩╡╧м╩Яна╓к╓й╓К╓г╓╥╓Г╓╕. FreeBSD ╓х Linux ╓Р BootEasy ╓╚╓И╣╞ф╟╓╧╓К╓к╓о? LILO ╓Р╔ч╔╧╔©║╪╔ж║╪╔х╔Л╔Ё║╪╔и(MBR)╓г╓о╓й╓╞ Linux ╓н╣╞ф╟╔я║╪╔ф╔ё╔╥╔Г╔С╓к╔╓╔С╔╧╔х║╪╔К╓╥╓ф╓╞╓ю╓╣╓╓. ╓Ё╓Л╓г BootEasy ╓╚╓И LILO ╓Р╣╞ф╟╓г╓╜╓К╓Х╓╕╓к╓й╓Й╓ч╓╧. Windows95 ╓х Linux ╓Р╩хмя╓╥╓ф╓╓╓К╬Л╧Г╓о, ╓╓╓╨╓Л╓к╓╩╓Х╦Е╪т╓нйЩ╓╛╓╙╓╧╓╧╓А╓г╓╧. Windows95 ╓Р╨ф╔╓╔С╔╧╔х║╪╔К╓╧╓Ки╛мв╓к╓╚╓И╓Л╓©╓х╓╜, Linux ╓Р╣╞ф╟╡дг╫╓клА╓╧╪ЙбЁ╓╜╓╛╢йц╠╓г╓╧╓Ю╓╚╓И╓г╓╧ (Windows95 ╓ойп╤Ч╓й╔╙╔з╔Л║╪╔ф╔ё╔С╔╟╔╥╔╧╔ф╔Ю╓г, ╔ч╔╧╔©║╪╔ж║╪╔х╔Л╔Ё║╪╔и(MBR)╓╚╓Иб╬╓н╔╙╔з╔Л║╪╔ф╔ё╔С╔╟╔╥╔╧╔ф╔Ю╓Рди╓╓й╖╓ц╓ф╓╥╓ч╓╕╓н╓г╓╧). ║ж╢М╦╠Ёп╦Г╓нюЛмя(dangerously dedicated)╔г╔ё╔╧╔╞║в╓о╥Р╧╞╓к╟╜╓╓╓н? ╔╓╔С╔╧╔х║╪╔К╨Н╤хцФ, ╔о║╪╔и╔г╔ё╔╧╔╞╓н╔я║╪╔ф╔ё╔╥╔Г╔С╓Рюз╓К╨щ╓к 2 ╓д╓нйЩк║╓Ра╙╓ж╓Ё╓х╓╛╓г╓╜╓ч╓╧. ╔г╔у╔╘╔К╔х╓нйЩк║╓г╓о, fdisk ╓н╔ф║╪╔ж╔К╔╗╔С╔х╔Й(FreeBSD ╓г╓о╔╧╔И╔╓╔╧╓х╦ф╓п╓Л╓К) ╓Р╩х╓ц╓ф, ╪╚©х╓н╔я║╪╔ф╔ё╔╥╔Г╔С╓Р╩хмя╓╧╓К FreeBSD ╓н╔╧╔И╔╓╔╧╓Р, ф╠╓╦╔ч╔╥╔С╓нб╬╓н╔╙╔з╔Л║╪╔ф╔ё╔С╔╟╔╥╔╧╔ф╔Ю╓х╦ъ╢╧ю╜╓н╓╒╓К╥а╓к╓╥╓ч╓╧. ╓╫╓Л╓киу©О╓╥╓ф, ╔ж║╪╔х╔╩╔Л╔╞╔©╓Р╔╓╔С╔╧╔х║╪╔К╓╧╓Л╓п, ╔г╔ё╔╧╔╞╬Е╓н╩хмя╡дг╫╓й╔╙╔з╔Л║╪╔ф╔ё╔С╔╟╔╥╔╧╔ф╔Ю╓Рюз╓Йбь╓╗╓К╓Ё╓х╓╛╓г╓╜╓ч╓╧. ╓Б╓╕╟Л╓д╓нйЩк║╓о╔г╔ё╔╧╔╞а╢╓ф╓Р FreeBSD ╓г╩х╓╕╓х╓╓╓╕╓Б╓н╓г, ╓Ё╓н╬Л╧Г╓ш╓╚╓н╔╙╔з╔Л║╪╔ф╔ё╔С╔╟╔╥╔╧╔ф╔Ю╓х╓н╦ъ╢╧ю╜╓Р╧мн╦╓╥╓й╓╓╓Ё╓х╓к╓й╓Й╓ч╓╧. ╓г╓о, ╓й╓╪╓Ё╓Л╓╛ ║ж╢М╦╠Ёп╦Г╓н║в╓х╦ю╓О╓Л╓К╓н╓г╓╥╓Г╓╕? ╓Ё╓н╔Б║╪╔и╓н╔г╔ё╔╧╔╞╓╛, дл╬О╓н PC ╓н╔Ф║╪╔ф╔ё╔Й╔ф╔ё╓╛м╜╦З╓й fdisk ╔ф║╪╔ж╔К╓х╦╚╓й╓╧╬ПйС╓Р╩Щ╓ц╓ф╓╓╓й╓╓╓╚╓И╓г╓╧. ╔Ф║╪╔ф╔ё╔Й╔ф╔ё╓н╫пмХг║╡©╓к╓Х╓Й╓ч╓╧╓╛, ╓╫╓н╓Х╓╕╓й╔г╔ё╔╧╔╞╓Рх╞╦╚╓╥╓©╓х╓╜, ╥ы╧П╓Р╫п╓╧╓Б╓н╓Б╓╒╓Й╓ч╓╧. ╓ч╓©, ╓Б╓ц╓х╟╜╓╓╬Л╧Г, Ёнг╖╓Бдл╧П╓Б╓й╓╥╓к BSD ╓н╔ж║╪╔х╔╧╔х╔И╔ц╔в╓к╔ю╔А║╪╔╦╓Рм©╓╗╓К╓Б╓н╓Б╓╒╓К╓г╓╥╓Г╓╕. ╓╣╓И╓к╓о, ║ж╢М╦╠Ёп╦Г╓н║в╔г╔ё╔╧╔╞╔Л╔╓╔╒╔╕╔х╓об©©Т╓н BIOS, AWARD(нЦ╓╗╓п HP Netserver ╓Д Micronics ╔╥╔╧╔ф╔Ю, б╬б©©Т╓г╩хмя╓╣╓Л╓ф╓╓╓©)╓Д Symbios/NCR(©м╣╓╓н╓╒╓КSCSI ╔Ё╔С╔х╔М║╪╔И 53C8xx мя)╓й╓и╓Р╨╝мП╓╣╓╩╓К╓Ё╓х╓╛й╛╓╚╓ц╓ф╓╓╓ч╓╧. ╓Ё╓Л╓о╢╟а╢╓й╔Й╔╧╔х╓г╓о╓╒╓Й╓ч╓╩╓С. б╬╓к╓Б╓ч╓ю╓ч╓ю╓╒╓Й╓ч╓╧. ╓Ё╓н╨╝мП╓нцШ╦У╓о, ╣╞ф╟╩Ч╓к╔╥╔╧╔ф╔Ю╓╛╔М╔ц╔╞╓╧╓К╓х╓╓╓╕╓ю╓╠╓г╓й╓╞, FreeBSD ╓н╔ж║╪╔х╔╧╔х╔И╔ц╔в╓╛╪╚й╛╪╚©х╓Р╦╚╓д╓╠╓И╓Л╓й╓╓╓©╓А╓ки╫╪╗╓╧╓К read error ╓х╓╓╓╕╔А╔ц╔╩║╪╔╦╓й╓и╓к╓Б╦╫╓Л╓К╓Ё╓х╓г╓╥╓Г╓╕. ╓╫╓Б╓╫╓Б╓╓╓ц╓©╓╓╓й╓╪╓Ё╓н╔Б║╪╔и╓╛╓╒╓К╓н╓г╓╥╓Г╓╕╓╚? ╓Ё╓Л╓о╓О╓╨╓╚╓к©Т╔╜╔М╔п╔╓╔х╓н╔г╔ё╔╧╔╞мфнл╓РюАлС╓╧╓К╓н╓ъ╓г╓╒╓Й, ©╥╣╛╔╓╔С╔╧╔х║╪╔К╓г╪б╨щ╓клДбЙ╓Рю╦╓╨╓К╓н╓г╓╧. ║ж╢М╦╠Ёп╦Г╓н║в╔Б║╪╔и╓н╣╞╦╩╓о©╥╓╥╓╓ FreeBSD ╔╓╔С╔╧╔х║╪╔И╓г╓н, BIOS ╓╚╓И╦╚╓╗╓К╔г╔ё╔╧╔╞╓н ║ж╔╦╔╙╔А╔х╔Й║в╓нцм╓х╔г╔ё╔╧╔╞╪╚©х╓х╓ню╟╧Гю╜╓х╓╓╓╕, ╓Б╓ц╓х╓Б╟Лхле╙╓йлДбЙ╓н╓р╓х╓д╓Р╡СхР╓╥╓©╓╓╓х╓╓╓╕мв╣А╓╛гь╥й╓к╓╒╓Й╓ч╓╧. ║ж╔╦╔╙╔А╔х╔Й║в╓о╩ЧбЕцы╓Л╓нЁ╣г╟╓г╓╧╓╛, л╓╓ю╓к PC BIOS ╓х╔г╔ё╔╧╔╞╓ь╓наЙ╦ъ╨Нмя╓нцФЁк╓Р╓й╓╥╓ф╓╓╓ч╓╧. FreeBSD ╓н╔╓╔С╔╧╔х║╪╔И╓╛╔╧╔И╔╓╔╧╓Р╨Н╓К╩Ч, ╔г╔ё╔╧╔╞╬Е╓н╔╧╔И╔╓╔╧╓Р BIOS ╓╛╦╚╓д╓╠╓И╓Л╓К╓Х╓╕╓к, ╔╧╔И╔╓╔╧╟лцж╓Р╔г╔ё╔╧╔╞╬Е╓к╣╜о©╓╥╓ч╓╧. ╓╫╓Л╓╛╦М╓ц╓ф╓╓╓Л╓п, ╣╞ф╟╓г╓╜╓й╓╞╓й╓ц╓ф╓╥╓ч╓╕╓г╓╥╓Г╓╕. ║ж╢М╦╠Ёп╦Г╓н║в╔Б║╪╔и╓о╓Ё╓Л╓Р, лДбЙ╓Рц╠╫Ц╓к╓╧╓К╓Ё╓х╓г╡СхР╓╥╓Х╓╕╓х╓╥╓ч╓╧. ╬У╤╥╓к╓Х╓ц╓ф╓о╓Ё╓Л╓г╓╕╓ч╓╞╓╓╓╜╓ч╓╧. ╓╥╓╚╓╥╪║а╠╓н╨Ж╓х╓╥╓ф╩х╓О╓Л╓ф╓╓╓К╓к╡А╓╝╓ч╓╩╓С. ╓Ё╓нлДбЙ╓Р╡Р╥Х╓╧╓К╓Б╓ц╓хни╓╓йЩк║╓о╓╓╓╞╓И╓г╓Б╓╒╓К╓н╓г╓╧. ╓г╓о, ╔╓╔С╔╧╔х║╪╔К╩Ч╓к║ж╢М╦╠Ёп╦Г╓нюЛмя║в╔Б║╪╔и╓╛и╛мв╓к╓й╓К ╬У╤╥╓Р╡СхР╓╧╓К╓к╓о╓и╓╕╓╧╓Л╓п╓Х╓╓╓н╓г╓╥╓Г╓╕╓╚? ╓ч╓╨ BIOS ╓╛йС╧П╓╧╓К╔г╔ё╔╧╔╞╓н╔╦╔╙╔А╔х╔Й╓нцм╓РЁп╓╗╓ф╓╙╓╞╓Ё╓х╓╚╓И╓о╓╦╓А╓ч╓╥╓Г╓╕. boot: ╔в╔М╔С╔в╔х╓г ╓Р╩ьдЙ╓╧╓К╓╚, ╔М║╪╔ю╓г boot -v ╓х╩ьдЙ╓╥╓ф, ╣╞ф╟╩Ч╓к╔╚║╪╔м╔К╓к╓Ё╓нцм╓Ри╫╪╗╓╣╓╩╓К╓Ё╓х╓╛╓г╓╜╓ч╓╧. ╔╓╔С╔╧╔х║╪╔И╓╛╣╞ф╟╓╧╓Кд╬а╟╓к, ╔╚║╪╔м╔К╓╛╔╦╔╙╔А╔х╔Йцм╓н╔Й╔╧╔х╓Ри╫╪╗╓╧╓К╓г╓╥╓Г╓╕. ╔я╔к╔ц╔╞╓Р╣╞╓Ё╓╣╓й╓╓╓г╓╞╓ю╓╣╓╓. ╔╓╔С╔╧╔х║╪╔И╓╛╣╞ф╟╓╧╓К╓н╓Рбт╓а, ╣у╔╧╔╞╔М║╪╔К╓г╓╣╓╚╓н╓э╓ц╓фцм╓РЁнг╖╓╥╓ф╓╞╓ю╓╣╓╓. иАдл╓о BIOS ╔г╔ё╔╧╔╞╔Ф╔к╔ц╔ххж╧Ф╓о, FreeBSD ╓╛╔г╔ё╔╧╔╞╓Р╦║╫п╓╧╓К╫Г╫Ь╓хф╠мм╓г╓╒╓Й, ╨г╫И╓к IDE, ╪║╓к SCSI ╓х╓й╓Й╓ч╓╧. ╔г╔ё╔╧╔╞╓Р╔╧╔И╔╓╔╥╔С╔╟╓╧╓К╨щ╓к, FDISK ╓н╡Хлл╓ги╫╪╗╓╣╓Л╓К╔г╔ё╔╧╔╞╓н╔╦╔╙╔А╔х╔Й╓╛ю╣╓╥╓╓╓Ё╓х(BIOS ╓нйж╓╧цм╓х╟Лцв╓╥╓ф╓╓╓К╓╚)╓РЁнг╖╓╥╓ф╓╞╓ю╓╣╓╓. кЭ╟Л╟ш╓й╓ц╓ф╓╓╓©╓И g ╓Р╡║╓╥╓ф╫╓ю╣╓╥╓ф╓╞╓ю╓╣╓╓. ╔г╔ё╔╧╔╞╓к╓ч╓ц╓©╓╞╓й╓к╓Б╓й╓╓╬Л╧Г╓Д, б╬╓н╔╥╔╧╔ф╔Ю╓╚╓И╩Щ╓ц╓ф╓╜╓©╔г╔ё╔╧╔╞╓н╬Л╧Г╓о ╓Ё╓Л╓Р╧т╓й╓╕и╛мв╓╛╓╒╓К╓╚╓Б╓╥╓Л╓ч╓╩╓С. ╓Ё╓Л╓о╓╫╓н╔г╔ё╔╧╔╞╓╚╓И╣╞ф╟╓╣╓╩╓Х╓╕╓х╓╥╓ф╓╓╓К╬Л╧Г╓к╓н╓ъ, лДбЙ╓к╓й╓К╓Ё╓х╓кцМ╟у╓╥╓ф╓╞╓ю╓╣╓╓. FreeBSD ╓о╓╫╓н╔г╔ё╔╧╔╞╓Р╓╕╓ч╓╓╤Я╧Г╓╓╓кб╬╓н╔г╔ё╔╧╔╞╓х╤Хйл╓╥╓ф╓╞╓Л╓ч╓╧. ╔г╔ё╔╧╔╞╓н╔╦╔╙╔А╔х╔Й╓к╓д╓╓╓ф BIOS ╓х FreeBSD ╢ж╓г╟Лцв╓╣╓╩╓К╓Ё╓х╓╛╓г╓╜╓©╓И, ╓Ё╓нлДбЙ╓о╓ш╓э╡Р╥Х╓╥╓©╓х╩в╓ц╓ф╓Х╓╓╓г╓╥╓Г╓╕. ╓╫╓╥╓ф╓Б╓о╓Д║ж╢М╦╠Ёп╦Г╓нюЛмя║в╔Б║╪╔и╓ои╛мв╓╒╓Й╓ч╓╩╓С. ╓╥╓╚╓╥, ╓ч╓ю╣╞ф╟╩Ч╓к╤╡ищ╓н read error ╔А╔ц╔╩║╪╔╦╓╛╫п╓К╓Х╓╕╓г╓╒╓Л╓п, ╓╙╣╖╓Й╓РйШ╓╡╓ф©╥╓╥╓╓╔г╔ё╔╧╔╞╓РгЦ╓╓╓ч╓╥╓Г╓╕. ╓Б╓╕╪╨╓╕╓Б╓н╓о╡©╓Б╓╒╓Й╓ч╓╩╓С. ║ж╢М╦╠Ёп╦Г╓нюЛмя╔г╔ё╔╧╔╞║в╓Рдл╬О╓н PC ╓г╓н╩хмяк║╓клА╓╧╓к╓о, ╦╤б╖╓х╓╥╓ф 2 ╓дйЩк║╓╛╓╒╓Й╓ч╓╧. 1 ╓д╓о╫╫й╛╓й NULL ╔п╔╓╔х╓Р MBR ╓к╫Я╓╜╧Ч╓С╓г, ╓╜╓©╓К╓ы╓╜╔╓╔С╔╧╔х║╪╔И╓к╔г╔ё╔╧╔╞╓о╓ч╓ц╓╣╓И╓ю╓х╩в╓╓╧Ч╓ч╓╩╓КйЩк║╓г╓╧. нЦ╓╗╓п, ╓Ё╓С╓й╢╤╓╦╓г╓╧. &prompt.root; dd if=/dev/zero of=/dev/rda0 count=15 ╓ч╓©, ╔ч╔к╔Е╔╒╔К╓к╓о╫Я╓╚╓Л╓ф╓╓╓й╓╓ DOS ╓н║ж╣║г╫║в > fdisk /mbr ╓о, BSD ╔ж║╪╔х╔╧╔х╔И╔ц╔в╓Рди╓╓й╖╓ц╓ф╓╞╓Л╓К╬Е╓к, ©╥╓╥╓╓╔ч╔╧╔©║╪╔ж║╪╔х╔Л╔Ё║╪╔и╓Р╔╓╔С╔╧╔х║╪╔К╓╥╓ф╓╞╓Л╓ч╓╧. ╓и╓н╓Х╓╕╓к╓╥╓©╓И╔╧╔О╔ц╔внн╟Х╓РаЩ╓Д╓╩╓ч╓╧╓╚? ╔╧╔О╔ц╔в╔я║╪╔ф╔ё╔╥╔Г╔С╓н╔╣╔╓╔╨╓РаЩ╓Д╓╧╓н╓╛╨гни╓нйЩк║╓г╓╧╓╛, йл╓н╔г╔ё╔╧╔╞╓Рди╡ц╓╥╓й╓╞╓ф╨я╓Ю╓х╓╓╓╕мЬею╓н╓╒╓КйЩк║╓╛╓╒╓Й╓ч╓╧. ╥п╦Ё╓╚╓Ифю╓©╟Лхле╙╓ййЩк║╓о╔А╔╓╔С╔А╔Б╔Й╓н 2гэдЬеы╓н╔╧╔О╔ц╔внн╟Х╓Р ╓х╓К╓х╓╓╓╕╓Б╓н╓г╓╧. ╓╥╓╚╓╥╓╢╓╞╬╝╓╣╓й╔А╔╓╔С╔А╔Б╔Й╓╥╓╚╓й╓╓╬Л╧Г╓о, ╓╫╓Л╟й╬Е╓н╔╧╔О╔ц╔в╓Р╧╫ю╝╓╥╓©╓╓╓х╩в╓╕╓г╓╥╓Г╓╕. ╓ч╓©, ╬╜мХ╓н╔А╔Б╔Й╓н ╔╒╔ц╔в╔╟╔Л║╪╔и╓кхВ╓╗, ╦Е╓г╔╧╔О╔ц╔в╓н╧╫ю╝╓Рйя╧╧╓╧╓Ки╛мв╓╛╓й╓╓╓Х╓╕╓к ╫╫й╛╓й╔╧╔О╔ц╔в╓Р╧╫ю╝╓╥╓ф╓╙╓╞╓Ё╓х╓они╓╓╧м╓╗╓г╓╧. ╔╧╔О╔ц╔в╓Рйл╓н╔г╔ё╔╧╔╞╬Е╓кди╡ц╓╧╓К╓Ё╓х╓о, ц╠╫Ц╓кф╠╓╦╔г╔ё╔╧╔╞╬Е ╓к╔╧╔О╔ц╔в╓Рди╡ц╓╧╓К╬Л╧Г╓Х╓Й╓Б╧Бб╝╓кф╟╨Н╓╧╓К╓Х╓╕╓к╓й╓Й╓ч╓╧. нЦ╓к╣С╓╡╓Л╓п, ╓╒╓К╔г╔ё╔╧╔╞╬Е╓н╔╫║╪╔╧╓Р╔Ё╔С╔я╔╓╔К╓╥╓ф╓╓╓К╓х╓╥╓ф, ╔╧╔О╔ц╔в╓╛йл╓н╔г╔ё╔╧╔╞╬Е╓к╨Н╓И╓Л╓ф╓╓╓Л╓п, ╓Ё╓Л╓И╓╛ф╠╓╦╔г╔ё╔╧╔╞╬Е ╓к╓╒╓К╬Л╧Г╓Х╓Й╓БцгаЁб╝╓╓╓г╓╧. SCSI ╔г╔ё╔╧╔╞╓н╬Л╧Г╓офц╓к╓╫╓╕╓ю╓х╦ю╓╗╓ч╓╧. ╔г╔ё╔╧╔╞╓╛йё©Т╓╒╓К╬Л╧Г, ╔╧╔О╔ц╔в╔я║╪╔ф╔ё╔╥╔Г╔С╓РЁф╔г╔ё╔╧╔╞╓к ╨Н╓К╓Х╓╕╓к╧╫ю╝╓╧╓К╓х, ╩хмяцФ╓н╔г╔ё╔╧╔╞╬Е╓к╔╧╔О╔ц╔в╓Рцж╓╓╓©╓х╓╥╓ф╓Б, дл╬О╓н╬Л╧Г╓ом╜╠в╓г╓╧. ╟Лхле╙╓к, ╔╥╔╧╔ф╔Ю╓к╓╒╓К╧Бб╝╓й╔г╔ё╔╧╔╞╓к╓о ╔╧╔О╔ц╔в╓Р╨Н╓К╓Х╓╕╓к╓╧╓ы╓╜╓г╓╥╓Г╓╕. FreeBSD ╓о╔г╔у╔╘╔К╔х╓г╔╓╔С╔©║╪╔Й║╪╔ж╓й╔╧╔О╔ц╔в╔г╔п╔╓╔╧╓Р 4╓д╓ч╓г ╔╣╔щ║╪╔х╓╥╓ч╓╧. йё©Т╓н╔╧╔О╔ц╔в╔я║╪╔ф╔ё╔╥╔Г╔С╓Р╧╫ю╝╓╧╓К╨щ╓к, иАдл╓о╓╫╓Л╓И╓РбГбнф╠╓╦╓╞╓И╓╓╓нбГ╓╜╓╣╓к╓╥╓ф╨Н╓Й╓©╓╓╓х╓Ё╓М╓г╓╧╓╛, ╔╚║╪╔м╔К╓н╔Ё╔╒╔ю╔С╔в╓Р╪Х╓К╓н╓кет╧Г╓╛ни╓╓╓Х╓╕╓к╔А╔╓╔С╓н ╔╧╔О╔ц╔в╔я║╪╔ф╔ё╔╥╔Г╔С╓РбГ╓╜╓А╓к╓х╓К©м╓Б╓╓╓ч╓╧. ╔А╔╓╔С╓н╔╧╔О╔ц╔в╔я║╪╔ф╔ё╔╥╔Г╔С╓о╔╚║╪╔м╔К╓н╔Ё╔╒╓╛╓х╓Л╓К╓Х╓╕╓к ╨гдЦ╓г╓Б╪б╔А╔Б╔Й╓хф╠╓╦бГ╓╜╓╣╓к╓╧╓ы╓╜╓г╓╥╓Г╓╕. IDE ╔и╔И╔╓╔ж╓оф╠╩Ч╓кф╠╓╦╔а╔Ц╔м╔К╬Е╓нйё©Т╓н╔и╔И╔╓╔ж╓к╓о ╔╒╔╞╔╩╔╧╓г╓╜╓ч╓╩╓С (FreeBSD ╓о mode 4 ╓Р╔╣╔щ║╪╔х╓╥╓ф╓╓╓й╓╓╓н╓г, ╓╧╓ы╓ф╓н IDE ╔г╔ё╔╧╔╞ I/O ╓о programmed ╓г╓╧). IDE ╓н╬Л╧Г╓г╓╒╓ц╓ф╓Б╓Д╓о╓Й, ╔╧╔О╔ц╔в╓Рйл╓н╔о║╪╔и╔г╔ё╔╧╔╞╬Е╓к ╨Ню╝╓╧╓К╓Ё╓х╓Р╓╙╓╧╓╧╓А╓╥╓ч╓╧. ╔и╔И╔╓╔ж╓о╪б╓к╟б╓╓╓Б╓н╓г╓╧, ©╢гш╓╧╓К╓ю╓╠л╣бл╓г╓╧. NFS ╠ш╓╥╓к╔╧╔О╔ц╔т╔С╔╟╓╣╓╩╓КйЩк║╓о, ╔╧╔О╔ц╔вмя╓н╔М║╪╔╚╔К╔г╔ё╔╧╔╞╓╛л╣╓╓╬Л╧Г╓к╓н╓ъ©Д╬╘╓╣╓Л╓ч╓╧. NFS ╠ш╓╥╓н╔╧╔О╔ц╔т╔С╔╟╓оцы╓╞, FreeBSD 4.x ╓Х╓Йа╟╓н╔Й╔Й║╪╔╧╓г╓о ╦Зн╗╓╛╟╜╓╓╓н╓г╓╧╓╛, 4.0 ╟й╧ъ╓г╓о╓╫╓Л╓й╓Й╓к╧Бб╝╓к╓й╓Й╓ч╓╧. ╓╫╓╕╓о╓╓╓ц╓ф╓Б, мЬмя╓г╓╜╓К╔м╔ц╔х╔О║╪╔╞╓нбю╓╣╓кю╘╦б╓╣╓Л╓ч╓╧╓╥, NFS ╔╣║╪╔п╓км╬╥в╓йиИ╡ы╓╛╓╚╓╚╓Й╓ч╓╧. ╓Ё╓Л╓о 64MB╓н vn-swap ╓Р╨Н╓КнЦ╓г╓╧(╓Ё╓Ё╓г╓о /usr/swap0 ╓х╓╥╓ч╓╧╓╛, ╓Б╓а╓М╓С╧╔╓╜╓йл╬а╟╓Р╩х╓╕╓Ё╓х╓╛╓г╓╜╓ч╓╧). ╔╚║╪╔м╔К╓╛╪║╓н╧т╓Р╢ч╓Ю╔Ё╔С╔у╔ё╔╟╔у╔║╔╓╔К╓╚╓И╧╫ю╝╓╣╓Л╓ф╓╓╓К╓╚╓Р Ёнг╖╓╥╓ч╓╧. GENERIC ╔╚║╪╔м╔К╓к╓о, ╓Ё╓н╧т╓╛╢ч╓ч╓Л╓ф╓╓╓ч╓╧. pseudo-device vn 1 #Vnode driver (turns a file into a device) vn ╔г╔п╔╓╔╧╓Р╨Н╓Й╓ч╓╧ &prompt.root; cd /dev &prompt.root; sh ./MAKEDEV vn0 ╔╧╔О╔ц╔в╔у╔║╔╓╔К╓Р╨Н╓Й╓ч╓╧(/usr/swap0) &prompt.root; dd if=/dev/zero of=/usr/swap0 bs=1024k count=64 /etc/rc.conf ╓г╔╧╔О╔ц╔в╔у╔║╔╓╔К╓Рм╜╦З╡╫╓╣╓╩╓ч╓╧ swapfile="/usr/swap0" # Set to name of swapfile if aux swapfile desired. ╔ч╔╥╔С╓Р╨ф╣╞ф╟╓╥╓ч╓╧ ╔╧╔О╔ц╔в╔у╔║╔╓╔К╓Р╓╧╓╟╓км╜╦З╡╫╓╣╓╩╓©╓╓╓н╓й╓И╟й╡╪╓н╓Х╓╕╓к╔©╔╓╔в╓╥╓ч╓╧. &prompt.root; vnconfig -ce /dev/vn0c /usr/swap0 swap ╔в╔Й╔С╔©╓н╔╩╔ц╔х╔╒╔ц╔в╓глДбЙ╓╛╓╒╓Й╓ч╓╧ ╔о╔С╔и╔ж╔ц╔╞╓н╔в╔Й╔С╔©╓ниТй╛╓Р╩╡╬х╓╥╓ф╓╞╓ю╓╣╓╓. ц╣╓╥╓ф╓╓╓КлДбЙ╓н╓ш╓х╓С╓и╓╛╫Я╓╚╓Л╓ф╓╓╓К╓о╓╨╓г╓╧. FreeBSD ╔о╔С╔и╔ж╔ц╔╞╓н║ж╔в╔Й╔С╔©╓нмЬмя║в╓Р╓╢мВ╓╞╓ю╓╣╓╓. ╩Д╓н╔╥╔╧╔ф╔Ю╓н╔╜║╪╔э║╪╔и╔ч╔ц╔т╔С╔╟╓о╢ж╟Ц╓ц╓ф╓╓╓ч╓╧. kbdcontrol ╔в╔М╔╟╔И╔Ю╓о, ╔╜║╪╔э║╪╔и╔ч╔ц╔в╔у╔║╔╓╔К╓Рфи╓ъ╧Ч╓Ю╓©╓А╓н╔╙╔в╔╥╔Г╔С╓РхВ╓╗╓ф╓╓╓ч╓╧. /usr/share/syscons/keymaps ╓н╡╪╓к╓©╓╞╓╣╓С╓н╔ч╔ц╔в╔у╔║╔╓╔К╓╛╓╒╓Й╓ч╓╧. ╔╥╔╧╔ф╔Ю╓к╢ьо╒╓н╓╒╓К╓Б╓н╓Р╟Л╓да╙╓С╓г, ╔М║╪╔и╓╥╓ф╓╞╓ю╓╣╓╓. &prompt.root; kbdcontrol -l uk.iso /usr/share/syscons/keymaps ╓хЁхд╔╩р .kbd ╓о, ╓и╓а╓И╓Б kbdcontrol ╓к╓Х╓ц╓ф╩хмя╓╣╓Л╓ч╓╧. ╓Ё╓Л╓о /etc/sysconfig(╓ч╓©╓о rc.conf) цФ╓гюъдЙ╓╧╓К╓Ё╓х╓╛╓г╓╜╓ч╓╧. ╓Ё╓н╔у╔║╔╓╔КцФ╓к╓╒╓К╓╫╓Л╓╬╓Л╓н╔Ё╔А╔С╔х╓Р╩╡╬х╓╥╓ф╓╞╓ю╓╣╓╓. FreeBSD 2.0.5R ╓Д╓╫╓Л╟й╧ъ╓нхг╓г╓о, ╔ф╔╜╔╧╔х╔у╔╘╔С╔х╓Д╔╜║╪╔э║╪╔и╔ч╔ц╔т╔С╔╟╓к╢ь╥╦╓н╓╒╓К╓Б╓н╓о╓╧╓ы╓ф, /usr/share/examples/syscons ╓нцФ╓к╓╙╓╣╓А╓И╓Л╓ф╓╓╓ч╓╧. ╦╫╨ъ╟й╡╪╓н╔ч╔ц╔т╔С╔╟╓╛╔╣╔щ║╪╔х╓╣╓Л╓ф╓╓╓ч╓╧. Belgian ISO-8859-1 Brazilian 275 keyboard Codepage 850 Brazilian 275 keyboard ISO-8859-1 Danish Codepage 865 Danish ISO-8859-1 French ISO-8859-1 German Codepage 850 German ISO-8859-1 Italian ISO-8859-1 Japanese 106 Japanese 106x Latin American Norwegian ISO-8859-1 Polish ISO-8859-2 (programmer's) Russian Codepage 866 (alternative) Russian koi8-r (shift) Russian koi8-r Spanish ISO-8859-1 Swedish Codepage 850 Swedish ISO-8859-1 Swiss-German ISO-8859-1 United Kingdom Codepage 850 United Kingdom ISO-8859-1 United States of America ISO-8859-1 United States of America dvorak United States of America dvorakx ╣╞ф╟╩Ч╓к, unknown: <PNP0303> can't assign resources ╓х╓╓╓╕╔А╔ц╔╩║╪╔╦╓╛и╫╪╗╓╣╓Л╓К╓н╓г╓╧╓╛? ╓Ё╓н╔А╔ц╔╩║╪╔╦╓о, ╔в╔И╔╟╔╒╔С╔и╔в╔Л╔╓ (Plug-and-Play) ╔г╔п╔╓╔╧╓╛╦║╫п╓╣╓Л╓©╓╛, ╦╫╨ъмЬмя╓╥╓ф╓╓╓К╔╚║╪╔м╔К╓к╓обп╠Ч╓╧╓К╔и╔И╔╓╔п╓╛╓й╓╓, ╓х╓╓╓╕╓Ё╓х╓Р╪╗╓╥╓ф╓╓╓ч╓╧. фц╓кЁ╡╓о╓╒╓Й╓ч╓╩╓С. ╓Ё╓н╔А╔ц╔╩║╪╔╦╓Ри╫╪╗╓╣╓╩╓©╓╞╓й╓╓╓х╩в╓О╓Л╓КйЩ╓о, ╓╪╓р╔г╔п╔╓╔╧╔и╔И╔╓╔п╓Р FreeBSD Project ╓ч╓г send-pr ╓╥╓ф╓╞╓ю╓╣╓╓. ╔Ф║╪╔╤╔г╔ё╔╧╔╞╔╞╔╘║╪╔©╓╛ю╣╬О╓кф╟╨Н╓╥╓ф╓╓╓й╓╓╓Х╓╕╓г╓╧. / ╓к╓о╔г╔ё╔╧╔╞╔╞╔╘║╪╔©╓РюъдЙ╓╥╓й╓╓╓г╓╞╓ю╓╣╓╓. ╔╞╔╘║╪╔©╔у╔║╔╓╔К╓╛цж╓╚╓Л╓К╔у╔║╔╓╔К╔╥╔╧╔ф╔Ю╬Е╓к ╔╞╔╘║╪╔©╔у╔║╔╓╔К╓Рцж╓╞╓Х╓╕╓к╓╥╓ф╓╞╓ю╓╣╓╓. Filesystem Quota file /usr /usr/admin/quotas /home /home/admin/quotas ╓О╓©╓╥╓н ccd ╓о, ╡©╓╛е╛╧Г╓╥╓ф╓╓╓й╓╓(Inappropriate)╓н╓г╓╥╓Г╓╕? ╪║╓н╓Х╓╕╓й╬и╬У╓╛╦╫╓Л╓ч╓╧. &prompt.root; ccdconfig -C ccdconfig: ioctl (CCDIOCSET): /dev/ccd0c: Inappropriate file type or format дл╬О╓Ё╓н╦╫╬щ╓о╔©╔╓╔в╓Р║жл╓╩хмя (unused)║в╓н╓ч╓чйЭ╓ц╓ф╓╙╓╚╓Л╓© c ╔я║╪╔ф╔ё╔╥╔Г╔С╓Р╓д╓й╓╡╓Х╓╕╓х╓╥╓©╬Л╧Г╓к╦╫╓Л╓ч╓╧. ccd ╔и╔И╔╓╔п╓о FS_BSDFFS ╔©╔╓╔в╓Р╔ы║╪╔╧╓х╓╧╓К╔я║╪╔ф╔ё╔╥╔Г╔С╓Рмв╣А╓╥╓ч╓╧. ╓д╓й╓╡╓Х╓╕╓х╓╥╓ф╓╓╓К╔г╔ё╔╧╔╞╓н╔г╔ё╔╧╔╞╔И╔ы╔К╓Рйт╫╦╓╥╓ф, ╔я║╪╔ф╔ё╔╥╔Г╔С╓н╔©╔╓╔в╓Р 4.2BSD ╓кйя╧╧╓╥╓ф╓╞╓ю╓╣╓╓. ╓и╓╕╓╥╓ф╓О╓©╓╥╓н ccd ╓н╔г╔ё╔╧╔╞╔И╔ы╔К╓Рйя╧╧╓╧╓К╓Ё╓х╓╛╓г╓╜╓й╓╓╓н╓г╓╥╓Г╓╕? ╪║╓н╓Х╓╕╓й╬и╬У╓╛╦╫╓Л╓ч╓╧. &prompt.root; disklabel ccd0 (it prints something sensible here, so let's try to edit it) &prompt.root; disklabel -e ccd0 (edit, save, quit) disklabel: ioctl DIOCWDINFO: No disk label on disk; use "disklabel -r" to install initial label ╓Ё╓Л╓о ccd ╓╚╓Ийж╓╣╓Л╓К╔г╔ё╔╧╔╞╔И╔ы╔К╓╛, ╪б╓о╔г╔ё╔╧╔╞╬Е╓к╓о╓й╓╓╓ч╓ц╓©╓╞╓н╣╤╓н╬ПйС╓ю╓╚╓И╓г╓╧. ╓Ё╓Л╓Рлю╪╗е╙╓к╫Я╓╜д╬╓╧╓Ё╓х╓глДбЙ╓Р╡Р╬ц╓г╓╜╓ч╓╧, ╓╫╓Л╓к╓о, ╓д╓╝╓н╓Х╓╕╓к╓╥╓ч╓╧. &prompt.root; disklabel ccd0 > /tmp/disklabel.tmp &prompt.root; disklabel -Rr ccd0 /tmp/disklabel.tmp &prompt.root; disklabel -e ccd0 (this will work now) FreeBSD ╓о System V ╓н IPC ╔в╔Й╔ъ╔ф╔ё╔ж╓Р╔╣╔щ║╪╔х╓╥╓ч╓╧╓╚? ╓о╓╓. FreeBSD ╓о System-V ╔╧╔©╔╓╔К╓н IPC ╓Р╔╣╔щ║╪╔х╓╥╓ч╓╧. ╤╕м╜╔А╔Б╔Й, ╔А╔ц╔╩║╪╔╦, ╔╩╔ч╔у╔╘╓╛╢ч╓ч╓Л╓ч╓╧. ╟й╡╪╓н╧т╓Р╔╚║╪╔м╔К╔Ё╔С╔у╔ё╔╟╔у╔║╔╓╔К╓к╡ц╓╗╓К╓х, ╔╣╔щ║╪╔х╓╛м╜╦З╓к╓й╓Й╓ч╓╧. options SYSVSHM # enable shared memory options SYSVSEM # enable for semaphores options SYSVMSG # enable for messaging FreeBSD 3.2 ╓х╓╫╓Л╟й╧ъ╓г╓о, ╓Ё╓Л╓И╓н╔╙╔в╔╥╔Г╔С╓╛╓╒╓И╓╚╓╦╓А GENERIC ╔╚║╪╔м╔К╓к╢ч╓ч╓Л╓ф╓╓╓ч╓╧╓н╓г, ╓╒╓й╓©╓н╔╥╔╧╔ф╔Ю╓к╓о╓╧╓г╓ках╓ъ╧Ч╓ч╓Л╓ф╓╓╓ч╓╧. ╔╚║╪╔м╔К╓Р╨ф╧╫цш╓╥╓ф╔╓╔С╔╧╔х║╪╔К╓╥╓ф╓╞╓ю╓╣╓╓. UUCP ╓г╔А║╪╔К╓РгшаВ╓╧╓К╓к╓о sendmail ╓Р╓и╓╕╩х╓╗╓п╓Х╓╓╓н╓г╓╧╓╚? FreeBSD ╓киуб╟╓╥╓ф╓╓╓К sendmail ╓о, ╔╓╔С╔©║╪╔м╔ц╔х╓кд╬юэ╓д╓й╓╛╓ц╓ф╓╓╓К╔╣╔╓╔х╓к╓╒╓О╓╩╓фюъдЙ╓╥╓ф╓╒╓Й╓ч╓╧. UUCP ╥пмЁ╓г mail ╓Р╦Р╢╧╓╥╓©╓╓╬Л╧Г╓к╓о sendmail ╓нюъдЙ╔у╔║╔╓╔К╓Р╡Ч╓А╓ф╔╓╔С╔╧╔х║╪╔К╓╥╓й╓╠╓Л╓п╓й╓Й╓ч╓╩╓С. /etc/sendmail.cf ╓Р╪╚й╛╓н╪Й╓г╡Чб╓╓╧╓К╓н╓о╫Ц©Х╪Г╣а╪т╓н╓Д╓К╓Х╓╕╓й╩Ж╓г╓╧. sendmail ╓н version 8 ╓о m4 ╓н╓Х╓╕╓й╔в╔Й╔в╔М╔╩╔ц╔╣╓Рдл╓╥╓фюъдЙ╔у╔║╔╓╔К╓Рю╦ю╝╓╧╓К©╥╓╥╓╓╔╒╔в╔М║╪╔а╓Р╪Х╓ц╓ф╓╙╓Й, ╓Х╓ЙцЙ╬щ╡╫╓╣╓Л╓©╔Л╔ы╔К╓нюъдЙ╔у╔║╔╓╔К╓Рйт╫╦╓╥╓ч╓╧. /usr/src/usr.sbin/sendmail/cf ╔г╔ё╔Л╔╞╔х╔Й╓нцФ╓к╓╒╓КюъдЙ╔у╔║╔╓╔К╓Р╩хмя╓╥╓ф╓╞╓ю╓╣╓╓. ╓Б╓╥╓╧╓ы╓ф╓н╔╫║╪╔╧╓Р╔╓╔С╔╧╔х║╪╔К╓╥╓ф╓╓╓й╓╓╬Л╧Г╓к╓о sendmail ╓нюъдЙ╔д║╪╔К╓о, йл╓н tar ╔у╔║╔╓╔К╓к╓ч╓х╓А╓ф╓╒╓Й╓ч╓╧. CD-ROM ╓╛ mount ╓╣╓Л╓ф╓╓╓К╬Л╧Г╓к╓о, ╪║╓н╓Х╓╕╓к╓╥╓ф╓╞╓ю╓╣╓╓. &prompt.root; cd /cdrom/src &prompt.root; cat scontrib.?? | tar xzf - -C /usr/src contrib/sendmail ╓Ё╓Л╓о╓©╓ц╓©©Т 100Kbyte ╓г╓╧╓╚╓И©╢гш╓й╓╓╓г╓╥╓Г╓╕. cf ╔г╔ё╔Л╔╞╔х╔Й╓к╓╒╓К README ╓к, m4 ╓г╓нюъдЙ╓н╢Пкэе╙╓йюБлю╓╛╓╒╓Й╓ч╓╧. UUCP ╓г╓нгшаВ╓н╓©╓А╓к╓о, mailertable ╓Р╩хмя╓╧╓Л╓п ╓Х╓╓╓г╓╥╓Г╓╕. ╓Ё╓Л╓к╓Х╓ц╓ф, sendmail ╓╛гшаВйЩ╪╟╓Р╥ХдЙ╓╧╓К╔г║╪╔©╔ы║╪╔╧╓Р ╨Ню╝╓╧╓К╓Ё╓х╓╛╓г╓╜╓ч╓╧. ╓ч╓╨╓о╓╦╓А╓к, .mc ╔у╔║╔╓╔К╓Р╨Ню╝╓╥╓й╓╠╓Л╓п╓й╓Й╓ч╓╩╓С. /usr/src/usr.sbin/sendmail/cf/cf ╓х╓╓╓╕╔г╔ё╔Л╔╞╔х╔Й╓╛, ╓Ё╓Л╓И╓н╔у╔║╔╓╔К╓Р╨Ню╝╓╧╓К╬Л╫Й╓г╓╧. ╢Ш╓к╓╓╓╞╓д╓╚нЦ╓╛╓╒╓К╓х╩в╓╓╓ч╓╧. ╓Ё╓Л╓╚╓И╨Ню╝╓╧╓К╔у╔║╔╓╔К╓нл╬а╟╓Р foo.mc ╓х╓╧╓К╓х, sendmail.cf ╓Р╣А╓А╓ф╓╓╓К╓Х╓╕╓й╥а╪╟╓кйя╢╧╓╧╓К╓к╓о, ╪║╓н╓Х╓╕╓к╓╥╓ф╓╞╓ю╓╣╓╓. &prompt.root; cd /usr/src/usr.sbin/sendmail/cf/cf &prompt.root; make foo.cf &prompt.root; cp foo.cf /etc/sendmail.cf и╦╫Юе╙╓й .mc ╔у╔║╔╓╔К╓о╪║╓н╓Х╓╕╓к╓й╓Й╓ч╓╧. include(`../m4/cf.m4') VERSIONID(`Your version number') OSTYPE(bsd4.4) FEATURE(nodns) FEATURE(nocanonify) FEATURE(mailertable) define(`UUCP_RELAY', your.uucp.relay) define(`UUCP_MAX_SIZE', 200000) MAILER(local) MAILER(smtp) MAILER(uucp) Cw your.alias.host.name Cw youruucpnodename.UUCP nodns ╓х nocanonify ╓х╓╓╓╕╩ьдЙ╓Р╓╧╓К╓Ё╓х╓г, mail ╓нгшаВ╓к DNS ╓Р╩хмя╓╥╓й╓╞╓й╓Й╓ч╓╧. UUCP_RELAY ╓х╓╓╓╕ ╧т╓к╢ь╓╥╓ф╓о, ╓╒╓КмЩмЁ╓╚╓Ии╛мв╓г╓╧╓╛╓╫╓Л╓ой╧╓╚╓й╓╓╓г╓╞╓ю╓╣╓╓. .UUCP ╓г╫╙╓О╓К╡╬аш╔и╔А╔╓╔С╓Р╫ХмЩ╓╧╓К╓Ё╓х╓н╓г╓╜╓К╔╓╔С╔©║╪╔м╔ц╔х╬Е╓г╓н ╔ш╔╧╔хл╬╓Р╓Ё╓Ё╓к╫Я╓╓╓ф╓╞╓ю╓╣╓╓. дл╬О╓о, ISP ╓н mail ╔Й╔Л║╪╔ш╔╧╔х╓Р ╫Я╓╞╓Ё╓х╓к╓й╓К╓х╩в╓╓╓ч╓╧. ╓Ё╓Л╓╛╫╙н╩╓╥╓©╓И, ╪║╓к /etc/mailertable ╓х╓╓╓╕╔у╔║╔╓╔К╓╛и╛мв╓г╓╧. и╦╫Юе╙╓йнЦ╓о╪║╓н╓х╓╙╓Й╓г╓╧. # # makemap hash /etc/mailertable.db < /etc/mailertable # horus.interface-business.de uucp-dom:horus .interface-business.de uucp-dom:if-bus interface-business.de uucp-dom:if-bus .heep.sax.de smtp8:%1 horus.UUCP uucp-dom:horus if-bus.UUCP uucp-dom:if-bus . uucp-dom: ╦╚╓Л╓пй╛╓╚╓К╓Х╓╕╓к, ╓Ё╓Л╓о╪б╨ъ╓╧╓КюъдЙ╓н╔у╔║╔╓╔К╓г╓╧. ╓о╓╦╓А╓н 3 ╧т╓о╔и╔А╔╓╔Сл╬╓г╩ьдЙ╓╣╓Л╓©╔А║╪╔К╓╛ default ╓н╥по╘╓ггшаВ╓╣╓Л╓╨╓к, ║ж╤Аф╩║в╓╧╓К╓©╓А╓к UUCP ╓гны╓Й╓н╔╣╔╓╔х╓каВ╓К╓©╓А╓нфцйл╓й╬У╤╥╓Р ╫ХмЩ╓╧╓К╓Б╓н╓г╓╧. ╪║╓н╧т╓о Ethernet ╓г╓д╓й╓╛╓ц╓ф╓╓╓К╔М║╪╔╚╔К╓н╔и╔А╔╓╔С╓кбп╓╥╓ф╓о SMTP ╓гаВ╓К╓©╓А╓нюъдЙ╓г╓╧. ╨г╦Е╓к, UUCP ╓г╓нны╓Й╓н╔╣╔╓╔х╓╛. UUCP ╓г╫╙╓О╓К╡╬аш╔и╔А╔╓╔С╓н╫Я╪╟╓г ╩ьдЙ╓╣╓Л╓ф╓╙╓Й, default ╓н rule ╓Р uucp-neighbour! recipient ╓г╬Е╫Я╓╜╓╧╓К╓©╓А╓н╓Б╓н╓г╓╧. ╟Лхж╨г╦Е╓н╧т╓о╓╓╓д╓Б╔и╔ц╔х╓Р╟Л╓д╫Я╓╜╓ч╓╧. ╓Ё╓Л╓о, ╓Ё╓Ё╓ч╓г╓н╧т╓г╔ч╔ц╔а╓╥╓й╓╚╓ц╓©╓╧╓ы╓ф╓н╔ш╔╧╔х╓к╔ч╔ц╔а╓╥, ╓Ё╓н╔╣╔╓╔х╓╚╓Ию╓Ё╕╓к╦Ч╓╠╓ф╫п╓ф╓╓╓╞╓©╓А╓н mail gateway ╓к UUCP ╓ггшаВ╓╧╓К╓©╓А╓н╓Б╓н╓г╓╧. uucp-dom: ╓кбЁ╓╠╓ф╫Я╓╚╓Л╓ф╓╓╓К╔н║╪╔ил╬╓о, uuname ╔Ё╔ч╔С╔и╓г╩ьдЙ╓╧╓К╓Ё╓х╓к╓Х╓ц╓ф UUCP ╓гд╬юэгшаВ╓╣╓Л╓Кю╣╓╥╓╓╔н║╪╔ил╬╓г╓й╓╠╓Л╓п╓й╓Й╓ч╓╩╓С. ╨г╦Е╓к, ╓Ё╓н╔у╔║╔╓╔К╓о╩хмя╓╧╓Ка╟╓к DBM ╔г║╪╔©╔ы║╪╔╧╓н╔у╔║╔╓╔К╓к йя╢╧╓╧╓Ки╛мв╓╛╓╒╓Й╓ч╓╧. ╓Ё╓Л╓Р╧т╓й╓╕╔Ё╔ч╔С╔и╔И╔╓╔С╓о mailertable ╓н╨г╫И╓н╔Ё╔А╔С╔х╓к╫Я╓╓╓ф╓╒╓Й╓ч╓╧. mailertable ╓Рйя╧╧╓╥╓©╩Ч╓к╓о, и╛╓╨╓Ё╓н╔Ё╔ч╔С╔и╓Р╪б╧т╓╥╓ф╓╞╓ю╓╣╓╓. ╨г╦Е╓н╔р╔С╔х╓г╓╧: ╓Б╓╥фцдЙ╓н╔А║╪╔КгшаВ╓╛╓╕╓ч╓╞╨Нф╟╓╧╓К╓╚╓и╓╕╓╚ Ён╓╚╓А╓©╓╓╬Л╧Г╓к╓о, sendmail ╓н ╔╙╔в╔╥╔Г╔С╓Р ╩хмя╓╥╓ф╓╞╓ю╓╣╓╓. ╓Ё╓н╔╙╔в╔╥╔Г╔С╓к╓Х╓ц╓ф sendmail ╓о ╔╒╔и╔Л╔╧╔ф╔╧╔х╔Б║╪╔и╓г╣╞ф╟╓╥╓ч╓╧. 0 ╓н╦Е╓кгшаВ╓╥╓©╓╓╔╒╔и╔Л╔╧╓Р╫Я╓╓╓ф╓╞╓ю╓╣╓╓. ╨г╦Е╓н╧т╓к, ╪б╨щ╓к╩хмя╓╣╓Л╓К mail agent, ╓Ё╓н mail agent ╓гаВ╓И╓Л╓КаВ©╝юХ╓н╔ш╔╧╔х, ╓╫╓╥╓ф (б©й╛йя╢╧╓╣╓Л╓ф╓╓╓К) ╔╒╔и╔Л╔╧╓╛и╫╪╗╓╣╓Л╓ч╓╧. ╓Ё╓н╔Б║╪╔и╓Рх╢╓╠╓К╓к╓о Control-D ╓Р╡║╓╥╓ф╓╞╓ю╓╣╓╓. &prompt.user; sendmail -bt ADDRESS TEST MODE (ruleset 3 NOT automatically invoked) Enter <ruleset> <address> > 0 foo@interface-business.de rewrite: ruleset 0 input: foo @ interface-business . de ... rewrite: ruleset 0 returns: $# uucp-dom $@ if-bus $: foo \ < @ interface-business . de > > ^D ╔ю╔╓╔╒╔К╔╒╔ц╔в╓г╔╓╔С╔©║╪╔м╔ц╔х╓кюэбЁ╓╧╓К╢д╤╜╓г╔А║╪╔К╓Р╔╩╔ц╔х╔╒╔ц╔в╓╧╓К╓к╓о╓и╓╕╓Д╓К╓н? юее╙╓к IP ╔╒╔и╔Л╔╧╓╛ЁД╓ЙеЖ╓ф╓И╓Л╓К╬Л╧Г╓о, ╔г╔у╔╘╔К╔х╓н╬Убж╓Рйя╧╧╓╧╓Ки╛мв╓о╓╒╓Й╓ч╓╩╓С. ЁД╓ЙеЖ╓ф╓И╓Л╓©л╬а╟╓Р╔ш╔╧╔х╔м║╪╔Ю╓х ╓╧╓К╓ю╓╠╓г, sendmail ╓╛╦Е╓н╓Ё╓х╓Р╟З╓╜╪У╓╠╓ф╓╞╓Л╓ч╓╧. ╔ю╔╓╔╒╔К╔╒╔ц╔в ppp ╓Р╔╓╔С╔©║╪╔м╔ц╔хюэбЁ╓к╩хмя╓╥, ф╟е╙╓к IP ╔╒╔и╔Л╔╧╓╛ЁД╓ЙеЖ╓ф╓И╓Л╓К╬Л╧Г╓о, ╔╓╔С╔©║╪╔м╔ц╔х╔╣║╪╔с╔╧╔в╔М╔п╔╓╔ю(ISP)╓н╔А║╪╔К╔╣║╪╔п╓к╔А║╪╔К╔э╔ц╔╞╔╧╓╛╓╒╓К╓о╓╨╓г╓╧. ISP ╓н╔и╔А╔╓╔С╓╛ myISP.com ╓г, ╓╒╓й╓©╓н╔Ф║╪╔╤л╬╓╛ user ╓ю╓х╡╬дЙ╓╥╓ч╓╧. ╓ч╓©, ╓╒╓й╓©╓╛╪╚й╛╓н╔ч╔╥╔С╓Р bsd.home ╓х╦ф╓С╓г╓╙╓Й, ISP ╓╛ relay.myISP.com ╓Р╔А║╪╔К╔Й╔Л║╪╓х╓╥╓ф╩хмя╓г╓╜╓К╓х╦ю╓ц╓ф╓╓╓К╓х╓╥╓ч╓╥╓Г╓╕. ╔А║╪╔К╔э╔ц╔╞╔╧╓╚╓И╔А║╪╔К╓Р╪Х╓ц╓ф╓╞╓К╓©╓А╓к╓о, ╡С╪Щ(retrieval)╔╗║╪╔╦╔╖╔С╔х╓Р╔╓╔С╔╧╔х║╪╔К╓╧╓Ки╛мв╓╛╓╒╓Й╓ч╓╧. Fetchmail ╓об©╪Об©мм╓й╔в╔М╔х╔Ё╔К╓Р╔╣╔щ║╪╔х╓╥╓ф╓╓╓К╓н╓г╓╙╢╚╓А╓г╓╧. ISP ╓╛╩хмя╓╥╓ф╓╓╓К╓н╓о, бГдЯ POP3 ╔в╔М╔х╔Ё╔К╓г╓╧. ╔Ф║╪╔╤ ppp ╓Р╩хмя╓╥╓ф╓╓╓К╬Л╧Г, /etc/ppp/ppp.linkup ╓к╟й╡╪╓н╓Х╓╕╓к╣╜╫р╓╧╓К╓х, ╔╓╔С╔©║╪╔м╔ц╔х╓хюэбЁ╓╛╢╟н╩╓╥╓©╩Чею╓г╪╚ф╟е╙╓к╔А║╪╔К╓Р╪Хфю╓╧╓К╓Х╓╕╓к╓й╓Й╓ч╓╧. MYADDR: !bg su user -c fetchmail ╔М║╪╔╚╔К╓г╓й╓╓╔╒╔╚╔╕╔С╔х╓к╔А║╪╔К╓РгшаВ╓╧╓К╓н╓к sendmail ╓Р╩хмя╓╥╓ф╓╓╓К╬Л╧Г(╦Е╫р), ╬Е╓к╪╗╓╥╓©╔╗╔С╔х╔Й╓н╦Е╓к !bg su user -c "sendmail -q" ╓Р╣╜╫р╓╥╓ч╓╧. ╓Ё╓Л╓о╔м╔ц╔х╔О║╪╔╞юэбЁ╓╛Ённ╘╓╥╓©╓И╓╧╓╟╓к sendmail ╓кн╞╓ц╓ф╓╓╓К mailqueue ╓Р╤╞ю╘е╙╓к╫ХмЩ╓╣╓╩╓К╓Х╓╕╓к╓╥╓ч╓╧. ╓Ё╓ннЦ╓г╓о, user ╓╛ bsd.home ╓к╔╒╔╚╔╕╔С╔х╓Р╩Щ╓а, bsd.home ╬Е╓н user ╓н╔ш║╪╔Ю╔г╔ё╔Л╔╞╔х╔Й╓к, ╟й╡╪╓н╓Х╓╕╓й .fetchmailrc ╔у╔║╔╓╔К╓╛╓д╓╞╓И╓Л╓ф╓╓╓К╓Ё╓х╓РашдЙ╓╥╓ф╓╓╓ч╓╧. poll myISP.com protocol pop3 fetchall pass MySecret; ╦ю╓╕╓ч╓г╓Б╓й╓╞, ╓Ё╓н╔у╔║╔╓╔К╓о user ╟йЁ╟╓н╔Ф║╪╔╤╓╛фи╓Ю╓Ё╓х╓╛╫пмХ╓й╓╓╓Х╓╕╓к╓╥╓й╓╞╓ф╓о╓й╓Й╓ч╓╩╓С. фБмф╓к╔я╔╧╔О║╪╔и MySecret ╓╛╢ч╓ч╓Л╓ф╓╓╓К╓╚╓И╓г╓╧. ю╣╓╥╓╓ from: ╔ь╔ц╔ю╓Р╓д╓╠╓ф╔А║╪╔К╓РаВ╓К╓©╓А╓к╓о, sendmail ╓к user@bsd.home ╓г╓о╓й╓╞ user@myISP.com ╓Р╩хмя╓╧╓К╓Х╓╕╤╣╓╗╓Ки╛мв╓╛╓╒╓Й╓ч╓╧. ╔А║╪╔К╓Р╓Х╓ЙаА╓╞е╬аВ╓╧╓К╓©╓А╓к, а╢╓ф╓н╔А║╪╔К╓Р relay.myISP.com ╓ьаВ╓К╓Х╓╕╓к sendmail ╓к ╩ь╪╗╓╥╓ф╓╙╓╞╓н╓Бни╓╓╓г╓╥╓Г╓╕. ╬Е╓нмв╥О╓РкЧ╓©╓╧╓к╓о, ╟й╡╪╓н╓Х╓╕╓й .mc ╔у╔║╔╓╔К╓╛е╛╓╥╓ф╓╓╓ч╓╧. VERSIONID(`bsd.home.mc version 1.0') OSTYPE(bsd4.4)dnl FEATURE(nouucp)dnl MAILER(local)dnl MAILER(smtp)dnl Cwlocalhost Cwbsd.home MASQUERADE_AS(`myISP.com')dnl FEATURE(allmasquerade)dnl FEATURE(masquerade_envelope)dnl FEATURE(nocanonify)dnl FEATURE(nodns)dnl define(`SMART_HOST', `relay.myISP.com') Dmbsd.home define(`confDOMAIN_NAME',`bsd.home')dnl define(`confDELIVERY_MODE', `deferred')dnl .mc ╔у╔║╔╓╔К╓╚╓И sendmail.cf ╓ь╓нйя╢╧йЩк║╓к╓д╓╓╓ф╓о, а╟╓н╔╩╔╞╔╥╔Г╔С╓Р╩╡╬х╓╥╓ф╓╞╓ю╓╣╓╓. sendmail.cf ╓Р╧╧©╥╓╥╓©╦Е╓к sendmail ╓Р╔Й╔╧╔©║╪╔х╓╧╓К╓н╓Б╓╙к╨╓Л╓й╓╞. ╓╥╓ч╓ц╓©! root ╓н╔я╔╧╔О║╪╔и╓Рк╨╓Л╓ф╓╥╓ч╓ц╓©! ╧╡╓ф╓й╓╓╓г╓╞╓ю╓╣╓╓! ц╠╓к╔╥╔╧╔ф╔Ю╓Р╨ф╣╞ф╟╓╥, ╔╥╔С╔╟╔К╔Ф║╪╔╤╔Б║╪╔и╓к╟э╓К╓©╓А╓к Boot: ╓хи╫╪╗╓╣╓Л╓К╔в╔М╔С╔в╔х╓г boot -s ╓хфЧно╓╥╓ф╓╞╓ю╓╣╓╓. (FreeBSD ╓н 3.2 ╓Х╓Йа╟╓н╔Й╔Й║╪╔╧╓г╓о -s╓х╓й╓Й╓ч╓╧. ) ╓и╓н╔╥╔╖╔К╓Р╩х╓╕╓н╓╚╓х╓╓╓╕╪алД╓к╓о, ENTER ╔╜║╪╓Р╡║╓╥╓ф╓╞╓ю╓╣╓╓. &prompt.root; ╓к╟э╓К╓Ё╓х╓╛╓г╓╜╓К╓г╓╥╓Г╓╕. mount -u / ╓хфЧно╓╥╓ф ╔К║╪╔х╔у╔║╔╓╔К╔╥╔╧╔ф╔Ю╓нфи╓ъ╫Я╓╜╓Р╨ф╔ч╔╕╔С╔х╓╥, mount -a ╓хфЧно╓╥╓ф, ╓╧╓ы╓ф╓н╔у╔║╔╓╔К╔╥╔╧╔ф╔Ю╓Р╔ч╔╕╔С╔х╓╥д╬╓╥╓©╦Е, passwd root ╓хфЧно╓╥╓ф root ╓н╔я╔╧╔О║╪╔и╓РюъдЙ╓╥д╬╓╥╓ф╓╞╓ю╓╣╓╓. ╓╫╓н╦Е, exit ╓хфЧно╓╧╓Л╓п, ╣╞ф╟╓╛бЁ╓╠╓И╓Л╓ч╓╧. Control-Alt-Delete ╓г╔╥╔╧╔ф╔Ю╓╛╨ф╣╞ф╟╓╥╓й╓╓╓Х╓╕╓к╓╧╓К╓к╓о╓и╓╕╓╧╓Л╓п╓╓╓╓? FreeBSD 2.2.7-RELEASE ╟й╧ъ╓г syscons(╔г╔у╔╘╔К╔х╓н╔Ё╔С╔╫║╪╔К╔и╔И╔╓╔п) ╓Р╩хмя╓╥╓ф╓╓╓К╬Л╧Г╓к╓о, ╪║╓н╧т╓Р╔╚║╪╔м╔К╔Ё╔С╔у╔ё╔╟╔Л║╪╔╥╔Г╔С╔у╔║╔╓╔К╓кди╡ц╓╥╓ф ╔╚║╪╔м╔К╓Р╨ф╧╫цш╓╥, ╔╓╔С╔╧╔х║╪╔К╓╥╓ф╓╞╓ю╓╣╓╓. options SC_DISABLE_REBOOT FreeBSD 2.2.5-RELEASE ╟й╧ъ╓г PCVT ╔Ё╔С╔╫║╪╔К╔и╔И╔╓╔п╓Р╩хмя╓╥╓ф╓╓╓К ╬Л╧Г╓к╓о, ф╠мм╓к╪║╓н╧т╓Р╔╚║╪╔м╔К╔Ё╔С╔у╔ё╔╟╔Л║╪╔╥╔Г╔С╔у╔║╔╓╔К╓кди╡ц╓╥╓ф ╔╚║╪╔м╔К╓Р╨ф╧╫цш╓╥, ╔╓╔С╔╧╔х║╪╔К╓╥╓ф╓╞╓ю╓╣╓╓. options PCVT_CTRL_ALT_DEL ╬Е╓к╓╒╓╡╓©╓Б╓н╓Х╓Й╓Б╦е╓╓ FreeBSD ╓н╬Л╧Г, ╦╫╨ъ╔Ё╔С╔╫║╪╔К╓╛╩хмя╓╥╓ф╓╓╓К╔╜║╪╔ч╔ц╔в╓Рйт╫╦╓╥, ╔╜║╪╔О║╪╔и boot ╓Р nop ╓к╫Я╓╜╢╧╓╗╓ф╓╞╓ю╓╣╓╓. /usr/share/syscons/keymaps/us.iso.kbd ╓к╓╒╓Й╓ч╓╧. ╓╫╓нйя╧╧╓Рх©╠г╓╣╓╩╓Х╓╕╓х╓╥╓ф, ╓Ё╓н╔╜║╪╔ч╔ц╔в╓н╔М║╪╔и╓Рлю╪╗е╙╓к╧т╓й╓╕╓©╓А╓к, /etc/rc.conf ╓Р╪б╧т╓╧╓ы╓╜╓╚╓Б╓╥╓Л╓ч╓╩╓С. ╓Б╓а╓М╓Сб╬╓н╧Я╓н╔╜║╪╔ч╔ц╔в╓Р╩х╓ц╓ф╓╓╓К╓н╓г╓╒╓Л╓п, бЕ╓О╓Й╓к╓╫╓н╔╜║╪╔ч╔ц╔в╔у╔║╔╓╔К╓Рйт╫╦╓╥╓ф╓╞╓ю╓╣╓╓. DOS ╓н╔ф╔╜╔╧╔х╔у╔║╔╓╔К╓Р UNIX ╓н╔ф╔╜╔╧╔х╔у╔║╔╓╔К╓кю╟╥а╓╧╓К╓к╓о╓и╓╕╓╧╓Л╓п╓╓╓╓? ц╠╓к╪║╓н perl ╔Ё╔ч╔С╔и╓Р╪б╧т╓╥╓ф╓╞╓ю╓╣╓╓. &prompt.user; perl -i.bak -npe 's/\r\n/\n/g' file ... file ╓ниТй╛╓к╓о╫ХмЩ╓╧╓К╔у╔║╔╓╔К╓Р╩ьдЙ╓╥╓ф╓╞╓ю╓╣╓╓. ю╟╥а╦Е╓н╔у╔║╔╓╔К╓о╦╣╓н╔у╔║╔╓╔Кл╬╓г╨Ню╝╓╣╓Л, ю╟╥аа╟╓н╔у╔║╔╓╔К╓о╔п╔ц╔╞╔╒╔ц╔в╓х╓╥╓ф╦╣╓н ╔у╔║╔╓╔Кл╬╓нкЖхЬ╓кЁхд╔╩р .bak ╓н╓д╓╠╓И╓Л╓©л╬а╟╓г╨Ню╝╓╣╓Л╓ч╓╧. ╓╒╓К╓╓╓о tr(1) ╔Ё╔ч╔С╔и╓Р╩х╓╕╓Ё╓х╓Б╓г╓╜╓ч╓╧. &prompt.user; tr -d '\r' < dos-text-file > unix-file dos-text-file ╓о DOS ╥а╪╟╓н╔ф╔╧╔х╔у╔║╔╓╔К, unix-file ╓к╓ойя╢╧╓╣╓Л╓©╫пно╓╛Ёйг╪╓╣╓Л╓ч╓╧. perl ╓Р╩х╓╕╓Х╓Й╓ш╓С╓н╓а╓Г╓ц╓т╓Йб╝╓╞╓й╓Й╓ч╓╧. л╬а╟╓г╩ьдЙ╓╥╓ф╔в╔М╔╩╔╧╓к╔╥╔╟╔й╔К╓РаВ╓К╓к╓о╓и╓╕╓╧╓Л╓п╓╓╓╓? killall(1) ╓Р╩х╓ц╓ф╓╞╓ю╓╣╓╓. su ╓╛ not in root's ACL ╓х╦ю╓ц╓ф╩Д╓Рг╨╓ч╓╩╓К╓н╓о╓й╓╪? Kerberos ╓нг╖╬з╔╥╔╧╔ф╔Ю╓╚╓И╓╞╓К╔╗╔И║╪╓г╓╧. ╓Ё╓нлДбЙ╓оцвл©е╙╓й╓Б╓н╓г╓о╓й╓╞, ╓╕╓ц╓х╓╙╓╥╓╓╓х╓╓╓ц╓©╓Б╓н╓г╓╧. su ╓к ╔╙╔в╔╥╔Г╔С╓Р╓д╓╠╓ф╣╞ф╟╓╧╓К╓╚, ╪║╓н╪алД╓гюБлю╓╣╓Л╓ф╓╓╓КйЩк║╓г Kerberos ╓Р╔╒╔С╔╓╔С╔╧╔х║╪╔К╓╥╓ф╓╞╓ю╓╣╓╓. Kerberos ╓Р╔╒╔С╔╓╔С╔╧╔х║╪╔К╓╧╓К╓к╓о╓и╓╕╓╧╓Л╓п╓╓╓╓╓н? ╔╥╔╧╔ф╔Ю╓╚╓И Kerberos ╓Р╨О╫Э╓╧╓К╓к╓о, ╓╒╓й╓©╓нф╟╓╚╓╥╓ф╓╓╓К╔Й╔Й║╪╔╧╓н bin ╔г╔ё╔╧╔х╔Й╔с╔Е║╪╔╥╔Г╔С╓Р╨ф╔╓╔С╔╧╔х║╪╔К╓╥╓ф╓╞╓ю╓╣╓╓. ╓Б╓╥ CDROM ╓Р╩Щ╓ц╓ф╓╓╓К╓н╓й╓И, ╓╫╓н CDROM ╓Р╔ч╔╕╔С╔х(╔ч╔╕╔С╔х╔щ╔╓╔С╔х╓о /cdrom ╓х╡╬дЙ)╓╥╓ф, ╪║╓н╓Х╓╕╓кфЧно╓╥╓ф╓╞╓ю╓╣╓╓. &prompt.root; cd /cdrom/bin &prompt.root; ./install.sh ╣©╩В╔©║╪╔ъ╔й╔К╓Рди╡ц╓╧╓К╓к╓о? telnet, ssh, X, screen ╓Р╓©╓╞╓╣╓СмЬмя╓╣╓Л╓ф╓╓╓К╬Л╧Г, ╣©╩В╔©║╪╔ъ╔й╔К╓╛б╜╓Й╓й╓╞╓й╓ц╓ф╓╓╓К╡дг╫ю╜╓╛╓╒╓Й╓ч╓╧. ╓Ё╓Л╓РаЩ╓Д╓╧╓к╓о╪║╓н╓Х╓╕╓к╓╥╓ч╓╧. ╪║╓н╧т╓Р╔╚║╪╔м╔К╔Ё╔С╔у╔ё╔╟╔Л║╪╔╥╔Г╔С╔у╔║╔╓╔К╓кди╡ц╓╥╓ф pseudo-device pty 256 ©╥╓©╓к╔╚║╪╔м╔К╓Р╨Н╓Й╔╓╔С╔╧╔х║╪╔К╓╥╓ч╓╧. ╪║╓н╔Ё╔ч╔С╔и╓Р╪б╧т╓╥╓ф &prompt.root; cd /dev &prompt.root; ./MAKEDEV pty{1,2,3,4,5,6,7} ©╥╓©╓й╔©║╪╔ъ╔й╔Кмя╓н 256 ╦д╓н╔г╔п╔╓╔╧╔н║╪╔и╓Р╨Н╓Й╓ч╓╧. /etc/ttys ╓Рйт╫╦╓╥ 256 ╦д╓н╔©║╪╔ъ╔й╔К╓╢╓х╓ндЙ╣а╓Рди╡ц╓╥╓ч╓╧. ╢Шб╦╓н╔╗╔С╔х╔Й║╪╓н╥а╪╟╓к╓╒╓О╓╩╓Ки╛мв╓╛╓╒╓К╓г╓╥╓Г╓╕. нЦ╓╗╓п╓Ё╓С╓й╢╤╓╦╓г╓╧. ttyqc none network ю╣╣╛и╫╦╫╓Р╩х╓ц╓©╩ьдЙ╓о tty[pqrsPQRS][0-9a-v] ╓х╓й╓Й╓ч╓╧. ©╥╓╥╓╓╔╚║╪╔м╔К╓г╔╥╔╧╔ф╔Ю╓Р╨ф╣╞ф╟╓╧╓К╓х╢╟н╩╓г╓╧. snd0 ╔г╔п╔╓╔╧╓Р╨Ню╝╓╧╓К╓Ё╓х╓╛╓г╓╜╓ч╓╩╓С! snd ╓х╓╓╓╕╔г╔п╔╓╔╧╓об╦╨ъ╓╥╓ч╓╩╓С. ╓Ё╓нл╬а╟╓о, FreeBSD ╔╣╔╕╔С╔и╔и╔И╔╓╔п╓к╓Х╓ц╓ф╨Ню╝╓╣╓Л╓К╓╣╓ч╓╤╓ч╓й╔г╔п╔╓╔╧, mixer ╓Д sequencer, dsp ╓й╓и╓РаМ╬н╓╥╓©╓Б╓н╓г╓╧. ╓Ё╓Л╓И╓н╔г╔п╔╓╔╧╓Р╨Ню╝╓╧╓К╓к╓о, ╪║╓н╓Х╓╕╓к╓╧╓Ки╛мв╓╛╓╒╓Й╓ч╓╧. &prompt.root; cd /dev &prompt.root; sh MAKEDEV snd0 ╨ф╣╞ф╟╓╩╓╨╓к╓Б╓╕╟Леы /etc/rc.conf ╓Рфи╓ъ╧Ч╓С╓г /etc/rc ╓РЁ╚╩о╓╣╓╩╓К╓к╓о? ╔╥╔С╔╟╔К╔Ф║╪╔╤╔Б║╪╔и╓к╟э╧т╓╥╓ф, ╔ч╔К╔а╔Ф║╪╔╤╔Б║╪╔и╓клА╓ц╓ф╓╞╓ю╓╣╓╓. ╔Ё╔С╔╫║╪╔К╓г╪║╓н╓Х╓╕╓к╪б╧т╓╥╓ч╓╧. &prompt.root; shutdown now(цМ: ╓Д ╓оиу╓╠╓ч╓╩╓С) &prompt.root; return &prompt.root; exit ╨╫╬Л(sandbox)╓х╓о╡©╓г╓╧╓╚? ╨╫╬Л(Sandbox) ╓х╓о╔╩╔╜╔Е╔Й╔ф╔ёмя╦Л╓н╟Л╓д╓г, ╪║╓нфС╓д╓н╟улё╓╛╓╒╓Й╓ч╓╧. ╟Л╓длэ╓о, ║ж╡╬аше╙╓й║ькийи║ы╓г╟о╓ч╓Л╓ф╓╓╓К╔в╔М╔╩╔╧║в╓г╓╧. ╓╫╓н║ькийи║ы╓о, ╓╫╓н╔в╔М╔╩╔╧╓к©╞фЧ╓╥╓©бХ╩╟╪т╓╛, ╓╣╓И╓к╔╥╔╧╔ф╔Ю╓н╧╜╓╓хо╟о╓к╠ф╤а╓Рм©╓╗╓К╓Ё╓х╓Рки╓╟╓Х╓╕╓кюъ╥в╓╣╓Л╓ч╓╧. ╓Ё╓н╔в╔М╔╩╔╧╓н©╤иЯ╓╓╓о, ║ькийи║ы╓нцФ╓ю╓╠╓кю╘╦б╓╣╓Л╓К, ╓хи╫╦╫╓г╓╜╓ч╓╧. ╓д╓ч╓Й, ╓Ё╓н╔в╔М╔╩╔╧╓к╓╙╓╓╓ф, ║ькийи║ы╓Р╠ш╓╗╓К╓Х╓╕╓й╔Ё║╪╔и╓н╪б╧т╓о ╓г╓╜╓й╓╓╓х╓╓╓╕╟улё╓г╓╧. ╓╫╓н╓©╓А, ╔Ё║╪╔и╓н╪б╧т╓к╓╙╓╠╓К╔╩╔╜╔Е╔Й╔ф╔ё╓о Ён╓╚╓й╓Б╓н╓г╓╒╓К╓хйщ╬з╓г╓╜, ╪б╧т╓н╬э╨ы╓йдиюв╓Р╧т╓й╓╕и╛мв╓о╓й╓╞╓й╓Й╓ч╓╧. ╓╫╓н║ькийи║ы╓х╓о, нЦ╓╗╓п╔Ф║╪╔╤ ID ╓╛╓╫╓Л╓к╓╒╓©╓К╓г╓╥╓Г╓╕. ╓Ё╓ндЙ╣а╓о, security(7) ╓Д named(8) ╓н╔ч╔к╔Е╔╒╔К╔з║╪╔╦╓гмя╓╓╓И╓Л╓ф╓╓╓ч╓╧. ntalk ╔╣║╪╔с╔╧(/etc/inetd.conf ╩╡╬х╓н╓Ё╓х)╓РнЦ╓к╓х╓ц╓ф╓ъ╓ч╓╧. ╓Ё╓н╔╣║╪╔с╔╧╓о╓╚╓д╓ф, ╪б╧т╩Ч╓н ╔Ф║╪╔╤ ID ╓х╓╥╓ф root ╓Рмя╓╓╓ф╓╓╓ч╓╥╓©╓╛, ╦╫╨ъ╓г╓о tty ╓х╓╓╓╕╔Ф║╪╔╤ ID ╓гф╟╨Н╓╥╓ч╓╧. ╔Ф║╪╔╤ tty ╓о, ntalk ╓Р╥пмЁ╓╥╓ф╔╥╔╧╔ф╔Ю╓н©╞фЧ╓кю╝╦Ы╓╥╓©бХ╩╟╪т╓╛ ╓╫╓н╔Ф║╪╔╤ ID ╟й╬Е╓н╦╒╦б╓Рфю╓К╓Ё╓х╓Р, ╓Х╓Й╟Лаь╨╓фЯ╓к╓╧╓К╓©╓А╓кюъ╥в╓╣╓Л╓©╨╫╬Л(sandbox)╓й╓н╓г╓╧. фС╓длэ╓о║ж╔╥╔ъ╔Е╔Л║╪╔х╓╣╓Л╓©╔ч╔╥╔С╓нфБб╕╓г╪б╧т╓╣╓Л╓К╔в╔М╔╩╔╧║в╓н╓Ё╓х╓г, ╓Ё╓а╓И╓о╓Х╓ЙцФЁке╙╓г╓╧. иАдл╓к╧м╓╗╓Л╓п, ╓╒╓К╔в╔М╔╩╔╧╓к©╞фЧ╓╧╓К╓Ё╓х╓╛╓г╓╜╓КбХ╩╟╪т╓о, ╔ч╔╥╔С╓н╓Х╓Й╧╜╓╓хо╟о╓к╓Б©╞фЧ╓г╓╜╓К╓х©╝╓╦╓К╓Б╓н╓й╓н╓г╓╧╓╛, ╓Ё╓н╪О╓н╔в╔М╔╩╔╧╓н╬Л╧Г, ╓╫╓Л╓о╪б╨щ╓к╓о╔╥╔ъ╔Е╔Л║╪╔х╓╣╓Л╓©╔ч╔╥╔С╓к ©╞фЧ╓╥╓©╓ю╓╠╓й╓н╓г, ╦╫╪б╓н╔г║╪╔©╓Рйя╧╧╓╧╓К╓Ё╓х╓о╡©╟Л╓д╓г╓╜╓ч╓╩╓С. ╓Ё╓Л╓Р╪б╦╫╓╧╓К╓©╓А╓н╨г╓Б╧╜╓╞мя╓╓╓И╓Л╓ф╓╓╓КйЩк║╓о, ╔╥╔ъ╔Е╔Л║╪╔х╓╣╓Л╓©╢д╤╜╓Р╔╣╔ж╔г╔ё╔Л╔╞╔х╔Й╓к╧╫цш╓╥, ╓╫╓н╔г╔ё╔Л╔╞╔х╔Й╓к chroot ╓╥╓ф, ╓╫╓н╔г╔ё╔Л╔╞╔х╔Й╓г ╔в╔М╔╩╔╧╓Р╪б╧т╓╧╓К╓Ё╓х(╓д╓ч╓Й, ╓╫╓н╔в╔М╔╩╔╧╓к╓х╓ц╓ф / ╓о ╔╥╔╧╔ф╔Ю╓н╪б╨щ╓н╔К║╪╔х╔г╔ё╔Л╔╞╔х╔Й / ╓г╓о╓й╓╞, chroot ╓╣╓Л╓©╔╣╔ж╔г╔ё╔Л╔╞╔х╔Й╓Р╩ь╓╧)╓г╓╧. ╧╜╓╞мя╓╓╓И╓Л╓ф╓╓╓К╓Б╓╕╟Л╓д╓нйЩк║╓╛╓╒╓Й╓ч╓╧. ╓╫╓Л╓о, ╢Ш╓кб╦╨ъ╓╥╓ф╓╓╓К╔у╔║╔╓╔К╔╥╔╧╔ф╔Ю╓Р фи╓ъ╧Ч╓ъюЛмя(read-only)╓г╔ч╔╕╔С╔х╓╥, ╓╫╓н╬Е╓к, ╓╒╓К╔в╔М╔╩╔╧╓кбп╓╥╓ф ╓╫╓н╔у╔║╔╓╔К╔╥╔╧╔ф╔Ю╓╛╫Я╓╜╧Ч╓ъ╡дг╫╓г╓╒╓К╓Х╓╕╓к╦╚╓╩╓К╓Х╓╕╓й, ╓Б╓╕╟Л╓д╓н╔у╔║╔╓╔К╔╥╔╧╔ф╔Ю╓наь╓Рмя╟у╓╧╓К╓Б╓н╓г╓╧. ╓╧╓К╓х, ╓╫╓н╔в╔М╔╩╔╧╓о╔у╔║╔╓╔К╓Р╫Я╓╜╧Ч╓Ю╓Ё╓х╓╛╓г╓╜╓К╓хг╖╪╠╓╥, ╪б╨щ╓к╫Я╓╜╧Ч╓Ю╓Ё╓х╓╛╓г╓╜╓К╓н╓Б╓╫╓нфцдЙ╓н╔в╔М╔╩╔╧╓ю╓╠ - ╔╥╔╧╔ф╔Ю╓к╓╒╓Кб╬╓н╔в╔М╔╩╔╧╓о╫Я╓╜╧Ч╓А╓й╓╓╓н╓кбп╓╥╓ф - ╓г╓╒╓К╓х╓╓╓╕╬У╤╥╓Р╪б╦╫╓╧╓К╓Ё╓х╓╛╓г╓╜╓ч╓╧. ╓Ё╓н╪О╓н╨╫╬Л(sandbox)╓о, ╓╫╓нхС╬О╓кф╘╡Ае╙╓йю╜╪а╓Р╩х╓ц╓ф, ╔Ф║╪╔╤(╓Б╓╥╓╞╓о©╞фЧ╪т)╓╛ ╓╫╓н╩Ж╪б╓к╣╓иу╓╚╓й╓╓╓Х╓╕╓к╪б╦╫╓╣╓Л╓ч╓╧. UNIX ╓о, фБиТе╙╓кфС╓д╓н╨╫╬Л(sandbox)╓Р╪баУ╓╥╓ф╓╓╓ч╓╧. ╟Л╓д╓о╔в╔М╔╩╔╧╔Л╔ы╔К╓н╓Б╓н, ╓Б╓╕╟Л╓д╓о╔Ф║╪╔╤ ID ╔Л╔ы╔К╓н╓Б╓н╓г╓╧. UNIX ╔в╔М╔╩╔╧╓оа╢╓ф, б╬╓н UNIX ╔в╔М╔╩╔╧╓╚╓И╢╟а╢╓кЁжн╔╓╣╓Л╓ф╓╓╓ч╓╧. ╓и╓н╔в╔М╔╩╔╧╓Б, б╬╓н╔в╔М╔╩╔╧╓н╔╒╔и╔Л╔╧╤У╢ж╓Рйя╧╧╓╧╓К╓Ё╓х╓о╓г╓╜╓ч╓╩╓С. ╓Ё╓Л╓о, ╓╒╓К╔в╔М╔╩╔╧╓╛б╬╓н╔в╔М╔╩╔╧╓н╔╒╔и╔Л╔╧╤У╢ж╓Р╬Е╫Я╓╜╓г╓╜╓К╓Х╓╕╓й, ╔╞╔И╔ц╔╥╔Е╓к╓д╓й╓╛╓К╧т╟ы╓╛мф╟в╓к╪б╦╫╓г╓╜╓К Windows ╓х╓оа╢╓╞╟ш╓й╓К╓Б╓н╓г╓╧. UNIX ╔в╔М╔╩╔╧╓о, фцдЙ╓н╔Ф║╪╔╤ ID ╓╛╫Йм╜╓╥╓ч╓╧. ╓Б╓╥, ╪б╧т╪т╓н╔Ф║╪╔╤ ID ╓╛ root ╔Ф║╪╔╤╓н╓Б╓н╓г╓й╓╠╓Л╓п, ╔Ф║╪╔╤ ID ╓о, б╬╓н╔Ф║╪╔╤╓╛╫Йм╜╓╧╓К╔в╔М╔╩╔╧╓╚╓И ╓╫╓н╔в╔М╔╩╔╧╓Р╪И╓К╣║г╫╓Р╡л╓©╓╧╓О╓╠╓г╓╧. ╓ч╓©, ╓╫╓н╔Ф║╪╔╤ ID ╓о, ╔г╔ё╔╧╔╞╬Е╓к╓╒╓К╔г║╪╔©╓Р йщ╦Н╓╧╓К╓н╓к╓Б╩х╓О╓Л╓ф╓╓╓ч╓╧. ╔у╔М╔ц╔т║╪╓Д CDROM ╓Дб╬╓н╔Й╔Ю║╪╔п╔ж╔К╔А╔г╔ё╔╒╓н╔ч╔╕╔С╔х╓Р╟Лхл╔Ф║╪╔╤║╪╓к╣Ж╡д╓╧╓К╓к╓о? ╟Лхл╔Ф║╪╔╤║╪╓г╓Б╔г╔п╔╓╔╧╓Р╔ч╔╕╔С╔х╓г╓╜╓К╓Х╓╕╓к╓╧╓К╓Ё╓х╓╛╓г╓╜╓ч╓╧. ╪Й╫Г╓о╪║╓н╓х╓╙╓Й╓г╓╧. root ╓к╓й╓ц╓ф, sysctl йя©Т╓г╓╒╓К vfs.usermount ╓Р 1 ╓кюъдЙ╓╥╓ч╓╧. &prompt.root; sysctl -w vfs.usermount=1 root ╓к╓й╓ц╓ф, ╔Й╔Ю║╪╔п╔ж╔К╔А╔г╔ё╔╒╓к╢ьо╒╓╧╓К╔ж╔М╔ц╔╞╔г╔п╔╓╔╧╓ке╛юз╓й╔я║╪╔ъ╔ц╔╥╔Г╔С╓РюъдЙ╓╥╓ч╓╧. нЦ╓х╓╥╓ф, ╨г╫И╓н╔у╔М╔ц╔т║╪╔г╔п╔╓╔╧╓Р╔Ф║╪╔╤║╪╓╛╔ч╔╕╔С╔х╓г╓╜╓К╓Х╓╕╓к╓╧╓К╓к╓о, ╪║╓н╓Х╓╕╓к╓╥╓ч╓╧. &prompt.root; chmod 666 /dev/fd0 operator ╔╟╔К║╪╔в╓к╫Йб╟╓╧╓К╔Ф║╪╔╤╓╛ CDROM ╔и╔И╔╓╔ж╓Р╔ч╔╕╔С╔х╓г╓╜╓К╓Х╓╕╓к╓╧╓К╓к╓о ╟й╡╪╓н╓Х╓╕╓к╓╥╓ч╓╧. &prompt.root; chgrp operator /dev/cd0c &prompt.root; chmod 640 /dev/cd0c ╨г╦Е╓к vfs.usermount=1 ╓х╓╓╓╕╧т╓Р /etc/sysctl.conf ╔у╔║╔╓╔К╓кди╡ц╓╥, ╔ж║╪╔х╩Ч╓к╔╩╔ц╔х╓╣╓Л╓К╓Х╓╕╓к╓╥╓ф╓╙╓╜╓ч╓╧. ╓Ё╓Л╓г, ╓╧╓ы╓ф╓н╔Ф║╪╔╤╓о ╔у╔М╔ц╔т║╪ /dev/fd0 ╓Р ╪╚©х╓н╫Йм╜╓╧╓К╔г╔ё╔Л╔╞╔х╔Й╓ь╔ч╔╕╔С╔х╓╧╓К╓Ё╓х╓╛╓г╓╜╓ч╓╧. &prompt.user; mkdir ~/my-mount-point &prompt.user; mount -t msdos /dev/fd0 ~/my-mount-point ╓Ё╓Л╓г, operator ╔╟╔К║╪╔в╓к╫Йб╟╓╧╓К╔Ф║╪╔╤╓о CDROM /dev/cd0c ╓Р ╪╚©х╓н╫Йм╜╓╧╓К╔г╔ё╔Л╔╞╔х╔Й╓ь╔ч╔╕╔С╔х╓╧╓К╓Ё╓х╓╛╓г╓╜╓ч╓╧. &prompt.user; mkdir ~/my-mount-point &prompt.user; mount -t msdos /dev/cd0c ~/my-mount-point ╔г╔п╔╓╔╧╓н╔╒╔С╔ч╔╕╔С╔х╓о╢йц╠╓г╓╧. &prompt.user; umount ~/my-mount-point ╓╥╓╚╓╥, vfs.usermount ╓Рм╜╦З╓к╓╧╓К╓Ё╓х╓о, ╔╩╔╜╔Е╔Й╔ф╔ё╬Е╓Х╓╓╓Ё╓х╓г╓о╓╒╓Й╓ч╓╩╓С. MSDOS ╥а╪╟╓н╔А╔г╔ё╔╒╓к╔╒╔╞╔╩╔╧╓к╓о, Ports ╔Ё╔Л╔╞╔╥╔Г╔С╓к╓╒╓К ╔я╔ц╔╠║╪╔╦ mtools ╓Р╩хмя╓╥╓©йЩ╓╛╓Х╓╓╓г╓╥╓Г╓╕. ╔╥╔╧╔ф╔Ю╓Р©╥╓╥╓╓╣ПбГ╔г╔ё╔╧╔╞╓ь╟э╓╧╓к╓о╓и╓╕╓╧╓К╓н╓г╓╧╓╚ ? ╟Лхжни╓╓╓н╓о©╥╓╥╓╓╔г╔ё╔╧╔╞╓к OS ╓Р╨ф╔╓╔С╔╧╔х║╪╔К╓╥╓ф, ╓╫╓Л╓╚╓И╔Ф║╪╔╤╔г║╪╔©╓Р╟э╓╧╓Ё╓х╓г╓╧. фц╓к╓╒╓й╓©╓╛ -stable ╓Р йё©Т╓н╔Й╔Й║╪╔╧╓Р╦ы╓╓╓гди╓╓Ёщ╓╠╓ф╓╓╓К╬Л╧Г╓к╓о╓Ё╓нйЩк║╓Р╓╙╓╧╓╧╓А╓╥╓ч╓╧. ╓╒╓й╓©╓о &man.boot0cfg.8; ╓Р╩х╓╕╓Ё╓х╓г booteasy ╓Рн╬йЩ╓н ╔г╔ё╔╧╔╞╓к╔╓╔С╔╧╔х║╪╔К╓г╓╜, ©╥╓╥╓╓гшцж╓гкЧб╜╓╥╓ф╓╓╓К╢ж ╔г╔Е╔╒╔К╔ж║╪╔х╓╛╓г╓╜╓ч╓╧. ╓Ё╓Л╓Р╧т╓ц╓©╓╒╓х╔г║╪╔©╓Р╟э╓╧ йЩк║╓Рц╣╓╧╓й╓И╪║╓нцймН╓офи╓ъхТ╓п╓╥╓ф╓╞╓ю╓╣╓╓. ╡©╓Б╓й╓╓╔г╔ё╔╧╔╞╓ь╔╓╔С╔╧╔х║╪╔К╓╥╓й╓╓╓Ё╓х╓к╥Х╓А╓©╓й╓И╓п /stand/sysinstall, ╓й╓Й &man.fdisk.8; ╓х &man.disklabel.8; ╓й╓Й╓Р╩х╓ц╓ф©╥╓╥╓╓╔г╔ё╔╧╔╞╓к ╔я║╪╔ф╔ё╔╥╔Г╔С╓х╔г╔ё╔╧╔╞╔И╔ы╔К╓Р╨Н╓И╓й╓╠╓Л╓п╓й╓Й╓ч╓╩╓С. ╓ч╓© &man.boot0cfg.8; ╓г booteasy ╓Рн╬йЩ╓н╔г╔ё╔╧╔╞╓к ╔╓╔С╔╧╔х║╪╔К╓╥╓ф, ╔Ё╔т║╪╓н╨Н╤х╓╛╫╙╓О╓ц╓©╓╒╓х╓к ╦е╓╓╔╥╔╧╔ф╔Ю╓╚╓И╓г╓Б©╥╓╥╓╓╔г╔ё╔╧╔╞╓╚╓И╓г╓Б╣╞ф╟╓г╓╜╓К╓Х╓╕╓к ╓╥╓ф╓╙╓╞и╛мв╓╛╓╒╓Й╓ч╓╧. ╓Ё╓н╨Н╤х╓н╬э╨ы╓о formatting-media tutorial ╓Р╦╚╓ф╓╞╓ю╓╣╓╓. ©╥╓╥╓╓╔г╔ё╔╧╔╞╓нн╘╓а╬Е╓╡╓╛╫╙╓О╓ц╓ф╔г║╪╔©╓н╟эф╟╓Р бт╓д╓п╓╚╓Й╓к╓й╓Й╓ч╓╥╓©. ╓╥╓╚╓╥хА╓╥╓╓╓╚╓й, л╣╟г╓Д╓©╓И╓х ╔Ё╔т║╪╓╧╓Л╓п╓╓╓╓╓х╓╓╓╕╓Б╓н╓г╓о╓╒╓Й╓ч╓╩╓С. ╔г╔п╔╓╔╧╔у╔║╔╓╔К (/dev) ╓Д╔╥╔С╔э╔Й╔ц╔╞╔Й╔С╔╞╓й╓и╓о ╪╨гт╓н╦╣╓к╓й╓Й╓ч╓╧. ╓Ё╓Л╓И╓РмЩ╡Р╓╧╓К╔д║╪╔К, ╓╧╓й╓О╓а &man.dump.8; ╓Д &man.tar.1; еЫ╓Р╩х╓╕и╛мв╓╛╓╒╓Й╓ч╓╧. ╓О╓©╓╥╓о╔г║╪╔©╓н╟эе╬╓Р╔╥╔С╔╟╔К╔Ф║╪╔╤╓г╧т╓╕╓Ё╓х╓Р╢╚╓А╓ч╓╧╓╛ юДбп╓х╦ю╓╕╓О╓╠╓г╓о╓╒╓Й╓ч╓╩╓С. ╓╒╓й╓©╓о &man.dump.8; ╓х &man.restore.8; ╟йЁ╟╓н╓Б╓н╓г root ╔у╔║╔╓╔К╔╥╔╧╔ф╔Ю╓Р╟э╧т╓╥╓ф╓о╓й╓Й╓ч╓╩╓С. &man.tar.1; ╔Ё╔ч╔С╔и╓г╓Б╓©╓ж╓С╓╕╓ч╓╞╧т╓╞╓г╓╥╓Г╓╕╓╛, ╓Д╓И╓й╓╓╓ш╓╕╓╛╓╓╓╓╓г╓╥╓Г╓╕. ╔я║╪╔ф╔ё╔╥╔Г╔С╟Л╓д╓Р ╓Б╓╕╟Л╓д╓н╓╚╓И╓н╔я║╪╔ф╔ё╔╥╔Г╔С╓к╟э╓╧╓х╓╜╓о &man.dump.8; ╓х &man.restore.8; ╩х╓╕╓ы╓╜╓г╓╧. ╔я║╪╔ф╔ё╔╥╔Г╔С╓н╔г║╪╔©╓Р©╥╓╥╓╓╔я║╪╔ф╔ё╔╥╔Г╔С╓к╟э╓╧╓н╓к dump ╓Р╩х╓╕╓Д╓ЙйЩ╓о╟й╡╪╓ндл╓Й╓г╓╧. ©╥╓╥╓╓╔я║╪╔ф╔ё╔╥╔Г╔С╓к newfs ╓Р╓╚╓╠╓К. ╓╫╓Л╓Р╩цдЙе╙╓й╔ч╔╕╔С╔х╔щ╔╓╔С╔х╓к╔ч╔╕╔С╔х╓╧╓К. ╓╫╓н╔г╔ё╔Л╔╞╔х╔Й╓к cd. ╦е╓╓╔я║╪╔ф╔ё╔╥╔Г╔С╓Р dump ╓╥, ╓╫╓н╫пно╓Р╔я╔╓╔в╓г©╥╓╥╓╓йЩ╓ь. ╓©╓х╓╗╓п root ╓Р /dev/ad1s1a ╓ь, ╩цдЙе╙╓й╔ч╔╕╔С╔х╔щ╔╓╔С╔х╓Р /mnt ╓х╓╥╓ф╟э╓╫╓╕╓х╓╧╓К╓х╟й╡╪╓н╓Х╓╕╓к╓й╓Й╓ч╓╧. &prompt.root; newfs /dev/ad1s1a &prompt.root; mount /dev/ad1s1a &prompt.root; cd /mnt &prompt.root; dump 0uaf - / | restore xf - ╓Б╓╥╔я║╪╔ф╔ё╔╥╔Г╔С╓н╧╫ю╝╓Рйя╓╗╓Х╓╕╓х╩в╓ц╓ф╓╓╓К╓й╓И - ╓д╓ч╓Й╟Л╓д╓ю╓ц╓©╓Б╓н╓РфС╓д╓к╓╥╓©╓ЙфС╓д╓ю╓ц╓©╓Б╓н╓Р╓╞╓ц╓д╓╠╓©╓Й ╓╥╓Х╓╕╓х╓╥╓ф╓╓╓К╓й╓И, ╪╚а╟╓г╓╒╓К╔г╔ё╔Л╔╞╔х╔Й╟й╡╪╓н╓╧╓ы╓ф╓Р ©╥╓╥╓╓╬Л╫Й╓ь╟э╓╧и╛мв╓╛╫п╓ф╓╞╓К╓╚╓Бцн╓Л╓ч╓╩╓С. &man.dump.8; ╓о ╔у╔║╔╓╔К╔╥╔╧╔ф╔Ю╓кф╞╓╞╓н╓г╓Ё╓нлэе╙╓к╓о╩х╓╗╓ч╓╩╓С. ╓Ё╓н╬Л╧Г╓о &man.tar.1; ╓Р╩х╓╓╓ч╓╧. ╟Лхл╓к /old ╓╚╓И /new ╓ь╓н╟эф╟╓о &man.tar.1; ╓г ╟й╡╪╓н╓Х╓╕╓к╓╥╓ч╓╧. &prompt.root; (cd /old; tar cf - .) | (cd /new; tar xpf -) /old ╓кб╬╓н╔у╔║╔╓╔К╔╥╔╧╔ф╔Ю╓╛ ╔ч╔╕╔С╔х╓╣╓Л╓ф╓╓╓ф, ╓╫╓н╔г║╪╔©╓н╟эф╟╓ч╓г╓о╧м╓╗╓ф╓й╓╓╓й╓И╓п ╨г╫И╓н &man.tar.1; ╓к 'l' ╔у╔И╔╟╓Рди╡ц╓╥╓ч╓╧. &prompt.root; (cd /old; tar clf - .) | (cd /new; tar xpf -). tar ╓н╓╚╓О╓Й╓к cpio(1) ╓Д pax(1), cpdup (ports/sysutils/cpdup) еЫ╓Р ╩х╓ц╓ф╓Б╧╫╓╓╓ч╓╩╓С. ╔╥╔╧╔ф╔Ю╓Р╨г©╥╓н -STABLE ╓к╔╒╔ц╔в╔г║╪╔х╓╥╓Х╓╕╓х╓╥╓©╓н╓г╓╧╓╛ -RC ╓Д -BETA ╓к╓й╓ц╓ф╓╥╓ч╓╓╓ч╓╥╓©! ╡©╓╛╣╞╓Ё╓ц╓©╓н╓г╓╧╓╚? ц╩╓╓еЗ╓╗: ╓©╓ю╓нл╬а╟╓г╓╧. RC ╓о ╔Й╔Й║╪╔╧╦УйД (Release Candidate) ╓к мЁмХ╓╧╓К╓Б╓н╓г, ╔Й╔Й║╪╔╧╓╛╢ж╤А╓г╓╒╓К╓Ё╓х╓Р╟улё╓╥╓ч╓╧. ╓ч╓©, FreeBSD ╓к╓╙╓╠╓К -BETA ╓одл╬О, ╔Й╔Й║╪╔╧а╟╓н╔Ё║╪╔и╔у╔Й║╪╔╨╢Э╢ж╓кфЧ╓ц╓ф╓╓╓К╓х╓╓╓╕╟улё╓к╓й╓Й╓ч╓╧. д╧╓╓еЗ╓╗: FreeBSD ╓о╓╫╓н╔Й╔Й║╪╔╧╓Р 2 ╔Ж╫Й╓╒╓К╓╕╓а╓н ╟ЛйЩ╓╚╓Игию╦╓╣╓╩╓ч╓╧. 3.0-RELEASE ╓Д 4.0-RELEASE ╓нмм╓й (0 ╓н╔ч╔╓╔й║╪хж╧Ф╓Р╩Щ╓д) ╔А╔╦╔Ц║╪╔Й╔Й║╪╔╧╓о, ╟Лхл╓к -CURRENT ╓х╦ф╓п╓Л╓К Ё╚х╞хг╓нн╝╓Л╓╚╓Ий╛╢Т╓╣╓╩╓И╓Л╓ф╓г╓╜╓ч╓╧. 3.1-RELEASE ╓Д 4.2-RELEASE ╓й╓и╓н╔ч╔╓╔й║╪╔Й╔Й║╪╔╧╓о╔╒╔╞╔ф╔ё╔ж╓й -STABLE ╔ж╔И╔С╔а (╩ч) ╓н ╔╧╔й╔ц╔в╔╥╔Г╔ц╔х╓г╓╧. ╔Й╔Й║╪╔╧╓Р╨Н╓К╩Ч╓к╓й╓К╓х╓╫╓Л╓Рй╛╢Т╓╣╓╩╓К╔ж╔И╔С╔а╓о фцдЙ╓н╔в╔М╔╩╔╧╓ьфмфЧ╓╥╓ч╓╧. ╓╫╓н╔в╔М╔╩╔╧╓н╟Л╓д╓о ╔Ё║╪╔и╔у╔Й║╪╔╨ (╔Ё║╪╔и╓неЮ╥К) ╓г╓╧. ╔Ё║╪╔и╔у╔Й║╪╔╨╓╛ ╩о╓ч╓К╓х, ╓╫╓н╔ж╔И╔С╔а╓нл╬а╟╓╛╔Й╔Й║╪╔╧╓к╓й╓М╓╕╓х╓╥╓ф╓╓╓К╓Ё╓х╓Р х©╠г╓╧╓К╓Б╓н╓кйя╓╗╓И╓Л╓ч╓╧. ╓©╓х╓╗╓п, 4.0-STABLE ╓х ╦ф╓п╓Л╓ф╓╓╓©╔ж╔И╔С╔а╓ол╬а╟╓╛ 4.1-BETA ╓ь╓х йя╓╗╓И╓Л, ╔Ё║╪╔и╔у╔Й║╪╔╨╓х╔Й╔Й║╪╔╧а╟╓н╔ф╔╧╔х╓╛ ╩о╓ч╓ц╓©╓Ё╓х╓Р╪╗╓╥╓ч╓╧. ╔п╔╟╓н╫╓ю╣╓о╔Й╔Й║╪╔╧╓н╟ЛиТ╓х╓╥╓ф╔Ё╔ъ╔ц╔х╓╣╓Л╓ч╓╧. ╔╫║╪╔╧╔Ё║╪╔и╓╛╔Й╔Й║╪╔╧╓н╥а╓Р╪Х╓ц╓©╓й╓Ил╬а╟╓╛ 4.1-RC ╓ь╓х йя╓╗╓И╓Л, ╓╫╓Л╓╚╓И╔Й╔Й║╪╔╧╓╛╨Н╓И╓Л╓К╓Ё╓х╓Р╪╗╓╥╓ч╓╧. ╓р╓х╓©╓с RC ╓н╔╧╔ф║╪╔╦╓к╓й╓ц╓ф╓╥╓ч╓╕╓х, х╞╦╚╓╣╓Л╓© ╓Б╓ц╓х╓Бцвл©е╙╓й╔п╔╟╓н╫╓ю╣╓╥╓╚╓г╓╜╓й╓╞╓й╓Й╓ч╓╧. ╓р╓х╓©╓с╔Й╔Й║╪╔╧╓╛ (╓Ё╓ннЦ╓г╓о 4.1-RELEASE) ╨Н╓И╓Л╓Л╓п, ╓╫╓н╔ж╔И╔С╔а╓о 4.1-STABLE ╓х╡Чл╬╓╣╓Л╓ч╓╧. ©╥╓╥╓╓╔╚║╪╔м╔К╓РфЧ╓Л╓Х╓╕╓х╓╥╓©╓н╓г╓╧╓╛, chflags ╓к╪╨гт╓╥╓ч╓╧. ╓и╓╕╓╧╓Л╓пни╓╓╓н╓г╓╥╓Г╓╕? ╢йц╠╓й╡СеЗ: б©й╛, ╔╩╔╜╔Е╔╒╔Л╔ы╔К╓╛ 0 ╓Х╓ЙбГ╓╜╓╞╓й╓ц╓ф╓╓╓К╓н╓г╓╥╓Г╓╕. д╬юэ╔╥╔С╔╟╔К╔Ф║╪╔╤╔Б║╪╔и╓г╨ф╣╞ф╟╓╥╓ф, ╔╚║╪╔м╔К╓Р╔╓╔С╔╧╔х║╪╔К╓╥╓ф╓╞╓ю╓╣╓╓. ╬э╓╥╓╓╡СеЗ: FreeBSD ╓г╓о, ╔╩╔╜╔Е╔╒╔Л╔ы╔К╓╛ 0 ╓Х╓ЙбГ╓╜╓╓╬Л╧Г, ╔╥╔╧╔ф╔Ю╔у╔И╔╟╓нйя╧╧╓╛╤ь╩ъ╓╣╓Л╓ч╓╧. ╦╫╨ъ╓н╔╩╔╜╔Е╔╒╔Л╔ы╔К╓о, ╪║╓н╔Ё╔ч╔С╔и╓Р╩х╓ц╓фд╢╓ы╓К╓Ё╓х╓╛╓г╓╜╓ч╓╧. &prompt.root; sysctl kern.securelevel ╔╩╔╜╔Е╔╒╔Л╔ы╔К╓Р╡╪╓╡╓КаЮ╨Н╓о, ╓г╓╜╓й╓╓╓Х╓╕╓к╓й╓ц╓ф╓╓╓ч╓╧. ╓╫╓н╓©╓А, ╔╚║╪╔м╔К╓Р╔╓╔С╔╧╔х║╪╔К╓╧╓К╓к╓о, ╔╥╔С╔╟╔К╔Ф║╪╔╤╔Б║╪╔и╓г╣╞ф╟╓╧╓К╓╚, /etc/rc.conf ╓н╔╩╔╜╔Е╔Й╔ф╔ёюъдЙ╓Рйя╧╧╓╥╓ф╨ф╣╞ф╟╓╧╓Ки╛мв╓п╓╒╓Й╓ч╓╧. ╔╩╔╜╔Е╔╒╔Л╔ы╔К╓н╬э╨ы╓о &man.init.8; ╓Р, rc.conf ╓н╬э╨ы╓о /etc/defaults/rc.conf ╓╙╓Х╓с, &man.rc.conf.5; ╓н╔ч╔к╔Е╔╒╔К╔з║╪╔╦╓Р╓╢мВ╓╞╓ю╓╣╓╓. ╔╥╔╧╔ф╔Ю╓н╩Ч╧О╓Р 1 иц╟й╬Ейя╧╧╓╧╓К╓Ё╓х╓╛╓г╓╜╓й╓╓╓н╓г╓╧! ╓и╓╕╓╧╓Л╓пни╓╓╓н╓г╓╥╓Г╓╕? ╢йц╠╓й╡СеЗ: б©й╛, ╔╩╔╜╔Е╔╒╔Л╔ы╔К╓╛ 1 ╓Х╓ЙбГ╓╜╓╞╓й╓ц╓ф╓╓╓К╓н╓г╓╥╓Г╓╕. д╬юэ╔╥╔С╔╟╔К╔Ф║╪╔╤╔Б║╪╔и╓г╨ф╣╞ф╟╓╥╓ф, ╩Ч╧О╓нйя╧╧╓Р╓╥╓ф╓╞╓ю╓╣╓╓. ╬э╓╥╓╓╡СеЗ: FreeBSD ╓г╓о, ╔╩╔╜╔Е╔╒╔Л╔ы╔К╓╛ 1 ╓Х╓ЙбГ╓╜╓╓╬Л╧Г, 1 иц╟й╬Е╓н╩Ч╧Ойя╧╧╓╛╤ь╩ъ╓╣╓Л╓ч╓╧. ╦╫╨ъ╓н╔╩╔╜╔Е╔╒╔Л╔ы╔К╓о, ╪║╓н╔Ё╔ч╔С╔и╓Р╩х╓ц╓фд╢╓ы╓К╓Ё╓х╓╛╓г╓╜╓ч╓╧. &prompt.root; sysctl kern.securelevel ╔╩╔╜╔Е╔╒╔Л╔ы╔К╓Р╡╪╓╡╓КаЮ╨Н╓о, ╓г╓╜╓й╓╓╓Х╓╕╓к╓й╓ц╓ф╓╓╓ч╓╧. ╓╫╓н╓©╓А, ╔╥╔╧╔ф╔Ю╓н╩Ч╧О╓Рйя╧╧╓╧╓К╓к╓о, ╔╥╔С╔╟╔К╔Ф║╪╔╤╔Б║╪╔и╓г╣╞ф╟╓╧╓К╓╚, /etc/rc.conf ╓н╔╩╔╜╔Е╔Й╔ф╔ёюъдЙ╓Рйя╧╧╓╥╓ф╨ф╣╞ф╟╓╧╓Ки╛мв╓п╓╒╓Й╓ч╓╧. ╔╩╔╜╔Е╔╒╔Л╔ы╔К╓н╬э╨ы╓о &man.init.8; ╓Р, rc.conf ╓н╬э╨ы╓о /etc/defaults/rc.conf ╓╙╓Х╓с, &man.rc.conf.5; ╓н╔ч╔к╔Е╔╒╔К╔з║╪╔╦╓Р╓╢мВ╓╞╓ю╓╣╓╓. &man.rpc.statd.8; ╓к╔А╔Б╔Й╔Й║╪╔╞╓Р╦╚╓д╓╠╓ч╓╥╓©! ╔А╔Б╔Й╓Р 256 ╔А╔╛╔п╔╓╔х╓Б╩х╓ц╓ф╓╓╓ч╓╧. ╓╓╓╓╓╗. ╓╫╓Л╓о╔А╔Б╔Й╔Й║╪╔╞╓г╓о╓╒╓Й╓ч╓╩╓С╓╥, 256 ╔А╔╛╔п╔╓╔х╓н╔А╔Б╔Й╓Р╩х╓ц╓ф╓╓╓К, ╓х╓╓╓╕╓Ё╓х╓г╓Б╓╒╓Й╓ч╓╩╓С. ╓╙╓╫╓И╓╞ (╓ш╓х╓С╓и╓н╬Л╧Г), ╫ХмЩ╓кет╧Г╓╛ни╓╓╓Х╓╕╓кхС╬О╓к╓©╓╞╓╣╓С╓ннл╓н╔А╔Б╔Й╓Р ╓╫╓н╔в╔М╔╩╔╧╓н╔╒╔и╔Л╔╧╤У╢ж╓к╔ч╔ц╔т╔С╔╟╓╥╓ф╓╓╓К╓н╓г╓╥╓Г╓╕. ╣╩╫яе╙╓й╦╚цо╓╚╓И╧м╓╗╓ф╓Б, ╓Ё╓Л╓обГ╓╜╓йЁ╡╓╛╓╒╓К╓Ё╓х╓г╓о╓й╓╞, ц╠╓к &man.top.1; ╓Д &man.ps.1; ╓х╓╓╓ц╓©╔д║╪╔К╓ни╫╪╗╓к╠ф╤а╓╛╓╒╓КдЬеы╓г╓╧. &man.rpc.statd.8; ╓о, (/var ╓к╓╒╓К) ╔╧╔ф║╪╔©╔╧╔у╔║╔╓╔К╓Р╪╚й╛╓н╔╒╔и╔Л╔╧╤У╢ж╓к╔ч╔ц╔т╔С╔╟╓╥╓ч╓╧. ╔ч╔ц╔т╔С╔╟╓о, ╦Е╓гбГ╓╜╓й╤У╢ж╓╛и╛мв╓к╓й╓ц╓©╩Ч╓к╨ф╔ч╔ц╔т╔С╔╟╓╥╓й╓╓╓г╨я╓Ю╓Х╓╕, хС╬О╓кбГ╓╜╓й╔╣╔╓╔╨╓Р╩ьдЙ╓╥╓ф╧т╓й╓О╓Л╓ч╓╧. ╓Ё╓Л╓о, ╔╫║╪╔╧╔Ё║╪╔и╓к╢ч╓ч╓Л╓К &man.mmap.2; ╢ь©Т╓н╔ч╔ц╔т╔С╔╟д╧╓Р╪╗╓╧╟З©Т╓к 0x10000000 ╓╛╩ьдЙ╓╣╓Л╓ф╓╓╓К╓Ё╓х╓╚╓И╓Бй╛╓╚╓Й╓ч╓╧. ╓Ё╓н©Т╩З╓╛ IA32 ╔╒║╪╔╜╔ф╔╞╔а╔Ц╓н╩Щ╓д╔╒╔и╔Л╔╧╔╧╔з║╪╔╧а╢бн╓н 16 й╛╓н 1, ╓╧╓й╓О╓а, ╓а╓Г╓╕╓и 256 ╔А╔╛╔п╔╓╔х╓каЙеЖ╓╧╓К╓н╓г╓╧. X Window System ╓х╡╬аш╔Ё╔С╔╫║╪╔К лУ: ╨ёлН ╦╣г╥ motoyuki@jp.FreeBSD.org, 1997 г╞ 11 ╥Н 13 фЭ. X ╓Рф╟╓╚╓╥╓©╓╓╓н╓г╓╧╓╛, ╓и╓╕╓╧╓Л╓п╓╓╓╓╓н╓г╓╧╓╚? ╓Б╓ц╓х╓Б╢йц╠╓ййЩк║╓о FreeBSD ╓н╔╓╔С╔╧╔х║╪╔К╓н╨щ╓к X ╓Рф╟╓╚╓╧╓Ё╓х╓Р╩ьдЙ╓╧╓К╓ю╓╠╓г╓╧. ╓╫╓Л╓╚╓И xf86config ╔д║╪╔К╓н╔и╔╜╔Е╔А╔С╔х╓Рфи╓С╓г╓Ё╓Л╓к╫╬╓ц╓ф╓╞╓ю╓╣╓╓. ╓Ё╓н╔д║╪╔К╓о╓╒╓й╓©╓н╔╟╔И╔у╔ё╔ц╔╞╔╚║╪╔и╓Д╔ч╔╕╔╧╓й╓и╓к╧Г╓О╓╩╓ф XFree86(tm) ╓нюъдЙ╓Р╧т╓╕╓н╓Р╫У╓╠╓ф╓╞╓Л╓ч╓╧. Xaccel ╔╣║╪╔п║╪╓к╓д╓╓╓фд╢╓ы╓ф╓ъ╓К╓н╓Б╓╓╓╓╓г╓╥╓Г╓╕. ╬э╓╥╓╞╓о Xi Graphics ╓к╓д╓╓╓ф ╓╚ Metro Link ╓Р╓╢мВ╓╞╓ю╓╣╓╓. X ╓Р╪б╧т╓╥╓Х╓╕╓х╓╥╓ф startx ╓хфЧно╓╥╓©╓н╓г╓╧╓╛, KDENABIO failed (Operation not permitted) ╓х╓╓╓╕╔╗╔И║╪╓╛и╫╪╗╓╣╓Л╓ч╓╧. ╡©╓╚╓╙╓╚╓╥╓й╓Ё╓х╓Р╓Д╓ц╓ф╓╥╓ч╓ц╓©╓С╓г╓╥╓Г╓╕╓╚? ╓╒╓й╓©╓н╔╥╔╧╔ф╔Ю╓о╧Б╓╓╔╩╔╜╔Е╔╒╔Л╔ы╔К╓г╠©мя╓╣╓Л╓ф╓╓╓ч╓╧╓м? ╪б╓о, ╧Б╓╓╔╩╔╜╔Е╔╒╔Л╔ы╔К╓г X ╓Р╣╞ф╟╓╧╓К╓Ё╓х╓о╓г╓╜╓й╓╓╓н╓г╓╧. ╓и╓╕╓╥╓ф╓й╓н╓╚╓к╓д╓╓╓ф╓о, &man.init.8; ╓н╔ч╔к╔Е╔╒╔К╔з║╪╔╦╓к╫Я╓╚╓Л╓ф╓╓╓ч╓╧. ╓г╓о, бЕ╓О╓Й╓к╓и╓╕╓╧╓Л╓пни╓╓╓н╓╚╓╙еЗ╓╗╓╥╓ч╓╥╓Г╓╕. ╢Пкэе╙╓к 2 ╓д╓нйЩк║╓╛╓╒╓Й╓ч╓╧. ╟Л╓д╓о╔╩╔╜╔Е╔╒╔Л╔ы╔К╓Р 0 ╓к╓╧╓К (дл╬О, ╓Ё╓Л╓о /etc/rc.conf ╓г╩ьдЙ╓╥╓ч╓╧) ╓Ё╓х, ╓Б╓╕╟Л╓д╓о╣╞ф╟╩Ч (╔╩╔╜╔Е╔╒╔Л╔ы╔К╓Р╬Е╓╡╓Ка╟) ╓к &man.xdm.1; ╓Р╪б╧т╓╧╓К╓╚╓г╓╧. ╣╞ф╟╩Ч╓к &man.xdm.1; ╓Р╪б╧т╓╧╓КйЩк║╓н╬э╨ы╓к╓д╓╓╓ф╓о, ╓Р╩╡╬х╓╥╓ф╓╞╓ю╓╣╓╓. ╩Д╓н╔ч╔╕╔╧╓о╓й╓╪ X ╓гф╟╓╚╓й╓╓╓н╓г╓╥╓Г╓╕╓╚? syscons (╔г╔у╔╘╔К╔х╓н╔Ё╔С╔╫║╪╔К╔и╔И╔╓╔п) ╓Р╩х╓ц╓ф╓╓╓К╓н╓г╓╒╓Л╓п, ╓╫╓Л╓╬╓Л╓н╡╬аш╔╧╔╞╔Й║╪╔С╓г╔ч╔╕╔╧╔щ╔╓╔С╔©║╪╓Р╔╣╔щ║╪╔х╓╧╓К╓Х╓╕╓к FreeBSD ╓РюъдЙ╓г╓╜╓ч╓╧. X ╓г╓н╔ч╔╕╔╧╓н╬вфм╓РхР╓╠╓К╓©╓А╓к, syscons ╓о /dev/sysmouse ╓х╓╓╓╕╡╬аш╔г╔п╔╓╔╧╓Р╔╣╔щ║╪╔х╓╥╓ф╓╓╓ч╓╧. кэй╙╓н╔ч╔╕╔╧╔г╔п╔╓╔╧╓╚╓ИфЧно╓╣╓Л╓©а╢╓ф╓н╔ч╔╕╔╧╓н╔╓╔ы╔С╔х╓о, moused ╓Р╥пмЁ╓╥╓ф sysmouse ╔г╔п╔╓╔╧╓ь╫пно╓╣╓Л╓ч╓╧. ╟Л╓д╟й╬Е╓н╡╬аш╔Ё╔С╔╫║╪╔К╓х X ╓н н╬йЩ╓г ╔ч╔╕╔╧╓Р╩х╓╓╓©╓╓╬Л╧Г, ╓Р╩╡╬х╓╥╓ф moused ╓РюъдЙ╓╥╓ф╓╞╓ю╓╣╓╓. ╓╫╓╥╓ф, /etc/XF86Config ╓Рйт╫╦╓╥, ╪║╓н╓Х╓╕╓к╫Я╓╚╓Л╓ф╓╓╓К╓Ё╓х╓РЁнг╖╓╥╓ф╓╞╓ю╓╣╓╓. Section Pointer Protocol "SysMouse" Device "/dev/sysmouse" ..... ╬Е╓ннЦ╓о, XFree86 3.3.2 ╟й╧ъ╓н╬Л╧Г╓ннЦ╓г╓╧. ╓╫╓Л╓Х╓Йа╟╓н╔п║╪╔╦╔Г╔С╓г╓о, Protocol ╓х╓╓╓╕иТй╛╓Р MouseSystems ╓хцж╓╜╢╧╓╗╓Ки╛мв╓╛╓╒╓Й╓ч╓╧. X ╓г /dev/mouse ╓Р╩х╓╕╓н╓Р╧╔╓Ю©м╓Б╓╓╓ч╓╧. ╓Ё╓н╬Л╧Г╓о, /dev/mouse ╓Р /dev/sysmouse ╓к╔Й╔С╔╞╓╥╓ф╓╞╓ю╓╣╓╓. &prompt.root; cd /dev &prompt.root; rm -f mouse &prompt.root; ln -s sysmouse mouse ╓О╓©╓╥╓н╔ч╔╕╔╧╓к╓о╔ш╔╓║╪╔К╣║г╫╓╛иу╓╓╓ф╓╓╓К╓н╓г╓╧╓╛, X ╓г╩х╓╕╓Ё╓х╓о╓г╓╜╓ч╓╧╓╚? ╓о╓╓, ╓Б╓а╓М╓С╩х╓╗╓ч╓╧╓╛, ╓╫╓н╓©╓А╓к╓о X ╔╞╔И╔╓╔╒╔С╔х╔в╔М╔╟╔И╔Ю╓Ре╛юз╓кюъдЙ╓╧╓Ки╛мв╓╛╓╒╓Й╓ч╓╧. ╓Ё╓Л╓к╓д╓╓╓ф╓о, Colas Nahaboo ╩А╓н╔╕╔╖╔ж╔з║╪╔╦(http://www.inria.fr/koala/colas/mouse-wheel-scroll/) ╓Р╩╡╬х╓╥╓ф╓╞╓ю╓╣╓╓. imwheel ╓х╓╓╓╕╔в╔М╔╟╔И╔Ю╓Р╩х╓╕╬Л╧Г╓о, ╪║╓н╓Х╓╕╓й╢йц╠╓й╪Й╫Г╓к╓╥╓©╓╛╓ц╓ф╓╞╓ю╓╣╓╓. ╔ш╔╓║╪╔К╔╓╔ы╔С╔х╓нйя╢╧ imwheel ╓о, ╔ч╔╕╔╧╓н╔э╔©╔С 4, ╔э╔©╔С 5 ╓Р╔╜║╪╡║╡╪╔╓╔ы╔С╔х╓кйя╢╧╓╧╓К╔в╔М╔╟╔И╔Ю╓г╓╧. ╓╫╓н╓©╓А╔ш╔╓║╪╔К╔ч╔╕╔╧╓гмЬмя╓╧╓К╓к╓о, ╔ч╔╕╔╧╔ш╔╓║╪╔К╓н╔╓╔ы╔С╔х╓Р╔э╔©╔С 4, ╔э╔©╔С 5 ╓н╔╓╔ы╔С╔х╓кйя╢╧╓╧╓К╔ч╔╕╔╧╔и╔И╔╓╔п╓РмЬмя╓╧╓Ки╛мв╓╛╓╒╓Й╓ч╓╧. ╓Ё╓нйя╢╧╓Р╧т╓й╓╕╓к╓офС╓д╓нйЩк║╓╛╓╒╓Й╓ч╓╧. ╟Л╓д╓о &man.moused.8; ╓г╧т╓й╓╕йЩк║, фС╓д╓А╓о X ╔╣║╪╔п╪╚©х╓кйя╢╧╓Р╧т╓й╓О╓╩╓КйЩк║╓г╓╧. ╔ш╔╓║╪╔К╔╓╔ы╔С╔х╓нйя╢╧╓к &man.moused.8; ╓Р╩х╓╕ &man.moused.8; ╓к╔╓╔ы╔С╔х╓Рйя╢╧╓╣╓╩╓К╓к╓о, &man.moused.8; ╣╞ф╟╩Ч╓к╔╙╔в╔╥╔Г╔С ╓Рди╡ц╓╥╓ч╓╧. ╓©╓х╓╗╓п, иАцй &man.moused.8; ╓Р moused -p /dev/psm0 ╓х╓╥╓ф╣╞ф╟╓╥╓ф╓╓╓К╓й╓И, ╓╫╓нбЕ╓О╓Й╓к moused -p /dev/psm0 -z 4 ╓х╓╥╓ч╓╧. ╓Б╓╥, /etc/rc.conf ╓Р╩х╓ц╓ф╪╚ф╟е╙╓к╣╞ф╟╓╧╓К╓Х╓╕╓кюъдЙ╓╥╓ф╓╓╓К╓й╓И, /etc/rc.conf ╓нцФ╓н moused_flags ╓х╓╓╓╕йя©Т╓к ╓Рди╡ц╓╧╓К╓ю╓╠╓г╓╧. ╓╫╓╥╓ф, 5 ╔э╔©╔С╔ч╔╕╔╧╓Р╩х╓╕╓Ё╓х╓Р X ╔╣║╪╔п╓кеа╓╗╓Ки╛мв╓╛╓╒╓Й╓ч╓╧. ╓Ё╓Л╓Р╧т╓й╓╕╓к╓о /etc/XF86Config ╓н Pointer ╔╩╔╞╔╥╔Г╔С╓к Buttons 5 ╓х╓╓╓╕╧т╓Рди╡ц╓╧╓К╓ю╓╠╓г╓╧. ╓╫╓╕╓╧╓К╓х /etc/XF86Config ╓н Pointer ╓о, ╓©╓х╓╗╓п╪║╓н╓Х╓╕╓к╓й╓К╓г╓╥╓Г╓╕. moused ╓к╓Х╓Кйя╢╧╓РмЬмя╓╥╓ф╔ш╔╓║╪╔К╔ч╔╕╔╧╓Р╩хмя╓╧╓К╓©╓А╓н XF86Config ╓н <quote>Pointer</quote> ╔╩╔╞╔╥╔Г╔С╓нюъдЙнЦ Section "Pointer" Protocol "SysMouse" Device "/dev/sysmouse" Buttons 5 EndSection X ╔╣║╪╔п╓Р╩х╓ц╓©╔ш╔╓║╪╔К╔╓╔ы╔С╔х╓нйя╢╧ &man.moused.8; ╓Р╣╞ф╟╓╥╓ф╓╓╓й╓╚╓ц╓©╓Й, ╔ш╔╓║╪╔К╔╓╔ы╔С╔х╓нйя╢╧╓к &man.moused.8; ╓Р╣╞ф╟╓╥╓©╓╞╓й╓╓╬Л╧Г╓к╓о, ╓╫╓нбЕ╓О╓Й╓к X ╔╣║╪╔п╓Р╩х╓╕╓Ё╓х╓╛╓г╓╜╓ч╓╧. ╓Ё╓Л╓к╓о, /etc/XF86Config ╔у╔║╔╓╔К╓Р╫Я╓╜╢╧╓╗╓Ки╛мв╓╛╓╒╓Й╓ч╓╧. ╓ч╓╨╨г╫И╓ки╛мв╓й╓н╓о, ╔ч╔╕╔╧╓╛╓и╓н╔в╔М╔х╔Ё╔К╓Р╩х╓ц╓ф╓╓╓К╓н╓╚╓РЁнг╖╓╧╓К╓Ё╓х╓г╓╧. ╓ш╓х╓С╓и╓н╔ш╔╓║╪╔К╔ч╔╕╔╧╓о IntelliMouse ╔в╔М╔х╔Ё╔К╓Р╩хмя╓╥╓ф╓╓╓ч╓╧╓╛, XFree86 ╔╣║╪╔п╓о╓╫╓нб╬╓н╔в╔М╔х╔Ё╔К, ╓©╓х╓╗╓п Logitech MouseMan+ ╔ч╔╕╔╧╓╛мЬмя╓╥╓ф╓╓╓К MouseManPlusPS/2 ╔в╔М╔х╔Ё╔К╓й╓и╓Б╔╣╔щ║╪╔х╓╥╓ф╓╓╓ч╓╧. ╩хмя╓╣╓Л╓ф╓╓╓К╔в╔М╔х╔Ё╔К╓╛Ёнг╖╓г╓╜╓©╓И Pointer ╔╩╔╞╔╥╔Г╔С╓к Protocol ╓н╧т╓Рди╡ц╓╥╓ф╓╞╓ю╓╣╓╓. ╓д╓╝╓к, ╔ш╔╓║╪╔К╓н╔╧╔╞╔М║╪╔К╔╓╔ы╔С╔х╓Р╔ч╔╕╔╧╔э╔©╔С 4, ╔ч╔╕╔╧╔э╔©╔С 5 ╓кЁД╓ЙеЖ╓ф╓К╓Ё╓х╓Р X ╔╣║╪╔п╓кеа╓╗╓ч╓╧. ╓Ё╓Л╓Р╧т╓й╓╕╓к╓о ZAxisMapping ╔╙╔в╔╥╔Г╔С╓Р╩хмя╓╥╓ч╓╧. ╓©╓х╓╗╓п, &man.moused.8; ╓╛╣╞ф╟╓╥╓ф╓╓╓й╓╓╬Убж╓г, PS/2 ╔ч╔╕╔╧╔щ║╪╔х╓к IntelliMouse ╓╛юэбЁ╓╣╓Л╓ф╓╓╓К╓х╓╥╓©╓И /etc/XF86Config ╓о╓╙╓╫╓И╓╞╪║╓н╓Х╓╕╓к╓й╓Й╓ч╓╧. X ╔╣║╪╔п╓к╓Х╓Кйя╢╧╓РмЬмя╓╥╓ф╔ш╔╓║╪╔К╔ч╔╕╔╧╓Р╩хмя╓╧╓К╓©╓А╓н XF86Config ╓н <quote>Pointer</quote> ╔╩╔╞╔╥╔Г╔С╓нюъдЙнЦ Section "Pointer" Protocol "IntelliMouse" Device "/dev/psm0" ZAxisMapping 4 5 EndSection imwheel ╓н╔╓╔С╔╧╔х║╪╔К ╓╣╓ф, ╓д╓╝╓к Ports Collection ╓╚╓И imwheel ╓Р╔╓╔С╔╧╔х║╪╔К╓╥╓ч╓╧. ╓Ё╓Л╓╛╓╒╓К╓н╓о x11 ╔╚╔ф╔╢╔Й╓г╓╧. ╓Ё╓н╔в╔М╔╟╔И╔Ю╓о, ╔ч╔╕╔╧╔╓╔ы╔С╔х╓Р╔╜║╪╔э║╪╔и╔╓╔ы╔С╔х╓кйя╢╧╓╥╓ч╓╧. ╓©╓х╓╗╓п, ╔ч╔╕╔╧╔ш╔╓║╪╔К╓Ра╟╓к╡С╓╥╓©╩Ч, imwheel ╓о PageUp ╓Р╔╒╔в╔Й╔╠║╪╔╥╔Г╔С╔в╔М╔╟╔И╔Ю╓каВ╓К╓Х╓╕╓йф╟╨Н╓Р╓╧╓К╓О╓╠╓г╓╧. Imwheel ╓о╔ш╔╓║╪╔К╔╓╔ы╔С╔х╓х╔╜║╪╔э║╪╔и╡║╡╪╓нбп╠Ч╓РюъдЙ╔у╔║╔╓╔К╓Р╩х╓ц╓фюъдЙ╓╧╓К╓©╓А, ╔╒╔в╔Й╔╠║╪╔╥╔Г╔СкХ╓к╟ш╓й╓Кбп╠Ч╓Р╩Щ╓©╓╩╓К╓Ё╓х╓Б╡дг╫╓г╓╧. imwheel ╓н╔г╔у╔╘╔К╔х╓нюъдЙ╔у╔║╔╓╔К╓о /usr/X11R6/etc/imwheelrc ╓к╔╓╔С╔╧╔х║╪╔К╓╣╓Л╓ч╓╧. ╓Ё╓Л╓Р ~/.imwheelrc ╓к╔Ё╔т║╪╓╥╓фйт╫╦╓╥, ╓╙╧╔╓╜╓й╓Х╓╕╓к imwheel ╓гмЬмя╓╥╓©╓╓╔╒╔в╔Й╔╠║╪╔╥╔Г╔С╓нюъдЙ╓Р╔╚╔╧╔©╔ч╔╓╔╨╓╥╓ф╓╞╓ю╓╣╓╓. юъдЙ╔у╔║╔╓╔К╓н╫Я╪╟╓о &man.imwheel.1; ╓кюБлю╓╣╓Л╓ф╓╓╓ч╓╧. Emacs ╓г Imwheel ╓Р╩х╓╕╓Х╓╕╓кюъдЙ╓╧╓К (и╛©э╓г╓о╓╒╓Й╓ч╓╩╓С) emacs ╓Д Xemacs ╓гмЬмя╓╧╓К╓к╓о, ~/.emacs ╓к╓╓╓╞╓И╓╚╫Я╓╜╡ц╓╗╓Ки╛мв╓╛╓╒╓Й╓ч╓╧. emacs ╓н╬Л╧Г╓о╪║╓ниТй╛╓Рди╡ц╓╥╓ф╓╞╓ю╓╣╓╓. <application>Imwheel</application> ╓РмЬмя╓╧╓К╓©╓А╓н <application>Emacs</application> ╓нюъдЙнЦ ;;; For imwheel (setq imwheel-scroll-interval 3) (defun imwheel-scroll-down-some-lines () (interactive) (scroll-down imwheel-scroll-interval)) (defun imwheel-scroll-up-some-lines () (interactive) (scroll-up imwheel-scroll-interval)) (global-set-key [?\M-\C-\)] 'imwheel-scroll-up-some-lines) (global-set-key [?\M-\C-\(] 'imwheel-scroll-down-some-lines) ;;; end imwheel section Xemacs ╓н╬Л╧Г╓о ~/.emacs ╓к╪║╓ниТй╛╓Рди╡ц╓╥╓ф╓╞╓ю╓╣╓╓. <application>Imwheel</application> ╓РмЬмя╓╧╓К╓©╓А╓н <application>XEmacs</application> ╓нюъдЙнЦ ;;; For imwheel (setq imwheel-scroll-interval 3) (defun imwheel-scroll-down-some-lines () (interactive) (scroll-down imwheel-scroll-interval)) (defun imwheel-scroll-up-some-lines () (interactive) (scroll-up imwheel-scroll-interval)) (define-key global-map [(control meta \))] 'imwheel-scroll-up-some-lines) (define-key global-map [(control meta \()] 'imwheel-scroll-down-some-lines) ;;; end imwheel section Imwheel ╓н╪б╧т ╔╓╔С╔╧╔х║╪╔К╓╛╢╟н╩╓╥╓ф╓╓╓Л╓п, ц╠╓к xterm(лУцМ: фЭкэ╦Л╢д╤╜╓г╧╜╓╞╩х╓О╓Л╓ф╓╓╓К kterm ╓г╓Б╧╫╓╓╓ч╓╩╓С)╓╚╓И imwheel ╓РфЧно╓╧╓К╓ю╓╠╓г╣╞ф╟╓г╓╜╓ч╓╧. ╣╞ф╟╓╧╓К╓х╔п╔ц╔╞╔╟╔И╔╕╔С╔и╓гф╟╨Н╓╥, ╓╧╓╟╓кмЬмя╓г╓╜╓ч╓╧. imwheel ╓Р╓╓╓д╓Б╩х╓╕╓Х╓╕╓кюъдЙ╓╧╓К╓к╓о, .xinitrc ╓╚ .xsession ╓н╔у╔║╔╓╔К╓к╓╫╓н╓ч╓ч╔Ё╔ч╔С╔и╓Рди╡ц╓╥╓ф╓╞╓ю╓╣╓╓. imwheel ╓╛ PID ╔у╔║╔╓╔К╓к╢ь╓╧╓К╥ы╧П╓Ри╫╪╗╓╧╓К╓╚╓Бцн╓Л╓ч╓╩╓С╓╛, л╣╩К╓╥╓ф╓Б╢М╦╠╓о╓╒╓Й╓ч╓╩╓С. ╓Ё╓н╥ы╧П╓╛╟улё╓Р╩Щ╓д╓н╓о, Linux хг╓н imwheel ╓ю╓╠╓г╓╧. X ╓н╔А╔к╔Е║╪╓Д╔ю╔╓╔╒╔М╔╟╔э╔ц╔╞╔╧╓╛╓╕╓ч╓╞ф╟╓╜╓ч╓╩╓С. Num Lock ╔╜║╪╓Р╔╙╔у╓к╓╥╓ф╓╞╓ю╓╣╓╓. Num Lock ╔╜║╪╓╛╔г╔у╔╘╔К╔х╓г╣╞ф╟╩Ч╓к╔╙╔С╓к╓й╓К╬Л╧Г╓о, XF86Config ╔у╔║╔╓╔К╓н Keyboard ╔╩╔╞╔╥╔Г╔С╓к╟й╡╪╓н╧т╓Р╡ц╓╗╓ф╓Б╓╓╓╓╓г╓╥╓Г╓╕. # Let the server do the NumLock processing. This should only be # required when using pre-R6 clients ServerNumLock лУцМ ╓Ё╓нлДбЙ╓о XFree86 3.2 ╟й╧ъ╓г╓о╡Р╥Х╓╥╓ф╓╓╓ч╓╧. ╡╬аш╔Ё╔С╔╫║╪╔К╓х╓о╡©╓г╓╧╓╚? ╓и╓╕╓Д╓ц╓©╓И╩х╓╗╓ч╓╧╓╚? ╡╬аш╔Ё╔С╔╫║╪╔К╓о, ╢йц╠╓к╓╓╓╕╓х, ╔м╔ц╔х╔О║╪╔╞╓Д X ╓Рф╟╓╚╓╧╓й╓и╓нйё╩╗╓й╓Ё╓х╓Р╧т╓й╓О╓╨╓к, ╓╓╓╞╓д╓╚╓н╔╩╔ц╔╥╔Г╔С╓Рф╠╩Ч╓к╧т╓й╓╕╓Ё╓х╓Р╡дг╫╓к╓╥╓ч╓╧. ╔╥╔╧╔ф╔Ю╓н╔╧╔©║╪╔х╩Ч╓к╓о, ╣╞ф╟╔А╔ц╔╩║╪╔╦╓╛╫п╓©╦Е╓к login ╔в╔М╔С╔в╔х╓╛и╫╪╗╓╣╓Л╓ч╓╧. ╓╫╓Ё╓г ╔М╔╟╔╓╔Сл╬╓х╔я╔╧╔О║╪╔и╓РфЧно╓╧╓К╓х 1 хжлэ╓н╡╬аш╔Ё╔С╔╫║╪╔К╬Е╓г╩е╩Ж(╓╒╓К╓╓╓ом╥╓с)╓Р╩о╓А╓К╓Ё╓х╓╛╓г╓╜╓ч╓╧. б╬╓н╔╩╔ц╔╥╔Г╔С╓Р╩о╓А╓©╓╓╬Л╧Г╓Б╓╒╓К╓г╓╥╓Г╓╕. ╓╫╓Л╓оф╟╓╚╓╥╓ф╓╓╓К╔в╔М╔╟╔И╔Ю╓н╔и╔╜╔Е╔А╔С╔х╓Р╦╚╓©╓Й, FTP ╓не╬аВ╓╛╫╙╓О╓К╓ч╓гбт╓д╢ж, ╔А║╪╔К╓Рфи╓Б╓╕╓х╓╥╓©╓Й╓╧╓К╓Ё╓х╓╚╓Б╓╥╓Л╓ч╓╩╓С. Alt-F2 ╓Р╡║╓╧(Alt ╔╜║╪╓Р╡║╓╥╓й╓╛╓И F2 ╔╜║╪╓Р╡║╓╧) ╓х, 2 хжлэ╓н║ж╡╬аш╔Ё╔С╔╫║╪╔К║в╓г ╔М╔╟╔╓╔С╔в╔М╔С╔в╔х╓╛бт╣║╓╥╓ф╓╓╓К╓Ё╓х╓╛╓О╓╚╓Й╓ч╓╧. ╨г╫И╓н╔╩╔ц╔╥╔Г╔С╓клА╓Й╓©╓╓╓х╓╜╓о Alt-F1 ╓Р╡║╓╥╓ч╓╧. и╦╫Ю╓н FreeBSD╔╓╔С╔╧╔х║╪╔К╓г╓о, 3 кГ(3.3-RELEASE ╓г╓о 8 кГ)╓н╡╬аш╔Ё╔С╔╫║╪╔К╓╛м╜╦З╓к╓й╓ц╓ф╓╓╓ф, Alt-F1, Alt-F2, Alt-F3 ╓г╡╬аш╔Ё╔С╔╫║╪╔К╢ж╓нюзбь╓╗╓Р╧т╓й╓╓╓ч╓╧. ╓Х╓Йб©╓╞╓н╡╬аш╔Ё╔С╔╫║╪╔К╓Рм╜╦З╓к╓╧╓К╓к╓о, /etc/ttys ╓Рйт╫╦╓╥╓ф Virtual terminals ╓н╔Ё╔А╔С╔х╧т╓н╦Е╓к ttyv4 ╓╚╓И ttyvc ╓н╪Йа╟╓ч╓г╓н╔╗╔С╔х╔Й╓Р╡ц╓╗╓ч╓╧(╟й╡╪╓ннЦ╓оюХф╛╓к╓о╤УгР╓офЧ╓Й╓ч╓╩╓С). # /etc/ttys ╓к╓о ttyv3 ╓╛╓╒╓Й╓ч╓╧╓н╓г # "off" ╓Р "on" ╓кйя╧╧╓╥╓ч╓╧. ttyv3 "/usr/libexec/getty Pc" cons25 on secure ttyv4 "/usr/libexec/getty Pc" cons25 on secure ttyv5 "/usr/libexec/getty Pc" cons25 on secure ttyv6 "/usr/libexec/getty Pc" cons25 on secure ttyv7 "/usr/libexec/getty Pc" cons25 on secure ttyv8 "/usr/libexec/getty Pc" cons25 on secure ttyv9 "/usr/libexec/getty Pc" cons25 on secure ttyva "/usr/libexec/getty Pc" cons25 on secure ttyvb "/usr/libexec/getty Pc" cons25 on secure б©╓╞╓╧╓К╓╚╬╞╓й╓╞╓╧╓К╓╚╓о╓╒╓й╓©╓н╪╚мЁ╓г╓╧. ╓Х╓Йб©╓╞╓н╡╬аш╔©║╪╔ъ╔й╔К╓Р╩х╓╕╓х╓Х╓Йб©╓╞╓н╔Й╔╫║╪╔╧╓Р╩х╓╕╓Ё╓х╓к╓й╓Й╓ч╓╧. 8MB ╟й╡╪╓н╔А╔Б╔Й╓╥╓╚╓й╓╓╬Л╧Г╓о╓Ё╓Л╓о╫емв╓йлДбЙ╓г╓╧. ╓Б╓╥и╛мв╓╛╓╒╓Л╓п secure ╓Р insecure ╓кйя╧╧╓╥╓ф╓╞╓ю╓╣╓╓. X ╓Р╩х╓╓╓©╓╓╓н╓г╓╒╓Л╓п, ╨гдЦ╟Л╓д╓н╡╬аш╔©║╪╔ъ╔й╔К(╓н╔╗╔С╔х╔Й)╓Р╩х╓О╓╨╓к╩д╓╥╓ф╓╙╓╞╓╚, off ╓к╓╥╓ф╓╙╓╞и╛мв╓╛╓╒╓Й╓ч╓╧. ╓д╓ч╓Й, 12 ╦д╓н Alt-╔у╔║╔С╔╞╔╥╔Г╔С╔╜║╪а╢╓ф╓г╔М╔╟╔╓╔С╔в╔М╔С╔в╔х╓Р ╫п╓╥╓©╓╓╓н╓й╓И╓п, ╩дг╟╓й╓╛╓И X ╓омЬмя╓г╓╜╓й╓╓╓х╓╓╓╕╓Ё╓х╓г╓╧. ф╠╓╦╔ч╔╥╔С╓г X ╔╣║╪╔п║╪╓Бф╟╓╚╓╥╓©╓╓╓н╓й╓И╓п 11 ╦д╓╥╓╚╩х╓╗╓ч╓╩╓С. ╡╬аш╔Ё╔С╔╫║╪╔К╓Рл╣╦З╓к╓╧╓К╓Б╓ц╓х╓Б╢йц╠╓ййЩк║╓о, ╔Ё╔С╔╫║╪╔К╓Р off ╓к╓╧╓К╓Ё╓х╓г╓╧. нЦ╓╗╓п 12 ╦да╢╓ф╓н╔©║╪╔ъ╔й╔К╓РЁД╓ЙеЖ╓ф╓ф╓╓╓К╬Убж╓г X ╓Рф╟╓╚╓╥╓©╓╓╓х╓╜╓о, ╡╬аш╔©║╪╔ъ╔й╔К 12 ╓Рйя╧╧╓╥╓ч╓╧. ttyvb "/usr/libexec/getty Pc" cons25 on secure ╓Ё╓Л╓Р╪║╓н╓Х╓╕╓кйя╧╧╓╥╓ч╓╧. ttyvb "/usr/libexec/getty Pc" cons25 off secure ╔╜║╪╔э║╪╔и╓к╔у╔║╔С╔╞╔╥╔Г╔С╔╜║╪╓╛ 10 ╦д╓╥╓╚╓й╓╓╓н╓г╓╒╓Л╓п, ╪║╓н╓Х╓╕╓кюъдЙ╓╥╓ч╓╧. ttyv9 "/usr/libexec/getty Pc" cons25 off secure ttyva "/usr/libexec/getty Pc" cons25 off secure ttyvb "/usr/libexec/getty Pc" cons25 off secure (╓Ё╓Л╓И╓н╧т╓Р╬ц╓╧╓ю╓╠╓г╓Б╓╓╓╓╓г╓╧.) /etc/ttys ╓Рйт╫╦╓╥╓©╓И, ╪║╓о╫╫й╛╓й©Т╓н╡╬аш╔©║╪╔ъ╔й╔К╔г╔п╔╓╔╧╓Р╨Н╓И╓й╓╞╓ф╓о╓й╓Й╓ч╓╩╓С. ╓Б╓ц╓х╓Б╢йц╠╓ййЩк║╓Р╪╗╓╥╓ч╓╧. &prompt.root; cd /dev &prompt.root; ./MAKEDEV vty12(12 ╦д╓н╔г╔п╔╓╔╧╓Р╓д╓╞╓К╬Л╧Г) ╓╣╓ф, ╡╬аш╔Ё╔С╔╫║╪╔К╓Рм╜╦З╓к╓╧╓К╓Б╓ц╓х╓Б╢йц╠(╓╫╓╥╓фЁн╪б)╓ййЩк║╓о, ╨ф╣╞ф╟╓╧╓К╓Ё╓х╓г╓╧. ╓╥╓╚╓╥, ╨ф╣╞ф╟╓╥╓©╓╞╓й╓╓╬Л╧Г╓о, X ╔╕╔ё╔С╔и╔╕╔╥╔╧╔ф╔Ю╓Р╫╙н╩╓╣╓╩╓ф╪║╓нфБмф╓Р(root ╦╒╦б╓г)╪б╧т╓╥╓ч╓╧. &prompt.root; kill -HUP 1 ╫емв╓йею╓о, ╓Ё╓н╔Ё╔ч╔С╔и╓Р╪б╧т╓╧╓Ка╟╓к X ╔╕╔ё╔С╔и╔╕╔╥╔╧╔ф╔Ю╓Р╢╟а╢╓к╫╙н╩╓╣╓╩╓ф╓╙╓╞╓Ё╓х╓г╓╧. ╓Б╓╥╓╫╓╕╓╥╓й╓╓╓х kill ╔Ё╔ч╔С╔и╓Р╪б╧т╓╥╓©╦Е, ╔╥╔╧╔ф╔Ю╓о╓╙╓╫╓И╓╞╔о╔С╔╟╔╒╔ц╔в╓╧╓К╓г╓╥╓Г╓╕. X ╓╚╓И╡╬аш╔Ё╔С╔╫║╪╔К╓кюзбь╓╗╓К╓к╓о╓и╓╕╓╧╓Л╓п╓Х╓╓╓н╓г╓╧╓╚? ╡╬аш╔Ё╔С╔╫║╪╔К╓ьлА╓К╓к╓о Ctrl Alt Fn ╓Р╩х╓ц╓ф╓╞╓ю╓╣╓╓. ╨г╫И╓н╡╬аш╔Ё╔С╔╫║╪╔К╓ь╓о Ctrl Alt F1 ╓глА╓Л╓ч╓╧. ╔ф╔╜╔╧╔х╔Ё╔С╔╫║╪╔К╓ь╟э╓ц╓©╦Е╓о, ╓╫╓нцФ╓г╟эф╟╓╧╓К╓н╓к ╨ёеы╓о╓╓╓д╓Б╓и╓╙╓Й Alt Fn ╓Р╩х╓ц╓ф╓╞╓ю╓╣╓╓. X ╓н╔╩╔ц╔╥╔Г╔С╓ьлА╓К╓к╓о X ╓наЖ╓ц╓ф╓╓╓К╡╬аш╔Ё╔С╔╫║╪╔К╓ь юз╓Йбь╓╗╓Ки╛мв╓╛╓╒╓Й╓ч╓╧. ╓Б╓╥╓╒╓й╓©╓╛ X ╓Р╔Ё╔ч╔С╔и╔И╔╓╔С╓╚╓И ╪б╧т╓╥╓ф╓╓╓©╓н╓г╓╒╓Л╓п (╓©╓х╓╗╓п startx ╓Р╩х╓╕) X ╓н╔╩╔ц╔╥╔Г╔С╓о╓╫╓Л╓Р╪б╧т╓╥╓©╔ф╔╜╔╧╔х╔Ё╔С╔╫║╪╔К╓г╓о╓й╓╞ ╨г╫И╓н╩х╓О╓Л╓ф╓╓╓й╓╓╡╬аш╔Ё╔С╔╫║╪╔К╓кЁД╓ЙеЖ╓ф╓И╓Л╓ф╓╓╓К╓о╓╨╓г╓╧. ╓╒╓й╓©╓╛╡╬ашц╪кЖ╓Р 8 ╦дмя╟у╓╥╓ф╓╓╓К╬Л╧Г╓о X ╓Р 9 хжлэ╓н ╔Ё╔С╔╫║╪╔К╓к╓╓╓К╓о╓╨╓г, Alt F9 ╓Р╩х╓╕╓Ё╓х╓к╓й╓Й╓ч╓╧. лУцМ X ╓клА╓К╓к╓о, 3 кГ╓н╡╬аш╔Ё╔С╔╫║╪╔К╓╛м╜╦З╓к╓й╓ц╓ф╓╓╓К╬Л╧Г╓о Alt-F4 ╓г╓╧. м╜╦З╓й╡╬аш╔Ё╔С╔╫║╪╔К╓н©Т +1 ╓н╔у╔║╔С╔╞╔╥╔Г╔С╔╜║╪╓н ╟лцж╓к X ╓╛ЁД╓ЙеЖ╓ф╓И╓Л╓ч╓╧. XDM ╓Р╣╞ф╟╩Ч╓к╣╞ф╟╓╣╓╩╓К╓к╓о╓и╓╕╓╥╓ч╓╧╓╚? xdm ╓н╣╞ф╟йЩк║╓к╓д╓╓╓ф, ╓╫╓н╧м╓╗йЩ╓к╓офС╓д╓нн╝ги╓╛╓╒╓Й╓ч╓╧. ╓╒╓Кн╝ги╓г╓одС╤║╓╣╓Л╓©нЦ╓Р╩хмя╓╥╓ф xdm ╓Р /etc/ttys ╓╚╓И╣╞ф╟╓╥, б╬╓нн╝ги╓г╓о xdm ╓Рц╠╓к rc.local ╓ч╓©╓о /usr/local/etc/rc.d ╓к╓╒╓К X.sh ╔╧╔╞╔Й╔в╔х╓╚╓И╣╞ф╟╓╥╓ч╓╧. ╓и╓а╓И╓Бю╣╓╥╓╞, йрйЩ╓╛ф╟╨Н╓╥╓й╓╓╬Л╧Г╓о, ╓Б╓╕йрйЩ╓╛ф╟╨Н╓╧╓К╓г╓╥╓Г╓╕. ╓и╓а╓И╓Б╬Л╧Г╓г╓Б╥К╡л╓оф╠╓╦╓г╓╒╓Й, X ╓о╔╟╔И╔у╔ё╔╚╔К╓й login: ╔в╔М╔С╔в╔х╓Ри╫╪╗╓╥╓ч╓╧. ttys ╓РмЬмя╓╧╓КйЩк║╓нмЬею╓о, ╓и╓н vty ╓г X ╓╛╣╞ф╟╓╥╓©╓╚╓н╣╜о©╓╛╩д╓╩╓К╓Ё╓х╓х, ╔М╔╟╔╒╔╕╔х╩Ч╓к X ╔╣║╪╔п╓Р╨ф╣╞ф╟╓╧╓Кюуг╓╓Р init ╓к╡║╓╥╓д╓╠╓К╓Ё╓х╓╛╓г╓╜╓К╓Ё╓х╓г╓╥╓Г╓╕. rc.local ╓╚╓И╔М║╪╔и╓╣╓Л╓К╬Л╧Г, xdm ╓о╟З©Т╓Р╩Щ╓©╓╨╓к(╓╧╓й╓О╓а, ╔г║╪╔Б╔С╓х╓╥╓ф)╣╞ф╟╓╥╓ч╓╧. xdm ╓о getty ╓╛╣╞ф╟╓╥╓©╦Е╓к╔М║╪╔и╓╣╓Л╓й╓╠╓Л╓п╓й╓Й╓ч╓╩╓С. ╓╫╓╕╓г╓й╓╓╓х, xdm ╓о getty ╓х╬вфм╓╥, ╔Ё╔С╔╫║╪╔К╓Р╔М╔ц╔╞╔╒╔╕╔х╓╥╓ф╓╥╓ч╓╓╓ч╓╧. ╓Ё╓нлДбЙ╓кбп╫Х╓╧╓К╨га╠╓нйЩк║╓о, ╣╞ф╟╔╧╔╞╔Й╔в╔х(лУцМ: rc.local ╓н╓Ё╓х)╓г 10 иц╓ш╓и╓н sleep ╓Р╪б╧т╓╣╓╩, ╓╫╓н╦Е╓к xdm ╓Р╔М║╪╔и╓╧╓К╓Ё╓х╓г╓╧. /etc/ttys ╓╚╓И xdm ╓Р╣╞ф╟╓╣╓╩╓ф╓╓╓К╬Л╧Г╓к╓о, xdm ╓х getty ╓╛╬вфм╓╧╓К╡дг╫ю╜╓╛╓╒╓Й╓ч╓╧. ╓Ё╓нлДбЙ╓Р╡СхР╓╧╓К╓к╓о, /usr/X11R6/lib/X11/xdm/Xservers ╓к vt хж╧Ф╓Рди╡ц╓╥╓ф╓╞╓ю╓╣╓╓. :0 local /usr/X11R6/bin/X vt4 ╬Е╓ннЦ╓о, /dev/ttyv3 ╓Р X ╔╣║╪╔п╓кбп╠Ч╓╣╓╩╓ч╓╧. хж╧Ф╓о 1 ╓╚╓И╩о╓ч╓Й╓ч╓╧╓н╓гцМ╟у╓╥╓ф╓╞╓ю╓╣╓╓. X ╔╣║╪╔п╓о vty ╓Р 1 ╓╚╓И©Т╓╗╓ч╓╧╓╛, FreeBSD ╔╚║╪╔м╔К╓о vty ╓Р 0 ╓╚╓И©Т╓╗╓ч╓╧. xconsole ╓Рф╟╓╚╓╫╓╕╓х╓╧╓К╓х Couldn't open console ╓х╔╗╔И║╪╓╛╫п╓ч╓╧. X ╓Р startx ╓г╣╞ф╟╓╥╓ч╓╧╓х, /dev/console ╓н╔я║╪╔ъ╔ц╔╥╔Г╔С╓о йя╧╧╓╛╓г╓╜╓й╓╓╓Х╓╕╓к╓й╓ц╓ф╓╓╓ч╓╧╓н╓г, xterm -C ╓Д xconsole ╓оф╟╓╜╓ч╓╩╓С. ╓Ё╓Л╓о╔Ё╔С╔╫║╪╔К╓н╔я║╪╔ъ╔ц╔╥╔Г╔С╓╛, и╦╫Ю╓г╓о╓╫╓н╓Х╓╕╓кюъдЙ╓╣╓Л╓ф╓╓╓К╓╚╓И╓г╓╧. ╔ч╔К╔а╔Ф║╪╔╤╔╥╔╧╔ф╔Ю╓г╓о, ╔Ф║╪╔╤╓нц╞╓Б╓╛╔╥╔╧╔ф╔Ю╔Ё╔С╔╫║╪╔К╓к╫Я╓╜╧Ч╓Ю╓Ё╓х╓╛╡дг╫╓г╓╒╓Ки╛мв╓ои╛╓╨╓╥╓Б╓╒╓Й╓ч╓╩╓С. VTY ╓Р╩х╓╓д╬юэ╔ч╔╥╔С╓к╔М╔╟╔╓╔С╓╧╓К╔Ф║╪╔╤╓н╓©╓А╓к, ╓Ё╓н╓Х╓╕╓йлДбЙ╓Р╡Р╥Х╓╧╓К╓©╓А╓к fbtab ╓х╓╓╓╕╔у╔║╔╓╔К╓╛╓╒╓Й╓ч╓╧. мвею╓Р╫р╓ы╓К╓х, ╪║╓н╓Х╓╕╓й╥а╪╟╓н╧т╓Р fbtab ╓к╡ц╓╗╓ч╓╧. /dev/ttyv0 0600 /dev/console ╓╫╓╕╓╧╓К╓х, /dev/ttyv0 ╓╚╓И╔М╔╟╔╓╔С╓╥╓©╔Ф║╪╔╤╓╛ ╔Ё╔С╔╫║╪╔К╓Р╫Йм╜╓╧╓К╓Ё╓х╓к╓й╓К╓г╓╥╓Г╓╕. ╓О╓©╓╥╓о╓╓╓д╓Б XFree86 ╓Р╟Лхл╔Ф║╪╔╤╓╚╓И╣╞ф╟╓╥╓ф╓╓╓©╓н╓г╓╧╓╛, ╨г╤А╓к╓й╓ц╓ф root ╔Ф║╪╔╤╓г╓й╓╠╓Л╓п╓й╓И╓й╓╓╓х╦ю╓О╓Л╓К╓Х╓╕╓к╓й╓Й╓ч╓╥╓©. ╓╧╓ы╓ф╓н X ╔╣║╪╔п╓о, ╔с╔г╔╙╔о║╪╔и╔╕╔╖╔╒╓кд╬юэ╔╒╔╞╔╩╔╧╓╧╓К╓©╓А╓к root ╔Ф║╪╔╤╓г╪б╧т╓╣╓Л╓Ки╛мв╓╛╓╒╓Й╓ч╓╧. ╦е╓╓╔п║╪╔╦╔Г╔С╓н XFree86 (<= 3.3.6) ╓к╢ч╓ч╓Л╓К╓╧╓ы╓ф╓н╔╣║╪╔п╓о, ╪╚ф╟е╙╓к root ╦╒╦б╓г╪б╧т╓╣╓Л╓К╓Х╓╕╓к (root ╔Ф║╪╔╤╓к setuid ╓╣╓Л╓ф) ╔╓╔С╔╧╔х║╪╔К╓╣╓Л╓ч╓╧. X ╔╣║╪╔п╓обГ╓╜╓╞йё╩╗╓й╔в╔М╔╟╔И╔Ю╓г╓╒╓Й, ╓Ё╓Л╓олю╓И╓╚╓к╔╩╔╜╔Е╔Й╔ф╔ё╓Р╢М╦╠╓к╩╞╓╧мв╟Ь╓х╓й╓Й╓ч╓╧. ╓╫╓н╓©╓А©╥╓╥╓╓╔п║╪╔╦╔Г╔С╓н XFree86 ╓г╓о, ╔╣║╪╔п╓Р root ╔Ф║╪╔╤╓к seruid ╓╥╓й╓╓╓г╔╓╔С╔╧╔х║╪╔К╓╧╓К╓Х╓╕╓к╓й╓Й╓ч╓╥╓©. X ╔╣║╪╔п╓Р root ╔Ф║╪╔╤╓гф╟╓╚╓╧╓х╓╓╓╕╓н╓о, лю╓И╓╚╓к╔╩╔╜╔Е╔Й╔ф╔ёе╙╓ките╛еЖ╓г╪У╓╠фЧ╓Л╓И╓Л╓й╓╓╓Ё╓х╓г╓╧. X ╓Р╟Лхл╔Ф║╪╔╤╓г╪б╧т╓╧╓К╓к╓о, фС╓д╓нйЩк║╓╛╓╒╓Й╓ч╓╧. ╟Л╓д╓о xdm ╓Д, ╓╫╓нб╬╓н╔г╔ё╔╧╔в╔Л╔╓╔ч╔м║╪╔╦╔Ц (╓©╓х╓╗╓п kdm ╓й╓и) ╓Р╩х╓╕╓Ё╓х, ╓Б╓╕╟Л╓д╓о Xwrapper ╓Р╩х╓╕╓Ё╓х╓г╓╧. xdm ╓о, ╔╟╔И╔у╔ё╔╚╔К╓й╔М╔╟╔╓╔С╡Хлл╓Р╟╥╓╕╔г║╪╔Б╔С╓г╓╧. дл╬О, ╣╞ф╟╩Ч╓к╪б╧т╓╣╓Л, Ёф╔Ф║╪╔╤╓нг╖╬з╓х╔Ф║╪╔╤╔╩╔╥╔Г╔С╓РЁ╚╩о╓╣╓╩╓К╣║г╫╓Р╪б╦╫╓╥╓ч╓╧. ╢Пкэе╙╓к, getty ╓х login ╓н╔╟╔И╔у╔ё╔ц╔╞хг, ╓х╧м╓╗╓фни╓╓╓г╓╥╓Г╓╕. xdm ╓н╬э╨ы╓к╓д╓╓╓ф╓о, XFree86 ╢ьо╒й╦╫Я ╓╙╓Х╓с FAQ ╧Юлэ╓Р╓╢мВ╓╞╓ю╓╣╓╓. Xwrapper ╓х╓о, X ╔╣║╪╔пмя╓н╔И╔ц╔я (wrapper) ╓н╓Ё╓х╓г╓╧. ╓Ё╓Л╓ои╛мв╓й╔╩╔╜╔Е╔Й╔ф╔ё╓РЁнйщ╓╥╓д╓д, ╟Лхл╔Ф║╪╔╤╓╛ X ╔╣║╪╔п╓Р╪б╧т╓г╓╜╓К╓Х╓╕╓к╓╥╓©╬╝╓╣╓й╔Ф║╪╔ф╔ё╔Й╔ф╔ё╓г, ╔Ё╔ч╔С╔и╔И╔╓╔С╟З©Т╓ню╣еЖю╜╔а╔╖╔ц╔╞╓Р╧т╓й╓╓, ╓╫╓Л╓Рдл╡А╓╧╓Л╓пе╛юз╓й X ╔╣║╪╔п╓Р╣╞ф╟╓╥╓ч╓╧. ╡©╓И╓╚╓нмЩмЁ╓г╔г╔ё╔╧╔в╔Л╔╓╔ч╔м║╪╔╦╔Ц╓Р╩х╓╓╓©╓╞╓й╓╓╬Л╧Г╓к ╓Ё╓Л╓Р╩х╓╕╓хни╓╓╓г╓╥╓Г╓╕. Ports Collection а╢бн╓Р╔╓╔С╔╧╔х║╪╔К╓╥╓ф╓╓╓Л╓п, /usr/ports/x11/wrapper ╓к╓╒╓Й╓ч╓╧. ╩Д╓н PS/2 ╔ч╔╕╔╧╓о X ╔╕╔ё╔С╔и╔╕╔╥╔╧╔ф╔Ю╬Е╓г╓╕╓ч╓╞ф╟╓╜╓ч╓╩╓С. ╓╒╓й╓©╓н╔ч╔╕╔╧╓х╔ч╔╕╔╧╔и╔И╔╓╔п╓╛╓╕╓ч╓╞ф╠╢Э╓╥╓ф╓╓╓й╓╓╓╚╓И╓╚╓Б╓╥╓Л╓ч╓╩╓С. FreeBSD 2.2.5 ╓ч╓г╓н╔п║╪╔╦╔Г╔С╓г╓о, X ╓╚╓И╡╬аш╔©║╪╔ъ╔й╔К╓ьюзбь╓╗╓ф, ╓ч╓© X ╓ьлА╓К╓х╨фф╠╢Э╓╧╓К╓╚╓Б╓╥╓Л╓ч╓╩╓С. ╓Ё╓нлДбЙ╓╛╓Х╓╞╣╞╓╜╓К╓Х╓╕╓г╓╒╓Л╓п, ╔╚║╪╔м╔К╔Ё╔С╔у╔ё╔╟╔Л║╪╔╥╔Г╔С ╔у╔║╔╓╔К╓к╪║╓н╔╙╔в╔╥╔Г╔С╓Р╫Я╓╓╓ф╔╚║╪╔м╔К╓Р╨ф╧╫ю╝╓╥╓ф╓ъ╓ф╓╞╓ю╓╣╓╓. options PSM_CHECKSYNC ╓Б╓╥, ╔╚║╪╔м╔К╓н╨ф╧╫цш╓Р╧т╓й╓ц╓©╓Ё╓х╓╛╓й╓╓╓н╓г╓╒╓Л╓п, ╔╚║╪╔м╔К╓Р╧╫цш╓╧╓К╓н╧Ю╓Р╩╡╬х╓╥╓ф╓╞╓ю╓╣╓╓. ╓Ё╓н╔╙╔в╔╥╔Г╔С╓к╓Х╓Й, ╔ч╔╕╔╧╓х╔и╔И╔╓╔п╓нф╠╢Э╓глДбЙ╓╛╣╞╓╜╓К╡дг╫ю╜╓о╬╞╓й╓╞╓й╓К╓г╓╥╓Г╓╕. ╓Б╓╥╓╫╓Л╓г╓Б╓Ё╓нлДбЙ╓╛╣╞╓╜╓К╓Х╓╕╓й╓И╓п, ╨фф╠╢Э╓╣╓╩╓К╓к╓о╔ч╔╕╔╧╓Рф╟╓╚╓╣╓й╓╓╓Х╓╕╓к╓╥╓ф╓╙╓╓╓ф ╔ч╔╕╔╧╔э╔©╔С╓н╓и╓Л╓╚╓Р╡║╓╥╓ф╓╞╓ю╓╣╓╓. ╓Ё╓н╔╙╔в╔╥╔Г╔С╓о╩дг╟╓й╓╛╓И╓╧╓ы╓ф╓н╔╥╔╧╔ф╔Ю╓гф╞╓╞╓О╓╠╓г╓о╓й╓╞, ╓ч╓©, PS/2 ╔ч╔╕╔╧╔щ║╪╔х╓к╓д╓й╓╛╓Л╓ф╓╓╓К╓н╓╛ ╔©╔ц╔в(tap)╣║г╫╓Р╩Щ╓д ╔╒╔К╔в╔╧╪рю╫ GlidePoint ╔г╔п╔╓╔╧╓н╬Л╧Г, ╔©╔ц╔в╣║г╫╓╛л╣╦З╓х╓й╓ц╓ф╓╥╓ч╓╓╓ч╓╧. FreeBSD 2.2.6 ╟й╧ъ╓н╔п║╪╔╦╔Г╔С╓г╓о, ф╠╢Э╓н╔а╔╖╔ц╔╞йЩк║╓╛╬╞╓╥╡Ча╠╓╣╓Л╓©╓н╓ги╦╫Ю╓гм╜╦З╓к╓й╓ц╓ф╓╓╓ч╓╧. GlidePoint ╓г╓Б╓╕╓ч╓╞ф╞╓╜╓ч╓╧(ф╠╢Э╔а╔╖╔ц╔╞╓╛и╦╫Ю╓н╣║г╫╓к╓й╓ц╓©╓н╓г PSM_CHECKSYNC ╔╙╔в╔╥╔Г╔С╓о╓Ё╓Л╓И╓н╔п║╪╔╦╔Г╔С╓╚╓И╓о╨О╫Э╓╣╓Л╓ч╓╥╓©). ╓╥╓╚╓╥╓й╓╛╓И, ╓ч╓Л╓к╔и╔И╔╓╔п╓╛╢ж╟Ц╓ц╓ф(лУцМ: лДбЙ╓╛╓й╓╓╓н╓к)ф╠╢Э╓к╢ь╓╥╓флДбЙ╓╛╓╒╓К╓хйС╧П╓╥, ╔╚║╪╔м╔К╓╚╓И psmintr: out of sync (xxxx != yyyy) ╓х╓╓╓╕╔А╔ц╔╩║╪╔╦╓╛╫пно╓╣╓Л╓ф, ╔ч╔╕╔╧╓╛ю╣╓╥╓╞ф╟╨Н╓╥╓ф╓╓╓й╓╓╓Х╓╕╓к╦╚╓╗╓К ╓Ё╓х╓╛╓╒╓К╓╚╓Б╓╥╓Л╓ч╓╩╓С. ╓Б╓╥╓Ё╓н╓Х╓╕╓й╓Ё╓х╓╛╣╞╓Ё╓К╬Л╧Г╓к╓о, PS/2 ╔ч╔╕╔╧╔и╔И╔╓╔п╓н╔у╔И╔╟╓к 0x100 ╓Р╩ьдЙ╓╥╓фф╠╢Э╔а╔╖╔ц╔╞╓Рл╣╦З╓к╓╥╓ф╓╞╓ю╓╣╓╓. ╔╥╔╧╔ф╔Ю╓н╣╞ф╟╩Ч╓к ╣╞ф╟╔╙╔в╔╥╔Г╔С╓Рм©╓╗╓ф UserConfig ╓кфЧ╓Й╓ч╓╧. boot: -c boot: UserConfig ╓н╔Ё╔ч╔С╔и╔И╔╓╔С╓г╟й╡╪╓н╓Х╓╕╓кфЧно╓╥╓ф╓╞╓ю╓╣╓╓. UserConfig> flags psm0 0x100 UserConfig> quit MouseSystems ╓н PS/2 ╔ч╔╕╔╧╓╛╓╕╓ч╓╞ф╟╓╜╓ч╓╩╓С. MouseSystems ╓н PS/2 ╔ч╔╕╔╧╓н╓╒╓К╔Б╔г╔К╓о, ╧Б╡РаЭеы╔Б║╪╔и╓н╬Л╧Г╓к╓н╓ъю╣╓╥╓╞ф╟╨Н╓╧╓К╓х╓╓╓╕╓Ё╓х╓╛йС╧П╓╣╓Л╓ф╓╓╓ч╓╧. ╓╫╓Л╟йЁ╟╓н╔Б║╪╔и╓г╓о, ╔ч╔╕╔╧╔╚║╪╔╫╔К╓╛╓╥╓Г╓ц╓а╓Е╓╕╔╧╔╞╔Й║╪╔С╨╦╬Е╓к╧т╓ц╓ф╓╥╓ч╓╕╓╚╓Б╓╥╓Л╓ч╓╩╓С. ╩дг╟╓й╓╛╓И FreeBSD 2.0.X ╓Д 2.1.X ╓н╔п║╪╔╦╔Г╔С╓г╓о, ╓Ё╓нлДбЙ╓н╡Р╥Х╓╧╓КйЩк║╓о╓╒╓Й╓ч╓╩╓С. 2.2 ╓╚╓И 2.2.5 ╓н╔п║╪╔╦╔Г╔С╓г╓о, ╟й╡╪╓н╔я╔ц╔а╓Р /sys/i386/isa/psm.c ╓ке╛мя╓╥╔╚║╪╔м╔К╓н╨ф╧╫цш╓Р╧т╓й╓ц╓ф╓╞╓ю╓╣╓╓. ╓Б╓╥, ╔╚║╪╔м╔К╓н╨ф╧╫цш╓Р╧т╓й╓ц╓©╓Ё╓х╓╛╓й╓╓╓н╓г╓╒╓Л╓п, ╔╚║╪╔м╔К╓н╧╫цш╓н╧Ю╓Р╩╡╬х╓╥╓ф╓╞╓ю╓╣╓╓. @@ -766,6 +766,8 @@ if (verbose >= 2) log(LOG_DEBUG, "psm%d: SET_DEFAULTS return code:%04x\n", unit, i); + set_mouse_resolution(sc->kbdc, PSMD_RES_HIGH); + #if 0 set_mouse_scaling(sc->kbdc); /* 1:1 scaling */ set_mouse_mode(sc->kbdc); /* stream mode */ FreeBSD 2.2.6 ╟й╧ъ╓н╔п║╪╔╦╔Г╔С╓г╓о, PS/2 ╔ч╔╕╔╧╔и╔И╔╓╔п╓н╔у╔И╔╟╓к 0x04 ╓Р╩ьдЙ╓╥╓ф╔ч╔╕╔╧╓Р╧Б╡РаЭеы╔Б║╪╔и╓к╓╥╓ч╓╧. ╔╥╔╧╔ф╔Ю╓н╣╞ф╟╩Ч╓к ╣╞ф╟╔╙╔в╔╥╔Г╔С╓Рм©╓╗╓ф UserConfig ╓кфЧ╓Й╓ч╓╧. boot: -c UserConfig ╓н╔Ё╔ч╔С╔и╔И╔╓╔С╓г╟й╡╪╓н╓Х╓╕╓кфЧно╓╥╓ф╓╞╓ю╓╣╓╓. UserConfig> flags psm0 0x04 UserConfig> quit ╔ч╔╕╔╧╓к╢ь╓╧╓Кит╤Я╧Г╓нб╬╓н╦╤╟Ь╓н╡дг╫ю╜╓к╓д╓╓╓ф╓о, д╬а╟╓н╔╩╔╞╔╥╔Г╔С╓Б╦╚╓ф╓ъ╓ф╓╞╓ю╓╣╓╓. X ╓н╔╒╔в╔Й╔╠║╪╔╥╔Г╔С╓Р╧╫цш╓╧╓К╩Ч╓к, imake can't find Imake.tmpl ╓х╓й╓Й╓ч╓╧. ╓и╓Ё╓к╓╒╓К╓н╓г╓╥╓Г╓╕╓╚? Imake.tmpl ╓о X ╓ни╦╫Ю╔╒╔в╔Й╔╠║╪╔╥╔Г╔С╧╫цш╔д║╪╔К╓г╓╒╓К Imake ╔я╔ц╔╠║╪╔╦╓н╟ЛиТ╓г╓╧. Imake.tmpl ╓о, X ╔╒╔в╔Й╔╠║╪╔╥╔Г╔С╓н╧╫цш╓ки╛мв╓йб©╓╞╓н╔ь╔ц╔ю╔у╔║╔╓╔К╓хф╠мм╓к, X ╓н╔в╔М╔╟╔И╔Ю╔г╔ё╔╧╔х╔Й╔с╔Е║╪╔╥╔Г╔С╓к╢ч╓ч╓Л╓ф╓╓╓ч╓╧. sysinstall ╓Р╩х╓╕╓╚, ╪Йф╟╓г X ╓н╔г╔ё╔╧╔х╔Й╔с╔Е║╪╔╥╔Г╔С╔у╔║╔╓╔К╓╚╓И╔╓╔С╔╧╔х║╪╔К╓╧╓К╓Ё╓х╓╛╓г╓╜╓ч╓╧. ╔ч╔╕╔╧╓н╔э╔©╔С╓РфЧ╓Лбь╓╗╓КйЩк║╓о╓╒╓Й╓ч╓╧╓╚? .xinitrc ╓╚ .xsession ╓г xmodmap ╓х╓╓╓╕╔Ё╔ч╔С╔и╓Р╪б╧т╓╥╓ф╓╞╓ю╓╣╓╓. ╔╧╔в╔И╔ц╔╥╔Е╔╧╔╞╔Й║╪╔С╓н╔╓╔С╔╧╔х║╪╔К╓о╓и╓╕╓╧╓К╓н╓г╓╧╓╚. ╓и╓Ё╓г╦╚╓д╓╠╓К╓Ё╓х╓╛╓г╓╜╓ч╓╧╓╚? FreeBSD 3.1 ╓н╔Й╔Й║╪╔╧д╬а╟╓к, ╣╞ф╟╔А╔ц╔╩║╪╔╦╓ни╫╪╗╢Э╢ж╓к ╓╓╓О╓Ф╓К "╔╧╔в╔И╔ц╔╥╔Е" ╔╧╔╞╔Й║╪╔С╓Ри╫╪╗╓╣╓╩╓К╓Ё╓х╓╛╓г╓╜╓К©╥╓╥╓╓╣║г╫╓╛ди╡ц╓╣╓Л╓ч╓╥╓©. ╓╓╓ч╓н╓х╓Ё╓М╔╧╔в╔И╔ц╔╥╔Е╔╧╔╞╔Й║╪╔С╓о 256 ©╖╓н╔с╔ц╔х╔ч╔ц╔в(*.BMP)╓╚ ZSoft PCX(*.PCX)╔у╔║╔╓╔К╓г╓╧. ╓╫╓Л╓к╡ц╓╗╓ф, и╦╫Ю╓н VGA ╔╒╔ю╔в╔©╓г╓нф╟╨Н╓╣╓╩╓К╓к╓о 320x200 ╟й╡╪╓н╡РаЭеы╓г╓╒╓Ки╛мв╓╛╓╒╓Й╓ч╓╧. ╔╚║╪╔м╔К╓к VESA ╔╣╔щ║╪╔х╓Рди╡ц╓╧╓Л╓п 1024x768 ╓ч╓г╓н╓Х╓ЙбГ╓╜╓╓╔с╔ц╔х╔ч╔ц╔в╓Р╩хмя╓г╓╜╓ч╓╧. VESA ╔╣╔щ║╪╔х╓Рм╜╦З╡╫╓╧╓К╓к╓о╓ч╓╨, ╔╚║╪╔м╔К╓╛ VM86 ╔╚║╪╔м╔К╔╙╔в╔╥╔Г╔С╓х╓х╓Б╓к╔Ё╔С╔я╔╓╔К╓╣╓Л╓ф╓╓╓Ки╛мв╓╛╓╒╓К╓Ё╓х╓кцМ╟у╓╥╓ф╓╞╓ю╓╣╓╓. VESA ╔╣╔щ║╪╔х╓╫╓н╓Б╓н╓о VESA ╔╚║╪╔м╔К╔Ё╔С╔у╔ё╔╟╔╙╔в╔╥╔Г╔С ╓к╓Х╓ц╓фд╬юэ╔╚║╪╔м╔КцФ╓к╔Ё╔С╔я╔╓╔К╓╧╓К╓╚, ╣╞ф╟╩Ч╓к VESA kld ╔Б╔╦╔Е║╪╔К╓Рфи╓ъ╧Ч╓ч╓╩╓К╓Ё╓х╓╛╓г╓╜╓ч╓╧. ╔╧╔в╔И╔ц╔╥╔Е╔╧╔╞╔Й║╪╔С╓Р╩х╓╕╓к╓о, FreeBSD ╓н╣╞ф╟╔в╔М╔╩╔╧╓Р╔Ё╔С╔х╔М║╪╔К╓╧╓К╔╧╔©║╪╔х╔╒╔ц╔в╔у╔║╔╓╔К╓Р╫Я╓╜╢╧╓╗╓Ки╛мв╓╛╓╒╓Й╓ч╓╧. ╓Ё╓Л╓И╓н╔у╔║╔╓╔К╓о FreeBSD 3.2 ╓н╔Й╔Й║╪╔╧╟йа╟╓кйя╧╧╓╣╓Л╓ч╓╥╓©╓н╓г, ╦╫╨ъ╓о, ╔╧╔в╔И╔ц╔╥╔Е╔╧╔╞╔Й║╪╔С╓Рфи╓ъ╧Ч╓ЮйЩк║╓╛фС╓д╓╒╓Й╓ч╓╧. FreeBSD 3.1 ╓н╬Л╧Г ╓ч╓╨╨г╫И╓н╔╧╔ф╔ц╔в╓о, ╔╧╔в╔И╔ц╔╥╔Е╔╧╔╞╔Й║╪╔С╓н╔с╔ц╔х╔ч╔ц╔вхг╓Рц╣╓╥╓ф╓╞╓К╓Ё╓х╓г╓╧. 3.1-RELEASE ╓г╓о Windows ╓н╔с╔ц╔х╔ч╔ц╔в╥а╪╟╓н╔╧╔в╔И╔ц╔╥╔Е╔╧╔╞╔Й║╪╔С╓ю╓╠╓Р╔╣╔щ║╪╔х╓╥╓ф╓╓╓ч╓╧. ╓╙к╬╓ъ╓н╔╧╔в╔И╔ц╔╥╔Е╔╧╔╞╔Й║╪╔С╓Р╦╚╓д╓╠╓©╓й╓И, ╓╫╓Л╓Р /boot/splash.bmp ╓к╔Ё╔т║╪╓╥╓ч╓╧. ╪║╓к, ╓Ё╓Л╓И╓н╧т╓╛╫Я╓╚╓Л╓© /boot/loader.rc ╔у╔║╔╓╔К╓╛и╛мв╓г╓╧. load kernel load -t splash_image_data /boot/splash.bmp load splash_bmp autoboot FreeBSD 3.2 ╟й╧ъ╓н╬Л╧Г PCX ╥а╪╟╓н╔╧╔в╔И╔ц╔╥╔Е╔╧╔╞╔Й║╪╔С╓н╔╣╔щ║╪╔х╓╛ди╡ц╓╣╓Л╓К╓хф╠╩Ч╓к, FreeBSD 3.2 ╓к╓о╣╞ф╟╔в╔М╔╩╔╧╓РюъдЙ╓╧╓К, ╓Х╓ЙюЖнЩ╓╣╓Л╓©йЩк║╓╛╢ч╓ч╓Л╓ф╓╓╓ч╓╧. ╓Б╓╥╓╙к╬╓ъ╓й╓И, ╬Е╓к╪╗╓╥╓© FreeBSD 3.1 мя╓нйЩк║╓Р╩х╓╕╓Ё╓х╓Б╓г╓╜╓ч╓╧. ╓Б╓╥╓╫╓╕╓╥╓©╓╞╓ф, ╓╚╓д PCX ╥а╪╟╓Р╩х╓╓╓©╓╓╓й╓И, splash_bmp ╓Р splash_pcx ╓хфи╓ъ╢╧╓╗╓ф╓╞╓ю╓╣╓╓. ╓╫╓╕╓г╓о╓й╓╞╓ф, ©╥╓╥╓╓╣╞ф╟юъдЙйЩк║╓Р╩х╓╕╓н╓й╓И, ╪║╓н©Т╧т╓╛╫Я╓╚╓Л╓© /boot/loader.rc ╔у╔║╔╓╔К╓х, include /boot/loader.4th start ╪║╓н©Т╧т╓╛╢ч╓ч╓Л╓© /boot/loader.conf ╔у╔║╔╓╔К╓Р╨Н╓К╓Ё╓х╓╛и╛мв╓г╓╧. splash_bmp_load="YES" bitmap_load="YES" ╓Ё╓ннЦ╓г╓о, ╔╧╔в╔И╔ц╔╥╔Е╔╧╔╞╔Й║╪╔С╓х╓╥╓ф /boot/splash.bmp ╓Р╩х╓╕╓Ё╓х╓РашдЙ╓╥╓ф╓╓╓ч╓╧. PCX ╥а╪╟╓н╔у╔║╔╓╔К╓Р╩х╓╕╬Л╧Г╓к╓о, ╓╫╓н╔у╔║╔╓╔К╓Р /boot/splash.pcx ╓к╔Ё╔т║╪╓╥╓ф, ╬Е╓г╪╗╓╥╓©╓Х╓╕╓к /boot/loader.rc ╓Р╨Н╓Й╓ч╓╧. ╓╫╓╥╓ф, ╪║╓нфБмф╓н /boot/loader.conf ╓х╓╓╓╕╔у╔║╔╓╔К╓Р╨Н╓ц╓ф╓╞╓ю╓╣╓╓. splash_pcx_load="YES" bitmap_load="YES" bitmap_name="/boot/splash.pcx" ╓╣╓ф, ╓╒╓х╓о╔╧╔в╔И╔ц╔╥╔Е╔╧╔╞╔Й║╪╔С╓Рмя╟у╓╧╓К╓ю╓╠╓г╓╧. ╓╫╓Л╓к╓о http://www.baldwin.cx/splash/ ╓н╔╝╔Ц╔И╔Й║╪╓Р╔╣║╪╔у╓╥╓ф╓ъ╓ф╓╞╓ю╓╣╓╓. X ╓г Windows(tm) ╔╜║╪╓Р╩х╓╕╓Ё╓х╓о╓г╓╜╓К╓н╓г╓╥╓Г╓╕╓╚? ╓о╓╓, ╓Б╓а╓М╓С. ╓и╓╕╓╓╓╕ф╟╨Н╓Р╓╧╓К╓╚╓к╓д╓╓╓фдЙ╣а╓╧╓К╓к╓о &man.xmodmap.1; ╓Р╩х╓╓╓ч╓╧. и╦╫Юе╙╓й "Windows(tm)" ╔╜║╪╔э║╪╔и╓н╬Л╧Г, бп╠Ч╓╧╓К╔╜║╪╔Ё║╪╔и╓о 3 ╪ОнЮ╓╒╓Й╓ч╓╧. 115 - ╨╦╓н Ctrl ╓х Alt ╓н╢ж╓к╓╒╓К Windows(tm) ╔╜║╪ 116 - ╠╕╓н Alt ╓х Gr ╓н╢ж╓к╓╒╓К Windows(tm) ╔╜║╪ 117 - ╠╕╓н Ctrl ╓н╨╦ны╓к╓╒╓К╔А╔к╔Е║╪╔╜║╪ ╨╦╓к╓╒╓К Windows(tm) ╔╜║╪╓Р╡║╓╧╓х╔╚╔С╔ч╣╜╧Ф╓╛фЧно╓╣╓Л╓К╓Х╓╕╓к╓╧╓К╓к╓о, ╓Ё╓С╓йиВ╓к╓╥╓ч╓╧. &prompt.root; xmodmap -e "keycode 115 = comma" юъдЙ╓Рх©╠г╓╣╓╩╓К╓к╓о, ╓╙╓╫╓И╓╞╔╕╔ё╔С╔и╔╕╔ч╔м║╪╔╦╔Ц╓Р╨ф╣╞ф╟╓╧╓Ки╛мв╓╛╓╒╓Й╓ч╓╧. Windows(tm) ╔╜║╪╓н╔╜║╪╔ч╔ц╔в╓Р X ╣╞ф╟╩Ч╓ккХ╡С, ╪╚ф╟е╙╓км╜╦З╡╫╓╧╓К╓к╓о xmodmap ╔Ё╔ч╔С╔и╓Р ~/.xinitrc ╓кди╡ц╓╧╓К╓╚, ╓Б╓╥╓╞╓о╓╙╓╧╓╧╓А╓г╓╜╓КйЩк║╓х╓╥╓ф ~/.xmodmaprc ╓х╓╓╓╕╔у╔║╔╓╔К╓Р╨Ню╝╓╥╓ф, ╓╫╓н╔у╔║╔╓╔К╓н╟Л╧т╟Л╧т╓к xmodmap ╓н╔╙╔в╔╥╔Г╔С╓Р╣╜╫р╓╥, ╪║╓н╟Л╧т xmodmap $HOME/.xmodmaprc ╓Р ~/.xinitrc ╓кди╡ц╓╧╓К╓х╓╓╓╕йЩк║╓╛╓╒╓Й╓ч╓╧. ╓©╓х╓╗╓п, юХ╓ш╓и╓╒╓╡╓©╩╟╓д╓н╔╜║╪╓Р F13, F14, F15 ╓кЁД╓ЙеЖ╓ф╓К╓х╓╥╓ч╓╧. ╓Ё╓╕╓╥╓ф╓╙╓╠╓п, ╔╒╔в╔Й╔╠║╪╔╥╔Г╔С╓Д╔╕╔ё╔С╔и╔╕╔ч╔м║╪╔╦╔Ц╓нйьмЬ╓й╣║г╫╓Р ╓╫╓н╩╟╓д╓н╔╜║╪╓к╢йц╠╓кЁД╓ЙеЖ╓ф╓К╓Ё╓х╓╛╓г╓╜╓ч╓╧. ╓Ё╓╕╓╧╓К╓к╓о, ╪║╓нфБмф╓Р ~/.xmodmaprc ╓кди╡ц╓╥╓ч╓╧. keycode 115 = F13 keycode 116 = F14 keycode 117 = F15 ╓О╓©╓╥╓о fvwm2 ╓Р╩х╓ц╓ф╓╓╓ф, F13 ╓Р╔╚║╪╔╫╔К╡╪╓н╔╕╔ё╔С╔и╔╕╓н╔╒╔╓╔Ё╔С╡╫, F14 ╓Р╔╕╔ё╔С╔и╔╕╓на╟лл/гьлл╡╫, F15 ╓Р, ╓╒╓©╓╚╓Б╔г╔╧╔╞╔х╔ц╔в╓к╔╚║╪╔╫╔К╓╛б╦╨ъ╓╥╓й╓╓╓╚╓н╓Х╓╕╓к, ╔А╔╓╔С╔О║╪╔╞╔╧╔з║╪╔╧(╔╒╔в╔Й╔╠║╪╔╥╔Г╔С)╓н╔А╔к╔Е║╪╓Р╦ф╓с╫п╓╩╓К╣║г╫╓кЁД╓ЙеЖ╓ф╓ф╓╓╓ч╓╧. ╨г╦Е╓н╣║г╫╓о, ╓╫╓н╔г╔╧╔╞╔х╔ц╔в╓╛╓ч╓ц╓©╓╞╦╚╓╗╓й╓╓╓х╓╜╓кйьмЬ╓г╓╧. (╓ч╓©, ╔╜║╪╔х╔ц╔в╓н╔М╔╢╓к╓Б╓т╓ц╓©╓Й╓г╓╧) ╪║╓ннЦ╓о, ╓О╓©╓╥╓╛╓╫╓н╓Х╓╕╓кЁД╓ЙеЖ╓ф╓Р╧т╓й╓╕╓©╓А╓к╩х╓ц╓ф╓╓╓К ~/.fvwmrc ╓н╔╗╔С╔х╔Й╓г╓╧. Key F13 FTIWS A Iconify Key F14 FTIWS A RaiseLower Key F15 A A Menu Workplace Nop ╔м╔ц╔х╔О║╪╔╜╔С╔╟ лУ: &a.jp.arimura;, &a.jp.shou;, ╓к╓╥╓╚ nishika@cheerful.com, &a.jp.kiroh;, 1998 г╞ 10 ╥Н 4 фЭ. ╔г╔ё╔╧╔╞╔Л╔╧╔ж║╪╔х(diskless boot) ╓к╢ь╓╧╓К╬ПйС╓о╓и╓Ё╓гфю╓И╓Л╓ч╓╧╓╚? ╔г╔ё╔╧╔╞╔Л╔╧╔ж║╪╔х(diskless boot) ╓х╓╓╓╕╓н╓о, FreeBSD ╓╛╔м╔ц╔х╔О║╪╔╞╬Е╓г╣╞ф╟╓╥, и╛мв╓й╔у╔║╔╓╔К╓Р╪╚й╛╓н╔о║╪╔и╔г╔ё╔╧╔╞╓г╓о╓й╓╞╓ф╔╣║╪╔п╓╚╓Ифи╓ъ╧Ч╓Ю╓Б╓н╓г╓╧. ╬э╨ы╓к╓д╓╓╓ф╓о FreeBSD ╔о╔С╔и╔ж╔ц╔╞╓н║ж╔г╔ё╔╧╔╞╔Л╔╧╔ж║╪╔х║в╓Рфи╓С╓г╓╞╓ю╓╣╓╓. FreeBSD ╓Р╔м╔ц╔х╔О║╪╔╞╓н╔К║╪╔©(router)╓х╓╥╓ф╩хмя╓╧╓К╓Ё╓х╓о╓г╓╜╓ч╓╧╓╚? ╔╓╔С╔©║╪╔м╔ц╔хи╦╫Ю╓Д╓Ё╓Л╓ч╓г╓н╓Х╓╓╥п╦Ё╓к╓Х╓ц╓ф╩ье╕╓╣╓Л╓ф╓╓╓Кдл╓Й, FreeBSD ╓ои╦╫Ю╓г╓о╔я╔╠╔ц╔х╓Ре╬аВ(forward)╓╧╓К╓Х╓╕╓кюъдЙ╓╣╓Л╓ф╓╓╓ч╓╩╓С. ╓╥╓╚╓╥, rc.conf ╓нцФ╓г╪║╓нйя©Т╓нцм╓Р YES ╓х╓╧╓К╩Ж╓к╓Х╓ц╓ф╓Ё╓н╣║г╫╓Рм╜╦З╓к╓╧╓К╓Ё╓х╓╛╓г╓╜╓ч╓╧. gateway_enable=YES # Set to YES if this host will be a gateway ╓Ё╓н╔╙╔в╔╥╔Г╔С╓к╓Х╓ц╓ф sysctl ╓нйя©Т net.inet.ip.forwarding ╓╛ 1 ╓к╓й╓Й╓ч╓╧. ╓ш╓х╓С╓и╓н╬Л╧Г, ╔К║╪╔©╓к╓д╓╓╓ф╓н╬ПйС╓Рф╠╓╦╔м╔ц╔х╔О║╪╔╞╓нб╬╓н╥в╩╩╣║еЫ╓кцн╓И╓╩╓К╓©╓А╓к, ╥по╘ю╘╦Ф╓н╓©╓А╓н╔в╔М╔╩╔╧╓РаЖ╓И╓╩╓Ки╛мв╓╛╓╒╓К╓г╓╥╓Г╓╕. FreeBSD ╓к╓о BSD ╓ни╦╫Ю╥по╘ю╘╦Ф╔г║╪╔Б╔С╓г╓╒╓К routed ╓╛иуб╟╓╥╓ф╓╓╓ч╓╧╓╛, ╓Х╓Ййё╩╗╓й╬У╤╥╓кбп╫Х╓╧╓К╓©╓А╓к╓о GaTeD(http://www.gated.org/ ╓╚╓ИфЧ╪Й╡дг╫)╓Р╩хмя╓╧╓К╓Ё╓х╓Б╓г╓╜╓ч╓╧. 3_5Alpha7 ╓к╓╙╓╓╓ф FreeBSD ╓╛╔╣╔щ║╪╔х╓╣╓Л╓ф╓╓╓ч╓╧. цМ╟у╓╥╓ф╓ш╓╥╓╓╓н╓о, FreeBSD ╓Р╓Ё╓н╓Х╓╕╓к╓╥╓ф╩хмя╓╥╓ф╓╓╓К╬Л╧Г╓г╓Б, ╔К║╪╔©╓к╢ь╓╧╓К╔╓╔С╔©║╪╔м╔ц╔хи╦╫Ю╓ни╛мв╬Р╥О╓Р╢╟а╢╓к╓окЧ╓©╓╥╓ф╓╓╓й╓╓ ╓х╓╓╓╕╓Ё╓х╓г╓╧. ╓╥╓╚╓╥, иАдл╓к╩хмя╓╧╓К╬Л╧Г╓к╓о╓ш╓х╓С╓илДбЙ╓╒╓Й╓ч╓╩╓С. Win95 ╓наЖ╓ц╓ф╓╓╓К╔ч╔╥╔С╓Р, FreeBSD ╥пмЁ╓г╔╓╔С╔©║╪╔м╔ц╔х╓кюэбЁ╓г╓╜╓ч╓╧╓╚? дл╬О, ╓Ё╓н╪алД╓╛╫п╓ф╓╞╓К╬У╤╥╓о╪╚бП╓кфСбФ╓н PC ╓╛╓╒╓Й, ╟ЛбФ╓г╓о FreeBSD ╓╛, ╓Б╓╕╟ЛбФ╓г╓о Win95 ╓╛аЖ╓ц╓ф╓╓╓К╓Х╓╕╓й╬Л╧Г╓г╓╧. ╓Ё╓Ё╓г╓Д╓М╓╕╓х╓╥╓ф╓╓╓╕╩Ж╓о FreeBSD ╓наЖ╓ц╓ф╓╓╓К╥в╩╩╣║╓Р╔╓╔С╔©║╪╔м╔ц╔х ╓кюэбЁ╓╥, Win95 ╓наЖ╓ц╓ф╓╓╓К╔ч╔╥╔С╓╚╓И╓о FreeBSD ╓наЖ╓ц╓ф╓╓╓К╔ч╔╥╔С╓Р╥пмЁ╓╥╓фюэбЁ╓Р╧т╓й╓╕╩Ж╓г╓╧. ╓Ё╓Л╓офС╓да╟╓н╪алД╓нфцйл╓й╬Л╧Г╓каЙеЖ╓╥╓ч╓╧. ... ╓г, еЗ╓╗╓о║ж╓о╓╓║в╓г╓╧. FreeBSD 3.x ╓н╔Ф║╪╔╤╔Б║╪╔и ppp ╓к╓о ╔╙╔в╔╥╔Г╔С╓╛╓╒╓Й╓ч╓╧. ppp ╓Р ╔╙╔в╔╥╔Г╔Сиу╓╜╓г╣╞ф╟╓╥, /etc/rc.conf ╓к╓╒╓К gateway_enable ╓Р YES ╓кюъдЙ╓╥╓ч╓╧. ╓╫╓╥╓ф Windows ╔ч╔╥╔С╓Рю╣╓╥╓╞юъдЙ╓╧╓Л╓п, ╓╜╓а╓С╓хф╟╨Н╓╧╓К╓г╓╥╓Г╓╕. юъдЙ╓к╢ь╓╧╓К╓╣╓И╓к╬э╓╥╓╓╬ПйС╓о, Steve Sims ╩А╓к╓Х╓К Pedantic PPP Primer ╓к╓╒╓Й╓ч╓╧. ╔╚║╪╔м╔К╔Б║╪╔и ppp ╓РмЬмя╓╧╓К╬Л╧Г╓Д, ╔╓╔С╔©║╪╔м╔ц╔х╓х╓н╔╓║╪╔╣╔м╔ц╔хюэбЁ╓╛мЬмя╓г╓╜╓К╬Л╧Г╓о, natd ╓РмЬмя╓╧╓Ки╛мв╓╛╓╒╓Й╓ч╓╧. ╓Ё╓н FAQ ╓н natd ╓н╔╩╔╞╔╥╔Г╔С╓Р╩╡╬х╓╥╓ф╓╞╓ю╓╣╓╓. ISC ╓╚╓И╔Й╔Й║╪╔╧╓╣╓Л╓ф╓╓╓К BIND ╓н╨г©╥хг╓о╔Ё╔С╔я╔╓╔К╓г╓╜╓й╓╓╓С╓г╓╥╓Г╓╕╓╚? BIND ╓нгшишй╙╓х FreeBSD ╓х╓г╓о cdefs.h ╓х╓╓╓╕╔у╔║╔╓╔К╓нцФ╓г╔г║╪╔©╥©╓нл╥╫Б╓╛╓╒╓Й╓ч╓╧. compat/include/sys/cdefs.h ╓Р╨О╫Э╓╥╓ф╓╞╓ю╓╣╓╓. FreeBSD ╓г SLIP ╓х PPP ╓о╩х╓╗╓ч╓╧╓╚? ╩х╓╗╓ч╓╧. FreeBSD ╓Рмя╓╓╓фб╬╓н╔╣╔╓╔х╓кюэбЁ╓╧╓К╬Л╧Г╓к╓о, slattach, sliplogin, pppd ╓╫╓╥╓ф ppp ╓н╔ч╔к╔Е╔╒╔К╔з║╪╔╦╓Р╦╚╓ф╓╞╓ю╓╣╓╓. pppd ╓х ppp ╓о, PPP ╓н╔╣║╪╔п, ╔╞╔И╔╓╔╒╔С╔хн╬йЩ╓н╣║г╫╓Р╩Щ╓ц╓ф╓╓╓ч╓╧. sliplogin ╓о SLIP ╓н╔╣║╪╔пюЛмя╓г, slattach ╓о SLIP ╓н╔╞╔И╔╓╔╒╔С╔хюЛмя╓г╓╧. ╓Ё╓Л╓И╓н╔в╔М╔╟╔И╔Ю╓н╡РюБ╓╛, FreeBSD ╔о╔С╔и╔ж╔ц╔╞╓н╟й╡╪╓н╔╩╔╞╔╥╔Г╔С╓к╓╒╓Й╓ч╓╧. SLIP ╔╣║╪╔п SLIP ╔╞╔И╔╓╔╒╔С╔х ╔╚║╪╔м╔К PPP ╔Ф║╪╔╤╔Б║╪╔и PPP ║ж╔╥╔╖╔К╔╒╔╚╔╕╔С╔х║в╓Рдл╓╦╓ф╓н╓ъ╔╓╔С╔©║╪╔м╔ц╔х╓ь╔╒╔╞╔╩╔╧╡дг╫╓й╬Л╧Г, slirp package ╓ъ╓©╓╓╓й╓Б╓н╓╛мъ╓╥╓╞╓й╓К╓╚╓Б╓╥╓Л╓ч╓╩╓С╓м. ╓Ё╓Л╓Р╩х╓╗╓п, ╔М║╪╔╚╔К╔ч╔╥╔С╓╚╓Ид╬юэ ftp ╓Д http ╓н╓Х╓╕╓й╔╣║╪╔с╔╧╓к(╦бдЙе╙╓г╓о╓╒╓Й╓ч╓╧╓╛)╔╒╔╞╔╩╔╧╓╧╓К╓Ё╓х╓╛╓г╓╜╓ч╓╧. FreeBSD ╓о NAT ╓╚ IP ╔ч╔╧╔╚╔Л║╪╔и╓Р╔╣╔щ║╪╔х╓╥╓ф╓╓╓ч╓╧╓╚? ╔М║╪╔╚╔К╓й╔╣╔ж╔м╔ц╔х (╟ЛбФ╟й╬Е╓н╔М║╪╔╚╔К╔ч╔╥╔С) ╓Р╩Щ╓ц╓ф╓╓╓К╓╛, ╔╓╔С╔©║╪╔м╔ц╔х╔в╔М╔п╔╓╔ю╓╚╓И 1 ╓д╓╥╓╚ IP ╔╒╔и╔Л╔╧╓нЁД╓ЙеЖ╓ф╓Р╪У╓╠╓ф╓╓╓й╓╓╬Л╧Г(╓ч╓©╓о IP ╔╒╔и╔Л╔╧╓Рф╟е╙╓кЁД╓ЙеЖ╓ф╓И╓Л╓ф╓╓╓К╬Л╧Г╓г╓Б), natd ╔в╔М╔╟╔И╔Ю╓Р╩х╓╓╓©╓╞╓й╓К╓╚╓Б╓╥╓Л╓ч╓╩╓С╓м. natd ╓Р╩х╓╗╓п, 1 ╓д╓╥╓╚ IP ╔╒╔и╔Л╔╧╓Р╩Щ╓ц╓ф╓╓╓й╓╓╬Л╧Г╓г╓Б, ╔╣╔ж╔м╔ц╔ха╢бн╓Р╔╓╔С╔©║╪╔м╔ц╔х╓кюэбЁ╓╣╓╩╓К╓Ё╓х╓╛╓г╓╜╓ч╓╧. ppp ╓Бф╠мм╓н╣║г╫╓Р╩Щ╓ц╓ф╓╙╓Й, ╔╧╔╓╔ц╔а╓гм╜╦З╓к╓╧╓К╓Ё╓х╓╛╓г╓╜╓ч╓╧. ╓и╓а╓И╓н╬Л╧Г╓Б alias ╔И╔╓╔ж╔И╔Й╓╛╩х╓О╓Л╓ч╓╧. /dev/ed0 ╔г╔п╔╓╔╧╓Р╨Ню╝╓╧╓К╓Ё╓х╓╛╓г╓╜╓ч╓╩╓С. Berkeley UNIX ╓к╓╙╓╠╓К╔м╔ц╔х╔О║╪╔╞╓н╧╫ю╝╓к╓╙╓╓╓ф, ╔м╔ц╔х╔О║╪╔╞╓н╔╓╔С╔©╔у╔╖║╪╔╧╓о╔╚║╪╔м╔К╔Ё║╪╔и╓╚╓И╓н╓ъ, д╬юэ╓╒╓д╓╚╓╕╓Ё╓х╓╛╓г╓╜╓ч╓╧. ╓Х╓Й╬э╓╥╓╞цн╓Й╓©╓╓╬Л╧Г╓о, /etc/rc.network ╓х╓╓╓╕╔у╔║╔╓╔К╓Д, ╓Ё╓н╔у╔║╔╓╔К╓нцФ╓к╫Я╓╓╓ф╓╒╓К, ╓╣╓ч╓╤╓ч╓й╔в╔М╔╟╔И╔Ю╓к╓д╓╓╓ф╓н╔ч╔к╔Е╔╒╔К╔з║╪╔╦╓Р╦╚╓ф╓╞╓ю╓╣╓╓. ╓╫╓Л╓г╓Б╓ч╓юй╛╓╚╓И╓й╓╓╬Л╧Г╓к╓о, б╬╓н BSD ╥о╓н OS ╓н╔м╔ц╔х╔О║╪╔╞╢имЩ╓к╓д╓╓╓ф╓нкэ╓Рфи╓Ю╓ы╓╜╓г╓╥╓Г╓╕. ╓╢╓╞╬╞╓╥╓ннЦЁ╟╓Р╓н╓╬╓╓╓ф╓о, FreeBSD ╓н╔м╔ц╔х╔О║╪╔╞╢имЩ╓о SunOS 4.0 ╓Д Ultrix ╓х╢Пкэе╙╓кф╠╓╦╓г╓╧. Ethernet ╔╒╔и╔Л╔╧╓н╔╗╔╓╔Й╔╒╔╧(alias)╓о╓и╓н╓Х╓╕╓к╓╥╓фюъдЙ╓г╓╜╓ч╓╧╓╚? ifconfig ╓н╔Ё╔ч╔С╔и╔И╔╓╔С╓к netmask 0xffffffff ╓Рди╡ц╓╥╓ф, ╪║╓н╓Х╓╕╓к╫Я╓╓╓ф╓╞╓ю╓╣╓╓. &prompt.root; ifconfig ed0 alias 204.141.95.2 netmask 0xffffffff 3C503 ╓гб╬╓н╔м╔ц╔х╔О║╪╔╞╔щ║╪╔х╓Р╩хмя╓╧╓К╓к╓о╓и╓н╓Х╓╕╓к╓╧╓Л╓п╓Х╓╓╓г╓╧╓╚? б╬╓н╔щ║╪╔х╓Р╩хмя╓╥╓©╓╓╬Л╧Г╓к╓о, ifconfig ╓н╔Ё╔ч╔С╔и╔И╔╓╔С╓к╔я╔И╔А║╪╔©╓Рди╡ц╓╥╓й╓╠╓Л╓п╓й╓Й╓ч╓╩╓С. ╔г╔у╔╘╔К╔х╓г╓о link0 ╓╛мя╓╓╓И╓Л╓К╓Х╓╕╓к╓й╓ц╓ф╓╓╓ч╓╧. BNC ╓н╓╚╓О╓Й╓к AUI ╔щ║╪╔х╓Р╩хмя╓╥╓©╓╓╬Л╧Г╓к╓о, link2 ╓х╓╓╓╕╔я╔И╔А║╪╔©╓Рди╡ц╓╥╓ф╓╞╓ю╓╣╓╓. ╓Ё╓Л╓И╓н╔у╔И╔╟╓о, /etc/rc.conf ╓к╓╒╓К ifconfig_* ╓нйя©Т╓Р╩х╓ц╓ф╩ьдЙ╓╣╓Л╓К╓о╓╨╓г╓╧. FreeBSD ╓х╓н╢ж╓г NFS ╓╛╓╕╓ч╓╞╓г╓╜╓ч╓╩╓С. PC мя╓н╔м╔ц╔х╔О║╪╔╞╔╚║╪╔и╓к╓Х╓ц╓ф╓о, NFS ╓н╓Х╓╕╓й, ╔м╔ц╔х╔О║╪╔╞╓Р╧С╩х╓╧╓К╔╒╔в╔Й╔╠║╪╔╥╔Г╔С╓к╓╙╓╓╓флДбЙ╓Р╣╞╓Ё╓╧╓Б╓н╓╛╓╒╓Й╓ч╓╧. ╓Ё╓нею╓к╢ь╓╥╓ф╓о FreeBSD ╔о╔С╔и╔ж╔ц╔╞╓н║жNFS║в╓Р╩╡╬х╓╥╓ф╓╞╓ю╓╣╓╓. ╡©╦н Linux ╓н╔г╔ё╔╧╔╞╓Р NFS ╔ч╔╕╔С╔х╓г╓╜╓й╓╓╓н╓г╓╥╓Г╓╕╓╚? Linux ╓н NFS ╓н╔Ё║╪╔и╓к╓о, ╣Ж╡д╓╣╓Л╓©╔щ║╪╔х╓╚╓И╓н╔Й╔╞╔╗╔╧╔х╓╥╓╚╪У╓╠╓д╓╠╓й╓╓╓Б╓н╓╛╓╒╓Й╓ч╓╧. ╟й╡╪╓Р╩Н╓╥╓ф╓ъ╓ф╓╞╓ю╓╣╓╓. &prompt.root; mount -o -P linuxbox:/blah /mnt ╡©╦н Sun ╓н╔г╔ё╔╧╔╞╓Р NFS ╔ч╔╕╔С╔х╓г╓╜╓й╓╓╓н╓г╓╥╓Г╓╕╓╚? SunOS 4.X ╓╛аЖ╓ц╓ф╓╓╓К Sun Workstation ╓о, ╣Ж╡д╓╣╓Л╓©╔щ║╪╔х╓╚╓И╓н╔ч╔╕╔С╔хмв╣А╓╥╓╚╪У╓╠╓д╓╠╓ч╓╩╓С. ╟й╡╪╓Р╩Н╓╥╓ф╓ъ╓ф╓╞╓ю╓╣╓╓. &prompt.root; mount -o -P sunbox:/blah /mnt mountd ╓╚╓И can't change attributes ╓х╓╓╓╕╔А╔ц╔╩║╪╔╦╓╛╓╨╓ц╓х╫пбЁ╓╠╓ф╓╓╓ф, FreeBSD ╓н NFS ╔╣║╪╔п╓г╓о bad exports list ╓хи╫╪╗╓╣╓Л╓ч╓╧. ╓Ё╓Л╓о╡©╓╛╦╤╟Ь╓й╓н╓г╓╥╓Г╓╕? ╨г╓Бни╓╞╓╒╓КлДбЙ╓о, &man.exports.5; ╓н╔ч╔к╔Е╔╒╔К╔з║╪╔╦╓н╟й╡╪╓ниТй╛╓Рю╣╓╥╓╞мЩ╡Р╓╥╓ф╓╓╓й╓╓╓Ё╓х╓г╓╧.
╓Ё╓н╔у╔║╔╓╔К╓нЁф╧т (# ╓г╓о╓╦╓ч╓К╔Ё╔А╔С╔х╧т╓Р╫Э╓╞) ╓о, NFS ╔╣║╪╔п╓н╔М║╪╔╚╔К╔у╔║╔╓╔К╔╥╔╧╔ф╔Ю╓кб╦╨ъ╓╧╓К, б╬╓н╔ш╔╧╔х╓к╔╗╔╞╔╧╔щ║╪╔х╓╣╓Л╓К╔ч╔╕╔С╔х╔щ╔╓╔С╔х (йё©Т╡д) ╓х, ╓╫╓Л╓кбп╓╧╓К╔╗╔╞╔╧╔щ║╪╔х╔у╔И╔╟╓Р╩ьдЙ╓╥╓ч╓╧. фцдЙ╓н╔╗╔╞╔╧╔щ║╪╔хюХ╔ш╔╧╔х╓╙╓Х╓с, ╓╧╓ы╓ф╓н╔ш╔╧╔х╓ке╛мя╓╣╓Л╓К╔г╔у╔╘╔К╔х╔╗╔С╔х╔Й╓он╬йЩ╓х╓Б, ╔╣║╪╔п╓нЁф╔М║╪╔╚╔К╔у╔║╔╓╔К╔╥╔╧╔ф╔Ю╓кбп╓╥╓ф╟Л╡С╓ю╓╠╓╥╓╚╩ьдЙ╓г╓╜╓ч╓╩╓С.
╓╣╓ф, ╓╒╓Й╓╛╓а╓й╢ж╟Ц╓╓╓Р╓╢мВ╓к╓й╓Л╓п╓о╓ц╓╜╓Й╓╧╓К╓г╓╥╓Г╓╕. ╓Б╓╥ /usr ╟й╡╪╓╛ц╠╟Л╓н╔у╔║╔╓╔К╔╥╔╧╔ф╔Ю╓г╓╒╓К (╓д╓ч╓Й /usr ╓к╡©╓Б╔ч╔╕╔С╔х╓╣╓Л╓й╓╓) ╬Л╧Г, ╪║╓н exports ╔Й╔╧╔х╓ою╣╓╥╓╞╓╒╓Й╓ч╓╩╓С. /usr/src client /usr/ports client ╟Л╓д╓н╔у╔║╔╓╔К╔╥╔╧╔ф╔Ю╓кбп╓╥╓фб╟ю╜╓н╩ьдЙ╓╛фС╧т╓к╓й╓ц╓ф╓╓╓ч╓╧. /usr ╓оф╠╓╦╔ш╔╧╔х client ╓к╔╗╔╞╔╧╔щ║╪╔х╓╣╓Л╓ч╓╧╓╚╓И, ю╣╓╥╓╓╫Я╓╜йЩ╓о╪║╓н╓Х╓╕╓к╓й╓Й╓ч╓╧. /usr/src /usr/ports client ╓Б╓╕╟Леы╔ч╔к╔Е╔╒╔К╔з║╪╔╦╓нй╦╬о╓РЁнг╖╓╧╓К╓х, ╓╒╓К╔ш╔╧╔х╓к╔╗╔╞╔╧╔щ║╪╔х╓╣╓Л╓КЁф╔у╔║╔╓╔К╔╥╔╧╔ф╔Ю╓нб╟ю╜╓о ╓╧╓ы╓ф╟Л╧т╓к╫Я╓╚╓Л╓ф╓╓╓й╓╠╓Л╓п╓й╓И╓й╓╓, ╓х╓й╓ц╓ф╓╓╓ч╓╧ (╓Ё╓Ё╓г╓о,║ж╔╒╔╞╔╩╔╧╡дг╫╓й╓╧╓ы╓ф╓н╔ш╔╧╔х║в ╓Б╟Л╓д╓нфхн╘╓╥╓©╔ш╔╧╔х╓х╓╥╓ф╟╥╓О╓Л╓К╓Ё╓х╓кцМ╟у╓╥╓ф╓╞╓ю╓╣╓╓). ╓Ё╓н╓Ё╓х╓о, ╔у╔║╔╓╔К╔╥╔╧╔ф╔Ю╓Р╔╗╔╞╔╧╔щ║╪╔х╓╧╓К╓©╓А╓к ╢Ял╞╓й╫Я╪╟╓Р╩х╓О╓й╓╠╓Л╓п╓й╓И╓й╓╓╦╤╟Ь╓к╓Б╓й╓ц╓ф╓╓╓К╓н╓г╓╧╓╛, ╓ш╓х╓С╓и╓н©м╓к╓х╓ц╓ф, ╓Ё╓Л╓олДбЙ╓к╓о╓й╓И╓й╓╓╓г╓╥╓Г╓╕. ╪║╓к╪╗╓╧╓н╓о, м╜╦З╓й exports ╔Й╔╧╔х╓ннЦ╓г╓╧. ╓Ё╓Ё╓г╓о, /usr ╓х /exports ╓╛╔М║╪╔╚╔К╔у╔║╔╓╔К╔╥╔╧╔ф╔Ю╓г╓╧. # Export src and ports to client01 and client02, but only # client01 has root privileges on it /usr/src /usr/ports -maproot=0 client01 /usr/src /usr/ports client02 # The "client" machines have root and can mount anywhere # up /exports. The world can mount /exports/obj read-only /exports -alldirs -maproot=0 client01 client02 /exports/obj -ro
PPP ╓г NeXTStep ╓кюэбЁ╓╧╓К╨щ╓клДбЙ╓╛╓╒╓К╓н╓г╓╧╓╛. /etc/rc.conf ╓нцФ╓г╪║╓нйя©Т╓Р NO ╓к╓╥╓ф, TCP extension ╓Рл╣╦З╓к╓╥╓ф╓ъ╓ф╓╞╓ю╓╣╓╓. tcp_extensions=NO Xylogic ╓н Annex ╓Бф╠мм╓нлДбЙ╓╛╓╒╓Й╓ч╓╧╓н╓г, Annex ╥пмЁ╓г PPP ╓Р╧т╓й╓╕╬Л╧Г╓к╓Б╓Ё╓нйя╧╧╓Р╧т╓ц╓ф╓╞╓ю╓╣╓╓. IP ╔ч╔К╔а╔╜╔Ц╔╧╔х(multicast)╓Рм╜╦З╓к╓╧╓К╓к╓о? FreeBSD 2.0 ╓╚╓╫╓Л╟й╧ъ╓г╓о, и╦╫Ю╓н╬Убж╓г╢╟а╢╓к╔ч╔К╔а╔╜╔Ц╔╧╔х╓кбп╠Ч╓╥╓ф╓╓╓ч╓╧. ╦╫╨ъ╩хмя╓╥╓ф╓╓╓К╥в╩╩╣║╓Р╔ч╔К╔а╔╜╔Ц╔╧╔х╓н╔К║╪╔©(router)╓х╓╥╓ф╩хмя╓╧╓К╓к╓о, MROUTING ╓х╓╓╓╕╔╙╔в╔╥╔Г╔С╓РдЙ╣а╓╥╓©╔╚║╪╔м╔К╓Р╨Н╓ц╓©╓╕╓╗╓г, mrouted ╓РаЖ╓И╓╩╓Ки╛мв╓╛╓╒╓Й╓ч╓╧. 2.2 ╓╚╓╫╓Л╟й╧ъ╓н FreeBSD ╓й╓И╓п, /etc/rc.conf ╓г╔у╔И╔╟ mrouted_enable ╓Р YES ╓к╔╩╔ц╔х╓╥╓ф╓╙╓╞╓Ё╓х╓г, ╣╞ф╟╩Ч╓к mrouted ╓Р╣╞ф╟╓г╓╜╓ч╓╧. MBONE мя╓н╔д║╪╔К╓о ports фБ╓нюЛмя╓н╔╚╔ф╔╢╔Й║╪ mbone ╓к╓╒╓Й╓ч╓╧. vic ╓Д vat ╓х╓╓╓ц╓©╡Я╣дмя╓н╔д║╪╔К╓Рц╣╓╥╓ф╓╓╓К╬Л╧Г╓о, ╓Ё╓н╬Л╫Й╓Р╦╚╓ф╓╞╓ю╓╣╓╓. ╬э╓╥╓╓╬ПйС╓о Mbone Information Web ╓к╓╒╓Й╓ч╓╧. DEC ╓н PCI ╔а╔ц╔в╔╩╔ц╔х╓Рмя╓╓╓ф╓╓╓К╔м╔ц╔х╔О║╪╔╞╔╚║╪╔и╓к╓о, ╓и╓н╓Х╓╕╓йй╙╓╛╓╒╓Й╓ч╓╧╓╚? Glen Foster ╩А╓к╓Х╓К╟ЛмВ╓к, ╨г╤А╓ню╫ий╓Рди╡ц╓╥╓©╓Б╓н╓Р╟й╡╪╓к╪╗╓╥╓ч╓╧. Vendor Model ---------------------------------------------- ASUS PCI-L101-TB Accton ENI1203 Cogent EM960PCI Compex ENET32-PCI D-Link DE-530 Dayna DP1203, DP2100 DEC DE435, DE450 Danpex EN-9400P3 JCIS Condor JC1260 Linksys EtherPCI Mylex LNP101 SMC EtherPower 10/100 (Model 9332) SMC EtherPower (Model 8432) TopWare TE-3500P Znyx (2.2.X) ZX312, ZX314, ZX342, ZX345, ZX346, ZX348 (3.X) ZX345Q, ZX346Q, ZX348Q, ZX412Q, ZX414, ZX442, ZX444, ZX474, ZX478, ZX212, ZX214 (10mbps/hd) ╡©╦н╪╚й╛╓н╔╣╔╓╔х╓н╔ш╔╧╔х╓кбп╓╥╓ф FQDN ╓Р╩хмя╓╧╓Ки╛мв╓╛╓╒╓К╓н╓г╓╧╓╚? ╪б╨щ╓к╓о╓╫╓н╔ш╔╧╔х╓ойл╓н╔и╔А╔╓╔С╓к╓╒╓К╓н╓г╓о╓й╓╓╓г╓╧╓╚. ╓©╓х╓╗╓п, foo.bar.edu ╓х╓╓╓╕╔и╔А╔╓╔С╓нцФ╓╚╓И, bar.edu ╔и╔А╔╓╔С╓к╓╒╓К mumble ╓х╓╓╓╕╔ш╔╧╔х╓Р╩ьдЙ╓╥╓©╓╓╬Л╧Г╓к╓о, mumble ╓ю╓╠╓г╓о╔ю╔А╓г, mumble.bar.edu ╓х╓╓╓╕ FQDN(fully-qualified domain name) ╓г╩ьдЙ╓╥╓й╓╠╓Л╓п╓й╓Й╓ч╓╩╓С. еаеЩе╙╓к, BSD ╓н BIND ╓н╔Й╔╬╔К╔п(resolver)╓г╓о╓Ё╓н╓Х╓╕╓й╩Ж╓о╡дг╫╓г╓╥╓©╓╛, FreeBSD ╓кфЧ╓ц╓ф╓╓╓К bind ╓н╦╫╨ъ╓н╔п║╪╔╦╔Г╔С╓г╓о, ╪╚й╛╟йЁ╟╓н╔и╔А╔╓╔С╓кбп╓╥╓ф FQDN ╓г╓й╓╓йлл╬╓Р╪╚ф╟е╙╓к╓д╓╠╓ф╓╞╓Л╓К╓Х╓╕╓й╩Ж╓о╓╒╓Й╓ч╓╩╓С. ╓╥╓©╓╛╓ц╓ф mumble ╓х╓╓╓╕╔ш╔╧╔хл╬╓о, mumble.foo.bar.edu ╓х╓╓╓╕л╬а╟╓╚, ╓Б╓╥╓╞╓о root ╔и╔А╔╓╔СфБ╓к╓╒╓К╬Л╧Г╓к╓╥╓╚е╛мя╓╣╓Л╓ч╓╩╓С. ╓Ё╓Л╓о, mumble.bar.edu ╓х mumble.edu ╓х╓╓╓╕╓Ё╓х╓й╓ц╓©╔и╔А╔╓╔Сл╬╓кбп╓╥╓ф╔ш╔╧╔хл╬╓н╔╣║╪╔а╓╛╧т╓й╓О╓Л╓ф╓╓╓© ╟йа╟╓н©╤╓КиЯ╓╓╓х╓о╟ш╓й╓ц╓©╓Б╓н╓г╓╧. ╓Ё╓н╓Х╓╕╓й╩Ж╓╛╟╜╓╓нЦ╓Б╓╥╓╞╓о ╔╩╔╜╔Е╔Й╔ф╔ё╔ш║╪╔К╓х╓ъ╓й╓╣╓Л╓КмЩмЁ╓к╓д╓╓╓ф╓о RFC 1535 ╓Р╦╚╓ф╓╞╓ю╓╣╓╓. /etc/resolv.conf ╓нцФ╓г domain foo.bar.edu ╓х╫Я╓╓╓ф╓╒╓К╧т╓Р, search foo.bar.edu bar.edu ╓н╓Х╓╕╓к╫Я╓╜╓╚╓╗╓К╓Ё╓х╓г, ╬Е╓н╓Х╓╕╓й╩Ж╓╛╓г╓╜╓ч╓╧. ╓╥╓╚╓╥, RFC 1535 ╓к╓╒╓К╓Х╓╕╓к, ╦║╨В╫Г╫Ь╓╛║жфБиТ(local)╓хЁ╟иТ(public)╓н╢имЩ╓н╤╜Ё╕║в╓Р╓ч╓©╓╛╓й╓╓╓Х╓╕╓к╓╥╓ф╓╞╓ю╓╣╓╓. ╓╧╓ы╓ф╓н╔м╔ц╔х╔О║╪╔╞╓наЮ╨Н╓кбп╓╥╓ф Permission denied ╓х╓╓╓╕╔А╔ц╔╩║╪╔╦╓╛и╫╪╗╓╣╓Л╓К╓н╓г╓╧╓╛. IPFIREWALL ╔╙╔в╔╥╔Г╔С╓Риу╓╠╓ф╔╚║╪╔м╔К╓Р╔Ё╔С╔я╔╓╔К╓╥╓©╬Л╧Г╓к╓о, 2.1-STABLE ╓нЁ╚х╞╓несцФ╓╚╓Ийя╧╧╓к╓й╓ц╓© 2.1.7R ╓ни╦╫Юе╙╓ййЩ©к╓х╓╥╓ф, лю╪╗е╙╓к╣Ж╡д╓╣╓Л╓ф╓╓╓й╓╓╓╧╓ы╓ф╓н╔я╔╠╔ц╔х╓омН╓х╓╣╓Л╓КюъдЙ ╓к╓й╓ц╓ф╓╓╓К╩Ж╓РЁп╓╗╓ф╓╙╓╓╓ф╓╞╓ю╓╣╓╓. ╓Б╓╥╔у╔║╔╓╔╒╔╕╔╘║╪╔К╓нюъдЙ╓Р╢ж╟Ц╓╗╓©╬Л╧Г╓к╔м╔ц╔х╔О║╪╔╞╓наЮ╨Н╓╛╨ф╓с╓г╓╜╓К ╓Х╓╕╓к╓╧╓К╓к╓о, root ╓г╔М╔╟╔╓╔С╓╥╓ф╪║╓н╔Ё╔ч╔С╔и╓Р╪б╧т╓╥╓ф╓╞╓ю╓╣╓╓. &prompt.root; ipfw add 65534 allow all from any to any /etc/rc.conf ╓к firewall_type='open' ╓Рди╡ц╓╥╓ф╓Б╓Х╓╓╓г╓╥╓Г╓╕. FreeBSD ╓н╔у╔║╔╓╔╒╔╕╔╘║╪╔К╓нюъдЙ╓к╓д╓╓╓ф╓н╬ПйС╓о FreeBSD ╔о╔С╔и╔ж╔ц╔╞╓н║ж╔у╔║╔╓╔╒╔╕╔╘║╪╔К║в╓к╓╒╓Й╓ч╓╧. IPFW ╓н╔╙║╪╔п╔ь╔ц╔и╓о╓и╓н╓╞╓И╓╓╓г╓╥╓Г╓╕╓╚? ╓Ё╓неЗ╓╗╓о, ╩х╓ц╓ф╓╓╓К╔К║╪╔К╔╩╔ц╔х╓х╔в╔М╔╩╔ц╔╣╓н╔╧╔т║╪╔и╓к╓Х╓ц╓ф╓ш╓х╓С╓и╥Х╓ч╓Й╓ч╓╧. ╔╓║╪╔╣╔м╔ц╔х╓кбп╓╥╓ф╬╞╓╥╓н╔К║╪╔К╔╩╔ц╔х╓ю╓╠╓Р╩х╓ц╓ф╓╓╓К╬Л╧Г╓к╓о, ╓ш╓х╓С╓и╓╫╓н╠ф╤а╓ол╣╩К╓г╓╜╓КдЬеы╓г╓╧. ╪б╨щ╓нб╛дЙцм╓Р╦╚╓й╓╓╓хкЧб╜╓г╓╜╓й╓╓йЩ║╧╓н╓©╓А╓к, ╪б╨щ╓нб╛дЙ╥К╡л╓Р╓╙╦╚╓╩╓╥╓ч╓╥╓Г╓╕. ╪║╓нб╛дЙ╓о 486-66(лУцМ: Intel ╪рю╫ CPU i486, 66MHz ╓н╓Ё╓х)╬Е╓г 2.2.5-STABLE ╓Р╩хмя╓╥╓ф╧т╓й╓О╓Л╓ч╓╥╓©. IPFW ╓ойя╧╧╓╛╡ц╓╗╓И╓Л╓ф, ip_fw_chk ╔К║╪╔а╔СфБ╓г╓╚╓╚╓К╩Ч╢ж╓Р б╛дЙ╓╥╓ф 1000 ╔я╔╠╔ц╔хкХ╓к╥К╡л╓Р╔Ё╔С╔╫║╪╔К╓ки╫╪╗╓╧╓К╓Х╓╕╓к╓й╓ц╓ф╓╓╓ч╓╧. ╓╫╓Л╓╬╓Л 1000 ╓╨╓д╓н╔К║╪╔К╓╛фЧ╓ц╓ф╓╓╓К 2 ╓д╓н╔К║╪╔К╔╩╔ц╔х╓г╔ф╔╧╔х╓╛╧т╓й╓О╓Л╓ч╓╥╓©. ╓р╓х╓длэ╓н╔К║╪╔К╔╩╔ц╔х╓о╨г╟╜╓н╔╠║╪╔╧╓Р╦╚╓К╓©╓А╓к ipfw add deny tcp from any to any 55555 ╓х╓╓╓╕╔К║╪╔К╓Р╥╚╓Ййж╓╥╓©╓Б╓н╓г╓╧. IPFW ╓н╔я╔╠╔ц╔х╔а╔╖╔ц╔╞╔К║╪╔а╔С╓о, ╔я╔╠╔ц╔х╓╛(╔щ║╪╔ххж╧Ф╓н╓╩╓╓╓г)╓Ё╓н╔К║╪╔К╓к╔ч╔ц╔а╓╥╓й╓╓╓Ё╓х╓╛╓О╓╚╓К╓ч╓г╓к, ╡©еы╓Б╪б╧т╓╣╓Л╓ч╓╧. ╓╫╓н╓©╓А, ╓Ё╓Л╓о╨г╟╜╓н╔╠║╪╔╧╓Р╪╗╓╥╓ч╓╧. ╓Ё╓н╔К║╪╔К╓Р 999 ╦д╥╚╓Ййж╓╥йб╓ы╓©╦Е╓к allow ip from any to any ╓╛╫Я╓╚╓Л╓ф╓╓╓ч╓╧. 2╓длэ╓н╔К║╪╔К╔╩╔ц╔х╓о, ╓й╓К╓ы╓╞аА╓╞╔а╔╖╔ц╔╞╓╛╫╙н╩╓╧╓К╓Х╓╕╓к╫Я╓╚╓Л╓©╓Б╓н╓г╓╧. ipfw add deny ip from 1.2.3.4 to 1.2.3.4 ╓Ё╓н╔К║╪╔К╓г╓о, х╞©╝╦╣╓н IP ╔╒╔и╔Л╔╧╓╛╔ч╔ц╔а╓╥╓й╓╓╓н╓г, ╔а╔╖╔ц╔╞╓о╓╧╓╟╓к╫╙н╩╓╥╓ч╓╧. ╬Е╓н╔К║╪╔К╔╩╔ц╔х╓х╓╙╓й╓╦╓Х╓╕╓к, 1000 ╦длэ╓н╔К║╪╔К╓о allow ip from any to any ╓г╓╧. 1 ╓длэ╓н╔К║╪╔К╔╩╔ц╔х╓н╬Л╧Г, ╔я╔╠╔ц╔х╓╒╓©╓Й╓н╔╙║╪╔п╔ь╔ц╔и╓о╓╙╓Х╓╫ 2.703ms/packet, ╓Ё╓Л╓о╓ю╓╓╓©╓╓ 1 ╓д╓н╔К║╪╔К╓╒╓©╓Й 2.7 ╔ч╔╓╔╞╔Миц╓╚╓╚╓ц╓ф╓╓╓К╓Ё╓х╓к╓й╓Й╓ч╓╧. ╓╥╓©╓╛╓ц╓ф, ╓Ё╓н╔К║╪╔К╓к╓╙╓╠╓К╔я╔╠╔ц╔х╫ХмЩ╩Ч╢ж╓нмЩоюе╙╓й╦бЁ╕╓о, кХицлС 370 ╔я╔╠╔ц╔х╓г╓╧. 10Mbps ╓н╔╓║╪╔╣╔м╔ц╔х╓г 1500 ╔п╔╓╔х╟й╡╪╓н╔я╔╠╔ц╔х╔╣╔╓╔╨╓Р╡╬дЙ╓╧╓К╓х, ╔п╔С╔ииЩ╓нмЬмя╦Зн╗╓о 55.5% ╓╛╦бЁ╕╓х╓й╓К╓Ё╓х╓к╓й╓Й╓ч╓╧. 2 ╓длэ╓н╔К║╪╔К╔╩╔ц╔х╓г╓о, ╓╫╓Л╓╬╓Л╓н╔я╔╠╔ц╔х╓╛╓╙╓Х╓╫ 1.172ms╓г╫ХмЩ╓╣╓Л╓ф╓╓╓ч╓╧╓н╓г, ╓ю╓╓╓©╓╓ 1 ╓д╓н╔К║╪╔К╓╒╓©╓Й 1.2 ╔ч╔╓╔╞╔Миц╓╚╓╚╓ц╓ф╓╓╓К╓Ё╓х╓к╓й╓Й╓ч╓╧. ╔я╔╠╔ц╔х╫ХмЩ╩Ч╢ж╓нмЩоюе╙╓й╦бЁ╕╓о, кХицлС 853 ╔я╔╠╔ц╔х╓х╓й╓Й╓ч╓╧╓н╓г, 10Mbps Ethernet ╓н╔п╔С╔ииЩ╓Р╩х╓╓юз╓К╓Ё╓х╓╛╓г╓╜╓ч╓╧. ╓Ё╓н╔ф╔╧╔х╓г╓н╔К║╪╔К©Т╓об©╡А╓╝╓К╓©╓А, ╪б╨щ╓к╩хмя╓╧╓К╨щ╓н╥К╡л╓Рх©╠г╓╥╓ф╓╓╓КлУ╓г╓о╓╒╓Й╓ч╓╩╓С. ╓Ё╓Л╓И╓о╬Е╓к╪╗╓╥╓©©Тцм╓Р╫п╓╧╓©╓А╓ю╓╠╓кмя╓╓╓И╓Л╓©╓Б╓н╓г╓╧. ╦Зн╗╓нни╓╓╔К║╪╔К╔╩╔ц╔х╓Р╨Н╓К╓©╓А╓к╓о, ╪║╓н╓Х╓╕╓й╩Ж╓Р╧м╓╗╓ф╓╙╓╠╓п╓Х╓╓╓г╓╥╓Г╓╕. ║жЁндЙ╓╥╓ф╓╓╓К║в╔К║╪╔К╓оюХф╛╓нйЩ╓к╩Щ╓ц╓ф╓╜╓ф╓╞╓ю╓╣╓╓. ╓Ё╓Л╓о, б©©Т╓н TCP ╓н╔х╔И╔у╔ё╔ц╔╞╓╛╓Ё╓н╔К║╪╔К╓г╫ХмЩ╓╣╓Л╓К╓©╓А╓г╓╧. ╓╫╓╥╓ф╓Ё╓н╔К║╪╔К╓на╟╓к╓о allow tcp ╓х╓╓╓╕╣╜╫р╓Рцж╓╚╓й╓╓╓г╓╞╓ю╓╣╓╓. ни╓╞╩х╓О╓Л╓К╔К║╪╔К╓Р, ╓╒╓ч╓Йни╓╞╩х╓О╓Л╓й╓╓╔К║╪╔К╓Х╓Й╓Б а╟╓нйЩ╓к(╓Б╓а╓М╓С╔у╔║╔╓╔╒╔╕╔╘║╪╔К╓н╣Ж╡дюъдЙ╓Рйя╓╗╓й╓╓хо╟о╓г) ╩Щ╓ц╓ф╓╜╓ф╓╞╓ю╓╣╓╓. ipfw -a l ╓н╓Х╓╕╓╥╓ф╔я╔╠╔ц╔х©Т╓неЩ╥в╓Р╪Х╓К╓Ё╓х╓г, ╓и╓н╔К║╪╔К╓╛╨г╓Б╓Х╓╞╩х╓О╓Л╓ф╓╓╓К╓╚╓Рд╢╓ы╓К╓Ё╓х╓╛╓г╓╜╓ч╓╧. ╔╣║╪╔с╔╧мв╣А╓Рб╬╓н╔ч╔╥╔С╓к╔Й╔ю╔╓╔Л╔╞╔х╓╧╓К╓к╓о? FTP ╓й╓и╓н╔╣║╪╔с╔╧╓н╔Й╔╞╔╗╔╧╔х╓о, socket ╔я╔ц╔╠║╪╔╦╓РмЬмя╓╥╓ф╔Й╔ю╔╓╔Л╔╞╔х╓г╓╜╓ч╓╧. socket ╔я╔ц╔╠║╪╔╦╓о ports ╓н sysutils ╔╚╔ф╔╢╔Й╓к╢ч╓ч╓Л╓ф╓╓╓ч╓╧. (/etc/inet.conf╓к╫Я╓╚╓Л╓ф╓╓╓К) ╔Ё╔ч╔С╔и╧т╓Р, ╪║╓н╓Х╓╕╓к socket ╓Р╦ф╓ж╓Х╓╕╓кйя╧╧╓╥╓ф╓╞╓ю╓╣╓╓. ftp stream tcp nowait nobody /usr/local/bin/socket socket ftp.foo.com ftp ╓Ё╓Ё╓г ftp.foo.com ╓о╔Й╔ю╔╓╔Л╔╞╔хюХ╓н╔ш╔╧╔хл╬, ╧т╓н╨г╦Е╓н ftp ╓о╔щ║╪╔хл╬╓г╓╧. ╔п╔С╔ииЩ╓н╢имЩ╓Р╧т╓й╓╗╓К╔д║╪╔К╓о╓и╓Ё╓г╪Й╓кфЧ╓Л╓И╓Л╓ч╓╧╓╚? FreeBSD мя╓н╔п╔С╔ииЩ╢имЩ╔д║╪╔К╓к╓о, л╣на╓г╪Й╓кфЧ╓Л╓И╓Л╓К ALTQ ╓х, Emerging Technologies ╓╚╓ИфЧ╪Й╓г╓╜╓К Bandwidth Manager ╓х╓╓╓╕╩тхн╓н╓Б╓н╓н 2 ╪ОнЮ╓╛╓╒╓Й╓ч╓╧. ╓й╓╪ /dev/bpf0: device not configured ╓╛╫п╓К╓н╓г╓╥╓Г╓╕╓╚? ╔п║╪╔╞╔Л║╪╔я╔╠╔ц╔х╔у╔ё╔К╔©(bpf) ╔и╔И╔╓╔п╓о, ╓╫╓Л╓РмЬмя╓╧╓К╔в╔М╔╟╔И╔Ю╓Р╪б╧т╓╧╓Ка╟╓км╜╦З╓к╓╥╓ф╓╙╓╞и╛мв╓╛╓╒╓Й╓ч╓╧. ╔╚║╪╔м╔К╔Ё╔С╔у╔ё╔╟╔у╔║╔╓╔К╓к, ╪║╓н╓Х╓╕╓кди╡ц╓╥╓ф╔╚║╪╔м╔К╓н╨ф╧╫цш╓Р╓╥╓ф╓╞╓ю╓╣╓╓. pseudo-device bpfilter # Berkeley Packet Filter ╓╫╓╥╓ф╨ф╣╞ф╟╓╥╓ф╓╚╓И, ╪║╓к╔г╔п╔╓╔╧╔н║╪╔и╓Р╨Ню╝╓╧╓Ки╛мв╓╛╓╒╓Й╓ч╓╧. ╓Ё╓Л╓о, ╪║╓н╓Х╓╕╓кфЧно╓╥, /dev ╓Рйя╧╧╓╧╓К╓Ё╓х╓г╧т╓й╓╓╓ч╓╧. &prompt.root; sh MAKEDEV bpf0 ╔г╔п╔╓╔╧╔н║╪╔и╓н╨Ню╝╓н╬э╨ы╓о, FreeBSD ╔о╔С╔и╔ж╔ц╔╞╓н║ж╔г╔п╔╓╔╧╔н║╪╔и║в╓Р╩╡╬х╓╥╓ф╓╞╓ю╓╣╓╓. Linux ╓н smbmount ╓н╓Х╓╕╓к, ╔м╔ц╔х╔О║╪╔╞╬Е╓н Windows ╔ч╔╥╔С╓н╔г╔ё╔╧╔╞╓Р╔ч╔╕╔С╔х╓╧╓К╓к╓о╓и╓╕╓╥╓©╓Ини╓╓╓н╓г╓╥╓Г╓╕? Ports Collection ╓к╢ч╓ч╓Л╓К sharity light ╔я╔ц╔╠║╪╔╦╓Р╩х╓ц╓ф╓╞╓ю╓╣╓╓, icmp-response bandwidth limit 300/200 pps ╓х╓╓╓╕╔А╔ц╔╩║╪╔╦╓╛╔М╔╟╔у╔║╔╓╔К╓к╦╫╓Л╓К╓н╓г╓╧╓╛, ╓и╓╕╓╓╓╕╓Ё╓х╓г╓╥╓Г╓╕? ╓Ё╓Л╓о, ╔╚║╪╔м╔К╪╚©х╓╚╓И║жICMP ╓Д TCP ╓н╔Й╔╩╔ц╔х (RST) ╠ЧеЗ╓Р, бееЖ╓й©Т╓Х╓Й╓Бб©╓╞аВ╓ц╓ф╓╓╓К║в╓х╓╓╓╕╓Ё╓х╓Р, ╓╒╓й╓©╓кеа╓╗╓К╔А╔ц╔╩║╪╔╦╓г╓╧. ICMP ╠ЧеЗ╓они╓╞, ╩х╓О╓Л╓ф╓╓╓й╓╓ UDP ╔щ║╪╔х╓кюэбЁ╓╥╓Х╓╕╓х╓╥╓©╥К╡л╓х╓╥╓фю╦ю╝╓╣╓Л╓ч╓╧. ╓ч╓©, TCP ╔Й╔╩╔ц╔х╓о╔╙║╪╔в╔С╓╣╓Л╓ф╓╓╓й╓╓ TCP ╔щ║╪╔х╓кюэбЁ╓╥╓Х╓╕╓х╓╥╓©╥К╡л╓х╓╥╓фю╦ю╝╓╣╓Л╓ч╓╧. ╓╫╓нб╬, ╓Ё╓Л╓И╓н╔А╔ц╔╩║╪╔╦╓╛и╫╪╗╓╣╓Л╓К╦╤╟Ь╓х╓й╓К╬У╤╥╓х╓╥╓ф, ╟й╡╪╓н╓Х╓╕╓й╓Б╓н╓╛╓╒╓Й╓ч╓╧. (фцдЙ╓н╔╩╔╜╔Е╔Й╔ф╔ё╬Е╓н╪Еею╓Р╟╜мя╓╥╓Х╓╕╓х╓╧╓К╧╤╥Б╓г╓о╓й╓╞) кдбГ╓й©Т╓н╔я╔╠╔ц╔х╓Р╩х╓ц╓©╤╞╟З╓й╔╣║╪╔с╔╧к╦Ё╡ (DoS) ╧╤╥Б. (╟ЛиТ╓н╔╕╔╖╔К╔н╔╕╔С╔щ║╪╔х╓Раю╓ц╓©╓Б╓н╓г╓о╓й╓╞) хС╬О╓к╧╜╓╓хо╟о╓н╔щ║╪╔х╓кюэбЁ╓Р╩Н╓ъ╓К╔щ║╪╔х╔╧╔╜╔Ц╔С. ╔А╔ц╔╩║╪╔╦цФ╓н╨г╫И╓н©Т╩З╓о, ╬Е╦б╓РюъдЙ╓╥╓й╓╚╓ц╓©╬Л╧Г╓к╔╚║╪╔м╔К╓╛аВ╓ц╓ф╓╓╓©╓г╓╒╓М╓╕╔я╔╠╔ц╔х╓н©Т╓Р╪╗╓╥, фСхжлэ╓н©Т╩З╓о, ╔я╔╠╔ц╔х©Т╓н╬Е╦бцм╓Р╪╗╓╥╓ч╓╧. ╓Ё╓н╬Е╦бцм╓о net.inet.icmp.icmplim ╓х╓╓╓╕ sysctl йя©Т╓Р╩х╓╕╓Ё╓х╓г, ╟й╡╪╓н╓Х╓╕╓кйя╧╧╡дг╫╓г╓╧. ╓Ё╓Ё╓г╓о╬Е╦б╓Р 1 иц╓╒╓©╓Й╓н╔я╔╠╔ц╔х©Т╓г 300 ╓к╓╥╓ф╓╓╓ч╓╧. &prompt.root; sysctl -w net.inet.icmp.icmplim=300 ╔╚║╪╔м╔К╓н╠ЧеЗю╘╦б╓Рл╣╦З╓к╓╩╓╨, ╔М╔╟╔у╔║╔╓╔КцФ╓н╔А╔ц╔╩║╪╔╦╓ю╓╠╓Рмчю╘╓╥╓©╓╓╬Л╧Г, net.inet.icmp.icmplim_output sysctl йя©Т╓Р╪║╓н╓Х╓╕╓к╓╧╓К╓Ё╓х╓г╫пно╓Р╩ъ╓А╓К╓Ё╓х╓╛╓г╓╜╓ч╓╧. &prompt.root; sysctl -w net.inet.icmp.icmplim_output=0 ╨г╦Е╓к, ╓Б╓╥╠ЧеЗю╘╦б╓Рл╣╦З╓к╓╥╓©╓╓╬Л╧Г╓о, net.inet.icmp.icmplim sysctl йя©Т╓к (╬Е╓ннЦ╓н╓Х╓╕╓к╓╥╓ф) 0 ╓РюъдЙ╓╧╓К╓Ё╓х╓г╪б╦╫╓г╓╜╓ч╓╧. ╓©╓ю╓╥╠ЧеЗю╘╦б╓Рл╣╦З╡╫╓╧╓К╓н╓о, ╬Е╣╜╓нмЩмЁ╓╚╓И╓╙╓╧╓╧╓А╓╥╓ч╓╩╓С.
PPP ppp ╓╛ф╟╓╜╓ч╓╩╓С. ╓и╓Ё╓Р╢ж╟Ц╓╗╓ф╓╓╓К╓н╓г╓╥╓Г╓╕? ╓ч╓╨ ppp ╓н╔ч╔к╔Е╔╒╔К╓х, FreeBSD ╔о╔С╔и╔ж╔ц╔╞╓н║жPPP║в╓Рфи╓С╓г╓ъ╓ч╓╥╓Г╓╕. ╪║╓к, set log Phase Chat Connect Carrier lcp ipcp ccp command ╓х╓╓╓╕л©нА╓Р ppp ╓н╔Ё╔ч╔С╔и╔в╔М╔С╔в╔х╓кбп╓╥╓фбг╓а╧Ч╓Ю╓╚, юъдЙ╔у╔║╔╓╔К /etc/ppp/ppp.conf ╓к╡ц╓╗╓ф(default ╔╩╔╞╔╥╔Г╔С╓нюХф╛╓к╡ц╓╗╓К╓н╓╛╟Лхжни╓╓╓г╓╥╓Г╓╕)╔М╔╟╓Рм╜╦З╓к╓╥╓ф╓ъ╓ф╓╞╓ю╓╣╓╓. ╓╫╓н╨щ, /etc/syslog.conf ╓к !ppp *.* /var/log/ppp.log ╓х╫Я╓╚╓Л╓©╧т╓╛╢ч╓ч╓Л╓ф╓╓╓К╓╚, ╓ч╓©, /var/log/ppp.log ╓╛б╦╨ъ╓╥╓ф╓╓╓К╓╚╓и╓╕╓╚Ён╓╚╓А╓ф╓╙╓╓╓ф╓╞╓ю╓╣╓╓. ╓╣╓ф, ╓Ё╓Л╓г╡©╓╛╣╞╓╜╓ф╓╓╓К╓н╓╚фм╓╜╩ъ╓А╓К╓©╓А╓к, ╔М╔╟╔у╔║╔╓╔К╓╚╓И╓©╓╞╓╣╓С╓н╬ПйС╓Рфю╓И╓Л╓К╓Х╓╕╓к╓й╓Й╓ч╓╥╓©. ╔М╔╟╓клУ╓нй╛╓И╓й╓╓иТй╛╓╛╓╒╓ц╓ф╓Б©╢гш╓╢л╣мя. ╓╒╓й╓©╓╛╫У╓╠╓Р╣А╓А╓©ц╞╓╚╓к╓х╓ц╓ф╓о, ╓╫╓ниТй╛╓╛╟улё╓Р╓й╓╧╬Л╧Г╓╛╓╒╓К╓н╓г╓╧. лУцМ ╔М╔╟╓н╪Хфю╓к syslog ╓Р╩хмя╓╧╓К╓Х╓╕╓к╓й╓ц╓©╓н╓о 2.2.5 ╟й╧ъ╓╚╓И╓г╓╧. ╩хмяцФ╓н ppp ╓н╔п║╪╔╦╔Г╔С╓г set log л©нА╓Р╡Р╪А╓╥╓й╓╓╬Л╧Г╓о, ╨г©╥хг╓Р╔ю╔╕╔С╔М║╪╔и╓╧╓ы╓╜╓г╓╧. FreeBSD ╓н 2.1.5 ╟й╧ъ╓г╔с╔К╔и╓г╓╜╓ч╓╧. ppp ╓Р╪б╧т╓╧╓К╓х╔о╔С╔╟╓╥╓ч╓╧ ╔ш╔╧╔хл╬╓н╡Р╥Х╓╛╓╕╓ч╓╞╓╓╓ц╓ф╓╓╓й╓╓╓н╓г╓╥╓Г╓╕. ╓ч╓╨, ╔Й╔╬╔К╔п(resolver)╓╛ /etc/hosts╓Р╩╡╬х╓╧╓К╓Х╓╕╓к, /etc/host.conf ╓н╨г╫И╓н╧т╓к host ╓х╫Я╓╜╧Ч╓С╓г╓╞╓ю╓╣╓╓. ╓д╓╝╓к, /etc/hosts ╓к╩хмя╓╥╓ф╓╓╓К╔ч╔╥╔С╓н╔╗╔С╔х╔Й╓Р╫Я╓╜╡ц╓╗╓ч╓╧. ╔М║╪╔╚╔К╓г╔м╔ц╔х╔О║╪╔╞╓Р╩хмя╓╥╓ф╓╓╓й╓╓╬Л╧Г╓о, localhost ╓н╧т╓Р╟й╡╪╓н╓Х╓╕╓кйя╧╧╓╥╓ф╓╞╓ю╓╣╓╓. 127.0.0.1 foo.bar.com foo localhost ╩хмя╓╥╓ф╓╓╓К╔ш╔╧╔х╓н╔╗╔С╔х╔Й╓Рди╡ц╓╥╓ф╓Б╓╚╓ч╓╓╓ч╓╩╓С. ╬э╨ы╓о╢ьо╒╓╧╓К╔ч╔С╔з║╪╔╦╓Р╩╡╬х╓╥╓ф╓╞╓ю╓╣╓╓. ppp ╓╛ ╔Б║╪╔и╓г╔ю╔╓╔╒╔К╓╥╓ф╓╞╓Л╓й╓╓ ╓ч╓╨╨г╫И╓к, ╔г╔у╔╘╔К╔х╔К║╪╔х╓╛Ённ╘╓╥╓ф╓╓╓К╓╚╓и╓╕╓╚╔а╔╖╔ц╔╞╓╥╓ф╓╞╓ю╓╣╓╓. netstat -rn ╓Р╪б╧т╓╧╓К╓х, ╟й╡╪╓н╓Х╓╕╓й╬ПйС╓╛и╫╪╗╓╣╓Л╓К╓о╓╨╓г╓╧. Destination Gateway Flags Refs Use Netif Expire default 10.0.0.2 UGSc 0 0 tun0 10.0.0.2 10.0.0.1 UH 0 0 tun0 ╓Ё╓Л╓о╓╒╓й╓©╓╛╔о╔С╔и╔ж╔ц╔╞╓Д╔ч╔к╔Е╔╒╔К, ppp.conf.sample ╓нцФ╓г╫п╓ф╓╞╓К╔╒╔и╔Л╔╧╓Р╩хмя╓╥╓ф╓╓╓К╓х╡╬дЙ╓╥╓©╬Л╧Г╓ннЦ╓г╓╧. ╔г╔у╔╘╔К╔х╔К║╪╔х╓╛Ённ╘╓╥╓ф╓╓╓й╓╓╬Л╧Г, ppp.conf ╓нцФ╓н HISADDR ╓╛мЩ╡Р╓г╓╜╓й╓╓, ╦е╓╓╔п║╪╔╦╔Г╔С╓н ppp ╓╛аЖ╓ц╓ф╓╓╓К╡дг╫ю╜╓╛╓╒╓Й╓ч╓╧. FreeBSD 2.2.5 ╓Х╓Йа╟╓н╔п║╪╔╦╔Г╔С╓киуб╟╓╥╓ф╓╓╓© ppp ╓Р╩хмя╓╥╓ф╓╓╓К╬Л╧Г, add 0 0 HISADDR ╓х╫Я╓╚╓Л╓©╧т╓Р╟й╡╪╓н╓Х╓╕╓к╫╓ю╣╓╥╓ф╓╞╓ю╓╣╓╓. add 0 0 10.0.0.2 netstat -rn ╓г╔г╔у╔╘╔К╔х╔К║╪╔х╓н╬ПйС╓╛и╫╪╗╓╣╓Л╓й╓╓╬Л╧Г, ╓Б╓╕╟Л╓д, /etc/rc.conf(2.2.2 ╓Х╓Йа╟╓н╔Й╔Й║╪╔╧╓г╓о /etc/sysconfig ╓х╦ф╓п╓Л╓ф╓╓╓ч╓╥╓©)╓нцФ╓г╔г╔у╔╘╔К╔х╓н╔К║╪╔©╓Р╦М╓ц╓фюъдЙ╓╥, ppp.conf ╓╚╓И delete ALL ╓н╧т╓Р╓╕╓ц╓╚╓Й╬ц╓╥╓ф╓╥╓ч╓ц╓©╡дг╫ю╜╓╛╓╒╓Й╓ч╓╧. ╓Ё╓н╬Л╧Г╓о, FreeBSD ╔о╔С╔и╔ж╔ц╔╞╓н║ж╔╥╔╧╔ф╔Ю╓н╨г╫╙юъдЙ║в╓н╧Ю╓Рфи╓ъд╬╓╥╓ф╓╞╓ю╓╣╓╓. No route to host ╓х╓о╓и╓╕╓╓╓╕╟улё╓г╓╧╓╚? ╓Ё╓н╔╗╔И║╪╓одл╬О, /etc/ppp/ppp.linkup ╓к╟й╡╪╓н╓Х╓╕╓й╔╩╔╞╔╥╔Г╔С╓╛л╣╓╓╬Л╧Г╓к╣╞╓Ё╓Й╓ч╓╧. MYADDR: delete ALL add 0 0 HISADDR ╓Ё╓Л╓оф╟е╙ IP ╔╒╔и╔Л╔╧╓Р╩хмя╓╥╓ф╓╓╓К╬Л╧Г, ╓ч╓©╓о╔╡║╪╔х╔╕╔╖╔╓╓н╔╒╔и╔Л╔╧╓Рцн╓И╓й╓╓╬Л╧Г╓к╓н╓ъи╛мв╓йюъдЙ╓г╓╧. ╔╓╔С╔©╔И╔╞╔ф╔ё╔ж╔Б║╪╔и╓Р╩хмя╓╥╓ф╓╓╓К╬Л╧Г, ╔я╔╠╔ц╔х╔Б║╪╔и╓кфЧ╓ц╓©╦Е╓г(╔в╔М╔С╔в╔х╓╛ PPP ╓хбГй╦╩З╓кйя╓О╓ц╓©╓И╔я╔╠╔ц╔х╔Б║╪╔и╓кфЧ╓ц╓©╓╥╓К╓╥╓г╓╧), ╟й╡╪╓нл©нА╓РфЧно╓╥╓ф╓╞╓ю╓╣╓╓. delete ALL add 0 0 HISADDR ╬э╓╥╓╓╬ПйС╓к╓д╓╓╓ф╓о, FreeBSD ╔о╔С╔и╔ж╔ц╔╞╓н║жPPP ╓хф╟е╙ IP юъдЙ║в╓н╧Ю╓Р╩╡╬х╓╥╓ф╓╞╓ю╓╣╓╓. 3 й╛╓ш╓и╥п╓д╓хюэбЁ╓╛юз╓Л╓ф╓╥╓ч╓╕ ppp ╓н╔©╔╓╔Ю╔╒╔╕╔х╓о ╔г╔у╔╘╔К╔х╓г╓о 3 й╛╓г╓╧. ╓Ё╓Л╓о set timeout NNN ╓х╓╓╓╕л©нА╓к╓Х╓ц╓фд╢ю╟╓╧╓К╓Ё╓х╓╛╓г╓╜╓ч╓╧. NNN ╓к╓о, юэбЁ╓╛юз╓Л╓К╓ч╓г╓н╔╒╔╓╔и╔К╩Ч╢ж╓╛иц©Т╓гфЧ╓Й╓ч╓╧. NNN ╓╛ 0 ╓н╬Л╧Г, ╔©╔╓╔Ю╔╒╔╕╔х╓к╓Х╓Кюзцг╓о╣╞╓Ё╓Й╓ч╓╩╓С. ╓Ё╓н╔Ё╔ч╔С╔и╓о ppp.conf ╓кфЧ╓Л╓К╓Ё╓х╓Б, ╔╓╔С╔©╔И╔╞╔ф╔ё╔ж╔Б║╪╔и╓г╔в╔М╔С╔в╔х╓╚╓ИфЧно╓╧╓К╓Ё╓х╓Б ╓г╓╜╓ч╓╧. ╔╫╔╠╔ц╔х╓Рмя╓╓╓К telnet ╓╚ pppctl ╓Р╩хмя╓╥, ppp ╔╣║╪╔п╓кюэбЁ╓╧╓К╓Ё╓х╓к╓Х╓ц╓ф, ╡СюЧ╓╛╔╒╔╞╔ф╔ё╔ж╓й╢ж╓к╦бдЙ╓╥╓ф╔©╔╓╔Ю╔╒╔╕╔х╓н╩Ч╢ж╓Рд╢ю╟╓╧╓К╓Ё╓х╓Б╡дг╫╓г╓╧. лУцМ pppctl ╓о 2.2.5R ╓╚╓И╓г╓╧. ╬э╓╥╓╓╬ПйС╓о ppp ╓н╔ч╔к╔Е╔╒╔К╔з║╪╔╦╓Р╩╡╬х╓╥╓ф╓╞╓ю╓╣╓╓. иИ╡ы╓╛╧Б╓╓╓хюэбЁ╓╛юз╓Л╓ф╓╥╓ч╓╕ Link Quality Reporting(LQR)╓нюъдЙ╓Р╧т╓ц╓ф╓╓╓К╬Л╧Г, ╔ч╔╥╔С╓хюэбЁюХ╓н╢ж╓гхС╬О╓к╓©╓╞╓╣╓С╓н LQR ╔я╔╠╔ц╔х╓╛╪╨╓О╓Л╓ф╓╓╓К╡дг╫ю╜╓╛╓╒╓Й╓ч╓╧. ╥К╡л╓х╓╥╓ф ppp ╓о╡СюЧ╓н╤Я╧Г╓╓╓╛╟╜╓╓╓х╧м╓╗, ╡СюЧ╓Рюзцг╓╧╓К╓н╓г╓╧. 2.2.5 ╓Х╓Йа╟╓н╔п║╪╔╦╔Г╔С╓н FreeBSD ╓г╓о LQR ╓о╔г╔у╔╘╔К╔х╓гм╜╦З╓к╓й╓ц╓ф╓╓╓ч╓╧. ╦╫╨ъ╓г╓о╔г╔у╔╘╔К╔х╓н╬Убж╓гл╣╦З╓г╓╧. LQR ╓о╟й╡╪╓нл©нА╓гл╣╦З╓к╓╧╓К╓Ё╓х╓╛╓г╓╜╓ч╓╧. disable lqr юэбЁ╓╛╔И╔С╔ю╔Ю╓кюз╓Л╓ф╓╥╓ч╓╕ ╔н╔╓╔╨╓нб©╓╓╡СюЧ, ╓╒╓К╓╓╓обт╓а╣║г╫иу╓╜╓н╡СюЧ╓г╓о, ╩Ч║╧╔Б╔г╔Ю╓╛(╦М╓ц╓ф)╔╜╔Ц╔Й╔╒╓Р╪╨╓ц╓©╓х╩в╓╓╧Ч╓ъ, ╡СюЧ╓╛юзцг╓╣╓Л╓ф╓╥╓ч╓╕╓Ё╓х╓╛╓╒╓Й╓ч╓╧. бГб©©Т╓н╔Б╔г╔Ю╓г╓о, ╟Л╩Че╙╓й╔╜╔Ц╔Й╔╒╓нас╪╨╓Р╓и╓Л╓╞╓И╓╓╓н╩Ч╢ж╓г╦║╫п╓╧╓К╓╚╓Р, юъдЙ╓г╥Х╓А╓К╓Ё╓х╓╛╓г╓╜╓ч╓╧. нЦ╓╗╓п USR Sportster ╓г╓о, S10 ╔Л╔╦╔╧╔© ╓нцм╓Р 10 гэ╓╥╓©иц©Т╓╛╓╫╓нцм╓к╓й╓Й╓ч╓╧. ╓Ё╓н╬Л╧Г, ╔Б╔г╔Ю╓Р╓Б╓ц╓х╓н╓С╓с╓Й╡╟╓╣╓С╓к╓╧╓К╓к╓о, dial ╧т╓к╪║╓н╓Х╓╕╓йй╦╩ЗнС╓Р╡ц╓╗╓К╓хни╓╓╓г╓╥╓Г╓╕. set dial "...... ATS10=10 OK ......" ╬э╓╥╓╞╓о╓╙╩х╓╓╓н╔Б╔г╔Ю╓н╔ч╔к╔Е╔╒╔К╓Р╓╢мВ╓╞╓ю╓╣╓╓. юэбЁ╓╛ит╣╛б╖╓к╔о╔С╔╟╔╒╔ц╔в╓╥╓ф╓╥╓ч╓╕ ╓©╓╞╓╣╓С╓н©м╓╛, ╦╤╟Ьитлю╓н╔о╔С╔╟╔╒╔ц╔в╓Р╥п╦Ё╓╥╓ф╓╓╓ч╓╧. ╦║╬з╓н╓©╓А╓ки╛мв╓й╓н╓о, ╓ч╓╨╓и╓а╓Иб╕╓н╔Й╔С╔╞╓г╓╫╓Л╓╛╣╞╓Ё╓ц╓ф╓╓╓К╓╚, ╓х╓╓╓╕╓Ё╓х╓г╓╧. Ё╟иТюэбЁ╥©╔Б╔г╔Ю╓РмЬмя╓╥╓ф╓╓╓К╓й╓И, ц╠╓к ping ╓Р╩х╓╕╓Ё╓х╓г, ╔г║╪╔©╓РаВ©╝╓╧╓К╓х╓╜╓к TD ╔И╔С╔в╓╛еюеТ╓╧╓К╓╚╓и╓╕╓╚╓РЁнг╖╓╧╓К╓Ё╓х╓╛╓г╓╜╓ч╓╧. ╓Б╓╥, TD ╔И╔С╔в╓╛еюеТ╓╥╓ф, RD ╔И╔С╔в╓╛еюеТ╓╥╓й╓╠╓Л╓п, лДбЙ╓о╡СюЧ╓н╦Ч╓Ё╓╕б╕╓к╓╒╓Й╓ч╓╧. TD ╓╛еюеТ╓╥╓й╓╠╓Л╓п, лДбЙ╓о╡СюЧ╓н╓Ё╓а╓Иб╕╓г╓╧. фБб╒╥©╔Б╔г╔Ю╓н╬Л╧Г, ppp.conf ╔у╔║╔╓╔К╓к set server ╔Ё╔ч╔С╔и╓РфЧ╓Л╓Ки╛мв╓╛╓╒╓К╓г╓╥╓Г╓╕. ╡СюЧ╓╛юзцг╓╣╓Л╓©╓х╓╜, pppctl ╓Р╩х╓ц╓ф ppp ╓кюэбЁ╓╥╓ф╓╞╓ю╓╣╓╓. ╓╫╓н╓х╓╜, ╔м╔ц╔х╔О║╪╔╞юэбЁ╓╛╣ч╓киЭ╣Л(©гцг╔╫╔╠╔ц╔х╓ь╓н╔╒╔╞╔╩╔╧╓г, ppp ╓╛иЭЁХ╓╥╓ч╓╧)╓╧╓К╓╚, ╓Б╓╥╓╞╓оюэбЁ╪╚бн╓╛а╢╓╞╓г╓╜╓й╓╓(╓©╓ю╓╥, ppp ╣╞ф╟╩Ч╓к set socket ╔Ё╔ч╔С╔и╓╛╓а╓Ц╓С╓х╪б╧т╓╣╓Л╓ф╓╓╓К╓х╓╥╓ч╓╧)╓х╓╥╓©╓И, лДбЙ╓о╡СюЧ╓н╓Ё╓а╓Иб╕╓г╓╧. ╓Б╓╥, юэбЁ╡дг╫╓г, ╓╚╓д╬У╤╥╓╛йя╡╫╓╥╓й╓╠╓Л╓п, set log local async ╓Р╩х╓ц╓ф╔М║╪╔╚╔КхСф╠╢Э╔М╔╟(async logging)╓Рм╜╦З╓к╓╥, ping ╓Рб╬╓н╔╕╔ё╔С╔и╔╕╓╚╔©║╪╔ъ╔й╔К╓╚╓И╩х╓ц╓ф╓╞╓ю╓╣╓╓. хСф╠╢Э╔М╔╟╓к╓о, ╓Ё╓а╓Иб╕╓н╔Й╔С╔╞╓наВ╪У©╝╔г║╪╔©╓╛╣╜о©╓╣╓Л╓ч╓╧. ╓Б╓╥, ╔г║╪╔©╓╛аВ©╝╓╣╓Л╓©╓к╓Б╓╚╓╚╓О╓И╓╨йж╓ц╓фмХ╓ф╓╓╓й╓╠╓Л╓п, лДбЙ╓о╡СюЧ╓н╦Ч╓Ё╓╕б╕╓к╓╒╓К╓Ё╓х╓к╓й╓Й╓ч╓╧. лДбЙ╓╛╡СюЧ╓н╓и╓а╓Иб╕╓╚╓к╓╒╓К╓Ё╓х╓╛й╛╓╚╓ц╓©╓И, ╓д╓╝╓нфС╓д╓н╡дг╫ю╜╓╛╧м╓╗╓И╓Л╓К╓г╓╥╓Г╓╕. ╡СюЧ╓н╦Ч╓Ё╓╕б╕╓г╓нх©╠Ч╓╛╓й╓╓ ╓Ё╓Л╓кбп╫Х╓г╓╜╓К╓Ё╓х╓о╓ш╓х╓С╓и╓╒╓Й╓ч╓╩╓С. бГиТй╛╓н ISP ╓о, Microsoft ╪рю╫ OS ╟йЁ╟╓нмЬмя╪т╓кбп╓╥╓ф╓н╔╣╔щ║╪╔х╓Р╣Яхщ╓╧╓К╓г╓╥╓Г╓╕. ppp.conf ╔у╔║╔╓╔К╓нцФ╓к enable lqr ╓Р╣╜╫р╓╧╓К╓Ё╓х╓г ppp ╓╛╡СюЧ╓н╦Ч╓Ё╓╕б╕╓гх╞ю╦╓╧╓Кюзцг╓Р╦║╫п╓╧╓К╓Ё╓х╓╛╓г╓╜╓ч╓╧╓╛, ╓Ё╓н╦║╫п╓охФЁсе╙цы╓╓╓©╓А, ╓╒╓ч╓ЙлР╓кн╘╓а╓ч╓╩╓С. ╓ч╓©, ╓╒╓й╓©╓о user-ppp ╓РмЬмя╓╥╓ф╓╓╓К╓Ё╓х╓Р ISP ╓кцн╓И╓Л╓©╓╞╓й╓╓╓х╩в╓╕╓╚╓Бцн╓Л╓ч╓╩╓С╓м. ╓ч╓╨╨г╫И╓к, ╓Ё╓а╓Иб╕╓н╟╣╫л╣║г╫╓Ра╢╓фл╣╦З╓к╓╥╓ф╓ъ╓ф╓╞╓ю╓╣╓╓. ╓╫╓Л╓к╓о, юъдЙ╔у╔║╔╓╔К╓Р╓д╓╝╓н╓Х╓╕╓к╓╥╓ч╓╧. disable pred1 deflate deflate24 protocomp acfcomp shortseq vj deny pred1 deflate deflate24 protocomp acfcomp shortseq vj ╓╫╓╥╓ф╨фюэбЁ╓╥, йя╧╧а╟╓хф╠╓╦╓Х╓╕╓кдл©╝╓г╓╜╓К╓Ё╓х╓РЁнг╖╓╥╓ч╓╧. ╓Б╓╥╓Ё╓Л╓к╓Х╓ц╓ф╬У╤╥╓╛╡Ча╠╓╣╓Л╓К╓╚, ╢╟а╢╓к╡Р╥Х╓╥╓©╓И, (╬Е╓нюъдЙ╓н╓╕╓а)╓и╓нюъдЙ╓г╬У╤╥╓╛йя╡╫╓╥╓©╓н╓╚╓Р, ©╖║╧╓йах╧Г╓╩╓г╩Н╓╥╓ф╓ъ╓ф╓╞╓ю╓╣╓╓. ╓Ё╓Л╓о, ISP ╓клД╓╓╧Г╓О╓╩╓Р╧т╓й╓╕╓х╓╜╓нм╜╦З╓й╬ПйС╓х╓й╓Й╓ч╓╧(╓©╓ю╓╥, ╓╒╓й╓©╓╛ Microsoft ╪рю╫ий╟йЁ╟╓н╓Б╓н╓РмЬмя╓╥╓ф╓╓╓К╓Ё╓х╓Блю╓И╓╚╓к╓╥╓ф╓╥╓ч╓╓╓ч╓╧╓╛). ISP ╓клД╓╓╧Г╓О╓╩╓Р╧т╓й╓╕а╟╓к, ╓Ё╓а╓Иб╕╓нхСф╠╢Э╔М╔╟╓Рм╜╦З╓к╓╥╓ф, юэбЁ╓╛╔о╔С╔╟╔╒╔ц╔в╓╧╓К╓ч╓гбт╓ц╓ф╓╞╓ю╓╣╓╓. ╓Ё╓н╨Н╤х╓о, хС╬О╓кб©╓╞╓н╔г╔ё╔╧╔╞╤У╢ж╓Р╬цхЯ╓╧╓К╓╚╓Бцн╓Л╓ч╓╩╓С. ╤╫лё╓нбп╬щ╓х╓й╓ц╓ф╓╓╓К╓н╓о, дл©╝╔щ║╪╔х╓╚╓И╨г╦Е╓кфи╓ъ╧Ч╓ч╓Л╓©╔г║╪╔©╓г╓╧. ╓╫╓Л╓одл╬О ASCII ╔г║╪╔©╓г, лДбЙею╓н╬э╨ы(Memory fault, core dump╓й╓и)╓╛ ╣╜╨э╓╣╓Л╓ф╓╓╓К╡дг╫ю╜╓╛╓╒╓Й╓ч╓╧. ╡СюЧ╓н╦Ч╓Ё╓╕б╕╓гдл©╝╔М╔╟╓Р╢ф╩К╓╧╓К╓Ё╓х╓о╡дг╫╓й╓о╓╨╓г╓╧╓н╓г, юзцг╓╛х╞ю╦╓╥╓©╩Ч, ISP ╓нбп╠Ч╓╛╧╔╟уе╙╓й╓И╓п ╓и╓╕╓╥╓ф ISP б╕╓глДбЙ╓╛х╞ю╦╓╥╓©╓н╓╚╓Ё╓а╓И╓кеа╓╗╓ф╓╞╓Л╓К╓╚╓Бцн╓Л╓ч╓╩╓С. brian@Awfulhak.org ╓ч╓г╬э╨ы╓РаВ╓ц╓фд╨╓╞╓╚, ISP ╓кд╬юэ╩Д╓ко╒мМ╓╧╓К╓Х╓╕╓кеа╓╗╓ф╡╪╓╣╓ц╓ф╓Б╧╫╓╓╓ч╓╩╓С. ppp ╓╛╔о╔С╔╟╔╒╔ц╔в╓╧╓К ╔ы╔╧╔х╓ййЩк║╓о, CFLAGS+=-g ╓х STRIP= ╓Р ppp ╓н Makefile ╓кди╡ц╓╥╓ф, ppp ╓Р╨ф╧╫цш╓╥, ╓╫╓╥╓ф make clean && make && make install ╓Р╧т╓й╓╕╓Ё╓х╓г╓╧. ppp ╓╛╔о╔С╔╟╔╒╔ц╔в╓╥╓©╩Ч, ps ajxww | fgrep ppp ╓Р╩х╓ц╓ф ppp ╓н╔в╔М╔╩╔╧ ID ╓Рд╢╓ы, gdb ppp PID ╓Р╪б╧т╓╥╓ф╓╞╓ю╓╣╓╓. gdb ╓н╔в╔М╔С╔в╔х╓╚╓И, bt ╓Р╩х╓ц╓ф╔╧╔©╔ц╔╞╓Р╔х╔Л║╪╔╧╓╧╓К╓Ё╓х╓╛╓г╓╜╓ч╓╧. ╔╧╔©╔ц╔╞╔х╔Л║╪╔╧╓н╥К╡л╓о, brian@Awfulhak.org ╓ч╓гаВ╓ц╓ф╓╞╓ю╓╣╓╓. Login OK! ╓н╔А╔ц╔╩║╪╔╦╓╛╫п╓©╦Е, ╡©╓Б╣╞╓Ё╓И╓й╓╓ 2.2.5 ╓Х╓Йа╟╓н╔Й╔Й║╪╔╧╓н FreeBSD ╓г╓о, ppp ╓о╔Й╔С╔╞╓╛Ённ╘╓╥╓©╦Е, юэбЁюХ╓╛ Line Control Protocol(LCP) ╓Рх╞©╝╓╧╓К╓н╓Рбт╓а╓ч╓╧. ╓╥╓╚╓╥, б©╓╞╓н ISP ╓г╓о╔м╔╢╔╥╔╗║╪╔╥╔Г╔С╓Р╪╚й╛╓╚╓И╓о╣╞╓Ё╓╣╓╨, ╔╞╔И╔╓╔╒╔С╔х╓╛╣╞╓Ё╓╧╓н╓Рбт╓ц╓ф╓╓╓ч╓╧. ppp ╓к╤╞ю╘е╙╓к LCP ╓Рх╞©╝╓╣╓╩╓К╓к╓о, ╪║╓нл©нА╓Р╩х╓╓╓ч╓╧. set openmode active н╬йЩ╓нб╕╓╛╔м╔╢╔╦╔╖║╪╔╥╔Г╔С╓Р╣╞╓Ё╓╥╓ф╓Б, бГдЯ╓н╬Л╧Г╓о╡©╓нлДбЙ╓Б╓╒╓Й╓ч╓╩╓С. ╓г╓╧╓╚╓И, ╦╫╨ъ╓г╓о openmode ╓о╔г╔у╔╘╔К╔х╓г active ╓к╓й╓ц╓ф╓╓╓ч╓╧. ╪║╓н╔╩╔╞╔╥╔Г╔С╓г╓Ё╓Л╓╛лДбЙ╓к╓й╓К╬Л╧Г╓РюБлю╓╥╓ч╓╧. ╓г╓Б╓ч╓ю magic is the same ╓х╓╓╓╕╔╗╔И║╪╓╛╫п╓К ╩Чюч, юэбЁд╬╦Е╓н╔М╔╟╓к magic is the same ╓х╓╓╓╕╔А╔ц╔╩║╪╔╦╓╛╓╒╓И╓О╓Л╓К╓Ё╓х╓╛╓╒╓Й╓ч╓╧. ╓Ё╓н╔А╔ц╔╩║╪╔╦╓╛╓╒╓И╓О╓Л╓ф╓Б╡©╓Б╣╞╓╜╓й╓╓╬Л╧Г╓Б╓╒╓Й╓ч╓╧╓╥, ╓и╓а╓И╓╚╓нб╕╓╛юэбЁ╓Рюз╓ц╓ф╓╥╓ч╓╕╬Л╧Г╓Б╓╒╓Й╓ч╓╧. ppp ╓н╪баУ╓нб©╓╞╓о╓Ё╓нлДбЙ╓кбп╠Ч╓г╓╜╓ф╓╙╓И╓╨, ╓╫╓н╬Л╧Г╓к╓о╓а╓Ц╓С╓х link ╓╛╬Е╓╛╓ц╓ф╓╓╓К╬Убж╓г╓╒╓ц╓ф╓Б, ppp ╓╛╨г╫╙е╙╓к╓╒╓╜╓И╓А╓ф╓╥╓ч╓╓, юэбЁ╓Рюз╓К╓ч╓гюъдЙ╓н╔Й╔╞╔╗╔╧╔х╓╛╥╚╓Ййж╓╥аВ╓И╓Л, юъдЙ╓╛╧т╓О╓Л╓©╓х╓╓╓╕длцн╓╛╔М╔╟╔у╔║╔╓╔К╓к╩д╓К╓х╩в╓╓╓ч╓╧. ╓Ё╓Л╓одл╬О, ╔г╔ё╔╧╔╞╔╒╔╞╔╩╔╧╓нцы╓╓╔╣║╪╔п╔ч╔╥╔С╓н╔╥╔Й╔╒╔К╔щ║╪╔х╓г getty ╓╛ю╦╓╜╓ф╓╓╓ф, ppp ╓╛╔М╔╟╔╓╔С╔╧╔╞╔Й╔в╔х╓╚, ╔М╔╟╔╓╔Сд╬╦Е╓к╣╞ф╟╓╣╓Л╓©╔в╔М╔╟╔И╔Ю╓╚╓И╪б╧т╓╣╓Л╓ф╓╓╓К╬Л╧Г╓к╣╞╓Ё╓Й╓ч╓╧. slirp ╓Р╩хмя╓╥╓ф╓╓╓К╬Л╧Г╓кф╠мм╓н╬и╬У╓╛╦╚╓И╓Л╓©╓х╓╓╓╕йС╧П╓Б╓╒╓Й╓ч╓╧. ╦╤╟Ь╓о getty ╓н╫╙н╩╓╣╓Л╓К╓ч╓г╓х, ppp ╓╛╪б╧т╓╣╓Л, ╔╞╔И╔╓╔╒╔С╔хб╕╓н ppp ╓╛ Line Control Protocol(LCP) ╓РаВ╓Й╩о╓А╓К╓ч╓г╓н╔©╔╓╔ъ╔С╔╟╓к╓╒╓Й╓ч╓╧. ╔╣║╪╔пб╕╓н╔╥╔Й╔╒╔К╔щ║╪╔х╓г ECHO ╓╛м╜╦З╓й╓ч╓ч╓к╓й╓ц╓ф╓╓╓К╓н╓г, ╔╞╔И╔╓╔╒╔С╔хб╕╓н ppp ╓к╔я╔╠╔ц╔х╓╛║жх©╪м║в╓╥╓ф╓╥╓ч╓╕╓н╓г╓╧. LCP ╔м╔╢╔╥╔╗║╪╔╥╔Г╔С╓н╟ЛиТ╓х╓╥╓ф, ╔Й╔С╔╞╓нн╬╔╣╔╓╔и╓г magic number ╓РдЙ╓А╓ф, ║жх©╪м║в╓╛╣╞╓╜╓ф╓╓╓й╓╓╓╚╓и╓╕╓╚Ён╓╚╓А╓К╨Н╤х╓╛╓╒╓Й╓ч╓╧. ╣╛лС╓г╓о, юэбЁаЙ╪Й╓╛╓Ё╓а╓И╓хф╠╓╦ magic number ╓РдС╪╗╓╥╓ф╓╜╓©╓И, NAK ╓РаВ╓ц╓ф©╥╓╥╓╓ magic number ╓Ра╙бР╓╥╓й╓╠╓Л╓п╓й╓И╓й╓╓╓хдЙ╓А╓ф╓╓╓ч╓╧. ╓Ё╓н╨Н╤х╓н╢ж, ╔╣║╪╔п╓н╔╥╔Й╔╒╔К╔щ║╪╔х╓н ECHO ╓╛╓╨╓ц╓хм╜╦З╓к╓й╓ц╓©╓ч╓ч╓й╓н╓г, ╔╞╔И╔╓╔╒╔С╔хб╕╓н ppp ╓о LCP ╔я╔╠╔ц╔х╓РаВ╓Й, ╔я╔╠╔ц╔х╓╛х©╪м╓╥╓фа╢╓╞ф╠╓╦ magic number ╓╛аВ╓И╓Л╓ф╓╞╓К╓н╓Р╦╚╓д╓╠, ╓╫╓Л╓кбп╓╥╓ф NAK ╓РаВ╓К╓н╓г╓╧. ╟ЛйЩ NAK ╪╚бн╓Б(╓Ё╓Л╓о ppp ╓╛ magic number ╓Рйя╧╧╓╥╓й╓╠╓Л╓п╓╓╓╠╓й╓╓╓Ё╓х╓Р╟улё╓╥╓ф╓╓╓ч╓╧)х©╪м╓╥╓ф╓╞╓К╓н╓г, ╥К╡л╓х╓╥╓ф magic number ╓╛©Т╓╗╓╜╓Л╓й╓╓╓ш╓ийя╧╧╓╣╓Л, ╓╫╓на╢╓ф╓╛╔╣║╪╔п╓н tty ╔п╔ц╔у╔║╓нцФ╓кюя╓ъ╫е╓й╓К╓Ё╓х╓к╓й╓К╓н╓г╓╧. ╔╣║╪╔п╓г╔╧╔©║╪╔х╓╥╓© ppp ╓о, ╓╧╓╟╓к magic number ╓г╓╒╓у╓Л╓╚╓╗╓ц╓ф╓╥╓ч╓╓, LCP ╓н╔м╔╢╔╥╔╗║╪╔╥╔Г╔С╓Р╫╫й╛╓к╧т╓ц╓©╓Б╓н╓хх╫цг╓╥╓ф, ╓╣╓ц╓╣╓хюэбЁ╓Рюз╓ц╓ф╓╥╓ч╓╓╓ч╓╧. ╟ЛйЩ, ╔╞╔И╔╓╔╒╔С╔хб╕╓ох©╪м╓╛╣╒╓ц╓ф╓Ё╓й╓╞╓й╓ц╓©╓н╓гкЧб╜╓╥╓ч╓╧╓╛, ╓╫╓Л╓Б╔╣║╪╔п╓╛юэбЁ╓Рюз╓ц╓©╓Ё╓х╓Рцн╓К╓ч╓г╓г╓╧. ╓Ё╓н╩Жбж╓о, ╟й╡╪╓н╧т╓Р ppp.conf ╓нцФ╓к╫Я╓╓╓ф, аЙ╪Й╓╛╔м╔╢╔╥╔╗║╪╔╥╔Г╔С╓РЁ╚╩о╓г╓╜╓К╓Х╓╕╓к╓╧╓К╩Ж╓к╓Х╓ц╓ф╡СхР╓г╓╜╓ч╓╧. set openmode passive ╓Ё╓Л╓г ppp ╓о╔╣║╪╔п╓╛ LCP ╔м╔╢╔╥╔╗║╪╔╥╔Г╔С╓Р╣╞╓Ё╓╧╓н╓Рбт╓д╓Х╓╕╓к╓й╓Й╓ч╓╧. ╓╥╓╚╓╥, ╪╚й╛╓╚╓И╓о╥Х╓╥╓ф╔м╔╢╔╦╔╖║╪╔╥╔Г╔С╓Р╣╞╓Ё╓╣╓й╓╓╔╣║╪╔п╓Б╓╒╓К╓╚╓Б╓╥╓Л╓ч╓╩╓С. ╓Б╓╥╓Ё╓н╬У╤╥╓каЬ╤Ь╓╥╓©╬Л╧Г╓к╓о, ╪║╓н╓Х╓╕╓к╓╥╓ф╓╞╓ю╓╣╓╓. set openmode active 3 ╓Ё╓Л╓к╓Х╓ц╓ф ppp ╓о 3 иц╢ж passive ╔Б║╪╔и╓РбЁ╓╠╓©╦Е╓г, LCP ╔Й╔╞╔╗╔╧╔х╓РаВ╓Й╩о╓А╓ч╓╧. ╓Ё╓н╢ж╓каЙ╪Й╓╛╔Й╔╞╔╗╔╧╔х╓РаВ╓Й╩о╓А╓©╬Л╧Г╓к╓о 3 иц╢жбт╓©╓╨╓к╓Ё╓н╔Й╔╞╔╗╔╧╔х╓кб╗╨б╓к╠ЧеЗ╓╥╓ч╓╧. юэбЁ╓╛юз╓Л╓К╓ч╓г LCP ╓н╔м╔╢╔╥╔╗║╪╔╥╔Г╔С╓╛бЁ╓╞╓н╓г╓╧╓╛. ╦╫╨ъ╓н ppp ╓о, ╓ч╓ю LCP ╓Д CCP, IPCP ╓нйж╩Ж╓╛, ╦╣╓н╔Й╔╞╔╗╔╧╔х╓хо╒╥х╓╥╓ф╓╞╓Л╓К╣║г╫╓╛╓╜╓а╓С╓х╪баУ╓╣╓Л╓ф╓╓╓ч╓╩╓С. ╓╫╓н╥К╡л, ╓╒╓К ppp ╓╛аЙ╪Й╓Х╓Й╓Б 6 иц╟й╬Ецы╓╓╬Л╧Г╓к╓о, LCP юъдЙ╓н╓н╔Й╔╞╔╗╔╧╔х╓Р╓╣╓И╓к 2 ╡СаВ╓Й╓ч╓╧. ╓Ё╓Л╓оцвл©е╙╓йй╙╓г╓╧. A ╓х B╓х╓╓╓╕ 2 ╓д╓н╪баУ╓Р╧м╓╗╓ф╓ъ╓ч╓╥╓Г╓╕. A ╓╛юэбЁ╓нд╬╦Е╓к LCP ╔Й╔╞╔╗╔╧╔х╓РаВ╓Й, ╟ЛйЩ B ╓нйЩ╓о╔╧╔©║╪╔х╓╧╓К╓н╓к 7 иц╓╚╓╚╓ц╓©╓х╓╥╓ч╓╧. B ╓╛╔╧╔©║╪╔х╓╧╓К╩Ч╓к╓о A ╓о LCP ╔Й╔╞╔╗╔╧╔х╓Р 3 ╡СаВ╓ц╓ф╓╥╓ч╓ц╓ф╓╓╓ч╓╧. а╟╓нюА╓г╫р╓ы╓© magic number ╓нлДбЙ╓╛╣╞╓╜╓й╓╓╓Х╓╕, ECHO ╓о off ╓к╓й╓ц╓ф╓╓╓К╓х╧м╓╗╓ф╓╓╓ч╓╧. B ╓о REQ ╓РаВ╓Й╓ч╓╧. ╓╧╓К╓х╓Ё╓Л╓о A ╓н REQ ╓н╓╕╓а, ╨г╫И╓нй╙╓кбп╓╧╓К ACK ╓х╓й╓Й╓ч╓╧. ╥К╡л╓х╓╥╓ф, A ╓о OPENED ╓н╬Убж╓кфЧ╓Й, B ╓кбп╓╥╓ф(╨г╫И╓н) ACK ╓РаВ╓Й╓ч╓╧. ╓╫╓н╓╕╓а╓к B ╓о, B ╓╛╔╧╔©║╪╔х╓╧╓Ка╟╓к A ╓╚╓ИаВ╓И╓Л╓©╓Б╓╕ 2 ╓д╓н REQ ╓кбп╓╧╓К ACK ╓РаВ╓Ййж╓╥╓ч╓╧. B ╓о A ╓╚╓И╓н╨г╫И╓н ACK ╓Р╪У╓╠╪Х╓Й OPENED ╓н╬Убж╓кфЧ╓Й╓ч╓╧. A ╓о B ╓╚╓И╓н 2 ╓длэ╓н ACK ╓Р╪У╓╠╪Х╓Й╓ч╓╧╓н╓г, REQ-SENT╓н╬Убж╓клА╓Й, ╓╣╓И╓к, RFC ╓н╓х╓╙╓Й╓к(4 ╓длэ╓н)REQ ╓РаВ╓Й╓ч╓╧. ╓╫╓╥╓ф 3 ╓длэ╓н ACK ╓Р╪У╓╠╪Х╓ц╓ф OPENED ╓н╬Убж╓кфЧ╓Й╓ч╓╧. ╟ЛйЩ, B ╓о A ╓╚╓И╓н 4 ╓длэ╓н REQ ╓Р╪У╓╠╪Х╓Й╓ч╓╧╓н╓г, ACK-SENT ╓н╬Убж╓кфЧ╓Й, 2 ╓длэ╓н REQ ╓х 4 ╓длэ╓н ACK ╓Р RFC ╓н╓х╓╙╓Й╓каВ╓Й╓ч╓╧. A╓о, REQ ╓Р╪У╓╠╓х╓К╓х REQ-SENT ╓н╬Убж╓к╓й╓Й, ╓╣╓И╓к REQ ╓РаВ╓Й╓ч╓╧. ╓╫╓╥╓ф╓╧╓╟╓к ACK ╓Р╪У╓╠╪Х╓ц╓ф OPENED ╓н╬Убж╓кфЧ╓Й╓ч╓╧. ╓Ё╓Л╓╛, йрйЩ╓н ppp ╓╛╓╒╓╜╓И╓А╓ф╓╥╓ч╓╕╓ч╓гбЁ╓╜╓ч╓╧. ╓Ё╓Л╓Р╡СхР╓╧╓К╨г╓Бни╓╓йЩк║╓о, йрйЩ╓Р passive ╔Б║╪╔и╓кюъдЙ╓╧╓К, ╓╧╓й╓О╓ах©бпб╕╓╛╔м╔╢╔╥╔╗║╪╔╥╔Г╔С╓РЁ╚╩о╓╧╓К╓ч╓гбт╓д╓Х╓╕╓к╓╧╓К╩Ж╓г╓╧. ╓Ё╓Л╓о, set openmode passive ╓х╓╓╓╕╔Ё╔ч╔С╔и╓г╓г╓╜╓ч╓╧. ╓Ё╓н╔╙╔в╔╥╔Г╔С╓о╣╓╓Риу╓╠╓ф╩х╓О╓й╓╓╓х╓╓╓╠╓ч╓╩╓С. ╓╣╓И╓к set stopped N ╓х╓╓╓╕╔Ё╔ч╔С╔и╓Рди╡ц╓╥╓ф, ppp╓╛negotiation╓╛Ё╚╩о╓╧╓К╓ч╓гбт╓д ╨гбГ╓н╩Ч╢ж╓РюъдЙ╓╥╓ф╓╞╓ю╓╣╓╓. ╓Б╓╥╓╞╓о, set openmode active N ╓х╓╓╓╕╔Ё╔ч╔С╔и(╓Ё╓Ё╓г, N ╓о╔м╔╢╔╥╔╗║╪╔╥╔Г╔С╓╛╩о╓ч╓К╓ч╓гбт╓д╩Ч╢ж)╓Р╩х╓╕╓Ё╓х╓Б╓г╓╜╓ч╓╧. ╬э╓╥╓╞╓о╔ч╔к╔Е╔╒╔К╔з║╪╔╦╓Р╩╡╬х╓╥╓ф╓╞╓ю╓╣╓╓. ppp ╓╛юэбЁд╬╦Е╓к╦г╓ч╓ц╓ф╓╥╓ч╓╕ 2.2.5 ╓Х╓Йа╟╓н╔п║╪╔╦╔Г╔С╓н FreeBSD ╓г╓о, ppp ╓╛ Predictor1 ╟╣╫л╓н╔м╔╢╔╥╔╗║╪╔╥╔Г╔С╓Р╦М╓ц╓ф╡Р╪А╓╥╓ф, юэбЁд╬╦Е╓к╔Й╔С╔╞╓Рл╣╦З╓к╓╥╓ф╓╓╓К╡дг╫ю╜╓╛╓╒╓Й╓ч╓╧. ╓Ё╓Л╓он╬╔╣╔╓╔и╓╛╟ш╓й╓К Compression Control Protocols (CCP) ╓Р╩х╓ц╓ф╔м╔╢╔╦╔╖║╪╔╥╔Г╔С╓Р╧т╓ц╓©╬Л╧Г╓к╓н╓ъх╞ю╦╓╥╓ч╓╧. ╓Ё╓нлДбЙ╓о╦╫╨ъ╓о╡Р╥Х╓╥╓ф╓╓╓ч╓╧╓╛, ╓╒╓й╓©╓наЖ╓И╓╩╓ф╓╓╓К ppp ╓н╔п║╪╔╦╔Г╔С╓╛╦е╓╓╬Л╧Г╓г╓Б, ╪║╓нл©нА╓г╡Р╥Х╓╧╓К╓Ё╓х╓╛╓г╓╜╓ч╓╧. disable pred1 ppp ╓нфБиТ╓г╔╥╔╖╔К╓Р╣╞ф╟╓╥╓Х╓╕╓х╓╧╓К╓х╦г╓ч╓ц╓ф╓╥╓ч╓╕ shell ╓╒╓К╓╓╓о ! ╔Ё╔ч╔С╔и╓Р╩хмя╓╧╓К╓х, ppp ╓о╔╥╔╖╔К╓Р╣╞ф╟╓╥(╡©╓╚╟З©Т╓Рео╓╥╓©╬Л╧Г╓о, ppp ╓о╟З©Т╓Б╪б╧т╓╥╓ч╓╧), ╔Ё╔ч╔С╔и╓╛╫╙н╩╓╧╓К╓ч╓г╫ХмЩ╓РцФцг╓╥╓ч╓╧. ╔Ё╔ч╔С╔и╓Р╪б╧тцФ╓к ppp ╓н╔Й╔С╔╞╓Р╩х╓╙╓╕╓х╓╧╓К╓х, ╔Й╔С╔╞╓╛╦г╓ч╓ц╓ф╓╓╓К╓Х╓╕╓к╦╚╓╗╓ч╓╧╓╛, ╓Ё╓Л╓о ppp ╓╛╔Ё╔ч╔С╔и╓н╫╙н╩╓Рбт╓ц╓ф╓╓╓К╓╚╓И╓г╓╧. ╓Ё╓н╓Х╓╕╓й╬Л╧Г╓о, бЕ╓О╓Й╓к !bg ╔Ё╔ч╔С╔и╓Р╩хмя╓╥╓ф╓╞╓ю╓╣╓╓. м©╓╗╓И╓Л╓©╔Ё╔ч╔С╔и╓╛╔п╔ц╔╞╔╟╔И╔╕╔С╔и╓г╪б╧т╓╣╓Л╓К╓н╓г, ppp ╓о╔Й╔С╔╞╓к╢ь╓╧╓К╔╣║╪╔с╔╧╓Р╥ябЁ╓╧╓К╓Ё╓х╓╛╓г╓╜╓ч╓╧. ╔л╔К╔Б╔г╔Ю╔╠║╪╔ж╔К╓Р╩хмя╓╥╓ф╓╓╓К╓х╓╜, ppp ╓╛╫╙н╩╓╥╓й╓╓ ╔л╔К╔Б╔г╔Ю╔╠║╪╔ж╔К╓Р╩хмя╓╥╓фд╬юэюэбЁ╓╥╓ф╓╓╓К╬Л╧Г, ppp ╓о╪╚ф╟е╙╓к╓оюэбЁ╓н╫╙н╩╓Рцн╓К╓Ё╓х╓╛╓г╓╜╓ч╓╩╓С. ╓Ё╓Л╓о╔л╔К╔Б╔г╔Ю╔╥╔Й╔╒╔К╔╠║╪╔ж╔К╓нгшюЧ╓к╣╞╟Ь╓╥╓ф╓╓╓ч╓╧. ╓Ё╓н╪О╓нюэбЁ╥абж╓Рмя╓╓╓К╬Л╧Г╓о, ╟й╡╪╓нл©нА╓Рмя╓╓╓ф LQR ╓Р╬О╓км╜╦З╓к╓╧╓Ки╛мв╓╛╓╒╓Й╓ч╓╧. enable lqr ╓Ё╓╕╓╧╓К╓х, юэбЁюХ╓╛╔м╔╢╔╥╔╗║╪╔╥╔Г╔С╓Р╧т╓╕╬Л╧Г, ╔г╔у╔╘╔К╔х╓г LQR ╓н╩хмя╓Р╪У╓╠фЧ╓Л╓К╓Х╓╕╓к╓й╓Й╓ч╓╧. ppp ╓Р ╔Б║╪╔и╓гф╟╓╚╓╧╓х, ╬║╪Й╓к╔ю╔╓╔╒╔К╓╧╓К╓Ё╓х╓╛╓╒╓К ppp ╓╛╩в╓╓╓Б╓╥╓й╓╓╓х╓╜╓к╔ю╔╓╔╒╔К╓Р╩о╓А╓К╬Л╧Г, ╓╫╓н╦╤╟Ь╓Рфм╓╜╩ъ╓А, ки╩ъ╓н╓©╓А╓к╔ю╔╓╔Д╔К╔у╔ё╔К╔©(dfilters)╓Р╓╚╓╠╓ф╓Д╓К и╛мв╓╛╓╒╓Й╓ч╓╧. ╦╤╟Ь╓Рфм╓╜╩ъ╓А╓К╓©╓А╓к╓о, ╟й╡╪╓нл©нА╓Р╩хмя╓╥╓ф╓╞╓ю╓╣╓╓. set log +tcp/ip ╓Ё╓Л╓гюэбЁ╓Рдл╡А╓╧╓Ка╢╓ф╓н╔х╔И╔у╔ё╔ц╔╞╓Р╔М╔╟╓к╩д╓╧╓Ё╓х╓╛╓г╓╜╓К╓Х╓╕╓к╓й╓Й╓ч╓╥╓©. ╪║╓кфмаЁ╡СюЧ╓╛╓д╓й╓╛╓ц╓©╓х╓╜╓н╔М╔╟╓н╔©╔╓╔Ю╔╧╔©╔С╔в╓Р╓©╓и╓Л╓п, ╦╤╟Ь╓Рфм╓╜╩ъ╓А╓К╓Ё╓х╓╛╓г╓╜╓К╓о╓╨╓г╓╧. ╦╤╟Ь╓╛╓О╓╚╓ц╓©╓И, ╪║╓к, ╓Ё╓н╓Х╓╕╓й╬У╤╥╓г╓о╔ю╔╓╔Д╔К╓╛╣╞╓Ё╓И╓й╓╓╓Х╓╕╓к╓╥╓ч╓╥╓Г╓╕. дл╬О, ╓Ё╓н╪Й╓нлДбЙ╓о, DNS ╓гл╬а╟╓н╡Р╥Х╓Р╓╥╓Х╓╕╓х╓╥╓©╓©╓А╓к╣╞╓Ё╓Й╓ч╓╧. DNS ╓к╓Х╓Кл╬а╟╓н╡Р╥Х╓к╓Х╓ц╓ф, юэбЁ╓╛╧т╓О╓Л╓К╓н╓Рки╩ъ╓╧╓К╓к╓о, ╪║╓н╓Х╓╕╓й╪Йцй╓Рмя╓╓╓ч╓╧(╓Ё╓Л╓о ppp ╓н╢Ш╓кЁнн╘╓╥╓©юэбЁ╓к╢ь╓╥╓ф╔я╔╠╔ц╔х╓н╔у╔ё╔К╔©╔Й╔С╔╟╓Р╓╧╓К╓Б╓н╓г╓о╓╒╓Й╓ч╓╩╓С). set dfilter 1 deny udp src eq 53 set dfilter 2 deny udp dst eq 53 set dfilter 3 permit 0/0 0/0 ╓Ё╓Л╓о╔г╔ч╔С╔и╔ю╔╓╔Д╔К╣║г╫╓клДбЙ╓Рю╦╓╦╓╣╓╩╓К╓©╓А, ╬О╓ке╛юз╓г╓╒╓К╓х╓о╓╚╓╝╓Й╓ч╓╩╓С. ╓ш╓х╓С╓и╓н╔в╔М╔╟╔И╔Ю╓об╬╓н╔м╔ц╔х╔О║╪╔╞╢ьо╒╓н╫ХмЩ╓Р╧т╓й╓╕а╟╓к DNS ╓ь╓нлД╓╓╧Г╓О╓╩╓╛и╛мв╓к╓й╓Й╓ч╓╧. DNS ╓н╬Л╧Г╓о, ╡©╓╛╪б╨щ╓к╔ш╔╧╔хл╬╓Р╦║╨В╓╥╓Х╓╕╓х╓╥╓ф╓╓╓К╓н╓╚╓Рфм╓╜╩ъ╓А╓К╓ы╓╜╓г╓╥╓Г╓╕. бГдЯ╓н╬Л╧Г╓о, sendmail ╓╛хх©м╓г╓╧. юъдЙ╔у╔║╔╓╔К╓г sendmail ╓╛ DNS ╓клД╓╓╧Г╓О╓╩╓й╓╓╓Х╓╕╓к╓й╓ц╓ф╓╓╓К╓╚Ёнг╖╓╧╓ы╓╜╓г╓╧. ╪╚й╛мя╓нюъдЙ╔у╔║╔╓╔К╓Р╨Ню╝╓╧╓К╓©╓А╓н╬э╓╥╓╓йЩк║╓о, ╔А║╪╔К╓нюъдЙ ╓н╧Ю╓Р╓╢мВ╓╞╓ю╓╣╓╓. ╓ч╓©╓о, .mc ╔у╔║╔╓╔К╓к╪║╓н╓Х╓╕╓й╧т╓Рди╡ц╓╥╓ф╓Б╓Х╓╓╓г╓╥╓Г╓╕. define(`confDELIVERY_MODE', `d')dnl ╓Ё╓н╧т╓Рди╡ц╓╧╓К╓х, sendmail ╓о╔А║╪╔К╔╜╔Е║╪╓Р╫ХмЩ╓╧╓К(дл╬О sendmail ╓о 30 й╛╓╢╓х╓к╔╜╔Е║╪╓Р╫ХмЩ╓╧╓К╓Х╓╕, ╓х╓╓╓╕╔╙╔в╔╥╔Г╔С╓Риу╓╠╓ф╣╞ф╟╓╣╓Л╓ч╓╧)╓ч╓г╓╚, ╓ч╓©╓о(б©й╛ ppp.linkup ╓х╓╓╓╕╔у╔║╔╓╔К╓нцФ╓г) sendmail -q ╓х╓╓╓╕╔Ё╔ч╔С╔и╓╛╪б╧т╓╣╓Л╓К╓ч╓г, а╢╓ф╓н╔А║╪╔К╓Р╔╜╔Е║╪╓кн╞╓А╓К╓Х╓╕╓к╓й╓Й╓ч╓╧. лУцМ sendmail -q ╓о╓╫╓н╩Чею╓н╔А║╪╔К╔╜╔Е║╪╓нфБмф╓Р╫ХмЩ╓╥╓ф╫╙н╩╓╥╓ч╓╧. CCP ╔╗╔И║╪╓х╓о╓и╓╕╓╓╓╕╟улё╓г╓╧╓╚ ╔М╔╟╔у╔║╔╓╔КцФ╓н╟й╡╪╓н╔╗╔И║╪╓о, CCP: CcpSendConfigReq CCP: Received Terminate Ack (1) state = Req-Sent (6) ╓н╔м╔╢╔╥╔╗║╪╔╥╔Г╔С╓к╓╙╓╓╓ф ppp ╓о Predictor1 ╟╣╫л╓Рмя╓╓╓К╓ы╓╞╪Гд╔╓╥╓©╓н╓кбп╓╥╓ф, юэбЁюХ╓о╟╣╫л╓Р╩хмя╓╥╓й╓╓╓Ё╓х╓Р╪Гд╔╓╥╓©╬Л╧Г╓к╣╞╓Ё╓Й╓ч╓╧. ╓Ё╓н╔А╔ц╔╩║╪╔╦╓к╓о╡©╓нЁ╡╓Б╓╒╓Й╓ч╓╩╓С╓╛, ╫п╓К╓н╓╛╥Ы╓й╓И, ╟й╡╪╓нл©нА╓Рмя╓╓╓ф╓Ё╓а╓Иб╕╓г╓Б Predictor1 ╟╣╫л╓Рл╣╦З╓к╓╧╓К╓Ё╓х╓гбп╠Ч╓г╓╜╓ч╓╧. disable pred1 ╔у╔║╔╓╔Ке╬аВ╓несцФ╓г, ppp ╓╛ IO ╔╗╔И║╪╓Р╫п╓╥╓ф╦г╓ч╓ц╓ф╓╥╓ч╓╕ FreeBSD 2.2.2 ╟йа╟╓н╔п║╪╔╦╔Г╔С╓н tun ╔и╔И╔╓╔п╓к╓о, tun ╔╓╔С╔©╔у╔╖║╪╔╧╓н MTU ╓н╔╣╔╓╔╨╓Х╓ЙбГ╓╜╓й╔я╔╠╔ц╔х╓Р╪У╓╠╪Х╓К╓Ё╓х╓╛╓г╓╜╓й╓╓╓х╓╓╓╕╔п╔╟╓╛╓╒╓Й╓ч╓╥╓©. MTU ╓н╔╣╔╓╔╨╓Х╓ЙбГ╓╜╓й╔я╔╠╔ц╔х╓Р╪У╓╠иу╓╠╓К╓х IO ╔╗╔И║╪╓╛╣╞╓Ё╓Й, syslogd ╥пмЁ╓г╣╜о©╓╣╓Л╓К╓н╓г╓╧. ppp ╓н╩емм╓г╓о, LCP ╓н╔м╔╢╔╥╔╗║╪╔╥╔Г╔С╓Р╧т╓╕╬Л╧Г╓Р╢ч╓Ю╓и╓н╓Х╓╕╓й╬Л╧Г╓г╓Б╨гдЦ 1500 ╔╙╔╞╔ф╔ц╔х╓н Maximum Receive Unit (MRU) ╓Р╪У╓╠фЧ╓Л╓Ки╛мв╓╛╓╒╓Й╓ч╓╧. ╓г╓╧╓╚╓И, MTU ╓Р 1500 ╟й╡╪╓кюъдЙ╓╥╓©╬Л╧Г╓г╓Б, ISP ╓о╓╫╓Л╓к╢ь╥╦╓й╓╞ 1500 ╓нбГ╓╜╓╣╓н╔я╔╠╔ц╔х╓РаВ╓ц╓ф╓╞╓К╓г╓╥╓Г╓╕. ╓╫╓╥╓ф╓Ё╓н╔╓╔╠╓ф╓й╓╓╣║г╫╓к╓ж╓а╓╒╓©╓ц╓ф, ╔Й╔С╔╞╓╛╦г╓ч╓К╓н╓Рлэ╓к╓╧╓К╓Ё╓х╓к╓й╓К╓н╓г╓╧. FreeBSD 2.2.2 ╟йа╟╓н╔п║╪╔╦╔Г╔С╓г╓о, MTU ╓Р╥Х╓╥╓ф 1500 ╓Х╓Й╬╝╓╣╓╞╓╥╓й╓╓╓Ё╓х╓г, ╓Ё╓нлДбЙ╓Р╡СхР╓╧╓К╓Ё╓х╓╛╓г╓╜╓ч╓╧. ╓и╓╕╓╥╓ф ppp ╓оюэбЁб╝еы╓Р╔М╔╟╓к╩д╓╣╓й╓╓╓С╓г╓╥╓Г╓╕? ╔Б╔г╔Ю╓х╓н║ж╓Д╓Й╪Х╓Й║ва╢╓ф╓н╧т╓Р╔М╔╟╓к╩д╓╧╓к╓о, ╟й╡╪╓н╓Х╓╕╓к╓╥╓фюэбЁб╝еы╓н╔М╔╟╓нм╜╦З╡╫╓Р╧т╓ц╓ф╓╞╓ю╓╣╓╓. set log +connect ╓Ё╓Л╓о ppp ╓к╨г╦Е╓к╓╞╓К╓Ё╓х╓╛мв╣А╓╣╓Л╓ф╓╓╓К expect ╓х╓╓╓╕й╦╩ЗнС╓╛╓╞╓К╓ч╓г╓н╓╧╓ы╓ф╓н╓Б╓н╓Р╔М╔╟╓к╣╜о©╓╣╓╩╓ч╓╧. юэбЁб╝еы╓о╔М╔╟╓к╓х╓Й╓©╓╓╓╠╓Л╓и, PAP ╓Д CHAP ╓Р╩х╓ц╓ф╓╓╓К(╓╫╓н╥К╡л, ╔ю╔╓╔Д╔К╔╧╔╞╔Й╔в╔хцФ╓н CONNECT ╟й╧ъ╓ка╢╓╞║ж╓Д╓Й╓х╓Й║в╓Р╧т╓О╓й╓╓ - set login ╔╧╔╞╔Й╔в╔х╓к╓о╡©╓Б╫Я╓╚╓й╓╓)╓н╓г╓╒╓Л╓п, ppp ╓к expect ╓Р╢ч╓С╓ю CONNECT ╧та╢╓ф╓╛╓╞╓К╓ч╓гбт╓©╓╩╓К╓Х╓╕╓к╓╥╓й╓╓╓х╓╓╓╠╓ч╓╩╓С, ╟й╡╪╓н╓Х╓╕╓к╓й╓Й╓ч╓╧. set dial "ABORT BUSY ABORT NO\\sCARRIER TIMEOUT 4 \"\" ATZ OK-ATZ-OK ATDT\\T TIMEOUT 60 CONNECT \\c \\n" ╓Ё╓Ё╓г, CONNECT ╓Р╪У©╝╓╥╓ф╓╚╓И, ╡©╓БаВ╓И╓╨, иЭ╣╒╡Ч╧т(linefeed)╓Рбт╓ц╓ф╓╓╓ч╓╧, ppp ╓к CONNECT ╓н╠ЧеЗа╢╓ф╓Рфи╓ъ╧Ч╓ч╓╩╓ф╓╓╓К╓О╓╠╓г╓╧. ╩Д╓н chat ╔╧╔╞╔Й╔в╔х╓г╓о \ ╓х╓╓╓╕й╦╩З╓Р PPP ╓╛╡Р╪А╓╥╓ф╓╞╓Л╓ч╓╩╓С. PPP ╓оюъдЙ╔у╔║╔╓╔К╓Рфи╓ъ╧Ч╓Ю╓х╓╜╓к, set phone "123 456 789" ╓н╓Х╓╕╓йй╦╩ЗнС╓Рю╣╓╥╓╞╡Р╪А╓╥, хж╧Ф╓╛╪б╨щ╓к1 ╓д╓н╟З©Т╓г╓╒╓К╓хмЩ╡Р╓╥╓ч╓╧. " ╓х╓╓╓╕й╦╩З╓Р╩ьдЙ╓╧╓К╓к╓о, ╔п╔ц╔╞╔╧╔И╔ц╔╥╔Е(backslash; \)╓г╔╗╔╧╔╠║╪╔в╓╥╓й╓╠╓Л╓п╓й╓Й╓ч╓╩╓С. chat ╓нЁф╟З©Т╓╛╡Р╪А╓╣╓Л╓К╓х╓╜╓к╓о, \P ╓Д \T ╓н╓Х╓╕╓йфцйл╓й╔╗╔╧╔╠║╪╔в╔╥║╪╔╠╔С╔╧(╔ч╔к╔Е╔╒╔К╔з║╪╔╦╩╡╬х╓н╓Ё╓х)╓Р╦╚иу╓╠╓К╓©╓А╓к, ╓Б╓╕ 1 ╡С, ╩З╤Г╡Рюо╓Р╧т╓╓╓ч╓╧. ╓Ё╓н╓Х╓╕╓к╩З╤Г╡Рюо╓о 2 ╡С╥╚╓Ййж╓╣╓Л╓ч╓╧╓н╓г, ю╣╓╥╓╓╡С©Т╓ю╓╠╔╗╔╧╔╠║╪╔в╫ХмЩ╓Р╧т╓О╓й╓╓╓х╓╓╓╠╓ч╓╩╓С. ╔Б╔г╔Ю╓к╓©╓х╓╗╓п \ ╓н╓Х╓╕╓йй╦╩З╓РаВ╓Й╓©╓╓╬Л╧Г╓к╓о, ╪║╓н╓Х╓╕╓к╓╧╓Ки╛мв╓╛╓╒╓Й╓ч╓╧. set dial "\"\" ATZ OK-ATZ-OK AT\\\\X OK" ╪б╨щ╓к╔Б╔г╔Ю╓каВ╓И╓Л╓Кй╦╩ЗнС╓о╪║╓н╓Х╓╕╓к╓й╓Й╓ч╓╧. ATZ OK AT\X OK б╬╓ннЦ╓г╓╧╓х set phone 1234567 set dial "\"\" ATZ OK ATDT\\T" ╓о╪║╓н╓Х╓╕╓к╓й╓Й╓ч╓╧. ATZ OK ATDT1234567 ppp ╓╛ segmentation fault ╓к╓й╓К╓н╓г╓╧╓╛, ppp.core ╔у╔║╔╓╔К╓╛╓╒╓Й╓ч╓╩╓С ppp(╓Дб╬╓н╔в╔М╔╟╔И╔Ю)╓о╥Х╓╥╓ф core ╓Рег╓╓╓ф╓о╓╓╓╠╓ч╓╩╓С. ppp ╓о╪б╦З uid ╓╛ 0 ╓гф╟╓╓╓ф╓╓╓ч╓╧╓н╓г, ╔╙╔з╔Л║╪╔ф╔ё╔С╔╟╔╥╔╧╔ф╔Ю╓о ppp ╓Р╫╙н╩╓╣╓╩╓Ка╟╓к╔г╔ё╔╧╔╞╓к core ╔╓╔А║╪╔╦╓Р╫Я╓╜╧Ч╓ъ╓ч╓╩╓С. ╓╥╓╚╓╥ ppp ╓о╪б╨щ╓к╓о╔╩╔╟╔А╔С╔ф║╪╔╥╔Г╔С╟Цх©╓Д, б╬╓н core ╓Рег╓╞╦╤╟Ь╓х╓й╓К╓Х╓╕╓й╔╥╔╟╔й╔К╓к╓Х╓ц╓ф╫╙н╩╓╥╓ф ╓╙╓Й, ╓╣╓И╓к╨г©╥╓н╔п║╪╔╦╔Г╔С(╓Ё╓н╔╩╔╞╔╥╔Г╔С╓н╩о╓А╓Р╦╚╓ф╓╞╓ю╓╣╓╓)╓Р╩хмя╓╥╓ф╓╓╓К╓й╓И╓п, ╪║╓н╓Х╓╕╓к╓╥╓ф╓╞╓ю╓╣╓╓. &prompt.user; tar xfz ppp-*.src.tar.gz &prompt.user; cd ppp*/ppp &prompt.user; echo STRIP= >>Makefile &prompt.user; echo CFLAGS+=-g >>Makefile &prompt.user; make clean all &prompt.user; su &prompt.root; make install &prompt.root; chmod 555 /usr/sbin/ppp ╓Ё╓Л╓г╔г╔п╔ц╔╟╡дг╫╓й╔п║╪╔╦╔Г╔С╓н ppp ╓╛╔╓╔С╔╧╔х║╪╔К╓╣╓Л╓ч╓╧. root ╓г ppp ╓Р╪б╧т╓╥, а╢╓ф╓нфц╦╒╓╛л╣╦З╓к╓й╓ц╓ф╓╓╓К╓Х╓╕╓к╓╧╓Ки╛мв╓╛╓╒╓К╓г╓╥╓Г╓╕. ppp ╓Р╪б╧т╓╧╓К╩Ч╓к╓о, ╔╚╔Л╔С╔х╔г╔ё╔Л╔╞╔х╔Й╓╛ make ╓╥╓©╔г╔ё╔Л╔╞╔х╔Й╓г╓╒╓К╓Х╓╕╓к╓╥╓ф╓╞╓ю╓╣╓╓. ╓Ё╓Л╓г, ppp ╓╛╔╩╔╟╔А╔С╔ф║╪╔╥╔Г╔СнЦЁ╟╓Р╪У╓╠╪Х╓ц╓©╓х╓╜╓к╓о ppp.core ╓х╓╓╓╕л╬а╟╓н core ╔у╔║╔╓╔К╓Рег╓╞╓Х╓╕╓к╓й╓Й╓ч╓╧. core ╓╛ ег╓╚╓Л╓©╓И╪║╓н╓Х╓╕╓к╓╥╓ф╓╞╓ю╓╣╓╓. &prompt.user; su &prompt.root; gdb /usr/sbin/ppp ppp.core (gdb) bt ..... (gdb) f 0 .... (gdb) i args .... (gdb) l ..... ╪алД╓╧╓К╨щ╓к╓о, ╓Ё╓Л╓Иа╢╓ф╓н╬ПйС╓РдС╤║╓╥╓ф, лДбЙею╓нй╛юо╓╛╓г╓╜╓К╓Х╓╕╓к╓╥╓ф╓╞╓ю╓╣╓╓. gdb ╓н╩х╓╓йЩ╓к╢╥╓Л╓ф╓╓╓К╬Л╧Г╓к╓о, ╪б╨щ╓к dump ╓н╦╤╟Ь╓х╓й╓ц╓©мЩмЁ╓Д╓╫╓н╔╒╔и╔Л╔╧, ╢ьо╒╓╥╓©йя©Т╓нцм╓й╓и╓Бд╢╓ы╓К╩Ж╓╛╓г╓╜╓К╓г╓╥╓Г╓╕. auto ╔Б║╪╔и╓г╔ю╔╓╔╒╔К╓Р╓╧╓К╓Х╓╕╓й╔в╔М╔╩╔╧╓╛юэбЁ╓╣╓Л╓й╓╓. ╓Ё╓Л╓о ppp ╓╛╔М║╪╔╚╔Кб╕╓н IP ╔╒╔и╔Л╔╧╓Р, ф╟е╙╓кдл©╝аЙ╪Й╓х╦Р╬д╓╧╓К╓Х╓╕╓кюъдЙ╓╣╓Л╓ф╓╓╓К╩Ч╓кх╞ю╦╓╧╓Кни╓╞цн╓И╓Л╓©╬ЦЁ╡╓г╓╥╓©. ╨г©╥╓н╔п║╪╔╦╔Г╔С╓г╓о, ╓Ё╓нлДбЙ╓о╫╓ю╣╓╣╓Л╓ф╓╓╓ч╓╧. iface ╓Р╔ч╔к╔Е╔╒╔К╔з║╪╔╦╓╚╓И╦║╨В╓╥╓ф╓ъ╓ф╓╞╓ю╓╣╓╓. ╓Ё╓Л╓о, ╨г╫И╓н╔в╔М╔╟╔И╔Ю╓╛ connect(2) ╓Р╦ф╓с╫п╓╥╓©╩Ч, tun ╔╓╔С╔©║╪╔у╔╖╔╓╔╧╓н IP ╔╒╔и╔Л╔╧╓╛, ╔╫╔╠╔ц╔х╓н╫╙ц╪╓кЁД╓ЙеЖ╓ф╓И╓Л╓ф╓╥╓ч╓╕╓х╓╓╓╕лДбЙ╓г╓╧. ╔╚║╪╔м╔К╓о, Ё╟╓ь╫п╓ф╓╓╓╞╨г╫И╓н╔я╔╠╔ц╔х╓Р╨Н╓Й, ╓╫╓Л╓Р tun ╔г╔п╔╓╔╧╓ь╫Я╓╜╧Ч╓ъ╓ч╓╧. ╓╫╓╥╓ф ppp ╓о, ╓╫╓н╔я╔╠╔ц╔х╓Рфи╓ъ╧Ч╓С╓гюэбЁ╓РЁнн╘╓╥╓ч╓╧. ppp ╓оф╟е╙╓к IP ╔╒╔и╔Л╔╧╓РЁД╓ЙеЖ╓ф╓К╓©╓А, ╓Б╓╥╔╓╔С╔©║╪╔у╔╖╔╓╔╧╓н╔╒╔и╔Л╔╧╓╛йя╡╫╓╥╓ф╓╥╓ч╓╕╓х, ╨г╫И╓кЁД╓ЙеЖ╓ф╓И╓Л╓©╔╫╔╠╔ц╔х╫╙ц╪╓н IP ╔╒╔и╔Л╔╧╓ол╣╦З╓к╓й╓ц╓ф╓╥╓ч╓╓╓ч╓╧. ╓╫╓н╓©╓А, ╓╫╓Л╟й╧ъаЙ╪Й╓каВ╓И╓Л╓Ка╢╓ф╓н╔я╔╠╔ц╔х╓одл╬О, аЙ╪Й╓кфо╓╞╓Ё╓х╓о╓й╓╓╓г╓╥╓Г╓╕. ╓Б╓╥╡╬╓кфо╓╓╓©╓х╓╥╓ф╓Б, ╢Ш╓к╓Ё╓а╓И╓н IP ╔╒╔и╔Л╔╧╓ойя╧╧╓╣╓Л╓ф╓╓╓К╓н╓г, ╓и╓С╓йх©╠Ч╓Б╨г╫И╓н╔ч╔╥╔С╓к╓олА╓ц╓ф╓╜╓ч╓╩╓С. ╓Ё╓нлДбЙ╓кбп╫Х╓╧╓КмЩоюе╙╓ййЩк║╓╛╓╓╓╞╓д╓╚╓╒╓Й╓ч╓╧. ╓Б╓╥╡дг╫╓й╓И, аЙ╪Й╓╛╨феы, ф╠╓╦ IP ╔╒╔и╔Л╔╧╓РЁД╓ЙеЖ╓ф╓ф╓╞╓Л╓К╓Ё╓х╓╛╟Лхж╓г╓╧ :-) ppp ╓н╦╫╨ъ╓н╔п║╪╔╦╔Г╔С╓о╓Ё╓Л╓Р╧т╓й╓╓╓ч╓╧╓╛, б╬╓н╓ш╓х╓С╓и╓н╪баУ╓о╓╫╓╕╓╓╓ц╓©ф╟╨Н╓Р╓╥╓ч╓╩╓С. ╡Ф║╧╓нб╕╓╚╓Ибп╫Х╓г╓╜╓К╨г╓Б╢йц╠╓ййЩк║╓о, tun ╔╓╔С╔©║╪╔у╔╖╔╓╔╧╓н IP ╔╒╔и╔Л╔╧╓Р╦гдЙ╓╧╓К╩Ж╓г╓╧. ╓ч╓©╓╫╓н╓╚╓О╓Й╓к, Ё╟╓к╫п╓ф╓╓╓╞╔я╔╠╔ц╔х╓Рйя╧╧╓╥╓ф, х╞©╝╦╣ IP ╔╒╔и╔Л╔╧╓Р╔╓╔С╔©║╪╔у╔╖╔╓╔╧╓н IP ╔╒╔и╔Л╔╧╓╚╓И, ╦Р╬д╓к╓Х╓ц╓ффю╓И╓Л╓© IP ╔╒╔и╔Л╔╧╓к, е╛╣╧╫Я╓╜╓╚╓╗╓К╩Ж╓к╓Х╓ц╓ф╓Ббп╫Х╓г╓╜╓ч╓╧. ╓Ё╓Л╓о, ╢Пкэе╙╓к ppp ╓н╨г©╥╔п║╪╔╦╔Г╔С╓к╓╒╓К iface-alias ╔╙╔в╔╥╔Г╔С╓╛╧т╓й╓ц╓ф╓╓╓К╓Ё╓х╓хф╠╓╦╓г╓╧(libalias(3) ╓╙╓Х╓с, ppp ╓н ╔╧╔╓╔ц╔а╓к╓Б╢ь╥╦╓╥╓ч╓╧). ╓╫╓Л╓о, ╟йа╟╓н IP ╔╒╔и╔Л╔╧╓Ра╢╓ф╢имЩ╓╥, ╓╫╓Л╓И╓Р╨г╦Е╓н╦Р╬д╓к╓Х╓ц╓ффю╓И╓Л╓© IP ╔╒╔и╔Л╔╧╓кбп╓╥╓ф NAT ╣║г╫╓Рм╜╦З╡╫╓╥╓ч╓╧. ╓Б╓╕ 1 ╓д╓н(╓╙╓╫╓И╓╞╨г╓Б©╝мЙ╓г╓╜╓К)йЩк║╓о, bind ╓╣╓Л╓© а╢╓ф╓н╔╫╔╠╔ц╔х╓н IP ╔╒╔и╔Л╔╧╓Р, ╟ш╓й╓К╓Б╓н╓кйя╧╧╓г╓╜╓К╔╥╔╧╔ф╔Ю╔Ё║╪╔К╓Р╪баУ╓╧╓К╓Ё╓х╓г╓╧. ppp╓о, ╦Р╬д╓к╓Х╓ц╓ф©╥╓╥╓╓ IP ╔╒╔и╔Л╔╧╓Рфю╓©╩Ч, ╓Ё╓н╔╥╔╧╔ф╔Ю╔Ё║╪╔К╓Рмя╓╓╓ф╪б╧т╓╣╓Л╓ф╓╓╓К╔в╔М╔╟╔И╔Ю╓к╓╒╓К, а╢╓ф╓н╔╫╔╠╔ц╔х╓Р╫Я╓╜╓╚╓╗╓ф╓Д╓К╓О╓╠╓г╓╧. ф╠╓╦╔╥╔╧╔ф╔Ю╔Ё║╪╔К╓╛, DHCP ╔╞╔И╔╓╔╒╔С╔х╓╛мЬмя╓╧╓К╔╫╔╠╔ц╔х╓Р ╤╞ю╘е╙╓к╨ф bind ╓╧╓К╓н╓к╓Б╩х╓╕╓Ё╓х╓╛╓г╓╜╓К╓г╓╥╓Г╓╕. 3 ╓длэ╓нйЩк║╓о, IP ╔╒╔и╔Л╔╧╓Р╩ьдЙ╓╥╓й╓╓╓г╔╓╔С╔©║╪╔у╔╖╔╓╔╧╓РмЬмя╓г╓╜╓К╓Х╓╕╓к╓╧╓К╓Ё╓х╓г╓╧. Ё╟╓к╫п╓ф╓╓╓╞╔я╔╠╔ц╔х╓о, ╨г╫И╓н SIOCAIFADDR ioctl ╓н╢╟н╩╓ч╓г, 255.255.255.255 ╓х╓╓╓╕ IP ╔╒╔и╔Л╔╧ ╓╛м©╓╗╓И╓Л╓ч╓╧. ╓Ё╓Л╓к╓Х╓ц╓ф. ╔╫╔╠╔ц╔х╓о╬О╓к bind ╓╧╓К╓Ё╓х╓╛╓г╓╜╓ч╓╧. ppp ╓кбп╓╥╓фх╞©╝╦╣ IP ╔╒╔и╔Л╔╧╓Рйя╧╧╓╣╓╩╓К╩Ж╓к╓й╓Й╓ч╓╧╓╛, ╓Б╓╥╓╫╓Л╓╛ 255.255.255.255 ╓к╓й╓ц╓ф╓╓╓©╓И, IP ╔╒╔и╔Л╔╧╓х IP ╔а╔╖╔ц╔╞╔╣╔Ю╓ю╓╠йя╧╧╓╧╓Л╓пни╓╠╓Л╓п╓ноц╓к╓й╓Й╓ч╓╧. ╓Ё╓нйЩк║╓о╓а╓Г╓ц╓х╓╥╓©йя╧╧╓г╓╧╓╛, б╬╓н╣║╧╫╓╛╨ё╓ч╓г╓н╓Х╓╕╓к, IP ╔╒╔и╔Л╔╧╓Р╦гдЙ╓╥╓фмЬмя╓╧╓К╬Л╧Г╓к, ╔╚║╪╔м╔К╓╛ите╛юз╓кюъдЙ╓╣╓Л╓©╔╓╔С╔©║╪╔у╔╖╔╓╔╧╓к╦Ч╓╠╓ф, ю╣╬О╓г╓й╓╓╔я╔╠╔ц╔х╓РаВ╓Й╫п╓╥╓ф╓╥╓ч╓╕╡дг╫ю╜╓╛╓╒╓Й╓ч╓╧. ╡©╦н╓ш╓х╓С╓и╓н╔╡║╪╔Ю╓╛ ╔╧╔╓╔ц╔аиу╓╜╓ю╓хф╟╓╚╓й╓╓╓С╓г╓╧╓╚? libalias ╓Р╩х╓ц╓ф╓╓╓К╩Ч╓к╔╡║╪╔Ю╓й╓и╓ннЮ╓н╓Б╓н╓╛ф╟╨Н╓╥╓й╓╓мЩмЁ╓о, Ё╟б╕╓к╓╒╓К╔ч╔╥╔С╓╛юэбЁ╓╥╓Х╓╕╓х╓╥╓ф╓╓╓К╓╚, фБб╕╓к╓╒╓К╔ч╔╥╔С╓к (м╬╥в╓й)UDP ╔я╔╠╔ц╔х╓РаВ©╝╓╥╓Х╓╕╓х╓╥╓ф╓╓╓К╓╚╓И╓г╓╧. фБб╕╓н╔ч╔╥╔С╓к╓Ё╓Л╓И╓н╔я╔╠╔ц╔х╓РаВ╓К╓ы╓╜╓╚╓к╓д╓╓╓ф, NAT ╔╫╔у╔х╔╕╔╖╔╒╓о╢ьцн╓╥╓ч╓╩╓С. ╓╕╓ч╓╞ф╟╓╚╓╧╓©╓А╓к╓о, ╪б╧тцФ╓н╓Б╓н╓╛лДбЙ╓нх╞ю╦╓╥╓ф╓╓╓К╔╫╔у╔х╔╕╔╖╔╒╓ю╓╠╓г╓╒╓К╓╚╓РЁнг╖╓╥, ╔╡║╪╔х╔╕╔╖╔╓╓н tun ╔╓╔С╔©╔у╔╖║╪╔╧╓кбп╓╥╓ф tcpdump ╓Р╪б╧т╓╧╓К╓╚, ╔╡║╪╔х╔╕╔╖╔╓╬Е╓г ppp ╓н TCP/IP ╔М╔╟╣╜о©╓Рм╜╦З╡╫(set log +tcp/ip)╓╥╓ф╓╞╓ю╓╣╓╓. ╧т╣╥╓н╟╜╓╓╔╫╔у╔х╔╕╔╖╔╒╓Р╣╞ф╟╓╧╓К╨щ╓к, ╔╡║╪╔х╔╕╔╖╔╓╔ч╔╥╔С╓Рдл╡А╓╧╓К╔я╔╠╔ц╔х╓Р╢ф╩К╓╧╓ы╓╜╓г╓╧. Ё╟б╕╓╚╓И╡©╓╚╔я╔╠╔ц╔х╓╛лА╓ц╓ф╓╜╓©╩Ч╓к, ╓╫╓н╔я╔╠╔ц╔х╓огк╢Ч╓╣╓Л╓К╓г╓╥╓Г╓╕(╓╫╓Л╓╛лДбЙ╓й╓н╓г╓╧). ╓Ё╓Л╓И╓н╔я╔╠╔ц╔х╓н╔щ║╪╔ххж╧Ф╓кцМ╟у╓╥╓ф, ╓╫╓н╧т╣╥╓н╟╜╓╓╔╫╔у╔х╔╕╔╖╔╒╓РдД╩ъ╓╥╓ф╓╞╓ю╓╣╓╓. ╓Ё╓Л╓Р©Т╡С╥╚╓Ййж╓╥╓ф╔щ║╪╔ххж╧Ф╓╛╬О╓кф╠╓╦╓г╓╒╓К╓╚╓РЁнг╖╓╥╓ф╓ъ╓ф╓╞╓ю╓╣╓╓. ф╠╓╦╓г╓╒╓ц╓©╬Л╧Г╓о, /etc/ppp/ppp.conf ╓не╛юз╓й╔╩╔╞╔╥╔Г╔С╓к╪║╓н╧т╓РфЧ╓Л╓К╓х, ╓╫╓н╔╫╔у╔х╔╕╔╖╔╒╓оф╟╨Н╓╧╓К╓Х╓╕╓к╓й╓К╓г╓╥╓Г╓╕. nat port proto internalmachine:port port ╓Ё╓Ё╓г proto ╓о tcp ╓╚ udp ╓г╓╒╓Й, internalmachine ╓о╔я╔╠╔ц╔х╓РаВ╓Й╓©╓╓╔ч╔╥╔С, ╓╫╓╥╓ф port ╓о╔я╔╠╔ц╔х╓наВ©╝юХ╓н╔щ║╪╔ххж╧Ф╓г╓╧. ╬Е╣╜╓н╔Ё╔ч╔С╔и╓Рйя╧╧╓╩╓╨╓к, б╬╓н╔ч╔╥╔С╬Е╓г╓╫╓н╔╫╔у╔х╔╕╔╖╔╒╓Р╩хмя╓г╓╜╓К╓Х╓╕╓к╓о╓╥╓©╓╞╓й╓╓╓╚╓Б╓╥╓Л╓ч╓╩╓С. ╓╫╓╥╓фф╠╩Ч╓кфС╓д╓нфБиТ╓н╔ч╔╥╔С╬Е╓г╓╫╓н╔╫╔у╔х╔╕╔╖╔╒╓Р╪б╧т╓╧╓К╓Ё╓х╓о, ╓Ё╓н╪алД╓нхо╟о╓Рд╤╓╗╓ф╓╓╓ч╓╧. ╥К╤и, Ё╟б╕╓ню╓Ё╕╓╚╓И╓о, фБиТ╔м╔ц╔х╔О║╪╔╞а╢бн╓╛╓©╓ю╟Л╓д╓н╔ч╔╥╔С╓х╓╥╓ф╦╚╓╗╓К╓н╓г╓╧. ╔щ║╪╔ххж╧Ф╓╛╬О╓кф╠╓╦╓х╓о╦б╓И╓й╓╓╬Л╧Г, ╓╣╓И╓к╩╟╓д╓н╔╙╔в╔╥╔Г╔С╓╛╓╒╓Й╓ч╓╧. libalias ╓г╔╣╔щ║╪╔х╓╧╓К╓Х╓╕╓к╓╥, ╥К╡л╓РаВ╓Йиу╓╠╓К. фцдЙ╓н╬Л╧Г╓ннЦ╓о /usr/src/lib/libalias/alias_*.c ╓к╓╒╓Й╓ч╓╧(alias_ftp.c ╓они╓╓╔в╔М╔х╔©╔╓╔в╓г╓╧). ╓Ё╓Л╓к╓одл╬О, Ё╟╦Ч╓╜╓нфцдЙ╓н╔я╔╠╔ц╔х╓Рфи╓ъ, фБиТ╓н╥в╩╩╣║╓н╓╒╓КфцдЙ╓н╔щ║╪╔х╓ь╓нюэбЁ╓РЁ╚╩о╓╧╓К╓Х╓╕╓йл©нА╓╛, Ё╟иТ╓н╥в╩╩╣║бп╓╥╓фаВ╓И╓Л╓ф╓╓╓К╓Ё╓х╓Р╦╚й╛╓╠, ╦ЕбЁ╓н╔я╔╠╔ц╔х╓╛╓и╓Ё╓к╧т╓╠╓п╓╓╓╓╓н╓╚╓╛й╛╓╚╓К╓Х╓╕╓к, ╔╗╔╓╔Й╔╒╔╧╔ф║╪╔ж╔КцФ╓н route ╓ниТй╛╓РюъдЙ╓╧╓К, ╓х╓╓╓╕╨Н╤х╓╛╢ч╓ч╓Л╓ч╓╧. ╓Ё╓Л╓о╨г╓БфЯ╓╥╓╓йЩк║╓г╓╧╓╛, ╨г╓Бни╓╓йЩк║╓г╓Б╓╒╓Й╓ч╓╧╓╥, ╔╫╔у╔х╔╕╔╖╔╒╓╛ йё©Т╓н╥в╩╩╣║╓гф╟╓╞╓Х╓╕╓к╓г╓╜╓ч╓╧. ╔в╔М╔╜╔╥(proxy)╓Р╩х╓╕. ╔╒╔в╔Й╔╠║╪╔╥╔Г╔С╓╛, нЦ╓╗╓п socks5 ╓Р╔╣╔щ║╪╔х╓╥╓ф╓╓╓К╓╚, (cvsup ╓н╓Х╓╕╓к) passive ╔╙╔в╔╥╔Г╔С╓Р╩Щ╓ц╓ф╓╓╓К╓х╓Ё╓нйЩк║╓╛╩х╓╗╓ч╓╧. passive ╓х╓оаЙ╪Йб╕╓н╓ш╓╕╓╚╓ИюэбЁ╓Р╣А╓А╓ф╓╞╓К╓Ё╓х╓РхР╓╠╓К╓©╓А╓к╓╒╓К╔╙╔в╔╥╔Г╔С╓г╓╧. nat addr ╓Р╩х╓ц╓ф╓й╓С╓г╓Б╓╚╓С╓г╓БфБиТ╓н╥в╩╩╣║╓к╦Ч╓╠╓фн╝╓╥╓ф╓╥╓ч╓╕. ╓Ё╓Л╓о╓а╓Г╓ц╓хл╣мЩлПмЩ╓й╡Р╥Хк║╓г╓╧. м╜мя╓й╔щ║╪╔ххж╧Ф╓н╔Й╔╧╔х╓о╓╒╓Й╓ч╓╩╓С╓╚? ╓ч╓ю╫пмХ╓ф╓╓╓ч╓╩╓С. ╓╥╓╚╓╥, ╓Ё╓Л╓о(╢ь©╢╓Р╩Щ╓ц╓фд╨╓╠╓К╓й╓И╓п)╓╫╓╕╓╓╓ц╓©╔Й╔╧╔х╓к╓╥╓ф╓╓╓╞м╫дЙ╓г╓╧. ╓╫╓Л╓╬╓Л╓ннЦ╓к╓╒╓К internal ╓о, ╔╡║╪╔Ю╓гм╥╓ж╔ч╔╥╔С╓н IP ╔╒╔и╔Л╔╧╓кцж╓╜╢╧╓╗╓ф╓╞╓ю╓╣╓╓. Asheron's Call nat port udp internal:65000 65000 ╪Йф╟╓г╔╡║╪╔Ю╓н╔щ║╪╔ххж╧Ф╓Р 65000 ╓кйя╧╧╓╥╓ф╓╞╓ю╓╣╓╓. ╔ч╔╥╔С╓╛йё©Т╓╒╓К╬Л╧Г╓о, ╓╫╓Л╓╬╓Л╓н╔ч╔╥╔С╓к╫ейё╓╥╓й╓╓╔щ║╪╔ххж╧Ф(╓д╓ч╓Й 65001, 65002 ╓й╓и)╓РюъдЙ╓╥, ╓╫╓нюъдЙ╓╢╓х╓к nat port ╓н╧т╓Рди╡ц╓╥╓ч╓╧. Half Life nat port udp internal:27005 27015 PCAnywhere 8.0 nat port udp internal:5632 5632 nat port tcp internal:5631 5631 Quake nat port udp internal:6112 6112 ╓Ё╓н╓Х╓╕╓кюъдЙ╓╧╓КбЕ╓О╓Й╓к, www.battle.net ╓г Quake ╓н╔в╔М╔╜╔╥(proxy)╓╛╔╣╔щ║╪╔х╓╣╓Л╓ф╓╓╓К╓╚д╢╓ы╓ф╓Б╓╓╓╓╓г╓╥╓Г╓╕. Quake2 alias port udp internal:27901 27910 Red Alert nat port udp internal:8675 8675 nat port udp internal:5009 5009 FCS ╔╗╔И║╪╓ц╓ф╡©? FCS ╓х╓о Frame Check Sequence(╔у╔Л║╪╔Ю╔а╔╖╔ц╔╞╔╥║╪╔╠╔С╔╧)╓нн╛╓г╓╧. ╦д║╧╓н ppp ╔я╔╠╔ц╔х╓к╓о, аВ╪У©╝╓╧╓К╔г║╪╔©╓╛ю╣╓╥╓╓╓╚╓Рд╢╓ы╓К╓©╓А╓н╔а╔╖╔ц╔╞╔╣╔Ю╓╛╢ч╓ч╓Л╓ф╓╓╓ч╓╧. ╪У©╝╓╥╓©╔я╔╠╔ц╔х╓н FCS ╓╛ю╣╓╥╓╞╓й╓╓╬Л╧Г╓о, ╓╫╓н╔я╔╠╔ц╔х╓огя╢Ч╓╣╓Л, HDLC FCS ╔╚╔╕╔С╔х╓╛аЩ╓Д╓╣╓Л╓ч╓╧. HDLC ╔╗╔И║╪╓н©Т ╓о, show hdlc ╔Ё╔ч╔С╔и╓Р╩х╓ц╓фи╫╪╗╓г╓╜╓ч╓╧. ╔Й╔С╔╞╓ний╪а╓╛╟╜╓╚╓ц╓©╓Й, ╔╥╔Й╔╒╔К╔и╔И╔╓╔п╓╛╔я╔╠╔ц╔х╓Р╪Х╓Й╓Ё╓э╓╥╓ф╓╓╓©╓Й╓╧╓К╓х, FCS ╔╗╔И║╪╓╛╓©╓с╓©╓сх╞ю╦╓╥╓ч╓╧. FCS ╔╗╔И║╪╓о, ╟╣╫л╔в╔М╔х╔Ё╔К╓нб╝еыдЦ╡╪╓н╦╤╟Ь╓к╓о╓й╓Й╓ч╓╧╓╛, фц╓к©╢гш╓╧╓Ки╛мв╓о╓╒╓Й╓ч╓╩╓С. Ё╟иу╓╠╔Б╔г╔Ю╓Р╩х╓ц╓ф╓╓╓К╬Л╧Г╓о, ╔╠║╪╔ж╔К╓╛╓а╓Ц╓С╓х╔╥║╪╔К╔и╓╣╓Л╓ф╓╓╓К╓╚╓РЁнг╖╓╥╓ф╓╞╓ю╓╣╓╓. ╓╫╓╕╓г╓й╓╓╬Л╧Г, FCS ╔╗╔И║╪╓н╦╤╟Ь╓х╓й╓К╬Л╧Г╓╛╓╒╓Й╓ч╓╧. юэбЁд╬╦Е╓╚╓И╔Й╔С╔╞╓╛╔у╔Й║╪╔╨╓╥, бГнл╓н FCS ╔╗╔И║╪╓╛х╞ю╦╓╧╓К╬Л╧Г╓о, ╔Й╔С╔╞╓╛ 8 ╔с╔ц╔х╔╞╔Й║╪╔С╓г╓й╓╓╡дг╫ю╜╓╛╓╒╓Й╓ч╓╧. ╔╫╔у╔х╔╕╔╖╔╒╔у╔М║╪ю╘╦Ф(XON/XOFF) ╓╛╩х╓О╓Л╓ф╓╓╓й╓╓╓Ё╓х╓РЁнг╖╓╥╓ф╓╞╓ю╓╣╓╓. ╓и╓╕╓╥╓ф╓Б╔╫╔у╔х╔╕╔╖╔╒╔у╔М║╪ю╘╦Ф╓Р╩х╓О╓й╓╠╓Л╓п╓й╓И╓й╓╓╬Л╧Г╓о, set accmap 0x000a0000 ╔Ё╔ч╔С╔и╓Р╩хмя╓╥╓ф, ppp ╓к ^Q ╓х ^S ╓Р╔╗╔╧╔╠║╪╔в╓╣╓╩╓ф╓╞╓ю╓╣╓╓. ╔Й╔Б║╪╔х╔ш╔╧╔х╓╛ PPP ╔в╔М╔х╔Ё╔К╓Р╩хмя╓╥╓ф╓й╓╓╬Л╧Г╓Б, бГнл╓н FCS ╔╗╔И║╪╓╛х╞ю╦╓╥╓ч╓╧. ╓Ё╓н╬Л╧Г╓о╔М╔╟╓Р╓х╓Й╓й╓╛╓ИхСф╠╢Э╓гюэбЁ╓╥, ╔М╔╟╔╓╔С╔в╔М╔С╔в╔х╓Д╔╥╔╖╔К╔в╔М╔С╔в╔х╓╛аВ╓И╓Л╓фмХ╓ф╓╓╓й╓╓╓╚Ёнг╖╓╥╓ф╓╞╓ю╓╣╓╓. ╔М╔╟╔у╔║╔╓╔К╓к╔Й╔С╔╞╓Р╫╙н╩╓╥╓©╦╤╟Ь╓х╓й╓К╓Х╓╕╓й╣╜о©╓╛╓й╓╓╬Л╧Г╓о, ╔Й╔Б║╪╔х╔ш╔╧╔х(╔в╔М╔п╔╓╔ю?)╓н╢имЩ╪т╓к, ╔╩╔ц╔╥╔Г╔С╓Р╫╙н╩╓╣╓Л╓©мЩмЁ╓Р©р╓м╓ф╓╞╓ю╓╣╓╓. ╔╡║╪╔х╔╕╔╖╔╓╓г PPPoE ╓Р╪б╧т╓╧╓К╓х MacOS ╓Д Windows 98 ╓х╓нюэбЁ╓╛╔у╔Й║╪╔╨╓╥╓ф╓╥╓ч╓╕╓н╓г╓╧╓╛, ╓Ё╓Л╓о╓й╓╪╓й╓н╓г╓╥╓Г╓╕╓╚? Michael Wozniak mwozniak@netcom.ca ╩А╓╛, ╓Ё╓н╦╫╬щ╓к╢ь╓╥╓фюБлю╓╥╓ф╓╞╓Л╓ч╓╥╓©. ╓ч╓©, Dan Flemming danflemming@mac.com ╩А╓о MacOS ╓г╓н╡Р╥Х╨Ж╓РдС╤║╓╥╓ф╓╞╓Л╓ч╓╥╓©. ╬ПйС╓ндС╤║╓к╢╤╪у╓╥╓ч╓╧. ╓Ё╓Л╓о, ╓╓╓О╓Ф╓К║ж╔ж╔И╔ц╔╞╔ш║╪╔К╔К║╪╔© (Black Hole router)║в╓к╦╤╟Ь╓╛╓╒╓Й╓ч╓╧. Windows 98 ╓х MacOS (╓╙╓Х╓с, ╓╙╓╫╓И╓╞б╬╓н Microsoft ╪рю╫ OS) ╓н TCP ╔я╔╠╔ц╔хаВ╫п╓о, PPPoE ╓н╔у╔Л║╪╔Ю (Ethernet ╓н MTU ╓ои╦╫Ю╓г 1500) ╓кфЧ╓И╓й╓╓╓Х╓╕╓йбГ╓╜╓й╔╩╔╟╔А╔С╔х╔╣╔╓╔╨╓Рмв╣А╓╥╓ч╓╧. ╓╫╓╥╓ф╓╣╓И╓кй╛ЁД╤ь╩ъ ("don't fragment") ╔у╔И╔╟╔с╔ц╔х╓Р (TCP ╔я╔╠╔ц╔х╓к╔г╔у╔╘╔К╔х╓г) ╔╩╔ц╔х╓╧╓К╓н╓г╓╧╓╛, Telco ╓н╔К║╪╔©╓о, й╛ЁД╓╛и╛©э ("must fragment") ╓г╓╒╓К╓Ё╓х╓Р╪╗╓╧ ICMP ╔А╔ц╔╩║╪╔╦╓Р, юэбЁ╓╥╓Х╓╕╓х╓╧╓К╔╕╔╖╔ж╔╣╔╓╔х╓кбп╓╥╓фаВ╫п╓╥╓ч╓╩╓С (╓д╓ч╓Й, ╔К║╪╔©╓ою╣╓╥╓╞ ICMP ╔я╔╠╔ц╔х╓РаВ╫п╓╥╓ф╓╓╓К╓н╓г╓╧╓╛, ╔╕╔╖╔ж╔╣╔╓╔х╓н╔у╔║╔╓╔╒╔╕╔╘║╪╔К╓╛╓╫╓Л╓РмН╓х╓╥╓ф╓╓╓К╓н╓г╓╧). ╓╫╓н╓©╓А╔╕╔╖╔ж╔╣║╪╔п╓╛ PPPoE юэбЁ╓кбп╓╥╓фбГ╓╜╓╧╓╝╓К╔у╔Л║╪╔Ю╓РаВ╫п╓╧╓К╓х Telco ╓н╔К║╪╔©╓о╓╫╓н╔у╔Л║╪╔Ю╓Р╪н╓ф╓ф╓╥╓ч╓╓, ╦╚╓Х╓╕╓х╓╥╓©╔з║╪╔╦╓╛и╫╪╗╓╣╓Л╓й╓╓╓х╓╓╓╕╬и╬У╓╛╦╫╓О╓Л╓ч╓╧ (MSS ╓Х╓Й╬╝╓╣╓╓╔з║╪╔╦╓Д╡ХаЭ╓ои╫╪╗╓╣╓Л╓ч╓╧). ╓ш╓х╓С╓и╓н Telco PPPoE юъдЙ╓о, и╦╫Ю╓г╓Ё╓н╓Х╓╕╓кюъдЙ╓╣╓Л╓ф╓╓╓К╓Х╓╕╓г╓╧. (╓╒╓╒, хЮ╓И╓╛╔К║╪╔ф╔ё╔С╔╟╔в╔М╔╟╔И╔Ю╓н╨Н╓ЙйЩ╓РмЩ╡Р╓╥╓ф╓╣╓╗╓╓╓Л╓п...). ╟Л╓д╓н╡Р╥Хк║╓о, Windows 95/98 ╔ч╔╥╔С╓г regedit ╓Р╩х╓╓, ╪║╓н╔Л╔╦╔╧╔х╔Й╔╗╔С╔х╔Й╓Рди╡ц╓╧╓К╓Ё╓х╓г╓╧. HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\Class\NetTrans\0000\MaxMTU ╔Л╔╦╔╧╔х╔Й╔╗╔С╔х╔Й╓о, 1450 ╓нцм (╓Б╓ц╓хю╣Ён╓к╦ю╓╕╓х, TCP ╔я╔╠╔ц╔х╓Р PPPoE ╔у╔Л║╪╔Ю╓к╢╟а╢╓ке╛╧Г╓╣╓╩╓К╓к╓о 1464 ╓г╓╒╓К╓ы╓╜╓г╓г╓╧╓╛, 1450 ╓х╓╧╓К╓х, ╦╫╓О╓Л╓К╡дг╫ю╜╓╛╓╒╓Кб╬╓н IP ╔в╔М╔х╔Ё╔К╓кбп╓╥╓ф╔╗╔И║╪╔ч║╪╔╦╔С╓РЁнйщ╓╧╓К╓Ё╓х╓╛╓г╓╜╓ч╓╧) ╓к╓╧╓Ки╛мв╓╛╓╒╓Й╓ч╓╧. ╓Ё╓н╔Л╔╦╔╧╔х╔Й╔╜║╪╓о, Windows2000 ╓г Tcpip\Parameters\Interfaces\ID for adapter\MTU ╓к╟э╓╣╓Л╓©╓х╓╓╓╕йС╧П╓╛╓╒╓Й╓ч╓╥╓©. FreeBSD/NAT/PPPoE ╔К║╪╔©╓х╤╕б╦╓╣╓╩╓К╓©╓А╓к Windoze ╓н MTU ╓Рйя╧╧╓╧╓КйЩк║╓к╢ь╓╧╓К╬э╨ы╓о, Microsoft Knowledge Base ╓к╓╒╓К, хж╧Ф Q158474 - Windows TCPIP Registry Entries, ╓╙╓Х╓схж╧Ф Q120642 - TCPIP & NBT Configuration Parameters for Windows NT ╓Р╩╡╬х╓╥╓ф╓╞╓ю╓╣╓╓. ╩дг╟╓й╓Ё╓х╓к, MacOS ╓к╓о TCP/IP юъдЙ╓Рйя╧╧╓╧╓КйЩк║╓╛╓╒╓Й╓ч╓╩╓С. ╓╥╓╚╓╥, Sustainable Softworks ╪р ╓╛хнгД╓╥╓ф╓╓╓К OTAdvancedTuner (OT ╓о OpenTransport ╓х╓╓╓╕ MacOS ╓н TCP/IP ╔╧╔©╔ц╔╞╓нл╬а╟╓н╓Ё╓х) ╓н╓Х╓╕╓й╬╕мя╔╫╔у╔х╔╕╔╖╔╒╓╛б╦╨ъ╓╥╓ч╓╧. ╓Ё╓н╔╫╔у╔х╔╕╔╖╔╒╓о, ╔Ф║╪╔╤╓╚╓И TCP/IP юъдЙ╓нйя╧╧╓Р╧т╓й╓╕╓Ё╓х╓Р╡дг╫╓к╓╥╓ч╓╧. MacOS NAT ╔Ф║╪╔╤╓о╔и╔М╔ц╔в╔ю╔╕╔С╔А╔к╔Е║╪╓╚╓И ip_interface_MTU ╓Ра╙бР╓╥, ╔э╔ц╔╞╔╧╓к╓╒╓К 1500 ╓нбЕ╓О╓Й╓к 1450 ╓РфЧно╓╥, Save as Auto Configure ╓нны╓н╔э╔ц╔╞╔╧╓Р╔╞╔Й╔ц╔╞╓╥╓ф Make Active ╓Р╔╞╔Й╔ц╔╞╓╧╓Ки╛мв╓╛╓╒╓Й╓ч╓╧. ppp ╓н╨г©╥хг (2.3 ╓╚╓╫╓Л╟й╧ъ) ╓к╓о, ╪╚ф╟е╙╓к MSS ╓Ре╛юз╓йцм╓кд╢юА╓╧╓К enable tcpmssfixup ╔Ё╔ч╔С╔и╓╛╓╒╓Й╓ч╓╧. ╓Ё╓н╣║г╫╓ои╦╫Ю╓гм╜╦З╓к╓й╓ц╓ф╓╓╓ч╓╧. ╓Б╓╥╣Л╔п║╪╔╦╔Г╔С╓н ppp ╓Р╩х╓О╓й╓╠╓Л╓п╓й╓И╓й╓╓╬У╤╥╓к╓╒╓К╓й╓И, tcpmssd ╓н port ╓Р╓╢мВ╓к╓й╓К╓хни╓╓╓г╓╥╓Г╓╕. ╓и╓Л╓к╓БеЖ╓ф╓о╓ч╓И╓й╓╓! ╓и╓╕╓╥╓©╓И╓╓╓╓╓н? ╓Ё╓Л╓ч╓г╓н╓╧╓ы╓ф╓н╪алД╓кеЖ╓ф╓о╓ч╓И╓й╓╓╬Л╧Г, юъдЙ╔у╔║╔╓╔К, ppp ╓н╪б╧тйЩк║, ╔М╔╟╔у╔║╔╓╔К╓нЁ╨еЖиТй╛╓х netstat -rn ╔Ё╔ч╔С╔и╓н╫пно (юэбЁа╟╓хюэбЁ╦Е) ╓Р╢ч╓Ю, ╓╒╓й╓©╓н╩Щ╓ц╓ф╓╓╓Ка╢╓ф╓н╬ПйС╓Р &a.questions; ╓Д comp.unix.bsd.freebsd.misc ╔к╔Е║╪╔╧╔╟╔К║╪╔в╓ьаВ╓ц╓ф╓╞╓ю╓╣╓╓. ц╞╓╚╓╛╓╒╓й╓©╓Рю╣╓╥╓╓йЩ╦Ч╓ьфЁ╓╓╓ф╓╞╓Л╓К╓г╓╥╓Г╓╕. ╔╥╔Й╔╒╔КюэбЁ лУ: ╟Л╣э н╪ ryo@azusa.shinshu-u.ac.jp, 1997 г╞ 11 ╥Н 16 фЭ. ╓Ё╓н╔╩╔╞╔╥╔Г╔С╓г╓о, FreeBSD ╓г╔╥╔Й╔╒╔КюэбЁ╓Р╓╧╓К╩Ч╓н╟Лхле╙╓й╪алД╓кеЗ╓╗╓ч╓╧. PPP ╓╙╓Х╓с SLIP ╓к╓д╓╓╓ф╓о, ╓н╔╩╔╞╔╥╔Г╔С╓Р╩╡╬х╓╥╓ф╓╞╓ю╓╣╓╓. ╓и╓╕╓Д╓ц╓©╓И FreeBSD ╓╛╔╥╔Й╔╒╔К╔щ║╪╔х╓Рг╖╪╠╓╥╓©╓Ё╓х╓Рцн╓К╩Ж╓╛╓г╓╜╓ч╓╧╓╚? FreeBSD ╓н╔╚║╪╔м╔К╓╛╣╞ф╟╓╧╓К╩Ч, ╔╚║╪╔м╔К╓о╓╫╓нюъдЙ╓к╓╥╓©╓╛╓ц╓ф, ╔╥╔╧╔ф╔Ю╓н╔╥╔Й╔╒╔К╔щ║╪╔х╓Р╦║╫п╓╥╓ч╓╧. ╣╞ф╟╩Ч╓ки╫╪╗╓╣╓Л╓К╔А╔ц╔╩║╪╔╦╓Р╓Х╓╞╢я╩║╓╧╓К╓╚, ╣╞ф╟╦Е╓к╪║╓н╔Ё╔ч╔С╔и╓Р╪б╧т╓╧╓К╩Ж╓к╓Х╓ц╓фЁнг╖╓г╓╜╓ч╓╧. dmesg | grep sio ╓Ё╓Ё╓к╬Е╓к╣С╓╡╓©╔Ё╔ч╔С╔и╓н╫пнонЦ╓Р╪╗╓╥╓ч╓╧. sio0 at 0x3f8-0x3ff irq 4 on isa sio0: type 16550A sio1 at 0x2f8-0x2ff irq 3 on isa sio1: type 16550A ╓Ё╓Л╓о, фС╓д╓н╔╥╔Й╔╒╔К╔щ║╪╔х╓Р╪╗╓╥╓ф╓╓╓ч╓╧. 1 хж╓А╓о, irq ╓╛ 4 ╓г 0x3f8 ╓н╔щ║╪╔х╔╒╔и╔Л╔╧╓Р╩хмя╓╥╓ф╓╓╓ч╓╧. ╓╫╓╥╓ф, 16550A-type UART ╔а╔ц╔в╓╛б╦╨ъ╓╥╓ч╓╧. 2 хжлэ╓о, ф╠╓╦╔а╔ц╔в╓Р╩х╓ц╓ф╓╓╓ч╓╧╓╛, irq ╓о 3 ╓г, 0x2f8 ╓н╔щ║╪╔х╔╒╔и╔Л╔╧╓Р╩хмя╓╥╓ф╓╓╓ч╓╧. фБб╒╓н╔Б╔г╔Ю╔╚║╪╔и╓о, дл╬О╓н╔╥╔Й╔╒╔К╔щ║╪╔х╓хф╠╓╦╓Х╓╕╓к╟╥╓О╓Л╓ч╓╧╓╛, ╬О╩Ч╔╥╔Й╔╒╔К╔щ║╪╔х╓к╔Б╔г╔Ю╓╛юэбЁ╓╣╓Л╓ф╓╓╓К╓х╓╓╓╕ею╓г╟ш╓й╓Й╓ч╓╧. GENERIC ╔╚║╪╔м╔К╓о, ╬Е╓ннЦ╓хф╠╓╦ irq ╓х╔щ║╪╔х╔╒╔и╔Л╔╧╓нюъдЙ╓нфС╓д╓н╔╥╔Й╔╒╔К╔щ║╪╔х╓Р╔╣╔щ║╪╔х╓╥╓ф╓╓╓ч╓╧. ╓Ё╓Л╓И╓нюъдЙ╓╛╓╒╓й╓©╓н╔╥╔╧╔ф╔Ю╓к╧Г╓О╓й╓╓╬Л╧Г, ╓ч╓©╓о╔Б╔г╔Ю╔╚║╪╔и╓Рди╡ц╓╥╓©╬Л╧Г╓Д╔╚║╪╔м╔К╓нюъдЙ╟й╬Е╓к╔╥╔Й╔╒╔К╔щ║╪╔х╓Р╩Щ╓ц╓ф╓╓╓К╬Л╧Г╓о, ╔╚║╪╔м╔К╓Р╨ф╧╫цш╓╥╓ф╓╞╓ю╓╣╓╓. ╬э╓╥╓╞╓о, ╔╚║╪╔м╔К╓н╧╫цш╓н╧Ю╓Р╩╡╬х╓╥╓ф╓╞╓ю╓╣╓╓. ╓и╓╕╓Д╓ц╓©╓И FreeBSD ╓╛╔Б╔г╔Ю╔╚║╪╔и╓Рг╖╪╠╓╥╓©╓Ё╓х╓Рцн╓К╓Ё╓х╓╛╓г╓╜╓ч╓╧╓╚? а╟╓н╪алД╓Р╩╡╬х╓╥╓ф╓╞╓ю╓╣╓╓. FreeBSD 2.0.5 ╓к╔╒╔ц╔в╔╟╔Л║╪╔и╓╥╓©╓И tty0X ╓╛╦╚╓д╓╚╓И╓й╓╞╓й╓ц╓ф╓╥╓ч╓ц╓©╓н╓г╓╧╓╛ ©╢гш╓╒╓Й╓ч╓╩╓С. ttydX ╓кеЩ╧Г╓╣╓Л╓ч╓╥╓©. ╓©╓ю, ╦е╓╓юъдЙ╔у╔║╔╓╔К╓н╓╧╓ы╓ф╓Р╧╧©╥╓╧╓Ки╛мв╓╛╓╒╓Й╓ч╓╧. ╓и╓╕╓Д╓ц╓©╓И FreeBSD ╓г╔╥╔Й╔╒╔К╔щ║╪╔х╓к╔╒╔╞╔╩╔╧╓г╓╜╓ч╓╧╓╚? 3 хжлэ╓н╔щ║╪╔х sio2(DOS ╓г╓о, COM3 ╓х╦ф╓п╓Л╓ч╓╧.) ╓к╓о, ╔ю╔╓╔Д╔К╔╒╔╕╔х╔г╔п╔╓╔╧╓х╓╥╓ф╓о /dev/cuaa2, ╔ю╔╓╔Д╔К╔╓╔С╔г╔п╔╓╔╧╓х╓╥╓ф /dev/ttyd2 ╓╛╓╒╓Й╓ч╓╧. ╓╫╓Л╓г╓о╓Ё╓нн╬╪т╓к╓о╓и╓н╓Х╓╕╓й╟Ц╓╓╓╛╓╒╓К╓н╓г╓╥╓Г╓╕╓╚? ╓ч╓╨, ╔ю╔╓╔Д╔К╔╓╔С╓н╩Ч╓к╓о ttydX ╓Р╩х╓╓╓ч╓╧. /dev/ttydX ╓Р╔ж╔М╔ц╔╜╔С╔╟╔Б║╪╔и╓г╔╙║╪╔в╔С╓╧╓К╓х, ╔в╔М╔╩╔╧╓обп╠Ч╓╧╓К cuaaX ╔г╔п╔╓╔╧╓╛╔╓╔С╔╒╔╞╔ф╔ё╔ж╓к╓й╓К╓н╓Рбт╓а╓ч╓╧. ╪║╓к CD ©╝╧Ф╓╛╔╒╔╞╔ф╔ё╔ж╓к╓й╓К╓н╓Рбт╓а╓ч╓╧. cuaaX ╔г╔п╔╓╔╧╓Р╔╙║╪╔в╔С╓╧╓К╓х, ╔╥╔Й╔╒╔К╔щ║╪╔х╓╛ ttydX ╔г╔п╔╓╔╧╓к╓Х╓ц╓ф╓╧╓г╓к╩х╓О╓Л╓ф╓╓╓й╓╓╓╚╓и╓╕╓╚╓РЁнг╖╓╥╓ч╓╧. ╓Б╓╥╓Ё╓н╔щ║╪╔х╓╛╩хмя╡дг╫╓г╓╒╓Л╓п, ╔щ║╪╔х╓н╩хмя╦╒╓Р ttydX ╓╚╓И║жц╔╓╓╪Х╓К║в╓н╓г╓╧. ╓ч╓©, cuaXX ╔г╔п╔╓╔╧╓о CD ©╝╧Ф╓Р╢ф╩К╓╥╓ч╓╩╓С. ╓Ё╓н╩еах╓ъ╓х╪╚ф╟╠ЧеЗ╔Б╔г╔Ю╓к╓Х╓ц╓ф, ╔Й╔Б║╪╔х╔Ф║╪╔╤║╪╓Р╔М╔╟╔╓╔С╓╣╓╩╓©╓Й, ф╠╓╦╔Б╔г╔Ю╓г╔ю╔╓╔Д╔К╔╒╔╕╔х╓╥╓©╓Й╓╧╓К╓Ё╓х╓╛╓г╓╜, ╔╥╔╧╔ф╔Ю╓н╓╒╓И╓Ф╓К╔х╔И╔ж╔К╓нллещ╓Р╦╚╓К╓Ё╓х╓╛╓г╓╜╓К╓г╓╥╓Г╓╕. ╔ч╔К╔а╔щ║╪╔х╔╥╔Й╔╒╔К╔╚║╪╔и╓Р╔╣╔щ║╪╔х╓╣╓╩╓К╓к╓о╓и╓╕╓╥╓©╓И╓Х╓╓╓н╓г╓╥╓Г╓╕╓╚? ╥╚╓Ййж╓╥╓к╓й╓Й╓ч╓╧╓╛, ╔╚║╪╔м╔К╔Ё╔С╔у╔ё╔╟╔Л║╪╔╥╔Г╔С╓н╔╩╔╞╔╥╔Г╔С╓г╓о, ╓╒╓й╓©╓н╔╚║╪╔м╔К╓нюъдЙ╓к╓д╓╓╓ф╓н╬ПйС╓╛фю╓И╓Л╓К╓г╓╥╓Г╓╕. ╔ч╔К╔а╔щ║╪╔х╔╥╔Й╔╒╔К╔╚║╪╔и╓Р╩хмя╓╧╓К╓©╓А╓к╓о, ╔╚║╪╔м╔К╓нюъдЙ╔у╔║╔╓╔К╓к, ╔╚║╪╔и╓н╩Щ╓д╓╫╓Л╓╬╓Л╓н╔╥╔Й╔╒╔К╔щ║╪╔х╓кбп╠Ч╓╧╓К sio ╓н╧т╓Р╣╜╫р╓╧╓Ки╛мв╓╛╓╒╓Й╓ч╓╧. ╓╥╓╚╓╥, irq ╓х╔ы╔╞╔©╔╒╔и╔Л╔╧╓о╟Л╓д╓н╔╗╔С╔х╔Й╓к╓н╓ъ╣╜╫р╓╥╓ф╓╞╓ю╓╣╓╓. ╔╚║╪╔и╬Е╓н╓╧╓ы╓ф╓н╔щ║╪╔х╓о╟Л╓д╓н irq ╓Р╤╕м╜╓╥╓й╓╠╓Л╓п╓й╓Й╓ч╓╩╓С. ╟Л╢сю╜╓Р╩Щ╓©╓╩╓К╓©╓А╓к╓Б, ╨г╦Е╓н╔╥╔Й╔╒╔К╔щ║╪╔х╓н╫Й╓г irq ╓Р╩ьдЙ╓╥╓ф╓╞╓ю╓╣╓╓. ╓ч╓©, COM_MULTIPORT ╔╙╔в╔╥╔Г╔С╓Биу╓╠╓ф╓╞╓ю╓╣╓╓. ╪║╓к╪╗╓╧нЦ╓о, AST ╓н 4 ╔щ║╪╔х╔╥╔Й╔╒╔К╔╚║╪╔и╓Р irq 7 ╓гюъдЙ╓╥╓©╓Б╓н╓г╓╧. options "COM_MULTIPORT" device sio4 at isa? port 0x2a0 tty flags 0x781 device sio5 at isa? port 0x2a8 tty flags 0x781 device sio6 at isa? port 0x2b0 tty flags 0x781 device sio7 at isa? port 0x2b8 tty flags 0x781 irq 7 vector siointr ╓Ё╓н╔у╔И╔╟╓о╔ч╔╧╔©╔щ║╪╔х╓╛╔ч╔╓╔й║╪хж╧Ф 7(0x700) ╓Р╩Щ╓ц╓ф╓╓╓ф, ╦║╫п╩Ч╓н©гцг╣║г╫╓Рм╜╦З╓к╓╥(0x080), ╓╫╓╥╓ф╓╧╓ы╓ф╓н╔щ║╪╔х╓г irq ╓Р╤╕м╜╓╧╓К(0x001)╓х╓╓╓╕╓Ё╓х╓Р╟улё╓╥╓ф╓╓╓ч╓╧. FreeBSD ╓гйё©Т╓н╔ч╔К╔а╔щ║╪╔х╔╥╔Й╔╒╔К╔╚║╪╔и╢ж╓г irq ╓Р╤╕м╜╓╧╓К╓Ё╓х╓о╓г╓╜╓ч╓╧╓╚? ╦╫╨ъ╓н╓х╓Ё╓М╓о╓г╓╜╓ч╓╩╓С. ╓╫╓Л╓╬╓Л╓н╔╚║╪╔икХ╓к╟ш╓й╓ц╓© irq ╓Р╩х╓ц╓ф╓╞╓ю╓╣╓╓. ╔щ║╪╔х╓к╔г╔у╔╘╔К╔х╓н╔я╔И╔А║╪╔©╓РюъдЙ╓╧╓К╩Ж╓о╫пмХ╓ч╓╧╓╚? ttydX ╔г╔п╔╓╔╧(╓ч╓©╓о cuaaX ╔г╔п╔╓╔╧)╓о, ╔╒╔в╔Й╔╠║╪╔╥╔Г╔С╓н╓©╓А╓к╔╙║╪╔в╔С╓╧╓Ки╦╫Юе╙╓й╔г╔п╔╓╔╧╓г╓╧. ╔в╔М╔╩╔╧╓╛╓╫╓н╔щ║╪╔х╓Р╔╙║╪╔в╔С╓╧╓К╩Ч, ╔в╔М╔╩╔╧╓о╔г╔у╔╘╔К╔х╓нц╪кЖ I/O юъдЙ╓Р╪Хфю╓╥╓ч╓╧. ╓Ё╓Л╓И╓нюъдЙ╓о╪║╓н╔Ё╔ч╔С╔и╓гЁнг╖╓╧╓К╓Ё╓х╓╛╓г╓╜╓ч╓╧. stty -a -f /dev/ttyd1 ╓Ё╓н╔г╔п╔╓╔╧╓кбп╓╧╓КюъдЙ╓Рйя╧╧╓╥╓©╬Л╧Г, ╓╫╓нюъдЙ╓о╔г╔п╔╓╔╧╓Р╔╞╔М║╪╔╨╓╧╓К╓ч╓гм╜╦З╓г╓╧. ╔г╔п╔╓╔╧╓Р╨ф╔╙║╪╔в╔С╓╥╓©╬Л╧Г, ╓╫╓Л╓И╓нюъдЙ╓о╔г╔у╔╘╔К╔х╓клА╓ц╓ф╓╥╓ч╓╓╓ч╓╧. ╔г╔у╔╘╔К╔х╓нюъдЙ╓кйя╧╧╓Р╡ц╓╗╓К╓©╓А╓к, ║ж╫И╢ЭюъдЙ║в╔г╔п╔╓╔╧╓Р╔╙║╪╔в╔С╓╥, юъдЙ╓Р╫╓ю╣╓╧╓К╓Ё╓х╓╛╓г╓╜╓ч╓╧. нЦ╓╗╓п, CLOCAL ╔Б║╪╔и, 8 ╔с╔ц╔х, XON/XOFF ╔у╔М║╪ю╘╦Ф╓х╓╓╓╕юъдЙ╓Р ttyd5 ╓н╔г╔у╔╘╔К╔х╓к╓╥╓©╓╓╬Л╧Г, ╪║╓н╓Х╓╕╓к╧т╓й╓ц╓ф╓╞╓ю╓╣╓╓. stty -f /dev/ttyid5 clocal cs8 ixon ixoff ╓Ё╓нюъдЙ╓Р╧т╓й╓╕╓©╓А╓н╔Ё╔ч╔С╔и╓Р╣╜╫р╓╧╓К╓н╓ке╛юз╓й╔у╔║╔╓╔К╓о, /etc/rc.serial ╓г╓╧. ╓Ё╓Л╓г╔╒╔в╔Й╔╠║╪╔╥╔Г╔С╓╛ ttyd5 ╓Р╔╙║╪╔в╔С╓╥╓©╩Ч╓к, ╓Ё╓Л╓И╓нюъдЙ╓Р╔г╔у╔╘╔К╔х╓г╪Хфю╓╥╓ч╓╧. ╓╥╓╚╓╥, ╓Ё╓╕╓╓╓ц╓©╔Й╔С╔╞╓к╓Х╓КюъдЙ╓ойя╧╧╡дг╫╓г╓╧. ║жюъдЙ╦гдЙ║в╔г╔п╔╓╔╧╓Рд╢ю╟╓╥╓ф╓Д╓К╓Ё╓х╓к╓Х╓ц╓ф, ╔╒╔в╔Й╔╠║╪╔╥╔Г╔С╓к╓Х╓КюъдЙ╓нйя╧╧╓Р╤ь╩ъ╓╧╓К╓Ё╓х╓╛╓г╓╜╓ч╓╧. нЦ╓╗╓п, ttyd5 ╓ндл©╝б╝еы╓Р 57600bps ╓к╦гдЙ╓╧╓К╓к╓о, ╪║╓н╓Х╓╕╓к╧т╓ц╓ф╓╞╓ю╓╣╓╓. stty -f /dev/ttyld5 57600 ╓Ё╓Л╓к╓Х╓Й, ╔╒╔в╔Й╔╠║╪╔╥╔Г╔С╓о ttyd5 ╓Р╔╙║╪╔в╔С╓╥, ╔щ║╪╔х╓ндл©╝б╝еы╓Рйя╧╧╓╥╓Х╓╕╓х╓╥╓ч╓╧╓╛, дл©╝б╝еы╓о 57600bps ╓н╓ч╓ч╓к╓й╓Й╓ч╓╧. еЖаЁ╓н╓Ё╓х╓й╓╛╓И, ╫И╢ЭюъдЙ╔г╔п╔╓╔╧╓╙╓Х╓с, юъдЙ╦гдЙ╔г╔п╔╓╔╧╓о root ╓н╓ъ╓╛╫Я╓╜╧Ч╓ъ╓г╓╜╓К╓Х╓╕╓к╓й╓ц╓ф╓╓╓й╓╠╓Л╓п╓й╓Й╓ч╓╩╓С. ╓╥╓╚╓╥, MAKEDEV ╔╧╔╞╔Й╔в╔х╓о╔г╔п╔╓╔╧╔╗╔С╔х╔Й╓Р╨Ню╝╓╧╓К╩Ч╓к, ╓Ё╓н╓Х╓╕╓йюъдЙ╓о╧т╓╓╓ч╓╩╓С. ╓и╓н╓Х╓╕╓к╓╥╓©╓И╔Б╔г╔Ю╥пмЁ╓г╔ю╔╓╔Д╔К╔╒╔ц╔в╔М╔╟╔╓╔С╓╛╓г╓╜╓К╓н╓г╓╥╓Г╓╕╓╚? ╓д╓ч╓Й, ╔╓╔С╔©║╪╔м╔ц╔х╔╣║╪╔с╔╧╔в╔М╔п╔╓╔ю║╪╓к╓й╓Й╓©╓╓╓н╓г╓╧╓м. ╓╫╓Л╓к╓о╓ч╓╨, 1 бФ╓й╓╓╓╥йё©Т╓н╪╚ф╟╠ЧеЗ╔Б╔г╔Ю╓╛и╛мв╓г╓╧. ╔Б╔г╔Ю╓к╓о, ╔╜╔Ц╔Й╔╒║╪╓Р╦║╫п╓╥╓©╩Ч╓к╓о CD ©╝╧Ф╓Р╫пно╓╥, ╓╫╓╕╓г╓й╓╓╬Л╧Г╓к╓о╫пно╓╥╓й╓╓╓Ё╓х╓╛и╛мв╓х╓╣╓Л╓ч╓╧. ╓ч╓© DTR ©╝╧Ф╓╛ on ╓╚╓И off ╓к╓й╓ц╓©╩Ч╓к╓о, ееоц╡СюЧ╓Рюзцг╓╥, ╔Б╔г╔Ю╪╚©х╓Р╔Й╔╩╔ц╔х╓╥╓й╓╠╓Л╓п╓й╓Й╓ч╓╩╓С. ╓╙╓╫╓И╓╞, RTS/CTS ╔у╔М║╪ю╘╦Ф╓Р╩х╓╕╓╚, ╔М║╪╔╚╔К╔у╔М║╪ю╘╦Ф╓Р╓ч╓ц╓©╓╞╩х╓О╓й╓╓╓╚╓н╓и╓а╓И╓╚╓г╓╥╓Г╓╕. ╨г╦Е╓к, ╔Ё╔С╔т╔Е║╪╔©╓х╔Б╔г╔Ю╓н╢ж╓о╦гдЙб╝еы╓г╓й╓╠╓Л╓п╓й╓Й╓ч╓╩╓С. ╓©╓ю, (╔ю╔╓╔Д╔К╔╒╔ц╔в╓нх╞╦ф╪т╓кбп╓╥╓ф©фюз╓г╓╒╓К╓©╓А╓к╓о, )╓Ё╓а╓И╓н╔Б╔г╔Ю╓хаЙ╪Йб╕╓н╔Б╔г╔Ю╓н╢ж╓нб╝еы╓Р, ╔Б╔г╔Ю╢ж╓г╪╚ф╟д╢ю╟╓г╓╜╓К╓Х╓╕╓к╓╧╓ы╓╜╓г╓╥╓Г╓╕. б©╓╞╓╒╓К╔ь╔╓╔╨╔Ё╔ч╔С╔и╦ъ╢╧╔Б╔г╔Ю╓кбп╓╥╓ф, ╪║╓н╔Ё╔ч╔С╔и╓о╓Ё╓Л╓И╓нюъдЙ╓Р╧т╓й╓╓, ╓╫╓нюъдЙ╓Рит╢Ьх╞ю╜╔А╔Б╔Й║╪╓кйщб╦╓╥╓ч╓╧. AT&C1&D3&K3&Q6S0=1&W MS-DOS ╓н╔©║╪╔ъ╔й╔К╔в╔М╔╟╔И╔Ю╓кмЙ╓И╓╨╓к AT ╔Ё╔ч╔С╔и╓РаВ╫п╓╧╓К╓к╓о, ║жAT ╔Ё╔ч╔С╔и╓РфЧно╓╧╓К╓к╓о║в╓н╔╩╔╞╔╥╔Г╔С╓Р╩╡╬х╓╥╓ф╓╞╓ю╓╣╓╓. ╪║╓к, ╔Б╔г╔Юмя╓н╔╗╔С╔х╔Й╓Р /etc/ttys ╓к╨Ню╝╓╥╓ч╓╥╓Г╓╕. ╓Ё╓н╔у╔║╔╓╔К╓к╓о, ╔╙╔з╔Л║╪╔ф╔ё╔С╔╟╔╥╔╧╔ф╔Ю╓╛╔М╔╟╔╓╔С╓Рбт╓ц╓ф╓╓╓К╓╧╓ы╓ф╓н╔щ║╪╔х╓╛╣╜╫р╓╣╓Л╓ф╓╓╓ч╓╧. ╟й╡╪╓н╓Х╓╕╓й╧т╓Рди╡ц╓╥╓ф╓╞╓ю╓╣╓╓. ttyd1 "/usr/libexec/getty std.57600" dialup on insecure ╓Ё╓н╧т╓о, 2 хжлэ╓н╔╥╔Й╔╒╔К╔щ║╪╔х(/dev/ttyd1)╓к╓о, 57600bps ╓ндл©╝б╝еы╓г╔н╔С╔я╔Й╔ф╔ё(std.57600: ╓Ё╓Л╓о /etc/gettytab ╓к╣╜╫р╓╣╓Л╓ф╓╓╓ч╓╧)╓н╔Б╔г╔Ю╓╛юэбЁ╓╣╓Л╓ф╓╓╓К╓Ё╓х╓Р╪╗╓╥╓ф╓╓╓ч╓╧. ╓Ё╓н╔щ║╪╔х╓нц╪кЖ╔©╔╓╔в╓о dialup ╓г╓╧. ╓ч╓©╓Ё╓н╔щ║╪╔х╓о, on ╓╧╓й╓О╓а╔М╔╟╔╓╔С╡дг╫╓г╓╒╓Й, insecure ╓Ё╓Л╓о root ╓╛╓Ё╓н╔щ║╪╔х╓╚╓Ид╬юэ╔М╔╟╔╓╔С╓╧╓К╓н╓о, ╣Ж╡д╓╣╓Л╓ф╓╓╓й╓╓╓х╓╓╓╕╓Ё╓х╓Р╟улё╓╥╓ч╓╧. ╓Ё╓н╓Х╓╕╓й╔ю╔╓╔Д╔К╔╓╔С╔щ║╪╔х╓кбп╓╥╓ф╓о, ttydX ╓н╔╗╔С╔х╔Й╓Р╩хмя╓╥╓ф╓╞╓ю╓╣╓╓. ╓Ё╓Л╓╛╟Лхле╙╓й, ╔©║╪╔ъ╔й╔К╔©╔╓╔в╓х╓╥╓ф dialup ╓Р╩х╓╕йЩк║╓г╓╧. б©╓╞╓н╔Ф║╪╔╤║╪╓о, .profile ╓Д .login ╓г, ╔М╔╟╔╓╔С╩Ч╓нц╪кЖ╔©╔╓╔в╓╛ dialup ╓г╓╒╓ц╓©╬Л╧Г╓к╓о, ╪б╨щ╓нц╪кЖ╔©╔╓╔в╓Р╔Ф║╪╔╤║╪╓клД╓╓╧Г╓О╓╩╓К╓Х╓╕╓кюъдЙ╓╥╓ф╓╓╓ч╓╧. ╓Ё╓ннЦ╓о, ╔щ║╪╔х╓╛ insecure ╓г╓╥╓©. ╓Ё╓н╔щ║╪╔х╓г root ╓к╓й╓К╓к╓о, ╟Лхл╔Ф║╪╔╤║╪╓х╓╥╓ф╔М╔╟╔╓╔С╓╥, ╓╫╓Л╓╚╓И su ╓Р╩х╓ц╓ф root ╓к╓й╓ц╓ф╓╞╓ю╓╣╓╓. ╓Б╓╥, secure ╓Р╩ьдЙ╓╥╓©╓й╓И╓п, д╬юэ root ╓╛╓╫╓н╔щ║╪╔х╓╚╓И╔М╔╟╔╓╔С╓г╓╜╓ч╓╧. /etc/ttys ╓кйя╧╧╓Р╡ц╓╗╓©╦Е╓о, HUP ╔╥╔╟╔й╔К(SIGHUP)╓Р init ╔в╔М╔╩╔╧╓каВ╓Ки╛мв╓╛╓╒╓Й╓ч╓╧. &prompt.root; kill -HUP 1 ╓Ё╓наЮ╨Н╓о init ╔в╔М╔╩╔╧╓к /etc/ttys ╓Р╨ффи╓ъ╧Ч╓ъ╓╣╓╩╓ч╓╧. ╓Ё╓Л╓к╓Х╓Й, init ╔в╔М╔╩╔╧╓о getty ╔в╔М╔╩╔╧╓Р╓╧╓ы╓ф╓н on ╓х╓й╓ц╓ф╓╓╓К╔щ║╪╔х╓к╣╞ф╟╓╣╓╩╓ч╓╧. ╪║╓н╓Х╓╕╓к╓╥╓ф, ╔щ║╪╔х╓╛╔М╔╟╔╓╔С╡дг╫╓╚╓Рцн╓К╓Ё╓х╓╛╓г╓╜╓ч╓╧. &prompt.user; ps -ax | grep '[t]tyd1' ╔М╔╟╔╓╔С╡дг╫╓г╓╒╓Л╓п, ╪║╓н╓Х╓╕╓й╫пно╓╛фю╓И╓Л╓К╓о╓╨╓г╓╧. 747 ?? I 0:00.04 /usr/libexec/getty std.57600 ttyd1 ╔ю╔Ю╔©║╪╔ъ╔й╔К╓Р FreeBSD ╔ч╔╥╔С╓кюэбЁ╓╧╓К╓к╓о╓и╓╕╓╥╓©╓И╓Х╓╓╓н╓г╓╥╓Г╓╕╓╚? ╓Б╓╥, б╬╓н╔Ё╔С╔т╔Е║╪╔©║╪╓Р FreeBSD ╓нц╪кЖ╓х╓╥╓фюэбЁ╓╥╓©╓╓╓н╓й╓И╓п, ╓╙╦ъ╓╓╓н╔╥╔Й╔╒╔К╔щ║╪╔х╢ж╓Р╓д╓й╓╟╔л╔К╔Б╔г╔Ю╔╠║╪╔ж╔К(лУцМ: ╔Й╔п║╪╔╧╔╠║╪╔ж╔К╓Б╓╥╓╞╓о╔╞╔М╔╧╔╠║╪╔ж╔К╓х╓Б╦ф╓п╓Л╓ч╓╧)╓Рмя╟у╓╥╓ф╓╞╓ю╓╣╓╓. ╓Б╓╥, ╢Шю╫╓нц╪кЖ╓Р╩х╓╕╬Л╧Г╓о, иуб╟╓╧╓К╔ч╔к╔Е╔╒╔К╓Р╩╡╬х╓╥╓ф╓╞╓ю╓╣╓╓. ╓╫╓╥╓ф, /etc/ttys ╓Р╬Е╓хф╠╓╦╓Х╓╕╓кйя╧╧╓╥╓ф╓╞╓ю╓╣╓╓. нЦ╓╗╓п, WYSE-50 ╓х╓╓╓╕ц╪кЖ╓Р 5 хжлэ╓н╔щ║╪╔х╓кюэбЁ╓╧╓К╓й╓И╓п, ╪║╓н╓Х╓╕╓й╔╗╔С╔х╔Й╓Р╩хмя╓╥╓ф╓╞╓ю╓╣╓╓. ttyd4 "/usr/libexec/getty std.38400" wyse50 on secure ╓Ё╓ннЦ╓о, /dev/ttyd4 ╔щ║╪╔х╓к╔н╔С╔я╔Й╔ф╔ё, ц╪кЖ╔©╔╓╔в╓╛ wyse50, дл©╝б╝еы╓╛ 38400bps(std.38400: ╓Ё╓нюъдЙ╓о, /etc/gettytab ╓к╣╜╫р╓╣╓Л╓ф╓╓╓ч╓╧)╓нц╪кЖ╓╛б╦╨ъ╓╥╓ф╓╙╓Й, root ╓н╔М╔╟╔╓╔С╓╛╣Ж╡д╓╣╓Л╓ф╓╓╓К(secure)╓г╓╒╓К╓Ё╓х╓Р╪╗╓╥╓ф╓╓╓ч╓╧. ╓и╓╕╓╥╓ф tip ╓Д cu ╓╛ф╟╓╚╓й╓╓╓н╓г╓╧╓╚? ╓╙╓╫╓И╓╞╓╒╓й╓©╓н╔╥╔╧╔ф╔Ю╓г╓о tip ╓Д cu ╓о uucp ╔Ф║╪╔╤║╪╓╚, dialer ╔╟╔К║╪╔в╓к╓Х╓ц╓ф╓н╓ъ╪б╧т╡дг╫╓й╓н╓г╓╥╓Г╓╕. dialer ╔╟╔К║╪╔в╓о, ╔Б╔г╔Ю╓Д╔Й╔Б║╪╔х╔╥╔╧╔ф╔Ю╓к╔╒╔╞╔╩╔╧╓╧╓К╔Ф║╪╔╤║╪╓Р╢имЩ╓╧╓К╓©╓А╓к, ╩хмя╓╧╓К╓Ё╓х╓╛╓г╓╜╓ч╓╧. ╓╫╓Л╓к╓о, /etc/group ╔у╔║╔╓╔К╓н dialer ╔╟╔К║╪╔в╓к╓╒╓й╓©╪╚©х╓Рди╡ц╓╥╓ф╓╞╓ю╓╣╓╓. ╓╫╓╕╓╧╓КбЕ╓О╓Й╓к, ╪║╓н╓Х╓╕╓к╔©╔╓╔в╓╧╓К╓Ё╓х╓к╓Х╓Й, ╓╒╓й╓©╓н╔╥╔╧╔ф╔Ю╓на╢╔Ф║╪╔╤║╪╓╛ tip ╓Д cu ╓Р╪б╧т╓г╓╜╓К╓Х╓╕╓к╓й╓Й╓ч╓╧. &prompt.root; chmod 4511 /usr/bin/cu &prompt.root; chmod 4511 /usr/bin/tip ╩Д╓н Hayes ╔Б╔г╔Ю╓о╔╣╔щ║╪╔х╓╣╓Л╓ф╓╓╓й╓╓╓н╓г╓╧╓╛, ╓и╓╕╓╥╓©╓И╓╓╓╓╓н╓г╓╥╓Г╓╕╓╚. ╪б╨щ, tip ╓н╔╙╔С╔И╔╓╔С╔ч╔к╔Е╔╒╔К╓о╦е╓╞╓й╓ц╓ф╓╓╓ч╓╧. ╓╧╓г╓к, Hayes ╔ю╔╓╔╒╔И╓╛╪баУ╓╣╓Л╓ф╓╓╓ч╓╧. /etc/remote ╔у╔║╔╓╔К╓г, at=hayes ╓х╩ьдЙ╓╥╓ф╓╞╓ю╓╣╓╓. Hayes ╔и╔И╔╓╔п╓о, ╨г╤А╓н╔Б╔г╔Ю╓н©╥╓╥╓╓╣║г╫╓г╓╒╓К, BUSY, NO DIALTONE, CONNECT 115200 ╓й╓и╓н╔А╔ц╔╩║╪╔╦╓Рг╖╪╠╓г╓╜╓К╓ш╓и╦╜╓╞╓о╓й╓╞, ц╠╓к╨╝мП╓Р╣╞╓Ё╓╧╓ю╓╠╓г╓╧. tip ╓Р╩х╓╕╬Л╧Г╓к╓о(ATX0&W╓х╓╧╓К╓й╓и╓╥╓ф), ╓Ё╓Л╓И╓н╔А╔ц╔╩║╪╔╦╓Ри╫╪╗╓╣╓╩╓й╓╓╓Х╓╕╓к╓╥╓й╓╞╓ф╓о╓╓╓╠╓ч╓╩╓С. ╓ч╓©, tip ╓н╔ю╔╓╔Д╔К╓н╔©╔╓╔Ю╔╒╔╕╔х╓о 60 иц╓г╓╧. ╔Б╔г╔Ю╓н╔©╔╓╔Ю╔╒╔╕╔хюъдЙ╓о╓╫╓Л╓Х╓Йц╩╓╞╓╧╓ы╓╜╓г╓╒╓Й, ╓╫╓╕╓╥╓й╓╓╓х tip ╓одл©╝╓клДбЙ╓╛╓╒╓К╓хх╫цг╓╧╓К╓г╓╥╓Г╓╕. ATS7=45&W ╓Р╪б╧т╓╥╓ф╓╞╓ю╓╣╓╓. ╪б╨щ, ╔г╔у╔╘╔К╔х╓н tip ╓о Hayes ╓н╢╟а╢╓й╔╣╔щ║╪╔х╓Р╓╥╓ф╓╓╓К╓О╓╠╓г╓о╓╒╓Й╓ч╓╩╓С. ╡Р╥ХйЩк║╓о /usr/src/usr.bin/tip/tip ╓н╡╪╓н tipconf.h ╓Рйя╧╧╓╧╓К╓Ё╓х╓г╓╧. ╓Б╓а╓М╓С, ╓Ё╓Л╓к╓о╔╫║╪╔╧гшиш╔у╔║╔╓╔К╓╛и╛мв╓г╓╧. #define HAYES 0 ╓х╣╜╫р╓╣╓Л╓ф╓╓╓К╧т╓Р #define HAYES1 ╓хйя╧╧╓╥, ╓╫╓╥╓ф make ╓х make install ╓Р╪б╧т╓╥╓ч╓╧. ╓Ё╓Л╓г╓╕╓ч╓╞ф╟╨Н╓╧╓К╓г╓╥╓Г╓╕. ╓Ё╓Л╓И╓н AT ╔Ё╔ч╔С╔и╓РфЧно╓╧╓К╓к╓о? /etc/remote ╔у╔║╔╓╔К╓нцФ╓г direct ╔╗╔С╔х╔Й╓Р╨Н╓Й╓ч╓╧. ╓©╓х╓╗╓п╔Б╔г╔Ю╓╛ 1 хжлэ╓н╔╥╔Й╔╒╔К╔щ║╪╔х╓г╓╒╓К /dev/cuaa0╓кюэбЁ╓╣╓Л╓ф╓╓╓К╬Л╧Г, ╪║╓н╓Х╓╕╓к╓╥╓ч╓╧. cuaa0:dv=/dev/cuaa0:br#19200:pa=none ╔Б╔г╔Ю╓╛╔╣╔щ║╪╔х╓╧╓К╨гбГ╓н bps ╔Л║╪╔х╓Р br ╔у╔ё║╪╔К╔и╓к╩х╓╓╓ч╓╧. ╓╫╓╥╓ф tip cuaa0 ╓Р╪б╧т╓╧╓К╓х, ╔Б╔г╔Ю╓╛мЬмя╓г╓╜╓К╓Х╓╕╓к╓й╓Й╓ч╓╧. /dev/cuaa0╓╛╔╥╔╧╔ф╔Ю╓кб╦╨ъ╓╥╓й╓╓╬Л╧Г╓о, ╪║╓н╓Х╓╕╓к╓╥╓ч╓╧. &prompt.root; cd /dev &prompt.root; ./MAKEDEV cuaa0 ╓ч╓©╓о root ╓к╓й╓ц╓ф╟й╡╪╓н╓Х╓╕╓к cu ╔Ё╔ч╔С╔и╓Р╪б╧т╓╥╓ч╓╧. &prompt.root; cu -lline -sspeed line ╓к╓о╔╥╔Й╔╒╔К╔щ║╪╔х(нЦ╓╗╓п /dev/cuaa0)╓Р╩ьдЙ╓╥╓ч╓╧. ╓╫╓╥╓ф speed ╓к╓оюэбЁ╓╧╓Кб╝еы(нЦ╓╗╓п 57600)╓Р╩ьдЙ╓╥╓ч╓╧. ╓╫╓н╦Е AT ╔Ё╔ч╔С╔и╓Р╪б╧т╓╥╓©╓И, ~. ╓хфЧно╓╧╓Л╓п╫╙н╩╓╥╓ч╓╧. pn ╣║г╫╓н <@> ╣╜╧Ф╓╛╩х╓╗╓ч╓╩╓С! ееоцхж╧Ф (pn) ╣║г╫╓нцФ╓г╓н <@> ╣╜╧Ф╓о, tip ╓к /etc/phones ╓к╓╒╓Кееоцхж╧Ф╓Р╩╡╬х╓╧╓К╓Х╓╕╓кеа╓╗╓ч╓╧. ╓╥╓╚╓╥ <@> ╓нй╦╩З╓о /etc/remote ╓н╓Х╓╕╓йюъдЙ╔у╔║╔╓╔К╓нцФ╓г╓офц╪Лй╦╩З╓х╓й╓Й╓ч╓╧. ╓╫╓Ё╓г, ╔п╔ц╔╞╔╧╔И╔ц╔╥╔Е╓Р╩х╓ц╓ф╔╗╔╧╔╠║╪╔в╓Р╧т╓╓╓ч╓╧. pn=\@ ╔Ё╔ч╔С╔и╔И╔╓╔С╓╚╓Иееоцхж╧Ф╓Р╩ьдЙ╓╧╓К╓к╓о? generic ╔╗╔С╔х╔Й╓х╦ф╓п╓Л╓К╓Б╓н╓Р /etc/remote ╓кди╡ц╓╥╓ч╓╧. нЦ╓╗╓п, ╪║╓н╓Х╓╕╓к╓╥╓ч╓╧. tip115200|Dial any phone number at 115200 bps:\ :dv=/dev/cuaa0:br#115200:at=hayes:pa=none:du: tip57600|Dial any phone number at 57600 bps:\ :dv=/dev/cuaa0:br#57600:at=hayes:pa=none:du: ╓╫╓╥╓ф tip -115200 5551234 ╓н╓Х╓╕╓кмЬмя╓г╓╜╓ч╓╧. tip ╓Х╓Й cu ╓Р╩х╓╓╓©╓╓╬Л╧Г, cu ╓н generic ╔╗╔С╔х╔Й╓Р╩х╓╓╓ч╓╧. cu115200|Use cu to dial any number at 115200bps:\ :dv=/dev/cuaa1:br#57600:at=hayes:pa=none:du: ╓╫╓╥╓ф cu 5551234 -s 115200 ╓х╪б╧т╓╥╓ч╓╧. кХ╡С bps ╔Л║╪╔х╓РфЧно╓╥╓й╓╠╓Л╓п╓╓╓╠╓ч╓╩╓С╓╚? tip1200 ╓Д cu1200 мя╓н╔╗╔С╔х╔Й╓Р╣╜╫р╓╥, е╛юз╓йдл©╝б╝еы╓Р br ╔у╔ё║╪╔К╔и╓кюъдЙ╓╥╓ч╓╧. tip ╓о 1200bps ╓╛ю╣╓╥╓╓╔г╔у╔╘╔К╔хцм╓г╓╒╓К╓х╓ъ╓й╓╧╓н╓г, tip1200 ╔╗╔С╔х╔Й╓Р╩╡╬х╓╥╓ч╓╧. ╓Б╓а╓М╓С 1200bps ╓Р╩х╓О╓й╓╠╓Л╓п╓й╓И╓й╓╓╓О╓╠╓г╓о╓╒╓Й╓ч╓╩╓С. ╔©║╪╔ъ╔й╔К╔╣║╪╔п╓Р╥пмЁ╓╥╓фйё©Т╓н╔ш╔╧╔х╓ь╔╒╔╞╔╩╔╧╓╥╓©╓╓╓н╓г╓╧╓╛. кХ╡СюэбЁ╓╣╓Л╓К╓н╓Рбт╓ц╓ф CONNECT <host> ╓хфЧно╓╧╓К╓╚╓О╓Й╓к, tip ╓н cm ╣║г╫╓Р╩х╓╓╓ч╓╧. нЦ╓╗╓п, /etc/remote ╓к╪║╓н╓Х╓╕╓й╔╗╔С╔х╔Й╓Рди╡ц╓╥╓ч╓╧. pain|pain.deep13.com|Forrester's machine:\ :cm=CONNECT pain\n:tc=deep13: muffin|muffin.deep13.com|Frank's machine:\ :cm=CONNECT muffin\n:tc=deep13: deep13:Gizmonics Institute terminal server:\ :dv=/dev/cuaa2:br#38400:at=hayes:du:pa=none:pn=5551234: ╓Ё╓Л╓г, tip pain ╓Д tip muffin ╓х╪б╧т╓╧╓К╓х pain ╓Д muffin ╓н╔ш╔╧╔х╓кюэбЁ╓╧╓К╓Ё╓х╓╛╓г╓╜, tip deep13 ╓Р╪б╧т╓╧╓К╓х╔©║╪╔ъ╔й╔К╔╣║╪╔п╓кюэбЁ╓╥╓ч╓╧. tip ╓Р╩х╓ц╓ф╓╫╓Л╓╬╓Л╓н╔╣╔╓╔х╓нйё©Т╓н╡СюЧ╓кюэбЁ╓г╓╜╓ч╓╧╓╚? ╓Ё╓Л╓обГЁь╓кееоц╡СюЧ╓╛╓╓╓╞╓д╓╚╓╒╓ц╓ф, ©ТюИ©м╓нЁью╦╓╛юэбЁ╓╥╓Х╓╕╓х╓╧╓К╬Л╧Г╓к╓Х╓╞╓╒╓КлДбЙ╓г╓╧. ╓╒╓й╓©╓нбГЁь╓н╔╗╔С╔х╔Й╓Р /etc/remote ╔у╔║╔╓╔К╓к╨Ню╝╓╥╓ф, pn ╓н╔у╔ё║╪╔К╔и╓к╓о <\@> ╓Р╩х╓╓╓ч╓╧. big-university:\ :pn=\@:tc=dialout dialout:\ :dv=/dev/cuaa3:br#9600:at=courier:du:pa=none: ╓╫╓╥╓ф /etc/phones ╔у╔║╔╓╔К╓кбГЁь╓нееоцхж╧Ф╓н╟ЛмВ╓Р╫Я╓╜╓ч╓╧. big-university 5551111 big-university 5551112 big-university 5551113 big-university 5551114 tip ╓о╟Ло╒╓нееоцхж╧Ф╓Р╬Е╓╚╓И╫Г╓к╩Н╓ъ╓ф, ╨г╫╙е╙╓кюэбЁ╓г╓╜╓й╓╠╓Л╓п╓╒╓╜╓И╓А╓ч╓╧. ╔Й╔х╔И╔╓╓РбЁ╓╠╓╣╓╩╓©╓╓╬Л╧Г╓о, tip ╓Р while ╔К║╪╔в╓кфЧ╓Л╓ф╪б╧т╓╥╓ч╓╧. CTRL+P ╓Р 1 ╡СаВ╓К╓©╓А╓к 2 еы╡║╓╧и╛мв╓╛╓╒╓К╓н╓о╓й╓╪? CTRL+P ╓одл╬О║ж╤╞ю╘(force)║вй╦╩З╓г╓╒╓Й, tip ╓к╪║╓нй╦╩З╓╛╔Й╔ф╔И╔К╔г║╪╔©╓г╓╒╓К╓Ё╓х╓Реа╓╗╓ч╓╧. ╤╞ю╘й╦╩З╓о║жйя©Т╓нюъдЙ║в╓Р╟улё╓╧╓К ~s ╔╗╔╧╔╠║╪╔в╓к╓Х╓ц╓ф, б╬╓нй╦╩З╓к╓╧╓К╓Ё╓х╓╛╓г╓╜╓ч╓╧. ~sforce=<single-char> ╓хфЧно╓╥╓ф╡Ч╧т╓╥╓ч╓╧. <single-char> ╓о, г╓╟у╓н 1 ╔п╔╓╔хй╦╩З╓г╓╧. <single-char> ╓Р╬йн╛╓╧╓К╓х NUL й╦╩З╓к╓й╓Й, ╓Ё╓Л╓о CTRL+2 ╓Д CTRL+SPACE ╓Р╡║╓╥╓ф╓БфЧно╓г╓╜╓ч╓╧. ╓╓╓╞╓д╓╚╓н╔©║╪╔ъ╔й╔К╔╣║╪╔п╓г╩х╓О╓Л╓ф╓╓╓К╓н╓Р╦╚╓©╓ю╓╠╓г╓╧╓╛, <single-char> ╓к SHIFT+CTRL+6 ╓кЁД╓ЙеЖ╓ф╓К╓н╓Б╓Х╓╓╓г╓╥╓Г╓╕. $HOME/.tiprc ╓к╪║╓н╓Х╓╕╓кдЙ╣а╓╧╓К╓Ё╓х╓г, г╓╟у╓нй╦╩З╓Р╤╞ю╘й╦╩З╓х╓╥╓фмЬмя╓г╓╜╓ч╓╧. force=<single-char> бг╓а╧Ч╓С╓юй╦╩З╓╛фмаЁ╓╧╓ы╓фбГй╦╩З╓к╓й╓Й╓ч╓╥╓©?? CTRL+A ╓Р╡║╓╥╓ф╓╥╓ч╓╓, caps-lock ╔╜║╪╓╛╡У╓Л╓ф╓╓╓К╬Л╧Г╓н╓©╓А╓кюъ╥в╓╣╓Л╓© tip ╓н raise character ╔Б║╪╔и╓кфЧ╓ц╓©╓н╓г╓╥╓Г╓╕. ╢Ш╓к╫р╓ы╓© ~s ╓Р╩х╓ц╓ф, raisechar ╓Р╓Х╓Йе╛юз╓йцм╓кйя╧╧╓╥╓ф╓╞╓ю╓╣╓╓. ╓Б╓╥╓Ё╓Л╓Ин╬йЩ╓н╣║г╫╓Р╩хмя╓╥╓й╓╓╓н╓г╓╒╓Л╓п, ╤╞ю╘й╦╩З╓хф╠╓╦юъдЙ╓к╓╧╓К╓Ё╓х╓Б╓г╓╜╓ч╓╧. ╟й╡╪╓о CTRL+2 ╓Д CTRL+A ╓й╓и╓Рияхк╓к╩х╓╕и╛мв╓н╓╒╓К Emacs ╔Ф║╪╔╤╓к╓╕╓ц╓ф╓д╓╠╓н .tiprc ╔у╔║╔╓╔К╓н╔╣╔С╔в╔К╓г╓╧. force=^^ raisechar=^^ ^ ╓о SHIFT+CTRL+6 ╓г╓╧. tip ╓г╔у╔║╔╓╔К╓Ре╬аВ╓╧╓К╓к╓о? ╓Б╓╥б╬╓н UNIX ╓н╔╥╔╧╔ф╔Ю╓хюэбЁ╓╥╓ф╓╓╓К╓й╓И, ~p(аВ©╝)╓Д ~t(╪У©╝)╓г╔у╔║╔╓╔К╓наВ╪У©╝╓╛╓г╓╜╓ч╓╧. ╓Ё╓Л╓И╓н╔Ё╔ч╔С╔и╓о, аЙ╪Й╓н╔╥╔╧╔ф╔Ю╓н╬Е╓г cat ╓Д echo ╓Р╪б╧т╓╧╓К╓Ё╓х╓гаВ╪У©╝╓Р╓╥╓ч╓╧. ╫Я╪╟╓о╟й╡╪╓н╓Х╓╕╓к╓й╓Й╓ч╓╧. ~p <╔М║╪╔╚╔К╓н╔у╔║╔╓╔Кл╬> [<╔Й╔Б║╪╔х╓н╔у╔║╔╓╔Кл╬>] ~t <╔Й╔Б║╪╔х╓н╔у╔║╔╓╔Кл╬> [<╔М║╪╔╚╔К╓н╔у╔║╔╓╔Кл╬>] ╓Ё╓нйЩк║╓г╓о╔╗╔И║╪╔а╔╖╔ц╔╞╓Р╧т╓╓╓ч╓╩╓С╓н╓г, zmodem ╓й╓и╓нб╬╓н╔в╔М╔х╔Ё╔К╓Р╩х╓ц╓©йЩ╓╛╓Х╓╓╓г╓╥╓Г╓╕. tip ╓╚╓И zmodem ╓Р╪б╧т╓╧╓К╓к╓о? ╓ч╓╨╩о╓А╓к, FreeBSD Ports Collection(lrzsz╓х rzsz ╓х╓н, 2 ╓д╓ндл©╝╔╚╔ф╔╢╔Й║╪╓н╔в╔М╔╟╔И╔Ю╓н╓и╓а╓И╓╚)╓Р╔╓╔С╔╧╔х║╪╔К╓╥╓ч╓╧. ╔у╔║╔╓╔К╓Р╪У©╝╓╧╓К╓к╓о, ╔Й╔Б║╪╔хб╕╓гаВ©╝╔в╔М╔╟╔И╔Ю╓Р╣╞ф╟╓╥╓ч╓╧. ╓╫╓╥╓ф, Enter ╔╜║╪╓Р╡║╓╥╓ф╓╚╓И ~C rz (lrzsz ╓Р╔╓╔С╔╧╔х║╪╔К╓╥╓©╬Л╧Г╓о ~C lrz)╓хфЧно╓╧╓К╓х, ╔М║╪╔╚╔Кб╕╓ь╓н╔у╔║╔╓╔К╓н╪У©╝╓╛╩о╓ч╓Й╓ч╓╧. ╔у╔║╔╓╔К╓РаВ©╝╓╧╓К╓к╓о, ╔Й╔Б║╪╔хб╕╓г╪У©╝╔в╔М╔╟╔И╔Ю╓Р╣╞ф╟╓╥╓ч╓╧. ╓╫╓╥╓ф, Enter ╔╜║╪╓Р╡║╓╥╓ф╓╚╓И ~C sz <files> (lrzsz ╓Р╔╓╔С╔╧╔х║╪╔К╓╥╓©╬Л╧Г╓о ~C lsz <files>)╓хфЧно╓╧╓К╓х, ╔Й╔Б║╪╔хб╕╓ь╓н╔у╔║╔╓╔К╓наВ©╝╓╛╩о╓ч╓Й╓ч╓╧. юъдЙ╓╛ю╣╓╥╓╓╓н╓к╓Б╓╚╓╚╓О╓И╓╨, FreeBSD ╓╛╔╥╔Й╔╒╔К╔щ║╪╔х╓Р╦╚иу╓╠╓И╓Л╓ч╓╩╓С. ╔ч╔╤║╪╔э║╪╔и╓Д╔╥╔Й╔╒╔К╔╚║╪╔и╓╛ Acer ╓н UART ╔а╔ц╔в╓Р╩х╓ц╓©й╙╓н╬Л╧Г, FreeBSD ╓н sio ╔и╔И╔╓╔п╓г╓ою╣╓╥╓╞╦║╫п╓╧╓К╩Ж╓╛╫пмХ╓ч╓╩╓С. ╓Ё╓нлДбЙ╓Р╡Р╥Х╓╧╓К╓©╓А╓к╓о, www.lemis.com ╓╚╓И╔я╔ц╔а╓РфЧ╪Й╓╥╓ф╓╞╓ю╓╣╓╓. ╓╫╓нб╬╓н╪алД лУ: &a.jp.yoshiaki;, &a.jp.sugimura;, й║╢ж ╧╞╧╟ yasuf@big.or.jp, 1997 г╞ 11 ╥Н 10 фЭ - 1999 г╞ 5 ╥Н 8 фЭ. FreeBSD ╓о Linux ╓Х╓Йб©╓╞╓н╔╧╔О╔ц╔внн╟Х╓Р╬цхЯ╓╧╓К╓н╓о╓й╓╪╓г╓╧╓╚? ╪б╨щ╓к╓о╓╫╓╕╓г╓о╓╒╓Й╓ч╓╩╓С. FreeBSD ╓о Linux ╓Х╓Й╓Б╔╧╔О╔ц╔в╓Рб©╓╞╩х╓ц╓ф╓╓╓К╓Х╓╕╓к╦╚╓╗╓К╓ю╓╠╓г╓╧. ╓Ё╓нею╓к╓╙╓╠╓К FreeBSD ╓х Linux ╓н╪Г╓й╟Ц╓╓╓о, FreeBSD ╓о╓Х╓Йб©╓╞╓н╔А╔╓╔С╔А╔Б╔Й╓Рм╜╦ЗмЬмя╓г╓╜╓К╓Х╓╕╓к╓╧╓К╓©╓А, ╢╟а╢╓к╔╒╔╓╔и╔К╓к╓й╓ц╓©╓Б╓н╓Д╔А╔╓╔С╔А╔Б╔Й╬Е╓н╩х╓О╓Л╓й╓╞╓й╓ц╓©╔з║╪╔╦╓Р, ╔╧╔О╔ц╔в╓к╓╒╓И╓╚╓╦╓Аюя╤ке╙╓к╟эф╟╓╥╓ф╓╓╓К╓х╓╓╓╕╓Ё╓х╓г╓╧. Linux ╓г╓о, ╨г╦Е╓н╪Йцй╓х╓╥╓ф╔з║╪╔╦╓Р╔╧╔О╔ц╔в╓к╟эф╟╓╣╓╩╓К╓ю╓╠╓х╓╓╓╕╥╧╦Ч╓╛╓╒╓Й╓ч╓╧. ╓Ё╓н╔╧╔О╔ц╔в╓н╩х╓╓йЩ╓о, ╔А╔╓╔С╔А╔Б╔Й╓Р╓Х╓Й╦З╡ле╙╓к╩хмя╓╧╓К╓Ё╓х╓к╓Х╓ц╓ф╔п╔И╔С╔╧╓╛йщ╓©╓Л╓ф╓╓╓ч╓╧. FreeBSD ╓о╓Ё╓н╓Х╓╕╓й╬У╤╥╓г╓оюХ╪Й╨Ж╓Р╪Х╓Й╓ч╓╧╓╛, ╔╥╔╧╔ф╔Ю╓╛кэеЖ╓к╤У╓╜╬Убж╓н╩Ч╓к, мЩмЁ╓Бл╣╓╞╔з║╪╔╦╓Р╔╧╔О╔ц╔в╓╥╓Х╓╕╓х╥Х╓А╓К╓Ё╓х╓о╓й╓╓╓х╓╓╓╕╓Ё╓х╓кцМ╟у╓╥╓ф╓╞╓ю╓╣╓╓. ╓╥╓©╓╛╓ц╓ф, лКцФ╓к╩х╓О╓╨╓к╓╙╓╓╓©╔╥╔╧╔ф╔Ю╓╛д╚╣╞╓╜╓©╓х╓╜, ╓╧╓ы╓ф╔з║╪╔╦╔╒╔╕╔х╓╣╓Л╓ф╓╓╓К╓х╓╓╓╕╓Ё╓х╓о╓й╓╓╓н╓г╓╧. ╓ш╓х╓С╓и╔в╔М╔╟╔И╔Ю╓о╪б╧т╓╣╓Л╓ф╓╓╓й╓╓╓н╓к, ╓и╓╕╓╥╓ф &man.top.1; ╓охС╬О╓к╬╞╓й╓╓ free memory ╓РйС╧П╓╧╓К╓н╓г╓╥╓Г╓╕╓╚? ╢йц╠╓к╦ю╓╗╓п, free memory ╓х╓ол╣бл╓к╓й╓ц╓ф╓╓╓К╔А╔Б╔Й╓н╓Ё╓х╓ю╓╚╓И╓г╓╧. ╔в╔М╔╟╔И╔Ю╓╛Ёнйщ╓╥╓ф╓╓╓К╔А╔Б╔Й╟йЁ╟╓н╓╧╓ы╓ф╓н╔А╔Б╔Й╓о, FreeBSD ╔╚║╪╔м╔КфБ╓г╔г╔ё╔╧╔╞╔╜╔Ц╔ц╔╥╔Е╓х╓╥╓фмЬмя╓╣╓Л╓ч╓╧. ╓Ё╓нцм╓о &man.top.1; ╓к╓╙╓╓╓ф Inact, Cache Buf ╓х╓╥╓фи╫╪╗╓╣╓Л, ╓╫╓Л╓╬╓Л╓о╟ш╓й╓К╔╗║╪╔╦╔С╔╟╔Л╔ы╔К (лУцМ: ╔г║╪╔©╓╛╓и╓Л╓ю╓╠╦е╓╓╓╚╓Р╪╗╓╧и╬╡ацм) ╓г╔╜╔Ц╔ц╔╥╔Е╓╣╓Л╓©а╢╔г║╪╔©╓Ри╫╓╥╓ч╓╧. ╔г║╪╔©╓╛╔╜╔Ц╔ц╔╥╔Е╓╣╓Л╓К╓х╦ю╓╕╓н╓о, ╨г╤А╔╒╔╞╔╩╔╧╓╣╓Л╓©╔г║╪╔©╓г╓╒╓Л╓п, ╨феы╓╫╓н╔г║╪╔©╓Р╔╒╔╞╔╩╔╧╓╧╓К╓©╓А╓к╔╥╔╧╔ф╔Ю╓╛цы╓╓╔г╔ё╔╧╔╞╓к╔╒╔╞╔╩╔╧╓╧╓Ки╛мв╓╛╓й╓╓, ╓х╓╓╓╕╓Ё╓х╓Р╟улё╓╥╓ч╓╧. ╓╫╓н╓©╓А, а╢бн╓н╔я╔у╔╘║╪╔ч╔С╔╧╓╛╦Ч╬Е╓╥╓ч╓╧. ╟Лхле╙╓к, &man.top.1; ╓ги╫╪╗╓╣╓Л╓К Free ╔А╔Б╔Й╓╛╬╝╓╣╓╓цм╓Р╪╗╓╧╓Ё╓х╓они╓╓╓Ё╓х╓г, ╪╚мЁ╓к╩х╓╗╓К╔А╔Б╔Й╓н╩днл╓╛кэеЖ╓к╬╞╓й╓╓, ╓х╓╓╓╕╓Ё╓х╓Ри╫╓╥╓ф╓╓╓К╓О╓╠╓г╓о╓╒╓Й╓ч╓╩╓С. FreeBSD ╓н╪б╧т╔у╔╘║╪╔ч╔ц╔х╓н a.out, ELF ╓х╓о╓и╓н╓Х╓╕╓й╓Б╓н╓г╓╧╓╚? ╓ч╓©, a.out, ELF ╓Р╩х╓╕мЩмЁ╓о╡©╓г╓╥╓Г╓╕? FreeBSD ╓╛╡©╦н ELF ╔у╔╘║╪╔ч╔ц╔х╓РмЬмя╓╥╓ф╓╓╓К╓н╓╚╓РмЩ╡Р╓╧╓К╓©╓А╓к╓о, ╓ч╓╨ UNIX╓к╓╙╓╓╓ф╦╫╨ъ║жм╔ю╙║в╓й 3 ╪ОнЮ╓н╪б╧т╔у╔╘║╪╔ч╔ц╔х╓к╓д╓╓╓ф ╓╓╓╞╓И╓╚цн╓ц╓ф╓╙╓╞и╛мв╓╛╓╒╓Й╓ч╓╧. FreeBSD 3.x ╓Х╓Йа╟╓н FreeBSD ╓г╓о a.out ╔у╔╘║╪╔ч╔ц╔х╓╛╩х╓О╓Л╓ф╓╓╓ч╓╥╓©. a.out ╨г╓Б╦е╓╞ ║жмЁ╫Ою╣╓╥╓╓║в unix ╔╙╔ж╔╦╔╖╔╞╔х╔у╔╘║╪╔ч╔ц╔х╓г╓╧. ╔ч╔╦╔ц╔╞╔й╔С╔п╓Р╢ч╓Юц╩╓╞╓ф╔Ё╔С╔я╔╞╔х╓й╔ь╔ц╔ю╓╛юХф╛╓к╓╒╓Й, ╓Ё╓Л╓╛╔у╔╘║╪╔ч╔ц╔х╓нфцд╖╓х╓╣╓Л╓ф╓╓╓ч╓╧(a.out(5) ╓к╬э╨ы╓йфБмф╓╛╓╒╓Й╓ч╓╧). ╔М║╪╔и╓╣╓Л╓К 3╪ОнЮ╓н╔╩╔╟╔А╔С╔х, .text, .data, .bss ╓х╡ц╓╗╓ф╔╥╔С╔э╔К╔ф║╪╔ж╔К╓хй╦╩ЗнС╔ф║╪╔ж╔К╓Р╢ч╓ъ╓ч╓╧. COFF SVR3 ╓н╔╙╔ж╔╦╔╖╔╞╔х╔у╔╘║╪╔ч╔ц╔х╓г╓╧. ╔ь╔ц╔ю╓оц╠╟Л╓н╔╩╔╞╔╥╔Г╔С╔ф║╪╔ж╔К╓╚╓Ию╝╓Й, .text, .data, .bss ╔╩╔╞╔╥╔Г╔С╟йЁ╟╓ниТй╛╓Р╩Щ╓д╓Ё╓х╓╛╓г╓╜╓ч╓╧. ELF COFF╓н╦Е╥я╓г╓╧. йё©Т╓н╔╩╔╞╔╥╔Г╔С╓Р╔╣╔щ║╪╔х╓╥, 32-bit ╓х 64-bit╓н╓╓╓╨╓Л╓нцм╓Б╡дг╫╓г╓╧. бГ╓╜╓й╥Гею╓н╟Л╓д╓о, ELF ╓о╓╫╓Л╓╬╓Л╓н╔╥╔╧╔ф╔Ю╔╒║╪╔╜╔ф╔╞╔а╔ЦкХ╓кц╠╟Л╓н ABI ╓н╓ъ╓╛б╦╨ъ╓╧╓К╓х╓╓╓╕╡╬дЙ╓гюъ╥в╓╣╓Л╓ф╓╓╓К╓Ё╓х╓г╓╧. ╓Ё╓н╡╬дЙ╓о╓ч╓ц╓©╓╞ю╣╓╥╓╞╓╒╓Й╓ч╓╩╓С. ╬╕мя╓н SYSV ╓ню╓Ё╕╓г╓╣╓╗╓╫╓╕╓г╓╧(╬╞╓й╓╞╓х╓Б SVR4, Solaris, SCO ╓н 3╪ОнЮ╓н ABI ╓╛╓╒╓Й╓ч╓╧). FreeBSD ╓о╓Ё╓нлДбЙ╓Р╡Р╥Х╓╧╓К╓©╓А╓н╩Н╓ъ╓х╓╥╓ф, ╢Шцн╓н ELF ╪б╧т╔у╔║╔╓╔К╓к ABI ╓к╠Ч╓╦╓©╬ПйС╓Р ╫Я╓╜╡ц╓╗╓К╔Ф║╪╔ф╔ё╔Й╔ф╔ё╓РдС╤║╓╥╓ф╓╓╓ч╓╧. brandelf ╓н╔ч╔к╔Е╔╒╔К╔з║╪╔╦╓Р╩╡╬х╓╥╓ф╓╞╓ю╓╣╓╓. ╓Х╓Йб©╓╞╓н╬ПйС╓╛╓╒╓Й╓ч╓╧. FreeBSD ╓оеаеЩе╙╓йн╘╬Л╓Р╓х╓Й, ©Тб©╓╞╓ню╓бЕ╓н BSD ╓н╔Й╔Й║╪╔╧╓г╩Н╓╣╓Л, ╪б╬з╓╣╓Л╓ф╓╜╓© a.out ╔у╔╘║╪╔ч╔ц╔х╓РеаеЩе╙╓к╩хмя╓╥╓ф╓╓╓ч╓╧. ╓╓╓д╓╚╓о FreeBSD ╔╥╔╧╔ф╔Ю╓г╔м╔╓╔ф╔ё╔ж ELF ╔п╔╓╔й╔Й╓Р╨Н╓Й, ╪б╧т╓╧╓К╓Ё╓х╓╛╓г╓╜╓К╓Х╓╕╓к╓й╓К╓╚╓Б╓╥╓Л╓ч╓╩╓С╓╛, ╫И╢Э╓н╨╒ FreeBSD ╓г╓о ELF ╓Р╔г╔у╔╘╔К╔х╓н╔у╔╘║╪╔ч╔ц╔х╓кйя╧╧╓╧╓К╓х╓╓╓╕ф╟╓╜╓о ╓╒╓Й╓ч╓╩╓С╓г╓╥╓©. ╓й╓╪╓г╓╥╓Г╓╕╓╚? ╓х╓Ё╓М╓г Linux ╓к╓╙╓╓╓ф╓о, ELF ╓ь╓н╤Лдк╓Р╓х╓Б╓й╓ц╓©йя╧╧╓о, ╓╫╓н╩Ч╓к a.out ╪б╧т╔у╔╘║╪╔ч╔ц╔х╓╚╓Иф╗╓Л╓©╓х╓╓╓╕╓Х╓Й╓о, ╔╦╔Ц╔С╔в╔ф║╪╔ж╔К╔ы║╪╔╧╓н╤╕м╜╔И╔╓╔ж╔И╔Й╓н╔А╔╚╔к╔╨╔Ю╓н╫юфПю╜╓ндЦ╓╣╓╚╓И╓нц╕╣я╓г╓╥╓©. ╓Ё╓Л╓о╔ы╔С╔ю╓ДЁ╚х╞╪та╢бн╓к╓х╓ц╓ф, ╤╕м╜╔И╔╓╔ж╔И╔Й╓н╨Ню╝╓╛хС╬О╓кфЯ╓╥╓╚╓ц╓©╦╤╟Ь╓г╓╥╓©. ELF ╓н╔д║╪╔К╓к╓о╤╕м╜╔И╔╓╔ж╔И╔Й╓нлДбЙ╓Р╡Р╥Х╓╧╓К╓Ё╓х╓╛╓г╓╜╓К╓Б╓н╓╛дС╤║╓╣╓Л╓ф╓╙╓Й, ╓ч╓©╓╓╓╨╓Л╓к╓╩╓Х╟Лхле╙╓к║ж©ййБ║в╓╥╓ф╓╓╓К╓х╧м╓╗╓И╓Л╓ч╓╧. ╓Ё╓н╓©╓А╟э╧т╓н╔Ё╔╧╔х╓ои╛мв╓й╓Б╓н╓х╓╥╓фмфг╖╓╣╓Л, ╟э╧т╓о╧т╓й╓О╓Л╓ч╓╥╓©. FreeBSD ╓н╬Л╧Г╓о, ╤╕м╜╔И╔╓╔ж╔И╔Й╓н╔А╔╚╔к╔╨╔Ю╓о Sun ╓н SunOS ╔╧╔©╔╓╔К╓н╤╕м╜╔И╔╓╔ж╔И╔Й╓н╔А╔╚╔к╔╨╔Ю╓к╤к╓А╓ф╤А╓╓╓Б╓н╓к╓й╓ц╓ф╓╓╓ф, хС╬О╓к╩х╓╓╓Д╓╧╓╓╓Б╓н╓к╓й╓ц╓ф╓╓╓ч╓╧. ╓╥╓╚╓╥╓й╓╛╓И, FreeBSD ╓г╓о 3.0 ╓╚╓И ELF ╔п╔╓╔й╔Й╓Р╔г╔у╔╘╔К╔х╓н╔у╔╘║╪╔ч╔ц╔х╓х╓╥╓ф╦Ь╪╟╓к╔╣╔щ║╪╔х╓╥╓ф╓╓╓ч╓╧. a.out ╪б╧т╔у╔╘║╪╔ч╔ц╔х╓о╓Х╓╓╓Б╓н╓Р╩Дцё╓кдС╤║╓╥╓ф╓╞╓Л╓ф╓╓╓К╓Б╓н╓н, ╩Д╓©╓а╓н╩х╓ц╓ф╓╓╓К╔Ё╔С╔я╔╓╔И╓н╨Н╪т╓г╓╒╓К GNU ╓н©м║╧╓о a.out ╔у╔╘║╪╔ч╔ц╔х╓н╔╣╔щ║╪╔х╓Р╓Д╓А╓ф╓╥╓ч╓ц╓©╓н╓г╓╥╓©. ╓Ё╓н╓Ё╓х╓о, ╩Д╓©╓а╓кйл╔п║╪╔╦╔Г╔С╓н╔Ё╔С╔я╔╓╔И╓х╔Й╔С╔╚╓Рйщ╪И╓╧╓К╓Ё╓х╓Рм╬╣╥╓й╓╞╓╣╓Л╓К╓Ё╓х╓х╓й╓Й, ╨г©╥╓н GNU Ё╚х╞╓неьно╓к╓Х╓К╡╦╥ц╓╚╓И╠С╓╤╓╚╓К╓Ё╓х╓к╓й╓Й╓ч╓╧. ╓╫╓н╬Е, ISO C++ ╓н, ╓х╓╞╓к╔Ё╔С╔╧╔х╔И╔╞╔©╓Д╔г╔╧╔х╔И╔╞╔©╓╛╓И╓ъ╓нмв╣А╓Б╓╒╓ц╓ф, ╨ё╦Е╓н FreeBSD ╓н╔Й╔Й║╪╔╧╓г╔м╔╓╔ф╔ё╔ж╓н ELF ╓н╔╣╔щ║╪╔х╓╣╓Л╓КйЩ╦Ч╓ь╓хоц╓╛©й╓С╓г╓╓╓ч╓╧. ╓╫╓Л╓к╓╥╓ф╓Б, ╓й╓╪╓╫╓С╓й╓кб©╓╞╓н╔у╔╘║╪╔ч╔ц╔х╓╛╓╒╓К╓н╓г╓╧╓╚? ╓Б╓╕╓╙╓э╓М╓╡╓к╓й╓ц╓ф╓╥╓ч╓ц╓©╟е╓╓╡А╣Н╓к, ц╠╫Ц╓й╔о║╪╔и╔╕╔╖╔╒╓╛╓╒╓Й╓ч╓╥╓©. ╓Ё╓нц╠╫Ц╓й╔о║╪╔и╔╕╔╖╔╒╓о, ц╠╫Ц╓г╬╝╓╣╓й╔╥╔╧╔ф╔Ю╓Р╔╣╔щ║╪╔х╓╥╓ф╓╓╓ч╓╥╓©. a.out ╓о╓Ё╓нц╠╫Ц╓й╔╥╔╧╔ф╔Ю(PDP-11) ╓г╓н╨Н╤х╓Р╧т╓й╓╕╔п╔╓╔й╔Й╓х╓╥╓ф╢╟а╢╓ке╛╓╥╓©╓Б╓н╓ю╓ц╓©╓н╓г╓╧. ©м║╧╓о╓Ё╓нц╠╫Ц╓й╔╥╔╧╔ф╔Ю╓╚╓И UNIX ╓Р╟э©╒╓╧╓К╨щ╓к, a.out ╔у╔╘║╪╔ч╔ц╔х╓Р╓╫╓н╓ч╓ч╩х╓╓╓ч╓╥╓©. ╓х╓╓╓╕╓н╓о Motorola 68k, VAXen, ╓х╓╓╓ц╓©╔╒║╪╔╜╔ф╔╞╔а╔Ц╓ь╓н UNIX ╓н╫И╢Э╓н╟э©╒╓г╓о╓Ё╓Л╓г╫╫й╛╓ю╓ц╓©╓╚╓И╓г╓╧. ╓Д╓╛╓ф╓╒╓КаОлю╓й╔╗╔С╔╦╔к╔╒╓╛, ╔╫╔у╔х╔╕╔╖╔╒╓г╓а╓Г╓ц╓х╓╥╓©╔х╔Й╔ц╔╞╓Р╩х╓╕╓Ё╓х╓Р╥Х╓А╓ч╓╥╓©. хЮ╓о╓╓╓╞╓д╓╚╓н╔╡║╪╔х╓Р╨О╓Й╪Х╓ц╓ф CPU ╓н╔Ё╔╒╓Р╓Х╓Йб╝╓╞аЖ╓И╓╩╓К╓Ё╓х╓╛╓г╓╜╓©╓н╓г╓╧. ╓Ё╓Л╓о©╥╓╥╓╓╪ОнЮ╓н╔о║╪╔и╔╕╔╖╔╒(╨ёфЭ╓г╓о RISC ╓х╓╥╓фцн╓И╓Л╓ф╓╓╓ч╓╧)╓гф╟╓╓╓©╓н╓г╓╧. a.out ╓о╓Ё╓н╔о║╪╔и╔╕╔╖╔╒╓к╓ое╛╓╥╓ф╓╓╓й╓╚╓ц╓©╓н╓г, ╓Ё╓н╔о║╪╔и╔╕╔╖╔╒╬Е╓гб©╓╞╓н╔у╔╘║╪╔ч╔ц╔х╓╛, ╦бдЙ╓╣╓Л╓©ц╠╫Ц╓й a.out ╔у╔╘║╪╔ч╔ц╔х╓г╓н╓Б╓н╓Х╓Й╓Б╓Х╓Йни╓╓╔я╔у╔╘║╪╔ч╔С╔╧╓Р╫п╓╧╓Ё╓х╓Рлэ╩ь╓╥╓фЁ╚х╞╓╣╓Л╓©╓н╓г╓╧. COFF, ECOFF, ╓╫╓╥╓ф╓╓╓╞╓д╓╚╓нм╜л╬╓г╓й╓╓╔у╔╘║╪╔ч╔ц╔х╓╛ ELF ╓╛и╦╫Ю╓к╓й╓Ка╟╓кЁ╚х╞╓╣╓Л, ╓╫╓Л╓И╓н╦бЁ╕╓╛ц╣╣А╓╣╓Л╓©╓н╓г╓╧. ╓╣╓И╓к, ╔в╔М╔╟╔И╔Ю╔╣╔╓╔╨╓о╣ПбГ╓к╓й╓Й, ╔г╔ё╔╧╔╞(╓╙╓Х╓сй╙мЩ╔А╔Б╔Й)╓о╟маЁ╓х╓╥╓фаЙбпе╙╓к╬╝╓╣╓╚╓ц╓©╓©╓А, ╤╕мя╔И╔╓╔ж╔И╔Й╓н╔Ё╔С╔╩╔в╔х╓╛цбю╦╓╥╓ч╓╥╓©. ╓ч╓©, VM ╔╥╔╧╔ф╔Ю╓о╓Х╓Ййё╩╗╓й╓Б╓н╓к╓й╓Й╓ч╓╥╓©. ╓Ё╓Л╓И╓н╦д║╧╓н©ййБ╓о a.out ╔у╔╘║╪╔ч╔ц╔х╓Р╩хмя╓╥╓ф©К╓╡╓И╓Л╓ч╓╥╓©╓╛, ╓╫╓нм╜мяю╜╓о©╥╓╥╓╓╣║г╫╓х╓х╓Б╓к╓и╓С╓и╓С╧╜╓╛╓ц╓ф╓╜╓ч╓╥╓©. ╓Ё╓Л╓И╓к╡ц╓╗, ╪б╧т╩Ч╓ки╛мв╓й╓Б╓н╓Рф╟е╙╓к╔М║╪╔и╓╧╓К, ╓ч╓©╓о╫И╢Э╡╫╔Ё║╪╔и╓н╪б╧т╦Е╓к╔в╔М╔╟╔И╔Ю╓н╟ЛиТ╓Ргк╢Ч╓╥, ╔Ё╔╒╔А╔Б╔Й╓╙╓Х╓с╔╧╔О╔ц╔в╤У╢ж╓РюАлС╓╧╓К╓х╓╓╓╕мвк╬╓╛╧Б╓ч╓Й╓ч╓╥╓©. ╔в╔М╔╟╔И╔ъ╔С╔╟╦ю╦Л╓о╓╣╓И╓кйё╩╗╓к╓й╓Й, main ╢ь©Т╓на╟╓к╪╚ф╟е╙╓к╔Ё║╪╔К╓╣╓Л╓К╔Ё║╪╔и╓нмвк╬╓╛╧Б╓ч╓Й╓ч╓╥╓©. б©╓╞╓н╣║г╫Ёхд╔╓╛╧т╓й╓О╓Л, a.out ╔у╔╘║╪╔ч╔ц╔х╓╛╓Ё╓Л╓И╓╧╓ы╓ф╓Р╪б╦╫╓г╓╜╓К╓Х╓╕╓к╓й╓Й, ╓╫╓Л╓И╓о╓╥╓п╓И╓╞╓о╢Пкэе╙╓кф╟╨Н╓╥╓ф╓╓╓ч╓╥╓©. ╓Д╓╛╓ф, a.out ╓о╔Ё║╪╔и╓г╓н╔╙║╪╔п╔ь╔ц╔и╓хйё╩╗╓╣╓РаЩбГ╓╣╓╩╓╨╓к, ╓Ё╓Л╓И╓нлДбЙ╓╧╓ы╓ф╓Р╫ХмЩ╓╧╓К╓Ё╓х╓кл╣мЩ╓╛╓г╓ф╓╜╓ч╓╥╓©. ╟ЛйЩ, ELF ╓о╓Ё╓Л╓И╓нлДбЙ╓нб©╓╞╓Р╡Р╥Х╓╥╓ч╓╧╓╛, ╦╫╬У╡тф╞╓╥╓ф╓╓╓К╔╥╔╧╔ф╔Ю╓╚╓И╓нюзбь╓╗╓олЯ╡П╓й╓Б╓н╓к╓й╓К╓г╓╥╓Г╓╕. ╓╫╓н╓©╓А ELF ╓о, a.out ╓н╓ч╓ч╓г╓╓╓К╓Ё╓х╓╛ ELF ╓ь╓н╟э╧т╓Х╓Й╓Б╓Б╓ц╓хлЯ╡П╓й╓Б╓н╓к╓й╓К╓ч╓гбт╓ди╛мв╓╛╓╒╓Й╓ч╓╥╓©. ╓╥╓╚╓╥╩Ч╓╛╥п╓д╓к╓д╓Л, FreeBSD ╓н╔с╔К╔и╔д║╪╔К╓н╦╣╓х╓й╓ц╓©╔д║╪╔К╥╡(фц╓к╔╒╔╩╔С╔ж╔И╓х╔М║╪╔ю)╓х FreeBSD ╓н╔с╔К╔и╔д║╪╔К╥╡╓о╟ш╓й╓ц╓©©й╡╫╓н╥по╘╓Р╓©╓и╓Й╓ч╓╥╓©. FreeBSD ╓н╔д╔Й║╪╓г╓о, ╤╕м╜╔И╔╓╔ж╔И╔Й╓╛ди╡ц╓╣╓Л, ╔п╔╟╔у╔ё╔ц╔╞╔╧╓Б╧т╓О╓Л╓ч╓╥╓©. ╓Б╓х╓Б╓х╓н╔д║╪╔К╥╡╓Р╨Ню╝╓╥╓© GNU ╓н©м╓©╓а╓о, ╔в╔М╔╟╔И╔Ю╓Р╫Я╓╜д╬╓╥, ╔╞╔М╔╧╔Ё╔С╔я╔╓╔И╓н╔╣╔щ║╪╔х, ╟ш╓й╓К╔у╔╘║╪╔ч╔ц╔х╓Рг╓╟у╓к╪Х╓Й╧Ч╓Ю╣║г╫╓й╓и╓Рди╡ц╓╥╓ф╓╓╓╜╓ч╓╥╓©. б©╓╞╓н©м║╧╓╛ FreeBSD ╓Р╔©║╪╔╡╔ц╔х╓х╓╥╓©╔╞╔М╔╧╔Ё╔С╔я╔╓╔И╓н╧╫цш╓Р╩Н╓ъ╓ч╓╥╓©╓╛, FreeBSD ╓н╩х╓ц╓ф╓╓╓К as ╓х ld ╓н╦е╓╓╔в╔М╔╟╔И╔Ю╔Ё║╪╔и╓о╔╞╔М╔╧╔Ё╔С╔я╔╓╔К╓Р╔╣╔щ║╪╔х╓╥╓ф╓╙╓И╓╨, ╓╕╓ч╓╞╓╓╓╜╓ч╓╩╓С╓г╓╥╓©. ©╥╓╥╓╓ GNU ╓н╔д║╪╔К╥╡(binutils)╓о, ╔╞╔М╔╧╔Ё╔С╔я╔╓╔К, ╤╕м╜╔И╔╓╔ж╔И╔Й, C++ Ёхд╔╓й╓и╓н╣║г╫╓Р╔╣╔щ║╪╔х╓╥╓ф╓╓╓ч╓╧. ╓╣╓И╓к©Тб©╓╞╓н╔ы╔С╔ю╓╛ ELF ╔п╔╓╔й╔Й╓Р╔Й╔Й║╪╔╧╓╥╓ф╓╓╓ч╓╧. FreeBSD ╓к╓х╓ц╓ф ELF ╔п╔╓╔й╔Й╓╛╪б╧т╓г╓╜╓К╓Ё╓х╓о, хС╬О╓к╔А╔Й╔ц╔х╓╛╓╒╓Й╓ч╓╧. ELF ╔п╔╓╔й╔Й╓╛ FreeBSD ╓гф╟╓╞╓н╓й╓И, a.out ╓Рф╟╓╚╓╧╓н╓к╪Й╢ж╓Р╓╚╓╠╓Ки╛мв╓о╓╒╓Й╓ч╓╩╓С╓м. д╧╓╓╢жцИ╪б╓к╓Х╓╞ф╞╓╓╓©о╥╓╓╓©го╓о, ╓╫╓М╓╫╓МкраПцо╓г╣ы╓ч╓╩╓ф╓╒╓╡╓ч╓╥╓Г╓╕. ELF ╓о a.out ╓кхФ╓ы╓ф╓Х╓Йи╫╦╫но╓╛╓╒╓Й, ╔ы║╪╔╧╓н╔╥╔╧╔ф╔Ю╓кбп╓╥╓ф╓Х╓ЙиЩ╧╜╓╓Ёхд╔ю╜╓РдС╤║╓г╓╜╓ч╓╧. ELF мя╓н╔д║╪╔К╓о╓Х╓Й╓Х╓╞йщ╪И╓╣╓Л╓ф╓╓╓ч╓╧. ╓ч╓©б©╓╞╓н©м╓к╓х╓ц╓ф╫емв╓й╔╞╔М╔╧╔Ё╔С╔я╔╓╔К╓Б╔╣╔щ║╪╔х╓╥╓ф╓╓╓ч╓╧. ELF ╓н╪б╧тб╝еы╓о, ╓ш╓С╓н╬╞╓╥ a.out ╓Х╓Йцы╓╓╓╚╓Б╓╥╓Л╓ч╓╩╓С╓╛, ╪б╨щ╓кб╝еы╓н╨╧╓Р╓о╓╚╓К╓н╓о╨╓фЯ╓г╓╥╓Г╓╕. ELF ╓х a.out ╓н╢ж╓к╓о, ╔з║╪╔╦╔ч╔ц╔т╔С╔╟, ╫И╢Э╡╫╔Ё║╪╔и╓н╫ХмЩ╓й╓иб©╓╞╓н╟Ц╓╓╓╛╓╒╓Й╓ч╓╧╓╛, ╓х╓Й╓©╓ф╓ф╫емв╓й╓Б╓н╓о╓╒╓Й╓ч╓╩╓С. ╓╥╓╚╓╥╟Ц╓╓╓╛╓╒╓К╓н╓оЁн╓╚╓г╓╧. ╓ш╓и╓й╓╞, GENERIC ╔╚║╪╔м╔К╓╚╓И a.out ╓н╔╣╔щ║╪╔х╓╛Ё╟╓╣╓Л╓ч╓╧. a.out ╓н╔в╔М╔╟╔И╔Ю╓Р╪б╧т╓╧╓Ки╛мвю╜╓╛╓й╓╞╓й╓Л╓п, ╨г╫╙е╙╓к a.out ╓н╔╣╔щ║╪╔х╓о╔╚║╪╔м╔К╓╚╓И╨О╫Э╓╣╓Л╓ч╓╧. ╔╥╔С╔э╔Й╔ц╔╞╔Й╔С╔╞╓н╣Ж╡дб╟ю╜╓Р chmod ╓гйя╓╗╓И╓Л╓й╓╓╓н╓о╓й╓╪╓г╓╧╓╚? ╔╥╔С╔э╔Й╔ц╔╞╔Й╔С╔╞╓о╣Ж╡дб╟ю╜╓Р╩Щ╓а╓ч╓╩╓С. ╓ч╓© &man.chmod.1; ╓н╔г╔у╔╘╔К╔хф╟╨Н╓о, ╔╥╔С╔э╔Й╔ц╔╞╔Й╔С╔╞╓Р╓©╓и╓ц╓ф╔Й╔С╔╞юХ╓н╔у╔║╔╓╔К╓н╣Ж╡дб╟ю╜╓Рйя╧╧╓╧╓К╓Х╓╕╓к╓й╓ц╓ф╓╓╓ч╓╩╓С. ╓╫╓н╓©╓А, foo ╓х╓╓╓╕╔у╔║╔╓╔К╓╛╓╒╓Й, ╓Ё╓н╔у╔║╔╓╔К╓ь╓н╔╥╔С╔э╔Й╔ц╔╞╔Й╔С╔╞ bar ╓╛╓╒╓ц╓©╓х╓╧╓К╓х, ╟й╡╪╓н╔Ё╔ч╔С╔и╓о╬О╓кю╝╦Ы╓╥╓ч╓╧. &prompt.user; chmod g-w bar ╓╥╓╚╓╥╓Ё╓н╬Л╧Г, foo ╓н╣Ж╡дб╟ю╜╓ойя╧╧╓╣╓Л╓ч╓╩╓С. ╓Ё╓н╬Л╧Г, ╓╚ ╓н╓и╓а╓И╓╚╓н╔╙╔в╔╥╔Г╔С╓Р ╓хф╠╩Ч╓к╩х╓╕и╛мв╓╛╓╒╓Й╓ч╓╧. chmod ╓х symlink ╓н╔ч╔к╔Е╔╒╔К╔з║╪╔╦╓к╓о╓Б╓ц╓х╬э╓╥╓╓╬ПйС╓╛╓╒╓Й╓ч╓╧. ╔╙╔в╔╥╔Г╔С╓о╨ф╣╒е╙╓к chmod ╓Р╪б╧т╓╥╓ч╓╧. ╔г╔ё╔Л╔╞╔х╔Й╓Д╔г╔ё╔Л╔╞╔х╔Й╓ь╓н╔╥╔С╔э╔Й╔ц╔╞╔Й╔С╔╞╓Р chmod ╓╧╓К╬Л╧Г╓о╣╓╓Р╓д╓╠╓ф╓╞╓ю╓╣╓╓. ╔╥╔С╔э╔Й╔ц╔╞╔Й╔С╔╞╓г╩╡╬х╓╣╓Л╓ф╓╓╓Кц╠╟Л╓н╔г╔ё╔Л╔╞╔х╔Й╓н╔я║╪╔ъ╔ц╔╥╔Г╔С╓Рйя╧╧╓╥╓©╓╓╬Л╧Г╓о, chmod ╓Р╔╙╔в╔╥╔Г╔С╓Р╓д╓╠╓╨╓к, ╔╥╔С╔э╔Й╔ц╔╞╔Й╔С╔╞╓нл╬а╟╓н╦Е╓М╓к╔╧╔И╔ц╔╥╔Е(/) ╓Р╓д╓╠╓ф╩х╓╓╓ч╓╧. нЦ╓╗╓п, foo ╓╛╔г╔ё╔Л╔╞╔х╔Й bar ╓ь╓н╔╥╔С╔э╔Й╔ц╔╞╔Й╔С╔╞╓г╓╒╓К╬Л╧Г, foo(╪б╨щ╓к╓о bar)╓н╔я║╪╔ъ╔ц╔╥╔Г╔С╓Рйя╧╧╓╥╓©╓╓╬Л╧Г╓к╓о, ╓Ё╓н╓Х╓╕╓к╓╥╓ч╓╧. &prompt.user; chmod 555 foo/ ╦Е╓М╓к╔╧╔И╔ц╔╥╔Е╓Р╓д╓╠╓К╓х, chmod ╓о╔╥╔С╔э╔Й╔ц╔╞╔Й╔С╔╞ foo ╓Рди╓╓╓╚╓╠╓ф╔г╔ё╔Л╔╞╔х╔Й bar ╓н╔я║╪╔ъ╔ц╔╥╔Г╔С╓Рйя╧╧╓╥╓ч╓╧. ╔М╔╟╔╓╔Сл╬╓╛╓╓╓ч╓ю╓к 8 й╦╩З╓кю╘╦б╓╣╓Л╓ф╓╓╓К╓н╓о╓й╓╪╓г╓╧╓╚? UT_NAMESIZE ╓Рйя╧╧╓╥╓ф╔╥╔╧╔ф╔Юа╢бн╓Р╨Н╓Йд╬╓╩╓п╫╫й╛╓г, ╓╫╓Л╓ю╓╠╓г╓╕╓ч╓╞╓╓╓╞╓ю╓М╓╕╓х╓╒╓й╓©╓о╧м╓╗╓К╓╚╓Б╓╥╓Л╓ч╓╩╓С. ╩дг╟╓й╓╛╓Иб©╓╞╓н╔╒╔в╔Й╔╠║╪╔╥╔Г╔С╓Д╔Ф║╪╔ф╔ё╔Й╔ф╔ё(╔╥╔╧╔ф╔Ю╔д║╪╔К╓Б╢ч╓А╓ф)╓о, ╬╝╓╣╓й©Тцм╓Р╧╫б╓бн╓Д╔п╔ц╔у╔║╓й╓и╓к╩х╓ц╓ф╓╓╓ч╓╧(и╛╓╨╓╥╓Б 8 ╓Д 9 ╓г╓о╓й╓╞, 15 ╓Д 20 ╓й╓и╓нйя╓ц╓©цм╓Р╩х╓╕╓Б╓н╓Б╓╒╓Й╓ч╓╧). (╦гдЙд╧╓н╔Л╔Ё║╪╔и╓Р╢Эбт╓╧╓К╓х╓Ё╓М╓г╡дйяд╧╔Л╔Ё║╪╔и╓к╓й╓К╓©╓А, )бФл╣╓╥╓к╓й╓ц╓©╔М╔╟╔у╔║╔╓╔К╓Рфю╓К╓Ё╓х╓к╓й╓К╓х╓╓╓╕╓Ё╓х╓ю╓╠╓г╓й╓╞, Sun ╓н NIS ╓н╔╞╔И╔╓╔╒╔С╔х╓н╬Л╧Г╓олДбЙ╓╛╣╞╓╜╓ч╓╧╓╥, б╬╓н UNIX ╔╥╔╧╔ф╔Ю╓х╓н╢ьо╒╓к╓╙╓╓╓ф╓Ё╓Л╓И╟йЁ╟╓нлДбЙ╓Б╣╞╓╜╓К╡дг╫ю╜╓╛╓╒╓Й╓ч╓╧. ╓╥╓╚╓╥, FreeBSD 3.0 ╟й╧ъ╓г╓о 16 й╦╩З╓х╓й╓Й, б©╓╞╓н╔Ф║╪╔ф╔ё╔Й╔ф╔ё╓н╔о║╪╔и╔Ё║╪╔и╓╣╓Л╓©л╬а╟╓нд╧╓╣╓нлДбЙ╓Б╡Р╥Х╓╣╓Л╓ч╓╧. ╪б╨щ╓к╓о╔╥╔╧╔ф╔Ю╓н╓╒╓ч╓Й╓кб©╓╞╓ниТй╛╓Р╫╓ю╣╓╧╓К╓©╓А╓к, 3.0 ╓к╓й╓К╓ч╓г╓ойя╧╧╓╛╧т╓О╓Л╓ч╓╩╓С╓г╓╥╓©. ╓╫╓Л╟йа╟╓н╔п║╪╔╦╔Г╔С╓г╓о, ╓Ё╓Л╓И╓нлДбЙ╓╛╣╞╓Ё╓ц╓©╬Л╧Г╓к, лДбЙ╓Р╪╚й╛╪╚©х╓гх╞╦╚╓╥, ╡Р╥Х╓г╓╜╓К╓Ё╓х╓кюДбпе╙╓й╪╚©╝╓╛╓╒╓К╬Л╧Г╓о /usr/include/utmp.h ╓Рйт╫╦╓╥, UT_NAMESIZE ╓нйя╧╧╓к╓╥╓©╓╛╓ц╓ф, д╧╓╓╔Ф║╪╔╤л╬╓Р╩х╓╕╓Ё╓х╓╛╓г╓╜╓ч╓╧. ╓ч╓©, UT_NAMESIZE ╓нйя╧╧╓х╟Лцв╓╧╓К╓Х╓╕╓к /usr/include/sys/param.h ╓н MAXLOGNAME ╧╧©╥╓╥╓й╓╞╓ф╓о╓й╓Й╓ч╓╩╓С. ╨г╦Е╓к, ╔╫║╪╔╧╓╚╓И╔с╔К╔и╓╧╓К╬Л╧Г╓о /usr/include ╓РкХ╡С╔╒╔ц╔в╔г║╪╔х╓╧╓Ки╛мв╓╛╓╒╓К╓Ё╓х╓Рк╨╓Л╓й╓╓╓Х╓╕╓к! /usr/src/.. ╬Е╓н╔у╔║╔╓╔К╓Рйя╧╧╓╥╓ф╓╙╓╓╓фцж╓╜╢╧╓╗╓ч╓╥╓Г╓╕. FreeBSD ╬Е╓г DOS ╓н╔п╔╓╔й╔Й╓Рф╟╓╚╓╧╓Ё╓х╓о╓г╓╜╓ч╓╧╓╚? ╓о╓╓, FreeBSD 3.0 ╓╚╓И╓о, еЩ╧Г╓х╡Чни╓╛╫е╓м╓И╓Л╓© BSDI ╓н doscmd DOS ╔╗╔ъ╔Е╔Л║╪╔╥╔Г╔С╔╣╔ж╔╥╔╧╔ф╔Ю╓Р╩х╓ц╓ф╓г╓╜╓К╓Х╓╕╓к╓й╓Й╓ч╓╥╓©. ╨ё╓й╓╙бЁ╓╠╓И╓Л╓ф╓╓╓К╓Ё╓неьно╓к╤╫лё╓Р╩Щ╓ц╓ф╩╡╡ц╓╥╓ф╓╓╓©╓ю╓╠╓К╓й╓И, &a.emulation; ╓ь╔А║╪╔К╓РаВ╓ц╓ф╓╞╓ю╓╣╓╓. FreeBSD 3.0 ╟йа╟╓н╔╥╔╧╔ф╔Ю╓г╓о, pcemu ╓х╓╓╓╕╧╙л╞╓й╔Ф║╪╔ф╔ё╔Й╔ф╔ё╓╛ FreeBSD Ports Collection ╓к╓╒╓Й, 8088 ╓н╔╗╔ъ╔Е╔Л║╪╔╥╔Г╔С╓х DOS ╓н╔ф╔╜╔╧╔х╔Б║╪╔и╔╒╔в╔Й╔╠║╪╔╥╔Г╔С╓Рф╟╓╚╓╧╓к╫╫й╛╓й BIOS ╔╣║╪╔с╔╧╓Р╧т╓й╓╓╓ч╓╧. ╓Ё╓Л╓о X ╔╕╔ё╔С╔и╔╕╔╥╔╧╔ф╔Ю╓╛и╛мв╓г╓╧(XFree86 ╓х╓╥╓фдС╤║╓╣╓Л╓ф╓╓╓ч╓╧). sup ╓х╓о╡©╓г, ╓и╓н╓Х╓╕╓к╓╥╓ф╩х╓╕╓Б╓н╓й╓н╓г╓╥╓Г╓╕╓╚? SUP ╓х╓о, ╔╫╔у╔х╔╕╔╖╔╒╔╒╔ц╔в╔г║╪╔х╔в╔М╔х╔Ё╔К(Software Update Protocol)╓г ╔╚║╪╔м╔╝║╪╔А╔М╔СбГЁь(CMU)╓гЁ╚х╞╔д╔Й║╪╓нф╠╢Э╓н╓©╓А╓кЁ╚х╞╓╣╓Л╓ч╓╥╓©. ╩Д╓©╓а╓нцФ©╢Ё╚х╞╔д╔Й║╪╓Р╔Й╔Б║╪╔х╔╣╔╓╔х╓гф╠╢Э╓╣╓╩╓К╓©╓А╓к╩х╓ц╓ф╓╓╓ч╓╥╓©. SUP ╓о╔п╔С╔ииЩ╓Ро╡хЯ╓╥╓ч╓╧╓н╓г, ╨ё╓о╩х╓ц╓ф╓╓╓ч╓╩╓С. ╔╫║╪╔╧╔Ё║╪╔и╓н╔╒╔ц╔в╔г║╪╔х╓н╦╫╨ъ╓н╓╙╓╧╓╧╓А╓нйЩк║╓о FreeBSD ╔о╔С╔и╔ж╔ц╔╞╓н║жCVSup║в╓к╓╒╓Й╓ч╓╧. FreeBSD ╓Р╔╞║╪╔К╓к╩х╓╕╓к╓о? FreeBSD ╓Рф╟╓╚╓╧╩Ч╓к╡╧еыб╛дЙ╓Р╧т╓й╓ц╓©©м╓о╓╓╓ч╓╧╓╚? Linux ╓о dos ╓Х╓Й╓Б╡╧еы╓╛╡╪╓╛╓К╓х╓╓╓╕╓Ё╓х╓оцн╓ц╓ф╓╓╓ч╓╧╓╛, FreeBSD ╓к╓д╓╓╓ф╓о╓Ё╓н╓Х╓╕╓й╓Ё╓х╓к©╗╓Л╓©╓Б╓н╓Р╦╚╓©╓Ё╓х╓о╓╒╓Й╓ч╓╩╓С. ╪б╨щг╝╓╞╓й╓ц╓ф╓╓╓К╓Х╓╕╓к╦╚╓╗╓ч╓╧. ╓╓╓╓╓╗. ╩Д╓©╓а╓о 250 ╔ч╔╓╔╞╔М╔╟╔И╔Ю╓н LSD-25 ╓Р╓╒╓И╓╚╓╦╓Ам©╓╗╓ф╓╙╓╓╓©╔э╔И╔С╔ф╔ё╔╒╓кбп╓╧╓К, лэ╠ё╓╥лёЁп╔ф╔╧╔х╓РбГнл╓к╧т╓й╓ц╓ф╓╓╓ч╓╧. 35% ╓н╔э╔И╔С╔ф╔ё╔╒╓о FreeBSD ╓о╔╙╔Л╔С╔╦╓н╓Х╓╕╓йлё╓╛╓╧╓К╓х╦ю╓ц╓ф╓╓╓К╓н╓кбп╓╥, Linux ╓о╩Г╠Л╓н╓Х╓╕╓йлё╓О╓╓╓╛╓╒╓К╓х╦ю╓ц╓ф╓╓╓К©м╓Б╓╓╓ч╓╧. ╩Д╓нцн╓К╦б╓Йн╬йЩ╓н╔╟╔К║╪╔в╓х╓Б╡╧еы╓нит╟Лцв╓к╓д╓╓╓ф╓о©╗╓Л╓ф╓╓╓ч╓╩╓С. ╓Ё╓нд╢╨╨╓г, хС╬О╓кб©╓╞╓н╔э╔И╔С╔ф╔ё╔╒╓╛╔ф╔╧╔х╓Р╧т╓й╓ц╓©иТ╡╟╓╚╓Иит╩в╣д╓╫╓╕╓к╫п╓ф╓╜╓ф, ╓Ё╓н╓Х╓╕╓й╓╙╓╚╓╥╓й╥К╡л╓Р╪╗╓╥╓©╓Ё╓х╓к╩Д╓©╓а╓оеЖог╓╣╓╩╓И╓Л╓ч╓╥╓©. ╩Д╓о, ╓ш╓х╓С╓и╓н╔э╔И╔С╔ф╔ё╔╒╓о Apple ╓к╓╓╓фхЮ╓И╓н╨г©╥╓н║ж╟З╓ц╓╚╓╓╓ффВ╓╓╓Р╓╚╓╟║вGUI ╓Р╩х╓ц╓ф╓╓╓К╓н╓г╓о╓й╓╓╓╚╓х╧м╓╗╓ф╓╓╓ч╓╧. ╩Д╓©╓а╓о╢Ял╞╓й╦е╓╓╩е╩Ж╓Р╓╥╓ф╓╓╓К╓н╓г╓╥╓Г╓╕! ©©лллэ╓к╦ю╓╕╓х, FreeBSD ╓Д Linux ╓о╤╕╓к HLT (дД╩ъ) л©нА╓Р╔╥╔╧╔ф╔Ю╓н╔╒╔╓╔и╔К(idle)╩Ч╓к╩х╓╓, ╔╗╔м╔К╔╝║╪╓н╬цхЯ╓Р╡║╓╗╓ф╓╓╓ч╓╧╓н╓гг╝╓нх╞ю╦╓Б╬╞╓й╓╞╓й╓Й╓ч╓╧. ╓ч╓©, APM(advanced power management) ╓РюъдЙ╓╥╓ф╓╒╓К╓й╓И FreeBSD ╓о CPU ╓Р╔М║╪╔я╔О║╪╔Б║╪╔и╓к╓╧╓К╓Ё╓х╓╛╓г╓╜╓ч╓╧. ц╞╓╚╓╛╩Д╓н╔А╔Б╔Й╔╚║╪╔и╓Р╓р╓ц╓╚╓╓╓ф╓╓╓К╓н╓г╓╧╓╚?? FreeBSD╓г╔╚║╪╔м╔К╓н╔Ё╔С╔я╔╓╔К╓Р╓╥╓ф╓╓╓К╩Ч, ╔А╔Б╔Й╓╚╓И╟З╓ц╓╚╓╓╓ф╓╓╓К╓Х╓╕╓й╢Ял╞╓й╡╩╓╛й╧╓Ё╓╗╓К╓Х╓╕╓й╓Ё╓х╓о╓╒╓К╓н╓г╓╥╓Г╓╕╓╚? ╔Ё╔С╔я╔╓╔К╓Р╓╥╓ф╓╓╓К╩Ч(╓╒╓К╓╓╓о╣╞ф╟╩Ч╓к╔у╔М╔ц╔т╔и╔И╔╓╔ж╓Рг╖╪╠╓╥╓©╦Е╓нц╩╓╓╢ж╓й╓и), ╢Ял╞╓й╟З╓ц╓╚╓╞╓Х╓╕╓й╡╩╓╛╔А╔Б╔Й╔╚║╪╔и╓н╓╒╓©╓Й╓╚╓Ий╧╓Ё╓╗╓ф╓╜╓ч╓╧. ╓╫╓ндл╓Й! BSD ╓нй╦╫Я╓к╓они╓╞, ╔г║╪╔Б╔С(daemon)╓х╓╓╓╕╦юму╓╛╫п╓ф╓╜╓ч╓╧. ╓ш╓х╓С╓и╓н©м╓оцн╓И╓й╓╓╓н╓г╓╧╓╛, ╔г║╪╔Б╔С╓х╓о, ╓╒╓й╓©╓н╔Ё╔С╔т╔Е║╪╔©╓Р╟м╓ЙбЕ╓х╓╧╓К, ╫Ц©Х╓гхСй╙╪ае╙╓йб╦╨ъ╓н╓Ё╓х╓г╓╧. ╔А╔Б╔Й╓╚╓Ий╧╓Ё╓╗╓К╓р╓ц╓╚╓╞╓Х╓╕╓й╡╩╓о, ╓╣╓ч╓╤╓ч╓╒╓К╔╥╔╧╔ф╔Ю╢имЩ╔©╔╧╔╞╓н╟╥╓╓╓Р╓╓╓╚╓к╨га╠╓й╓Б╓н╓к╓╧╓К╓╚, ╓х╓╓╓ц╓©╓Ё╓х╓Р╥Х╓А╓К╓х╓╜╓к╔г║╪╔Б╔С╓©╓а╓╛╦Р╓О╓╧, ╓╚╓С╧Б╓╓╓╣╓╣╓Д╓╜ю╪╓й╓н╓г╓╧. ╓Ё╓н╩╗╡╩╓╛й╧╓Ё╓╗╓©╓х╓╜, DOS ╓╚╓И fdisk /mbr ╓х╓╓╓╕╔в╔М╔╟╔И╔Ю╓Р╪б╧т╓╧╓Л╓п, ╓╕╓ч╓╞╔г║╪╔Б╔С╓Рди╓╓╫п╓╧╓Ё╓х╓╛╓г╓╜╓К╓г╓╥╓Г╓╕. ╓г╓Б, ╔г║╪╔Б╔С╓о╓╫╓Л╓к╩У╦Ч╓╚╓ц╓ф fdisk ╓н╪б╧т╓Р╓Д╓А╓╣╓╩╓Х╓╕╓х╓╧╓К╓╚╓Бцн╓Л╓ч╓╩╓С. ╓Б╓╥, ╓╫╓Л╓Р╪б╧т╓╥╓ф╓╓╓К╓х╓╜╓к╔╧╔т║╪╔╚╓й╓И╔с╔К ╔╡╔╓╔д(Bill Gates)╓н╟╜кБ╓н╓╣╓╣╓Д╓╜╓╛й╧╓Ё╓╗╓ф╓╜╓©╓И, ╓╧╓╟╓кн╘╓а╬Е╓╛╓ц╓фф╗╓╡╓ф╓╞╓ю╓╣╓╓. ╥Х╓╥╓ф©╤╓Ййж╓ц╓ф╓о╓╓╓╠╓ч╓╩╓С! BSD ╓н╔г║╪╔Б╔С╓©╓а╓╛╡║╓╗╧Ч╓С╓г╓╓╓©ап╩р╓н╔г║╪╔Б╔С, DOS ╓х Windows ╓╛╡РйЭ╓╣╓Л, ╓╒╓й╓©╓н╨╡╓Р╠й╠С╓нгклг╓ьфЁ╓Ё╓╕╓х╔ч╔╥╔С╓Р╨ф╓с╩ыгш╓╥╓ф╓╥╓ч╓╕╓Ё╓х╓г╓╥╓Г╓╕. ╓╗╓╗, а╙╓ы╓х╦ю╓О╓Л╓©╓И, ╓О╓©╓╥╓о╓Ю╓╥╓М, ╓р╓ц╓╚╓╜╡╩╓к╢╥╓Л╓КйЩ╓Ра╙╓ж╓г╓╥╓Г╓╕╓м. "MFC" ╓х╓о╓и╓╕╓╓╓╕╟улё╓г╓╧╓╚ MFC ╓х╓о, ║жCURRENT ╓х╓н╧Гн╝(Merged From -CURRENT)║в╓нф╛й╦╩З╓Р╓х╓ц╓©╓Б╓н╓г╓╧. CVS ╔М╔╟╓г -CURRENT ╓╚╓И -STABLE ╔ж╔И╔С╔а╓ь╓н╧Гн╝╓Р╪╗╓╥╓ч╓╧. "BSD" ╓х╓о╓и╓╕╓╓╓╕╟улё╓г╓╧╓╚? ╓Ё╓н╦юму╓о, цГ╢ж╓╕╓а╓ю╓╠╓кй╛╓╚╓К╠ё╦Л╓г╡©╓х╓╚╓х╓╓╓╕╟улё╓г╓╧. й╦╩З╓и╓╙╓Й╓клУ╓╧╓Ё╓х╓о╓г╓╜╓ч╓╩╓С╓╛, BSD ╓нлУ╓о║жF1 ╓н╔Л║╪╔╥╔С╔╟╔а║╪╔Ю║в╓╚║ж╔з╔С╔╝╔С╓о╓╙╓╓╓╥╓╓╔╧╔й╔ц╔╞║в, ╓╒╓К╓╓╓о║ж╡╤╓©╓а╓Ц Linux ╓Х╓Йч╞мН╓омЬ╓╓╓ф╓К╓╪║в╓х╓╚╓╫╓н╓ь╓С╓ю╓х╦ю╓ц╓ф╓╙╓╠╓п╓╙╓ц╓╠║╪╓г╓╥╓Г╓╕. :-) ╬Ицл╓о╓╣╓ф╓╙╓╜. BSD ╓х╓о, Berkeley CSRG(╔Ё╔С╔т╔Е║╪╔©╔╥╔╧╔ф╔Юи╬╣д╡Я)╓╛хЮ╓И╓н UNIX ╓нгшиш╥абж╓нл╬а╟╓х╓╥╓феЖ╩Ча╙╓С╓ю "Berkeley Software Distribution" ╓нн╛╓г╓╧. ╔Й╔щ╔╦╔х╔Й║╕╔Ё╔т║╪ (repo-copy) ╓х╓о╟Лбн╡©╓н╓Ё╓х╓г╓╥╓Г╓╕? repo-copy (repository copy ╓нн╛) ╓х╓о, CVS ╔Й╔щ╔╦╔х╔Й╓нцФ╓гд╬юэ╔у╔║╔╓╔К╓Р╔Ё╔т║╪╓╧╓К╓Ё╓х╓Р╪╗╓╧мя╦Л╓г╓╧. repo-copy ╓Р╧т╓й╓О╓й╓╓╬Л╧Г╓Р╧м╓╗╓ч╓╧. ╔Й╔щ╔╦╔х╔Й╓нцФ╓н╟ш╓й╓К╬Л╫Й╓к╔у╔║╔╓╔К╓Р╔Ё╔т║╪╓╥╓©╓Й, ╟эф╟╓╥╓©╓Й╓╧╓Ки╛мвю╜╓╛ю╦╓╦╓К╓х, ╔Ё╔ъ╔ц╔©║╪╓о ╔у╔║╔╓╔К╓Р©╥╓╥╓╓╬Л╫Й╓кцж╓╞╓©╓А╓к cvs add ╓Р, ╓╫╓╥╓ф╦е╓╓╔у╔║╔╓╔К╓╛╨О╫Э╓╣╓Л╓К╬Л╧Г╓о, ╦е╓╓╔у╔║╔╓╔К╓кбп╓╥╓ф cvs rm ╓Р╪б╧т╓╧╓К╓г╓╥╓Г╓╕. ╓Ё╓нйЩк║╓н╥Гею╓о, ╔у╔║╔╓╔К╓нйя╧╧мЗнР (╓©╓х╓╗╓п CVS ╔М╔╟╓н╔╗╔С╔х╔Й) ╓╛©╥╓╥╓╓╬Л╫Й╓к╔Ё╔т║╪╓╣╓Л╓й╓╓╓Ё╓х╓г╓╧. FreeBSD ╔в╔М╔╦╔╖╔╞╔х╓г╓о╓Ё╓нйя╧╧мЗнР╓Р╓х╓ф╓Бм╜мя╓й╓Б╓н╓ю╓х╧м╓╗╓ф╓╓╓К╓©╓А, а╟╫р╓нйЩк║╓нбЕ╓О╓Й╓к╔Й╔щ╔╦╔х╔Й╔Ё╔т║╪╓╛ни╓╞мя╓╓╓И╓Л╓ч╓╧. ╓Ё╓наЮ╨Н╓о cvs ╔в╔М╔╟╔И╔Ю╓РмЬмя╓╧╓К╓н╓г╓о╓й╓╞, ╔Й╔щ╔╦╔х╔Й╓н╢имЩц╢еЖ╪т╓╛╔Й╔щ╔╦╔х╔Й╓нцФ╓г╔у╔║╔╓╔К╓Рд╬юэ╔Ё╔т║╪╓╧╓К╓Ё╓х╓к╓Х╓ц╓ф╧т╓й╓О╓Л╓ч╓╧. ╓й╓С╓г╔п╔╓╔╞╬╝╡╟ (bikeshed) ╓н©╖╓к╓ч╓г╣╓╓Р╩х╓О╓й╓╠╓Л╓п╓╓╓╠╓й╓╓╓С╓г╓╧╓╚? ╟Л╦ю╓г╦ю╓ц╓ф╓╥╓ч╓╗╓п, ╓╫╓╕╓╧╓ы╓╜╓г╓о╓╒╓Й╓ч╓╩╓С. ╓Б╓╕╬╞╓╥╬э╓╥╓╞юБлю╓╥╓ч╓╥╓Г╓╕. ╓©╓х╓╗╓п, ╓╒╓й╓©╓╛╔п╔╓╔╞╬╝╡╟╓Р╥З╓ф╓К╣╩╫я╓Р╩Щ╓ц╓ф╓╓╓©╓х╓╥╓ч╓╧. ╓╥╓╚╓╥╓╫╓Л╓о, еи╓М╓╕╓х╓╥╓ф╓╓╓К©╖╓╛╣╓╓кфЧ╓И╓й╓╓╓╚╓И╓х╦ю╓ц╓ф, б╬©м╓╛╔п╔╓╔╞╬╝╡╟╓Р╥З╓ф╓Х╓╕╓х╓╥╓ф╓╓╓К╓н╓Р╩ъ╓А╓фни╓╓мЩмЁ╓к╓о╓й╓Й╓ч╓╩╓С╓Х╓м. ╓Ё╓Л╓о, ╪╚й╛╓н╧тф╟╓к╓д╓╓╓ф╫╫й╛╓ймЩ╡Р╓Р╩Щ╓ц╓ф╓╓╓К╓й╓И, ╓╒╓й╓©╓о╨ы╓╚╓й╣║г╫╓╧╓ы╓ф╓к╓О╓©╓ц╓ф╣дою╓╧╓Ки╛мв╓о╓й╓╓╓Ё╓х╓Р╪╗╓╧хФсх╓г╓╧. ╓╒╓Кйя╧╧╓к╓Х╓ц╓ф╩╨╓ъ╫п╓╣╓Л╓К╔н╔╓╔╨╓наМнл╓о, ╓╫╓нйя╧╧╓нйё╩╗╓╣╓кх©хФнЦ╓╧╓К╓н╓ю╓х╦ю╓ц╓ф╓╓╓К©мцё╓Б╓╓╓ч╓╧. ╓╣╓И╓к╬э╓╥╓╞, ╢╟а╢╓й╡СеЗ╓Р╬р╡П╓╥╓ч╓╥╓Г╓╕. Poul-Henning Kamp ╓о, ║ж&man.sleep.1; ╓ой╛©Т╓ниц©Т╓Р╟З©Т╓х╓╥╓ф╪Х╓К╓ы╓╜╓╚║в╓х╓╓╓╕ хС╬О╓кд╧╓╓╣дою╓н╦Е╓г, A bike shed (any colour will do) on greener grass... ╓х╓╓╓╕╔©╔╓╔х╔К╓нд╧й╦╓РеЙ╧ф╓╥╓ч╓╥╓©. ╢ь╥╦╓н╓╒╓КиТй╛╓ю╓╠╓Р╟й╡╪╓к╥г╨э╓╥╓ч╓╧.
1999 г╞ 10 ╥Н 2 фЭ freebsd-hackers ╓к╓ф Poul-Henning Kamp ╓Ё╓н╔п╔╓╔╞╬╝╡╟, ╓и╓╕╓ю╓М╓╕? ц╞╓╚╓╛╓©╓╨╓м╓ч╓╥╓©. д╧╓╓║д╓х╓╓╓╕╓╚, ╓Ю╓╥╓М╦е╓╓оц╓к╓й╓Й╓ч╓╧╓╛, цФ©х╓о╓О╓Й╓х╢йц╠╓йоц╓г╓╧. ╔я║╪╔╜╔С╔╫╔С (C. Northcote Parkinson) ╓о 1960 г╞бЕ╫Иф╛╓к ╔я║╪╔╜╔С╔╫╔С╓нк║б╖ ╓х╦ф╓п╓Л╓Ккэ╓Р╫Я╓╜╓ч╓╥╓©. ╓Ё╓нцФ╓к╓о╓╣╓ч╓╤╓ч╓й╥п╠д╓нноЁь╓к╢ь╓╧╓Кф╤╩║╓╛╢ч╓ч╓Л╓ф╓╓╓ч╓╧. [ ╓Ё╓нкэ╓к╢ь╓╧╓К╡РюБ╓╛╓╒╓ц╓©╓╛╬йн╛ ] ╔п╔╓╔╞╬╝╡╟╓к╢ьо╒╓╧╓КнЦ╓х╓╥╓ф, ╓Б╓╕╟Л╓д╓н╫емв╓й╧╫ю╝мваг╓х╓й╓ц╓ф╓╓╓К╓н╓о╦╤╩рнох╞ее╫Й╓г╓╧. ╓Ё╓нкэ╓нг╞бЕ╓╛╓О╓╚╓Й╓ч╓╧╓м. ╔я║╪╔╜╔С╔╫╔С╓о, ╓╒╓й╓©╓╛╫елР╡Я╓к╫пюй╓╥╓ф ©Ти╢кЭ╓╚╓И©Т10╡╞╔и╔К╣╛ло╓н╦╤╩рнох╞ее╫Й╓н╥Зюъ╓н╬╣г╖╓Рфю╓К ╓Ё╓х╓о╓г╓╜╓К╓г╓╥╓Г╓╕╓╛, ╓╒╓й╓©╓╛╥З╓ф╓©╓╓╓н╓╛╔п╔╓╔╞╬╝╡╟╓й╓И╓п, ╫╙╓О╓Й╓й╓╜╣дою╓к╢╛╓╜╧Ч╓ч╓Л╓К╓ю╓М╓╕╓х╦ю╓ц╓ф╓╓╓ч╓╧. ╔я║╪╔╜╔С╔╫╔С╓о╓Ё╓н╓Х╓╕╓кюБлю╓╥╓ф╓╓╓ч╓╧. ╓Ё╓Л╓о╦╤х╞╓╛м╬╓Й╓к╣ПбГ╓г╧Б╡а╓гйё╩╗╓й╓н╓гц╞╓Б╓Ё╓Л╓Р╟Л╪Й╓к╟╝╓К╓Ё╓х╓╛╓г╓╜╓╨, ╓╫╓Л╓Р╩Н╓ъ╓К╓╞╓И╓╓╓й╓И╓Ю╓╥╓М, ╪Й╓╛╫п╓╩╓й╓╞╓й╓Ка╟╓к б╬╓нц╞╓╚╓╛╓╧╓ы╓ф╓Р╬э╨ы╓к╔а╔╖╔ц╔╞╓╧╓К╓Ё╓х╓Р ╟З╓╜╪У╓╠╓К╓Ё╓х╓кмЙ╓К╓н╓г╓╧. ╔Й╔а╔Ц║╪╔и║╕╔у╔║╔╓╔С╔ч╔С (Richard P. Feynmann) ╓о, ╔М╔╧╔╒╔И╔Б╔╧╓г╓Ё╓н╪Й╓н╫емв╓й╥п╦Ё╓Р╡©еы╓Б╦╚╓ф╓╜╓©╓хкэ╓к╫Я╓╓╓ф╓╓╓ч╓╧. ╟ЛйЩ╓г╔п╔╓╔╞╬╝╡╟╓н╬Л╧Г╓о, ц╞╓г╓Б╫╣кЖ╓к╓Ё╓Л╓Р╨Н╓Й╬Е╓╡╓К╓Ё╓х╓╛╓г╓╜, ╓╥╓╚╓Б TV ╓н╩Н╧Г╓Р╦╚╓К╩Ч╢ж╓╛╓╒╓ч╓К╓ш╓и╓г╓╧. ╓й╓н╓г, ╓и╓С╓й╓к╫ЮхВ╓╛ю╟╓╗╓ф╓╒╓ц╓ф, ╓и╓С╓й╓к╥в╡Х╓╛╫ГеЖ╓г╓╒╓ц╓©╓х╓╥╓ф╓Б, ╓О╓©╓╥╓о╩е╩Ж╓Р╓Д╓ц╓ф╓╓╓К╓Х, ╓О╓©╓╥╓оцМ╟у╓Рй╖╓ц╓ф╓╓╓К╓Х, ╓╫╓╥╓ф ╓О╓©╓╥╓о╓Ё╓Ё╓к╓╓╓К╓Х, ╓х╓╓╓╕╓Ё╓х╓Р╪╗╓╫╓╕╓х╓╧╓К©м╓╛и╛╓╨╦╫╓Л╓ч╓╧. ╔г╔С╔ч║╪╔╞╓г╓о╓Ё╓Л╓Р║ж╩ьлФ╓Р╓д╓╠╓К║в╓х╦ф╓С╓г╓╓╓ч╓╧. ╓Ё╓Л╓о╦д©ме╙╓й╔в╔И╔╓╔и╓Дл╬ю╪╓Р╣А╓А, ╓╒╓К╬Л╫Й╓Р╩ь╓╥╪╗╓╥╓ф║ж╓Ё╓Ё! ╓Ё╓Ё╓о╡╤╓╛ ╓Д╓ц╓©╓С╓ю╓╪║а║в╓х╓╓╓╕╓Х╓╕╓й╓Б╓н╓г╓╧. ╓Ё╓Л╓ою╞╪ё╡х╓к╦╚╓И╓Л╓К╤╞╓╓фцд╖╓г╓╧╓╛, ╓╫╓нб╬╓н╓ш╓х╓С╓и╓н©м╓Б╓Ё╓╕╓╓╓╕иВ╓к©╤иЯ╓╕╡дг╫ю╜╓о╓╒╓К╓н╓г╓╧. ю╦╢╔╓╜╓н╔╩╔А╔С╔х╓к╓д╓╠╓И╓Л╓©б╜юв╓н╓Ё╓х╓Р╧м╓╗╓Л╓п╓╙й╛╓╚╓Й╓г╓╥╓Г╓╕.
╓р╓х╓д╓нее╣Е╓Р╪Х╓Йбь╓╗╓К╓н╓к, ╡©©м╓н FreeBSD ╔о╔ц╔╚║╪╓╛и╛мв? 1,172©м╓г╓╧. ее╣Е╓╛╬ц╓╗╓ф╓╓╓К╓х -CURRENT ╓гй╦╤Г╓Р╦ю╓╕╓н╓к 23 ©м. юъдЙ╬Е╓нлДбЙ╓г -questions ╓гоц╓Р╓╧╓ы╓╜╓Ё╓х╓к╓д╓╓╓фаШ╓╟╓н╓к 4 ©м. ╓╫╓Л╓Р send-pr (лУцМ: ╬ЦЁ╡йС╧П) ╓╧╓К╓н╓к 3 ©м(╓╫╓н╓╕╓а╓н╓р╓х╓д╓о╢ж╟Ц╓ц╓ф doc ╔╚╔ф╔╢╔Й╓каВ╓Й╓д╓╠╓И╓Л╓©╓╕╓╗╓к, фБмф╓╛║ж╟е╓╞╓й╓ц╓©║в╓х╓╓╓╕╓ю╓╠╓н╓Б╓н). buildworld ╓Р╪╨гт╓╣╓╩, 5 й╛╦Е╓к╓о╦╣╓клА╓╣╓Л╓К╓Х╓╕╓йее╣Е╓Р ╔ф╔╧╔х╓Б╓╩╓╨╓к╔Ё╔ъ╔ц╔х╓╧╓К╓н╓к 1 ©м. send-pr ╓╥╓©©м╓к, ╔я╔ц╔а╓╛╢ч╓ч╓Л╓ф╓╓╓й╓╓╓х║ж╓╓╓а╓Ц╓Б╓С║в╓Риу╓╠╓К╓н╓к 8 ©м. buildworld ╓╛╪╨гт╓╧╓К╓хй╦╤Г╓Р╦ю╓╕╓н╓к 5 ©м. ╪╚й╛╓н╓х╓Ё╓М╓г╓о╓а╓Ц╓С╓хф╟╓╞, cvsup ╓╥╓©╔©╔╓╔ъ╔С╔╟╓╛╟╜╓╚╓ц╓©╓С╓ю╓М╓╕╓хеЗ╓╗╓К╓н╓к 31 ©м. ©╥╓╥╓╓ее╣Е╓н╓©╓А╓н╔я╔ц╔а╓Р -hackers ╓кеЙ╓╡╓К╓н╓к 1 ©м. ╪╚й╛╓о 3г╞╓Ба╟╓к╔я╔ц╔а╓Р╨Н╓ц╓©╓╛, ╓╫╓Л╓Р -CURRENT ╓кеЙ╓╡╓©╓х╓╜╓к╓ол╣╩К╓╣╓Л╓©╓ю╓╠╓ю╓ц╓©, ╪╚й╛╓о send-pr ╓н╔╥╔╧╔ф╔Ю╓к╓о╥Ы╓й╥п╦Ё╓╛╓╒╓К╓х(╓╙╓ч╓╠╓к, дС╟ф╓╣╓Л╓©©╥╓╥╓╓ее╣Е╓к╓о╫юфПю╜╓╛л╣╓╓╓х╓ч╓г)й╦╤Г╓Р╦ю╓╕╓н╓к 1 ©м. ее╣Е╓╛╢Пкэ╔╥╔╧╔ф╔Ю╓ках╓ъ╧Ч╓ч╓Л╓ф╓╓╓й╓╓, committer ╓о╔Ё╔ъ╔Е╔к╔ф╔ё╓н╟у╦╚╓Рй╧╓╞╓Ё╓хл╣╓╥╓к╓Ё╓С╓й╓Ё╓х╓Р╓╧╓К╦╒мЬ╓ол╣╓╓╓х╤╚╓с, ║ж╓Ё╓С╓й╓х╓╜╓к -core ╓о╡©╓Р╓Д╓ц╓ф╓К╓С╓ю!?║в╓х╓О╓А╓╜╓а╓И╓╧╓н╓к 37 ©м. ╪╚е╬╪жцж╓╜╬Л╓н©╖╓кй╦╤Г╓Р╦ю╓╕╓н╓к 200 ©м. ╔я╔ц╔а╓╛ style(9) ╟Цх©╓ю╓х╩ье╕╓╧╓К╓н╓к 3 ©м. дС╟ф╓╣╓Л╓©©╥╓╥╓╓ее╣Е╓о GPL ╓н╡╪╓к╓╒╓К╓хй╦╤Г╓Р╦ю╓╕╓н╓к 70 ©м. GPL ╓х BSD ╔И╔╓╔╩╔С╔╧╓х MIT ╔И╔╓╔╩╔С╔╧╓х NPL ╓х, к© FSF аон╘╪т╓И╓н╦д©ме╙╓й╥Р╧╞к║╓нм╔╟лю╜╓к╓д╓╓╓ф╓ноюаХ╓РюО╓О╓╧╓н╓к 586 ©м. ╔╧╔Л╔ц╔и╓н╓╒╓а╓Ё╓а╓н╩ч╓Р -chat ╓Д -advocacy ╓к╟эф╟╓╧╓К╓н╓к 7 ©м. дС╟ф╓╣╓Л╓©ее╣Е╓Р, ╦е╓╓╓н╓Х╓Й╓╨╓ц╓хгЖ╟е╓╓╓н╓к╔Ё╔ъ╔ц╔х╓╥╓ф╓╥╓ч╓╕╓н╓к 1 ©м. FreeBSD ╓кгЖ╟е╓╓ее╣Е╓Риу╓╠╓К╓╞╓И╓╓╓й╓И©©╓ц╟е╓н╓ш╓╕╓╛╓ч╓╥╓ю╓х╓╓╓╕, ╔Ё╔ъ╔ц╔х╔А╔ц╔╩║╪╔╦╓ь╓ню╗╓ч╓╦╓╓хСфЯ╓нмР╓к╓Х╓ц╓ф, ╓╫╓Л╓Р╦╣╓клА╓╧╓н╓к 2 ©м. гЖ╟е╓╓ее╣Е╓╛д╒╬ц╓╥╓к╓╣╓Л╓©╓Ё╓х╓кбп╓╥╓ф╓и╓й╓Йю╪╓г╦Щою╓╥, -core ╓ню╪лю╓Рмв╣А╓╧╓К╓н╓к 46 ©м. ╓Б╓╥ FreeBSD ╓Р╓©╓ч╓╢╓ц╓а╓к╟э©╒╓╧╓К╓Ё╓х╓к╓й╓ц╓©╓х╓╜╓кет╧Г╓╛╓╓╓╓╓Х╓╕╓к, ╓Б╓ц╓х╬╝╓╣╓йее╣Е╓Рмв╣А╓╧╓К╓н╓к 11 ©м. -hackers ╓х -chat ╓н S/NхФ╓кй╦╤Г╓Р╦ю╓╓, ╧Ё╣д╓н╓©╓А╧жфи╓Р╪Х╓Й╓Д╓А╓К╓н╓к 73 ©м. ║жunsubscribe║в║ж╓и╓╕╓Д╓ц╓©╓И╧жфи╓Р╓Д╓А╓И╓Л╓К╓С╓г╓╧╓╚?║в ║ж╓Ё╓н╔А║╪╔Й╔С╔╟╔Й╔╧╔х╓╚╓И╓О╓©╓╥╓РЁ╟╓╥╓ф╓╞╓ю╓╣╓╓║в╓х╓╓╓ц╓© ╔А╔ц╔╩║╪╔╦╓Р, нЦ╓н╔у╔ц╔©╓Р╓╞╓ц╓д╓╠╓феЙ╧ф╓╧╓К╓н╓к 13 ©м. ╓ъ╓С╓й╓╛╥Цою╓РюО╓О╓╩╓К╓н╓кк╩╓╛╓╥╓╞╓ф╣╓иу╓╚╓й╓╓╢ж╓к, ╨Н╤хцФ╓нее╣Е╓Р╔Ё╔ъ╔ц╔х╓╧╓К╓н╓к 1 ©м. ©╥╓╥╓╓ее╣Е╓о TenDRA ╓Р╩х╓ц╓ф╔Ё╔С╔я╔╓╔К╓╣╓Л╓©╬Л╧Г╓к 0.364% ╓Блю╓К╓╞╓й╓К(╓©╓ю╓╥ее╣Е╓Рн╘йЩбн╓к╓╥╓й╓╠╓Л╓п╓й╓И╓й╓╓), ╓ю╓╚╓И FreeBSD ╓о EGCS ╓╚╓И TenDRA ╓кйя╓╗╓К╓ы╓╜╓ю╓х╩ье╕╓╧╓К╓н╓к 31 ©м. ©╥╓╥╓╓ее╣Е╓охЧ╓╥╓╣╓к╥Г╓╠╓ф╓╓╓К╓хй╦╤Г╓Р╦ю╓╕╓н╓к 1 ©м. ║жMFC ╓ц╓ф╡©╓г╓╧╓╚?║в╓хй╧╓╞╓н╓к 9 ©м(send-pr ╓╥╓©©м╓Б╢ч╓Ю). ее╣Е╓╛╪Х╓Йбь╓╗╓И╓Л╓ф╓╚╓И 2 ╫╣╢ж╓Б╬ц╓╗╓ц╓я╓й╓╥╓ю╓хй╦╤Г╓Р╦ю╓╕╓н╓к 57 ©м. &a.nik; ╓к╓Х╓Кди╣╜ ╓Ё╓Л╓к╓огЗ╬п╓╥╓ч╓╥╓©. ╓╫╓Л╓╚╓И╓О╓©╓╥╓о╧м╓╗╓ч╓╥╓©. ║ж╓а╓Г╓ц╓хбт╓ф╓Х? ╓Ё╓н╔Й╔╧╔х╓н╓и╓Ё╓╚╓к, ║ь╓Ё╓Л╓Рй╦╫Я╓к╓ч╓х╓А╓К╓н╓к 1©м║ы╓х╓╓╓╕╓н╓╛╓╒╓ц╓ф╓Б╓╓╓╓╓С╓╦╓Ц╓й╓╓╓╚?║в ╓╫╓Л╓╚╓И╓О╓©╓╥╓о╦Г╓Й╓РЁ╚╓╓╓©╓н╓г╓╧ :-) ╓Ё╓н╧Юлэ╓нцЬ╨Н╦╒╓о Copyright (c) 1999 &a.des; ╓к╓╒╓Й╓ч╓╧. л╣цг╓г╩хмя╓╥╓й╓╓╓г╓╞╓ю╓╣╓╓.
╓ч╓╦╓А╓й FreeBSD ╔о╔ц╔╚║╪╓ю╓╠╓ноцбЙ лУ: &a.jp.iwasaki;, 1997 г╞ 11 ╥Н 8 фЭ. SNAP ╓х╓╚ RELEASE ╓х╓╚╓о╡©? ╦╫╨ъ, FreeBSD ╓н CVS ╔Й╔щ╔╦╔х╔Й ╓к╓о, ╩╟╓д╓н╔╒╔╞╔ф╔ё╔ж/╫Ю╔╒╔╞╔ф╔ё╔ж╓й╔ж╔И╔С╔а╓╛╓╒╓Й╓ч╓╧ (╔╒╔╞╔ф╔ё╔ж╓йЁ╚х╞╔ж╔И╔С╔а╓о╩╟╓д╓╥╓╚б╦╨ъ╓╥╓й╓╓╓©╓А, ╓╙╓╫╓И╓╞ RELENG_2 ╔ж╔И╔С╔а╓нйя╧╧╓ог╞╓к 2 ╡С╓ю╓╠╓к╓й╓К╓г╓╥╓Г╓╕). RELENG_2_2 дл╬н 2.2-STABLE RELENG_3 дл╬н 3.X-STABLE RELENG_4 дл╬н 4-STABLE HEAD дл╬н ╓╒╓К╓╓╓о 5.0-CURRENT HEAD ╓об╬╓нфС╓д╓х╟Ц╓ц╓ф, ╪б╨щ╓н╔ж╔И╔С╔а╔©╔╟╓г╓о╓й╓╞, ║жcurrent, й╛╢Т╓╥╓ф╓╓╓й╓╓Ё╚х╞кэн╝║в╓н╓©╓А╓нц╠╓й╓К╔╥╔С╔э╔Й╔ц╔╞╓йдЙ©Т╓г╓╧. ╩Д╓©╓а╓о╓Ё╓Л╓Р -CURRENT ╓х╦ф╓С╓г╓╓╓ч╓╧. ╦╫╨ъ, -CURRENT ╓о 5.0 ╓нЁ╚х╞кэн╝╓г╓╒╓Й, 4.0-STABLE ╔ж╔И╔С╔а, ╓д╓ч╓Й RELENG_4 ╓о 2000 г╞ 3 ╥Н╓к -CURRENT ╓╚╓Ий╛╢Т╓╥╓ф╓╓╓ч╓╧. 2.2-STABLE ╔ж╔И╔С╔а, RELENG_2_2 ╓о 1996 г╞ 11 ╥Н╓к -CURRENT ╓╚╓Ий╛╢Т╓╥╓ч╓╥╓©. ╓Ё╓Л╓ойщ╪И╓╛╢╟а╢╓к╫╙н╩╓╥╓ф╓╓╓ч╓╧. ╪╚й╛мя╓н╔╚╔╧╔©╔Ю╔Й╔Й║╪╔╧╓Р╧╫цш╓╧╓К╓к╓о? ╔Й╔Й║╪╔╧╓Р╧╫цш╓╧╓К╓к╓о╩╟╓д╓н╓Ё╓х╓╛и╛мв╓г╓╧. ╓ч╓╨, vn ╔и╔И╔╓╔п╓╛ах╓ъ╧Ч╓ч╓Л╓©╔╚║╪╔м╔К╓Р╪б╧т╓╣╓╩╓ф╓╓╓Ки╛мв╓╛╓╒╓Й╓ч╓╧. ╟й╡╪╓Р╔╚║╪╔м╔К╔Ё╔С╔у╔ё╔╟╔Л║╪╔╥╔Г╔С╔у╔║╔╓╔К╓кди╡ц╓╥, ╔╚║╪╔м╔К╓Р╨Н╓Йд╬╓╥╓ф╓╞╓ю╓╣╓╓. pseudo-device vn #Vnode driver (turns a file into a device) ╪║╓к, CVS ╔Й╔щ╔╦╔х╔Йа╢бн╓Р╪Й╦╣╓к╓╙╓╓╓ф╓╙╓╞и╛мв╓╛╓╒╓Й╓ч╓╧. ╓Ё╓Л╓РфЧ╪Й╓╧╓К╓к╓о CVSUP ╓╛╩хмя╓г╓╜╓ч╓╧╓╛, supfile ╓г release ╓нл╬╬н╓Р cvs ╓к╓╥╓ф б╬╓н╔©╔╟╓Д date ╔у╔ё║╪╔К╔и╓Р╨О╫Э╓╧╓Ки╛мв╓╛╓╒╓Й╓ч╓╧. *default prefix=/home/ncvs *default base=/a *default host=cvsup.FreeBSD.org *default release=cvs *default delete compress use-rel-suffix ## Main Source Tree src-all src-eBones src-secure # Other stuff ports-all www doc-all ╓╫╓╥╓ф cvsup -g supfile ╓Р╪б╧т╓╥╓ф╪╚й╛╓н╔ч╔╥╔С╓к CVS ╔Й╔щ╔╦╔х╔Йа╢бн╓Р╔Ё╔т║╪╓╥╓ч╓╧... ╨г╦Е╓к, ╔с╔К╔имя╓к╓╚╓й╓Й╓н╤У╓╜нн╟Х╓Рмя╟у╓╧╓Ки╛мв╓╛╓╒╓Й╓ч╓╧. ╓╫╓н╔г╔ё╔Л╔╞╔х╔Й╓Р /some/big/filesystem ╓х╓╥╓ф, ╬Е╓ннЦ╓г CVS ╔Й╔щ╔╦╔х╔Й╓Р /home/ncvs ╓кцж╓╓╓©╓Б╓н╓х╓╧╓К╓х, ╟й╡╪╓н╓Х╓╕╓к╓╥╓ф╔Й╔Й║╪╔╧╓Р╧╫цш╓╥╓ч╓╧. &prompt.root; setenv CVSROOT /home/ncvs # or export CVSROOT=/home/ncvs &prompt.root; cd /usr/src &prompt.root; make buildworld &prompt.root; cd /usr/src/release &prompt.root; make release BUILDNAME=3.0-MY-SNAP CHROOTDIR=/some/big/filesystem/release
╓©╓ю╓╥, ╓╧╓г╓к /usr/obj ╟й╡╪╓к╧╫цшй╙╓╛б╦╨ъ╓╥╓ф╓╓╓К╓й╓И, buildworld ╓ни╛мв╓о╓╒╓Й╓ч╓╩╓С.
╫ХмЩ╓╛╫╙н╩╓╧╓К╓х, ╔Й╔Й║╪╔╧а╢бн╓╛ /some/big/filesystem/release ╓к╧╫цш╓╣╓Л, ╢╟а╢╓й FTP ╔╓╔С╔╧╔х║╪╔Кмя╓нгшишй╙╓╛ /some/big/filesystem/release/R/ftp ╓к╨Ню╝╓╣╓Л╓ч╓╧. -current ╟йЁ╟╓нЁ╚х╞╔ж╔И╔С╔а╓н SNAP ╓Р╪╚й╛╓г╧╫цш╓╥╓©╓╓╬Л╧Г╓о, RELEASETAG=SOMETAG ╓Р╬Е╓н make release ╓н╔Ё╔ч╔С╔и╔И╔╓╔С╓кди╡ц╓╥╓ч╓╧. нЦ╓╗╓п, RELEASETAG=RELENG_2_2 ╓х╓╧╓К╓х╨г©╥╓н 2.2-STABLE snapshot ╓╛╧╫цш╓╣╓Л╓ч╓╧.
╔╚╔╧╔©╔Ю╓н╔╓╔С╔╧╔х║╪╔К╔г╔ё╔╧╔╞╓Р╨Н╓К╓к╓о╓и╓╕╓╧╓Л╓п╓╓╓╓╓н╓г╓╧╓╚? /usr/src/release/Makefile ╓н╓╓╓М╓╓╓М╓й╔©║╪╔╡╔ц╔х╓х╓╥╓ф╔╓╔С╔╧╔х║╪╔К╔г╔ё╔╧╔╞, ╔╫║╪╔╧, ╔п╔╓╔й╔Й╔╒║╪╔╚╔╓╔ж╓Р╨Н╓К╢╟а╢╓й╫ХмЩ╓Р╪╚ф╟е╙╓к╧т╓й╓╕╓Х╓╕╓к╓й╓ц╓ф╓╓╓ч╓╧. Makefile ╓к╫╫й╛╓й╬ПйС╓╛╓╒╓Й╓ч╓╧. ╓╥╓╚╓╥, ╪б╧т╓к╓о make world ╓╛и╛мв╓г, б©╓╞╓н╩Ч╢ж╓х╔г╔ё╔╧╔╞╓нмфнл╓╛и╛мв╓г╓╧. make world ╓Р╧т╓й╓╕╓х╢Шб╦╓н╔п╔╓╔й╔Й╓Р╬Е╫Я╓╜╓╥╓ф╓╥╓ч╓╕╓н╓г╓╧╓╛. ╓╗╓╗, ╓╫╓Л╓╛╟Лхле╙╓й╧м╓╗йЩ╓г╓╧. л╬а╟╓╛╪╗╓╥╓ф╓╓╓К╓Х╓╕╓к make world ╓о╓╧╓ы╓ф╓н╔╥╔╧╔ф╔Ю╓н╔п╔╓╔й╔Й╓Р╨г╫И╓╚╓И╨Н╓Йд╬╓╥╓ч╓╧╓н╓г, ╥К╡л╓х╓╥╓ф, ╔╞╔Й║╪╔С╓г╟Л╢сю╜╓н╓╒╓К╢д╤╜╓Рфю╓К╓Ё╓х╓╛╓г╓╜╓ч╓╧(╓Ё╓Л╓╛╓╫╓Л╓ю╓╠д╧╓╓╩Ч╢ж╓╛╓╚╓╚╓КмЩмЁ╓г╓╧). ╢д╤╜йя©Т DESTDIR ╓Р make world ╓Д make install ╓Р╪б╧т╓╧╓К╩Ч╓кдЙ╣а╓╥╓ф╓╙╓╞╓х, ©╥╓╥╓╞╨Н╓И╓Л╓©╔п╔╓╔й╔Й╓о ${DESTDIR}╓Р root ╓х╓ъ╓й╓╥╓©╔г╔ё╔Л╔╞╔х╔Й╔д╔Й║╪╓к╔╓╔С╔╧╔х║╪╔К╓╣╓Л╓ч╓╧. ╓╒╓К╓г╓©╓И╓А╓й╤╕м╜╔И╔╓╔ж╔И╔Й╓нйя╧╧╓Д╔в╔М╔╟╔И╔Ю╓н╨ф╧╫цш╓к╓Х╓ц╓ф make world ╓о╪╨гт╓╧╓К╓Ё╓х╓Б╓╒╓Й╓ч╓╧. ╔╥╔╧╔ф╔Ю╣╞ф╟╩Ч╓к (bus speed defaulted) ╓х╔А╔ц╔╩║╪╔╦╓╛╫п╓ч╓╧. Adaptec ╓н 1542 SCSI ╔ш╔╧╔х╔╒╔ю╔в╔©╓о, ╔Ф║╪╔╤╓╛╔╫╔у╔х╔╕╔╖╔╒е╙╓к╔п╔╧╔╒╔╞╔╩╔╧б╝еы╓нюъдЙ╓Р╧т╓й╓╕╓Ё╓х╓╛╓г╓╜╓ч╓╧. ╟йа╟╓н╔п║╪╔╦╔Г╔С╓н 1542 ╔и╔И╔╓╔п╓о, ╩хмя╡дг╫╓й╨гбГ╓нб╝еы╓Р╣А╓А╓ф╔╒╔ю╔в╔©╓Р╓╫╓нюъдЙ╓к╓╥╓Х╓╕╓х╓╥╓ч╓╥╓©. ╓Ё╓Л╓офцдЙ╓н╔Ф║╪╔╤╓н╔╥╔╧╔ф╔Ю╓г╓олДбЙ╓╛╓╒╓К╩Ж╓╛╓О╓╚╓Й, ╦╫╨ъ╓г╓о╔╚║╪╔м╔К╔Ё╔С╔у╔ё╔╟╔╙╔в╔╥╔Г╔С╓к TUNE_1542 ╓╛╡ц╓╗╓И╓Л╓ф╓╓╓ч╓╧. ╓Ё╓Л╓Р╩хмя╓╧╓К╓х, ╓Ё╓Л╓╛ф╞╓╞╔╥╔╧╔ф╔Ю╓г╓о╔г╔ё╔╧╔╞╓╛б╝╓╞╓й╓Й╓ч╓╧╓╛, ╔г║╪╔©╓н╬вфм╓╛╣╞╓╜╓фб╝╓╞╓о╓й╓И╓й╓╓╔╥╔╧╔ф╔Ю╓Б╓╒╓К╓г╓╥╓Г╓╕ ╔╓╔С╔©║╪╔м╔ц╔х╔╒╔╞╔╩╔╧╓кю╘╦б╓╛╓╒╓ц╓ф╓Б current ╓Рди╓╓╓╚╓╠╓И╓Л╓ч╓╧╓╚? ╓о╓╓, CTM ╔╥╔╧╔ф╔Ю╓Р╩х╓ц╓ф, ╔╫║╪╔╧╔д╔Й║╪а╢бн╓н╔ю╔╕╔С╔М║╪╔и╓Р╧т╓й╓О╓╨╓кди╓╓╓╚╓╠╓К╓Ё╓х╓╛╓г╓╜╓ч╓╧. ╓и╓н╓Х╓╕╓к╓╥╓фгшиш╔у╔║╔╓╔К╓Р 240KB ╓кй╛ЁД╓╥╓ф╓╓╓К╓н╓г╓╧╓╚? хФЁсе╙©╥╓╥╓╓ BSD ╔ы║╪╔╧╓н╔╥╔╧╔ф╔Ю╓г╓о, split ╓кг╓╟у╓н╔п╔╓╔х╤╜Ё╕╓гй╛ЁД╓╧╓К ╔╙╔в╔╥╔Г╔С╓╛╓╒╓Й╓ч╓╧. ╟й╡╪╓о /usr/src/Makefile ╓╚╓И╓ннЦ╓г╓╧. bin-tarball: (cd ${DISTDIR}; \ tar cf - . \ gzip --no-name -9 -c | \ split -b 240640 - \ ${RELEASEDIR}/tarballs/bindist/bin_tgz.) ╩Д╓о╔╚║╪╔м╔К╓кЁхд╔╓Р╧т╓й╓╓╓ч╓╥╓©. ц╞╓каВ╓Л╓п╓╓╓╓╓г╓╧╓╚? FreeBSD ╔о╔С╔и╔ж╔ц╔╞╓н║жFreeBSD ╓ь╓н╧в╦╔║в╓Р╩╡╬х╓╥╓ф╓╞╓ю╓╣╓╓. ╓╒╓й╓©╓н╔╒╔╓╔г╔ё╔╒╓к╢╤╪у╓╥╓ч╓╧! PnP ISA ╔╚║╪╔и╓н╦║╫п╓х╫И╢Э╡╫╓о╓и╓н╓Х╓╕╓к╧т╓й╓╕╓н╓г╓╧╓╚? Frank Durda IV ╩А ╓Х╓Й:
мвею╓о, ╔ш╔╧╔х╓╛г╖╪╠╓╣╓Л╓ф╓╓╓й╓╓╔э║╪╔и╓Рц╣╓╧╩Ч╓к, ╓╧╓ы╓ф╓н PnP ╔э║╪╔и╓╛╠ЧеЗ╓╧╓К╓Ё╓х╓н╓г╓╜╓К╬╞©Т╓н I/O ╔щ║╪╔х╓╛╓╒╓К╓х╓╓╓╕╓Ё╓х╓г╓╧. ╓╫╓Л╓к╓Х╓Й, PnP ╔в╔М║╪╔ж╔К║╪╔а╔С╓╛Ё╚╩о╓╥╓©╓х╓╜, PnP ╔э║╪╔и╓╛б╦╨ъ╓╧╓К╓й╓И, ╓╧╓ы╓ф╓н PnP ╔э║╪╔и╓о╪╚й╛╓н╔Б╔г╔Кхж╧Ф╓Рйж╓╥╓ч╓╧. ╓╫╓н╔щ║╪╔х╓Р I/O read ╓╧╓К╓х╔в╔М║╪╔ж╔К║╪╔а╔С╓олД╓╓╓кбп╓╧╓К╔О╔╓╔╒║╪╔и-OR ╓╣╓Л╓© yes ╓Рфю╓ч╓╧. ╓Ё╓н╬Л╧Г╓о ╬╞╓й╓╞╓х╓Б 1╔с╔ц╔х╓╛ ON ╓к╓й╓Й╓ч╓╧. ╓╫╓╥╓ф, ╔в╔М║╪╔ж╔К║╪╔а╔С╓о╔Б╔г╔К ID(Microsoft/Intel ╓к╓Х╓ц╓фЁД╓ЙеЖ╓ф╓И╓Л╓ф╓╓╓ч╓╧)╓╛ X ╓Х╓Й╬╝╓╣╓╓╔э║╪╔и╓Р ╔╙╔у╔И╔╓╔С ╓к╓╧╓К╓Ё╓х╓╛╓г╓╜╓ч╓╧. ╓Ё╓наЮ╨Н╓Р╧т╓й╓╓, лД╓╓╧Г╓О╓╩╓к╠ЧеЗ╓╥╓ф╓╓╓К╔э║╪╔и╓╛╓ч╓ю ╩д╓ц╓ф╓╓╓К╓╚╓и╓╕╓╚╓Рд╢╓ы╓ч╓╧. ╓Б╓╥ 0 ╓╛йж╓ц╓ф╓╞╓К╓й╓И X ╓Х╓ЙбГ╓╜╓й ID ╓Р╩Щ╓д╔э║╪╔и╓о╓й╓╓╓Ё╓х╓к╓й╓Й╓ч╓╧. ╨ёеы╓о X ╓Х╓Й╓Б╬╝╓╣╓йцм╓Р╩Щ╓д╔э║╪╔и╓к╓д╓╓╓флД╓╓╧Г╓О╓╩╓ч╓╧. ╓Б╓╥╓╒╓К╓н╓г╓╒╓Л╓п, ╔в╔М║╪╔ж╔К║╪╔а╔С╓о╔Б╔г╔Кхж╧Ф╓╛ X ╓Х╓Й╬╝╓╣╓╓╓Ё╓х╓Рцн╓Й╓ч╓╧. ╨ёеы╓о, X-(limit/4) ╓Х╓ЙбГ╓╜╓йцм╓Р╩Щ╓д╔э║╪╔и╓Р╔╙╔у╔И╔╓╔С╓к╓╥╓флД╓╓╧Г╓О╓╩╓Р╥╚╓Ййж╓╥╓ч╓╧. ╓Ё╓н ID ╓нхо╟о╓к╓Х╓К╫Ю╔п╔╓╔й╔Й╔╣║╪╔а╓Р╫╫й╛╥╚╓Ййж╓╧╓Ё╓х╓к╓Х╓Й, ╔в╔М║╪╔ж╔К║╪╔а╔С╓о╔ч╔╥╔С╓кб╦╨ъ╓╧╓К╓╧╓ы╓ф╓н PnP ╔э║╪╔и╓нцм╓Р╨г╫╙е╙╓кфю╓К╓Ё╓х╓╛╓г╓╜╓ч╓╧. ╓╫╓н╥╚╓Ййж╓╥╓н╡С©Т╓о 2^64 ╓Х╓Й╓о╓К╓╚╓к╬╞╓й╓╓╡С©Т╓г╓╧. ID ╓офС╓д╓н 32-bit (╓д╓ч╓Й 64bit) ╔у╔ё║╪╔К╔и + 8 bit ╔а╔╖╔ц╔╞╔╣╔Ю╓╚╓И╓й╓Й╓ч╓╧. ╨г╫И╓н 32 bits ╓о╔ы╔С╔ю╓н╪╠йл╩р╓г╓╧. ╓Ё╓Л╓о╦Ьи╫╓╣╓Л╓ф╓о╓╓╓ч╓╩╓С╓╛, ф╠╟Л╓н╔ы╔С╔ю╓╚╓И╤║╣К╓╣╓Л╓ф╓╓╓К╟ш╓й╓К╔©╔╓╔в╓н╔э║╪╔и╓г╓о╟ш╓й╓К 32-bit ╔ы╔С╔ю ID ╓Р╩Щ╓д╓Ё╓х╓╛╓г╓╜╓К╓Х╓╕╓к╧м╓╗╓И╓Л╓ч╓╧. ю╫б╓╦╣╓РфцдЙ╓╧╓К╓ю╓╠╓н╓©╓А╓к 32-bit ╓о╓╓╓╞╓И╓╚╡А╬Й╓г╓╧. ╡╪╟л╓н 32-bit ╓о╔╥╔Й╔╒╔Кхж╧Ф, ╔╓║╪╔╣╔м╔ц╔х╔╒╔и╔Л╔╧╓й╓и╓н╔э║╪╔и╓РфцдЙ╓╧╓К╓Б╓н╓г╓╧. ╔ы╔С╔ю╓о╬Е╟л 32 bits ╓╛╟ш╓й╓ц╓ф╓╓╓й╓╓╓н╓г╓╒╓Л╓п, ╡╪╟л 32-bit ╓╛ф╠╟Л╓г╓╒╓К 2кГлэ╓н╔э║╪╔и╓Рю╫б╓╓╧╓К╓Ё╓х╓о╓╒╓Й╓ч╓╩╓С. ╓╥╓©╓╛╓ц╓ф, ф╠╓╦╔©╔╓╔в╓нйё©Т╓н╔э║╪╔и╓Р╔ч╔╥╔С╓к╓╓╓Л╓К╓Ё╓х╓╛╓г╓╜, ╓Ё╓н╬Л╧Г╓г╓Б 64-bit а╢бн╓г╓о╔Ф╔к║╪╔╞╓г╓╧. 32-bit ╓н╔у╔ё║╪╔К╔и╓о╓╧╓ы╓ф╓Р 0 ╓к╓╧╓К╓Ё╓х╓о╓г╓╜╓ч╓╩╓С. ╓Ё╓Л╓о╫И╢Э╡╫╓н╔п╔╓╔й╔Й╔╣║╪╔а╓н╢ж╔О╔╓╔╒║╪╔и-OR ╓к╓Х╓ц╓ф 0 ╓г╓о╓й╓╓ ╔с╔ц╔х╓Р╩╡╬х╓╧╓К╓╚╓И╓г╓╧. ╔╥╔╧╔ф╔Ю╓╛╓╧╓ы╓ф╓н╔э║╪╔и╓нм©╓╗╓И╓Л╓© ID ╓Рг╖╪╠╓╧╓К╓х, ╓╫╓Л╓╬╓Л╓н╔э║╪╔и╓кбп╠Ч╓╥╓©╫ХмЩ╓Р╟Л╓д╓╨╓д(ф╠╟Л╓н I/O ╔щ║╪╔х╓Рдл╓╥╓ф)╧т╓й╓╓╓ч╓╧. ╓╫╓╥╓ф, мЬмя╓г╓╜╓КЁД╓Й╧Ч╓ъ╓на╙бР╓й╓и╓н╔э║╪╔и╓╛и╛мв╓х╓╧╓К╔Й╔╫║╪╔╧╓Р╦║╫п╓╥╓ч╓╧. ╓╧╓ы╓ф╓н╔э║╪╔и╓к╓д╓╓╓ф╓Ё╓н╬ПйС╓Р╫╦╓А╓ч╓╧. ╓Ё╓н╬ПйС╓о╔о║╪╔и╔г╔ё╔╧╔╞╬Е╓н ECU ╔у╔║╔╓╔К╓й╓и╓н╬ПйС╓х╓ч╓х╓А╓И╓Л, ╔ч╔╤║╪╔э║╪╔и╓н BIOS ╓к╓Б╥К╧Г╓╣╓Л╓ч╓╧. ╔ч╔╤║╪╔э║╪╔и╬Е╓н╔о║╪╔и╔╕╔╖╔╒╓ь╓н ECU ╓х BIOS PnP ╓н╔╣╔щ║╪╔х╓одл╬О╓оеЩ╧Г╓╣╓Л╓ф╓╓╓ч╓╧╓╛, ╪Чйу╣║╢О╓к╓д╓╓╓ф╓о©©╓н PnP╓г╓╒╓К╓х╓о╓╓╓╗╓ч╓╩╓С. ╓╥╓╚╓╥, BIOS ╓н╬ПйС╓к ECU ╓н╬ПйС╓Р╡ц╓╗╓фд╢╨╨╓╧╓К╓Ё╓х╓г, ╔в╔М║╪╔ж╔К║╪╔а╔С╓о PnP ╔г╔п╔╓╔╧╓╛╨фгшцж╓г╓╜╓й╓╞╓й╓К╓Ё╓х╓РхР╓╠╓К╓Ё╓х╓╛╓г╓╜╓ч╓╧. ╓╫╓Л╓╚╓И, ╨феы PnP ╔г╔п╔╓╔╧╓к╔╒╔╞╔╩╔╧╓╥, I/O, DMA, IRQ, ╔А╔Б╔Й╔ч╔ц╔в╔╒╔и╔Л╔╧╓нюъдЙ╓Р╓╥╓ч╓╧. ╔г╔п╔╓╔╧╓о╓Ё╓н╔╒╔и╔Л╔╧╓к╦╚╓╗╓К╓Х╓╕╓к╓й╓Й, ╪║╓к╨ф╣╞ф╟╓╧╓К╓ч╓г╓Ё╓н╟лцж╓РюЙ╓А╓ч╓╧. ╓╥╓╚╓╥, ╓╒╓й╓©╓нк╬╓Ю╩Ч╓к╟эф╟╓╣╓╩╓К╓Ё╓х╓╛ит╡дг╫╓г╓╒╓К, ╓х╓╓╓ц╓ф╓╓╓К╓О╓╠╓г╓о╓╒╓Й╓ч╓╩╓С. ╟й╬Е╓ноц╓г╓обГ╓╜╓╞ц╠╫Ц╡╫╓Р╓╥╓ф╓╒╓Й╓ч╓╧╓╛, ╢Пкэе╙╓й╧м╓╗йЩ╓офю╓И╓Л╓©╓г╓╥╓Г╓╕. ╔ч╔╓╔╞╔М╔╫╔у╔х╓о, ╔э║╪╔и╓н╔М╔╦╔ц╔╞╓╛бпн╘╓╧╓К I/O ╔╣╔╓╔╞╔К╓г╓о╔г╔Ё║╪╔и╓╥╓ф╓╓╓й╓╓(лУцМ: ╓╙╓╫╓И╓╞ read ╩Ч╓╥╓╚╔г╔Ё║╪╔и╓╣╓Л╓ф╓╓╓╨ write ╩Ч╓о╔щ║╪╔х╓╛╤У╓╓╓ф╓╓╓К╓х╓╓╓╕╟улё╓г╓╥╓Г╓╕), ╔в╔И╔╓╔ч╔Й╔в╔Й╔С╔©╓н╔╧╔ф║╪╔©╔╧╔щ║╪╔х╓н╓╓╓╞╓д╓╚╓Р PnP ╓н╓©╓А╓кюЙм╜╓╥╓ч╓╥╓©. ╩Д╓о╫И╢Э╓н PnP ╓ндС╟ф╔Л╔с╔Е║╪╩Ч╓к IBM ╫Цю╣╓н╔в╔Й╔С╔©╔э║╪╔и╓г╔╧╔ф║╪╔©╔╧╔щ║╪╔х╓н write ╓н╔г╔Ё║╪╔и╓╛╓╣╓Л╓ф╓╓╓К╓х╓╓╓╕╓Ё╓х╓к╣╓╓╛╓д╓╜╓ч╓╥╓©╓╛, MS ╓о tough (╢Х╦г, ит╠©, л╣к║╓й) ╓х╦ю╓ц╓ф╓╓╓ч╓╧. ╓╫╓╥╓ф╔в╔Й╔С╔©╓н╔╧╔ф║╪╔©╔╧╔щ║╪╔х╓ь╔╒╔и╔Л╔╧╓нюъдЙ╓н╓©╓А╓к write ╓Р╧т╓й╓ц╓ф╓╓╓ч╓╧. ╓ч╓©, ╓╫╓н╔╒╔и╔Л╔╧ + 0x800 ╓х read ╓н╓©╓А╓н 3хжлэ╓н I/O ╔щ║╪╔х╓╛ 0x200 ╓╚╓И 0x3ff ╓н╢ж╓н╓и╓Ё╓╚╓кцж╓╚╓Л╓К╓г╓╥╓Г╓╕.
FreeBSD ╓о, б╬╓н╔╒║╪╔╜╔ф╔╞╔а╔Ц╓Р╔╣╔щ║╪╔х╓╥╓й╓╓╓С╓г╓╧╓╚? ╓╓╓╞╓д╓╚╓н╔╟╔К║╪╔в╓н©м║╧╓╛, FreeBSD ╓нб╬╓н╔╒║╪╔╜╔ф╔╞╔а╔Ц╓ь╓н╟э©╒╓к╢ь©╢╓Р╪╗╓╥╓ф╓╙╓Й, FreeBSD/AXP (ALPHA) ╓о╓Ё╓Л╓И╓ню╝╡л╓х╓╥╓ф╓о╓х╓ф╓Бю╝╦Ы╓╥╓©╓Б╓н╓н╟Л╓д╓г╓╧. FreeBSD/AXP ╓о╦╫╨ъ ftp://ftp.FreeBSD.org/pub/FreeBSD/alpha ╓╚╓ИфЧ╪Й╓г╓╜╓ч╓╧. ALPHA ╓ь╓н╟э©╒хг╓╛╦╫╨ъф╟╓╞╣║╪О╓оаЩ╓╗╓д╓д╓╒╓Й, ╓╫╓нцФ╓к╓о AlphaStation, AXPpci, PC164, Miata ╓╫╓╥╓ф Multia ╓х╓╓╓ц╓©╔Б╔г╔К╓╛╢ч╓ч╓Л╓ф╓╓╓ч╓╧. ╦╫╬У╓к╓д╓╓╓ф╓н╬ПйС╓Рфю╓К╓к╓о freebsd-alpha@FreeBSD.org╔А║╪╔Й╔С╔╟╔Й╔╧╔х╓к╩╡╡ц╓╥╓ф╓╞╓ю╓╣╓╓. ╓╫╓нб╬╓к FreeBSD ╓н SPARC ╔╒║╪╔╜╔ф╔╞╔а╔Ц╓ь╓н╟э©╒╓╛╓╒╓Й╓ч╓╧. ╔в╔М╔╦╔╖╔╞╔х╓ь╓н╩╡╡ц╓к╤╫лё╓╛╓╒╓КйЩ╓о freebsd-sparc@FreeBSD.org╔А║╪╔Й╔С╔╟╔Й╔╧╔х ╓к╩╡╡ц╓╥╓ф╓╞╓ю╓╣╓╓. ©й╧тцФ╓н╔в╔И╔ц╔х╔ш║╪╔Ю╓н╔Й╔╧╔х╓к╓Б╓ц╓х╓Б╨г╤Ади╡ц╓╣╓Л╓©╓н╓╛ IA-64 ╓х PowerPC╓г╓╧. ╬э╨ы╓о freebsd-ia64@FreeBSD.org ╓╙╓Х╓с/╓╒╓К╓╓╓о freebsd-ppc@FreeBSD.org╔А║╪╔Й╔С╔╟╔Й╔╧╔х╓к╩╡╡ц╓╥╓ф╓╞╓ю╓╣╓╓. ©╥╓╥╓╓╔╒║╪╔╜╔ф╔╞╔а╔Ц╓к╢ь╓╧╓К╟Лхле╙╓й╣дою╓к╓д╓╓╓ф╓о ©╥╓╥╓╓╔╒║╪╔╜╔ф╔╞╔а╔Ц╓к╢ь╓╧╓К╟Лхле╙╓й╣дою╓к╓д╓╓╓ф╓о freebsd-platforms@FreeBSD.org╔А║╪╔Й╔С╔╟╔Й╔╧╔х ╓ь╩╡╡ц╓╥╓ф╓╞╓ю╓╣╓╓. ╔г╔п╔╓╔╧╔и╔И╔╓╔п╓РЁ╚х╞╓╥╓©╓н╓г, ╔А╔╦╔Ц║╪хж╧Ф╓╛мъ╓╥╓╓╓н╓г╓╧╓╛. ╓Ё╓Л╓о, Ё╚х╞╓╥╓©╔и╔И╔╓╔п╓Р╦ЬЁ╚╓╧╓К╓╚╓и╓╕╓╚╓к╟мб╦╓╥╓ч╓╧. ╦ЬЁ╚╓╧╓К╓н╓г╓╒╓Л╓п, ╔и╔И╔╓╔п╓н╔╫║╪╔╧╔Ё║╪╔и, files.i386 ╓нйя╧╧, ╔Ё╔С╔у╔ё╔╟╔у╔║╔╓╔К╓н╔╣╔С╔в╔К, ╔г╔п╔╓╔╧╓╛╩х╓╕╔╧╔з╔╥╔Ц╔К╔у╔║╔╓╔К╓Р╨Ню╝╓╧╓К MAKEDEV ╓н╔Ё║╪╔и╓Р╩Д╓©╓а╓каВ╓ц╓ф╓╞╓ю╓╣╓╓. ╦ЬЁ╚╓╧╓К╓д╓Б╓Й╓╛╓й╓╓╬Л╧Г, ╔И╔╓╔╩╔С╔╧╓нлДбЙ╓к╓Х╓Й╦ЬЁ╚╓г╓╜╓й╓╓╬Л╧Г╓о, ╔╜╔Ц╔И╔╞╔©╔А╔╦╔Ц║╪хж╧Ф 32 ╓╙╓Х╓с, ╔ж╔М╔ц╔╞╔А╔╦╔Ц║╪хж╧Ф 8 ╓╛╓Ё╓н╓Х╓╕╓йлэе╙╓н╓©╓А╓км╫лС╓╣╓Л╓ф╓╓╓ч╓╧. ╓Ё╓Л╓И╓нхж╧Ф╓Р╩хмя╓╥╓ф╓╞╓ю╓╣╓╓. ╓и╓а╓И╓н╬Л╧Г╓г╓╒╓Л, ╔и╔И╔╓╔п╓к╢ь╓╧╓К╬ПйС╓Р &a.hackers; ╓кн╝╓╥╓фд╨╓╠╓К╓х╫У╓╚╓Й╓ч╓╧. бЕбь╓н╔г╔ё╔Л╔╞╔х╔Йгшцж╔щ╔Й╔╥║╪ ╦╫╨ъ╩х╓О╓Л╓ф╓╓╓К╔г╔ё╔Л╔╞╔х╔Й╓нгшцж╔щ╔Й╔╥║╪╓о, ╩Д╓╛ 1983 г╞╓к╫Я╓╓╓©╓Б╓н╓╚╓Иа╢╓╞йя╧╧╓╣╓Л╓ф╓╓╓ч╓╩╓С. ╩Д╓оеЖ╫И╓нгшцж╔щ╔Й╔╥║╪╓Р, ╔╙╔Й╔╦╔й╔К╓н fast filesystem ╓н╓©╓А╓к╫Я╓╜, ╓ч╓ц╓©╓╞╡ЧдЙ╓╥╓ф╓╓╓ч╓╩╓С. ╓Ё╓н╔щ╔Й╔╥║╪╓о╔╥╔Й╔С╔ю╔╟╔К║╪╔в╓Р╩х╓╓©т╓╞╓╧╓н╓Рки╓╟╓к╓о╓╕╓ч╓╞╓╓╓╜╓ч╓╥╓©╓╛, ╓╙╣╓╓е╓╜╓нйЩ╓Б╓╓╓Кдл╓Й find ╓нф╟╨Н╓к╓оите╛юз╓г╓╧. ╓ш╓х╓С╓и╓н╔у╔║╔╓╔К╔╥╔╧╔ф╔Ю╓нфБмф╓о, ©╪╓╣м╔юХ╦║╨В(ftw ╓х╓Б╦ф╓п╓Л╓ч╓╧)╓к╓Х╓ц╓ф╨Н╓И╓Л╓©╔╒║╪╔╚╔╓╔ж╓╚╓И, цЙ╫п(restore)╓╥╓ф╨Ню╝╓╣╓Л╓ч╓╧. ╓Ё╓н╨щ, ╔г╔ё╔Л╔╞╔х╔Й╓о,╔╥╔Й╔С╔ю╔╟╔К║╪╔в╓к╓ч╓©╓╛╓ц╓фгшцж╓╣╓Л, ╟й╧ъ╓н©╪╓╣м╔юХ╦║╨В╓Р╧т╓╕╓к╓о, ╧м╓╗фю╓К╦б╓Й╨г╟╜╓н╬Убж╓к╓й╓Й╓ч╓╧. ╓Б╓╥╨Ню╝╓╧╓К╔г╔ё╔Л╔╞╔х╔Й╓наМ©Т╓╛╓О╓╚╓ц╓ф╓╓╓Л╓п, ╡Р╥ХйЩк║╓о╓╒╓Й╓ч╓╧. (аМ©Т/╔╥╔Й╔С╔ю╔╟╔К║╪╔в©Т)╦д╓н╔г╔ё╔Л╔╞╔х╔Й╓Р, ╔╥╔Й╔С╔ю╔╟╔К║╪╔в╓╢╓х╓к╓ч╓х╓А╓ф╨Ню╝╓╧╓Л╓пни╓╓╓н╓г╓╧. ╓Б╓а╓М╓С╨ге╛╓й╔г╔ё╔Л╔╞╔х╔Йгшцж╓к╓й╓К╓Х╓╕╓к, аМ©Т╓Рм╫б╛╓╧╓КйЩк║╓Р╧м╓╗╓й╓╠╓Л╓п╓й╓Й╓ч╓╩╓С. ╓╥╓╚╓╥╡╬╓к╔╥╔Й╔С╔ю╔╟╔К║╪╔в╓╒╓©╓Й╓н╔г╔ё╔Л╔╞╔х╔Й©Т╓Р 10 ╓╞╓И╓╓╓н╬╝╓╣╓й©Т╓к╦гдЙ╓╥╓ф╓╥╓ч╓ц╓©╓х╓╥╓ф╓Б, бГиЩ╓й╡Ча╠╓╛к╬╓А╓К╓г╓╥╓Г╓╕. ╓Ё╓н╔щ╔Й╔╥║╪╓Рмя╓╓╓К╓ы╓╜╔Й╔╧╔х╔╒╨Н╤х╓Р, дл╬О╓н╨Н╤х(╓╙╓╫╓И╓╞╢Шб╦╓н╔щ╔Й╔╥║╪╓Р╩хмя╓╥╓©╓ш╓╕╓╛ни╓╓╓г╓╥╓Г╓╕)╓Р╤Хйл╓╧╓К╓к╓о, 10 иц╢ж╓н╢ж╓к╨Ню╝╓╣╓Л╓©╔г╔ё╔Л╔╞╔х╔Й╓Р╨гбГ 10 ╦д╓ч╓г╓ч╓х╓А╓фц╠╟Л╓н╔╥╔Й╔С╔ю╔╟╔К║╪╔в╓к╫Я╓╜╧Ч╓Ю╓х╓╓╓╕╪Й╫Г╓╛╩х╓╗╓К╓г╓╥╓Г╓╕. ╓х╓к╓╚╓╞╩Д╓н╥Кою╓о, ╓╫╓М╓╫╓М╪б╦Ё╓Р╩о╓А╓ф╦╚╓К╩Ч╢Э╓ю╓М╓╕╓х╓╓╓╕╓Ё╓х╓г╓╧. ╔╚║╪╔м╔К╔я╔к╔ц╔╞╓Р╨гбГ╦б╓кмЬмя╓╧╓К ╓Ё╓нюА╓о, freebsd-current ╔А║╪╔Й╔С╔╟╔Й╔╧╔х╓к &a.wpaul; ╩А╓╛еЙ╧ф╓╥╓©╔А║╪╔К╓Р, &a.des; ╩А╓╛╧╩ю╣╓╥, [] фБ╓н╔Ё╔А╔С╔х╓Рди╡ц╓╥╓ф╟Змя╓╥╓©╓Б╓н╓г╓╧. From: Bill Paul <wpaul@skynet.ctr.columbia.edu> Subject: Re: the fs fun never stops To: ben@rosengart.com Date: Sun, 20 Sep 1998 15:22:50 -0400 (EDT) Cc: current@FreeBSD.ORG [<ben@rosengart.com> ╓╛╟й╡╪╓н╔я╔к╔ц╔╞╔А╔ц╔╩║╪╔╦╓РеЙ╧ф╓╥╓ч╓╥╓©.] > Fatal trap 12: page fault while in kernel mode > fault virtual address = 0x40 > fault code = supervisor read, page not present > instruction pointer = 0x8:0xf014a7e5 ^^^^^^^^^^ > stack pointer = 0x10:0xf4ed6f24 > frame pointer = 0x10:0xf4ed6f28 > code segment = base 0x0, limit 0xfffff, type 0x1b > = DPL 0, pres 1, def32 1, gran 1 > processor eflags = interrupt enabled, resume, IOPL = 0 > current process = 80 (mount) > interrupt mask = > trap number = 12 > panic: page fault ╓Ё╓н╓Х╓╕╓й╔А╔ц╔╩║╪╔╦╓╛и╫╪╗╓╣╓Л╓©╬Л╧Г, лДбЙ╓╛╣╞╓╜╓К╬У╤╥╓РЁнг╖╓╥╓ф, ╬ПйС╓РаВ╓К╓ю╓╠╓г╓о╫╫й╛╓г╓о╓╒╓Й╓ч╓╩╓С. ╡╪юЧ╓Р╓д╓╠╓©л©нА╔щ╔╓╔С╔©цм╓о╫емв╓йцм╓г╓╧╓╛, ╩дг╟╓й╓╛╓И╓Ё╓нцм╓о╧╫ю╝╓к╟мб╦╓╥╓ч╓╧. ╓д╓ч╓Й, ╓Ё╓нцм╓о╩х╓ц╓ф╓╓╓К╔╚║╪╔м╔К╓н╔╓╔А║╪╔╦╓к╟мб╦╓╧╓К╓н╓г╓╧. ╓Б╓╥╔╧╔й╔ц╔в╔╥╔Г╔ц╔х╓й╓и╓н GENERIC ╔╚║╪╔м╔К╓Р╩х╓ц╓ф╓╓╓К╓н╓г╓╒╓Л╓п, б╬╓н©м╢ж╓╛лДбЙ╓н╓╒╓К╢ь©Т╓к╓д╓╓╓фди╩Н╓Р╓╧╓К╓Ё╓х╓╛╓г╓╜╓ч╓╧╓╛, ╔╚╔╧╔©╔ч╔╓╔╨╓╣╓Л╓©╔╚║╪╔м╔К╓н╬Л╧Г╓о, ╩х╓ц╓ф╓╓╓Ккэ©м╓к╓╥╓╚лДбЙ╓н╣╞╓Ё╓ц╓©╬Л╫Й╓офцдЙ╓г╓╜╓й╓╓╓н╓г╓╧. ╡©╓Р╓╧╓Л╓пни╓╓╓н╓г╓╥╓Г╓╕? л©нА╔щ╔╓╔С╔©цм╓Р╔А╔Б╓╥╓ч╓╧. 0x8: ╓х╓╓╓╕иТй╛╓о╨ё╡Си╛мв╓╒╓Й╓ч╓╩╓С. и╛мв╓й╓н╓о 0xf0xxxxxx ╓х╓╓╓╕иТй╛╓г╓╧. ╔╥╔╧╔ф╔Ю╓╛╨ф╣╞ф╟╓╥╓©╓И, ╟й╡╪╓наЮ╨Н╓Р╧т╓╓╓ч╓╧. &prompt.user; nm -n /kernel.that.caused.the.panic | grep f0xxxxxx ╓Ё╓Ё╓г, f0xxxxxx ╓ол©нА╔щ╔╓╔С╔©цм╓г╓╧. ╔╚║╪╔м╔К╔╥╔С╔э╔К╓н╔ф║╪╔ж╔К╓о╢ь©Т╓н╔╗╔С╔х╔Й╔щ╔╓╔С╔х╓Р╢ч╓ъ, л©нА╔щ╔╓╔С╔©цм╓о, ╢ь©ТфБиТ╓н╓╒╓Кею╓г╓╒╓Й╨г╫И╓нею╓г╓о╓й╓╓╓©╓А, ╓Ё╓наЮ╨Н╓Р╧т╓ц╓ф╓Б╢╟а╢╓к╟Лцв╓╧╓К╓Б╓н╓╛и╫╪╗╓╣╓Л╓й╓╓╬Л╧Г╓Б╓╒╓Й╓ч╓╧. ╓Ё╓н╬Л╧Г╓о, ╨г╦Е╓н╥Е╓Р╬й╓╓╓ф╓Б╓╕╓╓╓а╓и╓Д╓ц╓ф╓ъ╓ф╓╞╓ю╓╣╓╓. ╓Ё╓н╓Х╓╕╓к╓й╓Й╓ч╓╧. &prompt.user; nm -n /kernel.that.caused.the.panic | grep f0xxxxx ╓Ё╓Л╓г╓Б╟Лцв╓╥╓й╓╓╬Л╧Г╓о, ╥Е╓Р╦╨╓И╓╥╓й╓╛╓И╡©╓И╓╚╓н╫пно╓╛╓╒╓К╓ч╓г╥╚╓Ййж╓╥╓ф╓╞╓ю╓╣╓╓. ╡©╓╚╫пно╓╣╓Л╓©╓И, ╓╫╓Л╓╛╔╚║╪╔м╔К╔я╔к╔ц╔╞╓Р╟З╓╜╣╞╓Ё╓╥╓©╡дг╫ю╜╓н╓╒╓К╢ь©Т╓н╔Й╔╧╔х╓г╓╧. ╓Ё╓Л╓о, лДбЙею╓Р╦╚иу╓╠╓Кю╣Ён╓ййЩк║╓г╓о╓╒╓Й╓ч╓╩╓С╓╛, ╡©╓Б╓й╓╓╓Х╓Й╓ч╓╥╓г╓╧. ╓Ё╓н╓Х╓╕╓й╔я╔к╔ц╔╞╔А╔ц╔╩║╪╔╦╓РеЙ╧ф╓╥╓ф╓╓╓К©м╓о╓Х╓╞╦╚Ёщ╓╠╓ч╓╧╓╛, ╓Ё╓н╓Х╓╕╓к, л©нА╔щ╔╓╔С╔©цм╓Р, ╔╚║╪╔м╔К╔╥╔С╔э╔К╔ф║╪╔ж╔К╓нцФ╓н╢ь©Т╓х╓д╓╜╧Г╓О╓╩╓фд╢╓ы╓ф╓╓╓К©м╓о╓ч╓Л╓г╓╧. ╔я╔к╔ц╔╞╓н╦╤╟Ь╓Рфм╓╜╩ъ╓А╓К╨гни╓нйЩк║╓о, ╔╞╔И╔ц╔╥╔Е╔ю╔С╔в╓Р╓х╓Й, gdb(1) ╓г╔╧╔©╔ц╔╞╔х╔Л║╪╔╧╓Р╧т╓╕╓Ё╓х╓г╓╧. ╓Б╓а╓М╓С -CURRENT ╓г gdb(1) ╓╛╓а╓Ц╓С╓хф╟╓╓╓ф╓╓╓Л╓п╓г╓╧╓╛(╩Д╓оф╟╓╞╓Ё╓х╓Рйщ╬з ╓г╓╜╓ч╓╩╓С. ELF ╡╫╓╣╓Л╓© gdb(1) ╓о╔╚║╪╔м╔К╔╞╔И╔ц╔╥╔Е╔ю╔С╔в╓Рю╣╓╥╓╞╟╥╓╗╓й╓╓╓х╦ю╓ц╓ф╓╓╓К©м╓╛╓╓╓ч╓╥╓©. FreeBSD 3.0 ╓╛╔ы║╪╔©╔ф╔╧╔х╓Р╫╙╓╗╓Ка╟╓кд╢╓ы╓й╓╠╓Л╓п╓╓╓╠╓ч╓╩╓С. ╓╣╓Б╓й╓╓╓х CD ╫п╡ы╦Е╓кбГПЧМ╕╓РгЦ╓╕╓Ё╓х╓к╓й╓Й╓ч╓╧). ╓и╓ц╓а╓к╓╥╓М, ╩Д╓оиАдл╟й╡╪╓н╓Х╓╕╓к╓╥╓ч╓╧. ╔╚║╪╔м╔К╔Ё╔С╔у╔ё╔╟╔у╔║╔╓╔К╓Р╨Н╓Й╓ч╓╧. ╔╚║╪╔м╔К╔г╔п╔ц╔╛╓╛и╛мв╓╫╓╕╓г╓╒╓Л╓п options 'DDB' ╓Р╡ц╓╗╓ф╓Бни╓╓╓г╓╧(╩Д╓о╠й╣в╔К║╪╔в╓╛╣╞╓Ё╓ц╓ф╓╓╓╫╓╕╓й╬Л╧Г╓к, ╔ж╔Л║╪╔╞╔щ╔╓╔С╔х╓РюъдЙ╓╧╓К╓н╓к╩х╓ц╓ф ╓╓╓ч╓╧). config -g KERNELCONFIG ╓х╓╥╓ф╔с╔К╔и╔г╔ё╔Л╔╞╔х╔Й╓РюъдЙ╓╥╓ч╓╧. cd /sys/compile/KERNELCONFIG; make ╓Р╪б╧т╓╥╓ч╓╧. ╔╚║╪╔м╔К╓н╔Ё╔С╔я╔╓╔К╓╛╫╙н╩╓╧╓К╓н╓Рбт╓а╓ч╓╧. make install ╓Р╪б╧т╓╥╓ч╓╧. ╨ф╣╞ф╟╓╥╓ч╓╧. &man.make.1; ╔в╔М╔╩╔╧╓оё╡╓д╓н╔╚║╪╔м╔К, kernel ╓х kernel.debug ╓Р╔с╔К╔и╓╥╓ч╓╧. kernel ╓о /kernel ╓х╓╥╓ф╔╓╔С╔╧╔х║╪╔К╓╣╓Л, kernel.debug ╓о gdb(1) ╓н╔г╔п╔ц╔╟мя╔╥╔С╔э╔К╬ПйС╓Р╪Х╓Й╫п╓╧╓©╓А╓кмЬмя╓╣╓Л╓ч╓╧. Ён╪б╓к╔╞╔И╔ц╔╥╔Е╔ю╔С╔в╓Р╓х╓К╓к╓о, /etc/rc.conf ╓Рйт╫╦╓╥╓ф dumpdev ╓Р╩хмя╓╥╓ф╓╓╓К╔╧╔О╔ц╔в╔я║╪╔ф╔ё╔╥╔Г╔С╓к╩ьдЙ╓╧╓Ки╛мв╓╛╓╒╓Й╓ч╓╧. ╓Ё╓╕╓╧╓К╓х rc(8) ╔╧╔╞╔Й╔в╔х╓╚╓И dumpon(8) ╔Ё╔ч╔С╔и╓╛╪б╧т╓╣╓Л, ╔╞╔И╔ц╔╥╔Е╔ю╔С╔в╣║г╫╓╛м╜╦З╓к╓й╓Й╓ч╓╧. ╪Йф╟╓г dumpon(8) ╔Ё╔ч╔С╔и╓Р╪б╧т╓╥╓ф╓Б╓╚╓ч╓╓╓ч╓╩╓С. ╔я╔к╔ц╔╞╓н╦Е, ╔╞╔И╔ц╔╥╔Е╔ю╔С╔в╓о savecore(8) ╔Ё╔ч╔С╔и╓Р╩хмя╓╥╓ф╪Х╓Й╫п╓╧╓Ё╓х ╓╛╓г╓╜╓ч╓╧. dumpdev ╓╛ /etc/rc.conf ╓гюъдЙ╓╣╓Л╓ф╓╓╓Л╓п, rc(8) ╔╧╔╞╔Й╔в╔х╓╚╓И savecore(8) ╓╛╪╚ф╟е╙╓к╪б╧т╓╣╓Л, ╔╞╔И╔ц╔╥╔Е╔ю╔С╔в╓Р /var/crash ╓кйщб╦╓╥╓ч╓╧. FreeBSD ╓н╔╞╔И╔ц╔╥╔Е╔ю╔С╔в╓н╔╣╔╓╔╨╓о, ╓у╓д╓╕й╙мЩ╔А╔Б╔Й╔╣╔╓╔╨╓хф╠╓╦╓г╓╧. ╓д╓ч╓Й 64MB ╓н╔А╔Б╔Й╓Рюя╓С╓г╓╓╓Л╓п, 64MB ╓н╔╞╔И╔ц╔╥╔Е╔ю╔С╔в╓╛ю╦ю╝╓╣╓Л╓К╓Ё╓х╓к╓й╓Й╓ч╓╧. /var/crash ╓к╫╫й╛╓й╤У╓╜мфнл╓╛╓╒╓К╓Ё╓х╓РЁнг╖╓╥╓ф╓╞╓ю╓╣╓╓. ╪Йф╟╓г savecore(8) ╓Р╪б╧т╓╧╓Л╓п, ╓Б╓ц╓х╤У╓╜мфнл╓н╓╒╓К╔г╔ё╔Л╔╞╔х╔Й╓к╔╞╔И╔ц╔╥╔Е╔ю╔С╔в╓Рйщб╦╓г╓╜╓ч╓╧. options MAXMEM=(foo) ╓х╓╓╓╕╧т╓Р╔╚║╪╔м╔К╔Ё╔С╔у╔ё╔╟╔у╔║╔╓╔К╓кди╡ц╓╧╓К╓Ё╓х╓г, ╔╚║╪╔м╔К╓н╔А╔Б╔Й╩хмянл╓Рю╘╦б╓г╓╜╓ч╓╧. ╓©╓х╓╗╓п 128MB ╓н╔А╔Б╔Й╓╛╓╒╓К╬Л╧Г╓Б, ╔╚║╪╔м╔К╓н╔А╔Б╔Й╩хмянл╓Р 16MB ╓кю╘╦б╓╥, ╔╞╔И╔ц╔╥╔Е╔ю╔С╔в╓н╔╣╔╓╔╨╓Б 128MB ╓г╓о╓й╓╞ 16MB ╓к╓╧╓К╓Ё╓х╓╛╓г╓╜╓ч╓╧. ╔╞╔И╔ц╔╥╔Е╔ю╔С╔в╓Р╪Х╓Й╫п╓╩╓©╓И, ╟й╡╪╓н╓Х╓╕╓к gdb(1) ╓Р╩х╓ц╓ф╔╧╔©╔ц╔╞╔х╔Л║╪╔╧╓Р╓х╓Й╓ч╓╧. &prompt.user; gdb -k /sys/compile/KERNELCONFIG/kernel.debug /var/crash/vmcore.0 (gdb) where и╛мв╓й╬ПйС╓╛ 1 ╡Хлл╓к╪Щ╓ч╓И╓й╓╓╓Ё╓х╓Бб©╓╓╓н╓г, ╓г╓╜╓Л╓п script(1) ╓Р╩х╓ц╓ф╫пно╓Р╣╜о©╓╥╓ч╓╧. strip ╓╥╓ф╓╓╓й╓╓╔╚║╪╔м╔К╔╓╔А║╪╔╦╓Р╩х╓╕╓Ё╓х╓г, а╢╓ф╓н╔г╔п╔ц╔╟╔╥╔С╔э╔К╓╛╩╡╬х╓г╓╜, ╔я╔к╔ц╔╞╓нх╞ю╦╓╥╓©╔╚║╪╔м╔К╓н╔╫║╪╔╧╔Ё║╪╔и╓н╧т╓╛и╫╪╗╓╣╓Л╓ф╓╓╓К╓о╓╨╓г╓╧. дл╬О, ю╣Ён╓й╔╞╔И╔ц╔╥╔Е╓ь╓н╡АдЬ╓Рдиюв╓╧╓К╓к╓о, ╫пно╓Р╨г╦Е╓н╧т╓╚╓И╣уйЩ╦Ч╓кфи╓ч╓й╓╠╓Л╓п╓й╓Й╓ч╓╩╓С. ╓ч╓© gdb(1) ╓Р╩х╓ц╓ф, йя©Т╓Д╧╫б╓бн╓нфБмф╓Ри╫╪╗╓╣╓╩, ╔╞╔И╔ц╔╥╔Е╓╥╓©╩Ч╓н╔╥╔╧╔ф╔Ю╓н╬Убж╓Рд╢╓ы╓И╓Л╓ч╓╧. ╓Б╓╥╓╒╓й╓©╓╛╔г╔п╔ц╔╟╤╦╓г, ф╠╩Ч╓кйл╓н╔Ё╔С╔т╔Е║╪╔©╓РмЬмя╓г╓╜╓К╢д╤╜╓к╓╒╓Л╓п, gdb(1) ╓Р╔Й╔Б║╪╔х╔г╔п╔ц╔╟╓к╩х╓╕╓Ё╓х╓Б╓г╓╜╓ч╓╧. ╔Й╔Б║╪╔х╔г╔п╔ц╔╟╓Р╩х╓╕╓х, ╓╒╓К╔Ё╔С╔т╔Е║╪╔©╬Е╓н gdb(1) ╓Р╩х╓ц╓ф, йл╓н╔Ё╔С╔т╔Е║╪╔©╓н╔╚║╪╔м╔К╓Р╔г╔п╔ц╔╟╓г╓╜╓ч╓╧. ╔ж╔Л║╪╔╞╔щ╔╓╔С╔х╓нюъдЙ, ╔╚║╪╔м╔К╔Ё║╪╔и╓н╔╧╔ф╔ц╔в╪б╧т╓й╓и, ╓у╓д╓╕╓н╔в╔М╔╟╔И╔Ю╓н╔г╔п╔ц╔╟╓хйя╓О╓Й╓ч╓╩╓С. ╔Ё╔С╔т╔Е║╪╔©╓Р 2 бФйб╓ы╓ф╔г╔п╔ц╔╟╓╧╓К╔а╔Ц╔С╔╧╓к╓о╓й╓╚╓й╓╚╥ц╓ч╓Л╓й╓╓╓н╓г, ╩Д╓о╓ч╓ю╔Й╔Б║╪╔х╔г╔п╔ц╔╟╓Р╩Н╓╥╓©╓Ё╓х╓о╓╒╓Й╓ч╓╩╓С. Bill ╓к╓Х╓Кди╣╜ DDB ╓Рм╜╦З╓к╓╥╓ф╓╓╓ф╔╚║╪╔м╔К╓╛╔г╔п╔ц╔╛╓к мН╓а╓©╓И, ddb ╓н╔в╔М╔С╔в╔х╓г "panic" ╓хфЧно╓╧╓Л╓п, ╤╞ю╘е╙╓к╔я╔к╔ц╔╞╓Р╣╞╓Ё╓╥╔╞╔И╔ц╔╥╔Е╔ю╔С╔в╓╣╓╩╓К╓Ё╓х╓╛╓г╓╜╓ч╓╧. ╔я╔к╔ц╔╞╓несцФ╓г, ╨ф╓с╔г╔п╔ц╔╛╓кмН╓а╓К╓╚╓Б╓╥╓Л╓ч╓╩╓С╓╛, "continue" ╓хфЧно╓╧╓Л╓п, ╔╞╔И╔ц╔╥╔Е╔ю╔С╔в╓Р╨г╦Е╓ч╓г╪б╧т╓╣╓╩╓И╓Л╓ч╓╧. dlsym() ╓╛ ELF ╪б╧т╥а╪╟╓г╓оф╟╨Н╓╥╓й╓╞╓й╓Й╓ч╓╧! ELF ╓н╔д║╪╔КнЮ╓о, ╔г╔у╔╘╔К╔х╓г╓о╪б╧т╥а╪╟╓нцФ╓кдЙ╣а╓╣╓Л╓ф╓╓╓К╔╥╔С╔э╔К╓Р, ╔ю╔╓╔й╔ъ╔ц╔╞╔Й╔С╔╚╓╚╓И╦╚╓╗╓К╓Х╓╕╓к╓о╓╥╓ч╓╩╓С. ╓Ё╓н╓©╓А, dlopen(NULL, flags) ╓Р╦ф╓с╫п╓╥╓ффю╓И╓Л╓©╔о╔С╔и╔К╓кбп╓╥╓ф, dlsym() ╓гц╣╨В╓Р╧т╓ц╓ф╓Б, ╓Ё╓╕╓╓╓ц╓©╔╥╔С╔э╔К╓Р╦╚╓д╓╠╓И╓Л╓ч╓╩╓С. ╓Б╓╥, ╓╒╓й╓©╓╛╔в╔М╔╩╔╧╓нцФ©╢╓к╓╒╓©╓К╪б╧т╥а╪╟╓нцФ╓к╓╒╓К╔╥╔С╔э╔К╓Рц╣╨В╓╥╓©╓╠╓Л╓п, ELF ╔Й╔С╔╚ ╓к ╔╙╔в╔╥╔Г╔С╓Риу╓╠╓ф╪б╧т╥а╪╟╓Р╔Й╔С╔╞╓╧╓Ки╛мв╓╛╓╒╓Й╓ч╓╧. ╔╚║╪╔м╔К╔╒╔и╔Л╔╧╤У╢ж╓РбГ╓╜╓╞╓╥╓©╓Й, ╬╝╓╣╓╞╓╧╓К╓к╓о╓и╓╕╓╥╓©╓Ини╓╓╓н╓г╓╧╓╚? ╔╚║╪╔м╔К╔╒╔и╔Л╔╧╤У╢ж╓о, FreeBSD 3.X ╬Е╓г 256MB, FreeBSD 4.X ╬Е╓г 1GB ╓╛╔г╔у╔╘╔К╔х╓к╓й╓ц╓ф╓╓╓ч╓╧. иИ╡ы╓н╧Б╓╓╔м╔ц╔х╔О║╪╔╞╔╣║╪╔п(нЦ╓╗╓пбГ╓╜╓й FTP, HTTP ╔╣║╪╔п)╓Р╠©мя╓╧╓К╬Л╧Г╓о, 256MB ╓г╓об╜╓Й╓й╓╓╓Ё╓х╓к╣╓иу╓╞╓╚╓Бцн╓Л╓ч╓╩╓С. ╓г╓о, ╔╒╔и╔Л╔╧╤У╢ж╓РбГ╓╜╓╞╓╧╓К╓к╓о╓и╓╕╓╥╓©╓Ини╓╓╓н╓г╓╥╓Г╓╕╓╚? ╓╫╓Л╓к╓о, фС╓д╓нцйЁ╛╓Рф╖╓ъ╓ч╓╧. ╓ч╓╨, ╓Х╓ЙбГ╓╜╓╓╔╒╔и╔Л╔╧╤У╢ж╓РЁД╓ЙеЖ╓ф╓К╓Ё╓х╓Р╔╚║╪╔м╔К╓кцн╓И╓╩╓Ки╛мв╓╛╓╒╓Й╓ч╓╧. ╪║╓к, ╔╚║╪╔м╔К╓о╔╒╔и╔Л╔╧╤У╢ж╓нюХф╛╓к╔М║╪╔и╓╣╓Л╓К╓©╓А, ╔╒╔и╔Л╔╧╓нюХф╛╓╛е╥╟Ф(лУцМ:╔╚║╪╔м╔К╔╒╔и╔Л╔╧╤У╢ж╓н╨г╡╪ц╪╔╒╔и╔Л╔╧╓н╓Ё╓х)╓х ╓ж╓д╓╚╓К╓Ё╓х╓н╓й╓╓╓Х╓╕╓к, ╔М║╪╔и╔╒╔и╔Л╔╧╓Р╨ё╓ч╓г╓Х╓ЙдЦ╟л╓кюъдЙ╓╧╓Ки╛мв╓╛╓╒╓Й╓ч╓╧. ╨г╫И╓нцйЁ╛╓о, src/sys/i386/include/pmap.h ╓к╓╒╓К NKPDE ╓нцм╓РаЩ╡ц╓╣╓╩╓К╓Ё╓х╓г╧т╓й╓╓╓ч╓╧. ╓Ё╓Ё╓к 1GB ╓н╔╒╔и╔Л╔╧╤У╢ж╓к╓╧╓К╓©╓А╓к, ╓и╓н╓Х╓╕╓к╓╧╓Л╓пни╓╓╓╚╓Р╪╗╓╥╓ч╓╧. #ifndef NKPDE #ifdef SMP #define NKPDE 254 /* addressable number of page tables/pde's */ #else #define NKPDE 255 /* addressable number of page tables/pde's */ #endif /* SMP */ #endif ю╣Ён╓й NKPDE ╓нцм╓Р╥в╩╩╓╧╓К╓к╓о, к╬╓ъ╓н╔╒╔и╔Л╔╧╤У╢ж╓нбГ╓╜╓╣(╔А╔╛╔п╔╓╔хц╠╟л)╓Р 4 ╓гЁД╓ц╓ф, ╓╫╓Л╓╚╓Иц╠╟Л╔в╔М╔╩╔ц╔╣(UP)╓й╓И 1, SMP ╓й╓И 2 ╓Р╟З╓╜╩╩╓╥╓ф╓╞╓ю╓╣╓╓. ╪║╓нцйЁ╛╓Р╧т╓й╓╕╓к╓о, ╔М║╪╔и╔╒╔и╔Л╔╧╓Рю╣Ён╓к╥в╩╩╓╧╓К╓Ё╓х╓╛и╛мв╓г╓╧. ц╠╫Ц╓к, ╔╒╔и╔Л╔╧╤У╢ж╓нбГ╓╜╓╣(╔п╔╓╔хц╠╟л)╓Р 0x100100000 ╓╚╓И╟З╓╜╩╩╓╥╓ф╓╞╓ю╓╣╓╓. 1GB ╔╒╔и╔Л╔╧╤У╢ж╓н╬Л╧Г, ╓╫╓н╥К╡л╓о 0xc0100000 ╓к╓й╓Й╓ч╓╧. ╓╫╓╥╓ф, src/sys/i386/conf/Makefile.i386 ╓к╓╒╓К LOAD_ADDRESS ╓к, ╨ё╥в╩╩╓╥╓©цм╓РфЧ╓Л╓ч╓╧. ╓ч╓©, ╪║╓н╓Х╓╕╓к src/sys/i386/conf/kernel.script ╓н╔╩╔╞╔╥╔Г╔С╓н╩о╓А╓нйЩ╓к╓╒╓К╔М╔╠║╪╔╥╔Г╔С╔╚╔╕╔С╔©╓к╓Бф╠╓╦цм╓РфЧ╓Л╓ф╓╞╓ю╓╣╓╓. OUTPUT_FORMAT("elf32-i386", "elf32-i386", "elf32-i386") OUTPUT_ARCH(i386) ENTRY(btext) SEARCH_DIR(/usr/lib); SEARCH_DIR(/usr/obj/elf/home/src/tmp/usr/i386-unknown-freebsdelf/lib); SECTIONS { /* Read-only sections, merged into text segment: */ . = 0xc0100000 + SIZEOF_HEADERS; .interp : { *(.interp) } ╓╫╓Л╓╛╢╟н╩╓╥╓©╓И, config ╓╥д╬╓╥╓ф╔╚║╪╔м╔К╓Р╨ф╧╫цш╓╥╓ф╓╞╓ю╓╣╓╓. ╓╙╓╫╓И╓╞, ps(1), top(1) ╓й╓и╓кит╤Я╧Г╓╛╫п╓К╓г╓╥╓Г╓╕. ╓╫╓Л╓И╓Рю╣╬О╓к╓╧╓К╓©╓А╓к, make world(╓Б╓╥╓╞╓о, йя╧╧╓╥╓© pmap.h ╓Р /usr/include/vm/ ╓к╔Ё╔т║╪╓╥╓©╦Е╓к, libkvm, ps ╓╙╓Х╓с top ╓Р╪Йф╟╓г╨ф╧╫цш╓╧╓К╓Ё╓х)╓Р╧т╓й╓╕╓ы╓╜╓г╓╧. ╔╚║╪╔м╔К╔╒╔и╔Л╔╧╤У╢ж╓нбГ╓╜╓╣╓о, 4MB ╓нгэ©Т╓г╓╒╓Ки╛мв╓╛╓╒╓Й╓ч╓╧. &a.dg; ╩А╓к╓Х╓КйДб╜ ╔╚║╪╔м╔К╔╒╔и╔Л╔╧╤У╢ж╓о 2 ╓н╬Х©Т╓г╓╒╓Ки╛мв╓╛╓╒╓К╓х╩в╓╓╓ч╓╧╓╛, ╓╫╓Л╓╛Ён╓╚╓й╓Ё╓х╓╚╓и╓╕╓╚╓о╓о╓ц╓╜╓Й╓╥╓ф╓╓╓ч╓╩╓С. юн╓н╣╞ф╟╔Ё║╪╔и╓к╓о, ни╓╞╧Б╟л╔╒╔и╔Л╔╧╔с╔ц╔х╓н╔х╔Й╔ц╔╞╓╛╩х╓О╓Л╓ф╓╓╓©╓©╓А, ╬╞╓й╓╞╓х╓Б 256MB ╓ннЁеы╓г╓╒╓К╓Ё╓х╓╛ашдЙ╓╣╓Л╓ф╓╓╓©╓х╩в╓╓╓ч╓╧.
╪у╪╜ лУ: &a.jp.y-koga;, 1997 г╞ 11 ╥Н 10 фЭ.
FreeBSD Core Team ╓Ё╓н FAQ ╓к╓д╓╓╓флДбЙ╓Р╦╚╓д╓╠╓©╓Й, ╡©╓╚епо©╓╥╓©╓╓╬Л╧Г╓о, &a.faq; ╓ч╓г╔А║╪╔К╓РаВ╓ц╓ф╓╞╓ю╓╣╓╓. ╔у╔ё║╪╔и╔п╔ц╔╞╓╥╓ф╓╞╓Л╓К╓ъ╓й╓╣╓С╓к╓о╢╤╪у╢╤╪у╓й╓н╓г╓╧. ╓ъ╓й╓╣╓С╓к╪Йеа╓ц╓ф╓Б╓И╓О╓й╓╓╓х╓Ё╓н FAQ ╓о╓Х╓╞╓й╓Й╓ч╓╩╓С╓╚╓И!
&a.jkh; ╓©╓ч╓к╣╞╓Ё╓╧ FAQ ╓нйб╓ыбь╓╗╓Д╧╧©╥╓нх╞╨Н &a.dwhite; freebsd-questions ╔А║╪╔Й╔С╔╟╔Й╔╧╔х╓г╓н╣алЁ╓Рд╤╓╗╓©╔╣║╪╔с╔╧ &a.joerg; Usenet (NetNews) ╓г╓н╣алЁ╓Рд╤╓╗╓©╔╣║╪╔с╔╧ &a.wollman; ╔м╔ц╔х╔О║╪╔╞юА╓н╪╧и╝╓хй╦╫Яю╟╥а Jim Lowe ╔ч╔К╔а╔╜╔Ц╔╧╔х╓к╓д╓╓╓ф &a.pds; FreeBSD FAQ ╔©╔╓╔т╔С╔╟╣║ЁёешнЛ FreeBSD ╔а║╪╔Ю итй©╓Р╦ю╓ц╓©╓Й, ╓╕╓А╓╓╓©╓Й, ╬ПйСдС╤║╓╥╓ф╓╞╓Л╓©╓Й ╓╒╓х, х╢╓╠╓ф╓╥╓ч╓ц╓©б╬╓нйЩ║╧╓кбп╓╥╓ф, ╪у╨А╓х©╢╓╚╓И╓н╢╤╪у╓РйШ╓╡╓ч╓╧!
FreeBSD FAQ фЭкэ╦Л╡╫╓к╓д╓╓╓ф FreeBSD фЭкэ╦Л╔и╔╜╔Е╔А╔С╔ф║╪╔╥╔Г╔С╔в╔М╔╦╔╖╔╞╔х╓о, FreeBSD ╢ь╥╦╓нфЭкэ╦Лй╦╫Я╓╛╬╞╓й╓╓╓Ё╓х╓Рц╡╓╓╓©©Т©м╓н FreeBSD ╔Ф║╪╔╤╓ндС╬╖╓к╓Х╓ц╓ф 1996 г╞ 2 ╥Н 26 фЭ╓к╔╧╔©║╪╔х╓╥, FreeBSD фЭкэ╦Л╔о╔С╔и╔ж╔ц╔╞╓н╨Ню╝╓Р╓о╓╦╓А╓х╓╥╓©ЁХф╟╓Р╧т╓й╓ц╓ф╓╜╓ч╓╥╓©. FreeBSD FAQ ╓нфЭкэ╦Л╡╫╓к╓д╓╓╓ф╓о╔╙╔Й╔╦╔й╔К╓нкщлУ╨Н╤х╓ю╓╠╓г╓й╓╞, фЭкэ╧ЯфБ╓к╦гм╜╓ноцбЙ╓к╓д╓╓╓ф╓Б╧╜╓╞╬ПйС╓Р╫╦╓А, фЭкэ╓н FreeBSD ╔Ф║╪╔╤╓к╓х╓ц╓ф©©╓км╜╠в╓й╔и╔╜╔Е╔А╔С╔х╓РдС╤║╓╥╓Х╓╕╓х╧м╓╗╓ф╓╓╓ч╓╧. ╔╙╔Й╔╦╔й╔К╓н FAQ ╓офЭкХ╓к╧╧©╥╓╣╓Л╓ф╓╙╓Й, ╩Д╓©╓а╓Б╓ч╓©╓Ё╓Л╓кди╓╓иу╓╞╓©╓А╓к╨Н╤х╓РбЁ╓╠╓ф╓╓╓╜╓ч╓╧. ╓Б╓а╓М╓С, ©╥╓╥╓╓╔А╔С╔п╓БбГ╢©╥ч╓г╓╧. фЭкэ╦ЛкщлУхг╓к╓д╓╓╓ф, ╡©╓╚╓╙╣╓╓е╓╜╓нею╓╛╓╒╓Й╓ч╓╥╓©╓И, &a.jp.doc-jp; ╓ч╓г╓╢о╒мМ╓╞╓ю╓╣╓╓. ╓ч╓©, ╓Б╓╥╩Д╓©╓а╓н╨Н╤х╓Р╪Йеа╓ц╓ф╓╞╓Л╓К╓й╓И, FreeBSD фЭкэ╦Л╔и╔╜╔Е╔А╔С╔ф║╪╔╥╔Г╔С╔в╔М╔╦╔╖╔╞╔х╓н╔з║╪╔╦╓Р╓╢мВ╓н╬Е, ю╖хС╩╡╡ц╓╥╓ф╓╞╓ю╓╣╓╓. кщлУ╪т (╦ч╫╫╡╩╫Г) &a.jp.arimura; ╟Л╣э н╪ ryo@azusa.shinshu-u.ac.jp &a.jp.iwasaki; &a.jp.yoshiaki; ╓╞╓Й╓Д╓ч kuriyama@opt.phys.waseda.ac.jp &a.jp.y-koga; ╨ёлН ╦╣г╥ motoyuki@jp.FreeBSD.org &a.jp.sugimura; &a.jp.nakai; ╓к╓╥╓╚ nishika@cheerful.com ╡ж╟Ф ╧юг╥ hanai@jp.FreeBSD.org &a.jp.kiroh; &a.jp.shou; й║╢ж ╧╞╧╟ yasuf@big.or.jp &a.jp.mrt; ╩Ё╡╪ ╫ъ junkun@esys.tsukuba.ac.jp ╨╨фи╪т (╦ч╫╫╡╩╫Г) юУ╦╚ ╦╜ asami@FreeBSD.org &a.jp.iwasaki; &a.jp.yoshiaki; бГ╤╤ ╥Р ohashi@mickey.ai.kyutech.ac.jp ╓╞╓Й╓Д╓ч kuriyama@opt.phys.waseda.ac.jp ╨ёлН ╦╣г╥ motoyuki@jp.FreeBSD.org ╨╢гЛ н╢╩й saeki@jp.FreeBSD.org &a.jp.sugimura; ╡ж╟Ф ╧юг╥ hanai@jp.FreeBSD.org имед д╬╪Ы nao@tom-yam.or.jp &a.jp.kiroh; &a.jp.hino; шь╩Ё бН shiyama@intercity.or.jp &a.jp.shou; &a.jp.mrt; ╪Ц╟Ф ╣в╩к earth@hokuto7.or.jp ╨Н╤х╢д╤╜ю╟хВ (╦ч╫╫╡╩╫Г) ╟Л╣э н╪ ryo@azusa.shinshu-u.ac.jp &a.jp.iwasaki; &a.jp.simokawa; нКлз ╫╗╧╛ hideyuki@jp.FreeBSD.org
diff --git a/ja_JP.eucJP/books/handbook/Makefile b/ja_JP.eucJP/books/handbook/Makefile index a7ff0b08fe..af74d2053d 100644 --- a/ja_JP.eucJP/books/handbook/Makefile +++ b/ja_JP.eucJP/books/handbook/Makefile @@ -1,71 +1,70 @@ # -# $FreeBSD: doc/ja_JP.eucJP/books/handbook/Makefile,v 1.46 2000/08/08 07:27:21 hanai Exp $ +# $FreeBSD: doc/ja_JP.eucJP/books/handbook/Makefile,v 1.47 2000/12/24 19:08:49 hrs Exp $ # # Build the FreeBSD Handbook (Japanese). # # Original revision: 1.30 # MAINTAINER=kuriyama@FreeBSD.ORG DOC?= book FORMATS?= html-split INSTALL_COMPRESSED?= gz INSTALL_ONLY_COMPRESSED?= NO_TIDY= YES # # 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+= 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+= 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 # Japanese only SRCS+= jcontrib/chapter.sgml SRCS+= jauthors.ent SYMLINKS= ${DESTDIR} index.html handbook.html DOC_PREFIX?= ${.CURDIR}/../../.. .include "${DOC_PREFIX}/share/mk/doc.project.mk" diff --git a/ja_JP.eucJP/books/handbook/book.sgml b/ja_JP.eucJP/books/handbook/book.sgml index 2b9ba51f23..08678661fa 100644 --- a/ja_JP.eucJP/books/handbook/book.sgml +++ b/ja_JP.eucJP/books/handbook/book.sgml @@ -1,157 +1,157 @@ %man; %bookinfo; %chapters; %authors; %jauthors; - %mailing-lists; + %mailing-lists; %newsgroups; ]> FreeBSD ╔о╔С╔и╔ж╔ц╔╞ FreeBSD ╔и╔╜╔Е╔А╔С╔ф║╪╔╥╔Г╔С╔в╔М╔╦╔╖╔╞╔х 1999 г╞ 2 ╥Н 1995 1996 1997 1998 1999 2000 2001 The FreeBSD Documentation Project &bookinfo.legalnotice; FreeBSD ╓ь╓Х╓╕╓Ё╓╫! ╓Ё╓н╔о╔С╔и╔ж╔ц╔╞╓о FreeBSD Release &rel.current; ╓н╔╓╔С╔╧╔х║╪╔К╓╙╓Х╓с, фЭ╬О╓г╓н╩х╓╓йЩ╓к╓д╓╓╓ф╣╜╫р╓╥╓©╓Б╓н╓г╓╧. кэ╔о╔С╔и╔ж╔ц╔╞╓о╡Чйт╨Н╤хцФ╓г╓╒╓Й, ╓╣╓ч╓╤╓ч╓й©м║╧╓╛йт╫╦╓к╥х╓О╓ц╓ф╓╓╓ч╓╧. б©╓╞╓н╔╩╔╞╔╥╔Г╔С╓о╓ч╓юб╦╨ъ╓╥╓ч╓╩╓С╓╥, ╓╓╓чб╦╨ъ╓╧╓К╔╩╔╞╔╥╔Г╔С╓к╓Б╧╧©╥╨Н╤х╓ни╛мв╓╛╓╒╓К╓Б╓н╓Б╢ч╓ч╓Л╓ф╓╓╓ч╓╧. ╓Б╓╥, ╓Ё╓н╔о╔С╔и╔ж╔ц╔╞╓Рйт╫╦╓╧╓К╔в╔М╔╦╔╖╔╞╔х╓к╤╗но╓╥╓©╓╓╓х╓╙╧м╓╗╓й╓И, &a.doc; ╓ч╓гее╩р╔А║╪╔К╓Р(╠я╦Л╓г)аВ╓ц╓ф╓╞╓ю╓╣╓╓. ╓Ё╓нй╦╫Я╓н╨г©╥╔п║╪╔╦╔Г╔С╓о, ╓╓╓д╓г╓Б фЭкэ╧ЯфБхг FreeBSD World Wide Web ╔╣║╪╔п ╓╙╓Х╓с FreeBSD World Wide Web ╔╣║╪╔п ╓гфЧ╪Й╓╧╓К╓Ё╓х╓╛╓г╓╜╓ч╓╧. ╓ч╓©, б╬╓н╓╣╓ч╓╤╓ч╓йй╦╫Я╥а╪╟, ╟╣╫л╥а╪╟╓н╓Б╓н╓╛ FreeBSD FTP ╔╣║╪╔п╓Д©Тб©╓╞╓н╔ъ╔И║╪╔╣╔╓╔х╓╚╓И╔ю╔╕╔С╔М║╪╔и╓╧╓К╓Ё╓х ╓╛╓г╓╜╓ч╓╧. ╓Ё╓н╔о╔С╔и╔ж╔ц╔╞╓н╫Яюрхг (╠я╦Лхг) ╓о, FreeBSD Mall ╓╚╓И╧ьфЧ╓╧╓К╓Ё╓х╓╛╓г╓╜, ╔о╔С╔и╔ж╔ц╔╞╓н╦║╨В╓Р╧т╓й╓╕╓Ё╓х╓Б╡дг╫╓г╓╧. фЭкэ╦Лхг╓н╨Ню╝╓о FreeBSD фЭкэ╦Л╔и╔╜╔Е╔А╔С╔ф║╪╔╥╔Г╔С╔в╔М╔╦╔╖╔╞╔х(FreeBSD doc-jp)╓╛╓╙╓Ё╓й╓ц╓ф╓╓╓ч╓╧. фЭкэ╦ЛлУ╓╙╓Х╓с, фЭкэ╦Лхг╓н╓ъ╓к╢ь╓╧╓К╓Ё╓х╓о FreeBSD &a.jp.doc-jp; ╓к╓╙╓╓╓ффЭкэ╦Л╓г╣дою╓╣╓Л╓ф╓╓╓ч╓╧. й╦╫Я╓нфЭкэ╦ЛлУ╓к╢ь╓╧╓К╓╙лД╓╓╧Г╓О╓╩╓Д, й╦╫Я╓н╦╤й╦╓к╢ь╓╧╓КлД╓╓╧Г╓О╓╩╓Р╓╥╓©╓╓╓╛╠я╦Л╓╛фю╟у╓г╓й╓╓╓х╓╓╓╕йЩ╓о FreeBSD &a.jp.doc-jp; ╓ч╓г, фЭкэ╦Л╓г╔Ё╔А╔С╔х╓Р╓╙╢С╓╩╓╞╓ю╓╣╓╓. фЁфЧ &chap.introduction; &chap.install; &chap.basics; &chap.ports; ╔╥╔╧╔ф╔Ю╢имЩ &chap.boot; &chap.users; &chap.kernelconfig; &chap.security; &chap.printing; &chap.disks; &chap.backups; &chap.x11; &chap.l10n; &chap.sound; ╔м╔ц╔х╔О║╪╔╞дл©╝ &chap.serialcomms; &chap.ppp-and-slip; &chap.advanced-networking; &chap.mail; ╓╣╓И╓к©й╓С╓юоцбЙ &chap.cutting-edge; &chap.contrib; &chap.policies; &chap.kernelopts; &chap.kerneldebug; &chap.linuxemu; &chap.internals; иуо© &chap.mirrors; &chap.bibliography; &chap.eresources; &chap.staff; &chap.pgpkeys; &chap.hw; &chap.jcontrib; diff --git a/ja_JP.eucJP/books/porters-handbook/book.sgml b/ja_JP.eucJP/books/porters-handbook/book.sgml index 16f0a22e16..b5ea8ca452 100644 --- a/ja_JP.eucJP/books/porters-handbook/book.sgml +++ b/ja_JP.eucJP/books/porters-handbook/book.sgml @@ -1,4755 +1,4755 @@ %man; %bookinfo; %authors; %jauthors; - + %mailing-lists; ]> FreeBSD port ╨Ню╝╪т╓н╓©╓А╓н╔о╔С╔и╔ж╔ц╔╞ FreeBSD ╔и╔╜╔Е╔А╔С╔ф║╪╔╥╔Г╔С╔в╔М╔╦╔╖╔╞╔х 2000 г╞ 4 ╥Н 2000 The FreeBSD Documentation Project ╓Ё╓н╔о╔С╔и╔ж╔ц╔╞╓о FreeBSD port ╨Ню╝╪т (porter) ╦Ч╓╠╓к, ╤Ябне╙╓й port ╓н╨Ню╝йЩк║╓ДцМ╟уею╓й╓и╓Р╓ч╓х╓А╓©╓Б╓н╓г╓╧. фЭкэ╦Лхг╓н╨Ню╝╓о FreeBSD фЭкэ╦Л╔и╔╜╔Е╔А╔С╔ф║╪╔╥╔Г╔С╔в╔М╔╦╔╖╔╞╔х (FreeBSD doc-jp) ╓╛╧т╓й╓ц╓ф╓╓╓ч╓╧. фЭкэ╦ЛлУ╓╙╓Х╓с, фЭкэ╦Лхг╓н╓ъ╓к╢ь╓╧╓К╓Ё╓х╓о FreeBSD &a.jp.doc-jp; ╓к╓╙╓╓╓ффЭкэ╦Л╓г╣дою╓╣╓Л╓ф╓╓╓ч╓╧. й╦╫Я╓нфЭкэ╦ЛлУ╓к╢ь╓╧╓К╓╙лД╓╓╧Г╓О╓╩╓Д, й╦╫Я╓н╦╤й╦╓к╢ь╓╧╓КлД╓╓╧Г╓О╓╩╓Р╓╥╓©╓╓╓╛╠я╦Л╓╛фю╟у╓г╓й╓╓╓х╓╓╓╕йЩ╓о FreeBSD &a.jp.doc-jp; ╓ч╓г, фЭкэ╦Л╓г╔Ё╔А╔С╔х╓Р╓╙╢С╓╩╓╞╓ю╓╣╓╓. &bookinfo.legalnotice; ╪╚й╛╓г port ╓Р╨Ню╝╓╧╓К╓к╓о ╪╚й╛╓г port ╓Р╨Н╓К╓Ё╓х╓Д╢Шб╦╓н port ╓н╧╧©╥╨Н╤х╓к╤╫лё╓╛╓╒╓К╓н╓г╓╧╓╚, ╓╫╓Л╓о╓╧╓п╓И╓╥╓╓! ╓Ё╓Л╓╚╓И, FreeBSD мя╓н port╓Р ╨Н╓К╨щ╓н, ╓╓╓╞╓д╓╚╓н╔╛╔╓╔и╔И╔╓╔С╓РюБлю╓╥╓ч╓╧. ╓Б╓╥, ╢Шб╦╓н port ╓Р╧╧©╥╓╥╓©╓╓╓х╧м╓╗╓ф╓╓╓К╓й╓И, ╓ч╓╨╓Ё╓нй╦╫Я╓Рфи╓ъ, ╪║╓к ╓Рфи╓С╓г╓╞╓ю╓╣╓╓. ╓Ё╓нй╦╫Я╓г╓о╫╫й╛╓к╬э╨ы╓╛╓О╓╚╓И╓й╓╓╬Л╧Г╓к╓о, /usr/ports/Mk/bsd.port.mk ╓Р╩╡╬х╓╥╓ф╓╞╓ю╓╣╓╓. ╓Ё╓н╔у╔║╔╓╔К╓о, port ╓н Makefile ╓╛нЦЁ╟╓й╓╞╔╓╔С╔╞╔К║╪╔и╓╥╓ф╓╓╓К╓Б╓н╓г╓╧. ╓Ё╓Л╓к╓о╨ы╓╚╓╞╔Ё╔А╔С╔х╓╛╫Я╓╚╓Л╓ф╓╓╓ч╓╧╓н╓г, Makefile ╓Рфи╓Ю╓н╓к╓╒╓ч╓Й╢╥╓Л╓ф╓╓╓й╓╓©м╓г╓Б, ╓©╓╞╓╣╓С╓н╬ПйС╓Рфю╓К╓Ё╓х╓╛╓г╓╜╓К╓х╩в╓╓╓ч╓╧. ╓ч╓©, port фцм╜╓н╪алД╓о &a.ports; ╓ь╓╙╢Й╓╓╓╥╓ч╓╧. ╓Ё╓Ё╓г╓о, йя╧╧╡дг╫╓ййя©Т(VAR) ╓н╟ЛиТ╓к╓д╓╓╓ф╓н╓ъ╣╜╫р╓╥╓ф╓╓╓ч╓╧. ╓ш╓х╓С╓и╓нйя©Т╓оbsd.port.mk ╓н╩о╓А╓к╣╜╫р╓╛╓╒╓Й╓ч╓╧. ╓ч╓©, ╓Ё╓н╔у╔║╔╓╔К╓охСи╦╫Ю╓н╔©╔жюъдЙ╓Р╩хмя╓╥╓ф╓╓╓ч╓╧. Emacs ╓Д Vim ╓о╔у╔║╔╓╔К╓н╔М║╪╔и╩Ч╓к╓Ё╓Л╓Рг╖╪╠╓╥╓ч╓╧╓╛, vi ╓х ex ╓о ╔у╔║╔╓╔К╓Р╔М║╪╔и╓╥╓ф╓╚╓И :set tabstop=4 ╓х╔©╔╓╔в╓╧╓К╓Ё╓х╓г, ю╣╓╥╓╓цм╓РюъдЙ╓╧╓К ╓Ё╓х╓╛╓г╓╜╓ч╓╧. 3 й╛╢ж porting ╓Ё╓нюА╓г╓о, ╢йц╠╓й port ╓нйЩк║╓к╓д╓╓╓фюБлю╓╥╓ч╓╧. б©╓╞╓н╬Л╧Г╓Ё╓Л ╓г╓оит╫╫й╛╓г╓╧╓╛, ╓ч╓╒╓╕╓ч╓╞╓╓╓╞╓╚╓и╓╕╓╚╩Н╓╥╓ф╓ъ╓фб╩╓о╓й╓╓╓г╓╥╓Г ╓╕. ╓ч╓╨, ╦╣╓н tar ╔у╔║╔╓╔К╓Р DISTDIR ╓кцж╓╜╓ч╓╧. ╔г╔у╔╘╔К╔х╓о /usr/ports/distfiles ╓г╓╧. ╟й╡╪╓г╓о, ╔╫╔у╔х╔╕╔╖╔╒╓╛╓╫╓н╓ч╓ч╔Ё╔С╔я╔╓╔К╡дг╫╓й╓Ё╓х╓Р╡╬дЙ╓╥╓ф╓╓╓ч╓╧. ╓д╓ч╓Й FreeBSD ╔ч╔╥╔С╓гф╟╓╚╓╧╓©╓А╓к, йя╧╧╓╛╓ч╓ц╓©╓╞и╛мв╓й╓╓╓х╓╓╓╕╟улё╓г╓╧. ╓Б╓╥╡©╓╚йя╧╧╓╛и╛мв╓й╬Л╧Г╓к╓о, ╪║╓нюА╓Б╩╡╬х╓╧╓Ки╛мв╓╛╓╒╓Й╓ч╓╧. <filename>Makefile</filename> ╓н╨Ню╝ ╨г╬╝╦б╓нMakefile ╓о╪║╓н╓Х╓╕╓й╓Б╓н╓г╓╧. # 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> ╓╙╓О╓╚╓Й╓г╓╥╓Г╓╕╓╚. $FreeBSD$╓╛╓╒╓К╧т╓нфБмф╓к╓д╓╓╓ф╓о, ╣╓╓к╓╥╓й╓╓╓г╓╞╓ю╓╣╓╓. ╓Ё╓Л╓о╓Ё╓н╔у╔║╔╓╔К╓╛ ports ╔д╔Й║╪╓к╫Я╓╜╧Ч╓ч╓Л╓К╓х╓╜╓к CVS ╓к╓Х╓ц╓ф╪╚ф╟е╙╓к╫Я╓╜╧Ч╓ч╓Л╓ч╓╧. ╓Б╓ц╓х╬э╓╥╓╓нЦ╓╛╦╚╓©╓╠╓Л╓п, Makefile ╓н╔╣╔С╔в╔К╓нюА╓Р╓╢мВ╓╞╓ю╓╣╓╓. package ╣╜╫р╔у╔║╔╓╔К╓н╨Ню╝ package ╓к╓╧╓К╓╥╓й╓╓╓к╢ь╓О╓И╓╨, ╓и╓н╓Х╓╕╓й port ╓г╓Б╩╟╓д╓н╣╜╫р╔у╔║╔╓╔К╓╛и╛мв╓г╓╧. ╓╫╓Л╓о pkg ╔╣╔ж╔г╔ё╔Л╔╞╔х╔Й╓к╓╒╓К, COMMENT, DESCR, ╓╫╓╥╓ф PLIST╓г╓╧. <filename>COMMENT</filename> ╓Ё╓Л╓к╓о, ╓╫╓н port ╓к╓д╓╓╓ф╓нюБлю╓Р╟Л╧т╓г╫Я╓╜╓ч╓╧. package ╓нл╬а╟, ╔п║╪╔╦╔Г╔Схж╧ФеЫ╓о╢ч╓А╓й╓╓╓г╓╞╓ю╓╣╓╓. ╔Ё╔А╔С╔х╓обГй╦╩З╓г╩о╓А, ╨г╦Е╓н╔т╔Й╔╙╔и╓оиу╓╠╓й╓╓╓г╓╞╓ю╓╣╓╓. ╓©╓х╓╗╓п, ╓Ё╓С╓й╤Я╧Г╓г╓╧. A cat chasing a mouse all over the screen <filename>DESCR</filename> ╓Ё╓Л╓о, ╓╫╓н╔╫╔у╔х╔╕╔╖╔╒╓к╓д╓╓╓ф╓н╬╞╓╥д╧╓╓юБлю╓Р╣╜╫р╓╥╓ч╓╧. ╓╫╓н port ╓╛╡©╓Р╓╧╓К╓н╓╚╓к╓д╓╓╓ф, ©ТцймНдЬеы╓н╢й╥И╓й╡РюБ╓╛╓╒╓Л╓п╫╫й╛╓г╓╧. ╓Ё╓н╔у╔║╔╓╔К╓о, ╔ч╔к╔Е╔╒╔К╓г╓Б╩хмяйЩк║╓Д╔Ё╔С╔я╔╓╔КйЩк║╓к╓д╓╓╓ф╓н╨ы╓╚╓╓юБлю╫Я╓г╓Б╓╒╓Й╓ч╓╩╓С. фц╓к README ╔у╔║╔╓╔К╓Д╔ч╔к╔Е╔╒╔К╔з║╪╔╦╓Р╔Ё╔т║╪╓╥╓Х╓╕╓х╓╥╓ф╓╥╓ф╓╓╓К╬Л╧Г╓к╓оцМ╟у╓╥╓ф╓╞╓ю╓╣╓╓. ╓Ё╓Л╓И╓об©╓╞╓н╬Л╧Г, ╓╫╓н port ╓н╢й╥И╓йюБлю╓к╓й╓ц╓ф╓╓╓й╓╚╓ц╓©╓Й, ╟╥╓╓╓к╓╞╓╓╥а╪╟ (╔ч╔к╔Е╔╒╔К╔з║╪╔╦╓н╬Л╧Г, ╧т╓Рб╥╓╗╓К╓©╓А╓к╤УгР╓╛д╢ю╟╓╣╓Л╓ч╓╧) ╓к╓й╓ц╓ф╓╓╓©╓Й╓╥╓ч╓╧. ╓Б╓╥╓Ё╓н╔╫╔у╔х╔╕╔╖╔╒╓к╦Ь╪╟╓н╔╕╔╖╔ж╔╣╔╓╔х╓╛╓╒╓Л╓п, ╓Ё╓Ё╓к╫Я╓╓╓ф╓╞╓ю╓╣╓╓. ╪╚ф╟╡╫╔д║╪╔К╓╛ю╣╓╥╓╞ф╟╨Н╓╧╓К╓Х╓╕╓к, ╔╕╔╖╔ж╔╣╔╓╔х╓н╓╕╓а╓н╟Л╓д╓к╓оюХф╛╓к WWW: ╓Риу╓╠╡ц╓╗╓ф╓╞╓ю╓╣╓╓. ╓Ё╓н╔у╔║╔╓╔К╓н╨г╦Е╓к╓╒╓й╓©╓нл╬а╟╓Р╫Я╓╞╓Ё╓х╓╛©Д╬╘╓╣╓Л╓ф╓╓╓ч╓╧. ╓©╓х╓╗╓п, ╓Ё╓С╓й╤Я╧Г╓г╓╧. This is a port of oneko, in which a cat chases a poor mouse all over the screen. : (╓╕╓С╓л╓С.) WWW: http://www.oneko.org/ - Satoshi asami@cs.berkeley.edu <filename>PLIST</filename> ╓Ё╓н╔у╔║╔╓╔К╓к╓о, ╓Ё╓н port ╓к╓Х╓ц╓ф╔╓╔С╔╧╔х║╪╔К╓╣╓Л╓К╔у╔║╔╓╔К╓╛нС╣С╓╣╓Л╓ч╓╧. ╓Ё╓н╔у╔║╔╓╔К╓о package ╓Р╨Н╓К╨щ╓н╔Й╔╧╔х╓х╓╥╓ф╩х╓О╓Л╓К╓©╓А, ╔я╔ц╔╜╔С╔╟╔Й╔╧╔х (packing list) ╓х╓Б╦ф╓п╓Л╓ч╓╧. ╓Ё╓Ё╓к╫Я╓╚╓Л╓ф╓╓╓К╔у╔║╔╓╔Кл╬╓о, ╔╓╔С╔╧╔х║╪╔К╩Ч╓н╔в╔Л╔у╔ё╔ц╔╞╔╧ (иАдл╓о /usr/local ╓╚ /usr/X11R6) ╓╚╓И╓наЙбп╔я╔╧╓г╓╧. MANn йя©Т╓Р╩хмя╓╧╓К╬Л╧Г (╩хмя╓╧╓К╓Ё╓х╓╛©Д╬╘╓╣╓Л╓ф╓╓╓ч╓╧) ╓к╓о, ╔ч╔к╔Е╔╒╔К╓о╓Ё╓Ё╓кфЧ╓Л╓й╓╓╓г╓╞╓ю╓╣╓╓. ╢йц╠╓йнЦ╓Р╨э╓╩╓ф╓╙╓╜╓ч╓╥╓Г╓╕. 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/oneko ╔я╔ц╔╜╔С╔╟╔Й╔╧╔х╓н╬э╨ы╓к╓д╓╓╓ф╓о, &man.pkg.create.1; ╓н╔ч╔к╔Е╔╒╔К╔з║╪╔╦╓Р╩╡╬х╓╥╓ф╓╞╓ю╓╣╓╓. ╓╧╓ы╓ф╓н╔у╔║╔╓╔К╓РнС╣С╓╥╓й╓╠╓Л╓п╓й╓Й╓ч╓╩╓С╓╛, ╔г╔ё╔Л╔╞╔х╔Йл╬╓ои╛мв╓╒╓Й╓ч╓╩╓С. ╓ч╓©, ports ╓╛╔╓╔С╔╧╔х║╪╔К╩Ч╓к╔г╔ё╔Л╔╞╔х╔Й╓Р╨Ню╝╓╧╓К╬Л╧Г╓к╓о @dirrm ╓н╧т╓Р╡ц╓╗╓ф, ╓╫╓н port ╓╛╨О╫Э╓╣╓Л╓К╓х╓╜╓к╓╫╓н╔г╔ё╔Л╔╞╔х╔Й╓Б╨О╫Э╓╣╓Л╓К╓Х╓╕╓к╓╥╓ф╓╞╓ю╓╣╓╓. ╓Ё╓н╔у╔║╔╓╔К╓к╓о╔у╔║╔╓╔Кл╬╓Р╔╒╔К╔у╔║╔ы╔ц╔х╫Г╓кйб╓ы╓К╓Х╓╕╓к╓╥╓ч╓╧. ╓╫╓╕╓╧╓К╓Ё╓х╓г port ╓н╔╒╔ц╔в╔╟╔Л║╪╔х╓н╨щ, Ёнг╖╨Н╤х╓╛Ёз╓к╧т╓й╓╗╓К╓Х╓╕╓к╓й╓Й╓ч╓╧. ╔я╔ц╔╜╔С╔╟╔Й╔╧╔х╓Р╪Й╓г╨Н╓К╓н╓о, ╩Ч╓к╓х╓ф╓БбЮ╤Ч╓й╨Н╤х╓к╓й╓Й╓ч╓╧. ╓Б╓╥б©©Т╓н╔у╔║╔╓╔К╓Р╔╓╔С╔╧╔х║╪╔К╓╧╓К port ╓й╓И, ╔я╔ц╔╜╔С╔╟╔Й╔╧╔х╓Р╪╚ф╟ю╦ю╝╓╧╓Л╓п╩Ч╢ж╓нюАлС╓к╓й╓К╓╚╓Бцн╓Л╓ч╓╩╓С. ╔а╔╖╔ц╔╞╔╣╔Ю╔у╔║╔╓╔К╓н╨Ню╝ make makesum ╓хфЧно╓╧╓К╓ю╓╠╓г╓╧. bsd.port.mk ╓к╔К║╪╔К╓╛╓╒╓К╓н╓г, ╪╚ф╟е╙╓к files/md5 ╓╛ю╦ю╝╓╣╓Л╓ч╓╧. port ╓н╔ф╔╧╔х package ╡╫╓Р╢ч╓А╓ф╓╫╓н port ╓╛ю╣╓╥╓╞ф╟╓╞╓Ё╓х╓РЁнг╖╓╥╓ф╓╞╓ю╓╣╓╓. ╟й╡╪╓н╫емв╓й╔щ╔╓╔С╔х╓РЁнг╖╓╥╓ф╓╞╓ю╓╣╓╓. PLIST ╓к╓╫╓н port ╓╛╔╓╔С╔╧╔х║╪╔К╓╥╓й╓╓╓Б╓н╓╛╢ч╓ч╓Л╓ф╓╓╓й╓╓╓Ё╓х. PLIST ╓к╓╫╓н port ╓╛╔╓╔С╔╧╔х║╪╔К╓╧╓К╓╧╓ы╓ф╓н╓Б╓н╓╛╢ч╓ч╓Л╓ф╓╓╓К╓Ё╓х. reinstall ╔©║╪╔╡╔ц╔х╓Р╩х╓╕╓Ё╓х╓к╓Х╓ц╓ф, ╡©еы╓г╓Б╔╓╔С╔╧╔х║╪╔К╓╛╡дг╫╓й╓Ё╓х. deintall ╓н╨щ╓к╦Ейриу╓╠╓Р╓╧╓К╓Ё╓х. ©Д╬╘╓╣╓Л╓К╔ф╔╧╔х╓н╪Й╫Г make install make package make deinstall pkg_add package л╬ make deinstall make reinstall make package package ╓╙╓Х╓с deinstall ╓нцйЁ╛╓г╓и╓С╓й╥ы╧П (warning) ╓Б╫пно╓╣╓Л╓й╓╓╓Ё╓х╓РЁнг╖╓╥╓ф╓╞╓ю╓╣╓╓. ╔╧╔ф╔ц╔в 3 ╓н╦Е, ©╥╓╥╓╓╔г╔ё╔Л╔╞╔х╔Й╓╛╓╧╓ы╓фю╣╓╥╓╞╬ц╣Н╓╣╓Л╓ф╓╓╓К╓╚╓РЁнг╖╓╥╓ф╓╞╓ю╓╣╓╓. ╓ч╓©, ╔╧╔ф╔ц╔в 4 ╓н╦Е╓к╓╫╓н╔╫╔у╔х╔╕╔╖╔╒╓Р╩хмя╓╥╓ф╓ъ╓ф, package ╓╚╓И╔╓╔С╔╧╔х║╪╔К╓╣╓Л╓©╬Л╧Г╓кю╣╓╥╓╞ф╟╨Н╓╧╓К╓╚╓Р Ёнг╖╓╥╓ф╓╞╓ю╓╣╓╓. <command>portlint</command> ╓к╓Х╓К╔а╔╖╔ц╔╞ portlint╓Р╩х╓ц╓ф, ╓╒╓й╓©╓н port ╓╛ FreeBSD ╓н╔╛╔╓╔и╔И╔╓╔С╓к╠Х╓ц╓ф╓╓╓К╓╚╓РЁнг╖╓╥╓ф╓╞╓ю╓╣╓╓. portlint ╔в╔М╔╟╔И╔Ю╓о Ports Collection ╓к╢ч╓ч╓Л╓ф╓╓╓ч╓╧. фц╓к Makefile ╓╛ю╣╓╥╓╓╥а╪╟╓к╓й╓ц╓ф╓╓╓К╓╚, package ╓нл╬а╟╓╛ю╣╓╥╓╓╓╚╓Р╔а╔╖╔ц╔╞╓╧╓К╓н╓кни╓╓╓г╓╥╓Г╓╕. port ╓ндС╫п ╓ч╓╨╓Д╓ц╓фни╓╓╓Ё╓х╓х╓╓╓╠╓й╓╓╓Ё╓х╓к╢ь╓╧╓КюА╓Рфи╓С╓г╓╞╓ю╓╣╓╓. ╓╣╓╒, ╓╒╓й╓©╓н port ╓ккЧб╜╓╥╓©╓И, ╓╒╓х╓о╓╫╓Л╓Р FreeBSD ╓н╔А╔╓╔С╓н ports ╔д╔Й║╪╓кцж╓╜, Ё╖╓к╩х╓ц╓ф╓Б╓И╓╕╓ю╓╠╓г╓╧. ╨ё╓╒╓К work ╔г╔ё╔Л╔╞╔х╔Й╓Д pkgname.tgz ╓х╓╓╓╕ package ╓ои╛мв╓╒╓Й╓ч╓╩╓С╓╚╓И, ╓ч╓╨╓Ё╓Л╓И╓Р╬ц╣Н╓╥╓ф╓╞╓ю╓╣╓╓. ╓╒╓х╓о╔п╔╟╔Л╔щ║╪╔х╓нцФ╓к shar `find port_dir` ╓н╫пно╓Р &man.send-pr.1; ╔в╔М╔╟╔И╔Ю╓Р╩хмя╓╥╓фаВ╓ц╓ф╓╞╓ю╓╣╓╓ (&man.send-pr.1; ╓к╓д╓╓╓ф╓н╬э╨ы╓о╔п╔╟йС╧П╓х╟Лхле╙╓йоюи╬╓Р╩╡╬х╓╥╓ф╓╞╓ю╓╣╓╓). ╓Б╓╥, ╟╣╫л╓╥╓ф╓╓╓й╓╓╬Убж╓г 20KB ╟й╬Е╓╒╓К╓Х╓╕╓й port ╓╒╓Л╓п, ╟╣╫л╓╥╓ф tar ╔у╔║╔╓╔К╓к╓╥╓ф, ╔п╔╟╔Л╔щ║╪╔х╓кфЧ╓Л╓Ка╟╓к &man.uuencode.1; ╓Р╩хмя╓╥╓ф╓╞╓ю╓╣╓╓ (20KB ╟й╡╪╓н╓Б╓н╓Р tar ╔у╔║╔╓╔К╓к╓╥╓фаВ╓ц╓ф╓Бни╓╓╓н╓г╓╧╓╛, ╓╒╓ч╓Й╢©╥ч╓╣╓Л╓ч╓╩╓С). ╔п╔╞╔Л╔щ║╪╔х╓н category ╓о ports, class ╓о change-request ╓Ри╛╓╨╩хмя╓╥╓ф╓╞╓ю╓╣╓╓ (╔Л╔щ║╪╔х╓Р confidential (хКл╘) ╓к╓╥╓й╓╓╓Х╓╕╓к╓╥╓ф╓╞╓ю╓╣╓╓!). ╓ч╓©, port ╡╫╓╥╓©╔в╔М╔╟╔И╔Ю╓нц╩╓╓юБлюй╦╓Р ╔п╔╟╔Л╔щ║╪╔х╓н Description ╔у╔ё║╪╔К╔и╓кди╡ц╓╥╓ф, shar ╓Б╓╥╓╞╓о uuencode ╓╥╓© tar ╔у╔║╔╓╔К╓Р Fix ╔у╔ё║╪╔К╔и╓кди╡ц╓╧╓К╓Х╓╕╓к╓╥╓ф╓╞╓ю╓╣╓╓. ╦Е╪т╓о, ports ╢имЩ╓н╨Н╤х╓Р╔╧╔╞╔Й╔в╔х╓г╧т╓й╓ц╓ф╓╓╓К╔Ё╔ъ╔ц╔©║╪╓н╫У╓╠╓х╓й╓Й╓ч╓╧. ╓Б╓╕╟Леы, ╔╙╔Й╔╦╔й╔К╓н╔╫║╪╔╧╔у╔║╔╓╔К, work ╔г╔ё╔Л╔╞╔х╔Й, make package ╓г╨Ню╝╓╥╓© package ╓╛╢ч╓ч╓Л╓ф╓╓╓й╓╓╓Ё╓х╓РЁнг╖╓╥╓ф╓╞╓ю╓╣╓╓. ╟йа╟, ©╥╓╥╓╓ port ╓Р FreeBSD ╓н ftp ╔╣╔╓╔х (ftp.FreeBSD.org) ╓к╔╒╔ц╔в╔М║╪╔и╓╧╓К╓Х╓╕╓к╓╙╢Й╓╓╓╥╓©╓Ё╓х╓╛╓╒╓Й╓ч╓╧╓╛, ╦╫╨ъ╓Ё╓н╔╣╔╓╔х╓н incoming ╔г╔ё╔Л╔╞╔х╔Й╓офи╓ъ╫п╓╥ит╡д╓к╓й╓ц╓ф╓╙╓Й, ╓╓╓ч╓г╓о©Д╬╘╓╣╓Л╓ф╓╓╓ч╓╩╓С. ╓©╓╞╓╣╓С╓нЁ╓б╠хг╔╫╔у╔х╔╕╔╖╔╒╓╛╓╫╓Ё╓кцж╓╚╓Л╓©╓©╓А╓г╓╧. ╓О╓©╓╥╓©╓а╓о, ╡©╓╚итлю╓йею╓╛╓╒╓ц╓©╓И╓╒╓й╓©╓кЁнг╖╓╥╓©╦Е, ╓╫╓Л╓Р╔д╔Й║╪╓ьцж╓╜╓ч╓╧. ╓╒╓й╓©╓нл╬а╟╓о FreeBSD ╔о╔С╔и╔ж╔ц╔╞╓Д╓╫╓нб╬╓н╔у╔║╔╓╔К╓н Additional FreeBSD contributors ╓н╔Й╔╧╔х╓к╓Б╨э╓К╓г╓╥╓Г╓╕. ╓╕║а╓С, агю╡╓И╓╥╓╓. :-) ╓О╓©╓╥╓©╓а╓╛╨Н╤х╓╥╓Д╓╧╓╓╓Х╓╕╓к, ╬ЦЁ╡йС╧П╓нЁ╣мв (synopsis) ╓ое╛юз╓к╣╜╫р╓╥╓ф╓╞╓ю╓╣╓╓. ╓©╓х╓╗╓п©╥╓╥╓╓ port ╓ндС╫п╓й╓И New port: <port ╓н╢йц╠╓йюБлю>, port ╓н╧╧©╥╓й╓И Update port: <╔╚╔ф╔╢╔Й>/<port л╬> <╧╧©╥фБмф╓н╢йц╠╓йюБлю> ╓х╓╓╓╕╓Х╓╕╓й╓Б╓н╓╛╢©╥ч╓╣╓Л╓ч╓╧. ╓Ё╓╕╓╓╓╕йЩк║╓гйС╧П╓╧╓К╓Х╓╕╓к©╢╓╛╓╠╓ф╓╓╓Л╓п, ц╞╓╚╓╛╓╫╓нйС╧П╓Р╓╧╓╟╓к╦╚╓д╓╠, ╫ХмЩ╓г╓╜╓КЁнн╗╓╛╓╟╓ц╓хбГ╓╜╓╞╓й╓К╓н╓г╓╧. кэЁйе╙╓й port ╩дг╟╓й╓╛╓И╟э©╒╓╛╓╫╓╕╢йц╠╓г╓о╓й╓╞, ф╟╓╚╓╧╓©╓А╓кб©╬╞╓нйя╧╧╓╛и╛мв╓й╬Л╧Г╓Бб©╓╓╓г╓╥╓Г╓╕. ╓Ё╓нюА╓г╓о, Ports Collection ╓нйЩк║ою╓к╓н╓ц╓х╓ц╓ф, ╓╫╓н╓Х╓╕╓й╬Л╧Г╓к╓и╓н╓Х╓╕╓кйя╧╧╓Р╩э╓╥, ф╟╓╞╓Х╓╕╓к╓╥╓©╓Ини╓╓╓╚╓Р╫Г╓Рди╓ц╓фюБлю╓╥╓ч╓╧. port ╧╫цш╓н╬э╨ы ╓ч╓╨, ╓╒╓й╓©╓╛ port ╓н╔г╔ё╔Л╔╞╔х╔Й╓г make ╓хфЧно╓╥╓ф╓╚╓И╣╞╓Ё╓К╟Ло╒╓н╫пмХ╩Ж╓к╓д╓╓╓ф, ╫Г╓Рди╓ц╓фюБлю╓╥╓ч╓╧. ╓Ё╓Ё╓Рфи╓Ю╓х╓╜╓к╓о, б╬╓н╔╕╔ё╔С╔и╔╕╓гф╠╩Ч╓к bsd.port.mk ╓БЁ╚╓╓╓ф╓╙╓╞╓хни╓╓╓╚╓Бцн╓Л╓ч╓╩╓С. ╓╥╓╚╓╥, bsd.port.mk ╓╛╡©╓Р╓╥╓ф╓╓╓К╓н╓╚╢╟а╢╓кмЩ╡Р ╓г╓╜╓й╓╞╓ф╓Б©╢гш╓╧╓Ки╛мв╓о╓╒╓Й╓ч╓╩╓С. ╓╫╓╕б©╓╞╓н©м╓╛мЩ╡Р╓╥╓ф ╓╓╓К╓О╓╠╓г╓о╓й╓╓╓г╓╧╓╚╓И... f(^_^;) ╓ч╓╨, fetch ╓х╓╓╓╕╔©║╪╔╡╔ц╔х╓╛╪б╧т╓╣╓Л╓ч╓╧. ╓Ё╓н fetch ╔©║╪╔╡╔ц╔х╓о╔М║╪╔╚╔К╔г╔ё╔╧╔╞╓н DISTDIR ╓кгшиш╔у╔║╔╓╔К╓╛╓╒╓К╓Х╓╕╓к╓╧╓К╓н╓╛лРлэ╓г╓╧. ╓Б╓╥, fetch ╓╛и╛мв╓й╔у╔║╔╓╔К╓Р DISTDIR ╓к╦╚╓д╓╠╓К╓Ё╓х╓╛╓г╓╜╓й╓╠╓Л╓п, Makefile ╓к╩ьдЙ╓╣╓Л╓ф╓╓╓К URL MASTER_SITES, ╓╫╓╥╓ф FreeBSD ╓н FTP ╔╣╔╓╔х╓г╓╒╓К ftp://ftp.FreeBSD.org/pub/FreeBSD/ports/distfiles/ (╓Ё╓Ё╓к╓о, ╓О╓©╓╥╓©╓а╓╛╪Х╓ц╓ф╓╜╓©╔у╔║╔╓╔К╓Р╔п╔ц╔╞╔╒╔ц╔в╓х╓╥╓фцж╓╓╓ф╓╒╓Й╓ч╓╧) ╓ьц╣╓╥╓к╓╓╓╜╓ч╓╧. ╓╫╓╥╓ф, ╔Ф║╪╔╤╓н╔╣╔╓╔х╓╛╔╓╔С╔©║╪╔м╔ц╔х╓кд╬юэюэбЁ╓╣╓Л╓ф╓╓╓К╬Л╧Г╓к╓о, FETCH ╓Р╩х╓╓╓╫╓нл╬а╟╓н╔у╔║╔╓╔К╓Р╪Х╓ц╓ф╓╜╓ф, DISTDIR ╓кйщб╦╓╥╓ч╓╧. ╪║╓к╪б╧т╓╣╓Л╓К╓н╓о extract ╔©║╪╔╡╔ц╔х╓г╓╧. ╓Ё╓Л╓о DISTDIR ╓к╓╒╓Кгшиш╔у╔║╔╓╔К (иАдл╓о gzip ╓╣╓Л╓© tar ╔у╔║╔╓╔К) ╓Рфи╓ъ, ╔╫║╪╔╧╓Р╟Л╩Че╙╓й╨Н╤х╔г╔ё╔Л╔╞╔х╔Й WRKDIR (╔г╔у╔╘╔К╔х╓о work) ╓ке╦Ё╚╓╥╓ч╓╧. ╪║╓к, patch ╓х╓╓╓╕╔©║╪╔╡╔ц╔х╓╛╪б╧т╓╣╓Л╓ч╓╧. ╓ч╓╨, PATCHFILES ╓кдЙ╣а╓╣╓Л╓ф╓╓╓К, ╓╧╓ы╓ф╓н╔я╔ц╔а╓Ре╛мя╓╥╓ч╓╧. ╪║╓к╓Б╓╥ PATCHDIR (╔г╔у╔╘╔К╔х╓о patches ╔╣╔ж╔г╔ё╔Л╔╞╔х╔Й) ╓к╔я╔ц╔а╓╛б╦╨ъ╓╧╓Л╓п, ╓Ё╓Л╓И╓Р╔╒╔К╔у╔║╔ы╔ц╔х╫Г╓ке╛мя╓╥╓ч╓╧. ╪║╓к╪б╧т╓╣╓Л╓К╔©║╪╔╡╔ц╔х╓о configure ╓г╓╧. ╓Ё╓Л╓к╓о, ╓╓╓М╓╓╓М╓й╬Л╧Г╓╛╓╒╓Й╓ч╓╧. scripts/configure ╓╛б╦╨ъ╓╧╓Л╬Л╧Г, ╓╫╓Л╓╛╪б╧т╓╣╓Л╓ч╓╧. HAS_CONFIGURE ╓╒╓К╓╓╓о GNU_CONFIGURE ╓╛╔╩╔ц╔х╓╣╓Л╓ф╓╓╓Л╓п, WRKSRC/configure ╓╛╪б╧т╓╣╓Л╓ч╓╧. USE_IMAKE ╓╛╔╩╔ц╔х╓╣╓Л╓ф╓╓╓Л╓п, XMKMF (╔г╔у╔╘╔К╔х: xmkmf -a) ╓╛╪б╧т╓╣╓Л╓ч╓╧. ╨г╦Е╓к build ╓х╓╓╓╕╔©║╪╔╡╔ц╔х╓╛╪б╧т╓╣╓Л╓ч╓╧. ╓Ё╓Л╓о╓╫╓н port ╓нюЛмя╓н╨Н╤х╔г╔ё╔Л╔╞╔х╔Й (WRKSRC) ╓к╟эф╟╓╥, ╔Ё╔С╔я╔╓╔К╓╧╓К╓н╓╛лРлэ╓г╓╧. USE_GMAKE ╓╛╔╩╔ц╔х╓╣╓Л╓ф╓╓╓Л╓п GNU make ╓╛╩хмя╓╣╓Л╓ч╓╧. ╓╫╓╕╓г╓й╓╠╓Л╓п FreeBSD ╓н make ╓╛╩хмя╓╣╓Л╓ч╓╧. ╬Е╣╜╓о╔г╔у╔╘╔К╔х╓н╔К║╪╔К╓г╓╧. ╓╣╓И╓к, pre-╡©╓х╓╚ ╓Д post-╡©╓х╓╚ ╓х╓╓╓╕╔©║╪╔╡╔ц╔х╓╛дЙ╣а╓╥╓ф╓╒╓ц╓©╓Й, ╓╫╓н╓Х╓╕╓йл╬а╟╓н╔╧╔╞╔Й╔в╔х╓╛ scripts ╔╣╔ж╔г╔ё╔Л╔╞╔х╔Й╓кцж╓╓╓ф╓╒╓К╬Л╧Г╓к╓о, ╓╫╓Л╓И╓о╔г╔у╔╘╔К╔х╓нф╟╨Н╓на╟╦Е╓к╪б╧т╓╣╓Л╓ч╓╧. ╓©╓х╓╗╓п, post-extract ╓х╓╓╓╕╔©║╪╔╡╔ц╔х╓╛ Makefile ╓гдЙ╣а╓╣╓Л╓ф╓╓╓ф, pre-build ╓х╓╓╓╕╔у╔║╔╓╔К╓╛ scripts ╔╣╔ж╔г╔ё╔Л╔╞╔х╔Й╓к╓╒╓К╓х╓╧╓К╓х, post-extract ╔©║╪╔╡╔ц╔х╓одл╬О╓не╦Ё╚ф╟╨Н╓н╦Е╓к╦ф╓с╫п╓╣╓Л, pre-build ╔╧╔╞╔Й╔в╔х╓о╔г╔у╔╘╔К╔х╓н╔Ё╔С╔я╔╓╔К╓н╔К║╪╔К╓╛╪б╧т╓╣╓Л╓Ка╟╓к╪б╧т╓╣╓Л╓ч╓╧. ╓Б╓╥ф╟╨Н╓╛╢йц╠╓г╓╒╓Л╓п, Makefile ╓н╔©║╪╔╡╔ц╔х╓Р╩хмя╓╧╓К╓Ё╓х╓╛©Д╬╘╓╣╓Л╓ф╓╓╓ч╓╧. ╓й╓╪╓й╓И, ╓╫╓н port ╓╛╡©╓И╓╚╓н╔г╔у╔╘╔К╔х╓г╓о╓й╓╓ф╟╨Н╓Ри╛мв╓х╓╧╓К╓н╓╚╓и╓╕╓╚╓╛╟Л╡у╫Й╓к╓ч╓х╓А╓ф╫Я╓╓╓ф╓╒╓ц╓©йЩ╓╛, б╬╓н©м╓кмЩ╡Р╓╥╓Д╓╧╓╓╓╚╓И╓г╓╧. ╔г╔у╔╘╔К╔х╓нф╟╨Н╓о bsd.port.mk ╓н do-╡©╓х╓╚ ╓х╓╓╓╕╔©║╪╔╡╔ц╔х╓г╧т╓й╓О╓Л╓ч╓╧. ╓©╓х╓╗╓п port ╓Ре╦Ё╚╓╧╓К╔Ё╔ч╔С╔и╓о do-extract ╓х╓╓╓╕╔©║╪╔╡╔ц╔х╓к╓╒╓Й╓ч╓╧. ╓Б╓╥╔г╔у╔╘╔К╔х╓н╔©║╪╔╡╔ц╔х╓киткЧ╓╛╓╒╓Л╓п, do-╡©╓х╓╚ ╓х╓╓╓╕╔©║╪╔╡╔ц╔х╓Р╨фдЙ╣а╓╧╓К╓Ё╓х╓к╓Х╓ц╓ф╓и╓н╓Х╓╕╓к╓г╓Бд╬╓╧╓Ё╓х╓╛╓г╓╜╓ч╓╧. ╔А╔╓╔С╓н╔©║╪╔╡╔ц╔х (╓©╓х╓╗╓п extract ╓Д configure еЫ) ╓о, ╓╧╓ы╓ф╓на╟цйЁ╛╓╛╪б╧т╓╣╓Л╓ф╓╓╓К╓Ё╓х╓РЁнг╖╓╥╓ф╓╚╓И, ╪б╨щ╓н╔©║╪╔╡╔ц╔х╓Д╔╧╔╞╔Й╔в╔х╓Р╦ф╓с╫п╓╧╟йЁ╟╓н╓Ё╓х╓о╧т╓й╓╓╓ч╓╩╓С. bsd.port.mk ╓о╓Ё╓Л╓И╓╛йя╧╧╓╣╓Л╓К╓Ё╓х╓о╡╬дЙ╓╥╓ф╓╓╓ч╓╩╓С╓н╓г, ╓©╓х╓╗╓пе╦Ё╚╓н╩ейЩ╓Рйя╧╧╓╥╓©╓╓╓х╓╜╓к╓о do-extract ╓Рйя╧╧╓╥, юДбп╓к extract ╓к╓о╪Й╓Р©╗╓Л╓й╓╓╓г╓╞╓ю╓╣╓╓. ╓Ё╓Л╓г, ╔Ф║╪╔╤╓╛ make ╓хфЧно╓╥╓©╓х╓╜╓к╡©╓╛╣╞╓Ё╓К╓н╓╚╓╛мЩ╡Р╓г╓╜╓©╓х╩в╓╓╓ч╓╧. ╓г╓о, ╢╟ЮЗ╓й port ╓Р╪Й╫Г╓Рди╓ц╓ф╨Н╓ц╓ф╓ъ╓ч╓╥╓Г╓╕. ╔╙╔Й╔╦╔й╔К╓н╔╫║╪╔╧╓нфЧ╪Й ╔╙╔Й╔╦╔й╔К╓н╔╫║╪╔╧╓Р, (иАдл╓о) ╟╣╫л╓╣╓Л╓© tar ╔у╔║╔╓╔К╓н╥а (foo.tar.gz ╓╒╓К╓╓╓о foo.tar.Z) ╓гфЧ╪Й╓╥╓ф, ╓╫╓Л╓Р DISTDIR ╓к╔Ё╔т║╪╓╥╓ч╓╧. ╡дг╫╓й╓╚╓╝╓Й, ╧╜╓╞╩х╓О╓Л╓ф╓╓╓К╪Гн╝╓н╔╫║╪╔╧╓Р╩хмя╓╧╓К╓Х╓╕╓к╓╥╓ф╓╞╓ю╓╣╓╓. ╔м╔ц╔х╔О║╪╔╞╓ь╓нюэбЁ╓нни╧╔╓й FTP/HTTP ╔╣╔╓╔х╓Р╦╚╓д╓╠╓К╓Ё╓х╓╛╓г╓╜╓й╓╚╓ц╓©╓Й, ф╛╓к╓╞╓К╓Х╓╕╓йхСи╦╫Юе╙╓й╥а╪╟╓╥╓╚╩Щ╓ц╓ф╓╓╓й╓╓╔╣╔╓╔х╓╥╓╚╦╚╓д╓╠╓И╓Л╓й╓╓╓х╓╜╓к╓о, ╪╚й╛╓г╢имЩ╓╧╓КЁн╪б╓й ftp ╓╚ http ╔╣║╪╔п (╓©╓х╓╗╓п, ╓╒╓й╓©╓н╔ш║╪╔Ю╔з║╪╔╦) ╓кцж╓╞╓Ё╓х ╓╛╓г╓╜╓ч╓╧. MASTER_SITES ╓кю╣╓╥╓╞х©╠г╓╣╓Л╓ф╓╓╓К╓Ё╓х╓РЁнг╖╓╥╓ф╓╞╓ю╓╣╓╓. ╓╫╓н╓Х╓╕╓йет╧Г╓нни╓╞╟б©╢╓йцж╓╜╬Л╫Й╓╛╦╚╓д╓╠╓И╓Л╓й╓╓╬Л╧Г (╓╒╓й╓©╓╛ FreeBSD ╓н╔Ё╔ъ╔ц╔©║╪╓г╓╒╓Л╓п freefall ╓н╪╚й╛╓н public_html ╔г╔ё╔Л╔╞╔х╔Й╓кцж╓╠╓ч╓╧), ╓О╓©╓╥╓©╓а╓╛ ftp://ftp.FreeBSD.org/pub/FreeBSD/ports/distfiles/LOCAL_PORTS/ ╓х╓╓╓╕╬Л╫Й╓РдС╤║╓╧╓К╓Ё╓х╓Б╓г╓╜╓ч╓╧. ╓Ё╓н╬Л╫Й╓ойя©Т MASTER_SITE_LOCAL ╓Р╩х╓ц╓ф╩╡╬х╓╥╓ф╓╞╓ю╓╣╓╓. ╓Ё╓Л╓к╓д╓╓╓ф╓нлД╓╓╧Г╓О╓╩╓н╔А║╪╔К╓о &a.ports ╓ь╓╙╢Й╓╓╓╥╓ч╓╧. ╓╫╓н port ╓нгшиш╔у╔║╔╓╔К╓╛фц╓кмЩмЁ╓Б╓й╓╞╓╥╓Г╓ц╓а╓Е╓╕йя╓О╓К╬Л╧Г╓к╓о, гшиш╔у╔║╔╓╔К╓Р╓╒╓й╓©╓н╔ш║╪╔Ю╔з║╪╔╦╓кцж╓╓╓ф MASTER_SITES ╓н╨г╫И╓кфЧ╓Л╓ф╓╞╓ю╓╣╓╓. ╓Ё╓╕╓╧╓К╓Ё╓х╓к╓Х╓ц╓ф, ╔Ф║╪╔╤мЬмя╓╧╓К╬Л╧Г╓к checksum mismatch ╔╗╔И║╪╓╛╣╞╓К╓н╓Рки╓╝, FreeBSD ╓н ftp ╔╣╔╓╔х╓нйщ╪И╓ниИц╢╓Р╦╨╓И╓╧╓Ё╓х╓╛╓г╓╜╓ч╓╧. ╓Б╓╥, ╔ч╔╧╔©║╪╔╣╔╓╔х╓╛╓©╓ц╓©╟Л╓д╓╥╓╚╓й╓╓╬Л╧Г╓к╓о, ╓╒╓й╓©╓н╔╣╔╓╔х╓к╔п╔ц╔╞╔╒╔ц╔в╓Рцж╓╓╓ф MASTER_SITES ╓н 2 хжлэ╓к╡ц╓╗╓ф╓╞╓ю╓╣╓╓. ╓╒╓й╓©╓н port ╓ки╛мв╓й╓╓╓╞╓д╓╚╓нди╡ц╔я╔ц╔а╓╛╔╓╔С╔©║╪╔м╔ц╔х╬Е╓г╪Й╓кфЧ╓К╓н╓й╓И╓п, ╓╫╓Л╓И╓Б╪Х╓ц╓ф╓╜╓ф DISTDIR ╓кцж╓╜╓ч╓╧. ╓╫╓Л╓И╓╛╔А╔╓╔С╓н╔╫║╪╔╧╓н tar ╔у╔║╔╓╔К╓х╓ойл╓н╔╣╔╓╔х╓к╓╒╓ц╓ф╓Б©╢гш╓╧╓Ки╛мв╓о╓╒╓Й╓ч╓╩╓С. ╓╫╓н╓Х╓╕╓й╬У╤╥╓к╓о╓а╓Ц╓С╓хбп╠Ч╓г╓╜╓К╓Х╓╕╓к╓й╓ц╓ф╓╓╓ч╓╧ (╟й╡╪╓н PATCHFILES ╓н╣╜╫р╓Р╓╢мВ╓╞╓ю╓╣╓╓). port ╓н╫╓ю╣ е╛еЖ╓й╔г╔ё╔Л╔╞╔х╔Й╓к tar ╔у╔║╔╓╔К╓Ре╦Ё╚╓╥, FreeBSD ╓н╨г©╥╓н╔п║╪╔╦╔Г╔С╬Е╓гю╣╓╥╓╞╔Ё╔С╔я╔╓╔К╓г╓╜╓К╓©╓А╓ки╛мв╓й╓╒╓И╓Ф╓Кйя╧╧╓Р╩э╓╥╓ч╓╧. ╨г╫╙е╙╓к╫ХмЩ╓о╪╚ф╟╡╫╓╧╓К╓О╓╠╓г╓╧╓╚╓И, ╡©╓Р╧т╓й╓ц╓©╓╚╓РцМ╟у©╪╓╞╣╜о©╓╥╓ф╓╙╓╜╓ч╓╥╓Г╓╕. ╓╒╓й╓©╓н port ╓╛╢╟ю╝╓╥╓©╤г╓к╓о, ╔у╔║╔╓╔К╓н╨О╫Э, ди╡ц, ╫╓ю╣╓Р╢ч╓Ю╓╧╓ы╓ф╓н╫ХмЩ╓╛╪╚ф╟╡╫╓╣╓Л╓©╔╧╔╞╔Й╔в╔х╓Д╔я╔ц╔а╔у╔║╔╓╔К╓г╧т╓й╓╗╓К╓Х╓╕╓к╓й╓ц╓ф╓╓╓й╓╠╓Л╓п╓й╓Й╓ч╓╩╓С. ╓Б╓╥, ╓╒╓й╓©╓н port ╓н╔Ё╔С╔я╔╓╔К╓Д╔╓╔С╔╧╔х║╪╔К╓н╓©╓А╓ки╛мв╓й╪Й╨Н╤х╓╛╓╒╓ч╓Й╓кб©╓╓╓Х╓╕╓й╓И╓п, Larry Wall ╓нлохое╙╓й Configure ╔╧╔╞╔Й╔в╔х╓г╓Б╩╡╧м╓к╓╥╓©╓ш╓╕╓╛ни╓╓╓╚╓Бцн╓Л╓ч╓╩╓С. ©╥╓╥╓╓ Ports Collection ╓о╨г╬╝╓н╔г╔ё╔╧╔╞╔╧╔з║╪╔╧╓г, ╦д║╧╓н port ╓╛╔╗╔С╔и╔Ф║╪╔╤╓к╓г╓╜╓К╓ю╓╠ ╔в╔И╔╟ & ╔в╔Л╔╓ ╓н╬Убж╓г make ╓г╓╜╓К╓Ё╓х╓Рлэ╩ь╓╥╓ф╓╓╓ч╓╧. ╓╒╓й╓©╓╛╨Ню╝╓╥ FreeBSD ╓н ports ╓к╢Сиу╓╣╓Л╓©╔я╔ц╔а╔у╔║╔╓╔К, ╔╧╔╞╔Й╔в╔х╓╙╓Х╓с╓╫╓нб╬╓н╔у╔║╔╓╔К╓о, лю╪╗е╙╓к╣╜╫р╓╣╓Л╓ф╓╓╓К╬Л╧Г╓Р╫Э╓╓╓ф BSD ╓ни╦╫Юе╙╓йцЬ╨Н╦╒╬Р╥О╓к╓Х╓Й╔╚╔п║╪╓╣╓Л╓ф╓╓╓К╓х╦╚╓й╓╣╓Л╓ч╓╧. ╔я╔ц╔а╓не╛мя port ╓н╡АдЬ╓гди╡ц╓╣╓Л╓©╓Ййя╧╧╓╣╓Л╓©╔у╔║╔╓╔К╓о, ╨ф╣╒е╙ diff ╓гйя╧╧ею╓Р╪Х╓Й╫п╓╧╓Ё╓х╓╛╓г╓╜╓ч╓╧. ╔я╔ц╔а╓ое╛еЖ╓к╓ч╓х╓А╓ф patch-xx ╓х╓╓╓╕л╬а╟╓н╔у╔║╔╓╔К╓кфЧ╓Л╓ф╓╞╓ю╓╣╓╓. xx ╓о╔я╔ц╔а╓╛е╛мя╓╣╓Л╓К╫Гхж╓Р╪╗╓╥╓ч╓╧ — ╓Ё╓Л╓И╓о╔╒╔К╔у╔║╔ы╔ц╔х╫Г, ╓д╓ч╓Й aa ╓╛╨г╫И, ╪║╓к ab ╓й╓и╓х╓й╓Й╓ч╓╧. ╓Ё╓Л╓И╓н╔у╔║╔╓╔К╓о PATCHDIR ╓кцж╓╓╓ф╓╙╓╞╓х╪╚ф╟е╙╓ке╛мя╓╣ ╓Л╓К╓Х╓╕╓к╓й╓ц╓ф╓╓╓ч╓╧. ╓╧╓ы╓ф╓н╔я╔ц╔а╓о WRKSRC (дл╬О╓о, port ╓н tar ╔у╔║╔╓╔К╓╛е╦Ё╚╓╣╓Л╓К╓х╓Ё╓М╓г, make ╓╛╪б╧т╓╣╓Л╓К╓х╓Ё╓М╓хф╠╓╦╓г╓╧) ╓╚╓И╓наЙбп╔я╔╧╓к╓й╓Й╓ч╓╧. ╫╓ю╣╓Д╔╒╔ц╔в╔╟╔Л║╪╔и╓Рмф╟в╓к╓╧╓К╓©╓А, 2 ╓д╟й╬Е╓н╔я╔ц╔а╓╛ф╠╓╦╔у╔║╔╓╔К╓Р╫╓ю╣╓╧╓К╓н╓охР╓╠╓ф╓╞╓ю╓╣╓╓ (╓©╓х╓╗╓п, patch-aa ╓х patch-ab ╓╛╤╕╓к WRKSRC/foobar.c ╓Р╫╓ю╣╓╧╓К╓й╓и). ╔Ё╔С╔у╔ё╔╟╔Л║╪╔╥╔Г╔С ╔╚╔╧╔©╔ч╔╓╔╨╓н╓©╓А╓кди╡ц╓╥╓©╓╓╔Ё╔ч╔С╔и╓╛╓╒╓Л╓п, configure ╓х╓╓╓╕л╬а╟╓н╔╧╔╞╔Й╔в╔х╓кфЧ╓Л╓ф scripts ╔╣╔ж╔г╔ё╔Л╔╞╔х╔Й╓кцж╓╜╓ч╓╧. ╬Е╓г╫р╓ы╓©╓Х╓╕╓к, pre-configure ╓╒╓К╓╓╓о post-configure ╓х╓╓╓╕ Makefile ╓н╔©║╪╔╡╔ц╔х, ╔╧╔╞╔Й╔в╔х╓г╫ХмЩ╓╧╓К╓Ё╓х╓Б╓г╓╜╓ч╓╧. ╔Ф║╪╔╤╓╚╓И╓нфЧно╓н╟╥╓╓ ╓Б╓╥, ╓╫╓н port ╓╛╔с╔К╔и, ╔Ё╔С╔у╔ё╔╟╔Л║╪╔╥╔Г╔С, ╔╓╔С╔╧╔х║╪╔К╓н╨щ╓к╔Ф║╪╔╤╓╚╓И╓нфЧно╓Ри╛мв╓х╓╧╓К╓й╓И╓п, Makefile ╓г IS_INTERACTIVE ╓Р╔╩╔ц╔х╓╥╓ф╓╞╓ю╓╣╓╓. ╓Ё╓Л╓к╓Х╓ц╓ф©╪лК, ╪╚ф╟е╙╓к╓©╓╞╓╣╓С╓н port ╓Р╔Ё╔С╔я╔╓╔К╓╧╓К╓Ё╓х╓╛╡дг╫╓к╓й╓Й╓ч╓╧. ╢д╤╜йя©ТBATCH╓╛╔╩╔ц╔х╓╣╓Л╓ф╓╓╓К╓х IS_INTERACTIVE ╓ндЙ╣а╓╣╓Л╓ф╓╓╓К port ╓о╔╧╔╜╔ц╔в╓╣╓Л╓ч╓╧ (╓╫╓╥╓ф, ╔Ф║╪╔╤╓╛INTERACTIVE ╓х╓╓╓╕йя©Т╓Р╔╩╔ц╔х╓╧╓К╓хфЧно╓Ри╛мв╓х╓╧╓К port ╓н╓ъ╔Ё╔С╔я╔╓╔К╓╣╓Л╓ч╓╧). ╓Б╓╥, е╛юз╓й╔г╔у╔╘╔К╔хюъдЙ╓╛╓╒╓К╓н╓г╓╒╓Л╓п, PACKAGE_BUILDING йя©Т╓Р╔а╔╖╔ц╔╞╓╥╓ф,╓╫╓Л╓╛юъдЙ╓╣╓Л╓ф╓╓╓К╬Л╧Г╓к╓о, ╔Ф║╪╔╤фЧно╓н╔╧╔╞╔Й╔в╔х╓Р╣╞ф╟╓╥╓й╓╓╓Х╓╕╓к╓╥╓ф╓╞╓ю╓╣╓╓. ╓Ё╓╕╓╧╓К╓Ё╓х╓к╓Х╓ц╓ф, CDROM ╓Д ftp ╓к цж╓╞ package ╓Р╓О╓©╓╥╓©╓а╓╛╨Ню╝╓╧╓К╓Ё╓х╓╛╓г╓╜╓ч╓╧. <filename>Makefile</filename> ╓н╨Ню╝ Makefile ╓н╨Ню╝╓охС╬О╓кц╠╫Ц╓г╓╧. ╥╚╓Ййж╓╥╓к╓й╓Й╓ч╓╧╓╛, ╩о╓А╓К╓ч╓╗╓к╓╧╓г╓к╓╒╓КнЦ╓Р╦╚╓ф╓ъ╓К╓Ё╓х╓Р╓╙╬╘╓А╓╥╓ч╓╧. ╓ч╓©╓Ё╓н╔о╔С╔и╔ж╔ц╔╞╓к╓о Makefile ╓н╔╣╔С╔в╔К╓╛╓╒╓Й╓ч╓╧. ╓╫╓Л╓Р╦╚╓ф, Makefile фБ╓нйя©Т╓н╫Гхж╓Д╤У╧т╓РфЧ╓Л╓К╓х╓Ё╓М╓й╓и╓н╩╡╧м╓к╓╥╓ф╓╞╓ю╓╣╓╓. ╓╫╓╕╓╧╓К╓хб╬╓н©м║╧╓к╓Бфи╓ъ╓Д╓╧╓╓╓Б╓н╓х╓й╓Й╓ч╓╧. ╓г╓о, Makefile ╓Рюъ╥в╓╧╓К╓х╓╜╓клДбЙ╓х╓й╓К╓х╓Ё╓М╓Р╫Г╓кди╓ц╓ф╦╚╓ф╓ъ╓ч╓╥╓Г╓╕. ╔╙╔Й╔╦╔й╔К╓н╔╫║╪╔╧ ╔╫║╪╔╧╓о DISTDIR╓ки╦╫Юе╙╓й gzip ╓╣╓Л╓© tar ╔у╔║╔╓╔К╓х╓╥╓фцж╓╚╓Л╓ф╓╓╓ч╓╧╓╚? ╓╫╓╕╓г╓╒╓Л╓п, ╪║╓н╔╧╔ф╔ц╔в╓к©й╓А╓ч╓╧. ╓╫╓╕╓г╓й╓╠╓Л╓п, йя©Т EXTRACT_CMD, EXTRACT_BEFORE_ARGS, EXTRACT_AFTER_ARGS, EXTRACT_SUFX, DISTFILES ╓Ре╛еЖ╓к╫Я╓╜╢╧╓╗╓й╓╓╓х╓╓╓╠╓ч╓╩╓С. ╓и╓Л╓ю╓╠йя╧╧╓╥╓й╓╓╓х╓╓╓╠╓й╓╓╓╚╓о, ╓╒╓й╓©╓н port ╓нгшиш╔у╔║╔╓╔К╓╛╓и╓ндЬеыи╦╫Ю╓╚╓И╓╚╓╠╓о╓й╓Л╓ф╓╓╓К╓╚╓к╓Х╓Й╓ч╓╧ (╨г╓Б╓Х╓╞╓╒╓К╬Л╧Г╓о gzip ╓г╓о╓й╓╞иАдл╓н compress ╔Ё╔ч╔С╔и ╓г tar ╔у╔║╔╓╔К╓╛╟╣╫л╓╣╓Л╓ф╓╓╓К╬Л╧Г╓г EXTRACT_SUFX=.tar.Z ╓х╓╧╓К╓ю╓╠╓г╓╧). ╨г╟╜╓н╬Л╧Г╓к╓о, ╪╚й╛╓г do-extract ╔©║╪╔╡╔ц╔х╓Р╨Ню╝╓╥╓ф, ╔г╔у╔╘╔К╔х╓Р╬Е╫Я╓╜╓╧╓К╓Ё╓х╓Б╓г╓╜╓ч╓╧. ╓╥╓╚╓╥, ╓╫╓Ё╓ч╓г╓╧╓Ки╛мв╓╛╓╒╓К╓Ё╓х╓о╓А╓ц╓©╓к╓й╓╓╓г╓╥╓Г╓╕. <makevar>PORTNAME</makevar> ╓╙╓Х╓с <makevar>PORTVERSION</makevar> DISTNAME ╓к╓о port ╓нл╬а╟╓н╢П╢╢иТй╛╓РфЧ╓Л, PORTVERSION ╓к╓о port ╓н╔п║╪╔╦╔Г╔Схж╧Ф╓РфЧ╓Л╓ч╓╧. <makevar>PKGNAMEPREFIX</makevar> ╓╙╓Х╓с <makevar>PKGNAMESUFFIX</makevar> фС╓д╓н╔╙╔в╔╥╔Г╔Сйя©Т PKGNAMEPREFIX ╓╙╓Х╓с PKGNAMESUFFIX ╓о, PORTNAME ╓╙╓Х╓с PORTVERSION ╓х╥К╧Г╓╣╓Л, ${PKGNAMEPREFIX}${PORTNAME}${PKGNAMESUFFIX}-${PORTVERSION} ╓х╓╥╓ф PKGNAME ╓РдЙ╣а╓╥╓ч╓╧. ╓Ё╓н╩Ч, е╛юз╓й package л╬╓Ра╙╓ж╓©╓А╓н╔╛╔╓╔и╔И╔╓╔С╓к╠Х╓ц╓ф╓╓╓К╓╚Ёнг╖╓╥╓ф╓╞╓ю╓╣╓╓. фц╓к, ╔о╔╓╔у╔С (-) ╓Р PORTVERSION ╓к╢ч╓А╓К╓Ё╓х╓о╤ь╩ъ╓╣╓Л╓ф╓╓╓ч╓╧. ╓ч╓©, package л╬╓к language- ╓Б╓╥╓╞╓о compiled.specifics иТй╛╓╛╢ч╓ч╓Л╓К╬Л╧Г, ╓╫╓Л╓╬╓Л PKGNAMEPREFIX ╓х PKGNAMESUFFIX ╓Р╩хмя╓╥╓ч╓╧. ╓Ё╓Л╓И╓Р PORTNAME ╓н╟ЛиТ╓х╓╥╓ф╢ч╓А╓ф╓о╓╓╓╠╓ч╓╩╓С. <makevar>DISTNAME</makevar> DISTNAME ╓ою╫╨Н╪т╓╛╥Х╓А╓©╔╫╔у╔х╔╕╔╖╔╒╓нл╬а╟╓г╓╧. DISTNAME ╓о╔г╔у╔╘╔К╔х╓г ${PORTNAME}-${PORTVERSION} ╓х╓й╓Й╓ч╓╧╓╛, и╛мв╓к╠Ч╓╦╓ф╫Я╓╜╢╧╓╗╓К╓Ё╓х╓╛╓г╓╜╓ч╓╧. DISTNAME ╓офС╓д╓н╬Л╫Й╓г╓╥╓╚╩х╓О╓Л╓ч╓╩╓С. ╟Л╓длэ╓огшиш╔у╔║╔╓╔К╔Й╔╧╔х (DISTFILES) ╓н╔г╔у╔╘╔К╔х ${DISTNAME}${EXTRACT_SUFX} ╓г, фС╓длэ╓огшиш╔у╔║╔╓╔К╓╛е╦Ё╚╓╣╓Л╓К╔╣╔ж╔г╔ё╔Л╔╞╔х╔Й WRKSRC ╓н╔г╔у╔╘╔К╔х work/${DISTNAME} ╓г╓╧. PKGNAMEPREFIX ╓х PKGNAMESUFFIX ╓о DISTNAME ╓к╠ф╤а╓Рм©╓╗╓й╓╓╓Ё╓х╓кцМ╟у╓╥╓ф╓╞╓ю╓╣╓╓. <makevar>CATEGORIES</makevar> ╢╟ю╝╓╥╓© package ╓н╪ббн╓о /usr/ports/packages/All ╓кцж╓╚╓Л╓ч╓╧. ╓ч╓©, ╟Л╓д╓╚╓╫╓Л╟й╬Е╓н /usr/ports/packages ╓н╔╣╔ж╔г╔ё╔Л╔╞╔х╔Й╓╚╓И╓н╔╥╔С╔э╔Й╔ц╔╞╔Й╔С╔╞╓╛╨Н╓И╓Л╓ч╓╧. ╓╫╓Л╓И╓н╔╣╔ж╔г╔ё╔Л╔╞╔х╔Й╓нл╬а╟╓╛ CATEGORIES ╓х╓╓╓╕йя©Т╓к╓Х╓ц╓ф╩ьдЙ╓╣╓Л╓ч╓╧. ╓Ё╓Л╓о, ╔Ф║╪╔╤╓╛ FTP╔╣╔╓╔х╓Д CDROM ╓н package ╓н╩Ё╓Рео╓ЙйБ╓╞╓Ё╓х╓Рмф╟в╓к╓╧╓К╓©╓А╓г╓╧. ╦╫╨ъб╦╨ъ╓╧╓К╔╚╔ф╔╢╔Й╓Р╦╚╓ф, ╓╫╓н port ╓ке╛╓╥╓©╓Б╓Ра╙╓С╓г╓╞╓ю╓╣╓╓. ╓Ё╓н╔Й╔╧╔х╓о, ╓Ё╓н port ╓╛ port ╔д╔Й║╪╓н╓и╓Ё╓к import ╓╣╓Л╓К╓╚╓Б╥ХдЙ╓╥╓ч╓╧. фС╓д╟й╬Е╓н╔╚╔ф╔╢╔Й╓Р╩ьдЙ╓╥╓©╬Л╧Г╓к╓о, ╨г╫И╓н╔╚╔ф╔╢╔Й╓г╩ьдЙ╓╣╓Л╓К╔╣╔ж╔г╔ё╔Л╔╞╔х╔Й╓кцж╓╚╓Л╓К╓Ё╓х╓к╓й╓Й╓ч╓╧. е╛юз╓й╔╚╔ф╔╢╔Й╓Ра╙╓жйЩк║╓к╓д╓╓╓ф╓о, ╔╚╔ф╔╢╔Й╓нюА╓Р╩╡╬х╓╥╓ф╓╞╓ю╓╣╓╓. ╓Б╓╥╓╫╓н port ╓╛кэеЖ╓к╦╫б╦╓╧╓К╓╧╓ы╓ф╓н╓Б╓н╓х╓о╟ш╓й╓ц╓©╓Б╓н╓Ри╛мв╓х╓╥╓ф╓╓╓К╬Л╧Г╓к╓о, ©╥╓╥╓╓╔╚╔ф╔╢╔Йл╬╓Р╨Н╓К╓Ё╓х╓Б╓г╓╜╓ч╓╧. ╓╫╓н╨щ╓к╓о, &a.ports; ╟╦╓ф╓к©╥╓╥╓╓╔╚╔ф╔╢╔Йл╬╓РдС╟ф╓╧╓К╔А║╪╔К╓РаВ╓ц╓ф╓╞╓ю╓╣╓╓. ╔╚╔ф╔╢╔Йл╬╓к╓д╓╓╓ф╓о, ╡©╓н╔╗╔И║╪╔а╔╖╔ц╔╞╓Б╧т╓й╓О╓Л╓ч╓╩╓С. ╔ъ╔╧╔©╔╓╔в╓╛╓╒╓ц╓ф╓Б make package ╓о╡©╓Б╧м╓╗╓╨╓к©╥╓╥╓╓╔г╔ё╔Л╔╞╔х╔Й╓Р╨Н╓ц╓ф╓╥╓ч╓╓╓ч╓╧╓н╓гцМ╟у╓╥╓ф╓╞╓ю╓╣╓╓. <makevar>MASTER_SITES</makevar> ╔╙╔Й╔╦╔й╔К╓нгшиш╔у╔║╔╓╔К╓Р╩ь╓╥╪╗╓╧ FTP ╓ч╓©╓о HTTP ╓н URL ╓н╔г╔ё╔Л╔╞╔х╔ЙиТй╛╓ч╓г╓Р MASTER_SITES ╓к╣╜о©╓╥╓ч╓╧. ╔╧╔И╔ц╔╥╔Е (/) ╓Р╨г╦Е╓к╓д╓╠╓К╓Ё╓х╓Р╓╙к╨╓Л╓й╓╞. гшиш╔у╔║╔╓╔К╓╛╔╥╔╧╔ф╔Ю╬Е╓кб╦╨ъ╓╥╓й╓╓╓х╓╜╓к, make ╔ч╔╞╔М╓о FETCH ╓г╓Ё╓нйя©Т╓к╩ьдЙ╓╣╓Л╓©╔╣╔╓╔х╓╚╓И╪Х╓ц╓ф╓╜╓ч╓╧. йё©Т╓н, ╓г╓╜╓Л╓п╟ш╓й╓КбГн╕╓н╔╣╔╓╔х╓Р╓Ё╓н╔Й╔╧╔х╓кфЧ╓Л╓ф╓╙╓╞╓Ё╓х╓╛©Д╬╘╓╣╓Л╓ф╓╓╓ч╓╧. ╓Ё╓Л╓к╓Х╓ц╓ф, ╧╜╟Х╔м╔ц╔х╔О║╪╔╞╓к╔х╔И╔ж╔К╓╛╓╒╓ц╓©╬Л╧Г╓г╓Бю╝╦Ы╓╧╓К╡дг╫ю╜╓╛╧Б╓╞╓й╓Й╓ч╓╧. ╓О╓©╓╥╓©╓а╓о╓╣╓И╓к, ╪╚ф╟е╙╓к╨г╓Б╤А╓╓╔ч╔╧╔©╔╣╔╓╔х╓Р╦║╫п╓╥╓ф, ╓╫╓Ё╓╚╓И╪Х╓ц╓ф╓╞╓К╔А╔╚╔к╔╨╔Ю╓нфЁфЧ╓Р╥в╡Х╓╥╓ф╓╓╓ч╓╧. ╔╙╔Й╔╦╔й╔К╓н tar ╔у╔║╔╓╔К╓╛, X-contrib, GNU, Perl CPAN, TeX CTAN ╓ч╓©╓о Linux Sunsite ╓й╓и╓нм╜л╬╓й╔╒║╪╔╚╔╓╔ж╓к╓╒╓К╬Л╧Г╓к╓о, MASTER_SITE_XCONTRIB, MASTER_SITE_GNU, MASTER_SITE_PERL_CPAN, MASTER_SITE_TEX_CTAN ╓╙╓Х╓с MASTER_SITE_SUNSITE ╓РмЬмя╓╧╓К╓Ё╓х╓г, ╢йц╠╓к╓Ё╓Л╓И╓н╔╣╔╓╔х╓Р╩ьдЙ╓╧╓К╓Ё╓х╓╛╓г╓╜╓ч╓╧. ╓╒╓х╓о MASTER_SITE_SUBDIR ╓к╔╒║╪╔╚╔╓╔жфБ╓г╓н╔я╔╧╓Р╩ьдЙ╓╧╓К╓ю╓╠╓г╓╧. ╟й╡╪╓кнЦ╓Р╪╗╓╥╓ч╓╧. MASTER_SITES= ${MASTER_SITE_XCONTRIB} MASTER_SITE_SUBDIR= applications ╔Ф║╪╔╤╓о/etc/make.confцФ╓г MASTER_SITE_* йя©Т╓РюъдЙ╓╧╓К╓Ё╓х╓к╓Х╓ц╓ф, ╔г╔у╔╘╔К╔х╓н FTP ╔╣╔╓╔х╓г╓о╓й╓╞╓Ё╓Л╓И╓нм╜л╬╓й╔╒║╪╔╚╔╓╔ж╓н╔ъ╔И║╪╓нцФ╓г, ╧╔╓ъ╓н╓Б╓н╓Р╩хмя╓╧╓К╓Ё╓х╓╛╡дг╫╓г╓╧. <makevar>PATCHFILES</makevar> ╓Б╓╥, ╔╙╔Й╔╦╔й╔К╓нгшиш╔у╔║╔╓╔К╟йЁ╟╓к╓Б FTP ╓╚ HTTP ╓г╪Й╓кфЧ╓К╔я╔ц╔а╓╛и╛мв╓й╬Л╧Г╓к╓о, PATCHFILES ╓к╔у╔║╔╓╔Кл╬╓Р, PATCH_SITES ╓к╔╣╔╓╔х╓х╔г╔ё╔Л╔╞╔х╔Й╓нл╬а╟╓Р MASTER_SITES ╓хф╠мм╓кюъдЙ╓╥╓ф╓╞╓ю╓╣╓╓. ╓╫╓н╔я╔ц╔афБ╓н╔у╔║╔╓╔Кл╬╓╛╔╫║╪╔╧╔д╔Й║╪╓н╟Лхж╬Е╓н╔г╔ё╔Л╔╞╔х╔Й (WKRSRC) ╓╚╓И╓наЙбп╔я╔╧╓к╓й╓ц╓ф╓╓╓й╓╓╬Л╧Г╓к╓о, PATCH_DIST_STRIP╓Р╩ьдЙ╓╥╓ф╓╞╓ю╓╣╓╓. ╓©╓х╓╗╓п, ╔я╔ц╔афБ╓н╔у╔║╔╓╔Кл╬╓к╓╧╓ы╓фм╬╥в╓й foozolix-1.0/ ╓╛╓д╓╓╓ф╓╓╓К╬Л╧Г╓к╓о, PATCH_DIST_STRIP=-p1 ╓х╓╥╓ф╓╞╓ю╓╣╓╓. ╓Ё╓Л╓И╓н╔я╔ц╔а╓о╟╣╫л╓╣╓Л╓ф╓╓╓ф╓БбГ╬Фив╓г╓╧. ╔у╔║╔╓╔Кл╬╓╛ .gz ╓╚ .Z ╓г╫╙╓О╓К╬Л╧Г╓к╓о╪╚ф╟е╙╓киЭ╦╣╓╣╓Л╓К╓Х╓╕╓к╓й╓ц╓ф╓╓╓ч╓╧. ╓Б╓╥╔я╔ц╔а╓╛, й╦╫Я╓й╓и╓╫╓нб╬╓н╔у╔║╔╓╔К╓х╟Л╫О╓к gzip ╓╣╓Л╓© tar╔у╔║╔╓╔К╓ггшиш╓╣╓Л╓ф╓╓╓К╬Л╧Г╓к╓о, ц╠╫Ц╓к PATCHFILES ╓Р╩х╓╕╓Ё╓х╓о╓г╓╜╓ч╓╩╓С. ╓Ё╓н╓Х╓╕╓й╬Л╧Г╓к╓о, ╓Ё╓н╔я╔ц╔а╓н tar ╔у╔║╔╓╔К╓нл╬а╟╓х╬Л╫Й╓Р DISTFILES ╓х MASTER_SITES ╓к╡ц╓╗╓ч╓╧. ╓╫╓Л╓╚╓И, pre-patch ╔©║╪╔╡╔ц╔х╓г╔я╔ц╔а╔Ё╔ч╔С╔и╓РаЖ╓И╓╩╓К╓╚, ╔я╔ц╔а╔у╔║╔╓╔К╓Р PATCHDIR ╔г╔ё╔Л╔╞╔х╔Й╓к patch-xx ╓х╓╓╓╕л╬а╟╓г╔Ё╔т║╪╓╧╓К╓╚╓╥╓ф, ╔я╔ц╔а╓Ре╛мя╓╧╓К╓Х╓╕╓к╓╥╓ч╓╧. иАдл╓н gzip ╓╚ compress ╓╣╓Л╓© tar ╔у╔║╔╓╔К╓г╓╒╓Л╓п, дл╬О╓н╔╫║╪╔╧╔у╔║╔╓╔К╓х╟Л╫О╓к╓╫╓н╩Ч╓ч╓г╓ке╦Ё╚╓╣╓Л╓ф╓╓╓ч╓╧╓н╓г, лю╪╗е╙╓ке╦Ё╚╓╧╓Ки╛мв╓о╓╒╓Й╓ч╓╩╓С. ╓Б╓╥, ╦Е╪т╓нйЩк║╓Р╩хмя╓╧╓К╬Л╧Г╓к╓о, ╓╧╓г╓к╓╫╓н╔г╔ё╔Л╔╞╔х╔Й╓к╓╒╓К╡©╓╚╓Р╬Е╫Я╓╜╓╥╓й╓╓╓Х╓╕╓кцМ╟у╓╧╓Ки╛мв╓╛╓╒╓Й╓ч╓╧. ╓╣╓И╓к pre-clean ╔©║╪╔╡╔ц╔х╓к╔Ё╔т║╪╓╥╓©╔я╔ц╔а╔у╔║╔╓╔К╓Р╨О╫Э╓╧╓К╔Ё╔ч╔С╔и╓Рди╡ц╓╧╓К╓н╓Рк╨╓Л╓й╓╓╓г╓╞╓ю╓╣╓╓. <makevar>MAINTAINER</makevar> ╓╒╓й╓©╓н╔А║╪╔К╔╒╔и╔Л╔╧╓Р╓Ё╓Ё╓кфЧ╓Л╓ф╓╞╓ю╓╣╓╓. ╓╙╢Й╓╓╓╥╓ч╓╧. :-) йщ╪Иц╢еЖ╪т(maintainer)╓нлРЁД╓к╓д╓╓╓ф╓н╬э╨ы╓о, Makefile цФ╓н MAINTAINER ╓нюА╓Р╓╢мВ╓╞╓ю╓╣╓╓. ╟мб╦╢ь╥╦ ╔в╔М╔╟╔И╔Ю╓╛б╬╓н port ╓к╟мб╦╓╧╓К╬Л╧Г╓к╓о, и╛мв╓й╓Б╓н╓╛╪╚ф╟е╙╓к╨Н╓И╓Л╓К╓Х╓╕╓к╓╧╓К╓Ё╓х╓╛╓г╓╜╓ч╓╧. ╓╫╓н╓©╓А╓к, ╟й╡╪╓н 5 ╓д╓нйя©Т╓╛мя╟у╓╣╓Л╓ф╓╓╓ч╓╧. ╓Х╓╞╓╒╓К╔╠║╪╔╧╓н╓©╓А╓к╓╒╓И╓╚╓╦╓АюъдЙ╓╣╓Л╓©╟мб╦йя©Т╓Д, ╓╓╓╞╓д╓╚╓н╟мб╦╢ь╥╦╓ню╘╦Ф╓н╓©╓А╓нйя©Т╓╛╓╒╓Й╓ч╓╧. <makevar>LIB_DEPENDS</makevar> port ╓╛и╛мв╓х╓╧╓КхСи╦╫Ю╓н╤╕м╜╔И╔╓╔ж╔И╔Й╓Р╓Ё╓нйя©Т╓г╩ьдЙ╓╥╓ч╓╧. ╓Ё╓Л╓о lib:dir:target ╓х╓╓╓╕ах╓н╔Й╔╧╔х╓г, ╓╫╓н╓╕╓а lib ╓╛╤╕м╜╔И╔╓╔ж╔И╔Й╓нл╬а╟, dir ╓╛╓╫╓н╔И╔╓╔ж╔И╔Й╓╛╦╚╓д╓╚╓И╓й╓╓╬Л╧Г╓к╔╓╔С╔╧╔х║╪╔К╓╧╓К port ╓н╓╒╓К╔г╔ё╔Л╔╞╔х╔Й, target ╓╛╓╫╓н╔г╔ё╔Л╔╞╔х╔Й╓г╦ф╓п╓Л╓К╔©║╪╔╡╔ц╔х╓г╓╧. ╓©╓х╓╗╓п, LIB_DEPENDS= jpeg.9:${PORTSDIR}/graphics/jpeg:install ╓х╩ьдЙ╓╥╓ф╓╒╓Л╓п, ╓ч╓╨╔А╔╦╔Ц║╪╔п║╪╔╦╔Г╔С╓╛ 9 ╓н jpeg ╔И╔╓╔ж╔И╔Й╓╛╓╒╓К╓╚╓и╓╕╓╚Ёнг╖╓╥, ╓й╓╓╬Л╧Г╓к╓о ports ╔д╔Й║╪╓нцФ╓н graphics/jpeg ╓х╓╓╓╕╔╣╔ж╔г╔ё╔Л╔╞╔х╔Й╓к╟эф╟╓╥, ╓╫╓Ё╓г╔Ё╔С╔я╔╓╔К╓х╔╓╔С╔╧╔х║╪╔К╓Р╧т╓й╓╓╓ч╓╧. target ╓ниТй╛╓о, DEPENDS_TARGET (╔г╔у╔╘╔К╔х╓о install) ╓хеЫ╓╥╓╓╓х╓╜╓к╓о╬йн╛╓г╓╜╓ч╓╧. а╟х╬╓н lib иТй╛╓о ldconfig -r | grep -wF ╓ь╓н╟З©Т╓к╓й╓Й╓ч╓╧. ╓Ё╓нйя©Т╓к╓ою╣╣╛и╫╦╫╓РфЧ╓Л╓И╓Л╓ч╓╩╓С. ╓Ё╓н╟мб╦╢ь╥╦╓о 2 еы╔а╔╖╔ц╔╞╓╣╓Л╓ч╓╧. ╓ч╓╨ extract ╔©║╪╔╡╔ц╔х╓г, ╪║╓к install ╓г╔а╔╖╔ц╔╞╓╣╓Л╓ч╓╧ (╓Ё╓Л╓о, ╓╫╓н port ╓Р╨Ню╝╓╧╓К╔ч╔╥╔С╓х╔╓╔С╔╧╔х║╪╔К╓╧╓К ╔ч╔╥╔С╓╛╟Ц╓╕╬Л╧Г╓г╓Б, ╓╜╓а╓С╓х╓╫╓н╔И╔╓╔ж╔И╔Й╓╛мЬмя╓г╓╜╓К ╓Ё╓х╓РЁнг╖╓╧╓К╓©╓А╓г╓╧). ╓ч╓©, ╟мб╦╓╧╓К╓Б╓нл╬а╟╓о package ╓нцФ╓к╓Б╢ч╓ч╓Л╓ч╓╧╓н╓г, ╔Ф║╪╔╤╓н╔╥╔╧╔ф╔Ю╓кб╦╨ъ╓╥╓й╓╠╓Л╓п, pkg_add ╓╛╪╚ф╟е╙╓к╔╓╔С╔╧╔х║╪╔К╓╥╓ч╓╧. <makevar>RUN_DEPENDS</makevar> port ╓Р╩хмя╓╧╓К╨щ╓ки╛мв╓х╓й╓К╔у╔║╔╓╔К, ╓ч╓©╓о╔в╔М╔╟╔И╔Ю╓╛╓╒╓К╓х╓╜╓к╓о╓Ё╓нйя©Т╓г╩ьдЙ╓╥╓ч╓╧. ╓Ё╓Л╓о path:dir:target ╓х╓╓╓╕ах╓н╔Й╔╧╔х╓г, path ╓╛╔у╔║╔╓╔К╓ч╓©╓о╔в╔М╔╟╔И╔Ю╓нл╬а╟, ╓╫╓╥╓ф dir ╓╛╓╫╓Л╓╛╦╚╓д╓╚╓И╓й╓╓╬Л╧Г╓к╨Ню╝╓╧╓К╓©╓А╓н╔г╔ё╔Л╔╞╔х╔Йл╬╓г target ╓о╓╫╓н╔г╔ё╔Л╔╞╔х╔Й╓г╦ф╓п╓Л╓К╔©║╪╔╡╔ц╔х╓г╓╧. path ╓н╨г╫И╓нй╦╩З╓╛╔╧╔И╔ц╔╥╔Е (/) ╓н╬Л╧Г╓к╓о╔у╔║╔╓╔К╓╚╔г╔ё╔Л╔╞╔х╔Й ╓х╓ъ╓й╓╥, ╓╫╓нб╦╨ъ╓Р test -e ╓г╔а╔╖╔ц╔╞╓╥╓ч╓╧. ╓╫╓╕╓г╓й╓╓╬Л╧Г╓к╓о╪б╧т╡дг╫╓г╓╒╓К╓х╡╬дЙ╓╥, which -s ╓Р╩х╓ц╓ф╓╫╓н╔в╔М╔╟╔И╔Ю╓╛╔Ф║╪╔╤╓н╔╣║╪╔а╔я╔╧╬Е╓к╓╒╓К╓╚╓и╓╕╓╚Ёнг╖╓╥╓ч╓╧. ╓©╓х╓╗╓п Makefile ╓к╟й╡╪╓н╓Х╓╕╓к╫Я╓╓╓ф╓╒╓К╓х╓╥╓ч╓╧. RUN_DEPENDS= ${PREFIX}/etc/innd:${PORTSDIR}/news/inn \ wish8.0:${PORTSDIR}/x11-toolkits/tk80 ╓ч╓╨, /usr/local/etc/innd ╓х╓╓╓╕╔у╔║╔╓╔К╓╚╔г╔ё╔Л╔╞╔х╔Й╓╛б╦╨ъ╓╧╓К╓╚Ёнг╖╓╥, ╓й╓╓╬Л╧Г╓к╓о ports ╔д╔Й║╪╓нцФ╓н news/inn ╓х╓╓╓╕╔╣╔ж╔г╔ё╔Л╔╞╔х╔Й╓╚╓И╨Н╓И╓Л╓ч╓╧. ╓ч╓©, wish8.0 ╓х╓╓╓╕╔в╔М╔╟╔И╔Ю╓╛╔Ф║╪╔╤╓н╔╣║╪╔а╔я╔╧цФ╓к╓╒╓К╓╚╓и╓╕╓╚ц╣╓╥, ╓й╓╓╬Л╧Г╓к╓оф╠╓╦╓╞ ports ╔д╔Й║╪╓н x11-toolkits/tk80 ╓х╓╓╓╕╔╣╔ж╔г╔ё╔Л╔╞╔х╔Й╓╚╓И╨Н╓И╓Л╓ч╓╧. ╓Ё╓ннЦ╓г, innd ╓о╪б╨щ╓к╓о╔в╔М╔╟╔И╔Ю╓г╓╧. ╓Ё╓н╓Х╓╕╓к, ╔в╔М╔╟╔И╔Ю╓г╓╒╓ц╓ф╓Би╦╫Ю╓н╔╣║╪╔а╔я╔╧╟йЁ╟╓н╓х╓Ё╓М╓к╓╒╓К╓Х╓╕╓й╓Б╓н╓н╬Л╧Г╓к╓о, юДбп╔я╔╧╓г╩ьдЙ╓╥╓ф╓╞╓ю╓╣╓╓. ╓Ё╓н╟мб╦╢ь╥╦╓о install ╔╧╔ф║╪╔╦╓н╓о╓╦╓А╓г╔а╔╖╔ц╔╞╓╣╓Л╓ч╓╧. ╓ч╓©, package ╓Р╨Н╓К╨щ╓ки╛мв╓х╓й╓К port ╓н package л╬╓╛╣╜о©╓╣╓Л pkg_add ╓Р╩хмя╓╧╓К╓х╔Ф║╪╔╤╓н╔╥╔╧╔ф╔Ю╓кб╦╨ъ╓╥╓й╓╓╬Л╧Г╓к╓о╪╚ф╟е╙╓к╓╫╓а╓И╓н package ╓Б╔╓╔С╔╧╔х║╪╔К╓╣╓Л╓К╓Х╓╕╓к╓й╓Й╓ч╓╧. target ╓ниТй╛╓о, DEPENdS_TARGET ╓хф╠╓╦╬Л╧Г╓к╓о╬йн╛╡дг╫╓г╓╧. <makevar>BUILD_DEPENDS</makevar> ╓Ё╓нйя©Т╓о╔с╔К╔и╓ки╛мв╓й╔в╔М╔╟╔И╔Ю╓ч╓©╓о╔у╔║╔╓╔Кл╬╓Р╩ьдЙ╓╥╓ч╓╧. RUN_DEPENDS╓хф╠мм╓к, ╓Ё╓Л╓о path:dir:target ╓х╓╓╓╕ах╓н╔Й╔╧╔х╓г╓╧. ╓©╓х╓╗╓п, BUILD_DEPENDS=unzip:${PORTSDIR}/archivers/unzip ╓о unzip ╓х╓╓╓╕л╬а╟╓н╔в╔М╔╟╔И╔Ю╓Рц╣╓╥, ╦╚╓д╓╚╓И╓й╓╓╬Л╧Г╓к╓о archivers/unzip ╔╣╔ж╔г╔ё╔Л╔╞╔х╔Й╓г╨Н╓Л╓х╓╓╓╕╟улё╓к╓й╓Й╓ч╓╧. ╓Ё╓Ё╓г╦ю╓╕╔с╔К╔и╓о, ╔у╔║╔╓╔К╓не╦Ё╚╓╚╓И╔Ё╔С╔я╔╓╔К╓ч╓г╓н╓╧╓ы╓ф╓Р╟улё╓╥╓ч╓╧. ╓Ё╓н╟мб╦╢ь╥╦╓о extract ╔╧╔ф║╪╔╦╓╚╓И╔а╔╖╔ц╔╞╓╣╓Л╓ч╓╧. target ╓ниТй╛╓о DEPENDS_TARGET ╓хф╠╓╦╬Л╧Г╓к╓о╬йн╛╡дг╫╓г╓╧. <makevar>FETCH_DEPENDS</makevar> ╓Ё╓нйя©Т╓о, port╓Р╪Х╓ц╓ф╓╞╓К╓н╓ки╛мв╓й╔у╔║╔╓╔К╓ч╓©╓о╔в╔М ╔╟╔И╔Ю╓Р╩ьдЙ╓╧╓К╓н╓к╩х╓╓╓ч╓╧. ╬Е╓нфС╓д╓хф╠мм╓к, ╓Ё╓Л╓о path:dir:target ╓х╓╓╓╕ах╓н╔Й╔╧╔х╓г╓╧. ╓©╓х╓╗╓п, FETCH_DEPENDS= ncftp2:${PORTSDIR}/net/ncftp2 ╓х╓╥╓ф╓╙╓╠╓п, ncftp2 ╓х╓╓╓╕л╬а╟╓н╔в╔М╔╟╔И╔Ю╓Рц╣ ╓╥, ╦╚╓д╓╚╓И╓й╓╓╬Л╧Г╓к╓о net/ncftp2 ╔╣╔ж╔г╔ё╔Л╔╞╔х╔Й╓к╓╓╓ц╓ф╔╓╔С╔╧╔х║╪╔К╓╥╓ч╓╧. ╓Ё╓н╟мб╦╢ь╥╦╓о fetch ╔╧╔ф║╪╔╦╓╚╓И╔а╔╖╔ц╔╞╓╣╓Л╓ч╓╧. target ╓ниТй╛╓о DEPENDS_TARGET ╓хф╠╓╦╬Л╧Г╓к╓о╬йн╛╡дг╫╓г╓╧. <makevar>DEPENDS</makevar> ╬Е╣╜╓н╩м╓д╓н╓╓╓╨╓Л╓к╓Б╓╒╓ф╓о╓ч╓И╓й╓╓╓Х╓╕╓й╟мб╦╢ь╥╦╓╛╓╒╓К╬Л╧Г, ╓ч╓©╓об╬╓н port ╓╛╔╓╔С╔╧╔х║╪╔К╓╣╓Л╓Л╓ф╓╓╓К╓ю╓╠╓г╓о╓й╓╞╔╫║╪╔╧╓╛е╦Ё╚╓╣╓Л╓ф╓╓╓Ки╛мв╓╛╓╒╓К╬Л╧Г╓к╓о, ╓Ё╓нйя©Т╓Р╩х╓╓╓ч╓╧. ╓Ё╓Л╓о╬Е╣╜╓н╩м╓д╓х╟Ц╓ц╓ффц╓кЁнг╖╓╧╓К╓Б╓н╓╛╓╒╓Й╓ч╓╩╓С╓н╓г, dir:target ╓х╓╓╓╕╥а╪╟╓н╔Й╔╧╔х╓к╓й╓Й╓ч╓╧. target ╓ниТй╛╓о DEPENDS_TARGET ╓хф╠╓╦╬Л╧Г╓к╓о╬йн╛╡дг╫╓г╓╧. ╓Х╓╞╓╒╓К╟мб╦╢ь╥╦╓Ри╫╓╧йя©Т ╓Б╓╥ ports ╓╛ X Window System ╓Ри╛мв╓х╓╧╓К╓н╓г╓╒╓Л╓п, USE_XLIB=yes ╓РдЙ╣а╓╥╓ф╓╞╓ю╓╣╓╓ (╓Ё╓Л╓о USE_IMAKE ╓╛дЙ╣а╓╣╓Л╓ф╓╓╓Л╓п ╪╚ф╟е╙╓кдЙ╣а╓╣╓Л╓ч╓╧). BSD make ╓нбЕ╓Й╓к GNU make ╓Ри╛мв╓х╓╧╓К╬Л╧Г╓к╓о USE_GMAKE=yes ╓Р, ф╟╨Н╓╧╓К╓н╓к GNU autoconf ╓Ри╛мв╓х╓╧╓К╬Л╧Г╓к╓о USE_AUTOCONF=yes ╓Р, ╨г©╥╓н qt toolkit ╓Р╩хмя╓╧╓К╬Л╧Г╓к╓о USE_QT=yes ╓Р, perl ╦ю╦Л╓н╔п║╪╔╦╔Г╔С 5 ╓Ри╛мв╓х╓╧╓К╬Л╧Г╓к╓о USE_PERL5=yes ╓РдЙ╣а╓╥╓ф╓╞╓ю╓╣╓╓ (фц╓к╨г╦Е╓н╓о╫емв╓г╓╧. FreeBSD ╓н╓╓╓╞╓д╓╚╓н ╔п║╪╔╦╔Г╔С╓г╓о╢Пкэ╔╥╔╧╔ф╔Ю╓к perl5 ╓Р╢ч╓ъ╓ч╓╧╓╛, б╬╓н╓Б╓н╓о╢ч╓С╓г╓╓╓ч╓╩╓С). ╟мб╦╢ь╥╦╓к╢ь╓╧╓КцМ╟у ╬Е╓г╫р╓ы╓©╓Х╓╕╓к, ╟мб╦╓╧╓К ports ╓╛и╛мв╓к╓й╓ц╓©╓х╓╜╓к╦ф╓п╓Л╓К╔г╔у╔╘╔К╔х╓н╔©║╪╔╡╔ц╔х╓о DEPENDS_TARGET ╓г, ╓╫╓н╔г╔у╔╘╔К╔х╓о install ╓г╓╧. ╓Ё╓Л╓о╔Ф║╪╔╤╓н╩хмя╓╧╓Кйя©Т╓г port ╓н Makefile ╓гдЙ╣а╓╣╓Л╓К╓Б╓н╓г╓о╓╒╓Й╓ч╓╩╓С. ╓Б╓╥╓╒╓й╓©╓н port ╓╛фцйл╓ййЩк║╓г╟мб╦╢ь╥╦╓Р╟╥╓╕и╛мв╓╛╓╒╓К╬Л╧Г╓к╓о, DEPENDS_TARGET ╓Р╨фдЙ╣а╓╧╓К╓н╓г╓о╓й╓╞ *_DEPENDS йя©Т╓н :target ╓ниТй╛╓РмЬмя╓╥╓ф╓╞╓ю╓╣╓╓. make clean ╓хфЧно╓╥╓©╓х╓╜╓к╓о╟мб╦╓╧╓К port ╓Б╪╚ф╟е╙╓к clean ╓╣╓Л╓ч╓╧. ╓Б╓╥╓╫╓╕╓╥╓©╓╞╓й╓╓╬Л╧Г╓к╓о NOCLEANDEPENDS ╓Р╢д╤╜йя©Т╓х╓╥╓фюъдЙ╓╥╓ф╓╞╓ю╓╣╓╓. л╣╬Р╥О╓кб╬╓н port ╓к╟мб╦╓╣╓╩╓К╓к╓о, фцйл╓к nonexistent ╓х╓╓╓╕й╦╩ЗнС╓Р BUILD_DEPENDS ╓╒╓К╓╓╓о RUN_DEPENDS ╓н╨г╫И╓н╔у╔ё║╪╔К╔и╓к╩хмя╓╥╓ф╓╞╓ю╓╣╓╓. ╓Ё╓Л╓о, б╬╓н port ╓н╔╫║╪╔╧╓╛и╛мв╓й╓х╓╜╓н╓ъ╩хмя╓╥╓ф╓╞╓ю╓╣╓╓. ╔©║╪╔╡╔ц╔х╓Б╩ьдЙ╓╧╓К╓Ё╓х╓к╓Х╓ц╓ф, ╔Ё╔С╔я╔╓╔К╓н╩Ч╢ж╓РюАлС╓╧╓К╓Ё╓х╓╛╓г╓╜╓ч╓╧. ╓©╓х╓╗╓п, BUILD_DEPENDS= /nonexistent:${PORTSDIR}/graphics/jpeg:extract ╓Ё╓Л╓о, ╬О╓к JPEG port ╓н╔г╔ё╔Л╔╞╔х╔Й╓к╧т╓╜╔╫║╪╔╧╓не╦Ё╚╓Р╧т╓й╓╓╓ч╓╧. ╓╒╓й╓©╓╛╓Д╓Й╓©╓╓╓Ё╓х╓╛б╬╓нйЩк║╓г╓о╓г╓╜╓й╓╓╬Л╧Г╟йЁ╟╓о DEPENDS ╓Р╩х╓О╓й╓╓╓г╓╞╓ю╓╣╓╓. ╓Ё╓Л╓о╬О╓к б╬╓н port ╓н╨Ню╝╓Р╧т╓╓(╓╣╓И╓к╔г╔у╔╘╔К╔х╓г╔╓╔С╔╧╔х║╪╔К╓Р╧т╓╓), package ╓Б╨Ню╝╓╥╓ч╓╧. ╓Б╓╥кэеЖ╓к╓Ё╓Л╓╛╓╒╓й╓©╓н╓Д╓Й╓©╓╓╓Ё╓х╓г╓╥╓©╓И, бЕ╓Й╓к╓Ё╓Л╓Р BUILD_DEPENDS ╓х RUN_DEPENDS ╓г╫Я╓╞╓Ё╓х╓Р╓╙╢╚╓А╓╥╓ч╓╧ — ╬╞╓й╓╞╓х╓Б╟у©ч╓╛люЁн╓к╓й╓Й╓ч╓╧. ╔с╔К╔и╓н╔А╔╚╔к╔╨╔Ю GNU make ╓Р╩х╓╕╬Л╧Г╓к╓о, USE_GMAKE=yes ╓х╩ьдЙ╓╥╓ф╓╞╓ю╓╣╓╓. port ╓к GNU configure ╓╛╢ч╓ч╓Л╓ф╓╓╓К╬Л╧Г╓к╓о, GNU_CONFIGURE=yes ╓Р╩х╓╓╓ч╓╧(╓Ё╓Л╓о, HAS_CONFIGURE ╓Б╟улё╓╥╓ч╓╧). configure ╓кди╡ц╓н╟З©Т (╔г╔у╔╘╔К╔х╓г╓о, GNU configure ╓г╓о --prefix=${PREFIX}, GNU ╓г╓й╓╓ configure ╓г╓о╤У) ╓Рео╓╥╓©╓╓╬Л╧Г╓к╓оди╡циТй╛╓Р CONFIGURE_ARGS ╓г╩ьдЙ╓╥╓ф╓╞╓ю╓╣╓╓. ╓╫╓н╔я╔ц╔╠║╪╔╦╓╛ autoconf ╓Р╩хмя╓╧╓К╬Л╧Г╓к╓о USE_AUTOCONF=yes ╓Р╩х╓╓╓ч╓╧. ╓Ё╓Л╓о GNU_CONFIGURE ╓Б╟улё╓╥, configure ╓на╟╓к autoconf ╓Р╪б╧т╓╥╓ч╓╧. X Window System╓н╔╒╔в╔Й╔╠║╪╔╥╔Г╔С╓й╓и, imake╓Р ╩х╓ц╓ф Imakefile ╓╚╓И Makefile ╓Р╨Ню╝╓╧╓К port ╓н╬Л╧Г╓к╓о USE_IMAKE=yes ╓Р╩ьдЙ╓╥╓ф╓╞╓ю╓╣╓╓. ╔Ё╔С╔у╔ё╔╟╔Л║╪╔╥╔Г╔С╔╧╔ф║╪╔╦╓г╪╚ф╟е╙╓к xmkmf -a ╓╛╪б╧т╓╣╓Л╓ч╓╧. ╓Б╓╥ ╔у╔И╔╟╓╛лДбЙ╓Р╓Б╓©╓И╓╧╓й╓И, ╓╣╓И╓к XMKMF=xmkmf╓х╓╥╓ф╓╞╓ю╓╣╓╓. ╓Б╓╥, port ╓╛ imake ╓Р╩хмя╓╧╓К╓╠╓Л╓и╓Б install.man ╔©║╪╔╡╔ц╔х╓╛╓й╓╓╬Л╧Г╓к╓о, NO_INSTALL_MANPAGES=yes ╓Р╩ьдЙ╓╥╓ф╓╞╓ю╓╣╓╓. ╓д╓╓╓г╓к, ╓╫╓н port ╓н╔╙╔Й╔╦╔й╔К╓н╨Н╪т╓Рц╣╓╥╫п╓╥╓фх╛╓днЖ╓╜╓к╓╧╓К╓х ╓╓╓╓╓г╓╥╓Г╓╕. (-_-#) port ╓н Makefile ╓╛ all ╟йЁ╟╓н╓Б╓н╓Р╔А╔╓╔С╓н╔©║╪╔╡╔ц╔х╓х╓╥╓ф╓╓╓К╬Л╧Г╓к╓о ALL_TARGET ╓г╓╫╓Л╓Р╩ьдЙ╓╥╓ф╓╞╓ю╓╣╓╓. install ╓х INSTALL_TARGET ╓Бф╠мм╓г╓╧. фцйл╓йгшн╦ port ╓Р╨Ню╝╓╧╓К╬Л╧Г, ╧мн╦╓╥╓й╓╞╓ф╓о╓╓╓╠╓й╓╓╓Ё╓х╓╛╓╣╓И╓к╓╓╓╞╓д╓╚╓╒╓Й╓ч╓╧. ╓Ё╓нюА╓г╓о, ╓╫╓Л╓И╓н╓╕╓а╓Б╓ц╓х╓Б╓╒╓Й╓╛╓а╓й╓Б╓н╓к╓д╓╓╓фюБлю╓╥╓ч╓╧. <command>ldconfig</command> ╤╕м╜╔И╔╓╔ж╔И╔Й╓Р╔╓╔С╔╧╔х║╪╔К╓╧╓К╓х╓╜╓к╓о, ╤╕м╜╔И╔╓╔ж╔И╔Й╓н╔╜╔Ц╔ц╔╥╔Е╓Р╧╧©╥╓╧╓К╓©╓А╓к port ╓н Makefile ╓н post-install ╔©║╪╔╡╔ц╔х╓╚╓И ${LDCONFIG} -m ╓Р╪б╧т╓╥╓ф╓╞╓ю╓╣╓╓. ╓Ё╓н╔Ё╔ч╔С╔и╓н╟З©Т╓о╤╕м╜╔И╔╓╔ж╔И╔Й╓н╔╓╔С╔╧╔х║╪╔К╓╥╓ф╓╒╓К╔г╔ё╔Л╔╞╔х╔Й (дл╬О PREFIX/lib) ╓г╓╧. ╓ч╓©, pkg/PLIST ╓к @exec /sbin/ldconfig -m ╓х @unexec /sbin/ldconfig -R ╓нах╓РфЧ╓Л╓ф, package ╓Р╔╓╔С╔╧╔х║╪╔К╓╥╓©╬Л╧Г╓к╓Б╤╕м╜╔И╔╓╔ж╔И╔Й╓╛╓╧╓╟╩х╓╗, ╨О╫Э╓н╨щ╓к╓Б╔╥╔╧╔ф╔Ю╓╛╓ч╓ю╔И╔╓╔ж╔И╔Й╓╛б╦╨ъ╓╧╓К╓х╦Мг╖╓╥╓й╓╓╓Х╓╕╓к╓╥╓ф╓╞╓ю╓╣╓╓. ╓Ё╓н╧т╓о╤╕м╜╔И╔╓╔ж╔И╔Й╓Р╩ьдЙ╓╧╓К╧т╓н╓╧╓╟╦Е╓к╫Я╓╞╓н╓╛╓Х╓╓╓г╓╥╓Г╓╕. lib/libtvl80.so.1 @exec /sbin/ldconfig -m %D/lib @unexec /sbin/ldconfig -R юДбп╓к╟З©Т╓й╓╥╓г╓©╓ю ldconfig ╓х╓ю╓╠╫Я╓╓╓ф╓╒╓К╧т╓Р Makefile ╓Д pkg/PLIST ╔у╔║╔╓╔К╓кфЧ╓Л╓й╓╓╓г╓╞╓ю╓╣╓╓. ╓Ё╓н╔Ё╔ч╔С╔и╓Р╪б╧т╓╧╓К╓х, ╤╕м╜╔И╔╓╔ж╔И╔Й╓н╔╜╔Ц╔ц╔╥╔Е╓╛ /usr/lib ╓нфБмф╓н╓ъ╓х╓й╓Й, ╔Ф║╪╔╤╓н╔ч╔╥╔С╓к╓╣╓ч╓╤╓ч╓йлДбЙ╓Р╓Б╓©╓И╓╥╓ч╓╧ (║ж╓╝╓Ц╓║! ╓Ё╓н port ╓Р╔╓╔С╔╧╔х║╪╔К╓╥╓©╓И xinit ╓╛╩х╓╗╓й╓╞╓й╓ц╓а╓Ц╓ц╓©!║в). ╓Ё╓ныщ╓Ргк╓ц╓©╪т╓о, ╠й╣в╓кцо╧Ж╓ндЛ╓г╤Л╓╥╓ъбЁ╓╠╓К╓Х╓╕╓к, ОЕкБмм╓кмЙ╓С╓г╓╙╓╜╓ч╓╧. <makevar>MASTERDIR</makevar> ╓Б╓╥, ╓╒╓й╓©╓н port ╓╛йя©Т (╓©╓х╓╗╓п╡РаЭеы╓х╓╚╩Ф╓н╔╣╔╓╔╨╓й╓и) ╓Рйя╓╗╓©╓Й╓╥╓©, ╓а╓Г╓ц╓х╟Ц╓╕╔п║╪╔╦╔Г╔С╓Р╨Ню╝╓╧╓Ки╛мв╓╛╓╒╓К╓х╓╜╓к╓о, ╔Ф║╪╔╤╓╛й╛╓Й╓Д╓╧╓╓╓Х╓╕╓к package ╓╢╓х╓кйл║╧╓н╔╣╔ж╔г╔ё╔Л╔╞╔х╔Й╓Р╨Ню╝╓╥, ╓г╓╜╓К╓ю╓╠ port ╢ж╓г╔у╔║╔╓╔К╓Р╤╕м╜╓╧╓К╓Х╓╕╓к╓╥╓ф╓╞╓ю╓╣╓╓. е╣╥©е╙╓йнЦ╓г╓о, ╓╕╓ч╓╞йя©Т╓Р╩х╓╗╓п╓х╓ф╓Бц╩╓╓Makefile╓ю╓╠╓Р ╟Л╓д╟йЁ╟╓н╓╧╓ы╓ф╓н╔г╔ё╔Л╔╞╔х╔Й╓кцж╓╞╓ю╓╠╓г╨я╓ъ╓ч╓╧. ╓╫╓нц╩╓╓ Makefile ╓к╓о MASTERDIR ╓Р╩х╓ц╓ф, ╩д╓Й╓н╔у╔║╔╓╔К╓╛╓╒╓К╔г╔ё╔Л╔╞╔х╔Й╓Р╩ьдЙ╓г╓╜╓ч╓╧. ╓ч╓© PKGNAMESUFFIX ╓н╟ЛиТ╓кйя©Т╓к╩х╓ц╓ф package ╓╛йл║╧╓нл╬а╟╓Р╩Щ╓д╓Х╓╕╓к╓╥╓ф╓╞╓ю╓╣╓╓. ╟й╡╪╓╛╓х╓ф╓Бни╓╓нЦ╓к╓й╓К╓г╓╥╓Г╓╕. ╓Ё╓Л╓о 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 ╓одл╬О╓н╔я╔ц╔а, package ╔у╔║╔╓╔К╓Б╓Б╓ц╓ф╓╓╓ч╓╧. ╓╫╓Ё╓г, make ╓хфЧно╓╧╓К╓х, ╔г╔у╔╘╔К╔х╓н╡РаЭеы(300)╓Р╩х╓ц╓ф, иАдл╓к port ╓н╨Ню╝╓Р╧т╓╓╓ч╓╧. б╬╓н╡РаЭеы╓к╢ь╓╥╓ф╓г╓╧╓╛, ╓Ё╓Л╓╛, xdvi118/Makefile ╓н(╔Ё╔А╔С╔х╓Р╫Э╓╓╓©) ╓╧╓ы╓ф╓г╓╧. RESOLUTION= 118 MASTERDIR= ${.CURDIR}/../xdvi300 .include ${MASTERDIR}/Makefile (xdvi240/Makefile ╓х xdvi400/Makefile ╓Бф╠мм╓г╓╧). MASTERDIR ╓╛ bsd.port.mk ╓к PATCHDIR ╓Д PKGDIR ╓й╓и╓ндл╬О╓н╔╣╔ж╔г╔ё╔Л╔╞╔х╔Й╓╛ xdvi300 ╓к╓╒╓К╓Ё╓х╓Р╤╣╓╗╓ч╓╧. RESOLUTION=118 ╓н╧т╓╛, xdvi300/Makefile ╓н RESOLUTION=300 ╓н╧т╓Рл╣╦З╓к╓╥, port ╓о╡РаЭеы╓Р118╓х╓╥╓ф╨Ню╝╓╣╓Л╓ч╓╧. ╤╕м╜╔И╔╓╔ж╔И╔Й╓н╔п║╪╔╦╔Г╔С ╓ч╓╨, ╤╕м╜╔И╔╓╔ж╔И╔Й╓н╔п║╪╔╦╔Г╔С╓к╓д╓╓╓ф╓н╩ь©к╓Рфи╓С╓г, ╤╕м╜╔И╔╓╔ж╔И╔Й╓н╔п║╪╔╦╔Г╔С╓Р╟Лхле╙╓к╓и╓╕╓╧╓Л╓пни╓╓╓╚╓РмЩ╡Р╓╥╓ф╓╞╓ю╓╣╓╓. лулэе╙╓к╔╫╔у╔х╔╕╔╗╔╒╓н╨Н╪т╓╛╓а╓Ц╓С╓хмЩ╡Р╓╥╓ф╓╓╓К╓х©╝╓╦╓ф╓╓╓ф╓о╓╓╓╠╓ч╓╩╓С. б©╓╞╓н╬Л╧Г, ╓╫╓Л╓о╢ж╟Ц╓ц╓ф╓╓╓ч╓╧╓╥, ╨ы╓╓ею╓ч╓г╧мн╦╓╧╓К╓Ё╓х╓обГйя╫емв╓й╓Ё╓х╓г╓╧. ╓й╓╪╓й╓И╓О╓©╓╥╓©╓а╓о, ╦ъ╢╧ю╜╓╛╓й╓╓╓╚╓Б╓╥╓Л╓й╓╓бГнл╓н╔╫╔у╔х╔╕╔╖╔╒╓Р╤╕б╦╓╣╓╩╓Х╓╕╓х╓╧╓Кфц╪Л╓й╬У╤╥╓к╓╒╓К╓╚╓И╓г╓╧. ╡А╣Н╓китцМ╟у╓й port ╓нфЁфЧ╓╛╤╕м╜╔И╔╓╔ж╔И╔Й╓к╢ь╓╥╓фб©бГ╓йлДбЙ╓Р╟З╓╜╣╞╓╥╓©╓Ё╓х╓╛╓╒╓Й╓ч╓╧ (╨ё╓ч╓г jpeg-6b ╓╛╓й╓╪ 9 ╓х╓╓╓╕╔п║╪╔╦╔Г╔Схж╧Ф╓Р╩Щ╓ц╓ф╓╓╓К╓╚ит╩в╣д╓к╩в╓ц╓©╓Ё╓х╓о╓╒╓Й╓ч╓╩╓С╓╚?). ╓Б╓╥, ╣©лД╓╛╓╒╓Л╓п, &a.ports; ╓к╔А║╪╔К╓РаВ╓ц╓ф╓╞╓ю╓╣╓╓. ╓ш╓х╓С╓и╓н╩Ч╢ж╓ою╣╓╥╓╓╤╕м╜╔И╔╓╔ж╔И╔Й╓н╔п║╪╔╦╔Г╔С╓Р╥Х╓А╓К╓Ё╓х╓х, ╓╫╓Л╓Р╪б╦╫╓╧╓К╓©╓А╓н╔я╔ц╔а╓Р╨Ню╝╓╧╓К╓Ё╓х╓к╫╙╩о╓╥╓ч╓╧. ╔ч╔к╔Е╔╒╔К╔з║╪╔╦ MAN[1-9LN] йя©Т╓Р╩хмя╓╧╓К╓х, ╪╚ф╟е╙╓к╓╧╓ы╓ф╓н╔ч╔к╔Е╔╒╔К╓Р pkg/PLIST ╓к╡ц╓╗╓ч╓╧ (╓д╓ч╓Й, ╔ч╔к╔Е╔╒╔К╓Р PLIST ╓к╡ц╓╗╓ф╓о╓╓╓╠╓ч╓╩╓СPLIST ╓ню╦ю╝ ╓Р╩╡╬х╓╥╓ф╓╞╓ю╓╣╓╓). ╓ч╓©╔ч╔к╔Е╔╒╔К╓Р /etc/make.conf цФ╓н NOMANCOMPRESS ╓нюъдЙ╓к╠Ч╓╦╓ф, ╔╓╔С╔╧╔х║╪╔К╩Ч╓к╪╚ф╟е╙╓к╟╣╫л╓╥╓©╓ЙиЭ╦╣╓╥╓©╓Й╓╥╓ч╓╧. ╓Б╓╥╓╒╓й╓©╓н port ╓гйё©Т╓н╔у╔║╔╓╔Кл╬╓Р╩Щ╓д╔ч╔к╔Е╔╒╔К╔з║╪╔╦╓Р, ╔╥╔С╔э╔Й╔ц╔╞╔Й╔С╔╞╓Д╔о║╪╔и╔Й╔С╔╞╓Рмя╓╓╓ф╔╓╔С╔╧╔х║╪╔К╓╥╓Х╓╕╓х╓╥╓ф╓╓╓К╓й╓И, ╓╫╓Л╓И╓Р╪╠йл╓╧╓К╓©╓А╓к MLINKS ╓Р╩х╓О╓й╓╠╓Л╓п╓й╓Й╓ч╓╩╓С. port ╓к╓Х╓ц╓ф╔╓╔С╔╧╔х║╪╔К╓╣╓Л╓©╔Й╔С╔╞╓о, ╟у©ч╓╧╓К╔у╔║╔╓╔К╓Р╓╜╓а╓С╓х╩ь╓╥╓ф╓╓╓К╓╚╓и╓╕╓╚╓РЁн╪б╓й╓Б╓н╓к╓╧╓К╓©╓А bsd.port.mk ╓к╓Х╓ц╓ф╨О╫Э╓╣╓Л╓©╓Й, ╨ф╨Ню╝╓╣╓Л╓©╓Й╓╥╓ч╓╧. MLINKS ╓к╢ч╓ч╓Л╓ф╓╓╓К╔ч╔к╔Е╔╒╔К╔з║╪╔╦╓о, ╟Л╓д╓х╓╥╓ф PLIST ╓нцФ╓кб╦╨ъ╓╥╓ф╓╓╓ф╓о╓╓╓╠╓ч╓╩╓С. ╔ч╔к╔Е╔╒╔К╓Р╔╓╔С╔╧╔х║╪╔К╩Ч╓к╟╣╫л╓╧╓К╓╚╓и╓╕╓╚╓Р ╩ьдЙ╓╧╓К╓к╓о, MANCOMPRESSED йя©Т╓Р╩хмя╓╥╓ч╓╧. ╓Ё╓нйя©Т╓о╩╟╓д╓нцм╓Р╓х╓К╓Ё╓х╓╛╓г╓╜╓ч╓╧, yes, no ╓╫╓╥╓ф maybe ╓г╓╧. yes ╓о╔ч╔к╔Е╔╒╔К╓╛╢Ш╓к╟╣╫л╓╣╓Л╓ф╔╓╔С╔╧╔х║╪╔К╓╣╓Л╓ф╓╓╓К, no ╓о╓╣╓Л╓ф╓╓╓й╓╓, maybe ╓о╓╫╓н╔╫╔у╔х╔╕╔╖╔╒╓╛╓╧╓г╓к NOMANCOMPRESS ╓к╧Г╓О╓╩╓ф╓╙╓Й bsd.port.mk ╓╛фцйл╓й╓к╓Б╓╧╓Ки╛мв╓╛╓й╓╓╓Ё╓х╓Р╟улё╓╥╓ч╓╧. USE_IMAKE ╓╛╔╩╔ц╔х╓╣╓Л╓ф╓╓╓ф, NO_INSTALL_MANPAGES ╓╛╔╩╔ц╔х╓╣╓Л╓ф╓╓╓й╓╠╓Л╓п, MANCOMPRESSED ╓о╪╚ф╟е╙╓к yes ╓кюъдЙ╓╣╓Л, ╓╫╓Л╟йЁ╟╓н╬Л╧Г╓к╓о, no ╓к╓й╓Й╓ч╓╧. ╔г╔у╔╘╔К╔х╓╛╓╒╓й╓©╓н port ╓к╧Г╓О╓й╓╓╬Л╧Г╟йЁ╟╓олю╪╗е╙╓кюъдЙ╓╧╓Ки╛мв╓╛╓╒╓Й╓ч╓╩╓С. PREFIX ╟йЁ╟╓н╔г╔ё╔Л╔╞╔х╔Й╓н╡╪╓к ╔ч╔к╔Е╔╒╔К╓Рцж╓╞╓Х╓╕╓й port ╓г╓о MANPREFIX ╓Р╩ьдЙ╓╧╓К╓Ё╓х╓╛╓г╓╜╓ч╓╧. ╓╣╓И╓к, фцдЙ╓н╔╩╔╞╔╥╔Г╔С╓н╔ч╔к╔Е╔╒╔К╓ю╓╠, и╦╫Ю╓г╓о╓й╓╓╬Л╫Й╓к╔╓╔С╔╧╔х║╪╔К╓╧╓К╬Л╧Г, ╓©╓х╓╗╓п╓╓╓╞╓д╓╚╓н Perl ╓н╔Б╔╦╔Е║╪╔К╓н ports ╓й╓и╓к╓о, ╦д║╧╓н╔ч╔к╔Е╔╒╔К╓н╔я╔╧╓Р 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 ╦д╓н╔у╔║╔╓╔К╓╛╓Ё╓н 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.gz ╓╣╓И╓к ${PREFIX}/man/man8/alt-name.8.gz ╓╛╓Ё╓н port ╓к╓Х╓ц╓ф╔╓╔С╔╧╔х║╪╔К╓╣╓Л╓К╓╚╓и╓╕╓╚╓О╓╚╓Й╓ч╓╩╓С╓╛, ╓╫╓Л╓х╓ол╣╢ь╥╦╓к foo(1) ╓х alt-name(8) ╓н╔ч╔к╔Е╔╒╔К╔з║╪╔╦╓Р ╩ь╓╧╔╥╔С╔э╔Й╔ц╔╞╔Й╔С╔╞╓╛╨Ню╝╓╣╓Л╓ч╓╧. Motif ╓Ри╛мв╓х╓╧╓К port ╨г╤А╓о╔Ё╔С╔я╔╓╔К╓к Motif ╓Ри╛мв╓х╓╧╓К╔╒╔в╔Й╔╠║╪╔╥╔Г╔С╓╛аЩ╓╗╓ф╓╜╓ч╓╥╓© (Motif ╪╚бн╓ом╜на╓н╓Б╓н╓╛╓╓╓╞╓д╓╚╓н╡Я╪р╓╚╓И╪Й╓кфЧ╓Й╓ч╓╧╓╥, б©╓╞╓н╔╒╔в╔Й╔╠║╪╔╥╔Г╔С╓╛╔Ё╔С╔я╔╓╔К╡дг╫╓йл╣на╓н╦ъ╢╧╔И╔╓╔ж╔И╔Й╓╛ x11-toolkits/lesstif╓к╓╒╓Й╓ч╓╧). Motif ╓о╓╚╓й╓Й╧╜╓╞╩х╓О╓Л╓ф╓╓╓ч╓╧╓╥, ю╫ий╓н╔И╔╓╔╩╔С╔╧╓г╓о╔И╔╓╔ж╔И╔Й╓Рюее╙╓к╔Й╔С╔╞╓╥╓©╪б╧т╥а╪╟╓о╨фгшиш╓╛г╖╓А╓И╓Л╓ф╓╓╓К╬Л╧Г╓╛б©╓╓╓н╓г, Motif ╓Ри╛мв╓х╓╧╓К╔╫╔у╔х╔╕╔╖╔╒╓Р╢йц╠╓кф╟е╙ (port ╓╚╓И╔Ё╔С╔я╔╓╔К╓╧╓К©м║╧╓н╓©╓А╓к), юее╙ (package ╓Ргшиш╓╧╓К©м║╧╓н╓©╓А╓к) ╓к╔Й╔С╔╞╓г╓╜╓К╓Х╓╕╓й╓╥╓╞╓ъ╓╛мя╟у╓╣╓Л╓ф╓╓╓ч╓╧. <makevar>REQUIRES_MOTIF</makevar> Motif ╓╛╓й╓╓╓х╔Ё╔С╔я╔╓╔К╓г╓╜╓й╓╓ port ╓н Makefile ╓г╓о╓Ё╓нйя©Т╓Р╩ьдЙ╓╥╓ф╓╞╓ю╓╣╓╓. ╓Ё╓Л╓к╓Х╓ц╓ф, Motif ╓Р╩Щ╓ц╓ф╓╓╓й╓╓©м╓╛ ╓Ё╓н port ╓Р╔Ё╔С╔я╔╓╔К╓╥╓Х╓╕╓х╓╧╓К╓н╓Рл╓аЁ╓кки╓╝╓ч╓╧. <makevar>MOTIFLIB</makevar> ╓Ё╓нйя©Т╓о bsd.port.mk ╓к╓Х╓ц╓ф Motif ╔И╔╓╔ж╔И╔Й╓н╩ьдЙ╓кцж╓╜╢╧╓╗╓И╓Л╓ч╓╧. ╔╫║╪╔╧фБ╓н Makefile ╓Д Imakefile ╓г Motif ╔И╔╓╔ж╔И╔Й╓Р╩ьдЙ╓╥╓ф╓╓╓К╓х╓Ё╓М╓Р, ╓Ё╓нйя©Т╓кцж╓╜╢╧╓╗╓К╓Х╓╕╓к╔я╔ц╔а╓Ре╛мя╓╥╓ф╓╞╓ю╓╣╓╓. бЕи╫е╙╓йнЦ╓х╓╥╓ф╓о╟й╡╪╓нфС╓д╓╛╓╒╓╡╓И╓Л╓ч╓╧: Makefile ╓╚ Imakefile ╓нцФ╓г Motif ╔И╔╓╔ж╔И╔Й╓╛ ╓х╓╥╓ф╩х╓О╓Л╓ф╓╓╓К╬Л╧Г╓к╓о, ╓╚╓О╓Й╓к MOTIFLIB ╓х╫Я╓╓╓ф╓╞╓ю╓╣╓╓. Imakefile ╓нцФ╓г XmClientLibs ╓╛╩х╓О╓Л╓ф╓╓╓К╬Л╧Г╓к╓о, ╓╫╓Л╓Р ${MOTIFLIB} ${XTOOLLIB} ${XLIB} ╓х╫Я╓╜╓╚╓╗╓ф╓╞╓ю╓╣╓╓. ╓й╓╙ MOTIFLIB ╓одл╬О, -L/usr/X11R6/lib -lXm ╓╚ /usr/X11R6/lib/libXm.a ╓кцж╓╜╢╧╓╗╓И╓Л╓ч╓╧. ╓╥╓©╓╛╓ц╓фа╟╓к ╓Д ╓Р╓д╓╠╓Ки╛мв╓о╓╒╓Й╓ч╓╩╓С. X11 ╓н╔у╔╘╔С╔х ╓Б╓╥, ╓╒╓й╓©╓н port ╓╛ X window system ╓н╔у╔╘╔С╔х╓Р╔╓╔С╔╧╔х║╪╔К╓╧╓К╓н╓г╓╒╓Л╓п, ╓╫╓Л╓И╓Р 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 ╔у╔║╔╓╔К╓к╧Юлэ╓Рди╡ц╓╥╓©╓Й╨О╫Э╓╥╓©╓Й╓╧╓К╓Ё╓х╓╛╓г╓╜╓ч╓╧. ╓Б╓╥, ╓╒╓й╓©╓н port ╓╛ info й╦╫Я╓Р╔╓╔С╔╧╔х║╪ ╔К╓╧╓К╓н╓г╓╒╓Л╓п, ╟й╡╪╓н╩ь╪╗╓к╫╬╓ц╓ф╓╫╓н port ╓╙╓Х╓с package ╓╛ю╣╓╥╓╞╔Ф║╪╔╤╓н ${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. (лУцМ: Info ╔г╔ё╔Л╔╞╔х╔Й╓н INO-FILE ╓Р DIR-FILE ╓к╔╓╔С╔╧╔х║╪╔К╓╧╓К) Options: --delete Delete existing entries in INFO-FILE; don't insert any new entries. (лУцМ: INFO-FILE ╓нцФ╓н╧Юлэ╓Р╨О╫Э, ©╥╓╥╓╓╧Юлэ╓о╟Люзди╡ц╓╥╓й╓╓.) : --entry=TEXT Insert TEXT as an Info directory entry. (лУцМ: TEXT ╓Р Info ╔г╔ё╔Л╔╞╔х╔Й╓н╧Юлэ╓х╓╥╓фди╡ц╓╧╓К.) : --section=SEC Put this file's entries in section SEC of the directory. (лУцМ: ╓Ё╓н╔у╔║╔╓╔К╓н╧Юлэ╓Р Info ╔г╔ё╔Л╔╞╔х╔Й╓н SEC ╓х╓╓╓╕╔╩╔╞╔╥╔Г╔С╓кцж╓╞.) : ╓Ё╓н╔в╔М╔╟╔И╔Ю╓о, ╪б╨щ╓к╓о info ╔у╔║╔╓╔К╓Р╔╓╔С╔╧╔х║╪╔К╓╥╓ч╓╩╓С. ц╠╓к dir ╔у╔║╔╓╔К╓к╔╗╔С╔х╔Й╓РачфЧ╓╥╓©╓Й╨О╫Э╓╥╓©╓Й╓╧╓К╓ю╓╠╓г╓╧. ╓Ё╓Л╓╚╓И, install-info ╓Р╩хмя╓╧╓К╓Х╓╕╓к, ports ╓Рйя╢╧╓╧╓К 7 цйЁ╛╓н╧╘дЬ╓Р╪╗╓╥╓ч╓╧. нЦ╓х╓╥╓ф editors/emacs ╓Р╩хмя╓╥╓ч╓╧. ╓ч╓╨, texinfo ╓н╔╫║╪╔╧╓Р╦╚╓ф, @dircategory ╓х @direntry й╦╓╛╓й╓╓╔у╔║╔╓╔К╓к╓д╓╓╓ф, ╓╫╓Л╓И╓Рди╡ц╓╧╓К╔я╔ц╔а╓Р╨Ню╝╓╥╓ч╓╧. ╟й╡╪╓о, ╓Ё╓Ё╓г╓ннЦ╓г╓н 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 : ╔у╔╘║╪╔ч╔ц╔х╓к╓д╓╓╓ф╓о╦╚╓Л╓п╓О╓╚╓К╓х╩в╓╓╓ч╓╧. dir ╓х╓╓╓╕╔у╔║╔╓╔К╓ки╛мв╓й╧Юлэ╓Р╫Я╓╓╓ф╓╙╓╓╓ф╓╞╓Л╓К╨Н╪т╓Бб©╓╓╓н╓г, ╓ч╓╨╪╚й╛╓г╫Я╓╞а╟╓к╓╣╓╛╓╥╓ф╓ъ╓ф╓╞╓ю╓╣╓╓. ╓ч╓©, ╢ь╥╦╓╧╓К ports ╓Бд╢╓ы╓ф, ╔╩╔╞╔╥╔Г╔С╓нл╬а╟╓Д╔╓╔С╔г╔С╔х╓й╓и╓╛╓╜╓а╓С╓х╧Г╓ц╓ф╓╓╓К╓╚╓и╓╕╓╚╓РЁнг╖╓╥╓ф╓╞╓ю╓╣╓╓ (╧Юлэ╓н╔ф╔╜╔╧╔х ╓о, ╓╧╓ы╓ф 4 ╓д╓А╓н╔©╔ж║╕╔╧╔х╔ц╔в (tab stop) ╓╚╓И╩о╓А╓К╓Ё╓х╓Р©Д╬╘╓╥╓ч╓╧). ╟Л╓д╔у╔║╔╓╔К╓кбп╓╥╓ф╟Л╓д╓н info ╓н╧Юлэ╓╥╓╚╫Я╓╠╓й╓╓╓Ё╓х╓кцМ╟у╓╥╓ф╓╞╓ю╓╣╓╓. ╓Ё╓Л╓о install-info --delete ╓н╔п╔╟╓к╓Х╓Й @direntry ╔╩╔╞╔╥╔Г╔С╓кйё©Т╓н╧Юлэ╓Р╫Я╓╓╓ф╓Б╫И╓А╓н╟Л╓д╓н╧Юлэ╓╥╓╚╨О╫Э╓╥╓ф╓╞╓Л╓й╓╓╓╚╓И╓г╓╧. texinfo ╓н╔╫║╪╔╧╓к╔я╔ц╔а╓Ре╛мя╓╧╓КбЕ╓О╓Й╓к dir ╓н╧Юлэ╓Р install-info ╓н╟З©Т ((, ) ╓х╓╥╓фм©╓╗╓К╓Ё╓х╓Б╓г╓╜╓ч╓╧╓╛, ╓Ё╓Л╓о╓╒╓ч╓Йни╓╓йЩк║╓х╓о╩в╓╗╓ч╓╩╓С. ╓й╓╪╓й╓Иф╠╓╦╬ПйС╓Р╩╟╓д╓н╬Л╫Й (Makefile, PLIST ╓н @exec/@unexec: ╟й╡╪╩╡╬х) ╓к╫ейё╓╥╓ф╫Я╓╞и╛мв╓╛╓╒╓К╓╚╓И╓г╓╧. ╓╥╓╚╓╥, ╓Б╓╥фЭкэ╦Л (╓╒╓К╓╓╓о, б╬╓н╔ч╔К╔а╔п╔╓╔хй╦╩З)╓н info ╔у╔║╔╓╔К╓╛╓╒╓К╬Л╧Г╓к╓о install-info ╓нфцйл╓й╟З©Т╓Р╩хмя╓╧╓Ки╛мв╓╛╓╒╓К╓г╓╥╓Г╓╕. ╓й╓╪╓й╓И makeinfo ╓╛╓Ё╓н╓Х╓╕╓й texinfo ╔╫║╪╔╧╔у╔║╔╓╔К╓Р╟╥╓╗╓й╓╓╓╚╓И╓г╓╧. (╓Ё╓н╓Х╓╕╓й╓Б╓н╓Р╓и╓╕╟╥╓╕╓╚╓ннЦ╓х╓╥╓ф╓о japanese/skk ╓н Makefile ╓х PLIST ╓Р╦╚╓ф╓╞╓ю╓╣╓╓). port╓н╔г╔ё╔Л╔╞╔х╔Й╓клА╓ц╓ф make clean; make ╓Р╪б╧т╓╥, info ╔у╔║╔╓╔К╓╛ texinfo ╔╫║╪╔╧╔у╔║╔╓╔К╓╚╓И╨ф╓сю╦ю╝╓╣╓Л╓К╓Ё╓х╓РЁнг╖╓╥╓ф╓╞╓ю╓╣╓╓. texinfo ╔╫║╪╔╧╔у╔║╔╓╔К╓н╓ш╓╕╓╛ info ╔у╔║╔╓╔К╓Х╓Й╓Б©╥╓╥╓╓╓н╓г make ╓хфЧно╓╧╓Л╓п info ╔у╔║╔╓╔К╓о╨ф╧╫цш╓╣╓Л╓К╓о╓╨╓г╓╧╓╛, б©╓╞╓н Makefile ╓к╓о info ╔у╔║╔╓╔К╓ню╣╓╥╓╓╟мб╦╢ь╥╦╓╛╫Я╓╚╓Л╓ф╓╓╓ч╓╩╓С. emacs ╓н╬Л╧Г, info ╔у╔║╔╓╔К╓н╨ф╧╫цш╓©╓А man ╔╣╔ж╔г╔ё╔Л╔╞╔х╔Й╓к╧ъ╓Й╓ф╓╓╓╞╓Х╓╕╓к╓╧╓К╓©╓А╓к╔А╔╓╔С╓н Makefile.in ╓к╔я╔ц╔а╓Ре╛мя╓╧╓Ки╛мв╓╛╓╒╓Й╓ч╓╥╓©. --- ./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 ╓г╦ф╓с╓©╓╓╓н╓г, фС╓длэ╓нpatch╓╛и╛мв╓г╓╥╓©. ╓ч╓©, info info ╔у╔║╔╓╔К╓н╔╓╔С╔╧╔х║╪╔К╓Б╨О╫Э╓╥╓ч╓╥╓©. ╓й╓╪╓й╓И, ф╠╓╦╓Б╓н╓╛ф╠╓╦л╬а╟╓г╓╧╓г╓к /usr/share/info ╓к╓╒╓К╓╚╓И╓г╓╧ (╓Ё╓н╔я╔ц╔а╓о╓Ё╓Ё╓к╓о╓╒╓Й╓ч╓╩╓С). ╓Б╓╥, Makefile ╓к dir ╔у╔║╔╓╔К╓Р╔╓╔С╔╧╔х║╪╔К╓╧╓К╦д╫Й╓╛╓╒╓Л╓п╨О╫Э╓╥╓ч╓╧. ╓╒╓й╓©╓н port ╓╛╔╓╔С╔╧╔х║╪╔К╓╥╓ф╓о╓╓╓╠╓ч╓╩╓С. ╓ч╓©, 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); \ (╓Ё╓Л╓о, ╢Шб╦╓нport╓Р╫╓ю╣╓╧╓К╓х╓╜╓н╓ъи╛мв╓г╓╧.) 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 PLIST --- PLIST 1997/03/04 08:04:00 1.15 +++ PLIST 1997/04/15 06:32:12 @@ -15,9 +15,6 @@ man/man1/emacs.1.gz man/man1/etags.1.gz man/man1/ctags.1.gz -@unexec cp %D/info/dir %D/info/dir.bak -info/dir -@unexec cp %D/info/dir.bak %D/info/dir info/cl info/cl-1 info/cl-2 post-install ╔©║╪╔╡╔ц╔х╓Р Makefile ╓к╡ц╓╗╓ф╔╓╔С╔╧╔х║╪╔К╓╣╓Л╓© info ╔у╔║╔╓╔К╓к╓д╓╓╓ф╓о, install-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,11 @@ 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> PLIST ╓Рйт╫╦╓╥╓ф, ф╠╓╦ф╞╓╜╓Р╓╧╓К @exec й╦, ╓╫╓Л╓к pkg_delete ╓н╓©╓А╓к @unexec й╦╓Р╡ц╓╗╓ф╓╞╓ю╓╣╓╓. Index: pkg/PLIST =================================================================== RCS file: /usr/cvs/ports/editors/emacs/pkg/PLIST,v retrieving revision 1.15 diff -u -r1.15 PLIST --- PLIST 1997/03/04 08:04:00 1.15 +++ PLIST 1997/05/20 10:25:12 1.17 @@ -16,7 +14,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 ╔у╔║╔╓╔К╓╙╓Х╓с dir ╔у╔║╔╓╔К╓Р╨Н╓К @exec ╔Ё╔ч╔С╔и╓Х╓Й╦Е╓к╓╙╓╚╓й╓╠╓Л╓п╓й╓Й╓ч╓╩╓С. ╔ф╔╧╔х ╓Р╓╥╓ф╫пмХ╠и╓╗╓к╢╤иЧ╓╥╓ч╓╥╓Г╓╕ :) ЁфцйЁ╛╓на╟╦Е╓к dir ╔у╔║╔╓╔К╓Р╔а╔╖╔ц╔╞╓╥╓ч╓╥╓Г╓╕. <filename>pkg/</filename> ╔╣╔ж╔г╔ё╔Л╔╞╔х╔Й ╓ч╓ю©╗╓Л╓ф╓╓╓й╓╓, ╓╓╓╞╓д╓╚╓н╓Ё╓д╓╛ pkg/ ╔╣╔ж╔г╔ё╔Л╔╞╔х╔Й╓к╓о╓╒╓Й, ╩Ч╓х╓╥╓фйьмЬ╓г╓╥╓Г╓╕. <filename>MESSAGE</filename> ╓Б╓╥╔╓╔С╔╧╔х║╪╔К╓╧╓К©м╓к╔А╔ц╔╩║╪╔╦╓Ри╫╪╗╓╧╓Ки╛мв╓╛╓╒╓К╬Л╧Г╓к╓о, ╓╫╓н╔А╔ц╔╩║╪╔╦╓Р pkg/MESSAGE ╓кцж╓╞╓Ё╓х╓╛╓г╓╜╓ч╓╧. ╓Ё╓н╣║г╫╓о pkg_add ╓н╦Е╓нди╡ц╓н╔╓╔С╔╧╔х║╪╔К╪ЙбЁ╓╜╓Ри╫╪╗╓╧╓К╓х╓╜╓й╓и╓к╫ейУ╓╥╓ч╓╧. pkg/MESSAGE ╔у╔║╔╓╔К╓о pkg/PLIST ╓к╡ц╓╗╓Ки╛мв╓о╓╒╓Й╓ч╓╩╓С. ╓ч╓©, ╓Б╓╥╔Ф║╪╔╤╓╛ package ╓г╓о╓й╓╞ port ╓Р╩хмя╓╥╓ф╓╓╓К╬Л╧Г╓к╓о╪╚ф╟е╙╓к╓ои╫╪╗╓╣╓Л╓ч╓╩╓С╓н╓г, лю╪╗е╙╓к post-install ╓ги╫╪╗╓╧╓К╓Х╓╕╓к╓╧╓К╓ы╓╜╓г╓╥╓Г╓╕. <filename>INSTALL</filename> ╔п╔╓╔й╔Й╔я╔ц╔╠║╪╔╦╓╛ pkg_add ╓г╔╓╔С╔╧╔х║╪╔К╓╣╓Л╓К╓х╓╜╓к╪б╧т╓╣╓Л╓Ки╛мв╓╛╓╒╓К╔Ё╔ч╔С╔и╓╛╓╒╓Л╓п, pkg/INSTALL ╔╧╔╞╔Й╔в╔х╓Р╩х╓ц╓ф╪б╧т╓╧╓К╓Ё╓х╓╛╓г╓╜╓ч╓╧. ╓Ё╓н╔╧╔╞╔Й╔в╔х╓о╪╚ф╟е╙╓к package ╓к╡ц╓╗╓И╓Л, pkg_add ╓к╓Х╓ц╓ффС╡С╪б╧т╓╣╓Л╓ч╓╧. ╓о╓╦╓А╓о INSTALL ${PKGNAME} PRE-INSTALL ╓х╪б╧т╓╣╓Л, фС╡Слэ╓к╓о INSTALL ${PKGNAME} POST-INSTALL ╓х╪б╧т╓╣╓Л╓ч╓╧. ╓и╓а╓И╓н╔Б║╪╔и╓г╪б╧т╓╣╓Л╓ф╓╓╓К╓╚╓о $2 ╓Рд╢╓ы╓К╓Ё╓х╓к╓Х╓ц╓ф╓О╓╚╓Й╓ч╓╧. ╢д╤╜йя©Т PKG_PREFIX ╓к╓о package ╓╛╔╓╔С╔╧╔х║╪╔К╓╣╓Л╓К╔г╔ё╔Л╔╞╔х╔Й╓╛юъдЙ╓╣╓Л╓ч╓╧. ╬э╨ы╓о &man.pkg.add.1; ╓Р╦╚╓ф╓╞╓ю╓╣╓╓. port ╓Р make install ╓г╔╓╔С╔╧╔х║╪╔К╓╧╓К╓х╓╜╓к╓о╓Ё╓н╔╧╔╞╔Й╔в╔х╓о╪╚ф╟е╙╓к╪б╧т╓╣╓Л╓ч╓╩╓С. ╓Б╓╥╪б╧т╓╣╓Л╓Ки╛мв╓╛╓╒╓К╓й╓И╓п port ╓н Makefile ╓╚╓Илю╪╗е╙╓к╦ф╓жи╛мв╓╛╓╒╓Й╓ч╓╧. <filename>REQ</filename> port ╓╛ (╔╓╔С╔╧╔х║╪╔К╓╣╓Л╓К╔╥╔╧╔ф╔Ю╓н╬Убж╓к╓Х╓ц╓ф) ╔╓╔С╔╧╔х║╪╔К╓╣╓Л╓К╓ы╓╜╓╚, ╓╣╓Л╓й╓╓╓ы╓╜╓╚╤Хйл╓╧╓Ки╛мв╓╛╓╒╓К╓х╓╜╓к╓о, мв╥О(requirements) ╔╧╔╞╔Й╔в╔х pkg/REQ ╓Р╨Н╓К╓Ё╓х╓╛╓г╓╜╓ч╓╧. ╓Ё╓Л╓о╔╓╔С╔╧╔х║╪╔К╓╙╓Х╓с╨О╫Э (package ╓н╨О╫Э) ╓н╩Ч╓к╪╚ф╟е╙╓к╪б╧т╓╣╓Л, ╓╫╓Л╓И╓╛╫ХмЩ╓╣╓Л╓К╓ы╓╜╓╚╓Р╥ХдЙ╓╥╓ч╓╧. make ╓нйя©Т╓к╓╒╓О╓╩╓© <filename>PLIST</filename> ╓нйя╧╧ ╓╓╓╞╓д╓╚╓н port, фц╓к p5-ports ╓й╓и╓о configure ╓н╔╙╔в╔╥╔Г╔С (╓╒╓К╓╓╓о, p5-ports ╓н╬Л╧Г╓о perl ╓н╔п║╪╔╦╔Г╔С) ╓к╓Х╓ц╓ф PLIST ╓Рйя╓╗╓Ки╛мв╓╛╓╒╓Й╓ч╓╧. ╓Ё╓Л╓Рмф╟в╓к╪б╦╫╓╧╓К╓©╓А╓к PLIST цФ╓н %%OSREL%%, %%PERL_VER%%, %%PERL_VERSION%% ╓ое╛юз╓кцж╓╜╢╧╓╗╓И╓Л╓К╓Х╓╕╓к╓й╓ц╓ф╓╓╓ч╓╧. %%OSREL%% ╓нцм╓о╔╙╔з╔Л║╪╔ф╔ё╔С╔╟╔╥╔╧╔ф╔Ю╓н©Т╩З╓ги╫╓╣╓Л╓©╔Й╔с╔╦╔Г╔С╓г╓╧ (╓©╓х╓╗╓п 2.2.7). %%PERL_VERSION%% ╓о perl ╓н╔п║╪╔╦╔Г╔Схж╧Фа╢бн (╓©╓х╓╗╓п 5.00502) ╓г, %%PERL_VER%% ╓о╔п║╪╔╦╔Г╔Схж╧Ф╓╚╓И╔я╔ц╔а╔Л╔ы╔К╓Р╟З╓╓╓©╓Б╓н╓г╓╧ (╓©╓х╓╗╓п 5.005). б╬╓нцж╓╜╢╧╓╗╓╛и╛мв╓г╓╒╓Л╓п, PLIST_SUB йя©Т╓к VAR=VALUE ╓х╓╓╓╕╥а╪╟╓н╔з╔╒╓н╔Й╔╧╔х╓РюъдЙ╓╧╓К╓Ё╓х╓к╓Х╓ц╓ф, PLIST цФ╓н %%VAR%% ╓о VALUE ╓кцж╓╜╢╧╓╗╓И╓Л╓ч╓╧. ╓©╓х╓╗╓п╔п║╪╔╦╔Г╔С╓к╦гм╜╓н╓©╓╞╓╣╓С╓н╔у╔║╔╓╔К╓Р╔╓╔С╔╧╔х║╪╔К╓╧╓К╬Л╧Г╓к╓о, Makefile ╓к OCTAVE_VERSION= 2.0.13 PLIST_SUB= OCTAVE_VERSION=${OCTAVE_VERSION} ╓х╫Я╓╓╓ф, PLIST цФ╓н╔п║╪╔╦╔Г╔Схж╧Ф╓╛и╫╓О╓Л╓К╓╧╓ы╓ф╓н╓х╓Ё╓М╓к, %%OCTAVE_VERSION%% ╓х╫Я╓╜╓ч╓╧. ╓Ё╓н╓Х╓╕╓к╓╥╓ф╓╙╓╠╓п, port ╓Р╔╒╔ц╔в╔╟╔Л║╪╔и╓╧╓К╓х╓╜╓к, ╡©╫╫╧т (╓х╓╜╓х╓╥╓ф, ╡©и╢╧т) ╓Б PLIST ╓Р╫Я╓╜бь╓╗╓й╓╓╓г╓╧╓ъ╓ч╓╧. ╓Ё╓н╫Я╓╜╢╧╓╗╓о (╔ч╔к╔Е╔╒╔К╓нди╡ц╓Б) do-install ╓х post-install ╔©║╪╔╡╔ц╔х╓н╢ж╓к PLIST ╓Рфи╓ъ TMPPLIST (╔г╔у╔╘╔К╔х╓о WRKDIR/.PLIST.mktmp) ╓к╫Я╓╜╧Ч╓Ю╓Ё╓х╓к╓Х╓ц╓ф╧т╓й╓О╓Л╓ч╓╧. ╓Б╓╥, ╓╒╓й╓©╓н port ╓╛ PLIST ╓Р╪б╧т╩Ч╓кю╦ю╝╓╧╓К╓н╓г╓╒╓Л╓п, do-install ╓н╢ж╓╚╓╫╓на╟╓к╧т╓╕╓Х╓╕╓к╓╥╓ф╓╞╓ю╓╣╓╓. ╓ч╓©, ╫Я╓╜╓╚╓╗╓И╓Л╓©╓╒╓х╓н╔у╔║╔╓╔К╓Рйт╫╦╓╧╓Ки╛мв╓╛╓╒╓К╬Л╧Г╓к╓о, post-install ╓г TMPPLIST ╓Р╫Я╓╜╓╚╓╗╓ф╓╞╓ю╓╣╓╓. <filename>pkg</filename> ╔╣╔ж╔г╔ё╔Л╔╞╔х╔Й╓к╓╒╓К╔у╔║╔╓╔Кл╬╓нйя╧╧ pkg ╔╣╔ж╔г╔ё╔Л╔╞╔х╔Й╓к╓╒╓К╔у╔║╔╓╔К╓о╓╧╓ы╓фйя©Т╓Р╩хмя╓╥╓фдЙ╣а╓╣╓Л╓ф╓╓╓ч╓╧╓н╓г, и╛мв╓г╓╒╓Л╓п Makefile цФ╓гйя╧╧╡дг╫╓г╓╧. ╓╓╓╞╓д╓╚╓н ports ╓г╟Л╓д╓н pkg ╔╣╔ж╔г╔ё╔Л╔╞╔х╔Й╓Р╤╕м╜╓╧╓К╬Л╧Г╓Д, ╬Е╣╜╓н╔у╔║╔╓╔К╓к╫Я╓╜╧Ч╓Юи╛мв╓╛╓╒╓К╓х╓╜╓й╓ифц╓кйьмЬ╓г╓╧ (pkg ╔╣╔ж╔г╔ё╔Л╔╞╔х╔Й╓кд╬юэ╫Я╓╜╧Ч╓Ю╓н╓╛ни╓╞╓й╓╓мЩмЁ╓к╓д╓╓╓ф╓о WRKDIR ╟йЁ╟╓ь╓н╫Я╓╜╓Ё╓ъ ╓Р╩╡╬х╓╥╓ф╓╞╓ю╓╣╓╓). ╟й╡╪╓╛йя©Тл╬╓х╓╫╓н╔г╔у╔╘╔К╔хцм╓ни╫╓г╓╧. йя©Тл╬ ╔г╔у╔╘╔К╔хцм COMMENT ${PKGDIR}/DESCR DESCR ${PKGDIR}/DESCR PLIST ${PKGDIR}/PLIST PKGINSTALL ${PKGDIR}/INSTALL PKGDEINSTALL ${PKGDIR}/DEINSTALL PKGREQ ${PKGDIR}/REQ PKGMESSAGE ${PKGDIR}/MESSAGE PKG_ARGS ╓Р╬Е╫Я╓╜╓╩╓╨╓к╓Ё╓Л╓И╓нйя©Т╓Рйя╧╧╓╧╓К╓Х╓╕╓к╓╥╓ф╓╞╓ю╓╣╓╓. PKG_ARGS ╓Рйя╧╧╓╧╓К╓х, ╓Ё╓Л╓И╓н╔у╔║╔╓╔К╓о port ╓╚╓Ию╣╓╥╓╞ /var/db/pkg ╓к╔╓╔С╔╧╔х║╪╔К╓╣╓Л╓й╓╞╓й╓Й╓ч╓╧. ╔И╔╓╔╩╔С╔╧╬Е╓нлДбЙ ╔╫╔у╔х╔╕╔╖╔╒╓к╓Х╓ц╓ф╓ою╘╦б╓н╦╥╓╥╓╓ ╔И╔╓╔╩╔С╔╧╓╛╓д╓╓╓ф╓╜╓©╓Й, к║н╖е╙╓клДбЙ╓╛╓╒╓К╓╚╓Бцн╓Л╓ч╓╩╓С (PKP ╓н╦ЬЁ╚╦╟╟е╧Ф╓нфц╣Ж, ITAR (╟е╧Ф╡╫╔╫╔у╔х╔╕╔╖╔╒╓нм╒╫п) ╓й╓и╓╛нЦ╓х╓╥╓ф╓╒╓╡╓И╓Л╓ч╓╧). ╓╫╓Л╓И╓Р╓и╓╕╟╥╓╗╓п╓╓╓╓╓╚╓о, ╔И╔╓╔╩╔С╔╧╓нй╦лл╓к╓Х╓ц╓ф╓╣╓ч╓╤╓ч╓й╬Л╧Г╓╛╓╒╓Й╓ч╓╧. ╔╫╔у╔х╔╕╔╖╔╒╟э©╒╪т╓х╓╥╓ф, ╓╒╓й╓©╓к╓о╔И╔╓╔╩╔С╔╧╓Р╓Х╓╞фи╓ъ FreeBSD ╔в╔М╔╦╔╖╔╞╔х╓╛ FTP ╓ч╓©╓о CD-ROM ╓ггшиш╓╥╓ф╓о╓╓╓╠╓й╓╓╔╫╔у╔х╔╕╔╖╔╒╓Ргшиш╓╥╓ф╓╥╓ч╓╕╓Ё╓х╓н╓й╓╓╓Х╓╕цМ╟у╓╧╓К╣алЁ╓╛╓╒╓Й╓ч╓╧. ╡©╓╚╣©лД╓╛╓╒╓К╬Л╧Г╓к╓о &a.ports; ╓кй╧╓╓╓ф╓ъ╓ф╓╞╓ю╓╣╓╓. ╓Х╓╞╦╚╓И╓Л╓К╔╠║╪╔╧╓кбп╫Х╓╧╓К╓©╓А╓к, Makefile ╓к╩ьдЙ╓г╓╜╓КфС╓д╓нйя©Т╓╛мя╟у╓╣╓Л╓ф╓╓╓ч╓╧. ╔╫╔у╔х╔╕╔╖╔╒╓км╜╫Ч╨фгшиш╓Р╤ь╓╨╓К╓х╓╓╓╕╪Я╩щ╓н╔И╔╓╔╩╔С ╔╧╓╛╓д╓╓╓ф╓╜╓©╬Л╧Г╓к╓о, NO_CDROM ╓х╓╓╓╕йя©Т╓к╓╫╓нмЩмЁ╓Р╣╜╫р╓╥╓ф╓╞╓ю╓╣╓╓. ╓О╓©╓╥╓©╓а╓о╓Ё╓Л╓╛╓д╓╓╓ф╓╓╓К port ╓Р CD-ROM ╔Й╔Й║╪╔╧╓кфЧ╓Л╓й╓╓╓Х╓╕╓к╓╥╓ч╓╧╓╛, ╔╙╔Й╔╦╔й╔К╓н╔╫║╪╔╧╔у╔║╔╓╔К╓х package ╓Р FTP ╓г╪Х╓Л╓К╓Х╓╕╓к╓╥╓ф╓╙╓╜╓ч╓╧. ╓Б╓╥ю╦ю╝╓╣╓Л╓К package ╓╛╦д║╧╓н╔╣╔╓╔х╓гфх╪╚╓к╧╫цш╓╣╓Л╓Ки╛мв╓╛╓╒╓ц╓©╓Й, ╔И╔╓╔╩╔С╔╧╓к╓Х╓ц╓фю╦ю╝╓╣╓Л╓К╔п╔╓╔й╔Й╓╛гшиш╓г╓╜╓й╓╓╬Л╧Г╓к╓о NO_PACKAGE йя©Т╓к╓╫╓нмЩмЁ╓Р╣╜╫р╓╥╓ф╓╞╓ю╓╣╓╓. ╓╫╓н╓Х╓╕╓й package ╓о FTP ╔╣╔╓╔х╓кцж╓╚╓Л╓©╓Й, ╔Й╔Й║╪╔╧ ╩Ч╓н CD-ROM ╓ьфЧ╓И╓й╓╓╓Х╓╕╓к╓╥╓ч╓╧. ╓©╓ю╓╥, ╓╓╓╨╓Л╓н╬Л╧Г╓Б distfile ╓о (FTP ╓Д CD-ROM ╓к) ╢ч╓ч╓Л╓К╓Х╓╕╓к╓й╓Й╓ч╓╧. ╩хмя╪т╓к╓Х╓ц╓ф╓ок║н╖╬Е╓нлДбЙ╓╛ю╦╓╦╓К port (╟е╧Ф╡╫╔╫╔у╔х╔╕╔╖╔╒╓й╓и) ╓н╬Л╧Г, ╓╒╓К╓╓╓о╬╕мямЬмя╓Р╤ь╓╨╓К╓х╔И╔╓╔╩╔С╔╧╓к╫Я╓╓╓ф╓╒╓К╬Л╧Г╓к╓о, RESTRICTED╓х╓╓╓╕йя©Т╓к╓╫╓нмЩмЁ╓РфЧ╓Л╓ф╓╞╓ю╓╣╓╓. ╓Ё╓н╬Л╧Г╓к╓о, ╔╫║╪╔╧╔у╔║╔╓╔К╓Д package ╓╛ FreeBSD ╓н FTP ╔╣╔╓╔х╓к╓Бцж╓╚╓Л╓й╓╞╓й╓Й╓ч╓╧. GNU ╟Лхл╦Ьм╜╩хмя╣ЖбЗ╫Я (GPL) ╓о, ╔п║╪╔╦╔Г╔С 1, 2 ╓х╓Б port ╨Ню╝╬Е╡©╓ИлДбЙ╓к╓о╓й╓Й╓ч╓╩╓С. ╓Б╓╥╓╒╓й╓©╓╛╔╫║╪╔╧╔д╔Й║╪╢имЩ╪т (committer) ╓г╓╒╓Л╓п, ╔╫║╪╔╧╔д╔Й║╪╓к╓Ё╓н╓Х╓╕╓й port ╓РфЧ╓Л╓К╨щ╓к ports/LEGAL ╔у╔║╔╓╔К╓Р╫Я╓╜╢╧╓╗╓К╓н╓Рк╨╓Л╓й╓╓╓Х╓╕╓к╓╥╓ф╓╞╓ю╓╣╓╓. ╔╒╔ц╔в╔╟╔Л║╪╔и port ╓н╔п║╪╔╦╔Г╔С╓╛╦╤╨Н╪т╓╚╓И╓н╓Б╓н╓кхФ╓ы╓ф╦е╓╓╓Ё╓х╓к╣╓╓╛╓д╓╓╓©╓И, ╓ч╓╨╓о╓╒╓й╓©╓н╩Щ╓ц╓ф╓╓╓К port ╓╛╩Д╓©╓а╓н╨г©╥╓н╓Б╓н (╔ъ╔И║╪╔╣╔╓╔х╓н ports/ports-current ╓х╓╓╓╕╔г╔ё╔Л╔╞╔х╔Й╓к╓╒╓Й╓ч╓╧) ╓г╓╒╓К╓Ё╓х╓РЁнг╖╓╥╓ф╓╞╓ю╓╣╓╓. ╓ч╓©, Ports Collection а╢бн╓Р╨г©╥╓н╬Убж╓кйщ╓д╓©╓А╓к CVSup ╓РмЬмя╓╧╓К╓Ё╓х╓Б╓г╓╜╓ч╓╧. ╬э╓╥╓╞╓о FreeBSD ╔о╔С╔и╔ж╔ц╔╞╓Р╓╢мВ╓╞╓ю╓╣╓╓. ╪║╓к port ╓н Makefile ╓к MAINTAINER (йщ╪Иц╢еЖ╪т) ╓н╔╒╔и╔Л╔╧╓╛╫Я╓╓╓ф╓╒╓К╬Л╧Г╓к╓о, ╓╫╓н©м╓к╔А║╪╔К╓Р╫п╓╥╓ф╓ъ╓ч╓╥╓Г╓╕. йщ╪Иц╢еЖ╪т╓н©м╓╛╓╧╓г╓к╔╒╔ц╔в╔╟╔Л║╪╔и╓н╫ЮхВ╓Р╓╥╓ф╓╓╓К╓╚╓Бцн╓Л╓ч╓╩╓С╓╥, (©╥╓╥╓╓╔п║╪╔╦╔Г╔С╓н╟бдЙеы╓клДбЙ╓╛╓╒╓К╓й╓и) ╓╒╓╗╓ф╔╒╔ц╔в╔╟╔Л║╪╔и╓Р╓╥╓й╓╓мЩмЁ╓╛╓╒╓К╓н╓╚╓Бцн╓Л╓ч╓╩╓С. йщ╪Иц╢еЖ╪т╓к╔╒╔ц╔в╔╟╔Л║╪╔и╓Р╓╥╓ф╓╞╓Л╓хмЙ╓ч╓Л╓©╬Л╧Г, ╓╒╓К╓╓╓о, ╓╫╓Б╓╫╓Б port ╓н Makefile ╓кйщ╪Иц╢еЖ╪т╓╛╫Я╓╓╓ф╓й╓╓╬Л╧Г╓й╓и╓о, ╓╒╓й╓©╓╛╔╒╔ц╔в╔╟╔Л║╪╔и╓Р╓╥╓ф╓╞╓ю╓╣╓К╓х╫У╓╚╓Й╓ч╓╧. ╓╫╓н╬Л╧Г╓к╓о╔╒╔ц ╔в╔╟╔Л║╪╔и╓Р╓╥╓©╦Е, йя╧╧а╟╓хйя╧╧╦Е╓н╔г╔ё╔Л╔╞╔х╔Й╓н╨ф╣╒е╙ diff (unified diff ╓х context diff ╓н╓и╓а╓И╓г╓Б╓╓╓╓╓н╓г╓╧╓╛, port ╓н╔Ё╔ъ╔ц╔©║╪цё╓о unified diff ╓нйЩ╓Р╧╔╓Ю╓Х╓╕╓г╓╧) ╓Р╓х╓ц╓фаВ╓ц╓ф╓╞╓ю╓╣╓╓ (╓©╓х╓╗╓пйя╧╧а╟╓н╔г╔ё╔Л╔╞╔х╔Й╓╛ superedit.bak ╓х╓╓╓╕л╬а╟╓г╓х╓ц╓ф╓╒╓Й, йя╧╧╦Е╓н╓Б╓н╓╛ superedit ╓кфЧ╓ц╓ф╓╓╓К╓й╓И, diff -ruN superedit.bak superedit ╓н╥К╡л╓РаВ╓ц╓ф╓╞╓ю╓╣╓╓). diff ╓н╫пно╓Р╦╚╓ф, ╓╧╓ы╓ф╓нйя╧╧╓╛ю╣╓╥╓╞╓й╓╣╓Л╓ф╓╓╓К╓╚Ёнг╖╓╥╓ф╓╞╓ю╓╣╓╓. йя╧╧╡у╫Й╓к╓д╓╓╓ф╓о, &man.send-pr.1; (╔╚╔ф╔╢╔Й╓о ports) ╓к diff ╓н╫пно╥К╡л╓Ре╨╓╗╓ф, ╓О╓©╓╥╓©╓а╓каВ╓ц╓ф╓Б╓И╓╕╓н╓╛╟Лхжни╓╓╓г╓╧. commit ╓╧╓К╨щ╓к CVS ╓клюЁн╓к╣╜╫р╓╥╓й╓╠╓Л╓п╓й╓И╓й╓╓╓н╓г, иу╓╠╡ц╓╗╓©╓Й╨О╫Э╓╥╓©╓Й╓╥╓©╔у╔║╔╓╔К╓╛╓╒╓Л╓п╓╫╓Л╓к╓д╓╓╓ф╫Я╓╓╓ф╓╙╓╓╓ф╓╞╓ю╓╣╓╓. ╓Б╓╥ diff ╓нбГ╓╜╓╣╓╛ 20 KB дЬеы╓Рд╤╓╗╓К╓Х╓╕╓г╓╒╓Л╓п, ╟╣╫л╓╥╓©╓Б╓н╓Р uuencode ╓╥╓ф╓╞╓ю╓╣╓╓. ╓╫╓╕╓г╓й╓╠╓Л╓п╓╫╓н╓ч╓ч PR ╓кфЧ╓Л╓К╓ю╓╠╓г╧╫╓╓╓ч╓╩╓С. ╥╚╓Ййж╓╥╓к╓й╓Й╓ч╓╧╓╛, ╢Шб╦╓н ports ╓нйя╧╧╓РаВ╓К╓х╓╜╓к╓о &man.shar.1; ╓г╓о╓й╓╞ &man.diff.1; ╓Р╩хмя╓╥╓ф╓╞╓ю╓╣╓╓! ╓Д╓ц╓ф╓╓╓╓╓Ё╓х╓х╓╓╓╠╓й╓╓╓Ё╓х ╓Ё╓нюА╓г╓о╔╫╔у╔х╔╕╔╖╔╒╓Р port ╓╧╓К╬Е╓г, ни╓╞╓╒╓КмН╓╥╥Й╓й╓и╓к╓д╓╓╓фюБлю╓╥╓ч╓╧. ╓Ё╓н╔Й╔╧╔х╓Р╩х╓ц╓ф╓╒╓й╓©╪╚©х╓╛╨Ню╝╓╥╓© port ╓н╔а╔╖╔ц╔╞╓о╓Б╓х╓Х╓Й, PR ╔г║╪╔©╔ы║╪╔╧╓к╓╒╓К, б╬╓н©м╓╛╨Ню╝╓╥╓© port ╓н╔а╔╖╔ц╔╞╓Б╓г╓╜╓ч╓╧. ╓╒╓й╓©╓╛╔а╔╖╔ц╔╞╓╥╓© port ╓к╓д╓╓╓ф╓н╔Ё╔А╔С╔х╓Р╔п╔╟йС╧П╓х╟Лхле╙╓йоюи╬╓к╓╥╓©╓╛╓ц╓фаВ╓ц╓ф╓╞╓ю╓╣╓╓. PR ╔г║╪╔©╔ы║╪╔╧╓к╓╒╓К port ╓Р╔а╔╖╔ц╔╞╓╧╓К╓х, ╓О╓©╓╥╓©╓а╓╛╓╫╓Л╓И╓Р commit ╓╧╓К╓н╓РаА╓╞╓╥, ╓╒╓й╓©╓╛╡©╓Р╓╥╓ф╓╓╓К╓╚мЩ╡Р╓╥╓ф╓╓╓К╓Ё╓х╓Б╪╗╓╥╓ч╓╧. ╔п╔╓╔й╔Й╓н strip ╔п╔╓╔й╔Й╓о strip ╓╥╓ф╓╞╓ю╓╣╓╓. ╔╙╔Й╔╦╔й╔К╓н╔╫║╪╔╧╓╛╔п╔╓╔й╔Й╓Р strip ╓╥╓ф╓╞╓Л╓К╬Л╧Г╓они╓╓╓г╓╧╓╛, ╓╫╓╕╓г╓й╓╓╬Л╧Г╓к╓о port ╓н Makefile ╓╛ install ╔©║╪╔╡╔ц╔х╓Р╩Щ╓ц╓ф╓╓╓К╓й╓И BSD_INSTALL_PROGRAM ╓Р, ╩Щ╓ц╓ф╓╓╓й╓╓╓й╓И strip ╓╧╓К╓©╓А╓н post-install ╔К║╪╔К╓Рди╡ц╓╥╓ф strip ╓╧╓К╓Х╓╕╓к╓╧╓К╓х╓Х╓╓╓г╓╥╓Г╓╕. ╓©╓х╓╗╓п╓Ё╓С╓йиВ╓к╓й╓Й╓ч╓╧: post-install: strip ${PREFIX}/bin/xdl ╔╓╔С╔╧╔х║╪╔К╓╣╓Л╓©╪б╧т╥а╪╟╓╛╓╧╓г╓к strip ╓╣╓Л╓ф╓╓╓К╓╚╓и╓╕╓╚╓о file ╔Ё╔ч╔С╔и╓гЁнг╖╓г╓╜╓ч╓╧. not stripped ╓хи╫╪╗╓╣╓Л╓й╓╠╓Л╓п strip ╓╣╓Л╓ф╓╓╓К╓Ё╓х╓Р╪╗╓╥╓ф╓╓╓ч╓╧. <makevar>INSTALL_*</makevar> ╔ч╔╞╔М ╓╒╓й╓©╪╚©х╓н *-install ╔©║╪╔╡╔ц╔х╓г╔у╔║╔╓╔К╓ню╣╓╥╓╓╔Б║╪╔и╓х╔╙║╪╔й╓Рйщ╬з╓╧╓К╓©╓А╓к, и╛╓╨ bsd.port.mk ╓гдС╤║╓╣╓Л╓ф╓╓╓К╔ч╔╞╔М╓Р╩хмя╓╥╓ф╓╞╓ю╓╣╓╓. ${INSTALL_PROGRAM} ╓о╪б╧т╡дг╫╓й╔п╔╓╔й╔Й╓Р╔╓╔С╔╧╔х║╪╔К (╓╥, ╓╫╓н╡АдЬ╓г strip ╫ХмЩ)╓╧╓К╔Ё╔ч╔С╔и╓г╓╧. ${INSTALL_SCRIPT} ╓о╪б╧т╡дг╫╓й╔╧╔╞╔Й╔в╔х╓Р╔╓╔С╔╧╔х║╪╔К╓╧╓К╔Ё╔ч╔С╔и╓г╓╧. ${INSTALL_DATA} ╓о╤╕м╜╡дг╫╓й╔г║╪╔©╓Р╔╓╔С╔╧╔х║╪╔К╓╧╓К╔Ё╔ч╔С╔и╓г╓╧. ${INSTALL_MAN} ╓о╔ч╔к╔Е╔╒╔К╓х╓╫╓нб╬╓нй╦╫Я╓Р╔╓╔С╔╧╔х║╪╔К╓╧╓К╔Ё╔ч╔С╔и╓г╓╧ (╟╣╫л╓о╓╥╓ч╓╩╓С). ╓Ё╓Л╓И╓о╢Пкэе╙╓к install ╔Ё╔ч╔С╔и╓ке╛юз╓й╔у╔И╔╟╓Рм©╓╗╓©╓Б╓н╓г╓╧. ╓╫╓Л╓И╓о distfile ╓н Makefile ╓г, ф╛╓к BSD_ ╓╛иу╓╠╓И╓Л╓© (╓д╓ч╓Й BSD_INSTALL_PROGRM ╓х╓╓╓╕╓Х╓╕╓й) ╥а╓г╩х╓╕╓Ё╓х╓╛╓г╓╜╓ч╓╧. ╓и╓н╓Х╓╕╓к╓Ё╓Л╓И╓Р╩хмя╓╧╓К╓╚╓о╟й╡╪╓ннЦ╓Р╦╚╓ф╓╞╓ю╓╣╓╓. <makevar>WRKDIR</makevar> WKRDIR ╓нЁ╟╓н╔у╔║╔╓╔К╓к╓о╓й╓к╓Б╫Я╓╜╧Ч╓ч╓й╓╓╓Х╓╕╓к ╓╥╓ф╓╞╓ю╓╣╓╓. WRKDIR ╓о ports ╓н╔с╔К╔ицФ╓к╫Я╓╜╧Ч╓Ё╓А╓К╓Ё╓х╓╛йщ╬з╓╣╓Л╓ф╓╓╓Кмё╟Л╓н╬Л╫Й╓г╓╧ (CDROM ╓╚╓И╓н ports ╓н╔Ё╔С╔я╔╓╔К ╓Р╩╡╬х). PKGDIR ╓к╓╒╓К╔у╔║╔╓╔К╓Р╫╓ю╣╓╧╓Ки╛мв╓╛╓╒╓К╓х╓╜╓к╓ойя©Т╓н╨фдЙ╣а╓к╓Х╓ц╓ф╧т╓й╓╓, ╬Е╫Я╓╜╓о╓╥╓й╓╓╓г╓╞╓ю╓╣╓╓. <makevar>WRKDIRPREFIX</makevar> WRKDIRPREFIX ╓Рб╨╫е╓╥╓ф╓╓╓К╓Ё╓х╓РЁнг╖╓╥╓ф╓╞╓ю╓╣╓╓. фц╓к, йл╓н port ╓н WRKDIR ╓Р╩╡╬х╓╥╓ф╓╓╓К╓х╓╜╓к╓о╣╓╓Риу╓╠╓ф╓╞╓ю╓╣╓╓. ю╣╓╥╓╓╬Л╫Й╓о, WRKDIRPREFIXPORTSDIR/subdir/name/work ╓г╓╧, PORTSDIR/subdir/name/work ╓Д .CURDIR/../../subdir/name/work ╓г╓о╓╒╓Й╓ч╓╩╓С. ╓ч╓©, ╪╚й╛╓г WRKDIR дЙ╣а╓╧╓К╓х╓╜╓к╓оюХф╛╓к ${WRKDIRPREFIX}${.CURDIR} ╓╛иу╓╓╓ф╓╓╓К╓Ё╓х╓РЁнг╖╓╥╓ф╓╞╓ю╓╣╓╓. OS ╓Д OS ╓н╔п║╪╔╦╔Г╔С╓н╤Хйл port ╓н╡АдЬ╓г, ╫╓ю╣╓Д╓и╓н╔п║╪╔╦╔Г╔С╓н UNIX ╓гф╟╓╞╓╚╓к╓Х╓К╬Р╥О╓д╓╜╔Ё╔С╔я╔╓╔К╓й╓и╓╛и╛мв╓й╔Ё║╪╔и╓к╫п╡Я╓╕╓╚╓Бцн╓Л╓ч╓╩╓С. ╓╫╓н╓Х╓╕╓й╬Р╥О╓д╓╜╔Ё╔С╔я╔╓╔К╓й╓и╓н╓©╓А╓нйя╧╧╓Р╧т╓й╓╕╓х╓╜╓к╓о FreeBSD 1.x ╔╥╔╧╔ф╔Ю╓ь╓н╟э©╒╓Д CSRG ╓н 4.4BSD, BSD/386, 386BSD, NetBSD, OpenBSD ╓й╓и╓н, б╬╓н BSD ╔╥╔╧╔ф╔Ю╓ь╓н╟э©╒╓╛╡дг╫╓й╓Х╓╕╓к, ╓г╓╜╓К╓ю╓╠хфмяе╙╓ййя╧╧╓Р╧т╓й╓╕╓Ё╓х╓Р©╢╓╛╓╠╓ф╓╞╓ю╓╣╓╓. 4.3BSD/Reno (1990) ╓╙╓Х╓с╓╫╓Л╓Х╓Й©╥╓╥╓╓ BSD ╓н╔п║╪╔╦╔Г╔С╓Р╦е╓╓╔п║╪╔╦╔Г╔С╓х╤Хйл╓╧╓К╓к╓о BSD ╔ч╔╞╔М╓РмЬмя╓╧╓К╓н╓╛╓Х╓╓╓г╓╥╓Г╓╕. ╓Ё╓Л╓о <sys/param.h> ╓гдЙ╣а╓╣╓Л╓ф╓╓╓ч╓╧. ╓Ё╓н╔у╔║╔╓╔К╓╛╓╧╓г╓к╔╓╔С╔╞╔К║╪╔и╓╣╓Л╓ф╓╓╓Л╓пни╓╓╓н╓г╓╧╓╛, ╓Б╓╥╓╫╓╕╓г╓й╓╓╬Л╧Г╓к╓о, ╟й╡╪╓н╔Ё║╪╔и╓Р╓╫╓н .c ╔у╔║╔╓╔К╓не╛еЖ╓й╬Л╫Й╓к╡ц╓╗╓ф╓╞╓ю╓╣╓╓. #if (defined(__unix__) || defined(unix)) && !defined(USG) #include <sys/param.h> #endif ╓Ё╓Л╓И╓нфС╓д╓н╔╥╔С╔э╔К╓╛дЙ╣а╓╣╓Л╓ф╓╓╓К╔╥╔╧╔ф╔Ю╓к╓ои╛╓╨ sys/param.h ╓╛╓╒╓К╓о╓╨╓г╓╧. ╓Б╓╥╓╫╓╕╓г╓й╓╓╔╥╔╧╔ф╔Ю╓Рх╞╦╚╓╥╓©╓И, &a.ports; ╓ч╓г╔А║╪╔К╓РаВ╓ц╓ф╓О╓©╓╥╓©╓а╓кеа╓╗╓ф╓╞╓ю╓╣╓╓. ╓╒╓К╓╓╓о, GNU Autoconf ╓н╔╧╔©╔╓╔К╓Р╩хмя╓╧╓К╓Ё╓х╓Б╓г╓╜╓ч╓╧, #ifdef HAVE_SYS_PARAM_H #include <sys/param.h> #endif ╓Ё╓нйЩк║╓Р╩хмя╓╧╓К╓х╓╜╓к╓о, Makefile цФ╓н CFLAGS╓к -DHAVE_SYS_PARAM_H ╓Р╡ц╓╗╓К╓Ё╓х╓Рк╨╓Л╓й╓╓╓Х╓╕╓к╓╥╓ф╓╞╓ю╓╣╓╓. ╓╓╓ц╓©╓С sys/param.h ╓╛╔╓╔С╔╞╔К║╪╔и╓╣╓Л╓К╓х, #if (defined(BSD) && (BSD >= 199103)) ╓Ё╓н╓Х╓╕╓к╓╥╓ф╓╫╓н╔Ё║╪╔и╓╛ 4.3 Net2 ╔Ё║╪╔и╔ы║╪╔╧, ╓ч╓©╓о╓╫╓Л╓Х╓Й©╥╓╥╓╓╓Б╓н (нЦ: 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 ╓х╓╫╓Л╟й╦Е) ╓н╬Е╓г╔Ё╔С╔я╔╓╔К╓╣╓Л╓ф╓╓╓К╓╚╓и╓╕╓╚╓Р╦║╫п╓╧╓К╓©╓А╓к╩хмя╓╥╓ч╓╧. 4.4BSD-Lite2 ╔Ё║╪╔и╔ы║╪╔╧╓г╓о BSD ╔ч╔╞╔М╓нцм╓о 199506 ╓к╓й╓ц╓ф╓╓╓ч╓╧. ╓Ё╓Л╓о╩╡╧мдЬеы╓н╟улё╧Г╓╓╓╥╓╚╓╒╓Й╓ч╓╩╓С. 4.4-Lite ╔ы║╪╔╧╓н FreeBSD ╓х 4.4-Lite2 ╓г╓нйя╧╧╓╛╔ч║╪╔╦╓╣╓Л╓©╔п║╪╔╦╔Г╔С╓х╓Р╤Хйл╓╧╓К╓н╓к╩хмя╓╧╓К╓ы╓╜╓Б╓н╓г╓о╓╒╓Й╓ч╓╩╓С. ╓Ё╓нлэе╙╓н╓©╓А╓к╓о╓╚╓О╓Й╓к __FreeBSD__ ╔ч╔╞╔М╓Р╩хмя╓╥╓ф╓╞╓ю╓╣╓╓. ╟й╡╪╓о╧╣╓╗лэ╓к╩х╓ц╓ф╓╞╓ю╓╣╓╓. __FreeBSD__ ╓оFreeBSD╓н╓╧╓ы╓ф╓нхг╓гдЙ╣а╓╣╓Л╓ф╓╓╓ч╓╧. йя╧╧╓╛ FreeBSD ╓ю╓╠╓ке╛мя╓╣╓Л╓К╓х╓╜╟йЁ╟╓о╩хмя╓╥╓й╓╓╓г╓╞╓ю╓╣╓╓. port ╓г╓Х╓╞╓╒╓К strerror() ╓г╓о╓й╓╞ sys_errlist[] ╓Р╩х╓╕╓й╓и╓о FreeBSD╓г╓нйя╧╧╓г╓о╓й╓╞ BSD ╓нн╝╣╥╓г╓╧. FreeBSD 2.x╓г╓о __FreeBSD__ ╓╛ 2 ╓хдЙ╣а╓╣╓Л╓ф╓╓╓ч╓╧. ╓╫╓Л╟йа╟╓нхг╓г╓о 1 ╓к╓й╓ц╓ф╓╓╓ч╓╧. ╓╫╓н╦Е╓нхг╓г╓о╓╫╓н╔А╔╦╔Ц║╪хж╧Ф╓к╧Г╓╕╓Х╓╕╓к╬Е╓╛╓ц╓ф╓╓╓╜╓ч╓╧. ╓Б╓╥ FreeBSD 1.x ╔╥╔╧╔ф╔Ю╓х FreeBSD 2.x, ╓╒╓К╓╓╓о FreeBSD 3.x ╔╥╔╧╔ф╔Ю╓Р╤Хйл╓╧╓Ки╛мв╓╛╓╒╓Л╓п, ╬Е╓г╫р╓ы╓© BSD ╔ч╔╞╔М╓Р╩хмя╓╧╓К╓н╓╛бГдЯ╓н╬Л╧Г╓к╓╙╓╓╓фю╣╓╥╓╓еЗ╓г╓╧. ╓Б╓╥ FreeBSD фцм╜╓нйя╧╧╓г╓╒╓Л╓п (ld ╓Р╩х╓╕╓х╓╜╓н╤╕м╜╔И╔╓╔ж╔И╔Ймя╓н╔╙╔в╔╥╔Г╔С╓й╓и), __FreeBSD__╓Р╩х╓╓ #if __FreeBSD__ > 1 ╓н╓Х╓╕╓кFreeBSD 2.x ╓╙╓Х╓с, ╓╫╓Л╟й╧ъ╓н╔╥╔╧╔ф╔Ю╓Р╦║╫п╓╧╓К╓н╓о╓╚╓ч╓╓╓ч╓╩╓С. ╓Б╓╥ 2.0-RELEASE ╟й╧ъ╓н FreeBSD ╔╥╔╧╔ф╔Ю╓Р╨ы╓╚╓╞╦║╫п╓╥╓©╓╠╓Л╓п, ╟й╡╪╓Р╩хмя╓╧╓К╓Ё╓х╓╛╓г╓╜╓ч╓╧. #if __FreeBSD__ >= 2 #include <osreldate.h> # if __FreeBSD_version >= 199504 /* 2.0.5+ release specific code here */ # endif #endif Release __FreeBSD_version 2.0-RELEASE 119411 2.1-CURRENT 199501, 199503 2.0.5-RELEASE 199504 2.1 ╟йа╟╓н 2.2-CURRENT 199508 2.1.0-RELEASE 199511 2.1.5 ╟йа╟╓н 2.2-CURRENT 199512 2.1.5-RELEASE 199607 2.1.6 ╟йа╟╓н 2.2-CURRENT 199608 2.1.6-RELEASE 199612 2.1.7-RELEASE 199612 2.2-RELEASE 220000 2.2.1-RELEASE 220000 (2.2-RELEASE ╓хф╠╓╦╓г╓╧) 2.2.1-RELEASE ╟й╦Е╓н 2.2-STABLE 220000 (╓Ё╓Л╓Бф╠╓╦╓г╓╧) texinfo-3.9 ╟й╦Е╓н 2.2-STABLE 221001 top фЁфЧ╟й╦Е╓н 2.2-STABLE 221002 2.2.2-RELEASE 222000 2.2.2-RELEASE ╟й╦Е╓н 2.2-STABLE 222001 2.2.5-RELEASE 225000 2.2.5-RELEASE ╟й╦Е╓н 2.2-STABLE 225001 ldconfig -R ╟й╦Е╓н 2.2-STABLE 225002 2.2.6-RELEASE 226000 2.2.7-RELEASE 227000 2.2.7-RELEASE ╟й╦Е╓н 2.2-STABLE 227001 semctl(2) йя╧╧╦Е╓н 2.2-STABLE 227002 2.2.8-RELEASE 228000 2.2.8-RELEASE ╟й╦Е╓н 2.2-STABLE 228001 mount(2) йя╧╧╟йа╟╓н 3.0-CURRENT 300000 mount(2) йя╧╧╟й╦Е╓н 3.0-CURRENT 300001 semctl(2) йя╧╧╟й╦Е╓н 3.0-CURRENT 300002 ioctl ╟З©Тйя╧╧╦Е╓н 3.0-CURRENT 300003 ELF ╟э╧т╦Е╓н 3.0-CURRENT 300004 3.0-RELEASE 300005 3.0-RELEASE ╟й╦Е╓н 3.0-CURRENT 300006 3/4 ╓нй╛╢Т╦Е╓н 3.0-STABLE 300007 3.1-RELEASE 310000 3.1-RELEASE ╟й╦Е╓н 3.1-STABLE 310001 C++ ╔Ё╔С╔╧╔х╔И╔╞╔©/╔г╔╧╔х╔И╔╞╔©╫Г╫Ьйя╧╧╦Е╓н 3.1-STABLE 310002 3.2-RELEASE 320000 3.2-STABLE 320001 ╔п╔╓╔й╔Й╦ъ╢╧ю╜╓н╓й╓╓ IPFW ╓х╔╫╔╠╔ц╔х╓нйя╧╧╦Е╓н 3.2-STABLE 320002 3.3-RELEASE 330000 3.3-STABLE 330001 libc ╓ь mkstemps() ╓╛ди╡ц╓╣╓Л╓©╦Е╓н 3.3-STABLE 330002 3.4-RELEASE 340000 3.4-STABLE 340001 3.4 ╓нй╛╢Т╦Е╓н 4.0-CURRENT 400000 dynamic linker ╓нйя╧╧╦Е╓н 4.0-CURRENT 400001 C++ ╔Ё╔С╔╧╔х╔И╔╞╔©/╔г╔╧╔х╔И╔╞╔©╫Г╫Ьйя╧╧╦Е╓н 4.0-CURRENT 400002 dladdr(3) ╣║г╫ди╡ц╦Е╓н 4.0-CURRENT 400003 __deregister_frame_info dynamic linker ╓н╔п╔╟╫╓ю╣, EGCS 1.1.2 фЁфЧ╦Е╓н 4.0-CURRENT 400004 suser(9) ╓н API йя╧╧, newbus ╦Е╓н 4.0-CURRENT 400005 cdevsw епо©йЩк║╓нйя╧╧╦Е╓н 4.0-CURRENT 400006 ╔╫╔╠╔ц╔х╔Л╔ы╔К╓н╬злю╫Я (credential) ╓н╓©╓А╓н so_cred ╓ь╓нди╡ц╦Е╓н 4.0-CURRENT 400007 libc_r ╓ь╓н poll syscall ╔И╔ц╔я║╪ди╡ц╦Е╓н 4.0-CURRENT 400008 kernel ╓н dev_t ╥©╓╚╓И struct spacinfo ╔щ╔╓╔С╔©╓ь╓н йя╧╧╦Е╓н 4.0-CURRENT 400009 jail(2) ╓н╔╩╔╜╔Е╔Й╔ф╔ё╔ш║╪╔К╫╓ю╣╦Е╓н 4.0-CURRENT 400010 sigset_t ╓н╔г║╪╔©╥©йя╧╧╦Е╓н 4.0-CURRENT 400011 ╔╥╔╧╔ф╔Ю╔Ё╔С╔я╔╓╔И╓Р gcc 2.95.2 ╓к╔╒╔ц╔в╔╟╔Л║╪╔и╓╥╓©╦Е╓н 4.0-CURRENT 400012 ди╡ц╡дг╫╓й Linux ╔Б║╪╔и╓н ioctl ╔о╔С╔и╔И╓╛ди╡ц╓╣╓Л╓©╦Е╓н 4.0-CURRENT 400013 OpenSSL ╓╛фЁфЧ╓╣╓Л╓©╦Е╓н 4.0-CURRENT 400014 GCC 2.95.2 ╓н C++ ABI йя╧╧╓г, ╔г╔у╔╘╔К╔х╓╛ -fvtable-thunks ╓╚╓И -fno-vtable-thunks ╓кйя╧╧╓╣╓Л╓©╦Е╓н 4.0-CURRENT 400015 OpenSSH ╓╛фЁфЧ╓╣╓Л╓©╦Е╓н 4.0-CURRENT 400016 4.0-RELEASE 400017 4.0-RELEASE ╓Х╓Й╦Е╓н 4.0-STABLE 400018 libxpg4 ╓╛ libc ╓к╔ч║╪╔╦╓╣╓Л╓©╦Е╓н 4.0-STABLE 400020 Binutils ╓н 2.10.0 ╓ь╓н╔╒╔ц╔в╔╟╔Л║╪╔и╓х ELF ╔п╔╓╔й╔Й╓н╔ч║╪╔╞иу╓╠ (branding) йЩк║╓нйя╧╧, ╔ы║╪╔╧╔╥╔╧╔ф╔Ю╓ь╓н tcsh ╓нфЁфЧ╦Е╓н 4.0-STABLE 400021 5.0-CURRENT 500000 ELF ╔ь╔ц╔ю╔у╔ё║╪╔К╔и╓нди╡ц╓х ELF ╔п╔╓╔й╔Й╓н╔ч║╪╔╞иу╓╠ (branding) йЩк║╓нйя╧╧╦Е╓н 5.0-CURRENT 500001 kld ╔А╔©╔г║╪╔©йя╧╧╦Е╓н 5.0-CURRENT 500002 buf/bio йя╧╧╦Е╓н 5.0-CURRENT 500003 binutils ╔╒╔ц╔в╔╟╔Л║╪╔и╦Е╓н 5.0-CURRENT 500004 libxpg4 ╔Ё║╪╔и╓н libc ╓ь╓н╔ч║╪╔╦╓х, TASKQ ╔╓╔С╔©║╪╔у╔╖╔╓╔╧╓нфЁфЧ╦Е╓н 5.0-CURRENT 500005 AGP ╔╓╔С╔©║╪╔у╔╖╔╓╔╧╓╛ди╡ц╓╣╓Л╓©╦Е╓н 5.0-CURRENT 500006 Perl ╓Р 5.6.0 ╓к╔╒╔ц╔в╔╟╔Л║╪╔и╓╥╓©╦Е╓н 5.0-CURRENT 500007 KAME ╔Ё║╪╔и╓Р 2000/07 хг╓н╔╫║╪╔╧╓к╧╧©╥╓╥╓©╦Е╓н 5.0-CURRENT 500008 ether_ifattach() ╓╙╓Х╓с ether_ifdetach() йя╧╧╦Е╓н 5.0-CURRENT 500009 mtree ╓н╔г╔у╔╘╔К╔х╓Р╔╙╔Й╔╦╔й╔К╓нйя╪О╓клА╓╥, ╔╥╔С╔э╔Й╔ц╔╞╔Й╔С╔╞╓Р╓©╓и╓К -L ╔╙╔в╔╥╔Г╔С╓Рди╡ц╓╥╓©╦Е╓н 5.0-CURRENT 500010 kqueue API йя╧╧╦Е╓н 5.0-CURRENT 500011 setproctitle() ╓╛ libutil ╓╚╓И libc ╓ь╟эф╟╓╥╓©╦Е╓н 5.0-CURRENT 500012 ╨г╫И╓н SMPng ╓╛╔Ё╔ъ╔ц╔х╓╣╓Л╓©╦Е╓н 5.0-CURRENT 500013 (2.2-STABLE ╓о 2.2.5-RELESE ╟й╦Е, 2.2.5-STABLE ╓х╦ф╓п╓Л╓К╓Ё╓х╓╛╓╒╓Й╓ч╓╧.) ╦╚╓ф╓н╓х╓╙╓Й╓Ё╓Л╓ог╞║╕╥Н╓х╓╓╓╕╔у╔╘║╪╔ч╔ц╔х╓к╓й╓ц╓ф╓╓╓ч╓╥╓©╓╛, ╔п║╪╔╦╔Г╔С 2.2 ╓╚╓И╓Х╓Йд╬юэе╙╓к╔А╔╦╔Ц║╪/╔ч╔╓╔й║╪хж╧Ф╓Р╩х╓╕╓Х╓╕╓кйя╧╧╓к╓й╓Й╓ч╓╥╓©. йб╧т╓╥╓ф╓╓╓╞╓д╓╚╓н╔ж╔И╔С╔а (╩чй╛╓╚╓Л╓╥╓©╔п║╪╔╦╔Г╔С) ╓РЁ╚х╞╓╧╓К╬Л╧Г╓к╓о, ╔Й╔Й║╪╔╧╓╣╓Л╓©фЭиу╓г╓╫╓Л╓И╓н╔Й╔Й║╪╔╧╓Рй╛нЮ╓╧╓К╓Ё╓х╓╛ит╡дг╫╓ю╓╚╓И╓г╓╧ (╓╒╓й╓©╓╛╨ё port ╓Р╨Ню╝╓╧╓К╓х╓╜╓к, ╦е╓╓ -CURRENT цё╓к╓д╓╓╓ф©╢гш╓╧╓Ки╛мв╓о╓╒╓Й╓ч╓╩╓С. ╓Ё╓Л╓о╩╡╧м╓н╓©╓А╓к╣С╓╡╓И╓Л╓ф╓╓╓К╓к╡А╓╝╓й╓╓╓╚╓И╓г╓╧). ╓Ё╓Л╓ч╓г, ╡©и╢╓Б╓н port ╓╛╨Н╓И╓Л╓ф╓╜╓ч╓╥╓©╓╛, __FreeBSD__ ╓╛ю╣╓╥╓╞╩х╓О╓Л╓©╓н╓о╟Л╓д╓╚фС╓д╓н╬Л╧Г╓ю╓╠╓г╓╥╓Г╓╕. ╟йа╟╓н port ╓╛╦М╓ц╓©╬Л╫Й╓г╓╫╓н╔ч╔╞╔М╓Р╩х╓ц╓ф╓╓╓К╓╚╓И╓х╓╓╓ц╓ф, ╓╫╓Л╓Р╓ч╓м╓╧╓КмЩмЁ╓о╓╒╓Й╓ч╓╩╓С. <filename>bsd.port.mk</filename> ╓н╦Е╓к╫Я╓╞╓Ё╓х .include <bsd.port.mk> ╓н╧т╓н╦Е╓к╓о╡©╓Б╫Я╓╚╓й╓╓╓Х╓╕╓к╓╥╓ф╓╞╓ю╓╣╓╓. бГдЯ╓н╬Л╧Г╓о Makefile ╓нцФдЬ╓н╓и╓Ё╓╚╓г bsd.port.pre.mk ╓Р╔╓╔С╔╞╔К║╪╔и╓╥╓ф, ╨г╦Е╓к bsd.port.pre.mk ╓Р╔╓╔С╔╞╔К║╪╔и╓╧╓К╓Ё╓х╓к╓Х╓ц╓фхР╓╠╓К╓Ё╓х╓╛╓г╓╜╓ч╓╧. pre.mk/post.mk ╓н╔з╔╒╓╚ bsd.port.mk ╓ю╓╠╓н╓и╓а╓И╓╚╓ю╓╠╓Р╔╓╔С╔╞╔К║╪╔и╓╥, фС╓д╓Р╨╝╓╪╓й╓╓╓г╓╞╓ю╓╣╓╓. а╟╪т╓о╓╓╓╞╓д╓╚╓нйя©Т╓ндЙ╣а╓ю╓╠╓Р╓╥╓ф Makefile ╓г╓н╔ф╔╧╔х╓к╩хмя╓╥, ╦Е╪т╓о╩д╓Й╓РдЙ╣а╓╥╓ч╓╧. ╟й╡╪╓о 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 ports ╓н╔╓╔С╔╧╔х║╪╔КюХ ( PREFIX╓к╓д╓╓╓ф╓Р╩╡╬х). USE_IMAKE, USE_X_PREFIX ╓╒╓К╓╓╓о MASTERDIR ╓й╓и╓нйя©Т╓РдЙ╣а╓╧╓Ки╛мв╓╛╓╒╓К╬Л╧Г╓к╓о, bsd.port.pre.mk ╓Р╔╓╔С╔╞╔К║╪╔иа╟╓кдЙ╣а╓╥╓ф╓╞╓ю╓╣╓╓. б╬╓н╓Б╓н╓о 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 ╔©║╪╔╡╔ц╔х╓нцФ╓╚╓И╧т╓й╓╕╓хни╓╓╓г╓╥╓Г╓╕. ╓ч╓╨, ╓╒╓й╓©╓н port ╓н╓©╓А╓к©╥╓╥╓╓╔г╔ё╔Л╔╞╔х╔Й╓Р╨Н╓Й╓ч╓╧. ╓и╓н port ╓нй╦╫Я╓╚╢йц╠╓к╓О╓╚╓К╓Х╓╕╓йл╬а╟╓к╓╧╓Ки╛мв╓╛╓╒╓Й╓ч╓╧╓н╓г, иАдл╓о PORTNAME ╓Р╩х╓╕╓хни╓╓╓г╓╥╓Г╓╕. ╓Б╓а╓М╓С, ╔Ф║╪╔╤╓╛╟ш╓й╓К╔п║╪╔╦╔Г╔С╓н╓Б╓н╓Рф╠╩Ч╓к╩х╓╕╓Ё╓х╓╛м╫аш╓╣╓Л╓К port ╓н╬Л╧Г╓к╓о PKGNAME ╓Р╓╫╓н╓ч╓ч╩х╓ц╓ф╓Б╧╫╓╓╓ч╓╩╓С. ╔Ф║╪╔╤╓╛ /etc/make.conf ╓г╓Ё╓ниТй╛╓Р╤ь╩ъ╓╧╓К╓©╓А╓к NOPORTDOCS ╓х╓╓╓╕йя©Т╓Р╔╩╔ц╔х╓╥╓ф╓╓╓К╬Л╧Г╓к╓о, ╓Ё╓Л╓И╓нй╦╫Я╓╛╔╓╔С╔╧╔х║╪╔К╓╣╓Л╓й╓╓╓Х╓╕╓к╓╥╓ф╓╞╓ю╓╣╓╓. ╓Ё╓С╓й╤Я╧Г╓г╓╧. post-install: .if !defined(NOPORTDOCS) ${MKDIR} ${PREFIX}/share/doc/xv ${INSTALL_MAN} ${WRKSRC}/docs/xvdocs.ps ${PREFIX}/share/doc/xv .endif ╓Ё╓Л╓И╓н╔у╔║╔╓╔К╓Р pkg/PLIST ╓кфЧ╓Л╓К╓н╓Рк╨╓Л╓й╓╓╓Х ╓╕╓к╓╥╓ф╓╞╓ю╓╣╓╓ (package ╓╛ /etc/make.conf фБ╓нйя©Т╓Рфи╓ЮйЩк║╓о╨ё╓н╓х╓Ё╓Мб╦╨ъ╓╥╓ч╓╩╓С╓н╓г NOPORTDOCS ╓к╓д╓╓╓ф╓о╣╓╓к╓╥╓й╓╓╓г╓╞╓ю╓╣╓╓). ╔╓╔С╔╧╔х║╪╔К╩Ч╓к pkg/MESSAGE ╔у╔║╔╓╔К╓РмЬмя╓╥╓ф╔А╔ц╔╩║╪╔╦╓Ри╫╪╗╓╧╓К╓Ё╓х╓╛╓г╓╜╓ч╓╧. ╬э╨ы╓о pkg/MESSAGE ╓Р╩х╓╕╓нюА╓Р╩╡╬х╓╥╓ф╓╞╓ю╓╣╓╓. MESSAGE ╔у╔║╔╓╔К╓Р pkg/PLIST ╓к╡ц╓╗╓Ки╛мв╓о╓╒╓Й╓ч╓╩╓С. <makevar>DIST_SUBDIR</makevar> /usr/ports/distfiles ╔г╔ё╔Л╔╞╔х╔ЙфБ╓Р╓╒╓ч╓Й╩╤╓И╓╚╓╣╓й╓╓╓Х╓╕╓к╓╥╓ф╓╞╓ю╓╣╓╓. ╓©╓╞╓╣╓С╓н╔у╔║╔╓╔К╓Р╪Х╓ц╓ф╓╞╓К port ╓Д, ©Т╓о╬╞╓й╓╞╓ф╓Бб╬╓н port ╓н╔у╔║╔╓╔К╓х╨╝ф╠╓╣╓Л╓К╤╡╓Л╓╛╓╒╓К╔у╔║╔╓╔К (Makefile ╓й╓и) ╓╛╓╒╓К╬Л╧Г╓к╓о, DIST_SUBDIR ╓к port ╓нл╬а╟ (${PORTNAME} ╓╚ ${PKGNAMEPREFIX}${PORTNAME} ╓Р╩х╓╕╓х╓╓╓╓╓г╓╥╓Г╓╕) ╓РфЧ╓Л╓ф╓╞╓ю╓╣╓╓. ╓╧╓К╓х DISTDIR ╓╛╔г╔у╔╘╔К╔х╓н /usr/ports/distfiles ╓╚╓И /usr/ports/distfiles/DIST_SUBDIR ╓кйя╧╧╓╣╓Л, ╪Х╓ц╓ф╓╜╓©╔у╔║╔╓╔К╓о╓╧╓ы╓ф╓╫╓н╔╣╔ж╔г╔ё╔Л╔╞╔х╔Й╓нцФ╓кцж╓╚╓Л╓К╓Х╓╕╓к╓й╓Й╓ч╓╧. ╓ч╓©, ╔у╔║╔╓╔К╓Р╪Х╓ц╓ф╓╞╓К╓х╓╜╓к╔п╔ц╔╞╔╒╔ц╔в╔╣╔╓╔х╓х╓╥╓ф╩х╓О╓Л╓К ftp.FreeBSD.org ╓н╔г╔ё╔Л╔╞╔х╔Йл╬╓к╓Б╓Ё╓нйя©Т╓нцм╓╛╩х╓О╓Л╓ч╓╧ (DISTDIR ╓Рлю╪╗е╙╓к╩ьдЙ╓╥╓©╬Л╧Г, ╔М║╪╔╚╔К╓н╔у╔║╔╓╔К╓Рцж╓╞╓х╓Ё╓М╓ойя╓О╓Й╓ч╓╧╓╛, ╓Ё╓н╔╣╔╓╔х╓н╔г╔ё╔Л╔╞╔х╔Йл╬╓ойя╓О╓Й╓ч╓╩╓С. и╛╓╨ DIST_SUBDIR ╓Р╩х╓╕╓Х╓╕╓к╓╥╓ф╓╞╓ю╓╣╓╓). ╓Ё╓нйя©Т╓о Makefile цФ╓глю╪╗е╙╓к╩ьдЙ╓╣╓Л╓© MASTER_SITES ╓к╓о╠ф╤а╓╥╓й╓╓╓Ё╓х╓кцМ╟у╓╥╓ф╓╞╓ю╓╣╓╓. package ╬ПйС pkg ╔г╔ё╔Л╔╞╔х╔Й╓к╓ои╛╓╨, COMMENT ╓Д DESCR, PLIST ╓х╓╓╓ц╓© package ╬ПйС╓РфЧ╓Л╓ф╓╞╓ю╓╣╓╓. ╓Ё╓Л╓И╓н╔у╔║╔╓╔К╓о╓Б╓о╓Д package ╓н╨Ню╝╓ю╓╠╓к╩х╓О╓Л╓К╓Б╓н╓г╓о╓й╓╞╓й╓ц╓ф╓╓╓ч╓╧. ╓©╓х╓╗ NO_PACKAGE ╓╛дЙ╣а╓╣╓Л╓ф╓╓╓©╓х╓╥╓ф╓Би╛©э╓г╓╒╓К╓Ё╓х╓кцМ╟у╓╥╓ф╓╞╓ю╓╣╓╓. RCS й╦╩ЗнС RCS ╓╛фцйл╓й╟улё╓Рм©╓╗╓ф╓╓╓Кй╦╩ЗнС╓Р╔я╔ц╔афБ╓кфЧ╓Л╓й╓╓╓Х╓╕╓к╓╥╓ф╓╞╓ю╓╣╓╓. ╔у╔║╔╓╔К╓Р╩Д╓©╓а╓н╔╫║╪╔╧╔д╔Й║╪╓кфЧ╓Л╓К╩Ч, ╓Ё╓Л╓И╓нй╦╩ЗнС╓о CVS ╓к╓Х╓ц╓ф╫Я╓╜╢╧╓╗╓И╓Л╓ф╓╥╓ч╓╓, ╦Е╓г╓ч╓©╔я╔ц╔а╓Р╩х╓╙╓╕╓х╓╥╓©╩Ч╓к╓╕╓ч╓╞╓╓╓╚╓й╓╓╓Ё╓х╓╛╓╒╓Й╓ч╓╧. RCS й╦╩ЗнС╓о╔и╔К╣╜╧Ф ($) ╓г╟о╓ч╓Л╓ф╓╙╓Й, $FreeBSD ╓Д $RCS ╓й╓и╓г╩о╓ч╓Й╓ч╓╧. ╨ф╣╒е╙ diff diff ╓н╨ф╣╒ () ╔у╔И╔╟╓Р╩х╓ц╓ф╨ф╣╒е╙╓й╔я╔ц╔а╓Р╨Н╓К╓н╓обГйя╥К╧╫╓й╓н╓г╓╧╓╛, ╓г╓╜╬Е╓╛╓ц╓©╔я╔ц╔а╓ои╛╓╨лэ╓г╔а╔╖╔ц╔╞╓╥╓фм╬╥в╓й╔╢╔ъ╓╛фЧ╓ц╓ф╓╓╓й╓╓╓Ё╓х╓РЁнг╖╓╥╓ф╓╞╓ю╓╣╓╓. ╓Х╓╞╓╒╓К╓н╓о╔п╔ц╔╞╔╒╔ц╔в╔у╔║╔╓╔Кф╠╩н╓нйя╧╧ею, ╓╒╓К╓╓╓о Imake ╓Д GNU configure ╓Р╩х╓╕╔╫╔у╔х╔╕╔╖╔╒╓н Makefile ╓нйя╧╧ею╓╛фЧ╓ц╓ф╓╓╓К╬Л╧Г╓й╓и╓г╓╧. ╓ч╓© configure.in ╓Рйт╫╦╓╥╓ф autoconf ╓Р╩х╓ц╓ф configure ╓Р╨Н╓Йд╬╓╧╓х╓╜╓к╓о, configure ╓н diff ╓о╢ч╓А╓╨╓к (╓╫╓Л╓И╓они╓╞©ТюИ╧т╓к╓╙╓Х╓ж╓Ё╓х╓╛╓╒╓Й╓ч╓╧), USE_AUTOCONF=yes ╓РдЙ╣а╓╥╓ф configure.in ╓н diff ╓Р╓х╓ц╓ф╓╞╓ю╓╣╓╓. ╔у╔║╔╓╔К╓Р╓ч╓К╓╢╓х╬ц╓╧╬Л╧Г╓к╓о, ╔я╔ц╔а╓Р╩х╓О╓╨╓к post-extract ╔©║╪╔╡╔ц╔х╓г╬ц╓╧йЩ╓╛╢йц╠╓г╓╧. ╓г╓╜╓╒╓╛╓ц╓©╨╧й╛╓ккЧб╜╓╥╓©╓И, ╓╫╓Л╓И╓Р╔╫║╪╔╧╓н╔у╔║╔╓╔К╓╢╓х╓кйл║╧╓н╔я╔ц╔а╔у╔║╔╓╔К╓кй╛ЁД╓╥╓ф╓╞╓ю╓╣╓╓. <makevar>PREFIX</makevar> ╓й╓К╓ы╓╞ port ╓о PREFIX ╓кбп╓╧╓КаЙбп╔я╔╧╓к╔╓╔С╔╧╔х║╪╔К╓╧╓К╓Ё╓х╓╛╓г╓╜╓К╓Х╓╕╓к©╢╓╛╓╠╓ф╓╞╓ю╓╣╓╓ (╓Ё╓нйя©Т╓нцм╓о USE_X_PREFIX ╓╚ USE_IMAKE ╓╛╩ьдЙ╓╥╓ф╓╒╓К╩Ч╓к╓о X11BASE (╔г╔у╔╘╔К╔х/usr/X11R6), ╓╫╓╕╓г╓й╓╓╬Л╧Г╓к╓оLOCALBASE (╔г╔у╔╘╔К╔х/usr/local) ╓к╔╩╔ц╔х╓╣╓Л╓ч╓╧). ╔╣╔╓╔х╓к╓Х╓ц╓ф╔у╔Й║╪╔╫╔у╔х╔╕╔╖╔╒╓╛╔╓╔С╔╧╔х║╪╔К╓╣╓Л╓К╬Л╫Й╓╛╟Ц╓╓╓ч╓╧╓н╓г, ╔╫║╪╔╧фБ╓г /usr/local ╓Д /usr/X11R6 ╓Рлю╪╗е╙╓к╫Я╓╚╓й╓╓╓Х╓╕╓к╓╥╓ф╓╞╓ю╓╣╓╓. X ╓н╔в╔М╔╟╔И╔Ю╓г imake ╓Р╩х╓╕╓Б╓н╓к╓д╓╓╓ф╓о, ╓Ё╓Л╓олДбЙ╓к╓о╓й╓Й╓ч╓╩╓С. ╓╫╓Л╟йЁ╟╓н╬Л╧Г╓к╓о╔╫║╪╔╧цФ╓н Makefile ╓Д╔╧╔╞╔Й╔в╔х╓г /usr/local (imake ╓Р╩х╓О╓й╓╓ X ╓н╔в╔М╔╟╔И╔Ю╓о /usr/X11R6) ╓х╫Я╓╓╓ф╓╒╓К╓х╓Ё╓М╓Р PREFIX ╓к╫Я╓╜╢╧╓╗╓ф╓╞╓ю╓╣╓╓. ╓Ё╓нцм╓о port ╓н╔Ё╔С╔я╔╓╔К╓╙╓Х╓с, ╔╓╔С╔╧╔х║╪╔К╩Ч╓к╪╚ф╟е╙╓к╢д╤╜йя©Т╓х╓╥╓ф╡╪╟л make ╓кео╓╣╓Л╓ч╓╧. USE_X_PREFIX ╓окэеЖ╓ки╛мв╓й╩Ч (╓д╓ч╓Й X ╓н╔И╔╓╔ж╔И╔Й╓й╓и╓х╔Й╔С╔╞╓╥╓©╓Й, X11BASE ╟й╡╪╓к╓╒╓К╔у╔║╔╓╔К╓Р╩╡╬х╓╥╓©╓Й╓╧╓Ки╛мв╓╛╓╒╓К╩Ч) ╟йЁ╟╓к╓оюъдЙ╓╥╓й╓╓╓г╓╞╓ю╓╣╓╓. йя©Т PREFIX ╓нцм╓о port ╓н Makefile ╓Д╔Ф║╪╔╤╓н╢д╤╜╓гйя╧╧╓╧╓К╓Ё╓х╓Б╓г╓╜╓ч╓╧. ╓╥╓╚╓╥, ╦д║╧╓н port ╓╛ Makefile ╓г╓Ё╓нйя©Т╓нцм╓Рлю╪╗е╙╓кюъдЙ╓╧╓К╓Ё╓х╓о╓й╓К╓ы╓╞╓╥╓й╓╓╓г╓╞╓ю╓╣╓╓. ╓ч╓©, б╬╓н port ╓╚╓И╔╓╔С╔╧╔х║╪╔К╓╣╓Л╓К╔в╔М╔╟╔И╔Ю╓Д╔у╔║╔╓╔К╓Р╩ьдЙ╓╧╓К╓х╓╜╓к╓о, ╬Е╓г╫р╓ы╓©йя©Т╓Р╩хмя╓╥╓ф╓╞╓ю╓╣╓╓. ╓©╓х╓╗╓п less ╓н╔у╔К╔я╔╧╓Р PAGER ╓х╓╓╓╕╔ч╔╞╔М╓кфЧ╓Л╓©╓╓╬Л╧Г╓о, ╔Ё╔С╔я╔╓╔И╓к -DPAGER=\"/usr/local/bin/less\" ╓хео╓╧╓╚╓О╓Й╓к -DPAGER=\"${PREFIX}/bin/less\" (X ╓Р╩х╓╕ port ╓н╩Ч╓о -DPAGER=\"${LOCALBASE}/bin/less\") ╓Рео╓╥╓ф╓╞╓ю╓╣╓╓. ╓Ё╓╕╓╥╓ф╓╙╓╠╓п /usr/local ╓╛╓ч╓К╓╢╓х╓и╓Ё╓╚б╬╓н╬Л╫Й╓к╟э╓╥╓ф╓╒╓К╔╣╔╓╔х╓г╓Б╓╒╓й╓©╓н port ╓╛╓╫╓н╓ч╓ч╩х╓╗╓К╡дг╫ю╜╓╛╧Б╓╞╓й╓Й╓ч╓╧. ╔г╔ё╔Л╔╞╔х╔Й╧╫ю╝ ╔╓╔С╔╧╔х║╪╔К╩Ч╓к╓о PREFIX ╓ню╣╓╥╓╓╔╣╔ж╔г╔ё╔Л╔╞╔х╔Й╓к╔у╔║╔╓╔К╓Рцж╓╞╓Х╓╕╓к©╢╓╛╓╠╓ф╓╞╓ю╓╣╓╓. ╔╫╔у╔х╔╕╔╖╔╒╓к╓Х╓ц╓ф╓о©╥╓╥╓╓╔г╔ё╔Л╔╞╔х╔Й╓Р╟Л╓д╨Н╓ц╓ф, ╔у╔║╔╓╔К╓Ра╢иТ╓╫╓Л╓кфЧ╓Л╓ф╓╥╓ч╓╕╓Б╓н╓╛╓╒╓Й╓ч╓╧╓╛, ╓╫╓Л╓они╓╞╓╒╓Й╓ч╓╩╓С. ╓ч╓©, ╔п╔╓╔й╔Й, ╔ь╔ц╔ю╔у╔║╔╓╔К╓х╔ч╔к╔Е╔╒╔К╟йЁ╟╓н╓╧╓ы╓ф╓Р lib ╓х╓╓╓╕╔г╔ё╔Л╔╞╔х╔Й╓кфЧ╓Л╓ф╓╥╓ч╓╕ port ╓Б╓╒╓Й╓ч╓╧╓╛, ╓Ё╓Л╓Б BSD е╙╓й╔у╔║╔╓╔К╔╥╔╧╔ф╔Ю╧╫ю╝╓╚╓И╓╓╓╕╓хю╣╓╥╓╞╓╒╓Й╓ч╓╩╓С. ╓Ё╓Л╓о╟й╡╪╓н╓Х╓╕╓кй╛╩╤╓╧╓ы╓╜╓г╓╧. etc ╓к╔╩╔ц╔х╔╒╔ц╔в/╔Ё╔С╔у╔ё╔╟╔Л║╪╔╥╔Г╔С╔у╔║╔╓╔К, libexec ╓кфБиТ╓г╩хмя╓╣╓Л╓К╔в╔М╔╟╔И╔Ю (╔Ё╔ч╔С╔и╔И╔╓╔С╓╚╓И╦ф╓п╓Л╓К╓Ё╓х╓н╓й╓╓╔Ё╔ч╔С╔и), sbin ╓к╢имЩ╪тмя╓н╔Ё╔ч╔С╔и, info ╓к GNU Info мя╓нй╦╫Я, ╓╫╓╥╓ф share ╓к╔╒║╪╔╜╔ф╔╞╔а╔Ц╓к╟мб╦╓╥╓й╓╓╔у╔║╔╓╔К╓╛фЧ╓Й╓ч╓╧. ╬э╨ы╓к╓д╓╓╓ф╓о &man.hier.7; ╓н╔ч╔к╔Е╔╒╔К╔з║╪╔╦╓Р╩╡╬х╓╥╓ф╓╞╓ю╓╣╓╓. /usr ╓н╧╫ю╝йЩ©к╓о╓ш╓х╓С╓и╓╫╓н╓ч╓ч /usr/local ╓к╓Б╓╒╓ф╓о╓ч╓Й╓ч╓╧. USENET ╔к╔Е║╪╔╧╓Р╟╥╓╕ ports ╓онЦЁ╟╓г╓╧. ╓Ё╓Л╓И╓о╔у╔║╔╓╔К╓н╔╓╔С╔╧╔х║╪╔КюХ╓х╓╥╓ф PREFIX/news ╓Р╩хмя╓╥╓ч╓╧. ╤У╓н╔г╔ё╔Л╔╞╔х╔Й╓н╨О╫Э ports ╓о╨О╫Э╓н╨щ╓к, ╪╚й╛╪╚©х╓Р╬ц╣Н╓╥╓©╓╒╓х╓к (╔г╔ё╔Л╔╞╔х╔Й╓н) ╨О╫Э╓Р╓╧╓К╓Х╓╕╓к╓╥╓ф╓╞╓ю╓╣╓╓. ╓Ё╓Л╓обГдЯ╓н╬Л╧Г @dirrm ╓н╧т╓Р ports ╓╛╨Ню╝╓╧╓К╓╧╓ы╓ф╓н╔г╔ё╔Л╔╞╔х╔Й╓к╓д╓╓╓ф╡ц╓╗╓К╓Ё╓х╓к╓Х╓ц╓ф╪б╦╫╓г╓╜╓ч╓╧. ©ф╔г╔ё╔Л╔╞╔х╔Й╓о╩р╔г╔ё╔Л╔╞╔х╔Й╓РюХ╓к╬ц╓╣╓й╓╓╓х╬ц╓╩╓й╓╓╓Ё╓х╓кцМ╟у╓╥╓ф╓╞╓ю╓╣╓╓. : 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 ╓х╓╓╓ц╓©╢╤╓╦╓г╓╧. ╓╥╓╚╓╥╩Ч╓х╓╥╓ф, б╬╓н port ╓х╔г╔ё╔Л╔╞╔х╔Й╓Р╤╕м╜╓╥╓ф╓╓╓К╓©╓А╓к @dirrm ╓╛╔╗╔И║╪╓Рйж╓╧╓Ё╓х╓╛╓╒╓Й╓ч╓╧. rmdir ╓Р @unexec ╓╚╓И╦ф╓с╓ю╓╧╓Ё╓х╓к╓Х╓ц╓ф, ╥ы╧П(warning)╓й╓╥╓г╤У╓н╔г╔ё╔Л╔╞╔х╔Й╓н╓ъ╓Р╨О╫Э╓╧╓К╓Ё╓х╓╛╓г╓╜╓ч╓╧. @unexec rmdir %D/share/doc/gimp 2>/dev/null || true ╓Ё╓Л╓Р╩х╓╗╓п, ╓©╓х╓╗б╬╓н port ╓╛╔у╔║╔╓╔К╓Р╔╓╔С╔╧╔х║╪╔К╓╥╓ф╓╓╓ф PREFIX/share/doc/gimp ╓╛╤У╓г╓й╓╓╬Л╧Г╓г╓Б╔╗╔И║╪╔А╔ц╔╩║╪╔╦╓ои╫╪╗╓╣╓Л╓ч╓╩╓С╓╥, pkg_delete ╓╛╟ш╬О╫╙н╩╓╧╓К╓Ё╓х╓Б╓╒╓Й╓ч╓╩╓С. UID ╓╒╓й╓©╓н port ╓╛, ╔╓╔С╔╧╔х║╪╔К╓╣╓Л╓К╔╥╔╧╔ф╔Ю╬Е╓кфцдЙ╓н╔Ф║╪╔╤╓Ри╛мв╓х╓╧╓К╬Л╧Г╓о pkg/INSTALL ╔╧╔╞╔Й╔в╔х╓╚╓И pw ╔Ё╔ч╔С╔и╓Р╪б╧т╓╥╓ф╪╚ф╟е╙╓к╓╫╓н╔Ф║╪╔╤╓Рди╡ц╓╧╓К╓Х╓╕╓к╓╥╓ф╓╞╓ю╓╣╓╓. net/cvsup-mirror ╓н port ╓╛╩╡╧м╓к╓й╓К╓г╓╥╓Г╓╕. ╓╒╓й╓©╓н port ╓╛╔п╔╓╔й╔Й╓н package ╓х╓╥╓ф╔╓╔С╔╧╔х║╪╔К╓╣╓Л╓К╬Л╧Г╓х╔Ё╔С╔я╔╓╔К╓╣╓Л╓К╬Л╧Г╓нн╬йЩ╓г, ф╠╓╦╔Ф║╪╔╤║╪/╔╟╔К║╪╔в ID ╓Р╩х╓О╓й╓╠╓Л╓п╓й╓И╓й╓╓╓н╓й╓И, 50 ╓╚╓И 99 ╓н╢ж╓г╤У╓╓╓ф╓╓╓К UID ╓Ра╙╓С╓гепо©╓╥╓ф╓╞╓ю╓╣╓╓. japanese/Wnn ╓н port ╓╛╩╡╧м╓к╓й╓К╓г╓╥╓Г╓╕. ╢Ш╓к╔╥╔╧╔ф╔Ю╓Дб╬╓н port ╓гмЬмя╓╣╓Л╓ф╓╓╓К UID╓Р╩х╓О╓й╓╓╓Х╓╕╓к╫╫й╛цМ╟у╓╥╓ф╓╞╓ю╓╣╓╓. ╦╫╨ъ╓н 50 ╓╚╓И 99 ╓ч╓г╓н╢ж╓н UID ╓о╟й╡╪╓н╓х╓╙╓Й╓г╓╧. 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 ╓Ё╓н╔Й╔╧╔х╓Р╨г©╥╓н╬Убж╓кйщ╓д╓©╓А╓к╓Б, ╓Ё╓нхо╟о╓н UID ╓Д GID ╓Рм╫лС╓╧╓К╓Х╓╕╓й port ╓Р╨Н╓ц╓©╓Й, ╢Шб╦╓н port ╓к╓╫╓н╓Х╓╕╓й╡Чйя╓Р╧т╓ц╓ф╓О╓©╓╥╓©╓а╓каВ╓К╓х╓╜╓к╓о UID ╓нм╫лС╓к╢ь╓╧╓КцМ╟у╫Я╓╜╓Р╓д╓╠╓ф╓╞╓ю╓╣╓╓. ╧ГмЩе╙╓й port Makefile ╓оц╠╫Ц╓╚╓де╛юз╓г╓╒╓К╓ы╓╜╓г╓╧. ╓Б╓╥, Makefile ╓Р©Т╧тц╩╓╚╓╞╓г╓╜╓©╓Й, ╓Б╓ц╓хфи╓ъ╓Д╓╧╓╞╓г╓╜╓К╓н╓г╓╒╓Л╓п╓╫╓╕╓╥╓ф╓╞╓ю╓╣╓╓. ╓©╓х╓╗╓п, ╔╥╔╖╔К╓н if ╧╫й╦╓Р╩х╓╕╓╚╓О╓Й╓к make ╓н .if ╧╫й╦╓Р╩х╓╕, EXTRACT* ╓н╨фдЙ╣а╓гбЕмя╓г╓╜╓К╓н╓г╓╒╓Л╓п do-extract ╓Р╨фдЙ╣а╓╥╓й╓╓, CONFIGURE_ARGS += --prefix=${PREFIX} ╓х╓╧╓К╓╚╓О╓Й╓к GNU_CONFIGURE ╓х╓╧╓К, ╓й╓и╓г╓╧. <makevar>CFLAGS</makevar> ╓нб╨╫е CFLAGS йя©Т╓об╨╫е╓╧╓ы╓╜╓г╓╧. port ╓╛╓Ё╓Л╓Рл╣╩К╓╧╓К╬Л╧Г╓о, NO_PACKAGE=ignores cflags ╓Р Makefile ╓к╡ц╓╗╓ф╓╞╓ю╓╣╓╓. CFLAGS йя©Т╓Р╓╜╓а╓С╓х╧мн╦╓╥╓© Makefile ╓ннЦ╓Р╟й╡╪╓к╪╗╓╥╓ч╓╧. += ╓ниТй╛╓кцМлэ╓╥╓ф╓╞╓ю╓╣╓╓. CFLAGS += -Wall -Werror ╪║╓о CFLAGS йя©Т╓Р╧мн╦╓╥╓й╓╓ Makefile ╓ннЦ╓г╓╧. CFLAGS = -Wall -Werror CFLAGS йя©Т╓о, FreeBSD ╔╥╔╧╔ф╔Ю╓н /etc/make.conf ╓гдЙ╣а╓╣╓Л╓ф╓╓╓ч╓╧. ╨г╫И╓ннЦ╓г╓о╢Шб╦╓ндЙ╣а╓Рйщб╦╓╥╓д╓д CFLAGS йя©Т╓к╔╙╔в╔╥╔Г╔С╔у╔И╔╟╓Рди╡ц╓╥╓ф╓╓╓К╓н╓кбп╓╥, фСхжлэ╓ннЦ╓г╓о╢Шб╦╓ндЙ╣а╓Р╓╧╓ы╓фл╣╦З╓к╓╥╓ф╓╥╓ч╓ц╓ф╓╓╓ч╓╧. ╔Ё╔С╔у╔ё╔╟╔Л║╪╔╥╔Г╔С (юъдЙ) ╔у╔║╔╓╔К ╓Б╓╥╓╒╓й╓©╓н port ╓╛юъдЙ╔у╔║╔╓╔К╓Р PREFIX/etc ╓кцж╓╞и╛мв╓╛╓╒╓К╬Л╧Г╓к╓о, ╓╫╓Л╓Рц╠╫Ц╓к╔╓╔С╔╧╔х║╪╔К╓╥╓©╓Й, pkg/PLIST ╓к╡ц╓╗╓ф╓о╓╓╓╠╓ч╓╩╓С. ╓Ё╓╕╓╥╓ф╓╥╓ч╓╕╓х pkg_delete ╓к╓Х╓ц╓ф╔Ф║╪╔╤╓╛╤Ло╚╓╥╓ф╨Н╓ц╓©╔у╔║╔╓╔К╓╛╬ц╓╗╓ф╓╥╓ч╓ц╓©╓Й, ©╥╓╥╓╞╔╓╔С╔╧╔х║╪╔К╓╧╓К╩Ч╓к╬Е╫Я╓╜╓╣╓Л╓ф╓╥╓ч╓ц╓©╓Й╓╥╓ч╓╧. ╓╚╓О╓Й╓к╦╚кэ╓х╓й╓К╔у╔║╔╓╔К╓Р ╔╣╔у╔ё╔ц╔╞╔╧ (filename.sample ╓╛ни╓╓╓г╓╥╓Г╓╕) ╓Риу╓╠╓ф╔╓╔С╔╧╔х║╪╔К╓╥╓ф╔А╔ц╔╩║╪╔╦╓Ри╫╪╗╓╥, ╔╫╔у╔х╔╕╔╖╔╒╓Рф╟╓╚╓╧а╟╓к╔Ф║╪╔╤╓╛╓╫╓н╔у╔║╔╓╔К╓Р╔Ё╔т║╪╓╥╓фйт╫╦╓Р╓╥╓й╓╠╓Л╓п╓й╓И╓й╓╓╓Ё╓х╓Рцн╓И╓╩╓ч╓╥╓Г╓╕. portlint аВиу╓Д commit ╓Р╓╧╓Ка╟╓к portlint ╓Р╩х╓ц╓ф╔а╔╖╔ц╔╞╓╥╓ч╓╥╓Г╓╕. ╔у╔ё║╪╔и╔п╔ц╔╞ port ╓Р╨Н╓К╓©╓А╓к╔╫╔у╔х╔╕╔╖╔╒╓кйя╧╧╓Р╡ц╓╗╓©╓И, ╓й╓К╓ы╓╞╦╤╨Н╪т╓к╓╫╓н╩щ╓Реа╓╗╓ф╔я╔ц╔аеЫ╓РаВ╓ц╓ф╓╞╓ю╓╣╓╓. ╓Ё╓Л╓И╓╛╪║╓н╔Й╔Й║╪╔╧╓к╪Х╓ЙфЧ╓Л╓И╓Л╓Л╓п╔╒╔ц╔в╔╟╔Л║╪╔и╓╛Ёз╓к╓й╓Й╓ч╓╧. <filename>README.html</filename> README.html ╓х╓╓╓╕╔у╔║╔╓╔К╓Р╢ч╓А╓ф╓о╓╓╓╠╓ч╓╩╓С. ╓Ё╓н╔у╔║╔╓╔К╓о, cvs ╔Ё╔Л╔╞╔╥╔Г╔С╓н╟ЛиТ╓г╓о╓й╓╞, make readme ╔Ё╔ч╔С╔и╓гю╦ю╝╓╣╓Л╓К╔у╔║╔╓╔К╓г╓╧. ╓╫╓нб╬╫Т║╧ pkg/DESCR, pkg/COMMENT, pkg/PLIST ╓й╓и╓н╔у╔║╔╓╔К╓о╓╫╓Л╓╬╓ЛфС╫е╓к╔а╔╖╔ц╔╞╓╥╓ф╓╞╓ю╓╣╓╓. ╨ф╦║ф╓╓╥╓ф╓Б╓ц╓хни╓╓╣╜╫р╓╛╓╒╓Л╓п╓╫╓Л╓кцж╓╜╓╚╓╗╓ф╓╞╓ю╓╣╓╓. GNU General Public License (GNU╟Лхл╦Ьм╜╩хмя╣ЖбЗ) ╓н╔Ё╔т║╪╓о (╓╧╓г╓к╓╒╓К╓н╓г) ╔Ё╔т║╪╓╥╓й╓╓╓г╓╞╓ю╓╣╓╓. ╓╙╢Й╓╓╓╥╓ч╓╧. к║н╖╓к╢ь╓╧╓К╓Ё╓х╓к╓о╫╫й╛цМ╟у╓Р╓о╓И╓ц╓ф╓╞╓ю╓╣╓╓. ╓О╓©╓╥╓©╓а╓кк║н╖╓кх©╓╧╓К╓Х╓╕╓й╥а╓г╔╫╔у╔х╔╕╔╖╔╒╓нгшиш╓Р╓╣╓╩╓й╓╓╓г╓╞╓ю╓╣╓╓! ╨╓╓ц╓©╓И.... ╓О╓©╓╥╓©╓а╓к╪алД╓РаВ╓Ка╟╓к, ╢Шб╦╓н port ╓ннЦ╓х bsd.port.mk ╓Р╓а╓Ц╓С╓хфи╓С╓г╓╞╓ю╓╣╓╓! ;) ╓╫╓Л╓г╓Б╓О╓╚╓И╓й╓╓╓Ё╓х╓╛╓╒╓ц╓©╓И╟Л©м╓гг╨╓ч╓й╓╓╓г╓и╓С╓и╓С╪алД╓╥╓ф╓╞╓ю╓╣╓╓! :-) <filename>Makefile</filename> ╓н╔╣╔С╔в╔К ╓Ё╓Л╓о port ╓н Makefile ╓Р╨Н╓К╨щ╓н╓╙╪Йкэ╓г╓╧. ╓╚╓╝╓╚╓ц╓Ё ([]) фБ╓н╔Ё╔А╔С╔х╓ок╨╓Л╓╨╓к╪Х╓ц╓ф╓╞╓ю╓╣╓╓. йя©Т╓н╫Гхж, цймН╓н╢ж╓н╤У╧т╓й╓и, Makefile ╓Р╨Н╓К╓х╓╜╓о╓й╓К╓ы╓╞╓Ё╓н╥а╪╟╓к╫╬╓ц╓ф╓╞╓ю╓╣╓╓. ╓Ё╓н╥а╪╟╓о╫емв╓й╬ПйС╓╛╢йц╠╓к╦╚╓д╓╠╓И╓Л╓К╓Х╓╕╓кюъ╥в╓╣╓Л╓ф╓╓╓ч╓╧. portlint ╓Р╩х╓ц╓ф Makefile ╓Р╔а╔╖╔ц╔╞╓╧╓К╓Ё╓х╓╛©Д╬╘╓╣╓Л╓ф╓╓╓ч╓╧. [╔ь╔ц╔ю ... ╓и╓н╓Х╓╕╓й port ╓н Makefile ╓╚╓╧╓╟╓к╓О╓╚╓К╓Х╓╕╓к╓й╓ц╓ф╓╓╓ч╓╧] # New ports collection makefile for: xdvi ["version required" ╧т╓о, PORTVERSION йя©Т╓г╓о port ╓н╔п║╪╔╦╔Г╔С╓Р ╫╫й╛╓ки╫╦╫╓г╓╜╓й╓╓╬Л╧Г╓к╓н╓ъи╛мв╓г╓╧. ] # Version required: pl18 + japanization patches 18.1 and 18.2 [╓Ё╓н Makefile ╓н╨г╫И╓нхг╓╛╨Ню╝╓╣╓Л╓©фЭиу╓г╓╧. ╓Ё╓н port ╓Р╔╒╔ц╔в╔╟╔Л║╪╔и╓╧╓К╓х╓╜╓к╓ойя╓╗╓й╓╓╓г╓╞╓ю╓╣╓╓.] # Date created: 26 May 1995 [╓Ё╓н╔╫╔у╔х╔╕╔╖╔╒╓Р╨г╫И╓к FreeBSD ╓к port ╓╥╓©©м╓нл╬а╟, ╓д╓ч╓Й, ╓Ё╓н Makefile ╓н╨г╫И╓нхг╓Р╫Я╓╓╓©©м╓г╓╧. ╓Ё╓н port ╓Р╔╒╔ц╔в╔╟╔Л║╪ ╔и╓╧╓К╓х╓╜, ╓Ё╓н╧т╓Бйя╓╗╓й╓╓╓г╓╞╓ю╓╣╓╓.] # Whom: Satoshi Asami <asami@FreeBSD.org> # # $FreeBSD$ [ ^^^^^^^^^ ╓Ё╓ниТй╛╓о, CVS ╔д╔Й║╪╓кфЧ╓Л╓К╩Ч╓к╪╚ф╟е╙╓к RCS ╓н ID й╦╩ЗнС╓к цж╓╜╢╧╓╗╓И╓Л╓ч╓╧.] # [port ╪╚бн, ╓╙╓Х╓с╔╙╔Й╔╦╔й╔К╓н╔╫║╪╔╧╓Р╪Х╓ц╓ф╓╞╓К╓х╓Ё╓М╓Р╣╜╫р╓╧╓КиТй╛. ╨г╫И╓ои╛╓╨ PORTNAME ╓х PORTVERSION, ╓╫╓╥╓фи╛мв╓й╓И PKGNAME, 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 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 [╟мб╦╓╧╓Кport -- ╓й╓╓╬Л╧Г╓Б╓╒╓Й╓ч╓╧] 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 [GNU autoconf ╓к╓Х╓ц╓фю╦ю╝╓╣╓Л╓© "configure" ╔╧╔╞╔Й╔в╔х╓РаЖ╓И╓╩╓©╓╓╓й╓И...] GNU_CONFIGURE= yes [/usr/bin/make╓г╓й╓╞, GNU make ╓Р╩х╓О╓й╓╓╓х╓╓╓╠╓й╓╓╓й╓И...] USE_GMAKE= yes [╓Ё╓Л╓╛ X ╓н╔╒╔в╔Й╔╠║╪╔╥╔Г╔С╓г "xmkmf -a" ╓РаЖ╓И╓╩╓©╓╓╓й╓И...] USE_IMAKE= yes [╓й╓и╓й╓и] [╡╪╓нйЩ╓н╔К║╪╔К╓г╩х╓╕хСи╦╫Ю╓нйя©Т] MY_FAVORITE_RESPONSE= "yeah, right" [╓╫╓╥╓ф, фцйл╓й╔©║╪╔╡╔ц╔х, ╩хмя╫Г╓к] 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 [╨г╦Е╓к╓ои╛╓╨] .include <bsd.port.mk> ╔я╔ц╔╜╔С╔╟╔Й╔╧╔х╓н╪╚ф╟ю╦ю╝ ╓ч╓╨, ╓╒╓й╓©╓н port ╓к PLIST ╓╛╓й╓╓╓Ё╓х╓Р╫Э╓╓╓ф╢╟а╢╓й╓Ё╓х╓РЁнг╖╓╥╓ф, ╤У╓н PLIST ╓Р╨Н╓ц╓ф╓╞╓ю╓╣╓╓. &prompt.root; touch PLIST ╪║╓к, ╓╒╓й╓©╓н port ╓Р╔╓╔С╔╧╔х║╪╔К╓╧╓К╓Ё╓х╓╛╓г╓╜╓К╔г╔ё╔Л╔╞╔х╔ЙЁ╛аь╓Р©╥╓©╓к╨Ню╝╓╥╓ф╓╞╓ю╓╣╓╓. ╓ч╓©, ╟мб╦╓╧╓К╓Б╓н╓Р╔╓╔С╔╧╔х║╪╔К╓╥╓ф╓╞╓ю╓╣╓╓. &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 ╓Б╓╥╓╒╓й╓©╓н port ╓╛ PREFIX ╓к╓а╓Ц╓С╓х╫╬╓╕╓й╓И, ╓Ё╓Ё╓г port ╓Р╔╓╔С╔╧╔х║╪╔К╓╥╓ф╔я╔ц╔╜╔С╔╟╔Й╔╧╔х╓Р╨Н╓К╓Ё╓х╓╛╓г╓╜╓ч╓╧. &prompt.root; make install PREFIX=/var/tmp &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 ╨г╦Е╓к, ╔я╔ц╔╜╔С╔╟╔Й╔╧╔х╓Р╪Й╓гю╟╓╗╓Ки╛мв╓╛╓╒╓Й╓ч╓╧. ╢╟а╢╓к╪╚ф╟╡╫╓╣╓Л╓ф╓╓╓К╓х╦ю╓ц╓©╓н╓о╓╕╓╫╓г╓╧. ╔ч╔к╔Е╔╒╔К╔з║╪╔╦╔у╔║╔╓╔К╓о╔я╔ц╔╜╔С╔╟╔Й╔╧╔х╓к╓г╓о╓й╓╞, port ╓н Makefile цФ╓н MANn ╓к╣╜╫р╓╥╓й╓╠╓Л╓п╓й╓Й╓ч╓╩╓С. ╔Ф║╪╔╤юъдЙ╔у╔║╔╓╔К╓о╨О╫Э╓╧╓К╓╚ filename.sample ╓х╓╥╓ф╔╓╔С╔╧╔х║╪╔К╓╣╓Л╓й╓╠╓Л╓п╓й╓Й╓ч╓╩╓С. ╓ч╓© info/dir ╔у╔║╔╓╔К╓о╔Й╔╧╔х╓к╢ч╓А╓╨, info ╔у╔║╔╓╔К╓к╣╜╫р╓╣╓Л╓ф╓╓╓К╓Х╓╕╓к, е╛юз╓й install-info ╧т╓кди╡ц╓╥╓й╓╠╓Л╓п╓й╓Й╓ч╓╩╓С. port ╓к╓Х╓ц╓ф╔╓╔С╔╧╔х║╪╔К╓╣╓Л╓К╔И╔╓╔ж╔И╔Й╓о, ldconfig ╓нюА╓г╪╗╓╥╓©╓Х╓╕╓к╣╜╨э╓╣╓Л╓К╓ы╓╜╓г╓╧. package ╓нл╬а╟ package ╓нл╬а╟╓о╟й╡╪╓н╔К║╪╔К╓к╓╥╓©╓╛╓ц╓ф╓д╓╠╓ф╓╞╓ю╓╣╓╓. ╓Ё╓Л╓о package ╓н╔г╔ё╔Л╔╞╔х╔Й╓Р╦╚╓Д╓╧╓╞╓╧╓К╓©╓А╓г, л╣цА╫Ь╓йл╬а╟╓╛╓©╓╞╓╣╓Сйб╓С╓г╓╓╓К╓х╔Ф║╪╔╤╓╛╩х╓╓╓е╓И╓╞╓й╓К╓н╓г╓о╓х╓╓╓╕©╢гш╓╚╓И╓г╓╧ (FTP ╔╣╔╓╔х╓й╓и╓к╓о╓©╓╞╓╣╓С package ╓╛╓╒╓Й╓ч╓╧╓╚╓И╓м). package ╓нл╬а╟╓о╟й╡╪╓н╓Х╓╕╓к╓╥╓ф╓╞╓ю╓╣╓╓. ╦ю╦Л-л╬а╟-╔╙╔в╔╥╔Г╔С╔п║╪╔╦╔Г╔С.хж╧Ф package л╬╓о ${PKGNAMEPREFIX}${PORTNAME}${PKGNAMESUFFIX}-${PORTVERSION} ╓х╓╓╓╕╓Х╓╕╓кдЙ╣а╓╣╓Л╓ф╓╓╓ч╓╧. йя©Т╓╛╓Ё╓н╫Я╪╟╓хе╛╧Г╓╥╓ф╓╓╓К╓Ё╓х╓РЁнг╖╓╥╓ф╓╞╓ю╓╣╓╓. FreeBSD ╓о╔Ф║╪╔╤╓н╢╥╓Л©ф╓╥╓С╓ю╦ю╦Л╓н╔╣╔щ║╪╔х╓кно╓РфЧ╓Л╓ф╓╓╓ч╓╧. фцдЙ╓н╦ю╦Л╓н╓©╓А╓н port ╓н package л╬╓к╓о ╦ю╦Л- ╓к ISO-639 ╓гдЙ╣а╓╣╓Л╓ф╓╓╓К╦ю╦Лл╬╓нн╛╬н╓РфЧ╓Л╓ф╓╞╓ю╓╣╓╓. ╓©╓х╓╗╓пфЭкэ╦Л╓й╓И ja, ╔М╔╥╔╒╦Л╓й╓И ru, ╔ы╔х╔й╔Ю╦Л╓й╓И vi, цФ╧Я╦Л╓й╓И zh, ╢з╧Я╦Л╓й╓И╓п ko, ╔и╔╓╔д╦Л╓й╓И de ╓х╓╓╓ц╓©╤Я╧Г╓г╓╧. port ╓╛╓╒╓К╦ю╦Лцо╟Х╓кфц╡╫╓╥╓©╓Б╓н╓г╓╒╓К╬Л╧Г╓к╓о, ╓╣╓И╓кфСй╦╩З╓н╧Ял╬╔Ё║╪╔и╓Риу╡ц╓╥╓ф╓╞╓ю╓╣╓╓. ╓©╓х╓╗╓п╧Г╫╟╧Я╠я╦Л╥В╓о en_US ╓х╓й╓Й, ╔╧╔╓╔╧╓н╔у╔И╔С╔╧╦Л╥В╓о fr_CH ╓х╓й╓Й╓ч╓╧. ╦ю╦Л- иТй╛╓о, PKGNAMEPREFIX йя©Т╓кдЙ╣а╓╣╓Л╓й╓╠╓Л╓п╓й╓Й╓ч╓╩╓С. л╬а╟╓ниТй╛╓о╦╤б╖е╙╓к╓о╓╧╓ы╓ф╠я╬╝й╦╩З╓Р╩х╓╓╓ч╓╧. нЦЁ╟╓о╓©╓╞╓╣╓С╓н╔в╔М╔╟╔И╔Ю╓╛фЧ╓ц╓ф╓╓╓К╣ПбГ╓й port ╓н╬Л╧Г╓г, XFree86 (╓ш╓С╓х╓к╓╒╓К╓С╓г╓╧╓Х) ╓Д ImageMagick ╓й╓и╓╛╓Ё╓Л╓к╓╒╓©╓Й╓ч╓╧. ╓╫╓╕╓г╓й╓╓╬Л╧Г╓к╓ол╬а╟╓нбГй╦╩З╓Р╬╝й╦╩З╓к (╬╞╓й╓╞╓х╓Б╨г╫И╓н╟Л╩З╓ю╓╠╓о) йя╓╗╓ф╓╞╓ю╓╣╓╓. ╓Б╓╥бГй╦╩З╓г╓╒╓К╓Ё╓х╓╛╫емв╓й╬Л╧Г (╓©╓х╓╗╓п╟Лй╦╩З╓нл╬а╟, R ╓х╓╚ V) ╓к╓о, ╓╒╓й╓©╓н╨шнл╓гбГй╦╩З╓Р╩х╓╕╓н╓Бни╓╓╓г╓╥╓Г╓╕. Perl 5 ╓н╔Б╔╦╔Е║╪╔К╓г╓оюХф╛╓к p5- ╓Риу╓╠, фС╫е╔Ё╔М╔С (::) ╓н╔╩╔я╔Л║╪╔©╓Р╔о╔╓╔у╔С (-) ╓кцж╓╜╓╚╓╗╓К╫╛╢╥╓к╓й╓ц╓ф╓╓╓ч╓╧. ╓©╓х╓╗╓п Data::Dumper ╓о p5-Data-Dumper ╓к╓й╓Й╓ч╓╧. ╓ч╓©, ╓╫╓н╔╫╔у╔х╔╕╔╖╔╒╓нл╬а╟╓х╓╥╓фдл╬О╩х╓О╓Л╓К╓Б╓н╓кхж╧Ф, ╔о╔╓╔у╔С, ╓╒╓К╓╓╓о╡╪юЧ╓╛фЧ╓ц╓ф╓╓╓К╬Л╧Г╓к╓о, ╓╫╓Л╓И╓Р╩х╓╕╓Ё╓х╓Б╧╫╓╓╓ч╓╩╓С (kinput2╓й╓и). ╔Ё╔С╔я╔╓╔К╩Ч╓к╢д╤╜йя©Т╓Д make ╓н╟З©Т╓й╓и╓г╔о║╪╔и╔Ё║╪╔и╓╣╓Л╓©╔г╔у╔╘╔К╔х╓Рйя╓╗╓ф╔Ё╔С╔я╔╓╔К╓г╓╜╓К╬Л╧Г, -compiled.specifics ╓к╓╫╓н╔Ё╔С╔я╔╓╔К╩Ч╓н╔г╔у╔╘╔К╔х╓РфЧ╓Л╓ф╓╞╓ю╓╣╓╓ (╔о╔╓╔у╔С╓о╓╒╓ц╓ф╓Б╓й╓╞╓ф╓Б╓╚╓ч╓╓╓ч╓╩╓С). мя╩Ф╓н╔╣╔╓╔╨, ╓╒╓К╓╓╓о╔у╔╘╔С╔х╓н╡РаЭеы╓й╓и╓╛╓Ё╓Л╓к╓╒╓©╓Й╓ч╓╧. compiled.specifics иТй╛╓о, PKGNAMESUFFIX йя©Т╓кдЙ╣а╓╣╓Л╓й╓╠╓Л╓п╓й╓Й╓ч╓╩╓С. ╔п║╪╔╦╔Г╔Схж╧Ф╓о©Т╩З╓х╔╒╔К╔у╔║╔ы╔ц╔х╓╚╓И╓й╓Й, ╔т╔Й╔╙╔и (.) ╓г╤Хюз╓Й╓ч╓╧. ╔╒╔К╔у╔║╔ы╔ц╔х╓офСй╦╩З╟й╬ЕбЁ╓╠╓ф╓о╓╓╓╠╓ч╓╩╓С. ╓©╓ю╟Л╓д╓ннЦЁ╟╓о║ж╔я╔ц╔а╔Л╔ы╔К║в╓Р╟улё╓╧╓К pl ╓г, ╓╫╓Л╟йЁ╟╓к╔п║╪╔╦╔Г╔Схж╧Ф╓╛╓ч╓ц╓©╓╞╓д╓╓╓ф╓╓╓й╓╓╬Л╧Г╓к╓н╓ъ╩х╓╕╓Ё╓х╓╛╓г╓╜╓ч╓╧. ╓Б╓╥╔╫╔у╔х╔╕╔╖╔╒╓н╔п║╪╔╦╔Г╔С╓к "alpha", "beta" ╓Д "pre" ╓х╓╓╓ц╓©й╦╩ЗнС╓╛╢ч╓ч╓Л╓К╬Л╧Г╓к╓о, ╔т╔Й╔╙╔и╓н╦Е╓к╨г╫И╓н╟Лй╦╩З╓Р╓х╓ц╓ф╓╞╓ю╓╣╓╓. ╓Ё╓Л╓И╓н╦Е╓к, ╓╣╓И╓к╔п║╪╔╦╔Г╔Сй╦╩ЗнС╓╛бЁ╓╞╬Л╧Г╓к╓о, ╟Лй╦╩З╓н╔╒╔К╔у╔║╔ы╔ц╔х╓н╦Е╓к╔т╔Й╔╙╔и╓Р╓д╓╠╓╨╓кхж╧Ф╓РбЁ╓╠╓ч╓╧. ╓Ё╓н╧м╓╗йЩ╓о, ╔п║╪╔╦╔Г╔Сй╦╩ЗнС╓Р╦╚╓ф╢йц╠╓к ports ╓Рйб╓ы╓И╓Л╓К╓Х╓╕╓к╓╧╓К╓©╓А╓н╓Б╓н╓г╓╧. фц╓к, ╔п║╪╔╦╔Г╔Схж╧Ф╓нЁфиТй╛╓╛и╛╓╨╔т╔Й╔╙╔и╓г╤Хюз╓И╓Л╓ф╓╓╓К╓Ё╓х, ╓ч╓©фЭиу╓ниТй╛╓╛╔п║╪╔╦╔Г╔Сй╦╩ЗнС╓н╟ЛиТ╓х╓й╓ц╓ф╓╓╓К╬Л╧Г╓к╓о yyyy.mm.dd ╓х╓╓╓╕╫Я╪╟╓Р╩х╓ц╓ф╓╓╓К╓Ё╓х╓РЁнг╖╓╥╓ф╓╞╓ю╓╣╓╓. dd.mm.yyyy ╓Д, 2000 г╞лДбЙ╓кбп╠Ч╓╥╓ф╓╓╓й╓╓ yy.mm.dd ╓х╓╓╓╕╫Я╪╟╓Р╩х╓ц╓ф╓о╓╓╓╠╓ч╓╩╓С. ╓г╓о, DISTNAME╓Рю╣╓╥╓╓ PKGNAME ╓кд╬╓╧нЦ╓Р╦╚╓ф╓ъ╓ч╓╥╓Г╓╕: ╟й╡╪╓о, ╔╫╔у╔х╔╕╔╖╔╒╓н╨Н╪т╓╛╥Х╓А╓©л╬а╟╓╚╓И е╛юз╓й package л╬╓кйя╢╧╓╧╓КйЩк║╓Р╪╗╓╥╓© (╪б╨щ╓н) нЦ╓г╓╧. гшишл╬ PKGNAMEPREFIX PORTNAME PKGNAMESUFFIX PORTVERSION мЩмЁ 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 alpha ╓н╓Х╓╕╓йй╦╩ЗнС╓о╩х╓╗╓й╓╓ v3.3beta021.src (╤У) tiff (╤У) 3.3 ╓й╓С╓й╓С╓г╓╥╓Г╓╕ ;) tvtwm (╤У) tvtwm (╤У) pl11 ╔п║╪╔╦╔Г╔Схж╧Ф╓ои╛╓╨и╛мв piewm (╤У) piewm (╤У) 1.0 ф╠╬Е xvgr-2.10pl1 (╤У) xvgr (╤У) 2.10.1 pl ╓╛╩х╓╗╓К╓н╓о, б╬╓к╔А╔╦╔Ц║╪/╔ч╔╓╔й║╪╔п║╪╔╦╔Г╔Схж╧Ф╓╛╓й╓╓╬Л╧Г╓н╓ъ gawk-2.15.6 ja- gawk (╤У) 2.15.6 фЭкэ╦Л╔п║╪╔╦╔Г╔С psutils-1.13 (╤У) psutils -letter 1.13 ╔Ё╔С╔я╔╓╔К╩Ч╓кмя╩Ф╓н╔╣╔╓╔╨╓Р╩ьдЙ pkfonts (╤У) pkfonts 300 1.0 300dpi╔у╔╘╔С╔хмя╓н package ╔╙╔Й╔╦╔й╔К╓н╔╫║╪╔╧╓к╓ч╓ц╓©╓╞╔п║╪╔╦╔Г╔С╬ПйС╓╛╦╚еЖ╓©╓И╓╨, ╓ч╓©╦╤╨Н╪т╓╛©╥╓╥╓╓╔п║╪╔╦╔Г╔С╓Р╔Й╔Й║╪╔╧╓╧╓К╡дг╫ю╜╓╛дЦ╓╓╓х╓╜╓к╓о, ╔п║╪╔╦╔Г╔Схж╧Ф╓х╓╥╓ф 1.0 ╓Р╩х╓╗╓п╓╓╓╓╓г╓╥╓Г╓╕ (╬Е╣╜╓н piewm ╓ннЦ╓╛╓Ё╓Л╓к╓╒╓©╓Й╓ч╓╧). ╓╫╓╕╓г╓й╓╓╬Л╧Г╓к╓о╦╤╨Н╪т╓кй╧╓╞╓╚, фЭиу (yyyy.mm.dd) ╓Р╩х╓╕╓й╓и╓╥╓ф╓╞╓ю╓╣╓╓. ╔╚╔ф╔╢╔Й ╓╧╓г╓к╓╢б╦цн╓н╓Х╓╕╓к, ports ╓о╓╓╓╞╓д╓╚╓н╔╚╔ф╔╢╔Й╓кй╛нЮ╓╣╓Л╓ф╓╓╓ч╓╧. ╓Ё╓Л╓Рм╜╦З╓кмЬмя╓╧╓К╓©╓А╓к╓о, port ╓Р╨Ню╝╓╧╓К©м║╧╓х╔Ф║╪╔╤╓╛, ╓╫╓Л╓╬╓Л╓н╔╚╔ф╔╢╔Й╓╛╡©╓г╓╒╓К╓╚, ╓и╓н╓Х╓╕╓к╓╥╓ф╔╚╔ф╔╢╔Й╓кй╛нЮ╓╧╓К╓╚╓РмЩ╡Р╓╧╓Ки╛мв╓╛╓╒╓Й╓ч╓╧. ╦╫╨ъ╓н╔╚╔ф╔╢╔Й╓н╔Й╔╧╔х ╓ч╓╨, ╓Ё╓Л╓╛╦╫╨ъ╓н port ╓н╔╚╔ф╔╢╔Й╓н╔Й╔╧╔х╓г╓╧. ╔╒╔╧╔©╔Й╔╧╔╞(*) ╓╛иу╓╓╓ф╓╓╓К╓Б╓н╓о╡╬аш (virtual) ╔╚╔ф╔╢╔Й╓г╓╧ — ╓Ё╓Л╓И╓к╓обп╠Ч╓╧╓К╔╣╔ж╔г╔ё╔Л╔╞╔х╔Й╓╛ port ╔д╔Й║╪╓к╓о╓╒╓Й╓ч╓╩╓С. ╡╬аш╔╚╔ф╔╢╔Й╓г╓й╓╓╓Б╓н╓о, ╓╫╓н╔╣╔ж╔г╔ё╔Л╔╞╔х╔ЙфБ╓н pkg/COMMENT ╓к╟Л╧т╓н╣╜╫р╓╛╓╒╓Й╓ч╓╧ (нЦ: archivers/pkg/COMMENT). ╔╚╔ф╔╢╔Й юБлю afterstep* AfterStep ╔╕╔ё╔С╔и╔╕╔ч╔м║╪╔╦╔Ц╓Р╔╣╔щ║╪╔х╓╧╓К ports archivers ╔╒║╪╔╚╔╓╔жмя╔д║╪╔К astro е╥й╦Ёь╢ьо╒╓н ports audio ╔╣╔╕╔С╔и╓Р╔╣╔щ║╪╔х╓╧╓К ports benchmarks ╔ы╔С╔а╔ч║╪╔╞╔Ф║╪╔ф╔ё╔Й╔ф╔ё biology ю╦й╙Ёь╢ьо╒╓н╔╫╔у╔х╔╕╔╖╔╒ cad CAD ╔д║╪╔К chinese цФ╧Я╦Л╔╣╔щ║╪╔х comms дл©╝╔╫╔у╔х╔╕╔╖╔╒. ╓ш╓х╓С╓и╓о╔╥╔Й╔╒╔К╔щ║╪╔хмя╓г╓╧. converters й╦╩З╔Ё║╪╔ийя╢╧ databases ╔г║╪╔©╔ы║╪╔╧ deskutils ╔Ё╔С╔т╔Е║╪╔©╓╛х╞лю╓╣╓Л╓К╟йа╟╓к╢Ы╬Е╓г╩х╓О╓Л╓ф╓╓╓©ф╩╤Я (лУцМ: ╓╓╓О╓Ф╓К╔г╔╧╔╞╔х╔ц╔в╔Ф║╪╔ф╔ё╔Й╔ф╔ё╓н╓Ё╓х) devel Ё╚х╞╔Ф║╪╔ф╔ё╔Й╔ф╔ё. ╓и╓╕╓╥╓ф╓Б╓Ё╓Ё╓кцж╓╚╓й╓╠╓Л╓п╓й╓И╓й╓╓мЩмЁ╓╛╓╒╓К╓н╓г╓й╓╓╦б╓Й, ╔И╔╓╔ж╔И╔Й╓Р╓Ё╓Ё╓к╢ч╓А╓й╓╓╓г╓╞╓ю╓╣╓╓. editors ╟Лхле╙╓й╔╗╔г╔ё╔©. фц╪Л╓й╔╗╔г╔ё╔©╓о╓╫╓Л╓╬╓Л╓у╓╣╓О╓╥╓╓╔╩╔╞╔╥╔Г╔С╓кфЧ╓Л╓ч╓╧ (╓©╓х╓╗╓п©Т╪╟╔╗╔г╔ё╔©╓о math ╓г╓╧). elisp Emacs-lisp ╓н ports emulators б╬╓н╔╙╔з╔Л║╪╔ф╔ё╔С╔╟╔╥╔╧╔ф╔Ю╓н╔╗╔ъ╔Е╔Л║╪╔©. ц╪кЖ╔╗╔ъ╔Е╔Л║╪╔©╓о╓Ё╓Ё╓к╢ч╓ч╓Л╓ч╓╩╓С — X ╔ы║╪╔╧╓н╓Б╓н╓о x11 ╓к, ╔ф╔╜╔╧╔х╔ы║╪╔╧╓н╓Б╓н╓о╣║г╫╓к╓Х╓ц╓ф comms ╓╚ misc ╓кй╛нЮ╓╣╓Л╓ч╓╧. ftp FTP ╔╞╔И╔╓╔╒╔С╔х╓х╔╣║╪╔п╔Ф║╪╔ф╔ё╔Й╔ф╔ё. port ╓╛ FTP ╓х HTTP ╓нн╬йЩ╓Р╔╣╔щ║╪╔х╓╥╓ф╓╓╓Л╓п, ftp ╓кфЧ╓Л, бХфС╔╚╔ф╔╢╔Й╓Р www ╓х╓╥╓ч╓╧. games ╔╡║╪╔Ю german ╔и╔╓╔д╦Л╔╣╔щ║╪╔х gnome* GNU Object Model Environment (GNOME) ╔в╔М╔╦╔╖╔╞╔х╓н ports graphics ╔╟╔И╔у╔ё╔ц╔╞╔Ф║╪╔ф╔ё╔Й╔ф╔ё hebrew ╔ь╔ж╔И╔╓╦Л╔╣╔щ║╪╔х irc ╔╓╔С╔©║╪╔м╔ц╔х╔Й╔Л║╪╔а╔Ц╔ц╔х (IRC) мя╔Ф║╪╔ф╔ё╔Й╔ф╔ё ipv6* IPv6 ╢ьо╒╓н╔╫╔у╔х╔╕╔╖╔╒ japanese фЭкэ╦Л╔╣╔щ║╪╔х java Java ╦ю╦Л╔╣╔щ║╪╔х kde* K Desktop Environment (kde) ╓н ports korean ╢з╧Я╦Л╔╣╔щ║╪╔х lang ╔в╔М╔╟╔И╔ъ╔С╔╟╦ю╦Л linux* Linux ╔╒╔в╔Й╔╠║╪╔╥╔Г╔С╓х╔╣╔щ║╪╔х╔Ф║╪╔ф╔ё╔Й╔ф╔ё mail ╔А║╪╔К╔╫╔у╔х╔╕╔╖╔╒ math ©Тцм╥в╩╩╔╫╔у╔х╔╕╔╖╔╒╓Д╓╫╓нб╬╓н©ТЁь╔╫╔у╔х╔╕╔╖╔╒ mbone MBone ╔╒╔в╔Й╔╠║╪╔╥╔Г╔С misc ╪О║╧╓н╔Ф║╪╔ф╔ё╔Й╔ф╔ё — ╢Пкэе╙╓кб╬╓н╔╚╔ф╔╢╔Й╓кб╟╓╣╓й╓╓╓Б╓н╓г╓╧. ╓Ё╓Л╓об╬╓н╡╬аш╓г╓й╓╓╔╚╔ф╔╢╔Й╓Рх╪╓О╓й╓╓, мё╟Л╓н╔╚╔ф╔╢╔Й╓г╓╧. misc ╓хб╬╓н╔╚╔ф╔╢╔Й╓╛ CATEGORIES ╧т╓к╫Я╓╚╓Л╓ф╓╓╓К╬Л╧Г, misc ╓Р╨О╫Э╓╥╓фб╬╓н╔╣╔ж╔г╔ё╔Л╔╞╔х╔Й╓к╓╙╓╓╓фни╓╓╓х╓╓╓╕╟улё╓к╓й╓Й╓ч╓╧. net ╪О║╧╓н╔м╔ц╔х╔О║╪╔╞╔╫╔у╔х╔╕╔╖╔╒ news USENET ╔к╔Е║╪╔╧╔╫╔у╔х╔╕╔╖╔╒ offix* OffiX suite ╓н ports palm 3Com Palm(tm) ╔╥╔Й║╪╔╨╓Р╔╣╔щ║╪╔х╓╧╓К╔╫╔у╔х╔╕╔╖╔╒ perl5* ╪б╧т╓к perl ╔п║╪╔╦╔Г╔С 5 ╓Ри╛мв╓х╓╧╓К ports plan9* Plan9 ╓кмЁмХ╓╧╓К╓╣╓ч╓╤╓ч╓й╔╫╔у╔х╔╕╔╖╔╒ print ╟У╨Ч╔╫╔у╔х╔╕╔╖╔╒. DTP мя╔д║╪╔К (╔в╔Л╔с╔Е╔╒╓й╓и) ╓Б╓Ё╓Ё╓кй╛нЮ╓╣╓Л╓ч╓╧. python* python ╦ю╦Л╓г╫Я╓╚╓Л╓©╔╫╔у╔х╔╕╔╖╔╒ ruby* ruby ╦ю╦Л╓г╫Я╓╚╓Л╓©╔╫╔у╔х╔╕╔╖╔╒ russian ╔М╔╥╔╒╦Л╔╣╔щ║╪╔х security ╔╩╔╜╔Е╔Й╔ф╔ё╢ьо╒╓н╔Ф║╪╔ф╔ё╔Й╔ф╔ё shells ╔Ё╔ч╔С╔и╔И╔╓╔С╔╥╔╖╔К sysutils ╔╥╔╧╔ф╔Ю╔Ф║╪╔ф╔ё╔Й╔ф╔ё tcl75* ╪б╧т╓к Tcl ╔п║╪╔╦╔Г╔С 7.5 ╓Ри╛мв╓х╓╧╓К ports tcl76* ╪б╧т╓к Tcl ╔п║╪╔╦╔Г╔С 7.6 ╓Ри╛мв╓х╓╧╓К ports tcl80* ╪б╧т╓к Tcl ╔п║╪╔╦╔Г╔С 8.0 ╓Ри╛мв╓х╓╧╓К ports tcl81* ╪б╧т╓к Tcl ╔п║╪╔╦╔Г╔С 8.1 ╓Ри╛мв╓х╓╧╓К ports textproc ╔ф╔╜╔╧╔х╫ХмЩ╔Ф║╪╔ф╔ё╔Й╔ф╔ё. DTP ╔д║╪╔К╓о╓Ё╓Ё╓г╓о╓й╓╞, print/ ╓кй╛нЮ╓╣╓Л╓ч╓╧. tk41* ╪б╧т╓к Tk ╔п║╪╔╦╔Г╔С 4.1 ╓Ри╛мв╓х╓╧╓К ports tk42* ╪б╧т╓к Tk ╔п║╪╔╦╔Г╔С 4.2 ╓Ри╛мв╓х╓╧╓К ports tk80* ╪б╧т╓к Tk ╔п║╪╔╦╔Г╔С 8.0 ╓Ри╛мв╓х╓╧╓К ports tk81* ╪б╧т╓к Tk ╔п║╪╔╦╔Г╔С 8.1 ╓Ри╛мв╓х╓╧╓К ports tkstep80* ╪б╧т╓к TkSTEP ╔п║╪╔╦╔Г╔С 8.0 ╓Ри╛мв╓х╓╧╓К ports vietnamese ╔ы╔х╔й╔Ю╦Л╔╣╔щ║╪╔х windowmaker* WindowMaker ╔╕╔ё╔С╔и╔╕╔ч╔м║╪╔╦╔Ц╓Р╔╣╔щ║╪╔х╓╧╓К ports www World Wide Web ╢ьо╒╓н╔╫╔у╔х╔╕╔╖╔╒. HTML ╦ю╦Л╔╣╔щ║╪╔х╓Б╓Ё╓Ё╓кй╛нЮ╓╣╓Л╓ч╓╧. x11 X ╔╕╔ё╔С╔и╔╕╔╥╔╧╔ф╔Ю╓х╓╫╓н╢ьо╒╔╫╔у╔х╔╕╔╖╔╒. ╓Ё╓н╔╚╔ф╔╢╔Й╓о, д╬юэ╔╕╔ё╔С╔и╔╕╔╥╔╧╔ф╔Ю╓Р╔╣╔щ║╪╔х╓╧╓К╔╫╔у╔х╔╕╔╖╔╒╓н╓ъ╓Рбп╬щ╓х╓╧╓К╓Б╓н╓г╓╧. дл╬О╓н X ╔╒╔в╔Й╔╠║╪╔╥╔Г╔С╓Р╓Ё╓Ё╓кй╛нЮ╓╥╓й╓╓╓г╓╞╓ю╓╣╓╓. ╓╒╓й╓©╓н port ╓╛ X ╔╒╔в╔Й╔╠║╪╔╥╔Г╔С╓г, USE_XLIB ╓╛дЙ╣а (USE_IMAKE ╓РдЙ╣а╓╧╓К╓х╪╚ф╟е╙╓кдЙ╣а╓╣╓Л╓ч╓╧) ╓╣╓Л╓ф╓╓╓К╬Л╧Г╓о, е╛юз╓й╔╚╔ф╔╢╔Й╓кй╛нЮ╓╥╓ф╓╞╓ю╓╣╓╓. ╓ч╓©, ╓╫╓Л╓И╓н╓ш╓х╓С╓и╓об╬╓н x11-* ╔╚╔ф╔╢╔Й (╡╪╣╜╩╡╬х) ╓кй╛нЮ╓╣╓Л╓ч╓╧. x11-clocks X11 мя╩Ч╥в x11-fm X11 мя╔у╔║╔╓╔К╔ч╔м║╪╔╦╔Ц x11-fonts X11 ╔у╔╘╔С╔х╓х╔у╔╘╔С╔х╔Ф║╪╔ф╔ё╔Й╔ф╔ё x11-servers X11 ╔╣║╪╔п x11-toolkits X11 ╔д║╪╔К╔╜╔ц╔х x11-wm X11 ╔╕╔ё╔С╔и╔╕╔ч╔м║╪╔╦╔Ц е╛юз╓й╔╚╔ф╔╢╔Й╓на╙бР б©╓╞╓н╔╚╔ф╔╢╔Й╓к╫е╓й╓К╓н╓г, ╓и╓Л╓РбХ╟Л╔╚╔ф╔╢╔Й╓к╓╧╓К╓╚╓Р╥Х╓А╓й╓╠╓Л╓п╓й╓И╓й╓╓╓Ё╓х╓╛╓©╓с╓©╓с╓╒╓К╓г╓╥╓Г╓╕. ╓Ё╓Л╓Р╓╕╓ч╓╞╥Х╓А╓К╔К║╪╔К╓╛╓╓╓╞╓д╓╚╓╒╓Й╓ч╓╧. ╟й╡╪╓о╓╫╓нм╔юХ╫Г╓н╔Й╔╧╔х╓г, м╔юХеы╓н╧Б╓╓╓Б╓н╓╚╓ИдЦ╓╓╓Б╓н╓н╫Г╓к╫Я╓╓╓ф╓╒╓Й╓ч╓╧. ╦ю╦Лфцм╜╓н╔╚╔ф╔╢╔Й╓╛╓ч╓╨╨г╫И╓г╓╧. ╓©╓х╓╗╓пфЭкэ╦Л╓н X11 ╓н╔у╔╘╔С╔х╓Р╔╓╔С╔╧╔х║╪╔К╓╧╓К port ╓н╬Л╧Г, CATEGORIES ╧т╓о japanese x11-fonts ╓х╓й╓К╓г╓╥╓Г╓╕. ╓Х╓Йфцд╖е╙╓й╔╚╔ф╔╢╔Й╓╛, ╟Лхле╙╓й╔╚╔ф╔╢╔Й╓Х╓Йм╔юХ╓╣╓Л╓ч╓╧. ╓©╓х╓╗╓п, HTML ╔╗╔г╔ё╔©╓н╬Л╧Г╓о www editors ╓х╓й╓Й╓ч╓╧. ╓Ё╓Л╓Р╣у╫Г╓к╓о╓╥╓й╓╓╓г╓╞╓ю╓╣╓╓. ╓ч╓©, port ╓╛ irc, mail, mbone, news, security, www ╓н╓╓╓╨╓Л╓╚╓кб╟╓╧╓К╬Л╧Г╓к╓о net ╓ои╛мв╓╒╓Й╓ч╓╩╓С. x11 ╓РбХфС╔╚╔ф╔╢╔Й╓к╓╧╓К╓н╓обХ╟Л╔╚╔ф╔╢╔Й╓╛╪╚аЁ╦ю╦Л╓н╬Л╧Г╓н╓ъ╓к╓╥╓ф╓╞╓ю╓╣╓╓. фц╓к X ╓н╔╒╔в╔Й╔╠║╪╔╥╔Г╔С╓к╓о x11 ╓Р╩ьдЙ╓╥╓й╓╓╓г╓╞╓ю╓╣╓╓. ╓Б╓╥, ╓╒╓й╓©╓н port ╓╛б╬╓н╓и╓н╔╚╔ф╔╢╔Й╓к╓Бб╟╓╥╓й╓╓╬Л╧Г╓к╓о misc ╓к╓╥╓ф╓╞╓ю╓╣╓╓. ╓Б╓╥, ╓╒╓й╓©╓╛╔╚╔ф╔╢╔Й╓к╓д╓╓╓ф╪╚©╝╓╛╩Щ╓ф╓й╓╓╬Л╧Г╓к╓о, ╓╫╓н╓Ё╓х╓Р send-pr ╓╧╓К╩Ч╓к╫Я╓╜╡ц╓╗╓ф╓╞╓ю╓╣╓╓. ╓╫╓╕╓╧╓Л╓п import ╓╧╓Ка╟╓к╓╫╓Л╓к╓д╓╓╓ф╣дою╓г╓╜╓ч╓╧ (╓Б╓╥╓╒╓й╓©╓╛╔Ё╔ъ╔ц╔©║╪╓г╓╒╓Л╓п, ╓╫╓н╓Ё╓х╓Р &a.ports; ╓каВ╓ц╓фюХ╓к╣дою╓╧╓К╓Х╓╕╓к╓╥╓ф╓╞╓ю╓╣╓╓ — ©╥╓╥╓╓ port ╓╛╢ж╟Ц╓ц╓©╔╚╔ф╔╢╔Й╓к import ╓╣╓Л╓ф, ╓╧╓╟╟эф╟╓╣╓Л╓К╓Ё╓х╓╛б©╓╓╓н╓г). ╓Ё╓нй╦╫Я╓х ports ╔╥╔╧╔ф╔Ю╓нйя╧╧ ╓Б╓╥╓╒╓й╓©╓╛, ╓©╓╞╓╣╓С╓н ports ╓нйщ╪И╓Р╓╥╓ф╓╓╓К╓н╓г╓╒╓Л╓п, &a.ports; ╔А║╪╔Й╔С╔╟╔Й╔╧╔х╓нфБмф╓Рфи╓Ю╓Ё╓х╓Р╧м╓╗╓ф╓╞╓ю╓╣╓╓. ports ╓н╓╥╓╞╓ъ╓к╓д╓╓╓ф╓н╫емв╓ййя╧╧ею╓о╓Ё╓Ё╓к ╔╒╔й╔╕╔С╔╧╓╣╓Л╓ч╓╧. ╨г©╥╓нйя╧╧ею╓к╓д╓╓╓ф╓о, ╓╓╓д╓г╓Б, bsd.port.mk ╓н CVS ╔М╔╟╓г╬э╨ы╓й╬ПйС╓Рфю╓К╓Ё╓х╓╛╓г╓╜╓ч╓╧. ╓Д╓ц╓х╓╙╓╥╓ч╓╓! ╓╓╓Д╓о╓Д, д╧╓╓й╦╬о╓г╓╧╓ъ╓ч╓╩╓С. ╓Ё╓Ё╓ч╓гфи╓С╓г╓╞╓ю╓╣╓ц╓©йЩ╓к╓о╢╤╪у, ╢╤╪у╓г╓╢╓╤╓╓╓ч╓╧. ╓╣╓╒, port ╓н╨Н╓ЙйЩ╓╛╓О╓╚╓ц╓©╓х╓Ё╓М╓гю╓Ё╕цФ╓н╔╫╔у╔х╔╕╔╖╔╒╓Р port ╡╫╓╥╓ч╓╥╓Г╓╕. FreeBSD ╔в╔М╔╦╔╖╔╞╔х╓к╧в╦╔╓╧╓К╓к╓о, ╓╫╓Л╓╛╨г╓Б╢йц╠╓ййЩк║╓г╓╧! :-) diff --git a/ja_JP.eucJP/share/sgml/catalog b/ja_JP.eucJP/share/sgml/catalog index 5ebe8768fc..2635dac5fe 100644 --- a/ja_JP.eucJP/share/sgml/catalog +++ b/ja_JP.eucJP/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/ja_JP.eucJP/share/sgml/catalog,v 1.1 2000/09/28 23:29:46 nbm Exp $ -- PUBLIC "-//FreeBSD//DOCUMENT DocBook Stylesheet//EN" "freebsd.dsl" +PUBLIC "-//FreeBSD//ENTITIES DocBook Mailing List Entities//JP" + "mailing-lists.ent" diff --git a/ja_JP.eucJP/books/handbook/mailing-lists.ent b/ja_JP.eucJP/share/sgml/mailing-lists.ent similarity index 99% rename from ja_JP.eucJP/books/handbook/mailing-lists.ent rename to ja_JP.eucJP/share/sgml/mailing-lists.ent index 52e5cb1c7e..4191ed3ca3 100644 --- a/ja_JP.eucJP/books/handbook/mailing-lists.ent +++ b/ja_JP.eucJP/share/sgml/mailing-lists.ent @@ -1,117 +1,117 @@ 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/ru_RU.KOI8-R/books/handbook/Makefile b/ru_RU.KOI8-R/books/handbook/Makefile index 04fdd4416f..776aa8e0d8 100644 --- a/ru_RU.KOI8-R/books/handbook/Makefile +++ b/ru_RU.KOI8-R/books/handbook/Makefile @@ -1,65 +1,64 @@ # # Build the FreeBSD Handbook. # # The FreeBSD Russian Documentation Project -# $FreeBSD: doc/ru_RU.KOI8-R/books/handbook/Makefile,v 1.4 2001/03/11 16:44:41 phantom Exp $ +# $FreeBSD: doc/ru_RU.KOI8-R/books/handbook/Makefile,v 1.5 2001/06/11 01:20:25 ache Exp $ # $FreeBSDru: frdp/doc/ru_RU.KOI8-R/books/handbook/Makefile,v 1.18 2001/03/11 12:04:50 phantom Exp $ # Original version: 1.28 # MAINTAINER=phantom@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+= 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+= ports/chapter.sgml #SRCS+= ppp-and-slip/chapter.sgml #SRCS+= printing/chapter.sgml SRCS+= security/chapter.sgml #SRCS+= serialcomms/chapter.sgml SRCS+= staff/chapter.sgml #SRCS+= users/chapter.sgml SRCS+= x11/chapter.sgml # Entities SRCS+= ../../../en_US.ISO8859-1/books/handbook/authors.ent SRCS+= chapters.ent -SRCS+= mailing-lists.ent SRCS+= newsgroups.ent SRCS+= ruauthors.ent DOC_PREFIX?= ${.CURDIR}/../../.. .include "${DOC_PREFIX}/share/mk/doc.project.mk" diff --git a/ru_RU.KOI8-R/books/handbook/book.sgml b/ru_RU.KOI8-R/books/handbook/book.sgml index 400b0a7ca5..8976440434 100644 --- a/ru_RU.KOI8-R/books/handbook/book.sgml +++ b/ru_RU.KOI8-R/books/handbook/book.sgml @@ -1,163 +1,163 @@ %man; %bookinfo; %chapters; %authors; %ruauthors; - %mailing-lists; + %mailing-lists; %newsgroups; ]> Руководство FreeBSD Проект Русской Документации FreeBSD
ru-freebsd-doc@FreeBSD.org.ua
Февраль 1999 1995 1996 1997 1998 1999 2000 2001 The FreeBSD Documentation Project 2000 2001 Проект Русской Документации FreeBSD &bookinfo.legalnotice; Добро пожаловать в FreeBSD! Это руководство охватывает процесс инсталляции и ежедневного использования FreeBSD Release &rel.current;. Это руководство находится в процессе разработки и являет собой результат работы множества людей. Многие из разделов до сих пор не существуют, а некоторые из существующих требуют обновления. Если Вы заинтересованы в помощи этому проекту, пошлите письмо в &a.ru.doc;. Обновленная версия этого документа постоянно доступна с Основного Web сервера FreeBSD. Он также может быть загружен из Internet в одном из наиболее распространенных форматов с FTP сервера Проекта FreeBSD или с одного из многочисленных зеркал. Вы также можете захотеть воспользоваться возможностью Поиска в Руководстве FreeBSD.
В Начале &chap.introduction; &chap.install; &chap.basics; &chap.ports; Системное Администрирование &chap.boot; &chap.security; &chap.disks; &chap.backups; &chap.x11; Сетевые Коммуникации &chap.advanced-networking; &chap.mail; Углубленные темы &chap.cutting-edge; &chap.policies; &chap.kernelopts; &chap.kerneldebug; &chap.linuxemu; Приложения &chap.mirrors; &chap.bibliography; &chap.staff; &chap.pgpkeys;
diff --git a/ru_RU.KOI8-R/books/porters-handbook/book.sgml b/ru_RU.KOI8-R/books/porters-handbook/book.sgml index 43b6e47cbc..4e7107186a 100644 --- a/ru_RU.KOI8-R/books/porters-handbook/book.sgml +++ b/ru_RU.KOI8-R/books/porters-handbook/book.sgml @@ -1,4669 +1,4669 @@ %man; %bookinfo; %authors; - + %mailing-lists; ]> Руководство FreeBSD по созданию портов The FreeBSD Russian Documentation Project Апрель 2000 2000 The FreeBSD Documentation Project &bookinfo.legalnotice; Как самому сделать порт Итак, теперь вас интересует, как создать собственный порт или обновить существующий? Великолепно! Ниже находятся некоторые указания по созданию нового порта для FreeBSD. Если вы хотите обновить существующий порт, вы должны прочесть их, а затем . Если этот документ недостаточно подробен, вы должны обратиться к файлу /usr/ports/Mk/bsd.port.mk, который включается в make-файл каждого порта. Он хорошо прокомментирован, и даже если вы не занимаетесь хаканьем make-файлов каждодневно, из него вы сможете узнать много нового. Кроме того, конкретные вопросы можно задать, послав письмо на адрес &a.ports;. Только часть переменных (VAR), которые могут быть переопределены, описаны в этом документе. Большинство (если не все) описаны в начале файла bsd.port.mk. В этом файле используется нестандартная настройка шага табуляции. Emacs и Vim должны распознать это при загрузке файла. Как vi, так и ex могут быть настроены на использование правильного значения выдачей команды :set tabstop=4 после загрузки файла. Быстрое портирование В этом разделе будет описано, как сделать порт на скорую руку. Во многих случаях этого бывает недостаточно, но мы посмотрим. Во-первых, скачайте оригинальный tar-файл и поместите его в каталог DISTDIR, который по умолчанию есть не что иное, как /usr/ports/distfiles. Здесь предполагается, что программное обеспечение компилируется без проблем как есть, то есть для работы приложения на вашей системе FreeBSD не потребовалось абсолютно никаких изменений. Если требовалось что-то изменить, то вам придется обратиться также и к следующему разделу. Создание файла <filename>Makefile</filename> Минимальный Makefile будет выглядеть примерно так: # 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> Посмотрим, сможете ли вы его понять. Не обращайте внимание на содержимое строчки $FreeBSD$, она будет заполнена автоматически системой CVS, когда порт будет импортирован в наше дерево портов. Вы можете найти более подробный пример в разделе пример Makefile. Создание информационных файлов Имеется три информационных файла, которые требуются для любого порта, вне зависимости от того, является ли он пакаджем или нет. Это pkg-comment, pkg-descr и pkg-plist, и их префикс pkg- отличает их от других файлов. <filename>pkg-comment</filename> Это однострочное описание порта. Пожалуйста, не включайте сюда название пакаджа (или номер версии программного обеспечения). Комментарий должен начинаться с заглавной буквы и не заканчиваться точкой. Вот пример: A cat chasing a mouse all over the screen <filename>pkg-descr</filename> Это более подробное краткое описание порта. От одного до нескольких абзацев, кратко описывающих, что представляет собой порт, будет достаточно. Это не руководство и не подробнейшее описание того, как использовать или компилировать порт! Пожалуйста, будьте внимательны при копировании текста из README или страниц справочника; слишком часто они не являются кратким описанием порта или имеют неудобный формат (например, страницы справочника выровнены пробелами). Если портируемое приложение имеет официальную страничку Интернет, укажите ее здесь. Предварите один из сайтов словом WWW: для того, чтобы вспомогательные утилиты работали правильно. Рекомендуется, чтобы вы указали свое имя в конце этого файла, как здесь: 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.edu <filename>pkg-plist</filename> Здесь перечисляются все файлы, устанавливаемые портом. Его также называют “списком для упаковки”, потому что пакадж генерируется упаковкой файлов, которые здесь указаны. Имена путей указываются относительно установочного префикса (обычно /usr/local или /usr/X11R6). Если вы используете переменные MANn (а вы должны это делать), то указывать страницы справочника здесь не нужно. Вот маленький пример: 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/oneko Обратитесь к странице Справочника по команде &man.pkg.create.1; с подробным описанием формата списка упаковки. В списке вы должны указать все файлы, но не каталоги. Кроме того, если порт создает каталоги сам на этапе установки, нужно добавить директивы @dirrm в подходящие места для удаления их при удалении порта. Рекомендуется, чтобы имена файлов в этом списке были отсортированы в алфавитном порядке. Это позволит значительно облегчить сверку изменений при обновлении порта. Создание списка упаковки вручную может оказаться весьма трудоёмкой задачей. Если порт устанавливает большое количество файлов, раздел об автоматическом построении списка упаковки может помочь сэкономить время. Создание файла с контрольной суммой Просто введите команду make makesum. Правила утилиты make автоматически сгенерируют файл distinfo. Тестирование порта Вы должны удостовериться, что правила построения порта выполняют именно то, что вы хотите, включая создание пакаджа для порта. Вот те важные вещи, которые вы должны проверить. pkg-plist не содержит ничего сверх того, что устанавливается вашим портом pkg-plist содержит абсолютно все, что устанавливается вашим портом Ваш порт может быть переустановлен множество раз с помощью указания цели reinstall Ваш порт подчищает за собой после своего удаления Рекомендуемый порядок проверки make install make package make deinstall pkg_add package-name make deinstall make reinstall make package Проверьте, что ни на шаге package, ни на шаге deinstall не выдается никаких предупреждений. После выполнения шага 3 проверьте, что все новые каталоги были успешно удалены. Также попробуйте запустить программное обеспечение после выполнения шага 4, чтобы убедиться, что оно работает правильно при установке из пакаджа. Проверка вашего порта утилитой <command>portlint</command> Будьте добры, пользуйтесь утилитой portlint для проверки того, что ваш порт соответствует нашим рекомендациям. Программа portlint является частью Коллекции Портов. В частности, вы можете захотеть проверить, правильно ли сформирован файл Makefile и соответствующим ли образом наименован пакадж. Посылка порта Первым делом удостоверьтесь, что вы прочитали раздел о том, что можно и нельзя делать. Теперь, когда вы счастливы от своего первого порта, единственное, что осталось сделать, это включить его в основное дерево портов FreeBSD и осчастливить этим всех остальных. Нам не нужен ни ваш каталог work, ни пакадж pkgname.tgz, так что удалите их прямо сейчас. Затем просто включите вывод команды shar `find port_dir` в сообщение об ошибке и пошлите его с помощью программы &man.send-pr.1; (обратитесь к разделу Сообщения об ошибках и общие замечания для получения подробной информации о программе &man.send-pr.1;. Если размер неупакованного порта превышает 20 КБ, то сожмите его в tar-файл и воспользуйтесь утилитой &man.uuencode.1; перед тем, как включить его в сообщение (можно посылать такие файлы, даже если сообщение не превышают 20КБ, но это не рекомендуется). Не забудьте указать в сообщении категорию ports и класс change-request (Не указывайте, что сообщение имеет статус confidential!). Добавьте также краткое описание программы, порт которой вы создали, в раздел Description отправляемого PR и сам порт в виде архива shar или архива tar, обработанного утилитой uuencode, поместив его в раздел Fix. Последнее облегчит труд коммиттеров, которые используют скрипты для выполнения своей работы, связанной с портами. Повторим еще раз, что не нужно включать ни оригинальный файл с дистрибутивом, ни каталог work, ни пакадж, построенный вами командой make package. В прошлом мы просили вас закачивать новые порты на ftp-сервер (ftp.FreeBSD.org). Больше этого делать не нужно, так как на каталог incoming/ нет доступа в режиме чтения, из-за большого количества пиратского программного обеспечения, оказавшегося в нем. Мы посмотрим на ваш порт, при необходимости вернём его обратно, а затем включим порт в наше дерево. Ваше имя также появится в списке “Людей, внесших свой вклад” в Руководстве и других файлах. Это ли не круто?!? :-) Вы можете значительно облегчить нам работу, если будете давать хорошее описание в поле описания проблемы при посылке. Мы предпочитаем нечто вроде “New port: <краткое описание порта>” в случае нового порта и “Update port: <category>/<port> <краткое описание обновлений>” в случае обновления порта. Если вы будете придерживаться этой схемы, то шансы, что кто-нибудь вскоре взглянет на ваш PR, весьма высоки. Медленное портирование Итак, все оказалось не так уж и просто, и порт потребовал некоторых модификаций для того, чтобы заставить его работать. В этом разделе мы расскажем, шаг за шагом, как его модифицировать, чтобы он работал с нашей системой портов. Как всё это работает Во-первых, когда пользователь дает в своем каталоге с портом команду make, происходит целая череда событий. Во время чтения этого текста может оказаться полезным иметь файл bsd.port.mk открытым в другом окне, что сильно поможет в их понимании. Но не волнуйтесь сильно, если вы не до конца понимаете, что делается в bsd.port.mk, не так уж много людей его понимает... :-> Запускается цель fetch. Цель fetch отвечает за то, что архив исходных текстов имеется в наличии локально в каталоге DISTDIR. Если цель fetch не может найти требуемые файлы в каталоге DISTDIR, то он будет искаться по указателю URL MASTER_SITES, который устанавливается в Makefile, а также на нашем основном ftp-сервере по адресу ftp://ftp.FreeBSD.org/pub/FreeBSD/ports/distfiles/, куда мы по возможности помещаем дистрибутивные файлы для архива. Затем она попытается сгрузить указанный файл с помощью FETCH, полагая, что запрашивающая машина имеет прямое подключение к Интернет. Если файл скачается удачно, то он будет помещен в каталог DISTDIR для последующего использования и обработки. Выполняется цель extract. Она ищет дистрибутивный файл порта (как правило, tar-архив gzip) в каталоге DISTDIR и распаковывает его во временный каталог, задаваемый переменной WRKDIR (по умолчанию work). Выполняется цель patch. Во-первых, применяются все патчи, заданные переменной PATCHFILES. Во-вторых, если какие-либо файлы с патчами, носящие имена patch-*, имеются в подкаталоге PATCHDIR (по умолчанию это каталог files), то они применяются в этот момент в алфавитном порядке. Запускается цель configure. Здесь может выполняться любая из многих различных вещей. Если существует скрипт scripts/configure, то он запускается. Если задана переменная HAS_CONFIGURE или GNU_CONFIGURE, то запускается скрипт WRKSRC/configure. Если задана переменная USE_IMAKE, то запускается команда XMKMF (по умолчанию это xmkmf -a). Выполняется цель build. Она отвечает за переход в собственный рабочий каталог порта (WRKSRC) и его построение. Если задана переменная USE_GMAKE, будет использоваться GNU-версия утилиты make, в противном случае будет использована системная утилита make. Выше перечислены стандартные действия. Кроме того, вы сами можете определить цели pre-что-то или post-что-то, или создать скрипты с такими именами в подкаталоге scripts, и они будут запущены до или после выполнения действий по умолчанию. Например, если у вас есть цель post-extract, определенная в вашем файле Makefile и файл pre-build в подкаталоге scripts, то после выполнения обычных действий по распаковке, будет вызвана цель post-extract а скрипт pre-build будет выполнен перед запуском стандартных правил построения. Рекомендуется использовать цели из Makefile, если действия достаточно просты, потому что в дальнейшем будет проще определить, какие нестандартные действия требует порт. Действия по умолчанию выполняются целями do-что-то из bsd.port.mk. Например, команды для распаковки порта находятся в цели do-extract. Если вам не хватает цели по умолчанию, вы можете ее исправить, переопределив цель do-something в вашем файле Makefile. “Основные” цели (к примеру, extract, configure, и тд.) не делают ничего больше, чем проверяют успешность завершения всех предыдущих шагов и вызывают настоящие цели или скрипты, и их не нужно менять. Если вам нужно изменить распаковку, исправляйте do-extract, но никогда не трогайте extract! Теперь вы представляете, что происходит, когда пользователь набирает команду make, теперь давайте пройдемся через рекомендуемые для создания настоящего порта шаги. Получение исходного кода Получите оригинальные исходные тексты (обычно) в виде упакованного tar-архива (foo.tar.gz или foo.tar.Z) и скопируйте его в каталог DISTDIR. Всегда используйте исходные тексты основной ветки разработки везде, где это возможно. Если вы не можете найти ftp/http сайт с хорошим подключением к сети, или находите только сайты, которые имеют раздражающе нестандартные форматы, то можете захотеть поместить копию на надежный сервер ftp или http, который вам доступен (например, ваша домашняя страница). Проверьте, что вы установили переменную MASTER_SITES в значение, которое соответствует вашему решению. Если вы не можете найти доступного и надёжного места для помещения дистрибутивного файла, то мы сами сможем разместить его на сервере ftp.FreeBSD.org. Дистрибутивный файл должен быть помещён в каталог ~/public_distfiles/ одного из пользователей машины freefall. Попросите того, кто коммиттил ваш порт, сделать это. Этот человек также задаст переменной MASTER_SITES значение MASTER_SITE_LOCAL, а в переменной MASTER_SITE_SUBDIR укажет своё имя пользователя с машины freefall. Если дистрибутивные файлы вашего порта постоянно меняются по непонятным причинам, остается поместить дистрибутив на вашу домашнюю веб-страницу и указать ее первой в списке MASTER_SITES. Это позволит избежать получения ошибок checksum mismatch у пользователей, а также уменьшит нагрузку на людей, сопровождающих наш ftp-сервер. Также, если у порта имеется только один основной сервер, то рекомендуется поместить архивную копию на свой сайт и указать его в списке MASTER_SITES вторым. Если вашему порту требуются дополнительные `патчи', доступные в Интернет, скачайте также и их, поместив в каталог DISTDIR. Не волнуйтесь, если они находятся не на том же сайте, откуда взят дистрибутивный архив, мы умеем обрабатывать такие ситуации (смотрите описание PATCHFILES ниже). Модификация порта Распакуйте копию дистрибутивного файла в отдельный каталог и внесите изменения, которые необходимы для того, чтобы порт компилировался нормально в текущей версии FreeBSD. Тщательно отслеживайте все, что вы делаете, этот процесс вам предстоит автоматизировать. Все, включая удаление, добавление или модификацию в файлах должны будут выполняться автоматически с помощью скриптов или файлов патчей, когда вы завершите работу над портом. Если вашему порту во время компиляции, установки и настройки требуется довольно много взаимодействовать с пользователем, то посмотрите на один из классических скриптов Configure Лэрри Уолла (Larry Wall) и сделайте сами что-либо подобное. Предназначение новой коллекции портов - это сделать каждое приложение в стиле “plug-and-play” настолько, насколько это вообще возможно для конечного пользователя при минимальном использовании дискового пространства. Если явно не указано обратное, то патчи, скрипты и другие файлы, которые вы создали и предоставили для Коллекции Портов FreeBSD, неявно подпадают под стандартные условия лицензии BSD. Создание патчей Файлы, которые добавлялись или изменялись в процессе создания порта, могут быть выявлены вызовом программы diff с рекурсией, а результат работы этой программы может быть в дальнейшем передан программе patch. Каждый набор патчей, который вы собираетесь применить, должен быть собран в файл с именем patch-*, где * означает порядок, в которой будут применяться патчи — это делается в алфавитном порядке, то есть сначала aa, затем ab и так далее. Если хотите, вы можете использовать имена файлов, указывающие на имена файлов, к которым применяются патчи, такие, как patch-Imakefile или patch-src-config.h. Эти файлы должны находиться в каталоге PATCHDIR, откуда они будут взяты автоматически. Все патчи должны быть сделаны относительно каталога WRKSRC (как правило, это каталог, в который распаковывается исходный архив и где будет выполняться построение). Для упрощения внесения изменений и обновлений вы должны избегать наличия более чем одного патча для одного и того же файла (например, патчей patch-aa и patch-ab, оба меняющих файл WRKSRC/foobar.c). Конфигурирование Поместите все дополнительные команды, требуемые для настройки, в ваш скрипт configure и сохраните его в подкаталоге scripts. Как отмечено выше, вы можете сделать это целями в файле Makefile и/или скриптами с именами pre-configure или post-configure. Обработка пользовательского ввода Если для построения, конфигурации или установки вашего порта требуется некоторый ввод со стороны пользователя, то задайте переменную IS_INTERACTIVE в вашем файле Makefile. В случае “ночного построения” это позволит пропустить ваш порт, если пользователь в своем окружении задал переменную BATCH (и если пользователь установил переменную INTERACTIVE, то будут строиться только порты, которые требуют взаимодействия с пользователем. При наличии разумных ответов на задаваемые вопросы, подходящих по умолчанию, также рекомендуется проверять переменную PACKAGE_BUILDING и выключать интерактивный скрипт, если он есть. Это позволит нам строить пакаджи для помещения на компакт-диски и ftp-серверы. Настройка файла Makefile Настройка файла Makefile достаточно проста, и мы снова предполагаем, что перед тем, как начать, вы посмотрите на существующие примеры. К тому же в этом руководстве имеется примерный Makefile, так что взгляните на него и, пожалуйста, следуйте порядку переменных и разделов в этом образце, чтобы облегчить чтение вашего порта другими людьми. Итак, расположим решаемые задачи в порядке их возникновения при создании вашего нового файла Makefile: Оригинальные исходный код Находится ли он в каталоге DISTDIR в виде стандартного упакованного архиватором gzip tar-архива с именем типа foozolix-1.2.tar.gz? Если это так, можно перейти к следующему шагу. Если нет, то вы должны попытаться переопределить некоторые из переменных DISTNAME, EXTRACT_CMD, EXTRACT_BEFORE_ARGS, EXTRACT_AFTER_ARGS, EXTRACT_SUFX или DISTFILES в зависимости от того, насколько необычен формат дистрибутивного файла. (Самый распространённый случай - это EXTRACT_SUFX=.tar.Z, когда tar-файл упакован обычной утилитой compress, а не архиватором gzip.) В худшем случае вы можете просто определить свою собственную цель do-extract для переопределения действий по умолчанию, хотя к этому нужно будет прибегать в очень редких случаях, если вообще придётся. <makevar>PORTNAME</makevar> и <makevar>PORTVERSION</makevar> В переменной PORTNAME вы должны указать основную часть имени вашего порта, а в переменной PORTVERSION - номер версии. <makevar>PORTREVISION</makevar> и <makevar>PORTEPOCH</makevar> <makevar>PORTREVISION</makevar> Переменная PORTREVISION представляет собой монотонно увеличивающееся число, которое обнуляется при каждом увеличении значения переменной PORTVERSION (то есть каждый раз, когда создателями выпускается новый официальный релиз), и добавляется к имени пакаджа, если оно не равно нулю. Значение PORTREVISION увеличивается каждый раз, когда в порте FreeBSD делаются изменения, которые достаточно сильно затрагивают содержимое или структуру соответствующего пакаджа. Примеры случаев, когда значение PORTREVISION должно быть увеличено: Добавление патчей для исправления пробелов в безопасности, ошибок, или добавления новой функциональности в порт FreeBSD. Изменения в файле построения порта для включения и выключения параметров, определяемых при компиляции пакаджа. Изменения в списке упаковки или в поведении пакаджа во время его установки (например, изменение скрипта, генерирующего начальные данные для пакаджа, такие, как ssh-ключи для хоста). Увеличение версии динамической библиотеки, от которой зависит порт (в этом случае тот, кто попытается установить старый пакадж после установки более новой версии библиотеки, не сможет этого сделать, потому что при этом будет делаться поиск старой библиотеки libfoo.x, а не libfoo.(x+1)). Большие функциональные изменения в дистрибутивном файле порта, происходящие без объявлений, и приводящие к большим изменениям, то есть изменения в дистрибутиве требуют корректировки файла distinfo без соответствующего изменения PORTVERSION, когда как команда diff -ru между новой и старой версиями показывает нетривиальные изменения в коде. Примеры изменений, которые не требуют увеличения переменной PORTREVISION: Изменения стиля в скелете порта без функциональных изменений в пакадже. Изменения в переменной MASTER_SITES или другие функциональные изменения порта, которые не затрагивают получающегося пакаджа. Тривиальные патчи к дистрибутивному файлу, такие, как исправления опечаток, которые не так уж важны, что пользователи пакаджа должны озаботиться обновлением. Исправления, касающиеся этапа построения, которые делают возможным построение пакаджа, если ранее это было невозможно сделать (пока изменения не приводят к изменению работы на любых других платформах, на которых порт ранее строился). Так как PORTREVISION отражает содержимое пакаджа, то если ранее пакадж не строился, то нет нужды увеличивать PORTREVISION для отметки изменения. Правило, которому нужно приблизительно следовать, заключается в том, что нужно спрашивать себя, является ли вносимое в порт изменение таким, что кто-либо и где-либо от него выиграет (в виде усовершенствования, исправления или благодаря тому, что новый пакадж будет реально работать). Если это так, то переменная PORTREVISION должна быть увеличена, чтобы автоматизированные инструменты (например, pkg_version) смогли обнаружить факт появления нового пакаджа. <makevar>PORTEPOCH</makevar> Время от времени разработчик программного обеспечения или создатель порта FreeBSD делают что-то не так и выпускают версию программы, номер которой меньше предыдущей версии. Примером этого является порт, название которого меняется с foo-20000801 на foo-1.0 (изначально это не считалось бы более новой версией, так как 20000801 численно больше, чем 1). В ситуациях, подобных этой, должно быть увеличено значение PORTEPOCH. Если значение PORTEPOCH не равно нулю, то оно добавляется к имени пакаджа, как описано в разделе выше. Значение PORTEPOCH никогда не уменьшается и не сбрасывается в ноль, потому что это приведет к ошибке сравнения с пакаджем с меньшим номером эпохи (то есть то, что пакадж устарел. обнаружено не будет): номер новой версии (например, 1.0,1 в примере выше) останется меньше, чем номер предыдущей версии (2000801), однако суффикс ,1 интерпретируется различными автоматизированными утилитами особым образом, и окажется больше, чем предполагаемый суффикс ",0" более раннего пакаджа). Предполагается, что в большинстве портов переменная PORTEPOCH использоваться не будет, но при корректном использовании PORTVERSION может появиться необходимость её иметь, если в будущих релизах программное обеспечение должно изменить структуру номера версии. Однако создателям портов нужно быть внимательными, когда разработчик выпускает релиз без официального номера версии - эдакие "промежуточные" релизы. Имеется соблазн пометить релиз датой его выхода, что может вызвать проблемы, как и в примере выше, когда будет выпущен новый "официальный" релиз. Например, если промежуточный релиз помечен датой 20000917, а предыдущая версия программного обеспечения имела номер 1.2, то промежуточному релизу должно быть поставлено в соответствие значение PORTVERSION, равное 1.2.20000917 или что-то похожее, но не 20000917, так как последующий релиз, скажем, 1.3, должен иметь численно большее значение. Пример использования переменных <makevar>PORTREVISION</makevar> и <makevar>PORTEPOCH</makevar> Выполнен коммит порта gtkmumble, версии 0.10, в коллекцию портов. PORTNAME= gtkmumble PORTVERSION= 0.10 Значение PKGNAME станет равным gtkmumble-0.10. Обнаружен пробел в безопасности, что потребовало создания локального патча для FreeBSD. Соответственно было увеличено значение переменной PORTREVISION. PORTNAME= gtkmumble PORTVERSIOn= 0.10 PORTREVISION= 1 PKGNAME принимает значение gtkmumble-0.10_1 Разработчиком выпущена новая версия с номером 0.2 (оказалось, что под номером 0.10 автор имел в виду 0.1.0, а не то, что будет выпущено после версии 0.9 - извините, теперь уже поздно). Так как новый младший номер версии 2 по значению меньше, чем номер предыдущей версии 10, то должно быть увеличено значение PORTEPOCH для того, чтобы заставить распознавать вновь создаваемый пакадж как "более новый". Так как это новый релиз программы, то PORTREVISION обнуляется (или удаляется из make-файла). PORTNAME= gtkmumble PORTVERSION= 0.2 PORTEPOCH= 1 PKGNAME принимает значение gtkmumble-0.2,1 Следующий релиз имеет номер версии 0.3. Так как значение переменной PORTEPOCH никогда не уменьшается, что переменные, определяющие версии, теперь выглядят так: PORTNAME= gtkmumble PORTVERSION= 0.3 PORTEPOCH= 1 PKGNAME принимает значение gtkmumble-0.3,1 Если значение PORTEPOCH этим обновлением было бы сброшено в 0, то кто-нибудь, имеющий установленный пакадж gtkmumble-0.10_1, не смог бы распознать пакадж gtkmumble-0.3 как более новый, так как 3 было бы меньше, чем 10. Переменные <makevar>PKGNAMEPREFIX</makevar> и <makevar>PKGNAMESUFFIX</makevar> Две необязательные переменные, PKGNAMEPREFIX и PKGNAMESUFFIX, объединяются со значениями PORTNAME и PORTVERSION для формирования PKGNAME в форме ${PKGNAMEPREFIX}${PORTNAME}${PKGNAMESUFFIX}-${PORTVERSION}. Добейтесь того, чтобы это соответствовало нашим рекомендациям по правильному выбору названий для пакаджей. В частности, в переменной PORTVERSION не разрешается использование дефиса (-). Кроме того, если в имени пакаджа присутствует часть language- или compiled.specifics, то используйте переменные PKGNAMEPREFIX и PKGNAMESUFFIX, соответственно. Не делайте их частью значения переменной PORTNAME. <makevar>DISTNAME</makevar> В переменной DISTNAME указывается имя порта так, как назвали его создатели программного обеспечения. Значение DISTNAME по умолчанию совпадает с ${PORTNAME}-${PORTVERSION}, так что переопределите её значение в случае необходимости. DISTNAME используется только в двух местах. Во-первых, список дистрибутивных файлов (DISTFILES) по умолчанию состоит из ${DISTNAME}${EXTRACT_SUFX}. И во-вторых, предполагается, что дистрибутивный файл будет распакован в подкаталог с именем WRKSRC, значение которого по умолчанию есть не что иное, как work/${DISTNAME}. Значения переменных PKGNAMEPREFIX и PKGNAMESUFFIX не влияют на значение DISTNAME. Заметьте также, что значение WRKSRC равно work/${PORTNAME}-${PORTVERSION}, и в случае, когда оригинальный архив называется по имени, отличном от ${PORTNAME}-${PORTVERSION}${EXTRACT_SUFX}, скорее всего, вы должны оставить DISTNAME как есть— лучше переопределить DISTFILES, чем задавать значения как DISTNAME, так и WRKSRC (и, возможно, ещё и EXTRACT_SUFX). <makevar>CATEGORIES</makevar> В процессе создания пакаджа он помещается в каталог /usr/ports/packages/All, а в одном или более подкаталогов из /usr/ports/packages создаются на него ссылки. Имена этих подкаталогов определяются переменной CATEGORIES. Такая схема нужна для облегчения жизни пользователя, когда он сталкивается с массой пакаджей на ftp-сервере или компакт-диске. Пожалуйста, посмотрите на список существующих категорий и выберите те из них, которые более всего подходят к вашему порту. Этот список также определяет, куда в дереве портов будет помещен порт. Если вы укажете здесь более одной категории, то предполагается, что файлы порта будут помещены в подкаталог с именем первой категории. Посмотрите раздел о категориях для получения подробной информации о том, как правильно выбрать категории. Если ваш порт действительно относится к чему-то, что абсолютно не имеет отношения ни к одной из существующих категорий, вы можете даже создать новую категорию. В этом случае, пожалуйста, пошлите письмо с вашим предложением на адрес &a.ports;. <makevar>MASTER_SITES</makevar> Содержит часть с каталогом ftp/http-URL, которая указывает на оригинальный архив на сервере MASTER_SITES. Не забудьте лидирующий слэш (/)! Макрос команды make будет пытаться воспользоваться этой переменной для получения дистрибутивного файла с помощью программы FETCH, если он не будет найден в системе. Рекомендуется помещать в список много сайтов, предпочтительно с разных континентов. Это поможет при наличии проблем с мировой сетью, и мы даже планируем добавить поддержку автоматического определения ближайшего сайта и сгрузки файлов оттуда! Если оригинальный архив находится на одном из таких популярных серверов, как X-contrib, GNU или Perl CPAN, то указывайте эти сайты в простой форме при помощи MASTER_SITE_* (к примеру, MASTER_SITE_XCONTRIB или MASTER_SITE_PERL_GNU). Просто укажите в переменной MASTER_SITES одно из этих значений, а в переменной MASTER_SITE_SUBDIR задайте путь к архиву. Вот пример: MASTER_SITES= ${MASTER_SITE_XCONTRIB} MASTER_SITE_SUBDIR= applications Эти переменные пределены в файле /usr/ports/Mk/bsd.sites.mk. Всё время добавляются новые сайты, так что обращайтесь к последней версии этого файла перед тем, как послать нам свой порт. Пользователь может также задать значения переменных MASTER_SITE_* в файле /etc/make.conf для того, чтобы переопределить выбранные нами варианты, и использовать вместо них свои любимые зеркала этих популярных архивов. <makevar>PATCHFILES</makevar> Если вашему порту требуются некоторых дополнительные патчи, которые доступны по ftp или http, задайте имена этих файлов в переменной PATCHFILES, а в переменной PATCH_SITES укажите URL того каталога, в котором они содержатся (формат такой же, как для MASTER_SITES). Если патч не относится к самому верху дерева исходных текстов (то есть WRKSRC), потому что он содержит некоторые дополнительные пути, установите соответственно значение переменной PATCH_DIST_STRIP. В частности, если все имена путей в патче имеют дополнительный путь foozolix-1.0/ перед именем файла, то задайте PATCH_DIST_STRIP=-p1. Не волнуйтесь, если патчи упакованы; они будут распакованы автоматически, если имена файлов оканчиваются на .gz или .Z. Если патч распространяется вместе с какими-то другими файлами, такими, как документация, в виде tar-архива gzip, вы не можете просто использовать PATCHFILES. Если это ваш случай, добавьте имя и местоположение архива с патчем к DISTFILES и MASTER_SITES. Затем воспользуйтесь переменной EXTRA_PATCHES для указания этих файлов, и bsd.port.mk автоматически применит эти патчи. В частности, не копируйте файлы с патчами в каталог PATCHDIR—этот каталог может быть недоступным для записи. Отметьте, что архив будет распакован вне исходного кода, как обычно, и к тому же его не нужно явно распаковывать, если это обычный архив gzip или compress. Если вы сделаете последнее, приложите дополнительные усилия для того, чтобы не перезаписать что-либо, уже существующее в этом каталоге. Также не забудьте добавить команду для удаления скопированного патча в цели pre-clean. <makevar>MAINTAINER</makevar> Укажите здесь ваш адрес электронной почты. Пожалуйста. :-) Подробное описание того, за что отвечает лицо, поддерживающее порт, даётся в главе MAINTAINER в Makefiles. Зависимости Многие порты зависят от других портов. Имеется пять переменных, которые вы можете использовать для обеспечения того, что все требуемое находится на машине пользователя. Имеется также несколько предопределенных переменных, отражающих зависимости для общих случаев, плюс еще несколько для управления поведением зависимостей. <makevar>LIB_DEPENDS</makevar> Эта переменная указывает, от каких совместно используемых библиотек зависит порт. Это список пар lib:dir:target где lib - это имя библиотеки, dir - это каталог, в котором можно ее найти в случае, если ее нет на машине, и target - это цель, которую нужно вызвать в этом каталоге. Например, LIB_DEPENDS= jpeg.9:${PORTSDIR}/graphics/jpeg:install проверит наличие библиотеки jpeg со старшим номером версии 9 и перейдет в подкаталог graphics/jpeg вашего дерева портов для ее построения и установки, если библиотека отсутствует. Часть target может быть опущена, если она равна DEPENDS_TARGET (по умолчанию install). Часть lib - это аргумент, который передается команде ldconfig -r | grep -wF. В этой переменной не должно быть регулярных выражений. Зависимость проверяется дважды, один раз внутри цели extract, а затем из цели install. Кроме того, имя зависимости помещается в пакадж, так что pkg_add будет автоматически его устанавливать, если его нет на пользовательской системе. <makevar>RUN_DEPENDS</makevar> В этой переменной перечисляются выполнимые файлы или файлы, от которых зависит работа порта. Это список пар вида path:dir:target где path - это имя программы или файла, а dir - каталог, в котором можно найти порт в случае, если его нет в системе, и target - это цель, которую нужно вызвать в этом каталоге. Если path начинается со слэша (/), он воспринимается как файл и его существование проверяется командой test -e; в противном случае предполагается, что это выполнимый файл и для определения того, имеется ли программа в пути поиска пользователя, используется команда which -s. Например, RUN_DEPENDS= ${PREFIX}/etc/innd:${PORTSDIR}/news/inn \ wish8.0:${PORTSDIR}/x11-toolkits/tk80 проверит, существует ли файл или каталог /usr/local/etc/innd и построит и установит его из подкаталога news/inn дерева портов, если он не будет найден. Он также проверит, имеется ли выполнимый файл с именем wish8.0 в вашем пути поиска, перейдет в подкаталог x11-toolkits/tk80 вашего дерева портов для его построения и установки, если он не будет найден. В приведенном примере innd является выполнимым файлом; если выполнимый файл находится в необычном для пользовательского маршрута поиска файлов месте, вы должны указать полный путь к файлу. Зависимость проверяется внутри цели install. Кроме того, имя зависимости помещается в пакадж, так что программа pkg_add будет автоматически его устанавливать, если он не будет найден в пользовательской системе. Часть target может быть опущена, если она совпадает с DEPENDS_TARGET. <makevar>BUILD_DEPENDS</makevar> В этой переменной перечисляются выполнимые или обычные файлы, которые требуются порту для его построения. Как и RUN_DEPENDS, это список пар path:dir:target Например, BUILD_DEPENDS= unzip:${PORTSDIR}/archivers/unzip будет проверять наличие выполнимого фала с именем unzip и перейдет в подкаталог archivers/unzip вашего дерева портов для его построения и установки, если последний не будет найден. Под “построением” здесь понимается все от распаковки до компиляции. Зависимость проверяется из цели extract. Часть target может быть опущена, если она совпадает с DEPENDS_TARGET. <makevar>FETCH_DEPENDS</makevar> В этой переменной перечисляются выполняемые файлы или просто файлы, которые требуются порту для сгрузки. Как и предыдущие две переменные, это список пар path:dir:target Например, FETCH_DEPENDS= ncftp2:${PORTSDIR}/net/ncftp2 будет проверять наличие выполняемого файла с именем ncftp2 и перейдет в каталог net/ncftp2 вашего дерева портов для его построения и установки, если тот не будет найден. Зависимость проверяется при выполнении цели fetch. Часть target может быть опущена, если она совпадает с DEPENDS_TARGET. <makevar>DEPENDS</makevar> Если имеется зависимость, которая не подпадает ни под одну из вышеперечисленных четырех категорий, или ваш порт требует наличия исходных текстов другого порта в распакованном виде кроме того, что этот порт должен быть установлен, то воспользуйтесь этой переменной. Это список пар dir:target, потому что, в отличие от предыдущих случаев, ничего не проверяется. Часть target может быть опущена, если она совпадает с DEPENDS_TARGET. Переменные зависимостей общего вида Определите переменную USE_XLIB=yes, если ваш порт для установки требует X Window System (что подразумевается при использовании переменной USE_IMAKE). Определите переменную USE_GMAKE=yes, если ваш порт требует вместо стандартной для BSD утилиты make ее GNU-аналог. Задайте USE_AUTOCONF=yes, если порту для работы требуется GNU autoconf. Определите переменную USE_QT=yes, если ваш порт использует самую последнюю версию пакета qt. Укажите USE_PERL5=yes в случае, если вашему порту требуется версия 5 языка perl. (Последнее особенно важно, так как некоторые версии FreeBSD имеют perl5 в составе системы, когда как другие - нет.) Замечания касательно зависимостей Как уже отмечено выше, целью, которая вызывается по умолчанию в случае, когда это требует зависимость, является DEPENDS_TARGET. Она по умолчанию есть install. Это пользовательская переменная; она нигде не определена в файле Makefile порта. Если вашему порту требуется особый метод обработки зависимости, воспользуйтесь частью :target переменной *_DEPENDS вместо того, чтобы переопределять DEPENDS_TARGET. Когда вы набираете команду make clean, эта операция также выполняется и над зависимостями этого порта. Если вы не хотите, чтобы это случилось, определите переменную NOCLEANDEPENDS в вашем окружении. Чтобы безусловно зависеть от другого порта, укажите переменную ${NONEXISTENT} в качестве первого поля переменной BUILD_DEPENDS или RUN_DEPENDS. Пользуйтесь этим, только когда вам нужно иметь исходный код другого порта. Вы можете сэкономить время на компиляции, указав также и цель. Например, BUILD_DEPENDS= ${NONEXISTENT}:${PORTSDIR}/graphics/jpeg:extract всегда будет переходить в каталог с портом JPEG и распаковывать его. Не нужно использовать DEPENDS, если есть другой способ получить требуемый результат. Это может привести к тому, что какой-то другой порт всегда будет строиться (и по умолчанию устанавливаться). и такая зависимость отразится и на пакадже. Если это именно то, что вам нужно, то я рекомендую вам описывать это через BUILD_DEPENDS и RUN_DEPENDS—по крайней мере смысл будет более понятен. Механизм построения Если ваш пакадж использует GNU-версию утилиты make, задайте USE_GMAKE=yes. Если ваш пакадж использует configure, задайте HAS_CONFIGURE=yes. Если ваш пакадж использует GNU-версию configure, задайте GNU_CONFIGURE=yes (это также подразумевает HAS_CONFIGURE). Если вы хотите передать дополнительные параметры в configure (список параметров представляет собой --prefix=${PREFIX} для GNU configure и пустую строку для не-GNU configure), укажите эти дополнительные параметры в CONFIGURE_ARGS. Если ваш пакадж использует GNU-версию autoconf, задайте USE_AUTOCONF=yes. Это подразумевает GNU_CONFIGURE, и приведет к вызову autoconf до запуска configure. Если ваш пакадж является приложением для X, которое создает файлы Makefile из соответствующих файлов Imakefile при помощи утилиты imake, то задайте USE_IMAKE=yes. Это приведет к автоматическому запуску команды xmkmf -a на этапе конфигурирования. Если использование флага является для вашего порта проблематичным, задайте 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. <makevar>MASTERDIR</makevar> Если вашему порту требуется построение довольно различающихся версий пакаджей через переменную (задающую, например, разрешение, или размер бумаги), которая принимает различные значения, создайте для каждого пакаджа отдельный подкаталог, чтобы пользователям было легче определить, каким пакаджем воспользоваться, но попробуйте использовать совместно между портами как можно больше файлов. В типичном случае вам потребуются только очень короткие файлы 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, так чтобы мы могли легко создавать бинарные файлы, скомпонованные как динамически (для тех, кто строит приложение из порта), так и статически (для тех, кто будет распространять приложения в виде пакаджей). <makevar>REQUIRES_MOTIF</makevar> Если вашему порту требуется Motif, задайте эту переменную в файле Makefile. Это не позволит людям, у которых нет собственной копии Motif, даже попытаться построить порт. <makevar>MOTIFLIB</makevar> Эта переменная будет установлена сценарием 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 в качестве аргументов ( и ), вместо того, чтобы изменять исходный текст файлов 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 до и после выполнения каждого шага. Файлы <filename>pkg-<replaceable>*</replaceable></filename> Есть несколько приёмов работы с файлами pkg-*, которые мы ещё не описали, но они иногда могут быть очень кстати. <filename>pkg-message</filename> Если вам нужно вывести сообщение для человека, устанавливающего приложение, то вы можете поместить сообщение в файл pkg-message. Эта возможность часто оказывается полезной для вывода дополнительных шагов установки, которые нужно предпринять после выполнения команды pkg_add, или для вывода информации о лицензировании. Файл pkg-message не нужно добавлять в pkg-plist. И он не будет автоматически выводиться, если пользователь использует порт, а не пакадж, так что вы должны будете сами выводить его при выполнении цели post-install. <filename>pkg-install</filename> Если при установке бинарного пакаджа по команде 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 порта. <filename>pkg-req</filename> Если вашему порту нужно определять, должен ли он устанавливаться или нет, то вы можете создать скрипт “необходимости” pkg-req. Он будет вызван автоматически в момент установки/удаления для определения того, должны ли они реально выполняться. Изменение содержимого <filename>pkg-plist</filename> в зависимости от 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. Изменение имён файлов <filename>pkg-<replaceable>*</replaceable></filename> Все имена файлов pkg-* определяются с помощью переменных, так что вы можете изменить их, если это нужно, в вашем файле Makefile. Это особенно полезно, если вы используете одни и те же файлы pkg-* совместно между несколькими портами или пишете в один из вышеперечисленных файлов (в главе о записи в каталоги, отличные от WRKDIR объяснено, почему не рекомендуется осуществлять запись непосредственно в файлы pkg-*. Вот список имён переменных и их значений по умолчанию. (Значение PKGDIR по умолчанию равно ${MASTERDIR}.) Переменная Значение по умолчанию COMMENT ${PKGDIR}/pkg-comment DESCR ${PKGDIR}/pkg-descr PLIST ${PKGDIR}/pkg-plist PKGINSTALL ${PKGDIR}/pkg-install PKGDEINSTALL ${PKGDIR}/pkg-deinstall PKGREQ ${PKGDIR}/pkg-req PKGMESSAGE ${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;! <anchor id="porting-dads">Что нужно, а что нельзя делать Вот список часто встречающихся действий, которые нужно и которые нельзя делать во время процесса портирования. Вы должны проверять ваш порт по этому списку, и вы также можете проверять порты в базе сообщений 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 со всеми соответствующими флагами. Смотрите пример их использования ниже. <makevar>WRKDIR</makevar> Не пишите ничего в файлы вне каталога WRKDIR. Каталог WRKDIR является единственным местом, которое гарантированно будет доступно для записи во время построения порта (обратитесь к главе о компиляции портов с компакт-диска за примером построения портов из дерева, доступного только для чтения). Если вам нужно изменить какой-либо из файлов pkg-*, сделайте это, переопределив переменную, но не перезаписывая их. <makevar>WRKDIRPREFIX</makevar> Добейтесь того, чтобы ваш порт принимал во внимание значение переменной 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_version 2.0-RELEASE 119411 2.1-CURRENT 199501, 199503 2.0.5-RELEASE 199504 2.2-CURRENT до выхода 2.1 199508 2.1.0-RELEASE 199511 2.2-CURRENT до выхода 2.1.5 199512 2.1.5-RELEASE 199607 2.2-CURRENT до выхода 2.1.6 199608 2.1.6-RELEASE 199612 2.1.7-RELEASE 199612 2.2-RELEASE 220000 2.2.1-RELEASE 220000 (без изменений) 2.2-STABLE после выхода 2.2.1-RELEASE 220000 (без изменений) 2.2-STABLE после включения texinfo-3.9 221001 2.2-STABLE после включения top 221002 2.2.2-RELEASE 222000 2.2-STABLE после выхода 2.2.2-RELEASE 222001 2.2.5-RELEASE 225000 2.2-STABLE после выхода 2.2.5-RELEASE 225001 2.2-STABLE после появления ldconfig -R 225002 2.2.6-RELEASE 226000 2.2.7-RELEASE 227000 2.2-STABLE после выхода 2.2.7-RELEASE 227001 2.2-STABLE после изменения в semctl(2) 227002 2.2.8-RELEASE 228000 2.2-STABLE после выхода 2.2.8-RELEASE 228001 3.0-CURRENT до изменения в mount(2) 300000 3.0-CURRENT после изменения в mount(2) 300001 3.0-CURRENT после изменения в semctl(2) 300002 3.0-CURRENT после изменений в аргументах ioctl 300003 3.0-CURRENT после перехода на формат ELF 300004 3.0-RELEASE 300005 3.0-CURRENT после выхода 3.0-RELEASE 300006 3.0-STABLE после разбиения на ветки 3/4 300007 3.1-RELEASE 310000 3.1-STABLE после выхода 3.1-RELEASE 310001 3.1-STABLE после изменения в порядке следования конструкторов/деструкторов в C++ 310002 3.2-RELEASE 320000 3.2-STABLE 320001 3.2-STABLE после несовместимых изменений в IPFW и сокетах 320002 3.3-RELEASE 330000 3.3-STABLE 330001 3.3-STABLE после добавления mkstemps() в libc 330002 3.4-RELEASE 340000 3.4-STABLE 340001 4.0-CURRENT после появления ветки 3.4 400000 4.0-CURRENT после изменения в работе динамического компоновщика 400001 4.0-CURRENT после изменения в порядке следования конструкторов/деструкторов в C++ 400002 4.0-CURRENT после появления функции dladdr(3) 400003 4.0-CURRENT после исправления ошибки в работе функции __deregister_frame_info динамического компоновщика (а также 4.0-CURRENT после интеграции EGCS 1.1.2) 400004 4.0-CURRENT после изменения интерфейса функции suser(9) (а также 4.0-CURRENT после появления newbus) 400005 4.0-CURRENT после изменения в регистрации cdevsw 400006 4.0-CURRENT после добавления so_cred в проверки на уровне сокетов 400007 4.0-CURRENT после добавления обработчика системного вызова poll в libc_r 400008 4.0-CURRENT после перехода в ядре с типа dev_t на указатель struct specinfo 400009 4.0-CURRENT после исправления дыры в безопасности jail(2) 400010 4.0-CURRENT после изменения в типе данных sigset_t 400011 4.0-CURRENT после перехода на компилятор GCC 2.95.2 400012 4.0-CURRENT после появления добавляемых обработчиков ioctl режима linux 400013 4.0-CURRENT после заимствования OpenSSL 400014 4.0-CURRENT после изменения в C++ ABI компилятора GCC 2.95.2 по умолчанию с -fvtable-thunks на -fno-vtable-thunks 400015 4.0-CURRENT после заимствования OpenSSH 400016 4.0-RELEASE 400017 4.0-STABLE после появления 4.0-RELEASE 400018 4.0-STABLE после интеграции кода библиотеки libxpg4 в libc. 400020 4.0-STABLE после обновления пакета Binutils до версии 2.10.0, изменения в схеме пометки выполнимых файлов ELF и включения tcsh в качестве базового компонента. 400021 4.1-RELEASE 410000 4.1-STABLE после выхода 4.1-RELEASE 410001 4.1-STABLE после переноса функции setproctitle() из библиотеки libutil в libc. 410002 4.1.1-RELEASE 411000 4.1.1-STABLE после выхода 4.1.1-RELEASE 411001 4.2-RELEASE 420000 4.2-STABLE после объединения libgcc.a и libgcc_r.a, а также соответствующих изменений в компоновке GCC. 420001 5.0-CURRENT 500000 5.0-CURRENT после добавления дополнительных полей в заголовке ELF и изменения метода пометки принадлежности к определённой системе для выполнимых файлов в формате ELF. 500001 5.0-CURRENT после изменений в метаданных kld. 500002 5.0-CURRENT после изменений buf/bio. 500003 5.0-CURRENT после обновления binutils. 500004 5.0-CURRENT после интеграции кода библиотеки libxpg4 в libc и появления интерфейса TASKQ. 500005 5.0-CURRENT после добавления интерфейсов AGP. 500006 5.0-CURRENT после обновления Perl до версии 5.6.0 500007 5.0-CURRENT после обновления кода KAME до версии 2000/07. 500008 5.0-CURRENT после изменений в ether_ifattach() и ether_ifdetach(). 500009 5.0-CURRENT после возврата в настройках утилиты mtree, применяемых по умолчанию, обратно к оригинальным и добавления флага -L для перехода по символическим ссылкам. 500010 5.0-CURRENT после изменения в API для kqueue. 500011 5.0-CURRENT после перемещения setproctitle() из библиотеки libutil в libc. 500012 5.0-CURRENT после первого коммита SMPng. 500013 5.0-CURRENT после переноса <sys/select.h> в <sys/selinfo.h>. 500014 5.0-CURRENT после объединения libgcc.a и libgcc_r.a, а также соответствующих изменений в компоновке GCC. 500015 5.0-CURRENT после изменения, позволяющего libc и libc_r быть скомпонованными вместе, что делает параметр -pthread ненужным. 500016 5.0-CURRENT после перехода на использование struct xucred вместо struct ucred для стабилизиции экспортируемого API ядра для mountd и т.д. 500017 5.0-CURRENT после добавления переменной make CPUTYPE позволяющей контролировать специфичные для CPU оптимизации. 500018 Заметьте, что 2.2-STABLE иногда идентифицирует себя как “2.2.5-STABLE” после 2.2.5-RELEASE. Такой принцип использовался год и месяц, но мы решили изменить его на более однозначную систему нумерации старший/младший, начиная с версии 2.2. Это объясняется тем, что параллельная разработка в нескольких ветках делает непрактичным идентификацию релизов просто по их реальным датам выпуска. Если вы сейчас делаете порт, вам не стоит заботиться о старых версиях -CURRENT; они перечислены здесь просто в информационных целях. Из сотен уже сделанных портов только в одном или двух случаях потребовалось использование __FreeBSD__. Если старые порты использовали этот макрос не по назначению, вовсе не значит, что вам нужно поступать точно также. Написание чего-либо после <filename>bsd.port.mk</filename> Не пишите ничего после строки .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. <makevar>DIST_SUBDIR</makevar> Не позволяйте вашему порту засорять /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 Использование параметра рекурсии () с командой diff для генерации патчей - это хорошо, но все же, пожалуйста, смотрите на получающиеся патчи, чтобы убедиться в отсутствии ненужного мусора. В частности, diff между двумя резервными копиями файлов, файлы Makefile, когда как порт использует Imake или GNU-версию программы configure, и так далее, не нужны, и должны быть удалены. Если вы отредактировали файл configure.in и запустили autoconf для перегенерации configure, не нужно включать файлы diff для configure (они частенько вырастают до нескольких тысяч строк!); задайте USE_AUTOCONF=yes и включите дифф-файл для configure.in. Кроме того, если вы удаляете файл, то это можно сделать и в цели post-extract, а не внутри патча. Как только вы будете удовлетворены получающимся дифф-файлом, разбейте его на несколько по одному патчу на отдельный файл. <makevar>PREFIX</makevar> Попытайтесь сделать так, чтобы установка вашего порта осуществлялась относительно каталога 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}. Использование <makevar>CFLAGS</makevar> Порт должен принимать во внимание переменную 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 перед тем, как послать ее нам или выполнить коммитт. Пожелания Посылайте подходящие изменения/патчи авторам/сопровождающему для включения в следующий релиз. Это только сделает вашу работу гораздо легче при выходе следующего релиза. <filename>README.html</filename> Не включайте сюда файл README.html. Этот файл не является частью дерева cvs, и он генерируется при помощи команды make readme. Разное Файлы pkg-comment, pkg-descr и pkg-plist вы должны проверять дважды. Если вы просматриваете порт и думаете, что его можно переформулировать иначе, сделайте это. Пожалуйста, не создавайте дополнительных копий лицензии GNU General Public License в нашей системе. Будьте внимательны с юридическими вопросами! Не делайте из нас нелегальных распространителей ПО! Если вы испытываете затруднения… Посмотрите существующие примеры и файл bsd.port.mk перед тем, как задавать нам вопросы! ;-) Задавайте нам вопросы, если у вас появились проблемы! Не бейтесь головой об стену! :-) Примерный <filename>Makefile</filename> Вот примерный 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. Вот несколько (реальных) примеров того, как преобразовать имя из оригинального, придуманного авторами, к подходящему для имени пакаджа: Имя дистрибутива PKGNAMEPREFIX PORTNAME PKGNAMESUFFIX PORTVERSION Обоснование 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.1 pl разрешено только при отсутствии старшего/младшего номера версии gawk-2.15.6 ja- gawk (пусто) 2.15.6 Версия на японском языке psutils-1.13 (пусто) psutils -letter 1.13 Размер бумаги задается статически во время построения пакаджа pkfonts (пусто) pkfonts 300 1.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* Порты, поддерживающие менеджер окон WindowMaker www Программное обеспечение, связанное с World Wide Web. Поддержка языка HTML относится сюда же. x11 X 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">