Dovecot Quota - для каждого своя

EXIM, sendmail, postfix, Dovecot и прочие. Решение проблем связанных с работой электронной почты

Модератор: xM

Правила форума
Убедительная просьба юзать теги [code] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
Аватара пользователя
xM
ст. лейтенант
Сообщения: 1316
Зарегистрирован: 2009-01-15 23:57:41
Откуда: Königsberg
Контактная информация:

Dovecot Quota - для каждого своя

Непрочитанное сообщение xM » 2017-05-08 15:57:51

dserga писал(а): Стоит сие.
Фтопку! :-D
IT voodoo blog https://kostikov.co

Хостинговая компания Host-Food.ru
Хостинг HostFood.ru
 

Услуги хостинговой компании Host-Food.ru

Хостинг HostFood.ru

Тарифы на хостинг в России, от 12 рублей: https://www.host-food.ru/tariffs/hosting/
Тарифы на виртуальные сервера (VPS/VDS/KVM) в РФ, от 189 руб.: https://www.host-food.ru/tariffs/virtualny-server-vps/
Выделенные сервера, Россия, Москва, от 2000 рублей (HP Proliant G5, Intel Xeon E5430 (2.66GHz, Quad-Core, 12Mb), 8Gb RAM, 2x300Gb SAS HDD, P400i, 512Mb, BBU):
https://www.host-food.ru/tariffs/vydelennyi-server-ds/
Недорогие домены в популярных зонах: https://www.host-food.ru/domains/

dserga
ефрейтор
Сообщения: 57
Зарегистрирован: 2008-05-23 7:23:36

Dovecot Quota - для каждого своя

Непрочитанное сообщение dserga » 2017-05-09 14:18:11

Мне что, оба параметра грохнуть? А как это еще повлияет на работу мускуля?

Аватара пользователя
xM
ст. лейтенант
Сообщения: 1316
Зарегистрирован: 2009-01-15 23:57:41
Откуда: Königsberg
Контактная информация:

Dovecot Quota - для каждого своя

Непрочитанное сообщение xM » 2017-05-09 14:35:20

dserga писал(а): оба параметра грохнуть
Зачем оба? Вам мешает STRICT_TRANS_TABLES вот его и убирайте.
А так читайте про опции SQL modes и решайте что вам нужно а что нет.
IT voodoo blog https://kostikov.co

dserga
ефрейтор
Сообщения: 57
Зарегистрирован: 2008-05-23 7:23:36

Dovecot Quota - для каждого своя

Непрочитанное сообщение dserga » 2017-05-09 14:44:41

При много благодарен за наводку. Буду курить мануал.

Аватара пользователя
xM
ст. лейтенант
Сообщения: 1316
Зарегистрирован: 2009-01-15 23:57:41
Откуда: Königsberg
Контактная информация:

Dovecot Quota - для каждого своя

Непрочитанное сообщение xM » 2017-05-09 17:35:11

Написал каммент к статье. Спасибо за информацию, dserga.
http://disq.us/p/1iijg0s
IT voodoo blog https://kostikov.co

quicktrick
рядовой
Сообщения: 19
Зарегистрирован: 2017-11-26 9:26:29

Dovecot Quota - для каждого своя

Непрочитанное сообщение quicktrick » 2017-11-26 9:47:22

Ребята, подскажите, а у меня одного в доменной квоте использованный объем неправильно подсчитывается? И, кстати, количество сообщений в доменной квоте тоже неправильно подсчитывается. И то, и другое меньше реального. Правда, я в какой-то момент переустанавливал Postfix Admin с нуля, удалив старые таблицы в базе данных, а почта в пользовательских директориях какая-то лежала. Может, в этом дело? Может, подсчитывается только новая почта, которая стала приходить после переустановки Postfix Admin? Хотя в любом случае, даже если подсчитать общий объем сообщений в пользовательских квотах, он не будет соответствовать реально занимаемому объему файлов почты на диске. Ну, впрочем, это не так уж важно.

Кстати, и Roundcube, и Thunderbird по IMAP показывают все сообщения -- и старые, и новые -- как и должно быть.

Отправлено спустя 8 минут 43 секунды:
И объем и количество сообщений в пользовательских квотах в таблице quota2 тоже подсчитываются правильно. Только доменные квоты подсчитываются неправильно -- они меньше суммарных пользовательских и по объему, и по количеству сообщений.

Аватара пользователя
xM
ст. лейтенант
Сообщения: 1316
Зарегистрирован: 2009-01-15 23:57:41
Откуда: Königsberg
Контактная информация:

Dovecot Quota - для каждого своя

Непрочитанное сообщение xM » 2017-11-26 13:03:31

doveadm quota recalc -u foo
Отправлено спустя 4 минуты 32 секунды:
Но, похоже, она неправильно пересчитывает доменную квоту. У меня подставляется данные последнего пользователя, для которого делался пересчёт.
Так что можете ручками потом поправить.
Но, вообще, хорошо бы написать в лист рассылки с описанием этого бага. Он относится именно к doveadm - сам плагин квоты и для юзеров и для доменов ведёт правильно.
IT voodoo blog https://kostikov.co

quicktrick
рядовой
Сообщения: 19
Зарегистрирован: 2017-11-26 9:26:29

Dovecot Quota - для каждого своя

Непрочитанное сообщение quicktrick » 2017-11-27 16:01:46

Похоже, что и плагин квоты для доменов работает некорректно. Он действительно подставляет в домен данные последнего пользователя, для которого обновлялась его пользовательская квота. Причем количество сообщений подставляется от пользователя, а вот объём у меня отличается. Впрочем, допускаю, что у меня это может быть некорректно из-за переустановки Постфикс Админа с нуля и пересоздания почтовых ящиков с нуля. Хотя в пользовательских квотах старая почта, доставшаяся "по наследству" от прежней установки, подсчитывается корректно. В общем, чёрт ногу сломит.

Отправлено спустя 2 минуты 14 секунд:
По большому счету, подсчет использованной доменной квоты не особенно-то нужен, но раз уж такая возможность есть, почему бы ею не пользоваться. Если, конечно, она корректно работает.

Аватара пользователя
xM
ст. лейтенант
Сообщения: 1316
Зарегистрирован: 2009-01-15 23:57:41
Откуда: Königsberg
Контактная информация:

Dovecot Quota - для каждого своя

Непрочитанное сообщение xM » 2017-11-27 16:17:00

quicktrick писал(а): Похоже, что и плагин квоты для доменов работает некорректно.
Плагин работает корректно. А вот пересчёт через doveadm, действительно, искажает доменную квоту.
Постфиксадмин тут точно никак не влияет, поскольку используется не для ведения квот, а для их хранения.
IT voodoo blog https://kostikov.co

quicktrick
рядовой
Сообщения: 19
Зарегистрирован: 2017-11-26 9:26:29

Dovecot Quota - для каждого своя

Непрочитанное сообщение quicktrick » 2017-11-27 16:22:07

А что, там плагин вызывает doveadm для пересчета квот?

Аватара пользователя
xM
ст. лейтенант
Сообщения: 1316
Зарегистрирован: 2009-01-15 23:57:41
Откуда: Königsberg
Контактная информация:

Dovecot Quota - для каждого своя

Непрочитанное сообщение xM » 2017-11-27 16:28:26

quicktrick писал(а): А что, там плагин вызывает doveadm для пересчета квот?
Вы чего-то недопонимаете. Понаблюдайте как меняются данные непосредственно в базе данных в том или ином случае и поймёте смысл моего поста.
IT voodoo blog https://kostikov.co

quicktrick
рядовой
Сообщения: 19
Зарегистрирован: 2017-11-26 9:26:29

Dovecot Quota - для каждого своя

Непрочитанное сообщение quicktrick » 2017-11-27 16:40:38

Недопонимаю -- это точно. Но я как раз пишу по результатам собственных наблюдений после активного тестирования. Так вот, после того как пользовательских папках появляется новое сообщение либо удаляется сообщение, в таблице quota2 меняются данные. Тестировал и наблюдал за этим процессом много и внимательно. Пользовательские данные в таблице меняются корректно. А вот доменные -- нет. С доменными данными происходит именно то, что я описал. В поле messages подставляется значение messages от последней изменённой пользовательской квоты, а в поле bytes новое значение вообще отличается от всех остальных, но в любом случае у меня оно меньше суммы использованных пользовательских квот.

К doveadm при всём этом я вообще не прикасаюсь.

Отправлено спустя 4 минуты 12 секунд:
А вот если сделать

Код: Выделить всё

doveadm quota recalc -u user@domain.tld
то действительно в поля bytes и messages доменной квоты копируются поля bytes и messages от пересчитанной пользовательской квоты.

Аватара пользователя
xM
ст. лейтенант
Сообщения: 1316
Зарегистрирован: 2009-01-15 23:57:41
Откуда: Königsberg
Контактная информация:

Dovecot Quota - для каждого своя

Непрочитанное сообщение xM » 2017-11-27 16:40:52

quicktrick писал(а): А вот доменные -- нет
Значит проверяйте свои конфиги и базы.
https://kostikov.co/dvuhurovnevoe-kvoti ... -dovecot-2
У меня всё корректно. Причём на мультидоменных многопользовательских инсталляциях.
IT voodoo blog https://kostikov.co

quicktrick
рядовой
Сообщения: 19
Зарегистрирован: 2017-11-26 9:26:29

Dovecot Quota - для каждого своя

Непрочитанное сообщение quicktrick » 2017-11-27 17:00:07

Ну, я, собственно, и делал по вашей статье. Отличия только в том, что у меня openSUSE Tumbleweed, и вместо двух раздельных словарей для пользователя и домена я использую один. Два словаря тоже пробовал после того как столкнулся с описанной проблемой, но поскольку ничего не изменилось, вернулся к одному. Да, и еще в скрипте quota_warning.sh отправка почты у меня выполняется так (как описано здесь в самом конце этого подраздела):

Код: Выделить всё

/usr/lib/dovecot/dovecot-lda -d $USER -o "plugin/quota=dict:User quota::noenforcing:proxy::sqlquota"
но это уже к делу не относится.

Аватара пользователя
xM
ст. лейтенант
Сообщения: 1316
Зарегистрирован: 2009-01-15 23:57:41
Откуда: Königsberg
Контактная информация:

Dovecot Quota - для каждого своя

Непрочитанное сообщение xM » 2017-11-27 18:11:50

Ну, тогда тут трудно сказать что у вас там происходит.
У себя только что специально проверил по одному из доменов, где ящиков мало - сумма сообщений и размеров ящиков совпадает с доменной квотой.

Отправлено спустя 7 минут 27 секунд:
Кстати, как версия. Postfixadmin (проверено на 3.1) при удалении ящиков не корректирует доменную квоту. Так что надо, скорее всего, вешать триггер на удаление строки и делать пересчёт.

Отправлено спустя 38 минут 39 секунд:
На всякий случай дарю SQL для обновления доменной квоты.

Код: Выделить всё

SET @dom = 'my.domain' ;
UPDATE `quota2` t1, (SELECT SUM(`bytes`) bytes, SUM(`messages`) messages FROM `quota2` WHERE `username` LIKE CONCAT('%@',@dom)) t2 SET t1.bytes = t2.bytes, t1.messages = t2.messages WHERE `username` = @dom 
IT voodoo blog https://kostikov.co

quicktrick
рядовой
Сообщения: 19
Зарегистрирован: 2017-11-26 9:26:29

Dovecot Quota - для каждого своя

Непрочитанное сообщение quicktrick » 2017-11-27 18:18:28

Вот это номер! Попробовал. Удалил для начала запись с доменной квотой. Потом сделал так:

Код: Выделить всё

doveadm quota recalc -A
Error: User listing returned failure
doveadm: Error: Failed to iterate through some users
Смотрю в логе:

Код: Выделить всё

 dovecot[26495]: auth-worker(26553): Error: sql: Iterate query failed: Table 'mailserver.users' doesn't exist (using built-in default iterate_query: SELECT username, domain FROM users)
Как это понимать? Такой таблицы действительно нет. А что, должна быть? Или это баги Довкота? Может, отсюда и все остальные проблемы? Или где-то в конфигурации такая таблица указана?

Аватара пользователя
xM
ст. лейтенант
Сообщения: 1316
Зарегистрирован: 2009-01-15 23:57:41
Откуда: Königsberg
Контактная информация:

Dovecot Quota - для каждого своя

Непрочитанное сообщение xM » 2017-11-27 18:25:32

quicktrick писал(а): doveadm quota recalc -A
Я ж говорю, doveadm кривой.
Сейчас статью на тему решения этих проблем тисну по-быстрому. Ждите.
IT voodoo blog https://kostikov.co

quicktrick
рядовой
Сообщения: 19
Зарегистрирован: 2017-11-26 9:26:29

Dovecot Quota - для каждого своя

Непрочитанное сообщение quicktrick » 2017-11-27 18:29:40

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

Аватара пользователя
xM
ст. лейтенант
Сообщения: 1316
Зарегистрирован: 2009-01-15 23:57:41
Откуда: Königsberg
Контактная информация:

Dovecot Quota - для каждого своя

Непрочитанное сообщение xM » 2017-11-27 23:55:46

Готово.
"Проблемы учёта доменной квоты в Dovecot 2".

Скрипт dovequota.sh погонял, но проверьте с оказией в разных режимах.
IT voodoo blog https://kostikov.co

quicktrick
рядовой
Сообщения: 19
Зарегистрирован: 2017-11-26 9:26:29

Dovecot Quota - для каждого своя

Непрочитанное сообщение quicktrick » 2017-11-28 9:14:22

Хорошая статья, спасибо! В этой связи у меня возникает мысль убрать совсем доменную квоту из конфига Довкота и рассчитывать ее только вашим скриптом. При этом, насколько я понимаю, доменная квота не будет отображаться в Раундкубе, что, на мой взгляд, как раз хорошо. Зачем всем пользователям видеть доменную квоту? А опции отображения или не отображения доменной квоты я в Раундкубе не нашел.

А вот в Постфикс Админе отображать использованную доменную квоту как раз было бы хорошо -- для администратора на странице Domain List. Там сейчас отображается доменная квота в виде: "суммарный объем пользовательских лимитов"/"доменный лимит". Но не хватает отображения использованной доменной квоты. В конфиге Постфикс Админа вроде есть возможность добавлять некие пользовательские поля, но, честно говоря, я не вполне разобрался, как это делать. Я попросил помощи у разработчиков в гите, но ответа пока нет (да и, по опыту, они там не очень охотно отвечают).

В идеале, на мой взгляд, было бы оптимально при переходе на страницу Domain List в браузере выполнять ваш скрипт по пересчету доменной квоты и отображать ее в списке доменов. Может быть, в виде: used / users' limit / domain limit.

Теперь вопрос, как всё это реализовать.

Отправлено спустя 7 минут 17 секунд:
А может, лучше даже не выполнять скрипт каждый раз при переходе на страницу Domain List, а добавить для этого специальную кнопку.

Аватара пользователя
xM
ст. лейтенант
Сообщения: 1316
Зарегистрирован: 2009-01-15 23:57:41
Откуда: Königsberg
Контактная информация:

Dovecot Quota - для каждого своя

Непрочитанное сообщение xM » 2017-11-28 12:03:42

quicktrick писал(а): попросил помощи у разработчиков в гите
Добавил комментарий тоже.
quicktrick писал(а): доменная квота не будет отображаться в Раундкубе
Она отображается в том случае, если у пользователя нет персональной.
IT voodoo blog https://kostikov.co

quicktrick
рядовой
Сообщения: 19
Зарегистрирован: 2017-11-26 9:26:29

Dovecot Quota - для каждого своя

Непрочитанное сообщение quicktrick » 2017-11-28 12:39:39

Хм. Попробовал в конфиге Довкота убрать доменную квоту и оставить только пользовательскую. После этого Раундкуб перестал отображать табличку "limit/used", отображает только использованный процент. Нехорошо, потому что непонятно, каковы объемы лимита и использованной квоты. Вернул доменную квоту.

В этой связи возникает проблема. Либо плюнуть на неправильно подсчитываемую доменную квоту, оставить всё как есть и как бы не обращать на нее внимания. Потому что корректировать доменную квоту в таблице quota2 бесполезно, так как плагин постоянно обновляет эту запись.

Либо писать разработчикам Довкота и добиваться, чтобы они исправили ошибки (некогда этим заниматься, честно говоря). В общем, ладно. Скорее всего, выберу первый вариант и, может, между делом в спокойном режиме как-то попинаю разработчиков. Хотя понятно, что, если они захотят вообще этим заниматься, то придется как-то с ними взаимодействовать, делать для них какие-то тесты и пр.

Аватара пользователя
xM
ст. лейтенант
Сообщения: 1316
Зарегистрирован: 2009-01-15 23:57:41
Откуда: Königsberg
Контактная информация:

Dovecot Quota - для каждого своя

Непрочитанное сообщение xM » 2017-11-28 13:01:25

quicktrick писал(а): на неправильно подсчитываемую доменную квоту
Ещё раз. Доменная квота считается правильно.
Для пересчёта всех значений квот пользователей и доменов используйте скрипт dovequota.sh из статьи выше. Я его вчера обкатал во всех режимах и проблем с расчётами не отмечено. Та же ситуация и с триггером на удаление пользователей. Всё работает чётко.

Код: Выделить всё

# ./dovequota.sh calc
Далее квоты будут вестись верно. Если, конечно, вы где-то не ошиблись в конфигах.
quicktrick писал(а): Либо писать разработчикам Довкота и добиваться, чтобы они исправили ошибки
В теущей версии ошибка только с doveadm.
IT voodoo blog https://kostikov.co

quicktrick
рядовой
Сообщения: 19
Зарегистрирован: 2017-11-26 9:26:29

Dovecot Quota - для каждого своя

Непрочитанное сообщение quicktrick » 2017-11-28 16:37:29

Ёлки-палки. Часа три бился с идиотской проблемой. Не работает консольный логин в mysql. Все форумы облазил, решения не нашел. В итоге сам вычислил решение методом научного перебора.

Чтобы было понятно, о чем идет речь. Вот так команда не работает:

Код: Выделить всё

myhost:/ # mysql -u root -pmypassword
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)
А вот так почему-то работает:

Код: Выделить всё

myhost:/ # mysql -u root -p
Enter password:
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 10530
Server version: 10.1.25-MariaDB openSUSE package

Copyright (c) 2000, 2017, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MariaDB [(none)]> quit
Bye
Загвоздка оказалась в том, что консольная команда не берет пароль в голом виде. Не берет она также пароль, заключенный в кавычках. А берет пароль только в окружении апострофов. То есть:

Код: Выделить всё

myhost:/ # mysql -u myuser -h 127.0.0.1 -pmypassword -D mydb
ERROR 1045 (28000): Access denied for user 'myuser'@'127.0.0.1' (using password: YES)

myhost:/ # mysql -u myuser -h 127.0.0.1 -p"mypassword" -D mydb
ERROR 1045 (28000): Access denied for user 'myuser'@'127.0.0.1' (using password: YES)

myhost:/ # mysql -u myuser -h 127.0.0.1 -p'mypassword' -D mydb
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 10456
Server version: 10.1.25-MariaDB openSUSE package

Copyright (c) 2000, 2017, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MariaDB [mydb]> select * from quota2;
+--------------------+---------+----------+
| username           | bytes   | messages |
+--------------------+---------+----------+
| mydomain.tld       | 3227198 |       26 |
| user1@mydomain.tld |    2412 |        1 |
| user2@mydomain.tld | 1529531 |        6 |
| user3@mydomain.tld |   23249 |        1 |
| user4@mydomain.tld |  564663 |        6 |
| user5@mydomain.tld | 1107343 |       12 |
+--------------------+---------+----------+
6 rows in set (0.00 sec)

MariaDB [mydb]> quit
Bye
Вот такая хрень. В общем, в вашем скрипте надо переменные доступа к базе вместо кавычек заключить в апострофы. Тогда скрипт работает (у меня на openSUSE). Иначе никак.

Да, и у меня еще в команду подключения к mysql требуется добавить хост 127.0.0.1. Я это добавил у себя в скрипт.

В общем, доменная квота пересчиталась. Остальное сейчас протестирую.

Аватара пользователя
xM
ст. лейтенант
Сообщения: 1316
Зарегистрирован: 2009-01-15 23:57:41
Откуда: Königsberg
Контактная информация:

Dovecot Quota - для каждого своя

Непрочитанное сообщение xM » 2017-11-28 16:45:03

quicktrick писал(а):В общем, в вашем скрипте надо переменные доступа к базе вместо кавычек заключить в апострофы.
Если вы по поводу переменных в SQL запросах, то там апострофы, как обычно.
Примите во внимание что у вас Linux с его bash, а скрипт написан на sh.
IT voodoo blog https://kostikov.co