[pacman-dev] [WIP 0/4] Dynamic Users

Andrew Gregory andrew.gregory.8 at gmail.com
Sat Mar 19 13:50:13 UTC 2016


Packages with files owned by dynamically created users/groups have to create
the user and chown the files in a post_install/post_upgrade install script.
This makes pacman's database out of sync with the filesystem.  See FS#43484.

This patchset makes alpm/pacman aware of symbolic usernames and uses fakeuser
(https://github.com/progandy/fakeuser) to provide a method for PKGBUILDs to add
fake users.

alpm will still fall back to the raw uid if it has not already been assigned,
so packages that add users in post_install/post_upgrade will continue to work
correctly, but should be changed to use pre_install/pre_upgrade instead.

The makepkg portions should be complete, other than documentation.  The
alpm/pacman portions still need to be optimized to use a cache so that we don't
have to consult /etc/{passwd,group} for every single file.

*NOTE*: there is a bug in libarchive that prevents the symlink check from
working with this patchset.  This will be fixed in the next release.

PKGBUILD
========
  pkgname=dynamic-users-test
  pkgver=1
  pkgrel=1
  arch=(any)
  install=dynamic-users-test.install
  
  # entries are in passwd(5)/group(5) format, empty trailing fields can be omitted
  sysusers=('myuser')
  sysgroups=('mygroup')
  
  package() {
      touch "$pkgdir/testfile"
      chown myuser:mygroup "$pkgdir/testfile"
  }

dynamic-users-test.install
==========================
  pre_install() {
      getent passwd myuser &>/dev/null || useradd --system myuser
      getent group mygroup &>/dev/null || groupadd --system mygroup
  }
  
  pre_upgrade() {
      pre_install
  }

Andrew Gregory (4):
  use custom uid/gid lookup functions
  makepkg add sysusers during package()
  makepkg: store symbolic user/group names in mtree
  check_file_permissions: use symbolic user/group names if available

 lib/libalpm/add.c                  | 32 ++++++++++++++++++-
 scripts/Makefile.am                |  2 ++
 scripts/libmakepkg/.gitignore      |  2 ++
 scripts/libmakepkg/sysgroups.sh.in | 60 +++++++++++++++++++++++++++++++++++
 scripts/libmakepkg/sysusers.sh.in  | 65 ++++++++++++++++++++++++++++++++++++++
 scripts/makepkg.sh.in              |  6 ++--
 src/pacman/check.c                 | 46 +++++++++++++++++++++------
 7 files changed, 200 insertions(+), 13 deletions(-)
 create mode 100644 scripts/libmakepkg/sysgroups.sh.in
 create mode 100644 scripts/libmakepkg/sysusers.sh.in

-- 
2.7.2


More information about the pacman-dev mailing list