Все потоки
Поиск
Написать публикацию
Обновить
281.73

Linux *

Пишем под *nix

Сначала показывать
Порог рейтинга

Разработчик под ником madprops предложил способ для быстрого поиска команд в терминале

«Я очень часто обращаюсь к истории действий в shell, чтобы снова и снова запускать одни и те же команды. Пока нет эффективного способа сделать это. Я думаю, что это проблема, которую нужно решать с помощью специализированного инструмента. Я могу попробовать сделать инъекцию оболочки с помощью rofi позже. Но сейчас я придумал трюк, который помогает в работе. Добавьте значки к командам, чтобы вы могли мгновенно распознавать их по стрелкам вверх:

  • : ✅;./utils/check.sh

  • : ⚡;./scripts/tag.py

  • : 📚;./scripts/makedocs.sh

Обратите внимание на двоеточия и точки с запятой. Значки не являются частью команды, они ничего не делают. Но теперь ваше зрение очень быстро распознает нужный элемент. Вместо иконок можно использовать текст, который можно легко отфильтровать позже», — пояснил madprops.

Теги:
Всего голосов 3: ↑3 и ↓0+3
Комментарии4

Учимся в сетевые интерфейсы на Linux: руководство по netlink

В интернете я нашел всего одну статью, где описывали мониторинг сетевых портов. Это был хороший старт, но для решения моей задачи информации оказалось недостаточно. Уже во время написания этой статьи я нашел еще пару материалов, которые, как я рассчитываю, хорошо дополнят мой. Помимо статей, нашел несколько man-страниц, в которых описаны пакеты, параметры, структуры и даже есть примеры кода. Оттуда я взял готовый код, способный получать информацию о появлении нового интерфейса и добавлении его в vlan. Но задача требовала отслеживать намного больше параметров системы.

Следующая остановка — пакет iproute2. Iproute распространяется под GNU GPL 2, так что я скачал исходники, собрал их и начал разбираться в коде на C. Чтобы проще понимать логику, я удалял некоторые участки кода, в которые при вызове моей функции программа не входила. Затем пересобирал программу и продолжал изучение и трассировку. Так я понял общий принцип обработки пакетов и сделал обработку пары дополнительных параметров. Но оставалось еще много других условий.

В какой-то момент я вспомнил про утилиту strace: с ней стало проще изучать код и ориентироваться в нем. Strace позволяла увидеть финальный этап работы функции и все ее параметры. Решая свои задачи, я копировал и адаптировал код из iproute. Я не особо вникал во внутреннее устройство протокола, но с каждым этапом разработки это становилось все сложнее и сложнее.

Наконец, я сделал обработку всех параметров кроме одного. В функции его обработки в iproute вызывалась обработка какого-то системного файла, и это было очень странно, так как я видел этот параметр в сообщении netlink через strace. Я зашел в тупик. Код выглядел очень страшно и совсем не нравился мне. Покопавшись в этом еще один день, я понял, что так продолжаться не может. Я решил переписать все заново без использования кода из iproute. Хотел сделать код красивым и максимально понятным для тех, кто будет читать его после меня.

О том, как с помощью netlink узнать, что именно делает система при настройке сетевых интерфейсов и как обрабатывать ее команды, читайте в статье Тимура Аммаева.

Теги:
Всего голосов 2: ↑2 и ↓0+3
Комментарии1

Как и зачем дублировать Intel NTB Gen3 в QEMU

Системным программистам в YADRO нужно было «обмануть» драйвер в Linux: он не должен «знать», что работает в эмуляции. 

Для этого ведущий инженер Никита приступил к созданию виртуального двойника Intel NTB Gen3 в QEMU, документации к которому в открытом доступе нет. Реализованная модель позволяет производить разработку и тестирование протоколов более высокого уровня, а также выполнять их качественное сравнение.

PCIe NTB не позволяет увидеть адресное пространство, которое принадлежит к подключенному по NTB соседнему устройству. Вкратце он работает так:

  • перенаправляет трафик PCIe между шинами как мост,

  • CPU рассматривает мост как конечное устройство,

  • CPU не «видит» все устройства на «другой» стороне, как правило, другая сторона — это другой компьютер.

Упрощенное представление PCIe NTB
Упрощенное представление PCIe NTB

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

В работе с PCI BAR необходимо обеспечить прозрачное использование Linux-драйвера Intel NTB для оптимального взаимодействия с оборудованием, которое мы эмулируем. Еще одна задача — разработать новые транспорты, которые работают поверх эмуляции: RPMSG, Virtio/Vhost, NTRDMA и другие. Также одна модель помогла найти ошибки в инициализации драйвера.

Никита подробно описывает тернистый путь создания виртуального двойника Intel NTB Gen3 в статье →

Теги:
Всего голосов 5: ↑5 и ↓0+7
Комментарии0

Праздничный unixporn: python vim ide в контейнере

В разработке на python, особенно в DS/ML проектах, мы все сталкиваемся со сложной схемой зависимостей на специфичной аппаратной платформе. Зачастую, вести разработку удобно в том окружении, в котором в последствии запускается приложение.

Если вы вдруг vim user, то можно просто доставить редактор в контейнер с окружением и разрабатывать прямо там. Такая схема достаточно лекговесна, позволяет относительно просто держать актуальными завистимости при разработке, переиспользовать существующие сборочные конвейеры с небольшим наборов слоёв для самого редактора. Так же это может быть удобно, если вам нужно работать где то на удалённом кластере по ssh.

У меня был некоторый шаблон Dockerfile с добавкой vim с плагинами который кочует из проекта в проект и я решил поделиться с вами этой наработкой.

С Новым годом!

Теги:
Всего голосов 2: ↑2 и ↓0+2
Комментарии0

Linux под Hyper-V, overhead со знаком минус?

Неоднократно приходилось переходить с Linux на самой машине к той же версии и на той же машине, но развернутой в виртуалке в Windows. И часто замечал, что Linux в Hyper-V работает более “отзывчиво” по части GUI (vscode, chrome, firefox и т.п.). Но это были именно субъективные ощущения, особо не заострял на этом внимание предполагая, что улучшения происходят из-за каких-либо аппаратных интерфейсов, для которых Hyper-V предоставляет стандартные реализации. 

Недавно решил обновить рабочий компьютер, и перед тем как выбрать какая ОСь будет основной, провел небольшой тест на сколько “тормозней” Linux в Hyperv-V. 

Список оборудования и ПО:

  • Ноутбук Acer Aspire 7, Intel(R) Core(TM) i5-10300H CPU @ 2.50GHz, RAM 20.0 GB

  • ОС Linux Mint 21.3 Virginia 64-bit, Kernel Linux 5.15.0-130-generic x86_64

  • ОС Windows 10 Enterprise LTSC 21H2 (build 19044.5247)

  • В качестве теста выбрана сборка проекта OpenWrt.

Сценарий теста:

  1. Linux на ноутбуке:

    1. Устанавливаем Linux на ноутбук.

    2. Клонируем OpenWrt и запускаем последовательно команды:

      1. git clone -b openwrt-23.05 https://github.com/openwrt/openwrt.git

      2. cd openwrt/

      3. ./scripts/feeds update -a

      4. ./scripts/feeds install -a

      5. make menuconfig #выбираем Target System (Qualcomm Atheros IPQ807x)

      6. make -j8 download #download отдельной командой, чтобы не зависеть от сети при тесте.

      7. time make -j8

  1. Linux в Hyper-V:

    1. Устанавливаем Windows 10 LTSC на ноут. 

    2. Включаем поддержку Hyper-V.

    3. Устанавливаем Linux под Hyper-V.

    4. В настройках виртуалки, установить кол-во CPU равным 8, выделить RAM 8-18 GB.

    5. Далее выполняем те же действия, что и в пп. 1.2.

Вывод time после сборки OpenWrt:

  • Linux на ноутбуке:

    • попытка №1

      • real    30m37,765s

    • попытка №2

      • real    29m18,569s

  • Linux в Hyper-V:

    • попытка №1

      • real    27m12,136s

    • попытка №2

      • real    27m36,395s

Получается, что Linux в Hyper-V работает немного быстрей? Странно это, и по хорошему нужно проверять еще. Но на данном этапе меня устраивает, что могу две ОСи одновременно использовать и есть уверенность что нет дополнительных проседаний в производительности.

Так же попробовал в виртуалке установить Ubuntu 24.04 и Linux Mint 22 Cinnamon, их время было такое,real  30m59,630s и 30m37,765s соответственно.

Теги:
Всего голосов 4: ↑4 и ↓0+4
Комментарии3

Три проверенных метода организовать обмен прерываниями между машинами QEMU c KVM и без

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

Быстрая работа такой связки приятна при разработке/отладке и очень важна при массовом прогоне автотестов в CI. Как оптимизировать обмен прерываниями и какой подход к организации IQI вам подойдет — узнаете из статьи. А еще разберемся c:

  • устройством QEMU под капотом,

  • реализацией модели и драйвера,

  • добавлением прерываний MSI-X,

  • результатами замеров.

На бонус: десяток полезных материалов для изучения.

Теги:
Всего голосов 6: ↑5 и ↓1+5
Комментарии0

Linux: панель для KDE 6

Я просто оставлю это здесь, может, кому-нибудь пригодится.

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

Под "готова" я имею в виду, что система справляется со своими задачами в довольно жёстких условиях: на моём безвентиляторном мини-ПК с HiDPI дисплеем крутится Андроид Студия, эмуляторы различных устройств и операционных систем и прочие инструменты разработчика. Согласитесь, что это показатель.

Внешний вид темы по умолчанию (Бриз) меня в целом устраивает, а вот нижняя ("южная") панель не нравится. Поэтому тема делает две вещи:

  1. Устанавливает тёмный (в моём случае прозрачный) фон всей панели и границу сверху.

  2. Переносит индикаторы запуска приложений (подчёркивание) вниз.

За первый пункт отвечает файл widgets/panel-background.svg, за второй - widgets/tasks.svg.

Размытие фона под панелью (как на снимке экрана) включено по умолчанию.

Оба файла можно легко редактировать в обычном текстовом редакторе.

Вот ссылка на Гитхаб: https://github.com/vladpen/kde-south-panel

Теги:
Всего голосов 3: ↑3 и ↓0+3
Комментарии0

Этого не найдешь в документации к Xilinx Zynq

Производители SoC, как правило, предоставляют окружение для разработки и документацию с примерами реализации универсальных решений. Но много важных деталей упускается или скрывается от пользователя. В итоге нетривиальная модификация системы требует долгих исследований и экспериментов. 

Изучили все нюансы на практике за вас, реализовав проект запуска Embedded Linux на Hard- и Soft-процессорах Xilinx Zynq. Пойдем по этапам:

  1. Разработаем проект программируемой логики.

  2. Соберем операционную систему.

  3. Запустим ОС и верифицируем проект.

В качестве бонуса: запустим ОС Soft-CPU на эмуляторе QEMU и разработаем bare-metal приложение в обход IDE Vitis.

Ради чего все это стоит затевать
Ради чего все это стоит затевать

Теги:
Всего голосов 9: ↑9 и ↓0+12
Комментарии0

Подтверждена совместимость BPM-системы «Первая Форма» с «РЕД ОС»

ВРМ‑система «Первая Форма» стабильно работает на российской операционной системе РЕД ОС 8, а также на мобильной платформе РЕД ОС М. Совместимость продуктов позволяет автоматизировать бизнес‑процессы организаций, обеспечивая их выполнение на отечественной ИТ‑инфраструктуре. Чтобы повысить уровень защиты данных, поддерживается двухфакторная аутентификация и интеграция со смарт‑картами.

РЕД ОС — операционная система семейства Linux, предназначенная для серверов и рабочих станций. Она обладает сертификацией ФСТЭК России, что делает её подходящей для задач с повышенными требованиями к безопасности.

«Первая Форма» — набор инструментов для автоматизации документооборота, управления проектами, CRM, В2В2С‑решений и корпоративных коммуникаций, занимает лидирующую позицию среди российских low‑code решений для управления бизнесом.

Оба решения входят в реестр отечественного ПО Минцифры.

Подтверждена совместимость BPM-системы «Первая Форма» с «РЕД ОС»
Подтверждена совместимость BPM-системы «Первая Форма» с «РЕД ОС»

Теги:
Всего голосов 4: ↑3 и ↓1+2
Комментарии0

LanguageSwitcher (Дополнение к прошлому посту)

Теперь LanguageSwitcher можно скачать в виде .exe файла и запустить его без лишней мороки (для тех кто переживает, что ваши данные под угрозой всё еще есть скрипт в исходном виде).

Также теперь Language Switcher можно установить и на Linux в виде скрипта

Все нюансы и подробности описаны в репозитории

Теги:
Всего голосов 3: ↑3 и ↓0+6
Комментарии4

Инженер Intel Linux Колин Ян Кинг обнаружил, что если выровнять параметр slab в коде ACPI с помощью флага «SLAB_HWCACHE_ALIGN», то можно будет добиться заметного улучшения производительности памяти и сократить время загрузки ядра Linux ещё примерно на 0,035 секунды.

Колин объяснил это с помощью однострочного патча ядра:

«Включение SLAB_HWCACHE_ALIGN для кэшей объектов ACPI повышает скорость загрузки в ядре ACPICA для выделения и освобождения объектов, особенно на этапах анализа и выполнения AML при загрузке. Тестирование со 100 загрузками показывает среднюю экономию загрузки в acpi_init в размере ~0,035 с по сравнению с невыровненной версией. Большинство выделяемых и освобождаемых объектов ACPI имеют очень короткое время жизни в критических путях для анализа и выполнения, поэтому дополнительная память, используемая для выравнивания, не слишком обременительна».

Linux проделал большую работу по оптимизации времени загрузки ядра, начиная с дней помешательства на нетбуках и в последующие годы для лучшей оптимизации серверов. Экономия загрузки около 0,035 секунд едва ли будет заметна для конечных пользователей, но каждая мелочь имеет значение, особенно в случае гипермасштабаторов и других факторов, в которых необходимо минимизировать время простоя в центре обработки данных, будь то серверы bare metal или виртуальные машины. А то, что это всего лишь однострочный патч, делает его еще более легкой и приятной победой.

*cache = kmem_cache_create(name, size, 0, SLAB_HWCACHE_ALIGN, NULL);

Теги:
Всего голосов 5: ↑5 и ↓0+7
Комментарии4

Представлен выпуск Aura 4.0.0. Это проект пакетного менеджера для дистрибутива Arch Linux, расширяющий возможности штатного пакетного менеджера Pacman.

Проект создан в 2012 году и изначально был нацелен на предоставление средств для сборки пакетов для репозитория AUR (Arch User Repository), применяемого для распространения сторонними разработчиками своих пакетов, не входящих в основные репозитории дистрибутива Arch Linux.

Код проекта распространяется под лицензией GPLv3.

Кроме специфичных для AUR функций в Aura также предоставляются и другие возможности, расширяющие функциональность Pacman (в настоящее время только 1/3 расширенных возможностей Aura связаны с AUR). Например, доступны средства для наглядного анализа зависимостей, работы со снапшотами наборов пакетов (для сохранения и восстановления состояния), управления остаточными зависимостями и отката отдельных пакетов или всей системы на прошлые версии.

Aura полностью обратно совместим с Pacman и поддерживает все его команды и опции. Связанные с AUR дополнительные возможности вызываются через указание опции командной строки «‑A», а средства работы со снапшотами и версиями через опции «‑B» и «‑С», не пересекающиеся с опциями Pacman.

В Aura 4.0.0 переведена вся кодовая база с Haskell на язык Rust. Смена языка позволила значительно повысить производительность, упростить установку, задействовать готовые Rust-биндинги к libalpm, сделать проект более привлекательным для новых разработчиков.

Источник: OpenNET.

Теги:
Всего голосов 2: ↑2 и ↓0+4
Комментарии0

Ближайшие события

Проект Redox OS, представляющий собой операционную систему с открытым исходным кодом, написанную с нуля на языке программирования Rust, теперь имеет работающий веб-сервер, среди прочих улучшений, добавленных в код проекта в течение июля.

Среди заметных новых программных работ в Redox OS — запуск Simple HTTP Server в качестве первого веб-сервера (HTTP) для платформы. Сам Simple HTTP Server также написан на Rust. Также ведутся постоянные усилия по переносу Apache HTTP-сервера в Redox OS.

Ещё одним важным достижением приложения является программа wget, которая теперь работает в Redox OS. Также была проделана большая работа по запуску настольных приложений COSMIC в Redox OS, внесены улучшения в системы сборки, продолжалась работа по созданию более сложных программ в Rust, улучшение ядра ARM64, улучшения UEFI и различные исправления драйверов.

Теги:
Всего голосов 3: ↑3 и ↓0+5
Комментарии0

Разработчики Manjaro Linux на базе Arch Linux объявили о начале тестирования экспериментальной сборки Manjaro Immutable, которая примечательна поставкой базовой системы в форме единого монолитного образа, монтируемого в режиме только для чтения и обновляемого целиком в атомарном режиме. Размер загрузочного образа 1,7 ГБ. Поддерживается только загрузка в режиме UEFI как на оборудовании x86_64, так и в системах виртуализации и эмуляции, таких как VirtualBox и QEMU. После завершения тестирования сборке планируют придать статус официального варианта Manjaro.

Для формирования монолитных системных образов на основе пакетной базы Arch Linux, а также для их установки, сопровождения и организации отката на прошлое состояния задействован инструментарий arkdep, развиваемый проектом Arkane Linux.

Источник: OpenNET..

Теги:
Всего голосов 2: ↑2 и ↓0+4
Комментарии1

Microsoft опубликовала первое стабильное обновление новой ветки дистрибутива Azure Linux 3.0, который ранее распространялся под именем CBL-Mariner.

Проект развивается в качестве универсальной базовой платформы для Linux-окружений, используемых в облачной инфраструктуре, edge-системах и различных сервисах Microsoft. Решение нацелено на унификацию применяемых в Microsoft Linux-решений и упрощение поддержания Linux-систем различного назначения в актуальном состоянии.

Наработки проекта распространяются под лицензией MIT. Сборки пакетов формируются для архитектур aarch64 и x86_64. Размер установочного образа 740 МБ.

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

Изменения в новой версии:

  • ядро Linux обновлено до версии 6.6;

  • добавлена поддержка GPU Nvidia A100 и H100, а также предоставлен Nvidia GPU Operator для автоматизации управления драйверами Nvidia на узлах с Azure Linux;

  • добавлены инструменты для замены других дистрибутивов (OSsku In‑Place Migration) на узлах в облаке Microsoft Azure, например, можно заменить установленный Ubuntu на Azure Linux;

  • система принудительного контроля доступа SELinux переведена по умолчанию в режим enforcing.

Источник: OpenNET.

Теги:
Всего голосов 3: ↑3 и ↓0+5
Комментарии1

Компания ООО «РусБИТех‑Астра» представила дистрибутив специального назначения Astra Linux Special Edition 1.8, который может применяться для защиты конфиденциальной информации и государственной тайны до уровня «особой важности».

Дистрибутив Astra Linux 1.8 основан на пакетной базе Debian GNU/Linux и содержит дополнительные механизмы обеспечения безопасности, такие как собственная система мандатного управления доступом, аудита, контроля целостности и подлинности файлов (PARSEC), гарантированное удаление файлов, сборка ядра с патчами для повышения безопасности. Пользовательское окружение построено на основе проприетарной среды рабочего стола Fly с компонентами, использующими библиотеку Qt.

Дистрибутив Astra Linux 1.8 распространяется в рамках лицензионного соглашения, которое накладывает ряд ограничений на пользователей, в частности, запрещены коммерческое использование без заключения лицензионного договора, декомпиляция и дизассемблирование продукта.

В ОС Astra Linux версии 1.8 представлен новый визуальный стиль. Оригинальные, реализованные специально для Astra Linux, алгоритмы работы и исходные коды отнесены к категории коммерческой тайны. Пользователю предоставляется возможность воспроизведения только одного экземпляра продукта на одном компьютере или виртуальной машине, а также даётся право на изготовление только одной резервной копии носителя с продуктом. Готовые установочные сборки пока публично не предоcтавляются, но доступны образы контейнеров и виртуальных машин.

Теги:
Всего голосов 4: ↑4 и ↓0+6
Комментарии3

Привет всем!

Приём работ на Open Source Education Cup 2024 продолжается. Это мероприятие является первым из ряда инициатив, запланированных для сотрудников системы образования на 2024-2025 годы.

Принять участие могут представители образовательных учреждений, исследователи, инженеры и контрибьюторы. Задача — разработать концепции образовательного курса длительностью более 72 академических часов, а также сопутствующих учебно-методических материалов. Курс должен быть направлен на изучение основных принципов работы и инструментов создания Open Source проектов, с акцентом на разработку операционных систем с открытым исходным кодом.

Технологическими партнёрами являются СберТех и платформа GitVerse.

Формат участия — заочный, участие бесплатное.

Подробнее — по ссылке

Теги:
Всего голосов 2: ↑2 и ↓0+4
Комментарии0

Опубликован релиз свободного гипервизора Xen 4.19. В разработке проекта приняли участие Amazon, Arm, EPAM Systems и AMD. Формирование обновлений для ветки Xen 4.19 продлится до февраля 2026 года, а публикация исправлений уязвимостей до августа 2027 года.

Ключевые изменения в Xen 4.19:

  • для систем на базе архитектуры ARM добавлена поддержка механизма асинхронного обмена данными «FF‑A Notifications», описанного в спецификации FF‑A (Firmware Framework for Arm A‑profile). Реализована возможность динамического добавления и удаления узлов в Xen device tree при помощи файлов.dtbo;

  • для систем на базе архитектуры x86 добавлен новый драйвер контроллера прерываний x2APIC, использующий режим логической адресации (Cluster Logical) для внутренних прерываний (IPI, inter‑processor interrupt) и режим физической адресации для внешних прерываний;

  • объявлена устаревшей и будет прекращена в следующем выпуске поддержка процессоров Intel XeonPhi;

  • максимальное число CPU, используемых в Xen, увеличено с 4095 до 16383;

  • при сборке с systemd (./configure --enable-systemd) из сборочных зависимостей исключена библиотека libsystemd (поддержка systemd-notify реализована через собственную урезанную библиотеку);

  • для анализа трассировок для CPU AMD в xenalyze больше не нужно использовать опцию "--svm-mode";

  • продолжена реализация требований к разработке безопасных и надёжных программ на языке Си, сформулированных в спецификациях MISRA-C для критически важных систем.

Источник: OpenNET.

Теги:
Всего голосов 2: ↑2 и ↓0+4
Комментарии0

Разработчики проекта UBports, который взял в свои руки создание мобильной платформы Ubuntu Touch, после того как от неё отстранилась компания Canonical, представили прошивку OTA-5 Focal (over‑the‑air). Это четвёртый выпуск Ubuntu Touch, основанный на пакетной базе Ubuntu 20.04. Проектом также развивается экспериментальный порт рабочего стола Unity 8, который переименован в Lomiri.

Обновление Ubuntu Touch OTA-5 Focal в ближайшие дни будет сформировано для устройств Asus Zenfone Max Pro M1, F(x)tec Pro1 X, Fairphone 3/3+/4, Google Pixel 3a/3a XL, JingPad A1, Oneplus 5/5T/6/6T, Sony Xperia X, Vollaphone X/22/X23 и Xiaomi Poco X3 NFC / X3. По сравнению с прошлой версией не будут формироваться сборки для устройств OnePlus One, Samsung Galaxy S7, Xiaomi Redmi Note 9/9 Pro/9 Pro Max/9S и Xiaomi Poco M2 Pro.

Отмечается, что выпуск в основном сосредоточен на исправлении ошибок. Среди заметных изменений:

  • в систему профилей энергопотребления добавлена возможность раздельной обработки режима постоянного потребления и интерактивного режима на устройствах с их поддержкой.

  • устранена проблема с переносом настроек при миграции с Ubuntu Touch на базе Ubuntu 16.04 на Ubuntu Touch OTA-5 Focal на базе Ubuntu 20.04.

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

Источник: OpenNET.

Теги:
Всего голосов 4: ↑4 и ↓0+7
Комментарии0

Вклад авторов