Главная » Статьи » Компы! » linux |
$ emerge system Здесь без постоянного коннекта с очень большой вероятностью рано или поздно последует сообщение об ошибке - о невозможности получить пакет имя_рек с такого-то адреса. Если имеется модем, к подбору исходников мы подошли ответственно, - не беда: активизируем еще одну виртуальную консоль (а на ней будет жить наша первозданная Live-система с CD) и прозваниваемся до провайдера через программу wvdial (а она у нас пока существует только в той самой виртуальной Live-системе), а потом повторяем последнюю команду. И, скорее всего, дело было в каком-нибудь исконно Gentoo'ском патчике объемом в пару килобайт, так что процедура эта нас не разорит. Если же обуяет приступ жадности, можно просто продолжить, а к emerge system вернуться в другой раз - после полного зеркалирования каталога distfiles с сайта Gentoo, и за казенный счет, разумеется :-) Этап четвертый: в недра ядра На предыдущем этапе были перестроены все компоненты базовой системы, кроме одного - зато самого главного: ядра системы. Перекомпиляция ядра - процедура, рано или поздно неизбежная для пользователя любого дистрибутива Linux, даже самого user-ориентированного. Перед пользователем же Source Based дистрибутива она встает с неотвратимостью рока уже при установке системы. Gentoo - опять не составляет исключения. Хотя в заключительных разделах я расскажу, как при крайней необходимости можно обойти этот этап, однако по хорошему к тому нет никаких причин. И потому, хотя тема пересборки ядра - совершенно отдельная, и нам придется еще не раз к ней возвращаться, применительно случаю постараюсь осветить ее здесь в минимально возможном объеме. Чтобы пересобрать ядро, для начала нужно иметь его исходники. Ни на инсталляционном диске, ни в составе тарбаллов stage2-3 мы их не найдем. Что делать? При подключении к Сети - все просто: к нашим услугам система портежей. Отправляемся в каталог /usr/portage, просматриваем содержимое подкаталога sys-kernel - и остается только дивиться свалившемуся на голову богачеству: даже отметая классово чуждые портежи ядер для Sparc, PPC, Alpha, на выбор предоставляется чуть не дюжина вариантов. Подчеркну, речь идет не о прекомпилированных ядрах, а именно о вариантах исходников, снабженных патчами, обеспечивающими дополнительные опции относительно ядра первозданного. Разумеется, и последнее, каноническое ядро от Линуса Торвальдса - тоже доступно (под известным именем vanilla-sources) для тех, кто хочет быть святее папы римского. Далее - фирменная коронка, gentoo-sources, это - лучший выбор с точки зрения функциональности). Ну и ac-sources - ядро от Алана Кокса, в патчах которого обычно воплощены новейшие достижения ядреной науки и техники. Есть и более специфичные варианты: usermode-sources - ядро для запуска Linux в Linux, в т.н. пользовательской моде (предназначается обычно для тестирования); openmosix-sources - ядро с поддержкой одноименной (openMosix) кластерной технологии, и т.д.. Так что в этих условиях главное - определиться с выбором. А потом - простая команда $ emerge sys-kernel/name-sources некоторый период ожидания, пока скачиваются сами исходники ядра и все необходимые патчи , еще чуть-чуть времени на развертывание архивов - и вперед, в каталог /usr/src/linux для конфигурирования. При наличии предусмотрительно скачанных исходников ядра, наиболее явно необходимых патчей и модемного подключения - сложнее, но не намного. Выполняем ту же команду. Если повезет - все по прежней схеме, но предупреждаю, шансов на это мало: почти наверняка при предварительном скачивании какой-то Gentoo-специфичный патч будет пропущен (учтем также наше пока еще очень ограниченное знакомство с системой портежей вообще - в дальнейшем такой ситуации можно и избежать). Но не беда: получив сообщение об ошибке, соединяемся с Сетью и либо скачиваем недостающий патч вручную (хоть через браузер lynx - полный адрес к недостающему компоненту будет выведен), либо (и это, товарищи, правильнее) запускаем процедуру по новой. Разорвав соединение по завершении установки исходников ядра. И не нужно бояться, что это больно ударит по карману: при соединении по линии, способной вынести протокол V90, скачивание большинства патчей занимает минуты. И wget при обрыве коннекта способен к докачке - так что непроизводительные расходы сведены к минимуму. Хуже, если нет ни полного комплекта исходников, ни модема. И это не смертельно, но придется кое-чем поступиться (надеюсь, не принципами). То есть: просто тупо распаковываем архив исходников ядра в каталог /usr/src, распаковываем и накладываем минимально необходимые патчи, далее - обычным порядком, как описано ниже. Можно и просто ограничиться каноническим ядром Линуса. Недостаток - кроме возможных потерь некоторых функций, эти действия не будут зафиксированы в базе данных портежей (имеющей место пребывания в каталоге /var/db/pkg), то есть система портежей о них как-бы и не узнает (на самом деле - не совсем, но все равно - этот способ может рассматриваться как временное решение). И еще одно временное решение - вообще отказаться от пересборки ядра. А как при этом получить возможность загрузить систему - я расскажу под занавес (если вы к тому времени сами не догадаетесь). В любом случае, кроме последнего, исходники ядра мы получили, так что можно отправляться в вышеупомянутый каталог /usr/src/linux (или /usr/src/linux-номер_версии-имя_варианта, без разницы, - первый лишь символическая на него ссылка). И давать команду $ make menuconfig которая сгенерирует меню настройки опций ядра. Любители отвечать черному экрану могут выбрать и make config - но я к ним не принадлежу. Сам процесс конфигурирования описывать не буду - это совсем другая история. Отмечу только обязательные опции. Первая из них - поддержка экспериментальных и разрабатываемых опций: большинство продвинутых возможностей ядра Linux описываются именно этими терминами (что не мешает им функционировать вполне справно). В секции файловых систем необходимо отметить поддержку файловых систем процессов (procfs), файловой системы виртуальной памяти (Virtual Memory Filesystem) и файловой системы устройств (devfs). И, конечно же, тех файловых систем, которые были размещены на созданных разделах (например, XFS или ext3fs - про поддержку ext2fs, надеюсь, не забудет ни один линуксоид). Ну и учесть поддержку требуемых устройств - сами знаете, что у вас вкручено в машине. Закончив с конфигурированием, выходим из системы меню (не забыв сохранить изменения) и даем последовательность команд: $ make dep $ make clean $ make bzImage $ make modules $ make modules_install Разумеется, не обязательно последовательно, можно и одной строкой, разделяя символом ; (или, правильнее, &&). А то и вообще в форме, рекомендованной руководством: $ make dep && make clean bzImage modules modules_install Теперь остается только скопировать образовавшийся образ ядра в загрузочный каталог $ cp /usr/src/linux/arch/i386/boot/bzImage /boot И ядерный вопрос можно считать закрытым. Хотя остается еще вопрос, косвенным образом с ним связанный - программы поддержки файловых систем. Их, в соответствие с выбором и предпочтениями, устанавливаем через систему портежей, например, команда $ emerge sys-apps/xfsprogs установит все необходимое для работы с файловой системой XFS. Напомню, что архив исходников пакета xfsprogs должен иметься в каталоге distfiles. Попутно через систему портежей можно установить и другие программы, однако я пока ограничился бы только тем, что облегчит завершение конфигурирования, а именно - службой консольной мыши: $ emerge sys-libs/gpm А теперь активизируем ее. Если мы имеем наиболее типичного ныне грызуна с колесиком и под разъем PS/2, это будет выглядеть так: $ gpm -t imps2 -m /dev/psaux И на следующих этапах гораздо проще будет выделять нужные фрагменты и вставлять их щелчком средней клавиши, нежели набрать вручную. Финал: постинсталляционное конфигурирование Собственно установка на этом закончена. Осталось довести систему до идеала не только изнутри, но и снаружи. И первый шаг здесь - настройка часового пояса: для Source Based дистрибутивов это не последнее дело (утилита управления компиляцией make обращает внимание на даты создания файлов). Реализуем просто: созданием символической ссылки $ ln -sf /usr/share/zoneinfo/path/timezonefile /etc/localtime Рискну предположить, что компонент пути path/timezonefile для большинства моих читателей окажется в диапазоне от Europe/Kaliningrad до Asia/Kamchatka (наличие Анадыря в нашей стране почему-то упорно игнорируется - но, слава богу, хоть о Петропавловске-Камчатском знают). Если системное время в BIOS установлено на не время по Гринвичу, дополнительно потребуется внести коррективы в файл /etc/rc.conf. Теперь увековечим монтирование новых файловых систем. Как? - очень просто, лобовым редактированием ответственного за сие файла /etc/fstab. Вызываем его: $ nano -w /etc/fstab И видим, если исключить комментарии, следующую картину: /dev/BOOT /boot ext2 noauto,noatime 1 1 /dev/ROOT / xfs noatime 0 0 /dev/SWAP none swap sw 0 0 /dev/cdroms/cdrom0 /mnt/cdrom iso9660 noauto,ro 0 0 proc /proc proc defaults 0 0 #tmpfs /dev/shm tmpfs defaults 0 0 Если мы следовали рекомендациям инструкции, остается только заменить символы верхнего регистра конкретными реалиями, как то: /dev/hda1, /dev/hda3, /dev/hda2. Или, что будет более корректно, /dev/discs/disc0/part1 и т.д., сняв при этом комментарий со строки #tmpfs. Если же использовалась какая-либо иная схема разбиения - можно в одной из ранее активизированных консолей с помощью команды mount без аргументов подсмотреть, какой раздел с какой файловой системой куда монтировался. И просто перетащить мышью (не зря же мы ее запускали) соответствующие значения в наш /etc/fstab. Ну и всякого рода коррективы (типа монтирования FAT-разделов, флоппи-дисков, zip-накопителей и еще чего требуется) также никто не запрещает. Внимательный читатель обратил внимание - в строке /dev/BOOT по умолчанию стоит значение noauto, предписывающее не монтировать соответствующий раздел автоматически при старте системы. Именно так рекомендуется делать при использовании GRUB - он принят в Gentoo в качестве загрузчика по умолчанию. Так вот, настало время обеспечить загрузку системы. Для этого даем команду grub и после появления одноименного приглашения последовательно вводим: grub> root (hd0,0) grub> setup (hd0) вслед за чем выходим из программы: grub> quit Начальный загрузчик установлен в первый раздел первого диска, тот самый, который в текущий момент смонтирован у нас как /boot. И который в дальнейшем не будет монтироваться автоматически - дополнительная защита, в первую очередь от человеческого фактора. Так что в дальнейшем не следует удивляться, если, собрав новое ядро системы, вы не сможете его сразу скопировать в каталог /boot - предварительно оный придется смонтировать вручную. Теперь остается GRUB настроить. Для этого посредством того же редактора создаем файл его меню: $ nano -w /boot/grub/menu.lst и записываем в него две секции. Строки первой относятся к GRUB в целом: default 0 timeout [значение_в_секундах] splashimage=(hd0,0)/boot/grub/splash.xpm.gz Она указывает на ОС, загружаемую по умолчанию, время ожидания выбора в секундах и описывает путь к файлу графической заставки. Последняя штатно - нечто вроде аметиста с морионовым оттенком. Не нравится - заставку можно убрать (стерев или закомментировав третью строку). Или - изготовить собственную соответствующем формате. Вторая секция описывает непосредственно загрузку Gentoo. title=My Love Gentoo Linux root (hd0,0) kernel /boot/имя_образа root=/dev/hda3 Первая строка - произвольное название пункта меню. Вторая определяет имя устройства, с которого будет загружаться система. Имя это дается в нотации GRUB, отличной от принятой в Linux: дело в том, что GRUB способен загрузить ядро с несмонтированной файловой системы, относящейся к незагруженной операционке. И это распространяется не только на Linux, но на практически любую ОС из клана свободных Unix'ов (например, на FreeBSD или OpenBSD). В третьей строке определяется имя образа ядра, подлежащего загрузке, и устройство, на котором после этого будет располагаться корневая файловая система. Если мы собирали собственное ядро, в качестве образа будет выступать тот самый файл /boot/bzImage, который был скопирован в каталог /boot после компиляции. Если же ядро не собиралось, значение kernel, как будет показано ниже, проще всего определить как /boot/linux. А имя устройства с корневым каталогом на этот раз дается в нотации Linux - ведь соответствующее ядро уже загружено, и оно знает, что такое /dev/hda?. Напомню еще раз, что все действия по редактированию меню GRUB можно выполнить, просто перетаскивая мышью соответствующие фрагменты руководства (там приведены все необходимые примеры) в наш /boot/grub/menu.lst и редактируя их в соответствии с собственными реалиями. И все же - суперфинал Настройкой загрузчика можно считать завершенной официальную часть инсталляции. Однако для полного счастья не хватает еще некоторых штрихов. Так, руководство рекомендует (и это - более чем резонно) оптимизировать режим работы жесткого диска на предмет использования DMA - что весьма способствует его быстродействию. Для такого рода штук предназначен файл /etc/conf.d/local.start. Открываем его в редакторе и после комментария (по умолчанию там больше ничего нет) приписываем строку hdparm -d 1 /dev/hda Если физических дисков больше одного - повторяем ее для каждого устройства. А затем, воспользовавшись случаем, обеспечим здесь же и загрузку консольной мыши при старте системы: gpm -t imps2 -m /dev/psaux Теперь обратимся к локализации. Не смотря на свое исходно американское происхождение, Gentoo - дистрибутив интернациональный (это ясно из состава команды его разработчиков). И потому в нем есть все базовые средства для работы с языками, отличными от американского. Нужно только немного потрудиться для их активизации. Достигается это можно редактированием файла /etc/rc.conf. Что может показаться необычным для пользователей Linux. Но мы помним, что в Gentoo принят порядок начальной загрузки в стиле BSD (а не в стиле Sysem V, как в большинстве распространенных дистрибутивов Linux, за исключением Slackware и его сородичей). Впрочем, вдаваться в подробности пока не буду - это тема для отдельной беседы. Пока же - голая практика: все, что мы хотим видеть загруженным при старте машины, должно быть явным образом указано в файле /etc/rc.conf. И именно в том порядке, в каком требуется. Так что открываем этот универсальный файл $ nano -w /etc/rc.conf отыскиваем в начале его строку KEYMAP="us" и заменяем чуждую нам Америку на что-нибудь родное, от братчиков Кирилла и Мефодия. Что именно - определяем в какой-либо из иных виртуальных консолей командой $ ls /usr/share/keymaps/i386/qwerty/ru* В ответ она выведет на экран такой список: /usr/share/keymaps/i386/qwerty/ru1.map.gz /usr/share/keymaps/i386/qwerty/ru2.map.gz /usr/share/keymaps/i386/qwerty/ru3.map.gz /usr/share/keymaps/i386/qwerty/ru4.map.gz /usr/share/keymaps/i386/qwerty/ru-cp1251.map.gz /usr/share/keymaps/i386/qwerty/ru.map.gz /usr/share/keymaps/i386/qwerty/ru-ms.map.gz /usr/share/keymaps/i386/qwerty/ru_win.map.gz /usr/share/keymaps/i386/qwerty/ru-yawerty.map.gz Можно видеть, что в нем присутствуют кириллические раскладки на все случаи жизни (а пути к ним, хотя и взяты с Live CD, соответствуют тем, что будут в инсталлированной системе). Дело, конечно, сугубо личное (я бы даже сказал, интимное), но по мне предпочтительна ru4: это раскладка для кодировки KOI8-R с Windows-маркировкой клавиш (не путать с собственно раскладкой для Windows-кодировки - ее, как видно из списка, тоже можно использовать) и переключением с латиницы на кириллицу по нажатию CapsLock. Так что вписываем KEYMAP="ru4" и переходим к следующей строке, определяющей экранный шрифт консоли - CONSOLEFONT. Очевидно, что умолчальное ее значение описывает шрифт без символов кириллицы. Но - их у нас есть, в чем легко убедиться, просмотрев каталог /usr/share/consolefonts. Шрифтов там немерянно, и среди них легко отыскиваются семейства alt-*.psf.gz и cp866-*.psf.gz. И то, и другое нам (почти) подходит - это экранные шрифты с символами кириллицы в кодировке CP866 (она же - альтернативная, кодировка DOS или IBM). Почему так - ведь мы только что установили раскладку KOI8-R для клавиатуры, да и шрифты (семейства koi8r-*.gz), имеются? Распространяться не буду, ограничившись словами: это лучше, Леня. А слово "почти" я добавил потому, что все имеющиеся стандартно кириллические шрифты далеки от совершенства как эстетически, так и медицински. Так что в дальнейшем лучше будет воспользоваться шрифтами из пакета Виктора Вагнера console-tools-cyrillic - там есть очень симпатичные экземпляры, но об этом - как-нибудь в другой раз. Пока же просто вписываем, например, CONSOLEFONT="cp866-8x16" И начинаем рассуждать логически: как же так, раскладка клавиатуры KOI8, а кодировка экранного шрифта - CP866. Ясно, что без загрузки карты трансформации одного в другое не обойтись. И такая карта у нас есть тоже - в каталоге /usr/share/consoletrans обнаруживаем файл koi2alt. Имя которого и вписываем в строку CONSOLETRASLATION="koi2alt" сняв с нее предварительно стоящий по умолчанию комментарий. Откладываем в уме, что таким образом карта соответствия будет загружена только на одной, первой, из виртуальных консолей (она же - консоль системная) - к этому мы еще вернемся. А пока, дабы покончить с файлом /etc/rc.conf, вспоминаем, что системные часы нашей машины установлены по местному часовому поясу (скорее всего - хотя в последнее время я осознал преимущества времени гринвичского) - тому самому, который мы определили через файл-ссылку /etc/localtime. И обращаем внимание, что строка CLOCK="UTC" указывает у нас, напротив, именно на время по Гринвичу (UTC=GMT). Заменяем UTC на localtime - и файл /etc/rc.conf можно закрывать (прочие его строки можно оставить без изменений, если вам лично не известны веские причины их сделать). А вот теперь пора довести до конца дело с картами соответствия. Открываем файл /etc/init.d/local: как явствует из названия, он предназначен для всякой всячины местного значения (и исполняется после всех остальных конфигурационных файлов). И вставляем в его конец с помощью редактора (или перетаскиваем мышью из данного руководства) простенький скрипт (оператор цикла): for i in 1 2 3 4 5 6 do echo -ne ' (K' > /dev/vc/$i done В первой его строке определяется значение переменной i (ее можно обозвать любым другим образом) как диапазона цифр от 1 до 6 (по умолчанию у нас именно шесть виртуальных консолей), вторая - указывает, что следующей строкой будет тело цикла. А тело цикла - вывод "магической последовательности" ESC-(K (именно она и обеспечивает активизацию карты соответствия) и ее перенаправление на виртуальные консоли, номера которых заданы переменной i, то есть /dev/vc/1 - /dev/vc6. Это - если используется файловая система устройств (devfs), в противном случае (если не был снят комментарий со строки tmpfs в файле /etc/fstab) имена консолей будут обычными - /dev/tty0 - /dev/tty5. Отступление для любовников (или невольников) кодировки CP1251. Все сказанное о русификации применимо и к ней. Нужно только определить в файле /etc/fstab загрузку соответствующих раскладки клавиатуры (они, как уже говорилось, имеются) и карты соответствия CP1251->CP866. А вот ее придется поискать (где - за ненадобностью не помню) или просто слямзить из любого отечественного дистрибутива - Altlinux или ASPLinux. Все же открою секрет - почему в консоли в любом случае предпочтительны экранные шрифты в кодировке DOS. Так уж исторически сложилось: вследствие аппаратных особенностей VGA-адаптеров (а в консоли мы имеем дело именно с режимом VGA, сколь бы крутой GeForce не стоял в машине) только они обеспечивают нормальный вывод на экран символов псевдографики. Кроме того, их просто больше, и некоторые среди них, как я говорил, лучше. Так что есть резон загружать именно их, даже если программы с псевдографикой не используются совсем. В том числе и Midnight Commander - но какой же русский не любит детей командира Нортона! Мы же пока завершим русификацию. Для чего установим собственно локаль последней строкой в файле /etc/init.d/local (опять прекрасный каламбур, господа!): export LANG="ru_RU.KOI8-R" Она обеспечит установку всех локально-зависимых переменных (не только страны, языка, набора символов, но и формата даты, времени, денежной единицы, и так далее) в значения, принятые для нашей многострадальной Отчизны. Тем не менее, для представления чисел я сделал бы исключение, добавив строку export LC_NUMERIC="POSIX" Ведь в любых программах, связанных со счетом, удобнее оперировать с десятичной точкой, а не запятой (а говорят, что некоторые такие программы этого просто требуют). В итоге, выполнив несложную последовательность действий, мы получили корректно русифицированную систему - русифицированную ничуть не хуже, чем те дистрибутивы, кириллической поддержкой в которых гордятся (и - справедливо гордятся) именитые отечественные разработчики - Altlinux и ASPLinux. А поскольку мы сделали все это своими руками и с полным пониманием сути действий, у нас тоже есть основание для гордости. Правда, "лобовым" способом, без учета специфики дистрибутива - но зато работающим всегда и везде. А к "идеологически праввильному" (для Gentoo) методу локализации можно будет вернуться позднее. Можно, конечно, активизировав внесенные в конфигурацию изменения командой etc-update, продолжать устанавливать программы (Иксы, например). Или даже начинать обычную работу - установленная система, внутри которой мы находимся, это вполне уже позволяет. Однако для полной проверки лучше все-таки сначала перезагрузиться. Итак, временно расстаемся с нашим новым Gentoo командой exit, после чего вновь оказываемся в системе Live CD, той же командой зарываем все виртуальные консоли, кроме первой (а у нас их могло расплодиться немало) и готовимся к выходу. Хотя - стоп. А собирали ли мы при установке ядро системы. Если да - все в порядке, тотальный unmount: $ umount /mnt/gentoo/boot $ umount /mnt/gentoo и что было смонтировано руками, а затем - reboot (или halt, если есть желание прерваться - при первой загрузке хорошо бы внимательно следить за ее ходом по сообщениям на экране). Если же ядро не собиралось (за отсутствием каких-то исходников - другого оправдания такому разгильдяйству нет), то совершаем последнее установочное действие: просто тупо копируем ядро с Live CD (оно, как мы уже убедились, не только работоспособно, но и поддерживает большинство жизненно необходимых функций): $ cp /cdroot/boot/linux /mnt/gentoo/boot/ Правда, у нас не собиралось не только ядро, но и модули. И это не беда, их тоже копируем с CD: cp -R /cdroot/lib/modules /mnt/gentoo/lib/modules А далее - все то же, размонтирование и перезагрузка. Конечно, в ходе ее мы рискуем получить кое-какие сообщения об ошибках, но, по моему опыту - ни одна из них не критична. И загрузившаяся система будет вполне пригодной к использования. По крайней мере, до тех пор, пока не разживемся всеми необходимыми архивами и все-таки ядро не пересоберем - от этого все равно не уйти. Заключительный аккорд У терпеливого читателя, добравшегося до этих строк, может возникнуть три совершенно законных вопроса: не слишком ли все это сложно, на кой все это нужно, и кому все это нужно. Постараюсь ответить последовательно. Относительно сложности - могу заверить, что это из той самой оперы, когда глаза боятся, а руки делают. Проверено на собственном опыте - причем первый из них проводился в подмосковной деревне, где не то что постоянного подключения к Сети - и телефона-то с модемом не было. И все исходники скачивались на службе (в полутора часах езды) и таскались домой на CD и съемном винчестере. И если праведно выполнять все заветы инструкции по установке, то сложностей возникнет не много (надеюсь, что и настоящий мемуар поспособствует их преодолению). Второй вопрос - а зачем их было преодолевать, когда можно легко и быстро развернуть любой пакетный дистрибутив, разработчики которого уже решили все мои проблемы. Отвечаю: решить-то они решили, но - не скажу плохо, просто в меру своих представлений, как это нужно народу (и конкретно мне, как его представителю). Gentoo же позволяет не просто поставить систему, идеально оптимизированную под железо, но и настроить ее тоже в соответствие именно со своим представлением об идеале. Причем - с полным осознанием, что и зачем делается, немало способствующим общему образованию. Ну а третий ответ очевиден из второго. Дистрибутив Gentoo нужен пользователю, которому требуется система, настроенная на максимальную производительность для конкретной тяжелой задачи - счетной, графической, GIS или CAD. Разработчику, которому надоело проводить время компиляции тысяч и тысяч строк кода за игрой в тетрис. Сисадмину, у которого в системе не должно быть ничего лишнего, но все необходимое должно быть. Изучающему Linux, которого не устраивают готовые рецепты, предлагаемые руководствами пакетных дистрибутивов. И наконец, тому, кто просто стремится к идеалу - пусть идеал этот и недостижим... | |
Просмотров: 8607 | Рейтинг: 5.0/1 |
Всего комментариев: 0 | |
Наш опрос |
Статистика |
Онлайн всего: 1 Гостей: 1 Пользователей: 0 |
Поиск |
Друзья сайта |
|