Commit graph

17 commits

Author SHA1 Message Date
jlam
143b5f7d14 Move mk/install to mk/pkginstall to better reflect the contents (the
pkginstall framework).
2006-05-21 23:50:15 +00:00
jlam
2ab9b7d728 Use the meta-data directory as the location for all temporary files
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.
2006-05-01 14:56:23 +00:00
jlam
2797f2c4fb Add two new capabilities to the pkginstall framework:
(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.
2006-04-23 00:00:43 +00:00
jlam
44b11e928c Modify the INSTALL script to allow for selective unpacking of a scriptlet. 2006-03-19 23:58:14 +00:00
jlam
d4ca1fbd6b Rototill of how the various template parts of the INSTALL and DEINSTALL
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.
2006-03-15 04:52:57 +00:00
reed
242b073d74 For the user or group removal message, don't set they can be removed
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.
2006-03-07 20:31:17 +00:00
jlam
a1660a8258 Allow platform-specific overrides for creating new users and groups.
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.
2005-09-26 22:12:35 +00:00
jlam
66030afca0 Define new variables for package Makefile use:
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.
2005-08-19 22:24:09 +00:00
jlam
3de5d86818 Rewrite scripts to be more resilient to shells that exit immediately
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.
2005-07-27 16:18:54 +00:00
jlam
bb43605988 Fix user_exists and group_exists to actually use their arguments
instead of using the values stored in global variables.  Also,
consistently prepend variables that should be local to functions with
an underscore.
2005-03-28 19:26:11 +00:00
jlam
a767f84684 In the usage message, note that the CHECK-* actions can take an optional
metadatadir argument.
2005-01-31 21:41:06 +00:00
jlam
7ebb4d0225 Add missing "fi". 2005-01-31 19:53:31 +00:00
jlam
d621d74579 Fix automatically adding users and groups after the {GROUP,USER}ADD
definitions were removed from mk/install/headers.  The checks for
whether {GROUP,USER}ADD are defined are now moved to the usergroup
script.
2005-01-31 18:41:08 +00:00
jlam
7bb70d34b2 Add RCS Id. 2005-01-31 17:42:20 +00:00
jlam
0a8bdc04af Avoid hardcoding the refcount database into the INSTALL scripts. We
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.
2005-01-28 19:06:07 +00:00
jlam
fc16f1f48c Pretty-print the users and groups that may need to be removed during
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.
2005-01-28 18:00:28 +00:00
jlam
f9d620373a Continue with install script cleanup -- we now create a +USERGROUP
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".
2005-01-28 07:37:55 +00:00