# Reduzindo o tráfego de download em 75% ou mais

## Vanquirius

Este tópico é uma tradução deste tópico, postado no Documentation, Tips & Tricks.

21/11/2004

---

 :Very Happy:  Divulgação: o dynamic deltup server está em versão beta pública  :Very Happy: 

Principalmente usários de modem e ISDN ou usuários que pagam pelo volume de tráfego em suas conexões de Internet irão gostar.

Alguns de vocês devem lembrar-se do deltup, um software para reduzir o tamanho de downloads, através da transferência somente da diferença do arquivo novo para o arquivo antigo. (Obrigado a John Whitney, que nos trouxe o deltup, e a Joshua P. MacDonald que escreveu o xdelta, que serviu como base.) 

Infelizmente o deltup foi removido da árvore do Portage algumas semanas atrás, uma vez o número de arquivos delta tem sido pequeno e nenhum deles estava atualizado.

Agora, a situação mudou. Fico feliz de apresentar a vocês o "dynamic deltup server", e o script de downloads getdelta.sh.

O dynamic-deltup-server contém vários arquivos delta atualizados (*.dtu) em seu cache e, a grande notícia, ele cria arquivos dtu novos sob demanda.

Curioso o quanto de tráfego você pode economizar com este método de atualização?

Olhe estas estatísticas:

 :Arrow:  http://linux01.gwdg.de/~nlissne/

Aqui está como ele funciona: 

Faça "emerge deltup" e instale um pequeno script escrito em bash como um wrapper de downloads em seu /etc/make.conf usando a variável FETCHCOMMAND. 

Pronto.  :Smile: 

Quando você fizer emerge de uma atualização para seus pacotes, o script examina seu DISTDIR se houver uma versão antiga do arquivo fonte e pede que o servidor de deltup providencie o arquivo dtu.

O servidor irá ou mandar o arquivo dtu pedido, ou irá colocá-lo em uma fila de espera e começará a criar o arquivo dtu para você (e outros que quiserem o mesmo arquivo que você).

Uma vez que o script de download obteve o arquivo dtu, ele automaticamente cria uma nova versão do arquivo. Se ele não conseguir obter o arquivo dtu por qualquer motivo, ele fará o download do arquivo inteiro como faria de maneira normal. Então, tudo acontece de maneira transparente para o Portage - não há necessidade de aprender novos comando e não há necessidade de intervenção adicional do usuário.

As funções do script de download podem ser configuradas através de algumas variáveis dentro do script - ou - para sua conveniência - você pode usar as mesmas variáveis em seu /etc/make.conf (prático se você atualizar o script depois e não quiser ajustar todas variáveis novamente). Você pode escolher a verbalidade do output, se o output deve ser colorido, quando dar timeout em um pedido de dtu, se você quer deletar a versão antiga do arquivo fonte após criar o arquivo novo e coisas deste tipo.

Então, por favor, olhe e edite o script e mude as variáveis para estar de acordo com suas necessidades antes de rodá-lo

Todas variáveis estão documentadas nele. Variáveis ajustadas em /etc/make.conf tem prioridade maior.

Espero que seja útil (de fato JÁ É útil para algumas pessoas)

Aproveitem!

blackpenguin  (procurem-me no freenode para sugestões ou questões  **ATUALIZAÇÃO**: Abri um canal chamado #dynamic-deltup-server para discussões e questões)

Se você está interessado em rodar outro servidor de dynamic-deltup-server (a idéia é uma rede de servidores de deltup que conhecem o cache dos outros) por favor contate-me.

----------

## Vanquirius

Instruções:

Use o Portage overlay para guardar os arquivos necessários. Adapte conforme necessário, estou presumindo que em seu /etc/make.conf você tem a seguinte variável: PORTDIR_OVERLAY="/usr/portage/local/".

1. Primeiro, vamos habilitar o uso de pacotes instáveis para o deltup e o getdelta.

```
mkdir /etc/portage

echo "app-portage/deltup ~x86" >> /etc/portage/package.keywords

echo "app-portage/getdelta ~x86" >> /etc/portage/package.keywords
```

2. Segundo, iremos salvar a ebuild do deltup.

```
mkdir -p /usr/portage/local/app-portage/deltup/

cd /usr/portage/local/app-portage/deltup/

nano -w deltup-0.4.0.ebuild
```

3. Adicione o conteúdo da ebuild:

```
# Copyright 1999-2004 Gentoo Technologies, Inc.

# Distributed under the terms of the GNU General Public License v2

# $Header: /home/cvsroot/gentoo-x86/app-portage/deltup/deltup-0.4.0.ebuild,v 1.5 2004/02/21 10:56:55 ferringb Exp $

S=${WORKDIR}/${P}

DESCRIPTION="Patch system for Gentoo sources.  Retains MD5 codes"

HOMEPAGE="http://deltup.sourceforge.net"

SRC_URI="mirror://sourceforge/${PN}/${P}.tar.gz"

SLOT="0"

LICENSE="GPL-2"

KEYWORDS="~x86 ~ppc ~sparc"

DEPEND=">=dev-util/xdelta-1.1.3

        >=app-arch/bzip2-1.0.0"

pkg_setup() {

        echo

        einfo ""

        einfo "Please note that deltup will be removed from portage "

        einfo "in the near future.  Development on deltup has stopped, although "

        einfo "patches are being generated in the interim until another distfile "

        einfo "patching system is ready for testing."

        einfo ""

        einfo "further info will be available at "

        einfo "http://www.gentoo.org/proj/en/glep/glep-0009.html"

        einfo ""

        echo -ne "\a" ; sleep 0.1 &>/dev/null ; sleep 0,1 &>/dev/null

        echo -ne "\a" ; sleep 1

        echo -ne "\a" ; sleep 0.1 &>/dev/null ; sleep 0,1 &>/dev/null

        echo -ne "\a" ; sleep 1

        sleep 3

}

src_install () {

        make DESTDIR=${D} install || die

        dodoc README ChangeLog GENTOO

        doman deltup.1

}
```

Alternativamente, a ebuild pode ser baixada aqui.

4. Salve, baixe os arquivos necessários e faça o digest:

```
emerge -f app-portage/deltup

ebuild deltup-0.4.0.ebuild digest
```

5. Agora, fazendo o mesmo para o getdelta:

```
mkdir -p /usr/portage/local/app-portage/getdelta/

cd /usr/portage/local/app-portage/getdelta/

nano -w getdelta-0.6.4.ebuild
```

6. Conteúdo da ebuild:

```
# Copyright 2004 Nicolai Lissner <nlissne@linux01.gwdg.de>

# Distributed under the terms of the GNU General Public License v2

# 

# revisioned and enhanced by Torsten Veller <torsten@veller.net>

inherit eutils

DESCRIPTION="dynamic deltup client"

RESTRICT="nomirror"

HOMEPAGE="http://linux01.gwdg.de/~nlissne/"

SRC_URI="http://linux01.gwdg.de/~nlissne/${P}.tar.bz2"

SLOT="0"

IUSE=""

LICENSE="GPL-2"

KEYWORDS="~x86 ~ppc ~sparc"

DEPEND="sys-apps/grep"

RDEPEND="app-portage/deltup"

src_install () {

   dobin ${WORKDIR}/getdelta.sh

}

pkg_postinst() {

   if egrep -q "^[[:space:]]*FETCHCOMMAND=\"(/usr/bin/|)getdelta.sh" /etc/make.conf

   then

      einfo "You already configured getdelta.sh as your FETCHCOMMAND - good."

   else

      ewarn "Put"

      ewarn "FETCHCOMMAND=\"/usr/bin/getdelta.sh \\\${URI}\""

      ewarn "into your /etc/make.conf to make it work."

      ebeep

   fi

}
```

Alternativamente, a ebuild pode ser baixada aqui.

7. Salve, baixe os arquivos necessários e faça o digest:

```
emerge -f app-portage/getdelta

ebuild getdelta-0.6.4.ebuild digest
```

8. Agora vamos instalar os pacotes necessários:

```
emerge app-portage/deltup app-portage/getdelta
```

9. Edite seu /etc/make.conf, adicionando/alterando a a seguinte variável:

```
FETCHCOMMAND="/usr/bin/getdelta.sh \${URI}"
```

10. Pronto! O Portage fará uso do servidor dinâmico de deltup, economizando tempo e banda!

----------

## BlackFenix

As suas instruções de instalação estã bem melhores que as originais... valew  :Wink: 

----------

## fernandotcl

A idéia é maravilhosa, mas funciona bem?

----------

## Vanquirius

Funciona bem, sim. Dá problemas com arquivos binários (dtu maior que arquivo original), tipo os drivers da nvidia. Fora isso, é uma mão na roda.

----------

## To

Isso aqui em Portugal é bem perciso...

Tó

----------

## klap

Gostei mesmo, agora que ano que vem vai cobrar 0,10 por mega baixado no speedy isso vai ser bem util.

----------

## BlackFenix

Acho que faltou um detalhe. Eu tive q fazer isso para poder emergir:

```

echo "app-portage/deltup ~x86" >> /etc/portage/package.keywords

echo "app-portage/getdelta ~x86" >> /etc/portage/package.keywords

```

----------

## Vanquirius

Obrigado BlackFenix, adicionei às instruções...

----------

## Kobal

Sera que isso e a solucao pra quem usa discada ?

----------

## Vanquirius

Não sei se é "a" solução, é "uma" solução.

----------

## Operador Nabla

Depois de brigar com o getdelta.sh para conseguir baixar o dtu para gerar o pacote do Firefox 1.0 a partir do 1.0PR.1 (provavelmente devido a uma falha no algoritmo de detecção de pacotes na minha ${DISTDIR}: tive de me virar para fazer o download da dtu e aplicar o patch manualmente), estou começando a escrever o meu próprio wrapper para desempenhar as funções do getdelta.sh. No momento, estou interessado em implementar as seguintes características:

- Detectar pacotes existentes na ${DISTDIR} a partir das informações contidas nos ebuilds, em vez de aplicar máscaras no nome do arquivo para detectar diferenças;

   - Para isso, optei por escrever o script em Python, para poder empregar diretamente as funções do Portage;

- Dar alguma solução para que este script funcione também no modo resume (a idéia que eu tive é fazer com que ele invoque os antigos ${FETCHCOMMAND} e ${RESUMECOMMAND} para baixar o arquivo inteiro, caso ele falhe em pegar o dtu; atualmente, o getdelta.sh baixa pacotes inteiros com o seu próprio comando ${FETCH} e não funciona no modo resume).

- Ser compatível com os arquivos de configuração do getdelta.sh.

Se for do interesse de alguém, posso informar meus progressos (e/ou disponibilizar o script, depois de pronto) aqui no fórum. Sugestões também são bem-vindas.

----------

## seventhguardian

Boas!

Só uma questão: o sevidor do deltup é nacional ou internacional? (em portugal)

É que neste momento estou a usar servidores nacionais sempre que possivel. E como nunca chego sequer aos limites do trafego nacional, não tenho problemas com o método normal. Se o deltup usar trafego nacional, então as coisas melhoram. Se por outro lado usar internacional, não obrigado  :Razz: ..

----------

## nafre

alguem poderia me deescrever como funciona este deltup  :Question: 

grato pela ajuda

----------

## fernandotcl

 *nafre wrote:*   

> alguem poderia me deescrever como funciona este deltup 

 

 *vanquirius wrote:*   

> deltup, um software para reduzir o tamanho de downloads, através da transferência somente da diferença do arquivo novo para o arquivo antigo.

 

Em outras palavras, isso cria patches para sources em um repositório remoto, e você baixa esses patches e aplica automaticamente aos sources já existentes, e depois recompila.

Interpretação de texto...

----------

## nafre

opa infezlimente tenho que dizer que 

[quote=vaunuirius]

deltup, um software para reduzir o tamanho de downloads, através da transferência somente da diferença do arquivo novo para o arquivo antigo. 

[/quote]

isto fico confuso.  :Smile:  nao explica bem como funciona o deltup. Mais pode deixar que ja entendi como he que funciona  :Smile: 

----------

## Matheus Villela

Na verdade a descrição "patches pra sources" não é correta...

O "patch" que na verdade aqui é um DTU é semelhante IPS's(quem já se interessou por traduções de jogos de VG sabe do que se trata  :Razz: ). Esse DTU ao ser aplicado vai criar _exatamente_ o mesmo arquivo... com mesmo md5sum, isso não ocorre se você descompactar o arquivo, aplicar patch e recompactar de novo  :Wink: 

Tanto é que DTU's do deltup funcionam também pra pacotes binários(Opera por exemplo) só que... a eficiência cai bastante, principalmente se o pacote tiver muito binário e pouca "data"(imagens e sons por exemplo), se for só binário provavelmente dá algo maior que 90% do arquivo pra baixar, provavelmente com algo perto dos 100%  :Razz: 

----------

## nafre

acho que ja entendi como isto funciona.

Um servidor ira baixar e procesar uma arquivo e depois enviar para sua box

----------

## alexandre_parente

Qual a diferença entre deltup e xdelta? 

O deltup é melhor ?quanto e porque?

O gentoo tem o xdelta em sua arvore e agora possui uma USE kdexdeltas , então acho que é totalmente viável uma USE xdelta ou deltup.

----------

## fernandotcl

 *alexandre_parente wrote:*   

> Qual a diferença entre deltup e xdelta?

 

Pelo que eu entendi, o xdelta é o backend do deltup.

 *alexandre_parente wrote:*   

> O gentoo tem o xdelta em sua arvore e agora possui uma USE kdexdeltas , então acho que é totalmente viável uma USE xdelta ou deltup.

 

Eh?

----------

## Operador Nabla

Estou com a impressão de que o Dynamic Deltup Server está começando a ficar saturado (principalmente depois que um servidor FTP deixou de ser utilizado para baixar os dtus).

Antigamente, quase sempre eu encontrava os dtus de meu interesse prontos para download nos servidores e, nas raras ocasiões em que este não constava, o servidor atendia o meu pedido para gerar um dtu na hora.

Agora, grande parte dos dtus que eu quero não estão disponíveis para download e, para pedir que o servidor gere-os para mim, tenho que amargar na fila...

----------

## Operador Nabla

No caso dos xdeltas do KDE, a coisa é um pouco trabalhosa. Você tem de:

1. Descompactar o arquivo <antigo>.tar.bz2, gerando o arquivo <antigo>.tar

2. Aplicar o patch xdelta no arquivo <antigo>.tar, gerando o arquivo <novo>.tar

3. Compactar o arquivo <novo>.tar, gerando finalmente o arquivo <novo>.tar.bz2, pronto para ser instalado pelo Portage.

----------

