Eu uso o Ubuntu 12.04. Digamos que eu instalei a package x
partir do repositório (com todas as suas dependências) na versão 1.7, mas preciso de algumas funcionalidades que só estão disponíveis na versão 1.8; portanto, faço o download do tar de origem e o compilo:
./configure
make
make install
- Isso substitui os binários 1.7 existentes?
- Se os binários existentes forem substituídos, o gerenciador de pacotes reflete a nova versão (1.8) e pode
package x
ser atualizado pelo gerente de pacotes no futuro? - Se
package y
tiver uma dependência depackage x 1.8
- será satisfeito?
Eu tenho tentado encontrar uma boa fonte online que explica isso. Se você tiver alguma recomendação, entre em contato.
ubuntu
package-management
compiling
software-installation
Philip D'Rozario
fonte
fonte
make install
. Acho que, pelas respostas, fica claro que, basicamente, tudo o que está acontecendo é que os arquivos são copiados para os diretórios dentro do prefixo de instalação (embora isso aconteça com a possibilidade de que alguns arquivos de configuração possam ser inseridos/etc
e alguns dados dinamicamente alteráveis, representando uma inicial estado de algo pode ser colocado/var
). No entanto, se você achar que isso não está claro, ficarei feliz em editar minha resposta para explicar.Respostas:
A grande maioria dos
.deb
pacotes, fornecidos ou não por repositórios oficiais, é instalada com o prefixo/usr
.O que isso significa é que os executáveis que devem ser executados pelo usuário entram
/usr/bin
ou/usr/sbin
(ou/usr/games
se é um jogo), as bibliotecas compartilhadas entram/usr/lib
, os dados compartilhados independentes da plataforma entram/usr/share
, os arquivos de cabeçalho entram/usr/include
e o código fonte instalado entra automaticamente/usr/src
.Uma pequena porcentagem de pacotes usa
/
como prefixo. Por exemplo, obash
pacote coloca obash
executável em/bin
, não/usr/bin
. Isso é para pacotes que fornecem o essencial para executar no modo de usuário único (como o modo de recuperação) e iniciar o modo de usuário múltiplo (mas lembre-se, isso geralmente inclui funcionalidade para montar alguns tipos de compartilhamentos de rede ... caso/usr
seja um sistema de arquivos remoto).Uma pequena porcentagem de
.deb
pacotes, principalmente aqueles criados com o Quickly , cria uma pasta específica do pacote/opt
e coloca todos os seus arquivos lá. Fora isso, na maioria das vezes/opt
é o local usado pelo software instalado a partir de um instalador executável que não usa o gerenciador de pacotes do sistema, mas não envolve a compilação a partir do código-fonte. (Por exemplo, se você instalar um programa proprietário como o MATLAB, provavelmente o incluirá/opt
.)Ao contrário de tudo isso, quando você baixa um arquivo fonte (ou obtém o código fonte de um sistema de controle de revisão como o Bazaar ou o git), constrói e instala, ele geralmente é instalado no prefixo
/usr/local
(a menos que você o solicite) de outra forma). Isso significa que seus executáveis ir/usr/local/bin
,/usr/local/lib
ou/usr/local/games
, suas bibliotecas/usr/local/lib
, e assim por diante.Existem algumas exceções - alguns programas, por padrão, são instalados no
/usr
prefixo e, portanto, substituem as instalações dos mesmos programas nos.deb
pacotes. Normalmente, você pode evitar isso executando, em./configure --prefix=/usr/local
vez de./configure
quando criá-los. Mais uma vez enfatizo que geralmente isso não é necessário.(É por esse motivo que faz muito sentido colocar o código-fonte que você está construindo e instalará para uso em todo o sistema
/usr/local/src
, o que existe para esse fim.)Supondo que a versão empacotada esteja instalada
/usr
e a versão que você instalou da fonte esteja em/usr/local
:Os arquivos do pacote instalado não serão substituídos.
Normalmente, a versão mais recente será executada quando você invocar o programa manualmente a partir da linha de comando (supondo que
/usr/local/bin
ou onde os executáveis estejam instalados esteja em suaPATH
variável de ambiente e apareça antes do/usr
diretório com prefixo correspondente , como/usr/bin
).Mas pode haver alguns problemas com o que os lançadores são criados e disponibilizados através de menus ou pesquisa. Além disso, se você instalou mais de uma versão de uma biblioteca em locais diferentes, pode ser um pouco mais complicado determinar qual será usado por qual software.
Se você não está realmente usando as duas versões do programa ou da biblioteca, geralmente deve remover a que não está usando, embora em situações limitadas você queira manter um pacote instalado para satisfazer as dependências.
No entanto, se por algum motivo os arquivos forem substituídos (por exemplo, se o código-fonte estiver instalado em
/usr
vez de/usr/local
):sudo make uninstall
no diretório) e desinstale o pacote ou pacotes que fornecem os arquivos que foram substituídos (pois eles não serão restaurados com a desinstalação da versão instalada da fonte). Em seguida, reinstale a versão que você deseja ter./usr/local/src/program-or-library-name
Quanto ao cumprimento de dependências:
Se houver um
.deb
pacote que dependa do software que você instalou da fonte e exija a versão que você instalou da fonte (ou superior), esse pacote não será instalado com êxito. (Ou, para ser mais preciso, você poderá "instalá-lo", mas ele nunca será "configurado" para não poder usá-lo.) Dependências são resolvidas de acordo com as versões dos pacotes instaladas, e não qual software você realmente tem.Da mesma forma, pelo menos o software tentará instalar completamente, mesmo se você tiver excluído manualmente os arquivos fornecidos pelos pacotes dos quais o software que está sendo instalado depende. (Geralmente, você não deve tentar aproveitar isso para qualquer finalidade. O gerenciador de pacotes que opera com base em informações falsas é quase sempre uma coisa ruim.)
Portanto, se você não conseguir encontrar um pacote que forneça a versão do software necessária, poderá ser necessário criar seu próprio
.deb
pacote a partir do software compilado e instalar a partir desse pacote. Então, o gerenciador de pacotes saberá o que está acontecendo. Criar um pacote para seu próprio uso, que você não precisa funcionar bem nos computadores de outras pessoas, na verdade não é muito difícil. (Mas acho que isso pode estar fora do escopo da sua pergunta, como está atualmente redigida.)fonte
O que você instala a partir do centro de software ou com um comando APT (
apt-get
,aptitude
) ou comdpkg
é conhecido pelo sistema de gerenciamento de pacotes.dpkg
é a ferramenta de manipulação de pacotes de baixo nível, o APT e os amigos são ferramentas de nível superior que invocamdpkg
para executar a instalação real e também manipulam dependências e downloads de pacotes.Se você compilar um programa a partir da fonte, ele não será conhecido pelo gerenciador de pacotes. A convenção no Linux, que você deve seguir com a dificuldade de acompanhar as coisas e substituir suas instalações, é:
/bin
,/lib
,/sbin
,/usr
Estão reservados para o gerenciador de pacotes;/usr/local
é para o administrador do sistema - respeite a hierarquia de diretórios lá, mas você está sozinho para gerenciar arquivos.Veja a melhor maneira de atualizar o vim / gvim para 7.3 no Ubuntu 10.04? para obter uma lista de maneiras de obter versões mais recentes do software. A maneira mais fácil é obter um PPA , se houver. Se você obtiver um pacote binário ou compilar da fonte, recomendo o uso do stow para gerenciar o software instalado manualmente. Como alternativa, crie seu próprio
.deb
pacote - é mais trabalhoso, mas vale a pena se você atualizar com freqüência (geralmente refazer o pacote para a próxima versão menor é muito rápido) ou se você implantar em muitas máquinas executando a mesma distribuição.Na maioria dos programas, se você executar
./configure && make && sudo make install
, o programa é instalado em/usr/local
. Verifique a documentação fornecida com a fonte (normalmente em um arquivo chamadoREADME
ouINSTALL
) ou execute./configure --help
para verificar se esse é o caso. Se o programa estiver instalado/usr/local
, ele não interferirá na versão fornecida pelo gerenciador de pacotes./usr/local/bin
vem em primeiro lugar no sistemaPATH
. Observe que você precisará executarmake install
como administrador (root); não compile como raiz. Como observado acima, eu recomendo usar o stow em vez de instalar diretamente no/usr/local
.fonte
Isso depende do pacote e de muitas outras coisas
Para encurtar a história:
não há resposta genérica. É altamente dependente do pacote. Você deve usar PPAs +1 oficiais, se possível, em vez de compilar a partir da fonte.
fonte
/opt
./usr/local
é o prefixo padrão e even/usr
é um prefixo padrão mais comum que/opt
./opt
é mais comumente usado para software que é instalado dentro de um diretório dedicado nomeado para o aplicativo específico (por exemplo, um aplicativo chamado Foo pode ser instalado com todos os seus arquivos/opt/foo
).