{"id":3226,"date":"2024-12-10T21:40:57","date_gmt":"2024-12-10T21:40:57","guid":{"rendered":"https:\/\/blog.rastersoft.com\/?p=3226"},"modified":"2024-12-10T21:41:21","modified_gmt":"2024-12-10T21:41:21","slug":"sopa-boba","status":"publish","type":"post","link":"https:\/\/blog.rastersoft.com\/?p=3226","title":{"rendered":"Sopa boba"},"content":{"rendered":"\n<p>Recientemente descubr\u00ed un bug en la versi\u00f3n de la biblioteca <a href=\"https:\/\/wiki.gnome.org\/Projects\/libsoup\">libsoup<\/a> de <a href=\"https:\/\/www.raspberrypi.com\/software\/operating-systems\/\">Raspbian<\/a> y, por extensi\u00f3n, de <a href=\"https:\/\/www.debian.org\/releases\/bookworm\/\">Debian Bookworm<\/a>: si tenemos un servidor hecho con dicha biblioteca, cuando el cliente cierra una conexi\u00f3n, el servidor no cierra el <a href=\"https:\/\/en.wikipedia.org\/wiki\/Network_socket\">socket<\/a>. El resultado es que \u00e9ste se queda en estado CLOSE_WAIT para siempre (o, al menos, hasta que se reinicie el servidor), con lo que poco a poco se van consumiendo los posibles <a href=\"https:\/\/en.wikipedia.org\/wiki\/File_descriptor\">File Descriptors<\/a> hasta que llega un momento en el que ya no se pueden realizar ni aceptar m\u00e1s conexiones. Este bug est\u00e1 en la versi\u00f3n 3.2.2, que es la que lleva Debian Estable, pero fue corregido en la versi\u00f3n 3.3.0.<\/p>\n\n\n\n<p>Lo primero que hice fue <a href=\"https:\/\/bugs.debian.org\/cgi-bin\/bugreport.cgi?bug=1088985\">notificar el bug a Debian<\/a>, indicando adem\u00e1s el commit con el parche que lo soluciona. Pero dado que no sab\u00eda cuanto tiempo iban a tardar en aplicarlo, decid\u00ed buscar una soluci\u00f3n.<\/p>\n\n\n\n<p>Lo primero que pens\u00e9 fue en utilizar <a href=\"https:\/\/wiki.debian.org\/AptConfiguration\">pinning<\/a> para instalar la versi\u00f3n 3.6.1 disponible en <em>testing<\/em>; por desgracia, la actualizaci\u00f3n me obligaba a actualizar un mont\u00f3n m\u00e1s de paquetes, y no me quer\u00eda arriesgar a romper algo en mi Raspberry Pi.<\/p>\n\n\n\n<p>La segunda opci\u00f3n, que fue la que utilic\u00e9, consisti\u00f3 en compilar desde las fuentes la \u00faltima versi\u00f3n de libsoup e instalarla en <em>\/usr\/local<\/em>. Dado que este directorio tiene m\u00e1s prioridad que <em>\/usr<\/em>, se coger\u00eda primero mi versi\u00f3n.<\/p>\n\n\n\n<p>Lo que hice fue bajar el repositorio, cambiar a la versi\u00f3n, configurar el proyecto con <a href=\"https:\/\/mesonbuild.com\/\">meson<\/a>, compilarlo e instalarlo con <a href=\"https:\/\/ninja-build.org\/\">ninja<\/a>, y reconstruir la cach\u00e9 de bibliotecas:<\/p>\n\n\n\n<p class=\"mycode\">git clone https:\/\/gitlab.gnome.org\/GNOME\/libsoup.git<br>cd libsoup<br>git checkout 3.6.1<br>meson setup _build -Dtests=false -Ddocs=disabled -Dpkcs11_tests=disabled -Dsysprof=disabled -Ddoc_tests=false -Dvapi=enabled -Dintrospection=enabled<br>ninja -C _build<br>sudo ninja -C _build install<br>sudo ldconfig<\/p>\n\n\n\n<p>Y con esto y un reinicio del servidor, el problema qued\u00f3 resuelto.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Recientemente descubr\u00ed un bug en la versi\u00f3n de la biblioteca libsoup de Raspbian y, por extensi\u00f3n, de Debian Bookworm: si tenemos un servidor hecho con dicha biblioteca, cuando el cliente cierra una conexi\u00f3n, el servidor no cierra el socket. El resultado es que \u00e9ste se queda en estado CLOSE_WAIT para siempre (o, al menos, hasta &hellip; <a href=\"https:\/\/blog.rastersoft.com\/?p=3226\" class=\"more-link\">Seguir leyendo <span class=\"screen-reader-text\">Sopa boba<\/span> <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-3226","post","type-post","status-publish","format-standard","hentry","category-sin-categoria"],"_links":{"self":[{"href":"https:\/\/blog.rastersoft.com\/index.php?rest_route=\/wp\/v2\/posts\/3226","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\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.rastersoft.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=3226"}],"version-history":[{"count":4,"href":"https:\/\/blog.rastersoft.com\/index.php?rest_route=\/wp\/v2\/posts\/3226\/revisions"}],"predecessor-version":[{"id":3230,"href":"https:\/\/blog.rastersoft.com\/index.php?rest_route=\/wp\/v2\/posts\/3226\/revisions\/3230"}],"wp:attachment":[{"href":"https:\/\/blog.rastersoft.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=3226"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.rastersoft.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=3226"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.rastersoft.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=3226"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}