Por que o apt-get requer sudo?

12

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.
PattimusPrime
fonte
Espero que você saiba que pode criar qualquer pacote a partir da fonte no seu diretório pessoal.
Jobin
Certo, mas estou procurando o porquê subjacente à limitação do apt-get. Construir a partir da fonte não responde a isso.
PattimusPrime
1
Eu acho que a pergunta que você realmente está fazendo é "Por que o software Linux não é realocável?". Seria perfeitamente possível permitir que o apt-get instale o software nos diretórios locais do usuário, mas como a maioria dos softwares não suporta isso, pouco faria sentido.

Respostas:

10

Por que o apt-get requer sudo?

Nem sempre. Você pode usar perfeitamente apt-getsem sudo. Existem casos em que você não precisa sudo, como usar o apt-get downloaddownload de um pacote para o seu diretório atual , o apt-get sourcedownload dos arquivos de fontes debian para o diretório atual, o changelogdownload 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 de installvocê 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-getprecisa sudo? Na verdade não. Você pode abandonar o apt-get, baixar um pacote wgete usar dpkg --extracte extrair o pacote no diretório que desejar. Há também o --instdirque 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.

Braiam
fonte
3

As informações no próprio pacote determinam onde os arquivos serão instalados; portanto, você precisa sudogravar /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 sudoacesso, poderá compilar a partir da fonte e definir o diretório de instalação para sua casa. Então, não há necessidade sudo. Quando você está instalando a partir do código-fonte, geralmente não está alterando o banco de dados do pacote.

perseguições
fonte
Obrigado por responder! Conheço e uso as soluções alternativas, mas o que estou tentando descobrir é por que as tenho usado. Acredito que você esteja dizendo que o problema é que o caminho da instalação é codificado pelos mantenedores de pacotes - por que isso não pode ser alterado?
PattimusPrime
2

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.

thomasrutter
fonte
Obrigado por responder e obrigado pelo rigor. Entendo a natureza de todo o sistema do apt-get, mas o que estou tentando entender é por que tem que ser assim.
PattimusPrime
1
Não precisava ser assim. Por acaso é assim que o Ubuntu (e o Debian) foram projetados. Não haveria nada impedindo alguém de projetar um sistema operacional em que a maneira normal de instalar o software fosse por usuário.
thomasrutter
1

Por que o apt-get instala em / (ou similares) diretórios por padrão?

A razão simples para isso é que apt-getnã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 configurescript 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.

  1. Obtenha a fonte.
  2. Mude o diretório de instalação para algo como $HOME.
  3. Compile e construa.
  4. empacote-o em um arquivo .deb .
  5. Crie uma conta da barra de ativação.
  6. Assine o código de conduta do ubuntu (não tenho certeza se este é necessário).
  7. crie um ppa para si mesmo .
  8. Faça o upload do pacote deb para o ppa.
  9. adicione o ppa às suas fontes.
  10. Corra sudo apt-get update.
  11. Corra 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 é .TemQt5 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-gete / 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

apt-dont-get install pkg1 pkg2 ...
Usuário Registrado
fonte
Obrigado pela resposta - é completa e aborda a minha pergunta. No entanto, não entendo por que não haveria interesse em desenvolver a funcionalidade de usuário único no apt-get. Parece que essa funcionalidade seria altamente útil em certos casos de uso.
PattimusPrime
Boas informações, mas um formato de perguntas e respostas dentro das perguntas e respostas ...? :) Idk, talvez você deva editar em um formato padrão? Apenas um pensamento.
chaskes
@PattimusPrime Esses casos geralmente são raros, porque na maioria dos casos os administradores instalam todo o software necessário e outros não precisam instalar o software. Além disso, os fatos de que construir a partir do código-fonte é muito fácil e que implementar tal funcionalidade seria inútil, desde que os desenvolvedores de software não o implementem no próprio software, impedindo que os apt-getdesenvolvedores 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).
Usuário registrado
É uma violação da política Debian para instalar arquivos em $ HOME. Você nunca deve fazer isso. Se houver algo, use /opt/packagee chmod o diretório.
Braiam 29/03
@Braiam: Eu tenho visto pessoas que recomendam instalar pacotes em $HOME/opt/se eles não têm exigido privilégio para instalar pacotes em /opt/..
Aditya
-1

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

Raring
fonte
Obrigado por responder. Eu estou procurando por que apenas edita arquivos chmodded. Parece-me que uma funcionalidade de usuário único seria fácil de implementar e imensamente útil em algumas áreas (por exemplo, os clusters de supercomputação)
PattimusPrime