PING: ¿De donde viene? ¿Cual es su verdadera función? Yo te cuento.

Ping, etimológicamente hablando, es, o mejor dicho, era, el sonido que emitía un sonar. El sonido era muy parecido al que emite un objeto al golpear una superficie metálica. Piensen en una campanita de escritorio de hotel o de la cocina de un restaurant, por ejemplo. 





En inglés, la onomatopeya, o la descripción de ese sonido particular se escribe como "ping" supongo que en castellano diríamos "tilín" (Jaja)


En fin, por qué les cuento esto, por que, justamente, el sonar de un submarino (SOund NAvigation and Ranging) emite ese pulso de sonido. Dicho pulso viaja en forma sub-acuatica hasta que se topa con alguna superficie y allí regresa. Luego el sonar calcula el tiempo que tardó (viajando a la velocidad del sonido) entre que salió del pinger del sonar hasta que volvió, y con eso miden la distancia y la posición del objeto. 

Funciona de una manera muy similar al radar (RAdio Detection And Ranging) excepto que el radar emite señales de radio en vez de sonido (que en definitiva son la misma cosa)


Nota al márgen: El sonido es una onda al igual que la radio, pero, a diferencia de esta última, no es electromagnética. Es decir, el sonido no requiere de electricidad para propagarse PERO si requiere de un medio. El sonido no se puede propagar en el vacio, y las ondas electromagnéticas si. Imaginense si el sonido pudiera propagarse en el vacío, las explosiones solares serían insoportables en la superficie terrestre. 

¿Qué tiene que ver todo esto con el ping que utilizamos en administración de sistemas?

Por que, justamente, el ping (software) se desarrolló en la división de informática de la armada estadounidense a inicios de los años 80. 

El Ping tiene mi edad, 39 años. Se inventó en diciembre de 1983. Su propósito fue inspirado en el sonar submarino. 

Ping utiliza el protocolo ICMP (Internet Control Message Protocol) sobre IP. Es decir, puede enviar una solicitud ICMP echo a un host objetivo cualquiera y luego cuando el host recibe la solicitud y la responde automáticamente con un ICMP echo, el programa la recibe y, fundamentalmente calcula el tiempo que tardó en enviar y recibir, si han habiod perdidas de paquetes y luego un promedio de lo que ha tardado el ida y vuelta de las solicitudes y respuestas recibidas. 

el PING puede diagnosticar latencia pero no es muy eficaz en muchos casos por que no siempre una latencia en un resultado ping es un indicador del estado de la red, ya que nada nos garantiza que el software del otro lado este funcionando correctamente, esté respondiendo en forma instantanea, o no esté ignorando ICMP echo requests.

El uso más práctico de la utilidad PING es para ver si podemos alcanzar un host desde nuestra red o subred rápidamente. Es una herramienta de análisis que nunca debe utilizarse por si sola, por los motivos detallados en el párrafo anterior pero que nos pueden dar una idea de donde estamos. 

Recuperar un RHEL 8.6 roto tras ejecutar lvreduce sin ajustar el filesystem

 Los accidentes son útiles si se aprende de ellos y se los documenta. 


Ayer rompí mi redhat, o mejor dicho, lo rompió edenor. Estaba en pleno proceso de achicar la partición rhel-root vía LVM cuando se me cortó la luz. 





Naturalmente al no haber llegado a achicar el filesystem (no use la flag -r) el sistema quería levantar algo que no coincidía en tamaño y no se podía leer el superblock.

Busqué en todo internet y no encontré nada que pudiera ayudarme a solucionar el problema, hasta que se me ocurrió: ¿Y si reacomodo las particiones a mano tal como estaban antes?

al no tener la partición root UP, el archive en /etc/lvm no tenía más data que la de ayer cuando surgió el problema, pero por suerte al hacer un lvscan, podía ver que el tamaño continuaba indicandome que algo no estaba bien por que figuraba un < al lado del tamaño, entonces dije, bueno, sacrifico el swap. Iba a traer problemas pero el sistema iba a iniciar. 

Le hice un lvreduce -L -5G a /dev/mapper/rhel-swap y se lo agregué a root. Luego al hacer un lvscan el < había desaparecido. 

Reinicié y el sistema aun no funcionaba correctamente, pero al menos podía entrar como root, ahora el problema lo tenía la partición /home y swap. 

Asimismo, al poder entrar como root y contar con su partición, pude recuperar los datos dentro de /etc/lvm/archive y por suerte allí estaban todos los backups que realiza el logical volume manager cada vez que se realiza algún cambio.

[root@linux archive]# ls

rhel_00001-1192466789.vg  rhel_00006-667253015.vg  rhel_00011-945501059.vg

rhel_00002-143884632.vg   rhel_00007-192694550.vg  rhel_00012-32913567.vg

rhel_00003-1266644536.vg  rhel_00008-910753718.vg  rhel_00013-540280539.vg

rhel_00004-291648681.vg   rhel_00009-955571515.vg  rhel_00014-423592848.vg

rhel_00005-344697073.vg   rhel_00010-736800624.vg

me concentré en rhel_00001-*

logical_volumes {

root {
id = "lLegdo-lSN3-vY1O-a4dJ-vPXz-a6oj-tlUKao"
status = ["READ", "WRITE", "VISIBLE"]
flags = []
creation_time = 1641687758 # 2022-01-08 21:22:38 -0300
creation_host = "linux.redhatenterprise"
segment_count = 1

segment1 {
start_extent = 0
extent_count = 32168 # 125.656 Gigabytes

type = "striped"
stripe_count = 1 # linear

stripes = [
"pv0", 0
]
}
}

swap {
id = "PY46ZV-EReB-b2ME-lKDV-Zytd-wiNt-esoZiT"
status = ["READ", "WRITE", "VISIBLE"]
flags = []
creation_time = 1641687759 # 2022-01-08 21:22:39 -0300
creation_host = "linux.redhatenterprise"
segment_count = 1

segment1 {
start_extent = 0
extent_count = 2560 # 10 Gigabytes

type = "striped"
stripe_count = 1 # linear

stripes = [
"pv0", 32168
]
}
}

home {
id = "ozoJKX-Q02X-svyx-7x3i-9Hxq-EG9C-cQwwbi"
status = ["READ", "WRITE", "VISIBLE"]
flags = []
creation_time = 1641687759 # 2022-01-08 21:22:39 -0300
creation_host = "linux.redhatenterprise"
segment_count = 1

segment1 {
start_extent = 0
extent_count = 79104 # 309 Gigabytes

type = "striped"
stripe_count = 1 # linear

stripes = [
"pv0", 34728
]
}
}
}

}

La fecha me servía por que recordaba que no había hecho cambios en las particiones desde aquel entonces. 

Así que mirando la documentación de LVM vi que podría cargar el archive directamente:


lvm> vgsfgrestore /etc/lvm/archive/rhel_00001-1192466789.vg rhel

Y luego reinicié. 



Un pequeño susto y muchas cosas nuevas aprendidas en el día de hoy.

DAEMON (DISK AND EXECUTION MONITOR): ¿ES REALMENTE UN DEMONIO?

 ¿Por qué se le dice demonio al concepto de daemon? 



En 1963, en el MIT (Massachusetts Institute of Technology) un grupo de desarrolladores trabajando en el proyecto MAC (Matemática y computación) utilizaron por primera vez el término en el contexto de las tecnologías de la información, inspirados en experimento de James Maxwell.


El experimento, también conocido como El Demonio de Maxwell, versa acerca de como se podría, hipoteticamente hablando, violar la segunda ley de la termodinámica. 


El hipotético en cuestión plantea que un supuesto fantasmita maneja una puerta sin masa entre dos camaras de gas, permitiendo que átomos, al acercarse a la puerta, el demonio la abre, lo deja pasar y cierra inmediatamente la puerta, permitiendo que solo las moléculas que viajan rápido pasen de una camara a la otra y las moléculas lentas sólo en la dirección opuesta. Como la temperatura kinética de un gas depende de las velocidades de las moleculas de las cuales está constituido, la acción del demonio hace que una cámara se caliente más que la otra, decreciendo la entropía de ambos gases sin aplicar ningún esfuerzo, y así violando la segunda ley de la termodinámica. 


¿Qué tiene que ver esto con las computadoras y los servers?


Tiene que ver con el hecho que, volviendo al inicio de este artículo, en 1963, estos desarrolladores creyeron noble la tarea del pobre demonio que estaba abocado a abrir y cerrar una puerta de manera indefinida, por lo cual decidieron que sería un gran nombre para una aplicación que corre en el background sin descanso realizando una serie de tareas del sistema indefinidamente. 


Es muy dificil traducir el termino daemon al castellano ya que no posee más significados que en su sentido más estereotípico de la palabra, con la connotación negativa que todos conocemos. En inglés, demonio no necesariamente significa un ser inherentemente oscuro y/o maligno. Su orígen etimológico proviene de la mitología griega y significa un ser supernatural.

Como solucionar problemas de espacio inborrable en Mac OSX

Las macbooks son computadoras realmente increibles. Mac OSX es una variante de BSD (Unix) que posee grandes similitudes con linux --y unas cuantas diferencias, también-- y es, en líneas generales, un gran sistema operativo para una estación de trabajo. Sin embargo, Apple se diferencia de Unix y Linux en el sentido de que no es tan permisivo. 

En Linux/Unix una tiene mucha más libertad para realizar acciones administrativas, aunque también para dispararse en la pata, ya que no es un sistema que esté advirtiendo a sus usuarios acerca de las acciones que se están por realizar. Requiere un nivel de meticulosidad mucho mayor y revisar todo antes de apretar enter en la terminal. 

Apple MacOSX directamente no provee una cuenta root, pero existir, existe. Por supuesto.

Cuando creamos nuestro primer usuario en la macbook, la cuenta funciona con el user agregado a wheel (sudoer), pero, si bien todas las macbooks cuentan con bash3 y zsh, la mayoría de los usuarios desconocen que pueden utilizar la terminal para resolver conflictos imposibles de resolver a través de otras vías. 


En varias macbooks pro, con discos de estado sólido (2015 en adelante) varios modelos vienen con poca capacidad de disco. 128, 256 y 512gb. Sucede que si se desea subir a una versión más reciente de mac OSX, el sistema descarga todo el nuevo SO y lo almacena en disco, dentro de /AssetsV2/ pero estos archivos son completamente inaccesibles de manera convencional. Aun listando archivos ocultos, aun bajando algún software para eliminar y optimizar el sistema. Simplemente no hay manera.

Esto es un problema ya que cada vez que falla una actualización, la descarga no se borra. Continúa llenando el disco hasta que los usuarios reciben alertas de falta de espacio, pero al verificar, sólo se ve que el sistema está consumiendo la mayoría, aun cuando si listamos los directorios y sumamos el tamaño de todos ellos, no nos cierra por ningún lado el porcentaje de uso.

Solución:

1. Abrir una terminal, en ella, aprovechar que nuestro usuario tiene sudo y realizar:

sudo su

Una vez que comencemos a operar como root en la terminal, tipear passwd root

Esto nos permitirá asignarle un password al usuario root. 

Luego salir de la terminal, reiniciar la macbook, y en la pantalla de inicio, elegir "Other User" 

Allí nos logueamos como root, con el password recientemente creado, y estaremos en la macbook operando como root.

Ahora si el sistema nos mostrara toda esa basura acumulada que nos roba espacio y no nos permite actualizar el sistema. Se puede correr una aplicación gratuita muy buena llamada OmniDiskSweeper que nos permitirá detectar donde está el mayor uso de disco, y en menos de un minuto encontrarán el directorio con todas las actualizaciones que nunca llegaron a buen puerto. 

Simplemente eliminarlas, vaciar la papelera, reiniciar, y volver a loguearse como nuestro user.


También en el home de nuestro user (que en macosx es /Users/nombre, en vez de /home) observaran, al estar logueados como root, que existen vestigios de aplicaciones desinstaladas, caches y librerías que no necesitamos, pero que pueden consumir muchísimo espacio en disco. Aprovechar esta estrategia para dejar nuestra cuenta limpita de software desinstalado también. 


Una vez finalizado este proceso, ya contando nuevamente con todo el espacio en disco que deberíamos poseer, se puede ir al App Store, descargar la versión deseada de Mac OSX, y actualizar el sistema normalmente. 

Espero que les sirva. 

Muakk.

¿POR QUÉ C SIGUE SIENDO RELEVANTE AUN EN EL 2022? (Y LO SEGUIRÁ SIENDO)

 ¿Por qué mucha gente aprende C, un lenguaje creado en la decada del 70, cuando python puede hacer las cosas bastante más sencillas?


Por que, en realidad, no puede.

ECU (Engine Control Unit) BOSCH de un Volkswagen New Beetle
ECU (Engine Control Unit) BOSCH de un Volkswagen New Beetle



La ECU de un auto moderno es una computadora que no corre ni linux ni unix ni windows. Posee un sistema operativo que corre en tiempo real (RTOS o Real Time Operating System). Entre sus funciones se encuentra el deployado del Airbag, los frenos, la aceleración y la combustión. Una ECU por si sola no se puede dar cuenta si el auto está chocando, frenando, o pasando por una calle de tierra que zarandea el coche para todos lados.  Su manera de detectar frente a qué escenario se está enfrentando el vehículo es a través de un sensor inercial que indica aceleración y rotación sobre los tres ejes tridimensionales. Miles de veces por segundo.

Cuando la suma vectorial de las tres aceleraciones supera un determinado umbral, la ECU asume que el auto está chocando y no transitando sobre una calle de adoquín o terreno difícil.

Volviendo al tema, y entenderán por qué tomé a la ECU como ejemplo, es por el hecho que cuando el vehículo está frente a un escenario de choque, los scripts de seguridad deben ejecutarse en un tiempo record y absolutamente predecible. Una mínima latencia puede ocasionar que el deployado del airbag suceda después del impacto y el conductor o conductora se parta el marote contra el volante.

C, el lenguaje de programación, es un lenguaje que llega directo al hardware en 1 milisegundo. Esa es la interrupción en el kernel. Esta latencia ha sido así en el pasado, en el presente y lo será así siempre. Todo el código sigue con suma presición al reloj del procesador. Es decir, la única latencia es la producida por el cristal de quarzo.

Ahora si miden la latencia en lenguajes como python,  que no es mala, es, desafortunadamente variable. 

Es por eso que tanto para una ECU como para cualquier otro tipo de hardware crítico, C (y C++) continúan siendo los lenguajes de programación utilizados y lo seguirán siendo.


En resúmen, python es un lenguaje asombroso del que conozco muy poquito y si bien su aplicación se ha extendido a un montón de campos en la actualidad, también es igualmente cierto que hay cosas que python no puede reemplazar, y dudo que reemplace, al menos, en un futuro cercano.




¿Por qué Linux y Apple Mac OSX No tienen un registro como Windows?

Tener un registro es una pésima deicisión, desde un punto de vista de ingeniería en sistemas.

Todas y todos sabemos que nunca conviene tener todos los huevos en una sola canasta, excepto los ingenieros de Microsoft, cuando crearon el registro de windows.

A diferencia del SO de Microsoft, tanto Apple como Unix y Linux no utilizan un "registro". 

En el caso de Apple Mac OSX, cada configuración se guarda en un archivo contenido específico para esa aplicación, el cual se remueve junto con la aplicación al desinstalar (se puede dar doble click en una aplicación en el launcher o en el file browser y ver un directorio llamado "Components", allí radica todo el contenido de la app, por lo cual no quedan pedazos de la app esparcidos por todo el SO, como si sucede con Windows. 

En el caso de Linux y Unix, el sistema es aun más preciso. Las configuraciones se guardan en formato texto dentro de /etc/ por lo cual al remover una aplicación, lo único que resta es remover su .conf de /etc/ en la mayoría de los casos.

Esto es así para que ninguna aplicación de manera arbitraria o por error, escriba variables que puedan afectar a otras aplicaciones y/o configuraciones.

Por ejemplo, un software mio llamado "Glitty" tiene su binario en /opt/glitty pero su configuracion en /etc/glitty

[alexia@linux etc]$ tree | grep glitty
├── glitty
│   └── glitty.conf

Si yo deseara removerlo completamente del sistema, simplemente elimino ambos directorios y listo. 


¿Por qué el CPU es temporizado? (CPU CLOCK) ¿No pueden funcionar a su máximo rendimiento?

Como poder se puede, pero no es algo práctico. 


Supongamos que hay 4 personas asignadas a una tarea crítica en una oficina que no se puede descuidar, y está por llegar el horario del almuerzo. Los cuatro compañeros y compañeras deciden que, para asegurarse que haya, al menos una persona monitoreando la tarea, tomarán breaks sincronizados. 

La primera persona sale a almorzar a las 12:00, cuarenta minutos mas tarde, como máximo, esa persona está de vuelta, y entonces sale la próxima. Así sucesivamente. 

Es posible que alguno de esos cuatro compañeros demore menos en almorzar y volver, pero, se sabe que, como tarde, en 40 minutos están de vuelta.

Volviendo a los CPUs, analogía mediante,  han habido ideas y prototipos de "clockless" CPUs. Diseños asincrónicos que no requieren temporizar los segmentos, pero esto requiere que cada proceso le avise a otro que ya está listo para que la cadena pueda continuar de manera armoniosa. Seria un desafío orquestar toda la cadena en un sistema así. Requeriría muchísimas más conexiones en el chipset y aumentaría el tamaño físico de los mismos significativamente. El diseño actual (sincrónico, o clocked) provee una automatización en cadena mucho más estandarizada. Tiene predefinida una latencia máxima para cada proceso de la cadena, por más rápido o lento que se ejecute y garantiza que nunca quedarían procesos en cuello de botella, per se.

Además, en los CPUs modernos de alto rendimiento, pensemos en un Intel Dual Xeón, por ejemplo, en la mayoría de los casos el CPU está en modo inactivo (idle) y cuando le tiramos cosas, las suele despachar casi instantáneamente. Quienes utilicen Linux/Unix pueden realizar una tarea y monitorear el estado del CPU en otra terminal con top o htop para evaluar el estado del temporizador del CPU.

Presumo que tanto Intel como AMD han considerado un procesador asincrónico, pero considerando las necesidades del mundo actual en terminos de procesamiento de datos y agilidad, los CPUs sincrónicos continúan siendo mucho más eficientes y confiables. 

 


¿Por qué Linux y Mac OSX son variantes de UNIX pero Windows no?



El kernel de Windows NT fué diseñado desde cero entre los años 1989 y 1992 por Dave Cutler.

Microsoft lo contrató para que diseñara un sistema que pudiera ser ofrecido como una alternativa a Unix para clientes corporativos. Anterior a esto, Micosoft solía ofrecer Unix como solución corporativa, bajo el nombre de Xenix, que era una versión de Unix bajo licencia de AT&T.

OpenVMS, el predecesor de Windows






Es decir, que tanto OpenVMS (DEC) y NT fueron creados por la misma persona, como el kernel NT (NT, NT4, W2000, Vista, Win7, Win8 y Win10) pertenecen la familia VMS.

Cuando Cutler comenzó a trabajar en el desarrollo de NT, hizo lo que mejor sabía: Desarrolló un sistema similar al que había creado para DEC, por lo cual Windows tal como se conoce tiene muchas similitudes con OpenVMS.

Windows NT (New Technology) prometía ser una versión más estable y confiable que las versiones de Microsoft de escritorio, que, para ese entonces corrían en DOS de 16 bits -- ¿Recuerdan tipear win en el C:\> para entrar a windows?.

Sin embargo, NT no era más que lo que Cutler ya había desarrollado hacia finales de la decada del 70 para DEC (VMS)

La estrategia de marketing fue la de competir contra UNIX y sus derivados. Independientemente de que podamos debatir si NT estuvo a la altura de Unix o no (no lo estuvo jamás, jeje) lo cierto es que Microsoft realmente intentó, a través de NT ser la alternativa.

Mac OSX, por otra parte está basado en Darwin (Unix) por lo cual conserva muchas similitudes tanto con Unix como con Linux.

Si bien Linux NO ES un derivado de Unix en el sentido de que el kernel monolítico ha sido escrito de cero por Linus Torvalds, si se puede afirmar que es casi 100% posix-compilant, por lo cual es extremadamente similar a la hora de operar e instalar software.

¿Es cierto que particionar un disco hace que funcione más rapido o más lento?

 Algunas personas insisten con que particionar un disco de estado sólido lentifica el proceso de lectura. 

¿Qué hay de cierto en todo esto?

Yo te cuento.



En el pasado existía un límite en cuanto al volumen que una unidad de almacenamiento podía tener para ser leída y escrita correctamente. El desarrollo de discos más grandes llegó al mercado mucho más rápido que las mejoras en los sistemas que se utilizaban (DOS y primeros windows)

Es por ello que cuando un disco superaba la capacidad del sistema operativo se tenía que particionar con los límites de la versión. 

En los discos analógicos, al leer de un sector a otro había una demora mecánica, que comunmente se estipula en 10 milisegundos (0.01seg) pero en los discos actuales, comunmente conocidos como de "Estado sólido" esta latencia es muy inferior, de tan sólo 1 milisegundo (0.001seg) los discos SSD (Solid State Disk) no tienen partes moviles y los sectores no están aislados entre si por lo cual leer de un sector a otro no demora prácticamente nada.

Entonces: ¿Existe alguna diferencia en términos de velocidad de lectura y escritura si se realizan particiones? 

No. 

Las particiones se utilizan de manera lógica para organizar mejor la estructura del sistema operativo. 

En linux, por ejemplo, es una buena práctica separar el root del disco de las cuentas de usuarios, por lo cual generalmente root y home/usuario están en particiones distintas. 

Linux también usa SWAP como una particion aparte, que puede ser utilizada como memoria ram de tope en caso que la ram del sistema esté utilizada. Es la última en llenarse y la primera en vaciarse, per se. 

¿Tiene alguna ventaja el disco analógico sobre el disco de estado sólido? 

Si, algunas. (entre un montón de desventajas)

En casos donde el disco tiene un error puede recuperarse la info, mientras que si un disco de estado sólido está kaput, la info generalmente se pierde. 

También la vida útil de un SSD es menor en terminos de ciclos de lectura y escritura. Por cada ciclo utilizado, las celdas en un SSD se degradan, mientras que un disco análogo no sufre de este problema, asimismo, con que tan sólo una parte mecánica falle en un disco HDD, el resultado es que el disco entero deje de funcionar, por lo cual es menester realizar backups con frecuencia independientemente del hardware utilizado. 


Windows: ¿Es necesario defragmentar un disco de estado sólido?

No. Para nada.

Ahora la explicación larga:

La defragmentación era algo popular y considerada una buena práctica en la era de los discos mecánicos por que el cabezal tenía que colocarse a una distancia muy específica del centro del disco. Este posicionamiento toma tiempo (seek time) de unos pocos milisegundos. 

Cuando se necesita leer un archivo y los datos del archivo están ubicados correctamente en el disco de manera que no haya que mover el cabezal demasiado (o nada), la operación de lectura tarda mucho menos, pero si los datos de dicho archivo están desparramados por todo el disco, el cabezal se tiene que mover un montón de veces para realizar la misma operación, ralentizando el proceso de lectura. 

En discos de estado sólido (SSD) la tecnología es totalmente distinta. Es un disco que, básicamente, es indiferente a como o donde se archivan los datos de un archivo. Por eso no requiere defragmentación.

¿Qué pasa si defragmentamos un disco de estado sólido?

Lo hacés pelota. 

Posta. 

Cada celda de memoria en un SSD tiene una vida útil en terminos de ciclos de lectura y escritura que varía entre 1000 y 3000 ciclos. Algunos discos inclusive utilizan un sistema de nivelado donde, a medida que se "gasta" el disco, en terminos de ciclos, comienzan a utilizar con mayor frecuencia las celdas menos utilizadas para que el desgaste sea más parejo, con el fin de extender su vida útil. 

Al defragmentar un disco de estado sólido, se lo está haciendo trabajar, malgastando ciclos de lectura/escritura y acortando su vida útil sin ningún propósito. 

¿Por qué existe /var en Linux?

/var/ es otro de los directorios heredados de la era Unix.  



/var/ como su nombre lo indica, significa variable, y fue ideado por Sun MicroSystems cuando desarrollaba sistemas para maquinas sin elementos de almacenamiento o "diskless".

La finalidad era que existiera un directorio que no sea read-only, que permitiera la generación de archivos variables, como logs, spooling de impresora, identificador de procesos (pid) y demás. 

La estructura de /var/ pasó a tener subdirectorios como /var/log, /var/mail, /var/spool, etc y todo esto agrupado en un mismo mountpoint. 

El propósito es permitir que el sistema esté ordenado para garantizar seguridad y eficiencia.

Como guía, la estructura vanilla de Linux es la siguiente:

/bin: Binarios
/boot: Archivos necesarios para el arranque
/dev: Dispositivos (discos y elementos de lectura (cd, dvd, etc)
/etc: Et Cetera (se prnuncia et-si o ET-C) es donde se archivan las configs.
/home: directorio de usuarios (no confundir con /usr/ que no es "user" (!)
/lib: Librería. Donde se archivan las librerías de código
/media: Directorio (moderno) donde se pueden montar unidades de lectura
/mnt: mountpoint temporal
/opt: Opcional (Optional) Directorio para instalación de software adicional compartido entre usuarios
/run: Variables de runtime
/sbin: Super binarios - Binarios a los que sólo puede acceder root
/srv: Directorio para "servir" archivos. Generalmente www o ftp.
/tmp: Archivos temporales
/usr: (U)nix (S)ystem (R)esources, o Recursos del sistema Unix. No es "User". Este directorio supone que debe ser compartido entre hosts y puede ser montado en varios hosts en simultaneo/con read-only sin inconvenientes.

¿Por qué localhost es 127.0.0.1 y no otra dirección IP?




Esta es una pregunta que me hicieron ayer y me dejó pensando. Inmediatamente contesté: Por que esa IP (127.0. 0.0/8) Es la asignada para la interfaz loopback.




Pero me pareció conveniente expandir un poquito más en la respuesta.

¿Por qué la interfaz loopback utiliza 127.0.0.0/8? ¿Qué es la interfaz loopback? ¿Qué o quién asigna clases de IP?

En este breve articulo intentaré responder algunas de estas preguntas.




IANA

Este organismo (Internet Assigned Numbers Authority) es el que se encarga de asignar clases A a determinados organismos y protocolos.

En este link (https://www.iana.org/assignments/ipv4-address-space/ipv4-address-space.xhtml#note6) se puede observar a que organismo o protocolo pertenece cada clase A.

En el siguiente apartado (https://www.iana.org/assignments/iana-ipv4-special-registry/iana-ipv4-special-registry.xhtml) se puede observar el protocolo o uso asignado para clases A especiales.

IANA es quién asignó la clase 127.0.0.0/8 a la interfaz loopback. Si bién la interfaz tiene la particularidad de poder utilizar del 1 al 8, en mis casi 39 años nunca observé una interfaz loopback que utilice otro número que no sea el 1.


Interfaz Loopback

La interfaz loopback, en cualquier sistema monolítico como Microsoft Windows o Linux, e inclusive microkernels como Mac OSX, funciona en un layer superior a cualquier dispositivo de red (hardware) instalado en el sistema.

Generalmente, al estar por encima de cualquier otra interfaz de red, tanto física como virtual, es invulnerable a reglas de firewall, lo que nos permite realizar acciones de prueba sin modificar las reglas de seguridad actuales, entre otras cosas.  

Esta interfaz, que podría definirse como virtual, funciona como loop de hardware.

En telecomunicaciones, un loop de hardware envía las señales del emisor, de vuelta hacia allí.

En el protocolo de comunicaciones de internet, la interfaz loopback se encarga de reenviar los paquetes de información de nuevo al sistema operativo, creando un host local.

Si, por ejemplo, instalaramos un webserver en nuestro propio sistema, y accedemos a él a través de http://127.0.0.1 el navegador utilizará la interfaz loopback antes que cualquier otra interfaz de red, y devolverá los paquetes a la misma maquina para entregar el contenido que deseamos.

 

¿Cómo leer notas de Clarín, La Nación, WSJ y otros sin registrarse?

El acceso a la información está cada vez más restringido por los intentos desesperados de monetizar hasta los párrafos más escuetos. 

En este breve post contaré como saltearse algunas de las restricciones de los medios más populares del país para poder acceder a los artículos completos sin necesidad de registrarse o pagar una suscripción.




1. Outline (www.outline.com)

Outline (Sitio caído en este momento) es un portal que promete "Leer sin distracciones". 

Outline nos permite pegar un link y generar el artículo sin ningún tipo de publicidad o restricción. En la mayoría de los casos suele funcionar muy bien y no requiere que nos registremos. 


2.  Instapaper

Instapaper es un servicio gratuito que nos permite realizar la misma tarea que en Outline, con la diferencia que es muchísimo más eficiente. Sólo hay que crear una cuenta gratuita y luego clickear en donde dice "Add Link"

La mecánica es similar: Vamos a la página principal del portal de noticias que queremos leer. Hacemos click derecho al titular del artículo que queremos leer y seleccionamos la opcion "Copiar dirección del enlace" 

Luego, en un tab aparte abrimos instapaper, vamos a la opción "Add link" y nos generará un artículo personalizado sin restricciones que podemos compartir. 


3. Unpaywall (Extensión de google Chrome)

Para quienes utilicen el navegador google chrome, existe la extensión (plugin) "Unpaywall" (link: https://chrome.google.com/webstore/detail/unpaywall/iplffkdpngmdjhlpjmppncnlhomiipha) donde, al instalarla, deshabilita el 80% de las restricciones de los portales de noticias. Funciona más o menos, pero es una buena opción para quienes desean acceder a mas portales con acceso restringido. 


4. Insertar javascript

Para quienes deseen bypasear las restricciones manualmente. Se puede insertar un pequeño script en el portal para que nos permita acceder a los artículos. 

Simplemente abrir el artículo que deseamos leer, hacer click derecho en la pantalla > inspeccionar elemento 
y en la parte derecha  (o inferior si utilizan Firefox o Safari) pegar el siguiente codigo


async function getHTML(url){

 var res = await fetch(url);

  var text = await res.text();

  var doc = new DOMParser().parseFromString(text,'text/html');

  return doc;

}

async function reloadContent(){

  var doc = await getHTML(window.location.href);

  document.body.innerHTML = doc.body.innerHTML;

}

reloadContent()

Luego apretar enter y se recargará el artículo sin restricciones.

Como instalar aplicaciones y juegos para windows en Linux con Bottles

Instalar aplicaciones de windows en linux no es tan dificil como algunas personas creen. Existen varias plataformas y metodos, que en su mayoría utilizan Wine como backend. De todas las que existen, la que mejor resultado me da, es Bottles 


Bottles nos permite instalar facilmente aplicaciones de windows y centralizarlas todas dentro de una especie de contenedor. 

Al lanzar bottles, veremos nuestro contenedor con todas nuestras aplicaciones y/o juegos instalados. 

Instalar bottles es bastante sencillo a través del sistema Flatpak. 


En esta breve columna explico como instalar bottles. Si ya tenés flatpak instalado, obvia el punto 1 y continuá hacia el punto 2. Sino, seguí leyendo.


1. Instalando flatpak

navegamos hacia https://flatpak.org/setup/ y clickeamos en nuestro sistema operativo, en mi caso, Red Hat Enterprise Linux


Para las distros basadas en Red Hat (Red Hat, Fedora, CentOS), desde la terminal, ejecutar:

sudo dnf install flatpak

Para distros basadas en debian (Debian, Linux Mint, Kali y otros), ejecutar:

sudo apt install flatpak 

flatpak remote-add --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo

2. Instalando Bottles

Bottles se instala desde el portal de aplicaciones en contenedor de flatpak, FLATHUB
en la terminal ponemos:
flatpak install flathub com.usebottles.bottles

eso es todo. En algunos entornos de escritorio se requiere que te desloguees y vuelvas a entrar (o reinicies) para que aparezca la aplicación instalada, pero no en todos los casos. En caso de que la aplicación no figure al terminar la instalación, simplemente ejecutá en la terminal:

shutdown -r now 

Para reiniciar el sistema.

Revisá el catálogo de flathub.org para mas aplicaciones en contenedor por que tiene muchas cosas muy interesantes!


Muak.

Optimizando el Kernel: ¿Qué diferencias existen entre INSMOD y MODPROBE?

insmod y modprobe son dos maneras de cargar módulos en el Linux Kernel. En esta breve columna paso a describir las particularidades de cada programa y cual conviene utilizar según cada caso.



insmod y modprobe son dos maneras de cargar módulos en nuestro kernel. La diferencia fundamental entre ambos es que modprobe, a diferencia del primero, no sólo permite cargar el módulo sino que también permite chequear las dependencias del mismo. 

Es decir, si nuestro modulo a, necesita de dependencias b y c para funcionar, modprobe intentará ubicarlas y cargarlas junto con nuestro módulo mientras que insmod no realiza esta tarea. 

Esto es particularmente útil a la hora de tocar el kernel para asegurarnos de que nuestro sistema botee correctamente al reiniciar.

Existen casos donde insertar un módulo a través de modprobe nos puede dar error debido a que existe un mismatch de información de versiones. Como medida preventiva, modprobe evita que el modulo "problemático" se cargue. 

Ahora bien, si el modulo lo hemos desarrollado nosotras/os o si tenemos la certeza de que viene de una buena fuente, o bien, sabemos que funcionaría, podemos bypassear esta restricción utilizando el parametro --force (que es lo mismo que ejecutar los parametros --force-vermagic y --force-modversion)

Utilizar --force es, como cualquier otro parametro arbitrario del estilo en Linux, extremadamente peligroso a menos que sepan exactamente lo que están por hacer. 

Entonces ¿Conviene utilizar modprobe o insmod?

La respuesta es, como en la gran mayoría de los casos: Depende. 

Depende fundamentalmente de la ubicación del módulo. Para la mayoría de los casos donde debemos optimizar el kernel por algún motivo, modprobe (aun con --force para saltear el check version) cumple con su propósito. 

Ahora bien, existen situaciones donde desarrollamos un módulo y necesitamos cargarlo. En este caso se suele usar insmod por que modprobe sólo busca los módulos en los directorios estandar (ref: https://lwn.net/Kernel/LDD3/ (en inglés))

Siempre que se trabaje con el kernel, lo recomendable es realizar un backup antes de proceder, por que es extremadamente común que las cosas no funcionen como esperamos y teniendo un backup para realizar un rollback es una manera muy eficiente de volver hacia atrás al punto de partida e intentar nuevamente sin comprometer la integridad de la estación de trabajo o servidor. 

¡Espero que les haya servido! 

Muakk. 

Ale.

Entendiendo E=mc2

 

La ecuación de Albert Einstein es una de las mas famosas de la historia de la física, y en un gran número de situaciones, utilizada como sinónimo de ciencia en un gran número de programas de TV, sitios de internet e inclusive tazas, stickers y remeras. Pero ¿Qué significa?

Paso a contarles.

La ecuación plantea que energía (e) es igual a masa (m) multiplicada por la velocidad de la luz (c) al cuadrado. 




La explicación larga:

La energía se mide en Joules (J, unidad de medida estandar) y se calcula como kilogramos x metros cuadrados por segundos al cuadrado [kg x m2/s2].

Escencialmente, lo que esto significa es que un Joule de energía es igual a la fuerza empleada para mover un objeto específico un metro en la misma dirección a la que va la fuerza.

m representa la masa del objeto en cuestión, y está representada ek Kilogramo (o 1000gr) No confundir masa con peso. Genrealmente cuando hablamos de peso, ej el peso de un humano, en realidad estamos hablando de masa. Pero esto para otro post.

c significa velocidad de la luz. La luz en el vacío (sin ningún objeto que pudiera entorpecer su trayectoria o refractarla, se mueve a una velocidad de 299791.8 kilometros por segundo (o 1079250548.4km/h) Sin embargo, cuando calculamos luz, solemos utilizar metros por segundo. Por lo cual, la velocidad de la luz es 3.00 × 108m/s, o 300,000,000 metros por segundo.

Entonces si somos capaces de calcular, a través de esta ecuación, la energía de cualquier objeto en el universo, podríamos calcular cuanta energía tenemos. ¿No?

Claro. 

Por ejemplo, yo peso 61kg (jej..)

Mi energía, según la ecuación de Einstein, serían 5482406590295 MJ (Megajoules)
o puesto de un modo mas entendible para argentinos/as, estoy hecha de 1522890719526 kWh


Para ponerlo en perspectiva. La bomba atómica detonada en Hiroshima, tenía un poder explosivo de 21kT (Kiloton)

Si yo pudiera ser convertida exclusivamente a energía, tendría un poder destructivo 86 veces mayor a la bomba de hiroshima. Claro está que para lograr que todo mi ser fuera energía pura, se necesitaría comprimirme y aumentarme la temperatura a niveles imposibles dentro de nuestro planeta. Necesitaría estar en el núcleo del sol.


Así que, la próxima vez que crean que no tienen potencial, pasen su masa (peso) a megajoules y luego a kilotons. Veran cuan poderosos y poderosas realmente son. 

Instalar Drivers NVIDIA en RHEL 8 / Fedora

Instalar drivers NVIDIA en Linux no suele ser una tarea tan complicada como algunas personas creen. Especialmente a través de package managers como dnf. 



1. Ejecutar los siguientes comandos como root

subscription-manager repos --enable=rhel-8-for-x86_64-appstream-rpms 

subscription-manager repos --enable=rhel-8-for-x86_64-baseos-rpms 

subscription-manager repos --enable=codeready-builder-for-rhel-8-x86_64-rpms

2. Agregar el repo CUDA a nuestra instalación (como root)

dnf config-manager --add-repo=https://developer.download.nvidia.com/compute/cuda/repos/rhel8/x86_64/cuda-rhel8.repo

3. Instalar el último driver disponible. Aquí tenemos dos opciones, precompilado o sin precompilar. 
Yo recomiendo la version precompilada. Instalar una o la otra. No instalar ambas.

Precompilada:
dnf module install nvidia-driver:latest

No Precompilada:
dnf module install nvidia-driver:latest-dkms

Vale aclarar que si alguien desea cambiar la versión del driver, o el stream, primero debemos quitar el driver actual, instalar la versión deseada y resetear el driver. 
Para ello haremos lo siguiente:

Quitar el driver actual:

dnf remove nvidia-driver

Una vez instalada la versión deseada, podemos resetear el driver ejecutando:

dnf module reset nvidia-driver


NVIDIA CONFIG. 


Una vez instalados los drivers podremos ejecutar la config del display a través del display manager de nvidia. 

Una vez configurado todo, recuerden, además de aplicar los cambios, escribir la config. Sinó al reiniciar, no serán conservados los cambios.




El manager tiene una opción que intentará escribir la config, pero dependiendo de la configuración de seguridad de tu sistema esto no siempre es posible, por lo cual, una manera de sortear este tema, es simplemente ver la config generada, copiarla, y luego crearla en /etc/X11/xorg.conf  (sudo nano /etc/X11/xorg.conf)

Existen algunos casos donde la config tiene que ir tanto dentro de /etc/X11/ como también dentro de /etc/X11/xorg.conf.d/ 

Así que para mayor tranquilidad, una vez creada la config en /X11/ simplemente pueden copiarla a xorg.conf.d (cp /etc/X11/xorg.conf /etc/X11/xorg.conf.d/)

¿Esperaban más lío? Perdón por decepcionarlos. No era tan complejo.

Instalar Plasma Desktop en RHEL8/Fedora/CentOS

Plasma es, para mí, el entorno de escritorio mas hermoso que existe en Linux. 


A partir del lanzamiento de RHEL 8, la compañía decidió excluir plasma de las opciones para entorno de escritorio, dejando pura y exclusivamente a GNOME como la unica opción. 

Sin embargo, Plasma continúa vivito y coleando en el repo EPEL, de Fedora, el cual es financiado y avalado por redhat, y en el cual, sus desarrolladores también contribuyen. 

EPEL es un repo mantenido por la comunidad de fedora/rhel y tiene actualizaciones frecuentes y más paquetes que las repos oficiales de Red Hat. 


Como instalar Plasma Desktop (full) en RHEL/FEDORA vía EPEL

1. Agregar EPEL a nuestro sistema:

dnf install https://dl.fedoraproject.org/pub/epel/epel-release-latest-8.noarch.rpm

2. Ejecutar:
subscription-manager repos --enable codeready-builder-for-rhel-8-x86_64-rpms

3. Instalar KDE Plasma

dnf group install kde-desktop-environment


La versión actual (completa) de plasma ofrece el entorno de escritorio completo junto con todas las herramientas de KDE y aplicaciones Qt (que también funcionan en gnome)


Cualquier duda o consulta pueden encontrarme en discord o dejar su inquietud en los comentarios. 

¡Saludos!


¿Por qué no son buenas (Algunas) redes sociales?

 

Probablemente sepan de quién se trata. Es el dueño de una compañía que tiene una facturación anual de $85.000.000.000.000.000 USD. 



Si observan su computadora personal (una Macbook Pro) con atención, observarán que tiene el micrófono y la webcam tapada con cinta aisladora. 

Ni siquiera él confía en las palabras que manifiesta públicamente. Y esto no tiene nada que ver con sus contradicciones como ser humano. 

Él es consciente que Facebook monitorea todos tus pasos. El sabe que es el standard de la (gigantesca) industria de recolección de datos personales que se encuentra detrás de una interfaz amigable e inocente proponiendote una red social como herramienta para estar en contacto con amistades y seres queridos. 

Es por esta misma razón, que todas las grandes C (CFO, COO) incluso los CEOs de estas industrias le prohiben tajantemente a sus hijos utilizar las aplicaciones que venden, sea facebook, instagram o snapchat. 

Esta gente, que desarrolló y vende a diario estas herramientas no permite que sus familias las utilicen.

Es como que un médico quiera recomendarte un tratamiento revolucionario que, bajo ningún concepto, recomendaría a un ser querido de su circulo íntimo.

Existen dos mundos en la actualidad. Ese mundo utópico que las empresas de tecnología social quieren hacerte creer que es maravilloso para el desarrollo de las sociedades modernas, y también existe el real, donde sucede todo lo opuesto. 

¿Paranoia?

En la imagen de esta brevísima columna podemos observar a una de las personas más ricas e influyentes de las redes sociales de todo el mundo, tapando con cinta su webcam y su micrófono. 

Hacé con esa información lo que quieras. 

Para mi. Habla mucho. 

...Demasiado.

MongoDB vs MySQL: ¿Cual es la mejor tecnología de Bases de Datos?

 

MongoDB y MySQL son dos servers de bases de datos muy populares. Ambas funcionan con una gran variedad de lenguajes de scripting y programación, y ambas son Open Source. En este pequeño artículo contaré acerca de las bondades de cada una de estas tecnologías de manera comparativa. 




MySQL

MySQL (My SQL o My Sequel) es un sistema relacional de bases de datos desarrollado y distribuido por Oracle Corp. 

MongoDB 


MongoDB es un sistema que archiva los datos en documentos individuales en formato JSON. Es un sistema NO SQL, lo que permite mucha mayor flexibilidad en terminos de estructura de datos. 


Comparando MongoDB vs MySQL

La diferencia fundamental entre estas dos tecnologías es la manera en la que se archivan los datos. MySQL, como la mayoría de mis lectores probablemente ya conozcan, se archivan de una manera muy similar a como funciona una planilla de excel, per se. Es decir, por columnas y filas. 

En MongoDB, cada dato es un "documento", y un grupo de datos relacionados se llama "colección" mientras que en MySQL, los datos relacionados pertenecen a una determinada tabla, y las tablas relacionadas a una misma base de datos.

MongoDB no es un sistema estructurado. Es decir que las estructuras pueden modificarse de manera dinamica. En MySQL, como su nombre lo implica, utiliza un sistema de consultas SQL (Estructurado) para acceder a la base de datos. El esquema no se puede alterar. Las consultas a la base de datos para escribir, leer o editar se pueden hacer de una manera estricta y predefinida solamente. 

Por ejemplo, si en una tabla MySQL tenemos dos columnas "nombre" y "dirección" y deseamos agregar, digamos, a través de un form PHP, una nueva columna "edad", no podríamos hacerlo ya que esa columna no formaría parte del esquema. Habría que rehacer el esquema de nuestra tabla. 

En MongoDB esto no es necesario ya que nuevos campos pueden insertarse independientemente del esquema, por ello se dice que tiene una manera dinamica de crecer, en terminos de data entry.


TABLA COMPARATIVA
PARTICULARIDADES                             MySQL MongoDB
Modelo "Rich" de datos NO  SI 
Esquema Dinámico NO  SI 
Dato tipificado SI SI
Data Locality NO SI
Actualizar CamposSI SI 
Facil para programadorxs NO  SI
Transacciones Complejas SI  NO 
Auditoría SI  SI 
Auto-shading  NO  SI 


Algunas terminologías también varían dependiendo de ambas tecnologías.

Por ejemplo, lo que en MySQL solemos llamar "tabla" en MongoDB llamamos "Colección".
Lo que en MySQL llamamos fila, en MongoDB llamamos "Documento"
lo que en MySQL llamamos columna, en MongoDB se llama "Campo"
y lo que en MySQL llamamos join, para unir datos de diferentes tablas, en MongoDB llamamos "Embedded Document" o "Linking"


A continuación un ejemplo de como cargaríamos los mismos datos en MongoDB y MySQL

MongoDB:
 
{
nombre: "Alexia",
edad: "40",
contacto:{ 
celu: "+541100000000",
direccion: "Calle 164, Buenos Aires" 

}


MySQL

nombre    edad     contacto-celu          direccion
Alexia      40        +541100000000     Calle 164, Buenos Aires


DEVLOG: Novedades

 Buenas noches mis queridas y queridos lectores. 


No acostumbro a realizar este tipo de posteos en el blog, pero creo que amerita una explicación. 

Observarán que la interfaz o layout está cambiando. Estoy re-haciendola de cero.


El primer layout del blog lo había hecho con Artisteer 4, y tenía muchos vicios por lo cual lo fui patcheando y haciendo que algunas cosas funcionen a través de javascript. 


Con el tiempo el código del layout perdió toda lógica y no había manera de limpiarlo y hacerlo bien. Es por eso que decidí rehacerlo de cero. 


¿Por qué blogspot?

Por que el CRUD que ofrece google está bueno, y por que es gratuito, lo que garantiza que el blog pueda perdurar varios años sin necesidad de tener que atender el servicio de hosting. 


Pero google blog es complicado...

Si. 

Blogger (esta plataforma) usa un sistema raro, una especie de híbrido entre html y xml. Desarrollar un layout no es una tarea sencilla bajo este método, por que no se parece en nada a ningún lenguaje conocido, más alla de que pueda utilizarse (ALGO) de javascript, html y css. 

Tiene muchas limitaciones.

  • No se pueden subir fuentes
  • No se pueden subir scripts
  • no se pueden subir hojas de estilos
Todo tiene que estar embebido en el lenguaje raro que les comenté arriba. Por lo cual hay que rebuscarselas para cargar todas las cosas vía CDN y declarar los estilos dentro del html/xml. 

Pensé en utilizar wordpress y comprar un dominio. No lo descarto, pero de momento creo que cumple el propósito. 

Todo dependerá de la demanda que tenga el blog. 

En fin. En este post quería contarles que dentro de los próximos días la interfaz continuará cambiando hasta que me sienta satisfecha con el look y la funcionalidad. 

Este blog no es un blog responsive, a contramano de las buenas practicas actuales. Es un blog para leer en la computadora, no en un dispositivo movil. 

Entiendo que mucha gente lo lee desde el celular, e intentaré hacer lo posible para que sea lo más humanamente responsive posible, pero el objetivo es escribir y leer desde una computadora o una pantalla mayor a la de un celular promedio.

BIOS VS UEFI: ¿Cual es la diferencia?

 


Seguramente han escuchado o leído las palabras BIOS y UEFI al trabajar con diferentes estaciones de trabajo, computadoras hogareñas y servers. Pero ¿Qué son? ¿Qué funciones cumplen? y ¿Qué diferencias existen entre ellos? son algunas de las preguntas que intentaré responder en este artículo.



Antes de hablar de las diferencias entre BIOS y UEFI, haré un muy brevísimo repaso acerca de como es que una computadora personal, estación de trabajo o servidor enciende (en líneas generales) y entrega un sistema operativo a disposición de las y los usuarios

Al apretar el botón de encendido, lo que se enciende es el mainboard y el procesador, pero esto, por si sólo no puede hacer mucho. El procesador siempre necesita que se le ordene que tarea debe realizar.

Es por eso que existe un firmware que realiza un POST (Power-On Self Test) que se encarga de inicializar el resto del hardware, detecta periféricos conectados (mouse, teclado, etc) y comprueba la salud de todos los dispositivos. Esto sucede de manera muy rápida y en una gran cantidad de sistemas, si el POST se desarrolló con éxito se suele escuchar un pitido antes de ver imágen en pantalla. 

Por último, el POST escanea todos los dispositivos de almacenamiento y busca un sector de booteo, que normalmente se halla en el primer sector de un disco. Si encuentra un boot, le pasa el control al sistema y allí concluye su tarea.

El boot, por otra parte, y sólo haré una muy breve mención antes de abocarme al tema principal, es lo que inicializa el sistema operativo con el cual utilizamos nuestra computadora personal, estación de trabajo o server. Puede ser que arranque un sistema operativo Linux, Unix, Windows o lo que sea. 

Existen varios tipos de boot-loaders (cargadores de boot) y algunos permiten bootear más de un sistema operativo, como por ejemplo GRUB (Grand Unified Bootloader), o LiLO (Linux Loader

En Linux, el boot se encarga de cargar el kernel en la memoria a través de init, que luego termina de realizar el proceso de carga de todos sus procesos escenciales. En Microsoft Windows, el boot suele cargar wininit.exe, services.exe (control de servicios) lsass.exe (seguridad local y autoridad) y lsm.exe (manager de sesión local)

En ambos casos, una vez finalizados estos dos procesos, las y los usuarios verán una interfaz gráfica desde la cual pueden comenzar a operar. 

Esta fue una manera muy superficial y breve de explicar los procesos de arranque. He omitido muchas cosas con el propósito de que el post se mantenga leíble por seres humanos, pero si les interesa el detalle y saben inglés les recomiendo este link para leer, aprender y desarrollar su propio sistema operativo.


BIOS VS UEFI

BIOS (BASIC IO SYSTEM, o Basic Input/Output System) 

Es un tipo de firmware que se encarga de realizar las tareas de inicio. Se guarda en un modulo EPROM o EEPROM (La diferencia de ellos es que los EPROM, difuntos, se podían borrar con luz ultravioleta y los EEPROM, con pulsos eléctricos, pero ambos hacen la misma cosa. Es un modulo de memoria de solo-lectura que guarda cambios persistentes aun si la computadora está apagada (siempre y cuando la batería del CMOS tenga carga) 

Nota al margen: No confundir EPROM/EEPROM con RAM. 

El BIOS podría considerarse como un mini-sistema operativo al cual se puede acceder generalmente a través de las teclas ESC, DEL o F1 durante el inicio para realizar algunas configuraciones mínimas de arranque o cargar la configuración default.

UEFI (Unified Extensible Firmware Interface)

UEFI es más moderno, comunmente hallado en computadoras personales (lease laptops y PCs hogareñas) modernas, estaciones de trabajo y servers y si bien realiza las mismas tareas que el BIOS (y más) en vez de almacenarse en EPROM/EEPROM, su configuración se almacena en disco. Para ello, se crea una partición (partecita o fracción aislada del resto del disco) pequeña donde reside el .efi. Esta partición se suele llamar ESP (EFI System Partition)

UEFI Permite, entre otras cosas, bootear más rápido, y también posee una opción "Secure Boot" que la mayoría de las personas que utilizamos linux solemos deshabilitar. Esto es así por que si bien, en escencia, el secure boot sólo permite que arranque software autorizado y firmado digitalmente, en muchos casos suele tratar a algunos sistemas operativos como malicioso y no permite su arranque.

La particularidad mas distintiva de UEFI sobre BIOS es que corre en 32 y 64b, por lo cual, a diferencia de BIOS que sólo permite input vía teclado, UEFI provee una interfaz gráfica más compleja y la utilización del mouse para su configuración y análisis. 

¿Cual me conviene? ¿UEFI o BIOS? 

Depende del uso que le se le de a tu sistema. 

Si no poseés partis o discos mayores a 2TB, BIOS Funciona bien. También ver que tipo de hardware poseés. 

En la actualidad, y más aun en latinoamerica, muchos sistemas poseen hardware que está en óptimas condiciones, aún despues de una decada de uso (.. y un poco más también) Es por ello que UEFI posee lo que se conoce como legacy support, que permite el funcionamiento de hardware "antiguo" 
Asimismo, firmas de procesadores como Intel, anunciaron que, a partir del 2020 todos sus productos dejarán de funcionar con BIOS. 




¿De donde viene UNIX? ¿Por qué se llama así?

Un poquitito de historia...

En algún que otro podcast he hablado de Unix y sus orígenes, pero, como el público se renueva, voy a volcar en este humilde artículo, de manera muy breve, como es que Unix existe y por qué se llama así.




Para hablar de Unix, hay que mencionar MULTICS (Multiplexed Operating And Computing System, o Sistema de Operaciones y Computos Multiplexados)

Si se preguntan que joraca significa Computos Multiplexados, es una técnica que junta dos o más señales eléctricas que provienen de sensores, sistemas o cualquier otro elemento y las junta para poder enviarlas a través de un único canal de comunicación.

El proyecto MULTICS comenzó a mediados de la década del 60 en un esfuerzo combinado entre el MIT, General Electric y Bell Labs, aunque este último abandonó el proyecto a finales del 69. 

Ken Thompson llegó al proyecto dentro del equipo de Bell Labs. (Si quieren saber más acerca de Ken Thompson, lean mi artículo "¿De Donde Viene GREP?)

Thompson estaba impresionado con el potencial de MULTICS, pero al mismo tiempo estaba convencido que era innecesariamente complejo y que se podrían hacer las mismas tareas de una manera mucho mas sencilla. 

En 1969 programó el primer Sistema Operativo, llamado UNICS (Uniplexed Operating and Computing System) 

Poco tiempo más, para que se leyera más canchero, se le cambió la CS por una X, pero el significado era el mismo. Así fue como dejó de llamarse UNICS para comenzar a llamarse UNIX. 

En el 73 Thomson se unió a Dennis Ritchie, quién había desarrollado el primer compiler para el lenguaje C. A partir de ese momento, reprogramaron el kernel de Unix en C por completo. 

En el 74, salió la primera versión de UNIX con licencia para universidades. En el 78 salieron las primeras dos líneas divergentes.  El primer branch, conocido como System V (SVR4) y el branch BSD (Berkeley Software Distribution) 

... No se olviden de BSD, por que más adelante será importante. Quedensé con esas síglas en la cabeza mientras leen.

En ese año Thompson trabajó junto a dos estudiantes de la Universidad de California (Berkeley) donde desarrollaron la primera versión de Unix de dicha universidad. 

De esta versión de UNIX (BSD) nacieron el editor vi, C Shell, Virtual Memory, Sendmail y soporte para el protocolo TCP/IP. 

De BSD también nacieron otras variantes de Unix, como FreeBSD, OpenBSD, DragonBSD y Darwin (Mac OSX) 

¿Y que hay de la otra branch (SVR4)? 

Ese branch fue lo que inspiró a Linus Torvalds a desarrollar el kernel linux. Mucho de lo que es Linux tiene un parecido mas a SVR4 que a BSD (aunque ambos son muy similares)

Una de las particularidades de Unix fue, es y será la de su capacidad para operar en varias arquitecturas de procesamiento, como x86 64 y 32b, ARM v4,5,6,7,8, PowerPC, RISC-V y UltraSPARC, entre otras. 

Encriptar passwords para utilizar en scripts de BASH

Automatizar tareas en Linux con scripts en BASH es algo maravilloso. En algunos casos necesitamos desarrollar algún script que se conecte a otro server, o que utilice la función SUDO (Super User DO, o "hacer como super user") pero esto revelaría el password de la cuenta en la lista de SUDOers, por lo cual, una buena manera de aumentar el nivel de seguridad, es salt-hasheando el password.


Antes de comenzar, si no están muy en tema con saltear hashes, les recomiendo mi artículo ¿Cómo funcionan las contraseñas y por qué recomiendo SALT HASH? explico en profundidad que es saltear un hash y por qué está buenisimo. 


Para poder utilizar passwords con salt hash necesitaremos que nuestro sistema cuente con openssl y sshpass. Ambas disponibles en RHEL 8

DEBIAN

sudo apt install openssl
sudo apt install sshpass

RHEL/CENTOS/FEDORA

dnf (o yum) install openssl
dnf (o yum) install sshpass


En el siguiente ejemplo, el password de mi user sería miPassword:

echo 'miPassword' | openssl enc -aes-256-cbc -md sha512 -a -pbkdf2 -iter 100000 -salt -pass pass:'PassParaDesencriptar' > .llave.txt

chmod 600 llave.txt 

Lo que hacemos es salt hashear el password y agregar un password random que nos servirá como desencriptador. Luego enviamos la llave generada a .llave.txt

(notese el . para hacer el archivo oculto)

Una vez que tenemos la llave guardada y chmodeada para que solo nosotras/os tengamos acceso, podemos pasar a desarrollar nuestro script.

#!/bin/bash 
# Hacemos algunas variables para poder conectarnos o sudear
USUARIO=alexia
MIPASS=$(cat .llave.txt | openssl enc -aes-256-cbc -md sha512 -a -d -pbkdf2 -iter 100000 -salt -pass pass:'PassParaDesencriptar') 

#si el proposito es correr una serie de comandos con sudo se puede utilizar el formato 
echo $MIPASS | sudo -S comandos aquí.

#Si utilizaremos el script para conectarnos a otro server, podemos asignar el host a otra variable
SERVIDOR=otroserver0004srv

sshpass -p $MIPASS ssh -T $USUARIO@$SERVIDOR
#comandos en el server remoto aqui

Parametros:


enc -aes-256-cbc: El tipo de encoder. Utilicé el standard avanzado de encriptación. llave cifrada de 256 bits con block chaining.

-md sha512: el tipo de hash. Utilizo el algorítmo criptográfico SHA512. 

-a: Este parametro le dice a OpenSSL que aplique el encoding de tipo Base64 antes y después del proceso de encriptado y desencriptado. 

-pbkdf2: Utilizando una función derivada 2 basada en un password hace virtualmente imposible la obtención de la clave a través de un ataque de fuerza bruta.

-iter 100000: Asigna el numero de calculos que hará la función pbkdf2. 

-salt: se le agrega un salt random al password hasheado que hará imposible desencriptarlo, aun si conocen parcialmente el password de tu cuenta. 

-pass pass: ’PassParaDesencriptar’: El password que usaremos para desencriptar el password. (No es el password de la cuenta)


Espero que les sirva. 



Slackware 15 Beta disponible

 


Slackware Linux es la distro linux mas antigua que existe (y funciona muy bien)


Es, junto con Debian, la madre de todos los sistemas operativos Linux que existen en la actualidad. 

Slackware es anterior a debian, y desde el cual se han basado distros gigantescas como RedHat o SuSE. 


La nueva versión de Slackware incluye:


  • Python 3.9
  • Mozilla Firefox 87
  • Thunderbird 78.9.1
  • KDE Framework 5.81
  • KDE Plasma 5.21
  • Xfce 4.16
  • GNOME 3.36/3.38

..Y muchas mas. Click aquí para ver la lista completa (en inglés) 


Para descargar el .iso, utilizar cualquiera de las siguientes opciones:

Standard (Recomendada):

https://slackware.uk/people/alien-current-iso/slackware64-current-iso/slackware64-current-install-dvd.iso

Mini 64b:

https://slackware.uk/people/alien-current-iso/slackware64-current-iso/slackware64-current-mini-install.iso

Mini 32b:

https://slackware.uk/people/alien-current-iso/slackware-current-iso/

El Gobierno Ruso Comienza la Migración Masiva de Windows hacia Astra Linux



En enero de 2018, el Ministerio de Defensa Ruso anunció los primeros planes para transferir los sistemas militares rusos de Windows a Astra Linux, por lo que pidieron a RusBITech que hiciera algunos ajustes y enviara su operativo a un nuevo proceso de certificación.

El temor de Rusia es que Windows, al tratarse de un sistema operativo de código cerrado y desarrollado por una compañía estadounidense, pudiera tener puertas traseras que pudieran ser aprovechadas para espiar las operaciones rusas.

¿Qué es Astralinux?

Astralinux es un sistema operativo de origen Ruso de alto rendimiento. Fundamentalmente para ser utilizado en instituciones públicas y gubernamentales con énfasis en seguridad.
Está basado en Linux Debian.


Este sistema operativo es la respuesta al decreto ruso №2299-р del año 2010 que intenta reacomodar todos sus sistemas de informática para que funcionen con software libre.


En febrero del año 2018 Rubistech, la desarrolladora de este sistema, anunció que lograron portear Astra para que funcione con los microprocesadores rusos Elbrus y poder dejar de utilizar procesadores Intel.

En el 2019 China anunció que comenzó a utilizar Astralinux en sus sistemas de la planta nuclear de Tianwan.

En el mismo año, las computadoras portatiles rusas "super seguras" MiG comenzaron a funcionar con Astralinux.

A inicios de este año, Astralinux fue implementado en las compañías petroleras rusas y en los sistemas de sus plantas nucleares, cubriendo más de 15000 computadoras de trabajo. 


¿Se viene el final de los sistemas operativos corporativos de código cerrado, en favor de sistemas libres? 

Esperemos que así sea.
Copyright (C) 2019 - Chica de Sistemas. Con la tecnología de Blogger.

Páginas