Hugo Cisneiros (Eitch), hugo arroba devin ponto com ponto br
Versão 4.0, 2006
Índice
No Linux, geralmente os aplicativos vêem em forma de código-fonte, então o usuário tem de baixar e compilar. Os pacotes servem justamente para facilitar o trabalho do usuário, dando a ele um arquivo empacotado com o código já compilado. Existem diversos gerenciadores de pacotes que iremos aprender a usar o básico deles aqui. Tem o RPM (RPM Package Manager), que é usado por várias distribuições como o Mandriva, Red Hat, SuSE, Mandrake, etc. Também tem o DEB
(Debian), muito bom também e usado pela distribuição Debian e suas derivadas (que são baseadas no Debian justamente por causa do tipo de gerenciamento de pacotes). E temos também o empacotamento do Slackware (TGZ
), que não é tão poderoso como os anteriores, mas serve muito bem.
Além de empacotar o código-fonte compilado, os gerenciadores de pacotes também armazenam as informações de instalação em um banco de dados, para depois o usuário ter informações sobre a instalação e para desinstalar o pacote do sistema. E não há apenas pacotes com código-fonte compilado, também há pacotes que contém o código-fonte sem compilar, mas empacotado, como é o caso dos SRPMS
(Source RPMS).
Então vamos ver algumas instruções de como usar estes gerenciadores de pacotes tão úteis e práticos :)
Os pacotes TGZ
do Slackware são bem mais simples que os outros tipos de pacotes. Eles são arquivos empacotados e compactados em formato .tar.gz
, com a estrutura de diretórios igual ao do sistema e alguns scripts adicionais com informações sobre o pacote. Você pode ver o conteúdo do arquivo justamente descompactando em um diretório qualquer que você tenha criado.
Além disso, nesse tipo de pacote, não há resolução automática de dependências (quer dizer, há gerenciadores tratados mais a frente que fazem isso, mas não de uma forma perfeita). Vamos aprender agora como usar algumas coisas essenciais para os pacotes do Slackware :)
No Slackware, você pode utilizar um menu centralizado ou utilizar os comandos separados para manipular os pacotes do sistema. Para acessar o menu centralizado, digite:
# pkgtool
No menu, você poderá fazer determinadas ações dependendo da opção que você escolher:
Opção | Ação |
---|---|
Current | Instala todos os arquivos pacotes (.tgz) do diretório atual (onde você executou o comando pkgtool). |
Other | Instala todos os pacotes contidos em um outro diretório (você irá especificar) |
Floppy | Instala todos os pacotes contidos em um disquete que você fornecer |
Remove | Remove um pacote já instalado do sistema (ele lhe dará a lista de pacotes) |
View | Mostra uma lista dos pacotes do sistema e seus detalhes |
Setup | Configura alguns pacotes que possuem scripts pra isso |
Tabela 3.8. Opções do comando pkgtool
Ou você pode utilizar os comandos individuais para essas tarefas. Por exemplo, se você quiser instalar um pacote .tgz
, faça:
# installpkg pacote.tgz
O comando installpkg
apenas instala um pacote, mesmo tendo uma versão antiga deste mesmo pacote já instalado. Nesse caso, se você instalar com o installpkg
, seu sistema ficará com duas versões do pacote. Para evitar isso quando for fazer uma atualização de versão de um certo pacote, faça:
# upgradepkg pacote.tgz
Para remover um pacote do sistema, use:
# removepkg pacote
Se por acaso você tiver problemas com o pacote e deseja descompactá-lo de forma correta para analisar (o que poderá não ser muito comum e necessário fazer), você pode utilizar o comando:
# explodepkg pacote.tgz
E esses são os comandos individuais. Existe também o makepkg
, que cria pacotes .tgz
de forma simples. Mas como isso sai um pouco do assunto deste tópico, deixa pra próxima ;)
Para instalar um pacote, usa-se a opção -i
:
# rpm -i pacote.rpm
Você também pode utilizar as opções -v
e -h
combinadas com a -i
para uma mostragem mais agradável. Se você já tem o pacote.rpm
e deseja atualizar para uma versão mais recente da mesma, você utiliza a opção -U
ao invés da -i
, exemplo:
# rpm -Uvh pacote-atualizacao.rpm
Isso irá atualizar os arquivos do pacote. Se você quer retirar o pacote do seu sistema, você utiliza a opção -e
, assim:
# rpm -e nome-do-pacote
Caso este pacote gere dependências com outros pacotes e mesmo assim você queira removê-lo, você pode utilizar a opção --force
, que como o nome diz, força a remoção do mesmo:
# rpm -e nome-do-pacote --force
Cuidado | |
---|---|
Forçar a remoção de um pacote sem resolver as dependência pode causar os programas dependentes do pacote a não funcionarem corretamente. Use apenas se você souber o que estiver fazendo. |
Agora o contrário: se você quer instalar um pacote que requer outros pacotes como dependência, utilize o parâmetro --nodeps
, dessa forma:
# rpm -Uvh pacote.rpm --nodeps
Além da instalação e desinstalação de pacotes, um recurso muito útil no RPM é a consulta aos pacotes já existentes. Por exemplo, se você quiser listar todos os pacotes instalados no sistema, pode utilizar o comando:
# rpm -qa
Ou se preferir, pode utilizar outros comandos como filtro, organizando melhor a sua visualização:
# rpm -qa | sort | less
O comando acima executou o rpm -qa
, ordenou por ordem alfabética e utilizou o comando less
para ajudar na visualização. Agora você pode utilizar as setas do teclado, ou as teclas PgUp e PgDown, para navegar entre a listagem e quando quiser sair, é só apertar a tecla Q.
Se você quiser apenar ver se tem um pacote instalado no sistema, sem ter que listar todos e procurar de um em um, basta apenas colocar o nome do pacote depois do comando anterior, exemplo:
# rpm -qa kdebase
kdebase-3.4.1-1.2.fc4.kde
Ou então você pode combinar com o comando grep
e listar todos os pacotes com o nome exemplo kde
, dessa forma:
# rpm -qa | grep kde
kdenetwork-3.4.1-1.2.fc4.kde
kdegraphics-3.4.1-1.3.fc4.kde
k3b-0.12.2-1.0.fc4.kde
amarok-1.2.4-6.1.fc4.kde
kdegames-3.4.1-1.2.fc4.kde
kdelibs-3.4.1-1.3.fc4.kde
kdebase-3.4.1-1.2.fc4.kde
kdeutils-3.4.1-1.2.fc4.kde
kdemultimedia-3.4.1-1.2.fc4.kde
k3b-mp3-0.12.2-1.0.fc4.kde
Legal. Agora eu quero obter informações detalhadas sobre um pacote específico... Digamos assim, do pacote wget:
# rpm -qi wget
Name : wget Relocations: (not
relocatable)
Version : 1.9.1 Vendor: Red Hat, Inc.
Release : 22 Build Date: Wed 02 Mar 2005 09:23:08
AM BRT
Install Date: Thu 23 Jun 2005 12:05:03 PM BRT Build Host:
porky.build.redhat.com
Group : Applications/Internet Source RPM: wget-1.9.1-22.src.rpm
Size : 1141398 License: GPL
Signature : DSA/SHA1, Fri 20 May 2005 03:28:44 PM BRT, Key ID b44269d04f2a6fd2
Packager : Red Hat, Inc. <http://bugzilla.redhat.com/bugzilla>
URL : http://wget.sunsite.dk/
Summary : A utility for retrieving files using the HTTP or FTP protocols.
Description :
GNU Wget is a file retrieval utility which can use either the HTTP or
FTP protocols. Wget features include the ability to work in the
background while you are logged out, recursive retrieval of
directories, file name wildcard matching, remote file timestamp
storage and comparison, use of Rest with FTP servers and Range with
HTTP servers to retrieve files over slow or unstable connections,
support for Proxy servers, and configurability.
Acima você pode observar qual o pacote fonte do wget, qual o tamanho, quem empacotou, a licença, versão, quando foi instalado, além de um resumo e descrição do que é o pacote. Quem quer conhecer mais sobre os programas dentro do Linux pode utilizar o rpm -qa
para listar todos os pacotes e usar o rpm -qi
para ver o que cada pacote faz :) Haja paciência!
Lembra das dependências? Se quisermos ver quais pacotes dependem de um certo pacote, usamos:
# rpm -qR pacote
Às vezes temos uma dúvida cruel: o que diabos esse arquivo está fazendo aqui? Ele pertence a quem? O que ele faz? Pra solucionar essas dúvidas, podemos verificar qual o pacote dono de um arquivo, utilizando:
# rpm -qf /etc/arquivo
Exemplo:
# rpm -qf /usr/sbin/chroot
coreutils-5.2.1-48
Ou você pode fazer o contrário (o que é muito útil), ou seja, listar todos os arquivos que pertencem a um pacote:
# rpm -ql pacote
Exemplo:
# rpm -ql sox
/usr/bin/play
/usr/bin/rec
/usr/bin/sox
/usr/bin/soxmix
/usr/bin/soxplay
/usr/share/doc/sox-12.17.7
/usr/share/doc/sox-12.17.7/Changelog
/usr/share/doc/sox-12.17.7/README
/usr/share/doc/sox-12.17.7/TODO
/usr/share/man/man1/sox.1.gz
/usr/share/man/man1/soxexam.1.gz
/usr/share/man/man1/soxmix.1.gz
Pra completar, abaixo segue uma tabela com os comandos e suas funções RPM para sua referência e comodidade!
Comando | Ação |
---|---|
rpm -qc pacote |
Lista os arquivos de configuração do pacote |
rpm -qd pacote |
Lista os arquivos de documentação do pacote |
rpm -qs pacote |
Diz o estado do pacote (normal/não instalado/substituído) |
rpm --initdb |
Gera um banco de dados inicial de pacotes para o RPM |
rpm --rebuilddb |
Refaz o banco de dados do RPM (Útil para recuperar um banco corrompido) |
Tabela 3.9. Parâmetros do comando RPM
Para mais informações sobre o comando rpm
, consulte sua página de manual com o comando:
$ man rpm
Para manipular os pacotes .deb
, o Debian e seus derivados utilizam um programa chamado dpkg
. Vamos aprender agora como utilizar algumas coisas básicas deste programa.
Primeiro, para instalar um pacote, utilize a opção -i
:
# dpkg -i pacote.deb
O -i
também serve para atualização de um pacote. Ou seja, se o pacote já existir e o que você estiver tentando instalar for mais novo, ele atualiza para você.
Para remover um pacote do sistema, use o -r
:
# dpkg -r pacote
Caso esse pacote não seja removido porque outros pacotes dependem dele, você pode forçar a remoção do pacote com o parâmetro --force-depends
:
# dpkg -r --force-depends pacote
Cuidado | |
---|---|
Forçar a remoção de um pacote sem resolver as dependência pode causar os programas dependentes do pacote a não funcionarem corretamente. Use apenas se você souber o que estiver fazendo. |
Para ver uma lista com todos os pacotes intalados no sistema, utilize:
# dpkg -l
O dpkg então irá te mostrar uma lista com todos os pacotes, o status deles, a versão e um pequeno sumário sobre o que é o pacote.
Nota | |
---|---|
Antes do nome do pacote, há duas letras que indicam o status do pacote. Caso seja |
Para saber se apenas um pacote está instalado, é só colocar o nome do pacote depois do comando anterior, assim:
# dpkg -l vim
Se você quiser listar todos os pacotes associados a uma certa palavra, use o parâmetro -l
da seguinte forma:
# dpkg -l '*gnome*'
Dessa forma todos os pacotes com o nome gnome inclusos serão mostrados na tela.
Beleza, agora eu quero obter uma informação detalhada de um certo pacote (vamos usar o grub como exemplo). Para isso eu utilizo o parâmetro -p
assim:
# dpkg -p grub
Package: grub
Priority: optional
Section: admin
Installed-Size: 668
Maintainer: Grub Maintainers <[email protected]>
Architecture: i386
Version: 0.95+cvs20040624-17
Depends: libc6 (>= 2.3.2.ds1-4), libncurses5 (>= 5.4-1)
Suggests: grub-doc, grubconf
Size: 358684
Description: GRand Unified Bootloader
GRUB is a GPLed bootloader intended to unify bootloading across x86
operating systems. In addition to loading the Linux kernel,
it implements the Multiboot standard, which allows for flexible loading
of multiple boot images (needed for modular kernels such as the GNU Hurd).
Com isso você obtém detalhes do pacote, como por exemplo quem mantém o pacote, que seção ele pertence, qual arquiteura, do que ele depende, qual o tamanho, versão e um sumário e descrição sobre o que é o pacote. Tá bom pra você ou quer mais? :) Se quiser mais, você pode listar todos os pacotes com o dpkg -l
e ir verificando os detalhes de cada pacote para ver o que cada um faz e tudo mais: uma eficiente, porém demorada forma de aprender!
Para verificar o status de um pacote (como mostrado na lista com o dpkg -l
, utilize o parâmetro -s
:
# dpkg -s pacote
Para listar os arquivos instalados do sistema de um certo pacote, use:
# dpkg -L pacote
E finalmente, se você quiser saber à qual pacote instalado um arquivo pertence (por exemplo: descobrir o que um executável associando à um pacote), use a opção -S
dessa forma:
# dpkg -S arquivo
Exemplo:
# dpkg -S /usr/bin/file
file: /usr/bin/file
O apt (Advanced Package Manager) é um poderoso gerenciador de pacotes que resolve as complicações de dependências de pacotes e instalação via internet. Com ele, é possível com apenas um comando, baixar a versão mais atual de um programa e instalar no sistema. Ele foi feito inicialmente para a distribuição Debian e seus pacotes .deb
, mas com o tempo o apt foi portado para o tipo de pacote .rpm
, podendo ser assim usado em distribuições baseadas em RPM.
Os arquivos do apt estão todos localizados no diretório /etc/apt
. Dentro desse diretório há um importante arquivo chamado sources.list
, que contém uma lista de todos os repositórios que você irá usar. Vamos aqui configurar apenas alguns repositórios padrões do Debian:
deb http://ftp.debian.org/debian/ sarge main non-free contrib
Exemplo 3.1. Repositório Debian Base (Sarge)
Essa linha acima é a linha que você deve deixar dentro do arquivo /etc/apt/sources.list
para configurar o repositório do Debian na versão sarge (estável mais recente enquanto escrevo isto).
Depois dos repositórios configurados, você vai precisar atualizar a lista de pacotes, utilizando o seguinte comando:
# apt-get update
Então o apt
irá baixar do servidor Debian da Internet a lista de pacotes com todos os seus cabeçalhos e descrições. Depois de atualizada a lista, você poderá fazer todos os comandos a seguir.
Para procurar por um pacote, utilizando uma palavra relacionada, utilize o apt-cache
da seguinte forma:
# apt-cache search DVD
Assim ele te retornará vários pacotes associados com a palavra DVD. Por exemplo, aqui ele me retornou pacotes como o cdlabelgen, dvdauthor, k3b e por aí vai.
Para instalar um pacote e todas as suas dependências, use:
# apt-get install pacote
Nota | |
---|---|
O comando |
Para remover um pacote e todas as suas dependências, use:
# apt-get remove pacote
Caso você queira atualizar todo o seu sistema, instalando as atualizações de todos os pacotes necessitados e carentes de atualização, use o comando upgrade
:
# apt-get upgrade
E por último, se você quiser atualizar uma versão de distribuição totalmente (e isso inclui atualizações que podem se tornar perigosas e quebrar o sistema e explodir seu micro), use:
# apt-get dist-upgrade
Epa! Eu já ia me esquecendo... O apt
também possui uma característica muito sensacional, que é utilizar os poderes da super vaca. Para utilizá-los, invoque a super vaca com o comando:
# apt-get moo
O Yum (Yellow dog Updater, Modified) é um programa cujo objetivo é resolver as complicações da instalação/desinstalação de pacotes. Com o yum, o processo de instalação de um pacote se torna extremamente simples: com apenas um comando, você consegue baixar da internet a versão mais atual e instalar no sistema, deixando pronto para o uso. Seu endereço oficial é: http://linux.duke.edu/projects/yum/.
O yum atualmente é utilizado oficialmente pela distribuição Fedora (Seção 2.1.7, “Fedora”. Então estas instruções serão baseadas nesta distribuição. Caso você queira saber como fazer em outra, tente utilizar o apt.
O arquivo de configuração do yum está localizado em /etc/yum.conf
. Além disso, os repositórios (sites que contém os pacotes dos programas) são configurados através de cada arquivo com extensão .repo
localizados no diretório /etc/yum.repos.d
.
A configuração padrão do yum contida no /etc/yum.conf
é suficiente para o bom funcionamento do programa. Você só precisará de alguns repositórios já confiurados. Por exemplo, o padrão para o repositório do Fedora Core é o arquivo /etc/yum.repos.d/fedora.repo
(ou /etc/yum.repos.d/fedora-core.repo
):
[base]
name=Fedora Core $releasever - $basearch - Base
#baseurl=http://download.fedora.redhat.com/pub/fedora/linux/core/$releasever/$basearch/os/
mirrorlist=http://fedora.redhat.com/download/mirrors/fedora-core-$releasever
enabled=1
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-fedora
Exemplo 3.2. Repositório Base do Fedora (/etc/yum.repos.d/fedora.repo)
Com este repositório configurado, pode-se instalar e remover todos os pacotes básicos da distribuição. Mas e as atualizações? No caso das atualizações, o repositório é outro, contido em /etc/yum.repos.d/fedora-updates.repo
:
[updates-released]
name=Fedora Core $releasever - $basearch - Released Updates
#baseurl=http://download.fedora.redhat.com/pub/fedora/linux/core/updates/$releasever/$basearch/
mirrorlist=http://fedora.redhat.com/download/mirrors/updates-released-fc$releasever
enabled=1
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-fedora
Exemplo 3.3. Repositório de Atualizações (/etc/yum.repos.d/fedora-updates.repo)
Dica | |
---|---|
Há varios outros repositórios disponíveis (como o DAG, FreshRPMS, Fedora Extras) que contém outros programas. Cada um desses repositórios têm configurações próprias para criar um arquivo |
Agora vamos aprender a usar alguns comandos básicos com o yum
. Primeiramente você pode listar todos os pacotes disponiveis para a instalação através do comando:
# yum list available
Ou então você pode procurar por um pacote, usando alguma palavra relacionada com o pacote. Por exemplo, se você quer todos os pacotes relacionados com a palavra 'DVD', use:
# yum search DVD
E ele te retornará vários pacotes relacionados com a palavra DVD (por exemplo, aqui retornou pacotes como cdrecord, k3b, dvd+rw-tools, etc).
Para instalar um pacote, use:
# yum install pacote
E o yum
irá baixar o pacote da Internet e instalar para você. Ou seja, todas essas operações precisam de acesso à Internet ;) Para desinstalar o mesmo pacote, use:
# yum remove pacote
Caso você queira atualizar um certo pacote, use:
# yum update pacote
Ou se quiser atualizar todos os pacotes do seu sistema que precisem de atualização:
# yum update
E se você quiser apenas verificar se precisa de atualizações para o seu sistema ou não, faça um:
# yum check-update
Se você quer listar todos os pacotes disponíveis, utilize:
# yum list
Também existe o conceito de grupos de pacotes. Um grupo de pacotes é um conjunto de pacotes necessários para se instalar alguma funcionalidade no sistema. Para listar os grupos de pacotes, use o comando:
# yum grouplist
Installed Groups:
Office/Productivity
MySQL Database
Editors
System Tools
Text-based Internet
X Software Development
DNS Name Server
GNOME Desktop Environment
Authoring and Publishing
FTP Server
Network Servers
Games and Entertainment
Legacy Software Development
X Window System
Graphics
Web Server
Windows File Server
Printing Support
KDE Software Development
KDE (K Desktop Environment)
Mail Server
Server Configuration Tools
Sound and Video
Administration Tools
Development Tools
Graphical Internet
Available Groups:
Engineering and Scientific
Window Managers
GNOME Software Development
XFCE Software Development
Legacy Network Server
Hardware Support
XFCE
Java Development
Eclipse
Educational Software
PostgreSQL Database
News Server
Com isso ele mostra os grupos disponiveis e já instalados. No caso eu quero instalar o suporte ao XFCE, então faço:
# yum groupinstall "XFCE"
E para removê-lo:
# yum groupremove "XFCE"
E é isso!
Importante | |
---|---|
Como eu disse anteriormente, você necessita de uma conexão de Internet para fazer todas os comandos acima, mesmo consultar o nome de um pacote por alguma palavra relacionada. Das primeiras vezes que você utiliza os comandos, o yum baixa da internet todos os cabeçalhos dos pacotes e eles ficam armazenados na sua máquina. Para não precisar conectar no servidor na Internet toda vez que usar um comando, utilize o parâmetro
|
Dica | |
---|---|
Existe também uma interface gráfica para o yum chamada yumex (Yum Extender). Essa interface permite você atualizar, instalar e desinstalar os pacotes de uma maneira mais amigável. O pacote com esse programa se encontra no repositório do Fedora Extras ou então na seguinte URL: |