¿Cuál es la diferencia entre / etc y / usr / local / etc

24

Estoy desarrollando un demonio que necesita almacenar muchos datos de aplicaciones, y noté que en mi sistema (Fedora 15), hay un /usr/local/etcdirectorio.

He decidido instalar mi demonio /usr/local/biny necesito un lugar para mis archivos de configuración.

No vi esto en Wikipedia . ¿Esto no es estándar o es, de hecho, el lugar estándar para los programas instalados /usr/local/binpara almacenar archivos de configuración?

La razón es que quiero comercializar esto para los administradores de sistemas, y obtener algo así no es un gran punto de venta ...

beatgammit
fuente
2
¿Alguna razón para no ponerlo directamente debajo /etc/myapp? Si estuviera buscando cambiar una configuración, sería el primer lugar donde buscaría.
new123456
@ new123456- Personalmente me gusta la idea de mantener los archivos de configuración cerca del binario (por ejemplo, /usr/local/bin-> /usr/local/etc), pero las convenciones ganan en este caso.
beatgammit

Respuestas:

24

/usr/localusualmente es para aplicaciones construidas desde la fuente. es decir, instalo la mayoría de mis paquetes usando algo como apt, pero si descargo una versión más nueva de algo o un software que no forma parte de mi distribución, lo construiría desde la fuente y lo pondría todo en la jerarquía '/ usr / local'.

Esto permite la separación del resto de la distribución.

Si está desarrollando una pieza de software para los demás, debe diseñar de tal manera que se puede instalar en cualquier lugar que la gente quiere, pero debe por defecto a los regulares FHS especificados directorios del sistema cuando especifican el prefijo para que sea /usr( /etc, /usr/bin, etc.)

/usr/locales decir, es para su uso personal, no debería ser el único lugar para instalar su software.

Tenga una buena lectura del FHS y use las herramientas estándar de Linux para permitir que su fuente se construya e instale en cualquier lugar para que los creadores de paquetes para las diversas distribuciones puedan configurarlas según sea necesario para su distribución, y los usuarios pueden ponerla /usr/local si lo desean o los directorios regulares del sistema si lo desean.

OchoBitTony
fuente
Sí, creo que permitir la personalización es bueno, pero me preguntaba si /usr/local/etces estándar para los archivos de configuración para ese tipo de programas.
beatgammit
/ usr / local / etc es algo que podría elegir si construyo tu demonio desde la fuente, pero / etc es el lugar que alguien elegiría si empaquetaran tu demonio con Debian o Ubuntu.
EightBitTony
44
En realidad, los estándares de GNU requieren que el paquete se ajuste por defecto a la ruta local, ya que las personas que lo crean desde la fuente generalmente no especifican dónde. Las distribuciones lo cambiarán a la ruta no local cuando lo empaqueten / compilen.
psusi
@ psusi- Buen punto, me aseguraré de que sea el predeterminado. Quizás detecte cuándo mi instalación de instalación se ejecuta como usuario root o usuario normal. Si es root, usaré / usr / local, si es usuario, en el directorio de inicio de los usuarios. También agregaré opciones de configuración.
beatgammit
@ EightBitTony- ¿Hay alguna otra plataforma que tenga diferentes convenciones? Ya estoy haciendo diferentes scripts de inicio para las diferentes plataformas (upstart, systemd, init).
beatgammit
7

Una respuesta muy corta

/ etc es utilizado por su sistema operativo para sus archivos de configuración

/ usr / local / etc puede ser utilizado para sus archivos de configuración por usted y su software adicionalmente instalado

AndyM
fuente
4

/usr/local/etcrara vez se usa en el mundo de Linux. Pero la decisión de almacenar archivos de configuración en /etc, /usr/local/etco en algún otro lugar se hace generalmente en tiempo de compilación (y, a menudo puede ser anulado a través de una opción de línea de comandos o variable de entorno). Realmente no importa cuál sea el valor predeterminado al compilar, solo asegúrese de que sea fácil de configurar (generalmente una opción --sysconfdir, después de autoconf). Si su demonio está empaquetado para una distribución, el ejecutable entrará en /usr/sbin(la configuración predeterminada al compilar desde la fuente debería ser /usr/local/sbin) y la configuración en /etc.

Tenga en cuenta que /etcno es el lugar para "muchos datos de la aplicación". Eso entra /var. El valor predeterminado al construir desde la fuente podría ser /var/local/mydaemono /var/lib/mydaemon; una vez más, no existe una convención fuerte para el valor predeterminado cuando se construye desde la fuente. Debe haber una manera de cambiar tanto el valor predeterminado de tiempo de compilación (generalmente con configure --localstatedir) como el valor predeterminado de tiempo de ejecución (con una configuración en un archivo de configuración, posiblemente con una opción de línea de comando o variable de entorno).

Gilles 'SO- deja de ser malvado'
fuente
¿Hay alguna razón por la /usr/local/etcque no se usa con mucha frecuencia? Me gusta la idea de mantener los archivos de configuración al mismo nivel del sistema de archivos que el binario.
beatgammit
1
@tjameson No sé si hay una razón generalizada. BSD lo hace de esa manera. Como administrador, me gusta que todos los archivos de configuración (que debe hacer copia de seguridad y de cambio controlado, a diferencia de las cosas en biny lib, etcétera, que pueden volver a instalar) en vivo en el mismo lugar.
Gilles 'SO- deja de ser malvado'
1

Como usuario de Arch, evitaría / usr / local en conjunto y usaría solo / etc para la configuración. Al instalar desde la fuente, prefiero escribir un pequeño archivo PKGBUILD mientras estoy en él, y posiblemente subirlo al Arch User Repository (AUR), tanto para otros como para mí en otra computadora en el futuro. A juzgar por la cantidad de paquetes en AUR y la velocidad con la que se crean, no estoy solo pensando de esta manera. Esto aumenta las posibilidades para todos de que un paquete estará disponible en lugar de tener que instalarlo desde el origen y poder evitar ubicaciones obsoletas como / usr / local.

A Debian también parece gustarle la idea de construir un paquete de la fuente en lugar de instalar cualquier cosa en / usr / local, por lo tanto, utilidades como checkinstall .

Crear un paquete de la fuente que desea instalar sería una buena manera de realizar un seguimiento de dónde están los archivos y asegurarse de que ninguno de ellos sobrescriba de manera inconsistente otro paquete u otro "make install". Desinstalar con "make uninstall" no es una buena solución. La información sobre qué versión está instalada es otra cosa que los administradores de paquetes modernos son buenos para realizar un seguimiento.

Simplemente renunciaría / usr / local por completo. No es un buen lugar para poner nada, no para instalar paquetes (los directorios de todo el sistema son más adecuados) y no para usuarios.

Alejandro
fuente