forked from librenms/librenms
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathvalidate.php
executable file
·165 lines (142 loc) · 6.03 KB
/
validate.php
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
157
158
159
160
161
162
163
164
165
#!/usr/bin/php
<?php
/*
* LibreNMS
*
* Copyright (c) 2014 Neil Lathwood <https://github.com/laf/ http://www.lathwood.co.uk/fa>
*
* 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. Please see LICENSE.txt at the top level of
* the source code distribution for details.
*/
include('includes/console_colour.php');
$console_color = new Console_Color2();
$options = getopt("m:h::");
if (isset($options['h'])) {
print $console_color->convert("\n Validate setup tool
Usage: ./validate.php [-m <module>] [-h]
-h This help section.
-m Any sub modules you want to run, comma separated:
- mail: this will test your email settings (uses default_mail option even if default_only is not set).
Example: ./validate.php -m mail.
");
exit;
}
if (strstr(`php -ln config.php`,"No syntax errors detected")) {
$first_line = `head -n1 config.php`;
$last_lines = explode(PHP_EOL,`tail -n2 config.php`);
if (strstr($first_line,'\<\?php')) {
print_fail("config.php doesn't start with a <?php - please fix this ($first_line)");
} elseif ($last_lines[0] == '?>' && $last_lines[1] == '') {
print_fail('config.php contains a new line at the end, please remove any whitespace at the end of the file and also remove ?>');
} elseif ($last_lines[1] == '?>') {
print_warn("It looks like you have ?> at the end of config.php, it's suggested you remove this");
} else {
print_ok('config.php tested ok');
}
} else {
print_fail('Syntax error in config.php');
}
// load config.php now
require_once "includes/defaults.inc.php";
require_once "config.php";
require_once "includes/definitions.inc.php";
require_once "includes/functions.php";
require_once $config['install_dir']."/includes/alerts.inc.php";
// Run test on MySQL
$test_db = @mysqli_connect($config['db_host'],$config['db_user'],$config['db_pass'],$config['db_name']);
if (mysqli_connect_error()) {
print_fail("Error connecting to your database " . mysqli_connect_error());
} else {
print_ok('Database connection successful');
}
// Test transports
if ($config['alerts']['email']['enable'] === TRUE) {
print_warn("You have the old alerting system enabled - this is to be deprecated on the 1st of June 2015: https://groups.google.com/forum/#!topic/librenms-project/1llxos4m0p4");
}
// Test rrdcached
if (!$config['rrdcached']) {
$rrd_dir = stat($config['rrd_dir']);
if ($rrd_dir[4] == 0 || $rrd_dir[5] == 0) {
print_warn("Your RRD directory is owned by root, please consider changing over to user a non-root user");
}
if (substr(sprintf('%o', fileperms($config['rrd_dir'])), -3) != 775) {
print_warn("Your RRD directory is not set to 0775, please check our installation instructions");
}
}
// Disk space and permission checks
if (substr(sprintf('%o', fileperms($config['temp_dir'])), -3) != 777) {
print_warn("Your tmp directory (".$config['temp_dir'].") is not set to 777 so graphs most likely won't be generated");
}
$space_check = disk_free_space($config['install_dir'])/1024/1024;
if ($space_check < 512 && $space_check > 1) {
print_warn("Disk space where " . $config['install_dir'] . " is located is less than 512Mb");
}
if ($space_check < 1) {
print_fail("Disk space where " . $config['install_dir'] . " is located is empty!!!");
}
// Check programs
$bins = array('fping');
foreach ($bins as $bin) {
if (!is_file($config[$bin])) {
print_fail("$bin location is incorrect or bin not installed");
} else {
print_ok("$bin has been found");
}
}
// Modules test
$modules = explode(",",$options['m']);
foreach ($modules as $module) {
switch ($module) {
case "mail":
if ($config['alert']['transports']['mail'] === TRUE) {
$run_test = 1;
if (empty($config['alert']['default_mail'])) {
print_fail("default_mail config option needs to be specified to test email");
$run_test = 0;
} elseif ($config['email_backend'] == 'sendmail') {
if (empty($config['email_sendmail_path']) || !file_exists($config['email_sendmail_path'])) {
print_fail("You have selected sendmail but not configured email_sendmail_path or it's not valid");
$run_test = 0;
}
} elseif ($config['email_backend'] == 'smtp') {
if (empty($config['email_smtp_host'])) {
print_fail("You have selected smtp but not configured an smtp host");
$run_test = 0;
}
if (empty($config['email_smtp_port'])) {
print_fail("You have selected smtp but not configured an smtp port");
$run_test = 0;
}
if (($config['email_smtp_auth'] === TRUE) && (empty($config['email_smtp_username']) || empty($config['email_smtp_password']))) {
print_fail("You have selected smtp but not configured a username or password");
$run_test = 0;
}
}
if ($run_test == 1) {
if ($err = send_mail($config['alert']['default_mail'], 'Test email', 'Testing email from NMS')) {
print_ok("Email has been sent");
} else {
print_fail("Issue sending email to " . $config['alert']['default_mail'] . " with error " . $err);
}
}
}
break;
}
}
// End
function print_ok($msg) {
global $console_color;
print $console_color->convert("%g[OK]%n %W$msg\n");
}
function print_fail($msg) {
global $console_color;
print $console_color->convert("%r[FAIL]%n %W$msg\n");
}
function print_warn($msg) {
global $console_color;
print $console_color->convert("%y[WARN]%n %W$msg\n");
}
?>