#!/bin/bash #============================================================================== # Copyright and license info is available in the LICENSE file included with # this package, and also available online: # https://swarm.workshop.perforce.com/view/guest/perforce_software/helix-installer/main/LICENSE #------------------------------------------------------------------------------ #============================================================================== # Declarations set -u declare Version=2.9.12 # The tar file specified here is used if the '-t' flag is used to # specify installing from a tar file, which is good for getting a known, # fixed version of the SDP to work with. The default install method # uses Helix DVCS features to get the very latest code from a branch # ('main' by default, but '-b dev' could be specified as well) by doing # a 'p4 clone' command. declare SDPTar=sdp.Unix.2018.1.23504.tgz declare SDPURL=https://swarm.workshop.perforce.com/projects/perforce-software-sdp/download/downloads/$SDPTar declare SDPInstallMethod=DVCS declare SDPInstallBranch=Unset declare WorkshopPort=public.perforce.com:1666 declare WorkshopUser=sdp_reader # Workshop user with no password. declare WorkshopRemote= declare HelixInstallerBaseURL=https://swarm.workshop.perforce.com/download/guest/perforce_software/helix-installer/main declare Depotdata=/hxdepots declare ResetHome=$Depotdata/reset declare Metadata1=/hxmetadata1 declare Metadata2=/hxmetadata2 declare Logs=/hxlogs declare SDPHome=$Depotdata/sdp # If using this Helix Installer to bootsrap a production installation, # please do NOT be tempted to keep this password. Replace it with your # own. And after bootsrapping, be sure to remove the Helix Installer, # as this software has no business being on a production machine. declare Password=F@stSCM! declare ExesDir=$Depotdata/exes declare DownloadsDir=$Depotdata/downloads declare -i BlastDownloadsAndExes=0 declare -i PullFromWebAsNeeded=1 declare -i LoadSampleDepot=1 declare PreserveDirList=Unset declare P4ExeRel=r17.2 declare P4DExeRel=$P4ExeRel declare P4PExeRel=$P4ExeRel declare P4BrokerExeRel=$P4ExeRel declare P4SwarmRel=r17.4 declare P4Rel=r17.2 declare RunUser=perforce declare RunGroup= declare SampleDepotTar= declare Arch=x86_64 declare ApiArch= declare ThisArch=$(uname -m) declare ThisHost=$(hostname -s) declare ThisOS=$(uname -s) declare ThisUser=$(whoami) declare RunArch=x86_64 declare CBIN=/p4/common/bin declare CCFG=/p4/common/config declare SDPSetupDir=$SDPHome/Server/Unix/setup declare SDPConfigDir=$SDPHome/Server/Unix/p4/common/config declare ThisScript=${0##*/} declare SDPInstances="1" #------------------------------------------------------------------------------ # Function: usage (required function) # # Input: # $1 - style, either -h (for short form) or -man (for man-page like format). #------------------------------------------------------------------------------ function usage { declare style=${1:--h} msg "USAGE for $ThisScript v$Version: $ThisScript [-B|-local] [-fast] [-no_ssl] [-no_sd] [-b <branch>[,@cl] |-t <tarfile>] [-p <dir1>[,<dir2>,...]>] [-D] or $ThisScript [-h|-man] " if [[ $style == -man ]]; then msg " SAFETY NOTICE: This script SHOULD NEVER EXIST on a Production Perforce server. DESCRIPTION: This script simplifies the process of testing an SDP installation, repetitively blasting all process by the 'perforce' user and resetting the SDP from the ground up, blasting typical SDP folders each time. It is helpful when bootstrapping a demo server with a sample data set, complete with broker, and optionally Perl/P4Perl and Python/P4Python. PLATFORM SUPPORT: This works on Red Hat Enterprise Linux, CentOS, and Mac OSX (Mavericks, Yosemitie, Sierra) platforms. It works on RHEL/CentOS 6.4-6.9 and likely on other Linux derivatives with little or no modification. It currently supports only the bin.linux26x86_64 (Linux) and bin.darwin90x86_64 (Mac OSX/Darwin) architectures. REQUIREMENTS: Development utilities such as 'make' and the 'gcc' compiler must be installed and available in the PATH (unless running with '-fast'). The 'curl' utility must be installed and available in the PATH (unless running with '-local'). OPTIONS: -B Specify '-B' to blast base SDP dirs, for a clean start. Otherwise, downloaded components from earlier runs will be used (which should be fine if they were run recently). The '-B' and '-local' arguments are mutually exclusive. -local By default, various files and executables are downloaded from the Perforce Workshop or the Perforce FTP server as needed. With '-local', any missing files are treated as an error condition. The '-B' and '-local' arguments are mutually exclusive. -fast Specify '-fast' to skip installation of Perl auxiliary things like Perl, Python, P4Perl, P4Python. The '-fast' argument changes the check for GCC/G++ from a fatal error to a warning message. -no_ssl By default, the Perforce server is setup SSL-enabled. Specify '-no_ssl' to avoid using SSL feature. -no_sd By default, the Perforce Sample Depot data set is loaded. Specify '-no_sd' to skip loading the Sample Depot. -p <dir1>[,<dir2>,...]>] Specify a comma-delimited list of directories under /p4/common to preserve that would otherwise be removed. Directories must be specified as paths relative to /p4/common, and cannot contain spaces. For example, the value '-p config,bin/triggers' would preserve the /p4/common/config and /p4/common/bin/triggers directories. Directories specified are moved aside to a temporary working area before the SDP folders are removed. After installation, they are moved back via an 'rsync' command with no '--delete' option. This means any files that overlap with the stock install are replaced by ones that originally existed, but non-overlapping files are not removed. This is intended to be useful for developing test suites that install server under /p4/common/bin, e.g. Component Based Development scripts which install under /p4/common/bin/cbd would use '-p bin/cbd'. -b <branch>[,@cl] The default SDP install method is to clone the SDP from the main branch in The Workshop ($WorkshopPort). Specify '-b' to use a different branch, e.g. 'dev'. If '-b' is specified with the optional @cl syntax, where @cl specifies a changelist with files shelved on the given branch, a form of unshelving is done, enabling a workflow for testing shelved changes with the Helix Installer. So for example, specify '-b dev,@23123' to clone from the dev branch, and then followed by a fetch of shelved changelist @23123, which is expected to have files shelved in the dev branch. -t <tarfile> Specify a tarfile to use, e.g. '-t sdp.Unix.2017.3.23041.tgz', or use the special value '-t default' to use the default SDP tarfile, $SDPTar The specified tar file must exist here: https://swarm.workshop.perforce.com/projects/perforce-software-sdp/files/downloads If '-t <tarfile>' is not specified, default install method is used instead, which is to clone the SDP main branch from The Workshop ($WorkshopPort). Use '-t' to get a known version of the SDP for testing. Avoid '-t' to test with the very latest SDP from a given branch (see '-b' above for more info), even if the latest has not yet been packaged into a distribution tar file. -D Set extreme debugging verbosity. HELP OPTIONS: -h Display short help message -man Display man-style help message EXAMPLES: COMPREHENSIVE INSTALLATION: su - useradd perforce mkdir -p /hxdepots/reset chown -R perforce:perforce /hxdepots/reset cd /hxdepots/reset curl -k -s -O https://swarm.workshop.perforce.com/downloads/guest/perforce_software/helix-installer/main/src/reset_sdp.sh ./reset_sdp.sh 2>&1 | tee reset_sdp.log FAST INSTALLATION (skipping Perl, Python): su - useradd perforce mkdir -p /hxdepots/reset chown -R perforce:perforce /hxdepots/reset cd /hxdepots/reset curl -k -s -O https://swarm.workshop.perforce.com/downloads/guest/perforce_software/helix-installer/main/src/reset_sdp.sh curl -k -s -O https://swarm.workshop.perforce.com/downloads/guest/perforce_software/helix-installer/main/src/r ./r Note that the 'r' wrapper script calls the reset_sdp.sh script with a pre-defined of flags optimized for fast opreration. The 'r' wapper also handles log capture, writing to the file 'reset.log'. SDP DEV BRANCH TESTING: The Helix Installer can be used to test SDP changes shelved to the SDP dev branch in The Workshop. The following example illustrates testing a change in shelved changelist 23123: su - useradd perforce mkdir -p /hxdepots/reset chown -R perforce:perforce /hxdepots/reset cd /hxdepots/reset curl -k -s -O https://swarm.workshop.perforce.com/downloads/guest/perforce_software/helix-installer/main/src/reset_sdp.sh ./reset_sdp.sh -b dev,@23123 2>&1 | tee reset_sdp.CL23123.log After the first test, an iterative test cycle may follow on the same shelved changelist. For each test iteration, the shelved changelist is first updated in the workspace from which the change was originally shelved, e.g. with a command like 'p4 shelve -f -c 23123'. Then a new test can be done by calling reset_sdp.sh with the same arguments. The script will re-install the SDP cleanly, and then re-apply the updated shelved changelist. " fi exit 1 } #------------------------------------------------------------------------------ # Functions msg(), dbg(), and bail(). # Sample Usage: # bail "Missing something important. Aborting." # bail "Aborting with exit code 3." 3 function msg () { echo -e "$*"; } function dbg () { msg "DEBUG: $*" >&2; } function bail () { msg "\nError: ${1:-Unknown Error}\n"; exit ${2:-1}; } #------------------------------------------------------------------------------ # Functions. The runCmd() function is similar to functions defined in SDP core # libraries, but we need to duplicate them here since this script runs before # the SDP is available on the machine (and we want no dependencies for this # script. function runCmd { cmd=${1:-echo Testing runCmd} desc=${2:-""} [[ -n "$desc" ]] && msg "$desc" msg "Running: $cmd" $cmd return $? } #============================================================================== # Command Line Processing declare -i NoOp=0 declare -i shiftArgs=0 declare -i InstallAuxFiles=1 declare -i UseSSL=1 declare TmpFile=/tmp/tmp.reset_sdp.$$.$RANDOM declare TmpDir=/tmp/tmp.dir.reset_sdp.$$.$RANDOM declare ShelvedChange=Unset declare LocalShelvedChange=Unset set +u while [[ $# -gt 0 ]]; do case $1 in (-B) BlastDownloadsAndExes=1;; (-local) PullFromWebAsNeeded=0;; (-fast) InstallAuxFiles=0;; (-no_ssl) UseSSL=0;; (-no_sd) LoadSampleDepot=0;; (-t) if [[ "$2" != "default" ]]; then SDPTar=$2 fi SDPInstallMethod=Tarfile shiftArgs=1 ;; (-b) if [[ "$2" == *",@"* ]]; then SDPInstallBranch=${2%%,@*}; ShelvedChange=${2##*,@} else SDPInstallBranch=$2; fi shiftArgs=1 ;; (-p) PreserveDirList=$2; shiftArgs=1;; (-h) usage -h;; (-man) usage -man;; (-D) set -x;; # Debug; use 'set -x' mode. (*) bail "Usage Error: Unknown arg ($1).";; esac # Shift (modify $#) the appropriate number of times. shift; while [[ $shiftArgs -gt 0 ]]; do [[ $# -eq 0 ]] && bail "Usage Error: Wrong number of args or flags to args." shiftArgs=$shiftArgs-1 shift done done set -u #------------------------------------------------------------------------------ # Command Line Validation if [[ $ThisUser != root ]]; then bail "Run as root, not $ThisUser." else msg "Verified: Running as user $RunUser." fi [[ $BlastDownloadsAndExes -eq 1 && $PullFromWebAsNeeded -eq 0 ]] && \ bail "The '-B' and '-local' arguments are mutually exclusive." [[ $SDPInstallBranch != Unset && $SDPInstallMethod == Tarfile ]] && \ bail "The '-b <branch>' and '-t <tarfile>' arguments are mutually exclusive." [[ $SDPInstallBranch == Unset ]] && SDPInstallBranch=main #------------------------------------------------------------------------------ msg "Started $ThisScript v$Version at $(date)." # Digital asset acquisition and availability checks. [[ ! -d $Depotdata ]] && runCmd "/bin/mkdir -p $Depotdata" cd $Depotdata || bail "Could not cd to [$Depotdata]." msg "Verifying dependencies." if [[ -z "$(which gcc 2>/dev/null)" || -z "$(which g++ 2>/dev/null)" ]]; then if [[ $InstallAuxFiles -eq 1 ]]; then bail "No gcc found in the path. You may need to install it. Please\n check that the gcc and gcc-c++ packages are\n installed, e.g. with:\n\tyum install -y gcc gcc-c++\n\n" else msg "Warning: No gcc found in the path. You may need to install it. Please\n check that the gcc and gcc-c++ packages are\n installed, e.g. with:\n\tyum install -y gcc gcc-c++\nIgnoring missing gcc/g++ due to '-fast'.\n" fi else msg "Verified: gcc and g++ are available and in the PATH." fi if [[ $PullFromWebAsNeeded -eq 1 ]]; then [[ -z "$(which curl 2>/dev/null)" ]] && \ bail "No 'curl' found in the path. You may need to install it or adjust the PATH to find it.\n\n" fi [[ -z "$(which su 2>/dev/null)" ]] && \ bail "No 'su' found in the path. You may need to install it or add it to the path for the root user.\n\n" if [[ $ThisArch == $RunArch ]]; then msg "Verified: Running on a supported architecture [$ThisArch]." ApiArch=UNDEFINED_API_ARCH case $ThisOS in (Darwin) ApiArch="darwin90x86_64" RunGroup=staff SampleDepotTar=sampledepot.mac.tar.gz ;; (Linux) ApiArch="linux26x86_64" RunGroup=perforce SampleDepotTar=sampledepot.tar.gz ;; (*) bail "Unsupported value returned by 'uname -m': $ThisOS. Aborting.";; esac else bail "Running on architecture $ThisArch. Run this only on hosts with '$RunArch' architecture. Aborting." fi # In this block, we just check that directories specified to be preserved # with the '-p' flag actually exist, in which case we abort before further # processing. if [[ $PreserveDirList != Unset ]]; then for d in $(echo $PreserveDirList|tr ',' ' '); do preserveDir=$Depotdata/p4/common/$d if [[ -d "$preserveDir" ]]; then parentDir=$(dirname $TmpDir/$d) if [[ ! -d "$parentDir" ]]; then runCmd "/bin/mkdir -p $parentDir" "Creating parent temp dir [$parentDir]." ||\ bail "Failed to create parent temp dir [$parentDir]." fi fi done fi if [[ -d $ExesDir && $BlastDownloadsAndExes -eq 1 ]]; then runCmd "/bin/rm -r -f $ExesDir" \ "Blasting exes dir [$ExesDir] due to '-B'." fi if [[ ! -d $ExesDir ]]; then [[ $PullFromWebAsNeeded -eq 0 ]] && bail "ExesDir [$ExesDir] is missing and '-local' specified. Aborting." runCmd "/bin/mkdir -p $ExesDir" ||\ bail "Could not create dir [$ExesDir]." cd $ExesDir || exit 1 msg "Working in [$PWD]." runCmd "curl -s -O http://ftp.perforce.com/perforce/$P4ExeRel/bin.$ApiArch/p4" ||\ bail "Could not get 'p4' executable." runCmd "curl -s -O http://ftp.perforce.com/perforce/$P4DExeRel/bin.$ApiArch/p4d" ||\ bail "Could not get 'p4d' executable." runCmd "curl -s -O http://ftp.perforce.com/perforce/$P4PExeRel/bin.$ApiArch/p4p" ||\ bail "Could not get 'p4p' executable." runCmd "curl -s -O http://ftp.perforce.com/perforce/$P4BrokerExeRel/bin.$ApiArch/p4broker" ||\ bail "Could not get 'p4broker' executable." runCmd "chmod +x p4 p4d p4p p4broker" \ "Doing chmod +x for downloaded executables." else msg "Using existing exes dir [$ExesDir]." fi #------------------------------------------------------------------------------ # Services Shutdown and Cleanup. for i in $SDPInstances; do if [[ $ThisOS == Linux || $ThisOS == Darwin ]]; then msg "Stopping Perforce-related servcies for Instance $i." for svc in p4d p4broker p4p p4web p4dtg; do processCmd="${svc}_${i}" # This 'ps' command should work on Linux and Mac (Yosemite+ at least). Pids=$(ps -u $RunUser -f | grep -v grep | grep "/$processCmd "| awk '{print $2}') if [[ -z "$Pids" && $svc == p4d ]]; then msg "$processCmd not found for p4d service; looking for _bin variant instead." # For the p4d service, the process command may look like 'p4d_1_bin' or just 'p4d_1', so # we check for both. processCmd="${svc}_${i}_bin" Pids=$(ps -u $RunUser -f | grep -v grep | grep "/$processCmd "| awk '{print $2}') fi if [[ -n "$Pids" ]]; then runCmd "kill -9 $Pids" \ "Killing user $RunUser processes for command $processCmd." sleep 1 else msg "Verified: No processes by user $RunUser for command [$processCmd] are running." fi done fi if [[ $ThisOS == Linux ]]; then cd /etc/init.d msg "Removing Perforce-related servcies.\nWorking in [$PWD]." for svc in $(/bin/ls p4*_init); do runCmd "chkconfig --del $svc" runCmd "rm -f $svc" done fi done #------------------------------------------------------------------------------ if [[ -d $DownloadsDir && $BlastDownloadsAndExes -eq 1 ]]; then runCmd "/bin/rm -r -f $DownloadsDir" \ "Blasting downloads dir [$DownloadsDir] due to '-B'." fi if [[ ! -d $DownloadsDir ]]; then [[ $PullFromWebAsNeeded -eq 0 ]] && bail "DownloadsDir [$DownloadsDir] is missing and '-local' specified. Aborting." runCmd "/bin/mkdir -p $DownloadsDir" cd $DownloadsDir || bail "Could not cd to [$DownloadsDir]." msg "Working in [$PWD]." runCmd "curl -s -O http://ftp.perforce.com/perforce/$P4Rel/bin.$ApiArch/p4api.tgz" ||\ bail "Could not get file 'p4api.tgz'" runCmd "curl -s -O http://ftp.perforce.com/perforce/$P4SwarmRel/bin.multiarch/swarm.tgz" ||\ bail "Could not get file 'swarm.tgz'" if [[ $SDPInstallMethod == Tarfile ]]; then runCmd "curl -k -s -O $SDPURL" ||\ bail "Could not get SDP tar file from [$SDPURL]." fi runCmd "curl -s -O http://ftp.perforce.com/perforce/tools/$SampleDepotTar" ||\ bail "Could not get file [$SampleDepotTar]. Aborting." if [[ ! -d PerforceSample ]]; then runCmd "tar -xzpf $SampleDepotTar" "Unpacking $SampleDepotTar in $PWD." fi runCmd "chown -R $RunUser:$RunGroup $DownloadsDir" \ "Setting ownership on downloads dir." ||\ bail "Failed to set ownership on downloads dir [$DownloadsDir]. Aborting." else msg "Using existing downloads dir [$DownloadsDir]." cd $DownloadsDir if [[ $SDPInstallMethod == Tarfile ]]; then if [[ -r "$SDPTar" ]]; then msg "Using existing SDP tarfile [$SDPTar]." else runCmd "curl -k -s -O $SDPURL" ||\ bail "Could not get SDP tar file from [$SDPURL]." fi fi fi #------------------------------------------------------------------------------ # Cleanup cd "$Depotdata" || bail "Could not cd to [$Depotdata]. Aborting." msg "Working in [$PWD]." for d in $Metadata1 $Metadata2 $Logs; do if [[ ! -d "$d" ]]; then runCmd "/bin/mkdir -p $d" "Initialized empty dir [$d]." ||\ bail "Failed to create dir [$d]." else msg "Verified: Dir [$d] exists." fi done if [[ $PreserveDirList != Unset ]]; then runCmd "/bin/mkdir -p $TmpDir" "Creating temp dir [$TmpDir]." ||\ bail "Failed to create temp dir [$TmpDir]." for d in $(echo $PreserveDirList|tr ',' ' '); do preserveDir=$Depotdata/p4/common/$d if [[ -d "$preserveDir" ]]; then parentDir=$(dirname $TmpDir/$d) if [[ ! -d "$parentDir" ]]; then runCmd "/bin/mkdir -p $parentDir" "Creating parent temp dir [$parentDir]." ||\ bail "Failed to create parent temp dir [$parentDir]." fi runCmd "/bin/mv $preserveDir $TmpDir/$d" \ "Moving preserved dir $preserveDir aside for safe keeping." else bail "Missing expected preserve dir [$preserveDir]. Check that paths specified with '-p' are relative to $Depotdata/p4/common." fi done fi for i in $SDPInstances; do runCmd "/bin/rm -rf $Depotdata/p4/$i $Metadata1/p4/$i $Metadata2/p4/$i $Logs/p4/$i" \ "Blasting any existing SDP structures." ||\ bail "Failed to blast existing SDP structures." runCmd "/bin/rm -f /p4/$i" "Blasting symlink." ||\ bail "Failed to remove SDP symlink." done runCmd "/bin/rm -rf $Depotdata/p4/common" \ "Blasting SDP common folder." ||\ bail "Failed to remove SDP common folder." runCmd "/bin/rm -f /p4/common" "Removing /p4/common symink." ||\ bail "Failed to remove /p4/common symlink." runCmd "/bin/rm -rf $SDPHome /p4/ssl" \ "Removing old SDP Home and /p4/ssl." ||\ bail "Failed to remove old $SDPHome and /p4/ssl." #------------------------------------------------------------------------------ # SDP Setup if [[ $SDPInstallMethod == Tarfile ]]; then runCmd "tar -xzpf $DownloadsDir/$SDPTar" "Unpacking $DownloadsDir/$SDPTar in $PWD." ||\ bail "Failed to untar SDP tarfile." else export PATH="$ExesDir:$PATH" export P4ENVIRO=/dev/null/.p4enviro export P4CONFIG=.p4config.local runCmd "/bin/mkdir -p $SDPHome" "Creating dir $SDPHome" ||\ bail "Failed to create dir $SDPHome. Aborting." cd "$SDPHome" || bail "Failed to cd to [$SDPHome]." WorkshopRemote=perforce_software-sdp_${SDPInstallBranch} runCmd "$ExesDir/p4 -s -u $WorkshopUser clone -p $WorkshopPort -r $WorkshopRemote" \ "Cloning SDP $SDPInstallBranch branch from The Workshop." ||\ bail "Failed to clone SDP from The Workshop." runCmd "$ExesDir/p4 -s sync -f .p4ignore" \ "Force-sync .p4ignore file." if [[ "$ShelvedChange" != Unset ]]; then runCmd "$ExesDir/p4 -s fetch -s $ShelvedChange" \ "Fetching shelved change @$ShelvedChange from The Workshop." ||\ bail "Failed to fetch shelved change @$ShelvedChange from The Workshop." LocalShelvedChange=$($ExesDir/p4 -ztag -F %change% changes -s shelved -m 1) [[ -n "$LocalShelvedChange" ]] || \ bail "Could not determine local shelved change fetched for shelved change @$ShelvedChange." runCmd "$ExesDir/p4 -s unshelve -s $LocalShelvedChange" \ "Unshelving local shelved change @$LocalShelvedChange." ||\ bail "Failed to unshelve local shelved change @$LocalShelvedChange." fi unset P4ENVIRO unset P4CONFIG fi cd $SDPConfigDir ||\ bail "Could not cd to [$SDPConfigDir]." msg "Generating custom p4_vars.template in [$PWD]." runCmd "/bin/mv -f p4_vars.template p4_vars.template.orig" runCmd "chmod 444 p4_vars.template.orig" sed -e "s:SDPMAIL=mailx:SDPMAIL='/bin/echo Simulated mail':g" \ -e "s:SDPMAIL=mail:SDPMAIL='/bin/echo Simulated mail':g" \ p4_vars.template.orig > p4_vars.template msg "Changes in p4_vars.template:" diff p4_vars.template.orig p4_vars.template cd $SDPSetupDir ||\ bail "Could not cd to [$SDPSetupDir]." msg "Generating custom mkdirs.sh in $PWD." runCmd "/bin/mv -f mkdirs.sh mkdirs.sh.orig" runCmd "chmod 444 mkdirs.sh.orig" sed -e "s:export MAIL=mailx:export MAIL='/bin/echo Simulated mail':g" \ -e "s:export MAIL=mail:export MAIL='/bin/echo Simulated mail':g" \ mkdirs.sh.orig > mkdirs.sh runCmd "/bin/mv -f mkdirs.cfg mkdirs.cfg.orig" sed -e "s:=DNS_name_of_master_server:=helix:g" \ -e "s:admin@example.com:P4AdminList@p4demo.com:g" \ -e "s:mail.example.com:smtp.p4demo.com:g" \ -e "s:^P4_PORT=.*:P4_PORT=SeeBelow:g" \ -e "s:^P4BROKER_PORT=.*:P4BROKER_PORT=SeeBelow:g" \ -e "s:# P4_PORT=1666:P4_PORT=1999:g" \ -e "s:# P4BROKER_PORT=1667:P4BROKER_PORT=1666:g" \ -e "s:=adminpass:=$Password:g" \ -e "s:=servicepass:=$Password:g" \ -e "s:OSGROUP=perforce:OSGROUP=$RunGroup:g" \ -e "s:REPLICA_ID=replica:REPLICA_ID=p4d_fr_bos:g" \ -e "s:SVCUSER=service:SVCUSER=svc_p4d_fr_bos:g" \ mkdirs.cfg.orig > mkdirs.cfg if [[ $UseSSL -eq 0 ]]; then msg "Not using SSL feature due to '-no_ssl'." sed "s/SSL_PREFIX=ssl:/SSL_PREFIX=/g" mkdirs.cfg > $TmpFile runCmd "mv -f $TmpFile mkdirs.cfg" fi chmod +x mkdirs.sh msg "SDP Localizations in mkdirs.sh:" diff mkdirs.sh.orig mkdirs.sh msg "\nSDP Localizations in mkdirs.cfg:" diff mkdirs.cfg.orig mkdirs.cfg runCmd "cp -p $ExesDir/p4* $SDPHome/Server/Unix/p4/common/bin/." \ "Copying perforce executables." msg "Initializing SDP instances and configuring /etc/init.d services." for i in $SDPInstances; do cd $SDPSetupDir || bail "Could not cd to [$SDPSetupDir]." log=$PWD/mkdirs.${i}.log msg "Initializing SDP instance [$i], writing log [$log]." $PWD/mkdirs.sh $i > $log 2>&1 cat $log if [[ $ThisOS == Linux ]]; then msg "\nConfiguring Linux init scripts.\n" cd /etc/init.d || bail "Could not cd to [/etc/init.d]." for svc in p4broker p4d p4p; do initScript=${svc}_${i}_init if [[ -x /p4/${i}/bin/$initScript ]]; then runCmd "ln -s /p4/${i}/bin/$initScript" runCmd "chkconfig --add $initScript" runCmd "chkconfig $initScript on" fi done fi runCmd "chown -R $RunUser:$RunGroup $Depotdata" \ "Adjusting ownership of $Depotdata to $RunUser:$RunGroup." || bail "Failed to adjust ownership of $Depotdata." msg "\nGenerating broker config for instance $i.\n" su -l $RunUser -c "$CBIN/gen_default_broker_cfg.sh ${i} > $CCFG/p4_${i}.broker.cfg" done if [[ $UseSSL -eq 1 ]]; then msg "Generating /p4/ssl/config.txt SSL config file for autogen cert." sed -e "s/REPL_DNSNAME/helix/g" /p4/ssl/config.txt > $TmpFile ||\ bail "Failed to substitute content in /p4/ssl/config.txt." runCmd "mv -f $TmpFile /p4/ssl/config.txt" msg "Contents of /p4/ssl/config.txt:\n$(cat /p4/ssl/config.txt)\n" fi if [[ $PreserveDirList != Unset ]]; then for d in $(echo $PreserveDirList|tr ',' ' '); do preserveDir=$Depotdata/p4/common/$d tempCopyDir=$TmpDir/$d runCmd "rsync -av --exclude=.p4root --exclude=.p4ignore --exclude=.p4config $tempCopyDir/ $preserveDir" \ "Restoring $preserveDir" ||\ bail "Failed to restore $preserveDir." done runCmd "/bin/rm -rf $TmpDir" "Cleanup: Removing temp dir [$TmpDir]." ||\ bail "Failed to remove temp dir [$TmpDir]." fi #------------------------------------------------------------------------------ # Install Aux Files if [[ $InstallAuxFiles -eq 1 ]]; then msg "\nInstalling P4Python for SDP." su -l $RunUser -c '/hxdepots/sdp/Server/Unix/setup/install_sdp_python.sh' msg "\nInstalling P4Perl for SDP." su -l $RunUser -c '/hxdepots/sdp/Server/Unix/setup/install_sdp_perl.sh' msg "\nPlaceholder for Installing Ruby and P4Ruby for SDP (Not yet implemented in the SDP).\n" fi msg "Preparing to run Sample Depot configuration script." if [[ ! -d "$ResetHome" ]]; then runCmd "/bin/mkdir -p $ResetHome" "Creating reset home dir [$ResetHome]." ||\ bail "Could not create reset home dir [$ResetHome]. Aborting." fi cd "$ResetHome" || bail "Could not cd to $Depotdata/ResetHome. Aborting." if [[ ! -x configure_sample_depot_for_sdp.sh ]]; then runCmd "curl -k -s -O $HelixInstallerBaseURL/src/configure_sample_depot_for_sdp.sh" \ "Getting script configure_sample_depot_for_sdp.sh." fi for f in NoTicketExpiration.group.p4s admin.user.p4s configure_sample_depot_for_sdp.sh protect.p4s r reset_sdp.sh; do if [[ ! -f $f ]]; then [[ $PullFromWebAsNeeded -eq 0 ]] && bail "Missing file [$f] and '-local' specified. Aborting." runCmd "curl -k -s -O $HelixInstallerBaseURL/src/$f" "Getting file $f." ||\ bail "Failed to download file [$f]. Aborting" else msg "Using existing file $PWD/$f." fi if [[ ! -x $f ]]; then if [[ $f == *".sh" || $f == r ]]; then runCmd "chmod +x $f" "chmod +x" || bail "Failed to do: chmod +x $f. Aborting." fi fi done runCmd "chown -R $RunUser:$RunGroup $ResetHome" "Fixing ownership of $ResetHome" ||: if [[ $LoadSampleDepot -eq 1 ]]; then msg "Configuring Sample Depot for SDP on Instance 1 only." su -l $RunUser -c "$ResetHome/configure_sample_depot_for_sdp.sh -i 1 -d $ResetHome" if [[ $? -eq 0 ]]; then msg "\nSample Depot configured successfully.\n" else bail "Failed to load the Sample Depot." fi else msg "\nSkipping configuration of Sample Depot due to '-no_sd'.\n" fi msg "\nSUCCESS: SDP Configuration complete." exit 0
# | Change | User | Description | Committed | |
---|---|---|---|---|---|
#91 | 29450 | tom_tyler |
Released SDP 2022.2.29448 (2023/02/27). Copy Up using 'p4 copy -r -b perforce_software-helix-installer-dev'. |
||
#90 | 29405 | tom_tyler |
Released SDP 2022.2.29403 (2023/02/06). Copy Up using 'p4 copy -r -b perforce_software-helix-installer-dev'. |
||
#89 | 28931 | tom_tyler |
Released SDP 2022.1.28929 (2022/07/05). Copy Up using 'p4 copy -r -b perforce_software-helix-installer-dev'. |
||
#88 | 28863 | tom_tyler |
Released SDP 2022.1.28834 (2022/05/27). Copy Up using 'p4 copy -r -b perforce_software-helix-installer-dev'. |
||
#87 | 28665 | tom_tyler |
Released SDP 2022.1.28663 (2022/03/08). Copy Up using 'p4 copy -r -b perforce_software-helix-installer-dev'. |
||
#86 | 28415 | tom_tyler |
Released SDP 2021.4.28409 (2021/11/24). Copy Up using 'p4 copy -r -b perforce_software-helix-installer-dev'. |
||
#85 | 28129 | tom_tyler |
Released SDP 2021.3.28126 (2021/10/24). Copy Up using 'p4 copy -r -b perforce_software-helix-installer-dev'. |
||
#84 | 27427 | tom_tyler |
Released SDP 2021.2.27425 (2021/02/09). Copy Up using 'p4 copy -r -b perforce_software-helix-installer-dev'. |
||
#83 | 27229 | tom_tyler | Released Helix Installer 2021.1.27227 (2021/01/20). | ||
#82 | 27165 | tom_tyler | Released HelixInstaller 2021.1.27163 (2021/01/11). | ||
#81 | 27139 | tom_tyler | Released HelixInstaller 2021.1.27137 (2021/01/03). | ||
#80 | 27036 | tom_tyler | Released HelixInstaller 2020.2.27031 (2020/12/11). | ||
#79 | 26975 | tom_tyler | Released HelixInstaller 2020.2.26973 (2020/12/01). | ||
#78 | 26831 | tom_tyler | Released HelixInstaller/MultiArch/2020.1/26829 (2020/10/07). | ||
#77 | 26793 | tom_tyler | Released HelixInstaller/MultiArch/2020.1/26784 (2020/09/25). | ||
#76 | 26609 | tom_tyler | Release HelixInstaller 2020.1.26607 (2020/07/10). | ||
#75 | 26578 | tom_tyler | Released Helix Installer 2020.1.26576 (2020/06/17). | ||
#74 | 26268 | tom_tyler | Released HelixInstaller/MultiArch/2019.4/26181 (2020/01/22). | ||
#73 | 26031 | tom_tyler | Released Helix Installer 2019.4.26026 (2019/08/22). | ||
#72 | 26013 | tom_tyler | Released HelixInstaller 2019.4.26010 (2019/08/21). | ||
#71 | 26008 | tom_tyler | Released HelixInstaller 2019.4.26006 (2019/08/20). | ||
#70 | 25999 | tom_tyler | Released HelixInstaller 2019.4.25995 (2019/08/20). | ||
#69 | 25900 | tom_tyler | Released HelixInstaller 2019.3.25890 (2019/07/24). | ||
#68 | 25871 | tom_tyler | Released Helix Installer 2019.3.25869 (2019/07/23) | ||
#67 | 25822 | tom_tyler | Released HelixInstaller/MultiArch/2019.3/25820 (2019/07/11). | ||
#66 | 25725 | tom_tyler | Released HelixInstaller/MultiArch/2019.2/25723 (2019/06/19). | ||
#65 | 25600 | tom_tyler | Released HelixInstaller 2019.2.25598. | ||
#64 | 25499 | tom_tyler | Released HelixInstaller/2019.2/25497 (2019/04/12). | ||
#63 | 25495 | tom_tyler | Released. | ||
#62 | 25394 | tom_tyler | Released HelixInstaller/MultiArch/2019.1/25392 (2019/03/21). | ||
#61 | 25384 | tom_tyler | Released HelixInstaller/MultiArch/2019.1/25382 (2019/03/21). | ||
#60 | 25328 | tom_tyler | Released Rev. HelixInstaller/MultiArch/2019.1/25324 (2019/03/08). | ||
#59 | 25315 | tom_tyler | Released Rev. HelixInstaller/MultiArch/2019.1/25313 (2019/03/07). | ||
#58 | 25287 | tom_tyler | Released Rev. HelixInstaller/MultiArch/2019.1/25285 (2019/03/06). | ||
#57 | 25284 | tom_tyler | Released Rev. HelixInstaller/MultiArch/2019.1/25282 (2019/03/06). | ||
#56 | 25260 | tom_tyler | Released Rev. HelixInstaller/MultiArch/2019.1/25250 (2019/03/02). | ||
#55 | 25166 | tom_tyler | Released Helix Installer 2019.1.25164 (2019/02/22). | ||
#54 | 24914 | tom_tyler | Released HelixInstaller 2018.2.24912. | ||
#53 | 24865 | tom_tyler | Released HelixInstaller v2018.2.24862. | ||
#52 | 23828 | tom_tyler | Released Helix Installer 2018.1.23826. | ||
#51 | 23599 | tom_tyler | Released Helix Installer patch. | ||
#50 | 23515 | tom_tyler | Released. | ||
#49 | 23365 | tom_tyler | Released 2017.4.23363. | ||
#48 | 23361 | tom_tyler | Released 2017.4.23359. | ||
#47 | 23335 | tom_tyler | Released Helix Installer 2017.4.23333. | ||
#46 | 23283 | tom_tyler | Released Helix Installer 2017.4.23281 | ||
#45 | 23245 | tom_tyler |
Released reset_sdp.sh v2.9.5 adding support for a new workflow supporting testing a shelved changelist from the SPD dev branch. Use like this example: reset_sdp.sh -fast -b dev,@23123 2>&1 | tee reset.log where change @23123 would be a shelved changelist containing files shelved on the SDP dev branch. After cloning the SDP from the dev branch, it fetches the shelved changes, and then unshelves it in the local repo. |
||
#44 | 23060 | tom_tyler |
reset_sdp.sh v2.8.32: * Corrected 'sed' replacements of email addresses in mkdirs.cfg. * Removed obsolete logic related to case sensitivity setting. |
||
#43 | 23056 | tom_tyler |
No functional change; cosmetic and convention-compliance/ maintainability enhancements only. |
||
#42 | 23054 | tom_tyler | Updated to latest SDP version. | ||
#41 | 23008 | tom_tyler | Updated SDP Version. | ||
#40 | 22299 | tom_tyler | Tweaked to use preferred ports: 1666 for p4broker, 1999 for p4d. | ||
#39 | 22292 | tom_tyler |
Tweaked to use P4CONFIG=.p4config.local for 'p4 clone' operation only, and then it is unset to defer to the SDP standard. This fixes an issue where the local repo cloned from The Workshop with 'p4 clone' (using DVCS features) was getting confused with the 'p4d' instance we were trying to initialize. Also updated to download 2017.1 p4/p4d/p4broker executables plus Swarm 2017.1 package. |
||
#38 | 22209 | tom_tyler | Updated SDP version. | ||
#37 | 22203 | tom_tyler |
Adapted to SDP structural changes including refactoring to add mkdirs.cfg. |
||
#36 | 21844 | tom_tyler |
Adjusted base URL for The Workshop to use 'https:' only; the 'http:' base URL no longer works due to a redirect on the Workshop's Swarm server. |
||
#35 | 21839 | tom_tyler |
reset_sdp.sh v2.8.23: * Added exlusions to 'preserve dirs' feature to avoid copying DVCS repo files. * Reduced excessive noise losing the '-v' flag for tarfile extraction. * Enhanced to use 'curl' rather than 'wget', as it is functionally equivalent for our purposes, and is more ubiquituous. configure_sample_depot_for_sdp.sh v1.4.7: * Enhanced environment isolation. |
||
#34 | 21812 | tom_tyler |
Updated to latest SDP relelase. Added insulation from P4ENVIRO hijacking. |
||
#33 | 21539 | tom_tyler | Cosmetic fix. | ||
#32 | 21536 | tom_tyler |
Updated SDP Version. Disabled shallow cloning to work around issue shallow cloning SDP from The Workshop (due to a rename in prior history). |
||
#31 | 21505 | tom_tyler | Updated SDP version. | ||
#30 | 21503 | tom_tyler | Fixed cosmetic issue. | ||
#29 | 21501 | tom_tyler | Updated to latest SDP release. | ||
#28 | 21357 | tom_tyler | Fixed transposed digit. | ||
#27 | 21354 | tom_tyler | Fixed typo in version id. | ||
#26 | 21349 | tom_tyler |
Updated SDP version. Updated default release for P4/P4D to r16.2. Updated default Swarm to 2016.3. Adapated to new volume layout structure. Added support for generating SSL autogen cert file. |
||
#25 | 21246 | tom_tyler | Updated SDP version. | ||
#24 | 21238 | tom_tyler |
Changed all 'ftp://' URLs to 'http://' protocol to have a better chance at dodging network and port filtering. |
||
#23 | 21037 | tom_tyler | Updated to latest SDP. | ||
#22 | 20999 | tom_tyler | Updated SDP version. | ||
#21 | 20978 | tom_tyler | Updated default SDP version. | ||
#20 | 20864 | tom_tyler | Updated default SDP tar file. | ||
#19 | 20863 | tom_tyler | Optimized for shallow cloning of SDP from Workshop. | ||
#18 | 20656 | tom_tyler | Removed obsolete HostIP logic. | ||
#17 | 20654 | tom_tyler |
A few minor tweaks to make it more in-line with the Battle School Lab Engine, a primary customer of the Helix Installer. |
||
#16 | 20568 | tom_tyler | Updated SDP to 2016.1.20559. | ||
#15 | 20522 | tom_tyler | Updated SDP to 2016.1.20491. | ||
#14 | 20483 | tom_tyler | Updated SDP to 2016.1.20460. | ||
#13 | 20411 | tom_tyler | Optimzied sed. | ||
#12 | 20400 | tom_tyler | Updated SDP to 2016.1.20395. | ||
#11 | 20392 | tom_tyler | Updated to SDP 2016.1.20387. | ||
#10 | 20375 | tom_tyler |
Tweaked sample DNS name of master server to use 'helix' name, emphasizing that it should be a host alias, not hard-coded to a specific machine (e.g. helix-01 or helix-02). Also uses the host short name, which should work if networking best practices are followed. |
||
#9 | 20359 | tom_tyler |
Added comment encouring people not to be lazy and use the built-in password for production environments. |
||
#8 | 20358 | tom_tyler |
reset_sdp.sh v2.7.6: * Updated to latest SDP, including change in password file location. * Updated to acquire Swarm 2016.1. |
||
#7 | 20052 | tom_tyler | Updated latest packaged SDP default to 2016.1.20028. | ||
#6 | 19900 | tom_tyler | Updated default SDP version. | ||
#5 | 19843 | tom_tyler | Updated default to latest SDP. | ||
#4 | 19416 | tom_tyler | Updated SDP version. | ||
#3 | 19263 | tom_tyler |
Updated to test with 2016.1 executables. Enhanced code and internal docs. Tweaked URLS for pulling files from The Workshop. |
||
#2 | 19231 | tom_tyler |
Adjusted Swarm URL to reflect the Helix Installer move from //guest/tom_tyler to //guest/perforce_software. |
||
#1 | 19230 | tom_tyler | Populate -o //guest/tom_tyler/helix-installer/... //guest/perforce_software/helix-installer/.... | ||
//guest/tom_tyler/helix-installer/main/src/reset_sdp.sh | |||||
#21 | 18963 | tom_tyler | Updated to latest SDP 2016.1.18958. | ||
#20 | 16837 | tom_tyler | Updated to latest SDP tarfile. | ||
#19 | 16697 | tom_tyler |
Tweaked to account for cases where 'hostname -i' call returns more than one IP address. |
||
#18 | 16671 | tom_tyler |
reset_sdp.sh v2.6.9: * Minor optimization to error message when gcc and/or gcc-c++ packages are missing. * The '-fast' flag now changes the error relating to gcc/g++ not being installed to a warning. * Added confirmation message if gcc/g++ are found. |
||
#17 | 16670 | tom_tyler |
reset_sdp.sh v2.6.8: * Now clones SDP main branch from The Workshop by default, rather than using a tar file. * Added '-b' to override default branch (main), e.g. '-b dev'. * Added '-t <tarfile>' (or '-t default') to use the old tarfile install method of using a hard-coded tarball, good for when stability is preferred over using the very latest. |
||
#16 | 16660 | tom_tyler |
Added '-p' flag to enable preserving existing directories under /p4/common. |
||
#15 | 16642 | tom_tyler | Updated default SDP version. | ||
#14 | 16624 | tom_tyler |
reset_sdp.sh v2.6.5. For Linux hosts, optimized to use 'hostname -i' rather than 'hostname -I'. Added inline comments on IP selection on Linux and OSX. |
||
#13 | 16623 | tom_tyler |
Changed order of commands to fix issue with permissions when generating SDP broker config file. |
||
#12 | 16607 | tom_tyler | Audit enhancement. | ||
#11 | 16606 | tom_tyler |
Improved handling of simulated mail from SDP scripts, so that live_checkpoint succeeds on all platforms; it had failed previosuly on Mac/Darwin due to failure sending email. Improved backup handling. |
||
#10 | 16602 | tom_tyler |
Added '-local' option; avoids pulling from Workshop/FTP server. Updated Swarm to 2015.3. |
||
#9 | 16567 | tom_tyler | Updated SDP Version. | ||
#8 | 16396 | tom_tyler | Rolled back Swarm version. | ||
#7 | 16395 | tom_tyler | Updated to 2015.2 GA for P4D and 2015.3 GA for Swarm. | ||
#6 | 16393 | tom_tyler |
Fixed issue with 'sed' call. Updated to work with new HOSTIP setting in SDP. |
||
#5 | 16377 | tom_tyler |
Updated to pick up latest SDP, and made corresponding adjustments to processing of subsitutions in mkdirs.sh. |
||
#4 | 16359 | tom_tyler | Minor code cleanlup. | ||
#3 | 16358 | tom_tyler |
Adjusted base path for Helix Installer. Updated coypright to reference LICENSE file. |
||
#2 | 16349 | tom_tyler | Updated to latest SDP version. | ||
#1 | 15829 | tom_tyler |
Moved Helix Installer to new Workshop Standard for personal projects. |
||
//guest/tom_tyler/sw/main/hi/src/reset_sdp.sh | |||||
#22 | 15629 | tom_tyler |
reset_sdp.sh v2.5.0: * Updated SDP to 2015.1.15607. * Added '-C' (clean) flag to blast /depotdata/p4/common. |
||
#21 | 15611 | tom_tyler |
reset_sdp.sh v2.4.9: * Updated default Swarm to 2015.2. * Fixed mostly harmless bug attempting to pull a non-existing file from the web. |
||
#20 | 15060 | tom_tyler | Rollback of Copy Up done with a new utility that apparently needs some work. | ||
#19 | 15051 | tom_tyler | Copy Up using 'p4 copy -r -b tom_tyler-hi-dev' | ||
#18 | 15007 | tom_tyler | Fixed expression. | ||
#17 | 14987 | tom_tyler |
Reduced excessive noise from from rsync and tar commands. Added '--delete' to rsync commands handling the Sample Depot to force a clean reset. Added clear completion messages. |
||
#16 | 14973 | tom_tyler | Added -no_ssl flag. | ||
#15 | 14956 | tom_tyler | Fixed 'ps' check. | ||
#14 | 14954 | tom_tyler | Fixed typo in case sensitivity mod. | ||
#13 | 14953 | tom_tyler |
Updated various settings to match changes in SDP. Removed generation of a duplicate broker config file. |
||
#12 | 14952 | tom_tyler |
Adjusted case sensitivitiy to be case-sensitive on Linux, the opposite of the SDP default. |
||
#11 | 14949 | tom_tyler |
Enhanced to ensure that 'reset_sdp.sh' is the only script required. It now downloads all other scripts and data files as needed. |
||
#10 | 14910 | tom_tyler |
Added initialtion of empty /depotdata /metadata and /logs dirs. |
||
#9 | 14903 | tom_tyler | Fixed issue running under Vagrant. | ||
#8 | 14902 | tom_tyler |
Changed default list of SDP instances to initialize from "1 12 abc" (illustrating ability to use named rather than number instances) to just "1", which is mostly all that's wanted for testing and pilot installations. |
||
#7 | 14901 | tom_tyler | Fixed a typo in 'chmod' call. | ||
#6 | 14188 | tom_tyler | Updated SDP version. | ||
#5 | 14120 | tom_tyler |
Moved sample depot checkpoint load to configurator script. Added '-fast' flag to speed up testing. Various minor tweaks. |
||
#4 | 14106 | tom_tyler |
Implemented Sample Depot SDP configurator script. Tightened logic around process kill statement, and made it work for Linux/Mac. |
||
#3 | 14063 | tom_tyler |
Added generation of initial live checkpoint for each instance. Adjusted permissions on downloads folder. Removed bad code fragements. Cosmetic enhancement to the password. |
||
#2 | 14033 | tom_tyler |
Added script to transform stock Sample Depot data set to be SDP compliant (mostly a stub at this point). Various improvements to reset_sdp.sh and the wrapper r.sh. |
||
#1 | 13940 | tom_tyler | Added my personal reset_sdp test script. DO NOT DEPLOY on a live server. |