pkgsrc-Changes-HG archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

[pkgsrc/trunk]: pkgsrc/pkgtools Initial addition of pkgtools/pkg_comp-cron, v...



details:   https://anonhg.NetBSD.org/pkgsrc/rev/bac5dc3c2b43
branches:  trunk
changeset: 358669:bac5dc3c2b43
user:      jmmv <jmmv%pkgsrc.org@localhost>
date:      Fri Feb 17 21:27:38 2017 +0000

description:
Initial addition of pkgtools/pkg_comp-cron, version 1.0:

This package sets up periodic builds of binary packages using the
pkgtools/pkg_comp utility given minimal configuration.  All that is
needed from the user is to determine which packages to build
automatically.

If you are on NetBSD, see also sysutils/sysbuild-user, which is the
perfect companion to this package to periodically build the base system.

diffstat:

 pkgtools/Makefile                          |    3 +-
 pkgtools/pkg_comp-cron/DESCR               |    7 ++
 pkgtools/pkg_comp-cron/INSTALL             |   81 +++++++++++++++++++++++++++++
 pkgtools/pkg_comp-cron/MESSAGE             |   27 +++++++++
 pkgtools/pkg_comp-cron/Makefile            |   78 +++++++++++++++++++++++++++
 pkgtools/pkg_comp-cron/PLIST               |    3 +
 pkgtools/pkg_comp-cron/files/files.new     |  Bin 
 pkgtools/pkg_comp-cron/files/list.txt      |   11 +++
 pkgtools/pkg_comp-cron/files/pkg_comp.conf |   29 ++++++++++
 9 files changed, 238 insertions(+), 1 deletions(-)

diffs (283 lines):

diff -r f85bd12f37cb -r bac5dc3c2b43 pkgtools/Makefile
--- a/pkgtools/Makefile Fri Feb 17 21:25:46 2017 +0000
+++ b/pkgtools/Makefile Fri Feb 17 21:27:38 2017 +0000
@@ -1,4 +1,4 @@
-# $NetBSD: Makefile,v 1.116 2017/02/17 21:25:46 jmmv Exp $
+# $NetBSD: Makefile,v 1.117 2017/02/17 21:27:38 jmmv Exp $
 #
 
 COMMENT=       Tools for use in the packages collection
@@ -35,6 +35,7 @@
 SUBDIR+=       pkg_alternatives
 SUBDIR+=       pkg_chk
 SUBDIR+=       pkg_comp
+SUBDIR+=       pkg_comp-cron
 SUBDIR+=       pkg_comp1
 SUBDIR+=       pkg_distinst
 SUBDIR+=       pkg_filecheck
diff -r f85bd12f37cb -r bac5dc3c2b43 pkgtools/pkg_comp-cron/DESCR
--- /dev/null   Thu Jan 01 00:00:00 1970 +0000
+++ b/pkgtools/pkg_comp-cron/DESCR      Fri Feb 17 21:27:38 2017 +0000
@@ -0,0 +1,7 @@
+This package sets up periodic builds of binary packages using the
+pkgtools/pkg_comp utility given minimal configuration.  All that is
+needed from the user is to determine which packages to build
+automatically.
+
+If you are on NetBSD, see also sysutils/sysbuild-user, which is the
+perfect companion to this package to periodically build the base system.
diff -r f85bd12f37cb -r bac5dc3c2b43 pkgtools/pkg_comp-cron/INSTALL
--- /dev/null   Thu Jan 01 00:00:00 1970 +0000
+++ b/pkgtools/pkg_comp-cron/INSTALL    Fri Feb 17 21:27:38 2017 +0000
@@ -0,0 +1,81 @@
+#! /bin/sh
+
+BUILDBASE="@BUILDBASE@"
+EGDIR="@EGDIR@"
+PKG_COMP_HOME="@PKG_COMP_HOME@"
+PKG_COMP_USER="@PKG_COMP_USER@"
+PKG_COMP_EGDIR="@PKG_COMP_EGDIR@"
+SANDBOXCTL_EGDIR="@SANDBOXCTL_EGDIR@"
+
+# Regexp to match our crontab entry.
+CRONTAB_RE="${PREFIX}/sbin/pkg_comp4cron .*${BUILDBASE}/pkg_comp.conf"
+
+# Dumps the pkg_comp user's crontab to a temporary file and outputs
+# the path to the file.  If the crontab does not exist, populates
+# the output with some basic contents.
+get_crontab() {
+    local tempfile="$(mktemp "${TMPDIR:-/tmp}/pkg_comp.XXXXXX")"
+    if ! crontab -u "${PKG_COMP_USER}" -l >>"${tempfile}"; then
+        cat >>"${tempfile}" <<EOF
+PATH=${PREFIX}/bin:${PREFIX}/sbin:/usr/bin:/usr/sbin:/bin:/sbin
+SHELL=/bin/sh
+
+# Cheatsheet: minute hour day-of-month month day-of-week(0,7=Sun)
+EOF
+    fi
+    echo "${tempfile}"
+}
+
+# Adds an entry to for pkg_comp to the crontab if not yet present.
+install_crontab() {
+    local tempfile; tempfile="$(get_crontab)" || return
+    if ! grep "${CRONTAB_RE}" "${tempfile}" >/dev/null; then
+        echo "@daily ${PREFIX}/sbin/pkg_comp4cron -l \"${BUILDBASE}/log\"" \
+            "-- -c \"${BUILDBASE}/pkg_comp.conf\" auto" \
+            >>"${tempfile}"
+        crontab -u "${PKG_COMP_USER}" - <"${tempfile}"
+        echo "pkg_comp daily entry added to ${PKG_COMP_USER}'s crontab"
+    fi
+    rm -f "${tempfile}"
+}
+
+# Removes the previously-configured crontab entry by this package.
+uninstall_crontab() {
+    local tempfile; tempfile="$(get_crontab)" || return
+    if grep "${CRONTAB_RE}" "${tempfile}" >/dev/null; then
+        local tempfile2="$(mktemp "${TMPDIR:-/tmp}/pkg_comp.XXXXXX")"
+        grep -v "${CRONTAB_RE}" "${tempfile}" >>"${tempfile2}"
+        if [ -s "${tempfile2}" ]; then
+            crontab -u "${PKG_COMP_USER}" "${tempfile2}"
+        else
+            crontab -u "${PKG_COMP_USER}" -r
+        fi
+        echo "pkg_comp daily entry removed from ${PKG_COMP_USER}'s crontab"
+        rm -f "${tempfile2}"
+    fi
+    rm -f "${tempfile}"
+}
+
+case "${STAGE}" in
+    POST-INSTALL)
+        if [ ! -e "${PKG_COMP_HOME}/sandbox.conf" ]; then
+            echo "${PKGNAME}: Installing sample sandbox.conf file"
+            ${MKDIR} -p "${PKG_COMP_HOME}"
+            sed "s,^SANDBOX_ROOT=.*$,SANDBOX_ROOT=${PKG_COMP_HOME}/sandbox," \
+                "${SANDBOXCTL_EGDIR}/default.conf" \
+                >"${PKG_COMP_HOME}/sandbox.conf"
+        fi
+
+        if [ ! -e "${PKG_COMP_HOME}/extra.mk.conf" ]; then
+            echo "${PKGNAME}: Installing sample extra.mk.conf file"
+            ${MKDIR} -p "${PKG_COMP_HOME}"
+            cp "${PKG_COMP_EGDIR}/extra.mk.conf" "${PKG_COMP_HOME}/"
+        fi
+
+        install_crontab
+        ;;
+
+    DEINSTALL)
+        uninstall_crontab
+        ;;
+esac
diff -r f85bd12f37cb -r bac5dc3c2b43 pkgtools/pkg_comp-cron/MESSAGE
--- /dev/null   Thu Jan 01 00:00:00 1970 +0000
+++ b/pkgtools/pkg_comp-cron/MESSAGE    Fri Feb 17 21:27:38 2017 +0000
@@ -0,0 +1,27 @@
+===========================================================================
+$NetBSD: MESSAGE,v 1.1 2017/02/17 21:27:38 jmmv Exp $
+
+The system has been configured to perform daily rebuilds of packages for
+the current platform.  Please take the time to review the following files:
+
+       ${PKG_COMP_HOME}/extra.mk.conf
+       ${PKG_COMP_HOME}/list.txt
+       ${PKG_COMP_HOME}/pkg_comp.conf
+       ${PKG_COMP_HOME}/sandbox.conf
+
+At the very minimum, you will have to modify the list.txt file to specify
+the set of packages you want to build.
+
+Make sure to review that the changes to the ${PKG_COMP_USER}'s crontab(5)
+are correct and that the chosen schedule suits your needs.
+
+Built binary packages can be used by setting:
+
+       PKG_PATH=file://${PKG_COMP_HOME}/packages/All
+
+Lastly, remember that you can trigger manual pkg_comp operations by doing:
+
+       su - ${PKG_COMP_USER} ${PREFIX}/sbin/pkg_comp \
+           -c ${PKG_COMP_HOME}/pkg_comp.conf <arguments>
+
+===========================================================================
diff -r f85bd12f37cb -r bac5dc3c2b43 pkgtools/pkg_comp-cron/Makefile
--- /dev/null   Thu Jan 01 00:00:00 1970 +0000
+++ b/pkgtools/pkg_comp-cron/Makefile   Fri Feb 17 21:27:38 2017 +0000
@@ -0,0 +1,78 @@
+# $NetBSD: Makefile,v 1.1 2017/02/17 21:27:38 jmmv Exp $
+
+DISTNAME=      pkg_comp-cron-1.0
+CATEGORIES=    pkgtools
+MASTER_SITES=  # empty
+DISTFILES=     # empty
+
+MAINTAINER=    jmmv%NetBSD.org@localhost
+COMMENT=       Configures periodic pkgsrc binary package builds
+LICENSE=       modified-bsd
+
+DEPENDS=               pkg_comp>=2.0:../../pkgtools/pkg_comp
+
+BUILD_DEFS=            VARBASE
+DEINSTALL_TEMPLATES=   INSTALL
+NO_CHECKSUM=           yes
+NO_CONFIGURE=          yes
+WRKSRC=                        ${WRKDIR}
+
+PKG_COMP_USER?=                ${REAL_ROOT_USER}
+PKG_COMP_GROUP?=       ${REAL_ROOT_GROUP}
+PKG_COMP_HOME?=                ${VARBASE}/pkg_comp
+
+EGDIR=         ${PREFIX}/share/examples/pkg_comp-cron
+OWN_DIRS_PERMS=        ${PKG_COMP_HOME} ${PKG_COMP_USER} ${PKG_COMP_GROUP} 755
+CONF_FILES=    ${EGDIR}/list.txt ${PKG_COMP_HOME}/list.txt
+CONF_FILES+=   ${EGDIR}/pkg_comp.conf ${PKG_COMP_HOME}/pkg_comp.conf
+
+BUILD_SUBST+=  -e 's,@BUILDBASE@,${PKG_COMP_HOME},g'
+BUILD_SUBST+=  -e 's,@EGDIR@,${EGDIR},g'
+BUILD_SUBST+=  -e 's,@PKG_COMP_EGDIR@,${PREFIX}/share/examples/pkg_comp,g'
+BUILD_SUBST+=  -e 's,@PREFIX@,${PREFIX},g'
+FILES_SUBST+=  BUILDBASE=${PKG_COMP_HOME}
+FILES_SUBST+=  EGDIR=${EGDIR}
+FILES_SUBST+=  PKG_COMP_HOME=${PKG_COMP_HOME}
+FILES_SUBST+=  PKG_COMP_USER=${PKG_COMP_USER}
+FILES_SUBST+=  PKG_COMP_EGDIR=${PREFIX}/share/examples/pkg_comp
+FILES_SUBST+=  SANDBOXCTL_EGDIR=${PREFIX}/share/examples/sandboxctl
+MESSAGE_SUBST+=        EGDIR=${EGDIR}
+MESSAGE_SUBST+=        PKG_COMP_HOME=${PKG_COMP_HOME}
+MESSAGE_SUBST+=        PKG_COMP_USER=${PKG_COMP_USER}
+
+.include "../../mk/bsd.prefs.mk"
+
+# Configure the default pkg_comp.conf on a platform basis, providing
+# reasonable defaults.  The user has to review the installed file anyway
+# so it is not strictly necessary to make these "perfect" -- but good
+# defaults will help in getting started.
+.if ${OPSYS} == "Darwin"
+# Xcode ships with git only, not cvs, so default to git to simplify the
+# bootstrapping process.
+BUILD_SUBST+=  -e 's,@FETCH_VCS@,git,g'
+# Since macOS Sierra (11.12), /usr is a protected tree to which apps
+# cannot write even as root.  Default to somewhere else; because pkg_comp
+# requires privileges to run, /opt/pkg is a reasonable location.
+BUILD_SUBST+=  -e 's,@LOCALBASE@,/opt/pkg,g'
+BUILD_SUBST+=  -e 's,@SYSCONFDIR@,/opt/pkg/etc,g'
+BUILD_SUBST+=  -e 's,@VARBASE@,/opt/pkg/var,g'
+.else
+BUILD_SUBST+=  -e 's,@FETCH_VCS@,cvs,g'
+BUILD_SUBST+=  -e 's,@LOCALBASE@,/usr/pkg,g'
+BUILD_SUBST+=  -e 's,@SYSCONFDIR@,/etc,g'
+BUILD_SUBST+=  -e 's,@VARBASE@,/var,g'
+.endif
+
+INSTALLATION_DIRS=     share/examples/pkg_comp-cron
+
+do-build:
+.for file in list.txt pkg_comp.conf
+       ${SED} ${BUILD_SUBST} <${FILESDIR}/${file} >${WRKSRC}/${file}
+.endfor
+
+do-install:
+.for file in list.txt pkg_comp.conf
+       ${INSTALL_DATA} ${WRKSRC}/${file} ${DESTDIR}${EGDIR}/
+.endfor
+
+.include "../../mk/bsd.pkg.mk"
diff -r f85bd12f37cb -r bac5dc3c2b43 pkgtools/pkg_comp-cron/PLIST
--- /dev/null   Thu Jan 01 00:00:00 1970 +0000
+++ b/pkgtools/pkg_comp-cron/PLIST      Fri Feb 17 21:27:38 2017 +0000
@@ -0,0 +1,3 @@
+@comment $NetBSD: PLIST,v 1.1 2017/02/17 21:27:38 jmmv Exp $
+share/examples/pkg_comp-cron/list.txt
+share/examples/pkg_comp-cron/pkg_comp.conf
diff -r f85bd12f37cb -r bac5dc3c2b43 pkgtools/pkg_comp-cron/files/files.new
Binary file pkgtools/pkg_comp-cron/files/files.new has changed
diff -r f85bd12f37cb -r bac5dc3c2b43 pkgtools/pkg_comp-cron/files/list.txt
--- /dev/null   Thu Jan 01 00:00:00 1970 +0000
+++ b/pkgtools/pkg_comp-cron/files/list.txt     Fri Feb 17 21:27:38 2017 +0000
@@ -0,0 +1,11 @@
+# Packages to build automatically during the periodic runs.
+#
+# List one package per line, using bare names or the category/name syntax.
+
+#shells/dash
+#tmux
+
+# Don't forget to list pkg_comp-cron itself if you are building packages
+# for this same machine!  Otherwise, rebootstrapping your system
+# configuration will require additional manual steps.
+#pkg_comp-cron
diff -r f85bd12f37cb -r bac5dc3c2b43 pkgtools/pkg_comp-cron/files/pkg_comp.conf
--- /dev/null   Thu Jan 01 00:00:00 1970 +0000
+++ b/pkgtools/pkg_comp-cron/files/pkg_comp.conf        Fri Feb 17 21:27:38 2017 +0000
@@ -0,0 +1,29 @@
+# $NetBSD: pkg_comp.conf,v 1.1 2017/02/17 21:27:38 jmmv Exp $
+
+# pkg_comp.conf(5) configuration file for unattended pkgsrc builds.
+
+# Remote VCS configuration.
+FETCH_VCS=@FETCH_VCS@
+#CVS_ROOT=:ext:anoncvs%anoncvs.NetBSD.org@localhost:/cvsroot
+#CVS_TAG=pkgsrc-2017Q1
+#GIT_URL=https://github.com/jsonn/pkgsrc.git
+#GIT_BRANCH=trunk
+
+# Host file layout.
+PKGSRCDIR="@BUILDBASE@/pkgsrc"
+DISTDIR="@BUILDBASE@/distfiles"
+PACKAGES="@BUILDBASE@/packages"
+PBULK_PACKAGES="@BUILDBASE@/pbulk-packages"
+EXTRA_MKCONF="@BUILDBASE@/extra.mk.conf"
+SANDBOX_CONFFILE="@BUILDBASE@/sandbox.conf"
+
+# Target file layout.
+LOCALBASE="@LOCALBASE@"
+PKG_DBDIR="${LOCALBASE}/libdata/pkgdb"
+SYSCONFDIR="@SYSCONFDIR@"
+VARBASE="@VARBASE@"
+
+# List of packages to build during automatic execution.  We source these
+# from a separate file for simplicity, as maintaining a long list of
+# package names in a shell variable can be cumbersome.
+AUTO_PACKAGES="$(grep -v '^#' '@BUILDBASE@/list.txt')"



Home | Main Index | Thread Index | Old Index