2015-12-09

PostgreSQL 9.1 Streaming Replication Example

=======================================
2015.12.08Step by step streaming replication instructions
100.100.100.22 - master(p03)
100.100.100.13 - slave(p03rep)
user replicator password somepassword
CREATE ROLE replicator LOGIN NOSUPERUSER INHERIT NOCREATEDB NOCREATEROLE REPLICATION;
PostgreSQL version = 9.1
=======================================

ssh postgres@100.100.100.22

# Check replication connection settings
grep "100.100.100.13" /var/lib/pgsql/data/pg_hba.conf
host replication replicator 100.100.100.13/32 md5
# GOOD!!!

# Check database replication settings
grep -E "(max_wal_senders|wal_level|wal_keep_segments|archive_mode|archive_command)" postgresql.conf
max_wal_senders = 5
wal_level = hot_standby
wal_keep_segments = 100
archive_mode = on
archive_command = 'test ! -f /u04/pgarch/%f && cp %p /u04/pgarch/%f'
# GOOD!!!

ssh root@100.100.100.13

service postgresql stop

ssh postgres@100.100.100.13

cd /u02/pgwork/pgbb
rm -rfv p03.pgbb
pg_basebackup -h 100.100.100.22 -U replicator -W -D p03.pgbb -v -Ft -x -z -P
rm -rfv /var/lib/pgsql/data/*
rm -rfv /u02/pgdata/oblbase/*
rm -rfv /u03/pgdata/oblbase_ix/*                                                                                                
tar -C /var/lib/pgsql/data -xvzf p03.pgbb/base.tar.gz                                                                           
rm -rfv /var/lib/pgsql/data/pg_log/*                                                                                            
tar -C /var/lib/pgsql/data/pg_tblspc/16475 -xvzf p03.pgbb/16475.tar.gz                                                          
tar -C /var/lib/pgsql/data/pg_tblspc/16476 -xvzf p03.pgbb/16476.tar.gz                                                          
chmod 0700 /var/lib/pgsql/data                                                                                                  
mv -v /var/lib/pgsql/data/postgresql.conf /var/lib/pgsql/data/postgresql.conf.workonproduction                                  
cat << EOF > /var/lib/pgsql/data/postgresql.conf                                                                                
listen_addresses = '*'                                                                                                          
max_connections = 3000                                                                                                          
shared_buffers = 500MB #40000MB                                                                                                 
max_prepared_transactions = 2000
work_mem = 10MB #360MB
maintenance_work_mem = 102MB #1024MB
synchronous_commit = off
checkpoint_segments = 8 #20
join_collapse_limit = 100
seq_page_cost = 0.0000001
random_page_cost = 2.0
cpu_operator_cost = 0.0000001
constraint_exclusion = on
log_destination = 'stderr'
logging_collector = on
log_line_prefix = '%d %u %h %a %s %t %p '
log_min_duration_statement = 15000
log_statement = ddl
log_hostname = on
log_temp_files = 0
log_lock_waits = on
autovacuum = off
datestyle = 'iso, dmy'
lc_messages = 'ru_RU.UTF-8'
lc_monetary = 'ru_RU.UTF-8'
lc_numeric = 'ru_RU.UTF-8'
lc_time = 'ru_RU.UTF-8'
default_text_search_config = 'pg_catalog.russian'
max_locks_per_transaction = 250
max_pred_locks_per_transaction = 250
max_wal_senders = 5
wal_level = hot_standby
hot_standby = on
wal_keep_segments = 100
archive_mode = on
archive_command = 'test ! -f /u04/pgarch/%f && cp %p /u04/pgarch/%f'
max_standby_archive_delay = -1
max_standby_streaming_delay = -1
EOF
chmod 600 /var/lib/pgsql/data/postgresql.conf
cat << EOF > /var/lib/pgsql/data/recovery.conf
standby_mode = 'on'
primary_conninfo = 'host=100.100.100.22 port=5432 user=replicator password=somepassword'
restore_command = 'cp /u04/pgarch/%f %p'
archive_cleanup_command = 'pg_archivecleanup /u04/pgarch %r'
EOF
chmod 600 /var/lib/pgsql/data/recovery.conf

ssh root@100.100.100.13

service postgresql start

=======================================

Monitoring of replication state on master:
select * from pg_stat_replication;
Читать далее

2015-07-03

Пример скрипта для Live Backup VM on XenServer

Скрипт проверен на версии Citrix XenServer 6.2.
Главное правильно определить переменные, остальное все будет сделано автоматом.

# BackUp Virtual Machine
# Citrix XenServer 6.2
# Nuance 1: XenServer Tools are not needed on the VM

export REMOTEHOST=120.71.111.41
export REMOTEDIR=vm
export REMOTEUSER=ksjhfksjdhfk
export REMOTEPASSWD=kdsfksdhfkjsdhfkhf
export VMNAME=xs62rectest
export VMSPEC=xs62_snap_xen10
export CURDATE=$(date +%Y-%m-%d.%H.%M.%S)
export MOUNTPOINT=/mnt/backup$VMNAME
export VMFILENAME=$VMNAME-$VMSPEC-$CURDATE

echo $(date +%Y-%m-%d.%H.%M.%S): START backup VM $VMNAME
echo $(date +%Y-%m-%d.%H.%M.%S): STEP: mkdir $MOUNTPOINT
mkdir $MOUNTPOINT -p
echo $(date +%Y-%m-%d.%H.%M.%S): STEP: mount //$REMOTEHOST/$REMOTEDIR to $MOUNTPOINT
mount -t cifs "//$REMOTEHOST/$REMOTEDIR" -o username=$REMOTEUSER,password=$REMOTEPASSWD $MOUNTPOINT
echo $(date +%Y-%m-%d.%H.%M.%S): STEP: creating snapshot
export SNAPUUID=`xe vm-snapshot vm=$VMNAME new-name-label=$VMFILENAME.snapshot`
echo $(date +%Y-%m-%d.%H.%M.%S): DONE: spapshot uuid = $SNAPUUID
echo $(date +%Y-%m-%d.%H.%M.%S): STEP: converting snapshot to VM
xe template-param-set is-a-template=false ha-always-run=false uuid=$SNAPUUID
echo $(date +%Y-%m-%d.%H.%M.%S): STEP: exporting snapshot to $MOUNTPOINT/$VMFILENAME.xva.gz
xe vm-export vm=$SNAPUUID compress=true filename=$MOUNTPOINT/$VMFILENAME.xva.gz
echo $(date +%Y-%m-%d.%H.%M.%S): STEP: deleting snapshot
xe vm-uninstall uuid=$SNAPUUID force=true
echo $(date +%Y-%m-%d.%H.%M.%S): STEP: umount -l $MOUNTPOINT
umount -l $MOUNTPOINT
echo $(date +%Y-%m-%d.%H.%M.%S): FINISH backup VM $VMNAME


Читать далее

Установка mc на xenserver

Проверено на 6.2.
mc реально нехватает. Ставится в полпинка, при условии наличия интернет

export http_proxy=http://xxx.xxx.xxx.xxx:3128
yum install --enablerepo=base mc

Читать далее

2015-06-26

Live Backup VM on XenServer 6.2

# BackUp Virtual Machine
# Citrix XenServer 6.2
# Manual
# Nuance 1: XenServer Tools are not needed on the VM

#########################################################################################################

mkdir /mnt/backup
mount -t cifs "//10.77.11.200/w4a" -o username=username,password=password /mnt/backup

#########################################################################################################

# First look for the uuid of the VMs to backup.
# We don’t want to backup the control domain itself,
# so we add is-control-domain=false to the vm-list command
# and we also don’t want backups of snapshots
# so we add is-a-snapshot=false

xe vm-list is-control-domain=false is-a-snapshot=false

uuid ( RO)           : 9814bca5-7cef-5b67-84a9-25b4ce078c86
     name-label ( RW): OpenMeetings
    power-state ( RO): halted


uuid ( RO)           : fb6f41cc-6051-96d8-ad88-6e93db6f873c
     name-label ( RW): xs62rectest
    power-state ( RO): running


uuid ( RO)           : befb8299-3e4b-cf21-db4d-117c46da7da5
     name-label ( RW): res-j-p
    power-state ( RO): running


uuid ( RO)           : 34f543c2-fc96-8271-770c-01c2a12db006
     name-label ( RW): stock03
    power-state ( RO): running


uuid ( RO)           : cee0d00c-977e-1bb0-83cb-477fac5f6f9c
     name-label ( RW): Xackup-portal
    power-state ( RO): running

#########################################################################################################

# Now we create a snapshot of the VMs we want to backup,
# replacing the vm(uuid) one by one with the ones we found
# with the previous command. Also replace the name of
# the snapshot if desired

#xe vm-snapshot uuid=fb6f41cc-6051-96d8-ad88-6e93db6f873c new-name-label=xs62rectest-snapshot-20150625001.snapshot
xe vm-snapshot vm=xs62rectest new-name-label=xs62rectest-snapshot-20150625002.snapshot

7a237b62-9c13-e579-c4f3-f4d71b4fafaa

xe snapshot-list

uuid ( RO)                : 7a237b62-9c13-e579-c4f3-f4d71b4fafaa
          name-label ( RW): xs62rectest-snapshot-20150625004.snapshot
    name-description ( RW): Test VM for backup&restore process
CentOS6.6

#########################################################################################################

# Previous command has a return value: the uuid of the created snapshot.
# Then we transform the snapshot into a VM to be able to save it to
# a file, replacing uuid with the return value of the previous command

xe template-param-set is-a-template=false ha-always-run=false uuid=7a237b62-9c13-e579-c4f3-f4d71b4fafaa

#########################################################################################################

# Now we can export created snapshot to .xva file,
# which can be easily restored from command line or XenCenter.
# .xva file is saved on a remote filesystem.

xe vm-export vm=7a237b62-9c13-e579-c4f3-f4d71b4fafaa filename=/mnt/backup/xs62rectest-20150625002.xva

#########################################################################################################

# Finally as we have already taken backup to xva file,
# so we can destroy created snapshot from xenserver

xe vm-uninstall uuid=7a237b62-9c13-e579-c4f3-f4d71b4fafaa force=true
#xe snapshot-uninstall uuid=7d4c20e1-8fd3-27c6-c79b-68cb258af952 force=true

#########################################################################################################
#########################################################################################################
#########################################################################################################

# Script

mkdir /mnt/backup
mount -t cifs "//10.77.11.200/w4a" -o username=username,password=password /mnt/backup
xe vm-list is-control-domain=false is-a-snapshot=false
xe vm-snapshot vm=xs62rectest new-name-label=xs62rectest-snapshot-20150625002.snapshot
xe template-param-set is-a-template=false ha-always-run=false uuid=7a237b62-9c13-e579-c4f3-f4d71b4fafaa
xe vm-export vm=7a237b62-9c13-e579-c4f3-f4d71b4fafaa filename=/mnt/backup/xs62rectest-20150625002.xva
xe vm-uninstall uuid=7a237b62-9c13-e579-c4f3-f4d71b4fafaa force=true
cd /mnt/backup
tar -cvzf xs62rectest-20150625002.xva.tar.gz xs62rectest-20150625002.xva
rm xs62rectest-20150625002.xva
cd ~
umount /mnt/backup
Читать далее

2015-06-19

There is not enough space to upload the update location: /var/patch

При очередном обновлении Citrix XenServer 6.2 получил ошибку:

There is not enough space to upload the update
location: /var/patch

Как оказалось, в данной директории лежат все патчи, что были применены с самого начала работы сервера. Поковырявшись в интернете нашел решение(http://www.visions.se/xenserver-command-line-commands/)

В консоли xenserver необходимо выполнить:

for i in `xe patch-list --minimal|tr "," " "`;do xe patch-pool-clean uuid=$i;done

Также данную команду рекомендую выполнить после перезагрузки сервера(после того, как на него поставили патчи)

Читать далее

2015-06-09

Zimbra. Первый раз в первый класс. Базовая настройка.


В ПРОЦЕССЕ НАПИСАНИЯ!!!!

Пока идет непримеримая борьба с thunderbird, ldap, cyrus-imapd, postfix и другими коммунистическими товариСЧами, решил попробовать госпожу ZIMBRA, ибо там эти товарисчи уже приведены в капиталистический облик.

Итак, Zimbra проставлена на CentOS6.6. Сразу куча вопросов, и вот тут будет маленький склерозник.

[zimbra@zimbra ~]$ zmcontrol -v
Release 8.6.0_GA_1153.RHEL6_64_20141215151155 RHEL6_64 FOSS edition, Patch 8.6.0_P1.

Что мы собственно хотим получить:
+++ 1. Мультидоменность
--- 2. Квотирование ящиков
+++ 3. Нотификацию пользователей о новых письмах/событиях
+++ 4. Глобальная адресная книга (частично автоматически наполняемая, если это возможно, например при создании/изменении ящиков). Перенос существующей с openLDAP.
+++ 5. Запрет пользователям менять свои реквизиты самостоятельно (ФИО, должность, подразделение, телефон и т.д.).
+++ 6. Доступ к ящикам и письмам при необходимости без участия пользователя
+++ 7. Глобальное управление настройками доменов (квотирование, модули интерфейса и т.д.)
--- 8. Возможность зачистки старой почты по определенным правилам.
+++ 9. Псевдонимы(алиасы) доменов/ящиков (см. п.1 МУЛЬТИДОМЕННОСТЬ).
+++ 10. Инструкция по расширению места на дисковой подсистеме centos. Я так редко это делаю, что постоянно забываю. А тут виртуалка, так что без этого никак.
+++ 11. Списки рассылок.
+++ 12. Обработку заголовков и bcc_maps на уровне MTA.
+++ 13. Антивирусная защита
+++ 14. Маршрутизация почты на уровне ящиков(ящики одного домена на разных серверах, для реализации постепенной миграции).
--- 15. Доступ по http/https.
+++ 16. Антиспам. Не рассматриваем пока. В составе что-то есть, пока вообще не приоритет.
+++ 17. План переезда отдельных учетных записей.
--- 18. Настройка нескольких почтовых ящиков на одном рабочем месте
+++ 19. Понятное резервное копирование
+++ 20. Изменение допустимых размеров вложений и писем

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


Что нужно помнить:
Ручные изменения конфигов в папке .opt/zimbra/conf перетираются при обновлении ПО. Так что из нужно бэкапить дабы не убить при обновлении, И ПОМНИТЬ О ТОМ, ЧТО ТАМ ЧТО_ТО СДЕЛАНО РУЧКАМИ!!!!!
Админка работает на порту 7071
10) Web server HTTP port:                    8080
11) Web server HTTPS port:                   8443
12) Web server mode:                         https
13) IMAP server port:                        7143
14) IMAP server SSL port:                    7993
15) POP server port:                         7110
16) POP server SSL port:                     7995

################################################
1. МУЛЬТИДОМЕННОСТЬ
################################################

Есть такое дело, причем все достаточно просто. Даже алиасы на домены делать можно. Вот например есть у нас домен *.domain.com.ua, и устаревший *.domain.er.gov.ua, на который до сих пор работают подрядчики в районы, банки там, почтамт и т.д.
Делаем домен new.domain.com.ua, где клепаем ящики, и делаем алиас на него, old.domain.er.gov.ua. Теперь вся почта домена old.domain.er.gov.ua будет автоматом заворачиваться на соответствующий ящик домена new.domain.com.ua.

################################################
2. КВОТИРОВАНИЕ
################################################

Должно работать хитро. Квотирование не должно влиять на получение почты, только на отправку.
Квотирование настраивается в COS. А вот как настроить мою хитрую необходимость пока не понятно...

################################################
3. НОТИФИКАЦИЯ ПОЛЬЗОВАТЕЛЕЙ
################################################

Можно настроить только два момента - Подсветка вкладки "Почта" при получении сообщения и мерцание заголовка браузера при получении сообщения . Все в том же COS. Правда окно у меня при проверке так и не замигало. Кроме того есть еще zimlet что-то типа "Zimbra Notifier", который ставится в систему и маячит в трее о новых сообщениях.

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

################################################
4. ГЛОБАЛЬНАЯ АДРЕСНАЯ КНИГА
################################################ 

Нужно включить GAL(Clobal Address List) так, чтобы он был доступен всем доменам. Это типа должна быть такая адресная книга. По умолчанию она видима только внутри домена, но так как у нас из будет целый зоопарк, да еще и с псевдонимами(или алиасами, как их еще называют).

Делаем так:

su - zimbra
zmprov mcf zimbraGalInternalSearchBase ROOT
zmprov mcf zimbraGalSyncInternalSearchBase ROOT

Далее проводим следственный эксперимент.  То есть тупо проверяем, что все у нас будет работать.

Есть домен по умолчанию - zimbra.xoe.com.ua. К нему конечно есть вопросы, он выпадает из общей идеологии адресного пространства компании, так как был создан первым во время установки системы и отсутствия понимания принципов. Но пока его оставим.

Создаем новый домен - ks.com.ua, в котором создается учетная запись GAL galsync@ks.com.ua прямо во время настройки домена.

Создаем поддомены - co.ks.com.ua и gs.ks.com.ua, там аналогичным образом создается запись GAL. В каждом домене создаем пользователя и максимально заполняем реквизиты(test_ivanov@co.ks.com.ua, test_petrov@gs.ks.com.ua), после чего выполняем принудительную синхронизацию:

zmgsautil forceSync -a galsync@ks.com.ua -n zimbra
, где zimbra - имя источника данных для внутреннего GAL. И так как у нас все записи GAL видно из любого домена, данную команду нужно выполнить для каждого домена. Или тупо подождать, пока само не просинхронизируется (настройка GAL домена).

Кстати, есть простой вариант, который мне, например, подходит. Как я сделал: в домене ks.com.ua сделал учетку addr@ks.com.ua, пошарил ее адресную книгу всем на чтение. Вношу адреса в нее, а ее подключаю в учетках пользователей. Таком образом пользователям доступен GAL и подключенная адресная книга addr@ks.com.ua. На этапе переезда, если он будет, нашей системы из 900 адресов на zimbra это может быть промежуточным решением до того, как все контакты появятся в GAL. Кроме того книга addr@ks.com.ua организована древовидно, что удобно.

Ну а теперь по поводу того, как нам свою влить сюда.
Нашел такую утилиту, как http://ldap-csvexport.sourceforge.net. Я тут как раз собирался начать изучать perl, так вот код скрипта очень красивый, как для perl :).

./ldap-csvexport.pl -H ip_old_ldap_server -a ou,cn,sn,givenName,title,mail -b dc=ks,dc=com,dc=ua > ldap.csv

В получившемся ldap.csv меняем первую строку

"ou";"cn";"sn";"givenName";"title";"mail"

на строку

"department";"fullName";"lastName";"firstName";"jobTitle";"email"

и удаляем из файла ненужный нам мусор:

cat ldap.csv | grep -v '"";"";""' > ldap-mod2.csv

После сей замечательное процедуры в пользователе адресной книги создаем каталог, куда импортируем файл ldap-mod2.csv. Шарим этот каталог и отдаем в работу.
Нужно учитывать, что данная адресная книга ВРЕМЕННАЯ, так как там все в одной куче.
По мере создания учетных записей будет актуальная GAL, ну и адресную книгу лучше сделать по человечески. В этой все в куче.

################################################
5. ЗАПРЕТ ПОЛЬЗОВАТЕЛЮ МЕНЯТЬ СВОИ РЕКВИЗИТЫ
################################################

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

################################################
6. ДОСТУП К ЯЩИКАМ И ПИСЬМАМ ПРИ
НЕОБХОДИМОСТИ БЕЗ УЧАСТИЯ ПОЛЬЗОВАТЕЛЯ
################################################

Ну это просто какая-то прелесть :)
Вообще все просто проще некуда.
Идем в управление учетными записями, щелкаем на интересующей правой кнопкой мышки, выбираем "Просмотр почты" И ВСЕ!!!!! 

################################################
7. ГЛОБАЛЬНОЕ УПРАВЛЕНИЕ НАСТРОЙКАМИ ДОМЕНОВ
################################################

Делается  это все через классы обслуживания, или COS(Class of Service) и сами домены, к которым привязывается COS. Плюшек там много, и ими надо пользоваться.
Самое приятное, что можно сделать при помощи COS:
--- настроить в COS квоту пользователя и привязать COS к домену. Теперь все, кто в нем создается имеют квоту из COS.
--- настроить доступные протоколы(IMAP, POP), зимлеты, задачи(почта, календарь, ежедневник, настройки). Вот уберешь галочку с настроек, и будет пользователь горько плакать, ибо из у него не будет.
--- можно запретить создавать общие ресурсы.
--- настроить темы, периодичность проверки почты, проверку орфографии...
--- и еще много-много всякой полезной всячины.

Осадок в душе оставило то, что я не смог поменять COS на домена. Черег GUI получил ошибку, через zmprov не нашел возможности. Но она есть, просто я бросил искать, ибо не приоритет.

А нет, вот нужда заставила. Оказывается ошибка при смене cos через gui тянется еще с 8.5 версии. Засранцы, до сих пор не полатали. А исправить можно так. например на домен co.ks.com.ua нужно поставить cos all:

[zimbra@zimbra ~]$ zmprov gc all | grep zimbraId
zimbraId: e3793f8c-6853-4cfb-9bb9-97114b8a5ffb
zimbraIdentityMaxNumEntries: 20
[zimbra@zimbra ~]$ zmprov md co.ks.com.ua zimbraDomainDefaultCOSId e3793f8c-6853-4cfb-9bb9-97114b8a5ffb

Однако бубен, однако работает :)

################################################
8. ВОЗМОЖНОСТЬ ЗАЧИСТКИ СТАРОЙ ПОЧТЫ
ПО ОПРЕДЕЛЕННЫМ ПРАВИЛАМ
################################################ 

В настройках COS есть такая фишка, как "политики сохранения". Такие же есть на глобальном уровне. Там можно настроить, сколько может жить сообщение. По окончанию срока жизни сообщение удаляется. Это все. Если нужно что-то большее - сами, сами, ручками, скриптиками, костыликами, думайте...

################################################
10. РАСШИРЕНИЕ РАЗДЕЛА CENTOS
################################################

[root@zimbra /]# export http_proxy=http://10.11.11.70:3128
[root@zimbra /]# umount /dev/xvdb1
[root@zimbra /]# yum install parted
[root@zimbra ~]# parted /dev/xvdb
GNU Parted 2.1
Используется /dev/xvdb
Добро пожаловать в GNU Parted! Наберите 'help' для просмотра списка команд.
(parted) print                                                           
Модель: Виртуальное блочное устройство Xen (xvd)
Диск /dev/xvdb: 26,8GB
Размер сектора (логич./физич.): 512B/512B
Таблица разделов: msdos

Номер  Начало  Конец   Размер  Тип      Файловая система  Флаги
 1     1049kB  10,7GB  10,7GB  primary  ext4

(parted) resize 1
Конец? 26,8GB                                                            
(parted) quit                                                            
Информация: Не забудьте обновить /etc/fstab.                             

Попробовали, нихрена не сработало. Оказывается parted до сих пор не поддерживает ext4.

А потом когда баловался в resize2fs и fdisk раздел был успешно пересоздан вот этими самыми кривыми руками :( Так что сейчас займусь восстановлением, а потом продолжим.

КАРОЧИ!!!! ТУПО БЕРЕМ LIVE DVD OPENSUSE, ГРУЗИМСЯ С НЕГО И МЕНЯЕМ РАЗМЕР РАЗДЕЛА. ВСЕГДА РАНЬШЕ ТАК ДЕЛАЛ И НЕ БЫЛО НИ ОДНОЙ ОСЕЧКИ!!!НЕ ЗАБЫВАЕМ ПЕРЕД ЭТИМ СДЕЛАТЬ БЭКАП РАЗДЕЛА!!!!

################################################
11. СПИСКИ РАССЫЛОК
################################################

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

################################################
12. ОБРАБОТКА ЗАГОЛОВКОВ ПИСЕМ НА УРОВНЕ MTA
################################################

В postfix у нас есть такой замечательный файлик /etc/postfix/header_checks, в котором настроено перекидывание банковских выписок. Цель - получить аналогичное в zimbra.
В zimbra используется postfix, но файлы конфигурации его динамические и при выполнении команды

zmmtactl reload

перетираются неизвестнооткудаберущимися.

Соответственно напрямую менять параметры postfix бессмыссленно.
Нас интересует параметр header_checks. Вот как мы его можем посмотреть:

[zimbra@zimbra ~]$ zmprov gacf | grep zimbraMtaHeaderChecks
zimbraMtaHeaderChecks: pcre:/opt/zimbra/conf/postfix_header_checks

А вот что в зимбровском постфиксе:

[root@zimbra conf]# /opt/zimbra/postfix/sbin/postconf header_checks
header_checks =

Как видим, настройки отличаются.

Логично предположить, что раз указывается на файл, то если таковой будет в наличии, то перетираться он не будет, а будет использоваться по прямому назначению.
Создаем файл /opt/zimbra/conf/header_checks, заполняем его и меняем настройку:

[zimbra@zimbra ~]$ zmprov mcf zimbraMtaHeaderChecks regexp:/opt/zimbra/postfix/conf/header_checks
[zimbra@zimbra conf]$ zmprov mcf zimbraMtaBlockedExtensionWarnRecipient FALSE
[zimbra@zimbra conf]$ zmmtactl reload
[root@zimbra conf]# /opt/zimbra/postfix/sbin/postconf header_checks
header_checks = regexp:/opt/zimbra/postfix/conf/header_checks 

Ты гля, совпало... И, кстати, заработало. Так что радуемся. 

Ну и еще, у нас настроен дубляж почты по адресам отправителей/получателей на отдельные архивные ящики, которые частенько используются для разбора полетов. Для этого используются параметры
recipient_bcc_maps=hash:/etc/postfix/bcc_maps_r
sender_bcc_maps=hash:/etc/postfix/bcc_maps_s
, это на старом сервере. Переносим аналогичную настройку на новый.
Первым делом копируем соответствующие файлы (bcc_maps_r, bcc_maps_s) со старого сервера (/etc/postfix/) на новый (/opt/zimbra/postfix/conf)
После чего

[zimbra@zimbra ~]$ zmlocalconfig -e postfix_recipient_bcc_maps = lmdb:/opt/zimbra/postfix/conf/bcc_maps_r
[zimbra@zimbra ~]$ zmlocalconfig -e postfix_sender_bcc_maps = lmdb:/opt/zimbra/postfix/conf/bcc_maps_s
[zimbra@zimbra ~]$ /opt/zimbra/postfix/sbin/postmap /opt/zimbra/postfix/conf/bcc_maps_r
[zimbra@zimbra ~]$ /opt/zimbra/postfix/sbin/postmap /opt/zimbra/postfix/conf/bcc_maps_s

Ну и после этого еще одну неправильную вещь. Редактируем файл /opt/zimbra/conf/zmconfigd.cf.
В секцию "SECTION mta DEPENDS amavis" перед строкой "RESTART mta" добавляем две строки:

POSTCONF recipient_bcc_maps     lmdb:/opt/zimbra/postfix/conf/bcc_maps_r
POSTCONF sender_bcc_maps     lmdb:/opt/zimbra/postfix/conf/bcc_maps_s

и делаем zmmtactl reload.

ВНИМАНИЕ!!! При обновлении zimbra файл zmconfigd.cf с вероятностью 99% будет ликвидирован и заменен на новый. Но другого способа как сделать то, что я хотел, я не нашел!!! Это надо учитывать при обновлении. Указанное выше применение zmlocalconfig вроде как должно не дать поломаться системе при обновлении, но проверить пока не могу - нечего обновлять.

################################################
13. АНТИВИРУСНАЯ ЗАЩИТА
################################################

Не мудрствуя лукаво ZIMBRA, как и я ( :) ) использует clamav, только не через clamsmtpd, а через amavisd. Но не суть. Единственное, что нам надо сделать, это настроить прокси для freshclam для обновления антивирусных баз. Почему-то системные настройки proxy freshclam использовать упорно не хочет.
Для этого редактируем файл /opt/zimbra/conf/freshclam.conf.in (freshclam.conf будет перетерт им при перезапуски антивируса). В файле меняем настройки прокси (HTTPProxyServer, HTTPProxyPort) и перезапускаем антивирусную защиту.

[zimbra@zimbra ~]$ zmantivirusctl restart 

################################################
14. МАРШРУТИЗАЦИЯ ПОЧТЫ НА
УРОВНЕ ПОЧТОВЫХ ЯЩИКОВ
################################################

Собственно в чем суть. Адресов и доменов дофига, и переезд на зимбру планируется сделать плавный и постепенный. Когда мы переезжали на cyrus-imapd, postfix через transport был настроен на ручную маршрутизацию. То есть например, Васю Пупкина отправляем на хост такой-то, Папу Курицина туда-то, всех остальных в сад, то есть на третий сервер. Так постепенно все и переехали. Здесь мне надо так-же. Так как постфикс тут с шифрами, то посмотреть настройки transport можно так:

[zimbra@zimbra ~]$ zmprov gacf | grep zimbraMtaTransportMaps
zimbraMtaTransportMaps: proxy:ldap:/opt/zimbra/conf/ldap-transport.cf
[zimbra@zimbra ~]$ /opt/zimbra/postfix/sbin/postconf transport_maps     
transport_maps = proxy:ldap:/opt/zimbra/conf/ldap-transport.cf

Настраиваем зимбропостфикс на использование /opt/zimbra/postfix/conf/transport, такой родной и привычный:

[zimbra@zimbra ~]$ zmprov mcf zimbraMtaTransportMaps "proxy:ldap:/opt/zimbra/conf/ldap-transport.cf, lmdb:/opt/zimbra/postfix/conf/transport"
[zimbra@zimbra ~]$ /opt/zimbra/postfix/sbin/postmap /opt/zimbra/postfix/conf/transport
[zimbra@zimbra ~]$ zmmtactl reload

Теперь так. У нас есть домен co.ks.com.ua на старом сервере. Такой же на новом сервере. Шо робыть???
На старом сервере понятно: адрес, который переехал на новый сервер пробиваем в transport таким вот образом:

address1@co.ks.com.ua smbt:ip_of_new_server_zimbra

А вот что на зимбре??? Там у нас будет так:

co.ks.com.ua          smtp:ip_of_old_server_postfix
fa@co.ks.com.ua       local:zimbra

Теперь по мере переезда адресов подрихтовываем файлы transport на обеих серверах. Когда все переедет, соответствующие записи в transport на зимбре просто удалим.

Не забываем после изменения transport делать postmap и zmmtact.

И еще весьма мутный момент. Например, есть домен gs.ks.com.ua и алиас на него gs.old.some.com.ua. Мы их создали в zimbra и начали перенос ящиков. НО. Как оказалось, алиасы отрабатывают РАНЬШЕ правил в transport. То есть приходит нам письмо со старого сервера от user@gs.old.some.com.ua и мы на него отвечаем. При этом в transport прописан маршрут, куда ехать smtp для данного домена. Но он не срабатывает, мы получаем ошибку, что ящик user@gs.ks.com.ua не существует. Перечитайте еще раз, тут надо прочувствовать. И вот как нам иметь ящики домена gs.old.some.com.ua на старом сервере, а алиас в zimbra?

Наверное сделаем так. Алиасы переименовываем по принципу такому:

zmprov -l rd gs.old.some.com.ua temp.gs.old.some.com.ua

Как только домен переедет целиком, алиас вертаем в зад. Зимбру настраиваем на использование алиасов постфикса:

[zimbra@zimbra ~]$ zmprov gacf zimbraMtaAliasMaps
[zimbra@zimbra ~]$ zmprov mcf zimbraMtaAliasMaps "lmdb:/etc/aliases, lmdb:/opt/zimbra/postfix/conf/ali4migrate"
[zimbra@zimbra ~]$ touch /opt/zimbra/postfix/conf/ali4migrate
[zimbra@zimbra ~]$ /opt/zimbra/postfix/sbin/postalias /opt/zimbra/postfix/conf/ali4migrate
[zimbra@zimbra ~]$ zmmtactl reload

Теперь на сервере зимбры для учетки, которая меняет доменное имя при переезде добавляем
в ali4migrate:

fname.lname:        fname.lname@gs.ks.com.ua

в transport:

fname.lname@gs.ks.com.ua                  local:zimbra
fname.lname@gs.old.some.com.ua             local:fname.lname

Применяем изменения:
[zimbra@zimbra ~]$ /opt/zimbra/postfix/sbin/postalias /opt/zimbra/postfix/conf/ali4migrate
[zimbra@zimbra ~]$ /opt/zimbra/postfix/sbin/postmap /opt/zimbra/postfix/conf/transport
[zimbra@zimbra ~]$ zmmtactl reload

Теперь на сервере, где живет gs.old.some.com.ua

в ali4migrate:

fname.lname:    fname.lname@gs.ksoe.com.ua

в transport:

fname.lname@gs.old.some.com.ua         local:fname.lname

Далее дописано 2015.04.29

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


: mail forwarding loop for
    nach_insp@gs.....ua



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

Обходимся без всяких алиасов, транспортов и т.д.

[zimbra@zimbra ~]$ /opt/zimbra/postfix/sbin/postconf smtpd_recipient_restrictions
smtpd_recipient_restrictions = reject_non_fqdn_recipient, permit_sasl_authenticated, permit_mynetworks, reject_unlisted_recipient, reject_invalid_helo_hostname, reject_non_fqdn_sender, check_recipient_access lmdb:/opt/zimbra/postfix/conf/recipient_redirect, permit

Редактируем файл/opt/zimbra/conf/zmconfigd/smtpd_recipient_restrictions.cf. ПЕРВОЙ строкой (чтобы обрабатывалось раньше всех) добавляем:

check_recipient_access lmdb:/opt/zimbra/postfix/conf/recipient_redirect

[zimbra@zimbra ~]$ touch /opt/zimbra/postfix/conf/recipient_redirect

В recipient_redirect добавляем примерно следующее

nach_insp@gs.....ua   REDIRECT  someothermail@fff.com

[zimbra@zimbra ~]$ /opt/zimbra/postfix/sbin/postmap -v /opt/zimbra/postfix/conf/recipient_redirect
[zimbra@zimbra ~]$ zmmtactl reload
[zimbra@zimbra ~]$ /opt/zimbra/postfix/sbin/postconf smtpd_recipient_restrictions
smtpd_recipient_restrictions = check_recipient_access lmdb:/opt/zimbra/postfix/conf/recipient_redirect, reject_non_fqdn_recipient, permit_sasl_authenticated, permit_mynetworks, reject_unlisted_recipient, reject_invalid_helo_hostname, reject_non_fqdn_sender, permit

Вроде как настройки применены.

Далее дописано 2015.06.09

Вылезла очередная фигня. Предыдущая настрока не устраивает, потому что оказалось, что: если пользователь отправляет письмо на двух адресатов, один из которых перечислен в файле recipient_redirect, то письмо получит только он, второй получатель не получит ничего, ибо письмо уже было ПЕРЕНАПРАВЛЕНО перечисленному. И вот тут я не могу понять, то ли это баг, то ли это фича :) Фак в том, что пользователи у меня не всегда гарантировано получают почту, и это плохо...

Попробуем еще по другому сделать.

Смотрим следующие настройки:

[zimbra@zimbra ~]$ zmprov gacf | grep zimbraMtaVirtualAliasMaps
zimbraMtaVirtualAliasMaps: proxy:ldap:/opt/zimbra/conf/ldap-vam.cf
или так
[zimbra@zimbra ~]$ zmprov gacf zimbraMtaVirtualAliasMaps
zimbraMtaVirtualAliasMaps: proxy:ldap:/opt/zimbra/conf/ldap-vam.cf

Меняем:

[zimbra@zimbra ~]$ zmprov mcf zimbraMtaVirtualAliasMaps "proxy:ldap:/opt/zimbra/conf/ldap-vam.cf, lmdb:/opt/zimbra/postfix/conf/virtual"

В /opt/zimbra/postfix/conf/virtual добавляем запись:
oldmail@olddomain.com     newmail@newdomain.com

Выполняем:

[root@zimbra ~]# chown zimbra:zimbra /opt/zimbra/postfix/conf/virtual
[zimbra@zimbra ~]$ /opt/zimbra/postfix/sbin/postmap /opt/zimbra/postfix/conf/virtual
[zimbra@zimbra ~]$ zmmtactl reload

################################################
15. ДОСТУП ПО HTTP/HTTPS
################################################

По умолчанию работает только по https. Включаем http и https вместе:

[zimbra@zimbra ~]$ /opt/zimbra/bin/zmtlsctl both
[zimbra@zimbra ~]$ zmcontrol stop
[zimbra@zimbra ~]$ zmcontrol start

Фигня в том, что при доступе по http нужно указывать порт 8080, а нам не хочется.
Но нам, по ходу, придется.

################################################
17. ПЛАН ПЕРЕЕЗДА ОТДЕЛЬНЫХ ПОЧТОВЫХ ЯЩИКОВ
################################################

1. На сервере zimbra создаем новый почтовый ящик. При создании МАКСИМАЛЬНО заполняем все атрибуты. Особенно внимание к ФИО, ОТОБРАЖЕНИЕ, ДОЛЖНОСТЬ, ОТДЕЛ, ОРГАНИЗАЦИЯ, ТЕЛЕФОН ВНУТРЕННИЙ И ВНЕШНИЙ. Основой для заполнения реквизитов являютпя ПК "Кадры" и "Зарплата", телефонный справочник. Безликие адреса, типа bt-01@ss.gg.tt выясняем с пользователями, такие адреса либо сервисные, то есть официальные, либо персональные, но сделанные через жопу в старые добрые времена, когда все делалось через жопу. Если ящик сервисный или официальный, так и оставляем, если черезжопный, делаем нормальный адрес, а этот оставляем синонимом на него. В качестве образца спросите меня какой ящик использовать.
2. В адресной книге addr@ksoe.com.ua создаем соответствующие контакт в соответствующей ветке дерева отделов. При создании МАКСИМАЛЬНО заполняем все атрибуты (смотри п.1). ВНИМАНИЕ!!! В адресной книге атрибутов больше, на ее основе будет составляться динамическая подпись. В качестве образца спросите меня какой ящик использовать.
3. Во временной импортированной адресной книге соответствующий контакт удаляем.
4.1. Если домен ящика не меняется, то в файлах transport старого и нового сервера вносим изменения:
на старом (/etc/postfix/transport)сервере добавляем:
address@co.ks.com.ua               smtp:10.11.11.84
на новом(/opt/zimbra/postfix/conf/transport) сервере добавляем:
address@co.ks.com.ua       local:zimbra
4.2 Если домен ящика меняется(например с aaa@gs.ks.old.somedomain.com.ua на aaa@gs.ks.com.ua ), то
на старом (/etc/postfix/transport) добавляем:
aaa@gs.ks.old.somedomain.com.ua         local:aaa
на старом (/etc/postfix/ali4migrate) добавляем:
aaa:    aaa@gs.ks.com.ua
на новом (/opt/zimbra/postfix/conf/transport)
aaa@gs.ks.old.somedomain.com.ua         local:aaa
aaa@gs.ks.com.ua                              local:zimbra
на новом (/opt/zimbra/postfix/conf/ali4migrate)
aaa:                    aaa@gs.ks.com.ua
5. На компе пользователя при помощи thunderbird переносим почту на новый сервер.

################################################
18. НАСТРОЙКА НЕСКОЛЬКИХ ПОЧТОВЫХ ЯЩИКОВ
НА ОДНОМ РАБОЧЕМ МЕСТЕ
################################################

В принципе настройки все делаются через вкладку "НАСТРОЙКИ", ну а как еще. Пользоваться только неудобно получается. Но ко всему можно привыкнуть. Минус в том, что видно все папки учетки, включая адресные книги, в том числе подключенные общие ресурсы. И отписаться от них, несмотря на то, что адрес настраивается как внешний IMAP, возможности нет. Но, опять же, все это можно терпеть.

Настройки работы с несколькими почтовыми ящиками тут оригинальные. Варианта 3, все есть в теме http://community.zimbra.com/collaboration/f/1886/t/1138637.
1. Подключать ящики как внешние IMAP. Вариант настолько кривой, шопипец. Во первых, сжирается квота твоего ящика, так как зимбра синхронизирует внешние ящики с твоим. Соответственно в твоем ящике будет сожрано ровно чтолько, сколько в присоединенных внешних IMAP. Кроме того этим неудобно пользоваться. Кроме того череж задницу организована проверка почты.
2. Создавать псевдонимы(алиасы), состоящие из ящиков, которые должны быть в одном профиле. Пока не попробовал, но там по ходу аналогичная шняга с квотой, как во внешних IMAP ящиках.
3. В ящике, который должен быть присоединен, нарезаются доступы на конкретные папки конкретным пользователям. И эти папки присоединяются в конкретные ящики. Есть минус - нельзя пошарить весь ящик целиком, соответственно если на рабочем месте, где присоединяемый ящик является основным, создали папку и не пошарили ее, то никто больше эту папку не увидит.

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

################################################
19. ПОНЯТНОЕ РЕЗЕРВНОЕ КОПИРОВАНИЕ
################################################


С понятным резервным копированием тяжело. Для community версии ничего толкового не нашел. В вики есть куча вариантов, но все они основаны на остановке сервисов зимбры и либо копирования всего тома целиком, либо его синхронизации, либо упаковке и копировании и т.д. Самое неприятное, что сервисы нужно останавливать. В нашем случае с планируемыми объемами хранения бэкап будет делаться долго, а не работать система долго (более часа) не может. Так что есть 2 варианта:
1. Резервное копирование виртуальной машины целиком на ходу.
2. Тупая упаковка /opt/zimbra тоже на ходу.
Совместив эти два незатейливых способа мы можем добиться желаемого результата. Для восстановления системы целиком подойдет способ 1, для восстановления отдельных писем - способ 2.
Есть еще 3-й вариант - сделать самому нечто человеческое. Но это тот еще факультативчик,  из разряды былобыуменянемеряновремени...
Полезности:
https://wiki.zimbra.com/wiki/Zimbra_DR_Strategy

################################################
20. ИЗМЕНЕНИЕ ДОПУСТИМЫХ РАЗМЕРОВ
ПИСЕМ И ВЛОЖЕНИЙ
################################################

[zimbra@zimbra ~]$ /opt/zimbra/postfix/sbin/postconf message_size_limit
message_size_limit = 10240000
[zimbra@zimbra ~]$ zmprov gacf zimbraMtaMaxMessageSize
zimbraMtaMaxMessageSize: 10240000
[zimbra@zimbra ~]$ zmprov gacf zimbraFileUploadMaxSize
zimbraFileUploadMaxSize: 10485760
[zimbra@zimbra ~]$ zmprov gacf zimbraMailContentMaxSize
 zimbraMailContentMaxSize: 10240000
[zimbra@zimbra ~]$ zmprov gs zimbra.ks.com.ua | grep zimbraFileUploadMaxSize
zimbraFileUploadMaxSize: 10485760
[zimbra@zimbra ~]$ zmprov gs zimbra.ks.com.ua | grep zimbraMailContentMaxSize
zimbraMailContentMaxSize: 10240000

[zimbra@zimbra ~]$ zmprov mcf zimbraMtaMaxMessageSize 38912000
[zimbra@zimbra ~]$ zmprov mcf zimbraFileUploadMaxSize 15360000
[zimbra@zimbra ~]$ zmprov mcf zimbraMailContentMaxSize 38912000
[zimbra@zimbra ~]$ zmprov ms zimbra.xoe.com.ua zimbraFileUploadMaxSize 15360000
[zimbra@zimbra ~]$ zmprov ms zimbra.xoe.com.ua zimbraMailContentMaxSize 38912000
[zimbra@zimbra ~]$ zmcontrol restart


################################################
АВТОМАТИЧЕСКАЯ ПОДПИСЬ С РЕКВИЗИТАМИ
ПОЛЬЗОВАТЕЛЯ, ПРЕДПРИЯТИЯ, ЛОГОТИПОМ,
ФОРМИРУЕМАЯ НА ОСНОВЕ АДРЕСНОЙ КНИГИ
################################################

Есть статейка (http://wiki.zimbra.com/index.php?title=Setting_automatic_Default_Signature, https://wiki.zimbra.com/wiki/Mail_signatures_with_images), в которой дается bash скрипт, который, как я понял, для всех учеток выставляет сигнатуры разово. То есть при добавлении, изменении и т.д. скрипт нужно прогонять по новой. Манипулирует он параметрами zimbraPrefMailSignatureEnabled, zimbraPrefMailSignatureStyle, zimbraPrefMailSignature.
Запоминаем это как вариант, хоть и весьма похожий на костыль. И ищем дальше.

В официальной доке есть раздел "Enabling Support for Domain Disclaimers".

Нужно нам будет настроить автоматическую подпись для писем. Для начала включаем эту фичу:

zmprov mcf zimbraDomainMandatoryMailSignatureEnabled TRUE

Потом при помощи команд

zmprov mcf zimbraDomainMandatoryMailSignatureText
zmprov mcf zimbraDomainMandatoryMailSignatureHTML

можно будет ее поднастроить.

Попробуем для домена co.ks.com.ua.... Описывать не буду - попробовал... Не пойдет - подпись статичная, со сложным html не получилось.

Ищем дальше.

А давай ка я напишу в community.zimbra.com...
Сказано - сделано:

http://community.zimbra.com/collaboration/f/1886/t/1138680

Время прошло, а никто так и не помог. Так что нашел статейку (https://wiki.zimbra.com/wiki/Setting_automatic_Default_Signature), на базе которой придется делать свой скрипт, который по счедулеру будет устанавливать подпись учетным записям.

################################################
ПЛАН ПЕРЕЕЗДА
################################################

050. Создаем все домены и псевдонимы доменов (п.1).Из-за кривизны GUI, COS назначаем через CLI (п.7) каждому домену.

070. Настраиваем маршрутизацию почты (п.14).
100. Переносим адресную книгу (п. 4).

200. Переносим списки рассылки (п. 11).


300. Переносим обработку заголовков header_checks и bcc_maps (п. 12).

400. Переносим поочередно учетные записи (п.17).



Читать далее

2015-06-08

Zimbra. Война с ошибками спамфильтра.

Сложилась такая ситуация, что zimbra частенько ошибается и как спам определяет нормальную почту локальных пользователей. Решается простым способом - добавить подсети в доверенные в амавис. Для этого в конфигурационный файл /opt/zimbra/data/spamassassin/localrules/salocal.cf

ВНИМАНИЕ!!!! Данный замечательный файл при обновлении zimbra будет перетерт!!!! Посему, запомните, что то, что вы в нем поменяете придется повторить после обновления версии!!!!

...
...
...

Тут вот подумав хорошенько решил вообще antispam на системе отключить и посмотреть, что будет.

[zimbra@zimbra ~]$ zmcontrol status
Host zimbra.xoe.com.ua
        amavis                  Running
        antispam                Running
        antivirus               Running
        dnscache                Running
        ldap                    Running
        logger                  Running
        mailbox                 Running
        memcached               Running
        mta                     Running
        opendkim                Running
        proxy                   Running
        service webapp          Running
        snmp                    Running
        spell                   Running
        stats                   Running
        zimbra webapp           Running
        zimbraAdmin webapp      Running
        zimlet webapp           Running
        zmconfigd               Running
[zimbra@zimbra ~]$ zmprov getServer zimbra.xoe.com.ua zimbraServiceEnabled
# name zimbra.xoe.com.ua
zimbraServiceEnabled: antivirus
zimbraServiceEnabled: antispam
zimbraServiceEnabled: opendkim
zimbraServiceEnabled: logger
zimbraServiceEnabled: service
zimbraServiceEnabled: zimbra
zimbraServiceEnabled: zimbraAdmin
zimbraServiceEnabled: zimlet
zimbraServiceEnabled: mailbox
zimbraServiceEnabled: memcached
zimbraServiceEnabled: mta
zimbraServiceEnabled: dnscache
zimbraServiceEnabled: stats
zimbraServiceEnabled: proxy
zimbraServiceEnabled: snmp
zimbraServiceEnabled: spell
zimbraServiceEnabled: ldap
zimbraServiceEnabled: amavis
[zimbra@zimbra ~]$ zmprov ms zimbra.xoe.com.ua -zimbraServiceEnabled antispam
[zimbra@zimbra ~]$ zmcontrol restart
Host zimbra.xoe.com.ua
        Stopping vmware-ha...skipped.
                /opt/zimbra/bin/zmhactl missing or not executable.
        Stopping zmconfigd...Done.
        Stopping zimlet webapp...Done.
        Stopping zimbraAdmin webapp...Done.
        Stopping zimbra webapp...Done.
        Stopping service webapp...Done.
        Stopping stats...Done.
        Stopping mta...Done.
        Stopping spell...Done.
        Stopping snmp...Done.
        Stopping cbpolicyd...Done.
        Stopping archiving...Done.
        Stopping opendkim...Done.
        Stopping amavis...Done.
        Stopping antivirus...Done.
        Stopping antispam...Done.
        Stopping proxy...Done.
        Stopping memcached...Done.
        Stopping mailbox...Done.
        Stopping logger...Done.
        Stopping dnscache...Done.
        Stopping ldap...Done.
Host zimbra.xoe.com.ua
        Starting ldap...Done.
        Starting zmconfigd...Done.
        Starting dnscache...Done.
        Starting logger...Done.
        Starting mailbox...Done.
        Starting memcached...Done.
        Starting proxy...Done.
        Starting amavis...Done.
        Starting antivirus...Done.
        Starting opendkim...Done.
        Starting snmp...Done.
        Starting spell...Done.
        Starting mta...Done.
        Starting stats...Done.
        Starting service webapp...Done.
        Starting zimbra webapp...Done.
        Starting zimbraAdmin webapp...Done.
        Starting zimlet webapp...Done.
[zimbra@zimbra ~]$ zmcontrol status
Host zimbra.xoe.com.ua
        amavis                  Running
        antivirus               Running
        dnscache                Running
        ldap                    Running
        logger                  Running
        mailbox                 Running
        memcached               Running
        mta                     Running
        opendkim                Running
        proxy                   Running
        service webapp          Running
        snmp                    Running
        spell                   Running
        stats                   Running
        zimbra webapp           Running
        zimbraAdmin webapp      Running
        zimlet webapp           Running
        zmconfigd               Running
[zimbra@zimbra ~]$ zmprov getServer zimbra.xoe.com.ua zimbraServiceEnabled
# name zimbra.xoe.com.ua
zimbraServiceEnabled: antivirus
zimbraServiceEnabled: opendkim
zimbraServiceEnabled: logger
zimbraServiceEnabled: service
zimbraServiceEnabled: zimbra
zimbraServiceEnabled: zimbraAdmin
zimbraServiceEnabled: zimlet
zimbraServiceEnabled: mailbox
zimbraServiceEnabled: memcached
zimbraServiceEnabled: mta
zimbraServiceEnabled: dnscache
zimbraServiceEnabled: stats
zimbraServiceEnabled: proxy
zimbraServiceEnabled: snmp
zimbraServiceEnabled: spell
zimbraServiceEnabled: ldap
zimbraServiceEnabled: amavis

Типа отключил. Поживем, посмотрим...

Читать далее

2015-03-25

Установка CentOS на XenServer через VNC

При установке CentOS на Citrix XenServer постоянно не хватает графики при установке через консоль. Объехать этот момент можно с использованием опции vnc при создании виртуальной машины. В таком случае после ввода сетевых настроек будет запущен vnc сервер на порту 5901, подключившись к которому можно произвести установку в графике. Через зад, но удобно :)

Читать далее

2015-03-24

ThunerBird для корпоратива

В ПРОЦЕССЕ НАПИСАНИЯ!!!! НЕ ЗАКОНЧЕНО!!!

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

А пока задача вот такая. Вся контора сидит на thunderbird версии от 2 до 31. Есть адресная книга на ldap, и ко всем клиентам она привязана. Нужно чтобы ко всем письмам прикреплялась подпись, в содержании которой будет ФИО, контакты, должность, компания, адрес и логотип. На данный момент есть 4 почтовых сервера, из которых 3 для пользователей. Везде postfix, на 2-х dovecot, на одном cyrus-imapd. В будущем эти три объединим в один cyrus-imapd. Общее количество ящиков - порядка 500. Те что на dovecot сидят на POP, cyrus-imapd - на IMAP.

Карочи, заапарк йурскага периада.

Конечно, будет все приводится в порядок, а пока цель - подпись, благо есть адресная книга и при должном напильнике thunderbird можно превратить в классный корпоративный клиент. По крайней мере так в инете пишуть :) А чо, а мы попробуем...

Во первых, пока говорить будем о версии 31.5. За старичков возможно отдельно что-то скажем, а может и нет.

Файл который нас интересует - omni.ja. Файл являетс jar архивом. В нем есть файлы greprefs.js и default/prefs/all-thunderbird.js. Сие есть файл с глобальными настройками, которые, насколько я понял, менее приоритетные, чем настройки из файла prefs.js, который лежит в профиле.
Есть у меня такое впечатление, что default/prefs/all-thunderbird.js это тот же greprefs/all.js из знаменитой статьи на хабре(http://habrahabr.ru/post/101905/). Кстати, спасибо автору, статья была одним из источников для сего творения.

Редактируем default/prefs/all-thunderbird.js, добавляем туда строку

pref("general.config.filename", "thunderbird.cfg");

После чего создаем файл thunderbird.cfg, и располагаем его возле файла omni.ja

Настроим в нем, например, нашу адресную книгу:



Читать далее

2015-03-18

Корпоративная подпись в почте. Add A Disclaimer To Outgoing Emails With alterMIME

Выполнено на базе статьи http://habrahabr.ru/post/242185/

Предполагается, что необходимые пакеты находятся в /u02/install/ (addAttachFilter.pl, altermime-0.3.10.tar.gz)

antares:~ # cd /u02/install/
antares:/u02/install # tar -xvzf altermime-0.3.10.tar.gz
antares:/u02/install # cd altermime-0.3.10/

Дальше моя инициатива. При компиляции получаем ошибку:

cc1: warnings being treated as errors
qpe.c: In function ‘qp_encode’:
qpe.c:94: error: format ‘%d’ expects type ‘int’, but argument 5 has type ‘size_t’
make: *** [qpe.o] Error 1

Основываясь на подсказке компилятора, в файлах qpe.c и qpe.h меняем size_t на int.

ВНИМАНИЕ!!! Если у вас ошибки нет(версия компилятора старенькая), то менять исходники не надо!!!

Компилим и ставим:

antares:/u02/install/altermime-0.3.10 # make
cc -Wall -Werror -g -I. -O2  -c qpe.c
cc -Wall -Werror -g -I. -O2  altermime.c strstack.o mime_alter.o ffget.o pldstr.o filename-filters.o logger.o MIME_headers.o libmime-decoders.o boundary-stack.o qpe.o -o altermime
antares:/u02/install/altermime-0.3.10 # make install
strip altermime
cp altermime /usr/local/bin
chmod a+rx /usr/local/bin/altermime

Вроде без ошибок.
Дальше в соответствии с документацией (брал из deb пакетов, ибо с сайта ее не дернешь - ссылки не работают:

antares:/u02/install/altermime-0.3.10 # useradd -r -c "Postfix Filters" -d /var/spool/filter filter
antares:/u02/install/altermime-0.3.10 # mkdir /var/spool/filter
antares:/u02/install/altermime-0.3.10 # chown filter /var/spool/filter
antares:/u02/install/altermime-0.3.10 # chmod 750 /var/spool/filter


postfix_filter.sh берем также из deb пакета и копируем в

antares:/u02/install/altermime-0.3.10 # cp /u02/install/postfix_filter.sh /etc/postfix/disclaimer
antares:/u02/install/altermime-0.3.10 # chown filter /etc/postfix/disclaimer
antares:/u02/install/altermime-0.3.10 # chmod 750 /etc/postfix/disclaimer

antares:/u02/install/altermime-0.3.10 # touch /etc/postfix/disclaimer_addresses
 

Вносим в disclaimer_addresses какие-нибудь адреса из тех, к которым нужно цеплять подпись, так что файл будет иметь вид:


mail1@domain.com
khsdkfh@domain.com
jdjdj@domain.com

Файле /etc/postfix/disclaimer приводим к виду:

#!/bin/sh
# Localize these.
INSPECT_DIR=/var/spool/filter
SENDMAIL=/usr/sbin/sendmail
DISCLAIMER_ADDRESSES=/etc/postfix/disclaimer_addresses

# Exit codes from
EX_TEMPFAIL=75
EX_UNAVAILABLE=69

# Clean up when done or when aborting.
trap "rm -f in.$$" 0 1 2 3 15

# Start processing.
cd $INSPECT_DIR || { echo $INSPECT_DIR does not exist; exit
$EX_TEMPFAIL; }

cat >in.$$ || { echo Cannot save mail to file; exit $EX_TEMPFAIL; }

####### Changed From Original Script #######
# obtain From address
from_address=`grep -m 1 "From:" in.$$ | cut -d "<" -f 2 | cut -d ">" -f 1`

if [ `grep -wi ^${from_address}$ ${DISCLAIMER_ADDRESSES}` ]; then
    /usr/local/bin/altermime --input=in.$$ \
        --disclaimer=/etc/postfix/disclaimer.txt \
        --disclaimer-html=/etc/postfix/disclaimer.txt \
        --xheader="X-Copyrighted-Material: Please visit http://www.company.com/privacy.htm" || \
            { echo Message content rejected; exit $EX_UNAVAILABLE; }
fi
####### Changed From Original Script END #######

$SENDMAIL -oi "$@"
exit $?


Создаем файл с подписью:

antares:/u02/install/altermime-0.3.10 # touch /etc/postfix/disclaimer.txt

Собственно в нем будет текст подписи. Например такой:

Пусть всегда будет солнце!
Пусть всегда будет небо!!
Пусть всегда будем мама!!!
Пусть всегда буду я!!!!

В файле /etc/postfix/master.cf меняем

smtp      inet  n       -       n       -       -       smtpd

на

smtp      inet  n       -       n       -       -       smtpd
        -o content_filter=dfilt:


и в конце добавляем:

dfilt     unix    -       n       n       -       -       pipe
    flags=Rq user=filter argv=/etc/postfix/disclaimer -f ${sender} -- ${recipient} 


Ну и рестартуем постфикс после этого.

Ну и что не маловажно - после этого имеем маленькую радость - письма адресатов из файла disclaimer.txt автоматически дописываются веселым жизнейтверждающим лозунгом ;)

То есть прилепить принудительно текстуху при прохождении письма через MTA - это мы сделали.

Но нам этого мало.

Обновление от 23.03.2015 - нам этого оказалось вообще не так надо. Руководство промеж собой перетерло и решилось на кровавый вариант. Он будет описан отдельно. Так что данную тему пока закрываем.


Читать далее

2015-02-11

Автологин windows server

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

control userpasswords2

замечательная мегаутилита запускается из командной строки и позволяет решить проблему :)

Читать далее

2015-01-26

VMWare vSphere ESXi 5.5 update process

===========================================
Current Version:
===========================================
VMWare vSphere ESXi 5.5.0 1623387 (5.5 Update 1, Release date: 2014-03-11, KB 2065832)
Image Profile: ESXi-5.5.0-20140302001-standard
===========================================
Updates Available (ESXi 5.5 all):
===========================================
ESXi550-201312001 Build Number: 1474528 KB 2063795 Release Date: 2013-12-22
update-from-esxi5.5-5.5_update01 Build Number: 1623387 KB 2065832 Release Date: 2014-03-11
ESXi550-201404001 Build Number: 1746018 KB 2076120 Release Date: 2014-04-19
ESXi550-201404020 Build Number: 1746974 KB 2076586 Release Date: 2014-04-19
ESXi550-201406001 Build Number: 1881737 KB 2077359 Release Date: 2014-06-10
ESXi550-201407001 Build Number: 1892794 KB 2077405 Release Date: 2014-07-01
update-from-esxi5.5-5.5_update02 Build Number: 2068190 KB 2079725 Release Date: 2014-09-09
ESXi550-201410001 Build Number: 2143827 KB 2087358 Release Date: 2014-10-15
ESXi550-201412001 Build Number: 2302651 KB 2096281 Release Date: 2014-12-02
===========================================
Install process:
===========================================
#mkdir patches on local storage root
#download patches in same directory
#poweroff all vm on esxi host
#connect to ssh esxi
vim-cmd hostsvc/maintenance_mode_enter
cd /vmfs/volumes/datastore1/patches/
esxcli software vib update -d "/vmfs/volumes/datastore1/patches/ESXi550-201404001.zip"
esxcli software vib list
reboot
vim-cmd hostsvc/maintenance_mode_exit
#poweron all vm on esxi host
#upgrade vmware-tools if needed

Читать далее

2015-01-23

Oracle 8.1.7.4 битые блоки продолжение

Имеем следующее:

. . exporting table                   TGROUPSCHEMA          8 rows exported
. . exporting table                          THEAD
EXP-00056: ORACLE error 1578 encountered
ORA-01578: ORACLE data block corrupted (file # 66, block # 107197)
ORA-01110: data file 66: '/u02/oradata/main/umc_data01.ora'
. . exporting table                     TMATHERIAL     156757 rows exported

Действия:

adonis:~ # su - oracle
oracle@adonis:~> dbv file=/u02/oradata/main/umc_data01.ora blocksize=8192

DBVERIFY: Release 8.1.7.4.0 - Production on Fri Jan 23 10:38:07 2015

(c) Copyright 2000 Oracle Corporation.  All rights reserved.

DBVERIFY - Verification starting : FILE = /u02/oradata/main/umc_data01.ora
Block Checking: DBA = 276931261, Block Type = KTB-managed data block
Found block already marked corrupted


DBVERIFY - Verification complete

Total Pages Examined         : 128000
Total Pages Processed (Data) : 45601
Total Pages Failing   (Data) : 0
Total Pages Processed (Index): 70514
Total Pages Failing   (Index): 0
Total Pages Processed (Other): 460
Total Pages Empty            : 11425
Total Pages Marked Corrupt   : 0
Total Pages Influx           : 0

oracle@adonis:~> export ORACLE_SID=main                                                     
oracle@adonis:~> sqlplus /nolog                                                                                               
                                                                                                                              
SQL*Plus: Release 8.1.7.0.0 - Production on Fri Jan 23 10:45:14 2015                                                          
                                                                                                                              
(c) Copyright 2000 Oracle Corporation.  All rights reserved.                                                                  

SQL> connect sys as sysdba
Enter password:
Connected.
SQL> select owner, segment_name, segment_type from dba_extents
where file_id=dbms_utility.data_block_address_file(276931261)
and dbms_utility.data_block_address_block(276931261) between block_id and block_id+blocks-1  2    3 
  4  ;

OWNER
------------------------------
SEGMENT_NAME
--------------------------------------------------------------------------------
SEGMENT_TYPE
------------------
UMC_DBA
THEAD
TABLE

Ну это и так было понятно.

SQL> SET serveroutput on
DECLARE num_corrupt INT;
BEGIN
num_corrupt := 0;
DBMS_REPAIR.CHECK_OBJECT (
     SCHEMA_NAME => 'UMC_DBA',
     OBJECT_NAME => 'THEAD',
     REPAIR_TABLE_NAME => 'REPAIR_TABLE',
     corrupt_count =>  num_corrupt);
DBMS_OUTPUT.PUT_LINE('number corrupt: ' || TO_CHAR (num_corrupt));
END;
SQL>   2    3    4    5    6    7    8    9   10   11 
 12  /
number corrupt: 2

PL/SQL procedure successfully completed.

SQL> SELECT object_name, block_id, corrupt_type, marked_corrupt,
corrupt_description, repair_description
FROM repair_table;  2    3 

OBJECT_NAME                      BLOCK_ID CORRUPT_TYPE MARKED_COR
------------------------------ ---------- ------------ ----------
CORRUPT_DESCRIPTION
--------------------------------------------------------------------------------
REPAIR_DESCRIPTION
--------------------------------------------------------------------------------
FOR_AUDIT                           98250         6148 TRUE

mark block software corrupt

THEAD                               19130         6148 TRUE

mark block software corrupt

OBJECT_NAME                      BLOCK_ID CORRUPT_TYPE MARKED_COR
------------------------------ ---------- ------------ ----------
CORRUPT_DESCRIPTION
--------------------------------------------------------------------------------
REPAIR_DESCRIPTION
--------------------------------------------------------------------------------

THEAD                              107197         6148 TRUE

mark block software corrupt

SQL> SET serveroutput on
DECLARE num_fix INT;
BEGIN
num_fix := 0;
DBMS_REPAIR.FIX_CORRUPT_BLOCKS (
     SCHEMA_NAME => 'UMC_DBA',
     OBJECT_NAME=> 'THEAD',
     OBJECT_TYPE => dbms_repair.table_object,
     REPAIR_TABLE_NAME => 'REPAIR_TABLE',
     FIX_COUNT=> num_fix);
DBMS_OUTPUT.PUT_LINE('num fix: ' || to_char(num_fix));
END;
/SQL>   2    3    4    5    6    7    8    9   10   11   12 
num fix: 0

PL/SQL procedure successfully completed.

SQL> SELECT object_name, block_id, marked_corrupt
     FROM repair_table;  2 

OBJECT_NAME                      BLOCK_ID MARKED_COR
------------------------------ ---------- ----------
FOR_AUDIT                           98250 TRUE
THEAD                               19130 TRUE
THEAD                              107197 TRUE

SQL> select index_name from dba_indexes
where table_name = 'THEAD'
  and owner = 'UMC_DBA';
/  2    3 
INDEX_NAME
------------------------------
I_HD_ACCEPTOR
I_HD_AGREE_PARTNER_LINK
I_HD_CORRECTION
I_HD_CORRECTOR
I_HD_CREATION
I_HD_CREATOR
I_HD_DIVCODE
I_HD_DOC_DATE
I_HD_DOC_NUM
I_HD_DRAFT_HEAD_ID
I_HD_OP_DT_SENDER

INDEX_NAME
------------------------------
I_HD_OP_KIND_ID
I_HD_OWNERID
I_HD_PARENT_ID
I_HD_PARTNER_ID
I_HD_PARTNER_TYPE
I_HD_SENDER
PK_HEAD

18 rows selected.

Теперь проверяем все индексы.

SQL> SET serveroutput on
DECLARE num_orphans INT;
BEGIN
num_orphans := 0;
DBMS_REPAIR.DUMP_ORPHAN_KEYS (
     SCHEMA_NAME => 'UMC_DBA',
     OBJECT_NAME => 'PK_HEAD',
     OBJECT_TYPE => dbms_repair.index_object,
     REPAIR_TABLE_NAME => 'REPAIR_TABLE',
     ORPHAN_TABLE_NAME=> 'ORPHAN_KEY_TABLE',
     KEY_COUNT => num_orphans);
DBMS_OUTPUT.PUT_LINE('orphan key count: ' || to_char(num_orphans));
END;
/SQL>   2    3    4    5    6    7    8    9   10   11   12   13 
orphan key count: 46

PL/SQL procedure successfully completed.

orphan key count д.б. = 0. Как видим, тут 46. Это жопа.
По остальным:
I_HD_SENDER 46
I_HD_PARTNER_TYPE 46
I_HD_PARTNER_ID 1
I_HD_PARENT_ID 15
I_HD_OWNERID 46
I_HD_OP_KIND_ID 46
I_HD_OP_DT_SENDER 46
I_HD_DRAFT_HEAD_ID 0
I_HD_DOC_NUM 46
I_HD_DOC_DATE 46
I_HD_DIVCODE 46
I_HD_CREATOR 46
I_HD_CREATION 46
I_HD_CORRECTOR 46
I_HD_CORRECTION 46
I_HD_AGREE_PARTNER_LINK 1
I_HD_ACCEPTOR 46

Теперь у нас  в ORPHAN_KEY_TABLE куча данных :)

SQL> BEGIN
DBMS_REPAIR.REBUILD_FREELISTS (
     SCHEMA_NAME => 'UMC_DBA',
     OBJECT_NAME => 'THEAD',
     OBJECT_TYPE => dbms_repair.table_object);
END;  2    3    4    5    6 
  7  /

PL/SQL procedure successfully completed.


SQL> BEGIN
DBMS_REPAIR.SKIP_CORRUPT_BLOCKS (
     SCHEMA_NAME => 'UMC_DBA',
     OBJECT_NAME => 'THEAD',
     OBJECT_TYPE => dbms_repair.table_object,
     FLAGS => dbms_repair.skip_flag);
END;
/
  2    3    4    5    6    7    8 
PL/SQL procedure successfully completed.

SQL> SELECT owner, table_name, skip_corrupt
FROM dba_tables
WHERE owner = 'UMC_DBA'
AND skip_corrupt = 'ENABLED';  2    3    4 

OWNER                          TABLE_NAME                     SKIP_COR
------------------------------ ------------------------------ --------
UMC_DBA                        THEAD                          ENABLED

alter index I_HD_ACCEPTOR rebuild;
alter index I_HD_AGREE_PARTNER_LINK rebuild;
alter index I_HD_CORRECTION rebuild;
alter index I_HD_CORRECTOR rebuild;
alter index I_HD_CREATION rebuild;
alter index I_HD_CREATOR rebuild;
alter index I_HD_DIVCODE rebuild;
alter index I_HD_DOC_DATE rebuild;
alter index I_HD_DOC_NUM rebuild;
alter index I_HD_DRAFT_HEAD_ID rebuild;
alter index I_HD_OP_DT_SENDER rebuild;
alter index I_HD_OP_KIND_ID rebuild;
alter index I_HD_OWNERID rebuild;
alter index I_HD_PARENT_ID rebuild;
alter index I_HD_PARTNER_ID rebuild;
alter index I_HD_PARTNER_TYPE rebuild;
alter index I_HD_SENDER rebuild;
alter index PK_HEAD rebuild;



Читать далее

2015-01-21

Склерозник. MySQL, PHPMyAdmin, MediaWiki

Ставим SLES11 SP3, в нем ставим все компоненты из названия темы, нехитрым путем добавления репозиториев.

MySQL

f01:~ # chkconfig mysql on
f01:~ # /etc/init/d/mysql start
f01:~ # mysqladmin -u root password 'root'

Apache2

f01:~ # chkconfig apache2 on
f01:~ # /etc/init.d/apache2 start

После этого можемзайти на http://url/phpmyadmin под root с паролем root.



Читать далее

2015-01-17

Риторически - замена Jira + Confluence от Atlassian

В свое время заворотили мы в конторе офигительную связку - Atlassian Jira + Atlassian Confluence + Subversion. Подсадили на нее всех и вся, настроили мегакучу плагинов. Юзеры теперь знают, что для того, чтоб к ним прибежал ситовец можно просто отправить письмо на ящик сит, получить уведомление о создании задания, увидеть, кому оно назначено и т.д. Программеры кучу доки в конфу зарядили, хрен разгребешь. Начальник наглядно видит загрузку персонала и все существующие работы... В общем все неплохо, кроме одного  - цен на продукцию Atlassian.

Соответственно есть такой вопрос. Ни к кому - к себе, ибо надо разбираться. А вопрос в следующем - можно ли Jira + Confluence заменить на Redmine + MediaWiki (или что-то другое) с сохранением связки с остальными продуктами и сохранением функционала по получению информации и работе с пользователями через email

А????



Читать далее

2015-01-13

PostgreSQL Streaming replication config files example

Server 1 - master (111.111.111.22)

postgresql.conf

#------------------------------------------------------------------------------
# CONNECTIONS AND AUTHENTICATION
#------------------------------------------------------------------------------

listen_addresses = '*'
max_connections = 3000

#------------------------------------------------------------------------------
# RESOURCE USAGE (except WAL)
#------------------------------------------------------------------------------

shared_buffers = 40000MB
max_prepared_transactions = 2000
work_mem = 360MB
maintenance_work_mem = 1024MB

#------------------------------------------------------------------------------
# WRITE AHEAD LOG
#------------------------------------------------------------------------------

synchronous_commit = off
checkpoint_segments = 20

#------------------------------------------------------------------------------
# REPLICATION
#------------------------------------------------------------------------------                                               

max_wal_senders = 5                                                                                                           
wal_level = hot_standby                                                                                                       
wal_keep_segments = 100                                                                                                       
archive_mode = on                                                                                                             
archive_command = 'test ! -f /u04/pgarch/%f && cp %p  /u04/pgarch/%f'

#------------------------------------------------------------------------------                                               
# QUERY TUNING                                                                                                                
#------------------------------------------------------------------------------                                               

join_collapse_limit = 100                                                                                                     
seq_page_cost = 0.0000001                                                                                                     
random_page_cost = 2.0
cpu_operator_cost = 0.0000001
constraint_exclusion = on

#------------------------------------------------------------------------------
# ERROR REPORTING AND LOGGING
#------------------------------------------------------------------------------

log_destination = 'stderr'
logging_collector = on
log_line_prefix = '%d %u %h %a %s %t %p '
log_min_duration_statement = 15000
log_statement = ddl
log_hostname = on
log_temp_files = 0
log_lock_waits = on

#------------------------------------------------------------------------------
# AUTOVACUUM PARAMETERS
#------------------------------------------------------------------------------

autovacuum = off

#------------------------------------------------------------------------------
# CLIENT CONNECTION DEFAULTS
#------------------------------------------------------------------------------

datestyle = 'iso, dmy'
lc_messages = 'ru_RU.UTF-8'
lc_monetary = 'ru_RU.UTF-8'
lc_numeric = 'ru_RU.UTF-8'
lc_time = 'ru_RU.UTF-8'
default_text_search_config = 'pg_catalog.russian'

#------------------------------------------------------------------------------
# LOCK MANAGEMENT
#------------------------------------------------------------------------------

max_locks_per_transaction = 250
max_pred_locks_per_transaction = 250

pg_hba.conf

local   all         all                               trust
host    all         all         127.0.0.1/32          trust
host    all         all         0.0.0.0/0             password
host    replication replicator  111.111.111.29/32        md5

Server 2 - slave (111.111.111.29)

postgresql.conf

#------------------------------------------------------------------------------
# CONNECTIONS AND AUTHENTICATION
#------------------------------------------------------------------------------

listen_addresses = '*'
max_connections = 3000

#------------------------------------------------------------------------------                                               
# RESOURCE USAGE (except WAL)                                                                                                 
#------------------------------------------------------------------------------                                               

shared_buffers = 10000MB                                                                                                      
max_prepared_transactions = 2000                                                                                              
work_mem = 100MB                                                                                                              
maintenance_work_mem = 1024MB                                                                                                 

#------------------------------------------------------------------------------                                               
# WRITE AHEAD LOG                                                                                                             
#------------------------------------------------------------------------------                                               

synchronous_commit = off                                                                                                      
checkpoint_segments = 20                                                                                                      

#------------------------------------------------------------------------------
# REPLICATION
#------------------------------------------------------------------------------

hot_standby = on
max_wal_senders = 5
wal_level = hot_standby
wal_keep_segments = 100
archive_mode = on
archive_command = 'test ! -f /u04/pgarch/%f && cp %p /u04/pgarch/%f'

#------------------------------------------------------------------------------
# QUERY TUNING
#------------------------------------------------------------------------------

join_collapse_limit = 100
seq_page_cost = 0.0000001
random_page_cost = 2.0
cpu_operator_cost = 0.0000001
constraint_exclusion = on

#------------------------------------------------------------------------------
# ERROR REPORTING AND LOGGING
#------------------------------------------------------------------------------

log_destination = 'stderr'
logging_collector = on
log_line_prefix = '%d %u %h %a %s %t %p '
log_min_duration_statement = 15000
log_statement = ddl
log_hostname = on
log_temp_files = 0
log_lock_waits = on
log_checkpoints = on

#------------------------------------------------------------------------------
# AUTOVACUUM PARAMETERS
#------------------------------------------------------------------------------

autovacuum = off

#------------------------------------------------------------------------------
# CLIENT CONNECTION DEFAULTS
#------------------------------------------------------------------------------

datestyle = 'iso, dmy'
lc_messages = 'ru_RU.UTF-8'
lc_monetary = 'ru_RU.UTF-8'
lc_numeric = 'ru_RU.UTF-8'
lc_time = 'ru_RU.UTF-8'
default_text_search_config = 'pg_catalog.russian'

#------------------------------------------------------------------------------
# LOCK MANAGEMENT
#------------------------------------------------------------------------------

max_locks_per_transaction = 250
max_pred_locks_per_transaction = 250



Читать далее