FastNetMon

Friday, 12 November 2010

Что такое Linux capabilities?

А это есть очень охрененная штука: http://linux.die.net/man/7/capabilities

Как пример использования - бинд непривилегированного сервиса на порт ниже 1024го.

На OpenVZ mainstream, есть патчи от grsecurity

Вот обнаружил такую фишку на ядре 2.6.18-194.17.1.el5.028stab070.7:

find /proc/| grep grse
/proc/sys/fs/grsecurity
/proc/sys/fs/grsecurity/grsec_lock
/proc/sys/fs/grsecurity/tpe_restrict_all
/proc/sys/fs/grsecurity/tpe_gid
/proc/sys/fs/grsecurity/tpe

Вот такой вот частичный порт. Но обращаю внимание, что бОльшая часть фич Grsecurity не работает в OpenVZ по причине, что механизмы OpenVZ и Grsecurity часто перескаются.

Что же такое этот tpe?

Trusted path execution is another optional feature that can be used to prevent users from executing binaries that are not owned by the root user, or are world-writable. This is useful to prevent users from executing their own malicious binaries or accidentally executing world-writable system binaries that could have been modified by a malicious user.

Источник: http://wiki.openvz.org/Grsecurity

Breaking chroot()

Отлично знаю, что если в chroot попадает юзер с root привилегиями, то он может оттуда сбежать. Но никогда не понимал механизма, как это делается, вот отличная инструкция: http://www.bpfh.net/simes/computing/chroot-break.html

Проблема c10k

http://en.wikipedia.org/wiki/C10k_problem

Apache mod_ruid2 - suexec new generation или нет ?

Вот порекомендовали mod_ruid2 с такой вот заявкой приятных фич:
mod_ruid2 is a suexec module for apache 2.0, based on mod_ruid and mod_suid2

-it runs only on linux because afaik only linux has implemented posix 1003.1e capabilities

-it has better performance than mod_suid2 because it doesn`t need to kill httpd children after one request. it makes use of kernel capabilites and after receiving a new request suids again.

-there are some security issues, for instance if attacker successfully exploits the httpd process, he can set effective capabilities and setuid to root. i recommend to use some security patch in kernel (grsec), or something..

Интересный вариант, однако.

Из недостатков - подозрения, что это потенциально небезопасно. Из используемых технологий - Linux capabilities (да, да, как раз из-за них требуется Posix и Линукс). Из принципа работы - при отфорке процесса даем ему capabilities CAP_SETGID и CAP_SETGID (то есть, работая от обычного пользователя он получает возможность менять себе uid/gid, как пожелает) и если следующий запрос идет к другому сайту (точнее - сайту принадлежащему другому пользователю), с чистой совестью меняем uid / gid на него и продолжаем обработку.

Thursday, 11 November 2010

Apache MPM Prefork vs ITK

Вот тесты: http://blog.penumbra.be/2010/05/hosting-attack-mitigation-p1/

Раза в полтора ITK тормознее. Надо бы свои тесты провести.

А вот еще интересные тесты: http://workingdirectory.net/posts/2010/benchmarking-php/

Установка MaxMind php5-geoip на Debian

Ставим:
apt-get install -y

Перезапускаем Апача:
/etc/init.d/apache2 restart

Ради теста проверяем путь к базе данных IP:
php -r 'print geoip_db_filename(GEOIP_COUNTRY_EDITION); echo "\n";'
/usr/share/GeoIP/GeoIP.dat

Ради теста получаем страну, где расположен сайт компании FastVPS (ага, все верно, Германия):
php -r 'print geoip_country_code_by_name("85.10.205.196"); echo "\n";'
DE


Вот мануал по обновлению MaxMind базы: http://www.electrictoolbox.com/update-geoip-dat-debian-5/

Источник: http://pecl.php.net/package/geoip

Как запретить OOM киллеру мочить процессы кроме того, которые пытается выделить лишнего?

Вот такой вот опцией ядра, установив ее в единицу:
cat /proc/sys/vm/oom_kill_allocating_task

Подробнее:
/proc/sys/vm/oom_kill_allocating_task (since Linux 2.6.24)
This enables or disables killing the OOM-triggering task in out-of-
memory situations.

If this is set to zero, the OOM-killer will scan through the entire
tasklist and select a task based on heuristics to kill. This normally
selects a rogue memory-hogging task that frees up a large amount of
memory when killed.

If this is set to nonzero, the OOM-killer simply kills the task that
triggered the out-of-memory condition. This avoids a possibly
expensive tasklist scan.

If /proc/sys/vm/panic_on_oom is nonzero, it takes precedence over
whatever value is used in /proc/sys/vm/oom_kill_allocating_task.

The default value is 0.

Для sysctl.conf это будет строчка:
vm.oom_kill_allocating_task = 1

Установка Confluence WIki на Debian 5 Lenny

Что это: http://www.atlassian.com/software/confluence/

Вот официальная инструкция по установке: http://confluence.atlassian.com/display/DOC/Confluence+Installation+Guide

Ставить будем в режиме EAR/WAR + Tomcat. Для начала ставим Tomcat: http://phpsuxx.blogspot.com/2010/11/apache-tomcat-55-debian-5-lenny.html

Следом поставим MySQL http://phpsuxx.blogspot.com/2009/12/mysql-debian5-lenny.html и создадим в ней пользователя и базу confluence с неким паролем.

Обращаю внимание, что MySQL нужно переконфигурировать следующим образом (источник):
vi /etc/mysql/my.cnf

И в блок [mysqld] добавить строку:
default-character-set=utf8

И применить изменения:
/etc/init.d/mysql restart

После этого нужно затюнить Tomcat, иначе настройки безопасности не дадут confluence запуститься:
vi /etc/default/tomcat5.5

И в самом низу добавляем:
TOMCAT5_SECURITY=no

Если же забыть это сделать, то в логах получим такой вот ужас и неработающий confluence:
Nov 11 04:23:56 Debian-50-lenny-64-minimal jsvc.exec[24303]: Nov 11, 2010 4:23:56 AM org.apache.catalina.core.ApplicationContext log#012INFO: HTMLManager: start: Starting web application at '/confluence'
Nov 11 04:23:56 Debian-50-lenny-64-minimal jsvc.exec[24303]: Nov 11, 2010 4:23:56 AM org.apache.catalina.core.ApplicationContext log#012INFO: HTMLManager: start: Starting web application at '/confluence'
Nov 11 04:23:56 Debian-50-lenny-64-minimal jsvc.exec[24303]: 2010-11-11 04:23:56,819 INFO [http-8180-Processor25] [com.atlassian.confluence.lifecycle] contextInitialized Starting Confluence 3.4.1 (build #2030)
Nov 11 04:23:56 Debian-50-lenny-64-minimal jsvc.exec[24303]: 2010-11-11 04:23:56,924 INFO [http-8180-Processor25] [beans.factory.xml.XmlBeanDefinitionReader] loadBeanDefinitions Loading XML bean definitions from class path resource [bootstrapContext.xml]
Nov 11 04:23:57 Debian-50-lenny-64-minimal jsvc.exec[24303]: 2010-11-11 04:23:57,380 INFO [http-8180-Processor25] [beans.factory.xml.XmlBeanDefinitionReader] loadBeanDefinitions Loading XML bean definitions from class path resource [setupContext.xml]
Nov 11 04:23:57 Debian-50-lenny-64-minimal jsvc.exec[24303]: 2010-11-11 04:23:57,421 INFO [http-8180-Processor25] [beans.factory.xml.XmlBeanDefinitionReader] loadBeanDefinitions Loading XML bean definitions from class path resource [bootstrapCacheContext.xml]
Nov 11 04:23:57 Debian-50-lenny-64-minimal jsvc.exec[24303]: 2010-11-11 04:23:57,517 ERROR [http-8180-Processor25] [atlassian.confluence.setup.ConfluenceConfigurationListener] contextInitialized An error was encountered while bootstrapping Confluence (see below): #012Error creating bean with name 'com.atlassian.confluence.plugin.PluginsClassLoaderConfigurationListener' defined in class path resource [bootstrapContext.xml]: Cannot resolve reference to bean 'uberClassLoader' while setting bean property 'delegationClassLoader'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'uberClassLoader' defined in class path resource [bootstrapContext.xml]: Instantiation of bean failed; nested exception is org.springframework.beans.BeanInstantiationException: Could not instantiate bean class [com.atlassian.confluence.util.ConfluenceUberClassLoader]: Constructor threw exception; nested exception is java.security.AccessControlException: access denied (java.lang.RuntimePermission createClassLoader)#012org.springframework.beans.facto
Nov 11 04:23:57 Debian-50-lenny-64-minimal jsvc.exec[24303]: ry.BeanCreationException: Error creating bean with name 'com.atlassian.confluence.plugin.PluginsClassLoaderConfigurationListener' defined in class path resource [bootstrapContext.xml]: Cannot resolve reference to bean 'uberClassLoader' while setting bean property 'delegationClassLoader'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'uberClassLoader' defined in class path resource [bootstrapContext.xml]: Instantiation of bean failed; nested exception is org.springframework.beans.BeanInstantiationException: Could not instantiate bean class [com.atlassian.confluence.util.ConfluenceUberClassLoader]: Constructor threw exception; nested exception is java.security.AccessControlException: access denied (java.lang.RuntimePermission createClassLoader)#012Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'uberClassLoader' defined in class path resource [bootstrapContext.xml]: Instantiation of bean failed; nested e
Nov 11 04:23:57 Debian-50-lenny-64-minimal jsvc.exec[24303]: xception is org.springframework.beans.BeanInstantiationException: Could not instantiate bean class [com.atlassian.confluence.util.ConfluenceUberClassLoader]: Constructor threw exception; nested exception is java.security.AccessControlException: access denied (java.lang.RuntimePermission createClassLoader)#012Caused by: org.springframework.beans.BeanInstantiationException: Could not instantiate bean class [com.atlassian.confluence.util.ConfluenceUberClassLoader]: Constructor threw exception; nested exception is java.security.AccessControlException: access denied (java.lang.RuntimePermission createClassLoader)#012Caused by: java.security.AccessControlException: access denied (java.lang.RuntimePermission createClassLoader)#012#011at java.security.AccessControlContext.checkPermission(AccessControlContext.java:323)#012#011at java.security.AccessController.checkPermission(AccessController.java:546)#012#011at java.lang.SecurityManager.checkPermission(SecurityManager.java:532)#012#011at java.lang.SecurityManager.checkCreateClassLoader(SecurityMa
Nov 11 04:23:57 Debian-50-lenny-64-minimal jsvc.exec[24303]: nager.java:594)#012#011at java.lang.ClassLoader.checkCreateClassLoader(ClassLoader.java:178)#012#011at java.lang.ClassLoader.(ClassLoader.java:226)#012#011at com.atlassian.confluence.util.ConfluenceUberClassLoader.(ConfluenceUberClassLoader.java:20)#012#011at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)#012#011at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)#012#011at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)#012#011at java.lang.reflect.Constructor.newInstance(Constructor.java:513)#012#011at org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:85)#012#011at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:61)#012#011at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateBean(AbstractAutowireCapableBeanFactory.java:757)#012#011at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanIns
Nov 11 04:23:57 Debian-50-lenny-64-minimal jsvc.exec[24303]: tance(AbstractAutowireCapableBeanFactory.java:722)#012#011at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:386)#012#011at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:249)#012#011at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:155)#012#011at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:246)#012#011at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:160)#012#011at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:267)#012#011at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver.java:110)#012#011at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBea
Nov 11 04:23:57 Debian-50-lenny-64-minimal jsvc.exec[24303]: nFactory.java:1100)#012#011at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:862)#012#011at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:423)#012#011at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:249)#012#011at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:155)#012#011at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:246)#012#011at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:160)#012#011at org.springframework.beans.factory.support.DefaultListableBeanFactory.getBeansOfType(DefaultListableBeanFactory.java:248)#012#011at org.springframework.context.support.AbstractApplicationContext.getBeansOfType(AbstractApplicationContext.java:820)#012#011at org.springframework.context.support.
Nov 11 04:23:57 Debian-50-lenny-64-minimal jsvc.exec[24303]: AbstractApplicationContext.registerListeners(AbstractApplicationContext.java:597)#012#011at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:349)#012#011at org.springframework.context.support.ClassPathXmlApplicationContext.(ClassPathXmlApplicationContext.java:122)#012#011at org.springframework.context.support.ClassPathXmlApplicationContext.(ClassPathXmlApplicationContext.java:76)#012#011at com.atlassian.confluence.setup.ConfluenceClassPathXmlApplicationContext.(ConfluenceClassPathXmlApplicationContext.java:26)#012#011at com.atlassian.confluence.setup.ConfluenceConfigurationListener.initialiseBootstrapContext(ConfluenceConfigurationListener.java:75)#012#011at com.atlassian.confluence.setup.ConfluenceConfigurationListener.contextInitialized(ConfluenceConfigurationListener.java:40)#012#011at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:3764)#012#011at org.apache.catalina.core.StandardContext.start(StandardContext.java:4216)#012#011at org.apache.catalina.manager.M
Nov 11 04:23:57 Debian-50-lenny-64-minimal jsvc.exec[24303]: anagerServlet.start(ManagerServlet.java:1173)#012#011at org.apache.catalina.manager.HTMLManagerServlet.start(HTMLManagerServlet.java:549)#012#011at org.apache.catalina.manager.HTMLManagerServlet.doGet(HTMLManagerServlet.java:105)#012#011at javax.servlet.http.HttpServlet.service(HttpServlet.java:689)#012#011at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)#012#011at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)#012#011at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)#012#011at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)#012#011at java.lang.reflect.Method.invoke(Method.java:597)#012#011at org.apache.catalina.security.SecurityUtil$1.run(SecurityUtil.java:244)#012#011at java.security.AccessController.doPrivileged(Native Method)#012#011at javax.security.auth.Subject.doAsPrivileged(Subject.java:517)#012#011at org.apache.catalina.security.SecurityUtil.execute(SecurityUtil.java:276)#012#011at org.apache.catalina.security.SecurityUtil.doAsPrivilege(SecurityUtil.java:162)#012#011at org.apache.catalina
Nov 11 04:23:57 Debian-50-lenny-64-minimal jsvc.exec[24303]: .core.Ap
Nov 11 04:23:57 Debian-50-lenny-64-minimal jsvc.exec[24303]: plicationFilterChain.internalDoFilter(ApplicationFilterChain.java:262)#012#011at org.apache.catalina.core.ApplicationFilterChain.access$0(ApplicationFilterChain.java:192)#012#011at org.apache.catalina.core.ApplicationFilterChain$1.run(ApplicationFilterChain.java:171)#012#011at java.security.AccessController.doPrivileged(Native Method)#012#011at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:167)#012#011at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)#012#011at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:172)#012#011at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:525)#012#011at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)#012#011at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:117)#012#011at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:108)#012#011at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:174)#012#011at org.apach
Nov 11 04:23:57 Debian-50-lenny-64-minimal jsvc.exec[24303]: e.coyote.http11.Http11Processor.process(Http11Processor.java:874)#012#011at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:665)#012#011at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:528)#012#011at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:81)#012#011at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:689)#012#011at java.lang.Thread.run(Thread.java:619)
Nov 11 04:23:57 Debian-50-lenny-64-minimal jsvc.exec[24303]: 2010-11-11 04:23:57,525 WARN [http-8180-Processor25] [atlassian.config.util.BootstrapUtils] getBootstrapManager Attempting to retrieve bootstrap manager before it is set up: com.atlassian.config.bootstrap.BootstrappedContextLoaderListener.canInitialiseContainer(BootstrappedContextLoaderListener.java:26)
Nov 11 04:23:57 Debian-50-lenny-64-minimal jsvc.exec[24303]: 2010-11-11 04:23:57,529 ERROR [http-8180-Processor25] [ContainerBase.[Catalina].[localhost].[/confluence]] listenerStart Exception sending context initialized event to listener instance of class com.atlassian.confluence.languages.ReloadBundlesContextListener#012java.security.AccessControlException: access denied (java.util.PropertyPermission confluence.i18n.reloadbundles read)#012#011at java.security.AccessControlContext.checkPermission(AccessControlContext.java:323)#012#011at java.security.AccessController.checkPermission(AccessController.java:546)#012#011at java.lang.SecurityManager.checkPermission(SecurityManager.java:532)#012#011at java.lang.SecurityManager.checkPropertyAccess(SecurityManager.java:1285)#012#011at java.lang.System.getProperty(System.java:650)#012#011at java.lang.Boolean.getBoolean(Boolean.java:221)#012#011at com.atlassian.confluence.languages.ReloadBundlesContextListener.contextInitialized(ReloadBundlesContextListener.java:22)#012#011at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:3764)#012#011at org.apache.catali
Nov 11 04:23:57 Debian-50-lenny-64-minimal jsvc.exec[24303]: na.core.StandardContext.start(StandardContext.java:4216)#012#011at org.apache.catalina.manager.ManagerServlet.start(ManagerServlet.java:1173)#012#011at org.apache.catalina.manager.HTMLManagerServlet.start(HTMLManagerServlet.java:549)#012#011at org.apache.catalina.manager.HTMLManagerServlet.doGet(HTMLManagerServlet.java:105)#012#011at javax.servlet.http.HttpServlet.service(HttpServlet.java:689)#012#011at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)#012#011at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)#012#011at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)#012#011at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)#012#011at java.lang.reflect.Method.invoke(Method.java:597)#012#011at org.apache.catalina.security.SecurityUtil$1.run(SecurityUtil.java:244)#012#011at java.security.AccessController.doPrivileged(Native Method)#012#011at javax.security.auth.Subject.doAsPrivileged(Subject.java:517)#012#011at org.apache.catalina.security.SecurityUtil.execute(SecurityUtil.java:276)#012#011at org.apache.c
Nov 11 04:23:57 Debian-50-lenny-64-minimal jsvc.exec[24303]: atalina.security.SecurityUtil.doAsPrivilege(SecurityUtil.java:162)#012#011at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:262)#012#011at org.apache.catalina.core.ApplicationFilterChain.access$0(ApplicationFilterChain.java:192)#012#011at org.apache.catalina.core.ApplicationFilterChain$1.run(ApplicationFilterChain.java:171)#012#011at java.security.AccessController.doPrivileged(Native Method)#012#011at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:167)#012#011at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)#012#011at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:172)#012#011at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:525)#012#011at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)#012#011at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:117)#012#011at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:
Nov 11 04:23:57 Debian-50-lenny-64-minimal jsvc.exec[24303]: 108)#012#011at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:174)#012#011at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:874)#012#011at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:665)#012#011at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:528)#012#011at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:81)#012#011at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:689)#012#011at java.lang.Thread.run(Thread.java:619)
Nov 11 04:23:57 Debian-50-lenny-64-minimal jsvc.exec[24303]: 2010-11-11 04:23:57,530 WARN [http-8180-Processor25] [atlassian.config.util.BootstrapUtils] getBootstrapManager Attempting to retrieve bootstrap manager before it is set up: com.atlassian.confluence.setup.ValidLicenseContextListener.shouldRunListener(ValidLicenseContextListener.java:48)
Nov 11 04:23:57 Debian-50-lenny-64-minimal jsvc.exec[24303]: 2010-11-11 04:23:57,530 WARN [http-8180-Processor25] [atlassian.config.util.BootstrapUtils] getBootstrapManager Attempting to retrieve bootstrap manager before it is set up: com.atlassian.confluence.upgrade.UpgradeLauncherServletContextListener.contextInitialized(UpgradeLauncherServletContextListener.java:22)
Nov 11 04:23:57 Debian-50-lenny-64-minimal jsvc.exec[24303]: Nov 11, 2010 4:23:57 AM org.apache.catalina.core.StandardContext start#012SEVERE: Error listenerStart
Nov 11 04:23:57 Debian-50-lenny-64-minimal jsvc.exec[24303]: Nov 11, 2010 4:23:57 AM org.apache.catalina.core.StandardContext start#012SEVERE: Error listenerStart
Nov 11 04:23:57 Debian-50-lenny-64-minimal jsvc.exec[24303]: Nov 11, 2010 4:23:57 AM org.apache.catalina.core.StandardContext start#012SEVERE: Context [/confluence] startup failed due to previous errors
Nov 11 04:23:57 Debian-50-lenny-64-minimal jsvc.exec[24303]: Nov 11, 2010 4:23:57 AM org.apache.catalina.core.StandardContext start#012SEVERE: Context [/confluence] startup failed due to previous errors
Nov 11 04:23:57 Debian-50-lenny-64-minimal jsvc.exec[24303]: 2010-11-11 04:23:57,532 INFO [http-8180-Processor25] [com.atlassian.confluence.lifecycle] contextDestroyed Stopping Confluence
Nov 11 04:23:57 Debian-50-lenny-64-minimal jsvc.exec[24303]: Nov 11, 2010 4:23:57 AM org.apache.catalina.core.ApplicationContext log#012INFO: HTMLManager: list: Listing contexts for virtual host 'localhost'
Nov 11 04:23:57 Debian-50-lenny-64-minimal jsvc.exec[24303]: Nov 11, 2010 4:23:57 AM org.apache.catalina.core.ApplicationContext log#012INFO: HTMLManager: list: Listing contexts for virtual host 'localhost'

Далее увеличиваем размер используемой памяти с 128 стандартных мегабайт до гигабайта (или как минимум 256 мегабайт):
vi /etc/default/tomcat5.5

JAVA_OPTS="-Djava.awt.headless=true -Xmx1024M -XX:MaxPermSize=192m"

Если же оставить стандартные 128, то confluence будет стопорится через раз с ошибкой "java.lang.OutOfMemoryError: Java heap space". Аналогично (офдокументация) с XX:MaxPermSize, у меня без указания явного выдавалась ошибка "jsvc.exec[27023]: Exception in thread "http-8180-Processor25" java.lang.OutOfMemoryError: PermGen space".

Теперь нужно скачать само приложение в формате EAR/WAR, открываем страницу http://www.atlassian.com/software/confluence/ConfluenceDownloadCenter.jspa, там выбираем Linux и щелкаем "Show all", из всего появившегося многообразия нам требуется "Confluence 3.4.1 - EAR/WAR (TAR.GZ Archive)", в данный момент прямая ссылка такая:
http://www.atlassian.com/software/confluence/downloads/binary/confluence-3.4.5.tar.gz

Скачиваем:
mkdir /opt/confluence_distrib
cd /opt/confluence_distrib
wget http://www.atlassian.com/software/confluence/downloads/binary/confluence-3.4.5.tar.gz
tar -xf confluence-3.4.5.tar.gz
cd confluence-3.4.5

Далее переходим к конфигурации:
vi /opt/confluence_distrib/confluence-3.4.5/confluence/WEB-INF/classes/confluence-init.properties

И добавляем там в самый низ:
confluence.home=/opt/confluence/

В этой папке confluence будет хранить все свои данные, не нужно указывать в ее качестве папку с дистрибутивом. Создаем ее:
mkdir /opt/confluence

Даем tomcat`у права на запись в нее:
chown tomcat55:root /opt/confluence

Теперь confluence нужно подключить к Tomcat, открываем конфиг:
vi /etc/tomcat5.5/Catalina/localhost/confluence.xml

И добавляем там следующее:
<Context path="/confluence" docBase="/opt/confluence_distrib/confluence-3.4.5/confluence" debug="0" reloadable="true">
</Context>

Если же Вы хотите, чтобы wiki была доступа по /, то прочтите следующее:
To run Confluence without a context path, change the path in the Context tag to an empty string (""). If not using a context path, your config will need to be saved as ROOT.xml rather than confluence.xml.

In Tomcat, a context path name follows the name of its xml file (except for ROOT.xml where no context path is used. Hence if you wish to change the context path to a different name, change both the context path and the name of the xml file. eg. "/wiki" context path should be saved in file wiki.xml.

То есть, если хотим, чтобы Confluence был доступен по /, то открываем файл:
vi /etc/tomcat5.5/Catalina/localhost/ROOT.xml

И добавляем в него:
<Context path="" docBase="/opt/confluence_distrib/confluence-3.4.5/confluence" debug="0" reloadable="true">
</Context>

Но при этом отвалится "Browse" - "Confluence Admin", это происходит из-за конфликта URL "/admin" админ-интерфейса Confluence c админкой TomCat:
HTTP Status 404 - /admin/console.action
type Status report
message /admin/console.action
description The requested resource (/admin/console.action) is not available.
Apache Tomcat/5.5

Пофиксить это можно отключением admin-интерфейса Tomcat:
mv /etc/tomcat5.5/Catalina/localhost/admin.xml /etc/tomcat5.5/Catalina/localhost/admin.old
/etc/init.d/tomcat5.5 restart

Открываем отладочный лог Tomcat:
tail -f /var/log/daemon.log

Перезапускаем Tomcat для применения настроек:
/etc/init.d/tomcat5.5 restart

Все, теперь заходим по адресу:
http://xx.xx.xx.xx:8180/confluence/

И там нас приветствует инсталлятор confluence и готовимся ввести регистрационные ключи. Далее выбираем "Production Install", External Database -> MySQL, далее выбираем тип соединения "Direct JDBC Connection". У нас язык русский, так что нам грозит использование UTF8, не забываем об этом при конфигурировании СУБД (также вписываем данные от ранее созданной базы):

Driver Class Name:
com.mysql.jdbc.Driver

Database URL:
jdbc:mysql://localhost/confluence?autoReconnect=true&sessionVariables=storage_engine%3DInnoDB&useUnicode=true&characterEncoding=utf8

После этого начинаем загрузку базы, далее выбираем "Example Site", чтобы забить вики тестовым контентом. Далее вписываем свои данные и начинаем разбираться во всей этой байде :)

Далее нужно немного разобраться с настройками. Указываем доменное имя: Browse, Confluence Admin, General Configuration, Edit и в поле "Server Base Url" вписываем доменное имя нашего сервера вместо IP.

Настройка почты. Browse, Confluence Admin, General Configuration, Mail Servers, Add a new SMTP mail server, SMTP Host Address: 127.0.0.1, from wiki@yourdomain.ru, Create.

Насколько я отстал от жизни, что не знал, что Google купил FeedBurner

Аж стыдно узнавать такие вещи из вики: http://en.wikipedia.org/wiki/FeedBurner :(

Интересный способ защиты от спама

http://www.projecthoneypot.org/index.php

Тест - есть ли у Вас предпринимательский талант и стоит ли начинать собственное дело?

Довольно интересный и логичный тест: http://www.forbes.ru/svoi-biznes/predprinimateli/58455/test_est_li_u_vas_predprinimatelskij_talant

Ответы на него (если хотите получит объективные результаты, не читайте ее до прохождения теста): http://www.forbes.ru/svoi-biznes/predprinimateli/58457-metodologiya

Установка Apache Tomcat 5.5 в Debian 5 Lenny

Ставим Java

Итак, ставим Java: http://phpsuxx.blogspot.com/2009/12/java-6-jre-debian-5-lenny.html

Ставим Tomcat

Ставим сам Tomcat и админку для управления им:
apt-get install -y tomcat5.5 tomcat5.5-admin

Итого, я получил вот что:
Not creating home directory `/usr/share/tomcat5.5'.
no JDK found - please set JAVA_HOME failed!
invoke-rc.d: initscript tomcat5.5, action "start" failed.
dpkg: error processing tomcat5.5 (--configure):
subprocess post-installation script returned error exit status 1
dpkg: dependency problems prevent configuration of tomcat5.5-webapps:
tomcat5.5-webapps depends on tomcat5.5 (>= 5.5.26-5); however:
Package tomcat5.5 is not configured yet.
dpkg: error processing tomcat5.5-webapps (--configure):
dependency problems - leaving unconfigured
Errors were encountered while processing:
tomcat5.5
tomcat5.5-webapps
E: Sub-process /usr/bin/dpkg returned an error code (1)


Также руками tomcat не стартует:
/etc/init.d/tomcat5.5 start
no JDK found - please set JAVA_HOME failed!

Чтобы от этого избавится (спасибо ребятам) открываем конфиг:
vi /etc/default/tomcat5.5

И раскомментиурем там строчку:
JAVA_HOME=/usr/lib/jvm/java-6-sun

После этого tomcat запустится успешно:
/etc/init.d/tomcat5.5 start
Starting Tomcat servlet engine: tomcat5.5.

Убеждаемся, что все заработало корректно:
netstat -lnpt | grep jsvc
tcp 0 0 0.0.0.0:8009 0.0.0.0:* LISTEN 23177/jsvc
tcp 0 0 0.0.0.0:8180 0.0.0.0:* LISTEN 23177/jsvc

Что же это за интересные порты? Согласно файлу /etc/tomcat5.5/server.xml, на 8009 порту слушает некий "AJP 1.3 Connector", предназначение которого мне пока неведомо. А на 8180м порту слушает близкий нам "non-SSL HTTP/1.1 Connector", к которому можно достучаться браузером :)

После этого разрешаем проблему apt (теперь он сможет-таки сконфигурировать пакет):
apt-get install -f

Теперь просто попробуем открыть в браузере страницу:
http://xx.xx.xx.xx:8180/manager/html

В ответ должен появится запрос пароля. Теперь нам нужно создать пользователя, под которым мы будем входить.

Далее создаем пользователей с правами manager и admin:
vi /var/lib/tomcat5.5/conf/tomcat-users.xml

Там внутрь блока tomcat-users добавляем пользователя-админа и пользователя-менеджера:
<user username="mymanager" password="mypassword" roles="manager"/>
<user username="myadmin" password="mypassword" roles="admin"/>

Перезапускаем tomcat для применения изменений:
/etc/init.d/tomcat5.5 restart

Теперь можем войти админом (позволяет управлять пользователями и прочими низкоуровневыми настройками) по адресу:
http://xx.xx.xx.xx:8180/admin

Или менеджером (позволяет управлять приложениями):
http://xx.xx.xx..xx:8180/manager

По материалам: http://www.debianadmin.com/how-to-setup-apache-tomcat-55-on-debian-etch.html