Saltar a contenido

Linux

Automatizar con Ansible es la clave

¿Qué pasa si eres camararero(a) y tienes que llenar 100 copas de agua en 5 minutos? ¿Cómo podrías solventar este problema sin que se derrame agua y que te de tiempo para rellenar estas 100 copas? La respuesta no es darse prisa, la respuesta se llama ANSIBLE.

Ansible es una plataforma que te permite automatizar y también ejecutar comandos ad-hoc (a cualquier máquina), gestionar plataformas de Virtualización como VMware Sphere, plataformas de orquestación de contenedores tipo Kubernetes, dispositivos electrónicos como routers Alcatel...etc.

Puedes hacer maravillas con él, en este post te explico cómo utilizar las cuatro cosas básicas para comenzar a trabajar.

Instalación en CentOS 7

Para instalarlo, simplemente, ejecutas:

sudo yum install ansible

Instalación en Fedora 29

Igual que en el apartado anterior pero con DNF

sudo dnf install ansible

Añadiendo servidores

Para hacer una prueba rapidita de cómo lanzar un comando ad-hoc, añade los servidores en los que estés interesado(a) ejecutar algo y ¡a correr!

Edita el archivo /etc/ansible/hosts y añade los hostnames/IPS

Genera una llave SSH si no la tienes:

ssh-keygen -t rsa
ssh-agent bash
ssh-add ~/.ssh/id_rsa

Copia las llaves a los servidores que tengas (aquí tomo como referencia el puerto por defecto del protocolo SSH que es el 22, si lo has cambiado adáptalo):

ssh-copy-id ~/.ssh/id_rsa USUARIO@HOST
ssh-copy-id ~/.ssh/id_rsa USUARIO@HOST
ssh-copy-id ~/.ssh/id_rsa USUARIO@HOST

¡A probar!

¡Probamos con un ping!

ansibe all -m ping
EXAMPLE.COM.ES | SUCCESS => {
    "changed": false,
    "ping": "pong"
}
EXAMPLE.COM | SUCCESS => {
    "changed": false,
    "ping": "pong"
}
EXAMPLE.ES | SUCCESS => {
    "changed": false,
    "ping": "pong"
}

¡Perfecto ya lo tienes!

Ahora puedes hacer volar tu imaginación tanto como quieras. ¿Te imaginas actualizar 20 máquinas a la vez sin tener que repetir esos 2-3 comandos? ¡Te ahorras hasta la ejecución de 60 comandos, más el tiempo de acceso a todas esas máquinas!

Referencias

Ajustando la apariencias en apps Qt

Seguro que muchas veces nos ha pasado que hemos instalado aplicaciones que utilizan Qt y se ven muy feas en entornos de escritorio ajenos a Plasma (aka KDE) o LXQT. En este post descubriremos cómo ponerle fin a este suceso, y cómo afrontarlo.

¿Qué es Qt?

Qt es un framework multiplataforma orientado a objetos utilizado para desarrollar aplicaciones que utilicen interfaz grafica. Actualmente este framework es el que utiliza el equipo de Plasma (antes KDE) para su desarrollo y continuación en todo su software de escritorio; la suite de ofimática Calligra Suite (antes llamado KOffice) también lo utiliza; el famoso reproductor multimedia VLC; reproductor y conversor de archivos de audio Clementine...etc.

¿Existe algún método para solucionarlo?

Sí, efectivamente, tenemos varios métodos, uno de ellos es hacer uso de scripts, pero vamos a simplificarlo haciendo de la herramienta gráfica que nos proporciona el equipo de Qt llamada qt5ct para obtenerla en nuestro sistema bastará con instalarla.

Instalación

En este proceso tenemos la instalación mediante binarios que se obtienen mediante los repositorios de los gestores de paquetes, o bien, mediante código fuente.

Binarios

Distribuciones más populares:

  • Fedora:

# dnf install qt5ct

  • Archlinux

# pacman -S qt5ct

  • Ubuntu y Debian

# apt-get install qt5ct

  • Gentoo

# emerge -av qt5ct

Código fuente

Para poder compilar el código fuente, hay una serie de pasos que debemos seguir:

NOTA: Dependiendo de la distribución, pueden variar algunos nombres respecto al qmake porque puede haber más de una versión de Qt instalada en nuestro sistema como es el caso de Fedora que tiene qmake-qt5 para Qt5 y qmake para Qt4.

  1. Descargar el archivo comprimido que contiene el código fuente desde aquí
  2. Descomprimirlo en el directorio que queramos
  3. Instalar software adicional requerido para el proceso de compilación
  4. Compilar el código fuente
  5. Instalar en nuestro sistema
  6. Ejecutar dicho software.
Paquetes necesarios

Esta es la lista de los paquetes que necesitaremos para compilar qt5ct, a la izquierda, el nombre común, a la derecha, el nombre de los paquetes en Fedora.

- qttools-devel => qt5-qttools-devel
- qtbase-devel => qt5-qtbase-devel
- qtbase-static => qt5-qtbase-static
- qtsvg-devel => qt5-qtsvg-devel
- g++ => gcc-c++
- make => make
- gcc => gcc
Compilando

Según el README:

$ qmake PREFIX=/DIRECTORIO_A_INSTALAR
$ make
# make install

Para instalarlo en el sistema (Fedora):

$ qmake-qt5 PREFIX=/usr
$ make
# make install

Ya lo tendremos instalado, sin embargo, actualizamos la base de datos de los ficheros .desktop para que aparezca en los menús de nuestro entorno de escritorio update-desktop-database(1).

# update-desktop-database

Troubleshooting

No puedo iniciar el programa porque obtengo este error:

The QT_QPA_PLATFORMTHEME environment variable is not set correctly.

Para solucionarlo, añadimos el siguiente código a un archivo nuevo dentro del directorio /etc/profile.d/ , guardamos con extensión .sh y salimos de la sesión, ya debería estar arreglado.

export QT_QPA_PLATFORMTHEME=qt5ct

Referencias

Como añadir RPM Fusion en Fedora

El Proyecto Fedora hace uso de una filosofía en la que pretende fomentar lo máximo que pueda el software libre y de open source ya que si no lo hacen de esta manera, fomentarían el uso de lo privativo en primer lugar dejando a lo libre relegado porque tendería a ir conocíendose menos. Por ende es normal que no encontremos drivers de caracter privativo, códecs multimedia, virtualizadores del tipo VirtualBox...etc.

¿Cómo remediarlo?

RPM Fusion es un conjunto de 2 repositorios creado por voluntari@s que crearon en su día otros repositorios como Dribble, Freshrpms, Livna... para proveer de software que no se encuentren en los repositorios oficiales de Fedora, RHEL o CentOS.

Uno de ellos llamado "free", provee software libre o de open source como es el caso de VirtualBox licenciado bajo GPLv2 o GPLv2 con CDDL.

Y otro se llama "non-free", este difunde software restrictivo a términos de licencias, pueden contener Copyright como los drivers de NVIDIA.

NOTA: No es obligatorio tener ambos repositorios, se pueden utilizar uno independientemente del otro

Instalación

Simplemente abrimos una terminal y ejecutamos el siguiente comando.

Habilitando repositorio RPM Fusion Free

sudo dnf install https://download1.rpmfusion.org/free/fedora/rpmfusion-free-release-$(rpm -E %fedora).noarch.rpm 

Habilitando repositorio RPM Fusion Non-free

https://download1.rpmfusion.org/nonfree/fedora/rpmfusion-nonfree-release-$(rpm -E %fedora).noarch.rpm

Habilitando ambos repositorios

sudo dnf install https://download1.rpmfusion.org/free/fedora/rpmfusion-free-release-$(rpm -E %fedora).noarch.rpm https://download1.rpmfusion.org/nonfree/fedora/rpmfusion-nonfree-release-$(rpm -E %fedora).noarch.rpm

Actualizando el caché de DNF

sudo dnf check-update

Visualizar todos los paquetes disponibles del repositorio Free.

dnf list |grep rpmfusion

Visualizar todos los paquetes disponibles del repositorio Non-free.

dnf list |grep rpmfusion

Referencias

  • RPMFusion.org

Como clonar discos duros en Linux usando Clonezilla

Clonezilla es un proyecto de software libre muy conocido entre otras funciones como herramienta de clonación de dispositivos de almacenamiento como discos duros, memorias USB entre otros.

Este proyecto distribuye dos tipos de versiones, una live que nos permite hacer una copia de seguridad o una restauración en menos que canta un gallo, pero para una máquina.

Mientras que la versión para servidor permite hacer clonación de hasta 40 máquinas a la vez. Clonezilla cuenta con dos ramas de desarrollo, estable y de pruebas ambas cuentan con una imagen basada en Debian y otra en Ubuntu.

Características

  • Soporta un gran número de sistemas de archivos como EXT[2-4], Reiser[FS-4], XFS, JFS, BTRFS, F2F2, NTFS, LVM2...
  • Incluye el gestor de arranque tanto para MBR como GPT
  • Soporta arranque por UEFI y también por red
  • Permite clonar todo el disco o por particiones
  • Se puede almacenar el contenido de un disco, o partición en ficheros .img
  • y mucho más...

Lo malo

  • El dispositivo de almacenamiento de origen tiene que tener el mismo espacio que el dispositivo destino
  • No hay copia de seguridad incremental o diferencial (aún)
  • No se puede clonar en caliente (aún)
  • Y algunas cosas más que puedes ver en su página oficial.

¡Al lío!

En el siguiente vídeo vamos a ver como realizar la clonación completa de dos discos duros paso por paso.

Recursos

Como crear tu propio repositorio en CentOS

YUM o Yellowdog Updater Modified es un gestor de paquetes de alto nivel utilizado por Fedora previo sa la salida de su nuevo gestor de paquetes DNF (basado en YUM), y el que utiliza CentOS y RHEL.

En este post vamos a ver como crear un repositorio local con CentOS para mantener nuestros paquetes personalizados actualizados, o bien para hacer de "catcher" dentro de una red y que puedan distribuirse las actualizaciones oficiales al resto de equipos sin tener que consumir el ancho de banda proporcionado por el ISP que tengamos contratado.

Tenemos que tener un equipo con al menos dos tarjetas de red, una con salida al exterior y otra en la que conecta a la topología interna de nuestro hogar, empresa...etc

Vamos ha hacer el ejemplo con una subred de clase C y con una topología en serie (el cliente se conecta a un servidor directamente conectado, y el servidor está conectado directamente al ISP).

Información de la subred

  • Subred: 192.168.0.64/26
  • Máscara: 255.255.255.128
  • Broadcast: 192.168.0.127

Dirección de subred equipos

Servidor: * IP: 192.168.0.64 * Nombre de la NIC: enp0s8 Cliente: * Conexión mediante DHCP * Nombre NIC: enp0s3

A continuación vamos a instalar todo lo necesario en el servidor.

Configurando el Servidor

Pasos a seguir: * Configurando interfaz de red interna * Instalando y configurando Kea * Instalando y configurando Apache * Gestionando Firewalld * Instalando createrepo

Configurando interfaz de red interna

En distribuciones como CentOS/RHEL y Fedora, almacenan sus configuraciones de red en el directorio /etc/sysconfig/network-scripts/.

Modificamos el archivo de la interfaz que utilizaremos a nivel interno: `

BOOTPROTO=static
NAME=enp0s8
DEVICE=enp0s8
ONBOOT=yes
ZONE=discrete
IPADDR=192.168.0.65
NETMASK=255.255.255.128

Levantando la red:

sudo ifdown enp0s8
sudo ifup enp0s8

Instalando y configurando Kea

Kea es un servidor DHCP desarrollado por la Internet Systems Consortium, Inc, permite una implementación completa de servidores DHCPv4 (IPv4), DHCPv6 (IPv6) y DNS dinámicos.

sudo yum install kea

Modificando /etc/kea/kea.conf

Modificamos el fichero troncal de Kea tal que así:

# DHCPv4 configuration start here
"Dhcp4":
{
# Add names of interfaces to listen on.
    "interfaces-config": {
     "interfaces": [ "enp0s8" ]
    },

Y modificamos el apartado de subred para IPv4, tal que así:

    "subnet4": [
    {
        "subnet": "192.168.0.64/26",
        "pools": [ { "pool": 192.168.0.70 - 192.168.0.126" } ] }
        ]
    },

Como vemos, hemos dejado 4 IPs para hosts excluidas dentro de este rango, simplemente por si queremos añadir dispositivos estáticos aparte de nuestro servidor.

Iniciamos el servicio:

sudo systemctl start kea-dhcpv4.service

Añadimos el servicio para que arranque cuando inicie el sistema:

sudo systemctl enable kea-dhcpv4.service

Instalando y configurando Apache

Personalmente, trabajo con Apache, pero podéis utilizar NGINX si queréis.

sudo yum install httpd

Iniciamos

sudo systemctl start httpd.service

Gestionando Firewalld

Firewalld es un gestor dinámico del firewall de Linux que viene por defecto en distribuciones como Fedora, RHEL, CentOS. Podemos definir zonas con servicios y puertos específicos, y asociar dichas zonas a determinadas interfaces de red entre otras cosas.

Creamos una zona personalizada:

<?xml version="1.0" encoding="utf-8"?>
<zone>
  <short>Discrete</short>
  <description>Internal use only.</description>
  <interface name="enp0s8"/>
  <service name="http"/>
</zone>

Reiniciamos el servicio

sudo systemctl restart firewalld.service

Comprobando que trabaja:

sudo firewall-cmd --get-active-zones

Deberá salir una salida tal que así:

public
    interfaces: enp0s3
discrete
    interfaces: enp0s8

Esto nos permite las conexiones del protocolo HTTP a nuestro servidor, cualquier cliente que se encuentre en la red asociado a la tarjeta enp0s8.

NOTA Importante: Si utilizas otro puerto para asistir a las peticiones del servidor Web, tendremos que sustituir la linea <service name="http"/> por <port protocol="tcp" port "xx"/>, además, si utilizamos SELinux, tendremos que añadir la apertura del puerto. sudo semanage port -a -t http_port_t -p tcp xx

Instalando createrepo

Este programa permite generar todo lo necesario para tener un repositorio, como el repomd.xml un fichero basado en XML que contiene metadatos registrando todo lo que tiene un repositorio. Creamos el directorio dentro de la ruta del ServerRoot configurado en nuestro Apache: /var/www/html

sudo mkdir -p /var/www/html/local/packages

Creamos el repo

sudo createrepo --database /var/www/html/local

Y se creará una carpeta llamada repodata, creamos un enlace simbólico de repomd.xml:

sudo ln -s /var/www/html/local/repodata/repomd.xml /var/www/html/local/

Probamos si podemos descargar este fichero:

wget http://localhost/local/repomd.xml

ó visualizarlo con curl

curl http://localhost/local/repomd.xml

Copiamos o añadimos todos los paquetes tengamos en nuestro nuevo repositorio y listo. Si queremos actualizar los metadatos y la base de datos dónde se almacena la información de los paquetes, solo bastará con ejecutar:

sudo createrepo --update /var/www/html/local

NOTA: Si utilizamos SELinux, un conjunto de políticas que trabajan conjuntamente con el kernel para proporcionar seguridad al sistema, tendremos que reestablecer las etiquetas con restorecon, este comando se encuentra en el paquete policycoreutils, viene por defecto instalado en el sistema.

sudo restorecon -vR /var/ww/html/local/*

B-O-N-U-S

Si queremos hacer de "catcher", podemos copiar todos los paquetes que se encuentren almacenados cuando hemos hecho instalaciones y centrarlas en nuestro repo.

Por ejemplo:

Descargamos de los repositorios base, updates, epel paquetes --> Copiamos en la carpeta de nuestro repo --> Eliminamos los repositorios de los clientes y dejamos solo el nuestro.

Con este pequeño script que puedes descargar desde aquí podemos hacerlo.

Descargamos el script:

git clone https://github.com/sincorchetes/ownyumrepo

Ejecutamos

chmod +x ownyumrepo
./ownyumrepo

NOTA: Si tu repo tiene otro nombre y directorio, tendrás que modificarlo

Configuando el cliente

Pasos a seguir: * Configurando la interfaz de red * Creando local.repo

Configurando la interfaz de red

Si utilizáis CLI en vez de interfaz gráfica, editamos el interfaz /etc/sysconfig/network-scripts/ifcfg-enp0s3

BOOTPROTO=dhcp
NAME=enp0s3
DEVICE=enp0s3
ONBOOT=yes

Levantando la red:

sudo ifup enp0s3

Creando local.repo

Creamos el fichero de nuestro repositorio local tal que así:

[local]
name=Local
baseurl=http://192.168.0.65/local/
enabled=1

Actualizamos

sudo yum check-update

Y listo, ya podemos instalar, si quieres ver qué paquetes tenemos disponibles para instalar:

yum list available |grep local

NOTA: Si hemos hecho el paso B-O-N-U-S, tendremos que desactivar todos los repositorios de yum menos el nuestro. Basta con mover todos a una carpeta nueva llamada backup-repos y listo

¡Espero que les haya gustado este tutorial!

Referencias

¿Cómo gestionar software en Linux?

Hoy en día, la forma en la que se desarrolla y se distribuye el software ha aumentado y cambiado tanto que alcanza ritmos realmente vertiginosos. Esto ha supuesto una modernización en cuanto al mantenimiento del mismo en todas las distribuciones de GNU/Linux y otros sistemas UNIX-like tipo FreeBSD.

Cuentan las malas lenguas hace muchos muchos años, sobre todo en los comienzos de las primeras distribuciones de Linux en los 90's que para instalar un software teníamos que tener el código fuente y someterlo a un proceso de compilación por el cuál, había que esperar a que saliera bien para que este se incorporáse a nuestro sistema. Eso, o tener el software ya previamente pre-compilado y adherirlo al sistema y esperar a que también funcionase.

Este proceso tan engorroso fue clave para que se desarrollasen mecanismos alternativos al viejo make install clean que permitiesen gestionar software de una forma más cómoda y rápida gracias a la llegada de los gestores de paquetes.

Un gestor de paquetes, es un programa o un conjunto de herramientas que permiten el mantenimiento y gestión del software que se encuentra en nuestro sistema como la instalación, eliminación, comprobación e incluso, búsqueda de software adicional que esté debidamente empaquetado. Este software que se administra a través de un gestor de paquetes es un archivo comprimido con una extensión específica y una serie de archivos y directorios específicos aparte del software ya pre-compilado, que ayudan a identificar al gestor de paquetes qué es lo que se va a instalar/eliminar en el sistema.

Gracias a estos gestores podemos trabajar con paquetes y mantener así una mayor integridad en todo el sistema ya que al registrar todos los programas, scripts... que instalemos, podemos actualizarlos o eliminarlos sin tener que buscar los directorios o ejecutables uno a uno. Utilizando el método tradicional, no sabríamos qué software tendríamos instalado a menos que indaguemos o efectuemos la instalación de forma manual y nos acordemos.

Sin embargo, los gestores de paquetes que se desarrollaron en un principio como es el caso de dpkg(8) por parte de la rama de Debian, ó rpm (8) por parte del mundo de Red Hat, no facilitaban tareas como la resolución de dependencias, algo clave y muy sustancial porque, permite ahorrar hasta un 99% cuando se quería instalar multitud de paquetes que requerían de dependencias que no estuvieran instaladas en el sistema. Para ello se elaboraron los gestores de paquetes de alto nivel. Éstos contienen una flexibilidad enorme y le sacan el potencial oculto a los gestores de paquetes de bajo nivel como es el caso de rpm (8) y dpkg(8). También permiten buscar dependencias de cualquier paquete que se desee instalar, siempre y cuando los encuentre en los servidores que distribuyan los paquetes, los cuáles reciben el nombre de repositorios.

Estos son algunos nombres de gestores de paquetes de alto nivel: * zypper(8) utilizado por openSUSE * pacman(8) desarrollado por Archlinux * emerge(8) elaborado por el equipo de Gentoo * dnf(8) programado por la comunidad de Fedora * apt*(8) desarrollado por la comunidad de Debian * aptitude(8) también elaborado por la comunidad de Debian * yum(8) antecesor de DNF * pkg(8) programado por la comunidad de FreeBSD * pkg_add(8) elaborado por el equipo de NetBSD (la parte binaria)

No obstante, a pesar de ser una evolución y un gran avance a genera una serie de problemas como la incompatibilidad entre sistemas de paquetería y/o posible solapación entre unos y otros ya que el "mercado" intenta simplificar a menudo que software mantener para según que distribución. Para ello se desarrollaron los famosos .exe de Windows para Linux con sistemas como Snap por parte de Canonical, Flatpak por parte del ecosistema de Redhat o AppImage impulsada por entusiastas independientes del software libre y open source. Estos sacrifican el uso de librerías compartidas, que es una de las características más importantes que tiene Linux o los sistemas UNIX-like ya que permiten ahorrar mucho espacio en disco al reutilizarse las librerías, por tener mayor disponibilidad del software independientemente de la distribución que se utilice.

Como vemos tenemos varias formas de gestionar software en nuestro sistema: * Compilando el código fuente e instalándolo/desinstalándolo manualmente * Utilizar un gestor de paquetes que permita facilitar la instalación y/o eliminación del software del sistema * Haciendo uso de métodos alternativos a los gestores de paquetes como Snap, Flatpak, AppImage.

Recursos

  • LPIC-I, Ediciones Eni
  • manpages yum(8), dnf(8), rpm(8), dpkg(8)
  • Flatpack
  • Snap
  • AppImage

¿Cómo instalar Packet Tracer 7.3 en Linux?

NOTA: He vuelto a revisar el procedimiento para PT 7.3 en Fedora 32 y funciona perfectamente. He visto varios comentarios indicando que pueden obtener el software de servidores como Mediafire. Os pido que lo descarguéis directamente desde la página web de Cisco. El hecho de que no ponga el enlace de descarga a este software, es que Cisco no permite su difusión, por lo que os añado en este post una manera de cómo obtenerlo, gracias por vuestros reportes y aportes.

Packet Tracer es un software desarrollado por Cisco en su división de educación NetAcad. Este software de "simulación" permite diseñar múltiples escenarios en el ámbito de redes, ya que permite elaborar diferentes tipos de redes como LAN, MAN, WAN con medios alámbricos e inalámbricos; permite utilizar protocolos de enrutamiento dinámicos como OSPF, IGRP, EIGRP, BGP, RIP y estáticos.

También permite la elaboración de redes convergentes implementando equipos con múltiples servicios que actúen de servidor, todos los paquetes transmitidos y retransmitidos (protocolo TCP) se pueden visualizar con un analizador de tráfico que incorpora el programa, este permite ver cómo se establecen los procesos de negociación con los diferentes protocolos de transmisión y de enrutamiento facilitando la comprensión de los mismos.

Packet Tracer se encuentra disponible para diferentes sistemas como Windows (32 y 64 bits), Linux (solo 64 bits), Android e iOS. Hay que estar previamente logeado para acceder a su contenido.

La instalación tanto en Android, iOS y Windows no requieren de pasos adicionales, más que de descargar su instalador desde el market de aplicaciones correspondiente (Google Play Store, App Store_) o el ejecutable para Windows desde la página Web.

Requisitos

Primeramente, hay que tener usuari@ en la NetAcad para poder descargar su software, (no ponemos un enlace directo ya que no se permite redistribuir el software). Antes era más complicado acceder si no se hacía un curso concertado, pero ahora basta con hacer un curso introductorio para poder descargarlo.

Puedes inscribirte en el curso pulsando aquí.

¿Linux? ¿Complicado?

En Linux los pasos no son tan "sencillos", ya que en primer lugar, el software viene comprimido en un comprimido .tar.gz, en segundo lugar, hay que realizar la instalación haciendo uso de un script en línea de comandos, en tercer lugar el script de instalación está mejor adaptado a distribuciones como Ubuntu que el resto, y en cuarto lugar, el software hace uso de una librería SSL poco utilizada en distribuciones modernas, y tenemos que hacer un "apaño" con lo que hace este proceso un poco engorroso.

Pasos a seguir

Descargamos y descomprimimos el Packet Tracer.

cd /DIRECTORIO_DESCARGA_PT/
mkdir PT
tar xfv Packet\ Tracer\ 7.2\ for\ Linux\ 64\ bit.tar.gz -C PT
cd PT

Instalamos

sudo ./install

[salida]
Welcome to Cisco Packet Tracer 7.2 Installation

Read the following End User License Agreement "EULA" carefully. You must accept the terms of this EULA to install and use Cisco Packet Tracer.
Press the Enter key to read the EULA.
[...]

Pulsamos Espacio para hacer más rápida la lectura, cuando nos pregunte, escribimos y, dejamos todo por defecto.

Do you accept the terms of the EULA? (Y)es/(N)o y
Enter location to install Cisco Packet Tracer or press enter for default [/opt/pt]: 
Installing into /opt/pt
Copied all files successfully to /opt/pt


Should we create a symbolic link "packettracer" in /usr/local/bin for easy Cisco Packet Tracer startup? [Yn] y
Type "packettracer" in a terminal to start Cisco Packet Tracer
Writing PT7HOME environment variable to /etc/profile
Writing QT_DEVICE_PIXEL_RATIO environment variable to /etc/profile

Cisco Packet Tracer 7.2 installed successfully
Please restart you computer for the Packet Tracer settings to take effect

Cuando queramos arrancar el software, no aparecerá nada. Si no fijamos veremos que falta una librería.

ldd /opt/pt/bin/PacketTracer7
[...]
libcrypto.so.1.0.0 => not found
[...]

Para solucionar este inconveniente descargamos libcrypto.so.1.0.0 y libssl.so.1.0.0. y lo copiamos a /opt/pt/bin o clonamos el repositorio y ejecutamos el script sencillo con el que copiará directamente los archivos descargados al directorio dónde tienen que ir.

git clone https://github.com/sincorchetes/packettracer
cd packettracer
chmod +x bootstrap.sh
./bootstrap.sh

Una vez hecho esto, si lanzamos packettracer (un alias que instaló el instalador) desde terminal veremos una ventana como la siguiente:

Troubleshooting

No veo Packet Tracer en el menú de aplicaciones. Si no lo ves, solo bastará con copiar el archivo .desktop a /usr/share/applications

sudo cp /opt/pt/bin/Cisco-PacketTracer.desktop /usr/share/applications/

Referencias

¿Cómo obtener ayuda en sistemas UNIX-like?

¿Qué pasa cuando tenemos algún problema con algún comando, no tenemos muy clara el parámetro que tendríamos que utilizar, saber bien si es realmente ese comando..etc?

Bien los sistemas UNIX-like como FreeBSD, Linux... por excelencia poseen una serie de herramientas como el comando man(1), info(1), help(1)... que vienen con el sistema operativo que podemos utilizarlos para salvarnos de un buen apuro. Si bien son conocidos estos sistemas son por su extensa y grande documentación otorgándoles muchísima profesionalidad y calidad.

man

El comando man(1) es un interfaz en modo texto escrito por John W. Eaton entre el 1990 y 1993. Este nos permite visualizar los manuales de los comandos y programas que tengamos instalados en el sistema. Por lo general suelen contener multitud de ejemplos, descripciones sobre lo qué hace el comando o programa así como también explica para qué sirve cada parámetro que queramos utilizar. Es como un biblia en verso. man(1) dispone de una base de datos dónde almacena las rutas de la documentación para facilitar un acceso casi instantáneo a los archivos, la configuración de ésta se encuentra en el directorio /etc/man_db.conf y para regenerarla o crearle se utiliza el comando mandb(8)

Su sintaxis más básica es la siguiente:

man [n] comando
* man es el nombre del comando
* n es el número de categoría que puede tener el programa en el sistema, ya que pueden haber dos comandos iguales y pueden despitarnos a la hora de obtener el manual correcto.
* comando nos permitirá visualizar el manual para este

Categorías

Nº cat Descripción
1 Ejecutables o comandos que tienen que ver con el shell
2 Llamadas al sistema que son funciones provistas por el kernel
3 Llamadas a librerías que son funciones dentro de las librerías de los programas
4 Ficheros especiales que suelen encontrarse en /dev
5 Formatos y convenciones de archivos como por ejemplo /etc/passwd
6 Juegos
7 Miscelánea que también incluye macro paquetes y sus convenciones como man(7), groff(7)
8 Comandos de administración del sistema que suele utilizar el usuario root
9 Rutinas del kernel que no son estándar

¿Cómo funciona man?

Seguramente que nos lo preguntemos por la cantidad de categorías que hay y sobre todo porque hay muchos comandos que posiblemente se encuentren repetidos. Bien, cuando nosotros llamamos a man(1) sin especificar una categoría, lo que hace es buscar en todas las categorías pero de forma consecutiva, es decir, 1 1p 8 2 3 3p 4 5 6 7 9 0p n lp o 1x 2x 3x 4x 5x 6x 7x 8x.

¿Qué secciones contiene cada manual?

Cada página de manual contiene una serie de secciones que nos permiten organizar la información de tal forma que no se mezcle y siendo bastante útil y práctica. También es verdad que muchas páginas de los manuales no contienen todas las secciones e incluso pueden que tengan secciones personalizadas como es el caso del comando info(1) que contiene una sección llamada COPYRIGHT y REPORTING BUGS.

Sección Descripción
NAME Nombre del programa, comando...
SYNOPSIS Sintaxis, parámetros y un poco cómo utilizar el comando
CONFIGURATION Apartado de configuración
DESCRIPTION En este apartado se explica qué hace el comando, finalidad...
OPTIONS Explicación intensiva de cada una de las opciones y parámetros del software
EXIT STATUS Número de salida de ejecución de un comando, script...
RETURN VALUE Tipo de valor que devuelve X cosa, generalmente suelen ser funciones
ERRORS Se explica por qué pueden producirse determinados errores controlados
ENVIRONMENT Variables de entorno
FILES Ficheros involucrados en el funcionamiento del comando o aplicación
VERSIONS Cambios añadidos en las versiones del software
CONFORMING TO Citando estándares o información en concreto
NOTES Información adicional
BUGS Aparta de información para reportar errores tipo Bugzilla
EXAMPLE Ejemplos de cómo habría que ejecutarse o configurarse determinado software
AUTHORS Responsables del diseño del programa
SEE ALSO Tipo README adicional

Preformateo en las secciones:

Según el man del comando man, en la sección de SYNOPSIS si o sí, debería hacer uso de un estándar de formato para diferenciar parámetros o argumentos obligatorios y que este, puede extenderse en el resto de secciones.

  • texto en negrita: Exactamente como se muestra
  • texto en cursiva: Reemplazar con un argumento apropiado
  • [-abc]: Cualquiera o todos los argumentos que se encuentren dentro de los corchetes son opcionales
  • -a|-b: Opciones delimitadas por el caracter | o que se no se pueden utilizar en conjunto
  • argumento: Argumento que se puede repetir
  • [expresion]: Toda la expresión que se encuentre dentro de unos corchetes pueden repetirse

Este tipo de formato se puede interpretar de una forma diferente devido al dispositivo que se esté utilizando, ya que hay intérpretes de comandos que no pueden reproducir un subrayado, palabras en cursiva...etc

¿Cómo manejar info?

Para interactuar con man(1), podemos hacer uso de las flechas direccionales, no obstante, en la siguiente tabla resumiremos un poco algunos atajos que nos servirán para empezar a manejarlo:

Atajo Descripción
h H Muestra la ayuda de navegación
q :q Q :Q ZZ Sale del man
j e Desplaza la información hacia arriba línea a línea
k Mueve la información hacia abajo línea a línea
d z f Desplaza unas cuántas líneas hacia arriba
b y Desplaza unas cuántas líneas hacia abajo
g w Comienzo de página
1,20,200... Corre el texto tantos caracteres se le comunique
/expresión Busca en el texto alguna coincidencia con lo escrito
n Permite volver a buscar una misma coincidencia con lo buscado con /

¿Dónde se encuentra la documentación?

En general, toda la documentación se encuentra en el directorio /usr/share/man, también puede encontrarse en /usr/local/share/man o en directorios ya facilitados por el propio software a la hora de compilarse o empaquetarse.

Encontrar información relacionada

Si no nos acordamos del comando podemos buscarlo mediante relación de coincidencias haciendo uso del parámetro -k

man -k download

ascii-xfr (1)        - upload/download files using the ASCII protocol
dnf.plugin.download (8) - DNF download Plugin
git-fetch (1)        - Download objects and refs from another repository
git-http-fetch (1)   - Download from a remote Git repository via HTTP
repotrack (1)        - track a package and its dependencies and download them
smbget (1)           - wget-like utility for download files over SMB
update-pciids (8)    - download new version of the PCI ID list
wget (1)             - The non-interactive network downloader.
XkbSetIndicatorMap (3) - Downloads the changes to the server based on modific...
yumdownloader (1)    - download RPM packages from Yum repositories

Regenerando la base de datos

Para regenerar la base de datos de man, simplemente ejecutaremos:

sudo mandb

Comando info

El comando info(1) desarrollado por la Free Software Foundation (FSF) nos provee un lector de documentación elaborada en formato info. Por lo generla, si ejecutamos info(1) a secas, nos saldrá como una especie de página con hipervínculos por dónde podemos navegar entre las diferentes páginas disponibles como si de una página Web en modo texto se tratase.

Si nos dirigimos a los vínculos que se encuentran subrayados y pulsamos enter, accedemos directamente a dicha página. Las páginas pueden contener un índice facilitando la navegación.

Para más información sobre el comando info, info info

Comandos con parámetro de ayuda

Por regla general, cada comando suele tener una pequeña ayuda que describe un poco para qué sirve cada parámetro en resumidas líneas.

Por ejemplo, veamos la salida del comando ls(1) NOTA: Recortaremos la salida del comando porque es muy largo

Usage: ls [OPTION]... [FILE]...
List information about the FILEs (the current directory by default).
Sort entries alphabetically if none of -cftuvSUX nor --sort is specified.

Mandatory arguments to long options are mandatory for short options too.
  -a, --all                  do not ignore entries starting with .
  -A, --almost-all           do not list implied . and ..
      --author               with -l, print the author of each file
  -b, --escape               print C-style escapes for nongraphic characters
      --block-size=SIZE      with -l, scale sizes by SIZE when printing them;
                               e.g., '--block-size=M'; see SIZE format below
  -B, --ignore-backups       do not list implied entries ending with ~

Como podemos ver nos da una breve explicación de lo que hace cada parámetro.

Si no hacen uso de --help, otros comandos también disponen de -h como dmesg(1): NOTA: También hemos recortado la salida de este comando debido al tamaño de su salida

Usage:
 dmesg [options]

Display or control the kernel ring buffer.

Options:
 -C, --clear                 clear the kernel ring buffer
 -c, --read-clear            read and clear all messages
 -D, --console-off           disable printing messages to console
 -E, --console-on            enable printing messages to console
 -F, --file <file>           use the file instead of the kernel log buffer
 -f, --facility <list>       restrict output to defined facilities
 -H, --human                 human readable output

Comando help

Este comando provee de información sobre comandos integrados en la shell como los condicionales, bucles, variables... veamos un ejemplo:

function: function name { COMMANDS ; } or name () { COMMANDS ; }
    Define shell function.

    Create a shell function named NAME.  When invoked as a simple command,
    NAME runs COMMANDs in the calling shell's context.  When NAME is invoked,
    the arguments are passed to the function as $1...$n, and the function's
    name is in $FUNCNAME.

    Exit Status:
    Returns success unless NAME is readonly.

Veamos otro:

variables: variables - Names and meanings of some shell variables
    Common shell variable names and usage.

    BASH_VERSION    Version information for this Bash.
    CDPATH  A colon-separated list of directories to search
            for directories given as arguments to `cd'.
    GLOBIGNORE  A colon-separated list of patterns describing filenames to
            be ignored by pathname expansion.
    HISTFILE    The name of the file where your command history is stored.
    HISTFILESIZE    The maximum number of lines this file can contain.
    HISTSIZE    The maximum number of history lines that a running

Como vemos en uno nos explica la sintaxis de una función (que veremos más adelante) y de las variables de entorno, con una salida recortada ya que esta es muy larga.

Y esto es todo compañer@s, no se olviden de que cada proyecto, software, aplicación, comandos...etc suelen tener a disposición al menos un pequeño manual de como utilizarse además de que dependiendo de su envergadura, puede estar sustentado por una comunidad que favorezca el intercambio de información y se impulsen más características, más documentación y más de todo.

¡Espero que les haya gustado!

Fuentes

  • man(1) pages
  • info(1) pages

¿Cómo solucionar el problema de Netflix y Vivaldi en Linux?

En el post anterior, estuvimos hablando sobre Vilvadi. Un navegador que se liberó en contraposición del rumbo que tomó Opera con su comunidad dando origen a su primera versión el 12 de abril del 2016.

Sin embargo, hemos tenido problemas al reproducir videos con Netflix o Atres Player porque al parecer hay un problema con los códecs. Fedora por ejemplo no incorpora códecs propietarios a menos que instales un repositorio adicional y los instales. No obstante, hemos hecho un sondeo por sus foros y hemos encontrado bastantes post que ocurrían en diferentes distribuciones de Linux. * Netflix and Vivaldi on Linux? * Netflix only works when Chrome is installed * Netflix videos doesn't work :( * Netflix don't find widevine and I'm pretty desperate now * Movie Sites Won't Play

...etc

¿Cómo solucionarlo?

Pues bien, uno de estos post, indicaban la instalación de una librería (libffmpeg.so) que viene dentro de un paquete que se obtiene de los repositorios de Ubuntu

Linux 32 Bits

wget -c http://security.ubuntu.com/ubuntu/pool/universe/c/chromium-browser/chromium-browser_67.0.3396.99-0ubuntu1_i386.deb
ar vx chromium-browser_67.0.3396.99-0ubuntu1_i386.deb
tar -xjvf data.tar.xz 
sudo cp usr/lib/chromium-browser/libffmpeg.so /opt/vivaldi/lib
rm -rf usr/

Linux 64 bits

wget -c http://security.ubuntu.com/ubuntu/pool/universe/c/chromium-browser/chromium-codecs-ffmpeg-extra_67.0.3396.99-0ubuntu1_amd64.deb
ar vx chromium-codecs-ffmpeg-extra_67.0.3396.99-0ubuntu1_amd64.deb
tar -xjvf data.tar.xz 
sudo cp usr/lib/chromium-browser/libffmpeg.so /opt/vivaldi/lib
rm -rf usr/

Reiniciamos el navegador y ¡ya tendría que estar solucionado! Hay otras alternativas como un script que sacó un usuario de la comunidad de Vivaldi llamado @ruario que es de donde hemos sacado la URL del paquete necesario.

¡Sin duda alguna le agradecemos el aporte desde Echemos un bitstazo!

Conversor HDMI-VGA Aukey

Hemos adquirido a través de Amazon, un conversor HDMI-VGA debido a que tenemos un portátil que no tiene toma VGA, solo un puerto HDMI y 2 micro-HDMI. Queriamos tan solo compartir lo bien que nos funciona este dispositivo y por lo que recomendamos su compra. 100% compatible con Linux. El conversor viene dentro de una caja de cartón fino, con un pequelo manual, una pegatina y el conversor con el puerto HDMI cubierto por un protector de plástico duro para evitar que se deteriore.

Aukey

Resultado de xrandr(1):

$ xrandr
Screen 0: minimum 8 x 8, current 3200 x 1080, maximum 32767 x 32767
DP-0 disconnected (normal left inverted right x axis y axis)
DP-1 disconnected (normal left inverted right x axis y axis)
eDP-1-1 connected primary 1920x1080+1280+0 (normal left inverted right x axis y axis) 344mm x 194mm
   1920x1080     60.02*+
   1400x1050     59.98  
   1280x1024     60.02  
   1280x960      60.00  
   1024x768      60.04    60.00  
   960x720       60.00  
   928x696       60.05  
   896x672       60.01  
   800x600       60.00    60.32    56.25  
   700x525       59.98  
   640x512       60.02  
   640x480       60.00    59.94  
   512x384       60.00  
   400x300       60.32    56.34  
   320x240       60.05  
DP-1-1 disconnected (normal left inverted right x axis y axis)
HDMI-1-1 connected 1280x1024+0+0 (normal left inverted right x axis y axis) 338mm x 270mm
   1280x1024     60.02*+  75.02  
   1920x1080     60.00    59.94  
   1280x960      60.00  
   1152x864      75.00  
   1280x720      60.00    59.94  
   1024x768      75.03    70.07    60.00  
   832x624       74.55  
   800x600       72.19    75.00    60.32    56.25  
   640x480       75.00    72.81    66.67    60.00    59.94  
   720x400       70.08