среда, 31 июля 2013 г.

Linux Journal и немного Python

Добрый день.

Не так давно я приобрел годовую подписку на журнал Linux Journal. Пишут очень интересно, советую всем. Вместе с подпиской мне стали доступны все электронные версии журнала начиная с апреля 2005-го года. И я хотел бы с вами поделиться. Но было пару проблем:

1. Когда я скачивал их, то сначала не подумал и задал имена файлов в формате: ljмесяцгод.pdf, примерно: lj042005.pdf - это оказалось не удобно, так как номера шли совсем не по порядку.

2. Не охота переписывать вручную название выпусков, тем и прочего (к сожалению LJ далеко не с самого начала стали подписывать PDF версии, видно в списке.

Решил исправить эти проблемы с помощью Python.

понедельник, 29 июля 2013 г.

Установка Proxmox 3 на Debian 7 Wheezy

Добрый день.

Сегодня мне понадобилось установить Proxmox 3 на Debian 7 Wheezy в принципе установка не сильно отличается, от установки Proxmox 2 на Debian Squeeze, но есть и небольшие отличия и подводные камни. В этой заметке я опишу, как я все же установил Proxmox 3.

Расписывать как установить Debian Wheezy я не буду, так как там все понятно и тривильно, в данной заметке мой сервер будет получать IP-адрес: 192.168.1.180, а имя хоста у меня будет: asidorov.ntbsoft.com. Я буду пользоваться командой sudo, так как работать из под root'a - плохой тон.

1. Настройка и установка

Для начала нам необходимо отредактировать файл /etc/hosts:
# sudo nano /etc/hosts

Добавляем:
192.168.1.180  asidorov.ntbsoft.com asidorov

Добавим PVE репозитории в /etc/apt/sources.list:
# sudo nano /etc/apt/sources.list

Допишем:
deb http://download.proxmox.com/debian wheezy pve

Теперь нужно получить ключ для репозитория:
# wget  http://download.proxmox.com/debian/key.asc
# sudo apt-key add key.asc

Обновим список доступных пакетов и обновим все ПО:
# sudo apt-get update && sudo apt-get upgrade

Установим ядро Proxmox VE:
# sudo apt-get install pve-firmware pve-kernel-2.6.32-22-pve

Так же доставим хедер для этого ядра:
# sudo apt-get install pve-headers-2.6.32-22-pve

Теперь перезагрузим систему и загрузимся с нашего нового ядра: 2.6.32-22-pve

После перезагрузки проверим правильное ли мы ядро выбрали:
# uname -a

вывод должен быть примерно таким:
Linux 2.6.32-22-pve ...

Удалим ядро 3.2.0, что бы не загрузиться случайно с него:
# sudo apt-get remove linux-image-amd64 linux-image-3.2.0-4-amd64

И обновим загрузчик:
# sudo update-grub

Установим пакеты, необходимые для корректной работы Proxmox'a:
# sudo aptitude install proxmox-ve-2.6.32 ntp ssh lvm2 postfix ksm-control-daemon vzprocps open-iscsi bootlogd

Здесь специально использовал aptitude, так как когда попытался установить с помощью apt-get появилась проблема, описанная в пункте 2.2. Так как в Debian, aptitude лучше обрабатывает зависимости, то проблем не возникло.

Нужно настроить сетевой интерфейс, для этого перейдем в панель управления (https://asidorov.ntbsoft.com:8006) и приведем настройки интерфейса vmbr0 к такому виду:

2. Возможные проблемы во время установки

2.1 Во время dist-upgrade мне выдало что нету некоторых firmware:
W: Possible missing firmware /lib/firmware/tigon/tg3_tso5.bin for module tg3
W: Possible missing firmware /lib/firmware/tigon/tg3_tso.bin for module tg3
W: Possible missing firmware /lib/firmware/tigon/tg3.bin for module tg3
ну что ж, решим эту проблему:
# sudo nano /etc/apt/sources.list

добавляем к списку возможных пакетов: non-free приведя к такому виду:
deb http://ftp.ua.debian.org/debian/ wheezy main contrib non-free
deb-src http://ftp.ua.debian.org/debian/wheezy main contrib non-free
Обновим список доступных пакетов и установим firmware:
# sudo apt-get update
# sudo apt-get install firmware-linux-nonfree

2.2 Во время установки необходимых для proxmox пакетов, я получил примерно такой вывод:
dpkg: error processing proxmox-ve-2.6.32 (--configure):
 dependency problems - leaving unconfigured
Errors were encountered while processing:
 pve-cluster
 redhat-cluster-pve
 fence-agents-pve
 libpve-access-control
 clvm
 libpve-storage-perl
 qemu-server
 resource-agents-pve
 pve-manager
 vzctl
 proxmox-ve-2.6.32
E: Sub-process /usr/bin/dpkg returned an error code (1)

Не ставятся пакеты ругаясь на зависимости.... ну что же мне помогло такое решение этой проблемы:
# cd /var/lib/dpkg/info
и выполнить:
sudo rm pve-cluster.*
sudo rm redhat-cluster-pve.*
sudo rm fence-agents-pve.*
sudo rm libpve-access-control.*
sudo rm clvm.*
sudo rm libpve-storage-perl.*
sudo rm qemu-server.*
sudo rm resource-agents-pve.*
sudo rm pve-manager.*
sudo rm vzctl.*
sudo rm proxmox-ve-2.6.32.*

Вообщем удалить все пре/пост-инсталяционные скрипты, MD5 суммы пакетов и файллисты для всех пакетов, которые не смогли установиться. Теперь можно их установить:
# sudo apt-get -f install

2.3 Так же почему то не была доступна Веб-панель управления, но после перезапуска pveproxy панель стала доступна:
# sudo service pveproxy restart

2.4 После того, как Веб-панель стала доступна, я не смог авторизироваться как root, получая сообщение о не успешной авторизации, исправил это перезапуском pvedaemon:
# sudo service pvedaemon restart

2.5 Во время создания виртуальной машины я получил ошибку:
Could not access KVM kernel module: No such file or directory
failed to initialize KVM: No such file or directory
TASK ERROR: start failed: command '/usr/bin/kvm -id 100 ...
Как я смог понять, проблема заключается в том, что не включена поддержка виртуализации VT-x/AMD-x, проверить, поддерживает ли вообще ваш процессор данные технологии можно с помощью команды:
# egrep '(vmx|kvm)' --color=always /proc/cpuinfo

Если ничего не будет выведено, то у меня плохие для вас новости, вы не сможете работать с Proxmox, если же вывод есть, а Proxmox возвращает нам такие ошибки, то нужно включить поддержку виртуализации в BIOS'e.

А так же нужно включить модуль ядра:
# sudo modprobe kvm-intel

3 Возможные проблемы:


1. [....] Starting pve cluster filesystem : pve-cluster[main] crit: Unable to get local IP address  (warning).
Тут просто надо закомментировать строку в файле /etc/hosts, где задан IPv6 адрес для сервера, так как это баг в Proxmox под Debian.

2. Если после установки ядра, у вас по умолчанию загружается старое ядро, а не pve.
# sudo update-grub
# sudo nano /etc/default/grub 
Ищем секцию с ядром от Proxmox (pve) и изменяем значение GRUB_DEFAUL=значение pve ядра.
# sudo update-grub
# sudo reboot


Полезные ссылки:

В принципе это копипаст официальной доки, с маленькими добавлениями: тыц

четверг, 18 июля 2013 г.

Донастройка системы Дебет Плюс V12 для корректной работы с справочниками

Добрый день.

В одной из заметок я описывал, как настроить удаленную базу данных для системы Дебет Плюс V12. Однако я не знал, что модуль "Справочники" так же нужно хранить на сервере. В этой заметке я исправил этот недочет, тут я опишу как подключить хранилище справочников с помощью Samba, так как клиенты используют Windows.

Установим samba:
# sudo apt-get install samba

Теперь отредактируем настройки, и расшарим папки JDebet и base, которые находятся там же в установочном архиве системы Дебет Плюс.
# sudo nano /etc/samba/smb.conf

И добавляем такие записи:
[JDebet]
path = /home/user/DebetPlusV12/JDebet
guest ok = yes
read only = no
case sensitive = no

[base]
path = /home/user/DebetPlusV12/base
guest ok = yes
read only = no
case sensitive = no

Теперь нужно подключить эти папки и изменить немного настройки:
Нажать правой кнопкой мыши на "База MySQL" и выбрать пункт "Настройка соединений" и привести к такому виду:
Где 10.8.0.6 - IP-адрес сервера.

Далее выбираем пункт "Администрирование" и перейдем на вкладку "Администрирование" находясь на этой вкладке нужно нажать на кнопку "Настройки" и выбрать пункт "Параметры запуска"

В поле "Пароль для изменения настроек" нужно ввести "150301" и нажать кнопку "Принять" после этого привести поле "Путь к JDebet" к такому виду и нажать кнопку "Сохранить".

Теперь справочники загружаются с удаленного сервера Samba. Радуемся дальнейшей работе.

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

Миграция Zimbra 7.2.0 (Ubuntu 10.04) на Zimbra 8.0.4 (Ubuntu 12.04)

Добрый день.

Данная заметка является продолжением предыдущей по установке Zimbra 8.0.4 на Ubuntu 12.04. В данной заметке я распишу как мигрировать почту (файлы, письма, подключенные ящики и прочее) с Zimbra 7.2.0 на Zimbra 8.0.4. Сразу оговорюсь, что я не буду использовать стандартные утилиты, так как это слишком долго и муторно. Я же буду использовать триальную версию замечательного плагина для Zimbra: ZeXtras SUITE.

1. Установка ZeXtras SUITE на оба сервера

Данную утилиту нужно установить как на сервер с Zimbra 7.2.0 так и на сервер с Zimbra 8.0.4. Установка аналогичная, поэтому я покажу установку только на Zimbra 8.0.4.

Скачаем саму программу:
# wget http://www.zextras.com/download/zextras_suite-latest.tgz

Разархивируем полученный архив:
# tar xvfz zextras_suite-latest.tgz

Перейдем в полученный каталог:
# cd zextras_suite-1.8.8/

Запустим установку ZeXtras:
# sudo ./install.sh all

Установщик обнаружит установленную версию Zimbra и запросит вас ввести подтверждение с лицензионным соглашением:
Do you agree with the terms of the software license agreement? [N] 
Введем Y и нажмем Enter.

На запрос Press any key to continue.... слушаемся и жмем любую клавишу.

На запрос ZeXtras Suite Core will now be installed. Proceed? [Y] жмем Enter.
Теперь нас спросят остановить ли почтовый демон? (Do you wish to stop the Zimbra Web Application (mailboxd)? [Y] ) почему бы и нет? жмем Y и Enter.
Далее последует запрос: The ZeXtras Suite Zimblet will now be installed. Proceed? [Y]  соглашаемся и жмем Enter. После чего начнется установка зимлета. И установка ZeXtras Suite закончилась!

2. Экспортируем данные из Zimbra 7.2.0

Теперь перейдем в панель управления Zimbra 7.2.0 так как мы будем экспортировать данные из нее. Перейдем на вкладку ZxBackup.
Найдем в правом нижнем углу кнопку Export Backup и нажмем ее. После чего появится окно Export Wizard, где на первой странице необходимо указать куда произвести бекап, я решил экспоритровать в каталог: /opt/zimbra/backup и нажмем кнопку Далее.
На второй вкладке необходимо выбрать каике домены нужно экспортировать (в моем тестовом примере это ntbsoft.com и zimbra5.ntbsoft.com), я выберу все нажав на кнопку "Select All > > "
На последней третьей вкладке будет подведен итог, что мы хотим экспортировать, а так же можно указать e-mail куда будет отправлено сообщение по началу и завершения экспорта.
Я же оставлю пустым, так как буду следить за этим через вкладку ZxNotifications.
Судя по уведомлению экспорт успешно завершился. Теперь нам надо перенести бекап на новый сервер.

3. Перенос бэкапа на новый сервер

Подключимся через консоль (сервер со старой зимброй) и перейдем в каталог /opt/zimbra/backup:
# cd /opt/zimbra/backup

Синхронизируем содержимое каталога /opt/zimbra/backup с заранее созданным каталогом /home/wimbo/backup на новом сервере:
# sudo rsync -avz * wimbo@zimbra7.ntbsoft.com:/home/wimbo/backup/

Когда все данные синхронизируются мы получим такое сообщение:

4. Импорт данных в Zimbra 8.0.4

Теперь зайдем через консоль на новый сервер (где установлена Zimbra 8.0.4):
Скопируем файлы в каталог /opt/zimbra/backup
# sudo cp -r /home/wimbo/backup/* /opt/zimbra/backup/

Создадим каталог zextras в каталоге /opt/zimbra/backup/:
# sudo mkdir /opt/zimbra/backup/zextras

Теперь поменяем владельца:
# sudo chown -R zimbra.zimbra /opt/zimbra/backup/*

Подготовительные работы закончились, теперь перейдем в панель управления Zimbra 8.0.4 на вкладку ZxBackup и нажмем кнопку Import Backup
На первой странице Import Wizard укажем директорию куда мы сохранили бэкап: /opt/zimbra/backup
И нажмем кнопку Далее. На второй страницы выберем все домены, которые хотим импортировать:
Жмем Далее. На четвертой страницы выберем все почтовые ящики которые хотим импортировать:
После нажатия кнопки Далее попадем на последнюю страницу Import Wizard'a, где можно увидеть итоговую информацию и указать e-mail для отправки отчета.

В принципе вот и все мигрирование, однако у меня была такая странная вещь, что я смог импортировать разве что раза с 10го. Хотя делал все каждый раз аналогично.

Так как программа сама по себе платная и дается всего 30 дней для триала, ее можно либо купить, довольно дешего, либо же удалить:
# cd ~/zextras_suite-1.8.8
# sudo ./install -u all

И радуемся почте на новом сервере.

Установка и настройка Zimbra 8.0.4 на Ubuntu 12.04

Добрый день.

Понадобилось установить почтовый сервер, для конторы в которой я работаю, так сложилось исторически, что в конторе используют Zimbra на Ubuntu 12.04 по этому и решил написать данную заметку об установке. Так же в конторе используется централизованная аутентификация пользователей через Active Directory на Windows Server 2003.

Теоретическая часть:
Zimbra Server - программный продукт для автоматизации совместной деятельности рабочих групп. Использует несколько СПО-проектов. Он раскрывает SOAP-интерфейс программирования приложений во всей его функциональности и также является IMAP- и POP3-сервером. Сервер доступен на платформах Linux (Red Hat Enterprise, Fedora, Ubuntu, Debian, Mandriva, SUSE Linux) и Mac OS X.

Некоторые возможности Zimbra:
Глобальная книга адресов - видны все сотрудники предприятия, у кого есть почтовый ящик в домене.
Календарь и Ежедневник - можно планировать задачи и делать напоминания о них.
Документы - можно хранить, просматривать и редактировать прямо в обозревателе (браузере).

В моем распоряжении находится домен: ntbsoft.com. Сервер Zimbra будет висеть на домене: zimbra4.ntbsoft.com.
Обязательное условие для корректной работы Zimbra Server является корректные А и MX записи на DNS сервере.

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

1.1 Настройка сети

Зададим статический IP, так как все получается по DHCP, что бы наш сервер случайно не поменял IP-адрес.
Проверим, адрес который получает сервер по DHCP:
# ifconfig
Сервер получил IP-адрес: 192.168.1.179

Отредактируем файл: /etc/network/interfaces
# sudo nano /etc/network/interfaces

Приведем его к такому виду:
где address - IP-адрес сервера;
netmask - маска подсети;
gateway - шлюз по умолчанию;
dns-nameserver - DNS-сервер.
Сохраним и закроем файл.

Перезапустим сеть:
# sudo /etc/init.d/networking restart
И проверим работоспособностью сети с помощью утилиты ping:
# ping ya.ru

1.2 Добавление нужных записей на DNS сервер (Windows Server 2003):

Я подключаюсь к серверу с помощью утилиты mstsc. Откроем панель управления DNS:
Start -> Administrative Tools -> DNS
Перейдем к управлению доменом ntbsoft.com. Нажмем правой кнопкой мыши на свободном пространстве и выберем New Host (A) ...:
После чего откроется окно New Host, заполним его и поставим галочку Create associated pointer (PTR) record, нажмем кнопку Add Host:
Появится сообщение об успешном добавлении записи:
Однако для того, что бы можно было пересылать почту необходимо добавить так же MX запись. Правой кнопкой на свободном пространстве и выберем New Mail Exchanger (MX) ...:
Заполним все поля в соответствующем окне New Resource Record и нажмем ОК:
DNS-записи успешно добавлены.

1.3 Установим зависимости

# sudo apt-get install libgmp3c2 - библиотека для выполнения арифметических операций любой точности;
# sudo apt-get install libperl5.14 - перл для корректного выполнения программ со встроенным Perl-интерпретатором;
# sudo apt-get install sysstat - набор утилит для измерения производительности системы;
# sudo apt-get install sqlite3 - база данных SQLite3;
# sudo apt-get install pax - для работы со страницами памяти.

1.4 Скачаем установщик Zimbra с официального сайта

# cd ~
# wget http://files2.zimbra.com/downloads/8.0.4_GA/zcs-8.0.4_GA_5737.UBUNTU12_64.20130524120036.tgz
Распакуем архив:
# tar xfvz zcs-8.0.4_GA_5737.UBUNTU12_64.20130524120036.tgz

И перейдем в разархивированный каталог:
# cd zcs-8.0.4_GA_5737.UBUNTU12_64.20130524120036

2. Установка

Запустим из под root скрипт установки:
# sudo ./install.sh

Нас дважды спросят согласны ли мы с лицензией:
Do you agree with the terms of the software license agreement? [N]
Тут надо написать: Y и нажать Enter.

Установщик проверит все ли зависимости удольвлетворены:
В секции Checking for installable packages будут отображены все пакеты, которые идут с Zimbra и которые можно установить, я решил установить все, кроме zimbra-proxy, вы же решайте сами:
Соглашаемся введя Y и нажав Enter на запрос The system will be modified. Continue? [N]
Начнется установка пакетов. После установки пакетов появится меню:
Здесь нам надо всего лишь установить пароль администратор, для этого на запрос  Address unconfigured (**) items (? - help) введем цифру "3" и нажмем Enter. Появится меню Store configuration  тут введем цифру "4" и нажмем Enter.

На запрос ввода пароля зададим нужный нам пароль, у меня: password
Теперь введем букву "r" и нажмем Enter. Появится главное меню с информационным сообщением: *** CONFIGURATION COMPLETE - press 'a' to apply
И на запрос Select from menu, or press 'a' to apply config (? -help) введем букву "a" и нажмем Enter.
На запрос Save configuration data to a file? [Yes] введем yes и нажмем Enter.
Будет выведена строка Save config in file: [/opt/zimbra/config.9020] тут можно ввести в какой файл сохранить конфигурацию или оставить файл по умолчанию и нажать просто Enter.
На запрос The system will be modified - continue? [No] введем yes и нажмем Enter.

Начнется установка Zimbra. Установщик спросит уведомлять ли вас о работе Zimbra сервера, ну что же, согласимся введя Yes и нажав Enter.
Zimbra установлена!

Теперь давайте проверим, все ли сервисы запущены. Для начала сменим текущего пользователя на zimbra:
# sudo su zimbra
И запустим саму проверку:
# zmcontrol status

Вывод должен быть таким:
Если же какой-то из сервисов не запущен, воспользуемся командой:
# zmcontrol start

3. Настройка Zimbra

Перейдем по адресу https://zimbra4.ntbsoft.com:7071/zimbraAdmin/
Попадем на окно авторизации:
Административная учетная запись по умолчанию: admin, а пароль тот, который был задан во время установки, у меня password.
После успешного логина попадем в саму Zimbra:
Тут можно произвести большую часть настроек, однако по умолчанию Zimbra не доступна по http только по https, давайте исправим это.

Сменим текущего пользователя на zimbra:
# sudo su zimbra

Доступность панели можно настроить с помощью утилиты zmtlsctl у нее есть несколько режимов. Нам же нужна доступность как по http так и по https, для этого используется параметр both:
# zmtlsctl both

Теперь надо перезапустить демон mailboxd:
# zmmailboxdctl stop
# zmmailboxdctl start

Теперь Zimbra доступна как по http так и по https.

среда, 3 июля 2013 г.

Рисуем простую графику с помощью Python 3(turtle)

Добрый день.

Начал изучать Python и увидел замечательную встроенную библиотеку turtle (черепашка), в которой можно рисовать простые рисунки, работа с ней очень похожа на то, как можно рисовать в Paint.

Хочу привести пару примеров, того что можно нарисовать, с небольшим пояснением.

Были использованы такие методы как:
turtle.color(color) - Задаем цвет курсора color ;
turtle.penup() - Поднимаем курсор, что бы при перемещении курсора не происходило рисование линий;
turtle.pendown() - Опускаем курсор, что бы при перемещении курсора происходило рисование линий;
turtle.goto(x, y) - Перейти в точку с координатами x и y;
turtle.circle(radius) - Нарисовать круг с радиусом = radius;
turtle.right(degrees) - Повернуть курсор на право на degrees градусов;
turtle.left(degrees) - Повернуть курсор на лево на degrees градусов;
turtle.forward(length) - Нарисовать линий длиной = length;
turtle.done() - Этим методом должны завершаться все программы использующие turtle.

Для начала нарисуем символ олимпиады, вот что мы получим в конце:
Алгоритм рисования довольно прост:

  1.  Задаем цвет, которым будем рисовать;
  2.  Поднимаем черепашку (курсор), что бы во время перехода не рисовались линии;
  3.  Переходим на интересующие нас координаты x и y;
  4.  Опускаем черепашку (курсор);
  5.  Рисуем круг с радиусом 45.


И так выполняем для каждого круга. Вот небольшой исходный код программы:
import turtle # Импортируем библиотеку turtle

turtle.color("blue") # Устанавливаем цвет черепашки
turtle.penup() # Поднимаем курсор
turtle.goto(-110, -25) # Переходим по нужным координатам
turtle.pendown() # Опускаем курсор
turtle.circle(45) # Рисуем круг с радиусом 45

turtle.color("black")
turtle.penup()
turtle.goto(0, -25)
turtle.pendown()
turtle.circle(45)

turtle.color("red")
turtle.penup()
turtle.goto(110, -25)
turtle.pendown()
turtle.circle(45)

turtle.color("yellow")
turtle.penup()
turtle.goto(-55, -75)
turtle.pendown()
turtle.circle(45)

turtle.color("green")
turtle.penup()
turtle.goto(55, -75)
turtle.pendown()
turtle.circle(45)

turtle.color("black")
turtle.penup()
turtle.goto(0, 80)
turtle.pendown()
turtle.write("Olympic Symbol") # Вместо еще одного круга выводим надпись "Olympic Symbol"

turtle.done()


Теперь нарисуем домик (я очень плохо рисую, кстати :) ):
Тут я использовал еще несколько новых функций:
import turtle

turtle.penup()
turtle.goto(35, 35)
turtle.right(90) # Повернуть курсор на 90 градусов вправо
turtle.pendown()
turtle.forward(70) # Пройти вперед расстояние 70, если курсор опущен, то будет нарисована линия по пути слоедования

turtle.right(90)
turtle.forward(70)

turtle.right(90)
turtle.forward(70)

turtle.right(90)
turtle.forward(70)

turtle.penup()
turtle.goto(45, 35)
turtle.right(225)
turtle.pendown()
turtle.forward(70)

turtle.left(90)
turtle.forward(70)

turtle.left(135) # Повернуть курсор влево на 135 градусов
turtle.forward(100)

turtle.done()


Ссылки:
Обожаю Python за его мега крутую документацию, вот по turtle: тыц