Настройка Jira и OpenVZ
Вчера купил 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