Deepin

Ya hace tiempo que vengo utilizando Deepin como mi distribución de escritorio de Linux. Es algo que podemos cambiar, pero hace tiempo que Deepin es mi distribución preferida a la hora de montar un desktop.

Se trata de una distribución para desktop que busca ser elegante y fácil de utilizar para el usuario promedio.

No solo viene out-of-the-box con el software que uno espera (navegador Chrome, Correo Thunderbird, etc.) sino que trae algunas aplicaciones propias que buscan seguir la misma idea de sencillez y elegancia como un centro de aplicaciones (Deepin Store), Deepin ScreenShot y multimedia con Deepin Music y Deepin Movie.

Para ofimática viene ya pre-instalado todo el WPS Office que busca seguir la estética de los ciéntos de íconos y sub-menúes del MS-Office.

La base es GNU/Debian Linux, por lo que esta todo, todo lo demás que quieras instalar para personalizar tu deepin.

Hay una barra de aplciaciones preferidas donde puedes anclar tus aplicaciones más usadas y un launcher para buscar y lanzar tus aplciaciones.

El Centro de Control es un panel que se despliegua a la derecha y permite hacer tus configuraciones.

Es lindo, me gusta y lo uso y recomiendo y aquí está el enlace al sitio en español.

GNU/Linux Distribution Timeline

El proyecto GNU/Linux Distribution Timeline (GLDT) mantiene un diagrama de la evolución de las distribuciones de GNU/Linux desde 1992 a la fecha.

Se trata de un proyecto iniciado en 2006 y que actualmente mantiene unas 480 distribuciones activas.

Si desean acceder a esas distribuciones, uno de los mejores sitios es distrowatch.com.

Linux Containers, un enfoque práctico

Linux Containers es un tipo de virtualización a nivel de sistema operativo, que no tiene sobrecarga de emulación de hardware, resultando óptima para tener distintos Linux corriendo sobre Linux, logrando la máxima performance en las aplicaciones y mayor densidad en la cantidad de sistemas corriendo en el hardware real.

En esta presentación se aborda una explicación de los Linux Containers (LXC) con referencia práctica mediante ejempos de ejecución de contenedores, desde su creación hasta su destrucción. Asimismo, se repasa la arquitectura de los LXC para tener una idea de sus posibilidades de configuración y uso.

Público Objetivo: Usuarios de Linux. Administradores de centros de datos.

Requisitos: Se sugieren conocimientos de sistemas Linux, virtualización o sistemas operativos en general.

Conferencia dictada en:

(filmación de LinuxPay)

Traductor universal del Sysadmin (aka ROSETTA STONE)

Rosetta Stone

La piedra de Rosetta es un fragmento de una antigua estela egipcia de granodiorita inscrita con un decreto publicado en Menfis en el año 196 a. C. en nombre del faraón Ptolomeo V. El decreto aparece en tres escrituras distintas: el texto superior en jeroglíficos egipcios, la parte intermedia en escritura demótica y la inferior en griego antiguo. Gracias a que presenta esencialmente el mismo contenido en las tres inscripciones, con diferencias menores entre ellas, esta piedra facilitó la clave para el entendimiento moderno de los jeroglíficos egipcios; según lo describe Wikipedia en el artículo correspondiente.

Es generalmente por esta razón que se suele llamar piedra de Rosetta a cualquier presentación de traducciones de conceptos secuenciadas a varios lenguajes.

Hace tiempo los Administradores de Sistemas (Sysadmins) tenemos nuestra piedra de Rosetta que permite conocer los comandos que hacen las mismas cosas entre distintos sistemas operativos.

  • La original Rosetta Stone for Unix permite conocer comandos equivalentes entre AIX, A/UX, DG/UX, FreeBSD, HP-UX, IRIX, Linux, Mac OS X, NCR Unix, NetBSD, OpenBSD, Reliant, SCO, OpenServer, Solaris, SunOS 4, Tru64, Ultrix, UNICOS y OS/TASK.
  • La moderna Unix Rosetta Stone muestra la equivalencia de comandos entre Windows Server, RedHat Enterprise Linux, Debian, Ubuntu, ArchLinux, OS X Yosemite, OpenBSD, FreeBSD y SmatOS.

Así que a disfrutar de la multiplataforma.

El kernel Linux no es libre

gato_encerrado

Linux es el proyecto del kernel (núcleo) del sistema operativo que generalmente se llama igual, muchos lo llaman GNU/Linux, y empresas le ponen distintas marcas comerciales.

Resulta que el kenel hace muchos años que incorpora piezas de software oscurecido y de los cuales no se cuenta con documentación. ¿por qué? por una complicidad entre los productores de hardware que entregan estos códigos y los desarrolladores del kernel que lo incorporan y distribuyen a los usuarios.

Estas piezas no libres (porque no pueden ser ni modificadas ni estudiadas) empezaron siendo unas pocas, pero han ido creciendo en número con el correr del tiempo, llegando más de cien, en su mayoría drivers y archivos de firmware y se conocen como blob binarios

Entré al sitio oficial del proyecto Linux y descargué la última versión estable (4.3) y me puse a analizar de qué está compuesto.

Es un proyecto de software enorme:

  • Un archivo compactado de 83M
  • Descompactados ocupan 688M
  • Un total de 3439 carpetas
  • Un total de 51544 archivos
  • Más de 20 millones de líneas de código (según Wikipedia)

que tiene más de 11 años de desarrollo desde su primer versión estable.

Revisando sus archivos con file veo que está compuesto de:

$ find linux-4.3 -type f -exec file {} \; | cut -d: -f 2- | sort | uniq -c | sort -nr
38900  ASCII c program text
6226  ASCII English text
2955  ASCII text
1324  ASCII Pascal program text
 948  UTF-8 Unicode c program text
 199  UTF-8 Unicode English text
 180  HTML document text
 113  POSIX shell script text executable
  93  Bourne-Again shell script text executable
  93  ASCII C++ program text
  73  UTF-8 Unicode Pascal program text
  60  ASCII make commands text
  44  ASCII assembler program text
  43  OS/2 REXX batch file text
  39  XML  document text
  19  a /usr/bin/perl -w script text executable
  14  troff or preprocessor input text
  14  Netpbm PPM image text
  14  ASCII c program text, with very long lines
  13  a /usr/bin/perl script text executable
  12  ASCII FORTRAN program text
  10  a /usr/bin/python script text executable
   9  exported SGML document text
   9  empty
   9  data
   8  awk script text executable
   6  very short file (no magic)
   6  a perl script text executable
   6  SVG Scalable Vector Graphics image
   6  ISO-8859 English text
   6  Arhangel archive data
   6  ASCII Pascal program text, with very long lines
   5  lex description text
   5  ISO-8859 c program text
   4  UTF-8 Unicode (with BOM) English text
   4  ASCII mail text
   4  ASCII English text, with very long lines
   3  Perl5 module source text
   3  PDF document, version 1.4
   3  PDF document, version 1.3
   3  ISO-8859 Pascal program text
   3  ERROR: line 22: regexec error 17, (illegal byte sequence)
   3  Bio-Rad .PIC Image File 10799 x 8202, 8234 images in file
   2  diff output text
   2  a python script text executable
   2  a /usr/bin/python2 script text executable
   2  UTF-8 Unicode text
   2  TI-XX Graphing Calculator (FLASH)
   2  PDF document, version 1.2
   2  Non-ISO extended-ASCII c program text
   2  Netpbm PBM image text
   2  FIG image text, version 3.2
   2  DBase 3 index file
   2  Bio-Rad .PIC Image File 26915 x 28262, 25956 images in file
   2  ASCII text, with very long lines
   1  news or mail text
   1  core file (Xenix)
   1  a python2 script text executable
   1  a /usr/bin/perl -s script text executable
   1  XPack archive data
   1  UTF-8 Unicode c program text, with very long lines
   1  UTF-8 Unicode C++ program text
   1  SemOne archive data
   1  SAS 7+
   1  SAS
   1  Par archive data
   1  PPMN archive data
   1  Minix filesystem, V3, 20302 zones
   1  Minix filesystem, V3, 15648 zones
   1  LaTeX 2e document text
   1  ICE authority data
   1  GIF image data, version 89a, 257 x 303
   1  Bio-Rad .PIC Image File 10799 x 29216, 25460 images in file
   1  ASCII news text
   1  ASCII c program text, with escape sequences
   1  ASCII M4 macro language pre-processor text
   1  ASCII Java program text
   1  ASCII English text, with overstriking

y descargo el script deblob del sitio de la FSFLA y veo que esos archivos están contaminados con códigos que no puedo modificar, ni estudiar:

$ cd linux-4.3/
$ ../deblob-4.3 
Makefile: added -gnu to EXTRAVERSION
README: added blurb about GNU Linux-libre
include/linux/firmware.h: added non-Free firmware notification support
include/linux/ihex.h: added non-Free ihex firmware notification support
drivers/base/firmware_class.c: shorten non-Free firmware fail-to-load timeout

MICROCODE_AMD - AMD microcode patch loading support
arch/x86/kernel/cpu/microcode/amd.c: disabled non-Free firmware-loading machinery
arch/x86/kernel/cpu/microcode/amd.c: removed blobs

MICROCODE_AMD_EARLY - Early load AMD microcode
arch/x86/kernel/cpu/microcode/amd_early.c: removed blobs

MICROCODE_INTEL - Intel microcode patch loading support
arch/x86/kernel/cpu/microcode/intel.c: disabled non-Free firmware-loading machinery
arch/x86/kernel/cpu/microcode/intel.c: removed blobs

MICROCODE_INTEL_EARLY - Early load Intel microcode
arch/x86/kernel/cpu/microcode/intel_early.c: removed blobs

MICROCODE_EARLY - Early load microcode
Documentation/x86/early-microcode.txt: removed blobs

...

DRM_NOUVEAU - Nouveau (nVidia) cards
drivers/gpu/drm/nouveau/nvkm/engine/gr/gf100.c: disabled non-Free firmware-loading machinery
drivers/gpu/drm/nouveau/nvkm/engine/gr/gf100.c: removed blobs
drivers/gpu/drm/nouveau/nvkm/engine/falcon.c: disabled non-Free firmware-loading machinery
drivers/gpu/drm/nouveau/nvkm/engine/falcon.c: removed blobs
drivers/gpu/drm/nouveau/nvkm/engine/xtensa.c: disabled non-Free firmware-loading machinery
drivers/gpu/drm/nouveau/nvkm/engine/xtensa.c: removed blobs

...

Entonces, la próxima vez que diga que Linux es libre, sepa que no es así. El linux (kernel) que recibe con las distribuciones más conocidas no permitirá que haga ciertas cosas…. claro que usarlo podrá usarlo, de última es la llamada Libertad 0 (cero)

Más información sobre blob binarios:
* Conferencia: Binary Blobs Attack 2012
* Linux Foundation Driver Statement 2009

Linux networking con Team

Link_Aggregation1

Preparando los temas del curso de RedHat Enterprise Server 7 que dicto, me encuentro con la funcionalidad team o teaming para interfaces Ethernet. Hasta ahora había utilizado bonding que es muy simple de configurar, pero tengo que reconocer que teaming ofrece más potencia de configuración y monitoreo que el anterior bonding.

Este nuevo dispositivo de red «teaming» busca ser más rápido, escalable, simple, configurable en espacio de usuario y reemplazar a bonding utilizando una arquitectura diferente. En si, permite crear una interfaz virtual que agrupa varias interfaces Ethernet reales; el proceso se conoce como «channel bonding«, «Ethernet bonding«, «channel teaming«, «link aggregation«, etc. y el objetivo es aumentar el ancho de banda o la disponibilidad de la conexión.

En team se crea un dispositivo «team«, que es la interfaz virtual que tendrá la IP (v4 y/o v6), a la que se asocian «ports» que son las interfaces reales.  El kernel tiene un mínimo driver para el manejo de paquetes y toda la funcionalidad está dada por un daemon teamd que implementa los runners que manejan los modos en que trabajarán las interfaces (broadcast, roundrobin, activebackup, loadbalance, lacp).

Las principales ventajas de team son:

  • Control a nivel de espacio de usuario
  • Monitoreo de link por interfaz
  • API para administración
  • Backup y upload de configuración mediante JSON

Así que ahora tenemos:

Un dirver del kernel:

filename:       /lib/modules/4.0.4-301.fc22.x86_64/kernel/drivers/net/team/team.ko.xz
alias:          rtnl-link-team
description:    Ethernet team device driver
author:         Jiri Pirko <jpirko@redhat.com>
license:        GPL v2
depends:
intree:         Y
vermagic:       4.0.4-301.fc22.x86_64 SMP mod_unload
signer:         Fedora kernel signing key
sig_key:        6A:00:6A:CA:14:AF:B6:50:69:E2:C0:94:CB:35:EA:80:6E:85:C2:4B
sig_hashalgo:   sha256

Un daemon:

teamd — team network device control daemon

Una librería:

Description : This package contains a library which is a user-space
: counterpart for team network driver. It provides an API
: to control team network devices.

Una herramienta de control de teamd:

teamdctl — team daemon control tool

Una herramienta de control de las interfaces:

teamnl — team network device Netlink interface tool

El equipo de Redhat ha trabajado mucho para dejar funcionando team con NetworkManager, aunque algunas funcionalidades avanzadas (por ej. Bridge sobre el Team) todavía requieren de los comandos y los ‘viejos’ archivos.

Sugiero leer el artículo «If You Like Bonding, You Will Love Teaming» por el autor del driver Jiri Pirko y Rashid Khan; y para un completo estudio del tema el manual de Redhat Enterprise Linux 7.

Hablemos de Systemd

Systemd ha sido incorporado en las principales distribuciones de Linux con el objetivo de mejorar todo el sistema; no busca ser portable y con ello se perfila a crear un diferencial con todo lo existente hasta el momento.

Para los viejos administradores significa re-aprender muchas cosas que ya teníamos claras, por eso «Hablemos de Systemd» es una primer presentación de cómo funciona y qué involucra (sin llegar a niveles de profundidad).

Público objetivo: Administradores de sistemas Linux.

Requisitos: Nivel avanzado

Presentación dictada en:

Hablando con los demás DevOps
Hablando con los demás DevOps

fue mi primer presentación con streaming en directo con Periscope

Reiniciar servidor Linux

reboot175x175En un servidor o computadora que corra Linux la mayoría de los cambios quedan activos sin necesidad de reinicio; pero hay algunas oportunidades donde es obligatorio volver a iniciar el equipo.  En este artículo trato de listar cuáles son esos momentos de reinicio obligatorio.

Cambio de hardware – Dependiendo de la arquitectura y el tipo de dispositivos un cambio de hardware requiere apagar el equipo y por lo tanto reiniciar. Linux está preparado para autodetectar los cambios de harware, por lo que el hardware hot-swap funciona transparentemente. A su vez, en ambientes donde el hardware puede ser configurado a demanda (como virtualización) Linux va a detectar las alteraciones de CPU, Memoria y dispositivos en forma normal.

Actualización del kernel – A diferencia de otros sistemas operativos, en Linux es posible actualizar la mayoría del sistema sin reiniciar, pero los administradores sabemos que actualizar el kernel requiere reiniciar el equipo.  No obstante, a partir de Abril de 2015 con la versión 4.0 el kernel incluye la funcionalidad de «no reboot patching» y para esto existen algunas opciones como Ksplice (GPL), kpatch de RedHat o kGraft de SuSE; así que próximamente nuestros kernel se actualizarán sin reiniciar.

Desactivar o activar SELinux – Pasar el sistema de seguridad SELinux del kernel de Enforced a Disabled o viceversa, requiere reiniciar el sistema como puede verse en los manuales de administración RedHat

Modificar filesystem del sistema – Para cambiar tamaño de una partición que aloja un filesystem del sistema es necesario desmontarla y esto se hace reiniciado con otro sistema (por ejemplo live-CD de PartMagic). Si bien algunos filesystems pueden ser agrandados mientras están montados, podemos entender que esta es otra razón de reinicio – Gracias Arlequín y @alfrenovsky por los comentarios.

Actualización de librerías (glibc) – Cuando se actualizan las librerías dinamicas, los ejecutables que están corriendo quedan vinculados (linked) a las librerías antiguas, por lo que es recomendable reiniciar los daemons que quedan afectados. Pero cuando se instala una nueva versión de la librería glibc se afectan la mayoría de los procesos (por no decir, todos); en esos casos la opción más fácil es reiniciar todo el sistema para que los ejecutables queden corriendo vinculados a las nuevas librerías glibc. – Gracias El G@llego por aporte.

¿conoces algun otro motivo por el que es requerido reiniciar Linux?  Por favor, dejame tu comentario e ire actualizando este artículo.

Enviar correo SMTP+SSL por telnet

No es precisamente telnet ya que telnet no implementa SSL, pero me parece un buen título para explicar a que se refiere este artículo.

Siguiendo con el artículo de «Correo POP3+SSL por telnet», ahora explico cómo hacer telnet (a Gmail) para enviar correo.

Obtener usuario/clave

El usuario y clave son pasados codificados en base64, por lo que antes de empezar conviene tener el string de validación, con alguno de estos dos comandos:

$ perl -MMIME::Base64 -e 'print encode_base64("\000pilasguru\@gmail.com\000password")'
AHBpbGFzZ3VydUBnbWFpbC5jb20AcGFzc3dvcmQ=
$ printf "\0pilasguru@gmail.com\0password" | openssl enc -a
AHBpbGFzZ3VydUBnbWFpbC5jb20AcGFzc3dvcmQ=

como se aprecia, ambos devuelven el mismo string.

Conexión

El comando openssl con la opción s_client será el encargado de establecer la conexión:

s_client This implements a generic SSL/TLS client which can establish a transparent connection to a remote server speaking SSL/TLS. It’s intended for testing purposes only and provides only rudimentary interface functionality but internally uses mostly all functionality of the OpenSSL ssl library.

de la siguiente forma:

$ openssl s_client -host smtp.gmail.com -port 587 -starttls smtp -crlf

CONNECTED(00000003)
depth=2 /C=US/O=GeoTrust Inc./CN=GeoTrust Global CA
verify error:num=20:unable to get local issuer certificate
verify return:0
---
Certificate chain
 0 s:/C=US/ST=California/L=Mountain View/O=Google Inc/CN=smtp.gmail.com
   i:/C=US/O=Google Inc/CN=Google Internet Authority G2
 1 s:/C=US/O=Google Inc/CN=Google Internet Authority G2
   i:/C=US/O=GeoTrust Inc./CN=GeoTrust Global CA
 2 s:/C=US/O=GeoTrust Inc./CN=GeoTrust Global CA
   i:/C=US/O=Equifax/OU=Equifax Secure Certificate Authority
---
Server certificate
-----BEGIN CERTIFICATE-----
MIIEdjCCA16gAwIBAgIIOuQOXm7sFPMwDQYJKoZIhvcNAQEFBQAwSTELMAkGA1UE
BhMCVVMxEzARBgNVBAoTCkdvb2dsZSBJbmMxJTAjBgNVBAMTHEdvb2dsZSBJbnRl
cm5ldCBBdXRob3JpdHkgRzIwHhcNMTMwOTEwMDc1NDQ3WhcNMTQwOTEwMDc1NDQ3
WjBoMQswCQYDVQQGEwJVUzETMBEGA1UECAwKQ2FsaWZvcm5pYTEWMBQGA1UEBwwN
TW91bnRhaW4gVmlldzETMBEGA1UECgwKR29vZ2xlIEluYzEXMBUGA1UEAwwOc210
cC5nbWFpbC5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCpMKDa
E9bW18yuVMulny5K5YLwf7ebEpINUVPZXvp7cO6vNjl+MCHjhbB2Rkg7QVJE8eNS
V0Hpq3vOuz+RQ2rPKfaeM3MFBZJ+tKscC39XmlVtmyBW5AVWy5dlO7718MQCN/L5
kpYSY6RinFrf5pIlf5XSGRCo3WYndguPP1A+X4gsDKjMaWhCP5KfczLHGTY+4T+d
31lDSah8CbFeMvKav0SFnyRYM36YAvAk2HH1/64Tolbx9tMAW6e6q8dU1U6W5u6+
Bt7WjW1iYwwfML+ZorKR9p+V070nDDN42ZE8HVZw+hOl9eMl48L/eX0eKbSGZ
....
J/3lYLI71meuut7O7G+BcFlXVphs5XSy65LkziTXikR+MRERjCKhv3AwP0oGB2+q
APMUqxtH6K6hmFE5ELtYjS4rKLbH08s8gy65y/EiaBaWKBlKG6s+r22uyxu2xmgo
LFf94N1gVJXuaZXlCgVwThCtbekh8wxjHtcVw2HCZfzQemEr7oshVOX2
-----END CERTIFICATE-----
subject=/C=US/ST=California/L=Mountain View/O=Google Inc/CN=smtp.gmail.com
issuer=/C=US/O=Google Inc/CN=Google Internet Authority G2
---
No client certificate CA names sent
---
SSL handshake has read 3474 bytes and written 470 bytes
---
New, TLSv1/SSLv3, Cipher is RC4-SHA
Server public key is 2048 bit
Secure Renegotiation IS supported
Compression: NONE
Expansion: NONE
SSL-Session:
    Protocol  : TLSv1
    Cipher    : RC4-SHA
    Session-ID: 65AAADD952AE24108001D17D0FF6C5403E5CE85040F61346A1C80C8E753E394F
    Session-ID-ctx:
    Master-Key: F8B3C5E3C2C0435ED53542A36CBB8ECA635255FBAEF73F1ADDB7BC512657E9C9A9B7E7EB567227856648A4D54C63CCA7
    Key-Arg   : None
    Start Time: 1400863594
    Timeout   : 300 (sec)
    Verify return code: 20 (unable to get local issuer certificate)
---
250 CHUNKING

A partir de aquí podemos establecer el diálogo SMTP con el servidor de gmail enviando el comando ehlo:

ehlo
250-mx.google.com at your service, [64.90.52.109]
250-SIZE 35882577
250-8BITMIME
250-AUTH LOGIN PLAIN XOAUTH XOAUTH2 PLAIN-CLIENTTOKEN
250-ENHANCEDSTATUSCODES
250-PIPELINING
250 CHUNKING

Luego validando nuestro usuario con el string que otuvimos previamente:

AUTH PLAIN AHBpbGFzZ3VydUBnbWFpbC5jb20AcGFzc3dvcmQ=
235 2.7.0 Accepted

A partir de aqui, se pueden enviar los comandos SMTP estandar: MAIL FROM, MAIL TO, DATA y punto para terminar el mensaje.