Por que o apt-get requer o sudo?

8

Esta é provavelmente uma pergunta estúpida, mas recentemente percebi que não tenho idéia porque não há funcionalidade de usuário único com o apt-get.

Respostas que não estou procurando:

  • "É porque o apt escreve em diretórios no nível do sistema". Este é o nível da superfície porque, mas eu estou procurando um nível mais profundo. Existe algo fundamentalmente bloqueando um ambiente de usuário único (a la pip + virtualenv)?
  • "Você pode simplesmente criar a partir do código-fonte". Esta é uma solução alternativa, mas não resolve minha questão. Eu não quero corrigir um problema de curto prazo, e tenho acesso root em todas as minhas máquinas de qualquer maneira.
por PattimusPrime 28.03.2014 / 03:20

5 respostas

8
  

Por que o apt-get requer o sudo?

Nem sempre. Você pode usar perfeitamente apt-get sem sudo . Há casos em que você não precisa de sudo , como usar apt-get download , que baixa um pacote para seu diretório atual , apt-get source que baixa os arquivos de origem debian em seu diretório atual, changelog , que baixa e imprime o changelog de um determinado pacote, e qualquer comando que tenha o --simulate / --dry-run / --no-act (no caso de install , você também precisa de --no-download ).

Isso ocorre porque essas ações / comandos não exigem a gravação de diretórios do sistema.

Agora, por que apt-get precisa de sudo ? Na verdade isso não acontece. Você pode usar o apt-get, baixar um pacote com wget e usar dpkg --extract e extrair o pacote no diretório que desejar. Há também --instdir , que deve funcionar apenas para o pacote binário.

Agora, por que isso não é o padrão? Porque é uma dor. Para fazer o que você deseja, precisaríamos reempacotar cada pacote duas vezes, um para o caminho certo e outro para fazer o que você deseja. No build, os binários normalmente precisam saber onde estão os arquivos e bibliotecas de que precisam (em alguns casos, isso é codificado na compilação).

Agora, o que você pode fazer? Apenas chroot algum ambiente a la virtualenv, onde você pode instalar pacotes sem raiz.

Resumo, este não é o modo pelo qual o apt-get foi feito para ser usado, e eu não conheço outro gerenciador de pacotes similar ao apt-get que permita que você faça isso. No final do dia, apt-get é apenas um front-end para o dpkg, que poderia fazer um pouco disso.

    
por Braiam 29.03.2014 / 16:45
3

As informações no próprio pacote determinam onde os arquivos serão instalados, portanto, você precisa que sudo grave em / e altere o banco de dados do pacote.

Quando você está instalando pacotes, você está instalando arquivos binários pré-construídos e arquivos de configuração e meta-scripts associados e scripts que são partes essenciais do pacote. Esses scripts e arquivos de configuração estão intimamente ligados às dependências e ao resto do sistema. Você não gostaria de modificá-las a menos que você soubesse exatamente o que está fazendo.

Se você está em um sistema, digamos, no trabalho, onde não tem sudo access, é possível compilar a partir da origem e configurar o diretório de instalação para sua casa. Então, não há necessidade de sudo . Quando você está instalando a partir do código-fonte, geralmente não está alterando o banco de dados de pacotes.

    
por chaskes 28.03.2014 / 03:28
2

Não é uma pergunta estúpida.

Níveis de privilégio em um sistema operacional

O Ubuntu - e, na verdade, qualquer sistema operacional moderno - tem o conceito de diferentes níveis de privilégio para diferentes softwares. O software iniciado por usuários geralmente é executado sob um nível de privilégio baseado no usuário, que por razões de segurança não tem o acesso necessário para modificar o sistema - ele só pode modificar arquivos pertencentes a esse usuário.

Para realizar qualquer modificação no sistema operacional que possa ter um impacto no sistema como um todo, em vez de apenas nos arquivos do usuário, é necessário um nível de privilégio mais alto, que no Linux é chamado de privilégio "superusuário" (ou comumente chamado de "root"). Esse nível de privilégio tem acesso irrestrito a todo o sistema operacional, permitindo que ele modifique - ou destrua - todos os arquivos para todos os usuários.

O papel do apt-get

Quando você está instalando software via apt-get, você está instalando um software que estará disponível todo o sistema . Ou seja, o software não será apenas colocado no diretório home do usuário para ser executado apenas pelo usuário, mas será instalado em um diretório de aplicativos do 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 senão softwares não privilegiados poderiam mexer com o sistema.

Se você tentar instalar algo usando o apt-get sem conceder privilégios de superusuário para o 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 softwares instalados, o que naturalmente requer que os privilégios de superusuário sejam editados de modo que o software não privilegiado não possa mexer com ele. Mas mesmo se você pudesse de alguma forma superar esse obstáculo (por exemplo, alterando as permissões de arquivo), muitas outras etapas durante a 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 o software sem privilégios de superusuário, mas você mesmo 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 do Ubuntu) se você tiver acesso a isso.

    
por thomasrutter 28.03.2014 / 04:15
1

Por que o apt-get é instalado em diretórios / (ou similares) 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, crie e instale-o. Geralmente, há uma opção para o script configure incluído, que permite especificar onde instalar. Isso geralmente é --prefix .

Mas eu insisto em usar o apt-get. O que fazer agora?

OK. Ainda existe uma maneira de fazer isso com o apt-get, embora seja demais para um usuário final. Siga os passos.

  1. Obtenha a fonte.
  2. Altere o diretório de instalação para algo como $HOME .
  3. Compile e crie.
  4. empacote em um arquivo .deb .
  5. Crie uma conta no launchpad.
  6. Assine o código de conduta do Ubuntu (não tenho certeza se este é necessário).
  7. crie um ppa para você .
  8. Envie o pacote deb para o ppa.
  9. adicione o ppa às suas fontes.
  10. Executar sudo apt-get update .
  11. Executar 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 sei é Qt5 . Ele tem um arquivo .run que, quando executado, pede diretório de instalação entre muitos outros entradas.

Não, porque este método não usa apt-get .

Posso fazer isso facilmente algum dia, com apt-get ?

Eu não acho que os desenvolvedores de apt-get e / ou desenvolvedores de softwares estariam interessados em fazer isso, mas alguns softwares podem ser desenvolvidos que farão o source, change, compile, build, install

Meu sexto sentido me diz que o comando seria

apt-dont-get install pkg1 pkg2 ...
    
por Registered User 28.03.2014 / 07:58
-1

Por causa da edição de arquivos que são chmodded para que você não possa usá-los. Você pode ser capaz de chmod-los, então você não pode eu não recomendo fazer isso embora

    
por Raring 28.03.2014 / 03:53

Tags