aboutsummaryrefslogtreecommitdiff
path: root/network/metasploit/metasploit.SlackBuild
blob: c52f31eea70401518443d2f51cfe063b7e842d34 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
#!/bin/bash

# Slackware build script for Metasploit Framework

# Copyright 2013 Andrea Villa <andreakarimodm@gmail.com>
# Copyright 2010-2011 Marco Bonetti <sid77@slackware.it>
# All rights reserved.
#
# Redistribution and use of this script, with or without modification, is
# permitted provided that the following conditions are met:
#
# 1. Redistributions of this script must retain the above copyright
#    notice, this list of conditions and the following disclaimer.
#
# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ''AS IS'' AND ANY EXPRESS OR IMPLIED
# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
# MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
# EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
# OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

# If you want to build a different version from the one defined in the VERSION
# variable just try to launch the script redefining this.

cd $(dirname $0) ; CWD=$(pwd)

PRGNAM=metasploit
VERSION=${VERSION:-4.7.0}
BUILD=${BUILD:-1}
TAG=${TAG:-_SBo}

if [ -z "$ARCH" ]; then
  case "$( uname -m )" in
    i?86) ARCH=i486 ;;
    arm*) ARCH=arm ;;
       *) ARCH=$( uname -m ) ;;
  esac
fi

TMP=${TMP:-/tmp/SBo}
PKG=$TMP/package-$PRGNAM
OUTPUT=${OUTPUT:-/tmp}

BASEINSTDIR="opt"
INSTDIR="$BASEINSTDIR/metasploit"

# PostgreSQL user and group
PG_UID=${PG_UID:-209}
PG_GID=${PG_GID:-209}

# On which port is PostgreSQL listening to?
# Default is 7175, set PG_PORT to any other value if you want to customize it.
PG_PORT=${PG_PORT:-7175}

# Bail out if user or group isn't valid on your system
# For slackbuilds.org, assigned postgres uid/gid are 209/209
# See http://slackbuilds.org/uid_gid.txt
# Other popular choice is 26/26
if ! grep ^postgres: /etc/group 2>&1 > /dev/null; then
  echo "  You must have a postgres group to run this script."
  echo "    # groupadd -g $PG_GID postgres"
  exit 1
elif ! grep ^postgres: /etc/passwd 2>&1 > /dev/null; then
  echo "  You must have a postgres user to run this script."
  echo "    # useradd -u $PG_UID -g $PG_GID -d /var/lib/pgsql postgres"
  exit 1
fi

if [ "$ARCH" = "i486" ]; then
  INSTALLERARCH=""
elif [ "$ARCH" = "i686" ]; then
  INSTALLERARCH=""
elif [ "$ARCH" = "x86_64" ]; then
  INSTALLERARCH="-x64"
fi

set -e

rm -rf $PKG
mkdir -p $TMP $PKG $OUTPUT

# Install Metasploit Framework DIRECTLY under /opt/metasploit (sorry!)
echo "Installing the Metasploit Framework..."
chown root:root $CWD/metasploit-$VERSION-linux$INSTALLERARCH-installer.run
chmod 755 $CWD/metasploit-$VERSION-linux$INSTALLERARCH-installer.run

$CWD/metasploit-$VERSION-linux$INSTALLERARCH-installer.run \
  --mode unattended \
  --unattendedmodeui none \
  --postgres_port $PG_PORT

# Stop Metasploit Framework PostgreSQL
echo "Stopping Metasploit Framework..."
INITSCRIPT=metasploit
if ! /etc/init.d/$INITSCRIPT stop; then
	echo "Waiting for PostgreSQL to finish deferred work..."
	PSPID=$(head -1 /$INSTDIR/postgresql/data/postmaster.pid)
	while kill -0 $PSPID 2>/dev/null; do
		sleep 1;
	done
fi

# Move install dir
mkdir -p $PKG/$BASEINSTDIR
mv /$INSTDIR $PKG/$BASEINSTDIR/

# Fix init script and move it to the right directory
# This script is not handled by the uninstaller and the user should not call
# the uninstall script anyway, so no problem if we made it more Slackware-ish
echo "Fixing Metasploit Framework init script..."
mkdir -p $PKG/etc/rc.d
rm -f /etc/rc.d/rc?.d/S80metasploit /etc/rc.d/rc?.d/K30metasploit
mv /etc/init.d/$INITSCRIPT $PKG/etc/rc.d/rc.$INITSCRIPT.new
chown root:root $PKG/etc/rc.d/rc.$INITSCRIPT.new
chmod 755 $PKG/etc/rc.d/rc.$INITSCRIPT.new
# Default installation makes pro stuff, starting METASPLOIT_SCRIPT, PROSVC_SCRIPT and WORKER_SCRIPT. Disable this...
# We want only to start framework's PostgreSQL
chmod -x $PKG/$INSTDIR/apps/pro/ui/scripts/ctl.sh
chmod -x $PKG/$INSTDIR/apps/pro/engine/scripts/ctl.sh
chmod -x $PKG/$INSTDIR/apps/pro/ui/scripts/worker_ctl.sh

# Install /usr/bin links
mkdir -p $PKG/usr/bin
echo "Installing links into /usr/bin..."
( cd $PKG/usr/bin
  for file in $(ls ../../$INSTDIR/app/msf*); do
    ln -sf $file $(basename $file)
  done
  # also links armitage
  ln -sf ../../$INSTDIR/app/armitage armitage
)

# Every useful doc is included inside the framework folder, just copy over the
# README which contains the important copyright disclaimer and the cron script
mkdir -p $PKG/usr/doc/$PRGNAM-$VERSION
cp -a $PKG/$INSTDIR/apps/pro/msf3/README.md $PKG/usr/doc/$PRGNAM-$VERSION
cat $CWD/msfupdate.sh > $PKG/usr/doc/$PRGNAM-$VERSION/msfupdate.sh
cat $CWD/msfupdate.logrotate > $PKG/usr/doc/$PRGNAM-$VERSION/msfupdate.logrotate
cat $CWD/$PRGNAM.SlackBuild > $PKG/usr/doc/$PRGNAM-$VERSION/$PRGNAM.SlackBuild
cat $CWD/README.SLACKWARE > $PKG/usr/doc/$PRGNAM-$VERSION/README.SLACKWARE

mkdir -p $PKG/install
cat $CWD/slack-desc > $PKG/install/slack-desc
cat $CWD/doinst.sh > $PKG/install/doinst.sh

# Create a symbolic link to msf3 core directory for convenience
ln -s apps/pro/msf3 $PKG/$INSTDIR/msf3

# Do NOT chown -R root:root or it will bork the shipped PostgreSQL
# installation: the bitrock installer should have taken care of permissions
cd $PKG
/sbin/makepkg -l y -c n $OUTPUT/$PRGNAM-$VERSION-$ARCH-$BUILD$TAG.${PKGTYPE:-tgz}