quarta-feira, 19 de outubro de 2011

Redireccionar ambiente gráfico através de SSH de uma segunda máquina

Acedendo remotamente a máquinas Solaris é necessário por vezes reencaminhar a parte gráfica para a máquina onde estamos (pois é o único monitor a que temos acesso). Usando o Xming e o PUTTY isto é relativamente fácil.

Contudo por vezes temos outra necessidade. Entrando numa máquina remota, usamos essa para aceder a outra. Como fazer para obter o ambiente gráfico desta segunda máquina?

É simples. Tendo tudo montado para receber os gráficos da primeira máquina basta iniciar a sessão na segunda máquina do seguinte modo:

ssh -X user@maquina.xpto.pt

Fontes gratuitas

http://www.azfonts.net/

terça-feira, 18 de outubro de 2011

Configuração two-way SSL no Apache

Para se obter uma configuração two-way SSL (comunicação SSL duas vias entre Cliente e Servidor) no Apache com certificados auto-assinados (self-signed) efectuar os passos seguintes (é uma das maneiras. eventualmente há melhores maneiras):
  • Parte-se do principio que o Apache já está configurado para SSL
  • Em cima desta configuração:
    • No ficheiro ssl.conf
      • Descomentar a linha
        SSLCACertificateFile /etc/apache2/ssl.crt/ca-bundle.crt
      • Dentro da tag <virtualhost> ...,</virtualhost> incluir uma linha do género
        Include /etc/apache2/vhost.d/*.conf
        que é o local ou o ficheiro que contém as configurações SSL mais específicas que irão ser efectuada
    • Supondo, por exemplo, que se quer proteger uma location com two-way SSL
      • <location />
        SSLVerifyClient optional
        SSLUserName SSL_CLIENT_S_DN_CN

        SSLRequire %{SSL_CLIENT_S_DN_CN} eq "Teste"

        </location>
    • Se não existir criar o ficheiro /etc/apache2/ssl.crt/ca-bundle.crt
    • Tendo o certificado cliente basta efectuar: cat client.crt > ca-bundle.crt
    • Restart do apache e tem-se comunicação 2 way SSL

Na location, a linha SSLRequire %{SSL_CLIENT_S_DN_CN} eq "Teste" indica que só os certificados de cliente que tenham o CN=Teste é que serão aceites. É possível efectuar outras configurações. Para mais detalhes ver: httpd.apache.org/docs/2.2/mod/mod_ssl.htm

Configuração two-way SSL no SoapUi

Para configurar two-way SSL (SSL duas vias) no SoapUI, é necessário antes de mais ter a versão 4 ou superior. Existem problemas com a versão 3.6.1 por isso o melhor mesmo é actualizar para a versão mais recente.

A configuração two-way SSL implica que existam dois certificados, um de Cliente e um de Servidor.

Para o cliente basta criar um ficheiro p12 com a chave publica e  privada, e de lá exportar o certificado de cliente para adicionar ao servidor.

Caso o certificado do servidor seja auto-assinado, é necessário adicionar esse mesmo certificado ao ficheiro p12 do cliente.

No SoapUi:

File -> Preferences

SSL Settings

Na KeyStore indicar o ficheiro p12 criado para o cliente.
Na KeyStore Password indicar a password para o ficheiro p12.


Criar o ficheiro de cliente p12 e respectivo certificado

Instalar, por exemplo, o programa KeyStore Explorer.

  1. Create a new KeyStore
    1. JKS
  2. Tools
    1. Generate Key Pair
    2. Ok
    3. Carregar no botão "Edit Name"
      1. Preencher os campos (pelo menos o CN deverá ser preenchido)
      2. Escolher um alias
      3. OK
      4. Escolher e confirmar a password privada
      5. Ok
      6. Ok
  3. Com o botão da direita carregar em cima da nova chave (vai-se exportar o certificado a importar no servidor)
    1. Escolher formato e nome de ficheiro
    2. Export
    3. Ok
  4. Salvar a keystore
    1. File -> Save
    2. Introduzir a password para a keystore
    3. Ok


quinta-feira, 13 de outubro de 2011

Axis2 e Weblogic

Devido a problemas de compatibilidade, (um WSDL em RPC) foi necessário criar um webservice em Axis2 e fazer deploy do mesmo em Weblogic 11g.

Para simplificar, usou-se o axis2.war para ser o container dos serviços.

Para a coisa funcionar em Weblogic 11g, o war do Axis2 tem de ser deployed exploded.
Para fazer isto basta, por exemplo, descomprimir o war para a directoria .../AdminServer/upload/axis2.

Depois instalar da maneira normal escolhendo a directoria axis2.

E tudo irá funcionar.

quarta-feira, 12 de outubro de 2011

Colocar Liferay em HTTPS com Apache Reverse Proxy

Tendo o Liferay instalado (versão 6.0.6) numa máquina e o Apache HTTP Server (versão 2.0) noutra máquina diferente a servir de Reverse Proxy, são necessários alguns passos para disponibilizar o Liferay em HTTPS.

No restante texto explica-se como fazer esta configuração em Solaris 10.

1.  Criar um certificado auto-assinado

Instruções detalhadas em http://www.akadia.com/services/ssh_test_certificate.html

1.1 Gerar uma RSA Private Key


Numa shell Solaris:
# /usr/sfw/bin/openssl

Introduzir o comando:
genrsa -des3 -out liferay.key 2048

Escolher uma pass phrase.

Irá gerar o ficheiro liferay.key.

1.2 Gerar um Certificate Signing Request

Numa shell Solaris:
#/usr/sfw/bin/openssl

Introduzir o comando:
req -new -key liferay.key -out liferay.csr

Introduzir a pass phrase escolhida para a chave privada (RSA Private Key).

Introduzir informação nos campos seguintes (exemplo):

Country Name (2 letter code) [US]:PT
State or Province Name (full name) [Some-State]:Lisboa
Locality Name (eg, city) []:Lisboa
Organization Name (eg, company) [Unconfigured OpenSSL Installation]:CFB
Organizational Unit Name (eg, section) []:FUTEBOL
Common Name (eg, YOUR name) []:LIFERAY
Email Address []:
--
A challenge password []:
An optional company name []:

Irá gerar o ficheiro liferay.csr.

1.3 Remoção da pass phrase da chave

Criar uma cópia da chave liferay.key e renomeá-la para liferay.key.futebol

De seguida executar numa shell Solaris:
#/usr/sfw/bin/openssl

Introduzir o comando:
rsa -in liferay.key.futebol -out liferay.key

Introduzir a pass phrase escolhida para a chave privada (RSA Private Key).

1.4 Gerar um certificado auto-assinado

Numa shell Solaris:
#/usr/sfw/bin/openssl


Introduzir o comando:
x509 -req -days 3650 -in liferay.csr -signkey  liferay.key -out liferay.crt

Irá gerar o ficheiro liferay.crt.


2. Copiar a chave e o certificado para o Apache


De seguida executar numa shell Solaris:
# mkdir /etc/apache2/ssl.crt
# mkdir /etc/apache2/ssl.key

# cp liferay.crt /etc/apache2/ssl.crt/ssl.crt
# cp liferay.key /etc/apache2/ssl.key/ssl.key


3. Configurar SSL no Apache








No ficheiro /etc/apache2/ssl.conf


Comentar:

#SSLRandomSeed startup builtin
#SSLRandomSeed connect builtin


Descomentar:

SSLRandomSeed startup file:/dev/urandom 512
SSLRandomSeed connect file:/dev/urandom 512


Alterar
SSLCertificateFile /etc/apache2/ssl.crt/server.crt

para

SSLCertificateFile /etc/apache2/ssl.crt/ssl.crt


Alterar
SSLCertificateKeyFile /etc/apache2/ssl.key/server.key

para

SSLCertificateKeyFile /usr/local/apache/conf/ssl.key/ssl.key


Alterar

<VirtualHost _default_:443>


para

<VirtualHost *:443>

4. Activar o SSL no Solaris
Verificar se o SSL está activo



Nnuma shell Solaris:
# svcprop -p httpd/ssl svc:network/http:apache2

Se false:

# svccfg -s http:apache2 setprop httpd/ssl=true
# svcadm refresh http:apache2
# svcprop -p httpd/ssl svc:network/http:apache2

Deverá agora dar true.

 5. Restart Apache

Testar

https://apache.reverse.proxy


Onde apache.reverse.proxy é o endereço da máquina onde está instalado o Apache.



6. Configuração do Reverse Proxy no Apache


No ficheiro http.conf ou noutro que seja incluído:

<Location / >
  ProxyPass http://liferay.location:8080/
  ProxyPassReverse http://
liferay.location:8080/
<Location />

Onde liferay.location é o endereço da máquina onde está instalado o Liferay.

Restart ao Apache


7. Configuração do Reverse Proxy no Liferay

Editar o ficheiro  ~/liferay-portal-6.0.6/tomcat-6.0.29/webapps/ROOT/WEB-INF/classes/portal-ext.properties


Acrescentar:

web.server.http.port=80
web.server.host=
apache.reverse.proxy


web.server.https.port=443
web.server.protocol=https

redirect.url.security.mode=ip
redirect.url.domains.allowed=
redirect.url.ips.allowed=127.0.0.1,LIFERAY_IP_MACHINE,APACHE_REVERSE_PROXY_IP_MACHINE
# Para não criar o esquema de demonstração
schema.run.enabled=true
schema.run.minimal=false

Restart ao Liferay.

Testar.
http://apache.reverse.proxy

Deverá abrir a página do Liferay.


8. Configuração do Reverse Proxy com SSL no Apache


<Location / >

  RewriteEngine On
  RewriteCond %{HTTPS} off
  RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}


  ProxyPass http://liferay.location:8080/
  ProxyPassReverse http://
liferay.location:8080/

<Location />

Restart ao Apache.


Testar.
https://apache.reverse.proxy

Deverá aparecer a página do Liferay em HTTPS.


Escrevendo http://apache.reverse.proxy dever-se-á ser redireccionado para https://apache.reverse.proxy

sexta-feira, 7 de outubro de 2011

Importação de WSDLs no Oracle Service Bus

A melhor maneira de evitar problemas na importação de WSDLs (problemas do género classes duplicadas, etc) no OSB é colocar os WSDLs e respectivos XSDs num só zip e usar a ferramenta de Bulk -> Zipped Resources.

Oracle Service Bus - Gerando correctamente WSDLs

Quando o OSB (versão 11.1.1.5.0) não está acessível directamente aos clientes (por detrás de um Reverse Proxy por exemplo), os WSDLs não são gerados correctamente, ficando o endpoint com o hostname da máquina onde está deployed o OSB.

Isto é uma situação que se deve evitar, pois está-se a expor nomes internos que não devem ser conhecidos fora.

Esta situação só ocorre se o OSB não estiver em Cluster.

Para corrigir o problema efectuar os seguintes passos:
  1. Criar um cluster
  2. Adicionar o servidor do OSB ao cluster
  3. No cluster, na tab HTTP configurar os campos Frontend Host e Frontend HTTP Port para os valores do Reverse Proxy por exemplo
  4. Parar o AdminServer e o servidor do OSB
  5. Editar o ficheiro config.xml conforme indicado a seguir
  6. Restart do Admin Server
  7. Restart do servidor OSB
  8. Verificar a geração de WSDLs
Pode-se também recriar o domínio do OSB, configurando o mesmo em cluster, e assim não haverá edição manual de ficheiros.

Agora a geração já será feita como deve ser.


Edição manual do ficheiro config.xml

Esta edição apenas é necessária se não se quiser recriar o domínio de raiz.
  • Substituir o nome do servidor do OSB pelo nome do cluster excepto nos casos seguintes:
    • <server>
      • <name>.....
      • <jta-migratable-target><user-preferred-server>....
      • <server-diagnostic-config><name>....
      • <virtual-machine-name>NOME_DO_DOMINIO_.....</virtual-machine-name>
    • </server>
    • Todos os valores nos vários <jms-server>
    • Todos os valores em <migratable-target>
    • Todos os valores nos vários <file-store>
    • Todos os valores nos vários <jms-system-resource>
    • Todos os valores nos vários <saf-agent>

terça-feira, 4 de outubro de 2011

Teclas Home, End, etc a funcionar na linha de comandos (bash) em Solaris

As teclas home, end em Solaris 10 na shell bash escrevem caracteres esquisitos (~) em fez de executarem a sua função espectável.

Para corrigir este problema executar os passos seguintes:

  1. Editar o ficheiro .profile
  2. Adicionar a linha: export INPUTRC=inputrc
  3. Salvar e fechar o ficheiro
  4. Criar o ficheiro inputrc
  5. Adicionar o conteúdo:



    set meta-flag on
    set input-meta on
    set convert-meta off
    set output-meta on
    
    "\e[1~": beginning-of-line
    "\e[4~": end-of-line
    "\e[5~": beginning-of-history
    "\e[6~": end-of-history
    "\e[3~": delete-char
    "\e[2~": quoted-insert
    "\e[5C": forward-word
    "\e[5D": backward-word
    




  6. Salvar e fechar o ficheiro
  7. Fazer logout e login
Solução encontrada em: http://www.cyberciti.biz/tips/freebsd-how-to-customized-home-del-insert-keys-for-bash-shell.html

Colocar as teclas de cursor a funcionar no vi em Solaris

Em Solaris 10, o vi vem com uma funcionalidade muito irritante que é a de não ter a funcionar nem o backspace nem o delete nem as teclas de cursor no modo de edição. As teclas de cursor por exemplo trocam minúsculas por maiúsculas e vice-versa.

A solução do problema não é difícil, bastando criar um ficheiro e colocar alguns mapeamentos que solucionam o problema.

Assim, criar na home do utilizador o ficheiro .exrc.

Dentro desse ficheiro colocar os mapeamentos pretendidos.
O conteúdo tem de ser escrito à mão e NÃO PODE SER COPIADO. Caso contrário não irá funcionar.
Os mapeamentos não podem ter espaços no final, nem pode haver linhas em branco no ficheiro.

Exemplo de ficheiro .exrc (NÃO COPIAR. Escrever no ficheiro o conteúdo, conforme instruções mais abaixo):


:map! ^[OA ^[ka
:map! ^[OB ^[ja
:map! ^[OC ^[la
:map! ^[OD ^[ha
:map! ^[[3~ ^[xa
:map! ^? ^[Xa

Para escrever o conteúdo usar os seguintes comandos (são comandos de controlo, por isso não podem ser copiados):

^[OA = CTRL-V + Seta-para-cima
^[ka = CTRL-V + ESCAPE + k + a

^[OB = CTRL-V + Seta-para-baixo
^[ja = CTRL-V + ESCAPE + j + a

^[OC = CTRL-V + Seta-para-direita
^[la = CTRL-V + ESCAPE + l + a

 ^[OD = CTRL-V + Seta-para-esquerda
^[ha = CTRL-V + ESCAPE + h + a

^[[3~ = CTRL-V + DELETE
 ^[xa = CTRL-V + ESCAPE + x + a

^H = CTRL-V + BACKSPACE
 ^[Xa = CTRL-V + ESCAPE + x + a


Explicação dos mapeamentos:

:map! ^[OA ^[ka -> Coloca a seta para cima a funcionar em modo de edição
:map! ^[OB ^[ja-> Coloca a seta para baixo a funcionar em modo de edição
:map! ^[OC ^[la-> Coloca a seta para a direita a funcionar em modo de edição
:map! ^[OD ^[ha-> Coloca a seta para a esquerda a funcionar em modo de edição
:map! ^[[3~ ^[xa-> Coloca o delete a funcionar em modo de edição, apagando o carácter seleccionado pelo cursor
:map! ^? ^[Xa-> Coloca o backspace a funcionar em modo de edição, apagando o carácter à esquerda do cursor


Esta foi uma configuração que escolhi.
Pode-se adaptar esta configuração usando outros comandos do vi, e acrescentando mais mapeamentos se necessário.

Documentação vi: http://hea-www.harvard.edu/~fine/Tech/vi.html

Onde encontrei a solução: http://www.jonathanlaliberte.com/2009/12/01/fix-arrow-keys-in-vi-on-solaris/comment-page-1/#comment-3548

segunda-feira, 3 de outubro de 2011

./dbstart: test: argument expected

Ao executar o comando dbstart para levantar uma base de dados Oracle se ocorrer o erro:

dbstart: test: argument expected

então, por incrível que pareça, o problema está no início do script.

Substiruir

#!/bin/sh

por:

#!/bin/bash


Fazer o mesmo no dbshut.

Pós-instalação de Base de Dados Oracle 11g em Solaris

Depois de instalada a base de dados em Solaris, é necessário configurar o ambiente para se poder aceder à base de dados em condições.

Assim como utilizador que vai correr a base de dados (neste caso oracle):

Editar o ficheiro .profile (caso se use bash)

ORACLE_SID=SID_BASE_DADOS
export ORACLE_SID
ORACLE_HOME=RAIZ_DO_PRODUTO(por defeito: /u01/app/oracle/product/11.2.0/dbhome_1)
export ORACLE_HOME

ORAENV_ASK=NO
export ORAENV_ASK

export PATH=$PATH:/usr/local/bin
. /usr/local/bin/oraenv



Sair e voltar a entrar para assumir as alterações no perfil.

Executar:

sqlplus / AS SYSDBA
@?/rdbms/admin/utlrp.sql


Fora do SQLPLUS, na linha de comandos executar:

$ORACLE_HOME/bin/genclntst


Editar o ficheiro /var/opt/oracle/oratab

Verificar se o conteúdo termina com Y. Se terminar com N então a base de dados não arranca automaticamente.


Ex:
oracle_sid:/u01/app/oracle/product/11.2.0/dbhome_1:Y



Para a base de dados arrancar e terminar automaticamente a cada reboot do servidor, criar como root o ficheiro /etc/init.d/dbora com o conteúdo seguinte:

#! /bin/sh  -x
#
# Change the value of ORACLE_HOME to specify the correct Oracle home
# directory for your installation.

ORACLE_HOME=/u01/app/oracle/product/11.1.0/db_1
#
# Change the value of ORACLE to the login name of the
# oracle owner at your site.
#
ORACLE=oracle

PATH=${PATH}:$ORACLE_HOME/bin
HOST=`hostname`
PLATFORM=`uname`
export ORACLE_HOME PATH

case $1 in
'start')
         su - oracle -c "$ORACLE_HOME/bin/dbstart $ORACLE_HOME" &
        ;;
'stop')
         su - oracle -c "$ORACLE_HOME/bin/dbshut $ORACLE_HOME" &
        ;;
*)
        echo "usage: $0 {start|stop}"
        exit
        ;;
esac
#
exit
 
 
Dar as seguintes permissões ao ficheiro dbora 
chgrp GRUPO_ORACLE dbora
chmod 750 dbora

Depois de criado o ficheiro executar:

ln -s /etc/init.d/dbora /etc/rc0.d/K01dbora
ln -s /etc/init.d/dbora /etc/rc3.d/S99dbora

Mais detalhes aqui e aqui.

Mudar prompt de root em Solaris 10

Ao contrario do que muitos rumores dizem, já não há problema em mudar a prompt de root em Solaris 10. Antes desta versão a shell que vinha por defeito não era linkada, o que trazia (segundo dizem) segurança acrescida em caso de problemas. Contudo a partir da versão 10 a shell por defeito já é linkada e por isso é indiferente se se muda a shell ou não.

Então os passos para mudar de shell de root:
  1.  /usr/ucb/vipw -> Alterar a shell para, por exemplo: /bin/bash
  2. Sair e voltar a entrar da sessão
  3. Editar o ficheiro .profile e acrescentar uma linha para ter a prompt como se quer. Exemplo: PS1="[\H \w] $ "

Configuração da prompt de uma shell Bash

Para alterar a prompt de uma shell Bash, basta configurar a variável PS1 com um 
formato, usando um ou mais caracteres especiais:
 
              \a     an ASCII bell character (07)
              \d     the date  in  "Weekday  Month  Date"  format
                     (e.g., "Tue May 26")
              \e     an ASCII escape character (033)
              \h     the hostname up to the first `.'
              \H     the hostname
              \j     the  number of jobs currently managed by the
                     shell
              \l     the basename of the shell's terminal  device
                     name
              \n     newline
              \r     carriage return
              \s     the  name  of  the shell, the basename of $0
                     (the portion following the final slash)
              \t     the current time in 24-hour HH:MM:SS format
              \T     the current time in 12-hour HH:MM:SS format
              \@     the current time in 12-hour am/pm format
              \u     the username of the current user
              \v     the version of bash (e.g., 2.00)
              \V     the release of bash,  version  +  patchlevel
                     (e.g., 2.00.0)
              \w     the current working directory
              \W     the  basename  of the current working direc­
                     tory
              \!     the history number of this command
              \#     the command number of this command
              \$     if the effective UID is 0, a #, otherwise  a
                     $
              \nnn   the  character  corresponding  to  the octal
                     number nnn
              \\     a backslash
              \[     begin a sequence of non-printing characters,
                     which could be used to embed a terminal con­
                     trol sequence into the prompt
              \]     end a sequence of non-printing characters
 
Exemplo: PS1="[\H \w] $" 
 
 Mais detalhes em aqui.