Памятка по настройке CentOS
После перехода на Lion обнаружилось, что оракловый клиент под макосью больше нормально не работает. Вызов sqlpus вызывает «Segmentation fault: 11». Установка 32-битной версии клиента позволяет пользоваться плюсом (по слухам) но не решает проблему доступа к ораклу из php через oci8. Расширение oci8 ведь должно компилироваться для php, как 64-битная библиотека и с сдк от 32-битного инстанс-клиента ее сбилдить не получится.
Глобальное решение давно назрело и обкатано на работе — виртуальные машины.
Вот и дома я решил настроить какой-нибудь линукс в виртуалке, в качестве вебсервера. Кроме того, что его всегда можно будет откатить к любому сохраненному состоянию, единожды настроенную машину можно будет использовать на других тачках, да и если придется переустановить всю систему, не придется настраивать веб-сервер заново.
Вроде бы для этих целей неплохо подходит CentOS. Я взял версию 6.2, самую свежую на текущий момент и сделал виртуалку в бесплатном VirtualBox.
Сеть
Мои сетевые настройки:Теперь неплохо было бы подключиться к виртуалке по сети. Для этого в файле /etc/sysconfig/network-scripts/ifcfg-eth0 пишу следующее:
1 2 3 4 5 6 7 8 9 10 11 | DEVICE="eth0" HWADDR="08:00:27:62:0B:E4" NM_CONTROLLED="yes" ONBOOT="yes" NETWORK=192.168.0.0 IPADDR=192.168.0.100 NETMASK=255.255.255.0 TYPE=Ethernet GATEWAY=192.168.0.1 IPV6INIT=no DNS1=192.168.0.1 |
и делаю
1 | /etc/init.d/network restart |
ifconfig покажет состояние сетки.
Теперь можно ходить на виртуалку по ssh, но хотелось бы еще туда ходить за вебом.
Апач
1 2 | yum install httpd chkconfig --levels 235 httpd on |
Правим в конфиге, че нам надо:
1 | vi /etc/httpd/conf/httpd.conf |
Если что, апач можно перегрузить с новыми настройками:
1 | service httpd restart |
Разрешаем в файерволе хождение по 80 порту:
1 2 | iptables -I INPUT -p tcp --dport 80 -j ACCEPT service iptables save |
Я часто использую символические линки на папки в документ-руте, а апач все жаловался, что нет к ним доступа, не смотря на Options FollowSymLinks. Оказалось, дело в SELinux. В боевой ситуации неплохо было бы
1 | setenforce 0 |
Логи апача смотрим так:
1 | tail -f /var/log/httpd/access_log /var/log/httpd/error_log |
PHP
И прочее нужное хозяйство:
1 2 3 4 5 6 7 | yum install php yum install php-pear yum install php-devel yum install gcc yum install make service httpd restart pecl channel-update pecl.php.net |
Ставим ораклового клиента
На этот момент скачал у оракла эти файлы:
instantclient-sdk-linux-11.2.0.3.0.zip
instantclient-sqlplus-linux-11.2.0.3.0.zip
instantclient-basic-linux-11.2.0.3.0.zip
в /opt/oracle/
1 2 3 4 5 6 7 8 | yum install unzip unzip instantclient-basic-linux-11.2.0.3.0.zip unzip instantclient-sdk-linux-11.2.0.3.0.zip cd /opt/oracle/instantclient_11_2 ln -s libclntsh.so.11.1 libclntsh.so ln -s libocci.so.11.1 libocci.so |
OCI8 для php
1 2 3 4 5 6 7 8 | pecl download oci8 tar zxvf oci8-1.4.7.tgz phpize ./configure --with-oci8=shared,instantclient,/opt/oracle/instantclient_11_2 make make install echo "extension=oci8.so" > /etc/php.d/oci8.ini |
Переменные окружения
Теперь надо, чтобы у всех, в том числе у апача, были нужные переменные окружения, для этого в /etc/profile.d/oracle.sh написать:
1 2 3 4 | export SQLPATH=/opt/oracle/instantclient_11_2 export TNS_ADMIN=$SQLPATH export LD_LIBRARY_PATH=$SQLPATH:$LD_LIBRARY_PATH export PATH=$PATH:$SQLPATH |
Теперь у нас есть оракловый клиент, но сервер может находиться в другой сети, на работе, например и ходить туда надо как-нибудь через vpn, например.
Ставим pptp
1 2 3 | rpm -Uvh http://poptop.sourceforge.net/yum/stable/fc7/pptp-release-current.noarch.rpm yum install pptp yum install pptp-setup |
Создать / удалить подключение можно так:
1 2 3 | pptpsetup --create mars --server 99.16.20.45 --username pasha --password 123 --encrypt pptpsetup --delete mars service network restart |
Старт / стоп подключения (я написал в /etc/rc.local для автозапуска)
1 2 | pppd call mars killall pppd |
Впн-соединение устанавливается, но оракловый сервер по-прежнему недоступен. Надо все запросы в адрес этого сервера перенаправлять в туннель впн.
Роутинг
Чтобы запросы к сети 10.222.0.* шли в впн, надо /etc/ppp/ip-up.local написать:
1 | ip route add 10.222.0.0/24 dev ppp0 |
MTU
Если адрес сервера уже пингуется, но при попытке обменятьсяя данными впн-соединение сразу рвется, можно попробовать изменить mtu, я когда-то писал об этом.
1 | ifconfig ppp0 mtu 1200 |
Эту команду я тоже написал в /etc/ppp/ip-up.local, он будет выполняться каждый раз при установке впн-соединения.
Делаем ему
1 | chmod 700 /etc/ppp/ip-up.local |
Общие папки
Теперь хотелось бы иметь внутри виртуалки папку с исходниками сайта, которые редактируются в хост-системе, в моем случае в макоси.
Шарить папку с хоста гостю можно через ssh.
Ставим fuse:
1 2 3 4 5 | wget http://downloads.sourceforge.net/project/fuse/fuse-2.X/2.9.1/fuse-2.9.1.tar.gz?r=http%3A%2F%2Fsourceforge.net%2Fprojects%2Ffuse%2Ffiles%2Ffuse-2.X%2F2.9.1%2F&ts=1346143906&use_mirror=garr tar zxpfv fuse-*.gz ./configure make make install |
Ставим sshfs:
1 2 3 4 5 6 | wget http://downloads.sourceforge.net/project/fuse/sshfs-fuse/2.4/sshfs-fuse-2.4.tar.gz?r=http%3A%2F%2Fsourceforge.net%2Fprojects%2Ffuse%2Ffiles%2Fsshfs-fuse%2F2.4%2F&ts=1346142065&use_mirror=netcologne tar zxpfv sshfs-fuse-2.4.tar.gz ./configure make && make install ln -s /usr/local/lib/libfuse.so.2 /lib/ |
Теперь в виртуалке можно примонтировать папку с проектом с мака
1 | sshfs -o allow_other pavelmalinnikov@192.168.0.116:/Users/pavelmalinnikov/Sites/site /mnt/116/ |
Если надо, можно примонтировать и виндовс-папку без ssh
1 | mount -t cifs -o username=user //192.168.10.114/d$/web /mnt/114 |
Так я редактирую исходники сайта в любимом редакторе в макоси, а тестирую их, заходя браузером на виртуальный линукс.
Если что можно сделать покрасивее, пишите.
← Страница 404 | LinkedIn API → |
Ваш комментарий: