пятница, 8 августа 2014 г.

Postgresql 9.2.4 для 1С в контейнере Docker и решение с shmmax

Новые технологии, новые задачи.


Давно хотел погонять технологию docker в работе, но, случая не предоставлялось. А тут возникла необходимость переместить кучу файловых баз 1С от Зарплаты и Управление персоналом в базу данных.

Ну и соответственно, звезды сложились. Проблема в том, что ЗУП 3.0 работает с Postrgesql 9.2, а предыдущие не работают, точнее, им нужен postgress собранный с другой опцией, либо версией ниже. Плодить кучу серверов БД не хотелось, Хотелось красиво все завернуть в виртуалки с минимальных оверхедом. И тут я вспомнил про docker. Попробовал, получилось, были и проблемы, но они решены. Этими решениями и хотел поделиться.

Приступим и посмотрим, что получится:

1. Свежеустановленная Ubuntu 14.04.


Качаем, ставим, ничего сверхестественного.

2. Подготовка


docker можно взять из репо убунты, но я взял из репо самого проекта. Инструкция здесь:

Кратко:

Добавляем ключ:

sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 36A1D7869245C8950F966E92D8576A8BA88D21E9

Добавляем репозитарий
$ sudo sh -c "echo deb https://get.docker.io/ubuntu docker main\ > /etc/apt/sources.list.d/docker.list"

$ sudo apt-get update

$ sudo apt-get install lxc-docker

3. Установка


Чистый образ:

sudo docker run -i -t ubuntu:precise /bin/bash

В контейнере:

apt-get update apt-get install nano wget bzip2 exit

Зафиксируем образ:

sudo docker commit CONTAINER_ID stormbp/precise-clean

CONTAINER_ID легко брать из командной строки когда работаете внутри контейнера:

он выглядит так:

root@af40b772abbf:/data/main#

Хеш после root@ и есть ID контейнера.

Имя контейнера (stormbp/precise-clean) поставьте свое, главное обойтись без заглавных букв, будет ошибка.


Запустим новый экземпляр из шаблона:
sudo docker run -i -t stormbp/precise-clean /bin/bash
Внутри контейнера:
cd /root
Качаем дистрибутив postgres с сайта 1с.
wget http://downloads.v8.1c.ru/get/Info/AddCompPostgre/9_2_4_1_1S/postgresql_9_2_4_1_1C_amd64_deb_tar.bz2
Предварительно зайдите туда со своими учетными данными, чтоб авторизоваться. Это можно сделать с любого компьютера в локальной сети.
Распаковываем
tar jxf postgresql_9_2_4_1_1C_amd64_deb_tar.bz2
rm postgresql_9_2_4_1_1C_amd64_deb_tar.bz2
ставим:
dpkg -i *.deb
apt-get -f install
не обращайте внимание, что сервер не инициализировался, сейчас будет творить магию.
exit
Коммитим контейнер
sudo docker commit CONTAINER_ID stormbp/precise-postgress-9.2.4-1c
Создаем в домашней директории хранилище для самой базы:
mkdir -p $HOME/postgresdata
и запускаем экземпляр
sudo docker run -v="$HOME/postgresdata":"/data" -i -t -p 5432 stormbp/precise-postgress-9.2.4-1c /bin/bash

4. Магия, как она есть

А теперь еще немного магии:
Posgresql не запустится, так как по умолчанию, параметр ядра shmmax установлен меньше необходимого. А внутри контейнера поменять его просто так невозможно, /proc/sys смонтирована только на чтение и перемонтировать ее просто так нельзя.
Надо залезть из хостовой системы в контейнер и переписать значение переменной ядра. Для этого есть такой замечательный инструмент nsenter. Но вот разработчики ubuntu усложняют жизнь тем, что не включают его в поставку и в репах его нет.
Будем компилять? - спросите вы.
Зачем? - спрошу я. Ведь у нас есть докер, пусть сам себе накомпиляет в контейнере и удалится, оставив нам только бинарник nsenter на память.
Все просто, в соседнем терминале, на хост системе (не в контейнере с postgress) запускаем:
sudo docker run --rm -v /usr/local/bin:/target jpetazzo/nsenter
docker отработает минут за 5 и удалит все следы оставив нам бинарник nsenter в /usr/local/bin
Теперь снова черная магия:
На хосте отключаем apparmor (на всякий, у некоторых не получается с ним)
/etc/init.d/apparmor stop
узнаем pid запущенного контейнера с postgres
PID=$(docker inspect --format '{{ .State.Pid }}' ID)
ID - подставить из соседнего терминала.
Далее лезем в пространство имен контейнера:
nsenter --target $PID --mount --uts --ipc --net --pid bash
mount -o remount rw /proc/sys
echo 1073741824 > /proc/sys/kernel/shmmax
mount -o remount ro /proc/sys
все, можно инициализировать базу
mkdir -p /data/main chown postgres /data/* chgrp postgres /data/* chmod 700 /data/main
su postgres --command "/usr/lib/postgresql/9.2/bin/initdb -D /data/main --locale=ru_RU.UTF-8"

5. Результат

Получите и распишитесь: база лежит в /data контейнера, или в домашней папке $HOME/postgresdata, доступна локально по сети. Правьте hba как и раньше.
Выходим из контейнера и коммитим образ для множественного развертывания баз данных
sudo docker commit CONTAINER_ID stormbp/1с-9.2.4
Кто работал с постгрессом далее разберется, если не разберетесь, спрашивайте.
На очереди контейнерная виртуализация сервера предприятия для 1с, чтобы жить было совсем весело, а потом статья о том, как же всем этим управлять-то.

четверг, 15 августа 2013 г.

Elastix + Panasonic TDA100 + Zadarma

На текущий момент Panasonic, по сложившейся традиции, обслуживает внутренних абонентов в офисе (1XX) и подключен медью к СибирьТелекому. Asterisk установлен в лохматые 200Х и служит для связи с удаленными подразделениями (3XX). Между собой связаны FXO шлюзом.
Решили упростить схему (убрать шлюз, вносивший задержки в установлении вызова - обычно 2-3 гудка) и получить дополнительный функционал (на первом этапе - подключение sip провайдеров для дальних звонков)

Куплено 2 платы - 0290 в Panasonic и из закромов Родины достали по бросовой цене Digium Wildcard TE110P T1/E1.

С нуля ставим Elastix.
Скачиваем установочный образ
Ставим его на флешку с помощью iso2usb (самый простой путь, не требует шаманства описанного на форумах Elastix)
Устанавливаем систему с флешки, указывая пароли и явки в процессе
Получаем базовую установку.

Обновляем систему yum update -y
Приезжает новый астериск (11) вместо 1.8
Перезагружаемся в новое ядро (параллельно устанавливаем платы в panasonic и asterisk)
Соединяем платы сигнальным кабелем (1,2 контакты rj-45 в 5,4 контакты с другой стороны)
На стороне Panasonic нужно только в настройках порта указать qsig-master и запустить в обслуживание (in service)
На стороне Elastix:
1. nano /etc/dahdi/system.conf
и в конец файла добавляем

span=1,1,0,ccs,hdb3
bchan=1-15,17-31
dchan=16
echocanceller=oslec,1-15,17-31

# Global data
loadzone        = ru
defaultzone     = ru

2. cp chan_dahdi.conf  chan_dahdi.conf.bak
3. nano  chan_dahdi.conf 
Очищаем файл и вносим в него:
[trunkgroups]

[channels]
language=ru
usecallerid=yes
callwaiting=yes
usecallingpres=yes
callwaitingcallerid=yes
threewaycalling=yes
transfer=yes
canpark=yes
cancallforward=yes
callreturn=yes
echocancel=yes
echocancelwhenbridged=yes
echotraining=yes
callerid=asreceived
resetinterval=never

group=1
;[E1]
context=from-internal
switchtype=qsig
resetinterval=never
signalling=pri_cpe
channel =>1-15,17-31

4. /etc/init.d/dahdi restart
5. asterisk -rvvvvvv
6. core restart now

Плата должна завестись и отображаться  (dahdi show status)

На Elastix создаем три транка
1. На zadarma согласно их инструкции на сайте http://wiki.zadarma.com/index.php/Asterisk
2. На panasonic через плату:
DAHDI trunk
DAHDI identificator - g1
3. На удаленный asterisk по протоколу IAX2

Создаем Маршруты:
1XX - trunk panasonic
3XX - trunk asterisk
7+8|XXXXXXXXXX - trunk zadarma (вместо восьмерки подставляю 7 на всякий)

Теперь интереснее - надо заставить Panasonic звонить в elastix при наборе междугородних и международных номеров.
Читаем раздел Работаем с ARS и настраиваем как нам захочется.

Обязательно:
Идем сюда http://icluzo.livejournal.com/8971.html и делаем что написано, а именно отключаем анонимов, включаем файерволл и устанавливаем fail2ban.

пятница, 21 июня 2013 г.

Обновление Proxmox до 3 версии

Все делал согласно инструкции на wiki:
http://pve.proxmox.com/wiki/Upgrade_from_2.3_to_3.0

  1. Остановил машинки 
  2. Сделал backup 
  3. Установил все текущие обновления 
  4. Скачал скрипт wget http://download.proxmox.com/debian/dists/wheezy/pve-upgrade-2.3-to-3.0 
  5. Сделал исполняемым и запустил 
  6. Скачалось более 500 пакетов (приблизительно 300мб 
  7. Установилось 
  8. Перезагрузился 
  9. Я на новом Proxmox 

Для чего делал? Необходимо было проверить корректность обновления для одиночной машинки, чтобы потом обновить кластер.

Дополнительно проверял живучесть моего софтового raid, который не поддерживается Proxmox. А то мало-ли какие настройки потрет новая версия. 3 дня - полет нормальный. Местами даже пошустрее стало из-за нового qemu c новым kvm.

вторник, 19 февраля 2013 г.

Samsung 4833 на Ubuntu

1. для работы с принтером через сеть и юсб достаточно скормить ppd файл, примерно так:

sudo /usr/sbin/lpadmin -p ИмяПринтера -P scx483xps.ppd -v ipp://192.168.1.100 -E

2. а вот для запуска через сеть сканера нужно еще и другие дрова доставить:

wget -O - http://www.bchemnet.com/suldr/suldr.gpg | sudo apt-key add -

sudo sh -c 'echo "deb http://www.bchemnet.com/suldr/ debian extra" >> /etc/apt/sources.list.d/samsung.list'

sudo apt-get update

sudo apt-get -y --force-yes install samsungmfp-data samsungmfp-driver samsungmfp-scanner samsungmfp-network

в /etc/sane.d/net.conf ничего вписывать не надо

а вот /etc/sane.d/xerox_mfp.conf надо добавить свой адрес (в моем случае 192.168.1.100)

# Samsung SCX, network mode
# tcp HOST_ADDR PORT
# Uncomment and configure:
tcp 192.168.1.100 9400
#или, если работает на другом порту,
tcp 192.168.1.100 9403

например, командой -
sudo sh -c 'echo "# Samsung SCX, network mode" >>/etc/sane.d/xerox_mfp.conf'
sudo sh -c 'echo "192.168.1.100" >>/etc/sane.d/xerox_mfp.conf'

postgresql 9.2.1 для 1С на CentOS 6.3 x86_64 minimal

yum update -y
reboot

yum install crontabs tmpwatch sudo file nano wget rpm-build gcc make glibc-devel bison flex python-devel tcl-devel readline-devel zlib-devel openssl-devel krb5-devel e2fsprogs-devel gettext pam-devel openldap-devel libxml2-devel libxslt-devel perl-ExtUtils-MakeMaker perl-ExtUtils-Embed icu libicu libicu-devel -y

chkconfig iptables off
service iptables stop
chkconfig ip6tables off
service ip6tables stop
nano /etc/selinux/config SELINUX=disabled

cd ~ && mkdir psql && cd psql && wget http://v8.1c.ru/overview/postgresql_patches/9-2-1/postgresql92-9.2.1-1.1C.src.rpm


useradd user
rpm -ivh postgresql92-9.2.1-1.1C.src.rpm


ln -s /usr/lib64/libicuuc.so /usr/local/lib/libicuuc.so.46 && ln -s /usr/lib64/libicui18n.so /usr/local/lib/libicui18n.so.46 && ln -s /usr/lib64/libicudata.so /usr/local/lib/libicudata.so.46


nano /usr/lib/rpm/macros
Ctrl + w %_default_patch_fuzz
меняем с 0 на 2


cd ~ && time rpmbuild -ba --define 'runselftest 0' /root/rpmbuild/SPECS/postgresql-9.2.spec
rpm -ivh ~/rpmbuild/RPMS/x86_64/*.rpm


su postgres
/usr/pgsql-9.2/bin/initdb -D /var/lib/pgsql/9.2/data/ --locale=ru_RU.UTF-8
exit


service postgresql-9.2 restart && chkconfig postgresql-9.2 on


/usr/pgsql-9.2/bin/psql -U postgres
postgres=# alter user postgres with password '111111111';
ALTER ROLE
postgres=# \q

четверг, 20 декабря 2012 г.

Свежий HPLIP в Ubunt-ах



sudo apt-get purge hplip hplip-gui
sudo apt-get autoremove -f

sudo apt-get install gcc build-essential python-dev libcupsys2-dev libusb-dev libtool libcupsimage2-dev

cd ~
wget -O hplip-3.12.11.run http://prdownloads.sourceforge.net/hplip/hplip-3.12.11.run
chmod +x hplip-3.12.11.run
sh ./hplip-3.12.11.run

Соглашаемся со всеми пунктами по умолчанию (Enter)

sudo apt-get install libhpmud-dev

hp-setup

P.S. Для ускорения установки можно заранее поставить:
libcups2-dev
cups-bsd
cups-client
libusb-1.0.0-dev
libsnmp-dev
python-qt4-dbus
gtk2-engines-pixbuf
python-qt4
python-reportlab
libdbus-1-dev
libsane-dev
python-imaging
gtk2-engines-pixbuf
xsane
sudo apt-get install libcups2-dev cups-bsd cups-client libusb-1.0.0-dev libsnmp-dev python-qt4-dbus gtk2-engines-pixbuf python-qt4 python-reportlab libdbus-1-dev libsane-dev python-imaging gtk2-engines-pixbuf xsane

четверг, 15 ноября 2012 г.

Бюджетный Proxmox 2.2 (ProxmoxVE 2.2 SoftRaid)

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

Такая вот задачка. Долгие переговоры с заказчиком привели к тому, что была выбрана следующая конфигурация:
- сервер изначально двухголовый в начале с одним процом
- память с 8 гигами
- диски бьются на два стора - одно зеркало на sata винтах, одно на ssd
На ssd положим базу 1с для разгона

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

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