# Isard-Repository Updates hay un servidor de updates: ssh root@isardvdi.com -p 9022 . Hay un repositorio para toda esta parte que está en https://gitlab.com/isard/www-repository-server Hay una base de datos rethink, un isard-repository (python flask) y un nginx delante y otro haproxy delante del nginx? ``` 4ab3083ebfe5 rethinkdb "rethinkdb --bind all" 2 weeks ago Up 2 weeks 0.0.0.0:8080->8080/tcp, 0.0.0.0:28015->28015/tcp, 29015/tcp db 428dc45b45d7 www-repository-server_haproxy "docker-entrypoint.s…" 4 weeks ago Up 4 weeks 0.0.0.0:80->80/tcp, 0.0.0.0:443->443/tcp, 0.0.0.0:5050->5050/tcp haproxy a81bf240013e www-repository-server_isard-repository "python3 start.py" 4 weeks ago Up 2 weeks isard-repository ec0c0f0b5b6e www-repository-server_nginx "/docker-entrypoint.…" 4 weeks ago Up 4 weeks 80/tcp nginx a9720af1c834 hashicorp/boundary:0.7.1 "docker-entrypoint.s…" 9 months ago Up 9 months 9200/tcp, 9202/tcp, 0.0.0.0:9201->9201/tcp boundary-controller 0398ce1ed06b storage-tests_nginx "/docker-entrypoint.…" 13 months ago Up 9 months 0.0.0.0:1314->80/tcp storage-tests-nginx ``` Ojo que nos quedemos sin espacio. Ahora quedan 272GB cuando arranca el contenedor isard-repository ves lo que ha detectado en las tablas # Estructura En **/opt/isardvdi-data/isard-repository/storage** hay un directorio por cada tipo de media Para los dominios se ha de descargar el diccionario y el nuevo dominio En interface, graphics no hay nada, pero en vídeo tenemos los diccionario de vídeo pero como yaml. # Ejemplo de nuevo vídeo: En el directorio de videos /opt/isardvdi-data/isard-repository/storage/videos: cp qxl32.yaml qxl64.yaml #modificamos lo que queramos ### Medias para descargar Pueden ser de dos tipos, simplemente yamls con url web desde donde descargar, o pueden ser Ejemplo de url para descargar: Fedora-Workstation-Live.yaml ``` kind : iso id : Fedora-Workstation-Live-x86_64-29-1.2 name : Fedora Workstation Live x86_64 29 1.2 description : Download from website icon : fa-circle-o url-isard : false url-web: https://download.fedoraproject.org/pub/fedora/linux/releases/29/Workstation/x86_64/iso/Fedora-Workstation-Live-x86_64-29-1.2.iso hypervisors_pools: - default allowed: roles: false categories: false groups: false users: false ``` Aquí se busca la iso dentro isard por el url_isard y allí es donde se descarga ``` root@web /opt/isardvdi-data/isard-repository/storage/media # cat virtio_win10_x64_20190313.yaml kind : iso id : virtio_win10_x64_20190313 name : Virtio ISO drivers only Windows 10 x64 0.1.164 default-virtio-iso: true description : windows virtio drivers as ISO image to use in windows 10 x64 install icon : fa-circle-o url-isard : virtio_win10_x64_20190313.iso url-web : false hypervisors_pools: - default allowed: roles: false categories: false groups: false users: false ``` Si queremos que vaya en private se ha de poner en private_media Hay que actualizar cada media de tipo url externa por cosas que vayan y revisar que van ### Virt-install Actualizar los xmls que ofrece el paquete virt-install. Recomendamos hacerlo desde el último fedora: https://gitlab.com/isard/www-repository-server/-/blob/master/UPGRADE_VIRT_INSTALLS.md Copiamos desde ese fedora a /tmp/xmls los ficheros que genera. Una vez en el servidor de updates nos llevamos esos xmls a la carpeta que toca ``` mv /opt/isardvdi-data/isard-repository/storage/virt_install/xmls /opt/isardvdi-data/isard-repository/storage/virt_install/xmls_old mkdir /opt/isardvdi-data/isard-repository/storage/virt_install/xmls mv /tmp/xmls/*.xml /opt/isardvdi-data/isard-repository/storage/virt_install/xmls/ mv /tmp/osinfo.txt /opt/isardvdi-data/isard-repository/storage/virt_install/ ``` #### Custom virt-intall Para los xmls que nosotros hemos preparado, sobre todo para los windows con virtio... El script pilla lo que hay de custom_osinfo.txt, busca el shortID dentro de la carpeta y ha de coincidir que exita. Por ejemplo si queremos añadir el windws11 hay que editar una nueva lína la línea ``` root@web /opt/isardvdi-data/isard-repository/storage/virt_install # cat custom_osinfo.txt │··· Short ID | Name | Version | ID │··· ----------------------+----------------------------------------------------+----------+----------------------------------------- │··· win7Virtio | Microsoft windows 7 with Virtio devices | 6.1 | http://microsoft.com/win/7 │··· win10VirtioUEFI | Microsoft windows 10 with Virtio devices UEFI | 10.0 | http://microsoft.com/win/10 │··· pepitogrillo | Do not download this one | 1.1 | https://isardvdi.com ``` Hemos insertado una línea pepitogrillo y debe existir el pepitogrillo.xml en el directorio custom_xmls Después de cambiar la línea y tener el xml hacemos un restart de docker ``` docker restart isard-repository ``` Y al arrancar podemos ver si los ha ledio con un log del docker (docker logs isard-repository): ``` 2022/09/06 10:54:33 91 - INFO - MainThread: Checking table registrations │··· 2022/09/06 10:54:33 105 - INFO - MainThread: Database up and populated. Resources webapp running on port 5050. │··· 2022/09/06 10:54:33 717 - INFO - MainThread: ---> LOADED: 12 resources from table media │··· 2022/09/06 10:54:33 717 - INFO - MainThread: ---> LOADED: 8 resources from table domains │··· 2022/09/06 10:54:33 717 - INFO - MainThread: ---> LOADED: 2 resources from table builders │··· 2022/09/06 10:54:33 717 - INFO - MainThread: ---> LOADED: 35 resources from table virt_builder │··· 2022/09/06 10:54:33 717 - INFO - MainThread: ---> LOADED: 765 resources from table virt_install │··· 2022/09/06 10:54:33 718 - INFO - MainThread: ---> LOADED: 3 resources from table videos │··· 2022/09/06 10:54:33 718 - INFO - MainThread: ---> LOADED: 3 resources from table viewers │··· 2022/09/06 10:54:33 771 - INFO - MainThread: ---> LOADED private_domains: 3 resources from table private_domains ``` ## Qcows Todos los ficheros qcow2 tienen que tener su yaml asociado, sino no se visualizan y ocupan espacio sin necesidad Un yaml que se corresponde con una entrada en el diccionario domain. Para hacer una entrada nueva lo recomendable es coger uno que ya exista, por ejemplo debian9.yml y se copuia a win11.yml ``` cp debian9.yaml win11.yaml ``` Importante hay que pegar el contenido del xml que quieras en el campo xml y modificar name, id y que haya coherencia Para descargarlo, el nombre del fichero ha de ser el que dice esta entrada del yaml, que para que tenga coherencia : ``` url-isard : debian_9_5_0.qcow2 ``` Los yamls que hay en En private_domains sólo hay yamls y estos sólo se cargan cuando añadimos en el isard-cliente en config... Los qcows privates y públicos comparten el directorio /opt/isardvdi-data/isard-repository/storage/domains Y los yamls están en un directorio según sean públicos y privado Y para los media debería ir igual (pero no va) ### En python3 activate_private_docnloads ## Cómo convertir un json a yaml ``` In [1]: import json,yaml In [2]: s_json = """{ ...: ...: "allowed": { ...: "categories": false , ...: "groups": false , ...: "roles": [ ...: "admin" ...: ] , ...: "users": false ...: } , ...: "description": "QXL 32MB" , ...: "heads": 1 , ...: "id": "qxl32" , ...: "model": "qxl" , ...: "name": "QXL 32MB" , ...: "ram": 32768 , ...: "vram": 32768 ...: ...: }""" In [3]: d = json.loads(s_json) In [4]: print(yaml.dump(d)) allowed: categories: false groups: false roles: - admin users: false description: QXL 32MB heads: 1 id: qxl32 model: qxl name: QXL 32MB ram: 32768 vram: 32768 ``` # Conocer las ips y los registros Para mapear el rethink sin tener el puerto abierto en el server: ``` ssh`tusuario@isardvdi.com -p 9022 -L 8080:localhost:8080 `` ` Entonces te vas a http://localhost:8080 y accedes al db Tenemos una tabla de registration, se autoregistra y cogemos su ip (para luego poderla geolocalizar), el último acceso que hizo y el identificador que se queda en la tabla de config de israd en cada instalación ``` r.db("resources").table("registrations") ``` Con esta consulta puedes sacar las ips desde donde se conectan las instalaciones ``` r.db("resources").table("registrations").pluck("ip")("ip").distinct() ``` script para sacar la info geolocalizada: ``` ``` l = ['2.35.111.234', '90.175.240.92', '90.175.255.162', '80.37.32.103', '90.175.242.223', '90.175.240.92', '90.175.255.162', '90.175.240.92', '90.175.255.162', '80.37.32.103', '89.118.117.175', '64.103.40.26', '90.175.255.162', '178.139.73.230', '184.105.178.72', '37.223.124.39', '90.71.181.100', '90.175.255.162', '80.37.32.103', '64.103.40.17', '90.175.255.162', '77.209.171.232', '80.37.32.103', '80.37.32.103', '90.175.240.92', '106.14.201.114', '79.62.35.162', '90.71.181.100', '90.175.255.162', '88.23.251.99', '90.175.255.162', '2.35.111.234', '37.223.124.39', '77.210.246.129', '2.35.111.234', '80.37.32.103', '178.139.73.230', '62.83.148.228', '203.154.47.81', '90.71.181.100', '90.175.255.162', '62.83.148.228', '62.83.148.228', '90.175.242.223', '91.144.172.117', '88.23.248.102', '80.37.32.103', '90.175.255.162', '64.103.40.18', '2.35.111.234', '90.175.240.92', '90.175.255.162', '203.154.59.27', '24.154.117.149', '136.243.197.10', '64.103.40.22', '88.23.251.99', '90.175.255.162', '88.23.251.99', '80.37.32.103', '85.53.56.68', '79.62.35.162', '62.83.148.228', '90.175.242.223', '79.150.40.192', '37.223.124.39', '177.72.120.10', '90.175.255.162', '90.175.240.92', '62.83.148.228', '151.216.139.14', '80.37.32.103', '80.37.32.103', '2.35.111.234', '62.83.148.228', '2.35.111.234', '90.175.255.162', '90.175.255.162', '80.37.32.103', '159.89.206.157', '203.154.89.108', '80.37.32.103', '110.87.123.118', '62.83.148.228', '37.223.124.39', '85.53.56.68', '88.23.250.196', '37.223.124.39', '62.83.148.228', '90.175.240.92', '90.175.255.162', '87.164.31.82', '80.37.32.103', '81.37.77.156', '62.83.148.228', '90.175.255.162', '90.175.255.162', '90.175.255.162', '62.83.148.228', '24.154.117.149', '90.175.240.92', '90.175.255.162', '88.23.248.102', '90.175.242.223', '90.175.240.92', '80.37.32.103', '90.175.242.223', '37.223.124.39', '37.223.124.39', '90.175.240.92', '37.223.124.39', '2.35.111.234', '112.91.128.50', '73.252.198.196', '90.175.240.92', '185.157.12.66', '109.254.86.82', '80.37.32.103', '2.35.111.234', '90.175.242.223', '80.37.32.103', '62.83.148.228', '80.37.32.103', '37.223.118.191', '80.37.32.103', '90.175.240.92', '90.175.255.162', '141.135.49.31', '80.37.32.103', '90.175.255.162', '88.23.250.196', '37.223.124.39', '80.37.32.103', '90.175.255.162', '157.88.125.179', '62.83.148.228', '90.175.255.162', '203.154.158.158', '90.175.255.162', '90.175.240.92', '90.175.255.162', '37.223.124.39', '37.223.124.39', '77.210.246.129', '93.176.167.27', '37.223.124.39', '90.175.255.162', '24.154.3.82', '80.37.32.103', '2.35.111.234', '203.154.59.27', '90.175.255.162', '90.175.240.92', '58.246.194.226', '37.223.124.39', '81.242.129.106', '80.37.32.103', '64.103.40.26', '90.175.242.223', '80.37.32.103', '2.35.111.234', '64.103.40.17', '88.23.250.196', '88.23.251.99', '80.37.32.103', '80.37.32.103', '90.175.255.162', '62.83.148.228', '77.210.246.129', '62.83.148.228', '90.175.255.162', '138.38.56.167', '85.53.56.68', '62.83.148.228', '90.175.255.162', '90.175.255.162', '88.23.251.99', '90.175.240.92', '37.223.124.39', '24.154.3.82', '203.154.59.26', '88.23.251.99', '88.23.248.102', '90.175.255.162', '80.37.32.103', '90.175.255.162', '88.23.251.99', '90.175.242.223', '24.154.117.149', '37.223.124.39', '62.83.148.228', '88.23.251.99', '90.175.255.162', '178.128.185.77', '203.150.51.45', '62.83.148.228', '90.175.242.223', '90.175.255.162', '62.83.148.228', '62.83.148.228', '203.154.89.108', '77.210.246.129', '90.175.255.162', '62.83.148.228', '80.37.32.103', '203.154.59.14', '88.23.251.99', '59.38.63.0', '64.103.40.29', '90.175.255.162', '80.37.32.103', '90.175.242.223', '91.144.172.117', '80.37.32.103', '90.175.240.92', '80.37.32.103', '136.243.197.10', '2.35.111.234', '90.175.255.162', '24.154.117.149', '37.223.124.39', '90.175.240.92', '62.83.148.228', '77.210.246.129', '90.175.240.92', '37.223.124.39', '64.103.40.28', '2.35.111.234', '80.37.32.103', '88.23.251.99', '90.175.240.92', '37.223.124.39', '62.83.148.228', '157.88.125.176', '77.209.171.232', '90.175.242.223', '90.175.255.162', '157.88.125.179', '90.175.240.92', '80.37.32.103', '109.128.83.196', '90.175.255.162', '37.223.124.39', '62.83.148.228', '90.71.181.100', '80.37.32.103', '62.83.148.228', '88.23.250.196', '37.223.124.39', '84.73.125.174', '88.23.251.99', '109.128.83.196', '90.175.240.92', '90.175.242.223', '113.140.248.64', '62.83.148.228', '80.37.32.103', '71.219.77.92', '81.37.77.156', '80.37.32.103', '88.23.251.99', '90.175.255.162', '64.103.40.27', '62.83.148.228', '37.223.124.39', '62.83.148.228', '24.154.117.149', '90.175.255.162', '80.37.32.103', '90.175.240.92', '90.175.242.223', '64.103.40.25', '88.23.251.99', '90.175.242.223', '62.83.148.228', '64.103.40.18', '85.53.56.68', '64.103.40.25', '90.175.255.162', '64.103.40.21', '80.37.32.103', '90.175.240.92', '90.175.255.162', '80.37.32.103', '90.175.240.92', '62.83.148.228', '90.175.242.223', '62.83.148.228', '80.37.32.103', '62.83.148.228', '93.156.61.207', '90.175.240.92', '62.83.148.228', '64.103.40.21', '80.37.32.103', '90.175.240.92', '13.231.230.58', '90.175.255.162', '80.37.32.103', '77.210.246.129', '88.23.251.51', '62.83.148.228', '80.37.32.103', '80.37.32.103', '85.53.56.68', '88.23.250.196', '80.37.32.103', '90.175.255.162', '106.14.201.114', '80.37.32.103', '64.103.40.28', '90.175.255.162', '62.83.148.228', '113.140.248.64', '80.37.32.103', '90.175.255.162', '24.154.117.149', '80.37.32.103', '90.175.255.162', '37.223.124.39', '80.37.32.103', '90.175.255.162', '80.37.32.103', '64.103.40.18', '90.175.242.223', '90.175.240.92', '64.103.40.27', '24.154.117.149', '90.175.240.92', '62.83.148.228', '90.175.240.92', '85.53.56.68', '62.83.148.228', '64.103.40.26', '90.175.240.92', '90.175.255.162', '62.83.148.228', '80.37.32.103', '80.37.32.103', '37.223.124.39', '24.154.3.82', '106.14.201.114', '62.83.148.228', '64.103.40.17', '37.223.118.191', '62.83.148.228', '64.103.40.26', '90.175.255.162', '62.83.148.228', '106.14.201.114', '80.37.32.103', '110.87.123.118', '90.175.255.162', '62.83.148.228', '90.175.255.162', '80.37.32.103', '80.37.32.103', '90.175.255.162', '64.103.40.30', '90.175.240.92', '62.83.148.228', '90.175.240.92', '90.175.240.92'] from pprint import pprint from collections import Counter from geolite2 import geolite2 reader = geolite2.reader() l_geo = [reader.get(a) for a in l] d_countries = dict(Counter([a['country']['names']['es'] for a in l_geo])) l_countries = [(k,v) for k,v in d_countries.items()] pprint(sorted(l_countries, key = lambda i: i[1],reverse=True) ) d_cities = dict(Counter([(a['country']['names']['es'],a['city']['names']['en'] if a.get('city',False) else 'Unknown') for a in l_geo])) l_cities = [(k,v) for k,v in d_cities.items()] pprint(sorted(l_cities, key = lambda i: i[0][0])) ```