Статьи

Использование виртуальной машины для игры с несколькими версиями PHP

Это повод узнать об инструменте виртуализации, с которым я не знаком, VirtualBox. Цель состоит в том, чтобы установить PHP 5.4, который еще не является стабильным выпуском, чтобы поиграть с новыми функциями, такими как черты, не нарушая настройки на моем основном компьютере (на котором работает сверхстабильный PHP 5.3). Хотя может быть возможно запустить их вместе (я не системный администратор), на самом деле проще установить один из них на виртуальной машине, которую можно выбросить, если что-то пойдет не так.

Виртуализация

Я обычно запускаю VMware, но на этот раз я хотел попробовать что-то еще. Я слышал хорошие отзывы о VirtualBox, поскольку он с открытым исходным кодом и выпущен под GPL2. Он был приобретен Oracle в рамках сделки с Sun Microsystems, но кроме смены фирменного наименования, я не думаю, что он сильно изменил свою позицию.

Хост операционная система в моем эксперименте Ubuntu 11,10, настольное издание. Пакет .deb доступен на веб-сайте VirtualBox, и я выбрал версию i386, так как у меня 32-битный хост.

Я также использую 32-разрядную версию для гостя : еще одну Ubuntu 11.10 , на этот раз в версии для сервера ; версия сервера быстрее, чем версия для настольного компьютера, и мне не нужен X-сервер для запуска кода PHP.

Создание машины

Я создал новую виртуальную машину, выделив 512 МБ ОЗУ и 8 ГБ диска . Этой конфигурации должно быть достаточно для сервера разработки, который никогда не будет поддерживать реальную нагрузку.

Жесткий диск , содержится в файле изображения, и выполнен в виде динамически распределяемый; Мне не нужна особая производительность, поэтому эта версия будет просто занимать дисковое пространство постепенно, так как она используется виртуальным экземпляром. После установки ssh, PHP и его зависимостей файл занимает 1,8 ГБ.

Мастер VirtualBox очень прост в использовании, и как только я впервые запустил компьютер, я выбрал .iso-файл Ubuntu Server, который был смонтирован и запущен для установки системы с нуля.

Что касается VMware, переключение между хостом и гостем заключается в щелчке между окнами; могут быть некоторые сочетания клавиш, но они обычно зависят от комбинации хост / гость. Например, специальные ярлыки, такие как Host + Del, перезагрузят гостя, отправив ему комбинацию Ctrl + Alt + Del. Однако работа в терминале непрерывно, как и для всех серверов, означает, что достаточно написать команды Unix.

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

Обратите внимание, что пока виртуальная машина не работает, вы должны изменить сетевой адаптер в его настройках, выбрав Bridged Adapter . Эта конфигурация заставит виртуальную машину получать новый IP-адрес в той же сети, что и хост, так же, как если бы он был подключен к Ethernet рядом с ним (при условии, что у вас есть маршрутизатор с поддержкой DHCP).

Компиляция и установка PHP

Ну, кроме ssh, простая в настройке среда PHP состоит из Apache и двоичного файла PHP. Оба будут предоставлены Ubuntu, но я намеревался использовать нестабильную версию PHP. В любом случае я всегда буду работать с ssh, чтобы я мог копировать и вставлять команды.

Таким образом, я установил Apache 2 (не поточная версия), но не ядро ​​php по умолчанию.

sudo apt-get install apache2-mpm-prefork

PHP 5.4 можно скачать с помощью wget:

wget http://downloads.php.net/stas/php-5.4.0beta2.tar.bz2
tar xvjf php-5.4.0beta2.tar.bz2
cd php-5.4.0beta2

Типичная команда ./configure для компиляции PHP включает в себя грушу, некоторые драйверы баз данных и другие вещи:

./configure --with-config-file-path=/etc/php5/apache2 \
--with-pear=/usr/share/php \
--with-bz2 \
--with-curl \
--with-gd \
--enable-calendar \
--enable-mbstring \
--enable-bcmath \
--enable-sockets \
--with-libxml-dir=/usr \
--with-openssl \
--with-regex=php \
--with-zlib \
--with-apxs2=/usr/bin/apxs2

Обратите внимание на параметр — with-apxs2, который позволит нам использовать PHP не только из командной строки, но и из Apache. Некоторые расширения, такие как PDO, включены по умолчанию и не требуют включения директив ./configure.

Фаза конфигурации заставит вас установить некоторые библиотеки, такие как build-essential (для компилятора GNU C), apache2-prefork-dev и библиотеки, связанные с выбранными вами расширениями (например, libxml2-dev, libcurl4-openssl-dev, libbz2- dev, libpng-dev).

Запускайте снова и снова ./configure, пока он больше не будет жаловаться на отсутствующие библиотеки. Команда make запускает фактическую компиляцию.

make

Выполнение make будет длиться вечно, особенно в виртуальной машине, которая должна совместно использовать центральный процессор со своим хостом. Запустите его и оставьте там во время обеда.
checkinstall (который также должен быть установлен) создает специальный пакет .deb: это альтернатива * make install *. Просто запустите его в исходной папке после компиляции.

sudo checkinstall
dpkg -i php*.deb

Перезапустите apache, чтобы увидеть PHP в действии:

если вы хотите помочь, запустите также набор тестов PHP с make test и разрешите программе отправлять результат обратно в команду PHP QA. Это нормально, чтобы получить красную полосу — многие ошибки или улучшения документированы с помощью неудачного теста, который будет исправлен в следующих выпусках.

Законченный?

Когда вы закончите играть с виртуальной машиной, у вас есть разные варианты:

  • выключение — обычная вещь: сигнал отправляется, как будто вы нажали кнопку питания; Вы также можете выполнить shutdown -h прямо сейчас на сервере.
  • Сохранение состояния виртуальной машины занимает моментальный снимок оперативной памяти и регистров, поэтому вы возобновите работу с того же состояния при повторном открытии VirtualBox. Это похоже на гибернацию, но выполняется от гипервизора вместо гостевой системы.
  • Выключение машины эквивалентно вытягиванию силового кабеля, поэтому делайте это только в том случае, если вы хотите симулировать аварию.