used by the various scriptlets. Also, consistently use the idiom of
creating a temporary directory with mode 700 and creating temporary
files underneath that directory to avoid race conditions.
(1) Allow specifying the numeric UID and GID for users and groups in
/etc/mk.conf by setting PKG_UID.<user> and PKG_GID.<group> to
those values. If these values are specified, then the +USERGROUP
script will verify that existing users and groups match the
requested UIDs and GIDs for the package, and otherwise create them
with these UIDs and GIDs. For example:
PKG_UID.courier= 10001
PKG_GID.mail= 6
In this example, the courier-authlib binary package will be created
to use uid 10001 for the "courier" user and gid 6 for the "mail"
group.
(2) Allow a package to request that users and groups be created prior
to configuring or building a package by setting USERGROUP_PHASE
to "configure" or "build". Because the reason for this is typically
to hardcode the UIDs and GIDs of requested users and groups directly
into the package's executables, these hardcoded values will be
automatically determined and put into the +USERGROUP script. For
example:
USERGROUP_PHASE= configure
PKG_GROUPS= qmail nofiles
PKG_USERS+= qmaill:nofiles
PKG_USERS+= qmailq:qmail
In this example, the users and groups are created before the
configure phase when building qmail, and the qmail binary package's
+INSTALL script will try to create (or verify) users and groups
with the same UIDs and GIDs that were used during the build.
As part of these changes, the format for PKG_USERS and PKG_GROUPS has
changed -- the optional parts of the corresponding entries are no
longer used and cannot be specified. Instead, the following variables
should be set:
PKG_GID.<group> is the group's numeric GID.
PKG_UID.<user> is the user's numeric UID.
PKG_GECOS.<user> is the user's description.
PKG_HOME.<user> is the user's home directory.
PKG_SHELL.<user> is the user's login shell.
A separate commit will follow which will fix all packages that set
PKG_USERS and PKG_GROUPS to use the new syntax and variables.
scripts are generated. The various scriptlets in pkgsrc/mk/install
are now full templates that can be combined to form the INSTALL and
DEINSTALL scripts. All of the templates have either leading or trailing
blank lines so that when they are concatentated, the full INSTALL and
DEINSTALL scripts will still be easy to read.
All of the generated template sources for the INSTALL and DEINSTALL
scripts are now stored in ${WRKDIR}/.pkginstall for local consistency
and have been renamed so that they are not dot-files.
The "data" for the +* scriptlets are now generated in a separate step
and instead of being appended to the unpacked scriptlet are now appended
to the INSTALL script itself. When the scriptlets are unpacked, the
corresponding data lines for each scriptlet are pulled out of the
INSTALL script and put into the unpacked scriptlets. This makes it
easy to append more data lines during the install phase without needing
to regenerate the INSTALL script.
if no other packages are using them, but if no other "software" is using
them. Just in case, they are using a user and/or group without a package
using it.
There is a default implementation of the shell functions adduser()
and addgroup() used by the +USERGROUP script that uses NetBSD/Solaris-style
useradd(8) and groupadd(8) commands. A platform may override those
functions by creating pkgsrc/mk/install/usergroupfuncs.${OPSYS}. This
fixes PR pkg/23061.
REQD_FILES, REQD_FILES_PERMS, REQD_FILES_MODE
REQD_DIRS, REQD_DIRS_PERMS
These are the same as the CONF_* variables, except the files and
directories listed in REQD_* are always copied over, created or removed
(taking into account if there are user modifications from the originals,
etc.) regardless of the value of PKG_CONFIG.
The implementation involved pushing the knowledge of PKG_CONFIG,
PKG_RCD_SCRIPTS, PKG_CREATE_USERGROUP, and PKG_REGISTER_SHELLS into
the individual helper scripts. The helper scripts are now always
invoked by the +INSTALL and +DEINSTALL scripts. The +DIRS and +FILES
script have been enhanced to understand a new "f" flag that means
"force" to ignore the value of PKG_CONFIG and PKG_RCD_SCRIPTS.
Lastly, the +FILES script has been taught a new "r" flag just for rc.d
scripts and the +RCD_SCRIPTS script is now unnecessary.
if an untested command fails (see sh(1), "-e errexit"). Do this by
changing lines that look like:
test expression && command
to
test ! expression || command
so that the statement list always returns 0. Also, back out revision
1.38 of pkgsrc/mk/install/install and modify the if-test to branch
correctly if +USERGROUP doesn't exist.
now simply make ${PKG_REFCOUNT_DBDIR} always be ${PKG_DBDIR}.refcount
so that it always follows the location of ${PKG_DBDIR}. This preserves
the ability for PKG_DBDIR (and PKG_REFCOUNT_DBDIR) to be different on
different machines despite using the same binary packages.
CHECK-REMOVE. The users and groups are now printed on the same line
with whitespace separating the entries (for easy copy-and-pasting info
commands), and wrapping to successive lines if we overflow the length
of the current line.
script that is unpacked by the +INSTALL script at PRE-INSTALL time
before any other actions take place, and invoke +USERGROUP to create
any necessary users and groups. Remove the now-unused code for
PKG_USERS and PKG_GROUPS from the install and deinstall templates.
We also reference count the users and groups and store the reference
counts in ${PKG_DBDIR}/.refcount/{users,groups}. This allows multiple
packages to register that they use same users and groups, and allows
+USERGROUP to be invoked at any time to repair an installed package.
Also fix the install and deinstall templates to invoke the CHECK-*
actions with ${PKG_METADATA_DIR} so that the correct PKGNAME can be
derived. This fixes the weird messages asking the user to create
directories for ".pkgdb" during a "make install".