The OpenNET Project / Index page

[ новости /+++ | форум | wiki | теги | ]

Выпуск дистрибутива NixOS 21.05, использующего пакетный менеджер Nix

02.06.2021 21:50

Представлен выпуск дистрибутива NixOS 21.05, основанного на пакетном менеджере Nix и предоставляющего ряд собственных разработок, упрощающих настройку и сопровождение системы. Например, в NixOS используется единый файл системной конфигурации (configuration.nix), предоставляется возможность быстрого отката обновлений, присутствует поддержка переключения между различными состояниями системы, поддерживается установка индивидуальных пакетов отдельными пользователями (пакет ставится в домашний каталог), возможна одновременная установка нескольких версий одной программы, обеспечены воспроизводимые сборки. Размер полного установочного образа с KDE 1.4 ГБ, GNOME - 1.8 ГБ, сокращённого консольного варианта - 660 МБ.

Основные новшества:

  • Добавлено 12985 пакетов, удалено 14109 пакетов, обновлено 16768 пакетов. Обновлены версии компонентов дистрибутива, в том числе gcc 10.3.0, glibc 2.32, mesa 21.0.1 . Базовое ядро Linux обновлено с версии 5.4 до 5.10, в качестве опции предложено ядро 5.12.
  • Рабочие столы обновлены до KDE 5.21.3 (+ KDE Applications 20.12.3), GNOME 3.40 и Cinnamon 4.8.1.
  • Добавлены новые сервисы с GNURadio 3.8, сервером аутентификации Keycloak и дискуссионной платформой Discourse.

При использовании Nix пакеты устанавливаются в отдельное дерево директорий /nix/store или поддиректорию в каталоге пользователя. Например, пакет устанавливается как /nix/store/f2b5...8a163-firefox-89.0.0/, где "f2b5..." является уникальным идентификатором пакета, используемым для контроля зависимостей. Пакеты оформляются в виде контейнеров, содержащих необходимые для работы приложений компоненты. Аналогичный подход применяется в пакетном менеджере GNU Guix, который основан на наработках Nix.

Между пакетами возможно определение зависимостей, при этом для поиска наличия уже установленных зависимостей используется сканирование хэшей-идентификаторов в директории установленных пакетов. Возможна как загрузка готовых бинарных пакетов из репозитория (при установке обновлений к бинарным пакетам загружаются только delta-изменения), так и сборка из исходных текстов со всеми зависимостями. Коллекция пакетов представлена в специальном репозитории Nixpkgs.

  1. Главная ссылка к новости (https://discourse.nixos.org/t/...)
  2. OpenNews: Доступен пакетный менеджер GNU Guix 1.3 и дистрибутив на его основе
  3. OpenNews: Выпуск дистрибутива NixOS 20.09, использующего пакетный менеджер Nix
  4. OpenNews: Опасные уязвимости в Firejail, Connman и GNU Guix
  5. OpenNews: Выпуск GNU Mes 0.23, инструментария для самодостаточной сборки дистрибутивов
  6. OpenNews: Инициатива GNU Assembly, продвигающая новую модель управления проектом GNU
Лицензия: CC-BY
Тип: Программы
Короткая ссылка: https://opennet.ru/55257-nixos
Ключевые слова: nixos
При перепечатке указание ссылки на opennet.ru обязательно
Обсуждение (43) Ajax | 1 уровень | Линейный | +/- | Раскрыть всё | RSS
  • 1.1, Аноним (1), 21:56, 02/06/2021 Скрыто модератором [﹢﹢﹢] [ · · · ]
  • –10 +/
     
     
  • 2.4, Аноним (4), 22:06, 02/06/2021 Скрыто модератором
  • +/
     

  • 1.2, Аноним (2), 21:57, 02/06/2021 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    >Добавлено 12985 пакетов, удалено 14109 пакетов, обновлено 16768 пакетов

    Капитально они там всё меняют.


    >сокращённого консольного варианта - 660 МБ.

    Какой-то он здоровый для консольного.

     
     
  • 2.6, Аноним (6), 23:06, 02/06/2021 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Для системы, у которой установленная версия будет занимать под терабайт, вполне нормально. У конкурентов для сравнения 1000 пакетов в пару гигов влезает в установленном виде (без некоторых огромных)
     
     
  • 3.8, scor (ok), 23:09, 02/06/2021 [^] [^^] [^^^] [ответить]  
  • +4 +/
    > Для системы, у которой установленная версия будет занимать под терабайт

    Ну, это мягко говоря, не соответствует действительности.:)


     
     
  • 4.16, Аноним (16), 00:15, 03/06/2021 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Если не заниматься чисткой старых версий софта, то при обновлениях ось может и до терабайта вырасти. Nix вообще устроен так, что любой минимальный чих в зависимостях вызывает пересборку всего дочернего софта. Обновление bash'а, который используется как основное средство сборки, вызывает дублирование пакетов всего репозитория с новыми хэшами в именах.
     
     
  • 5.17, scor (ok), 00:38, 03/06/2021 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > Если не заниматься чисткой старых версий софта, то при обновлениях ось может
    > и до терабайта вырасти. Nix вообще устроен так

    Тут как бы это... Я как бы реально под ним работаю. Занимаюсь работой, а не чисткой софта, обновляюсь регулярно, террабайта физически на машине нет.:)

    ❯ df -h
    Filesystem        Size  Used Avail Use% Mounted on
    ...
    zroot/root/nixos  397G  129G  269G  33% /
    ...

     
  • 2.7, scor (ok), 23:07, 02/06/2021 [^] [^^] [^^^] [ответить]  
  • +1 +/
    >>Добавлено 12985 пакетов, удалено 14109 пакетов, обновлено 16768 пакетов
    > Капитально они там всё меняют.

    Чёт даже хз, что это за цифры. По факту там всего коммитов за последние полгода:
    ❯ git log --since="6 month ago" --pretty=oneline --abbrev-commit | wc -l
    25263

    из них новый пакетов:
    ❯ git log --since="7 month ago" --pretty=oneline --abbrev-commit | grep 'init at' | wc -l
    1878

    Даже и не знаю, что они имелли сказать такой статистикой.

    > Какой-то он здоровый для консольного.

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

     
     
  • 3.15, Аноним (16), 00:07, 03/06/2021 [^] [^^] [^^^] [ответить]  
  • +/
    Предполагаю, что надо не по срезам master-ветки сравнивать, а смотреть разницу между ветками.
     
     
  • 4.34, scor (ok), 15:59, 03/06/2021 [^] [^^] [^^^] [ответить]  
  • +/
    Возможно. Но у меня всё равно не получилось вывести похожие цифры. В общем, не зная алгоритма подсчёта, видимо сложно будет что-то с чем-то сравнивать.
    Просто мне значения показались сильно странными. Но оставлю это на совести авторов анонса.:)
     

  • 1.5, Аноним (5), 22:56, 02/06/2021 [ответить] [﹢﹢﹢] [ · · · ]  
  • –4 +/
    Systemd и двоичный кэш не нужны. Идея интересная, но всё портят эти два момента. Гуикс не альтернатива, т.к. там надо пердолиться с блобами + плохо документированный пастух вместо системы инициализации.
     
     
  • 2.9, scor (ok), 23:11, 02/06/2021 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > Systemd и двоичный кэш не нужны. Идея интересная, но всё портят эти
    > два момента.

    Кому как. Вот "+ 3,491 contributors" вполне подходит.:)

     
  • 2.12, Аноним (12), 23:38, 02/06/2021 [^] [^^] [^^^] [ответить]  
  • +4 +/
    >> Systemd... не нужны
    >> Плоходокументированный пастух вместо системы инициализации
     
     
  • 3.18, Аноним (5), 00:47, 03/06/2021 [^] [^^] [^^^] [ответить]  
  • –2 +/
    А ты туповат, да? Очевидно, что нужен дистр с openrc/sysvinit, а не блоатварь и недокументированный велосипед.
     
     
  • 4.27, Аноним (27), 10:19, 03/06/2021 [^] [^^] [^^^] [ответить]  
  • +5 +/
    > А ты туповат, да? Очевидно, что нужен дистр с openrc/sysvinit, а не блоатварь и недокументированный велосипед.

    Не подскажете, где на openrc/sysvinit можно найти такой же объем документации, как тут https://www.freedesktop.org/software/systemd/man/systemd.index.html ?

     
     
  • 5.36, Аноним (16), 13:04, 04/06/2021 [^] [^^] [^^^] [ответить]  
  • +/
    Там такого объёма функционала нет чтобы был нужен такой объём документации.

    Sysvinit — это средство обеспечения работы последовательных терминалов (в т.ч. виртуальных консолей) и переключения ранлевелов (включая ответственные за загрузку и завершение системы), всё. Его документация — man-страницы init(8) и inittab(5).
    OpenRC — хелпер для запуска и остановки ассоциированных с ранлевелами сервисов, замена километровым портянкам шелл-скриптов типичной ОС на sysvinit.

     
  • 2.14, Аноним (16), 00:03, 03/06/2021 [^] [^^] [^^^] [ответить]  
  • +/
    > Systemd не нужен

    Можно прикрутить Nix поверх дистрибутива без systemd, Alpine Linux, например.
    Это, правда, не позволит использовать фичи дистрибутива по управлению системой, а лишь сделает доступным запускаемый пользователем прикладной софт.
    > двоичный кэш не нужен

    Его никто не заставляет использовать.

     
     
  • 3.37, Аноним (37), 17:10, 04/06/2021 [^] [^^] [^^^] [ответить]  
  • +/
    >> Systemd не нужен
    > Можно прикрутить Nix поверх дистрибутива без systemd, Alpine Linux, например.
    > Это, правда, не позволит использовать фичи дистрибутива по управлению системой, а лишь
    > сделает доступным запускаемый пользователем прикладной софт.

    А правильно ли я понимаю, что это получается при таком варианте можно использовать всю мощь возможностей установки разных версий софта и всё также останется возможность рулить устанавливаемыми версиями по хэшам как это задумано в никсе?

    Я к тому чтобы например сделать основу другой неролинг дистрибутив, а жонглировать разными версиями только юзерософта, насколько это рабочий вариант?

     
     
  • 4.38, Аноним (16), 03:40, 06/06/2021 [^] [^^] [^^^] [ответить]  
  • +/
    Можно использовать всю мощь Nix и nixpkgs, но вся мощь NixOS будет недоступна.
    https://nixos.org/manual/nix/stable/
    https://nixos.org/manual/nixos/stable/

    Что касается возможности жонглировать разными версиями софта, то тут есть некоторые ограничения. Установленный nix'ом софт делается доступным с помощью т.н. профилей, содержащих наборы симлинков. Профиль может содержать только одну версию конкретной софтины, иначе в нём будут конфликты. Пользователю (а также системе и каждому из контейнеров, но это к NixOS) выделается по одному профилю, каждый из которых может иметь несколько поколений (generations) и между ними перекатываться (nix-env rollback). Чтобы запустить софтину старой версии, нужно откатить весь профиль. Это можно обойти игрой с переменными окружения, но штатными утилитами такое не поддерживается.

     
     
  • 5.48, Аноним (48), 14:51, 07/06/2021 [^] [^^] [^^^] [ответить]  
  • +/
    >[оверквотинг удален]
    > https://nixos.org/manual/nix/stable/
    > https://nixos.org/manual/nixos/stable/
    > Что касается возможности жонглировать разными версиями софта, то тут есть некоторые ограничения.
    > Установленный nix'ом софт делается доступным с помощью т.н. профилей, содержащих наборы
    > симлинков. Профиль может содержать только одну версию конкретной софтины, иначе в
    > нём будут конфликты. Пользователю (а также системе и каждому из контейнеров,
    > но это к NixOS) выделается по одному профилю, каждый из которых
    > может иметь несколько поколений (generations) и между ними перекатываться (nix-env rollback).
    > Чтобы запустить софтину старой версии, нужно откатить весь профиль. Это можно
    > обойти игрой с переменными окружения, но штатными утилитами такое не поддерживается.

    Это не очень весело, если так, потому как раньше в NixOS зазывали фразами типа: можно иметь несколько версий софта в одной системе, и никто не развеивал представления, что это не так всё просто и не на одном пользователе.

    Откатывать весь профиль это дичь, лучше уж городить какое-то подобие инстансов.
    Я не понимаю на кой надо было так делать, и что мешало сделать возможность запуска разных версий софтин с их версиями зависимостей при наличии инструмента с возможностью потенциальной линковки с идентификацией по хэшам?!


     
  • 4.40, scor (ok), 20:42, 06/06/2021 [^] [^^] [^^^] [ответить]  
  • +/
    > А правильно ли я понимаю, что это получается при таком варианте можно
    > использовать всю мощь возможностей установки разных версий софта и всё также
    > останется возможность рулить устанавливаемыми версиями по хэшам как это задумано в
    > никсе?

    Правильно понимаешь. Nix можно использовать вне NixOS. Нужно иметь ввиду следующее:
    1. всё дерево зависимостей будет вытянуто, вплоть до glibc; а это немало по объёму
    2. не будет шаринга библиотек с системными; растраты по оперативке, хоть и не всегда большие
    3. не все пакеты получится использовать "из коробки"; например, если что-то захочет конкретной версии API (i.e. nvidia-cuda), то придётся обеспечить "выравнивание" либо патчингом никсовых выражений, либо поменяв версии "хостовых" быблиотек/модулей

    В остально всё работает как задумано. Что-то типа https://manpages.debian.org/unstable/nix-bin/nix-shell.1.en.html

    Т.е. процедура:
    1. ставишь nix (curl -L https://nixos.org/nix/install | sh); перед установкой чекни, что там в install
    2. активируешь через source в .bashrc
    3. юзаешь nix-shell -p bla-bla (документашка достаточно подробная)


    > Я к тому чтобы например сделать основу другой неролинг дистрибутив, а жонглировать
    > разными версиями только юзерософта, насколько это рабочий вариант?

    NixOS не совсем роллинг. Там точно такие же релизы, ветки, и секурити патчи с бэкпортами.

     
     
  • 5.42, Аноним (16), 03:17, 07/06/2021 [^] [^^] [^^^] [ответить]  
  • +/
    > что там в install

    Скачивание тарболла, распаковка и запуск из него ещё одного скрипта.

     
  • 5.47, Аноним (47), 14:45, 07/06/2021 [^] [^^] [^^^] [ответить]  
  • +/
    К подобному я готов Это понятно и логично, если всё так как я представляю и с э... большой текст свёрнут, показать
     
     
  • 6.49, scor (ok), 15:21, 07/06/2021 [^] [^^] [^^^] [ответить]  
  • +/
    Да Я имел ввиду, что динамические библиотеки будут свои Ну например 10095 ... большой текст свёрнут, показать
     
     
  • 7.50, Аноним (50), 06:57, 08/06/2021 [^] [^^] [^^^] [ответить]  
  • +/
    Понял, и это хорошо и правильно Согласен, если общие либы в никсовой среде, тако... большой текст свёрнут, показать
     
  • 2.22, Аноним (22), 03:01, 03/06/2021 [^] [^^] [^^^] [ответить]  
  • +2 +/
    Ты из какой норы вылез?
     

  • 1.10, scor (ok), 23:17, 02/06/2021 [ответить] [﹢﹢﹢] [ · · · ]  
  • +4 +/
    По мне, так пожалуй самый удобный и безотказный дистр из тех, на которых приходилось работать. Да и со стороны мейнтенера выглядит и ощущается как максимально удобный и беспроблемный с полной автоматизацией рутинных процессов. В общем, "вкалывают роботы, человек аппрувит" во всей красе.
    Долгих лет и процветания, как говорится.
     
     
  • 2.21, Dimcha (ok), 02:56, 03/06/2021 [^] [^^] [^^^] [ответить]  
  • +/
    Полностью с Вами согласен. Открыл для себя NixOS пару лет назад(перешел с Debian). Мне очень нравится концепция. Пока не подводил ни разу. А работа с контейнерами - просто сказка.
     
     
  • 3.25, n00by (ok), 09:01, 03/06/2021 [^] [^^] [^^^] [ответить]  
  • +/
    Мне тоже очень нравится концепция, но имена вида f2b5...8a163-firefox-89.0.0
    произвели необратимое криптопреобразование когнитивных шаблонов.
     
     
  • 4.30, Anon2 (?), 13:50, 03/06/2021 [^] [^^] [^^^] [ответить]  
  • +/
    Для серфинга по ФС в NNN это боль.
     
     
  • 5.32, n00by (ok), 15:00, 03/06/2021 [^] [^^] [^^^] [ответить]  
  • +/
    И ведь не понятно, зачем они так сделали. Может в Хаскеле нужна какая хитрая монада, что бы разбирать строку с конца?
     
     
  • 6.44, Аноним (44), 05:38, 07/06/2021 [^] [^^] [^^^] [ответить]  
  • +/
    >И ведь не понятно, зачем они так сделали. Может в Хаскеле нужна какая хитрая монада, что бы разбирать строку с конца?

    Вполне понятно зачем. Потоум что "/nix/store/<hash>-" имеет константную длину и эту часть пути очень легко отрезать.

     
     
  • 7.45, n00by (ok), 08:05, 07/06/2021 [^] [^^] [^^^] [ответить]  
  • +/
    >>И ведь не понятно, зачем они так сделали. Может в Хаскеле нужна какая хитрая монада, что бы разбирать строку с конца?
    > Вполне понятно зачем. Потоум что "/nix/store/<hash>-" имеет константную длину и эту часть
    > пути очень легко отрезать.

    Подстроки "/nix/store/" и "<hash>" имеют константную длину и фрагмент пути между ними очень легко отрезать.

    И Вы не первый, кому это не понятно -- вот что малость напрягает.

     
  • 3.39, Andrew (??), 10:38, 06/06/2021 [^] [^^] [^^^] [ответить]  
  • +/
    А как происходит процесс установки/обновления софта? Руками пишете новый т.н. деривейшн?
     
     
  • 4.41, scor (ok), 20:48, 06/06/2021 [^] [^^] [^^^] [ответить]  
  • +/
    > А как происходит процесс установки/обновления софта? Руками пишете новый т.н. деривейшн?

    Всё как и везде. Есть репозиторий ( https://github.com/NixOS/nixpkgs/ ) с мастер/транк/тестинг (называйте как хотите) и релизные бранчи, которые в основном только по секурити обновляют и мелкие бакпорты. Из этих бранчей получаются "каналы" (что-то типа имён репозиториев). Выбираешь на каком канале будешь жить (тестинг/стейбл). Можно миксовать с другими каналами с каким-то конкретным набором приложений. Что-то типа PPA в убунте. Точно также на свой страх и риск. Дальше всё просто.

    nix-channel --update
    nix-rebuild switch

    Если что-то совсем разломалось, то при загрузке будет возможность выбрать предыдущий (рабочий) набор софта и загрузиться с этого состояния.

     
     
  • 5.43, Аноним (16), 03:22, 07/06/2021 [^] [^^] [^^^] [ответить]  
  • +/
    > Что-то типа PPA в убунте. Точно также на свой страх и риск.

    Не также. В убунте PPA добавляются в систему и софт при установке из них выполняет установочные скрипты с привелегиями рута. Каналы nix же добавляются пользователями в любых количествах и сочетаниях и никак на работу системы не влияют (пока не будут добавлены рутом).

     
     
  • 6.46, scor (ok), 09:46, 07/06/2021 [^] [^^] [^^^] [ответить]  
  • +/
    >> Что-то типа PPA в убунте. Точно также на свой страх и риск.
    > Не также.

    Можно подумать, что есть разница от какого пользователя будет запущен майнер или агент бот-нета. Именно об этом "страхе и риске" и написано. И ничем принципиально это не отличается от PPA. Но это всё лирика. Воля ваша считать решение безопасным на основании того, что оно запущено "не от рута".:)

     

  • 1.11, ним (?), 23:37, 02/06/2021 [ответить] [﹢﹢﹢] [ · · · ]  
  • +5 +/
    Текст в новости - сплошная дезинформация.

    > поддерживается установка индивидуальных пакетов отдельными пользователями (пакет ставится в домашний каталог)

    В домашний каталог ничего не ставится, просто добавляются нужные пути из /nix/store в PATH пользователя.

    > возможна одновременная установка нескольких версий одной программы

    В PATH несколько версий программ не засунешь, так что УСТАНОВКА - нет. Возможность использовать нескольких версий одной программы (из того же nix-shell) - это да.

    > пакеты устанавливаются в отдельное дерево директорий /nix/store или поддиректорию в каталоге пользователя

    В каталог пользователя ничего не ставится.

    > Пакеты оформляются в виде контейнеров, содержащих необходимые для работы приложений компоненты.

    Пакеты ни в какие контейнеры не оформляются. Это не GoboLinux.

    > Между пакетами возможно определение зависимостей, при этом для поиска наличия уже установленных зависимостей используется сканирование хэшей-идентификаторов в директории установленных пакетов.

    Снова какая-то чушь. Все зависимости конкретной софтины зашиты прям в бинарник по абсолютным путям, никаких определений зависимостей там нет.
    https://nixos.org/guides/nix-pills/why-you-should-give-it-a-try.html#idm140737
    https://nixos.org/guides/nix-pills/enter-environment.html#idm140737320678416

    > Возможна как загрузка готовых бинарных пакетов из репозитория (при установке обновлений к бинарным пакетам загружаются только delta-изменения), так и сборка из исходных текстов со всеми зависимостями.

    Нет никакого репозитория бинарных пакетов, есть кеш деривиаций. Никаких дельта-изменений тоже нет.

     
     
  • 2.26, n00by (ok), 09:06, 03/06/2021 [^] [^^] [^^^] [ответить]  
  • +/
    >> Между пакетами возможно определение зависимостей, при этом для поиска наличия уже установленных зависимостей используется сканирование хэшей-идентификаторов в директории установленных пакетов.
    > Снова какая-то чушь. Все зависимости конкретной софтины зашиты прям в бинарник по
    > абсолютным путям, никаких определений зависимостей там нет.

    Зависимости, которые "зашиты прям в бинарник", используются системным загрузчиком. А есть ещё зависимости, которые требуются что бы этот бинарник скомпоновать.

     

  • 1.13, макпыф (ok), 23:42, 02/06/2021 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    > glibc 2.32

    А чего не 2.33 - она вроде уже ~полгода назад вышла, в убунте давно уже есть

     
  • 1.19, Аноним (19), 00:59, 03/06/2021 [ответить] [﹢﹢﹢] [ · · · ]  
  • –5 +/
    Пожалуй, самый бессмысленный и бесполезный дистрибутив.
     
     
  • 2.20, Аноним (5), 02:13, 03/06/2021 [^] [^^] [^^^] [ответить]  
  • +/
    Удваиваю.
     
  • 2.23, Аноним (22), 03:02, 03/06/2021 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Да, обои неочень!
     
  • 2.24, Аноним (-), 07:28, 03/06/2021 [^] [^^] [^^^] [ответить]  
  • +/
    хаскелисты от него кончают радугой. Но и сам хаскель - такое себе
     
     
  • 3.31, алёща (?), 14:40, 03/06/2021 [^] [^^] [^^^] [ответить]  
  • +/
    для программиста не знающего математики таковым окажеться не менее чем всё
     
  • 2.29, Нанобот (ok), 10:24, 03/06/2021 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Впрочем, как и твой комментарий
     

  • 1.33, Аноним (33), 15:37, 03/06/2021 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Один из самых стремных дистрибутивов для разработчиков из-за своей архитектуры расположения библиотек. Не ну конечно в доцкере можно разрабатывать но нафига тогда никсос если это можно делать хоть под убунтой.
     
     
  • 2.35, scor (ok), 16:02, 03/06/2021 [^] [^^] [^^^] [ответить]  
  • +2 +/
    Все ваши библиотеки доступны по LD_LIBRARY_PATH. Где они находятся забота мейнтейнеров и дистрибутива. Мне важно, чтоб они были доступны, нужных версий и в нужном количестве.:)
     

     Добавить комментарий
    Имя:
    E-Mail:
    Текст:



    Спонсоры:
    Inferno Solutions
    Hosting by Hoster.ru
    Хостинг:

    Закладки на сайте
    Проследить за страницей
    Created 1996-2021 by Maxim Chirkov
    Добавить, Поддержать, Вебмастеру