SAGECOM FAST@5657

Router distribuído por Masmovil

Estoy probando la version de firmware SGDV10000059, por ahora este el resumen:

  • data leaks y operaciones a traves de la interface json-rpc xmo (https://www.youtube.com/watch?v=_IoEFuIE_zY)
  • por ahora sin acceso a la consola vía serie rs232
  • encontrada la forma de obtener la password PLOM (password gpon) via rs232. Video en proceso.
  • conseguido modificar la configuracion de servicio remoto ACS. Pendiente de confirmar si funciona

Unbrick Tanix TX3 mini

He recuperado mi Tanix tx3 mini después de haber intentando meterle atvexperience sin éxito, con un error típico usando Usb Burning Tool de AmLogic:

7% mark. Error is [0x32030201]Uboot/Get result/DiskInitial error

Al parecer este error sucede al intentar flashear un dispositivo con memory NAND, en mi caso PFG57. Creo que me ha tocado una tirada del tx3 específica con un chipset poco habitual, y que por defecto no soporta actualizaciones ya que el soporte para NAND no está disponible y ese es el motivo del error.

¿ Qué dispositivo realmente tengo ?

Llegados a este punto me ha tocado abrir el dispositivo para echar un ojo e identificar el procesador, modelo del placa y almacenamiento

Procesador S905W ( se ve bastante mal )
Se puede leer en el lateral PFG57 del componete de la abjo a la derecha
Placa CS_905W_TX_3D_V1.3

¿ Cómo solucionarlo ?

Pues encontré una imagen de firmware que funciona, al parecer casi todo, aún lo estoy testeando y con Android 8.1 cosa que me va bien al menos por poder usar el servicio de Google Cast y poder enviar contenido del móvil a mi TV.

El enlace al firmware lo podéis encontrar aquí:

Neutral-9012-Alice-8.1-TX3Mini-20191014.img.7z

Se puede volcar con Usb Burnin Tool, luego encendemos y tendremos que esperar unos 7-10 minutos hasta que termina la post-instalación.

¿ Y ahora qué ?

El problema es que estoy en punto muerto con este disponsitivo por que parece ser que no es posible volcar firmware actual , o si no lo he entendido mal en algun caso, cortocircuitando la NAND a la vez que estamos enviando el firmware con el UsbBurningTool sería posible. Pero sub-modelo que he visto tiene una NAND distinta y hay que buscar cómo hacer ese corto. Por el momento no me quiero menter en esas.

Dejo aquí algunos enlaces interesantes:

vim Ultisnip para mamba

En mi día a día de trabajo hago un uso intesivo de mamba, este pequeño snippet me ahora escribir bloque de código repetitivo cuando voy a escribir tests

https://gitlab.com/-/snippets/2286835

# code comment
global !p
def sanitize_spec_fn(fn):
    return fn.replace("spec.py", "").replace("_", " ")
endglobal

snippet mamba "mamba spec skel"
from mamba import description, context, it
from expects import expect, equal

with description("${1:`!p snip.rv = sanitize_spec_fn(snip.fn)`}"):
	with context("${2:context}"):
		with it("${3:test expectation}"):
			expect(True).to(equal(False))
endsnippet

shell interactivas y shell con login

Algunos de los conceptos de linux con complicados de entender, incluso años después de serguir usando GNU/Linux sigo aprendiendo cosas muy básicas.

Voy a intentar explicar(me) qué es una shell interactiva y una shell con login, y qué suecede cuando entras en cada una de ellas

shell login

Cuando tienes que introducir usuario y password para acceder, ya sea terminal, ssh, etc…

A login shell is one whose first character of argument zero is a -, or one started with the –login option.

man 1 bash

lo importante de aquí es ver que se ejecutan esta secuencia de ficheros para configurar el entorno de usuairo:

/etc/profile, 
~/.bash_profile
~/.bash_login
~/.profile

A destacar sólo .profile ya que busca si tenemos un bin propio para el usuario y lo mete en el PATH

shell interactiva

Una shell que abres una vez que ya estás en el sistema, por ejemplo cuando abres un xterm o un mate terminal

An interactive shell is one started without non-option arguments (unless -s is specified) and without the -c option whose standard input and error are both connected to terminals (as determined by isatty(3)), or one started with the -i option. PS1 is set and $- includes i if bash is interactive, allowing a shell script or a startup file to test this state.

man 1 bash

El problema que tengo actualmente es que esta shell interactiva no está ejecutando ~/.profile y no sé por qué, por que si debería según la documentación [WIP]

When an interactive shell that is not a login shell is started, bash reads and executes commands from /etc/bash.bashrc and ~/.bashrc, if these files exist. This may be inhibited by using the –norc option. The –rcfile file option will force bash to read and execute commands from file instead of /etc/bash.bashrc and ~/.bashrc.

man 1 bash

En resumen, todo este hilo es por que necesitaba tener de alguna forma cómoda y elegante un PATH a ~/.local/bin y finalmente lo que voy a hacer es agregar este código a ~/.bashrc

# add at the bottom of ~/.bashrc
# set PATH so it includes user's private bin if it exists
if [ -d "$HOME/.local/bin" ] ; then
    PATH="$HOME/.local/bin:$PATH"
fi

#/etc/profile: system-wide .profile file for the Bourne shell (sh(1))
# and Bourne compatible shells (bash(1), ksh(1), ash(1), ...).

if [ "$(id -u)" -eq 0 ]; then
  PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
else
  PATH="/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games"
fi
export PATH

if [ "${PS1-}" ]; then
  if [ "${BASH-}" ] && [ "$BASH" != "/bin/sh" ]; then
    # The file bash.bashrc already sets the default PS1.
    # PS1='\h:\w\$ '
    if [ -f /etc/bash.bashrc ]; then
      . /etc/bash.bashrc
    fi
  else
    if [ "$(id -u)" -eq 0 ]; then
      PS1='# '
    else
      PS1='$ '
    fi
  fi
fi

if [ -d /etc/profile.d ]; then
  for i in /etc/profile.d/*.sh; do
    if [ -r $i ]; then
      . $i
    fi
  done
  unset i
fi

# ~/.profile: executed by the command interpreter for login shells.
# This file is not read by bash(1), if ~/.bash_profile or ~/.bash_login
# exists.
# see /usr/share/doc/bash/examples/startup-files for examples.
# the files are located in the bash-doc package.

# the default umask is set in /etc/profile; for setting the umask
# for ssh logins, install and configure the libpam-umask package.
#umask 022

# if running bash
if [ -n "$BASH_VERSION" ]; then
    # include .bashrc if it exists
    if [ -f "$HOME/.bashrc" ]; then
	. "$HOME/.bashrc"
    fi
fi

# set PATH so it includes user's private bin if it exists
if [ -d "$HOME/bin" ] ; then
    PATH="$HOME/bin:$PATH"
fi

# set PATH so it includes user's private bin if it exists
if [ -d "$HOME/.local/bin" ] ; then
    PATH="$HOME/.local/bin:$PATH"
fi

Nerdtree: Navegador de ficheros

Nerdtree está muy difundido, hay muchos otros gestores/navegadores de ficheros pero Nerdtree funciona muy bien y no he econtrado ningún otro que me ofrezca ventajas sobre este.

Instalación

Agregar en nuestro bloque de plugins en vimrc

Plugin 'scrooloose/nerdtree'

Enlace:
https://github.com/valsorym/scrooloose-nerdtree

Características:

  • navegar por rutas de directorio
  • permite búsqueda como si fuera un buffer cualquiera
  • operar con ficheros y directorios ( lo que Nerdtree llama nodos )
  • permite hacer bookmarks de ficheros y/o directorios

Operaciones destacadas

  • ? para ‘togglear’ la ayuda
  • enter para collapsar o expandir un árbol
  • ‘m’ para el menú de manipulación de ficheros o directorios, Nerdtree los llama nodos. Te permite borrar, renombar, crear, etc… sin tener que salir a la terminal
  • t/T para abrir en un nuevo tab. t abre tab y mueve el cursor al tab y T abre tab pero el cursor permanece en nerdtree
  • Para abrir ficheros puedes usar el comando ‘g’ + o/i/s que es un preview y el modo de mostrarlo. El concepto de preview es que te abre el contenido en un buffer y mantiene el cursor en el arbol de NerdTree, esto es útil si quieres ojear ficheros rápidamente sin tener que desplazar el cursor al bufer y volver a Nerdtree, te ahorras pulsaciones de teclado.
  • go / o. Previsualizar/abrir en el buffer actual
  • gi / i . Previsualiza/abre fichero spliteando el buffer actual en horizontal
  • gs / s . Previsualiza/abre fichero spliteando el buffer actual en vertical
  • e . Explore, abre el nodo de directorios actual en otro buffer para que puedas separar la visualización de los directorios.
  • ‘m’ es el menu de operaciones con nodos
NERDTree Menu. Use j/k/enter, or the shortcuts indicated   
=========================================================  
> (a)dd a childnode                                        
  (m)ove the current node                                  
  (d)elete the current node                                
  (r)eveal the current node in file manager                
  (o)pen the current node with system editor               
  (c)opy the current node                                  
  copy (p)ath to clipboard                                 
  (l)ist the current node                                  
  Run (s)ystem command in this directory                   
                                                           

VundleVim: gestor de plugins

Mi vimrc usa VundleVim como gestor de plugins, dentro del bloque de Vundle, hay que agregar lineas con Plugin seguido de la fuente del plugin. Puede ser una url completa o un path de github.

Enlace

https://github.com/VundleVim/Vundle.vim

Instalación

" Vundle start plugin            
set rtp+=~/.vim/bundle/Vundle.vim
call vundle#begin()              

Plugin 'VundleVim/Vundle.vim'

call vundle#end() " required

Una vez que tenemos estas lineas en nuestro vimrc ya podemos instalar y actualizar plugins. Hay dos formas desde linea de comandos o desde el propio vim

" Desde vim 
:PluginInstall
:PluginUpdate

" Desde linea de comandos
$ vim +PluginInstall
$ vim +PluginUpdate

Cómo uso VIM como IDE para programar en Python I

Desde hace varios años trabajo habitualmente con VIM, es una herramienta muy potente con muchas ventajas pero también con muchos incovenientes.

A lo largo de estos años he pasado por diversas etapas y cada día aparecen nuevos plugins o incorporo mejoras que me hacen la vida más fácil. El objetivo de esta serie de posts es comentaros cómo trabajo actualmente, qué uso, plugins, keybindings, etc… y por qué los uso.

Una de las dificultades a la hora de usar VIM es que hay multitud de plugins, todos parecen funcionar bien y muchos hacen lo mismo, identificar cuál es el más apropiado para cada uno y configurarlo correctamente a veces es laborioso. Espero que compartiendo mi experiecia pueda ayudar a otras personas a reducir esa frustración y conseguir una mejor experiencia al entrar al mundo VIM.

Como referencia mi vimrc ( ~/.vimrc ) lo tengo publicado en https://gitlab.com/jsenin/vimrc intento documentar lo mejor posible los cambios que hago, lo mantengo bastante actualizado.

Una de las ventajas de VIM es que puedo poner en funcionamiento mi entorno de trabajo en unos pocos minutos, clonando mi fichero, actualizar plugins e instalar algún paquete de sistema, es suficiente y muy muy rápido. La portabilidad del entorno de trabajo de una forma muy cómoda y rápida para mí es una gran ventaja.

La forma en que yo actualizo mi vimrc está documentada en https://gitlab.com/jsenin/vimrc/-/blob/master/README.md pero lo realmente necesario es saber que toda tu configuración está en el fichero ~/.vimrc

usa :q para salir de vim

Como eliminar ^M de mi código

Algunos editores como IntelliJ o VisualStudio Code, notepad, etc… podrían agregarte un molesto fin de de linea ^M a tu código fuente.

Este ^M es una marca de fin de linea que meten algunos editores cuando quieren representar salto de linea de \r ( en unix es \n)

Para limpiar todos tus ficheros afectado puedes usar esta linea

sed $'s/\r//' -i $(grep -lr $'\r' *)

Formas posibles de solucionarlo en editores

Para VI/VIM

:set ff=unix

Para IntelliJ

https://www.jetbrains.com/help/idea/configuring-line-endings-and-line-separators.html

Existe otra estrategia que es configurar git para que transforme esos valores de manera automática. Hay un hilo en stackoverflow bastante interesante que habla de .gitattributes y de la configuración core.autocrlf https://stackoverflow.com/questions/170961/whats-the-strategy-for-handling-crlf-carriage-return-line-feed-with-git