Установка Slackware12.1 в качестве сервера под 7 и 8 1С

Установка Slackware12.1 в качестве сервера под 7 и 8 1С

есть базы на 7-ке и 8.1

нам необходимо перевести их на 1 (один) бесплатный SQL сервер на бесплатной операционной системе

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

итак, берем свежеустановленную слаку с поднятой сетью - самое первое с чего начинаем - переводим локаль на ru_RU.UTF-8

инструкцию по переводу локали наглы образом тырим с интернета - вот ссылка

http://ru.wikibooks.org/wiki/Русификация_Slackware_12

а теперь в сжатом виде что же собственно делалось

для начала /etc/lilo.conf правим или добавляем в самом начале такого вот вида строчку

append=" vt.default_utf8=1"

набираем lilo

скачиваем http://mlclm.narod.ru/ru-utf.map.gz и ложим в /usr/share/kbd/keymaps/i386/qwerty

находим на http://www.linuxpackages.net подходящую сборку mc с поддержкой utf-8 и ложим в место которое легко найдем с консоли

правим /etc/rc.d/rc.font (у меня это rc.font.new - пришлось переименовать в rc.font) (имхо это делать необязательо но так может оказаться приятней)

#!/bin/sh
#
# This selects your default screen font from among the ones in
# /usr/share/kbd/consolefonts.
#
setfont -v
unicode_start LatArCyrHeb-16
for i in 1 2 3 4 5 6;do
echo -ne "\033%G" >/dev/tty$i
done

правим /etc/rc.d/rc.keymap

#!/bin/sh
# Load the keyboard map. More maps are in /usr/share/kbd/keymaps.
#if [ -x /usr/bin/loadkeys ]; then
# /usr/bin/loadkeys us.map
#fi
if [ -x /usr/bin/loadkeys ]; then
/usr/bin/loadkeys /usr/share/kbd/keymaps/i386/qwerty/ru-utf.map.gz
fi

правим /etc/profile.d/lang.sh

default locale - в комментариях прописано что за нее отвечает - делаем так

export LANG=ru_RU.UTF-8

обращаем внимание на следующее место

# One side effect of the newer locales is that the sort order
# is no longer according to ASCII values, so the sort order will
# change in many places. Since this isn't usually expected and
# can break scripts, we'll stick with traditional ASCII sorting.
# If you'd prefer the sort algorithm that goes with your $LANG
# setting, comment this out.
#export LC_COLLATE=C

export LC_COLLATE=C я закомментировал от греха подальше

аналогично правим правим /etc/profile.d/lang.сsh

# en_US is the Slackware default locale:
#export LANG=en_US
export LANG=ru_RU.UTF-8

# 'C' is the old Slackware (and UNIX) default, which is 127-bit
# ASCII with a charmap setting of ANSI_X3.4-1968. These days,
# it's better to use en_US or another modern $LANG setting to
# support extended character sets.
#export LANG=C



Не забудьте убедиться в том, что на файлы rc.font, rc.keymap, lang.sh, lang.csh установлен атрибут "executable"

стараемся не забыть

перекрестившись набираем reboot

загрузившись запускаем mc, громко и мерзко материмся и ставим заранее заготовленный mc с поддержкой utf-8

далее ставим постгрес - ВНИМАНИЕ на сайте этерсофта почему то выложены в открытом доступе сборки постгресса без самого вкусного - то есть без поддержки Selta, либо заказываем этерсофту новую сборку либо пользуемся тем что есть и гарантированно работает

установка не отличается изысками и шаманством - шаманство начнется позже

скидываем все пакеты в одно место и набираем installpkg postgre*.tgz

а вот теперь самое интересное

проверяем /etc/passwd и /etc/group на предмет наличия пользователя postgres.postgres если (что скорее всего) их там нет то делаем следующее

groupadd -g 102 -o postgres (не считайте меня мудаком - знаете способ лучше подскажите) - параметр 102 надо посмотреть в /etc/group ближайший свободный номер после 100

далее useradd -g postgres postgres

потом меняем домашний каталог пользователю postgres на /var/lib/pgsql (я менял ручками в /etc/passwd)

далее следующие магические действия

chown -R postgres.postgres /var/lib/pgsql

chown -R postgres.postgres /usr/lib/pgsql

далее пытаемся стартануть постгрес /etc/rc.d/init.d/postgres start

БОЕЦ ПОМНИ! после каждой неудачной попытки запуска, перед следующей попыткой очищай содержимое /var/lib/pgsql/

если все будет в порядке то он проинициализирует базу и стартанет, если не в порядке напишет FAILED и может описать причину - если причина описана то правим /etc/rc.d/init.d/postgres до тех пор пока не запустится, следует обращать особое внимание на директивы $SU изначально они написаны некорректно, необходимо привести к виду $SU postgres -c "$PGENGINE/postmaster -p '$PGPORT' -D '$PGDATA' ${PGOPTS} &" >> "$PGLOG" 2>&1 < /dev/null то есть вот на этом промежутке $SU postgres -c нужно убрать лишний мусор, а может быть и добавить что нибудь типа postgres вторая возможная ошибка стартовым скриптом не показывается смотрим ее в /var/lib/pgsql/pgstartup.log возможны маты на параметр ядра shmmax с помощью sysctl -a | grep shmmax смотрим на текущее значение подсмотрим что же нам говорит лог и выставляем значение на немного большее с помощью sysctl -w kernel.shmmax=желаемое значение если после этого запустилось то в /etc/sysctl.conf добавляем что то вроде следующего #for postgresql

kernel.shmmax = желаемое значение

кстати у меня /etc/sysctl.conf не было - создал, права выдал по аналогии с соседними файлами


была еще такая загадочная ошибка
touch: невозможно выполнить touch для `/var/lock/subsys/postgresql': Нет такого файла или каталога

при этом процессы таки запустились, создал под рутом каталог /var/lock/subsys/ прибил процесы kill-ом и вроде запустилось


а вот если не запустилось то не знаю - у меня все работало

после запуска проверяем с помощью ps aux | grep postgre и с помощью netstat -aptln что постгре висит в памяти и слушает порты

затем делаем очередное магическое действо: psql -U postgres -d template1 -c "ALTER USER postgres PASSWORD 'желаемый пароль'"

это мы поменяли пароль самому главному пользователю постгреса

возможно что уматерится - тогда правим файлик /var/lib/pgsql/data/pg_hba.conf

там в самом конце по поводу ограничения доступа - у меня рабочая конфигурация следующая

# IPv4 local connections:

#host all all 127.0.0.1/32 ident sameuser

host all all 0.0.0.0/0 md5

local all all trust

там можно щее и про IPv6 добавлять - но я его боюсь поэтому не трогал

перестартуем сервер /etc/rc.d/init.d/postrgesql stop

/etc/rc.d/init.d/postrgesql start

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

но все, postgre висит в памяти, слушает порты, проверяем на всякий случай действительно ли он работае - я для начала проверял с помощью PgadminIII потом сможет ли с ним работать 1С, сельтой инициализируем базу и загружаем туда какую нибудь мелкую базу 1С-ки, если все прошло на ура, то перегружаемся и перепроверяем, тихо радуемся, очень тихо радуемся, незаметно радуемся, ибо как нам еще сервер 1С ставить

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

ложим куда нибудь все пакетики (rpm) и ставим их

я ставил в такой последовательности

240 rpm -Uhv --nodeps 1C_Enterprise-common-8.1.11-67.i386.rpm

242 rpm -Uhv --nodeps 1C_Enterprise-common-nls-8.1.11-67.i386.rpm

243 rpm -Uhv --nodeps 1C_Enterprise-server-8.1.11-67.i386.rpm

244 rpm -Uhv --nodeps 1C_Enterprise-server-nls-8.1.11-67.i386.rpm

245 rpm -Uhv --nodeps 1C_Enterprise-ws-8.1.11-67.i386.rpm

246 rpm -Uhv --nodeps 1C_Enterprise-ws-nls-8.1.11-67.i386.rpm

247 rpm -Uhv --nodeps 1C_Enterprise-crs-8.1.11-67.i386.rpm

248 rpm -Uhv --nodeps 1C_Enterprise-crs-nls-8.1.11-67.i386.rpm

по аналогии с тем что делали после установки постгресса проверяем пользователя usr1cv81 и группу grp1cv81 (у меня создались сами)

проверяем наличие домашнего каталога пользователя /home/usr1cv81 если что создаем

далее следующие магические действия

269 chown -R usr1cv81.grp1cv81 /opt/1C/

276 chown -R usr1cv81.grp1cv81 /home/usr1cv81/

а теперь то что можно было сделать в любой момент - желательно сразу после установки - машина должна быть прекрасна видима по доменному имени, то есть ее ОБЯЗАТЕЛЬНО ПО ИМЕНИ ЗАДАННОМУ ПРИ УСТАНОВКЕ НАДО ПРОПИСАТЬ В ПРЯМУЮ И ОБРАТНЫЕ ЗОНЫ ДНС и также самой ей прописать днс-сервер (можно конечно обойтись и хостами но у меня днс был и я не заморачивался)

далее правим скрипты /etc/rc.d/init.d/srv1cv81 и /etc/rc.d/init.d/functions по аналогии с тем как правили скрипты для постгре, с парой отклонений:

в srv1cv81 я сделал следующее

if [ -x /sbin/runuser ]
then
#SU=runuser
SU=su
else
SU=su
fi

для удобства редактирования в начало скриптов я добавил #!/bin/sh - но это дело вкуса каждого

БОЕЦ ПОМНИ эту блядину - сервер 1С я не сумел заставить писать никаких логов, так что почему она не запускается это приходится догадываться интуитивно, кроме того то что скрипт сказал DONE еще не значит что все на ура - он сука может скромничать, так что проверять с помощью ps и netstat, рабочие процессы сервера 1С это ragent, rphost, rmngr - должны быть запущены от имени поьзователя 1с

добиваемся чтобы стартануло /etc/rc.d/init.d/srv1cv81 start, опускаем его с помощью /etc/rc.d/init.d/srv1cv81 stop

лезем в хоум usr1cv8 ищем файлики srvribrg.lst и 1CV8Reg.lst

вот мой рабочий файлег srvribrg.lst

{0,^
{e8aa8ab8-73fe-11dd-f39b-000c294cc65b,"Локальный кластер",1541,"slack12_1",0,0,0,0},^
{2,^
{56599594-7400-11dd-bf81-000c294cc65b,"aratest","aratest","PostgreSQL","slack12_1","aratest","postgres","FGlAkIfj01iqCmchlx9
{0,00010101000000,00010101000000,"","",""},0},^
{0903ff54-7401-11dd-bf81-000c294cc65b,"aratestdata","","PostgreSQL","slack12_1","aratestdata","postgres","FGlAkIfj01iqCmchlx
{0,00010101000000,00010101000000,"","",""},0}^
},^
{1,^
{e95c2d5e-73fe-11dd-f39b-000c294cc65b,"slack12_1",1,1,^
{7.4335138175937e-2,5.131495675409606e-2,2.299275719007102e-2,0,2.742423176991773e-5,14221,6.70332463864892e-3,0},1000}^
},^
{0},^
{1,^
{e95b7742-73fe-11dd-f39b-000c294cc65b,"Центральный сервер",1540,"slack12_1",1,^
{1,^
{1560,1591}^
},"","1WZyHGPavHXT8Aa+wxcl6A=="}^
}^
}

там где slack12_1 должно стоять ваше имя машины, возможно придется использовать полное доменное имя, у меня заработало именно так, естественно search localnet в resolv.conf у меня есть

стартуем посгтгре, стартуем сервер 1С, проверяем что они повисли в памяти и слушают порты

теперь проверяем работоспособность сервера 1С, я коннектился из винды (не бейте!) с помощью оснастки сервера 1С и пытался создать базу, с первого раза может не получиться но путем последовательного применения метода научного тыка все таки создается. БОЕЦ ПОМНИ прописывать сервер нужно именно так как он себя сам именует, то есть машина с которой пытаетесь сделать должна прекрасно резолвить в моем случае имя slack12_1

когда получается создаем базу из 8 1С под вайном, заливаем в нее данные, в идеале 8-ка и 7-ка должны работать параллельно - у меня заработали, осталось прописать в автозагрузку

я сделал так

root@k761c:~# ls /etc/rc.d/rc3.d/

K59srv1cv81@ K60postgresql@ S40postgresql@ S41srv1cv81@

root@k761c:~# ls /etc/rc.d/rc4.d/

K59srv1cv81@ K60postgresql@ S40postgresql@ S41srv1cv81@

в нумерации исходил из того что постгре должен загружаться раньше а выгружаться позже, не заню зачем но жопой чую - так лучше

ребутимся и проверяем чтобы все работало

за сим подготовительную часть считаем завершенной


далее необходимо отстроить самбу

для начала делаю файл /etc/rc.d/rc.samba исполняемым

потом в файле /etc/inetd.conf делаю вот так


#Samba Web Administration Tool:
swat stream tcp nowait.400 root /usr/sbin/swat swat


для экономии жизненного пространства файл /etc/rc.d/rc.inetd оставляю неисполняемым

затем sh /etc/rc.d/rc.inetd start

после чего коннекчусь через браузер http://k761c.localnet:901/

учитывая отсутствие познаний и нежелание читать километры манов включаю интуицию после чего рождается вот такой вот файлег /etc/samba/smb.conf

# Samba config file created using SWAT
# from 192.168.102.111 (192.168.102.111)
# Date: 2008/08/28 07:45:06


[global]
workgroup = K76
interfaces = eth0
security = SHARE
log file = /var/log/samba/samba.%m
max log size = 50
ldap ssl = no
printing = bsd
print command = lpr -r -P'%p' %s
lpq command = lpq -P'%p'
lprm command = lprm -P'%p' %j

[bases1c]
path = /bases1c
write list = admin
readonly = No
guest ok = Yes
available = Yes


с линукс машины монтирую шару как cifs с виндовой машины просто захожу, проверяю русские имена тремя различными способами - из mc создание-видение на подмонтированной шаре, из винды простой заход через сетевое окружение, и из крусадера - smb соединение, все проходит на ура, потом в каталоге с русским именем разворачиваю на dbf/cdx небольшую но все таки комплексную конфигурацию 1С 7.7 и захожу с двух клиентов - с линухи (1С запускаю из под вайна) и с винды, зашли, значит взаимных блокировок совсем страшных нет и даже не отработало ограничение на количество одновременно открытых файлов, окончательно конечно это можно увидеть только в работе, но! нахрена мне в работе по сети dbf/cdx 1C 7.7 ?? так что считаем что краш-тест пройден успешно

следующим этапом - поднятие иксов и развертывание вайна

поднятие иксов выполняется крайне просто - startx и вперед, переключаю машину в init 4 при старте, завожу пользователя и разрешаю ему автологон, в KDE у этого пользователя (под ним будут выполняться задания по автообмену 7-й 1С) отключаю все навороты чтобы не жрала ресурсы - оболочка начинает при этом сильно напоминать выньду 98 но нам на нее не любоваться

ставлю wine - ставится он на слаке очень проcто - installpkg *wine*.tgz
ставлю 7-ю 1С, на всякий случай 8-ю, ставлю из пакета вайна haspd, и пакет linux-cifs, также ставлю Selta@Etersoft

а вот тут есть очень тонкий и невнятный момент - у нас это заняло 3 дня чистого и незабвенного секса. БОЕЦ ПОМНИ! для работы с файловой частью 7-й 1С в разделенном режиме пакет от etersoft linux-cifs ОЧЕНЬ КРИТИЧЕН!, но этот пакет очень сильно привязан к ядру, поэтому выбирайте только те ядра\операционные системы под которые это стабильный пакет есть в готовом виде, конкретно нам на слаке 12.1 пришлось поменять ядро на ядро от слаки 12, иначе не работало монтирование самого на себя, а без этого монтирования не работал разделенный доступ локально запущенной и по сети 1С. А также примите мои соболезнования те несчастные которым придется втыкать этот пакет на самосборное ядро.

собственно на этом все основное и заканчивается. далее вылизывание настроек postgresql в соответствии с рекомендациями этерсофта у нас получился следующий конф-файл (все комментарии убраны)


listen_addresses = '*'
max_connections = 30
shared_buffers = 128MB
temp_buffers = 16MB
max_prepared_transactions = 5
work_mem = 64MB
maintenance_work_mem = 128MB
max_stack_depth = 3MB
max_fsm_pages = 153600
max_fsm_relations = 5000
fsync = off
full_page_writes = off
wal_buffers = 256kB
effective_cache_size = 70MB
default_statistics_target = 100
constraint_exclusion = on
redirect_stderr = on
log_directory = 'pg_log'
log_truncate_on_rotation = on
log_rotation_age = 1d
log_rotation_size = 0
client_min_messages = error
stats_command_string = on
stats_start_collector = on
stats_block_level = off
stats_row_level = on
stats_reset_on_server_start = off
autovacuum = on
autovacuum_naptime = 1min
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'
deadlock_timeout = 2s
max_locks_per_transaction = 250


естественно эта конфа неидеальна, но 1. полне работоспособна, 2. визуально возникло ощущение что значительно быстрее работает чем mssql хотя и не на всех операциях

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

далее подробно расписывать мне лениво привожу только следущее


root@k76_1c:~# ls /etc/rc.d/rc3.d/
K55srv1cv81@ K65linux-cifs@ K75etersafe@ K85nut@ S20nullmailer@ S30haspd@ S40postgresql@
K60postgresql@ K70haspd@ K80nullmailer@ S15nut@ S25etersafe@ S35linux-cifs@ S45srv1cv81@
root@k76_1c:~# ls /etc/rc.d/rc4.d/
K55srv1cv81@ K65linux-cifs@ K75etersafe@ K85nut@ S20nullmailer@ S30haspd@ S40postgresql@
K60postgresql@ K70haspd@ K80nullmailer@ S15nut@ S25etersafe@ S35linux-cifs@ S45srv1cv81@



root@k76_1c:~# cat /home/robot/.tasks/complexall/complexall
#!/bin/bash

RABKATALOG=~/.tasks/complexall

LOCKFILE=$RABKATALOG/lock.pid

FTPSERVER=192.168.0.254

REMOTECATALOG=/

FILENAMEVH=A010.zip

BASA1C=w:\\bases77\\complexall\\

BASA1CLIN=/mnt/sharecifs/bases77/complexall/

FILENAMEISH=${BASA1CLIN}Avtoobmen/A011.zip

NAMEFTP=

PASSWORDFTP=

IMYA1C=Robot

PASSWORD1C=

if [ -e $LOCKFILE ]; then
echo predidushaya zadacha ne zavershilas
exit
fi

echo $$ > $LOCKFILE

ncftpget -E -Z -v -u $NAMEFTP -p $PASSWORDFTP 192.168.0.254 ${BASA1CLIN}Avtoobmen/ $FILENAMEVH

wine ~/wine_c/Program\ Files/1Cv77/BIN/1cv7s.exe config /d$BASA1C /n$IMYA1C /p$PASSWORD1C /@${BASA1C}\\Avtoobmen\\complexall.txt

ncftpput -E -Z -v -u $NAMEFTP -p DE[jDst,e $FTPSERVER $REMOTECATALOG $FILENAMEISH

rm $LOCKFILE



root@k76_1c:~# cat /mnt/sharecifs/bases77/complexall/Avtoobmen/complexall.txt
[GENERAL]

Output = w:\\bases77\\complexall\\Avtoobmen\\complexall.log
Quit = Y
CheckAndRepair = N
UnloadData = N
SaveData = N
AutoExchange = Y

[CheckAndRepair]

;;Repair = N
;;PhysicalIntegrity = N
;;Reindex = N
;;LogicalIntegrity = N
;;RecalcSecondaries = N
;;RecalcTotals = N
;;Pack = N
;;SkipUnresolved = Y
;;CreateForUnresolved = N
;;Reconstruct = N

[UnloadData]

;;UnloadToFile = ""
;;IncludeUserDef = ""
;;Password = ""

[SaveData]

;;SaveToFile = ""
;;FileList = ""


[AutoExchange]

SharedMode=Y
;;ReceiveFrom=*
ReadFrom=*
WriteTo=*
;;SendTo=*



root@k76_1c:~# cat /home/robot/.kde/Autostart/automount
#!/bin/sh

sudo umount /mnt/sharecifs

sudo mount /mnt/sharecifs



root@k76_1c:~# cat /etc/fstab
/dev/sda1 swap swap defaults 0 0
/dev/sda2 / reiserfs defaults 1 1
#/dev/cdrom /mnt/cdrom auto noauto,owner,ro 0 0
/dev/fd0 /mnt/floppy auto noauto,owner 0 0
devpts /dev/pts devpts gid=5,mode=620 0 0
proc /proc proc defaults 0 0
tmpfs /dev/shm tmpfs defaults 0 0
//k761c/bases1c /mnt/sharecifs cifs noauto,noperm,guest



все естественно абсолютно несекьюрно, но я думаю что в одноранговой сети заморачиваться на секьюрность это гемор, поднимем LDAP задумаемся о секьюрности

далее от KDE надо отказываться стартовать просто x-сервер и приложения, соответственно использовать не несколько невнятный kalarm а нормальный cron

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

< Назад к списку новостей