Acompanhar programas

33

Quando instalo um programa simples, ele geralmente usa make && make installe nem sequer tem um destino de desinstalação .

Se eu desejar atualizar um programa, é um protocolo padrão presumir que ele seja reescrito perfeitamente no programa antigo?

Como acompanho esses programas; a maioria das pessoas simplesmente 'dispara e esquece' e, se nenhum destino de desinstalação for fornecido, tenho que excluir tudo manualmente?

Will03uk
fonte
6
O GNU Stow é uma opção aqui? "O GNU Stow é um programa para gerenciar a instalação de pacotes de software, mantendo-os separados (/ usr / local / stow / emacs vs. / usr / local / stow / perl, por exemplo) enquanto faz com que pareçam estar instalados da mesma forma local (/ usr / local). "
Mike Renfro
@ Mike parece muito promissor; Eu gosto da ideia de ativar e desativar versões de programas sem problemas. Em primeiro lugar, quão ativo e estável é o programa e com que freqüência um programa quebra o protocolo do prefixo?
Will03uk
1
Ridiculamente estável ( 1.3.2 data de 1996 e 1.3.3 a 2002 ) e quase totalmente inativo . É apenas um script Perl que gerencia links simbólicos. No passado, era difícil colocar compiladores e tais bootstrap no stow, mas para aplicativos do usuário final, tem sido bom. Eu o usei para qualquer aplicativo que eu não conseguia facilmente suportar de versões mais recentes do Debian ou obter de um dos repositórios de pacotes Solaris.
91111 Mike Renfro

Respostas:

20

Instale cada programa em uma árvore de diretórios dedicada e use Stow ou XStow para fazer com que todos os programas apareçam em uma hierarquia comum. O armazenamento cria links simbólicos do diretório específico do programa para uma árvore comum.

Em mais detalhes, escolha um diretório de nível superior, por exemplo /usr/local/stow. Instale cada programa em /usr/local/stow/PROGRAM_NAME. Por exemplo, organize para que seus executáveis ​​sejam instalados /usr/local/stow/PROGRAM_NAME/bin, suas páginas de manual /usr/local/stow/man/man1e assim por diante. Se o programa usa o autoconf, execute ./configure --prefix /usr/local/stow/PROGRAM_NAME. Depois de executar make install, execute stow:

./configure --prefix /usr/local/stow/PROGRAM_NAME
make
sudo make install
cd /usr/local/stow
sudo stow PROGRAM_NAME

E agora você terá links simbólicos como estes:

/usr/local/bin/foo -> ../stow/PROGRAM_NAME/bin/foo
/usr/local/man/man1/foo.1 -> ../../stow/PROGRAM_NAME/man/man1/foo.1
/usr/local/lib/foo -> ../stow/PROGRAM_NAME/lib/foo

Você pode acompanhar com facilidade os programas que você instalou listando o conteúdo do stowdiretório e sempre sabe a que programa pertence um arquivo porque é um link simbólico para um local no diretório do programa. Desinstale um programa executando stow -D PROGRAM_NAMEe excluindo o diretório do programa. Você pode tornar um programa temporariamente indisponível executando stow -D PROGRAM_NAME(execute stow PROGRAM_NAMEpara disponibilizá-lo novamente).

Se você deseja alternar rapidamente entre versões diferentes do mesmo programa, use /usr/local/stow/PROGRAM_NAME-VERSIONcomo o diretório do programa. Para atualizar da versão 3 para a versão 4, instale a versão 4 e execute stow -D PROGRAM_NAME-3; stow PROGRAM_NAME-4.

As versões mais antigas do Stow não vão muito além do básico que descrevi nesta resposta. As versões mais recentes, assim como o XStow (que não é mantido ultimamente), têm recursos mais avançados, como a capacidade de ignorar certos arquivos, lidar melhor com links simbólicos existentes fora do diretório de armazenamento (como man -> share/man), lidam com alguns conflitos automaticamente (quando dois programas fornecem o mesmo arquivo) etc.

Se você não possui ou não deseja usar o acesso root, pode escolher um diretório no seu diretório pessoal, por exemplo ~/software/stow. Nesse caso, adicione ~/software/binao seu PATH. Se mannão encontrar automaticamente as páginas de manual, adicione ~/software/manà sua MANPATH. Adicione ~/software/infoao seu INFOPATH, ~/software/lib/pythonao seu PYTHONPATHe assim por diante, conforme aplicável.

Gilles 'SO- parar de ser mau'
fonte
4
Acredito que as coisas tenham mudado um pouco desde o momento em que esta resposta foi publicada. Então, como uma atualização: o GNU Stow atualmente suporta listas de ignorados, vários diretórios de armazenamento, pré-detecção de conflitos, etc. Eu também acho que o armazenamento está em desenvolvimento ativo enquanto o Xstow não é atualizado há aproximadamente 3 anos.
Amelio Vazquez-Reina
18

Você pode usar o checkinstall para criar um pacote (pacotes compatíveis com RPM, Deb ou Slackware). Dessa forma, você pode usar o gerenciador de pacotes de distribuição para adicionar / remover o aplicativo (mas não atualizar)

Você usa checkinstallno lugar do make installcomando (usando o parâmetro -D para Deb; -R é RPM e -S é Slackware):

root@nowhere# ./configure
root@nowhere# make
root@nowhere# checkinstall -D

O checkinstall criará e instalará o pacote por padrão, ou você poderá compilá-lo apenas sem a instalação.

checkinstall está disponível na maioria dos repositórios de distribuição.

Andrew Lambert
fonte
Isso é bom, mas eu estou usando principalmente tarballs para programas muito ativos que Arnt, muitas vezes embalados e a capacidade de alternar entre quebrados e não versões em Stow é grande
Will03uk
Infelizmente, checkinstallparece não ser o item que é mantido ativamente (?) :-(
Nikos Alexandris
@NikosAlexandris Estou curioso, se funciona para o objetivo pretendido e faz isso bem - o que, como não usuário atual, presumo que funcione - por que é necessário que seja mantido ativamente?
Hashim
@Hashim Entendo o seu ponto. Fora do "pensamento habitual", porém, um software relacionado a compilar software não precisaria de manutenção, quando os compiladores evoluíssem?
Nikos Alexandris
6

Na maior parte, esse foi o motivo por trás de pacotes, portas e outros tipos de gerenciadores para impedir que esse tipo de coisa aconteça.

Eu diria que a exclusão manual é a única maneira de uma instalação manual, a menos que alguém tenha uma resposta melhor para esse ponto que eu talvez não saiba.

baweaver
fonte
6

Mais uma alternativa são as dicas do Linux From Scratch :

Mais controle e gerenciamento de pacotes usando usuários de pacotes

3 Usuários do Pacote
3.1 Introdução

A idéia básica desse esquema é facilmente explicada. Todo pacote pertence a um determinado "usuário do pacote". Ao instalar um pacote, você cria e instala o pacote como usuário do pacote, fazendo com que todos os arquivos instalados sejam de propriedade do usuário do pacote. Como conseqüência, todas as tarefas usuais de gerenciamento de pacotes podem ser realizadas confortavelmente através do uso de utilitários de linha de comando padrão. Um simples ls -l <file>dirá a você, por exemplo, a que pacote <file>pertence e um find -user ...comando permite que você execute uma operação em todos os arquivos pertencentes a um determinado pacote, por exemplo, exclua-os para desinstalar o pacote.

Mas o gerenciamento de pacotes não é para isso que os usuários são bons. Como os usuários do pacote não têm direitos de root, a instalação de um pacote é limitada no que ele pode fazer. Uma coisa que um usuário de pacote não tem permissão para fazer, por exemplo, é sobrescrever arquivos de um usuário de pacote diferente. Conflitos entre pacotes diferentes que desejam instalar um arquivo binário, de biblioteca ou de cabeçalho com o mesmo nome são mais comuns do que você imagina. Com os usuários do pacote, você nunca corre o risco de a instalação do pacote B destruir arquivos do pacote A silenciosamente, sem você perceber. Toda tentativa de fazer isso durante a instalação do pacote B causará um erro "Permissão negada" ou "Operação não permitida", para que você tenha a chance de tomar as medidas apropriadas. Outra coisa que os usuários do pacote não podem fazer é instalar binários raiz setuid. A decisão de fazer uma raiz setuid binária também é algo que um administrador prudente não deseja deixar para o criador de um pacote de software.

Geralmente, as contas de usuário do pacote não têm senha válida, de modo que somente o su usuário root pode fazer o root , o que garante que os usuários do pacote não abram uma maneira adicional no sistema e prejudiquem a segurança. Mas você pode definir senhas de qualquer maneira para permitir que um co-administrador que você deseja instalar e manter determinados pacotes de software o faça sem ter acesso à conta raiz real. Este co-administrador pode, por exemplo, instalar, excluir, alterar bibliotecas adicionais que possam ser necessárias para o seu grupo de trabalho. Ele não seria capaz de remover ou modificar bibliotecas que não lhe pertencem, como libc.

Após essa primeira sugestão, encontrei uma variante evoluída:

crablfs - Sistema de gerenciamento de pacotes baseado no usuário

Este crablfsé o exemplo mais recente de gerenciamento de pacotes usando uids e gids exclusivos para gerenciamento de pacotes, mas no sourceforge está evoluindo novamente nos ulfs:

uLFS: seu Linux gerenciável e reutilizável do zero

Para usuários causais de pacotes instalados, acho que a solução LFS de "usuários de pacotes" é leve, menos invasiva e elegante. Em resumo, você instala pacotes /usr/localou /home/user/localrastreia arquivos usando uids e gids exclusivos para cada pacote, mas coloca todos os arquivos nos locais tradicionais, diretórios comuns /usr/local/bin, /usr/local/libcomo em todas as distribuições principais do Linux ... oclusão de arquivos e substituição ou exclusão indesejada de arquivos é evitado por um truque simples do Linux, explicado por Matthias S. Benkmann em more_control_and_pkg_man.txt, que precisa apenas da manipulação normal de permissões de arquivos e diretórios, por exemplo, a permissão de bits persistentes para diretórios para evitar sobrescrições indesejadas de arquivos:

3.3 Grupos

Cada usuário do pacote pertence a pelo menos 2 grupos. Um desses grupos é o grupo "install", ao qual todos os usuários do pacote (e apenas os usuários do pacote) pertencem. Todos os diretórios nos quais os pacotes têm permissão para instalar itens pertencem ao grupo de instalação. Isso inclui diretórios como / bin e / usr / bin, mas exclui diretórios como / root ou /. Os diretórios pertencentes ao grupo de instalação são sempre graváveis ​​em grupo. Isso seria suficiente para os aspectos de gerenciamento de pacotes, mas sem preparação adicional, isso não daria segurança ou controle adicional, pois cada pacote poderia substituir os arquivos de um pacote diferente (a alteração seria visível na saída dels -l, Apesar). Por esse motivo, todos os diretórios de instalação obtêm o atributo adesivo. Isso permite que os usuários criem novos arquivos e excluam ou modifiquem seus próprios arquivos no diretório, mas os arquivos de outros usuários não podem ser modificados ou removidos. No restante desta dica, sempre que o termo "diretório de instalação" for usado, ele se refere a um diretório que pertence à instalação do grupo, é gravável e persistente. IOW, para se transformar <dir>em um diretório de instalação, você faria

instalação do chgrp && chmod g + w, o + t

Para mim, parece uma solução simples e inteligente! Eu usei esse esquema na minha compilação LFS e é uma solução funcional ...

user12554
fonte
3
  1. Você pode criar um RPM vazio como lembrete.
  2. Você pode agrupar o software adequadamente em um RPM.
  3. Você pode deixar uma cópia dos tararquivos da instalação /usr/src/non-rpmspara lembrá-lo (é o que eu costumo fazer).
Aaron D. Marasco
fonte