LINUX.ORG.RU

Сообщения James_Holden

 

NixOS: свой конфиг ядра

Форум — General

@t184256 @dan4ik

Я честно пытался осилить сам. Но… я не знаю, документация по NixOS это полный провал. Не знаю как это цензурно описать.

Задача: есть .config файл, заранее подготовленный. Получить конфигурацию на ядре с таким конфигом.

По этому поводу в NixOS Manual (https://nixos.org/manual/nixos/unstable/#sec-linux-config-customizing) вижу вот это:

custom-kernel = let base_kernel = linuxKernel.kernels.linux_4_9;
  in super.linuxKernel.manualConfig {
    inherit (super) stdenv hostPlatform;
    inherit (base_kernel) src;
    version = "${base_kernel.version}-custom";

    configfile = /home/me/my_kernel_config;
    allowImportFromDerivation = true;
};

Сразу вохникает вопрос. Что это? К чему это? Куда это пихать?

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

Ну ладно, по .super я догадываюсь что наверное это внутренности оверлея (но я честно не уверен). Делаю тогда так в configuration.nix:

boot.kernelPackages = pkgs.custom_kernel;
  nixpkgs.overlays = [(self: super: {
     custom_kernel = let base_kernel = pkgs.linuxKernel.kernels.linux_5_15;
       in super.linuxKernel.manualConfig {
         inherit (super) stdenv lib;
         inherit (base_kernel) src;
         version = "${base_kernel.version}-custom";

         configfile = ./config;
         allowImportFromDerivation = true;
     };
  }) ];

Как видно код не совпадает с тем что в Manual, потому что в том мануальном коде сразу возникает ряд ошибок - нет параметра lib, лишний параметр hostPlatform. Спрашивается, почему так? Не понятно.

В итоге с вот этим кодом выше - получаю ошибку:

error: attribute 'extend' missing

       at /nix/var/nix/profiles/per-user/root/channels/nixos/nixos/modules/system/boot/kernel.nix:40:31:

           39|       type = types.unspecified // { merge = mergeEqualOption; };
           40|       apply = kernelPackages: kernelPackages.extend (self: super: {
             |                               ^
           41|         kernel = super.kernel.override (originalArgs: {

что с этим делать?

Вот как для этой простейшей задачи (и очень распространенной) простейший пример из документации я должен применить? Я не понимаю…

 

James_Holden
()

xanmod... рвет linux-rt в low-latency аудио задачах???

Форум — Multimedia

Я в шоке…

Годами, буквально годами пытаюсь получить минимальную задержку при обработке аудио на ноутбуке с jack, а теперь и с pipewire.

Платформа - Sandy Bridge, встроенное аудио Realtek ALC272.

Всегда считал нормой для этого ноутбука буфер 48000 Гц / 256 семплов (5,3 мс задержка) (кто в теме то поймет что это). Тут на ЛОРе мне много раз писали что это совсем не круто. Да я и на слух слышу задержку при игре на гитаре. Это все на обычном ядре, дефолтном в дистрибутивах. При меньшем буфере стабильно не работает.

Периодически я решал озаботиться улучшением, первое что советуют везде - использовать linux_rt вместо обычного ядра. Это немного улучшало ситуацию, можно было получить вдвое меньшую задержку 48000/128 (2,7 мс). Но не очень стабильно. Это - тоже совсем не айс!

И вот, чисто случайно, без объявления войны, я ставлю NixOS и в нем ядро xanmod 5.14. Происходит какая-то мистика!

Я выставляю 48000 / 64 (это уже 1.3 миллисекунды задержки). Все гранитно стабильно!

Выставляю 48000 / 32 (тридцать два, Карл!) - работает! Иногда похрюкивает.

КАК???? Это вообще законно??

Вопрос у меня вот в чем - как именно в xanmod так выходит, какие опции, или модификации, могут повлиять на то что стало вот так?

ИТАК

Пожалуй подведу окончательные итоги.

  1. Практически все широко распространенные в сети рекомендации надо читать навыворот. Почему - отдельный вопрос.

  2. Лучше всего для обеспечения low-latency при работе с аудио подходит обычное, общего назначения ядро. Даже ванильное ядро с kernel.org может обеспечить экстремально низкую задержку на моем музейном железе.

  3. Ядро linux_rt подходит заметно хуже. Я не знаю почему. Видимо оно для совсем других задач, а то что оно работало со звуком лучше - дела давно минувших дней. Современные версии обычного ядра работают лучше.

  4. Рекомендации по настройке ядра, по CONFIG_HZ, PREEMPT - можно выполнять, можно нет. Низкая задержка достижима с любыми вариантами этих настроек.

  5. Желательно собирать ядро с минимальной конфигурацией. по-видимому я столкнулся с тем, что на конфигурации от Arch Linux на моем железе что-то лишнее мешало.

 , , , ,

James_Holden
()

Chromium-based браузеры: как быть?

Форум — Desktop

Такая ситуация. Сначала сравниваю Chromium и Chrome. Дистрибутив NixOS.

Chromium - работает видео ускорение! (да, свершилось! у меня оно завелось!!!). Я так понимаю (только с криокамеры, могу сильно ошибаться) что его специально собирают с поддержкой VAAPI. Как добился активации:

  1. Ставлю флаг Override software rendering list

  2. Запуск с ключами –use-gl=desktop –enable-features=VaapiVideoDecoder

  3. h264ify, потому что у меня SandyBridge бронзового века.

Все бы круто, но - нет синхронизации!

Chrome - есть синхронизация. Но не заводится ускорение! Все те же действия - приводят ни к чему. в chrome://gpu горит желтым.

Собственно вопроса два возникает.

  1. Можно ли получить ускорение в Chrome?

  2. Можно ли получить синхронизацию в Chromium? (не обязательно с гуглом, как угодно между компами с линуксом).

 , ,

James_Holden
()

Почему на Linux плохой звук - некоторое прозрение

Форум — Multimedia

В продолжение вот этой темы.

Звук «как на виндосе»? (комментарий)

Там были затронуты интересные вопросы, касающиеся улучшайзеров.

Здесь весьма распространено мнение, (и до сегодняшнего дня я тоже его придерживался) что для достижения качественного звука надо выдать его на динамики с минимальными искажениями (bit perfect и подобное), а дальше динамики уж сами разберуться. У нас же не фуфло пластиковое, а напольники за 5000$.

Конечно нет, у нас фуфло пластиковое в тонком корпусе ноутбука! Они не разберутся, вот тут наша детская ошибка.

Например, есть ноут Huawei Matebook. Он идет сразу с системой Dolby Atmos (о чем писал @fornlr когда говорил что все усложняется, и тут он совершенно прав, а я совершенно НЕ прав). Со стороны может показаться - ну зачем этот Atmos, очередной улучшайзер ненужный.

Но нет - в данном случае это улучшайзер нужный! Просто необходимый.

У ноута 4 динамика, два сверху два снизу. Уже проблема - естественно в линуксе все 4 сразу работать не будут, работают либо только нижние, либо только левые и т. д.

А теперь представьте, какой будет звук, если его выдать только на нижние динамики, которые смотрят в стол? Во-первых тихий - половина динамиков не работает, во вторых глухой. По басу - динамики могут друг друга тупо гасить.

Все эти проблемы решает Dolby Atmos, которая правильно разделяет на 4 канала, выдает на каждый динамик, вносит коррекцию с учетом расположения динамиков в корпусе. То есть без Dolby Atmos такая конфигурация вообще работать не может!

Вот и причина разительно лучшего звука в Windows.

В Linux чисто технически проблема решаема, вот пример как

https://elementaryos.stackexchange.com/questions/22659/how-to-install-drivers-for-speakers

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

Так что скоро мы рискуем остаться без динамиков в ноутах!

Предлагаю обсудить пути выхода из ситуации.

 

James_Holden
()

NixOS + bumblebee - ставит сразу две конфликтующие версии Nvidia!

Форум — Desktop

Суть проблемы.

Имею ноутбук с Nvidia Optimus.

Соответственно пытаюсь настроить bumblebee на NixOS.

Драйверы - проприетарные nvidia, legacy 390.

Проблема в том, что почему-то ставятся одновременно и legacy, и последние 495 драйверы. Ничего не работает, возможно причина и не в этом, возможно в этом. Надо изолировать.

Как делаю. Вот это в configuration.nix

boot.kernelPackages = pkgs.linuxPackages.extend (self: super: {
    nvidia_x11 = super.nvidia_x11_legacy390;
  });

hardware.bumblebee.enable = true;

Как определить, кто именно тянет 495 драйвер? Как сделать чтобы он не тянулся?

 , , ,

James_Holden
()

Объясните тупому про .htaccess

Форум — Web-development

Видимо я слишком не настоящий сварщик, но я тупо годами не могу освоить настройку редиректов с Apache через .htaccess.

Вот опять проблема. Надо редиректить запрос (тупо так, добуквенно)

mydomain.com/?

на

mydomain.com/

Для этого добавляю

RewriteCond %{THE_REQUEST} /\? [NC]
RewriteRule ^ /? [NE,R=301,L]

И все работает, но! Редиректятся все остальные запросы вида

mydomain.com/?что-то-тут-дальше

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

 ,

James_Holden
()

Вандалы удалили XRender в Plasma 5.23!

Форум — Talks

Пылайте в огне, чертовы покусанные гномом вейланд-луддиты!

У меня всё.

 , , ,

James_Holden
()

Зафиксировать версию ядра в NixOS

Форум — Desktop

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

Насколько я понял в документации этого в явном виде просто нет. Как и многого другого, но сейчас не об этом.

Использую канал nixos-unstable. Желание простое - зафиксировать версию ядра, которое я поставил из этого канала сегодня, чтобы все обновлялось, кроме ядра.

Зная ЛОР с классическим «тебе это не надо», поясню зачем оно надо. Я накладываю на ядро патч. При этом у меня Core 2 Duo и ядро собирается 6 часов. Мне не уперлось при каждом обновлении ждать 6 часов. Поэтому я собрал сейчас, и хочу заморозить. В любом линуксе это делается элементарно. В NixOS хочу понять как.

Подскажите пожалуйста, куда копать.

 

James_Holden
()

Pipewire + NixOS

Форум — Desktop

Сильно не бейте, только осваиваю NixOS.

Возникла задача. Надо в конфиг pipewire, по пути /etc/pipewire/pipewire.conf добавить строчку

default.clock.allowed-rates = [ 44100, 48000, 96000 ]

Согласно wiki, пробую добавлять что-либо туда так:

services.pipewire = {
  config.pipewire = {
    "context.properties" = {
      "link.max-buffers" = 16;
      "default.clock.allowed-rates" = [ 44100, 48000, 96000 ];
      "log.level" = 2;
  };
};

И вот на нужной строчке облом - синтаксическая ошибка. Собственно мне понятно в чем она - вот эта запись в квадратных скобках видимо не валидна для nix. Если я беру это в кавычки - все добавляется в конфиг, но тоже в кавычках!

А как добавить без кавычек?

@t184256, @fernandos, @balsoft

 , ,

James_Holden
()

Nix vs Flatpak

Форум — Desktop

Поставим вопрос ребром.

Какие преимущества имеет Nix перед Flatpak на десктопе?

Опираюсь на такую статью

https://serokell.io/blog/what-is-nix

Интересно и достаточно доступно расписано про Nix. Но! Я не могу понять, чем это лучше Flatpak?

Вот такие преимущества у Nix:

  1. Повторяемая сборка. С Flatpak, имея манифест, я могу делать сборку пакета в том окружении, которое прописано в манифесте, и получать гарантированно такой же пакет каждый раз. Не всегда это так, хеш коммита используемого SDK может в манифесте указываться а может нет, но если надо - то так делают.

  2. Бинарный кеш - конечно же есть у Flatpak, только называется не кеш а сами пакеты. Кроме того есть все манифесты для их сборки в гите, и внутри каждого пакета. То есть все как у Nix.

  3. Разные версии пакета одновременно. И там, и там это конечно же возможно.

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

  5. Сборка без привилегий для пользователя. Точно так же flatpak-builder не требует никаких привилегий и не использует ничего из хостовой системы.

Как видим, все перечисленное в равной мере характерно для Nix и для Flatpak. Так в чем тогда преимущество Nix?

Далее - у Nix есть возможности еще и по управлению конфигами. Эта функциональность выходит за границы пакетного менеджера и у Flatpak вообще отсутствует. Я предлагаю пока разделить эти сферы, и обсудить отдельно непосредственно сборку и управление пакетами.

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

 ,

James_Holden
()

systemd-sysusers не создает пользователей

Форум — Admin

Добавляю например вот такой конфиг по пути /usr/lib/sysusers.d/openvpn.conf

u openvpn - "OpenVPN"

И ничего - пользователь не создается. Перезагружаюсь - ничего. Другие аналогичные конфиги так же не работают.

Читаю вот этот ман https://www.freedesktop.org/software/systemd/man/sysusers.d.html и ничего не могу понять - почему у меня может не работать? Вроде все делаю так.

При этом вот такое:

#systemctl status systemd-sysusers

○ systemd-sysusers.service - Create System Users
     Loaded: loaded (/usr/lib/systemd/system/systemd-sysusers.service; static)
     Active: inactive (dead)
  Condition: start condition failed at Wed 2021-11-10 11:29:09 +03; 10h ago
       Docs: man:sysusers.d(5)
             man:systemd-sysusers.service(8)

ноя 10 11:28:58 angmar systemd[1]: Condition check resulted in Create System Users being skipped.
ноя 10 11:29:09 angmar systemd[1]: Condition check resulted in Create System Users being skipped.

Подскажите пожалуйста, куда копать?

 

James_Holden
()

Фронтальные наушники - Unplugged, как победить?

Форум — Linux-hardware

Есть старый системник, у него есть фронтальный микрофон и фронтальные наушники.

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

Звуковая система - pipewire. В итоге она видит, что не подключено вообще ничего и не выводит звук. Конфигурация «аналоговый дуплекс» помечается как unavailable, при переключении на нее все выводящие звук приложения виснут.

Попытка обмануть - втыкаю пустой джек в заднее гнездо, pipewire видит что теперь выход сзади задействован и переключается на конфигурацию «аналоговый дуплекс». НО! Выводит звук в заднее гнездо. Хорошо, я переключаю вывод на фронтальное. Около секунды в наушниках слышен звук, потом он пропадает (как будто мьютится). При этом наушники в pavucontrol помечены как Unplugged.

На чистой alsa все работает - и фронтальные наушники, и фронтальный микрофон. То есть проблема точно не в железе.

Кто нибудь знает как это лечить, как принудительно объяснить pipewire что наушники воткнуты?

С другой стороны - может как-то можно аппаратно вылечить гнезда, чтобы система видела втык в них? Как это вообще работает?

@R_He_Po6oT

 , ,

James_Holden
()

Помогите - KDE systemsettings не дружит с polkit

Форум — Admin

Запускаю KDE systemsetings, модуль для настройки SDDM. Там как известно, все настройки требуют повышения прав до рута через PolicyKit.

Есть другой модуль - настройка даты/времени. Там смена таймзоны требует запроса рута.

Проблема - модуль для даты-времени работает отлично - сразу вылетает диалог PolicyKit кедового агента, ввожу пароль рута, все применяется.

Модуль для SDDM не работает наглухо, при сохранении настроек выдает ошибку - permission denied, при этом никакого диалога PolicyKit не вылетает вообще.

В логах видно, что в первом (удачном) случае идет запрос к polkitd, далее к кедовому агенту, и вылетает диалог.

В неудачном случае - запроса к polkitd нет вообще. dbus-daemon сразу пишет: не удалось запустить, permission denied.

Разница, не знаю насколько это может влиять - для настройки времени (что работает) запускается сервис через systemd, для настройки SDDM - просто напрямую приложение.

Также (ВАЖНО!!) есть эталонная система, где все работает. Но я в упор не могу понять в чем разница.

Эталонная система - Arch, сломанная - самосбор.

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

@intelfx

 , ,

James_Holden
()

Как закрыть Viber без помощи такой-то матери?

Форум — Desktop

Суть проблемы проста. Есть Viber клиент под линукс. Запускается, работает без нареканий. Но - вообще нету возможности завершить приложение! Если закрыть окно, приложение остается висеть в памяти.

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

Решение:

Проблема возникает на всех DE, если ставить Viber через Flatpak. Нет иконки в трее, через которую и надо закрывать.

Чинить можно так:

flatpak override --own-name='org.kde.*' com.viber.Viber

Почему до сих пор не пофиксят на флатхабе манифест - загадка века.

 

James_Holden
()

Детект изменения состояния сетевых подключений

Форум — Development

Есть некое embedded устройство с linux. На нем работает некий демон, запускаемый через systemd.

Задача - перезапуск демона при изменении подключения к сети. То есть если поднято/опущено любое сетевое соединение.

Для перезапуска достаточно завершить демон, systemd его само запускает обратно.

Вопрос - как наиболее просто и надежно это сделать, крайне желательно изнутри демона? Демон на языке C.

Что пробовал:

int nl_socket = socket (AF_NETLINK, SOCK_RAW, NETLINK_ROUTE);
addr.nl_family = AF_NETLINK;
addr.nl_pid = getpid ();
addr.nl_groups = RTMGRP_LINK | RTMGRP_IPV4_IFADDR | RTMGRP_IPV6_IFADDR;
bind (nl_socket, (struct sockaddr *) &addr, sizeof (addr));

и так далее. В целом это работает, но столкнулся с проблемой - если в сети выполнить arp-scan, срабатывает такой детектор и демон неправомерно перезапускается.

Как это сделать минимально сложно и максимально надежно?

 ,

James_Holden
()

Как устроен Flatpak?

Форум — Desktop

Суть вопроса проста. Интересует ваше представление о том, что есть в техническом плане Flatpak.

Например -

  1. это виртуалка

  2. это контейнер как Docker

  3. какой-то иной тип контейнера

  4. пакет, в виде образа и архива, который содержит приложение и все его зависимости.

  5. и так далее - ваше видение.

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

И конечно, наиболее интересно услышать по этому вопросу мнение @theLORdweller, претендующего на звание ведущего здешнего эксперта. Ему, мягко говоря, есть что рассказать о различных дистрибутивах, пакетных системах и о флатпаке в частности. Ждем.

Особое пояснение. интересует именно ваше представление на данный момент. Не надо ссылок на документацию и подобного. Мне интересна картина представлений в головах людей.

 

James_Holden
()

Установка библиотек C, C++ прямо в проект

Форум — Development

Есть ли готовые решения в виде менеджера пакетов, желательно source-based, который бы ставил все нужные зависимости не в систему, а в папку проекта?

Желательно чтобы это было кроссдистрибутивно (но интересуют и иные варианты, если нельзя так).

То есть - менеджер должен из некоего репозитория ставить исходники библиотеки. Бинарники - дело десятое, в принципе они в данном подходе не нужны, потому что все равно будут собраны не под целевую систему.

Вроде простая задача, и во всяких Node, Python решается штатно, а такой затык. Или я в танке еду и не знаю про очевидные решения. Помогите, кто знает?

 ,

James_Holden
()

Pipewire - неизбежная... победа!

Форум — Multimedia

Есть snap, flatpak, wayland. Вроде хорошее дело, но - они добавляют изоляцию между приложениями, и такие штуки как jack, pulseaudio уже не могут работать как раньше. Надо что-то решать. И тут появляется надежда - pipewire. Но надежда ложная, потому что это катастрофа!

Нет, надежда все-таки есть.

Вот мои претензии (которые в итоге разрешились):

1. Обязательный ресемплинг. Как известно, pulseaudio поддерживало две частоты дискретизации микшера - основную и альтернативную. Это позволяло, в случае воспроизведения например только музыки со spotify переключать микшер на частоту дискретизации потока и УБРАТЬ ресемплинг! Если воспроизводит только одно приложение, ресемплинга быть НЕ ДОЛЖНО! Потому что он не нужен. Pipewire не позволяет, и похоже что реализовать это в той архитектуре, которую заложили, будет весьма непросто. На практике он всегда делает ресемплинг и всегда портит звук.

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

Переключение РАБОТАЕТ уже сейчас, на версии из Git! На релизе 0.3.33 у меня не работает.

КАК СДЕЛАТЬ:

В pipewire.conf пишем:

default.clock.rate          = 48000
default.clock.allowed-rates = [ 44100, 48000 ]

Можно перечислить в allowed-rates до 16 значений. Все!

ТЕПЕРЬ - если воспроизведения не было, и запустить на воспроизведение ОДНО приложение, pipewrire будет переводить себя и звуковую карту на частоту дискретизации этого приложения, и ресемплинга НЕ БУДЕТ.

2. При работе с jack клиентами может меняться размер буфера. Занавес! То есть я играю на гитаре, и тут мне меняют размер буфера? А ничего что это приведет к слышимому и чувствуемому изменению задержки звука? Как играть??? Так НЕЛЬЗЯ ДЕЛАТЬ, а надо делать ровно наоборот. Я уже молчу про то, что изменение на лету размера буфера может просто крашануть jack приложение, которое такого бреда не ожидало!

3. Для того, чтобы вообще хоть как-то задать размер буфера для jack клиентов, надо запускать приложение с переменной окружения PIPEWIRE_LATENCY. То есть мне теперь все приложения из консоли стартовать? Или все desktop файлы править? С настоящим jack это решается элементарно - программой управления типа qjackctl. Там просто выбирается какой буфер, и все приложения используют его. Должно быть ВОТ ТАК.

Решение:

pw-metadata -n settings 0 clock.force-quantum <size>

устанавливает фиксированный размер буфера.

Или в jack.conf:

node.lock-quantum = true

4. Нельзя нормальным образом поменять частоту дискретизации при работе с jack клиентом. Используется та, на которую настроен pipewire своим конфигом. С нормальным jack частота просто выбирается в qjackctl. А с pipewire что, мне править конфиг и перезапускать его, или как?

Решение, можно менять на лету:

pw-metadata -n settings 0 clock.force-rate <samplerate>

В итоге, имеем огромные практически нерешаемые проблемы на уровне архитектуры, из-за которых pipewire идет в противоположную от нужной сторону.

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

 , ,

James_Holden
()

Правильный деплой Python приложения - как лучше?

Форум — Desktop

Есть некое приложение на Python, чисто серверное без GUI (хотя в данном случае не важно). Оно использует ряд модулей.

При разработке и отладке на целевой системе я просто использовал virtualenv. Теперь встал вопрос - как лучше сделать бандл, чтобы его могли:

  1. Ставить люди, не шарящие в кишках питона. Просто брать и ставить.

  2. Ставить в любое место.

  3. Без интернета.

То есть в идеале - надо сделать папку, в которой приложение, и все site-packages которые оно использует. И прямо из этой папки должно все стартовать.

Все что пишут по поводу Python deploy - либо докер, либо virtualenv, либо накатывать через pip пакеты на целевой системе. Это какое-то не то. Как можно сделать проще?

PyInstaller делает то что нужно, но он не подходит потому что заворачивает все в бинарники. Мне надо чтобы py файлы остались и можно было править код по живому.

 

James_Holden
()

Автоудаление забанься дебила

Форум — Linux-org-ru

Очень очень простой вопрос.

В связи с обострением эпидемии забаньсядебилизма, почему бы не сделать автоудаление поста с этим выражением?

Какие-то религиозные предубеждения против автоудалений?

Зачем отрывать уважаемых пользователей, таких как @fernandos например, от комментирования необходимостью репортить на дословно один и тот же пост, появляющийся везде постоянно?

 

James_Holden
()

RSS подписка на новые темы