Условия задачки просты до безобразия.
Начиная эту статью, я не преследую цель написать подробное руководство по установке и настройке необходимого серверного программного обеспечения (ПО). Таких статей, How-To и т.п. в Сети много. Я постараюсь описать именно процесс перехода с AD на OpenLDAP+Samba3 и те сложности, с которыми мне пришлось столкнуться.
Хочу заметить, что в моей локальной сети переход прошел не так гладко, как хотелось. Были ошибки, сбои и весьма неприятные моменты. Такие «грабли» я постараюсь описать подробно, чтобы те, кто прочитает мою статью, на них не наступал.
По ходу описания я буду приводить ссылки на материалы, которые я использовал.
Имеется:
Для Linux-сервера я выбрал новый на момент написания статьи Ubuntu Linux 7.04 Feisty со следующими версиями пакетов:
Инструмент для перехода: Windows to Linux Migration Toolkit (w2lmt).
Инструмент для графического отображения дерева LDAP: phpldapadmin.
Подготовка Windows-сервера.
Следующие группы, названные по-русски, необходимо переименовать:
| Администраторы домена | -> | Domain Admins |
| Компьютеры домена | -> | Domain Computers |
| Гости домена | -> | Domain Guests |
| Пользователи домена | -> | Domain Users |
Связано это с тем, что эти группы имеют фиксированное значение SID, а используемый в процессе перехода скрипт smbldap-populate создаст группы с именами в латинице, и пользователи корректно не перенесутся на новую систему.
Также надо быть особо внимательным, если в сети имеется несколько рабочих станций, за которыми работают под одним и тем же именем.
На двух станциях работали под одним и тем же именем пользователя. Должного внимания профилям в процессе перехода я не уделил. В результате профиль с одной станции скопировался на другую, затерев старый профиль. Соответственно преждние "Мои документы", "Рабочий стол" и т.д. были удалены. Пришлось снимать жесткий диск и восстанавливать удаленные файлы.
Подготовка Linux-сервера
Подготовка Linux-сервера сводится к устранению возможных дубликатов uid и gid, хранящихся в базе LDAP и в /etc/passwd.
После первоначальной установки ОС Linux, в системе создается первый пользователь с uid=1000 и gid=1000.
Скрипт smbldap-populate без параметров создаст первоначальную структуру LDAP, в которой будут созданы пользователи root и nobody, а первый пользователь домена будет иметь uid=1000. Т.е. будет конфликт между локальным пользователем и пользователем в LDAP, имеющими одинаковый uid=1000.
Группы, созданные smbldap-populate будут иметь следующие параметры:
| Группа | uid | SID |
| Account Operators | 548 | S-1-5-32-548 |
| Administrators | 544 | S-1-5-32-544 |
| Backup Operators | 551 | S-1-5-32-551 |
| Domain Admins | 512 | SID_СЕРВЕРА-512 |
| Domain Computers | 515 | SID_СЕРВЕРА-515 |
| Domain Guests | 514 | SID_СЕРВЕРА-514 |
| Domain Users | 513 | SID_СЕРВЕРА-513 |
| Print Operators | 550 | S-1-5-32-550 |
| Replicators | 552 | S-1-5-32-552 |
В заново установленной ОС Linux локальных групп с такими gid-ми скорее всего не будет, но лучше убедиться, что их действительно нет. И, если есть, присвоить им другие значения gid, отличные от перечисленных.
Предполагается, что в сети уже есть работающий DNS-сервер.
В моей сети работает связка DDNS + DHCPD3. О том, как ее настроить можно прочитать здесь:
http://www.ops.ietf.org/dns/dynupd/secure-ddns-howto.html
http://www.opennet.ru/base/net/auto_dns_dhcp.txt.html
Краткое отступление
Об утилитах Windows to Linux Migration Toolkit (w2lmt) я узнал из книги Дэвида Аллена "Переход с Windows на Linux".
Другой документации или какого-либо описания работы w2lmt в Сети я не нашел. Поэтому все описанное цитаты из книги и личный опыт. Книга посвещена не только w2lmt, все "грабли" в ней не расписаны.
Кроме этого, я не буду полностью описывать работу w2lmt, а коснуcь только тех моментов, которые возникали именно в моем процессе перехода.
Состав w2lmt
Для перехода с AD на LDAP+Samba3 использовались w2lmt 0.3.1.
Скачанный архив, кроме всего прочего, содержит perl-скрипты и соответствующие им конфигурационные файлы.
| w2lmt-migrate-dns |
Скрипт предназначен для автоматического переноса информации DNS из Windows в Linux. Этот скрипт я не использовал, т.к. в локальной сети уже работал DNS на Linux-сервере. |
| w2lmt-migrate-smbauth |
Скрипт предназначен для извлечения информации аутентификации. Это основной скрипт, который должен корректно перенести пользователей с Windows-сервера в LDAP. |
| w2lmt-migrate-directory |
Скрипт, который запускается после завершения w2lmt-migrate-smbauth. Этот скрипт запросит сервер Exchange для обновления объектов каталогов любой сохраненной в нем нужной информации. Также он добавляет объекты контактов и группы распределений. В моей сети не использовался Exchange, а служба AD использовалась только для аутентификации. Поэтому у меня не было необходимости запускать этот скрипт. |
| w2lmt-migrate-imap |
Все скрипты запускаются с ключем "-f /path/to/file.conf".
Для работы скриптов требуется пакет smbldap-tools версии не ниже 0.8.5.
Устанавливаем сервер LDAP:
Отвечаем на следующие вопросы:
После первой установки slapd, в базе LDAP будет единственная запись администратора cn=admin,dc=mydomain с паролем password.
Устанавливаем phpldapadmin и apache2
Устанавливаем samba
Отвечаем на следующие вопросы:
Хотя созданный файл smb.conf будет изменет, на вопросы ответить придется.
Устанавливаем smbldap-tools и ldap-utils
Настройка slapd
В результате файл slapd.conf будет выглядеть примерно так:
#######################################################################
# Global Directives:
# Features to permit
#allow bind_v2
# Schema and objectClass definitions
include /etc/ldap/schema/core.schema
include /etc/ldap/schema/cosine.schema
include /etc/ldap/schema/nis.schema
include /etc/ldap/schema/inetorgperson.schema
include /etc/ldap/schema/samba.schema
# Where the pid file is put. The init.d script
# will not stop the server if you change this.
pidfile /var/run/slapd/slapd.pid
# List of arguments that were passed to the server
argsfile /var/run/slapd/slapd.args
###################################################################
# loglevel # Logging description
loglevel 256
# Where the dynamically loaded modules are stored
modulepath /usr/lib/ldap
moduleload back_bdb
# The maximum number of entries that is returned for a search operation
sizelimit 500
# The tool-threads parameter sets the actual amount of cpu's that is used
# for indexing.
tool-threads 1
#######################################################################
# Specific Backend Directives for bdb:
# Backend specific directives apply to this backend until another
# 'backend' directive occurs
backend bdb
checkpoint 512 30
#######################################################################
# Specific Directives for database #1, of type bdb:
# Database specific directives apply to this databasse until another
# 'database' directive occurs
database bdb
# The base of your directory in database #1
suffix "dc=MYDOMAIN"
# Where the database file are physically stored for database #1
directory "/var/lib/ldap"
# For the Debian package we use 2MB as default but be sure to update this
# value if you have plenty of RAM
dbconfig set_cachesize 0 2097152 0
# Number of objects that can be locked at the same time.
dbconfig set_lk_max_objects 1500
# Number of locks (both requested and granted)
dbconfig set_lk_max_locks 1500
# Number of lockers
dbconfig set_lk_max_lockers 1500
# Indexing options for database #1
index objectClass eq
# Save the time that the entry gets modified, for database #1
lastmod on
# users can authenticate and change their password
access to attrs=userPassword,sambaNTPassword,sambaLMPassword,sambaPwdLastSet,sambaPwdMustChange
by dn="cn=admin,dc=MYDOMAIN" write
by self write
by anonymous auth
by * none
# The admin dn has full write access, everyone else
# can read everything.
access to *
by dn="cn=admin,dc=MYDOMAIN" write
by * read
Настройка samba
passdb backend = ldapsam:ldap://127.0.0.1
idmap backend = ldap:ldap://127.0.0.1
ldap admin dn = cn=admin,dc=mydomain
ldap suffix = dc=mydomain
ldap machine suffix = ou=Computers
ldap user suffix = ou=Users
ldap group suffix = ou=Groups
ldap passwd sync = yes
ldap delete dn = yes
ldap passwd sync = yes
ldap ssl = no
preferred master = yes
domain master = no
domain logons = yes
logon path =
logon drive = Z:
logon home = \\%L\SYSVOL\users\%U
add machine script = /usr/sbin/smbldap-useradd -t 0 -w "%u"
add user script = /usr/sbin/smbldap-useradd -m "%u"
delete user script = /usr/sbin/smbldap-userdel "%u"
add group script = /usr/sbin/smbldap-groupadd -p "%g"
delete group script = /usr/sbin/smbldap-groupdel "%g"
add user to group script = /usr/sbin/smbldap-groupmod -m "%u" "%g"
delete user from group script = /usr/sbin/smbldap-groupmod -x "%u" "%g"
set primary group script = /usr/sbin/smbldap-usermod -g '%g' '%u'
interfaces = 127.0.0.0/8 eth0
hosts allow = 127.0.0.1 192.168.0.0/255.255.255.0
hosts deny = ALL
map to guest = Bad User
guest account = nobody
log file = /var/log/samba/log.%m
max log size = 500 # in Kb
log level = 5
socket options = TCP_NODELAY SO_SNDBUF=8192 SO_RCVBUF=8192
socket address = 127.0.0.1 192.168.0.2
printing = cups
load printers = yes
####### MAIL THE ADMIN A BACKTRACE
panic action = /usr/share/samba/panic-action %d
[homes]
comment = Home Directories
guest ok = No
browseable = No
create mask = 0644
directory mask = 0775
writeable = yes
inherit permissions = Yes
[profiles]
path = /home/SYSVOL/profiles
comment = User Profiles
guest ok = Yes
browseable = No
create mask = 0600
directory mask = 0700
writeable = Yes
profile acls = Yes
csc policy = disable
force user = %U
valid users = %U @"Domain Admins"
[netlogon]
comment = User Netlogon
path = /home/SYSVOL/netlogon
browseable = No
write list = MYDOMAIN@"Domain Admins"
[IPC$]
# IPC необходимо для нормальной работы Windows-домена:
# browse network, browse folder и прочее.
path = /tmp
hosts allow = 192.168.0.0/24, 127.0.0.1
hosts deny = 0.0.0.0/0
Для хранения сценариев регистрации, профилей и домашних папок пользователей LDAP, я создал папку /home/SYSVOL (по аналогии с Windows, мне так удобнее). Соответственно, в ней созданы папки netlogons, profiles, users.
Параметры domain master = no и domain logons = yes превращают сервер Samba в резервный контроллер домена.
Параметр logon path = оставлен пустым, т.к. я не хочу хранить профили пользователей рабочих станций на сервере. Если все же требуется хранить профили, то нужно указать путь. По-умолчанию
logon path = \\%N\%U\profile
Устанавливаем пакет libpam-ldap
Файл /etc/ldap/ldap.conf должен выглядеть так:
/etc/pam.d/common-account
# и добавить две строки
account sufficient pam_ldap.so
account required pam_unix.so try_first_pass
/etc/pam.d/common-auth
# и добавить две строки
auth sufficient pam_ldap.so
auth required pam_unix.so nullok_secure use_first_pass
/etc/pam.d/common-password
# и добавить две строки
password sufficient pam_ldap.so
password required pam_unix.so nullok obscure min=4 max=8 md5 use_first_pass
Итак, Linux-сервер готов для переноса пользователей из AD в LDAP. Но нужно сделать еще кое-что.
Я использовал простую структуру дерева LDAP, которую создает утилита smbldap-populate.

Скачиваем архив w2lmt-0.3.1 и распаковываем его любое удобное место.
Далее следует внести изменения в файл migrate-smbauth.conf.
Если Active Directory выполняется в смешанном режиме (Mixed Mode, как раз мой случай), то в файле конфигурации сценария w2lmt-migrate-smbauth в качестве SourceType следует использовать настройку NT4. При использовании этой настройки сохраняется SID и RID существующего домена.
При выполнении Active Directory в "родном" режиме (Native Mode) сценарии будут создавать новый домен с новыми SID и RID для пользователей, групп и машин. Это происходит потому, что собственный режим AD не совместим с доменом типа Samba NT4, на который осуществляется переход. Следует помнить о том, что все объедененные в этом домене машины необходимо повторно объединять в новый домен на базе Linux.
Сценарий w2lmt-migrate-smbauth по ходу выполнения вызовет скрипт smbldap-populate без параметров. Т.к. установки по-умолчанию меня не устраивали, я внес в файл w2lmt-migrate-smbauth следующие изменения:
По-умолчанию, после установки пакета smbldap-tools, в папке /etc отсутствуют его конфигурационные файлы. По-этому их надо создать вручную. Это файлы /etc/smbldap-tools/smbldap.conf и /etc/smbldap-tools/smbldap_bind.conf.
Непосредственно для перехода конфигурационные файлы smbldap-tools можно оставить пустыми. Главное, чтобы они были, иначе скрипты smbldap-tools просто не будут выполняться, ссылаясь на их отсутствие.
Сценарий w2lmt-migrate-smbauth сначала покажет список параметров и их значения по-умолчанию и позволит изменить значения некоторых из них, но, увы, не у всех. По-этому конфигурационные файлы smbldap-tools лучше все-таки заполнить. Как вариант, их можно скопировать из папки /usr/share/doc/smbldap-tools/examples в папку /etc/smbldap-tools/ и отредактировать.
У меня конфигурационные файлы smbldap-tools выглядят так:
/etc/smbldap-tools/smbldap_bind.conf
/etc/smbldap-tools/smbldap.conf
# Domain name the Samba server is in charged.
# If not defined, parameter is taking from smb.conf configuration file
sambaDomain="MYDOMAIN"
########################################################################
#
# LDAP Configuration
#
########################################################################
# Slave LDAP server
# If not defined, parameter is set to "127.0.0.1"
slaveLDAP="localhost"
# Slave LDAP port
# If not defined, parameter is set to "389"
slavePort="389"
# Master LDAP server: needed for write operations
# If not defined, parameter is set to "127.0.0.1"
masterLDAP="localhost"
# Master LDAP port
# If not defined, parameter is set to "389"
masterPort="389"
# Use TLS for LDAP
# If set to 1, this option will use start_tls for connection
# (you should also used the port 389)
# If not defined, parameter is set to "1"
ldapTLS="0"
# How to verify the server's certificate (none, optional or require)
# see "man Net::LDAP" in start_tls section for more details
verify=""
# LDAP Suffix
suffix="dc=mydomain"
# Where are stored Users
# Warning: if 'suffix' is not set here, you must set the full dn for usersdn
usersdn="ou=Users,dc=mydomain"
# Where are stored Computers
# Warning: if 'suffix' is not set here, you must set the full dn for computersdn
computersdn="ou=Computers,dc=mydomain"
# Where are stored Groups
# Warning: if 'suffix' is not set here, you must set the full dn for groupsdn
groupsdn="ou=Groups,dc=mydomain"
# Where to store next uidNumber and gidNumber available for new users and groups
# If not defined, entries are stored in sambaDomainName object.
sambaUnixIdPooldn="cn=NextFreeUnixId,dc=mydomain"
# Default scope Used
scope="sub"
# Unix password encryption (CRYPT, MD5, SMD5, SSHA, SHA, CLEARTEXT)
hash_encrypt="CRYPT"
# if hash_encrypt is set to CRYPT, you may set a salt format.
# default is "%s", but many systems will generate MD5 hashed
# passwords if you use "$1$%.8s". This parameter is optional!
crypt_salt_format="%s"
########################################################################
#
# Unix Accounts Configuration
#
########################################################################
# Login defs
# Default Login Shell
userLoginShell="/bin/bash"
# Home directory
userHome="/home/SYSVOL/users/%U"
# Default mode used for user homeDirectory
userHomeDirectoryMode="700"
# Gecos
userGecos="Domain User"
# Default User (POSIX and Samba) GID
defaultUserGid="513"
# Default Computer (Samba) GID
defaultComputerGid="515"
# Skel dir
skeletonDir="/etc/skel"
# Default password validation time (time in days) Comment the next line if
# you don't want password to be enable for defaultMaxPasswordAge days (be
# careful to the sambaPwdMustChange attribute's value)
defaultMaxPasswordAge="45"
########################################################################
#
# SAMBA Configuration
#
########################################################################
# The UNC path to home drives location (%U username substitution)
# Just set it to a null string if you want to use the smb.conf 'logon home'
# directive and/or disable roaming profiles
userSmbHome="\\LAN2\%U"
# The UNC path to profiles locations (%U username substitution)
# Just set it to a null string if you want to use the smb.conf 'logon path'
# directive and/or disable roaming profiles
userProfile=""
# The default Home Drive Letter mapping
# (will be automatically mapped at logon time if home directory exist)
userHomeDrive="Z:"
# The default user netlogon script name (%U username substitution)
# if not used, will be automatically username.cmd
# make sure script file is edited under dos
userScript="login.bat"
# Domain appended to the users "mail"-attribute
# when smbldap-useradd -M is used
mailDomain="my.mail.domain"
########################################################################
#
# SMBLDAP-TOOLS Configuration (default are ok for a RedHat)
#
########################################################################
# Allows not to use smbpasswd (if with_smbpasswd == 0 in smbldap_conf.pm) but
# prefer Crypt::SmbHash library
with_smbpasswd="0"
smbpasswd="/usr/bin/smbpasswd"
# Allows not to use slappasswd (if with_slappasswd == 0 in smbldap_conf.pm)
# but prefer Crypt:: libraries
with_slappasswd="1"
slappasswd="/usr/sbin/slappasswd"
# comment out the following line to get rid of the default banner
# no_banner="1"
Обратите внимание на то, что параметр SID закомментирован. Если его раскомментировать, то сценарий w2lmt-migrate-smbauth сам подставит занчение SID, и оно будет не верным. Почему так, я не понял, установил опытным путем.
После того, как перенос данных из AD в LDAP будет выполнен, следует раскомментировать параметр SID и прописать его значение, узнать которое можно будет с помощью команды net getlocalsid.
Параметр ldapTLS="0" означает, что я не использую шифрование.
Параметр userProfile="" означает, что я не использую перемещаемые профили. Если есть необходимость их использовать, то этот параметр будет выглядеть, например, так: userProfile="\\LAN2\profiles\%U".
Перед запуском сценария w2lmt-migrate-smbauth стоит лишний раз убедиться в следующем:
Теперь запускаем сценарий w2lmt-migrate-smbauth
После этого на экране появится примерно такой диалог:
=== LDAP Settings: ==============================================
Master LDAP Server: localhost
Master LDAP Port: 389
Master DN: admin
LDAP Base Suffix: dc=mydomain
Users OU: ou=Users
Groups OU: ou=Groups
Computers OU: ou=Computers
IDMap OU: ou=Idmap
Unix ID Pool DN: cn=NextFreeUnixId,dc=mydomain
=== SAMBA Settings: =============================================
User's Home Share: \\LAN2\%U
User's Login Script: login.bat
User's Profile:
Password Age: 45
User Default GID: 513
Computer Default GID: 515
=== POSIX Settings: =============================================
User's Home Directory: /home/SYSVOL/users/%U
Default Shell: /bin/bash
Default Mail Domain: my.mail.domain
Skeleton Directory: /etc/skel
Hash Encryption Type: CRYPT
Hash Encryption Salt: %s
Press (C) to continue, (M) to modify the above or (Q) to quit:
В общем то можно нажать M и исправить параметры, но я бы не рекомендовал так поступать, т.к. скрипт позволяет редактировать только некоторые из показанных. Лучше выйти и отредактировать файлы конфигурации в текстовом редакторе.
Жмем C.
Вот тут я не сразу смог понять, что же не так. Вроде бы и настройки верные, и первоначальное дерево LDAP создалось, а перенос пользователей начинается только, если нажать два раза Enter.
Дело в том, что по окончанию создания первоначального дерева LDAP, скрипт smbldap-populate предлагает ввести пароль Администратора. Скрипт w2lmt-migrate-smbauth строку приглашения ввода пароля не выводит, просто курсор мигает. Так что пароль и подтверждение пароля пользователя Administrator приходится вводить вслепую.
Теперь можно пойти заварить кофейку. Перенос моих пользователей занял около 20 мин. ;-)
Можно сказать, что на этом все. Windows сервер можно выключать. Все пользователи со всех рабочих станций успешно прошли аутентификацию. Но "грабли" на некоторых станциях все же были, причем я не смог установить связаны ли они с версий Windows или с чем то еще.
Проблемы следующие:
Решение было одно - вывести станции из домена и заново их зарегистрировать.
Осень 2007 года подходит к концу.
Описанный вариант замены Active Directory на OpenLDAP+Samba3 был осуществлен полгода назад.
Система продолжает успешно работать.
Повторюсь, предложенное описание перехода не претендует на Полное руководство или How-To. Пишу, в основном, для себя.
Буду рад, если кому-то это описание окажется полезным.
Локальная демо-версия Консультант+ запускается из-под wine, входящего в дистрибутив Linux.
Запуск сетевой версии описан тут: http://lists.altlinux.org/pipermail/sisyphus/2007-March/095452.html.
Локальная версия Гаранта запустилась из-под Wine@Etersoft.
В Wine@Etersoft версии 1.0.7 реализована очень удобная "фишка". Программы, открывающие документы в MS Word/Excel, теперь обращаются к системному OpenOffice.org (например, это Консультант+ и Гарант).
У меня стоит сборка OpenOffice.org 2.2.1 от ООО "Инфра-Ресурс", в которой OpenOffice.org устанавливается в папку /opt, и реализованная в WINE@Etersoft подмена вызова офисного приложения не работает.
Чтобы она заработала в системах Консультант+ и Гарант, необходимо создать следующие символические ссылки:
С OpenOffice.org, входящем в дистрибутив, таких манипуляций проделывать не требуется.
ИС-ПРО - это автоматизированная система управления предприятием.
Подробности об этой системе можно узнать здесь:
http://www.is-pro.ru/ru/about/index.html
http://www.intelserv.kiev.ua/forbpro.shtml
На момент написания статей у нас стояла система ИС-ПРО 4.13.035.
Для работы сетевого варианта ИС-ПРО с выделенным сервером потребуется сервер следующей конфигурации:
Операционная система GNU/Linux.
Подойдет в общем-то любой дистрибутив Linux, но RPM-based будет удобнее. Почему - поясню далее.
Требования к конфигурации операционной системы GNU/Linux:
Полный список режимов работы и аппаратно-программных требований ИС-ПРО смотрите здесь: http://www.intelserv.kiev.ua/texn.shtml
Проще говоря, для того, чтобы ИС-ПРО заработал, на серере нужно установить Pervasive.SQL 2000i SP3 или выше и SAMBA.
Хотя, может я просто плохо искал... Если честно, особенно и не старался...
Pervasive.SQL 2000i под Linux распространяется в виде RPM-пакета или ZIP-архива, содержащего RPM-пакет сервера Pervasive.SQL 2000i, клиента под Windows и программы Pervasive System Analyzer.
Pervasive.SQL 2000i - на самом деле это версия 7.9x, предшествующая Pervasive 8.0. ServicePack-ам соответствуют следующие версии RPM-пакетов:
Pervasive.SQL 2000i SP3 - Pervasive.SQL-7.90.243.007-2000i.i386.rpm
Pervasive.SQL 2000i SP4 - Pervasive.SQL-7.94.251.005-2000i.i386.rpm
Найти их в Internet можно, воспользовавшись сервером "Поиска файлов", например http://www.filesearch.ru, или на сайте производителя http://www.pervasive.com. Точную ссылку на Pervasive.SQL 2000i на сайте производителя дать не могу, т.к. во-первых, текущая версия 9 SP2, и ссылки на ранние версии как-то хитро замаскированны, во-вторых, чтобы скачать Pervasive.SQL 2000i с этого сайта, предварительно надо зарегистрироваться.
В любом случае Вы скачаете 30-и дневную Trial-версию Pervasive.SQL 2000i на 20 пользовательских подключений.
Как уже было сказано, нужно предварительно установить SAMBA. Об этом уже много написано, повторяться не буду.
Отмечу лишь следующее:
RPM-based дистрибутив Linux
Если у Вас RPM-based дистрибутив Linux (RedHat, Mandriva, AltLinux, ASPLinux и т.д.), то проблем с установкой быть не должно. Выполняем команду:
и все.
Для запуска и остановки сервера Pervasive.SQL выполните команду, соответственно
или, если есть поддержка команды service, как в RedHat
Дистрибутив Debian GNU/Linux
Если во всех RPM-based установка Pervasive.SQL 2000i проходит одинаково, то как она пройдет в других дистрибутивах Linux, я не знаю. На своих серверах я использую Debian GNU/Linux. На момент написания статьи установлен Debian Sarge 3.1r2a с текущими обновлениями. Хоть Debian и использует свои DEB-пакеты, с RPM от тоже работать умеет.
Для установки Pervasive.SQL-7.9x.xxx.xxx-2000i.i386.rpm нужно установить rpm и cpio.
Далее тоже самое, что и в RPM-based дистрибутиве, но с ключем, чтобы зависимости не проверялись.
Pervasive.SQL-7.9x.xxx.xxx-2000i.i386.rpm требует sh.xxx.rpm. Разумеется ставиь его из RPM не надо.
У Debian-а нет папки /etc/rc.d, но после установки Pervasive.SQL 2000i она будет создана. В каждом из каталогов /etc/rc.d/init.d, /etc/rc.d/rc0.d, ..., /etc/rc.d/rcS.d будет лежать по одному файлу. Эти файлы нужно будет перенести соответственно в /etc/init.d, /etc/rc0.d, ..., /etc/rcS.d. Или можно просто перенести файл /etc/rc.d/init.d/psql в /etc/init.d/psql и установить его запуск, используя команду update-rc.d.
После этого папку /etc/rc.d можно удалить.
Если по каким-либо причинам команда rpm -ivh ... выдала ошибку, и пакет не установился, то можно преобразовать его в DEB-пакет, воспользовавшить утилитой alien, или распаковать вручную. Но тут уж без "бубна" не обойтись.
Настройка
Pervasive.SQL 2000i установиться в папку /usr/local/psql/. Будут созданы локальный пользователь psql и группа pvsw. В файл /etc/samba/smb.conf будут добавлены сетевые разделы [PSQL] и [PVPIPE$].
Настройки раздел [PVPIPE$] менять не надо, а в [PSQL] следуюет прописать доступ пользователям ИС-ПРО. Так же потребуется создать раздел, в который будет установлена система ИС-ПРО. У меня этот раздел называется [BPRO]. В итоге часть файла smb.conf с настройками для Pervasive.SQL и ИС-ПРО будет выглядеть примерно так:
[PSQLDATA]
comment = Pervasive databases
path = /usr/local/psql/data
browseable = no
force user = psql
force group = pvsw
create mask = 0664
directory mask = 0775
case sensitive = no
msdfs proxy = no
valid users = @"MYDOMAIN@ISProUser", @pvsw, psql
write list = @"MYDOMAIN@ISProUser", @pvsw, psql
[PVPIPE$]
comment = Pervasive pipes
path = /usr/local/psql/etc/pipe/
# only members of group pvsw will have access
valid users = @pvsw
# Absolutely necessary - prevents caching
oplocks = no
case sensitive = no
msdfs proxy = no
На этом все. Перезапускаем Samba, на рабочей станции ставим Pervasive.SQL-клиента, назначаем сетевой диск для ресурса \\MYSERVER\BPRO и можно устанавливать систему ИС-ПРО (об этом написано в документации к ИС-ПРО).
Хочу отметить две утилиты, которые точно понадобятся.
btadmin [-p пароль] [a+] [a-] [-r] username
btadmin создает или обновляет файл аутентификации пользователей. Для работы ИС-ПРО пользователи, созданные с помощью btadmin не требуются. Но если потребуется снять зависшее подключение или т.п., то эти пользователи понадобятся. Наверное, можно настроить аутентификацию из Active Directory, но я с этим еще не разбирался.
ucutil -D <путь> | -G<код> | -K<ключ> | -S
ucutil - утилита поддержки количества пользовательских подключений. Она управляет лицензионными ключами. Чтобы ее использовать, нужно войти в систему как пользователь root.
Команда:
Покажет серийный номер, на основе которого генерируется лицензионный ключ. Этот ключ вводится с помощью команды:
После выполнение команды:
на экране будет следующее:
Following is the product list:
Product Code Product
------------ --------
1 Btrieve 6.30
2 Scalable SQL 4.0
10 Pervasive.SQL v7 Server
11 Pervasive.SQL 2000 Server
101 Pervasive.SQL 2000 Workgroup
Select one from the product list: _
Далее нужно ввести код продукта (в моем случае это 11) и тогда будет показано количество возможных пользовательских подключений и дата окончания действия лицензии.
Сервер
Если кто-то Вам скажет, что перенести систему ИС-ПРО 4 с сервера Windows на сервер Linux сложно, не верьте. Перенос данных и самой системы - процесс, наверное, самый длительный, но и самый простой во всем описанном здесь "безобразии". ;-) Заключается он в простом копировании всего содержимого папки [BPRO] со старого (Windows) сервера на новый (Linux) сервер.
Первое, что нужно сделать, это остановить сервис Pervasive на Windows-сервере и закрыть файловый доступ к [BPRO] всем, кроме себя. Даже если Вы занимаетесь переносом системы ИС-ПРО в выходные или ночью, когда по-вашему никого на работе нет, подстраховаться не помешает.
Далее, на Linux-сервере, проверьте владельца и группу файлов и папок, скопированных в [BPRO].
Владелец и группа должны быть psql и pvsw.
Если владелец и/или группа другие, то выполняем:
Запускаем Pervasive.SQL
Если требуется, открываем пользователям доступ к ресурсу [BPRO] на Linux-сервере и перезапускаем Samba.
Рабочие станции
Если новый Linux-сервер, конкретно Samba, имеет такое же NETBIOS-имя, что и старый Windows-сервер (мой случай), то делать что либо на рабочих станциях не потребуется. Не важно, как был подключен сетевой диск [BPRO] (именно он нужен для работы системы ИС-ПРО) - в сценарии или средствами Windows. Если сетевое имя сервера и имя сетевого ресурса не изменились, то при загрузке рабочая станция подключит диск, а ИС-ПРО будет продолжать работать. Пользователи даже не узнают, что на сервере сменилась операционная система. Каких либо проблем с аппаратным ключом защиты, установленном на одной из рабочих станций, так же не замечено.
Если же Linux-сервер имеет другое имя, то, возможно, на рабочих станциях придется переустановить клиент Pervasive.SQL (хотя мне не пришлось). Клиентов ИС-ПРО переустанавливать не надо, лишь бы они запускались с подключенного сетевого диска.
http://volgograd.lug.ru/wiki/TarasAblamsky/PervasiveSQL?v=bt0
Сервер установлен и настроен. Надо ставить клиентскую часть.
При отсутствии полноценной клиентской части ИС-ПРО 4 под Linux придется пойти на всякие ухищрения. Нужно лишь выбрать, какое из них приведет к желаемому результату.
Wine
Запустить Windows-клиента ИС-ПРО 4 из-под wine я пытался, но безуспешно. Виной тому используемые в системе ИС-ПРО драйверы VXD/SYS.
Кстати, такая же проблема и с сетевыми версиями Справочных правовых систем "Консультант Плюс", хотя локальная демонстрационная база "Законодательства Самарской области" запускается и довольно сносно работает.
DOS
При установке клиента ИС-ПРО 4 под Windows устанавливается и клиент под DOS. Внешне и функционально клиенты ИС-ПРО 4 под Windows и DOS практически не отдичаются. Значит DOS-клиента и будем ставить.
Для запуска DOS-приложений под Linux мне известны два средства DosEmu и DosBox.
----------
Практика показала, что "напильник в шкаф не попал", блин... Проблема с клиентом Pervasive под DOS. Нужно каким-то хитрым образом поднять Winsock, иначе Pervasive отказывается устанавливать соединение. Поэтому DosBox отпадает, а как это сделать в DosEmu в руководстве описано очень скудно, что делать при возникновении кое-каких ошибок вообще ничего не написано. Так что я пока прекращаю эксперименты с клиентом ИС-Про.
Если кто знает, как поднять Winsock и/или заставить работать клиента Pervasive в DosEmu, напишите мне. Буду очень признателен.