{"id":419,"date":"2024-05-07T15:30:55","date_gmt":"2024-05-07T13:30:55","guid":{"rendered":"https:\/\/pierre.porcheret.org\/?p=419"},"modified":"2024-05-07T15:31:27","modified_gmt":"2024-05-07T13:31:27","slug":"hype%c2%b2-public-release","status":"publish","type":"post","link":"https:\/\/pierre.porcheret.org\/en\/computer\/python\/419\/","title":{"rendered":"Hype\u00b2, public release !"},"content":{"rendered":"<h2 class=\"wp-block-heading\">New features<\/h2>\n\n\n\n<p>A big step had been done ! Now Hype\u00b2 allow managing some basic network. Indeed, you can now create a network with a dedicated DHCP and connect\/disconnect your VM in it.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">DNSMask<\/h3>\n\n\n\n<p>I was not planned to implement networking on my solution. But I spoke with some people to see what is important on Proxmox, Vmware or Xcp-ng for users, and finally a lot of people care about network !<\/p>\n\n\n\n<p>My goals were first to create interface and manage DHCP. Not easy, specially the DHCP part. I didn&rsquo;t want to touch or disturb the server where Hype\u00b2 is\/will be installed. But looking on my lab, I discorded that LXC use DNSmask in order to create DHCP for LXC. <\/p>\n\n\n\n<p>DNSmask is able to create easely a DHCP server just apply it on an interface, I manage the pid in a file in order to control the start and stop. All I had left to do was to create networks and interfaces.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Openvswicth<\/h3>\n\n\n\n<p>My first idea was to create and manage everything on python. But it&rsquo;s hard and if you want to go under the OSI 4 level, it&rsquo;s complicated.<\/p>\n\n\n\n<p>So I did, like everyone, I start using <a href=\"https:\/\/www.openvswitch.org\/\">Openvswitch<\/a>. It&rsquo;s a magic tool to create virtual network including VLAN and VLANX. But for the moment, let&rsquo;s do the beginning&#8230;create a network and manage it.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Libvirt interface<\/h3>\n\n\n\n<p>Something hard in libvirt, it that for some stuff such as the interface, all is manage on XML format. And that not the easiest way to manage. You have to find the correct filters and way to push it back when you did your modification. But once you understood the way it works&#8230; It not so hard&#8230;<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Reverse Proxy<\/h3>\n\n\n\n<p>I could, by rewriting all the code, integrate <a href=\"https:\/\/github.com\/cs01\/pyxtermjs\">Pyxterm <\/a>inside the application. Pyxterm is using Socketio library. After testing, I notice several constraints (Logs output, SSL implementation&#8230;)<\/p>\n\n\n\n<p>The best solution was to do this on Reverse Proxy level. It allows joining noVNC, Pyxterm and the application itself. <\/p>\n\n\n\n<p>So I implemented <a href=\"https:\/\/www.nginx.com\/\">Nginx <\/a>with a configuration for managing connections.<\/p>\n\n\n\n<p>Public release<\/p>\n\n\n\n<p>Now that all basic features in my point of view are working (manage VM and Containers, Network, Console&#8230;), It was time to give public access to my project. For this I pushed my code on a dedicated GitHub and create a Website.<\/p>\n\n\n\n<p>You can now see this project evolution on <a href=\"https:\/\/www.hype2.fr\">https:\/\/www.hype2.fr<\/a> and <a href=\"https:\/\/github.com\/pyhype2\/Hype2\">https:\/\/github.com\/pyhype2\/Hype2<\/a><\/p>\n\n\n\n<p>You will find the last version, a wiki for documentation etc&#8230;<\/p>","protected":false},"excerpt":{"rendered":"<p>New features A big step had been done ! Now Hype\u00b2 allow managing some basic network. Indeed, you can now create a network with a dedicated DHCP and connect\/disconnect your VM in it. DNSMask I was not planned to implement networking on my solution. But I spoke with some people [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":400,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"two_page_speed":[],"footnotes":""},"categories":[8,41,9,40],"tags":[46,44,31,45],"class_list":["post-419","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-computer","category-devops","category-linux","category-python","tag-libvirt","tag-lxc","tag-python","tag-qemu"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.3 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Hype\u00b2, public release ! -<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/pierre.porcheret.org\/en\/computer\/python\/419\/\" \/>\n<meta property=\"og:locale\" content=\"en_GB\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Hype\u00b2, public release ! -\" \/>\n<meta property=\"og:description\" content=\"New features A big step had been done ! Now Hype\u00b2 allow managing some basic network. Indeed, you can now create a network with a dedicated DHCP and connect\/disconnect your VM in it. DNSMask I was not planned to implement networking on my solution. But I spoke with some people [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/pierre.porcheret.org\/en\/computer\/python\/419\/\" \/>\n<meta property=\"article:published_time\" content=\"2024-05-07T13:30:55+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2024-05-07T13:31:27+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/pierre.porcheret.org\/wp-content\/uploads\/2023\/10\/hype2.dash_-1.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1880\" \/>\n\t<meta property=\"og:image:height\" content=\"892\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"pporcheret\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"pporcheret\" \/>\n\t<meta name=\"twitter:label2\" content=\"Estimated reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"3 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/pierre.porcheret.org\\\/computer\\\/python\\\/419\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/pierre.porcheret.org\\\/computer\\\/python\\\/419\\\/\"},\"author\":{\"name\":\"pporcheret\",\"@id\":\"https:\\\/\\\/pierre.porcheret.org\\\/#\\\/schema\\\/person\\\/7cf1070cb05adff1e5b95c7ca9b0dd52\"},\"headline\":\"Hype\u00b2, public release !\",\"datePublished\":\"2024-05-07T13:30:55+00:00\",\"dateModified\":\"2024-05-07T13:31:27+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/pierre.porcheret.org\\\/computer\\\/python\\\/419\\\/\"},\"wordCount\":423,\"commentCount\":0,\"image\":{\"@id\":\"https:\\\/\\\/pierre.porcheret.org\\\/computer\\\/python\\\/419\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/pierre.porcheret.org\\\/wp-content\\\/uploads\\\/2023\\\/10\\\/hype2.dash_-1.png\",\"keywords\":[\"Libvirt\",\"LXC\",\"Python\",\"Qemu\"],\"articleSection\":[\"Computer\",\"DevOps\",\"Linux\",\"Python\"],\"inLanguage\":\"en-GB\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/pierre.porcheret.org\\\/computer\\\/python\\\/419\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/pierre.porcheret.org\\\/computer\\\/python\\\/419\\\/\",\"url\":\"https:\\\/\\\/pierre.porcheret.org\\\/computer\\\/python\\\/419\\\/\",\"name\":\"Hype\u00b2, public release ! -\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/pierre.porcheret.org\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/pierre.porcheret.org\\\/computer\\\/python\\\/419\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/pierre.porcheret.org\\\/computer\\\/python\\\/419\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/pierre.porcheret.org\\\/wp-content\\\/uploads\\\/2023\\\/10\\\/hype2.dash_-1.png\",\"datePublished\":\"2024-05-07T13:30:55+00:00\",\"dateModified\":\"2024-05-07T13:31:27+00:00\",\"author\":{\"@id\":\"https:\\\/\\\/pierre.porcheret.org\\\/#\\\/schema\\\/person\\\/7cf1070cb05adff1e5b95c7ca9b0dd52\"},\"breadcrumb\":{\"@id\":\"https:\\\/\\\/pierre.porcheret.org\\\/computer\\\/python\\\/419\\\/#breadcrumb\"},\"inLanguage\":\"en-GB\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/pierre.porcheret.org\\\/computer\\\/python\\\/419\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-GB\",\"@id\":\"https:\\\/\\\/pierre.porcheret.org\\\/computer\\\/python\\\/419\\\/#primaryimage\",\"url\":\"https:\\\/\\\/pierre.porcheret.org\\\/wp-content\\\/uploads\\\/2023\\\/10\\\/hype2.dash_-1.png\",\"contentUrl\":\"https:\\\/\\\/pierre.porcheret.org\\\/wp-content\\\/uploads\\\/2023\\\/10\\\/hype2.dash_-1.png\",\"width\":1880,\"height\":892},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/pierre.porcheret.org\\\/computer\\\/python\\\/419\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Accueil\",\"item\":\"https:\\\/\\\/pierre.porcheret.org\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Hype\u00b2, public release !\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/pierre.porcheret.org\\\/#website\",\"url\":\"https:\\\/\\\/pierre.porcheret.org\\\/\",\"name\":\"\",\"description\":\"\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/pierre.porcheret.org\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-GB\"},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/pierre.porcheret.org\\\/#\\\/schema\\\/person\\\/7cf1070cb05adff1e5b95c7ca9b0dd52\",\"name\":\"pporcheret\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-GB\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/04949048b44501d434ac6a78cb6790e936aef0a9dce8f0cfcfd1cd9926f1ffb7?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/04949048b44501d434ac6a78cb6790e936aef0a9dce8f0cfcfd1cd9926f1ffb7?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/04949048b44501d434ac6a78cb6790e936aef0a9dce8f0cfcfd1cd9926f1ffb7?s=96&d=mm&r=g\",\"caption\":\"pporcheret\"},\"sameAs\":[\"https:\\\/\\\/pierre2.porcheret.org\"],\"url\":\"https:\\\/\\\/pierre.porcheret.org\\\/en\\\/author\\\/pporcheret\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Hype\u00b2, public release ! -","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/pierre.porcheret.org\/en\/computer\/python\/419\/","og_locale":"en_GB","og_type":"article","og_title":"Hype\u00b2, public release ! -","og_description":"New features A big step had been done ! Now Hype\u00b2 allow managing some basic network. Indeed, you can now create a network with a dedicated DHCP and connect\/disconnect your VM in it. DNSMask I was not planned to implement networking on my solution. But I spoke with some people [&hellip;]","og_url":"https:\/\/pierre.porcheret.org\/en\/computer\/python\/419\/","article_published_time":"2024-05-07T13:30:55+00:00","article_modified_time":"2024-05-07T13:31:27+00:00","og_image":[{"width":1880,"height":892,"url":"https:\/\/pierre.porcheret.org\/wp-content\/uploads\/2023\/10\/hype2.dash_-1.png","type":"image\/png"}],"author":"pporcheret","twitter_card":"summary_large_image","twitter_misc":{"Written by":"pporcheret","Estimated reading time":"3 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/pierre.porcheret.org\/computer\/python\/419\/#article","isPartOf":{"@id":"https:\/\/pierre.porcheret.org\/computer\/python\/419\/"},"author":{"name":"pporcheret","@id":"https:\/\/pierre.porcheret.org\/#\/schema\/person\/7cf1070cb05adff1e5b95c7ca9b0dd52"},"headline":"Hype\u00b2, public release !","datePublished":"2024-05-07T13:30:55+00:00","dateModified":"2024-05-07T13:31:27+00:00","mainEntityOfPage":{"@id":"https:\/\/pierre.porcheret.org\/computer\/python\/419\/"},"wordCount":423,"commentCount":0,"image":{"@id":"https:\/\/pierre.porcheret.org\/computer\/python\/419\/#primaryimage"},"thumbnailUrl":"https:\/\/pierre.porcheret.org\/wp-content\/uploads\/2023\/10\/hype2.dash_-1.png","keywords":["Libvirt","LXC","Python","Qemu"],"articleSection":["Computer","DevOps","Linux","Python"],"inLanguage":"en-GB","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/pierre.porcheret.org\/computer\/python\/419\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/pierre.porcheret.org\/computer\/python\/419\/","url":"https:\/\/pierre.porcheret.org\/computer\/python\/419\/","name":"Hype\u00b2, public release ! -","isPartOf":{"@id":"https:\/\/pierre.porcheret.org\/#website"},"primaryImageOfPage":{"@id":"https:\/\/pierre.porcheret.org\/computer\/python\/419\/#primaryimage"},"image":{"@id":"https:\/\/pierre.porcheret.org\/computer\/python\/419\/#primaryimage"},"thumbnailUrl":"https:\/\/pierre.porcheret.org\/wp-content\/uploads\/2023\/10\/hype2.dash_-1.png","datePublished":"2024-05-07T13:30:55+00:00","dateModified":"2024-05-07T13:31:27+00:00","author":{"@id":"https:\/\/pierre.porcheret.org\/#\/schema\/person\/7cf1070cb05adff1e5b95c7ca9b0dd52"},"breadcrumb":{"@id":"https:\/\/pierre.porcheret.org\/computer\/python\/419\/#breadcrumb"},"inLanguage":"en-GB","potentialAction":[{"@type":"ReadAction","target":["https:\/\/pierre.porcheret.org\/computer\/python\/419\/"]}]},{"@type":"ImageObject","inLanguage":"en-GB","@id":"https:\/\/pierre.porcheret.org\/computer\/python\/419\/#primaryimage","url":"https:\/\/pierre.porcheret.org\/wp-content\/uploads\/2023\/10\/hype2.dash_-1.png","contentUrl":"https:\/\/pierre.porcheret.org\/wp-content\/uploads\/2023\/10\/hype2.dash_-1.png","width":1880,"height":892},{"@type":"BreadcrumbList","@id":"https:\/\/pierre.porcheret.org\/computer\/python\/419\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Accueil","item":"https:\/\/pierre.porcheret.org\/"},{"@type":"ListItem","position":2,"name":"Hype\u00b2, public release !"}]},{"@type":"WebSite","@id":"https:\/\/pierre.porcheret.org\/#website","url":"https:\/\/pierre.porcheret.org\/","name":"","description":"","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/pierre.porcheret.org\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-GB"},{"@type":"Person","@id":"https:\/\/pierre.porcheret.org\/#\/schema\/person\/7cf1070cb05adff1e5b95c7ca9b0dd52","name":"pporcheret","image":{"@type":"ImageObject","inLanguage":"en-GB","@id":"https:\/\/secure.gravatar.com\/avatar\/04949048b44501d434ac6a78cb6790e936aef0a9dce8f0cfcfd1cd9926f1ffb7?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/04949048b44501d434ac6a78cb6790e936aef0a9dce8f0cfcfd1cd9926f1ffb7?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/04949048b44501d434ac6a78cb6790e936aef0a9dce8f0cfcfd1cd9926f1ffb7?s=96&d=mm&r=g","caption":"pporcheret"},"sameAs":["https:\/\/pierre2.porcheret.org"],"url":"https:\/\/pierre.porcheret.org\/en\/author\/pporcheret\/"}]}},"_links":{"self":[{"href":"https:\/\/pierre.porcheret.org\/en\/wp-json\/wp\/v2\/posts\/419","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/pierre.porcheret.org\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/pierre.porcheret.org\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/pierre.porcheret.org\/en\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/pierre.porcheret.org\/en\/wp-json\/wp\/v2\/comments?post=419"}],"version-history":[{"count":3,"href":"https:\/\/pierre.porcheret.org\/en\/wp-json\/wp\/v2\/posts\/419\/revisions"}],"predecessor-version":[{"id":423,"href":"https:\/\/pierre.porcheret.org\/en\/wp-json\/wp\/v2\/posts\/419\/revisions\/423"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/pierre.porcheret.org\/en\/wp-json\/wp\/v2\/media\/400"}],"wp:attachment":[{"href":"https:\/\/pierre.porcheret.org\/en\/wp-json\/wp\/v2\/media?parent=419"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/pierre.porcheret.org\/en\/wp-json\/wp\/v2\/categories?post=419"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/pierre.porcheret.org\/en\/wp-json\/wp\/v2\/tags?post=419"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}