1#!/usr/bin/perl 2# 3# by Sergei Butakov <sergei@bslos.com> (2011-05-1x - 2011-05-2x for V3.2.1) 4# 5# 6# This program is free software: you can redistribute it and/or modify 7# it under the terms of the GNU General Public License as published by 8# the Free Software Foundation, either version 3 of the License, or 9# (at your option) any later version. 10# 11# This program is distributed in the hope that it will be useful, 12# but WITHOUT ANY WARRANTY; without even the implied warranty of 13# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14# GNU General Public License for more details. 15# 16# You should have received a copy of the GNU General Public License 17# along with this program. If not, see <http://www.gnu.org/licenses/>. 18# 19 20use utf8; 21# -------------------------------- 22 23$Lang{Start_Archive} = "Начать Архивирование"; 24$Lang{Stop_Dequeue_Archive} = "Остановить/Убрать из Очереди"; 25$Lang{Start_Full_Backup} = "Начать Полн. Копирование"; 26$Lang{Start_Incr_Backup} = "Начать Инкр. Копирование"; 27$Lang{Stop_Dequeue_Backup} = "Остановить/Убрать из Очереди"; 28$Lang{Restore} = "Восстановить"; 29 30$Lang{Type_full} = "полн."; 31$Lang{Type_incr} = "инкр."; 32 33# ----- 34 35$Lang{Only_privileged_users_can_view_admin_options} = "Only privileged users can view admin options."; 36$Lang{H_Admin_Options} = "BackupPC Server: Admin Options"; 37$Lang{Admin_Options} = "Администрирование"; 38$Lang{Admin_Options_Page} = <<EOF; 39\${h1(qq{$Lang{Admin_Options}})} 40<br> 41\${h2("Управление Сервером")} 42<form name="ReloadForm" action="\$MyURL" method="get"> 43<input type="hidden" name="action" value=""> 44<table class="tableStnd"> 45 <tr><td>Перезагрузить настройки сервера:<td><input type="button" value="Перезагрузить" 46 onClick="document.ReloadForm.action.value='Reload'; 47 document.ReloadForm.submit();"> 48</table> 49</form> 50<!-- 51\${h2("Server Configuration")} 52<ul> 53 <li><i>Other options can go here... e.g.,</i> 54 <li>Edit server configuration 55</ul> 56--> 57EOF 58 59$Lang{Unable_to_connect_to_BackupPC_server} = "Не могу подключиться к серверу BackupPC"; 60$Lang{Unable_to_connect_to_BackupPC_server_error_message} = <<EOF; 61This CGI script (\$MyURL) is unable to connect to the BackupPC 62server on \$Conf{ServerHost} port \$Conf{ServerPort}.<br> 63The error was: \$err.<br> 64Perhaps the BackupPC server is not running or there is a configuration error. 65Please report this to your Sys Admin. 66EOF 67 68$Lang{Admin_Start_Server} = <<EOF; 69\${h1(qq{$Lang{Unable_to_connect_to_BackupPC_server}})} 70<form action="\$MyURL" method="get"> 71The BackupPC server at <tt>\$Conf{ServerHost}</tt> port <tt>\$Conf{ServerPort}</tt> 72is not currently running (maybe you just stopped it, or haven't yet started it).<br> 73Do you want to start it? 74<input type="hidden" name="action" value="startServer"> 75<input type="submit" value="Start Server" name="ignore"> 76</form> 77EOF 78 79# ----- 80 81$Lang{H_BackupPC_Server_Status} = "Состояние Сервера BackupPC"; 82 83$Lang{BackupPC_Server_Status_General_Info}= <<EOF; 84\${h2(\"Общая Информация\")} 85 86<ul> 87<li> PID сервера \$Info{pid}, версия \$Info{Version}, 88 запущен \$serverStartTime на узле \$Conf{ServerHost}. 89<li> Данный отчёт был сформирован \$now. 90<li> Настройки последний раз загружались \$configLoadTime. 91<li> В следующий раз ПК будут поставлены в очередь запросов \$nextWakeupTime. 92<li> Прочая информация: 93 <ul> 94 <li>\$numBgQueue запросов в очереди на резервирование (с момента последнего запуска планировщика); 95 <li>\$numUserQueue запросов в пользовательской очереди на резервирование; 96 <li>\$numCmdQueue запросов в очереди на выполнение команд; 97 \$poolInfo 98 <li>Файловая система пула занята на \$Info{DUlastValue}% 99 (\$DUlastTime), сегодняшний максимум \$Info{DUDailyMax}% (\$DUmaxTime), 100 вчерашний максимум \$Info{DUDailyMaxPrev}%. 101 <li>Inode Файловая система пула занята на \$Info{DUInodelastValue}% 102 (\$DUlastTime), сегодняшний максимум \$Info{DUInodeDailyMax}% (\$DUInodemaxTime), 103 вчерашний максимум \$Info{DUInodeDailyMaxPrev}%. 104 </ul> 105</ul> 106EOF 107 108$Lang{BackupPC_Server_Status} = <<EOF; 109\${h1(qq{$Lang{H_BackupPC_Server_Status}})} 110 111<p> 112\${h2("Работы, выполняемые в данный момент времени")} 113<p> 114<table class="tableStnd sortable" border cellspacing="1" cellpadding="3"> 115<tr class="tableheader"><td>Узел</td> 116 <td>Тип</td> 117 <td>Пользователь</td> 118 <td>Время начала</td> 119 <td>Команда</td> 120 <td align="center">PID</td> 121 <td align="center">Xfer PID</td> 122 <td align="center"> Status </td> 123 <td align="center"> Count </td> 124 </tr> 125\$jobStr 126</table> 127 128<p> 129\$generalInfo 130 131\${h2("Сбои, нуждающиеся внимания")} 132<p> 133<table class="tableStnd sortable" border cellspacing="1" cellpadding="3"> 134<tr class="tableheader"><td align="center">Узел</td> 135 <td align="center">Тип</td> 136 <td align="center">Пользователь</td> 137 <td align="center">Последняя попытка</td> 138 <td align="center">Детали</td> 139 <td align="center">Время ошибки</td> 140 <td>Последняя ошибка (не считая отсутствие \'пинга\')</td></tr> 141\$statusStr 142</table> 143EOF 144 145# -------------------------------- 146$Lang{BackupPC__Server_Summary} = "Сводка по Узлам"; 147$Lang{BackupPC__Archive} = "Архивирование"; 148$Lang{BackupPC_Summary} = <<EOF; 149 150\${h1(qq{$Lang{BackupPC__Server_Summary}})} 151<p> 152<ul> 153<li>Данный отчёт был сформирован \$now. 154<li>Файловая система пула занята на \$Info{DUlastValue}% 155 (\$DUlastTime), сегодняшний максимум \$Info{DUDailyMax}% (\$DUmaxTime), 156 вчерашний максимум \$Info{DUDailyMaxPrev}%. 157<li>Inode Файловая система пула занята на \$Info{DUInodelastValue}% 158 (\$DUlastTime), сегодняшний максимум \$Info{DUInodeDailyMax}% (\$DUInodemaxTime), 159 вчерашний максимум \$Info{DUInodeDailyMaxPrev}%. 160</ul> 161</p> 162 163\${h2("Узлы, имеющие резервные копии")} 164<p> 165Всего \$hostCntGood узлов, которые содержат: 166<ul> 167<li> \$fullTot полных резервных копий общим размером \${fullSizeTot}GiB 168 (до объединения и сжатия); 169<li> \$incrTot инкрементальных резервных копий общим размером \${incrSizeTot}GiB 170 (до объединения и сжатия). 171</ul> 172</p> 173<table class="sortable" id="host_summary_backups" border cellpadding="3" cellspacing="1"> 174<tr class="tableheader"><td>Узел</td> 175 <td align="center">Поль-ль</td> 176 <td align="center">Комментарий</td> 177 <td align="center">Кол-во ПОЛН. копий</td> 178 <td align="center">ПОЛН. возраст (дни)</td> 179 <td align="center">ПОЛН. размер (ГБ)</td> 180 <td align="center">Скорость (МБ/с)</td> 181 <td align="center">Кол-во ИНКР. копий</td> 182 <td align="center">ИНКР. возраст (дни)</td> 183 <td align="center">Посл. копир-ие (дни)</td> 184 <td align="center">Состояние</td> 185 <td align="center">Трансп. ошибок</td> 186 <td align="center">Последнее действие</td></tr> 187\$strGood 188</table> 189\${h2("Узлы, не имеющие резервные копии")} 190<p> 191Всего \$hostCntNone узлов, не имеющих резервных копий. 192<p> 193<table class="sortable" id="host_summary_nobackups" border cellpadding="3" cellspacing="1"> 194<tr class="tableheader"><td>Узел</td> 195 <td align="center">Поль-ль</td> 196 <td align="center">Комментарий</td> 197 <td align="center">Кол-во ПОЛН. копий</td> 198 <td align="center">ПОЛН. возраст (дни)</td> 199 <td align="center">ПОЛН. размер (ГБ)</td> 200 <td align="center">Скорость (МБ/с)</td> 201 <td align="center">Кол-во ИНКР. копий</td> 202 <td align="center">ИНКР. возраст (дни)</td> 203 <td align="center">Последн. копир-ие (дни)</td> 204 <td align="center">Состояние</td> 205 <td align="center">Трансп. ошибок</td> 206 <td align="center">Последнее действие</td></tr> 207\$strNone 208</table> 209EOF 210 211$Lang{BackupPC_Archive} = <<EOF; 212\${h1(qq{$Lang{BackupPC__Archive}})} 213<script language="javascript" type="text/javascript"> 214<!-- 215 216 function checkAll(location) 217 { 218 for (var i=0;i<document.form1.elements.length;i++) 219 { 220 var e = document.form1.elements[i]; 221 if ((e.checked || !e.checked) && e.name != \'all\') { 222 if (eval("document.form1."+location+".checked")) { 223 e.checked = true; 224 } else { 225 e.checked = false; 226 } 227 } 228 } 229 } 230 231 function toggleThis(checkbox) 232 { 233 var cb = eval("document.form1."+checkbox); 234 cb.checked = !cb.checked; 235 } 236 237//--> 238</script> 239 240Всего \$hostCntGood узлов, чьи резервные копии занимают в общем \${fullSizeTot} ГБ. 241<p> 242<form name="form1" method="post" action="\$MyURL"> 243<input type="hidden" name="fcbMax" value="\$checkBoxCnt"> 244<input type="hidden" name="type" value="1"> 245<input type="hidden" name="host" value="\${EscHTML(\$archHost)}"> 246<input type="hidden" name="action" value="Archive"> 247<table class="tableStnd" border cellpadding="3" cellspacing="1"> 248<tr class="tableheader"><td align=center> Узел</td> 249 <td align="center"> Пользователь </td> 250 <td align="center"> Размер Копии </td> 251\$strGood 252\$checkAllHosts 253</table> 254</form> 255<p> 256 257EOF 258 259$Lang{BackupPC_Archive2} = <<EOF; 260\${h1(qq{$Lang{BackupPC__Archive}})} 261Архивирование следующих узлов 262<ul> 263\$HostListStr 264</ul> 265<form action="\$MyURL" method="post"> 266\$hiddenStr 267<input type="hidden" name="action" value="Archive"> 268<input type="hidden" name="host" value="\${EscHTML(\$archHost)}"> 269<input type="hidden" name="type" value="2"> 270<input type="hidden" value="0" name="archive_type"> 271<table class="tableStnd" border cellspacing="1" cellpadding="3"> 272\$paramStr 273<tr> 274 <td colspan=2><input type="submit" value="Начать Архивирование" name="ignore"></td> 275</tr> 276</form> 277</table> 278EOF 279 280$Lang{BackupPC_Archive2_location} = <<EOF; 281<tr> 282 <td>Расположение/Устройство Архива</td> 283 <td><input type="text" value="\$ArchiveDest" name="archive_device"></td> 284</tr> 285EOF 286 287$Lang{BackupPC_Archive2_compression} = <<EOF; 288<tr> 289 <td>Сжатие</td> 290 <td> 291 <input type="radio" value="0" name="compression" \$ArchiveCompNone>Нет<br> 292 <input type="radio" value="1" name="compression" \$ArchiveCompGzip>gzip<br> 293 <input type="radio" value="2" name="compression" \$ArchiveCompBzip2>bzip2 294 </td> 295</tr> 296EOF 297 298$Lang{BackupPC_Archive2_parity} = <<EOF; 299<tr> 300 <td>Percentage of Parity Data (0 = disable, 5 = typical)</td> 301 <td><input type="numeric" value="\$ArchivePar" name="par"></td> 302</tr> 303EOF 304 305$Lang{BackupPC_Archive2_split} = <<EOF; 306<tr> 307 <td>Разделить на части по</td> 308 <td><input type="numeric" value="\$ArchiveSplit" name="splitsize">МБ</td> 309</tr> 310EOF 311 312# ----------------------------------- 313$Lang{Pool_Stat} = <<EOF; 314 <li>Пул занимает \${poolSize}GiB, включая \$info->{"\${name}FileCnt"} файлов 315 и \$info->{"\${name}DirCnt"} каталогов (по данным на \$poolTime); 316 <li>При хешировании пула произошло \$info->{"\${name}FileCntRep"} коллизии, 317 максимальное количество файлов в одной коллизии - \$info->{"\${name}FileRepMax"}; 318 <li>Во время ночной очистки было удалено \$info->{"\${name}FileCntRm"} файлов 319 общим размером \${poolRmSize}GiB (в районе \$poolTime); 320EOF 321 322# -------------------------------- 323$Lang{BackupPC__Backup_Requested_on__host} = "BackupPC: Backup Requested on \$host"; 324$Lang{BackupPC__Delete_Requested_for_a_backup_of__host} = "BackupPC: Delete Requested for a backup of \$host"; 325# -------------------------------- 326$Lang{REPLY_FROM_SERVER} = <<EOF; 327\${h1(\$str)} 328<p> 329Ответ с сервера: \$reply 330<p> 331Вернуться на Главную страницу узла <a href="\$MyURL?host=\$host">\$host</a>. 332EOF 333# -------------------------------- 334$Lang{BackupPC__Start_Backup_Confirm_on__host} = "BackupPC: Start Backup Confirm on \$host"; 335# -------------------------------- 336$Lang{Are_you_sure_start} = <<EOF; 337\${h1("Вы уверены?")} 338<p> 339Резервное \$type копирование узла \$host. 340 341<form name="Confirm" action="\$MyURL" method="get"> 342<input type="hidden" name="host" value="\$host"> 343<input type="hidden" name="hostIP" value="\$ipAddr"> 344<input type="hidden" name="doit" value="1"> 345<input type="hidden" name="action" value=""> 346Вы уверены, что хотите сделать это? 347<input type="button" value="\$buttonText" 348 onClick="document.Confirm.action.value='\$In{action}'; 349 document.Confirm.submit();"> 350<input type="submit" value="Нет" name="ignore"> 351</form> 352EOF 353# -------------------------------- 354$Lang{BackupPC__Stop_Backup_Confirm_on__host} = "BackupPC: Stop Backup Confirm on \$host"; 355# -------------------------------- 356$Lang{Are_you_sure_stop} = <<EOF; 357 358\${h1("Вы уверены?")} 359 360<p> 361Остановка/удаление из очереди узла \$host. 362 363<form name="Confirm" action="\$MyURL" method="get"> 364<input type="hidden" name="host" value="\$host"> 365<input type="hidden" name="doit" value="1"> 366<input type="hidden" name="action" value=""> 367Также, не начинать другое резервное копирование в течение 368<input type="text" name="backoff" size="10" value="\$backoff"> часов. 369<p> 370Вы уверены, что хотите сделать это? 371<input type="button" value="\$buttonText" 372 onClick="document.Confirm.action.value='\$In{action}'; 373 document.Confirm.submit();"> 374<input type="submit" value="Нет" name="ignore"> 375</form> 376 377EOF 378# -------------------------------- 379$Lang{Only_privileged_users_can_view_queues_} = "Only privileged users can view queues."; 380# -------------------------------- 381$Lang{Only_privileged_users_can_archive} = "Only privileged users can Archive."; 382# -------------------------------- 383$Lang{BackupPC__Queue_Summary} = "BackupPC: Queue Summary"; 384# -------------------------------- 385$Lang{Backup_Queue_Summary} = <<EOF; 386\${h1("Сводка по Очередям")} 387\${h2("Очередь Пользовательских Задач")} 388<p> 389Следующие запросы находятся в очереди: 390</p> 391<table class="tableStnd sortable" border cellspacing="1" cellpadding="3" width="80%"> 392<tr class="tableheader"><td> Узел </td> 393 <td> Action </td> 394 <td> Время Запроса </td> 395 <td> Пользователь </td></tr> 396\$strUser 397</table> 398 399\${h2("Очередь Фоновых Задач")} 400<p> 401Следующие фоновые запросы находятся в очереди: 402</p> 403<table class="tableStnd sortable" border cellspacing="1" cellpadding="3" width="80%"> 404<tr class="tableheader"><td> Узел </td> 405 <td> Action </td> 406 <td> Время Запроса </td> 407 <td> Пользователь </td></tr> 408\$strBg 409</table> 410\${h2("Очередь Команд")} 411<p> 412Следующие команды находятся в очереди: 413</p> 414<table class="tableStnd sortable" border cellspacing="1" cellpadding="3" width="80%"> 415<tr class="tableheader"><td> Узел </td> 416 <td> Action </td> 417 <td> Время Запроса </td> 418 <td> Пользователь </td> 419 <td> Команда </td></tr> 420\$strCmd 421</table> 422EOF 423 424# -------------------------------- 425$Lang{Backup_PC__Log_File__file} = "BackupPC: File \$file"; 426$Lang{Log_File__file__comment} = <<EOF; 427\${h1("Файл \$file \$comment")} 428<p> 429EOF 430# -------------------------------- 431$Lang{Contents_of_log_file} = <<EOF; 432Содержимое файла <tt>\$file</tt>, с последними изменениями от \$mtimeStr \$comment 433EOF 434 435# -------------------------------- 436$Lang{skipped__skipped_lines} = "[ пропущено \$skipped строк ]\n"; 437# -------------------------------- 438$Lang{_pre___Can_t_open_log_file__file} = "<pre>\nНе могу открыть журнальный файл \$file\n"; 439 440# -------------------------------- 441$Lang{BackupPC__Log_File_History} = "BackupPC: Log File History"; 442$Lang{Log_File_History__hdr} = <<EOF; 443\${h1("Архив Журналов \$hdr")} 444<p> 445<table class="tableStnd sortable" border cellspacing="1" cellpadding="3" width="80%"> 446<tr class="tableheader"><td align="center"> Файл </td> 447 <td align="center"> Размер </td> 448 <td align="center"> Время изменения </td></tr> 449\$str 450</table> 451EOF 452 453# ------------------------------- 454$Lang{Recent_Email_Summary} = <<EOF; 455\${h1("Сводка по Последним Письмам (в обратном порядке времени)")} 456<p> 457<table class="tableStnd sortable" border cellspacing="1" cellpadding="3" width="80%"> 458<tr class="tableheader"><td align="center"> Получатель </td> 459 <td align="center"> Узел </td> 460 <td align="center"> Время </td> 461 <td align="center"> Тема </td></tr> 462\$str 463</table> 464EOF 465 466 467# ------------------------------ 468$Lang{Browse_backup__num_for__host} = "BackupPC: Browse backup \$num for \$host"; 469 470# ------------------------------ 471$Lang{Restore_Options_for__host} = "BackupPC: Restore Options for \$host"; 472$Lang{Restore_Options_for__host2} = <<EOF; 473\${h1("Параметры Восстановления для Узла \$host")} 474<p> 475Вы выбрали следующие файлы/каталоги из 476ресурса \$share, номер копии № \$num: 477<ul> 478\$fileListStr 479</ul> 480</p><p> 481Выберите один из трёх способов восстановления. 482</p> 483\${h2("Способ 1: Прямое Восстановление")} 484<p> 485EOF 486 487$Lang{Restore_Options_for__host_Option1} = <<EOF; 488Вы можете восстановить данные напрямую в 489<b>\$directHost</b>. 490</p><p> 491<b>Внимание:</b> все существующие файлы, совпадающие с выбранными, 492будут переписаны! 493</p> 494<form action="\$MyURL" method="post" name="direct"> 495<input type="hidden" name="host" value="\${EscHTML(\$host)}"> 496<input type="hidden" name="num" value="\$num"> 497<input type="hidden" name="type" value="3"> 498\$hiddenStr 499<input type="hidden" value="\$In{action}" name="action"> 500<table class="tableStnd" border="0"> 501<tr> 502 <td>Восстановить на узел</td> 503 <td><!--<input type="text" size="40" value="\${EscHTML(\$host)}" 504 name="hostDest">--> 505 <select name="hostDest" onChange="document.direct.shareDest.value=''"> 506 \$hostDestSel 507 </select> 508 <script language="Javascript"> 509 function myOpen(URL) { 510 window.open(URL,'','width=500,height=400'); 511 } 512 </script> 513 <!--<a href="javascript:myOpen('\$MyURL?action=findShares&host='+document.direct.hostDest.options.value)">Search for available shares (NOT IMPLEMENTED)</a>--></td> 514</tr><tr> 515 <td>Восстановить на ресурс</td> 516 <td><input type="text" size="40" value="\${EscHTML(\$share)}" 517 name="shareDest"></td> 518</tr><tr> 519 <td>Восстановить в каталог<br>(относительно ресурса)</td> 520 <td valign="top"><input type="text" size="40" maxlength="256" 521 value="\${EscHTML(\$pathHdr)}" name="pathHdr"></td> 522</tr><tr> 523 <td><input type="submit" value="Начать Восстановление" name="ignore"></td> 524</table> 525</form> 526EOF 527 528$Lang{Restore_Options_for__host_Option1_disabled} = <<EOF; 529Direct restore has been disabled for host \${EscHTML(\$hostDest)}. 530Please select one of the other restore options. 531EOF 532 533# ------------------------------ 534$Lang{Option_2__Download_Zip_archive} = <<EOF; 535<p> 536\${h2("Способ 2: Загрузка Zip-архива")} 537<p> 538Вы можете загрузить Zip-архив, содержащий все выбранные файлы и каталоги. 539После чего, используя локальное приложение, такое как WinZip, можно просмотреть 540или разархивировать любые файлы. 541</p><p> 542<b>Внимание:</b> в зависимости от выбранных Вами файлов/каталогов, 543этот архив может быть очень очень большим. На создание и передачу 544такого архива может уйти много времени, и Вам понадобится достаточно 545много места на локальном диске для его хранения. 546</p> 547<form action="\$MyURL" method="post"> 548<input type="hidden" name="host" value="\${EscHTML(\$host)}"> 549<input type="hidden" name="num" value="\$num"> 550<input type="hidden" name="type" value="2"> 551\$hiddenStr 552<input type="hidden" value="\$In{action}" name="action"> 553<input type="checkbox" value="1" name="relative" checked> Создать архив относительно 554\${EscHTML(\$pathHdr eq "" ? "/" : \$pathHdr)} 555(в противном случае файлы в архиве будут иметь полные пути). 556<br> 557<table class="tableStnd" border="0"> 558<tr> 559 <td>Степень сжатия (0=нет, 1=самая быстрая, ..., 9=самая большая)</td> 560 <td><input type="text" size="6" value="5" name="compressLevel"></td> 561</tr><tr> 562 <td>Code page (e.g. cp866)</td> 563 <td><input type="text" size="6" value="utf8" name="codePage"></td> 564</tr> 565</table> 566<br> 567<input type="submit" value="Загрузить Zip-архив" name="ignore"> 568</form> 569EOF 570 571# ------------------------------ 572 573$Lang{Option_2__Download_Zip_archive2} = <<EOF; 574<p> 575\${h2("Option 2: Download Zip archive")} 576<p> 577Archive::Zip is not installed so you will not be able to download a 578zip archive. 579Please ask your system adminstrator to install Archive::Zip from 580<a href="http://www.cpan.org">www.cpan.org</a>. 581</p> 582EOF 583 584 585# ------------------------------ 586$Lang{Option_3__Download_Zip_archive} = <<EOF; 587\${h2("Способ 3: Загрузка Tar-архива")} 588<p> 589Вы можете загрузить Tar-архив, содержащий все выбранные файлы и каталоги. 590После чего, используя локальное приложение, такое как tar или WinZip, 591можно просмотреть или разархивировать любые файлы. 592</p><p> 593<b>Внимание:</b> в зависимости от выбранных Вами файлов/каталогов, 594этот архив может быть очень очень большим. На создание и передачу 595такого архива может уйти много времени, и Вам понадобится достаточно 596много места на локальном диске для его хранения. 597</p> 598<form action="\$MyURL" method="post"> 599<input type="hidden" name="host" value="\${EscHTML(\$host)}"> 600<input type="hidden" name="num" value="\$num"> 601<input type="hidden" name="type" value="1"> 602\$hiddenStr 603<input type="hidden" value="\$In{action}" name="action"> 604<input type="checkbox" value="1" name="relative" checked> Создать архив относительно 605\${EscHTML(\$pathHdr eq "" ? "/" : \$pathHdr)} 606(в противном случае файлы в архиве будут иметь полные пути). 607<br> 608<input type="submit" value="Загрузить Tar-архив" name="ignore"> 609</form> 610EOF 611 612 613# ------------------------------ 614$Lang{Restore_Confirm_on__host} = "BackupPC: Restore Confirm on \$host"; 615 616$Lang{Are_you_sure} = <<EOF; 617\${h1("Вы уверены? Точно-точно? А если подумать? Может всё-таки не надо?")} 618<p> 619Следующие файлы будут восстановлены напрямую на узел \$In{hostDest} в ресурс 620\$In{shareDest}, из резервной копии № \$num: 621<p> 622<table class="tableStnd" border> 623<tr class="tableheader"><td>Оригинальный файл/каталог</td><td>Будет восстановлен как</td></tr> 624\$fileListStr 625</table> 626 627<form name="RestoreForm" action="\$MyURL" method="post"> 628<input type="hidden" name="host" value="\${EscHTML(\$host)}"> 629<input type="hidden" name="hostDest" value="\${EscHTML(\$In{hostDest})}"> 630<input type="hidden" name="shareDest" value="\${EscHTML(\$In{shareDest})}"> 631<input type="hidden" name="pathHdr" value="\${EscHTML(\$In{pathHdr})}"> 632<input type="hidden" name="num" value="\$num"> 633<input type="hidden" name="type" value="4"> 634<input type="hidden" name="action" value=""> 635\$hiddenStr 636Вы уверены? 637<input type="button" value="\$Lang->{Restore}" 638 onClick="document.RestoreForm.action.value='Restore'; 639 document.RestoreForm.submit();"> 640<input type="submit" value="Нет" name="ignore"> 641</form> 642EOF 643 644 645# -------------------------- 646$Lang{Restore_Requested_on__hostDest} = "BackupPC: Restore Requested on \$hostDest"; 647$Lang{Reply_from_server_was___reply} = <<EOF; 648\${h1(\$str)} 649<p> 650Ответ с сервера: \$reply 651<p> 652Вернуться на Главную страницу узла <a href="\$MyURL?host=\$hostDest">\$hostDest</a>. 653EOF 654 655$Lang{BackupPC_Archive_Reply_from_server} = <<EOF; 656\${h1(\$str)} 657<p> 658Ответ с сервера: \$reply 659EOF 660 661 662# -------------------------------- 663$Lang{BackupPC__Delete_Backup_Confirm__num_of__host} = "BackupPC: Delete Backup Confirm #\$num of \$host"; 664# -------------------------------- 665$Lang{A_filled} = "a filled"; 666$Lang{An_unfilled} = "an unfilled"; 667$Lang{Are_you_sure_delete} = <<EOF; 668\${h1("Are you sure?")} 669<p> 670You are about to delete \$filled \$type backup #\$num of \$host. 671 672<form name="Confirm" action="\$MyURL" method="get"> 673 674<input type="hidden" name="host" value="\${EscHTML(\$host)}"> 675<input type="hidden" name="num" value="\$num"> 676 677<input type="hidden" name="doit" value="1"> 678<input type="hidden" name="action" value=""> 679 680Do you really want to do this? 681 682<input type="button" value="\${EscHTML(\$Lang->{CfgEdit_Button_Delete})}" 683 onClick="document.Confirm.action.value='deleteBackup'; 684 document.Confirm.submit();"> 685 686<input type="submit" value="No" name="ignore"> 687</form> 688EOF 689 690# ------------------------- 691$Lang{Host__host_Backup_Summary} = "BackupPC: Host \$host Backup Summary"; 692 693$Lang{Host__host_Backup_Summary2} = <<EOF; 694\${h1("Сводка по Узлу \$host")} 695<p> 696\$warnStr 697<ul> 698\$statusStr 699</ul> 700</p> 701\${h2("Пользовательские Действия")} 702<p> 703<form name="StartStopForm" action="\$MyURL" method="get"> 704<input type="hidden" name="host" value="\$host"> 705<input type="hidden" name="action" value=""> 706\$startIncrStr 707<input type="button" value="\$Lang->{Start_Full_Backup}" 708 onClick="document.StartStopForm.action.value='Start_Full_Backup'; 709 document.StartStopForm.submit();"> 710<input type="button" value="\$Lang->{Stop_Dequeue_Backup}" 711 onClick="document.StartStopForm.action.value='Stop_Dequeue_Backup'; 712 document.StartStopForm.submit();"> 713</form> 714</p> 715\${h2("Сводка Резервного Копирования")} 716<p> 717Щёлкните по номеру для просмотра и восстановления скопированных файлов. 718</p> 719<table class="tableStnd sortable" border cellspacing="1" cellpadding="3"> 720<tr class="tableheader"><td align="center"> № </td> 721 <td align="center"> Тип </td> 722 <td align="center"> Полный </td> 723 <td align="center"> Уровень </td> 724 <td align="center"> Дата Начала </td> 725 <td align="center"> Длительность(мин) </td> 726 <td align="center"> Возраст(дни) </td> 727 \$deleteHdrStr 728 <td align="center"> Локальный Путь Копии </td> 729</tr> 730\$str 731</table> 732<p> 733 734\$restoreStr 735</p> 736\${h2("Сводка Ошибок при Копировании")} 737<table class="tableStnd sortable" border cellspacing="1" cellpadding="3" width="80%"> 738<tr class="tableheader"><td align="center"> № </td> 739 <td align="center"> Тип </td> 740 <td align="center"> Журнал </td> 741 <td align="center"> Трансп. ошибок </td> 742 <td align="center"> Плохих файлов </td> 743 <td align="center"> Ресурс. проблем </td> 744 <td align="center"> tar ошибок </td> 745</tr> 746\$errStr 747</table> 748 749\${h2("Сводка по Файлам")} 750<p> 751Существующие файлы - файлы, уже находящиеся в пуле. 752Новые это те, которые добавлены к пулу. 753Пустые файлы не учитываются. 754Empty files and SMB errors aren\'t counted in the reuse and new counts. 755</p> 756<table class="tableStnd sortable" border cellspacing="1" cellpadding="3" width="80%"> 757<tr class="tableheader"><td colspan="2" bgcolor="#ffffff"></td> 758 <td align="center" colspan="3"> Всего </td> 759 <td align="center" colspan="2"> Существующие Файлы </td> 760 <td align="center" colspan="2"> Новые Файлы </td> 761</tr> 762<tr class="tableheader sortheader"> 763 <td align="center"> № </td> 764 <td align="center"> Тип </td> 765 <td align="center"> Файлов </td> 766 <td align="center"> Размер(МБ) </td> 767 <td align="center"> МБ/с </td> 768 <td align="center"> Файлов </td> 769 <td align="center"> Размер(МБ) </td> 770 <td align="center"> Файлов </td> 771 <td align="center"> Размер(МБ) </td> 772</tr> 773\$sizeStr 774</table> 775 776\${h2("Сводка по Сжатию")} 777<p> 778Степень сжатия существующих и новых файлов. 779</p> 780<table class="tableStnd sortable" border cellspacing="1" cellpadding="3" width="80%"> 781<tr class="tableheader"><td colspan="3" bgcolor="#ffffff"></td> 782 <td align="center" colspan="3"> Существующие Файлы </td> 783 <td align="center" colspan="3"> Новые Файлы </td> 784</tr> 785<tr class="tableheader sortheader"><td align="center"> № </td> 786 <td align="center"> Тип </td> 787 <td align="center"> Уровень Сжатия </td> 788 <td align="center"> Размер(МБ) </td> 789 <td align="center"> Сжатый(МБ) </td> 790 <td align="center"> Степень сж. </td> 791 <td align="center"> Размер(МБ) </td> 792 <td align="center"> Сжатый(МБ) </td> 793 <td align="center"> Степень сж. </td> 794</tr> 795\$compStr 796</table> 797EOF 798 799$Lang{Host__host_Archive_Summary} = "BackupPC: Host \$host Archive Summary"; 800$Lang{Host__host_Archive_Summary2} = <<EOF; 801\${h1("Сводка по Архиву \$host")} 802<p> 803\$warnStr 804<ul> 805\$statusStr 806</ul> 807 808\${h2("Пользовательские Действия")} 809<p> 810<form name="StartStopForm" action="\$MyURL" method="get"> 811<input type="hidden" name="archivehost" value="\$host"> 812<input type="hidden" name="host" value="\$host"> 813<input type="hidden" name="action" value=""> 814<input type="button" value="\$Lang->{Start_Archive}" 815 onClick="document.StartStopForm.action.value='Start_Archive'; 816 document.StartStopForm.submit();"> 817<input type="button" value="\$Lang->{Stop_Dequeue_Archive}" 818 onClick="document.StartStopForm.action.value='Stop_Dequeue_Archive'; 819 document.StartStopForm.submit();"> 820</form> 821 822\$ArchiveStr 823 824EOF 825 826# ------------------------- 827$Lang{Error} = "BackupPC: Error"; 828$Lang{Error____head} = <<EOF; 829\${h1("Error: \$head")} 830<p>\$mesg</p> 831EOF 832 833# ------------------------- 834$Lang{NavSectionTitle_} = "Сервер"; 835 836# ------------------------- 837$Lang{Backup_browse_for__host} = <<EOF; 838\${h1("Просмотр Резервной Копии Узла \$host")} 839 840<script language="javascript" type="text/javascript"> 841<!-- 842 843 function checkAll(location) 844 { 845 for (var i=0;i<document.form1.elements.length;i++) 846 { 847 var e = document.form1.elements[i]; 848 if ((e.checked || !e.checked) && e.name != \'all\') { 849 if (eval("document.form1."+location+".checked")) { 850 e.checked = true; 851 } else { 852 e.checked = false; 853 } 854 } 855 } 856 } 857 858 function toggleThis(checkbox) 859 { 860 var cb = eval("document.form1."+checkbox); 861 cb.checked = !cb.checked; 862 } 863 864//--> 865</script> 866 867<form name="form0" method="post" action="\$MyURL"> 868<input type="hidden" name="num" value="\$num"> 869<input type="hidden" name="host" value="\$host"> 870<input type="hidden" name="share" value="\${EscHTML(\$share)}"> 871<input type="hidden" name="action" value="browse"> 872<ul> 873<li> Копия № \$num, создание которой было начато примерно \$backupTime 874 (\$backupAge дней назад), 875\$filledBackup 876<li> Введите каталог: <input type="text" name="dir" size="50" maxlength="4096" value="\${EscHTML(\$dir)}"> <input type="submit" value="\$Lang->{Go}" name="Submit"> 877<li> Щёлкните на каталог, чтобы увидеть его содержимое. 878<li> Щёлкните на файл, чтобы восстановить его. 879<li> <a href="\$MyURL?action=dirHistory&host=\${EscURI(\$host)}&share=\$shareURI&dir=\$pathURI">История копий</a> текущего каталога. 880</ul> 881</form> 882 883\${h2("Содержание каталога \$dirDisplay")} 884<form name="form1" method="post" action="\$MyURL"> 885<input type="hidden" name="num" value="\$num"> 886<input type="hidden" name="host" value="\$host"> 887<input type="hidden" name="share" value="\${EscHTML(\$share)}"> 888<input type="hidden" name="fcbMax" value="\$checkBoxCnt"> 889<input type="hidden" name="action" value="Restore"> 890<br> 891<table width="100%"> 892<tr><td valign="top" width="30%"> 893 <table align="left" border="0" cellpadding="0" cellspacing="0" bgcolor="#ffffff"> 894 \$dirStr 895 </table> 896</td><td width="3%"> 897</td><td valign="top"> 898 <br> 899 <table border width="100%" align="left" cellpadding="3" cellspacing="1"> 900 \$fileHeader 901 \$topCheckAll 902 \$fileStr 903 \$checkAll 904 </table> 905 </td></tr></table> 906<br> 907<!-- 908This is now in the checkAll row 909<input type="submit" name="Submit" value="Restore selected files"> 910--> 911</form> 912EOF 913 914# ------------------------------ 915$Lang{DirHistory_backup_for__host} = "BackupPC: Directory backup history for \$host"; 916 917# 918# These two strings are used to build the links for directories and 919# file versions. Files are appended with a version number. 920# 921$Lang{DirHistory_dirLink} = "dir"; 922$Lang{DirHistory_fileLink} = "v"; 923 924$Lang{DirHistory_for__host} = <<EOF; 925\${h1("История каталога резервной копии для узла \$host")} 926<p> 927Здесь показаны все уникальные версии файлов, находящиеся во всех 928резервных копиях: 929<ul> 930<li> Щёлкните по номеру копии для возврата к просмотру копии; 931<li> Щёлкните по ссылке на каталог (\$Lang->{DirHistory_dirLink}) для захода 932 в этот каталог; 933<li> Щёлкните по версии файла (\$Lang->{DirHistory_fileLink}0, 934 \$Lang->{DirHistory_fileLink}1, ...) для загрузки этого файла; 935<li> Файлы из разных резервных копий, содержащие одно и то же, 936 имеют один и тот же номер версии (PleaseTranslateThis: except between v3 and v4 backups); 937<li> Файлы и каталоги, отсутствующие в конкретной копии, показаны 938 пустым прямоугольником; 939<li> Файлы одной версии могут отличаться разными атрибутами файловой системы. 940 Выберите номер копии, чтобы посмотреть эти атрибуты. 941</ul> 942 943\${h2("История \$dirDisplay")} 944 945<br> 946<table border cellspacing="2" cellpadding="3"> 947<tr class="fviewheader"><td>Номер копии</td>\$backupNumStr</tr> 948<tr class="fviewheader"><td>Время копирования</td>\$backupTimeStr</tr> 949\$fileStr 950</table> 951EOF 952 953# ------------------------------ 954$Lang{Restore___num_details_for__host} = "BackupPC: Restore #\$num details for \$host"; 955 956$Lang{Restore___num_details_for__host2} = <<EOF; 957\${h1("Детали восстановления № \$num для узла \$host")} 958<p> 959<table class="tableStnd" border cellspacing="1" cellpadding="3" width="90%"> 960<tr><td class="tableheader"> Номер </td><td class="border"> \$Restores[\$i]{num} </td></tr> 961<tr><td class="tableheader"> Запросил </td><td class="border"> \$RestoreReq{user} </td></tr> 962<tr><td class="tableheader"> Время запроса </td><td class="border"> \$reqTime </td></tr> 963<tr><td class="tableheader"> Результат </td><td class="border"> \$Restores[\$i]{result} </td></tr> 964<tr><td class="tableheader"> Текст ошибки </td><td class="border"> \$Restores[\$i]{errorMsg} </td></tr> 965<tr><td class="tableheader"> Исходящий узел </td><td class="border"> \$RestoreReq{hostSrc} </td></tr> 966<tr><td class="tableheader"> Номер исходящей копии </td><td class="border"> \$RestoreReq{num} </td></tr> 967<tr><td class="tableheader"> Исходящий ресурс </td><td class="border"> \$RestoreReq{shareSrc} </td></tr> 968<tr><td class="tableheader"> Узел назначения </td><td class="border"> \$RestoreReq{hostDest} </td></tr> 969<tr><td class="tableheader"> Ресурс назначения </td><td class="border"> \$RestoreReq{shareDest} </td></tr> 970<tr><td class="tableheader"> Время начала </td><td class="border"> \$startTime </td></tr> 971<tr><td class="tableheader"> Продолжительность </td><td class="border"> \$duration мин </td></tr> 972<tr><td class="tableheader"> Количество файлов </td><td class="border"> \$Restores[\$i]{nFiles} </td></tr> 973<tr><td class="tableheader"> Общий размер </td><td class="border"> \${MB} МБ </td></tr> 974<tr><td class="tableheader"> Скорость передачи </td><td class="border"> \$MBperSec МБ/с </td></tr> 975<tr><td class="tableheader"> Ошибок при создании Tar </td><td class="border"> \$Restores[\$i]{tarCreateErrs} </td></tr> 976<tr><td class="tableheader"> Ошибок при передаче </td><td class="border"> \$Restores[\$i]{xferErrs} </td></tr> 977<tr><td class="tableheader"> Журнал </td><td class="border"> 978<a href="\$MyURL?action=view&type=RestoreLOG&num=\$Restores[\$i]{num}&host=\$host">Весь</a>, 979<a href="\$MyURL?action=view&type=RestoreErr&num=\$Restores[\$i]{num}&host=\$host">Только ошибки</a> 980</tr></tr> 981</table> 982</p> 983\${h1("Список Файлов/Каталогов")} 984<p> 985<table class="tableStnd" border cellspacing="1" cellpadding="3" width="100%"> 986<tr class="tableheader"><td>Оригинальный файл/каталог</td><td>Восстановлен как</td></tr> 987\$fileListStr 988</table> 989EOF 990 991# ------------------------------ 992$Lang{Archive___num_details_for__host} = "BackupPC: Archive #\$num details for \$host"; 993 994$Lang{Archive___num_details_for__host2} = <<EOF; 995\${h1("Детали по Архиву № \$num узла \$host")} 996<p> 997<table class="tableStnd" border cellspacing="1" cellpadding="3" width="80%"> 998<tr><td class="tableheader"> Номер </td><td class="border"> \$Archives[\$i]{num} </td></tr> 999<tr><td class="tableheader"> Запросил </td><td class="border"> \$ArchiveReq{user} </td></tr> 1000<tr><td class="tableheader"> Время запроса </td><td class="border"> \$reqTime </td></tr> 1001<tr><td class="tableheader"> Результат </td><td class="border"> \$Archives[\$i]{result} </td></tr> 1002<tr><td class="tableheader"> Сообщение об ошибке </td><td class="border"> \$Archives[\$i]{errorMsg} </td></tr> 1003<tr><td class="tableheader"> Время запуска </td><td class="border"> \$startTime </td></tr> 1004<tr><td class="tableheader"> Продолжительность </td><td class="border"> \$duration min </td></tr> 1005<tr><td class="tableheader"> Журнал передачи данных </td><td class="border"> 1006<a href="\$MyURL?action=view&type=ArchiveLOG&num=\$Archives[\$i]{num}&host=\$host">Просмотреть</a>, 1007<a href="\$MyURL?action=view&type=ArchiveErr&num=\$Archives[\$i]{num}&host=\$host">Только ошибки</a> 1008</tr></tr> 1009</table> 1010<p> 1011\${h1("Список узлов")} 1012<p> 1013<table class="tableStnd" border cellspacing="1" cellpadding="3" width="80%"> 1014<tr class="tableheader"><td>Узел</td><td>Номер резервной копии</td></tr> 1015\$HostListStr 1016</table> 1017EOF 1018 1019# ----------------------------------- 1020$Lang{Email_Summary} = "BackupPC: Email Summary"; 1021 1022# ----------------------------------- 1023# !! ERROR messages !! 1024# ----------------------------------- 1025$Lang{BackupPC__Lib__new_failed__check_apache_error_log} = "BackupPC::Lib->new failed: check apache error_log\n"; 1026$Lang{Wrong_user__my_userid_is___} = 1027 "Wrong user: my userid is \$>, instead of \$uid" 1028 . "(\$Conf{BackupPCUser})\n"; 1029# $Lang{Only_privileged_users_can_view_PC_summaries} = "Only privileged users can view PC summaries."; 1030$Lang{Only_privileged_users_can_stop_or_start_backups} = 1031 "Only privileged users can stop or start backups on" 1032 . " \${EscHTML(\$host)}."; 1033$Lang{Invalid_number__num} = "Invalid number \${EscHTML(\$In{num})}"; 1034$Lang{Unable_to_open__file__configuration_problem} = "Unable to open \$file: configuration problem?"; 1035$Lang{Only_privileged_users_can_view_log_or_config_files} = "Only privileged users can view log or config files."; 1036$Lang{Only_privileged_users_can_view_log_files} = "Only privileged users can view log files."; 1037$Lang{Only_privileged_users_can_view_email_summaries} = "Only privileged users can view email summaries."; 1038$Lang{Only_privileged_users_can_browse_backup_files} = "Only privileged users can browse backup files" 1039 . " for host \${EscHTML(\$In{host})}."; 1040$Lang{Only_privileged_users_can_delete_backups} = "Only privileged users can delete backups" 1041 . " of host \${EscHTML(\$host)}."; 1042$Lang{Empty_host_name} = "Empty host name."; 1043$Lang{Directory___EscHTML} = "Directory \${EscHTML(\"\$TopDir/pc/\$host/\$num\")}" 1044 . " is empty"; 1045$Lang{Can_t_browse_bad_directory_name2} = "Не могу просмотреть каталог с неправильным названием" 1046 . " \${EscHTML(\$relDir)}"; 1047$Lang{Only_privileged_users_can_restore_backup_files} = "Only privileged users can restore backup files" 1048 . " for host \${EscHTML(\$In{host})}."; 1049$Lang{Bad_host_name} = "Bad host name \${EscHTML(\$host)}"; 1050$Lang{You_haven_t_selected_any_files__please_go_Back_to} = "Вы не выбрали ни один файл."; 1051$Lang{You_haven_t_selected_any_hosts} = "You haven\'t selected any hosts; please go Back to" 1052 . " select some hosts."; 1053$Lang{Nice_try__but_you_can_t_put} = "Nice try, but you can\'t put \'..\' in any of the file names"; 1054$Lang{Host__doesn_t_exist} = "Host \${EscHTML(\$In{hostDest})} doesn\'t exist"; 1055$Lang{You_don_t_have_permission_to_restore_onto_host} = "You don\'t have permission to restore onto host" 1056 . " \${EscHTML(\$In{hostDest})}"; 1057$Lang{Can_t_open_create__openPath} = "Can\'t open/create " 1058 . "\${EscHTML(\"\$openPath\")}"; 1059$Lang{Only_privileged_users_can_restore_backup_files2} = "Only privileged users can restore backup files" 1060 . " for host \${EscHTML(\$host)}."; 1061$Lang{Empty_host_name} = "Empty host name"; 1062$Lang{Unknown_host_or_user} = "Неизвестный узел или пользователь \${EscHTML(\$host)}"; 1063$Lang{Only_privileged_users_can_view_information_about} = "Only privileged users can view information about" 1064 . " host \${EscHTML(\$host)}." ; 1065$Lang{Only_privileged_users_can_view_archive_information} = "Only privileged users can view archive information."; 1066$Lang{Only_privileged_users_can_view_restore_information} = "Only privileged users can view restore information."; 1067$Lang{Restore_number__num_for_host__does_not_exist} = "Restore number \$num for host \${EscHTML(\$host)} does" 1068 . " not exist."; 1069$Lang{Archive_number__num_for_host__does_not_exist} = "Archive number \$num for host \${EscHTML(\$host)} does" 1070 . " not exist."; 1071$Lang{Can_t_find_IP_address_for} = "Can\'t find IP address for \${EscHTML(\$host)}"; 1072$Lang{host_is_a_DHCP_host} = <<EOF; 1073\$host is a DHCP host, and I don\'t know its IP address. I checked the 1074netbios name of \$ENV{REMOTE_ADDR}\$tryIP, and found that that machine 1075is not \$host. 1076<p> 1077Until I see \$host at a particular DHCP address, you can only 1078start this request from the client machine itself. 1079EOF 1080 1081# ------------------------------------ 1082# !! Server Mesg !! 1083# ------------------------------------ 1084 1085$Lang{Backup_requested_on_DHCP__host} = "Резервное копирование DHCP узла \$host (\$In{hostIP}) запросил" 1086 . " \$User с \$ENV{REMOTE_ADDR}"; 1087$Lang{Backup_requested_on__host_by__User} = "Резервное копирование узла \$host запросил \$User"; 1088$Lang{Backup_stopped_dequeued_on__host_by__User} = "Резервное копирование для узла \$host остановил/убрал из очереди \$User"; 1089$Lang{Restore_requested_to_host__hostDest__backup___num} = "Восстановление на узел \$hostDest, копию № \$num," 1090 . " запросил \$User с \$ENV{REMOTE_ADDR}"; 1091$Lang{Delete_requested_for_backup_of__host_by__User} = "Delete requested for backup #\$num of \$host" 1092 . " by \$User from \$ENV{REMOTE_ADDR}"; 1093$Lang{Archive_requested} = "Архивирование запросил \$User с \$ENV{REMOTE_ADDR}"; 1094 1095# ------------------------------------------------- 1096# ------- Stuff that was forgotten ---------------- 1097# ------------------------------------------------- 1098 1099$Lang{Status} = "Состояние"; 1100$Lang{PC_Summary} = "Сводка по Узлам"; 1101$Lang{LOG_file} = "Журнал"; 1102$Lang{LOG_files} = "Старые журналы"; 1103$Lang{Old_LOGs} = "Старые журналы"; 1104$Lang{Email_summary} = "Сводка по Письмам"; 1105$Lang{Config_file} = "Config file"; 1106# $Lang{Hosts_file} = "Hosts file"; 1107$Lang{Current_queues} = "Сводка по Очередям"; 1108$Lang{Documentation} = "Руководство"; 1109 1110#$Lang{Host_or_User_name} = "<small>Host or User name:</small>"; 1111$Lang{Go} = "Найти"; 1112$Lang{Hosts} = "Узлы"; 1113$Lang{Select_a_host} = "Выбрать узел ..."; 1114 1115$Lang{There_have_been_no_archives} = "<h2> Архивы отсутствуют </h2>\n"; 1116$Lang{This_PC_has_never_been_backed_up} = "<h2> Данный ПК ни разу не резервировался!! </h2>\n"; 1117$Lang{This_PC_is_used_by} = "<li>Данный ПК использует \${UserLink(\$user)}"; 1118 1119$Lang{Extracting_only_Errors} = "(Выбраны только ошибки)"; 1120$Lang{XferLOG} = "Весь"; 1121$Lang{Errors} = "Только Ошибки"; 1122 1123# ------------ 1124$Lang{Last_email_sent_to__was_at___subject} = <<EOF; 1125<li>Последнее письмо было отправлено \$mailTime, с темой "\$subj". 1126EOF 1127# ------------ 1128$Lang{The_command_cmd_is_currently_running_for_started} = <<EOF; 1129<li>Команда \$cmd выполняется для узла \$host, запущена \$startTime. 1130EOF 1131 1132# ----------- 1133$Lang{Host_host_is_queued_on_the_background_queue_will_be_backed_up_soon} = <<EOF; 1134<li>Узел \$host поставлен в фоновую очередь (скоро будет запущено резервное копирование). 1135EOF 1136 1137# ---------- 1138$Lang{Host_host_is_queued_on_the_user_queue__will_be_backed_up_soon} = <<EOF; 1139<li>Узел \$host поставлен в пользовательскую очередь (скоро будет запущено резервное копирование). 1140EOF 1141 1142# --------- 1143$Lang{A_command_for_host_is_on_the_command_queue_will_run_soon} = <<EOF; 1144<li>Команда для узла \$host поставлена в очередь команд (скоро будет запущена). 1145EOF 1146 1147# -------- 1148$Lang{Last_status_is_state_StatusHost_state_reason_as_of_startTime} = <<EOF; 1149<li>Состояние \"\$Lang->{\$StatusHost{state}}\"\$reason на \$startTime. 1150EOF 1151 1152# -------- 1153$Lang{Last_error_is____EscHTML_StatusHost_error} = <<EOF; 1154<li>Последняя ошибка: \"\${EscHTML(\$StatusHost{error})}\". 1155EOF 1156 1157# ------ 1158$Lang{Pings_to_host_have_failed_StatusHost_deadCnt__consecutive_times} = <<EOF; 1159<li>"Пропинговать" узел \$host не удалось \$StatusHost{deadCnt} раз(а) подряд. 1160EOF 1161 1162# ----- 1163$Lang{Prior_to_that__pings} = "Prior to that, pings"; 1164 1165# ----- 1166$Lang{priorStr_to_host_have_succeeded_StatusHostaliveCnt_consecutive_times} = <<EOF; 1167<li>\$priorStr to \$host были успешны \$StatusHost{aliveCnt} 1168 раз(а) подряд. 1169EOF 1170 1171$Lang{Because__host_has_been_on_the_network_at_least__Conf_BlackoutGoodCnt_consecutive_times___} = <<EOF; 1172<li>Because \$host has been on the network at least \$Conf{BlackoutGoodCnt} 1173consecutive times, it will not be backed up from \$blackoutStr. 1174EOF 1175 1176$Lang{__time0_to__time1_on__days} = "\$t0 to \$t1 on \$days"; 1177 1178$Lang{Backups_are_deferred_for_hours_hours_change_this_number} = <<EOF; 1179<li>Backups are deferred for \$hours hours 1180(<a href=\"\$MyURL?action=Stop_Dequeue_Backup&host=\$host\">change this number</a>). 1181EOF 1182 1183$Lang{tryIP} = " and \$StatusHost{dhcpHostIP}"; 1184 1185# $Lang{Host_Inhost} = "Host \$In{host}"; 1186 1187$Lang{checkAll} = <<EOF; 1188<tr><td class="fviewborder"> 1189<input type="checkbox" name="allFiles" onClick="return checkAll('allFiles');"> Выбрать всё 1190</td><td colspan="5" align="center" class="fviewborder"> 1191<input type="submit" name="Submit" value="Восстановить выбранные файлы и каталоги"> 1192</td></tr> 1193EOF 1194 1195$Lang{checkAllHosts} = <<EOF; 1196<tr><td class="fviewborder"> 1197<input type="checkbox" name="allFiles" onClick="return checkAll('allFiles');"> Выбрать всё 1198</td><td colspan="2" align="center" class="fviewborder"> 1199<input type="submit" name="Submit" value="Заархивировать выбранные узлы"> 1200</td></tr> 1201EOF 1202 1203$Lang{fileHeader} = <<EOF; 1204 <tr class="fviewheader"><td align=center> Название</td> 1205 <td align="center"> Тип</td> 1206 <td align="center"> Права</td> 1207 <td align="center"> №</td> 1208 <td align="center"> Размер</td> 1209 <td align="center"> Дата изменения</td> 1210 </tr> 1211EOF 1212 1213$Lang{Home} = "Главная"; 1214$Lang{Browse} = "Просмотр резервной копии"; 1215$Lang{Last_bad_XferLOG} = "Последний журнал с ошибками"; 1216$Lang{Last_bad_XferLOG_errors_only} = "Последний журнал с ошибками (только ошибки)"; 1217 1218$Lang{This_display_is_merged_with_backup} = <<EOF; 1219<li> Данное отображение объединено с копией № \$numF. 1220EOF 1221 1222$Lang{Visit_this_directory_in_backup} = <<EOF; 1223<li> Выберите номер копии для просмотра: <select onChange="window.location=this.value">\$otherDirs </select> 1224EOF 1225 1226$Lang{Restore_Summary} = <<EOF; 1227\${h2("Сводка Восстановлений")} 1228<p> 1229Щёлкните по номеру для более детального просмотра. 1230<table class="tableStnd sortable" border cellspacing="1" cellpadding="3" width="80%"> 1231<tr class="tableheader"><td align="center"> № </td> 1232 <td align="center"> Результат </td> 1233 <td align="right"> Дата начала </td> 1234 <td align="right"> Длительность(мин) </td> 1235 <td align="right"> Кол-во файлов </td> 1236 <td align="right"> Размер(МБ) </td> 1237 <td align="right"> tar ошибок </td> 1238 <td align="right"> Трансп. ошибок </td> 1239</tr> 1240\$restoreStr 1241</table> 1242<p> 1243EOF 1244 1245$Lang{Archive_Summary} = <<EOF; 1246\${h2("Архивная Сводка")} 1247<p> 1248Щёлкните по номеру архива для более детального просмотра. 1249<table class="tableStnd" border cellspacing="1" cellpadding="3" width="80%"> 1250<tr class="tableheader"><td align="center"> № </td> 1251 <td align="center"> Результат </td> 1252 <td align="right"> Время Запуска </td> 1253 <td align="right"> Продолжительность(мин)</td> 1254</tr> 1255\$ArchiveStr 1256</table> 1257<p> 1258EOF 1259 1260$Lang{BackupPC__Documentation} = "BackupPC: Documentation"; 1261 1262$Lang{No} = "нет"; 1263$Lang{Yes} = "да"; 1264 1265$Lang{The_directory_is_empty} = <<EOF; 1266<tr><td bgcolor="#ffffff">The directory \$dirDisplay is empty 1267</td></tr> 1268EOF 1269 1270#$Lang{on} = "on"; 1271$Lang{off} = "откл."; 1272 1273$Lang{backupType_full} = "полн."; 1274$Lang{backupType_incr} = "инкр."; 1275$Lang{backupType_active} = "active"; 1276$Lang{backupType_partial} = "частичный"; 1277 1278$Lang{failed} = "неудачно"; 1279$Lang{success} = "успешно"; 1280$Lang{and} = "и"; 1281 1282# ------ 1283# Hosts states and reasons 1284$Lang{Status_idle} = "бездействует"; 1285$Lang{Status_backup_starting} = "началось копирование"; 1286$Lang{Status_backup_in_progress} = "в процессе копирования"; 1287$Lang{Status_restore_starting} = "началось восстановление"; 1288$Lang{Status_restore_in_progress} = "в процессе восстановления"; 1289$Lang{Status_admin_pending} = "link pending"; 1290$Lang{Status_admin_running} = "link running"; 1291 1292$Lang{Reason_backup_done} = "копирование закончено"; 1293$Lang{Reason_restore_done} = "восстановление закончено"; 1294$Lang{Reason_archive_done} = "архивирование закончено"; 1295$Lang{Reason_nothing_to_do} = "без работы"; 1296$Lang{Reason_backup_failed} = "копирование не удалось"; 1297$Lang{Reason_restore_failed} = "восстановление не удалось"; 1298$Lang{Reason_archive_failed} = "архивирование не удалось"; 1299$Lang{Reason_no_ping} = "не \'пингуется\'"; 1300$Lang{Reason_backup_canceled_by_user} = "копирование прервано пользователем"; 1301$Lang{Reason_restore_canceled_by_user} = "восстановление прервано пользователем"; 1302$Lang{Reason_archive_canceled_by_user} = "восстановление прервано пользователем"; 1303$Lang{Disabled_OnlyManualBackups} = "автозапрет"; 1304$Lang{Disabled_AllBackupsDisabled} = "запрещено"; 1305 1306 1307# --------- 1308# Email messages 1309 1310# No backup ever 1311$Lang{EMailNoBackupEverSubj} = "BackupPC: no backups of \$host have succeeded"; 1312$Lang{EMailNoBackupEverMesg} = <<'EOF'; 1313To: $user$domain 1314cc: 1315Subject: $subj 1316$headers 1317Dear $userName, 1318 1319Your PC ($host) has never been successfully backed up by our 1320PC backup software. PC backups should occur automatically 1321when your PC is connected to the network. You should contact 1322computer support if: 1323 1324 - Your PC has been regularly connected to the network, meaning 1325 there is some configuration or setup problem preventing 1326 backups from occurring. 1327 1328 - You don't want your PC backed up and you want these email 1329 messages to stop. 1330 1331Otherwise, please make sure your PC is connected to the network 1332next time you are in the office. 1333 1334Regards, 1335BackupPC Genie 1336https://backuppc.github.io/backuppc 1337EOF 1338 1339# No recent backup 1340$Lang{EMailNoBackupRecentSubj} = "BackupPC: no recent backups on \$host"; 1341$Lang{EMailNoBackupRecentMesg} = <<'EOF'; 1342To: $user$domain 1343cc: 1344Subject: $subj 1345$headers 1346Dear $userName, 1347 1348Your PC ($host) has not been successfully backed up for $days days. 1349Your PC has been correctly backed up $numBackups times from $firstTime to $days days 1350ago. PC backups should occur automatically when your PC is connected 1351to the network. 1352 1353If your PC has been connected for more than a few hours to the 1354network during the last $days days you should contact IS to find 1355out why backups are not working. 1356 1357Otherwise, if you are out of the office, there's not much you can 1358do, other than manually copying especially critical files to other 1359media. You should be aware that any files you have created or 1360changed in the last $days days (including all new email and 1361attachments) cannot be restored if your PC disk crashes. 1362 1363Regards, 1364BackupPC Genie 1365https://backuppc.github.io/backuppc 1366EOF 1367 1368# Old Outlook files 1369$Lang{EMailOutlookBackupSubj} = "BackupPC: Outlook files on \$host need to be backed up"; 1370$Lang{EMailOutlookBackupMesg} = <<'EOF'; 1371To: $user$domain 1372cc: 1373Subject: $subj 1374$headers 1375Dear $userName, 1376 1377The Outlook files on your PC have $howLong. 1378These files contain all your email, attachments, contact and calendar 1379information. Your PC has been correctly backed up $numBackups times from 1380$firstTime to $lastTime days ago. However, Outlook locks all its files when 1381it is running, preventing these files from being backed up. 1382 1383It is recommended you backup the Outlook files when you are connected 1384to the network by exiting Outlook and all other applications, and, 1385using just your browser, go to this link: 1386 1387 $CgiURL?host=$host 1388 1389Select "Start Incr Backup" twice to start a new incremental backup. 1390You can select "Return to $host page" and then hit "reload" to check 1391the status of the backup. It should take just a few minutes to 1392complete. 1393 1394Regards, 1395BackupPC Genie 1396https://backuppc.github.io/backuppc 1397EOF 1398 1399$Lang{howLong_not_been_backed_up} = "not been backed up successfully"; 1400$Lang{howLong_not_been_backed_up_for_days_days} = "not been backed up for \$days days"; 1401 1402####################################################################### 1403# RSS strings 1404####################################################################### 1405$Lang{RSS_Doc_Title} = "BackupPC Server"; 1406$Lang{RSS_Doc_Description} = "RSS feed for BackupPC"; 1407$Lang{RSS_Host_Summary} = <<EOF; 1408Full Count: \$fullCnt; 1409Full Age/days: \$fullAge; 1410Full Size/GiB: \$fullSize; 1411Speed MB/sec: \$fullRate; 1412Incr Count: \$incrCnt; 1413Incr Age/Days: \$incrAge; 1414State: \$host_state; 1415Disabled: \$host_disabled; 1416Last Attempt: \$host_last_attempt; 1417EOF 1418 1419####################################################################### 1420# Configuration editor strings 1421####################################################################### 1422 1423$Lang{Only_privileged_users_can_edit_config_files} = "Only privileged users can edit configuration settings."; 1424$Lang{CfgEdit_Edit_Config} = "Редактирование Настроек"; 1425$Lang{CfgEdit_Edit_Hosts} = "Редактирование Узлов"; 1426 1427$Lang{CfgEdit_Title_Server} = "Сервер"; 1428$Lang{CfgEdit_Title_General_Parameters} = "Общие Параметры"; 1429$Lang{CfgEdit_Title_Wakeup_Schedule} = "Время Запуска Планировщика"; 1430$Lang{CfgEdit_Title_Concurrent_Jobs} = "Совмещение Заданий"; 1431$Lang{CfgEdit_Title_Pool_Filesystem_Limits} = "Лимиты Файловой Системы Пула"; 1432$Lang{CfgEdit_Title_Other_Parameters} = "Прочие Параметры"; 1433$Lang{CfgEdit_Title_Remote_Apache_Settings} = "Установки Удалённого Сервера Apache"; 1434$Lang{CfgEdit_Title_Program_Paths} = "Программные Пути"; 1435$Lang{CfgEdit_Title_Install_Paths} = "Установочные Пути"; 1436$Lang{CfgEdit_Title_Email} = "Почта"; 1437$Lang{CfgEdit_Title_Email_settings} = "Настройки Электронной Почты"; 1438$Lang{CfgEdit_Title_Email_User_Messages} = "Настройки Письма Для Пользователя"; 1439$Lang{CfgEdit_Title_CGI} = "CGI"; 1440$Lang{CfgEdit_Title_Admin_Privileges} = "Административные Привилегии"; 1441$Lang{CfgEdit_Title_Page_Rendering} = "Отображение Веб-Страницы"; 1442$Lang{CfgEdit_Title_Paths} = "Пути"; 1443$Lang{CfgEdit_Title_User_URLs} = "Пользовательские URL\'ы"; 1444$Lang{CfgEdit_Title_User_Config_Editing} = "Редактируемые Пользователем Настройки"; 1445$Lang{CfgEdit_Title_Xfer} = "Транспорт"; 1446$Lang{CfgEdit_Title_Xfer_Settings} = "Настройка Транспорта"; 1447$Lang{CfgEdit_Title_Ftp_Settings} = "Установки FTP"; 1448$Lang{CfgEdit_Title_Smb_Settings} = "Установки Smb"; 1449$Lang{CfgEdit_Title_Tar_Settings} = "Установки Tar"; 1450$Lang{CfgEdit_Title_Rsync_Settings} = "Установки Rsync"; 1451$Lang{CfgEdit_Title_Rsyncd_Settings} = "Установки Rsyncd"; 1452$Lang{CfgEdit_Title_Archive_Settings} = "Установки Archive"; 1453$Lang{CfgEdit_Title_Include_Exclude} = "Включить/Исключить"; 1454$Lang{CfgEdit_Title_Smb_Paths_Commands} = "Пути/Команды Smb"; 1455$Lang{CfgEdit_Title_Tar_Paths_Commands} = "Пути/Команды Tar"; 1456$Lang{CfgEdit_Title_Rsync_Paths_Commands_Args} = "Пути/Команды/Аргументы Rsync"; 1457$Lang{CfgEdit_Title_Rsyncd_Port_Args} = "Порты/Аргументы Rsyncd"; 1458$Lang{CfgEdit_Title_Archive_Paths_Commands} = "Пути/Команды Archive"; 1459$Lang{CfgEdit_Title_Schedule} = "Планировщик"; 1460$Lang{CfgEdit_Title_Full_Backups} = "Полное Резервирование"; 1461$Lang{CfgEdit_Title_Incremental_Backups} = "Инкрементальное Резервирование"; 1462$Lang{CfgEdit_Title_Blackouts} = "Перерыв"; 1463$Lang{CfgEdit_Title_Other} = "Прочее"; 1464$Lang{CfgEdit_Title_Backup_Settings} = "Другое"; 1465$Lang{CfgEdit_Title_Client_Lookup} = "Поиск Клиента"; 1466$Lang{CfgEdit_Title_User_Commands} = "Пользовательские Команды"; 1467$Lang{CfgEdit_Title_Hosts} = "Узлы"; 1468 1469$Lang{CfgEdit_Hosts_Comment} = <<EOF; 1470Чтобы добавить новый узел, нажмите на кнопку "Добавить" и введите имя узла. 1471Чтобы задать новому узлу настройки от другого уже существующего узла, 1472введите название узла как НОВЫЙ_УЗЕЛ=СУЩЕСТВУЮЩИЙ_УЗЕЛ. 1473Таким же образом можно переназначить настройки и уже существующему узлу. 1474Для удаления узла нажмите на кнопку "Удалить". 1475Чтобы изменения вступили в силу, нажмите на кнопку "Сохранить". 1476Резервные копии удалённых узлов сохраняются. Поэтому если Вы удалили узел 1477случайно, то просто добавьте его опять. 1478Чтобы удалить и сами резервные копии узла, Вам надо вручную удалить 1479каталог \$topDir/pc/УЗЕЛ. 1480EOF 1481 1482$Lang{CfgEdit_Header_Main} = <<EOF; 1483\${h1("Редактирование Основных Настроек")} 1484EOF 1485 1486$Lang{CfgEdit_Header_Host} = <<EOF; 1487\${h1("Редактирование Настроек Узла \$host")} 1488<p> 1489Примечание: Поставьте галочку рядом с "Заменить", если хотите изменить значение параметра индивидуально для этого узла. 1490<p> 1491EOF 1492 1493$Lang{CfgEdit_Button_Save} = "Сохранить"; 1494$Lang{CfgEdit_Button_Insert} = "Вставить"; 1495$Lang{CfgEdit_Button_Delete} = "Удалить"; 1496$Lang{CfgEdit_Button_Add} = "Добавить"; 1497$Lang{CfgEdit_Button_Override} = "Заменить"; 1498$Lang{CfgEdit_Button_New_Key} = "New Key"; 1499$Lang{CfgEdit_Button_New_Share} = "New ShareName or '*'"; 1500 1501$Lang{CfgEdit_Error_No_Save} 1502 = "Ошибка: не сохранено из-за наличия ошибок"; 1503$Lang{CfgEdit_Error__must_be_an_integer} 1504 = "Ошибка: \$var должно быть целым числом"; 1505$Lang{CfgEdit_Error__must_be_real_valued_number} 1506 = "Ошибка: \$var должно быть действительным числом"; 1507$Lang{CfgEdit_Error__entry__must_be_an_integer} 1508 = "Ошибка: \$var элемент \$k должен быть целым числом"; 1509$Lang{CfgEdit_Error__entry__must_be_real_valued_number} 1510 = "Ошибка: \$var элемент \$k должен быть действительным числом"; 1511$Lang{CfgEdit_Error__must_be_executable_program} 1512 = "Ошибка: \$var должно быть действительным путём исполняемой программы"; 1513$Lang{CfgEdit_Error__must_be_valid_option} 1514 = "Ошибка: \$var должно быть допустимой опцией"; 1515$Lang{CfgEdit_Error_Copy_host_does_not_exist} 1516 = "Копируемый узел \$copyHost отсутствует, создаётся узел \$fullHost. Удалите этот узел, если это не то, что Вам требуется."; 1517 1518$Lang{CfgEdit_Log_Copy_host_config} 1519 = "\$User copied config from host \$fromHost to \$host\n"; 1520$Lang{CfgEdit_Log_Delete_param} 1521 = "\$User deleted \$p from \$conf\n"; 1522$Lang{CfgEdit_Log_Add_param_value} 1523 = "\$User added \$p to \$conf, set to \$value\n"; 1524$Lang{CfgEdit_Log_Change_param_value} 1525 = "\$User changed \$p in \$conf to \$valueNew from \$valueOld\n"; 1526$Lang{CfgEdit_Log_Host_Delete} 1527 = "\$User deleted host \$host\n"; 1528$Lang{CfgEdit_Log_Host_Change} 1529 = "\$User host \$host changed \$key from \$valueOld to \$valueNew\n"; 1530$Lang{CfgEdit_Log_Host_Add} 1531 = "\$User added host \$host: \$value\n"; 1532 1533#end of ru.pm 1534