El SysAdmin del 3er Mundo

todo lo que expliqué mientras nadie prestaba atención

flasheando modem al S4

| Comments

Es un mojón de los Samsung, tener el módem (banda base) como una partición y (por ende un firmware) aparte del sistema. Por este motivo, cuando flasheas cyanogen (léase “cualquier ROM”) una y otra vez; o cuando el teléfono se apaga abruptamente… Diiiicen que se corrompe el módem.

Entonces, de buenas a primeras, el teléfono te dice “tarjeta SIM expulsada, Reinicie”. Aveces al reiniciar no se soluciona el problema. Yo he estado hasta 3 días sin teléfono. Quitarle la batería un rato y volverla a poner, suele ser una solución, pero aveces, hasta 7 veces al día; he tenido que lidiar con el errorsito de los cojones.

La única solución paliativa que he visto, es, de vez en vez, al menos una cada dos mes; flahsear el módem.

El cómo dar con el módem te lo dejo de tarea. Lo siento, no soy la base de datos de bandas bases de samsung. La mía la busqué en google escribiendo el texto:

“modem SGH-M919”

Oséase, pidiendo el módem para mi modelo del teléfono, que al parecer, la M919UVUFNH7, es la última disponible para mi canchanfleta.

El proceso de flasheo, la primera vez, requiere que nos hagamos con el fichero PIT del teléfono.

Reinicia el teléfono en modo descarga. Si no sabes cómo hacerlo, googlea, cada samsung tiene su forma. El mío (S4 T-Mobile) es Power+VolDown+Home. Luego, en el modo descarga; una vez que (presiones VolUp) para inicializar la conexión, pasamos a Heimdall.

Nota para los imbéciles: Conecte el teléfono a la computadora mediante un cable USB en buen estado.

En Heimdall, vamos a la pestaña Utilities. Presiona botón Detect1, cuando te coja el teléfono, presiona Save As2 y te dará un nombre de fichero para salvar, por ejemplo, fulanito.pit. Finalmente presiona Download3 y te creará el fichero.

Decirte quiero que este ficherito es muy famoso, ya que es algo así como tu tabla de particiones.

Una vez que tienes el fichero en tu poder, Heimdall, será capaz de saber a ciegas donde están las particiones de tu teléfono sin tener que preguntárselo una y otra vez, así que guardalo en un directorio donde pongas todas las gangarreas de tu teléfono. Por cierto, terminamos con el teléfono; aunque diga “do not turn off” cágate en la noticia y reinicia (quita la batería).

Ahora viene tiempo de google, muuuuucho google, para dar con tu módem.

Digamos que finalmente diste con el módem de tu samsung. Seguro tiene un nombre muy genérico, casi siempre se llaman modem.bin. Procede con el mismo preludio del ritual (modo descarga y abre heimdall)

Ahí ve para la pestaña que dice Flash. Click en Browse1 y localiza tu pitfile. Click en Add2 y luego en el select del campo partition name3 selecciona la partición MDM. Finalmente, le buscamos el fichero modem.bin haciendo click en Browse4.

¿No tengo que decirte que pulses Start, verdad?

Si todo salió bien, se reiniciará y tendrás tu módem recién flasheado. Pero no cantes victoria. Si tu modem se deterioró, fue que ALGO lo deterioró y ese algo, lo joderá de nuevo, así que, mantén las herramientas a manos; las necesitarás pronto.

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

rails-assets

| Comments

Gemas como twitter-bootstrap-rails, hacen que el trabajo con CSS complejas supuestamente se haga “al click”. Pero cuando deseas ir un poco más allá, por ejemplo, si quieres DataTables, notarás que tienes dos opciones, la primera, usar una gema desfasada (si hay, que casi siempre la hay, aunque buena para nada).

Sin embargo, parece que algún cerebrito, hizo un sitio en el cual la fuente oficial de las assets (quizás a través de npm) se convierten de manera automatizada en una gema de rails.

De esta manera, al poner en el Gemfile de tu aplicación esto:

“Gemfile”
1
2
3
4
5
6
7
8
9
source  'https://rails-assets.org' do
   gem 'rails-assets-underscore'
   gem 'rails-assets-DataTables'
   gem 'rails-assets-bootstrap'
   gem 'rails-assets-jquery-ui'
   gem 'rails-assets-stringjs'
   gem 'rails-assets-iCheck'
   gem 'rails-assets-jquery'
end

Instalarás dichas js/css en tu aplicación.

En el sito web de rails-assets explica con unos diff, que debes poner en el application.js y aaplication.css para incluir cada una de las assets. Casi siempre es algo genérico al nombre, lo puedes intuir.

De todas maneras, el fracasado proyecto de crear un jquery unobstructive; condujo a que jquery fuera expulsada del core de rails. Así que al parecer la tendencia de rails 5 en adelante, será usar las js aparte. Más vale tener un buen jquery a mano.

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

xgproyect

| Comments

Se supone que te cuente la historia de Xnova, OAgame y XGProyect pero de verdad que NO estoy pa eso; ya me la disparé en la wikipedia más dos alemanes que mi hicieron su propia versión de la historia. Pa hacerte el cuento corto, es un juego de exploración y conquista del universo. Suena emocionante, pero todo sucede en páginas web. Cosas como “tus naves destruyeron la flota enemiga” el juego te las cuenta, tú no las vez.

La tercera vez que me preguntaron en el calixto si “tenía montado un xnova” decidí tomar cartas del asunto. Después de mucho rodar por google, no di con el código fuente de xnova. El colega Leslie (alias “Curielete”) me comenta que ahora lo que se usa es XGProyect.

La versión más reciente, es la 3.0.3, bájatela aquí

En mi caso, dispuse de un Virtualhost en el servidor web, para la aplicación. El document root de este virtualhost, apuntará a /var/www/xgp

“descargando”
1
2
3
wget -c https://github.com/XGProyect/XG-Proyect-v3.x.x/releases/download/v3.0.3/XGP3.0.3.zip
unzip XGP3.0.3.zip
mv xgp3.0.3/upload /var/www/xgp

Setea los permisos como prefieras, pero al directorio de configuración, deberás darle permiso de escritura HASTA que culmine el proceso de instalación.

“poniendo permisos temporales”
1
chmod -R 0777 application/config/

OJO

Requiere mysql, así que para este ejemplo, crearemos una base de datos llamada “x”

Al abrir un navegador y dirigirnos al sitio, te redireccionará al instalador de manera automática. Pedirá irremediablemente los parámetros. Luego de establecer la conexión con la base de datos, creará el fichero de configuración. Al hacer click en continuar, creará la complejísima base de datos que contendrá el universo del juego.

Si te da un error 500, es porque tu versión de php o de mysql, no le juega. Para este ejemplo, se usó debian 8 (el container de docker para ser más preciso)

Más específicamente estas:

“versiones”
1
2
3
4
5
6
7
8
root@40e0cc02bcd7:/# php -v
PHP 5.6.24-0+deb8u1 (cli) (built: Jul 26 2016 08:17:07)
Copyright (c) 1997-2016 The PHP Group
Zend Engine v2.6.0, Copyright (c) 1998-2016 Zend Technologies
    with Zend OPcache v7.0.6-dev, Copyright (c) 1999-2016, by Zend Technologies

root@40e0cc02bcd7:/# mysqld -V
mysqld  Ver 5.5.52-0+deb8u1 for debian-linux-gnu on x86_64 ((Debian))

Con el php de archlinux, no me pinchó, todo daba error 500

Finalmente, nos pedirá crear el primer usuario que es además, el administrador del juego. Deja que veas el panel de admin, tiene más botones y menú, que la cabina de un U2

Una vez terminado ese proceso, nos pide borrar el directorio “install”. Renombrarlo trae horribles consecuencias, así que bórralo o cámbialo de lugar.

Por último, le devolvemos sus permisos al directorio de configuración.

“poniendo permisos temporales”
1
chmod -R 0444 application/config/

De regreso a la ventana del juego, tendrás la landing-page y el botón entrar.

Ahí te logueas y localizas el menú de administración. Puedes llegar por http://tuservidor/admin.php Por ahí puede para empezar, hacer la tarea más elemental: Crear usuarios.

Entra cuanto antes al panel de administración y verás que te pida una actualización. Al pulsar el botón, te saldrán unas sentencias SQL. Quizás las ejecute, quizás no lo consiga. Por si acaso, tu las ejecutas en una consola SQL. Si tienes ese error (actualización disponible) no te dejará hacer nada hasta que no lo resuelvas.

Luego llégate a “Errores DB” y subsánalos. Por suerte es tan simple como hacer click en “Eliminar Todos”. También en el menú “Características del Juego”, te recomiendo desactivar “Mercader” y “Oficiales”, enseguida te darás cuenta por qué lo digo.

Los usuarios se hacen en el menú “Creador” (no en “Usuarios”)

Otra cosa, el panel de admin carga lento, es bastante lento pero eso es normal.

Realmente el juego tiene su encanto. Abres la página cada una o dos horas, hace una que otra bobería y dejas las tarea en cola. Me resulta más entretenido que facebook. En el Link “notas” vas tomando nota de lo que tienes por hacer, cuando te vuelvas a loguear el lunes, solo tienes que mirarlas. Consejo, haste una “fabrica de robots” cuanto antes.

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

cambiar mac a un nano

| Comments

Un socio me preguntó hace poquito si yo podía cambiarle la MAC a un nano. Me pareció muy estrafalaria la necesidad de él, pero según me contó, en la red criolla que está suscrito, suelen banear los nanos cuando los usuarios se portan mal.

Tras una búsqueda en internet vi unos post en un forum pero ninguno me funcionó. La idea es, correr un fichero al iniciar el sistema, que corra ifconfig y le cambie la MAC a las interfaces.

La problemática radica, que a la interfaz “ath0”, no se le puede cambiar la MAC, ya que aún estando down, te dice dispositivo ocupado. Por esa razón, parecía no pinchar la solución de los post. Sin embargo, si bajas las 3 interfaces involucradas en la conexión, luego cambias dichas mac, sí pincha.

Para ello crearemos el fichero /etc/persistent/rc.poststart

“/etc/persistent/rc.poststart”
1
2
3
4
5
6
7
8
9
10
11
12
#!/bin/sh

ifconfig br0 down
ifconfig wifi0 down
ifconfig ath0 down

ifconfig wifi0 hw ether 5e:53:84:bc:a3:54
ifconfig ath0 hw ether 5e:53:84:bc:a3:54

ifconfig ath0 up
ifconfig wifi0 up
ifconfig br0 up

A ese fichero le ponemos el ejecutable, si no, no pinchará.

“ejecutable”
1
XW.v5.6.2# chmod a+rx /etc/persistent/rc.poststart

Finalmente, le decimos al firmware que modifique los cambios y que reinicie.

“salva y reinicia”
1
2
XW.v5.6.2# cfgmtd -w -p /etc/
XW.v5.6.2# reboot

Todavía hay quien cree que las MAC son una medida segura para crear reglas de control de acceso…

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

phpmyadmin múltiples servidores

| Comments

Cuando tienes que manejar múltiples servidores SQL, no da la talla tener un phpmyadmin por cada servidor. Opté por tener un phpmyadmin instalado en mi laptop.

Una manera muy sencilla de hacer la pincha, es mapear con SSH el puerto de mysql y conectar a todo el mundo como si fuera localhost.

“ssh y mysql”
1
ssh root@192.168.0.9 -L 3306:127.0.0.1:3306 -N

Pero en algunos casos, no hay SSH, el servidor no escucha por TCP, etc… En tal caso, podrías permitir que el root se administre remotamente.

Para lograrlo hay que decirle a mysql que escuche por la dirección ip además de por el socket local. En infraestructuras grandes, por lo general, ya está hecho. Localiza en /etc/mysql/my.cnf el parámetro llamado bind-address

“/etc/mysql/my.cnf”
1
2
3
4
#
# Instead of skip-networking the default is now to listen only on
# localhost which is more compatible and is not less secure.
bind-address      = 0.0.0.0

y reinicia el mysql, claro está…

Ahora hacemos una consulta SQL, en la cual le daremos al usuario root, el permiso para conectarse de una ip dada. Por ejemplo, la computadora del sysadmin está en 192.168.0.222

“grant root”
1
GRANT ALL ON *.* to root@'192.168.0.222' IDENTIFIED BY 'tupassword';

Ahora viene el truco mágico en la configuración de phpmyadmin. El fichero de configuración de phpmyadmin, en el caso de arch, está en /etc/webapps/phpmyadmin/config.inc.php en otras distros, no sé, pero siempre se llama config.inc.php

En ese fichero, localiza la cadena de texto “First Server”, debes ver algo como esto pero con muchos comentarios:

“config.inc.php”
1
2
3
4
5
6
$i++;
$cfg['Servers'][$i]['auth_type'] = 'cookie';
$cfg['Servers'][$i]['host'] = 'localhost';
$cfg['Servers'][$i]['connect_type'] = 'tcp';
$cfg['Servers'][$i]['compress'] = false;
$cfg['Servers'][$i]['AllowNoPassword'] = false;

Solo tienes que añadirle otra $i++; y poner los parámetros en el array $cfg

“ejemplo de múltiples servidores”
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
$i++;
$cfg['Servers'][$i]['auth_type'] = 'cookie';
$cfg['Servers'][$i]['host'] = '127.0.0.1';
$cfg['Servers'][$i]['connect_type'] = 'tcp';
$cfg['Servers'][$i]['compress'] = false;
$cfg['Servers'][$i]['AllowNoPassword'] = false;

$i++; // otro servidor
$cfg['Servers'][$i]['verbose'] = 'otro servidor';
$cfg['Servers'][$i]['host'] = '192.168.1.9';
$cfg['Servers'][$i]['connect_type'] = 'tcp';
$cfg['Servers'][$i]['compress'] = false;
$cfg['Servers'][$i]['AllowNoPassword'] = false;

$i++; // el leviatand de los mares
$cfg['Servers'][$i]['verbose'] = 'otro servidor mas';
$cfg['Servers'][$i]['host'] = '192.168.2.9';
$cfg['Servers'][$i]['connect_type'] = 'tcp';
$cfg['Servers'][$i]['compress'] = false;
$cfg['Servers'][$i]['AllowNoPassword'] = false;

Cuantos servidores quieras añadirle… Cuando vallas a loguearte en el phpmyadmin verás debajo de la caja de login, un select, con el servidor que quieres acceder.

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

iptables y ftp

| Comments

Instalé un proftpd y le puse un cortafuegos a dicho servidor. Al instante, nagios reportó que el FTP pinchaba, así que di por terminada la tarea. Sin embargo, a las dos horas un usuario me pregunta si “el ftp está caído”.

Resulta que los puertos pasivos, se comportan de una manera “inesperada”. Una solución común es abrir el rango de puertos que se configuran como pasivos, pero eso no me cuadra.

Por suerte, linux cuenta con un módulo especial llamado ip_conntrack_ftp, especial para el tema.

Si quieres ver más detalles y otras soluciones, llégate aquí:

http://unix.stackexchange.com/questions/93554/iptables-to-allow-incoming-ftp

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