Error 'transmit timed out' en VM Linux en Hyper-V

En una migración de una VM CentOS a una granja Hyper-V, la interfaz de red dejó de funcionar. De acuerdo al System Center Virtual Machine Manager (SCVMM), la VM tenía atachada un tarjeta de red legacy. A continuación la información del sistema de la tarjeta de red:

1
2
3
4
5
6
7
8
9
10
[root@svn-qa]# ethtool -i eth0
driver: tulip
version: 1.1.15
firmware-version:
bus-info: 0000:00:0a.0
supports-statistics: no
supports-test: no
supports-eeprom-access: no
supports-register-dump: no
supports-priv-flags: no

Además en los logs, se registrarón multiples errores del tipo transmit timed out, status fc678147, a continuación se puede ver un ejemplo de lo que registró el log:

El comando du de Linux en Windows

El comando du de Linux es un comando muy útil para conocer el uso del disco de forma recursiva desde un punto concreto del árbol de directorios.

Personalmente suelo usar el comando du de la siguiente forma du -csh /PATH/*, donde:

  • -c, muestra el tamaño total.
  • -s, solo muestra el tamaño total de cada directorio, contabilizando el tamaño de su contenido, es decir, no se muestra el detalle para cada elemento dentro de cada directorio sino la suma del tamaño total.
  • -h o -m, muestra el tamaño en un formato facilmente comprensible por humano (-h) o bien en MB (-m). El uso de uno u otro depende de si la salida generada por du será procesada por un script o no.

Windows no incorporá de forma nativa ningún comando similar al comando du de Linux aunque es posible descargar la utilidad Disk Usage (du) de Windows Sysinternals.

Incrementar el tamaño máximo del POST de Tomcat

Un equipo de desarrollo quería usar el Manager App de Tomcat para desplegar de los war). Aunque al intentar subir war de más de 50MB les arrojaba el siguiente error Message: FAIL - Tried to use command /upload via a GET request but POST is required.

El log manager.log registró el siguiente error:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
SEVERE: HTMLManager: FAIL - Deploy Upload Failed, Exception: org.apache.tomcat.util.http.fileupload.FileUploadBase$SizeLimitExceededException: the request was rejected because its size (68626547) exceeds the configured maximum (52428800)
java.lang.IllegalStateException: org.apache.tomcat.util.http.fileupload.FileUploadBase$SizeLimitExceededException: the request was rejected because its size (68626547) exceeds the configured maximum (52428800)
at org.apache.catalina.connector.Request.parseParts(Request.java:2929)
at org.apache.catalina.connector.Request.parseParameters(Request.java:3252)
at org.apache.catalina.connector.Request.getParameter(Request.java:1158)
at org.apache.catalina.connector.RequestFacade.getParameter(RequestFacade.java:382)
at org.apache.catalina.filters.CsrfPreventionFilter.doFilter(CsrfPreventionFilter.java:108)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
at org.apache.catalina.filters.SetCharacterEncodingFilter.doFilter(SetCharacterEncodingFilter.java:108)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:218)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:614)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:169)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:958)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:452)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1087)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:637)
at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:316)
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
at java.lang.Thread.run(Unknown Source)
Caused by: org.apache.tomcat.util.http.fileupload.FileUploadBase$SizeLimitExceededException: the request was rejected because its size (68626547) exceeds the configured maximum (52428800)
at org.apache.tomcat.util.http.fileupload.FileUploadBase$FileItemIteratorImpl.<init>(FileUploadBase.java:815)
at org.apache.tomcat.util.http.fileupload.FileUploadBase.getItemIterator(FileUploadBase.java:259)
at org.apache.tomcat.util.http.fileupload.FileUploadBase.parseRequest(FileUploadBase.java:283)
at org.apache.catalina.connector.Request.parseParts(Request.java:2859)
... 27 more

Apache: Instalar y configurar PHP-FPM (FastCGI Process Manager)

El servidor de PHP puede ejecutarse dentro de Apache como un módulo (mod_php) o como un servidor independiente. En caso de que corra como un servidor independiente, la comunicación entre Apache y el servidor PHP puede usar:

  • CGI: es un método de comunicación entre un servidor web y una aplicación externa, es decir, las aplicaciones CGI son ejecutadas por un proceso separado del servidor web. Este proceso es creado con cada petición CGI del servidor web y finalizado cuando termina su trabajo, lo cual hace que el rendimiento CGI sea limitado y poco escalable. Es independiente al lenguaje utilizado, es decir, CGI permite interconectar el servidor web con una aplicación externa programada en cualquier lenguaje. Es un método antiguo y en desuso debido principalmente a su pobre rendimiento.
  • FastCGI: Es una evolución de CGI donde existe un proceso persistente para procesar las peticiones CGI. Es indepediente al lenguaje utilizado, es decir, CGI permite interconectar el servidor web con una aplicación externa programada en cualquier lenguaje.
  • PHP-FPM: Es una alternativa a FastCGI para PHP, donde existe un demonio PHP en espera de peticiones CGI a través de un socket TCP o UNIX. Es exclusivo para conectar el servidor web con una aplicación PHP.

En esta entrada se verá como ejecutar multiples versiones de PHP en un mismo servidor usando PHP-FPM. La versión de PHP será configurada de forma individual para cada virtualhost.

Instalar HAProxy desde el código fuente

En esta entrada se verá como compilar e instalar HAProxy desde las fuentes.

Dependencias necesarias

En RedHat/CentOS se requieren los siguientes paquetes: make, gcc, pcre-devel, openssl-devel y zlib-devel. Se pueden instalar con:

1
yum install make gcc pcre-devel openssl-devel zlib-devel

Los errores que recibirá en caso de carecer de alguna de las dependencias son:

Error 'Cannot recover key' al configurar un conector SSL en Tomcat

Al configurar el conector Tomcat de Jira para que cifre las comunicaciones, tras reiniciar el servicio, Tomcat dió el siguiente error java.io.IOException: Cannot recover key y el conector no iniciaba.

A continuación el log del Tomcat:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
20-Feb-2017 08:56:48.994 SEVERE [main] org.apache.coyote.AbstractProtocol.init Failed to initialize end point associated with ProtocolHandler ["http-bio-8443"]
java.io.IOException: Cannot recover key
at org.apache.tomcat.util.net.jsse.JSSESocketFactory.init(JSSESocketFactory.java:518)
... 14 more
Caused by: java.security.UnrecoverableKeyException: Cannot recover key
at sun.security.provider.KeyProtector.recover(KeyProtector.java:328)
... 31 more
20-Feb-2017 08:56:48.997 SEVERE [main] org.apache.catalina.core.StandardService.initInternal Failed to initialize connector [Connector[org.apache.coyote.http11.Http11Protocol-8443]]
org.apache.catalina.LifecycleException: Failed to initialize component [Connector[org.apache.coyote.http11.Http11Protocol-8443]]
at org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java:106)
... 19 more
Caused by: org.apache.catalina.LifecycleException: Protocol handler initialization failed
at org.apache.catalina.connector.Connector.initInternal(Connector.java:962)
... 13 more
Caused by: java.io.IOException: Cannot recover key
at org.apache.tomcat.util.net.jsse.JSSESocketFactory.init(JSSESocketFactory.java:518)
... 19 more
Caused by: java.security.UnrecoverableKeyException: Cannot recover key
at sun.security.provider.KeyProtector.recover(KeyProtector.java:328)
... 31 more

JKS: Java keyStore II

Como se vió en la entrada JKS: Java keyStore, al configurar un conector en el servidor de aplicaciones Tomcat, es posible indicar la ruta de dos keyStores:

  1. keyStore, para albergar claves privadas que serán usadas por Tomcat para cifrar mediante SSL o TTLS las comunicaciones.
  2. trustStore, para albergar las entidades de certificación raíz, intermedias o directamente certificados que deben ser reconocidos como válidos por las aplicaciones que corren dentro del servidor de aplicaciones Tomcat.

La entrada anterior estaba orientada a la gestión de una keyStore de tipo trustStore. Esta entrada estará orientada en la gestión de una keyStore como almacen de claves privadas para cifrar el tráfico

Listar máquinas inactivas del AD

Hoy en el trabajo a un compañero le interesó sacar un listado de máquinas que no contactaban con el AD desde hacia más de 30 días, me pregunto por el tema e hice una busqueda en Microsoft Script Center, donde encontré Get Inactive Computer in Domain based on Last Logon Time Stamp.

El siguiente script PowerShell genera un listado csv separado por comas con el nombre de máquina y la marca temporal :

1
2
3
4
5
6
import-module activedirectory
$domain = "my-company.com"
$DaysInactive = 30
$CreateFile = "C:\Users\antonio.guillen\List_old_computer.csv"
$time = (Get-Date).Adddays(-($DaysInactive))
Get-ADComputer -Filter {LastLogonTimeStamp -lt $time} -Properties LastLogonTimeStamp | select-object Name,@{Name="Stamp";Expression={[DateTime]::FromFileTime($_.lastLogonTimestamp)}} | export-csv $CreateFile

List Inactive Computer in Domain based on Last Logon Time Stamp