Данная статья рассчитана на тех кто переходит с Windows на Linux и тратит огромное количество времени на подбор решений. Занимаюсь внедрением Ubuntu в различных организациях, и практически каждый день сталкиваюсь с нехваткой комплексных решений ... Данная статья не является единственно верным решением. Это то на чем я остановился после 4 месяцев экспериментов. Дополнения, замечания, комментарии принимаются с большим удовольствием, желательно по существу ... Готов к саморазвитию и самопознанию ...
Задача: нужно было сделать рабочее место PHP-developera с полной эмуляцией удаленного сервера на FreeBSD (почему не использовать LAMP на Ubuntu??? - не всегда это корректно, т.к. при тонкой настройке проектов может выползти много проблем из небольшого отличия LInux и FreeBSD, а проект будет крутиться в конечном итоге на FreeBSD ... Хотя это дело вкуса, на вкус и цвет - виноват сам.)
Описание используемого софта:
Ubuntu 10.4.2 LTS - взято из-за длительности официальной поддержки
Oracle VM VirtualBox - взято с официального сайта последняя версия, на данный момент 4.0.10, т.к. в репозитории почему-то гораздо более поздняя версия
Oracle VM VirtualBox Extension Pack - взято там же
NetBeans 7.0 - взято с официального сайта, по причине той же - в репозитории более поздняя.
(Кроме NetBeans кроме можно использовать: Aptana
http://www.aptana.com/, Eclipse
http://www.eclipse.org/, ZendStudio
http://www.zend.com/en/products/studio/)
FreeBSD 7.2 - опять же с официального сайта
Apache+MySQL+PHP - из ports во FreeBSD
Итак поехали ...
1. Получение и установка Ubuntu.На этом пункте, останавливать не буду. Очень много информации по этому есть на данном сайте. У каждого своя метода.
2. Установка VirtualBox.Скачиваете deb-пакет в зависимости от вашей системы
http://www.virtualbox.org/wiki/Linux_Downloads и устанавливаете его, там же скачиваете Extension Pack (особенно нужен при работе с USB 2.0). Скачивание можно производить либо через броузер, либо командой в терминале
wget http://download.virtualbox.org/virtualbox/4.0.10/virtualbox-4.0_4.0.10-72479~Ubuntu~lucid_i386.deb для основного пакета и для расширения
wget http://download.virtualbox.org/virtualbox/4.0.10/Oracle_VM_VirtualBox_Extension_Pack-4.0.10-72436.vbox-extpack. Внимание!!! Данные ссылки для Ubuntu 10.04.2 LTS i386, если у вас другая ОС выбирайте другой дистрибутив. Дополнительных "рукоблудных" настроек данный пакет не потребовал.
3.Установка NetBeansСкачиваете дистрибутив с официального сайта
http://netbeans.org/downloads/index.html, выбираете необходимый вам. Запускаете менеджер пакетов Synaptic (Система > Администрирование > Менеджер пакетов Synaptic), в поиске вводите слово
netbeans, он вам выдаст пакет только более старой версии. Отмечаете установить. После этого он автоматом потянет все что необходимо для него. После того как все отмечено автоматически, снимаете отметку установки с самого пакета NetBeans, т.к. он более поздней версии из репозитория. Устанавливаете все что было притянуто. Данный изврат был необходим чтоб сократить время на конфигурационные действия связанный со связанными пакетами. После того как все зависимое было установлено, меняете в свойствах скачанного файла атрибут исполнения - делаете его исполняемым, и запускаете его. Я это делал через нажатие правой кнопки в Nautilus. Он благополучно устанавливается. Запускаете NetBeans и скачиваете все необходимые плагины PHP через меню Сервис >> Подключаемые модули.
4. Установка FreeBSD во VirtualBoxНа данном моменте останавливаться тоже сильно не буду, уж очень много информации об этом на различных сайтах. Перед установкой у меня было включено в разделе сеть, для виртуальной машины два сетевых интерфейса:
Адаптер 1 (для независимой эмуляции удаленного сервера):
Intel PRO/1000 T Server (Виртуальный адаптер хоста, 'vboxnet0')Адаптер 2 (для выхота в интернет):
Intel PRO/1000 T Server (NAT)Сделано было так чтоб проще было настраивать firewall. При необходимости просто включается/выключается интерфейс который смотрит наружу, а правила firewall остаются неизменными.
И обязательно включить NFS-client, все это делается в режиме стандартной инсталляции.
5. Настройка сети для VirtualBox и FreeBSD.Запускаете виртуальную машину FreeBSD. Запускаете терминал в Ubuntu и пишете одну из команд:
ifconfig или
ip addr show .
В первом случае (ifconfig) листинг будет таким (думаю понятно что он разнится от настроек вашего компьютера и сетевых интерфейсов):
eth0 Link encap:Ethernet HWaddr 00:15:17:a3:07:40
inet addr:192.168.0.2 Bcast:192.168.0.255 Mask:255.255.255.0
inet6 addr: fe80::215:17ff:fea3:740/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:18468 errors:0 dropped:0 overruns:0 frame:0
TX packets:17082 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:100
RX bytes:14105124 (14.1 MB) TX bytes:2394159 (2.3 MB)
Память:c0a20000-c0a40000
eth1 Link encap:Ethernet HWaddr 00:15:17:a3:07:41
UP BROADCAST MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
Память:c0a00000-c0a20000
lo Link encap:Локальная петля (Loopback)
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:16436 Metric:1
RX packets:120 errors:0 dropped:0 overruns:0 frame:0
TX packets:120 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:9812 (9.8 KB) TX bytes:9812 (9.8 KB)
vboxnet0 Link encap:Ethernet HWaddr 0a:00:27:00:00:00
inet addr:192.168.56.1 Bcast:192.168.56.255 Mask:255.255.255.0
inet6 addr: fe80::800:27ff:fe00:0/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:79 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:0 (0.0 B) TX bytes:7380 (7.3 KB)Во втором случае (ip addr show) таким:
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP qlen 100
link/ether 00:15:17:a3:07:40 brd ff:ff:ff:ff:ff:ff
inet 192.168.0.2/24 brd 192.168.0.255 scope global eth0
inet6 fe80::215:17ff:fea3:740/64 scope link
valid_lft forever preferred_lft forever
3: eth1: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc mq state DOWN qlen 1000
link/ether 00:15:17:a3:07:41 brd ff:ff:ff:ff:ff:ff
4: vboxnet0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc vboxnetflt state UNKNOWN qlen 1000
link/ether 0a:00:27:00:00:00 brd ff:ff:ff:ff:ff:ff
inet 192.168.56.1/24 brd 192.168.56.255 scope global vboxnet0
inet6 fe80::800:27ff:fe00:0/64 scope link
valid_lft forever preferred_lft foreverВ обоих случаях нас интересует только тот интерфейс который называется
vboxnet0. Это тот ip-адрес который потом нужен будет при настройках FreeBSD, в моем случае он 192.168.56.1. Данный адрес был выставлен автоматически дефолтными настройками VirtualBox-а. Кому не нравиться данный адрес можете это поменять в настройках VirtualBox-а. Как и где пока не разбирался, если кто знает напишите в личку, дополню данный пост.
После того как выяснили настройки сетевого интерфейса vboxusers0, заходим в консоль FreeBSD и пишем команд:
#sysinstallпосле чего выскакивает незатейливое и не обремененное GUI меню, нас интересует раздел меню
Configure >> Networking >> Interfaces >> em0 и em1для настройки данных интерфейсов нам необходима информация о том какие сетевые интерфейсы были назначены и для чего при инсталяции FreeBSD в VirtualBox-е, это:
em0 Адаптер 1 (для независимой эмуляции удаленного сервера):Intel PRO/1000 T Server (Виртуальный адаптер хоста, 'vboxnet0')
em1 Адаптер 2 (для выхота в интернет):Intel PRO/1000 T Server (NAT)
для
em0 прописываем 192.168.56.2, отключаем DHCP, для разработчика Apache c плавающим ip как-то странным будет
для
em1 включаем DHCP и ipV6 ... и на этом заканчиваются все действия, пусть живет своей жизнью, он на самом деле нужен временно мне только на момент инсталляции, после был отключен в настройках VirtualBox-а. И тут все может еще зависеть от того кто у вас провайдер и как он вас подключает. Я был подключен через Ethernet (домашняя сеть).
после чего выходим из инсталлятора и проверяем содеянное командой в консоли FreeBSD:
#ifconfigрезультат должен быть примерно таким:
em0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
options=9b<RXCSUM,TXCSUM,VLAN_MTU,VLAN_HWTAGGING,VLAN_HWCSUM>
ether 08:00:27:54:b7:b5
inet6 fe80::a00:27ff:fe54:b7b5%em0 prefixlen 64 scopeid 0x1
inet 192.168.56.2 netmask 0xffffff00 broadcast 192.168.56.255
media: Ethernet autoselect (1000baseTX <full-duplex>)
status: active
em1: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
options=9b<RXCSUM,TXCSUM,VLAN_MTU,VLAN_HWTAGGING,VLAN_HWCSUM>
ether 08:00:27:6e:a3:b1
inet6 fe80::a00:27ff:fe6e:a3b1%em1 prefixlen 64 scopeid 0x2
inet 10.0.3.15 netmask 0xffffff00 broadcast 10.0.3.255
media: Ethernet autoselect (1000baseTX <full-duplex>)
status: active
lo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> metric 0 mtu 16384
inet6 ::1 prefixlen 128
inet6 fe80::1%lo0 prefixlen 64 scopeid 0x3
inet 127.0.0.1 netmask 0xff000000
Для проверки можно пропинговать из FreeBSD (192.168.56.2) в Ubuntu (192.168.56.1) или наоборот, и ip адреса установлены для моих настроек, у вас они могут отличаться.
#ping 192.168.56.1 или
#ping 192.168.56.2. И так же для проверки какой-нибудь внешний адрес, я взял ya.ru и пинговал из FreeBSD
и результат данной команд примерно следующий:
#ping 192.168.56.2
PING 192.168.56.2 (192.168.56.2) 56(84) bytes of data.
64 bytes from 192.168.56.2: icmp_seq=1 ttl=64 time=10.9 ms
64 bytes from 192.168.56.2: icmp_seq=2 ttl=64 time=0.195 ms
64 bytes from 192.168.56.2: icmp_seq=3 ttl=64 time=0.194 ms
64 bytes from 192.168.56.2: icmp_seq=4 ttl=64 time=0.125 ms
64 bytes from 192.168.56.2: icmp_seq=5 ttl=64 time=0.187 ms
64 bytes from 192.168.56.2: icmp_seq=6 ttl=64 time=0.125 ms
^C
--- 192.168.56.2 ping statistics ---
6 packets transmitted, 6 received, 0% packet loss, time 4998ms
rtt min/avg/max/mdev = 0.125/1.964/10.962/4.024 ms
#ping ya.ru
PING ya.ru (77.88.21.3): 56 data bytes
64 bytes from 77.88.21.3: icmp_seq=0 ttl=63 time=64.835 ms
64 bytes from 77.88.21.3: icmp_seq=1 ttl=63 time=65.443 ms
64 bytes from 77.88.21.3: icmp_seq=2 ttl=63 time=65.515 ms
--- ya.ru ping statistics ---
3 packets transmitted, 3 packets received, 0.0% packet loss
round-trip min/avg/max/stddev = 64.835/65.264/65.515/0.305 ms
То у вас все хорошо ... Можно двигаться дальше ...
Для любителей постучать по клавиатуре: присвоение свойств сетевым интерфейсам можно сделать и при помощи консоли но это более муторно ...
6. Установка FAMP (FreeBSD+Apache+MySQL+PHP)Возвращаемся в консоль FreeBSD и начинаем с обновления ports. Это необходимо для того чтоб взято было все самое исправленное и свежее ...
Выполняем следующие команды:
#portsnap fetch && portsnap extractдля проверки правильности сделанного вводим команду:
#portsnap updateесли результат такой:
Ports tree is already up to date.
Вы на верном пути и не забрели в дебри ...
Установка MySQL (я использовал версию 5.1, есть и более поздние и более ранние выбирайте сами в каталоге /usr/ports/databases). Для неё необходимо выполнить следующие комманды:
Непосредственно установка из ports
# cd /usr/ports/databases/mysql51-server
# make config && make install cleanОбновляем системные пути
# rehashУстанавливаем начальные базы данных, необходимые для работы MySQL
# mysql_install_db --user=mysqlУстанавливаем конфиг
# cp /usr/local/share/mysql/my-medium.cnf /usr/local/etc/my.cnfВключаем демона MySQL для запуска при загрузке
# echo 'mysql_enable="YES"' >> /etc/rc.confСтартуем MySQL
# /usr/local/etc/rc.d/mysql-server startУстановка Apache
Непосредственно установка из ports
# cd /usr/ports/www/apache22Установка преконфигурации на инсталляцию, укажите включение модуля для MySQL
# make configИнсталляция
# make install cleanВключаем демона Apache для запуска при загрузке
# echo 'apache22_enable="YES"' >> /etc/rc.confУстановка PHP
Непосредственно установка PHP из ports
# cd /usr/ports/lang/php5Установка преконфигурации на инсталляцию, укажите модуль к Apache
# make config Инсталляция
# make install cleanУстановка PHP-Extentions
Непосредственно установка PHP из ports
# cd /usr/ports/lang/php5-extensionsУстановка преконфигурации на инсталляцию, выбирайте модули которые вам нужны
# make config Инсталляция
# make install cleanИнсталляция конфигурации PHP
# cp /usr/local/etc/php.ini-dist /usr/local/etc/php.iniДополнительно настраиваем Apache, для решение проблем связанных с PHP-Extensions
# echo '000.000.000.000 localhost localhost.hostname' >> /etc/hosts (000.000.000.000 - ip-адрес хоста и hostname - имя хоста)
# echo 'apache22_http_accept_enable="YES"' >> /etc/rc.conf# ee /usr/local/etc/apache22/httpd.confправим в этом файле:
- закомментировать строку LoadModule unique_id_module libexec/apache22/mod_unique_id.so
- раскомментировать ServerName *:80
# ee /boot/default/loader.confправим в этом файле:
- в строчке accf_data_load="NO" меняем NO на YES
- в строчке accf_http_load="NO" меняем NO на YES
7. Настройка NFSОна была сделана с целью обеспечить связку: Написал в Ubuntu >> Протестировал во FreeBSD >> закачал на удаленный сервер. Все реализовано на одном каталоге.
Выбрал папку, настроил Ubuntu NFS-Server для этой папки, настроил NFS-Client для FreeBSD, прописал в Apache VirtualHosts в этой папке, настроил cron для автоматической заливки написанного и протестированного. По данному пункту на этом сайте очень большое количество статей, останавливаться подробно не вижу необходимости. Во FreeBSD настраивается так же как и в Ubuntu через fstab
Вот пожалуй и все ...
В оконцовке делаем:
# rebootДожидаемся загрузки системы и возвращаемся в Ubuntu ...
Запускаем броузер и в строке пишем 192.168.56.2 и если вы увидели надпись "It Works" Значит Apache работает.
Вроде ничего не забыл ...