Índice das dicas

Repositórios no Ubuntu e outras dicas

Por Carlos E. Morimoto em 8 de fevereiro de 2009 às 20h00

8

Assim como todas as inúmeras outras distribuições derivadas do Debian, o Ubuntu utiliza o apt como gerenciador de pacotes. Entretanto, para facilitar as coisas, o Ubuntu inclui também um conjunto de gerenciadores gráficos que, de certa forma, permitem juntar o melhor dos dois mundos.

O gerenciamento dos repositórios é feito através do "Sistema > Administração > Canais de Software", que funciona como um configurador para o arquivo "/etc/apt/sources.list", onde são especificados os repositórios que serão usados pelo sistema. Os pacotes oficiais são divididos em 5 repositórios:

main: O repositório principal, que inclui os softwares suportados oficialmente pela equipe do Ubuntu. Este repositório inclui um número relativamente pequeno de pacotes, incluindo os pacotes do Gnome e os outros softwares instalados por padrão, os pacotes de internacionalização e alguns poucos pacotes adicionais. É basicamente o mesmo conteúdo da versão em DVD.

restricted: Este repositório inclui os drivers da nVidia, da ATI e alguns módulos adicionais para o kernel (agrupados no pacote "linux-restricted-modules") que possuem o código fonte fechado, ou possuem restrições com relação à modificação ou distribuição. Agrupá-los em um repositório separado foi a solução encontrada pela equipe do Ubuntu para poder distribuí-los como parte da distribuição.

Estes drivers ao gerenciados de maneira automática pelo gerenciador de drivers restritos ("Sistema > Administração > Drivers de hardware") que se encarrega de detectar os componentes e perguntar se você deseja ativar os drivers correspondentes.

universe: Como o nome sugere, o Universe inclui quase todos os demais pacotes, um conjunto que ultrapassa a marca dos 20 GB de arquivos. Ele é basicamente um snapshot do repositório do Debian instável, que recebe uma rodada de testes e correções antes de ser disponibilizado ao público. A grande diferença em relação aos pacotes do repositório main é que eles não são oficialmente suportados pela equipe de desenvolvimento, são apenas oferecidos como um extra.

multiverse: É uma derivação do Universe, que agrupa softwares distribuídos sob licenças "não livres", que possuam alguma restrição com relação à modificação ou distribuição. Inclui diversos codecs, emuladores, plugins, programas diversos e até mesmo alguns drivers de impressora. Assim como no caso do restricted, o multiverse foi criado para permitir que estes pacotes pudessem ser incluídos na distribuição, sem que "contaminassem" os repositórios principais.

partner: Este é um repositório mantido pela Canonical (sem relação direta com o Ubuntu) para disponibilizar componentes licenciados. Ele inclui o "adobe-flashplugin", que instala o suporte a flash no Firefox e pacotes de documentação para alguns codecs comerciais vendidos no http://shop.canonical.com.

Além das questões filosóficas, a divisão permite que os repositórios sejam seletivamente desativados, como no caso de uma empresa, onde a equipe de TI decidiu utilizar apenas os pacotes do repositório main, juntamente com alguns outros pacotes específicos, para prevenir o aparecimento de problemas.

Em situações normais, você simplesmente mantém todos os repositórios ativados, com a possível exceção dos repositórios com o código fonte, que são úteis apenas para quem está interessado em compilar seus próprios pacotes:

repos_html_58bd00d2

Você pode também escolher entre baixar os pacotes dos servidores principais (o archive.ubuntu.com) ou usar os servidores do Brasil (o br.archive.ubuntu.com) que costumam ser mais rápidos. Por default o instalador utiliza também os pacotes do CD-ROM de instalação, que inclui alguns pacotes extras que não são instalados juntamente com o sistema.

O que o gerenciador faz é simplesmente ativar ou desativar as linhas correspondentes dentro do arquivo "/etc/apt/sources.list" conforme você altera as opções, exatamente o mesmo que você faria ao editar o arquivo manualmente. As linhas referentes aos repositórios principais dentro do arquivo são:

deb http://archive.ubuntu.com/ubuntu/ intrepid main restricted
deb http://archive.ubuntu.com/ubuntu/ intrepid universe
deb http://archive.ubuntu.com/ubuntu/ intrepid multiverse
deb http://archive.canonical.com/ubuntu intrepid partner

O "intrepid" em cada linha especifica a versão do Ubuntu em uso. Ao atualizar do 8.10 para o 9.04, por exemplo, o "intrepid" em todas as linhas seria substituído por "jaunty". Aqui vai uma lista rápida dos nomes e versões para referência:

warty: 4.10
hoary: 5.04
breezy: 5.10
dapper: 6.06
edgy: 6.10

feisty: 7.04
gutsy: 7.10
hardy: 8.04
intrepid: 8.10
jaunty: 9.04

Cara cada um destes repositórios, está disponível também uma linha iniciada com "deb-src", que corresponde ao repositório com o código-fonte dos pacotes. A opção do repositório "partner" aparece na aba "Programas de Terceiros" do configurador.

Em seguida, temos as opções de atualização do sistema, que são agrupadas na terceira aba. Elas são divididas em 4 grupos:

security: Inclui as atualizações de segurança, que tapam as brechas do sistema, mas não adicionam novas funcionalidades aos programas. As atualizações de segurança são especialmente importantes no Ubuntu, já que o sistema não utiliza nenhum firewall por padrão, dependendo apenas das atualizações dos serviços. Elas são atualizações de baixo risco, que raramente causam problemas.

updates: Inclui todas as novas versões dos programas, o que representa mais de 80% das atualizações disponíveis. Se você está apenas interessado em manter seu sistema estável, baixando apenas as atualizações importantes, você pode desativar este repositório, mantendo apenas o security.

proposed: Contém atualizações em estágio de teste, que não são inteiramente estáveis. É uma espécie de versão "beta" do updates, que permite que você tenha acesso às atualizações em primeira mão, mas sem garantia de estabilidade. Se você não quer dor de cabeça, é melhor mantê-lo desativado.

backports: As versões do Ubuntu são suportadas por um período de 18 meses (nas versões normais), ou 36 meses (no caso das versões LTS), o que corresponde ao lançamento de duas ou cinco novas versões. Os backports são versões portadas de novas versões dos softwares, adaptados para rodarem nas versões antigas.

Eles permitem que você atualize alguns componentes do sistema (obtendo acesso a uma nova versão do Gnome ou do KDE, por exemplo), sem precisar atualizar o sistema inteiro. A principal observação é que os backports recebem apenas uma rodada rápida de testes, o que abre margem para o aparecimento de bugs inesperados. Justamente por isso, você tem a opção de desativá-los no gerenciador:

repos_html_m59b9f3db

Definidos os repositórios, falta a configuração das atualizações automáticas, que são feitas através do Gerenciador de Atualizações ("Sistema > Administração > Gerenciador de atualizações"), a irritante setinha ao lado do relógio. Por padrão, o sistema vem configurado para notificar sobre atualizações do security e do updates diariamente, o que resulta em um volume muito grande de pacotes a baixar e faz com que muitos optem por simplesmente desativarem as atualizações automáticas. Entretanto, você pode reduzir o número de avisos simplesmente desativando o updates (mantendo apenas o security) e especificando um intervalo maior para as atualizações.

Estas opções correspondem às linhas com o "security", "updates" e "backports" dentro do sources.list:

deb http://archive.ubuntu.com/ubuntu/ intrepid-security main restricted
deb http://archive.ubuntu.com/ubuntu/ intrepid-security universe
deb http://archive.ubuntu.com/ubuntu/ intrepid-security multiverse

deb http://archive.ubuntu.com/ubuntu/ intrepid-updates main restricted
deb http://archive.ubuntu.com/ubuntu/ intrepid-updates universe
deb http://archive.ubuntu.com/ubuntu/ intrepid-updates multiverse

deb http://archive.ubuntu.com/ubuntu/ intrepid-backports main restricted universe multiverse

O gerenciador também avisa sobre a disponibilidade de novas versões do sistema, o que é ajustado através da última opção, onde você pode escolher entre receber avisos de todas as novas versões, atualizando a cada 6 meses, ou ser avisado apenas do lançamento de versões LTS, atualizando a cada 18 meses:

repos_html_1bcd907c

Como em outros sistemas, o upgrade direto de uma versão para outra é sempre um processo passível de problemas. O grande problema é que (por simples falta de mãos de obra suficiente) os upgrades são testados apenas em configurações comuns, onde o sistema é usado sem grandes modificações. Entretanto, na prática é comum que você use um conjunto de pacotes muito diferente do original, com muitos dos programas originais substituídos por outros, somado coma instalação de vários programas adicionais. Isso faz com que o trabalho do atualizador seja muito mais complicado e os resultados mais imprevisíveis, fazendo com que a atualização apresente defeitos diversos ou mesmo falhe completamente em alguns casos específicos.

Outra observação importante é que você nunca deve desligar o sistema no meio do processo de atualização, caso contrário você criará uma situação onde parte dos pacotes estão atualizados e outros não, o que será uma receita para o desastre no próximo boot.

O ideal é que você inicie a atualização no final do dia, deixando que o sistema baixe os pacotes e inicie o processo durante a noite e você possa apenas responder as configurações e terminar o processo na manhã seguinte. Como de praxe, é sempre importante fazer um backup completo do diretório home e de outras pastas do sistema onde guarde arquivos, só por via das dúvidas.

Como quase tudo no sistema, a atualização pode ser feita também manualmente. Você precisa apenas editar o sources.list, substituindo o nome da versão em todas as linhas (de "intrepid" para "jaunty", por exemplo) e em seguida rodar o "apt-get update" seguido do "apt-get dist-upgrade", que é justamente o que é feito pelo atualizador:

$ sudo apt-get update
$ sudo apt-get dist-upgrade

Diferente do "apt-get upgrade", que faz uma atualização seletiva, instalando apenas pacotes cujas atualizações não demandem a instalação de novos pacotes, o dist-upgrade faz uma atualização completa do sistema, atualizando todos os pacotes e instalando todas as novas dependências.

Para reduzir o tempo que você precisará ficar na frente do micro acompanhando o upgrade, você pode fazer com que ele baixe os pacotes na noite anterior, deixando para fazer o upgrade propriamente dito no dia seguinte. Para isso, adicione a opção "-d", como em:

$ sudo apt-get -d dist-upgrade

O "-d" ativa o modo "download only", onde o apt apenas baixa os pacotes e os salva no cache. Isso permite que você execute o comando novamente, sem o "-d", quando quiser fazer a atualização propriamente dita.

Por default, o apt simplesmente usa toda a banda disponível, o que pode ser um problema se você quiser fazer outras coisas enquanto ele baixa os arquivos, ou se compartilha a conexão com outras pessoas. Para limitar a taxa de download, crie o arquivo "/etc/apt/apt.conf.d/98bandlimit", com o seguinte conteúdo:

Acquire {
Queue-mode "access";
http { Dl-Limit "48"; };
};

O "48" na terceira linha especifica a taxa máxima de download que será usada pelo apt, basta substituí-lo pelo valor desejado. Uma boa fórmula é limitar o apt a 50% da banda total oferecida pela conexão, o que faz com que o download continue sendo feito a um limite razoável e o impacto sobre outras atividades seja pequeno.

Outra maneira de limitar a taxa de download do apt é executar o comando através do trickle (que você pode instalar usando o "apt-get install trickle"), como em:

$ sudo trickle -s -d 48 apt-get -d dist-upgrade

Assim como no exemplo anterior, o "48" especifica a taxa máxima de download, em kbytes.

O trickle (http://monkey.org/~marius/pages/?page=trickle), que é um pequeno aplicativo de traffic shapping de linha de comando. Ele controla o acesso à rede por parte do aplicativo, monitorando o tráfego de dados e atrasando as requisições, de maneira a encaixá-lo dentro das taxas especificadas por você. A grande vantagem é que a limitação é aplicada apenas ao aplicativo especificado, sem atrapalhar a conexão de outros programas que esteja usando, nem de outros micros da rede.

O "-s" faz com que ele rode em modo stand-alone, o que é o ideal quando você quer usá-lo para apenas um comando específico, enquanto o "-d" especifica a taxa máxima de download, em kbytes. No caso de aplicativos que fazem upload de arquivos, como no caso do bittorrent, você pode especificar a taxa máxima de upload usando a opção "-u", como em:

$ trickle -s -d 48 -u 16 btdownloadcurses arquivo.torrent

Naturalmente, o uso não está limitado apenas aos aplicativos de linha de comando. Você pode limitar as taxas de download ao baixar arquivos através do Firefox, por exemplo, chamando-o através do trickle, como em:

$ trickle -s -d 48 firefox

8 comentáriosPor Carlos E. Morimoto. Revisado 23 de março de 2011 às 11h19

Comentários

Elogio
por Juarez (anônimo) em 9 de novembro de 2011 às 15h13
Excelente tutorial, nota 10!
 
por Juliana (anônimo) em 22 de outubro de 2010 às 14h30
Prezados,
preciso criar um mirror ubuntu onde não não contenha os pacotes do ubuntu mas, sim pacotes específicos... ou seja um mirror personalisado... como faço isso?
 
por Filipe Acácio - Fortaleza, Ce (anônimo) em 11 de maio de 2009 às 14h49
Ótimo post, já faz tempo que procurava um aplicativo como o trickle. Parabéns!
 
por Nighto (anônimo) em 9 de fevereiro de 2009 às 22h22
(substituí os http por hxxp pra ver se passa no filtro)

Artigo legal. Já conhecia o trickle, mas imagino que muita gente não o conheça, boa dica.

Esse sources.list gigante do Ubuntu sempre me irritou. Lembro-me que no Debian e no Kurumin, era pequenino. :)

Por exemplo, linhas como essas:

deb hxxp://archive.ubuntu.com/ubuntu/ intrepid-security main restricted
deb hxxp://archive.ubuntu.com/ubuntu/ intrepid-security universe
deb hxxp://archive.ubuntu.com/ubuntu/ intrepid-security multiverse

podem ser resumidas para:

deb hxxp://archive.ubuntu.com/ubuntu/ intrepid-security main restricted universe multiverse

Sempre que instalo o Ubuntu, dou uma resumida no sources.list. Fica assim:

deb hxxp://archive.ubuntu.com/ubuntu/ intrepid main restricted universe multiverse
deb-src hxxp://archive.ubuntu.com/ubuntu/ intrepid main restricted universe multiverse
deb hxxp://archive.ubuntu.com/ubuntu/ intrepid-updates main restricted universe multiverse
deb-src hxxp://archive.ubuntu.com/ubuntu/ intrepid-updates main restricted universe multiverse
deb hxxp://archive.ubuntu.com/ubuntu/ intrepid-backports main restricted universe multiverse
deb-src hxxp://archive.ubuntu.com/ubuntu/ intrepid-backports main restricted universe multiverse
deb hxxp://security.ubuntu.com/ubuntu intrepid-security main restricted universe multiverse
deb-src hxxp://security.ubuntu.com/ubuntu intrepid-security main restricted universe multiverse
deb hxxp://archive.canonical.com/ubuntu intrepid partner
deb-src hxxp://archive.canonical.com/ubuntu intrepid partner

Adicionalmente, boto também:

# Medibuntu
deb hxxp://packages.medibuntu.org/ intrepid free non-free
deb-src hxxp://packages.medibuntu.org/ intrepid free non-free

# Ekiga 3
deb hxxp://ppa.launchpad.net/tlbdk/ubuntu intrepid main

# Banshee 1.4.2
deb hxxp://ppa.launchpad.net/banshee-team/ppa/ubuntu intrepid main
deb-src hxxp://ppa.launchpad.net/banshee-team/ppa/ubuntu intrepid main

# Circo Digital (disponíveis: hardy hardy32 hardy64 intrepid intrepid32 intrepid64)
deb hxxp://circodigital.org.br/repositorio intrepid/
deb hxxp://circodigital.org.br/repositorio intrepid64/

O primeiro é o Medibuntu, que adiciona pacotes não livres como o libdvdcss2 e o w32codecs/w64codecs, e programas proprietários como Adobe Reader, Google Earth etc. O segundo atualiza o Ekiga para a última versão, o terceiro atualiza o Banshee para a última versão, e finalmente o último é o repositório que mantenho no meu trabalho, é um mirror do GetDeb.net.

[]
 
por Nighto (anônimo) em 9 de fevereiro de 2009 às 22h21
droga, fiz um post grande, mas acho que o filtro de antispam o bloqueou. :(
 
por marcelo_ufv (anônimo) em 9 de fevereiro de 2009 às 15h10
Muito bom, eu sempre quis entender com detalhes qual o significado de cada um desses termos que estão presentes no gerenciador de atualizações. No Debian o esquema deve ser o mesmo, né?
 
por Adam Astor (anônimo) em 9 de fevereiro de 2009 às 07h52
Excelente post!
Gostaria de saber se existe alguma maneira de limitar a taxa de download de forma a abranger todas as atividades do micro, imagine-se a seguinte situação:
A sessão de trabalho foi iniciada por default sem limitação de uso de banda, todos os acessos correm livremente, em um dado momento deseja-se limitar a taxa de uso da banda, por exemplo em 50%. Feito isto, em outro momento deseja-se retorná-la ao valor sem limitação, ou ainda alterar-se para outro valor, tal como 25%. É importante que estas alterações sejam feitas "on fly", ou seja, que não se tenha que interromper as atividades em curso, e que passem a valer imediatamente aoós o comando.
 
por nilsantana (anônimo) em 9 de fevereiro de 2009 às 00h25
Veja você, dois dias atrás estava precisando justamente dessas informações, :), encontrei uma solução de contorno naquele momento, mas agora sei exatamente o porquê da dificuldade e como corrigir.
No caso estava precisando dos codecs para vídeos quicktime.Seu novo livro vai ajudar muita gente que passa por apuros em situações como essa, de codecs proprietários no Ubuntu, e não sabe como alterar rapidamente o synaptic para os repositórios corretos, eu fui pelo bom senso e tentativa e erro...