diff --git a/src/etc/config.xml.sample b/src/etc/config.xml.sample
index 16960f0f6..0d386ee18 100644
--- a/src/etc/config.xml.sample
+++ b/src/etc/config.xml.sample
@@ -457,6 +457,6 @@
- system_information-container:col1:show,captive_portal_status-container:col1:close,carp_status-container:col1:close,cpu_graphs-container:col1:close,gateways-container:col1:close,gmirror_status-container:col1:close,installed_packages-container:col1:close,interface_statistics-container:col1:close,interface_list-container:col2:show,ipsec-container:col2:close,load_balancer_status-container:col2:close,log-container:col2:close,picture-container:col2:close,rss-container:col2:close,services_status-container:col2:close,traffic_graphs-container:col2:close
+ system_information-container:col1:show,captive_portal_status-container:col1:close,carp_status-container:col1:close,cpu_graphs-container:col1:close,gateways-container:col1:close,interface_statistics-container:col1:close,interface_list-container:col2:show,ipsec-container:col2:close,load_balancer_status-container:col2:close,log-container:col2:close,picture-container:col2:close,rss-container:col2:close,services_status-container:col2:close,traffic_graphs-container:col2:close
diff --git a/src/etc/inc/gmirror.inc b/src/etc/inc/gmirror.inc
deleted file mode 100644
index a31c3b36e..000000000
--- a/src/etc/inc/gmirror.inc
+++ /dev/null
@@ -1,161 +0,0 @@
- 0) {
- /* Loop through gmirror status output. */
- foreach ($status as $line) {
- /* Split the line by whitespace */
- $all = preg_split("/[\s\t]+/", trim($line), 3);
- if (count($all) == 3) {
- /* If there are three items on a line, it is mirror name, status, and component */
- $currentmirror = basename($all[0]);
- $mirrors[$currentmirror]['name'] = basename($all[0]);
- $mirrors[$currentmirror]['status'] = $all[1];
- if (!is_array($mirrors[$currentmirror]['components']))
- $mirrors[$currentmirror]['components'] = array();
- $mirrors[$currentmirror]['components'][] = $all[2];
- }
- }
- }
- /* Return an hash of mirrors and components */
- return $mirrors;
-}
-
-
-/* List all disks in the system (potential gmirror targets) */
-function gmirror_get_disks() {
- $disklist = "";
- /* Get a list of disks in a scriptable way, exclude optical drives */
- exec("/sbin/geom disk status -s | /usr/bin/grep -v '[[:blank:]]*cd[[:digit:]]*' | /usr/bin/awk '{print $1;}'", $disklist);
- return $disklist;
-}
-
-/* List all potential gmirror consumers */
-function gmirror_get_unused_consumers() {
- $consumerlist = "";
- /* Get a list of consumers, exclude existing mirrors and diskid entries */
- exec("/sbin/geom part status -s | /usr/bin/egrep -v '(mirror|diskid)' | /usr/bin/awk '{print $1, $3;}'", $consumerlist);
- $all_consumers = array();
- foreach ($consumerlist as $cl) {
- $parts = explode(" ", $cl);
- foreach ($parts as $part)
- $all_consumers[] = $part;
- }
- return $all_consumers;
-}
-
-/* List all existing geom mirrors */
-function gmirror_get_mirrors() {
- $mirrorlist = "";
- exec("/sbin/gmirror list | /usr/bin/grep '^Geom name:' | /usr/bin/awk '{print $3;}'", $mirrorlist);
- return $mirrorlist;
-}
-
-
-/* List all consumers for a given mirror */
-function gmirror_get_consumers_in_mirror($mirror) {
- if (!is_valid_mirror($mirror))
- return array();
-
- $consumers = array();
- exec("/sbin/gmirror status -s " . escapeshellarg($mirror) . " | /usr/bin/awk '{print $3;}'", $consumers);
- return $consumers;
-}
-
-/* Test if a mirror exists */
-function is_valid_mirror($mirror) {
- $mirrors = gmirror_get_mirrors();
- return in_array($mirror, $mirrors);
-}
-
-/* Test if a disk is valid/exists */
-function is_valid_disk($disk) {
- $adisks = gmirror_get_disks();
- return in_array(basename($disk), $adisks);
-}
-
-/* Test if a consumer is valid and in use in a mirror */
-function is_consumer_used($consumer) {
- $found = false;
- $mirrors = gmirror_get_mirrors();
- foreach ($mirrors as $mirror) {
- $consumers = gmirror_get_consumers_in_mirror($mirror);
- if (in_array($consumer, $consumers))
- return true;
- }
- return false;
-}
-
-/* Test if a consumer is valid and not in use */
-function is_consumer_unused($consumer) {
- $consumers = gmirror_get_unused_consumers();
- return in_array($consumer, $consumers);
-}
-
-/* Test if a consumer is valid (either a disk or partition) */
-function is_valid_consumer($consumer) {
- return (is_consumer_unused($consumer) || is_consumer_used($consumer));
-}
-
-
-/* Show all metadata on the physical consumer */
-function gmirror_get_consumer_metadata($consumer) {
- if (!is_valid_consumer($consumer))
- return array();
- $output = "";
- exec("/sbin/gmirror dump " . escapeshellarg($consumer), $output);
- return array_map('trim', $output);
-}
-
-/* Return a list of all potential consumers on a disk with sizes. The geom part
- list output is a little odd, we can't get the output for just the disk, if the disk contains
- slices those get output also. */
-function gmirror_get_all_unused_consumer_sizes_on_disk($disk) {
- if (!is_valid_disk($disk) || !is_consumer_unused($disk))
- return array();
- $output = "";
- exec("/sbin/geom part list " . escapeshellarg($disk) . " | /usr/bin/egrep '(Name:|Mediasize:)' | /usr/bin/cut -c4- | /usr/bin/sed -l -e 'N;s/\\nMediasize://;P;D;' | /usr/bin/cut -c7-", $output);
- $disk_contents = array();
- foreach ($output as $line) {
- list($name, $size, $humansize) = explode(" ", $line, 3);
- $consumer = array();
- $consumer['name'] = $name;
- $consumer['size'] = $size;
- $consumer['humansize'] = $humansize;
- $disk_contents[] = $consumer;
- }
- return $disk_contents;
-}
-
-?>
diff --git a/src/etc/rc b/src/etc/rc
index 6bbf5f43e..5ff133636 100755
--- a/src/etc/rc
+++ b/src/etc/rc
@@ -232,15 +232,6 @@ minicron 3600 /var/run/expire_accounts.pid /usr/local/etc/rc.expireaccounts
# Start alias url updater every 24 hours
minicron 86400 /var/run/update_alias_url_data.pid /usr/local/etc/rc.update_alias_url_data
-# Check for GEOM mirrors
-GMIRROR_STATUS=`/sbin/gmirror status`
-if [ "${GMIRROR_STATUS}" != "" ]; then
- # Using a flag file at bootup saves an expensive exec/check on each page load.
- touch /var/run/gmirror_active
- # Setup monitoring/notifications
- minicron 60 /var/run/gmirror_status_check.pid /usr/local/sbin/gmirror_status_check.php
-fi
-
/usr/local/sbin/beep.sh start
/usr/local/etc/rc.initial.banner
diff --git a/src/sbin/gmirror_status_check.php b/src/sbin/gmirror_status_check.php
deleted file mode 100644
index 8196b58ae..000000000
--- a/src/sbin/gmirror_status_check.php
+++ /dev/null
@@ -1,87 +0,0 @@
-#!/usr/local/bin/php
- 0) {
- // Check list of current mirrors vs old mirrors, notify if one has appeared/disappeared
- if ($mirror_list != $previous_mirror_list) {
- $notices[] = sprintf(gettext("List of mirrors changed. Old: (%s) New: (%s)"), implode(", ", $previous_mirror_list), implode(", ", $mirror_list));
- }
-
- // For each mirror, check the mirror status, notify if changed
- foreach ($mirror_list as $mirror) {
- if (is_array($previous_mirror_status[$mirror])) {
- // Notify if the status changed
- if ($mirror_status[$mirror]['status'] != $previous_mirror_status[$mirror]['status']) {
- $notices[] = sprintf(gettext("Mirror %s status changed from %s to %s."), $mirror, $previous_mirror_status[$mirror]['status'], $mirror_status[$mirror]['status']);
- }
- // Notify if the drive count changed
- if (count($mirror_status[$mirror]['components']) != count($previous_mirror_status[$mirror]['components'])) {
- // Notify if the consumer count changed.
- $notices[] = sprintf(gettext("Mirror %s consumer count changed from %d to %d."), $mirror, count($previous_mirror_status[$mirror]['components']), count($mirror_status[$mirror]['components']));
- }
- if (strtoupper($mirror_status[$mirror]['status']) == "DEGRADED") {
- // Check the drive status as it may be different.
- asort($mirror_status[$mirror]['components']);
- asort($previous_mirror_status[$mirror]['components']);
- if ($mirror_status[$mirror]['components'] != $previous_mirror_status[$mirror]['components']) {
- $notices[] = sprintf(
- gettext("Mirror %s drive status changed. Old: (%s) New: (%s)"),
- $mirror,
- implode(", ", $previous_mirror_status[$mirror]['components']),
- implode(", ", $mirror_status[$mirror]['components'])
- );
- }
- }
- }
- }
- }
-}
-if (count($notices)) {
- file_notice("gmirror", implode("\n ", $notices), "GEOM Mirror Status Change", 1);
-}
-// Write out current status if changed
-if ($mirror_status != $previous_mirror_status) {
- file_put_contents($status_file, serialize($mirror_status));
-}
diff --git a/src/www/diag_gmirror.php b/src/www/diag_gmirror.php
deleted file mode 100644
index f318c875e..000000000
--- a/src/www/diag_gmirror.php
+++ /dev/null
@@ -1,452 +0,0 @@
- 0);
-}
-
-/* Find the mirror to which this consumer belongs */
-function gmirror_get_consumer_metadata_mirror($consumer) {
- if (!is_valid_consumer($consumer))
- return array();
- $metadata = gmirror_get_consumer_metadata($consumer);
- foreach ($metadata as $line) {
- if (substr($line, 0, 5) == "name:") {
- list ($key, $value) = explode(":", $line, 2);
- return trim($value);
- }
- }
-}
-
-
-/* Deactivate consumer, removing it from service in the mirror, but leave metadata intact */
-function gmirror_deactivate_consumer($mirror, $consumer) {
- if (!is_valid_mirror($mirror) || !is_valid_consumer($consumer))
- return false;
- return mwexec("/sbin/gmirror deactivate " . escapeshellarg($mirror) . " " . escapeshellarg($consumer));
-}
-
-/* Reactivate a deactivated consumer */
-function gmirror_activate_consumer($mirror, $consumer) {
- if (!is_valid_mirror($mirror) || !is_valid_consumer($consumer))
- return false;
- return mwexec("/sbin/gmirror activate " . escapeshellarg($mirror) . " " . escapeshellarg($consumer));
-}
-
-/* Find the size of the given mirror */
-function gmirror_get_mirror_size($mirror) {
- if (!is_valid_mirror($mirror))
- return false;
- $mirrorsize = "";
- exec("/sbin/gmirror list " . escapeshellarg($mirror) . " | /usr/bin/grep 'Mediasize:' | /usr/bin/head -n 1 | /usr/bin/awk '{print $2;}'", $mirrorsize);
- return $mirrorsize[0];
-}
-
-/* Get only the size for one specific potential consumer. */
-function gmirror_get_unused_consumer_size($consumer) {
- $consumersizes = gmirror_get_all_unused_consumer_sizes_on_disk($consumer);
- foreach ($consumersizes as $csize) {
- if ($csize['name'] == $consumer)
- return $csize['size'];
- }
- return -1;
-}
-
-
-$pgtitle = array(gettext("Diagnostics"), gettext("GEOM Mirrors"));
-
-include("head.inc");
-
-?>
-
-
-
-
-
- gettext("Forget all formerly connected consumers"),
- "clear" => gettext("Remove metadata from disk"),
- "insert" => gettext("Insert consumer into mirror"),
- "remove" => gettext("Remove consumer from mirror"),
- "activate" => gettext("Reactivate consumer on mirror"),
- "deactivate" => gettext("Deactivate consumer from mirror"),
- "rebuild" => gettext("Force rebuild of mirror consumer"),
-);
-
-/* User tried to pass a bogus action */
-if (!empty($_REQUEST['action']) && !array_key_exists($_REQUEST['action'], $action_list)) {
- header("Location: diag_gmirror.php");
- return;
-}
-
-if ($_POST) {
- if (!isset($_POST['confirm']) || ($_POST['confirm'] != gettext("Confirm"))) {
- header("Location: diag_gmirror.php");
- return;
- }
- $input_errors = "";
-
- if (($_POST['action'] != "clear") && !is_valid_mirror($_POST['mirror']))
- $input_errors[] = gettext("You must supply a valid mirror name.");
-
- if (!empty($_POST['consumer']) && !is_valid_consumer($_POST['consumer']))
- $input_errors[] = gettext("You must supply a valid consumer name");
-
- /* Additional action-specific validation that hasn't already been tested */
- switch ($_POST['action']) {
- case "insert":
- if (!is_consumer_unused($_POST['consumer']))
- $input_errors[] = gettext("Consumer is already in use and cannot be inserted. Remove consumer from existing mirror first.");
- if (gmirror_consumer_has_metadata($_POST['consumer']))
- $input_errors[] = gettext("Consumer has metadata from an existing mirror. Clear metadata before inserting consumer.");
- $mstat = gmirror_get_status_single($_POST['mirror']);
- if (strtoupper($mstat) != "COMPLETE")
- $input_errors[] = gettext("Mirror is not in a COMPLETE state, cannot insert consumer. Forget disconnected disks or wait for rebuild to finish.");
- break;
- case "clear":
- if (!is_consumer_unused($_POST['consumer']))
- $input_errors[] = gettext("Consumer is in use and cannot be cleared. Deactivate disk first.");
- if (!gmirror_consumer_has_metadata($_POST['consumer']))
- $input_errors[] = gettext("Consumer has no metadata to clear.");
- break;
- case "activate":
- if (is_consumer_in_mirror($_POST['consumer'], $_POST['mirror']))
- $input_errors[] = gettext("Consumer is already present on specified mirror.");
- if (!gmirror_consumer_has_metadata($_POST['consumer']))
- $input_errors[] = gettext("Consumer has no metadata and cannot be reactivated.");
-
- break;
- case "remove":
- case "deactivate":
- case "rebuild":
- if (!is_consumer_in_mirror($_POST['consumer'], $_POST['mirror']))
- $input_errors[] = gettext("Consumer must be present on the specified mirror.");
- break;
- }
-
-$result = 0;
- if (empty($input_errors)) {
- switch ($_POST['action']) {
- case "forget":
- $result = gmirror_forget_disconnected($_POST['mirror']);
- break;
- case "clear":
- $result = gmirror_clear_consumer($_POST['consumer']);
- break;
- case "insert":
- $result = gmirror_insert_consumer($_POST['mirror'], $_POST['consumer']);
- break;
- case "remove":
- $result = gmirror_remove_consumer($_POST['mirror'], $_POST['consumer']);
- break;
- case "activate":
- $result = gmirror_activate_consumer($_POST['mirror'], $_POST['consumer']);
- break;
- case "deactivate":
- $result = gmirror_deactivate_consumer($_POST['mirror'], $_POST['consumer']);
- break;
- case "rebuild":
- $result = gmirror_force_rebuild($_POST['mirror'], $_POST['consumer']);
- break;
- }
- $redir = "Location: diag_gmirror.php";
- if ($result != 0) {
- $redir .= "?error=" . urlencode($result);
- }
- /* If we reload the page too fast, the gmirror information may be missing or not up-to-date. */
- sleep(3);
- header($redir);
- return;
- }
-}
-
-$mirror_status = gmirror_get_status();
-$mirror_list = gmirror_get_mirrors();
-$unused_disks = gmirror_get_disks();
-$unused_consumers = array();
-foreach ($unused_disks as $disk) {
- if (is_consumer_unused($disk))
- $unused_consumers = array_merge($unused_consumers, gmirror_get_all_unused_consumer_sizes_on_disk($disk));
-}
-
-?>
-
-
-
-
-
-
-
-
-
- if (isset($input_errors) && count($input_errors) > 0)
- print_input_errors($input_errors);
- if ($_GET["error"] && ($_GET["error"] != 0))
- print_info_box(gettext("There was an error performing the chosen mirror operation. Check the System Log for details."));
-
- ?>
-
-
-
-
-
-";
-echo "jQuery('#loading').html('');";
-echo "";
-
-?>
-
diff --git a/src/www/widgets/widgets/gmirror_status.widget.php b/src/www/widgets/widgets/gmirror_status.widget.php
deleted file mode 100644
index 9e5518642..000000000
--- a/src/www/widgets/widgets/gmirror_status.widget.php
+++ /dev/null
@@ -1,93 +0,0 @@
- 0) {
- $output .= "\n";
- $output .= "| ".gettext('Name')." | \n";
- $output .= "".gettext('Status')." | \n";
- $output .= "".gettext('Component')." | \n";
- $output .= "
\n";
- foreach ($mirrors as $mirror => $name) {
- $components = count($name["components"]);
- $output .= "\n";
- $output .= "| {$name['name']} | \n";
- $output .= "{$name['status']} | \n";
- $output .= "{$name['components'][0]} | \n";
- $output .= "
\n";
- if (count($name["components"]) > 1) {
- $morecomponents = array_slice($name["components"], 1);
- foreach ($morecomponents as $component) {
- $output .= "\n";
- $output .= "| {$component} | \n";
- $output .= "
\n";
- }
- }
- }
- } else {
- $output .= "| ".gettext('No Mirrors Found')." |
\n";
- }
- // $output .= "| Updated at " . date("F j, Y, g:i:s a") . " |
\n";
- return $output;
-}
-
-
-if ($_GET['textonly'] == "true") {
- header("Cache-Control: no-cache");
- echo gmirror_html_status();
- exit;
-}
-?>
-
-
-