Esta es probablemente una pregunta estúpida, pero recientemente me di cuenta de que no tengo idea de por qué no hay una funcionalidad de usuario único con apt-get.
Respuestas que no estoy buscando:
- "Es porque apt escribe en directorios de nivel de sistema". Este es el nivel de superficie por qué, pero estoy buscando un nivel más profundo. ¿Hay algo que bloquee fundamentalmente un entorno de usuario único (a la pip + virtualenv)?
- "Puedes construir desde la fuente". Esta es una solución, pero no aborda mi pregunta. No quiero solucionar un problema a corto plazo, y de todos modos tengo acceso de root en todas mis máquinas.
Respuestas:
No siempre. Se puede usar perfectamente
apt-get
sinsudo
. Hay instancias en las que no necesitasudo
nada, como el usoapt-get download
que descarga un paquete a su directorio actual ,apt-get source
que descarga los archivos de fuentes de Debian a su directorio actual,changelog
que descarga e imprime el registro de cambios de un paquete dado y cualquier comando que tenga el--simulate
/--dry-run
/--no-act
(en el caso deinstall
que también lo necesite--no-download
).Esto se debe a que estas acciones / comandos no requieren escribir directorios del sistema.
Ahora, ¿por qué
apt-get
necesitasudo
? En realidad no lo hace. Puede deshacerse de apt-get, descargar un paquetewget
y usardpkg --extract
y extraer el paquete en el directorio que desee. También hay--instdir
cuál debería funcionar para el paquete binario solamente.Ahora, ¿por qué este no es el predeterminado? Porque es un dolor. Para hacer lo que desea, tendríamos que volver a empaquetar cada paquete dos veces, uno de la manera correcta y otro para hacer lo que desea. En la compilación, los archivos binarios normalmente necesitan saber dónde están los archivos y las bibliotecas que necesitan (en algunos casos, esto está codificado en la compilación).
Ahora, ¿qué puedes hacer en su lugar? Simplemente elimine algún entorno a la virtualenv, donde puede instalar paquetes sin root.
En resumen, esta no es la forma en que se debe usar apt-get, y no conozco otro administrador de paquetes similar a apt-get que le permita hacer eso. Al final del día,
apt-get
es solo un front-end para dpkg que podría hacer algo de esto.fuente
La información en el paquete en sí determina dónde se instalarán los archivos, por lo que necesita
sudo
escribir/
y cambiar la base de datos del paquete.Cuando está instalando paquetes, está instalando archivos binarios preconstruidos y configuraciones asociadas y meta archivos y scripts que son partes esenciales del paquete. Estos scripts y archivos de configuración están estrechamente vinculados a las dependencias y al resto del sistema. No querrá cambiarlos a la ligera a menos que sepa exactamente lo que está haciendo.
Si está en un sistema, digamos en el trabajo, donde no tiene
sudo
acceso, puede compilar desde la fuente y establecer el directorio de instalación en su hogar. Entonces, no hay necesidad de hacerlosudo
. Cuando está instalando desde el origen, generalmente no está cambiando la base de datos del paquete.fuente
No es una pregunta estúpida.
Niveles de privilegio en un sistema operativo
Ubuntu, y de hecho cualquier sistema operativo moderno, tiene el concepto de diferentes niveles de privilegio para diferentes programas. El software iniciado por los usuarios generalmente se ejecuta bajo un nivel de privilegio basado en el usuario, que por razones de seguridad no tiene el acceso requerido para modificar el sistema, solo puede modificar archivos que pertenecen a ese usuario.
Para realizar cualquier modificación en el sistema operativo que pueda tener un impacto en el sistema en su conjunto, en lugar de solo los archivos del usuario, se requiere un nivel de privilegio más alto, que en Linux se conoce como privilegios de "superusuario" (o comúnmente llamado "raíz"). Este nivel de privilegio tiene acceso ilimitado a todo el sistema operativo, lo que le permite modificar, o destruir, todos los archivos para todos los usuarios.
El papel de apt-get
Cuando está instalando software a través de apt-get, está instalando software que estará disponible en todo el sistema . Es decir, el software no solo se colocará en el directorio de inicio de un usuario para que solo lo ejecute ese usuario, sino que se instalará en un directorio de aplicaciones de todo el sistema (como en / usr, / etc, / var, etc.) ) para que lo ejecuten todos los usuarios. Para modificar estos directorios necesita privilegios de superusuario. Ningún usuario sin privilegios puede modificar estos directorios, porque de lo contrario el software sin privilegios podría interferir con el sistema.
Si intenta instalar algo usando apt-get sin otorgar privilegios de superusuario apt-get, el primer obstáculo que no podrá superar es obtener un bloqueo para escribir en su propio catálogo de software. Al ser una utilidad de todo el sistema, apt-get mantiene un catálogo de software instalado, que naturalmente requiere privilegios de superusuario para editar, de modo que el software no privilegiado no pueda meterse con él. Pero incluso si de alguna manera pudiera superar este obstáculo (por ejemplo, al cambiar los permisos de los archivos), fallarán muchos pasos adicionales en el camino de la instalación del software, porque la rutina de instalación dependerá de la escritura en varios directorios del sistema.
Con Linux es posible instalar software sin privilegios de superusuario, pero debe escribirlo usted mismo (por ejemplo, scripts de shell) o compilarlo usted mismo y ejecutar los ejecutables compilados directamente. Es más fácil instalarlo en todo el sistema usando apt-get (y otras utilidades basadas en APT como aptitude, synaptic o el centro de software de Ubuntu) si tiene acceso para hacerlo.
fuente
¿Por qué apt-get se instala en directorios (o similares) de forma predeterminada?
La razón simple de esto es que
apt-get
no decide dónde instalar el software. Lo deciden los desarrolladores y se codifica dentro de la propia aplicación.¿Puedo instalar en otros directorios?
Sí, puede instalar en otros directorios. Para el software de código abierto, obtenga el código fuente, cambie el directorio de instalación, compílelo, compílelo e instálelo. Por lo general, hay una opción para el
configure
script incluido que le permite especificar dónde instalar. Esto suele ser--prefix
.Pero insisto en usar apt-get. ¿Qué hacer ahora?
OKAY. Todavía hay una manera de hacer esto con apt-get, aunque sería demasiado para un usuario final. Sigue los pasos.
$HOME
.sudo apt-get update
.apt-get install package
.Eso fue demasiado fácil / difícil. ¿Es posible seleccionar el directorio durante la instalación?
Si y no.
Sí, porque es posible, algunos softwares usan este método, el único que conozco es
Qt5
. Tiene un archivo .run que, cuando se ejecuta, solicita el directorio de instalación entre muchas otras entradas.No porque este método no se usa
apt-get
.¿Podría hacer esto fácilmente algún día
apt-get
?No creo que los desarrolladores
apt-get
y / o desarrolladores de software estén interesados en hacer esto, pero se puede desarrollar algún software que hará los pasos de origen, cambio, compilación, compilación e instalación automáticamente solo preguntando por el directorio de instalación.Mi sexto sentido me dice que el comando sería
fuente
apt-get
desarrolladores lo hagan. Además, muchos programas existentes dependen de otros programas y los buscan en el directorio / usr. Implementar tal funcionalidad requeriría un cambio en todos los softwares existentes que tienen dependencias (esto no va en miles)./opt/package
y chmod el directorio en su lugar.$HOME/opt/
si no tienen el privilegio requerido para instalar paquetes en/opt/
...Haga que edite archivos que están modificados para que no pueda usarlos. Es posible que pueda modificarlos, así que no puedo recomendar que haga eso
fuente