#!/bin/bash #============================================================================== # Copyright and license info is available in the LICENSE file included with # the Server Deployment Package (SDP), and also available online: # https://swarm.workshop.perforce.com/projects/perforce-software-sdp/view/main/LICENSE #------------------------------------------------------------------------------ # # Change the first three variables below to match the volume names on the machine # you are configuring the SDP on. # Set the remaining variables appropriately. The meaning of each should be obvious. # Change the first three variables below to match the volume names on the machine # you are configuring the SDP on. # Set the remaining variables appropriately. The meaning of each should be obvious. # Before running this script, create a configuration file. You can use a # single configuration file named mkdirs.cfg in the same directory as this # mkdirs.sh script. Alternately, you can create a file named mkdirs.N.cfg, # where 'N' is the name of the instance you intend to configure. # # Run this script as root, and pass in the instance number you are configuring. # # If you do not have root access, then some commands will be skipped, and you # will need to have the defined $P4DIR directory already existing (created by # the root user and the ownership changed to the OS user that you are planning # to run Perforce under). The /hxmetadata*, /hxdepots and /hxlogs volumes will # also need to be owned by the OS user as well in order for the script to work. # You can then run this script as the OS user for Perforce and everything # should work fine. # # This script creates an init script in the $P4DIR/$SDP_INSTANCE/bin directory. # You can use it from there if you are configuring a cluster, or you can link # it in /etc/init.d if you are setting up a stand alone machine. Sample # systemd service files are included in the systemd folder. # # After running this script, set up the crontab based on templates # generated in $P4DIR/common/etc/cron.d. For convenience, a sample generated # is to $P4DIR/p4.crontab. # # Next, put the license file in place in the P4ROOT dir, and launch the server with the init # script. # # Then run $P4DIR/common/bin/p4master_run <instance> $P4DIR/common/bin/live_checkpoint.sh # and then run both the daily_checkpoint.sh and recreate_db_checkpoint.sh to # make sure everything is working before setting up the crontab. # # Also run $P4DIR/common/bin/p4master_run <instance> $P4DIR/common/bin/p4review.py <instance> # to make sure the review script is working properly. If you intend to use # Swarm, you can skip configuration of the review daemon, and instead configure # Swarm to handle review-style email notifications. # # UPGRADING SDP # Specify the -test parameter to the script. # In this case the script will NOT make the various directories under $P4DIR, # but will instead create /tmp/p4 directory structure with the various files # processed via templates etc. You can then manually compare this directory # structure with your existing $P4DIR structure and manually copy the various # files into it. For a more sophisticated approch using, see the # 'hms_ts_setup.sh' script in the hms subdirectory. set -u function msg () { echo -e "$*"; } function errmsg () { msg "\nError: $*" >&2; } function warnmsg () { msg "\nWarning: $*"; } function bail() { errmsg "${1:-Unknown Error}\n" >&2; exit ${2:-1}; } function usage () { msg "Usage:\n\t${0##*/} <instance> [-test]\n" exit 1 } declare -i DoChownCommands=1 if [ $# -lt 1 ] || [ $# -gt 2 ]; then usage fi # Verify instance value. SDP_INSTANCE=$1 if [[ "$SDP_INSTANCE" == "-test" ]]; then bail "An instance argument is required." fi # Note that if the following is set to 1 then a trial run is done, into /tmp/p4 TEST=0 if [[ $# -gt 1 && "$2" == "-test" ]]; then TEST=1 fi # Check for config file - same dir as this script if [[ -r "${0%/*}/mkdirs.${SDP_INSTANCE}.cfg" ]]; then mkdirs_config="${0%/*}/mkdirs.${SDP_INSTANCE}.cfg" elif [[ -r "${0%/*}/mkdirs.cfg" ]]; then mkdirs_config="${0%/*}/mkdirs.cfg" else bail "Missing mkdirs config file $mkdirs_config." fi source $mkdirs_config || bail "Failed to source $mkdirs_config." if [[ -r $SDP/Version ]]; then SDP_VERSION="$(cat $SDP/Version)" else SDP_VERSION="Rev. SDP/Unix/UNKNOWN" fi P4DIR=/p4 P4SERVER=p4_$SDP_INSTANCE export AWK=awk export ID=id export MAIL=mail OS=`uname` if [[ "${OS}" = "SunOS" ]] ; then export AWK=/usr/xpg4/bin/awk export ID=/usr/xpg4/bin/id export MAIL=mailx elif [[ "${OS}" = "AIX" ]] ; then export AWK=awk export ID=id export MAIL=mail fi if [[ `$ID -u` -eq 0 ]]; then msg "Verified: Running as root." elif [[ `whoami` == $OSUSER ]]; then warnmsg "Not running as root; chown commands will be skipped and basic directories must exist.\n" DoChownCommands=0 else bail "$0 must be run as as root or $OSUSER.\n" fi if [[ $TEST -eq 1 ]]; then DD=tmp MD=tmp LG=tmp CN=tmp P4DIR=/tmp/p4 msg "\n********* -test specified - will install to $P4DIR *********\n" fi SDP_COMMON=$SDP/Server/Unix/p4/common declare -i PreflightOK=1 [[ -f $SDP_COMMON/bin/p4 ]] || { errmsg "No p4 in $SDP_COMMON/bin"; PreflightOK=0; } [[ -f $SDP_COMMON/bin/p4d ]] || { errmsg "No p4d in $SDP_COMMON/bin"; PreflightOK=0; } [[ -f $SDP_COMMON/bin/p4p ]] || warnmsg "No p4p in $SDP_COMMON/bin" [[ -f $SDP_COMMON/bin/p4broker ]] || warnmsg "No p4broker in $SDP_COMMON/bin" if [[ $TEST -eq 1 && ! -d "$P4DIR" ]]; then mkdir "$P4DIR" || bail "Failed to create $P4DIR." fi # If we aren't running as root, extend the preflight checks to verify basic dirs # exist. if [[ `$ID -u` -ne 0 && $TEST -eq 0 ]]; then for d in "$P4DIR" "/$DD" "/$DB1" "/$DB2" "/$LG"; do if [[ -d "$d" ]]; then dirOwner=$(ls -ld "$d" | $AWK '{print $3}') dirGroup=$(ls -ld "$d" | $AWK '{print $4}') if [[ "$dirOwner" != "$OSUSER" ]]; then errmsg "Dir [$d] exists but with wrong owner, $dirOwner instead of $OSUSER." PreflightOK=0 fi if [[ "$dirGroup" != "$OSGROUP" ]]; then warnmsg "Dir [$d] exists but with wrong group, $dirGroup instead of $OSGROUP." fi else errmsg "Dir must exist if not running as root: $d" PreflightOK=0 fi done fi if [[ $PreflightOK -eq 1 ]]; then msg "Verified: Preflight checks passed." else bail "Aborting due to failed preflight checks." fi if [[ $TEST -eq 0 ]]; then chmod 755 $SDP_COMMON/bin/p4 chmod 700 $SDP_COMMON/bin/p4d fi [[ -f $SDP_COMMON/bin/p4broker ]] && chmod 700 $SDP_COMMON/bin/p4broker [[ -f $SDP_COMMON/bin/p4web ]] && chmod 700 $SDP_COMMON/bin/p4web [[ -f $SDP_COMMON/bin/p4p ]] && chmod 700 $SDP_COMMON/bin/p4p # Make sure you update the p4 and p4d to the latest versions in the # sdp/Server/Unix/p4/common/bin directory when making new instances at a later date. P4RELNUM=`$SDP_COMMON/bin/p4 -V | grep -i Rev. | $AWK -F / '{print $3}'` P4BLDNUM=`$SDP_COMMON/bin/p4 -V | grep -i Rev. | $AWK -F / '{print $4}' | $AWK '{print $1}'` P4DRELNUM=`$SDP_COMMON/bin/p4d -V | grep -i Rev. | $AWK -F / '{print $3}'` P4DBLDNUM=`$SDP_COMMON/bin/p4d -V | grep -i Rev. | $AWK -F / '{print $4}' | $AWK '{print $1}'` [[ -d $P4DIR ]] || mkdir $P4DIR [[ -d /$DD/p4 ]] || mkdir /$DD/p4 [[ -d /$DB1/p4 ]] || mkdir /$DB1/p4 [[ -d /$DB2/p4 ]] || mkdir /$DB2/p4 [[ -d /$LG/p4 ]] || mkdir /$LG/p4 mkdir -p /$DD/p4/$SDP_INSTANCE/bin mkdir -p /$LG/p4/$SDP_INSTANCE/tmp mkdir -p /$DD/p4/$SDP_INSTANCE/depots mkdir -p /$DD/p4/$SDP_INSTANCE/checkpoints case "$SERVER_TYPE" in (p4d_standby) mkdir -p /$LG/p4/$SDP_INSTANCE/journals.rep if [[ $DoChownCommands -eq 1 ]]; then chown $OSUSER:$OSGROUP /$LG/p4/$SDP_INSTANCE/journals.rep fi ;; (p4d_replica|p4d_edge) mkdir -p /$DD/p4/$SDP_INSTANCE/checkpoints.${REPLICA_ID#p4d_} if [[ $DoChownCommands -eq 1 ]]; then chown $OSUSER:$OSGROUP /$DD/p4/$SDP_INSTANCE/checkpoints.${REPLICA_ID#p4d_} fi ;; esac [[ -d $P4DIR/ssl ]] || mkdir -p $P4DIR/ssl [[ -f $SDP/Server/Unix/p4/ssl/config.txt && ! -f $P4DIR/ssl/config.txt ]] &&\ cp $SDP/Server/Unix/p4/ssl/config.txt $P4DIR/ssl/ [[ -d /$CN/p4/common/bin ]] || mkdir -p /$CN/p4/common/bin [[ -d /$CN/p4/common/config ]] || mkdir -p /$CN/p4/common/config mkdir -p /$DB1/p4/$SDP_INSTANCE/db1/save mkdir -p /$DB2/p4/$SDP_INSTANCE/db2/save mkdir -p /$LG/p4/$SDP_INSTANCE/logs if [[ $TEST -eq 0 ]]; then cd /$DD/p4/$SDP_INSTANCE else cd $P4DIR/$SDP_INSTANCE fi if [[ $TEST -eq 0 ]]; then [[ -L root ]] || ln -s /$DB1/p4/$SDP_INSTANCE/db1 root [[ -L offline_db ]] || ln -s /$DB2/p4/$SDP_INSTANCE/db2 offline_db if [[ ! -d logs ]]; then [[ -L logs ]] || ln -s /$LG/p4/$SDP_INSTANCE/logs fi case "$SERVER_TYPE" in (p4d_standby) if [[ ! -d journals.rep ]]; then [[ -L journals.rep ]] || ln -s /$LG/p4/$SDP_INSTANCE/journals.rep fi ;; esac if [[ ! -d tmp ]]; then [[ -L tmp ]] || ln -s /$LG/p4/$SDP_INSTANCE/tmp fi cd $P4DIR [[ -L $SDP_INSTANCE ]] || ln -s /$DD/p4/$SDP_INSTANCE [[ -L sdp ]] || ln -s $SDP $P4DIR/sdp [[ -L common ]] || ln -s /$CN/p4/common fi case "$SERVER_TYPE" in (p4d_master|p4d_edge) SERVERID=$MASTER_ID echo $SERVERID > $P4DIR/$SDP_INSTANCE/root/server.id ;; (p4d_replica|p4d_standby) SERVERID=$REPLICA_ID echo $SERVERID > $P4DIR/$SDP_INSTANCE/root/server.id ;; (*) SERVERID=$SERVER_TYPE ;; esac [[ -f /$CN/p4/common/bin/p4_$P4RELNUM.$P4BLDNUM ]] || cp $SDP_COMMON/bin/p4 /$CN/p4/common/bin/p4_$P4RELNUM.$P4BLDNUM [[ -f /$CN/p4/common/bin/p4d_$P4DRELNUM.$P4DBLDNUM ]] || cp $SDP_COMMON/bin/p4d /$CN/p4/common/bin/p4d_$P4DRELNUM.$P4DBLDNUM if [[ ! -f /$CN/p4/common/bin/p4_vars ]]; then cp -R $SDP_COMMON/bin/* /$CN/p4/common/bin # Copy certain subdirs of /p4/common if don't already exist. for dir in etc hms lib; do if [[ ! -d /$CN/p4/common/$dir ]]; then cp -pr $SDP_COMMON/$dir /$CN/p4/common/. fi done cd /$CN/p4/common/bin ln -s p4_$P4RELNUM.$P4BLDNUM p4_${P4RELNUM}_bin ln -s p4d_$P4DRELNUM.$P4DBLDNUM p4d_${P4DRELNUM}_bin ln -s p4_${P4RELNUM}_bin p4_bin sed -e "s:REPL_SDPVERSION:${SDP_VERSION}:g" \ -e "s/REPL_OSUSER/${OSUSER}/g" \ $SDP_COMMON/config/p4_vars.template > p4_vars fi cd /$CN/p4/common/bin ln -s p4d_${P4DRELNUM}_bin p4d_${SDP_INSTANCE}_bin if [[ ! -e /$CN/p4/common/config/.p4passwd.${P4SERVER}.admin ]]; then echo $P4ADMINPASS > /$CN/p4/common/config/.p4passwd.${P4SERVER}.admin else warnmsg "Skipping update of existing admin password file /$CN/p4/common/config/.p4passwd.${P4SERVER}.admin" fi if [[ ! -e /$CN/p4/common/config/.p4passwd.${P4SERVER}.service ]]; then echo $P4SERVICEPASS > /$CN/p4/common/config/.p4passwd.${P4SERVER}.service else warnmsg "Skipping update of existing service password file /$CN/p4/common/config/.p4passwd.${P4SERVER}.service" fi # Create broker links if broker exists if [[ -f $SDP_COMMON/bin/p4broker ]]; then P4BRELNUM=`$SDP_COMMON/bin/p4broker -V | grep -i Rev. | $AWK -F / '{print $3}'` P4BBLDNUM=`$SDP_COMMON/bin/p4broker -V | grep -i Rev. | $AWK -F / '{print $4}' | $AWK '{print $1}'` [[ -f /$CN/p4/common/bin/p4broker_$P4BRELNUM.$P4BBLDNUM ]] || cp $SDP_COMMON/bin/p4broker /$CN/p4/common/bin/p4broker_$P4BRELNUM.$P4BBLDNUM [[ -L p4broker_${P4BRELNUM}_bin ]] && unlink p4broker_${P4BRELNUM}_bin ln -s p4broker_$P4BRELNUM.$P4BBLDNUM p4broker_${P4BRELNUM}_bin [[ -L p4broker_${SDP_INSTANCE}_bin ]] && unlink p4broker_${SDP_INSTANCE}_bin ln -s p4broker_${P4BRELNUM}_bin p4broker_${SDP_INSTANCE}_bin cd $P4DIR/$SDP_INSTANCE/bin [[ -L p4broker_${SDP_INSTANCE} ]] || ln -s $P4DIR/common/bin/p4broker_${SDP_INSTANCE}_bin p4broker_${SDP_INSTANCE} sed "s/REPL_SDP_INSTANCE/${SDP_INSTANCE}/g" $SDP_COMMON/etc/init.d/p4broker_instance_init.template > p4broker_${SDP_INSTANCE}_init chmod +x p4broker_${SDP_INSTANCE}_init fi # Create p4p links if p4p exists cd /$CN/p4/common/bin if [[ -x $SDP_COMMON/bin/p4p ]]; then P4PRELNUM=`$SDP_COMMON/bin/p4p -V | grep -i Rev. | $AWK -F / '{print $3}'` P4PBLDNUM=`$SDP_COMMON/bin/p4p -V | grep -i Rev. | $AWK -F / '{print $4}' | $AWK '{print $1}'` [[ -f /$CN/p4/common/bin/p4p_$P4PRELNUM.$P4PBLDNUM ]] || cp $SDP_COMMON/bin/p4p /$CN/p4/common/bin/p4p_$P4PRELNUM.$P4PBLDNUM [[ -L p4p_${P4PRELNUM}_bin ]] && unlink p4p_${P4PRELNUM}_bin ln -s p4p_$P4PRELNUM.$P4PBLDNUM p4p_${P4PRELNUM}_bin [[ -L p4p_${SDP_INSTANCE}_bin ]] && unlink p4p_${SDP_INSTANCE}_bin ln -s p4p_${P4PRELNUM}_bin p4p_${SDP_INSTANCE}_bin cd $P4DIR/$SDP_INSTANCE/bin [[ -L p4p_${SDP_INSTANCE} ]] || ln -s $P4DIR/common/bin/p4p_${SDP_INSTANCE}_bin p4p_${SDP_INSTANCE} sed -e "s/REPL_SDP_INSTANCE/${SDP_INSTANCE}/g" \ -e "s/REPL_DNSNAME/${P4DNSNAME}/g" \ $SDP_COMMON/etc/init.d/p4p_instance_init.template > p4p_${SDP_INSTANCE}_init chmod +x p4p_${SDP_INSTANCE}_init mkdir -p /$DD/p4/$SDP_INSTANCE/cache fi cd $P4DIR/$SDP_INSTANCE/bin ln -s $P4DIR/common/bin/p4_bin p4_$SDP_INSTANCE sed "s/REPL_SDP_INSTANCE/${SDP_INSTANCE}/g" \ $SDP_COMMON/etc/init.d/p4d_instance_init.template > p4d_${SDP_INSTANCE}_init chmod +x p4d_${SDP_INSTANCE}_init # Moved the less commonly used, but always created init scripts to an init directory. mkdir init cd init sed "s/REPL_SDP_INSTANCE/${SDP_INSTANCE}/g" \ $SDP_COMMON/etc/init.d/p4dtg_instance_init.template > p4dtg_${SDP_INSTANCE}_init chmod +x p4dtg_${SDP_INSTANCE}_init cd .. if [[ $CASE_SENSITIVE -eq 1 ]]; then ln -s $P4DIR/common/bin/p4d_${SDP_INSTANCE}_bin p4d_$SDP_INSTANCE else echo '#!/bin/bash' > p4d_$SDP_INSTANCE echo P4D=/p4/common/bin/p4d_${SDP_INSTANCE}_bin >> p4d_$SDP_INSTANCE echo 'exec $P4D -C1 "$@"' >> p4d_$SDP_INSTANCE chmod +x p4d_$SDP_INSTANCE fi cd $P4DIR/common/config sed -e "s/REPL_MAILTO/${MAILTO}/g" \ -e "s/REPL_MAILFROM/${MAILFROM}/g" \ -e "s/REPL_ADMINUSER/${ADMINUSER}/g" \ -e "s/REPL_MASTER_ID/${MASTER_ID}/g" \ -e "s/REPL_SSLPREFIX/${SSL_PREFIX}/g" \ -e "s/REPL_P4PORT/${P4_PORT}/g" \ -e "s/REPL_P4BROKERPORT/${P4BROKER_PORT}/g" \ -e "s/REPL_P4WEBPORT/${P4WEB_PORT}/g" \ -e "s/REPL_P4FTPPORT/${P4FTP_PORT}/g" \ -e "s/REPL_DNSNAME/${P4DNSNAME}/g" \ -e "s/REPL_P4P_TARGET_PORT/${P4P_TARGET_PORT}/g" \ $SDP_COMMON/config/instance_vars.template > p4_${SDP_INSTANCE}.vars sed -e "s/REPL_ADMINISTRATOR/${MAILTO}/g" \ -e "s/REPL_COMPLAINFROM/${COMPLAINFROM}/g" \ -e "s/REPL_MAILHOST/${MAILHOST}/g" \ -e "s/REPL_DNSNAME/${P4DNSNAME}/g" \ $SDP_COMMON/config/p4review.cfg.template > p4_${SDP_INSTANCE}.p4review.cfg cd $P4DIR if [[ ! -f ${P4DIR}/p4.crontab ]]; then CRONTAB_NAME=p4.crontab else CRONTAB_NAME=p4.crontab.new rm -f ${P4DIR}/$CRONTAB_NAME > /dev/null 2>&1 msg "Existing crontab found, writing new crontab to ${P4DIR}/${CRONTAB_NAME}" fi sed -e "s/REPL_MAILTO/${MAILTO}/g" \ -e "s/REPL_MAILFROM/${MAILFROM}/g" \ -e "s/REPL_INSTANCE/${SDP_INSTANCE}/g" \ $SDP_COMMON/etc/cron.d/template.crontab.combined > $CRONTAB_NAME cd $P4DIR/${SDP_INSTANCE}/bin if [[ "$SHAREDDATA" == "TRUE" ]]; then if [[ "$SERVER_TYPE" == p4d_replica || "$SERVER_TYPE" == p4d_standby ]]; then msg "Configuring Replica sharing depot data with master, skipping chown/chmod of depot files" DoChownCommands=0 fi fi if [[ $DoChownCommands -eq 1 ]]; then if [[ $TEST -eq 0 ]]; then chown $OSUSER:$OSGROUP /$DD chown $OSUSER:$OSGROUP /$LG chown $OSUSER:$OSGROUP /$DB1 chown $OSUSER:$OSGROUP /$DB2 fi chown $OSUSER:$OSGROUP /$DD/p4 chown $OSUSER:$OSGROUP /$LG/p4 chown $OSUSER:$OSGROUP /$DB1/p4 chown $OSUSER:$OSGROUP /$DB2/p4 chown -h $OSUSER:$OSGROUP $P4DIR chown -h $OSUSER:$OSGROUP $P4DIR/$SDP_INSTANCE chown -h $OSUSER:$OSGROUP $P4DIR/common [[ $TEST -eq 0 ]] && chown -h $OSUSER:$OSGROUP $P4DIR/sdp chown $OSUSER:$OSGROUP $P4DIR/* chown -Rh $OSUSER:$OSGROUP $P4DIR/common [[ $TEST -eq 0 ]] && chown -Rh $OSUSER:$OSGROUP $P4DIR/sdp chown -Rh $OSUSER:$OSGROUP /$CN/p4/common chown -Rh $OSUSER:$OSGROUP /$DB1/p4/$SDP_INSTANCE chown -Rh $OSUSER:$OSGROUP /$DB2/p4/$SDP_INSTANCE chown -Rh $OSUSER:$OSGROUP /$LG/p4/$SDP_INSTANCE if [[ "$SHAREDDATA" == "FALSE" ]]; then msg "Setting ownership on depot files - this may take some time ..." chown -Rh $OSUSER:$OSGROUP /$DD/p4/$SDP_INSTANCE fi else msg "Skipped chown/chmod commands for large directory trees." fi chmod 700 /$DB1/p4 chmod 700 /$DB2/p4 chmod 700 /$DD/p4 chmod 700 /$LG/p4 chmod -R 700 /$DB1/p4/$SDP_INSTANCE chmod -R 700 /$DB2/p4/$SDP_INSTANCE chmod -R 700 /$CN/p4/common chmod -R 700 /$LG/p4/$SDP_INSTANCE if [[ "$SHAREDDATA" == "FALSE" ]]; then msg "Setting permissions on depot files - this may take some time ..." chmod -R 700 /$DD/p4/$SDP_INSTANCE fi if [[ $SDP_INSTANCE != $MASTERINSTANCE ]]; then if [[ -f $P4DIR/$MASTERINSTANCE/root/license ]]; then ln -s $P4DIR/$MASTERINSTANCE/root/license $P4DIR/$SDP_INSTANCE/root/license chown -h $OSUSER:$OSGROUP $P4DIR/$SDP_INSTANCE/root/license fi fi chmod 755 $P4DIR/${SDP_INSTANCE}/bin/*_init chmod 755 $P4DIR/${SDP_INSTANCE}/bin/init/*_init chmod 600 /$CN/p4/common/config/.p4passwd.${P4SERVER}.admin chmod 600 /$CN/p4/common/config/.p4passwd.${P4SERVER}.service [[ -e /$CN/p4/common/bin/*.cfg ]] && chmod 600 /$CN/p4/common/bin/*.cfg [[ -e /$CN/p4/common/bin/*.html ]] && chmod 600 /$CN/p4/common/bin/*.html chmod 700 $P4DIR/ssl [[ -e $P4DIR/ssl/* ]] && chmod 600 $P4DIR/ssl/* if [[ $TEST -eq 1 ]]; then msg " This was done in TEST mode - please run the following command to see any changes should be applied to your live environment (manually): diff -r /p4/$SDP_INSTANCE/bin $P4DIR/$SDP_INSTANCE/bin diff -r /p4/common $P4DIR/common If upgrading an older SDP version then be careful to ensure files in /p4/common/config are correct and update that /p4/common/bin/p4_vars is appropriate.\n" fi exit 0
# | Change | User | Description | Committed | |
---|---|---|---|---|---|
#1 | 23960 | noe_gonzalez | "Forking branch Dev of perforce-software-sdp to noe_gonzalez-sdp." | ||
//guest/perforce_software/sdp/dev/Server/Unix/setup/mkdirs.sh | |||||
#63 | 23580 | C. Thomas Tyler |
Fixed a typo that would cause a chown to fail. Thanks to @rmarin for spotting that the first attempt to fix this was wrong! #review @rmarin |
||
#62 | 23456 | C. Thomas Tyler |
Fixed mkdirs.sh bug where 'chown' was trying to change ownership of the wrong dir. Bypassing pre-commit review as this is an obvious typo fix. #review-23457 |
||
#61 | 23354 | C. Thomas Tyler |
Fixed bug where checkpoints.* dir for replicas was created on /hxlogs rather than /hxdepots volume. Removed unnecessary logic to create a symlink for checkpoints.* dir for replicas. Fixed ownership of new checkpoints.* dir on creation. PATCH: Bypassing pre-commit review. #review-23355 |
||
#60 | 23266 | C. Thomas Tyler |
Fixes and Enhancements: * Enabled daily_checkpoint.sh operate on edge servers, to keep /p4/N/offline_db current on those hosts for site-local recovery w/o requiring a site-local replica (though having a site-local replica can still be useful). * Disabled live_checkpoint.sh for edge servers. * More fully support topologies using edge severs, in both geographically distributed and horizaontal scaling "wokspace server" solutions. * Fix broken EDGESERVER value definition. * Modified name of SDP counter that gets set when a checkpoint is taken to incorporate ServerID, so now the counter name will look like lastSDPCheckpoint.master.1, or lastSDPCheckpoint.p4d_edge_sfo, rather than just lastSDPCheckpoint. There will be multiple such counters in a topology that uses edge servers, and/or which takes checkpoints on replicas. * Added comments for all functions. For the master server, journalPrefix remains: /p4/N/checkpoints/p4_N The /p4/N/checkpoints is reserved for writing by the master/commit server only. For non-standby (possibly filtered) replicas and edge serves, journalPrefix is: /p4/N/checkpoints.<ShortServerID>/p4_N.<ShortServerID> Here, ShortServerID is just the ServerID with the 'p4d_' prefix trimmed, since it is redundant in this context. See mkrep.sh, which enshines a ServerID (server spec) naming standard, with values like 'p4d_fr_bos' (forwarding replica in Boston) and p4d_edge_blr (Edge server in Bangalore). So the journalPrefix for the p4d_edge_bos replica would be: /p4/N/checkpoints.edge_bos/p4_N.edge_bos For "standby" (aka journalcopy) replicas, journalPrefix is set to /p4/N/journals.rep. which is written to the $LOGS volume, due to the nature of standby replicas using journalPrefix to write active server logs to pre-rotated journals. Some take-away to be updated in docs: * The /p4/N/checkpoints folder must be reserved for checkpoints that originate on the master. It should be safe to rsync this folder (with --delete if desired) to any replica or edge server. This is consistent with the current SDP. * I want to change 'journals.rep' to 'checkpoints.<ShortServerID>' for non-standby replicas, to ensure that checkpoints and journals taken on those hosts are written to a volume where they are backed up. * In sites with multiple edge serves, some sharing achive files ('workspace servers'), multiple edge servers will share the same SAN. So we one checkpoints dir per ServerID, and we want that dir to be on the /hxdepots volume. Note that the journalPrefix for replicas was a fixed /p4/N/journals.rep. This was on the /hxlogs volume - a presumably fast-for-writes volume, but typically NOT backed up and not very large. This change puts it under /p4/N/checkpoints.* for edge servers and non-standby replicas, but ensures other replica types and edge servers can generate checkpoints to a location that is backed up and has plenty of storage capacity. For standby replicas only (which cannot be filtered), the journalPrefix remains /p4/N/journals.rep on the /hxlogs volume. |
||
#59 | 23202 | C. Thomas Tyler | Fixed an obvious typo in mkdirs.sh. | ||
#58 | 22957 | C. Thomas Tyler |
Merged two changes initiated on main down to: Change @22826 by robert_cowham: Ignore some files on Mac. Change @22950 by awkan/ttyler: Provide an override for difference between proxy listening port and target port |
||
#57 | 22788 | C. Thomas Tyler | Backed out the backout; moving forward with this change. | ||
#56 | 22694 | Russell C. Jackson (Rusty) | Backout accidental submit of shelved change. | ||
#55 | 22693 | Russell C. Jackson (Rusty) |
Branched a Unix only version of the SDP. Removed extra items to create a cleaner tree. Moved a few items around to make more sense without Windows in the mix. |
||
#54 | 22625 | Russell C. Jackson (Rusty) | Approved in Review 22364 | ||
#53 | 22623 | Russell C. Jackson (Rusty) | Update to account for Tom's name change. | ||
#52 | 22201 | C. Thomas Tyler | Fixed typo. | ||
#51 | 22200 | C. Thomas Tyler |
More elegant and portable implementation of logic to find config file in same dir as mkdirs.sh script. Works on Mac, too. This works for various means of calling mkdirs.sh, e.g. ./mkdirs.sh /full/path/to/mkdirs.sh /path/with/symlink/to/mkdirs.sh mkdirs.sh (found in PATH) Approving my own review here for this minor change so I can deploy, as others are on holiday or traveling. |
||
#50 | 22145 | Robert Cowham | Update mkdirs to help testing. | ||
#49 | 22070 | Russell C. Jackson (Rusty) |
Pull the configuration items out into mkdirs.cfg and source that file in mkdirs.sh. Makes it a little cleaner, and less likely for someone to mess up the mkdirs.sh script. Also preps for potential future configure_sdp.sh script to ask questions and create the mkdirs.cfg file. |
||
#48 | 21418 | C. Thomas Tyler |
Changed CASEINSENSITIVE to CASE_SENSITIVE, to make it harder to pick the wrong value by miscalculating the double-negative. Changed the default to be case-sensitive, for several reasons: * Case-sensitive is better for git interoperability. Most git repos in the wild, especially those used in corporate environments, are case sensitive. * Case-sensitive is better for importing from most legacy SCM systems, as it can handle a wider array of data sets. * Case-sensitive is required for some data sets that have case-only variants. * The SDP now includes a case check trigger to help avoid the worst perils of a case-sensitive server. * While confusion is always possible if the client OS doesn't match the case sensitivty setting of the server, the least harmful permuatations of problems occur with the widest array of client platforms when you have a case-senstive server. * Case-insensitive is really only best suited to pure-Windows sites. Also added a comment indicating you don't need the Review daemon if you intend to handle review-style email notifications with Swarm. |
||
#47 | 21327 | Russell C. Jackson (Rusty) | Update to have mkdirs put the correct instance name into the crontab files. | ||
#46 | 21267 | Robert Cowham |
Fix failing tests. Changed default filesystem names to: DB1=hxmetadata1 DB2=hxmetadata2 DD=hxdepots LG=hxlogs hx=Helix. Updated docs to reflect this |
||
#45 | 21192 | Russell C. Jackson (Rusty) | Fixed issue with root and offline_db links. | ||
#44 | 21178 | Russell C. Jackson (Rusty) |
Change the SDP so that root and offline_db can be on different volumes and still accomplish a fast database recovery using recreate_db_checkpoint.sh and recreate_db_sync_replica.sh. This is done by switching the links now rather than moving the db files. |
||
#43 | 21123 | Russell C. Jackson (Rusty) | Corrected cp path for ssl directory. | ||
#42 | 21049 | Russell C. Jackson (Rusty) |
Added config.txt to /p4/ssl so we and customers don't have to go find it in the admin guide. Added comments and cp command for config.txt and setting up ssl certs. Uncommented the journalcopy echo commands at the bottom of mkdirs.sh per discussion with Tom. |
||
#41 | 20982 | Russell C. Jackson (Rusty) | Added the new CN setting for /p4/common to the test folder path resets. | ||
#40 | 20905 | Russell C. Jackson (Rusty) |
Defaulted the SDP to be on the same volume as $CN since that is where it is usually located. Changed MAILTO to default to $MAILFROM since that is what it is most of the time and I am lazy and don't like typing the email address twice. |
||
#39 | 20904 | Russell C. Jackson (Rusty) |
Added CN=$DD and changed all $DD/p4/common entries to $CN/p4/common in order to allow you to install an instance on a different depotdata volume than the 1st instance. Before this change, doing that would incorrectly create a common folder on the 2nd depotdata volume. Also removed the lines that copy the binaries from an existing /p4/common/bin folder back to the SDP. It is perfectly acceptable to install another instance that is using a newer version than the existing instance. |
||
#38 | 20790 | C. Thomas Tyler | Added '/p4/common/hms' to list of dirs to install.' | ||
#37 | 20708 | C. Thomas Tyler |
Per discussion: s/checkpoints.rep/journals.rep/g This directory name changed, used in the journalPrefix configurable, is intended to clarify that the should be targeted to for a FAST volume for use with journalcopy, rather than the LARGE volume as would be implied when using a directory with "checkpoints" in the name. |
||
#36 | 20432 | C. Thomas Tyler |
Improved edge & daisy chained replica support in instance_vars.template. Changed so P4MASTER is set dynamically, based on how/whether the P4TARGET of the current ServerID is set. This also eliminates a possible discrepancey beteween P4MASTER as defined in the p4_N.vars/mkdirs.sh and the master hostname as defined in P4TARGET configurables. The value defined with P4TARGET must also work with SSH keys. (As a best practice P4TARGET should be a host alias so that it doesn't need to be changed in case of failvoer of your P4TARGET server). Changed so SHAREDDATA is set dynamically, based on how/whether the lbr.replication of the current ServerID is set. If it is unset, set to none, ondemand, or cache, then SHAREDDATA is set to TRUE, otherwise FALSE. Dynamic queries use 'p4d -cset' so they work regardless of whether the p4d process is up or not. Some internal refactoring was necessary to ensure all variables are set before they are used. This involved a minor tweak to mkdirs.sh to remove the now-unnecessary 'sed' for SHAREDDATA when generating p4_N.vars from the template. SHAREDDATA must still be configured in mkdirs.sh because it can be run before a replica is fully configured. Goals: * Simplfy SDP configuration for complex topologies by eliminating configuration external to p4d where possible/practical. * Reduce chances for discrepancies and errors as topologies evolve over time. * Allow the p4_1.vars file to identical on all hosts in the topology, an HMS requirement. |
||
#35 | 20395 | C. Thomas Tyler | Fixed typo. | ||
#34 | 20376 | C. Thomas Tyler |
Incorporated HMS service user naming standard into the SDP, i.e. "svc_<serverid>." Removed SVCUSER setting from mkdirs.sh accordingly. Fixed mkdirs.sh so /p4/common/etc is created if it doesn't already exist, just as the 'lib' dir is handled. Also a minor structural enhacement in instance_vars.template. Added SDP_ALWAYS_LOGIN setting to instance_vars.template, setting the default to 0 to prevent unnecessary logins. |
||
#33 | 20363 | C. Thomas Tyler |
Removed references to legacy names for checkpoint scripts. No functional changes. Bypassing pre-commit code review. #review-20364 |
||
#32 | 20217 | Russell C. Jackson (Rusty) | Needed move password creation outside of common area since it is instance specific now. | ||
#31 | 20170 | Russell C. Jackson (Rusty) |
Moved password and users into the config directory to allow for instance specific users and passwords. Ran into a case where two different teams were sharing the same server hardware and needed this type of differentiation. Surprised that we haven't hit this sooner. Also defaulted mkdirs to use the numeric ports since this is the most common installation. |
||
#30 | 19983 | Russell C. Jackson (Rusty) | Commented out the echo around using journalcopy until we are ready to support that. | ||
#29 | 19410 | Russell C. Jackson (Rusty) |
Made out on setting permissions consistent in mkdirs. Added the new output as valid in test_SDP. |
||
#28 | 19314 | Russell C. Jackson (Rusty) |
Change p4verify.sh to use -S to verify shelves on a replica instead of printing the files on the shelf. Removed the HOST_IP settings from mkdirs and instance_vars since it causes problems in a shared depotdata environment, and it was a temporary fix to work around a bug with auth.id that is being fixed. |
||
#27 | 19311 | adrian_waters | If creating a replica that shares depot files with master, don't do chown/chmod on the depot files as this can take a significant time when migrating existing Helix servers into the SDP; In addition, issue 'warning' message that chown/chmod could take some time to complete so user is aware of processing being carried out | ||
#26 | 18952 | C. Thomas Tyler |
Tweaks to mkdirs.sh: * Replaced ADMINEMAIL with MAILTO and MAILFROM settings. This allows MAILTO to be a distribution list or a comma-delimited list of email addresses, while MAILFROM must always be exactly one email address. * Added quotes to allow handling of adresses like '#P4AdminTeam," where the '#' character designates a distribution list. |
||
#25 | 18930 | C. Thomas Tyler |
Fixed typo; caught by test suite. Bypassing pre-commit review 'cuz this is an obivious fix. #review-18931 |
||
#24 | 18925 | C. Thomas Tyler |
Enhanced p4_vars.template to support operating on an SDP-managed host where no p4d process runs, such as a p4p (proxy) host, where no /p4/n/root/server.id file exists. The $SERVERID value will be empty (but defined) in this case. Enhanced to better support operating with replicas that share /depotdata with their master servers, by making P4TRUST and P4TICKETS values contain $SERVERID. Moved SHAREDDATA from p4_vars to instance_vars, since it is not inherently a global setting. In sophisticated enterprise environments, it can vary on a per-replica basis. Adjusted mkdirs.sh accordingly. |
||
#23 | 18618 | Russell C. Jackson (Rusty) | Added a crontab for the edge servers. | ||
#22 | 18203 | richard_baum |
Removed hard-coded /p4 path for server.id file location. This fixes "-test" mode so server.id file is written to the correct location. Without this it is written to /p4 where there could be an installation with the same instance ID. In that case the server.id file could get overwritten with different data. If there is not an existing instance an error message would be displayed. Now neither of these should occur :-) Also fixed some typos. |
||
#21 | 16563 | C. Thomas Tyler |
Routine Merge Down to dev from main using: p4 merge -b perforce_software-sdp-dev p4 resolve -as |
||
#20 | 16373 | C. Thomas Tyler |
Routine Merge Down to dev from main using: p4 merge -b perforce_software-sdp-dev |
||
#19 | 16335 | C. Thomas Tyler |
Routine Merge Down to dev from main using: p4 merge -b perforce_software-sdp-dev |
||
#18 | 16029 | C. Thomas Tyler |
Routine merge to dev from main using: p4 merge -b perforce_software-sdp-dev |
||
#17 | 15701 | C. Thomas Tyler | Routine merge down using 'p4 merge -b perforce_software-sdp-dev'. | ||
#16 | 14136 | C. Thomas Tyler |
Routine merge down to dev from main for SDP using perforce_software-sdp-dev. |
||
#15 | 14038 | C. Thomas Tyler | Routine merge-down to SDP dev from main. | ||
#14 | 13906 | C. Thomas Tyler |
Normalized P4INSTANCE to SDP_INSTANCE to get Unix/Windows implementations in sync. Reasons: 1. Things that interact with SDP in both Unix and Windows environments shoudn't have to account for this obscure SDP difference between Unix and Windows. (I came across this doing CBD work). 2. The Windows and Unix scripts have different variable names for defining the same concept, the SDP instance. Unix uses P4INSTANCE, while Windows uses SDP_INSTANCE. 3. This instance tag, a data set identifier, is an SDP concept. I prefer the SDP_INSTANCE name over P4INSTANCE, so I prpose to normalize to SDP_INSTANCE. 4. The P4INSTANCE name makes it look like a setting that might be recognized by the p4d itself, which it is not. (There are other such things such as P4SERVER that could perhaps be renamed as a separate task; but I'm not sure we want to totally disallow the P4 prefix for variable names. It looks too right to be wrong in same cases, like P4BIN and P4DBIN. That's a discussion for another day, outside the scope of this task). Meanwhile: * Fixed a bug in the Windows 2013.3 upgrade script that was referencing undefined P4INSTANCE, as the Windows environment defined only SDP_INSTANCE. * Had P4INSTANCE been removed completely, this change would likely cause trouble for users doing updates for existing SDP installations. So, though it involves slight technical debt, I opted to keep a redundant definition of P4INSTANCE in p4_vars.template, with comments indicating SDP_INSTANCE should be used in favor of P4INSTANCE, with a warning that P4INSTANCE may go away in a future release. This should avoid unnecessary upgrade pain. * In mkdirs.sh, the varialbe name was INSTANCE rather than SDP_INSTANCE. I changed that as well. That required manual change rather than sub/replace to avoid corrupting other similar varialbe names (e.g. MASTERINSTANCE). This is a trivial change technically (a substitute/replace, plus tweaks in p4_vars.template), but impacts many files. |
||
#13 | 13586 | C. Thomas Tyler |
Routine merge down from main -> dev. Trivial merges, all resolved with 'p4 resolve -as.' |
||
#12 | 12923 | C. Thomas Tyler |
Routine merge down from main to dev. Resolved with 'p4 resolve -as', no merges or conflicts. |
||
#11 | 12170 | Russell C. Jackson (Rusty) | Merged in changes in Main | ||
#10 | 12116 | Russell C. Jackson (Rusty) | Update dev from main. | ||
#9 | 12107 | C. Thomas Tyler |
Routine merge down from 'main' to 'dev', resolved with 'p4 resolve -as'. |
||
#8 | 12028 | C. Thomas Tyler | Refreshed SDP dev branch, merging down from main. | ||
#7 | 11523 | Russell C. Jackson (Rusty) |
Modified P4BROKERPORTNUM to just be the port number and added P4BROKERPORT to instance_vars to be consistent with P4PORT. Also makes it easier to modify p4review.py to use P4BROKERPORT rather than P4PORT for the subject line when needed. |
||
#6 | 11490 | Russell C. Jackson (Rusty) |
Added SSL_PREFIX back and P4MASTERPORTNUM in order to support the sync_replica.sh and weekly_sync_replica.sh scripts. |
||
#5 | 11477 | Russell C. Jackson (Rusty) |
Updated to use /usr/bin/env python Added workshop header. Changed cfg to config. |
||
#4 | 11474 | Russell C. Jackson (Rusty) |
Had to move the cfg directory to the metadata volume and link it under the instance directory to provide the proper separation in a shared volume environment. The instance specific vars cannot be in a shared directory since they need to be different on each node using the shared volume. Since the files moved back to the instance directory, I changed the names back to: instance_vars p4review.cfg to keep things simple. Also moved p4_vars.template to SDP/Server/Unix/p4/common/cfg so that it doesn't get copied to the /p4/common/bin folder. Plus, it makes more sense for it to be in that directory in the SDP structure. |
||
#3 | 11468 | Russell C. Jackson (Rusty) | Added comments regarding configuring Edge and Edge replicas. | ||
#2 | 11466 | Russell C. Jackson (Rusty) |
Initial work to simplify p4_vars and remove cluster stuff. Testing of named instances surfaced some bugs that are in prod sdp, now fixed in dev. Added three triggers from RCJ SDP Moved p4review.cfg into the new /p4/common/cfg to go along with the instance_vars files. mkdirs.sh now generates an instance_p4review.cfg as well. Removed incremental p4verify to clean up a bit. It didn't support replicas and was really never used. All port settings now live in <instance>_vars file. You set what you want the ports to be in mkdirs.sh. There is no more fancy logic to try to guess what the port should be. You set it, and that is what it is. Remaining to do is to updated scripts to not need p4master_run. Saved that work for later since this is tested and works. |
||
#1 | 10638 | C. Thomas Tyler | Populate perforce_software-sdp-dev. | ||
//guest/perforce_software/sdp/main/Server/Unix/setup/mkdirs.sh | |||||
#1 | 10148 | C. Thomas Tyler | Promoted the Perforce Server Deployment Package to The Workshop. |