¿Dónde debo colocar mi caché de aplicación para aplicaciones basadas en Unix?

9

Estoy creando una aplicación de línea de comandos y tengo la necesidad de guardar algunos datos temporales en archivos. No sé dónde está la convención para que las aplicaciones almacenen su caché en sistemas basados ​​en Unix (en este caso Ubuntu 12.0.4)?

Dolphin
fuente

Respuestas:

11

"Sistemas basados ​​en Unix" es una categoría demasiado general para hacer cualquier tipo de determinación de aplicación general que se aplique a todos Sistemas basados ​​en Unix. El problema es que la estructura del sistema de archivos (y el lugar "apropiado" / "convencional" para colocar las cosas) es tan tremendamente diferente entre los diferentes sabores de "Unix" (si es que se puede llamar así), por lo que tienes que manejarlo. sobre una base de caso por caso.

Algunos ejemplos:

  • En Ubuntu, las bibliotecas de 64 bits entran en / usr / lib o / usr / lib / x86_64-linux / y las bibliotecas de 32 bits entran en / usr / lib32
  • En Fedora, las bibliotecas de 64 bits entran en / usr / lib64 y las bibliotecas de 32 bits entran en / usr / lib
  • Fedora ya no tiene noción de / lib o / bin (solo son enlaces simbólicos en los directorios equivalentes / usr)
  • Más Linux las distribuciones prefieren instalar software instalado por el usuario (es decir, software no proporcionado por el administrador de paquetes) en / usr / local / (con lib, bin, etc, var, etc. dentro de / usr / local /)
  • Muchas distribuciones de Linux utilizan / var / cache para el caché, aunque si es "transitoria" (no importa si se pierde), puede almacenarse en / tmp
  • Algunas aplicaciones de tipo "aplicación en una carpeta" almacenan todo en un subdirectorio de / opt (especialmente los instaladores de clickwrap)
  • Algunas aplicaciones simplemente se instalan en un subdirectorio del directorio ~ del usuario (generalmente / home / username)
  • En Solaris, he visto / srv usado de manera similar a / opt, o a veces / srv es el www-root

La respuesta es que el Canónico, socialmente aceptable, bien integrado. convención sobre dónde almacenar cualquier cosa en cualquier sistema operativo, ya sea una distribución de Linux, BSD, Solaris, HP-UX, etc. Depende de las circunstancias exactas . Específicamente:

  • ¿Cómo se distribuye el paquete?
  • ¿El usuario requiere acceso de root para instalarlo?
  • ¿El paquete depende o se integra directamente con otros paquetes que ya están en el sistema, por ejemplo? un complemento o complemento?
  • ¿El paquete se integrará en los repositorios de la distribución, para que los usuarios puedan usar un comando como apt-get o yum ¿Para instalarlo directamente sin descargar un instalador de un sitio web?
  • ¿El software tendrá una configuración separada para cada usuario diferente que opera la computadora?
  • ¿El software tendrá ajustes de configuración globales que solo el administrador (root) debería poder modificar?
  • ¿El software necesita integrarse con el sistema de inicio (por ejemplo, para iniciar el arranque)?

No hay una respuesta directa para esto sin considerar todos los factores. Sin embargo, para Ubuntu 12.04 específicamente , si está construyendo su paquete en un .deb El archivo se distribuirá en un PPA o para enviarlo a los repositorios de paquetes de Ubuntu ( main o universe ), Recomendaría que el caché se almacene en /var/cache. Pero eso es solo para Ubuntu y tu ciertamente no debería Aplique la suposición de que cada sistema de distribución basado en la base o en Unix lo considerará aceptable.

Además, si no hay ventajas en guardar los datos de la caché en los arranques del sistema, creo que también podría pertenecer a / tmp.

Tenga en cuenta que se encontrará con estos problemas de convención de rutas de ruta para cada tipo de archivo que utiliza su programa: datos compartidos, archivos ejecutables, bibliotecas, archivos de ayuda, imágenes, sonido, páginas web, etc. Así que me pregunto, si está preguntando acerca de los archivos de caché, cómo planea manejar los otros tipos de archivos. ¿Está usted haciendo suposiciones ingenuas y esperando que nadie esté en desacuerdo con usted? Si no ha leído ninguna documentación o estándares de Ubuntu que sugieran dónde colocarlos, es una mala idea asumir solo una cosa u otra. Por ejemplo, siempre pegar bibliotecas en / usr / lib podría ser un error, ya que, dependiendo de la situación, pueden pertenecer a otro lugar.

Además, como desarrollador de software, creo que lo más responsable es permitir que el usuario final decida dónde colocar sus archivos. Puede configurar los valores predeterminados, pero los usuarios (y los distribuidores) pueden personalizar la compilación para que se ajuste a su distro.

La forma más fácil de hacer esto es construir su programa usando GNU Autoconf . Autoconf es un sistema de compilación en el que el usuario puede pasar los argumentos de la línea de comandos al script de compilación para cambiar las rutas de los distintos "tipos de directorio" de los valores predeterminados. Casi todas las distribuciones tienen un script de compilación para cada paquete de Autoconf que establece los directorios convencionales apropiados para la distribución de cada tipo. Incluso tienen específicamente un tipo de directorio para caché: estado compartido .

allquixotic
fuente
En primer lugar muchas gracias por tu respuesta, de hecho muy detallada. La naturaleza de la aplicación (ruby) es almacenar en caché las llamadas a la API que sirven contenido estático. Esta es la aplicación ruby, y de lo que he leído en su lugar de respuesta para mi caché de disco sería /tmp carpeta. Las respuestas a sus preguntas serían (descarga, no, no, no, no, no, no). Probablemente parece normal que la mayoría de la gente concluya que es /tmp pero soy nuevo en los sistemas Unix y las convenciones basadas en ubuntu os no me son familiares. Esto abre una idea interesante para que gema permita el almacenamiento en caché del disco agnóstico (usuario agnóstico). Gracias, +1 de mi parte.
Dolphin
Tenga en cuenta que el sistema ruby ​​gem instalado en la mayoría de las distribuciones de Linux tiene un directorio muy específico donde las gemas son instaladas por el gem herramienta. Sin embargo, probablemente no sería apropiado crear archivos en tiempo de ejecución dentro del mismo directorio donde la gema descarga su aplicación. Por otro lado, si está ejecutando la aplicación como usuario, necesita un directorio que sea de lectura y escritura. para usuarios , y eso significa cambiar los permisos (lo que requiere aún más trabajo de integración del sistema en el momento de la instalación, como crear un grupo, etc.) o usar un directorio global de lectura-escritura, por ejemplo. / tmp.
allquixotic
No puede, y no debe escribir datos a /usr, /lib o /bin desde su aplicación.
ctrl-alt-delor