{"id":1938,"date":"2016-05-22T22:27:37","date_gmt":"2016-05-22T22:27:37","guid":{"rendered":"http:\/\/blog.rastersoft.com\/?p=1938"},"modified":"2016-05-22T22:27:37","modified_gmt":"2016-05-22T22:27:37","slug":"multipackager-mas-rapido","status":"publish","type":"post","link":"https:\/\/blog.rastersoft.com\/?p=1938","title":{"rendered":"Multipackager m\u00e1s r\u00e1pido"},"content":{"rendered":"<p>He lanzado una nueva versi\u00f3n de <a href=\"http:\/\/www.rastersoft.com\/programas\/multipackager_es.html\">Multipackager<\/a> con una interesante novedad: ahora es much\u00edsimo m\u00e1s r\u00e1pido. Para ello utilizo <a href=\"https:\/\/en.wikipedia.org\/wiki\/OverlayFS\">OverlayFS<\/a>.<\/p>\n<p>Para entender por qu\u00e9 es as\u00ed, cabe explicar que cada vez que se utiliza por primera vez un sistema operativo concreto (por ejemplo: debian jessie i386), multipackager genera dos copias: una para construir paquetes, y otra para lanzar shells.<\/p>\n<p>Hasta aqu\u00ed nada especial. Sin embargo, la copia para construir paquetes no se utiliza nunca directamente. Cuando se va a construir uno, lo primero que se hace es sacar una copia de dicha copia, y s\u00f3lo entonces se instalan los paquetes necesarios para crear el paquete. Si todo va bien se borra la copia vieja, y ya tenemos la m\u00e1quina original con nuevos paquetes; si algo falla, se borra la copia nueva y se restaura la vieja. As\u00ed nunca se queda un sistema \u00aba medias\u00bb. Por \u00faltimo\u00a0se hace una nueva copia para crear, esta vez s\u00ed, dentro de ella el nuevo paquete. Esta copia se destruye una vez que se ha terminado la generaci\u00f3n.<\/p>\n<p>Este sistema permite garantizar que las copias locales de cada sistema operativo est\u00e1n siempre \u00absanas\u00bb, lo que evita tener que generar una nueva completa cada vez que queramos crear un paquete. El inconveniente es que sacar cada copia lleva MUCHO tiempo. Y lo que es peor: a medida que se instalan m\u00e1s y m\u00e1s paquetes, la copia tarda m\u00e1s y m\u00e1s.<\/p>\n<p>La soluci\u00f3n consisti\u00f3 en no hacer copias, sino utilizar OverlayFS para poder realizar las operaciones sin modificar la m\u00e1quina original. Esta operativa es inmediata en el segundo caso, cuando queremos construir el paquete en una m\u00e1quina que se borrar\u00e1 cuando se termine. Sin embargo, para el primer caso tuve que rascarme un poco la cabeza, pues si la operaci\u00f3n de instalar paquetes termina correctamente es necesario \u00abaplicar los cambios\u00bb sobre la m\u00e1quina virtual original. Esta operaci\u00f3n, afortunadamente, no es muy complicada.<\/p>\n<p>El resultado es que los tiempos para generar los distintos paquetes se han reducido en un orden de magnitud, lo que no est\u00e1 nada mal, teniendo en cuenta que actualmente estoy generando entre seis y ocho paquetes por programa (debian, ubuntu, fedora y arch, cada una en 32 y 64 bits).<\/p>\n","protected":false},"excerpt":{"rendered":"<p>He lanzado una nueva versi\u00f3n de Multipackager con una interesante novedad: ahora es much\u00edsimo m\u00e1s r\u00e1pido. Para ello utilizo OverlayFS. Para entender por qu\u00e9 es as\u00ed, cabe explicar que cada vez que se utiliza por primera vez un sistema operativo concreto (por ejemplo: debian jessie i386), multipackager genera dos copias: una para construir paquetes, y &hellip; <a href=\"https:\/\/blog.rastersoft.com\/?p=1938\" class=\"more-link\">Seguir leyendo <span class=\"screen-reader-text\">Multipackager m\u00e1s r\u00e1pido<\/span> <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[3],"tags":[],"class_list":["post-1938","post","type-post","status-publish","format-standard","hentry","category-nueva-version"],"_links":{"self":[{"href":"https:\/\/blog.rastersoft.com\/index.php?rest_route=\/wp\/v2\/posts\/1938","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blog.rastersoft.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.rastersoft.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.rastersoft.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.rastersoft.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=1938"}],"version-history":[{"count":1,"href":"https:\/\/blog.rastersoft.com\/index.php?rest_route=\/wp\/v2\/posts\/1938\/revisions"}],"predecessor-version":[{"id":1939,"href":"https:\/\/blog.rastersoft.com\/index.php?rest_route=\/wp\/v2\/posts\/1938\/revisions\/1939"}],"wp:attachment":[{"href":"https:\/\/blog.rastersoft.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1938"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.rastersoft.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=1938"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.rastersoft.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=1938"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}