Saltar a contenido

Publicaciones

Utilizando Podman en Gentoo

Podman es un motor de contenedores que es compatible con la especificación OCI de contenedores. Este software forma parte del ecosistema de Red Hat, pero se puede instalar también en distribuciones como Gentoo. Como cumple las especificaciones OCI, se puede reemplazar directamente por Docker, ya que mucho de los comandos de Docker se han traducido directamente a Podman y así evitar tener que aprender más comandos nuevos.

Las principales diferencias que existen entre Docker y Podman es que Podman no necesita de un servicio, con lo que se incrementa la seguridad en el sistema, y si se tiene systemd, los contenedores pueden ejecutarse como servicios del sistema. Más info sobre esto.

Configurando el kernel

Hay que tener una serie de caracterísitcas habilitadas en el kernel para poder continuar:

General setup  --->
  -*- Control Group support  --->
    [*]   Memory controller
    [*]   IO controller
    [*]   CPU controller  --->
      [*]   Group scheduling for SCHED_OTHER
      [*]     CPU bandwidth provisioning for FAIR_GROUP_SCHED
      [*]   Group scheduling for SCHED_RR/FIFO
    [*]   PIDs controller
    [*]   RDMA controller
    [*]   Freezer controller
    [*]   HugeTLB controller
    [*]   Cpuset controller
    [*]     Include legacy /proc/<pid>/cpuset file
    [*]   Device controller
    [*]   Simple CPU accounting controller
    [*]   Perf controller
    [*]   Misc resource controller
  [*] Configure standard kernel features (expert users)  --->
    [*]   Enable 16-bit UID system calls
    [*]   Multiple users, groups and capabilities support
    [*]   sgetmask/ssetmask syscalls support
    [*]   Sysfs syscall support
    [*]   open by fhandle syscalls
    [*]   Posix Clocks & timers
    [*]   Enable support for printk
    [*]   BUG() support
    [*]   Enable ELF core dumps
    [*]   Enable PC-Speaker support
    [*]   Enable full-sized data structures for core
    [*]   Enable futex support
    -*-   Enable eventpoll support
    -*-   Enable signalfd() system call
    -*-   Enable timerfd() system call
    -*-   Enable eventfd() system call
    -*-   Use full shmem filesystem 
    [*]   Enable AIO support
    [*]   Enable IO uring support
    [*]   Enable madvise/fadvise syscalls
  -*- Namespaces support  --->
    -*-   UTS namespace
    [*]   TIME namespace
    -*-   IPC namespace
    -*-   User namespace
    -*-   PID Namespaces
    -*-   Network namespace
[*] Networking support  --->
  Networking options  --->
    <M> 802.1d Ethernet Bridging
    [*]   IGMP/MLD snooping
    <M> 802.1Q/802.1ad VLAN Support

Device Drivers  --->
  [*] Network device support  --->
    <M>     MAC-VLAN support
    <M>       MAC-VLAN based tap driver
    <M>     Universal TUN/TAP device driver support
    <M>     Virtio network driver
  Character devices  --->
    [*]   Unix98 PTY support

File systems  --->
  <*> FUSE (Filesystem in Userspace) support
  <*> Overlay filesystem support

Creamos este archivo /etc/modules-load.d/networking.conf y añadimos tun.

Configuramos los subuid y subgid al usuario que lo usará

Podman lo utilizará para mapear rangos de UID en los contenedores mediante espacios de nombres de usuario.

# usermod --add-subuids 200000-201000 --add-subgids 200000-201000 sincorchetes

Añadimos soporte CGroups V2 en el arranque

Editamos el archivo /etc/rc.conf y añadimos:

rc_controller_cgroups="YES"

Configuramos las USE flags

Usaremos estas USE flags:

app-containers/podman rootless fuse

Instalamos

# emerge --ask app-containers/crun app-containers/podman

Exponiendo los contenedores a la red local

Habilitamos el servicio:

# rc-update add cni-dhcp default
# rc-service cni-dhcp start

Añadimos la configuración de red /etc/cni/net.d/88-macvlan.conflist:

{
  "cniVersion": "0.4.0",
  "name": "macvlan",
  "plugins": [
    {
      "type": "macvlan",
      "master": "br0",
      "isGateway": true,
      "ipam": {
        "type": "dhcp"
      }
    },
    {
      "type": "portmap",
      "capabilities": {
        "portMappings": true
      }
    },
    {
      "type": "firewall"
    },
    {
      "type": "tuning"
    }
  ]
}

Creamos la interfaz br0 con NetworkManager

Para saber qué tarjetas tenemos y podemos utilizar:

nmcli dev

Haciendo bridging

br0-slave0: Añado la interfaz Ethernet cableada br0-slave1: Vinculo con la de Wireless.

nmcli con add type bridge con-name br0 ifname br0 ip4 10.0.0.3/24 gw4 10.0.0.1
nmcli con add type bridge-slave con-name br0-slave0 ifname enp3s0f1 master br0
nmcli con add type bridge-slave con-name br0-slave1 ifname wlp4s0 master br0
nmcli con up br0

Creamos la red

# podman pod create --name homeserver --network macvlan

Probamos

$ podman run -ti centos bash
[root@f0f1e1bb8d1b /]# cat /etc/os-release
NAME="CentOS Linux"
VERSION="8"
ID="centos"
ID_LIKE="rhel fedora"
VERSION_ID="8"
PLATFORM_ID="platform:el8"
PRETTY_NAME="CentOS Linux 8"
ANSI_COLOR="0;31"
CPE_NAME="cpe:/o:centos:centos:8"
HOME_URL="https://centos.org/"
BUG_REPORT_URL="https://bugs.centos.org/"
CENTOS_MANTISBT_PROJECT="CentOS-8"
CENTOS_MANTISBT_PROJECT_VERSION="8"

Fuentes

Gentoo - El arranque no pasa de Loading Linux...

Cuando estuve instalando Gentoo hace unas semanas, me di cuenta que cuando trataba de arrancar el kernel, la pantalla quedaba en "Loading Linux 5.11...", si bien el teclado respondía y el sistema no mostraba un comportamiento típico de kernel panic como los LEDs que parpadean o el cese de actividad en disco. Se me hacía raro.

Esto es debido a que faltaba el soporte de Frame Buffer, que es un dispositivo de tipo bloques que se crea en /dev con nombre fb0 y que permite mostrar textos, gráficos, mostrar logos en el arranque... por lo que es comprensible que no estuviera viendo nada.

Para resolverlo, compilamos el kernel con estas opciones:

Device drivers --->
  Graphics Support --->
    [M] Simple Frame Buffer Driver

Si usas EFI 1.1 o UEFI 2.0, habilita también:

Device drivers --->
  Graphics Support --->
    ---> Frame buffer Devices
      ---> Support for frame buffer devices
        [*] EFI-based Framebuffer Support

Fuente: Gento Forums

Instalando Doas en Gentoo

Doas es una alternativa a sudo, el comando más utilizado por la mayor parte de las distribuciones para obtener privilegios o para ejecutar determinados programas concretos.

Fue desarrollado por el equipo de OpenBSD, intenta ser minimalista y fácilmente entendible en su configuración. Tiene el 95% de características de sudo en una fracción de código base incrementado así la seguridad.

Instalando

Vamos habilitar el USE flag persist para poder hacer uso de esta opción en el /etc/doas.conf, esto nos permitirá poder ejecutar doas sin perdirnos cada 5 minutos la contraseña.

# mkdir /etc/portage/profile
# echo "-persist" > /etc/portage/profile/use.mask
# emerge --ask app-admin/doas

Configurando

Añadiendo nuestro usuario al grupo wheel

# gpasswd -a USUARIO wheel

Añadiendo la siguiente línea:

# echo "permit persist keepenv :wheel" > /etc/doas.conf

Ahora podemos probar a ejecutar algo:

doas cat /var/log/kern.log
doas (sincorchetes@basecamp) password:
doas ls

Veremos que nos solicita contraseña, si queremos dejar que nos pregunte siempre, quitamos persist.

El keepenv permite mantener las variables de entorno que tenemos en nuestro usuario.

Bonus, apagado, reinicio

Para reiniciar o apagar nuestro equipo con Doas, añadimos las siguientes líneas al fichero /etc/doas.conf:

permit nopass :wheel cmd poweroff
permit nopass :wheel cmd reboot

Con esto, cuando hagamos doas reboot o doas poweroff se apagará sin pedir contraseña.

Actualiza de Fedora 31 a Fedora 32

Si tienes Fedora 31 y estás tan desesperado por tener la nueva versión como yo, entonces te voy a guiar en esta senda oscura y pantanosa sobre cómo hacerlo.

Primeros pasos

Antes de ponernos hacer nada, actualizamos todo el sistema:

$ sudo dnf clean all
$ sudo dnf upgrade --refresh

Con estos procesos eliminamos paquetes viejos, informaciones que hayan en cache de los repositorios viejos...etc y actualizamos el software pendiente.

Reiniciamos el sistema por si tenemos algún kernel nuevo instalado:

$ sudo systemctl reboot

Instalamos este paquete:

$ sudo dnf install dnf-plugin-system-upgrade

Descargamos todos los nuevos paquetes de F32:

$ sudo dnf system-upgrade download --refresh --releasever=32 --allowerasing

Como Fedora 32 ha eliminado su soporte con Python 2.7, si no añades el parámetro --allowerasing y tienes GIMP instalado por ejemplo, te dará un error como este:

Problem: conflicting requests
  - nothing provides module(platform:f31) needed by module gimp:2.10:3120191106095052:f636be4b-0.x86_64
Error: 
 Problem: package python2-beautifulsoup4-4.9.0-1.fc31.noarch requires python2-lxml, but none of the providers can be installed
  - python2-lxml-4.4.0-1.fc31.x86_64 does not belong to a distupgrade repository
  - problem with installed package python2-beautifulsoup4-4.9.0-1.fc31.noarch
(try to add '--skip-broken' to skip uninstallable packages)

NOTA: ¿Por qué no usar --skip-broken? Porque se supone que Fedora 32 tiene todas las dependencias arregladas para que no se use Python 2.7, mantener instalado un paquete que ya no está mantenido es un problema de seguridad.

Una vez que lo ejecutemos nos aparecerá un mensaje como este:

Before you continue ensure that your system is fully upgraded by running "dnf --refresh upgrade". Do you want to continue [y/N]: 

Escribimos y y pulsamos Enter.

Se empezarán a refrescar los repositorios, nos avisará de que el módulo de GIMP u otro software que tenga Python 2.7 se eliminará y nos pide confirmación.

Total download size: 2.4 G
DNF will only download packages, install gpg keys, and check the transaction.
Is this ok [y/N]: 

Escribimos y y pulsamos Enter.

Este es un video ejemplo:

Cuando hayamos terminado ejecutamos: NOTA: El siguiente proceso va a demorarse bastante tiempo, tómate un café, una cerveza o haz palomitas. Si vas a actualizar un portátil, no te olvides de conectarlo a la corriente.

sudo dnf system-upgrade reboot

Adjunto algunas capturas de como va el proceso de instalación después de reiniciar el sistema. Yo al no utilizar plymouth ni decoros, es posible que veas más "bonita" la actualización.

Después de arrancar, comenzará a instalar actualizaciones:

Una vez que termine, te comunicará que reiniciará el sistema:

Este es el getor de arranque con el nuevo kernel instalado:

Y voilá ya tendremos SO:

Si experimentas algún problema, puedes revisar la sección de errores frecuentes de la documentación aquí.

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