Java – Instalar Glassfish en Ubuntu Server 14.04

Aunque ya no es necesario utilizar un servidor de aplicaciones como glassfish en nuestras aplicaciones, áun tenemos algunas que se ejecutan en uno.

Ahora me tocó instalar un servidor de aplicaciones desde cero. Entonces lo primero que hice fue instalar Ubuntu Server.
Una vez instalado, descargué Glassfish (Web Profile) con el comando:

wget http://download.java.net/glassfish/4.1/release/glassfish-4.1-web.zip -O ~/glassfish-4.1-web.zip

Para descomprimir el archivo, necesitamos primero instalar la herramienta unzip mediante el comando:

sudo apt-get install unzip

Para ejecutar el servidor vamos a necesitar, también, instalar java

sudo apt-get install openjdk-7-jdk

una vez instalados, hay que extraer los archivos de glassfish en alguna carpeta (yo elegí /opt)

cd /opt/
unzip ~/glassfish-4.1-web.zip

vamos a cambiar el propietario y el grupo de la carpeta por el nuestro

sudo chown usuario:grupo -R /opt/glassfish4

vamos a agregar temporalmente la carpeta de glassfish a nuestro PATH (también puedes hacerlo permanente) con el siguiente comando

export PATH=/opt/glassfish4/bin:$PATH

y vamos a iniciar el servidor de la siguiente manera

asadmin start-domain

si todo va bien, veremos el mensaje

Successfully started the domain : domain1
domain  Location: /opt/glassfish4/glassfish/domains/domain1
Log File: /opt/glassfish4/glassfish/domains/domain1/logs/server.log
Admin Port: 4848
Command start-domain executed successfully.

Ahora hay que abrir en un navegador la ip del servidor en el puerto 4848. Dado que Ubuntu Server no tiene instalado por defecto una interfaz gráfica, tenemos que hacerlo desde otra computadora.
Por default Ubuntu server bloquea todos los puertos. Entonces tenemos que abrir el puerto 4848 para poder acceder a la consola de glassfish.

sudo ufw enable
sudo ufw allow 4848

Nota: Si tenías instalado el servidor ssh tienes que abrir nuevamente el puerto mediante el comando sudo ufw allow 22. Si no, puedes instalarlo con el comando

sudo apt-get install openssh-server

Al ingresar a la url, por ejemplo http://glassfish-server:4848 o http://192.168.0.15:4848

nos va a mostrar un error que dice que debemos activar la administración segura para poder acceder a la consola de forma remota

Configuration Error
Secure Admin must be enabled to access the DAS remotely.

para activar esto debemos primero asignar una contraseña para el usuario admin

asadmin change-admin-password
asadmin restart-domain

y luego ejecutar

asadmin enable-secure-admin
asadmin restart-domain

Si sólo ejecutas el comando enable-secure-admin te mostrará el siguiente error

remote failure: At least one admin user has an empty password, which secure admin does not permit. Use the change-admin-password command or the admin console to create non-empty passwords for admin accounts.
Command enable-secure-admin failed.

Listo, ya podemos entrar a la consola y, por ejemplo, hacer el deploy de nuestra aplicación.

Fuentes:
https://glassfish.java.net/documentation.html
https://charleech.wordpress.com/2012/03/23/glassfish-version-3-1-2-secure-admin-must-be-enabled-to-access-the-das-remotely/
https://help.ubuntu.com/community/EnvironmentVariables

Anuncios

git – autenticación con llave privada

Si has configurado un servidor local necesitarás configurar al cliente con las llaves que generaste.

Lo único que tenemos que hacer es ejecutar el comando

ssh-add /ruta-a-tu-llave/mi-llave-rsa

nos debe pedir la contraseña (passphrase) de nuestra llave privada.

Con esto ya podríamos sincronizar nuestro repositorio con el servidor remoto

git pull origin master

o

git fetch origin master

Cuando reiniciemos nuestra máquina será necesario volver a ejecutar el comando ‘ssh-add’ e ingresar nuestra contraseña. Si quieres evitar esto, tendrías que remover la contraseña de la llave privada (lo cual no es recomendable) de la siguiente manera

ssh-keygen -p /ruta-a-tu-llave/mi-llave-rsa

ingresar tu calve anterior y dejar en blanco la nueva. Una vez hecho esto debes agregar la siguiente línea al archivo “~/.profile”

ssh-add /ruta-a-tu-llave/mi-llave-rsa &> /dev/null

este comando se ejecutará al iniciar tu sesión y ya no te pedirá el passphrase al intentar sincronizar.


Usuarios Windows

Para agregar tu llave privada en Git Bash, necesitas ejecutar los siguientes comandos.

Primero copiamos nuestra llave privada a la ubicación por default

cp /ruta/llave_privada_rsa ~/.ssh/id_rsa

con esto te pedirá la contraseña de tu llave privada cada vez que ejecutes un comando como “git fetch” (suponiendo que tenga clave).

Si no quieres estar tecleando tu contraseña cada vez, puedes utilizar un agente. Para ello, primero tenemos que levantar el servicio con el siguiente comando

eval `ssh-agent -s`

(notensé las comitas invertidas o backticks)

Una vez iniciado el agente, le pedimos que agregué nuestra llave

ssh-add

al invocarlo sin parámetros, utiliza la llave por default (~/.ssh/id_rsa)

Fuentes:
http://stackoverflow.com/questions/3466626/add-private-key-permanently-with-ssh-add-on-ubuntu
http://serverfault.com/questions/345103/public-key-authentication-ssh-asks-for-passphrase-after-rebooting-local-machin
http://winscp.net/eng/docs/faq_passphrase
http://stackoverflow.com/questions/112396/how-do-i-remove-the-passphrase-for-the-ssh-key-without-having-to-create-a-new-ke
http://stackoverflow.com/questions/4083079/how-to-run-git-ssh-authentication-agent

git – configurar un servidor local

Para configurar un servidor de git local podemos seguir la guía oficial.
La guía nos muestra los pasos necesarios para acceder a un repositorio de git mediante ssh, que es la forma más común para acceder (leer y escribir) a un repositorio. Esto debido a la seguridad y eficiencia que ofrece el protocolo ssh. Puedes leer sobre los distintos protocolos (local, http[s], git, ssh) disponibles en git aquí.

Bueno, lo primero que necesitamos es tener un servidor de ssh

sudo apt-get install openssh-server

Luego tenemos que crear al usuario ‘git’. Yo especifiqué el directorio del usuario para que no me creara el directorio /home/git

sudo adduser --home /home/cirovladimir/Apps/git

nos va a pedir una contraseña y algunos datos, podemos dejar vacíos los demás campos.

Luego nos logeamos como el usuario git y creamos el directorio ‘.ssh/’

sudo su git
cd
mkdir .ssh

a continuación vamos a generar las llaves para nuestros usuarios

ssh keygen -t rsa -C 'usuario_1@gmail.com' -f usuario_1_rsa
ssh keygen -t rsa -C 'usuario_2@gmail.com' -f usuario_2_rsa

nos va a generar un par de llaves para cada usuario, una pública (extensión .pub) y una privada

Hay que agregar las llaves públicas al archivo .ssh/authorized_keys

cat usuario_1_rsa.pub >> .ssh/authorized_keys
cat usuario_2_rsa.pub >> .ssh/authorized_keys

Ahora vamos a iniciar un repositorio para nuestro proyecto

mkdir -p repos/proyecto.git
cd repos/proyecto.git
git --bare init

cerramos la sesión del usuario git

exit

si ya tenemos un repositorio local que queremos sincronizar con el servidor que acabamos de configurar, hacemos lo siguiente

cd miproyecto
git remote add origin git@localhost:repos/proyecto.git
git push origin master

en este caso el servidor es local, si lo configuras en otra máquina puedes sustituir localhost por el nombre de la máquina o su ip.

Si al ejecutar el ‘push’ te arroja un error parecido al siguiente

Error: Agent admitted failure to sign

lo puedes resolver con el comando

ssh-add /ruta/usuario1

y te va a pedir el passphrase que utilizaste cuando generaste la llave.

Fuentes:
http://git-scm.com/book/en/Git-on-the-Server-Setting-Up-the-Server
http://git-scm.com/book/ch4-1.html
https://help.github.com/articles/generating-ssh-keys
https://help.github.com/articles/error-agent-admitted-failure-to-sign

Ubuntu – Mantener un proceso en ejecución

Necesitaba ejecutar un comando en una terminal remota via ssh. El problema es que ,cuando cerraba la sesión, el proceso también era terminado. Para evitar esto, existe un comando llamado “nohup”.
Para utilizarlo, una vez iniciada la sesión ssh en la terminal remota, ejecuta el comando de la siguiente forma

[usuario@remotebox usuario]$ nohup /ruta/al/comando argumentos &

Es importante que pongas el “&” al final.

Fuente:
intellectual fx

Ubuntu – Montar una carpeta remota con SSH

Bueno, en realidad es con sshfs. El artículo original lo encontré aquí.
Lo primero que tenemos que hacer es instalar el paquete sshfs mediante

sudo aptitude install sshfs

luego cargamos el modulo en el kernel

sudo modprobe fuse

Para poder accesar a las utilidades tenemos que configurar algunos permisos. Reemplaza <username> con tu usuario.

sudo adduser <username> fuse
sudo chown root:fuse /dev/fuse
sudo chmod +x /dev/fuse

Como nos hemos agregado al grupo fuse, necesitamos reiniciar la sesión para aplicar el cambio y poder continuar.
Ya sólo resta crear una carpeta y montar la carpeta remota en ella

mkdir carpetaLocal
sshfs <username>@<ipaddress>:/carpetaRemota carpetaLocal

Listo! Ya puedes accesar a carpetaLocal y ver los contenidos de la carpetaRemota

Si te aparece un error como

No such file or directory

Intenta poner las rutas completas en vez de las relativas

sshfs <username>@<ipaddress>:/home/<username>/carpetaRemota /home/<username>/carpetaLocal

Sincronizando carpetas con rsync

Hace tiempo publiqué un artículo de como sincronizar carpetas con unison, ahora veremos como hacerlo mediante rsync.

Para sincronizar 2 carpetas localmente utilizo el siguiente comando

sudo rsync –delete –exclude=”.*/” -avv /home/vladimir/origen/ /media/disk/destino

donde –delete le indica que elimine los archivos que existan en destino pero no en origen y la opción exclude para que no sincronice los archivos ocultos. Con ello origen y destino estarán sincronizados.

Si lo que quieres es sincronizar a una carpeta remota de forma segura, utilizando ssh, puedes utilizar el siguiente comando que encontré aquí

rsync -vauz –delete –rsh=ssh –stats /home/vladimir/origen usuario@server.address.com:/home/usuario/destino/

donde -v = verbose, -a = archive, -u =update , -z = compress. En vez de “server.address.com” puedes poner directamente la dirección IP.

También te puede ser de utilidad comparar las carpeta

Ubuntu – Comparar carpetas

Para comparar carpetas puedes utilizar el comando diff. A pesar de que el objetivo del comando es comparar archivos línea por línea, lo podemos utilizar para comparar el contenido de 2 carpetas.

Para utilizarlo basta ejecutar el siguiente comando

diff -ru carpeta1 carpeta2

Apenas descubrí que puedes especificar el parámetro -q para que no compare el contenido de los archivos

diff -ruq carpeta1 carpeta2

Tambien podemos utilizar el comando rsync para comparar carpetas. Esto tiene la ventaja de que puedes hacerlo con carpetas remotas, mediante ssh.
Para comparar una carpeta remota basta agregar el parámetro –dry-run o en su forma abreviada -n de la siguiente forma

rsync -avn /home/cirovladimir cirovladimir@192.168.0.3:/home/cirovladimir

Referencias
Ubuntu forum
linuxcommando.blogspot.com

http://serverfault.com/questions/59140/how-do-diff-over-ssh