суббота, 13 сентября 2008 г.

Установка Apache Tomcat

Apache Tomcat - программа-контейнер сервлетов, написанная на языке Java и реализующая спецификацию сервлетов и спецификацию JavaServer Pages (JSP), которые являются стандартами для разработки веб-приложений на языке Java.

Если вы попробуете скачать и распаковать Tomcat, а потом еще его и запустить командой каталог_tomcat/bin/catalina.sh run, то уверен на 99%, что у вас все прекрасно заработает и вы сможете открыть страничку по адресу http://имя_сервера:8080. Написано на java - работает везде! Сказано - сделано!

Интересности начинаются когда вы попробуете запустить tomcat на стандартном - 80 порту. Порты с номерами меньше 1024 являются в linux привилегированными, открывать их может только пользователь root. А запускать веб-сервер из-под root - это просто небезопасно.

Второй вопрос, который возникает - как запустить tomcat в качестве сервиса, т.е. чтобы он стартовал при старте системы.


Итак, пошаговая инструкция по установке Apache Tomcat:
  • Первое, что необходимо сделать это установить jdk, как это сделать написано здесь.

  • Затем, необходимо скачать последнюю версию Tomcat. На момент написания - это 6.0.18.

  • Лично я устанавливаю все приложения не входящие в репозиторий в каталог /opt(от слова optional). Поэтому распакуем скачанный файл и переместим туда каталог:
    tar xvzf apache-tomcat-6.0.18.tar.gz
    sudo mv apache-tomcat-6.0.18 /opt


    Создадим ссылку с именем /opt/apache-tomcat, для того, чтобы не переписывать скрипты при смене версии:
    sudo ln -s /opt/apache-tomcat-6.0.18 /opt/apache-tomcat

  • Cоздадим системного пользователя tomcat, под которым будет работать наш сервер:
    sudo adduser --system tomcat


    Сделаем хозяином каталога /opt/apache-tomcat пользователя tomcat:
    sudo chown -RLv tomcat:nogroup /opt/apache-tomcat

  • Проводим пробный запуск:
    sudo -u tomcat /opt/apache-tomcat/bin/catalina.sh run


    Открываем браузер по адресу http://имя_сервера:8080. Если все сделано правильно, то увидим следующую картину:


  • Теперь необходимо заставить сервер запускаться на стандартных портах. Для этого необходимо отредактировать файл /opt/apache-tomcat/conf/server.xml
    Ищем следующий текст:
    <connector port="8080" protocol="HTTP/1.1" connectiontimeout="20000" redirectport="8443"></connector>

    Меняем порт на стандартный для http - 80, и указываем кодировку для URI:
    <connector port="80" protocol="HTTP/1.1" connectiontimeout="20000" redirectport="8443" URIEncoding="UTF-8"></connector>

    Теперь при запуске сервера будет выходить ошибка доступа:
    java.net.BindException: Permission denied<null>:80
    at org.apache.tomcat.util.net.JIoEndpoint.init(JIoEndpoint.java:502)
    at org.apache.coyote.http11.Http11Protocol.init(Http11Protocol.java:176)
    at org.apache.catalina.connector.Connector.initialize(Connector.java:1058)
    at org.apache.catalina.core.StandardService.initialize(StandardService.java:677)
    at org.apache.catalina.core.StandardServer.initialize(StandardServer.java:795)
    at org.apache.catalina.startup.Catalina.load(Catalina.java:530)
    at org.apache.catalina.startup.Catalina.load(Catalina.java:550)
    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.load(Bootstrap.java:260)
    at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:412)

    Как уже говорилось - порты с номерами меньше 1024 может открывать только пользователь root.

  • Для запуска сервера под пользователем tomcat на стандартном порту необходимо установить утилиту jsvc:
    sudo apt-get install jsvc -y


    JSVC - утилита предназначенная, чтобы запускать java-программы как сервисы(демоны) операционной системы.

    Далее в каталоге /etc/init.d создадим файл tomcat со следующим содержанием:
    #!/bin/sh
    JAVA_HOME=/usr/lib/jvm/java-6-sun
    CATALINA_HOME=/opt/apache-tomcat
    TOMCAT_USER=tomcat

    TMP_DIR=/var/tmp
    PID_FILE=/var/run/apache-tomcat.pid
    CATALINA_BASE=/opt/apache-tomcat

    CATALINA_OPTS="-Xmx1024m -Xms512m -XX:MaxPermSize=128m -Djava.awt.headless=true"
    CLASSPATH=\
    $JAVA_HOME/lib/tools.jar:\
    $CATALINA_HOME/bin/commons-daemon.jar:\
    $CATALINA_HOME/bin/tomcat-juli.jar:\
    $CATALINA_HOME/bin/bootstrap.jar

    case "$1" in
    start)
    #
    # Start Tomcat
    #
    jsvc \
    -user $TOMCAT_USER \
    -home $JAVA_HOME \
    -Dcatalina.home=$CATALINA_HOME \
    -Dcatalina.base=$CATALINA_BASE \
    -Djava.io.tmpdir=$TMP_DIR \
    -Dfile.encoding=UTF-8 \
    -Duser.timezone=Europe/Samara \
    -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager \
    -Djava.util.logging.config.file=$CATALINA_BASE/conf/logging.properties \
    -wait 10 \
    -pidfile $PID_FILE \
    -outfile $CATALINA_HOME/logs/catalina.out \
    -errfile '&1' \
    $CATALINA_OPTS \
    -cp $CLASSPATH \
    org.apache.catalina.startup.Bootstrap
    #
    # To get a verbose JVM
    #-verbose \
    # To get a debug of jsvc.
    #-debug \
    exit $?
    ;;

    stop)
    #
    # Stop Tomcat
    #
    jsvc \
    -stop \
    -pidfile $PID_FILE \
    org.apache.catalina.startup.Bootstrap
    exit $?
    ;;
    restart)
    #
    # Restart Tomcat
    #
    $0 stop
    sleep 2
    $0 start
    ;;
    *)
    echo "Usage tomcat start/stop"
    exit 1;;
    esac

    Или, скачайте его отсюда.

    Сделаем его исполняемым:
    sudo chown root:root /etc/init.d/tomcat
    sudo chmod 755 /etc/init.d/tomcat


    Для проверки работы запустим tomcat:
    sudo /etc/init.d/tomcat start


    Сервер должен запуститься на 80 порту. Для остановки используем следующую команду:
    sudo /etc/init.d/tomcat stop

  • Создадим ссылки на скрипт для автоматического запуска и останова:
    sudo update-rc.d tomcat defaults


    Перезагружаем сервер:
    sudo shutdown -r now


    Теперь tomcat будет запускаться автоматически.



понедельник, 8 сентября 2008 г.

Установка Ubuntu Server: настройка сети виртуальной машины

По-умолчанию, для связи виртуальной машины с сетевым интерфейсом хост-системы используется трансляция сетевых адресов - NAT. Это наиболее простой способ, но он обладает серьезным недостатком - из виртуальной машины вы можете обратится куда-угодно, а вот вашу машину никто в сети не увидит. Если вы хотите использовать виртуальную машину в качестве сервера, то это может стать серьезной проблемой.

Выходом из этой ситуации является создание хост-интерфейса.

Создание хост-интерфейса в Ubuntu Linux:

Для начала нужно установить два пакета, необходимых для создания сетевого моста и TAP-интерфейса:
sudo apt-get install bridge-utils uml-utilities

Для конфигурирования моста, нам необходимо сделать две вещи на хост-системе: создать мост и объявить реальный сетевой интерфейс, который вы хотите добавить в мост; и, затем, объявить виртуальный интерфейс.

Для создания моста необходимо отредактировать файл /etc/network/interfaces

sudo gedit /etc/network/interfaces
auto eth0
iface eth0 inet manual

auto br0
iface br0 inet dhcp
bridge_ports eth0 vbox0

# The loopback network interface
auto lo
iface lo inet loopback

br0 - это имя нашего моста, вы можете использовать любое другое. Для того, чтобы изменения вступили в действие необходимо перезапустить сеть:
$sudo /etc/init.d/networking restart

Теперь, наша система будет всегда создавать сетевой мост при загрузке. При этом время загрузки может незначительно увеличится.

Для создания виртуального интерфейса для virtualbox отредактируем файл /etc/vbox/interfaces

sudo gedit /etc/vbox/interfaces

# Each line should be of the format :
# <interface name> <user name> [<bridge>]
vbox0 <andrey> br0
vbox1 <andrey> br0
...

"vbox#" - это имя виртуального интерфейса. Вы можете определить здесь столько интерфейсов, сколько пожелаете.

Для того, чтобы изменения вступили в силу, необходимо перезапустить сеть virtualbox:
sudo /etc/init.d/vboxnet restart

Теперь добавим новую сетевую карту к нашей машине:



В файле /etc/network/interfaces виртуальной машины пропишем вторую сетевую карту:



Перезапускаем сеть:
sudo /etc/init.d/networking restart

Проверяем:
sudo ifconfig|more



Теперь мы можем обращаться к нашей виртуальной машине из внешней сети через интерфейс eth1.

Оригинал шпаргалки смотреть здесь.

Установка Ubuntu Server: ставим Java

Java - объектно-ориентированный язык программирования, разрабатываемый компанией Sun Microsystems с 1991 года. "Написано на Java - работает везде!" - вот основной девиз этого языка. Программы написанные на Java являются кроссплатформенными, т.е. работают в различных операционных средах без перекомпиляции. Такую переносимость обеспечивает виртуальная машина Java (Java Virtual Machine - JVM).
Для большинства программ на java требуется установить только среду исполнения - JRE, однако, если вы хотите разрабатывать программы на java или запустить сервер приложений, то необходимо установить комплект разработчика - JDK.

Устанавливаем комплект разработчика java:
sudo apt-get install sun-java6-jdk -y


Если в системе установлено несколько java-машин, тогда необходимо указать какую именно мы хотим использовать по-умолчанию. В этом нам поможет команда update-java-alternatives:
  • Получить список установленных java-машин:
    sudo update-java-alternatives -l


    Команда выведет список установленных java-машин и их расположение:
    java-6-openjdk 1061 /usr/lib/jvm/java-6-openjdk
    java-6-sun 63 /usr/lib/jvm/java-6-sun

    OpenJDK - это полностью свободная java от sun, но, к сожалению, пока нельзя сказать, что она отличается стабильностью. Поэтому будем пока использовать стабильную и проприетарную машину от Sun.

  • Сделать java-машину от Sun используемой по-умолчанию:
    sudo update-java-alternatives -s java-6-sun




Проверяем правильность установки:

java -version


В ответ должны получить что-то вроде:
java version "1.6.0_07"
Java(TM) SE Runtime Environment (build 1.6.0_07-b06)
Java HotSpot(TM) 64-Bit Server VM (build 10.0-b23, mixed mode)


Также необходимо прописать переменные окружения JAVA_HOME и JDK_HOME. Для этого добавьте в файле /etc/environment:
JDK_HOME="/usr/lib/jvm/java-6-sun"
JAVA_HOME="/usr/lib/jvm/java-6-sun"

Установка Ubuntu Server: ставим PostgreSQL


PostgreSQL - по-настоящему свободная СУБД. Быстрая, надежная, с богатыми возможностями. Используется такими проектами как Zabbix, DSpace и кучей других.

Собственно, сама установка укладывается в одну команду:
sudo apt-get install postgresql postgresql-contrib postgresql-client -y


Все, СУБД postgresql установлена и функционирует.
Однако, собственно для работы с БД необходимо сделать ещё несколько вещей:
  • Установить пароль для суперпользователя postgres:
    Становимся пользователем postgres:
    sudo su postgres

    Запускаем терминал к нашей СУБД:
    psql

    Меняем пароль пользователя:
    alter user postgres with password 'НОВЫЙ ПАРОЛЬ';

    Например:
    alter user postgres with password '[eqzdfvcrf;ecdjqgfhjkm';


  • Импортируем скрипт, включающий улучшенные функции логирования и мониторинга для pgAdmin:
    \i /usr/share/postgresql/8.3/contrib/adminpack.sql

    Закрываем терминал и выходим из сеанса postgres:
    \q
    exit


  • Разрешаем доступ к нашей СУБД с других машин. Для этого нам небходимо отредактировать два файла (необходимы права root).
    Файл /etc/postgresql/8.3/main/postgresql.conf
    Ищем секцию CONNECTIONS AND AUTHENTICATION и меняем строку
    #listen_addresses = 'localhost'
    на
    listen_addresses = '*'




    Файл /etc/postgresql/8.3/main/pg_hba.conf
    Идем в самый конец файла и ищем строки:
    # IPv4 local connections:
    host all all 127.0.0.1/32 md5

    127.0.0.1/32 это маска разрешенной сети (32 - это число значащих бит в маске, т.е. в данном случае - все), добавляем строку с маской вашей сети, например:
    host all all 192.168.1.0/24 md5
    , т.е. будут разрешены все соединения с адресов 192.168.1.1 и по 192.168.1.254.
    Или, для большей безопасности, добавляете конкретную машину:
    host all all 192.168.1.3/32 md5




  • Перезапускаем службу:
    sudo /etc/init.d/postgresql-8.3 restart




пятница, 5 сентября 2008 г.

Установка Ubuntu Server: ставим дополнения гостевой ОС

VirtualBox мне нравится все больше и больше.
Вышедшая на днях версия 2.0 не только поддерживает 64-разрядные ОС, но и нормально работает с серверным ядром. Так что пост от 23 июля "Установка Ubuntu Server: установка ядра generic" можно считать устаревшим.

Однако для комфортной работы с виртуальной машиной не хватает самой малости - установить дополнения ОС.
Установка этого набора драйверов несколько облегчает жизнь при работе с гостевой системой в графическом режиме (интеграция мыши) и не только (использование общих папок).

Перед установкой дополнений выполняем следующую команду:
sudo aptitude install build-essential linux-headers-`uname -r`


Она установит все, что необходимо для компиляции и сборки программ, а также заголовочные файлы ядра.

Далее подключаем CD с дополнениями:

Монтируем CD-ROM:
mount /cdrom
cd /cdrom

И запускаем файл предназначенный для вашей системы:


sudo ./VBoxLinuxAdditions-amd64.run
для 64-битных систем, или
sudo ./VBboxLinuxAdditions-x86.run
для 32 битных.

После установки необходимо перезагрузится:
sudo shutdown -r now


Для чего все это?

Установка дополнений гостевой ОС дает возможность использования общих папок. Т.е. создание папок общих для хост системы и гостевой системы. Когда необходимо что-нибудь скопировать в виртуальную машину (или, наоборот, что-либо забрать с виртуальной машины) - совершенно необходимая вещь.

Для создания общей папки выбираем соответствующий пункт меню:



В открывшемся диалоге, жмем плюсик:


Необходимо указать путь к общей папке в вашей хост-системе, имя папки (любое удобное для вас имя) и можно поставить галочку "Создать постоянную папку", тогда эта папка будет доступна и после перезапуска виртуальной машины.


Для подключения общей папки в виртуальной машине, необходимо смонтировать его:
sudo mount -t vboxsf <имя виртуальной папки> <путь монтирования>, т.е. что-то вроде
sudo mount -t vboxsf temp /mnt


Теперь папка /mnt виртуальной машины будет общей с папкой /space/temp хост-системы.