воскресенье, 27 октября 2013 г.

Настройка клиента ИнГео в Debian Wheezy

Клиента ИнГео можно запустить под Wine, однако следует иметь ввиду, что нормально в Wine работают только версии ИнГео начиная с 4.4. Поэтому стоит сразу скачать подходящую версию на официальном сайте, на странице по ссылке: http://www.integro.ru/dl/ingeo/ingeo44/

После установки wine нужно запустить его настройку по команде winecfg и перейти на вкладку "Библиотеки":


Необходимо добавить замещения для библиотек, изображённых на скриншоте, указав, что должны использоваться сторонние библиотеки:
activeds
dbmsrpcn
odbc32
odbccp32
odbcint
sqlsrv32
sqlsrv32.rll
sqlunirl

Теперь можно установить MDAC (берётся на сайте MS, прямая ссылка: http://download.microsoft.com/download/2/e/d/2ed44410-0644-4021-8001-a2496f2889eb/MDAC_TYP.EXE)

Если MDAC не захочет устанавливаться, то в wine нужно выставить версию "Windows 95", установить MDAC и снова вернуть версию "Windows XP":


Осталось выполнить настройку самого клиента ИнГео (мой сервер ИнГео использует СУБД MS SQL Server, поэтому дополнительной настройки ODBC-драйвера не требуется):




В итоге получаем работающую систему:

воскресенье, 13 октября 2013 г.

Перевод работающей системы Debian на RAID 1

Задача

Есть система, установленная на один диск. В систему установлен пустой диск такого же размера. Необходимо настроить зеркалирование разделов диска при помощи подсистемы md. В моём случае разбивка диска была следующей: /dev/sda2 - раздел подкачки, /dev/sda3 - корневой раздел, /dev/sda4 - раздел /home/.

1. Клонирование имеющейся системы на деградированный RAID 1

Для начала, скопируем на новый диск таблицу разделов с имеющегося:
# sfdisk -d /dev/sda | sfdisk /dev/sdb
Теперь выставим у каждого раздела, который будет зеркалироваться тип Linux raid autodetect (в моём случае это разделы 3 и 4) и запишем изменения на диск:
# fdisk /dev/sdb
Command (m for help): t
Partition number (2-4): 3
Hex code (type L to list codes): fd

Command (m for help): t
Partition number (2-4): 4
Hex code (type L to list codes): fd

Command (m for help): w
На новом диске создадим деградированные разделы RAID 1, то есть разделы, в которых зеркальная пара отсутствует:
# mdadm --create /dev/md3 -l1 -n2 missing /dev/sdb3
# mdadm --create /dev/md4 -l1 -n2 missing /dev/sdb4
Можно заглянуть в файл /proc/mdstat, чтобы увидеть, что разделы RAID 1 созданы и в них отсутствует зеркальная пара.

Теперь нужно разметить разделы дисков (раздел для подкачки объединять в RAID 1 я не стану, а буду использовать его как дополнение к первому):
# mkswap /dev/sdb2
# mkfs.ext4 /dev/md3
# mkfs.ext4 /dev/md4
Теперь создадим точки монтирования для разделов и смонтируем их:
# mkdir /mnt/root
# mkdir /mnt/home
# mount /dev/md3 /mnt/root
# mount /dev/md4 /mnt/home
Теперь нужно скопировать содержимое разделов с работающей системы. Для этого я воспользуюсь rsync, запущенным от пользователя root, что позволит скопировать права доступа и владельцев всех файлов и каталогов:
# rsync -avvx --delete / /mnt/root/
# rsync -avvx --delete /home/ /mnt/home/
Теперь отредактируем файл /etc/fstab на копии корневого раздела. Для этого сначала узнаем идентификаторы раздела подкачки, корневого раздела и домашнего раздела, а затем пропишем их в файл /mnt/root/etc/fstab:
# blkid /dev/sdb2
# blkid /dev/md3
# blkid /dev/md4
# vi /mnt/root/etc/fstab
Обновим таблицу разделов md на новом диске:
# mdadm --detail --scan > /mnt/root/etc/mdadm/mdadm.conf
Теперь пришло время установить на новый диск GRUB и обновить загрузочный образ initrd, чтобы в нём были модули ядра, необходимые для работы с разделами RAID. Для этого сначала смонтируем в новый корневой раздел необходимые виртуальные файловые системы:
# mount --bind /dev /mnt/root/dev
# mount --bind /sys /mnt/root/sys
# mount --bind /proc /mnt/root/proc
Сделаем корнем корневую файловую систему нового диска:
# chroot /mnt/root
Смотрим идентификаторы дисков:
# ls /dev/disk/by-id/
Прописываем идентификатор нового диска в файл /boot/grub/device.map:
# vim /boot/grub/device.map
И устанавливаем GRUB (обратите внимание на то, что загрузочный сектор записывается на сам новый диск, а установка осуществляется в корневой раздел RAID 1):
# grub-install /dev/sdb
# update-grub
Обновим загрузочный образ initrd. Для этого сначала в файл /etc/initramfs-tools/modules дописываем модуль raid1, а затем обновляем загрузочные образы:
# vi /etc/initramfs-tools/modules
# update-initramfs -u -k all
Теперь можно попробовать перезагрузить систему, выбрав в BIOS загрузку со нового диска, на котором размечены разделы RAID 1.

2. Добавление исходного диска во вновь созданный RAID 1

Если система загрузилась, осталось только изменить типы разделов на старом диске и включить его разделы массивы RAID 1:
# fdisk /dev/sda
Command (m for help): t
Partition number (2-4): 3
Hex code (type L to list codes): fd

Command (m for help): t
Partition number (2-4): 4
Hex code (type L to list codes): fd

Command (m for help): w
# mdadm --add /dev/md3 -a /dev/sda3
# mdadm --add /dev/md4 -a /dev/sda4
В файле /proc/mdstat можно наблюдать за процессом синхронизации разделов-половинок RAID 1.

Теперь переустановим GRUB на первом диске, чтобы в случае отказа второго, систему можно было загрузить с первого диска:
# grub-install /dev/sda
Не забудьте проверить, что с первого диска тоже можно загрузить систему, перезагрузив её снова и выбрав в BIOS загрузку с первого диска.

Использованные материалы:

1. Перенос работающей системы на программный RAID 1
2. Установка raid1 на работающую систему Debian Squeeze - осторожно, сиське :)

воскресенье, 6 октября 2013 г.

Создание deb-пакетов для модулей Python

Во одной из своих прошлых заметок, Шаблоны HTML::Template в Perl-фреймворке Dancer, я упомянул о том, как можно установить в систему Perl-модуль, которого нет в репозиториях, не засоряя систему. Команда dh-make-perl позволяет скачать произвольный Perl-модуль с CPAN и упаковать его в deb-пакет.

Теперь у меня возникло аналогичное желание для Python-модуля. В репозитории Debian нет модуля grab. Я не хотел прибегать к помощи python-virtualenv (подобный же инструмент существует и для Perl - пакет perlbrew в Debian и модуль App::perlbrew на CPAN), а захотел собрать deb-пакет для установки в систему.

Как оказалось, такой инструмент существует (хоть он и менее удобен по сравнению с dh-make-perl) и называется он stdeb. Он уже имеется в репозитории Debian, поэтому задача Мюнхгаузена - вытянуть себя за собственные шнурки - перед нами не стоит. Ставим пакеты stdeb и python-all:
# apt-get install stdeb python-all
Теперь находим архив с нужным нам модулем на pypi.python.org и скачиваем его себе:
$ wget https://pypi.python.org/packages/source/g/grab/grab-0.4.12.tar.gz#md5=a9d42f6db9f96357d18fe170176c95b4
Теперь можно заглянуть в документацию на stdeb и посмотреть, как это делается.

Распакуем скачанный архив:
$ tar xzvf grab-0.4.12.tar.gz
Перейдём в каталог с распакованным модулем:
$ cd grab-0.4.12
Подготовим каталог и управляющие файлы для сборки пакета:
$ python setup.py --command-packages=stdeb.command sdist_dsc
Теперь перейдём в этот каталог и соберём пакет:
$ cd deb_dist/grab-0.4.12
$ dpkg-buildpackage -us -uc -rfakeroot
В каталоге выше появится готовый deb-пакет, который можно установить в систему.
# dpkg -i python-grab_0.4.12-1_all.deb

Ссылки:
1. Документация на stdeb
2. Заметка об использовании Perlbrew
3. Python. Строим виртуальное окружение с помощью virtualenv