4aa2816ede
access, you won't get the pretty styles.
5198 lines
218 KiB
HTML
5198 lines
218 KiB
HTML
<html>
|
||
<head>
|
||
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
|
||
<title>The NetBSD Packages Collection (pkgsrc)</title>
|
||
<link rel="stylesheet" href="http://www.NetBSD.org/NetBSD.css" type="text/css">
|
||
<meta name="generator" content="DocBook XSL Stylesheets V1.60.1">
|
||
<meta name="description" content="Information about using the NetBSD package system and
|
||
building packages.">
|
||
</head>
|
||
<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="book" lang="en">
|
||
<div class="titlepage">
|
||
<div>
|
||
<div><h1 class="title">
|
||
<a name="id2856616"></a>The NetBSD Packages Collection (pkgsrc)</h1></div>
|
||
<div><div class="authorgroup">
|
||
<div class="author">
|
||
<h3 class="author">
|
||
<span class="firstname">Alistair</span> <span class="surname">Crooks</span>
|
||
</h3>
|
||
<div class="affiliation"><div class="address"><p><tt class="email"><<a href="mailto:agc@NetBSD.org">agc@NetBSD.org</a>></tt></p></div></div>
|
||
</div>
|
||
<div class="author">
|
||
<h3 class="author">
|
||
<span class="firstname">Hubert</span> <span class="surname">Feyrer</span>
|
||
</h3>
|
||
<div class="affiliation"><div class="address"><p><tt class="email"><<a href="mailto:hubertf@NetBSD.org">hubertf@NetBSD.org</a>></tt></p></div></div>
|
||
</div>
|
||
</div></div>
|
||
<div><p class="releaseinfo">$NetBSD: pkgsrc.html,v 1.2 2003/06/23 07:49:44 grant Exp $</p></div>
|
||
<div><p class="copyright">Copyright © 1994-2003 The NetBSD Foundation, Inc</p></div>
|
||
<div><div class="abstract">
|
||
<p class="title"><b>Abstract</b></p>
|
||
<p>Information about using the NetBSD package system and
|
||
building packages.</p>
|
||
</div></div>
|
||
</div>
|
||
<div></div>
|
||
<hr>
|
||
</div>
|
||
<div class="toc">
|
||
<p><b>Table of Contents</b></p>
|
||
<dl>
|
||
<dt>1. <a href="#introduction">Introduction</a>
|
||
</dt>
|
||
<dd><dl>
|
||
<dt>1.1. <a href="#id2862064">Introduction</a>
|
||
</dt>
|
||
<dt>1.2. <a href="#overview">Overview</a>
|
||
</dt>
|
||
<dt>1.3. <a href="#terminology">Terminology</a>
|
||
</dt>
|
||
<dt>1.4. <a href="#typography">Typography</a>
|
||
</dt>
|
||
</dl></dd>
|
||
<dt>I. <a href="#users-guide">pkgsrc user's guide</a>
|
||
</dt>
|
||
<dd><dl>
|
||
<dt>2. <a href="#platforms">Using pkgsrc on systems other than NetBSD</a>
|
||
</dt>
|
||
<dd><dl>
|
||
<dt>2.1. <a href="#id2862465">Bootstrapping pkgsrc</a>
|
||
</dt>
|
||
<dt>2.2. <a href="#id2863843">Platform specific notes</a>
|
||
</dt>
|
||
</dl></dd>
|
||
<dt>3. <a href="#using">Using The NetBSD package system</a>
|
||
</dt>
|
||
<dd><dl>
|
||
<dt>3.1. <a href="#getting%20started">Working with binary packages</a>
|
||
</dt>
|
||
<dt>3.2. <a href="#id2937398">Building packages from source</a>
|
||
</dt>
|
||
</dl></dd>
|
||
<dt>4. <a href="#binary">Creating binary packages</a>
|
||
</dt>
|
||
<dd><dl>
|
||
<dt>4.1. <a href="#id2936710">Building a single binary package</a>
|
||
</dt>
|
||
<dt>4.2. <a href="#id2939394">Settings for creation of binary packages</a>
|
||
</dt>
|
||
<dt>4.3. <a href="#id2939411">Doing a bulk build of all packages</a>
|
||
</dt>
|
||
<dt>4.4. <a href="#id2940945">Creating a multiple CD-ROM packages collection</a>
|
||
</dt>
|
||
</dl></dd>
|
||
</dl></dd>
|
||
<dt>II. <a href="#developers-guide">pkgsrc developer's guide</a>
|
||
</dt>
|
||
<dd><dl>
|
||
<dt>5. <a href="#components">Package components - files, directories and contents</a>
|
||
</dt>
|
||
<dd><dl>
|
||
<dt>5.1. <a href="#components.Makefile">Makefile</a>
|
||
</dt>
|
||
<dt>5.2. <a href="#components.distinfo">distinfo</a>
|
||
</dt>
|
||
<dt>5.3. <a href="#components.patches">patches/*</a>
|
||
</dt>
|
||
<dt>5.4. <a href="#id2943680">Other mandatory files</a>
|
||
</dt>
|
||
<dt>5.5. <a href="#id2943718">Optional files</a>
|
||
</dt>
|
||
<dt>5.6. <a href="#id2943959">work*</a>
|
||
</dt>
|
||
<dt>5.7. <a href="#id2943990">files/*</a>
|
||
</dt>
|
||
<dt>5.8. <a href="#id2944093">Portability of packages</a>
|
||
</dt>
|
||
</dl></dd>
|
||
<dt>6. <a href="#plist">PLIST issues</a>
|
||
</dt>
|
||
<dd><dl>
|
||
<dt>6.1. <a href="#plist.misc">Miscellaneous</a>
|
||
</dt>
|
||
<dt>6.2. <a href="#id2945543">PLIST_SRC</a>
|
||
</dt>
|
||
<dt>6.3. <a href="#id2945566">PLIST_SUBST</a>
|
||
</dt>
|
||
<dt>6.4. <a href="#id2945697">Perl5 modules</a>
|
||
</dt>
|
||
<dt>6.5. <a href="#id2945836">User Interaction</a>
|
||
</dt>
|
||
</dl></dd>
|
||
<dt>7. <a href="#fixes">Notes on fixes for packages</a>
|
||
</dt>
|
||
<dd><dl>
|
||
<dt>7.1. <a href="#id2944290">CPP defines</a>
|
||
</dt>
|
||
<dt>7.2. <a href="#fixes.libtool">Shared libraries - libtool</a>
|
||
</dt>
|
||
<dt>7.3. <a href="#id2947315">Using libtool on GNU packages that already support libtool</a>
|
||
</dt>
|
||
<dt>7.4. <a href="#id2947414">GNU Autoconf/Automake</a>
|
||
</dt>
|
||
<dt>7.5. <a href="#id2947454">Package configuration files</a>
|
||
</dt>
|
||
<dt>7.6. <a href="#id2947668">Feedback to the author</a>
|
||
</dt>
|
||
</dl></dd>
|
||
<dt>8. <a href="#build">The build process</a>
|
||
</dt>
|
||
<dd><dl>
|
||
<dt>8.1. <a href="#build.prefix">Program location</a>
|
||
</dt>
|
||
<dt>8.2. <a href="#id2949108">Main targets</a>
|
||
</dt>
|
||
<dt>8.3. <a href="#build.helpful-targets">Other helpful targets</a>
|
||
</dt>
|
||
</dl></dd>
|
||
<dt>9. <a href="#buildlink2">buildlink2 methodology</a>
|
||
</dt>
|
||
<dd><dl>
|
||
<dt>9.1. <a href="#id2953172">Converting packages to use buildlink2</a>
|
||
</dt>
|
||
<dt>9.2. <a href="#id2953308">Writing buildlink2.mk files</a>
|
||
</dt>
|
||
</dl></dd>
|
||
<dt>10. <a href="#debug">Debugging</a>
|
||
</dt>
|
||
<dt>11. <a href="#features">FAQs & features of the package system</a>
|
||
</dt>
|
||
<dd><dl>
|
||
<dt>11.1. <a href="#id2952494">Packages using GNU autoconf</a>
|
||
</dt>
|
||
<dt>11.2. <a href="#id2954262">Other distrib methods than .tar.gz</a>
|
||
</dt>
|
||
<dt>11.3. <a href="#id2954307">Packages not creating their own subdirectory</a>
|
||
</dt>
|
||
<dt>11.4. <a href="#id2955763">Custom configuration process</a>
|
||
</dt>
|
||
<dt>11.5. <a href="#id2955785">Packages not building in their DISTNAME directory</a>
|
||
</dt>
|
||
<dt>11.6. <a href="#id2955896">How to fetch all distfiles at once</a>
|
||
</dt>
|
||
<dt>11.7. <a href="#id2956076">How to fetch files from behind a firewall</a>
|
||
</dt>
|
||
<dt>11.8. <a href="#id2956098">If your patch contains an RCS ID</a>
|
||
</dt>
|
||
<dt>11.9. <a href="#id2956116">How to pull in variables from /etc/mk.conf</a>
|
||
</dt>
|
||
<dt>11.10. <a href="#id2956180">Is there a mailing list for pkg-related discussion?</a>
|
||
</dt>
|
||
<dt>11.11. <a href="#id2956204">How do I tell make fetch to do passive FTP?</a>
|
||
</dt>
|
||
<dt>11.12. <a href="#id2956350">Dependencies on other packages</a>
|
||
</dt>
|
||
<dt>11.13. <a href="#id2956571">Conflicts with other packages</a>
|
||
</dt>
|
||
<dt>11.14. <a href="#id2956642">Software which has a WWW Home Page</a>
|
||
</dt>
|
||
<dt>11.15. <a href="#id2956667">How to handle modified distfiles with the 'old' name</a>
|
||
</dt>
|
||
<dt>11.16. <a href="#id2956764">What does "Don't know how to make /usr/share/tmac/tmac.andoc" mean?</a>
|
||
</dt>
|
||
<dt>11.17. <a href="#id2956809">How to handle incrementing versions when fixing an existing
|
||
package</a>
|
||
</dt>
|
||
<dt>11.18. <a href="#id2956956">Could not find bsd.own.mk - what's wrong?</a>
|
||
</dt>
|
||
<dt>11.19. <a href="#id2957027">Restricted packages</a>
|
||
</dt>
|
||
<dt>11.20. <a href="#id2957213">Packages using (n)curses</a>
|
||
</dt>
|
||
<dt>11.21. <a href="#id2957255">Automated security check</a>
|
||
</dt>
|
||
<dt>11.22. <a href="#id2957425">What's the proper way to create an account from a package?</a>
|
||
</dt>
|
||
<dt>11.23. <a href="#id2957593">How to handle compiler bugs</a>
|
||
</dt>
|
||
<dt>11.24. <a href="#features.info-files">Packages providing info files</a>
|
||
</dt>
|
||
<dt>11.25. <a href="#id2957793">Packages whose distfiles aren't available for plain downloading</a>
|
||
</dt>
|
||
<dt>11.26. <a href="#id2957953">Configuration files handling and placement</a>
|
||
</dt>
|
||
<dt>11.27. <a href="#id2958470">Packages providing login shells</a>
|
||
</dt>
|
||
<dt>11.28. <a href="#id2958558">Packages providing locale catalogues</a>
|
||
</dt>
|
||
<dt>11.29. <a href="#id2958592">Using 'sudo' with pkgsrc</a>
|
||
</dt>
|
||
<dt>11.30. <a href="#id2958621">Packages containing perl scripts</a>
|
||
</dt>
|
||
<dt>11.31. <a href="#id2958648">Packages that cannot or should not be built</a>
|
||
</dt>
|
||
</dl></dd>
|
||
<dt>12. <a href="#submit">Submitting and Committing</a>
|
||
</dt>
|
||
<dd><dl>
|
||
<dt>12.1. <a href="#id2960258">Submitting your packages</a>
|
||
</dt>
|
||
<dt>12.2. <a href="#id2961824">Committing: Importing a package into CVS</a>
|
||
</dt>
|
||
<dt>12.3. <a href="#id2962087">Updating a Package to a Newer Version</a>
|
||
</dt>
|
||
<dt>12.4. <a href="#id2962208">Moving a Package in pkgsrc</a>
|
||
</dt>
|
||
</dl></dd>
|
||
<dt>13. <a href="#examples">A simple example of a package: bison</a>
|
||
</dt>
|
||
<dd><dl>
|
||
<dt>13.1. <a href="#id2961656">files</a>
|
||
</dt>
|
||
<dt>13.2. <a href="#id2963176">Steps for building, installing, packaging</a>
|
||
</dt>
|
||
</dl></dd>
|
||
</dl></dd>
|
||
<dt>A. <a href="#logs">Build logs</a>
|
||
</dt>
|
||
<dd><dl>
|
||
<dt>A.1. <a href="#logs.building">Building top</a>
|
||
</dt>
|
||
<dt>A.2. <a href="#logs.package">Packaging top</a>
|
||
</dt>
|
||
</dl></dd>
|
||
<dt>B. <a href="#ftp-layout">Layout of the FTP server's package archive</a>
|
||
</dt>
|
||
</dl>
|
||
</div>
|
||
<div class="chapter" lang="en">
|
||
<div class="titlepage">
|
||
<div><div><h2 class="title">
|
||
<a name="introduction"></a>Chapter 1. Introduction</h2></div></div>
|
||
<div></div>
|
||
</div>
|
||
<div class="toc">
|
||
<p><b>Table of Contents</b></p>
|
||
<dl>
|
||
<dt>1.1. <a href="#id2862064">Introduction</a>
|
||
</dt>
|
||
<dt>1.2. <a href="#overview">Overview</a>
|
||
</dt>
|
||
<dt>1.3. <a href="#terminology">Terminology</a>
|
||
</dt>
|
||
<dt>1.4. <a href="#typography">Typography</a>
|
||
</dt>
|
||
</dl>
|
||
</div>
|
||
<div class="sect1" lang="en">
|
||
<div class="titlepage">
|
||
<div><div><h2 class="title" style="clear: both">
|
||
<a name="id2862064"></a>1.1. Introduction</h2></div></div>
|
||
<div></div>
|
||
</div>
|
||
<p>The NetBSD package system, <span class="emphasis"><em>pkgsrc</em></span>,
|
||
is a framework for building third-party software on NetBSD and other
|
||
UNIX-like systems. It is used to enable such freely available
|
||
software to be configured and built easily on supported platforms.</p>
|
||
<p>Once the software
|
||
has been built, it is manipulated with the pkg_* tools so that installation
|
||
and de-installation, printing of an inventory of all installed packages and
|
||
retrieval of one-line comments or more verbose descriptions are all
|
||
simple.</p>
|
||
<p>pkgsrc currently contains over 3500 packages, including:</p>
|
||
<div class="itemizedlist"><ul type="disc">
|
||
<li>
|
||
<a xmlns:html="http://www.w3.org/1999/xhtml" href="ftp://ftp.netbsd.org/pub/NetBSD/packages/pkgsrc/www/apache/README.html" class="pkgname">www/apache</a> - The Apache web server</li>
|
||
<li>
|
||
<a xmlns:html="http://www.w3.org/1999/xhtml" href="ftp://ftp.netbsd.org/pub/NetBSD/packages/pkgsrc/www/mozilla/README.html" class="pkgname">www/mozilla</a> - The Mozilla web browser</li>
|
||
<li>
|
||
<a xmlns:html="http://www.w3.org/1999/xhtml" href="ftp://ftp.netbsd.org/pub/NetBSD/packages/pkgsrc/x11/gnome/README.html" class="pkgname">x11/gnome</a> - The GNOME Desktop Environment</li>
|
||
<li>
|
||
<a xmlns:html="http://www.w3.org/1999/xhtml" href="ftp://ftp.netbsd.org/pub/NetBSD/packages/pkgsrc/x11/kde3/README.html" class="pkgname">x11/kde3</a> - The K Desktop Environment</li>
|
||
</ul></div>
|
||
<p>...just to name a few.</p>
|
||
<p>pkgsrc has built-in support for handling varying dependencies,
|
||
such as pthreads and X11, and extended features such as IPv6 support on
|
||
a range of platforms.</p>
|
||
<p>pkgsrc was originally developed on NetBSD, and now supports the
|
||
following platforms:</p>
|
||
<div class="itemizedlist"><ul type="disc">
|
||
<li>
|
||
<a href="http://developer.apple.com/darwin/" target="_top">Darwin</a>
|
||
(<a href="http://www.apple.com/macosx/" target="_top">MacOS X</a>)</li>
|
||
<li><a href="http://www.FreeBSD.org/" target="_top">FreeBSD</a></li>
|
||
<li><a href="http://www.sgi.com/software/irix6.5/" target="_top">IRIX</a></li>
|
||
<li><a href="http://www.linux.org/" target="_top">Linux</a></li>
|
||
<li>
|
||
<a href="http://www.NetBSD.org/" target="_top">NetBSD</a> (of
|
||
course)</li>
|
||
<li><a href="http://www.openbsd.org/" target="_top">OpenBSD</a></li>
|
||
<li><a href="http://www.sun.com/solaris/" target="_top">Solaris</a></li>
|
||
</ul></div>
|
||
</div>
|
||
<div class="sect1" lang="en">
|
||
<div class="titlepage">
|
||
<div><div><h2 class="title" style="clear: both">
|
||
<a name="overview"></a>1.2. Overview</h2></div></div>
|
||
<div></div>
|
||
</div>
|
||
<p>
|
||
This document is divided into two parts. The first, <a href="#users-guide" title="Part I. pkgsrc user's guide">pkgsrc user's guide</a>,
|
||
describes how one can use one of the packages in the Package
|
||
Collection, either by installing a precompiled binary package, or
|
||
by building one's own copy using the NetBSD package system. The
|
||
second part, <a href="#developers-guide" title="Part II. pkgsrc developer's guide">pkgsrc developer's guide</a>, explains how to prepare
|
||
a package so it can be easily built by other NetBSD users without
|
||
knowing about the package's building details.
|
||
</p>
|
||
</div>
|
||
<div class="sect1" lang="en">
|
||
<div class="titlepage">
|
||
<div><div><h2 class="title" style="clear: both">
|
||
<a name="terminology"></a>1.3. Terminology</h2></div></div>
|
||
<div></div>
|
||
</div>
|
||
<p>
|
||
There has been a lot of talk about “<span class="quote">ports</span>”,
|
||
“<span class="quote">packages</span>”, etc. so far. Here is a description of all the
|
||
terminology used within this document.
|
||
</p>
|
||
<div class="itemizedlist"><ul type="disc">
|
||
<li>
|
||
<p><span class="emphasis"><em>Package</em></span></p>
|
||
<p>
|
||
A set of files and building instructions that describe what's necessary
|
||
to build a certain piece of software using the NetBSD package
|
||
system. Packages are traditionally stored under
|
||
<tt class="filename">/usr/pkgsrc</tt>.
|
||
</p>
|
||
</li>
|
||
<li>
|
||
<p><span class="emphasis"><em>The NetBSD package system</em></span></p>
|
||
<p>
|
||
This is the part of the NetBSD operating system handling building
|
||
(compiling), installing, and removing of packages.
|
||
</p>
|
||
</li>
|
||
<li>
|
||
<p><span class="emphasis"><em>Distfile</em></span></p>
|
||
<p>
|
||
This term describes the file or files that are provided by the author
|
||
of the piece of freely available software to distribute his work. All
|
||
the changes necessary to build on NetBSD are reflected in the
|
||
corresponding package. Usually the distfile is in the form of a
|
||
compressed tar-archive, but other types are possible, too. Distfiles
|
||
are stored below <tt class="filename">/usr/pkgsrc/distfiles</tt>.
|
||
</p>
|
||
</li>
|
||
<li>
|
||
<p><span class="emphasis"><em>Port</em></span></p>
|
||
<p>
|
||
This is the term used by FreeBSD people for what we call a package.
|
||
In NetBSD terminology, “<span class="quote">port</span>” refers to a different
|
||
architecture.
|
||
</p>
|
||
</li>
|
||
<li>
|
||
<p><span class="emphasis"><em>Precompiled (binary) package</em></span></p>
|
||
<p>
|
||
A set of binaries built by the NetBSD package system from a distfile
|
||
using the NetBSD package system and stuffed together in a single
|
||
<tt class="filename">.tgz</tt> file so it can be installed on machines of the
|
||
same machine architecture without the need to recompile. Packages are
|
||
generated in <tt class="filename">/usr/pkgsrc/packages</tt> by the NetBSD
|
||
package system; there is also an archive on <a href="ftp://ftp.NetBSD.org/pub/NetBSD/packages/" target="_top">ftp.NetBSD.org</a>.
|
||
</p>
|
||
<p>
|
||
Sometimes, this is referred to by the term “<span class="quote">package</span>” too,
|
||
especially in the context of precompiled packages.
|
||
</p>
|
||
</li>
|
||
<li>
|
||
<p><span class="emphasis"><em>Program</em></span></p>
|
||
<p>
|
||
The piece of software to be installed which will be constructed from
|
||
all the files in the Distfile by the actions defined in the
|
||
corresponding package.
|
||
</p>
|
||
</li>
|
||
</ul></div>
|
||
</div>
|
||
<div class="sect1" lang="en">
|
||
<div class="titlepage">
|
||
<div><div><h2 class="title" style="clear: both">
|
||
<a name="typography"></a>1.4. Typography</h2></div></div>
|
||
<div></div>
|
||
</div>
|
||
<p>
|
||
When giving examples for commands, shell prompts are used to show if the
|
||
command should/can be issued as root, or if “<span class="quote">normal</span>” user
|
||
privileges are sufficient. We use a “<span class="quote">#</span>” for root's shell
|
||
prompt, and a “<span class="quote">%</span>” for users' shell prompt, assuming they use
|
||
the C-shell or tcsh.
|
||
</p>
|
||
</div>
|
||
</div>
|
||
<div class="part" lang="en">
|
||
<div class="titlepage">
|
||
<div><div><h1 class="title">
|
||
<a name="users-guide"></a>pkgsrc user's guide</h1></div></div>
|
||
<div></div>
|
||
</div>
|
||
<div class="toc">
|
||
<p><b>Table of Contents</b></p>
|
||
<dl>
|
||
<dt>2. <a href="#platforms">Using pkgsrc on systems other than NetBSD</a>
|
||
</dt>
|
||
<dd><dl>
|
||
<dt>2.1. <a href="#id2862465">Bootstrapping pkgsrc</a>
|
||
</dt>
|
||
<dt>2.2. <a href="#id2863843">Platform specific notes</a>
|
||
</dt>
|
||
</dl></dd>
|
||
<dt>3. <a href="#using">Using The NetBSD package system</a>
|
||
</dt>
|
||
<dd><dl>
|
||
<dt>3.1. <a href="#getting%20started">Working with binary packages</a>
|
||
</dt>
|
||
<dt>3.2. <a href="#id2937398">Building packages from source</a>
|
||
</dt>
|
||
</dl></dd>
|
||
<dt>4. <a href="#binary">Creating binary packages</a>
|
||
</dt>
|
||
<dd><dl>
|
||
<dt>4.1. <a href="#id2936710">Building a single binary package</a>
|
||
</dt>
|
||
<dt>4.2. <a href="#id2939394">Settings for creation of binary packages</a>
|
||
</dt>
|
||
<dt>4.3. <a href="#id2939411">Doing a bulk build of all packages</a>
|
||
</dt>
|
||
<dt>4.4. <a href="#id2940945">Creating a multiple CD-ROM packages collection</a>
|
||
</dt>
|
||
</dl></dd>
|
||
</dl>
|
||
</div>
|
||
<div class="chapter" lang="en">
|
||
<div class="titlepage">
|
||
<div><div><h2 class="title">
|
||
<a name="platforms"></a>Chapter 2. Using pkgsrc on systems other than NetBSD</h2></div></div>
|
||
<div></div>
|
||
</div>
|
||
<div class="toc">
|
||
<p><b>Table of Contents</b></p>
|
||
<dl>
|
||
<dt>2.1. <a href="#id2862465">Bootstrapping pkgsrc</a>
|
||
</dt>
|
||
<dt>2.2. <a href="#id2863843">Platform specific notes</a>
|
||
</dt>
|
||
</dl>
|
||
</div>
|
||
<div class="sect1" lang="en">
|
||
<div class="titlepage">
|
||
<div><div><h2 class="title" style="clear: both">
|
||
<a name="id2862465"></a>2.1. Bootstrapping pkgsrc</h2></div></div>
|
||
<div></div>
|
||
</div>
|
||
<p>
|
||
For Operating Systems other than NetBSD, we provide a bootstrap kit to
|
||
build the required tools to use pkgsrc on your platform. As well as
|
||
native NetBSD support, pkgsrc and the bootstrap kit have support for
|
||
the following operating systems:
|
||
</p>
|
||
<div class="itemizedlist"><ul type="disc">
|
||
<li>Darwin (MacOS X)</li>
|
||
<li>FreeBSD</li>
|
||
<li>IRIX</li>
|
||
<li>Linux</li>
|
||
<li>OpenBSD</li>
|
||
<li>Solaris</li>
|
||
</ul></div>
|
||
<p>
|
||
Support for other platforms is under development.
|
||
</p>
|
||
<p>
|
||
Installing the bootstrap kit should be as simple as:
|
||
</p>
|
||
<table xmlns:html="http://www.w3.org/1999/xhtml" class="programlisting"><tr><td><pre><tt class="prompt">#</tt> <b class="userinput"><tt>cvs checkout othersrc/bootstrap-pkgsrc</tt></b>
|
||
<tt class="prompt">#</tt> <b class="userinput"><tt>cd othersrc/bootstrap-pkgsrc</tt></b>
|
||
<tt class="prompt">#</tt> <b class="userinput"><tt>./bootstrap</tt></b></pre></td></tr></table>
|
||
<p>
|
||
This will use the defaults of <tt class="filename">/usr/pkg</tt> for the
|
||
<span class="emphasis"><em>prefix</em></span>
|
||
and <tt class="filename">/var/db/pkg</tt> for the package database directory.
|
||
However, these can also be set using command-line parameters.
|
||
</p>
|
||
<p>
|
||
Binary packages for the pkgsrc tools and an initial set of packages is
|
||
available for supported platforms. An up-to-date list of these can be
|
||
found on <a href="../../software/packages.html" target="_top">www.pkgsrc.org</a>.
|
||
</p>
|
||
</div>
|
||
<div class="sect1" lang="en">
|
||
<div class="titlepage">
|
||
<div><div><h2 class="title" style="clear: both">
|
||
<a name="id2863843"></a>2.2. Platform specific notes</h2></div></div>
|
||
<div></div>
|
||
</div>
|
||
<p>
|
||
Here are some platform-specific notes you should be aware of.
|
||
</p>
|
||
<div class="sect2" lang="en">
|
||
<div class="titlepage">
|
||
<div><div><h3 class="title">
|
||
<a name="id2863854"></a>2.2.1. Darwin (Mac OS X)</h3></div></div>
|
||
<div></div>
|
||
</div>
|
||
<p>
|
||
Darwin 5.x and 6.x are supported. There are two methods of using
|
||
pkgsrc on Mac OS X, by using a <a href="#platform.osx-image" title="2.2.1.1. Using a disk image">disk
|
||
image</a>, or a <a href="#platform.osx-ufs" title="2.2.1.2. Using a UFS partition">UFS
|
||
partition</a>.
|
||
</p>
|
||
<p>
|
||
If you already have a UFS partition, or have a spare partition
|
||
that you can format as UFS, it is recommended to use that instead of
|
||
the disk image. It'll be somewhat faster and will mount automatically
|
||
at boot time, where you must manually mount a disk image.
|
||
</p>
|
||
<div class="note" style="margin-left: 0.5in; margin-right: 0.5in;">
|
||
<h3 class="title">Note</h3>
|
||
You cannot use a HFS+ file system for pkgsrc, because pkgsrc currently
|
||
requires the filesystem to be case-sensitive, and HFS+ is not.
|
||
</div>
|
||
<div class="sect3" lang="en">
|
||
<div class="titlepage">
|
||
<div><div><h4 class="title">
|
||
<a name="platform.osx-image"></a>2.2.1.1. Using a disk image</h4></div></div>
|
||
<div></div>
|
||
</div>
|
||
<p>
|
||
Create the disk image:
|
||
</p>
|
||
<table xmlns:html="http://www.w3.org/1999/xhtml" class="programlisting"><tr><td><pre><tt class="prompt">#</tt> <b class="userinput"><tt>cd bootstrap-pkgsrc</tt></b>
|
||
<tt class="prompt">#</tt> <b class="userinput"><tt>./ufsdiskimage create ~/Documents/NetBSD 512</tt></b> # megabytes - season to taste
|
||
<tt class="prompt">#</tt> <b class="userinput"><tt>./ufsdiskimage mount ~/Documents/NetBSD</tt></b>
|
||
<tt class="prompt">#</tt> <b class="userinput"><tt>sudo chown `id -u`:`id -g` /Volumes/NetBSD</tt></b></pre></td></tr></table>
|
||
<p>
|
||
That's it!
|
||
</p>
|
||
</div>
|
||
<div class="sect3" lang="en">
|
||
<div class="titlepage">
|
||
<div><div><h4 class="title">
|
||
<a name="platform.osx-ufs"></a>2.2.1.2. Using a UFS partition</h4></div></div>
|
||
<div></div>
|
||
</div>
|
||
<p>
|
||
By default, <tt class="filename">/usr</tt> will be on your root file
|
||
system, normally HFS+. It is possible to use the default
|
||
<span class="emphasis"><em>prefix</em></span> of <tt class="filename">/usr/pkg</tt>
|
||
by symlinking <tt class="filename">/usr/pkg</tt> to a directory on a UFS
|
||
file system. Obviously, another symlink is required if you want to
|
||
place the package database directory outside the
|
||
<span class="emphasis"><em>prefix</em></span>. e.g.
|
||
|
||
</p>
|
||
<table xmlns:html="http://www.w3.org/1999/xhtml" class="programlisting"><tr><td><pre><tt class="prompt">#</tt> <b class="userinput"><tt>./bootstrap --pkgdbdir=/usr/pkg/pkgdb --pkgsrc=/Volumes/ufs/pkgsrc</tt></b></pre></td></tr></table>
|
||
<p>
|
||
</p>
|
||
<p>
|
||
If you created your partitions at the time of installing Mac OS X
|
||
and formatted the target partition as UFS, it should automatically
|
||
mount on <tt class="filename">/Volumes/<volume name></tt> when the
|
||
machine boots. If you are (re)formatting a partition as UFS, you need
|
||
to ensure that the partition map correctly reflects
|
||
“<span class="quote">Apple_UFS</span>” and not “<span class="quote">Apple_HFS</span>”.
|
||
</p>
|
||
<p>
|
||
The problem is that none of the disk tools will let you touch a
|
||
disk that is booted from. You can unmount the partition, but even if
|
||
you newfs it, the partition type will be incorrect and the
|
||
automounter won't mount it. It can be mounted manually, but it won't
|
||
appear in Finder.
|
||
</p>
|
||
<p>
|
||
You'll need to boot off of the OS X Installation (User) CD. When
|
||
the Installation program starts, go up to the menu and select Disk
|
||
Utility. Now, you will be able to select the partition you want
|
||
to be UFS, and Format it Apple UFS. Quit the Disk Utility, quit the
|
||
installer which will reboot your machine. The new UFS file system
|
||
will appear in Finder.
|
||
</p>
|
||
<p>
|
||
Be aware that the permissions on the new file system will be writable
|
||
by root only.
|
||
</p>
|
||
<p>
|
||
This note is as of 10.2 (Jaguar) and applies to earlier versions.
|
||
Hopefully Apple will fix Disk Utility in 10.3 (Panther).
|
||
</p>
|
||
</div>
|
||
</div>
|
||
<div class="sect2" lang="en">
|
||
<div class="titlepage">
|
||
<div><div><h3 class="title">
|
||
<a name="id2865702"></a>2.2.2. FreeBSD</h3></div></div>
|
||
<div></div>
|
||
</div>
|
||
<p>
|
||
FreeBSD 4.7 and 5.0 have been tested and are supported, other versions
|
||
may work.
|
||
</p>
|
||
<p>
|
||
Care should be taken so that the tools that this kit installs do not conflict
|
||
with the FreeBSD userland tools. There are several steps:
|
||
</p>
|
||
<div class="orderedlist"><ol type="1">
|
||
<li><p>
|
||
FreeBSD stores its ports pkg database in
|
||
<tt class="filename">/var/db/pkg</tt>. It is therefore
|
||
recommended that you choose a different location (e.g.
|
||
<tt class="filename">/usr/pkgdb</tt>) by
|
||
using the --pkgdbdir option to the bootstrap script.
|
||
</p></li>
|
||
<li>
|
||
<p>
|
||
If you do not intend to use the FreeBSD ports tools, it's probably a
|
||
good idea to move them out of the way to avoid confusion, e.g.
|
||
</p>
|
||
<table xmlns:html="http://www.w3.org/1999/xhtml" class="programlisting"><tr><td><pre><tt class="prompt">#</tt> <b class="userinput"><tt>cd /usr/sbin</tt></b>
|
||
<tt class="prompt">#</tt> <b class="userinput"><tt>mv pkg_add pkg_add.orig</tt></b>
|
||
<tt class="prompt">#</tt> <b class="userinput"><tt>mv pkg_create pkg_create.orig</tt></b>
|
||
<tt class="prompt">#</tt> <b class="userinput"><tt>mv pkg_delete pkg_delete.orig</tt></b>
|
||
<tt class="prompt">#</tt> <b class="userinput"><tt>mv pkg_info pkg_info.orig</tt></b></pre></td></tr></table>
|
||
</li>
|
||
<li><p>
|
||
An example <tt class="filename">/etc/mk.conf</tt> file will be placed in
|
||
<tt class="filename">/etc/mk.conf.example</tt> file
|
||
when you use the bootstrap script.
|
||
</p></li>
|
||
</ol></div>
|
||
</div>
|
||
<div class="sect2" lang="en">
|
||
<div class="titlepage">
|
||
<div><div><h3 class="title">
|
||
<a name="id2935473"></a>2.2.3. IRIX</h3></div></div>
|
||
<div></div>
|
||
</div>
|
||
<p>
|
||
IRIX 6.5 is tested and supported, other versions may work.
|
||
</p>
|
||
<p>
|
||
You will need a working C compiler, either gcc or SGI's MIPS
|
||
and MIPSpro compiler (cc/c89). Please set the <tt class="varname">CC</tt>
|
||
environment variable according to your preference.
|
||
</p>
|
||
<p>
|
||
Please make sure that you have no conflicting
|
||
<tt class="varname">CFLAGS</tt> in your environment or the
|
||
<tt class="filename">/etc/mk.conf</tt>. Particularly, make sure that you do
|
||
not try to link n32 object files with lib64 or vice versa. Check your
|
||
<tt class="filename">/etc/compiler.defaults</tt>!
|
||
</p>
|
||
</div>
|
||
<div class="sect2" lang="en">
|
||
<div class="titlepage">
|
||
<div><div><h3 class="title">
|
||
<a name="id2935518"></a>2.2.4. OpenBSD</h3></div></div>
|
||
<div></div>
|
||
</div>
|
||
<p>
|
||
OpenBSD 3.0 and 3.2 are tested and supported.
|
||
</p>
|
||
<p>
|
||
Care should be taken so that the tools that this kit installs do not conflict
|
||
with the OpenBSD userland tools. There are several steps:
|
||
</p>
|
||
<div class="orderedlist"><ol type="1">
|
||
<li><p>
|
||
OpenBSD stores its ports pkg database in
|
||
<tt class="filename">/var/db/pkg</tt>. It is therefore
|
||
recommended that you choose a different location (e.g.
|
||
<tt class="filename">/usr/pkgdb</tt>) by
|
||
using the --pkgdbdir option to the bootstrap script.
|
||
</p></li>
|
||
<li>
|
||
<p>
|
||
If you do not intend to use the OpenBSD ports tools, it's probably a
|
||
good idea to move them out of the way to avoid confusion, e.g.
|
||
</p>
|
||
<table xmlns:html="http://www.w3.org/1999/xhtml" class="programlisting"><tr><td><pre><tt class="prompt">#</tt> <b class="userinput"><tt>cd /usr/sbin</tt></b>
|
||
<tt class="prompt">#</tt> <b class="userinput"><tt>mv pkg_add pkg_add.orig</tt></b>
|
||
<tt class="prompt">#</tt> <b class="userinput"><tt>mv pkg_create pkg_create.orig</tt></b>
|
||
<tt class="prompt">#</tt> <b class="userinput"><tt>mv pkg_delete pkg_delete.orig</tt></b>
|
||
<tt class="prompt">#</tt> <b class="userinput"><tt>mv pkg_info pkg_info.orig</tt></b></pre></td></tr></table>
|
||
</li>
|
||
<li>
|
||
<p>
|
||
An example <tt class="filename">/etc/mk.conf</tt> file will be placed in
|
||
<tt class="filename">/etc/mk.conf.example</tt> file
|
||
when you use the bootstrap script. OpenBSD's make program uses
|
||
<tt class="filename">/etc/mk.conf</tt>
|
||
as well. You can work around this by enclosing all the pkgsrc specific parts
|
||
of the file with:
|
||
</p>
|
||
<table xmlns:html="http://www.w3.org/1999/xhtml" class="programlisting"><tr><td><pre>.ifdef BSD_PKG_MK
|
||
# pkgsrc stuff, e.g. insert bsd.pkg.defaults.mk or similar here
|
||
.else
|
||
# OpenBSD stuff
|
||
.endif</pre></td></tr></table>
|
||
</li>
|
||
</ol></div>
|
||
</div>
|
||
<div class="sect2" lang="en">
|
||
<div class="titlepage">
|
||
<div><div><h3 class="title">
|
||
<a name="id2935748"></a>2.2.5. Solaris</h3></div></div>
|
||
<div></div>
|
||
</div>
|
||
<p>
|
||
Solaris 2.6 through 9 are supported. You will need a working C
|
||
compiler. Both gcc 2.95.3 and Sun WorkShop 5 have been tested.
|
||
</p>
|
||
<p>
|
||
The following packages are required on Solaris 8 for the bootstrap
|
||
process and to build packages.
|
||
</p>
|
||
<div class="itemizedlist"><ul type="disc">
|
||
<li>SUNWsprot</li>
|
||
<li>SUNWarc</li>
|
||
<li>SUNWbtool</li>
|
||
<li>SUNWtoo</li>
|
||
<li>SUNWlibm</li>
|
||
</ul></div>
|
||
<p>
|
||
Please note the use of GNU binutils on Solaris is
|
||
<span class="emphasis"><em>not</em></span> supported.
|
||
</p>
|
||
<div class="sect3" lang="en">
|
||
<div class="titlepage">
|
||
<div><div><h4 class="title">
|
||
<a name="id2935793"></a>2.2.5.1. If you are using gcc</h4></div></div>
|
||
<div></div>
|
||
</div>
|
||
<p>
|
||
It makes life much simpler if you only use the same gcc consistently
|
||
for building all packages.
|
||
</p>
|
||
<p>
|
||
It is recommended that an external gcc be used only for bootstrapping,
|
||
then either build gcc from <a xmlns:html="http://www.w3.org/1999/xhtml" href="ftp://ftp.netbsd.org/pub/NetBSD/packages/pkgsrc/lang/gcc/README.html" class="pkgname">lang/gcc</a> or install a binary gcc
|
||
package, then remove gcc used during bootstrapping.
|
||
</p>
|
||
</div>
|
||
<div class="sect3" lang="en">
|
||
<div class="titlepage">
|
||
<div><div><h4 class="title">
|
||
<a name="id2935811"></a>2.2.5.2. If you are using Sun WorkShop</h4></div></div>
|
||
<div></div>
|
||
</div>
|
||
<p>
|
||
You will need at least the following packages installed (from WorkShop
|
||
5.0)
|
||
</p>
|
||
<div class="itemizedlist"><ul type="disc">
|
||
<li>SPROcc - Sun WorkShop Compiler C 5.0</li>
|
||
<li>SPROcpl - Sun WorkShop Compiler C++ 5.0</li>
|
||
<li>SPROild - Sun WorkShop Incremental Linker</li>
|
||
<li>SPROlang - Sun WorkShop Compilers common components</li>
|
||
</ul></div>
|
||
<p>
|
||
You should set <tt class="varname">CC</tt>, <tt class="varname">CXX</tt> and
|
||
optionally, <tt class="varname">CPP</tt> in <tt class="filename">/etc/mk.conf</tt>,
|
||
eg.
|
||
</p>
|
||
<table xmlns:html="http://www.w3.org/1999/xhtml" class="programlisting"><tr><td><pre>CC= cc
|
||
CXX= CC
|
||
CPP= /usr/ccs/lib/cpp</pre></td></tr></table>
|
||
<p>
|
||
You may also want to build 64-bit binaries, eg.
|
||
</p>
|
||
<table xmlns:html="http://www.w3.org/1999/xhtml" class="programlisting"><tr><td><pre>CFLAGS= -xtarget=ultra -xarch=v9</pre></td></tr></table>
|
||
</div>
|
||
<p>
|
||
Whichever compiler you use, please ensure the compiler tools and
|
||
your $prefix are in your <tt class="varname">PATH</tt>. This includes
|
||
<tt class="filename">/usr/ccs/{bin,lib}</tt>
|
||
and eg. <tt class="filename">/usr/pkg/{bin,sbin}</tt>.
|
||
</p>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div class="chapter" lang="en">
|
||
<div class="titlepage">
|
||
<div><div><h2 class="title">
|
||
<a name="using"></a>Chapter 3. Using The NetBSD package system</h2></div></div>
|
||
<div></div>
|
||
</div>
|
||
<div class="toc">
|
||
<p><b>Table of Contents</b></p>
|
||
<dl>
|
||
<dt>3.1. <a href="#getting%20started">Working with binary packages</a>
|
||
</dt>
|
||
<dt>3.2. <a href="#id2937398">Building packages from source</a>
|
||
</dt>
|
||
</dl>
|
||
</div>
|
||
<div class="sect1" lang="en">
|
||
<div class="titlepage">
|
||
<div><div><h2 class="title" style="clear: both">
|
||
<a name="getting started"></a>3.1. Working with binary packages</h2></div></div>
|
||
<div></div>
|
||
</div>
|
||
<p>
|
||
This section describes how to find, retrieve and install a precompiled
|
||
binary package that someone else already prepared for your type of machine.
|
||
</p>
|
||
<div class="sect2" lang="en">
|
||
<div class="titlepage">
|
||
<div><div><h3 class="title">
|
||
<a name="id2935275"></a>3.1.1. How to get binary packages</h3></div></div>
|
||
<div></div>
|
||
</div>
|
||
<p>
|
||
Precompiled packages are stored on ftp.NetBSD.org and its mirrors in the
|
||
directory <tt class="filename">/pub/NetBSD/packages</tt> for anonymous FTP access.
|
||
Please pick the right
|
||
subdirectory there as indicated by <b class="command">uname -p</b>. In that
|
||
directory, there is a subdirectory for each category plus a subdirectory
|
||
<tt class="filename">All</tt> which includes
|
||
the actual binaries in <tt class="filename">.tgz</tt> files. The category
|
||
subdirectories use symbolic
|
||
links to those files (this is the same directory layout as in
|
||
<tt class="filename">/usr/pkgsrc/packages</tt>).
|
||
</p>
|
||
<p>
|
||
This same directory layout applies for CDROM distributions, only that the
|
||
directory may be rooted somewhere else, probably somewhere below
|
||
<tt class="filename">/cdrom</tt>. Please consult your CDROMs documentation for
|
||
the exact location.
|
||
</p>
|
||
</div>
|
||
<div class="sect2" lang="en">
|
||
<div class="titlepage">
|
||
<div><div><h3 class="title">
|
||
<a name="id2935328"></a>3.1.2. Installing binary packages</h3></div></div>
|
||
<div></div>
|
||
</div>
|
||
<p>
|
||
If you have the files on a CDROM or downloaded them to your hard disk, you
|
||
can install them with the following command (be sure to
|
||
<b class="command">su</b> to root first):
|
||
</p>
|
||
<table xmlns:html="http://www.w3.org/1999/xhtml" class="programlisting"><tr><td><pre><tt class="prompt">#</tt> <b class="userinput"><tt>pkg_add /path/to/package.tgz</tt></b></pre></td></tr></table>
|
||
<p>
|
||
If you have FTP access and you don't want to download the packages via FTP
|
||
prior to installation, you can do this automatically by giving
|
||
<b class="command">pkg_add</b> an FTP URL:
|
||
</p>
|
||
<table xmlns:html="http://www.w3.org/1999/xhtml" class="programlisting"><tr><td><pre><tt class="prompt">#</tt> <b class="userinput"><tt>pkg_add ftp://ftp.NetBSD.org/pub/NetBSD/packages/<OS Ver>/<arch>/All/package.tgz</tt></b></pre></td></tr></table>
|
||
<p>
|
||
If there is any doubt, the uname utility can be used to determine the
|
||
<OS Ver>, and <arch> by running <b class="command">uname -rp</b>.
|
||
</p>
|
||
<p>
|
||
Also note that any prerequisite packages needed to run the package in
|
||
question will be installed, too, assuming they are present where you install
|
||
from.
|
||
</p>
|
||
<p>
|
||
After you've installed packages, be sure to have
|
||
<tt class="filename">/usr/pkg/bin</tt> in your <tt class="varname">PATH</tt>
|
||
so you can actually start the just installed program.
|
||
</p>
|
||
</div>
|
||
<div class="sect2" lang="en">
|
||
<div class="titlepage">
|
||
<div><div><h3 class="title">
|
||
<a name="id2937385"></a>3.1.3. A word of warning</h3></div></div>
|
||
<div></div>
|
||
</div>
|
||
<p>
|
||
Please pay very careful attention to the warnings expressed in that manual
|
||
page about the inherent dangers of installing binary packages which you did
|
||
not create yourself, and the security holes that can be introduced onto
|
||
your system by indiscriminate adding of such files.
|
||
</p>
|
||
</div>
|
||
</div>
|
||
<div class="sect1" lang="en">
|
||
<div class="titlepage">
|
||
<div><div><h2 class="title" style="clear: both">
|
||
<a name="id2937398"></a>3.2. Building packages from source</h2></div></div>
|
||
<div></div>
|
||
</div>
|
||
<p>
|
||
This assumes that the package is already part of the NetBSD package system.
|
||
If it is not, see <a href="#developers-guide" title="Part II. pkgsrc developer's guide">Part II</a>.
|
||
</p>
|
||
<div class="sect2" lang="en">
|
||
<div class="titlepage">
|
||
<div><div><h3 class="title">
|
||
<a name="id2937412"></a>3.2.1. Requirements</h3></div></div>
|
||
<div></div>
|
||
</div>
|
||
<p>
|
||
To build packages from source on a NetBSD system the
|
||
“<span class="quote">comp</span>” and the “<span class="quote">text</span>”
|
||
distribution sets must be installed. If you want to build X11 related
|
||
packages the “<span class="quote">xbase</span>” and “<span class="quote">xcomp</span>” distribution
|
||
sets are required, too.
|
||
</p>
|
||
<div class="sect3" lang="en">
|
||
<div class="titlepage">
|
||
<div><div><h4 class="title">
|
||
<a name="id2937440"></a>3.2.1.1. Where to get pkgsrc</h4></div></div>
|
||
<div></div>
|
||
</div>
|
||
<p>
|
||
There are three ways to get pkgsrc. Either as a tar file, via SUP, or
|
||
via CVS. All three ways are described here.
|
||
</p>
|
||
<p>
|
||
To get the package source going, you need to get the pkgsrc.tar.gz file
|
||
from <a href="ftp://ftp.NetBSD.org/pub/NetBSD-current/tar_files/pkgsrc.tar.gz" target="_top">ftp.NetBSD.org</a> and unpack it into <tt class="filename">/usr/pkgsrc</tt>.
|
||
</p>
|
||
<p>
|
||
As an alternative, you can get pkgsrc via the Software Update Protocol,
|
||
SUP. To do so, make sure your supfile has a line
|
||
|
||
</p>
|
||
<table xmlns:html="http://www.w3.org/1999/xhtml" class="programlisting"><tr><td><pre>release=pkgsrc</pre></td></tr></table>
|
||
<p>
|
||
|
||
in it, see the examples in
|
||
<tt class="filename">/usr/share/examples/supfiles</tt>, and that the
|
||
<tt class="filename">/usr/pkgsrc</tt> directory exists. Then, simply run
|
||
<b class="command">sup -v /path/to/your/supfile</b>.
|
||
</p>
|
||
<p>
|
||
To get pkgsrc via CVS, make sure you have cvs installed. If not present on
|
||
your system, it can be found as precompiled binary on ftp.NetBSD.org.
|
||
To do an initial (full) checkout of pkgsrc, do the following steps:
|
||
</p>
|
||
<table xmlns:html="http://www.w3.org/1999/xhtml" class="programlisting"><tr><td><pre><tt class="prompt">%</tt> <b class="userinput"><tt>setenv CVSROOT anoncvs@anoncvs.NetBSD.org:/cvsroot</tt></b>
|
||
<tt class="prompt">%</tt> <b class="userinput"><tt>setenv CVS_RSH ssh</tt></b>
|
||
<tt class="prompt">%</tt> <b class="userinput"><tt>cd /usr</tt></b>
|
||
<tt class="prompt">%</tt> <b class="userinput"><tt>cvs checkout -P pkgsrc</tt></b></pre></td></tr></table>
|
||
<p>
|
||
This will create the <tt class="filename">pkgsrc</tt> directory in your
|
||
<tt class="filename">/usr</tt>, and all the package source will be stored
|
||
under <tt class="filename">/usr/pkgsrc</tt>. To update pkgsrc
|
||
after the initial checkout, make sure you have
|
||
<tt class="varname">CVS_RSH</tt> set as above, then do:
|
||
</p>
|
||
<table xmlns:html="http://www.w3.org/1999/xhtml" class="programlisting"><tr><td><pre><tt class="prompt">%</tt> <b class="userinput"><tt>cd /usr/pkgsrc</tt></b>
|
||
<tt class="prompt">%</tt> <b class="userinput"><tt>cvs -q update -dP</tt></b></pre></td></tr></table>
|
||
<p>
|
||
Please also note that it is possible to have multiple copies of the
|
||
pkgsrc hierarchy in use at any one time - all work is done relatively
|
||
within the pkgsrc tree.
|
||
</p>
|
||
</div>
|
||
<div class="sect3" lang="en">
|
||
<div class="titlepage">
|
||
<div><div><h4 class="title">
|
||
<a name="id2937693"></a>3.2.1.2. Fetching distfiles</h4></div></div>
|
||
<div></div>
|
||
</div>
|
||
<p>
|
||
There is one gotcha: The distribution file (i.e. the unmodified source)
|
||
must exist on your system for the packages system to be able to build it.
|
||
If it does not, then <b class="command">ftp</b> is used to fetch the
|
||
distribution files automatically.
|
||
</p>
|
||
<p>
|
||
You can overwrite some of the major distribution sites to fit to sites
|
||
that are close to your own. Have a look at
|
||
<tt class="filename">pkgsrc/mk/bsd.pkg.defaults.mk</tt> to find some examples
|
||
- in particular, look for the <tt class="varname">MASTER_SORT</tt>,
|
||
<tt class="varname">MASTER_SORT_REGEX</tt> and
|
||
<tt class="varname">INET_COUNTRY</tt> definitions. This may save some of your
|
||
bandwidth and time.
|
||
</p>
|
||
<p>
|
||
You can change these settings either in your shell's environment, or,
|
||
if you want to keep the settings, by editing the
|
||
<tt class="filename">/etc/mk.conf</tt> file,
|
||
and adding the definitions there.
|
||
</p>
|
||
<p>
|
||
If you don't have a permanent Internet connection and you want to know
|
||
which files to download, <b class="command">make fetch-list</b> will tell you
|
||
what you'll need. Put these distfiles into
|
||
<tt class="filename">/usr/pkgsrc/distfiles</tt>.
|
||
</p>
|
||
</div>
|
||
<div class="sect3" lang="en">
|
||
<div class="titlepage">
|
||
<div><div><h4 class="title">
|
||
<a name="id2937763"></a>3.2.1.3. How to build and install</h4></div></div>
|
||
<div></div>
|
||
</div>
|
||
<p>
|
||
Once the distfile(s) have been fetched, building a package is as
|
||
simple as changing into the package directory and running make:
|
||
|
||
</p>
|
||
<table xmlns:html="http://www.w3.org/1999/xhtml" class="programlisting"><tr><td><pre><tt class="prompt">%</tt> <b class="userinput"><tt>cd editors/vim</tt></b>
|
||
<tt class="prompt">%</tt> <b class="userinput"><tt>make</tt></b></pre></td></tr></table>
|
||
<p>
|
||
</p>
|
||
<p>
|
||
Installing the package on your system requires you to be root.
|
||
However, pkgsrc has a <span class="emphasis"><em>just-in-time</em></span> su feature,
|
||
which allows you to only become root for the actual installation step.
|
||
e.g.
|
||
|
||
</p>
|
||
<table xmlns:html="http://www.w3.org/1999/xhtml" class="programlisting"><tr><td><pre><tt class="prompt">%</tt> <b class="userinput"><tt>make install</tt></b>
|
||
===> Installing for top-3.5beta5
|
||
===> Becoming root@mofo to install top-3.5beta5.
|
||
/usr/bin/su Password: <b class="userinput"><tt><password></tt></b>
|
||
[...installation continues...]</pre></td></tr></table>
|
||
<p>
|
||
</p>
|
||
<p>
|
||
Taking the top system utility as an example, we can install it on our
|
||
system by building as shown in <a href="#logs" title="Appendix A. Build logs">Appendix A, <i>Build logs</i></a>.
|
||
</p>
|
||
<p>
|
||
The program is installed under the default root of the packages tree -
|
||
<tt class="filename">/usr/pkg</tt>. Should this not conform to your tastes,
|
||
simply set the <tt class="varname">LOCALBASE</tt>
|
||
variable in your environment, and it will use that value as the root of
|
||
your packages tree. So, to use <tt class="filename">/usr/local</tt>, set
|
||
<tt class="varname">LOCALBASE=/usr/local</tt> in your environment. Please note
|
||
that you should use a root which is
|
||
dedicated to packages and not shared with other programs (ie, do not try
|
||
and use <tt class="varname">LOCALBASE=/usr</tt>). Also, you should not try to
|
||
add any of your own files or directories (such as <tt class="filename">src/</tt>,
|
||
<tt class="filename">obj/</tt>, or <tt class="filename">pkgsrc/</tt>) below the
|
||
<tt class="varname">LOCALBASE</tt> tree. This is to prevent possible conflicts
|
||
between programs and other files installed by the package system and
|
||
whatever else may have been installed there.
|
||
</p>
|
||
<p>
|
||
There is, of course, one exception to this - X11 packages are traditionally
|
||
installed in the X11 tree. The definition used to identify the root of the
|
||
X11 tree is the <tt class="varname">X11BASE</tt> definition.
|
||
</p>
|
||
<p>
|
||
It is possible to install X11 packages in the
|
||
<tt class="varname">LOCALBASE</tt> tree, for which you must install the
|
||
<a xmlns:html="http://www.w3.org/1999/xhtml" href="ftp://ftp.netbsd.org/pub/NetBSD/packages/pkgsrc/pkgtools/xpkgwedge/README.html" class="pkgname">pkgtools/xpkgwedge</a> package - see <a href="#build.prefix" title="8.1. Program location">Section 8.1, “Program location”</a> for further details.
|
||
</p>
|
||
<p>
|
||
Some packages look in <tt class="filename">/etc/mk.conf</tt> to alter some
|
||
configuration options at build time. Have a look at
|
||
<tt class="filename">pkgsrc/mk/bsd.pkg.defaults.mk</tt> to
|
||
get an overview of what will be set there by default. Environment
|
||
variables such as <tt class="varname">LOCALBASE</tt>, and
|
||
<tt class="varname">X11BASE</tt> can be set in <tt class="filename">/etc/mk.conf</tt> to
|
||
save having to remember to set them each time you want to use pkgsrc.
|
||
</p>
|
||
<p>
|
||
Occasionally, people want to “<span class="quote">look under the covers</span>” to see
|
||
what is going on when a package is building or being installed. This may be
|
||
for debugging purposes, or out of simple curiosity. A number of utility
|
||
values have been added to help with this.
|
||
</p>
|
||
<div class="orderedlist"><ol type="1">
|
||
<li>
|
||
<p>
|
||
If you invoke the make(1) command with <tt class="varname">PKG_DEBUG_LEVEL=2</tt>,
|
||
then a huge amount of information will be displayed. For example,
|
||
</p>
|
||
<table xmlns:html="http://www.w3.org/1999/xhtml" class="programlisting"><tr><td><pre><tt class="prompt">%</tt> <b class="userinput"><tt>make patch PKG_DEBUG_LEVEL=2</tt></b></pre></td></tr></table>
|
||
<p>
|
||
will show all the commands that are invoked, up to and including the
|
||
“<span class="quote">patch</span>” stage.
|
||
</p>
|
||
</li>
|
||
<li>
|
||
<p>
|
||
If you want to know the value of a certain make(1) definition, then
|
||
the <tt class="varname">VARNAME</tt> definition should be used, in conjunction
|
||
with the show-var target. e.g.
|
||
</p>
|
||
<table xmlns:html="http://www.w3.org/1999/xhtml" class="programlisting"><tr><td><pre><tt class="prompt">%</tt> <b class="userinput"><tt>make show-var VARNAME=DISTFILES</tt></b></pre></td></tr></table>
|
||
<p>
|
||
will show the expansion of the make(1) variable
|
||
<tt class="varname">DISTFILES</tt>.
|
||
</p>
|
||
</li>
|
||
</ol></div>
|
||
<p>
|
||
If you want to de-install and re-install a binary package that you've
|
||
created (see next section), that you put into pkgsrc/packages manually or
|
||
that's located on a remote FTP server, you can use the the "bin-install"
|
||
target. This target will install a binary package - if available - via
|
||
<b class="command">pkg_add</b>, else do a <b class="command">make package</b>.
|
||
The list of remote
|
||
FTP sites searched is kept in the variable
|
||
<tt class="varname">BINPKG_SITE</tt>, which defaults to
|
||
ftp.NetBSD.org. Any flags that should be added to pkg_add(8) can be put
|
||
into <tt class="varname">BIN_INSTALL_FLAGS</tt>. See <tt class="filename">pkgsrc/mk/bsd.pkg.defaults.mk</tt> for more details.
|
||
</p>
|
||
<p>
|
||
A final word of warning: If you setup a system that has a non-standard
|
||
setting for <tt class="varname">LOCALBASE</tt> (or
|
||
<tt class="varname">X11BASE</tt>, for that matter), be sure to set that
|
||
before any packages are installed, as you can not use several directories
|
||
for the same purpose. Doing so will result in pkgsrc not being able to
|
||
properly detect your installed packages, and fail miserably. Note also that
|
||
precompiled binary packages are usually built with the default
|
||
<tt class="varname">LOCALBASE</tt> of
|
||
<tt class="filename">/usr/pkg</tt>, and that you should <span class="emphasis"><em>not</em></span>
|
||
install any if you use a non-standard <tt class="varname">LOCALBASE</tt>.
|
||
</p>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div class="chapter" lang="en">
|
||
<div class="titlepage">
|
||
<div><div><h2 class="title">
|
||
<a name="binary"></a>Chapter 4. Creating binary packages</h2></div></div>
|
||
<div></div>
|
||
</div>
|
||
<div class="toc">
|
||
<p><b>Table of Contents</b></p>
|
||
<dl>
|
||
<dt>4.1. <a href="#id2936710">Building a single binary package</a>
|
||
</dt>
|
||
<dt>4.2. <a href="#id2939394">Settings for creation of binary packages</a>
|
||
</dt>
|
||
<dt>4.3. <a href="#id2939411">Doing a bulk build of all packages</a>
|
||
</dt>
|
||
<dt>4.4. <a href="#id2940945">Creating a multiple CD-ROM packages collection</a>
|
||
</dt>
|
||
</dl>
|
||
</div>
|
||
<div class="sect1" lang="en">
|
||
<div class="titlepage">
|
||
<div><div><h2 class="title" style="clear: both">
|
||
<a name="id2936710"></a>4.1. Building a single binary package</h2></div></div>
|
||
<div></div>
|
||
</div>
|
||
<p>
|
||
Once you have built and installed a package, you can create a
|
||
<span class="emphasis"><em>binary package</em></span> which can be installed on another
|
||
system with pkg_add(1). This saves having to build the same package on
|
||
a group of hosts and wasting CPU time. It also provides a simple means
|
||
for others to install your package, should you distribute it.
|
||
</p>
|
||
<p>
|
||
Create a binary package:
|
||
</p>
|
||
<table xmlns:html="http://www.w3.org/1999/xhtml" class="programlisting"><tr><td><pre><tt class="prompt">#</tt> <b class="userinput"><tt>cd sysutils/top</tt></b>
|
||
<tt class="prompt">#</tt> <b class="userinput"><tt>make package</tt></b></pre></td></tr></table>
|
||
<p>
|
||
This will build and install your package (if not already done), and then
|
||
build a binary package from what was installed. You can then use the
|
||
<b class="command">pkg_*</b> tools to manipulate it. Binary packages are
|
||
created by default in <tt class="filename">/usr/pkgsrc/packages</tt>, in the
|
||
form of a gzip or bzip2 tar file. See <a href="#logs.package" title="A.2. Packaging top">Section A.2, “Packaging top”</a> for
|
||
a continuation of the above <a xmlns:html="http://www.w3.org/1999/xhtml" href="ftp://ftp.netbsd.org/pub/NetBSD/packages/pkgsrc/sysutils/top/README.html" class="pkgname">sysutils/top</a> example.
|
||
</p>
|
||
<p>
|
||
See <a href="#submit" title="Chapter 12. Submitting and Committing">Chapter 12, <i>Submitting and Committing</i></a> for information on how to submit such a
|
||
binary package.
|
||
</p>
|
||
</div>
|
||
<div class="sect1" lang="en">
|
||
<div class="titlepage">
|
||
<div><div><h2 class="title" style="clear: both">
|
||
<a name="id2939394"></a>4.2. Settings for creation of binary packages</h2></div></div>
|
||
<div></div>
|
||
</div>
|
||
<p>
|
||
See <a href="#build.helpful-targets" title="8.3. Other helpful targets">Section 8.3, “Other helpful targets”</a>.
|
||
</p>
|
||
</div>
|
||
<div class="sect1" lang="en">
|
||
<div class="titlepage">
|
||
<div><div><h2 class="title" style="clear: both">
|
||
<a name="id2939411"></a>4.3. Doing a bulk build of all packages</h2></div></div>
|
||
<div></div>
|
||
</div>
|
||
<p>
|
||
If you want to get a full set of precompiled binary packages, this section
|
||
describes how to get them. Beware that the bulk build will remove all
|
||
currently installed packages from your your system! Having a FTP server
|
||
configured either on the machine doing the bulk builds or on a nearby NFS
|
||
server can help to make the packages available to everyone. See ftpd(8) for
|
||
more information. If you use a remote NFS server's storage, be sure to not
|
||
actually compile on NFS storage, as this slows things down a lot.
|
||
</p>
|
||
<div class="sect2" lang="en">
|
||
<div class="titlepage">
|
||
<div><div><h3 class="title">
|
||
<a name="id2939422"></a>4.3.1. Configuration</h3></div></div>
|
||
<div></div>
|
||
</div>
|
||
<div class="sect3" lang="en">
|
||
<div class="titlepage">
|
||
<div><div><h4 class="title">
|
||
<a name="binary.mk.conf"></a>4.3.1.1. /etc/mk.conf</h4></div></div>
|
||
<div></div>
|
||
</div>
|
||
<p>
|
||
You may want to set things in <tt class="filename">/etc/mk.conf</tt>.
|
||
Look at <tt class="filename">pkgsrc/mk/bsd.pkg.defaults.mk</tt> for
|
||
details of the default settings. You will want to ensure that
|
||
<tt class="varname">ACCEPTABLE_LICENSES</tt> meet your local policy.
|
||
As used in this example, <tt class="varname">_ACCEPTABLE=yes</tt>
|
||
accepts <span class="emphasis"><em>all</em></span> licenses.
|
||
</p>
|
||
<table xmlns:html="http://www.w3.org/1999/xhtml" class="programlisting"><tr><td><pre>PACKAGES?= ${_PKGSRCDIR}/packages/${MACHINE_ARCH}
|
||
WRKOBJDIR?= /usr/tmp/pkgsrc # build here instead of in pkgsrc
|
||
BSDSRCDIR= /usr/src
|
||
BSDXSRCDIR= /usr/xsrc # for x11/xservers
|
||
OBJHOSTNAME?= yes # use work.`hostname`
|
||
FAILOVER_FETCH= yes # insist on the correct checksum
|
||
PKG_DEVELOPER?= yes
|
||
_ACCEPTABLE= yes</pre></td></tr></table>
|
||
<p>
|
||
If you wish to use xpkgwedge for the entire build, then add:
|
||
</p>
|
||
<table xmlns:html="http://www.w3.org/1999/xhtml" class="programlisting"><tr><td><pre>BULK_PREREQ+= pkgtools/xpkgwedge</pre></td></tr></table>
|
||
<p>
|
||
Other packages which must be installed during the bulk build to modify the
|
||
build behaviour may be added to the <tt class="varname">BULK_PREREQ</tt> variable.
|
||
Note that currently the only package for which
|
||
<tt class="varname">BULK_PREREQ</tt> makes sense is xpkgwedge.
|
||
</p>
|
||
</div>
|
||
<div class="sect3" lang="en">
|
||
<div class="titlepage">
|
||
<div><div><h4 class="title">
|
||
<a name="id2939736"></a>4.3.1.2. build.conf</h4></div></div>
|
||
<div></div>
|
||
</div>
|
||
<p>
|
||
In <tt class="filename">pkgsrc/mk/bulk</tt>, copy
|
||
“<span class="quote">build.conf-example</span>” to “<span class="quote">build.conf</span>” and
|
||
edit it, following the comments in that file. This is the config
|
||
file that determines where log files are generated after the build,
|
||
where to mail the build report, where your pkgsrc is located and
|
||
which user to su(8) to do a <b class="command">cvs update</b>.
|
||
</p>
|
||
</div>
|
||
<div class="sect3" lang="en">
|
||
<div class="titlepage">
|
||
<div><div><h4 class="title">
|
||
<a name="id2939767"></a>4.3.1.3. pre-build.local</h4></div></div>
|
||
<div></div>
|
||
</div>
|
||
<p>
|
||
It is possible to configure the bulk build to perform certain site
|
||
specific tasks at the end of the pre-build stage. If the file
|
||
<tt class="filename">pre-build.local</tt> exists in
|
||
<tt class="filename">/usr/pkgsrc/mk/bulk</tt> it will be executed
|
||
(as a sh(1) script) at the end of the usual pre-build stage. An
|
||
example use of <tt class="filename">pre-build.local</tt> is to have the
|
||
line:
|
||
</p>
|
||
<table xmlns:html="http://www.w3.org/1999/xhtml" class="programlisting"><tr><td><pre><tt class="prompt">#</tt> <b class="userinput"><tt>echo "I do not have enough disk space to build this pig." \
|
||
> pkgsrc/games/crafty-book-enormous/$BROKENF</tt></b></pre></td></tr></table>
|
||
<p>
|
||
to prevent the system from trying to build a particular package
|
||
which requires nearly 3 Gb of disk space.
|
||
</p>
|
||
</div>
|
||
</div>
|
||
<div class="sect2" lang="en">
|
||
<div class="titlepage">
|
||
<div><div><h3 class="title">
|
||
<a name="id2939817"></a>4.3.2. Other environmental considerations</h3></div></div>
|
||
<div></div>
|
||
</div>
|
||
<p>
|
||
As <tt class="filename">/usr/pkg</tt> will be completely deleted at the
|
||
start of bulk builds, make sure your login shell is placed somewhere
|
||
else. Either drop it into <tt class="filename">/usr/local/bin</tt>
|
||
(and adjust your login shell in the password file), or (re-)install
|
||
it via <b class="command">pkg_add</b> from
|
||
<tt class="filename">/etc/rc.local</tt>, so you can login after a reboot
|
||
(remember that your current process won't die if the package is
|
||
removed, you just can't start any new instances of the shell any more).
|
||
Also, if you use NetBSD earlier than 1.5, or you still want to use the
|
||
pkgsrc version of ssh for some reason, be sure to install ssh before
|
||
starting it from rc.local:
|
||
</p>
|
||
<table xmlns:html="http://www.w3.org/1999/xhtml" class="programlisting"><tr><td><pre>( cd /usr/pkgsrc/security/ssh ; make bulk-install )
|
||
if [ -f /usr/pkg/etc/rc.d/sshd ]; then
|
||
/usr/pkg/etc/rc.d/sshd
|
||
fi</pre></td></tr></table>
|
||
<p>
|
||
Not doing so will result in you being not able to log in via ssh
|
||
after the bulk build is finished or if the machine gets rebooted
|
||
or crashes. You have been warned! :)
|
||
</p>
|
||
</div>
|
||
<div class="sect2" lang="en">
|
||
<div class="titlepage">
|
||
<div><div><h3 class="title">
|
||
<a name="id2939943"></a>4.3.3. Operation</h3></div></div>
|
||
<div></div>
|
||
</div>
|
||
<p>
|
||
Make sure you don't need any of the packages still installed.
|
||
</p>
|
||
<div class="warning" style="margin-left: 0.5in; margin-right: 0.5in;">
|
||
<h3 class="title">Warning</h3>
|
||
During the bulk build, <span class="emphasis"><em>all packages will be
|
||
removed!</em></span>
|
||
</div>
|
||
<p>
|
||
Be sure to remove all other things that might
|
||
interfere with builds, like some libs installed in
|
||
<tt class="filename">/usr/local</tt>, etc. then become root and type:
|
||
</p>
|
||
<table xmlns:html="http://www.w3.org/1999/xhtml" class="programlisting"><tr><td><pre><tt class="prompt">#</tt> <b class="userinput"><tt>cd /usr/pkgsrc</tt></b>
|
||
<tt class="prompt">#</tt> <b class="userinput"><tt>sh mk/bulk/build</tt></b></pre></td></tr></table>
|
||
<p>
|
||
If for some reason your last build didn't complete (power failure,
|
||
system panic, ...), you can continue it by running:
|
||
</p>
|
||
<table xmlns:html="http://www.w3.org/1999/xhtml" class="programlisting"><tr><td><pre><tt class="prompt">#</tt> <b class="userinput"><tt>sh mk/bulk/build restart</tt></b></pre></td></tr></table>
|
||
<p>
|
||
At the end of the bulk run, you will get a summary via mail, and find
|
||
build logs in the directory specified by <tt class="varname">FTP</tt> in the
|
||
<tt class="filename">build.conf</tt> file.
|
||
</p>
|
||
</div>
|
||
<div class="sect2" lang="en">
|
||
<div class="titlepage">
|
||
<div><div><h3 class="title">
|
||
<a name="id2940032"></a>4.3.4. What it does</h3></div></div>
|
||
<div></div>
|
||
</div>
|
||
<p>
|
||
The bulk builds consist of three steps:
|
||
</p>
|
||
<div class="orderedlist"><ol type="1">
|
||
<li>pre-build
|
||
<p>
|
||
The script updates your pkgsrc via (anon)cvs, then cleans
|
||
out any broken distfiles, and removes all packages installed.
|
||
</p>
|
||
</li>
|
||
<li>the bulk build
|
||
<p>
|
||
This is basically “<span class="quote">make bulk-package</span>” with an optimised
|
||
order in which packages will be built. Packages that don't require
|
||
other packages will be built first, and packages with many depends
|
||
will be built later.
|
||
</p>
|
||
</li>
|
||
<li>post-build
|
||
<p>
|
||
Generates a report that's placed in the directory specified
|
||
in the <tt class="filename">build.conf</tt> file named
|
||
<tt class="filename">broken.html</tt>, a short version of
|
||
that report will also be mailed to the build's admin.
|
||
</p>
|
||
</li>
|
||
</ol></div>
|
||
<p>
|
||
During the build, a list of broken packages will be compiled in
|
||
<tt class="filename">/usr/pkgsrc/.broken</tt> (or
|
||
<tt class="filename">.../.broken.${MACHINE}</tt> if
|
||
<tt class="varname">OBJMACHINE</tt> is set),
|
||
individual build logs of broken builds can be found in the package's
|
||
directory. These files are used by the bulk-targets to mark broken builds
|
||
to not waste time trying to rebuild them, and they can be used to debug
|
||
these broken package builds later.
|
||
</p>
|
||
</div>
|
||
<div class="sect2" lang="en">
|
||
<div class="titlepage">
|
||
<div><div><h3 class="title">
|
||
<a name="id2940189"></a>4.3.5. Disk space requirements</h3></div></div>
|
||
<div></div>
|
||
</div>
|
||
<p>
|
||
Currently, roughly the following requirements are valid for
|
||
1.5/i386:
|
||
</p>
|
||
<div class="itemizedlist"><ul type="disc">
|
||
<li>1500MB - distfiles (NFS ok)</li>
|
||
<li>1000MB - full set of all binaries (NFS ok)</li>
|
||
<li>1500MB - temp space for compiling (local disk recommended)</li>
|
||
</ul></div>
|
||
<p>
|
||
For 1.5/alpha:
|
||
</p>
|
||
<div class="itemizedlist"><ul type="disc"><li>1300MB - full set of all binaries (NFS ok)</li></ul></div>
|
||
<p>
|
||
Note that all pkgs will be de-installed as soon as they are turned into a
|
||
binary package, and that work-sources are removed, so there is no huge
|
||
demand to disk space. Afterwards, if the package is needed again, it will
|
||
be installed via “<span class="quote">pkg_add</span>” instead of building again, so
|
||
there are no cycles wasted by recompiling.
|
||
</p>
|
||
</div>
|
||
<div class="sect2" lang="en">
|
||
<div class="titlepage">
|
||
<div><div><h3 class="title">
|
||
<a name="id2940316"></a>4.3.6. Setting up a sandbox for chroot'ed builds</h3></div></div>
|
||
<div></div>
|
||
</div>
|
||
<p>
|
||
If you don't want all the pkgs nuked from a machine (rendering it useless
|
||
for anything but pkg compiling), there is the possibility of doing the pkg
|
||
bulk build inside a chroot environment.
|
||
</p>
|
||
<p>
|
||
The first step to do so is setting up a chroot sandbox, e.g. <tt class="filename">/usr/sandbox</tt>.
|
||
After extracting all the sets from a NetBSD installation or doing a
|
||
<b class="command">make distribution DESTDIR=/usr/sandbox</b> in
|
||
<tt class="filename">/usr/src/etc</tt>, be sure the following
|
||
items are present and properly configured:
|
||
</p>
|
||
<div class="itemizedlist"><ul type="disc">
|
||
<li>
|
||
kernel
|
||
<p>
|
||
</p>
|
||
<table xmlns:html="http://www.w3.org/1999/xhtml" class="programlisting"><tr><td><pre><tt class="prompt">#</tt> <b class="userinput"><tt>cp /netbsd /usr/sandbox</tt></b></pre></td></tr></table>
|
||
<p>
|
||
</p>
|
||
</li>
|
||
<li>
|
||
<tt class="filename">/dev/*</tt><p>
|
||
</p>
|
||
<table xmlns:html="http://www.w3.org/1999/xhtml" class="programlisting"><tr><td><pre><tt class="prompt">#</tt> <b class="userinput"><tt>cd /usr/sandbox/dev ; sh MAKEDEV all</tt></b></pre></td></tr></table>
|
||
<p>
|
||
</p>
|
||
</li>
|
||
<li>
|
||
<tt class="filename">/etc/resolv.conf</tt> (for <a xmlns:html="http://www.w3.org/1999/xhtml" href="ftp://ftp.netbsd.org/pub/NetBSD/packages/pkgsrc/security/smtpd/README.html" class="pkgname">security/smtpd</a> and mail):
|
||
<p>
|
||
</p>
|
||
<table xmlns:html="http://www.w3.org/1999/xhtml" class="programlisting"><tr><td><pre><tt class="prompt">#</tt> <b class="userinput"><tt>cp /etc/resolv.conf /usr/sandbox/etc</tt></b></pre></td></tr></table>
|
||
<p>
|
||
</p>
|
||
</li>
|
||
<li>
|
||
working(!) mail config (hostname, sendmail.cf):
|
||
<p>
|
||
</p>
|
||
<table xmlns:html="http://www.w3.org/1999/xhtml" class="programlisting"><tr><td><pre><tt class="prompt">#</tt> <b class="userinput"><tt>cp /etc/mail/sendmail.cf /usr/sandbox/etc/mail</tt></b></pre></td></tr></table>
|
||
<p>
|
||
</p>
|
||
</li>
|
||
<li>
|
||
<tt class="filename">/etc/localtime</tt> (for <a xmlns:html="http://www.w3.org/1999/xhtml" href="ftp://ftp.netbsd.org/pub/NetBSD/packages/pkgsrc/security/smtpd/README.html" class="pkgname">security/smtpd</a>):
|
||
<p>
|
||
</p>
|
||
<table xmlns:html="http://www.w3.org/1999/xhtml" class="programlisting"><tr><td><pre><tt class="prompt">#</tt> <b class="userinput"><tt>ln -sf /usr/share/zoneinfo/GMT /usr/sandbox/etc/localtime</tt></b></pre></td></tr></table>
|
||
<p>
|
||
</p>
|
||
</li>
|
||
<li>
|
||
<tt class="filename">/usr/src</tt> (system sources, for <a xmlns:html="http://www.w3.org/1999/xhtml" href="ftp://ftp.netbsd.org/pub/NetBSD/packages/pkgsrc/sysutils/aperture/README.html" class="pkgname">sysutils/aperture</a>,
|
||
<a xmlns:html="http://www.w3.org/1999/xhtml" href="ftp://ftp.netbsd.org/pub/NetBSD/packages/pkgsrc/net/ppp-mppe/README.html" class="pkgname">net/ppp-mppe</a>):
|
||
<p>
|
||
</p>
|
||
<table xmlns:html="http://www.w3.org/1999/xhtml" class="programlisting"><tr><td><pre><tt class="prompt">#</tt> <b class="userinput"><tt>ln -s ../disk1/cvs .</tt></b>
|
||
<tt class="prompt">#</tt> <b class="userinput"><tt>ln -s cvs/src-1.6 src</tt></b>
|
||
<tt class="prompt">#</tt> <b class="userinput"><tt>ln -s cvs/pkgsrc .</tt></b></pre></td></tr></table>
|
||
<p>
|
||
</p>
|
||
</li>
|
||
<li>
|
||
create <tt class="filename">/var/db/pkg</tt> (not part of default install):
|
||
<p>
|
||
</p>
|
||
<table xmlns:html="http://www.w3.org/1999/xhtml" class="programlisting"><tr><td><pre><tt class="prompt">#</tt> <b class="userinput"><tt>mkdir /usr/sandbox/var/db/pkg</tt></b></pre></td></tr></table>
|
||
<p>
|
||
</p>
|
||
</li>
|
||
<li>
|
||
create <tt class="filename">/usr/pkg</tt> (not part of default install):
|
||
<p>
|
||
</p>
|
||
<table xmlns:html="http://www.w3.org/1999/xhtml" class="programlisting"><tr><td><pre><tt class="prompt">#</tt> <b class="userinput"><tt>mkdir /usr/sandbox/usr/pkg</tt></b></pre></td></tr></table>
|
||
<p>
|
||
</p>
|
||
</li>
|
||
<li>
|
||
checkout pkgsrc into
|
||
<tt class="filename">/usr/sandbox/usr/pkgsrc</tt>:
|
||
<p>
|
||
</p>
|
||
<table xmlns:html="http://www.w3.org/1999/xhtml" class="programlisting"><tr><td><pre><tt class="prompt">#</tt> <b class="userinput"><tt>cd /usr/sandbox/usr</tt></b>
|
||
<tt class="prompt">#</tt> <b class="userinput"><tt>cvs -d anoncvs@anoncvs.NetBSD.org:/cvsroot checkout -d -P pkgsrc</tt></b></pre></td></tr></table>
|
||
<p>
|
||
</p>
|
||
</li>
|
||
<li>
|
||
edit <tt class="filename">/etc/mk.conf</tt>, see <a href="#binary.mk.conf" title="4.3.1.1. /etc/mk.conf">Section 4.3.1.1, “/etc/mk.conf”</a>.
|
||
</li>
|
||
<li>
|
||
adjust <tt class="filename">mk/bulk/build.conf</tt> to suit your needs.
|
||
</li>
|
||
</ul></div>
|
||
<div class="note" style="margin-left: 0.5in; margin-right: 0.5in;">
|
||
<h3 class="title">Note</h3>
|
||
Don't forget to install X.
|
||
</div>
|
||
<p>
|
||
If you are a developer and want to upload the resulting binary packages
|
||
to ftp.NetBSD.org, be sure you are using the default X version for your
|
||
architecture and release (that is XFree86 3.3.6 for 1.5.x, and XFree86
|
||
4.2.1 for NetBSD 1.6.1 on <a href="../../Ports/cats/" target="_top">cats</a>,
|
||
<a href="../../Ports/i386/" target="_top">i386</a> and <a href="../../Ports/macppc/" target="_top">macppc</a> ports, 3.3.6 on all other
|
||
ports).
|
||
</p>
|
||
<p>
|
||
The next thing you need is a <span class="emphasis"><em>fresh checkout of pkgsrc</em></span>
|
||
(e.g. from anoncvs). Do not mount/link this to the copy of your pkgsrc tree
|
||
you do development in, as this will likely cause problems! Adjust
|
||
<tt class="filename">.../pkgsrc/packages</tt> and
|
||
<tt class="filename">.../pkgsrc/distfiles</tt> to point to some places
|
||
outside the sandbox if you want to make the files public.
|
||
</p>
|
||
<p>
|
||
When the chroot sandbox is setup, you can start the build with the following
|
||
steps:
|
||
</p>
|
||
<table xmlns:html="http://www.w3.org/1999/xhtml" class="programlisting"><tr><td><pre><tt class="prompt">#</tt> <b class="userinput"><tt>cd /usr/sandbox/usr/pkgsrc</tt></b>
|
||
<tt class="prompt">#</tt> <b class="userinput"><tt>sh mk/bulk/do-sandbox-build</tt></b></pre></td></tr></table>
|
||
<p>
|
||
This will just jump inside the sandbox and start building.
|
||
At the end of the build, mail will be sent with the results of the build.
|
||
Created binary pkgs will be in
|
||
<tt class="filename">/usr/sandbox/usr/pkgsrc/packages</tt> (wherever
|
||
that points/mounts to/from).
|
||
</p>
|
||
</div>
|
||
</div>
|
||
<div class="sect1" lang="en">
|
||
<div class="titlepage">
|
||
<div><div><h2 class="title" style="clear: both">
|
||
<a name="id2940945"></a>4.4. Creating a multiple CD-ROM packages collection</h2></div></div>
|
||
<div></div>
|
||
</div>
|
||
<p>
|
||
After your bulk pkgsrc build has completed, you may wish to create a CD-ROM
|
||
set of the resulting binary packages to assist in installing packages on
|
||
other machines. The <a xmlns:html="http://www.w3.org/1999/xhtml" href="ftp://ftp.netbsd.org/pub/NetBSD/packages/pkgsrc/pkgtools/cdpack/README.html" class="pkgname">pkgtools/cdpack</a> package provides a simple
|
||
tool for creating the ISO 9660 images. <b class="command">cdpack</b> arranges
|
||
the packages on the CD-ROMs in a way that keeps all the dependencies for
|
||
given package on the same CD as that package.
|
||
</p>
|
||
<div class="sect2" lang="en">
|
||
<div class="titlepage">
|
||
<div><div><h3 class="title">
|
||
<a name="id2940966"></a>4.4.1. Example of cdpack</h3></div></div>
|
||
<div></div>
|
||
</div>
|
||
<p>
|
||
Complete documentation for cdpack is found in cdpack(1). The following
|
||
short example assumes that the binary packages are left in
|
||
<tt class="filename">/usr/pkgsrc/packages/All</tt> and that sufficient disk
|
||
space exists in <tt class="filename">/u2</tt> to hold the ISO 9660 images.
|
||
</p>
|
||
<table xmlns:html="http://www.w3.org/1999/xhtml" class="programlisting"><tr><td><pre><tt class="prompt">#</tt> <b class="userinput"><tt>mkdir /u2/images</tt></b>
|
||
<tt class="prompt">#</tt> <b class="userinput"><tt>pkg_add /usr/pkgsrc/packages/All/cdpack</tt></b>
|
||
<tt class="prompt">#</tt> <b class="userinput"><tt>cdpack /usr/pkgsrc/packages/All /u2/images</tt></b></pre></td></tr></table>
|
||
<p>
|
||
If you wish to include a common set of files
|
||
(<tt class="filename">COPYRIGHT</tt>, <tt class="filename">README</tt>, etc.)
|
||
on each CD in the collection, then you need to create a directory which
|
||
contains these files. e.g.
|
||
</p>
|
||
<table xmlns:html="http://www.w3.org/1999/xhtml" class="programlisting"><tr><td><pre><tt class="prompt">#</tt> <b class="userinput"><tt>mkdir /tmp/common</tt></b>
|
||
<tt class="prompt">#</tt> <b class="userinput"><tt>echo "This is a README" > /tmp/common/README</tt></b>
|
||
<tt class="prompt">#</tt> <b class="userinput"><tt>echo "Another file" > /tmp/common/COPYING</tt></b>
|
||
<tt class="prompt">#</tt> <b class="userinput"><tt>mkdir /tmp/common/bin</tt></b>
|
||
<tt class="prompt">#</tt> <b class="userinput"><tt>echo "#!/bin/sh" > /tmp/common/bin/myscript</tt></b>
|
||
<tt class="prompt">#</tt> <b class="userinput"><tt>echo "echo Hello world" >> /tmp/common/bin/myscript</tt></b>
|
||
<tt class="prompt">#</tt> <b class="userinput"><tt>chmod 755 /tmp/common/bin/myscript</tt></b></pre></td></tr></table>
|
||
<p>
|
||
Now create the images:
|
||
</p>
|
||
<table xmlns:html="http://www.w3.org/1999/xhtml" class="programlisting"><tr><td><pre><tt class="prompt">#</tt> <b class="userinput"><tt>cdpack -x /tmp/common /usr/pkgsrc/packages/All /u2/images</tt></b></pre></td></tr></table>
|
||
<p>
|
||
Each image will contain <tt class="filename">README</tt>,
|
||
<tt class="filename">COPYING</tt>, and <tt class="filename">bin/myscript</tt>
|
||
in their root directories.
|
||
</p>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div class="part" lang="en">
|
||
<div class="titlepage">
|
||
<div><div><h1 class="title">
|
||
<a name="developers-guide"></a>pkgsrc developer's guide</h1></div></div>
|
||
<div></div>
|
||
</div>
|
||
<div class="toc">
|
||
<p><b>Table of Contents</b></p>
|
||
<dl>
|
||
<dt>5. <a href="#components">Package components - files, directories and contents</a>
|
||
</dt>
|
||
<dd><dl>
|
||
<dt>5.1. <a href="#components.Makefile">Makefile</a>
|
||
</dt>
|
||
<dt>5.2. <a href="#components.distinfo">distinfo</a>
|
||
</dt>
|
||
<dt>5.3. <a href="#components.patches">patches/*</a>
|
||
</dt>
|
||
<dt>5.4. <a href="#id2943680">Other mandatory files</a>
|
||
</dt>
|
||
<dt>5.5. <a href="#id2943718">Optional files</a>
|
||
</dt>
|
||
<dt>5.6. <a href="#id2943959">work*</a>
|
||
</dt>
|
||
<dt>5.7. <a href="#id2943990">files/*</a>
|
||
</dt>
|
||
<dt>5.8. <a href="#id2944093">Portability of packages</a>
|
||
</dt>
|
||
</dl></dd>
|
||
<dt>6. <a href="#plist">PLIST issues</a>
|
||
</dt>
|
||
<dd><dl>
|
||
<dt>6.1. <a href="#plist.misc">Miscellaneous</a>
|
||
</dt>
|
||
<dt>6.2. <a href="#id2945543">PLIST_SRC</a>
|
||
</dt>
|
||
<dt>6.3. <a href="#id2945566">PLIST_SUBST</a>
|
||
</dt>
|
||
<dt>6.4. <a href="#id2945697">Perl5 modules</a>
|
||
</dt>
|
||
<dt>6.5. <a href="#id2945836">User Interaction</a>
|
||
</dt>
|
||
</dl></dd>
|
||
<dt>7. <a href="#fixes">Notes on fixes for packages</a>
|
||
</dt>
|
||
<dd><dl>
|
||
<dt>7.1. <a href="#id2944290">CPP defines</a>
|
||
</dt>
|
||
<dt>7.2. <a href="#fixes.libtool">Shared libraries - libtool</a>
|
||
</dt>
|
||
<dt>7.3. <a href="#id2947315">Using libtool on GNU packages that already support libtool</a>
|
||
</dt>
|
||
<dt>7.4. <a href="#id2947414">GNU Autoconf/Automake</a>
|
||
</dt>
|
||
<dt>7.5. <a href="#id2947454">Package configuration files</a>
|
||
</dt>
|
||
<dt>7.6. <a href="#id2947668">Feedback to the author</a>
|
||
</dt>
|
||
</dl></dd>
|
||
<dt>8. <a href="#build">The build process</a>
|
||
</dt>
|
||
<dd><dl>
|
||
<dt>8.1. <a href="#build.prefix">Program location</a>
|
||
</dt>
|
||
<dt>8.2. <a href="#id2949108">Main targets</a>
|
||
</dt>
|
||
<dt>8.3. <a href="#build.helpful-targets">Other helpful targets</a>
|
||
</dt>
|
||
</dl></dd>
|
||
<dt>9. <a href="#buildlink2">buildlink2 methodology</a>
|
||
</dt>
|
||
<dd><dl>
|
||
<dt>9.1. <a href="#id2953172">Converting packages to use buildlink2</a>
|
||
</dt>
|
||
<dt>9.2. <a href="#id2953308">Writing buildlink2.mk files</a>
|
||
</dt>
|
||
</dl></dd>
|
||
<dt>10. <a href="#debug">Debugging</a>
|
||
</dt>
|
||
<dt>11. <a href="#features">FAQs & features of the package system</a>
|
||
</dt>
|
||
<dd><dl>
|
||
<dt>11.1. <a href="#id2952494">Packages using GNU autoconf</a>
|
||
</dt>
|
||
<dt>11.2. <a href="#id2954262">Other distrib methods than .tar.gz</a>
|
||
</dt>
|
||
<dt>11.3. <a href="#id2954307">Packages not creating their own subdirectory</a>
|
||
</dt>
|
||
<dt>11.4. <a href="#id2955763">Custom configuration process</a>
|
||
</dt>
|
||
<dt>11.5. <a href="#id2955785">Packages not building in their DISTNAME directory</a>
|
||
</dt>
|
||
<dt>11.6. <a href="#id2955896">How to fetch all distfiles at once</a>
|
||
</dt>
|
||
<dt>11.7. <a href="#id2956076">How to fetch files from behind a firewall</a>
|
||
</dt>
|
||
<dt>11.8. <a href="#id2956098">If your patch contains an RCS ID</a>
|
||
</dt>
|
||
<dt>11.9. <a href="#id2956116">How to pull in variables from /etc/mk.conf</a>
|
||
</dt>
|
||
<dt>11.10. <a href="#id2956180">Is there a mailing list for pkg-related discussion?</a>
|
||
</dt>
|
||
<dt>11.11. <a href="#id2956204">How do I tell make fetch to do passive FTP?</a>
|
||
</dt>
|
||
<dt>11.12. <a href="#id2956350">Dependencies on other packages</a>
|
||
</dt>
|
||
<dt>11.13. <a href="#id2956571">Conflicts with other packages</a>
|
||
</dt>
|
||
<dt>11.14. <a href="#id2956642">Software which has a WWW Home Page</a>
|
||
</dt>
|
||
<dt>11.15. <a href="#id2956667">How to handle modified distfiles with the 'old' name</a>
|
||
</dt>
|
||
<dt>11.16. <a href="#id2956764">What does "Don't know how to make /usr/share/tmac/tmac.andoc" mean?</a>
|
||
</dt>
|
||
<dt>11.17. <a href="#id2956809">How to handle incrementing versions when fixing an existing
|
||
package</a>
|
||
</dt>
|
||
<dt>11.18. <a href="#id2956956">Could not find bsd.own.mk - what's wrong?</a>
|
||
</dt>
|
||
<dt>11.19. <a href="#id2957027">Restricted packages</a>
|
||
</dt>
|
||
<dt>11.20. <a href="#id2957213">Packages using (n)curses</a>
|
||
</dt>
|
||
<dt>11.21. <a href="#id2957255">Automated security check</a>
|
||
</dt>
|
||
<dt>11.22. <a href="#id2957425">What's the proper way to create an account from a package?</a>
|
||
</dt>
|
||
<dt>11.23. <a href="#id2957593">How to handle compiler bugs</a>
|
||
</dt>
|
||
<dt>11.24. <a href="#features.info-files">Packages providing info files</a>
|
||
</dt>
|
||
<dt>11.25. <a href="#id2957793">Packages whose distfiles aren't available for plain downloading</a>
|
||
</dt>
|
||
<dt>11.26. <a href="#id2957953">Configuration files handling and placement</a>
|
||
</dt>
|
||
<dt>11.27. <a href="#id2958470">Packages providing login shells</a>
|
||
</dt>
|
||
<dt>11.28. <a href="#id2958558">Packages providing locale catalogues</a>
|
||
</dt>
|
||
<dt>11.29. <a href="#id2958592">Using 'sudo' with pkgsrc</a>
|
||
</dt>
|
||
<dt>11.30. <a href="#id2958621">Packages containing perl scripts</a>
|
||
</dt>
|
||
<dt>11.31. <a href="#id2958648">Packages that cannot or should not be built</a>
|
||
</dt>
|
||
</dl></dd>
|
||
<dt>12. <a href="#submit">Submitting and Committing</a>
|
||
</dt>
|
||
<dd><dl>
|
||
<dt>12.1. <a href="#id2960258">Submitting your packages</a>
|
||
</dt>
|
||
<dt>12.2. <a href="#id2961824">Committing: Importing a package into CVS</a>
|
||
</dt>
|
||
<dt>12.3. <a href="#id2962087">Updating a Package to a Newer Version</a>
|
||
</dt>
|
||
<dt>12.4. <a href="#id2962208">Moving a Package in pkgsrc</a>
|
||
</dt>
|
||
</dl></dd>
|
||
<dt>13. <a href="#examples">A simple example of a package: bison</a>
|
||
</dt>
|
||
<dd><dl>
|
||
<dt>13.1. <a href="#id2961656">files</a>
|
||
</dt>
|
||
<dt>13.2. <a href="#id2963176">Steps for building, installing, packaging</a>
|
||
</dt>
|
||
</dl></dd>
|
||
</dl>
|
||
</div>
|
||
<div class="chapter" lang="en">
|
||
<div class="titlepage">
|
||
<div><div><h2 class="title">
|
||
<a name="components"></a>Chapter 5. Package components - files, directories and contents</h2></div></div>
|
||
<div></div>
|
||
</div>
|
||
<div class="toc">
|
||
<p><b>Table of Contents</b></p>
|
||
<dl>
|
||
<dt>5.1. <a href="#components.Makefile">Makefile</a>
|
||
</dt>
|
||
<dt>5.2. <a href="#components.distinfo">distinfo</a>
|
||
</dt>
|
||
<dt>5.3. <a href="#components.patches">patches/*</a>
|
||
</dt>
|
||
<dt>5.4. <a href="#id2943680">Other mandatory files</a>
|
||
</dt>
|
||
<dt>5.5. <a href="#id2943718">Optional files</a>
|
||
</dt>
|
||
<dt>5.6. <a href="#id2943959">work*</a>
|
||
</dt>
|
||
<dt>5.7. <a href="#id2943990">files/*</a>
|
||
</dt>
|
||
<dt>5.8. <a href="#id2944093">Portability of packages</a>
|
||
</dt>
|
||
</dl>
|
||
</div>
|
||
<p>
|
||
Whenever you're preparing a package, there are a number of files
|
||
involved which are described in the following sections.
|
||
</p>
|
||
<div class="sect1" lang="en">
|
||
<div class="titlepage">
|
||
<div><div><h2 class="title" style="clear: both">
|
||
<a name="components.Makefile"></a>5.1. Makefile</h2></div></div>
|
||
<div></div>
|
||
</div>
|
||
<p>
|
||
Building, installation and creation of a binary package are all
|
||
controlled by the package's <tt class="filename">Makefile</tt>.
|
||
</p>
|
||
<p>
|
||
There is a Makefile for each package. This file includes the standard
|
||
<tt class="filename">bsd.pkg.mk</tt> file (referenced as
|
||
<tt class="filename">../../mk/bsd.pkg.mk</tt>), which sets all the
|
||
definitions and actions necessary for the package to compile and
|
||
install itself. The mandatory variables are the
|
||
<tt class="varname">DISTNAME</tt> which specifies the base name
|
||
of the distribution file to be downloaded from the site on the
|
||
Internet, <tt class="varname">MASTER_SITES</tt> which specifies that site,
|
||
<tt class="varname">CATEGORIES</tt> which denotes the
|
||
categories into which the package falls, <tt class="varname">PKGNAME</tt>
|
||
which is the name of the package, the <tt class="varname">MAINTAINER</tt>
|
||
name, and the <tt class="varname">COMMENT</tt> variable, which should
|
||
contain a one-line description of the package (the package name
|
||
should not appear, it will be added automatically). The maintainer
|
||
variable is there so that anyone who quibbles with the (always
|
||
completely correct) decisions taken by the guy who maintains the
|
||
port can complain vigorously.
|
||
</p>
|
||
<p>
|
||
The <tt class="varname">MASTER_SITES</tt> may be set to one of the
|
||
predefined sites:
|
||
</p>
|
||
<table xmlns:html="http://www.w3.org/1999/xhtml" class="programlisting"><tr><td><pre>${MASTER_SITE_XCONTRIB}
|
||
${MASTER_SITE_GNU}
|
||
${MASTER_SITE_PERL_CPAN}
|
||
${MASTER_SITE_TEX_CTAN}
|
||
${MASTER_SITE_SUNSITE}
|
||
${MASTER_SITE_GNOME}
|
||
${MASTER_SITE_SOURCEFORGE}</pre></td></tr></table>
|
||
<p>
|
||
If one of these predefined sites is chosen, you may require the
|
||
ability to specify a subdirectory of that site. Since these macros
|
||
may expand to more than one actual site, you
|
||
<span class="emphasis"><em>must</em></span> use the following construct to specify a
|
||
subdirectory:
|
||
</p>
|
||
<table xmlns:html="http://www.w3.org/1999/xhtml" class="programlisting"><tr><td><pre>${MASTER_SITE_GNU:=subdirectory/name/}</pre></td></tr></table>
|
||
<p>
|
||
Note the trailing slash after the subdirectory name.
|
||
</p>
|
||
<div class="note" style="margin-left: 0.5in; margin-right: 0.5in;">
|
||
<h3 class="title">Note</h3>
|
||
<tt class="varname">MASTER_SITE_SUBDIR</tt> has been deprecated and
|
||
<span class="emphasis"><em>should no longer be used</em></span>.
|
||
</div>
|
||
<p>
|
||
If the package has multiple <tt class="varname">DISTFILES</tt> or multiple
|
||
<tt class="varname">PATCHFILES</tt> from different
|
||
sites, set <tt class="varname">SITES_foo</tt> to a list of URI's where file
|
||
“<span class="quote">foo</span>” may be found. “<span class="quote">foo</span>”
|
||
includes the suffix, e.g.
|
||
</p>
|
||
<table xmlns:html="http://www.w3.org/1999/xhtml" class="programlisting"><tr><td><pre>DISTFILES= ${DISTNAME}${EXTRACT_SUFX}
|
||
DISTFILES+= foo-file.tar.gz
|
||
SITES_foo-file.tar.gz=http://www.somewhere.com/somehow/ \
|
||
http://www.somewhereelse.com/mirror/somehow/</pre></td></tr></table>
|
||
<p>
|
||
Note that the normal default setting of <tt class="varname">DISTFILES</tt>
|
||
must be made explicit if you want to add to it (rather than replace
|
||
it), as you usually would.
|
||
</p>
|
||
<p>
|
||
Currently the following values are available for
|
||
<tt class="varname">CATEGORIES</tt>. If more than
|
||
one is used, they need to be separated by spaces:
|
||
</p>
|
||
<table xmlns:html="http://www.w3.org/1999/xhtml" class="programlisting"><tr><td><pre>archivers audio benchmarks biology cad
|
||
chat comms converters cross databases
|
||
devel editors emulators finance fonts
|
||
games graphics ham japanese lang
|
||
mail math mbone misc net
|
||
news parallel print security shells
|
||
sysutils textproc time wm www
|
||
x11</pre></td></tr></table>
|
||
<p>
|
||
Please pay attention to the following gotchas:
|
||
</p>
|
||
<div class="itemizedlist"><ul type="disc">
|
||
<li><p>
|
||
Add <tt class="varname">MANCOMPRESSED</tt> if manpages are installed in
|
||
compressed form by the package; see comment in bsd.pkg.mk.
|
||
</p></li>
|
||
<li><p>
|
||
Replace <tt class="filename">/usr/local</tt> with
|
||
“<span class="quote">${PREFIX}</span>” in all files (see patches, below).
|
||
</p></li>
|
||
<li><p>
|
||
If the package installs any info files, see
|
||
<a href="#features.info-files" title="11.24. Packages providing info files">Section 11.24, “Packages providing info files”</a>.
|
||
</p></li>
|
||
<li><p>
|
||
Adjust <tt class="varname">MAINTAINER</tt> to be either yourself, if you plan
|
||
to maintain the package for future updates, or set it to the default
|
||
maintainer <tt class="email"><<a href="mailto:tech-pkg@NetBSD.org">tech-pkg@NetBSD.org</a>></tt>.
|
||
</p></li>
|
||
<li><p>
|
||
If there exists a home page for the software in question, please
|
||
add the variable <tt class="varname">HOMEPAGE</tt> right after
|
||
<tt class="varname">MAINTAINER</tt>. The value of this
|
||
variable should be the URL for the home page.
|
||
</p></li>
|
||
<li><p>
|
||
Be sure to set the <tt class="varname">COMMENT</tt> variable to a short
|
||
description of the package.
|
||
</p></li>
|
||
</ul></div>
|
||
</div>
|
||
<div class="sect1" lang="en">
|
||
<div class="titlepage">
|
||
<div><div><h2 class="title" style="clear: both">
|
||
<a name="components.distinfo"></a>5.2. distinfo</h2></div></div>
|
||
<div></div>
|
||
</div>
|
||
<p>
|
||
Most important, the mandatory message digest, or checksum, of all the
|
||
distfiles needed for the package to compile, confirming they match the
|
||
original file distributed by the author. This ensures that the
|
||
distfile retrieved from the Internet has not been corrupted during
|
||
transfer or altered by a malign force to introduce a security hole.
|
||
It is best generated using the <b class="command">make makesum</b> command.
|
||
The digest algorithm used was, at one stage, md5, but that was felt
|
||
lacking compared to sha1, and so sha1 is now the default algorithm.
|
||
The distfile size is also generated and stored in new distinfo files.
|
||
The <a xmlns:html="http://www.w3.org/1999/xhtml" href="ftp://ftp.netbsd.org/pub/NetBSD/packages/pkgsrc/pkgtools/digest/README.html" class="pkgname">pkgtools/digest</a> utility calculates all of the digests
|
||
in the distinfo file, and it provides various different algorithms.
|
||
At the current time, the algorithms provided are:
|
||
<span class="emphasis"><em>md5</em></span>, <span class="emphasis"><em>rmd160</em></span>,
|
||
<span class="emphasis"><em>sha1</em></span>, <span class="emphasis"><em>sha256</em></span>,
|
||
<span class="emphasis"><em>sha384</em></span> and <span class="emphasis"><em>sha512</em></span>.
|
||
</p>
|
||
<p>
|
||
Some packages have different sets of distfiles on a per architecture
|
||
basis (a good example is <a xmlns:html="http://www.w3.org/1999/xhtml" href="ftp://ftp.netbsd.org/pub/NetBSD/packages/pkgsrc/www/navigator/README.html" class="pkgname">www/navigator</a>). These are kept in the
|
||
same distinfo file and care should be taken when upgrading such a
|
||
package to ensure distfile information is not lost.
|
||
</p>
|
||
<p>
|
||
The message digest/checksum for all the official patches found in the
|
||
<tt class="filename">patches/</tt> directory (see <a href="#components.patches" title="5.3. patches/*">Section 5.3, “patches/*”</a>) for the package is also stored in
|
||
the <tt class="filename">distinfo</tt> file. This is a message
|
||
digest/checksum of all lines in the patch file except the NetBSD RCS Id.
|
||
This file is generated by invoking <b class="command">make makepatchsum</b>.
|
||
</p>
|
||
</div>
|
||
<div class="sect1" lang="en">
|
||
<div class="titlepage">
|
||
<div><div><h2 class="title" style="clear: both">
|
||
<a name="components.patches"></a>5.3. patches/*</h2></div></div>
|
||
<div></div>
|
||
</div>
|
||
<p>
|
||
This directory contains files that are used by the patch(1) command to
|
||
modify the sources as distributed in the distribution file into a form
|
||
that will compile and run perfectly on NetBSD. The files are applied
|
||
successively in alphabetic order (as returned by a shell
|
||
“<span class="quote">patches/patch-*</span>” glob expansion), so
|
||
<tt class="filename">patch-aa</tt> is applied before
|
||
<tt class="filename">patch-ab</tt>, etc.
|
||
</p>
|
||
<p>
|
||
The <tt class="filename">patch-??</tt> files should be in
|
||
<b class="command">diff -bu</b> format, and apply without a fuzz to avoid
|
||
problems (To force patches to apply
|
||
with fuzz you can set <tt class="varname">PATCH_FUZZ_FACTOR=-F2</tt>).
|
||
Furthermore, do not put changes for more than one file into a single
|
||
patch-file, as this will make future modifications more difficult.
|
||
</p>
|
||
<p>
|
||
Similar, a file should be patched at most once, not several times by
|
||
several different patches. If a file needs several patches, they should
|
||
be combined into one file.
|
||
</p>
|
||
<p>
|
||
One important thing to mention is to pay attention that no RCS IDs
|
||
get stored in the patch files, as these will cause problems when
|
||
later checked into the NetBSD CVS tree. Use the
|
||
<a xmlns:html="http://www.w3.org/1999/xhtml" href="ftp://ftp.netbsd.org/pub/NetBSD/packages/pkgsrc/pkgtools/pkgdiff/README.html" class="pkgname">pkgtools/pkgdiff</a> package to avoid these problems.
|
||
</p>
|
||
<p>
|
||
For even more automation, we recommend using mkpatches from the same
|
||
package to make a whole set of patches. You just have to backup files
|
||
before you edit them to <tt class="filename">filename.orig</tt>, e.g. with
|
||
<b class="command">cp -p filename filename.orig</b> or, easier, by using
|
||
<b class="command">pkgvi</b> from the same package. If you upgrade a package
|
||
this way, you can easily compare the new set of patches with the
|
||
previously existing one with patchdiff.
|
||
</p>
|
||
<p>
|
||
When you have finished a package, remember to generate the checksums
|
||
for the patch files by using the <b class="command">make makepatchsum</b>
|
||
command, see <a href="#components.distinfo" title="5.2. distinfo">Section 5.2, “distinfo”</a>.
|
||
</p>
|
||
<p>
|
||
If it is desired to store any patches that should not be committed into
|
||
pkgsrc, they can be kept outside the pkgsrc tree in the
|
||
<tt class="filename">$LOCALPATCHES</tt>
|
||
directory. The directory tree there is expected to have the same
|
||
“<span class="quote">category/package</span>” structure as pkgsrc, and patches are
|
||
expected to be stored inside these dirs (also known as
|
||
<tt class="filename">$LOCALPATCHES/$PKGPATH</tt>). For
|
||
example if you want to keep a private patch for
|
||
<tt class="filename">pkgsrc/graphics/png</tt>, keep
|
||
it in <tt class="filename">$LOCALPATCHES/graphics/png/mypatch</tt>. All
|
||
files in the named directory are expected to be patch files, and
|
||
<span class="emphasis"><em>they are applied after pkgsrc patches are applied</em></span>.
|
||
</p>
|
||
</div>
|
||
<div class="sect1" lang="en">
|
||
<div class="titlepage">
|
||
<div><div><h2 class="title" style="clear: both">
|
||
<a name="id2943680"></a>5.4. Other mandatory files</h2></div></div>
|
||
<div></div>
|
||
</div>
|
||
<div class="itemizedlist"><ul type="disc">
|
||
<li>
|
||
<tt class="filename">DESCR</tt><p>
|
||
A multi-line description of the piece of software. This should include
|
||
any credits where they are due. Please bear in mind that others do not
|
||
share your sense of humour (or spelling idiosyncrasies), and that others
|
||
will read everything that you write here.
|
||
</p>
|
||
</li>
|
||
<li>
|
||
<tt class="filename">PLIST</tt><p>
|
||
This file governs the files that are installed on your system: all the
|
||
binaries, manual pages, etc. There are other directives which may be
|
||
entered in this file, to control the creation and deletion of
|
||
directories, and the location of inserted files.
|
||
</p>
|
||
</li>
|
||
</ul></div>
|
||
</div>
|
||
<div class="sect1" lang="en">
|
||
<div class="titlepage">
|
||
<div><div><h2 class="title" style="clear: both">
|
||
<a name="id2943718"></a>5.5. Optional files</h2></div></div>
|
||
<div></div>
|
||
</div>
|
||
<div class="itemizedlist"><ul type="disc">
|
||
<li>
|
||
<tt class="filename">INSTALL</tt><p>
|
||
Shell script invoked twice during pkg_add. First time after package
|
||
extraction and before files are moved in place, the second time after
|
||
the files to install are moved in place. This can be used to do any
|
||
custom procedures not possible with @exec commands in
|
||
<tt class="filename">PLIST</tt>. See
|
||
pkg_add(1) and pkg_create(1) for more information.
|
||
</p>
|
||
</li>
|
||
<li>
|
||
<tt class="filename">DEINSTALL</tt><p>
|
||
This script is executed before and after any files are removed. It is
|
||
this script's responsibility to clean up any additional messy details
|
||
around the package's installation, since all pkg_delete knows is how to
|
||
delete the files created in the original distribution. See pkg_delete(1)
|
||
and pkg_create(1) for more information.
|
||
</p>
|
||
</li>
|
||
<li>
|
||
<tt class="filename">MESSAGE</tt><p>
|
||
Display this file after installation of the package.
|
||
Useful for things like legal notices on almost-free software, etc.
|
||
Please note that you can modify variables in it easily by using
|
||
<tt class="varname">MESSAGE_SUBST</tt> in the package's Makefile:
|
||
</p>
|
||
<table xmlns:html="http://www.w3.org/1999/xhtml" class="programlisting"><tr><td><pre>MESSAGE_SUBST+= SOMEVAR="somevalue"</pre></td></tr></table>
|
||
<p>
|
||
replaces "${SOMEVAR}" with “<span class="quote">somevalue</span>” in
|
||
<tt class="filename">MESSAGE</tt>.
|
||
</p>
|
||
</li>
|
||
</ul></div>
|
||
</div>
|
||
<div class="sect1" lang="en">
|
||
<div class="titlepage">
|
||
<div><div><h2 class="title" style="clear: both">
|
||
<a name="id2943959"></a>5.6. <tt class="filename">work*</tt></h2></div></div>
|
||
<div></div>
|
||
</div>
|
||
<p>
|
||
When you type <b class="command">make</b> the distribution files are
|
||
unpacked into this directory. It can be removed by running
|
||
<b class="command">make clean</b>.
|
||
</p>
|
||
<p>
|
||
This directory is also used to keep various timestamp files.
|
||
</p>
|
||
</div>
|
||
<div class="sect1" lang="en">
|
||
<div class="titlepage">
|
||
<div><div><h2 class="title" style="clear: both">
|
||
<a name="id2943990"></a>5.7. <tt class="filename">files/*</tt></h2></div></div>
|
||
<div></div>
|
||
</div>
|
||
<p>
|
||
If you have any files that you wish to be placed in the package prior
|
||
to configuration or building, you could place these files here and use
|
||
a “<span class="quote">${CP}</span>” command in the pre-configure target to achieve
|
||
this. Alternatively, you could simply diff the file against
|
||
<tt class="filename">/dev/null</tt> and use the patch mechanism to manage
|
||
the creation of this file.
|
||
</p>
|
||
</div>
|
||
<div class="sect1" lang="en">
|
||
<div class="titlepage">
|
||
<div><div><h2 class="title" style="clear: both">
|
||
<a name="id2944093"></a>5.8. Portability of packages</h2></div></div>
|
||
<div></div>
|
||
</div>
|
||
<p>
|
||
One appealing feature of pkgsrc is that it runs on many different
|
||
platforms. As a result, it is important to ensure, where possible,
|
||
that packages in pkgsrc are portable. There are some particular
|
||
details you should pay attention to while working on pkgsrc.
|
||
</p>
|
||
<div class="sect2" lang="en">
|
||
<div class="titlepage">
|
||
<div><div><h3 class="title">
|
||
<a name="id2944103"></a>5.8.1. ${INSTALL}, ${INSTALL_DATA_DIR}, ...</h3></div></div>
|
||
<div></div>
|
||
</div>
|
||
<p>
|
||
The BSD-compatible <b class="command">install</b> supplied with some
|
||
operating systems will not perform more than one operation at a time.
|
||
As such, you should call “<span class="quote">${INSTALL}</span>”, etc. like this:
|
||
</p>
|
||
<table xmlns:html="http://www.w3.org/1999/xhtml" class="programlisting"><tr><td><pre>${INSTALL_DATA_DIR} ${PREFIX}/dir1
|
||
${INSTALL_DATA_DIR} ${PREFIX}/dir2</pre></td></tr></table>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div class="chapter" lang="en">
|
||
<div class="titlepage">
|
||
<div><div><h2 class="title">
|
||
<a name="plist"></a>Chapter 6. PLIST issues</h2></div></div>
|
||
<div></div>
|
||
</div>
|
||
<div class="toc">
|
||
<p><b>Table of Contents</b></p>
|
||
<dl>
|
||
<dt>6.1. <a href="#plist.misc">Miscellaneous</a>
|
||
</dt>
|
||
<dt>6.2. <a href="#id2945543">PLIST_SRC</a>
|
||
</dt>
|
||
<dt>6.3. <a href="#id2945566">PLIST_SUBST</a>
|
||
</dt>
|
||
<dt>6.4. <a href="#id2945697">Perl5 modules</a>
|
||
</dt>
|
||
<dt>6.5. <a href="#id2945836">User Interaction</a>
|
||
</dt>
|
||
</dl>
|
||
</div>
|
||
<p>
|
||
This section addresses some special issues that one needs to pay attention
|
||
to when dealing with the <tt class="filename">PLIST</tt> file (or files, see below!).
|
||
</p>
|
||
<div class="sect1" lang="en">
|
||
<div class="titlepage">
|
||
<div><div><h2 class="title" style="clear: both">
|
||
<a name="plist.misc"></a>6.1. Miscellaneous</h2></div></div>
|
||
<div></div>
|
||
</div>
|
||
<div class="itemizedlist"><ul type="disc">
|
||
<li>
|
||
<p>NetBSD RCS Id</p>
|
||
<p>
|
||
Be sure to add a RCS ID line as the first thing in any
|
||
<tt class="filename">PLIST</tt> file you write:
|
||
</p>
|
||
<p>
|
||
</p>
|
||
<table xmlns:html="http://www.w3.org/1999/xhtml" class="programlisting"><tr><td><pre>@comment $NetBSD: pkgsrc.html,v 1.2 2003/06/23 07:49:44 grant Exp $</pre></td></tr></table>
|
||
<p>
|
||
</p>
|
||
</li>
|
||
<li>
|
||
<p>${MACHINE_ARCH}, ${MACHINE_GNU_ARCH}</p>
|
||
<p>
|
||
Some packages like emacs and perl embed information about which
|
||
architecture they were built on into the pathnames where they install
|
||
their file. To handle this case, PLIST will be preprocessed before
|
||
actually used, and the symbol "${MACHINE_ARCH}" will be replaced by
|
||
what <b class="command">uname -p</b> gives. The same is done if the string
|
||
${MACHINE_GNU_ARCH} is embedded in PLIST somewhere - use this on
|
||
packages that have GNU autoconf created configure scripts.
|
||
</p>
|
||
<p>
|
||
Legacy note: There used to be a symbol "<$ARCH>" that was replaced by
|
||
the output of <b class="command">uname -m</b>, but that's no longer supported
|
||
and has been removed.
|
||
</p>
|
||
</li>
|
||
<li>
|
||
<p>${OPSYS}, ${LOWER_OPSYS}, ${OS_VERSION}</p>
|
||
<p>
|
||
Some packages want to embed the OS name and version into some paths.
|
||
To do this, use these variables in the <tt class="filename">PLIST</tt>:
|
||
</p>
|
||
<div class="itemizedlist"><ul type="circle">
|
||
<li>${OPSYS} - output of "uname -s"</li>
|
||
<li>${LOWER_OPSYS} - lowercase common name (eg. "solaris")</li>
|
||
<li>${OS_VERSION} - "uname -r"</li>
|
||
</ul></div>
|
||
</li>
|
||
<li>
|
||
<p>${PKGLOCALEDIR}</p>
|
||
<p>
|
||
Packages that install locale files should list them in the PLIST as
|
||
“<span class="quote">${PKGLOCALEDIR}/locale/de/LC_MESSAGES/...</span>” instead of
|
||
“<span class="quote">share/locale/de/LC_MESSAGES/...</span>”. This properly handles
|
||
the fact that different OS's expect locale files to be either in
|
||
<tt class="filename">share</tt> or <tt class="filename">lib</tt> by default.
|
||
</p>
|
||
</li>
|
||
<li>
|
||
<p>Manpage-compression</p>
|
||
<p>
|
||
Manpages should be installed in compressed form if
|
||
<tt class="varname">MANZ</tt> is set (in <tt class="filename">bsd.own.mk</tt>),
|
||
and uncompressed otherwise. To handle this in the
|
||
<tt class="filename">PLIST</tt> file, the suffix “<span class="quote">.gz</span>” is
|
||
appended/removed automatically for manpages according to
|
||
<tt class="varname">MANZ</tt> and <tt class="varname">MANCOMPRESSED</tt> being set
|
||
or not, see above for details. This modification of the
|
||
<tt class="filename">PLIST</tt> file is done on a copy of it, not
|
||
<tt class="filename">PLIST</tt> itself.
|
||
</p>
|
||
</li>
|
||
<li>
|
||
<p>Platform specific and differing PLISTs</p>
|
||
<p>
|
||
Some packages decide to install a different set of files based on
|
||
the operating system being used. These differences can be
|
||
automatically handled by using the following files:
|
||
</p>
|
||
<div class="itemizedlist"><ul type="circle">
|
||
<li><tt class="filename">PLIST.common</tt></li>
|
||
<li><tt class="filename">PLIST.${OPSYS}</tt></li>
|
||
<li><tt class="filename">PLIST.common_end</tt></li>
|
||
</ul></div>
|
||
<p>
|
||
If <tt class="filename">PLIST.${OPSYS}</tt> exists, these files are used
|
||
instead of <tt class="filename">PLIST</tt>. This allows packages which
|
||
behave in this way to be handled gracefully. Manually overriding
|
||
<tt class="varname">PLIST_SRC</tt> for other more exotic uses is also
|
||
possible.
|
||
</p>
|
||
</li>
|
||
<li>
|
||
<p>Semi-automatic <tt class="filename">PLIST</tt> generation</p>
|
||
<p>
|
||
You can use the <b class="command">make print-PLIST</b> command to output
|
||
a PLIST that matches any new files since the package was extracted.
|
||
See below for more information on this target.
|
||
</p>
|
||
</li>
|
||
</ul></div>
|
||
</div>
|
||
<div class="sect1" lang="en">
|
||
<div class="titlepage">
|
||
<div><div><h2 class="title" style="clear: both">
|
||
<a name="id2945543"></a>6.2. PLIST_SRC</h2></div></div>
|
||
<div></div>
|
||
</div>
|
||
<p>
|
||
To use one or more files as source for the <tt class="filename">PLIST</tt> used
|
||
in generating the binary package, set the variable
|
||
<tt class="varname">PLIST_SRC</tt> to the names of that file(s).
|
||
The files are later concatenated using cat(1), and order of things is
|
||
important.
|
||
</p>
|
||
</div>
|
||
<div class="sect1" lang="en">
|
||
<div class="titlepage">
|
||
<div><div><h2 class="title" style="clear: both">
|
||
<a name="id2945566"></a>6.3. PLIST_SUBST</h2></div></div>
|
||
<div></div>
|
||
</div>
|
||
<p>
|
||
Similar to <tt class="varname">MESSAGE_SUBST</tt> (see above), you can add
|
||
variables and their expansions to this variable in the following way:
|
||
</p>
|
||
<table xmlns:html="http://www.w3.org/1999/xhtml" class="programlisting"><tr><td><pre>PLIST_SUBST+= SOMEVAR="somevalue"</pre></td></tr></table>
|
||
<p>
|
||
which replaces all occurrences of “<span class="quote">${SOMEVAR}</span>” in the
|
||
<tt class="filename">PLIST</tt> with “<span class="quote">somevalue</span>”.
|
||
For the values which are replaced by default, please look in
|
||
<tt class="filename">bsd.pkg.mk</tt> (and search for
|
||
<span class="emphasis"><em>PLIST_SUBST</em></span>).
|
||
</p>
|
||
</div>
|
||
<div class="sect1" lang="en">
|
||
<div class="titlepage">
|
||
<div><div><h2 class="title" style="clear: both">
|
||
<a name="id2945697"></a>6.4. Perl5 modules</h2></div></div>
|
||
<div></div>
|
||
</div>
|
||
<p>
|
||
Makefile of packages providing perl5 modules should include the
|
||
makefile fragment <tt class="filename">lang/perl5/module.mk</tt>. It provides
|
||
a do-configure
|
||
target for the standard perl configuration for such modules as well
|
||
as various hooks to tune this configuration. See comments in this
|
||
file for details.
|
||
</p>
|
||
<p>
|
||
Perl5 modules will install into different places depending on the version
|
||
of perl used during the build process. To address this, the NetBSD
|
||
packages system will append lines to the <tt class="filename">PLIST</tt>
|
||
corresponding to the files
|
||
listed in the installed .packlist file generated by most perl5 modules.
|
||
This is invoked by defining <tt class="varname">PERL5_PACKLIST</tt> to a
|
||
space-separated list of paths to packlist files:
|
||
</p>
|
||
<table xmlns:html="http://www.w3.org/1999/xhtml" class="programlisting"><tr><td><pre>PERL5_PACKLIST= ${PERL5_SITEARCH}/auto/Pg/.packlist</pre></td></tr></table>
|
||
<p>
|
||
The variables <tt class="varname">PERL5_SITELIB</tt>,
|
||
<tt class="varname">PERL5_SITEARCH</tt>, and <tt class="varname">PERL5_ARCHLIB</tt>
|
||
represent the three locations in which perl5 modules may be installed, and
|
||
may be used by perl5 packages that don't have a packlist. These three
|
||
variables are also substituted for in the <tt class="filename">PLIST</tt>.
|
||
</p>
|
||
</div>
|
||
<div class="sect1" lang="en">
|
||
<div class="titlepage">
|
||
<div><div><h2 class="title" style="clear: both">
|
||
<a name="id2945836"></a>6.5. User Interaction</h2></div></div>
|
||
<div></div>
|
||
</div>
|
||
<p>
|
||
Occasionally, packages require interaction from the user, and this can be
|
||
in a number of ways:
|
||
</p>
|
||
<div class="itemizedlist"><ul type="disc">
|
||
<li>help in fetching the distfiles</li>
|
||
<li>help to configure the package before it is built</li>
|
||
<li>help during the build process</li>
|
||
<li>help during the installation of a package</li>
|
||
</ul></div>
|
||
<p>
|
||
The <tt class="varname">INTERACTIVE_STAGE</tt> definition is provided to notify
|
||
the pkgsrc mechanism of an interactive stage which will be needed, and
|
||
this should be set in the package's <tt class="filename">Makefile</tt>. e.g.
|
||
</p>
|
||
<table xmlns:html="http://www.w3.org/1999/xhtml" class="programlisting"><tr><td><pre>INTERACTIVE_STAGE= build</pre></td></tr></table>
|
||
<p>
|
||
Multiple interactive stages can be specified:
|
||
</p>
|
||
<table xmlns:html="http://www.w3.org/1999/xhtml" class="programlisting"><tr><td><pre>INTERACTIVE_STAGE= configure install</pre></td></tr></table>
|
||
</div>
|
||
</div>
|
||
<div class="chapter" lang="en">
|
||
<div class="titlepage">
|
||
<div><div><h2 class="title">
|
||
<a name="fixes"></a>Chapter 7. Notes on fixes for packages</h2></div></div>
|
||
<div></div>
|
||
</div>
|
||
<div class="toc">
|
||
<p><b>Table of Contents</b></p>
|
||
<dl>
|
||
<dt>7.1. <a href="#id2944290">CPP defines</a>
|
||
</dt>
|
||
<dt>7.2. <a href="#fixes.libtool">Shared libraries - libtool</a>
|
||
</dt>
|
||
<dt>7.3. <a href="#id2947315">Using libtool on GNU packages that already support libtool</a>
|
||
</dt>
|
||
<dt>7.4. <a href="#id2947414">GNU Autoconf/Automake</a>
|
||
</dt>
|
||
<dt>7.5. <a href="#id2947454">Package configuration files</a>
|
||
</dt>
|
||
<dt>7.6. <a href="#id2947668">Feedback to the author</a>
|
||
</dt>
|
||
</dl>
|
||
</div>
|
||
<div class="sect1" lang="en">
|
||
<div class="titlepage">
|
||
<div><div><h2 class="title" style="clear: both">
|
||
<a name="id2944290"></a>7.1. CPP defines</h2></div></div>
|
||
<div></div>
|
||
</div>
|
||
<p>
|
||
To port an application to NetBSD, it's usually necessary for the
|
||
compiler to be able to judge the system on which it's compiling, and
|
||
we use definitions so that the C pre-processor can do this.
|
||
</p>
|
||
<p>
|
||
To test whether you are working on a 4.4 BSD-derived system, you
|
||
should use the BSD definition, which is defined in
|
||
<tt class="filename"><sys/param.h></tt> on said systems.
|
||
</p>
|
||
<table xmlns:html="http://www.w3.org/1999/xhtml" class="programlisting"><tr><td><pre>#include <sys/param.h></pre></td></tr></table>
|
||
<p>
|
||
and then you can surround the BSD-specific parts of your port using
|
||
the conditional:
|
||
</p>
|
||
<table xmlns:html="http://www.w3.org/1999/xhtml" class="programlisting"><tr><td><pre>#if (defined(BSD) && BSD >= 199306)
|
||
...
|
||
#endif</pre></td></tr></table>
|
||
<p>
|
||
Please use the “<span class="quote">__NetBSD__</span>” definition sparingly - it
|
||
should only apply to features of NetBSD that are not present in other
|
||
4.4-lite derived BSDs.
|
||
</p>
|
||
</div>
|
||
<div class="sect1" lang="en">
|
||
<div class="titlepage">
|
||
<div><div><h2 class="title" style="clear: both">
|
||
<a name="fixes.libtool"></a>7.2. Shared libraries - libtool</h2></div></div>
|
||
<div></div>
|
||
</div>
|
||
<p>
|
||
pkgsrc supports many different machines, with different object formats
|
||
like a.out and ELF, and varying abilities to do shared library and
|
||
dynamic loading at all. To accompany this, varying commands and options
|
||
have to be passed to the compiler, linker, etc. to get the Right Thing,
|
||
which can be pretty annoying especially if you don't have all the
|
||
machines at your hand to test things. The <a xmlns:html="http://www.w3.org/1999/xhtml" href="ftp://ftp.netbsd.org/pub/NetBSD/packages/pkgsrc/devel/libtool/README.html" class="pkgname">devel/libtool</a> pkg
|
||
can help here, as it just “<span class="quote">knows</span>” how to build both static
|
||
and dynamic libraries from a set of source files, thus being platform
|
||
independent.
|
||
</p>
|
||
<p>
|
||
Here's how to use libtool in a pkg in seven simple steps:
|
||
</p>
|
||
<div class="orderedlist"><ol type="1">
|
||
<li><p>
|
||
Add <tt class="varname">USE_LIBTOOL=yes</tt> to the package Makefile.
|
||
</p></li>
|
||
<li><p>
|
||
For library objects, use “<span class="quote">${LIBTOOL} --mode=compile
|
||
${CC}</span>” in place of “<span class="quote">${CC}</span>”. You could even
|
||
add it to the definition of <tt class="varname">CC</tt>, if only
|
||
libraries are being built in a given Makefile. This one command
|
||
will build both PIC and non-PIC library objects, so you need not
|
||
have separate shared and non-shared library rules.
|
||
</p></li>
|
||
<li>
|
||
<p>
|
||
For the linking of the library, remove any “<span class="quote">ar</span>”,
|
||
“<span class="quote">ranlib</span>”, and “<span class="quote">ld -Bshareable</span>” commands,
|
||
and use instead:
|
||
</p>
|
||
<table xmlns:html="http://www.w3.org/1999/xhtml" class="programlisting"><tr><td><pre>${LIBTOOL} --mode=link ${CC} -o ${.TARGET:.a=.la} ${OBJS:.o=.lo} -rpath ${PREFIX}/lib -version-info major:minor</pre></td></tr></table>
|
||
<p>
|
||
Note that the library is changed to have a <tt class="filename">.la</tt>
|
||
extension, and the objects are changed to have a
|
||
<tt class="filename">.lo</tt> extension. Change <tt class="varname">OBJS</tt>
|
||
as necessary. This automatically creates all of the
|
||
<tt class="filename">.a</tt>, <tt class="filename">.so.major.minor</tt>,
|
||
and ELF symlinks (if necessary) in the build directory. Be sure
|
||
to include “<span class="quote">-version-info</span>”, especially when major
|
||
and minor are zero, as libtool will otherwise strip off the
|
||
shared library version.
|
||
</p>
|
||
<p>
|
||
The “<span class="quote">-release</span>” option will produce different results for
|
||
a.out and ELF (excluding symlinks) in only one case. An ELF library of
|
||
the form
|
||
“<span class="quote">libfoo-release.so.<span class="emphasis"><em>x</em></span>.<span class="emphasis"><em>y</em></span></span>”
|
||
will have a symlink of
|
||
“<span class="quote">libfoo.so.<span class="emphasis"><em>x</em></span>.<span class="emphasis"><em>y</em></span></span>”
|
||
on an a.out platform. This is handled automatically.
|
||
</p>
|
||
<p>
|
||
The “<span class="quote">-rpath argument</span>” is the install directory of the
|
||
library being built.
|
||
</p>
|
||
<p>
|
||
In the <tt class="filename">PLIST</tt>, include all of the
|
||
<tt class="filename">.a</tt>, <tt class="filename">.la</tt>, and
|
||
<tt class="filename">.so</tt>,
|
||
<tt class="filename">.so.<span class="emphasis"><em>major</em></span></tt> and
|
||
<tt class="filename">.so.<span class="emphasis"><em>major</em></span>.<span class="emphasis"><em>minor</em></span></tt>
|
||
files.
|
||
</p>
|
||
</li>
|
||
<li>
|
||
<p>
|
||
When linking shared object (<tt class="filename">.so</tt>) files,
|
||
i.e. files that are loaded via dlopen(3), NOT shared libraries,
|
||
use “<span class="quote">-module -avoid-version</span>” to prevent them
|
||
getting version tacked on.
|
||
</p>
|
||
<p>
|
||
<tt class="filename">PLIST</tt> gets the <tt class="filename">foo.so</tt>
|
||
entry.
|
||
</p>
|
||
</li>
|
||
<li>
|
||
<p>
|
||
When linking programs that depend on these libraries
|
||
<span class="emphasis"><em>before</em></span> they are installed, preface the
|
||
<b class="command">cc</b> or <b class="command">ld</b> line with
|
||
“<span class="quote">${LIBTOOL} --mode=link</span>”, and
|
||
it will find the correct libraries (static or shared), but
|
||
please be aware that libtool will not allow you to specify
|
||
a relative path in -L (such as “<span class="quote">-L../somelib</span>”),
|
||
because it expects you to change that argument to be the
|
||
<tt class="filename">.la</tt> file. e.g.
|
||
</p>
|
||
<div class="informalexample"><table xmlns:html="http://www.w3.org/1999/xhtml" class="programlisting"><tr><td><pre>${LIBTOOL} --mode=link ${CC} -o someprog -L../somelib -lsomelib</pre></td></tr></table></div>
|
||
<p>
|
||
should be changed to:
|
||
</p>
|
||
<table xmlns:html="http://www.w3.org/1999/xhtml" class="programlisting"><tr><td><pre>${LIBTOOL} --mode=link ${CC} -o someprog ../somelib/somelib.la</pre></td></tr></table>
|
||
<p>
|
||
and it will do the right thing with the libraries.
|
||
</p>
|
||
</li>
|
||
<li>
|
||
<p>
|
||
When installing libraries, preface the <b class="command">install</b>
|
||
or <b class="command">cp</b> command with
|
||
“<span class="quote">${LIBTOOL} --mode=install</span>”, and change the library
|
||
name to <tt class="filename">.la</tt>. e.g.
|
||
</p>
|
||
<div class="informalexample"><table xmlns:html="http://www.w3.org/1999/xhtml" class="programlisting"><tr><td><pre>${LIBTOOL} --mode=install ${BSD_INSTALL_DATA} ${SOMELIB:.a=.la} ${PREFIX}/lib</pre></td></tr></table></div>
|
||
<p>
|
||
This will install the static <tt class="filename">.a</tt>, shared
|
||
library, any needed symlinks, and run <b class="command">ldconfig</b>.
|
||
</p>
|
||
</li>
|
||
</ol></div>
|
||
</div>
|
||
<div class="sect1" lang="en">
|
||
<div class="titlepage">
|
||
<div><div><h2 class="title" style="clear: both">
|
||
<a name="id2947315"></a>7.3. Using libtool on GNU packages that already support libtool</h2></div></div>
|
||
<div></div>
|
||
</div>
|
||
<p>
|
||
Add <tt class="varname">USE_LIBTOOL=yes</tt> and
|
||
<tt class="varname">LTCONFIG_OVERRIDE=${WRKSRC}/ltconfig</tt> to the
|
||
package Makefile as the quick way to bypass the pkg's own
|
||
<span class="emphasis"><em>libtool</em></span>. The pkg's own
|
||
<span class="emphasis"><em>libtool</em></span> is created by ltconfig script at
|
||
do-configure target. If <tt class="varname">USE_LIBTOOL</tt> and
|
||
<tt class="varname">LTCONFIG_OVERRIDE</tt> are defined, the specified
|
||
ltconfig is overridden, using <a xmlns:html="http://www.w3.org/1999/xhtml" href="ftp://ftp.netbsd.org/pub/NetBSD/packages/pkgsrc/devel/libtool/README.html" class="pkgname">devel/libtool</a> instead of
|
||
the pkg's own libtool. For newer versions of libtool (without
|
||
ltconfig) it may be necessary to use
|
||
<tt class="varname">LIBTOOL_OVERRIDE=${WRKSRC}/libtool</tt> instead.
|
||
</p>
|
||
<p>
|
||
If your package makes use of the platform independent library
|
||
for loading dynamic shared objects, that comes with libtool
|
||
(libltdl), you should include the libtool buildlink2.mk (and
|
||
set <tt class="varname">USE_BUILDLINK2=YES</tt>).
|
||
</p>
|
||
<p>
|
||
Some packages use libtool incorrectly so that the package may not work or
|
||
build in some circumstances. Some of the more common errors are:
|
||
</p>
|
||
<div class="itemizedlist"><ul type="disc">
|
||
<li>
|
||
The inclusion of a shared object (-module) as a dependent library in an
|
||
executable or library. This in itself isn't a problem if one of two things
|
||
has been done:
|
||
<div class="orderedlist"><ol type="1">
|
||
<li>The shared object is named correctly, i.e.
|
||
<tt class="filename">libfoo.la</tt>, not
|
||
<tt class="filename">foo.la</tt>
|
||
</li>
|
||
<li>The -dlopen option is used when linking an executable.</li>
|
||
</ol></div>
|
||
</li>
|
||
<li>
|
||
The use of libltdl without the correct calls to initialisation routines.
|
||
The function lt_dlinit() should be called and the macro
|
||
LTDL_SET_PRELOADED_SYMBOLS included in executables.
|
||
</li>
|
||
</ul></div>
|
||
</div>
|
||
<div class="sect1" lang="en">
|
||
<div class="titlepage">
|
||
<div><div><h2 class="title" style="clear: both">
|
||
<a name="id2947414"></a>7.4. GNU Autoconf/Automake</h2></div></div>
|
||
<div></div>
|
||
</div>
|
||
<p>
|
||
If a package needs GNU autoconf or automake to be executed
|
||
to regenerate the configure script and Makefile.in makefile
|
||
templates, then they should be executed in a pre-configure
|
||
target. Two Makefile fragments are provided in
|
||
pkgsrc/mk/autoconf.mk and pkgsrc/mk/automake.mk to help
|
||
dealing with these tools. See comments in these files for
|
||
details.
|
||
</p>
|
||
<p>
|
||
For packages that need only autoconf:
|
||
</p>
|
||
<table xmlns:html="http://www.w3.org/1999/xhtml" class="programlisting"><tr><td><pre>AUTOCONF_REQD= 2.50 # if default version is not good enough
|
||
...
|
||
|
||
pre-configure:
|
||
cd ${WRKSRC}; ${AUTOCONF}
|
||
|
||
...
|
||
.include "../../mk/autoconf.mk"</pre></td></tr></table>
|
||
<p>
|
||
and for packages that need automake and autoconf:
|
||
</p>
|
||
<table xmlns:html="http://www.w3.org/1999/xhtml" class="programlisting"><tr><td><pre>AUTOMAKE_REQD= 1.7.1 # if default version is not good enough
|
||
...
|
||
|
||
pre-configure:
|
||
cd ${WRKSRC}; \
|
||
${ACLOCAL}; \
|
||
${AUTOHEADER}; \
|
||
${AUTOMAKE} -a --foreign -i; \
|
||
${AUTOCONF}
|
||
|
||
...
|
||
.include "../mk/automake.mk"</pre></td></tr></table>
|
||
<p>
|
||
There are times when the configure process makes additional
|
||
changes to the generated files, which then causes the build
|
||
process to try to re-execute the automake sequence. This is
|
||
prevented by touching various files in the configure stage. If
|
||
this causes problems with your package you can set
|
||
<tt class="varname">AUTOMAKE_OVERRIDE=NO</tt> in the package
|
||
Makefile.
|
||
</p>
|
||
</div>
|
||
<div class="sect1" lang="en">
|
||
<div class="titlepage">
|
||
<div><div><h2 class="title" style="clear: both">
|
||
<a name="id2947454"></a>7.5. Package configuration files</h2></div></div>
|
||
<div></div>
|
||
</div>
|
||
<p>
|
||
Packages should be taught to look for their configuration
|
||
files in <tt class="varname">${PKG_SYSCONFDIR}</tt>, which is passed
|
||
through to the configure and build processes.
|
||
<tt class="varname">PKG_SYSCONFDIR</tt> may be customized in various
|
||
ways by setting other make variables:
|
||
</p>
|
||
<div class="itemizedlist"><ul type="disc">
|
||
<li><p>
|
||
<tt class="varname">PKG_SYSCONFBASE</tt> is the main config directory
|
||
under which all package configuration files are to be found.
|
||
This defaults to <tt class="filename">${PREFIX}/etc</tt>, but may
|
||
be overridden in <tt class="filename">/etc/mk.conf</tt>.
|
||
</p></li>
|
||
<li><p>
|
||
<tt class="varname">PKG_SYSCONFSUBDIR</tt> is the subdirectory of
|
||
<tt class="varname">PKG_SYSCONFBASE</tt> under which the
|
||
configuration files for a particular package may be found, e.g.
|
||
the Apache configuration files may all be found under the
|
||
<tt class="filename">httpd/</tt> subdirectory of
|
||
<tt class="varname">${PKG_SYSCONFBASE}</tt>. This should be set in
|
||
the package Makefile.
|
||
</p></li>
|
||
<li><p>
|
||
By default,
|
||
<tt class="varname">PKG_SYSCONFDIR=${PKG_SYSCONFBASE}/${PKG_SYSCONFSUBDIR}</tt>,
|
||
but this may be overridden by setting
|
||
<tt class="varname">PKG_SYSCONFDIR.${PKG_SYSCONFVAR}</tt> for a
|
||
particular package, where <tt class="varname">PKG_SYSCONFVAR</tt>
|
||
defaults to <tt class="varname">${PKGBASE}</tt>. This is not meant to
|
||
be set by a package Makefile, but is reserved for users who wish
|
||
to override the <tt class="varname">PKG_SYSCONFDIR</tt> setting for
|
||
a particular package with a special location.
|
||
</p></li>
|
||
</ul></div>
|
||
<p>
|
||
The only variables that users should customize are
|
||
<tt class="varname">PKG_SYSCONFBASE</tt> and
|
||
<tt class="varname">PKG_SYSCONFDIR.${PKG_SYSCONFVAR}</tt>.
|
||
Users will typically want to set
|
||
<tt class="varname">PKG_SYSCONFBASE</tt> to
|
||
<tt class="filename">/etc</tt>, or to accept the default location
|
||
of <tt class="filename">${PREFIX}/etc</tt>.
|
||
</p>
|
||
</div>
|
||
<div class="sect1" lang="en">
|
||
<div class="titlepage">
|
||
<div><div><h2 class="title" style="clear: both">
|
||
<a name="id2947668"></a>7.6. Feedback to the author</h2></div></div>
|
||
<div></div>
|
||
</div>
|
||
<p>
|
||
If you have found any bugs in the package you make available,
|
||
if you had to do special steps to make it run under NetBSD or
|
||
if you enhanced the software in various other ways, be sure
|
||
to report these changes back to the original author of the
|
||
program! With that kind of support, the next release of the
|
||
program can incorporate these fixes, and people not using the
|
||
NetBSD packages system can win from your efforts.
|
||
</p>
|
||
<p>
|
||
Support the idea of free software!
|
||
</p>
|
||
</div>
|
||
</div>
|
||
<div class="chapter" lang="en">
|
||
<div class="titlepage">
|
||
<div><div><h2 class="title">
|
||
<a name="build"></a>Chapter 8. The build process</h2></div></div>
|
||
<div></div>
|
||
</div>
|
||
<div class="toc">
|
||
<p><b>Table of Contents</b></p>
|
||
<dl>
|
||
<dt>8.1. <a href="#build.prefix">Program location</a>
|
||
</dt>
|
||
<dt>8.2. <a href="#id2949108">Main targets</a>
|
||
</dt>
|
||
<dt>8.3. <a href="#build.helpful-targets">Other helpful targets</a>
|
||
</dt>
|
||
</dl>
|
||
</div>
|
||
<p>
|
||
The basic steps for building a program are always the same. First the
|
||
program's source (<span class="emphasis"><em>distfile</em></span>) must be brought to the
|
||
local system and then extracted. After any patches to compile properly
|
||
on NetBSD are applied, the software can be configured, then built
|
||
(usually by compiling), and finally the generated binaries, etc. can be
|
||
put into place on the system. These are exactly the steps performed by
|
||
the NetBSD package system, which is implemented as a series of targets
|
||
in a central Makefile, <tt class="filename">pkgsrc/mk/bsd.pkg.mk</tt>.
|
||
</p>
|
||
<div class="sect1" lang="en">
|
||
<div class="titlepage">
|
||
<div><div><h2 class="title" style="clear: both">
|
||
<a name="build.prefix"></a>8.1. Program location</h2></div></div>
|
||
<div></div>
|
||
</div>
|
||
<p>
|
||
Before outlining the process performed by the NetBSD package system in
|
||
the next section, here's a brief discussion on where programs are
|
||
installed, and which variables influence this.
|
||
</p>
|
||
<p>
|
||
The automatic variable <tt class="varname">PREFIX</tt> indicates where all
|
||
files of the final program shall be installed. It is usually set to
|
||
<tt class="varname">LOCALBASE</tt> (<tt class="filename">/usr/pkg</tt>), or
|
||
<tt class="varname">CROSSBASE</tt> for pkgs in the “<span class="quote">cross</span>”
|
||
category, though its value becomes that of <tt class="varname">X11BASE</tt> if
|
||
<tt class="varname">USE_IMAKE</tt> or <tt class="varname">USE_X11BASE</tt> is set.
|
||
The value of <tt class="varname">PREFIX</tt> needs to be put into the various
|
||
places in the program's source where paths to these files are encoded.
|
||
See <a href="#components.patches" title="5.3. patches/*">Section 5.3, “patches/*”</a> and <a href="#fixes.libtool" title="7.2. Shared libraries - libtool">Section 7.2, “Shared libraries - libtool”</a> for more details.
|
||
</p>
|
||
<p>
|
||
When choosing which of these variables to use, follow the following rules:
|
||
</p>
|
||
<div class="itemizedlist"><ul type="disc">
|
||
<li><p>
|
||
<tt class="varname">PREFIX</tt> always points to the location where the current
|
||
pkg will be installed. When referring to a pkg's own installation path,
|
||
use “<span class="quote">${PREFIX}</span>”.
|
||
</p></li>
|
||
<li><p>
|
||
<tt class="varname">LOCALBASE</tt> is where all non-X11 pkgs are installed.
|
||
If you need to construct a -I or -L argument to the compiler to find
|
||
includes and libraries installed by another non-X11 pkg, use
|
||
“<span class="quote">${LOCALBASE}</span>”.
|
||
</p></li>
|
||
<li><p>
|
||
<tt class="varname">X11BASE</tt> is where the actual X11 distribution (from
|
||
xsrc, etc.) is installed. When looking for
|
||
<span class="emphasis"><em>standard</em></span> X11 includes (not
|
||
those installed by a pkg), use “<span class="quote">${X11BASE}</span>”.
|
||
</p></li>
|
||
<li><p>
|
||
X11 based pkgs are special in that they may be installed in either
|
||
<tt class="varname">X11BASE</tt> or <tt class="varname">LOCALBASE</tt>. To install X11
|
||
packages in <tt class="varname">LOCALBASE</tt>, simply install
|
||
<a xmlns:html="http://www.w3.org/1999/xhtml" href="ftp://ftp.netbsd.org/pub/NetBSD/packages/pkgsrc/pkgtools/xpkgwedge/README.html" class="pkgname">pkgtools/xpkgwedge</a>. If you need to find includes or libraries
|
||
installed by a pkg that has <tt class="varname">USE_IMAKE</tt> or
|
||
<tt class="varname">USE_X11BASE</tt> in its pkg Makefile, you need to
|
||
use <span class="emphasis"><em>both</em></span> “<span class="quote">${X11BASE}</span>” and
|
||
“<span class="quote">${LOCALBASE}</span>”.
|
||
</p></li>
|
||
<li><p>
|
||
<tt class="varname">X11PREFIX</tt> should be used to refer to the installed
|
||
location of an X11 package. <tt class="varname">X11PREFIX</tt> will be set to
|
||
<tt class="varname">X11BASE</tt> if xpkgwedge is not installed,
|
||
and to <tt class="varname">LOCALBASE</tt> if xpkgwedge is installed.
|
||
</p></li>
|
||
<li>
|
||
<p>
|
||
If xpkgwedge is installed, it is possible to have some packages installed
|
||
in <tt class="varname">X11BASE</tt> and some in <tt class="varname">LOCALBASE</tt>.
|
||
To determine the prefix of an installed package, the
|
||
<tt class="varname">EVAL_PREFIX</tt> definition can be used. It takes pairs in the
|
||
format “<span class="quote">DIRNAME=<package></span>”, and the make(1) variable
|
||
<tt class="varname">DIRNAME</tt> will be set to the prefix of the installed
|
||
package <package>, or “<span class="quote">${X11PREFIX}</span>” if the package is
|
||
not installed.
|
||
</p>
|
||
<p>
|
||
This is best illustrated by example.
|
||
</p>
|
||
<p>
|
||
The following lines are taken from
|
||
<tt class="filename">pkgsrc/wm/scwm/Makefile</tt>:
|
||
</p>
|
||
<table xmlns:html="http://www.w3.org/1999/xhtml" class="programlisting"><tr><td><pre>EVAL_PREFIX+= GTKDIR=gtk+
|
||
CONFIGURE_ARGS+= --with-guile-prefix=${LOCALBASE} \
|
||
--with-gtk-prefix="${GTKDIR}" \
|
||
--enable-multibyte</pre></td></tr></table>
|
||
<p>
|
||
Specific defaults can be defined for the packages evaluated using
|
||
<tt class="varname">EVAL_PREFIX</tt>, by using a definition of the form:
|
||
</p>
|
||
<table xmlns:html="http://www.w3.org/1999/xhtml" class="programlisting"><tr><td><pre>GTKDIR_DEFAULT= ${LOCALBASE}</pre></td></tr></table>
|
||
<p>
|
||
where <tt class="varname">GTKDIR</tt> corresponds to the first definition in
|
||
the <tt class="varname">EVAL_PREFIX</tt> pair.
|
||
</p>
|
||
</li>
|
||
</ul></div>
|
||
</div>
|
||
<div class="sect1" lang="en">
|
||
<div class="titlepage">
|
||
<div><div><h2 class="title" style="clear: both">
|
||
<a name="id2949108"></a>8.2. Main targets</h2></div></div>
|
||
<div></div>
|
||
</div>
|
||
<p>
|
||
The main targets used during the build process defined in
|
||
<tt class="filename">bsd.pkg.mk</tt> are:
|
||
</p>
|
||
<div class="itemizedlist"><ul type="disc">
|
||
<li>
|
||
<p>fetch</p>
|
||
<p>
|
||
This will check if the file(s) given in the variables
|
||
<tt class="varname">DISTFILES</tt> and <tt class="varname">PATCHFILES</tt> (as
|
||
defined in the package's Makefile) are present on the
|
||
local system in <tt class="filename">/usr/pkgsrc/distfiles</tt>. If they
|
||
are not present, an attempt will be made to fetch them using commands
|
||
of the form:
|
||
</p>
|
||
<table xmlns:html="http://www.w3.org/1999/xhtml" class="programlisting"><tr><td><pre>${FETCH_CMD} ${FETCH_BEFORE_ARGS} ${site}${file} ${FETCH_AFTER_ARGS}</pre></td></tr></table>
|
||
<p>
|
||
where ${site} varies through several possibilities in turn: first,
|
||
<tt class="varname">MASTER_SITE_OVERRIDE</tt> is tried, then the sites
|
||
specified in either <tt class="varname">SITES_file</tt> if defined, else
|
||
<tt class="varname">MASTER_SITES</tt> or <tt class="varname">PATCH_SITES</tt>, as
|
||
applies, then finally the value of
|
||
<tt class="varname">MASTER_SITE_BACKUP</tt>. The order of all except the
|
||
first can be optionally sorted by the user, via setting either
|
||
<tt class="varname">MASTER_SORT_AWK</tt> or
|
||
<tt class="varname">MASTER_SORT_REGEX</tt>.
|
||
</p>
|
||
</li>
|
||
<li>
|
||
<p>checksum</p>
|
||
<p>
|
||
After the distfile(s) are fetched, their checksum is generated and
|
||
compared with the checksums stored in the distinfo file. If the
|
||
checksums don't match, the build is aborted. This is to ensure the same
|
||
distfile is used for building, and that the distfile wasn't changed,
|
||
e.g. by some malign force, deliberately changed distfiles on the master
|
||
distribution site or network lossage.
|
||
</p>
|
||
</li>
|
||
<li>
|
||
<p>extract</p>
|
||
<p>
|
||
When the distfiles are present on the local system, they need to be
|
||
extracted, as they are usually in the form of some compressed archive
|
||
format, most commonly <tt class="filename">.tar.gz</tt>. If only some of
|
||
the distfiles need to be uncompressed, the files to be uncompressed
|
||
should be put into <tt class="varname">EXTRACT_ONLY</tt>. If the distfiles
|
||
are not in <tt class="filename">.tar.gz</tt> format, they can be
|
||
extracted by setting <tt class="varname">EXTRACT_CMD</tt>,
|
||
<tt class="varname">EXTRACT_BEFORE_ARGS</tt> and/or
|
||
<tt class="varname">EXTRACT_AFTER_ARGS</tt>.
|
||
</p>
|
||
</li>
|
||
<li>
|
||
<p>patch</p>
|
||
<p>
|
||
After extraction, all the patches named by the
|
||
<tt class="varname">PATCHFILES</tt>, those present in the patches
|
||
subdirectory of the package as well as in $LOCALPATCHES/$PKGPATH (e.g.
|
||
<tt class="filename">/usr/local/patches/graphics/png</tt>) are applied.
|
||
Patchfiles ending in <tt class="filename">.Z</tt> or
|
||
<tt class="filename">.gz</tt> are uncompressed before they are applied,
|
||
files ending in <tt class="filename">.orig</tt> or
|
||
<tt class="filename">.rej</tt> are ignored. Any special options to patch(1)
|
||
can be handed in <tt class="varname">PATCH_DIST_ARGS</tt>.
|
||
See <a href="#components.patches" title="5.3. patches/*">Section 5.3, “patches/*”</a> for more details.
|
||
</p>
|
||
<p>
|
||
By default patch is given special args to make it fail if the
|
||
patches with some lines of fuzz. Please fix (regen) the patches
|
||
so that they apply cleanly. The rationale behind this is that
|
||
patches that apply cleanly may end up being applied in the wrong
|
||
place, and cause severe harm there.
|
||
</p>
|
||
</li>
|
||
<li>
|
||
<p>configure</p>
|
||
<p>
|
||
Most pieces of software need information on the header files,
|
||
system calls, and library routines which are available in NetBSD.
|
||
This is the process known as configuration, and is usually
|
||
automated. In most cases, a script is supplied with the source,
|
||
and its invocation results in generation of header files,
|
||
Makefiles, etc.
|
||
</p>
|
||
<p>
|
||
If the program's distfile contains its own configure script, this can
|
||
be invoked by setting <tt class="varname">HAS_CONFIGURE</tt>. If the
|
||
configure script is a GNU autoconf script,
|
||
<tt class="varname">GNU_CONFIGURE</tt> should be specified instead. In either
|
||
case, any arguments to the configure script can be specified in the
|
||
<tt class="varname">CONFIGURE_ARGS</tt> variable, and the configure script's
|
||
name can be set in <tt class="varname">CONFIGURE_SCRIPT</tt> if it differs
|
||
from the default “<span class="quote">configure</span>”.
|
||
</p>
|
||
<p>
|
||
If the program uses an Imakefile for configuration, the appropriate
|
||
steps can be invoked by setting <tt class="varname">USE_IMAKE</tt> to
|
||
“<span class="quote">YES</span>”. (If you only want the package installed in
|
||
<tt class="varname">$X11PREFIX</tt> but xmkmf not being run, set
|
||
<tt class="varname">USE_X11BASE</tt> instead!)
|
||
</p>
|
||
</li>
|
||
<li>
|
||
<p>build</p>
|
||
<p>
|
||
Once configuration has taken place, the software can be built on
|
||
NetBSD by invoking <tt class="varname">$MAKE_PROGRAM</tt> on
|
||
<tt class="varname">$MAKEFILE</tt> with <tt class="varname">$ALL_TARGET</tt> as
|
||
the target to build. The default <tt class="varname">MAKE_PROGRAM</tt> is
|
||
“<span class="quote">gmake</span>” if <tt class="varname">USE_GMAKE</tt> is set,
|
||
“<span class="quote">make</span>” otherwise. <tt class="varname">MAKEFILE</tt> is set to
|
||
“<span class="quote">Makefile</span>” by default, and <tt class="varname">ALL_TARGET</tt>
|
||
defaults to “<span class="quote">all</span>”. Any of these variables can be set to
|
||
change the default build process.
|
||
</p>
|
||
</li>
|
||
<li>
|
||
<p>install</p>
|
||
<p>
|
||
Once the build stage has completed, the final step is to install
|
||
the software in public directories, for users. As in the
|
||
build-target, <tt class="varname">$MAKE_PROGRAM</tt> is invoked on
|
||
<tt class="varname">$MAKEFILE</tt> here, but with the
|
||
<tt class="varname">$INSTALL_TARGET</tt> instead, the latter defaulting to
|
||
“<span class="quote">install</span>” (plus “<span class="quote">install.man</span>”, if
|
||
<tt class="varname">USE_IMAKE</tt> is set).
|
||
</p>
|
||
</li>
|
||
</ul></div>
|
||
<p>
|
||
If no target is specified, the default is “<span class="quote">build</span>”.
|
||
If a subsequent stage is requested, all prior stages are made: e.g.
|
||
<b class="command">make build</b> will also perform the equivalent of:
|
||
</p>
|
||
<table xmlns:html="http://www.w3.org/1999/xhtml" class="programlisting"><tr><td><pre>make fetch
|
||
make checksum
|
||
make extract
|
||
make patch
|
||
make configure
|
||
make build</pre></td></tr></table>
|
||
</div>
|
||
<div class="sect1" lang="en">
|
||
<div class="titlepage">
|
||
<div><div><h2 class="title" style="clear: both">
|
||
<a name="build.helpful-targets"></a>8.3. Other helpful targets</h2></div></div>
|
||
<div></div>
|
||
</div>
|
||
<div class="itemizedlist"><ul type="disc">
|
||
<li>
|
||
<p>pre/post-*</p>
|
||
<p>
|
||
For any of the main targets described in the previous section, two
|
||
auxiliary targets exist with “<span class="quote">pre-</span>” and
|
||
“<span class="quote">post-</span>” used as a prefix
|
||
for the main target's name. These targets are invoked before and
|
||
after the main target is called, allowing extra configuration or
|
||
installation steps, for example, which program's configure script
|
||
or install target omitted.
|
||
</p>
|
||
</li>
|
||
<li>
|
||
<p>do-*</p>
|
||
<p>
|
||
Should one of the main targets do the wrong thing, and should there
|
||
be no variable to fix this, you can redefine it with the do-*
|
||
target. (Note that redefining the target itself instead of the
|
||
do-* target is a bad idea, as the pre-* and post-* targets won't be
|
||
called anymore, etc.) You will not usually need to do this.
|
||
</p>
|
||
</li>
|
||
<li>
|
||
<p>reinstall</p>
|
||
<p>
|
||
If you did a <b class="command">make install</b> and you noticed some file
|
||
was not installed properly, you can repeat the installation with this
|
||
target, which will ignore the “<span class="quote">already installed</span>” flag.
|
||
</p>
|
||
</li>
|
||
<li>
|
||
<p>deinstall</p>
|
||
<p>
|
||
This target does a pkg_delete(1) in the current directory,
|
||
effectively de-installing the package. The following variables can
|
||
be used either on the command line or in
|
||
<tt class="filename">/etc/mk.conf</tt> to tune the behaviour:
|
||
</p>
|
||
<div class="itemizedlist"><ul type="circle">
|
||
<li>
|
||
<p><tt class="varname">PKG_VERBOSE</tt></p>
|
||
<p>
|
||
Add a "-v" to the pkg_delete(1) command.
|
||
</p>
|
||
</li>
|
||
<li>
|
||
<p><tt class="varname">DEINSTALLDEPENDS</tt></p>
|
||
<p>
|
||
Remove all packages that require (depend on) the given package.
|
||
This can be used to remove any packages that may have been pulled in
|
||
by a given package, e.g. if <b class="command">make deinstall
|
||
DEINSTALLDEPENDS=1</b> is done in
|
||
<tt class="filename">pkgsrc/x11/kde</tt>, this is likely to remove whole
|
||
KDE. Works by adding “<span class="quote">-R</span>” to the pkg_delete command line.
|
||
</p>
|
||
</li>
|
||
</ul></div>
|
||
</li>
|
||
<li>
|
||
<p>update</p>
|
||
<p>
|
||
This target causes the current package to be updated to the latest
|
||
version. The package and all depending packages first get de-installed,
|
||
then current versions of the corresponding packages get compiled and
|
||
installed. This is similar to manually noting which packages are
|
||
currently installed, then performing a series of <b class="command">make
|
||
deinstall</b> and <b class="command">make install</b> (or whatever
|
||
<tt class="varname">UPDATE_TARGET</tt> is set to) for these packages.
|
||
</p>
|
||
<p>
|
||
You can use the “<span class="quote">update</span>” target to resume package
|
||
updating in case a previous <b class="command">make update</b> was interrupted
|
||
for some reason. However, in this case, make sure you don't call
|
||
<b class="command">make clean</b> or otherwise remove the list of dependent
|
||
packages in <tt class="varname">WRKDIR</tt>. Otherwise you lose the
|
||
ability to automatically update the current package along with the
|
||
dependent packages you have installed.
|
||
</p>
|
||
<p>
|
||
Resuming an interrupted <b class="command">make update</b> will only work as
|
||
long as the package tree remains unchanged. If the source code for
|
||
one of the packages to be updated has been changed, resuming
|
||
<b class="command">make update</b> will most certainly fail!
|
||
</p>
|
||
<p>
|
||
The following variables can be used either on the command line or in
|
||
<tt class="filename">/etc/mk.conf</tt> to alter the behaviour of
|
||
<b class="command">make update</b>:
|
||
</p>
|
||
<div class="itemizedlist"><ul type="circle">
|
||
<li>
|
||
<tt class="varname">UPDATE_TARGET</tt><p>
|
||
Install target to recursively use for the updated package and the
|
||
dependent packages. Defaults to <tt class="varname">DEPENDS_TARGET</tt> if set,
|
||
“<span class="quote">install</span>” otherwise for <b class="command">make update</b>.
|
||
e.g. <b class="command">make update UPDATE_TARGET=package</b>
|
||
</p>
|
||
</li>
|
||
<li>
|
||
<tt class="varname">NOCLEAN</tt><p>
|
||
Don't clean up after updating. Useful if you want to leave the
|
||
work sources of the updated packages around for inspection or
|
||
other purposes. Be sure you eventually clean up the source
|
||
tree (see the “<span class="quote">clean-update</span>” target below) or you may
|
||
run into troubles with old source code still lying around on your
|
||
next <b class="command">make</b> or <b class="command">make update</b>.
|
||
</p>
|
||
</li>
|
||
<li>
|
||
<tt class="varname">REINSTALL</tt><p>
|
||
Deinstall each package before installing (making
|
||
<tt class="varname">DEPENDS_TARGET</tt>). This may be necessary if the
|
||
“<span class="quote">clean-update</span>” target (see below) was called after
|
||
interrupting a running <b class="command">make update</b>.
|
||
</p>
|
||
</li>
|
||
<li>
|
||
<tt class="varname">DEPENDS_TARGET</tt><p>
|
||
Allows you to disable recursion and hardcode the target for
|
||
packages. The default is “<span class="quote">update</span>” for the update target,
|
||
facilitating a recursive update of prerequisite packages.
|
||
Only set <tt class="varname">DEPENDS_TARGET</tt> if you want to disable
|
||
recursive updates. Use <tt class="varname">UPDATE_TARGET</tt> instead to just
|
||
set a specific target for each package to be installed during
|
||
<b class="command">make update</b> (see above).
|
||
</p>
|
||
</li>
|
||
</ul></div>
|
||
</li>
|
||
<li>
|
||
<p>clean-update</p>
|
||
<p>
|
||
Clean the source tree for all packages that would get updated if
|
||
<b class="command">make update</b> was called from the current directory.
|
||
This target should not be used if the current package (or any of its
|
||
depending packages) have already been de-installed (e.g., after calling
|
||
<b class="command">make update</b>) or you may lose some packages you intended
|
||
to update. As a rule of thumb: only use this target
|
||
<span class="emphasis"><em>before</em></span> the first time you run
|
||
<b class="command">make update</b> and only if you have a dirty package tree
|
||
(e.g., if you used <tt class="varname">NOCLEAN</tt>).
|
||
</p>
|
||
<p>
|
||
If you unsure about whether your tree is clean you can either perform
|
||
a <b class="command">make clean</b> at the top of the tree, or use the
|
||
following sequence of commands from the directory of the package you
|
||
want to update (<span class="emphasis"><em>before</em></span> running
|
||
<b class="command">make update</b> for the first time, otherwise you lose
|
||
all the packages you wanted to update!):
|
||
</p>
|
||
<table xmlns:html="http://www.w3.org/1999/xhtml" class="programlisting"><tr><td><pre><tt class="prompt">#</tt> <b class="userinput"><tt>make clean-update</tt></b>
|
||
<tt class="prompt">#</tt> <b class="userinput"><tt>make clean CLEANDEPENDS=YES</tt></b>
|
||
<tt class="prompt">#</tt> <b class="userinput"><tt>make update</tt></b></pre></td></tr></table>
|
||
<p>
|
||
The following variables can be used either on the command line or in
|
||
<tt class="filename">/etc/mk.conf</tt> to alter the behaviour of
|
||
<b class="command">make clean-update</b>:
|
||
</p>
|
||
<div class="itemizedlist"><ul type="circle"><li>
|
||
<tt class="varname">CLEAR_DIRLIST</tt><p>
|
||
After <b class="command">make clean</b>, do not reconstruct the list of
|
||
directories to update for this package. Only use this if <b class="command">make
|
||
update</b> successfully installed all packages you wanted to
|
||
update. Normally, this is done automatically on <b class="command">make
|
||
update</b>, but may have been suppressed by the
|
||
<tt class="varname">NOCLEAN</tt> variable (see above).
|
||
</p>
|
||
</li></ul></div>
|
||
</li>
|
||
<li>
|
||
<p>info</p>
|
||
<p>
|
||
This target invokes <b class="command">pkg_info</b> for the current
|
||
package. You can use this to check which version of a package is
|
||
installed.
|
||
</p>
|
||
</li>
|
||
<li>
|
||
<p>readme</p>
|
||
<p>
|
||
This target generates a <tt class="filename">README.html</tt> file, which
|
||
can be viewed using a browser such as <a xmlns:html="http://www.w3.org/1999/xhtml" href="ftp://ftp.netbsd.org/pub/NetBSD/packages/pkgsrc/www/navigator/README.html" class="pkgname">www/navigator</a> or
|
||
<a xmlns:html="http://www.w3.org/1999/xhtml" href="ftp://ftp.netbsd.org/pub/NetBSD/packages/pkgsrc/www/lynx/README.html" class="pkgname">www/lynx</a>. The generated files contain references to any
|
||
packages which are in the <tt class="varname">PACKAGES</tt> directory on
|
||
the local host. The generated files can be made to refer to URLs based on
|
||
<tt class="varname">FTP_PKG_URL_HOST</tt> and
|
||
<tt class="varname">FTP_PKG_URL_DIR</tt>. For example, if I wanted to generate
|
||
<tt class="filename">README.html</tt> files which pointed to binary packages
|
||
on the local machine, in the directory
|
||
<tt class="filename">/usr/packages</tt>, set
|
||
<tt class="varname">FTP_PKG_URL_HOST=file://localhost</tt> and
|
||
<tt class="varname">FTP_PKG_URL_DIR=/usr/packages</tt>. The
|
||
<tt class="varname">${PACKAGES}</tt> directory and its subdirectories will be
|
||
searched for all the binary packages.
|
||
</p>
|
||
</li>
|
||
<li>
|
||
<p>readme-all</p>
|
||
<p>
|
||
Use this target to create a file <tt class="filename">README-all.html</tt>
|
||
which contains a list of all packages currently available in the NetBSD
|
||
Packages Collection, together with the category they belong to and a
|
||
short description. This file is compiled from the
|
||
<tt class="filename">pkgsrc/*/README.html</tt> files, so be sure to run
|
||
this <span class="emphasis"><em>after</em></span> a <b class="command">make readme</b>.
|
||
</p>
|
||
</li>
|
||
<li>
|
||
<p>cdrom-readme</p>
|
||
<p>
|
||
This is very much the same as the “<span class="quote">readme</span>” target (see
|
||
above), but is to be used when generating a pkgsrc tree to be written
|
||
to a CD-ROM. This target also produces
|
||
<tt class="filename">README.html</tt> files, and can be made to refer
|
||
to URLs based on <tt class="varname">CDROM_PKG_URL_HOST</tt> and
|
||
<tt class="varname">CDROM_PKG_URL_DIR</tt>.
|
||
</p>
|
||
</li>
|
||
<li>
|
||
<p>show-distfiles</p>
|
||
<p>
|
||
This target shows which distfiles and patchfiles are needed to build
|
||
the package. (<tt class="varname">DISTFILES</tt> and
|
||
<tt class="varname">PATCHFILES</tt>, but not <tt class="filename">patches/*</tt>)
|
||
</p>
|
||
</li>
|
||
<li>
|
||
<p>show-downlevel</p>
|
||
<p>
|
||
This target shows nothing if the package is not installed. If a version
|
||
of this package is installed, but is not the version provided in this
|
||
version of pkgsrc, then a warning message is displayed. This target can
|
||
be used to show which of your installed packages are downlevel, and so
|
||
the old versions can be deleted, and the current ones added.
|
||
</p>
|
||
</li>
|
||
<li>
|
||
<p>show-pkgsrc-dir</p>
|
||
<p>
|
||
This target shows the directory in the pkgsrc hierarchy from which the
|
||
package can be built and installed. This may not be the same directory
|
||
as the one from which the package was installed. This target is intended
|
||
to be used by people who may wish to upgrade many packages on a single
|
||
host, and can be invoked from the top-level pkgsrc Makefile by using the
|
||
“<span class="quote">show-host-specific-pkgs</span>” target.
|
||
</p>
|
||
</li>
|
||
<li>
|
||
<p>show-installed-depends</p>
|
||
<p>
|
||
This target shows which installed packages match the current package's
|
||
<tt class="varname">DEPENDS</tt>. Useful if out of date DEPENDS are
|
||
causing build problems.
|
||
</p>
|
||
</li>
|
||
<li>
|
||
<p>check-shlibs</p>
|
||
<p>
|
||
After a package is installed, check all its binaries and (on ELF
|
||
platforms) shared libraries to see if they find the shared libs they need.
|
||
Run by default if <tt class="varname">PKG_DEVELOPER</tt> is set in
|
||
<tt class="filename">/etc/mk.conf</tt>.
|
||
</p>
|
||
</li>
|
||
<li>
|
||
<p>print-PLIST</p>
|
||
<p>
|
||
After a “<span class="quote">make install</span>” from a new or upgraded pkg, this
|
||
prints out an attempt to generate a new <tt class="filename">PLIST</tt> from
|
||
a <b class="command">find -newer work/.extract_done</b>.
|
||
An attempt is made to care for shared libs etc., but it is
|
||
<span class="emphasis"><em>strongly</em></span> recommended to review the result before
|
||
putting it into <tt class="filename">PLIST</tt>. On upgrades, it's useful to
|
||
diff the output of this command against an already existing
|
||
<tt class="filename">PLIST</tt> file.
|
||
</p>
|
||
<p>
|
||
If the package installs files via tar(1) or other methods that don't
|
||
update file access times, be sure to add these files manually to your
|
||
<tt class="filename">PLIST</tt>, as “<span class="quote">find -newer</span>” won't catch
|
||
them!
|
||
</p>
|
||
</li>
|
||
<li>
|
||
<p>bulk-package</p>
|
||
<p>
|
||
Used to do bulk builds. If an appropriate binary package already exists,
|
||
no action is taken. If not, this target will compile, install and
|
||
package it (and it's depends, if <tt class="varname">PKG_DEPENDS</tt> is
|
||
set properly. See <a href="#binary.configuration">Section 4.3.1, “Configuration”</a>.
|
||
After creating the binary
|
||
package, the sources, the just-installed package and it's required
|
||
packages are removed, preserving free disk space.
|
||
</p>
|
||
</li>
|
||
<li>
|
||
<p>bulk-install</p>
|
||
<p>
|
||
Used during bulk-installs to install required packages. If an
|
||
appropriate binary package is available, it will be installed via
|
||
pkg_add. If not, <b class="command">make bulk-package</b> will be executed,
|
||
but the installed binary not be removed. A binary package is
|
||
“<span class="quote">appropriate</span>” to be installed via <b class="command">pkg_add</b>
|
||
if:
|
||
</p>
|
||
<div class="itemizedlist"><ul type="circle">
|
||
<li>None of the package's files (<tt class="filename">Makefile</tt>,
|
||
...) were modified since it was built.</li>
|
||
<li>None of the package's required (binary) packages were
|
||
modified since it was built.</li>
|
||
</ul></div>
|
||
</li>
|
||
</ul></div>
|
||
</div>
|
||
</div>
|
||
<div class="chapter" lang="en">
|
||
<div class="titlepage">
|
||
<div><div><h2 class="title">
|
||
<a name="buildlink2"></a>Chapter 9. buildlink2 methodology</h2></div></div>
|
||
<div></div>
|
||
</div>
|
||
<div class="toc">
|
||
<p><b>Table of Contents</b></p>
|
||
<dl>
|
||
<dt>9.1. <a href="#id2953172">Converting packages to use buildlink2</a>
|
||
</dt>
|
||
<dt>9.2. <a href="#id2953308">Writing buildlink2.mk files</a>
|
||
</dt>
|
||
</dl>
|
||
</div>
|
||
<p>
|
||
buildlink2 is a pkgsrc framework that controls what headers and libraries
|
||
are seen by a package's configure and build processes. This is implemented
|
||
in a two step process:
|
||
</p>
|
||
<div class="orderedlist"><ol type="1">
|
||
<li><p>
|
||
Symlink headers and libraries for dependencies into
|
||
<tt class="varname">BUILDLINK_DIR</tt>, which by default is a subdirectory
|
||
of <tt class="varname">WRKDIR</tt>.
|
||
</p></li>
|
||
<li><p>
|
||
Create wrapper scripts that are used in place of the normal compiler
|
||
tools that translate “<span class="quote">-I${LOCALBASE}/include</span>” and
|
||
“<span class="quote">-L${LOCALBASE}/lib</span>” into references to
|
||
<tt class="varname">BUILDLINK_DIR</tt>.
|
||
</p></li>
|
||
</ol></div>
|
||
<p>
|
||
This normalizes the environment in which a package is built so that the
|
||
package may be built consistently despite what may other software may
|
||
installed. Please refer to
|
||
<tt class="filename">pkgsrc/mk/buildlink2/buildlink2.txt</tt> for some
|
||
FAQs and answers regarding buildlink2, and to
|
||
<tt class="filename">pkgsrc/mk/buildlink2/README</tt>
|
||
for a description of how buildlink2 is implemented in pkgsrc.
|
||
</p>
|
||
<div class="sect1" lang="en">
|
||
<div class="titlepage">
|
||
<div><div><h2 class="title" style="clear: both">
|
||
<a name="id2953172"></a>9.1. Converting packages to use buildlink2</h2></div></div>
|
||
<div></div>
|
||
</div>
|
||
<p>
|
||
The process of converting packages to use the buildlink2 framework is
|
||
fairly straightforward. The package <tt class="filename">Makefile</tt> must
|
||
define <tt class="varname">USE_BUILDLINK2</tt>.
|
||
If a dependency on a particular package, e.g. foo, is required for its
|
||
libraries and headers, then we replace:
|
||
</p>
|
||
<table xmlns:html="http://www.w3.org/1999/xhtml" class="programlisting"><tr><td><pre>DEPENDS+= foo>=1.1.0:../../category/foo</pre></td></tr></table>
|
||
<p>
|
||
with
|
||
</p>
|
||
<table xmlns:html="http://www.w3.org/1999/xhtml" class="programlisting"><tr><td><pre>.include "../../category/foo/buildlink2.mk"</pre></td></tr></table>
|
||
<p>
|
||
There are several buildlink2.mk files in <tt class="filename">pkgsrc/mk</tt>
|
||
that handle special package issues:
|
||
</p>
|
||
<div class="itemizedlist"><ul type="disc">
|
||
<li><p>
|
||
<tt class="filename">motif.buildlink2.mk</tt> checks for a system-provided
|
||
Motif installation or adds a dependency on <a xmlns:html="http://www.w3.org/1999/xhtml" href="ftp://ftp.netbsd.org/pub/NetBSD/packages/pkgsrc/x11/lesstif/README.html" class="pkgname">x11/lesstif</a> or
|
||
<a xmlns:html="http://www.w3.org/1999/xhtml" href="ftp://ftp.netbsd.org/pub/NetBSD/packages/pkgsrc/x11/openmotif/README.html" class="pkgname">x11/openmotif</a>;
|
||
</p></li>
|
||
<li><p>
|
||
<tt class="filename">ossaudio.buildlink2.mk</tt> defines several variables
|
||
that may be used by packages that use the Open Sound System (OSS) API;
|
||
</p></li>
|
||
<li><p>
|
||
<tt class="filename">pthread.buildlink2.mk</tt> uses the value of
|
||
<tt class="varname">PTHREAD_OPTS</tt> and checks for native pthreads or adds
|
||
a dependency on <a xmlns:html="http://www.w3.org/1999/xhtml" href="ftp://ftp.netbsd.org/pub/NetBSD/packages/pkgsrc/devel/pth/README.html" class="pkgname">devel/pth</a> as needed;
|
||
</p></li>
|
||
<li><p>
|
||
<tt class="filename">xaw.buildlink2.mk</tt> uses the value of
|
||
<tt class="varname">XAW_TYPE</tt> to choose a particular Athena widgets
|
||
library.
|
||
</p></li>
|
||
</ul></div>
|
||
<p>
|
||
The comments in those buildlink2.mk files provide a more complete
|
||
description of how to use them properly.
|
||
</p>
|
||
</div>
|
||
<div class="sect1" lang="en">
|
||
<div class="titlepage">
|
||
<div><div><h2 class="title" style="clear: both">
|
||
<a name="id2953308"></a>9.2. Writing buildlink2.mk files</h2></div></div>
|
||
<div></div>
|
||
</div>
|
||
<p>
|
||
A simple example of a buildlink2.mk file for a mythical package foo
|
||
follows:
|
||
</p>
|
||
<table xmlns:html="http://www.w3.org/1999/xhtml" class="programlisting"><tr><td><pre>BUILDLINK_PACKAGES+= foo
|
||
BUILDLINK_PKGBASE.foo= foo
|
||
BUILDLINK_DEPENDS.foo?= foo>=1.0
|
||
BUILDLINK_PKGSRCDIR.foo?= ../../category/foo
|
||
|
||
EVAL_PREFIX+= BUILDLINK_PREFIX.foo=foo
|
||
BUILDLINK_PREFIX.foo_DEFAULT= ${LOCALBASE}
|
||
BUILDLINK_FILES.foo= include/foo.h
|
||
BUILDLINK_FILES.foo+= include/bar.h
|
||
BUILDLINK_FILES.foo+= lib/libfoo.*
|
||
|
||
BUILDLINK_TARGETS+= foo-buildlink
|
||
|
||
foo-buildlink: _BUILDLINK_USE</pre></td></tr></table>
|
||
<p>
|
||
The first section controls how the dependency on foo is added. The
|
||
dependency is constructed from four parts:
|
||
</p>
|
||
<div class="orderedlist"><ol type="1">
|
||
<li><p>
|
||
<tt class="varname">BUILDLINK_PACKAGES</tt> is the global list of packages
|
||
for which dependencies will be added by buildlink2;
|
||
</p></li>
|
||
<li><p>
|
||
<tt class="varname">BUILDLINK_DEPENDS.foo</tt> is the actual dependency
|
||
recorded in the installed package;
|
||
</p></li>
|
||
<li><p>
|
||
<tt class="varname">BUILDLINK_PKGSRCDIR.foo</tt> is the location of the
|
||
foo pkgsrc directory;
|
||
</p></li>
|
||
<li><p>
|
||
<tt class="varname">BUILDLINK_DEPMETHOD.foo</tt> (not shown above) controls
|
||
whether we use <tt class="varname">BUILD_DEPENDS</tt> or
|
||
<tt class="varname">DEPENDS</tt> to add the foo dependency, where the
|
||
full dependency is added if
|
||
<tt class="varname">BUILDLINK_DEPMETHOD.foo</tt> contains “<span class="quote">full</span>”.
|
||
</p></li>
|
||
</ol></div>
|
||
<p>
|
||
The second section controls which files are linked into
|
||
<tt class="varname">BUILDLINK_DIR</tt>:
|
||
</p>
|
||
<div class="orderedlist"><ol type="1">
|
||
<li><p>
|
||
<tt class="varname">BUILDLINK_PREFIX.foo</tt> is the installation prefix of
|
||
the package which we derive by using <tt class="varname">EVAL_PREFIX</tt>;
|
||
</p></li>
|
||
<li><p>
|
||
<tt class="varname">BUILDLINK_FILES.foo</tt> is a list of files (shell globs
|
||
allowed) relative to the <tt class="varname">BUILDLINK_PREFIX.foo</tt>
|
||
directory and will be symlinked into <tt class="varname">BUILDLINK_DIR</tt>;
|
||
</p></li>
|
||
<li><p>
|
||
<tt class="varname">BUILDLINK_FILES_CMD.foo</tt> (not shown above) is a
|
||
shell pipeline that outputs a list of files relative to the
|
||
<tt class="varname">BUILDLINK_PREFIX.foo</tt> directory and will be symlinked
|
||
into <tt class="varname">BUILDLINK_DIR</tt>.
|
||
</p></li>
|
||
</ol></div>
|
||
<p>
|
||
The remaining parts create the “<span class="quote">foo-buildlink</span>” target that
|
||
actually performs the symlinking and adds the
|
||
“<span class="quote">foo-buildlink</span>” target to
|
||
<tt class="varname">BUILDLINK_TARGETS</tt>, which is the global list of targets
|
||
to execute at do-buildlink time.
|
||
</p>
|
||
</div>
|
||
</div>
|
||
<div class="chapter" lang="en">
|
||
<div class="titlepage">
|
||
<div><div><h2 class="title">
|
||
<a name="debug"></a>Chapter 10. Debugging</h2></div></div>
|
||
<div></div>
|
||
</div>
|
||
<p>
|
||
To check out all the gotchas when building a package, here are the steps
|
||
that I do in order to get a package working. Please note this is basically
|
||
the same as what was explained in the previous sections, only with some
|
||
debugging aids.
|
||
</p>
|
||
<div class="itemizedlist"><ul type="disc">
|
||
<li><p>
|
||
Be sure to set <tt class="varname">PKG_DEVELOPER=1</tt> in <tt class="filename">/etc/mk.conf</tt>
|
||
</p></li>
|
||
<li>
|
||
<p>
|
||
Install <a xmlns:html="http://www.w3.org/1999/xhtml" href="ftp://ftp.netbsd.org/pub/NetBSD/packages/pkgsrc/pkgtools/url2pkg/README.html" class="pkgname">pkgtools/url2pkg</a> and run
|
||
</p>
|
||
<table xmlns:html="http://www.w3.org/1999/xhtml" class="programlisting"><tr><td><pre><tt class="prompt">#</tt> <b class="userinput"><tt>url2pkg http://www.example.com/path/to/distfile.tar.gz</tt></b></pre></td></tr></table>
|
||
</li>
|
||
<li><p>
|
||
Edit the <tt class="filename">Makefile</tt> as requested.
|
||
</p></li>
|
||
<li><p>Fill in <tt class="filename">DESCR</tt>
|
||
</p></li>
|
||
<li><p>
|
||
Run <b class="command">make configure</b>
|
||
</p></li>
|
||
<li><p>
|
||
Add any dependencies glimpsed from the configure step to the
|
||
package's <tt class="filename">Makefile</tt>.
|
||
</p></li>
|
||
<li>
|
||
<p>
|
||
Make the package compile, doing multiple rounds of
|
||
</p>
|
||
<table xmlns:html="http://www.w3.org/1999/xhtml" class="programlisting"><tr><td><pre><tt class="prompt">#</tt> <b class="userinput"><tt>make</tt></b>
|
||
<tt class="prompt">#</tt> <b class="userinput"><tt>pkgvi ${WRKSRC}/some/file/that/does/not/compile</tt></b>
|
||
<tt class="prompt">#</tt> <b class="userinput"><tt>mkpatches</tt></b>
|
||
<tt class="prompt">#</tt> <b class="userinput"><tt>patchdiff</tt></b>
|
||
<tt class="prompt">#</tt> <b class="userinput"><tt>mv ${WRKDIR}/.newpatches/* patches</tt></b>
|
||
<tt class="prompt">#</tt> <b class="userinput"><tt>make mps</tt></b>
|
||
<tt class="prompt">#</tt> <b class="userinput"><tt>make clean</tt></b></pre></td></tr></table>
|
||
<p>
|
||
Doing as non-root user will ensure that no files are modified that
|
||
shouldn't be, especially during the build phase.
|
||
</p>
|
||
</li>
|
||
<li><p>
|
||
Look at <tt class="filename">Makefile</tt>, fix if necessary; see <a href="#components.Makefile" title="5.1. Makefile">Section 5.1, “Makefile”</a>.
|
||
</p></li>
|
||
<li>
|
||
<p>
|
||
Generate a <tt class="filename">PLIST</tt>:
|
||
</p>
|
||
<table xmlns:html="http://www.w3.org/1999/xhtml" class="programlisting"><tr><td><pre><tt class="prompt">#</tt> <b class="userinput"><tt>make install</tt></b>
|
||
<tt class="prompt">#</tt> <b class="userinput"><tt>make print-PLIST > PLIST</tt></b>
|
||
<tt class="prompt">#</tt> <b class="userinput"><tt>make deinstall</tt></b>
|
||
<tt class="prompt">#</tt> <b class="userinput"><tt>make install</tt></b>
|
||
<tt class="prompt">#</tt> <b class="userinput"><tt>make deinstall</tt></b></pre></td></tr></table>
|
||
<p>
|
||
You usually need to be root to do this. Look if there are any files left:
|
||
</p>
|
||
<table xmlns:html="http://www.w3.org/1999/xhtml" class="programlisting"><tr><td><pre><tt class="prompt">#</tt> <b class="userinput"><tt>make print-PLIST</tt></b></pre></td></tr></table>
|
||
<p>
|
||
If this reveals any files that are missing in
|
||
<tt class="filename">PLIST</tt>, add them.
|
||
</p>
|
||
</li>
|
||
<li>
|
||
<p>
|
||
Now that the <tt class="filename">PLIST</tt> is OK, install the package again
|
||
and make a binary package:
|
||
</p>
|
||
<table xmlns:html="http://www.w3.org/1999/xhtml" class="programlisting"><tr><td><pre><tt class="prompt">#</tt> <b class="userinput"><tt>make reinstall && make package</tt></b></pre></td></tr></table>
|
||
</li>
|
||
<li>
|
||
<p>
|
||
Delete the installed package:
|
||
</p>
|
||
<table xmlns:html="http://www.w3.org/1999/xhtml" class="programlisting"><tr><td><pre><tt class="prompt">#</tt> <b class="userinput"><tt>pkg_delete blub</tt></b></pre></td></tr></table>
|
||
</li>
|
||
<li>
|
||
<p>
|
||
Repeat the above find command, which shouldn't find anything now:
|
||
</p>
|
||
<table xmlns:html="http://www.w3.org/1999/xhtml" class="programlisting"><tr><td><pre><tt class="prompt">#</tt> <b class="userinput"><tt>make print-PLIST</tt></b></pre></td></tr></table>
|
||
</li>
|
||
<li>
|
||
<p>
|
||
Reinstall the binary package:
|
||
</p>
|
||
<table xmlns:html="http://www.w3.org/1999/xhtml" class="programlisting"><tr><td><pre><tt class="prompt">#</tt> <b class="userinput"><tt>pkgadd .../blub.tgz</tt></b></pre></td></tr></table>
|
||
</li>
|
||
<li><p>
|
||
Play with it. Make sure everything works.
|
||
</p></li>
|
||
<li>
|
||
<p>
|
||
Run <b class="command">pkglint</b> from <a xmlns:html="http://www.w3.org/1999/xhtml" href="ftp://ftp.netbsd.org/pub/NetBSD/packages/pkgsrc/pkgtools/pkglint/README.html" class="pkgname">pkgtools/pkglint</a>, and fix the
|
||
problems it reports.
|
||
</p>
|
||
<table xmlns:html="http://www.w3.org/1999/xhtml" class="programlisting"><tr><td><pre><tt class="prompt">#</tt> <b class="userinput"><tt>pkglint</tt></b></pre></td></tr></table>
|
||
</li>
|
||
<li><p>
|
||
Submit (or commit, if you have cvs access); see <a href="#submit" title="Chapter 12. Submitting and Committing">Chapter 12, <i>Submitting and Committing</i></a>.
|
||
</p></li>
|
||
</ul></div>
|
||
</div>
|
||
<div class="chapter" lang="en">
|
||
<div class="titlepage">
|
||
<div><div><h2 class="title">
|
||
<a name="features"></a>Chapter 11. FAQs & features of the package system</h2></div></div>
|
||
<div></div>
|
||
</div>
|
||
<div class="toc">
|
||
<p><b>Table of Contents</b></p>
|
||
<dl>
|
||
<dt>11.1. <a href="#id2952494">Packages using GNU autoconf</a>
|
||
</dt>
|
||
<dt>11.2. <a href="#id2954262">Other distrib methods than .tar.gz</a>
|
||
</dt>
|
||
<dt>11.3. <a href="#id2954307">Packages not creating their own subdirectory</a>
|
||
</dt>
|
||
<dt>11.4. <a href="#id2955763">Custom configuration process</a>
|
||
</dt>
|
||
<dt>11.5. <a href="#id2955785">Packages not building in their DISTNAME directory</a>
|
||
</dt>
|
||
<dt>11.6. <a href="#id2955896">How to fetch all distfiles at once</a>
|
||
</dt>
|
||
<dt>11.7. <a href="#id2956076">How to fetch files from behind a firewall</a>
|
||
</dt>
|
||
<dt>11.8. <a href="#id2956098">If your patch contains an RCS ID</a>
|
||
</dt>
|
||
<dt>11.9. <a href="#id2956116">How to pull in variables from /etc/mk.conf</a>
|
||
</dt>
|
||
<dt>11.10. <a href="#id2956180">Is there a mailing list for pkg-related discussion?</a>
|
||
</dt>
|
||
<dt>11.11. <a href="#id2956204">How do I tell make fetch to do passive FTP?</a>
|
||
</dt>
|
||
<dt>11.12. <a href="#id2956350">Dependencies on other packages</a>
|
||
</dt>
|
||
<dt>11.13. <a href="#id2956571">Conflicts with other packages</a>
|
||
</dt>
|
||
<dt>11.14. <a href="#id2956642">Software which has a WWW Home Page</a>
|
||
</dt>
|
||
<dt>11.15. <a href="#id2956667">How to handle modified distfiles with the 'old' name</a>
|
||
</dt>
|
||
<dt>11.16. <a href="#id2956764">What does "Don't know how to make /usr/share/tmac/tmac.andoc" mean?</a>
|
||
</dt>
|
||
<dt>11.17. <a href="#id2956809">How to handle incrementing versions when fixing an existing
|
||
package</a>
|
||
</dt>
|
||
<dt>11.18. <a href="#id2956956">Could not find bsd.own.mk - what's wrong?</a>
|
||
</dt>
|
||
<dt>11.19. <a href="#id2957027">Restricted packages</a>
|
||
</dt>
|
||
<dt>11.20. <a href="#id2957213">Packages using (n)curses</a>
|
||
</dt>
|
||
<dt>11.21. <a href="#id2957255">Automated security check</a>
|
||
</dt>
|
||
<dt>11.22. <a href="#id2957425">What's the proper way to create an account from a package?</a>
|
||
</dt>
|
||
<dt>11.23. <a href="#id2957593">How to handle compiler bugs</a>
|
||
</dt>
|
||
<dt>11.24. <a href="#features.info-files">Packages providing info files</a>
|
||
</dt>
|
||
<dt>11.25. <a href="#id2957793">Packages whose distfiles aren't available for plain downloading</a>
|
||
</dt>
|
||
<dt>11.26. <a href="#id2957953">Configuration files handling and placement</a>
|
||
</dt>
|
||
<dt>11.27. <a href="#id2958470">Packages providing login shells</a>
|
||
</dt>
|
||
<dt>11.28. <a href="#id2958558">Packages providing locale catalogues</a>
|
||
</dt>
|
||
<dt>11.29. <a href="#id2958592">Using 'sudo' with pkgsrc</a>
|
||
</dt>
|
||
<dt>11.30. <a href="#id2958621">Packages containing perl scripts</a>
|
||
</dt>
|
||
<dt>11.31. <a href="#id2958648">Packages that cannot or should not be built</a>
|
||
</dt>
|
||
</dl>
|
||
</div>
|
||
<div class="sect1" lang="en">
|
||
<div class="titlepage">
|
||
<div><div><h2 class="title" style="clear: both">
|
||
<a name="id2952494"></a>11.1. Packages using GNU autoconf</h2></div></div>
|
||
<div></div>
|
||
</div>
|
||
<p>
|
||
If your package uses GNU autoconf created configure scripts, add the following
|
||
to your package's <tt class="filename">Makefile</tt>:
|
||
</p>
|
||
<table xmlns:html="http://www.w3.org/1999/xhtml" class="programlisting"><tr><td><pre>GNU_CONFIGURE= yes</pre></td></tr></table>
|
||
<p>
|
||
Note that this appends “<span class="quote">--prefix=${PREFIX}</span>” to
|
||
<tt class="varname">CONFIGURE_ARGS</tt>, so you don't
|
||
have to do that yourself, but may not be desired.
|
||
</p>
|
||
</div>
|
||
<div class="sect1" lang="en">
|
||
<div class="titlepage">
|
||
<div><div><h2 class="title" style="clear: both">
|
||
<a name="id2954262"></a>11.2. Other distrib methods than .tar.gz</h2></div></div>
|
||
<div></div>
|
||
</div>
|
||
<p>
|
||
If your package uses a different distribution method from
|
||
<tt class="filename">.tar.gz</tt>, take a
|
||
look at the package for <a xmlns:html="http://www.w3.org/1999/xhtml" href="ftp://ftp.netbsd.org/pub/NetBSD/packages/pkgsrc/editors/sam/README.html" class="pkgname">editors/sam</a>, which uses a gzipped shell archive
|
||
(shar), but the quick solution is to set
|
||
<tt class="varname">EXTRACT_SUFX</tt> to the name after the
|
||
<tt class="varname">DISTNAME</tt> field, and add the following to your
|
||
package's <tt class="filename">Makefile</tt>:
|
||
</p>
|
||
<table xmlns:html="http://www.w3.org/1999/xhtml" class="programlisting"><tr><td><pre>EXTRACT_SUFX= .msg.gz
|
||
EXTRACT_CMD= zcat
|
||
EXTRACT_BEFORE_ARGS=
|
||
EXTRACT_AFTER_ARGS= |sh</pre></td></tr></table>
|
||
</div>
|
||
<div class="sect1" lang="en">
|
||
<div class="titlepage">
|
||
<div><div><h2 class="title" style="clear: both">
|
||
<a name="id2954307"></a>11.3. Packages not creating their own subdirectory</h2></div></div>
|
||
<div></div>
|
||
</div>
|
||
<p>
|
||
Your package doesn't create a subdirectory for itself (like GNU software
|
||
does, for instance), but extracts itself in the current directory: see
|
||
<a xmlns:html="http://www.w3.org/1999/xhtml" href="ftp://ftp.netbsd.org/pub/NetBSD/packages/pkgsrc/editors/sam/README.html" class="pkgname">editors/sam</a> again, but the quick answer is:
|
||
</p>
|
||
<table xmlns:html="http://www.w3.org/1999/xhtml" class="programlisting"><tr><td><pre>WRKSRC= ${WRKDIR}</pre></td></tr></table>
|
||
<p>
|
||
Please note that the old:
|
||
</p>
|
||
<table xmlns:html="http://www.w3.org/1999/xhtml" class="programlisting"><tr><td><pre>NO_WRKSUBDIR= yes</pre></td></tr></table>
|
||
<p>
|
||
has been deprecated and should not be used.
|
||
</p>
|
||
</div>
|
||
<div class="sect1" lang="en">
|
||
<div class="titlepage">
|
||
<div><div><h2 class="title" style="clear: both">
|
||
<a name="id2955763"></a>11.4. Custom configuration process</h2></div></div>
|
||
<div></div>
|
||
</div>
|
||
<p>
|
||
Your package uses a weird Configure script, eg.
|
||
<a xmlns:html="http://www.w3.org/1999/xhtml" href="ftp://ftp.netbsd.org/pub/NetBSD/packages/pkgsrc/sysutils/top/README.html" class="pkgname">sysutils/top</a>. The quick answer is:
|
||
</p>
|
||
<table xmlns:html="http://www.w3.org/1999/xhtml" class="programlisting"><tr><td><pre>HAS_CONFIGURE= yes
|
||
CONFIGURE_SCRIPT= Configure
|
||
CONFIGURE_ARGS+= netbsd13</pre></td></tr></table>
|
||
</div>
|
||
<div class="sect1" lang="en">
|
||
<div class="titlepage">
|
||
<div><div><h2 class="title" style="clear: both">
|
||
<a name="id2955785"></a>11.5. Packages not building in their DISTNAME directory</h2></div></div>
|
||
<div></div>
|
||
</div>
|
||
<p>
|
||
Your package builds in a different directory from its base
|
||
<tt class="varname">DISTNAME</tt> (see <a xmlns:html="http://www.w3.org/1999/xhtml" href="ftp://ftp.netbsd.org/pub/NetBSD/packages/pkgsrc/lang/tcl/README.html" class="pkgname">lang/tcl</a> and
|
||
<a xmlns:html="http://www.w3.org/1999/xhtml" href="ftp://ftp.netbsd.org/pub/NetBSD/packages/pkgsrc/x11/tk/README.html" class="pkgname">x11/tk</a>).
|
||
</p>
|
||
<table xmlns:html="http://www.w3.org/1999/xhtml" class="programlisting"><tr><td><pre>WRKSRC= ${WRKDIR}/${DISTNAME}/unix</pre></td></tr></table>
|
||
</div>
|
||
<div class="sect1" lang="en">
|
||
<div class="titlepage">
|
||
<div><div><h2 class="title" style="clear: both">
|
||
<a name="id2955896"></a>11.6. How to fetch all distfiles at once</h2></div></div>
|
||
<div></div>
|
||
</div>
|
||
<p>
|
||
You would like to download all the distfiles in a single batch from work or
|
||
university, where you can't run a <b class="command">make fetch</b>. There
|
||
is an archive of distfiles on <a href="ftp://ftp.NetBSD.org/pub/NetBSD/packages/distfiles/" target="_top">ftp.NetBSD.org</a>,
|
||
but downloading the entire directory may not be appropriate.
|
||
</p>
|
||
<p>
|
||
The answer here is to do a <b class="command">make fetch-list</b> in
|
||
<tt class="filename">/usr/pkgsrc</tt>, carry the
|
||
resulting list to your machine at work/school and use it there If you don't
|
||
have a NetBSD-compatible ftp(1) (like lukemftp) at work, don't forget to
|
||
set <tt class="varname">FETCH_CMD</tt> to something that fetches an URL:
|
||
</p>
|
||
<p>
|
||
At home:
|
||
</p>
|
||
<table xmlns:html="http://www.w3.org/1999/xhtml" class="programlisting"><tr><td><pre><tt class="prompt">%</tt> <b class="userinput"><tt>cd /usr/pkgsrc</tt></b>
|
||
<tt class="prompt">%</tt> <b class="userinput"><tt>make fetch-list FETCH_CMD=wget DISTDIR=/tmp/distfiles >/tmp/fetch.sh</tt></b>
|
||
<tt class="prompt">%</tt> <b class="userinput"><tt>scp /tmp/fetch.sh work:/tmp</tt></b></pre></td></tr></table>
|
||
<p>
|
||
At work:
|
||
</p>
|
||
<table xmlns:html="http://www.w3.org/1999/xhtml" class="programlisting"><tr><td><pre><tt class="prompt">%</tt> <b class="userinput"><tt>sh /tmp/fetch.sh</tt></b></pre></td></tr></table>
|
||
<p>
|
||
then tar up <tt class="filename">/tmp/distfiles</tt> and take it home.
|
||
</p>
|
||
<p>
|
||
If you have a machine running NetBSD, and you want to get
|
||
<span class="emphasis"><em>all</em></span> distfiles
|
||
(even ones that aren't for your machine architecture), you can do so by
|
||
using the above-mentioned <b class="command">make fetch-list</b> approach, or
|
||
fetch the distfiles directly by running:
|
||
</p>
|
||
<table xmlns:html="http://www.w3.org/1999/xhtml" class="programlisting"><tr><td><pre><tt class="prompt">%</tt> <b class="userinput"><tt>make mirror-distfiles</tt></b></pre></td></tr></table>
|
||
<p>
|
||
If you even decide to ignore <tt class="varname">NO_{SRC,BIN}_ON_{FTP,CDROM}</tt>,
|
||
then you can get everything by running:
|
||
</p>
|
||
<table xmlns:html="http://www.w3.org/1999/xhtml" class="programlisting"><tr><td><pre><tt class="prompt">%</tt> <b class="userinput"><tt>make fetch NO_SKIP=yes</tt></b></pre></td></tr></table>
|
||
</div>
|
||
<div class="sect1" lang="en">
|
||
<div class="titlepage">
|
||
<div><div><h2 class="title" style="clear: both">
|
||
<a name="id2956076"></a>11.7. How to fetch files from behind a firewall</h2></div></div>
|
||
<div></div>
|
||
</div>
|
||
<p>
|
||
If you are sitting behind a firewall which does not allow direct connections
|
||
to Internet hosts (i.e. non-NAT), you may specify the relevant proxy hosts.
|
||
This is done using an environment variable in the form of a URL
|
||
e.g. in Amdahl, the machine “<span class="quote">orpheus.amdahl.com</span>” is one of
|
||
the firewalls, and it uses port 80 as the proxy port number. So the proxy
|
||
environment variables are:
|
||
</p>
|
||
<table xmlns:html="http://www.w3.org/1999/xhtml" class="programlisting"><tr><td><pre>ftp_proxy=ftp://orpheus.amdahl.com:80/
|
||
http_proxy=http://orpheus.amdahl.com:80/</pre></td></tr></table>
|
||
</div>
|
||
<div class="sect1" lang="en">
|
||
<div class="titlepage">
|
||
<div><div><h2 class="title" style="clear: both">
|
||
<a name="id2956098"></a>11.8. If your patch contains an RCS ID</h2></div></div>
|
||
<div></div>
|
||
</div>
|
||
<p>
|
||
See <a href="#components.patches" title="5.3. patches/*">Section 5.3, “patches/*”</a> for information on how to
|
||
remove RCS IDs from patch files.
|
||
</p>
|
||
</div>
|
||
<div class="sect1" lang="en">
|
||
<div class="titlepage">
|
||
<div><div><h2 class="title" style="clear: both">
|
||
<a name="id2956116"></a>11.9. How to pull in variables from /etc/mk.conf</h2></div></div>
|
||
<div></div>
|
||
</div>
|
||
<p>
|
||
The problem with package-defined variables that can be overridden via
|
||
<tt class="varname">MAKECONF</tt> or <tt class="filename">/etc/mk.conf</tt> is that make(1) expands a variable as it is
|
||
used, but evaluates preprocessor like statements (.if, .ifdef and
|
||
.ifndef) as they are read. So, to use any variable (which may be set
|
||
in <tt class="filename">/etc/mk.conf</tt>) in one of the .if* statements, the file
|
||
<tt class="filename">/etc/mk.conf</tt>
|
||
must be included before that .if* statement.
|
||
</p>
|
||
<p>
|
||
Rather than have a number of ad-hoc ways of including
|
||
<tt class="filename">/etc/mk.conf</tt>,
|
||
should it exist, or <tt class="varname">MAKECONF</tt>, should it exist, include the
|
||
<tt class="filename">pkgsrc/mk/bsd.prefs.mk</tt> file in the package Makefile before any
|
||
preprocessor-like .if, .ifdef, or .ifndef statements:
|
||
</p>
|
||
<table xmlns:html="http://www.w3.org/1999/xhtml" class="programlisting"><tr><td><pre>.include "../../mk/bsd.prefs.mk"
|
||
|
||
.if defined(USE_MENUS)
|
||
...
|
||
.endif</pre></td></tr></table>
|
||
</div>
|
||
<div class="sect1" lang="en">
|
||
<div class="titlepage">
|
||
<div><div><h2 class="title" style="clear: both">
|
||
<a name="id2956180"></a>11.10. Is there a mailing list for pkg-related discussion?</h2></div></div>
|
||
<div></div>
|
||
</div>
|
||
<p>
|
||
Yes, <tt class="email"><<a href="mailto:tech-pkg@NetBSD.org">tech-pkg@NetBSD.org</a>></tt> is the list for discussing package
|
||
related issues. To subscribe do:
|
||
</p>
|
||
<table xmlns:html="http://www.w3.org/1999/xhtml" class="programlisting"><tr><td><pre>% echo subscribe tech-pkg | mail majordomo@NetBSD.org</pre></td></tr></table>
|
||
</div>
|
||
<div class="sect1" lang="en">
|
||
<div class="titlepage">
|
||
<div><div><h2 class="title" style="clear: both">
|
||
<a name="id2956204"></a>11.11. How do I tell <b class="command">make fetch</b> to do passive FTP?</h2></div></div>
|
||
<div></div>
|
||
</div>
|
||
<p>
|
||
This depends on which utility is used to retrieve distfiles. From
|
||
<tt class="filename">bsd.pkg.mk</tt>, <tt class="varname">FETCH_CMD</tt> is assigned
|
||
the first available command from the following list:
|
||
</p>
|
||
<table xmlns:html="http://www.w3.org/1999/xhtml" class="programlisting"><tr><td><pre>/usr/bin/fetch
|
||
${LOCALBASE}/bsd/bin/ftp
|
||
/usr/bin/ftp</pre></td></tr></table>
|
||
<p>
|
||
On a default NetBSD install, this will be
|
||
<tt class="filename">/usr/bin/ftp</tt>, which automatically
|
||
tries passive connections first, and falls back to active connections if the
|
||
server refuses to do passive. For the other tools, add the following to your
|
||
<tt class="filename">/etc/mk.conf</tt> file:
|
||
<tt class="varname">PASSIVE_FETCH=1</tt>.
|
||
</p>
|
||
<p>
|
||
Having that option present will prevent
|
||
<tt class="filename">/usr/bin/ftp</tt> from falling back to
|
||
active transfers.
|
||
</p>
|
||
</div>
|
||
<div class="sect1" lang="en">
|
||
<div class="titlepage">
|
||
<div><div><h2 class="title" style="clear: both">
|
||
<a name="id2956350"></a>11.12. Dependencies on other packages</h2></div></div>
|
||
<div></div>
|
||
</div>
|
||
<p>
|
||
Your package may depend on some other package being present - and there are
|
||
various ways of expressing this dependency. NetBSD supports the
|
||
<tt class="varname">BUILD_DEPENDS</tt> and <tt class="varname">DEPENDS</tt> definitions,
|
||
as well as dependencies via
|
||
<tt class="filename">buildlink2.mk</tt> (see <a href="#buildlink2" title="Chapter 9. buildlink2 methodology">Chapter 9, <i>buildlink2 methodology</i></a>).
|
||
</p>
|
||
<p>
|
||
The basic difference between the two definitions is as follows: The
|
||
<tt class="varname">DEPENDS</tt> definition registers that pre-requisite in the binary package,
|
||
whilst the <tt class="varname">BUILD_DEPENDS</tt> definition does not.
|
||
</p>
|
||
<p>
|
||
This means that if you only need a package present whilst you are building,
|
||
it should be noted as a <tt class="varname">BUILD_DEPENDS</tt>.
|
||
</p>
|
||
<p>
|
||
The format for a <tt class="varname">BUILD_DEPENDS</tt> and a
|
||
<tt class="varname">DEPENDS</tt> definition is:
|
||
</p>
|
||
<table xmlns:html="http://www.w3.org/1999/xhtml" class="programlisting"><tr><td><pre><pre-req-package-name>:../../<category>/<pre-req-package></pre></td></tr></table>
|
||
<p>
|
||
Please note that the “<span class="quote">pre-req-package-name</span>” may include any of the wildcard
|
||
version numbers recognised by pkg_info(1).
|
||
</p>
|
||
<div class="orderedlist"><ol type="1">
|
||
<li>
|
||
<p>
|
||
If your package needs to use another package to build itself, this
|
||
is specified using the <tt class="varname">BUILD_DEPENDS</tt> definition.
|
||
</p>
|
||
<table xmlns:html="http://www.w3.org/1999/xhtml" class="programlisting"><tr><td><pre>BUILD_DEPENDS+= autoconf-2.13:../../devel/autoconf</pre></td></tr></table>
|
||
</li>
|
||
<li>
|
||
<p>
|
||
If your package needs a library with which to link, this is specified
|
||
using the <tt class="varname">DEPENDS</tt> definition. An example of this is
|
||
the <a xmlns:html="http://www.w3.org/1999/xhtml" href="ftp://ftp.netbsd.org/pub/NetBSD/packages/pkgsrc/print/lyx/README.html" class="pkgname">print/lyx</a>
|
||
package, which uses the xpm library, version 3.4j to build.
|
||
</p>
|
||
<table xmlns:html="http://www.w3.org/1999/xhtml" class="programlisting"><tr><td><pre>DEPENDS+= xpm-3.4j:../../graphics/xpm</pre></td></tr></table>
|
||
<p>
|
||
You can also use wildcards in package dependences:
|
||
</p>
|
||
<table xmlns:html="http://www.w3.org/1999/xhtml" class="programlisting"><tr><td><pre>DEPENDS+= xpm-[0-9]*:../../graphics/xpm</pre></td></tr></table>
|
||
<p>
|
||
Note that such wildcard dependencies are retained when creating binary
|
||
packages. The dependency is checked when installing the binary
|
||
package and any package which matches the pattern will be used.
|
||
Wildcard dependencies should be used with care.
|
||
</p>
|
||
<p>
|
||
The -[0-9]* should be used instead of -* to avoid potentially
|
||
ambiguous matches such as tk-postgresql matching a tk-*
|
||
<tt class="varname">DEPENDS</tt>.
|
||
</p>
|
||
</li>
|
||
<li>
|
||
<p>
|
||
If your package needs some executable to be able to run correctly, this
|
||
is specified using the <tt class="varname">DEPENDS</tt> definition. The
|
||
<a xmlns:html="http://www.w3.org/1999/xhtml" href="ftp://ftp.netbsd.org/pub/NetBSD/packages/pkgsrc/print/lyx/README.html" class="pkgname">print/lyx</a> package needs
|
||
to be able to execute the latex binary from the teTeX package when it runs,
|
||
and that is specified:
|
||
</p>
|
||
<table xmlns:html="http://www.w3.org/1999/xhtml" class="programlisting"><tr><td><pre>DEPENDS+= teTeX-[0-9]*:../../print/teTeX</pre></td></tr></table>
|
||
<p>
|
||
The comment about wildcard dependencies from previous paragraph
|
||
applies here, too.
|
||
</p>
|
||
</li>
|
||
</ol></div>
|
||
<p>
|
||
If your package needs files from another package to build, see the
|
||
first part of the “<span class="quote">do-configure</span>” target
|
||
<a xmlns:html="http://www.w3.org/1999/xhtml" href="ftp://ftp.netbsd.org/pub/NetBSD/packages/pkgsrc/print/ghostscript5/README.html" class="pkgname">print/ghostscript5</a> package
|
||
(it relies on the jpeg sources being present in source form during the
|
||
build):
|
||
</p>
|
||
<table xmlns:html="http://www.w3.org/1999/xhtml" class="programlisting"><tr><td><pre>if [ ! -e ${_PKGSRCDIR}/graphics/jpeg/${WRKDIR:T}/jpeg-6b ]; then \
|
||
cd ${_PKGSRCDIR}/../../graphics/jpeg && ${MAKE} extract; \
|
||
fi</pre></td></tr></table>
|
||
<p>
|
||
If you build any other packages that way, please make sure the working
|
||
files are deleted too when this package's working files are cleaned up.
|
||
The easiest way to do so is by adding a pre-clean target:
|
||
</p>
|
||
<table xmlns:html="http://www.w3.org/1999/xhtml" class="programlisting"><tr><td><pre>pre-clean:
|
||
cd ${_PKGSRCDIR}/../../graphics/jpeg && ${MAKE} clean</pre></td></tr></table>
|
||
<p>
|
||
Please also note the <tt class="varname">BUILD_USES_MSGFMT</tt> and
|
||
<tt class="varname">BUILD_USES_GETTEXT_M4</tt> definitions,
|
||
which are provided as convenience definitions. The former works out whether
|
||
msgfmt(1) is part of the base system, and, if it isn't, installs the
|
||
<a xmlns:html="http://www.w3.org/1999/xhtml" href="ftp://ftp.netbsd.org/pub/NetBSD/packages/pkgsrc/devel/gettext/README.html" class="pkgname">devel/gettext</a> package. The latter adds a build dependency on either an
|
||
installed version of an older gettext package, or if it isn't, installs the
|
||
<a xmlns:html="http://www.w3.org/1999/xhtml" href="ftp://ftp.netbsd.org/pub/NetBSD/packages/pkgsrc/devel/gettext-m4/README.html" class="pkgname">devel/gettext-m4</a> package.
|
||
</p>
|
||
</div>
|
||
<div class="sect1" lang="en">
|
||
<div class="titlepage">
|
||
<div><div><h2 class="title" style="clear: both">
|
||
<a name="id2956571"></a>11.13. Conflicts with other packages</h2></div></div>
|
||
<div></div>
|
||
</div>
|
||
<p>
|
||
Your package may conflict with other packages a user might already have
|
||
installed on his system, e.g. if your package installs the same set of
|
||
files like another package in our pkgsrc tree.
|
||
</p>
|
||
<p>
|
||
In this case you can set <tt class="varname">CONFLICTS</tt> to a space separated
|
||
list of packages (including version string) your package conflicts with.
|
||
</p>
|
||
<p>
|
||
For example <a xmlns:html="http://www.w3.org/1999/xhtml" href="ftp://ftp.netbsd.org/pub/NetBSD/packages/pkgsrc/x11/Xaw3d/README.html" class="pkgname">x11/Xaw3d</a> and
|
||
<a xmlns:html="http://www.w3.org/1999/xhtml" href="ftp://ftp.netbsd.org/pub/NetBSD/packages/pkgsrc/x11/Xaw-Xpm/README.html" class="pkgname">x11/Xaw-Xpm</a> install provide the
|
||
same shared library, thus you set in
|
||
<tt class="filename">pkgsrc/x11/Xaw3d/Makefile</tt>:
|
||
</p>
|
||
<table xmlns:html="http://www.w3.org/1999/xhtml" class="programlisting"><tr><td><pre>CONFLICTS= Xaw-Xpm-[0-9]*</pre></td></tr></table>
|
||
<p>
|
||
and in <tt class="filename">pkgsrc/x11/Xaw-Xpm/Makefile</tt>:
|
||
</p>
|
||
<table xmlns:html="http://www.w3.org/1999/xhtml" class="programlisting"><tr><td><pre>CONFLICTS= Xaw3d-[0-9]*</pre></td></tr></table>
|
||
<p>
|
||
Packages will automatically conflict with other packages with the name prefix
|
||
and a different version string. “<span class="quote">Xaw3d-1.5</span>” e.g. will automatically conflict
|
||
with the older version “<span class="quote">Xaw3d-1.3</span>”.
|
||
</p>
|
||
</div>
|
||
<div class="sect1" lang="en">
|
||
<div class="titlepage">
|
||
<div><div><h2 class="title" style="clear: both">
|
||
<a name="id2956642"></a>11.14. Software which has a WWW Home Page</h2></div></div>
|
||
<div></div>
|
||
</div>
|
||
<p>
|
||
The NetBSD packages system now supports a variable called
|
||
<tt class="varname">HOMEPAGE</tt>.
|
||
If the software being packaged has a home page, the Makefile should
|
||
include the URL for that page in the <tt class="varname">HOMEPAGE</tt> variable.
|
||
The definition of the variable should be placed immediately after the
|
||
<tt class="varname">MAINTAINER</tt> variable.
|
||
</p>
|
||
</div>
|
||
<div class="sect1" lang="en">
|
||
<div class="titlepage">
|
||
<div><div><h2 class="title" style="clear: both">
|
||
<a name="id2956667"></a>11.15. How to handle modified distfiles with the 'old' name</h2></div></div>
|
||
<div></div>
|
||
</div>
|
||
<p>
|
||
Sometimes authors of a software package make some modifications after the
|
||
software was released, and they put up a new distfile without changing the
|
||
package's version number. If a package is already in pkgsrc at that time,
|
||
the md5 checksum will no longer match. The correct way to work around this
|
||
is to update the package's md5 checksum to match the package on the master
|
||
site (beware, any mirrors may not be up to date yet!), and to remove the
|
||
old distfile from ftp.NetBSD.org's
|
||
<tt class="filename">/pub/NetBSD/packages/distfiles</tt> directory.
|
||
Furthermore, a mail to the package's author seems appropriate making sure
|
||
the distfile was really updated on purpose, and that no trojan horse or so
|
||
crept in.
|
||
</p>
|
||
</div>
|
||
<div class="sect1" lang="en">
|
||
<div class="titlepage">
|
||
<div><div><h2 class="title" style="clear: both">
|
||
<a name="id2956764"></a>11.16. What does "Don't know how to make /usr/share/tmac/tmac.andoc" mean?</h2></div></div>
|
||
<div></div>
|
||
</div>
|
||
<p>
|
||
When compiling the <a xmlns:html="http://www.w3.org/1999/xhtml" href="ftp://ftp.netbsd.org/pub/NetBSD/packages/pkgsrc/pkgtools/pkg_install/README.html" class="pkgname">pkgtools/pkg_install</a> package, you get the error
|
||
from make that it doesn't know how to make
|
||
<tt class="filename">/usr/share/tmac/tmac.andoc</tt>? This
|
||
indicates that you don't have installed the “<span class="quote">text</span>” set on your machine
|
||
(nroff, ...). It is recommended to do that.
|
||
</p>
|
||
<p>
|
||
In the case of the <a xmlns:html="http://www.w3.org/1999/xhtml" href="ftp://ftp.netbsd.org/pub/NetBSD/packages/pkgsrc/pkgtools/pkg_install/README.html" class="pkgname">pkgtools/pkg_install</a> package, you can get
|
||
away with setting <tt class="varname">NOMAN=YES</tt> either in the environment
|
||
or in <tt class="filename">/etc/mk.conf</tt>.
|
||
</p>
|
||
</div>
|
||
<div class="sect1" lang="en">
|
||
<div class="titlepage">
|
||
<div><div><h2 class="title" style="clear: both">
|
||
<a name="id2956809"></a>11.17. How to handle incrementing versions when fixing an existing
|
||
package</h2></div></div>
|
||
<div></div>
|
||
</div>
|
||
<p>
|
||
When making fixes to an existing package it can be useful to change
|
||
the version number in <tt class="varname">PKGNAME</tt>. To avoid conflicting with
|
||
future versions
|
||
by the original author, a “<span class="quote">nb1</span>”, “<span class="quote">nb2</span>”, ... suffix
|
||
can be used on package
|
||
versions by setting <tt class="varname">PKGREVISION=1</tt> (2,. ..). The
|
||
“<span class="quote">nb</span>” is treated like a “<span class="quote">.</span>” by the pkg tools. e.g.
|
||
</p>
|
||
<table xmlns:html="http://www.w3.org/1999/xhtml" class="programlisting"><tr><td><pre>DISTNAME= foo-17.42
|
||
PKGREVISION= 9</pre></td></tr></table>
|
||
<p>
|
||
will result in a <tt class="varname">PKGNAME</tt> of “<span class="quote">foo-17.42nb9</span>”.
|
||
</p>
|
||
<p>
|
||
When a new release of the package is released, the
|
||
<tt class="varname">PKGREVISION</tt> should be
|
||
removed. e.g. on a new minor release of the above package, things should
|
||
be like:
|
||
</p>
|
||
<table xmlns:html="http://www.w3.org/1999/xhtml" class="programlisting"><tr><td><pre>DISTNAME= foo-17.43</pre></td></tr></table>
|
||
</div>
|
||
<div class="sect1" lang="en">
|
||
<div class="titlepage">
|
||
<div><div><h2 class="title" style="clear: both">
|
||
<a name="id2956956"></a>11.18. Could not find bsd.own.mk - what's wrong?</h2></div></div>
|
||
<div></div>
|
||
</div>
|
||
<p>
|
||
You didn't install the compiler set, <tt class="filename">comp.tgz</tt>, when
|
||
you installed your NetBSD machine. Please get it and install it, by
|
||
extracting it in <tt class="filename">/</tt>:
|
||
</p>
|
||
<table xmlns:html="http://www.w3.org/1999/xhtml" class="programlisting"><tr><td><pre><tt class="prompt">#</tt> <b class="userinput"><tt>cd /</tt></b>
|
||
<tt class="prompt">#</tt> <b class="userinput"><tt>tar --unlink -zxvpf .../comp.tgz</tt></b></pre></td></tr></table>
|
||
<p>
|
||
<tt class="filename">comp.tgz</tt> is part of every NetBSD release. Get
|
||
the one that corresponds to your release (determine via
|
||
<b class="command">uname -r</b>).
|
||
</p>
|
||
</div>
|
||
<div class="sect1" lang="en">
|
||
<div class="titlepage">
|
||
<div><div><h2 class="title" style="clear: both">
|
||
<a name="id2957027"></a>11.19. Restricted packages</h2></div></div>
|
||
<div></div>
|
||
</div>
|
||
<p>
|
||
Some licenses restrict how software may be re-distributed. In order to
|
||
satisfy these restrictions, the package system defines five make variables
|
||
that can be set to note these restrictions:
|
||
</p>
|
||
<div class="itemizedlist"><ul type="disc">
|
||
<li>
|
||
<p><tt class="varname">RESTRICTED</tt></p>
|
||
<p>
|
||
This variable should be set whenever a restriction exists
|
||
(regardless of its kind). Set this variable to a string
|
||
containing the reason for the restriction.
|
||
</p>
|
||
</li>
|
||
<li>
|
||
<p><tt class="varname">NO_BIN_ON_CDROM</tt></p>
|
||
<p>
|
||
Binaries may not be placed on CD-ROM. Set this variable to
|
||
<tt class="varname">${RESTRICTED}</tt> whenever a binary package may not
|
||
be included on a CD-ROM.
|
||
</p>
|
||
</li>
|
||
<li>
|
||
<p><tt class="varname">NO_BIN_ON_FTP</tt></p>
|
||
<p>
|
||
Binaries may not be placed on an FTP server. Set this
|
||
variable to <tt class="varname">${RESTRICTED}</tt> whenever a binary package
|
||
may not not be made available on the Internet.
|
||
</p>
|
||
</li>
|
||
<li>
|
||
<p><tt class="varname">NO_SRC_ON_CDROM</tt></p>
|
||
<p>
|
||
Distfiles may not be placed on CD-ROM. Set this variable to
|
||
<tt class="varname">${RESTRICTED}</tt> if re-distribution of the source code
|
||
or other distfile(s) is not allowed on CD-ROMs.
|
||
</p>
|
||
</li>
|
||
<li>
|
||
<p><tt class="varname">NO_SRC_ON_FTP</tt></p>
|
||
<p>
|
||
Distfiles may not be placed on FTP. Set this variable to
|
||
<tt class="varname">${RESTRICTED}</tt> if re-distribution of the source
|
||
code or other distfile(s) via the Internet is not allowed.
|
||
</p>
|
||
</li>
|
||
</ul></div>
|
||
<p>
|
||
Please note that the use of <tt class="varname">NO_PACKAGE</tt>,
|
||
<tt class="varname">IGNORE</tt>, <tt class="varname">NO_CDROM</tt>, or other generic
|
||
make variables to denote restrictions is deprecated, because they
|
||
unconditionally prevent users from generating binary packages!
|
||
</p>
|
||
</div>
|
||
<div class="sect1" lang="en">
|
||
<div class="titlepage">
|
||
<div><div><h2 class="title" style="clear: both">
|
||
<a name="id2957213"></a>11.20. Packages using (n)curses</h2></div></div>
|
||
<div></div>
|
||
</div>
|
||
<p>
|
||
Some packages need curses functionality that wasn't present in NetBSD's own
|
||
curses prior to 1.4Y.
|
||
</p>
|
||
<p>
|
||
If <tt class="filename">../../devel/ncurses/buildlink2.mk</tt> is included in
|
||
a package's <tt class="filename">Makefile</tt>,
|
||
then a curses library and headers with ncurses functionality are linked
|
||
into <tt class="varname">${BUILDLINK_DIR}</tt> at pre-configure time. If
|
||
ncurses is actually required, then define <tt class="varname">USE_NCURSES</tt>
|
||
in the package's <tt class="filename">Makefile</tt>.
|
||
</p>
|
||
</div>
|
||
<div class="sect1" lang="en">
|
||
<div class="titlepage">
|
||
<div><div><h2 class="title" style="clear: both">
|
||
<a name="id2957255"></a>11.21. Automated security check</h2></div></div>
|
||
<div></div>
|
||
</div>
|
||
<p>
|
||
Please be aware that there can often be bugs in third-party software,
|
||
and some of these bugs can leave a machine vulnerable to exploitation
|
||
by attackers. In an effort to lessen the exposure, the NetBSD
|
||
packages team maintains a database of known-exploits to packages which
|
||
have at one time been included in pkgsrc. The database can be
|
||
downloaded automatically, and a security audit of all packages
|
||
installed on a system can take place. To do this, install the
|
||
<a xmlns:html="http://www.w3.org/1999/xhtml" href="ftp://ftp.netbsd.org/pub/NetBSD/packages/pkgsrc/security/audit-packages/README.html" class="pkgname">security/audit-packages</a> package. It has two components:
|
||
</p>
|
||
<div class="orderedlist"><ol type="1">
|
||
<li>
|
||
<p>
|
||
“<span class="quote">download-vulnerability-list</span>”, an easy way to download a list of the
|
||
security vulnerabilities information. This list is kept up to date by
|
||
the NetBSD security officer and the NetBSD packages team, and is
|
||
distributed from the NetBSD ftp server:
|
||
</p>
|
||
<p>
|
||
<a href="ftp://ftp.NetBSD.org/pub/NetBSD/packages/distfiles/vulnerabilities" target="_top">ftp://ftp.NetBSD.org/pub/NetBSD/packages/distfiles/vulnerabilities</a>
|
||
</p>
|
||
</li>
|
||
<li><p>
|
||
“<span class="quote">audit-packages</span>”, an easy way to audit the current machine, checking
|
||
each vulnerability which is known. If a vulnerable package is
|
||
installed, it will be shown by output to stdout, including a
|
||
description of the type of vulnerability, and a URL containing more
|
||
information.
|
||
</p></li>
|
||
</ol></div>
|
||
<p>
|
||
Use of the audit-packages package is strongly recommended.
|
||
</p>
|
||
<p>
|
||
The following message is displayed as part of the audit-packages
|
||
installation procedure:
|
||
</p>
|
||
<table xmlns:html="http://www.w3.org/1999/xhtml" class="programlisting"><tr><td><pre>
|
||
======================================================================
|
||
You may wish to have the vulnerabilities file downloaded daily so that
|
||
it remains current. This may be done by adding an appropriate entry
|
||
to the root users crontab(5) entry. For example the entry
|
||
|
||
# download vulnerabilities file
|
||
0 3 * * * ${PREFIX}/sbin/download-vulnerability-list >/dev/null 2>&1
|
||
|
||
will update the vulnerability list every day at 3AM.
|
||
|
||
In addition, you may wish to run the package audit from the daily
|
||
security script. This may be accomplished by adding the following
|
||
lines to /etc/security.local
|
||
|
||
if [ -x ${PREFIX}/sbin/audit-packages ]; then
|
||
${PREFIX}/sbin/audit-packages
|
||
fi
|
||
======================================================================
|
||
</pre></td></tr></table>
|
||
<p>
|
||
Note to package developers: When a vulnerability is found, this should be
|
||
noted in
|
||
<tt class="filename">localsrc/security/advisories/pkg-vulnerabilities</tt>, and after the
|
||
commit of that file, it should be copied to
|
||
<tt class="filename">/pub/NetBSD/packages/distfiles/vulnerabilities</tt> on ftp.NetBSD.org.
|
||
</p>
|
||
</div>
|
||
<div class="sect1" lang="en">
|
||
<div class="titlepage">
|
||
<div><div><h2 class="title" style="clear: both">
|
||
<a name="id2957425"></a>11.22. What's the proper way to create an account from a package?</h2></div></div>
|
||
<div></div>
|
||
</div>
|
||
<p>
|
||
There are two make variables used to control the creation of package-specific
|
||
groups and users at pre-install time. The first is
|
||
<tt class="varname">PKG_GROUPS</tt>, which is a
|
||
list of group[:groupid] elements, where the groupid is optional. The second
|
||
is <tt class="varname">PKG_USERS</tt>, which is a list of elements of the form:
|
||
</p>
|
||
<table xmlns:html="http://www.w3.org/1999/xhtml" class="programlisting"><tr><td><pre>user:group[:[userid][:[description][:[home][:shell]]]]</pre></td></tr></table>
|
||
<p>
|
||
where only the user and group are required, the rest being optional. A
|
||
simple example is:
|
||
</p>
|
||
<table xmlns:html="http://www.w3.org/1999/xhtml" class="programlisting"><tr><td><pre>PKG_GROUPS= foogroup
|
||
PKG_USERS= foouser:foogroup</pre></td></tr></table>
|
||
<p>
|
||
A more complex example is that creates two groups and two users is:
|
||
</p>
|
||
<table xmlns:html="http://www.w3.org/1999/xhtml" class="programlisting"><tr><td><pre>PKG_GROUPS= group1 group2:1005
|
||
PKG_USERS= first:group1::First\\ User \
|
||
second:group2::Second\\ User:/home/second:${SH}</pre></td></tr></table>
|
||
<p>
|
||
By default, a new user will have home directory
|
||
<tt class="filename">/nonexistent</tt>, and login shell
|
||
<tt class="filename">/sbin/nologin</tt> unless they are specified as part of
|
||
the user element.
|
||
</p>
|
||
<p>
|
||
The package Makefile must also include
|
||
<tt class="filename">../../mk/bsd.pkg.install.mk</tt> prior to
|
||
the inclusion of <tt class="filename">bsd.pkg.mk</tt>. This will cause the users and groups to be
|
||
created at pre-install time, and the admin will be prompted to remove them at
|
||
post-deinstall time. Automatic creation of the users and groups can be
|
||
toggled on and off by setting the environment variable
|
||
<tt class="varname">PKG_CREATE_USERGROUP</tt> prior to package installation.
|
||
</p>
|
||
</div>
|
||
<div class="sect1" lang="en">
|
||
<div class="titlepage">
|
||
<div><div><h2 class="title" style="clear: both">
|
||
<a name="id2957593"></a>11.23. How to handle compiler bugs</h2></div></div>
|
||
<div></div>
|
||
</div>
|
||
<p>
|
||
Some source files trigger bugs in the compiler, based on combinations
|
||
of compiler version and architecture and almost always relation to
|
||
optimisation being enabled. Common symptoms are gcc internal errors
|
||
or never finishing compiling a file.
|
||
</p>
|
||
<p>
|
||
Typically a workaround involves testing the <tt class="varname">MACHINE_ARCH</tt>
|
||
and compiler version, disabling optimisation for that
|
||
file/<tt class="varname">MACHINE_ARCH</tt>/compiler
|
||
combination, and documenting it in <tt class="filename">doc/HACKS</tt>. See
|
||
<tt class="filename">doc/HACKS</tt> for examples.
|
||
</p>
|
||
</div>
|
||
<div class="sect1" lang="en">
|
||
<div class="titlepage">
|
||
<div><div><h2 class="title" style="clear: both">
|
||
<a name="features.info-files"></a>11.24. Packages providing info files</h2></div></div>
|
||
<div></div>
|
||
</div>
|
||
<p>
|
||
Some packages install info files or use the “<span class="quote">makeinfo</span>”
|
||
or “<span class="quote">install-info</span>” commands. Each info file:
|
||
</p>
|
||
<div class="itemizedlist"><ul type="disc">
|
||
<li>is considered to be installed in the directory
|
||
<tt class="filename">${PREFIX}/${INFO_DIR}</tt>,</li>
|
||
<li>is registered in the Info directory file
|
||
<tt class="filename">${PREFIX}/${INFO_DIR}/dir</tt>,</li>
|
||
<li>and must be listed as a filename in the
|
||
<tt class="varname">INFO_FILES</tt> variable in the package
|
||
Makefile.</li>
|
||
</ul></div>
|
||
<p>
|
||
</p>
|
||
<p>
|
||
<tt class="varname">INFO_DIR</tt> defaults to “<span class="quote">info</span>” and can be
|
||
overridden in the package Makefile. <tt class="filename">INSTALL</tt> and
|
||
<tt class="filename">DEINSTALL</tt> scripts will be generated for handling
|
||
registration of the info files in the Info directory file. The command
|
||
“<span class="quote">install-info</span>” used for the info files registration is
|
||
either provided by the system, or by a special purpose package
|
||
automatically added as dependency if needed.
|
||
</p>
|
||
<p>
|
||
A package which need the “<span class="quote">makeinfo</span>” command at build
|
||
time must define the variable <tt class="varname">USE_MAKEINFO</tt> in its
|
||
Makefile. If a minimum version of the “<span class="quote">makeinfo</span>” command
|
||
is needed it should be noted with the <tt class="varname">TEXINFO_REQD</tt>
|
||
variable in the package Makefile. By default, a minimum version of 3.12
|
||
is required. If the system does not provide a “<span class="quote">makeinfo</span>”
|
||
command or if it does not match the required minimum, a build dependency
|
||
on the <a xmlns:html="http://www.w3.org/1999/xhtml" href="ftp://ftp.netbsd.org/pub/NetBSD/packages/pkgsrc/devel/gtexinfo/README.html" class="pkgname">devel/gtexinfo</a> package is added automatically.
|
||
</p>
|
||
<p>
|
||
The installation process of the software provided by the package must not
|
||
use “<span class="quote">install-info</span>”, as the registration of info files
|
||
is the task of the package INSTALL sript, and it must use
|
||
the right “<span class="quote">makeinfo</span>”.
|
||
</p>
|
||
<p>
|
||
If the package use buildlink2 framework no special action should be needed
|
||
to achieve this goal.
|
||
</p>
|
||
<p>
|
||
If the package does not use the buildlink2 framework patch files are likely
|
||
to be needed so the build and installation process of the software
|
||
picks up the <span class="emphasis"><em>possibly dummy</em></span> values of
|
||
<tt class="varname">INSTALL_INFO</tt> and <tt class="varname">MAKEINFO</tt>
|
||
variables.
|
||
</p>
|
||
<div class="note" style="margin-left: 0.5in; margin-right: 0.5in;">
|
||
<h3 class="title">Note</h3>
|
||
Temporarily, the variable <tt class="varname">USE_NEW_TEXINFO</tt> must be
|
||
defined in the package Makefile. Previously, info files,
|
||
“<span class="quote">install-info</span>” and “<span class="quote">makeinfo</span>”
|
||
were handled somewhat differently and the two ways will coexist for
|
||
a short period of time until all older packages are updated.
|
||
</div>
|
||
</div>
|
||
<div class="sect1" lang="en">
|
||
<div class="titlepage">
|
||
<div><div><h2 class="title" style="clear: both">
|
||
<a name="id2957793"></a>11.25. Packages whose distfiles aren't available for plain downloading</h2></div></div>
|
||
<div></div>
|
||
</div>
|
||
<p>
|
||
If you need to download from a dynamic URL you can set
|
||
<tt class="varname">DYNAMIC_MASTER_SITES</tt>
|
||
and a <b class="command">make fetch</b> will call
|
||
<tt class="filename">files/getsite.sh</tt> with the name of each file
|
||
to download as an argument, expecting it to output the URL of the directory
|
||
from which to download it. <a xmlns:html="http://www.w3.org/1999/xhtml" href="ftp://ftp.netbsd.org/pub/NetBSD/packages/pkgsrc/graphics/ns-cult3d/README.html" class="pkgname">graphics/ns-cult3d</a> is an example of this usage.
|
||
</p>
|
||
<p>
|
||
If the download can't be automated, because the user must submit personal
|
||
information to apply for a password, or must pay for the source, or whatever,
|
||
you can set <tt class="varname">_FETCH_MESSAGE</tt> to a macro which displays
|
||
a message explaining the situation. <tt class="varname">_FETCH_MESSAGE</tt> must
|
||
be executable shell commands, not just a message. (Generally, it executes
|
||
<tt class="varname">${ECHO}</tt>). As of this writing, the following
|
||
packages use this: <a xmlns:html="http://www.w3.org/1999/xhtml" href="ftp://ftp.netbsd.org/pub/NetBSD/packages/pkgsrc/audio/realplayer/README.html" class="pkgname">audio/realplayer</a>,
|
||
<a xmlns:html="http://www.w3.org/1999/xhtml" href="ftp://ftp.netbsd.org/pub/NetBSD/packages/pkgsrc/cad/simian/README.html" class="pkgname">cad/simian</a>, <a xmlns:html="http://www.w3.org/1999/xhtml" href="ftp://ftp.netbsd.org/pub/NetBSD/packages/pkgsrc/devel/ipv6socket/README.html" class="pkgname">devel/ipv6socket</a>,
|
||
<a xmlns:html="http://www.w3.org/1999/xhtml" href="ftp://ftp.netbsd.org/pub/NetBSD/packages/pkgsrc/emulators/vmare-module/README.html" class="pkgname">emulators/vmare-module</a>,
|
||
<a xmlns:html="http://www.w3.org/1999/xhtml" href="ftp://ftp.netbsd.org/pub/NetBSD/packages/pkgsrc/fonts/acroread-jpnfont/README.html" class="pkgname">fonts/acroread-jpnfont</a>,
|
||
<a xmlns:html="http://www.w3.org/1999/xhtml" href="ftp://ftp.netbsd.org/pub/NetBSD/packages/pkgsrc/sysutils/storage-manager/README.html" class="pkgname">sysutils/storage-manager</a>,
|
||
<a xmlns:html="http://www.w3.org/1999/xhtml" href="ftp://ftp.netbsd.org/pub/NetBSD/packages/pkgsrc/www/ap-aolserver/README.html" class="pkgname">www/ap-aolserver</a>, <a xmlns:html="http://www.w3.org/1999/xhtml" href="ftp://ftp.netbsd.org/pub/NetBSD/packages/pkgsrc/www/openacs/README.html" class="pkgname">www/openacs</a>. Try to be consistent
|
||
with them.
|
||
</p>
|
||
</div>
|
||
<div class="sect1" lang="en">
|
||
<div class="titlepage">
|
||
<div><div><h2 class="title" style="clear: both">
|
||
<a name="id2957953"></a>11.26. Configuration files handling and placement</h2></div></div>
|
||
<div></div>
|
||
</div>
|
||
<p>
|
||
The global variable <tt class="varname">PKG_SYSCONFBASE</tt> (and some others)
|
||
can be set by the system administrator in <tt class="filename">/etc/mk.conf</tt>
|
||
to define the place where
|
||
configuration files get installed. Therefore, packages must be adapted to
|
||
support this feature. Keep in mind that you should only install files that
|
||
are strictly necessary in the configuration directory, files that can
|
||
go to <tt class="filename">$PREFIX/share</tt> should go there.
|
||
</p>
|
||
<p>
|
||
We will take a look at available variables first
|
||
(<tt class="filename">bsd.pkg.mk</tt> contains more
|
||
information). <tt class="varname">PKG_SYSCONFDIR</tt> is where the
|
||
configuration files for a package
|
||
may be found (that is, the full path, e.g. <tt class="filename">/etc</tt>
|
||
or <tt class="filename">/usr/pkg/etc</tt>). This
|
||
value may be customized in various ways:
|
||
</p>
|
||
<div class="orderedlist"><ol type="1">
|
||
<li><p>
|
||
<tt class="varname">PKG_SYSCONFBASE</tt> is the main config directory under
|
||
which all package configuration files are to be found. Users will
|
||
typically want to set it to <tt class="filename">/etc</tt>, or accept the
|
||
default location of <tt class="filename">$PREFIX/etc</tt>.
|
||
</p></li>
|
||
<li><p>
|
||
<tt class="varname">PKG_SYSCONFSUBDIR</tt> is the subdirectory of
|
||
<tt class="varname">PKG_SYSCONFBASE</tt> under which
|
||
the configuration files for a particular package may be found. Defaults
|
||
to <tt class="varname">${SYSCONFBASE}</tt>.
|
||
</p></li>
|
||
<li><p>
|
||
<tt class="varname">PKG_SYSCONFVAR</tt> is the special suffix used to
|
||
distinguish any overriding values for a particular package
|
||
(see next item). It defaults to <tt class="varname">${PKGBASE}</tt>, but
|
||
for a collection of related packages that should all have the same
|
||
<tt class="varname">PKG_SYSCONFDIR</tt> value, it can be set in each of
|
||
the package Makefiles to a common value.
|
||
</p></li>
|
||
<li>
|
||
<p>
|
||
<tt class="varname">PKG_SYSCONFDIR.${PKG_SYSCONFVAR}</tt> overrides the value of
|
||
<tt class="varname">${PKG_SYSCONFDIR}</tt> for packages with the same value
|
||
for <tt class="varname">PKG_SYSCONFVAR</tt>.
|
||
</p>
|
||
<p>
|
||
As an example, all the various KDE packages may want to set
|
||
<tt class="varname">PKG_SYSCONFVAR</tt> to “<span class="quote">kde</span>” so admins can
|
||
set <tt class="varname">PKG_SYSCONFDIR.kde</tt> in
|
||
<tt class="filename">/etc/mk.conf</tt> to define where to install KDE
|
||
config files.
|
||
</p>
|
||
</li>
|
||
</ol></div>
|
||
<p>
|
||
Programs' configuration directory should be defined during the configure
|
||
stage. Packages that use GNU autoconf can usually do this by using the
|
||
“<span class="quote">--sysconfdir</span>” parameter, but this brings some problems as
|
||
we will see now.
|
||
When you change this pathname in packages, you should not allow them to
|
||
install files in that directory directly. Instead they need to install
|
||
those files under <tt class="filename">share/examples/${PKGNAME}</tt> so
|
||
<tt class="filename">PLIST</tt> can register them.
|
||
</p>
|
||
<p>
|
||
Once you have the required configuration files in place (under the
|
||
<tt class="filename">share/examples</tt> directory) the variable
|
||
<tt class="varname">CONF_FILES</tt> should be set to copy
|
||
them into <tt class="varname">PKG_SYSCONFDIR</tt>. The contents of this variable
|
||
is formed by pairs
|
||
of filenames; the first element of the pair specifies the file inside the
|
||
examples directory (registered by <tt class="filename">PLIST</tt>) and the
|
||
second element specifies
|
||
the target file. This is done this way to allow binary packages to place
|
||
files in the right directory using
|
||
<tt class="filename">INSTALL</tt>/<tt class="filename">DEINSTALL</tt> scripts which are
|
||
created automatically. The package <tt class="filename">Makefile</tt> must also
|
||
include <tt class="filename">../../mk/bsd.pkg.install.mk</tt> prior to the
|
||
inclusion of <tt class="filename">bsd.pkg.mk</tt> to use
|
||
these automatically generated scripts. The automatic copying of config
|
||
files can be toggled by setting the environment variable
|
||
<tt class="varname">PKG_CONFIG</tt> prior to package installation.
|
||
</p>
|
||
<p>
|
||
Here is an example, taken from mail/mutt/Makefile:
|
||
</p>
|
||
<table xmlns:html="http://www.w3.org/1999/xhtml" class="programlisting"><tr><td><pre>EGDIR= ${PREFIX}/share/doc/mutt/samples
|
||
CONF_FILES= ${EGDIR}/Muttrc ${PKG_SYSCONFDIR}/Muttrc</pre></td></tr></table>
|
||
<p>
|
||
As you can see, this package installs configuration files inside
|
||
<tt class="varname">EGDIR</tt>, which are registered by
|
||
<tt class="filename">PLIST</tt>. After that, the variable
|
||
<tt class="varname">CONF_FILES</tt> lists
|
||
the installed file first and then the target file. Users will also get an
|
||
automatic message when files are installed using this method.
|
||
</p>
|
||
</div>
|
||
<div class="sect1" lang="en">
|
||
<div class="titlepage">
|
||
<div><div><h2 class="title" style="clear: both">
|
||
<a name="id2958470"></a>11.27. Packages providing login shells</h2></div></div>
|
||
<div></div>
|
||
</div>
|
||
<p>
|
||
If the purpose of the package is to provide a login shell, the variable
|
||
<tt class="varname">PKG_SHELL</tt> should contain the full pathname of the
|
||
shell executable installed by this package. The package
|
||
<tt class="filename">Makefile</tt> also must include
|
||
<tt class="filename">../../mk/bsd.pkg.install.mk</tt> prior to the inclusion of
|
||
<tt class="filename">bsd.pkg.mk</tt> to use the
|
||
automatically generated
|
||
<tt class="filename">INSTALL</tt>/<tt class="filename">DEINSTALL</tt> scripts.
|
||
</p>
|
||
<p>
|
||
An example taken from shells/zsh:
|
||
</p>
|
||
<table xmlns:html="http://www.w3.org/1999/xhtml" class="programlisting"><tr><td><pre>PKG_SHELL= ${PREFIX}/bin/zsh
|
||
.include "../../mk/bsd.pkg.install.mk"</pre></td></tr></table>
|
||
<p>
|
||
The shell is registered into <tt class="filename">/etc/shells</tt> file automatically in the
|
||
post-install target by the <tt class="filename">INSTALL</tt> script generated
|
||
by <tt class="filename">bsd.pkg.install.mk</tt> and removed in the deinstall
|
||
target by the <tt class="filename">DEINSTALL</tt> script.
|
||
</p>
|
||
</div>
|
||
<div class="sect1" lang="en">
|
||
<div class="titlepage">
|
||
<div><div><h2 class="title" style="clear: both">
|
||
<a name="id2958558"></a>11.28. Packages providing locale catalogues</h2></div></div>
|
||
<div></div>
|
||
</div>
|
||
<p>
|
||
If the package provides its own locale catalogues, the variable
|
||
<tt class="varname">USE_PKGLOCALEDIR</tt> should be defined. It will ensure
|
||
that the package's <tt class="filename">Makefile</tt> template files are fixed
|
||
and point to the correct locale directories
|
||
(which may vary, depending on OS), if necessary. See <a href="#plist.misc" title="6.1. Miscellaneous">Section 6.1, “Miscellaneous”</a> for details about <tt class="varname">PKGLOCALEDIR</tt>.
|
||
This functionality is buildlink2-only.
|
||
</p>
|
||
</div>
|
||
<div class="sect1" lang="en">
|
||
<div class="titlepage">
|
||
<div><div><h2 class="title" style="clear: both">
|
||
<a name="id2958592"></a>11.29. Using 'sudo' with pkgsrc</h2></div></div>
|
||
<div></div>
|
||
</div>
|
||
<p>
|
||
When installing packages as non-root user and using the just-in-time
|
||
su(1) feature of pkgsrc, it can become annoying to type in the root
|
||
password for each required package installed. To avoid this, the sudo
|
||
package can be used, which does password caching over a limited time.
|
||
To use it, install sudo (either as binary package or from
|
||
<a xmlns:html="http://www.w3.org/1999/xhtml" href="ftp://ftp.netbsd.org/pub/NetBSD/packages/pkgsrc/security/sudo/README.html" class="pkgname">security/sudo</a>) and then put the following
|
||
into your <tt class="filename">/etc/mk.conf</tt>:
|
||
</p>
|
||
<table xmlns:html="http://www.w3.org/1999/xhtml" class="programlisting"><tr><td><pre>SU_CMD=/usr/pkg/bin/sudo /bin/sh -c</pre></td></tr></table>
|
||
</div>
|
||
<div class="sect1" lang="en">
|
||
<div class="titlepage">
|
||
<div><div><h2 class="title" style="clear: both">
|
||
<a name="id2958621"></a>11.30. Packages containing perl scripts</h2></div></div>
|
||
<div></div>
|
||
</div>
|
||
<p>
|
||
If your package contains interpreted perl scripts, set
|
||
<tt class="varname">REPLACE_PERL</tt> to ensure that the proper interpreter
|
||
path is set. <tt class="varname">REPLACE_PERL</tt> should contain a list of
|
||
scripts, relative to <tt class="varname">WRKSRC</tt>, that you want adjusted.
|
||
</p>
|
||
</div>
|
||
<div class="sect1" lang="en">
|
||
<div class="titlepage">
|
||
<div><div><h2 class="title" style="clear: both">
|
||
<a name="id2958648"></a>11.31. Packages that cannot or should not be built</h2></div></div>
|
||
<div></div>
|
||
</div>
|
||
<p>
|
||
There are several reasons why a package might be instructed to not
|
||
build under certain circumstances. If the package builds and runs
|
||
on most platforms, the exceptions should be noted with
|
||
<tt class="varname">NOT_FOR_PLATFORM</tt>. If the package builds and runs on
|
||
a small handful of platforms, set <tt class="varname">ONLY_FOR_PLATFORM</tt>
|
||
instead. If the package should be skipped (for example, because it
|
||
provides functionality already provided by the system), set
|
||
<tt class="varname">PKG_SKIP_REASON</tt> to a descriptive message. If
|
||
the package should fail because some preconditions are not met,
|
||
set <tt class="varname">PKG_FAIL_REASON</tt> to a descriptive message.
|
||
</p>
|
||
<p>
|
||
<tt class="varname">IGNORE</tt> is deprecated because it didn't provide enough
|
||
information to determine whether the build should fail.
|
||
</p>
|
||
</div>
|
||
</div>
|
||
<div class="chapter" lang="en">
|
||
<div class="titlepage">
|
||
<div><div><h2 class="title">
|
||
<a name="submit"></a>Chapter 12. Submitting and Committing</h2></div></div>
|
||
<div></div>
|
||
</div>
|
||
<div class="toc">
|
||
<p><b>Table of Contents</b></p>
|
||
<dl>
|
||
<dt>12.1. <a href="#id2960258">Submitting your packages</a>
|
||
</dt>
|
||
<dt>12.2. <a href="#id2961824">Committing: Importing a package into CVS</a>
|
||
</dt>
|
||
<dt>12.3. <a href="#id2962087">Updating a Package to a Newer Version</a>
|
||
</dt>
|
||
<dt>12.4. <a href="#id2962208">Moving a Package in pkgsrc</a>
|
||
</dt>
|
||
</dl>
|
||
</div>
|
||
<div class="sect1" lang="en">
|
||
<div class="titlepage">
|
||
<div><div><h2 class="title" style="clear: both">
|
||
<a name="id2960258"></a>12.1. Submitting your packages</h2></div></div>
|
||
<div></div>
|
||
</div>
|
||
<p>
|
||
You have to separate between binary and “<span class="quote">normal</span>” (source)
|
||
packages here:
|
||
</p>
|
||
<div class="itemizedlist"><ul type="disc">
|
||
<li>
|
||
<p>precompiled binary packages</p>
|
||
<p>
|
||
Our policy is that we accept binaries only from NetBSD developers to
|
||
guarantee that the packages don't contain any trojan horses etc.
|
||
This is not to piss anyone off but rather to protect our users!
|
||
You're still free to put up your home-made binary packages and tell
|
||
the world where to get them.
|
||
</p>
|
||
</li>
|
||
<li>
|
||
<p>packages</p>
|
||
<p>
|
||
First, check that your package is complete, compiles and runs well;
|
||
see <a href="#debug" title="Chapter 10. Debugging">Chapter 10, <i>Debugging</i></a> and the rest of this document. Next,
|
||
generate a gzipped
|
||
tar-file of all the files needed for the package, preferably with all
|
||
files in a single directory. Place this tar-file to a place where the
|
||
package maintainers can fetch it using FTP or HTTP (WWW). Finally,
|
||
<b class="command">send-pr</b> with category “<span class="quote">pkg</span>”, a
|
||
synopsis which includes the package name and version number, a short
|
||
description of your package (contents of the <tt class="varname">COMMENT</tt>
|
||
variable are OK) and the URL of your tar-file.
|
||
</p>
|
||
<p>
|
||
You will be notified if your PR has been addressed so you can remove
|
||
the tar-file.
|
||
</p>
|
||
<p>
|
||
If you want to submit several packages, please send a separate PR for
|
||
each one, it's easier for us to track things that way.
|
||
</p>
|
||
</li>
|
||
</ul></div>
|
||
</div>
|
||
<div class="sect1" lang="en">
|
||
<div class="titlepage">
|
||
<div><div><h2 class="title" style="clear: both">
|
||
<a name="id2961824"></a>12.2. Committing: Importing a package into CVS</h2></div></div>
|
||
<div></div>
|
||
</div>
|
||
<p>
|
||
This section is only of interest for NetBSD developers with write
|
||
access to the NetBSD pkgsrc repository. Please remember that cvs
|
||
imports files relative to the cwd, and that the pathname that you
|
||
give the <b class="command">cvs import</b> command is so that it knows where
|
||
to place the files in the repository. Newly created packages should be
|
||
imported with a vendor tag of “<span class="quote">TNF</span>” and a release tag of
|
||
“<span class="quote">pkgsrc-base</span>”, e.g:
|
||
</p>
|
||
<table xmlns:html="http://www.w3.org/1999/xhtml" class="programlisting"><tr><td><pre><tt class="prompt">%</tt> <b class="userinput"><tt>cd
|
||
.../pkgsrc/<category>/<pkgname></tt></b>
|
||
<tt class="prompt">%</tt> <b class="userinput"><tt>cvs import pkgsrc/<category>/<pkgname> TNF pkgsrc-base</tt></b></pre></td></tr></table>
|
||
<p>
|
||
Remember to move the directory from which you imported out of
|
||
the way, or cvs will complain the next time you “<span class="quote">cvs
|
||
update</span>” your source tree. Also don't forget to add the new
|
||
package to the category's <tt class="filename">Makefile</tt>.
|
||
</p>
|
||
<p>
|
||
The commit message of the initial import should include part of the
|
||
<tt class="filename">DESCR</tt> file, so people reading the mailing lists know
|
||
what the package is/does.
|
||
</p>
|
||
<p>
|
||
Please note all package updates/additions in
|
||
<tt class="filename">pkgsrc/doc/CHANGES</tt>. It's very
|
||
important to keep this file up to date and conforming to the existing
|
||
format, because it will be used by scripts to automatically update pages on
|
||
<a href="http://www.NetBSD.org/" target="_top">www.NetBSD.org</a> and other sites.
|
||
</p>
|
||
<p>
|
||
For new packages, “<span class="quote">cvs import</span>” is preferred to “<span class="quote">cvs
|
||
add</span>” because the former gets everything with a single command,
|
||
and provides a consistent tag.
|
||
</p>
|
||
</div>
|
||
<div class="sect1" lang="en">
|
||
<div class="titlepage">
|
||
<div><div><h2 class="title" style="clear: both">
|
||
<a name="id2962087"></a>12.3. Updating a Package to a Newer Version</h2></div></div>
|
||
<div></div>
|
||
</div>
|
||
<p>
|
||
Please always put a concise, appropriate and relevant summary of the
|
||
changes between old and new versions into the commit log when updating
|
||
a package. There are various reasons for this:
|
||
</p>
|
||
<div class="itemizedlist"><ul type="disc">
|
||
<li><p>
|
||
A URL is volatile, and can change over time. It may go away completely
|
||
or its information may be overwritten by newer information.
|
||
</p></li>
|
||
<li><p>
|
||
Having the change information between old and new versions in our CVS
|
||
repository is very useful for people who use either cvs or anoncvs.
|
||
</p></li>
|
||
<li><p>
|
||
Having the change information between old and new versions in our CVS
|
||
repository is very useful for people who read the pkgsrc-changes mailing
|
||
list, so that they can make tactical decisions about when to upgrade
|
||
the package.
|
||
</p></li>
|
||
</ul></div>
|
||
<p>
|
||
Please also recognise that, just because a new version of a package
|
||
has been released, it should not automatically be upgraded in the CVS
|
||
repository. We prefer to be conservative in the packages that are
|
||
included in pkgsrc - development or beta packages are not really the
|
||
best thing for most places in which pkgsrc is used. Please use your
|
||
judgement about what should go into pkgsrc, and bear in mind that
|
||
stability is to be preferred above new and possibly untested features.
|
||
</p>
|
||
</div>
|
||
<div class="sect1" lang="en">
|
||
<div class="titlepage">
|
||
<div><div><h2 class="title" style="clear: both">
|
||
<a name="id2962208"></a>12.4. Moving a Package in pkgsrc</h2></div></div>
|
||
<div></div>
|
||
</div>
|
||
<div class="orderedlist"><ol type="1">
|
||
<li>Make a copy of the directory somewhere else.</li>
|
||
<li>
|
||
<p>Remove all CVS dirs.</p>
|
||
<p>
|
||
Alternatively to the first two steps you can also do:
|
||
</p>
|
||
<table xmlns:html="http://www.w3.org/1999/xhtml" class="programlisting"><tr><td><pre><tt class="prompt">%</tt> <b class="userinput"><tt>cvs -d user@cvs.NetBSD.org:/cvsroot export -D today pkgsrc/category/package</tt></b></pre></td></tr></table>
|
||
<p>
|
||
and use that for further work.
|
||
</p>
|
||
</li>
|
||
<li>Fix <tt class="varname">CATEGORIES</tt> and any
|
||
<tt class="varname">DEPENDS</tt> paths that just did “<span class="quote">../package</span>”
|
||
instead of “<span class="quote">../../category/package</span>”.
|
||
</li>
|
||
<li>
|
||
<b class="command">cvs import</b> the modified package in the new
|
||
place.</li>
|
||
<li>
|
||
<p>Check if any package depends on it:
|
||
</p>
|
||
<table xmlns:html="http://www.w3.org/1999/xhtml" class="programlisting"><tr><td><pre><tt class="prompt">%</tt> <b class="userinput"><tt>cd /usr/pkgsrc</tt></b>
|
||
<tt class="prompt">%</tt> <b class="userinput"><tt>grep /package */*/Makefile* */*/buildlink*</tt></b></pre></td></tr></table>
|
||
<p>
|
||
</p>
|
||
</li>
|
||
<li>Fix paths in packages from step 5 to point to new location.</li>
|
||
<li>
|
||
<b class="command">cvs rm (-f)</b> the package at the old location.</li>
|
||
<li>Remove from <tt class="filename">oldcategory/Makefile</tt>.</li>
|
||
<li>Add to <tt class="filename">newcategory/Makefile</tt>.</li>
|
||
<li>
|
||
<p>Commit the changed and removed files:</p>
|
||
<table xmlns:html="http://www.w3.org/1999/xhtml" class="programlisting"><tr><td><pre><tt class="prompt">%</tt> <b class="userinput"><tt>cvs commit oldcategory/package oldcategory/Makefile newcategory/Makefile</tt></b></pre></td></tr></table>
|
||
<p>
|
||
(and any packages from step 5, of course).
|
||
</p>
|
||
</li>
|
||
</ol></div>
|
||
</div>
|
||
</div>
|
||
<div class="chapter" lang="en">
|
||
<div class="titlepage">
|
||
<div><div><h2 class="title">
|
||
<a name="examples"></a>Chapter 13. A simple example of a package: bison</h2></div></div>
|
||
<div></div>
|
||
</div>
|
||
<div class="toc">
|
||
<p><b>Table of Contents</b></p>
|
||
<dl>
|
||
<dt>13.1. <a href="#id2961656">files</a>
|
||
</dt>
|
||
<dt>13.2. <a href="#id2963176">Steps for building, installing, packaging</a>
|
||
</dt>
|
||
</dl>
|
||
</div>
|
||
<p>
|
||
I checked to find a piece of software that wasn't in the packages
|
||
collection, and picked GNU bison. Quite why someone would want to have
|
||
<b class="command">bison</b> when Berkeley <b class="command">yacc</b> is already
|
||
present in the tree is beyond me, but it's useful for the purposes of
|
||
this exercise.
|
||
</p>
|
||
<div class="sect1" lang="en">
|
||
<div class="titlepage">
|
||
<div><div><h2 class="title" style="clear: both">
|
||
<a name="id2961656"></a>13.1. files</h2></div></div>
|
||
<div></div>
|
||
</div>
|
||
<div class="sect2" lang="en">
|
||
<div class="titlepage">
|
||
<div><div><h3 class="title">
|
||
<a name="id2961662"></a>13.1.1. Makefile</h3></div></div>
|
||
<div></div>
|
||
</div>
|
||
<table xmlns:html="http://www.w3.org/1999/xhtml" class="programlisting"><tr><td><pre># $NetBSD: pkgsrc.html,v 1.2 2003/06/23 07:49:44 grant Exp $
|
||
#
|
||
|
||
DISTNAME= bison-1.25
|
||
CATEGORIES= devel
|
||
MASTER_SITES= ${MASTER_SITE_GNU}
|
||
|
||
MAINTAINER= thorpej@NetBSD.org
|
||
HOMEPAGE= http://www.gnu.org/software/bison/bison.html
|
||
COMMENT= GNU yacc clone
|
||
|
||
GNU_CONFIGURE= yes
|
||
INFO_FILES= bison.info
|
||
|
||
.include "../../mk/bsd.pkg.mk"</pre></td></tr></table>
|
||
</div>
|
||
<div class="sect2" lang="en">
|
||
<div class="titlepage">
|
||
<div><div><h3 class="title">
|
||
<a name="id2961676"></a>13.1.2. DESCR</h3></div></div>
|
||
<div></div>
|
||
</div>
|
||
<table xmlns:html="http://www.w3.org/1999/xhtml" class="programlisting"><tr><td><pre>GNU version of yacc. Can make re-entrant parsers, and numerous other
|
||
improvements. Why you would want this when Berkeley yacc(1) is part
|
||
of the NetBSD source tree is beyond me.</pre></td></tr></table>
|
||
</div>
|
||
<div class="sect2" lang="en">
|
||
<div class="titlepage">
|
||
<div><div><h3 class="title">
|
||
<a name="id2961689"></a>13.1.3. PLIST</h3></div></div>
|
||
<div></div>
|
||
</div>
|
||
<table xmlns:html="http://www.w3.org/1999/xhtml" class="programlisting"><tr><td><pre>@comment $NetBSD: pkgsrc.html,v 1.2 2003/06/23 07:49:44 grant Exp $
|
||
bin/bison
|
||
man/man1/bison.1.gz
|
||
info/bison.info
|
||
info/bison.info-1
|
||
info/bison.info-2
|
||
info/bison.info-3
|
||
info/bison.info-4
|
||
info/bison.info-5
|
||
share/bison.simple
|
||
share/bison.hairy</pre></td></tr></table>
|
||
</div>
|
||
<div class="sect2" lang="en">
|
||
<div class="titlepage">
|
||
<div><div><h3 class="title">
|
||
<a name="id2961703"></a>13.1.4. Checking a package with <b class="command">pkglint</b></h3></div></div>
|
||
<div></div>
|
||
</div>
|
||
<p>
|
||
The NetBSD package system comes with <a xmlns:html="http://www.w3.org/1999/xhtml" href="ftp://ftp.netbsd.org/pub/NetBSD/packages/pkgsrc/pkgtools/pkglint/README.html" class="pkgname">pkgtools/pkglint</a>
|
||
which helps to check the contents of these
|
||
files. After installation it is quite easy to use, just change to the
|
||
directory of the package you wish to examine and execute
|
||
<b class="command">pkglint</b>:
|
||
</p>
|
||
<table xmlns:html="http://www.w3.org/1999/xhtml" class="programlisting"><tr><td><pre><tt class="prompt">%</tt> <b class="userinput"><tt>pkglint</tt></b>
|
||
OK: checking ./DESCR.
|
||
OK: checking Makefile.
|
||
OK: checking distinfo.
|
||
OK: checking patches/patch-aa.
|
||
looks fine.</pre></td></tr></table>
|
||
<p>
|
||
Depending on the supplied command line arguments (see pkglint(1)) more
|
||
verbose checks will be performed. Use e.g. <b class="command">pkglint
|
||
-v</b> for a very verbose check.
|
||
</p>
|
||
</div>
|
||
</div>
|
||
<div class="sect1" lang="en">
|
||
<div class="titlepage">
|
||
<div><div><h2 class="title" style="clear: both">
|
||
<a name="id2963176"></a>13.2. Steps for building, installing, packaging</h2></div></div>
|
||
<div></div>
|
||
</div>
|
||
<p>
|
||
Create the directory where the package lives, plus any auxiliary directories:
|
||
</p>
|
||
<table xmlns:html="http://www.w3.org/1999/xhtml" class="programlisting"><tr><td><pre><tt class="prompt">#</tt> <b class="userinput"><tt>cd /usr/pkgsrc/lang</tt></b>
|
||
<tt class="prompt">#</tt> <b class="userinput"><tt>mkdir bison</tt></b>
|
||
<tt class="prompt">#</tt> <b class="userinput"><tt>cd bison</tt></b>
|
||
<tt class="prompt">#</tt> <b class="userinput"><tt>mkdir patches</tt></b></pre></td></tr></table>
|
||
<p>
|
||
Create <tt class="filename">Makefile</tt>, <tt class="filename">DESCR</tt> and
|
||
<tt class="filename">PLIST</tt> (see <a href="#components" title="Chapter 5. Package components - files, directories and contents">Chapter 5, <i>Package components - files, directories and contents</i></a>)
|
||
then continue with fetching the distfile:
|
||
</p>
|
||
<table xmlns:html="http://www.w3.org/1999/xhtml" class="programlisting"><tr><td><pre><tt class="prompt">#</tt> <b class="userinput"><tt>make fetch</tt></b>
|
||
>> bison-1.25.tar.gz doesn't seem to exist on this system.
|
||
>> Attempting to fetch from ftp://prep.ai.mit.edu/pub/gnu//.
|
||
Requesting ftp://prep.ai.mit.edu/pub/gnu//bison-1.25.tar.gz (via ftp://orpheus.amdahl.com:80/)
|
||
ftp: Error retrieving file: 500 Internal error
|
||
|
||
>> Attempting to fetch from ftp://wuarchive.wustl.edu/systems/gnu//.
|
||
Requesting ftp://wuarchive.wustl.edu/systems/gnu//bison-1.25.tar.gz (via ftp://orpheus.amdahl.com:80/)
|
||
ftp: Error retrieving file: 500 Internal error
|
||
|
||
>> Attempting to fetch from ftp://ftp.freebsd.org/pub/FreeBSD/distfiles//.
|
||
Requesting ftp://ftp.freebsd.org/pub/FreeBSD/distfiles//bison-1.25.tar.gz (via ftp://orpheus.amdahl.com:80/)
|
||
Successfully retrieved file.</pre></td></tr></table>
|
||
<p>
|
||
Generate the checksum of the distfile into <tt class="filename">distinfo</tt>:
|
||
</p>
|
||
<table xmlns:html="http://www.w3.org/1999/xhtml" class="programlisting"><tr><td><pre><tt class="prompt">#</tt> <b class="userinput"><tt>make makesum</tt></b></pre></td></tr></table>
|
||
<p>
|
||
Now compile:
|
||
</p>
|
||
<table xmlns:html="http://www.w3.org/1999/xhtml" class="programlisting"><tr><td><pre><tt class="prompt">#</tt> <b class="userinput"><tt>make</tt></b>
|
||
>> Checksum OK for bison-1.25.tar.gz.
|
||
===> Extracting for bison-1.25
|
||
===> Patching for bison-1.25
|
||
===> Ignoring empty patch directory
|
||
===> Configuring for bison-1.25
|
||
creating cache ./config.cache
|
||
checking for gcc... cc
|
||
checking whether we are using GNU C... yes
|
||
checking for a BSD compatible install... /usr/bin/install -c -o bin -g bin
|
||
checking how to run the C preprocessor... cc -E
|
||
checking for minix/config.h... no
|
||
checking for POSIXized ISC... no
|
||
checking whether cross-compiling... no
|
||
checking for ANSI C header files... yes
|
||
checking for string.h... yes
|
||
checking for stdlib.h... yes
|
||
checking for memory.h... yes
|
||
checking for working const... yes
|
||
checking for working alloca.h... no
|
||
checking for alloca... yes
|
||
checking for strerror... yes
|
||
updating cache ./config.cache
|
||
creating ./config.status
|
||
creating Makefile
|
||
===> Building for bison-1.25
|
||
cc -c -DSTDC_HEADERS=1 -DHAVE_STRING_H=1 -DHAVE_STDLIB_H=1 -DHAVE_MEMORY_H=1 -DHAVE_ALLOCA=1 -DHAVE_STRERROR=1 -I./../include -g LR0.c
|
||
cc -c -DSTDC_HEADERS=1 -DHAVE_STRING_H=1 -DHAVE_STDLIB_H=1 -DHAVE_MEMORY_H=1 -DHAVE_ALLOCA=1 -DHAVE_STRERROR=1 -I./../include -g allocate.c
|
||
cc -c -DSTDC_HEADERS=1 -DHAVE_STRING_H=1 -DHAVE_STDLIB_H=1 -DHAVE_MEMORY_H=1 -DHAVE_ALLOCA=1 -DHAVE_STRERROR=1 -I./../include -g closure.c
|
||
cc -c -DSTDC_HEADERS=1 -DHAVE_STRING_H=1 -DHAVE_STDLIB_H=1 -DHAVE_MEMORY_H=1 -DHAVE_ALLOCA=1 -DHAVE_STRERROR=1 -I./../include -g conflicts.c
|
||
cc -c -DSTDC_HEADERS=1 -DHAVE_STRING_H=1 -DHAVE_STDLIB_H=1 -DHAVE_MEMORY_H=1 -DHAVE_ALLOCA=1 -DHAVE_STRERROR=1 -I./../include -g derives.c
|
||
cc -c -DXPFILE=\"/usr/pkg/share/bison.simple\" -DXPFILE1=\"/usr/pkg/share/bison.hairy\" -DSTDC_HEADERS=1 -DHAVE_STRING_H=1 -DHAVE_STDLIB_H=1 -DHAVE_MEMORY_H=1 -DHAVE_ALLOCA=1 -DHAVE_STRERROR=1 -g ./files.c
|
||
cc -c -DSTDC_HEADERS=1 -DHAVE_STRING_H=1 -DHAVE_STDLIB_H=1 -DHAVE_MEMORY_H=1 -DHAVE_ALLOCA=1 -DHAVE_STRERROR=1 -I./../include -g getargs.c
|
||
cc -c -DSTDC_HEADERS=1 -DHAVE_STRING_H=1 -DHAVE_STDLIB_H=1 -DHAVE_MEMORY_H=1 -DHAVE_ALLOCA=1 -DHAVE_STRERROR=1 -I./../include -g gram.c
|
||
cc -c -DSTDC_HEADERS=1 -DHAVE_STRING_H=1 -DHAVE_STDLIB_H=1 -DHAVE_MEMORY_H=1 -DHAVE_ALLOCA=1 -DHAVE_STRERROR=1 -I./../include -g lalr.c
|
||
cc -c -DSTDC_HEADERS=1 -DHAVE_STRING_H=1 -DHAVE_STDLIB_H=1 -DHAVE_MEMORY_H=1 -DHAVE_ALLOCA=1 -DHAVE_STRERROR=1 -I./../include -g lex.c
|
||
cc -c -DSTDC_HEADERS=1 -DHAVE_STRING_H=1 -DHAVE_STDLIB_H=1 -DHAVE_MEMORY_H=1 -DHAVE_ALLOCA=1 -DHAVE_STRERROR=1 -I./../include -g main.c
|
||
cc -c -DSTDC_HEADERS=1 -DHAVE_STRING_H=1 -DHAVE_STDLIB_H=1 -DHAVE_MEMORY_H=1 -DHAVE_ALLOCA=1 -DHAVE_STRERROR=1 -I./../include -g nullable.c
|
||
cc -c -DSTDC_HEADERS=1 -DHAVE_STRING_H=1 -DHAVE_STDLIB_H=1 -DHAVE_MEMORY_H=1 -DHAVE_ALLOCA=1 -DHAVE_STRERROR=1 -I./../include -g output.c
|
||
cc -c -DSTDC_HEADERS=1 -DHAVE_STRING_H=1 -DHAVE_STDLIB_H=1 -DHAVE_MEMORY_H=1 -DHAVE_ALLOCA=1 -DHAVE_STRERROR=1 -I./../include -g print.c
|
||
cc -c -DSTDC_HEADERS=1 -DHAVE_STRING_H=1 -DHAVE_STDLIB_H=1 -DHAVE_MEMORY_H=1 -DHAVE_ALLOCA=1 -DHAVE_STRERROR=1 -I./../include -g reader.c
|
||
cc -c -DSTDC_HEADERS=1 -DHAVE_STRING_H=1 -DHAVE_STDLIB_H=1 -DHAVE_MEMORY_H=1 -DHAVE_ALLOCA=1 -DHAVE_STRERROR=1 -I./../include -g reduce.c
|
||
cc -c -DSTDC_HEADERS=1 -DHAVE_STRING_H=1 -DHAVE_STDLIB_H=1 -DHAVE_MEMORY_H=1 -DHAVE_ALLOCA=1 -DHAVE_STRERROR=1 -I./../include -g symtab.c
|
||
cc -c -DSTDC_HEADERS=1 -DHAVE_STRING_H=1 -DHAVE_STDLIB_H=1 -DHAVE_MEMORY_H=1 -DHAVE_ALLOCA=1 -DHAVE_STRERROR=1 -I./../include -g warshall.c
|
||
cc -c -DSTDC_HEADERS=1 -DHAVE_STRING_H=1 -DHAVE_STDLIB_H=1 -DHAVE_MEMORY_H=1 -DHAVE_ALLOCA=1 -DHAVE_STRERROR=1 -I./../include -g version.c
|
||
cc -c -DSTDC_HEADERS=1 -DHAVE_STRING_H=1 -DHAVE_STDLIB_H=1 -DHAVE_MEMORY_H=1 -DHAVE_ALLOCA=1 -DHAVE_STRERROR=1 -I./../include -g getopt.c
|
||
cc -c -DSTDC_HEADERS=1 -DHAVE_STRING_H=1 -DHAVE_STDLIB_H=1 -DHAVE_MEMORY_H=1 -DHAVE_ALLOCA=1 -DHAVE_STRERROR=1 -I./../include -g getopt1.c
|
||
cc -g -o bison LR0.o allocate.o closure.o conflicts.o derives.o files.o getargs.o gram.o lalr.o lex.o main.o nullable.o output.o print.o reader.o reduce.o symtab.o warshall.o version.o getopt.o getopt1.o
|
||
./files.c:240: warning: mktemp() possibly used unsafely, consider using mkstemp()
|
||
rm -f bison.s1
|
||
sed -e "/^#line/ s|bison|/usr/pkg/share/bison|" < ./bison.simple > bison.s1</pre></td></tr></table>
|
||
<p>
|
||
Everything seems OK, so install the files:
|
||
</p>
|
||
<table xmlns:html="http://www.w3.org/1999/xhtml" class="programlisting"><tr><td><pre><tt class="prompt">#</tt> <b class="userinput"><tt>make install</tt></b>
|
||
>> Checksum OK for bison-1.25.tar.gz.
|
||
===> Installing for bison-1.25
|
||
sh ./mkinstalldirs /usr/pkg/bin /usr/pkg/share /usr/pkg/info /usr/pkg/man/man1
|
||
rm -f /usr/pkg/bin/bison
|
||
cd /usr/pkg/share; rm -f bison.simple bison.hairy
|
||
rm -f /usr/pkg/man/man1/bison.1 /usr/pkg/info/bison.info*
|
||
install -c -o bin -g bin -m 555 bison /usr/pkg/bin/bison
|
||
/usr/bin/install -c -o bin -g bin -m 644 bison.s1 /usr/pkg/share/bison.simple
|
||
/usr/bin/install -c -o bin -g bin -m 644 ./bison.hairy /usr/pkg/share/bison.hairy
|
||
cd .; for f in bison.info*; do /usr/bin/install -c -o bin -g bin -m 644 $f /usr/pkg/info/$f; done
|
||
/usr/bin/install -c -o bin -g bin -m 644 ./bison.1 /usr/pkg/man/man1/bison.1
|
||
===> Registering installation for bison-1.25</pre></td></tr></table>
|
||
<p>
|
||
You can now use bison, and also - if you decide so - remove it with
|
||
<b class="command">pkg_delete bison</b>. Should you decide that you want a
|
||
binary package, do this now:
|
||
</p>
|
||
<table xmlns:html="http://www.w3.org/1999/xhtml" class="programlisting"><tr><td><pre><tt class="prompt">#</tt> <b class="userinput"><tt>make package</tt></b>
|
||
>> Checksum OK for bison-1.25.tar.gz.
|
||
===> Building package for bison-1.25
|
||
Creating package bison-1.25.tgz
|
||
Registering depends:.
|
||
Creating gzip'd tar ball in '/u/pkgsrc/lang/bison/bison-1.25.tgz'</pre></td></tr></table>
|
||
<p>
|
||
Now that you don't need the source and object files any more, clean up:
|
||
</p>
|
||
<table xmlns:html="http://www.w3.org/1999/xhtml" class="programlisting"><tr><td><pre><tt class="prompt">#</tt> <b class="userinput"><tt>make clean</tt></b>
|
||
===> Cleaning for bison-1.25</pre></td></tr></table>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div class="appendix" lang="en">
|
||
<div class="titlepage">
|
||
<div><div><h2 class="title">
|
||
<a name="logs"></a>Appendix A. Build logs</h2></div></div>
|
||
<div></div>
|
||
</div>
|
||
<div class="toc">
|
||
<p><b>Table of Contents</b></p>
|
||
<dl>
|
||
<dt>A.1. <a href="#logs.building">Building top</a>
|
||
</dt>
|
||
<dt>A.2. <a href="#logs.package">Packaging top</a>
|
||
</dt>
|
||
</dl>
|
||
</div>
|
||
<div class="sect1" lang="en">
|
||
<div class="titlepage">
|
||
<div><div><h2 class="title" style="clear: both">
|
||
<a name="logs.building"></a>A.1. Building top</h2></div></div>
|
||
<div></div>
|
||
</div>
|
||
<table xmlns:html="http://www.w3.org/1999/xhtml" class="programlisting"><tr><td><pre><tt class="prompt">#</tt> <b class="userinput"><tt>make</tt></b>
|
||
>> top-3.5beta5.tar.gz doesn't seem to exist on this system.
|
||
>> Attempting to fetch from ftp://ftp.groupsys.com/pub/top/.
|
||
Requesting ftp://ftp.groupsys.com/pub/top/top-3.5beta5.tar.gz (via ftp://orpheus.amdahl.com:80/)
|
||
Successfully retrieved file.
|
||
>> Checksum OK for top-3.5beta5.tar.gz.
|
||
===> Extracting for top-3.5beta5
|
||
===> Patching for top-3.5beta5
|
||
===> Applying NetBSD patches for top-3.5beta5
|
||
===> Configuring for top-3.5beta5
|
||
/bin/cp /u/pkgsrc/sysutils/top/files/defaults /u/pkgsrc/sysutils/top/work/top-3.5beta5/.defaults
|
||
chmod a-x /u/pkgsrc/sysutils/top/work/top-3.5beta5/install
|
||
|
||
Reading configuration from last time...
|
||
|
||
Using these settings:
|
||
Bourne Shell /bin/sh
|
||
C compiler cc
|
||
Compiler options -DHAVE_GETOPT -O
|
||
Awk command awk
|
||
Install command /usr/bin/install
|
||
|
||
Module netbsd13
|
||
LoadMax 5.0
|
||
Default TOPN -1
|
||
Nominal TOPN 18
|
||
Default Delay 2
|
||
Random passwd access yes
|
||
Table Size 47
|
||
Owner root
|
||
Group Owner kmem
|
||
Mode 2755
|
||
bin directory $(PREFIX)/bin
|
||
man directory $(PREFIX)/man/man1
|
||
man extension 1
|
||
man style man
|
||
|
||
Building Makefile...
|
||
Building top.local.h...
|
||
Building top.1...
|
||
Doing a "make clean".
|
||
rm -f *.o top core core.* sigdesc.h
|
||
To create the executable, type "make".
|
||
To install the executable, type "make install".
|
||
===> Building for top-3.5beta5
|
||
cc -DHAVE_GETOPT -DORDER -DHAVE_GETOPT -O -c top.c
|
||
awk -f sigconv.awk /usr/include/sys/signal.h >sigdesc.h
|
||
cc -DHAVE_GETOPT -DORDER -DHAVE_GETOPT -O -c commands.c
|
||
cc -DHAVE_GETOPT -DORDER -DHAVE_GETOPT -O -c display.c
|
||
cc -DHAVE_GETOPT -DORDER -DHAVE_GETOPT -O -c screen.c
|
||
cc -DHAVE_GETOPT -DORDER -DHAVE_GETOPT -O -c username.c
|
||
cc -DHAVE_GETOPT -DORDER -DHAVE_GETOPT -O -c utils.c
|
||
utils.c: In function `errmsg':
|
||
utils.c:348: warning: return discards `const' from pointer target type
|
||
cc -DHAVE_GETOPT -DORDER -DHAVE_GETOPT -O -c version.c
|
||
cc -DHAVE_GETOPT -DORDER -DHAVE_GETOPT -O -c getopt.c
|
||
cc "-DOSREV=12G" -DHAVE_GETOPT -DORDER -DHAVE_GETOPT -O -c machine.c
|
||
rm -f top
|
||
cc -o top top.o commands.o display.o screen.o username.o utils.o version.o getopt.o machine.o -ltermcap -lm -lkvm
|
||
<tt class="prompt">#</tt>
|
||
<tt class="prompt">#</tt> <b class="userinput"><tt>make install</tt></b>
|
||
>> Checksum OK for top-3.5beta5.tar.gz.
|
||
===> Installing for top-3.5beta5
|
||
/usr/bin/install -o root -m 2755 -g kmem top /usr/pkg/bin
|
||
/usr/bin/install top.1 /usr/pkg/man/man1/top.1
|
||
strip /usr/pkg/bin/top
|
||
===> Registering installation for top-3.5beta5</pre></td></tr></table>
|
||
</div>
|
||
<div class="sect1" lang="en">
|
||
<div class="titlepage">
|
||
<div><div><h2 class="title" style="clear: both">
|
||
<a name="logs.package"></a>A.2. Packaging top</h2></div></div>
|
||
<div></div>
|
||
</div>
|
||
<table xmlns:html="http://www.w3.org/1999/xhtml" class="programlisting"><tr><td><pre><tt class="prompt">#</tt> <b class="userinput"><tt>make package</tt></b>
|
||
>> Checksum OK for top-3.5beta5.tar.gz.
|
||
===> Building package for top-3.5beta5
|
||
Creating package top-3.5beta5.tgz
|
||
Registering depends:.
|
||
Creating gzip'd tar ball in '/u/pkgsrc/sysutils/top/top-3.5beta5.tgz'</pre></td></tr></table>
|
||
</div>
|
||
</div>
|
||
<div class="appendix" lang="en">
|
||
<div class="titlepage">
|
||
<div><div><h2 class="title">
|
||
<a name="ftp-layout"></a>Appendix B. Layout of the FTP server's package archive</h2></div></div>
|
||
<div></div>
|
||
</div>
|
||
<p>
|
||
Layout for precompiled binary packages on ftp.NetBSD.org:
|
||
</p>
|
||
<table xmlns:html="http://www.w3.org/1999/xhtml" class="programlisting"><tr><td><pre>
|
||
/pub/NetBSD/packages/
|
||
README
|
||
distfiles/
|
||
pkgsrc -> /pub/NetBSD/NetBSD-current/pkgsrc
|
||
1.6/
|
||
i386/
|
||
All/
|
||
archivers/
|
||
foo -> ../All/foo
|
||
...
|
||
m68k/
|
||
All/
|
||
archivers/
|
||
foo -> ../All/foo
|
||
...
|
||
amiga -> m68k
|
||
atari -> m68k
|
||
...
|
||
</pre></td></tr></table>
|
||
</div>
|
||
</div></body>
|
||
</html>
|