Merge pull request #676 from bergware/mutli-language

Multi-language support
This commit is contained in:
tom mortensen
2020-05-09 22:23:18 -07:00
committed by GitHub
59 changed files with 406 additions and 2001 deletions

View File

@@ -60,9 +60,7 @@ _(Start APC UPS daemon)_:
<?=mk_option($cfg['SERVICE'], "enable", _("Yes"))?>
</select>
:help155
> Set to 'Yes' to enable apcupsd and start the daemon, set to 'No' to disable apcupsd and stop the daemon.
:end
:apc_ups_daemon_help:
_(UPS cable)_:
: <select name="UPSCABLE" onChange="toggleCustomCable(this.form)">
@@ -73,23 +71,12 @@ _(UPS cable)_:
<?=mk_option($cfg['UPSCABLE'], "custom", _("Custom"))?>
</select>
:help156
> Defines the type of cable connecting the UPS to your computer.Possible generic choices for 'cable' are:
>
> + USB, Simple, Smart, Ether, or Custom to specify a special cable.
:end
:apc_ups_cable_help:
_(Custom UPS cable)_:
: <input type="text" name="CUSTOMUPSCABLE" class="narrow" maxlength="40" value="<?=htmlspecialchars($cfg['CUSTOMUPSCABLE']);?>">
:help157
> Specify a special cable by model number, only applicable when *UPS cable* is set to Custom.
>
> + 940-0119A, 940-0127A, 940-0128A, 940-0020B
> + 940-0020C, 940-0023A, 940-0024B, 940-0024C
> + 940-1524C, 940-0024G, 940-0095A, 940-0095B
> + 940-0095C, 940-0625A, M-04-02-2000
:end
:apc_ups_custom_cable_help:
_(UPS type)_:
: <select name="UPSTYPE" onChange="toggleDevice(this.form)">
@@ -102,62 +89,29 @@ _(UPS type)_:
<?=mk_option($cfg['UPSTYPE'], "modbus", _("ModBus"))?>
</select>
:help158
> Define a *UPS type*, which corresponds to the type of UPS you have (see the Description for more details).
>
> + **USB** - most new UPSes are USB
> + **APCsmart** - newer serial character device, appropriate for SmartUPS models using a serial cable (not USB)
> + **Net** - network link to a master apcupsd through apcupsd's Network Information Server. This is used if the UPS powering your computer is connected to a different computer for monitoring
> + **SNMP** - SNMP network link to an SNMP-enabled UPS device
> + **Dumb** - old serial character device for use with simple-signaling UPSes
> + **PCnet** - PowerChute Network Shutdown protocol which can be used as an alternative to SNMP with the AP9617 family of smart slot cards
> + **ModBus** - serial device for use with newest SmartUPS models supporting the MODBUS protocol
:end
:apc_ups_type_help:
_(Device)_:
: <input type="text" name="DEVICE" maxlength="200" class="narrow" value="<?=htmlspecialchars($cfg['DEVICE']);?>">
:help159
> Enter the *device* which correspondes to your situation, only applicable when *UPS type* is not set to USB.
>
> + **apcsmart** - /dev/tty**
> + **net** - hostname:port. Hostname is the IP address of the NIS server. The deafult port is 3551
> + **snmp** - hostname:port:vendor:community. Hostname is the ip address or hostname of the UPS on the network. Vendor can be can be "APC" or "APC_NOTRAP". "APC_NOTRAP" will disable SNMP trap catching; you usually want "APC". Port is usually 161. Community is usually "private"
> + **dumb** - /dev/tty**
> + **pcnet** - ipaddr:username:passphrase:port. ipaddr is the IP address of the UPS management card. username and passphrase are the credentials for which the card has been configured. port is the port number on which to listen for messages from the UPS, normally 3052. If this parameter is empty or missing, the default of 3052 will be used
> + **modbus** - /dev/tty**
:end
:apc_ups_device_help:
_(Battery level to initiate shutdown)_ (%):
: <input type="text" name="BATTERYLEVEL" class="narrow" maxlength="3" value="<?=htmlspecialchars($cfg['BATTERYLEVEL']);?>">
:help160
> If during a power failure, the remaining battery percentage (as reported by the UPS) is below or equal to *Battery level*, apcupsd will initiate a system shutdown.
:end
:apc_battery_level_help:
_(Runtime left to initiate shutdown)_ (_(minutes)_):
: <input type="text" name="MINUTES" class="narrow" maxlength="3" value="<?=htmlspecialchars($cfg['MINUTES']);?>">
:help161
> If during a power failure, the remaining runtime in minutes (as calculated internally by the UPS) is below or equal to *minutes*, apcupsd, will initiate a system shutdown.
:end
:apc_runtime_left_help:
_(Time on battery before shutdown)_ (_(seconds)_):
: <input type="text" name="TIMEOUT" class="narrow" maxlength="4" value="<?=htmlspecialchars($cfg['TIMEOUT']);?>">
:help162
> If during a power failure, the UPS has run on batteries for *time-out* many seconds or longer; apcupsd will initiate a system shutdown. A value of zero disables this timer.
>
> If you have a Smart UPS, you will most likely want to disable this timer by setting it to zero.
> That way, your UPS will continue on batteries until either the % charge remaining drops to or below *Battery level* or the remaining battery runtime drops to or below *minutes*.
>
> Of course - when testing - setting this to 60 causes a quick system shutdown if you pull the power plug.
> If you have an older dumb UPS, you will want to set this to less than the time you know you can run on batteries.
:end
:apc_battery_time_help:
<div></div>
:help163
> **Note:** *Battery level*, *Runtime left*, and *Time on battery* work in conjunction, so the first that occurs will cause the initiation of a shutdown.
:end
:apc_note_help:
_(Turn off UPS after shutdown)_:
: <select name="KILLUPS">
@@ -165,9 +119,7 @@ _(Turn off UPS after shutdown)_:
<?=mk_option($cfg['KILLUPS'], "yes", _("Yes"))?>
</select>
:help164
> Set to *Yes* to turn off the power to the UPS after a shutdown.
:end
:apc_killups_help:
<input type="submit" name="#default" value="_(Default)_">
: <input type="submit" name="#apply" value="_(Apply)_" disabled><input type="button" value="_(Done)_" onclick="done()">

View File

@@ -27,12 +27,7 @@ $template_repos = $dockerManPaths['template-repos'];
_(Template repositories)_:
: <textarea name="template_repos" rows="5" cols="100" style="width:550px"><?=@file_get_contents($template_repos);?></textarea>
:help1
> Use this field to add template repositories.
> Docker templates are used to facilitate the creation and re-creation of Docker containers. Please setup one per line.
>
> For a list of popular community-supported repositories, visit here: <a href="http://lime-technology.com/forum/index.php?topic=37958.0" target="_blank">http://lime-technology.com/forum/index.php?topic=37958.0</a>
:end
:docker_repostiroties_help:
&nbsp;
: <input type="submit" value="_(Save)_">

View File

@@ -153,22 +153,14 @@ _(Enable Docker)_:
<span class="basic" style="display:inline"><i class="fa fa-warning icon warning"></i> _(One or more paths do not exist)_ (<a href="#" onclick="$('.advancedview').switchButton('option','checked',true); return false">_(view)_</a>)</span>
<?endif;?>
:help33
> Before you can start the Docker service for the first time, please specify an image file for Docker to install to.
>
> Once started, Docker will always automatically start after the array has been started.
:end
:docker_enable_help:
<?if ($DockerStopped):?>
_(Docker vDisk size)_:
: <input id="DOCKER_IMAGE_SIZE" type="number" name="DOCKER_IMAGE_SIZE" value="<?=$dockercfg['DOCKER_IMAGE_SIZE']?>" class="narrow" required>GB <span id="SIZE_ERROR" class="errortext"></span>
:help34
> If the system needs to create a new docker image file, this is the default size to use specified in GB.
>
> To resize an existing image file, specify the new size here. Next time the Docker service is started the file (and file system) will increased to the new size (but never decreased).
:end
:docker_vdisk_size_help:
_(Docker vDisk location)_:
: <input id="DOCKER_IMAGE_FILE" type="text" name="DOCKER_IMAGE_FILE" value="<?=$dockercfg['DOCKER_IMAGE_FILE']?>" placeholder="e.g. /mnt/disk1/docker.img" data-pickcloseonfile="true" data-pickfilter="img" data-pickroot="/mnt/" data-pickfolders="true" required="required" pattern="^[^\\]*\.(img|IMG)$">
@@ -181,13 +173,7 @@ _(Docker vDisk location)_:
<span><i class="fa fa-warning icon warning"></i> _(Path does not exist)_</span>
<?endif;?><span id="IMAGE_ERROR" class="errortext"></span>
:help35
> You must specify an image file for Docker. The system will automatically create this file when the Docker service is first started.
>
> The image file name must have the extension .img, e.g. If not the input is not accepted and marked red.
>
> It is recommended to create this image file outside the array, e.g. on the Cache pool. For best performance SSD devices are preferred.
:end
:docker_vdisk_location_help:
_(Default appdata storage location)_:
: <input id="DOCKER_APP_CONFIG_PATH" type="text" name="DOCKER_APP_CONFIG_PATH" value="<?=$dockercfg['DOCKER_APP_CONFIG_PATH']?>" placeholder="e.g. /mnt/user/appdata" data-pickfilter="HIDE_FILES_FILTER" data-pickroot="<?=(is_dir('/mnt/user/') ? '/mnt/user/' : '/mnt/')?>" data-pickfolders="true" pattern="^[^\\]*/$">
@@ -197,15 +183,7 @@ _(Default appdata storage location)_:
<span><i class="fa fa-warning icon warning"></i> _(Path does not exist)_</span>
<?endif;?>
:help36
> You can specify a folder to automatically generate and store subfolders containing configuration files for each Docker app (via the /config mapped volume).
>
> The folder's path must end with a trailing slash (/) character. If not the input is not accepted and marked red.
>
> It is recommended to create this folder outside the array, e.g. on the Cache pool. For best performance SSD devices are preferred.
>
> Only used when adding new Docker apps. Editing existing Docker apps will not be affected by this setting.
:end
:docker_appdata_location_help:
<div markdown="1" class="advanced">
_(Docker LOG rotation)_:
@@ -214,11 +192,7 @@ _(Docker LOG rotation)_:
<?=mk_option($dockercfg['DOCKER_LOG_ROTATION'], 'yes', _('Enabled'))?>
</select>
:help37
> By default LOG rotation is disabled and will create a single LOG file of unlimited size.
>
> Enable LOG rotation to limit the size of the LOG file and specify the number of files to keep in the rotation scheme.
:end
:docker_log_rotation_help:
<div markdown="1" id="DOCKER_LOG_OPTIONS" style="display:none">
_(Docker LOG maximum file size)_:
@@ -231,9 +205,7 @@ _(Docker LOG maximum file size)_:
<?=mk_option($dockercfg['DOCKER_LOG_SIZE'], '1g', '1000 '._('MB'))?>
</select>
:help38
> Specifies the maximum LOG size. When exceeded LOG rotation will occur.
:end
:docker_log_file_size_help:
_(Docker LOG number of files)_:
: <select name="DOCKER_LOG_FILES">
@@ -242,9 +214,7 @@ _(Docker LOG number of files)_:
<?=mk_option($dockercfg['DOCKER_LOG_FILES'], '3', '3')?>
</select>
:help39
> Specifies the number of LOG files when LOG rotation is done.
:end
:docker_log_file_number_help:
</div>
_(Template Authoring Mode)_:
@@ -253,9 +223,7 @@ _(Template Authoring Mode)_:
<?=mk_option($dockercfg['DOCKER_AUTHORING_MODE'], 'yes', _('Yes'))?>
</select>
:help40
> If set to **Yes**, when creating/editing containers the interface will be present with some extra fields related to template authoring.
:end
:docker_authoring_mode_help:
_(Host access to custom networks)_:
: <select name="DOCKER_ALLOW_ACCESS">
@@ -263,10 +231,7 @@ _(Host access to custom networks)_:
<?=mk_option($dockercfg['DOCKER_ALLOW_ACCESS'], 'yes', _('Enabled'))?>
</select>
:help41
> Allows direct communication between the host and containers using a custom (macvlan) network.<br>
> By default this is prohibited.
:end
:docker_custom_network_access_help:
_(Preserve user defined networks)_:
: <select name="DOCKER_USER_NETWORKS">
@@ -274,12 +239,7 @@ _(Preserve user defined networks)_:
<?=mk_option($dockercfg['DOCKER_USER_NETWORKS'], 'preserve', _('Yes'))?>
</select>
:help42
> User created networks are networks created by the user outside of the GUI.<br>
> By default user created networks are removed from Docker. This is done to prevent potential conflicts with the automatic generation of custom networks.
>
> Change this setting to preserve user defined networks, but it is the responsibility of the user to ensure these entries work correctly and are conflict free.
:end
:docker_user_defined_network_help:
<?foreach ($include as $network => $route):?>
<?
@@ -336,11 +296,7 @@ _(IPv4 custom network on interface)_ <?=$network?> (_(optional)_):
<?endforeach;?>
<?if ($include):?>
:help43
> Include (default) or exclude the above interfaces or VLANs as custom network for Docker.
>
> Enter the pool range within each allocated subnet which is used for DHCPv4 assignments by Docker. E.g. 192.168.1.128/25
:end
:docker_include_interface_vlan_ipv4_help:
<?endif;?>
<?foreach ($unset as $network):?>
@@ -369,11 +325,7 @@ _(IPv4 custom network on interface)_ <?=$network?> (_(optional)_):
<?endif;?>
<?endforeach;?>
<?if ($unset && $protocol[$network] != 'ipv6'):?>
:help44
> Include or exclude (default) the above interfaces or VLANs as custom network for Docker.
>
> Enter the pool range within each allocated subnet which is used for DHCPv4 assignments by Docker. E.g. 192.168.1.128/25
:end
:docker_exclude_interface_vlan_ipv4_help:
<?endif;?>
<?if ($include6):?>
@@ -412,11 +364,7 @@ _(IPv6 custom network on interface)_ <?=$network?> (_(optional)_):
<?endforeach;?>
<?if ($include6):?>
:help45
> Include (default) or exclude the above interfaces or VLANs as custom network for Docker.
>
> Enter the pool range within each allocated subnet which is used for DHCPv6 assignments by Docker. E.g. 2a02:abcd:9ef5:100:1::/72
:end
:docker_include_interface_vlan_ipv6_help:
<?endif;?>
<?foreach ($unset as $network):?>
@@ -443,11 +391,7 @@ _(IPv6 custom network on interface)_ <?=$network?> (_(optional)_):
<?endif;?>
<?endforeach;?>
<?if ($unset && $protocol[$network] != 'ipv4'):?>
:help46
> Include or exclude (default) the above interfaces or VLANs as custom network for Docker.
>
> Enter the pool range within each allocated subnet which is used for DHCPv6 assignments by Docker. E.g. 2a02:abcd:9ef5:100:1::/72
:end
:docker_exclude_interface_vlan_ipv6_help:
<?endif;?>
</div>
@@ -456,46 +400,33 @@ _(IPv6 custom network on interface)_ <?=$network?> (_(optional)_):
_(Docker version)_:
: <?$arrInfo = $DockerClient->getInfo(); echo $arrInfo['Version']?>
:help47
> This is the active Docker version.
:end
:docker_version_help:
_(Docker vDisk location)_:
: <?=$dockercfg['DOCKER_IMAGE_FILE']?>
:help48
> This is the location of the Docker image.
:end
:docker_vdisk_location_active_help:
_(Default appdata storage location)_:
: <?=$dockercfg['DOCKER_APP_CONFIG_PATH']?>
:help49
> This is the storage location for Docker containers.
:end
:docker_appdata_location_active_help:
<div markdown="1" class="advanced">
_(Docker LOG rotation)_:
: <?=$dockercfg['DOCKER_LOG_ROTATION']=='yes' ? _('Enabled') : _('Disabled')?>
:help50
> By default a single unlimited LOG file is created. Otherwise LOG file size and number of files are limited when LOG rotation is enabled.
:end
:docker_log_rotation_active_help:
_(Host access to custom networks)_:
: <?=$dockercfg['DOCKER_ALLOW_ACCESS']=='' ? _('Disabled') : _('Enabled')?>
:help51
> Allows direct communication between the host and containers using a custom (macvlan) network.<br>
> By default this is prohibited.
:end
:docker_custom_network_active_help:
_(Preserve user defined networks)_:
: <?=$dockercfg['DOCKER_USER_NETWORKS']=='preserve' ? _('Yes') : _('No')?>
:help52
> Shows whether networks created outside of the GUI are removed or preserved for Docker. When preserved *user defined networks* become available in the *Network type* dropdown list of containers.
:end
:docker_user_defined_network_active_help:
<?foreach ($include as $network => $route):?>
<?
@@ -598,11 +529,7 @@ _(btrfs scrub status)_:
&nbsp;
: <input type="submit" value="_(Scrub)_"><label><input type="checkbox" name="#arg[3]" value=""> _(Correct file system errors)_</label>
:help53
> **Scrub** runs the *btrfs scrub* program to check file system integrity.
>
> If repair is needed you should check the *Correct file system errors* and run a second Scrub pass; this will permit *btrfs scrub* to fix the file system.
:end
:docker_scrub_help:
<?else:?>
<input type="hidden" name="#command" value="/webGui/scripts/btrfs_scrub">
@@ -611,9 +538,7 @@ _(btrfs scrub status)_:
&nbsp;
: <input type="submit" value="_(Cancel)_">
:help54
> **Cancel** will cancel the Scrub operation in progress.
:end
:docker_cancel_help:
</form>
<?endif;?>

View File

@@ -705,21 +705,7 @@ _(Template)_:
}
?></select><?if ($rmadd):?><i class="fa fa-window-close button" title="<?=htmlspecialchars($rmadd)?>" onclick="rmTemplate('<?=addslashes(htmlspecialchars($rmadd))?>')"></i><?endif;?>
:help1
> Templates are a quicker way to setting up Docker Containers on your Unraid server. There are two types of templates:
>
> **Default templates**<br>
> When valid repositories are added to your Docker Repositories page, they will appear in a section on this drop down for you to choose (master categorized by author, then by application template).
> After selecting a default template, the page will populate with new information about the application in the Description field, and will typically provide instructions for how to setup the container.
> Select a default template when it is the first time you are configuring this application.
>
> **User-defined templates**<br>
> Once you've added an application to your system through a Default template,
> the settings you specified are saved to your USB flash device to make it easy to rebuild your applications in the event an upgrade were to fail or if another issue occurred.
> To rebuild, simply select the previously loaded application from the User-defined list and all the settings for the container will appear populated from your previous setup.
> Clicking create will redownload the necessary files for the application and should restore you to a working state.
> To delete a User-defined template, select it from the list above and click the red X to the right of it.
:end
:docker_client_general_help:
</div>
<?endif;?>
@@ -728,9 +714,7 @@ _(Template)_:
_(Name)_:
: <input type="text" name="contName" required>
:help2
> Give the container a name or leave it as default.
:end
:docker_client_name_help:
</div>
<div markdown="1" class="basic">
@@ -742,9 +726,7 @@ _(Overview)_:
_(Overview)_:
: <textarea name="contOverview" spellcheck="false" cols="80" rows="15" style="width:56%"></textarea>
:help3
> A description for the application container. Supports basic HTML mark-up.
:end
:docker_client_overview_help:
</div>
@@ -752,10 +734,7 @@ _(Overview)_:
_(Repository)_:
: <input type="text" name="contRepository" required>
:help4
> The repository for the application on the Docker Registry. Format of authorname/appname.
> Optionally you can add a : after appname and request a specific version for the container image.
:end
:docker_client_repository_help:
</div>
<div markdown="1" class="<?=$authoring?>">
@@ -807,88 +786,63 @@ _(Categories)_:
_(Support Thread)_:
: <input type="text" name="contSupport">
:help5
> Link to a support thread on Lime-Technology's forum.
:end
:docker_client_support_thread_help:
_(Project Page)_:
: <input type="text" name="contProject">
:help6
> Link to the project page (eg: www.plex.tv)
:end
:docker_client_project_page_help:
_(Donation Text)_:
: <input type="text" name="contDonateText">
:help7
> Text to appear on Donation Links Within The Apps Tab
:end
:docker_client_donation_text_help:
_(Donation Link)_:
: <input type="text" name="contDonateLink">
:help8
> Link to the donation page. If using donation's, both the image and link must be set
:end
:docker_client_donation_link_help:
</div>
<div markdown="1" class="advanced">
_(Docker Hub URL)_:
: <input type="text" name="contRegistry"></td>
:help9
> The path to the container's repository location on the Docker Hub.
:end
:docker_client_hub_url_help:
</div>
<div markdown="1" class="noshow"> <!-- Deprecated for author to enter or change, but needs to be present -->
_(Template URL)_:
: <input type="text" name="contTemplateURL">
:help10
> This URL is used to keep the template updated.
:end
:docker_client_template_url_help:
</div>
<div markdown="1" class="advanced">
_(Icon URL)_:
: <input type="text" name="contIcon">
:help11
> Link to the icon image for your application (only displayed on dashboard if Show Dashboard apps under Display Settings is set to Icons).
:end
:docker_client_icon_url_help:
_(WebUI)_:
: <input type="text" name="contWebUI">
:help12
> When you click on an application icon from the Docker Containers page, the WebUI option will link to the path in this field.
> Use [IP] to identify the IP of your host and [PORT:####] replacing the #'s for your port.
:end
:docker_client_webui_help:
_(Extra Parameters)_:
: <input type="text" name="contExtraParams">
:help13
> If you wish to append additional commands to your Docker container at run-time, you can specify them here.<br>
> For all possible Docker run-time commands, see here: <a href="https://docs.docker.com/reference/run/" target="_blank">https://docs.docker.com/reference/run/</a>
:end
:docker_extra_parameters_help:
_(Post Arguments)_:
: <input type="text" name="contPostArgs">
:help14
> If you wish to append additional arguments AFTER the container definition, you can specify them here.
> The content of this field is container specific.
:end
:docker_post_arguments_help:
_(CPU Pinning)_:
: <span style="display:inline-block"><?cpu_pinning()?></span>
:help15
> Checking a CPU core(s) will limit the container to run on the selected cores only. Selecting no cores lets the container run on all available cores (default)
:end
:docker_cpu_pinning_help:
</div>
_(Network Type)_:
@@ -904,13 +858,7 @@ _(Network Type)_:
_(Fixed IP address)_ (_(optional)_):
: <input type="text" name="contMyIP"><span id="myIP"></span>
:help16
> If the Bridge type is selected, the applications network access will be restricted to only communicating on the ports specified in the port mappings section.
> If the Host type is selected, the application will be given access to communicate using any port on the host that isnt already mapped to another in-use application/service.
> Generally speaking, it is recommended to leave this setting to its default value as specified per application template.
>
> IMPORTANT NOTE: If adjusting port mappings, do not modify the settings for the Container port as only the Host port can be adjusted.
:end
:docker_fixed_ip_help:
</div>
_(Console shell command)_:
@@ -922,10 +870,7 @@ _(Console shell command)_:
_(Privileged)_:
: <input type="checkbox" class="switch-on-off" name="contPrivileged">
:help17
> For containers that require the use of host-device access directly or need full exposure to host capabilities, this option will need to be selected.
> For more information, see this link: <a href="https://docs.docker.com/engine/reference/run/#runtime-privilege-and-linux-capabilities" target="_blank">https://docs.docker.com/engine/reference/run/#runtime-privilege-and-linux-capabilities</a>
:end
:docker_privileged_help:
<div id="configLocation"></div>

View File

@@ -28,11 +28,7 @@ function installPlugin(name) {
<input type="button" value="_(Install)_" onclick="installPlugin(this.form.file.value)">
</form>
:help1
> To download and install a plugin, enter the plg file URL and click **Install**. A window will open
> that displays install progress. Do not close this window until install has completed. You may also specify
> the local file name of an extension.
:end
:plugin_install_help:
**_(Select local plugin file)_**
<div id="plugin_tree" class="textarea"></div>

View File

@@ -36,7 +36,4 @@ foreach (glob("/boot/config/plugins-error/*.plg", GLOB_NOSORT) as $plugin_file)
echo "</tbody></table>";
?>
:help2
> These plugins were not installed because of some kind of installation error. You should delete these
> plugins and then **reboot** your server.*
:end
:plugin_error_help:

View File

@@ -68,6 +68,4 @@ foreach (glob("/boot/config/plugins-stale/*.plg", GLOB_NOSORT) as $plugin_file)
echo "</tbody></table>";
?>
:help3
> These plugins were not installed because newer code already exists. It is safe to simply delete these.
:end
:plugin_stale_help:

View File

@@ -94,9 +94,7 @@ _(Enable VMs)_:
<?endif;?>
<?endif;?>
:help105
> Stopping the VM Manager will first attempt to shutdown all running VMs. After 60 seconds, any remaining VM instances will be terminated.
:end
:vms_enable_help:
<?if ($hardware):?>
<div class="advanced" markdown="1">
@@ -112,40 +110,29 @@ _(QEMU version)_:
_(Libvirt storage location)_:
: <?=htmlspecialchars($domain_cfg['IMAGE_FILE'])?>
:help106
> This is the libvirt volume.
:end
:vms_libvirt_volume_help:
<?else: /* Libvirt is stopped */ ?>
_(Libvirt vdisk size)_:
: <input id="IMAGE_SIZE" type="number" min="1" name="IMAGE_SIZE" value="<?=htmlspecialchars($domain_cfg['IMAGE_SIZE']);?>" style="width:50px;" required="required" />_(GB)_ <span id="SIZE_ERROR" class="errortext"></span>
:help107
> If the system needs to create a new libvirt image file, this is the default size to use specified in GB.
> To resize an existing image file, specify the new size here. Next time the Libvirt service is started the file (and file system) will increased to the new size (but never decreased).
:end
:vms_libvirt_vdisk_size_help:
_(Libvirt storage location)_:
: <input id="IMAGE_FILE" type="text" name="IMAGE_FILE" value="<?=htmlspecialchars($domain_cfg['IMAGE_FILE']);?>" placeholder="e.g. /mnt/user/system/libvirt/libvirt.img" data-pickcloseonfile="true" data-pickfilter="img" data-pickroot="/mnt/" data-pickfolders="true" required pattern="^[^\\]*\.(img|IMG)$"> <?php if (file_exists($domain_cfg['IMAGE_FILE'])) { ?><span id="deletePanel"><label><input type="checkbox" id="deleteCheckbox" /> _(Delete Image File)_</label></span><?php } ?> <?if ($var['fsState'] != "Started"):?><span><i class="fa fa-warning icon warning"></i> _(Modify with caution: unable to validate path until Array is Started)_</span><?elseif (!is_dir(dirname($domain_cfg['IMAGE_FILE']))):?><span><i class="fa fa-warning icon warning"></i> _(Path does not exist)_</span><?endif;?> <span id="IMAGE_ERROR" class="errortext"></span>
:help108
> You must specify an image file for Libvirt. The system will automatically create this file when the Libvirt service is first started.
:end
:vms_libvirt_location_help:
<?endif;?>
_(Default VM storage path)_:
: <input type="text" id="domaindir" data-pickfolders="true" data-pickfilter="NO_FILES_FILTER" data-pickroot="<?= (is_dir('/mnt/user/') ? '/mnt/user/' : '/mnt/') ?>" name="DOMAINDIR" value="<?=htmlspecialchars($domain_cfg['DOMAINDIR'])?>" placeholder="Click to Select" pattern="^[^\\]*/$"> <?if ($var['fsState'] != "Started"):?><span><i class="fa fa-warning icon warning"></i> _(Modify with caution: unable to validate path until Array is Started)_</span><?elseif (!is_dir($domain_cfg['DOMAINDIR'])):?><span><i class="fa fa-warning icon warning"></i> _(Path does not exist)_</span><?endif;?>
:help109
> Specify a user share that contains all your VM subdirectories with vdisks
:end
:vms_libvirt_storage_help:
_(Default ISO storage path)_:
: <input type="text" id="mediadir" data-pickfolders="true" data-pickfilter="NO_FILES_FILTER" data-pickroot="<?= (is_dir('/mnt/user/') ? '/mnt/user/' : '/mnt/') ?>" name="MEDIADIR" value="<?=htmlspecialchars($domain_cfg['MEDIADIR'])?>" placeholder="Click to Select" pattern="^[^\\]*/$"> <?if ($var['fsState'] != "Started"):?><span><i class="fa fa-warning icon warning"></i> _(Modify with caution: unable to validate path until Array is Started)_</span><?elseif (!is_dir($domain_cfg['MEDIADIR'])):?><span><i class="fa fa-warning icon warning"></i> _(Path does not exist)_</span><?endif;?>
:help110
> Specify a user share that contains all your installation media for operating systems
:end
:vms_libvirt_iso_storage_help:
</div>
_(Default Windows VirtIO driver ISO)_ (_(optional)_):
@@ -170,15 +157,7 @@ _(Default Windows VirtIO driver ISO)_ (_(optional)_):
?>
</select><input type="text" id="winvirtio" name="VIRTIOISO" data-pickfilter="iso" data-pickcloseonfile="true" data-pickroot="<?= (is_dir('/mnt/user/') ? '/mnt/user/' : '/mnt/') ?>" value="<?=htmlspecialchars($domain_cfg['VIRTIOISO'])?>"<?if ($var['fsState'] == "Started"):?> placeholder="_(Click to Select)_" pattern="^[^\\]*\.(iso|ISO)$"><i class="fa fa-trash" id="remove_button" title="_(Remove Windows VirtIO driver ISO)_"> <span>_(Remove)_</span></i><i class="fa fa-download" id="download_button" title="_(Download Windows VirtIO driver ISO)_"> <span>_(Download)_</span></i><span id="download_status"></span<?endif;?>>
:help111
> Specify the virtual CD-ROM (ISO) that contains the VirtIO Windows drivers as provided by the Fedora Project.
> Download the latest ISO from here: <a href="https://docs.fedoraproject.org/en-US/quick-docs/creating-windows-virtual-machines-using-virtio-drivers/index.html#virtio-win-direct-downloads" target="_blank">fedoraproject.org</a>
>
> When installing Windows, you will reach a step where no disk devices will be found. There is an option to browse for drivers on that screen.
> Click browse and locate the additional CD-ROM in the menu. Inside there will be various folders for the different versions of Windows.
> Open the folder for the version of Windows you are installing and then select the AMD64 subfolder inside (even if you are on an Intel system, select AMD64).
> Three drivers will be found. Select them all, click next, and the vDisks you have assigned will appear.
:end
:vms_virtio_driver_help:
<div class="advanced" markdown="1">
_(Default network bridge)_:
@@ -186,14 +165,7 @@ _(Default network bridge)_:
<?foreach ($arrValidBridges as $strBridge) echo mk_option($domain_cfg['BRNAME'], $strBridge, $strBridge);?>
</select>
:help112
> Select the name of the network bridge you wish to use as default for your VMs,
> the setting 'virbr0' will let libvirt create a virtual bridge that utilizes NAT (network address translation)
> and act as a DHCP server to hand out IP addresses to virtual machines directly.
> More optional selections are present when virtual bridges are created under network settings.
>
> NOTE: You can also specify a network bridge on a per-VM basis.
:end
:vms_network_bridge_help:
_(Upon host shutdown)_:
: <select id="hostshutdown" name="HOSTSHUTDOWN">
@@ -201,10 +173,7 @@ _(Upon host shutdown)_:
<?=mk_option($domain_cfg['HOSTSHUTDOWN'], 'hibernate', _('Hibernate VMs'))?>
</select>
:help113
> When shutting down the server, this defines the action to take upon running VMs. If *Hibernate VMs* is chosen,
> the VM will be instructed to hibernate (if supported) otherwise it will attempt a VM shutdown.
:end
:vms_host_shutdown_help:
_(VM shutdown time-out)_:
: <input type="number" id="vm_shutdown_timeout" name="TIMEOUT" value="<?=htmlspecialchars($domain_cfg['TIMEOUT'])?>" class="narrow">
@@ -212,10 +181,7 @@ _(VM shutdown time-out)_:
<span id="arraystopped"><i class="fa fa-warning icon warning"></i> _(exceeds Disk Shutdown)_ <?=htmlspecialchars($var['shutdownTimeout'])?>s _(time-out)_ (<a href="/Settings/DiskSettings">_(edit)_</a>)</span>
<?endif;?>
:help114
> When shutting down the server, this defines how long to wait in seconds for *graceful* VM shutdown before forcing shutdown to continue.
> NOTE: It's recommended to shut down guest VMs from within the VM.
:end
:vms_shutdown_timeout_help:
_(PCIe ACS override)_:
: <select id="pcie_acs_override"<?=$safemode?' disabled':''?>>
@@ -225,15 +191,7 @@ _(PCIe ACS override)_:
<?= mk_option($pcie_acs_override, 'downstream,multifunction', _('Both'))?>
</select><?if($safemode):?><span>*_(Setting disabled in **safe mode**)_*</span><?endif;?>
:help115
> *PCIe ACS override* allows various hardware components to expose themselves as isolated devices.
> Typically it is sufficient to isolate *Downstream* ports.
> A hardware component may need the setting *Multi-function* or *Both* to further isolate different hardware functions.<br>
> A reboot is required for changes to this setting to take affect.
>
> **Warning: use of this setting could cause possible data corruption with certain hardware configurations.**
> Please visit the [Lime Technology forums](https://forums.unraid.net/forum/51-vm-engine-kvm) for more information.
:end
:vms_acs_override_help:
_(VFIO allow unsafe interrupts)_:
: <select id="vfio_allow_unsafe"<?=$safemode?' disabled':''?>>
@@ -241,13 +199,7 @@ _(VFIO allow unsafe interrupts)_:
<?= mk_option($vfio_allow_unsafe, '1', _('Yes'))?>
</select><?if($safemode):?><span>*_(Setting disabled in **safe mode**)_*</span><?endif;?>
:help116
> If your system doesn't support interrupt remapping, these can be enabled by allowing unsafe interrupts.<br>
> A reboot will be required for changes to this setting to take affect.
>
> **Warning: use of this setting could cause possible data corruption with certain hardware configurations.**
> Please visit the [Lime Technology forums](https://forums.unraid.net/forum/51-vm-engine-kvm) for more information.
:end
:vms_vfio_interupts_help:
</div>
<?if (file_exists("/var/log/libvirt/libvirtd.log")):?>
@@ -260,9 +212,7 @@ _(VFIO allow unsafe interrupts)_:
</form>
<?if (file_exists("/var/log/libvirt/libvirtd.log")):?>
:help117
> View the log for libvirt: <a id="openlog" title="/var/log/libvirt/libvirtd.log" href="#" onclick="openWindow('/webGui/scripts/tail_log&arg1=libvirt/libvirtd.log','_(Libvirt Log)_',600,900);">/var/log/libvirt/libvirtd.log</a>
:end
:vms_libvirt_log_help:
<?endif;?>
@@ -285,10 +235,7 @@ _(btrfs scrub status)_:
&nbsp;
: <input type="submit" value="_(Scrub)_"><label><input type="checkbox" name="#arg[3]" value="">_(Correct file system errors)_</label>
:help118
> **Scrub** runs the *btrfs scrub* program to check file system integrity.
> If repair is needed you should check the *Correct file system errors* and run a second Scrub pass; this will permit *btrfs scrub* to fix the file system.
:end
:vms_scrub_help:
<?else:?>
<input type="hidden" name="#command" value="/webGui/scripts/btrfs_scrub">
@@ -297,9 +244,7 @@ _(btrfs scrub status)_:
&nbsp;
: <input type="submit" value="_(Cancel)_">
:help119
> **Cancel* will cancel the Scrub operation in progress.
:end
:vms_cancel_help:
</form>
<?endif;?>

View File

@@ -78,72 +78,9 @@ if ($display['total']) echo "<tr class='tr_last'><td colspan='11'>&nbsp;</td></t
</tbody>
</table>
:help1
> **Colored Status Indicator** the significance of the color indicator at the beginning of each line in *Array Devices* is as follows:
>
> <i class='fa fa-circle orb green-orb'></i>Normal operation, device is active.
>
> <i class='fa fa-circle orb grey-orb'></i>Device is in standby mode (spun-down).
>
> <i class='fa fa-warning orb yellow-orb'></i>Device contents emulated.
>
> <i class='fa fa-times orb red-orb'></i>Device is disabled, contents emulated.
>
> <i class='fa fa-square orb blue-orb'></i>New device.
>
> <i class='fa fa-square orb grey-orb'></i>No device present, position is empty.
>
> **Identification** is the *signature* that uniquely identifies a storage device. The signature
> includes the device model number, serial number, linux device id, and the device size.
>
> **Temp.** (temperature) is read directly from the device. You configure which units to use on
> the [Display Preferences](Settings/DisplaySettings) page. We do not read the temperature of spun-down hard
> drives since this typically causes them to spin up; instead we display the `*` symbol. We also
> display the `*` symbol for SSD and Flash devices, though sometimes these devices do report a valid
> temperature, and sometimes they return the value `0`.
>
> **Size, Used, Free** reports the total device size, used space, and remaining space for files. These
> units are also configured on the [Display Preferences](Settings/DisplaySettings) page. The
> amount of space used will be non-zero even for an empty disk due to file system overhead.
>
> *Note: for a multi-device cache pool, this data is for the entire pool as returned by btrfs.*
>
> **Reads, Writes** are a count of I/O requests sent to the device I/O drivers. These statistics may
> be cleared at any time, refer to the Array Status section below.
>
> **Errors** counts the number of *unrecoverable* errors reported by the device
> I/O drivers. Missing data due to unrecoverable array read errors is filled in on-the-fly using parity
> reconstruct (and we attempt to write this data back to the sector(s) which failed). Any unrecoverable
> write error results in *disabling* the disk.
>
> **FS** indicates the file system detected in partition 1 of the device.
>
> **View** column contains a folder icon indicating the device is *mounted*. Click the icon to
> browse the file system.
>
> If "Display array totals" is enable on the [Display Preferences](Settings/DisplaySettings) page, a
> **Total** line is included which provides a tally of the device statistics, including the average temperature
> of your devices.
>
> The Array must be Stopped in order to change Array device assignments.
>
> An Unraid array consists of one or two Parity disks and a number of Data disks. The Data
> disks are exclusively used to store user data, and the Parity disk(s) provides the redundancy necessary
> to recover from disk failures.
>
> Since data is not striped across the array, the Parity disk(s) must be as large, or larger than the largest Data
> disk. Parity should also be your highest performance drive.
>
> Each Data disk has its own file system and can be exported as a
> separate share.
>
> Click on the Device name to configure individual device settings and launch certain utilities.
:end
:main_array_devices_help:
<?if ($var['fsState'] == "Stopped"):?>
<div></div>
:help2
> **Slots** select the number of device slots in your server designated for Array devices.
> The minimum number of Array slots is 2, and you must have at least one device assigned to the array.
:end
:main_slots_help:
<?endif;?>

View File

@@ -570,103 +570,12 @@ enable_stop();
</script>
<?endif;?>
:help6
> **Colored Status Indicator** the significance of the color indicator of the *Array* is as follows:
>
> <i class='fa fa-circle orb green-orb'></i>Array is Started and Parity is valid.
>
> <i class='fa fa-circle orb grey-orb'></i>Array is Stopped, Parity is valid.
>
> <i class='fa fa-warning orb yellow-orb'></i>Array is Started, but Parity is invalid.
>
> <i class='fa fa-warning orb grey-orb'></i>Array is Stopped, Parity is invalid.
>
:end
:array_status_help:
<?if ($var['fsState'] == "Stopped"):?>
:help7
> #### Assigning Devices
>
> An Unraid disk array consists of a single parity disk and a number of data disks. The data
> disks are exclusively used to store user data, and the parity disk provides the redundancy necessary
> to recover from any singe disk failure.
>
> Note that we are careful to use the term *disk* when referring to an array storage device. We
> use the term *hard drive* (or sometimes just *drive*) when referring to an actual hard disk drive (HDD)
> device. This is because in a RAID system it is possible to read/write an array disk whose corresponding
> hard drive is disabled or even missing! In addition, it is useful to be able to ask, "which device is
> assigned to be the parity disk?"; or, "which device corresponds to disk2?".
>
> We therefore need a way to assign hard drives to array disks. This is accomplished here on the
> Main page when the array is stopped. There is a drop-down box for each array disk which lists all the
> unassigned devices. To assign a device simply select it from the list. Each time a device
> assignment is made, the system updates a configuration file to record the assignment.
>
> #### Requirements
>
> Unlike traditional RAID systems which stripe data across all the array devices, an Unraid server
> stores files on individual hard drives. Consequently, all file write operations will involve both the
> data disk the file is being written to, and the parity disk. For these reasons,
>
> * the parity disk size must be as large or larger than any of the data disks,
>
> and
>
> * given a choice, the parity disk should be the fastest disk in your collection.
>
> #### Guidelines
>
> Here are the steps you should follow when designing your Unraid disk array:
>
> 1. Decide which hard drive you will use for parity, and which hard drives you will use for
> data disk1, disk2, etc., and label them in some fashion. Also, find the serial number of each hard
> drive and jot it down somewhere; you will need this information later.
>
> 2. Install your hard drive devices, boot Unraid OS and bring up the webGui. If this is a fresh system
> build, then the Main page will show no disks installed. This doesn't mean the system can't detect your
> hard drives; it just means that none have been assigned yet.
>
> 3. Remember the serial numbers you recored back in step 1? For parity and each data disk, select the
> proper hard drive based on its serial number from the drop down list.
>
> #### Hot Plug
>
> You may also *hot plug* hard drives into your server if your hardware supports it. For example,
> if you are using hard drive cages, you may simply plug them into your server while powered on and
> with array Stopped. Refresh the Main page to have new unassigned devices appear in the assignment
> dropdown lists.
>
> #### Next Steps
>
> Once you have assigned all of your hard drives, refer to the Array Status section below
> and Start the array.
:end
:array_devices_help:
<?if ($encrypt):?>
<div></div>
:help8
> #### Encryption input
>
> With array Stopped, the user can specify a new encryption key. Note that once a device
> is formatted with a particular key it may only be opened using that same key. Changing the encryption key requires
> encrypted devices to be reformatted **resulting in permanent loss of all existing data on those devices.**
>
> #### Passphrase
>
> Enter a passphrase of up to 512 characters. It is highly advisable to only use the 95 printable characters from the
> first 128 characters of the [ASCII table](https://en.wikipedia.org/wiki/ASCII), as they will always have the same binary
> representation. Other characters may have different encoding depending on system configuration and your passphrase will
> not work with a different encoding. If you want a longer passphrase or to include binary data, upload a keyfile instead.
>
> Please refer to the [cryptsetup FAQ](https://gitlab.com/cryptsetup/cryptsetup/wikis/FrequentlyAskedQuestions#5-security-aspects)
> for what constitutes a *secure* passphrase.
>
> **Memorize** this passphrase. **IF LOST, ENCRYPTED CONTENT CANNOT BE RECOVERED!**
>
> #### Keyfile
>
> Select a local keyfile with a stored encryption key or a binary file. The maximum size of the keyfile is 8M (8388608 byte).
>
> **Backup** your local keyfile. **IF LOST, ENCRYPTED CONTENT CANNOT BE RECOVERED!**
:end
:encryption_help:
<?endif;?>
<?endif;?>

View File

@@ -37,9 +37,4 @@ boot_status();
</tbody>
</table>
:help5
> Vital array configuration is maintained on the USB Flash device; for this reason, it must remain
> plugged in to your server. Click on [Flash](/Main/Flash?name=flash) to see the GUID and registration
> information, and to configure export settings. Since the USB Flash device is formatted using FAT file system,
> it may only be exported using SMB protocol.
:end
:boot_device_help:

View File

@@ -27,9 +27,4 @@ Tag="icon-cpu"
<div class="notice">_(CPU isolation is prohibited while system is running in SAFE MODE)_!</div>
<?endif;?>
:help3
> CPU isolation allows the user to specify CPU cores that are to be explicitly reserved for assignment (to VMs or Docker containers).
>
> This is incredibly important for gaming VMs to run smoothly because even if you manually pin your Docker containers to not overlap with your gaming VM,
> the host OS can still utilize those same cores as the guest VM needs for things like returning responses for the webGui, running a parity check, btrfs operations, etc.
:end
:cpu_isolation_help:

View File

@@ -27,21 +27,4 @@ Tag="icon-cpu"
<div class="notice">_(No CPU pinning available. Docker service must be started)_</div>
<?endif;?>
:help2
> This page gives a total view of the current CPU pinning assignments for Docker containers.<br>
> It also allows to modify these assignments.
>
> Running containers are **stopped first** and restarted after the modification.<br>
> Stopped containers are instantly modified and new assignments become active when the user manually starts the container.
>
> When ***Apply*** is pressed a scan is performed to find the changes, subsequently containers which have changes are modified in parallel.
>
> *Important: Please wait until all updates are finished before leaving this page*.
>
> By default NO cores are selected for a Docker container, which means it uses all available cores.<br>
> Do not select **ALL** cores for containers, just select **NO** cores if you want unrestricted core use.
>
> Do not select cores for containers which are *isolated*.
> By design a container will only use a single core (the lowest numbered core) when multiple isolated cores are selected.<br>
> Usually this is not what a user wants when selecting multiple cores.
:end
:cpu_pinning_help:

View File

@@ -206,14 +206,4 @@ $(function(){
<div class="notice">_(No CPU pinning available. VM service must be started)_</div>
<?endif;?>
:help1
> This page gives a total view of the current CPU pinning assignments for VMs.<br>
> It also allows to modify these assignments.
>
> Running VMs are **stopped first** and restarted after the modification.<br>
> Stopped VMs are instantly modified and new assignments become active when the VM is started.
>
> When ***Apply*** is pressed a scan is performed to find the changes, subsequently only VMs which have changes are modified in parallel.
>
> *Important: Please wait until all updates are finished before leaving this page*.
:end
:cpu_vms_help:

View File

@@ -19,6 +19,9 @@ Cond="($pool_devices || $var['fsState']=='Stopped')"
function sharename($share) {
return substr($share,0,-4);
}
function escapestring($share) {
return "\"$share\"";
}
$bgcolor = strstr('white,azure',$display['theme']) ? '#f2f2f2' : '#1c1c1c';
?>
<link type="text/css" rel="stylesheet" href="<?autov("/webGui/styles/jquery.ui.css")?>">
@@ -29,9 +32,9 @@ table.divider{margin-top:20px}
<script>
function validate(poolname) {
var valid = /^[a-z_]([a-z0-9_-]*[a-z_])*$/;
var reserved = [<?=implode(',',array_map('escapeshellarg',explode(',',$var['reservedNames'])))?>];
var shares = [<?=implode(',',array_map('escapeshellarg',array_filter(array_map('sharename',scandir('boot/config/shares')))))?>];
var pools = [<?=implode(',',array_map('escapeshellarg',$pools))?>];
var reserved = [<?=implode(',',array_map('escapestring',explode(',',$var['reservedNames'])))?>];
var shares = [<?=implode(',',array_map('escapestring',array_filter(array_map('sharename',scandir('boot/config/shares')))))?>];
var pools = [<?=implode(',',array_map('escapestring',$pools))?>];
if (!poolname.trim()) return false;
if (reserved.includes(poolname)) {
swal({title:'_(Invalid pool name)_',text:'_(Do not use reserved names)_',type:'error',confirmButtonText:'_(Ok)_'});
@@ -131,42 +134,9 @@ _(Slots)_:
</div>
<?endif;?>
:help3
> **Colored Status Indicator** the significance of the color indicator at the beginning of each line in *Pool Devices* is as follows:
>
> <i class='fa fa-circle orb green-orb'></i>Normal operation, device is active.
>
> <i class='fa fa-circle orb grey-orb'></i>Device is in standby mode (spun-down).
>
> <i class='fa fa-square orb blue-orb'></i>New device.
>
> <i class='fa fa-square orb grey-orb'></i>No device present, position is empty.
>
> **Pool Devices** is a single device, or pool of multiple devices, *outside* the Unraid array. It may be exported for network access just
> like an Array device. Being outside the Unraid array results in significantly faster write access.
>
> There are two ways to configure the Pool devices:
>
> 1. As a single device, or
> 2. As a multi-device pool.
>
> When configured as a single device you may format the device using any supported file system (btrfs, reiserfs,
> or xfs). This configuration offers the highest performance, but at the cost of no data protection - if the
> single pool device fails all data contained on it may be lost.
>
> When configured as a multi-device pool, Unraid OS will automatically select *btrfs-raid1* format (for both data
> and meta-data). btrfs permits any number of devices to be added to the pool and each copy of data is guaranteed
> to be written to two different devices. Hence the pool can withstand a single-disk failure without losing data.
>
> When [User Shares](/Settings/ShareSettings) are enabled, user shares may be configured to
> automatically make use of the Pool device in order to
> speed up writes. A special background process called the *mover* can be scheduled to run
> periodically to move user share files off the Cache and onto the Array.
:end
:cache_devices_help:
<?if ($var['fsState'] == "Stopped"):?>
<div></div>
:help4
> **Slots** select the number of device slots in your server designated for Cache devices.
:end
:cache_slots_help:
<?endif;?>

View File

@@ -25,9 +25,7 @@ _(Confirm reboot & powerdown commands)_:
<?=mk_option($confirm['down'], "1", _('Yes'))?>
</select>
:help98
> Choose if rebooting or powering down the server needs a confirmation checkbox.
:end
:confirm_reboot_help:
_(Confirm array stop command)_:
: <select name="stop">
@@ -35,9 +33,7 @@ _(Confirm array stop command)_:
<?=mk_option($confirm['stop'], "1", _('Yes'))?>
</select>
:help99
> Choose if stopping the array needs a confirmation checkbox.
:end
:confirm_array_stop_help:
<?if (isset($confirm['sleep'])):?>
_(Confirm sleep command)_:

View File

@@ -29,9 +29,7 @@ _(Time zone)_:
}
?></select>
:help4
> Select your applicable time zone from the drop-down list.
:end
:timezone_help:
_(Use NTP)_:
: <select name="USE_NTP" size="1" onchange="checkDateTimeSettings(this.form)">
@@ -39,47 +37,32 @@ _(Use NTP)_:
<?=mk_option($var['USE_NTP'], "no", _('No'))?>
</select>
:help5
> Select 'Yes' to use Network Time Protocol to keep your server time accurate.
> We **highly** recommend the use of a network time server, especially if you plan on using Active Directory.
>
> Note: if using `pool.ntp.org` time servers, please also refer to [their documentation](http://www.pool.ntp.org/en/use.html).
:end
:use_ntp_help:
_(NTP server)_ 1:
: <input type="text" name="NTP_SERVER1" maxlength="40" class="narrow" value="<?=htmlspecialchars($var['NTP_SERVER1'])?>">
:help6
> This is the primary NTP server to use. Enter a FQDN or an IP address.
:end
:ntp_server1_help:
_(NTP server)_ 2:
: <input type="text" name="NTP_SERVER2" maxlength="40" class="narrow" value="<?=htmlspecialchars($var['NTP_SERVER2'])?>">
:help7
> This is the alternate NTP server to use if NTP Server 1 is down.
:end
:ntp_server2_help:
_(NTP server)_ 3:
: <input type="text" name="NTP_SERVER3" maxlength="40" class="narrow" value="<?=htmlspecialchars($var['NTP_SERVER3'])?>">
:help8
> This is the alternate NTP Server to use if NTP Servers 1 and 2 are both down.
:end
:ntp_server3_help:
_(NTP server)_ 4:
: <input type="text" name="NTP_SERVER4" maxlength="40" class="narrow" value="<?=htmlspecialchars($var['NTP_SERVER4'])?>">
:help9
> This is the alternate NTP Server to use if NTP Servers 1, 2, and 3 are all down.
:end
:ntp_server4_help:
_(New date and time)_:
: <input type="text" name="newDateTime" maxlength="20" class="narrow" value="<?=my_time(time(), "%F %T")?>">
:help10
> Enter the current time-of-day. Use format YYYY-MM-DD HH:MM:SS. Greyed out when using NTP.
:end
:current_time_help:
&nbsp;
: <input type="submit" name="setDateTime" value="_(Apply)_" disabled><input type="button" value="_(Done)_" onclick="done()">

View File

@@ -28,10 +28,5 @@ $(function() {
</table>
<input type="button" value="_(Done)_" onclick="done()">
:help34
> This list shows the SMART attributes supported by this disk. For more information about each SMART attribute, it is recommended to search online.
>
> Attributes in *orange* may require your attention. They have a **raw value** greater than zero and may indicate a pending disk failure.
>
> Special attention is required when the particular attribute raw value starts to increase over time. When in doubt, consult the Limetech forum for advice.
:end
:smart_attributes_help:

View File

@@ -28,8 +28,4 @@ $(function() {
</table>
<input type="button" value="_(Done)_" onclick="done()">
:help35
> This list shows the SMART capabilities supported by this disk.
>
> Observe here the estimated duration of the SMART short and extended self-tests.
:end
:smart_capabilities_help:

View File

@@ -36,6 +36,4 @@ $(function() {
</table>
<input type="button" value="_(Done)_" onclick="done()">
:help36
> This list shows the SMART identity information of this disk
:end
:smart_identity_help:

View File

@@ -340,10 +340,7 @@ _(Name)_:
_(Comments)_:
: <input type="text" name="diskComment.<?=$disk['idx']?>" maxlength="256" value="<?=htmlspecialchars($disk['comment'])?>">
:help12
> This text will appear under the *Comments* column for the share in Windows Explorer.
> Enter anything you like, up to 256 characters.
:end
:info_comments_help:
_(Partition size)_:
: <?=my_number($disk['sizeSb'])?> KB (K=1024)
@@ -377,20 +374,12 @@ _(Spin down delay)_:
_(Warning disk temperature threshold)_ (&deg;<?=$display['unit']?>):
: <input type="number" min="0" max="300" name="<?=htmlspecialchars($name)?>_hotTemp" class="narrow" value="<?=strlen($disk['hotTemp'])?displayTemp($disk['hotTemp']):''?>" placeholder="<?=displayTemp($display['hot'])?>">
:help9
> *Warning disk temperature* sets the warning threshold for this hard disk temperature. Exceeding this threshold will result in a warning notification.
>
> A value of zero will disable the warning threshold (including notifications).
:end
:info_warning_temp_help:
_(Critical disk temperature threshold)_ (&deg;<?=$display['unit']?>):
: <input type="number" min="0" max="300" name="<?=htmlspecialchars($name)?>_maxTemp" class="narrow" value="<?=strlen($disk['maxTemp'])?displayTemp($disk['maxTemp']):''?>" placeholder="<?=displayTemp($display['max'])?>">
:help10
> *Critical disk temperature* sets the critical threshold for this hard disk temperature. Exceeding this threshold will result in an alert notification.
>
> A value of zero will disable the critical threshold (including notifications).
:end
:info_critical_temp_help:
<?if ($disk['type']=="Data" || in_array($tag,$pools)):?>
_(File system status)_:
@@ -410,10 +399,7 @@ _(File system type)_:
<?=mk_option($disk['fsType'], "luks:reiserfs", _('reiserfs')." - "._('encrypted'))?>
</select>
:help11
> Enter the desired file system type. Changing the file system type of a device will permit you to reformat
> that device using the new file system. Be aware that **all existing data on the device will be lost**.
:end
:info_file_system_help:
<?elseif (isset($disk['slots']) && $disk['slots']>1):?>
_(File system type)_:
@@ -434,44 +420,18 @@ _(File system type)_:
_(Minimum free space)_:
: <input type="text" name="diskFloor.<?=$disk['idx']?>" maxlength="16" value="<?=$disk['diskFloor']?>" class="narrow" <?=$disabled?> placeholder="0">
:help41
> This defines a "floor" for the amount of free space remaining in the volume.
> If the free space becomes less than this value, then new files written via user shares will fail with "not enough space" error.
>
> Enter a numeric value with one of these suffixes:
>
> **KB** = 1,000<br>
> **MB** = 1,000,000<br>
> **GB** = 1,000,000,000<br>
> **TB** = 1,000,000,000,000<br>
> **K** = 1,024 (ie, 2^10)<br>
> **M** = 1,048,576 (ie, 2^20)<br>
> **G** = 1,073,741,824 (ie, 2^30)<br>
> **T** = 1,099,511,627,776 (ie, 2^40)<br>
>
> If no suffix, a count of 1024-byte blocks is assumed.
:end
:info_free_space_help:
<?endif;?>
_(Warning disk utilization threshold)_ (%):
: <input type="number" min="0" max="100" name="<?=htmlspecialchars($name)?>_warning" class="narrow" value="<?=strlen($disk['warning'])?$disk['warning']:''?>" placeholder="<?=$display['warning']?>">
:help13
> *Warning disk utilization* sets the warning threshold for this hard disk utilization. Exceeding this threshold will result in a warning notification.
>
> When the warning threshold is set equal or greater than the critical threshold, there will be only critical notifications (warnings are not existing).
>
> A value of zero will disable the warning threshold (including notifications).
:end
:info_warning_utilization_help:
_(Critical disk utilization threshold)_ (%):
: <input type="number" min="0" max="100" name="<?=htmlspecialchars($name)?>_critical" class="narrow" value="<?=strlen($disk['critical'])?$disk['critical']:''?>" placeholder="<?=$display['critical']?>")>
:help14
> *Critical disk utilization* sets the critical threshold for this hard disk utilization. Exceeding this threshold will result in an alert notification.
>
> A value of zero will disable the critical threshold (including notifications).
:end
:info_critical_utilization_help:
<?endif;?>
&nbsp;
@@ -516,24 +476,7 @@ _(btrfs balance status)_:
*_(Perform full balance)_*
<?endif;?>
:help15
> **Balance** will run the *btrfs balance* program to restripe the extents across all pool devices, for example,
> to convert the pool from raid1 to raid0 or vice-versa.
>
> When a *full balance* is perfomred, it basically rewrites everything in the current filesystem.
>
> A *mode conversion* affects the btrfs data extents; metadata always uses raid1 and is converted to raid1 if necessary by any balance operation.
>
> The run time is potentially very long, depending on the filesystem size and speed of the device.
>
> Unraid uses these default options when creating a multiple-device pool:
>
> `-dconvert=raid1 -mconvert=raid1`
>
> For more complete documentation, please refer to the btrfs-balance [Manpage](https://btrfs.wiki.kernel.org/index.php/Manpage/btrfs-balance)
>
> *Note: raid5 and raid6 are generally still considered **experimental** by the Linux community*
:end
:info_btrfs_balance_help:
<?else:?>
<input type="hidden" name="#command" value="/webGui/scripts/btrfs_balance">
@@ -543,9 +486,7 @@ _(btrfs balance status)_:
&nbsp;
: <input type="submit" value="_(Cancel)_">
:help16
> **Cancel** will cancel the balance operation in progress.
:end
:info_balance_cancel_help:
<?endif;?>
<?else:?>
@@ -574,12 +515,7 @@ _(btrfs scrub status)_:
&nbsp;
: <input type="submit" value="_(Scrub)_"><label><input type="checkbox" name="#arg[3]" value=""> _(Repair corrupted blocks)_</label>
:help17
> **Scrub** runs the *btrfs scrub* program which will read all data and metadata blocks from all
> devices and verify checksums.
>
> If *Repair corrupted blocks* is checked, *btrfs scrub* will repair corrupted blocks if theres a correct copy available.
:end
:info_btrfs_scrub_help:
<?else:?>
<input type="hidden" name="#command" value="/webGui/scripts/btrfs_scrub">
@@ -589,9 +525,7 @@ _(btrfs scrub status)_:
&nbsp;
: <input type="submit" value="_(Cancel)_">
:help18
> **Cancel** will cancel the Scrub operation in progress.
:end
:info_scrub_cancel_help:
<?endif;?>
<?else:?>
@@ -620,17 +554,7 @@ _(btrfs check status)_:
&nbsp;
: <input type="submit" value="_(Check)_"><input type="text" name="#arg[4]" class="narrow" maxlength="256" value="--readonly"> _(Options (see Help))_
:help19
> **Check** will run the *btrfs check* program to check file system integrity on the device.
>
> The *Options* field is initialized with *--readonly* which specifies check-only. If repair is needed, you should run
> a second Check pass, setting the *Options* to *--repair*; this will permit *btrfs check* to fix the file system.
>
> After starting a Check, you should Refresh to monitor progress and status. Depending on
> how large the file system is, and what errors might be present, the operation can take **a long time** to finish (hours).
> Not much info is printed in the window, but you can verify the operation is running by observing the read/write counters
> increasing for the device on the Main page.
:end
:info_btrfs_check_help:
<?else:?>
<input type="hidden" name="#command" value="/webGui/scripts/btrfs_check">
@@ -641,9 +565,7 @@ _(btrfs check status)_:
&nbsp;
: <input type="submit" value="_(Cancel)_"> *_(Running)_*
:help20
> **Cancel** will cancel the Check operation in progress.
:end
:info_check_cancel_help:
<?endif;?>
<?else:?>
@@ -678,18 +600,7 @@ _(reiserfsck status)_:
&nbsp;
: <input type="submit" value="_(Check)_"><input type="text" name="#arg[4]" class="narrow" maxlength="256" value=""> _(Options (see Help))_
:help21
> **Check** will run the *reiserfsck* program to check file system integrity on the device.
>
> The *Options* field may be filled in with specific options used to fix problems in the file system. Typically, you
> first run a Check pass leaving *Options* blank. Upon completion, if *reiserfsck* finds any problems, you must
> run a second Check pass, using a specific option as instructed by the first *reiserfsck* pass.
>
> After starting a Check you should Refresh to monitor progress and status. Depending on
> how large the file system is, and what errors might be present, the operation can take **a long time** to finish (hours).
> Not much info is printed in the window, but you can verify the operation is running by observing the read/write counters
> increasing for the device on the Main page.
:end
:info_reiserfs_check_help:
<?else:?>
<input type="hidden" name="#command" value="/webGui/scripts/reiserfs_check">
@@ -700,9 +611,7 @@ _(reiserfsck status)_:
&nbsp;
: <input type="submit" value="_(Cancel)_"> *_(Running)_*
:help22
> **Cancel** will cancel the Check operation in progress.
:end
:info_reiserfs_cancel_help:
<?endif;?>
<?else:?>
@@ -731,17 +640,7 @@ _(xfs_repair status)_:
&nbsp;
: <input type="submit" value="_(Check)_"><input type="text" name="#arg[4]" class="narrow" maxlength="256" value="-n"> _(Options (see Help))_
:help23
> **Check** will run the *xfs_repair* program to check file system integrity on the device.
>
> The *Options* field is initialized with *-n* which specifies check-only. If repair is needed, you should run
> a second Check pass, setting the *Options* blank; this will permit *xfs_repair* to fix the file system.
>
> After starting a Check, you should Refresh to monitor progress and status. Depending on
> how large the file system is, and what errors might be present, the operation can take **a long time** to finish (hours).
> Not much info is printed in the window, but you can verify the operation is running by observing the read/write counters
> increasing for the device on the Main page.
:end
:info_xfs_check_help:
<?else:?>
<input type="hidden" name="#command" value="/webGui/scripts/xfs_check">
@@ -751,9 +650,7 @@ _(xfs_repair status)_:
&nbsp;
: <input type="submit" value="_(Cancel)_"> *_(Running)_*
:help24
> **Cancel** will cancel the Check operation in progress.
:end
:info_xfs_cancel_help:
<?endif;?>
<?else:?>
@@ -781,11 +678,7 @@ _(SMART notification value)_:
<?=mk_option($disk['smSelect'], "1", _('Normalized'))?>
</select>
:help25
> SMART notifications are generated on either an increasing RAW value of the attribute, or a decreasing NORMALIZED value which reaches a predefined threshold set by the manufacturer.
>
> Each disk may have its own specific setting overruling the 'default' setting (see global SMART settings under Disk Settings).
:end
:info_smart_notifications_help:
_(SMART notification tolerance level)_:
: <select name="smLevel">
@@ -799,11 +692,7 @@ _(SMART notification tolerance level)_:
<?=mk_option($disk['smLevel'], "1.50", "50%")?>
</select>
:help26
> A tolerance level may be given to prevent that small changes result in a notification. Setting a too high tolerance level may result in critical changes without a notification.
>
> Each disk may have its own specific setting overruling the 'default' setting (see global SMART settings under Disk Settings).
:end
:info_tolerance_level_help:
_(SMART controller type)_:
: <select name="smType" onchange="setGlue(this.form,true)">
@@ -826,12 +715,7 @@ _(SMART controller type)_:
<input type="text" name="smPort3" value="<?=$disk['smPort3']?>" class="option"><select name="smPort3" class="narrow" style="display:none" disabled></select><span id="devtext" class="devtext">/dev/</span>
<input type="text" name="smDevice" value="<?=$disk['smDevice']??''?>" class="option" placeholder="<?=htmlspecialchars($disk['device'])?>"><span id="helptext" class="helptext">enter disk index and device name as applicable to your controller</span>
:help27
> By default automatic controller selection is done by smartctl to read the SMART information. Certain controllers however need specific settings for smartctl to work.
> Use this setting to select your controller type and fill-in the specific disk index and device name for your situation. Use the manufacturer's documentation to find the relevant information.
>
> Each disk may have its own specific setting overruling the 'default' setting (see global SMART settings under Disk Settings).
:end
:info_controller_type_help:
_(SMART attribute notifications)_:
: <input type="text" name="smCustom" value="<?=$disk['smCustom']??$var['smCustom']?>" class="narrow">_(Custom attributes (use comma to separate numbers))_
@@ -841,14 +725,7 @@ _(SMART attribute notifications)_:
: <input type="checkbox" name="at<?=$x?>" value="<?=$preselect[$x]['code']?>"<?=in_array($preselect[$x]['code'],$events)?' checked':''?>><span class="code">_(Attribute)_ = <?=$preselect[$x]['code']?></span><?=$preselect[$x]['text']?>
<?endfor;?>
:help28
> The user can enable or disable notifications for the given SMART attributes. It is recommended to keep the default, which is ALL selected attributes,
> when certain attributes are not present on your hard disk or do not provide the correct information, these may be excluded.
> In addition custom SMART attributes can be entered to generate notifications. Be careful in this selection,
> it may cause an avalance of notifcations if inappropriate SMART attributes are chosen.
>
> Each disk may have its own specific setting overruling the 'default' setting (see global SMART settings under Disk Settings).
:end
:info_attribute_notifications_help:
<input type="submit" name="#default" value="_(Default)_">
: <input type="submit" name="#apply" value="_(Apply)_" disabled><input type="button" value="_(Done)_" onclick="done()">
@@ -871,4 +748,3 @@ _(Name)_:
<input type="hidden" name="poolName" value="<?=$name?>">
<input type="hidden" name="poolSlots" value="0">
</form>

View File

@@ -52,7 +52,7 @@ function diagnostics(file) {
}
</script>
<div id="pleaseWait" style="display:none;font-weight:bold;color:red;text-align:center;margin:0">_(Please wait)_... _(collecting diagnostic information (this may take several minutes))_</div>
:plug1
:diagnostics_1_plug:
This utility is used for troubleshooting purposes. It will collect all of the system information and configuration files, and package these files in a single ZIP file which can be saved locally.
Subsequently, this file can be included in your correspondence with Limetech or the Unraid forum.
@@ -61,7 +61,7 @@ and configuration files are collected:
:end
<pre class="pre" markdown="1">
:plug2
:diagnostics_2_plug:
+ */config*
<br>copy all *\*.cfg files*, *go* file and the *super.dat* file. These are configuration files.
+ */config/shares*
@@ -81,7 +81,7 @@ and configuration files are collected:
:end
</pre>
:plug3
:diagnostics_3_plug:
Clicking **Download** will start the collection process and then instruct your browser to save the zip file locally.
*No personal information such as user names, passwords, or any other file contents not specified above is included

View File

@@ -39,22 +39,4 @@ $(function() {
</table>
<p><input id="compute-disks" type="button" value="_(Compute All)_" onclick="$(this).prop('disabled',true);displayDisks('yes')"></p>
:help2
> **Colored Status Indicator** -- the significance of the color indicator at the beginning of each line in *Disk Shares* is as follows:
>
> <i class='fa fa-circle orb green-orb'></i>Mounted, underlying device has redundancy/protection.
>
> <i class='fa fa-warning orb yellow-orb'></i>Mounted, underlying device does not have redundancy/protection.
>
> **Security modes:**
> + '-' -- disk share is not exported and unavailable on the network
> + *Public* -- all users including guests have full read/write access (open access)
> + *Secure* -- all users including guests have read access, write access is set per user (limited access)
> + *Private* -- no guest access at all, read/write or read-only access is set per user (closed access)
>
> **Special modes:**
> + SMB security mode displayed in *italics* indicates exported hidden disk shares.
> + NFS does not have special modes for disk shares.
:end
:disk_list_help:

View File

@@ -64,11 +64,7 @@ _(Enable auto start)_:
<?=mk_option($var['startArray'], "yes", _('Yes'))?>
</select>
:help11
> If set to 'Yes' then if the device configuration is correct upon server start-up,
> the array will be automatically Started and shares exported.<br>
> If set to 'No' then you must Start the array yourself.
:end
:disk_enable_autostart_help:
_(Default spin down delay)_:
: <select name="spindownDelay" size="1">
@@ -87,11 +83,7 @@ _(Default spin down delay)_:
<?=mk_option($var['spindownDelay'], "9", "9 "._('hours'))?>
</select>
:help12
> This setting defines the 'default' time-out for spinning hard drives down after a period
> of no I/O activity. You may override the default value for an individual disk on the Disk Settings
> page for that disk.
:end
:disk_spindown_delay_help:
_(Enable spinup groups)_:
: <select name="spinupGroups" size="1">
@@ -99,9 +91,7 @@ _(Enable spinup groups)_:
<?=mk_option($var['spinupGroups'], "yes", _('Yes'))?>
</select>
:help13
> If set to 'Yes' then the [Spinup Groups](/Help) feature is enabled.
:end
:disk_spinup_groups_help:
_(Default partition format)_:
: <select name="defaultFormat" size="1">
@@ -109,21 +99,7 @@ _(Default partition format)_:
<?=mk_option($var['defaultFormat'], "2", _('MBR: 4K-aligned'))?>
</select>
:help14
> Defines the type of partition layout to create when formatting hard drives 2TB in size and
> smaller **only**. (All devices larger then 2TB are always set up with GPT partition tables.)
>
> **MBR: unaligned** setting will create MBR-style partition table, where the single
> partition 1 will start in the **63rd sector** from the start of the disk. This is the *traditional*
> setting for virtually all MBR-style partition tables.
>
> **MBR: 4K-aligned** setting will create an MBR-style partition table, where the single
> partition 1 will start in the **64th sector** from the start of the disk. Since the sector size is 512 bytes,
> this will *align* the start of partition 1 on a 4K-byte boundry. This is required for proper
> support of so-called *Advanced Format* drives.
>
> Unless you have a specific requirement do not change this setting from the default **MBR: 4K-aligned**.
:end
:disk_default_partition_format_help:
_(Default file system)_:
: <select name="defaultFsType" size="1">
@@ -135,26 +111,17 @@ _(Default file system)_:
<?=mk_option($var['defaultFsType'], "luks:reiserfs", _('reiserfs')." - "._('encrypted'));?>
</select>
:help15
> Defines the default file system type to create when an *unmountable* array device is formatted.
>
> The default file system type for a single or multi-device cache is always Btrfs.
:end
:disk_default_file_system_help:
_(Shutdown time-out)_:
: <input type="text" name="shutdownTimeout" maxlength="10" value="<?=$var['shutdownTimeout']?>" class="narrow">
:help16
> When shutting down the server, this defines how long to wait in seconds for *graceful* shutdown before forcing
> shutdown to continue.
:end
:disk_shutdown_timeout_help:
_(Tunable (poll_attributes))_:
: <input type="text" name="poll_attributes" maxlength="10" value="<?=$var['poll_attributes']?>" class="narrow"><?=_($var['poll_attributes_status'])?>
:help17
> This defines the disk SMART polling interval, in seconds. A value of 0 disables SMART polling (not recommended).
:end
:disk_tunable_poll_attributes_help:
_(Tunable (enable NCQ))_:
: <select name="queueDepth" size="1">
@@ -162,24 +129,12 @@ _(Tunable (enable NCQ))_:
<?=mk_option($var['queueDepth'], "1", _('No'))?>
</select>
:help18
> If set to **No** then *Native Command Queuing* is disabled for all array devices that support NCQ.
>
> **Auto** leaves the setting for each device as-is.
>
> Note: You must reboot after selecting Auto for setting to take effect.
:end
:disk_tunable_enable_ncq_help:
_(Tunable (nr_requests))_:
: <input type="text" name="nr_requests" maxlength="10" value="<?=$var['nr_requests']?>" class="narrow"><?=_($var['nr_requests_status'])?>
:help19
> This defines the `nr_requests` device driver setting for all array devices.
>
> **Auto** leaves the setting for each device as-is.
>
> Note: if you set to blank and click Apply, the setting is restored to its default, and you must reboot for setting to take effect.
:end
:disk_tunable_nr_requests_help:
_(Tunable (scheduler))_:
: <select name="md_scheduler" size="1">
@@ -190,41 +145,22 @@ _(Tunable (scheduler))_:
<?=mk_option($var['md_scheduler'], "none", _('none'))?>
</select>
:help20
> Selects which kernel I/O scheduler to use for all array devices.
>
> **Auto** leaves the setting for each device as-is (mq-deadline).
>
> Note: You must reboot after selecting Auto for setting to take effect.
:end
:disk_tunable_scheduler_help:
_(Tunable (md_num_stripes))_:
: <input type="text" name="md_num_stripes" maxlength="10" value="<?=$var['md_num_stripes']?>" class="narrow"><?=_($var['md_num_stripes_status'])?>
:help21
> This is the size of the *stripe pool* in number of *stripes*. A *stripe* refers to a data structure that faclitiates parallel 4K read/write
> operations necessary for a parity-protected array.
>
> Note: if you set to blank and click Apply, the setting is restored to its default, and will take effect after reboot.
:end
:disk_tunable_md_num_stripes_help:
_(Tunable (md_queue_limit))_:
: <input type="text" name="md_queue_limit" maxlength="10" value="<?=$var['md_queue_limit']?>" class="narrow"><?=_($var['md_queue_limit_status'])?>
:help22
> This is a number in [1..100] which is the maximum steady-load percentage of the stripe pool permitted to be in use.
>
> Note: if you set to blank and click Apply, the setting is restored to its default.
:end
:disk_tunable_md_queue_limit_help:
_(Tunable (md_sync_limit))_:
: <input type="text" name="md_sync_limit" maxlength="10" value="<?=$var['md_sync_limit']?>" class="narrow"><?=_($var['md_sync_limit_status'])?>
:help23
> This is a number in [0..100] which is the maximum percentage of the stripe pool allocated for parity sync/check in the presence of other I/O.
>
> Note: if you set to blank and click Apply, the setting is restored to its default.
:end
:disk_tunable_md_sync_limit_help:
_(Tunable (md_write_method))_:
: <select name="md_write_method" size="1">
@@ -233,49 +169,27 @@ _(Tunable (md_write_method))_:
<?=mk_option($var['md_write_method'], "1", _('reconstruct write'))?>
</select>
:help24
> Selects the method to employ when writing to enabled disk in parity protected array.
>
> *Auto* selects `read/modify/write`.
:end
:disk_tunable_md_write_method_help:
_(Default warning disk utilization threshold)_ (%):
: <input type="number" min="0" max="100" name="display_warning" class="narrow" value="<?=$display['warning']?>">
:help25
> *Warning disk utilization* sets the default warning threshold for all hard disks utilization. Exceeding this threshold will result in a warning notification.
>
> When the warning threshold is set equal or greater than the critical threshold, there will be only critical notifications (warnings are not existing).
>
> A value of zero will disable the warning threshold (including notifications).
:end
:disk_default_warning_utilization_help:
_(Default critical disk utilization threshold)_ (%):
: <input type="number" min="0" max="100" name="display_critical" class="narrow" value="<?=$display['critical']?>">
:help26
> *Critical disk utilization* sets the default critical threshold for all hard disks utilization. Exceeding this threshold will result in an alert notification.
>
> A value of zero will disable the critical threshold (including notifications).
:end
:disk_default_critical_utilization_help:
_(Default warning disk temperature threshold)_ (&deg;<?=$display['unit']?>):
: <input type="number" min="0" max="300" name="display_hot" class="narrow" value="<?=displayTemp($display['hot'])?>">
:help27
> *Warning disk temperature* sets the default warning threshold for all hard disks temperature. Exceeding this threshold will result in a warning notification.
>
> A value of zero will disable the warning threshold (including notifications).
:end
:disk_default_warning_temperature_help:
_(Default critical disk temperature threshold)_ (&deg;<?=$display['unit']?>):
: <input type="number" min="0" max="300" name="display_max" class="narrow" value="<?=displayTemp($display['max'])?>">
:help28
> *Critical disk temperature* sets the default critical threshold for all hard disks temperature. Exceeding this threshold will result in an alert notification.
>
> A value of zero will disable the critical threshold (including notifications).
:end
:disk_default_critical_temperature_help:
&nbsp;
: <input type="submit" name="changeDisk" value="_(Apply)_" disabled><input type="button" value="_(Done)_" onclick="done()">
@@ -296,11 +210,7 @@ _(Default SMART notification value)_:
<?=mk_option($var['smSelect'], "1", _('Normalized'))?>
</select>
:help29
> SMART notifications are generated on either an increasing RAW value of the attribute, or a decreasing NORMALIZED value which reaches a predefined threshold set by the manufacturer.
>
> This section is used to set the global settings for all disks. It is possible to adjust settings for individual disks.
:end
:disk_default_smart_notification_help:
_(Default SMART notification tolerance level)_:
: <select name="smLevel" size="1">
@@ -313,11 +223,7 @@ _(Default SMART notification tolerance level)_:
<?=mk_option($var['smLevel'], "1.50", "50%")?>
</select>
:help30
> A tolerance level may be given to prevent that small changes result in a notification. Setting a too high tolerance level may result in critical changes without a notification.
>
> This section is used to set the global settings for all disks. It is possible to adjust settings for individual disks.
:end
:disk_default_smart_tolerance_help:
_(Default SMART controller type)_:
: <select name="smType" size="1" onchange="setIndex(this.form)">
@@ -335,12 +241,7 @@ _(Default SMART controller type)_:
<?=mk_option($var['smType'], "-d megaraid", "MegaRAID")?>
</select>
:help31
> By default automatic controller selection is done by smartctl to read the SMART information. Certain controllers however need specific settings for smartctl to work.
> Use this setting to select your controller type and fill-in the specific disk index and device name for your situation. Use the manufacturer's documentation to find the relevant information.
>
> This section is used to set the global settings for all disks. It is possible to adjust settings for individual disks.
:end
:disk_default_smart_controller_help:
_(Default SMART attribute notifications)_:
: <input type="text" name="smCustom" value="<?=$var['smCustom']?>" class="narrow">_(Custom attributes (use comma to separate numbers))_
@@ -350,14 +251,7 @@ _(Default SMART attribute notifications)_:
: <input type="checkbox" name="at<?=$x?>" value="<?=$preselect[$x]['code']?>"<?=in_array($preselect[$x]['code'],$events)?' checked':''?>><span class="code">_(Attribute)_ = <?=$preselect[$x]['code']?></span><?=$preselect[$x]['text']?>
<?endfor;?>
:help32
> The user can enable or disable notifications for the given SMART attributes. It is recommended to keep the default, which is ALL selected attributes,
> when certain attributes are not present on your hard disk or do not provide the correct information, these may be excluded.
> In addition custom SMART attributes can be entered to generate notifications. Be careful in this selection,
> it may cause an avalance of notifcations if inappropriate SMART attributes are chosen.
>
> This section is used to set the global settings for all disks. It is possible to adjust settings for individual disks.
:end
:disk_default_smart_attribute_help:
<input type="submit" name="#default" value="_(Default)_">
: <input type="submit" name="#apply" value="_(Apply)_" disabled><input type="button" value="_(Done)_" onclick="done()">

View File

@@ -120,11 +120,7 @@ $(function() {
});
</script>
:help100
> The display settings below determine how items are displayed on screen. Use these settings to tweak the visual effects to your likings.
>
> You can experiment with these settings as desired, they only affect visual properties.
:end
:display_settings_help:
<form markdown="1" name="display_settings" method="POST" action="/update.php" target="progressFrame" onsubmit="saveFontSize();upload();">
<input type="hidden" name="#file" value="dynamix/dynamix.cfg">
@@ -150,9 +146,7 @@ _(Font size)_:
<?=mk_option($display['font'],"80%",_('Huge'))?>
</select>
:help101
> This is a per device setting
:end
:display_font_size_help:
_(Date format)_:
: <select name="date" onchange="presetTime(this.form)">
@@ -223,13 +217,7 @@ _(Display world-wide-name in device ID)_:
<?=mk_option($display['wwn'], "1",_('Automatic'))?>
</select>
:help102
> World Wide Name (WWN) is a unique identifier used for SAS attached devices.
>
> Select *Disabled* to suppress the appending of WWN to the device identification
>
> Select "Automatic" to append WWN to the device identification in case of SAS devices
:end
:display_wwn_device_id_help:
_(Display array totals)_:
: <select name="total">
@@ -246,16 +234,12 @@ _(Show array utilization indicator)_:
_(Header custom text color)_:
: <input type="text" class="narrow" name="header" value="<?=$display['header']?>" maxlength="6" pattern="[0-9a-fA-F]{3,6}" title="_(HTML color code of 3 or 6 hexadecimal digits)_">
:help103
> Overrule the default text color in the header. This can be used to match the text color with a background image.
:end
:display_custom_text_color_help:
_(Header custom background color)_:
: <input type="text" class="narrow" name="background" value="<?=$display['background']?>" maxlength="6" pattern="[0-9a-fA-F]{3,6}" title="_(HTML color code of 3 or 6 hexadecimal digits)_">
:help104
> Overrule the default background color in the header. This can be used to match the background color with a custom text color.
:end
:display_custom_background_color_help:
_(Show banner)_:
: <select name="banner" onchange="presetBanner(this.form)">
@@ -275,9 +259,7 @@ _(Custom banner)_:
</span><em>_(Drag-n-drop a PNG file or click the image at the left)_.</em><input type="file" id="drop" accept=".png" style="display:none">
</div>
:help6
> Image will be scaled to 1920x90 pixels. The maximum image file upload size is 512 kB (524,288 bytes).
:end
:display_custom_banner_help:
_(Show Dashboard apps)_:
: <select name="dashapps">
@@ -312,11 +294,7 @@ _(Temperature unit)_:
<?=mk_option($display['unit'], "F",_('Fahrenheit'))?>
</select>
:help7
> Selects the temperature unit for the disk temperature thresholds. Changing the unit will adjust the existing value in the disk temperature thresholds as appropriate.
>
> Make sure any newly entered values represent the selected temperature unit.
:end
:display_temperature_unit_help:
<input type="submit" name="#default" value="_(Default)_" onclick="filename='reset'">
: <input type="submit" name="#apply" value="_(Apply)_" disabled><input type="button" value="_(Done)_" onclick="done()">

View File

@@ -452,18 +452,13 @@ _(Interface description)_:
: <span class="status vshift"><i id="tag-eth0" class="fa fa-fw fa-chevron-down" style="cursor:pointer" onclick="viewToggle('eth0')"></i></span>
<input type="text" name="DESCRIPTION:0" maxlength="80" value="<?=htmlspecialchars($eth0["DESCRIPTION:0"])?>" onchange="exitCode(this.form,true)">
:help120
> Use this optional field to provide addditional information about the purpose of the connection.
:end
:eth_interface_description_help:
<div markdown="1" id="view-eth0" style="display:none">
_(MAC address)_:
: <?=strtoupper(exec("ip link show eth0|grep -Pom1 'ether \K\S+'"))?>
:help121
> This is the hardware address of the interface.
> When tagging is enabled all VLANs on this interface will share the same hardware address.
:end
:eth_mac_address_help:
_(Enable bonding)_:
: <select name="BONDING" onchange="checkBondingSettings(this.form,1,'eth0')">
@@ -471,11 +466,7 @@ _(Enable bonding)_:
<?=mk_option($eth0['BONDING'], "yes", _("Yes"))?>
</select>
:help122
> Bonding is a feature that combines multiple physical Ethernet interfaces into a single *bonded* interface named **bond0**.
> This can be used to improve the connection redundancy and/or throughput of the system.
> Different bonding modes are supported (see below), but some modes require proper switch support.
:end
:eth_enable_bonding_help:
<div markdown="1" id="bond-members-eth0" style="display:none">
_(Bonding mode)_:
@@ -490,44 +481,7 @@ _(Bonding mode)_:
</select>
<span id="attention0" style="display:none">**_(Attention)_:** _(this mode requires a network switch with proper setup and support)_...</span>
:help123
> **Mode 0 (balance-rr)**<br>
> This mode transmits packets in a sequential order from the first available slave through the last.
> If two real interfaces are slaves in the bond and two packets arrive destined out of the bonded interface the first will be transmitted on the first slave and the second frame will be transmitted on the second slave.
> The third packet will be sent on the first and so on. This provides load balancing and fault tolerance.
>
> **Mode 1 (active-backup) - default**<br>
> This mode places one of the interfaces into a backup state and will only make it active if the link is lost by the active interface.
> Only one slave in the bond is active at an instance of time. A different slave becomes active only when the active slave fails.
> This mode provides fault tolerance.
>
> **Mode 2 (balance-xor)**<br>
> This mode transmits packets based on an XOR formula. Source MAC address is XOR'd with destination MAC address modula slave count.
> This selects the same slave for each destination MAC address and provides load balancing and fault tolerance.
>
> **Mode 3 (broadcast)**<br>
> This mode transmits everything on all slave interfaces. This mode is least used (only for specific purpose) and provides only fault tolerance.
>
> **Mode 4 (802.3ad)**<br>
> This mode is known as *Dynamic Link Aggregation*. It creates aggregation groups that share the same speed and duplex settings.
> It requires a switch that supports IEEE 802.3ad dynamic link.
> Slave selection for outgoing traffic is done according to the transmit hash policy, which may be changed from the default simple XOR policy via the xmit_hash_policy option.
> Note that not all transmit policies may be 802.3ad compliant, particularly inregards to the packet mis-ordering requirements of section 43.2.4 of the 802.3ad standard.
> Different peer implementations will have varying tolerances for noncompliance.
>
> **Mode 5 (balance-tlb)**<br>
> This mode is called *Adaptive transmit load balancing*. The outgoing traffic is distributed according to the current load and queue on each slave interface.
> Incoming traffic is received by the current slave.
>
> **Mode 6 (balance-alb)**<br>
> This mode is called *Adaptive load balancing*. This includes balance-tlb + receive load balancing (rlb) for IPV4 traffic.
> The receive load balancing is achieved by ARP negotiation.
> The bonding driver intercepts the ARP Replies sent by the server on their way out and overwrites the src hw address with the unique hw address of one of the slaves in the bond
> such that different clients use different hw addresses for the server.
>
> *Mode 1 (active-backup) is the recommended setting. Other modes allow you to set up a specific environment, but may require proper switch support.
> Choosing a unsupported mode can result in a disrupted communication.*
:end
:eth_bonding_mode_help:
_(Bonding members of)_ bond0:
: <select id="bond-eth0" name="BONDNICS" multiple="multiple" style="display:none">
@@ -537,9 +491,7 @@ _(Bonding members of)_ bond0:
<?endforeach;?>
</select>
:help124
> Select which interfaces are member of the *bonded* interface. By default eth0 is a member, while other interfaces are optional.
:end
:eth_bonding_members_help:
</div>
_(Enable bridging)_:
@@ -548,10 +500,7 @@ _(Enable bridging)_:
<?=mk_option($eth0['BRIDGING'], "yes", _("Yes"))?>
</select>
:help125
> Bridging is a feature which creates a virtual bridge and allows VMs and Docker containers to communicate directly with the physical Ethernet port.
> Both bonding and bridging can be combined to let VMs or containers communicate over a *bonded* interface.
:end
:eth_enable_bridging_help:
<div markdown="1" id="bridge-members-eth0" style="display:none">
_(Bridging members of)_ br0:
@@ -562,9 +511,7 @@ _(Bridging members of)_ br0:
<?endforeach;?>
</select>
:help126
> Select which interfaces are member of the *bridged* interface. By default eth0 is a member, while other interfaces are optional.
:end
:eth_bridging_members_help:
</div>
_(Network protocol)_:
@@ -574,10 +521,7 @@ _(Network protocol)_:
<?=mk_option($eth0["PROTOCOL:0"], 'ipv4+ipv6', _('IPv4 + IPv6'))?>
</select>
:help127
> Select which protocol(s) are used. By default IPv4 only is used.<br>
> When both IPv4 and IPv6 is selected, each protocol can be configured independently.
:end
:eth_network_protocol_help:
<div markdown="1" class="ipv4-eth0-0" style="display:none">
_(IPv4 address assignment)_:
@@ -586,13 +530,7 @@ _(IPv4 address assignment)_:
<?=mk_option($eth0["USE_DHCP:0"], 'no', _('Static'))?>
</select>
:help128
> The following settings are possible:
>
> *Automatic* - the server will attempt to obtain a IPv4 address from the local DHCP server<br>
> *Static* - the IPv4 address is manually set for this interface<br>
> *None* - no IPv4 address is assigned to the interface (only available for VLANs)
:end
:eth_ipv4_address_assignment_help:
<div markdown="1" class="more-ipv4-eth0-0" style="display:none">
_(IPv4 address)_:
@@ -615,17 +553,13 @@ _(IPv4 address)_:
<?=mk_option($eth0["NETMASK:0"], "255.255.255.252", "30")?>
</select>
:help129
> Greyed out when using automatic IP assignment. Otherwise specify here the IPv4 address and mask of the system.
:end
:eth_ipv4_address_help:
_(IPv4 default gateway)_:
: <input type="text" name="GATEWAY:0" maxlength="15" value="<?=$eth0["GATEWAY:0"]?>" class="narrow" pattern="<?=$validIP4?>" title="_(IPv4 address A.B.C.D)_">
<input type="text" name="METRIC:0" min="0" max="9999" value="<?=$eth0["METRIC:0"]?>" class="slim"><i class="fa fa-sort-numeric-asc"></i> *_(optional metric (lowest is preferred, 0 is no default gateway))_*
:help130
> Greyed out when using automatic IP assignment. Otherwise specify here the IPv4 address of your router.
:end
:eth_ipv4_default_gateway_help:
</div>
_(IPv4 DNS server assignment)_:
@@ -634,38 +568,25 @@ _(IPv4 DNS server assignment)_:
<?=mk_option($eth0['DHCP_KEEPRESOLV'], "yes", _("Static"))?>
</select>
:help131
> If set to *Automatic* the server will use IPv4 DNS server(s) returned by the local automatic assignment.<br>
> If set to *Static* you may enter your own list.
>
> This is useful in Active Directory configurations where you need to set the first DNS Server entry to the IP address of your AD Domain server.
:end
:eth_ipv4_dns_server_assignment_help:
_(IPv4 DNS server)_:
: <input type="text" name="DNS_SERVER1" maxlength="15" value="<?=$eth0['DNS_SERVER1']?>" class="narrow" pattern="<?=$validIP4?>" title="_(IPv4 address A.B.C.D)_">
:help132
> This is the primary IPv4 DNS server to use. Enter a IPv4 address.
>
> Note: for *Active Directory* you **must** ensure this is set to the IP address of your AD Domain server.
:end
:eth_ipv4_dns_server_help:
<div markdown="1" id="dnsserver2" style="display:none">
_(IPv4 DNS server)_ 2:
: <input type="text" name="DNS_SERVER2" maxlength="15" value="<?=$eth0['DNS_SERVER2']?>" class="narrow" pattern="<?=$validIP4?>" title="_(IPv4 address A.B.C.D)_">
:help133
> This is the IPv4 DNS server to use when IPv4 DNS server 1 is down.
:end
:eth_ipv4_dns_server2_help:
</div>
<div markdown="1" id="dnsserver3" style="display:none">
_(IPv4 DNS server)_ 3:
: <input type="text" name="DNS_SERVER3" maxlength="15" value="<?=$eth0['DNS_SERVER3']?>" class="narrow" pattern="<?=$validIP4?>" title="_(IPv4 address A.B.C.D)_">
:help134
> This is the IPv4 DNS server to use when IPv4 DNS servers 1 and 2 are both down.
:end
:eth_ipv4_dns_server3_help:
</div>
</div>
@@ -676,29 +597,19 @@ _(IPv6 address assignment)_:
<?=mk_option($eth0["USE_DHCP6:0"], 'no', _('Static'))?>
</select>
:help135
> The following settings are possible:
>
> *Automatic* - the server will attempt to obtain a IPv6 address from the local DHCP server or Router Advertisement (RA)<br>
> *Static* - the IPv6 address is manually set for this interface<br>
> *None* - no IPv6 address is assigned to the interface (only available for VLANs)
:end
:eth_ipv6_address_assignment_help:
<div markdown="1" class="more-ipv6-eth0-0" style="display:none">
_(IPv6 address)_:
: <input type="text" name="IPADDR6:0" maxlength="39" value="<?=$eth0["IPADDR6:0"]?>" pattern="<?=$validIP6?>" title="_(IPv6 address nnnn:xxxx::yyyy)_">/<input type="number" name="NETMASK6:0" min="1" max="128" value="<?=$eth0["NETMASK6:0"]?>" class="slim">
:help136
> Greyed out when using automatic IP assignment. Otherwise specify here the IPv6 address of the system.
:end
:eth_ipv6_address_help:
_(IPv6 default gateway)_:
: <input type="text" name="GATEWAY6:0" maxlength="39" value="<?=$eth0["GATEWAY6:0"]?>" pattern="<?=$validIP6?>" title="_(IPv6 address nnnn:xxxx::yyyy)_">
<input type="text" name="METRIC6:0" min="0" max="9999" value="<?=$eth0["METRIC6:0"]?>" class="slim"><i class="fa fa-sort-numeric-asc"></i> *_(optional metric (lowest is preferred, 0 is no default gateway))_*
:help137
> Greyed out when using automatic IP assignment. Otherwise specify here the IPv6 address of your router.
:end
:eth_ipv6_default_gateway_help:
_(IPv6 privacy extensions)_:
: <select name="PRIVACY6:0">
@@ -706,9 +617,7 @@ _(IPv6 privacy extensions)_:
<?=mk_option($eth0["PRIVACY6:0"], "2", _("Enabled"))?>
</select>
:help138
> Enable or disable the generation of a random IPv6 interface identifier according to RFC4941. This is similar to the temporary IPv6 address generation on Windows machines.
:end
:eth_ipv6_privacy_extensions_help:
</div>
<div markdown="1" id="dns6server1" style="display:none">
@@ -718,45 +627,33 @@ _(IPv6 DNS server assignment)_:
<?=mk_option($eth0['DHCP6_KEEPRESOLV'], "yes", _("Static"))?>
</select>
:help139
> If set to *Automatic* the server will use IPv6 DNS server(s) returned by the local automatic assignment.<br>
> If set to *Static* you may enter your own list.
:end
:eth_ipv6_dns_server_assignment_help:
_(IPv6 DNS server)_:
: <input type="text" name="DNS6_SERVER1" maxlength="39" value="<?=$eth0['DNS6_SERVER1']?>" pattern="<?=$validIP6?>" title="_(IPv6 address nnnn:xxxx::yyyy)_">
:help140
> This is the primary IPv6 DNS server to use. Enter a IPv6 address.
:end
:eth_ipv6_dns_server_help:
</div>
<div markdown="1" id="dns6server2" style="display:none">
_(IPv6 DNS server)_ 2:
: <input type="text" name="DNS6_SERVER2" maxlength="39" value="<?=$eth0['DNS6_SERVER2']?>" pattern="<?=$validIP6?>" title="_(IPv6 address nnnn:xxxx::yyyy)_">
:help141
> This is the IPv6 DNS server to use when IPv6 DNS server 1 is down.
:end
:eth_ipv6_dns_server2_help:
</div>
<div markdown="1" id="dns6server3" style="display:none">
_(IPv6 DNS server)_ 3:
: <input type="text" name="DNS6_SERVER3" maxlength="39" value="<?=$eth0['DNS6_SERVER3']?>" pattern="<?=$validIP6?>" title="_(IPv6 address nnnn:xxxx::yyyy)_">
:help142
> This is the IPv6 DNS server to use when IPv6 DNS servers 1 and 2 are both down.
:end
:eth_ipv6_dns_server3_help:
</div>
</div>
_(Desired MTU)_:
: <input type="number" name="MTU" min="68" max="9198" value="<?=$eth0['MTU']?>" class="narrow" placeholder="1500">
:help143
> This is the MTU size to use on the physical Ethernet interface.
> If left blank, the MTU will automatically be determined (by default 1500 bytes).
:end
:eth_desired_mtu_help:
_(Enable VLANs)_:
: <select name="TYPE" onchange="checkNetworkAccess(this.form,'eth0')">
@@ -764,12 +661,7 @@ _(Enable VLANs)_:
<?=mk_option($eth0['TYPE'], 'trunk', _('Yes'))?>
</select>
:help144
> By default no VLANs are configured.<br>
> Enabling VLANs extends the number of logical connections over the same physical connection.
>
> Note: your router and switch must support VLANs too when this feature is used.
:end
:eth_enable_vlans_help:
</div>
<div id='index-eth0-0'></div>
@@ -779,18 +671,14 @@ _(Interface description)_:
: <span class="status vshift"><i id="tag-eth0-<?=$i?>" class="fa fa-fw fa-chevron-down" style="cursor:pointer" onclick="viewToggle('eth0','<?=$i?>')"></i></span>
<input type="text" name="DESCRIPTION:<?=$i?>" maxlength="80" value="<?=htmlspecialchars($eth0["DESCRIPTION:$i"])?>" onchange="exitCode(this.form,true)">
:help145
> Use this optional field to provide addditional information about the purpose of the connection.
:end
:eth_interface_description_help
<div markdown="1" id="view-eth0-<?=$i?>" style="display:none">
_(VLAN number)_:
: <input type="number" name="VLANID:<?=$i?>" min="1" max="4095" value="<?=$eth0["VLANID:$i"]?>" class="narrow gap" required>
<?if (!$service):?><input type="button" class="form" value="_(Delete VLAN)_" onclick="removeVLAN($('#index-eth0-<?=$i?>'))"><?endif;?>
:help146
> Give each VLAN a unique identifier. Numbers range from 1 to 4095.
:end
:eth_vlan_number_help:
_(Network protocol)_:
: <select name="PROTOCOL:<?=$i?>" onchange="selectProtocol(this.form,'eth0',<?=$i?>)">
@@ -799,10 +687,7 @@ _(Network protocol)_:
<?=mk_option($eth0["PROTOCOL:$i"], 'ipv4+ipv6', _('IPv4 + IPv6'))?>
</select>
:help147
> Select which protocol(s) are used. By default IPv4 only is used.<br>
> When both IPv4 and IPv6 is selected, each protocol can be configured independently.
:end
:eth_network_protocol_help:
<div markdown="1" class="ipv4-eth0-<?=$i?>" style="display:none">
_(IPv4 address assignment)_:
@@ -814,13 +699,7 @@ _(IPv4 address assignment)_:
<?endif;?>
</select>
:help148
> The following settings are possible:
>
> *Automatic* - the server will attempt to obtain a IPv4 address from the local DHCP server<br>
> *Static* - the IPv4 address is manually set for this interface<br>
> *None* - no IPv4 address is assigned to the interface (only available for VLANs)
:end
:eth_ipv4_address_assignment_help:
<div markdown="1" class="more-ipv4-eth0-<?=$i?>" style="display:none">
_(IPv4 address)_:
@@ -843,17 +722,13 @@ _(IPv4 address)_:
<?=mk_option($eth0["NETMASK:$i"], "255.255.255.252", "30")?>
</select>
:help149
> Greyed out when using automatic IP assignment. Otherwise specify here the IPv4 address and mask of the system.
:end
:eth_ipv4_address_help:
_(IPv4 default gateway)_:
: <input type="text" name="GATEWAY:<?=$i?>" maxlength="15" value="<?=$eth0["GATEWAY:$i"]?>" class="narrow" pattern="<?=$validIP4?>" title="_(IPv4 address A.B.C.D)_">
<input type="text" name="METRIC:<?=$i?>" min="0" max="9999" value="<?=$eth0["METRIC:$i"]?>" class="slim"><i class="fa fa-sort-numeric-asc"></i> *_(optional metric (lowest is preferred, 0 is no default gateway))_*
:help150
> Greyed out when using automatic IP assignment. Otherwise specify here the IPv4 address of your router.
:end
:eth_ipv4_default_gateway_help:
</div>
</div>
@@ -867,29 +742,19 @@ _(IPv6 address assignment)_:
<?endif;?>
</select>
:help151
> The following settings are possible:
>
> *Automatic* - the server will attempt to obtain a IPv6 address from the local DHCP server or Router Advertisement (RA)<br>
> *Static* - the IPv6 address is manually set for this interface<br>
> *None* - no IPv6 address is assigned to the interface (only available for VLANs)
:end
:eth_ipv6_address_assignment_help:
<div markdown="1" class="more-ipv6-eth0-<?=$i?>" style="display:none">
_(IPv6 address)_:
: <input type="text" name="IPADDR6:<?=$i?>" maxlength="39" value="<?=$eth0["IPADDR6:$i"]?>" pattern="<?=$validIP6?>" title="_(IPv6 address nnnn:xxxx::yyyy)_">/<input type="number" name="NETMASK6:<?=$i?>" min="1" max="128" value="<?=$eth0["NETMASK6:$i"]?>" class="slim">
:help152
> Greyed out when using automatic IP assignment. Otherwise specify here the IPv6 address and prefix of the system.
:end
:eth_ipv6_address_help:
_(IPv6 default gateway)_:
: <input type="text" name="GATEWAY6:<?=$i?>" maxlength="39" value="<?=$eth0["GATEWAY6:$i"]?>" pattern="<?=$validIP6?>" title="_(IPv6 address nnnn:xxxx::yyyy)_">
<input type="text" name="METRIC6:<?=$i?>" min="0" max="9999" value="<?=$eth0["METRIC6:$i"]?>" class="slim"><i class="fa fa-sort-numeric-asc"></i> *_(optional metric (lowest is preferred, 0 is no default gateway))_*
:help153
> Greyed out when using automatic IP assignment. Otherwise specify here the IPv6 address of your router.
:end
:eth_ipv6_default_gateway_help:
_(IPv6 privacy extensions)_:
: <select name="PRIVACY6:<?=$i?>">
@@ -897,9 +762,7 @@ _(IPv6 privacy extensions)_:
<?=mk_option($eth0["PRIVACY6:$i"], "2", _("Enabled"))?>
</select>
:help154
> Enable or disable the generation of a random IPv6 interface identifier according to RFC4941. This is similar to the temporary IPv6 address generation on Windows machines.
:end
:eth_ipv6_privacy_extensions_help:
</div>
</div>

View File

@@ -103,18 +103,13 @@ _(Interface description)_:
<span class="<?=$class?>"><?=$reason?></span>
<?endif;?>
:help120
> Use this field to give addditional information about the purpose of the connection.
:end
:eth_interface_description_help:
<div markdown="1" id="view-ethX" style="display:none">
_(MAC address)_:
: <?=strtoupper(exec("ip link show ethX|grep -Pom1 'ether \K\S+'"))?>
:help121
> This is the hardware address of the interface.
> When tagging is enabled all VLANs on this interface will share the same hardware address.
:end
:eth_mac_address_help:
<div markdown="1" class="slave-ethX">
_(Enable bonding)_:
@@ -123,11 +118,7 @@ _(Enable bonding)_:
<?=mk_option($ethX['BONDING'], "yes", _("Yes"))?>
</select>
:help122
> Bonding is a feature that combines multiple physical Ethernet interfaces into a single *bonded* interface named **bond0**.
> This can be used to improve the connection redundancy and/or throughput of the system.
> Different bonding modes are supported (see below), but some modes require proper switch support.
:end
:eth_enable_bonding_help:
<div markdown="1" id="bond-members-ethX" style="display:none">
_(Bonding mode)_:
@@ -142,44 +133,7 @@ _(Bonding mode)_:
</select>
<span id="attention0" style="display:none">**_(Attention)_:** _(this mode requires a network switch with proper setup and support)_...</span>
:help123
> **Mode 0 (balance-rr)**<br>
> This mode transmits packets in a sequential order from the first available slave through the last.
> If two real interfaces are slaves in the bond and two packets arrive destined out of the bonded interface the first will be transmitted on the first slave and the second frame will be transmitted on the second slave.
> The third packet will be sent on the first and so on. This provides load balancing and fault tolerance.
>
> **Mode 1 (active-backup) - default**<br>
> This mode places one of the interfaces into a backup state and will only make it active if the link is lost by the active interface.
> Only one slave in the bond is active at an instance of time. A different slave becomes active only when the active slave fails.
> This mode provides fault tolerance.
>
> **Mode 2 (balance-xor)**<br>
> This mode transmits packets based on an XOR formula. Source MAC address is XOR'd with destination MAC address modula slave count.
> This selects the same slave for each destination MAC address and provides load balancing and fault tolerance.
>
> **Mode 3 (broadcast)**<br>
> This mode transmits everything on all slave interfaces. This mode is least used (only for specific purpose) and provides only fault tolerance.
>
> **Mode 4 (802.3ad)**<br>
> This mode is known as *Dynamic Link Aggregation*. It creates aggregation groups that share the same speed and duplex settings.
> It requires a switch that supports IEEE 802.3ad dynamic link.
> Slave selection for outgoing traffic is done according to the transmit hash policy, which may be changed from the default simple XOR policy via the xmit_hash_policy option.
> Note that not all transmit policies may be 802.3ad compliant, particularly inregards to the packet mis-ordering requirements of section 43.2.4 of the 802.3ad standard.
> Different peer implementations will have varying tolerances for noncompliance.
>
> **Mode 5 (balance-tlb)**<br>
> This mode is called *Adaptive transmit load balancing*. The outgoing traffic is distributed according to the current load and queue on each slave interface.
> Incoming traffic is received by the current slave.
>
> **Mode 6 (balance-alb)**<br>
> This mode is called *Adaptive load balancing*. This includes balance-tlb + receive load balancing (rlb) for IPV4 traffic.
> The receive load balancing is achieved by ARP negotiation.
> The bonding driver intercepts the ARP Replies sent by the server on their way out and overwrites the src hw address with the unique hw address of one of the slaves in the bond
> such that different clients use different hw addresses for the server.
>
> *Mode 1 (active-backup) is the recommended setting. Other modes allow you to set up a specific environment, but may require proper switch support.
> Choosing a unsupported mode can result in a disrupted communication.*
:end
:eth_bonding_mode_help:
_(Bonding members of)_ bondX:
: <select id="bond-ethX" name="BONDNICS" multiple="multiple" style="display:none">
@@ -189,9 +143,7 @@ _(Bonding members of)_ bondX:
<?endforeach;?>
</select>
:help124
> Select which interfaces are member of the *bonded* interface. By default ethX is a member, while other interfaces are optional.
:end
:eth_bonding_members_help:
</div>
_(Enable bridging)_:
@@ -200,10 +152,7 @@ _(Enable bridging)_:
<?=mk_option($ethX['BRIDGING'], "yes", _("Yes"))?>
</select>
:help125
> Bridging is a feature which creates a virtual bridge and allows VMs and Docker containers to communicate directly with the physical Ethernet port.
> Both bonding and bridging can be combined to let VMs or containers communicate over a *bonded* interface.
:end
:eth_enable_bridging_help:
<div markdown="1" id="bridge-members-ethX" style="display:none">
_(Bridging members of)_ brX:
@@ -214,9 +163,7 @@ _(Bridging members of)_ brX:
<?endforeach;?>
</select>
:help126
> Select which interfaces are member of the *bridged* interface. By default ethX is a member, while other interfaces are optional.
:end
:eth_bridging_members_help:
</div>
_(Network protocol)_:
@@ -226,10 +173,7 @@ _(Network protocol)_:
<?=mk_option($ethX["PROTOCOL:0"], 'ipv4+ipv6', _('IPv4 + IPv6'))?>
</select>
:help127
> Select which protocol(s) are used. By default IPv4 only is used.<br>
> When both IPv4 and IPv6 is selected, each protocol can be configured independently.
:end
:eth_network_protocol_help:
<div markdown="1" class="ipv4-ethX-0" style="display:none">
_(IPv4 address assignment)_:
@@ -239,13 +183,7 @@ _(IPv4 address assignment)_:
<?=mk_option($ethX["USE_DHCP:0"], '', _('None'))?>
</select>
:help128
> The following settings are possible:
>
> *Automatic* - the server will attempt to obtain a IPv4 address from the local DHCP server<br>
> *Static* - the IPv4 address is manually set for this interface<br>
> *None* - no IPv4 address is assigned to the interface
:end
:eth_ipv4_address_assignment_help:
<div markdown="1" class="more-ipv4-ethX-0" style="display:none">
_(IPv4 address)_:
@@ -268,17 +206,13 @@ _(IPv4 address)_:
<?=mk_option($ethX["NETMASK:0"], "255.255.255.252", "30")?>
</select>
:help129
> Greyed out when using automatic IP assignment. Otherwise specify here the IPv4 address and mask of the interface.
:end
:eth_ipv4_address_help:
_(IPv4 default gateway)_:
: <input type="text" name="GATEWAY:0" maxlength="15" value="<?=$ethX["GATEWAY:0"]?>" class="narrow" pattern="<?=$validIP4?>" title="_(IPv4 address A.B.C.D)_">
<input type="text" name="METRIC:0" min="0" max="9999" value="<?=$ethX["METRIC:0"]?>" class="slim"><i class="fa fa-sort-numeric-asc"></i> *_(optional metric (lowest is preferred, 0 is no default gateway))_*
:help130
> Greyed out when using automatic IP assignment. Otherwise specify here the IPv4 address of your router.
:end
:eth_ipv4_default_gateway_help:
</div>
</div>
@@ -290,29 +224,19 @@ _(IPv6 address assignment)_:
<?=mk_option($ethX["USE_DHCP6:0"], '', _('None'))?>
</select>
:help135
> The following settings are possible:
>
> *Automatic* - the server will attempt to obtain a IPv6 address from the local DHCP server or Router Advertisement (RA)<br>
> *Static* - the IPv6 address is manually set for this interface<br>
> *None* - no IPv6 address is assigned to the interface
:end
:eth_ipv6_address_assignment_help:
<div markdown="1" class="more-ipv6-ethX-0" style="display:none">
_(IPv6 address)_:
: <input type="text" name="IPADDR6:0" maxlength="39" value="<?=$ethX["IPADDR6:0"]?>" pattern="<?=$validIP6?>" title="_(IPv6 address nnnn:xxxx::yyyy)_">/<input type="number" name="NETMASK6:0" min="1" max="128" value="<?=$ethX["NETMASK6:0"]?>" class="slim">
:help136
> Greyed out when using automatic IP assignment. Otherwise specify here the IPv6 address and prefix of the interface.
:end
:eth_ipv6_address_help:
_(IPv6 default gateway)_:
: <input type="text" name="GATEWAY6:0" maxlength="39" value="<?=$ethX["GATEWAY6:0"]?>" pattern="<?=$validIP6?>" title="_(IPv6 address nnnn:xxxx::yyyy)_">
<input type="text" name="METRIC6:0" min="0" max="9999" value="<?=$ethX["METRIC6:0"]?>" class="slim"><i class="fa fa-sort-numeric-asc"></i> *_(optional metric (lowest is preferred, 0 is no default gateway))_*
:help137
> Greyed out when using automatic IP assignment. Otherwise specify here the IPv6 address of your router.
:end
:eth_ipv6_default_gateway_help:
_(IPv6 privacy extensions)_:
: <select name="PRIVACY6:0">
@@ -320,19 +244,14 @@ _(IPv6 privacy extensions)_:
<?=mk_option($ethX["PRIVACY6:0"], "2", _("Enabled"))?>
</select>
:help138
> Enable or disable the generation of a random IPv6 interface identifier according to RFC4941. This is similar to the temporary IPv6 address generation on Windows machines.
:end
:eth_ipv6_privacy_extensions_help:
</div>
</div>
_(Desired MTU)_:
: <input type="number" name="MTU" min="68" max="9198" value="<?=$locked?$ethX['MTU']:$ethX['MTU']?>" class="narrow" placeholder="1500">
:help143
> This is the MTU size to use on the physical Ethernet interface.
> If left blank, the MTU will automatically be determined (by default 1500 bytes).
:end
:eth_desired_mtu_help:
_(Enable VLANs)_:
: <select name="TYPE" onchange="checkNetworkAccess(this.form,'ethX')">
@@ -340,12 +259,7 @@ _(Enable VLANs)_:
<?=mk_option($ethX['TYPE'], 'trunk', _('Yes'))?>
</select>
:help144
> By default no VLANs are configured.<br>
> Enabling VLANs extends the number of logical connections over the same physical connection.
>
> Note: your router and switch must support VLANs too when this feature is used.
:end
:eth_enable_vlans_help:
</div>
</div>
@@ -356,18 +270,14 @@ _(Interface description)_:
: <span class="status vshift"><i id="tag-ethX-<?=$i?>" class="fa fa-fw fa-chevron-down" style="cursor:pointer" onclick="viewToggle('ethX','<?=$i?>')"></i></span>
<input type="text" name="DESCRIPTION:<?=$i?>" maxlength="80" value="<?=htmlspecialchars($ethX["DESCRIPTION:$i"])?>" onchange="exitCode(this.form,true)">
:help145
> Use this field to give addditional information about the purpose of the connection.
:end
:eth_interface_description_help:
<div markdown="1" id="view-ethX-<?=$i?>" style="display:none">
_(VLAN number)_:
: <input type="number" name="VLANID:<?=$i?>" min="1" max="4095" value="<?=$ethX["VLANID:$i"]?>" class="narrow gap" required>
<?if (!$service):?><input type="button" class="form" value="_(Delete VLAN)_" onclick="removeVLAN($('#index-ethX-<?=$i?>'))"><?endif;?>
:help146
> Give each VLAN a unique identifier. Numbers range from 1 to 4095.
:end
:eth_vlan_number_help:
_(Network protocol)_:
: <select name="PROTOCOL:<?=$i?>" onchange="selectProtocol(this.form,'ethX',<?=$i?>)">
@@ -376,10 +286,7 @@ _(Network protocol)_:
<?=mk_option($ethX["PROTOCOL:$i"], 'ipv4+ipv6', _('IPv4 + IPv6'))?>
</select>
:help147
> Select which protocol(s) are used. By default IPv4 only is used.<br>
> When both IPv4 and IPv6 is selected, each protocol can be configured independently.
:end
:eth_network_protocol_help:
<div markdown="1" class="ipv4-ethX-<?=$i?>" style="display:none">
_(IPv4 address assignment)_:
@@ -389,13 +296,7 @@ _(IPv4 address assignment)_:
<?=mk_option($ethX["USE_DHCP:$i"], '', _('None'))?>
</select>
:help148
> The following settings are possible:
>
> *Automatic* - the server will attempt to obtain a IPv4 address from the local DHCP server<br>
> *Static* - the IPv4 address is manually set for this interface<br>
> *None* - no IPv4 address is assigned to the interface
:end
:eth_ipv4_address_assignment_help:
<div markdown="1" class="more-ipv4-ethX-<?=$i?>" style="display:none">
_(IPv4 address)_:
@@ -418,17 +319,13 @@ _(IPv4 address)_:
<?=mk_option($ethX["NETMASK:$i"], "255.255.255.252", "30")?>
</select>
:help149
> Greyed out when using automatic IP assignment or NONE assignment. Otherwise specify here the IPv4 address and mask of the interface.
:end
:eth_ipv4_address_help:
_(IPv4 default gateway)_:
: <input type="text" name="GATEWAY:<?=$i?>" maxlength="15" value="<?=$ethX["GATEWAY:$i"]?>" class="narrow" pattern="<?=$validIP4?>" title="_(IPv4 address A.B.C.D)_">
<input type="text" name="METRIC:<?=$i?>" min="0" max="9999" value="<?=$ethX["METRIC:$i"]?>" class="slim"><i class="fa fa-sort-numeric-asc"></i> *_(optional metric (lowest is preferred, 0 is no default gateway))_*
:help150
> Greyed out when using automatic IP assignment. Otherwise specify here the IPv4 address of your router.
:end
:eth_ipv4_default_gateway_help:
</div>
</div>
@@ -440,29 +337,19 @@ _(IPv6 address assignment)_:
<?=mk_option($ethX["USE_DHCP6:$i"], '', _('None'))?>
</select>
:help151
> The following settings are possible:
>
> *Automatic* - the server will attempt to obtain a IPv6 address from the local DHCP server or Router Advertisement (RA)<br>
> *Static* - the IPv6 address is manually set for this interface<br>
> *None* - no IPv6 address is assigned to the interface
:end
:eth_ipv6_address_assignment_help:
<div markdown="1" class="more-ipv6-ethX-<?=$i?>" style="display:none">
_(IPv6 address)_:
: <input type="text" name="IPADDR6:<?=$i?>" maxlength="39" value="<?=$ethX["IPADDR6:$i"]?>" pattern="<?=$validIP6?>" title="_(IPv6 address nnnn:xxxx::yyyy)_">/<input type="number" name="NETMASK6:<?=$i?>" min="1" max="128" value="<?=$ethX["NETMASK6:$i"]?>" class="slim">
:help152
> Greyed out when using automatic IP assignment. Otherwise specify here the IPv6 address and prefix of the interface.
:end
:eth_ipv6_address_help:
_(IPv6 default gateway)_:
: <input type="text" name="GATEWAY6:<?=$i?>" maxlength="39" value="<?=$ethX["GATEWAY6:$i"]?>" pattern="<?=$validIP6?>" title="_(IPv6 address nnnn:xxxx::yyyy)_">
<input type="text" name="METRIC6:<?=$i?>" min="0" max="9999" value="<?=$ethX["METRIC6:$i"]?>" class="slim"><i class="fa fa-sort-numeric-asc"></i> *_(optional metric (lowest is preferred, 0 is no default gateway))_*
:help153
> Greyed out when using automatic IP assignment. Otherwise specify here the IPv6 address of your router.
:end
:eth_ipv6_default_gateway_help:
_(IPv6 privacy extensions)_:
: <select name="PRIVACY6:<?=$i?>">
@@ -470,9 +357,7 @@ _(IPv6 privacy extensions)_:
<?=mk_option($ethX["PRIVACY6:$i"], "2", _("Enabled"))?>
</select>
:help154
> Enable or disable the generation of a random IPv6 interface identifier according to RFC4941. This is similar to the temporary IPv6 address generation on Windows machines.
:end
:eth_ipv6_privacy_extensions_help:
</div>
</div>

View File

@@ -39,30 +39,16 @@ _(FTP server)_:
<?=mk_option($ftp_server, "1", _("Enabled"))?>
</select>
:help69
> Enable or disable the FTP server daemon. By default the FTP server is enabled.
> This setting is not saved, i.e. upon system reboot it will revert to its default setting.
:end
:ftp_server_help:
_(FTP user(s))_:
: <input type="text" name="#arg[2]" size="40" maxlength="80" value="<?=htmlspecialchars($ftp_userlist)?>">
:help70
> Enter the user names (separated by spaces) permitted to access the server using FTP.
> To disallow any user access, clear this setting.
>
> **Note:** do not enter user name `root` since this may cause problems in the future.
:end
:ftp_users_help:
&nbsp;
: <input type="submit" value="_(Apply)_" disabled><input type="button" value="_(Done)_" onclick="done()">
</form>
:help71
> ### Overview
>
> Unraid includes the popular `vsftpd` FTP server. The configuration of `vsftp` is currently very
> simple: **All** user names entered above are permitted to access the server via FTP and will have
> *full read/write/delete access* to the entire server, so use with caution.
:end
:ftp_overview_help:

View File

@@ -65,9 +65,7 @@ _(Flash GUID)_:
<?endif;?>
:help38
> Use *Flash backup* to create a single zip file of the current contents of the flash device and store it locally on your computer.
:end
:flash_backup_help:
&nbsp;
: <input type="button" value="_(Flash backup)_" onclick="backup()"><input type="button" value="_(Done)_" onclick="done()">

View File

@@ -26,27 +26,17 @@ $name_warn = preg_match('/'.$name_regex.'/', $var['NAME']) ? 'none' : 'block';
_(Server name)_:
: <input type="text" name="NAME" id="NAME" maxlength="15" pattern="<?=$name_regex?>" value="<?=htmlspecialchars($var['NAME'])?>" title="_(Only alphanumeric characters)_ (&quot;A-Z&quot;, &quot;a-z&quot;, and &quot;0-9&quot;), dashes (&quot;-&quot;), and dots (&quot;.&quot;); _(and, the first and last characters must be alphanumeric)_" <?=$disabled?> required> <span id="name_warning" style="display:<?=$name_warn?>"><i class="fa fa-warning icon warning"></i> _(Not compatible with NetBIOS)_</span>
:help55
> The network identity of your server. Also known as *hostname* or *short hostname*. Windows networking
> refers to this as the *NetBIOS name* and must be 15 characters or less in length.
> Use only alphanumeric characters (that is, "A-Z", "a-z", and "0-9"), dashes ("-"), and dots (".");
> and, the first and last characters must be alphanumeric.
:end
:id_server_name_help:
_(Description)_:
: <input type="text" name="COMMENT" value="<?=htmlspecialchars($var['COMMENT'])?>" <?=$disabled?>>
:help56
> This is a text field that is seen next to a server when listed within Network or Network Neighborhood
> (Windows), or Finder (macOS).
:end
:id_description_help:
_(Model)_:
: <input type="text" name="SYS_MODEL" value="<?=htmlspecialchars($var['SYS_MODEL'])?>" <?=$disabled?>>
:help57
> This is the server model number.
:end
:id_model_help:
&nbsp;
: <input type="submit" name="changeNames" value="_(Apply)_" disabled><input type="button" value="_(Done)_" onclick="done()"><?if ($disabled):?>*_(Array must be **Stopped** to change)_*<?endif;?>

View File

@@ -139,9 +139,7 @@ _(Start page)_:
<?foreach ($tasks as $task) echo mk_option($var['START_PAGE']??'Main', $task, $task);?>
</select>
:help58
> Select the page which is opened first when entering the GUI. By default the *Main* page is selected.
:end
:mgmt_start_page_help:
<!--
Restrict access:
@@ -161,17 +159,12 @@ _(Use TELNET)_:
<?=mk_option($var['USE_TELNET'], "yes", _('Yes'))?>
</select>
:help59
> By default TELNET access is enabled. TELNET is an insecure type of CLI access however,
> and it is highly recommended to use SSH access instead and disable TELNET access.
:end
:mgmt_use_telnet_help:
_(TELNET port)_:
: <input type="number" name="PORTTELNET" class="narrow" min="1" max="65535" value="<?=htmlspecialchars($var['PORTTELNET']??23)?>">
:help60
> Enter the TELNET port, default port is 23.
:end
:mgmt_telnet_port_help:
_(Use SSH)_:
: <select name="USE_SSH" onchange="updateSSH(this.form)">
@@ -179,17 +172,12 @@ _(Use SSH)_:
<?=mk_option($var['USE_SSH'], "yes", _('Yes'))?>
</select>
:help61
> SSH is enabled by default and offers a secure way of CLI access. Upon system startup SSH keys are automatically generated
> if not yet existing, and stored on the flash device in the folder */config/ssh*.
:end
:mgmt_use_ssh_help:
_(SSH port)_:
: <input type="number" name="PORTSSH" class="narrow" min="1" max="65535" value="<?=htmlspecialchars($var['PORTSSH']??22)?>">
:help62
> Enter the SSH port, default port is 22.
:end
:mgmt_ssh_port_help:
_(Use UPnP)_:
: <select name="USE_UPNP">
@@ -197,9 +185,7 @@ _(Use UPnP)_:
<?=mk_option($var['USE_UPNP'], "no", _('No'))?>
</select>
:help63
> Enable (default) or disable the UPnP function on the server. This function allows automatic forwarding of ports on the router, only applicable when UPnP is enabled on the router itself.
:end
:mgmt_use_upnp_help:
_(Use SSL/TLS)_:
: <select name="USE_SSL" onchange="updateSSL(this.form)">
@@ -208,70 +194,22 @@ _(Use SSL/TLS)_:
<?=mk_option($var['USE_SSL'], "yes", _('Yes'))?>
</select>
:help64
> Determines how the webGUI responds to HTTP and/or HTTPS protocol.
>
> Select **No** to disable HTTPS
>
> Select **Yes** to enable HTTPS and redirect HTTP to HTTPS. If a Let's Encrypt SSL certificate has not
> been provisioned, then an automatically generated self-signed SSL certificate will be used.
>
> Select **Auto** if you are using or plan to use a Let's Encrypt SSL certificate provisioned
> by Lime Technology. Before the certificate is provisioned, the webGUI remains
> in http-mode. After provisioning, the webGUI automatically switches to https-mode. In addition
> two background processes are enabled:
>
> - *updatedns* - This starts 30 seconds after server reboot has completed and contacts the Lime Technology
> DNS service to register the servers local IP address. Thereafter it wakes up every 10 minutes in case
> the local IP address has changed again.
>
> - *renewcert* - This starts 60 seconds after server reboot has completed and contacts the Lime Technology
> certificate renewal service to determine if your Let's Encrypt SSL certificate needs to be renewed.
> Thereafter it wakes up every 24 hours. If within 30 days of expiration, a new certificate is automatically
> provisioned and downloaded to your server.
>
> Note: After provisioning a Let's Encrypt SSL certificate you may turn off the *updatedns* and *newcert*
> background processes by changing this field to **Yes**.
>
> **nginx certificate handling details**
>
> The nginx startup script looks for a SSL certificate on the USB boot flash in this order:<br>
> `config/ssl/certs/certificate_bundle.pem`<br>
> `config/ssl/certs/<server-name>_unraid_bundle.pem`
>
> If neither file exists, a self-signed SSL certificate is automatically created and stored in<br>
> `config/ssl/certs/<server-name>_unraid_bundle.pem`<br>
>
> Provisioning a Let's Encrypt certificate writes the certificate to<br>
> `config/ssl/certs/certificate_bundle.pem`<br>
>
> **nginx stapling support**
>
> Whether nginx enables OCSP Staping is determined by which certificate is in use:<br>
> `config/ssl/certs/certificate_bundle.pem` => Yes<br>
> `config/ssl/certs/<server-name>_unraid_bundle.pem` => No
:end
:mgmt_use_ssl_tls_help:
_(HTTP port)_:
: <input type="number" name="PORT" class="narrow" min="1" max="65535" value="<?=htmlspecialchars($var['PORT']??80)?>">
:help65
> Enter the HTTP port, default port is 80.
:end
:mgmt_http_port_help:
_(HTTPS port)_:
: <input type="number" name="PORTSSL" class="narrow" min="1" max="65535" value="<?=htmlspecialchars($var['PORTSSL']??443)?>">
:help66
> Enter the HTTPS port, default port is 443.
:end
:mgmt_https_port_help:
_(Local TLD)_:
: <input type="text" name="LOCAL_TLD" class="narrow" value="<?=htmlspecialchars($var['LOCAL_TLD'])?>">
:help67
> Enter your local Top Level Domain. May be blank.
:end
:mgmt_local_tld_help:
&nbsp;
: <input type="button" value="_(Apply)_" onclick="checkPorts(this.form)" disabled><input type="button" value="_(Done)_" onclick="done()">
@@ -293,46 +231,6 @@ _(Certificate expiration)_:
&nbsp;
: <button type="button" onclick="provisionSSL(this)" <?=$disabled_provision?>><?=$provisionlabel?></button><button type="button" onclick="updateDNS(this)" <?=$disabled_updatedns?>>_(Update DNS)_</button>
:help68
> **Provision** may be used to allocate a *free* SSL Certficiate from [Let's Encrypt](https://letsencrypt.org/) and
> then upload to your server. Note: We **highly** recommend using a static IP address in this case.
> **Update DNS** may be used to manually initiate updating the DNS A-record of your server FQDN on unraid.net. Note
> that DNS propagation change could take anywhere from 1 minute to several hours (we set TTL to 60 seconds).
> Note: **Provision** may fail if your router or upstream DNS server has
> [DNS rebinding protection](https://en.wikipedia.org/wiki/DNS_rebinding) enabled. DNS rebinding
> protection prevents DNS from resolving a private IP network range. DNS rebinding protection is meant as
> a security feature on a local LAN which includes legacy devices with buggy/insecure "web" interfaces.
> One source of DNS rebinding protection could be your ISP DNS server. In this case the problem may be solved by
> switching to a different DNS server such as Google's public DNS.
> More commonly, DNS rebinding protection could be enabled in your router. Most consumer routers do not implement DNS
> rebinding protection; but, if they do, a configuration setting should be available to turn it off.
> Higher end routers usually do enable DNS rebinding protection however. Typically there are ways of turning it off
> entirely or selectively based on domain. Examples:
> **DD-WRT:** If you are using "dnsmasq" with DNS rebinding protection enabled, you can add this line to your router
> configuration file:
> `rebind-domain-ok=/unraid.net/`
> **pfSense:** If you are using pfSense internal DNS resolver service, you can add these Custom Option lines:
> `server:`<br>
> `private-domain: "unraid.net"`
> **Ubiquiti USG router:** you can add this configuration line:
> `set service dns forwarding options rebind-domain-ok=/unraid.net/`
> **OpenDNS:** Go to Settings -> Security and *remove* the checkbox next to
> "Suspicious Responses - Block internal IP addresses". It is an all-or-nothing setting.
> When all else fails, you can create an entry in your PC's *hosts* file to override external DNS and
> directly resolve your servers unraid.net FQDN to its local IP address.
:end
:mgmt_certificate_expiration_help:
</form>

View File

@@ -66,11 +66,7 @@ _(Mover schedule)_:
<?endfor;?>
</select>
:help171
> Choose a mover schedule ranging from hourly, daily, weekly and monthly.
>
> The interval determines how fast the mover will activated, it runs in the background.
:end
:mover_schedule_help:
_(Day of the week)_:
: <select name="day">
@@ -80,9 +76,7 @@ _(Day of the week)_:
<?=mk_option($cron[4], "*", "--------", "disabled")?>
</select>
:help172
> Choose a day when the weekly schedule is selected. Otherwise disabled.
:end
:mover_day_of_the_week_help:
_(Day of the month)_:
: <select name="dotm">
@@ -92,9 +86,7 @@ _(Day of the month)_:
<?=mk_option($cron[2], "*", "--------", "disabled")?>
</select>
:help173
> Choose a date when the monthly schedule is selected. Otherwise disabled.
:end
:mover_day_of_the_month_help:
_(Time of the day)_:
: <span id="H1"<?if ($move==0):?> style="display:none"<?endif;?>><select name="hour1" class="narrow">
@@ -116,11 +108,7 @@ _(Time of the day)_:
<?=mk_option($cron[1], "*/8", _("Every 8 hours"))?>
</select></span>
:help174
> When an hourly schedule is selected this will set the interval in hours. An interval always starts on the whole hour (minute 0).
>
> For the other schedules choose here the time of the day the mover should start.
:end
:mover_time_of_the_day_help:
_(Mover logging)_:
: <select name="shareMoverLogging">
@@ -128,9 +116,7 @@ _(Mover logging)_:
<?=mk_option($var['shareMoverLogging'], "no", _("Disabled"))?>
</select>
:help175
> Write mover messages to the syslog file.
:end
:mover_logging_help:
<?endif;?>
&nbsp;

View File

@@ -30,37 +30,12 @@ _(Enable NFS)_:
<?=mk_option($var['shareNFSEnabled'], "yes", _('Yes'));?>
</select>
:help83
> Select 'Yes' to enable the NFS protocol.
:end
:nfs_enable_help:
_(Tunable (fuse_remember))_:
: <input type="text" name="fuse_remember" maxlength="10" value="<?=$var['fuse_remember']?>" class="narrow"><?=_($var['fuse_remember_status'])?>
:help84
> When NFS is enabled, this Tunable may be used to alleviate or solve instances of "NFS Stale File Handles"
> you might encounter with your NFS client.
>
> In essence, (fuse_remember) tells an internal subsystem (named "fuse") how long to "remember" or "cache"
> file and directory information associated with user shares. When an NFS client attempts to access a file
> (or directory) on the server, and that file (or directory) name is not cached, then you could encounter
> "stale file handle".
>
> The numeric value of this tunable is the number of seconds to cache file/directory name entries,
> where the default value of 330 indicates 5 1/2 minutes. There are two special values you may also set
> this to:
>
> * 0 which means, do not cache file/directory names at all, and
> * -1 which means cache file/directory names forever (or until array is stopped)
>
> A value of 0 would be appropriate if you are enabling NFS but only plan to use it for disk shares,
> not user shares.
>
> A value of -1 would be appropriate if no other timeout seems to solve the "stale file handle" on
> your client. Be aware that setting a value of -1 will cause the memory footprint to grow by approximatel
> 108 bytes per file/directory name cached. Depending how much RAM is installed in your server and how many
> files/directories you access via NFS this may or may not lead to out-of-memory conditions.
:end
:nfs_tunable_fuse_remember_help:
&nbsp;
: <input type="submit" name="changeShare" value="_(Apply)_" disabled><input type="button" value="_(Done)_" onclick="done()">

View File

@@ -102,15 +102,7 @@ _(Interface)_ <?=$eth?>:
: <input type="submit" value="_(Apply)_" disabled><input type="button" value="_(Done)_" onclick="done()">
</form>
:help
> The interface assignment rules can be changed here and might be necessary to set the preferred interface for managing Unraid - *use with care, usually there is no need to change*.
>
> **eth0** is the main interface used to manage the Unraid system. The other interfaces are optional and may be used as desired.
> Every interface must be uniquely identified by its MAC (hardware) address.
>
> The interface assignment is stored on the flash device under */config/network-rules.cfg*. This file can be viewed with any editor, but it is recommended to make changes via the webGUI only.<br>
> Deleting the file *network-rules.cfg* from the flash device will restore automatic interface assignment after a system reboot.
:end
:eth_network_rules_help:
<?if (file_exists('/tmp/network-rules.tmp')):?>
<br><span class="error" style="text-align:center;padding:12px 0">_(Please **Reboot** system to make new rules active)_</span>

View File

@@ -48,7 +48,7 @@ $(function() {
});
</script>
:plug4
:newconfig_plug:
This is a utility to reset the array disk configuration so that all disks appear as "New" disks, as
if it were a fresh new server.

View File

@@ -56,7 +56,7 @@ $(function() {
});
</script>
:plug5
:newperms_1_plug:
This is a mandatory one-time action to be taken after upgrading from a pre-5.0 Unraid server release to Unraid v5 or a later release.
Select **ALL DISKS** when performing this one-time action.
@@ -69,7 +69,7 @@ as follows:
:end
<pre class="pre">
:plug6
:newperms_2_plug:
For directories:
drwxrwxrwx
@@ -81,7 +81,7 @@ For readonly files:
:end
</pre>
:plug7
:newperms_3_plug:
Clicking **Start** will open another window and start the background process.
Closing the window before completion will terminate the background process - so don't do that. This process can take a long time if you have many files.

View File

@@ -121,13 +121,7 @@ _(Notifications display)_:
<?=mk_option($notify['display'], "1", _("Summarized"))?>
</select>
:help176
> In *Detailed* view all notifications will be displayed on screen as soon as they arrive.<br>
> Notifications can be acknowledged individually or all in once.
>
> In *Summarized* view notifications will be counted only and the number of unread notifications is shown in the menu header per category.<br>
> Click on the counters to either acknowledge or view the unread notifications.
:end
:notifications_display_help:
_(Date format)_:
: <select name="date" class="a">
@@ -136,9 +130,7 @@ _(Date format)_:
<?=mk_option($notify['date'], "Y-m-d", _("YYYY-MM-DD"))?>
</select>
:help177
> Select the desired date format which is used in the notifications archive. Recommended is YYYY-MM-DD, which makes the date/time column sortable in a sensible way.
:end
:notifications_date_format_help:
_(Time format)_:
: <select name="time" class="a">
@@ -146,9 +138,7 @@ _(Time format)_:
<?=mk_option($notify['time'], "H:i", _("24 hours"))?>
</select>
:help178
> Select the desired time format which is used in the notifications archive. Recommended is 24 hours, which makes the date/time column sortable in a sensible way.
:end
:notifications_time_format_help:
_(Display position)_:
: <select name="position" class="a">
@@ -159,9 +149,7 @@ _(Display position)_:
<?=mk_option($notify['position'], "center", _("center"))?>
</select>
:help179
> Choose the position of where notifications appear on screen. Multiple notifications are stacked, bottom-to-top or top-to-bottom depending on the selected placement.
:end
:notifications_display_position_help:
_(Store notifications to flash)_:
: <select name="path" class="a">
@@ -169,10 +157,7 @@ _(Store notifications to flash)_:
<?=mk_option($notify['path'], "/boot/config/plugins/dynamix/notifications", _("Yes"))?>
</select>
:help180
> By default notifications are stored on RAM disk, which will get lost upon system reboot.
> Notifications may be stored permanently on the flash drive under folder '/boot/config/plugins/dynamix' instead.
:end
:notifications_store_flash_help:
_(System notifications)_:
: <select name="system" class="a" onchange="prepareSystem(this.selectedIndex)">
@@ -180,10 +165,7 @@ _(System notifications)_:
<?=mk_option($notify['system'], "*/1 * * * *", _("Enabled"))?>
</select>
:help181
> By default the notifications system is disabled. Enable it here to start receiving notifications.
> The following sections give more options about which and what type of notifications will be sent.
:end
:notifications_system_help:
_(Unraid OS update notification)_:
: <select name="unraidos" class="a" onchange="prepareUnraid(this.value)">
@@ -195,10 +177,7 @@ _(Unraid OS update notification)_:
<?=mk_option($notify['unraidos'], "11 0 1 * *", _("Check once a month"))?>
</select>
:help182
> Start a periodic verification and notify the user when a new version of the Unraid OS system is detected.
> Use the checkboxes below to select how notifications need to be given; by browser, by email and/or by custom agent.
:end
:notifications_os_update_help:
_(Plugins update notification)_:
: <select name="version" class="a" onchange="preparePlugin(this.value)">
@@ -210,10 +189,7 @@ _(Plugins update notification)_:
<?=mk_option($notify['version'], "10 0 1 * *", _("Check once a month"))?>
</select>
:help183
> Start a periodic verification and notify the user when a new version of one or more of the installed plugins is detected.
> Use the checkboxes below to select how notifications need to be given; by browser, by email and/or by custom agent.
:end
:notifications_plugins_update_help:
_(Docker update notification)_:
: <select name="docker_update" class="a" onchange="prepareDocker(this.value)">
@@ -225,10 +201,7 @@ _(Docker update notification)_:
<?=mk_option($notify['docker_update'], "10 0 1 * *", _("Check once a month"))?>
</select>
:help184
> Start a periodic verification and notify the user when a new version of one or more of the installed dockers is detected.
> Use the checkboxes below to select how notifications need to be given; by browser, by email and/or by custom agent.
:end
:notifications_docker_update_help:
_(Language update notification)_:
: <select name="language_update" class="a" onchange="prepareLanguage(this.value)">
@@ -253,9 +226,7 @@ _(Array status notification)_:
<?=mk_option($notify['status'], "20 0 1 * *", _("Send once a month"))?>
</select>
:help185
> Start a periodic array health check (preventive maintenance) and notify the user the result of this check.
:end
:notifications_array_status_help:
<span id="unraidTitle" class="unraid" style="display:none">&nbsp;</span>
: <span class="unraid" style="display:none"><span class="a">_(Unraid OS update)_</span>
@@ -287,10 +258,7 @@ _(Array status notification)_:
<input type="checkbox" name="report2"<?=($notify['report'] & 2)==2 ? ' checked' : ''?>>_(Email)_ &nbsp;
<input type="checkbox" name="report3"<?=($notify['report'] & 4)==4 ? ' checked' : ''?>>_(Agents)_ &nbsp;</span>
:help186
> Use the checkboxes above to select what and how notifications need to be given; by browser, by email and/or by a service.<br>
> <b>Tip:</b> you can use custom notification agents; just add them to "/boot/config/plugins/dynamix/notification/agents" directory and check 'Agents'.
:end
:notifications_agent_selection_help:
_(Notification entity)_:
: <span class="a">_(Notices)_</span>
@@ -310,15 +278,7 @@ _(Notification entity)_:
<input type="checkbox" class="checkbox" name="alert2"<?=($notify['alert'] & 2)==2 ? " checked $disabled" : $disabled?>>_(Email)_ &nbsp;
<input type="checkbox" class="checkbox" name="alert3"<?=($notify['alert'] & 4)==4 ? " checked $disabled" : $disabled?>>_(Agents)_ &nbsp;
:help187
> Notifications are classified as:
>
> *notice* - these are informative notifications and do not indicate a problem situation, e.g. a new version is available<br>
> *warning* - these are attentive notifications and may indicate future problems, e.g. a hard disk is hotter than usual<br>
> *alert* - these are serious notifications and require immediate attention, e.g. a failing hard disk<br>
>
> Choose for each classification how you want to be notified.
:end
:notifications_classification_help:
<input type="submit" name="#default" value="_(Default)_">
: <input type="submit" name="#apply" value="_(Apply)_" disabled><input type="button" value="_(Done)_" onclick="done()"></td>

View File

@@ -45,7 +45,4 @@ endforeach;
</tbody>
</table>
:help37
> These are devices installed in your server but not assigned to either the parity-protected
> array or the cache disk/pool.
:end
:open_devices_help:

View File

@@ -96,9 +96,7 @@ _(Scheduled parity check)_:
<?endfor;?>
</select>
:help165
> By default no parity check is scheduled. Select here the desired schedule. This can be one of the preset schedules for daily, weekly, monthly, yearly or a custom schedule.
:end
:parity_check_scheduled_help:
_(Day of the week)_:
<?if ($parity['mode']==2):?>
@@ -117,9 +115,7 @@ _(Day of the week)_:
<?endif;?>
</select>
:help166
> When a **weekly** or **custom** schedule is selected then choose here the preferred *day of the week*, in the other schedules this setting is not used and unavailable.
:end
:parity_day_of_the_week_help:
<?if ($parity['mode']<5):?>
_(Day of the month)_:
@@ -147,10 +143,7 @@ _(Week of the month)_:
<?endif;?>
</select>
:help167
> When a **monthly** or **yearly** schedule is selected then choose here the preferred *day of the month*.
> When a **custom** schedule is selected then choose here the preferred *week of the month*, in the other schedules this setting is not used and unavailable.
:end
:parity_week_of_the_month_help:
_(Time of the day)_:
: <select name="hour">
@@ -164,9 +157,7 @@ _(Time of the day)_:
<?endif;?>
</select>
:help168
> Choose the desired *time of the day* to start the schedule. Time granularity is given in half hour periods.
:end
:parity_time_of_the_day_help:
_(Month of the year)_:
<?if ($parity['mode']>=4):?>
@@ -187,9 +178,7 @@ _(Month of the year)_:
<?endif;?>
</select>
:help169
> When a **yearly** or **custom** schedule is selected then choose here the preferred *month of the year*, in the other schedules this setting is not used and unavailable.
:end
:parity_month_of_the_year_help:
_(Write corrections to parity disk)_:
: <select name="write">
@@ -197,9 +186,7 @@ _(Write corrections to parity disk)_:
<?=mk_option($parity['write'], "NOCORRECT", _("No"))?>
</select>
:help170
> Choose here whether any parity errors found during the check, need to be corrected on the parity disk or not.
:end
:parity_write_corrections_help:
&nbsp;
: <input type="submit" name="#apply" value="_(Apply)_" disabled><input type="button" value="_(Done)_" onclick="done()"></td>

View File

@@ -37,7 +37,7 @@ div.remark{padding:0 10px;text-align:justify;}
<input type="hidden" name="deviceCount" value="<?=$var['deviceCount']?>">
<span class="thanks">_(Thank you for trying Unraid OS)_!</span>
<div markdown="1" class="remark">
:plug8
:registration_1_plug:
Your server will not be usable until you purchase a Registration key or install a free 30-day *Trial* key. A *Trial*
key provides all the functionality of a *Pro* Registration key.
@@ -48,7 +48,7 @@ Note: USB memory card readers are generally **not** supported because most do no
:end
<span class="red-text">_(Important)_:</span>
:plug9
:registration_2_plug:
+ Please make sure your [server time](DateTime) is accurate to within 5 minutes.
+ Please make sure there is a [DNS server](NetworkSettings) specified.
:end
@@ -75,7 +75,7 @@ _(Flash GUID)_:
<input type="hidden" name="deviceCount" value="<?=$var['deviceCount']?>">
<span class="thanks">_(Thank you for trying Unraid OS)_!</span>
<div markdown="1" class="remark">
:plug10
:registration_3_plug:
Your *Trial* key includes all the functionality and device support of a *Pro* Registration key.
After your *Trial* key has reached expiration, your server **still functions normally** until the next time you **Stop** the array.
@@ -167,7 +167,7 @@ _(Flash GUID)_:
<span class="thanks">_(Thank you for trying Unraid OS)_!</span>
<div markdown="1" class="remark">
<span class='red-text'>_(Your *Trial* key has expired)_.</span>
:plug11
:registration_4_plug:
To continue using Unraid OS you may purchase a Registration key. Alternately, you may request a *Trial* extension key.
Most *Trial* extension requests are processed immediately but please allow up to one business day to receive your *Trial* extension key.
@@ -195,7 +195,7 @@ _(Flash GUID)_:
<input type="hidden" name="deviceCount" value="<?=$var['deviceCount']?>">
<span class='thanks red'>_(Invalid *Trial* Installation)_</span>
<div markdown="1" class="remark">
:plug12
:registration_5_plug:
It is not possible to use a *Trial* key with an existing Unraid OS installation.
You may purchase a Registration key corresponding to this USB Flash device to continue using this installation.
@@ -313,7 +313,7 @@ _(Flash GUID)_:
<input type="hidden" name="deviceCount" value="<?=$var['deviceCount']?>">
<span class='thanks red'>_(Missing Key File)_</span>
<div markdown="1" class="remark">
:plug13
:registration_6_plug:
It appears that your Registration key file is corrupted or missing. The key file should be located in the
[config](/Registration/Browse?dir&#61;/boot/config) directory on your USB Flash boot device.
@@ -345,7 +345,7 @@ _(Flash GUID)_:
<span class='thanks red'>_(The registered GUID does not match the USB Flash boot device GUID)_</span>
<?if (strstr($var['regTy'], "Trial")):?>
<div markdown="1" class="remark">
:plug14
:registration_7_plug:
*Trial* installations are only valid with the originally registered USB Flash device.
To continue using this installation with this USB Flash device, you may purchase a Registration key.
@@ -353,7 +353,7 @@ To continue using this installation with this USB Flash device, you may purchase
</div>
<?else:?>
<div markdown="1" class="remark">
:plug15
:registration_8_plug:
The Registration key file does not correspond to the USB Flash boot device.
Please copy the correct key file to the [config](/Registration/Browse?dir&#61;/boot/config) directory
on your USB Flash boot device. If you do not have a backup copy of your key file, [Contact Support](https://lime-technology.com/contact).
@@ -416,7 +416,7 @@ _(Replaceable)_:
<?if (strstr($var['regTy'], "blacklisted")):?>
<span class='thanks red'>_(Blacklisted USB Flash GUID)_</span>
<div markdown="1" class="remark">
:plug16
:registration_9_plug:
This USB Flash boot device has been *blacklisted*. This can occur as a result of transfering your Registration key to
a replacement USB Flash device, and you are currently booted from your old USB Flash device.

View File

@@ -93,14 +93,7 @@ _(Enter route + gateway + metric)_:
<datalist id="device"><?foreach ($list as $port):?><?echo "<option value='$port'>"?><?endforeach;?></datalist>
<input type="text" name="metric" min="1" max="9999" value="" class="trim" placeholder="1"><i class="fa fa-sort-numeric-asc"></i> *_(optional metric (lowest is preferred))_*
:help
> Enter a valid IPv4 route in the format *nnn.nnn.nnn.nnn/xx*, e.g. *192.168.1.0/24*<br>
> or enter a valid IPv6 route in the format *nnnn:nnnn:nnnn::nnnn/xxx*, e.g. *fe80::3ad8:2fff:fe25:9709/64*
>
> Select the gateway from the dropdown list or enter a valid IPv4/IPv6 address as gateway value.
>
> The metric value is optional, it defaults to 1. Use it to select the prefered gateway when more than one entry of the same route exist.
:end
:eth_routing_table_help:
&nbsp;
: <input type="submit" name="task" value="_(Add Route)_"><input type="button" value="_(Done)_" class="lock" onclick="done()">

View File

@@ -15,8 +15,7 @@ Tag="share-alt-square"
* all copies or substantial portions of the Software.
*/
?>
> Use this page to make changes to your `smb-extra.conf` file. Samba will need
> to be restarted in order for changes to take effect.
:smb_extra_conf_help:
<?
$file = "/boot/config/smb-extra.conf";
@@ -39,9 +38,6 @@ _(Samba extra configuration)_:
&nbsp;
: <input type="submit" value="_(Apply)_" disabled><input type="button" value="_(Done)_" onclick="done()"><?if ($var['fsState']=="Started"):?>*_(Array must be **Stopped** to change)_*<?endif;?>
:help78
> Click the **Apply** button to commit the current edits. Click **Reset** to
> undo any changes you make (before Saving). Click **Done** to exit this page.
:end
:smb_extra_button_help:
</form>

View File

@@ -19,9 +19,7 @@ Cond="($var['shareSMBEnabled']=='yes')"
_(Workgroup)_:
: <input type="text" name="WORKGROUP" maxlength="40" value="<?=htmlspecialchars($var['WORKGROUP'])?>" class="narrow" <?if ($var['fsState']=="Started"):?>disabled<?endif;?>>
:help79
> Enter your local network Workgroup name. Usually this is "WORKGROUP".
:end
:smb_workgroup_help:
_(Local master)_:
: <select name="localMaster" <?if ($var['fsState']=="Started"):?>disabled<?endif;?>>
@@ -29,10 +27,7 @@ _(Local master)_:
<?=mk_option($var['localMaster'], "yes", _('Yes'))?>
</select>
:help80
> If set to 'Yes' then the server will fully participate in browser elections, and in the absense
> of other servers, will usually become the local Master Browser.
:end
:smb_local_master_help:
&nbsp;
: <input type="submit" name="changeShare" value="_(Apply)_" disabled><input type="button" value="_(Done)_" onclick="done()"><?if ($var['fsState']=="Started"):?>*_(Array must be **Stopped** to change)_*<?endif;?>

View File

@@ -23,12 +23,7 @@ _(Enable SMB)_:
<?=mk_option($var['shareSMBEnabled'], "ads", _('Yes').' ('._('Active Directory').')')?>
</select>
:help72
> Select 'Yes (Workgroup)' to enable SMB (Windows Networking) protocol support. This
> also enables Windows host discovery.
>
> Select 'Yes (Active Directory)' to enable Active Directory integration.
:end
:smb_enable_help:
_(Hide "dot" files)_:
: <select name="hideDotFiles" <?if ($var['fsState']=="Started"):?>disabled<?endif;?>>
@@ -36,13 +31,7 @@ _(Hide "dot" files)_:
<?=mk_option($var['hideDotFiles'], "yes", _('Yes'))?>
</select>
:help73
> If set to 'Yes' then files starting with a '.' (dot) will appear as *hidden files* and normally
> will not appear in Windows folder lists unless you have "Show hidden files, folders, and drives" enabled
> in Windows Folder Options.
> If set to 'No' then dot files will appear in folder lists the same as any other file.
:end
:smb_hide_files_help:
_(Enhanced macOS interoperability)_:
: <select name="enableFruit" <?if ($var['fsState']=="Started"):?>disabled<?endif;?>>
@@ -50,11 +39,7 @@ _(Enhanced macOS interoperability)_:
<?=mk_option($var['enableFruit'], "yes", _('Yes'))?>
</select>
:help74
> When set to 'Yes' provides enhanced compatibility with Apple SMB clients, resulting, for example, in faster
> Finder browsing, and ability to export Time Machine shares. This may cause some issues with Windows clients, however.
> Please also refer to the [VFS_FRUIT MAN PAGE](https://www.mankier.com/8/vfs_fruit).
:end
:smb_enhanced_macos_help:
_(Enable NetBIOS)_:
: <select name="USE_NETBIOS" <?if ($var['fsState']=="Started"):?>disabled<?endif;?>>
@@ -62,10 +47,7 @@ _(Enable NetBIOS)_:
<?=mk_option($var['USE_NETBIOS'], "yes", _('Yes'))?>
</select>
:help75
> Select 'Yes' to enable NetBIOS. If enabled, SMBv1 protocol will also be recognized. If disabled,
> clients must use SMBv2 or higher.
:end
:smb_enable_netbios_help:
_(Enable WSD)_:
: <select name="USE_WSD" onchange="checkWSDSettings()" <?if ($var['fsState']=="Started"):?>disabled<?endif;?>>
@@ -73,18 +55,12 @@ _(Enable WSD)_:
<?=mk_option($var['USE_WSD'], "yes", _('Yes'))?>
</select>
:help76
> Select 'Yes' to enable WSD (WS-Discovery). The only reason to turn this off is when you are running an
> old LAN setup based on SMBv1.
:end
:smb_enable_wsd_help:
_(WSD options [experimental])_:
: <input type="text" name="WSD_OPT" maxlength="80" class="narrow" value="<?=htmlspecialchars($var['WSD_OPT'])?>" <?if ($var['fsState']=="Started"):?>disabled<?endif;?>>
:help77
> This is a command line otions string passed to the WSD daemon upon startup. Leave this field blank unless
> instructed by support to put something here.
:end
:smb_wsd_options_help:
&nbsp;
: <input type="submit" name="changeShare" value="_(Apply)_" disabled><input type="button" value="_(Done)_" onclick="done()"><?if ($var['fsState']=="Started"):?>*_(Array must be **Stopped** to change)_*<?endif;?>

View File

@@ -18,15 +18,7 @@ Cond="(($var['shareNFSEnabled']!='no') && (isset($name)?array_key_exists($name,$
<?
$width = [123,300];
?>
:help29
> *Read settings from* is used to preset the NFS security settings of the current selected share with the settings of an existing share.
>
> Select the desired share name and press **Read** to copy the NFS security settings from the selected source.
>
> *Write settings to* is used to copy the NFS security settings of the current selected share to one or more other existing shares.
>
> Select the desired destinations and press **Write** to copy the NFS security settings to the selected shares.
:end
:nfs_security_help:
<div class="clone1">
<span class="clone">_(Read settings from)_</span><i class="fa fa-arrow-left fa-fw"></i>

View File

@@ -20,15 +20,7 @@ require_once "$docroot/webGui/include/InputSecurity.php";
$width = [123,300];
?>
:help15
> *Read settings from* is used to preset the SMB security settings of the current selected share with the settings of an existing share.
>
> Select the desired share name and press **Read** to copy the SMB security settings from the selected source.
>
> *Write settings to* is used to copy the SMB security settings of the current selected share to one or more other existing shares.
>
> Select the desired destinations and press **Write** to copy the SMB security settings to the selected shares.
:end
:smb_security_help:
<div class="clone1">
<span class="clone">_(Read settings from)_</span><i class="fa fa-arrow-left fa-fw"></i>
@@ -73,10 +65,7 @@ _(Export)_:
<?=mk_option($sec[$name]['export'], "eh", _('Yes (hidden)'))?>
</select>
:help16
> This setting determines whether the share is visible and/or accessible. The 'Yes (hidden)' setting
> will *hide* the share from *browsing* but is still accessible if you know the share name.
:end
:smb_export_help:
<input type="hidden" name="shareVolsizelimit" value="">
<?else:?>
@@ -89,18 +78,12 @@ _(Export)_:
<?=mk_option($sec[$name]['export'], "eth", _('Yes/Time Machine (hidden)'))?>
</select>
:help17
> This setting determines whether the share is visible and/or accessible. The 'Yes (hidden)' setting
> will *hide* the share from *browsing* but is still accessible if you know the share name.
:end
:smb_export_help:
_(Time Machine volume size limit)_:
: <input type="text" name="shareVolsizelimit" maxlen="20" value="<?=$sec[$name]['volsizelimit']?>"> MB
:help18
> This limits the reported volume size, preventing Time Machine from using the entire real disk space
> for backup. For example, setting this value to "1024" would limit the reported disk space to 1GB.
:end
:smb_time_machine_volume_help:
<?endif;?>
<?if ($name!='flash'):?>
@@ -111,24 +94,7 @@ _(Case-sensitive names)_:
<?=mk_option($sec[$name]['caseSensitive'], "forced", _("Force lower"))?>
</select>
:help201
> Controls whether filenames are case-sensitive.
>
> The default setting of **auto** allows clients that support case sensitive filenames (Linux CIFSVFS)
> to tell the Samba server on a per-packet basis that they wish to access the file system in a case-sensitive manner (to support UNIX
> case sensitive semantics). No Windows system supports case-sensitive filenames so setting this option to **auto** is the same as
> setting it to No for them; however, the case of filenames passed by a Windows client will be preserved. This setting can result
> in reduced peformance with very large directories because Samba must do a filename search and match on passed names.
>
> A setting of **Yes** means that files are created with the case that the client passes, and only accessible using this same case.
> This will speed very large directory access, but some Windows applications may not function properly with this setting. For
> example, if "MyFile" is created but a Windows app attempts to open "MYFILE" (which is permitted in Windows), it will not be found.
>
> A value of **Forced lower** is special: the case of all incoming client filenames, not just new filenames, will be set to lower-case.
> In other words, no matter what mixed case name is created on the Windows side, it will be stored and accessed in all lower-case. This
> ensures all Windows apps will properly find any file regardless of case, but case will not be preserved in folder listings.
> Note this setting should only be configured for new shares.
:end
:smb_case_sensitive_names_help:
<?endif;?>
_(Security)_:
@@ -138,17 +104,7 @@ _(Security)_:
<?=mk_option($sec[$name]['security'], "private", _('Private'))?>
</select>
:help19
> Summary of security modes:
>
> **Public** All users including guests have full read/write access.
>
> **Secure** All users including guests have read access, you select which of your users
> have write access.
>
> **Private** No guest access at all, you select which of your users have read/write or
> read-only access.
:end
:smb_security_modes_help:
&nbsp;
: <input type="submit" name="changeShareSecurity" value="_(Apply)_" disabled><input type="button" value="_(Done)_" onclick="done()">
@@ -157,15 +113,7 @@ _(Security)_:
<?if ($sec[$name]['security']=='secure'):?>
<div id="title" class="nocontrol"><dt>_(SMB)_ _(User Access)_</dt><i>_(Guests have **read-only** access)_.</i></div>
:help20
> *Read settings from* is used to preset the SMB User Access settings of the current selected share with the settings of an existing share.
>
> Select the desired share name and press **Read** to copy the SMB security settings from the selected source.
>
> *Write settings to* is used to copy the SMB User Access settings of the current share to one or more other existing shares.
>
> Select the desired destinations and press **Write** to copy the SMB User access settings to the selected shares.
:end
:smb_secure_access_help:
<div class="clone1">
<span class="clone">_(Read settings from)_</span><i class="fa fa-arrow-left fa-fw"></i>
@@ -207,15 +155,7 @@ foreach ($rows as $row) echo $row;
<?elseif ($sec[$name]['security']=='private'):?>
<div id="title" class="nocontrol"><dt>_(SMB)_ _(User Access)_</dt><i>_(Guests have **no** access)_.</i></div>
:help21
> *Read settings from* is used to preset the SMB User Access settings of the current selected share with the settings of an existing share.
>
> Select the desired share name and press **Read** to copy the SMB security settings from the selected source.
>
> *Write settings to* is used to copy the SMB User Access settings of the current share to one or more other existing shares.
>
> Select the desired destinations and press **Write** to copy the SMB User access settings to the selected shares.
:end
:smb_private_access_help:
<div class="clone1">
<span class="clone">_(Read settings from)_</span><i class="fa fa-arrow-left fa-fw"></i>

View File

@@ -40,52 +40,31 @@ _(Download SMART report)_:
_(SMART self-test history)_:
: <input type="button" value="_(Show)_" id="toggle_log" onclick="selftestLog()" disabled>
:help29
> Press **Show** to view the self-test history as is kept on the disk itself.
> This feature is only available when the disk is in active mode.
:end
:selftest_history_help:
<pre id="selftest" style="display:none"></pre>
_(SMART error log)_:
: <input type="button" value="_(Show)_" id="toggle_error" onclick="errorLog()" disabled>
:help30
> Press **Show** to view the error report as is kept on the disk itself.
> This feature is only available when the disk is in active mode.
:end
:selftest_error_log_help:
<pre id="errorlog" style="display:none"></pre>
_(SMART short self-test)_:
: <input type='button' value='_(Start)_' id='short_test' onclick="startShortTest()" disabled>
:help31
> Starts a *short* SMART self-test, the estimated duration can be viewed under the *Capabilities* section. This is usually a few minutes.
>
> When the disk is spun down, it will abort any running self-test.
> This feature is only available when the disk is in active mode.
:end
:selftest_short_test_help:
_(SMART extended self-test)_:
: <input type='button' value='_(Start)_' id='long_test' onclick="startLongTest()" disabled>
:help32
> Starts an *extended* SMART self-test, the estimated duration can be viewed under the *Capabilities* section. This is usually several hours.
>
> When the disk is spun down, it will abort any running self-test. It is advised to disable the spin down timer of the disk
> to avoid interruption of this self-test.
>
> This feature is only available when the disk is in active mode.
:end
:selftest_long_test_help:
_(Last SMART test result)_:
: <span id="test_result"><i class='fa fa-circle-o-notch fa-spin fa-fw'></i></span>
:help33
> When no test is running it will show here the latest obtained self-test result (if available).
> Otherwise a progress indicator (percentage value) is shown for a running test.
:end
:selftest_result_help:
<script>
function cleanUp() {

View File

@@ -49,24 +49,17 @@ function globalInclude($name) {
return substr($name,0,4)=='disk' && (!$var['shareUserInclude'] || strpos("{$var['shareUserInclude']},","$name,")!==false);
}
function escapestring($share) {
return "\"$share\"";
}
// global shares include/exclude
$myDisks = array_filter(array_diff(array_keys(array_filter($disks,'my_disks')), explode(',',$var['shareUserExclude'])), 'globalInclude');
?>
:help3
> A *Share*, also called a *User Share*, is simply the name of a top-level directory that exists on one or more of your
> storage devices (array and cache). Each share can be exported for network access. When browsing a share, we return the
> composite view of all files and subdirectories for which that top-level directory exists on each storage device.
>
> *Read settings from* is used to preset the settings of the new share with the settings of an existing share.
>
> Select the desired share name and press **Read** to copy the settings from the selected source.
:share_edit_global1_help:
<?if ($name):?>
>
> *Write settings to* is used to copy the settings of the current share to one or more other existing shares.
>
> Select the desired destinations and press **Write** to copy the settings to the selected shares.
:share_edit_global2_help:
<?endif;?>
:end
<div id="" class="clone1">
<span class="clone">_(Read settings from)_</span><i class="fa fa-arrow-left fa-fw"></i>
@@ -97,21 +90,12 @@ foreach ($rows as $row) echo $row;
_(Share name)_:
: <input type="text" name="shareName" maxlength="40" value="<?=htmlspecialchars($name)?>">
:help4
> The share name can be up to 40 characters, and is case-sensitive with these restrictions:
>
> * cannot contain a double-quote character (") or the following characters: / \ * < > |
> * cannot be one of the reserved share names: flash, cache, cach2, .., disk1, disk2, ..
>
> We highly recommend to make your life easier and avoid special characters.
:end
:share_edit_name_help:
_(Comments)_:
: <input type="text" name="shareComment" maxlength="256" value="<?=htmlspecialchars($share['comment'])?>">
:help5
> Anything you like, up to 256 characters.
:end
:share_edit_comments_help:
_(Use cache pool (for new files/directories))_:
: <span class="input"><select name="shareUseCache" onchange="updateScreen(this.value)"<?=$pool_devices?'':' disabled'?>>
@@ -121,31 +105,7 @@ _(Use cache pool (for new files/directories))_:
<?=mk_option($share['useCache'], "only", _('Only'))?>
</select></span><span id="moverAction"></span>
:help11
> Specify whether new files and directories written on the share can be written onto the Cache disk/pool if present.
> This setting also affects *mover* behavior.
>
> **No** prohibits new files and subdirectories from being written onto the Cache disk/pool.
> *Mover* will take no action so any existing files for this share that are on the cache are left there.
>
> **Yes** indicates that all new files and subdirectories should be written to the Cache disk/pool, provided
> enough free space exists on the Cache disk/pool.
> If there is insufficient space on the Cache disk/pool, then new files and directories are created on the array.
> When the *mover* is invoked, files and subdirectories are transferred off the Cache disk/pool and onto the array.
>
> **Only** indicates that all new files and subdirectories must be writen to the Cache disk/pool.
> If there is insufficient free space on the Cache disk/pool, *create* operations will fail with *out of space* status.
> *Mover* will take no action so any existing files for this share that are on the array are left there.
>
> **Prefer** indicates that all new files and subdirectories should be written to the Cache disk/pool, provided
> enough free space exists on the Cache disk/pool.
> If there is insufficient space on the Cache disk/pool, then new files and directories are created on the array.
> When the *mover* is invoked, files and subdirectories are transferred off the array and onto the Cache disk/pool.
>
> **NOTE:** Mover will never move any files that are currently in use.
> This means if you want to move files associated with system services such as Docker or VMs then you need to
> disable these services while mover is running.
:end
:share_edit_cache_pool_help:
_(Select cache pool)_:
: <select name="shareCachePool">
@@ -160,15 +120,7 @@ _(Enable Copy-on-write)_:
<?=mk_option($share['cow'], "auto", _('Auto'))?>
</select></span><?if ($name):?>_(Set when adding new share only)_<?endif;?>
:help12
> Set to **No** to cause the *btrfs* NOCOW (No Copy-on-Write) attribute to be set on the share directory
> when created on a device formatted with *btrfs* file system. Once set, newly created files and
> subdirectories on the device will inherit the NOCOW attribute. We recommend this setting for shares
> used to store vdisk images, including the Docker loopback image file. This setting has no effect
> on non-btrfs file systems.
>
> Set to **Auto** for normal operation, meaning COW **will** be in effect on devices formatted with *btrfs*.
:end
:share_edit_copy_on_write_help:
_(Allocation method)_:
: <select name="shareAllocator">
@@ -177,35 +129,12 @@ _(Allocation method)_:
<?=mk_option($share['allocator'], "mostfree", _('Most-free'))?>
</select>
:help6
> This setting determines how Unraid OS will choose which disk to use when creating a new file or directory:
>
> **High-water**
> Choose the lowest numbered disk with free space still above the current *high water mark*. The
> *high water mark* is initialized with the size of the largest data disk divided by 2. If no disk
> has free space above the current *high water mark*, divide the *high water mark* by 2 and choose again.
>
> The goal of **High-water** is to write as much data as possible to each disk (in order to minimize
> how often disks need to be spun up), while at the same time, try to keep the same amount of free space on
> each disk (in order to distribute data evenly across the array).
>
> **Fill-up**
> Choose the lowest numbered disk that still has free space above the current **Minimum free space**
> setting.
>
> **Most-free**
> Choose the disk that currently has the most free space.
:end
:share_edit_allocation_method_help:
_(Minimum free space)_:
: <input type="text" name="shareFloor" maxlength="16" class="narrow" value="<?=htmlspecialchars($share['floor'])?>">
:help7
> The *minimum free space* available to allow writing to any disk belonging to the share.<br>
>
> Choose a value which is equal or greater than the biggest single file size you intend to copy to the share.
> Include units KB, MB, GB and TB as appropriate, e.g. 10MB.
:end
:share_edit_free_space_help:
_(Split level)_:
: <select name="shareSplitLevel">
@@ -218,31 +147,7 @@ _(Split level)_:
<?=mk_option($share['splitLevel'], "0", _('Manual: do not automatically split directories'))?>
</select>
:help8
> Determines whether a directory is allowed to expand onto multiple disks.
> **Automatically split any directory as required**
> When a new file or subdirectory needs to be created in a share, Unraid OS first chooses which disk
> it should be created on, according to the configured *Allocation method*. If the parent directory containing
> the new file or or subdirectory does not exist on this disk, then Unraid OS will first create all necessary
> parent directories, and then create the new file or subdirectory.
>
> **Automatically split only the top level directory as required**
> When a new file or subdirectory is being created in the first level subdirectory of a share, if that first
> level subdirectory does not exist on the disk being written, then the subdirectory will be created first.
> If a new file or subdirectory is being created in the second or lower level subdirectory of a share, the new
> file or subdirectory is created on the same disk as the new file or subdirectory's parent directory.
>
> **Automatically split only the top "N" level directories as required**
> Similar to previous: when a new file or subdirectory is being created, if the parent directory is at level "N",
> and does not exist on the chosen disk, Unraid OS will first create all necessary parent directories. If the
> parent directory of the new file or subdirectory is beyond level "N", then the new file or subdirectory is
> created on the same disk where the parent directory exists.
>
> **Manual: do not automatically split directories**
> When a new file or subdirectory needs to be created in a share, Unraid OS will only consider disks where the
> parent directory already exists.
:end
:share_edit_split_level_help:
_(Included disk(s))_:
: <select id="s1" name="shareInclude" multiple="multiple" style="display:none">
@@ -251,10 +156,7 @@ _(Included disk(s))_:
<?endforeach;?>
</select>
:help9
> Specify the disks which can be used by the share. By default all disks are included; that is, if specific
> disks are not selected here, then the share may expand into *all* array disks.
:end
:share_edit_included_disks_help:
_(Excluded disk(s))_:
: <select id="s2" name="shareExclude" multiple="multiple" style="display:none">
@@ -263,9 +165,7 @@ _(Excluded disk(s))_:
<?endforeach;?>
</select>
:help10
> Specify the disks which can *not* be used by the share. By default no disks are excluded.
:end
:share_edit_excluded_disks_help:
<?if (!$name):?>
&nbsp;
@@ -274,9 +174,7 @@ _(Excluded disk(s))_:
_(Share status)_:
: _(Share is empty)_
:help13
> Share does *not* contain any data and may be deleted if not needed any longer.
:end
:share_edit_status_help:
_(Delete)_<input type="checkbox" name="confirmDelete" onchange="chkDelete(this.form, this.form.cmdEditShare);">
: <input type="submit" name="cmdEditShare" value="_(Apply)_" onclick="if (this.value=='_(Delete)_')this.value='Delete';else this.value='Apply'" disabled><input type="button" value="_(Done)_" onclick="done()">
@@ -284,9 +182,7 @@ _(Delete)_<input type="checkbox" name="confirmDelete" onchange="chkDelete(this.f
_(Share status)_:
: _(Share contains data)_
:help14
> Share can *not* be deleted as long as it contains data. Be aware that some data can be hidden. See also [SMB Settings](/Settings/SMB) -> Hide "dot" files.
:end
:share_edit_delete_help:
&nbsp;
: <input type="submit" name="cmdEditShare" value="_(Apply)_" onclick="this.value='Apply'" disabled><input type="button" value="_(Done)_" onclick="done()">
@@ -376,12 +272,12 @@ function prepareEdit(form) {
swal({title:'_(Missing share name)_',text:'_(Enter a name for the share)_',type:'error',confirmButtonText:'_(Ok)_'});
return false;
}
var reserved = [<?=implode(',',array_map('escapeshellarg',explode(',',$var['reservedNames'])))?>];
var reserved = [<?=implode(',',array_map('escapestring',explode(',',$var['reservedNames'])))?>];
if (reserved.includes(share)) {
swal({title:'_(Invalid share name)_',text:'_(Do not use reserved names)_',type:'error',confirmButtonText:'_(Ok)_'});
return false;
}
var pools = [<?=implode(',',array_map('escapeshellarg',$pools))?>];
var pools = [<?=implode(',',array_map('escapestring',$pools))?>];
if (pools.includes(share)) {
swal({title:'_(Invalid share name)_',text:'_(Do not use pool names)_',type:'error',confirmButtonText:'_(Ok)_'});
return false;

View File

@@ -46,22 +46,4 @@ $(function() {
<?endif;?>
</form></p>
:help1
> **Colored Status Indicator** -- the significance of the color indicator at the beginning of each line in *User Shares* is as follows:
>
> <i class='fa fa-circle orb green-orb'></i>All files are on protected storage.
>
> <i class='fa fa-warning orb yellow-orb'></i>Some or all files are on unprotected storage.
>
> **Security modes:**
> + '-' -- user share is not exported and unavailable on the network
> + *Public* -- all users including guests have full read/write access (open access)
> + *Secure* -- all users including guests have read access, write access is set per user (limited access)
> + *Private* -- no guest access at all, read/write or read-only access is set per user (closed access)
>
> **Special modes:**
> + SMB security mode displayed in *italics* indicates exported hidden user shares.
> + NFS does not have special modes for user shares.
:end
:share_list_help:

View File

@@ -70,14 +70,7 @@ _(Enable disk shares)_:
<?=mk_option($var['shareDisk'], "auto", _('Auto'))?>
</select>
:help85
> If set to No, disk shares are unconditionally not exported.
>
> If set to Yes, disk shares may be exported. **WARNING:** Do not copy data from a disk share to a user share
> unless you *know* what you are doing. This may result in the loss of data and is not supported.
>
> If set to Auto, only disk shares not participating in User Shares may be exported.
:end
:shares_enable_disk_help:
_(Enable user shares)_:
: <select name="shareUser" onchange="presetShare(this.form,this.value)" <?=$disabled?>>
@@ -85,9 +78,7 @@ _(Enable user shares)_:
<?=mk_option($var['shareUser'], "-", _('No'))?>
</select>
:help86
> If set to 'Yes' the User Shares feature is activated.
:end
:shares_enable_shares_help:
_(Included disk(s))_:
: <select id="s1" name="shareUserInclude" multiple="multiple" style="display:none">
@@ -96,10 +87,7 @@ _(Included disk(s))_:
<?endforeach;?>
</select>
:help87
> This setting defines the set of array disks which are *included* in User Shares.
> Unchecking all disks will allow **all** array disks to be included.
:end
:shares_included_disks_help:
_(Excluded disk(s))_:
: <select id="s2" name="shareUserExclude" multiple="multiple" style="display:none">
@@ -108,13 +96,7 @@ _(Excluded disk(s))_:
<?endforeach;?>
</select>
:help88
> This setting defines the set of array disk which are *excluded* from User Shares.
> Uncheck all disks in order to not exclude any disks
>
> **Note:** Each separate User Share also includes its own set of Included and Excluded
> disks which represent a subset of the Included/Excluded disks defined here.
:end
:shares_excluded_disks_help:
_(Tunable (support Hard Links))_:
: <select name="fuse_useino" <?=$disabled?>>
@@ -122,16 +104,7 @@ _(Tunable (support Hard Links))_:
<?=mk_option($var['fuse_useino'], "yes", _('Yes'))?>
</select>
:help89
> If set to Yes then support the link() operation.
>
> If set to No then hard links are not supported.
>
> Notes:
>
> * Setting to Yes may cause problems for older media and dvd/bluray players accessing shares using NFS.
> * No matter how this is set, the **mover** will still properly handle any detected hard links.
:end
:shares_tunable_hard_links_help:
_(Tunable (enable Direct IO))_:
: <select name="fuse_directio" <?=$disabled?>>
@@ -140,12 +113,7 @@ _(Tunable (enable Direct IO))_:
<?=mk_option($var['fuse_directio'], "1", _('Yes'))?>
</select>
:help90
> **Experimental**: If set to Yes then mount User Share file system with FUSE *direct_io* mount option.
> This will increase write performance but might possibly decrease read performance.
>
> *Auto* selects No.
:end
:shares_tunable_direct_io_help:
&nbsp;
: <input type="submit" name="changeShare" value="_(Apply)_" disabled><input type="button" value="_(Done)_" onclick="done()"><?if ($disabled):?>*_(Array must be **Stopped** to change)_*<?endif;?>

View File

@@ -103,23 +103,17 @@ _(Preset service)_:
<?=mk_option($ssmtp['service'], "::NO:NO:none", _("Custom"))?>
</select>
:help188
> Select a preset service to set the basic service settings.
:end
:smtp_preset_service_help:
_(Sending email address)_:
: <input type="text" name="root" value="<?=htmlspecialchars($ssmtp['root'])?>">
:help189
> Email address of your mail account. This address is used as sender of the notifications.
:end
:smtp_email_address_help:
_(Email recipients)_:
: <input type="text" name="RcptTo" value="<?=htmlspecialchars($ssmtp['RcptTo'])?>">
:help190
> Recipients of status and error notifications. Specify one or more email addresses, separate multiple email addresses with a space.
:end
:smtp_recipients_help:
_(Priority in header)_:
: <select name="SetEmailPriority">
@@ -127,30 +121,22 @@ _(Priority in header)_:
<?=mk_option($ssmtp['SetEmailPriority'], "True", _("Yes"))?>
</select>
:help191
> Set email header with high importance, when there is a problem with unRaid.
:end
:smtp_priority_help:
_(Email subject prefix)_:
: <input type="text" name="Subject" value="<?=htmlspecialchars($ssmtp['Subject'])?>">
:help192
> Set a prefix for easy recognition of Unraid messages.
:end
:smtp_subject_prefix_help:
_(Mail server)_:
: <input type="text" name="server" value="<?=htmlspecialchars($ssmtp['server'])?>">
:help193
> Specify the name of the email server. Use the preset service selection to have this filled-in automatically.
:end
:smtp_mail_server_help:
_(Mail server port)_:
: <input type="text" name="port" class="narrow" maxlength="5" value="<?=htmlspecialchars($ssmtp['port'])?>">
:help194
> Specify the port of the email server. Use the preset service selection to have this filled-in automatically.
:end
:smtp_mail_server_port_help:
_(Use SSL/TLS)_:
: <select name="UseTLS">
@@ -158,9 +144,7 @@ _(Use SSL/TLS)_:
<?=mk_option($ssmtp['UseTLS'], "YES", _("Yes"))?>
</select>
:help195
> Specifies whether to use SSL/TLS to talk to the SMTP server.
:end
:smtp_use_ssl_tls_help:
_(Use STARTTLS)_:
: <select name="UseSTARTTLS">
@@ -168,9 +152,7 @@ _(Use STARTTLS)_:
<?=mk_option($ssmtp['UseSTARTTLS'], "YES", _("Yes"))?>
</select>
:help196
> Specifies whether to use STARTTLS before starting SSL negotiation - See RFC 2487.
:end
:smtp_use_starttls_help:
_(Define a TLS certificate)_:
: <select name="UseTLSCert" onchange="tls(this.form)">
@@ -178,16 +160,12 @@ _(Define a TLS certificate)_:
<?=mk_option($ssmtp['UseTLSCert'], "YES", _("Yes"))?>
</select>
:help197
> Select only when you have a certificate which required for communication.
:end
:smtp_define_tls_cert_help:
_(TLS certificate location)_:
: <input type="text" name="TLSCert" value="<?=htmlspecialchars($ssmtp['TLSCert'])?>">
:help198
> The file name of an RSA certificate to use for TLS - as required.
:end
:smtp_tls_cert_location_help:
_(Authentication method)_:
: <select name="AuthMethod" onchange="pwd(this.form)">
@@ -196,9 +174,7 @@ _(Authentication method)_:
<?=mk_option($ssmtp['AuthMethod'], "login", _("Login"))?>
</select>
:help199
> Select the correct authentication method for your email server. Use test to verify that access is working properly.
:end
:smtp_authentication_method_help:
_(Username)_:
: <input type="text" name="AuthUser" value="<?=htmlspecialchars($ssmtp['AuthUser'])?>">
@@ -206,9 +182,7 @@ _(Username)_:
_(Password)_:
: <input type="password" name="AuthPass" value="<?=htmlspecialchars($ssmtp['AuthPass'])?>">
:help200
> Enter the username and password to login to your email account. Be aware that the password is stored unencrypted in the email configuration file.
:end
:smtp_username_password_help:
&nbsp;
: <input type="submit" name="#apply" value="_(Apply)_" disabled><input type="button" value="_(Done)_" onclick="done()">

View File

@@ -198,10 +198,7 @@ $(function(){
</script>
<span class="status" style="margin-top:<?=$top?>px"><input type="checkbox" class="advancedview"></span>
:help39
> Use this page to make changes to your `syslinux.cfg` file.
> You will need to reboot your server for these changes to take effect.
:end
:syslinux_cfg_help:
<form markdown="1" method="POST" action="/update.php" target="progressFrame" onsubmit="prepareMenu(this)">
<input type="hidden" name="#include" value="/webGui/include/update.file.php">
@@ -237,13 +234,6 @@ _(Permit UEFI boot mode)_ <input type="checkbox" name="boot" <?=is_dir('/boot/EF
<input type="button" value="_(Default)_" onclick="setDefault(this.form)">
: <input type="submit" value="_(Apply)_"><input type="button" value="_(Done)_" onclick="done()">
:help40
> Click the **Default** button to initialize the edit box with the
> factory-default contents. You still need to click **Apply** in order to
>commit the change.
>
> Click the **Apply** button to commit the current edits. Click **Reset** to
> undo any changes you make (before Saving). Click **Done** to exit this page.
:end
:syslinux_button_help:
</form>

View File

@@ -51,12 +51,7 @@ _(Local syslog server)_:
</select>
<input type="text" name="server_port" class="trim" value="<?=$syslog['server_port']?>" maxlength="5" placeholder="514">
:help91
> Let the server act as a central syslog server and collect syslog messages from other systems.
> The server can listen on UDP, TCP or both with a selectable port number.
>
> Syslog information is stored per IP address. That is every system gets its own syslog file.
:end
:syslog_local_server_help:
<div markdown="1" id="local_folder" style="display:none">
_(Local syslog folder)_:
@@ -65,10 +60,7 @@ _(Local syslog folder)_:
<?foreach ($shares as $share){echo mk_option($syslog['server_folder'], '/mnt/user/'.$share['name'], $share['name']);}?>
</select>
:help92
> Select the share folder where the syslogs will be stored.
> It is recommended that you use a share located on the cache drive to prevent array disk spinups.
:end
:syslog_local_folder_help:
_(Local syslog rotation)_:
: <select name="log_rotation" onchange="logOptions(this.value,'slow')">
@@ -76,11 +68,7 @@ _(Local syslog rotation)_:
<?=mk_option($syslog['log_rotation'], "1", _("Enabled"))?>
</select>
:help93
> By default LOG rotation is disabled and will create a single LOG file of unlimited size.
>
> Enable LOG rotation to limit the size of the LOG file and specify the number of files to keep in the rotation scheme.
:end
:syslog_local_rotation_help:
<div markdown="1" id="log_options" style="display:none">
_(Local syslog maximum file size)_:
@@ -96,9 +84,7 @@ _(Local syslog maximum file size)_:
<?=mk_option($syslog['log_size'], '500M', '500 '._('MB'))?>
</select>
:help94
> Specifies the maximum LOG size. When exceeded LOG rotation will occur.
:end
:syslog_local_file_size_help:
_(Local syslog number of files)_:
: <select name="log_files">
@@ -108,9 +94,7 @@ _(Local syslog number of files)_:
<?=mk_option($syslog['log_files'], '4', '4')?>
</select>
:help95
> Specifies the number of additional LOG files to keep in the rotation scheme.
:end
:syslog_local_file_number_help:
</div>
</div>
@@ -123,10 +107,7 @@ _(Remote syslog server)_:
</select>
<input type="text" name="remote_port" class="trim" value="<?=$syslog['remote_port']?>" maxlength="4" placeholder="514">
:help96
> Enter a name or IP address of a remote syslog server.
> This will send a copy of the syslog messages to the designated server.
:end
:syslog_remote_server_help:
_(Mirror syslog to flash)_:
: <select name="syslog_flash" size="1">
@@ -134,12 +115,7 @@ _(Mirror syslog to flash)_:
<?=mk_option($syslog['syslog_flash'], "1", _("Yes"))?>
</select>
:help97
> This setting is NO by default and must be used with care to avoid unnecessary wear and tear of the USB device.
>
> Change this setting to YES when troubleshooting is required and it is not possible to get the regular diagnostics information.
> A mirror of the syslog file is stored in the **logs** folder of the flash device.
:end
:syslog_mirror_flash_help:
&nbsp;
: <input type="submit" value="_(Apply)_" disabled><input type="button" value="_(Done)_" onclick="done()">

View File

@@ -161,33 +161,24 @@ $(function(){
_(User name)_:
: <input type="text" name="userName" maxlength="40" onKeyUp="this.form.cmdUserEdit.disabled=(this.form.userName.value=='')" pattern="^[a-z_][a-z0-9_-]*[$]?$">
:help1
> Usernames may be up to 40 characters long and must start with a **lower case letter** or an underscore,
> followed by **lower case letters**, digits, underscores, or dashes. They can end with a dollar sign.
:end
:user_add_username_help:
_(Description)_:
: <input type="text" name="userDesc" maxlength="64" pattern='[^&:"]*'>
:help2
> Up to 64 characters. The characters ampersand (&amp;) quote (&quot;) and colon (:) are not allowed.
:end
:user_add_description_help:
_(Custom image)_:
: <span id="dropbox"><?=$void?></span><em>_(Drag-n-drop a PNG file or click the image at the left)_</em><input type="file" id="drop" accept=".png" style="display:none">
:help3
> The image will be scaled to 48x48 pixels in size. The maximum image file upload size is 95 kB (97,280 bytes).
:end
:user_add_custom_image_help:
_(Password)_:
<input type="hidden" name="userPassword" value="">
: <input type="password" name="userPasswordGUI" maxlength="129" onKeyUp="validatePassword(this.value);this.form.cmdUserEdit.disabled=(this.form.userName.value=='' || this.form.userPasswordGUI.value!=this.form.userPasswordConfGUI.value)">
<i id="showPass" class="fa fa-eye" style="cursor:pointer" title="_(Show / Hide password)_" onclick="showPassword()"></i><span><span class="usage-disk sys none"><span id="strength-bar" style="width:0"></span><span></span></span><span id="strength-text"></span></span>
:help4
> Up to 128 characters.
:end
:user_password_help:
_(Retype password)_:
<input type="hidden" name="userPasswordConf" value="">

View File

@@ -171,9 +171,7 @@ _(User name)_:
_(Description)_:
: <input type="text" name="userDesc" maxlength="64" value="<?=htmlspecialchars($users[$name]['desc'])?>" pattern='[^&:"]*'>
:help5
> Up to 64 characters. The characters ampersand (&amp;) quote (&quot;) and colon (:) are not allowed.
:end
:user_edit_description_help:
_(Custom image)_:
: <span id="dropbox">
@@ -184,9 +182,7 @@ _(Custom image)_:
<?endif;?>
</span><em>_(Drag-n-drop a PNG file or click the image at the left)_</em><input type="file" id="drop" accept=".png" style="display:none">
:help6
> The image will be scaled to 48x48 pixels in size. The maximum image file upload size is 512 kB (524,288 bytes).
:end
:user_edit_custom_image_help:
<?if ($name=="root"):?>
&nbsp;
@@ -203,9 +199,7 @@ _(Password)_:
: <input type="password" name="userPasswordGUI" maxlength="129" onKeyUp="validatePassword(this.value);this.form.cmdUserEdit.disabled=(this.form.userPasswordGUI.value != this.form.userPasswordConfGUI.value);">
<i id="showPass" class="fa fa-eye" style="cursor:pointer" title="_(Show / Hide password)_" onclick="showPassword()"></i><span><span class="usage-disk sys none"><span id="strength-bar" style="width:0"></span><span></span></span><span id="strength-text"></span></span>
:help7
> Up to 128 characters.
:end
:user_password_help:
_(Retype password)_:
<input type="hidden" name="userPasswordConf" value="">

View File

@@ -14,5 +14,11 @@
$docroot = $docroot ?? $_SERVER['DOCUMENT_ROOT'] ?: "/usr/local/emhttp";
$lang = $_POST['lang'] ?? '';
exec("sed -ri 's/^(locale=\")[^\"]*/\\1$lang/' /boot/config/plugins/dynamix/dynamix.cfg 2>/dev/null");
$file = '/boot/config/plugins/dynamix/dynamix.cfg';
if (file_exists($file)) {
exec("sed -ri 's/^(locale=\")[^\"]*/\\1$lang/' $file");
} else {
file_put_contents($file, "[display]\nlocale=\"$lang\"\n");
}
?>

View File

@@ -21,10 +21,10 @@ function _($text) {
return strpos($data,'*')===false ? $data : preg_replace(['/\*\*(.+?)\*\*/','/\*(.+?)\*/'],['<b>$1</b>','<i>$1</i>'],$data);
}
function parse_lang_file($file) {
return array_filter(parse_ini_string(preg_replace(['/^(null|yes|no|true|false|on|off|none)=/mi','/^([^>].*)=([^"\'`].*)$/m','/^:((help|plug)\d*)$/m','/^:end$/m'],['$1.=','$1="$2"',"_$1_=\"",'"'],str_replace(['"',"=\n"],["&#34;","=\"\"\n"],file_get_contents($file)))),'secured',ARRAY_FILTER_USE_BOTH);
return array_filter(parse_ini_string(preg_replace(['/^(null|yes|no|true|false|on|off|none)=/mi','/^([^>].*)=([^"\'`].*)$/m','/^:(.+_(help|plug)):$/m','/^:end$/m'],['$1.=','$1="$2"',"_$1_=\"",'"'],str_replace(['"',"=\n"],["&#34;","=\"\"\n"],file_get_contents($file)))),'secured',ARRAY_FILTER_USE_BOTH);
}
function parse_text($text) {
return preg_replace_callback('/_\((.+?)\)_/m',function($m){return _($m[1]);},preg_replace(["/^:((help|plug)\d*)$/m","/^:end$/m"],["<?if (translate(\"_$1_\")):?>","<?endif;?>"],$text));
return preg_replace_callback('/_\((.+?)\)_/m',function($m){return _($m[1]);},preg_replace(["/^:(.+_help):$/m","/^:(.+_plug):$/m","/^:end$/m"],["<?translate(\"_$1_\");?>","<?if (translate(\"_$1_\")):?>","<?endif;?>"],$text));
}
function parse_file($file,$markdown=true) {
return $markdown ? Markdown(parse_text(file_get_contents($file))) : parse_text(file_get_contents($file));
@@ -66,43 +66,48 @@ function translate($key) {
return !$plug;
}
$language = [];
$locale = $_SESSION['locale'];
$return = 'function _(t){return t;}';
$locale = $_SESSION['locale'] ?: 'en_US';
$return = "function _(t){return t;}";
$text = "$docroot/languages/$locale/translations.txt";
$help = "$docroot/languages/$locale/helptext.txt";
if ($locale) {
$text = "$docroot/languages/$locale/translations.txt";
if (file_exists($text)) {
$store = "$docroot/languages/$locale/translations.dot";
// global translations
if (!file_exists($store)) file_put_contents($store,serialize(parse_lang_file($text)));
$language = unserialize(file_get_contents($store));
}
if (file_exists($help)) {
// global help text
$store = "$docroot/languages/$locale/helptext.dot";
if (!file_exists($store)) file_put_contents($store,serialize(parse_lang_file($help)));
$language = array_merge($language,unserialize(file_get_contents($store)));
}
$jscript = "$docroot/webGui/javascript/translate.$locale.js";
if (!file_exists($jscript)) {
// create javascript file with translations
$source = [];
$files = glob("$docroot/languages/$locale/javascript*.txt",GLOB_NOSORT);
foreach ($files as $js) $source = array_merge($source,parse_lang_file($js));
if (count($source)) {
$script = ['function _(t){var l={};'];
foreach ($source as $key => $value) $script[] = "l[\"$key\"]=\"$value\";";
$script[] ="return l[t.replace(/\&amp;|[\?\{\}\|\&\~\!\[\]\(\)\/\\:\*^\.\"']|<.+?\/?>/g,'').replace(/ +/g,' ')]||t;}";
file_put_contents($jscript,implode('',$script));
} else {
file_put_contents($jscript,$return);
}
}
// split URI into translation levels
$uri = array_filter(explode('/',strtok($_SERVER['REQUEST_URI'],'?')));
foreach($uri as $more) {
$more = strtolower($more);
$text = "$docroot/languages/$locale/$more.txt";
if (file_exists($text)) {
$basis = "$docroot/languages/$locale/translations.dot";
// global translations
if (!file_exists($basis)) file_put_contents($basis,serialize(parse_lang_file($text)));
$language = unserialize(file_get_contents($basis));
}
$jscript = "$docroot/webGui/javascript/translate.$locale.js";
if (!file_exists($jscript)) {
// create javascript file with translations
$source = [];
$files = glob("$docroot/languages/$locale/javascript*.txt",GLOB_NOSORT);
foreach ($files as $js) $source = array_merge($source,parse_lang_file($js));
if (count($source)) {
$script = ['function _(t){var l={};'];
foreach ($source as $key => $value) $script[] = "l[\"$key\"]=\"$value\";";
$script[] ="return l[t.replace(/\&amp;|[\?\{\}\|\&\~\!\[\]\(\)\/\\:\*^\.\"']|<.+?\/?>/g,'').replace(/ +/g,' ')]||t;}";
file_put_contents($jscript,implode('',$script));
} else {
file_put_contents($jscript,$return);
}
}
// split URI into translation levels
$uri = array_filter(explode('/',strtok($_SERVER['REQUEST_URI'],'?')));
foreach($uri as $more) {
$more = strtolower($more);
$text = "$docroot/languages/$locale/$more.txt";
if (file_exists($text)) {
// additional translations
$other = "$docroot/languages/$locale/$more.dot";
if (!file_exists($other)) file_put_contents($other,serialize(parse_lang_file($text)));
$language = array_merge($language,unserialize(file_get_contents($other)));
}
// additional translations
$other = "$docroot/languages/$locale/$more.dot";
if (!file_exists($other)) file_put_contents($other,serialize(parse_lang_file($text)));
$language = array_merge($language,unserialize(file_get_contents($other)));
}
}
?>

View File

@@ -11,6 +11,11 @@
*/
?>
<?
$docroot = $docroot ?? $_SERVER['DOCUMENT_ROOT'] ?: '/usr/local/emhttp';
// add translations
$_SERVER['REQUEST_URI'] = 'settings';
require_once "$docroot/webGui/include/Translations.php";
$cli = php_sapi_name()=='cli';
function response_complete($httpcode, $result, $cli_success_msg='') {