📄 cvsup.html
字号:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta name="generator" content="HTML Tidy, see www.w3.org" /><title>Using CVSup</title><meta name="GENERATOR" content="Modular DocBook HTML Stylesheet Version 1.7" /><link rel="HOME" title="FreeBSD Handbook" href="index.html" /><link rel="UP" title="Obtaining FreeBSD" href="mirrors.html" /><link rel="PREVIOUS" title="Using CTM" href="ctm.html" /><link rel="NEXT" title="CVS Tags" href="cvs-tags.html" /><link rel="STYLESHEET" type="text/css" href="docbook.css" /></head><body class="SECT1" bgcolor="#FFFFFF" text="#000000" link="#0000FF" vlink="#840084"alink="#0000FF"><div class="NAVHEADER"><table summary="Header navigation table" width="100%" border="0" cellpadding="0"cellspacing="0"><tr><th colspan="3" align="center">FreeBSD Handbook</th></tr><tr><td width="10%" align="left" valign="bottom"><a href="ctm.html"accesskey="P">Prev</a></td><td width="80%" align="center" valign="bottom">Appendix A. Obtaining FreeBSD</td><td width="10%" align="right" valign="bottom"><a href="cvs-tags.html"accesskey="N">Next</a></td></tr></table><hr align="LEFT" width="100%" /></div><div class="SECT1"><h1 class="SECT1"><a id="CVSUP" name="CVSUP">A.5 Using CVSup</a></h1><div class="SECT2"><h2 class="SECT2"><a id="CVSUP-INTRO" name="CVSUP-INTRO">A.5.1 Introduction</a></h2><p><b class="APPLICATION">CVSup</b> is a software package for distributing and updatingsource trees from a master CVS repository on a remote server host. The FreeBSD sourcesare maintained in a CVS repository on a central development machine in California. With<b class="APPLICATION">CVSup</b>, FreeBSD users can easily keep their own source trees upto date.</p><p><b class="APPLICATION">CVSup</b> uses the so-called <span class="emphasis"><iclass="EMPHASIS">pull</i></span> model of updating. Under the pull model, each clientasks the server for updates, if and when they are wanted. The server waits passively forupdate requests from its clients. Thus all updates are instigated by the client. Theserver never sends unsolicited updates. Users must either run the <bclass="APPLICATION">CVSup</b> client manually to get an update, or they must set up a <ttclass="COMMAND">cron</tt> job to run it automatically on a regular basis.</p><p>The term <b class="APPLICATION">CVSup</b>, capitalized just so, refers to the entiresoftware package. Its main components are the client <tt class="COMMAND">cvsup</tt> whichruns on each user's machine, and the server <tt class="COMMAND">cvsupd</tt> which runs ateach of the FreeBSD mirror sites.</p><p>As you read the FreeBSD documentation and mailing lists, you may see references to <bclass="APPLICATION">sup</b>. <b class="APPLICATION">Sup</b> was the predecessor of <bclass="APPLICATION">CVSup</b>, and it served a similar purpose. <bclass="APPLICATION">CVSup</b> is used much in the same way as sup and, in fact, usesconfiguration files which are backward-compatible with <tt class="COMMAND">sup</tt>'s. <bclass="APPLICATION">Sup</b> is no longer used in the FreeBSD project, because <bclass="APPLICATION">CVSup</b> is both faster and more flexible.</p></div><div class="SECT2"><h2 class="SECT2"><a id="CVSUP-INSTALL" name="CVSUP-INSTALL">A.5.2 Installation</a></h2><p>The easiest way to install <b class="APPLICATION">CVSup</b> is to use the precompiled<a href="http://www.FreeBSD.org/cgi/url.cgi?ports/net/cvsup/pkg-descr"><ttclass="FILENAME">net/cvsup</tt></a> package from the FreeBSD <ahref="ports.html">packages collection</a>. If you prefer to build <bclass="APPLICATION">CVSup</b> from source, you can use the <ahref="http://www.FreeBSD.org/cgi/url.cgi?ports/net/cvsup/pkg-descr"><ttclass="FILENAME">net/cvsup</tt></a> port instead. But be forewarned: the <ahref="http://www.FreeBSD.org/cgi/url.cgi?ports/net/cvsup/pkg-descr"><ttclass="FILENAME">net/cvsup</tt></a> port depends on the Modula-3 system, which takes asubstantial amount of time and disk space to download and build.</p><div class="NOTE"><blockquote class="NOTE"><p><b>Note:</b> If you are going to be using <b class="APPLICATION">CVSup</b> on amachine which will not have <b class="APPLICATION"><spanclass="TRADEMARK">XFree86</span>™</b> or <b class="APPLICATION">Xorg</b> installed,such as a server, be sure to use the port which does not include the <bclass="APPLICATION">CVSup</b> <acronym class="ACRONYM">GUI</acronym>, <ahref="http://www.FreeBSD.org/cgi/url.cgi?ports/net/cvsup-without-gui/pkg-descr"><ttclass="FILENAME">net/cvsup-without-gui</tt></a>.</p></blockquote></div></div><div class="SECT2"><h2 class="SECT2"><a id="CVSUP-CONFIG" name="CVSUP-CONFIG">A.5.3 CVSupConfiguration</a></h2><p><b class="APPLICATION">CVSup</b>'s operation is controlled by a configuration filecalled the <tt class="FILENAME">supfile</tt>. There are some sample <ttclass="FILENAME">supfiles</tt> in the directory <ahref="file://localhost/usr/share/examples/cvsup/" target="_top"><ttclass="FILENAME">/usr/share/examples/cvsup/</tt></a>.</p><p>The information in a <tt class="FILENAME">supfile</tt> answers the following questionsfor <b class="APPLICATION">CVSup</b>:</p><ul><li><p><a href="cvsup.html#CVSUP-CONFIG-FILES">Which files do you want to receive?</a></p></li><li><p><a href="cvsup.html#CVSUP-CONFIG-VERS">Which versions of them do you want?</a></p></li><li><p><a href="cvsup.html#CVSUP-CONFIG-WHERE">Where do you want to get them from?</a></p></li><li><p><a href="cvsup.html#CVSUP-CONFIG-DEST">Where do you want to put them on your ownmachine?</a></p></li><li><p><a href="cvsup.html#CVSUP-CONFIG-STATUS">Where do you want to put your statusfiles?</a></p></li></ul><p>In the following sections, we will construct a typical <ttclass="FILENAME">supfile</tt> by answering each of these questions in turn. First, wedescribe the overall structure of a <tt class="FILENAME">supfile</tt>.</p><p>A <tt class="FILENAME">supfile</tt> is a text file. Comments begin with <varclass="LITERAL">#</var> and extend to the end of the line. Lines that are blank and linesthat contain only comments are ignored.</p><p>Each remaining line describes a set of files that the user wishes to receive. The linebegins with the name of a ``collection'', a logical grouping of files defined by theserver. The name of the collection tells the server which files you want. After thecollection name come zero or more fields, separated by white space. These fields answerthe questions listed above. There are two types of fields: flag fields and value fields.A flag field consists of a keyword standing alone, e.g., <varclass="LITERAL">delete</var> or <var class="LITERAL">compress</var>. A value field alsobegins with a keyword, but the keyword is followed without intervening white space by<var class="LITERAL">=</var> and a second word. For example, <varclass="LITERAL">release=cvs</var> is a value field.</p><p>A <tt class="FILENAME">supfile</tt> typically specifies more than one collection toreceive. One way to structure a <tt class="FILENAME">supfile</tt> is to specify all ofthe relevant fields explicitly for each collection. However, that tends to make the <ttclass="FILENAME">supfile</tt> lines quite long, and it is inconvenient because mostfields are the same for all of the collections in a <tt class="FILENAME">supfile</tt>. <bclass="APPLICATION">CVSup</b> provides a defaulting mechanism to avoid these problems.Lines beginning with the special pseudo-collection name <varclass="LITERAL">*default</var> can be used to set flags and values which will be used asdefaults for the subsequent collections in the <tt class="FILENAME">supfile</tt>. Adefault value can be overridden for an individual collection, by specifying a differentvalue with the collection itself. Defaults can also be changed or augmented inmid-supfile by additional <var class="LITERAL">*default</var> lines.</p><p>With this background, we will now proceed to construct a <ttclass="FILENAME">supfile</tt> for receiving and updating the main source tree of <ahref="current-stable.html#CURRENT">FreeBSD-CURRENT</a>.</p><ul><li><p><a id="CVSUP-CONFIG-FILES" name="CVSUP-CONFIG-FILES"></a>Which files do you want toreceive?</p><p>The files available via <b class="APPLICATION">CVSup</b> are organized into namedgroups called ``collections''. The collections that are available are described in the <ahref="cvsup.html#CVSUP-COLLEC">following section</a>. In this example, we wish to receivethe entire main source tree for the FreeBSD system. There is a single large collection<var class="LITERAL">src-all</var> which will give us all of that. As a first step towardconstructing our <tt class="FILENAME">supfile</tt>, we simply list the collections, oneper line (in this case, only one line):</p><pre class="PROGRAMLISTING">src-all</pre></li><li><p><a id="CVSUP-CONFIG-VERS" name="CVSUP-CONFIG-VERS"></a>Which version(s) of them do youwant?</p><p>With <b class="APPLICATION">CVSup</b>, you can receive virtually any version of thesources that ever existed. That is possible because the <b class="APPLICATION">cvsupd</b>server works directly from the CVS repository, which contains all of the versions. Youspecify which one of them you want using the <var class="LITERAL">tag=</var> and <varclass="OPTION">date=</var> value fields.</p><div class="WARNING"><blockquote class="WARNING"><p><b>Warning:</b> Be very careful to specify any <var class="LITERAL">tag=</var> fieldscorrectly. Some tags are valid only for certain collections of files. If you specify anincorrect or misspelled tag, <b class="APPLICATION">CVSup</b> will delete files which youprobably do not want deleted. In particular, use <span class="emphasis"><iclass="EMPHASIS">only</i></span> <var class="LITERAL">tag=.</var> for the <varclass="LITERAL">ports-*</var> collections.</p></blockquote></div><p>The <var class="LITERAL">tag=</var> field names a symbolic tag in the repository.There are two kinds of tags, revision tags and branch tags. A revision tag refers to aspecific revision. Its meaning stays the same from day to day. A branch tag, on the otherhand, refers to the latest revision on a given line of development, at any given time.Because a branch tag does not refer to a specific revision, it may mean somethingdifferent tomorrow than it means today.</p><p><a href="cvs-tags.html">Section A.6</a> contains branch tags that users might beinterested in. When specifying a tag in <b class="APPLICATION">CVSup</b>'s configurationfile, it must be preceded with <var class="LITERAL">tag=</var> (<varclass="LITERAL">RELENG_4</var> will become <var class="LITERAL">tag=RELENG_4</var>). Keepin mind that only the <var class="LITERAL">tag=.</var> is relevant for the portscollection.</p><div class="WARNING"><blockquote class="WARNING"><p><b>Warning:</b> Be very careful to type the tag name exactly as shown. <bclass="APPLICATION">CVSup</b> cannot distinguish between valid and invalid tags. If youmisspell the tag, <b class="APPLICATION">CVSup</b> will behave as though you hadspecified a valid tag which happens to refer to no files at all. It will delete yourexisting sources in that case.</p></blockquote></div><p>When you specify a branch tag, you normally receive the latest versions of the fileson that line of development. If you wish to receive some past version, you can do so byspecifying a date with the <var class="OPTION">date=</var> value field. The <ahref="http://www.FreeBSD.org/cgi/man.cgi?query=cvsup&sektion=1&manpath=FreeBSD+Ports"><span class="CITEREFENTRY"><span class="REFENTRYTITLE">cvsup</span>(1)</span></a> manual pageexplains how to do that.</p><p>For our example, we wish to receive FreeBSD-CURRENT. We add this line at the beginningof our <tt class="FILENAME">supfile</tt>:</p><pre class="PROGRAMLISTING">*default tag=.</pre><p>There is an important special case that comes into play if you specify neither a <varclass="LITERAL">tag=</var> field nor a <var class="LITERAL">date=</var> field. In thatcase, you receive the actual RCS files directly from the server's CVS repository, ratherthan receiving a particular version. Developers generally prefer this mode of operation.By maintaining a copy of the repository itself on their systems, they gain the ability tobrowse the revision histories and examine past versions of files. This gain is achievedat a large cost in terms of disk space, however.</p></li><li><p><a id="CVSUP-CONFIG-WHERE" name="CVSUP-CONFIG-WHERE"></a>Where do you want to get themfrom?</p><p>We use the <var class="LITERAL">host=</var> field to tell <ttclass="COMMAND">cvsup</tt> where to obtain its updates. Any of the <ahref="cvsup.html#CVSUP-MIRRORS">CVSup mirror sites</a> will do, though you should try toselect one that is close to you in cyberspace. In this example we will use a fictionalFreeBSD distribution site, <tt class="HOSTID">cvsup99.FreeBSD.org</tt>:</p><pre class="PROGRAMLISTING">*default host=cvsup99.FreeBSD.org</pre><p>You will need to change the host to one that actually exists before running <bclass="APPLICATION">CVSup</b>. On any particular run of <tt class="COMMAND">cvsup</tt>,you can override the host setting on the command line, with <var class="OPTION">-h <varclass="REPLACEABLE">hostname</var></var>.</p></li><li><p><a id="CVSUP-CONFIG-DEST" name="CVSUP-CONFIG-DEST"></a>Where do you want to put themon your own machine?</p><p>The <var class="LITERAL">prefix=</var> field tells <tt class="COMMAND">cvsup</tt>where to put the files it receives. In this example, we will put the source filesdirectly into our main source tree, <tt class="FILENAME">/usr/src</tt>. The <ttclass="FILENAME">src</tt> directory is already implicit in the collections we have chosento receive, so this is the correct specification:</p><pre class="PROGRAMLISTING">*default prefix=/usr</pre></li><li><p><a id="CVSUP-CONFIG-STATUS" name="CVSUP-CONFIG-STATUS"></a>Where should <ttclass="COMMAND">cvsup</tt> maintain its status files?</p><p>The <b class="APPLICATION">CVSup</b> client maintains certain status files in what iscalled the ``base'' directory. These files help <b class="APPLICATION">CVSup</b> to workmore efficiently, by keeping track of which updates you have already received. We willuse the standard base directory, <tt class="FILENAME">/var/db</tt>:</p><pre class="PROGRAMLISTING">*default base=/var/db</pre><p>This setting is used by default if it is not specified in the <ttclass="FILENAME">supfile</tt>, so we actually do not need the above line.</p><p>If your base directory does not already exist, now would be a good time to create it.The <tt class="COMMAND">cvsup</tt> client will refuse to run if the base directory doesnot exist.</p></li><li><p>Miscellaneous <tt class="FILENAME">supfile</tt> settings:</p><p>There is one more line of boiler plate that normally needs to be present in the <ttclass="FILENAME">supfile</tt>:</p><pre class="PROGRAMLISTING">*default release=cvs delete use-rel-suffix compress</pre><p><var class="LITERAL">release=cvs</var> indicates that the server should get itsinformation out of the main FreeBSD CVS repository. This is virtually always the case,but there are other possibilities which are beyond the scope of this discussion.</p><p><var class="LITERAL">delete</var> gives <b class="APPLICATION">CVSup</b> permission todelete files. You should always specify this, so that <b class="APPLICATION">CVSup</b>can keep your source tree fully up-to-date. <b class="APPLICATION">CVSup</b> is carefulto delete only those files for which it is responsible. Any extra files you happen tohave will be left strictly alone.</p><p><var class="LITERAL">use-rel-suffix</var> is ... arcane. If you really want to knowabout it, see the <ahref="http://www.FreeBSD.org/cgi/man.cgi?query=cvsup&sektion=1&manpath=FreeBSD+Ports"><span class="CITEREFENTRY"><span class="REFENTRYTITLE">cvsup</span>(1)</span></a> manual page.Otherwise, just specify it and do not worry about it.</p><p><var class="LITERAL">compress</var> enables the use of gzip-style compression on thecommunication channel. If your network link is T1 speed or faster, you probably shouldnot use compression. Otherwise, it helps substantially.</p></li><li><p>Putting it all together:</p><p>Here is the entire <tt class="FILENAME">supfile</tt> for our example:</p><pre class="PROGRAMLISTING">*default tag=.*default host=cvsup99.FreeBSD.org*default prefix=/usr*default base=/var/db*default release=cvs delete use-rel-suffix compresssrc-all</pre></li></ul><div class="SECT3"><h3 class="SECT3"><a id="CVSUP-REFUSE-FILE" name="CVSUP-REFUSE-FILE">A.5.3.1 The <ttclass="FILENAME">refuse</tt> File</a></h3><p>As mentioned above, <b class="APPLICATION">CVSup</b> uses a <span class="emphasis"><iclass="EMPHASIS">pull method</i></span>. Basically, this means that you connect to the <bclass="APPLICATION">CVSup</b> server, and it says, ``Here is what you can download fromme...'', and your client responds ``OK, I will take this, this, this, and this.'' In thedefault configuration, the <b class="APPLICATION">CVSup</b> client will take every fileassociated with the collection and tag you chose in the configuration file. However, thisis not always what you want, especially if you are synching the <ttclass="FILENAME">doc</tt>, <tt class="FILENAME">ports</tt>, or <ttclass="FILENAME">www</tt> trees -- most people cannot read four or five languages, andtherefore they do not need to download the language-specific files. If you are <bclass="APPLICATION">CVSup</b>ing the ports collection, you can get around this byspecifying each collection individually (e.g., <span class="emphasis"><iclass="EMPHASIS">ports-astrology</i></span>, <span class="emphasis"><iclass="EMPHASIS">ports-biology</i></span>, etc instead of simply saying <spanclass="emphasis"><i class="EMPHASIS">ports-all</i></span>). However, since the <ttclass="FILENAME">doc</tt> and <tt class="FILENAME">www</tt> trees do not havelanguage-specific collections, you must use one of <b class="APPLICATION">CVSup</b>'smany nifty features: the <tt class="FILENAME">refuse</tt> file.</p><p>The <tt class="FILENAME">refuse</tt> file essentially tells <bclass="APPLICATION">CVSup</b> that it should not take every single file from acollection; in other words, it tells the client to <span class="emphasis"><iclass="EMPHASIS">refuse</i></span> certain files from the server. The <ttclass="FILENAME">refuse</tt> file can be found (or, if you do not yet have one, should beplaced) in <tt class="FILENAME"><var class="REPLACEABLE">base</var>/sup/</tt>. <varclass="REPLACEABLE">base</var> is defined in your <tt class="FILENAME">supfile</tt>; bydefault, <var class="REPLACEABLE">base</var> is <tt class="FILENAME">/var/db</tt>, whichmeans that by default the <tt class="FILENAME">refuse</tt> file is <ttclass="FILENAME">/var/db/sup/refuse</tt>.</p><p>The <tt class="FILENAME">refuse</tt> file has a very simple format; it simply containsthe names of files or directories that you do not wish to download. For example, if youcannot speak any languages other than English and some German, and you do not feel theneed to use the German applications (or applications for any other languages, except forEnglish), you can put the following in your <tt class="FILENAME">refuse</tt> file:</p><pre class="SCREEN">ports/arabicports/chineseports/frenchports/germanports/hebrewports/hungarianports/japaneseports/koreanports/polishports/portugueseports/russianports/ukrainianports/vietnamesedoc/da_*doc/de_*doc/el_*doc/es_*doc/fr_*doc/it_*doc/ja_*doc/nl_*doc/no_*doc/pl_*doc/pt_*doc/ru_*doc/sr_*doc/zh_*</pre><p>and so forth for the other languages (you can find the full list by browsing the <ahref="http://www.FreeBSD.org/cgi/cvsweb.cgi/" target="_top">FreeBSD CVSrepository</a>).</p><p>With this very useful feature, those users who are on slow links or pay by the minutefor their Internet connection will be able to save valuable time as they will no longerneed to download files that they will never use. For more information on <ttclass="FILENAME">refuse</tt> files and other neat features of <bclass="APPLICATION">CVSup</b>, please view its manual page.</p></div></div><div class="SECT2"><h2 class="SECT2"><a id="AEN40109" name="AEN40109">A.5.4 Running <bclass="APPLICATION">CVSup</b></a></h2><p>You are now ready to try an update. The command line for doing this is quitesimple:</p><pre class="SCREEN"><samp class="PROMPT">#</samp> <kbd class="USERINPUT">cvsup <varclass="REPLACEABLE">supfile</var></kbd></pre><p>where <tt class="FILENAME"><var class="REPLACEABLE">supfile</var></tt> is of coursethe name of the <tt class="FILENAME">supfile</tt> you have just created. Assuming you arerunning under X11, <tt class="COMMAND">cvsup</tt> will display a GUI window with somebuttons to do the usual things. Press the <span class="GUIBUTTON">go</span> button, andwatch it run.</p><p>Since you are updating your actual <tt class="FILENAME">/usr/src</tt> tree in thisexample, you will need to run the program as <tt class="USERNAME">root</tt> so that <ttclass="COMMAND">cvsup</tt> has the permissions it needs to update your files. Having justcreated your configuration file, and having never used this program before, that mightunderstandably make you nervous. There is an easy way to do a trial run without touchingyour precious files. Just create an empty directory somewhere convenient, and name it asan extra argument on the command line:</p><pre class="SCREEN"><samp class="PROMPT">#</samp> <kbd class="USERINPUT">mkdir /var/tmp/dest</kbd><samp class="PROMPT">#</samp> <kbd class="USERINPUT">cvsup supfile /var/tmp/dest</kbd></pre><p>The directory you specify will be used as the destination directory for all fileupdates. <b class="APPLICATION">CVSup</b> will examine your usual files in <ttclass="FILENAME">/usr/src</tt>, but it will not modify or delete any of them. Any fileupdates will instead land in <tt class="FILENAME">/var/tmp/dest/usr/src</tt>. <bclass="APPLICATION">CVSup</b> will also leave its base directory status files untouchedwhen run this way. The new versions of those files will be written into the specifieddirectory. As long as you have read access to <tt class="FILENAME">/usr/src</tt>, you donot even need to be <tt class="USERNAME">root</tt> to perform this kind of trial run.</p><p>If you are not running X11 or if you just do not like GUIs, you should add a couple ofoptions to the command line when you run <tt class="COMMAND">cvsup</tt>:</p><pre class="SCREEN"><samp class="PROMPT">#</samp> <kbd class="USERINPUT">cvsup -g -L 2 <varclass="REPLACEABLE">supfile</var></kbd></pre><p>The <var class="OPTION">-g</var> tells <b class="APPLICATION">CVSup</b> not to use itsGUI. This is automatic if you are not running X11, but otherwise you have to specifyit.</p><p>The <var class="OPTION">-L 2</var> tells <b class="APPLICATION">CVSup</b> to print outthe details of all the file updates it is doing. There are three levels of verbosity,from <var class="OPTION">-L 0</var> to <var class="OPTION">-L 2</var>. The default is 0,which means total silence except for error messages.</p><p>There are plenty of other options available. For a brief list of them, type <ttclass="COMMAND">cvsup -H</tt>. For more detailed descriptions, see the manual page.</p><p>Once you are satisfied with the way updates are working, you can arrange for regularruns of <b class="APPLICATION">CVSup</b> using <ahref="http://www.FreeBSD.org/cgi/man.cgi?query=cron&sektion=8"><spanclass="CITEREFENTRY"><span class="REFENTRYTITLE">cron</span>(8)</span></a>. Obviously,you should not let <b class="APPLICATION">CVSup</b> use its GUI when running it from <ahref="http://www.FreeBSD.org/cgi/man.cgi?query=cron&sektion=8"><spanclass="CITEREFENTRY"><span class="REFENTRYTITLE">cron</span>(8)</span></a>.</p></div><div class="SECT2"><h2 class="SECT2"><a id="CVSUP-COLLEC" name="CVSUP-COLLEC">A.5.5 <bclass="APPLICATION">CVSup</b> File Collections</a></h2><p>The file collections available via <b class="APPLICATION">CVSup</b> are organizedhierarchically. There are a few large collections, and they are divided into smallersub-collections. Receiving a large collection is equivalent to receiving each of itssub-collections. The hierarchical relationships among collections are reflected by theuse of indentation in the list below.</p><p>The most commonly used collections are <var class="LITERAL">src-all</var>, and <varclass="LITERAL">ports-all</var>. The other collections are used only by small groups ofpeople for specialized purposes, and some mirror sites may not carry all of them.</p><div class="VARIABLELIST"><dl><dt><var class="LITERAL">cvs-all release=cvs</var></dt><dd><p>The main FreeBSD CVS repository, including the cryptography code.</p><div class="VARIABLELIST"><dl><dt><var class="LITERAL">distrib release=cvs</var></dt><dd><p>Files related to the distribution and mirroring of FreeBSD.</p></dd><dt><var class="LITERAL">doc-all release=cvs</var></dt><dd><p>Sources for the FreeBSD Handbook and other documentation. This does not include filesfor the FreeBSD web site.</p></dd><dt><var class="LITERAL">ports-all release=cvs</var></dt>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -