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