1. O que é um pacote
Um "pacote" (ou "pacote de software") geralmente se refere a um aplicativo, que pode ser um aplicativo GUI, uma ferramenta de linha de comando ou uma biblioteca de software (exigida por outros programas de software). Um pacote é essencialmente um arquivo compactado que contém arquivos binários executáveis, arquivos de configuração e, às vezes, informações de dependência.
Antigamente, o software costumava ser instalado a partir de seu código-fonte. Você irá consultar um arquivo (geralmente denominado README) para ver de quais componentes de software ele precisa e a localização dos arquivos binários. Geralmente inclui um script de configuração ou Makefile. Você tem que compilar o software sozinho ou lidar com todas as dependências sozinho (alguns softwares requerem a instalação de outro).
Para se livrar dessa complexidade, a distribuição Linux criou seu próprio formato de pacote para fornecer aos usuários finais arquivos binários prontos para usar (software pré-compilado) para instalar o software, enquanto fornece alguns metadados (número da versão, descrição ) e dependências.
É como fazer um bolo e comprar um bolo.
Em meados da década de 1990, o Debian criou o formato de empacotamento DEB (.deb) e o Red Hat Linux criou o sistema de empacotamento RPM (abreviação de Red Hat Package Manager) (.rpm). A forma de compilar o código-fonte ainda existe, mas agora é opcional.
Para interagir ou usar o sistema de empacotamento, você precisa de um gerenciador de pacotes. Os usuários só precisam decidir que bolo comer e como fazê-lo em um depósito de software semelhante a uma loja.
2. Como funciona o gerenciador de pacotes?
Lembre-se de que o gerenciador de pacotes é um conceito geral, não é exclusivo do Linux. Freqüentemente, você encontrará gerenciadores de pacotes para vários softwares ou linguagens de programação. Existem gerenciadores de pacotes PIP apenas para pacotes Python. Até o editor Atom tem seu próprio gerenciador de pacotes. Como o foco deste artigo é o Linux, começarei pela perspectiva do Linux. No entanto, a maioria das explicações aqui também pode ser aplicada a gerenciadores de pacotes gerais. Eu criei este diagrama (baseado no SUSE Wiki) para que você possa entender facilmente como o gerenciador de pacotes funciona.
Quase todas as distribuições do Linux têm um " repositório de software ", que é basicamente uma coleção de pacotes de software. Sim, pode haver mais de uma biblioteca de software. A biblioteca de software contém diferentes tipos de pacotes de software.
O warehouse de software também possui um arquivo de metadados, que contém informações sobre o pacote de software, como o nome do pacote de software, o número da versão, a descrição do pacote de software e o nome do warehouse de software. Isso é o que você vê usando o comando apt show no Ubuntu / Debian.
O gerenciador de pacotes em seu sistema irá primeiro interagir com os metadados. O gerenciador de pacotes cria um cache local de metadados em seu sistema. Quando você executa a opção de atualização do gerenciador de pacotes (como o apt update), ele atualiza o cache de metadados local referenciando os metadados no repositório.
Quando você executa o comando de instalação do gerenciador de pacotes (por exemplo, apt install nome_do_pacote), o gerenciador de pacotes fará referência a este cache. Se encontrar as informações do pacote no cache, ele usará a Internet para se conectar ao warehouse correspondente e baixar o pacote antes de instalá-lo em seu sistema.
Um pacote pode ter dependências. Isso significa que pode ser necessário instalar outros pacotes de software. O gerenciador de pacotes geralmente lida com essas dependências e as instala automaticamente junto com o pacote que você está instalando.
O gerenciador de pacotes no Linux lida com dependências : Da mesma forma, quando você usa o gerenciador de pacotes para excluir um pacote, ele o excluirá automaticamente ou notificará que o sistema possui pacotes não usados que podem ser limpos.
Além de instalar e excluir essas tarefas óbvias, você também pode usar o gerenciador de pacotes para configurar o pacote e gerenciá-lo de acordo com suas necessidades. Por exemplo, você pode impedir que a versão de um pacote seja atualizada durante as atualizações regulares do sistema. Seu gerenciador de pacotes pode fazer muito mais.
Diferentes tipos de gerenciadores de pacotes Os gerenciadores de
pacotes variam dependendo do sistema de empacotamento, mas o mesmo sistema de empacotamento pode ter vários gerenciadores de pacotes. O gerenciador de pacotes não é necessariamente baseado na linha de comando, também existem ferramentas gráficas de gerenciamento de pacotes, como o Synaptic. O "Centro de Software" da sua distribuição também é um gerenciador de pacotes, mesmo se estiver executando apt-get ou DNF por baixo. Por exemplo, o RPM tem gerenciadores de pacotes Yum e DNF. Para DEB, você tem gerenciadores de pacotes baseados em linha de comando, como apt-get e aptitude.
Três, ferramenta apt do Ubuntu
Advanced Packaging Tools (Inglês: Advanced Packaging Tools, abreviado como APT) é Debian e seu gerenciador de pacotes Linux derivado. Usando esta ferramenta, podemos facilmente baixar, configurar e instalar formatos de software em formato binário ou de código-fonte. Para sistemas Debian, a ferramenta dpkg é freqüentemente falada. Esta função é semelhante à função apt.
apt fornece uma interface de linha de comando avançada para o sistema de gerenciamento de pacotes. Se você é um usuário relativamente antigo do Ubuntu, pode frequentemente usar o apt-get em vez do apt. Comparado ao apt-get, o apt é mais como uma versão simplificada do apt-get. A simplificação se reflete apenas na menção dos comandos mais comuns . E opções. Afinal, nem todo mundo gosta de comandos de controle longos. Dê uma olhada na comparação entre apt e apt-get:
comando apt | comando apt-get | significado |
---|---|---|
apt instalar | apt-get install | Instale um pacote |
apt remover | apt-get remove | Desinstalar um pacote |
purgar apto | apt-get purge | Desinstalar e remover arquivos de configuração |
atualização apt | apt-get update | Atualizar o índice do repositório |
atualização apt | apt-get upgrade | Atualize todos os pacotes atualizáveis |
apt autoremove | apt-get auto remove | Exclua automaticamente pacotes desnecessários |
apt full-upgrade | apt-get dist-upgrade | Gerenciar dependências automaticamente ao atualizar pacotes |
busca apt | apt-get search | Aplicativo de pesquisa |
show apto | apt-cache show | Mostrar detalhes do pacote de instalação |
Tome cmake como exemplo para ver como usar essa ferramenta.
Desinstalar cmake : sudo apt remove cmake
install cmake : sudo apt install cmake
cmake application information view :
A partir das informações exibidas pelo gerenciador do apt, você pode ver:
- a versão cmake é
3.16.3
- Tamanho
- confiar
- Pagina inicial
- Descrição
- Localização da fonte APT: http://mirrors.aliyun.com/ubuntu focal / main amd64 Packages
A localização específica pode ser um pouco diferente da fonte APT: http://mirrors.aliyun.com/ubuntu/dists/focal/main/binary-amd64/Packages.gz, neste pacote compactado, podemos ver a configuração relacionada ao cmake :
Package: cmake
Architecture: amd64
Version: 3.16.3-1ubuntu1
Multi-Arch: foreign
Priority: optional
Section: devel
Origin: Ubuntu
Maintainer: Ubuntu Developers <[email protected]>
Original-Maintainer: Debian CMake Team <[email protected]>
Bugs: https://bugs.launchpad.net/ubuntu/+filebug
Installed-Size: 18758
Depends: cmake-data (= 3.16.3-1ubuntu1), procps, libarchive13 (>= 3.3.3), libc6 (>= 2.17), libcurl4 (>= 7.16.2), libexpat1 (>= 2.0.1), libgcc-s1 (>= 3.0), libjsoncpp1 (>= 1.7.4), librhash0 (>= 1.2.6), libstdc++6 (>= 9), libuv1 (>= 1.11.0), zlib1g (>= 1:1.1.4)
Recommends: gcc, make
Suggests: cmake-doc, ninja-build
Filename: pool/main/c/cmake/cmake_3.16.3-1ubuntu1_amd64.deb
Size: 3668668
MD5sum: 0901cd90df683245c1c63aa25494e895
SHA1: 987da0bb67fef6ed1cc4bdf791c983534dea4341
SHA256: 1f09f5bd58627092ed1787538051ce9f5f016ab279fe4c795e01faa1f9619180
Homepage: https://cmake.org/
Description: cross-platform, open-source make system
Description-md5: 47b53839da906127970f1e8c870afc2d
Para simplificar, dado um endereço, sempre que a autenticação do Ubuntu é passada, o novo pacote de instalação será atualizado para o pacote no site, e o usuário pode sincronizar o endereço do novo software através da atualização. Então, há uma maneira de instalar uma versão superior do cmake?
- ppa
- Código binário
- Código fonte
Quatro, ferramentas de gerenciamento de armazém de software Ubuntu
Um warehouse de software é um conjunto de arquivos que contém informações sobre vários softwares e suas versões, bem como outras informações detalhadas, como somas de verificação. Cada versão do Ubuntu tem seus próprios quatro repositórios de software oficiais :
- Software Main-Free e open source suportado pela Canonical;
- Software livre e de código aberto mantido pela comunidade;
- Restrito - o driver proprietário do dispositivo;
- Software Multiverse restrito por direitos autorais ou questões legais.
Além do software oficial, existem outros softwares (Outros Softwares) , o mais comum pode ser o VSCODE!
O sistema recupera as informações correspondentes por meio /etc/apt
dos sources.list
arquivos armazenados no diretório , o que pode ajudar o sistema a obter o pacote de software correspondente do site onde o software está realmente armazenado. Nesse caso, ao executar o sudo apt update
comando, seu sistema usará a ferramenta APT para verificar o repositório de software e armazenar o software e suas informações de versão no cache. Quando você usa o sudo apt install package_name
comando, ele obtém o pacote da URL do software de armazenamento real por meio das informações. Se não houver informações sobre um determinado pacote no warehouse de software, ele será solicitado E:Unable to locate package
. Há um problema com o uso do repositório oficial: para garantir a compatibilidade, as novas ferramentas desenvolvidas e atualizadas no Ubuntu não serão atualizadas para o sistema existente imediatamente, mas serão oficialmente adicionadas ao repositório oficial após alguns testes. Desta vez, pode vários meses. Então, como podemos resolver isso? Por meio do PPA!
PPA
PPA (Personal Package Archive) é um warehouse que contém informações de software quando um pacote pessoal é arquivado.O significado pessoal é exclusivo do desenvolvedor e não possui uma licença formal para distribuição. O Ubuntu fornece uma plataforma chamada Launchpad que permite aos desenvolvedores de software criar seus próprios repositórios de software. Usuário final, ou seja, você pode adicionar o repositório PPA ao arquivo sources.list ao atualizar o sistema, seu sistema saberá a disponibilidade deste novo software, então você pode usar o sudo apt install
comando padrão para instalá-lo.
sudo add-apt-repository <PPA_info>
Este comando adiciona o repositório PPA à lista.sudo apt-get update
Este comando atualiza a lista de pacotes que podem ser instalados no sistema atual.sudo apt-get install <package_in_PPA>
Este comando instala o pacote.
Tal como:
sudo add-apt-repository ppa:dr-akulavich/lighttable
Você notará que este comando não possui a URL do repositório do software. Isso ocorre porque a ferramenta foi projetada para abstrair as informações da URL antes de mostrá-las a você.
Uma pequena nota: se você adicionar ppa: dr-akulavich / lighttable, obterá a Light Table. Mas se você adicionar ppa: dr-akulavich, você obterá todos os repositórios ou pacotes no "repositório de software superior". Está dividido por nível.
Basicamente, quando você adiciona um PPA usando add-apt-repository, ele executa as mesmas operações que executar manualmente estes comandos:
deb http://ppa.launchpad.net/dr-akulavich/lighttable/ubuntu YOUR_UBUNTU_VERSION_HERE main
deb-src http://ppa.launchpad.net/dr-akulavich/lighttable/ubuntu YOUR_UBUNTU_VERSION_HERE main
As duas linhas acima são a maneira tradicional de adicionar qualquer repositório de software ao arquivo sources.list do seu sistema. Mas o PPA completará automaticamente essas tarefas para você, sem considerar o URL exato do warehouse de software e a versão do sistema operacional.
O ponto menos importante aqui é que, ao usar o PPA, ele não altera o arquivo sources.list original. Ao contrário, ele /etc/apt/sources.d
cria dois arquivos no diretório de nível de sistema, um .list e arquivos de backup com um sufixo .save.
Esta é uma medida de segurança para garantir que o PPA adicionado não seja confundido com o arquivo sources.list original. Também ajuda a remover o PPA.
Você pode perguntar por que deseja usar o PPA, o PPA precisa ser usado por meio da linha de comando, nem todo mundo gosta de usar a linha de comando. Por que não distribuir diretamente os pacotes DEB que podem ser instalados graficamente?
A resposta está no processo de atualização. Se você usar o pacote DEB para instalar o software, não há garantia de que o software instalado será atualizado para uma versão mais recente quando você executar os comandos sudo apt update e sudo apt upgrade.
Isso ocorre porque o processo de atualização do apt depende do arquivo sources.list. Se não houver nenhuma entrada de software correspondente no arquivo, ele não será atualizado por meio do procedimento de atualização de software padrão.
Então, isso significa que o software instalado com o DEB nunca será atualizado? não. Depende de como o pacote DEB foi criado.
Alguns desenvolvedores adicionarão automaticamente uma entrada a sources.list para que o software possa ser atualizado como um software normal. O navegador Google Chrome é um exemplo.
Alguns softwares irão notificá-lo quando uma nova versão estiver disponível quando for executado. Você deve baixar o novo pacote DEB e executá-lo novamente para atualizar o software atual para uma versão mais recente. Oracle Virtual Box é um exemplo.
Para os pacotes DEB restantes, você deve encontrar manualmente as atualizações, o que é muito inconveniente, especialmente quando o seu software é para testadores Beta, você precisa adicionar muitas atualizações com frequência. Este é exatamente o problema que o PPA está tentando resolver.
[1] [APT] https://zh.wikipedia.org/wiki/APT
[2] [A diferença entre rpm e deb] https://www.cnblogs.com/longchang/p/12530697.html
[3] [Linux (3): ferramentas de gerenciamento de pacotes Linux] https://blog.csdn.net/xu_fengyu/article/details/85218057