<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type="text/xsl" href="../assets/xml/rss.xsl" media="all"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Linux Sin Humo (Publicaciones sobre herramientas)</title><link>https://sergiobelkin.com/</link><description></description><atom:link href="https://sergiobelkin.com/categories/cat_herramientas.xml" rel="self" type="application/rss+xml"></atom:link><language>es</language><copyright>Contents © 2026 &lt;a href="mailto:sebelk@gmail.com"&gt;sebelk&lt;/a&gt; 
&lt;a rel="license" href="https://creativecommons.org/licenses/by-nc-sa/4.0/"&gt;
&lt;img alt="Creative Commons License BY-NC-SA"
style="border-width:0; margin-bottom:12px;"
src="https://i.creativecommons.org/l/by-nc-sa/4.0/88x31.png"&gt;&lt;/a&gt;
</copyright><lastBuildDate>Sun, 19 Apr 2026 00:13:29 GMT</lastBuildDate><generator>Nikola (getnikola.com)</generator><docs>http://blogs.law.harvard.edu/tech/rss</docs><item><title>Qué son los cgroups y para qué sirven</title><link>https://sergiobelkin.com/posts/que-son-los-cgroups-y-para-que-sirven/</link><dc:creator>sebelk</dc:creator><description>&lt;div style="float: left; margin-right: 10px; width: 300px; max-width: 100%;"&gt;
&lt;a class="image-reference" href="https://sergiobelkin.com/images/cgroups-1.webp"&gt;&lt;img src="https://sergiobelkin.com/images/cgroups-1.thumbnail.webp" alt="Namespaces en Linux"&gt;&lt;/a&gt; 
&lt;/div&gt;

&lt;p&gt;En el &lt;a href="https://sergiobelkin.com/posts/que-son-los-namespaces-y-que-podemos-hacer-con-ellos/"&gt;post anterior&lt;/a&gt; vimos los &lt;strong&gt;namespaces&lt;/strong&gt;, que sirven para aislar diferentes aspectos del sistema, como los procesos, la red y los puntos de montaje, creando entornos independientes para cada grupo de procesos. En este post, exploraremos los &lt;strong&gt;cgroups&lt;/strong&gt;, que permiten controlar cuánto de los recursos del sistema, como CPU, memoria y disco, puede usar cada grupo de procesos. Ambas tecnologías se complementan: los &lt;strong&gt;namespaces&lt;/strong&gt; proporcionan el aislamiento necesario, mientras que los &lt;strong&gt;cgroups&lt;/strong&gt; gestionan y limitan los recursos que esos entornos aislados pueden consumir.&lt;/p&gt;
&lt;h3 id="que-son-los-cgroups"&gt;&lt;strong&gt;¿Qué son los cgroups?&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;Los &lt;strong&gt;cgroups&lt;/strong&gt; (&lt;em&gt;control groups&lt;/em&gt;) son una funcionalidad del &lt;strong&gt;kernel Linux&lt;/strong&gt; que permite agrupar procesos y controlar de manera granular los recursos del sistema que consumen, como CPU, memoria, I/O, y otros. Se incorporaron en 2008 en el kernel de Linux 2.6.24, los &lt;em&gt;cgroups&lt;/em&gt; permiten a los administradores de sistemas gestionar el uso de recursos por grupos de procesos de forma eficiente, garantizando una distribución justa y controlada.&lt;/p&gt;
&lt;p&gt;Los &lt;strong&gt;cgroups&lt;/strong&gt; crean una jerarquía de control donde es posible asignar límites a recursos específicos para un conjunto de procesos, de manera que el sistema operativo pueda monitorear, limitar, priorizar o aislar estos procesos según sea necesario. Esta capacidad es clave para garantizar que los sistemas multitarea, servidores, y contenedores funcionen de manera eficiente.&lt;/p&gt;
&lt;h5 id="para-que-sirven-los-cgroups"&gt;&lt;strong&gt;¿Para qué sirven los cgroups?&lt;/strong&gt;&lt;/h5&gt;
&lt;p&gt;Los &lt;strong&gt;cgroups&lt;/strong&gt; sirven para:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Limitar el uso de recursos&lt;/strong&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Priorizar procesos&lt;/strong&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Aislar procesos&lt;/strong&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Monitorear el consumo de recursos&lt;/strong&gt; &lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Controlar procesos en contenedores (Docker, podman,etc.)&lt;/strong&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="un-pantallazo-de-los-cgroups"&gt;Un pantallazo de los cgroups&lt;/h3&gt;
&lt;p&gt;Dentro del propio directorio /proc podemos encontrar información sobre los cgroups:&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code literal-block"&gt;❯&lt;span class="w"&gt; &lt;/span&gt;cat&lt;span class="w"&gt; &lt;/span&gt;/proc/cgroups&lt;span class="w"&gt; &lt;/span&gt;
&lt;span class="c1"&gt;#subsys_name    hierarchy       num_cgroups     enabled&lt;/span&gt;
cpuset&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="w"&gt;       &lt;/span&gt;&lt;span class="m"&gt;241&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="m"&gt;1&lt;/span&gt;
cpu&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="w"&gt;       &lt;/span&gt;&lt;span class="m"&gt;241&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="m"&gt;1&lt;/span&gt;
cpuacct&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="w"&gt;       &lt;/span&gt;&lt;span class="m"&gt;241&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="m"&gt;1&lt;/span&gt;
blkio&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="w"&gt;       &lt;/span&gt;&lt;span class="m"&gt;241&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="m"&gt;1&lt;/span&gt;
memory&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="w"&gt;       &lt;/span&gt;&lt;span class="m"&gt;241&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="m"&gt;1&lt;/span&gt;
devices&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="w"&gt;       &lt;/span&gt;&lt;span class="m"&gt;241&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="m"&gt;1&lt;/span&gt;
freezer&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="w"&gt;       &lt;/span&gt;&lt;span class="m"&gt;241&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="m"&gt;1&lt;/span&gt;
net_cls&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="w"&gt;       &lt;/span&gt;&lt;span class="m"&gt;241&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="m"&gt;1&lt;/span&gt;
perf_event&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="w"&gt;       &lt;/span&gt;&lt;span class="m"&gt;241&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="m"&gt;1&lt;/span&gt;
net_prio&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="w"&gt;       &lt;/span&gt;&lt;span class="m"&gt;241&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="m"&gt;1&lt;/span&gt;
hugetlb&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="w"&gt;       &lt;/span&gt;&lt;span class="m"&gt;241&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="m"&gt;1&lt;/span&gt;
pids&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="w"&gt;       &lt;/span&gt;&lt;span class="m"&gt;241&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="m"&gt;1&lt;/span&gt;
rdma&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="w"&gt;       &lt;/span&gt;&lt;span class="m"&gt;241&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="m"&gt;1&lt;/span&gt;
misc&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="w"&gt;       &lt;/span&gt;&lt;span class="m"&gt;241&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="m"&gt;1&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Este archivo muestra 4 columnas&lt;/p&gt;
&lt;style&gt;
  table {
  }
  th, td {
    padding: 10px;
    text-align: left;
  }
&lt;/style&gt;

&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Campo&lt;/th&gt;
&lt;th&gt;Significado&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;subsys_name&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Componente del kernel que controlar un recurso específico un aspecto del sistema.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;hierarchy&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;La columna &lt;code&gt;hierarchy&lt;/code&gt; indica el ID de jerarquía asignado a cada subsistema. En este caso, todas las jerarquías tienen el valor &lt;strong&gt;0&lt;/strong&gt;, lo que indica que todos los subsistemas listados están utilizando una &lt;strong&gt;jerarquía unificada&lt;/strong&gt;, común en sistemas que usan &lt;em&gt;cgroups v2&lt;/em&gt;. En &lt;em&gt;cgroups v2&lt;/em&gt;, todos los controladores utilizan una única jerarquía para gestionar los recursos de manera más eficiente, a diferencia de &lt;em&gt;cgroups v1&lt;/em&gt;, donde cada subsistema podía tener su propia jerarquía.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;num_cgroups&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Muestra el número de &lt;em&gt;cgroups&lt;/em&gt; activos o instancias creadas bajo cada controlador. Estos &lt;em&gt;cgroups&lt;/em&gt; pueden pertenecer a procesos que están ejecutándose actualmente en el sistema, como servicios, contenedores, o procesos individuales.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;enabled&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Esta columna muestra si el subsistema está habilitado o no. El valor &lt;strong&gt;1&lt;/strong&gt; indica que el controlador está habilitado y activo, mientras que un valor de &lt;strong&gt;0&lt;/strong&gt; indicaría que está deshabilitado.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h4 id="evolucion-de-los-cgroups"&gt;&lt;strong&gt;Evolución de los cgroups:&lt;/strong&gt;&lt;/h4&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;cgroups v1:&lt;/strong&gt; En la versión original, cada tipo de recurso (CPU, memoria, etc.) tenía su propia jerarquía de control, lo que permitía una gestión separada pero a veces compleja. Aunque era útil, la administración independiente de subsistemas podía resultar difícil de manejar en entornos complejos.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;cgroups v2 (2016):&lt;/strong&gt; Para mejorar la gestión de recursos, se introdujo &lt;strong&gt;cgroups v2&lt;/strong&gt; en el kernel de Linux 4.x, que unificó los diferentes controladores bajo una &lt;strong&gt;jerarquía única&lt;/strong&gt;. Esta versión simplificó el control de recursos y mejoró la eficiencia, permitiendo que todos los subsistemas trabajaran de manera más coordinada y con configuraciones más claras.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h4 id="como-crear-un-cgroup-y-limitar-el-uso-de-cpu-en-cgroups-v2"&gt;&lt;strong&gt;Cómo crear un &lt;em&gt;cgroup&lt;em&gt; y limitar el uso de CPU en &lt;/em&gt;cgroups v2&lt;/em&gt;&lt;/strong&gt;&lt;/h4&gt;
&lt;p&gt;En este ejemplo, limitaremos el uso de CPU de un proceso utilizando &lt;strong&gt;cgroups v2&lt;/strong&gt; en un entorno moderno.&lt;/p&gt;
&lt;h5 id="paso-1-crear-un-directorio-para-el-cgroup"&gt;&lt;strong&gt;Paso 1: Crear un directorio para el &lt;em&gt;cgroup&lt;/em&gt;&lt;/strong&gt;&lt;/h5&gt;
&lt;p&gt;En &lt;strong&gt;cgroups v2&lt;/strong&gt;, se gestiona todo bajo una jerarquía unificada. Primero, crea un nuevo directorio en &lt;code&gt;/sys/fs/cgroup&lt;/code&gt;:&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code literal-block"&gt;sudo&lt;span class="w"&gt; &lt;/span&gt;mkdir&lt;span class="w"&gt; &lt;/span&gt;/sys/fs/cgroup/mi_cgroup
&lt;/pre&gt;&lt;/div&gt;

&lt;h5 id="paso-2-establecer-un-limite-de-cpu"&gt;&lt;strong&gt;Paso 2: Establecer un límite de CPU&lt;/strong&gt;&lt;/h5&gt;
&lt;p&gt;En &lt;strong&gt;cgroups v2&lt;/strong&gt;, puedes establecer límites en el uso de CPU mediante el archivo &lt;code&gt;cpu.max&lt;/code&gt;. Este archivo recibe dos valores: el primero es el límite de uso de CPU en microsegundos por cada período de 100 milisegundos, y el segundo es la duración del período en microsegundos.&lt;/p&gt;
&lt;p&gt;Para limitar el uso de CPU al 50%, puedes hacer lo siguiente:&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code literal-block"&gt;&lt;span class="nb"&gt;echo&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"50000 100000"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;|&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;sudo&lt;span class="w"&gt; &lt;/span&gt;tee&lt;span class="w"&gt; &lt;/span&gt;/sys/fs/cgroup/mi_cgroup/cpu.max
&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Este comando establece que los procesos en este &lt;em&gt;cgroup&lt;/em&gt; pueden usar un máximo de &lt;strong&gt;50.000 microsegundos&lt;/strong&gt; de CPU en un período de &lt;strong&gt;100.000 microsegundos&lt;/strong&gt; (100 ms), lo que equivale al &lt;strong&gt;50% de un núcleo de CPU&lt;/strong&gt;.&lt;/p&gt;
&lt;h5 id="paso-3-anadir-un-proceso-al-cgroup"&gt;&lt;strong&gt;Paso 3: Añadir un proceso al &lt;em&gt;cgroup&lt;/em&gt;&lt;/strong&gt;&lt;/h5&gt;
&lt;p&gt;Para añadir un proceso existente al &lt;em&gt;cgroup&lt;/em&gt;, escribe su &lt;strong&gt;PID&lt;/strong&gt; (ID del proceso) en el archivo &lt;code&gt;cgroup.procs&lt;/code&gt; de ese &lt;em&gt;cgroup&lt;/em&gt;. Supongamos que el PID del proceso es &lt;strong&gt;78435&lt;/strong&gt;:&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code literal-block"&gt;&lt;span class="nb"&gt;echo&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;78435&lt;/span&gt;&lt;span class="p"&gt;|&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;sudo&lt;span class="w"&gt; &lt;/span&gt;tee&lt;span class="w"&gt; &lt;/span&gt;/sys/fs/cgroup/mi_cgroup/cgroup.procs
&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Esto moverá el proceso con PID &lt;code&gt;78435&lt;/code&gt; al &lt;em&gt;cgroup&lt;/em&gt; &lt;code&gt;mi_cgroup&lt;/code&gt;, aplicando las restricciones de CPU configuradas.&lt;/p&gt;
&lt;p&gt;&lt;a class="image-reference" href="https://sergiobelkin.com/images/example-cgroups.webp"&gt;&lt;img src="https://sergiobelkin.com/images/example-cgroups.thumbnail.webp" alt="Ejemplo de uso de cgroups para limitar el uso de CPU" title="Hacer clic para agrandar"&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;En &lt;strong&gt;cgroups v1&lt;/strong&gt;, los recursos se gestionan usando archivos como &lt;code&gt;cpu.shares&lt;/code&gt; para establecer prioridades relativas de CPU, y &lt;code&gt;tasks&lt;/code&gt; para asignar procesos a un &lt;em&gt;cgroup&lt;/em&gt;. En cambio, en &lt;strong&gt;cgroups v2&lt;/strong&gt;, el control de CPU se realiza a través de &lt;code&gt;cpu.max&lt;/code&gt;, donde se puede establecer un límite absoluto en el uso de CPU (como un porcentaje). Además, en &lt;strong&gt;v1&lt;/strong&gt; cada subsistema tiene su propio directorio (como &lt;code&gt;cpu/&lt;/code&gt;, &lt;code&gt;memory/&lt;/code&gt;), mientras que en &lt;strong&gt;v2&lt;/strong&gt; todo se gestiona dentro de una única jerarquía unificada bajo &lt;code&gt;/sys/fs/cgroup/&lt;/code&gt;.&lt;/p&gt;
&lt;h4 id="conclusion"&gt;Conclusión&lt;/h4&gt;
&lt;p&gt;Hoy en día, los &lt;em&gt;cgroups&lt;/em&gt; son una herramienta crítica en la &lt;strong&gt;gestión moderna de servidores&lt;/strong&gt;. RHEL8 usa de manera predeterminada la versión 1, pero es posible usar la versión 2, dependiendo del software que utilicemos. En definitiva, los cgroups son fundamentales para la operación de tecnologías como &lt;strong&gt;contenedores&lt;/strong&gt; (&lt;em&gt;Docker&lt;/em&gt;, &lt;em&gt;Podman&lt;/em&gt;), &lt;strong&gt;orquestadores&lt;/strong&gt; como &lt;strong&gt;Kubernetes&lt;/strong&gt;, y cualquier sistema que necesite &lt;strong&gt;control granular de recursos&lt;/strong&gt;. La capacidad de aislar, priorizar y monitorear el uso de recursos en servidores es clave para garantizar la estabilidad y el rendimiento en entornos de alta demanda.&lt;/p&gt;
&lt;h4 id="fuentes-y-mas-informacion"&gt;Fuentes y más información&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.kernel.org/doc/html/latest/admin-guide/cgroup-v1/cgroups.html"&gt;CGROUPS v1&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.kernel.org/doc/html/latest/admin-guide/cgroup-v2.html"&gt;CGROUPS v2&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://blog.nginx.org/blog/what-are-namespaces-cgroups-how-do-they-work"&gt;Explicación de namespaces y cgrous en el blog de NGINX&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description><category>kernel</category><guid>https://sergiobelkin.com/posts/que-son-los-cgroups-y-para-que-sirven/</guid><pubDate>Fri, 25 Oct 2024 22:46:07 GMT</pubDate></item><item><title>Qué son los namespaces y que podemos hacer con ellos</title><link>https://sergiobelkin.com/posts/que-son-los-namespaces-y-que-podemos-hacer-con-ellos/</link><dc:creator>sebelk</dc:creator><description>&lt;p&gt;En el &lt;a href="https://sergiobelkin.com/posts/que-es-flatpak/"&gt;post anterior&lt;/a&gt;, exploramos qué es Flatpak, una excelente alternativa o complemento a los métodos tradicionales de instalación de programas en Linux. Flatpak utiliza una herramienta llamada &lt;strong&gt;bubblewrap&lt;/strong&gt;, que a su vez emplea la tecnología de &lt;strong&gt;namespaces&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;&lt;a class="image-reference" href="https://sergiobelkin.com/images/namespaces.webp"&gt;&lt;img src="https://sergiobelkin.com/images/namespaces.thumbnail.webp" alt="Namespaces en Linux"&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;Veamos con lupa lo que hay debajo de una aplicación flatpak. &lt;/p&gt;
&lt;h3 id="listado-de-procesos-de-aplicaciones-flatpak"&gt;Listado de procesos de aplicaciones flatpak&lt;/h3&gt;
&lt;div class="code"&gt;&lt;pre class="code literal-block"&gt;❯&lt;span class="w"&gt; &lt;/span&gt;flatpak&lt;span class="w"&gt; &lt;/span&gt;ps&lt;span class="w"&gt; &lt;/span&gt;--columns&lt;span class="o"&gt;=&lt;/span&gt;pid,child-pid,application
PID&lt;span class="w"&gt;  &lt;/span&gt;PID-hijo&lt;span class="w"&gt; &lt;/span&gt;Aplicación
&lt;span class="m"&gt;4588&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;4610&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;com.github.marktext.marktext
&lt;span class="m"&gt;4629&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;4639&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;com.github.marktext.marktext
&lt;span class="m"&gt;4841&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;4853&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;com.spotify.Client
&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;&lt;a class="image-reference" href="https://sergiobelkin.com/images/flatpak-ps.png"&gt;&lt;img src="https://sergiobelkin.com/images/flatpak-ps.thumbnail.png" alt="MarkText y Spotify (aplicaciones instaladas con flatpak)"&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;Este listado nos muestra que hay dos aplicaciones corriendo: MarkText y Spotify. Vamos a ver qué pasa con uno de los procesos relacionados con MarkText.&lt;/p&gt;
&lt;h3 id="el-comando-detras-de-flatpak"&gt;El comando detrás de flatpak&lt;/h3&gt;
&lt;div class="code"&gt;&lt;pre class="code literal-block"&gt;❯&lt;span class="w"&gt; &lt;/span&gt;ps&lt;span class="w"&gt; &lt;/span&gt;p&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="m"&gt;4610&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;o&lt;span class="w"&gt; &lt;/span&gt;args
COMMAND
/usr/bin/bwrap&lt;span class="w"&gt; &lt;/span&gt;--args&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;42&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;--&lt;span class="w"&gt; &lt;/span&gt;spotify
&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;bwrap&lt;/strong&gt; es una herramienta para crear  sandboxes por medio de namespaces. Un namespace es un recurso del sistema que se puede aislar, pero... en lugar de abundar en tecnicismos, para comprender este concepto en la práctica, veremos algunas propiedades del proceso 4610 (MarkText):&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code literal-block"&gt;❯&lt;span class="w"&gt; &lt;/span&gt;ls&lt;span class="w"&gt; &lt;/span&gt;-l&lt;span class="w"&gt; &lt;/span&gt;/proc/4610/ns
total&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;
lrwxrwxrwx&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;sergio&lt;span class="w"&gt; &lt;/span&gt;sergio&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;jul&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;31&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;18&lt;/span&gt;:46&lt;span class="w"&gt; &lt;/span&gt;cgroup&lt;span class="w"&gt; &lt;/span&gt;-&amp;gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;'cgroup:[4026531835]'&lt;/span&gt;
lrwxrwxrwx&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;sergio&lt;span class="w"&gt; &lt;/span&gt;sergio&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;jul&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;31&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;18&lt;/span&gt;:46&lt;span class="w"&gt; &lt;/span&gt;ipc&lt;span class="w"&gt; &lt;/span&gt;-&amp;gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;'ipc:[4026531839]'&lt;/span&gt;
lrwxrwxrwx&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;sergio&lt;span class="w"&gt; &lt;/span&gt;sergio&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;jul&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;31&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;18&lt;/span&gt;:40&lt;span class="w"&gt; &lt;/span&gt;mnt&lt;span class="w"&gt; &lt;/span&gt;-&amp;gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;'mnt:[4026532856]'&lt;/span&gt;
lrwxrwxrwx&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;sergio&lt;span class="w"&gt; &lt;/span&gt;sergio&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;jul&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;31&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;18&lt;/span&gt;:46&lt;span class="w"&gt; &lt;/span&gt;net&lt;span class="w"&gt; &lt;/span&gt;-&amp;gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;'net:[4026531840]'&lt;/span&gt;
lrwxrwxrwx&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;sergio&lt;span class="w"&gt; &lt;/span&gt;sergio&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;jul&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;31&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;18&lt;/span&gt;:40&lt;span class="w"&gt; &lt;/span&gt;pid&lt;span class="w"&gt; &lt;/span&gt;-&amp;gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;'pid:[4026532857]'&lt;/span&gt;
lrwxrwxrwx&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;sergio&lt;span class="w"&gt; &lt;/span&gt;sergio&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;jul&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;31&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;18&lt;/span&gt;:46&lt;span class="w"&gt; &lt;/span&gt;pid_for_children&lt;span class="w"&gt; &lt;/span&gt;-&amp;gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;'pid:[4026532857]'&lt;/span&gt;
lrwxrwxrwx&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;sergio&lt;span class="w"&gt; &lt;/span&gt;sergio&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;jul&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;31&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;18&lt;/span&gt;:46&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;time&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;-&amp;gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;'time:[4026531834]'&lt;/span&gt;
lrwxrwxrwx&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;sergio&lt;span class="w"&gt; &lt;/span&gt;sergio&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;jul&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;31&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;18&lt;/span&gt;:46&lt;span class="w"&gt; &lt;/span&gt;time_for_children&lt;span class="w"&gt; &lt;/span&gt;-&amp;gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;'time:[4026531834]'&lt;/span&gt;
lrwxrwxrwx&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;sergio&lt;span class="w"&gt; &lt;/span&gt;sergio&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;jul&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;31&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;18&lt;/span&gt;:40&lt;span class="w"&gt; &lt;/span&gt;user&lt;span class="w"&gt; &lt;/span&gt;-&amp;gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;'user:[4026532858]'&lt;/span&gt;
lrwxrwxrwx&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;sergio&lt;span class="w"&gt; &lt;/span&gt;sergio&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;jul&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;31&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;18&lt;/span&gt;:46&lt;span class="w"&gt; &lt;/span&gt;uts&lt;span class="w"&gt; &lt;/span&gt;-&amp;gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;'uts:[4026531838]'&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Ese listado nos muestra que están los namespaces cgroup, ipc, mnt, net, pid, time, user y uts. Cada uno de ellos tiene un número que lo identifica.&lt;/p&gt;
&lt;p&gt;Podemos compararlo con otros procesos por ejemplo con el pid 1 y con el pid del shell que estamos usando:&lt;/p&gt;
&lt;p&gt;&lt;a class="image-reference" href="https://sergiobelkin.com/images/namespaces.png"&gt;&lt;img src="https://sergiobelkin.com/images/namespaces.thumbnail.png" alt="Comparación de procesos y namespaces"&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;Podemos ver que tanto bash como systemd comparten todos los namespaces. &lt;em&gt;Sin embargo, bwrap tiene namespaces distintos para mnt, pid y user. Es decir tiene esos recursos aislados&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;El cuadro siguiente nos sirve para saber qué namespace usar de acuerdo a lo que queramos aislar:&lt;/p&gt;
&lt;style&gt;
  table {
  }
  th, td {
    padding: 10px;
    text-align: left;
  }
&lt;/style&gt;

&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Para aislar&lt;/th&gt;
&lt;th&gt;Usar namespace...&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;em&gt;Límites de recursos&lt;/em&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;cgroups&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;em&gt;Colas de mensaje, semáforos, memoria compartida&lt;/em&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;ipc&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;em&gt;Lista de montajes&lt;/em&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;mount&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;em&gt;Interfaces de red, ruteo, sockets, etc.&lt;/em&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;net&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;em&gt;Números de pid&lt;/em&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;pid&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;em&gt;UID's, GID's, capabilities, etc&lt;/em&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;user&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;em&gt;Hostnames&lt;/em&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;uts&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;em&gt;Relojes/Tiempo&lt;/em&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;time&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;El soporte en el &lt;strong&gt;kernel&lt;/strong&gt; lo podemos verificar de la siguiente manera:&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code literal-block"&gt;grep&lt;span class="w"&gt; &lt;/span&gt;-E&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;'CONFIG_[A-Z]+_NS=y'&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;/boot/config-&lt;span class="k"&gt;$(&lt;/span&gt;uname&lt;span class="w"&gt; &lt;/span&gt;-r&lt;span class="k"&gt;)&lt;/span&gt;
&lt;span class="nv"&gt;CONFIG_UTS_NS&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;y
&lt;span class="nv"&gt;CONFIG_TIME_NS&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;y
&lt;span class="nv"&gt;CONFIG_IPC_NS&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;y
&lt;span class="nv"&gt;CONFIG_USER_NS&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;y
&lt;span class="nv"&gt;CONFIG_PID_NS&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;y
&lt;span class="nv"&gt;CONFIG_NET_NS&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;y
&lt;/pre&gt;&lt;/div&gt;

&lt;h3 id="crear-nuevos-namespaces-para-procesos-y-usuarios"&gt;Crear nuevos namespaces para procesos y usuarios&lt;/h3&gt;
&lt;p&gt;La herramienta &lt;strong&gt;unshare&lt;/strong&gt; nos permite experimentar y solucionar problemas en aplicaciones y servicios que usan namespaces. En el siguiente ejemplo abrimos un shell con namespaces aislados para usuarios y números de procesos:&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code literal-block"&gt;❯&lt;span class="w"&gt; &lt;/span&gt;unshare&lt;span class="w"&gt; &lt;/span&gt;--mount-proc&lt;span class="w"&gt; &lt;/span&gt;--pid&lt;span class="w"&gt; &lt;/span&gt;--fork&lt;span class="w"&gt; &lt;/span&gt;--user&lt;span class="w"&gt; &lt;/span&gt;bash
❯&lt;span class="w"&gt; &lt;/span&gt;ps&lt;span class="w"&gt; &lt;/span&gt;aux
&lt;span class="w"&gt;   &lt;/span&gt;USER&lt;span class="w"&gt;         &lt;/span&gt;PID&lt;span class="w"&gt; &lt;/span&gt;%CPU&lt;span class="w"&gt; &lt;/span&gt;%MEM&lt;span class="w"&gt;    &lt;/span&gt;VSZ&lt;span class="w"&gt;   &lt;/span&gt;RSS&lt;span class="w"&gt; &lt;/span&gt;TTY&lt;span class="w"&gt;      &lt;/span&gt;STAT&lt;span class="w"&gt; &lt;/span&gt;START&lt;span class="w"&gt;   &lt;/span&gt;TIME&lt;span class="w"&gt; &lt;/span&gt;COMMAND
&lt;span class="w"&gt;   &lt;/span&gt;nobody&lt;span class="w"&gt;         &lt;/span&gt;&lt;span class="m"&gt;1&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="m"&gt;2&lt;/span&gt;.8&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;.0&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;237808&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;12996&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;pts/1&lt;span class="w"&gt;    &lt;/span&gt;S&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="m"&gt;13&lt;/span&gt;:43&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;:00&lt;span class="w"&gt; &lt;/span&gt;bash
&lt;span class="w"&gt;   &lt;/span&gt;nobody&lt;span class="w"&gt;       &lt;/span&gt;&lt;span class="m"&gt;104&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;.0&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;.0&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;230836&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="m"&gt;4096&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;pts/1&lt;span class="w"&gt;    &lt;/span&gt;R+&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="m"&gt;13&lt;/span&gt;:43&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;:00&lt;span class="w"&gt; &lt;/span&gt;ps&lt;span class="w"&gt; &lt;/span&gt;aux
&lt;/pre&gt;&lt;/div&gt;

&lt;ul&gt;
&lt;li&gt;Aquí vemos que bash usa el PID 1 en lugar de systemd, y que el comando &lt;code&gt;ps aux&lt;/code&gt; toma el pid 2.&lt;/li&gt;
&lt;li&gt;Además, el usuario pasa a ser &lt;em&gt;nobody&lt;/em&gt;.&lt;/li&gt;
&lt;li&gt;Para salir del namespace, simplemente hay que ejecutar &lt;code&gt;exit&lt;/code&gt;. Es importante asegurarse de que todos los procesos dentro del namespace hayan terminado, de lo contrario, puede ser que &lt;code&gt;exit&lt;/code&gt;  sea insuficiente para salir completamente del namespace.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id="por-que-usamos-mount-proc"&gt;¿Por qué usamos --mount-proc?&lt;/h4&gt;
&lt;p&gt;Bueno... porque si no lo hacemos sucede esto:&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code literal-block"&gt;❯&lt;span class="w"&gt; &lt;/span&gt;unshare&lt;span class="w"&gt; &lt;/span&gt;--mount&lt;span class="w"&gt; &lt;/span&gt;--pid&lt;span class="w"&gt; &lt;/span&gt;--fork&lt;span class="w"&gt; &lt;/span&gt;--user&lt;span class="w"&gt; &lt;/span&gt;/bin/bash
basename:&lt;span class="w"&gt; &lt;/span&gt;falta&lt;span class="w"&gt; &lt;/span&gt;un&lt;span class="w"&gt; &lt;/span&gt;operando
Pruebe&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;'basename --help'&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;para&lt;span class="w"&gt; &lt;/span&gt;más&lt;span class="w"&gt; &lt;/span&gt;información.
&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Este mensaje aparece porque el comando &lt;code&gt;basename&lt;/code&gt; usa &lt;code&gt;readlink&lt;/code&gt; para ver hacia dónde apunta &lt;code&gt;/proc/$$/exe&lt;/code&gt;. Como el PID de la shell en el nuevo namespace es 1, intenta acceder incorrectamente al directorio &lt;code&gt;/proc&lt;/code&gt; en los namespaces del host. Linux impide este acceso para mantener el aislamiento y la seguridad, lo que resulta en ese error.&lt;/p&gt;
&lt;h4 id="particularidades-de-namespaces"&gt;Particularidades de namespaces&lt;/h4&gt;
&lt;div class="code"&gt;&lt;pre class="code literal-block"&gt;❯&lt;span class="w"&gt; &lt;/span&gt;unshare&lt;span class="w"&gt; &lt;/span&gt;--mount-proc&lt;span class="w"&gt; &lt;/span&gt;--pid&lt;span class="w"&gt; &lt;/span&gt;--user&lt;span class="w"&gt; &lt;/span&gt;/bin/bash
unshare:&lt;span class="w"&gt; &lt;/span&gt;mount&lt;span class="w"&gt; &lt;/span&gt;/proc&lt;span class="w"&gt; &lt;/span&gt;failed:&lt;span class="w"&gt; &lt;/span&gt;Operación&lt;span class="w"&gt; &lt;/span&gt;no&lt;span class="w"&gt; &lt;/span&gt;permitida
❯&lt;span class="w"&gt; &lt;/span&gt;unshare&lt;span class="w"&gt; &lt;/span&gt;--pid&lt;span class="w"&gt; &lt;/span&gt;--user&lt;span class="w"&gt; &lt;/span&gt;/bin/bash
bash:&lt;span class="w"&gt; &lt;/span&gt;fork:&lt;span class="w"&gt; &lt;/span&gt;No&lt;span class="w"&gt; &lt;/span&gt;se&lt;span class="w"&gt; &lt;/span&gt;pudo&lt;span class="w"&gt; &lt;/span&gt;asignar&lt;span class="w"&gt; &lt;/span&gt;memoria
&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;En el primer intento, ni siquiera pudo crear los namespaces; en el segundo, aunque lo logró, muestra un mensaje críptico:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;bash: fork: No se pudo asignar memoria&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Estos errores ocurren porque &lt;code&gt;unshare&lt;/code&gt;, por defecto, ejecuta el comando indicado en el mismo proceso (similar a &lt;code&gt;exec&lt;/code&gt;), lo que resulta en:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Error de Montaje&lt;/strong&gt;: El sistema no permite montar &lt;code&gt;/proc&lt;/code&gt; porque el proceso no tiene el contexto completo de namespace de usuario y PID necesario.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Error de Memoria&lt;/strong&gt;: Debido a que bash no se convierte en PID 1 ni puede acceder a otro proceso con PID 1, Linux no permite la asignación de memoria porque no hay un proceso para manejar la recolección de zombies y otras tareas esenciales.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;Por lo tanto, usar &lt;code&gt;--fork&lt;/code&gt; es necesario para asegurar que el proceso tenga el contexto de namespace completo y para crear un nuevo proceso que actúe como PID 1 en el nuevo namespace.&lt;/em&gt;&lt;/p&gt;
&lt;h4 id="entrar-en-namespaces-de-una-app-de-flatpak"&gt;Entrar en namespaces de una app de flatpak&lt;/h4&gt;
&lt;div class="code"&gt;&lt;pre class="code literal-block"&gt;❯&lt;span class="w"&gt; &lt;/span&gt;sudo&lt;span class="w"&gt; &lt;/span&gt;nsenter&lt;span class="w"&gt; &lt;/span&gt;--mount&lt;span class="w"&gt; &lt;/span&gt;--pid&lt;span class="w"&gt; &lt;/span&gt;-S&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;$UID&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;-t&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;4610&lt;/span&gt;
-bash-5.2$&lt;span class="w"&gt; &lt;/span&gt;ps&lt;span class="w"&gt; &lt;/span&gt;auxwww
USER&lt;span class="w"&gt;         &lt;/span&gt;PID&lt;span class="w"&gt; &lt;/span&gt;%CPU&lt;span class="w"&gt; &lt;/span&gt;%MEM&lt;span class="w"&gt;    &lt;/span&gt;VSZ&lt;span class="w"&gt;   &lt;/span&gt;RSS&lt;span class="w"&gt; &lt;/span&gt;TTY&lt;span class="w"&gt;      &lt;/span&gt;STAT&lt;span class="w"&gt; &lt;/span&gt;START&lt;span class="w"&gt;   &lt;/span&gt;TIME&lt;span class="w"&gt; &lt;/span&gt;COMMAND
sergio&lt;span class="w"&gt;         &lt;/span&gt;&lt;span class="m"&gt;1&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;.0&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;.0&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="m"&gt;3764&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="m"&gt;1288&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;?&lt;span class="w"&gt;        &lt;/span&gt;S&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="m"&gt;18&lt;/span&gt;:40&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;:00&lt;span class="w"&gt; &lt;/span&gt;/usr/bin/bwrap&lt;span class="w"&gt; &lt;/span&gt;--args&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;40&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;--&lt;span class="w"&gt; &lt;/span&gt;marktext
sergio&lt;span class="w"&gt;         &lt;/span&gt;&lt;span class="m"&gt;2&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;.9&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;.5&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;21637908&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;182648&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;?&lt;span class="w"&gt;     &lt;/span&gt;SLl&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="m"&gt;18&lt;/span&gt;:40&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;:15&lt;span class="w"&gt; &lt;/span&gt;/app/marktext/marktext
sergio&lt;span class="w"&gt;         &lt;/span&gt;&lt;span class="m"&gt;5&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;.0&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;.0&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="m"&gt;5640&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="m"&gt;1664&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;?&lt;span class="w"&gt;        &lt;/span&gt;S&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="m"&gt;18&lt;/span&gt;:40&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;:00&lt;span class="w"&gt; &lt;/span&gt;cat
sergio&lt;span class="w"&gt;         &lt;/span&gt;&lt;span class="m"&gt;6&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;.0&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;.0&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="m"&gt;5640&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="m"&gt;1792&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;?&lt;span class="w"&gt;        &lt;/span&gt;S&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="m"&gt;18&lt;/span&gt;:40&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;:00&lt;span class="w"&gt; &lt;/span&gt;cat
sergio&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="m"&gt;10&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;.0&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;.1&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;16987244&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;46720&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;?&lt;span class="w"&gt;      &lt;/span&gt;S&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="m"&gt;18&lt;/span&gt;:40&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;:00&lt;span class="w"&gt; &lt;/span&gt;/app/marktext/marktext&lt;span class="w"&gt; &lt;/span&gt;--type&lt;span class="o"&gt;=&lt;/span&gt;zygote&lt;span class="w"&gt; &lt;/span&gt;--no-zygote-sandbox
sergio&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="m"&gt;12&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;.0&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;.0&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;?&lt;span class="w"&gt;        &lt;/span&gt;Z&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="m"&gt;18&lt;/span&gt;:40&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;:00&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;zypak-sandbox&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&amp;lt;defunct&amp;gt;
sergio&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="m"&gt;15&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;.0&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;.0&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="m"&gt;3768&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="m"&gt;1152&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;?&lt;span class="w"&gt;        &lt;/span&gt;S&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="m"&gt;18&lt;/span&gt;:40&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;:00&lt;span class="w"&gt; &lt;/span&gt;/usr/bin/bwrap&lt;span class="w"&gt; &lt;/span&gt;--args&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;42&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;--&lt;span class="w"&gt; &lt;/span&gt;/app/bin/zypak-helper&lt;span class="w"&gt; &lt;/span&gt;child&lt;span class="w"&gt; &lt;/span&gt;-&lt;span class="w"&gt; &lt;/span&gt;/app/marktext/marktext&lt;span class="w"&gt; &lt;/span&gt;--type&lt;span class="o"&gt;=&lt;/span&gt;zygote
sergio&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="m"&gt;16&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;.0&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;.1&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;16989892&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;49152&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;?&lt;span class="w"&gt;      &lt;/span&gt;S&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="m"&gt;18&lt;/span&gt;:40&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;:00&lt;span class="w"&gt; &lt;/span&gt;/app/marktext/marktext&lt;span class="w"&gt; &lt;/span&gt;--type&lt;span class="o"&gt;=&lt;/span&gt;zygote
sergio&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="m"&gt;48&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="m"&gt;1&lt;/span&gt;.4&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;.2&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;17065152&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;72664&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;?&lt;span class="w"&gt;      &lt;/span&gt;Sl&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="m"&gt;18&lt;/span&gt;:40&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;:23&lt;span class="w"&gt; &lt;/span&gt;/app/marktext/marktext&lt;span class="w"&gt; &lt;/span&gt;--type&lt;span class="o"&gt;=&lt;/span&gt;gpu-process&lt;span class="w"&gt; &lt;/span&gt;--field-trial-handle&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="m"&gt;9170851604328465342&lt;/span&gt;,17458150017059513700,131072&lt;span class="w"&gt; &lt;/span&gt;--disable-features&lt;span class="o"&gt;=&lt;/span&gt;SpareRendererForSitePerProcess&lt;span class="w"&gt; &lt;/span&gt;--enable-crash-reporter&lt;span class="o"&gt;=&lt;/span&gt;7744fdfa-fe51-4b1f-adf6-daefea565c51,no_channel&lt;span class="w"&gt; &lt;/span&gt;--global-crash-keys&lt;span class="o"&gt;=&lt;/span&gt;7744fdfa-fe51-4b1f-adf6-daefea565c51,no_channel,_companyName&lt;span class="o"&gt;=&lt;/span&gt;marktext,_productName&lt;span class="o"&gt;=&lt;/span&gt;marktext,_version&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;.17.1&lt;span class="w"&gt; &lt;/span&gt;--user-data-dir&lt;span class="o"&gt;=&lt;/span&gt;/home/sergio/.var/app/com.github.marktext.marktext/config/marktext&lt;span class="w"&gt; &lt;/span&gt;--gpu-preferences&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nv"&gt;UAAAAAAAAAAgAAAIAAAAAAAAAAAAAAAAAABgAAAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgAAAAAAAAAGAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAA&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;--use-gl&lt;span class="o"&gt;=&lt;/span&gt;swiftshader-webgl&lt;span class="w"&gt; &lt;/span&gt;--shared-files
sergio&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="m"&gt;53&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;.0&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;.0&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;16998948&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;14448&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;?&lt;span class="w"&gt;      &lt;/span&gt;S&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="m"&gt;18&lt;/span&gt;:40&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;:00&lt;span class="w"&gt; &lt;/span&gt;/app/marktext/marktext&lt;span class="w"&gt; &lt;/span&gt;--type&lt;span class="o"&gt;=&lt;/span&gt;broker
sergio&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="m"&gt;63&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;.0&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;.1&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;17044740&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;57216&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;?&lt;span class="w"&gt;      &lt;/span&gt;Sl&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="m"&gt;18&lt;/span&gt;:40&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;:00&lt;span class="w"&gt; &lt;/span&gt;/app/marktext/marktext&lt;span class="w"&gt; &lt;/span&gt;--type&lt;span class="o"&gt;=&lt;/span&gt;utility&lt;span class="w"&gt; &lt;/span&gt;--utility-sub-type&lt;span class="o"&gt;=&lt;/span&gt;network.mojom.NetworkService&lt;span class="w"&gt; &lt;/span&gt;--field-trial-handle&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="m"&gt;9170851604328465342&lt;/span&gt;,17458150017059513700,131072&lt;span class="w"&gt; &lt;/span&gt;--disable-features&lt;span class="o"&gt;=&lt;/span&gt;SpareRendererForSitePerProcess&lt;span class="w"&gt; &lt;/span&gt;--lang&lt;span class="o"&gt;=&lt;/span&gt;es-419&lt;span class="w"&gt; &lt;/span&gt;--service-sandbox-type&lt;span class="o"&gt;=&lt;/span&gt;none&lt;span class="w"&gt; &lt;/span&gt;--enable-crash-reporter&lt;span class="o"&gt;=&lt;/span&gt;7744fdfa-fe51-4b1f-adf6-daefea565c51,no_channel&lt;span class="w"&gt; &lt;/span&gt;--global-crash-keys&lt;span class="o"&gt;=&lt;/span&gt;7744fdfa-fe51-4b1f-adf6-daefea565c51,no_channel,_companyName&lt;span class="o"&gt;=&lt;/span&gt;marktext,_productName&lt;span class="o"&gt;=&lt;/span&gt;marktext,_version&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;.17.1&lt;span class="w"&gt; &lt;/span&gt;--user-data-dir&lt;span class="o"&gt;=&lt;/span&gt;/home/sergio/.var/app/com.github.marktext.marktext/config/marktext&lt;span class="w"&gt; &lt;/span&gt;--shared-files&lt;span class="o"&gt;=&lt;/span&gt;v8_context_snapshot_data:100
sergio&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="m"&gt;74&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="m"&gt;5&lt;/span&gt;.2&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;.6&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;25595728&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;212480&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;?&lt;span class="w"&gt;     &lt;/span&gt;Sl&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="m"&gt;18&lt;/span&gt;:40&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="m"&gt;1&lt;/span&gt;:27&lt;span class="w"&gt; &lt;/span&gt;/app/marktext/marktext&lt;span class="w"&gt; &lt;/span&gt;--type&lt;span class="o"&gt;=&lt;/span&gt;renderer&lt;span class="w"&gt; &lt;/span&gt;--enable-crash-reporter&lt;span class="o"&gt;=&lt;/span&gt;7744fdfa-fe51-4b1f-adf6-daefea565c51,no_channel&lt;span class="w"&gt; &lt;/span&gt;--global-crash-keys&lt;span class="o"&gt;=&lt;/span&gt;7744fdfa-fe51-4b1f-adf6-daefea565c51,no_channel,_companyName&lt;span class="o"&gt;=&lt;/span&gt;marktext,_productName&lt;span class="o"&gt;=&lt;/span&gt;marktext,_version&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;.17.1&lt;span class="w"&gt; &lt;/span&gt;--user-data-dir&lt;span class="o"&gt;=&lt;/span&gt;/home/sergio/.var/app/com.github.marktext.marktext/config/marktext&lt;span class="w"&gt; &lt;/span&gt;--app-path&lt;span class="o"&gt;=&lt;/span&gt;/app/marktext/resources/app.asar&lt;span class="w"&gt; &lt;/span&gt;--no-sandbox&lt;span class="w"&gt; &lt;/span&gt;--no-zygote&lt;span class="w"&gt; &lt;/span&gt;--field-trial-handle&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="m"&gt;9170851604328465342&lt;/span&gt;,17458150017059513700,131072&lt;span class="w"&gt; &lt;/span&gt;--disable-features&lt;span class="o"&gt;=&lt;/span&gt;SpareRendererForSitePerProcess&lt;span class="w"&gt; &lt;/span&gt;--disable-gpu-compositing&lt;span class="w"&gt; &lt;/span&gt;--lang&lt;span class="o"&gt;=&lt;/span&gt;es-419&lt;span class="w"&gt; &lt;/span&gt;--num-raster-threads&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="m"&gt;4&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;--enable-main-frame-before-activation&lt;span class="w"&gt; &lt;/span&gt;--renderer-client-id&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="m"&gt;4&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;--no-v8-untrusted-code-mitigations&lt;span class="w"&gt; &lt;/span&gt;--shared-files&lt;span class="o"&gt;=&lt;/span&gt;v8_context_snapshot_data:100
sergio&lt;span class="w"&gt;       &lt;/span&gt;&lt;span class="m"&gt;144&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;.0&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;.0&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="m"&gt;7884&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="m"&gt;4224&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;?&lt;span class="w"&gt;        &lt;/span&gt;S&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="m"&gt;19&lt;/span&gt;:08&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;:00&lt;span class="w"&gt; &lt;/span&gt;-bash
sergio&lt;span class="w"&gt;       &lt;/span&gt;&lt;span class="m"&gt;145&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;.0&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;.0&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="m"&gt;11032&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="m"&gt;4608&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;?&lt;span class="w"&gt;        &lt;/span&gt;R+&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="m"&gt;19&lt;/span&gt;:08&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;:00&lt;span class="w"&gt; &lt;/span&gt;ps&lt;span class="w"&gt; &lt;/span&gt;auxwww
&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;La herramienta &lt;strong&gt;nsenter&lt;/strong&gt; permite ejecutar comandos en namespaces de un proceso determinado, en este caso, el de bwrap. Como no especificamos ningún comando, corre el shell bash.&lt;/p&gt;
&lt;p&gt;Allí podemos ver el espacio de nombres aislados de números de procesos, como se ve arriba, o como mostramos a continuación, los montajes aislados:&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code literal-block"&gt;-bash-5.2$&lt;span class="w"&gt; &lt;/span&gt;df&lt;span class="w"&gt; &lt;/span&gt;-h&lt;span class="w"&gt;  &lt;/span&gt;
S.ficheros&lt;span class="w"&gt;     &lt;/span&gt;Tamaño&lt;span class="w"&gt; &lt;/span&gt;Usados&lt;span class="w"&gt;  &lt;/span&gt;Disp&lt;span class="w"&gt; &lt;/span&gt;Uso%&lt;span class="w"&gt; &lt;/span&gt;Montado&lt;span class="w"&gt; &lt;/span&gt;en&lt;span class="w"&gt;  &lt;/span&gt;
tmpfs&lt;span class="w"&gt;             &lt;/span&gt;16G&lt;span class="w"&gt;    &lt;/span&gt;92K&lt;span class="w"&gt;   &lt;/span&gt;16G&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="m"&gt;1&lt;/span&gt;%&lt;span class="w"&gt; &lt;/span&gt;/etc/timezone&lt;span class="w"&gt;  &lt;/span&gt;
/dev/sda6&lt;span class="w"&gt;        &lt;/span&gt;511G&lt;span class="w"&gt;   &lt;/span&gt;434G&lt;span class="w"&gt;   &lt;/span&gt;76G&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="m"&gt;86&lt;/span&gt;%&lt;span class="w"&gt; &lt;/span&gt;/cs&lt;span class="w"&gt;  &lt;/span&gt;
tmpfs&lt;span class="w"&gt;             &lt;/span&gt;16G&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;16G&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;%&lt;span class="w"&gt; &lt;/span&gt;/usr/lib/x86_64-linux-gnu/GL&lt;span class="w"&gt;  &lt;/span&gt;
/dev/sda6&lt;span class="w"&gt;        &lt;/span&gt;511G&lt;span class="w"&gt;   &lt;/span&gt;434G&lt;span class="w"&gt;   &lt;/span&gt;76G&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="m"&gt;86&lt;/span&gt;%&lt;span class="w"&gt; &lt;/span&gt;/home&lt;span class="w"&gt;  &lt;/span&gt;
tmpfs&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="m"&gt;3&lt;/span&gt;,2G&lt;span class="w"&gt;    &lt;/span&gt;11M&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="m"&gt;3&lt;/span&gt;,2G&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="m"&gt;1&lt;/span&gt;%&lt;span class="w"&gt; &lt;/span&gt;/run/host/monitor&lt;span class="w"&gt;  &lt;/span&gt;
tmpfs&lt;span class="w"&gt;             &lt;/span&gt;16G&lt;span class="w"&gt;    &lt;/span&gt;15M&lt;span class="w"&gt;   &lt;/span&gt;16G&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="m"&gt;1&lt;/span&gt;%&lt;span class="w"&gt; &lt;/span&gt;/dev&lt;span class="w"&gt;  &lt;/span&gt;
devtmpfs&lt;span class="w"&gt;         &lt;/span&gt;&lt;span class="m"&gt;4&lt;/span&gt;,0M&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="m"&gt;4&lt;/span&gt;,0M&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;%&lt;span class="w"&gt; &lt;/span&gt;/dev/tty&lt;span class="w"&gt;  &lt;/span&gt;
tmpfs&lt;span class="w"&gt;             &lt;/span&gt;16G&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;16G&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;%&lt;span class="w"&gt; &lt;/span&gt;/home/sergio/.local/share/flatpak&lt;span class="w"&gt;  &lt;/span&gt;
tmpfs&lt;span class="w"&gt;             &lt;/span&gt;16G&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;16G&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;%&lt;span class="w"&gt; &lt;/span&gt;/home/sergio/.var/app&lt;span class="w"&gt;  &lt;/span&gt;
/dev/sda3&lt;span class="w"&gt;        &lt;/span&gt;382G&lt;span class="w"&gt;   &lt;/span&gt;100G&lt;span class="w"&gt;  &lt;/span&gt;283G&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="m"&gt;27&lt;/span&gt;%&lt;span class="w"&gt; &lt;/span&gt;/mnt/win10&lt;span class="w"&gt;  &lt;/span&gt;
tmpfs&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="m"&gt;6&lt;/span&gt;,3G&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="m"&gt;2&lt;/span&gt;,3M&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="m"&gt;6&lt;/span&gt;,3G&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="m"&gt;1&lt;/span&gt;%&lt;span class="w"&gt; &lt;/span&gt;/run/media&lt;span class="w"&gt;  &lt;/span&gt;
tmpfs&lt;span class="w"&gt;             &lt;/span&gt;16G&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="m"&gt;4&lt;/span&gt;,0M&lt;span class="w"&gt;   &lt;/span&gt;16G&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="m"&gt;1&lt;/span&gt;%&lt;span class="w"&gt; &lt;/span&gt;/tmp&lt;span class="w"&gt;  &lt;/span&gt;
tmpfs&lt;span class="w"&gt;             &lt;/span&gt;16G&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;16G&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;%&lt;span class="w"&gt; &lt;/span&gt;/tmp/.X11-unix&lt;span class="w"&gt;  &lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;También podemos pensar que estos recursos que se aíslan se virtualizan. Cuando hablamos de virtualización, probablemente pensemos en un disco o en una interfaz de red virtual. Pero aquí vemos, por ejemplo, que un espacio de nombres de PID's también se puede virtualizar.&lt;/p&gt;
&lt;p&gt;Y cuando más de un recurso se puede virtualizar, de ahí a crear un contenedor hay una corta distancia. De hecho, los namespaces sirve tanto para un usuario final con flatpak como en la creación de contenedores lxc (ah, sí lxc existe desde 2008, aunque ya no esté más de moda 😁) &lt;strong&gt;docker&lt;/strong&gt; o &lt;strong&gt;podman&lt;/strong&gt; para un sysadmin o un desarrollador.&lt;/p&gt;
&lt;p&gt;A continuación, veremos algunos ejemplos de cómo utilizar los namespaces en contenedores Podman. Es importante conocer el PID del contenedor en el host para estos ejemplos.&lt;/p&gt;
&lt;h4 id="ejemplo-1-ver-la-configuracion-de-red-del-contenedor-que-usa-network-mode-pasta"&gt;Ejemplo 1: Ver la configuración de red del contenedor que usa network mode pasta&lt;/h4&gt;
&lt;div class="code"&gt;&lt;pre class="code literal-block"&gt;❯&lt;span class="w"&gt; &lt;/span&gt;podman&lt;span class="w"&gt; &lt;/span&gt;unshare&lt;span class="w"&gt; &lt;/span&gt;nsenter&lt;span class="w"&gt; &lt;/span&gt;--target&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;29420&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;--net&lt;span class="w"&gt;  &lt;/span&gt;
❯&lt;span class="w"&gt; &lt;/span&gt;ip&lt;span class="w"&gt; &lt;/span&gt;a
&lt;span class="m"&gt;1&lt;/span&gt;:&lt;span class="w"&gt; &lt;/span&gt;lo:&lt;span class="w"&gt; &lt;/span&gt;&amp;lt;LOOPBACK,UP,LOWER_UP&amp;gt;&lt;span class="w"&gt; &lt;/span&gt;mtu&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;65536&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;qdisc&lt;span class="w"&gt; &lt;/span&gt;noqueue&lt;span class="w"&gt; &lt;/span&gt;state&lt;span class="w"&gt; &lt;/span&gt;UNKNOWN&lt;span class="w"&gt; &lt;/span&gt;group&lt;span class="w"&gt; &lt;/span&gt;default&lt;span class="w"&gt; &lt;/span&gt;qlen&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;1000&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;link/loopback&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;00&lt;/span&gt;:00:00:00:00:00&lt;span class="w"&gt; &lt;/span&gt;brd&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;00&lt;/span&gt;:00:00:00:00:00
&lt;span class="w"&gt;    &lt;/span&gt;inet&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;127&lt;/span&gt;.0.0.1/8&lt;span class="w"&gt; &lt;/span&gt;scope&lt;span class="w"&gt; &lt;/span&gt;host&lt;span class="w"&gt; &lt;/span&gt;lo
&lt;span class="w"&gt;       &lt;/span&gt;valid_lft&lt;span class="w"&gt; &lt;/span&gt;forever&lt;span class="w"&gt; &lt;/span&gt;preferred_lft&lt;span class="w"&gt; &lt;/span&gt;forever
&lt;span class="w"&gt;    &lt;/span&gt;inet6&lt;span class="w"&gt; &lt;/span&gt;::1/128&lt;span class="w"&gt; &lt;/span&gt;scope&lt;span class="w"&gt; &lt;/span&gt;host&lt;span class="w"&gt; &lt;/span&gt;proto&lt;span class="w"&gt; &lt;/span&gt;kernel_lo&lt;span class="w"&gt; &lt;/span&gt;
&lt;span class="w"&gt;       &lt;/span&gt;valid_lft&lt;span class="w"&gt; &lt;/span&gt;forever&lt;span class="w"&gt; &lt;/span&gt;preferred_lft&lt;span class="w"&gt; &lt;/span&gt;forever
&lt;span class="m"&gt;2&lt;/span&gt;:&lt;span class="w"&gt; &lt;/span&gt;wlp108s0:&lt;span class="w"&gt; &lt;/span&gt;&amp;lt;BROADCAST,MULTICAST,UP,LOWER_UP&amp;gt;&lt;span class="w"&gt; &lt;/span&gt;mtu&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;65520&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;qdisc&lt;span class="w"&gt; &lt;/span&gt;fq_codel&lt;span class="w"&gt; &lt;/span&gt;state&lt;span class="w"&gt; &lt;/span&gt;UNKNOWN&lt;span class="w"&gt; &lt;/span&gt;group&lt;span class="w"&gt; &lt;/span&gt;default&lt;span class="w"&gt; &lt;/span&gt;qlen&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;1000&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;link/ether&lt;span class="w"&gt; &lt;/span&gt;ea:38:5b:0b:a8:a8&lt;span class="w"&gt; &lt;/span&gt;brd&lt;span class="w"&gt; &lt;/span&gt;ff:ff:ff:ff:ff:ff
&lt;span class="w"&gt;    &lt;/span&gt;inet&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;192&lt;/span&gt;.168.0.144/24&lt;span class="w"&gt; &lt;/span&gt;brd&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;192&lt;/span&gt;.168.0.255&lt;span class="w"&gt; &lt;/span&gt;scope&lt;span class="w"&gt; &lt;/span&gt;global&lt;span class="w"&gt; &lt;/span&gt;noprefixroute&lt;span class="w"&gt; &lt;/span&gt;wlp108s0
&lt;span class="w"&gt;       &lt;/span&gt;valid_lft&lt;span class="w"&gt; &lt;/span&gt;forever&lt;span class="w"&gt; &lt;/span&gt;preferred_lft&lt;span class="w"&gt; &lt;/span&gt;forever
&lt;span class="w"&gt;    &lt;/span&gt;inet6&lt;span class="w"&gt; &lt;/span&gt;fe80::e838:5bff:fe0b:a8a8/64&lt;span class="w"&gt; &lt;/span&gt;scope&lt;span class="w"&gt; &lt;/span&gt;link&lt;span class="w"&gt; &lt;/span&gt;proto&lt;span class="w"&gt; &lt;/span&gt;kernel_ll&lt;span class="w"&gt; &lt;/span&gt;
&lt;span class="w"&gt;       &lt;/span&gt;valid_lft&lt;span class="w"&gt; &lt;/span&gt;forever&lt;span class="w"&gt; &lt;/span&gt;preferred_lft&lt;span class="w"&gt; &lt;/span&gt;forever
&lt;/pre&gt;&lt;/div&gt;

&lt;h4 id="ejemplo-2-ver-la-configuracion-de-red-del-contenedor-que-usa-network-mode-slirp4netns"&gt;Ejemplo 2: Ver la configuración de red del contenedor que usa network mode slirp4netns&lt;/h4&gt;
&lt;div class="code"&gt;&lt;pre class="code literal-block"&gt;&lt;span class="w"&gt;  &lt;/span&gt;podman&lt;span class="w"&gt; &lt;/span&gt;unshare&lt;span class="w"&gt; &lt;/span&gt;nsenter&lt;span class="w"&gt; &lt;/span&gt;--target&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;46222&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;--net&lt;span class="w"&gt;  &lt;/span&gt;

&lt;span class="w"&gt;  &lt;/span&gt;root&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;in&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;~/to_delete&lt;span class="w"&gt; &lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;❯&lt;span class="w"&gt; &lt;/span&gt;ip&lt;span class="w"&gt; &lt;/span&gt;a
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="m"&gt;1&lt;/span&gt;:&lt;span class="w"&gt; &lt;/span&gt;lo:&lt;span class="w"&gt; &lt;/span&gt;&amp;lt;LOOPBACK,UP,LOWER_UP&amp;gt;&lt;span class="w"&gt; &lt;/span&gt;mtu&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;65536&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;qdisc&lt;span class="w"&gt; &lt;/span&gt;noqueue&lt;span class="w"&gt; &lt;/span&gt;state&lt;span class="w"&gt; &lt;/span&gt;UNKNOWN&lt;span class="w"&gt; &lt;/span&gt;group&lt;span class="w"&gt; &lt;/span&gt;default&lt;span class="w"&gt; &lt;/span&gt;qlen&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;1000&lt;/span&gt;
&lt;span class="w"&gt;      &lt;/span&gt;link/loopback&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;00&lt;/span&gt;:00:00:00:00:00&lt;span class="w"&gt; &lt;/span&gt;brd&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;00&lt;/span&gt;:00:00:00:00:00
&lt;span class="w"&gt;      &lt;/span&gt;inet&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;127&lt;/span&gt;.0.0.1/8&lt;span class="w"&gt; &lt;/span&gt;scope&lt;span class="w"&gt; &lt;/span&gt;host&lt;span class="w"&gt; &lt;/span&gt;lo
&lt;span class="w"&gt;         &lt;/span&gt;valid_lft&lt;span class="w"&gt; &lt;/span&gt;forever&lt;span class="w"&gt; &lt;/span&gt;preferred_lft&lt;span class="w"&gt; &lt;/span&gt;forever
&lt;span class="w"&gt;      &lt;/span&gt;inet6&lt;span class="w"&gt; &lt;/span&gt;::1/128&lt;span class="w"&gt; &lt;/span&gt;scope&lt;span class="w"&gt; &lt;/span&gt;host&lt;span class="w"&gt; &lt;/span&gt;proto&lt;span class="w"&gt; &lt;/span&gt;kernel_lo&lt;span class="w"&gt; &lt;/span&gt;
&lt;span class="w"&gt;         &lt;/span&gt;valid_lft&lt;span class="w"&gt; &lt;/span&gt;forever&lt;span class="w"&gt; &lt;/span&gt;preferred_lft&lt;span class="w"&gt; &lt;/span&gt;forever
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="m"&gt;2&lt;/span&gt;:&lt;span class="w"&gt; &lt;/span&gt;tap0:&lt;span class="w"&gt; &lt;/span&gt;&amp;lt;BROADCAST,UP,LOWER_UP&amp;gt;&lt;span class="w"&gt; &lt;/span&gt;mtu&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;65520&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;qdisc&lt;span class="w"&gt; &lt;/span&gt;fq_codel&lt;span class="w"&gt; &lt;/span&gt;state&lt;span class="w"&gt; &lt;/span&gt;UNKNOWN&lt;span class="w"&gt; &lt;/span&gt;group&lt;span class="w"&gt; &lt;/span&gt;default&lt;span class="w"&gt; &lt;/span&gt;qlen&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;1000&lt;/span&gt;
&lt;span class="w"&gt;      &lt;/span&gt;link/ether&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;92&lt;/span&gt;:b6:67:25:13:33&lt;span class="w"&gt; &lt;/span&gt;brd&lt;span class="w"&gt; &lt;/span&gt;ff:ff:ff:ff:ff:ff
&lt;span class="w"&gt;      &lt;/span&gt;inet&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;10&lt;/span&gt;.0.2.100/24&lt;span class="w"&gt; &lt;/span&gt;brd&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;10&lt;/span&gt;.0.2.255&lt;span class="w"&gt; &lt;/span&gt;scope&lt;span class="w"&gt; &lt;/span&gt;global&lt;span class="w"&gt; &lt;/span&gt;tap0
&lt;span class="w"&gt;         &lt;/span&gt;valid_lft&lt;span class="w"&gt; &lt;/span&gt;forever&lt;span class="w"&gt; &lt;/span&gt;preferred_lft&lt;span class="w"&gt; &lt;/span&gt;forever
&lt;span class="w"&gt;      &lt;/span&gt;inet6&lt;span class="w"&gt; &lt;/span&gt;fd00::90b6:67ff:fe25:1333/64&lt;span class="w"&gt; &lt;/span&gt;scope&lt;span class="w"&gt; &lt;/span&gt;global&lt;span class="w"&gt; &lt;/span&gt;dynamic&lt;span class="w"&gt; &lt;/span&gt;mngtmpaddr&lt;span class="w"&gt; &lt;/span&gt;proto&lt;span class="w"&gt; &lt;/span&gt;kernel_ra&lt;span class="w"&gt; &lt;/span&gt;
&lt;span class="w"&gt;         &lt;/span&gt;valid_lft&lt;span class="w"&gt; &lt;/span&gt;86356sec&lt;span class="w"&gt; &lt;/span&gt;preferred_lft&lt;span class="w"&gt; &lt;/span&gt;14356sec
&lt;span class="w"&gt;      &lt;/span&gt;inet6&lt;span class="w"&gt; &lt;/span&gt;fe80::90b6:67ff:fe25:1333/64&lt;span class="w"&gt; &lt;/span&gt;scope&lt;span class="w"&gt; &lt;/span&gt;link&lt;span class="w"&gt; &lt;/span&gt;proto&lt;span class="w"&gt; &lt;/span&gt;kernel_ll&lt;span class="w"&gt; &lt;/span&gt;
&lt;span class="w"&gt;         &lt;/span&gt;valid_lft&lt;span class="w"&gt; &lt;/span&gt;forever&lt;span class="w"&gt; &lt;/span&gt;preferred_lft&lt;span class="w"&gt; &lt;/span&gt;forever
&lt;/pre&gt;&lt;/div&gt;

&lt;h4 id="ejemplo-3-probar-la-resolucion-de-nombres-usando-el-archivo-etcresolvconf-del-contenedor"&gt;Ejemplo 3: Probar la resolución de nombres usando el archivo /etc/resolv.conf del contenedor&lt;/h4&gt;
&lt;div class="code"&gt;&lt;pre class="code literal-block"&gt;❯&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;container_id&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="k"&gt;$(&lt;/span&gt;podman&lt;span class="w"&gt; &lt;/span&gt;inspect&lt;span class="w"&gt; &lt;/span&gt;--format&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;'{{.Id}}'&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;namespace-demo&lt;span class="k"&gt;)&lt;/span&gt;
❯&lt;span class="w"&gt; &lt;/span&gt;cp&lt;span class="w"&gt; &lt;/span&gt;/run/user/1000/containers/overlay-containers/&lt;span class="nv"&gt;$container_id&lt;/span&gt;/userdata/resolv.conf&lt;span class="w"&gt; &lt;/span&gt;/tmp/container_resolv.conf&lt;span class="w"&gt;    &lt;/span&gt;
❯&lt;span class="w"&gt; &lt;/span&gt;podman&lt;span class="w"&gt; &lt;/span&gt;unshare&lt;span class="w"&gt; &lt;/span&gt;nsenter&lt;span class="w"&gt; &lt;/span&gt;--target&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;46222&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;--net&lt;span class="w"&gt; &lt;/span&gt;dig&lt;span class="w"&gt; &lt;/span&gt;google.com&lt;span class="w"&gt; &lt;/span&gt;@&lt;span class="k"&gt;$(&lt;/span&gt;grep&lt;span class="w"&gt; &lt;/span&gt;-m&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;'nameserver'&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;/tmp/container_resolv.conf&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;|&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;awk&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;'{print $2}'&lt;/span&gt;&lt;span class="k"&gt;)&lt;/span&gt;

&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&amp;lt;&amp;lt;&amp;gt;&amp;gt;&lt;span class="w"&gt; &lt;/span&gt;DiG&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;9&lt;/span&gt;.18.26&lt;span class="w"&gt; &lt;/span&gt;&amp;lt;&amp;lt;&amp;gt;&amp;gt;&lt;span class="w"&gt; &lt;/span&gt;google.com&lt;span class="w"&gt; &lt;/span&gt;@10.0.2.3
&lt;span class="p"&gt;;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;global&lt;span class="w"&gt; &lt;/span&gt;options:&lt;span class="w"&gt; &lt;/span&gt;+cmd
&lt;span class="p"&gt;;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;Got&lt;span class="w"&gt; &lt;/span&gt;answer:
&lt;span class="p"&gt;;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;-&amp;gt;&amp;gt;HEADER&lt;span class="s"&gt;&amp;lt;&amp;lt;- opco&lt;/span&gt;de:&lt;span class="w"&gt; &lt;/span&gt;QUERY,&lt;span class="w"&gt; &lt;/span&gt;status:&lt;span class="w"&gt; &lt;/span&gt;NOERROR,&lt;span class="w"&gt; &lt;/span&gt;id:&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;25213&lt;/span&gt;
&lt;span class="p"&gt;;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;flags:&lt;span class="w"&gt; &lt;/span&gt;qr&lt;span class="w"&gt; &lt;/span&gt;rd&lt;span class="w"&gt; &lt;/span&gt;ra&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;QUERY:&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;1&lt;/span&gt;,&lt;span class="w"&gt; &lt;/span&gt;ANSWER:&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;1&lt;/span&gt;,&lt;span class="w"&gt; &lt;/span&gt;AUTHORITY:&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;,&lt;span class="w"&gt; &lt;/span&gt;ADDITIONAL:&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;1&lt;/span&gt;

&lt;span class="p"&gt;;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;OPT&lt;span class="w"&gt; &lt;/span&gt;PSEUDOSECTION:
&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;EDNS:&lt;span class="w"&gt; &lt;/span&gt;version:&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;,&lt;span class="w"&gt; &lt;/span&gt;flags:&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;udp:&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;65494&lt;/span&gt;
&lt;span class="p"&gt;;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;QUESTION&lt;span class="w"&gt; &lt;/span&gt;SECTION:
&lt;span class="p"&gt;;&lt;/span&gt;google.com.&lt;span class="w"&gt;                    &lt;/span&gt;IN&lt;span class="w"&gt;      &lt;/span&gt;A

&lt;span class="p"&gt;;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;ANSWER&lt;span class="w"&gt; &lt;/span&gt;SECTION:
google.com.&lt;span class="w"&gt;             &lt;/span&gt;&lt;span class="m"&gt;263&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;IN&lt;span class="w"&gt;      &lt;/span&gt;A&lt;span class="w"&gt;       &lt;/span&gt;&lt;span class="m"&gt;142&lt;/span&gt;.251.133.78

&lt;span class="p"&gt;;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;Query&lt;span class="w"&gt; &lt;/span&gt;time:&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;30&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;msec
&lt;span class="p"&gt;;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;SERVER:&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;10&lt;/span&gt;.0.2.3#53&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="m"&gt;10&lt;/span&gt;.0.2.3&lt;span class="o"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;UDP&lt;span class="o"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;WHEN:&lt;span class="w"&gt; &lt;/span&gt;Thu&lt;span class="w"&gt; &lt;/span&gt;Jul&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;25&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;19&lt;/span&gt;:50:18&lt;span class="w"&gt; &lt;/span&gt;-03&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;2024&lt;/span&gt;
&lt;span class="p"&gt;;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;MSG&lt;span class="w"&gt; &lt;/span&gt;SIZE&lt;span class="w"&gt;  &lt;/span&gt;rcvd:&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;55&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;

&lt;h4 id="ejemplo-4-ver-los-procesos-de-un-contenedor-rootless"&gt;Ejemplo 4: Ver los procesos de un contenedor rootless&lt;/h4&gt;
&lt;div class="code"&gt;&lt;pre class="code literal-block"&gt;❯&lt;span class="w"&gt; &lt;/span&gt;sudo&lt;span class="w"&gt; &lt;/span&gt;nsenter&lt;span class="w"&gt; &lt;/span&gt;--pid&lt;span class="o"&gt;=&lt;/span&gt;/proc/&lt;span class="nv"&gt;$container_pid&lt;/span&gt;/ns/pid&lt;span class="w"&gt; &lt;/span&gt;unshare&lt;span class="w"&gt; &lt;/span&gt;--mount-proc
&lt;span class="o"&gt;[&lt;/span&gt;sudo&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;contraseña&lt;span class="w"&gt; &lt;/span&gt;para&lt;span class="w"&gt; &lt;/span&gt;sergio:&lt;span class="w"&gt; &lt;/span&gt;
❯&lt;span class="w"&gt; &lt;/span&gt;ps
&lt;span class="w"&gt;  &lt;/span&gt;PID&lt;span class="w"&gt; &lt;/span&gt;TTY&lt;span class="w"&gt;          &lt;/span&gt;TIME&lt;span class="w"&gt; &lt;/span&gt;CMD
&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;1508&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;pts/6&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="m"&gt;00&lt;/span&gt;:00:00&lt;span class="w"&gt; &lt;/span&gt;bash
&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;1612&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;pts/6&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="m"&gt;00&lt;/span&gt;:00:00&lt;span class="w"&gt; &lt;/span&gt;ps
❯&lt;span class="w"&gt; &lt;/span&gt;ps&lt;span class="w"&gt; &lt;/span&gt;aux
USER&lt;span class="w"&gt;         &lt;/span&gt;PID&lt;span class="w"&gt; &lt;/span&gt;%CPU&lt;span class="w"&gt; &lt;/span&gt;%MEM&lt;span class="w"&gt;    &lt;/span&gt;VSZ&lt;span class="w"&gt;   &lt;/span&gt;RSS&lt;span class="w"&gt; &lt;/span&gt;TTY&lt;span class="w"&gt;      &lt;/span&gt;STAT&lt;span class="w"&gt; &lt;/span&gt;START&lt;span class="w"&gt;   &lt;/span&gt;TIME&lt;span class="w"&gt; &lt;/span&gt;COMMAND
sergio&lt;span class="w"&gt;         &lt;/span&gt;&lt;span class="m"&gt;1&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;.0&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;.0&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="m"&gt;14932&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="m"&gt;7168&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;?&lt;span class="w"&gt;        &lt;/span&gt;Ss&lt;span class="w"&gt;   &lt;/span&gt;jul25&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;:00&lt;span class="w"&gt; &lt;/span&gt;sudo&lt;span class="w"&gt; &lt;/span&gt;/usr/sbin/sshd&lt;span class="w"&gt; &lt;/span&gt;-D
sergio&lt;span class="w"&gt;         &lt;/span&gt;&lt;span class="m"&gt;2&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;.0&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;.0&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="m"&gt;14084&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="m"&gt;7936&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;?&lt;span class="w"&gt;        &lt;/span&gt;S&lt;span class="w"&gt;    &lt;/span&gt;jul25&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;:00&lt;span class="w"&gt; &lt;/span&gt;sshd:&lt;span class="w"&gt; &lt;/span&gt;/usr/sbin/sshd&lt;span class="w"&gt; &lt;/span&gt;-D&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;listener&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;of&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;10&lt;/span&gt;-100&lt;span class="w"&gt; &lt;/span&gt;startups
root&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="m"&gt;1508&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;.5&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;.0&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;231260&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="m"&gt;6528&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;pts/6&lt;span class="w"&gt;    &lt;/span&gt;S&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="m"&gt;19&lt;/span&gt;:00&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;:00&lt;span class="w"&gt; &lt;/span&gt;-bash
root&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="m"&gt;1641&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;.0&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;.0&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;230836&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="m"&gt;3968&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;pts/6&lt;span class="w"&gt;    &lt;/span&gt;R+&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="m"&gt;19&lt;/span&gt;:00&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;:00&lt;span class="w"&gt; &lt;/span&gt;ps&lt;span class="w"&gt; &lt;/span&gt;aux
&lt;/pre&gt;&lt;/div&gt;

&lt;h4 id="ejemplo-5-crear-namespaces-no-privilegiados-con-un-poco-de-ayuda"&gt;Ejemplo 5: Crear namespaces no privilegiados con un poco de ayuda&lt;/h4&gt;
&lt;p&gt;Por último, veamos como usar la herramienta rootlesskit para crear fácilmente namespaces rootless:&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code literal-block"&gt;❯&lt;span class="w"&gt; &lt;/span&gt;rootlesskit&lt;span class="w"&gt; &lt;/span&gt;bash
❯&lt;span class="w"&gt; &lt;/span&gt;id
&lt;span class="nv"&gt;uid&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;root&lt;span class="o"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;gid&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;root&lt;span class="o"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;grupos&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;root&lt;span class="o"&gt;)&lt;/span&gt;,65534&lt;span class="o"&gt;(&lt;/span&gt;nobody&lt;span class="o"&gt;)&lt;/span&gt;
❯&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;exit&lt;/span&gt;
❯&lt;span class="w"&gt; &lt;/span&gt;rootlesskit&lt;span class="w"&gt; &lt;/span&gt;--copy-up&lt;span class="o"&gt;=&lt;/span&gt;/etc&lt;span class="w"&gt; &lt;/span&gt;bash&lt;span class="w"&gt;  &lt;/span&gt;
❯&lt;span class="w"&gt; &lt;/span&gt;touch&lt;span class="w"&gt; &lt;/span&gt;/etc/sample
❯&lt;span class="w"&gt; &lt;/span&gt;ls&lt;span class="w"&gt; &lt;/span&gt;-l&lt;span class="w"&gt; &lt;/span&gt;/etc/sample
-rw-r--r--&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;root&lt;span class="w"&gt; &lt;/span&gt;root&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;jul&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;26&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;12&lt;/span&gt;:12&lt;span class="w"&gt; &lt;/span&gt;/etc/sample
❯&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;exit&lt;/span&gt;
❯&lt;span class="w"&gt; &lt;/span&gt;ls&lt;span class="w"&gt; &lt;/span&gt;-l&lt;span class="w"&gt; &lt;/span&gt;/etc/sample
ls:&lt;span class="w"&gt; &lt;/span&gt;no&lt;span class="w"&gt; &lt;/span&gt;se&lt;span class="w"&gt; &lt;/span&gt;puede&lt;span class="w"&gt; &lt;/span&gt;acceder&lt;span class="w"&gt; &lt;/span&gt;a&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;'/etc/sample'&lt;/span&gt;:&lt;span class="w"&gt; &lt;/span&gt;No&lt;span class="w"&gt; &lt;/span&gt;existe&lt;span class="w"&gt; &lt;/span&gt;el&lt;span class="w"&gt; &lt;/span&gt;fichero&lt;span class="w"&gt; &lt;/span&gt;o&lt;span class="w"&gt; &lt;/span&gt;el&lt;span class="w"&gt; &lt;/span&gt;directorio
&lt;/pre&gt;&lt;/div&gt;

&lt;h3 id="conclusion"&gt;Conclusión&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;En este post, hemos visto que los namespaces sirven para aislar recursos con diferentes propósitos y que herramientas como &lt;code&gt;unshare&lt;/code&gt; y &lt;code&gt;nsenter&lt;/code&gt; son muy útiles para entender cómo funciona una aplicación instalada con Flatpak, pero también un contenedor podman o similar, lo cual facilita la resolución de problemas.&lt;/strong&gt;
Algunas actividades que propongo para continuar ejercitando este tema son:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Instalar aplicaciones de Flatpak y observar qué sucede cuando más de un proceso está involucrado.&lt;/li&gt;
&lt;li&gt;Examinar qué ocurre con las tablas de ruteo, las listas de iptables o nftables, etc., en un nuevo namespace de red.&lt;/li&gt;
&lt;li&gt;Crear un namespace de usuario y explorar cómo este afecta la ejecución de comandos y procesos.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;¡Hasta la próxima!&lt;/p&gt;
&lt;h3 id="fuentes-y-recursos"&gt;Fuentes y Recursos&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href="https://man7.org/linux/man-pages/man7/namespaces.7.html"&gt;&lt;strong&gt;man7.org - namespaces&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://man7.org/linux/man-pages/man1/unshare.1.html"&gt;&lt;strong&gt;man1.org - unshare&lt;/strong&gt;)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://man7.org/linux/man-pages/man1/nsenter.1.html"&gt;&lt;strong&gt;man1.org - nsenter&lt;/strong&gt;)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://docs.docker.com/engine/security/userns-remap/"&gt;&lt;strong&gt;Docker - Namespaces Overview&lt;/strong&gt;&lt;/a&gt;  &lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/rootless-containers/rootlesskit"&gt;&lt;strong&gt;Linux-native "fake root" for implementing rootless containers&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;</description><category>contenedores</category><guid>https://sergiobelkin.com/posts/que-son-los-namespaces-y-que-podemos-hacer-con-ellos/</guid><pubDate>Sat, 03 Aug 2024 19:29:34 GMT</pubDate></item><item><title>¿Qué es flatpak?</title><link>https://sergiobelkin.com/posts/que-es-flatpak/</link><dc:creator>sebelk</dc:creator><description>&lt;p&gt;Es conveniente y merecido que &lt;strong&gt;Flatpak&lt;/strong&gt; tenga un post especialmente dedicado a él, más allá de su interacción con polkit que dejamos planteado en el &lt;a href="https://sergiobelkin.com/posts/entendiendo-polkit/"&gt;post anterior&lt;/a&gt;. &lt;/p&gt;
&lt;p&gt;&lt;a class="image-reference" href="https://sergiobelkin.com/posts/que-es-flatpak/images/flatpak-spirit.webp"&gt;&lt;img src="https://sergiobelkin.com/images/flatpak-spirit.thumbnail.webp" alt="Flatpak"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;br&gt;&lt;/p&gt;
&lt;h2 id="brevisimo-repaso-historico"&gt;Brevísimo repaso histórico&lt;/h2&gt;
&lt;p&gt;En agosto de &lt;strong&gt;2007&lt;/strong&gt; el desarrollador sueco &lt;strong&gt;Alexander Larsson&lt;/strong&gt; lanza su primer intento de empaquetar aplicaciones con todas sus dependencias. A fines de &lt;strong&gt;2014&lt;/strong&gt; comienza a trabajar en el proyecto &lt;strong&gt;xdg-app&lt;/strong&gt;, el cual cambia de nombre a &lt;strong&gt;Flatpak&lt;/strong&gt; en 2016.&lt;/p&gt;
&lt;h3 id="que-es-flatpak"&gt;¿Qué es Flatpak?&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Flatpak&lt;/strong&gt; es un sistema para compilar, distribuir y ejecutar aplicaciones. Las aplicaciones se pueden compilar y distribuir independientemente del sistema en que se usan, y al ejecutarse están aisladas del mismo hasta cierto punto.&lt;/p&gt;
&lt;p&gt;Cada aplicación está en un sandbox, de manera predeterminada solamente puede acceder al contenido del mismo. Cada programa en flatpak tiene acceso a &lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;~/.var/app/$FLATPAK_ID&lt;/code&gt;, y &lt;code&gt;$XDG_RUNTIME_DIR/app/$FLATPAK_ID&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;De manera limitada a llamadas del sistema.&lt;/li&gt;
&lt;li&gt;De manera limitada a la instancia de &lt;strong&gt;D-BUS&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Aun así, para ser realistas, las aplicaciones en general necesitan más permisos, en este caso se insta a los empaquetadores a que adviertan qué accesos necesitará la aplicación para que el usuario esté conciente de ello, tal como cuando se instala una app desde el Play Store de Android.&lt;/p&gt;
&lt;p&gt;&lt;a class="image-reference" href="https://sergiobelkin.com/images/flatseal.png"&gt;&lt;img src="https://sergiobelkin.com/images/flatseal.thumbnail.png" alt="Flatseal mostrando los permisos que usa cada una de las aplicaciones instaladas" title="Hacer clic para agrandar"&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;Flatpak ofrece un repositorio llamado &lt;a href="https://flathub.org/"&gt;Flathub&lt;/a&gt;. Nada impide que cualquier persona o proyecto (como es el caso de Fedora) tenga el suyo propio.&lt;/p&gt;
&lt;p&gt;Flatpak usa &lt;strong&gt;OSTree&lt;/strong&gt; (&lt;em&gt;Fedora usa OCI&lt;/em&gt;) para distribuir y desplegar datos. OSTree es similar a &lt;em&gt;Git&lt;/em&gt; pero está diseñado para hacer control de versiones de binarios y archivos grandes de datos. El uso de OSTree permite además que un mismo archivo sea usado por más de una misma aplicación, ahorrando de esta manera espacio en disco. Cada aplicación que se instala es almacenada en un repositorio local de control de versiones, y luego se mapea en el sistema de archivos local.&lt;/p&gt;
&lt;p&gt;Los cambios entre las diferentes versiones de una aplicación se aplican en el filesystem mediante enlaces duros.&lt;/p&gt;
&lt;p&gt;Por ejemplo, con el comando siguiente podemos ver log del último commit de una aplicación flatpak (Logseq):
.&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code literal-block"&gt;❯&lt;span class="w"&gt; &lt;/span&gt;ostree&lt;span class="w"&gt; &lt;/span&gt;log&lt;span class="w"&gt; &lt;/span&gt;--repo&lt;span class="o"&gt;=&lt;/span&gt;/var/lib/flatpak/repo&lt;span class="w"&gt;  &lt;/span&gt;deploy/app/com.logseq.Logseq/x86_64/stable
commit&lt;span class="w"&gt; &lt;/span&gt;a54ee70b0ec9047c2083f77b9f9175e8e8edcac998e3be8d395009255a6a03f6
Parent:&lt;span class="w"&gt;  &lt;/span&gt;8c36feebe7ea23654917f542eb5419b71426359a42165f53496c9d82049a6806
ContentChecksum:&lt;span class="w"&gt;  &lt;/span&gt;4d06f4e875d0335f2ff1c7a30ffa5b200c9a3eb3aeb0b608588eadb045994b22
Date:&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="m"&gt;2024&lt;/span&gt;-06-09&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;07&lt;/span&gt;:22:27&lt;span class="w"&gt; &lt;/span&gt;+0000

&lt;span class="w"&gt;    &lt;/span&gt;Remove&lt;span class="w"&gt; &lt;/span&gt;screenshot&lt;span class="w"&gt; &lt;/span&gt;locale&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;8a160109&lt;span class="o"&gt;)&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;Name:&lt;span class="w"&gt; &lt;/span&gt;com.logseq.Logseq
&lt;span class="w"&gt;    &lt;/span&gt;Arch:&lt;span class="w"&gt; &lt;/span&gt;x86_64
&lt;span class="w"&gt;    &lt;/span&gt;Branch:&lt;span class="w"&gt; &lt;/span&gt;stable
&lt;span class="w"&gt;    &lt;/span&gt;Built&lt;span class="w"&gt; &lt;/span&gt;with:&lt;span class="w"&gt; &lt;/span&gt;Flatpak&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;1&lt;/span&gt;.14.8

&amp;lt;&amp;lt;&lt;span class="w"&gt; &lt;/span&gt;History&lt;span class="w"&gt; &lt;/span&gt;beyond&lt;span class="w"&gt; &lt;/span&gt;this&lt;span class="w"&gt; &lt;/span&gt;commit&lt;span class="w"&gt; &lt;/span&gt;not&lt;span class="w"&gt; &lt;/span&gt;fetched&lt;span class="w"&gt; &lt;/span&gt;&amp;gt;&amp;gt;
&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;En realidad el comando mostrado es de bajo nivel solamente a los efectos de mostrar ostree como software subyacente, para obtener información a más alto nivel, es conveniente usar directamente el comando &lt;strong&gt;flatpak&lt;/strong&gt; para obtener información de la aplicación:&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code literal-block"&gt;&amp;gt;&lt;span class="w"&gt; &lt;/span&gt;flatpak&lt;span class="w"&gt; &lt;/span&gt;info&lt;span class="w"&gt; &lt;/span&gt;com.logseq.Logseq&lt;span class="w"&gt; &lt;/span&gt;

Logseq&lt;span class="w"&gt; &lt;/span&gt;-&lt;span class="w"&gt; &lt;/span&gt;Connect&lt;span class="w"&gt; &lt;/span&gt;your&lt;span class="w"&gt; &lt;/span&gt;notes&lt;span class="w"&gt; &lt;/span&gt;and&lt;span class="w"&gt; &lt;/span&gt;knowledge

&lt;span class="w"&gt;                 &lt;/span&gt;ID:&lt;span class="w"&gt; &lt;/span&gt;com.logseq.Logseq
&lt;span class="w"&gt;         &lt;/span&gt;Referencia:&lt;span class="w"&gt; &lt;/span&gt;app/com.logseq.Logseq/x86_64/stable
&lt;span class="w"&gt;       &lt;/span&gt;Arquitectura:&lt;span class="w"&gt; &lt;/span&gt;x86_64
&lt;span class="w"&gt;               &lt;/span&gt;Rama:&lt;span class="w"&gt; &lt;/span&gt;stable
&lt;span class="w"&gt;            &lt;/span&gt;Versión:&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;.10.9
&lt;span class="w"&gt;           &lt;/span&gt;Licencia:&lt;span class="w"&gt; &lt;/span&gt;AGPL-3.0-or-later
&lt;span class="w"&gt;             &lt;/span&gt;Origen:&lt;span class="w"&gt; &lt;/span&gt;flathub
&lt;span class="w"&gt;          &lt;/span&gt;Colección:&lt;span class="w"&gt; &lt;/span&gt;org.flathub.Stable
&lt;span class="w"&gt;        &lt;/span&gt;Instalación:&lt;span class="w"&gt; &lt;/span&gt;system
&lt;span class="w"&gt;          &lt;/span&gt;Instalada:&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;437&lt;/span&gt;,7&lt;span class="w"&gt; &lt;/span&gt;MB
Tiempo&lt;span class="w"&gt; &lt;/span&gt;de&lt;span class="w"&gt; &lt;/span&gt;ejecución:&lt;span class="w"&gt; &lt;/span&gt;org.freedesktop.Platform/x86_64/23.08
&lt;span class="w"&gt;                &lt;/span&gt;Sdk:&lt;span class="w"&gt; &lt;/span&gt;org.freedesktop.Sdk/x86_64/23.08

&lt;span class="w"&gt;             &lt;/span&gt;Commit:&lt;span class="w"&gt; &lt;/span&gt;a54ee70b0ec9047c2083f77b9f9175e8e8edcac998e3be8d395009255a6a03f6
&lt;span class="w"&gt;              &lt;/span&gt;Padre:&lt;span class="w"&gt; &lt;/span&gt;8c36feebe7ea23654917f542eb5419b71426359a42165f53496c9d82049a6806
&lt;span class="w"&gt;             &lt;/span&gt;Asunto:&lt;span class="w"&gt; &lt;/span&gt;Remove&lt;span class="w"&gt; &lt;/span&gt;screenshot&lt;span class="w"&gt; &lt;/span&gt;locale&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;8a160109&lt;span class="o"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;              &lt;/span&gt;Fecha:&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;2024&lt;/span&gt;-06-09&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;07&lt;/span&gt;:22:27&lt;span class="w"&gt; &lt;/span&gt;+0000
&lt;/pre&gt;&lt;/div&gt;

&lt;h3 id="comparacion-entre-dnf-apt-y-flatpak"&gt;Comparación entre dnf, apt y flatpak&lt;/h3&gt;
&lt;p&gt;Flatpak está pensado para todo tipo de aplicaciones de escritorio y se esfuerza por ser tan neutral como sea posible en cuanto a los métodos que usa para compilar aplicaciones.&lt;/p&gt;
&lt;p&gt;Además, flatpak proporciona actualizaciones atómicas, rollback y consistencia post-instalación.&lt;/p&gt;
&lt;p&gt;El siguiente cuadro nos ayuda a ver las diferencias con los dos gestores populares de paquetes: &lt;em&gt;dnf&lt;/em&gt; y &lt;em&gt;apt&lt;/em&gt;.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Característica&lt;/th&gt;
&lt;th&gt;DNF&lt;/th&gt;
&lt;th&gt;APT&lt;/th&gt;
&lt;th&gt;Flatpak&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Distribución Principal&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Fedora, RHEL, CentOS&lt;/td&gt;
&lt;td&gt;Debian, Ubuntu&lt;/td&gt;
&lt;td&gt;Varias distribuciones de Linux&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Formato de Paquete&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;RPM&lt;/td&gt;
&lt;td&gt;DEB&lt;/td&gt;
&lt;td&gt;OSTree, Flatpak Bundle&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Gestión de Dependencias&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Manejo automático de dependencias&lt;/td&gt;
&lt;td&gt;Manejo automático de dependencias&lt;/td&gt;
&lt;td&gt;Manejo dentro del sandbox&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Aislamiento&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;Sí, aplicaciones ejecutadas en sandbox&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Instalación de Aplicaciones&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Desde repositorios específicos del sistema&lt;/td&gt;
&lt;td&gt;Desde repositorios específicos del sistema&lt;/td&gt;
&lt;td&gt;Desde repositorios centralizados (Flathub) y repositorios personalizados&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Actualizaciones&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;dnf update&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;apt update &amp;amp;&amp;amp; apt upgrade&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;flatpak update&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Permisos de Instalación&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Requiere permisos de root&lt;/td&gt;
&lt;td&gt;Requiere permisos de root&lt;/td&gt;
&lt;td&gt;Puede instalarse sin permisos de root&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Compatibilidad entre Distros&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Limitada a sistemas basados en RPM&lt;/td&gt;
&lt;td&gt;Limitada a sistemas basados en DEB&lt;/td&gt;
&lt;td&gt;Compatible con múltiples distribuciones&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Seguridad&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Depende de la configuración del sistema&lt;/td&gt;
&lt;td&gt;Depende de la configuración del sistema&lt;/td&gt;
&lt;td&gt;Sandboxing y permisos controlados por portales&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Facilidad de Uso&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Interfaz de línea de comandos&lt;/td&gt;
&lt;td&gt;Interfaz de línea de comandos&lt;/td&gt;
&lt;td&gt;Interfaz de línea de comandos y GUI&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Espacio de Disco&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Compartido entre aplicaciones&lt;/td&gt;
&lt;td&gt;Compartido entre aplicaciones&lt;/td&gt;
&lt;td&gt;Deduplicación y compartición de runtimes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Formato de Archivo Individual&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;No aplica&lt;/td&gt;
&lt;td&gt;No aplica&lt;/td&gt;
&lt;td&gt;Flatpak Bundle (&lt;code&gt;.flatpak&lt;/code&gt;)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Desventajas&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Depende de la política de la distro&lt;/td&gt;
&lt;td&gt;Dependencia de la política de la distro&lt;/td&gt;
&lt;td&gt;Las aplicaciones pueden tener un mayor tamaño inicial&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Compatibilidad con Aplicaciones Antiguas&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Sí, con soporte de versiones específicas&lt;/td&gt;
&lt;td&gt;Sí, con soporte de versiones específicas&lt;/td&gt;
&lt;td&gt;Generalmente más adecuado para nuevas aplicaciones&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Desarrollo y Mantenimiento&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Desarrollado por el proyecto Fedora&lt;/td&gt;
&lt;td&gt;Desarrollado por el proyecto Debian&lt;/td&gt;
&lt;td&gt;Desarrollado por el proyecto Flatpak, con apoyo de Red Hat y GNOME&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Adopción&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Usado por muchas distribuciones y entornos de escritorio&lt;/td&gt;
&lt;td&gt;Usado principalmente en Debian, Ubuntu y derivadas&lt;/td&gt;
&lt;td&gt;Usado en diversas distribuciones, especialmente para aplicaciones portátiles&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Ejemplo de Comando de Instalación&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;dnf install gedit&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;apt install gedit&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;flatpak install flathub org.gnome.Gedit&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;br&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="inconvenientes-para-usuarios-y-desarrolladores-de-aplicaciones-linux"&gt;Inconvenientes para usuarios y desarrolladores de aplicaciones Linux&lt;/h3&gt;
&lt;p&gt;Si bien Linux mejoró significativamente en cuando a usabilidad y experiencia de usuario en los últimos años, hay obstáculos tanto para usuarios como para desarrolladores:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Una aplicación para un entorno de escritorio en Linux se debe empaquetar para que esté disponible (como Debian, Fedora, Ubuntu, Arch Linux, etc.), y asegurarse de que cumpla con los requisitos específicos de cada sistema de paquetes (deb, rpm, etc.). Esto requiere un esfuerzo considerable para mantener múltiples versiones y asegurarse de que cada paquete funcione correctamente en su respectiva distribución. Todo esto &lt;strong&gt;demanda o más tiempo o bien más gente idónea dedicada en la tarea de crear y mantener paquetes&lt;/strong&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Si un usuario quiere usar aplicación que no está empaquetada en la distribución, tendrá que realizar &lt;strong&gt;algún paso extra&lt;/strong&gt;, que van desde operaciones relativamente sencillas como bajar un ejecutable (darle permisos, ubicarlo en un directorio del PATH, etc.), hasta &lt;strong&gt;procedimientos bastante más complejos y fuera del interés y conocimiento de un usuario final como puede ser compilar el programa&lt;/strong&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Una distribución de soporte a largo plazo como &lt;em&gt;Debian Stable&lt;/em&gt; no posee versiones actualizadas de la mayoría de las aplicaciones. Por lo tanto un usuario tiene que &lt;strong&gt;elegir estabilidad a cambio de software un tanto anticuado&lt;/strong&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Flatpak tiene como propósito justamente eliminar esas barreras&lt;/strong&gt;. Gracias a Flatpak un usuario podrá instalar una aplicación como &lt;a href="https://logseq.com/"&gt;Logseq&lt;/a&gt; aun cuando no esté incluida en los repositorios de su distribución, o instalar una versión reciente de &lt;em&gt;&lt;a href="https://kdenlive.org/en/"&gt;Kdenlive&lt;/a&gt;&lt;/em&gt; en Debian Stable.&lt;/p&gt;
&lt;p&gt;En la actualidad existen distribuciones con la mirada puesta en la innovación que se benefician de Flatpak, por ejemplo:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://vanillaos.org/"&gt;Vanilla OS&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://fedoraproject.org/atomic-desktops/"&gt;Fedora Atomic desktops&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.endlessos.org/os"&gt;Endless OS&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="caracteristicas-de-flatpak"&gt;Características de flatpak&lt;/h3&gt;
&lt;p&gt;Analicemos &lt;strong&gt;la app ONLYOFFICE&lt;/strong&gt; en flatpak:&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code literal-block"&gt;flatpak&lt;span class="w"&gt; &lt;/span&gt;info&lt;span class="w"&gt; &lt;/span&gt;org.onlyoffice.desktopeditors

ONLYOFFICE&lt;span class="w"&gt; &lt;/span&gt;Desktop&lt;span class="w"&gt; &lt;/span&gt;Editors&lt;span class="w"&gt; &lt;/span&gt;-&lt;span class="w"&gt; &lt;/span&gt;Office&lt;span class="w"&gt; &lt;/span&gt;productivity&lt;span class="w"&gt; &lt;/span&gt;suite

&lt;span class="w"&gt;                 &lt;/span&gt;ID:&lt;span class="w"&gt; &lt;/span&gt;org.onlyoffice.desktopeditors
&lt;span class="w"&gt;         &lt;/span&gt;Referencia:&lt;span class="w"&gt; &lt;/span&gt;app/org.onlyoffice.desktopeditors/x86_64/stable
&lt;span class="w"&gt;       &lt;/span&gt;Arquitectura:&lt;span class="w"&gt; &lt;/span&gt;x86_64
&lt;span class="w"&gt;               &lt;/span&gt;Rama:&lt;span class="w"&gt; &lt;/span&gt;stable
&lt;span class="w"&gt;            &lt;/span&gt;Versión:&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;8&lt;/span&gt;.0.1
&lt;span class="w"&gt;           &lt;/span&gt;Licencia:&lt;span class="w"&gt; &lt;/span&gt;AGPL-3.0-only
&lt;span class="w"&gt;             &lt;/span&gt;Origen:&lt;span class="w"&gt; &lt;/span&gt;flathub
&lt;span class="w"&gt;          &lt;/span&gt;Colección:&lt;span class="w"&gt; &lt;/span&gt;org.flathub.Stable
&lt;span class="w"&gt;        &lt;/span&gt;Instalación:&lt;span class="w"&gt; &lt;/span&gt;system
&lt;span class="w"&gt;          &lt;/span&gt;Instalada:&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;863&lt;/span&gt;,8&lt;span class="w"&gt; &lt;/span&gt;MB
Tiempo&lt;span class="w"&gt; &lt;/span&gt;de&lt;span class="w"&gt; &lt;/span&gt;ejecución:&lt;span class="w"&gt; &lt;/span&gt;org.freedesktop.Platform/x86_64/23.08
&lt;span class="w"&gt;                &lt;/span&gt;Sdk:&lt;span class="w"&gt; &lt;/span&gt;org.freedesktop.Sdk/x86_64/23.08

&lt;span class="w"&gt;             &lt;/span&gt;Commit:&lt;span class="w"&gt; &lt;/span&gt;c9f73db43c9639df65e597108eb4c685025fe484fde05f73f650d05f9ea28512
&lt;span class="w"&gt;              &lt;/span&gt;Padre:&lt;span class="w"&gt; &lt;/span&gt;a38db7bbfaa18eda6d26e9d113ce850c077bf533d9ebf5aa7e34988a58b91b28
&lt;span class="w"&gt;             &lt;/span&gt;Asunto:&lt;span class="w"&gt; &lt;/span&gt;Update&lt;span class="w"&gt; &lt;/span&gt;version&lt;span class="w"&gt; &lt;/span&gt;to&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;8&lt;/span&gt;.0.1&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="c1"&gt;#117) (a88ad400)&lt;/span&gt;
&lt;span class="w"&gt;              &lt;/span&gt;Fecha:&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;2024&lt;/span&gt;-03-04&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;15&lt;/span&gt;:34:56&lt;span class="w"&gt; &lt;/span&gt;+0000
&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;La aplicación &lt;strong&gt;ONLYOFFICE&lt;/strong&gt; usa como &lt;strong&gt;runtime&lt;/strong&gt;  org.freedesktop.Platform/x86_64/23.08. El runtime org.freedesktop.Platform/x86_64/23.08 es un entorno estandarizado y versionado que provee FreeDesktop.org para ejecutar aplicaciones de escritorio en Linux. Incluye una colección de librerías y servicios comunes, que aseguran la compatibilidad y la estabilidad entre las diferentes distribuciones de Linux. Este runtime está compilado específicamente para arquitecturas de 64-bit y fue actualizado o liberado en agosto de 2023. &lt;/p&gt;
&lt;p&gt;Los runtimes no dependen ni de una distribución ni de una versión en particular de una distribución. Y una aplicación instalada en flatpak será exactamente igual no importa si se instala en Debian o en Fedora. Una aplicación como GIMP, empaquetada como Flatpak, debería proporcionar la misma funcionalidad principal y experiencia de usuario tanto en Debian como en Fedora, dado que todas las dependencias y configuraciones críticas se gestionan dentro del contenedor Flatpak. Desde luego, hay diferencias potenciales: Si una aplicación Flatpak utiliza características específicas del sistema, como integraciones con servicios de notificación de escritorio, la forma en que estas integraciones funcionan puede variar ligeramente entre GNOME en Fedora y KDE en Debian.&lt;/p&gt;
&lt;p&gt;&lt;a class="image-reference" href="https://sergiobelkin.com/images/flatpak-runtimes.png"&gt;&lt;img src="https://sergiobelkin.com/images/flatpak-runtimes.thumbnail.png" alt="Existen diferentes runtimes para Flatpak, tales como freedesktop, GNOME, KDE y Elementary" title="Hacer clic para agrandar"&gt;&lt;/a&gt; &lt;/p&gt;
&lt;h3 id="objeciones-en-cuanto-a-la-seguridad"&gt;Objeciones en cuanto a la seguridad&lt;/h3&gt;
&lt;p&gt;Han existido críticas severas a la seguridad de flatpak, en especial por el sitio anónimo &lt;a href="https://flatkill.org/2020"&gt;Flatkill&lt;/a&gt;. El siguiente cuaddro es un resumen de los argumentos en contra y favor de Flatpak en cuanto a este tema:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;strong&gt;Objeción de Seguridad&lt;/strong&gt;&lt;/th&gt;
&lt;th&gt;&lt;strong&gt;Descripción&lt;/strong&gt;&lt;/th&gt;
&lt;th&gt;&lt;strong&gt;Respuesta / Acción Tomada&lt;/strong&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Sandboxing Ineficaz&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Muchas aplicaciones en Flathub tienen permisos amplios como &lt;code&gt;filesystem=host&lt;/code&gt; o &lt;code&gt;filesystem=home&lt;/code&gt;, lo que permite acceso completo al sistema de archivos del usuario.&lt;/td&gt;
&lt;td&gt;Flatpak ha mejorado la transparencia sobre los permisos de las aplicaciones y trabaja en fortalecer el modelo de sandboxing. Se han introducido portales para permitir el acceso controlado a los recursos del sistema. &lt;a href="https://docs.flatpak.org/en/latest/using-flatpak.html#sandboxes-and-permissions"&gt;Flatpak Documentation&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Actualizaciones de Seguridad Retrasadas&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Algunas aplicaciones y runtimes en Flatpak no reciben actualizaciones de seguridad oportunas, lo que deja a los usuarios expuestos a vulnerabilidades conocidas.&lt;/td&gt;
&lt;td&gt;La herramienta flatpak-external-data-checker automatiza la verificación de fuentes externas y la generación de solicitudes de fusión cuando se encuentran actualizaciones. Al implementar f-e-d-c, los desarrolladores pueden asegurar que las aplicaciones en Flathub se mantengan actualizadas más fácilmente y de manera más eficiente, lo que reduce el tiempo de espera para las actualizaciones de los usuarios finales&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Integración Limitada del Escritorio&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Problemas con la integración de aplicaciones Flatpak en escritorios Linux, como la falta de soporte para configuraciones de fuentes y temas de escritorio.&lt;/td&gt;
&lt;td&gt;Se han mejorado los mecanismos de integración de escritorio, incluyendo mejor soporte para fuentes y temas en KDE y GNOME. Flatpak sigue trabajando en mejorar la compatibilidad con configuraciones del sistema host.)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Explotación Local de Root&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Riesgo de explotación de root local debido a aplicaciones Flatpak instaladas con permisos &lt;strong&gt;suid&lt;/strong&gt;.&lt;/td&gt;
&lt;td&gt;Flatpak utiliza nuevas APIs de libostree para rechazar cualquier archivo con permisos suid o de escritura mundial al instalar aplicaciones.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Gestión de Permisos Confusa para el Usuario&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Los usuarios pueden ser engañados por íconos y descripciones que indican un falso sentido de seguridad sobre las aplicaciones sandboxed.&lt;/td&gt;
&lt;td&gt;Flatpak ha mejorado la interfaz de usuario para mostrar de manera más clara los permisos que solicita cada aplicación, ayudando a los usuarios a tomar decisiones informadas sobre las aplicaciones que instalan.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;br&gt;
&lt;a class="image-reference" href="https://sergiobelkin.com/images/flathub.png"&gt;&lt;img src="https://sergiobelkin.com/images/flathub.thumbnail.png" alt="Sitio de Flathub mostrando las advertencias pertinentes a una determinada aplicación" title="Haga clic para agrandar"&gt;&lt;/a&gt; &lt;/p&gt;
&lt;h3 id="como-hace-flatpak-para-no-pedirle-a-un-usuario-de-un-grupo-administrativo-que-se-autentique-nuevamente"&gt;¿Cómo hace flatpak para no pedirle a un usuario de un grupo administrativo que se autentique nuevamente?&lt;/h3&gt;
&lt;p&gt;En el &lt;a href="https://sergiobelkin.com/posts/entendiendo-polkit/"&gt;post anterior&lt;/a&gt; vimos como funciona polkit. Flatpak se vale de polkit para facilitar la instalación de paquetes por parte de usuarios con permisos administrativos. Basta con mirar el archivo &lt;code&gt;/usr/share/polkit-1/rules.d/org.freedesktop.Flatpak.rules&lt;/code&gt;.&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code literal-block"&gt;&lt;span class="nx"&gt;polkit&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;addRule&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;function&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;action&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;subject&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nx"&gt;action&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;id&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"org.freedesktop.Flatpak.app-install"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;||&lt;/span&gt;
&lt;span class="w"&gt;         &lt;/span&gt;&lt;span class="nx"&gt;action&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;id&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"org.freedesktop.Flatpak.runtime-install"&lt;/span&gt;&lt;span class="o"&gt;||&lt;/span&gt;
&lt;span class="w"&gt;         &lt;/span&gt;&lt;span class="nx"&gt;action&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;id&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"org.freedesktop.Flatpak.app-uninstall"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;||&lt;/span&gt;
&lt;span class="w"&gt;         &lt;/span&gt;&lt;span class="nx"&gt;action&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;id&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"org.freedesktop.Flatpak.runtime-uninstall"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;||&lt;/span&gt;
&lt;span class="w"&gt;         &lt;/span&gt;&lt;span class="nx"&gt;action&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;id&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"org.freedesktop.Flatpak.modify-repo"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="nx"&gt;subject&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;active&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;subject&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;local&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="nx"&gt;subject&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;isInGroup&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"wheel"&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;polkit&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Result&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;YES&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;polkit&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Result&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;NOT_HANDLED&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="nx"&gt;polkit&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;addRule&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;function&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;action&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;subject&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;action&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;id&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"org.freedesktop.Flatpak.override-parental-controls"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;polkit&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Result&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;AUTH_ADMIN&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;polkit&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Result&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;NOT_HANDLED&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Este archivo tiene dos reglas:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Permite a los usuarios del grupo "wheel", que están loogoueados localmente y tienen una sesión activa instalar, desinstalar, y modificar aplicaciones y repositorios sin autenticación adicional.&lt;/li&gt;
&lt;li&gt;No se pueden pasar por arriba de los controles parentales sin autenticarse con una cuenta de usuario administrativa.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Para ambos casos, si las condiciones no se cumplen, el resultado dependerá de otras reglas o de la regla predeterminada.&lt;/p&gt;
&lt;h3 id="para-terminar"&gt;Para terminar...&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Flatpak&lt;/strong&gt; elimina barreras y obstáculos tanto para desarrolladores como para usuarios finales. Para los primeros, significa les ofrece la posibilidad de poner aplicaciones disposición de cualquier distribución de Linux. Para los segundos representa una mayor facilidad para obtener los programas que están necesitando.&lt;/p&gt;
&lt;p&gt;&lt;a class="image-reference" href="https://sergiobelkin.com/images/Discover-Flatpak.png"&gt;&lt;img src="https://sergiobelkin.com/images/Discover-Flatpak.thumbnail.png" alt="Discover mostrando aplicaciones disonibles en Flathub" title="Haga clic para agrandar"&gt;&lt;/a&gt; &lt;/p&gt;
&lt;h4 id="fuentes-y-mas-recursos"&gt;Fuentes y Más Recursos&lt;/h4&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href="https://docs.flatpak.org/en/latest/using-flatpak.html"&gt;Flatpak Documentation - Using Flatpak&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://flathub.org"&gt;Flathub&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://flatkill.org/2020/"&gt;Flatkill - Flatpak, a security nightmare&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://tesk.page/2021/02/11/response-to-flatkill-org/"&gt;Respuestas a objecioones planteadas en Flatkill&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://docs.fedoraproject.org/en-US/flatpak/"&gt;Flatpak en Fedora&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;</description><category>flatpak</category><category>seguridad</category><guid>https://sergiobelkin.com/posts/que-es-flatpak/</guid><pubDate>Sat, 22 Jun 2024 20:11:07 GMT</pubDate></item><item><title>Entendiendo Polkit</title><link>https://sergiobelkin.com/posts/entendiendo-polkit/</link><dc:creator>sebelk</dc:creator><description>&lt;div&gt;&lt;h3 id="introduccion"&gt;Introducción&lt;/h3&gt;
&lt;p&gt;El esquema de permisos en Linux es simple:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Un superusuario con todos los poderes para leer, modificar y ejecutar todo.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;El resto de los usuarios con permisos limitados.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Es decir, la clasificación de usuarios en tres categorías, el famoso UGO (User, Group, Others) y el trío de permisos: rwx (read, write y execution).&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Pero esa simpleza tiene sus limitaciones, &lt;a href="https://sergiobelkin.com/posts/2008/07/06/permisos/"&gt;como vimos ya anteriormente&lt;/a&gt;, con el paso del tiempo se han ideado maneras de hacer esos permisos más granulares y que superusuario root pueda delegar atribuciones.&lt;/p&gt;
&lt;p&gt;Una herramienta muy importante en este sentido es &lt;strong&gt;polkit&lt;/strong&gt; (antiguamente conocido como PolicyKit). En este post vamos a explorar para develar qué es polkit, como funciona, y como se diferencia de sudo. Además, en el próximo post, veremos la relación que tiene con flatpak.&lt;/p&gt;
&lt;h3 id="que-es-polkit"&gt;¿Qué es polkit?&lt;/h3&gt;
&lt;p&gt;&lt;a class="image-reference" href="https://sergiobelkin.com/images/polkit-featured.webp"&gt;&lt;img src="https://sergiobelkin.com/images/polkit-featured.thumbnail.webp" alt="Polkit"&gt;&lt;/a&gt; &lt;/p&gt;&lt;p&gt;&lt;a href="https://sergiobelkin.com/posts/entendiendo-polkit/"&gt;Leer más…&lt;/a&gt; (quedan 9 minutos de lectura)&lt;/p&gt;&lt;/div&gt;</description><category>seguridad</category><guid>https://sergiobelkin.com/posts/entendiendo-polkit/</guid><pubDate>Sat, 15 Jun 2024 18:56:09 GMT</pubDate></item><item><title>Tu propia nube</title><link>https://sergiobelkin.com/posts/tu-propia-nube/</link><dc:creator>sebelk</dc:creator><description>&lt;h3 id="que-es-syncthing"&gt;¿Qué es Syncthing?&lt;/h3&gt;
&lt;p&gt;Imaginemos el siguiente escenario: una aplicación de notas que usamos en nuestra computadora personal. ¿Cómo hacemos para mantener esas notas sincronizadas con el celuar? O por ejemplo queremos compartir esas notas con alguien de la familia. ¿No es demasiado recurrir a la Nube para eso? Es decir tenemos notas, fotos, etc. privadas que no queremos recurrir a un tercero para que se sitúe como mediador para que esos documentos estén sincronizados y compartidos.
A fin de cuentas, la intimidad es un valor... ¿La intimidad es un valor? Bueno, muchos en pleno siglo XXI creemos que lo sigue siendo.
De modo que si considerás la intimidad como un valor a cuidar, la aplicación Syncthing te resultará de mucha utilidad.&lt;/p&gt;
&lt;p&gt;&lt;a class="image-reference" href="https://sergiobelkin.com/images/dayne-topkin-u5Zt-HoocrM-unsplash.jpg"&gt;&lt;img src="https://sergiobelkin.com/images/dayne-topkin-u5Zt-HoocrM-unsplash.thumbnail.jpg" alt=""&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;Foto de &lt;a href="https://unsplash.com/es/@dtopkin1?utm_source=unsplash&amp;amp;utm_medium=referral&amp;amp;utm_content=creditCopyText"&gt;Dayne Topkin&lt;/a&gt; en &lt;a href="https://unsplash.com/es/s/fotos/privacy?utm_source=unsplash&amp;amp;utm_medium=referral&amp;amp;utm_content=creditCopyText"&gt;Unsplash&lt;/a&gt;&lt;/p&gt;
&lt;h3 id="que-tecnologia-usa-syncthing"&gt;¿Qué tecnología usa Syncthing?&lt;/h3&gt;
&lt;p&gt;Synthing usa BEP, un protocolo que se usa entre dos o más dispositivos para formar un cluster. Cada dispositivo intenta tener sus carpetas sincronizadas con la versión más reciente del cluster.
Toda la comunicación se asegura mediante TLS con &lt;strong&gt;Perfect Forward Secrecy&lt;/strong&gt; para impedir que los datos sean descifrados, sea en sesiones pasadas o futuras, aun si las claves privadas usadas en una sesión individual se roban en algún momento.&lt;/p&gt;
&lt;h3 id="que-necesitamos-instalar"&gt;¿Qué necesitamos instalar?&lt;/h3&gt;
&lt;p&gt;En primer lugar el paquete syncthing, por ejemplo:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;dnf install syncthing&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Este paquete tiene el binario para lanzar el servidor.&lt;/p&gt;
&lt;p&gt;Como usuario se puede habilitar y lanzar con:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;systemctl --user enable --now syncthing.service&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Se puede instalar en en teléfonos móviles con Android tanto desde el &lt;em&gt;Play Store&lt;/em&gt; como desde &lt;em&gt;&lt;a href="https://f-droid.org/"&gt;el repositorio F-Droid&lt;/a&gt;&lt;/em&gt;.&lt;/p&gt;
&lt;h3 id="como-realizamos-la-configuracion"&gt;¿Cómo realizamos la configuración?&lt;/h3&gt;
&lt;p&gt;La configuración se puede realizar mediante el acceso a la interfaz web que escucha de manera predeterminada en 127.0.0.1:8384. &lt;/p&gt;
&lt;p&gt;&lt;a class="image-reference" href="https://sergiobelkin.com/images/syncthing-webgui.png"&gt;&lt;img src="https://sergiobelkin.com/images/syncthing-webgui.thumbnail.png" alt=""&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;Es muy importante elegir un dispositivo que funcione como &lt;em&gt;presentador&lt;/em&gt; o &lt;em&gt;introducer&lt;/em&gt;. El presentador es el encargado de agregar automáticamente otros dispositivos. Solamente debe haber un presentador por cluster.&lt;/p&gt;
&lt;p&gt;Si usamos firewalld, se pueden habilitar los puertos que usa synthing:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;firewall-cmd --add-service=syncthing --permanent &amp;amp;&amp;amp; firewall --reload&lt;/code&gt;&lt;/p&gt;
&lt;h3 id="paquetes-adicionales"&gt;Paquetes adicionales&lt;/h3&gt;
&lt;p&gt;Además, hay otros paquetes muy útiles que se puede instalar usando el repositorio &lt;a href="https://download.opensuse.org/repositories/home:/mkittler/"&gt;home_mkittler&lt;/a&gt;:&lt;/p&gt;
&lt;h4 id="syncthingfileitemaction"&gt;syncthingfileitemaction&lt;/h4&gt;
&lt;p&gt;&lt;a class="image-reference" href="https://sergiobelkin.com/images/syncthingfileitemaction.png"&gt;&lt;img src="https://sergiobelkin.com/images/syncthingfileitemaction.thumbnail.png" alt="Opciones de syncthing en Dolphin"&gt;&lt;/a&gt;
Añade opciones al menú contextual en Dolphin.&lt;/p&gt;
&lt;h4 id="syncthingplasmoid"&gt;syncthingplasmoid&lt;/h4&gt;
&lt;p&gt;&lt;a class="image-reference" href="https://sergiobelkin.com/images/syncthingplasmoid.png"&gt;&lt;img src="https://sergiobelkin.com/images/syncthingplasmoid.thumbnail.png" alt="Plasmoid de syncthing"&gt;&lt;/a&gt; 
Es un módulo de plasma que permite visualizar, controlar y configurar Syncthing.    &lt;/p&gt;
&lt;h4 id="syncthingtray"&gt;syncthingtray&lt;/h4&gt;
&lt;p&gt;&lt;a class="image-reference" href="https://sergiobelkin.com/images/syncthingtray.png"&gt;&lt;img src="https://sergiobelkin.com/images/syncthingtray.thumbnail.png" alt="Acceso a syncthing desde la bandeja del sistema"&gt;&lt;/a&gt; 
Es similar a syncthingplasmoid pero solamente se ancla en la bandeja del sistema.  &lt;/p&gt;
&lt;h3 id="conclusion"&gt;Conclusión&lt;/h3&gt;
&lt;p&gt;Si bien Synthing no debe entenderse como una solución de fileserver corporativa pero alcanza con creces para montar de manera rápida una nube personal, preservando principios fundamentales de seguridad. &lt;/p&gt;
&lt;h3 id="referencias-y-mas-informacion"&gt;Referencias y más información&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://syncthing.net/"&gt;Syncthing&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://docs.syncthing.net/specs/bep-v1.html#bep-v1"&gt;Block Exchange Protocol v1 — Syncthing documentation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://privacysavvy.com/security/safe-browsing/perfect-forward-secrecy/"&gt;Perfect forward secrecy: What it is, how it works, all about it - PrivacySavvy&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description><category>privacidad</category><guid>https://sergiobelkin.com/posts/tu-propia-nube/</guid><pubDate>Fri, 13 May 2022 22:57:08 GMT</pubDate></item><item><title>Ventoy: Herramienta para crear USB de arranque multi-distro</title><link>https://sergiobelkin.com/posts/ventoy-herramienta-para-crear-usb-de-arranque-multi-distro/</link><dc:creator>sebelk</dc:creator><description>&lt;h4 id="que-es-ventoy"&gt;¿Qué es Ventoy?&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;Ventoy&lt;/strong&gt; es una herramienta de licencia libre para crear discos de arranque USB. Existen unas cuantas herramientas que lo hacen:&lt;/p&gt;
&lt;p&gt;&lt;a class="image-reference" href="https://sergiobelkin.com/images/brett-jordan-E1por_SGvJE-unsplash.jpg"&gt;&lt;img src="https://sergiobelkin.com/images/brett-jordan-E1por_SGvJE-unsplash.thumbnail.jpg" alt="Múltiples distros en el arranque de Linux"&gt;&lt;/a&gt; &lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Fedora Media Writer&lt;/li&gt;
&lt;li&gt;UNetbootin&lt;/li&gt;
&lt;li&gt;YUMI&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id="entonces-por-que-es-interesante-esta-herramienta"&gt;Entonces: ¿Por qué es interesante esta herramienta?&lt;/h4&gt;
&lt;p&gt;A diferencia de otras herramientas, Ventoy puede arrancar más de una distribución de Linux. Pero eso no es todo, con apenas copiar el archivo ISO al disco USB ya alcanza. No hay necesidad de utilizar una herramienta adicional. 
Lo hace eso sí con un costo ponderable: es necesario formatear el dispositivo de manera que probablemente quieras hacer un backup antes de usarla. Sin embargo, una vez que el programa crea las dos particiones necesarias se puede sin mayores problemas e incluso actualizar Ventoy sin pérdida de datos en la unidad.&lt;/p&gt;
&lt;p&gt;&lt;a class="image-reference" href="https://sergiobelkin.com/images/parted-ventoy.png"&gt;&lt;img src="https://sergiobelkin.com/images/parted-ventoy.thumbnail.png" alt="Particiones en un disco con Ventoy"&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;Soporta distintos tipos de firmware (BIOS y UEFI). Tiene más de 620 archivos de ISO's probados y más del 90% de distros en DistroWatch.com están soportadas.&lt;/p&gt;
&lt;p&gt;Ventoy puede descargarse de 3 maneras:
- Como ejecutable de Windows
- Como script para Linux
- Como LiveCD (está pensado solamente para facilitarle las cosas a usuarios de Windows)&lt;/p&gt;
&lt;h4 id="plugins"&gt;Plugins&lt;/h4&gt;
&lt;p&gt;Tiene distintos plugins que proporcionan más funcionalides, algunas de ellas son: &lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Instalación de sistemas operativos tales como RHEL, Debian, Ubunut y SUSE en modo no-interactivo. El plugin vtoyboot sirve para arrancar desde un disco virtual.&lt;/li&gt;
&lt;li&gt;Guardar cambios realizados en sistemas live.&lt;/li&gt;
&lt;li&gt;Además, podemos copiar un archivos de disco virtual (vdi, raw, vhd) y también estará disponible en el menú de arranque. &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;En último caso es necesario que el disco sea de tamaño fijo, bajar e instalar el sistema operativo invitado un script que generará un nuevo initramfs y un archivo de configuración en algún lugar subdirectorio de /etc. Además, probablemente sea necesario realizar algún tipo de ajuste en BIOS O UEFI.&lt;/p&gt;
&lt;p&gt;&lt;a class="image-reference" href="https://sergiobelkin.com/images/mint_en_ventoy.png"&gt;&lt;img src="https://sergiobelkin.com/images/mint_en_ventoy.thumbnail.png" alt="Mint desde disco virtual gracias a Ventoy"&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;En la figura de arriba se puede ver que Ventoy usa la técnica de Device Mapper para poder acceder a las particiones del disco virtual. Es interesante porque el disco virtual usa el hardware real de la máquina, lo cual puede ser útil para realizar algún tipo de pruebas, rescate de datos, análisis forense o debugging.&lt;/p&gt;
&lt;h4 id="conclusion"&gt;Conclusión&lt;/h4&gt;
&lt;p&gt;En la actualidad el método para arrancar desde archivos ISO desde GRUB2 puede ser un poco complicado, y no está exento de problemas. Ventoy facilita muchísimo las cosas y es superior a otras herramientas del mismo tipo. El plugin para arrancar discos virtuales está muy bien, la única limitación más importante está dada por la imposibilidad de usar discos con &lt;em&gt;thin provisioning&lt;/em&gt; y que por lo tanto el tamaño del disco USB puede resultar limitado.
Finalmente, Ventoy da la impresión de ser un emprendimiento serio que se basa a su vez en otros proyectos libres muy populares en el mundo Linux.&lt;/p&gt;
&lt;h4 id="enlaces-utiles"&gt;Enlaces útiles&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.ventoy.net/en/index.html"&gt;Ventoy&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://sergiobelkin.com/posts/2015/12/05/instalar-desde-un-archivo-iso/"&gt;Instalar Linux desde un archivo ISO | Mixturas Resilientes&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://en.wikipedia.org/wiki/Device_mapper"&gt;Device mapper - Wikipedia&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description><category>herramientas</category><guid>https://sergiobelkin.com/posts/ventoy-herramienta-para-crear-usb-de-arranque-multi-distro/</guid><pubDate>Sun, 07 Mar 2021 19:16:26 GMT</pubDate></item><item><title>La gestión de archivos en tiempos de DevOps</title><link>https://sergiobelkin.com/posts/y-si-combinamos-ls-tree-y-un-administrador-de-archivos/</link><dc:creator>sebelk</dc:creator><description>&lt;p&gt;Escribía en un artículo anterior sobre &lt;a href="https://sergiobelkin.com/posts/ranger/"&gt;ranger&lt;/a&gt;. Los gestores de archivos han sido son muy importantes.&lt;/p&gt;
&lt;p&gt;&lt;a class="image-reference" href="https://sergiobelkin.com/images/undraw_file_manager_j85s.png"&gt;&lt;img src="https://sergiobelkin.com/images/undraw_file_manager_j85s.thumbnail.png" alt="Gestores d archivos"&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;En los comienzos de la informática moderna, los gestores de archivos se llamaban editores de directorio. En 1974 Stan Kugell crea el programa llamado DIRED. En la actualidad una implementación de Dired que corre en &lt;em&gt;Emacs&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;&lt;a class="image-reference" href="https://sergiobelkin.com/images/dired-emacs.png"&gt;&lt;img src="https://sergiobelkin.com/images/dired-emacs.thumbnail.png" alt="Dired en Emacs"&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;En los '80s aparecería Norton Commander. Miguel de Icaza creó en 1998 el clon tan popular llamado Midnight Commander.&lt;/p&gt;
&lt;p&gt;El comando &lt;strong&gt;ls&lt;/strong&gt; viene desde los tiempos del sistema operativo UNIX de AT&amp;amp;T, naturalmente en Linux usamos la implementación libre de las coreutils. El comando ls sirve para ver el contenido de directorio y ver propiedades básicas de los archivos. Si queremos ver el árbol de directorios podemos usar tree:&lt;/p&gt;
&lt;p&gt;&lt;a class="image-reference" href="https://sergiobelkin.com/images/dired-emacs.png"&gt;&lt;img src="https://sergiobelkin.com/images/dired-emacs.thumbnail.png" alt="El comando tree"&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;Benjamin Sago creó en 2014 una herramienta para reemplazar a ls, llamada &lt;a href="https://the.exa.website/"&gt;exa&lt;/a&gt;:&lt;/p&gt;
&lt;p&gt;&lt;a class="image-reference" href="https://sergiobelkin.com/images/exa.png"&gt;&lt;img src="https://sergiobelkin.com/images/exa.thumbnail.png" alt=""&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;Este programa cuenta con opciones de visualización y filtrado que no están en &lt;code&gt;ls&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;La herramienta &lt;a href="https://dystroy.org/broot/"&gt;Broot&lt;/a&gt; o bien abreviada &lt;strong&gt;br&lt;/strong&gt; combina funcionalidades de ls, tree y de gestores de archivos. El programa fue creado por &lt;a href="https://dystroy.org/"&gt;Denys Séguret&lt;/a&gt; y al igual que &lt;em&gt;exa&lt;/em&gt;, está escrito en &lt;a href="https://www.rust-lang.org/"&gt;Rust Programming Language&lt;/a&gt;. Aquí vemos como esta herramienta sintetiza las 3 funcionalidades:&lt;/p&gt;
&lt;p&gt;Es así como contamos tanto con herramientas tradicionales como otras más nuevas adaptadas más a estos tiempos para ver y manejar archivos.&lt;/p&gt;
&lt;h4 id="fuentes-y-mas-recursos"&gt;Fuentes y más recursos&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.tldp.org/LDP/LG/issue48/fischer.html"&gt;A Brief History of the 'ls' command LG #48&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://en.wikipedia.org/wiki/File_manager#cite_note-minidisk-9"&gt;File manager - Wikipedia&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://en.wikipedia.org/wiki/Dired"&gt;Dired - Wikipedia&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description><category>terminal</category><guid>https://sergiobelkin.com/posts/y-si-combinamos-ls-tree-y-un-administrador-de-archivos/</guid><pubDate>Sun, 12 Jan 2020 20:43:55 GMT</pubDate></item><item><title>Manejo eficiente de marcadores</title><link>https://sergiobelkin.com/posts/manejo-eficiente-de-marcadores/</link><dc:creator>sebelk</dc:creator><description>&lt;p&gt;Hace algún tiempo les había presentado a &lt;a href="http://sergiobelkin.com/posts/2017/10/22/buku-reduciendo-el-ruido-de-la-web/"&gt;buku&lt;/a&gt;, un gestor de línea de comandos de marcadores. 
Usar Firefox y buku rompe un poco el flujo de trabajo al tener que ir a una línea de comandos. Entonces aquí es cuando &lt;a href="https://github.com/SamHH/bukubrow-webext"&gt;bukubrow&lt;/a&gt;, un complemento escrito por &lt;a href="https://samhh.com"&gt;Sam A. Horvath-Hunt&lt;/a&gt; viene al rescate. Se trata de una extensión para Firefox que funciona como interfaz gráfica de buku:&lt;/p&gt;
&lt;p&gt;&lt;a class="image-reference" href="https://sergiobelkin.com/images/20190817093544989_691879312.png"&gt;&lt;img src="https://sergiobelkin.com/images/20190817093544989_691879312.thumbnail.png" alt="buku"&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;Con esta extensión podemos buscar, agregar, editar, borrar marcadores, abrirlos en ventanas y/o pestañas. Todos eso se puede hacer o bien accediendo al botón en la barra de herramientas como haciendo clic derecho sobre la página deseada. Es importante tener en cuenta que es necesario bajar e instalar la &lt;a href="https://github.com/SamHH/bukubrow-host"&gt;bukubrow-host&lt;/a&gt; que sirve para conectar buku con la extensión. Esta aplicación usa un archivo &lt;a href="http://www.json.org/json-es.html"&gt;json&lt;/a&gt; para conectarse con la extensión de Firefox:&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code literal-block"&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nt"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"com.samhh.bukubrow"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nt"&gt;"description"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"Bukubrow host for the Firefox extension"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nt"&gt;"path"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"/usr/local/bin/bukubrow-linux-x64"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nt"&gt;"type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"stdio"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nt"&gt;"allowed_extensions"&lt;/span&gt;&lt;span class="p"&gt;:[&lt;/span&gt;&lt;span class="s2"&gt;"bukubrow@samhh.com"&lt;/span&gt;&lt;span class="p"&gt;]}&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;De esta manera podemos manipular la base de buku directamente desde Firefox :wink:&lt;/p&gt;
&lt;p&gt;Más información:
&lt;a href="https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/Native_messaging"&gt;Native messaging - Mozilla | MDN&lt;/a&gt;&lt;/p&gt;</description><category>firefox</category><guid>https://sergiobelkin.com/posts/manejo-eficiente-de-marcadores/</guid><pubDate>Sat, 17 Aug 2019 22:11:44 GMT</pubDate></item><item><title>Tabla comparativa Microsoft Windows, OS X y Linux</title><link>https://sergiobelkin.com/posts/tabla-comparativa-microsoft-windows-os-x-y-linux/</link><dc:creator>sebelk</dc:creator><description>&lt;p&gt;Esta es una tabla comparativa resumida de los 3 sistemas operativos principales en la actualidad. Si bien Wikipedia cuenta con una muy buena, decidí hacer una resumida con los datos que a mí entender son los más buscados e interesantes. &lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;Windows&lt;/th&gt;
&lt;th&gt;OS X&lt;/th&gt;
&lt;th&gt;Linux&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Licencia&lt;/td&gt;
&lt;td&gt;Propietaria&lt;/td&gt;
&lt;td&gt;Propietaria&lt;/td&gt;
&lt;td&gt;Libre&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Tipo de desarrollo&lt;/td&gt;
&lt;td&gt;Código fuente cerrado&lt;/td&gt;
&lt;td&gt;Código fuente cerrado (con componentes libres)&lt;/td&gt;
&lt;td&gt;Código fuente abierto&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Kernel&lt;/td&gt;
&lt;td&gt;Híbrido&lt;/td&gt;
&lt;td&gt;Híbrido&lt;/td&gt;
&lt;td&gt;Monolítico&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Año de creación&lt;/td&gt;
&lt;td&gt;1985&lt;/td&gt;
&lt;td&gt;2001&lt;/td&gt;
&lt;td&gt;1991&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;GUI (Interfaz gráfica de usuario)&lt;/td&gt;
&lt;td&gt;Windows Shell&lt;/td&gt;
&lt;td&gt;Aqua&lt;/td&gt;
&lt;td&gt;Hay múltiples para elegir&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Idiomas soportados&lt;/td&gt;
&lt;td&gt;138&lt;/td&gt;
&lt;td&gt;38&lt;sup id="fnref:locales"&gt;&lt;a class="footnote-ref" href="https://sergiobelkin.com/posts/tabla-comparativa-microsoft-windows-os-x-y-linux/#fn:locales"&gt;1&lt;/a&gt;&lt;/sup&gt;&lt;/td&gt;
&lt;td&gt;Más de 500&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Principales Sistemas de archivos&lt;/td&gt;
&lt;td&gt;NTFS,FAT32, exFAT&lt;/td&gt;
&lt;td&gt;HFS, HFS Plus, Apple FIle System&lt;/td&gt;
&lt;td&gt;ext4, xfs, zfs&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Versiones para teléfonos celulares&lt;/td&gt;
&lt;td&gt;Windows CE&lt;/td&gt;
&lt;td&gt;iOS&lt;/td&gt;
&lt;td&gt;Android, Tizen, Ubuntu Touch, SailfishOS, Plasma Mobile, etc.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Arquitecturas soportadas&lt;/td&gt;
&lt;td&gt;ARM, IA-32, ARM64, Itanium, x86-64, DEC Alpha, MIPS, PowerPC&lt;/td&gt;
&lt;td&gt;x86_64&lt;/td&gt;
&lt;td&gt;Alpha, ARC, ARM, C6x, H8/300, Hexagon, Itanium, m68k, Microblaze, MIPS, NDS32, Nios II, OpenRISC, PA-RISC, PowerPC, RISC-V, s390, SuperH, SPARC, Unicore32, x86, Xtensa&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Fuente y más información:
- &lt;a href="https://en.wikipedia.org/wiki/MacOS"&gt;macOS - Wikipedia&lt;/a&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://en.wikipedia.org/wiki/Microsoft_Windows"&gt;Microsoft Windows - Wikipedia&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://en.wikipedia.org/wiki/Linux"&gt;Linux - Wikipedia&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://en.wikipedia.org/wiki/Comparison_of_operating_systems"&gt;Comparison of operating systems - Wikipedia&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="footnote"&gt;
&lt;hr&gt;
&lt;ol&gt;
&lt;li id="fn:locales"&gt;
&lt;p&gt;Es una estimación aproximada de acuerdo a &lt;a href="https://www.debian.org/international/l10n/po/"&gt;Debian -- Archivos PO en Debian, para cada idioma&lt;/a&gt;. Tener en cuenta que Linux es heterogéneo: depende del software referido y también de la distribución. &lt;a class="footnote-backref" href="https://sergiobelkin.com/posts/tabla-comparativa-microsoft-windows-os-x-y-linux/#fnref:locales" title="Jump back to footnote 1 in the text"&gt;↩&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;</description><category>sistemas-operativos</category><guid>https://sergiobelkin.com/posts/tabla-comparativa-microsoft-windows-os-x-y-linux/</guid><pubDate>Mon, 22 Jul 2019 23:02:56 GMT</pubDate></item><item><title>10 extensiones recomendadas para Firefox</title><link>https://sergiobelkin.com/posts/10-extensiones-recomendadas-para-firefox/</link><dc:creator>sebelk</dc:creator><description>&lt;p&gt;Estas son 10 extensiones que recomiendo para usar en &lt;strong&gt;Firefox&lt;/strong&gt;:&lt;/p&gt;
&lt;p&gt;&lt;a class="image-reference" href="https://sergiobelkin.com/images/20190719203422576_1178890626.png"&gt;&lt;img src="https://sergiobelkin.com/images/20190719203422576_1178890626.thumbnail.png" alt="Complementos de Firefox"&gt;&lt;/a&gt; &lt;/p&gt;
&lt;h3 id="1-copy-as-markdown"&gt;1 Copy as Markdown&lt;/h3&gt;
&lt;p&gt;Esta extensión permite copiar un link como markdown, es realmente útil para luego pegarlo en cualquier editor que soporte ese lenguaje.&lt;/p&gt;
&lt;h3 id="2-duckduckgo-privacy-essentials"&gt;2 DuckDuckGo Privacy Essentials&lt;/h3&gt;
&lt;p&gt;Esta extensión proporciona el grado de privacidad que posee un sitio de acuerdo a :
- Si es una conexión cifrada
- Cantidad de rastreadores
- Prácticas de privacidad&lt;/p&gt;
&lt;h3 id="3-markdown-here"&gt;3 Markdown Here&lt;/h3&gt;
&lt;p&gt;Esta extensión permite escribir en cajas de texto formateado en lenguaje markdown y luego con un clic hacer que lo convierta en html interpretado&lt;/p&gt;
&lt;h3 id="4-max-tabs-web-extension"&gt;4 Max Tabs (Web Extension)&lt;/h3&gt;
&lt;p&gt;Muchas veces corremos la tentación de tener infinidad de pestañas abiertas, esto además de consumir recursos, resulta caótico y nos saca de foco. Esta extensión pone un límite a la cantidad de solapas abiertas.&lt;/p&gt;
&lt;h3 id="5-plasma-integration"&gt;5 Plasma Integration&lt;/h3&gt;
&lt;p&gt;Logra que Firefox y el entorno de escritorio Plasma trabajen mejor en conjunto permitiendo:
- Manejar los controles multimedia
- Enviar archivos al teléfono celular usando KDE Connect
- Mostrar archivos descargados&lt;/p&gt;
&lt;h3 id="6-save-to-read"&gt;6 Save-to-Read&lt;/h3&gt;
&lt;p&gt;Aunque parecería algo trivial hace algo muy útil con unos clics guarda las páginas que deseamos leer en otro momento en carpeta especial de los Marcadores.&lt;/p&gt;
&lt;h3 id="7-privacybadger"&gt;7 PrivacyBadger&lt;/h3&gt;
&lt;p&gt;Esta extensión es un proyecto de la &lt;a href="https://www.eff.org/"&gt;Electronic Frontier Foundation&lt;/a&gt; se complementa de manera genial con la de DuckDuckGo ya bloquea de manera automática cookies y/o dominios con la posibilidad de personalizar la configuración en el caso de que algún sitio no funcione correctamente con algún bloqueo aplicado.&lt;/p&gt;
&lt;h3 id="8-trackmenot"&gt;8 TrackMeNot&lt;/h3&gt;
&lt;p&gt;Este complemento es una idea ingeniosa de Daniel C. Howe (artista y crítico de tecnología) y Helen Nissebaum (Profesora de ciencia de la información en Cornell Tech)  para evitar la vigilancia electrónica. En lugar de ocultar o cifrar nuestra actividad en Internet, hace uso del ruido y de la obfuscación: realiza búsquedas aleatorias en segundo plano en los principales motores de búsqueda.&lt;/p&gt;
&lt;h3 id="9-ublock-origin"&gt;9 uBlock Origin&lt;/h3&gt;
&lt;p&gt;Esta extensión cuyo autor es Raymond Hill, es una de las más populares tal vez y sirve para bloquear publicidad y molestas ventanas emergentes.&lt;/p&gt;
&lt;h3 id="10-vivaldifox"&gt;10 Vivaldifox&lt;/h3&gt;
&lt;p&gt;El nombre de esta extensión se debe a una característica del aspecto visual del navegador &lt;strong&gt;Vivaldi&lt;/strong&gt;. Aplica colores en la barra de Firefox de acuerdo al contenido del sitio, más allá de ser un toque estilístico es de ayuda también para identificar a las pestañas abiertas.&lt;/p&gt;
&lt;p&gt;&lt;a class="image-reference" href="https://sergiobelkin.com/images/20190719202330880_999703543.png"&gt;&lt;img src="https://sergiobelkin.com/images/20190719202330880_999703543.thumbnail.png" alt="VivaldiFox"&gt;&lt;/a&gt; &lt;/p&gt;</description><category>firefox</category><guid>https://sergiobelkin.com/posts/10-extensiones-recomendadas-para-firefox/</guid><pubDate>Sat, 20 Jul 2019 13:46:30 GMT</pubDate></item></channel></rss>