Esta é provavelmente uma pergunta estúpida, mas recentemente percebi que não tenho idéia do porquê de não haver funcionalidade de usuário único com o apt-get.
Respostas que não estou procurando:
- "É porque o apt grava em diretórios no nível do sistema". Este é o nível da superfície, mas estou procurando um nível mais profundo. Existe algo que bloqueia fundamentalmente um ambiente de usuário único (a la pip + virtualenv)?
- "Você pode apenas construir a partir da fonte". Esta é uma solução alternativa, mas não aborda minha pergunta. Não quero corrigir um problema de curto prazo e, de qualquer maneira, tenho acesso root em todas as minhas máquinas.
Respostas:
Nem sempre. Você pode usar perfeitamente
apt-get
semsudo
. Existem casos em que você não precisasudo
, como usar oapt-get download
download de um pacote para o seu diretório atual , oapt-get source
download dos arquivos de fontes debian para o diretório atual, ochangelog
download e a impressão do registro de alterações de um determinado pacote e qualquer comando que tenha o--simulate
/--dry-run
/--no-act
(no caso deinstall
você precisar também--no-download
).Isso ocorre porque essas ações / comandos não requerem a criação de diretórios do sistema.
Agora, por que
apt-get
precisasudo
? Na verdade não. Você pode abandonar o apt-get, baixar um pacotewget
e usardpkg --extract
e extrair o pacote no diretório que desejar. Há também o--instdir
que deve funcionar para o pacote apenas binário.Agora, por que esse não é o padrão? Porque é uma dor. Para fazer o que você deseja, precisamos reembalar cada pacote duas vezes, um para o caminho certo e outro para fazer o que você deseja. Na construção, os binários normalmente precisam saber onde estão os arquivos e as bibliotecas de que precisam (em alguns casos, isso é codificado na compilação).
Agora, o que você pode fazer? Basta executar o chroot em algum ambiente à la virtualenv, onde você pode instalar pacotes sem root.
Resumo, não é assim que o apt-get deve ser usado, e eu não conheço outro gerenciador de pacotes semelhante ao apt-get que permite que você faça isso. No final do dia,
apt-get
é apenas um front-end para o dpkg, o que poderia fazer parte disso.fonte
As informações no próprio pacote determinam onde os arquivos serão instalados; portanto, você precisa
sudo
gravar/
e alterar o banco de dados do pacote.Ao instalar pacotes, você está instalando arquivos binários pré-criados, configuração associada e metarquivos e scripts que são partes essenciais do pacote. Esses scripts e arquivos de configuração estão fortemente vinculados às dependências e ao restante do sistema. Você não gostaria de mudar isso levemente, a menos que soubesse exatamente o que está fazendo.
Se você estiver em um sistema, digamos no trabalho, onde não tenha
sudo
acesso, poderá compilar a partir da fonte e definir o diretório de instalação para sua casa. Então, não há necessidadesudo
. Quando você está instalando a partir do código-fonte, geralmente não está alterando o banco de dados do pacote.fonte
Não é uma pergunta estúpida.
Níveis de privilégio em um sistema operacional
O Ubuntu - e de fato qualquer sistema operacional moderno - tem o conceito de diferentes níveis de privilégio para diferentes softwares. O software iniciado pelos usuários geralmente é executado sob um nível de privilégio baseado no usuário, que, por razões de segurança, não possui o acesso necessário para modificar o sistema - ele só pode modificar arquivos pertencentes a esse usuário.
Para executar qualquer modificação no sistema operacional que possa impactar o sistema como um todo, em vez de apenas os arquivos do usuário, é necessário um nível de privilégio mais alto, que no Linux é chamado de privilégio de "superusuário" (ou geralmente chamado "raiz"). Esse nível de privilégio possui acesso irrestrito a todo o sistema operacional, permitindo modificar - ou destruir - todos os arquivos para todos os usuários.
O papel do apt-get
Ao instalar o software via apt-get, você instala o software que estará disponível em todo o sistema . Ou seja, o software não será colocado apenas no diretório inicial de um usuário para execução apenas por esse usuário, mas será instalado em um diretório de aplicativos em todo o sistema (como em / usr, / etc, / var e assim por diante ) para execução por todos os usuários. Para modificar esses diretórios, você precisa de privilégios de superusuário. Nenhum usuário sem privilégios pode modificar esses diretórios, porque softwares sem privilégios podem interferir no sistema.
Se você tentar instalar algo usando o apt-get sem conceder privilégios de superusuário ao apt-get, o primeiro obstáculo que ele não conseguirá superar é obter um bloqueio para gravar em seu próprio catálogo de software. Sendo um utilitário de todo o sistema, o apt-get mantém um catálogo de software instalado, o que naturalmente requer privilégios de superusuário para editar, para que softwares não privilegiados não possam mexer com ele. Mas mesmo que você possa superar esse obstáculo (por exemplo, alterando as permissões de arquivo), muitas outras etapas ao longo da instalação do software ainda falharão, porque a rotina de instalação dependerá da gravação em vários diretórios do sistema.
Usando o Linux, é possível instalar software sem privilégios de superusuário, mas você precisa escrevê-lo (por exemplo, scripts de shell) ou compilá-lo e executar os executáveis compilados diretamente. É mais fácil instalá-lo em todo o sistema usando o apt-get (e outros utilitários baseados em APT como aptitude, synaptic ou o centro de software Ubuntu) se você tiver acesso a isso.
fonte
Por que o apt-get instala em / (ou similares) diretórios por padrão?
A razão simples para isso é que
apt-get
não decide onde instalar o software. É decidido pelos desenvolvedores e codificado dentro do próprio aplicativo.Posso instalar em outros diretórios?
Sim, você pode instalar em outros diretórios. Para software de código aberto, obtenha o código-fonte, altere o diretório de instalação, compile, construa e instale-o. Geralmente, existe uma opção para o
configure
script incluído que permite especificar onde instalar. Isto é geralmente--prefix
.Mas eu insisto em usar o apt-get. O que fazer agora?
ESTÁ BEM. Ainda existe uma maneira de fazer isso com o apt-get, embora isso seja demais para um usuário final. Siga os passos.
$HOME
.sudo apt-get update
.apt-get install package
.Isso foi muito fácil / difícil.É possível selecionar o diretório durante a instalação?
Sim e não.
Sim, porque é possível, alguns softwares usam esse método, o único que eu conheço é .Tem
Qt5
um arquivo .run que, quando executado, solicita o diretório de instalação entre muitas outras entradas.Não, porque este método não usa
apt-get
.Eu poderia fazer isso facilmente algum dia, com
apt-get
?Eu não acho que os desenvolvedores
apt-get
e / ou desenvolvedores de softwares estariam interessados em fazer isso, mas algum software pode ser desenvolvido para executar as etapas de origem, alteração, compilação, construção e instalação automaticamente, solicitando apenas o diretório de instalação.Meu sexto sentido me diz que o comando seria
fonte
apt-get
desenvolvedores o façam. Além disso, muitos programas existentes dependem de outros programas e eles os pesquisam no diretório / usr. A implementação dessa funcionalidade exigiria alterações em todos os softwares existentes que possuem dependências (isso não ocorre em milhares)./opt/package
e chmod o diretório.$HOME/opt/
se eles não têm exigido privilégio para instalar pacotes em/opt/
..Faça com que ele edite arquivos modificados para que você não possa usá-los. Você pode ser capaz de chmod-los para que você não posso recomendar isso embora
fonte