Настройка Jira и OpenVZ

в разделе Администрирование | Метки: OpenVZ, Jira

Вчера купил Jira, в рамках борьбы с финансовым кризисом они решили помочь различным стартапам и продают свой софт по дешевым ценам. Лицензия на Jira для 10 пользователей мне обошлась в 10 баксов, уж не знаю сколько она стоила раньше, но сейчас лицензия на 25 пользователей стоит $1200.

Некоторое время у меня на серваке перестал запускаться FishEye, ничего подробного в логи он не писал, а сегодня и Jira у меня там не поднялась, попробовал сменить Java - не помогло. Все заканчивалось вот таким вот сообщением в логе:

********************************************************************************
JIRA 4.0.2 build: 472 started. You can now access JIRA through your web browser.
********************************************************************************
 
2010-03-12 05:48:03,669 main INFO     [atlassian.jira.scheduler.JiraSchedulerLauncher] Starting the JIRA Scheduler....
2010-03-12 05:48:03,669 main INFO     [atlassian.jira.scheduler.JiraSchedulerLauncher] Skipping JIRA Scheduler initialisation, JIRA is not ready.
Mar 12, 2010 5:48:04 AM org.apache.coyote.http11.Http11BaseProtocol start
INFO: Starting Coyote HTTP/1.1 on http-8080
Mar 12, 2010 5:48:04 AM org.apache.catalina.storeconfig.StoreLoader load
INFO: Find registry server-registry.xml at classpath resource
Mar 12, 2010 5:48:04 AM org.apache.catalina.startup.Catalina start
INFO: Server startup in 23840 ms
Mar 12, 2010 5:48:04 AM org.apache.catalina.core.StandardServer await
SEVERE: StandardServer.await: create[8005]: 
java.net.SocketException: Invalid argument
	at java.net.PlainSocketImpl.socketBind(Native Method)
	at java.net.PlainSocketImpl.bind(PlainSocketImpl.java:365)
	at java.net.ServerSocket.bind(ServerSocket.java:319)
	at java.net.ServerSocket.<init>(ServerSocket.java:185)
	at org.apache.catalina.core.StandardServer.await(StandardServer.java:363)
	at org.apache.catalina.startup.Catalina.await(Catalina.java:616)
	at org.apache.catalina.startup.Catalina.start(Catalina.java:576)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:295)
	at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:433)
Mar 12, 2010 5:48:04 AM org.apache.coyote.http11.Http11BaseProtocol pause
INFO: Pausing Coyote HTTP/1.1 on http-8080
Mar 12, 2010 5:48:05 AM org.apache.catalina.core.StandardService stop
INFO: Stopping service Catalina
2010-03-12 05:48:05,238 ConnectionKeeper-1 INFO     [atlassian.jira.upgrade.ConnectionKeeper] Shutting down.
2010-03-12 05:48:05,245 Thread-33 INFO     [atlassian.plugin.manager.DefaultPluginManager] Shutting down the plugin system
2010-03-12 05:48:06,471 Thread-33 INFO     [atlassian.jira.startup.JiraStartupChecklistContextListener] Unlocking JIRA Home
log4j:ERROR LogMananger.repositorySelector was null likely due to error in class reloading, using NOPLoggerRepository.
Mar 12, 2010 5:48:07 AM org.apache.coyote.http11.Http11BaseProtocol destroy
INFO: Stopping Coyote HTTP/1.1 on http-8080

Попробовал поставить на своем компе с Ubuntu Linux - все нормально заработало, отписал в саппорт, но пока ничего не ответили. В общем надоело ждать, решил поставить OpenVZ, давно уже хотел поставить и раскидать различные сервисы на виртуалки, чтобы посекьюрнее было, да и бэкапить все удобнее, насколько я помню можно просто копировать весь контейнер, а развернуть его заново потом можно очень быстро. Таким образом на серваке все что нужно настроить сеть, OpenVZ, и во время делать бэкапы, если сдохнет что-либо из железа все быстро очень можно восстановить.

Для нормальной работы с OpenVZ необходимо внести изменения в файл /etc/sysctl.conf

# On Hardware Node we generally need
# packet forwarding enabled and proxy arp disabled
net.ipv4.ip_forward = 1
net.ipv6.conf.default.forwarding = 1
net.ipv6.conf.all.forwarding = 1
net.ipv4.conf.default.proxy_arp = 0
 
# Enables source route verification
net.ipv4.conf.all.rp_filter = 1
 
# Enables the magic-sysrq key
kernel.sysrq = 1
 
# We do not want all our interfaces to send redirects
net.ipv4.conf.default.send_redirects = 1
net.ipv4.conf.all.send_redirects = 0

Дальше я удалил все ядра, которые мне теперь не нужны, дело в том что ядро с поддержкой OpenVZ в Debian пакетах как правило старее чем самое последнее (особенно в ветке testing), так что после очередного апдейта получалось бы что сервак стартовал с не тем ядром что нужно. Все ядра что у меня были установлены я посмотрел так dpkg -l|grep 2.6 После чего все их удалил и поставил некоторые пакеты необходимые для OpenVZ

# aptitude purge linux-headers-2.6.26-1-686 linux-headers-2.6.26-1-common linux-headers-2.6.26-2-686 linux-headers-2.6.26-2-common linux-headers-2.6.29-1-686 linux-headers-2.6.29-1-common linux-headers-2.6.29-2-686 linux-headers-2.6.29-2-common linux-image-2.6.26-2-686 linux-image-2.6.26-1-686 linux-image-2.6.29-1-686 linux-image-2.6.29-2-686 linux-headers-2.6.30-1-686 linux-image-2.6-686 linux-headers-2.6.32-trunk-common linux-headers-2.6.32-trunk-686 linux-headers-2.6.30-1-common linux-headers-2.6.30-1-686 linux-image-2.6.30-1-686 linux-image-2.6.30-2-686 linux-image-2.6.31-1-686 linux-image-2.6.32-2-686 linux-image-2.6.32-3-686 linux-image-2.6.32-trunk-686 
 
 
# apt-get install vzprocps vzdump

После чего я создал образ Debian Linux с помощью которого будут разворачиваться все контейнеры (VPS), настроил его и установил различные нужные мне пакеты. 777 - это номер VPS, который я настраиваю.

# debootstrap --arch i386 testing /vz/private/777 ftp://ftp.corbina.net/debian
# vzctl set 777 --applyconfig vps.basic --save
Saved parameters for CT 777
 
# sh -c 'echo "OSTEMPLATE=debian-testing" >> /etc/vz/conf/777.conf'
# vzctl set 777 --ipadd 192.168.1.11 --save
Saved parameters for CT 777
# vzctl set 777 --nameserver 192.168.1.10 --save
Saved parameters for CT 777

Это важный момент, заходим на созданную VPS и настраиваем ее

# vzctl enter 777
 
# cat <<EOF > /etc/apt/sources.list
deb ftp://ftp.corbina.net/debian/ unstable main contrib non-free
deb-src ftp://ftp.corbina.net/debian/ unstable main contrib non-free
EOF
 
 
# aptitude update
# aptitude safe-upgrade
# aptitude install vim ssh quota less locales sudo
 
# chmod 700 /root

Запрещаем логиниться рутом

# usermod -L root

Отключаем getty

# sed -i -e '/getty/d' /etc/inittab

Отключаем выполнение sync() при каждой записи для syslog файлов, для улучшения производительности I/O
# sed -i -e 's@\([[:space:]]\)\(/var/log/\)@\1-\2@' /etc/*syslog.conf

#rm -f /etc/mtab
# ln -s /proc/mounts /etc/mtab

Отлючаем сервисы, оставляем только самые необходимый минимум

# update-rc.d -f klogd remove
# update-rc.d -f quotarpc remove
# update-rc.d -f exim4 remove
# update-rc.d -f inetd remove

Для каждой новой VPS создавать новые SSH ключи

# rm -f /etc/ssh/ssh_host_*
# cat << EOF > /etc/rc2.d/S15ssh_gen_host_keys
#!/bin/bash
ssh-keygen -f /etc/ssh/ssh_host_rsa_key -t rsa -N ''
ssh-keygen -f /etc/ssh/ssh_host_dsa_key -t dsa -N ''
rm -f \$0
EOF
# chmod a+x /etc/rc2.d/S15ssh_gen_host_keys

Я так же дополнительно настроил локали, выбрав русские и US

# dpkg-reconfigure locales
Generating locales (this might take a while)...
  en_US.ISO-8859-1... done
  en_US.ISO-8859-15... done
  en_US.UTF-8... done
  ru_RU.CP1251... done
  ru_RU.KOI8-R... done
  ru_RU.UTF-8... done
Generation complete.

Удаляем скачанные пакеты и выходим

# apt-get clean
root@srv01:/# exit
logout
exited from CT 777

Удаляем все сетевые настройки, так как для каждой VPS нам будут нужны новые

# vzctl set 777 --ipdel all --save
Deleting IP address(es): 192.168.1.11
Adding IP address(es): 
Saved parameters for CT 777
 
# rm -f /vz/private/777/etc/hostname
 
# vzctl stop 777
Stopping container ...
Container was stopped
Container is unmounted

Теперь собственно создаем сам имидж системы

# cd /vz/private/777
# tar --numeric-owner -zcf /vz/template/cache/debian-testing-i386-minimal.tar.gz .
# ls -lha /vz/template/cache/
total 149M
drwxr-xr-x 2 root root 4.0K Mar 13 06:52 .
drwxr-xr-x 3 root root 4.0K Mar 12 19:21 ..
-rw-r--r-- 1 root root 149M Mar 13 07:02 debian-testing-i386-minimal.tar.gz

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

# vzctl create 123456 --ostemplate debian-testing-i386-minimal
Creating container private area (debian-testing-i386-minimal)
Performing postcreate actions
Container private area was created
 
# vzctl start 123456
Starting container ...
Container is mounted
Setting CPU units: 1000
Configure meminfo: 65536
Container start in progress...
 
# vzctl exec 123456 ps ax
  PID TTY      STAT   TIME COMMAND
    1 ?        Ss     0:00 init [2]      
  220 ?        Sl     0:00 /usr/sbin/rsyslogd -c4
  241 ?        Ss     0:00 /usr/sbin/cron
  246 ?        Ss     0:00 /usr/bin/dbus-daemon --system
  253 ?        Ss     0:00 /usr/sbin/sshd
  269 ?        Rs     0:00 ps ax
 
# vzctl stop 123456
Stopping container ...
Container was stopped
Container is unmounted
srv01:/vz/private/777# vzctl destroy 123456
Destroying container private area: /var/lib/vz/private/123456
Container private area was destroyed
srv01:/vz/private/777# rm /etc/vz/conf/123456.conf.destroyed
 
# vzctl destroy 777
Destroying container private area: /var/lib/vz/private/777
Container private area was destroyed
srv01:/vz/private/777# rm /etc/vz/conf/777.conf.destroyed

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

# vzctl create 11 --ostemplate debian-testing-i386-minimal
Creating container private area (debian-testing-i386-minimal)
Performing postcreate actions
Container private area was created
 
 vzctl set 11 --ipadd 192.168.1.11 --save
 vzctl set 11 --nameserver 192.168.1.10 --save
 
# adduser boris
Adding user `boris' ...
Adding new group `boris' (1000) ...
Adding new user `boris' (1000) with group `boris' ...
Creating home directory `/home/boris' ...
Copying files from `/etc/skel' ...
Enter new UNIX password: 
Retype new UNIX password: 
passwd: password updated successfully
Changing the user information for boris
Enter the new value, or press ENTER for the default
	Full Name []: Boris
	Room Number []: 
	Work Phone []: 
	Home Phone []: 
	Other []: 
Is the information correct? [Y/n] y

Выбираем кошерный редактор Vim вместо унылой какашки nano

# update-alternatives --config editor
There are 4 choices for the alternative editor (providing /usr/bin/editor).
 
  Selection    Path                Priority   Status
------------------------------------------------------------
* 0            /bin/nano            40        auto mode
  1            /bin/ed             -100       manual mode
  2            /bin/nano            40        manual mode
  3            /usr/bin/vim.basic   30        manual mode
  4            /usr/bin/vim.tiny    10        manual mode
 
Press enter to keep the current choice[*], or type selection number: 3
update-alternatives: using /usr/bin/vim.basic to provide /usr/bin/editor (editor) in manual mode.

Добавляем себя в sudo юзеров

# visudo
 
boris   ALL=(ALL) ALL
 
echo 'srv11.lan' > /etc/hostname

Теперь создаем юзера Jira, распаковываем архив в /opt/jira

# useradd --create-home --home-dir /opt/jira --shell /bin/bash jira
# tar -zxf atlassian-jira-enterprise-4.0.2-standalone.tar.gz 
# mv atlassian-jira-enterprise-4.0.2-standalone/* ./
# rm -rf atlassian-jira-enterprise-4.0.2-standalone*
# chown -R jira:jira *
# su jira

Правим файл atlassian-jira/WEB-INF/classes/jira-application.properties, прописываем в параметр jira.home значение /opt/jira

Ставим java

# aptitude install sun-java6-jre
 
# java -version
java version "1.6.0_18"
Java(TM) SE Runtime Environment (build 1.6.0_18-b07)
Java HotSpot(TM) Client VM (build 16.0-b13, mixed mode)

В файл /etc/bash.bashrc прописываем JAVA_HOME

export JAVA_HOME=/usr/lib/jvm/java-6-sun
# source /etc/bash.bashrc

Теперь уже таки можно запустить Jira

jira@srv11:~$ ./bin/startup.sh 
Detecting JVM PermGen support...
PermGen switch is supported. Setting to 256m
If you encounter issues starting up JIRA Standalone Edition, please see the Troubleshooting guide at http://confluence.atlassian.com/display/JIRA/Installation+Troubleshooting+Guide
Using CATALINA_BASE:   /opt/jira
Using CATALINA_HOME:   /opt/jira
Using CATALINA_TMPDIR: /opt/jira/temp
Using JRE_HOME:        /usr/lib/jvm/java-6-sun
Using CLASSPATH:       /opt/jira/bin/bootstrap.jar

Наблюдаем за файлом logs/catalina.out, в котором я увидел следующее:

Error occurred during initialization of VM
Could not reserve enough space for object heap
Could not create the Java virtual machine.

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

# vzctl set 11 --privvmpages 768000:786424 --save

Пожалуй я не стану тут описывать многочасовые мучения, в результате которых я не мог подключиться к Jira ни с помощью браузера, ни с помощью telnet, итд. В результате проблема была найдена и описана она тут http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=560044.

Решение проблемы заключается в правке файла /etc/sysctl.d/bindv6only.conf и установке параметра net.ipv6.bindv6only равному 0