Фтопку!
Dovecot Quota - для каждого своя
Модератор: xM
Правила форума
Убедительная просьба юзать теги [code] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
Убедительная просьба юзать теги [code] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
- xM
- ст. лейтенант
- Сообщения: 1316
- Зарегистрирован: 2009-01-15 23:57:41
- Откуда: Königsberg
- Контактная информация:
Dovecot Quota - для каждого своя
IT voodoo blog https://kostikov.co
Услуги хостинговой компании Host-Food.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/
Тарифы на виртуальные сервера (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/
-
- ефрейтор
- Сообщения: 57
- Зарегистрирован: 2008-05-23 7:23:36
Dovecot Quota - для каждого своя
Мне что, оба параметра грохнуть? А как это еще повлияет на работу мускуля?
- xM
- ст. лейтенант
- Сообщения: 1316
- Зарегистрирован: 2009-01-15 23:57:41
- Откуда: Königsberg
- Контактная информация:
Dovecot Quota - для каждого своя
Зачем оба? Вам мешает STRICT_TRANS_TABLES вот его и убирайте.
А так читайте про опции SQL modes и решайте что вам нужно а что нет.
IT voodoo blog https://kostikov.co
-
- ефрейтор
- Сообщения: 57
- Зарегистрирован: 2008-05-23 7:23:36
Dovecot Quota - для каждого своя
При много благодарен за наводку. Буду курить мануал.
- xM
- ст. лейтенант
- Сообщения: 1316
- Зарегистрирован: 2009-01-15 23:57:41
- Откуда: Königsberg
- Контактная информация:
Dovecot Quota - для каждого своя
IT voodoo blog https://kostikov.co
-
- рядовой
- Сообщения: 19
- Зарегистрирован: 2017-11-26 9:26:29
Dovecot Quota - для каждого своя
Ребята, подскажите, а у меня одного в доменной квоте использованный объем неправильно подсчитывается? И, кстати, количество сообщений в доменной квоте тоже неправильно подсчитывается. И то, и другое меньше реального. Правда, я в какой-то момент переустанавливал Postfix Admin с нуля, удалив старые таблицы в базе данных, а почта в пользовательских директориях какая-то лежала. Может, в этом дело? Может, подсчитывается только новая почта, которая стала приходить после переустановки Postfix Admin? Хотя в любом случае, даже если подсчитать общий объем сообщений в пользовательских квотах, он не будет соответствовать реально занимаемому объему файлов почты на диске. Ну, впрочем, это не так уж важно.
Кстати, и Roundcube, и Thunderbird по IMAP показывают все сообщения -- и старые, и новые -- как и должно быть.
Отправлено спустя 8 минут 43 секунды:
И объем и количество сообщений в пользовательских квотах в таблице quota2 тоже подсчитываются правильно. Только доменные квоты подсчитываются неправильно -- они меньше суммарных пользовательских и по объему, и по количеству сообщений.
Кстати, и Roundcube, и Thunderbird по IMAP показывают все сообщения -- и старые, и новые -- как и должно быть.
Отправлено спустя 8 минут 43 секунды:
И объем и количество сообщений в пользовательских квотах в таблице quota2 тоже подсчитываются правильно. Только доменные квоты подсчитываются неправильно -- они меньше суммарных пользовательских и по объему, и по количеству сообщений.
- xM
- ст. лейтенант
- Сообщения: 1316
- Зарегистрирован: 2009-01-15 23:57:41
- Откуда: Königsberg
- Контактная информация:
Dovecot Quota - для каждого своя
Отправлено спустя 4 минуты 32 секунды:doveadm quota recalc -u foo
Но, похоже, она неправильно пересчитывает доменную квоту. У меня подставляется данные последнего пользователя, для которого делался пересчёт.
Так что можете ручками потом поправить.
Но, вообще, хорошо бы написать в лист рассылки с описанием этого бага. Он относится именно к doveadm - сам плагин квоты и для юзеров и для доменов ведёт правильно.
IT voodoo blog https://kostikov.co
-
- рядовой
- Сообщения: 19
- Зарегистрирован: 2017-11-26 9:26:29
Dovecot Quota - для каждого своя
Похоже, что и плагин квоты для доменов работает некорректно. Он действительно подставляет в домен данные последнего пользователя, для которого обновлялась его пользовательская квота. Причем количество сообщений подставляется от пользователя, а вот объём у меня отличается. Впрочем, допускаю, что у меня это может быть некорректно из-за переустановки Постфикс Админа с нуля и пересоздания почтовых ящиков с нуля. Хотя в пользовательских квотах старая почта, доставшаяся "по наследству" от прежней установки, подсчитывается корректно. В общем, чёрт ногу сломит.
Отправлено спустя 2 минуты 14 секунд:
По большому счету, подсчет использованной доменной квоты не особенно-то нужен, но раз уж такая возможность есть, почему бы ею не пользоваться. Если, конечно, она корректно работает.
Отправлено спустя 2 минуты 14 секунд:
По большому счету, подсчет использованной доменной квоты не особенно-то нужен, но раз уж такая возможность есть, почему бы ею не пользоваться. Если, конечно, она корректно работает.
- xM
- ст. лейтенант
- Сообщения: 1316
- Зарегистрирован: 2009-01-15 23:57:41
- Откуда: Königsberg
- Контактная информация:
Dovecot Quota - для каждого своя
Плагин работает корректно. А вот пересчёт через doveadm, действительно, искажает доменную квоту.
Постфиксадмин тут точно никак не влияет, поскольку используется не для ведения квот, а для их хранения.
IT voodoo blog https://kostikov.co
-
- рядовой
- Сообщения: 19
- Зарегистрирован: 2017-11-26 9:26:29
Dovecot Quota - для каждого своя
А что, там плагин вызывает doveadm для пересчета квот?
- xM
- ст. лейтенант
- Сообщения: 1316
- Зарегистрирован: 2009-01-15 23:57:41
- Откуда: Königsberg
- Контактная информация:
Dovecot Quota - для каждого своя
Вы чего-то недопонимаете. Понаблюдайте как меняются данные непосредственно в базе данных в том или ином случае и поймёте смысл моего поста.
IT voodoo blog https://kostikov.co
-
- рядовой
- Сообщения: 19
- Зарегистрирован: 2017-11-26 9:26:29
Dovecot Quota - для каждого своя
Недопонимаю -- это точно. Но я как раз пишу по результатам собственных наблюдений после активного тестирования. Так вот, после того как пользовательских папках появляется новое сообщение либо удаляется сообщение, в таблице quota2 меняются данные. Тестировал и наблюдал за этим процессом много и внимательно. Пользовательские данные в таблице меняются корректно. А вот доменные -- нет. С доменными данными происходит именно то, что я описал. В поле messages подставляется значение messages от последней изменённой пользовательской квоты, а в поле bytes новое значение вообще отличается от всех остальных, но в любом случае у меня оно меньше суммы использованных пользовательских квот.
К doveadm при всём этом я вообще не прикасаюсь.
Отправлено спустя 4 минуты 12 секунд:
А вот если сделать
то действительно в поля bytes и messages доменной квоты копируются поля bytes и messages от пересчитанной пользовательской квоты.
К doveadm при всём этом я вообще не прикасаюсь.
Отправлено спустя 4 минуты 12 секунд:
А вот если сделать
Код: Выделить всё
doveadm quota recalc -u user@domain.tld
- xM
- ст. лейтенант
- Сообщения: 1316
- Зарегистрирован: 2009-01-15 23:57:41
- Откуда: Königsberg
- Контактная информация:
Dovecot Quota - для каждого своя
Значит проверяйте свои конфиги и базы.
https://kostikov.co/dvuhurovnevoe-kvoti ... -dovecot-2
У меня всё корректно. Причём на мультидоменных многопользовательских инсталляциях.
IT voodoo blog https://kostikov.co
-
- рядовой
- Сообщения: 19
- Зарегистрирован: 2017-11-26 9:26:29
Dovecot Quota - для каждого своя
Ну, я, собственно, и делал по вашей статье. Отличия только в том, что у меня 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 - для каждого своя
Ну, тогда тут трудно сказать что у вас там происходит.
У себя только что специально проверил по одному из доменов, где ящиков мало - сумма сообщений и размеров ящиков совпадает с доменной квотой.
Отправлено спустя 7 минут 27 секунд:
Кстати, как версия. Postfixadmin (проверено на 3.1) при удалении ящиков не корректирует доменную квоту. Так что надо, скорее всего, вешать триггер на удаление строки и делать пересчёт.
Отправлено спустя 38 минут 39 секунд:
На всякий случай дарю SQL для обновления доменной квоты.
У себя только что специально проверил по одному из доменов, где ящиков мало - сумма сообщений и размеров ящиков совпадает с доменной квотой.
Отправлено спустя 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
-
- рядовой
- Сообщения: 19
- Зарегистрирован: 2017-11-26 9:26:29
Dovecot Quota - для каждого своя
Вот это номер! Попробовал. Удалил для начала запись с доменной квотой. Потом сделал так:
Смотрю в логе:
Как это понимать? Такой таблицы действительно нет. А что, должна быть? Или это баги Довкота? Может, отсюда и все остальные проблемы? Или где-то в конфигурации такая таблица указана?
Код: Выделить всё
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 - для каждого своя
Я ж говорю, doveadm кривой.
Сейчас статью на тему решения этих проблем тисну по-быстрому. Ждите.
IT voodoo blog https://kostikov.co
-
- рядовой
- Сообщения: 19
- Зарегистрирован: 2017-11-26 9:26:29
Dovecot Quota - для каждого своя
За запрос спасибо, только ведь плагин сам постоянно обновляет доменную квоту, причем у меня неправильно. Впрочем, подозреваю, что в моем случае дело именно в удалении базы ПостфиксАдмина и повторном создании почтовых ящиков. А Довкот, похоже, в доменной квоте считает только ту почту, которая приходила после этого. Надо проверить на чистой конфигурации. Чуть позже сделаю на другом сервере.
- xM
- ст. лейтенант
- Сообщения: 1316
- Зарегистрирован: 2009-01-15 23:57:41
- Откуда: Königsberg
- Контактная информация:
Dovecot Quota - для каждого своя
Готово.
"Проблемы учёта доменной квоты в Dovecot 2".
Скрипт dovequota.sh погонял, но проверьте с оказией в разных режимах.
"Проблемы учёта доменной квоты в Dovecot 2".
Скрипт dovequota.sh погонял, но проверьте с оказией в разных режимах.
IT voodoo blog https://kostikov.co
-
- рядовой
- Сообщения: 19
- Зарегистрирован: 2017-11-26 9:26:29
Dovecot Quota - для каждого своя
Хорошая статья, спасибо! В этой связи у меня возникает мысль убрать совсем доменную квоту из конфига Довкота и рассчитывать ее только вашим скриптом. При этом, насколько я понимаю, доменная квота не будет отображаться в Раундкубе, что, на мой взгляд, как раз хорошо. Зачем всем пользователям видеть доменную квоту? А опции отображения или не отображения доменной квоты я в Раундкубе не нашел.
А вот в Постфикс Админе отображать использованную доменную квоту как раз было бы хорошо -- для администратора на странице Domain List. Там сейчас отображается доменная квота в виде: "суммарный объем пользовательских лимитов"/"доменный лимит". Но не хватает отображения использованной доменной квоты. В конфиге Постфикс Админа вроде есть возможность добавлять некие пользовательские поля, но, честно говоря, я не вполне разобрался, как это делать. Я попросил помощи у разработчиков в гите, но ответа пока нет (да и, по опыту, они там не очень охотно отвечают).
В идеале, на мой взгляд, было бы оптимально при переходе на страницу Domain List в браузере выполнять ваш скрипт по пересчету доменной квоты и отображать ее в списке доменов. Может быть, в виде: used / users' limit / domain limit.
Теперь вопрос, как всё это реализовать.
Отправлено спустя 7 минут 17 секунд:
А может, лучше даже не выполнять скрипт каждый раз при переходе на страницу Domain List, а добавить для этого специальную кнопку.
А вот в Постфикс Админе отображать использованную доменную квоту как раз было бы хорошо -- для администратора на странице 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 - для каждого своя
Добавил комментарий тоже.
Она отображается в том случае, если у пользователя нет персональной.
IT voodoo blog https://kostikov.co
-
- рядовой
- Сообщения: 19
- Зарегистрирован: 2017-11-26 9:26:29
Dovecot Quota - для каждого своя
Хм. Попробовал в конфиге Довкота убрать доменную квоту и оставить только пользовательскую. После этого Раундкуб перестал отображать табличку "limit/used", отображает только использованный процент. Нехорошо, потому что непонятно, каковы объемы лимита и использованной квоты. Вернул доменную квоту.
В этой связи возникает проблема. Либо плюнуть на неправильно подсчитываемую доменную квоту, оставить всё как есть и как бы не обращать на нее внимания. Потому что корректировать доменную квоту в таблице quota2 бесполезно, так как плагин постоянно обновляет эту запись.
Либо писать разработчикам Довкота и добиваться, чтобы они исправили ошибки (некогда этим заниматься, честно говоря). В общем, ладно. Скорее всего, выберу первый вариант и, может, между делом в спокойном режиме как-то попинаю разработчиков. Хотя понятно, что, если они захотят вообще этим заниматься, то придется как-то с ними взаимодействовать, делать для них какие-то тесты и пр.
В этой связи возникает проблема. Либо плюнуть на неправильно подсчитываемую доменную квоту, оставить всё как есть и как бы не обращать на нее внимания. Потому что корректировать доменную квоту в таблице quota2 бесполезно, так как плагин постоянно обновляет эту запись.
Либо писать разработчикам Довкота и добиваться, чтобы они исправили ошибки (некогда этим заниматься, честно говоря). В общем, ладно. Скорее всего, выберу первый вариант и, может, между делом в спокойном режиме как-то попинаю разработчиков. Хотя понятно, что, если они захотят вообще этим заниматься, то придется как-то с ними взаимодействовать, делать для них какие-то тесты и пр.
- xM
- ст. лейтенант
- Сообщения: 1316
- Зарегистрирован: 2009-01-15 23:57:41
- Откуда: Königsberg
- Контактная информация:
Dovecot Quota - для каждого своя
Ещё раз. Доменная квота считается правильно.
Для пересчёта всех значений квот пользователей и доменов используйте скрипт dovequota.sh из статьи выше. Я его вчера обкатал во всех режимах и проблем с расчётами не отмечено. Та же ситуация и с триггером на удаление пользователей. Всё работает чётко.
Код: Выделить всё
# ./dovequota.sh calc
В теущей версии ошибка только с doveadm.
IT voodoo blog https://kostikov.co
-
- рядовой
- Сообщения: 19
- Зарегистрирован: 2017-11-26 9:26:29
Dovecot Quota - для каждого своя
Ёлки-палки. Часа три бился с идиотской проблемой. Не работает консольный логин в mysql. Все форумы облазил, решения не нашел. В итоге сам вычислил решение методом научного перебора.
Чтобы было понятно, о чем идет речь. Вот так команда не работает:
А вот так почему-то работает:
Загвоздка оказалась в том, что консольная команда не берет пароль в голом виде. Не берет она также пароль, заключенный в кавычках. А берет пароль только в окружении апострофов. То есть:
Вот такая хрень. В общем, в вашем скрипте надо переменные доступа к базе вместо кавычек заключить в апострофы. Тогда скрипт работает (у меня на openSUSE). Иначе никак.
Да, и у меня еще в команду подключения к mysql требуется добавить хост 127.0.0.1. Я это добавил у себя в скрипт.
В общем, доменная квота пересчиталась. Остальное сейчас протестирую.
Чтобы было понятно, о чем идет речь. Вот так команда не работает:
Код: Выделить всё
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
Да, и у меня еще в команду подключения к mysql требуется добавить хост 127.0.0.1. Я это добавил у себя в скрипт.
В общем, доменная квота пересчиталась. Остальное сейчас протестирую.
- xM
- ст. лейтенант
- Сообщения: 1316
- Зарегистрирован: 2009-01-15 23:57:41
- Откуда: Königsberg
- Контактная информация:
Dovecot Quota - для каждого своя
Если вы по поводу переменных в SQL запросах, то там апострофы, как обычно.
Примите во внимание что у вас Linux с его bash, а скрипт написан на sh.
IT voodoo blog https://kostikov.co