<\/p>\n\n\n\n
Recentemente me solicitaram colaborar em um problema de conex\u00e3o entre OracleXE 10.2g e PHP 5.6<\/p>\n\n\n\n
Por serem duas plataformas antigas, precisei montar meus servidores para emular tal situa\u00e7\u00e3o.<\/p>\n\n\n\n
Como na descri\u00e7\u00e3o n\u00e3o veio se era Apache ou Nginx e o comum era usar o Apache2 e me indicaram estar rodando em Ubuntu20, optei por Apache2.<\/p>\n\n\n\n
Este, ent\u00e3o, \u00e9 o roteiro que segui para construir um laborat\u00f3rio que emulasse essa situa\u00e7\u00e3o. Levantei dois servidores. Um para conter o Oracle XE e outro para o LAMP assim podia realizar meus testes.<\/p>\n\n\n\n
O que se segue \u00e9 o relato da saga.<\/p>\n\n\n\n
Repare que estamos rodando sempre como root. Caso queira usar um usu\u00e1rio (como de fato \u00e9 o certo a fazer) basta adicionar o No nosso caso \u00e9 root pois os cont\u00eaineres OpenVZ j\u00e1 rodam em ambiente seguro.<\/p>\n\n\n\n Usamos OpenVZ para criarmos nossas VPS. A imagem do CentOS 7 j\u00e1 t\u00ednhamos, mas nos faltava a do Ubuntu. Come\u00e7amos por ela. Se bem temos nosso pr\u00f3prio script para criarmos as VPS preferi colocar linha por linha o que foi feito para que fique mais claro… e de quebra algu\u00e9m se interessa em OpenVZ<\/p>\n\n\n\n Ap\u00f3s instalarmos o Ubuntu 16, procedemos com um upgrade para termos um 20.04 rodando o do-release-upgrade. Primeiro atualizamos de 16.04 para 18.04<\/p>\n\n\n\n E mais uma vez para irmos de 18.04 para 20.04<\/p>\n\n\n\n Como \u00e9 uma atualiza\u00e7\u00e3o de uma instala\u00e7\u00e3o nova, respondemos que sim a todas as perguntas…. como se fossemos usu\u00e1rios Windows.<\/p>\n\n\n\n Uma vez feito isso, reiniciamos a m\u00e1quina e testamos algumas coisas para ver se estava tudo ok.<\/p>\n\n\n\n Como nos pode ser \u00fatil ter um Ubuntu 20, decidimos guardar uma c\u00f3pia na forma de template.<\/p>\n\n\n\n Mas isso n\u00e3o faz parte do roteiro. Foi apenas um agrad\u00e1vel desvio.<\/p>\n\n\n\n A segunda m\u00e1quina \u00e9 uma CentOS 7 mas a criamos usando o script e a chamada ficou assim:<\/p>\n\n\n\n Dentro do CentOS realizamos as seguintes opera\u00e7\u00f5es:<\/p>\n\n\n\n No arquivo \/etc\/bashrc adicionamos uma chamada ao script que constr\u00f3i o ambiente dentro do qual os comandos do oracle podem funcionar como a seguir<\/p>\n\n\n\n (n\u00e3o esque\u00e7a do ponto seguido de um espa\u00e7o no inicio)<\/p>\n\n\n\n Liberamos algumas portas no firewall assim<\/p>\n\n\n\n Feito isso, criamos a partir do nosso micro um t\u00fanel assim:<\/p>\n\n\n\n Isso nos permitiu abrir o navegador localmente com o seguinte endere\u00e7o:<\/p>\n\n\n\n Usando o APEX, criamos um usu\u00e1rio como mostramos nesta figura:<\/p>\n\n\n\n Esse usu\u00e1rio e senha \u00e9 o que usaremos mais adiante para testarmos nossa conex\u00e3o.<\/p>\n\n\n\n Instalamos o apache2 da seguinte maneira<\/p>\n\n\n\n Como n\u00e3o nos interessa problemas de dom\u00ednio, seguran\u00e7a e coisas parecidas, deixamos ela como est\u00e1.<\/p>\n\n\n\n J\u00e1 instalar o php5.6 requer um pouco mais de voltas. Mais ou menos com quando um cachorro vai deitar.<\/p>\n\n\n\n Criamos um pequeno script para nos mostrar a situa\u00e7\u00e3o em E abrimos ele no navegador para visualizar se o PHP estava rodando e em qual vers\u00e3o<\/p>\n\n\n\n Reiniciamos o servidor para termos certeza que tudo est\u00e1 ok.<\/p>\n\n\n\n Fizemos download do basic-10.2.0.5.0-linux.zip<\/a> e sdk-10.2.0.5.0-linux.zip<\/a> deste endere\u00e7o: https:\/\/www.oracle.com\/database\/technologies\/instant-client\/linux-x86-64-downloads.html<\/a><\/p>\n\n\n\n E depois o instalamos<\/p>\n\n\n\n Na hora em que pergunte onde est\u00e1 o cliente instantclient, devemos indicar Dando tudo certo com a compila\u00e7\u00e3o, devemos adicionar o Outra coisa que precisamos fazer \u00e9 indicar onde ficou a livraria do instant-client como segue:<\/p>\n\n\n\n E finalmente reiniciamos o apache2 assim:<\/p>\n\n\n\n Navegando novamente no Finalmente, testamos nossa conex\u00e3o com um pequeno script colocado em E testamos o mesmo desde a linha de comando:<\/p>\n\n\n\n Se tudo ocorreu bem ele nos mostrar\u00e1 que a conex\u00e3o deu certo.<\/p>\n\n\n\n Podemos tamb\u00e9m testar usando o navegador:<\/p>\n\n\n\n Bem, com isso chegamos ao fim do problema da conex\u00e3o com vanilla PHP.<\/p>\n","protected":false},"excerpt":{"rendered":" Recentemente me solicitaram colaborar em um problema de conex\u00e3o entre OracleXE 10.2g e PHP 5.6 Por serem duas plataformas antigas, precisei montar meus servidores para emular tal situa\u00e7\u00e3o. Como na descri\u00e7\u00e3o n\u00e3o veio se era Apache ou Nginx e o comum era usar o Apache2 e me indicaram estar rodando em Ubuntu20, optei por Apache2. […]<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"spay_email":"","jetpack_publicize_message":"","jetpack_is_tweetstorm":false},"categories":[49,95],"tags":[],"jetpack_featured_media_url":"","jetpack_publicize_connections":[],"jetpack_sharing_enabled":true,"jetpack_shortlink":"https:\/\/wp.me\/p5O6UV-9H","jetpack-related-posts":[{"id":619,"url":"http:\/\/www.yeapf.com\/wp\/?p=619","url_meta":{"origin":601,"position":0},"title":"Subdom\u00ednio para um porto TCP\/IP","date":"mar\u00e7o 12, 2021","format":false,"excerpt":"Uma das serventias do proxy Apache \u00e9 poder redirecionar as requisi\u00e7\u00f5es feitas a um subdom\u00ednio para um servidor rodando em um porto diferente ou em um endere\u00e7o diferente ou uma mistura de ambos. Assim sendo, uma solicita\u00e7\u00e3o a db.exemplo.com poderia ser redirecionada para o porto 27017 localizada no mesmo servidor\u2026","rel":"","context":"Em "Servidores"","img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":616,"url":"http:\/\/www.yeapf.com\/wp\/?p=616","url_meta":{"origin":601,"position":1},"title":"Oracle XE 10.2g e PHP 5.6 sobre Ubuntu 20 (Segundo Round)","date":"mar\u00e7o 9, 2021","format":false,"excerpt":"Continuando a saga, o meu cliente precisou que o sistema dele funcionasse com pdo_oci. Isso fez com que fosse necess\u00e1rio instalar algumas coisas e compilar o m\u00f3dulo do php. Tudo o aqui feito precisa de ser super-usu\u00e1rio, ent\u00e3o a primeira coisa \u00e9 fazer login como root: sudo su - Fiz\u2026","rel":"","context":"Em "Desenvolvimento"","img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":485,"url":"http:\/\/www.yeapf.com\/wp\/?p=485","url_meta":{"origin":601,"position":2},"title":"Migrando HyperV para KVM","date":"outubro 16, 2018","format":false,"excerpt":"\u00c9 obvio que qualquer um que me conhe\u00e7a vai saber de como valorizo o KVM e tudo o que for software livre (Ali\u00e1s, qualquer coisa que seja\u00a0livre) Estes dias me veio o problema de migrar uma m\u00e1quina que estava em uma HyperV para o KVM. O problema se resume ao\u2026","rel":"","context":"Em "Servidores"","img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":473,"url":"http:\/\/www.yeapf.com\/wp\/?p=473","url_meta":{"origin":601,"position":3},"title":"CentOS 6.9 com PHP7.2 e Curl atualizado","date":"setembro 27, 2018","format":false,"excerpt":"Nosso sistema de gest\u00e3o de pequenas cl\u00ednicas utiliza um controle distribu\u00eddo de n\u00f3s para manter a sequencialidade do prontu\u00e1rio e a integridade dos dados entre outras coisas. Uma das exig\u00eancias desse imbr\u00f3glio todo \u00e9 que rode sobre SSL. Por raz\u00f5es de testes de compatibilidade, mantemos CentOS 6.9 em alguns servidores\u2026","rel":"","context":"Em "Servidores"","img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":25,"url":"http:\/\/www.yeapf.com\/wp\/?p=25","url_meta":{"origin":601,"position":4},"title":"Primeiros passos com YeAPF","date":"fevereiro 22, 2014","format":false,"excerpt":"Tive oportunidade de ver minha irm\u00e3 mais nova andar sozinha pela primeira vez e nunca mais esqueci da experi\u00eancia. \u00a0Anos depois naceram os filhos e o impacto \u00e9 tremendo. Brinco com quem programa usando YeAPF de que s\u00e3o meus filhos, carinhosamente. Por isso que os primeiros passos s\u00e3o importantissimos para\u2026","rel":"","context":"Em "Yet Another PHP Framework"","img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":38,"url":"http:\/\/www.yeapf.com\/wp\/?p=38","url_meta":{"origin":601,"position":5},"title":"BlackBerry QNX e o uso em aplicativos de sa\u00fade","date":"mar\u00e7o 8, 2014","format":false,"excerpt":"Meu primeiro contato com dispositivos m\u00f3veis foi na \u00e1rea comercial onde havia que fazer levantamento de dados.\u00a0 Naquela \u00e9poca nem se falava em wifi e a melhor forma de interface com o computador era o velho e querido RS-232.\u00a0 Voc\u00ea fazia o levantamento, depois ia at\u00e9 o computador, descarregava os\u2026","rel":"","context":"Em "Opini\u00e3o"","img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]}],"_links":{"self":[{"href":"http:\/\/www.yeapf.com\/wp\/index.php?rest_route=\/wp\/v2\/posts\/601"}],"collection":[{"href":"http:\/\/www.yeapf.com\/wp\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/www.yeapf.com\/wp\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/www.yeapf.com\/wp\/index.php?rest_route=\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"http:\/\/www.yeapf.com\/wp\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=601"}],"version-history":[{"count":6,"href":"http:\/\/www.yeapf.com\/wp\/index.php?rest_route=\/wp\/v2\/posts\/601\/revisions"}],"predecessor-version":[{"id":611,"href":"http:\/\/www.yeapf.com\/wp\/index.php?rest_route=\/wp\/v2\/posts\/601\/revisions\/611"}],"wp:attachment":[{"href":"http:\/\/www.yeapf.com\/wp\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=601"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/www.yeapf.com\/wp\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=601"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/www.yeapf.com\/wp\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=601"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}sudo<\/code> antes de cada comando.<\/p>\n\n\n\nGarantir os templates do OpenVZ<\/h2>\n\n\n\n
Ap\u00f3s uma busca, achamos este reposit\u00f3rio:
https:\/\/plug-mirror.rcac.purdue.edu\/ubuntu-cloud\/releases\/20.04\/release\/<\/a>
Mas ele se mostrou inadequado.
Optamos ent\u00e3o por usar o template do Ubuntu 16 dispon\u00edvel em http:\/\/mirror.yandex.ru\/mirrors\/download.openvz.org\/template\/precreated\/<\/a><\/p>\n\n\n\nCria\u00e7\u00e3o da primeira VPS<\/h4>\n\n\n\n
$ vzctl create 104 --ostemplate ubuntu-16.04-x86_64 --config basic\n$ vzctl set 104 --save --name lamp $ vzctl set 104 --save --onboot yes \n$ vzctl set 104 --save --hostname lamp.InovacaoSistemas.com.br \n$ vzctl set 104 --save --ipadd 192.168.1.104\/24 \n$ vzctl set 104 --save --searchdomain InovacaoSistemas.com.br\n$ vzctl set 104 --save --nameserver 1.1.1.1 --nameserver 8.8.4.4 \n$ vzctl set 104 --save --cpus 2 \n$ vzctl set 104 --save --ram 512M \n$ vzctl set 104 --save --swap 1G \n$ vzctl set 104 --save --diskspace 20G \n$ vzctl start 104 \n$ vzctl exec 104 passwd \n$ vzctl exec 104 apt-get update -y<\/code><\/pre>\n\n\n\nAtualiza\u00e7\u00e3o para Ubuntu 20.04<\/strong><\/h4>\n\n\n\n
O problema \u00e9 que como escolhemos a imagem m\u00ednima, tivemos que primeiro instalar a ferramenta e logo a seguir atualizar o sistema.<\/p>\n\n\n\n$ apt install ubuntu-release-upgrader-core<\/code>\n$ apt update -y\n$ apt upgrade -y<\/code><\/pre>\n\n\n\n\n$ do-release-upgrade<\/code><\/pre>\n\n\n\n\n$ apt update -y\n$ apt upgrade -y\n$ do-release-upgrade --mode=server --quiet<\/code><\/pre>\n\n\n\n$ vzctl stop 104\n$ cd \/vz\/private\/104\n$ tar -cvzpf \/vz\/template\/cache\/ubuntu-20.04-server-amd64.tar.gz .<\/pre>\n\n\n\n
Cria\u00e7\u00e3o da segunda VPS<\/h4>\n\n\n\n
$ .\/createCentos7VM.sh 102 oracleXE inovacaosistemas.com.br<\/code><\/pre>\n\n\n\nInstalando o Oracle 10.2 XE no CentOS<\/h4>\n\n\n\n
$ yum install epel-release\n$ yum update -y\n$ yum install libaio bc flex -y\n$ yum install install glibc.i686\n$ wget http:\/\/ftp.cs.stanford.edu\/pub\/fedora\/6\/i386\/oracle-xe-10.2.0.1-1.0.i386.rpm\n$ rpm -ivh oracle-xe-10.2.0.1-1.0.i386.rpm\n$ \/etc\/init.d\/oracle-xe configure\n<\/code><\/pre>\n\n\n\n. \/usr\/lib\/oracle\/xe\/app\/oracle\/product\/10.2.0\/server\/bin\/oracle_env.sh<\/code><\/pre>\n\n\n\n$ firewall-cmd --permanent --zone=public --add-port=8080\/tcp\n$ firewall-cmd --permanent --zone=public --add-port=1521\/tcp\n$ firewall-cmd --reload<\/code><\/pre>\n\n\n\n$ ssh root@192.168.1.102 -L8080:localhost:8080<\/pre>\n\n\n\n
http:\/\/localhost:8080\/apex<\/pre>\n\n\n\n
<\/figure>\n\n\n\nInstalando o Apache2 e o PHP5.6 no Ubuntu<\/h4>\n\n\n\n
$ apt get install apache2 -y<\/pre>\n\n\n\n
$ apt install software-properties-common<\/code> \n$ add-apt-repository ppa:ondrej\/php<\/code>\n$ apt update -y\n$ apt install -y php5.6<\/code><\/pre>\n\n\n\n\/var\/www\/html<\/code> chamado info.php<\/code> com o seguinte conte\u00fado:<\/p>\n\n\n\n<?php\n phpinfo();<\/pre>\n\n\n\n
http:\/\/192.168.1.104\/info.php<\/pre>\n\n\n\n
<\/figure>\n\n\n\nInstalando o cliente Oracle no Ubuntu<\/h4>\n\n\n\n
$ unzip basic-10.2.0.5.0-linux-x64.zip\n$ mkdir \/opt\/oracle_instantclient\n$ mv instantclient_10_2\/* \/opt\/oracle_instantclient\/\n$ unzip ..\/sdk-10.2.0.5.0-linux.zip\n$ mv instantclient_10_2\/* \/opt\/oracle_instantclient\/\n$ cd \/opt\/oracle_instantclient\/\n$ ln -s libclntsh.so.10.1 libclntsh.so\n$ apt-get install php5.6-dev -y\n$ apt-get install libaio-dev -y\n$ apt-get install php5.6-common php5.6-xml php5.6-cli -y\n$ apt-get install php-pear -y\n$ pecl channel-update pecl.php.net\n$ pecl install oci8-2.0.12<\/pre>\n\n\n\n
instantclient,\/opt\/oracle_instantclient<\/code><\/p>\n\n\n\noci8.so<\/code> aos php.ini da seguinte forma:<\/p>\n\n\n\n$ echo \"extension=oci8.so\" >> \/etc\/php\/5.6\/apache2\/php.ini\n$ echo \"extension=oci8.so\" >> \/etc\/php\/5.6\/cli\/php.ini<\/pre>\n\n\n\n
$ echo \/opt\/oracle_instantclient\/ > \/etc\/ld.so.conf.d\/oracle-instantclient.conf\n$ ldconfig<\/pre>\n\n\n\n
$ apachectl restart<\/pre>\n\n\n\n
http:\/\/192.168.1.104\/info.php<\/code> podemos confirmar que o OCI<\/code> est\u00e1 configurado como mostra a figura<\/p>\n\n\n\n
<\/figure>\n\n\n\n\/var\/www\/html<\/code> sob o nome testar-conexao-oracle.php<\/code> com este conte\u00fado: <\/p>\n\n\n\n<?php\n$conn = oci_connect(\"teste\", \"abc123\", \"192.168.1.102\/XE\");\nif ($conn) {\necho \"Conex\u00e3o realizada com sucesso\\n\";\n} else {\necho \"Erro na conex\u00e3o com o banco de dados\\n\";\n}<\/pre>\n\n\n\n$ php testar-oci8.php<\/pre>\n\n\n\n
http:\/\/192.168.1.104\/testar-oci8.php<\/pre>\n\n\n\n
<\/figure>\n\n\n\n