xref: /openbsd/usr.sbin/pkg_add/pkg_create.1 (revision 3d8817e4)
1.\"	$OpenBSD: pkg_create.1,v 1.74 2011/03/19 09:39:39 jmc Exp $
2.\"
3.\" Documentation and design originally from FreeBSD. All the code has
4.\" been rewritten since. We keep the documentation's notice:
5.\"
6.\" Redistribution and use in source and binary forms, with or without
7.\" modification, are permitted provided that the following conditions
8.\" are met:
9.\" 1. Redistributions of source code must retain the above copyright
10.\"    notice, this list of conditions and the following disclaimer.
11.\" 2. Redistributions in binary form must reproduce the above copyright
12.\"    notice, this list of conditions and the following disclaimer in the
13.\"    documentation and/or other materials provided with the distribution.
14.\"
15.\" Jordan K. Hubbard
16.\"
17.\"
18.\" hacked up by John Kohl for NetBSD--fixed a few bugs, extended keywords,
19.\" added dependency tracking, etc.
20.\"
21.\" [jkh] Took John's changes back and made some additional extensions for
22.\" better integration with FreeBSD's new ports collection.
23.\"
24.Dd $Mdocdate: March 19 2011 $
25.Dt PKG_CREATE 1
26.Os
27.Sh NAME
28.Nm pkg_create
29.Nd create binary software package for distribution
30.Sh SYNOPSIS
31.Nm pkg_create
32.Bk -words
33.Op Fl mnQqvx
34.Op Fl A Ar arches
35.Op Fl B Ar pkg-destdir
36.Op Fl D Ar name Ns Op = Ns Ar value
37.Op Fl L Ar localbase
38.Op Fl M Ar displayfile
39.Op Fl P Ar pkg-dependency
40.Op Fl s Ar signature-parameter
41.Op Fl U Ar undisplayfile
42.Op Fl W Ar wantedlib
43.Fl d Ar desc
44.Fl D Ar COMMENT Ns = Ns Ar value
45.Fl D Ar PORTSDIR Ns = Ns Ar value
46.Fl f Ar packinglist
47.Fl p Ar prefix
48.Ar pkg-name
49.Ek
50.Nm pkg_create
51.Op Fl s Ar signature-parameter
52.Fl f Ar packinglist
53.Sh DESCRIPTION
54The
55.Nm
56command creates a binary package named
57.Ar pkg-name ,
58for subsequent use with
59.Xr pkg_add 1 ,
60.Xr pkg_delete 1
61and
62.Xr pkg_info 1 .
63.Ar pkg-name
64will traditionally have a
65.Dq .tgz
66extension, to denote the underlying binary format.
67.Ar pkg-name
68must follow
69.Xr packages-specs 7 .
70.Pp
71Use of the
72.Xr ports 7
73infrastructure instead of manual
74.Nm
75invocation is strongly recommended.
76.Pp
77During package creation,
78.Nm
79replaces too long file names with smaller equivalents
80.Po
81see
82.Xr package 5
83.Pc ,
84records extra information in the packing-list, such as the existence
85of symlinks and hard links, computes and stores file checksums, and
86verifies that all special objects are properly annotated in the packing-list.
87.Pp
88It will also check all
89.Cm @wantlib
90for reachability, by looking into all installed
91.Cm @depend .
92It may also ask the ports tree for extra dependencies,
93provided some other
94.Cm @depend
95refers to the same
96.Ev BASE_PKGPATH
97.Po
98see
99.Xr bsd.port.mk 5
100.Pc .
101The rationale is that those libraries must already be present for
102the package to build correctly, and thus be reachable through the
103subset of
104.Cm @depend
105that are not pure
106.Ev RUN_DEPENDS .
107.Pp
108The options are as follows:
109.Bl -tag -width Ds
110.It Fl A Ar arches
111Register a list of architectures for which this package should install.
112.Ar arches
113is a comma-separated list of architectures.
114Use
115.Sq *
116to mean any architecture (e.g., arch-independent packages).
117.It Fl B Ar pkg-destdir
118Set
119.Ar pkg-destdir
120as the prefix to prepend to any file to select for the package.
121.It Fl D Ar name Ns Op = Ns Ar value
122Define
123.Ar name
124to
125.Ar value
126(or just define it)
127for substitution and fragment inclusion purposes.
128Some specific
129.Ar names
130have extra meaning, see
131.Xr bsd.port.mk 5
132for details:
133.Pp
134.Bl -tag -width FULLPKGPATH -compact
135.It Ar CDROM
136Set to the port's Makefile
137.Ar PERMIT_PACKAGE_CDROM .
138.It Ar COMMENT
139Set package
140.Dq one line description
141(mandatory).
142.It Ar FTP
143Set to the port's Makefile
144.Ar PERMIT_PACKAGE_FTP .
145.It Ar FULLPKGPATH
146Strongly recommended, otherwise updates won't work.
147.It Ar HOMEPAGE
148If defined, appended to the description.
149.It Ar MAINTAINER
150If defined, appended to the description.
151.It Ar USE_GROFF
152Set to 1 to have groff format manpages behind the scenes during
153package creation.
154.El
155.It Fl d No [-] Ns Ar desc
156Fetch long description for package from file
157.Ar desc
158or, if preceded by
159.Sq - ,
160the argument itself.
161.It Fl f Ar packinglist
162Fetch
163.Dq packing-list
164for package from the file
165.Ar packinglist .
166Several packing-lists can be mentioned, in which case they will be
167concatenated together.
168.It Fl L Ar localbase
169Record
170.Ar localbase
171as the localbase used in the package.
172By default,
173.Pa /usr/local .
174Packages built with another localbase can only be installed by using
175the same localbase in
176.Xr pkg_add 1 ,
177to prevent errors.
178.It Fl M Ar displayfile
179Display the file (using
180.Xr more 1 )
181after installing the package.
182Useful for things like
183legal notices on almost-free software, etc.
184.It Fl m
185Causes
186.Nm
187to always display the progress meter in cases it would not do so by default.
188.It Fl n
189Don't actually create a package.
190.It Fl P Ar pkg-dependency
191Specify a
192.Cm @depend
193dependency on the command line.
194.It Fl p Ar prefix
195Set
196.Ar prefix
197as the initial directory
198.Dq base
199to start from in selecting files for
200the package, and to record as the base for installing the package.
201.It Fl Q
202Print out the files in the actual packing-list of the package being
203generated, with explicit typing
204.Pq e.g. Cm @file , @lib , ... .
205.It Fl q
206Print out the actual packing-list of the package being generated
207(query mode).
208Most often used in combination with
209.Fl n .
210.It Xo
211.Fl s Ar x509
212.Fl s Ar cert
213.Fl s Ar privkey
214.Xc
215Specify signature parameters for signed packages.
216For now, the only supported use involves three
217.Fl s
218options:
219.Ar x509
220to indicate x509-style signatures,
221.Ar cert
222the path to the signer's certificate
223and
224.Ar privkey
225the path to the signer's private key.
226The signer's certificate and the signer's private key should be generated
227using standard openssl x509 commands.
228This assumes the existence of a certificate authority (or several), whose
229public information is recorded as a
230.Pa /etc/ssl/pkgca.pem
231file.
232.It Fl U Ar undisplayfile
233Display the file (using
234.Xr more 1 )
235when deinstalling the package.
236Useful for reminders about stuff to clean up.
237.It Fl v
238Turn on verbose output.
239.It Fl W Ar wantedlib
240Specify a
241.Cm @wantlib
242requirement on the command line.
243.It Fl x
244Disable progress meter.
245.El
246.Pp
247.Nm
248can also be invoked with only the packing-list from an installed package.
249It will recreate the corresponding binary package in the current directory
250from the installation, or error out if any problem is found.
251For example,
252the following will recreate a
253.Pa kdelibs-3.4.3.tgz
254package:
255.Bd -literal -offset indent
256pkg_create -f /var/db/pkg/kdelibs-3.4.3/+CONTENTS
257.Ed
258.Sh PACKING-LIST DETAILS
259The
260.Dq packing-list
261format (see
262.Fl f )
263is fairly simple, being basically a list of filenames and directory names
264to include in the package.
265.Pp
266Substitution of variables and inclusion of fragments is documented in the
267next section.
268.Pp
269Directory names are denoted by a trailing slash.
270.Pp
271There are a few annotations that can be inserted for better control.
272All these commands start with an
273.Sq @ .
274Here is a list:
275.Pp
276.Bl -tag -width Ds -compact
277.It Cm @ask-update Ar pkgspec Ar message
278Mechanism to prevent unwanted updates.
279If the new package is installed as part of an update matching
280.Ar pkgspec ,
281the
282.Ar message
283will be displayed to the user.
284In non-interactive mode, the update will abort.
285Otherwise, the user will have a chance to proceed.
286Automated updates can be done by using
287.Fl D Ar update_stem ,
288with
289.Ar stem
290the stem of the
291.Ar pkgspec .
292Classical use case for postgresql:
293.Bd -literal -offset 3n
294@ask-update postgresql-server<-8 Make sure your existing database is backed up
295.Ed
296.Pp
297Use very sparingly.
298Most cases that seem to require manual updates just require a bit more thought.
299.Pp
300.It Cm @arch Ar arches
301List of architectures for which this package is intended.
302.Pp
303.It Cm @bin Ar filename
304Describe the file as an
305.Ox
306binary executable (not a script).
307.Pp
308.It Cm @comment Ar string
309Imbed a comment in the packing-list.
310Useful in trying to document some particularly hairy sequence that
311may trip someone up later.
312Can also be used to comment out elements that update-plist
313.Pq see Xr bsd.port.mk 5
314will insist in inserting in a packing-list.
315.Pp
316The special comment
317.Cm @comment Ar "no checksum"
318can be used to tag the next file as special: even though its characteristics
319will be recorded in the package, it can be altered after installation, and
320.Xr pkg_delete 1
321will still delete it.
322.Pp
323.It Cm @conflict Ar pkgspec
324Declare a conflict with packages matching
325.Ar pkgspec
326.Pq see Xr packages-specs 7 .
327The
328.Ar pkgname
329package can
330.Em not
331be installed if a package
332matching
333.Ar pkgspec
334has been installed because they install the same files and thus conflict.
335.Pp
336.It Cm @cwd Ar pathname
337Set the package current directory.
338All subsequent filenames will be assumed relative to
339.Ar pathname .
340.Pp
341.It Xo
342.Cm @depend
343.Sm off
344.Ar pkgpath :
345.Ar pkgspec :
346.Ar default
347.Sm on
348.Xc
349Declare a dependency on a package matching
350.Ar pkgspec
351.Pq see Xr packages-specs 7 .
352An appropriate package must be installed before this package may be
353installed, and that package must be deinstalled before this package
354is deinstalled.
355The dependency also contains a
356.Ar pkgpath
357(see
358.Ev FULLPKGPATH
359in
360.Xr bsd.port.mk 5 )
361and a
362.Ar default
363package name, in case there is no listing of available packages.
364.Pp
365.It Cm @dir Ar directoryname
366Create directory
367.Pa directoryname
368at
369.Xr pkg_add 1
370time, taking
371.Cm @mode ,
372.Cm @group ,
373and
374.Cm @owner
375into account, and remove it during
376.Xr pkg_delete 1 .
377Directories to remove can be shared between packages.
378If
379.Ar name
380does not begin with an @, same as
381.Dl name/
382.Pp
383.It Cm @display Ar name
384Declare
385.Pa name
386as the file to be displayed at install time (see
387.Fl M
388above).
389.Pp
390.It Cm @endfake
391Mark end of packing-list for
392.Xr pkg_add 1
393.Fl Q
394option.
395.Pp
396.It Cm @exec Ar command
397Execute
398.Ar command
399during
400.Xr pkg_add 1 .
401Note that
402.Cm @exec
403commands are executed relative to their location in the packing-list,
404so they can rely on any data that have already been extracted,
405but not on anything that is listed after them.
406Some special elements, such as new users and new groups, are always
407created first, so that
408.Cm @exec
409can rely on them.
410If
411.Ar command
412contains any of the following sequences somewhere in it, they will
413be expanded inline.
414For the following examples, assume that
415.Cm @cwd
416is set to
417.Pa /usr/local
418and the last extracted file was
419.Pa bin/emacs .
420.Bl -tag -width indent
421.It Cm "\&%B"
422Expands to the
423.Dq basename
424of the fully qualified filename, that
425is the current directory prefix, plus the last filespec, minus
426the trailing filename.
427In the example case, that would be
428.Pa /usr/local/bin .
429.It Cm "\&%D"
430Expands to the current directory prefix, as set with
431.Cm @cwd ;
432in the example case
433.Pa /usr/local .
434.It Cm "\&%F"
435Expands to the last filename extracted (as specified); in the example case,
436.Pa bin/emacs .
437.It Cm "\&%f"
438Expands to the
439.Dq filename
440part of the fully qualified name, or
441the converse of
442.Cm \&%B ;
443in the example case,
444.Pa emacs .
445.El
446.Pp
447.It Cm @exec-always Ar command
448Synonym of
449.Cm @exec .
450.Pp
451.It Cm @exec-add Ar command
452Similar to
453.Cm @exec ,
454except it only gets executed during new installations,
455and not during updates.
456.Pp
457.It Cm @exec-update Ar command
458Similar to
459.Cm @exec ,
460except it only gets executed during updates,
461and not during new installations.
462.Pp
463.It Cm @extra Ar filename
464Declare extra file
465.Pa filename
466to be deleted at deinstall time, if user sets the
467.Fl c
468option.
469Those files are extra configuration files that are normally not deleted.
470.Ar filename
471can be an absolute path.
472If
473.Pa filename
474ends with a slash, it is a directory.
475.Pp
476.It Cm @extraunexec Ar command
477Extra
478.Ar command
479to execute when removing extra files.
480.Pp
481.It Cm @file Ar filename
482Default annotation, to use if
483.Ar filename
484begins with @.
485.Ar filename
486is always a relative path, relative to the current
487.Cm @cwd .
488.Pp
489.It Cm @fontdir Ar directoryname
490Specialized version of
491.Cm @dir ,
492to handle font directories: create
493.Pa font.alias
494from
495.Pa font.alias-*
496fragments, execute
497.Xr mkfontdir 1 ,
498.Xr mkfontscale 1
499and
500.Xr fc-cache 1
501when needed.
502Delete extra files at
503.Xr pkg_delete 1
504time.
505.Pp
506.It Cm @group Ar group
507Set default group ownership for all subsequently extracted files to
508.Ar group .
509Use without an arg to set back to default (extraction)
510group ownership.
511.Pp
512.It Cm @ignore
513Was used internally to tell extraction to ignore the next file.
514No longer needed.
515.Pp
516.It Cm @info Ar filename
517Specialized version of
518.Cm @file ,
519to handle GNU info files.
520Automatically grab
521.Pa filename-*
522chapter files, run
523.Xr install-info 1
524as needed.
525.Pp
526.It Cm @lib Ar filename
527Specialized version of
528.Cm @file ,
529to handle shared libraries.
530Satisfy LIB_DEPENDS,
531run
532.Xr ldconfig 8
533as needed.
534.Pp
535.It Cm @link Ar name
536Added after a file entry by
537.Nm
538to record that the entry is actually a hard link.
539.Pp
540.It Cm @localbase Ar base
541Used internally to record the settings of
542.Fl L
543option.
544.Pp
545.It Cm @man Ar filename
546Specialized version of
547.Cm @file ,
548to handle manual pages.
549.Pp
550.It Cm @mandir Ar directoryname
551Specialized version of
552.Cm @dir ,
553to handle manual directories: instruct user to add/remove the
554directory to
555.Xr man.conf 5 ,
556remove
557.Xr apropos 1
558database when needed.
559.Pp
560.It Cm @md5
561Added after a file entry by
562.Nm
563to record the files's cryptographic checksum.
564Replaced by
565.Cm @sha
566since
567.Ox 4.5 .
568.Pp
569.It Cm @mode Ar mode
570Set default permission for all subsequently extracted files to
571.Ar mode .
572Format is the same as that used by the
573.Xr chmod 1
574command.
575Use without an arg to set back to default (extraction) permissions.
576.Pp
577.It Cm @name Ar pkgname
578Set the name of the package.
579This name is potentially different than the name of
580the file it came in, and is used when keeping track of the package
581for later deinstallation.
582Note that
583.Nm
584will derive this field from the package name and add it automatically
585if none is given.
586.Pp
587.It Cm @newgroup Ar name : Ns Ar gid
588During
589.Xr pkg_add 1 ,
590create a new group, using
591.Xr groupadd 8 .
592Happens before file and user creations.
593.Ar gid
594can be prefixed with a
595.Sq !\&
596to ensure group has the correct GID.
597During
598.Xr pkg_delete 1 ,
599groups will be deleted if extra clean-up has been requested, and if
600other installed packages don't list the same group.
601.Pp
602.It Xo
603.Cm @newuser
604.Sm off
605.Ar name :
606.Ar uid :
607.Ar group :
608.Ar loginclass :
609.Ar comment :
610.Ar home :
611.Ar shell
612.Sm on
613.Xc
614During
615.Xr pkg_add 1 ,
616create a new user.
617Happens before any file creation.
618All fields correspond to
619.Xr useradd 8
620parameters.
621Some fields are optional and can be left empty.
622If the user already exists, no action is taken.
623Individual fields can be prefixed by a
624.Sq !\&
625to make sure an existing
626user matches.
627For instance, the directive
628.Li @newuser foo:!42
629will make sure user foo has UID 42.
630During
631.Xr pkg_delete 1 ,
632users will be deleted if extra clean-up has been requested, and if
633other installed packages don't list the same user.
634.Pp
635.It Cm @option Ar name
636Effects vary depending on
637.Ar name .
638Some options are not documented yet.
639.Bl -tag -width indent
640.It Ar always-update
641By default,
642.Xr pkg_add 1
643uses some simplified information to decide whether an installed package
644needs updating.
645With this option, the package is updated whenever anything changes.
646To be used sparingly, as this is more expensive.
647.It Ar explicit-update
648packages tagged with this option, either in the installed version or in an
649update candidate, won't be considered during a global update.
650User has to explicitly ask to update them.
651Typical use is for firmware packages, whose updates are usually tied to
652kernel changes.
653.It Ar no-default-conflict
654By default, a package conflicts with other versions of the same package.
655With this option, the older package version will still be noticed, but the
656installation will proceed anyway.
657.El
658.Pp
659.It Cm @owner Ar user
660Set default ownership for all subsequently extracted files to
661.Ar user .
662Use without an arg to set back to default (extraction)
663ownership.
664.Pp
665.It Cm @pkgcfl Ar pkgcflname
666Declare a conflict to the
667.Ar pkgcflname
668package.
669The
670.Ar pkgcflname
671package must
672.Em not
673be installed if
674.Ar pkgname
675package gets installed because they install the same files and thus conflict.
676.Ar pkgcflname
677may use
678.Xr fnmatch 3
679wildcards.
680Deprecated, use
681.Cm @conflict
682instead.
683.Pp
684.It Cm @pkgpath Ar pkgpath
685Declare an extra
686.Ar pkgpath
687for the package.
688This is used for updates:
689.Nm pkg_add
690.Fl u
691normally checks that the
692.Ar pkgpath
693embedded in the package corresponds to the old package,
694to solve ambiguities when packages with similar names are involved.
695When ports get renamed, or flavors change, extra
696.Cm @pkgpath
697annotations can help
698.Nm pkg_add
699get a sense of continuity.
700.Pp
701.It Cm @rcscript Ar filename
702Script for the
703.Pa /etc/rc.d
704framework.
705Contrary to
706.Cm @file ,
707absolute paths are okay, e.g.,
708.Bd -literal -offset indent
709@rcscript ${RCDIR}/ballsd
710.Ed
711.Pp
712In this case, performs an implicit
713.Cm @cwd
714to
715.Pa ${RCDIR} .
716.Pp
717.It Cm @sample Ar filename
718Last preceding
719.Cm @file
720item is a sample configuration file, to be copied to
721.Ar filename
722at
723.Xr pkg_add 1
724time and to be removed at
725.Xr pkg_delete 1
726time.
727During installation, existing configuration files are untouched.
728During deinstallation, configuration files are only removed if unchanged.
729.Ar filename
730can be an absolute path.
731If
732.Ar filename
733ends with a slash,
734it refers to a configuration directory instead.
735.Pp
736.It Cm @sha
737Added after a file entry by
738.Nm
739to record the files's cryptographic checksum,
740as a sha256 digest encoded in base64.
741.Pp
742.It Cm @shell Ar filename
743Specialized version of
744.Cm @file ,
745to handle shells.
746See
747.Xr shells 5 .
748.Pp
749.It Cm @size
750Added after a file entry by
751.Nm
752to record a file size.
753.Pp
754.It Cm @symlink Ar name
755Added after a file entry by
756.Nm
757to record that the entry is actually a symbolic link.
758.Pp
759.It Cm @sysctl Ar var Ns = Ns Ar val
760.It Cm @sysctl Ar var Ns \*(Ge Ns Ar val
761During
762.Xr pkg_add 1 ,
763check that
764.Xr sysctl 8
765variable
766.Ar var
767is set to exactly/at least a given value
768.Ar val .
769Adjust it otherwise.
770.Pp
771.It Cm @unexec Ar command
772Execute
773.Ar command
774during
775.Xr pkg_delete 1 .
776Expansion of special
777.Cm \&%
778sequences is the same as for
779.Cm @exec .
780Note that
781.Cm @unexec
782commands are executed relative to their location in the packing-list,
783so they cannot rely on any data that has already been deleted,
784thus they should occur before the files they need to function.
785Some special elements, such as new users and new groups, are always
786deleted last, so that
787.Cm @unexec
788can rely on them.
789.Pp
790.It Cm @unexec-always Ar command
791Synonym of
792.Cm @unexec .
793.Pp
794.It Cm @unexec-delete Ar command
795Similar to
796.Cm @unexec ,
797except it only gets executed during true deletions
798and not while removing an old package during updates.
799.Pp
800.It Cm @unexec-update Ar command
801Similar to
802.Cm @unexec ,
803except it only gets executed while removing an old package during updates,
804and not during true deletions.
805.Pp
806.It Cm @url
807Original location of the package, automatically recorded in installed packages
808by
809.Xr pkg_add 1 .
810.Pp
811.It Cm @wantlib Ar libspec
812Package needs a shared library to work.
813.Ar libspec
814is
815.Sq name.major.minor
816or
817.Sq path/name.major.minor .
818The package won't be installed unless a library with the same name,
819the exact same major number and at least the same minor number can
820be located.
821A library without path is searched through dependent packages under the
822same
823.Ar localbase ,
824then in the system libraries under
825.Pa /usr/lib
826and
827.Pa /usr/X11R6/lib .
828A library with a path is only searched through dependent packages,
829that path being relative to
830.Ar localbase .
831.El
832.Sh VARIABLE SUBSTITUTION AND FRAGMENT INCLUSION
833In packing-lists, installation, deinstallation and requirement scripts,
834description and message files,
835constructs like
836.Li ${VAR}
837will be replaced with the variable value, according to
838.Fl D Ar name Ns = Ns Ar value
839options.
840.Pp
841Constructs like
842.Li %%VAR%%
843and
844.Li !%%VAR%%
845trigger fragment inclusion.
846If such a line is encountered in a packing-list, the corresponding variable
847must be defined to 0 or 1.
848If the variable's value is 1,
849.Li %%VAR%%
850will be replaced by the corresponding positive fragment, and
851.Li !%%VAR%%
852will be ignored.
853If the variable's value is 0,
854.Li %%VAR%%
855will be ignored, and
856.Li !%%VAR%%
857will be replaced by the corresponding positive fragment.
858.Pp
859A fragment is an auxiliary packing-list file, whose name is derived from the
860current packing-list, and the variable name
861.Va VAR
862triggering the inclusion:
863.Pa pkg/PLIST
864yields a positive fragment
865.Pa pkg/PFRAG.VAR
866and a negative fragment
867.Pa pkg/PFRAG.no-VAR ,
868.Pa pkg/PLIST-FOO
869yields a positive fragment
870.Pa pkg/PFRAG.VAR-foo
871and a negative fragment
872.Pa pkg/PFRAG.no-VAR-foo .
873.Pp
874Fragments can be included inside fragments, so that
875.Li %%VAR2%%
876inside
877.Pa pkg/PFRAG.VAR
878triggers the inclusion of
879.Pa pkg/PFRAG.VAR2-VAR
880and
881.Li !%%VAR2%%
882triggers the inclusion of
883.Pa pkg/PFRAG.no-VAR2-VAR .
884.Pp
885If a positive or a negative fragment file does not exist, the corresponding
886inclusion will be ignored.
887However, if both the positive and negative fragment files do not exist,
888.Nm
889will error out, to make it easier to spot fragment names errors.
890.Pp
891As a special historical exception, the variable
892.Va SHARED_LIBS
893controls the inclusion of fragments
894.Pa PFRAG.shared
895and
896.Pa PFRAG.no-shared
897through the lines
898.Li %%SHARED%%
899and
900.Li !%%SHARED%% .
901.Sh ENVIRONMENT
902.Bl -tag -width PKG_DESTDIR
903.It Ev PKG_DESTDIR
904Default value for
905.Ar pkg-destdir ,
906if no
907.Fl B
908option is specified.
909.El
910.Sh SEE ALSO
911.Xr openssl 1 ,
912.Xr pkg_add 1 ,
913.Xr pkg_delete 1 ,
914.Xr pkg_info 1 ,
915.Xr tar 1 ,
916.Xr bsd.port.mk 5 ,
917.Xr package 5 ,
918.Xr pkg.conf 5 ,
919.Xr packages-specs 7 ,
920.Xr ports 7
921.Sh HISTORY
922The
923.Nm
924command first appeared in
925.Fx .
926.Sh AUTHORS
927.Bl -tag -width indent -compact
928.It "Jordan Hubbard"
929initial design
930.It "Marc Espie"
931complete rewrite.
932.El
933