пʼятниця, 9 січня 2009 р.

OpenCMS: встановлення

Загорілося дике бажання допиляти/доробити власну сторінку, яка наразі в настільки сирому вигляді, що навіть посилання давати соромно.
Одразу ж спало на гадку використати одну з існуючих CMS (content management system) , для полегшення власного ж життя (чисто теоретично;) ). Тому не довго думаючи, та враховуючи своє "бе" та "фу", які нічим не обгрунтовуються, окрім "хочу так і тільки так", було висунуто наступні вимоги до CMS:
  1. База даних PostgreSQL
  2. Мова - Java
Тривалий пошук у Wikipedia одразу ж запропонував OpenCMS як єдиний варіант. Тому на ньому і зупинився. Здавалося б, що складного - постав і користуйся. Тим паче, що для роботи потрібен лише TomCat, який запускає власний порт для вебу. Однак не все так просто - скопійована згідно правил система не хотіла завантажуватися і видавала помилку, про відсутність доступу до ресурсів. А якщо точніше, то про помилку запуску демона (якщо я правильно зрозумів з назви):

9 січ 2009 13:18:26 org.apache.catalina.core.StandardContext start SEVERE: Error listenerStart 9 січ 2009 13:18:26 org.apache.catalina.core.StandardContext start SEVERE: Context [/opencms] startup failed due to previous errors

Аналіз логів привів до ще однієї загадки:

9 січ 2009 12:12:43 org.apache.catalina.startup.TldConfig tldScanJar
SEVERE: Exception processing TLD META-INF/c-1_0-rt.tld in JAR at resource path /var/lib/tomcat5.5/webapps/opencms/WEB-INF/lib/standard-1.1.2.jar in context /opencms
java.security.AccessControlException: access denied (java.io.FilePermission /usr/share/java/jsp-api-2.0.jar read)
at java.security.AccessControlContext.checkPermission(AccessControlContext.java:342)
at java.security.AccessController.checkPermission(AccessController.java:553)
at java.lang.SecurityManager.checkPermission(SecurityManager.java:549)
at java.lang.SecurityManager.checkRead(SecurityManager.java:888)
at java.util.zip.ZipFile.(ZipFile.java:126)
at java.util.jar.JarFile.(JarFile.java:150)
at java.util.jar.JarFile.(JarFile.java:87)
at sun.net.www.protocol.jar.URLJarFile.(URLJarFile.java:90)
at sun.net.www.protocol.jar.URLJarFile.getJarFile(URLJarFile.java:66)
at sun.net.www.protocol.jar.JarFileFactory.get(JarFileFactory.java:71)
at sun.net.www.protocol.jar.JarURLConnection.connect(JarURLConnection.java:122)
at sun.net.www.protocol.jar.JarURLConnection.getInputStream(JarURLConnection.java:150)
at org.apache.xerces.impl.XMLEntityManager.setupCurrentEntity(Unknown Source)
at org.apache.xerces.impl.XMLEntityManager.startEntity(Unknown Source)
at org.apache.xerces.impl.XMLEntityManager.startDTDEntity(Unknown Source)
at org.apache.xerces.impl.XMLDTDScannerImpl.setInputSource(Unknown Source)
at org.apache.xerces.impl.XMLDocumentScannerImpl$DTDDispatcher.dispatch(Unknown Source)
at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl.scanDocument(Unknown Source)
at org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source)
at org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source)
at org.apache.xerces.parsers.XMLParser.parse(Unknown Source)
at org.apache.xerces.parsers.AbstractSAXParser.parse(Unknown Source)
at org.apache.xerces.jaxp.SAXParserImpl$JAXPSAXParser.parse(Unknown Source)
at org.apache.tomcat.util.digester.Digester.parse(Digester.java:1562)
at org.apache.catalina.startup.TldConfig.tldScanStream(TldConfig.java:514)
at org.apache.catalina.startup.TldConfig.tldScanJar(TldConfig.java:472)
at org.apache.catalina.startup.TldConfig.execute(TldConfig.java:307)
at org.apache.catalina.core.StandardContext.processTlds(StandardContext.java:4307)
at org.apache.catalina.core.StandardContext.start(StandardContext.java:4144)
at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:760)
at org.apache.catalina.core.ContainerBase.access$0(ContainerBase.java:744)
at org.apache.catalina.core.ContainerBase$PrivilegedAddChild.run(ContainerBase.java:144)
at java.security.AccessController.doPrivileged(Native Method)
at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:738)
at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:544)
at org.apache.catalina.startup.HostConfig.deployWAR(HostConfig.java:831)
at org.apache.catalina.startup.HostConfig.deployWARs(HostConfig.java:720)
at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:490)
at org.apache.catalina.startup.HostConfig.check(HostConfig.java:1217)
at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:293)
at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:120)
at org.apache.catalina.core.ContainerBase.backgroundProcess(ContainerBase.java:1306)
at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.processChildren(ContainerBase.java:1570)
at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.processChildren(ContainerBase.java:1579)
at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.run(ContainerBase.java:1559)
at java.lang.Thread.run(Thread.java:636)


Чергова перевірка прав доступу до файлів та правильності шляхів поставила в глухий кут. Однак на російськомовному форумі в останньому записі було знайдено рішення проблеми:
слід змінити політику доступу до ресурсів, внісши до файлу /etc/tomcat5.5/50user.policy наступний запис:

grant codeBase "file:${catalina.home}/webapps/opencms/-" {
permission java.security.AllPermission;
};


Не знаю наразі, наскільки це правильно з точки зору безпеки, але наразі працює. Буду пробувати колупати далі, однак скидається на те, що це не єдиний варіант вирішення проблеми.

Немає коментарів: