Малый зеркальный зал ролевых сайтов на arda.ru

Версия 2.7; Занимает 4,5G

Архивы

<< P C >>

Хорошо

Скопированные сайты
Выбрать по проверенности:
5 Тщательно проверенные
4 С недочётами копирования
3 Неполностью проверенные
2 Недостаточно даных
1 Проверка начата
0 Никто не проверял

С нами

Залы

Суть

Зеркальный зал предназначен для того, чтобы информация, содержащаяся на сайтах X Y Z, была в принципе доступна в интернете, даже если сами сайты X Y Z, их хостинги и-или домены прекратят своё существование любым способом.

Зеркальный зал - это:

Помощь

Если Вы хотите мне помочь хотя бы чем-нибудь - пожалуйста, пройдите по ссылкам справа (прежде всего по тем, что помечены красным цветом) и внимательно сравните сайты-отражения с оригиналами. О несоответствиях - сообщайте, пожалуйста, сюда.

Мне уже помогли:

jolaf shutofsky vetta_vetka shaplov eswet rbcf silent_gluk leotsarev katarinka-mur shanille

Иерархия

Зеркальный зал может участвовать в иерархии зеркальных залов, а может быть совершенно самостоятельным. Это определяется человеком, который скачал к себе копию скриптов зала и отредактировал конфигурационный файл в соответствии со своими целями.

Смысл участия в иерархии в том, что домен A, сервер и человек точно так же не вечны, как и домены X Y Z, их владельцы и сайты. Передавая же эстафету, мы можем надеяться продлить существование.

Если Вы заранее считаете, что создать самому зеркальный зал - слишком сложно для вас лично - не читайте дальше. :) Вы можете не читать дальше

По умолчанию предлагаемый для скачивания конфигурационный файл, а также и скрипт генерации нового зала обеспечивает участие в иерархии:

Грани

Техническое

Скрипты, используемые в малом зале: В опубликованной в данный момент версии 2.7 пока не доделано кое что задуманное:
  1. сбор .tar.gz архивов с "дочерних" залов
  2. функционал генерации виртуального хоста для вебсервера (я не могу охватить всё многообразие)

Ресурсы

Для создания своего зеркального зала нужны следующие ресурсы:
  1. реальный или виртуальный сервер на Linux/FreeBsd/CentOs/Debian... любом другом Unix'e. Root доступ не обязателен.
  2. веб-сервер с PHP (c работающими функциями file_exists file_get_contents и preg_match)
  3. возможность создавать произвольное число виртуальных хостов на этом сервере.
  4. доменное имя, которму можно вписать в зону * IN A .
  5. bash, wget (версии не менее примерно 1.17), perl, awk, iconv, sed, md5, utf-8 локаль на сервере.
  6. не вполне кривые руки того, кто будет редактировать эти скрипты и запускать их.

Инструкция

Положим, Вы решили сделать свой зеркальный зал на основе моих скриптов.
  1. Домен

    Все сайты, которые Вы покажете интернету в своём зеркальном зале, имели свои отдельные исходные доменные имена (чаще всего никак друг с другом не связанные), лежали на разных серверах с разными IP.

    Все они в предыдущем зале получили отдельные доменные имена третьего, четвёртого или более уровня в домене предыдущего зала.

    Так, я владею, например, доменом второго уровня arda.ru, который хочу применить для зеркального зала. И сервером на IP адресе 195.91.162.195. Я захожу в интерфейс управления записями в зоне этого домена (у регистратора доменов или у хостера, или на своём ДНС сервере) и добавляю туда запись A вида:

    * IN A 195.91.162.195
    
    и сохраняю зону. Всё. Все необходимые действия с доменом сделаны. Убедиться в результате можно по мере обновления зоны на ДНС серверах, набирая в командной строке любого компьютера ping mirrorpg.arda.ru и убеждаясь, что IP выдаётся тот самый.

    Если Вы решили задействовать домен третьего или более уровня в принадлежащем Вам домене. Например archive.allrpg.ru в домене allrpg.ru. Следует в интерфейсе управления записями в зоне домена allrpg.ru добавить запись A следующего вида:

    *.archive IN A 195.91.162.195
    
    Аналогично - ping mirrorpg.archive.allrpg.ru и убеждаемся в результате.
  2. Вебсервер

    К сожалению, готовых скриптов, которые бы подошли к любому вебсерверу, сегодня не завезли. Кроме того, авторы всех таких программ систематически меняют синтаксис и параметры конфигурационных файлов, а также способ их расположения в операционной системе.

    Так как данная система рассчитана на многолетнее существование, я не могу предполагать, что написанный мной сегодня скрипт будет корректно делать конфиг для apache или nginx хотя бы через два года.

    Поэтому, если Вы не хотите делать много ручной работы - Вам придётся написать минимальный скрипт для Вашего вебсервера самостоятельно. Пример для apache 2.2:

    echo "<VirtualHost 195.91.162.195:80>
    ServerName $2
    ServerAlias $3 $4
    ServerAdmin webmaster@mirrorpg.arda.ru
    DocumentRoot /home/www/servers/$2/html
    </VirtualHost>
    ">>/usr/local/etc/apache22/Includes/mirrorpg.conf
    mkdir /home/www/servers/$2/html
    
  3. Конфигурация

    Правильнее всего все дальнейшие действия совершать в Unix Shell. Если Вы не умеете этим пользоваться - научитесь.
    mkdir ~/mirrorpg
    cd ~/mirrorpg
    wget http://mirrorpg.arda.ru/mirrorpg/mirrorpg-config
    sh ./mirrorpg-config
    
    Этот скрипт скачает все остальные скрипты и установит им возможность исполнения.

    Теперь отредактируйте скачанный mirrorpg-config, указав в нём все требуемые параметры. Описание того, каков смысл этих параметров непосредственно там же и написан, поэтому здесь я его не привожу.

  4. Создание зала

    Запускаете ./mirrorpg-generate Этот скрипт сделает следующее:
    1. Создаст виртуальный хост для вашего основного сайта и поместит в него скрипты и такой же index.php
    2. Создаст каталоги .First .Latest .Previous для хранения архивов сайтов
    3. Скачает по крайней мере в каталог .First все файлы с предыдущего зала из каталога First
    4. Проверит md5 контрольные суммы скачанных архивов, не совпавшие сочтёт неудачными и сотрёт
    5. Для каждого из проверенных архивов создаст виртуальный хост
    6. Развернёт эти архивы в их виртуальные хосты
    7. Внесёт информацию об этих хостах в mirrorpg_good.csv
    8. Преобразует mirrorpg_good.csv в mirrorpg_good.htm и поместит эти два файла на основной сайт зала
    Если Вы после этого перезапустите вебсервер (для Apache это обычно apachectl restart) - то по адресу mirrorpg.Ваш_Домен увидите уже свой зеркальный зал со всеми ссылками на скрипты, на каталоги First Latest Previous и на копии сайтов, в точности как и на этой странице.

    Пройдя по ссылкам справа под заголовком Хорошо - убеждаетесь в том, что зеркала работают.

  5. Обновление

    Прежде чем запускать обновление копий сайтов с их оригиналов, мы настоятельно рекомендуем пройтись по ссылкам раздела Хорошо и убедиться в том, что оригинальные сайты работают.

    Если конкретный оригинальный сайт не работает, его следует исключить из процедуры обновления зеркала. Если этого не сделать, то вы испортите то содержимое копии сайта, что показывается в вашем зеркальном зале.

    Для исключения сайта из процедуры текстовым редактором перенесите относящиеся к нему строки (начинающиеся со строки SqBuildLines его_домен и завершающиеся строкой SqAddCsv в файл mirrorpg-abandoned

    Если теперь Вы запустите скрипт mirrorpg-allsites, то по окончании его работы скрипта содержимое лежащих у Вас прописанных в него сайтов будет обновлено с их оригиналов, а свежие архивы получившихся копий будут сложены в папку Latest.

    Предыдущие архивы этих копий будут передвинуты в папку Previous.

Добавить ещё сайт в свой зал

Собственно КОНФИГ ОБНОВЛЕНИЯ САЙТОВ зеркального зала - файл mirrorpg-allsites

Каждая секция сайта - это последовательность "кирпичиков". Некоторые из "кирпичиков" достаточно очевидны - например, выкачивание одного файла с очевидного URL

Работая над конкретным сайтом, я экспериментирую с ним в файле mirrorpg-1site, начиная с простейшего сочетания "кирпичиков" SqBackStatic; SqReplace. Редактирую, запускаю этот скрипт и смотрю на результат.

Если какая-то часть вызывает сложности, но похожа на уже существующую на каком-то из старых сайтов в allsites - я копирую соответствующий кусок из старой секции сюда.

Если какая-то сложная конструкция явно потребуется ещё не раз - оформляю её в функцию и, отладив, перебрасываю в mirrorpg-functions

По получению успешной конфигурации нового сайта в 1site я добавляю строку SqAddCsv в его конец, запускаю его ещё раз, после чего полученную конфуграцию переношу в mirrorpg-allsites как секцию данного сайта.

Устройство

Данный раздел написан ради понимания вами того, как это устроено.

Что копируем

Любой находящийся в сети на одном домене сайт, доступный по http протоколу. При условии, что применяется достаточно неиспохабленный HTML 3-4 версии, ссылки на содержательные страницы сайта прописаны как A HREF, ссылки на стилевые файлы заданы тегами STYLE, URL картинок в HTML коде и CSS файлах соответствуют тегу IMG и url() соответственно.

Что получается

Статическая HTML копия всех страниц сайта - "отражение" сайта на какой-то момент времени. JS функциональность в некоторых случаях может сохраняться, Macromedia Flash и Java Applett - скорее не сохраняются. Часть стилевых решений, фоновые изображения могут не сохраняться.

Основой обработчика является программа wget с ключами -x -nH -np -r -l 0 - отсюда проистекают особенности:

Именование и типы файлов
Допустимыми символами имён файлов на unix файловой системе являются любые, кроме / и нулевого байта, поэтому все URI могут быть сохранены в виде точно таких полных путей, какими они отображаются в адресной строке броусера или указаны в HREF.

Однако есть 3 важных относительно легко исправимых исключения:

  1. /some_path/ вебсервером воспринимаются как показ файла /some_path/index.html - с этим ничего делать не надо, и так хорошо
  2. /some_path/some_file.php?some_query - вебсервер отображает /some_path/some_file.php и передаёт ему QUERY_STRING some_query - требует наличия файла-обработчика /some_path/some_file.php, который отрабатывает три ситуации:
    1. пустая query_string - показываем то, что было по URI /some_path/some_file.php
    2. непустая query_string и файл /some_path/some_file.php?some_query существует - показываем его
    3. непустая query_string и файла нет - вовзращаем Error 404
  3. /some_path/?some_query - вебсервер отображает /some_path/index.html и передаёт ему QUERY_STRING some_query - точно такой же обработчик, как в предыдущем пункте.
Для работы такого обработчика в настроенных сравнительно по умолчанию вебсерверах и требуется PHP. Хотя можно применить и SSI или какой другой язык программирования, лишь бы его логика позволяла простым и незамысловатым способом поместить в теле самого файла some_file.php (index.html) как HTML код страницы "как она была скачана", так и код обработчика.

Наиболее совершенная функция "дорисовывания обработчика Query" ко всем случившимся в дереве подкаталогов с текущего каталога таким файлам - SqAddQueryReportTree.

Менее совершенная ранее написанная - SqFilePage. Она обрабатывает только файлы в текущем каталоге, требует задания вручную имени .php файла и подразумевает, что самого такого файла как страницы нету, а есть только страницы с query.

Для корректной работы получившихся обработчиков в случае, если файлы some_file не имеют расширения .php - требуется настройка вебсервера. Например, если на сайте такие страницы имеют расширение /shtml - при сервере Apache следует добавить в конфиг сайта в файле allsites строку

echo 'AddHandler application/x-httpd-php .shtml'>.htaccess
Структура каталогов сайта

Где что лежит

Если Вы не редактировали конфиг, следующие две структуры не создаются.

Version 2.7 Public Doimain. Общественное достояние.
Valid HTML 4.01 Transitional Правильный CSS!