File:  [Coherent Logic Development] / buildman / install
Revision 1.12: download - view: text, annotated - select for diffs
Wed Mar 12 02:31:46 2025 UTC (3 weeks, 1 day ago) by snw
Branches: MAIN
CVS tags: HEAD
Add support for host-specific pre and post-build scripts

#!/bin/sh

# SPDX-FileCopyrightText: (C) 2025 Coherent Logic Development LLC
# SPDX-FileCopyrightText: (C) 2025 Serena Willis
#
# SPDX-License-Identifier: AGPL-3.0

#
# BuildMan 0.0.1
#  Distributed CI/CD system with portability to older UNIX systems
#
#  install - buildman installer
#
# Copyright (C) 2025 Coherent Logic Development LLC
#
# Author: Serena Willis <snw@coherent-logic.com>
#

PROGN=`basename $0`

#if [ "$UID" != "0" ]
#then
#    echo "$PROGN error:  must run as root"
#    exit 1
#fi

TARGET="client"
TUSER="build:6000"
TGROUP="build:6000"
BUILDMAN_MASTER=""
INSTALL_BASE="/usr/local"

OS=`uname`

if [ "$OS" = "SCO_SV" ] ; then
    THOST=`hostname -s`
    PATH=/usr/gnu/bin:$PATH
    export PATH
else
    if [ "$OS" = "SunOS" ] ; then
        THOST=`hostname`
    else    
        THOST=`hostname -s`
    fi
fi

tmphost=`echo ${THOST} | cut -d. -f1`
THOST="${tmphost}"

if [ "$OS" = "SunOS" ]
then
    BUILDMAN_BASE="/export/home/build"
else    
    BUILDMAN_BASE="/home/build"
fi

while getopts ':t:u:g:b:m:i:h' OPTION
do
    case $OPTION in

        i)
            INSTALL_BASE="${OPTARG}"
            ;;
        
        u)
            TUSER="${OPTARG}"
            ;;

        g)
            TGROUP="${OPTARG}"
            ;;
        
        b)
            BUILDMAN_BASE="${OPTARG}"
            ;;

        m)
            BUILDMAN_MASTER="${OPTARG}"
            ;;

        h)
            echo ""
            echo "BuildMan Installer"
            echo " Copyright (C) 2025 Coherent Logic Development LLC"
            echo ""
            echo ""
            echo "usage:  ${PROGN} [-i <install-base>] [-b <buildman-base>] [-u <buildman-username:buildman-uid>] [-g <buildman-groupname:buildman-gid> ] [-m <buildman-master>"
            echo "  <install-base> is the directory in which buildman will be installed"
            echo "  <buildman-base> is the directory in which buildman will operate"
            echo "  <buildman-username> is the username owning the files for buildman"
            echo "  <buildman-uid> is the numeric UID of the owner of the buildman files"
            echo "  <buildman-groupname> is the group name owning the files for buildman"
            echo "  <buildman-gid> is the numeric GID of the group owning the buildman files"
            echo "  <buildman-master> is the primary buildman host, supplied as IP address or FQDN"
            echo ""
            exit 0
            ;;
    esac
done

T_LOGIN=`echo ${TUSER} | cut -d: -f1`
T_UID=`echo ${TUSER} | cut -d: -f2`
T_GRPNAM=`echo ${TGROUP} | cut -d: -f1`
T_GID=`echo ${TGROUP} | cut -d: -f2`

BIN_BASE="${INSTALL_BASE}/bin"

if [ ! -d "${BIN_BASE}" ]
then
    mkdir -p "${BIN_BASE}"
fi

groupadd -g ${T_GID} ${T_GRPNAM}
useradd -u ${T_UID} -g ${T_GRPNAM} -c "BuildMan" -m -d "${BUILDMAN_BASE}" "${T_LOGIN}"

install -o ${T_UID} -g ${T_GID} -m 755 bm "${BIN_BASE}/bm"
install -o ${T_UID} -g ${T_GID} -m 755 bma "${BIN_BASE}/bma"

DEF="/etc/default/bm"


echo "BUILDMAN_BASE=${BUILDMAN_BASE}" > "${DEF}"
echo "BUILDMAN_USER=${T_LOGIN}" >> "${DEF}"
echo "BUILDMAN_GROUP=${T_GRPNAM}" >> "${DEF}"
echo "BUILDMAN_UID=${T_UID}" >> "${DEF}"
echo "BUILDMAN_GID=${T_GID}" >> "${DEF}"
echo "BUILDMAN_MASTER=${BUILDMAN_MASTER}" >> "${DEF}"


FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>