Instalar servidor jetty en linux desde código fuente

En muchas ocasiones queremos utilizar servidores ligeros y fáciles de administrar, pues para servir aplicaciones en java uno de los mejores es jetty.

Voy a explicar como ponerlos funcionamiento desde cualquier distribución de Linux (centos, red hat, Ubuntu, debian …)

Para poner en marcha el servidor de aplicaciones jetty necesitamos tener el Java Development Kit para (jdk), para servir aplicaciones hechas en java.

Para ello vamos a utilizar las versiones libres del jdk y lo descargaremos desde aquí: https://jdk.java.net/

Para el ejemplo voy a utilizar la versión: openjdk-13.0.1

Nos dirigimos al directorio /usr/local descargamos y descomprimimos:

cd /usr/local/
wget https://download.java.net/java/GA/jdk13.0.1/cec27d702aa74d5a8630c65ae61e4305/9/GPL/openjdk-13.0.1_linux-x64_bin.tar.gztar 
tar –xjvf openjdk-13.0.1_linux-x64_bin.tar.gz

Comprobamos que funciona.

/usr/local/jdk-13.0.1/bin/java -version
openjdk version "13.0.1" 2019-10-15
OpenJDK Runtime Environment (build 13.0.1+9)
OpenJDK 64-Bit Server VM (build 13.0.1+9, mixed mode, sharing---------------------------
jetty 9.4.12 

Ahora que ya tenemos el jdk funcionando lo siguiente en descargarnos y descomprimir la versión de jetty que queramos:

Para el ejemplo voy a utilizar la versión: jetty-distribution-9.4.24

wget https://repo1.maven.org/maven2/org/eclipse/jetty/jetty-distribution/9.4.24.v20191120/jetty-distribution-9.4.24.v20191120.tar.gz
tar -xzvf jetty-distribution-9.4.24.v20191120.tar.gz

Ahora lo siguiente que haremos es añadir la ruta del jdk para que la utilice el jetty al arrancar.

vi /usr/local/jetty-distribution-9.4.24.v20191120/bin/jetty.sh

JAVA="/usr/local/jdk-13.0.1/bin/java"

Lo siguiente que haremos es configurar el jetty para que sirva por el puerto 80

vi /usr/local/jetty-distribution-9.4.24.v20191120/start.ini

jetty.http.port=80

Y ya podemos arrancar el jetty y verlo en funcionamiento, arrancando con el siguiente comando:

/usr/local/jetty-distribution-9.4.24.v20191120/bin/jetty.sh start

jetty 9 en funcionamiento

En las siguientes entradas explico como utilizar el protocolo https con un certificado autofirmado habilitar-https-en-jetty-con-certificado-autofirmado y como crear un servicio en el arranque para centos 7 crear-servicio-para-jetty-en-centos-7

Solucionar error “425 Can’t open data connection” en filezilla server

No soy muy amante de Windows server, pero me he visto obligado a utilizar un numerosas ocasiones por diferentes motivos.

El otro día me encontré con el típico poltergeist de Windows y no me permita listar los ficheros de un usuario ftp.

El ftp funcionaba bajo filezilla server con los puertos abiertos, sorprendentemente dejaba al usuario loguear pero no listar sus ficheros.

Mostrando el siguiente error:

“425 Can’t open data connection”

Para solucionar tuve que darle permisos al programa desde el firewall.

Clicando en Firewall -> Permitir un programa o una características a través de firewall de windows -> Permitir otro programa -> C:\Program Files (x86)\FileZilla Server\filezillaserver.exe

Con este pequeño cambio ya se listan los directorios y ficheros del usuario ftp.

Buscar ip y hora de acceso en el log de apache con cat, grep y cut

Dentro del mundo de los sistemas, es muy común que nos pidan que quieren saber a qué hora y que ip accedió a determinada página web.

Voy a explicarlo como hacerlo de una manera, muy sencilla concatenando los comandos cat , grep y cut.

Con cat listaremos el fichero de acceso

cat /var/log/apache/access_log

Lo uniremos con el comando grep para buscar los acceso a index.php

grep – 'index.php'

Y por último filtraremos las columnas que necesitamos con cut, seleccionando las filas de la ip y la hora (-f1,4,5) y el delimitador a usar (espacio en blanco-d’ ‘)

cut -f1,4,5 -d' '

La juntamos todo con pipes y lo pintamos en un fichero de texto.

cat /var/log/apache/access_log | grep -i 'php' | cut -f1,4,5 -d' ' > accesos.txt

Con esta manera sencilla podemos  controlar los acessos por ip y fecha en las paginas web

Actualizar la hora en linux con NTPDATE y HWCLOCK

Un problema comun que nos encontramos muchas veces es que la hora del sistema no es la misma que con la que estamos trabajanda.

Pero esto podemos cambiarlo facilmente con ntpdate y hwclock.

Ntpdate es un comando que utiliza el protocolo Network Time Protocol (NTP) para sincronizar los relojes de los sistemas informáticos.

Existen muchos servidores para utilziar el protocolo NTP, en el ejemplo voy a utilizar el oficial en España. hora.roa.es

Con el comando “ntpdate -s hora.roa.es” actualizamos la hora del sistema y con el comando “hwclock –hctosys” forzar al sistema a estar sincronizado, con lo que combinando los comandos y configurandolo en el crontab obtenemos un perfecta tarea para mantener sincronizado el sistema informatico.

crontab -e
# Sincronizamos la hora de madrugada
10 5 * * * ntpdate -s hora.roa.es; hwclock --systohc

Listar directorios en linux y ordenar por tamaño

En determinadas ocasiones y mas en equipos compartidos se disparan los tamaños de los directorios y queremos saber cual son los que mas ocupan.

En en linux se realiza de una manera muy sencilla con du (disk usage).

Con el comando du -s nombre_directorio sabremos el tamaño que tiene, y añadiendo -h nos dice el tamaño en formato legible para humanos, es decir en kb, mb, etc.

du -sh tmp
532M   tmp

Ahora que ya sabemos el espacio de un directorio queremos saber, el espacio de su contenido y lo haremos añadiendlo el parametro –max-depth=1

cd /tmp
du -h --max-depth=1
900K    ./Example
4.0K    ./Foredettinghelgen
44K     ./IssueTrackerBlogInterface
1.9M    ./IssueTrackerProduct
12K     ./fried
2.1M    ./ies4linux-2.0.5
4.8M    ./pyexcelerator
52K     ./levenstein
4.0K    ./newitpdesign
4.7M    ./photoresizing
69M     ./databases
4.5M    ./i18nextract-sa
532M    .

Y ya por ultimo si lo queremos tener ordenado por tamaño añadimos el comando sort

cd /tmp
du --max-depth=1 | sort -n
4       ./Foredettinghelgen
4       ./newitpdesign
12      ./fried
44      ./IssueTrackerBlogInterface
52      ./levenstein
900     ./Example
1856    ./IssueTrackerProduct
2140    ./ies4linux-2.0.5
4528    ./i18nextract-sa
4796    ./photoresizing
4872    ./pyexcelerator
70392   ./databases
544608  .

Con estos sencillos comandos puedes obtener el tamaño de tus directoiros y ordenarlos segun tus necesidades.

Ver fichero en linux sin comentarios

A veces nos encontramos con que queremos editar un fichero y esta lleno de comentarios y se hace dificil de leer, pues voy a explciar una manera muy sencilla de mostrar el fichero sin los famosos comentarios.

Para ver el fichero sin comentarios utilzaremos el comando grep.

Partimos del comando grep “#” comentarios.txt que lo que lo que haces es mostarnos las lineas con comentarios (caracter #):

grep "#" comentarios.txt
#Comentario 1
#Comentario 2

Lo siguiente es lanzar el comando grep -v “#” comentarios.txt para que nos muestra el resultado inverso.

grep -v "#" comentarios.txt
Texto 1
Texto 2

Y si lo que queremos es guardarlo en un fichero a parte redirigimos las salida con grep -v “#” comentarios.txt > sincomentarios.txt:

grep -v "#" comentarios.txt > sincomentarios.txt

cat sincomentarios.txt
Texto 1
Texto 2

Con estos sencillos comandos podemos servirnos para omitir comentarios en los ficheros

¿Como solucionar el error “curl: (60) SSL certificate problem: unable to get local issuer certificate “?

Estamos ante un error poco común, si has instalado curl desde repositorio con yum o con apt probablemente nunca encontraras un error de este tipo.

Este error suele aparecer en distros antiguas y esta relacionada con el cambio de versión de curl, si te ha salido este error es porque seguramente hayas actualizado curl compilándolo y no hayas incluido el certificado de confianza.

Tambien puede aparecer al intentar hacer un wget con las nuevas versiones de openssl:

OpenSSL: error:1407742E:SSL routines:SSL23_GET_SERVER_HELLO:tlsv1 alert protocol version
 Unable to establish SSL connection

Estos errores son debidos a que en versiones antiguas de curl o openssl no se establecía relación de confianza y no se necesitaba ningún certificado, pero las versiones actuales si lo requieren y al no encontrarlo el sistema devuelve este error.

La solución es bastante sencilla, basta con descargarse el certificado en la página oficial de  curl https://curl.haxx.se/ca/cacert.pem y guardarlo en la ubicación de los certificados de la versión de Linux en la que estés trabajando.

"/etc/ssl/certs/ca-certificates.crt",                // Debian/Ubuntu/Gentoo etc.
"/etc/pki/tls/certs/ca-bundle.crt",                  // Fedora/RHEL 6
"/etc/ssl/ca-bundle.pem",                            // OpenSUSE
"/etc/pki/tls/cacert.pem",                           // OpenELEC
"/etc/pki/ca-trust/extracted/pem/tls-ca-bundle.pem", // CentOS/RHEL 7

En el caso de que necesites utilizar curl con php bastaría con añadirlo al fichero de configuración php.ini

curl.cainfo = "/etc/ssl/certs/cacert.pem"
openssl.cafile  = "/etc/ssl/certs/cacert.pem"

Con estos pasos el error queda resuelto y podrás utilizar curl perfectamente.

¿Como listar el tamaño de los directorios en windows?

En sistemas linux listar el tamaño de los directorios se realiza de una manera muy sencilla con el comando du, pero en sistemas windows se complica un poco la cosa.

Utilizando un poco los recursos que ofrece windows sobre powershell en este enlace https://docs.microsoft.com/en-us/previous-versions/windows/it-pro/windows-powershell-1.0/ff730945(v=technet.10)?redirectedfrom=MSDN

Podremos obtener el listado de los directorios y su tamaño con este “corto” comando:

Get-ChildItem |
Where-Object { $_.PSIsContainer } |
ForEach-Object {
  $_.Name + ": " + (
    Get-ChildItem $_ -Recurse |
    Measure-Object Length -Sum -ErrorAction SilentlyContinue
  ).Sum
}

Obtiendo el tamaño en bytes de la carpeta c:\xammp\apache por ejemplo

PS C:\xampp\apache> Get-ChildItem |
>> Where-Object { $_.PSIsContainer } |
>> ForEach-Object {
>>   $_.Name + ": " + (
>>     Get-ChildItem $_ -Recurse |
>>     Measure-Object Length -Sum -ErrorAction SilentlyContinue
>>   ).Sum
>> }
bin: 43546245
conf: 296841
error: 223398
icons: 441289
include: 1674556
lib: 3924595
logs: 29455226
manual: 22458703
modules: 5769728
scripts: 407

Y si nos nos gusta en bytes podemos utilizar este comando para obtener el tamaño en megabytes.

Get-ChildItem | Where-Object { $_.PSIsContainer } | ForEach-Object { $_.Name + ": " + "{0:N2}" -f ((Get-ChildItem $_ -Recurse | Measure-Object Length -Sum -ErrorAction SilentlyContinue).Sum / 1MB) + " MB" }

Con estos “cortitos” comando podeis consultar el tamaña de los directorios de forma sencilla, cuando quieres saber por donde se escapa el tamaño del disco.