Showing posts with label administración. Show all posts
Showing posts with label administración. Show all posts

Monday, January 18, 2016

Problemas.

La vida es la suma de todo lo que sucede y de lo que nosotros y el colectivo, tenemos conocimiento. Parte de la vida, consiste en problemas; son parte de ella y son inevitables; esto no es una opinión ni una cuestión democrática... los problemas existen y ya. Así como en la vida, en el campo de la tecnología también tenemos problemas. Y respecto a ellos, podemos: 

• no hacer nada.
• dejar al problema ser, si es leve.
• pedir ayuda.
• esperar que alguien más lo resuelva.
• reiniciar la aplicación o la PC - a veces esto funciona.
• formatear la PC para ahorrarnos la frustración y evitar buscar la solución.
• comprar otra PC -como algunos de mis amigos hacen.
• hacer distro hopping.
• pagar por soporte. 
• hacer muchos clicks cuando la PC se traba y pretender que estamos resolviendo el problema mientras la PC toma su tiempo para resolver el problema por su cuenta (es un equivalente a orar en el mundo real).
• DIY: do it yourself.

Yo opto por el DIY; se requiere un poco de pelotas extra, el hacer las cosas por cuenta propia. Esto no te hace "más especial" o "úniko", pero te aporta cosas buenas como ser humano. Te da paciencia, ejercita tu mente, te vuelve más resiliente a las frustraciones, te hace pensar de forma no-convencional, simplificar las cosas, descomponer los problemas, pensar en distintas maneras de resolver un mismo problema, te vuelve recursivo, creativo, pragmático, organizado, etc. Te vuelve  un poco menos lento y dependiente de otros. 

Ahora, tener la buena voluntad no basta. Estoy seguro que más de alguna vez, muchos de nosotros tuvimos las intenciones de resolver un problema con nuestras distros alguna vez y luchamos hasta que nos venció. Esto pasa, no porque el problema sea imposible de resolver (sí existen problemas imposibles, pero son muy inusuales), sino porque nos hace falta método, experiencia y conocimiento necesarios para resolverlo. 

Para todo qué, hay un cómo. Esta entrada no es un manual técnico como tal, sino que constituye un resumen de lo que he aprendido en mi vida laboral como técnico en hardware.


Para resolver un problema, primero tenés que entender el problema.

Una de las cosas que quiene trabajamos en esta industria aprendemos con el tiempo, la práctica, los clientes y la experiencia es eso: identificar el problema es lo primero. Esencialmente se trata de procurar un diagnóstico correcto del problema, para proveer la solución efectiva. No se puede poner la cola al burro si no se sabe dónde está el jodido burro. 

Sólo este primer paso involucra un montón de cosas de qué hablar. Tal vez luego ampliemos la explicación. 


Una vez hemos identificado el problema, tomamos acciones correctivas.

Una vez sabemos cuál es el pedo, sus causas e implicaciones, buscamos las soluciones; puede que ya existan soluciones a él; puede que haya una sola o varias. Lo importante es, tomar acción e implementar las soluciones que tenemos disponibles. Este paso no es realizable, o si lo es, no es eficiente ni efectivo si no hemos cumplido con el anterior. Ojo.


Una vez resuelto el problema, implementamos acciones preventivas.

Curarse en salud. Esto varía según la causa del problema y el control que tenemos de las variables del entorno: si tuvimos un un problema causado por un controlador de video y resolvimos usando otro controlador, pues será inevitable que surja el mismo problema si nos vemos forzados a reinstalar el mismo sistema operativo (aunque aquí ya no sería tan problema, porque tenemos conocimiento previo, y resolverlo debería entonces, implicar menos tiempo y esfuerzos). 

Las acciones preventivas pueden ser tan simples como anotar las cosas que hicimos para resolver el problema y guardarlas en un lugar seguro (el artículo anterior es una forma de acción preventiva que tomé respecto a un reto/problema que resolví), hasta reportar un bug, educar a un usuario, crear documentación que antes no existía al respecto, cambiar código fuente, implementar un proceso nuevo, replantear un algoritmo, etc. Cualquier cosa que te ayude a evitar en el mejor de los casos o mitigarlo en caso de reincidencia a futuro.


Cierre. 

El closure es algo necesario; los cierres implican el fin de un ciclo y el inicio de otro. Hacen bien tanto mental como emocionalmente. En todas las culturas, sucesos importantes, celebraciones y demás eventos, y cada uno tiene un cierre. Ayuda al individuo para recuperar el sentido de perspectiva respecto al tiempo y el espacio. Personalmente, una vez haya resuelto un problema o no haya podido resolverle (de nuevo, no todo puede resolverse), hago una evaluación personal: ¿qué aprendí de esto? ¿cómo me beneficio de ello? Al final, ganar o perder no importa tanto como sacar lo mejor de ambas circunstancias para uno y los demás. Perder es ganar si uno es capaz de pensar en términos de funcionalidad; ganar es perder si fuera del sentimiento de logro uno no aprende nada de la circunstancia. Una vez has reconocido las lecciones aprendidas, es hora de cerrar capítulo y moverse.

Por ahora eso es todo. Como dije antes, esta no es un manual detallado  como una descripción a grandes rasgos de un proceso que nos puede ayudar a todos a mejorar nuestras habilidades de resolución en GNU/Linux y por qué no, la vida en general :)

*Salvadoreñismo: achicopalarse.

Thursday, January 14, 2016

Niveles Sayayín en Linux.

A grandes rasgos, tu nivel de Sayayín Linux, se define por tu experiencia en GNU/Linux:

Nula.

Hasta hace unos días, no sabía qué cojones es Linux y todavía no sé qué putas es la parte de la  "GNU"; ¿es la versión geek de la ONU? Por cierto, dónde putas está la tecla "any"?  

 

Primera vez: último día virgen. 

Después del despelote, conseguí una copia de una distro. La bajé torrenteada o vía descarga directa, descubrí que el Windows Media Player no sirve para quemar ISOs (de hecho, no sirve para mucho, a excepción de mostrarme las portadas de los álbumes de música que no tenían portada, porque obviamente me espía y se conecta al internet para darle mi identidad al gobierno estadounidense); alguien me dijo que podía instalar un sistema operativo en una USB y hasta en una micro SD... wow, ¡este siglo es una gran época para vivir!

Después aprendí a cambiar la secuencia de booteo de mi pc para evitar arrancar windows y poder correr el medio de instalación donde puse Linux. Seguí el wizard de instalación cuyo requisito mínumo es tener un IQ equivalente al de un periquito australiano, y listo: arranqué al escritorio.

Básica: n00b.

He usado Linux un par de veces, he hecho "distro hopping" y eso... sé un poco de Terminal... y la uso para poner mi escritorio bonito, pero la Terminal no es santo de mi agrado y mejor le pido a alguien que me dé la respuesta a problema que yo causo cuando no la sé. 

Logré instalar los drivers de mis dispositivos privativos, pude activar los botones para disminuir la luz en la pantalla de mi laptop. Descubrí que Outlook no es el único cliente de correo que existe; de hecho, descubrí qué significa la palabra "cliente" en el concepto "cliente de correo" y por deducción, en informática en general. Instalé Flash; ya puedo ver porno en internet y fapearme sin licencias propietarias... success!!! 

Como pingüino básico, necesito ayuda para resolver problemas.

A veces cuando tengo problemas, voy a FB y escribo en mayúsculas  "¡AYUDA!" para que me tiren la respuesta; si no me la dan, hago rabieta  y me regreso a Windows temporalmente o pruebo otra distro a ver si me corre mejor... y si no, uso otra, y otra... y así... creo que le llaman "distro hopping".

Intermedia: entusiasta.

He configurado Linux en distintos equipos (ahora entiendo que cada equipo y cada distro operan a veces de maneras diferentes); me siento cómodo usando la Terminal; sé cómo agregar repos no oficiales, e instalar programas desde los binarios o el código fuente. Sé leer, escribir, sumar, contar, atarme los zapatos y limpiarme el culito después de ir al baño, así que soy capaz de leer y entender un mensaje de error, una advertencia o al menos, localizar información sobre los problemas y sé dónde buscar info y respuestas para resolverlos. Descubrí las man pages, y los foros y documentación oficial de mi distro; ellos son mi punto de partida cuando necesito ayuda. Voy a Gentoo o la Ubuntu o Arch Wiki a buscar respuestas, sin importar si uso Fedora, Kali o Mint, porque sé que ahí las encontraré. He aprendido un par de buenas prácticas de seguridad y las aplico. He configurado una distro desde el sistema base hasta dejarla como quiero. Lo he hecho varias veces. Podría incluso guardar mis snapshots para reutilizarlos de ser necesarios. Comparto mis configuraciones cool con otros unixeros (sé cuál es la diferencia entre Unixero y Linuxero).

Como pingüino intermedio, sé cómo buscar soluciones a los problemas. 
No estoy  seguro si lo que he aprendido me vuelve un "usuario intermedio", porque entiendo que, como en artes marciales "un cinta negra es un cinta blanca que nunca se rindió", y que, como dice Hatsumi Sensei, "everything is basics" (todo a partir de las reglas y principios básicos). Sobretodo, tengo el conocimiento y la decencia suficiente para saber que instalar Conky o usar Android no cuentan como "tengo experiencia con GNU/Linux" para entrar al nivel básico en esta lista :v turn down for what???!!!!

Avanzado.

Sé resolver problemas, personalizar mi equipo en aspectos técnicos (lo estético ya está fuera de discusión aquí porque es una cuestión de gustos personales y opiniones, no algo absoluto), soy capaz de monitorear y entender procesos, elaborar reportes administrativos, determinar puntos de falla, y administrar mi(s) equipo(s) de forma remota; desarrollo mis propios scripts para automatizar tareas, uso versiones Alphas y Betas para aprender y descubrir aspectos de rendimiento más que de apariencia; sé cómo migrar datos en mi red de forma segura. 

De hecho, laboro en el área: Configuro y administro positivos en una red, entiendo cuál el concepto verdadero de "hacking" y sé que es mucho más amplio que el concepto que los niños rata tienen. Corro servidores de producción, hago pruebas de seguridad, sé cómo cuidar mi red y a mis usuarios. 
Evito tomar screenshots de operaciones internas porque sé que eso es confidencial. No me mato peleando en FB porque alguien menciona a Windows o Mac; estoy ocupado administrando la red/base de datos/desarrollando código/gestionando usuarios/haciendo seguridad forense, etc.

Como pingüino avanzado, trabajo para resolver problemas en mi equipo y mi red de usuarios.

Contribuyente.

Aporto a la comunidad ya sea con código propio o auditando código ajeno, reporte de bugs, soluciones, modero foros, mantengo paquetes en una distro, he sido nombrado "usuario confiable" por un proyecto, audito cambios, trabajo con gente de forma local o remota para desarrollar proyectos y darlos a la comunidad.

Como pingüino contribuyente, aporto para que otros puedan obtener ayuda y resolver sus problemas.
 

Creador.

Hago software que causa impacto en la sociedad. Inicio mi propia distro, DE, Framework, plataforma móvil, plataforma en la nube, herramietntas de gestión. Lidero un proyecto. Realizo ideas.

Como pingüino creador, yo creo soluciones a los problemas. 

NOTA: pueden faltar o sobrar cosas y niveles incluso, si sos más detallado y técnico. Esto es, medio en serio, medio cómico y su objetivo es, invitarte a la auto-evaluación objetiva: sin sentimentalismos, ni acusasiones, ni adulaciones, para que podás identificar dónde estás parado y hacia dónde podés ir... si te lo proponés y trabajás por ello. Saludos :)

Sunday, December 27, 2015

Comando watch: ejecución de programas periódicamente

NOTA: Como lo mencionaba antes, los artículos que compartiré de ahora en adelante pueden o no ser adecuados para novatos; porque requieren un poco más de esfuerzo y conocimiento para previo para entenderlos. Este artículo habla de  dos cosas: primero, el uso de un comando nuevo y muy útil, pero cuyo potencial no se aprovecha si no hablamos de lo segundo: las pipelines o tuberías. No vamos a profundizar en el segundo aspecto porque, aunque no es extenso, requiere especial atención y dedicación; le veremos de grosso modo para entender la flexibilidad de los sistemas operativos Unix. Si estás interesado en las pipelines, te sugerimos investigar en línea mientras publicamos algo dedicado a ellas. 

Según 

$ whatis watch
watch (1)            - execute a program periodically, showing output fullscreen

Traduciendo: 

watch (1: comando de usuario) - ejecutá un programa periódicamente, mostrando el resultado en pantalla completa (o sea, abarca toda la Terminal).

Watch es un programa que ejecuta programas. ¿Por qué "watch" ("observar", "mirar")? ni idea; no lo he buscado, pero sospecharía que tiene que ver con su propósito: mostrar el resultado (el output) en la Terminal. Esto nos puede ayudar cuando queremos observar cambios en un documento o un proceso.

Por ejemplo,

Me estoy descargando un archivo de internet. Digamos que cerré la interfaz de la aplicación pero ella sigue corriendo en el background y no quiero volver a abrirla ―por pereza o porque no quiero que su GUI me gaste RAM que puedo dedicar a otra cosa― pero quiero saber cómo va la descarga. Entonces, recuerdo que antes hablábamos del comando ls, útil para LISTAR directorios y archivos en el filesystem. 
ls -s muestra el tamaño de los archivos (en Bytes, pero esto puede ser modificado según se necesite: $ ls --block-size=1M)
Entonces, si watch me permite ejecutar un programa cada cierto tiempo, puedo hacer que watch monitoree el tamaño del archivo, reportado por ls -s, conforme crece):

$ watch -n4 ls -s downloads/archivo_siendo_descargado_por_otro_programa
Te recuerdo que podés hacer esto para un archivo localizado en cualquier directorio si sabés la ruta absoluta o relativa a usar. Y esto te reportará un output así:

Instalamos FreeBSD hace un par de años y pensamos hacerlo de nuevo; esta vez con un poquito más de conocimiento para apreciarle y usarle mejor :)

Otro ejemplo:

(un poco más complejo) El otro día quería ver -por curiosidad- los cambios en tiempo real de la velocidad de mi CPU (cuando digo CPU, me refiero al microchip, al procesador, no al cajón de desktop; este es un término mal usado y debemos de dejar de hacerlo). Un colega en un grupo de Linux en FB decía que Ubuntu mantenía a sus procesador al máximo y por eso calentaba su laptop... pero recuerdo que una vez ya había medido la velocidad de mi CPU en tiempo real con watch dentro de Freya cuando tenía mi Phenom 960T; revisé los documentos de nuevo y para salir de la duda, lo hice en mi laptop nueva. 

La info del procesador se puede obtener de muchas formas según encontré en sitios diversos; pero me voy a enfocar en una manera simple. Primero, te voy a recordar el uso del comando cat.

$ cat /proc/cpuinfo  
muestra información relacionada a tu procesador: 

Según el número de núcleos detectados por tu sistema, esta muestra aparecerá una o más veces con diferente # en el primer campo (processor); en el caso de un Intel móvil, aparece cuatro veces, enumerados del 0 al 3 (este i5 es dual core, pero Intel hace uso de su Hyper Threading, duplicando el número de hilos como si fueran el doble de núcleos).
Y esto es útil, pero hay dos cosas:

• Sólo me muestra la velocidad base (donde está el modelo del cpu) y la velocidad en MHz al momento de ejecutar este comando (2670.281 MHz, o sea, 2.67GHz)
• Me llena la Terminal de información totalmente inútil/que no me importa de momento. Sólo quiero saber los cambios de velocidad en tiempo real o intervalos, no todas las tech specs del cpu.

Aquí es donde watch es útil:

Aplicando Pipelines:


Para mostrarte lo que quiero decir, usaremos adicionalmente el comando (que no vamos a ver con detalle, porque su uso es extenso y flexible) grep, que sirve para buscar patrones específicos de texto en un documento/archivo. 

vamos primero a usar una pipeline para unir a ambos comandos: 

cat | grep 

Esto se leería algo así: 

mostrar info (para el caso, del procesador); y usar una tubería (el " | " es una "pipe" o tubería) para que el resultado de cat, sea procesado por grep, quien se encargará de filtrar la info innecesaria y sólo de mostrar la sección específica que queremos. Las pipelines toman el resultado (output) de un comando y lo usan como info de entrada (input) de otro comando para que este haga una tarea con ella y la procese de forma que dé, otro resultado (otro output).

Vamos entonces con cualquiera de estos: 

$ cat /proc/cpuinfo | grep MHz
$ cat /proc/cpuinfo | grep -i mhz

Ambos van a lo mismo,  la opción " -i " dice a grep que sea indiferente a la capitalzación (en buen salvadoreño: que le valga verga si  hay mayúsculas o no, que igual muestre resultados si los encuentra). Entonces esto nos arroja lo siguiente:



Hasta ahí todo bien. PEEEEEEROOOOOooooOOOOooo... muestrala velocidad grabada al momento de ejecución; no en tiempo real. Aquí hacemos uso de watch: 

$ watch -n2 " cat /proc/cpuinfo | grep -i mhz "

Y este es el resultado: 


"Every 2.0s:" ... con -n2 establecí que watch ejecute cat | grep cada dos segundos. Y los cambios son reportados puntuales: 

-

Y listo.

En resumen: 

• watch nos sirve para ejecutar otros comandos (o sea, otros programas) a intervalos definidos por el usuario/administrador. Así podemos monitorear en tiempo real, procesos y tareas que estamos ejecutando.
• las pipelines ( cuando veás este símbolo en un comando o combinación de ellos " | ", seguramente estás frente a una pipeline) nos sirven para ejecturar comandos consecutivamente, y que el resultado de uno, sea manipulado y procesado por otro.

Ambos ejemplos son relativamente rústicos para las herramientas con las que contamos actualmente; el propósito de estos artículos es 1) familiarizarte con tu Terminal y la CLI, 2) prescindir de bloatware (software innecesario) que desperdicie espacio en tu disco, y de GUIs que utilizan recursos extra para llegar a lo mismo, 3) mostrarte la flexibilidad y potencial de las herramientas de Terminal, valoradas especialmente por SysAdmins veteranos y expertos del FOSS. 

Espero que te haya gustado y sido útil esta nota. Compartila, comentá y avisanos si te gustaría que hablemos de otros temas en particular. Saludos :) 

Thursday, December 24, 2015

Extender tu partición / (root) sin herramientas gráficas; parte III.

Una vez me conecté, hice lo siguiente:

# df -h
Filesystem      Size  Used Avail Use% Mounted on
dev             3.7G     0  3.7G   0% /dev
run             3.7G  508K  3.7G   1% /run
/dev/sda1        15G  3.4G   11G  25% /
tmpfs           3.7G     0  3.7G   0% /dev/shm
tmpfs           3.7G     0  3.7G   0% /sys/fs/cgroup
tmpfs           3.7G     0  3.7G   0% /tmp
tmpfs           742M     0  742M   0% /run/user/0

Mi directorio root sigue mostrándose como de 11GB. Eso es porque df -h muestra el directorio donde está montada la partición, no la partición como tal. Por eso, volvemos a usar fdisk -l para mostrar las particiones:

# fdisk -l
Disk /dev/sda: 111.8 GiB, 120034123776 bytes, 234441648 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x000bcc1a

Device     Boot Start      End  Sectors Size Id Type
/dev/sda1        2048 62916607 62914560  30G 83 Linux

Cómo podés ver, los cambios sí tuvieron efecto en la partición, pero el tamaño del directorio (filesystem) sigue siendo de 15GB; hace falta redimensionar el filesystem. 

Como podés ver, mi unidad de almacenamiento mide 111.8 (un SSD de 110GB), y la partición ya reporta mis 30GB... pero mi filesystem de root (o sea, el sistema de directorio de root) sigue siendo de 15GB. Debo de extender el tamaño del filesystem; lo hago con esta herramienta: resize2fs.

NOTA: resize2fs redimensiona los filesystems en formato ext2, ext3, ext4. Puede encoger o extender el filesystem si se accede desde fuera del sistema operativo (como una imagen en vivo, por ejemplo, o si tenés el disco duro conectado como "slave" o secundario/adicional en otro equipo); pero si estás corriendo desde el sistema operativo, sólo vas a poder extender el filesystem en cuestión, no encogerlo. A esto se le llama "online resizing", entre otras. Encontré resize2fs en Elementary y Arch; no tuve que instalar nada adicional para usarle.

Vamos entonces a hacer la expansión del filesystem de root, en la partición correspondiente (df -h te dice cuál es la partición correspondiente, recordalo); en mi caso:

# resize2fs /dev/sda1
resize2fs 1.42.13 (17-May-2015)
Filesystem at /dev/sda1 is mounted on /; on-line resizing required
old_desc_blocks = 1, new_desc_blocks = 2
The filesystem on /dev/sda1 is now 7864320 (4k) blocks long. (mensaje de la felicidad :D )

Y confirmo cambios en el tamaño del directorio:

# df -h
Filesystem      Size  Used Avail Use% Mounted on
dev             3.7G     0  3.7G   0% /dev
run             3.7G  508K  3.7G   1% /run
/dev/sda1        30G  3.4G   25G  12% /
tmpfs           3.7G     0  3.7G   0% /dev/shm
tmpfs           3.7G     0  3.7G   0% /sys/fs/cgroup
tmpfs           3.7G     0  3.7G   0% /tmp
tmpfs           742M     0  742M   0% /run/user/0



¡LISTO! ya tenés más espacio en el directorio y partición de root :D :D :D  Ya podés seguir descargando porno y tonterías en tu partición. 

Extender tu partición / (root) sin herramientas gráficas; parte II.

Entonces, ya determinaste cuánto espacio más podés/querés adicionar a tu partición de root. Ahora hay que agregarlo. 

¿Cómo lo hago? fácil; para agregar más espacio a la partición de root, borrás la partición de root. ¿Ah? La borrás y luego la recreás con el nuevo espacio total. Si comenzaba en 7GB y querés que sea de 25GB entonces la recreás con 25GB en total. 

¿Estás seguro? ¿no me voy a cagar en todo? Sí, estoy seguro; y no, no te vas a cagar en todo; todo va a estar bien SI y sólo SI el primer sector de la nueva partición coincide con el primer sector de la nueva partición
Ahora, asumo  que vos sos un ser humano responsable y que sabés cómo usar el papel higiénico de forma apropiada y de la misma forma sabés cómo respaldar tus datos... pero como no lo sé con certeza y no me interesa, dejo este disclaimer amigable: yo no soy responsable de cualquier cagada que le hagás a tu equipo. Respaldá tu info primero.

Procedemos: 

# fdisk /dev/sda

Welcome to fdisk (util-linux 2.27.1).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.


Command (m for help): d (esto borra la partición)
Selected partition 1
Partition 1 has been deleted.

Command (m for help): n (hacemos la nueva partición)
Partition type
   p   primary (0 primary, 0 extended, 4 free)
   e   extended (container for logical partitions)
Select (default p): p (por supuesto que primaria)
Partition number (1-4, default 1): (la tecla "enter" acepta el valor default)
First sector (2048-234441647, default 2048):  (la tecla "enter" acepta el valor default)
Last sector, +sectors or +size{K,M,G,T,P} (2048-234441647, default 234441647): +30G (el nuevo espacio que quiero; el tuyo puede ser distinto. Si lo querés en megas, usá M y la cantidad apropiada; probablemente tendrás que usar unidades/decenas/centenas de millares)

Created a new partition 1 of type 'Linux' and of size 30 GiB.

Command (m for help): w (escribe y guarda cambios)
The partition table has been altered.
Calling ioctl() to re-read partition table.
Re-reading the partition table failed.: Device or resource busy
(no te asustés, el de arriba es una advertencia lógica y normal)
The kernel still uses the old table. The new table will be used at the next reboot or after you run partprobe(8) or kpartx(8).

# reboot 0 
(es un número cero, significa: reiniciá ya, saltate la cuenta del minuto y medio)
Esto fue lo que hice hace un par de horas. 
Podría explicarte cada línea, pero es extendernos y además, estoy seguro que si te interesa, vas a traducirlas por tu cuenta o usar un traductor. Ya en la otra parte explico cómo concluir esto. 

Extender tu partición / (root) sin herramientas gráficas; parte I.


PARA ENTENDER este artículo, te sugerimos aprender los conceptos de filesystem, directorio, particiones y documentación adicional sobre fdisk.

Si te atreviste a configurar manualmente tus particiones cuando instalaste tu distro, probablemente te preguntaste ¿cuánto espacio necesito para mi partición root? ¿cuántas particiones necesito? ¿cuánto espacio asigno  a una partición swap? 

Todas estas preguntas ya tienen respuesta en las wikis y documentos oficiales de cada distro. Para usuarios expertos, determinar cuánto espacio debe de ser asignado a qué, es fácil. Para los n00bs totales, también porque dejan que los instaladores lo hagan todo por ellos. 

Pero para los que estamos aprendiendo en el ruedo, puede que esas respuestas no nos ayuden totalmente y necesitemos un poco de flexibilidad; tal vez por error o por desconocimiento, asignamos manualmente espacio suficiente para instalar el sistema base y conforme instalamos más paquetes, vemos que nos quedamos sin espacio adicional en la partición, aun teniendo espacio extra en nuestro disco. Si ese sos vos, te explicamos cómo agrandar/estirar/alargar tu partición root vía Terminal, mientras tu sistema operativo está corriendo. A esto se le conoce como LIVE/ONLINE ROOT PARTITION RESIZING o "redimensionamiento de la partición root en vivo/en línea".

PREGUNTA IMPORTANTE ¿por qué habría de usar este método cuando existe Gparted o cuando puedo usar una imagen en vivo desde  un CD/USB? Porque tal vez estás aprendiendo de admiministración de sistemas o corriendo un servidor como en mi caso, o tal vez ya sos un administrador y tenés un servidor de producción al que forzosamente necesitás extenderle el root; o puede que no dispongás de otro sistema o imagen, o simplemente porque sos jarcor (hardcore) y querés aprender a hacerlo sin usar interfaces gráficas (GUIs). Si este es tu caso, seguí leyendo. De otra forma, buscá en línea cómo  usar Gparted, que es más fácil y apropiado para usuarios que no se sienten cómodos trabajando en Terminal porque no tienen el conocimiento y/o no desean aprender a usarla.


RECOMENDACIÓN ANTES DE CORRER UN COMANDO

Usá

$ whatis nombre_del_comando
$ man nombre_del_comando
$ nombre_del_comando --help
$ nombre_del_comando -h

por seguridad y para conocer un poco de ese comando antes de ejecutarlo.

De nada. Felices fiestas :D

Monday, July 20, 2015

Comando kill: asesiná procesos atacados.

Como n00b es difícil no meter la pata muy de vez en cuando. Justo hace unos momentos estaba reinstalando Noise (Music en Freya y Luna) para diagnosticar e intentar un problema que tuve con él y mi librería de música. Se instala con  

$ sudo apt-get noise 

cuando recordé que en algunos sitios he encontrado la siguiente variación:

$ sudo apt-get install -y nombre_del_programa_a_instalar_acá

y al hacer esto, el prompt que anuncia:

"After this operation, 4,829 kB of additional disk space will be used. Do you want to continue? [Y/n]" 

se salta, tal y cual lo describe $ apt-get --help, así que ya no es necesario estar presente durante la descarga para decir que "sí" a la instalación (vamos que podés ir al baño o por comida al refrigerador mientras la tarea corre por sí sola). La opción -y significa "Assume Yes to all queries and do not prompt": asumir que sí a las preguntas y no pedir respuesta. Como decía, recordé esa opción -y así que cancelé con Ctrl + z la operación. Cosa que fue tonta porque pude simplemente contestar "n" para abortar.  Así que cuando intenté 

$ sudo apt-get install -y noise

Recibí 

E: Could not get lock /var/lib/dpkg/lock - open (11: Resource temporarily unavailable)
E: Unable to lock the administration directory (/var/lib/dpkg/), is another process using it?

Intenté nuevamente, recibí el mismo error. Yo fui el responsable de este problema. Luego de una Googleadita rápida, descubrí que el /var/lib/dpkg es un directorio usado cuando APT está procesando una paquete/programa para su descarga e instalación. Al menos esa es la explicación más útil que encuentro para mi nivel de conocimiento. El punto es, no podía instalar porque el directorio usado para tal fin está "bloqueado y siendo usando por otro proceso". 

Busqué información para resolver esto. Hace tiempo conocí a kill y pkill pero esta vez no sabía cómo identificar el proceso. Entonces en un maravilloso thread del foro de Ubuntu, encontré las siguientes instrucciones: 

Primero: Identificar el ID del proceso que está atascando al apt-get:

$ ps aux | grep apt
este comando nos mostrará el número del proceso que está usando el apt del comando apt-get:

root      6020  0.2  0.0  72648  4020 pts/14   S+   22:07   0:00 sudo apt-get install noise
root      6021 11.0  0.7  90548 59296 pts/14   S+   22:07   0:00 apt-get install noise


El número del proceso se muestra en la segunda columna, justo después del nombre de usuario (para el caso, recordemos que sudo = SuperUserDO, lo que implica que es el root quien instala). 

Segundo: con esta información, podemos darle jaque mate al proceso:

$ kill -9 6020

El -9 es una opción dada por el comando kill e implica que el proceso será terminado forzosamente; o sea, que le damos jaque mate irremediable.  Ya con esto, pude continuar felizmente mi camino de destrucción accidental :v 

Espero que esto sirva. Recordá, si un día se atasca el apt-get, 

$ ps aux | grep apt



$ kill -9 númerodeprocesoacá

son tus mejores amigos :)

CLI sobre GUI: fondo sobre forma.

En este artículo, y este otro, les he hablado de cómo correr aplicaciones desde la CLI*, o Terminal. Antes de proseguir, quiero que todos tengamos clara la relación entre Forma y Fondo: 

Forma: continente, el envoltorio, el cómo.
Fondo: el contenido, la idea, el qué.

Una de las cosas más importantes para todo usuario de Linux, es aprender a usar su Terminal y unos cuantos comandos básicos como los que Jimmy nos compartía. A medida avanzamos en el uso de Linux, vemos que la CLI nos puede simplificar las cosas, o también complicarlas si no sabemos qué carajo estamos haciendo. Por ejemplo, ¿sabías que es posible abrir una página de búsqueda en tu navegador desde Terminal? Suponiendo que tenés Firefox o Chromium en tu distro, tratá:

$ firefox linuxdesobrevivencia.blogspot.com
$ chromium-browser elementary.io

Esto te ahorra el tiempo de ir al menú, buscar la applicación, darle click, esperar a que la GUI** cargue, mover el mouse a la barra de direcciones (o F6, si sos no sos tan lento) , ingresar la dirección, darle click al botoncito de la derecha (o apretar Enter, si no sos tan lento), esperar a que la página cargue, y disfrutar del fappin' después de seleccionar un video en exquisita alta definición. Dos simples bloques de texto sintetizan 40 años en el desierto de la GUI.

Como mencionaba en el  artículo de Deluge Console, podés abrir Terminal, arrancar deluge-console, agregar un archivo torrent, y dejarlo leeching/seeding mientras ves tu porno favorito desde tu navegador. 

Seguramente alguien puede pensar: "pero chele, ¿por qué y para qué querés correr una aplicación a puras letras y comandos? Si la rueda de caucho ya está inventada, ¿por qué querés seguir usando una rueda de piedra? La CLI es una cosa vieja, de los tiempos de MS-DOS" Mi respuesta es simplemente, por conveniencia. 

Claro, lo que es conveniente para mí, no puede serlo para vos. Eso lo tengo claro y no pienso convencer a nadie de que mi forma de operar y adminstrar mi equipo es la forma en la que deberías de gestionar el suyo. Ahora, si sos de la gente que le dedica tiempo a encontrar una mejor forma de hacer las cosas, te comparto lo que he aprendido sobr usar Linux: Aquí es donde radica la belleza de Linux. 

La Terminal te simplifica muchas cosas:

• Al correr tus aplicaciones vía CLI-Terminal, estás ahorrando el uso de recursos para tareas de mayor prioridad. Esto es importante cuando tu equipo cuenta con recursos limitados y necesitás gestionar diversas tareas a la vez. El consumo de RAM que implica mantener de una interfaz gráfica es reducido cuando la tarea se ejecuta desde terminal. De la misma forma, el uso de CPU, espacio en disco, aparte que tu atención  no se dispersa en los botoncitos, barritas, backgrounds, soniditos y animaciones. 

Raspberry Pi, modelo B: 256MB de RAM y 700Mhz de CPU. No es el tipo más rápido ni más fuerte, pero es lo suficientemente pequeño y ecológico como para hacer un servidor de descargas o headless server que ha corrido durante la noche cuando mi equipo principal está apagado.

• La CLI es importante para administradores de servidores: usualmente un servidor no tiene interfaz gráfica: como administrador querés usar tus recursos de forma eficiente y ejecutar tareas sin afectar negativamente la disponibilidad de recursos para la ejecución de otras tareas. Los administradores no suelen tener una consola tipo Alienware Command Center como este: 

Ejmplo de cómo la forma tiene alta importancia: Alienware Command Center para cambiar las luces de una Area 51. No poseo los derechos de esta imagen ni de la marca. Sólo la muestro con propósitos educativos. La forma es importante particularmente en objetos y bienes de lujo; la forma da status, alimenta el ego, nos hace sentir mejor y sana el horror vacui

Si no algo más o menos así: 

Fondo como prioridad: administración de un servidor remoto con el comando "htop", una versión versátil y turbocargada de "top". Aquí, htop muestra un CPU con 64 núcleos y 64GB de RAM. Toda distro de Linux tiene top por defecto. Si abrís tu terminal y escribís "top" vas a ver esto de forma menos gráfica y probablemente con menos procesadores. Pero por supuesto,  podés instalar con "$ sudo apt-get install htop", y disfrutá :)

• Incluso para proyectos caseros, como un servidor local, de firewall, de base de datos, etc., la Terminal te va a ahorrar tiempo y la molestia de tener que instalar software de terceros para monitorear algo tan simple como el tiempo de finalización de una descarga o carga, navegar entre directorios y copiar un archivo desde un equipo a otro, etc. ¿Para qué gastarías en licencias, ancho de banda, o recursos de tu servidor y tu workstation en renderizar la GUI cuando podés administrar y operar desde la CLI? Sí, es cierto que existen herramientas de assistencia remotas gratuitas para uso doméstico... como TeamViewer que te permite operar y acceder a tu workstation desde tu smartphone pero, ¿qué tal si tu batería tiene poca carga y sólo buscás iniciar o finalizar un programa?

¿Para qué necesitás botones, colores y defectos espaciales***? Si tu equipo tiene un cantidad relativamente escasa de RAM o de poder de procesamiento, no querés desperdiciar músculo en cosa que van a volver más lenta la ejecución de una tarea. Fondo ante todo.

No quiero armar debate; como diseñador gráfico aficionado, valoro la importancia del diseño y la estética visual; lo que digo es que no debemos de confundir la falta de íconos con fealdad: que una aplicación carezca de elementos visuales no significa que no sea usable; que no haya una forma elaborada, no implica que algo sea menos estético. De hecho, la Terminal tiene su atractivo: la belleza de lo simple -y en todo caso, si insistís en la importancia de lo estético-pero-funcional como tu servidor, podés aplicarle transparencia con ~/.devilspie como lo hice alguna vez en Fedora 20... o en el caso de Freya, la Terminal es transparente de fábrica y te funciona trabajar en ella mientras leés este blog :v

¿La CLI es mejor, más rápida y eficiente que la GUI? Depende quién lo pregunte. La GUI es una representación visual de la CLI. Un botón de "cerrar ventana", representa un comando de salir/suspender una aplicación. La GUI es la síntesis visual de la CLI; la CLI es la síntesis en código de la GUI. Para un usuario de casa, la GUI es el camino a escoger; de la misma frma para un creador de contenido multimedia, el asunto de una interfaz gráfica no viene al caso porque sí es necesaria para sus propósitos, como puede serlo para un agente de ventas, o un profesional de contabilidad.  

Lo que digo es que, para un usuario de Linux que quiere expandir su conocimiento y habilidades, la CLI es el Santo Grial.

Usar la CLI no es andar en llantas de piedra; al contrario: la CLI es más rápida siempre y cuando aprendás a escribir rápido, a usar tu teclado como se debe, a desprenderte de tu mouse y sobretodo a desarollar la capacidad de visualizar y conceptualizar sin asistencia visual...  pero esto es algo que usuarios dependientes de la GUI difícilmente van a entender.

Saludos.


*Command Line Interface: El "command prompt", terminal de comandos, terminal, etc. 
** Graphic User Interface: Interfaz gráfica: íconos, botones, cuadros, figuras geométricas, representaciones simbólicas de los comandos. Lo que volvió popular a Windows en un inicio; una de las mayores razones del éxito de iOS, de Android.
*** Efectos especiales.

¿Y qué carajos es un repositorio?

[Nota: he tratado de resumir lo que he leído y aprendido acerca del tema. Para el usuario curioso, las primeras líneas bastarán. Para quienes quieran conocer más del tema y adentrarse en el mundo del desarrollo y administración de centros de dato, sugiero aplicar esta información en tal contexto e investigar más]

Un repositorio es un directorio, lugar, espacio de almacenamiento desde el cual podés obtener software para instarlarlo en tu equipo localmente.  

Te lo pongo de esta forma: un repositorio sería un servidor/centro de datos/colección de software y/o paquetes en la nube al cual accesás para obetener software. El término no es exclusivo a Ubuntu, y mucho menos a Linux. Para entendrelo mejor, podríamos aplicar el concepto por extensión a cualquier infraestructura que nos permita acceder y descargar uno o más módulos, extensiones de software; algo tan simple como unas líneas de código hasta un sistema operativo completo. 

Quienes operan repositores usualmente van a proveerte de un Sistema de Administración de Paquetes, con el cual buscás, descargás e instalás  el software desde los repositorios. Por ejemplo, el APT (Advanced Packaging Tool) que las distros basadas en Debian usan, o el yum  (Yellowdog Updater Modified) de Red Hat y sus derivadas (Fedora, CentOS, etc.), Pacman en Arch (se dice arch, como en "archivo"), etc. 

Hay repositorios oficiales e independientes. Ahora, el propósito de usar un repositorio oficial, es que podás obtener software de forma segura. Los repositorios más grandes dedican parte de su infraestructura no sólo a tener un puñado de programas enpaquetados para que los descargués e instalés localmente, sino también a mantener estos repositorios seguros, libres de amenazas informáticas y fuertemente replicados por medio de "mirrors", es decir, varios centros de datos distribuidos en lugares físicos diferentes (sugiero leer de Centros de datos para entender mejor este concepto) para evitar la saturación de conexiones entrantes y para que vos podás accesar a ellos de forma fácil. He ahí  la importancia de la reputación de la organización que administra el repositorio.
Hay repositorios para usuarios y para desarrolladores, otros son gratuitos mientras que otros requieren pago para acceder a ellos; unos son oficiales de una compañía o marca, mientras que otros son independientes y mantenidos por un invididuo o grupos específicos de invididuos. Y así. 

Espero que esto te ayude. Hasta luego :)

Entradas populares.