On 19/03/16 23:50, Andrew Gregory wrote: > --- > scripts/Makefile.am | 2 ++ > scripts/libmakepkg/.gitignore | 2 ++ > scripts/libmakepkg/sysgroups.sh.in | 60 +++++++++++++++++++++++++++++++++++ > scripts/libmakepkg/sysusers.sh.in | 65 > ++++++++++++++++++++++++++++++++++++++ > scripts/makepkg.sh.in | 4 ++- > 5 files changed, 132 insertions(+), 1 deletion(-) > create mode 100644 scripts/libmakepkg/sysgroups.sh.in > create mode 100644 scripts/libmakepkg/sysusers.sh.in > > diff --git a/scripts/Makefile.am b/scripts/Makefile.am > index 6f9abb8..a3c1050 100644 > --- a/scripts/Makefile.am > +++ b/scripts/Makefile.am > @@ -81,6 +81,8 @@ LIBMAKEPKG_IN = \ > libmakepkg/source/hg.sh \ > libmakepkg/source/local.sh \ > libmakepkg/source/svn.sh \ > + libmakepkg/sysgroups.sh \ > + libmakepkg/sysusers.sh \
libmakepkg/util/? > libmakepkg/tidy.sh \ > libmakepkg/tidy/docs.sh \ > libmakepkg/tidy/emptydirs.sh \ > diff --git a/scripts/libmakepkg/.gitignore b/scripts/libmakepkg/.gitignore > index 2de91e7..7a784d0 100644 > --- a/scripts/libmakepkg/.gitignore > +++ b/scripts/libmakepkg/.gitignore > @@ -4,6 +4,8 @@ lint_pkgbuild.sh > lint_pkgbuild/*.sh > source.sh > source/*.sh > +sysusers.sh > +sysgroups.sh > tidy.sh > tidy/*.sh > util.sh > diff --git a/scripts/libmakepkg/sysgroups.sh.in > b/scripts/libmakepkg/sysgroups.sh.in > new file mode 100644 > index 0000000..095d60e > --- /dev/null > +++ b/scripts/libmakepkg/sysgroups.sh.in > @@ -0,0 +1,60 @@ > +#!/bin/bash > +# > +# source.sh - functions for downloading and extracting sources Update > +# > +# Copyright (c) 2016 Pacman Development Team <[email protected]> > +# > +# This program is free software; you can redistribute it and/or modify > +# it under the terms of the GNU General Public License as published by > +# the Free Software Foundation; either version 2 of the License, or > +# (at your option) any later version. > +# > +# This program is distributed in the hope that it will be useful, > +# but WITHOUT ANY WARRANTY; without even the implied warranty of > +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the > +# GNU General Public License for more details. > +# > +# You should have received a copy of the GNU General Public License > +# along with this program. If not, see <http://www.gnu.org/licenses/>. > +# > + > +[[ -n "$LIBMAKEPKG_SOURCE_SYSGROUPS" ]] && return LIBMAKEPKG_SYSGROUPS or LIBMAKEPKG_UTIL_SYSGROUPS > +LIBMAKEPKG_SOURCE_SYSGROUPS=1 > + > +# field indices > +gr_name=0 > +gr_passwd=1 > +gr_gid=2 > +gr_users=3 > + > +dynamic_gid=101 > + > +gr_parse_ent() { > + IFS=: read -a "$1" > +} > + > +add_fake_group() { > + local -a gr fakeuser_args > + gr_parse_ent 'gr' <<< "$1" > + > + if [[ -n ${gr[$gr_gid]} ]]; then > + fakeuser_args+=('-g' "${gr[$gr_gid]}") > + else > + fakeuser_args+=('-g' $(( dynamic_gid++ )) ) > + fi > + > + [[ -n ${gr[$gr_name]} ]] && fakeuser_args+=('-n' "${gr[$gr_name]}") > + [[ -n ${gr[$gr_passwd]} ]] && fakeuser_args+=('-p' "${gr[$gr_passwd]}") > + [[ -n ${gr[$gr_gid]} ]] && fakeuser_args+=('-g' "${gr[$gr_gid]}") > + [[ -n ${gr[$gr_users]} ]] && fakeuser_args+=('-m' "${gr[$gr_gecos]}") > + > + fakeadd -G "${fakeuser_args[@]}" > +} > + > +add_fake_groups() { > + for ent in "${sysgroups[@]}"; do > + add_fake_group "$ent" > + done > +} > + > +# vim: set noet: There are no other vim lines in libmakepkg... mostly because I don't use vim! I dislike them due to applying to a single editor. We need to discuss this separately! > diff --git a/scripts/libmakepkg/sysusers.sh.in > b/scripts/libmakepkg/sysusers.sh.in > new file mode 100644 > index 0000000..fbb7328 > --- /dev/null > +++ b/scripts/libmakepkg/sysusers.sh.in > @@ -0,0 +1,65 @@ > +#!/bin/bash > +# > +# source.sh - functions for downloading and extracting sources > +# > +# Copyright (c) 2016 Pacman Development Team <[email protected]> > +# > +# This program is free software; you can redistribute it and/or modify > +# it under the terms of the GNU General Public License as published by > +# the Free Software Foundation; either version 2 of the License, or > +# (at your option) any later version. > +# > +# This program is distributed in the hope that it will be useful, > +# but WITHOUT ANY WARRANTY; without even the implied warranty of > +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the > +# GNU General Public License for more details. > +# > +# You should have received a copy of the GNU General Public License > +# along with this program. If not, see <http://www.gnu.org/licenses/>. > +# > + > +[[ -n "$LIBMAKEPKG_SOURCE_SYSUSERS" ]] && return > +LIBMAKEPKG_SOURCE_SYSUSERS=1 > + > +# field indices > +pw_name=0 > +pw_passwd=1 > +pw_uid=2 > +pw_gid=3 > +pw_gecos=4 > +pw_dir=5 > +pw_shell=6 > + > +dynamic_uid=101 > + > +pw_parse_ent() { > + IFS=: read -a "$1" > +} > + > +add_fake_user() { > + local -a pw fakeuser_args > + pw_parse_ent 'pw' <<< "$1" > + > + if [[ -n ${pw[$pw_uid]} ]]; then > + fakeuser_args+=('-u' "${pw[$pw_uid]}") > + else > + fakeuser_args+=('-u' $(( dynamic_uid++ )) ) > + fi > + > + [[ -n ${pw[$pw_name]} ]] && fakeuser_args+=('-n' "${pw[$pw_name]}") > + [[ -n ${pw[$pw_passwd]} ]] && fakeuser_args+=('-p' "${pw[$pw_passwd]}") > + [[ -n ${pw[$pw_gid]} ]] && fakeuser_args+=('-g' "${pw[$pw_gid]}") > + [[ -n ${pw[$pw_gecos]} ]] && fakeuser_args+=('-c' "${pw[$pw_gecos]}") > + [[ -n ${pw[$pw_dir]} ]] && fakeuser_args+=('-d' "${pw[$pw_dir]}") > + [[ -n ${pw[$pw_shell]} ]] && fakeuser_args+=('-s' "${pw[$pw_shell]}") > + > + fakeadd -U "${fakeuser_args[@]}" > +} > + > +add_fake_users() { > + for ent in "${sysusers[@]}"; do > + add_fake_user "$ent" > + done > +} > + > +# vim: set noet: > diff --git a/scripts/makepkg.sh.in b/scripts/makepkg.sh.in > index 2efcc98..a0134f6 100644 > --- a/scripts/makepkg.sh.in > +++ b/scripts/makepkg.sh.in > @@ -167,7 +167,7 @@ clean_up() { > > enter_fakeroot() { > msg "$(gettext "Entering %s environment...")" "fakeroot" > - fakeroot -- $0 -F "${ARGLIST[@]}" || exit $? > + LD_PRELOAD=/usr/lib/libfakeuser.so fakeroot -- $0 -F "${ARGLIST[@]}" || > exit $? We should probably have a check that fakeuser is installed. > } > > # Automatically update pkgver variable if a pkgver() function is provided > @@ -2098,6 +2098,8 @@ if (( INFAKEROOT )); then > fi > > chmod 755 "$pkgdirbase" > + add_fake_users > + add_fake_groups > if (( ! SPLITPKG )); then > pkgdir="$pkgdirbase/$pkgname" > mkdir "$pkgdir" >
