initial attempts at user add scripts for FreeBSD packaging.
authorDaniel Kahn Gillmor <dkg@fifthhorseman.net>
Fri, 12 Sep 2008 08:50:30 +0000 (04:50 -0400)
committerDaniel Kahn Gillmor <dkg@fifthhorseman.net>
Fri, 12 Sep 2008 08:50:30 +0000 (04:50 -0400)
packaging/freebsd/pkg-deinstall [new file with mode: 0755]
packaging/freebsd/pkg-install [new file with mode: 0755]

diff --git a/packaging/freebsd/pkg-deinstall b/packaging/freebsd/pkg-deinstall
new file mode 100755 (executable)
index 0000000..84217d5
--- /dev/null
@@ -0,0 +1,18 @@
+#!/bin/sh
+
+# a package removal script for monkeysphere (borrowing from
+# monkeysphere's debian/monkeysphere.postrm)
+
+# Author: Daniel Kahn Gillmor <dkg@fifthhorseman.net>
+# Copyright 2008
+
+# FIXME: is /var/lib/monkeysphere the right place for this stuff on
+# FreeBSD?
+VARLIB="/var/lib/monkeysphere"
+
+
+# FIXME: This needs to be filled in!  Under what circumstances do we
+# want to actually purge all of /var/lib/monkeysphere?
+
+# (note: FreeBSD does not seem to want the package-specific user to be
+# purged at package removal)
diff --git a/packaging/freebsd/pkg-install b/packaging/freebsd/pkg-install
new file mode 100755 (executable)
index 0000000..c2af960
--- /dev/null
@@ -0,0 +1,123 @@
+#!/bin/sh
+
+# an installation script for monkeysphere (borrowing liberally from
+# Wnn6's port and from monkeysphere's debian/monkeysphere.postinst)
+
+# Author: Daniel Kahn Gillmor <dkg@fifthhorseman.net>
+# Copyright 2008
+
+# FIXME: is /var/lib/monkeysphere the right place for this stuff on
+# FreeBSD?
+VARLIB="/var/lib/monkeysphere"
+
+check_pw()
+{
+    if which -s pw; then
+       :
+    else
+       cat <<EOF
+
+This system looks like a pre-2.2 version of FreeBSD.  We see that it
+is missing the "pw" utility.  We need this utility.  Please get and
+install it, and try again.  You can get the source from:
+
+  ftp://ftp.freebsd.org/pub/FreeBSD/FreeBSD-current/src/usr.sbin/pw.tar.gz
+
+EOF
+       exit 1
+    fi
+}
+
+ask() {
+    local question default answer
+
+    question=$1
+    default=$2
+    if [ -z "${PACKAGE_BUILDING}" ]; then
+       read -p "${question} (y/n) [${default}]? " answer
+    fi
+    if [ x${answer} = x ]; then
+       answer=${default}
+    fi
+    echo ${answer}
+}
+
+yesno() {
+    local dflt question answer
+
+    question=$1
+    dflt=$2
+    while :; do
+       answer=$(ask "${question}" "${dflt}")
+       case "${answer}" in
+       [Yy]*)          return 0;;
+       [Nn]*)          return 1;;
+       esac
+       echo "Please answer yes or no."
+    done
+}
+
+failure() {
+    local retval badgroups badusers
+    retval=$1
+    badgroups=`getent group monkeysphere 641`
+    badusers=`getent passwd monkeysphere 641`
+
+    if [ X"$badgroups" != X ]; then
+       badgroups="
+Conflicting group(s):
+
+$badgroups"
+    fi
+
+    if [ X"$badusers" != X ]; then
+       badusers="Conflicting user(s):
+
+$badusers"
+    fi
+    
+    cat <<EOF
+
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+This port or package assumes that the ID number of 'monkeysphere' will
+be 641.  But this system has:
+$badgroups
+$badusers
+
+Please correct these conflict(s) and try again.
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+EOF
+    exit $retval
+}
+
+case $2 in
+POST-INSTALL)
+
+    # make sure that the correct user and group are present:
+    id_monkeysphere=`id -u monkeysphere 2> /dev/null`
+    gid_monkeysphere=`getent group monkeysphere | cut -f3 -d: 2> /dev/null`
+    if [ X"$id_monkeysphere" = X641 ] && [ X"$gid_monkeysphere" = X641 ];then
+       exit 0
+    else
+    # add an account 'monkeysphere' to this system
+       echo ""
+       echo "You need an account 'monkeysphere' whose ID number is 641, with group 'monkeysphere' (GID 641)"
+       if yesno "Would you like to create it automatically?" y; then
+       # We need a command 'pw(8)'
+           check_pw
+           pw groupadd monkeysphere -g 641 || failure $?
+           pw useradd monkeysphere -u 641 -g 641 -h - -d "$VARLIB" \
+               -s /bin/sh -c 'monkeysphere authentication user,,,' || failure $?
+       # FIXME: should we really be using a real shell?  Convention
+       # (/usr/ports/UIDs) seems to indicate /nonexistent is
+       # preferred
+       else
+           echo "Please create it, and try again."
+           exit 1
+       fi
+    fi
+    # FIXME: we should create $VARLIB and chown the relevant subdirs
+    # (see debian/monkeysphere.postinst)
+    
+    ;;
+esac