OpenPLM — open source решение для управления жизненным циклом изделий.

AssemblyTestwork_openPLM.png

Прошу прощения что давно не писал на сайт. Все таки Свободный Инженерный софт это хобби и материала для полной статьи не хватало, там попробуешь ,сям потестишь.. то работает ,то не работает. Раньше мы с коллегой вели сайт src.lgg.ru потом вот переехали потеряли по дороге кучу статей, среди них была статья про установку openPLM и работу в нем.

За эти 2? года все поменялось, проект openPLM закрылся, точнее разработчик больше не комитит в svn и занимается доработкой и сопровождением того что есть на заказ. Мы вот уже все выпустились и теперь не получается писать статьи забивая на пары и в перерывах по вечерам.

Ну да по фигу, в общем проект openPLM — уникален среди open source софта, крупные CAD производители пишут свои собственные интегрирующие системы. Сначала это распространялось только на крупных игроков, вроде Siemens NX и CATIA. Но теперь уже и средние CAD обладают инструментами для электронного документооборота и управления жизненным циклом изделия. Среди opensource такого нет, а папками или ProjectManager -ами которые используют программисты, не совсем удобно пользоваться.

Ещё одно приключение.

Описание базовой установки openPLM

Скрипт представлен полностью в конце раздела, вскоре я его обновлю, а так все же советую посмотреть на действия после установки.

Скрипт выполняется суперпользователем.

Официальная документация процесса установки

Виртуалка

Итак на сайте openplm.org хоть и есть образ виртуальной машины (необходима регистрация), доступа по ssh к нему нет, да и для разработки он не подходит.

Берем ставим Debian 7 Wheezy на виртуальную машину,без графики это понятно. Для тех кому не ясен этот момент, Вам необходимо поставить Linux минимальной конфигурации , без Xserver(графики), если делать все в продвинутом режиме и с помощью минимального iso все получится(возможно автор криворук и можно сделать с помощью любого iso Debian). Настраиваем сетевой мост ,чтобы была возможность подключится к машине из вне.

openplm_virtualbox_network.png

Также думаю вполне возможна установка на Ubuntu 12.04 , даже в случае PPA с ней будет проще. Я же использовал Debian потому как и у автора виртуалка была собрана на нем.

Необходимые пакеты.

Основные не критичные к версии приложения ставятся из репозитория. Все что рассчитано на конкретную версию пакетов , устанавливается с помощью pip

apt-get install swig build-essential pkg-config gettext apache2 \
    libapache2-mod-wsgi python-pip python-dev python-imaging \
    python-kjbuckets python-pypdf ipython graphviz graphviz-dev \
    python-pygraphviz python-xapian rabbitmq-server postgresql libpq-dev \
    python-tz python-pisa libgsf-bin imagemagick python-pisa python-lxml

pip install odfpy docutils celery django-celery 'django==1.5.2' 'south==0.7.6' \
    psycopg2  'django-haystack<2' librabbitmq markdown lepl

apt-get install poppler-utils html2text odt2txt antiword catdoc
pip install openxmllib

Скачивание кода

Код скачивается последней версии из Subvresion , до этого скрипт работал с архивом версии 1,2 ,но там не было document3D и много чего ещё. Git представленный в скрипте, не обновлялся 3 года ,так что я предположу что это 1,2 версия. И надеюсь автор оригинального openPLM разрешит мне перенести его код на GitHub.

apt-get install subversion
mkdir /var/django
cd /var/django

# Нужен git-core
# git clone https://github.com/esimorre/openplm.git openPLM
# cd /var/django/openPLM
# mv -f ./openPLM/* .
# rmdir ./openPLM

# wget -O openplm-1.2.tar.gz http://wiki.openplm.org/trac/downloads/7
# tar xzfv openplm-1.2.tar.gz -C /var/
# tar xzfv openPLM-1.2.tar.gz -C /var/
# rm -v openplm-1.2.tar.gz
# rm -v openPLM-1.2.tar.gz
#mv /var/openplm /var/django

svn co http://svn.openplm.org/svn/openPLM/
cd /var/django/openPLM    
rm -rf branches/ tags/
mv -f trunk/openPLM/* .
rm -rf trunk

Настройка базы данных

Была проблема к доступу к консоли Postgres из скрипта, сначала меняются настройки и с полученным доступом, настраивается БД, затем настройки возвращаются к своему значению по умолчанию.

PG_HBA=`find /etc -name pg_hba.conf`
sed -in "/local   all/s/peer/trust/g" $PG_HBA
/etc/init.d/postgresql reload

psql -U postgres -c "CREATE DATABASE openplm;"
psql -U postgres -c "CREATE ROLE django WITH PASSWORD '$PLMPASS' LOGIN;"

#===after creation database
sed -in "/local   all/s/trust/peer/g" $PG_HBA
/etc/init.d/postgresql reload

Когда у Вас в первый раз запустится syncdb, Вас попросят ввести суперпользователя (ну его надо вводить, хотя можно и потом создать ,но лучше сразу). Отличие компании от суперпользователя я пока не понял поэтому её не создавал.

Подключение прочих сервисов

Тут вроде без особых проблем, в любом случае основные проблемы которые у меня возникали , отслеживались через логи /var/log/celeryd/w1.log

Проблемы после установки.

Страшная Админка

Ну первое это конечно админка к которой не подгрузились фоновые изображения

rm -f /var/django/openPLM/media/admin
ln -sf `python -c 'import django; print django.__path__[0]'`/contrib/admin/media /var/django/openPLM/media/admin
cd /var/django/openPLM
python manage.py collectstatic

Не обновляется поисковый индекс

Следующая проблема, индекса который не обновляется автоматически при создании/удалении объектов решить в коде пока не удалось поэтому в лоб запускаем каждые две минуты скрипт обновления индекса. Под root

crontab -e
*/2 * * * * python /var/django/openPLM/manage.py rebuild_index --noinput; chown www-data:www-data -R /var/openPLM/xapian_index/;

Вы случайно положили openPLM и теперь CorruptDatabase

У меня это произошло на тестовой виртуалке, комп завис намертво при передаче гигантского файла в виртуалку.. я с дуру все вырубил в результате повредилась поисковая база xapian и начала вставлять палки в колеса

Решаем с топором.

cd /var/openPLM/xapian/
rm *
cd /var/django/openPLM/
python manage.py rebuild_index

Скрипт базовой установки полностью

#!/bin/bash

ROOT_UID=0 # Only user with $UID 0 - root.  E_NOTROOT=67

SUCCESS="\\033[1;32m"
FAILURE="\\033[1;31m"
NORMAL="\\033[0;39m"

MESSAGE="\\x1b[01;33m"

if [ "$UID" -ne "$ROOT_UID" ]
then
  echo "Need superuser rights."
  exit $E_NOTROOT
fi

if [ ! -d /var/django/openPLM ];
then
# Install pre req ================================================
    echo -e "$MESSAGE Install Prereq...$NORMAL"

    apt-get install swig build-essential pkg-config gettext apache2 \
        libapache2-mod-wsgi python-pip python-dev python-imaging \
        python-kjbuckets python-pypdf ipython graphviz graphviz-dev \
        python-pygraphviz python-xapian rabbitmq-server postgresql libpq-dev \
        python-tz python-pisa libgsf-bin imagemagick python-pisa python-lxml

    pip install odfpy docutils celery django-celery 'django==1.5.2' 'south==0.7.6' \
        psycopg2  'django-haystack<2' librabbitmq markdown lepl

    apt-get install poppler-utils html2text odt2txt antiword catdoc
    pip install openxmllib

    # apt-get install swig build-essential pkg-config gettext apache2 \
    #     libapache2-mod-wsgi python-pip python-dev python-imaging \
    #     python-kjbuckets python-pypdf ipython graphviz graphviz-dev \
    #     python-pygraphviz python-xapian rabbitmq-server python-django \
    #     python-docutils python-django-celery python-django-south python-pisa \
    #     postgresql python-psycopg2 libgsf-bin poppler-utils html2text odt2txt \
    #     antiword catdoc


# Download and install openplm ==================================================
    echo -e "$MESSAGE Download and Install OpenPLM...$NORMAL"
    apt-get install subversion
    mkdir /var/django
    cd /var/django

    # Нужен git-core
    # git clone https://github.com/esimorre/openplm.git openPLM
    # cd /var/django/openPLM
    # mv -f ./openPLM/* .
    # rmdir ./openPLM

    # wget -O openplm-1.2.tar.gz http://wiki.openplm.org/trac/downloads/7
    # tar xzfv openplm-1.2.tar.gz -C /var/
    # tar xzfv openPLM-1.2.tar.gz -C /var/
    # rm -v openplm-1.2.tar.gz
    # rm -v openPLM-1.2.tar.gz
    #mv /var/openplm /var/django

    svn co http://svn.openplm.org/svn/openPLM/
    cd /var/django/openPLM    
    rm -rf branches/ tags/
    mv -f trunk/openPLM/* .
    rm -rf trunk

# Change settings file =================================================
    echo -e "$MESSAGE Change settings file...$NORMAL"
    sed -in 's#\(/var/django/\)openPLM/trunk/#\1#' settings.py apache/*.wsgi etc/default/celeryd
else
    echo -e "$MESSAGE OpenPLM files already installed $NORMAL"
fi



echo -e "$MESSAGE Tuning Database...$NORMAL"

mkdir /var/postgres
chown postgres:postgres /var/postgres


#Input database pass =============================================================

echo -n "Please enter database PostgreSQL pass: "
read PLMPASS                    # !!! Add default pass value
echo $PLMPASS  


echo "$LANG"
locale-gen $LANG


# su postgres -c 
#BASEPATH=`find / -name initdb`
# .$BASEPATH --encoding=UTF-8 --locale=ru_RU.UTF-8 --pgdata=/var/postgres/


#Вот только после этого и перезагрузки вервиса ,оно заработало.
# Database administrative login by Unix domain socket
#local   all             postgres                                trust

# TYPE  DATABASE        USER            ADDRESS                 METHOD
# "local" is for Unix domain socket connections only
#local   all             all                                     trust



#  !!!
#  /etc/postgresql/9.1/main/pg_hba.conf
## "local" is for Unix domain socket connections only
#local   all             all                                     peer
# Сменить на
## "local" is for Unix domain socket connections only
#local   all             all                                     trust
#

#su -l postgres -c "$BASEPATH --encoding=UTF-8 --locale=$LANG --pgdata=/var/postgres/; \postgres -D /var/postgres &"


# Get access postgres in shell script
PG_HBA=`find /etc -name pg_hba.conf`
sed -in "/local   all/s/peer/trust/g" $PG_HBA
/etc/init.d/postgresql reload


psql -U postgres -c "CREATE DATABASE openplm;"
psql -U postgres -c "CREATE ROLE django WITH PASSWORD '$PLMPASS' LOGIN;"


#===after creation database
sed -in "/local   all/s/trust/peer/g" $PG_HBA
/etc/init.d/postgresql reload

# Secretkey change?
cd /var/django/openPLM/
python bin/change_secret_key.py

echo -e "$MESSAGE Change openPLM database settings$NORMAL"
sed -in "s/MyPassword/$PLMPASS/g" settings.py

echo -e "$MESSAGE Sync base$NORMAL"
python manage.py syncdb --all
python manage.py migrate --all --fake
python manage.py loaddada extra_lifecycles

echo -e "$MESSAGE Create directories for files$NORMAL"
mkdir /var/openPLM/
chown www-data:www-data /var/openPLM/
chown www-data:www-data /var/django/openPLM/media/thumbnails
chown www-data:www-data /var/django/openPLM/media/public/thumbnails

# echo "Compile messages"
# make
python manage.py compilemessages

echo -e "$MESSAGE Configure search engine(xapian) $NORMAL"
cd /var/django/openPLM/
./manage.py rebuild_index
chown www-data:www-data -R /var/openPLM/xapian_index/

echo -e "$MESSAGE Configure Celery $NORMAL"
echo -n "Please enter password for Celeryd: "
read CELERYPASS                 # !!! Add default pass value
echo $CELERYPASS
service rabbitmq-server start
rabbitmqctl add_user openplm $CELERYPASS
rabbitmqctl add_vhost openplm
rabbitmqctl set_permissions -p openplm openplm ".*" ".*" ".*"

sed -in "/BROKER_PASSWORD/s/secret/$CELERYPASS/g" settings.py
cp /var/django/openPLM/etc/init.d/celeryd /etc/init.d/celeryd
cp /var/django/openPLM/etc/default/celeryd /etc/default/celeryd
chmod +x /etc/init.d/celeryd
mkdir /var/{log,run}/celery
chown www-data:www-data /var/{log,run}/celery
/etc/init.d/celeryd start

echo -e "$MESSAGE Check modules $NORMAL"
cd /var/django/openPLM/
./bin/check_modules.py

echo -e "$MESSAGE Tunninig Apache $NORMAL"
#touch /etc/apache2/sites-available/openplm
echo '
WSGIScriptAlias / /var/django/openPLM/apache/django.wsgi
# required to enable webdav access 
WSGIPassAuthorization On 


   <Location ~ "/media/(?!public)">
        WSGIAccessScript /var/django/openPLM/apache/access_restricted.wsgi
    </Location>

    Alias /static /var/django/openPLM/static
    <Directory /var/django/openPLM/static>
        Order deny,allow
        Allow from all
    </Directory>

Alias /media /var/django/openPLM/media
<Directory /var/django/openPLM/media>
    Order deny,allow
    Allow from all
</Directory>
'>>/etc/apache2/apache2.conf
#/etc/apache2/sites-available/openplm.conf
#a2ensite openplm
service apache2 restart



# Ugly admin
rm -f /var/django/openPLM/media/admin
ln -sf `python -c 'import django; print django.__path__[0]'`/contrib/admin/media /var/django/openPLM/media/admin
cd /var/django/openPLM
python manage.py collectstatic

# Some Bug
chown -R www-data:www-data /var/django/openPLM/media

#echo '*/2 * * * * python /var/django/openPLM/manage.py rebuild_index --noinput; chown www-data:www-data -R /var/openPLM/xapian_index/;'>>/etc/crontab

Установка Document3D

Для корректной работы необходим povray и pythonocc

Официальная документация по подключению Document3D

Установка PovRay

Пакет взят из PPA

wget https://launchpad.net/ubuntu/+archive/primary/+files/povray_3.6.1-12_i386.deb
apt-get install libjpeg62 
dpkg -i povray_3.6.1-12_i386.deb

Сборка и установка PythonOCC

К сожалению PythonOCC из PPA CAE-Team для Debian 7 не подошел. Но как заглушка он работает, а значит можно использовать Document3D и создавать базу а вот уже с генерацией изображений проблемы да.(честно говоря там до сих пор проблемы)

Скрипт для сборки написан , на основании , этой статьи. http://pythonocc.wordpress.com/2013/03/04/installing-on-ubuntu-12-04/

SUCCESS="\\033[1;32m"
FAILURE="\\033[1;31m"
NORMAL="\\033[0;39m"

MESSAGE="\\x1b[01;33m"


echo -e "$MESSAGE Download and Install PythonOCC prereq...$NORMAL"
apt-get install git build-essential python-dev libxmu-dev libxi-dev tcl-dev tk tk-dev swig cmake ftgl-dev libtbb2 libtbb-dev python-fontforge

cd $HOME
mkdir gitroot && cd gitroot
git clone git://github.com/tpaviot/oce.git
git clone git://github.com/tpaviot/pythonocc.git

cd $HOME/gitroot/oce
git checkout OCE-0.11
cd $HOME/gitroot/pythonocc
git checkout 0.6-alpha

echo -e "$MESSAGE Build OCE 0.11...$NORMAL"
cd $HOME/gitroot
mkdir oceBuild && cd oceBuild


cmake -DCMAKE_INSTALL_PREFIX:PATH=/usr/  -DOCE_INSTALL_PREFIX:PATH=/usr/ -DOCE_WITH_FREEIMAGE=OFF  -DOCE_WITH_GL2PS=OFF  -DOCE_VISUALISATION=ON  -DOCE_DATAEXCHANGE=ON  -DOCE_MULTITHREAD_LIBRARY=TBB -DCMAKE_BUILD_TYPE=Release  -DOCE_TESTING:BOOL=ON  ../oce

make

echo -e "$MESSAGE Install OCE 0.11...$NORMAL"
make install

echo -e "$MESSAGE Test OCE...$NORMAL"

cd $HOME/gitroot/oceBuild
make test

echo -e "$MESSAGE Build GEOM...$NORMAL"
cd $HOME/gitroot/pythonocc/src/contrib/
mkdir geomBuild && cd geomBuild
cmake  -DOCE_INCLUDE_PATH=/usr/include/oce -DOCE_LIB_PATH=/usr/lib  ../geom-6.3.1.8
make

echo -e "$MESSAGE Install GEOM...$NORMAL"
make install

echo -e "$MESSAGE Build PythonOCC...$NORMAL"
cd $HOME/gitroot
mkdir pythonoccBuild && cd pythonoccBuild
cmake  -DpythonOCC_WRAP_GEOM=ON -DOCE_INCLUDE_PATH=/usr/include/oce  -DOCE_LIB_PATH=/usr/lib  -DpythonOCC_INSTALL_DIRECTORY=/usr/local/lib/python2.7/dist-packages/OCC  ../pythonocc
make
echo -e "$MESSAGE Install PythonOCC...$NORMAL"
make install

Подключение и обновление openPLM

/var/django/openPLM/settings.py раскомментировать ‘openPLM.apps.document3D’

mkdir /var/django/openPLM/media/3D/
chown www-data:www-data /var/django/openPLM/media/3D/

В /etc/apache2/apache2.conf вставить

# WSGIScriptAlias ...
<Location /media/3D>
    WSGIAccessScript /var/django/openPLM/apache/access.wsgi
</Location>
# alias media/

Выполнить

cd /var/django/openPLM
python manage.py collectstatic
python manage.py migrate document3D && python manage.py update_index document3D

Итого

Многое ещё не описано, например, как в этом работать и зачем когда есть папки, папочки директории каталоги)

Ну пока можно посмотреть видео на официальном сайте, а как только я завершу свои тесты(2-4 дня), напишу вторую статью с кучей скриншотов. И рассказом о плагинах.