sábado, 16 de noviembre de 2019

HP y Realtek RTL8723DE

Hoy como siempre, me llegó una laptop HP con una tarjeta de red WiFi del tipo Realtek RTL8723DE, que claramente no se puede configurar en el momento de la instalación, por no contar en forma nativa con los drivers.
Eso me obligó a conectarla por cable a la red, para poder terminar bien la instalación.
Al ejecutar en Manjaro el comando "sudo dmidecode", entre sus mil líneas encuentro lo siguiente:

System Information
Manufacturer: HP
Product Name: HP Laptop 17-ca0xxx
Version:  
Serial Number: no_te_lo_muestro
UUID: tampoco_te_lo_muestro
Wake-up Type: Power Switch
SKU Number: 3ZU67EA#ABE
Family: 103C_5335KV HP Notebook

La máquina es muy bonita, tiene un procesador AMD A6-9225 RADEON R4, y 8 GB de memoria RAM.
Ahora bien, luego de hacer una instalación de Manjaro típica, donde instalo el kernel 5.3.11-1, veo que sigue sin mostrar algo que haga referencia a la tarjeta de red WiFi. Al buscar si existe algo ya empaquetado, con un "pacman -Ss rtl | grep 8723", veo que lo que hay apunta a 8723bu, que no es nuestro caso. 
Entonces vamos a la línea de comandos, que tanto nos ayuda siempre. Colocaré en "pequeña morena" (para no decir en negrita, así nadie se ofende) los comandos que lanzamos, y en formato normal las salidas y demás: 

sudo pacman -S git dkms
...

sudo pacman -S linux-headers
:: Existen 9 proveedores disponibles para linux-headers:
:: Repositorio core
   1) linux316-headers  2) linux414-headers  3) linux419-headers
   4) linux44-headers  5) linux49-headers  6) linux53-headers
   7) linux54-headers
:: Repositorio community
   8) linux419-rt-headers  9) linux52-rt-headers

Introduzca un número (por omisión=1): 6
...

git clone -b extended https://github.com/lwfinger/rtlwifi_new.git
...

cd rtlwifi_new/
sudo dkms add ../rtlwifi_new

Creating symlink /var/lib/dkms/rtlwifi-new/0.6/source ->
                 /usr/src/rtlwifi-new-0.6

DKMS: add completed.

sudo dkms build rtlwifi-new/0.6

Kernel preparation unnecessary for this kernel.  Skipping...
...
Kernel cleanup unnecessary for this kernel.  Skipping...

DKMS: build completed.

sudo dkms install rtlwifi-new/0.6
...
depmod.....

DKMS: install completed.

sudo modprobe rtl8723de
reboot

Luego del reboot encontramos que felizmente aparece en el menú de nuestro escritorio la opción para conectarse a una red inalámbrica WiFi.

Victoria!

jueves, 28 de marzo de 2019

Preguntas Frecuentes #2: Cómo instalo VirtualBox Guest Additions y GNOME en CEntOS/RHEL/OL 7?

Nuevamente, para evitar más mensajes por WhatsApp preguntando lo mismo, o al menos para evitar el eterno Copy&Paste, he decidido colocar esto en el blog, y que lo disfruten los que me lo preguntan.
Para instalar las VirtualBox Guest Additions y GNOME en un CEntOS/RHEL/OL 7, se deben seguir estos pasos, a saber (todo lo que está en letra Courier, son comandos a ejecutar como root en una terminal):

GNOME: 

yum -y groups install "GNOME Desktop"
startx

Cuando inicie el entorno gráfico, se debe elegir:


  • Idioma del sistema.
  • Tipo de teclado.
  • Servicios de Localización (parte de la invasión a nuestra privacidad), en Off.
  • Si no se van a agregar cuentas online (redes sociales, y demás invasores de nuestra máquina) sencillamente saltar este paso siguiente
  • Start using CentOS Linux


Listo, entorno gráfico instalado. Ahora vamos a poder las VirtualBox Guest Additions:


  • yum install perl gcc dkms kernel-devel kernel-headers make bzip2
  • En la ventana de VirtualBox seleciconamos "Devices" -> "Insert Guest Additions CD image".
  • Llega la pregunta sobre si queremos o no ejecutar lo que hay en la unidad insertada. Decimos "Ejecutar", o "Run".
  • Puede que la pantalla haga un par de flickeos, o que esté un rato funcionando de forma rara. A no asustarse, está modificando e instalando drivers, entre ellos los de video.  Si no vuelve a la normalidad, tomamos un café, y en 10 minutos volvemos, y presionando Ctrl-Alt-F2 llegamos a una terminal donde podemos, entre otras cosas, ejecutar "reboot".
  • Presionamos Enter y se cierra la ventana donde estaba en ejecución. 


No fue tan difícil, no?

Enjoy!

sábado, 23 de marzo de 2019

Preguntas Frecuentes: Cómo armo un DNAT en CEntOS/RHEL/OL 7?

Harto de recibir siempre la misma pregunta, me decidí a dejarla por escrito, como para que cuando reciba esos mensajes de WhatsApp a las 7 AM de personas al borde del ataque de nervios por no poder configurar un DNAT en CEntOS/RHEL/OL 7, pueda hacerles una DNAT a este blog.
Supongamos una máquina CEntOS/RHEL/OL 7, que posee dos tarjetas de red.
La primera, apuntando a Internet, con una dirección IP pública, y la segunda apuntando a la red interna. En dicha red interna tenemos un web server corriendo en el puerto 80 que queremos, sea visto desde el mundo exterior, pero por el puerto 10080, sin cambiar el puerto interno 80.
En este caso, debemos configurar un DNAT desde el puerto 10080 de la interfaz externa (enp0s3) hacia el puerto 80 de la máquina interna a través de la interfaz interna (enp0s8).
Veamos cómo tenemos configurado nuestro firewalld, ese módulo que nos permite configurar el firewall en nuestro equipo, desde la línea de comandos:

[root@centos7 ~]# systemctl status firewalld
● firewalld.service - firewalld - dynamic firewall daemon
   Loaded: loaded (/usr/lib/systemd/system/firewalld.service; enabled; vendor preset: enabled)
   Active: active (running) since Sat 2019-03-23 01:08:07 -03; 12s ago
     Docs: man:firewalld(1)
 Main PID: 2401 (firewalld)
   CGroup: /system.slice/firewalld.service
           └─2401 /usr/bin/python -Es /usr/sbin/firewalld --nofork --nopid

Mar 23 01:08:05 centos7.hecsa.com.ar systemd[1]: Starting firewalld - dynamic firewall daemon...
Mar 23 01:08:07 centos7.hecsa.com.ar systemd[1]: Started firewalld - dynamic firewall daemon.
[root@centos7 ~]#

Efectivamente, está en ejecución. Veamos qué tiene configurado: 

[root@centos7 network-scripts]# firewall-cmd --list-all
public (active)
  target: default
  icmp-block-inversion: no
  interfaces: enp0s3 enp0s8
  sources:
  services: ssh dhcpv6-client
  ports:
  protocols:
  masquerade: no
  forward-ports:
  source-ports:
  icmp-blocks:
  rich rules:

[root@centos7 network-scripts]#

Esta zona es la adecuada? Veamos: 

[root@centos7 network-scripts]# firewall-cmd --get-default-zone
public
[root@centos7 network-scripts]#

Vamos bien, Fidel...

Ahora, crearemos la regla para permitir el forwardeo: 

[root@centos7 network-scripts]# firewall-cmd --permanent --zone=public --add-masquerade
success
[root@centos7 network-scripts]# firewall-cmd --permanent --zone="public" --add-forward-port=port=10080:proto=tcp:toport=80:toaddr=10.200.200.10
success
[root@centos7 network-scripts]# firewall-cmd --reload
success
[root@centos7 network-scripts]#

Veamos si todo está bien: 

[root@centos7 network-scripts]# firewall-cmd --list-all
public (active)
  target: default
  icmp-block-inversion: no
  interfaces: enp0s3 enp0s8
  sources:
  services: ssh dhcpv6-client
  ports:
  protocols:
  masquerade: yes
  forward-ports: port=10080:proto=tcp:toport=80:toaddr=10.200.200.10
  source-ports:
  icmp-blocks:
  rich rules:

[root@centos7 network-scripts]#

Como hemos visto, el servidor interno que tiene el http server en el puerto 80 es el que tiene la dirección IP 10.200.200.10.

Listo, en el momento en el que nuestro navegador apunte a la dirección externa:10080, entonces seremos redireccionados a 10.200.200.10:80.

Enjoy!

martes, 1 de enero de 2019

Dolibarr 8: Lecciones aprendidas #2

(Este artículo es continuación del anterior, por lo que algunos elementos ya fueron configurados según los aspectos planteados allí)

Ya dimos de alta clientes con la cuenta del vendedor, por un lado, y con la del administrador, por el otro.
Un punto interesante es que si no se configura al representante de ventas, realmente el vendedor no puede ver los Third Parties generados por el administrador. Esto, que parece trivial, es un punto de fallas notable en otros CRM's ó ERP's. Bien por Dolibarr...
Otro punto interesante es que se puede cambiar el estado del cliente respecto del nivel de contacto que se mantuvo, entre "Do not contact", "To be contacted", "Contact in progress" y "Contact done". También se le puede enviar desde la misma plataforma un mail al cliente, seleccionando a nombre de quién sale, a quién le llegará, el o los documentos asociados, y demás. Los permisos que hemos brindado hasta el momento permiten al vendedor hacer eso mismo.



Ahora que ya tenemos los clientes cargados, debemos hacer algo con ellos. Propuestas, proyectos, y demás. Todo eso lo vamos a desarrollar en las siguientes líneas, viendo también qué módulos debemos activar para cada cosa.

Nuevo módulo: Projects/Opportunities/Leads
Para poder asignar oportunidades, o proyectos a los clientes, debemos activar el módulo adecuado. Entonces yendo a Home -> Setup -> Modules/Applications -> Projects/Collaborative Work -> Projects/Opprtunities/Leads -> botón de activación, lo dejaremos listo para ser usado.
Sólo activaremos una opción extra en la sección "Project reports document model", llamada "timespent", que nos servirá para tener una idea del tiempo utilizado por las tareas que conformen cada uno de los proyectos. Eso lo haremos clickeando el ícono de "Setup" que está al costado derecho del botón de activación del módulo.
Veremos que se activa un nuevo módulo en el menú superior, correspondiente a lo que hemos configurado:



Para que nuestro vendedor tenga acceso al módulo, y pueda cargar las oportunidades y proyectos que detecte en los clientes, debemos ir a Home -> Users & Groups -> List of Groups -> Ventas -> Group Permissions -> Sección "Projects/Opportunities/Leads" -> Botón "+" al lado de "Create/modify projects". Eso activa "Read projects and tasks" también.
Nuestro vendedor ingresa y comienza a generar el primer proyecto. Presionará el botón "Projects" en la sección superior de la pantalla, y seleccionará el link "New Project". El sistema asignará un códugo de proyecto, y nos pedirá que completemos sus campos.
Puntos importantes:
  • En la sección "Visibility", podemos elegir "Project Contacts", o "Everybody". No hace falta explicar mucho más. Es importante que sepamos quién podrá ver los detalles de este proyecto. En nuestro ejemplo, "Project Contacts" es la opción adecuada.  
  • "Opportunity Status" cambia el porcentaje de la oportunidad, en nuestro caso vamos a configurar sólo "Qualification" para que llegue al 20%.
  • Podemos dejar la fecha de inicio y de fín abiertas, no es necesario que se fije fecha de inicio. 
  • Al finalizar la carga del proyecto, su aspecto será el siguiente: 


  • Nótese que si no hemos configurado contactos para el cliente, no podremos asignar tareas que deban ser ejecutadas por él. Si lo hemos configurado, y es asignado automáticamente, podemos removerlo en el caso de no ser necesario, yendo al tab "Project contacts", seleccionando el botón estilo "unlink": 


Hermoso proyecto, pero aún no tiene tareas. Hacia allá vamos ahora, seleccionando el tab "Tasks".
Presionamos el botón "Create task" que se encuentra en la sección "List of Tasks", a la derecha:




Entonces completremos los campos, tal y como lo hemos hecho con el proyecto anteriormente:


Haremos lo mismo para todas las tareas que consideremos en este caso. Nótese que no hemos agregado fecha inicial ni final, pero sí la carga de horas que calculamos para cada tarea.
También, y como consejo, no asignemos personal a las tareas para evitar que, hasta que no esté confirmado, no carguen horas a tareas. Luego tendremos tiempo para modificar esto, y agregar al personal que sea necesario para cada tarea.
Con todo lo anterior, nuestro proyecto tendrá una lista de tareas como la siguiente:



Nótese que si vamos a una vista del tipo Gantt, como no hemos considerado fechas de inicio y fín de cada tarea, tendremos algo de este estilo:

Algunos detalles que espero poder ver antes de morir de viejo:
  • Los nombres de las tareas debieran poder expandirse para estar completas.
  • El proyecto debiera permitir generar hitos, no sólo tareas con una duración determinada. 
  • Se debiera poder considerar el uso de un baseline, con dependencias, y luego, al agregar la fecha inicial, que todas las fechas se modifiquen automáticamente. 
  • Sí se puede configurar una fecha inicial, y fechas de cada una de las tareas, y luego modificar la fecha inicial, con lo que se podrían mover todas las fechas iniciales de las tareas asociadas, desde la página principal del proyecto, seleccionando "Change task dates according to new project start date": 


Por ahora, nos sirve, si bien un PM podría ponerse bastante nervioso al ver este estilo de proyecto.
En este punto podríamos sacar un documento en formato PDF del proyecto y sus tareas de este estilo, que como digo antes, pondría los pelos de punta de más de un PM que se digne de serlo:


Si a las tareas les ponemos fecha de inicio, pero no de fín, en la vista Gantt nos va a quedar de esta forma:

Tenemos una descripción como si cada tareas comenzar en el mismo momento en el que terminan, aún cuando la carga de trabajo sea de 40 horas, como en este ejemplo. Por ello, lo ideal es colocar la fecha de final también, con lo cual quedará de esta forma:


Bueno, algo mejor...ya parece un proyecto y todo.
NOTA: Si se configuró la fecha de inicio de cada tarea, pero no la del proyecto, y luego uno decide configurarla, se borran todas las fechas y horas de las tareas que se hayan configurado antes, por lo que el Gantt volverá a fojas cero. No está bueno eso, debiera existir alguna opción para hacer coincidir la fecha de inicio del proyecto con las tareas...al menos la opción. Si uno tiene tres tareas locas no molesta, pero si son cientos de tareas, puede ser insoportable, y ni hablar de estar mirando el calendario para entender cuándo empezaría y terminaría cada tarea.
Si uno terminó de configurar todo esto, y decide mover la fecha de inicio del proyecto una semana, por ejemplo:

...las tareas sí se mueven de fecha de inicio. Entonces, una de las famosas lecciones aprendidas es la siguiente:
SIEMPRE HAY QUE CONFIGURAR UNA FECHA DE INICIO DEL PROYECTO, AÚN CUANDO NO SEA REALISTA. Si no se hace, luego el proceso de modificación puede ser lo más cercano a una patada en el estómago...de Maradona en su mejor época.

NOTA2: Si se generan tareas, al menos mientras estamos en el modo draft, las mismas no se pueden eliminar. El botón de "Delete" está grisado. Al menos no se puede con los permisos que tiene hasta ahora el grupo de ventas.
Para que se puedan eliminar tareas o proyectos, se deben asignar los permisos "Delete projects" dentro de la sección "Projects/Opportunities/Leads" en los permisos del grupo "Ventas". Recomiendo fuertemente que se active esta opción.

NOTA3: Luego de haber hecho la modificación, el PDF resultante está completamente vacío, y no aparecen las tareas ni aún regenerándolo. Otro bug importante que hay que ver en futuras versiones. Validando el proyecto tampoco se regenera el PDF como debe ser, por lo que esta opción aún es bastante inestable, no sirve para mandarle un PDF a los clientes.

Un punto importante, es que el proyecto aún sigue en modo draft, hay que validarlo con el botón "Validate" para que se considere o marque como listo para ser ejecutado.

Para que se puedan cargar horas en el proyecto, se deberán asignar recursos a cada tarea. Atención, recordemos que el grupo "Staff" no tiene aún permisos para cargar horas en ningún lado, por lo que primero, como el usuario supervisor, llegaremos a Home -> Users & Groups -> List of Groups -> Staff -> Group permissions -> Sección "Projects/Opportunities/Leads" -> Opción "Read projects and tasks" (presionamos el "+").

Ahora sí, ingresamos bien como el supervisor, bien como el vendedor, y asignamos a cada tarea uno o más miembros del grupo Staff para que puedan cargar horas. Primero hay que agregar miembros al proyecto en general, como "Project Contacts", y luego a cada tarea como "Task Contacts". Esto me parece bastante acertado, ya que permite que no se deba recorrer, en el caso de empresas que tienen cientos de empleados, todos los nombres para cada tarea, sino sólo una vez, para un proyecto en particular.

Desde ese momento, el miembro de Staff puede ver que hay un proyecto abierto, y puede cargar horas cuando selecciones "Time spent".

Ahora bien, el miembro de Staff puede autoasignarse tareas, tanto con el rol de colaborador o de ejecutivo. Esta capacidad no está bien que pueda ser autoasignable, ya que en cierta forma sobreescribe los permisos que hemos dado al usuario, y de hecho, su asignación. Este punto también considero que debe ser revisado en futuras versiones del sistema. No puedo decir por el momento si se debe crear un atributo extra, o qué, pero esto no debiera existir de forma predeterminada.

Otra cosa que se debe mejorar es que no importa si una tarea tiene una determinada fecha de inicio, el sistema permite que se carguen horas antes o después de dicha fecha. Mínimamente, se debiera al menos poder solicitar el permiso de carga de horas, ya que puede ser una fea sorpresa que eso aparezca así porque sí en un timecard de un proyecto. Acá, un ejemplo donde una tarea debiera comenzar en marzo, y se le pueden cargar horas en enero:



El método de borrado de estas horas cargadas no es de lo más intuitivo, ya que hay que ingresar por el proyecto, luego por las tareas, luego por los contactos de la tarea, para finalmente eliminar los records erróneos, pero al menos se puede.

Ahora que ya tenemos proyectos creados, y personal que puede cargar horas, podemos quedarnos en paz por un tiempo, al menos desde este punto de vista.