15/09/2019

Crear un Registry Local en Huawei Cloud CCE CI/CD

Requisitos : Maquina dentro del mismo tenant con docker instalado

Instalar Docker

Debian/Ubuntu  #apt-get install -y docker-engineCentos/Rhel  #yum install -y docker-engine 

Habilitar docker desde el inicio

Systemctl #systemctl enable dockerService #service docker on

Este material es parte de una colección de entregas que se realizaran para poder gestionar y orquestar contenedores en Huawei Cloud

CCE : en un servicio de contenedores escalable y de alto rendimiento, ejecuta contenedores para alojar aplicaciones y gestionar ciclos de vida de contenedores orquestando todo con una capa de Kubernetes, uno de los sistemas mas maduros para contenedores docker.

Una forma de proporcionar estoscontenedores y capacidades de orquestación al cliente es a través de unallamada de «Servicios» Contenedor como servicio (CaaS).

Registry de docker (Adocker) : Un registro almacena las imágenes de docker. Docker hub es un registro público de contenedores que cualquiera puede usar.

En esta Guía crearemos un registry Local para consumir de forma mas eficiente los contenedores y poder crear imágenes personalizadas privadas, no exponiendo los registros de la empresa en un registry publico.

—- GUIA —-

1.- Entrar en la sección Cloud Container Engine (CCE) de Huawei Cloud (OTC)

Al ingresar a Cloud Container Engine, nos solicitara cargar el fichero de certificado, el cual encontramos en el apartado del usuario.

En la parte superior al costado derecho, encontraras la seccion de usuario

  • ingresar a credencial
  • claves de acceso y clickear en «Añadir clave de acceso», automáticamente te descargara al equipo un archivo de credenciales el cual se debe cargar en el registro de CCE. El contenido del archivo esta compuesto por el User Name, Acces Key Id, Secret Access Key. Este archivo se debe cargar tal cual en el registry de CCE.
  • Entrar nuevamente en CCE y clickear en panel de control/Cargar Fichero de Certificado

2.- Bajar el archivo de certificado local, este archivo se baja automáticamente a tu computador con el nombre dockercfg.txt y contiene los datos de conexión al registry local ejemplo:

3.- Revisión de la instalación de docker

#docker --version

4.- Crear directorio el cual contendrá las imágenes que serán importadas a nuestro registry local/privado

#mkdir -p ~/.docker#cd ~/.docker

5.- Creación del archivo de configuración

  • copiamos el contendido del archivo dockercfg.txt , descargado en el punto 2
  • creamos y pegamos el contenido en el archivo config.json
vim config.json{"auths":{"200.29.32.137:443":{"auth":"X2F1dGhfdG9rZW46MGZhMGI2NjVkMGU0NGZjZjhmOTdlYjI3N2FhMWI0YTMtR0ZBU01YVkRXVkM0S0FZTlpCOUstMjAyMDA5MTUxOT5YjRiNWUxNzVmMGNjMWVhYjU2NjNjYWMwNjYyNjViOTZkZjU4MmExNTMzYjg3OGY0ZGNhNmM5NWMxZGRiYw==","email":""}}}

6.- Editamos el archivo /usr/lib/systemd/system/docker.service, ubicamos la linea ExecStart= y agregar al final de la línea –insecure-registry 200.29.32.137:443

7.- Autenticar nuestra maquina contra el registro interno, se debe ejecutar echo -n y el codigo que nos entrego el archivo dockercfg.txt en el punto 2 | base64 d, al ejecutar este comando nos entregara el token de autenticacion que usaremos para loguearnos al registry interno.

#echo -n X2F1dGhfdG9rZW46MGZhMGI2NjVkMGU0NGZjZN2FhMWI0YTMtR0ZBU01YVkRXVkM0S0FZTlpCOUstMjAyMDA5MTUxOTU0MDItMzM5YjRiNWUxNzVmMGNjMWVhYjU2NjNjYWMwNjYyNjViOTZkZjU4MmExNTMzYjg3OGY0ZGNhNmM5NWMxZGRiYw== | base64 -d
[root@lockelabscluster-node-1 ~]# echo -n X2F1dGhfdG9rZW46MGZhMGI2NjVkMGU0NGZjZjhmOTdlYjI3N2FhMWI0YTMtR0ZBU01YVkRXVkM0S0FZTlpCOUstMjAyMDA5MTUxOTU0MDItMzM5YjNzVmMGNjMWVhYjU2NjNjYWMwNjYyNjViOTZkZjU4MmExNTMzYjg3OGY0ZGNhNmM5NWMxZGRiYw== | base64 -d_auth_token:0fa0b665d0e44fcf8f97eb277aa1b4a3-GFASMXVDWVC4KAYNZB9K-20200915195402-339b4b5e175f0cc1eab566366265b96df582a1533b878f4dca6c95c1ddbc[root@lockelabscluster-node-1 ~]#

8.- Loguearse contra el registry interno, para hacer este logueo ejecutaremos docker login -u _auth_token y el token que entrego la ejecucion del comando anterior 200.29.32.137:443, que es la dirección de nuestro registry

#docker login -u _auth_token -p 0fa0b665d0e44fcf8f97eb277aa1b4a3-GFASMXVDWVC4KAYNZB9K-20200915195402-339b4b5e175f0cc1eab566366265b96df582a1533b878f4dca6c95c1ddbc 200.29.32.137:443

9.- Con estos pasos ya tenemos registrado nuestro repositorio local de contenedores y podremos empezar a descargar y consumir desde el registry Privado/Local.

En este ejemplo bajara un contenedor con a ultima version de NGINX

  • Ingresar a la carpeta .docker
#cd ~/.docker
  • Bajar el contenedor en este caso NGINX
#docker pull nginx

10.- Subida del contenedor al registry local

  • Listar Imagenes
#docker images
  • crear la etiqueta TAG
    • docker tag images_id 200.29.32.137:443/domain_name/image_name:version
#docker tag ab56bba91343 200.29.32.137:443/poc_preventa/nginx:latest
  • cargar la imagen al registry
#docker push 200.29.32.137:443/poc_preventa/nginx:latest

11.- El contenedor ya puede ser consumido de forma interna desde Huawei Cloud(OTC), directamente de nuestro registry local

Proceso Terminado!!! con esta guía podrán crear sus propios repositorios locales almacenados privadamente y alterar las imágenes publicas sin poner en riesgo información sensible en las configuraciones y sin exponer datos a INET.

NOTA : Los registros fueron alterados apropósito por temas de seguridad

26/05/2019

Agrupación de redes Teaming (Examen RHCE)

Que es un Teaming de red ?

Un Teaming de red es, donde unimos dos o mas interfaces de red en una sola, aplicando diferentes “RUNNERS”, si viene cierto hace un tiempo hablamos de bond en el examen de certificación para RHCE se establecen comunicaciones de redundancia con teaming ya que esta basado en RHEL7.x y BOND estaba en el examen de certificación basado en RHEL6.x.

Modos de teaming :

  • broadcast: Corredor simple que dirige el dispositivo del equipo para transmitir paquetes a través de todos los puertos.
  • roundrobin: Corredor simple que dirige el dispositivo del equipo para transmitir paquetes de una manera round-robin.
  • activebackup: Vela por cambios de enlace y selecciona el puerto activo que se utilizará para las transferencias de datos.
  • loadbalance: Para hacer equilibrio de carga pasiva, el corredor sólo establece la función de hash BPF que determinará el puerto para la transmisión de paquetes. Para realizar un balanceo de carga activo, el corredor mueve los hashes entre los puertos disponibles intentando alcanzar el equilibrio perfecto.
  • lacp: Implementa el protocolo LACP 802.3ad. Puede usar las mismas posibilidades de selección de puertos Tx que el corredor de equilibrio de carga.

El labs y explicación  en su totalidad lo hare en un RHEL 7.4 bajo una maquina virtual con 3 tarjetas de red ens33, ens38, ens39. 

ens33 ==> 192.168.92.140

ens38 ==> sin configurar

ens39 ==> sin configurar

Manual y ayuda de teamd, mas toda la configuracion de sus runners.

para revisar el estado del bondig

man teamd.conf

Configuración del teaming :

Verificamos las tarjetas de red de nuestro sistema.

[root@server1 ~]# nmcli device sDISPOSITIVO  TIPO      ESTADO        CONEXIÓN virbr0       bridge    conectado     virbr0   ens33        ethernet  conectado     ens33    ens38        ethernet  desconectado  --       ens39        ethernet  desconectado  --       lo           loopback  sin gestión   --       virbr0-nic   tun       sin gestión   --     

Creare una agrupación con las interfaces ens38 y ens39

1.- Creación de la conexión teaming

[root@server1 ~]# nmcli connection add type team con-name team1 ifname team1 config '{"runner": {"name": "activebackup"}}'Conexión 'team1' (74f0a909-e90c-46df-ab88-8fb4ef3cb8d4) agregada con éxito.
  • nmcli connection add type team<== crea la conexión tipo team
  • con-name team1 <== asigna el nombre team1 a la conexión
  • ifname team1 <== asigna el nombre team1 para las interfaces
  • config ‘{«runner»: {«name»: «activebackup»}}‘ <== configura el runner en este caso activebackup

Revisión de la conexión

[root@server1 ~]# nmcli connection sNOMBRE  UUID                                  TIPO            DISPOSITIVO ens33   e2867aa2-97f5-4b60-8a40-cece480f3012  802-3-ethernet  ens33       team1   ba4313f5-7f9d-4370-b4ca-408502530519  team            team1 # esta es la conexion que acabamos de crear     virbr0  03c4ba37-11f4-4631-9bcb-c87f0ff88f6b  bridge          virbr0  

2.- Configuración de la IP

En este caso configuraremos una IP por IPV4

[root@server1 ~]# nmcli connection modify team1 ipv4.addresses 192.168.92.40/24[root@server1 ~]# nmcli connection modify team1 ipv4.method manual
  • nmcli connection modify team1 ipv4.addresses 192.168.92.40/24 <== establezco la IP : 192.168.92.40/24 al team1 que creamos anteriormente
  • nmcli connection modify team1 ipv4.method manual <== establezco método manual a la configuración

3.- Agregar las interfaces al teaming

[root@server1 ~]# nmcli connection add type team-slave con-name team1-slave1 ifname ens38 master team1Conexión 'team1-slave1' (f79e1ff7-086d-44f9-a916-1287437559a5) agregada con éxito.[root@server1 ~]# nmcli connection add type team-slave con-name team1-slave2 ifname ens39 master team1Conexión 'team1-slave2' (a206eb9d-c862-4a40-baa3-60bf3dbcb6fc) agregada con éxito.
  • nmcli connection add type team-slave <== crea la conexión tipo slave
  • con-name team1-slave1 <== establece el nombre para los slave en este caso el slave1 
  • ifname ens38 <== asigna la tarjeta ens38 al slave1
  • master team1 <== asocia la tarjeta a nuestro team1

los mismos pasos se realizan para la tarjeta ens39 cambiando el nombre del slave y el ifname

verificación

[root@server1 ~]# nmcli connection sNOMBRE        UUID                                  TIPO            DISPOSITIVO ens33         e2867aa2-97f5-4b60-8a40-cece480f3012  802-3-ethernet  ens33       team1         ba4313f5-7f9d-4370-b4ca-408502530519  team            team1       team1-slave1  f79e1ff7-086d-44f9-a916-1287437559a5  802-3-ethernet  ens38       team1-slave2  a206eb9d-c862-4a40-baa3-60bf3dbcb6fc  802-3-ethernet  ens39       virbr0        03c4ba37-11f4-4631-9bcb-c87f0ff88f6b  bridge          virbr0   

4.- Activar la conexión

Lo primero que debemos hacer es bajar la conexion del team

[root@server1 ~]# nmcli connection down team1La conexión 'team1' fue desactivada correctamente (ruta activa D-Bus: /org/freedesktop/NetworkManager/ActiveConnection/5)

Subimos las interfaces esclavas y revisamos nuevamente

[root@server1 ~]# nmcli connection up team1-slave1Conexión activada con éxito (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/8)[root@server1 ~]# nmcli connection up team1-slave2Conexión activada con éxito (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/10)[root@server1 ~]# ifconfig team1team1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500        inet 192.168.92.40  netmask 255.255.255.0  broadcast 192.168.92.255        inet6 fe80::6782:e164:e95c:5907  prefixlen 64  scopeid 0x20<link>        ether 0e:2f:58:30:3a:75  txqueuelen 1000  (Ethernet)        RX packets 3  bytes 234 (234.0 B)        RX errors 0  dropped 0  overruns 0  frame 0        TX packets 38  bytes 4693 (4.5 KiB)        TX errors 0  dropped 1 overruns 0  carrier 0  collisions 0

Tambien podemos ver la integridad del teaming con los comandos de teamdctl

[root@server1 ~]# teamdctl team1 statesetup:  runner: activebackup # tipo de runnerports:  ens38    link watches:      link summary: up      instance[link_watch_0]:        name: ethtool        link: up        down count: 0  ens39    link watches:      link summary: up      instance[link_watch_0]:        name: ethtool        link: up        down count: 0runner:  active port: ens38 # tarjeta activa
  • Podemos ver que el tipo de runner ==> runner: activebackup
  • Los port ==> ens38 ens39
  • El estado ==> up
  • Cual es el puerto activo actual ==> active port: ens38

Comprobar si la interfaz hace backup

Para realizar esta prueba podrías desconectar la tarjeta o simplremente bajar la interfaz que este activa en el teaming 

[rootserver1 ~]# nmcli connection down team1-slave1La conexión 'team1-slave1' fue desactivada correctamente (ruta activa D-Bus: /org/freedesktop/NetworkManager/ActiveConnection/8)[root@server1 ~]# nmcli connection sNOMBRE        UUID                                  TIPO            DISPOSITIVO ens33         e2867aa2-97f5-4b60-8a40-cece480f3012  802-3-ethernet  ens33       team1         ba4313f5-7f9d-4370-b4ca-408502530519  team            team1       team1-slave2  a206eb9d-c862-4a40-baa3-60bf3dbcb6fc  802-3-ethernet  ens39       virbr0        03c4ba37-11f4-4631-9bcb-c87f0ff88f6b  bridge          virbr0      team1-slave1  f79e1ff7-086d-44f9-a916-1287437559a5  802-3-ethernet  --         [root@server1 ~]# teamdctl team1 statesetup:  runner: activebackupports:  ens39    link watches:      link summary: up      instance[link_watch_0]:        name: ethtool        link: up        down count: 0runner:  active port: ens39

con esta prueba hemos bajado la interface ens38 y a levantado automáticamente la ens39 quedando como la port activa 

Ahora si volvemos a levantar la interface 1


[root@server1 ~]# nmcli connection up team1-slave1Conexión activada con éxito (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/11)[root@server1 ~]# teamdctl team1 statesetup:  runner: activebackupports:  ens38    link watches:      link summary: up      instance[link_watch_0]:        name: ethtool        link: up        down count: 0  ens39    link watches:      link summary: up      instance[link_watch_0]:        name: ethtool        link: up        down count: 0runner:  active port: ens39

Ambas tarjetas estan UP pero el activo sigue siendo la ens39, ahora si bajamos la interface2 deberia pasar la interface1 a activa

[root@server1 ~]# nmcli connection down team1-slave2La conexión 'team1-slave2' fue desactivada correctamente (ruta activa D-Bus: /org/freedesktop/NetworkManager/ActiveConnection/10)[root@server1 ~]# teamdctl team1 statesetup:  runner: activebackupports:  ens38    link watches:      link summary: up      instance[link_watch_0]:        name: ethtool        link: up        down count: 0runner:  active port: ens38

Volcado de la información del team

[root@server1 ~]# teamdctl team1 config dump{    "device": "team1",    "hwaddr": "0E:2F:58:30:3A:75",    "mcast_rejoin": {        "count": 1    },    "notify_peers": {        "count": 1    },    "ports": {        "ens38": {            "link_watch": {                "name": "ethtool"            }        },        "ens39": {            "link_watch": {                "name": "ethtool"            }        }    },    "runner": {        "name": "activebackup"    }}

Con todos estos pasos queda claro como funciona la agrupación de redes en modo teaming, solo deben llevarlo a sus consolas y realizar las pruebas.

02/02/2018

Como migrar un S.O no soportado a la nube

Esta guía la realizo por que ya muchos de los clientes con los que me topo diariamente quieren tomar sus sistemas operativos en VMDK subirlos a la nube y ejecutarlos!…( carita triste 🙁 ), pero muchas veces no resulta y se vuelve frustrante encontrarte con un error de IMS debido a que el mismo sistema lo rechaza.

Como solucionarlo?

La solucion es llevarte el vmdk a un servidor de pivote transformarlo en RAW con qemu, y con un DD cargarselo a un HDD con flag Booteable… FACIL!!!!

Manos a la Obra

Esta guia se realiza con lo siguiente

  • S.O : Kali Linux 2017.03 64bits
  • Maquina Pivote : ubuntu 16.04
  • Nube : Open Telefonica Cloud

1.- Crear la maquina virtual con el S.O que desees en este caso el Kali Linux y bajar el VMDK

2.- Subir el VMDK a un bucket

3.- Configurar el Servidor de pivote

3.1 configurar entorno

3.1.1 Actualizar en instalación de paquetes necesarios

linux@pivote2:~$ sudo -iroot@pivote2:~# apt update && apt install qemu pv

3.1.2 Agregar un 2do disco con un espacio suficiente para hacer los volcados y las conversiones

3.1.3 Adjuntar el disco a la maquina pivote2

El disco quedo montado en la maquina pivote en la unidad /dev/sdb

3.1.4 Formatear disco y montar

root@pivote2:~# fdisk /dev/xvdbWelcome to fdisk (util-linux 2.27.1).Changes will remain in memory only, until you decide to write them.Be careful before using the write command.Device does not contain a recognized partition table.Created a new DOS disklabel with disk identifier 0x36f72771.Command (m for help): nPartition type   p   primary (0 primary, 0 extended, 4 free)   e   extended (container for logical partitions)Select (default p): pPartition number (1-4, default 1): 1First sector (2048-419430399, default 2048): Last sector, +sectors or +size{K,M,G,T,P} (2048-419430399, default 419430399): Created a new partition 1 of type 'Linux' and of size 200 GiB.Command (m for help): wThe partition table has been altered.Calling ioctl() to re-read partition table.Syncing disks.root@pivote2:~# mkfs.ext4 /dev/xvdb1mke2fs 1.42.13 (17-May-2015)Creating filesystem with 52428544 4k blocks and 13107200 inodesFilesystem UUID: e19badee-0ec3-446b-86e7-86ce3a27eba0Superblock backups stored on blocks: 	32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208, 	4096000, 7962624, 11239424, 20480000, 23887872Allocating group tables: done                            Writing inode tables: done                            Creating journal (32768 blocks): doneWriting superblocks and filesystem accounting information: done     root@pivote2:~# mount /dev/xvdb1 /mnt/

3.2 Conversión del VMDK a formato RAW

Ingresar a la partición y descargar el VMDK desde el bucket.  Para poder descargar el archivo desde el bucket en OTC debes darle permisos públicos.  ACLARACIÓN, esta guía esta realizada en Open Telefonica Cloud, pero los bucket funcionan de la misma manera en cualquier otra nube con protocoles de f3fs (fuse).  ACLARACIÓN 2, si trabajan con linux puedes enviar la imagen del vmdk con un simple scp

descargando desde el bucket

3.2.1 dar los permisos necesarios al archivo para su descarga

root@pivote2:/# cd /mnt/root@pivote2:/mnt# wget https://obs.sa-chile-1.telefonicaopencloud.com/isos-implantacion/Debian_8.x_64-bit-disk1.vmdk

cargando con scp desde linux

root@localhost:/#scp machine.vmdk -i "keypair.pem" linux@ip:/mnt

3.2.2 Conversión

root@pivote2:/mnt# qemu-img convert -f vmdk -O raw Debian_8.x_64-bit-disk1.vmdk Debian_8.x_64-bit-disk1.raw

4.- Creación de la maquina que recepcionara la imagen

La idea es crear una maquina con un sistema operativo similar en este caso como es un kali linux y sus sistema base es un debian 8 crearemos una maquina con debian con un disco del mismo tamaño o superior que la maquina creada en  vmware o vbox.

5.- Separar el disco de la maquina creada y adjuntar en la maquina pivote

Apagar la maquina

Pinchar en la maquina y separar el disco

Adjuntar el disco a la maquina de pivote2

El disco fue montado en la maquina pivote2 en el dispositivo /dev/sdc Ya con esto estamos listos para el paso final que sera volcar la imagen del sistema operativo en el disco que adjuntamos.

6.- Volcado del disco RAW al HDD de la maquina oficial (es el dispositivo que montamos al final /dev/sdc)

root@pivote2:/mnt# fdisk -lDisk /dev/xvda: 40 GiB, 42949672960 bytes, 83886080 sectorsUnits: sectors of 1 * 512 = 512 bytesSector size (logical/physical): 512 bytes / 512 bytesI/O size (minimum/optimal): 512 bytes / 512 bytesDisklabel type: dosDisk identifier: 0x000dd30cDevice     Boot    Start      End  Sectors  Size Id Type/dev/xvda1          2048 81543167 81541120 38.9G 83 Linux/dev/xvda2      81545214 83884031  2338818  1.1G  5 Extended/dev/xvda5      81545216 83884031  2338816  1.1G 82 Linux swap / SolarisDisk /dev/xvdb: 200 GiB, 214748364800 bytes, 419430400 sectorsUnits: sectors of 1 * 512 = 512 bytesSector size (logical/physical): 512 bytes / 512 bytesI/O size (minimum/optimal): 512 bytes / 512 bytesDisklabel type: dosDisk identifier: 0x36f72771Device     Boot Start       End   Sectors  Size Id Type/dev/xvdb1       2048 419430399 419428352  200G 83 LinuxDisk /dev/xvdc: 40 GiB, 42949672960 bytes, 83886080 sectorsUnits: sectors of 1 * 512 = 512 bytesSector size (logical/physical): 512 bytes / 512 bytesI/O size (minimum/optimal): 512 bytes / 512 bytesDisklabel type: dosDisk identifier: 0xc1a0a37dDevice     Boot    Start      End  Sectors  Size Id Type/dev/xvdc1          2048 80383999 80381952 38.3G 83 Linux/dev/xvdc2      80386046 83884031  3497986  1.7G  5 Extended/dev/xvdc5      80386048 83884031  3497984  1.7G 82 Linux swap / Solaris

Volcar el RAW en /dev/xvdc

root@pivote2:/mnt# dd if=Debian_8.x_64-bit-disk1.raw bs=1024k | pv | dd of=/dev/xvdc bs=1024k20480+0 records in0.1MiB/s] [                                                                                     <=>                                                                                                                                                        ]20480+0 records out21474836480 bytes (21 GB, 20 GiB) copied, 218.923 s, 98.1 MB/s  20GiB 0:03:38 [93.5MiB/s] [                                                                                          <=>                                                                                                                                                   ]204+245961 records in204+245961 records out21474836480 bytes (21 GB, 20 GiB) copied, 234.763 s, 91.5 MB/s

7.- Separar el Dispositivo /dev/vdc de la maquina pivote2

al ser un disco anexo no es necesario apagar la maquina

Adjuntar Disco a maquina Kali-Linux-2017 creada

8.- Encender maquina

Este mismo procedimiento lo pueden realizar en cualquier NUBE…

HAPPY CLOUD AND HAPPY HACKING!!!

 

27/01/2018

Migración de Servidor con TAR

En esta guía realizaremos una migración entre dos servidores, con un procedimiento artesanal usado normalmente para pasar maquinas físicas a virtuales, en este caso trabajaremos con 2 VM montadas en VBox, y serán migradas con el comando TAR de linux.

  • VM 1 : Ubuntu 16.04 // HDD 10GB
  • VM 2 : Maquina sin sistema operativo // HDD 10GB
  • Adicional : Usaremos una imagen booteable del S.O finnix

Link de descarga

Ubuntu 16.04 server 64Bits

Finnix Linux 64Bits

Lo primero ser instalar nuestro servidor principal que se duplicara a uno nuevo, esta instalación se las dejare a ustedes ya que es una instalación común y corriente de linux que la pueden encontrar en cualquier vídeo de youtube.

Configuración VM1

Configuración VM2

Ahora Sacaremos la información Básica de la maquina origen para replicar en la maquina que se migrara.

1.- Instalación de SSH y habilitación de acceso root

apt installl sshsystemctl start service.ssh

Para habilitar el acceso de root, editaremos el archivo de configuración de ssh y modificaremos el parámetro PermitRootLogin

cambiamos la variable prohibit-password por el valor yes y reiniciamos ssh

systemctl restart service.ssh

Les dejo un pequeño código escrito por tecmint y modificado por mi para obtener la información que requerida para la migración

vim dumpOS.sh

Pegan el Contenido

#!/bin/bash##################################################################                                                               ##       Script de Volcado de informacion de S.O                 ##       Escrito Por Tecmint y Modificado por Jorge Romero       ##       Santiago de Chile 27-01-2018                            ##                                                               ################################################################### Limpieza de pantallaclear# Definicion de variablesreset=$(tput sgr0)os=$(uname -o)arch=$(uname -m)kernel=$(uname -r)# Sistema Operativoecho -e '\E[32m'"El tipo de sistema Operativo es :" $reset $os# Check OS Release Version and Namecat /etc/os-release | grep 'NAME\|VERSION' | grep -v 'VERSION_ID' | grep -v 'PRETTY_NAME' > /tmp/osreleaseecho -n -e '\E[32m'"Nombre del S.O :" $reset  && cat /tmp/osrelease | grep -v "VERSION" | cut -f2 -d\"echo -n -e '\E[32m'"Version del S.O :" $reset && cat /tmp/osrelease | grep -v "NAME" | cut -f2 -d\"# Check Architectureecho -e '\E[32m'"Architecture :" $reset $arch# Check Kernel Releaseecho -e '\E[32m'"Kernel Release :" $reset $kernel# Check hostnameecho -e '\E[32m'"Hostname :" $reset $HOSTNAME# Check RAM and SWAP Usagesfree -h | grep -v + > /tmp/ramcacheecho -e '\E[32m'"Ram Usada :" $resetcat /tmp/ramcache | grep -v "Swap"echo -e '\E[32m'"Swap Usada :" $resetcat /tmp/ramcache | grep -v "Mem"# Check Disk Usagesdf -h| grep 'Filesystem\|/dev/sda*' > /tmp/diskusageecho -e '\E[32m'"Discos Usados :" $reset cat /tmp/diskusagefdisk -l | grep "/dev"# Check Particiones LVMecho -e '\E[32m'"---- Particiones LVM ----"echo -e '\E[32m'"PV :" $reset && pvdisplay | grep "PV Name"echo -e '\E[32m'"VG :" $reset && vgdisplay | grep "VG Name"echo -e '\E[32m'"LV :" $reset && lvdisplay | grep "LV Path\|LV Name\|VG Name\|LV Size"# UUID particionesecho -e '\E[32m'"UUID :" $reset && blkid# Limpieza de temporalesrm /tmp/osrelease /tmp/ramcache /tmp/diskusage

Le dan permisos de ejecución y ejecutan

chmod +x dumpOS.sh./dumpOS.sh

2.- Ahora crearemos el Backup completo del S.O, en el caso de no tener espacio lo ideal seria hacerlo con un disco USB o por red, yo lo haré directo en la maquina

cd /tar -cvpzf backup.tar.gz --exclude=/backup.tar.gz --one-file-system /

Explicación :

tar = es el comando que crea el archivo del sistema comprimido. Se cambian los argumentos del archivo por cada letra que se le agrega al comando.

  • c = crear un nuevo archivo de copia de seguridad.
  • v = Modo verbose, muestra por pantalla lo que esta haciendo el comando
  • p = Conserva los permisos de los archivos originales
  • z = Comprimir el archivo en formato gzip para reducir su tamaño
  • f = (nombre del archivo) especifica donde se guardara el archivo
  • –exclude = Directorios a los cuales no se les realizara copia de seguridad
  • –one file-system = No incluir archivos en un sistema de archivos diferente. Si desea que otros sistemas de archivos, tal como un la partición /home o medios externos montados en /media o /mnt se copien hay que hacer copias de ellos por separado, u omitir esta bandera.  Si se omite, tendrá que añadir varios argumentos más a –exclude= para evitar los sistemas de ficheros que no se desean mover.  Estos serían /proc , /sys , /mnt , /media , /run y /dev directorios en la raíz. /proc y /sys sistemas de archivos virtuales que proporcionan ventanas en variables del núcleo por ejecución, por lo que no se requieren tratar como copia de seguridad al restaurarlos ya que son creados y eliminados de forma dinámica por udev, por lo que también no se requieren hacer copias de seguridad o restaurarlo. Del mismo modo,  /run es un tmpfs que mantiene las variables sobre el sistema de ejecución que no necesita una copia de seguridad.  Es importante recalcar que las exclusiones son recursivas, esto significa que cada directorio ubicado dentro también sera excluido.

3.- Armar el servidor donde volcaremos el sistema operativo

3.1 Iniciar la VM con el disco de finnix como boot

3.2 Establecer una password a root e iniciar ssh

passwd root/etc/init.d/ssh start

4.- Configurar las particiones

root@0:~# fdisk -lDisk /dev/loop0: 146 MiB, 153083904 bytes, 298992 sectorsUnits: sectors of 1 * 512 = 512 bytesSector size (logical/physical): 512 bytes / 512 bytesI/O size (minimum/optimal): 512 bytes / 512 bytesDisk /dev/sda: 10 GiB, 10737418240 bytes, 20971520 sectorsUnits: sectors of 1 * 512 = 512 bytesSector size (logical/physical): 512 bytes / 512 bytesI/O size (minimum/optimal): 512 bytes / 512 bytes

4.1 Creación de la partición de sistema

root@0:~# fdisk /dev/sdaWelcome to fdisk (util-linux 2.26.2).Changes will remain in memory only, until you decide to write them.Be careful before using the write command.Device does not contain a recognized partition table.Created a new DOS disklabel with disk identifier 0x5cc45e73.Command (m for help): nPartition type   p   primary (0 primary, 0 extended, 4 free)   e   extended (container for logical partitions)Select (default p): pPartition number (1-4, default 1): First sector (2048-20971519, default 2048): Last sector, +sectors or +size{K,M,G,T,P} (2048-20971519, default 20971519): +500MCreated a new partition 1 of type 'Linux' and of size 500 MiB.Command (m for help): tSelected partition 1Partition type (type L to list all types): aChanged type of partition 'Linux' to 'OS/2 Boot Manager'.Command (m for help): wThe partition table has been altered.Calling ioctl() to re-read partition table.Syncing disks.

4.2 Creación de la partición extendida para el LVM

root@0:~# fdisk /dev/sdaWelcome to fdisk (util-linux 2.26.2).Changes will remain in memory only, until you decide to write them.Be careful before using the write command.Command (m for help): nPartition type   p   primary (1 primary, 0 extended, 3 free)   e   extended (container for logical partitions)Select (default p): ePartition number (2-4, default 2): First sector (1026048-20971519, default 1026048): Last sector, +sectors or +size{K,M,G,T,P} (1026048-20971519, default 20971519): Created a new partition 2 of type 'Extended' and of size 9.5 GiB.Command (m for help): wThe partition table has been altered.Calling ioctl() to re-read partition table.Syncing disks.

4.3 Creación de la particicion LVM

root@0:~# fdisk /dev/sdaWelcome to fdisk (util-linux 2.26.2).Changes will remain in memory only, until you decide to write them.Be careful before using the write command.Command (m for help): nAll space for primary partitions is in use.Adding logical partition 5First sector (1028096-20971519, default 1028096): Last sector, +sectors or +size{K,M,G,T,P} (1028096-20971519, default 20971519): Created a new partition 5 of type 'Linux' and of size 9.5 GiB.Command (m for help): tPartition number (1,2,5, default 5): Partition type (type L to list all types): 8eChanged type of partition 'Linux' to 'Linux LVM'.Command (m for help): wThe partition table has been altered.Calling ioctl() to re-read partition table.Syncing disks.

4.4 Configurar el LVM

4.4.1 Creación del PV

root@0:~# pvcreate /dev/sda5  Physical volume "/dev/sda5" successfully created

4.4.2 Creación del VG

root@0:~# vgcreate ubuntuvm1-vg /dev/sda5  /proc/devices: No entry for device-mapper found  Volume group "ubuntuvm1-vg" successfully created

4.4.3 Creación de los volúmenes

root@0:~# lvcreate -L 8.50G -n root ubuntuvm1-vg  Logical volume "root" createdroot@0:~# lvcreate -l 100%FREE -n swap_1 ubuntuvm1-vg  Logical volume "swap_1" created

4.4.5 Formatear las particiones

root@0:~# mkfs.ext2 /dev/sda1mke2fs 1.42.13 (17-May-2015)Creating filesystem with 512000 1k blocks and 128016 inodesFilesystem UUID: 33454e21-4573-49b1-9a6f-cdef181da43cSuperblock backups stored on blocks: 	8193, 24577, 40961, 57345, 73729, 204801, 221185, 401409Allocating group tables: done                            Writing inode tables: done                            Writing superblocks and filesystem accounting information: done 
root@0:~# mkswap /dev/ubuntuvm1-vg/swap_1 Setting up swapspace version 1, size = 1 GiB (1082126336 bytes)no label, UUID=154ce276-63c4-4d27-81c3-73d457926900
root@0:~# mkfs.ext4 /dev/ubuntuvm1-vg/root mke2fs 1.42.13 (17-May-2015)Creating filesystem with 2228224 4k blocks and 557056 inodesFilesystem UUID: b993c07f-689e-4345-b612-5b5ba67ada72Superblock backups stored on blocks: 	32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632Allocating group tables: done                            Writing inode tables: done                            Creating journal (32768 blocks): doneWriting superblocks and filesystem accounting information: done 
root@0:~# blkid/dev/loop0: TYPE="squashfs"/dev/sr0: UUID="2015-05-31-17-50-05-00" LABEL="Finnix 111" TYPE="iso9660" PTUUID="6b8b4567" PTTYPE="dos"/dev/sda1: PARTUUID="5cc45e73-01"/dev/sda5: UUID="DptfSl-ScsF-9oO1-N4Ag-BD0f-GHrw-jQa0vk" TYPE="LVM2_member" PARTUUID="5cc45e73-05"/dev/mapper/ubuntuvm1--vg-root: UUID="b993c07f-689e-4345-b612-5b5ba67ada72" TYPE="ext4"/dev/mapper/ubuntuvm1--vg-swap_1: UUID="154ce276-63c4-4d27-81c3-73d457926900" TYPE="swap"

5.- Montar la partición root en la maquina destino

root@0:~# mount /dev/ubuntuvm1-vg/root /mnt/

6.- Copiar el backup desde la maquina origen a la maquina destino

root@ubuntuvm1:~# scp /backup.tar.gz root@192.168.0.17:/mntroot@192.168.0.17's password: backup.tar.gz

7.- Montar el disco de sistema en /mnt y crear la carpeta boot.  Maquina de destino

root@0:/# mkdir /mnt/boot && mount /dev/sda1 /mnt/boot

8.- Descomprimir el archivo de backup en /mnt/

cd /mnttar -xvpzf backup.tar.gz -C /mnt --numeric-owner

Explicación :

  • x =  Le dice a tar que extraiga el archivo designado
  • -C <directorio> = Esta opción le dice a tar que cambie a un directorio específico antes de extraerlo. En este ejemplo, estamos restaurando en el directorio de montaje (/mnt)
  • –numeric-owner = Esta opción le dice a tar que restaure los propietarios numéricos de los archivos en el archivo, en lugar de coincidir con los nombres de usuario en el entorno desde el que está restaurando. Esto se debe a que las identificaciones de usuario en el sistema que desea restaurar no coinciden necesariamente con el sistema que utiliza para restaurar (por ejemplo, cuando se restaura desde un liveCD).

9.- Creación de los directorios excluidos

cd /mnt && mkdir proc sys mnt media dev dev/pts

10.- Restaurar el GRUB

Desde el servidor origen sincronizar el directorio /boot

root@ubuntuvm1:# rsync -avp /boot/* root@192.168.0.17:/mnt/boot

Para que el sistema arranque, se debe restaurar GRUB, Para hacer esto necesitaremos reconfigurarlo en un chroot

root@0:/mnt# for i in /dev /dev/pts /proc /sys /run; do sudo mount -B $i /mnt$i; doneroot@0:~# chroot /mntroot@finnix:/# grub-install /dev/sdaInstalling for i386-pc platform.Installation finished. No error reported.root@finnix:/# exitexitroot@0:/mnt#

11.- Reconfigurar FSTAB

root@0:/mnt# blkid/dev/loop0: TYPE="squashfs"/dev/sr0: UUID="2015-05-31-17-50-05-00" LABEL="Finnix 111" TYPE="iso9660" PTUUID="6b8b4567" PTTYPE="dos"/dev/sda1: UUID="33454e21-4573-49b1-9a6f-cdef181da43c" TYPE="ext2" PARTUUID="5cc45e73-01"/dev/sda5: UUID="DptfSl-ScsF-9oO1-N4Ag-BD0f-GHrw-jQa0vk" TYPE="LVM2_member" PARTUUID="5cc45e73-05"/dev/mapper/ubuntuvm1--vg-root: UUID="b993c07f-689e-4345-b612-5b5ba67ada72" TYPE="ext4"/dev/mapper/ubuntuvm1--vg-swap_1: UUID="154ce276-63c4-4d27-81c3-73d457926900" TYPE="swap"
nano /mnt/etc/fstab

Cambiar el UUID del disco de boot

# /etc/fstab: static file system information.## Use 'blkid' to print the universally unique identifier for a# device; this may be used with UUID= as a more robust way to name devices# that works even if disks are added and removed. See fstab(5).## <file system> <mount point>   <type>  <options>       <dump>  <pass>/dev/mapper/ubuntuvm1--vg-root /               ext4    errors=remount-ro 0       1# /boot was on /dev/sda1 during installationUUID=33454e21-4573-49b1-9a6f-cdef181da43c /boot           ext2    defaults        0       2/dev/mapper/ubuntuvm1--vg-swap_1 none            swap    sw              0       0

12.- Apagar la maquina y desatachar el disco de finnix

13.- Iniciar la maquina

Maquina Migrada con éxito, espero que esta guía les sirva para mi fue complicado tuve que leer varias guías pero acá tienen la guía definitiva paso a paso… ÉXITO!! y que viva el código libre y el traspaso de los conocimiento adquirido con la experiencia.