Курсовая работа по дисциплине "Создание и администрирование Web-узлов"
Материал из Bryansk Linux Users Group.
Пояснительная записка к курсовой работе по дисциплине"Создание и администрирование web-улов" на тему "Организация сервера Брянской Группы Пользователей Линукс"
Содержание |
Введение
Около полутора лет назад мною был создан сервер lug32.b-metro.net в сети "Брянское Информационное Метро"[1], основной задачей которого было предоставление информации об ОС Linux для пользователей этой сети, а в более широком плане - создание региональной площадки для общения и обмена опытом между брянскими пользователями - Брянской Группы Пользователей Линукс (Bryansk Linux Users Group, Bryansk LUG, LUG32). Информационную часть сайта составляла база знаний энциклопедического типа (вики, wiki), организованная на базе движка MediaWiki[2], а площадку для общения - форум phpBB[3]. Позже сайт стал доступен по адресам lug32.org.ru (из Интернета) и lug32.bks-tv.ru (из Интернета и из сети провайдера БКС-TV).
В рамках ресурса был организован ряд репозиториев (источников ПО) для популярных дистрибутивов Linux в сети Метро/Домолинк[4].
Таким образом, имея уже функционирующий достаточно долгое время ресурс, было принято решение заняться его реорганизацией в рамках курсовой работы с названием "Организация сервера Брянской Группы Пользователей Линукс", которая включала бы в себя:
- обновление программной части, модификацию движков в целях повышения удобства использования и внесения дополнительного функционала
- аналитическую работу, направленную на переработку текущих статей в wiki и составления FAQ и глоссария по результатам вопросов пользователей на форуме
- реструктуризацию репозиториев и удобное представление информации об их использовании
Работа с программной частью
Движок MediaWiki
На сервере была установлена MediaWiki версии 1.6. Последняя на настоящий момент актуальная версия - 1.13.2, однако обновление с старой 1.6 до последней версии несколько нетривиально.
Вначале необходимо установить новую версию в какое-либо другое место, воспользовавшись официальной документацией[5]. Обновление классическим способом через update.php не прошло, так как в БД версии MediaWiki версии 1.6 данные хранились в кодировке CP1251, закодированной поверх ещё и в UTF-8, то есть при прямом переносе кодировки портились. Было принято решения использовать так называемый xml dump - это файл формата xml в кодировке UTF-8, в котором хранится вся логическая структура wiki и структура статей, но не другие настройки. Затем этот файл можно импортировать в инсталляцию MediaWiki практически любой версии и никаких проблем с кодировками не возникнет.
Для продолжения процедуры необходимо создать файл AdminSettings.php в корне старой и новой wiki со следующими настройками:
sh: highlight: not found
You need to specify a language like this: <source lang="html">...</source>
Supported languages for syntax highlighting:
(error loading support language list)Соответственно необходимо указать пользователя БД и его пароль.
Переходим в папку старой инсталляции и выполняем
$ php maintenance/dumpBackup.php --full > ../dump.xml
Затем в уже новой инсталляции
$ php maintenance/importDump.php ../dump.xml
Это может занять достаточно много времени.
Теперь необходимо перенести картинки из старой wiki в новую. Это можно сделать простым копированием. Затем необходимо запустить скрипт для переиндексации картинок:
$ php maintanance/rebuildImages.php
Дополнения
Установлены так же были следующие дополнения, реализующие дополнительный функционал:
Сite - добавляет возможность создания сносок, использование которых можно видеть на этой странице. Простейший пример использования: в нужном месте в тексте создать ссылку, обрамлённую тегами <ref></ref>. Сноски будут нумероваться автоматически и добавляться к списку, месторасположение которого задаётся тегом <references/>.
ASHighlight - добавляет функцию подсветки синтаксиса для текста, обрамлённого тегами <source lang="имя_языка"></source>. Требует установленного пакета highlight в операционной системе на сервере.
Форум phpBB
На сервере был установлен форум phpBB версии 2.0.xx (довольно старой). Было принято решение обновить его до версии 3.0.3 (последняя стабильная версия на текущий момент), так как новая версия обладает расширенным функционалом (поддержка загрузки файлов, поддержка аутентификации через LDAP) и более удобна в использовании. В качестве документации по обновлению версий и конвертированию базы данных была использована инструкция с сайта phpBB[6].
Вначале необходимо установить новую версию phpBB (мы качаем сразу с русификацией), затем установить её, и только после этого сконвертировать БД старого форума в БД нового форума с помощью встроенного в установщик конвертора.
$ cd /home/arceny/www/ $ wget "http://phpbbtools.ru/download/file.php?id=6" $ tar xvf phpBB-3.0.3-rus.tar.bz2
Перейдя в броузере по адресу http://lug32.b-metro.net/phpBB-3.0.3-rus/ попадаем в интерфейс инсталлятора. Инсталлируем форум, следуя подсказкам. По окончании инсталляции опять переходим по адресу http://lug32.b-metro.net/phpBB-3.0.3-rus/install/ и выбираем "Конвертировать". Указываем имя старой БД, имя пользователя и пароль, относительный путь до каталога с файлами старого форума, например ../forum . Необходимо отметить, что в процессе конвертации файлы и база старого форума остаются без изменений. Это позволит в случае каких-то неудач и неисправностей легко повторить весь процесс. Однако большинство ошибок является не критичными и связаны с копированием файлов картинок из старого форума в новый. В процессе конвертор подскажет, для каких директорий нового форума нужны права на запись.
После конвертации вся база пользователей будет перенесена из старой инсталляции, поэтому входить на форум нужно под администраторским логином из старой инсталляции. Следует отметить, что некоторые пароли пользователей, содержащие символы кирилицы, могут быть перенесены некорректно, так как phpBB3 использует в качестве основной кодировки UTF-8, а phpBB2 - CP1251, следовательно хеши паролей будут отличаться. Если администраторский пароль содержит такие символы, необходимо его сменить до конвертации. Остальным же пользователям прийдётся воспользоваться функцией восстановления пароля или при невозможности восстановления обратиться к администратору. Кроме того необходимо создать индекс поиска в "Администраторский раздел -> Обслуживание -> Поисковые Индексы".
Новая версия phpBB получила возможности использовать в качестве сервера аутентификации LDAP, а так же загрузку файлов и картинок и другие расширенные функции. Об настройке аутентификации через LDAP - в следующем разделе.
Так же был немного модифицирован стандартный стиль форума prosilver, приведён к более привычному для пользователей виду..
Сервис LDAP
LDAP (англ. Lightweight Directory Access Protocol — «облегчённый протокол доступа к каталогам») — это сетевой протокол для доступа к службе каталогов X.500, разработанный как облегчённый вариант протокола DAP. LDAP — относительно простой протокол, использующий TCP/IP и позволяющий производить операции аутентификации (bind), поиска (search) и сравнения (compare), а также операции добавления, изменения или удаления записей. Обычно LDAP-сервер принимает входящие соединения на порт 389 по протоколам TCP или UDP. [7]
Служба каталогов - это своего рода базы данных, хранящие в себе информацию о пользователях, узлах и объектах сети, объединённые в иерархическую структуру. Цель их создания - упростить администрирование.
Почему лучше использовать LDAP вместо простой реляционной базы данных? Между этими двумя подходами есть существенные различия:
- модель хранения информации - иерархическая древовидная структура (у БД структура реляционная);
- LDAP ориентирован на ускорение операции чтения, тогда как в БД приоритетна операция записи;
- данные в LDAP меняются сравнительно редко;
- клиенты используют стандартный протокол LDAP, тогда как протокол взаимодействия БД с клиентами не стандартизирован;
- и наконец, служба каталогов обычно легко масштабируется (реплицируется) на несколько серверов.
Служба каталогов легко интегрируется с множеством сервисов, начиная от web-серверов, заканчивая CMS (content managment system).[8]
OpenLDAP - свободная реализация сервера LDAP. Именно его будем использовать.
Установка и настройка сервера OpenLDAP
На сервере используется операционная система Debian Linux. Устанавливаем OpenLDAP:
# apt-get install slapd ldap-utils
В файле /etc/default/slapd раскомментируем и изменим строку
SLAPD_SERVICES="ldap://127.0.0.1:389/ ldaps://127.0.0.1/"
Это необходимо для того, чтобы сервер OpenLDAP слушал запросы только на localhost. Теперь редактируем основной файл конфигурации /etc/ldap/slapd.conf, приведя его к примерно такому виду:
sh: highlight: not found
You need to specify a language like this: <source lang="html">...</source>
Supported languages for syntax highlighting:
(error loading support language list)Теперь необходимо создать записи в базе. Можно это делать вручную, но мы пойдём другим путём, использовав скрипт, идущий в Debian'овской сборке сервера. Выполняем
# dpkg-reconfigure slapd
Отвечаем на вопросы и в результате получаем созданную структуру каталогов, которую можно использовать в целях аутентификации.
Однако, не хватает наглядности. Этот недостаток исправляет приложение phpLdapAdmin[9], который, как следует из названия, является утилитой для администрирования LDAP сервера, написанной на php. Скачиваем с сайта разоработчика последнюю версию и распаковываем в каталог /home/arceny/www, в котором лежат файлы сайта. Копируем config/config.php.example в config/config.php. Настройки по-умолчанию вполне работоспособны.
Теперь можно попробовать войти в phpLdapAdmin по адресу http://lug.bryansk.ru/phpldapadmin/. Для авторизации используем логин cn=admin,dc=lug,dc=local и пароль, указанный при конфигурировании.
Теперь можно попробовать создать несколько тестовых пользователей. Но для начала создадим группу пользователей (ou, Organisational Unit). Выбираем в меню слева dc=lug,dc=local. Затем "создать потомка". Выбираем "Organisational Unit". Вводим имя. Всё, группа создана. Теперь туда можно добавлять пользователей. Это мы сделаем вручную. В phpLdapAdmin выбираем кнопку "Импорт". Вводим в текстовом поле примерно следующее:
dn: cn=Arceny,ou=users,dc=lug,dc=local
uid: Arceny
cn: Arceny
sn: Arceny
mail: arceny@yandex.ru
objectClass: inetOrgPerson
userPassword: {MD5}ХЕШ_ПАРОЛЯ
Где хеш пароля можно получить консольной командой slappasswd -h {MD5} или из php с помощью кода
sh: highlight: not found
You need to specify a language like this: <source lang="html">...</source>
Supported languages for syntax highlighting:
(error loading support language list)Теперь, когда несколько тестовых пользователей созданы, можно попробовать настроить phpBB.
LDAP и phpBB 3
В phpBB версии 3 имеется встроенная поддержка LDAP, однако она далека от совершенства.
Для конфигурирования необходимо перейти в раздел Администрирование -> Аутентификация и ввести следующие настройки:
- Выбрать метод аутентификации: LDAP
- Имя сервера LDAP: ldap://localhost
- Основное имя LDAP [ dn ]: dc=lug,dc=local
- Идентификационный номер LDAP [ uid ]: uid
- Email-атрибут LDAP: mail
- Пользователь LDAP [ dn ]: cn=admin,dc=lug,dc=local
- Пароль LDAP: qwerty
Теперь можно входить на форум с использованием логина и пароля из LDAP. phpBB хранит данные о пользователе по прежнему в своей БД, однако обращается при авторизации к LDAP. Если создать нового пользователя в LDAP, то phpBB создаст при первом логине его в своей базе данных, зачем-то скопировав даже хеш пароля.
При работе модуля LDAP phpBB поддерживает только авторизацию пользователей, но не регистрацию через форум или модификацию личных данных (в первую очередь пароля и e-mail, то есть тех данных, которые хранятся в LDAP). В Интернете не было найдено никаких решений этой проблемы, таким образом путей действий было несколько:
- написать отдельную регистрацию для LDAP и отключить регистрацию на форуме
- написать патч и пропатчить регистрацию на форуме
- написать патч и пропатчить изменение данных пользователя на форуме
- отказаться от LDAP в качестве средства интеграции wiki и phpBB и использовать другое решение
В процессе изысканий был найден работоспособный патч для MediaWiki под названием PHPBB/Users Integration[10] и установлен. Благодаря этой модификации в wiki можно входить с логином и паролем от форума, которые берутся из его БД. Встроенная регистрация wiki была отключена.
Таким образом пользователи получили возможность избежать двойных регистраций, править статьи в wiki и общаться на форуме используя один логин и пароль.
Дополнительные сервисы
Патч для многоадресной работы
Так как ресурс доступен из 3х разных сетей по разным адресам, возникла необходимость в организации механизма, который бы определял, из какой сети пришёл пользователь и менял в ссылках на страницы ресурса доменную часть. Например, пользователь, зашедший из сети Интернет видит на форуме в сообщении другого пользователя ссылку вида http://lug32.org.ru/mediawiki/index.php/Категория:FAQ , а пользователь, пришедший из сети Метро - http://lug32.b-metro.net/mediawiki/index.php/Категория:FAQ.
Был написан мод для форума phpBB, код в стандартном для phpBB модов стиле ниже:
sh: highlight: not found
You need to specify a language like this: <source lang="html">...</source>
Supported languages for syntax highlighting:
(error loading support language list)Слудует отметить, что для реализации аналогичного функционала в MediaWiki существует макрос {{SERVER}}, который генерирует ссылку вида http://lug.bryansk.ru
Переработка наполнения wiki
Статьи в wiki писались в течении довольно длительного периода разными людьми, и их структуризация по категориям была довольно слабой. В качестве схемы категоризации статей была выбрана следующая.
FAQ - категория для часто задаваемых вопросов. Основной статьёй является статья FAQ, в которой перечислены сами вопросы по группам, ответы на них или ссылки на статьи с ответами. По результатам работы форума и вопросов, задаваемых в сообществе этот FAQ планируется постоянно расширять.
Категория:Руководства - категория статей, содержащих относительно объёмные полные статьи и HOWTO по различным темам, близким к Linux и Свободному ПО.
Заметки и советы - различные небольшие статьи и заметки по разным темам, которые не относятся к вопросам и не являются подробными руководствами.
Разработка - статьи на тему программирования, в том числе и программирования под Linux системами. Статей мало, но они будут появляться :-)
Кроме того каждая из статей вышеперечисленных категорий может входить и в другие тематические категории, например: Сети, Администрирование, X System, Система и т.д. Полный список категорий можно просмотреть на странице Служебная:Categories wiki.
Многие из статей требуют доработки. Она производится как моими силами, так и силами сообщества.
Статьи нацелены как на новичков, которые делают только первые шаги и сталкиваются с вопросами, которые приходится решать каждому (например настройка интернета), так и на продвинутых пользователей и администраторов, которые через материалы могут обмениваться своим опытом друг с другом. Кроме того написать какую-либо статью или заметку - ещё и полезно для саморазвития, да и в следующий раз не прийдётся мучительно вспоминать, как именно что-либо было реализовано в прошлый раз. Например по некоторым вопросам, судя по статистике, к нам ходят и интернет пользователи, то есть ресурс полезен не только брянскому линуксоиду.
Репозитории
В рамках работы на сервере были размещены репозитории для ряда дистрибутивов для доступа из сети Метро/Домолинк.
Что такое репозиторий
Репозиторий — место, где хранятся и поддерживаются какие-либо данные. Чаще всего данные в репозитории хранятся в виде файлов, доступных для дальнейшего распространения по сети. В данном случае данными является программное обеспечение, предназначенное для различных дистрибутивов операционной системы Linux. Репозиторий позволяет быстро и без лишних поисков установить интересующее программное обеспечение, причём все зависимости удовлетворятся автоматически.
Организация зеркалирования
В настоящий момент в сети Метро/Домолинк доступны репозитории для дистрибутивов Ubuntu 7.10 | 8.04 | 8.10 , Debian 4.0 | 5.0 , Gentoo Linux.
Были созданы скрипты обновлений, они доступны на ftp://lug32.b-metro.net и выполняются по расписанию ежедневно. Для запуска по раписанию в Linux системах используется сервис crontab, конфигурация запуска следующая:
30 4 * * * arceny /data/linux/ubuntu-inet.sh > /home/arceny/rez-ubuntu.log 30 6 * * * arceny /data/linux/gentoo.sh > /home/arceny/rez-gentoo.log 10 18 * * * arceny /data/linux/debian.sh > /home/arceny/rez-debian.sh
Результирующий объём программного обеспечения достаточно велик и составляет в настоящий момент
48G debian/ 4,3G debian-backports/ 699M debian-multimedia/ 4,0G debian-security/ 91G gentoo-distfiles/ 102G ubuntu/
Инструмент для выбора репозиториев
Была написана страничка, использующая javascript, которая упрощает получение необходимых адресов репозиториев, она доступна по адресу http://lug.bryansk.ru/reposelector/
Более подробно об использовании репозиториев можно почитать на страницах Wiki.
Заключение
Подводя итог можно сказать, что был успешно проведён ряд работ, которые позволят увеличить популярность свободного ПО среди широкого круга лиц, показать альтернативу проприентарному программному обеспечению. Ведь использование свободного ПО, например, в коммерческой сфере и в образовании даёт неоспоримые преимущества - снижение финансовых издержек и возможность более глубокого изучения. Открытость систем позволяет вносить любые необходимые изменения, а не жить в рамках, предусмотренных разработчиком коммерческого продукта.
В ближайшем времени ресурс ждут ещё некоторые изменения, например планируется организовать в сети Метро/Домолик FTP архив с популярными дистрибутивами и дать рекламу сервера на официальных ресурсах ОАО Центртелеком.
Литература, ссылки
- ↑ Официальный сайт сети "Брянской Информационное Метро"
- ↑ Официальный сайт MediaWiki
- ↑ Официальный сайт форума phpBB
- ↑ Официальный сайт сети Домолинк-Брянск
- ↑ Установка MediaWiki
- ↑ Обновление phpBB с версии 2 на 3 (english)
- ↑ LDAP — Википедия
- ↑ LDAP - что это и с чем его едят...
- ↑ phpLdapAdmin - официальная страница
- ↑ Расширение MediaWiki PHPBB/Users Integration

