diff options
Diffstat (limited to 'pkgtools/pkg_comp1/files/pkg_comp.8')
-rw-r--r-- | pkgtools/pkg_comp1/files/pkg_comp.8 | 543 |
1 files changed, 543 insertions, 0 deletions
diff --git a/pkgtools/pkg_comp1/files/pkg_comp.8 b/pkgtools/pkg_comp1/files/pkg_comp.8 new file mode 100644 index 00000000000..957b26ceafe --- /dev/null +++ b/pkgtools/pkg_comp1/files/pkg_comp.8 @@ -0,0 +1,543 @@ +.\" $NetBSD: pkg_comp.8,v 1.1 2017/02/12 10:48:55 jmmv Exp $ +.\" +.\" pkg_comp - Build packages inside a clean chroot environment +.\" Copyright (c) 2002, 2003, 2004, 2005 Julio M. Merino Vidal <jmmv@NetBSD.org> +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions +.\" are met: +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions and the following disclaimer. +.\" 2. Neither the name of The NetBSD Foundation nor the names of its +.\" contributors may be used to endorse or promote products derived +.\" from this software without specific prior written permission. +.\" 3. Neither the name of author nor the names of its contributors may +.\" be used to endorse or promote products derived from this software +.\" without specific prior written permission. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS +.\" ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED +.\" TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +.\" PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS +.\" BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +.\" CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +.\" SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +.\" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +.\" CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +.\" ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +.\" POSSIBILITY OF SUCH DAMAGE. +.\" +.Dd August 17, 2015 +.Dt PKG_COMP 8 +.Os +.Sh NAME +.Nm pkg_comp +.Nd build packages inside a sandbox +.Sh SYNOPSIS +.Nm +.Oo Fl Po +.Cm c Ns \&| Ns Cm C +.Pc +.Ar conf_file +.Oc +.Op Fl Nn +.Ar target +.Op Ar pkg_name ... +.Sh DESCRIPTION +.Nm , +or +.Em Package Compiler +in its full name, +is a tool that makes easy the compilation of packages inside a clean +sandbox. +This allows an easy tracking of exact dependencies +and the correct behavior of a package in a fresh system installation. +.Pp +The behavior of +.Nm +is controlled through a small configuration file and a target (keep +reading to learn more). +The configuration file tells +.Nm +how to configure the new chroot environment, and the target specifies +which action to take. +.Pp +The following options are recognized: +.Bl -tag -width XcXconf_file +.It Fl C Ar conf_file +Use +.Ar conf_file +as configuration file (full path expected). +.It Fl c Ar conf_file +Use +.Ar conf_file +as configuration file (only base name expected). +.It Fl N +With the exception of +.Pa pkgtools/libkver +(see +.Va NETBSD_RELEASE ) +avoid installation of default packages as well as +.Va INSTALL_PACKAGES +and +.Va BUILD_PACKAGES +during the creation of the chroot. +.It Fl n +Avoid installation of +.Va INSTALL_PACKAGES +and +.Va BUILD_PACKAGES +during the creation of the chroot. +.El +.Ss What to use it for? +You can use +.Nm +to achieve many goals when building packages. +Here are some ideas: +.Bl -bullet +.It +Build packages for other system versions. +For example, build packages for +.Nx 4.0 +while you are running +.Nx 5.0 . +.It +Build packages using different +.Pa mk.conf +options than your current system, like changing the threading library, +.Sy COPTS , +placement of configuration files, etc. +.It +Debug the build process of a package, checking if buildlinks work +properly. +.It +Avoid autoconf's side effects by keeping a separate chroot for each +project, like one for GNOME2 and another one for KDE3. +.It +Schedule builds of package sets for several different machines. +.El +.Sh CONTROL DIRECTORY +.Nm +needs to store several pieces of information when it is running. +Instead of using normal system trees, it uses a special directory inside the +chroot to avoid polluting the system. +It stores there scripts, object files, built packages, etc. +This directory is +.Pa $DESTDIR/pkg_comp ; +the symbolic link +.Pa $DESTDIR/p +is automatically created to ease pathnames when working inside the chroot. +.Sh CONFIGURATION +With +.Nm +you can maintain several configuration files so you can work with +different chroot jails easily. +To make this easy, configuration files are stored inside +.Pa $HOME/pkg_comp , +followed by the configuration file name and the .conf suffix. +The default configuration file is +.Pa $HOME/pkg_comp/default.conf , +and is always used if you do not specify another one. +The configuration file name is specified by the argument of the +.Fl c +option. +Alternatively you can specify any pathname as a configuration file +with the argument of the +.Fl C +option. +.Pp +Configuration files are simple shell scripts that define +variables. +The default values shown here are those written in the template when +issuing a maketemplate. +.Bl -tag -width indent +.It AUTO_PACKAGES +A list of packages to automatically build during the +.Sy auto +target. +A package is in the form +.Sq section/name , +like +.Sq misc/colorls , +or a plain name like +.Sq colorls . +Defaults to nothing. +.It AUTO_TARGET +The pkgsrc target to use when building packages in an automated fashion +(using the +.Ql auto +target). +Should be set to +.Ql package +or +.Ql bin-install , +as other values are useless. +Defaults to +.Ql package . +.It BUILD_PACKAGES +A list of packages to automatically build after the +.Sy makeroot +target. +A package is in the form +.Sq section/name , +like +.Sq misc/colorls , +or a plain name like +.Sq colorls . +Defaults to nothing. +.It BUILD_PKG_COMP_TARGET +The pkgsrc target to use when building packages. +It can contain any target supported by the pkgsrc system, but +reasonable values are: +.Ql install , +.Ql package +and +.Ql bin-install . +Defaults to +.Ql package . +.It COPYROOTCFG +If set to +.Ql yes , +all configuration files (not directories) that reside inside +.Pa /root +are copied to +.Sy $DESTDIR/root . +Defaults to +.Ql no . +.It DESTDIR +The chroot jail directory. +Defaults to +.Pa /var/chroot/pkg_comp/default . +.It DISTRIBDIR +This is the directory which holds +.Nb +binary sets and X sets. +Its structure is the same as official release +distributions, that is, tgz files must reside inside +.Pa $DISTRIBDIR/binary/sets . +Defaults to +.Pa /var/pub/NetBSD . +.It EXTRAMK +Specifies a whitespace-separated list of files that must be appended to +.Pa $DESTDIR/etc/mk.conf . +This is useful to add special items to this configuration file. +Defaults to nothing. +.It INSTALL_PACKAGES +A list of packages to automatically install after the +.Sy makeroot +and before installing +.Sy BUILD_PACKAGES . +These are also installed within the sandbox created by the +.Sy auto +target, but before anything is built. +Each name must be the full package name, including the tgz suffix. +Packages are searched inside +.Pa $REAL_PACKAGES/All . +Defaults to nothing. +.It GENERATE_PKG_SUMMARY +If set to +.Sq yes , +generate a new +.Pa $REAL_PACKAGES/pkg_summary.gz +file at the end of every package build by both the +.Sq auto +and +.Sq build +targets. +.It LOCALBASE +Where binary packages get installed. +Defaults to +.Pa /usr/pkg . +.It MKCONF_VARS +A list of variable names that will be appended to the generated +.Pa /etc/mk.conf +file, together with their values set in the configuration file. +Its default value contains all variables listed here. +.It NETBSD_RELEASE +Specifies which version number of +.Nx +is installed inside the chroot. +If set to +.Ql no , +no special action is taken (this is useful if the system version inside +the chroot matches the outside one). +Otherwise, the package +.Pa pkgtools/libkver +will be installed inside the chroot, in a special purpose +prefix whose value can be set in +.Pa $DESTDIR/etc/mk.conf +via the configuration file +with the +.Va LIBKVER_STANDALONE_PREFIX +variable. +The libkver library will be configured inside the chroot, with the symbolic link +.Pa $DESTDIR/libkver_osrelease +and +.Va LD_PRELOAD +in default shells environments, +so that the +.Nx +version specified in +.Va NETBSD_RELEASE +overrides the host system version. +See +.Xr kver 3 +for more information. +Defaults to +.Ql no . +.It PKG_DBDIR +Location of the packages database. +Defaults to +.Pa /var/db/pkg . +.It PKG_SYSCONFBASE +Base directory of configuration files. +Defaults to +.Pa /usr/pkg/etc . +.It PKGSRC_COMPILER +List of values specifying the chain of compilers to invoke when building +packages. +Defaults to +.Ql gcc . +If you are defining +.Va REAL_CCACHE , +remember to prepend +.Ql ccache +to this variable's value. +.It PKGVULNDIR +Directory where the +.Pa vulnerabilities +file will be installed (inside the chroot). +Defaults to +.Pa /usr/pkg/share . +.It REAL_PKGVULNDIR +Directory where the system-wide +.Pa vulnerabilities +file resides (outside the chroot). +Defaults to +.Pa /usr/pkgsrc/distfiles . +.It ROOTSHELL +The shell of the root user. +Defaults to +.Pa /bin/ksh . +.It SETS +A list of binary sets to be extracted inside +.Sy DESTDIR . +Defaults to +.Ql base.tgz comp.tgz etc.tgz kern-GENERIC.tgz text.tgz . +If no kernel is extracted by these sets, an empty +.Pa /netbsd +file is created inside the chroot. +.It SETS_X11 +A list of binary sets of the X Window system. +This has the same behavior +as +.Sy SETS . +If this variable is set to +.Ql no , +no X Window is configured inside the chroot +jail and no other X variables take effect. +Defaults to +.Ql xbase.tgz xcomp.tgz xetc.tgz xfont.tgz xserver.tgz . +.It SYNC_UMOUNT +If set to +.Ql yes , +run +.Xr sync 8 +three times after all file systems have been unmounted. +Defaults to +.Ql no . +.It USE_AUDIT_PACKAGES +If set to +.Ql yes , +let +.Nm +handle the +.Pa vulnerabilities +file automatically. +This means that it will install the system-wide +.Pa vulnerabilities +file inside the chroot when needed, keeping both in sync. +Defaults to +.Ql yes . +.It USE_GCC3 +If set to +.Ql yes , +the GNU C Compiler version 3 will be installed inside the chroot +environment and used to build all packages, using the +.Pa lang/gcc3 +package. +Defaults to +.Ql no . +.El +.Ss Mounted file systems +In order to avoid duplicating huge system trees, +.Nm +takes advantage of file system layers. +By default, it uses +.Xr mount_null 8 , +which duplicates a file system tree into another directory; although +you may want to use +.Xr mount_union 8 , +or even +.Xr mount_overlay 8 . +If the +content of these variables is empty, that file system is not mounted. +.Pp +You can control which layer to use and which options you want with +special configuration options, as explained below. +.Pp +These file systems are mounted before entering the chroot and unmounted +after exiting. +In order to know if file systems are mounted or not, the +program uses a temporary file, called +.Pa $DESTDIR/pkg_comp/tmp/mount.stat , +which controls the number of +.Nm +processes using the chroot environment. +If some of them crashes unexpectedly and you notice it does not try +to unmount the file systems, this status file may get out of sync. +Be sure to check that NO file systems are mounted when issuing a +.Sy removeroot . +.Bl -tag -width indent +.It REAL_CCACHE +Specifies where a global ccache directory resides in the real system. +Defaults to nothing, which disables the global cache. +Keep in mind that this is specially useful to keep the cache across +rebuilds of the sandbox, but be very careful if you plan to share a +cache directory between different sandboxes, as this can lead to problems. +.It REAL_DISTFILES +Specifies where distfiles reside in the real system. +Defaults to +.Pa /usr/pkgsrc/distfiles . +.It REAL_DISTFILES_OPTS +Mount options. +Defaults to +.Sy -t null -o rw . +.It REAL_PACKAGES +Specifies where to build binary packages. +This variable is specially useful. +Defaults to +.Pa /usr/pkgsrc/packages . +.It REAL_PACKAGES_OPTS +Mount options. +Defaults to +.Sy -t null -o rw . +.It REAL_PKGSRC +The pkgsrc tree. +This can be useful if you want to use several pkgsrc trees independently. +Defaults to +.Pa /usr/pkgsrc . +.It REAL_PKGSRC_OPTS +Mount options. +Defaults to +.Sy -t null -o ro . +.It REAL_SRC +The src system tree. +Usually useless, but may be needed by some packages. +Defaults to +.Pa /usr/src . +.It REAL_SRC_OPTS +Mount options. +Defaults to +.Sy -t null -o ro . +.It MAKEROOT_HOOKS +A whitespace separated list of functions or external scripts to be executed +after the sandbox is created. +Two arguments are given to each of them: +.Ar $DESTDIR , +and the word +.Ar makeroot . +Defaults to nothing. +.It MOUNT_HOOKS +A whitespace separated list of functions or external scripts to be executed +after file systems are mounted. +Two arguments are given to each of them: +.Ar $DESTDIR , +and the word +.Ar mount . +Defaults to nothing. +.It UMOUNT_HOOKS +A whitespace separated list of functions or external scripts to be executed +before file systems are unmounted. +Two arguments are given to each of them: +.Ar $DESTDIR , +and the word +.Ar umount . +Defaults to nothing. +.El +.Sh TARGETS +A target specifies what +.Nm +should do (as in make). +The following list describes all supported targets, +in the logical order you should call them. +.Bl -tag -width indent +.It maketemplate +Create a sample +.Ar conf_file . +You should edit it after the creation as you will probably want to change +the default configuration, specially paths. +.It makeroot +Create the chroot environment, based on the specs of the configuration file. +This step is required before trying any other, except maketemplate. +.It build +Builds the specified packages inside the chroot. +You can pass the package names as a relative path within pkgsrc or as the +basename of the package directory (i.e. omitting the directory name). +.It install +Install the specified binary packages into the chroot. +Package names can contain globs. +The package files will be taken from within +.Sy REAL_PACKAGES . +.It chroot +Enters the chroot environment. +If no arguments are given, +.Va ROOTSHELL +is executed, otherwise whatever you typed. +If the first argument begins with a word prefixed by +.Li pkg_ , +then the +.Ql chroot +argument can be omitted (it is implied). +.It removeroot +Remove the entire chroot tree. +You should do it with this target because it +will take care to umount needed mount points. +.It auto +This executes several targets automatically, using +.Sy AUTO_TARGET +as +.Sy BUILD_PKG_COMP_TARGET +during the build. +The order is: makeroot, build and removeroot. +This is useful to create binary packages of several pkgsrc and their +dependencies automatically. +For this to be useful, you need to set +.Sy REAL_PACKAGES +and use +.Sy AUTO_PACKAGES +or pass package names through the command line. +.Pp +If the magic word +.Ql resume +is passed as the unique argument to this target, +.Nm +will attempt to resume a previous automatic build for the given configuration. +.El +.Sh NOTES +This program uses nullfs to create virtual copies of real trees inside the +chroot environment. +.Pp +You need to install the +.Pa security/audit-packages +package in the host system (and have an up to date vulnerabilities database) +if you want security checks to work inside the +chroot environment. +.Sh SEE ALSO +.Xr pkg_delete 1 , +.Xr pkgsrc 7 , +.Xr mount_null 8 , +.Xr sync 8 , +.Xr sysctl 8 +.Sh AUTHORS +.An Julio M. Merino Vidal Aq Mt jmmv@NetBSD.org |