El SysAdmin del 3er Mundo

todo lo que expliqué mientras nadie prestaba atención

plymouth boot screen

| Comments

Sigo con mi plan de “civilizarme”, me he propuesto dejar de parecer un friki en materia de software. He cambiado i3 por MATE (en la máquina personal) e incluso tengo un tema en el grub. Intenté cambiar Atom por Vim, evolution por mutt y double-cmd por mc; pero por gusto, acabé virando pa atrá.

Una de las cosas que antes solía molestarme en las distros duras como debian, era el hecho de que no tuvieran una pantalla bien bonita mientras buteaban. Ubuntu por ejemplo, te pone las bolitas.

Archlinux es particularmente rápido buteando, pero aún tenía conmigo mismo la deuda del bootscren pendiente.

Resulta que ya splashy no se usa, ahora la talla es un software con nombre de almendrón: Plymouth

Plymouth, es una proyecto de fedora, para proveer una pantalla de buteo a nivel de framebuffer. Hoy en día casi todas las distros butean con el framebuffer en la máxima resolución posible, así que me imagino que Plymouth sea algo bastante simple.

En el repo de arch no está incluido pero como todo, está disponible en AUR. La rutina ya la conoces. Selecciona el que dice plymouth pelao.

“yaourt”
1
yaourt plymouth

Ahora vamos a cambiar unos parámetros en el generador de imágenes de inicio. Localiza el fichero /etc/mkinitcpio.conf y ahí vamos a cambiar unas cosillas.

Primero necesitaremos poner el HOOK para plymouth. La documentación advierte que debe ser después de base y de udev, así que mejor ponlo de último. Por tanto, dentro de las comillas colocarás plymouth como un objeto más de dicha lista; como el último.

“/etc/mkinitcpio.conf”
1
HOOKS="base udev fulanito menganito el_ultimo plymouth"

Nota para los imbéciles: Si copias y pegas el código anterior, el sistema no te arrancará más.

Necesitaremos el módulo apropiado para pinchar el framebufer. En mi caso, desgraciadamente, uso nvidia, así que me quedó así:

“/etc/mkinitcpio.conf”
1
2
3
MODULES="nouveau"
#MODULES="i915"
#MODULES="radeon"

Fíjate que los demás quedaron a modo de comentario. Te aclaro que i915 es para las tarjetas de video Intel.

Si usas el blob oficial de nvidia, te jodiste. Ni sigas leyendo.

Ahora tenemos que decirle al grub, que incluya el parámetro splash en la linea de buteo. Eso lo hacemos editando el fichero /etc/default/grub

“/etc/default/grub”
1
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"

Yo en lo personal suelo quitarle “quiet” porque me gusta ver lo que hace el sistema mientras butea. Aunque ya no da tiempo. Como te dije, los sistemas modernos butean MUY rápido. Es más el tiempo en que carga init o el display manager, que el de buteo como tal.

Más adelante veremos que hacer para que la pantalla se vea más tiempo, por ahora terminemos de configurar. Tanto el grub como initramfs, tienen que reflejar los cambios

“reflejando cambios”
1
2
grub-mkconfig -o /boot/grub/grub.cfg
mkinitcpio -p linux

Si usas linux-lts, corre:

“reflejando cambios”
1
mkinitcpio -p linux-lts

Algo que suele molestar, es que el display manager te caiga en la cara de pronto. Arch suele manejar bien ese tema, pero por si acaso, nos aseguramos de habilitar la unit para cada display manager.

En mi caso yo uso slim y corrí:

“enable”
1
systemctl enable slim-plymouth.service

Puede que el tuyo sea:

  • gdm-plymouth.service
  • kdm-plymouth.service
  • lxdm-plymouth.service

Con eso ya debe estar listo para pinchar pero vamos a darle unos toquesitos finales.

El fichero /etc/plymouth/plymouthd.conf contiene los parámetros de configuración del mismo. El mío luce así:

“/etc/plymouth/plymouthd.conf”
1
2
3
4
5
6
[lazaro@artema ~]$ cat /etc/plymouth/plymouthd.conf
# Distribution defaults. Changes to this file will get overwritten during
# upgrades.
[Daemon]
Theme=tribar
ShowDelay=2

El parámetro ShowDelay, define que tiempo se mostrará la pantalla. Como ya te dije, arch a mi me butea en segundos. Si pones 5 ahí, la pantalla de buteo se mostrará cinco segundos. Dos buteando y otros tres pa que tu la mires mostrando su animación.

Yo cuando terminé de verla correr la primera vez; desinstalé plymouth. No me interesa tener 2 segundos adicionales de media por el mero hecho de que sea más bonito.

El otro parámetro, Theme, setea el tema que usarás. Para ver que temas tienes en el menú, corre:

“plymouth-set-default-theme”
1
2
3
4
5
6
7
8
9
10
[lazaro@artema ~]$ plymouth-set-default-theme -l
details
fade-in
glow
script
solar
spinfinity
spinner
text
tribar

A mi me gustó “tribar” y el que viene por defecto también está lindo, pero es una copia al carbón de MacOS.

OJO!

Cada vez que cambies un parámetro ahí, debes correr “mkinitcpio -p”

Ah! Una cosita, si en algún momento quieres ver lo que está haciendo el kernel por detrás de plymouth, presiona “home” mientras butea.

Eso es todo. ¡Reinicia!

Si no te queda bueno, al menos que te quede lindo.

Bill Gates

Si este artículo te resultó interesante, considere donar 0.003 BTC: 1LgL9cfT2StNk9gdedMJZseMnKJCEgQJdQ

git clone rápido

| Comments

En paises con internet lento (adivina a cual me refiero) el mero hecho de clonar un repositorio de git; puede llegar a ser un verdadero problema.

“git”
1
git clone --depth=1 http://repositorio.tld/fulanito/aplicacion.git

¿Rápido verdad? Es que solo cogió el HEAD, no el historial de commits completo.

Si lo quieres pa siempre, pon en tu gitconfig esto:

“.gitconfig”
1
2
[clone]
   depth = 1

Si este artículo te resultó interesante, considere donar 0.003 BTC: 1LgL9cfT2StNk9gdedMJZseMnKJCEgQJdQ

archlinux con dos kernel

| Comments

Tener los dos kernel y elegir cual butear con el grub al principio; no es algo sencillo en archlinux.

Por defecto, el grub dice tener dichas entradas en un submenú que nunca se ve. Para lograrlo, tenemos que hacer unos pases mágicos en el fichero:

/etc/default/grub

Primero instalamos los kernels; el lts y el fresco.

“los kernels”
1
pacman -S linux linux-lts

Ahora la configuración con la que logré eso, fue agregándole al final estas lineas:

“/etc/default/grub”
1
2
3
GRUB_DISABLE_SUBMENU=y
GRUB_DEFAULT=saved
GRUB_SAVEDEFAULT=true

Con eso, se salva la última entrada ejecutada. Por que, lo más obvio, es que la próxima vez que arranques, se cargue el último kernel que usaste. Lo inusual sería que cambies de opinión y cargues otro. Desgraciadamente, si como yo, usas btrfs como sistema de archivo, grub no podrá escribir el fichero con la última entrada seleccionada. Incluso te dará un error, diciendo que no puede escribir el fichero no se que.

Seguimos… Localiza y la linea de recovery y ponla en false:

“/etc/default/grub”
1
2
# Uncomment to disable generation of recovery mode menu entries
GRUB_DISABLE_RECOVERY=false

NO SE POR QUE, pero no se generan las dichosas entradas si eso no está en false. Además, tener el menú de recovery es bastante útil, en estas distros volátiles, uno nunca sabe cuando le va a hacer falta.

Paso final, generar el grub.cfg

“grub-mkconfig”
1
grub-mkconfig -o /boot/grub/grub.cfg

Va y si quieres, no es obligado, pero para probar, REINICIA.

Prefiero lidiar con las pifias de una comunidad
que con las mazmorras de una compañía.

Lázaro Armando

Si este artículo te resultó interesante, considere donar 0.003 BTC: 1LgL9cfT2StNk9gdedMJZseMnKJCEgQJdQ

compute remote uptime

| Comments

Vamos de atrás pa alante, el truco primero y la muela después.

“nmap”
1
2
[root@artema ~]# nmap -O -v 10.1.1.1|grep -i uptime
Uptime guess: 18.006 days (since Fri Aug 10 12:24:47 2015)

¿Que acaba de suceder?

Calculamos el tiempo que lleva el servidor remoto en pie. Fíjese que nos dice la fecha en la que el servidor arrancó.

¿Para que sirve esta información?

Para poner al responsable de la computadora remota contra las cuerdas en una situación crítica donde el momento de encendido o apagado de la máquina podría ser crucial.

Ejemplos:

Nuestro proveedor, el servidor proxy padre, afirma descaradamente que NO ha tenido problemas técnicos, pero nosotros sabemos que sí. En una discución crucial podría dejarle caer la pregunta. ¿Entonces porque su servidor se reinició el día tal?

Un servicio determinado falla a una hora determinada de la noche. Con esto podríamos saber si el servidor se está reiniciando, cuando y con que frecuencia.

El proveedor dice que ha tenido que reiniciar el servidor cuando en realidad nunca lo ha hecho.

El usuario dice que la máquina se le reinicia constantemente.

El usuario o el proveedor afirman que la máquina fue encendida a una hora determinada. O por el contrario, se afirma que la máquina a esa hora NO estaba encendida y el uptime dice lo contrario.

Saque usted, sus propias concluciones…

Taladrid Pasaje a Lo Desconocido

Si este artículo te resultó interesante, considere donar 0.003 BTC: 1LgL9cfT2StNk9gdedMJZseMnKJCEgQJdQ

transliteración del corán

| Comments

Una cosa muy chocante en el islam, es que el árabe es la lengua litúrgica y que el corán, solo está escrito en árabe. Cualquier corán escrito en otro idioma, es una interpretación del Corán, no un Corán. El corán debe ser recitado en árabe y si es posible, de memoria.

Lamentablemente para muchos, la transliteración oficial del Corán, está escrita de forma tal, que un angloparlante al leerla pueda hacerlo sonar lo más cercano posible a como suena en árabe.

Tomemos un ejemplo clásico:

بِسْمِ اللَّهِ الرَّحْمَٰنِ الرَّحِيمِ

Eso suena más o menos como:

bismi l laji rajmani rajiiim (la “i” bien larga)

La transliteralización más aceptada, que por supuesto, hay que saber leer inglés pa que suene; se escribe así:

bismi Allahi alrrahmi alrraheemi

La última palabra (alrraheemi) suena como “alrajiim” porque está escrita de forma que, un angloparlante la lee y se “acerca” a como suena en árabe. Se acerca una cuadra y media, al final, na que ver con como de verdad suena.

Sin embargo, el que no sabe leer inglés, lee cualquier mierda.

Una manera de leerlo, es usando una transliteración en Turco. Un tal Muhammet Abay hizo una que parece estar muy buena; pero requiere aprender a leer el alfabeto turco, que si bien usa letras latinas, lleva algunos signos diacríticos complejos que reflejan la fonética árabe. Si no se conoce la fonética árabe (o turca) es imposible leer turco.

El árabe, por complejo que parezca, no es tan difícil de aprender (A LEER) así que mejor aprender a leer árabe y listo.

Si este artículo te resultó interesante, considere donar 0.003 BTC: 1LgL9cfT2StNk9gdedMJZseMnKJCEgQJdQ

date_select en español

| Comments

Algunos componentes de Ruby on Rails, se pueden usar de manera independiente, como es el caso de active_record (sin dudas es el más potente). Pero otro que no se queda atrás, es active_support. Lleno de sorpresas y de joyas poco documentadas.

Para el que no lo conozca, en ruby on rails, hay un método muy cómodo que genera un select cuyas option son nada menos que la fecha. Los usuarios mononeuronales, encuentran más cómodo introducir una fecha así, que con un datepicker.

El método select_date genera una cosa similar a esta:

Pero con todos los meses y sus días claro. Ahí soló te puse un pedazito. Para generar esto, se supone que solo necesites poner algo como:

“select_date”
1
<%= select_date Date.today, prefix: :caudocidad %>

Luego en el controlador, generas la fecha, procesando el dato. Hay mil y una forma de hacerlo. Más mágica y menos mágica, yo lo hago de una manera bien rudimentaria:

“Time.mktime en el controller”
1
@cuando=Time.mktime params[:caudocidad][:year],params[:caudocidad][:month],params[:caudocidad][:day]

Como vez, a prefix: se le mandó un símbolo, que pasó a ser el valor del HTML generado, name=“caudocidad”. En mi caso, se llama “cadocidad” usted le pone como le de la gana. Sería :prefix=>‘nombre_que_quieras’ o prefix: ‘nombre’ en su versión corta.

En el controlador, params[:caudocidad], contiene un Hash, donde las claves :year, :month y :day tendrán los valores numéricos listos para ser procesados.

params[:caudocidad]
1
{:year=>2015, :month=>8, :day=>12}

Todo eso está muy bonito, pero lo jodido del caso, es que los meses vienen en inglés.

Llevarlo a español, requiere estar un poco familiarizado con el i18n de Ruby on rails.

Para el que no lo conozca, el i18n, es un sistema que nos permite crear aplicaciones en múltiples idiomas. De forma tal que nuestra aplicación le hable al navegador en el idioma que este soporta. Lo malo del caso es que no lo hace solo. Serás tu quien deba indicarle cuando usar que idioma. Una buena manera de hacer eso, es parseando el encabezado “content-” para ver que idioma soporta el navegador. Métodos hay miles, pero no se porque rails no lo hace solo.

Si nuestra aplicación fuera canadiense, le diría que cree un fichero para cada idioma. Pero como nuestra aplicación es Cubana, con ponerlo todo en el en.yml resolvemos el problema.

Al principio me fajaba con el en.yml y trataba de ponerle cosas, pero luego descubrí que hay una especie de esqueleto en la gema de active_support.

En vez de escribir un en.yml desde cero, podemos usar el que está en active_support. Ejecuta este comando:

“buscando el en.yml”
1
 gem  cont activesupport|grep en.yml

Copia dicho fichero a tu config/locales/en.yml y comencemos a editarlo.

En la linea 30 y pico. Hay una cláusula llamada month_names, ahí le pones los meses. A mi me quedó así:

“month_names, cerca de la linea 30”
1
2
3
    # Don't forget the nil at the beginning; there's no such thing as a 0th month
    month_names: [~, Enero, Febrero, Marzo, Abril, Mayo, Junio, Julio, Agosto, Septiembre, Octubre, Novimebre, Diciembre]
    abbr_month_names: [~, Ene, Feb, Mar, Abr, May, Jun, Jul, Aug, Sep, Oct, Nov, Dec]

Además, más abajo, por la linea 40, tienes el orden en el que se muestra la fecha.

“order: bajo la linea 40”
1
2
3
4
5
# Used in date_select and datetime_select.
order:
  - day
  - month
  - year

A mi me quedó así, porque los yumas ponen el mes delante y el día detrás.

Si miras más abajo, verás que tiene incluso la moneda (currency) y los separadores, por ejemplo, usar coma en vez de punto para separar los decimales. También están los numerales (millones, millares, centenas, etc…)

Hay un método muy curioso que yo uso mucho. Convierte un array en una oración delimitada por coma; pero pone una conjunción “y” en el último elemento.

‘to_sentence’
1
2
3
4
5
irb(main):> %w[perros gatos].to_sentence
=> "perros y gatos"

irb(main):> %w[papas malangas calabazas].to_sentence
=> "papas, malangas y calabazas"

El separador se configura ahí también. Por defecto dice “and” en vez de “y

Conclusión:

La instrumentación de active_support (ese nombre tan suigeneris se lo pusieron ellos) es bastante rica. Deberían verla bien de cerca. La guia es bastante escueta; te recomiendo que mires un poco el código fuente de active_support o la documentación de la API (que es casi lo mismo).

Si buscas en la misma ruta, pero con model donde dice support verás el YAML que utiliza ActiveRecord para generar los errores de validación. Ahí puedes ponerlos a tu manera. Osea, el contenido de ese YAML se lo adicionas al tuyo.

Si este artículo te resultó interesante, considere donar 0.003 BTC: 1LgL9cfT2StNk9gdedMJZseMnKJCEgQJdQ