{"id":98,"date":"2014-01-07T21:00:00","date_gmt":"2014-01-07T21:00:00","guid":{"rendered":"http:\/\/esferas.org\/msqlu\/2014\/01\/07\/paquetes-de-configuracion-debian\/"},"modified":"2016-03-22T11:23:40","modified_gmt":"2016-03-22T11:23:40","slug":"paquetes-de-configuracion-debian","status":"publish","type":"post","link":"https:\/\/esferas.org\/msqlu\/2014\/01\/07\/paquetes-de-configuracion-debian\/","title":{"rendered":"Paquetes de configuraci\u00f3n Debian: &#8230;"},"content":{"rendered":"<div class='__iawmlf-post-loop-links' style='display:none;' data-iawmlf-post-links='[{&quot;id&quot;:1233,&quot;href&quot;:&quot;http:\\\/\\\/debathena.mit.edu\\\/config-package-dev&quot;,&quot;archived_href&quot;:&quot;https:\\\/\\\/web-wp.archive.org\\\/web\\\/20260221000748\\\/https:\\\/\\\/debathena.mit.edu\\\/config-package-dev\\\/&quot;,&quot;redirect_href&quot;:&quot;https:\\\/\\\/debathena.mit.edu\\\/config-package-dev\\\/&quot;,&quot;checks&quot;:[],&quot;broken&quot;:false,&quot;last_checked&quot;:null,&quot;process&quot;:&quot;done&quot;},{&quot;id&quot;:1234,&quot;href&quot;:&quot;http:\\\/\\\/joeyh.name\\\/code\\\/debhelper&quot;,&quot;archived_href&quot;:&quot;https:\\\/\\\/web-wp.archive.org\\\/web\\\/20260415204409\\\/https:\\\/\\\/joeyh.name\\\/code\\\/debhelper\\\/&quot;,&quot;redirect_href&quot;:&quot;https:\\\/\\\/joeyh.name\\\/code\\\/debhelper&quot;,&quot;checks&quot;:[],&quot;broken&quot;:false,&quot;last_checked&quot;:null,&quot;process&quot;:&quot;done&quot;},{&quot;id&quot;:1235,&quot;href&quot;:&quot;https:\\\/\\\/perso.duckcorp.org\\\/duck\\\/cdbs-doc\\\/cdbs-doc.xhtml&quot;,&quot;archived_href&quot;:&quot;https:\\\/\\\/web-wp.archive.org\\\/web\\\/20081120091634\\\/http:\\\/\\\/perso.duckcorp.org\\\/duck\\\/cdbs-doc\\\/cdbs-doc.xhtml&quot;,&quot;redirect_href&quot;:&quot;&quot;,&quot;checks&quot;:[{&quot;date&quot;:&quot;2026-04-15 20:41:25&quot;,&quot;http_code&quot;:503}],&quot;broken&quot;:false,&quot;last_checked&quot;:{&quot;date&quot;:&quot;2026-04-15 20:41:25&quot;,&quot;http_code&quot;:503},&quot;process&quot;:&quot;done&quot;},{&quot;id&quot;:1236,&quot;href&quot;:&quot;https:\\\/\\\/wiki.debian.org\\\/Adding%20and%20removing%20diversions&quot;,&quot;archived_href&quot;:&quot;https:\\\/\\\/web-wp.archive.org\\\/web\\\/20190718050604\\\/https:\\\/\\\/wiki.debian.org\\\/Adding%20and%20removing%20diversions&quot;,&quot;redirect_href&quot;:&quot;&quot;,&quot;checks&quot;:[{&quot;date&quot;:&quot;2026-04-15 20:41:35&quot;,&quot;http_code&quot;:404}],&quot;broken&quot;:false,&quot;last_checked&quot;:{&quot;date&quot;:&quot;2026-04-15 20:41:35&quot;,&quot;http_code&quot;:404},&quot;process&quot;:&quot;done&quot;},{&quot;id&quot;:1237,&quot;href&quot;:&quot;http:\\\/\\\/debathena.mit.edu\\\/config-package-dev\\\/#usage&quot;,&quot;archived_href&quot;:&quot;https:\\\/\\\/web-wp.archive.org\\\/web\\\/20260221000748\\\/https:\\\/\\\/debathena.mit.edu\\\/config-package-dev\\\/&quot;,&quot;redirect_href&quot;:&quot;&quot;,&quot;checks&quot;:[{&quot;date&quot;:&quot;2026-04-15 20:41:38&quot;,&quot;http_code&quot;:200}],&quot;broken&quot;:false,&quot;last_checked&quot;:{&quot;date&quot;:&quot;2026-04-15 20:41:38&quot;,&quot;http_code&quot;:200},&quot;process&quot;:&quot;done&quot;}]'><\/div>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"mt-image-left\" style=\"float: left; margin: 0 20px 20px 0;\" src=\"https:\/\/esferas.org\/mt\/msqlu\/logos\/openlogo-100.png\" alt=\"debian-logo\" width=\"100\" height=\"123\" \/>&#8230; no son tan complicados y es un tema ya resuelto. Menos mal.<\/p>\n<p><!--more--><\/p>\n<p>En los paquetes Debian que creo en mi lugar de trabajo me he ido encontrando con un problema menor que se est\u00e1 desmadrando: los archivos de configuraci\u00f3n de otros paquetes.<\/p>\n<p>Resulta que construyo un paquete para configurar, pongamos, las estad\u00edsticas web en la intranet de la empresa. Necesito que se instale <em>awstats<\/em> con una configuraci\u00f3n muy concreta y varios otros archivos auxiliares m\u00e1s. Lo primero es muy sencillo: declaro <em>awstats<\/em> como dependencia de mi paquete y listo. Lo segundo es m\u00e1s complicado. Si defino en mi paquete el archivo de configuraci\u00f3n de <em>awstats<\/em> como propio, para incluir mi versi\u00f3n, <em>dpkg<\/em> no me dejar\u00e1 instalarlo porque el archivo en cuesti\u00f3n, <em>\/etc\/awstats\/awstats.conf.local,<\/em> pertenece a <em>awstats<\/em> y no hay m\u00e1s que negociar. S\u00ed, se puede forzar la instalaci\u00f3n hasta cierto punto, pero no es eso precisamente lo que quiero.<\/p>\n<p>La primera vez que me encontr\u00e9 con este problema lo vi f\u00e1cil. A\u00f1ado mi versi\u00f3n del archivo a un directorio de datos del paquete como <em>\/usr\/share\/empresa\/config\/awstats.conf.local<\/em> y en la configuraci\u00f3n lo sobrescribo por las bravas. Problema resuelto y problema a\u00f1adido: cada vez que mi paquete se actualice instalar\u00e1 la versi\u00f3n inclu\u00edda por las bravas. \u00bf Y las posibles modificaciones locales ? Ignoradas y arrasadas. Debian no me preguntar\u00e1 nunca si quiero conservar la versi\u00f3n modificada localmente porque no sabr\u00e1 que mi paquete realiza tal modificaci\u00f3n.<\/p>\n<p>No, as\u00ed tampoco. Ingeni\u00e9 y a\u00f1ad\u00ed un mecanismo r\u00e1pido y sucio para paliar \u00e9sto en lo posible: en la construcci\u00f3n del paquete calcular\u00eda una suma MD5 del archivo de configuraci\u00f3n que incluir\u00eda en el paquete y que servir\u00eda para que en la configuraci\u00f3n del mismo ignorase su instalaci\u00f3n si coincid\u00eda con ella. Y bueno, est\u00e1 funcionando pero no resulta muy c\u00f3modo, ni de mantener ni de usar.<\/p>\n<p>Estaba seguro de que ten\u00eda que existir otra forma de hacerlo en Debian. No pod\u00eda ser el \u00fanico que se encontrase con un problema similar. Hace unos d\u00edas me puse en serio a buscarlo y termin\u00e9 por encontrar en el paquete <a href=\"http:\/\/debathena.mit.edu\/config-package-dev\/\">config-package-dev<\/a> la soluci\u00f3n que creo m\u00e1s civilizada.<\/p>\n<h3>Paquetes de configuraci\u00f3n en Debian<\/h3>\n<p><em>config-package-dev<\/em> es una extensi\u00f3n de <a href=\"http:\/\/joeyh.name\/code\/debhelper\/\">Debhelper <\/a>y un juego de m\u00f3dulos de <a href=\"https:\/\/perso.duckcorp.org\/duck\/cdbs-doc\/cdbs-doc.xhtml\">CDBS<\/a>. Est\u00e1 dise\u00f1ado para indicar formalmente en un paquete que operaciones realiza con archivos de configuraci\u00f3n de terceros, de manera que sea c\u00f3modo instalar tu propia versi\u00f3n, modificarla localmente y eliminarla -recuperando la original- cuando el paquete sea borrado. Emplea, como no pod\u00eda ser otra cosa, el sistema de desv\u00edo de componentes de Debian llamado <a href=\"https:\/\/wiki.debian.org\/Adding%20and%20removing%20diversions\">dpkg-diversion<\/a>.<\/p>\n<p>Define tres operaciones a realizar con los archivos de configuraci\u00f3n de terceros:<\/p>\n<ol>\n<li><strong>displace<\/strong> (desplazar) para mover un archivo y emplear un reemplazo.<\/li>\n<li><strong>transform<\/strong> (transformar) que consiste en reutilizar el contenido tras modificarlo.<\/li>\n<li><strong>hide<\/strong> (ocultar) que desv\u00eda el archivo de manera que <em>desaparece<\/em> del sistema.<\/li>\n<\/ol>\n<p>Para utilizarlo es necesario seguir estos pasos:<\/p>\n<ol>\n<li>Declarar el paquete <em>config-package-dev<\/em> como dependencia en la construcci\u00f3n de nuestro paquete.<\/li>\n<li>A\u00f1adir las directivas <em>Provides<\/em> y <em>Conflicts<\/em> correspondientes (se pueden ver m\u00e1s abajo)<\/li>\n<li>Indicar al programa <em>dh<\/em> que lo tenga en cuenta.<\/li>\n<li>Declarar los archivos y las operaciones dentro del propio directorio <em>debian\/ <\/em>.<\/li>\n<\/ol>\n<p>El primer punto se resuelve con la siguiente estrofa en el archivo <em>debian\/control<\/em>:<\/p>\n<pre class=\"\">Source<span style=\"color: #808030;\">:<\/span> empresa<span style=\"color: #808030;\">-<\/span>sigfrido\r\nSection<span style=\"color: #808030;\">:<\/span> admin\r\nPriority<span style=\"color: #808030;\">:<\/span> extra\r\nMaintainer<span style=\"color: #808030;\">:<\/span> Victor Moral <span style=\"color: #0000e6;\">&lt;<\/span><span style=\"color: #7144c4;\">victor@empresa.net<\/span><span style=\"color: #0000e6;\">&gt;<\/span>\r\nBuild<span style=\"color: #808030;\">-<\/span>Depends<span style=\"color: #808030;\">:<\/span> debhelper <span style=\"color: #808030;\">(<\/span><span style=\"color: #808030;\">&gt;<\/span><span style=\"color: #808030;\">=<\/span> <span style=\"color: #008c00;\">8.0<\/span><span style=\"color: #008c00;\">.0<\/span><span style=\"color: #808030;\">)<\/span><span style=\"color: #808030;\">,<\/span> config<span style=\"color: #808030;\">-<\/span>package<span style=\"color: #808030;\">-<\/span>dev (&gt;= 5.0)\r\nStandards<span style=\"color: #808030;\">-<\/span>Version<span style=\"color: #808030;\">:<\/span> <span style=\"color: #008c00;\">3.9<\/span><span style=\"color: #008c00;\">.4<\/span>\r\n\r\nPackage<span style=\"color: #808030;\">:<\/span> empresa<span style=\"color: #808030;\">-<\/span>sigfrido\r\nArchitecture<span style=\"color: #808030;\">:<\/span> all\r\nProvides<span style=\"color: #808030;\">:<\/span> $<span style=\"color: #808030;\">{<\/span>diverted<span style=\"color: #808030;\">-<\/span>files<span style=\"color: #808030;\">}<\/span>\r\nConflicts<span style=\"color: #808030;\">:<\/span> $<span style=\"color: #808030;\">{<\/span>diverted<span style=\"color: #808030;\">-<\/span>files<span style=\"color: #808030;\">}<\/span>\r\nPre<span style=\"color: #808030;\">-<\/span>Depends<span style=\"color: #808030;\">:<\/span> empresa<span style=\"color: #808030;\">-<\/span>common<span style=\"color: #808030;\">,<\/span> rsync\r\nDepends<span style=\"color: #808030;\">:<\/span> $<span style=\"color: #808030;\">{<\/span>shlibs<span style=\"color: #808030;\">:<\/span>Depends<span style=\"color: #808030;\">}<\/span><span style=\"color: #808030;\">,<\/span> $<span style=\"color: #808030;\">{<\/span>misc<span style=\"color: #808030;\">:<\/span>Depends<span style=\"color: #808030;\">}<\/span><span style=\"color: #808030;\">,<\/span> awstats<span style=\"color: #808030;\">,<\/span> impresor\r\n<\/pre>\n<p style=\"color: #696969;\">El segundo consiste en a\u00f1adir \u00e9sto a <em>debian\/rules<\/em>:<\/p>\n<pre>#<span style=\"color: #808030;\">!<\/span><span style=\"color: #808030;\">\/<\/span>usr<span style=\"color: #808030;\">\/<\/span>bin<span style=\"color: #808030;\">\/<\/span>make <span style=\"color: #808030;\">-<\/span>f\r\n\r\n# Uncomment this to turn on verbose mode<span style=\"color: #808030;\">.<\/span>\r\n#export DH<span style=\"color: #808030;\">_<\/span>VERBOSE<span style=\"color: #808030;\">=<\/span><span style=\"color: #008c00;\">1<\/span>\r\n\r\n<span style=\"color: #808030;\">%<\/span><span style=\"color: #808030;\">:<\/span>\r\n    dh $@ <span style=\"color: #808030;\">-<\/span><span style=\"color: #808030;\">-<\/span>with<span style=\"color: #808030;\">=<\/span>config<span style=\"color: #808030;\">-<\/span>package\r\n<\/pre>\n<p style=\"color: #696969;\">y es el tercer punto el que merece alguna explicaci\u00f3n m\u00e1s detallada.<\/p>\n<h3 style=\"color: #696969;\">Declarando archivos de configuraci\u00f3n<\/h3>\n<p>Para declarar los archivos de configuraci\u00f3n y su manipulaci\u00f3n final en el paquete que estamos construyendo necesitamos trabajar sobre el directorio <em>debian\/<\/em> . En \u00e9l vamos a inscribir los archivos con la nomenclatura <em>paquete.operacion<\/em> de tal manera que los archivos que vayan a ser desplazados estar\u00e1n declarados en <em>paquete.displace<\/em>, los que sufrir\u00e1n alg\u00fan cambio en <em>paquete.transform<\/em> y los que ser\u00e1n ocultados en <em>paquete.hide<\/em>. Hay otras variantes y para eso es mejor consultar la <a href=\"http:\/\/debathena.mit.edu\/config-package-dev\/#usage\">documentaci\u00f3n<\/a> directamente.<\/p>\n<p>El funcionamiento de <em>config-package-dev<\/em> consiste en a\u00f1adir unas cuantas funciones <em>bash<\/em> al final de nuestros scripts <em>postinst<\/em><em>,\u00a0<\/em><em>postrm<\/em> y dem\u00e1s que realizar\u00e1n las operaciones con estos archivos en la parte final de la instalaci\u00f3n. Ojo, estas funciones se a\u00f1adir\u00e1n a los scripts en la l\u00ednea que reza <em>#DEBHELPER#<\/em>: no hay l\u00ednea, no hay funciones.<\/p>\n<p>Ahora bien, \u00bf qu\u00e9 es lo que tengo que hacer para que mis archivos de configuraci\u00f3n reemplacen ordenadamente a los del paquete que voy a configurar ? Pues depende de lo que pretendamos que sea el resultado final, pero antes conviene aclarar qu\u00e9 es el t\u00e9rmino <em>extensi\u00f3n<\/em> que menciono m\u00e1s adelante.<\/p>\n<p>Los scripts del paquete <em>config-package-dev<\/em> utilizan una extensi\u00f3n en los archivos con los que trabajan que se obtiene del nombre del paquete. De forma predeterminada se toma la primera palabra antes de un gui\u00f3n y puede cambiarse pero si lo hacemos no termina de funcionar en las posteriores actualizaciones. Por ejemplo en el paquete <em>empresa-printers-pdf<\/em> la extensi\u00f3n que se utiliza es <em>empresa<\/em>.<\/p>\n<p>Ahora veamos los pasos a seguir:<\/p>\n<ol>\n<li>Para <strong>reemplazar<\/strong> el archivo de configuraci\u00f3n con nuestra versi\u00f3n:\n<ol>\n<li>Creamos nuestra copia del archivo con una extensi\u00f3n que hemos mencionado en el ejemplo para distinguirlos del original: <em>\/etc\/awstats\/awstats.local.empresa<\/em>.<\/li>\n<li>Lo a\u00f1adimos a\u00a0<em>debian\/paquete.install<\/em> porque <em>config-package-dev<\/em> no instala por su cuenta y es necesario hacerlo aparte.<\/li>\n<li>Registramos el archivo en\u00a0<em>debian\/paquete.displace<\/em> en una \u00fanica l\u00ednea y con la ruta final en el sistema instalado. Por ejemplo <em>\/etc\/awstats\/awstats.local.empresa.<\/em> Si, lo declaramos <strong>tambi\u00e9n con la extensi\u00f3n<\/strong>, ya que <em>config-package-dev<\/em> crear\u00e1 un enlace con el nombre sin dicha extensi\u00f3n y todo quedar\u00e1 igual.<\/li>\n<\/ol>\n<\/li>\n<li>Para <strong>parchear<\/strong> el archivo de configuraci\u00f3n original bastar\u00e1 con declararlo en el archivo <em>debian\/paquete.transform<\/em> junto con el procedimiento de modificaci\u00f3n. M\u00e1s abajo ampl\u00edo \u00e9sto.<\/li>\n<li>Para <strong>ocultar<\/strong> el archivo de configuraci\u00f3n original \u00e9ste tendr\u00e1 que ir en <em>debian\/paquete.hide<\/em> y la instalaci\u00f3n se encargar\u00e1 de situarlo en un directorio del sistema para que no se pierda su pista (esto es, ya no estar\u00e1 bajo <em>\/etc)<\/em>.<\/li>\n<\/ol>\n<h4>Sustituyendo la configuraci\u00f3n original<\/h4>\n<p>Tomando como ejemplo el de <em>\/etc\/awstats\/awstats.local<\/em> tras la instalaci\u00f3n correcta de nuestro paquete tendremos lo siguiente:<\/p>\n<pre class=\"\">\/etc\/awstats\/awstats.local -&gt; \/etc\/awstasts\/awstats.local.empresa\r\n\/etc\/awstats\/awstats.local.empresa\r\n\/etc\/awstats\/awstats.local-orig<\/pre>\n<p>El archivo original se conservar\u00e1 en la versi\u00f3n con extensi\u00f3n <em>-orig<\/em> y se crear\u00e1 un enlace al nuestro empleando <em>dpkg-divert<\/em> por lo que se puede emplear tambi\u00e9n en archivos binarios sin preocuparse de posteriores actualizaciones del paquete original.<\/p>\n<h4>Parcheando archivos de configuraci\u00f3n<\/h4>\n<p>En el caso de los archivos resultantes de una transformaci\u00f3n de otros (<em>debian\/paquete.transform<\/em>) la s\u00edntaxis del archivo es un poco diferente.<\/p>\n<p>Adem\u00e1s de indicar la ruta final como en el archivo <em>debian\/paquete.displace<\/em> debemos a\u00f1adir el m\u00e9todo para obtener el resultado final en forma de una orden simple de un\u00a0<em>shell<\/em> o haciendo referencia a un ejecutable que creamos tambi\u00e9n en el directorio <em>debian\/.<\/em><\/p>\n<p>Esto significa que nuestro paquete <strong>no llevar\u00e1 consigo<\/strong> los archivos de configuraci\u00f3n ya que su contenido se obtiene de la aplicaci\u00f3n del filtro que le hemos indicado, con su entrada est\u00e1ndar redirigida desde el archivo original y su salida est\u00e1ndar hacia el archivo con el nombre que hemos indicado. Despu\u00e9s, una vez que el filtro termina sin fallos, realiza las mismas operaciones que con los archivos desplazados de <em>debian\/paquete.displace<\/em>.<\/p>\n<p>Como ejemplo voy a poner el del paquete <em>cups-pdf<\/em> en el caso de que quisi\u00e9ramos a\u00f1adir un filtro de posprocesado tal y como se indica en la configuraci\u00f3n. La directiva utilizada es <em>PostProcessing<\/em> por lo que la l\u00ednea deber\u00eda quedar as\u00ed<\/p>\n<pre class=\"\"><em>PostProcessing<\/em> \/usr\/bin\/myfilter<\/pre>\n<p>y para ello podemos emplear lo siguiente en el archivo <em>debian\/package.transform<\/em><\/p>\n<pre class=\"\">\/etc\/cups\/cups-pdf.conf.empresa perl -0pe 's|PostProcessing|PostProcessing \/usr\/bin\/myfilter|g or die '<\/pre>\n<p>Esto es, le indicamos que tomando como fuente nuestra versi\u00f3n de <em>cups-pdf.conf\u00a0 <\/em>la procese mediante un filtro <em>Perl<\/em> y lo que se obtenga se use como contenido de <em>cups-pdf.conf<\/em>. Bueno, en realidad ser\u00e1 el contenido de <em>cups-pdf.conf.empresa<\/em> que luego se utilizar\u00e1 para sustituir al original. Primero se transforma el archivo y luego se sustituye de forma segura.<\/p>\n<h4>Ocultando archivos<\/h4>\n<p>En ocasiones necesitamos que un archivo de configuraci\u00f3n desaparezca tras la instalaci\u00f3n. \u00bf Por qu\u00e9 ? El ejemplo del directorio <em>\/etc\/cron.d<\/em> es adecuado porque se utilizan todos los archivos que se encuentren en \u00e9l sin excluirlos por la extensi\u00f3n o por alg\u00fan indicativo en el nombre.<\/p>\n<p>Otra posibilidad son aquellos programas que s\u00f3lo act\u00faan si tienen configuraci\u00f3n en un archivo; no son muchos pero algunos me he encontrado. Es m\u00e1s, he constru\u00eddo algunos bas\u00e1ndose en eso como el programa de <a href=\"http:\/\/esferas.org\/msqlu\/2016\/03\/14\/bds-backup-de-sistema\/\">copias de seguridad con attic. <\/a><\/p>\n<p>As\u00ed que dado que los archivos tienen que desaparecer <em>config-package-dev<\/em> lo mueve ordenadamente (con <em>dpkg-divert<\/em>) al directorio <em>\/usr\/share\/<\/em><em>package<\/em> (siendo <em>package<\/em> el nombre de tu paquete no uno gen\u00e9rico) sustituyendo los car\u00e1cteres de separaci\u00f3n de directorios (la barra) con una secuencia de signos m\u00e1s (++).<\/p>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>&#8230; no son tan complicados y es un tema ya resuelto. Menos mal.<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_import_markdown_pro_load_document_selector":0,"_import_markdown_pro_submit_text_textarea":"","webmentions_disabled_pings":false,"webmentions_disabled":false,"footnotes":""},"categories":[6],"tags":[166,22],"class_list":["post-98","post","type-post","status-publish","format-standard","hentry","category-debian","tag-config-package-dev","tag-configuracion"],"_links":{"self":[{"href":"https:\/\/esferas.org\/msqlu\/wp-json\/wp\/v2\/posts\/98","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/esferas.org\/msqlu\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/esferas.org\/msqlu\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/esferas.org\/msqlu\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/esferas.org\/msqlu\/wp-json\/wp\/v2\/comments?post=98"}],"version-history":[{"count":0,"href":"https:\/\/esferas.org\/msqlu\/wp-json\/wp\/v2\/posts\/98\/revisions"}],"wp:attachment":[{"href":"https:\/\/esferas.org\/msqlu\/wp-json\/wp\/v2\/media?parent=98"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/esferas.org\/msqlu\/wp-json\/wp\/v2\/categories?post=98"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/esferas.org\/msqlu\/wp-json\/wp\/v2\/tags?post=98"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}