OpenPLM — open source решение для управления жизненным циклом изделий.
Прошу прощения что давно не писал на сайт. Все таки Свободный Инженерный софт это хобби и материала для полной статьи не хватало, там попробуешь ,сям потестишь.. то работает ,то не работает. Раньше мы с коллегой вели сайт src.lgg.ru потом вот переехали потеряли по дороге кучу статей, среди них была статья про установку openPLM и работу в нем.
За эти 2? года все поменялось, проект openPLM закрылся, точнее разработчик больше не комитит в svn и занимается доработкой и сопровождением того что есть на заказ. Мы вот уже все выпустились и теперь не получается писать статьи забивая на пары и в перерывах по вечерам.
Ну да по фигу, в общем проект openPLM — уникален среди open source софта, крупные CAD производители пишут свои собственные интегрирующие системы. Сначала это распространялось только на крупных игроков, вроде Siemens NX и CATIA. Но теперь уже и средние CAD обладают инструментами для электронного документооборота и управления жизненным циклом изделия. Среди opensource такого нет, а папками или ProjectManager -ами которые используют программисты, не совсем удобно пользоваться.
Table of Contents
Ещё одно приключение.
Описание базовой установки openPLM
Скрипт представлен полностью в конце раздела, вскоре я его обновлю, а так все же советую посмотреть на действия после установки.
Скрипт выполняется суперпользователем.
Виртуалка
Итак на сайте openplm.org хоть и есть образ виртуальной машины (необходима регистрация), доступа по ssh к нему нет, да и для разработки он не подходит.
Берем ставим Debian 7 Wheezy на виртуальную машину,без графики это понятно. Для тех кому не ясен этот момент, Вам необходимо поставить Linux минимальной конфигурации , без Xserver(графики), если делать все в продвинутом режиме и с помощью минимального iso все получится(возможно автор криворук и можно сделать с помощью любого iso Debian). Настраиваем сетевой мост ,чтобы была возможность подключится к машине из вне.
Также думаю вполне возможна установка на 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
Установка 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 дня), напишу вторую статью с кучей скриншотов. И рассказом о плагинах.