migration and cleanup from legacy repos
This commit is contained in:
		
							
								
								
									
										29
									
								
								CMDB/snmp/.svn/all-wcprops
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										29
									
								
								CMDB/snmp/.svn/all-wcprops
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,29 @@
 | 
			
		||||
K 25
 | 
			
		||||
svn:wc:ra_dav:version-url
 | 
			
		||||
V 57
 | 
			
		||||
/rg0103/pdesubversion-tpqaslack/!svn/ver/366/scripts/snmp
 | 
			
		||||
END
 | 
			
		||||
debian-default-snmpd
 | 
			
		||||
K 25
 | 
			
		||||
svn:wc:ra_dav:version-url
 | 
			
		||||
V 78
 | 
			
		||||
/rg0103/pdesubversion-tpqaslack/!svn/ver/315/scripts/snmp/debian-default-snmpd
 | 
			
		||||
END
 | 
			
		||||
centos-snmpd.options
 | 
			
		||||
K 25
 | 
			
		||||
svn:wc:ra_dav:version-url
 | 
			
		||||
V 78
 | 
			
		||||
/rg0103/pdesubversion-tpqaslack/!svn/ver/359/scripts/snmp/centos-snmpd.options
 | 
			
		||||
END
 | 
			
		||||
setup-snmp.sh
 | 
			
		||||
K 25
 | 
			
		||||
svn:wc:ra_dav:version-url
 | 
			
		||||
V 71
 | 
			
		||||
/rg0103/pdesubversion-tpqaslack/!svn/ver/366/scripts/snmp/setup-snmp.sh
 | 
			
		||||
END
 | 
			
		||||
snmpd.conf
 | 
			
		||||
K 25
 | 
			
		||||
svn:wc:ra_dav:version-url
 | 
			
		||||
V 68
 | 
			
		||||
/rg0103/pdesubversion-tpqaslack/!svn/ver/276/scripts/snmp/snmpd.conf
 | 
			
		||||
END
 | 
			
		||||
							
								
								
									
										164
									
								
								CMDB/snmp/.svn/entries
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										164
									
								
								CMDB/snmp/.svn/entries
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,164 @@
 | 
			
		||||
10
 | 
			
		||||
 | 
			
		||||
dir
 | 
			
		||||
440
 | 
			
		||||
https://svn01.atlanta.hp.com/rg0103/pdesubversion-tpqaslack/scripts/snmp
 | 
			
		||||
https://svn01.atlanta.hp.com/rg0103/pdesubversion-tpqaslack
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
2013-10-30T20:33:11.769859Z
 | 
			
		||||
366
 | 
			
		||||
wyble@hp.com
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
92b00a8e-620f-4ac7-abd2-c9ef5b6c269b
 | 
			
		||||
 | 
			
		||||
debian-default-snmpd
 | 
			
		||||
file
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
2013-12-10T21:18:03.480402Z
 | 
			
		||||
536542d8470261eb1971bd3bb35adf68
 | 
			
		||||
2013-10-02T16:57:28.319476Z
 | 
			
		||||
315
 | 
			
		||||
wyble@hp.com
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
723
 | 
			
		||||
 | 
			
		||||
centos-snmpd.options
 | 
			
		||||
file
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
2013-12-10T21:18:03.487402Z
 | 
			
		||||
40233436f1b04129a231dba3a5225762
 | 
			
		||||
2013-10-25T19:11:31.312453Z
 | 
			
		||||
359
 | 
			
		||||
wyble@hp.com
 | 
			
		||||
has-props
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
135
 | 
			
		||||
 | 
			
		||||
setup-snmp.sh
 | 
			
		||||
file
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
2013-12-10T21:18:03.492402Z
 | 
			
		||||
dde4ae53ae1e316b551dbc386ac30e9b
 | 
			
		||||
2013-10-30T20:33:11.769859Z
 | 
			
		||||
366
 | 
			
		||||
wyble@hp.com
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
1350
 | 
			
		||||
 | 
			
		||||
snmpd.conf
 | 
			
		||||
file
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
2013-12-10T21:18:03.496402Z
 | 
			
		||||
88b7c51014dbd12d784982d41c3ae7e7
 | 
			
		||||
2013-09-17T18:44:43.972099Z
 | 
			
		||||
276
 | 
			
		||||
wyble@hp.com
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
474
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										5
									
								
								CMDB/snmp/.svn/prop-base/centos-snmpd.options.svn-base
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										5
									
								
								CMDB/snmp/.svn/prop-base/centos-snmpd.options.svn-base
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,5 @@
 | 
			
		||||
K 14
 | 
			
		||||
svn:executable
 | 
			
		||||
V 1
 | 
			
		||||
*
 | 
			
		||||
END
 | 
			
		||||
							
								
								
									
										3
									
								
								CMDB/snmp/.svn/text-base/centos-snmpd.options.svn-base
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										3
									
								
								CMDB/snmp/.svn/text-base/centos-snmpd.options.svn-base
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,3 @@
 | 
			
		||||
# snmpd command line options
 | 
			
		||||
OPTIONS="-Lsd -Lf /dev/null -p /var/run/snmpd.pid"
 | 
			
		||||
#OPTIONS="-Lsd -Lf /dev/null -p /var/run/snmpd.pid -a"
 | 
			
		||||
							
								
								
									
										22
									
								
								CMDB/snmp/.svn/text-base/debian-default-snmpd.svn-base
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										22
									
								
								CMDB/snmp/.svn/text-base/debian-default-snmpd.svn-base
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,22 @@
 | 
			
		||||
# This file controls the activity of snmpd and snmptrapd
 | 
			
		||||
 | 
			
		||||
# Don't load any MIBs by default.
 | 
			
		||||
# You might comment this lines once you have the MIBs downloaded.
 | 
			
		||||
export MIBS=
 | 
			
		||||
 | 
			
		||||
# snmpd control (yes means start daemon).
 | 
			
		||||
SNMPDRUN=yes
 | 
			
		||||
 | 
			
		||||
# snmpd options (use syslog, close stdin/out/err).
 | 
			
		||||
SNMPDOPTS='-Lsd -Lf /dev/null -u snmp -g snmp -I -smux -p /var/run/snmpd.pid'
 | 
			
		||||
 | 
			
		||||
# snmptrapd control (yes means start daemon).  As of net-snmp version
 | 
			
		||||
# 5.0, master agentx support must be enabled in snmpd before snmptrapd
 | 
			
		||||
# can be run.  See snmpd.conf(5) for how to do this.
 | 
			
		||||
TRAPDRUN=no
 | 
			
		||||
 | 
			
		||||
# snmptrapd options (use syslog).
 | 
			
		||||
TRAPDOPTS='-Lsd -p /var/run/snmptrapd.pid'
 | 
			
		||||
 | 
			
		||||
# create symlink on Debian legacy location to official RFC path
 | 
			
		||||
SNMPDCOMPAT=yes
 | 
			
		||||
							
								
								
									
										62
									
								
								CMDB/snmp/.svn/text-base/setup-snmp.sh.svn-base
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										62
									
								
								CMDB/snmp/.svn/text-base/setup-snmp.sh.svn-base
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,62 @@
 | 
			
		||||
#!/bin/bash
 | 
			
		||||
#A script to setup snmp on redhat/debian systems
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
centos_snmp()
 | 
			
		||||
#Install SNMP on a cent box
 | 
			
		||||
{
 | 
			
		||||
#Fix yum.conf
 | 
			
		||||
wget -O /etc/yum/yum.conf http://slack-master.tplab.tippingpoint.com/yum.conf
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#Install snmpd
 | 
			
		||||
yum -y install net-snmp
 | 
			
		||||
 | 
			
		||||
#Install observium bits
 | 
			
		||||
wget -O /usr/bin/distro http://www.observium.org/svn/observer/trunk/scripts/distro
 | 
			
		||||
chmod 755 /usr/bin/distro
 | 
			
		||||
 | 
			
		||||
#Pull down snmpd configuration files
 | 
			
		||||
wget  -O /etc/snmp/snmpd.conf http://slack-master.tplab.tippingpoint.com/snmp/snmpd.conf 
 | 
			
		||||
wget  -O /etc/sysconfig/snmpd.options http://slack-master.tplab.tippingpoint.com/snmp/centos-snmpd.options 
 | 
			
		||||
 | 
			
		||||
#Restart snmpd
 | 
			
		||||
/etc/init.d/snmpd restart
 | 
			
		||||
 | 
			
		||||
chkconfig snmpd on
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
debian_snmp()
 | 
			
		||||
#Install snmp on a debian box
 | 
			
		||||
{
 | 
			
		||||
#Install snmpd
 | 
			
		||||
apt-get -y install snmpd 
 | 
			
		||||
 | 
			
		||||
#Install observium bits
 | 
			
		||||
wget -O /usr/bin/distro http://www.observium.org/svn/observer/trunk/scripts/distro
 | 
			
		||||
chmod 755 /usr/bin/distro
 | 
			
		||||
 | 
			
		||||
#Pull down snmpd configuration files
 | 
			
		||||
wget  -O /etc/default/snmpd http://slack-master.tplab.tippingpoint.com/snmp/debian-default-snmpd.conf 
 | 
			
		||||
wget  -O /etc/snmp/snmpd.conf http://slack-master.tplab.tippingpoint.com/snmp/snmpd.conf 
 | 
			
		||||
 | 
			
		||||
#Restart snmpd
 | 
			
		||||
/etc/init.d/snmpd restart
 | 
			
		||||
 | 
			
		||||
chkconfig snmpd on
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
DIST=$(lsb_release -d)
 | 
			
		||||
 | 
			
		||||
if [ $(echo $DIST | grep Ubuntu -c) -eq 1 ];
 | 
			
		||||
then
 | 
			
		||||
debian_snmp
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
if [ $(echo $DIST | grep Centos -c) -eq 1 ];
 | 
			
		||||
then
 | 
			
		||||
centos_snmp
 | 
			
		||||
fi
 | 
			
		||||
							
								
								
									
										10
									
								
								CMDB/snmp/.svn/text-base/snmpd.conf.svn-base
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										10
									
								
								CMDB/snmp/.svn/text-base/snmpd.conf.svn-base
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,10 @@
 | 
			
		||||
com2sec readonly  default  mng-actua1 
 | 
			
		||||
group MyROGroup v1         readonly
 | 
			
		||||
group MyROGroup v2c        readonly
 | 
			
		||||
group MyROGroup usm        readonly
 | 
			
		||||
view all    included  .1                               80
 | 
			
		||||
access MyROGroup ""      any       noauth    exact  all    none   none
 | 
			
		||||
syslocation Austin TX USA
 | 
			
		||||
syscontact esplabsupport@hp.com
 | 
			
		||||
#This line allows Observium to detect the host OS if the distro script is installed
 | 
			
		||||
extend .1.3.6.1.4.1.2021.7890.1 distro /usr/bin/distro 
 | 
			
		||||
							
								
								
									
										3
									
								
								CMDB/snmp/centos-snmpd.options
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										3
									
								
								CMDB/snmp/centos-snmpd.options
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,3 @@
 | 
			
		||||
# snmpd command line options
 | 
			
		||||
OPTIONS="-Lsd -Lf /dev/null -p /var/run/snmpd.pid"
 | 
			
		||||
#OPTIONS="-Lsd -Lf /dev/null -p /var/run/snmpd.pid -a"
 | 
			
		||||
							
								
								
									
										22
									
								
								CMDB/snmp/debian-default-snmpd
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										22
									
								
								CMDB/snmp/debian-default-snmpd
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,22 @@
 | 
			
		||||
# This file controls the activity of snmpd and snmptrapd
 | 
			
		||||
 | 
			
		||||
# Don't load any MIBs by default.
 | 
			
		||||
# You might comment this lines once you have the MIBs downloaded.
 | 
			
		||||
export MIBS=
 | 
			
		||||
 | 
			
		||||
# snmpd control (yes means start daemon).
 | 
			
		||||
SNMPDRUN=yes
 | 
			
		||||
 | 
			
		||||
# snmpd options (use syslog, close stdin/out/err).
 | 
			
		||||
SNMPDOPTS='-LS4d -Lf /dev/null -u snmp -g snmp -I -smux -p /var/run/snmpd.pid'
 | 
			
		||||
 | 
			
		||||
# snmptrapd control (yes means start daemon).  As of net-snmp version
 | 
			
		||||
# 5.0, master agentx support must be enabled in snmpd before snmptrapd
 | 
			
		||||
# can be run.  See snmpd.conf(5) for how to do this.
 | 
			
		||||
TRAPDRUN=no
 | 
			
		||||
 | 
			
		||||
# snmptrapd options (use syslog).
 | 
			
		||||
TRAPDOPTS='-Lsd -p /var/run/snmptrapd.pid'
 | 
			
		||||
 | 
			
		||||
# create symlink on Debian legacy location to official RFC path
 | 
			
		||||
SNMPDCOMPAT=yes
 | 
			
		||||
							
								
								
									
										70
									
								
								CMDB/snmp/distro
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										70
									
								
								CMDB/snmp/distro
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,70 @@
 | 
			
		||||
#!/bin/sh
 | 
			
		||||
# Detects which OS and if it is Linux then it will detect which Linux Distribution.
 | 
			
		||||
 | 
			
		||||
OS=`uname -s`
 | 
			
		||||
REV=`uname -r`
 | 
			
		||||
MACH=`uname -m`
 | 
			
		||||
 | 
			
		||||
if [ "${OS}" = "SunOS" ] ; then
 | 
			
		||||
  OS=Solaris
 | 
			
		||||
  ARCH=`uname -p`
 | 
			
		||||
  OSSTR="${OS} ${REV}(${ARCH} `uname -v`)"
 | 
			
		||||
elif [ "${OS}" = "AIX" ] ; then
 | 
			
		||||
  OSSTR="${OS} `oslevel` (`oslevel -r`)"
 | 
			
		||||
elif [ "${OS}" = "Linux" ] ; then
 | 
			
		||||
  KERNEL=`uname -r`
 | 
			
		||||
  if [ -f /etc/redhat-release ] ; then
 | 
			
		||||
    DIST=$(cat /etc/redhat-release | awk '{print $1}')
 | 
			
		||||
    if [ "${DIST}" = "CentOS" ]; then
 | 
			
		||||
      DIST="CentOS"
 | 
			
		||||
    elif [ "${DIST}" = "Mandriva" ]; then
 | 
			
		||||
      DIST="Mandriva"
 | 
			
		||||
      PSEUDONAME=`cat /etc/mandriva-release | sed s/.*\(// | sed s/\)//`
 | 
			
		||||
      REV=`cat /etc/mandriva-release | sed s/.*release\ // | sed s/\ .*//`
 | 
			
		||||
    elif [ "${DIST}" = "Fedora" ]; then
 | 
			
		||||
      DIST="Fedora"
 | 
			
		||||
    else
 | 
			
		||||
      DIST="RedHat"
 | 
			
		||||
    fi
 | 
			
		||||
 | 
			
		||||
    PSEUDONAME=`cat /etc/redhat-release | sed s/.*\(// | sed s/\)//`
 | 
			
		||||
    REV=`cat /etc/redhat-release | sed s/.*release\ // | sed s/\ .*//`
 | 
			
		||||
  elif [ -f /etc/SuSE-release ] ; then
 | 
			
		||||
    DIST=`cat /etc/SuSE-release | tr "\n" ' '| sed s/VERSION.*//`
 | 
			
		||||
    REV=`cat /etc/SuSE-release | tr "\n" ' ' | sed s/.*=\ //`
 | 
			
		||||
  elif [ -f /etc/mandrake-release ] ; then
 | 
			
		||||
    DIST='Mandrake'
 | 
			
		||||
    PSEUDONAME=`cat /etc/mandrake-release | sed s/.*\(// | sed s/\)//`
 | 
			
		||||
    REV=`cat /etc/mandrake-release | sed s/.*release\ // | sed s/\ .*//`
 | 
			
		||||
  elif [ -f /etc/debian_version ] ; then
 | 
			
		||||
    if [ -f /etc/mailcleaner/etc/mailcleaner/version.def ] ; then
 | 
			
		||||
      DIST="MailCleaner"
 | 
			
		||||
      REV=`cat /etc/mailcleaner/etc/mailcleaner/version.def`
 | 
			
		||||
    else
 | 
			
		||||
      DIST="Debian `cat /etc/debian_version`"
 | 
			
		||||
      REV=""
 | 
			
		||||
    fi
 | 
			
		||||
  fi
 | 
			
		||||
 | 
			
		||||
  if [ -f /etc/UnitedLinux-release ] ; then
 | 
			
		||||
    DIST="${DIST}[`cat /etc/UnitedLinux-release | tr "\n" ' ' | sed s/VERSION.*//`]"
 | 
			
		||||
  fi
 | 
			
		||||
 | 
			
		||||
  if [ -f /etc/lsb-release ] ; then
 | 
			
		||||
    LSB_DIST="`cat /etc/lsb-release | grep DISTRIB_ID | cut -d "=" -f2`"
 | 
			
		||||
    LSB_REV="`cat /etc/lsb-release | grep DISTRIB_RELEASE | cut -d "=" -f2`"
 | 
			
		||||
    if [ "$LSB_DIST" != "" ] ; then
 | 
			
		||||
      DIST=$LSB_DIST
 | 
			
		||||
      REV=$LSB_REV
 | 
			
		||||
    fi
 | 
			
		||||
  fi
 | 
			
		||||
 | 
			
		||||
#  OSSTR="${OS} ${DIST} ${REV}(${PSEUDONAME} ${KERNEL} ${MACH})"
 | 
			
		||||
  OSSTR="${DIST} ${REV}"
 | 
			
		||||
elif [ "${OS}" = "Darwin" ] ; then
 | 
			
		||||
  if [ -f /usr/bin/sw_vers ] ; then
 | 
			
		||||
    OSSTR=`/usr/bin/sw_vers|grep -v Build|sed 's/^.*:.//'| tr "\n" ' '`
 | 
			
		||||
  fi
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
echo ${OSSTR}
 | 
			
		||||
							
								
								
									
										32
									
								
								CMDB/snmp/setup-snmp.sh
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										32
									
								
								CMDB/snmp/setup-snmp.sh
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,32 @@
 | 
			
		||||
#!/bin/bash
 | 
			
		||||
#Install script for snmp on all Linux systems
 | 
			
		||||
 | 
			
		||||
if [ -f /etc/apt/sources.list ];
 | 
			
		||||
then
 | 
			
		||||
#Install observium bits
 | 
			
		||||
chmod 755 /usr/bin/distro
 | 
			
		||||
#Pull down snmpd configuration files
 | 
			
		||||
wget  -O /etc/default/snmpd http://txn04-slack-master.tplab.tippingpoint.com/sysmgmt/snmp/debian-default-snmpd
 | 
			
		||||
wget  -O /etc/snmp/snmpd.conf http://txn04-slack-master.tplab.tippingpoint.com/sysmgmt/snmp/snmpd.conf 
 | 
			
		||||
#Restart snmpd
 | 
			
		||||
/etc/init.d/snmpd restart
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
elif [ -f /etc/yum.conf ];
 | 
			
		||||
then
 | 
			
		||||
#Fix yum.conf
 | 
			
		||||
wget -O /etc/yum/yum.conf http://fezzik.tplab.tippingpoint.com/yum.conf
 | 
			
		||||
#Install snmpd
 | 
			
		||||
yum -y install net-snmp
 | 
			
		||||
#Install observium bits
 | 
			
		||||
curl --silent http://txn04-slack-master.tplab.tippingpoint.com/sysmgmt/snmp/distro > /usr/bin/distro 
 | 
			
		||||
chmod 755 /usr/bin/distro
 | 
			
		||||
#Pull down snmpd configuration files
 | 
			
		||||
wget  -O /etc/snmp/snmpd.conf http://txn04-slack-master.tplab.tippingpoint.com/sysmgmt/snmp/snmpd.conf 
 | 
			
		||||
wget  -O /etc/sysconfig/snmpd.options http://txn04-slack-master.tplab.tippingpoint.com/sysmgmt/snmp/centos-snmpd.options 
 | 
			
		||||
#Restart snmpd
 | 
			
		||||
/etc/init.d/snmpd restart
 | 
			
		||||
chkconfig snmpd on
 | 
			
		||||
fi
 | 
			
		||||
							
								
								
									
										10
									
								
								CMDB/snmp/snmpd.conf
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										10
									
								
								CMDB/snmp/snmpd.conf
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,10 @@
 | 
			
		||||
com2sec readonly  default  mng-actua1 
 | 
			
		||||
group MyROGroup v1         readonly
 | 
			
		||||
group MyROGroup v2c        readonly
 | 
			
		||||
group MyROGroup usm        readonly
 | 
			
		||||
view all    included  .1                               80
 | 
			
		||||
access MyROGroup ""      any       noauth    exact  all    none   none
 | 
			
		||||
syslocation Austin TX USA
 | 
			
		||||
syscontact techops-alerts@turnsys.com
 | 
			
		||||
#This line allows Observium to detect the host OS if the distro script is installed
 | 
			
		||||
extend .1.3.6.1.4.1.2021.7890.1 distro /usr/bin/distro 
 | 
			
		||||
							
								
								
									
										35
									
								
								CMDB/subnets
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										35
									
								
								CMDB/subnets
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,35 @@
 | 
			
		||||
10.253.0.0/24
 | 
			
		||||
10.253.1.0/24
 | 
			
		||||
10.253.2.0/24
 | 
			
		||||
10.253.3.0/24
 | 
			
		||||
10.253.4.0/24
 | 
			
		||||
10.253.5.0/24
 | 
			
		||||
10.253.6.0/24
 | 
			
		||||
10.253.7.0/24
 | 
			
		||||
10.253.8.0/24
 | 
			
		||||
10.253.9.0/24
 | 
			
		||||
10.251.0.0/24
 | 
			
		||||
10.251.1.0/24
 | 
			
		||||
10.251.2.0/24
 | 
			
		||||
10.251.3.0/24
 | 
			
		||||
10.251.4.0/24
 | 
			
		||||
10.251.5.0/24
 | 
			
		||||
10.251.6.0/24
 | 
			
		||||
10.251.7.0/24
 | 
			
		||||
10.251.8.0/24
 | 
			
		||||
10.251.9.0/24
 | 
			
		||||
10.251.10.0/24
 | 
			
		||||
10.251.11.0/24
 | 
			
		||||
10.251.12.0/24
 | 
			
		||||
10.251.13.0/24
 | 
			
		||||
10.251.30.0/24
 | 
			
		||||
10.251.31.0/24
 | 
			
		||||
10.251.32.0/24
 | 
			
		||||
10.251.33.0/24
 | 
			
		||||
10.251.34.0/24
 | 
			
		||||
10.251.35.0/24
 | 
			
		||||
10.251.36.0/24
 | 
			
		||||
10.251.37.0/24
 | 
			
		||||
10.251.38.0/24
 | 
			
		||||
10.251.39.0/24
 | 
			
		||||
10.251.40.0/24
 | 
			
		||||
							
								
								
									
										5
									
								
								CMDB/zenossScan.sh
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										5
									
								
								CMDB/zenossScan.sh
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,5 @@
 | 
			
		||||
#!/bin/bash
 | 
			
		||||
for subnet in $(cat subnets); do
 | 
			
		||||
zendisc run --now --monitor localhost --deviceclass /Discovered --parallel 8 --net $subnet
 | 
			
		||||
done
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										5
									
								
								README
									
									
									
									
									
										
										
										Normal file → Executable file
									
								
							
							
						
						
									
										5
									
								
								README
									
									
									
									
									
										
										
										Normal file → Executable file
									
								
							@@ -1 +1,4 @@
 | 
			
		||||
Hello world
 | 
			
		||||
 | 
			
		||||
System stuff.
 | 
			
		||||
 | 
			
		||||
More details added later, till then figure it the fuck out yourself!
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										70
									
								
								TODO.TXT
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										70
									
								
								TODO.TXT
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,70 @@
 | 
			
		||||
#############################################################
 | 
			
		||||
Core services (BLM/S backups, logging, monitoring, security)
 | 
			
		||||
#############################################################
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
####
 | 
			
		||||
1) Logging backend
 | 
			
		||||
####
 | 
			
		||||
 | 
			
		||||
Setup stratum 1/2 NTP at SATX
 | 
			
		||||
Setup stratum 2 NTP at OVH
 | 
			
		||||
Fix time zones everywhere to CST
 | 
			
		||||
Setup security onion
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
6) Backups and storage
 | 
			
		||||
* Audit overall backup strategy
 | 
			
		||||
 
 | 
			
		||||
   Finish setup of ZFS at satx
 | 
			
		||||
    ZFS caching
 | 
			
		||||
Before cache usb:
 | 
			
		||||
root@ausprod-linsrv:~/envmon/temper-python# ls /dev/disk/by-id/
 | 
			
		||||
ata-HL-DT-ST_DVD+_-RW_GSA-H73N              ata-WDC_WD10JMVW-11AJGS3_WD-WX51AB339130        ata-WDC_WD10JMVW-11AJGS3_WD-WX61A759LES4-part1  wwn-0x50014ee65b4b1bfd
 | 
			
		||||
ata-PLDS_DVD-ROM_DH-16D2S                   ata-WDC_WD10JMVW-11AJGS3_WD-WX51AB339130-part1  wwn-0x50014ee65979b8c3                          wwn-0x50014ee65b4b1bfd-part1
 | 
			
		||||
ata-SanDisk_SDSSDRC032G_151115401425        ata-WDC_WD10JMVW-11AJGS3_WD-WX51AB339130-part9  wwn-0x50014ee65979b8c3-part1                    wwn-0x5001b44e3ac304d1
 | 
			
		||||
ata-SanDisk_SDSSDRC032G_151115401425-part1  ata-WDC_WD10JMVW-11AJGS3_WD-WX61A759LES4        wwn-0x50014ee65979b8c3-part9                    wwn-0x5001b44e3ac304d1-part1
 | 
			
		||||
root@ausprod-linsrv:~/envmon/temper-python#
 | 
			
		||||
 | 
			
		||||
After cache usb:
 | 
			
		||||
root@ausprod-linsrv:~/envmon/temper-python# ls /dev/disk/by-id
 | 
			
		||||
ata-HL-DT-ST_DVD+_-RW_GSA-H73N              ata-WDC_WD10JMVW-11AJGS3_WD-WX51AB339130-part1  usb-MONSTER_USB_2.0_621AE5C7-0:0-part1       wwn-0x50014ee65979b8c3-part1  wwn-0x5001b44e3ac304d1-part1
 | 
			
		||||
ata-PLDS_DVD-ROM_DH-16D2S                   ata-WDC_WD10JMVW-11AJGS3_WD-WX51AB339130-part9  usb-MONSTER_USB_2.0_FBZXXXXXXQJBR-0:0        wwn-0x50014ee65979b8c3-part9
 | 
			
		||||
ata-SanDisk_SDSSDRC032G_151115401425        ata-WDC_WD10JMVW-11AJGS3_WD-WX61A759LES4        usb-MONSTER_USB_2.0_FBZXXXXXXQJBR-0:0-part1  wwn-0x50014ee65b4b1bfd
 | 
			
		||||
ata-SanDisk_SDSSDRC032G_151115401425-part1  ata-WDC_WD10JMVW-11AJGS3_WD-WX61A759LES4-part1  usb-MONSTER_USB_2.0_FBZXXXXXXQJBR-0:0-part2  wwn-0x50014ee65b4b1bfd-part1
 | 
			
		||||
ata-WDC_WD10JMVW-11AJGS3_WD-WX51AB339130    usb-MONSTER_USB_2.0_621AE5C7-0:0                wwn-0x50014ee65979b8c3                       wwn-0x5001b44e3ac304d1
 | 
			
		||||
r-----------------------
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
Finish technical infrastructure:
 | 
			
		||||
Finish backup setup
 | 
			
		||||
		ovh replication automation to rsync.net
 | 
			
		||||
		linux lab server 
 | 
			
		||||
				zfs on usb drive
 | 
			
		||||
				snapshot/replicate to rsync.net
 | 
			
		||||
		Finalize laptop data cleanup/backup
 | 
			
		||||
 | 
			
		||||
Finish monitoring setup
 | 
			
		||||
		Zenoss
 | 
			
		||||
		OVH
 | 
			
		||||
 | 
			
		||||
Security - full lockdown / baseline
 | 
			
		||||
===Pen test===
 | 
			
		||||
http://resources.infosecinstitute.com/pentesting-distributions-and-installer-kits-for-your-raspberry-pi/
 | 
			
		||||
	Setup all jimmyraypurser blog post security tools
 | 
			
		||||
	Setup metasploit/armitage/openvas
 | 
			
		||||
	Setup warvox
 | 
			
		||||
 | 
			
		||||
===Setup PIV using CA===
 | 
			
		||||
https://technet.microsoft.com/en-us/library/ff829847(v=ws.10).aspx
 | 
			
		||||
https://www.nsa.gov/ia/programs/suiteb_cryptography/index.shtml
 | 
			
		||||
http://sourceforge.net/projects/opensc/files/OpenSC/opensc-0.14.0/
 | 
			
		||||
https://technet.microsoft.com/en-us/library/
 | 
			
		||||
http://blogs.technet.com/b/pki/archive/2012/03/14/hspd-12-logical-access-authentication-and-2008-active-directory-domains-on-download-center.aspx
 | 
			
		||||
 | 
			
		||||
https://github.com/dejavusecurity/OutlookPrivacyPlugin
 | 
			
		||||
https://blog.josefsson.org/2014/06/23/offline-gnupg-master-key-and-subkeys-on-yubikey-neo-smartcard/
 | 
			
		||||
http://blog.mailgun.com/security-guide-basic-infrastructure-security/
 | 
			
		||||
http://viccuad.me/blog/secure-yourself-part-1-airgapped-computer-and-GPG-smartcards
 | 
			
		||||
https://trmm.net/Yubikey
 | 
			
		||||
							
								
								
									
										293
									
								
								bare-metal/interfaces-fnfDedi
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										293
									
								
								bare-metal/interfaces-fnfDedi
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,293 @@
 | 
			
		||||
#This file is fairly long and complex. Don't change it unless you know what you are doing. 
 | 
			
		||||
#And if you aren't Charles Wyble, you don't know what your doing in this context. Trust me.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# The loopback network interface
 | 
			
		||||
auto lo
 | 
			
		||||
iface lo inet loopback
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#First we create the bonded interfaces for high availabilty:
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
###########################################################################################
 | 
			
		||||
#First bond here (eth0/1 ha pair)
 | 
			
		||||
###########################################################################################
 | 
			
		||||
 | 
			
		||||
auto eth0
 | 
			
		||||
	allow-bond0 eth0
 | 
			
		||||
 | 
			
		||||
iface eth0 inet manual
 | 
			
		||||
	bond-master bond0
 | 
			
		||||
 | 
			
		||||
auto eth1
 | 
			
		||||
	allow-bond0 eth1
 | 
			
		||||
 | 
			
		||||
iface eth1 inet manual
 | 
			
		||||
	bond-master bond0
 | 
			
		||||
 | 
			
		||||
auto bond0
 | 
			
		||||
iface bond0 inet manual
 | 
			
		||||
	post-up ifconfig $IFACE up
 | 
			
		||||
	pre-down ifconfig $IFACE down
 | 
			
		||||
	bond-slaves none
 | 
			
		||||
	bond-mode active-backup
 | 
			
		||||
	bond-miimon 100
 | 
			
		||||
	bond-downdelay 200
 | 
			
		||||
	bond-updelay 100
 | 
			
		||||
	dns-nameservers 208.67.222.222 208.67.220.220
 | 
			
		||||
 | 
			
		||||
###########################################################################################
 | 
			
		||||
#Second bond here (eth2/3 ha pair)
 | 
			
		||||
###########################################################################################
 | 
			
		||||
 | 
			
		||||
auto eth2
 | 
			
		||||
	allow-bond1 eth2
 | 
			
		||||
 | 
			
		||||
iface eth2 inet manual
 | 
			
		||||
	bond-master bond1
 | 
			
		||||
 | 
			
		||||
auto eth3
 | 
			
		||||
	allow-bond1 eth3
 | 
			
		||||
 | 
			
		||||
iface eth3 inet manual
 | 
			
		||||
	bond-master bond1
 | 
			
		||||
 | 
			
		||||
auto bond1
 | 
			
		||||
 | 
			
		||||
iface bond1 inet manual
 | 
			
		||||
	post-up ifconfig $IFACE up
 | 
			
		||||
	pre-down ifconfig $IFACE down
 | 
			
		||||
	bond-slaves none
 | 
			
		||||
	bond-mode active-backup
 | 
			
		||||
	bond-miimon 100
 | 
			
		||||
	bond-downdelay 200
 | 
			
		||||
	bond-updelay 100
 | 
			
		||||
	dns-nameservers 208.67.222.222 208.67.220.220
 | 
			
		||||
 | 
			
		||||
###########################################################################################
 | 
			
		||||
#Interface defintions								   	  #
 | 
			
		||||
###########################################################################################
 | 
			
		||||
 | 
			
		||||
###########################################################################################
 | 
			
		||||
#Backend MGMT interface (used for overall management network, physical devices)		  #
 | 
			
		||||
###########################################################################################
 | 
			
		||||
auto bond0.2
 | 
			
		||||
	iface bond0.2 inet manual
 | 
			
		||||
	post-up ifconfig $IFACE up
 | 
			
		||||
	pre-down ifconfig $IFACE down
 | 
			
		||||
	vlan-raw-device bond0
 | 
			
		||||
 | 
			
		||||
auto br2
 | 
			
		||||
iface br2 inet static
 | 
			
		||||
	address 10.250.2.3
 | 
			
		||||
	netmask 255.255.255.0
 | 
			
		||||
	gateway 10.250.2.1
 | 
			
		||||
	bridge_ports bond0.2
 | 
			
		||||
	bridge_stp off
 | 
			
		||||
	bridge_fd 0
 | 
			
		||||
	bridge_maxwait 0
 | 
			
		||||
 | 
			
		||||
###########################################################################################
 | 
			
		||||
#Backend FNF interface (used for FNF management network). For now all virtual machines    #
 | 
			
		||||
###########################################################################################
 | 
			
		||||
auto bond0.4
 | 
			
		||||
	iface bond0.4 inet manual
 | 
			
		||||
	post-up ifconfig $IFACE up
 | 
			
		||||
	pre-down ifconfig $IFACE down
 | 
			
		||||
	vlan-raw-device bond0
 | 
			
		||||
 | 
			
		||||
auto br4
 | 
			
		||||
iface br4 inet static
 | 
			
		||||
	address 10.250.4.3
 | 
			
		||||
	netmask 255.255.255.0
 | 
			
		||||
	gateway 10.250.4.1
 | 
			
		||||
	bridge_ports bond0.4
 | 
			
		||||
	bridge_stp off
 | 
			
		||||
	bridge_fd 0
 | 
			
		||||
	bridge_maxwait 0
 | 
			
		||||
 | 
			
		||||
###########################################################################################
 | 
			
		||||
#Frontend FNF interface (used for internet traffic)					  #
 | 
			
		||||
###########################################################################################
 | 
			
		||||
auto bond1.5
 | 
			
		||||
	iface bond1.5 inet manual
 | 
			
		||||
	post-up ifconfig $IFACE up
 | 
			
		||||
	pre-down ifconfig $IFACE down
 | 
			
		||||
	vlan-raw-device bond1
 | 
			
		||||
 | 
			
		||||
auto br5
 | 
			
		||||
iface br5 inet static
 | 
			
		||||
	address 10.250.5.3
 | 
			
		||||
	netmask 255.255.255.0
 | 
			
		||||
	gateway 10.250.5.1
 | 
			
		||||
	bridge_ports bond1.5
 | 
			
		||||
	bridge_stp off
 | 
			
		||||
	bridge_fd 0
 | 
			
		||||
	bridge_maxwait 0
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
###########################################################################################
 | 
			
		||||
#Backend infra interface (used for shared infra services like DNS)
 | 
			
		||||
###########################################################################################
 | 
			
		||||
auto bond0.6
 | 
			
		||||
	iface bond0.6 inet manual
 | 
			
		||||
	post-up ifconfig $IFACE up
 | 
			
		||||
	pre-down ifconfig $IFACE down
 | 
			
		||||
	vlan-raw-device bond0
 | 
			
		||||
 | 
			
		||||
auto br6
 | 
			
		||||
iface br6 inet static
 | 
			
		||||
	address 10.250.6.3
 | 
			
		||||
	netmask 255.255.255.0
 | 
			
		||||
	gateway 10.250.6.1
 | 
			
		||||
	bridge_ports bond0.6
 | 
			
		||||
	bridge_stp off
 | 
			
		||||
	bridge_fd 0
 | 
			
		||||
	bridge_maxwait 0
 | 
			
		||||
 | 
			
		||||
###########################################################################################
 | 
			
		||||
#Backend www interface (used for www management network)				  #
 | 
			
		||||
###########################################################################################
 | 
			
		||||
auto bond0.8
 | 
			
		||||
        iface bond0.8 inet manual
 | 
			
		||||
        post-up ifconfig $IFACE up
 | 
			
		||||
        pre-down ifconfig $IFACE down
 | 
			
		||||
        vlan-raw-device bond0
 | 
			
		||||
 | 
			
		||||
auto br8
 | 
			
		||||
iface br8 inet static
 | 
			
		||||
        address 10.250.8.3
 | 
			
		||||
        netmask 255.255.255.0
 | 
			
		||||
        gateway 10.250.8.1
 | 
			
		||||
        bridge_ports bond0.8
 | 
			
		||||
        bridge_stp off
 | 
			
		||||
        bridge_fd 0
 | 
			
		||||
        bridge_maxwait 0
 | 
			
		||||
 | 
			
		||||
###########################################################################################
 | 
			
		||||
#Frontend www interface (used for www external network)					  #
 | 
			
		||||
###########################################################################################
 | 
			
		||||
 | 
			
		||||
auto bond1.9
 | 
			
		||||
        iface bond1.9 inet manual
 | 
			
		||||
        post-up ifconfig $IFACE up
 | 
			
		||||
        pre-down ifconfig $IFACE down
 | 
			
		||||
        vlan-raw-device bond1
 | 
			
		||||
 | 
			
		||||
auto br9
 | 
			
		||||
iface br9 inet static
 | 
			
		||||
        address 10.250.9.3
 | 
			
		||||
        netmask 255.255.255.0
 | 
			
		||||
        gateway 10.250.9.1
 | 
			
		||||
        bridge_ports bond1.9
 | 
			
		||||
        bridge_stp off
 | 
			
		||||
        bridge_fd 0
 | 
			
		||||
        bridge_maxwait 0
 | 
			
		||||
 | 
			
		||||
###########################################################################################
 | 
			
		||||
#IMW backend interface 									  #
 | 
			
		||||
###########################################################################################
 | 
			
		||||
 | 
			
		||||
auto bond0.54
 | 
			
		||||
        iface bond0.54 inet manual
 | 
			
		||||
        post-up ifconfig $IFACE up
 | 
			
		||||
        pre-down ifconfig $IFACE down
 | 
			
		||||
        vlan-raw-device bond1
 | 
			
		||||
 | 
			
		||||
auto br54
 | 
			
		||||
iface br54 inet static
 | 
			
		||||
        address 10.250.54.3
 | 
			
		||||
        netmask 255.255.255.0
 | 
			
		||||
        gateway 10.250.54.1
 | 
			
		||||
        bridge_ports bond0.54
 | 
			
		||||
        bridge_stp off
 | 
			
		||||
        bridge_fd 0
 | 
			
		||||
 | 
			
		||||
###########################################################################################
 | 
			
		||||
#AutoTunnel interfaces	 								  #
 | 
			
		||||
###########################################################################################
 | 
			
		||||
 | 
			
		||||
#Management
 | 
			
		||||
auto bond0.88
 | 
			
		||||
        iface bond0.88 inet manual
 | 
			
		||||
        post-up ifconfig $IFACE up
 | 
			
		||||
        pre-down ifconfig $IFACE down
 | 
			
		||||
        vlan-raw-device bond1
 | 
			
		||||
 | 
			
		||||
auto br88
 | 
			
		||||
iface br88 inet static
 | 
			
		||||
        address 10.250.88.3
 | 
			
		||||
        netmask 255.255.255.0
 | 
			
		||||
        gateway 10.250.88.1
 | 
			
		||||
        bridge_ports bond0.88
 | 
			
		||||
        bridge_stp off
 | 
			
		||||
        bridge_fd 0
 | 
			
		||||
 | 
			
		||||
#Inline
 | 
			
		||||
auto bond0.89
 | 
			
		||||
        iface bond0.89 inet manual
 | 
			
		||||
        post-up ifconfig $IFACE up
 | 
			
		||||
        pre-down ifconfig $IFACE down
 | 
			
		||||
        vlan-raw-device bond1
 | 
			
		||||
 | 
			
		||||
auto br89
 | 
			
		||||
iface br89 inet static
 | 
			
		||||
        address 10.250.89.3
 | 
			
		||||
        netmask 255.255.255.0
 | 
			
		||||
        gateway 10.250.89.1
 | 
			
		||||
        bridge_ports bond0.89
 | 
			
		||||
        bridge_stp off
 | 
			
		||||
        bridge_fd 0
 | 
			
		||||
 | 
			
		||||
#Isolation
 | 
			
		||||
auto bond0.90
 | 
			
		||||
        iface bond0.90 inet manual
 | 
			
		||||
        post-up ifconfig $IFACE up
 | 
			
		||||
        pre-down ifconfig $IFACE down
 | 
			
		||||
        vlan-raw-device bond1
 | 
			
		||||
 | 
			
		||||
auto br90
 | 
			
		||||
iface br90 inet static
 | 
			
		||||
        address 10.250.90.3
 | 
			
		||||
        netmask 255.255.255.0
 | 
			
		||||
        gateway 10.250.90.1
 | 
			
		||||
        bridge_ports bond0.90
 | 
			
		||||
        bridge_stp off
 | 
			
		||||
        bridge_fd 0
 | 
			
		||||
 | 
			
		||||
#Registration
 | 
			
		||||
auto bond0.91
 | 
			
		||||
        iface bond0.91 inet manual
 | 
			
		||||
        post-up ifconfig $IFACE up
 | 
			
		||||
        pre-down ifconfig $IFACE down
 | 
			
		||||
        vlan-raw-device bond1
 | 
			
		||||
 | 
			
		||||
auto br91
 | 
			
		||||
iface br91 inet static
 | 
			
		||||
        address 10.250.91.3
 | 
			
		||||
        netmask 255.255.255.0
 | 
			
		||||
        gateway 10.250.91.1
 | 
			
		||||
        bridge_ports bond0.91
 | 
			
		||||
        bridge_stp off
 | 
			
		||||
        bridge_fd 0
 | 
			
		||||
 | 
			
		||||
###########################################################################################
 | 
			
		||||
#KNEL backend interface 								  #
 | 
			
		||||
###########################################################################################
 | 
			
		||||
 | 
			
		||||
auto bond0.24
 | 
			
		||||
        iface bond0.24 inet manual
 | 
			
		||||
        post-up ifconfig $IFACE up
 | 
			
		||||
        pre-down ifconfig $IFACE down
 | 
			
		||||
        vlan-raw-device bond0
 | 
			
		||||
 | 
			
		||||
auto br24
 | 
			
		||||
iface br24 inet static
 | 
			
		||||
        address 10.250.24.3
 | 
			
		||||
        netmask 255.255.255.0
 | 
			
		||||
        gateway 10.250.24.1
 | 
			
		||||
        bridge_ports bond0.24
 | 
			
		||||
        bridge_stp off
 | 
			
		||||
        bridge_fd 0
 | 
			
		||||
        bridge_maxwait 0
 | 
			
		||||
							
								
								
									
										169
									
								
								bare-metal/interfaces-tsysDedi
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										169
									
								
								bare-metal/interfaces-tsysDedi
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,169 @@
 | 
			
		||||
# This file describes the network interfaces available on your system
 | 
			
		||||
# and how to activate them. For more information, see interfaces(5).
 | 
			
		||||
 | 
			
		||||
# The loopback network interface
 | 
			
		||||
auto lo
 | 
			
		||||
iface lo inet loopback
 | 
			
		||||
 | 
			
		||||
auto eth0
 | 
			
		||||
iface eth0 inet manual
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
##########################################################################
 | 
			
		||||
#WAN bridge - non ovs, physical interface
 | 
			
		||||
##########################################################################
 | 
			
		||||
auto brWan
 | 
			
		||||
iface brWan inet static
 | 
			
		||||
	address 158.69.225.97
 | 
			
		||||
	netmask 255.255.255.0
 | 
			
		||||
	network 158.69.225.0
 | 
			
		||||
	broadcast 158.69.225.255
 | 
			
		||||
	gateway 158.69.225.254
 | 
			
		||||
        bridge_ports eth0
 | 
			
		||||
        bridge_stp off
 | 
			
		||||
        bridge_fd 0
 | 
			
		||||
        bridge_hello 2
 | 
			
		||||
        bridge_maxage 12
 | 
			
		||||
 | 
			
		||||
#Routing network
 | 
			
		||||
#10.253.0.0/24
 | 
			
		||||
 | 
			
		||||
#No VLAN1 obviously, what do you think this is? A holiday inn?
 | 
			
		||||
 | 
			
		||||
##########################################################################
 | 
			
		||||
#bare metal net  vlan2 goes nowhere just provides isolation
 | 
			
		||||
##########################################################################
 | 
			
		||||
auto baremetal
 | 
			
		||||
allow-ovs baremetal
 | 
			
		||||
iface baremetal inet static
 | 
			
		||||
    address 10.253.44.2
 | 
			
		||||
    netmask 255.255.255.0
 | 
			
		||||
    ovs_type OVSBridge
 | 
			
		||||
    ovs_ports vlan2
 | 
			
		||||
 | 
			
		||||
allow-baremetal vlan2
 | 
			
		||||
iface vlan2 inet manual
 | 
			
		||||
    ovs_bridge baremetal
 | 
			
		||||
    ovs_type OVSIntPort
 | 
			
		||||
    ovs_options tag=2
 | 
			
		||||
 | 
			
		||||
##########################################################################
 | 
			
		||||
#mgmt net vlan3
 | 
			
		||||
##########################################################################
 | 
			
		||||
auto mgmt
 | 
			
		||||
allow-ovs mgmt
 | 
			
		||||
iface mgmt inet static
 | 
			
		||||
    address 10.253.3.2
 | 
			
		||||
    netmask 255.255.255.0
 | 
			
		||||
    ovs_type OVSBridge
 | 
			
		||||
    ovs_ports vlan3
 | 
			
		||||
 | 
			
		||||
allow-mgmt vlan3
 | 
			
		||||
iface vlan3 inet manual
 | 
			
		||||
    ovs_bridge mgmt
 | 
			
		||||
    ovs_type OVSIntPort
 | 
			
		||||
    ovs_options tag=3
 | 
			
		||||
 | 
			
		||||
##########################################################################
 | 
			
		||||
#asn2net net vlan4
 | 
			
		||||
##########################################################################
 | 
			
		||||
auto asn2net
 | 
			
		||||
allow-ovs asn2net
 | 
			
		||||
iface asn2net inet static
 | 
			
		||||
    address 10.253.4.2
 | 
			
		||||
    netmask 255.255.255.0
 | 
			
		||||
    ovs_type OVSBridge
 | 
			
		||||
    ovs_ports vlan4
 | 
			
		||||
 | 
			
		||||
allow-asn2net vlan4
 | 
			
		||||
iface vlan4 inet manual
 | 
			
		||||
    ovs_bridge asn2net
 | 
			
		||||
    ovs_type OVSIntPort
 | 
			
		||||
    ovs_options tag=4
 | 
			
		||||
 | 
			
		||||
##########################################################################
 | 
			
		||||
#S2l net vlan5
 | 
			
		||||
##########################################################################
 | 
			
		||||
auto s2l
 | 
			
		||||
allow-ovs s2l
 | 
			
		||||
iface s2l inet static
 | 
			
		||||
    address 10.253.5.2
 | 
			
		||||
    netmask 255.255.255.0
 | 
			
		||||
    ovs_type OVSBridge
 | 
			
		||||
    ovs_ports vlan5
 | 
			
		||||
 | 
			
		||||
allow-s2l vlan5
 | 
			
		||||
iface vlan5 inet manual
 | 
			
		||||
    ovs_bridge s2l
 | 
			
		||||
    ovs_type OVSIntPort
 | 
			
		||||
    ovs_options tag=5
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
##########################################################################
 | 
			
		||||
#rackrental net vlan6
 | 
			
		||||
##########################################################################
 | 
			
		||||
auto rackrental
 | 
			
		||||
allow-ovs rackrental
 | 
			
		||||
iface rackrental inet static
 | 
			
		||||
    address 10.253.6.2
 | 
			
		||||
    netmask 255.255.255.0
 | 
			
		||||
    ovs_type OVSBridge
 | 
			
		||||
    ovs_ports vlan6
 | 
			
		||||
 | 
			
		||||
allow-rackrental vlan6
 | 
			
		||||
iface vlan6 inet manual
 | 
			
		||||
    ovs_bridge rackrental
 | 
			
		||||
    ovs_type OVSIntPort
 | 
			
		||||
    ovs_options tag=6
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
##########################################################################
 | 
			
		||||
#fnf net vlan7
 | 
			
		||||
##########################################################################
 | 
			
		||||
auto fnf
 | 
			
		||||
allow-ovs fnf
 | 
			
		||||
iface fnf inet static
 | 
			
		||||
    address 10.253.7.2
 | 
			
		||||
    netmask 255.255.255.0
 | 
			
		||||
    ovs_type OVSBridge
 | 
			
		||||
    ovs_ports vlan7
 | 
			
		||||
 | 
			
		||||
allow-fnf vlan7
 | 
			
		||||
iface vlan7 inet manual
 | 
			
		||||
    ovs_bridge fnf
 | 
			
		||||
    ovs_type OVSIntPort
 | 
			
		||||
    ovs_options tag=7
 | 
			
		||||
 | 
			
		||||
##########################################################################
 | 
			
		||||
#knel net vlan8
 | 
			
		||||
##########################################################################
 | 
			
		||||
auto knel
 | 
			
		||||
allow-ovs knel
 | 
			
		||||
iface knel inet static
 | 
			
		||||
    address 10.253.8.2
 | 
			
		||||
    netmask 255.255.255.0
 | 
			
		||||
    ovs_type OVSBridge
 | 
			
		||||
    ovs_ports vlan8
 | 
			
		||||
 | 
			
		||||
allow-knel vlan8
 | 
			
		||||
iface vlan8 inet manual
 | 
			
		||||
    ovs_bridge knel
 | 
			
		||||
    ovs_type OVSIntPort
 | 
			
		||||
    ovs_options tag=8
 | 
			
		||||
 | 
			
		||||
##########################################################################
 | 
			
		||||
#tsys net vlan9
 | 
			
		||||
##########################################################################
 | 
			
		||||
auto tsys
 | 
			
		||||
allow-ovs tsys
 | 
			
		||||
iface tsys inet static
 | 
			
		||||
    address 10.253.9.2
 | 
			
		||||
    netmask 255.255.255.0
 | 
			
		||||
    ovs_type OVSBridge
 | 
			
		||||
    ovs_ports vlan9
 | 
			
		||||
 | 
			
		||||
allow-tsys vlan9
 | 
			
		||||
iface vlan9 inet manual
 | 
			
		||||
    ovs_bridge tsys
 | 
			
		||||
    ovs_type OVSIntPort
 | 
			
		||||
    ovs_options tag=9
 | 
			
		||||
							
								
								
									
										674
									
								
								lab/LICENSE
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										674
									
								
								lab/LICENSE
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,674 @@
 | 
			
		||||
GNU GENERAL PUBLIC LICENSE
 | 
			
		||||
                       Version 3, 29 June 2007
 | 
			
		||||
 | 
			
		||||
 Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
 | 
			
		||||
 Everyone is permitted to copy and distribute verbatim copies
 | 
			
		||||
 of this license document, but changing it is not allowed.
 | 
			
		||||
 | 
			
		||||
                            Preamble
 | 
			
		||||
 | 
			
		||||
  The GNU General Public License is a free, copyleft license for
 | 
			
		||||
software and other kinds of works.
 | 
			
		||||
 | 
			
		||||
  The licenses for most software and other practical works are designed
 | 
			
		||||
to take away your freedom to share and change the works.  By contrast,
 | 
			
		||||
the GNU General Public License is intended to guarantee your freedom to
 | 
			
		||||
share and change all versions of a program--to make sure it remains free
 | 
			
		||||
software for all its users.  We, the Free Software Foundation, use the
 | 
			
		||||
GNU General Public License for most of our software; it applies also to
 | 
			
		||||
any other work released this way by its authors.  You can apply it to
 | 
			
		||||
your programs, too.
 | 
			
		||||
 | 
			
		||||
  When we speak of free software, we are referring to freedom, not
 | 
			
		||||
price.  Our General Public Licenses are designed to make sure that you
 | 
			
		||||
have the freedom to distribute copies of free software (and charge for
 | 
			
		||||
them if you wish), that you receive source code or can get it if you
 | 
			
		||||
want it, that you can change the software or use pieces of it in new
 | 
			
		||||
free programs, and that you know you can do these things.
 | 
			
		||||
 | 
			
		||||
  To protect your rights, we need to prevent others from denying you
 | 
			
		||||
these rights or asking you to surrender the rights.  Therefore, you have
 | 
			
		||||
certain responsibilities if you distribute copies of the software, or if
 | 
			
		||||
you modify it: responsibilities to respect the freedom of others.
 | 
			
		||||
 | 
			
		||||
  For example, if you distribute copies of such a program, whether
 | 
			
		||||
gratis or for a fee, you must pass on to the recipients the same
 | 
			
		||||
freedoms that you received.  You must make sure that they, too, receive
 | 
			
		||||
or can get the source code.  And you must show them these terms so they
 | 
			
		||||
know their rights.
 | 
			
		||||
 | 
			
		||||
  Developers that use the GNU GPL protect your rights with two steps:
 | 
			
		||||
(1) assert copyright on the software, and (2) offer you this License
 | 
			
		||||
giving you legal permission to copy, distribute and/or modify it.
 | 
			
		||||
 | 
			
		||||
  For the developers' and authors' protection, the GPL clearly explains
 | 
			
		||||
that there is no warranty for this free software.  For both users' and
 | 
			
		||||
authors' sake, the GPL requires that modified versions be marked as
 | 
			
		||||
changed, so that their problems will not be attributed erroneously to
 | 
			
		||||
authors of previous versions.
 | 
			
		||||
 | 
			
		||||
  Some devices are designed to deny users access to install or run
 | 
			
		||||
modified versions of the software inside them, although the manufacturer
 | 
			
		||||
can do so.  This is fundamentally incompatible with the aim of
 | 
			
		||||
protecting users' freedom to change the software.  The systematic
 | 
			
		||||
pattern of such abuse occurs in the area of products for individuals to
 | 
			
		||||
use, which is precisely where it is most unacceptable.  Therefore, we
 | 
			
		||||
have designed this version of the GPL to prohibit the practice for those
 | 
			
		||||
products.  If such problems arise substantially in other domains, we
 | 
			
		||||
stand ready to extend this provision to those domains in future versions
 | 
			
		||||
of the GPL, as needed to protect the freedom of users.
 | 
			
		||||
 | 
			
		||||
  Finally, every program is threatened constantly by software patents.
 | 
			
		||||
States should not allow patents to restrict development and use of
 | 
			
		||||
software on general-purpose computers, but in those that do, we wish to
 | 
			
		||||
avoid the special danger that patents applied to a free program could
 | 
			
		||||
make it effectively proprietary.  To prevent this, the GPL assures that
 | 
			
		||||
patents cannot be used to render the program non-free.
 | 
			
		||||
 | 
			
		||||
  The precise terms and conditions for copying, distribution and
 | 
			
		||||
modification follow.
 | 
			
		||||
 | 
			
		||||
                       TERMS AND CONDITIONS
 | 
			
		||||
 | 
			
		||||
  0. Definitions.
 | 
			
		||||
 | 
			
		||||
  "This License" refers to version 3 of the GNU General Public License.
 | 
			
		||||
 | 
			
		||||
  "Copyright" also means copyright-like laws that apply to other kinds of
 | 
			
		||||
works, such as semiconductor masks.
 | 
			
		||||
 | 
			
		||||
  "The Program" refers to any copyrightable work licensed under this
 | 
			
		||||
License.  Each licensee is addressed as "you".  "Licensees" and
 | 
			
		||||
"recipients" may be individuals or organizations.
 | 
			
		||||
 | 
			
		||||
  To "modify" a work means to copy from or adapt all or part of the work
 | 
			
		||||
in a fashion requiring copyright permission, other than the making of an
 | 
			
		||||
exact copy.  The resulting work is called a "modified version" of the
 | 
			
		||||
earlier work or a work "based on" the earlier work.
 | 
			
		||||
 | 
			
		||||
  A "covered work" means either the unmodified Program or a work based
 | 
			
		||||
on the Program.
 | 
			
		||||
 | 
			
		||||
  To "propagate" a work means to do anything with it that, without
 | 
			
		||||
permission, would make you directly or secondarily liable for
 | 
			
		||||
infringement under applicable copyright law, except executing it on a
 | 
			
		||||
computer or modifying a private copy.  Propagation includes copying,
 | 
			
		||||
distribution (with or without modification), making available to the
 | 
			
		||||
public, and in some countries other activities as well.
 | 
			
		||||
 | 
			
		||||
  To "convey" a work means any kind of propagation that enables other
 | 
			
		||||
parties to make or receive copies.  Mere interaction with a user through
 | 
			
		||||
a computer network, with no transfer of a copy, is not conveying.
 | 
			
		||||
 | 
			
		||||
  An interactive user interface displays "Appropriate Legal Notices"
 | 
			
		||||
to the extent that it includes a convenient and prominently visible
 | 
			
		||||
feature that (1) displays an appropriate copyright notice, and (2)
 | 
			
		||||
tells the user that there is no warranty for the work (except to the
 | 
			
		||||
extent that warranties are provided), that licensees may convey the
 | 
			
		||||
work under this License, and how to view a copy of this License.  If
 | 
			
		||||
the interface presents a list of user commands or options, such as a
 | 
			
		||||
menu, a prominent item in the list meets this criterion.
 | 
			
		||||
 | 
			
		||||
  1. Source Code.
 | 
			
		||||
 | 
			
		||||
  The "source code" for a work means the preferred form of the work
 | 
			
		||||
for making modifications to it.  "Object code" means any non-source
 | 
			
		||||
form of a work.
 | 
			
		||||
 | 
			
		||||
  A "Standard Interface" means an interface that either is an official
 | 
			
		||||
standard defined by a recognized standards body, or, in the case of
 | 
			
		||||
interfaces specified for a particular programming language, one that
 | 
			
		||||
is widely used among developers working in that language.
 | 
			
		||||
 | 
			
		||||
  The "System Libraries" of an executable work include anything, other
 | 
			
		||||
than the work as a whole, that (a) is included in the normal form of
 | 
			
		||||
packaging a Major Component, but which is not part of that Major
 | 
			
		||||
Component, and (b) serves only to enable use of the work with that
 | 
			
		||||
Major Component, or to implement a Standard Interface for which an
 | 
			
		||||
implementation is available to the public in source code form.  A
 | 
			
		||||
"Major Component", in this context, means a major essential component
 | 
			
		||||
(kernel, window system, and so on) of the specific operating system
 | 
			
		||||
(if any) on which the executable work runs, or a compiler used to
 | 
			
		||||
produce the work, or an object code interpreter used to run it.
 | 
			
		||||
 | 
			
		||||
  The "Corresponding Source" for a work in object code form means all
 | 
			
		||||
the source code needed to generate, install, and (for an executable
 | 
			
		||||
work) run the object code and to modify the work, including scripts to
 | 
			
		||||
control those activities.  However, it does not include the work's
 | 
			
		||||
System Libraries, or general-purpose tools or generally available free
 | 
			
		||||
programs which are used unmodified in performing those activities but
 | 
			
		||||
which are not part of the work.  For example, Corresponding Source
 | 
			
		||||
includes interface definition files associated with source files for
 | 
			
		||||
the work, and the source code for shared libraries and dynamically
 | 
			
		||||
linked subprograms that the work is specifically designed to require,
 | 
			
		||||
such as by intimate data communication or control flow between those
 | 
			
		||||
subprograms and other parts of the work.
 | 
			
		||||
 | 
			
		||||
  The Corresponding Source need not include anything that users
 | 
			
		||||
can regenerate automatically from other parts of the Corresponding
 | 
			
		||||
Source.
 | 
			
		||||
 | 
			
		||||
  The Corresponding Source for a work in source code form is that
 | 
			
		||||
same work.
 | 
			
		||||
 | 
			
		||||
  2. Basic Permissions.
 | 
			
		||||
 | 
			
		||||
  All rights granted under this License are granted for the term of
 | 
			
		||||
copyright on the Program, and are irrevocable provided the stated
 | 
			
		||||
conditions are met.  This License explicitly affirms your unlimited
 | 
			
		||||
permission to run the unmodified Program.  The output from running a
 | 
			
		||||
covered work is covered by this License only if the output, given its
 | 
			
		||||
content, constitutes a covered work.  This License acknowledges your
 | 
			
		||||
rights of fair use or other equivalent, as provided by copyright law.
 | 
			
		||||
 | 
			
		||||
  You may make, run and propagate covered works that you do not
 | 
			
		||||
convey, without conditions so long as your license otherwise remains
 | 
			
		||||
in force.  You may convey covered works to others for the sole purpose
 | 
			
		||||
of having them make modifications exclusively for you, or provide you
 | 
			
		||||
with facilities for running those works, provided that you comply with
 | 
			
		||||
the terms of this License in conveying all material for which you do
 | 
			
		||||
not control copyright.  Those thus making or running the covered works
 | 
			
		||||
for you must do so exclusively on your behalf, under your direction
 | 
			
		||||
and control, on terms that prohibit them from making any copies of
 | 
			
		||||
your copyrighted material outside their relationship with you.
 | 
			
		||||
 | 
			
		||||
  Conveying under any other circumstances is permitted solely under
 | 
			
		||||
the conditions stated below.  Sublicensing is not allowed; section 10
 | 
			
		||||
makes it unnecessary.
 | 
			
		||||
 | 
			
		||||
  3. Protecting Users' Legal Rights From Anti-Circumvention Law.
 | 
			
		||||
 | 
			
		||||
  No covered work shall be deemed part of an effective technological
 | 
			
		||||
measure under any applicable law fulfilling obligations under article
 | 
			
		||||
11 of the WIPO copyright treaty adopted on 20 December 1996, or
 | 
			
		||||
similar laws prohibiting or restricting circumvention of such
 | 
			
		||||
measures.
 | 
			
		||||
 | 
			
		||||
  When you convey a covered work, you waive any legal power to forbid
 | 
			
		||||
circumvention of technological measures to the extent such circumvention
 | 
			
		||||
is effected by exercising rights under this License with respect to
 | 
			
		||||
the covered work, and you disclaim any intention to limit operation or
 | 
			
		||||
modification of the work as a means of enforcing, against the work's
 | 
			
		||||
users, your or third parties' legal rights to forbid circumvention of
 | 
			
		||||
technological measures.
 | 
			
		||||
 | 
			
		||||
  4. Conveying Verbatim Copies.
 | 
			
		||||
 | 
			
		||||
  You may convey verbatim copies of the Program's source code as you
 | 
			
		||||
receive it, in any medium, provided that you conspicuously and
 | 
			
		||||
appropriately publish on each copy an appropriate copyright notice;
 | 
			
		||||
keep intact all notices stating that this License and any
 | 
			
		||||
non-permissive terms added in accord with section 7 apply to the code;
 | 
			
		||||
keep intact all notices of the absence of any warranty; and give all
 | 
			
		||||
recipients a copy of this License along with the Program.
 | 
			
		||||
 | 
			
		||||
  You may charge any price or no price for each copy that you convey,
 | 
			
		||||
and you may offer support or warranty protection for a fee.
 | 
			
		||||
 | 
			
		||||
  5. Conveying Modified Source Versions.
 | 
			
		||||
 | 
			
		||||
  You may convey a work based on the Program, or the modifications to
 | 
			
		||||
produce it from the Program, in the form of source code under the
 | 
			
		||||
terms of section 4, provided that you also meet all of these conditions:
 | 
			
		||||
 | 
			
		||||
    a) The work must carry prominent notices stating that you modified
 | 
			
		||||
    it, and giving a relevant date.
 | 
			
		||||
 | 
			
		||||
    b) The work must carry prominent notices stating that it is
 | 
			
		||||
    released under this License and any conditions added under section
 | 
			
		||||
    7.  This requirement modifies the requirement in section 4 to
 | 
			
		||||
    "keep intact all notices".
 | 
			
		||||
 | 
			
		||||
    c) You must license the entire work, as a whole, under this
 | 
			
		||||
    License to anyone who comes into possession of a copy.  This
 | 
			
		||||
    License will therefore apply, along with any applicable section 7
 | 
			
		||||
    additional terms, to the whole of the work, and all its parts,
 | 
			
		||||
    regardless of how they are packaged.  This License gives no
 | 
			
		||||
    permission to license the work in any other way, but it does not
 | 
			
		||||
    invalidate such permission if you have separately received it.
 | 
			
		||||
 | 
			
		||||
    d) If the work has interactive user interfaces, each must display
 | 
			
		||||
    Appropriate Legal Notices; however, if the Program has interactive
 | 
			
		||||
    interfaces that do not display Appropriate Legal Notices, your
 | 
			
		||||
    work need not make them do so.
 | 
			
		||||
 | 
			
		||||
  A compilation of a covered work with other separate and independent
 | 
			
		||||
works, which are not by their nature extensions of the covered work,
 | 
			
		||||
and which are not combined with it such as to form a larger program,
 | 
			
		||||
in or on a volume of a storage or distribution medium, is called an
 | 
			
		||||
"aggregate" if the compilation and its resulting copyright are not
 | 
			
		||||
used to limit the access or legal rights of the compilation's users
 | 
			
		||||
beyond what the individual works permit.  Inclusion of a covered work
 | 
			
		||||
in an aggregate does not cause this License to apply to the other
 | 
			
		||||
parts of the aggregate.
 | 
			
		||||
 | 
			
		||||
  6. Conveying Non-Source Forms.
 | 
			
		||||
 | 
			
		||||
  You may convey a covered work in object code form under the terms
 | 
			
		||||
of sections 4 and 5, provided that you also convey the
 | 
			
		||||
machine-readable Corresponding Source under the terms of this License,
 | 
			
		||||
in one of these ways:
 | 
			
		||||
 | 
			
		||||
    a) Convey the object code in, or embodied in, a physical product
 | 
			
		||||
    (including a physical distribution medium), accompanied by the
 | 
			
		||||
    Corresponding Source fixed on a durable physical medium
 | 
			
		||||
    customarily used for software interchange.
 | 
			
		||||
 | 
			
		||||
    b) Convey the object code in, or embodied in, a physical product
 | 
			
		||||
    (including a physical distribution medium), accompanied by a
 | 
			
		||||
    written offer, valid for at least three years and valid for as
 | 
			
		||||
    long as you offer spare parts or customer support for that product
 | 
			
		||||
    model, to give anyone who possesses the object code either (1) a
 | 
			
		||||
    copy of the Corresponding Source for all the software in the
 | 
			
		||||
    product that is covered by this License, on a durable physical
 | 
			
		||||
    medium customarily used for software interchange, for a price no
 | 
			
		||||
    more than your reasonable cost of physically performing this
 | 
			
		||||
    conveying of source, or (2) access to copy the
 | 
			
		||||
    Corresponding Source from a network server at no charge.
 | 
			
		||||
 | 
			
		||||
    c) Convey individual copies of the object code with a copy of the
 | 
			
		||||
    written offer to provide the Corresponding Source.  This
 | 
			
		||||
    alternative is allowed only occasionally and noncommercially, and
 | 
			
		||||
    only if you received the object code with such an offer, in accord
 | 
			
		||||
    with subsection 6b.
 | 
			
		||||
 | 
			
		||||
    d) Convey the object code by offering access from a designated
 | 
			
		||||
    place (gratis or for a charge), and offer equivalent access to the
 | 
			
		||||
    Corresponding Source in the same way through the same place at no
 | 
			
		||||
    further charge.  You need not require recipients to copy the
 | 
			
		||||
    Corresponding Source along with the object code.  If the place to
 | 
			
		||||
    copy the object code is a network server, the Corresponding Source
 | 
			
		||||
    may be on a different server (operated by you or a third party)
 | 
			
		||||
    that supports equivalent copying facilities, provided you maintain
 | 
			
		||||
    clear directions next to the object code saying where to find the
 | 
			
		||||
    Corresponding Source.  Regardless of what server hosts the
 | 
			
		||||
    Corresponding Source, you remain obligated to ensure that it is
 | 
			
		||||
    available for as long as needed to satisfy these requirements.
 | 
			
		||||
 | 
			
		||||
    e) Convey the object code using peer-to-peer transmission, provided
 | 
			
		||||
    you inform other peers where the object code and Corresponding
 | 
			
		||||
    Source of the work are being offered to the general public at no
 | 
			
		||||
    charge under subsection 6d.
 | 
			
		||||
 | 
			
		||||
  A separable portion of the object code, whose source code is excluded
 | 
			
		||||
from the Corresponding Source as a System Library, need not be
 | 
			
		||||
included in conveying the object code work.
 | 
			
		||||
 | 
			
		||||
  A "User Product" is either (1) a "consumer product", which means any
 | 
			
		||||
tangible personal property which is normally used for personal, family,
 | 
			
		||||
or household purposes, or (2) anything designed or sold for incorporation
 | 
			
		||||
into a dwelling.  In determining whether a product is a consumer product,
 | 
			
		||||
doubtful cases shall be resolved in favor of coverage.  For a particular
 | 
			
		||||
product received by a particular user, "normally used" refers to a
 | 
			
		||||
typical or common use of that class of product, regardless of the status
 | 
			
		||||
of the particular user or of the way in which the particular user
 | 
			
		||||
actually uses, or expects or is expected to use, the product.  A product
 | 
			
		||||
is a consumer product regardless of whether the product has substantial
 | 
			
		||||
commercial, industrial or non-consumer uses, unless such uses represent
 | 
			
		||||
the only significant mode of use of the product.
 | 
			
		||||
 | 
			
		||||
  "Installation Information" for a User Product means any methods,
 | 
			
		||||
procedures, authorization keys, or other information required to install
 | 
			
		||||
and execute modified versions of a covered work in that User Product from
 | 
			
		||||
a modified version of its Corresponding Source.  The information must
 | 
			
		||||
suffice to ensure that the continued functioning of the modified object
 | 
			
		||||
code is in no case prevented or interfered with solely because
 | 
			
		||||
modification has been made.
 | 
			
		||||
 | 
			
		||||
  If you convey an object code work under this section in, or with, or
 | 
			
		||||
specifically for use in, a User Product, and the conveying occurs as
 | 
			
		||||
part of a transaction in which the right of possession and use of the
 | 
			
		||||
User Product is transferred to the recipient in perpetuity or for a
 | 
			
		||||
fixed term (regardless of how the transaction is characterized), the
 | 
			
		||||
Corresponding Source conveyed under this section must be accompanied
 | 
			
		||||
by the Installation Information.  But this requirement does not apply
 | 
			
		||||
if neither you nor any third party retains the ability to install
 | 
			
		||||
modified object code on the User Product (for example, the work has
 | 
			
		||||
been installed in ROM).
 | 
			
		||||
 | 
			
		||||
  The requirement to provide Installation Information does not include a
 | 
			
		||||
requirement to continue to provide support service, warranty, or updates
 | 
			
		||||
for a work that has been modified or installed by the recipient, or for
 | 
			
		||||
the User Product in which it has been modified or installed.  Access to a
 | 
			
		||||
network may be denied when the modification itself materially and
 | 
			
		||||
adversely affects the operation of the network or violates the rules and
 | 
			
		||||
protocols for communication across the network.
 | 
			
		||||
 | 
			
		||||
  Corresponding Source conveyed, and Installation Information provided,
 | 
			
		||||
in accord with this section must be in a format that is publicly
 | 
			
		||||
documented (and with an implementation available to the public in
 | 
			
		||||
source code form), and must require no special password or key for
 | 
			
		||||
unpacking, reading or copying.
 | 
			
		||||
 | 
			
		||||
  7. Additional Terms.
 | 
			
		||||
 | 
			
		||||
  "Additional permissions" are terms that supplement the terms of this
 | 
			
		||||
License by making exceptions from one or more of its conditions.
 | 
			
		||||
Additional permissions that are applicable to the entire Program shall
 | 
			
		||||
be treated as though they were included in this License, to the extent
 | 
			
		||||
that they are valid under applicable law.  If additional permissions
 | 
			
		||||
apply only to part of the Program, that part may be used separately
 | 
			
		||||
under those permissions, but the entire Program remains governed by
 | 
			
		||||
this License without regard to the additional permissions.
 | 
			
		||||
 | 
			
		||||
  When you convey a copy of a covered work, you may at your option
 | 
			
		||||
remove any additional permissions from that copy, or from any part of
 | 
			
		||||
it.  (Additional permissions may be written to require their own
 | 
			
		||||
removal in certain cases when you modify the work.)  You may place
 | 
			
		||||
additional permissions on material, added by you to a covered work,
 | 
			
		||||
for which you have or can give appropriate copyright permission.
 | 
			
		||||
 | 
			
		||||
  Notwithstanding any other provision of this License, for material you
 | 
			
		||||
add to a covered work, you may (if authorized by the copyright holders of
 | 
			
		||||
that material) supplement the terms of this License with terms:
 | 
			
		||||
 | 
			
		||||
    a) Disclaiming warranty or limiting liability differently from the
 | 
			
		||||
    terms of sections 15 and 16 of this License; or
 | 
			
		||||
 | 
			
		||||
    b) Requiring preservation of specified reasonable legal notices or
 | 
			
		||||
    author attributions in that material or in the Appropriate Legal
 | 
			
		||||
    Notices displayed by works containing it; or
 | 
			
		||||
 | 
			
		||||
    c) Prohibiting misrepresentation of the origin of that material, or
 | 
			
		||||
    requiring that modified versions of such material be marked in
 | 
			
		||||
    reasonable ways as different from the original version; or
 | 
			
		||||
 | 
			
		||||
    d) Limiting the use for publicity purposes of names of licensors or
 | 
			
		||||
    authors of the material; or
 | 
			
		||||
 | 
			
		||||
    e) Declining to grant rights under trademark law for use of some
 | 
			
		||||
    trade names, trademarks, or service marks; or
 | 
			
		||||
 | 
			
		||||
    f) Requiring indemnification of licensors and authors of that
 | 
			
		||||
    material by anyone who conveys the material (or modified versions of
 | 
			
		||||
    it) with contractual assumptions of liability to the recipient, for
 | 
			
		||||
    any liability that these contractual assumptions directly impose on
 | 
			
		||||
    those licensors and authors.
 | 
			
		||||
 | 
			
		||||
  All other non-permissive additional terms are considered "further
 | 
			
		||||
restrictions" within the meaning of section 10.  If the Program as you
 | 
			
		||||
received it, or any part of it, contains a notice stating that it is
 | 
			
		||||
governed by this License along with a term that is a further
 | 
			
		||||
restriction, you may remove that term.  If a license document contains
 | 
			
		||||
a further restriction but permits relicensing or conveying under this
 | 
			
		||||
License, you may add to a covered work material governed by the terms
 | 
			
		||||
of that license document, provided that the further restriction does
 | 
			
		||||
not survive such relicensing or conveying.
 | 
			
		||||
 | 
			
		||||
  If you add terms to a covered work in accord with this section, you
 | 
			
		||||
must place, in the relevant source files, a statement of the
 | 
			
		||||
additional terms that apply to those files, or a notice indicating
 | 
			
		||||
where to find the applicable terms.
 | 
			
		||||
 | 
			
		||||
  Additional terms, permissive or non-permissive, may be stated in the
 | 
			
		||||
form of a separately written license, or stated as exceptions;
 | 
			
		||||
the above requirements apply either way.
 | 
			
		||||
 | 
			
		||||
  8. Termination.
 | 
			
		||||
 | 
			
		||||
  You may not propagate or modify a covered work except as expressly
 | 
			
		||||
provided under this License.  Any attempt otherwise to propagate or
 | 
			
		||||
modify it is void, and will automatically terminate your rights under
 | 
			
		||||
this License (including any patent licenses granted under the third
 | 
			
		||||
paragraph of section 11).
 | 
			
		||||
 | 
			
		||||
  However, if you cease all violation of this License, then your
 | 
			
		||||
license from a particular copyright holder is reinstated (a)
 | 
			
		||||
provisionally, unless and until the copyright holder explicitly and
 | 
			
		||||
finally terminates your license, and (b) permanently, if the copyright
 | 
			
		||||
holder fails to notify you of the violation by some reasonable means
 | 
			
		||||
prior to 60 days after the cessation.
 | 
			
		||||
 | 
			
		||||
  Moreover, your license from a particular copyright holder is
 | 
			
		||||
reinstated permanently if the copyright holder notifies you of the
 | 
			
		||||
violation by some reasonable means, this is the first time you have
 | 
			
		||||
received notice of violation of this License (for any work) from that
 | 
			
		||||
copyright holder, and you cure the violation prior to 30 days after
 | 
			
		||||
your receipt of the notice.
 | 
			
		||||
 | 
			
		||||
  Termination of your rights under this section does not terminate the
 | 
			
		||||
licenses of parties who have received copies or rights from you under
 | 
			
		||||
this License.  If your rights have been terminated and not permanently
 | 
			
		||||
reinstated, you do not qualify to receive new licenses for the same
 | 
			
		||||
material under section 10.
 | 
			
		||||
 | 
			
		||||
  9. Acceptance Not Required for Having Copies.
 | 
			
		||||
 | 
			
		||||
  You are not required to accept this License in order to receive or
 | 
			
		||||
run a copy of the Program.  Ancillary propagation of a covered work
 | 
			
		||||
occurring solely as a consequence of using peer-to-peer transmission
 | 
			
		||||
to receive a copy likewise does not require acceptance.  However,
 | 
			
		||||
nothing other than this License grants you permission to propagate or
 | 
			
		||||
modify any covered work.  These actions infringe copyright if you do
 | 
			
		||||
not accept this License.  Therefore, by modifying or propagating a
 | 
			
		||||
covered work, you indicate your acceptance of this License to do so.
 | 
			
		||||
 | 
			
		||||
  10. Automatic Licensing of Downstream Recipients.
 | 
			
		||||
 | 
			
		||||
  Each time you convey a covered work, the recipient automatically
 | 
			
		||||
receives a license from the original licensors, to run, modify and
 | 
			
		||||
propagate that work, subject to this License.  You are not responsible
 | 
			
		||||
for enforcing compliance by third parties with this License.
 | 
			
		||||
 | 
			
		||||
  An "entity transaction" is a transaction transferring control of an
 | 
			
		||||
organization, or substantially all assets of one, or subdividing an
 | 
			
		||||
organization, or merging organizations.  If propagation of a covered
 | 
			
		||||
work results from an entity transaction, each party to that
 | 
			
		||||
transaction who receives a copy of the work also receives whatever
 | 
			
		||||
licenses to the work the party's predecessor in interest had or could
 | 
			
		||||
give under the previous paragraph, plus a right to possession of the
 | 
			
		||||
Corresponding Source of the work from the predecessor in interest, if
 | 
			
		||||
the predecessor has it or can get it with reasonable efforts.
 | 
			
		||||
 | 
			
		||||
  You may not impose any further restrictions on the exercise of the
 | 
			
		||||
rights granted or affirmed under this License.  For example, you may
 | 
			
		||||
not impose a license fee, royalty, or other charge for exercise of
 | 
			
		||||
rights granted under this License, and you may not initiate litigation
 | 
			
		||||
(including a cross-claim or counterclaim in a lawsuit) alleging that
 | 
			
		||||
any patent claim is infringed by making, using, selling, offering for
 | 
			
		||||
sale, or importing the Program or any portion of it.
 | 
			
		||||
 | 
			
		||||
  11. Patents.
 | 
			
		||||
 | 
			
		||||
  A "contributor" is a copyright holder who authorizes use under this
 | 
			
		||||
License of the Program or a work on which the Program is based.  The
 | 
			
		||||
work thus licensed is called the contributor's "contributor version".
 | 
			
		||||
 | 
			
		||||
  A contributor's "essential patent claims" are all patent claims
 | 
			
		||||
owned or controlled by the contributor, whether already acquired or
 | 
			
		||||
hereafter acquired, that would be infringed by some manner, permitted
 | 
			
		||||
by this License, of making, using, or selling its contributor version,
 | 
			
		||||
but do not include claims that would be infringed only as a
 | 
			
		||||
consequence of further modification of the contributor version.  For
 | 
			
		||||
purposes of this definition, "control" includes the right to grant
 | 
			
		||||
patent sublicenses in a manner consistent with the requirements of
 | 
			
		||||
this License.
 | 
			
		||||
 | 
			
		||||
  Each contributor grants you a non-exclusive, worldwide, royalty-free
 | 
			
		||||
patent license under the contributor's essential patent claims, to
 | 
			
		||||
make, use, sell, offer for sale, import and otherwise run, modify and
 | 
			
		||||
propagate the contents of its contributor version.
 | 
			
		||||
 | 
			
		||||
  In the following three paragraphs, a "patent license" is any express
 | 
			
		||||
agreement or commitment, however denominated, not to enforce a patent
 | 
			
		||||
(such as an express permission to practice a patent or covenant not to
 | 
			
		||||
sue for patent infringement).  To "grant" such a patent license to a
 | 
			
		||||
party means to make such an agreement or commitment not to enforce a
 | 
			
		||||
patent against the party.
 | 
			
		||||
 | 
			
		||||
  If you convey a covered work, knowingly relying on a patent license,
 | 
			
		||||
and the Corresponding Source of the work is not available for anyone
 | 
			
		||||
to copy, free of charge and under the terms of this License, through a
 | 
			
		||||
publicly available network server or other readily accessible means,
 | 
			
		||||
then you must either (1) cause the Corresponding Source to be so
 | 
			
		||||
available, or (2) arrange to deprive yourself of the benefit of the
 | 
			
		||||
patent license for this particular work, or (3) arrange, in a manner
 | 
			
		||||
consistent with the requirements of this License, to extend the patent
 | 
			
		||||
license to downstream recipients.  "Knowingly relying" means you have
 | 
			
		||||
actual knowledge that, but for the patent license, your conveying the
 | 
			
		||||
covered work in a country, or your recipient's use of the covered work
 | 
			
		||||
in a country, would infringe one or more identifiable patents in that
 | 
			
		||||
country that you have reason to believe are valid.
 | 
			
		||||
 | 
			
		||||
  If, pursuant to or in connection with a single transaction or
 | 
			
		||||
arrangement, you convey, or propagate by procuring conveyance of, a
 | 
			
		||||
covered work, and grant a patent license to some of the parties
 | 
			
		||||
receiving the covered work authorizing them to use, propagate, modify
 | 
			
		||||
or convey a specific copy of the covered work, then the patent license
 | 
			
		||||
you grant is automatically extended to all recipients of the covered
 | 
			
		||||
work and works based on it.
 | 
			
		||||
 | 
			
		||||
  A patent license is "discriminatory" if it does not include within
 | 
			
		||||
the scope of its coverage, prohibits the exercise of, or is
 | 
			
		||||
conditioned on the non-exercise of one or more of the rights that are
 | 
			
		||||
specifically granted under this License.  You may not convey a covered
 | 
			
		||||
work if you are a party to an arrangement with a third party that is
 | 
			
		||||
in the business of distributing software, under which you make payment
 | 
			
		||||
to the third party based on the extent of your activity of conveying
 | 
			
		||||
the work, and under which the third party grants, to any of the
 | 
			
		||||
parties who would receive the covered work from you, a discriminatory
 | 
			
		||||
patent license (a) in connection with copies of the covered work
 | 
			
		||||
conveyed by you (or copies made from those copies), or (b) primarily
 | 
			
		||||
for and in connection with specific products or compilations that
 | 
			
		||||
contain the covered work, unless you entered into that arrangement,
 | 
			
		||||
or that patent license was granted, prior to 28 March 2007.
 | 
			
		||||
 | 
			
		||||
  Nothing in this License shall be construed as excluding or limiting
 | 
			
		||||
any implied license or other defenses to infringement that may
 | 
			
		||||
otherwise be available to you under applicable patent law.
 | 
			
		||||
 | 
			
		||||
  12. No Surrender of Others' Freedom.
 | 
			
		||||
 | 
			
		||||
  If conditions are imposed on you (whether by court order, agreement or
 | 
			
		||||
otherwise) that contradict the conditions of this License, they do not
 | 
			
		||||
excuse you from the conditions of this License.  If you cannot convey a
 | 
			
		||||
covered work so as to satisfy simultaneously your obligations under this
 | 
			
		||||
License and any other pertinent obligations, then as a consequence you may
 | 
			
		||||
not convey it at all.  For example, if you agree to terms that obligate you
 | 
			
		||||
to collect a royalty for further conveying from those to whom you convey
 | 
			
		||||
the Program, the only way you could satisfy both those terms and this
 | 
			
		||||
License would be to refrain entirely from conveying the Program.
 | 
			
		||||
 | 
			
		||||
  13. Use with the GNU Affero General Public License.
 | 
			
		||||
 | 
			
		||||
  Notwithstanding any other provision of this License, you have
 | 
			
		||||
permission to link or combine any covered work with a work licensed
 | 
			
		||||
under version 3 of the GNU Affero General Public License into a single
 | 
			
		||||
combined work, and to convey the resulting work.  The terms of this
 | 
			
		||||
License will continue to apply to the part which is the covered work,
 | 
			
		||||
but the special requirements of the GNU Affero General Public License,
 | 
			
		||||
section 13, concerning interaction through a network will apply to the
 | 
			
		||||
combination as such.
 | 
			
		||||
 | 
			
		||||
  14. Revised Versions of this License.
 | 
			
		||||
 | 
			
		||||
  The Free Software Foundation may publish revised and/or new versions of
 | 
			
		||||
the GNU General Public License from time to time.  Such new versions will
 | 
			
		||||
be similar in spirit to the present version, but may differ in detail to
 | 
			
		||||
address new problems or concerns.
 | 
			
		||||
 | 
			
		||||
  Each version is given a distinguishing version number.  If the
 | 
			
		||||
Program specifies that a certain numbered version of the GNU General
 | 
			
		||||
Public License "or any later version" applies to it, you have the
 | 
			
		||||
option of following the terms and conditions either of that numbered
 | 
			
		||||
version or of any later version published by the Free Software
 | 
			
		||||
Foundation.  If the Program does not specify a version number of the
 | 
			
		||||
GNU General Public License, you may choose any version ever published
 | 
			
		||||
by the Free Software Foundation.
 | 
			
		||||
 | 
			
		||||
  If the Program specifies that a proxy can decide which future
 | 
			
		||||
versions of the GNU General Public License can be used, that proxy's
 | 
			
		||||
public statement of acceptance of a version permanently authorizes you
 | 
			
		||||
to choose that version for the Program.
 | 
			
		||||
 | 
			
		||||
  Later license versions may give you additional or different
 | 
			
		||||
permissions.  However, no additional obligations are imposed on any
 | 
			
		||||
author or copyright holder as a result of your choosing to follow a
 | 
			
		||||
later version.
 | 
			
		||||
 | 
			
		||||
  15. Disclaimer of Warranty.
 | 
			
		||||
 | 
			
		||||
  THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
 | 
			
		||||
APPLICABLE LAW.  EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
 | 
			
		||||
HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
 | 
			
		||||
OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
 | 
			
		||||
THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
 | 
			
		||||
PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
 | 
			
		||||
IS WITH YOU.  SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
 | 
			
		||||
ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
 | 
			
		||||
 | 
			
		||||
  16. Limitation of Liability.
 | 
			
		||||
 | 
			
		||||
  IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
 | 
			
		||||
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
 | 
			
		||||
THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
 | 
			
		||||
GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
 | 
			
		||||
USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
 | 
			
		||||
DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
 | 
			
		||||
PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
 | 
			
		||||
EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
 | 
			
		||||
SUCH DAMAGES.
 | 
			
		||||
 | 
			
		||||
  17. Interpretation of Sections 15 and 16.
 | 
			
		||||
 | 
			
		||||
  If the disclaimer of warranty and limitation of liability provided
 | 
			
		||||
above cannot be given local legal effect according to their terms,
 | 
			
		||||
reviewing courts shall apply local law that most closely approximates
 | 
			
		||||
an absolute waiver of all civil liability in connection with the
 | 
			
		||||
Program, unless a warranty or assumption of liability accompanies a
 | 
			
		||||
copy of the Program in return for a fee.
 | 
			
		||||
 | 
			
		||||
                     END OF TERMS AND CONDITIONS
 | 
			
		||||
 | 
			
		||||
            How to Apply These Terms to Your New Programs
 | 
			
		||||
 | 
			
		||||
  If you develop a new program, and you want it to be of the greatest
 | 
			
		||||
possible use to the public, the best way to achieve this is to make it
 | 
			
		||||
free software which everyone can redistribute and change under these terms.
 | 
			
		||||
 | 
			
		||||
  To do so, attach the following notices to the program.  It is safest
 | 
			
		||||
to attach them to the start of each source file to most effectively
 | 
			
		||||
state the exclusion of warranty; and each file should have at least
 | 
			
		||||
the "copyright" line and a pointer to where the full notice is found.
 | 
			
		||||
 | 
			
		||||
    {one line to give the program's name and a brief idea of what it does.}
 | 
			
		||||
    Copyright (C) {year}  {name of author}
 | 
			
		||||
 | 
			
		||||
    This program is free software: you can redistribute it and/or modify
 | 
			
		||||
    it under the terms of the GNU General Public License as published by
 | 
			
		||||
    the Free Software Foundation, either version 3 of the License, or
 | 
			
		||||
    (at your option) any later version.
 | 
			
		||||
 | 
			
		||||
    This program is distributed in the hope that it will be useful,
 | 
			
		||||
    but WITHOUT ANY WARRANTY; without even the implied warranty of
 | 
			
		||||
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 | 
			
		||||
    GNU General Public License for more details.
 | 
			
		||||
 | 
			
		||||
    You should have received a copy of the GNU General Public License
 | 
			
		||||
    along with this program.  If not, see <http://www.gnu.org/licenses/>.
 | 
			
		||||
 | 
			
		||||
Also add information on how to contact you by electronic and paper mail.
 | 
			
		||||
 | 
			
		||||
  If the program does terminal interaction, make it output a short
 | 
			
		||||
notice like this when it starts in an interactive mode:
 | 
			
		||||
 | 
			
		||||
    {project}  Copyright (C) {year}  {fullname}
 | 
			
		||||
    This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
 | 
			
		||||
    This is free software, and you are welcome to redistribute it
 | 
			
		||||
    under certain conditions; type `show c' for details.
 | 
			
		||||
 | 
			
		||||
The hypothetical commands `show w' and `show c' should show the appropriate
 | 
			
		||||
parts of the General Public License.  Of course, your program's commands
 | 
			
		||||
might be different; for a GUI interface, you would use an "about box".
 | 
			
		||||
 | 
			
		||||
  You should also get your employer (if you work as a programmer) or school,
 | 
			
		||||
if any, to sign a "copyright disclaimer" for the program, if necessary.
 | 
			
		||||
For more information on this, and how to apply and follow the GNU GPL, see
 | 
			
		||||
<http://www.gnu.org/licenses/>.
 | 
			
		||||
 | 
			
		||||
  The GNU General Public License does not permit incorporating your program
 | 
			
		||||
into proprietary programs.  If your program is a subroutine library, you
 | 
			
		||||
may consider it more useful to permit linking proprietary applications with
 | 
			
		||||
the library.  If this is what you want to do, use the GNU Lesser General
 | 
			
		||||
Public License instead of this License.  But first, please read
 | 
			
		||||
<http://www.gnu.org/philosophy/why-not-lgpl.html>.
 | 
			
		||||
							
								
								
									
										0
									
								
								lab/README
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										0
									
								
								lab/README
									
									
									
									
									
										Executable file
									
								
							
							
								
								
									
										31
									
								
								lab/README.md
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										31
									
								
								lab/README.md
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,31 @@
 | 
			
		||||
FNF Lab 
 | 
			
		||||
=======
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
Introduction
 | 
			
		||||
------------
 | 
			
		||||
 | 
			
		||||
This repository contains 
 | 
			
		||||
* configuration files 
 | 
			
		||||
* hack notes etc 
 | 
			
		||||
* helper scripts
 | 
			
		||||
* test suites for FreedomStack
 | 
			
		||||
 | 
			
		||||
related to the FNF R&D lab.
 | 
			
		||||
 | 
			
		||||
FNF R&D Lab overview
 | 
			
		||||
--------------------
 | 
			
		||||
 | 
			
		||||
The lab consists of various bits of network gear to support development of the FreedomStack and educating a new generation of "net ninjas". You can
 | 
			
		||||
find comprehensive documentation on the lab on the FNF wiki:
 | 
			
		||||
 | 
			
		||||
https://commons.thefnf.org/index.php/FNF_Lab 
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
File/directory overview
 | 
			
		||||
-----------------------
 | 
			
		||||
 | 
			
		||||
* lab_aliases is a set of shell aliases for all the lab hosts. Add it to your shell config and have easy access to all lab systems. It needs a couple
 | 
			
		||||
  tweaks at the top for your FNFLAB username and private SSH keypath.
 | 
			
		||||
 | 
			
		||||
* docs is for things not on the wiki. Network and rack diagrams mostly
 | 
			
		||||
							
								
								
									
										80
									
								
								lab/docs/Joes-logical
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										80
									
								
								lab/docs/Joes-logical
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,80 @@
 | 
			
		||||
nwdiag {
 | 
			
		||||
 | 
			
		||||
//Upstream space (gateways,partner networks etc)
 | 
			
		||||
 | 
			
		||||
network "JoesDataCenter Upstream" {
 | 
			
		||||
	JoesWanGateway [shape = cloud ] address = "96.43.139.113";
 | 
			
		||||
	address = "96.43.139.113/28";
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
network "Wan edge - public" {
 | 
			
		||||
  group wan-edge-outside {
 | 
			
		||||
  	wan01-public [shape = cloud ] [ address = "96.43.139.115"];
 | 
			
		||||
  	wan02-public [shape = cloud ] [ address = "96.43.139.116"];
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Intra network links
 | 
			
		||||
JoesWanGateway -- wan01-public;
 | 
			
		||||
wan01 -- sw01;
 | 
			
		||||
 | 
			
		||||
// Networks under our administrative control.
 | 
			
		||||
// Using a standardized scheme of: site name, local vlan, description
 | 
			
		||||
 | 
			
		||||
network "Joes - VLAN 2 - Physical Systems" {
 | 
			
		||||
    address = "10.250.2.0/24";
 | 
			
		||||
 | 
			
		||||
	group wan-edge-inside {
 | 
			
		||||
		wan01 [ address = "10.250.2.x" ]
 | 
			
		||||
		wan02 [ address = "10.250.2.x" ]
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	group switches {
 | 
			
		||||
	  sw01 [address = "10.250.2.25"];
 | 
			
		||||
	  sw02 [address = "10.250.2.75"];
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
    group lxc-vm-hosts {
 | 
			
		||||
      vm01 [address = "10.250.2.3"];
 | 
			
		||||
      vm02 [address = "10.250.2.5"];
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
	group zfs-storage-nodes {
 | 
			
		||||
	  stor01 [address = "10.250.2.70"];
 | 
			
		||||
	  stor02 [address = "10.250.2.75"];
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
network "Joes - VLAN 4 - Production Virtual Machines" {
 | 
			
		||||
    address = "10.250.4.0/24";
 | 
			
		||||
 | 
			
		||||
	group www {
 | 
			
		||||
		lamplb [ address = "10.250.4.38" ];
 | 
			
		||||
		lamppublic [ address = "10.250.4.40" ];
 | 
			
		||||
		lampenterprise [ address = "10.250.4.37" ];
 | 
			
		||||
		chili [ address = "10.250.4.32" ];
 | 
			
		||||
		askbot [ address = "10.250.4.72" ];
 | 
			
		||||
		gus [ address = "10.250.4.74" ];
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	group coreinfra {
 | 
			
		||||
		dns [ address = "10.250.6.5" ];
 | 
			
		||||
		ldap [ address = "10.250.4.54" ];
 | 
			
		||||
		autonoc [ address = "10.250.4.39" ];
 | 
			
		||||
		sql [ address = "10.250.4.53" ];
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	group comms {
 | 
			
		||||
		mail [ address = "10.250.4.73" ];
 | 
			
		||||
		irc [ address = "10.250.4.63" ];
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
//network "FNF KC - Development Virtual Machines - Management network - VLAN(x) {
 | 
			
		||||
//
 | 
			
		||||
//}
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										
											BIN
										
									
								
								lab/docs/Joes-logical.png
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								lab/docs/Joes-logical.png
									
									
									
									
									
										Executable file
									
								
							
										
											Binary file not shown.
										
									
								
							| 
		 After Width: | Height: | Size: 62 KiB  | 
							
								
								
									
										126
									
								
								lab/docs/Lab-physical
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										126
									
								
								lab/docs/Lab-physical
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,126 @@
 | 
			
		||||
rackdiag {
 | 
			
		||||
 | 
			
		||||
//r1
 | 
			
		||||
	rack {
 | 
			
		||||
		42U;
 | 
			
		||||
		description = "R1 - Fully enclosed cabinet, holds all cisco routers/switches.)";
 | 
			
		||||
		42: 
 | 
			
		||||
		41: 
 | 
			
		||||
		40: 
 | 
			
		||||
		39: 
 | 
			
		||||
		38: 
 | 
			
		||||
		37:
 | 
			
		||||
		36:
 | 
			
		||||
		35:
 | 
			
		||||
		34:
 | 
			
		||||
		33:
 | 
			
		||||
		32:
 | 
			
		||||
		31:
 | 
			
		||||
		30:
 | 
			
		||||
		29:
 | 
			
		||||
		28:
 | 
			
		||||
		27:
 | 
			
		||||
		26:
 | 
			
		||||
		25:
 | 
			
		||||
		24:
 | 
			
		||||
		23:
 | 
			
		||||
		22:
 | 
			
		||||
		21:
 | 
			
		||||
		20:
 | 
			
		||||
		19:
 | 
			
		||||
		18:
 | 
			
		||||
		17:
 | 
			
		||||
		16:
 | 
			
		||||
		15:
 | 
			
		||||
		14: 
 | 
			
		||||
		13: 
 | 
			
		||||
		12: 
 | 
			
		||||
		11: 
 | 
			
		||||
		10: 
 | 
			
		||||
		09: 
 | 
			
		||||
		08: 
 | 
			
		||||
		07: 
 | 
			
		||||
		06: 
 | 
			
		||||
		05: 
 | 
			
		||||
		04: 
 | 
			
		||||
		03: 
 | 
			
		||||
		02: 
 | 
			
		||||
		01: 
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
//r2
 | 
			
		||||
	rack {
 | 
			
		||||
		42U;
 | 
			
		||||
		description = "R2 - Fully enclosed cabinet, holds all the prod gear.)";
 | 
			
		||||
		42: N/A
 | 
			
		||||
		41: unmanaged pdu
 | 
			
		||||
		40: pdu01
 | 
			
		||||
		39: pdu02
 | 
			
		||||
		38: devrtr02 mikrotik
 | 
			
		||||
		37: devrtr01 ubiquiti edge router
 | 
			
		||||
		36: devsw04 Cisco 3500 poe
 | 
			
		||||
		35: devsw01 Cisco 2950
 | 
			
		||||
		34: devsw02 Cisco 2950
 | 
			
		||||
		33: devsw03 Cisco 3500
 | 
			
		||||
		32: labsw01 Dell PowerConnect
 | 
			
		||||
		31: switch patch panel
 | 
			
		||||
		30: devrtr03 Cisco ISR 1841
 | 
			
		||||
		29: devrtr04 Cisco ISR 1841
 | 
			
		||||
		28: labcon01 ACS48
 | 
			
		||||
		27: console server patch panel
 | 
			
		||||
		26: devrtr06 Cisco 26xx
 | 
			
		||||
		25: devsw05 Cisco 2948G
 | 
			
		||||
		24: devsw05 Cisco 2948G
 | 
			
		||||
		23: devrtr07 Cisco 3640
 | 
			
		||||
		22: devrtr07 Cisco 3640
 | 
			
		||||
		21: available slot
 | 
			
		||||
		20: available slot
 | 
			
		||||
		19: devrtr08 (firebox) devrtr05 (pix 501)
 | 
			
		||||
		18: available slot
 | 
			
		||||
		17: available slot
 | 
			
		||||
		16: ups fsrtr01
 | 
			
		||||
		15: devrtr09 (6500)
 | 
			
		||||
		14: devrtr09
 | 
			
		||||
		13: devrtr09
 | 
			
		||||
		12: devrtr09
 | 
			
		||||
		11: devrtr09
 | 
			
		||||
		10: devrtr09
 | 
			
		||||
		09: devrtr09
 | 
			
		||||
		08: devrtr09
 | 
			
		||||
		07: devrtr09
 | 
			
		||||
		06: devrtr09
 | 
			
		||||
		05: devrtr09
 | 
			
		||||
		04: devrtr09
 | 
			
		||||
		03: devrtr09
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
//r3
 | 
			
		||||
	rack {
 | 
			
		||||
		24U;
 | 
			
		||||
		description = "R3 - Skeltek 2 post, holds client end points";
 | 
			
		||||
		24:
 | 
			
		||||
		23:
 | 
			
		||||
		22:
 | 
			
		||||
		21:
 | 
			
		||||
		20:
 | 
			
		||||
		19:
 | 
			
		||||
		18:
 | 
			
		||||
		17:
 | 
			
		||||
		16:
 | 
			
		||||
		15:
 | 
			
		||||
		14:
 | 
			
		||||
		13:
 | 
			
		||||
		12:
 | 
			
		||||
		11:
 | 
			
		||||
		10:
 | 
			
		||||
		09:
 | 
			
		||||
		08:
 | 
			
		||||
		07:
 | 
			
		||||
		06:
 | 
			
		||||
		05:
 | 
			
		||||
		04:
 | 
			
		||||
		03:
 | 
			
		||||
		02:
 | 
			
		||||
		01:
 | 
			
		||||
	}
 | 
			
		||||
							
								
								
									
										59
									
								
								lab/docs/LabLogical-Backbone
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										59
									
								
								lab/docs/LabLogical-Backbone
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,59 @@
 | 
			
		||||
nwdiag {
 | 
			
		||||
  network OVH_TRANSIT_WAN {
 | 
			
		||||
	address = "192.168.204.0/30"
 | 
			
		||||
	ovh-wanrtr [ address = ".1"];
 | 
			
		||||
	ausprod-coreap01-vpnwan [ address = ".2"];
 | 
			
		||||
  }
 | 
			
		||||
  
 | 
			
		||||
  group ovhtransitwan {
 | 
			
		||||
	ovh-wanrtr
 | 
			
		||||
	ausprod-coreap01-vpnwan 
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
  network ATT_UVERSE_LAN {
 | 
			
		||||
    address = "192.168.1.0/24";
 | 
			
		||||
 | 
			
		||||
    group attuverselan {
 | 
			
		||||
      ausprod-coreap01-wan [address = ".253"];
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  network TURNSYS_TRANSIT_LAN {
 | 
			
		||||
    address = "192.168.2.0/24";
 | 
			
		||||
    ausprod-coreap01-lan [address = ".1"];
 | 
			
		||||
    ausprod-coresw01 [address = ".22"];
 | 
			
		||||
    auslab-labrtr-wan [address = ".21"];
 | 
			
		||||
 | 
			
		||||
    group turnsystransitlan {
 | 
			
		||||
      ausprod-coreap01-lan;
 | 
			
		||||
      ausprod-coresw01;
 | 
			
		||||
      auslab-labrtr-wan;
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  network TURNSYS_MGMT_LAN {
 | 
			
		||||
	address = "10.251.2.0/24";
 | 
			
		||||
	auslab-labrtr-mgmtgw [ address = ".254"];
 | 
			
		||||
	auslab-ips [ address = ".97"];
 | 
			
		||||
	auslab-labsw01 [ address = ".2"];
 | 
			
		||||
	auslab-labsw02 [ address = ".4"];
 | 
			
		||||
	auslab-labsw03 [ address = ".5"];
 | 
			
		||||
	auslab-labcon01 [ address = ".3"];
 | 
			
		||||
	auslab-linsrv [ address = ".99"];
 | 
			
		||||
	auslab-winsrv [ address = ".98"];
 | 
			
		||||
 | 
			
		||||
  group turnsysmgmtlan-vlan2 {
 | 
			
		||||
	auslab-labrtr-mgmtgw;
 | 
			
		||||
	auslab-ips
 | 
			
		||||
	auslab-labsw01;
 | 
			
		||||
	auslab-labsw02;
 | 
			
		||||
	auslab-labsw03;
 | 
			
		||||
	auslab-labcon01;
 | 
			
		||||
	auslab-linsrv
 | 
			
		||||
	auslab-winsrv
 | 
			
		||||
	}
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										
											BIN
										
									
								
								lab/docs/LabLogical-Backbone.png
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								lab/docs/LabLogical-Backbone.png
									
									
									
									
									
										Executable file
									
								
							
										
											Binary file not shown.
										
									
								
							| 
		 After Width: | Height: | Size: 36 KiB  | 
							
								
								
									
										103
									
								
								lab/docs/LabLogical-Devices
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										103
									
								
								lab/docs/LabLogical-Devices
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,103 @@
 | 
			
		||||
nwdiag {
 | 
			
		||||
 | 
			
		||||
  network TURNSYS_AP_LAN {
 | 
			
		||||
	address = "10.251.3.0/24";
 | 
			
		||||
	auslab-labrtr-apgw [ address = ".254"];
 | 
			
		||||
	auslab-ap01 [ address = ".1"];
 | 
			
		||||
	auslab-ap02 [ address = ".2"];
 | 
			
		||||
	auslab-ap03 [ address = ".3"];
 | 
			
		||||
	auslab-ap04 [ address = ".4"];
 | 
			
		||||
	auslab-ap05 [ address = ".5"];
 | 
			
		||||
	auslab-ap06 [ address = ".6"];
 | 
			
		||||
	auslab-ap07 [ address = ".7"];
 | 
			
		||||
	auslab-ap08 [ address = ".8"];
 | 
			
		||||
	auslab-ap09 [ address = ".9"];
 | 
			
		||||
	auslab-ap10 [ address = ".10"];
 | 
			
		||||
	auslab-ap11 [ address = ".11"];
 | 
			
		||||
	auslab-ap12 [ address = ".12"];
 | 
			
		||||
 | 
			
		||||
  group turnsysaplan-vlan3 {
 | 
			
		||||
	auslab-labrtr-apgw;
 | 
			
		||||
	auslab-ap01;
 | 
			
		||||
	auslab-ap02;
 | 
			
		||||
	auslab-ap03;
 | 
			
		||||
	auslab-ap04;
 | 
			
		||||
	auslab-ap05;
 | 
			
		||||
	auslab-ap06;
 | 
			
		||||
	auslab-ap07;
 | 
			
		||||
	auslab-ap08;
 | 
			
		||||
	auslab-ap09;
 | 
			
		||||
	auslab-ap10;
 | 
			
		||||
	auslab-ap11;
 | 
			
		||||
	auslab-ap12;
 | 
			
		||||
	}
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  network TURNSYS_SWITCH_LAN {
 | 
			
		||||
	address = "10.251.4.0/24";
 | 
			
		||||
	auslab-labrtr-switchgw [ address = ".254"];
 | 
			
		||||
	auslab-sw01 [ address = ".1"];
 | 
			
		||||
	auslab-sw02 [ address = ".2"];
 | 
			
		||||
	auslab-sw03 [ address = ".3"];
 | 
			
		||||
	auslab-sw05 [ address = ".5"];
 | 
			
		||||
	auslab-sw06 [ address = ".6"];
 | 
			
		||||
	auslab-sw07 [ address = ".7"];
 | 
			
		||||
 | 
			
		||||
  group turnsysswitchlan-vlan4 {
 | 
			
		||||
	auslab-labrtr-switchgw;
 | 
			
		||||
	auslab-sw01;
 | 
			
		||||
	auslab-sw02;
 | 
			
		||||
	auslab-sw03;
 | 
			
		||||
	auslab-sw05;
 | 
			
		||||
	auslab-sw06;
 | 
			
		||||
	auslab-sw07;
 | 
			
		||||
	}
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  network TURNSYS_VOIP_LAN{
 | 
			
		||||
	address = "10.251.5.0/24";
 | 
			
		||||
	auslab-labrtr-voipgw [ address = ".254"];
 | 
			
		||||
 | 
			
		||||
  group turnsysvoip-vlan5 {
 | 
			
		||||
	auslab-labrtr-voipgw;
 | 
			
		||||
	}
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  network TURNSYS_ROUTER_LAN{
 | 
			
		||||
	address = "10.251.6.0/24";
 | 
			
		||||
	auslab-labrtr-routergw [ address = ".254"];
 | 
			
		||||
 | 
			
		||||
  group turnsysrouter-vlan6 {
 | 
			
		||||
	auslab-labrtr-routergw;
 | 
			
		||||
	}
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  network TURNSYS_IPTV_LAN{
 | 
			
		||||
	address = "10.251.7.0/24";
 | 
			
		||||
	auslab-labrtr-iptvgw [ address = ".254"];
 | 
			
		||||
 | 
			
		||||
  group turnsysiptv-vlan7 {
 | 
			
		||||
	auslab-labrtr-iptvgw;
 | 
			
		||||
	}
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  network TURNSYS_PEANUTGALLERY_LAN{
 | 
			
		||||
	address = "10.251.8.0/24";
 | 
			
		||||
	auslab-labrtr-pggw [ address = ".254"];
 | 
			
		||||
 | 
			
		||||
  group turnsyspg-vlan8 {
 | 
			
		||||
	auslab-labrtr-pggw;
 | 
			
		||||
	}
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  network TURNSYS_MALZOO_LAN{
 | 
			
		||||
	address = "10.251.12.0/24";
 | 
			
		||||
	auslab-labrtr-malgw [ address = ".254"];
 | 
			
		||||
 | 
			
		||||
  group turnsyspg-vlan12 {
 | 
			
		||||
	auslab-labrtr-malgw;
 | 
			
		||||
	}
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										
											BIN
										
									
								
								lab/docs/LabLogical-Devices.png
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								lab/docs/LabLogical-Devices.png
									
									
									
									
									
										Executable file
									
								
							
										
											Binary file not shown.
										
									
								
							| 
		 After Width: | Height: | Size: 62 KiB  | 
							
								
								
									
										88
									
								
								lab/vagrant/Vagrantfile
									
									
									
									
										vendored
									
									
										Executable file
									
								
							
							
						
						
									
										88
									
								
								lab/vagrant/Vagrantfile
									
									
									
									
										vendored
									
									
										Executable file
									
								
							@@ -0,0 +1,88 @@
 | 
			
		||||
# -*- mode: ruby -*-
 | 
			
		||||
# vi: set ft=ruby :
 | 
			
		||||
 | 
			
		||||
# Vagrantfile API/syntax version. Don't touch unless you know what you're doing!
 | 
			
		||||
VAGRANTFILE_API_VERSION = "2"
 | 
			
		||||
 | 
			
		||||
# Convenience function for running Postgres commands. Accesses via temporarily-linked container.
 | 
			
		||||
def postgres(cmd)
 | 
			
		||||
  "docker run --rm --link postgres:postgres -u postgres postgres:9.3 #{cmd}"
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
 | 
			
		||||
 | 
			
		||||
  # All Vagrant configuration is done here. The most common configuration
 | 
			
		||||
  # options are documented and commented below. For a complete reference,
 | 
			
		||||
  # please see the online documentation at vagrantup.com.
 | 
			
		||||
 | 
			
		||||
  # Create a private network, which allows host-only access to the machine
 | 
			
		||||
  # using a specific IP.
 | 
			
		||||
  # config.vm.network "private_network", ip: "192.168.33.10"
 | 
			
		||||
 | 
			
		||||
  # Create a public network, which generally matched to bridged network.
 | 
			
		||||
  # Bridged networks make the machine appear as another physical device on
 | 
			
		||||
  # your network.
 | 
			
		||||
  # config.vm.network "public_network"
 | 
			
		||||
 | 
			
		||||
  # If true, then any SSH connections made will enable agent forwarding.
 | 
			
		||||
  # Default value: false
 | 
			
		||||
  # config.ssh.forward_agent = true
 | 
			
		||||
 | 
			
		||||
  # Share an additional folder to the guest VM. The first argument is
 | 
			
		||||
  # the path on the host to the actual folder. The second argument is
 | 
			
		||||
  # the path on the guest to mount the folder. And the optional third
 | 
			
		||||
  # argument is a set of non-required options.
 | 
			
		||||
  # config.vm.synced_folder "../data", "/vagrant_data"
 | 
			
		||||
 | 
			
		||||
  # Provider-specific configuration so you can fine-tune various
 | 
			
		||||
  # backing providers for Vagrant. These expose provider-specific options.
 | 
			
		||||
  # Example for VirtualBox:
 | 
			
		||||
  #
 | 
			
		||||
  config.vm.provider "virtualbox" do |vb|
 | 
			
		||||
  #   # Don't boot with headless mode
 | 
			
		||||
  #   vb.gui = true
 | 
			
		||||
  #
 | 
			
		||||
  #   # Use VBoxManage to customize the VM. For example to change memory:
 | 
			
		||||
  #   vb.customize ["modifyvm", :id, "--memory", "1024"]
 | 
			
		||||
    vb.memory = 1024
 | 
			
		||||
  end
 | 
			
		||||
  #
 | 
			
		||||
  # View the documentation for the provider you're using for more
 | 
			
		||||
  # information on available options.  # Enable provisioning with CFEngine. CFEngine Community packages are
 | 
			
		||||
 | 
			
		||||
  config.vm.define :hearth do |hearth|
 | 
			
		||||
 | 
			
		||||
    hearth.vm.box = "ubuntu/trusty64"
 | 
			
		||||
 | 
			
		||||
    hearth.vm.hostname = "hearth"
 | 
			
		||||
 | 
			
		||||
    hearth.vm.network :forwarded_port, guest: 80, host: 8080
 | 
			
		||||
 | 
			
		||||
    hearth.vm.provision :docker do |d|
 | 
			
		||||
      d.pull_images "postgres:9.3"
 | 
			
		||||
      d.build_image "/vagrant/docker/thefnf/freeradius", args: "-t thefnf/freeradius"
 | 
			
		||||
      d.build_image "/vagrant/docker/thefnf/odoo", args: "-t thefnf/odoo"
 | 
			
		||||
      d.run "thefnf/freeradius", args: "--name radius -p :1813:1813 -p :1863:1863"
 | 
			
		||||
      d.run "postgres:9.3", args: "--name postgres"
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    hearth.vm.provision :shell, inline: """
 | 
			
		||||
      sleep 5 # Give Postgres a chance to start
 | 
			
		||||
      #{postgres("psql -h postgres -c \"CREATE USER odoo WITH UNENCRYPTED PASSWORD 'password' CREATEDB;\"")}
 | 
			
		||||
    """
 | 
			
		||||
 | 
			
		||||
    hearth.vm.provision :docker do |d|
 | 
			
		||||
      d.run "thefnf/odoo", args: "--name odoo --link postgres:postgres -p :80:8069"
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  config.vm.define :freedomlink do |fl|
 | 
			
		||||
 | 
			
		||||
    fl.vm.box = "box-cutter/debian76"
 | 
			
		||||
 | 
			
		||||
    fl.vm.hostname = "freedomlink"
 | 
			
		||||
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
end
 | 
			
		||||
							
								
								
									
										6
									
								
								lab/vagrant/docker/thefnf/freeradius/Dockerfile
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										6
									
								
								lab/vagrant/docker/thefnf/freeradius/Dockerfile
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,6 @@
 | 
			
		||||
FROM ubuntu:14.04
 | 
			
		||||
EXPOSE 1813 1863
 | 
			
		||||
RUN apt-get update && \
 | 
			
		||||
  apt-get upgrade -y && \
 | 
			
		||||
  apt-get install -y freeradius
 | 
			
		||||
CMD freeradius -f
 | 
			
		||||
							
								
								
									
										55
									
								
								lab/vagrant/docker/thefnf/freeside/Dockerfile
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										55
									
								
								lab/vagrant/docker/thefnf/freeside/Dockerfile
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,55 @@
 | 
			
		||||
FROM debian:7
 | 
			
		||||
ENV VERSION 3.3
 | 
			
		||||
RUN echo deb http://freeside.biz/~ivan/freeside-wheezy/ ./ >/etc/apt/sources.list.d/freeside.list  && \
 | 
			
		||||
  apt-get update && \
 | 
			
		||||
  apt-get upgrade -y && \
 | 
			
		||||
  apt-get install -y --force-yes --no-install-recommends adduser apache2 apache2-mpm-prefork apache2-utils curl gcc gnupg ghostscript gsfonts gzip latex-xcolor \
 | 
			
		||||
    less libapache-dbi-perl libapache2-mod-perl2 libapache2-request-perl libapache-session-perl \
 | 
			
		||||
    libbusiness-creditcard-perl libcache-cache-perl libcache-simple-timedexpiry-perl libchart-perl \
 | 
			
		||||
    libclass-container-perl libclass-data-inheritable-perl libclass-returnvalue-perl libcolor-scheme-perl \
 | 
			
		||||
    libio-compress-perl libconvert-binhex-perl libcrypt-passwdmd5-perl libcrypt-ssleay-perl libcss-squish-perl \
 | 
			
		||||
    libdate-manip-perl libdbd-mysql-perl libdbd-pg-perl libdbi-perl libdbix-dbschema-perl libdbix-searchbuilder-perl \
 | 
			
		||||
    libdevel-stacktrace-perl libdevel-symdump-perl liberror-perl libexception-class-perl \
 | 
			
		||||
    libfile-counterfile-perl libfile-rsync-perl libfont-afm-perl libfreezethaw-perl libfrontier-rpc-perl \
 | 
			
		||||
    libgd-gd2-perl libgd-graph-perl libgd2-xpm libhtml-format-perl libhtml-mason-perl libhtml-parser-perl \
 | 
			
		||||
    libhtml-scrubber-perl libhtml-tagset-perl libhtml-tree-perl libhtml-widgets-selectlayers-perl libio-stringy-perl \
 | 
			
		||||
    libipc-run-perl libipc-run3-perl libipc-sharelite-perl libjavascript-rpc-perl libjson-perl \
 | 
			
		||||
    liblingua-en-inflect-perl liblingua-en-nameparse-perl liblocale-gettext-perl liblocale-maketext-fuzzy-perl \
 | 
			
		||||
    liblocale-maketext-lexicon-perl liblocale-subcountry-perl liblog-dispatch-perl libmailtools-perl libmime-tools-perl \
 | 
			
		||||
    libmodule-versions-report-perl libnet-daemon-perl libnet-ping-external-perl libnet-scp-perl libnet-ssh-perl \
 | 
			
		||||
    libnet-whois-raw-perl libnetaddr-ip-perl libnumber-format-perl libpam-modules libpam-runtime libpaper-utils \
 | 
			
		||||
    libparams-validate-perl libparse-recdescent-perl libpcre3 libpg-perl libregexp-common-perl \
 | 
			
		||||
    libspreadsheet-writeexcel-perl libstring-approx-perl libstring-shellquote-perl libterm-readkey-perl \
 | 
			
		||||
    libtest-inline-perl libtext-autoformat-perl libtext-charwidth-perl libtext-csv-perl libtext-csv-xs-perl libtext-iconv-perl \
 | 
			
		||||
    libtext-quoted-perl libtext-reform-perl libtext-template-perl libtext-wrapi18n-perl libtext-wrapper-perl \
 | 
			
		||||
    libtie-ixhash-perl libtime-duration-perl libtime-modules-perl libtimedate-perl libtree-simple-perl \
 | 
			
		||||
    libuniversal-require-perl liburi-perl libwant-perl libwww-perl libxml-parser-perl libyaml-perl lmodern make \
 | 
			
		||||
    perl perl-base perl-modules texlive \
 | 
			
		||||
    texlive-latex-extra texinfo traceroute ttf-bitstream-vera ttf-dustin ucf zlib1g \
 | 
			
		||||
    libdatetime-perl libdatetime-format-strptime-perl libfile-slurp-perl libspreadsheet-parseexcel-perl \
 | 
			
		||||
    libauthen-passphrase-perl libnet-domain-tld-perl libbusiness-us-usps-webtools-perl libxml-simple-perl \
 | 
			
		||||
    libemail-sender-perl libemail-sender-transport-smtp-tls-perl libemail-sender-perl \
 | 
			
		||||
    libemail-sender-transport-smtp-tls-perl libhtml-defang-perl libdatetime-format-natural-perl libcgi-pm-perl \
 | 
			
		||||
    libfile-sharedir-perl libmodule-versions-report-perl libtext-wikiformat-perl libnet-server-perl \
 | 
			
		||||
    libhttp-server-simple-perl libhtml-rewriteattributes-perl libmime-types-perl libperlio-eol-perl \
 | 
			
		||||
    libgnupg-interface-perl libdata-ical-perl libcalendar-simple-perl libdatetime-set-perl \
 | 
			
		||||
    libhook-lexwrap-perl libhttp-server-simple-mason-perl libxml-rss-perl libipc-run-safehandles-perl libpoe-perl \
 | 
			
		||||
    libsoap-lite-perl libhtml-tableextract-perl libhtml-element-extended-perl libcam-pdf-perl libgd-barcode-perl \
 | 
			
		||||
    libnet-openssh-perl libgeo-coder-googlev3-perl libgeo-googleearth-pluggable-perl libnet-snmp-perl \
 | 
			
		||||
    libcrypt-openssl-rsa-perl libpdf-webkit-perl wkhtmltopdf xvfb \
 | 
			
		||||
    sam2p psmisc libsys-sigaction-perl liblog-dispatch-perl libconvert-color-perl libdate-simple-perl libemail-valid-perl \
 | 
			
		||||
    libencode-perl libexcel-writer-xlsx-perl libhtml-mason-psgihandler-perl libhtml-quoted-perl libio-string-perl \
 | 
			
		||||
    libregexp-common-net-cidr-perl libregexp-ipv6-perl libsnmp-perl libtext-password-pronounceable-perl \
 | 
			
		||||
    libparse-fixedlength-perl && \
 | 
			
		||||
  cd /usr/src && \
 | 
			
		||||
  curl http://www.freeside.biz/freeside/freeside-$VERSION.tar.gz |tar xz && \
 | 
			
		||||
  adduser freeside --system --group  --shell /bin/bash && \
 | 
			
		||||
  rm -rf /var/www/*
 | 
			
		||||
ADD Makefile /usr/src/freeside-$VERSION/Makefile
 | 
			
		||||
RUN cd /usr/src/freeside-$VERSION && \
 | 
			
		||||
  make perl-modules && \
 | 
			
		||||
  make install-perl-modules && \
 | 
			
		||||
  make create-config && \
 | 
			
		||||
  make install-docs && \
 | 
			
		||||
  make install-apache
 | 
			
		||||
USER freeside
 | 
			
		||||
							
								
								
									
										468
									
								
								lab/vagrant/docker/thefnf/freeside/Makefile
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										468
									
								
								lab/vagrant/docker/thefnf/freeside/Makefile
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,468 @@
 | 
			
		||||
#!/usr/bin/make
 | 
			
		||||
 | 
			
		||||
#solaris and perhaps other very weirdass /bin/sh
 | 
			
		||||
#SHELL="/bin/ksh"
 | 
			
		||||
 | 
			
		||||
DB_TYPE = Pg
 | 
			
		||||
#DB_TYPE = mysql
 | 
			
		||||
 | 
			
		||||
DB_USER = freeside
 | 
			
		||||
DB_PASSWORD=password
 | 
			
		||||
 | 
			
		||||
DATASOURCE = DBI:${DB_TYPE}:dbname=freeside;host=postgres
 | 
			
		||||
 | 
			
		||||
#changable now (some things which should go to the others still go to CONF)
 | 
			
		||||
FREESIDE_CONF = /usr/local/etc/freeside
 | 
			
		||||
FREESIDE_LOG = /usr/local/etc/freeside
 | 
			
		||||
FREESIDE_LOCK = /usr/local/etc/freeside
 | 
			
		||||
FREESIDE_CACHE = /usr/local/etc/freeside
 | 
			
		||||
FREESIDE_EXPORT = /usr/local/etc/freeside
 | 
			
		||||
 | 
			
		||||
MASON_HANDLER = ${FREESIDE_CONF}/handler.pl
 | 
			
		||||
MASONDATA = ${FREESIDE_CACHE}/masondata
 | 
			
		||||
 | 
			
		||||
#where to put the default configuraiton used by freeside-setup to initialize
 | 
			
		||||
#a new database (not used after that).  primarily of interest to distro
 | 
			
		||||
#package maintainers
 | 
			
		||||
DIST_CONF = ${FREESIDE_CONF}/default_conf
 | 
			
		||||
 | 
			
		||||
#deb
 | 
			
		||||
FREESIDE_DOCUMENT_ROOT = /var/www
 | 
			
		||||
#redhat, fedora, mandrake
 | 
			
		||||
#FREESIDE_DOCUMENT_ROOT = /var/www/html/freeside
 | 
			
		||||
#freebsd
 | 
			
		||||
#FREESIDE_DOCUMENT_ROOT = /usr/local/www/data/freeside
 | 
			
		||||
#openbsd
 | 
			
		||||
#FREESIDE_DOCUMENT_ROOT = /var/www/htdocs/freeside
 | 
			
		||||
#suse
 | 
			
		||||
#FREESIDE_DOCUMENT_ROOT = /srv/www/htdocs/freeside
 | 
			
		||||
#apache
 | 
			
		||||
#FREESIDE_DOCUMENT_ROOT = /usr/local/apache/htdocs/freeside
 | 
			
		||||
 | 
			
		||||
#deb, redhat, fedora, mandrake, suse, others?
 | 
			
		||||
INIT_FILE = /etc/init.d/freeside
 | 
			
		||||
#freebsd
 | 
			
		||||
#INIT_FILE = /usr/local/etc/rc.d/011.freeside.sh
 | 
			
		||||
 | 
			
		||||
#deb
 | 
			
		||||
INIT_INSTALL = PATH=$PATH:/sbin /usr/sbin/update-rc.d freeside defaults 23 01
 | 
			
		||||
#redhat, fedora
 | 
			
		||||
#INIT_INSTALL = /sbin/chkconfig freeside on
 | 
			
		||||
#not necessary (freebsd)
 | 
			
		||||
#INIT_INSTALL = /usr/bin/true
 | 
			
		||||
 | 
			
		||||
#deb, suse
 | 
			
		||||
#HTTPD_RESTART = /etc/init.d/apache restart
 | 
			
		||||
#deb w/apache2
 | 
			
		||||
HTTPD_RESTART = /etc/init.d/apache2 restart
 | 
			
		||||
#redhat, fedora, mandrake
 | 
			
		||||
#HTTPD_RESTART = /etc/init.d/httpd restart
 | 
			
		||||
#freebsd
 | 
			
		||||
#HTTPD_RESTART = /usr/local/etc/rc.d/apache.sh stop || true; sleep 10; /usr/local/etc/rc.d/apache.sh start
 | 
			
		||||
#openbsd
 | 
			
		||||
#HTTPD_RESTART = kill -TERM `cat /var/www/logs/httpd.pid`; sleep 10; /usr/sbin/httpd -u -DSSL
 | 
			
		||||
#apache
 | 
			
		||||
#HTTPD_RESTART = /usr/local/apache/bin/apachectl stop; sleep 10; /usr/local/apache/bin/apachectl startssl
 | 
			
		||||
 | 
			
		||||
#(an include directory, not a file, "Include /etc/apache/conf.d" in httpd.conf)
 | 
			
		||||
#deb (3.1+), apache2
 | 
			
		||||
APACHE_CONF = /etc/apache2/conf.d
 | 
			
		||||
INSSERV_OVERRIDE = /etc/insserv/overrides
 | 
			
		||||
 | 
			
		||||
FREESIDE_RESTART = ${INIT_FILE} restart
 | 
			
		||||
 | 
			
		||||
#deb, redhat, fedora, mandrake, suse, others?
 | 
			
		||||
INSTALLGROUP = root
 | 
			
		||||
#freebsd, openbsd
 | 
			
		||||
#INSTALLGROUP = wheel
 | 
			
		||||
 | 
			
		||||
#edit the stuff below to have the daemons start
 | 
			
		||||
 | 
			
		||||
QUEUED_USER=fs_queue
 | 
			
		||||
API_USER = fs_api
 | 
			
		||||
 | 
			
		||||
SELFSERVICE_USER = fs_selfservice
 | 
			
		||||
#never run on the same machine in production!!!
 | 
			
		||||
SELFSERVICE_MACHINES = 
 | 
			
		||||
# SELFSERVICE_MACHINES = www.example.com
 | 
			
		||||
# SELFSERVICE_MACHINES = web1.example.com web2.example.com
 | 
			
		||||
 | 
			
		||||
#user with sudo access on SELFSERVICE_MACHINES for automated self-service
 | 
			
		||||
#installation.
 | 
			
		||||
SELFSERVICE_INSTALL_USER = ivan
 | 
			
		||||
SELFSERVICE_INSTALL_USERADD = /usr/sbin/useradd
 | 
			
		||||
#SELFSERVICE_INSTALL_USERADD = "/usr/sbin/pw useradd"
 | 
			
		||||
 | 
			
		||||
#RT_ENABLED = 0
 | 
			
		||||
RT_ENABLED = 1
 | 
			
		||||
RT_DOMAIN = example.com
 | 
			
		||||
RT_TIMEZONE = US/Pacific
 | 
			
		||||
#RT_TIMEZONE = US/Eastern
 | 
			
		||||
FREESIDE_URL = "http://localhost/freeside/"
 | 
			
		||||
 | 
			
		||||
#for now, same db as specified in DATASOURCE... eventually, otherwise?
 | 
			
		||||
RT_DB_DATABASE = freeside
 | 
			
		||||
 | 
			
		||||
TORRUS_ENABLED = 0
 | 
			
		||||
 | 
			
		||||
# for auto-version updates, so we can "make release" more things automatically
 | 
			
		||||
RPM_SPECFILE = rpm/freeside.spec
 | 
			
		||||
 | 
			
		||||
#---
 | 
			
		||||
 | 
			
		||||
#rt/config.layout.in
 | 
			
		||||
RT_PATH = /opt/rt3
 | 
			
		||||
 | 
			
		||||
#only used for dev kludge now, not a big deal
 | 
			
		||||
FREESIDE_PATH = `pwd`
 | 
			
		||||
PERL_INC_DEV_KLUDGE = /usr/local/share/perl/5.14.2/
 | 
			
		||||
 | 
			
		||||
VERSION := `grep '^$$VERSION' FS/FS.pm | cut -d\' -f2`
 | 
			
		||||
TAG := freeside_`grep '^$$VERSION' FS/FS.pm | cut -d\' -f2 | perl -pe 's/\./_/g'`
 | 
			
		||||
 | 
			
		||||
#DEBVERSION = `echo ${VERSION} | perl -pe 's/(\d)([a-z])/\1~\2/'`-1
 | 
			
		||||
 | 
			
		||||
TEXMFHOME := "\$$TEXMFHOME"
 | 
			
		||||
 | 
			
		||||
ver:
 | 
			
		||||
	@echo "${VERSION}"
 | 
			
		||||
 | 
			
		||||
tag:
 | 
			
		||||
	@echo "${TAG}"
 | 
			
		||||
 | 
			
		||||
help:
 | 
			
		||||
	@echo "supported targets:"
 | 
			
		||||
	@echo "                   create-database create-config"
 | 
			
		||||
	@echo "                   install deploy"
 | 
			
		||||
	@echo "                   configure-rt create-rt"
 | 
			
		||||
	@echo "                   clean help"
 | 
			
		||||
	@echo
 | 
			
		||||
	@echo "                   install-docs install-perl-modules"
 | 
			
		||||
	@echo "                   install-init install-apache"
 | 
			
		||||
	@echo "                   install-rt install-texmf"
 | 
			
		||||
	@echo "                   install-selfservice update-selfservice"
 | 
			
		||||
	@echo
 | 
			
		||||
	@echo "                   dev dev-docs dev-perl-modules"
 | 
			
		||||
	@echo
 | 
			
		||||
	@echo "                   masondocs alldocs docs"
 | 
			
		||||
	@echo "                   wikiman"
 | 
			
		||||
	@echo "                   perl-modules"
 | 
			
		||||
	#@echo
 | 
			
		||||
	#@echo "                   upload-docs release"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
masondocs: httemplate/* httemplate/*/* httemplate/*/*/* httemplate/*/*/*/*
 | 
			
		||||
	rm -rf masondocs
 | 
			
		||||
	cp -pr httemplate masondocs
 | 
			
		||||
	touch masondocs
 | 
			
		||||
 | 
			
		||||
alldocs: masondocs
 | 
			
		||||
 | 
			
		||||
docs:
 | 
			
		||||
	make masondocs
 | 
			
		||||
 | 
			
		||||
wikiman:
 | 
			
		||||
	chmod a+rx ./bin/pod2x
 | 
			
		||||
	./bin/pod2x
 | 
			
		||||
 | 
			
		||||
install-docs: docs
 | 
			
		||||
	#ancient attempt to avoid overwriting customer modifications directly to production web files that's overlived its usefulness
 | 
			
		||||
	#[ -e ${FREESIDE_DOCUMENT_ROOT} ] && mv ${FREESIDE_DOCUMENT_ROOT} ${FREESIDE_DOCUMENT_ROOT}.`date +%Y%m%d%H%M%S` || true
 | 
			
		||||
	#cp -r masondocs ${FREESIDE_DOCUMENT_ROOT}
 | 
			
		||||
	[ -h ${FREESIDE_DOCUMENT_ROOT} ] && rm ${FREESIDE_DOCUMENT_ROOT} || true
 | 
			
		||||
	mkdir -p ${FREESIDE_DOCUMENT_ROOT}
 | 
			
		||||
	cp -r masondocs/* masondocs/.htaccess ${FREESIDE_DOCUMENT_ROOT}
 | 
			
		||||
	chown -R freeside:freeside ${FREESIDE_DOCUMENT_ROOT}
 | 
			
		||||
	install -D htetc/handler.pl ${MASON_HANDLER}
 | 
			
		||||
	perl -p -i -e "\
 | 
			
		||||
	  s|%%%FREESIDE_EXPORT%%%|${FREESIDE_EXPORT}|g;\
 | 
			
		||||
	  s'%%%RT_ENABLED%%%'${RT_ENABLED}'g; \
 | 
			
		||||
	" ${MASON_HANDLER} || true
 | 
			
		||||
	mkdir -p ${FREESIDE_EXPORT}/profile
 | 
			
		||||
	chown freeside ${FREESIDE_EXPORT}/profile
 | 
			
		||||
	cp htetc/htpasswd.logout ${FREESIDE_CONF}
 | 
			
		||||
	[ ! -e ${MASONDATA} ] && mkdir ${MASONDATA} || true
 | 
			
		||||
	chown -R freeside ${MASONDATA}
 | 
			
		||||
 | 
			
		||||
dev-docs:
 | 
			
		||||
	[ -e ${FREESIDE_DOCUMENT_ROOT} ] && mv ${FREESIDE_DOCUMENT_ROOT} ${FREESIDE_DOCUMENT_ROOT}.`date +%Y%m%d%H%M%S` || true
 | 
			
		||||
	ln -s ${FREESIDE_PATH}/httemplate ${FREESIDE_DOCUMENT_ROOT}
 | 
			
		||||
	cp htetc/handler.pl ${MASON_HANDLER}
 | 
			
		||||
	perl -p -i -e "\
 | 
			
		||||
	  s'###use Module::Refresh;###'use Module::Refresh;'; \
 | 
			
		||||
	  s'###Module::Refresh->refresh;###'Module::Refresh->refresh;'; \
 | 
			
		||||
	  s|%%%FREESIDE_EXPORT%%%|${FREESIDE_EXPORT}|g;\
 | 
			
		||||
	  s'%%%RT_ENABLED%%%'${RT_ENABLED}'g; \
 | 
			
		||||
	" ${MASON_HANDLER} || true
 | 
			
		||||
 | 
			
		||||
perl-modules:
 | 
			
		||||
	cd FS; \
 | 
			
		||||
	[ -e Makefile ] || perl Makefile.PL; \
 | 
			
		||||
	make; \
 | 
			
		||||
	perl -p -i -e "\
 | 
			
		||||
	  s|%%%FREESIDE_CONF%%%|${FREESIDE_CONF}|g;\
 | 
			
		||||
	  s|%%%FREESIDE_CACHE%%%|${FREESIDE_CACHE}|g;\
 | 
			
		||||
	  s'%%%FREESIDE_DOCUMENT_ROOT%%%'${FREESIDE_DOCUMENT_ROOT}'g; \
 | 
			
		||||
	  s'%%%RT_ENABLED%%%'${RT_ENABLED}'g; \
 | 
			
		||||
	  s'%%%RT_PATH%%%'${RT_PATH}'g; \
 | 
			
		||||
	  s'%%%MASONDATA%%%'${MASONDATA}'g;\
 | 
			
		||||
	  s/%%%SELFSERVICE_USER%%%/${SELFSERVICE_USER}/g;\
 | 
			
		||||
	" blib/lib/FS/*.pm;\
 | 
			
		||||
	perl -p -i -e "\
 | 
			
		||||
	  s/%%%SELFSERVICE_USER%%%/${SELFSERVICE_USER}/g;\
 | 
			
		||||
	  s/%%%SELFSERVICE_MACHINES%%%/${SELFSERVICE_MACHINES}/g;\
 | 
			
		||||
	  s|%%%FREESIDE_EXPORT%%%|${FREESIDE_EXPORT}|g;\
 | 
			
		||||
	" blib/lib/FS/Cron/*.pm;\
 | 
			
		||||
	perl -p -i -e "\
 | 
			
		||||
	  s|%%%FREESIDE_CONF%%%|${FREESIDE_CONF}|g;\
 | 
			
		||||
	  s|%%%FREESIDE_EXPORT%%%|${FREESIDE_EXPORT}|g;\
 | 
			
		||||
	  s|%%%FREESIDE_LOG%%%|${FREESIDE_LOG}|g;\
 | 
			
		||||
	" blib/lib/FS/part_export/*.pm;\
 | 
			
		||||
	perl -p -i -e "\
 | 
			
		||||
	  s|%%%FREESIDE_CACHE%%%|${FREESIDE_CACHE}|g;\
 | 
			
		||||
	" blib/lib/FS/cust_main/*.pm blib/lib/FS/cust_pkg/*.pm;\
 | 
			
		||||
	perl -p -i -e "\
 | 
			
		||||
	  s|%%%FREESIDE_LOG%%%|${FREESIDE_LOG}|g;\
 | 
			
		||||
	" blib/lib/FS/Daemon/*.pm;\
 | 
			
		||||
	perl -p -i -e "\
 | 
			
		||||
	  s|%%%FREESIDE_CONF%%%|${FREESIDE_CONF}|g;\
 | 
			
		||||
	  s|%%%FREESIDE_LOG%%%|${FREESIDE_LOG}|g;\
 | 
			
		||||
	  s|%%%FREESIDE_LOCK%%%|${FREESIDE_LOCK}|g;\
 | 
			
		||||
	  s|%%%FREESIDE_CACHE%%%|${FREESIDE_CACHE}|g;\
 | 
			
		||||
	  s|%%%FREESIDE_EXPORT%%%|${FREESIDE_EXPORT}|g;\
 | 
			
		||||
	  s|%%%DIST_CONF%%%|${DIST_CONF}|g;\
 | 
			
		||||
	" blib/script/*
 | 
			
		||||
 | 
			
		||||
install-perl-modules: perl-modules install-rt-initialdata
 | 
			
		||||
	[ -L ${PERL_INC_DEV_KLUDGE}/FS ] \
 | 
			
		||||
	  && rm ${PERL_INC_DEV_KLUDGE}/FS \
 | 
			
		||||
	  && mv ${PERL_INC_DEV_KLUDGE}/FS.old ${PERL_INC_DEV_KLUDGE}/FS \
 | 
			
		||||
	  || true
 | 
			
		||||
	cd FS; \
 | 
			
		||||
	make install UNINST=1
 | 
			
		||||
	#install this for freeside-setup
 | 
			
		||||
	install -d $(DIST_CONF)
 | 
			
		||||
	#install conf/[a-z]* $(DEFAULT_CONF)
 | 
			
		||||
	#CVS is not [a-z]
 | 
			
		||||
	install `ls -d conf/[a-z]* | grep -v CVS | grep -v '^conf/registries'` $(DIST_CONF)
 | 
			
		||||
 | 
			
		||||
dev-perl-modules: perl-modules
 | 
			
		||||
	[ -d ${PERL_INC_DEV_KLUDGE}/FS -a ! -L ${PERL_INC_DEV_KLUDGE}/FS ] \
 | 
			
		||||
	  && mv ${PERL_INC_DEV_KLUDGE}/FS ${PERL_INC_DEV_KLUDGE}/FS.old \
 | 
			
		||||
	  || true
 | 
			
		||||
 | 
			
		||||
	rm -rf ${PERL_INC_DEV_KLUDGE}/FS
 | 
			
		||||
	ln -sf ${FREESIDE_PATH}/FS/blib/lib/FS ${PERL_INC_DEV_KLUDGE}/FS
 | 
			
		||||
 | 
			
		||||
install-texmf:	
 | 
			
		||||
	install -D -o freeside -m 444 etc/longtable.sty \
 | 
			
		||||
	  /usr/local/share/texmf/tex/latex/longtable.sty
 | 
			
		||||
	texhash /usr/local/share/texmf
 | 
			
		||||
 | 
			
		||||
install-init:
 | 
			
		||||
	#[ -e ${INIT_FILE} ] || install -o root -g ${INSTALLGROUP} -m 711 init.d/freeside-init ${INIT_FILE}
 | 
			
		||||
	install -o root -g ${INSTALLGROUP} -m 711 init.d/freeside-init ${INIT_FILE}
 | 
			
		||||
	perl -p -i -e "\
 | 
			
		||||
	  s/%%%QUEUED_USER%%%/${QUEUED_USER}/g;\
 | 
			
		||||
	  s/%%%API_USER%%%/${API_USER}/g;\
 | 
			
		||||
	  s/%%%SELFSERVICE_USER%%%/${SELFSERVICE_USER}/g;\
 | 
			
		||||
	  s/%%%SELFSERVICE_MACHINES%%%/${SELFSERVICE_MACHINES}/g;\
 | 
			
		||||
	" ${INIT_FILE}
 | 
			
		||||
	${INIT_INSTALL}
 | 
			
		||||
 | 
			
		||||
install-apache:
 | 
			
		||||
	[ -e ${APACHE_CONF}/freeside-base.conf ] && rm ${APACHE_CONF}/freeside-base.conf || true
 | 
			
		||||
	[ -d ${APACHE_CONF} ] && \
 | 
			
		||||
	  ( install -o root -m 755 htetc/freeside-base2.conf ${APACHE_CONF} && \
 | 
			
		||||
	    ( [ ${RT_ENABLED} -eq 1 ] && install -o root -m 755 htetc/freeside-rt.conf ${APACHE_CONF} || true ) && \
 | 
			
		||||
	    ( [ ${TORRUS_ENABLED} -eq 1 ] && install -o root -m 755 htetc/freeside-torrus.conf ${APACHE_CONF} || true ) && \
 | 
			
		||||
	    perl -p -i -e "\
 | 
			
		||||
	      s'%%%FREESIDE_DOCUMENT_ROOT%%%'${FREESIDE_DOCUMENT_ROOT}'g; \
 | 
			
		||||
	      s'%%%FREESIDE_CONF%%%'${FREESIDE_CONF}'g; \
 | 
			
		||||
	      s'%%%MASON_HANDLER%%%'${MASON_HANDLER}'g; \
 | 
			
		||||
	    " ${APACHE_CONF}/freeside-*.conf \
 | 
			
		||||
	  ) || true
 | 
			
		||||
	[ -d ${INSSERV_OVERRIDE} ] && [ -x /sbin/insserv ] && ( install -o root -m 755 init.d/insserv-override-apache2 ${INSSERV_OVERRIDE}/apache2 && insserv -d ) || true
 | 
			
		||||
 | 
			
		||||
install-selfservice:
 | 
			
		||||
	[ -e ~freeside ] || cp -pr /etc/skel ~freeside && chown -R freeside ~freeside
 | 
			
		||||
	[ -e ~freeside/.ssh/id_dsa.pub ] || [ -e ~freeside/.ssh/id_rsa.pub ] || su - freeside -c 'ssh-keygen -t dsa'
 | 
			
		||||
	for MACHINE in ${SELFSERVICE_MACHINES}; do \
 | 
			
		||||
	  scp -r fs_selfservice/FS-SelfService ${SELFSERVICE_INSTALL_USER}@$$MACHINE:. ;\
 | 
			
		||||
	  ssh ${SELFSERVICE_INSTALL_USER}@$$MACHINE "cd FS-SelfService; perl Makefile.PL && make" ;\
 | 
			
		||||
	  ssh ${SELFSERVICE_INSTALL_USER}@$$MACHINE "cd FS-SelfService; sudo make install" ;\
 | 
			
		||||
	  scp ~freeside/.ssh/id_dsa.pub ${SELFSERVICE_INSTALL_USER}@$$MACHINE:. ;\
 | 
			
		||||
	  ssh ${SELFSERVICE_INSTALL_USER}@$$MACHINE "sudo ${SELFSERVICE_INSTALL_USERADD} freeside; sudo install -d -o freeside -m 755 ~freeside/.ssh/; sudo install -o freeside -m 600 ./id_dsa.pub ~freeside/.ssh/authorized_keys" ;\
 | 
			
		||||
	   ssh ${SELFSERVICE_INSTALL_USER}@$$MACHINE "sudo install -o freeside -d /usr/local/freeside" ;\
 | 
			
		||||
	done
 | 
			
		||||
 | 
			
		||||
update-selfservice:
 | 
			
		||||
	for MACHINE in ${SELFSERVICE_MACHINES}; do \
 | 
			
		||||
	  RSYNC_RSH=ssh rsync -rlptz fs_selfservice/FS-SelfService/ ${SELFSERVICE_INSTALL_USER}@$$MACHINE:FS-SelfService ;\
 | 
			
		||||
	  ssh ${SELFSERVICE_INSTALL_USER}@$$MACHINE "cd FS-SelfService; make clean; perl Makefile.PL && make" ;\
 | 
			
		||||
	  ssh ${SELFSERVICE_INSTALL_USER}@$$MACHINE "cd FS-SelfService; sudo make install" ;\
 | 
			
		||||
	done
 | 
			
		||||
 | 
			
		||||
install-chown:
 | 
			
		||||
	chown freeside "${FREESIDE_CACHE}/counters.${DATASOURCE}"
 | 
			
		||||
	chown freeside "${FREESIDE_CACHE}/cache.${DATASOURCE}"
 | 
			
		||||
	chown freeside "${FREESIDE_EXPORT}/export.${DATASOURCE}"
 | 
			
		||||
 | 
			
		||||
install: install-perl-modules install-docs install-init install-apache install-rt install-torrus install-texmf install-chown
 | 
			
		||||
 | 
			
		||||
deploy: install
 | 
			
		||||
	${HTTPD_RESTART}
 | 
			
		||||
	${FREESIDE_RESTART}
 | 
			
		||||
 | 
			
		||||
dev: dev-perl-modules dev-docs
 | 
			
		||||
 | 
			
		||||
create-database:
 | 
			
		||||
	perl -e 'use DBIx::DataSource qw( create_database ); create_database( "${DATASOURCE}", "${DB_USER}", "${DB_PASSWORD}" ) or die $$DBIx::DataSource::errstr;'
 | 
			
		||||
 | 
			
		||||
create-config: install-perl-modules
 | 
			
		||||
	[ -e ${FREESIDE_CONF} ] && mv ${FREESIDE_CONF} ${FREESIDE_CONF}.`date +%Y%m%d%H%M%S` || true
 | 
			
		||||
	install -d -o freeside ${FREESIDE_CONF}
 | 
			
		||||
 | 
			
		||||
	touch ${FREESIDE_CONF}/secrets
 | 
			
		||||
	chown freeside ${FREESIDE_CONF}/secrets
 | 
			
		||||
	chmod 600 ${FREESIDE_CONF}/secrets
 | 
			
		||||
 | 
			
		||||
	/bin/echo -e "${DATASOURCE}\n${DB_USER}\n${DB_PASSWORD}" >${FREESIDE_CONF}/secrets
 | 
			
		||||
	chmod 600 ${FREESIDE_CONF}/secrets
 | 
			
		||||
	chown freeside ${FREESIDE_CONF}/secrets
 | 
			
		||||
 | 
			
		||||
	mkdir "${FREESIDE_CACHE}/counters.${DATASOURCE}"
 | 
			
		||||
	chown freeside "${FREESIDE_CACHE}/counters.${DATASOURCE}"
 | 
			
		||||
 | 
			
		||||
	mkdir "${FREESIDE_CACHE}/cache.${DATASOURCE}"
 | 
			
		||||
	chown freeside "${FREESIDE_CACHE}/cache.${DATASOURCE}"
 | 
			
		||||
 | 
			
		||||
	mkdir "${FREESIDE_EXPORT}/export.${DATASOURCE}"
 | 
			
		||||
	chown freeside "${FREESIDE_EXPORT}/export.${DATASOURCE}"
 | 
			
		||||
 | 
			
		||||
	#install this for freeside-setup
 | 
			
		||||
	install -d $(DIST_CONF)
 | 
			
		||||
	#install conf/[a-z]* $(DEFAULT_CONF)
 | 
			
		||||
	#CVS is not [a-z]
 | 
			
		||||
	install `ls -d conf/[a-z]* | grep -v CVS | grep -v '^conf/registries'` $(DIST_CONF)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
configure-rt:
 | 
			
		||||
	cd rt; \
 | 
			
		||||
	cp config.layout.in config.layout; \
 | 
			
		||||
	perl -p -i -e "\
 | 
			
		||||
	  s'%%%FREESIDE_DOCUMENT_ROOT%%%'${FREESIDE_DOCUMENT_ROOT}'g;\
 | 
			
		||||
	  s'%%%MASONDATA%%%'${MASONDATA}'g;\
 | 
			
		||||
	" config.layout; \
 | 
			
		||||
	./configure --enable-layout=Freeside\
 | 
			
		||||
	            --with-db-type=${DB_TYPE} \
 | 
			
		||||
	            --with-db-dba=${DB_USER} \
 | 
			
		||||
	            --with-db-database=${RT_DB_DATABASE} \
 | 
			
		||||
	            --with-db-rt-user=${DB_USER} \
 | 
			
		||||
	            --with-db-rt-pass="${DB_PASSWORD}" \
 | 
			
		||||
	            --with-web-user=freeside \
 | 
			
		||||
	            --with-web-group=freeside \
 | 
			
		||||
	            --with-rt-group=freeside \
 | 
			
		||||
	            --with-web-handler=modperl2
 | 
			
		||||
 | 
			
		||||
create-rt: configure-rt
 | 
			
		||||
	[ -d /opt           ] || mkdir /opt           #doh
 | 
			
		||||
	[ -d /opt/rt3       ] || mkdir /opt/rt3       #
 | 
			
		||||
	[ -d /opt/rt3/share ] || mkdir /opt/rt3/share #
 | 
			
		||||
	cd rt; make install
 | 
			
		||||
	rt/sbin/rt-setup-database --dba '${DB_USER}' \
 | 
			
		||||
	                          --dba-password '${DB_PASSWORD}' \
 | 
			
		||||
	                          --action schema \
 | 
			
		||||
	 || true
 | 
			
		||||
	rt/sbin/rt-setup-database --dba-password '${DB_PASSWORD}' \
 | 
			
		||||
	                          --action coredata \
 | 
			
		||||
	&& rt/sbin/rt-setup-database --dba-password '${DB_PASSWORD}' \
 | 
			
		||||
	                             --action insert \
 | 
			
		||||
	                             --datafile ${RT_PATH}/etc/initialdata \
 | 
			
		||||
	|| true
 | 
			
		||||
 | 
			
		||||
install-rt: 
 | 
			
		||||
	if [ ${RT_ENABLED} -eq 1 ]; then ( cd rt; make install ); fi
 | 
			
		||||
	if [ ${RT_ENABLED} -eq 1 ]; then perl -p -i -e "\
 | 
			
		||||
	  s'%%%RT_DOMAIN%%%'${RT_DOMAIN}'g;\
 | 
			
		||||
	  s'%%%RT_TIMEZONE%%%'${RT_TIMEZONE}'g;\
 | 
			
		||||
	  s'%%%FREESIDE_URL%%%'${FREESIDE_URL}'g;\
 | 
			
		||||
	" ${RT_PATH}/etc/RT_SiteConfig.pm; fi
 | 
			
		||||
	if [ ${RT_ENABLED} -eq 1 ]; then \
 | 
			
		||||
	  chown -R freeside:freeside ${RT_PATH}/etc; fi
 | 
			
		||||
 | 
			
		||||
install-rt-initialdata:
 | 
			
		||||
	if [ ${RT_ENABLED} -eq 1 ] && [ -d ${RT_PATH} ]; then \
 | 
			
		||||
	  chown -R freeside:freeside ${RT_PATH}/etc; \
 | 
			
		||||
	  install -D -o freeside -g freeside -m 0440 rt/etc/initialdata \
 | 
			
		||||
	  ${RT_PATH}/etc/initialdata; fi
 | 
			
		||||
 | 
			
		||||
configure-torrus:
 | 
			
		||||
	cd torrus; \
 | 
			
		||||
	torrus_user=freeside var_user=freeside var_group=freeside ./configure
 | 
			
		||||
 | 
			
		||||
install-torrus:
 | 
			
		||||
	if [ ${TORRUS_ENABLED} -eq 1 ]; then ( cd torrus; \
 | 
			
		||||
	  make; \
 | 
			
		||||
	  make install; \
 | 
			
		||||
	  perl -p -i -e "\
 | 
			
		||||
	    s'%%%FREESIDE_URL%%%'${FREESIDE_URL}'g;\
 | 
			
		||||
	  " /usr/local/etc/torrus/conf/torrus-siteconfig.pl; \
 | 
			
		||||
	  torrus clearcache \
 | 
			
		||||
	);fi
 | 
			
		||||
 | 
			
		||||
clean:
 | 
			
		||||
	rm -rf masondocs
 | 
			
		||||
	rm -rf httemplate/docs/man
 | 
			
		||||
	rm -rf pod2htmi.tmp
 | 
			
		||||
	rm -rf pod2htmd.tmp
 | 
			
		||||
	-cd FS; \
 | 
			
		||||
	make clean
 | 
			
		||||
	-cd fs_selfservice/FS-SelfService; \
 | 
			
		||||
	make clean
 | 
			
		||||
 | 
			
		||||
#these are probably only useful if you're me...
 | 
			
		||||
 | 
			
		||||
#release: upload-docs
 | 
			
		||||
.PHONY: release
 | 
			
		||||
release:
 | 
			
		||||
	# Update the changelog
 | 
			
		||||
	#./bin/cvs2cl
 | 
			
		||||
	#cvs commit -m "Updated for ${VERSION}" ChangeLog
 | 
			
		||||
 | 
			
		||||
	# Update the RPM specfile
 | 
			
		||||
	#cvs edit ${RPM_SPECFILE}
 | 
			
		||||
	#perl -p -i -e "s/\d+[^\}]+/${VERSION}/ if /%define\s+version\s+(\d+[^\}]+)\}/;" ${RPM_SPECFILE}
 | 
			
		||||
	#perl -p -i -e "s/\d+[^\}]+/1/ if /%define\s+release\s+(\d+[^\}]+)\}/;" ${RPM_SPECFILE}
 | 
			
		||||
	#cvs commit -m "Updated for ${VERSION}" ${RPM_SPECFILE}
 | 
			
		||||
 | 
			
		||||
	# Update the Debian changelog
 | 
			
		||||
	#cvs edit debian/changelog
 | 
			
		||||
	#dch -v ${DEBVERSION} -p "New upstream release"
 | 
			
		||||
	#cvs commit -m "Updated for ${VERSION}" debian/changelog
 | 
			
		||||
 | 
			
		||||
	# Make sure other people's changes are pulled in!
 | 
			
		||||
	git pull
 | 
			
		||||
 | 
			
		||||
	# Tag the release
 | 
			
		||||
	git tag -f ${TAG}
 | 
			
		||||
 | 
			
		||||
	#cd /home/ivan
 | 
			
		||||
	git archive --prefix=freeside-${VERSION}/ ${TAG} | gzip -9 >freeside-${VERSION}.tar.gz
 | 
			
		||||
 | 
			
		||||
	scp freeside-${VERSION}.tar.gz ivan@420.am:/var/www/www.sisd.com/freeside/
 | 
			
		||||
	mv freeside-${VERSION}.tar.gz ..
 | 
			
		||||
 | 
			
		||||
	#these things failing should not make release target fail, so: "|| true"
 | 
			
		||||
 | 
			
		||||
	#kick off vmware update
 | 
			
		||||
	#./BUILD_VMWARE_APPLIANCE ${$TAG} || true
 | 
			
		||||
 | 
			
		||||
	#kick off deb package update
 | 
			
		||||
 | 
			
		||||
	#kick off rpm package update too?
 | 
			
		||||
 | 
			
		||||
	#update web demo?
 | 
			
		||||
 | 
			
		||||
	#update web demo self-service?
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										13
									
								
								lab/vagrant/docker/thefnf/odoo/Dockerfile
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										13
									
								
								lab/vagrant/docker/thefnf/odoo/Dockerfile
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,13 @@
 | 
			
		||||
FROM python:2.7
 | 
			
		||||
RUN apt-get install -y libldap2-dev libsasl2-dev && \
 | 
			
		||||
  adduser odoo --system --group --shell /bin/bash
 | 
			
		||||
USER odoo
 | 
			
		||||
ENV HOME /home/odoo
 | 
			
		||||
ENV PATH $HOME/.local/bin:$PATH
 | 
			
		||||
WORKDIR /home/odoo
 | 
			
		||||
RUN curl http://nightly.odoo.com/8.0/nightly/src/odoo_8.0-latest.tar.gz |tar xz --strip-components 1 && \
 | 
			
		||||
  python setup.py install --user && \
 | 
			
		||||
  python setup.py install --user --single-version-externally-managed --root / # Strips version hash from module directories
 | 
			
		||||
ADD openerp_serverrc /home/odoo/.openerp_serverrc
 | 
			
		||||
EXPOSE 8069 8072
 | 
			
		||||
CMD openerp-server
 | 
			
		||||
							
								
								
									
										62
									
								
								lab/vagrant/docker/thefnf/odoo/openerp_serverrc
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										62
									
								
								lab/vagrant/docker/thefnf/odoo/openerp_serverrc
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,62 @@
 | 
			
		||||
[options]
 | 
			
		||||
addons_path = /home/odoo/.local/lib/python2.7/site-packages/openerp/addons
 | 
			
		||||
admin_passwd = admin
 | 
			
		||||
auto_reload = False
 | 
			
		||||
csv_internal_sep = ,
 | 
			
		||||
data_dir = /home/odoo/.local/share/Odoo
 | 
			
		||||
db_host = postgres
 | 
			
		||||
db_maxconn = 64
 | 
			
		||||
db_name = False
 | 
			
		||||
db_password = odoo
 | 
			
		||||
db_port = 5432
 | 
			
		||||
db_template = template1
 | 
			
		||||
db_user = odoo
 | 
			
		||||
dbfilter = .*
 | 
			
		||||
debug_mode = False
 | 
			
		||||
demo = {}
 | 
			
		||||
email_from = False
 | 
			
		||||
import_partial = 
 | 
			
		||||
limit_memory_hard = 2684354560
 | 
			
		||||
limit_memory_soft = 2147483648
 | 
			
		||||
limit_request = 8192
 | 
			
		||||
limit_time_cpu = 60
 | 
			
		||||
limit_time_real = 120
 | 
			
		||||
list_db = True
 | 
			
		||||
log_db = False
 | 
			
		||||
log_handler = [':INFO']
 | 
			
		||||
log_level = info
 | 
			
		||||
logfile = None
 | 
			
		||||
logrotate = False
 | 
			
		||||
longpolling_port = 8072
 | 
			
		||||
max_cron_threads = 2
 | 
			
		||||
osv_memory_age_limit = 1.0
 | 
			
		||||
osv_memory_count_limit = False
 | 
			
		||||
pg_path = None
 | 
			
		||||
pidfile = None
 | 
			
		||||
proxy_mode = False
 | 
			
		||||
reportgz = False
 | 
			
		||||
secure_cert_file = server.cert
 | 
			
		||||
secure_pkey_file = server.pkey
 | 
			
		||||
server_wide_modules = None
 | 
			
		||||
smtp_password = False
 | 
			
		||||
smtp_port = 25
 | 
			
		||||
smtp_server = localhost
 | 
			
		||||
smtp_ssl = False
 | 
			
		||||
smtp_user = False
 | 
			
		||||
syslog = False
 | 
			
		||||
test_commit = False
 | 
			
		||||
test_enable = False
 | 
			
		||||
test_file = False
 | 
			
		||||
test_report_directory = False
 | 
			
		||||
timezone = False
 | 
			
		||||
translate_modules = ['all']
 | 
			
		||||
unaccent = False
 | 
			
		||||
without_demo = False
 | 
			
		||||
workers = 0
 | 
			
		||||
xmlrpc = True
 | 
			
		||||
xmlrpc_interface = 
 | 
			
		||||
xmlrpc_port = 8069
 | 
			
		||||
xmlrpcs = True
 | 
			
		||||
xmlrpcs_interface = 
 | 
			
		||||
xmlrpcs_port = 8071
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										53
									
								
								mtpconfigs/ovh/shared-router/shorewall/conntrack
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										53
									
								
								mtpconfigs/ovh/shared-router/shorewall/conntrack
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,53 @@
 | 
			
		||||
#
 | 
			
		||||
# Shorewall version 4 - conntrack File
 | 
			
		||||
#
 | 
			
		||||
# For information about entries in this file, type "man shorewall-conntrack"
 | 
			
		||||
#
 | 
			
		||||
##############################################################################################################
 | 
			
		||||
?FORMAT 3
 | 
			
		||||
#ACTION			SOURCE		DESTINATION	PROTO	DEST		SOURCE	USER/		SWITCH
 | 
			
		||||
#								PORT(S)		PORT(S)	GROUP
 | 
			
		||||
?if $AUTOHELPERS && __CT_TARGET
 | 
			
		||||
 | 
			
		||||
?if __AMANDA_HELPER
 | 
			
		||||
CT:helper:amanda:PO	-		-		udp	10080
 | 
			
		||||
?endif
 | 
			
		||||
 | 
			
		||||
?if __FTP_HELPER
 | 
			
		||||
CT:helper:ftp:PO	-		-		tcp	21
 | 
			
		||||
?endif
 | 
			
		||||
 | 
			
		||||
?if __H323_HELPER
 | 
			
		||||
CT:helper:RAS:PO	-		-		udp	1719
 | 
			
		||||
CT:helper:Q.931:PO	-		-		tcp	1720
 | 
			
		||||
?endif
 | 
			
		||||
 | 
			
		||||
?if __IRC_HELPER
 | 
			
		||||
CT:helper:irc:PO	-		-		tcp	6667
 | 
			
		||||
?endif
 | 
			
		||||
 | 
			
		||||
?if __NETBIOS_NS_HELPER
 | 
			
		||||
CT:helper:netbios-ns:PO	-		-		udp	137
 | 
			
		||||
?endif
 | 
			
		||||
 | 
			
		||||
?if __PPTP_HELPER
 | 
			
		||||
CT:helper:pptp:PO	-		-		tcp	1723
 | 
			
		||||
?endif
 | 
			
		||||
 | 
			
		||||
?if __SANE_HELPER
 | 
			
		||||
CT:helper:sane:PO	-		-		tcp	6566
 | 
			
		||||
?endif
 | 
			
		||||
 | 
			
		||||
?if __SIP_HELPER
 | 
			
		||||
CT:helper:sip:PO	-		-		udp	5060
 | 
			
		||||
?endif
 | 
			
		||||
 | 
			
		||||
?if __SNMP_HELPER
 | 
			
		||||
CT:helper:snmp:PO	-		-		udp	161
 | 
			
		||||
?endif
 | 
			
		||||
 | 
			
		||||
?if __TFTP_HELPER
 | 
			
		||||
CT:helper:tftp:PO	-		-		udp	69
 | 
			
		||||
?endif
 | 
			
		||||
 | 
			
		||||
?endif
 | 
			
		||||
							
								
								
									
										13
									
								
								mtpconfigs/ovh/shared-router/shorewall/interfaces
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										13
									
								
								mtpconfigs/ovh/shared-router/shorewall/interfaces
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,13 @@
 | 
			
		||||
#ZONE	INTERFACE	OPTIONS
 | 
			
		||||
rr      eth0     detect       tcpflags,nosmurfs,routefilter,logmartians
 | 
			
		||||
wan     eth1     detect       tcpflags,nosmurfs,routefilter,logmartians,sourceroute=0
 | 
			
		||||
barm    eth2     detect       tcpflags,nosmurfs,routefilter,logmartians
 | 
			
		||||
mgmt    eth3     detect       tcpflags,nosmurfs,routefilter,logmartians
 | 
			
		||||
asn    	eth4     detect       tcpflags,nosmurfs,routefilter,logmartians
 | 
			
		||||
s2l     eth5     detect       tcpflags,nosmurfs,routefilter,logmartians
 | 
			
		||||
fnf     eth6     detect       tcpflags,nosmurfs,routefilter,logmartians
 | 
			
		||||
knel    eth7     detect       tcpflags,nosmurfs,routefilter,logmartians
 | 
			
		||||
tsys    eth8     detect       tcpflags,nosmurfs,routefilter,logmartians
 | 
			
		||||
vpnrwr	tun0	 detect	      dhcp
 | 
			
		||||
vpnauslab	tun1	 detect	      dhcp
 | 
			
		||||
vpnasn2net	tun2	detect dhcp
 | 
			
		||||
							
								
								
									
										19
									
								
								mtpconfigs/ovh/shared-router/shorewall/masq
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										19
									
								
								mtpconfigs/ovh/shared-router/shorewall/masq
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,19 @@
 | 
			
		||||
#
 | 
			
		||||
# Shorewall version 4.0 - Sample Masq file for two-interface configuration.
 | 
			
		||||
# Copyright (C) 2006 by the Shorewall Team
 | 
			
		||||
#
 | 
			
		||||
# This library is free software; you can redistribute it and/or
 | 
			
		||||
# modify it under the terms of the GNU Lesser General Public
 | 
			
		||||
# License as published by the Free Software Foundation; either
 | 
			
		||||
# version 2.1 of the License, or (at your option) any later version.
 | 
			
		||||
#
 | 
			
		||||
# See the file README.txt for further details.
 | 
			
		||||
#------------------------------------------------------------------------------
 | 
			
		||||
# For information about entries in this file, type "man shorewall-masq"
 | 
			
		||||
################################################################################################################
 | 
			
		||||
#INTERFACE:DEST		SOURCE		ADDRESS		PROTO	PORT(S)	IPSEC	MARK	USER/	SWITCH	ORIGINAL
 | 
			
		||||
#											GROUP		DEST
 | 
			
		||||
eth1			10.0.0.0/8,\
 | 
			
		||||
			169.254.0.0/16,\
 | 
			
		||||
			172.16.0.0/12,\
 | 
			
		||||
			192.168.0.0/16
 | 
			
		||||
							
								
								
									
										28
									
								
								mtpconfigs/ovh/shared-router/shorewall/params
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										28
									
								
								mtpconfigs/ovh/shared-router/shorewall/params
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,28 @@
 | 
			
		||||
#
 | 
			
		||||
# Shorewall version 4 - Params File
 | 
			
		||||
#
 | 
			
		||||
# /etc/shorewall/params
 | 
			
		||||
#
 | 
			
		||||
#	Assign any variables that you need here.
 | 
			
		||||
#
 | 
			
		||||
#	It is suggested that variable names begin with an upper case letter
 | 
			
		||||
#	to distinguish them from variables used internally within the
 | 
			
		||||
#	Shorewall programs
 | 
			
		||||
#
 | 
			
		||||
#	Example:
 | 
			
		||||
#
 | 
			
		||||
#		NET_IF=eth0
 | 
			
		||||
#		NET_BCAST=130.252.100.255
 | 
			
		||||
#		NET_OPTIONS=routefilter,norfc1918
 | 
			
		||||
#
 | 
			
		||||
#	Example (/etc/shorewall/interfaces record):
 | 
			
		||||
#
 | 
			
		||||
#		net	$NET_IF		$NET_BCAST	$NET_OPTIONS
 | 
			
		||||
#
 | 
			
		||||
#	The result will be the same as if the record had been written
 | 
			
		||||
#
 | 
			
		||||
#		net	eth0		130.252.100.255	routefilter,norfc1918
 | 
			
		||||
#
 | 
			
		||||
###############################################################################
 | 
			
		||||
 | 
			
		||||
#LAST LINE -- DO NOT REMOVE
 | 
			
		||||
							
								
								
									
										20
									
								
								mtpconfigs/ovh/shared-router/shorewall/policy
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										20
									
								
								mtpconfigs/ovh/shared-router/shorewall/policy
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,20 @@
 | 
			
		||||
#SOURCE ZONE     DESTINATION ZONE    POLICY     LOG     LIMIT:BURST
 | 
			
		||||
#                                               LEVEL
 | 
			
		||||
#Allow the firewall to get out to the net. Updates/e-mail alerts etc. I could pinhole this, but meh COME AT ME NSA
 | 
			
		||||
$FW		wan		         ACCEPT
 | 
			
		||||
 | 
			
		||||
#Road warrior is trusted. It serves as an extension of the mgmt net. 
 | 
			
		||||
vpnrwr 		all		 ACCEPT
 | 
			
		||||
 | 
			
		||||
#Anything transisting the vpn link between ausprod-core-rtr01 and tsys-rtr has already been passed firewall rules and IPS inspection.
 | 
			
		||||
#Otherwise I wouldn't allow this
 | 
			
		||||
vpnauslab 	all		 ACCEPT
 | 
			
		||||
 | 
			
		||||
#Drop everything inbound from the big bad world that isn't explicitly allowed. 
 | 
			
		||||
#Cause the net is where the NSA lives
 | 
			
		||||
wan              all                 DROP
 | 
			
		||||
 | 
			
		||||
#Drop everything that isn't explicitly allowed. 
 | 
			
		||||
#Make explicit rules for everything yo. The NSA says you should.  Duh. 
 | 
			
		||||
# #state-sponsored-malware #stuxnet-was-an-inside-job
 | 
			
		||||
all 		all			 REJECT info
 | 
			
		||||
							
								
								
									
										113
									
								
								mtpconfigs/ovh/shared-router/shorewall/rules
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										113
									
								
								mtpconfigs/ovh/shared-router/shorewall/rules
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,113 @@
 | 
			
		||||
#ACTION   SOURCE     DEST                 PROTO      DEST PORT(S)   SOURCE    ORIGINAL
 | 
			
		||||
###########################################################################################################################################################################################################
 | 
			
		||||
#Inbound DNAT forwarding from WAN to various zone/ip pinholes
 | 
			
		||||
###########################################################################################################################################################################################################
 | 
			
		||||
#########################################################
 | 
			
		||||
#KNEL rules
 | 
			
		||||
#158.69.183.165/29 eth1:2
 | 
			
		||||
#########################################################
 | 
			
		||||
DNAT      wan		knel:10.253.8.72      tcp        443            -         158.69.183.165
 | 
			
		||||
DNAT      wan        knel:10.253.8.72      tcp        80             -         158.69.183.165
 | 
			
		||||
DNAT      wan        knel:10.253.8.72      tcp        993            -         158.69.183.165
 | 
			
		||||
DNAT      wan        knel:10.253.8.72      tcp        25             -         158.69.183.165
 | 
			
		||||
DNAT      wan       knel:10.253.8.72      tcp        465            -         158.69.183.165
 | 
			
		||||
DNAT      wan        knel:10.253.8.72      tcp        5222           -         158.69.183.165
 | 
			
		||||
 | 
			
		||||
#########################################################
 | 
			
		||||
#TSYS rules
 | 
			
		||||
#158.69.183.161/29 eth1
 | 
			
		||||
#########################################################
 | 
			
		||||
DNAT      wan	tsys:10.253.9.78      tcp        443            -         158.69.183.161
 | 
			
		||||
DNAT      wan        tsys:10.253.9.78      tcp        80             -         158.69.183.161
 | 
			
		||||
DNAT      wan        tsys:10.253.9.78      tcp        25             -         158.69.183.161
 | 
			
		||||
DNAT      wan        tsys:10.253.9.78      tcp        465            -         158.69.183.161
 | 
			
		||||
DNAT      wan        tsys:10.253.9.78      tcp        5222           -         158.69.183.161
 | 
			
		||||
 | 
			
		||||
#########################################################
 | 
			
		||||
#RackRental WAN rules
 | 
			
		||||
#158.69.183.164/29 eth1:1
 | 
			
		||||
#########################################################
 | 
			
		||||
#158.69.183.164/29 
 | 
			
		||||
DNAT      wan	rr:10.253.6.81      tcp        443            -         158.69.183.164
 | 
			
		||||
DNAT      wan	rr:10.253.6.81      tcp        80             -         158.69.183.164
 | 
			
		||||
 | 
			
		||||
############################################################
 | 
			
		||||
#S2l/asn WAN rules handled by their upstream routers/admins
 | 
			
		||||
############################################################
 | 
			
		||||
 | 
			
		||||
###########################################################################################################################################################################################################
 | 
			
		||||
#site to site and road warrior VPN rules
 | 
			
		||||
###########################################################################################################################################################################################################
 | 
			
		||||
 | 
			
		||||
#Allow road warrior connectivity from anywhere
 | 
			
		||||
ACCEPT    wan 		fw 	udp 443
 | 
			
		||||
 | 
			
		||||
#Allow auslab site to site vpn
 | 
			
		||||
ACCEPT    wan 	fw 	tcp 1195
 | 
			
		||||
ACCEPT    wan	fw 	udp 1195
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
############################################################
 | 
			
		||||
#FW rules for RoadWarrior VPN
 | 
			
		||||
############################################################
 | 
			
		||||
ACCEPT all vpnrwr all 
 | 
			
		||||
 | 
			
		||||
############################################################
 | 
			
		||||
#FW rules for STS VPN - AUSLAB
 | 
			
		||||
#ACCEPT loc vpnauslab all
 | 
			
		||||
############################################################
 | 
			
		||||
ACCEPT vpnauslab all all
 | 
			
		||||
ACCEPT $FW vpnauslab all
 | 
			
		||||
 | 
			
		||||
############################################################
 | 
			
		||||
#FW rules for STS VPN - client - asn2net
 | 
			
		||||
#Lock this down soon
 | 
			
		||||
############################################################
 | 
			
		||||
ACCEPT $FW vpnasn2net all
 | 
			
		||||
ACCEPT vpnasn2net $FW all
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
###########################################################################################################################################################################################################
 | 
			
		||||
#outbound from various local nets and the firewall to WAN
 | 
			
		||||
###########################################################################################################################################################################################################
 | 
			
		||||
ACCEPT rr wan all #Lock this down soon
 | 
			
		||||
ACCEPT rr tsys all #Lock this down soon
 | 
			
		||||
ACCEPT knel,tsys,mgmt wan all
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#Temp rules to get stuff working..
 | 
			
		||||
ACCEPT $FW all all #Fw can access everything for now, Lock this down later
 | 
			
		||||
ACCEPT mgmt $FW
 | 
			
		||||
 | 
			
		||||
ACCEPT vpnauslab mgmt all
 | 
			
		||||
ACCEPT vpnauslab all all
 | 
			
		||||
 | 
			
		||||
###########################################################################################################################################################################################################
 | 
			
		||||
#intra zone pinhole rules
 | 
			
		||||
###########################################################################################################################################################################################################
 | 
			
		||||
ACCEPT vpnrwr,rr,barm,tsys,knel,fnf mgmt:10.253.3.86 udp 53
 | 
			
		||||
ACCEPT vpnrwr,rr,barm,tsys,knel,fnf mgmt:10.253.3.86 tcp 53
 | 
			
		||||
 | 
			
		||||
###########################################################################################################################################################################################################
 | 
			
		||||
#intra zone wide rules
 | 
			
		||||
###########################################################################################################################################################################################################
 | 
			
		||||
#Mgmt can hit everything yo, cause it's fucking management with a capital M
 | 
			
		||||
ACCEPT mgmt barm,tsys,knel,fnf,vpnrwr,asn,s2l,vpnauslab all
 | 
			
		||||
 | 
			
		||||
#Ad replication rule
 | 
			
		||||
ACCEPT	mgmt:10.253.3.86 vpnauslab:10.251.2.98 all
 | 
			
		||||
ACCEPT	vpnauslab:10.251.2.98 mgmt:10.253.3.86 all
 | 
			
		||||
 | 
			
		||||
#Zenoss rule
 | 
			
		||||
ACCEPT mgmt:10.253.3.77 all all
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#Brendan mgmt access
 | 
			
		||||
ACCEPT vpnasn2net:10.30.1.2 mgmt:10.253.3.86 udp 53
 | 
			
		||||
ACCEPT vpnasn2net:10.30.1.2 mgmt:10.253.3.86 tcp 53
 | 
			
		||||
ACCEPT vpnasn2net:10.30.3.0/24 $FW
 | 
			
		||||
ACCEPT vpnasn2net:10.30.2.0/24 $FW
 | 
			
		||||
ACCEPT vpnasn2net:10.30.2.0/24 mgmt
 | 
			
		||||
ACCEPT vpnasn2net:10.30.3.0/24 mgmt
 | 
			
		||||
							
								
								
									
										274
									
								
								mtpconfigs/ovh/shared-router/shorewall/shorewall.conf
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										274
									
								
								mtpconfigs/ovh/shared-router/shorewall/shorewall.conf
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,274 @@
 | 
			
		||||
###############################################################################
 | 
			
		||||
#
 | 
			
		||||
#  Shorewall Version 4 -- /etc/shorewall/shorewall.conf
 | 
			
		||||
#
 | 
			
		||||
#  For information about the settings in this file, type "man shorewall.conf"
 | 
			
		||||
#
 | 
			
		||||
#  Manpage also online at http://www.shorewall.net/manpages/shorewall.conf.html
 | 
			
		||||
###############################################################################
 | 
			
		||||
#		       S T A R T U P   E N A B L E D
 | 
			
		||||
###############################################################################
 | 
			
		||||
 | 
			
		||||
STARTUP_ENABLED=Yes
 | 
			
		||||
 | 
			
		||||
###############################################################################
 | 
			
		||||
#		              V E R B O S I T Y
 | 
			
		||||
###############################################################################
 | 
			
		||||
 | 
			
		||||
VERBOSITY=1
 | 
			
		||||
 | 
			
		||||
###############################################################################
 | 
			
		||||
#		                L O G G I N G
 | 
			
		||||
###############################################################################
 | 
			
		||||
 | 
			
		||||
BLACKLIST_LOG_LEVEL=
 | 
			
		||||
 | 
			
		||||
INVALID_LOG_LEVEL=
 | 
			
		||||
 | 
			
		||||
LOG_MARTIANS=Yes
 | 
			
		||||
 | 
			
		||||
LOG_VERBOSITY=2
 | 
			
		||||
 | 
			
		||||
LOGALLNEW=
 | 
			
		||||
 | 
			
		||||
LOGFILE="/var/log/firewall.log"
 | 
			
		||||
 | 
			
		||||
LOGFORMAT="%s:%s:"
 | 
			
		||||
 | 
			
		||||
LOGTAGONLY=No
 | 
			
		||||
 | 
			
		||||
LOGLIMIT=
 | 
			
		||||
 | 
			
		||||
MACLIST_LOG_LEVEL=info
 | 
			
		||||
 | 
			
		||||
RELATED_LOG_LEVEL=
 | 
			
		||||
 | 
			
		||||
RPFILTER_LOG_LEVEL=info
 | 
			
		||||
 | 
			
		||||
SFILTER_LOG_LEVEL=info
 | 
			
		||||
 | 
			
		||||
SMURF_LOG_LEVEL=info
 | 
			
		||||
 | 
			
		||||
STARTUP_LOG=/var/log/shorewall-init.log
 | 
			
		||||
 | 
			
		||||
TCP_FLAGS_LOG_LEVEL=info
 | 
			
		||||
 | 
			
		||||
UNTRACKED_LOG_LEVEL=
 | 
			
		||||
 | 
			
		||||
###############################################################################
 | 
			
		||||
#	L O C A T I O N	  O F	F I L E S   A N D   D I R E C T O R I E S
 | 
			
		||||
###############################################################################
 | 
			
		||||
 | 
			
		||||
ARPTABLES=
 | 
			
		||||
 | 
			
		||||
CONFIG_PATH="${CONFDIR}/shorewall:${SHAREDIR}/shorewall"
 | 
			
		||||
 | 
			
		||||
GEOIPDIR=/usr/share/xt_geoip/LE
 | 
			
		||||
 | 
			
		||||
IPTABLES=
 | 
			
		||||
 | 
			
		||||
IP=
 | 
			
		||||
 | 
			
		||||
IPSET=
 | 
			
		||||
 | 
			
		||||
LOCKFILE=
 | 
			
		||||
 | 
			
		||||
MODULESDIR=
 | 
			
		||||
 | 
			
		||||
NFACCT=
 | 
			
		||||
 | 
			
		||||
PATH="/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/bin:/usr/local/sbin"
 | 
			
		||||
 | 
			
		||||
PERL=/usr/bin/perl
 | 
			
		||||
 | 
			
		||||
RESTOREFILE=restore
 | 
			
		||||
 | 
			
		||||
SHOREWALL_SHELL=/bin/sh
 | 
			
		||||
 | 
			
		||||
SUBSYSLOCK=""
 | 
			
		||||
 | 
			
		||||
TC=
 | 
			
		||||
 | 
			
		||||
###############################################################################
 | 
			
		||||
#		D E F A U L T   A C T I O N S / M A C R O S
 | 
			
		||||
###############################################################################
 | 
			
		||||
 | 
			
		||||
ACCEPT_DEFAULT=none
 | 
			
		||||
DROP_DEFAULT=Drop
 | 
			
		||||
NFQUEUE_DEFAULT=none
 | 
			
		||||
QUEUE_DEFAULT=none
 | 
			
		||||
REJECT_DEFAULT=Reject
 | 
			
		||||
 | 
			
		||||
###############################################################################
 | 
			
		||||
#                        R S H / R C P  C O M M A N D S
 | 
			
		||||
###############################################################################
 | 
			
		||||
 | 
			
		||||
RCP_COMMAND='scp ${files} ${root}@${system}:${destination}'
 | 
			
		||||
RSH_COMMAND='ssh ${root}@${system} ${command}'
 | 
			
		||||
 | 
			
		||||
###############################################################################
 | 
			
		||||
#			F I R E W A L L	  O P T I O N S
 | 
			
		||||
###############################################################################
 | 
			
		||||
 | 
			
		||||
ACCOUNTING=Yes
 | 
			
		||||
 | 
			
		||||
ACCOUNTING_TABLE=filter
 | 
			
		||||
 | 
			
		||||
ADD_IP_ALIASES=No
 | 
			
		||||
 | 
			
		||||
ADD_SNAT_ALIASES=No
 | 
			
		||||
 | 
			
		||||
ADMINISABSENTMINDED=Yes
 | 
			
		||||
 | 
			
		||||
IGNOREUNKNOWNVARIABLES=No
 | 
			
		||||
 | 
			
		||||
AUTOCOMMENT=Yes
 | 
			
		||||
 | 
			
		||||
AUTOHELPERS=Yes
 | 
			
		||||
 | 
			
		||||
AUTOMAKE=No
 | 
			
		||||
 | 
			
		||||
BLACKLIST="NEW,INVALID,UNTRACKED"
 | 
			
		||||
 | 
			
		||||
CHAIN_SCRIPTS=Yes
 | 
			
		||||
 | 
			
		||||
CLAMPMSS=No
 | 
			
		||||
 | 
			
		||||
CLEAR_TC=Yes
 | 
			
		||||
 | 
			
		||||
COMPLETE=No
 | 
			
		||||
 | 
			
		||||
DEFER_DNS_RESOLUTION=Yes
 | 
			
		||||
 | 
			
		||||
DELETE_THEN_ADD=Yes
 | 
			
		||||
 | 
			
		||||
DETECT_DNAT_IPADDRS=No
 | 
			
		||||
 | 
			
		||||
DISABLE_IPV6=No
 | 
			
		||||
 | 
			
		||||
DONT_LOAD=
 | 
			
		||||
 | 
			
		||||
DYNAMIC_BLACKLIST=Yes
 | 
			
		||||
 | 
			
		||||
EXPAND_POLICIES=Yes
 | 
			
		||||
 | 
			
		||||
EXPORTMODULES=Yes
 | 
			
		||||
 | 
			
		||||
FASTACCEPT=No
 | 
			
		||||
 | 
			
		||||
FORWARD_CLEAR_MARK=
 | 
			
		||||
 | 
			
		||||
HELPERS=
 | 
			
		||||
 | 
			
		||||
IMPLICIT_CONTINUE=No
 | 
			
		||||
 | 
			
		||||
IPSET_WARNINGS=Yes
 | 
			
		||||
 | 
			
		||||
IP_FORWARDING=On
 | 
			
		||||
 | 
			
		||||
KEEP_RT_TABLES=No
 | 
			
		||||
 | 
			
		||||
LEGACY_FASTSTART=Yes
 | 
			
		||||
 | 
			
		||||
LOAD_HELPERS_ONLY=No
 | 
			
		||||
 | 
			
		||||
MACLIST_TABLE=filter
 | 
			
		||||
 | 
			
		||||
MACLIST_TTL=
 | 
			
		||||
 | 
			
		||||
MANGLE_ENABLED=Yes
 | 
			
		||||
 | 
			
		||||
MAPOLDACTIONS=No
 | 
			
		||||
 | 
			
		||||
MARK_IN_FORWARD_CHAIN=No
 | 
			
		||||
 | 
			
		||||
MODULE_SUFFIX=ko
 | 
			
		||||
 | 
			
		||||
MULTICAST=Yes
 | 
			
		||||
 | 
			
		||||
MUTEX_TIMEOUT=60
 | 
			
		||||
 | 
			
		||||
NULL_ROUTE_RFC1918=No
 | 
			
		||||
 | 
			
		||||
OPTIMIZE=0
 | 
			
		||||
 | 
			
		||||
OPTIMIZE_ACCOUNTING=No
 | 
			
		||||
 | 
			
		||||
REJECT_ACTION=
 | 
			
		||||
 | 
			
		||||
REQUIRE_INTERFACE=No
 | 
			
		||||
 | 
			
		||||
RESTORE_DEFAULT_ROUTE=Yes
 | 
			
		||||
 | 
			
		||||
RESTORE_ROUTEMARKS=Yes
 | 
			
		||||
 | 
			
		||||
RETAIN_ALIASES=No
 | 
			
		||||
 | 
			
		||||
ROUTE_FILTER=Yes
 | 
			
		||||
 | 
			
		||||
SAVE_ARPTABLES=No
 | 
			
		||||
 | 
			
		||||
SAVE_IPSETS=No
 | 
			
		||||
 | 
			
		||||
TC_ENABLED=Internal
 | 
			
		||||
 | 
			
		||||
TC_EXPERT=No
 | 
			
		||||
 | 
			
		||||
TC_PRIOMAP="2 3 3 3 2 3 1 1 2 2 2 2 2 2 2 2"
 | 
			
		||||
 | 
			
		||||
TRACK_PROVIDERS=No
 | 
			
		||||
 | 
			
		||||
TRACK_RULES=No
 | 
			
		||||
 | 
			
		||||
USE_DEFAULT_RT=No
 | 
			
		||||
 | 
			
		||||
USE_PHYSICAL_NAMES=No
 | 
			
		||||
 | 
			
		||||
USE_RT_NAMES=No
 | 
			
		||||
 | 
			
		||||
WARNOLDCAPVERSION=Yes
 | 
			
		||||
 | 
			
		||||
ZONE2ZONE=2
 | 
			
		||||
 | 
			
		||||
###############################################################################
 | 
			
		||||
#			P A C K E T   D I S P O S I T I O N
 | 
			
		||||
###############################################################################
 | 
			
		||||
 | 
			
		||||
BLACKLIST_DISPOSITION=DROP
 | 
			
		||||
 | 
			
		||||
INVALID_DISPOSITION=CONTINUE
 | 
			
		||||
 | 
			
		||||
MACLIST_DISPOSITION=REJECT
 | 
			
		||||
 | 
			
		||||
RELATED_DISPOSITION=ACCEPT
 | 
			
		||||
 | 
			
		||||
RPFILTER_DISPOSITION=DROP
 | 
			
		||||
 | 
			
		||||
SMURF_DISPOSITION=DROP
 | 
			
		||||
 | 
			
		||||
SFILTER_DISPOSITION=DROP
 | 
			
		||||
 | 
			
		||||
TCP_FLAGS_DISPOSITION=DROP
 | 
			
		||||
 | 
			
		||||
UNTRACKED_DISPOSITION=CONTINUE
 | 
			
		||||
 | 
			
		||||
################################################################################
 | 
			
		||||
#			P A C K E T  M A R K  L A Y O U T
 | 
			
		||||
################################################################################
 | 
			
		||||
 | 
			
		||||
TC_BITS=
 | 
			
		||||
 | 
			
		||||
PROVIDER_BITS=
 | 
			
		||||
 | 
			
		||||
PROVIDER_OFFSET=
 | 
			
		||||
 | 
			
		||||
MASK_BITS=
 | 
			
		||||
 | 
			
		||||
ZONE_BITS=0
 | 
			
		||||
 | 
			
		||||
################################################################################
 | 
			
		||||
#                            L E G A C Y  O P T I O N
 | 
			
		||||
#                      D O  N O T  D E L E T E  O R  A L T E R
 | 
			
		||||
################################################################################
 | 
			
		||||
 | 
			
		||||
IPSECFILE=zones
 | 
			
		||||
							
								
								
									
										14
									
								
								mtpconfigs/ovh/shared-router/shorewall/zones
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										14
									
								
								mtpconfigs/ovh/shared-router/shorewall/zones
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,14 @@
 | 
			
		||||
#ZONE   TYPE             OPTIONS
 | 
			
		||||
fw      firewall
 | 
			
		||||
rr	ipv4
 | 
			
		||||
wan     ipv4
 | 
			
		||||
barm	ipv4
 | 
			
		||||
mgmt	ipv4
 | 
			
		||||
asn	ipv4
 | 
			
		||||
s2l	ipv4
 | 
			
		||||
fnf	ipv4
 | 
			
		||||
knel	ipv4
 | 
			
		||||
tsys	ipv4
 | 
			
		||||
vpnrwr	ipv4
 | 
			
		||||
vpnauslab	ipv4
 | 
			
		||||
vpnasn2net	ipv4
 | 
			
		||||
							
								
								
									
										230
									
								
								rubix/Monitoring/mibs/LM-SENSORS-MIB
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										230
									
								
								rubix/Monitoring/mibs/LM-SENSORS-MIB
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,230 @@
 | 
			
		||||
LM-SENSORS-MIB DEFINITIONS ::= BEGIN
 | 
			
		||||
 | 
			
		||||
--
 | 
			
		||||
-- Derived from the original VEST-INTERNETT-MIB. Open issues:
 | 
			
		||||
--
 | 
			
		||||
-- (a) where to register this MIB?
 | 
			
		||||
-- (b) use not-accessible for diskIOIndex?
 | 
			
		||||
--
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
IMPORTS
 | 
			
		||||
    MODULE-IDENTITY, OBJECT-TYPE, Integer32, Gauge32
 | 
			
		||||
        FROM SNMPv2-SMI
 | 
			
		||||
    DisplayString
 | 
			
		||||
        FROM SNMPv2-TC
 | 
			
		||||
    ucdExperimental
 | 
			
		||||
        FROM UCD-SNMP-MIB;
 | 
			
		||||
 | 
			
		||||
lmSensorsMIB MODULE-IDENTITY
 | 
			
		||||
    LAST-UPDATED "200011050000Z"
 | 
			
		||||
    ORGANIZATION "AdamsNames Ltd"
 | 
			
		||||
    CONTACT-INFO    
 | 
			
		||||
        "Primary Contact: M J Oldfield
 | 
			
		||||
         email:     m@mail.tc"
 | 
			
		||||
    DESCRIPTION
 | 
			
		||||
        "This MIB module defines objects for lm_sensor derived data."
 | 
			
		||||
    REVISION     "200011050000Z"
 | 
			
		||||
    DESCRIPTION
 | 
			
		||||
        "Derived from DISKIO-MIB ex UCD."
 | 
			
		||||
    ::= { lmSensors 1 }
 | 
			
		||||
 | 
			
		||||
lmSensors      OBJECT IDENTIFIER ::= { ucdExperimental 16 }
 | 
			
		||||
 | 
			
		||||
--
 | 
			
		||||
 | 
			
		||||
lmTempSensorsTable OBJECT-TYPE
 | 
			
		||||
    SYNTAX      SEQUENCE OF LMTempSensorsEntry
 | 
			
		||||
    MAX-ACCESS  not-accessible
 | 
			
		||||
    STATUS      current
 | 
			
		||||
    DESCRIPTION
 | 
			
		||||
        "Table of temperature sensors and their values."
 | 
			
		||||
    ::= { lmSensors 2 }
 | 
			
		||||
 | 
			
		||||
lmTempSensorsEntry OBJECT-TYPE
 | 
			
		||||
    SYNTAX      LMTempSensorsEntry
 | 
			
		||||
    MAX-ACCESS  not-accessible
 | 
			
		||||
    STATUS      current
 | 
			
		||||
    DESCRIPTION
 | 
			
		||||
        "An entry containing a device and its statistics."
 | 
			
		||||
    INDEX       { lmTempSensorsIndex }
 | 
			
		||||
    ::= { lmTempSensorsTable 1 }
 | 
			
		||||
 | 
			
		||||
LMTempSensorsEntry ::= SEQUENCE {
 | 
			
		||||
    lmTempSensorsIndex    Integer32,
 | 
			
		||||
    lmTempSensorsDevice   DisplayString,
 | 
			
		||||
    lmTempSensorsValue    Gauge32
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
lmTempSensorsIndex OBJECT-TYPE
 | 
			
		||||
    SYNTAX      Integer32 (0..65535)
 | 
			
		||||
    MAX-ACCESS  read-only
 | 
			
		||||
    STATUS      current
 | 
			
		||||
    DESCRIPTION
 | 
			
		||||
        "Reference index for each observed device."
 | 
			
		||||
    ::= { lmTempSensorsEntry 1 }
 | 
			
		||||
 | 
			
		||||
lmTempSensorsDevice OBJECT-TYPE
 | 
			
		||||
    SYNTAX      DisplayString
 | 
			
		||||
    MAX-ACCESS  read-only
 | 
			
		||||
    STATUS      current
 | 
			
		||||
    DESCRIPTION
 | 
			
		||||
        "The name of the temperature sensor we are reading."
 | 
			
		||||
    ::= { lmTempSensorsEntry 2 }
 | 
			
		||||
 | 
			
		||||
lmTempSensorsValue OBJECT-TYPE
 | 
			
		||||
    SYNTAX      Gauge32
 | 
			
		||||
    MAX-ACCESS  read-only
 | 
			
		||||
    STATUS      current
 | 
			
		||||
    DESCRIPTION
 | 
			
		||||
        "The temperature of this sensor in mC."
 | 
			
		||||
    ::= { lmTempSensorsEntry 3 }
 | 
			
		||||
--
 | 
			
		||||
 | 
			
		||||
lmFanSensorsTable OBJECT-TYPE
 | 
			
		||||
    SYNTAX      SEQUENCE OF LMFanSensorsEntry
 | 
			
		||||
    MAX-ACCESS  not-accessible
 | 
			
		||||
    STATUS      current
 | 
			
		||||
    DESCRIPTION
 | 
			
		||||
        "Table of fan sensors and their values."
 | 
			
		||||
    ::= { lmSensors 3 }
 | 
			
		||||
 | 
			
		||||
lmFanSensorsEntry OBJECT-TYPE
 | 
			
		||||
    SYNTAX      LMFanSensorsEntry
 | 
			
		||||
    MAX-ACCESS  not-accessible
 | 
			
		||||
    STATUS      current
 | 
			
		||||
    DESCRIPTION
 | 
			
		||||
        "An entry containing a device and its statistics."
 | 
			
		||||
    INDEX       { lmFanSensorsIndex }
 | 
			
		||||
    ::= { lmFanSensorsTable 1 }
 | 
			
		||||
 | 
			
		||||
LMFanSensorsEntry ::= SEQUENCE {
 | 
			
		||||
    lmFanSensorsIndex    Integer32,
 | 
			
		||||
    lmFanSensorsDevice   DisplayString,
 | 
			
		||||
    lmFanSensorsValue    Gauge32
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
lmFanSensorsIndex OBJECT-TYPE
 | 
			
		||||
    SYNTAX      Integer32 (0..65535)
 | 
			
		||||
    MAX-ACCESS  read-only
 | 
			
		||||
    STATUS      current
 | 
			
		||||
    DESCRIPTION
 | 
			
		||||
        "Reference index for each observed device."
 | 
			
		||||
    ::= { lmFanSensorsEntry 1 }
 | 
			
		||||
 | 
			
		||||
lmFanSensorsDevice OBJECT-TYPE
 | 
			
		||||
    SYNTAX      DisplayString
 | 
			
		||||
    MAX-ACCESS  read-only
 | 
			
		||||
    STATUS      current
 | 
			
		||||
    DESCRIPTION
 | 
			
		||||
        "The name of the fan sensor we are reading."
 | 
			
		||||
    ::= { lmFanSensorsEntry 2 }
 | 
			
		||||
 | 
			
		||||
lmFanSensorsValue OBJECT-TYPE
 | 
			
		||||
    SYNTAX      Gauge32
 | 
			
		||||
    MAX-ACCESS  read-only
 | 
			
		||||
    STATUS      current
 | 
			
		||||
    DESCRIPTION
 | 
			
		||||
        "The rotation speed of the fan in RPM."
 | 
			
		||||
    ::= { lmFanSensorsEntry 3 }
 | 
			
		||||
 | 
			
		||||
--
 | 
			
		||||
 | 
			
		||||
lmVoltSensorsTable OBJECT-TYPE
 | 
			
		||||
    SYNTAX      SEQUENCE OF LMVoltSensorsEntry
 | 
			
		||||
    MAX-ACCESS  not-accessible
 | 
			
		||||
    STATUS      current
 | 
			
		||||
    DESCRIPTION
 | 
			
		||||
        "Table of voltage sensors and their values."
 | 
			
		||||
    ::= { lmSensors 4 }
 | 
			
		||||
 | 
			
		||||
lmVoltSensorsEntry OBJECT-TYPE
 | 
			
		||||
    SYNTAX      LMVoltSensorsEntry
 | 
			
		||||
    MAX-ACCESS  not-accessible
 | 
			
		||||
    STATUS      current
 | 
			
		||||
    DESCRIPTION
 | 
			
		||||
        "An entry containing a device and its statistics."
 | 
			
		||||
    INDEX       { lmVoltSensorsIndex }
 | 
			
		||||
    ::= { lmVoltSensorsTable 1 }
 | 
			
		||||
 | 
			
		||||
LMVoltSensorsEntry ::= SEQUENCE {
 | 
			
		||||
    lmVoltSensorsIndex    Integer32,
 | 
			
		||||
    lmVoltSensorsDevice   DisplayString,
 | 
			
		||||
    lmVoltSensorsValue    Gauge32
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
lmVoltSensorsIndex OBJECT-TYPE
 | 
			
		||||
    SYNTAX      Integer32 (0..65535)
 | 
			
		||||
    MAX-ACCESS  read-only
 | 
			
		||||
    STATUS      current
 | 
			
		||||
    DESCRIPTION
 | 
			
		||||
        "Reference index for each observed device."
 | 
			
		||||
    ::= { lmVoltSensorsEntry 1 }
 | 
			
		||||
 | 
			
		||||
lmVoltSensorsDevice OBJECT-TYPE
 | 
			
		||||
    SYNTAX      DisplayString
 | 
			
		||||
    MAX-ACCESS  read-only
 | 
			
		||||
    STATUS      current
 | 
			
		||||
    DESCRIPTION
 | 
			
		||||
        "The name of the device we are reading."
 | 
			
		||||
    ::= { lmVoltSensorsEntry 2 }
 | 
			
		||||
 | 
			
		||||
lmVoltSensorsValue OBJECT-TYPE
 | 
			
		||||
    SYNTAX      Gauge32
 | 
			
		||||
    MAX-ACCESS  read-only
 | 
			
		||||
    STATUS      current
 | 
			
		||||
    DESCRIPTION
 | 
			
		||||
        "The voltage in mV."
 | 
			
		||||
    ::= { lmVoltSensorsEntry 3 }
 | 
			
		||||
 | 
			
		||||
--
 | 
			
		||||
 | 
			
		||||
lmMiscSensorsTable OBJECT-TYPE
 | 
			
		||||
    SYNTAX      SEQUENCE OF LMMiscSensorsEntry
 | 
			
		||||
    MAX-ACCESS  not-accessible
 | 
			
		||||
    STATUS      current
 | 
			
		||||
    DESCRIPTION
 | 
			
		||||
        "Table of miscellaneous sensor devices and their values."
 | 
			
		||||
    ::= { lmSensors 5 }
 | 
			
		||||
 | 
			
		||||
lmMiscSensorsEntry OBJECT-TYPE
 | 
			
		||||
    SYNTAX      LMMiscSensorsEntry
 | 
			
		||||
    MAX-ACCESS  not-accessible
 | 
			
		||||
    STATUS      current
 | 
			
		||||
    DESCRIPTION
 | 
			
		||||
        "An entry containing a device and its statistics."
 | 
			
		||||
    INDEX       { lmMiscSensorsIndex }
 | 
			
		||||
    ::= { lmMiscSensorsTable 1 }
 | 
			
		||||
 | 
			
		||||
LMMiscSensorsEntry ::= SEQUENCE {
 | 
			
		||||
    lmMiscSensorsIndex    Integer32,
 | 
			
		||||
    lmMiscSensorsDevice   DisplayString,
 | 
			
		||||
    lmMiscSensorsValue    Gauge32
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
lmMiscSensorsIndex OBJECT-TYPE
 | 
			
		||||
    SYNTAX      Integer32 (0..65535)
 | 
			
		||||
    MAX-ACCESS  read-only
 | 
			
		||||
    STATUS      current
 | 
			
		||||
    DESCRIPTION
 | 
			
		||||
        "Reference index for each observed device."
 | 
			
		||||
    ::= { lmMiscSensorsEntry 1 }
 | 
			
		||||
 | 
			
		||||
lmMiscSensorsDevice OBJECT-TYPE
 | 
			
		||||
    SYNTAX      DisplayString
 | 
			
		||||
    MAX-ACCESS  read-only
 | 
			
		||||
    STATUS      current
 | 
			
		||||
    DESCRIPTION
 | 
			
		||||
        "The name of the device we are reading."
 | 
			
		||||
    ::= { lmMiscSensorsEntry 2 }
 | 
			
		||||
 | 
			
		||||
lmMiscSensorsValue OBJECT-TYPE
 | 
			
		||||
    SYNTAX      Gauge32
 | 
			
		||||
    MAX-ACCESS  read-only
 | 
			
		||||
    STATUS      current
 | 
			
		||||
    DESCRIPTION
 | 
			
		||||
        "The value of this sensor."
 | 
			
		||||
    ::= { lmMiscSensorsEntry 3 }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
END
 | 
			
		||||
							
								
								
									
										30
									
								
								rundeck/auslab
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										30
									
								
								rundeck/auslab
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,30 @@
 | 
			
		||||
ausprod-core-rtr01-vlmgmt.turnsys.net:
 | 
			
		||||
  hostname: ausprod-core-rtr01-vlmgmt.turnsys.net
 | 
			
		||||
  username: root
 | 
			
		||||
  ssh-keypath: /var/lib/rundeck/ssh-keys/tsys_root.key
 | 
			
		||||
  tags: 'prod,auslab,physical,infra'
 | 
			
		||||
ausprod-labsvr.turnsys.net:
 | 
			
		||||
  hostname: ausprod-labsvr.turnsys.net
 | 
			
		||||
  username: root
 | 
			
		||||
  ssh-keypath: /var/lib/rundeck/ssh-keys/tsys_root.key
 | 
			
		||||
  tags: 'prod,auslab,physical,subo'
 | 
			
		||||
fsky2-rpi3.turnsys.net:
 | 
			
		||||
  hostname: fsky2-rpi3.turnsys.net
 | 
			
		||||
  username: root
 | 
			
		||||
  ssh-keypath: /var/lib/rundeck/ssh-keys/tsys_root.key
 | 
			
		||||
  tags: 'prod,auslab,physical,subo'
 | 
			
		||||
subo-logtest.turnsys.net:
 | 
			
		||||
  hostname: subo-logtest.turnsys.net
 | 
			
		||||
  username: root
 | 
			
		||||
  ssh-keypath: /var/lib/rundeck/ssh-keys/tsys_root.key
 | 
			
		||||
  tags: 'prod,auslab,physical,subo'
 | 
			
		||||
fground01.turnsys.net:
 | 
			
		||||
  hostname: fground01.turnsys.net
 | 
			
		||||
  username: root
 | 
			
		||||
  ssh-keypath: /var/lib/rundeck/ssh-keys/tsys_root.key
 | 
			
		||||
  tags: 'prod,auslab,physical,subo'
 | 
			
		||||
fground-flink.turnsys.net:
 | 
			
		||||
  hostname: fground-flink.turnsys.net
 | 
			
		||||
  username: root
 | 
			
		||||
  ssh-keypath: /var/lib/rundeck/ssh-keys/tsys_root.key
 | 
			
		||||
  tags: 'prod,auslab,physical,subo'
 | 
			
		||||
							
								
								
									
										35
									
								
								rundeck/ovh
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										35
									
								
								rundeck/ovh
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,35 @@
 | 
			
		||||
shared-router.turnsys.net:
 | 
			
		||||
  hostname: shared-router.turnsys.net
 | 
			
		||||
  username: root
 | 
			
		||||
  ssh-keypath: /var/lib/rundeck/ssh-keys/tsys_root.key
 | 
			
		||||
  tags: 'prod,ovh,virtual,infra'
 | 
			
		||||
tsys-cloud.turnsys.net:
 | 
			
		||||
  hostname: tsys-cloud.turnsys.net
 | 
			
		||||
  username: root
 | 
			
		||||
  ssh-keypath: /var/lib/rundeck/ssh-keys/tsys_root.key
 | 
			
		||||
  tags: 'prod,ovh,virtual,tsys'
 | 
			
		||||
tsys-rr-shell.turnsys.net:
 | 
			
		||||
  hostname: tsys-rr-shell.turnsys.net
 | 
			
		||||
  username: root
 | 
			
		||||
  ssh-keypath: /var/lib/rundeck/ssh-keys/tsys_root.key
 | 
			
		||||
  tags: 'prod,ovh,virtual,rr'
 | 
			
		||||
tsys-rr-app.turnsys.net:
 | 
			
		||||
  hostname: tsys-rr-app.turnsys.net
 | 
			
		||||
  username: root
 | 
			
		||||
  ssh-keypath: /var/lib/rundeck/ssh-keys/tsys_root.key
 | 
			
		||||
  tags: 'prod,ovh,virtual,rr'
 | 
			
		||||
toolbox.turnsys.net:
 | 
			
		||||
  hostname: toolbox.turnsys.net
 | 
			
		||||
  username: root
 | 
			
		||||
  ssh-keypath: /var/lib/rundeck/ssh-keys/tsys_root.key
 | 
			
		||||
  tags: 'prod,ovh,virtual,infra'
 | 
			
		||||
shared-build.turnsys.net:
 | 
			
		||||
  hostname: shared-build.turnsys.net
 | 
			
		||||
  username: root
 | 
			
		||||
  ssh-keypath: /var/lib/rundeck/ssh-keys/tsys_root.key
 | 
			
		||||
  tags: 'prod,ovh,virtual,infra'
 | 
			
		||||
shared-zenoss.turnsys.net:
 | 
			
		||||
  hostname: shared-zenoss.turnsys.net
 | 
			
		||||
  username: root
 | 
			
		||||
  ssh-keypath: /var/lib/rundeck/ssh-keys/tsys_root.key
 | 
			
		||||
  tags: 'prod,ovh,virtual,infra'
 | 
			
		||||
							
								
								
									
										20
									
								
								rundeck/satx
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										20
									
								
								rundeck/satx
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,20 @@
 | 
			
		||||
ausprod-linsrv.turnsys.net:
 | 
			
		||||
  hostname: ausprod-linsrv.turnsys.net
 | 
			
		||||
  username: root
 | 
			
		||||
  ssh-keypath: /var/lib/rundeck/ssh-keys/tsys_root.key
 | 
			
		||||
  tags: 'prod,satx,physical,infra'
 | 
			
		||||
tsyscn4.turnsys.net:
 | 
			
		||||
  hostname: tsyscn4.turnsys.net
 | 
			
		||||
  username: root
 | 
			
		||||
  ssh-keypath: /var/lib/rundeck/ssh-keys/tsys_root.key
 | 
			
		||||
  tags: 'satx,physical,infra,tsys'
 | 
			
		||||
satxtimeserver.turnsys.net:
 | 
			
		||||
  hostname: satxtimeserver.turnsys.net
 | 
			
		||||
  username: root
 | 
			
		||||
  ssh-keypath: /var/lib/rundeck/ssh-keys/tsys_root.key
 | 
			
		||||
  tags: 'prod,satx,physical,infra'
 | 
			
		||||
octoprint.turnsys.net:
 | 
			
		||||
  hostname: octoprint.turnsys.net
 | 
			
		||||
  username: root
 | 
			
		||||
  ssh-keypath: /var/lib/rundeck/ssh-keys/tsys_root.key
 | 
			
		||||
  tags: 'prod,satx,physical,infra'
 | 
			
		||||
							
								
								
									
										99
									
								
								rundeck/sshConfig
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										99
									
								
								rundeck/sshConfig
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,99 @@
 | 
			
		||||
StrictHostKeyChecking no
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#IdentityFile /home/cwyble/.ssh/id_rsa
 | 
			
		||||
 | 
			
		||||
#Production systems
 | 
			
		||||
 | 
			
		||||
Host asn2net-linsrv
 | 
			
		||||
	User asn2net
 | 
			
		||||
	Hostname asn2net-linsrv.turnsys.net
 | 
			
		||||
Host asn2net-router
 | 
			
		||||
	User admin
 | 
			
		||||
	Hostname asn2net-router.turnsys.net
 | 
			
		||||
Host ausprod-core-ap01
 | 
			
		||||
	Hostname ausprod-core-ap01.turnsys.net
 | 
			
		||||
	User cisco
 | 
			
		||||
Host ausprod-core-rtr01
 | 
			
		||||
	User localuser
 | 
			
		||||
	Hostname ausprod-core-rtr01-vlmgmt.turnsys.net
 | 
			
		||||
Host ausprod-lab-sw01
 | 
			
		||||
	Hostname ausprod-labsw01.turnsys.net
 | 
			
		||||
Host ausprod-lab-sw02
 | 
			
		||||
	Hostname ausprod-labsw02.turnsys.net
 | 
			
		||||
Host ausprod-consrv
 | 
			
		||||
	User root
 | 
			
		||||
	ForwardX11 no
 | 
			
		||||
	Hostname ausprod-consrv.turnsys.net
 | 
			
		||||
Host auslab-power
 | 
			
		||||
	User root:7048
 | 
			
		||||
	Hostname ausprod-consrv.turnsys.net
 | 
			
		||||
	ForwardX11 no
 | 
			
		||||
Host ausprod-labsvr
 | 
			
		||||
	User root
 | 
			
		||||
	Hostname ausprod-labsvr.turnsys.net
 | 
			
		||||
Host ausprod-linsrv
 | 
			
		||||
	User localuser
 | 
			
		||||
	Hostname ausprod-linsrv.turnsys.net
 | 
			
		||||
Host dedi
 | 
			
		||||
	User root
 | 
			
		||||
	Hostname dedi.turnsys.com
 | 
			
		||||
	ForwardX11 yes
 | 
			
		||||
Host shared-boss
 | 
			
		||||
	User localuser
 | 
			
		||||
	Hostname shared-boss.turnsys.net
 | 
			
		||||
Host shared-build
 | 
			
		||||
	User localuser
 | 
			
		||||
	Hostname shared-build.turnsys.net
 | 
			
		||||
Host shared-router
 | 
			
		||||
	User root
 | 
			
		||||
	Hostname shared-router.turnsys.net
 | 
			
		||||
Host toolbox
 | 
			
		||||
	User localuser
 | 
			
		||||
	Hostname toolbox.turnsys.net
 | 
			
		||||
Host shared-voip
 | 
			
		||||
	User localuser
 | 
			
		||||
	Hostname shared-voip.turnsys.net
 | 
			
		||||
Host shared-zenoss
 | 
			
		||||
	User root
 | 
			
		||||
	Hostname shared-zenoss.turnsys.net
 | 
			
		||||
Host tsys-rr-app
 | 
			
		||||
	User root
 | 
			
		||||
	Hostname tsys-rr-app.turnsys.net
 | 
			
		||||
Host tsys-rr-shell
 | 
			
		||||
	User localuser
 | 
			
		||||
	Hostname tsys-rr-shell.turnsys.net
 | 
			
		||||
Host tsys-cloud
 | 
			
		||||
	User root
 | 
			
		||||
	Hostname tsys-cloud.turnsys.net
 | 
			
		||||
Host tsyscn4
 | 
			
		||||
	User localuser
 | 
			
		||||
	Hostname tsyscn4.turnsys.net
 | 
			
		||||
Host shallowblue
 | 
			
		||||
	User localuser
 | 
			
		||||
	Hostname shallowblue.turnsys.net
 | 
			
		||||
Host tsys-taiga
 | 
			
		||||
	User localuser
 | 
			
		||||
	Hostname tsys-taiga.turnsys.net
 | 
			
		||||
Host subo-fground
 | 
			
		||||
	User fground
 | 
			
		||||
	Hostname fground01.turnsys.net
 | 
			
		||||
Host subo-fground-flink
 | 
			
		||||
	User pi
 | 
			
		||||
	Hostname fground-flink.turnsys.net
 | 
			
		||||
Host subo-fsky
 | 
			
		||||
	User pi
 | 
			
		||||
	Hostname fsky2-rpi3.turnsys.net
 | 
			
		||||
Host subo-logtest
 | 
			
		||||
	User fground
 | 
			
		||||
	Hostname subo-logtest.turnsys.net
 | 
			
		||||
Host satxtimeserver
 | 
			
		||||
	User pi
 | 
			
		||||
	Hostname satxtimeserver.turnsys.net
 | 
			
		||||
 | 
			
		||||
#Host ausprod-oob-sw01
 | 
			
		||||
#Host ausprod-oob-sw02
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
Host *
 | 
			
		||||
	ForwardAgent yes
 | 
			
		||||
							
								
								
									
										257
									
								
								slack/bin/distro
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										257
									
								
								slack/bin/distro
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,257 @@
 | 
			
		||||
#!/bin/sh
 | 
			
		||||
# Observium License Version 1.0
 | 
			
		||||
#
 | 
			
		||||
# Copyright (c) 2013 Joe Holden
 | 
			
		||||
#
 | 
			
		||||
# The intent of this license is to establish the freedom to use, share and contribute to
 | 
			
		||||
# the software regulated by this license.
 | 
			
		||||
#
 | 
			
		||||
# This license applies to any software containing a notice placed by the copyright holder
 | 
			
		||||
# saying that it may be distributed under the terms of this license. Such software is herein
 | 
			
		||||
# referred to as the Software. This license covers modification and distribution of the
 | 
			
		||||
# Software.
 | 
			
		||||
#
 | 
			
		||||
# Granted Rights
 | 
			
		||||
#
 | 
			
		||||
# 1. You are granted the non-exclusive rights set forth in this license provided you agree to
 | 
			
		||||
#    and comply with any and all conditions in this license. Whole or partial distribution of the
 | 
			
		||||
#    Software, or software items that link with the Software, in any form signifies acceptance of
 | 
			
		||||
#    this license.
 | 
			
		||||
#
 | 
			
		||||
# 2. You may copy and distribute the Software in unmodified form provided that the entire package,
 | 
			
		||||
#    including - but not restricted to - copyright, trademark notices and disclaimers, as released
 | 
			
		||||
#    by the initial developer of the Software, is distributed.
 | 
			
		||||
#
 | 
			
		||||
# 3. You may make modifications to the Software and distribute your modifications, in a form that
 | 
			
		||||
#    is separate from the Software, such as patches. The following restrictions apply to modifications:
 | 
			
		||||
#
 | 
			
		||||
#    a. Modifications must not alter or remove any copyright notices in the Software.
 | 
			
		||||
#    b. When modifications to the Software are released under this license, a non-exclusive royalty-free
 | 
			
		||||
#       right is granted to the initial developer of the Software to distribute your modification in
 | 
			
		||||
#       future versions of the Software provided such versions remain available under these terms in
 | 
			
		||||
#       addition to any other license(s) of the initial developer.
 | 
			
		||||
#
 | 
			
		||||
# Limitations of Liability
 | 
			
		||||
#
 | 
			
		||||
# In no event shall the initial developers or copyright holders be liable for any damages whatsoever,
 | 
			
		||||
# including - but not restricted to - lost revenue or profits or other direct, indirect, special,
 | 
			
		||||
# incidental or consequential damages, even if they have been advised of the possibility of such damages,
 | 
			
		||||
# except to the extent invariable law, if any, provides otherwise.
 | 
			
		||||
#
 | 
			
		||||
# No Warranty
 | 
			
		||||
#
 | 
			
		||||
# The Software and this license document are provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
 | 
			
		||||
# WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
 | 
			
		||||
#
 | 
			
		||||
# URL: https://github.com/joeholden/distroscript/
 | 
			
		||||
# README: https://raw.github.com/joeholden/distroscript/master/README.md
 | 
			
		||||
 | 
			
		||||
# Shells are made of dicks.
 | 
			
		||||
DISTROSCRIPT="1.0.15"
 | 
			
		||||
 | 
			
		||||
if [ -z ${DISTROFORMAT} ]; then
 | 
			
		||||
	DISTROFORMAT="pipe"
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
if [ -n "${AGENT_LIBDIR}" -o -n "${MK_LIBDIR}" ]; then
 | 
			
		||||
	# Set output for check_mk/observium agent
 | 
			
		||||
	DISTROFORMAT="export"
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
getos() {
 | 
			
		||||
	OS=`uname -s`
 | 
			
		||||
	if [ "${OS}" = "SunOS" ]; then
 | 
			
		||||
		OS="Solaris"
 | 
			
		||||
	elif [ "${OS}" = "DragonFly" ]; then
 | 
			
		||||
		OS="DragonFlyBSD"
 | 
			
		||||
	fi
 | 
			
		||||
	export OS
 | 
			
		||||
	return 0
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
getkernel() {
 | 
			
		||||
	KERNEL=`uname -r`
 | 
			
		||||
	export KERNEL
 | 
			
		||||
	return 0
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
getdistro() {
 | 
			
		||||
	if [ "${OS}" = "Linux" ]; then
 | 
			
		||||
		if [ -f /etc/os-release ]; then
 | 
			
		||||
			. /etc/os-release
 | 
			
		||||
			DISTRO=`echo ${NAME} | awk '{print $1}'`
 | 
			
		||||
		elif [ -x /usr/bin/lsb_release ]; then
 | 
			
		||||
			DISTRO=`/usr/bin/lsb_release -si 2>/dev/null`
 | 
			
		||||
		elif [ -f /etc/redhat-release ]; then
 | 
			
		||||
			DISTRO=`cat /etc/redhat-release | awk '{print $1}'`
 | 
			
		||||
		elif [ -f /etc/fedora-release ]; then
 | 
			
		||||
			DISTRO="Fedora"
 | 
			
		||||
		elif [ -f /etc/mandriva-release ]; then
 | 
			
		||||
			DISTRO="Mandriva"
 | 
			
		||||
		elif [ -f /etc/arch-release ]; then
 | 
			
		||||
			DISTRO="ArchLinux"
 | 
			
		||||
		elif [ -f /etc/gentoo-release ]; then
 | 
			
		||||
			DISTRO="Gentoo"
 | 
			
		||||
		elif [ -f /etc/SuSE-release ]; then
 | 
			
		||||
			DISTRO="SuSE"
 | 
			
		||||
		elif [ -f /etc/mandrake-release ]; then
 | 
			
		||||
			DISTRO="Mandrake"
 | 
			
		||||
		elif [ -f /etc/debian_version ]; then
 | 
			
		||||
			# shit based on debian
 | 
			
		||||
			if [ -f /etc/mailcleaner/etc/mailcleaner/version.def ]; then
 | 
			
		||||
				DISTRO="MailCleaner"
 | 
			
		||||
			else
 | 
			
		||||
				DISTRO="Debian"
 | 
			
		||||
			fi
 | 
			
		||||
		elif [ -f /etc/UnitedLinux-release ]; then
 | 
			
		||||
			DISTRO="UnitedLinux"
 | 
			
		||||
		elif [ -f /etc/openwrt_version ]; then
 | 
			
		||||
			DISTRO="OpenWRT"
 | 
			
		||||
		elif [ -f /etc/slackware-version ]; then
 | 
			
		||||
			DISTRO="Slackware"
 | 
			
		||||
		else
 | 
			
		||||
			DISTRO="Unknown"
 | 
			
		||||
		fi
 | 
			
		||||
 | 
			
		||||
        # Fixing some Distro names
 | 
			
		||||
		if [ "${DISTRO}" = "Debian GNU/Linux" ]; then
 | 
			
		||||
			DISTRO="Debian"
 | 
			
		||||
		elif [ "${DISTRO}" = "Red" -o "${DISTRO}" = "RedHatEnterpriseServer" ]; then
 | 
			
		||||
			DISTRO="RedHat"
 | 
			
		||||
		elif [ "${DISTRO}" = "Arch" ]; then
 | 
			
		||||
			DISTRO="ArchLinux"
 | 
			
		||||
		fi
 | 
			
		||||
 | 
			
		||||
	elif [ "${OS}" = "FreeBSD" ]; then
 | 
			
		||||
		if [ -f /etc/platform -a -f /etc/version ]; then
 | 
			
		||||
			DISTRO="pfSense"
 | 
			
		||||
		elif [ -f /etc/platform -a -f /etc/prd.name ]; then
 | 
			
		||||
            DISTRO=`cat /etc/prd.name`
 | 
			
		||||
		elif [ -f /usr/local/bin/pbreg ]; then
 | 
			
		||||
			DISTRO="PC-BSD"
 | 
			
		||||
		elif [ -f /tmp/freenas_config.md5 ]; then
 | 
			
		||||
			DISTRO="FreeNAS"
 | 
			
		||||
		else
 | 
			
		||||
			DISTRO=
 | 
			
		||||
		fi
 | 
			
		||||
	elif [ "${OS}" = "Solaris" ]; then
 | 
			
		||||
 		DISTRO=`head -n 1 /etc/release | awk '{print $1}'`
 | 
			
		||||
		if [ "${DISTRO}" = "Solaris" -o "${DISTRO}" = "Oracle" ]; then
 | 
			
		||||
			DISTRO=
 | 
			
		||||
		fi
 | 
			
		||||
	elif [ "${OS}" = "Darwin" ]; then
 | 
			
		||||
		case `uname -m` in
 | 
			
		||||
			AppleTV2*)
 | 
			
		||||
				DISTRO="AppleTV2"
 | 
			
		||||
			;;
 | 
			
		||||
			AppleTV3*)
 | 
			
		||||
				DISTRO="AppleTV3"
 | 
			
		||||
				;;
 | 
			
		||||
			iPhone*)
 | 
			
		||||
				DISTRO="iPhone"
 | 
			
		||||
				;;
 | 
			
		||||
			iPod*)
 | 
			
		||||
				DISTRO="iPOD"
 | 
			
		||||
				;;
 | 
			
		||||
			*)
 | 
			
		||||
				DISTRO="OSX"
 | 
			
		||||
				;;
 | 
			
		||||
		esac
 | 
			
		||||
	else
 | 
			
		||||
		DISTRO=
 | 
			
		||||
	fi
 | 
			
		||||
	export DISTRO
 | 
			
		||||
	return 0
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
getarch() {
 | 
			
		||||
	if [ "${OS}" = "Solaris" ]; then
 | 
			
		||||
		ARCH=`isainfo -k`
 | 
			
		||||
	elif [ "${OS}" = "Darwin" ]; then
 | 
			
		||||
		ARCH=`uname -p`
 | 
			
		||||
	else
 | 
			
		||||
		ARCH=`uname -m`
 | 
			
		||||
	fi
 | 
			
		||||
	if [ "${OS}" = "Linux" ]; then
 | 
			
		||||
		if [ "${ARCH}" = "x86_64" ]; then
 | 
			
		||||
			ARCH="amd64"
 | 
			
		||||
		elif [ "${ARCH}" = "i486" -o "${ARCH}" = "i586" -o "${ARCH}" = "i686" ]; then
 | 
			
		||||
			ARCH="i386"
 | 
			
		||||
		fi
 | 
			
		||||
	fi
 | 
			
		||||
	export ARCH
 | 
			
		||||
	return 0
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
getversion() {
 | 
			
		||||
	if [ "${OS}" = "FreeBSD" -o "${OS}" = "DragonFlyBSD" ]; then
 | 
			
		||||
		if [ "${DISTRO}" = "pfSense" ]; then
 | 
			
		||||
			VERSION=`cat /etc/version`
 | 
			
		||||
		elif [ "${DISTRO}" = "PC-BSD" ]; then
 | 
			
		||||
			VERSION=`pbreg get /PC-BSD/Version`
 | 
			
		||||
		elif [ -f /etc/prd.version ]; then
 | 
			
		||||
            VERSION=`cat /etc/prd.version`
 | 
			
		||||
		else
 | 
			
		||||
			VERSION=`uname -i`
 | 
			
		||||
		fi
 | 
			
		||||
	elif [ "${OS}" = "OpenBSD" -o "${OS}" = "NetBSD" ]; then
 | 
			
		||||
		VERSION=`uname -v`
 | 
			
		||||
	elif [ "${OS}" = "Linux" ]; then
 | 
			
		||||
		if [ "${DISTRO}" = "OpenWRT" ]; then
 | 
			
		||||
			VERSION=`cat /etc/openwrt_version`
 | 
			
		||||
		elif [ "${DISTRO}" = "Slackware" ]; then
 | 
			
		||||
			VERSION=`cat /etc/slackware-version | cut -d" " -f2`
 | 
			
		||||
		elif [ -f /etc/redhat-release ]; then
 | 
			
		||||
			VERSION=`cat /etc/redhat-release | sed 's/.*release\ //' | sed 's/\ .*//'`
 | 
			
		||||
		elif [ -x /usr/bin/lsb_release ]; then
 | 
			
		||||
			VERSION=`lsb_release -sr 2>/dev/null`
 | 
			
		||||
		elif [ -f /etc/os-release ]; then
 | 
			
		||||
			. /etc/os-release
 | 
			
		||||
			VERSION=${VERSION_ID}
 | 
			
		||||
		else
 | 
			
		||||
			VERSION=
 | 
			
		||||
		fi
 | 
			
		||||
	elif [ "${OS}" = "Darwin" ]; then
 | 
			
		||||
		VERSION=`sw_vers -productVersion`
 | 
			
		||||
	elif [ "${OS}" = "Solaris" ]; then
 | 
			
		||||
		VERSION=`uname -v`
 | 
			
		||||
	fi
 | 
			
		||||
	export VERSION
 | 
			
		||||
	return 0
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
if [ -z ${DISTROEXEC} ]; then
 | 
			
		||||
	getos
 | 
			
		||||
	getkernel
 | 
			
		||||
	getarch
 | 
			
		||||
	getdistro
 | 
			
		||||
	getversion
 | 
			
		||||
	if [ "${AGENT_LIBDIR}" -o "${MK_LIBDIR}" ]; then
 | 
			
		||||
		echo "<<<distro>>>"
 | 
			
		||||
	fi
 | 
			
		||||
	if [ "${DISTROFORMAT}" = "pipe" ]; then
 | 
			
		||||
		echo "${OS}|${KERNEL}|${ARCH}|${DISTRO}|${VERSION}"
 | 
			
		||||
  elif [ "${DISTROFORMAT}" = "twopipe" ]; then
 | 
			
		||||
 	 	echo "${OS}||${KERNEL}||${ARCH}||${DISTRO}||${VERSION}"
 | 
			
		||||
	elif [ "${DISTROFORMAT}" = "ini" ]; then
 | 
			
		||||
		echo "[distroscript]"
 | 
			
		||||
		echo "  OS = ${OS}"
 | 
			
		||||
		echo "  KERNEL = ${KERNEL}"
 | 
			
		||||
		echo "  ARCH = ${ARCH}"
 | 
			
		||||
		echo "  DISTRO = ${DISTRO}"
 | 
			
		||||
		echo "  DISTROVER = ${VERSION}"
 | 
			
		||||
		echo "  SCRIPTVER = ${DISTROSCRIPT}"
 | 
			
		||||
	elif [ "${DISTROFORMAT}" = "export" ]; then
 | 
			
		||||
		echo "OS=${OS}"
 | 
			
		||||
		echo "KERNEL=${KERNEL}"
 | 
			
		||||
		echo "ARCH=${ARCH}"
 | 
			
		||||
		echo "DISTRO=${DISTRO}"
 | 
			
		||||
		echo "DISTROVER=${VERSION}"
 | 
			
		||||
		echo "SCRIPTVER=${DISTROSCRIPT}"
 | 
			
		||||
	else
 | 
			
		||||
		echo "Unsupported output format."
 | 
			
		||||
		exit 1
 | 
			
		||||
	fi
 | 
			
		||||
	exit 0
 | 
			
		||||
fi
 | 
			
		||||
							
								
								
									
										60
									
								
								slack/bin/slackInstall.sh
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										60
									
								
								slack/bin/slackInstall.sh
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,60 @@
 | 
			
		||||
#!/bin/bash
 | 
			
		||||
#A script to bootstrap slack onto any TURNSYS managed system in any environment. 
 | 
			
		||||
#Use this as a template for writing TURNSYS shell scripts
 | 
			
		||||
 | 
			
		||||
slack-install()
 | 
			
		||||
{
 | 
			
		||||
 | 
			
		||||
wget http://toolbox.turnsys.net/sysinfra/slack/bin/distro  -O /usr/bin/distro 
 | 
			
		||||
chmod +x /usr/bin/distro
 | 
			
		||||
 | 
			
		||||
apt-get -y install make perl rsync
 | 
			
		||||
 | 
			
		||||
mkdir /tmp/slackDist
 | 
			
		||||
wget http://toolbox.turnsys.net/sysinfra/slack/slackDist.tar.gz -O /tmp/slackDist/slackDist.tar.gz
 | 
			
		||||
cd /tmp/slackDist
 | 
			
		||||
tar xvfz slackDist.tar.gz
 | 
			
		||||
make install
 | 
			
		||||
cd /tmp
 | 
			
		||||
rm -rf slackDist
 | 
			
		||||
 | 
			
		||||
mkdir /root/.ssh
 | 
			
		||||
chmod 700 /root/.ssh
 | 
			
		||||
chown -R root:root /root/.ssh
 | 
			
		||||
 | 
			
		||||
wget http://toolbox.turnsys.net/sysinfra/slack/env/SlackConfig-$SERVER_TYPE.config -O /etc/slack.conf
 | 
			
		||||
 | 
			
		||||
wget http://toolbox.turnsys.net/sysinfra/slack/env/SlackSSH-$SERVER_TYPE.config -O /root/.ssh/config
 | 
			
		||||
chmod 400 /root/.ssh/config
 | 
			
		||||
 | 
			
		||||
wget http://toolbox.turnsys.net/sysinfra/slack/env/SlackSSH-$SERVER_TYPE.key -O /root/.ssh/SlackSSH-$SERVER_TYPE.key
 | 
			
		||||
chmod 400 /root/.ssh/SlackSSH-$SERVER_TYPE.key
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#######################################################################################################################################################
 | 
			
		||||
#main() #For ease of searching
 | 
			
		||||
# Script starts here
 | 
			
		||||
# This code serves as a generic template for entrypoint code which is able to handle multi distro, multi environment execution.
 | 
			
		||||
# !!!!! DO NOT WRAP IN A FUNCTION. THESE ARE GLOBAL VARIABLES !!!!!
 | 
			
		||||
#######################################################################################################################################################
 | 
			
		||||
 | 
			
		||||
#If we have a fleet later, we can use this code to do fleet stuff
 | 
			
		||||
#if [ $(hostname -s|egrep -i -c -E 'ts|ts[0-9]|ts[0-9][0-9]|ts[0-9][0-9][0-9]|linux') -eq 1 ]; then
 | 
			
		||||
#export server_type=ts
 | 
			
		||||
#fi
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
case $server_type in
 | 
			
		||||
        ts)
 | 
			
		||||
                export SERVER_TYPE="ts"
 | 
			
		||||
                ;;
 | 
			
		||||
        *)
 | 
			
		||||
                export SERVER_TYPE="prod"
 | 
			
		||||
                ;;
 | 
			
		||||
esac
 | 
			
		||||
 | 
			
		||||
#######################################################################################################################################################
 | 
			
		||||
#Kick everything off
 | 
			
		||||
#
 | 
			
		||||
slack-install
 | 
			
		||||
							
								
								
									
										39
									
								
								slack/dist/Makefile
									
									
									
									
										vendored
									
									
										Executable file
									
								
							
							
						
						
									
										39
									
								
								slack/dist/Makefile
									
									
									
									
										vendored
									
									
										Executable file
									
								
							@@ -0,0 +1,39 @@
 | 
			
		||||
# Makefile for slack/src
 | 
			
		||||
# $Id: Makefile 187 2008-03-03 02:00:18Z alan $
 | 
			
		||||
include Makefile.common
 | 
			
		||||
 | 
			
		||||
BACKENDS = slack-getroles slack-installfiles slack-runscript slack-sync slack-stage slack-rolediff
 | 
			
		||||
 | 
			
		||||
all:
 | 
			
		||||
 | 
			
		||||
install: install-bin install-conf install-lib install-man
 | 
			
		||||
 | 
			
		||||
install-bin: all
 | 
			
		||||
	$(MKDIR) $(DESTDIR)$(sbindir)
 | 
			
		||||
	$(INSTALL) slack $(DESTDIR)$(sbindir)
 | 
			
		||||
	$(MKDIR) $(DESTDIR)$(bindir)
 | 
			
		||||
	$(INSTALL) slack-diff $(DESTDIR)$(bindir)
 | 
			
		||||
	$(MKDIR) $(DESTDIR)$(slack_libexecdir)
 | 
			
		||||
	@set -ex;\
 | 
			
		||||
	for i in $(BACKENDS); do \
 | 
			
		||||
	$(INSTALL) $$i $(DESTDIR)$(slack_libexecdir); done
 | 
			
		||||
	$(INSTALL) -d -m $(PRIVDIRMODE) $(DESTDIR)$(slack_localstatedir)
 | 
			
		||||
	$(INSTALL) -d -m $(PRIVDIRMODE) $(DESTDIR)$(slack_localcachedir)
 | 
			
		||||
 | 
			
		||||
install-conf: all
 | 
			
		||||
	$(MKDIR) $(DESTDIR)$(sysconfdir)
 | 
			
		||||
	$(INSTALL) -m 0644 slack.conf $(DESTDIR)$(sysconfdir)
 | 
			
		||||
 | 
			
		||||
install-lib: all
 | 
			
		||||
	$(MKDIR) $(DESTDIR)$(slack_libdir)
 | 
			
		||||
	$(INSTALL) -m 0644 Slack.pm $(DESTDIR)$(slack_libdir)
 | 
			
		||||
 | 
			
		||||
install-man: all
 | 
			
		||||
 | 
			
		||||
clean:
 | 
			
		||||
 | 
			
		||||
realclean: clean
 | 
			
		||||
 | 
			
		||||
distclean: clean
 | 
			
		||||
 | 
			
		||||
test:
 | 
			
		||||
							
								
								
									
										27
									
								
								slack/dist/Makefile.common
									
									
									
									
										vendored
									
									
										Executable file
									
								
							
							
						
						
									
										27
									
								
								slack/dist/Makefile.common
									
									
									
									
										vendored
									
									
										Executable file
									
								
							@@ -0,0 +1,27 @@
 | 
			
		||||
# Common code included in every Makefile
 | 
			
		||||
# $Id: Makefile.common 189 2008-04-21 00:52:56Z sundell $
 | 
			
		||||
 | 
			
		||||
PACKAGE=slack
 | 
			
		||||
VERSION=0.15.2
 | 
			
		||||
 | 
			
		||||
DESTDIR		=
 | 
			
		||||
 | 
			
		||||
prefix		= /
 | 
			
		||||
exec_prefix	= /usr
 | 
			
		||||
sysconfdir	= ${prefix}/etc
 | 
			
		||||
mandir		= ${exec_prefix}/share/man
 | 
			
		||||
bindir		= ${exec_prefix}/bin
 | 
			
		||||
sbindir		= ${exec_prefix}/sbin
 | 
			
		||||
libdir		= ${exec_prefix}/lib
 | 
			
		||||
libexecdir	= ${exec_prefix}/lib
 | 
			
		||||
localstatedir	= ${prefix}/var
 | 
			
		||||
 | 
			
		||||
slack_libdir		= ${libdir}/slack
 | 
			
		||||
slack_libexecdir	= ${libexecdir}/slack
 | 
			
		||||
slack_localstatedir	= ${localstatedir}/lib/slack
 | 
			
		||||
slack_localcachedir	= ${localstatedir}/cache/slack
 | 
			
		||||
 | 
			
		||||
INSTALL		= install
 | 
			
		||||
MKDIR		= mkdir -p
 | 
			
		||||
 | 
			
		||||
PRIVDIRMODE	= 0700
 | 
			
		||||
							
								
								
									
										371
									
								
								slack/dist/Slack.pm
									
									
									
									
										vendored
									
									
										Executable file
									
								
							
							
						
						
									
										371
									
								
								slack/dist/Slack.pm
									
									
									
									
										vendored
									
									
										Executable file
									
								
							@@ -0,0 +1,371 @@
 | 
			
		||||
# $Id: Slack.pm 189 2008-04-21 00:52:56Z sundell $
 | 
			
		||||
# vim:sw=2
 | 
			
		||||
# vim600:fdm=marker
 | 
			
		||||
# Copyright (C) 2004-2008 Alan Sundell <alan@sundell.net>
 | 
			
		||||
# All Rights Reserved.  This program comes with ABSOLUTELY NO WARRANTY.
 | 
			
		||||
# See the file COPYING for details.
 | 
			
		||||
 | 
			
		||||
package Slack;
 | 
			
		||||
 | 
			
		||||
require 5.006;
 | 
			
		||||
use strict;
 | 
			
		||||
use Carp qw(cluck confess croak);
 | 
			
		||||
use File::Find;
 | 
			
		||||
use POSIX qw(WIFEXITED WEXITSTATUS WIFSIGNALED WTERMSIG);
 | 
			
		||||
 | 
			
		||||
use base qw(Exporter);
 | 
			
		||||
use vars qw($VERSION @EXPORT @EXPORT_OK $DEFAULT_CONFIG_FILE);
 | 
			
		||||
$VERSION = '0.15.2';
 | 
			
		||||
@EXPORT    = qw();
 | 
			
		||||
@EXPORT_OK = qw();
 | 
			
		||||
 | 
			
		||||
$DEFAULT_CONFIG_FILE = '/etc/slack.conf';
 | 
			
		||||
 | 
			
		||||
my $term;
 | 
			
		||||
 | 
			
		||||
my @default_options = (
 | 
			
		||||
    'help|h|?',
 | 
			
		||||
    'version',
 | 
			
		||||
    'verbose|v+',
 | 
			
		||||
    'quiet',
 | 
			
		||||
    'config|C=s',
 | 
			
		||||
    'source|s=s',
 | 
			
		||||
    'rsh|e=s',
 | 
			
		||||
    'cache|c=s',
 | 
			
		||||
    'stage|t=s',
 | 
			
		||||
    'root|r=s',
 | 
			
		||||
    'dry-run|n',
 | 
			
		||||
    'backup|b',
 | 
			
		||||
    'backup-dir=s',
 | 
			
		||||
    'hostname|H=s',
 | 
			
		||||
);
 | 
			
		||||
 | 
			
		||||
sub default_usage ($) {
 | 
			
		||||
  my ($synopsis) = @_;
 | 
			
		||||
  return <<EOF;
 | 
			
		||||
Usage: $synopsis
 | 
			
		||||
 | 
			
		||||
Options:
 | 
			
		||||
  -h, -?, --help
 | 
			
		||||
      Print this help message and exit.
 | 
			
		||||
 | 
			
		||||
  --version
 | 
			
		||||
      Print the version number and exit.
 | 
			
		||||
 | 
			
		||||
  -v, --verbose
 | 
			
		||||
      Be verbose.
 | 
			
		||||
 | 
			
		||||
  --quiet
 | 
			
		||||
      Don't be verbose (Overrides previous uses of --verbose)
 | 
			
		||||
 | 
			
		||||
  -C, --config  FILE
 | 
			
		||||
      Use this config file instead of '$DEFAULT_CONFIG_FILE'.
 | 
			
		||||
 | 
			
		||||
  -s, --source  DIR
 | 
			
		||||
      Source for slack files
 | 
			
		||||
 | 
			
		||||
  -e, --rsh  COMMAND
 | 
			
		||||
      Remote shell for rsync
 | 
			
		||||
 | 
			
		||||
  -c, --cache  DIR
 | 
			
		||||
      Local cache directory for slack files
 | 
			
		||||
 | 
			
		||||
  -t, --stage  DIR
 | 
			
		||||
      Local staging directory for slack files
 | 
			
		||||
 | 
			
		||||
  -r, --root  DIR
 | 
			
		||||
      Root destination for slack files
 | 
			
		||||
 | 
			
		||||
  -n, --dry-run
 | 
			
		||||
      Don't write any files to disk -- just report what would have been done.
 | 
			
		||||
 | 
			
		||||
  -b, --backup
 | 
			
		||||
      Make backups of existing files in ROOT that are overwritten.
 | 
			
		||||
 | 
			
		||||
  --backup-dir  DIR
 | 
			
		||||
      Put backups into this directory.
 | 
			
		||||
 | 
			
		||||
  -H, --hostname  HOST
 | 
			
		||||
      Pretend to be running on HOST, instead of the name given by
 | 
			
		||||
        gethostname(2).
 | 
			
		||||
EOF
 | 
			
		||||
}
 | 
			
		||||
# Read options from a config file.  Arguments:
 | 
			
		||||
#       file    => config file to read
 | 
			
		||||
#       opthash => hashref in which to store the options
 | 
			
		||||
#       verbose => whether to be verbose
 | 
			
		||||
sub read_config (%) {
 | 
			
		||||
  my %arg = @_;
 | 
			
		||||
  my ($config_fh);
 | 
			
		||||
  local $_;
 | 
			
		||||
 | 
			
		||||
  confess "Slack::read_config: no config file given"
 | 
			
		||||
    if not defined $arg{file};
 | 
			
		||||
  $arg{opthash} = {}
 | 
			
		||||
    if not defined $arg{opthash};
 | 
			
		||||
 | 
			
		||||
  open($config_fh, '<', $arg{file})
 | 
			
		||||
    or confess "Could not open config file '$arg{file}': $!";
 | 
			
		||||
 | 
			
		||||
  # Make this into a hash so we can quickly see if we're looking
 | 
			
		||||
  # for a particular option
 | 
			
		||||
  my %looking_for;
 | 
			
		||||
  if (ref $arg{options} eq 'ARRAY') {
 | 
			
		||||
    %looking_for = map { $_ => 1 } @{$arg{options}};
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  while(<$config_fh>) {
 | 
			
		||||
    chomp;
 | 
			
		||||
    s/#.*//; # delete comments
 | 
			
		||||
    s/\s+$//; # delete trailing spaces
 | 
			
		||||
    next if m/^$/; # skip empty lines
 | 
			
		||||
 | 
			
		||||
    if (m/^[A-Z_]+=\S+/) {
 | 
			
		||||
      my ($key, $value) = split(/=/, $_, 2);
 | 
			
		||||
      $key =~ tr/A-Z_/a-z-/;
 | 
			
		||||
      # Only set options we're looking for
 | 
			
		||||
      next if (%looking_for and not $looking_for{$key});
 | 
			
		||||
      # Don't set options that are already set
 | 
			
		||||
      next if defined $arg{opthash}->{$key};
 | 
			
		||||
 | 
			
		||||
      $arg{verbose} and print STDERR "Slack::read_config: Setting '$key' to '$value'\n";
 | 
			
		||||
      $arg{opthash}->{$key} = $value;
 | 
			
		||||
    } else {
 | 
			
		||||
      cluck "Slack::read_config: Garbage line '$_' in '$arg{file}' line $. ignored";
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  close($config_fh)
 | 
			
		||||
    or confess "Slack::read_config: Could not close config file: $!";
 | 
			
		||||
 | 
			
		||||
  # The verbose option is treated specially in so many places that
 | 
			
		||||
  # we need to make sure it's defined.
 | 
			
		||||
  $arg{opthash}->{verbose} ||= 0;
 | 
			
		||||
 | 
			
		||||
  return $arg{opthash};
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
# Just get the exit code from a command that failed.
 | 
			
		||||
# croaks if anything weird happened.
 | 
			
		||||
sub get_system_exit (@) {
 | 
			
		||||
  my @command = @_;
 | 
			
		||||
 | 
			
		||||
  if (WIFEXITED($?)) {
 | 
			
		||||
    my $exit = WEXITSTATUS($?);
 | 
			
		||||
    return $exit if $exit;
 | 
			
		||||
  }
 | 
			
		||||
  if (WIFSIGNALED($?)) {
 | 
			
		||||
    my $sig = WTERMSIG($?);
 | 
			
		||||
    croak "'@command' caught sig $sig";
 | 
			
		||||
  }
 | 
			
		||||
  if ($!) {
 | 
			
		||||
    croak "Syserr on system '@command': $!";
 | 
			
		||||
  }
 | 
			
		||||
  croak "Unknown error on '@command'";
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
sub check_system_exit (@) {
 | 
			
		||||
  my @command = @_;
 | 
			
		||||
  my $exit = get_system_exit(@command);
 | 
			
		||||
  # Exit is non-zero if get_system_exit() didn't croak.
 | 
			
		||||
  croak "'@command' exited $exit";
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
# get options from the command line and the config file
 | 
			
		||||
# Arguments
 | 
			
		||||
#       opthash => hashref in which to store options
 | 
			
		||||
#       usage   => usage statement
 | 
			
		||||
#       required_options => arrayref of options to require -- an exception
 | 
			
		||||
#               will be thrown if these options are not defined
 | 
			
		||||
#       command_line_hash => store options specified on the command line here
 | 
			
		||||
sub get_options {
 | 
			
		||||
  my %arg = @_;
 | 
			
		||||
  use Getopt::Long;
 | 
			
		||||
  Getopt::Long::Configure('bundling');
 | 
			
		||||
 | 
			
		||||
  if (not defined $arg{opthash}) {
 | 
			
		||||
    $arg{opthash} = {};
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  if (not defined $arg{usage}) {
 | 
			
		||||
    $arg{usage} = default_usage($0);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  my @extra_options = ();  # extra arguments to getoptions
 | 
			
		||||
  if (defined $arg{command_line_options}) {
 | 
			
		||||
    @extra_options = @{$arg{command_line_options}};
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  # Make a --quiet function that turns off verbosity
 | 
			
		||||
  $arg{opthash}->{quiet} = sub { $arg{opthash}->{verbose} = 0; };
 | 
			
		||||
 | 
			
		||||
  unless (GetOptions($arg{opthash},
 | 
			
		||||
                    @default_options,
 | 
			
		||||
                    @extra_options,
 | 
			
		||||
                    )) {
 | 
			
		||||
    print STDERR $arg{usage};
 | 
			
		||||
    exit 1;
 | 
			
		||||
  }
 | 
			
		||||
  if ($arg{opthash}->{help}) {
 | 
			
		||||
    print $arg{usage};
 | 
			
		||||
    exit 0;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  if ($arg{opthash}->{version}) {
 | 
			
		||||
    print "slack version $VERSION\n";
 | 
			
		||||
    exit 0;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  # Get rid of the quiet handler
 | 
			
		||||
  delete $arg{opthash}->{quiet};
 | 
			
		||||
 | 
			
		||||
  # If we've been given a hashref, save our options there at this
 | 
			
		||||
  # stage, so the caller can see what was passed on the command line.
 | 
			
		||||
  # Unfortunately, perl has no .replace function, so we iterate.
 | 
			
		||||
  if (ref $arg{command_line_hash} eq 'HASH') {
 | 
			
		||||
    while (my ($k, $v) = each %{$arg{opthash}}) {
 | 
			
		||||
      $arg{command_line_hash}->{$k} = $v;
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  # Use the default config file
 | 
			
		||||
  if (not defined $arg{opthash}->{config}) {
 | 
			
		||||
    $arg{opthash}->{config} = $DEFAULT_CONFIG_FILE;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  # We need to decide whether to be verbose about reading the config file
 | 
			
		||||
  # Currently we just do it if global verbosity > 2
 | 
			
		||||
  my $verbose_config = 0;
 | 
			
		||||
  if (defined $arg{opthash}->{verbose}
 | 
			
		||||
      and $arg{opthash}->{verbose} > 2) {
 | 
			
		||||
    $verbose_config = 1;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  # Read options from the config file, passing along the options we've
 | 
			
		||||
  # gotten so far
 | 
			
		||||
  read_config(
 | 
			
		||||
      file => $arg{opthash}->{config},
 | 
			
		||||
      opthash => $arg{opthash},
 | 
			
		||||
      verbose => $verbose_config,
 | 
			
		||||
  );
 | 
			
		||||
 | 
			
		||||
  # The "verbose" option gets compared a lot and needs to be defined
 | 
			
		||||
  $arg{opthash}->{verbose} ||= 0;
 | 
			
		||||
 | 
			
		||||
  # The "hostname" option is set specially if it's not defined
 | 
			
		||||
  if (not defined $arg{opthash}->{hostname}) {
 | 
			
		||||
    use Sys::Hostname;
 | 
			
		||||
    $arg{opthash}->{hostname} = hostname;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  # We can require some options to be set
 | 
			
		||||
  if (ref $arg{required_options} eq 'ARRAY') {
 | 
			
		||||
    for my $option (@{$arg{required_options}}) {
 | 
			
		||||
      if (not defined $arg{opthash}->{$option}) {
 | 
			
		||||
        croak "Required option '$option' not given on command line or specified in config file!\n";
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  return $arg{opthash};
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
sub prompt ($) {
 | 
			
		||||
  my ($prompt) = @_;
 | 
			
		||||
  if (not defined $term) {
 | 
			
		||||
    require Term::ReadLine;
 | 
			
		||||
    $term = new Term::ReadLine 'slack'
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  $term->readline($prompt);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# Calls the callback on absolute pathnames of files in the source directory,
 | 
			
		||||
# and also on names of directories that don't exist in the destination
 | 
			
		||||
# directory (i.e. where $source/foo exists but $destination/foo does not).
 | 
			
		||||
sub find_files_to_install ($$$) {
 | 
			
		||||
  my ($source, $destination, $callback) = @_;
 | 
			
		||||
  return find ({
 | 
			
		||||
      wanted => sub {
 | 
			
		||||
        if (-l or not -d _) {
 | 
			
		||||
          # Copy all files, links, etc
 | 
			
		||||
          my $file = $File::Find::name;
 | 
			
		||||
          &$callback($file);
 | 
			
		||||
        } elsif (-d _) {
 | 
			
		||||
          # For directories, we only want to copy it if it doesn't
 | 
			
		||||
          # exist in the destination yet.
 | 
			
		||||
          my $dir = $File::Find::name;
 | 
			
		||||
          # We know the root directory will exist (we make it above),
 | 
			
		||||
          # so skip the base of the source
 | 
			
		||||
          (my $short_source = $source) =~ s#/$##;
 | 
			
		||||
          return if $dir eq $short_source;
 | 
			
		||||
 | 
			
		||||
          # Strip the $source from the path,
 | 
			
		||||
          # so we can build the destination dir from it.
 | 
			
		||||
          my $subdir = $dir;
 | 
			
		||||
          ($subdir =~ s#^$source##)
 | 
			
		||||
            or croak "sub failed: $source|$subdir";
 | 
			
		||||
 | 
			
		||||
          if (not -d "$destination/$subdir") {
 | 
			
		||||
            &$callback($dir);
 | 
			
		||||
          }
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    $source,
 | 
			
		||||
  );
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
# Runs rsync with the necessary redirection to its filehandles
 | 
			
		||||
sub wrap_rsync (@) {
 | 
			
		||||
  my @command = @_;
 | 
			
		||||
  my ($pid);
 | 
			
		||||
 | 
			
		||||
  if ($pid = fork) {
 | 
			
		||||
    # Parent
 | 
			
		||||
  } elsif (defined $pid) {
 | 
			
		||||
    # Child
 | 
			
		||||
    open(STDIN, "<", "/dev/null")
 | 
			
		||||
      or die "Could not redirect STDIN from /dev/null\n";
 | 
			
		||||
    # This redirection is necessary because rsync sends
 | 
			
		||||
    #   verbose output to STDOUT
 | 
			
		||||
    open(STDOUT, ">&STDERR")
 | 
			
		||||
      or die "Could not redirect STDOUT to STDERR\n";
 | 
			
		||||
    exec(@command);
 | 
			
		||||
    die "Could not exec '@command': $!\n";
 | 
			
		||||
  } else {
 | 
			
		||||
    die "Could not fork: $!\n";
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  my $kid = waitpid($pid, 0);
 | 
			
		||||
  if ($kid != $pid) {
 | 
			
		||||
    die "waitpid returned $kid\n";
 | 
			
		||||
  } elsif ($?) {
 | 
			
		||||
    Slack::check_system_exit(@command);
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
# Runs rsync with the necessary redirection to its filehandles, but also
 | 
			
		||||
# returns an FH to stdin and a PID.
 | 
			
		||||
sub wrap_rsync_fh (@) {
 | 
			
		||||
  my @command = @_;
 | 
			
		||||
  my ($fh, $pid);
 | 
			
		||||
 | 
			
		||||
  if ($pid = open($fh, "|-")) {
 | 
			
		||||
    # Parent
 | 
			
		||||
  } elsif (defined $pid) {
 | 
			
		||||
    # Child
 | 
			
		||||
    # This redirection is necessary because rsync sends
 | 
			
		||||
    #   verbose output to STDOUT
 | 
			
		||||
    open(STDOUT, ">&STDERR")
 | 
			
		||||
      or die "Could not redirect STDOUT to STDERR\n";
 | 
			
		||||
    exec(@command);
 | 
			
		||||
    die "Could not exec '@command': $!\n";
 | 
			
		||||
  } else {
 | 
			
		||||
    die "Could not fork: $!\n";
 | 
			
		||||
  }
 | 
			
		||||
  return($fh, $pid);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
1;
 | 
			
		||||
							
								
								
									
										329
									
								
								slack/dist/slack
									
									
									
									
										vendored
									
									
										Executable file
									
								
							
							
						
						
									
										329
									
								
								slack/dist/slack
									
									
									
									
										vendored
									
									
										Executable file
									
								
							@@ -0,0 +1,329 @@
 | 
			
		||||
#!/usr/bin/perl -w
 | 
			
		||||
# $Id: slack 180 2008-01-19 08:26:19Z alan $
 | 
			
		||||
# vim:sw=2
 | 
			
		||||
# vim600:fdm=marker
 | 
			
		||||
# Copyright (C) 2004-2008 Alan Sundell <alan@sundell.net>
 | 
			
		||||
# All Rights Reserved.  This program comes with ABSOLUTELY NO WARRANTY.
 | 
			
		||||
# See the file COPYING for details.
 | 
			
		||||
 | 
			
		||||
# This script is in charge of copying files from the (possibly remote)
 | 
			
		||||
# master directory to a local cache, using rsync
 | 
			
		||||
 | 
			
		||||
require 5.006;
 | 
			
		||||
use warnings FATAL => qw(all);
 | 
			
		||||
use strict;
 | 
			
		||||
use sigtrap qw(die untrapped normal-signals
 | 
			
		||||
               stack-trace any error-signals);
 | 
			
		||||
 | 
			
		||||
use File::Path;
 | 
			
		||||
use File::Find;
 | 
			
		||||
use POSIX; # for strftime
 | 
			
		||||
 | 
			
		||||
use constant LIBEXEC_DIR => '/usr/lib/slack';
 | 
			
		||||
use constant LIB_DIR => '/usr/lib/slack';
 | 
			
		||||
use lib LIB_DIR;
 | 
			
		||||
use Slack;
 | 
			
		||||
 | 
			
		||||
sub run_backend(@);
 | 
			
		||||
sub run_conditional_backend($@);
 | 
			
		||||
 | 
			
		||||
(my $PROG = $0) =~ s#.*/##;
 | 
			
		||||
 | 
			
		||||
# Arguments to pass to each backends (initialized to a hash of empty arrays)
 | 
			
		||||
my %backend_flags = ( map { $_ => [] }
 | 
			
		||||
  qw(getroles sync stage preview preinstall fixfiles installfiles postinstall)
 | 
			
		||||
);
 | 
			
		||||
 | 
			
		||||
my @roles;
 | 
			
		||||
 | 
			
		||||
########################################
 | 
			
		||||
# Environment
 | 
			
		||||
# Helpful prefix to die messages
 | 
			
		||||
$SIG{__DIE__} = sub { die "FATAL[$PROG]: @_"; };
 | 
			
		||||
# Set a reasonable umask
 | 
			
		||||
umask 077;
 | 
			
		||||
# Get out of wherever (possibly NFS-mounted) we were
 | 
			
		||||
chdir("/")
 | 
			
		||||
  or die "Could not chdir /: $!";
 | 
			
		||||
# Autoflush on STDERR
 | 
			
		||||
select((select(STDERR), $|=1)[0]);
 | 
			
		||||
 | 
			
		||||
########################################
 | 
			
		||||
# Config and option parsing {{{
 | 
			
		||||
my $usage = Slack::default_usage("$PROG [options] [<role>...]");
 | 
			
		||||
$usage .= <<EOF;
 | 
			
		||||
 | 
			
		||||
  --preview MODE
 | 
			
		||||
      Do a diff of scripts and files before running them.
 | 
			
		||||
      MODE can be one of 'simple' or 'prompt'.
 | 
			
		||||
 | 
			
		||||
  --no-files
 | 
			
		||||
      Don't install any files in ROOT, but tell rsync to print what
 | 
			
		||||
      it would do.
 | 
			
		||||
 | 
			
		||||
  --no-scripts
 | 
			
		||||
      Don't run scripts.
 | 
			
		||||
 | 
			
		||||
  --no-sync
 | 
			
		||||
      Skip the slack-sync step.  (useful if you're pushing stuff into
 | 
			
		||||
        the CACHE outside of slack)
 | 
			
		||||
 | 
			
		||||
  --role-list
 | 
			
		||||
      Role list for slack-getroles
 | 
			
		||||
 | 
			
		||||
  --libexec-dir DIR
 | 
			
		||||
      Look for backend scripts in this directory.
 | 
			
		||||
 | 
			
		||||
  --diff PROG
 | 
			
		||||
      Use this diff program for previews
 | 
			
		||||
 | 
			
		||||
  --sleep TIME
 | 
			
		||||
      Randomly sleep between 1 and TIME seconds before starting
 | 
			
		||||
      operations
 | 
			
		||||
EOF
 | 
			
		||||
 | 
			
		||||
# Options
 | 
			
		||||
my %opt = ();
 | 
			
		||||
# So we can distinguish stuff on the command line from config file stuff
 | 
			
		||||
my %command_line_opt = ();
 | 
			
		||||
Slack::get_options(
 | 
			
		||||
  opthash => \%opt,
 | 
			
		||||
  command_line_options => [
 | 
			
		||||
    'preview=s',
 | 
			
		||||
    'role-list=s',
 | 
			
		||||
    'no-scripts|noscripts',
 | 
			
		||||
    'no-files|nofiles',
 | 
			
		||||
    'no-sync|nosync',
 | 
			
		||||
    'libexec-dir=s',
 | 
			
		||||
    'diff=s',
 | 
			
		||||
    'sleep=i',
 | 
			
		||||
  ],
 | 
			
		||||
  required_options => [ qw(source cache stage root) ],
 | 
			
		||||
  command_line_hash => \%command_line_opt,
 | 
			
		||||
  usage => $usage,
 | 
			
		||||
);
 | 
			
		||||
 | 
			
		||||
# Special options
 | 
			
		||||
if ($opt{'dry-run'}) {
 | 
			
		||||
  $opt{'no-scripts'} = 1;
 | 
			
		||||
  $opt{'no-files'} = 1;
 | 
			
		||||
}
 | 
			
		||||
if ($opt{'no-scripts'}) {
 | 
			
		||||
  for my $action (qw(fixfiles preinstall postinstall)) {
 | 
			
		||||
    push @{$backend_flags{$action}},
 | 
			
		||||
      '--dry-run';
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
if ($opt{'no-files'}) {
 | 
			
		||||
  push @{$backend_flags{installfiles}},
 | 
			
		||||
    '--dry-run';
 | 
			
		||||
}
 | 
			
		||||
# propagate verbosity - 1 to all backends
 | 
			
		||||
if (defined $command_line_opt{'verbose'} and
 | 
			
		||||
    $command_line_opt{'verbose'} > 1) {
 | 
			
		||||
  for my $action (keys %backend_flags) {
 | 
			
		||||
    push @{$backend_flags{$action}},
 | 
			
		||||
      ('--verbose') x ($command_line_opt{'verbose'} - 1);
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
# propagate these flags to all the backends
 | 
			
		||||
for my $option (qw(config root cache stage source hostname rsh)) {
 | 
			
		||||
  if ($command_line_opt{$option}) {
 | 
			
		||||
    for my $action (keys %backend_flags) {
 | 
			
		||||
      push @{$backend_flags{$action}},
 | 
			
		||||
        "--$option=$command_line_opt{$option}";
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
# getroles also can take 'role-list'
 | 
			
		||||
if ($command_line_opt{'role-list'}) {
 | 
			
		||||
  push @{$backend_flags{'getroles'}},
 | 
			
		||||
    "--role-list=$command_line_opt{'role-list'}";
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
# The libexec dir defaults to this if it wasn't specified
 | 
			
		||||
# on the command line or in a config file.
 | 
			
		||||
if (not defined $opt{'libexec-dir'}) {
 | 
			
		||||
  $opt{'libexec-dir'} = LIBEXEC_DIR;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
# Pass diff option along to slack-rolediff
 | 
			
		||||
if ($opt{'diff'}) {
 | 
			
		||||
  push @{$backend_flags{preview}},
 | 
			
		||||
    "--diff=$opt{'diff'}";
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
# Preview takes an optional argument.  If no argument is given,
 | 
			
		||||
# it gets "" from getopt.
 | 
			
		||||
if (defined $opt{'preview'}) {
 | 
			
		||||
  if (not grep /^$opt{'preview'}$/, qw(simple prompt)) {
 | 
			
		||||
    die "Unknown preview mode '$opt{'preview'}'!";
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
    
 | 
			
		||||
# The backup option defaults to on if it wasn't specified
 | 
			
		||||
# on the command line or in a config file
 | 
			
		||||
if (not defined $opt{backup}) {
 | 
			
		||||
  $opt{backup} = 1;
 | 
			
		||||
}
 | 
			
		||||
# Figure out a place to put backups
 | 
			
		||||
if ($opt{backup} and $opt{'backup-dir'}) {
 | 
			
		||||
  push @{$backend_flags{installfiles}},
 | 
			
		||||
    '--backup',
 | 
			
		||||
    '--backup-dir='.
 | 
			
		||||
      $opt{'backup-dir'}.
 | 
			
		||||
      "/".
 | 
			
		||||
      strftime('%F-%T', localtime(time))
 | 
			
		||||
    ;
 | 
			
		||||
}
 | 
			
		||||
# }}}
 | 
			
		||||
 | 
			
		||||
# Random sleep, helpful when called from cron.
 | 
			
		||||
if ($opt{sleep}) {
 | 
			
		||||
  my $secs = int(rand($opt{sleep})) + 1;
 | 
			
		||||
  $opt{verbose} and print STDERR "$PROG: sleep $secs\n";
 | 
			
		||||
  sleep($secs);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
# Get a list of roles to install from slack-getroles {{{
 | 
			
		||||
if (not @ARGV) {
 | 
			
		||||
  my @command = ($opt{'libexec-dir'}.'/slack-getroles',
 | 
			
		||||
    @{$backend_flags{'getroles'}});
 | 
			
		||||
  $opt{verbose} and print STDERR "$PROG: getroles\n";
 | 
			
		||||
  ($opt{verbose} > 2) and print STDERR "$PROG: Calling '@command' to get a list of roles for this host.\n";
 | 
			
		||||
  my ($roles_pid, $roles_fh);
 | 
			
		||||
  if ($roles_pid = open($roles_fh, "-|")) {
 | 
			
		||||
    # Parent
 | 
			
		||||
  } elsif (defined $roles_pid) {
 | 
			
		||||
    # Child
 | 
			
		||||
    exec(@command);
 | 
			
		||||
    die "Could not exec '@command': $!\n";
 | 
			
		||||
  } else {
 | 
			
		||||
    die "Could not fork to run '@command': $!\n";
 | 
			
		||||
  }
 | 
			
		||||
  @roles = split(/\s+/, join(" ", <$roles_fh>));
 | 
			
		||||
  unless (close($roles_fh)) {
 | 
			
		||||
    Slack::check_system_exit(@command);
 | 
			
		||||
  }
 | 
			
		||||
} else {
 | 
			
		||||
  @roles = @ARGV;
 | 
			
		||||
}
 | 
			
		||||
# }}}
 | 
			
		||||
 | 
			
		||||
# Check role name syntax {{{
 | 
			
		||||
for my $role (@roles) {
 | 
			
		||||
  # Roles MUST begin with a letter.  All else is reserved.
 | 
			
		||||
  if ($role !~ m/^[a-zA-Z]/) {
 | 
			
		||||
    die "Role '$role' does not begin with a letter!";
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
# }}}
 | 
			
		||||
 | 
			
		||||
$opt{verbose} and print STDERR "$PROG: installing roles: @roles\n";
 | 
			
		||||
 | 
			
		||||
unless ($opt{'no-sync'}) {
 | 
			
		||||
  # sync all the roles down at once
 | 
			
		||||
  $opt{verbose} and print STDERR "$PROG: sync @roles\n";
 | 
			
		||||
  run_backend('slack-sync',
 | 
			
		||||
    @{$backend_flags{sync}}, @roles);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
ROLE: for my $role (@roles) {
 | 
			
		||||
  # stage
 | 
			
		||||
  $opt{verbose} and print STDERR "$PROG: stage files $role\n";
 | 
			
		||||
  run_backend('slack-stage',
 | 
			
		||||
    @{$backend_flags{stage}}, '--subdir=files', $role);
 | 
			
		||||
  
 | 
			
		||||
  if ($opt{preview}) {
 | 
			
		||||
    if ($opt{preview} eq 'simple') {
 | 
			
		||||
      $opt{verbose} and print STDERR "$PROG: preview $role\n";
 | 
			
		||||
      # Here, we run the backend in no-prompt mode.
 | 
			
		||||
      run_conditional_backend(0, 'slack-rolediff',
 | 
			
		||||
        @{$backend_flags{preview}}, $role);
 | 
			
		||||
      # ...and we skip further action in the ROLE after showing the diff.
 | 
			
		||||
      next ROLE;
 | 
			
		||||
    } elsif ($opt{preview} eq 'prompt') {
 | 
			
		||||
      $opt{verbose} and print STDERR "$PROG: preview scripts $role\n";
 | 
			
		||||
      # Here, we want to prompt and just do the scripts, since
 | 
			
		||||
      # we need to run preinstall and fixfiles before doing the files.
 | 
			
		||||
      run_conditional_backend(1, 'slack-rolediff',
 | 
			
		||||
        @{$backend_flags{preview}}, '--subdir=scripts', $role);
 | 
			
		||||
    } else {
 | 
			
		||||
      # Should get caught in option processing, above
 | 
			
		||||
      die "Unknown preview mode!\n";
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  $opt{verbose} and print STDERR "$PROG: stage scripts $role\n";
 | 
			
		||||
  run_backend('slack-stage',
 | 
			
		||||
    @{$backend_flags{stage}}, '--subdir=scripts', $role);
 | 
			
		||||
 | 
			
		||||
  # preinstall
 | 
			
		||||
  $opt{verbose} and print STDERR "$PROG: preinstall $role\n";
 | 
			
		||||
  run_backend('slack-runscript',
 | 
			
		||||
    @{$backend_flags{preinstall}}, 'preinstall', $role);
 | 
			
		||||
 | 
			
		||||
  # fixfiles
 | 
			
		||||
  $opt{verbose} and print STDERR "$PROG: fixfiles $role\n";
 | 
			
		||||
  run_backend('slack-runscript',
 | 
			
		||||
    @{$backend_flags{fixfiles}}, 'fixfiles', $role);
 | 
			
		||||
 | 
			
		||||
  # preview files
 | 
			
		||||
  if ($opt{preview} and $opt{preview} eq 'prompt') {
 | 
			
		||||
      $opt{verbose} and print STDERR "$PROG: preview files $role\n";
 | 
			
		||||
      run_conditional_backend(1, 'slack-rolediff',
 | 
			
		||||
        @{$backend_flags{preview}}, '--subdir=files', $role);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  # installfiles
 | 
			
		||||
  $opt{verbose} and print STDERR "$PROG: install $role\n";
 | 
			
		||||
  run_backend('slack-installfiles',
 | 
			
		||||
    @{$backend_flags{installfiles}}, $role);
 | 
			
		||||
 | 
			
		||||
  # postinstall
 | 
			
		||||
  $opt{verbose} and print STDERR "$PROG: postinstall $role\n";
 | 
			
		||||
  run_backend('slack-runscript',
 | 
			
		||||
    @{$backend_flags{postinstall}}, 'postinstall', $role);
 | 
			
		||||
}
 | 
			
		||||
exit 0;
 | 
			
		||||
 | 
			
		||||
sub run_backend (@) {
 | 
			
		||||
  my ($backend, @args) = @_;
 | 
			
		||||
  # If we weren't given an explicit path, prepend the libexec dir
 | 
			
		||||
  unless ($backend =~ m#^/#) {
 | 
			
		||||
    $backend = $opt{'libexec-dir'} . '/' . $backend;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  # Assemble our command line
 | 
			
		||||
  my (@command) = ($backend, @args);
 | 
			
		||||
  ($opt{verbose} > 2) and print STDERR "$PROG: Calling '@command'\n";
 | 
			
		||||
  unless (system(@command) == 0) {
 | 
			
		||||
    Slack::check_system_exit(@command);
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
sub run_conditional_backend ($@) {
 | 
			
		||||
  my ($prompt, $backend, @args) = @_;
 | 
			
		||||
  # If we weren't given an explicit path, prepend the libexec dir
 | 
			
		||||
  unless ($backend =~ m#^/#) {
 | 
			
		||||
    $backend = $opt{'libexec-dir'} . '/' . $backend;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  # Assemble our command line
 | 
			
		||||
  my (@command) = ($backend, @args);
 | 
			
		||||
  ($opt{verbose} > 2) and print STDERR "$PROG: Calling '@command'\n";
 | 
			
		||||
  unless (system(@command) == 0) {
 | 
			
		||||
    my $exit = Slack::get_system_exit(@command);
 | 
			
		||||
 | 
			
		||||
    if ($exit == 1) {
 | 
			
		||||
      # exit 1 means a difference found or something normal that requires
 | 
			
		||||
      # a prompt before continuing.
 | 
			
		||||
      if ($prompt) {
 | 
			
		||||
        exit 1 unless Slack::prompt("Continue? [yN] ") eq 'y';
 | 
			
		||||
      }
 | 
			
		||||
    } else {
 | 
			
		||||
      # any other non-successful exit is a serious error.
 | 
			
		||||
      die "'@command' exited $exit";
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										514
									
								
								slack/dist/slack-diff
									
									
									
									
										vendored
									
									
										Executable file
									
								
							
							
						
						
									
										514
									
								
								slack/dist/slack-diff
									
									
									
									
										vendored
									
									
										Executable file
									
								
							@@ -0,0 +1,514 @@
 | 
			
		||||
#!/usr/bin/perl -w
 | 
			
		||||
# $Id: slack-diff 122 2006-09-27 07:34:32Z alan $
 | 
			
		||||
# vim:sw=2
 | 
			
		||||
# vim600:fdm=marker
 | 
			
		||||
# Copyright (C) 2004-2006 Alan Sundell <alan@sundell.net>
 | 
			
		||||
# All Rights Reserved.  This program comes with ABSOLUTELY NO WARRANTY.
 | 
			
		||||
# See the file COPYING for details.
 | 
			
		||||
#
 | 
			
		||||
# This script is a wrapper for diff that gives output about special files
 | 
			
		||||
# and file modes. (diff can only compare regular files)
 | 
			
		||||
 | 
			
		||||
require 5.006;
 | 
			
		||||
use warnings FATAL => qw(all);
 | 
			
		||||
use strict;
 | 
			
		||||
use sigtrap qw(die untrapped normal-signals
 | 
			
		||||
               stack-trace any error-signals);
 | 
			
		||||
 | 
			
		||||
use Errno;
 | 
			
		||||
use File::stat;
 | 
			
		||||
use File::Basename;
 | 
			
		||||
use File::Find;
 | 
			
		||||
use Getopt::Long;
 | 
			
		||||
use POSIX qw(SIGPIPE strftime);
 | 
			
		||||
use Fcntl qw(:mode);  # provides things like S_IFMT that POSIX does not
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
my $VERSION = '0.1';
 | 
			
		||||
(my $PROG = $0) =~ s#.*/##;
 | 
			
		||||
my @diff;       # diff program to use
 | 
			
		||||
my $exit = 0;   # our exit code
 | 
			
		||||
 | 
			
		||||
sub compare ($$);
 | 
			
		||||
sub recursive_compare ($$);
 | 
			
		||||
sub filetype_to_string ($;$);
 | 
			
		||||
sub compare_files ($$);
 | 
			
		||||
sub diff ($$);
 | 
			
		||||
 | 
			
		||||
########################################
 | 
			
		||||
# Environment
 | 
			
		||||
# Helpful prefix to die messages
 | 
			
		||||
$SIG{__DIE__} = sub { die "FATAL[$PROG]: @_"; };
 | 
			
		||||
# Set a reasonable umask
 | 
			
		||||
umask 077;
 | 
			
		||||
# Autoflush on STDOUT
 | 
			
		||||
$|=1;
 | 
			
		||||
# Autoflush on STDERR
 | 
			
		||||
select((select(STDERR), $|=1)[0]);
 | 
			
		||||
 | 
			
		||||
# Default options
 | 
			
		||||
my %opt = (
 | 
			
		||||
  fakediff   => 1,
 | 
			
		||||
  perms      => 1,
 | 
			
		||||
  'new-file' => 1,
 | 
			
		||||
  diff       => 'diff',
 | 
			
		||||
);
 | 
			
		||||
 | 
			
		||||
# Config and option parsing
 | 
			
		||||
my $usage = <<EOF;
 | 
			
		||||
Usage: $PROG [options] <file1> <file2>
 | 
			
		||||
       $PROG -r <dir1> <dir2>
 | 
			
		||||
 | 
			
		||||
Options:
 | 
			
		||||
  -u, -U NUM, --unified=NUM
 | 
			
		||||
      Tell diff to use unified output format.
 | 
			
		||||
  --diff PROG
 | 
			
		||||
      Use this program for diffing, instead of "$opt{diff}"
 | 
			
		||||
  --fakediff
 | 
			
		||||
      Make a fake diff for file modes and other things that are not file
 | 
			
		||||
      contents.  Default is on, can be disabled with --nofakediff.
 | 
			
		||||
  --perms
 | 
			
		||||
      Care about owner, group, and permissions when doing fakediff.
 | 
			
		||||
      Default is on, can be disabled with --noperms.
 | 
			
		||||
  -r, --recursive
 | 
			
		||||
      Recursively compare directories.
 | 
			
		||||
  -N, --new-file
 | 
			
		||||
      Treat missing files as empty.  Default is on, can be disabled with
 | 
			
		||||
      --nonew-file.
 | 
			
		||||
  --unidirectional-new-file
 | 
			
		||||
      Treat only missing files in the first directory as empty.
 | 
			
		||||
  --from-file
 | 
			
		||||
      Treat arguments as a list of files from which to read filenames to
 | 
			
		||||
      compare, two lines at a time.
 | 
			
		||||
  -0, --null
 | 
			
		||||
      Use NULLs instead of newlines as the separator in --from-file mode
 | 
			
		||||
  --devnullhack
 | 
			
		||||
      You have a version of diff that can't deal with -N when not in
 | 
			
		||||
      recursive mode, so we need to feed it /dev/null instead of the
 | 
			
		||||
      missing file.  Default is on, can be disabled with --nodevnullhack.
 | 
			
		||||
  --version
 | 
			
		||||
      Output version info
 | 
			
		||||
  --help
 | 
			
		||||
      Output this help text
 | 
			
		||||
 | 
			
		||||
Exit codes:
 | 
			
		||||
    0   Found no differences
 | 
			
		||||
    1   Found a difference
 | 
			
		||||
    2   Had a serious error
 | 
			
		||||
    3   Found a difference and had a serious error
 | 
			
		||||
EOF
 | 
			
		||||
 | 
			
		||||
{
 | 
			
		||||
  Getopt::Long::Configure ("bundling");
 | 
			
		||||
  GetOptions(\%opt,
 | 
			
		||||
    'help|h|?',
 | 
			
		||||
    'version',
 | 
			
		||||
    'null|0',
 | 
			
		||||
    'devnullhack',
 | 
			
		||||
    'new-file|N',
 | 
			
		||||
    'u',
 | 
			
		||||
    'unified|U=i',
 | 
			
		||||
    'recursive|r',
 | 
			
		||||
    'from-file',
 | 
			
		||||
    'unidirectional-new-file',
 | 
			
		||||
    'fakediff!',
 | 
			
		||||
    'perms!',
 | 
			
		||||
    'diff=s',
 | 
			
		||||
    ) or die $usage;
 | 
			
		||||
  if ($opt{help}) {
 | 
			
		||||
    print $usage;
 | 
			
		||||
    exit 0;
 | 
			
		||||
  }
 | 
			
		||||
  if ($opt{version}) {
 | 
			
		||||
    print "$PROG version $VERSION\n";
 | 
			
		||||
    exit 0;
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
if ($opt{diff}) {
 | 
			
		||||
  # We split on spaces here to be useful -- so that people can give
 | 
			
		||||
  # their diff options.
 | 
			
		||||
  @diff = split(/\s+/, $opt{diff});
 | 
			
		||||
} else {
 | 
			
		||||
  die "$PROG: No diff program!\n";
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
if ($opt{'u'}) {
 | 
			
		||||
  push @diff, '-u';
 | 
			
		||||
} elsif ($opt{'unified'}) {
 | 
			
		||||
  $opt{'u'} = 1;  # We use this value later
 | 
			
		||||
  push @diff, "--unified=$opt{'unified'}";
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
if (not $opt{'devnullhack'}) {
 | 
			
		||||
  push @diff, '-N';
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
# usually, sigpipe would be someone quitting their pager, so don't sweat it
 | 
			
		||||
$SIG{PIPE} = sub { exit $exit };
 | 
			
		||||
 | 
			
		||||
if ($opt{'from-file'}) {
 | 
			
		||||
  local $/ = "\0" if $opt{'null'};
 | 
			
		||||
  while (my $old = <>) {
 | 
			
		||||
    my $new = <>;
 | 
			
		||||
    die "Uneven number of lines in --from-file mode!\n"
 | 
			
		||||
      if not defined $new;
 | 
			
		||||
    chomp($old);
 | 
			
		||||
    chomp($new);
 | 
			
		||||
    $exit |= compare($old, $new);
 | 
			
		||||
  }
 | 
			
		||||
} else {
 | 
			
		||||
  die $usage unless $#ARGV == 1;
 | 
			
		||||
  $exit |= compare($ARGV[0], $ARGV[1]);
 | 
			
		||||
}
 | 
			
		||||
exit $exit;
 | 
			
		||||
 | 
			
		||||
##
 | 
			
		||||
# Subroutines
 | 
			
		||||
 | 
			
		||||
sub compare ($$) {
 | 
			
		||||
  my ($old, $new) = @_;
 | 
			
		||||
 | 
			
		||||
  if ($opt{recursive}) {
 | 
			
		||||
    return recursive_compare($old, $new);
 | 
			
		||||
  } else {
 | 
			
		||||
    return compare_files($old, $new);
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
# compare two directories.  We do this by walking down the *new*
 | 
			
		||||
# directory, and comparing everything that's there to the stuff in
 | 
			
		||||
# the old directory
 | 
			
		||||
sub recursive_compare ($$) {
 | 
			
		||||
  my ($olddir, $newdir) = @_;
 | 
			
		||||
  my ($retval, $basere, $wanted);
 | 
			
		||||
  my (%seen);
 | 
			
		||||
 | 
			
		||||
  $retval = 0;
 | 
			
		||||
 | 
			
		||||
  if (-d $newdir) {
 | 
			
		||||
    $basere = qr(^$newdir);
 | 
			
		||||
    $wanted = sub {
 | 
			
		||||
      my ($newfile) = $_;
 | 
			
		||||
      my $oldfile = $newfile;
 | 
			
		||||
 | 
			
		||||
      $oldfile =~ s#$basere#$olddir#;
 | 
			
		||||
      $seen{$oldfile} = 1;
 | 
			
		||||
      $retval |= compare_files($oldfile, $newfile);
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
    eval { find({ wanted => $wanted , no_chdir => 1}, $newdir) };
 | 
			
		||||
    if ($@) {
 | 
			
		||||
      warn "$PROG: error during find: $@\n";
 | 
			
		||||
      $retval |= 2;
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
  return $retval
 | 
			
		||||
    if $opt{'unidirectional-new-file'};
 | 
			
		||||
 | 
			
		||||
  # If we're not unidirectional, we want to go through the old directory
 | 
			
		||||
  # and diff any files we didn't see in the newdir.
 | 
			
		||||
  if (-d $olddir) {
 | 
			
		||||
    $basere = qr(^$olddir);
 | 
			
		||||
    $wanted = sub {
 | 
			
		||||
      my ($oldfile) = $_;
 | 
			
		||||
      my $newfile;
 | 
			
		||||
 | 
			
		||||
      return if $seen{$oldfile};
 | 
			
		||||
      $newfile = $oldfile;
 | 
			
		||||
 | 
			
		||||
      $newfile =~ s#$basere#$newdir#;
 | 
			
		||||
      $retval |= compare_files($oldfile, $newfile);
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
    eval { find({ wanted => $wanted , no_chdir => 1}, $olddir) };
 | 
			
		||||
    if ($@) {
 | 
			
		||||
      warn "$PROG: error during find: $@\n";
 | 
			
		||||
      $retval |= 2;
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
  return $retval;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
# filetype_to_string(mode)
 | 
			
		||||
# filetype_to_string(mode, plural)
 | 
			
		||||
#
 | 
			
		||||
# Takes a mode returned from stat(), returns a noune describing the filetype,
 | 
			
		||||
# e.g. "directory", "symlink".
 | 
			
		||||
# If the "plural" argument is provided and true, returns the plural form of
 | 
			
		||||
# the noun, e.g. "directories", "symlinks".
 | 
			
		||||
sub filetype_to_string ($;$) {
 | 
			
		||||
  my ($mode, $plural) = @_;
 | 
			
		||||
 | 
			
		||||
  if (S_ISREG($mode)) {
 | 
			
		||||
    return "regular file".($plural ? "s" : "");
 | 
			
		||||
  } elsif (S_ISDIR($mode)) {
 | 
			
		||||
    return "director".($plural ? "ies" : "y");
 | 
			
		||||
  } elsif (S_ISLNK($mode)) {
 | 
			
		||||
    return "symlink".($plural ? "s" : "");
 | 
			
		||||
  } elsif (S_ISBLK($mode)) {
 | 
			
		||||
    return "block device".($plural ? "s" : "");
 | 
			
		||||
  } elsif (S_ISCHR($mode)) {
 | 
			
		||||
    return "character device".($plural ? "s" : "");
 | 
			
		||||
  } elsif (S_ISFIFO($mode)) {
 | 
			
		||||
    return "fifo".($plural ? "s" : "");
 | 
			
		||||
  } elsif (S_ISSOCK($mode)) {
 | 
			
		||||
    return "socket".($plural ? "s" : "");
 | 
			
		||||
  } else {
 | 
			
		||||
    return "unknown filetype".($plural ? "s" : "");
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
# compare_files(oldfile, newfile)
 | 
			
		||||
# This is the actual diffing routine.  It's quite long because we need to
 | 
			
		||||
# deal with all sorts of special cases.  It will print to STDOUT a
 | 
			
		||||
# description of the differences between the two files.  For regular files,
 | 
			
		||||
# diff(1) will be run to show the differences.
 | 
			
		||||
#
 | 
			
		||||
# return codes:
 | 
			
		||||
#       1 found a difference
 | 
			
		||||
#       2 had an error
 | 
			
		||||
#       3 found a difference and had an error
 | 
			
		||||
sub compare_files ($$) {
 | 
			
		||||
  my ($oldname, $newname) = @_;
 | 
			
		||||
  my ($old, $new); # stat buffers
 | 
			
		||||
  my $return = 0;
 | 
			
		||||
 | 
			
		||||
  # Get rid of unsightly double slashes
 | 
			
		||||
  $oldname =~ s#//#/#g;
 | 
			
		||||
  $newname =~ s#//#/#g;
 | 
			
		||||
  
 | 
			
		||||
  eval { $old = lstat($oldname); };
 | 
			
		||||
  if (not defined $old and not $!{ENOENT}) {
 | 
			
		||||
    warn "$PROG: Could not stat $oldname: $!\n";
 | 
			
		||||
    return 2;
 | 
			
		||||
  }
 | 
			
		||||
  eval { $new = lstat($newname); };
 | 
			
		||||
  if (not defined $new and not $!{ENOENT}) {
 | 
			
		||||
    warn "$PROG: Could not stat $newname: $!\n";
 | 
			
		||||
    return 2;
 | 
			
		||||
  }
 | 
			
		||||
  # At this point, $old or $new should only be undefined if the
 | 
			
		||||
  # file does not exist.
 | 
			
		||||
 | 
			
		||||
  if (defined $old and defined $new) {
 | 
			
		||||
    if (S_IFMT($old->mode) != S_IFMT($new->mode)) {
 | 
			
		||||
      if ($opt{fakediff}) {
 | 
			
		||||
        fakediff('filetype',
 | 
			
		||||
          $oldname => filetype_to_string($old->mode),
 | 
			
		||||
          $newname => filetype_to_string($new->mode),
 | 
			
		||||
        );
 | 
			
		||||
      } else {
 | 
			
		||||
        print "File types differ between ".
 | 
			
		||||
          filetype_to_string($old->mode)." $oldname and ".
 | 
			
		||||
          filetype_to_string($new->mode)." $newname\n";
 | 
			
		||||
      }
 | 
			
		||||
      return 1;
 | 
			
		||||
    }
 | 
			
		||||
    if ($old->nlink != $new->nlink) {
 | 
			
		||||
      # In recursive mode, we don't care about link counts in directories,
 | 
			
		||||
      # as we'll pick that up with what files do and don't exist.
 | 
			
		||||
      unless ($opt{recursive} and S_ISDIR($old->mode)) {
 | 
			
		||||
        if ($opt{fakediff}) {
 | 
			
		||||
          fakediff('nlink',
 | 
			
		||||
            $oldname => $old->nlink,
 | 
			
		||||
            $newname => $new->nlink,
 | 
			
		||||
          );
 | 
			
		||||
        } else {
 | 
			
		||||
          print "Link counts differ between ".
 | 
			
		||||
            filetype_to_string($old->mode, 1).
 | 
			
		||||
            " $oldname and $newname\n";
 | 
			
		||||
        }
 | 
			
		||||
        $return = 1;
 | 
			
		||||
      }
 | 
			
		||||
    } 
 | 
			
		||||
    if ($old->uid != $new->uid and $opt{perms}) {
 | 
			
		||||
      if ($opt{fakediff}) {
 | 
			
		||||
        fakediff('uid',
 | 
			
		||||
          $oldname => $old->uid,
 | 
			
		||||
          $newname => $new->uid,
 | 
			
		||||
        );
 | 
			
		||||
      } else {
 | 
			
		||||
        print "Owner differs between ".
 | 
			
		||||
          filetype_to_string($old->mode, 1).
 | 
			
		||||
          " $oldname and $newname\n";
 | 
			
		||||
      }
 | 
			
		||||
      $return = 1;
 | 
			
		||||
    } 
 | 
			
		||||
    if ($old->gid != $new->gid and $opt{perms}) {
 | 
			
		||||
      if ($opt{fakediff}) {
 | 
			
		||||
        fakediff('gid',
 | 
			
		||||
          $oldname => $old->gid,
 | 
			
		||||
          $newname => $new->gid,
 | 
			
		||||
        );
 | 
			
		||||
      } else {
 | 
			
		||||
        print "Group differs between ".
 | 
			
		||||
          filetype_to_string($old->mode, 1).
 | 
			
		||||
          " $oldname and $newname\n";
 | 
			
		||||
      }
 | 
			
		||||
      $return = 1;
 | 
			
		||||
    }
 | 
			
		||||
    if (S_IMODE($old->mode) != S_IMODE($new->mode) and $opt{perms}) {
 | 
			
		||||
      if ($opt{fakediff}) {
 | 
			
		||||
        fakediff('mode',
 | 
			
		||||
          $oldname => sprintf('%04o', S_IMODE($old->mode)),
 | 
			
		||||
          $newname => sprintf('%04o', S_IMODE($new->mode)),
 | 
			
		||||
        );
 | 
			
		||||
      } else {
 | 
			
		||||
        print "Modes differ between ".
 | 
			
		||||
          filetype_to_string($old->mode, 1).
 | 
			
		||||
          " $oldname and $newname\n";
 | 
			
		||||
      }
 | 
			
		||||
      $return = 1;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    # We don't want to compare anything more about sockets, fifos, or
 | 
			
		||||
    # directories, once we've checked the permissions and link counts
 | 
			
		||||
    if (S_ISSOCK($old->mode) or
 | 
			
		||||
        S_ISFIFO($old->mode) or
 | 
			
		||||
        S_ISDIR($old->mode)) {
 | 
			
		||||
      return $return;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    # Check device file devs, and that's it for them
 | 
			
		||||
    if (S_ISCHR($old->mode) or
 | 
			
		||||
        S_ISBLK($old->mode)) {
 | 
			
		||||
      if ($old->rdev != $new->rdev) {
 | 
			
		||||
        if ($opt{fakediff}) {
 | 
			
		||||
          fakediff('rdev',
 | 
			
		||||
            $oldname => $old->rdev,
 | 
			
		||||
            $newname => $new->rdev,
 | 
			
		||||
          );
 | 
			
		||||
        } else {
 | 
			
		||||
          print "Device numbers differ between ".
 | 
			
		||||
            filetype_to_string($old->mode, 1).
 | 
			
		||||
            " $oldname and $newname\n";
 | 
			
		||||
        }
 | 
			
		||||
        $return = 1;
 | 
			
		||||
      }
 | 
			
		||||
      return $return;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    # Compare the targets of symlinks
 | 
			
		||||
    if (S_ISLNK($old->mode)) {
 | 
			
		||||
      my $oldtarget = readlink $oldname
 | 
			
		||||
        or (warn("$PROG: Could not readlink($oldname): $!\n"),
 | 
			
		||||
            return $return | 2);
 | 
			
		||||
      my $newtarget = readlink $newname
 | 
			
		||||
        or (warn("$PROG: Could not readlink($newname): $!\n"),
 | 
			
		||||
            return $return | 2);
 | 
			
		||||
      if ($oldtarget ne $newtarget) {
 | 
			
		||||
        if ($opt{fakediff}) {
 | 
			
		||||
          fakediff('target',
 | 
			
		||||
            $oldname => $oldtarget,
 | 
			
		||||
            $newname => $newtarget,
 | 
			
		||||
          );
 | 
			
		||||
        } else {
 | 
			
		||||
          print "Symlink targets differ between $oldname and $newname\n";
 | 
			
		||||
        }
 | 
			
		||||
        $return = 1;
 | 
			
		||||
      }
 | 
			
		||||
      return $return;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if (not S_ISREG($old->mode)) {
 | 
			
		||||
      warn "$PROG: Don't know what to do with file mode $old->mode!\n";
 | 
			
		||||
      return 2;
 | 
			
		||||
    }
 | 
			
		||||
  } elsif (not defined $old and not defined $new) {
 | 
			
		||||
    print "Neither $oldname nor $newname exists\n";
 | 
			
		||||
    return $return;
 | 
			
		||||
  } elsif (not defined $old) {
 | 
			
		||||
    if (not S_ISREG($new->mode) or not $opt{'new-file'}) {
 | 
			
		||||
      print "Only in ".dirname($newname).": ".
 | 
			
		||||
            filetype_to_string($new->mode)." ".basename($newname)."\n";
 | 
			
		||||
      return 1;
 | 
			
		||||
    } elsif ($opt{'devnullhack'}) {
 | 
			
		||||
      $oldname = '/dev/null';
 | 
			
		||||
    }
 | 
			
		||||
  } elsif (not defined $new) {
 | 
			
		||||
    if (not S_ISREG($old->mode) or not $opt{'new-file'}) {
 | 
			
		||||
      print "Only in ".dirname($oldname).": ".
 | 
			
		||||
            filetype_to_string($old->mode)." ".basename($oldname)."\n";
 | 
			
		||||
      return 1;
 | 
			
		||||
    } elsif ($opt{'devnullhack'}) {
 | 
			
		||||
      $newname = '/dev/null';
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
  # They are regular files!  We can actually run diff!
 | 
			
		||||
  return diff($oldname, $newname) | $return;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
sub diff ($$) {
 | 
			
		||||
  my ($oldname, $newname) = @_;
 | 
			
		||||
  my @command = (@diff, $oldname, $newname);
 | 
			
		||||
  my $status;
 | 
			
		||||
 | 
			
		||||
  # If we're not specifying unified diff, we need to print a header
 | 
			
		||||
  # to indicate what's being diffed.  (I'm not sure if this actually would
 | 
			
		||||
  # work for patch, but it does tell our user what's going on).
 | 
			
		||||
  # FIXME: We only need to specify this if the files are different
 | 
			
		||||
  print "@command\n"
 | 
			
		||||
    if not $opt{u};
 | 
			
		||||
 | 
			
		||||
  {
 | 
			
		||||
    # There is a bug in perl with use warnings FATAL => qw(all)
 | 
			
		||||
    # that will cause the child process from system() to stick
 | 
			
		||||
    # around if there is a warning generated.
 | 
			
		||||
    # Shut off warnings -- we'll catch the error below.
 | 
			
		||||
    no warnings;
 | 
			
		||||
    $status = system(@command);
 | 
			
		||||
  }
 | 
			
		||||
  return 0 if ($status == 0);
 | 
			
		||||
  if ($? == -1) {
 | 
			
		||||
    die "$PROG: failed to execute '@command': $!\n";
 | 
			
		||||
  }
 | 
			
		||||
  if ($? & 128) {
 | 
			
		||||
    die "$PROG: '@command' dumped core\n";
 | 
			
		||||
  }
 | 
			
		||||
  if (my $sig = $? & 127) {
 | 
			
		||||
    die "$PROG: '@command' caught sig $sig\n"
 | 
			
		||||
      unless ($sig == SIGPIPE);
 | 
			
		||||
  }
 | 
			
		||||
  if (my $exit = $? >> 8) {
 | 
			
		||||
    if ($exit == 1) {
 | 
			
		||||
      return 1;
 | 
			
		||||
    } else {
 | 
			
		||||
      die "$PROG: '@command' returned $exit\n";
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
  return 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
sub fakediff ($$) {
 | 
			
		||||
  my ($type, $oldname, $oldvalue, $newname, $newvalue) = @_;
 | 
			
		||||
 | 
			
		||||
  return unless $opt{fakediff};
 | 
			
		||||
  my $time = strftime('%F %T.000000000 %z', localtime(0));
 | 
			
		||||
 | 
			
		||||
  # We add a suffix onto the filenames to show we're not actually looking
 | 
			
		||||
  # at file contents.  There's no good way to indicate this that's compatible
 | 
			
		||||
  # with patch, and this is simple enough.
 | 
			
		||||
  $oldname .= '#~~' . $type;
 | 
			
		||||
  $newname .= '#~~' . $type;
 | 
			
		||||
  
 | 
			
		||||
  if ($opt{u}) {
 | 
			
		||||
    # fake up a unified diff
 | 
			
		||||
    print <<EOF;
 | 
			
		||||
--- $oldname\t$time
 | 
			
		||||
+++ $newname\t$time
 | 
			
		||||
@@ -1 +1 @@
 | 
			
		||||
-$oldvalue
 | 
			
		||||
+$newvalue
 | 
			
		||||
EOF
 | 
			
		||||
  } else {
 | 
			
		||||
    print <<EOF;
 | 
			
		||||
diff $oldname $newname
 | 
			
		||||
1c1
 | 
			
		||||
< $oldvalue
 | 
			
		||||
---
 | 
			
		||||
> $newvalue
 | 
			
		||||
EOF
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										161
									
								
								slack/dist/slack-getroles
									
									
									
									
										vendored
									
									
										Executable file
									
								
							
							
						
						
									
										161
									
								
								slack/dist/slack-getroles
									
									
									
									
										vendored
									
									
										Executable file
									
								
							@@ -0,0 +1,161 @@
 | 
			
		||||
#!/usr/bin/perl -w
 | 
			
		||||
# $Id: slack-getroles 180 2008-01-19 08:26:19Z alan $
 | 
			
		||||
# vim:sw=2
 | 
			
		||||
# vim600:fdm=marker
 | 
			
		||||
# Copyright (C) 2004-2008 Alan Sundell <alan@sundell.net>
 | 
			
		||||
# All Rights Reserved.  This program comes with ABSOLUTELY NO WARRANTY.
 | 
			
		||||
# See the file COPYING for details.
 | 
			
		||||
 | 
			
		||||
# This script is in charge of copying files from the (possibly remote)
 | 
			
		||||
# master directory to a local cache, using rsync
 | 
			
		||||
 | 
			
		||||
require 5.006;
 | 
			
		||||
use warnings FATAL => qw(all);
 | 
			
		||||
use strict;
 | 
			
		||||
use sigtrap qw(die untrapped normal-signals
 | 
			
		||||
               stack-trace any error-signals);
 | 
			
		||||
 | 
			
		||||
use File::Path;
 | 
			
		||||
 | 
			
		||||
use constant LIB_DIR => '/usr/lib/slack';
 | 
			
		||||
use lib LIB_DIR;
 | 
			
		||||
use Slack;
 | 
			
		||||
 | 
			
		||||
my @rsync = ('rsync',
 | 
			
		||||
              '--links',
 | 
			
		||||
              '--times',
 | 
			
		||||
              );
 | 
			
		||||
 | 
			
		||||
(my $PROG = $0) =~ s#.*/##;
 | 
			
		||||
 | 
			
		||||
sub sync_list ();
 | 
			
		||||
 | 
			
		||||
########################################
 | 
			
		||||
# Environment
 | 
			
		||||
# Helpful prefix to die messages
 | 
			
		||||
$SIG{__DIE__} = sub { die "FATAL[$PROG]: @_"; };
 | 
			
		||||
# Set a reasonable umask
 | 
			
		||||
umask 077;
 | 
			
		||||
# Get out of wherever (possibly NFS-mounted) we were
 | 
			
		||||
chdir("/")
 | 
			
		||||
  or die "Could not chdir /: $!";
 | 
			
		||||
# Autoflush on STDERR
 | 
			
		||||
select((select(STDERR), $|=1)[0]);
 | 
			
		||||
 | 
			
		||||
########################################
 | 
			
		||||
# Config and option parsing {{{
 | 
			
		||||
my $usage = Slack::default_usage("$PROG [options]");
 | 
			
		||||
$usage .= <<EOF;
 | 
			
		||||
 | 
			
		||||
  --role-list
 | 
			
		||||
      Role list location (can be relative to SOURCE)
 | 
			
		||||
 | 
			
		||||
  --remote-role-list
 | 
			
		||||
      Role list is remote and should be copied down with rsync
 | 
			
		||||
        (implied by certain forms of role list or SOURCE)
 | 
			
		||||
EOF
 | 
			
		||||
 | 
			
		||||
# Option defaults
 | 
			
		||||
my %opt = ();
 | 
			
		||||
Slack::get_options(
 | 
			
		||||
  opthash => \%opt,
 | 
			
		||||
  command_line_options => [
 | 
			
		||||
    'role-list=s',
 | 
			
		||||
    'remote-role-list',
 | 
			
		||||
  ],
 | 
			
		||||
  required_options => [ qw(role-list hostname) ],
 | 
			
		||||
  usage => $usage,
 | 
			
		||||
);
 | 
			
		||||
 | 
			
		||||
# Prepare for backups
 | 
			
		||||
if ($opt{backup} and $opt{'backup-dir'}) {
 | 
			
		||||
  # Make sure backup directory exists
 | 
			
		||||
  unless (-d $opt{'backup-dir'}) {
 | 
			
		||||
    ($opt{verbose} > 0) and print STDERR "Creating backup directory '$opt{'backup-dir'}'\n";
 | 
			
		||||
    if (not $opt{'dry-run'}) {
 | 
			
		||||
      eval { mkpath($opt{'backup-dir'}); };
 | 
			
		||||
      die "Could not mkpath backup dir '$opt{'backup-dir'}': $@\n" if $@;
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
  push(@rsync, "--backup", "--backup-dir=$opt{'backup-dir'}");
 | 
			
		||||
}
 | 
			
		||||
# Pass options along to rsync
 | 
			
		||||
if ($opt{'dry-run'}) {
 | 
			
		||||
  push @rsync, '--dry-run';
 | 
			
		||||
}
 | 
			
		||||
# Pass options along to rsync
 | 
			
		||||
if ($opt{'verbose'} > 1) {
 | 
			
		||||
  push @rsync, '--verbose';
 | 
			
		||||
}
 | 
			
		||||
# }}}
 | 
			
		||||
 | 
			
		||||
# See if role-list is actually relative to source, and pre-pend source
 | 
			
		||||
# if need be.
 | 
			
		||||
unless ($opt{'role-list'} =~ m#^/# or
 | 
			
		||||
        $opt{'role-list'} =~ m#^\./# or
 | 
			
		||||
        $opt{'role-list'} =~ m#^[\w@\.-]+:#) {
 | 
			
		||||
  if (not defined $opt{source}) {
 | 
			
		||||
    die "Relative path to role-list given, but source not defined!\n\n$usage\n";
 | 
			
		||||
  }
 | 
			
		||||
  $opt{'role-list'} = $opt{source} . '/' . $opt{'role-list'};
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
# auto-detect remote role list
 | 
			
		||||
if ($opt{'role-list'} =~ m#^[\w@\.-]+:#) {
 | 
			
		||||
  $opt{'remote-role-list'} = 1;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
# Copy a remote list locally
 | 
			
		||||
if ($opt{'remote-role-list'}) {
 | 
			
		||||
  # We need a cache directory if the role list is not local
 | 
			
		||||
  if (not defined $opt{cache}) {
 | 
			
		||||
    die "Remote path to role-list given, but cache not defined!\n\n$usage\n";
 | 
			
		||||
  }
 | 
			
		||||
  # Look at source type, and add options if necessary
 | 
			
		||||
  if ($opt{'rsh'} or $opt{'role-list'} =~ m/^[\w@\.-]+::/) {
 | 
			
		||||
    # This is tunnelled rsync, and so needs an extra option
 | 
			
		||||
    if ($opt{'rsh'}) {
 | 
			
		||||
      push @rsync, '-e', $opt{'rsh'};
 | 
			
		||||
    } else {
 | 
			
		||||
      push @rsync, '-e', 'ssh';
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
  sync_list();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
# Read in the roles list
 | 
			
		||||
my @roles = ();
 | 
			
		||||
my $host_found = 0;
 | 
			
		||||
($opt{verbose} > 0) and print STDERR "$PROG: Reading '$opt{'role-list'}'\n";
 | 
			
		||||
open(ROLES, "<", $opt{'role-list'})
 | 
			
		||||
  or die "Could not open '$opt{'role-list'}' for reading: $!\n";
 | 
			
		||||
while(<ROLES>) {
 | 
			
		||||
  s/#.*//;  # Strip comments
 | 
			
		||||
  chomp;
 | 
			
		||||
  if (s/^$opt{hostname}:\s*//) {
 | 
			
		||||
    $host_found++;
 | 
			
		||||
    push @roles, split();
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
close(ROLES)
 | 
			
		||||
  or die "Could not close '$opt{'role-list'}': $!\n";
 | 
			
		||||
if (not $host_found) {
 | 
			
		||||
  die "Host '$opt{hostname}' not found in '$opt{'role-list'}'!\n";
 | 
			
		||||
}
 | 
			
		||||
print join("\n", @roles), "\n";
 | 
			
		||||
exit 0;
 | 
			
		||||
 | 
			
		||||
sub sync_list () {
 | 
			
		||||
  my $source = $opt{'role-list'};
 | 
			
		||||
  my $destination = $opt{cache} . "/_role_list";
 | 
			
		||||
  unless (-d $opt{cache}) {
 | 
			
		||||
    eval { mkpath($opt{cache}); };
 | 
			
		||||
    die "Could not mkpath '$opt{cache}': $@\n" if $@;
 | 
			
		||||
  }
 | 
			
		||||
  # All this to run an rsync command
 | 
			
		||||
  my @command = (@rsync, $source, $destination);
 | 
			
		||||
  ($opt{verbose} > 0) and print STDERR "$PROG: Calling '@command'\n";
 | 
			
		||||
  Slack::wrap_rsync(@command);
 | 
			
		||||
  $opt{'role-list'} = $destination;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										149
									
								
								slack/dist/slack-installfiles
									
									
									
									
										vendored
									
									
										Executable file
									
								
							
							
						
						
									
										149
									
								
								slack/dist/slack-installfiles
									
									
									
									
										vendored
									
									
										Executable file
									
								
							@@ -0,0 +1,149 @@
 | 
			
		||||
#!/usr/bin/perl -w
 | 
			
		||||
# $Id: slack-installfiles 180 2008-01-19 08:26:19Z alan $
 | 
			
		||||
# vim:sw=2
 | 
			
		||||
# vim600:fdm=marker
 | 
			
		||||
# Copyright (C) 2004-2008 Alan Sundell <alan@sundell.net>
 | 
			
		||||
# All Rights Reserved.  This program comes with ABSOLUTELY NO WARRANTY.
 | 
			
		||||
# See the file COPYING for details.
 | 
			
		||||
#
 | 
			
		||||
# This script is in charge of copying files from the local stage to the root
 | 
			
		||||
# of the local filesystem
 | 
			
		||||
 | 
			
		||||
require 5.006;
 | 
			
		||||
use warnings FATAL => qw(all);
 | 
			
		||||
use strict;
 | 
			
		||||
use sigtrap qw(die untrapped normal-signals
 | 
			
		||||
               stack-trace any error-signals);
 | 
			
		||||
 | 
			
		||||
use File::Path;
 | 
			
		||||
 | 
			
		||||
use constant LIB_DIR => '/usr/lib/slack';
 | 
			
		||||
use lib LIB_DIR;
 | 
			
		||||
use Slack;
 | 
			
		||||
 | 
			
		||||
my @rsync = ('rsync',
 | 
			
		||||
             '--relative',
 | 
			
		||||
             '--times',
 | 
			
		||||
             '--perms',
 | 
			
		||||
             '--group',
 | 
			
		||||
             '--owner',
 | 
			
		||||
             '--links',
 | 
			
		||||
             '--devices',
 | 
			
		||||
             '--sparse',
 | 
			
		||||
             '--no-implied-dirs', # SO GOOD!
 | 
			
		||||
             '--files-from=-',
 | 
			
		||||
             '--from0',
 | 
			
		||||
             );
 | 
			
		||||
 | 
			
		||||
(my $PROG = $0) =~ s#.*/##;
 | 
			
		||||
 | 
			
		||||
sub install_files ($);
 | 
			
		||||
 | 
			
		||||
########################################
 | 
			
		||||
# Environment
 | 
			
		||||
# Helpful prefix to die messages
 | 
			
		||||
$SIG{__DIE__} = sub { die "FATAL[$PROG]: @_"; };
 | 
			
		||||
# Set a reasonable umask
 | 
			
		||||
umask 077;
 | 
			
		||||
# Get out of wherever (possibly NFS-mounted) we were
 | 
			
		||||
chdir("/")
 | 
			
		||||
  or die "Could not chdir /: $!";
 | 
			
		||||
# Autoflush on STDERR
 | 
			
		||||
select((select(STDERR), $|=1)[0]);
 | 
			
		||||
 | 
			
		||||
########################################
 | 
			
		||||
# Config and option parsing {{{
 | 
			
		||||
my $usage = Slack::default_usage("$PROG [options] <role> [<role>...]");
 | 
			
		||||
# Option defaults
 | 
			
		||||
my %opt = ();
 | 
			
		||||
Slack::get_options(
 | 
			
		||||
  opthash => \%opt,
 | 
			
		||||
  usage => $usage,
 | 
			
		||||
  required_options => [ qw(root stage) ],
 | 
			
		||||
);
 | 
			
		||||
# }}}
 | 
			
		||||
 | 
			
		||||
# Arguments are required
 | 
			
		||||
die "No roles given!\n\n$usage" unless @ARGV;
 | 
			
		||||
 | 
			
		||||
unless (-d $opt{root}) {
 | 
			
		||||
    if (not $opt{'dry-run'}) {
 | 
			
		||||
      eval {
 | 
			
		||||
        mkpath($opt{root});
 | 
			
		||||
        # We have a tight umask, and a root of mode 0700 would be undesirable
 | 
			
		||||
        # in most cases.
 | 
			
		||||
        chmod(0755, $opt{root});
 | 
			
		||||
      };
 | 
			
		||||
      die "Could not mkpath destination directory '$opt{root}': $@\n" if $@;
 | 
			
		||||
    }
 | 
			
		||||
    warn "WARNING[$PROG]: Created destination directory '".$opt{root}."'\n";
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
# Prepare for backups
 | 
			
		||||
if ($opt{backup} and $opt{'backup-dir'}) {
 | 
			
		||||
  # Make sure backup directory exists
 | 
			
		||||
  unless (-d $opt{'backup-dir'}) {
 | 
			
		||||
    ($opt{verbose} > 0) and print STDERR "$PROG: Creating backup directory '$opt{'backup-dir'}'\n";
 | 
			
		||||
    if (not $opt{'dry-run'}) {
 | 
			
		||||
      eval { mkpath($opt{'backup-dir'}); };
 | 
			
		||||
      die "Could not mkpath backup dir '$opt{'backup-dir'}': $@\n" if $@;
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
  push(@rsync, "--backup", "--backup-dir=$opt{'backup-dir'}");
 | 
			
		||||
}
 | 
			
		||||
# Pass options along to rsync
 | 
			
		||||
if ($opt{'dry-run'}) {
 | 
			
		||||
  push @rsync, '--dry-run';
 | 
			
		||||
}
 | 
			
		||||
if ($opt{'verbose'} > 1) {
 | 
			
		||||
  push @rsync, '--verbose';
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
# copy over the new files
 | 
			
		||||
for my $role (@ARGV) {
 | 
			
		||||
  install_files($role);
 | 
			
		||||
}
 | 
			
		||||
exit 0;
 | 
			
		||||
 | 
			
		||||
# This subroutine takes care of actually installing the files for a role
 | 
			
		||||
sub install_files ($) {
 | 
			
		||||
  my ($role) = @_;
 | 
			
		||||
  # final / is important for rsync
 | 
			
		||||
  my $source = $opt{stage} . "/roles/" . $role . "/files/";
 | 
			
		||||
  my $destination = $opt{root} . "/";
 | 
			
		||||
  my @command = (@rsync, $source, $destination);
 | 
			
		||||
 | 
			
		||||
  if (not -d $source) {
 | 
			
		||||
    ($opt{verbose} > 0) and
 | 
			
		||||
        print STDERR "$PROG: No files to install -- '$source' does not exist\n";
 | 
			
		||||
    return;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  # Try to give some sensible message here
 | 
			
		||||
  if ($opt{verbose} > 0) {
 | 
			
		||||
    if ($opt{'dry-run'}) {
 | 
			
		||||
      print STDERR "$PROG: Dry-run syncing '$source' to '$destination'\n";
 | 
			
		||||
    } else {
 | 
			
		||||
      print STDERR "$PROG: Syncing '$source' to '$destination'\n";
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  my ($fh) = Slack::wrap_rsync_fh(@command);
 | 
			
		||||
 | 
			
		||||
  select((select($fh), $|=1)[0]);  # Turn on autoflush
 | 
			
		||||
 | 
			
		||||
  my $callback = sub {
 | 
			
		||||
    my ($file) = @_;
 | 
			
		||||
    ($file =~ s#^$source##)
 | 
			
		||||
      or die "sub failed: $source|$file";
 | 
			
		||||
    print $fh "$file\0";
 | 
			
		||||
  };
 | 
			
		||||
 | 
			
		||||
  # This will print files to be synced to the $fh
 | 
			
		||||
  Slack::find_files_to_install($source, $destination, $callback);
 | 
			
		||||
 | 
			
		||||
  # Close fh, waitpid, and check return value
 | 
			
		||||
  unless (close($fh)) {
 | 
			
		||||
    Slack::check_system_exit(@command);
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										146
									
								
								slack/dist/slack-rolediff
									
									
									
									
										vendored
									
									
										Executable file
									
								
							
							
						
						
									
										146
									
								
								slack/dist/slack-rolediff
									
									
									
									
										vendored
									
									
										Executable file
									
								
							@@ -0,0 +1,146 @@
 | 
			
		||||
#!/usr/bin/perl -w
 | 
			
		||||
# $Id: slack-rolediff 125 2006-09-27 07:50:07Z alan $
 | 
			
		||||
# vim:sw=2
 | 
			
		||||
# vim600:fdm=marker
 | 
			
		||||
# Copyright (C) 2004-2006 Alan Sundell <alan@sundell.net>
 | 
			
		||||
# All Rights Reserved.  This program comes with ABSOLUTELY NO WARRANTY.
 | 
			
		||||
# See the file COPYING for details.
 | 
			
		||||
#
 | 
			
		||||
# This script provides a preview of scripts or files about to be installed.
 | 
			
		||||
# Basically, it calls diff -- its smarts are in knowing where things are.
 | 
			
		||||
 | 
			
		||||
require 5.006;
 | 
			
		||||
use warnings FATAL => qw(all);
 | 
			
		||||
use strict;
 | 
			
		||||
use sigtrap qw(die untrapped normal-signals
 | 
			
		||||
               stack-trace any error-signals);
 | 
			
		||||
 | 
			
		||||
use File::Path;
 | 
			
		||||
use File::Find;
 | 
			
		||||
 | 
			
		||||
use constant LIB_DIR => '/usr/lib/slack';
 | 
			
		||||
use lib LIB_DIR;
 | 
			
		||||
use Slack;
 | 
			
		||||
 | 
			
		||||
my @diff = ('slack-diff',
 | 
			
		||||
              '-uN',
 | 
			
		||||
              );
 | 
			
		||||
 | 
			
		||||
# directories to compare
 | 
			
		||||
my %subdir = (
 | 
			
		||||
  files => 1,
 | 
			
		||||
  scripts => 1,
 | 
			
		||||
);
 | 
			
		||||
 | 
			
		||||
(my $PROG = $0) =~ s#.*/##;
 | 
			
		||||
 | 
			
		||||
sub diff ($$;@);
 | 
			
		||||
 | 
			
		||||
########################################
 | 
			
		||||
# Environment
 | 
			
		||||
# Helpful prefix to die messages
 | 
			
		||||
$SIG{__DIE__} = sub { die "FATAL[$PROG]: @_"; };
 | 
			
		||||
# Set a reasonable umask
 | 
			
		||||
umask 077;
 | 
			
		||||
# Get out of wherever (possibly NFS-mounted) we were
 | 
			
		||||
chdir("/")
 | 
			
		||||
  or die "Could not chdir /: $!";
 | 
			
		||||
# Autoflush on STDERR
 | 
			
		||||
select((select(STDERR), $|=1)[0]);
 | 
			
		||||
 | 
			
		||||
########################################
 | 
			
		||||
# Config and option parsing {{{
 | 
			
		||||
my $usage = Slack::default_usage("$PROG [options] <role> [<role>...]");
 | 
			
		||||
$usage .= <<EOF;
 | 
			
		||||
 | 
			
		||||
  --subdir DIR
 | 
			
		||||
      Check this subdir only.  Possible values for DIR are 'files' and
 | 
			
		||||
      'scripts'.
 | 
			
		||||
 | 
			
		||||
  --diff PROG
 | 
			
		||||
      Use this program to do diffs.  [@diff]
 | 
			
		||||
EOF
 | 
			
		||||
# Option defaults
 | 
			
		||||
my %opt = ();
 | 
			
		||||
Slack::get_options(
 | 
			
		||||
  opthash => \%opt,
 | 
			
		||||
  command_line_options => [
 | 
			
		||||
    'subdir=s',
 | 
			
		||||
    'diff=s',
 | 
			
		||||
  ],
 | 
			
		||||
  usage => $usage,
 | 
			
		||||
  required_options => [ qw(cache stage root) ],
 | 
			
		||||
);
 | 
			
		||||
 | 
			
		||||
# Arguments are required
 | 
			
		||||
die "No roles given!\n\n$usage" unless @ARGV;
 | 
			
		||||
 | 
			
		||||
# We only allow certain values for this option
 | 
			
		||||
if ($opt{subdir}) {
 | 
			
		||||
  unless ($opt{subdir} eq 'files' or $opt{subdir} eq 'scripts') {
 | 
			
		||||
    die "--subdir option must be 'files' or 'scripts'\n\n$usage";
 | 
			
		||||
  }
 | 
			
		||||
  # Only do this subdir
 | 
			
		||||
  %subdir = ( $opt{subdir} => 1 );
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
# Let people override our diff.  Split on spaces so they can pass args.
 | 
			
		||||
if ($opt{diff}) {
 | 
			
		||||
  @diff = split(/\s+/, $opt{diff});
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
# }}}
 | 
			
		||||
 | 
			
		||||
my $exit = 0;
 | 
			
		||||
# Do the diffs
 | 
			
		||||
for my $full_role (@ARGV) {
 | 
			
		||||
  # Split the full role (e.g. google.foogle.woogle) into components
 | 
			
		||||
  my @role = split(/\./, $full_role);
 | 
			
		||||
 | 
			
		||||
  if ($subdir{scripts}) {
 | 
			
		||||
    # Then we compare the cache vs the stage
 | 
			
		||||
    my $old = $opt{stage} . "/roles/" . $full_role . "/scripts";
 | 
			
		||||
    my $new = $opt{cache} . "/roles/" . $role[0] . "/scripts";
 | 
			
		||||
    # For scripts, we don't care so much about mode and owner (since those are
 | 
			
		||||
    # inherited in the CACHE from the SOURCE), so --noperms.
 | 
			
		||||
    $exit |= diff($old, $new, '--noperms');
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  if ($subdir{files}) {
 | 
			
		||||
    # Then we compare the stage vs the root
 | 
			
		||||
    my $old = $opt{root};
 | 
			
		||||
    my $new = $opt{stage} . "/roles/" . $full_role . "/files";
 | 
			
		||||
    # For files, we don't care about files that exist in $old but not $new
 | 
			
		||||
    $exit |= diff($old, $new, '--unidirectional-new-file');
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
exit $exit;
 | 
			
		||||
 | 
			
		||||
sub diff ($$;@) {
 | 
			
		||||
  my ($old, $new, @options) = @_;
 | 
			
		||||
 | 
			
		||||
  my @command = (@diff, @options);
 | 
			
		||||
 | 
			
		||||
  # return if there's nothing to do
 | 
			
		||||
  return 0 if (not -d $old and not -d $new);
 | 
			
		||||
 | 
			
		||||
  ($opt{verbose} > 0) and print STDERR "$PROG: Previewing with '@command'\n";
 | 
			
		||||
 | 
			
		||||
  my $return = 0;
 | 
			
		||||
  my $callback = sub {
 | 
			
		||||
    my ($new_file) = @_;
 | 
			
		||||
    my $old_file = $new_file;
 | 
			
		||||
    ($old_file =~ s#^$new#$old#)
 | 
			
		||||
      or die "sub failed: $new|$new_file";
 | 
			
		||||
    if (system(@command, $old_file, $new_file) != 0) {
 | 
			
		||||
      $return |= Slack::get_system_exit(@command);
 | 
			
		||||
    }
 | 
			
		||||
  };
 | 
			
		||||
 | 
			
		||||
  # We have to use this function, rather than recursive mode for slack-diff,
 | 
			
		||||
  # because otherwise we'll print a bunch of bogus stuff about directories
 | 
			
		||||
  # that exist in $ROOT and therefore aren't being synced.
 | 
			
		||||
  Slack::find_files_to_install($new, $old, $callback);
 | 
			
		||||
 | 
			
		||||
  return $return;
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										111
									
								
								slack/dist/slack-runscript
									
									
									
									
										vendored
									
									
										Executable file
									
								
							
							
						
						
									
										111
									
								
								slack/dist/slack-runscript
									
									
									
									
										vendored
									
									
										Executable file
									
								
							@@ -0,0 +1,111 @@
 | 
			
		||||
#!/usr/bin/perl -w
 | 
			
		||||
# $Id: slack-runscript 118 2006-09-25 18:35:17Z alan $
 | 
			
		||||
# vim:sw=2
 | 
			
		||||
# vim600:fdm=marker
 | 
			
		||||
# Copyright (C) 2004-2006 Alan Sundell <alan@sundell.net>
 | 
			
		||||
# All Rights Reserved.  This program comes with ABSOLUTELY NO WARRANTY.
 | 
			
		||||
# See the file COPYING for details.
 | 
			
		||||
#
 | 
			
		||||
# This script is in charge of running scripts out of the local stage
 | 
			
		||||
 | 
			
		||||
require 5.006;
 | 
			
		||||
use warnings FATAL => qw(all);
 | 
			
		||||
use strict;
 | 
			
		||||
use sigtrap qw(die untrapped normal-signals
 | 
			
		||||
               stack-trace any error-signals);
 | 
			
		||||
 | 
			
		||||
use File::Path;
 | 
			
		||||
use File::Find;
 | 
			
		||||
 | 
			
		||||
use constant LIB_DIR => '/usr/lib/slack';
 | 
			
		||||
use lib LIB_DIR;
 | 
			
		||||
use Slack;
 | 
			
		||||
 | 
			
		||||
# Export these options to the environment of the script
 | 
			
		||||
my @export_options = qw(root stage hostname verbose);
 | 
			
		||||
 | 
			
		||||
(my $PROG = $0) =~ s#.*/##;
 | 
			
		||||
 | 
			
		||||
########################################
 | 
			
		||||
# Environment
 | 
			
		||||
# Helpful prefix to die messages
 | 
			
		||||
$SIG{__DIE__} = sub { die "FATAL[$PROG]: @_"; };
 | 
			
		||||
# Set a reasonable umask
 | 
			
		||||
umask 077;
 | 
			
		||||
# Autoflush on STDERR
 | 
			
		||||
select((select(STDERR), $|=1)[0]);
 | 
			
		||||
# Get out of wherever (possibly NFS-mounted) we were
 | 
			
		||||
chdir('/')
 | 
			
		||||
  or die "Could not chdir '/': $!";
 | 
			
		||||
 | 
			
		||||
########################################
 | 
			
		||||
# Config and option parsing {{{
 | 
			
		||||
my $usage = Slack::default_usage("$PROG [options] <action> <role> [<role>...]");
 | 
			
		||||
# Option defaults
 | 
			
		||||
my %opt = ();
 | 
			
		||||
Slack::get_options(
 | 
			
		||||
  opthash => \%opt,
 | 
			
		||||
  usage => $usage,
 | 
			
		||||
  required_options => \@export_options,
 | 
			
		||||
);
 | 
			
		||||
 | 
			
		||||
my $action = shift || die "No script to run!\n\n$usage";
 | 
			
		||||
# Arguments are required
 | 
			
		||||
die "No roles given!\n\n$usage" unless @ARGV;
 | 
			
		||||
 | 
			
		||||
# }}}
 | 
			
		||||
 | 
			
		||||
# Start with a clean environment
 | 
			
		||||
%ENV = (
 | 
			
		||||
  PATH => '/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin',
 | 
			
		||||
);
 | 
			
		||||
# Export certain variables to the environment.  These are guaranteed to
 | 
			
		||||
# be set because we require them in get_options above.
 | 
			
		||||
for my $option (@export_options) {
 | 
			
		||||
  my $env_var = $option;
 | 
			
		||||
  $env_var =~ tr/a-z-/A-Z_/;
 | 
			
		||||
  $ENV{$env_var} = $opt{$option};
 | 
			
		||||
}
 | 
			
		||||
# We want to decrement the verbose value for the child if it's set.
 | 
			
		||||
$ENV{VERBOSE}-- if $ENV{VERBOSE};
 | 
			
		||||
 | 
			
		||||
# Run the script for each role given, if it exists and is executable
 | 
			
		||||
for my $role (@ARGV) {
 | 
			
		||||
  my $script_to_run = "$opt{stage}/roles/$role/scripts/$action";
 | 
			
		||||
  unless (-x $script_to_run) {
 | 
			
		||||
    if (-e _) {
 | 
			
		||||
      # A helpful warning
 | 
			
		||||
      warn "WARNING[$PROG]: Skipping '$script_to_run' because it's not executable\n";
 | 
			
		||||
    } elsif ($opt{verbose} > 0) {
 | 
			
		||||
      print STDERR "$PROG: Skipping '$script_to_run' because it doesn't exist\n";
 | 
			
		||||
    }
 | 
			
		||||
    next;
 | 
			
		||||
  }
 | 
			
		||||
  my $dir;
 | 
			
		||||
  if ($action eq 'fixfiles') {
 | 
			
		||||
    $dir = "$opt{stage}/roles/$role/files";
 | 
			
		||||
  } else {
 | 
			
		||||
    $dir = "$opt{stage}/roles/$role/scripts";
 | 
			
		||||
  }
 | 
			
		||||
  my @command = ($script_to_run , $role);
 | 
			
		||||
 | 
			
		||||
  # It's OK to chdir even if we're not going to run the script.
 | 
			
		||||
  # Might as well see if it works.
 | 
			
		||||
  chdir($dir)
 | 
			
		||||
    or die "Could not chdir '$dir': $!\n";
 | 
			
		||||
  if ($opt{'dry-run'}) {
 | 
			
		||||
    ($opt{verbose} > 0)
 | 
			
		||||
      and print STDERR "$PROG: Not calling '@command' in '$dir' ".
 | 
			
		||||
        "because --dry-run specified.\n";
 | 
			
		||||
  } else {
 | 
			
		||||
    ($opt{verbose} > 0)
 | 
			
		||||
      and print STDERR "$PROG: Calling '@command' in '$dir'.\n";
 | 
			
		||||
    unless (system("script /root/slackLog -a -f -c @command") == 0) {
 | 
			
		||||
      Slack::check_system_exit(@command);
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
  chdir('/')
 | 
			
		||||
    or die "Could not chdir '/': $!\n"
 | 
			
		||||
}
 | 
			
		||||
exit 0;
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										111
									
								
								slack/dist/slack-runscript.orig
									
									
									
									
										vendored
									
									
										Executable file
									
								
							
							
						
						
									
										111
									
								
								slack/dist/slack-runscript.orig
									
									
									
									
										vendored
									
									
										Executable file
									
								
							@@ -0,0 +1,111 @@
 | 
			
		||||
#!/usr/bin/perl -w
 | 
			
		||||
# $Id: slack-runscript 118 2006-09-25 18:35:17Z alan $
 | 
			
		||||
# vim:sw=2
 | 
			
		||||
# vim600:fdm=marker
 | 
			
		||||
# Copyright (C) 2004-2006 Alan Sundell <alan@sundell.net>
 | 
			
		||||
# All Rights Reserved.  This program comes with ABSOLUTELY NO WARRANTY.
 | 
			
		||||
# See the file COPYING for details.
 | 
			
		||||
#
 | 
			
		||||
# This script is in charge of running scripts out of the local stage
 | 
			
		||||
 | 
			
		||||
require 5.006;
 | 
			
		||||
use warnings FATAL => qw(all);
 | 
			
		||||
use strict;
 | 
			
		||||
use sigtrap qw(die untrapped normal-signals
 | 
			
		||||
               stack-trace any error-signals);
 | 
			
		||||
 | 
			
		||||
use File::Path;
 | 
			
		||||
use File::Find;
 | 
			
		||||
 | 
			
		||||
use constant LIB_DIR => '/usr/lib/slack';
 | 
			
		||||
use lib LIB_DIR;
 | 
			
		||||
use Slack;
 | 
			
		||||
 | 
			
		||||
# Export these options to the environment of the script
 | 
			
		||||
my @export_options = qw(root stage hostname verbose);
 | 
			
		||||
 | 
			
		||||
(my $PROG = $0) =~ s#.*/##;
 | 
			
		||||
 | 
			
		||||
########################################
 | 
			
		||||
# Environment
 | 
			
		||||
# Helpful prefix to die messages
 | 
			
		||||
$SIG{__DIE__} = sub { die "FATAL[$PROG]: @_"; };
 | 
			
		||||
# Set a reasonable umask
 | 
			
		||||
umask 077;
 | 
			
		||||
# Autoflush on STDERR
 | 
			
		||||
select((select(STDERR), $|=1)[0]);
 | 
			
		||||
# Get out of wherever (possibly NFS-mounted) we were
 | 
			
		||||
chdir('/')
 | 
			
		||||
  or die "Could not chdir '/': $!";
 | 
			
		||||
 | 
			
		||||
########################################
 | 
			
		||||
# Config and option parsing {{{
 | 
			
		||||
my $usage = Slack::default_usage("$PROG [options] <action> <role> [<role>...]");
 | 
			
		||||
# Option defaults
 | 
			
		||||
my %opt = ();
 | 
			
		||||
Slack::get_options(
 | 
			
		||||
  opthash => \%opt,
 | 
			
		||||
  usage => $usage,
 | 
			
		||||
  required_options => \@export_options,
 | 
			
		||||
);
 | 
			
		||||
 | 
			
		||||
my $action = shift || die "No script to run!\n\n$usage";
 | 
			
		||||
# Arguments are required
 | 
			
		||||
die "No roles given!\n\n$usage" unless @ARGV;
 | 
			
		||||
 | 
			
		||||
# }}}
 | 
			
		||||
 | 
			
		||||
# Start with a clean environment
 | 
			
		||||
%ENV = (
 | 
			
		||||
  PATH => '/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin',
 | 
			
		||||
);
 | 
			
		||||
# Export certain variables to the environment.  These are guaranteed to
 | 
			
		||||
# be set because we require them in get_options above.
 | 
			
		||||
for my $option (@export_options) {
 | 
			
		||||
  my $env_var = $option;
 | 
			
		||||
  $env_var =~ tr/a-z-/A-Z_/;
 | 
			
		||||
  $ENV{$env_var} = $opt{$option};
 | 
			
		||||
}
 | 
			
		||||
# We want to decrement the verbose value for the child if it's set.
 | 
			
		||||
$ENV{VERBOSE}-- if $ENV{VERBOSE};
 | 
			
		||||
 | 
			
		||||
# Run the script for each role given, if it exists and is executable
 | 
			
		||||
for my $role (@ARGV) {
 | 
			
		||||
  my $script_to_run = "$opt{stage}/roles/$role/scripts/$action";
 | 
			
		||||
  unless (-x $script_to_run) {
 | 
			
		||||
    if (-e _) {
 | 
			
		||||
      # A helpful warning
 | 
			
		||||
      warn "WARNING[$PROG]: Skipping '$script_to_run' because it's not executable\n";
 | 
			
		||||
    } elsif ($opt{verbose} > 0) {
 | 
			
		||||
      print STDERR "$PROG: Skipping '$script_to_run' because it doesn't exist\n";
 | 
			
		||||
    }
 | 
			
		||||
    next;
 | 
			
		||||
  }
 | 
			
		||||
  my $dir;
 | 
			
		||||
  if ($action eq 'fixfiles') {
 | 
			
		||||
    $dir = "$opt{stage}/roles/$role/files";
 | 
			
		||||
  } else {
 | 
			
		||||
    $dir = "$opt{stage}/roles/$role/scripts";
 | 
			
		||||
  }
 | 
			
		||||
  my @command = ($script_to_run, $role);
 | 
			
		||||
 | 
			
		||||
  # It's OK to chdir even if we're not going to run the script.
 | 
			
		||||
  # Might as well see if it works.
 | 
			
		||||
  chdir($dir)
 | 
			
		||||
    or die "Could not chdir '$dir': $!\n";
 | 
			
		||||
  if ($opt{'dry-run'}) {
 | 
			
		||||
    ($opt{verbose} > 0)
 | 
			
		||||
      and print STDERR "$PROG: Not calling '@command' in '$dir' ".
 | 
			
		||||
        "because --dry-run specified.\n";
 | 
			
		||||
  } else {
 | 
			
		||||
    ($opt{verbose} > 0)
 | 
			
		||||
      and print STDERR "$PROG: Calling '@command' in '$dir'.\n";
 | 
			
		||||
    unless (system(@command) == 0) {
 | 
			
		||||
      Slack::check_system_exit(@command);
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
  chdir('/')
 | 
			
		||||
    or die "Could not chdir '/': $!\n"
 | 
			
		||||
}
 | 
			
		||||
exit 0;
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										278
									
								
								slack/dist/slack-stage
									
									
									
									
										vendored
									
									
										Executable file
									
								
							
							
						
						
									
										278
									
								
								slack/dist/slack-stage
									
									
									
									
										vendored
									
									
										Executable file
									
								
							@@ -0,0 +1,278 @@
 | 
			
		||||
#!/usr/bin/perl -w
 | 
			
		||||
# $Id: slack-stage 180 2008-01-19 08:26:19Z alan $
 | 
			
		||||
# vim:sw=2
 | 
			
		||||
# vim600:fdm=marker
 | 
			
		||||
# Copyright (C) 2004-2008 Alan Sundell <alan@sundell.net>
 | 
			
		||||
# All Rights Reserved.  This program comes with ABSOLUTELY NO WARRANTY.
 | 
			
		||||
# See the file COPYING for details.
 | 
			
		||||
#
 | 
			
		||||
# This script is in charge of copying files from the local cache
 | 
			
		||||
# directory to the local stage, building a unified single tree onstage
 | 
			
		||||
# from the multiple trees that are the role + subroles in the cache
 | 
			
		||||
 | 
			
		||||
require 5.006;
 | 
			
		||||
use warnings FATAL => qw(all);
 | 
			
		||||
use strict;
 | 
			
		||||
use sigtrap qw(die untrapped normal-signals
 | 
			
		||||
               stack-trace any error-signals);
 | 
			
		||||
 | 
			
		||||
use File::Path;
 | 
			
		||||
use File::Find;
 | 
			
		||||
 | 
			
		||||
use constant LIB_DIR => '/usr/lib/slack';
 | 
			
		||||
use lib LIB_DIR;
 | 
			
		||||
use Slack;
 | 
			
		||||
 | 
			
		||||
my @rsync = ('rsync',
 | 
			
		||||
              '--recursive',
 | 
			
		||||
              '--times',
 | 
			
		||||
              '--ignore-times',
 | 
			
		||||
              '--perms',
 | 
			
		||||
              '--sparse',
 | 
			
		||||
              );
 | 
			
		||||
 | 
			
		||||
(my $PROG = $0) =~ s#.*/##;
 | 
			
		||||
 | 
			
		||||
sub check_stage ();
 | 
			
		||||
sub sync_role ($$@);
 | 
			
		||||
sub apply_default_perms_to_role ($$);
 | 
			
		||||
 | 
			
		||||
########################################
 | 
			
		||||
# Environment
 | 
			
		||||
# Helpful prefix to die messages
 | 
			
		||||
$SIG{__DIE__} = sub { die "FATAL[$PROG]: @_"; };
 | 
			
		||||
# Set a reasonable umask
 | 
			
		||||
umask 077;
 | 
			
		||||
# Get out of wherever (possibly NFS-mounted) we were
 | 
			
		||||
chdir("/")
 | 
			
		||||
  or die "Could not chdir /: $!";
 | 
			
		||||
# Autoflush on STDERR
 | 
			
		||||
select((select(STDERR), $|=1)[0]);
 | 
			
		||||
 | 
			
		||||
########################################
 | 
			
		||||
# Config and option parsing {{{
 | 
			
		||||
my $usage = Slack::default_usage("$PROG [options] <role> [<role>...]");
 | 
			
		||||
$usage .= <<EOF;
 | 
			
		||||
 | 
			
		||||
  --subdir DIR
 | 
			
		||||
      Sync this subdir only.  Possible values for DIR are 'files' and
 | 
			
		||||
      'scripts'.
 | 
			
		||||
EOF
 | 
			
		||||
# Option defaults
 | 
			
		||||
my %opt = ();
 | 
			
		||||
Slack::get_options(
 | 
			
		||||
  opthash => \%opt,
 | 
			
		||||
  command_line_options => [
 | 
			
		||||
    'subdir=s',
 | 
			
		||||
  ],
 | 
			
		||||
  usage => $usage,
 | 
			
		||||
  required_options => [ qw(cache stage) ],
 | 
			
		||||
);
 | 
			
		||||
 | 
			
		||||
# Arguments are required
 | 
			
		||||
die "No roles given!\n\n$usage" unless @ARGV;
 | 
			
		||||
 | 
			
		||||
# We only allow certain values for this option
 | 
			
		||||
if ($opt{subdir}) {
 | 
			
		||||
  unless ($opt{subdir} eq 'files' or $opt{subdir} eq 'scripts') {
 | 
			
		||||
    die "--subdir option must be 'files' or 'scripts'\n\n$usage";
 | 
			
		||||
  }
 | 
			
		||||
} else {
 | 
			
		||||
  $opt{subdir} = '';
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
# Prepare for backups
 | 
			
		||||
if ($opt{backup} and $opt{'backup-dir'}) {
 | 
			
		||||
  # Make sure backup directory exists
 | 
			
		||||
  unless (-d $opt{'backup-dir'}) {
 | 
			
		||||
    ($opt{verbose} > 0) and print STDERR "Creating backup directory '$opt{'backup-dir'}'\n";
 | 
			
		||||
    if (not $opt{'dry-run'}) {
 | 
			
		||||
      eval { mkpath($opt{'backup-dir'}); };
 | 
			
		||||
      die "Could not mkpath backup dir '$opt{'backup-dir'}': $@\n" if $@;
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
  push(@rsync, "--backup", "--backup-dir=$opt{'backup-dir'}");
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
# Pass options along to rsync
 | 
			
		||||
if ($opt{'dry-run'}) {
 | 
			
		||||
  push @rsync, '--dry-run';
 | 
			
		||||
}
 | 
			
		||||
# Pass options along to rsync
 | 
			
		||||
if ($opt{'verbose'} > 1) {
 | 
			
		||||
  push @rsync, '--verbose';
 | 
			
		||||
}
 | 
			
		||||
# }}}
 | 
			
		||||
 | 
			
		||||
# copy over the new files
 | 
			
		||||
for my $full_role (@ARGV) {
 | 
			
		||||
  # Split the full role (e.g. google.foogle.woogle) into components
 | 
			
		||||
  my @role_parts = split(/\./, $full_role);
 | 
			
		||||
  die "Internal error: Expect at least one role part" if not @role_parts;
 | 
			
		||||
  # Reassemble parts one at a time onto @role and sync as we go,
 | 
			
		||||
  # so we do "google", then "google.foogle", then "google.foogle.woogle"
 | 
			
		||||
  my @role = ();
 | 
			
		||||
  # Make sure we've got the right perms before we copy stuff down
 | 
			
		||||
  check_stage();
 | 
			
		||||
 | 
			
		||||
  # For the base role, do both files and scripts.
 | 
			
		||||
  push @role, shift @role_parts;
 | 
			
		||||
  for my $subdir(qw(files scripts)) {
 | 
			
		||||
    if (not $opt{subdir} or $opt{subdir} eq $subdir) {
 | 
			
		||||
      ($opt{verbose} > 1)
 | 
			
		||||
        and print STDERR "$PROG: Calling sync_role for $full_role, @role\n";
 | 
			
		||||
      # @role here will have one element, so sync_role will use --delete
 | 
			
		||||
      sync_role($full_role, $subdir, @role)
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  # For all subroles, just do the files.
 | 
			
		||||
  # (If we wanted script subroles to work like files, we'd get rid of this
 | 
			
		||||
  # distinction and simplify the code.)
 | 
			
		||||
  if (not $opt{subdir} or $opt{subdir} eq 'files') {
 | 
			
		||||
    while (@role_parts) {
 | 
			
		||||
      push @role, shift @role_parts;
 | 
			
		||||
      ($opt{verbose} > 1)
 | 
			
		||||
        and print STDERR "$PROG: Calling sync_role for $full_role, @role\n";
 | 
			
		||||
      sync_role($full_role, 'files', @role);
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  for my $subdir (qw(files scripts)) {
 | 
			
		||||
    apply_default_perms_to_role($full_role, $subdir)
 | 
			
		||||
      if (not $opt{subdir} or $opt{subdir} eq $subdir);
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
exit 0;
 | 
			
		||||
 | 
			
		||||
# Make sure the stage directory exists and is mode 0700, to protect files
 | 
			
		||||
# underneath in transit
 | 
			
		||||
sub check_stage () {
 | 
			
		||||
  my $stage = $opt{stage} . "/roles";
 | 
			
		||||
  if (not $opt{'dry-run'}) {
 | 
			
		||||
    if (not -d $stage) {
 | 
			
		||||
      ($opt{verbose} > 0) and print STDERR "$PROG: Creating '$stage'\n";
 | 
			
		||||
        eval { mkpath($stage); };
 | 
			
		||||
        die "Could not mkpath cache dir '$stage': $@\n" if $@;
 | 
			
		||||
    }
 | 
			
		||||
    ($opt{verbose} > 0) and print STDERR "$PROG: Checking perms on '$stage'\n";
 | 
			
		||||
    if ($> != 0) {
 | 
			
		||||
      warn "WARNING[$PROG]: Not superuser; unable to chown files\n";
 | 
			
		||||
    } else {
 | 
			
		||||
      chown(0, 0, $stage)
 | 
			
		||||
        or die "Could not chown 0:0 '$stage': $!\n";
 | 
			
		||||
    }
 | 
			
		||||
    chmod(0700, $stage)
 | 
			
		||||
      or die "Could not chmod 0700 '$stage': $!\n";
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
# Copy the files for a role from CACHE to STAGE
 | 
			
		||||
sub sync_role ($$@) {
 | 
			
		||||
  my ($full_role, $subdir, @role) = @_;
 | 
			
		||||
  my @this_rsync = @rsync;
 | 
			
		||||
 | 
			
		||||
  # If we were only given one role part, we're in the base role
 | 
			
		||||
  my $in_base_role = (scalar @role == 1);
 | 
			
		||||
 | 
			
		||||
  # For the base role, delete any files that don't exist in the cache.
 | 
			
		||||
  # Not for the subrole (otherwise we'll delete all files not in
 | 
			
		||||
  # the subrole, which may be most of them!)
 | 
			
		||||
  if ($in_base_role) {
 | 
			
		||||
    push @this_rsync, "--delete";
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  # (a)     => a/files 
 | 
			
		||||
  # (a,b,c) => a/files.b.c
 | 
			
		||||
  my $src_path = $role[0].'/'.join(".", $subdir, @role[1 .. $#role]);
 | 
			
		||||
  # This one's a little simpler:
 | 
			
		||||
  my $dst_path = $full_role.'/'.$subdir;
 | 
			
		||||
 | 
			
		||||
  # final / is important for rsync
 | 
			
		||||
  my $source = $opt{cache} . "/roles/" . $src_path . "/";
 | 
			
		||||
  my $destination = $opt{stage} . "/roles/" . $dst_path . "/";
 | 
			
		||||
  if (not -d $destination and -d $source) {
 | 
			
		||||
      ($opt{verbose} > 0) and print STDERR "$PROG: Creating '$destination'\n";
 | 
			
		||||
      if (not $opt{'dry-run'}) {
 | 
			
		||||
        eval { mkpath($destination); };
 | 
			
		||||
        die "Could not mkpath stage dir '$destination': $@\n" if $@;
 | 
			
		||||
      }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  # We no longer require the source to exist
 | 
			
		||||
  if (not -d $source) {
 | 
			
		||||
    # but we need to remove the destination if the source
 | 
			
		||||
    # doesn't exist and we're in the base role
 | 
			
		||||
    if ($in_base_role) {
 | 
			
		||||
      rmtree($destination);
 | 
			
		||||
      # rmtree() doesn't throw exceptions or give a return value useful
 | 
			
		||||
      # for detecting failure, so we just check after the fact.
 | 
			
		||||
      die "Could not rmtree '$destination' when '$source' missing\n"
 | 
			
		||||
        if -e $destination;
 | 
			
		||||
    }
 | 
			
		||||
    # if we continue, rsync will fail because source is missing,
 | 
			
		||||
    # so we don't.
 | 
			
		||||
    return;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  # All this to run an rsync command
 | 
			
		||||
  my @command = (@this_rsync, $source, $destination);
 | 
			
		||||
  ($opt{verbose} > 0) and print STDERR "$PROG: Syncing $src_path with '@command'\n";
 | 
			
		||||
  Slack::wrap_rsync(@command);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
# This just takes the base role, and chowns/chmods everything under it to
 | 
			
		||||
# give it some sensible permissions.  Basically, the only thing we preserve
 | 
			
		||||
# about the original permissions is the executable bit, since that's the
 | 
			
		||||
# only thing source code controls systems like CVS, RCS, Perforce seem to
 | 
			
		||||
# preserve.
 | 
			
		||||
sub apply_default_perms_to_role ($$) {
 | 
			
		||||
  my ($role, $subdir) = @_;
 | 
			
		||||
  my $destination = $opt{stage} . "/roles/" . $role;
 | 
			
		||||
 | 
			
		||||
  if ($subdir) {
 | 
			
		||||
    $destination .= '/' . $subdir;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  # If the destination doesn't exist, it's probably because the source didn't
 | 
			
		||||
  return if not -d $destination;
 | 
			
		||||
 | 
			
		||||
  ($opt{verbose} > 0) and print STDERR "$PROG: Setting default perms on $destination\n";
 | 
			
		||||
  if ($> != 0) {
 | 
			
		||||
    warn "WARNING[$PROG]: Not superuser; won't be able to chown files\n";
 | 
			
		||||
  }
 | 
			
		||||
  # Use File::Find to recurse the directory
 | 
			
		||||
  find({
 | 
			
		||||
      # The "wanted" subroutine is called for every directory entry
 | 
			
		||||
      wanted => sub {
 | 
			
		||||
        return if $opt{'dry-run'};
 | 
			
		||||
        ($opt{verbose} > 2) and print STDERR "$File::Find::name\n";
 | 
			
		||||
        if (-l) {
 | 
			
		||||
          # symlinks shouldn't be in here,
 | 
			
		||||
          #     since we dereference when copying
 | 
			
		||||
          warn "WARNING[$PROG]: Skipping symlink at $File::Find::name: $!\n";
 | 
			
		||||
          return;
 | 
			
		||||
        } elsif (-f _) { # results of last stat saved in the "_"
 | 
			
		||||
          if (-x _) {
 | 
			
		||||
            chmod 0555, $_
 | 
			
		||||
              or die "Could not chmod 0555 $File::Find::name: $!";
 | 
			
		||||
          } else {
 | 
			
		||||
            chmod 0444, $_
 | 
			
		||||
              or die "Could not chmod 0444 $File::Find::name: $!";
 | 
			
		||||
          }
 | 
			
		||||
        } elsif (-d _) {
 | 
			
		||||
          chmod 0755, $_
 | 
			
		||||
            or die "Could not chmod 0755 $File::Find::name: $!";
 | 
			
		||||
        } else {
 | 
			
		||||
          warn "WARNING[$PROG]: Unknown file type at $File::Find::name: $!\n";
 | 
			
		||||
        }
 | 
			
		||||
        return if $> != 0; # skip chowning if not superuser
 | 
			
		||||
        chown 0, 0, $_
 | 
			
		||||
          or die "Could not chown 0:0 $File::Find::name: $!";
 | 
			
		||||
      },
 | 
			
		||||
      # end of wanted function
 | 
			
		||||
    },
 | 
			
		||||
    # way down here, we have the directory to traverse with File::Find
 | 
			
		||||
    $destination,
 | 
			
		||||
  );
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										169
									
								
								slack/dist/slack-sync
									
									
									
									
										vendored
									
									
										Executable file
									
								
							
							
						
						
									
										169
									
								
								slack/dist/slack-sync
									
									
									
									
										vendored
									
									
										Executable file
									
								
							@@ -0,0 +1,169 @@
 | 
			
		||||
#!/usr/bin/perl -w
 | 
			
		||||
# $Id: slack-sync 180 2008-01-19 08:26:19Z alan $
 | 
			
		||||
# vim:sw=2
 | 
			
		||||
# vim600:fdm=marker
 | 
			
		||||
# Copyright (C) 2004-2008 Alan Sundell <alan@sundell.net>
 | 
			
		||||
# All Rights Reserved.  This program comes with ABSOLUTELY NO WARRANTY.
 | 
			
		||||
# See the file COPYING for details.
 | 
			
		||||
#
 | 
			
		||||
# This script is in charge of copying files from the (possibly remote)
 | 
			
		||||
# master directory to a local cache, using rsync
 | 
			
		||||
 | 
			
		||||
require 5.006;
 | 
			
		||||
use warnings FATAL => qw(all);
 | 
			
		||||
use strict;
 | 
			
		||||
use sigtrap qw(die untrapped normal-signals
 | 
			
		||||
               stack-trace any error-signals);
 | 
			
		||||
 | 
			
		||||
use File::Path;
 | 
			
		||||
 | 
			
		||||
use constant LIB_DIR => '/usr/lib/slack';
 | 
			
		||||
use lib LIB_DIR;
 | 
			
		||||
use Slack;
 | 
			
		||||
 | 
			
		||||
my @rsync = ('rsync',
 | 
			
		||||
              '--cvs-exclude',
 | 
			
		||||
              '--recursive',
 | 
			
		||||
	      '--links',
 | 
			
		||||
              '--copy-links',
 | 
			
		||||
              '--times',
 | 
			
		||||
              '--perms',
 | 
			
		||||
              '--sparse',
 | 
			
		||||
              '--delete',
 | 
			
		||||
              '--files-from=-',
 | 
			
		||||
              '--from0',
 | 
			
		||||
              );
 | 
			
		||||
 | 
			
		||||
(my $PROG = $0) =~ s#.*/##;
 | 
			
		||||
 | 
			
		||||
sub check_cache ($);
 | 
			
		||||
sub rsync_source ($$@);
 | 
			
		||||
 | 
			
		||||
########################################
 | 
			
		||||
# Environment
 | 
			
		||||
# Helpful prefix to die messages
 | 
			
		||||
$SIG{__DIE__} = sub { die "FATAL[$PROG]: @_"; };
 | 
			
		||||
# Set a reasonable umask
 | 
			
		||||
umask 077;
 | 
			
		||||
# Get out of wherever (possibly NFS-mounted) we were
 | 
			
		||||
chdir("/")
 | 
			
		||||
  or die "Could not chdir /: $!";
 | 
			
		||||
# Autoflush on STDERR
 | 
			
		||||
select((select(STDERR), $|=1)[0]);
 | 
			
		||||
 | 
			
		||||
########################################
 | 
			
		||||
# Config and option parsing {{{
 | 
			
		||||
my $usage = Slack::default_usage("$PROG [options] <role> [<role>...]");
 | 
			
		||||
# Option defaults
 | 
			
		||||
my %opt = ();
 | 
			
		||||
Slack::get_options(
 | 
			
		||||
  opthash => \%opt,
 | 
			
		||||
  usage => $usage,
 | 
			
		||||
  required_options => [ qw(source cache) ],
 | 
			
		||||
);
 | 
			
		||||
 | 
			
		||||
# Arguments are required
 | 
			
		||||
die "No roles given!\n\n$usage" unless @ARGV;
 | 
			
		||||
 | 
			
		||||
# Prepare for backups
 | 
			
		||||
if ($opt{backup} and $opt{'backup-dir'}) {
 | 
			
		||||
  # Make sure backup directory exists
 | 
			
		||||
  unless (-d $opt{'backup-dir'}) {
 | 
			
		||||
    ($opt{verbose} > 0) and print STDERR "Creating backup directory '$opt{'backup-dir'}'\n";
 | 
			
		||||
    if (not $opt{'dry-run'}) {
 | 
			
		||||
      eval { mkpath($opt{'backup-dir'}); };
 | 
			
		||||
      die "Could not mkpath backup dir '$opt{'backup-dir'}': $@\n" if $@;
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
  push(@rsync, "--backup", "--backup-dir=$opt{'backup-dir'}");
 | 
			
		||||
}
 | 
			
		||||
# Look at source type, and add options if necessary
 | 
			
		||||
if ($opt{'rsh'} or $opt{source} =~ m/^[\w@\.-]+::/) {
 | 
			
		||||
  # This is tunnelled rsync, and so needs an extra option
 | 
			
		||||
  if ($opt{'rsh'}) {
 | 
			
		||||
    push @rsync, '-e', $opt{'rsh'};
 | 
			
		||||
  } else {
 | 
			
		||||
    push @rsync, '-e', 'ssh';
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
# Pass options along to rsync
 | 
			
		||||
if ($opt{'dry-run'}) {
 | 
			
		||||
  push @rsync, '--dry-run';
 | 
			
		||||
}
 | 
			
		||||
# Pass options along to rsync
 | 
			
		||||
if ($opt{'verbose'} > 1) {
 | 
			
		||||
  push @rsync, '--verbose';
 | 
			
		||||
}
 | 
			
		||||
# }}}
 | 
			
		||||
 | 
			
		||||
my @roles = ();
 | 
			
		||||
 | 
			
		||||
{
 | 
			
		||||
  # This hash is just to avoid calling rsync twice if two subroles are
 | 
			
		||||
  # installed.  We only care since it's remote, and therefore slow.
 | 
			
		||||
  my %roles_to_sync = ();
 | 
			
		||||
 | 
			
		||||
  # copy over the new files
 | 
			
		||||
  for my $full_role (@ARGV) {
 | 
			
		||||
    # Get the first element of the role name (the base role)
 | 
			
		||||
    # e.g., from "google.foogle.woogle", get "google"
 | 
			
		||||
    my $base_role = (split /\./, $full_role, 2)[0];
 | 
			
		||||
 | 
			
		||||
    $roles_to_sync{$base_role} = 1;
 | 
			
		||||
  }
 | 
			
		||||
  @roles = keys %roles_to_sync;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
my $cache = $opt{cache} . "/roles/";
 | 
			
		||||
# Make sure we've got the right perms before we copy stuff down
 | 
			
		||||
check_cache($cache);
 | 
			
		||||
 | 
			
		||||
rsync_source(
 | 
			
		||||
  $opt{source} . '/roles/',
 | 
			
		||||
  $cache,
 | 
			
		||||
  @roles,
 | 
			
		||||
);
 | 
			
		||||
 | 
			
		||||
exit 0;
 | 
			
		||||
 | 
			
		||||
# Make sure the cache directory exists and is mode 0700, to protect files
 | 
			
		||||
# underneath in transit
 | 
			
		||||
sub check_cache ($) {
 | 
			
		||||
  my ($cache) = @_;
 | 
			
		||||
  if (not $opt{'dry-run'}) {
 | 
			
		||||
    if (not -d $cache) {
 | 
			
		||||
      ($opt{verbose} > 0) and print STDERR "$PROG: Creating '$cache'\n";
 | 
			
		||||
        eval { mkpath($cache); };
 | 
			
		||||
        die "Could not mkpath cache dir '$cache': $@\n" if $@;
 | 
			
		||||
    }
 | 
			
		||||
    ($opt{verbose} > 0) and print STDERR "$PROG: Checking perms on '$cache'\n";
 | 
			
		||||
    if ($> != 0) {
 | 
			
		||||
      warn "WARNING[$PROG]: Not superuser; unable to chown files\n";
 | 
			
		||||
    } else {
 | 
			
		||||
      chown(0, 0, $cache)
 | 
			
		||||
        or die "Could not chown 0:0 '$cache': $!\n";
 | 
			
		||||
    }
 | 
			
		||||
    chmod(0700, $cache)
 | 
			
		||||
      or die "Could not chmod 0700 '$cache': $!\n";
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
# Pull down roles from an rsync source
 | 
			
		||||
sub rsync_source($$@) {
 | 
			
		||||
  my ($source, $destination, @roles) = @_;
 | 
			
		||||
  my @command = (@rsync, $source, $destination);
 | 
			
		||||
 | 
			
		||||
  ($opt{verbose} > 0)
 | 
			
		||||
    and print STDERR "$PROG: Syncing cache with '@command'\n";
 | 
			
		||||
 | 
			
		||||
  my ($fh) = Slack::wrap_rsync_fh(@command);
 | 
			
		||||
 | 
			
		||||
  # Shove the roles down its throat
 | 
			
		||||
  print $fh join("\0", @roles), "\0";
 | 
			
		||||
 | 
			
		||||
  # Close fh, waitpid, and check return value
 | 
			
		||||
  unless (close($fh)) {
 | 
			
		||||
    Slack::check_system_exit(@command);
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										0
									
								
								slack/dist/slack.conf
									
									
									
									
										vendored
									
									
										Executable file
									
								
							
							
						
						
									
										0
									
								
								slack/dist/slack.conf
									
									
									
									
										vendored
									
									
										Executable file
									
								
							
							
								
								
									
										6
									
								
								slack/env/SlackConfig-prod.config
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								slack/env/SlackConfig-prod.config
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,6 @@
 | 
			
		||||
ROLE_LIST=toolbox.turnsys.net:/local/slack-prod/etc/roles.conf
 | 
			
		||||
SOURCE=toolbox.turnsys.net:/local/slack-prod/
 | 
			
		||||
CACHE=/var/cache/slack
 | 
			
		||||
STAGE=/var/lib/slack/stage
 | 
			
		||||
ROOT=/
 | 
			
		||||
BACKUP_DIR=/var/lib/slack/backups
 | 
			
		||||
							
								
								
									
										4
									
								
								slack/env/SlackSSH-prod.config
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										4
									
								
								slack/env/SlackSSH-prod.config
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,4 @@
 | 
			
		||||
Host toolbox.turnsys.net
 | 
			
		||||
            User slack-prod
 | 
			
		||||
            IdentityFile /root/.ssh/SlackSSH-prod.key 
 | 
			
		||||
	    	StrictHostKeyChecking no
 | 
			
		||||
							
								
								
									
										27
									
								
								slack/env/SlackSSH-prod.key
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										27
									
								
								slack/env/SlackSSH-prod.key
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,27 @@
 | 
			
		||||
-----BEGIN RSA PRIVATE KEY-----
 | 
			
		||||
MIIEowIBAAKCAQEAycZwe0FuYISsFaHvaplNhb9uplG8YeMkffIKXp633MwihACm
 | 
			
		||||
oNoKEQHlqSKD1urZfLYjwf1YBKAPt9QRdIguwsQ3hl3xKpsO+gsmaOpF3eJMVWHZ
 | 
			
		||||
dS/T7lplIOcXr0tbUeibQ9p+c+MgICfpdAJvUnuD8grDmaTuvasBat4Ow6rXIzsQ
 | 
			
		||||
WKzSrP3iQJ0xeq+mqRIlPP5dwl66RF+dlaloVxlvG95i3u512EkNg+sMt1X5KbhH
 | 
			
		||||
ecQSicpA8K2qK4G71CqRIm7DmXCheSlDzqLACwJAFOU4xN3eqTO3B4Bm5Wri9Oip
 | 
			
		||||
hkwzMgWrDNFx/69ZnGF69g0VP8Qyl4R7d3FZDQIDAQABAoIBAQCzCDYpxybO0Sl3
 | 
			
		||||
kFXEuf3FHNRrEr8aA9cPQUHeLuppKV++zG0M8CpaaNqENjHQ8lTDiUE1ETuV7wfD
 | 
			
		||||
TpGmWmdTPZMe0B/6c9bYGiickrInbHHamJXAmw1qwh5VEXc8fJqslL2feTEWVoLc
 | 
			
		||||
xU0pODfacenjS5W+sE99T0xUrG9hQJMRtNOorMQiUraLl670yIZnzMszDIdd1xdv
 | 
			
		||||
4XCuQ5Phnup22/kvByIdiNXPaSY/gOooBTZDUzka+FV3Nn9XXhZoNBnNfk6XgHZw
 | 
			
		||||
x9vQvnN+tuDr6RX4g1RPq/u6IhsQO2/OT9wwu74KLdkLFTssGold73uys2WvC0NW
 | 
			
		||||
zNFVBuBBAoGBAO6lhTWE2hvt5h7btEY36XgoJbu0k/E7fVgEud2yCdRdQ5ApAHVs
 | 
			
		||||
xvol1D3waVKUrRePKq2BhaylwtYACYAow3geMsGrlf4ndlLOQ1z6ByNncJPF3Tr1
 | 
			
		||||
lFp025QLijoKmnCq3CdIVPrdhTm44go2usXytobpxS2nB5hZwZfyDju5AoGBANhy
 | 
			
		||||
i9vOlRXcLiHpmzAKwFs/jR9D09DUZ6ALm22HvDOsISJS+nR2neun+7HXXHm1Kqyu
 | 
			
		||||
w1GA8xaqBnuFfuHP09ZYTNammEROS8dL/5muGCwrfwIrd/H4ELsE0spWOrTlfgY/
 | 
			
		||||
GN5WeoXZGAwjiu67AoRkpKIQxnsjEKSNKZQntjn1AoGAOyAdIcZZd2P4iJqsTl1Z
 | 
			
		||||
5aAkwR2bLcAsbNs25XtPviKhM51E9NLPdXhb3kCrB3+4ZsbcrwIRCVZEMFrv/6WZ
 | 
			
		||||
0C/DKYKGdeJ3CUr7G5UCob3mAWabShk/+S1MnaBCTeEEpHdgdgcQrtqlQEjTD+7B
 | 
			
		||||
VXutxz0x0f64/gD22ttotVkCgYAma4a52JyMCc5ChMXgLDhiuhAhuZdynRFbzlOj
 | 
			
		||||
iJF2lpo3DoWYgKmdd+7sbW7jx62wg0D2Sa5cmoeWC2cvTAWtKXVSMLYcgc1frfTL
 | 
			
		||||
4aQ2yu27g93BnKfTmpKUCeRX0dih4TdX1//dnGBxXym9IILc30R94/5nQx0kKE52
 | 
			
		||||
Fup4tQKBgHrDPBIJG3MkA5UIkBPnxE9Ei8V4g/TpYjmC+6JiWkBTQCNZ4A2KKl7S
 | 
			
		||||
pwGQwdcqA5OsPbw0T54HwMtDm0ao0b3krb70vBw/xdIAHNe3DCmeOuKelvjDyzr1
 | 
			
		||||
ZL6gF557VfKFjz23Hp2PbOYo88BAdX1H1zy0FUZJ7Zh4GbOjgVFQ
 | 
			
		||||
-----END RSA PRIVATE KEY-----
 | 
			
		||||
							
								
								
									
										1
									
								
								slack/env/SlackSSH-prod.key.pub
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								slack/env/SlackSSH-prod.key.pub
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1 @@
 | 
			
		||||
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDJxnB7QW5ghKwVoe9qmU2Fv26mUbxh4yR98gpenrfczCKEAKag2goRAeWpIoPW6tl8tiPB/VgEoA+31BF0iC7CxDeGXfEqmw76CyZo6kXd4kxVYdl1L9PuWmUg5xevS1tR6JtD2n5z4yAgJ+l0Am9Se4PyCsOZpO69qwFq3g7DqtcjOxBYrNKs/eJAnTF6r6apEiU8/l3CXrpEX52VqWhXGW8b3mLe7nXYSQ2D6wy3VfkpuEd5xBKJykDwraorgbvUKpEibsOZcKF5KUPOosALAkAU5TjE3d6pM7cHgGblauL06KmGTDMyBasM0XH/r1mcYXr2DRU/xDKXhHt3cVkN charles@ultix-mini
 | 
			
		||||
							
								
								
									
										
											BIN
										
									
								
								slack/slackDist.tar.gz
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								slack/slackDist.tar.gz
									
									
									
									
									
										Executable file
									
								
							
										
											Binary file not shown.
										
									
								
							
		Reference in New Issue
	
	Block a user