Jorge ArceArtículos, probablemente inconexos, con los problemas que encuentro en mi trabajo diario (o probando cosas en mi tiempo libre) y con sus soluciones.2024-03-18T20:31:29+00:00urn:md5:26972e7111f08c1ba2d010c9d30ee4dfDotclearError al instalar lubridate en Rurn:md5:6551b7c4e42d4b93965a72ae3513bc9b2018-03-14T17:46:00+01:002018-03-15T10:29:32+01:00Jorge <p>Según <a href="https://github.com/tidyverse/lubridate/issues/601#issuecomment-341179349">este bug</a>, el paquete lubridate no es compatible con RHEL 6 (supongo que tampoco con Centos 6). <br /></p>
<p><img src="https://jorgearce.es/public/.error_lubridate_m.png" alt="error_lubridate.png" style="display:table; margin:0 auto;" title="error_lubridate.png, Mar 2018" /><br /></p>
<p>Proponen 3 soluciones:</p>
<ul>
<li>Actualizar gcc: por los comentarios posteriores de esa página, parece que esto <strong>no funciona</strong>.</li>
<li>Instalar lubridate 1.6.0: <strong>no lo recomiendan</strong> porque el paquete tiene <em>bugs</em> importantes.</li>
<li>Instalar la última versión que no usó CCTZ: <em>devtools::install_github("tidyverse/lubridate@before-CCTZ")</em></li>
</ul>
<p>Esta última opción es la que parece menos mala y además bastante simple, sólo hay que instalar el paquete devtools y luego el paquete lubridate. Sin embargo, en entornos que no tienen acceso a github o sin Internet, esto no es tan sencillo y requiere de varios pasos.<br /></p>
<p>El resultado es el fichero <a href="https://jorgearce.es/public/lubridate_1.6.0.9009.tar.gz">lubridate_1.6.0.9009.tar.gz</a> que hay pegado en este artículo.<br /></p>
<p>Los pasos son los siguientes:</p>
<ol>
<li>Descargar <a href="https://github.com/tidyverse/lubridate/archive/before-CCTZ.zip">https://github.com/tidyverse/lubridate/archive/before-CCTZ.zip</a></li>
<li>Descomprimir el fichero zip</li>
<li>Renombrar el directorio lubridate-before-CCTZ a lubridate</li>
<li>Arrancar R</li>
<li>Instalar el paquete kinitr</li>
<li>Salir de R y ejecutar <strong>R CMD build lubridate</strong> Esto generará un fichero tar.gz que es el que usaremos desde R para instalar el paquete</li>
</ol>
<p>Listo, ya se puede instalar con:<br /></p>
<p>R<br /></p>
<p>install.packages("lubridate_1.6.0.9009.tar.gz", repos = NULL)<br /></p>https://jorgearce.es/index.php/post/2018/03/14/Error-al-instalar-lubridate-en-R#comment-formhttps://jorgearce.es/index.php/feed/atom/comments/1223Clientes con autocompletado y coloreado para MySQL/MariaDB y PostgreSQLurn:md5:ad32826d06aecad0557a1a961f76fc392018-02-21T17:43:00+01:002018-02-21T17:43:00+01:00Jorge <p>Encontrado en <a href="https://www.cyberciti.biz/open-source/command-line-hacks/mycli-awesome-mysqlmariadbpercona-mysql-client-with-auto-completion-and-syntax-highlighting/" hreflang="en">cyberciti.biz</a>.</p>
<p><img src="https://jorgearce.es/public/.pgcli_m.png" alt="pgcli.png" style="display:table; margin:0 auto;" title="pgcli.png, Feb 2018" /></p>
<h3>Cliente para MySQL/MariaDB<br /></h3>
<p><a href="http://www.mycli.net/" hreflang="en">mycli</a></p>
<h3>Cliente para PostgreSQL<br /></h3>
<p><a href="https://www.pgcli.com/" hreflang="en">pgcli</a></p>
<p>Ambos necesitan Python (y pip).</p>https://jorgearce.es/index.php/post/2018/02/21/Clientes-con-autocompletado-y-coloreado-para-MySQL/MariaDB-y-PostgreSQL#comment-formhttps://jorgearce.es/index.php/feed/atom/comments/1222yum update devuelve conflictosurn:md5:aa7336dc1d878e92af0f952bb1d4360f2017-11-23T18:59:00+01:002017-11-23T19:08:32+01:00Jorge <p>No sé muy bien por qué (probablemente un terminal que se cerró mientras estaba con un <em>yum update</em>) pero hace unos días que no podía actualizar un CentOS 7 porque me daba el error siguiente (y muchas líneas con Requires: Removing: Updated By: y Available:):</p>
<pre>
Processing Conflict: systemd-219-42.el7_4.4.x86_64 conflicts dracut < 033-499
</pre>
<p>No había forma de actualizar el systemd, ni eliminando dracut (que eliminaba el systemd y muchas más cosas) ni de ninguna otra forma.<br /></p>
<p>La solución fue complicada de encontrar pero sencilla de aplicar. En un foro vi que recomendaban usar el comando:</p>
<pre>
rpm -q initscripts dracut
</pre>
<p>Esto me devolvió 4 líneas:</p>
<pre>
initscripts-9.49.39-1.el7.x86_64
initscripts-9.49.37-1.el7_3.1.x86_64
dracut-033-502.el7.x86_64
dracut-033-463.el7_3.2.x86_64
</pre>
<p>Probé a eliminar la versión más moderna:</p>
<pre>
sudo yum remove dracut-033-502.el7.x86_64
</pre>
<p>A continuación volví a probar el <em>yum update</em> y me actualizó el dracut y todo lo que estaba pendiente de actualizar <img src="/themes/default/smilies/smile.png" alt=":)" class="smiley" /></p>https://jorgearce.es/index.php/post/2017/11/23/yum-update-devuelve-conflictos#comment-formhttps://jorgearce.es/index.php/feed/atom/comments/1220mutt: Server certificate has expiredurn:md5:67a64203c6e1bf018c9370c1c3a6855e2017-11-06T17:03:00+01:002017-11-06T17:03:00+01:00Jorge <p>Al arrancar el mutt desde la línea de comandos sale un aviso de que el certificado ha expirado y si queremos rechazarlo o aceptarlo una vez ("(r)eject, accept (o)nce").<br />
<img src="https://jorgearce.es/public/.mutt_cert_expired_m.png" alt="mutt_cert_expired.png" style="display:table; margin:0 auto;" title="mutt_cert_expired.png, Nov 2017" /></p>
<p>Lo que probablemente ocurre es que ha caducado el certificado que creó al instalar el dovecot (o creamos manualmente). La solución es sencilla, eliminar (o renombrar) los certificados caducados y crear uno nuevo con la utilidad mkcert.sh de dovecot:</p>
<pre>
mv /etc/pki/dovecot/certs/dovecot.pem /etc/pki/dovecot/certs/dovecot.pem.old
mv /etc/pki/dovecot/private/dovecot.pem /etc/pki/dovecot/private/dovecot.pem.old
/usr/libexec/dovecot/mkcert.sh
</pre>
<p>Ahora ya aparecerá la opción de aceptar siempre el certificado ("(r)eject, accept (o)nce, <strong>(a)ccept always</strong>").</p>https://jorgearce.es/index.php/post/2017/11/06/mutt%3A-Server-certificate-has-expired#comment-formhttps://jorgearce.es/index.php/feed/atom/comments/1219CentOS7 Minimal Desktop Installationurn:md5:b8fd6afadf4b9d11b38ff063b97149fe2017-10-23T17:10:00+02:002017-10-23T17:10:00+02:00Jorge <p>A veces, después de instalar un "CentOS 7 minimal" necesitamos un entorno gráfico, también mínimo. He encontrado los siguientes pasos en <a href="https://gist.github.com/shaunhess/73559b232422a89f2993" hreflang="en">Gist</a>:</p>
<ol>
<li>Descargar e instalar <a href="https://www.centos.org/download/" hreflang="en">CentOS 7 - Minimal</a></li>
<li>Instalar el grupo "X Window System": <strong>sudo yum groupinstall "X Window System"</strong></li>
<li>Instalar componentes de Gnome: <strong>sudo yum install gnome-classic-session gnome-terminal nautilus-open-terminal control-center liberation-mono-fonts</strong></li>
</ol>
<p>Se puede hacer que el entorno gráfico arranque automáticamente:</p>
<ol>
<li><strong>sudo unlink /etc/systemd/system/default.target</strong></li>
<li><strong>sudo ln -sf /lib/systemd/system/graphical.target /etc/systemd/system/default.target</strong></li>
<li><strong>sudo reboot</strong></li>
</ol>
<p>O arrancarlo manualmente con<br />
<strong>sudo startx</strong></p>
<p>Si se está instalando en una máquina virtual también hay que instalar lo siguiente:</p>
<ol>
<li><strong>sudo yum -y install open-vm-tools-desktop</strong></li>
<li><strong>sudo systemctl enable vmtoolsd.service</strong></li>
<li><strong>sudo reboot</strong></li>
</ol>https://jorgearce.es/index.php/post/2017/10/23/CentOS7-Minimal-Desktop-Installation#comment-formhttps://jorgearce.es/index.php/feed/atom/comments/1218¿Cuánta memoria usa cada programa?urn:md5:9fbd289cf334021a60c9f253169812e22017-10-19T17:54:00+02:002017-11-22T11:12:42+01:00Jorge <p>Relacionado con <a href="https://jorgearce.es/index.php/post/2017/10/18/%C2%BFCu%C3%A1nto-swap-usa-cada-procesos">la entrada de ayer</a> he recordado el script <a href="https://github.com/pixelb/ps_mem/raw/master/ps_mem.py" hreflang="en" title="ps_mem">ps_mem.py</a> de <a href="https://github.com/pixelb">Pádraig Brady</a>.<br /></p>
<p>Se instala con:</p>
<pre>
wget https://github.com/pixelb/ps_mem/raw/master/ps_mem.py
chmod +x ps_mem.py
</pre>
<p>o un simple yum:</p>
<pre>
yum install ps_mem
</pre>https://jorgearce.es/index.php/post/2017/10/18/%C2%BFCu%C3%A1nta-memoria-usa-cada-programa#comment-formhttps://jorgearce.es/index.php/feed/atom/comments/1217¿Cuánto swap usa cada proceso?urn:md5:e9e6f29eba35b54406502d48e135e5ef2017-10-18T11:35:00+02:002017-10-18T11:35:00+02:00Jorge <p>Me he encontrado este script en <a href="https://www.quora.com/How-can-you-determine-what-processes-are-using-swap-space/answer/Robert-Love-1?srid=JMe1" hreflang="en" title="Quora">Quora</a>:</p>
<pre>
#! /bin/bash
#
# swap.sh: Shows the swap usage of each process
# Author: Robert Love
swap_total=0
for i in /proc/[0-9]*; do
pid=$(echo $i | sed -e 's/\/proc\///g')
swap_pid=$(cat /proc/$pid/smaps |
awk 'BEGIN{total=0}/^Swap:/{total+=$2}END{print total}')
if [ "$swap_pid" -gt 0 ]; then
name=$(cat /proc/$pid/status | grep ^Name: |
awk '{print $2}')
echo "${name} (${pid}) ${swap_pid} kB"
let swap_total+=$swap_pid
fi
done
echo
echo "Total: ${swap_total} kB"
</pre>
<p>Se le añade un "chmod +x" y listo para usar.</p>https://jorgearce.es/index.php/post/2017/10/18/%C2%BFCu%C3%A1nto-swap-usa-cada-procesos#comment-formhttps://jorgearce.es/index.php/feed/atom/comments/1216Eliminar una regla de iptablesurn:md5:b4e2e72d7938532941b2831bb8994bdd2017-09-21T18:06:00+02:002017-09-21T18:06:00+02:00Jorge <p>El método más sencillo es eliminar una línea por su número.<br /></p>
<p>Primero obtenemos un listado de reglas con el número de línea:</p>
<pre>
iptables -L -n --line-numbers
Chain INPUT (policy ACCEPT)
num target prot opt source destination
1 DROP all -- 11.22.33.44 0.0.0.0/0
2 DROP all -- 55.66.77.88 0.0.0.0/0
3 DROP all -- 1.1.1.1 0.0.0.0/0
4 DROP all -- 2.3.4.5 0.0.0.0/0
5 DROP all -- 1.2.3.4 0.0.0.0/0
6 DROP all -- 5.6.7.8 0.0.0.0/0
7 DROP all -- 1.1.2.2 0.0.0.0/0
</pre>
<p>A continuación eliminamos la línea que queramos, por ejemplo la 5:</p>
<pre>
iptables -D INPUT 5
</pre>
<p>Comprobamos que se ha eliminado:</p>
<pre>
iptables -L -n --line-numbers
Chain INPUT (policy ACCEPT)
num target prot opt source destination
1 DROP all -- 11.22.33.44 0.0.0.0/0
2 DROP all -- 55.66.77.88 0.0.0.0/0
3 DROP all -- 1.1.1.1 0.0.0.0/0
4 DROP all -- 2.3.4.5 0.0.0.0/0
5 DROP all -- 5.6.7.8 0.0.0.0/0
6 DROP all -- 1.1.2.2 0.0.0.0/0
</pre>https://jorgearce.es/index.php/post/2017/09/21/Eliminar-una-regla-de-iptables#comment-formhttps://jorgearce.es/index.php/feed/atom/comments/1215KiTTY/PuTTY unexpected SSH2_MSG_UNIMPLEMENTED packeturn:md5:d4d87d9a412b0a61d9780a730eb9e30d2017-09-20T17:46:00+02:002017-09-20T17:46:00+02:00Jorge <p>Hoy he actualizado una máquina a Centos 7.4 y cada vez que intentaba abrir un nuevo terminal obtenía una ventana de error:
<img src="https://jorgearce.es/public/SSH2_MSG_UNIMPLEMENTED.png" alt="SSH2_MSG_UNIMPLEMENTED.png" style="display:table; margin:0 auto;" title="SSH2_MSG_UNIMPLEMENTED.png, Sep 2017" /></p>
<p>La solución es simple: ¡¡ actualiza KiTTY o PuTTY !!</p>https://jorgearce.es/index.php/post/2017/09/20/KiTTY/PuTTY-unexpected-SSH2_MSG_UNIMPLEMENTED-packet#comment-formhttps://jorgearce.es/index.php/feed/atom/comments/1214JupyterHub y SELinuxurn:md5:c594c521bc4a12aaebd89f085b9d55142017-08-24T16:19:00+02:002017-08-24T16:19:00+02:00Jorge <p>Parece que JupyterHub y SELinux no se llevan bien, el síntoma que detecté es que el formulario de login sólo funciona una vez, cuando sales de esa sesión no hay forma de volver a entrar hasta que se reinicia JupyterHub.</p>
<p>La solución del problema la he encontrado en <a href="https://serverfault.com/a/840648" hreflang="en">serverfault.com</a>.<br /></p>
<p>El primer paso es cambiar SELinux a "permissive". SELinux sigue activo pero se limita a generar un log con los problemas.</p>
<pre>
setenforce 0
</pre>
<p>A continuación intenta acceder a JupyterHub.<br /></p>
<p>Comprueba los errores en audit.log:</p>
<pre>
sudo grep denied /var/log/audit/audit.log
</pre>
<p>Obtendrás líneas como la siguiente:</p>
<pre>
type=AVC msg=audit(1500023853.749:2956): avc: denied { entrypoint } for pid=5441 comm="jupyterhub" path="/usr/sbin/unix_chkpwd" dev="xvda1" ino=200405 scontext=unconfined_u:unconfined_r:unconfined_t:s0 tcontext=system_u:object_r:chkpwd_exec_t:s0 tclass=file
</pre>
<p>Ejecuta la siguiente línea para crear un módulo local:</p>
<pre>
sudo grep denied /var/log/audit/audit.log| grep jupyter| audit2allow -M local-module
</pre>
<p>El módulo se instala con:</p>
<pre>
sudo semodule -i local-module.pp
</pre>
<p>Vuelve a cambiar SELinux a "enforcing":</p>
<pre>
sudo setenforce 1
</pre>
<p>El problema debería estar resuelto.</p>https://jorgearce.es/index.php/post/2017/08/24/JupyterHub-y-SELinux#comment-formhttps://jorgearce.es/index.php/feed/atom/comments/1212