Mnemonic's Fike

Da genialidade à imbecilidade o limite é uma curva

Eventos em Maio de 2015

| Comments

Essa semana estarei participando de dois eventos como palestrante.

Devcamp

O Devcamp é a “A maior conferência de desenvolvimento de software do interior São Paulo” e esterei apresentando sobre a minha experiência em migrar para Docker. Docker é novo buzzword um projeto de automação de deploys de aplicações dentro de contêineres. Se estiver por lá e quiser tomar um café, estarei a disposição.

Meetup Germinadora

Provavelmente é a última vez que apresente essa palestra sobre Web Performance (“Um milhão de usuários simultâneos”). Não que eu não goste de falar sobre o tema, pelo contrário (gosto bastante)! Tem algumas partes específicas dessa apresentação que quero abordar numa próxima vez.

Se estiver de bobeira por aqui em São Paulo, passe por lá.

Docker 1.6 lançado

| Comments

O lançamento da versão 1.6 veio com boas novidades, algumas delas são do ecossistema mas cabe destacar: Docker Compose, Docker Machine e o Registry. O Compose é o antigo Fig, ele facilita bastante se você trabalho com sistemas em múltiplos containers. O Machine permite criar uma infraestrutura Docker rapidamente, seja numa máquina virtual (exemplo: Virtualbox) ou mesmo numa IaaS (AWS, Digital Ocean, etc.).

As funcionalidades da versão 1.6 que gostei foram:

  • Suporte a Image Labels No Dockerfile pode adicionar um campo extra para usar como identificação sua. Isso permite pesquisar informações de containers e imagens usando esse campo.

  • Logging Drivers Ficou bem mais fácil enviar os logs para um Syslog ou similares. Muita gente tem dificuldade de lidar com os logs do container até essa versão.

  • Alterar as imagens de containers sem recriá-las A partir desta versão é possível alterar algumas coisas numa imagem de container sem a necessidade de gerar novamente.

  • Ulimit A minha favorita, agora é possível alterar alguns parâmetros do ulimit, bom para serviços que usam muito processos como banco de dados.

Para saber mais, acesse o blog do Docker que tem mais informações.

Obs.: Ah, a versão 1.6 está na Experimental no Debian e infezlimente não entrou na Jessie, mas logo estará disponível no Backports.

Obs.2: O original dessa imagem é do blog do Docker.

Debian Jessie (8) lançado

| Comments

O Debian continua executando o plano de dominação do universo. As duas novidades é que a eleição do novo líder do projeto, Neil McGovern, após dois mandatos do Lucas Nussbaum.

A outra novidade é que nova versão estável (Jessie) do Debian foi lançada no dia 25 de Abril de 2015 com a narração da mudança do Wheezy para a Jessie. Se quiser ver como foi o lançamento, use a hashgtag #releasingjessie

São 75 idiomas suportadas na instalação, systemd como sistema de inicialização padrão, MySQL, MariaDB, Samba 4.1, PostgreSQL 9.4, etc. São mais de 43 mil pacotes a partir de 21 mil (pacotes) fonte. Suporte a numa nova arquitetura (ARM64). O tempo de freezing desta versão foi relativamente curto, 171 dias.

Pouco? Bom, o restante das novidades você pode ler mais [aqui][debianews].

Quem diria?

Nos anos que trabalhei como consultor de tecnologias em software livre/código aberto, era muito difícil integrar ou substituir sistemas proprietários. Principalmente nos casos de servidores, storages e/ou equipamento de backups.

O trabalho maior não era o técnico, era de reverter o marketing negativo. Coisas como: “Não tem licença, como é que você irá acreditar numa empresa que não é dona do produto”, “A comunidade vai dar suporte? Fica esperando, então!”, “O fornecedor de hardware não suporta o Debian, se quiser use uma distribuição comercial”, “Um Sistema Operacional que só usa tela preta? Isso é anos 80!”

Depois de alguns e bons anos o que mudou? Muita coisa, tanto que a Microsoft participou das festas de lançamento da Jessie.

Configuração de compressão gzip para sites e ranking de CDN

| Comments

Estava lendo um texto do Steve Souders sobre a alteração da configuração padrão gzip na Fastly. Fastly é uma CDN concorrente da Akamai e tem clientes como Twitter, Shopify, The Guardian, Rakuten, etc.

Ele cita como chegaram no template padrão da configuração deles usando os dados do HTTP Archive, este é um projeto que consolida testes executados usando a versão pública do Webpagetest. Os testes são executados em mais ou menos 18 mil URLs e tem relatórios variados, por exemplo: número médio de requisições HTTP por página, crescimento do HTML nas páginas, etc.

Tanto do Steve Souders quanto no site HTTP Archive fazem referência ao Bigqueries com diversas consultas realizadas na base dados do HTTP Archive. Um texto postado no Bigqueries chamou-me a atenção, era sobre o Ranking de CDNs considerandos as páginas mais populares.

Ele considerou apenas as páginas que estavam sendo entregues por alguma CDN e não considerou todas as requisições HTTP das páginas. Usei o BigQuery do Google considerando os dados disponíveis do HTTP Archive no mês de Novembro de 2014 para responder: Quais são as CDNs mais populares ao analisar as requisições HTTP?

1
2
3
4
5
6
7
8
9
10
11
12
13
SELECT cdn, num, ROUND(ratio*100) as percent FROM (
  SELECT cdn, COUNT(cdn) as num, RATIO_TO_REPORT(num) OVER() ratio   FROM (
     SELECT CASE
       WHEN _cdn_provider IN ('')
         THEN 'None'
         ELSE 'CDN'
       END as cdn
      FROM httparchive:runs.2014_11_01_requests,
           httparchive:runs.2014_11_15_requests,
           httparchive:runs.2014_11_01_requests_mobile,
           httparchive:runs.2014_11_15_requests_mobile
   ) GROUP BY cdn
) ORDER BY percent DESC

E quais foram as CDNs mais usadas naquele período?

1
2
3
4
5
6
7
8
9
10
SELECT provider, round(100*ratio) as percent, num
FROM (SELECT REGEXP_REPLACE(_cdn_provider,r'^$', 'None') as provider, count(*) as num, RATIO_TO_REPORT(num) OVER() ratio
 FROM httparchive:runs.2014_11_01_requests,
      httparchive:runs.2014_11_15_requests,
      httparchive:runs.2014_11_01_requests_mobile,
      httparchive:runs.2014_11_15_requests_mobile
 WHERE  _cdn_provider != ''
GROUP BY provider
)
ORDER BY num desc LIMIT 10

A surpresa no ranking é o Google, porque ele seria considerado uma CDN?

Para tentar entender, outra consulta buscando os principais hostnames/domínios que estão na CDN do Google.

1
2
3
4
5
6
7
8
9
SELECT req_host, count(req_host) as num
FROM httparchive:runs.2014_11_01_requests,
     httparchive:runs.2014_11_15_requests,
     httparchive:runs.2014_11_01_requests_mobile,
     httparchive:runs.2014_11_15_requests_mobile
WHERE _cdn_provider = 'Google'
GROUP BY req_host
ORDER BY num DESC
LIMIT 20

Basicamente, a CDN da Google entrega seus próprios serviços: Analytics, Adsense, Doubleclick, Youtube, etc. Os hostnames fonts.googleapis.com, ajax.googleapis.com estão relacionados a iniciativas do Goolgle de hospedar alguns frameworks javascripts e webfonts gratuitamente.

Então, o Google poderia ser considerado um fornecedor de CDN? Um pouco difícil de definir porque não existe um documento canonical (RFC) que defina CDN. A Wikipedia tem artigo sobre CDN e a primeira frase tem uma boa definição

A content delivery network or content distribution network (CDN) is a large distributed system of servers deployed in multiple data centers across the Internet. The goal of a CDN is to serve content to end-users with high availability and high performance. CDNs serve a large fraction of the Internet content today, including web objects (text, graphics and scripts), downloadable objects (media files, software, documents), applications (e-commerce, portals), live streaming media, on-demand streaming media, and social networks.

Se a for usado a definição da Wikipedia para CDN, pode-se afirmar que alguns serviços do Google são uma CDN. Entretanto, se descartar o Google como CDN e consideramos que as demais restantes são CDNs que seus usuários paguem para entregar o seu conteúdo. Como ficaria o ranking com as 15 mais usadas?

1
2
3
4
5
6
7
8
9
10
SELECT provider, round(100*ratio) as percent, num
FROM (SELECT REGEXP_REPLACE(_cdn_provider,r'^$', 'None') as provider, count(*) as num, RATIO_TO_REPORT(num) OVER() ratio
  FROM httparchive:runs.2014_11_01_requests,
       httparchive:runs.2014_11_15_requests,
       httparchive:runs.2014_11_01_requests_mobile,
       httparchive:runs.2014_11_15_requests_mobile
  WHERE _cdn_provider != 'Google' AND _cdn_provider != ''
GROUP BY provider
)
ORDER BY num desc

Dentre as acima listadas, as que tem ou tera ponto de presença no Brasil: Akamai, Cloudflare, EdgeCast, CloudFront, Fastly, MaxCDN (NetDNA), CDNetwokrs, ChinaNetCenter, Level3, Incapsula e Highwinds.

Voltando ao início e aoEu texto do Souders sobre compressão, ele propôs que habilite/configure a compressão quando as respostas HTTP tiverem :

Extensions: js css html json ico eot otf ttf

Ou

Content-Type: text/html application/x-javascript text/css application/javascript text/javascript text/plain text/xml application/json application/vnd.ms-fontobject application/x-font-opentype application/x-font-truetype application/x-font-ttf application/xml font/eot font/opentype font/otf image/svg+xml image/vnd.microsoft.icon

A configuração padrão na Akamai é:

Content-Type: text/html text/css application/x-javascript text/xml text/plain application/json text/javascript *

Fazendo consulta similar ao do Souders para saber “Quais os content-types mais mais recorrentes acima de 1 mil recorrências e que tiveram compressão habilitada?”.

1
2
3
4
5
6
7
8
SELECT content_type, round(100*ratio) as percent, num
FROM
  (SELECT count(resp_content_type) as num,
    REGEXP_REPLACE(resp_content_type,r';.*', '') as content_type, RATIO_TO_REPORT(num) OVER() ratio
    FROM httparchive:runs.2014_11_01_requests
    WHERE NOT (resp_content_type contains 'image' OR resp_content_type contains 'audio' OR resp_content_type = '') AND _gzip_save > 0
    GROUP BY content_type HAVING num > 1000)
ORDER BY num DESC;

Da lista, pode-se descartar alguns: application/octet-stream (formato genérico de arquivos), text/x-component (formato microsoft antigo, não mais usado), application/x-shockwave-flash, font/woff e application/x-www-form-urlencoded. Os três últimos são formatos já com compressão e fazer compressão num servidor web ou CDN é usar o processamento desnecessariamente.

Juntado as listas, a regra a ser configurado no servidor web, proxy reverso ou CDN será:

Extensions: js css html json ico eot otf ttf

Content-Type: text/html application/x-javascript text/css application/javascript text/javascript text/plain text/xml application/json application/vnd.ms-fontobject application/x-font-opentype application/x-font-truetype application/x-font-ttf application/xml font/eot font/opentype font/otf image/svg+xml image/vnd.microsoft.icon text/x-js.

Acrescentado o text/x-js na lista de Content-Type, um site poderá ter mais requisições HTTP compressão, consequentemente o site terá o tráfego de rede menor. Claro, sem esquecer de mencionar que o usuário poderá ter uma experência melhor com as páginas do site já que elas poderão ser menores e mais rápidas.

Nas novas configurações na Akamai estou acrescentando os Content-Type e os arquivos para as regras de compressão e cache como abaixo:

Regra de compressão

Regra de Cache

Os resultados e comentários sobre ranking das CDNs estão no texto que publiquei publicado no Bigqueries.

Obs.: As expressões regulares no BigQuery são baseadas no RE2, recomendo fortemente ler a documentação dele.

Links

http://httparchive.org/

http://httparchive.org/trends.php

http://en.wikipedia.org/wiki/Content_delivery_network

http://www.fastly.com/blog/new-gzip-settings-and-deciding-what-to-compress/

http://bigqueri.es/t/whats-the-popularity-of-different-cdns/477

https://cloud.google.com/bigquery/query-reference

https://code.google.com/p/re2/wiki/Syntax

Meetup Docker-SP: Docker na vida real

| Comments

No dia 18 de Novembro estarei no Meetup Docker São Paulo para falar um pouco da migração de serviços de infraestrutura para o Docker.

A apresentação vai ser um pouco diferente que fiz no TDC em Porto Alegre pelo tempo menor disponível para expor. Mas se estiver por lá, podemos conversar um pouco mais sobre containers. :)

A do TDC está logo mais abaixo:

Docker 1.3

| Comments

A versão 1.3 do Docker foi lançada recentemente. Eu gostei dela por duas razões.

Verificação da assinatura digital

O pessoal da DotCloud já tinha anunciado alguns repositórios oficiais de alguma ferramentas e linguagens de programação (C(++)/GCC, PHP, Go, Java, Nodejs, Python, Perl, Ruby, etc.). O Docker verifica se os repositórios oficiais estão íntegros, eles (os repositórios) são assinados com chave criptográficas. (Obs. procurando que tipos de chaves são e como são assinados)

Antes disso eu tinha um pouco de restrição com os repositórios de terceiros. Até então, preferia criar meus templates de containers.

Entrar num container em execução

Nas versões anteriores era um pouco trabalhoso para você entrar num container e analisar um problema que estivesse ocorrendo, exemplo: identificar um problema de permissão num diretório.

Na versões anteriores teria que ser feito assim:

Na criação do container deveria compartilhar os diretórios de log e da aplicação. Supondo que seja um servidor web simples, o dockerfile seria como o abaixo:

Dockerfile
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
FROM debian:wheezy

MAINTAINER fike at midstorm.org

RUN apt-get udpate && apt-get install apache2

ADD mysite /var/www/

RUN apt-get autoremove -y && rm -rf /tmp/* /var/tmp/*

ENV APACHE_RUN_USER www-data

ENV APACHE_RUN_GROUP www-data

ENV APACHE_LOG_DIR

VOLUMES ["/var/log/apache2", "/var/www"]

CMD ["/usr/sbin/apache2", "-D", "FOREGROUND"]

Criando o container

1
fike@kamino:~$ docker build -t="mysimplesite"  .

Executando

1
fike@kamino:~$ sudo docker run -d -p  80:80 mysimplesite

Putz! Os internautas não estão conseguindo acessar meu site, ele está retornando 403.

Se não tiver uma versão mais recente do util-linux (> 2.27) não poderá usar o nsenter. Outra forma seria executar um segundo container e acessar os diretórios compartilhados do primeiro.

1
2
3
fike@kamino:~$ CONTAINERID=$(docker ps |grep mysimplesite|awk '{ print $1}'

fike@kamino:~$ docker run -it --volumes-from=$CONTAINERID /bin/bash

Se estiver usando um Fluent ou outro agregador de logs não precisaria disso, certo? Nesse caso, sim. Entretanto pode ocorrer de precisar inspecionar um container para verificar um vazamento de memória ou algo que necessite analisar a aplicação em produção.

Se o problema estiver relacionado a rede, a abordagem era parecida. Um bom exemplo, alterar uma zona DNS no Bind9 usando o rndc.

1
2
3
fike@kamino:~$ CONTAINERID=$(docker ps |grep mysimplesite|awk '{ print $1}'

fike@kamino:~$ docker run -it --volumes--from=$CONTAINERID --net='container:$CONTAINERID' mysimplesite /bin/bash

No 1.3 é bem mais simples.

1
2
3
fike@kamino:~$ CONTAINERID=$(docker ps |grep mysimplesite|awk '{ print $1}'

fike@kamino:~$ docker exec -it $CONTAINERID /bin/bash

Eu fui: TDC 2014- Edição POA

| Comments

Participar de eventos é sempre uma boa oportunidade de aprender coisas novas, aumentar o networking e repassar conhecimento ou algumas lições aprendidas. :)

Acredito que o pessoal da organização do TDC gostou da minha apresentação na edição de São Paulo (Você está preparado para um milhão de usuários?) porque eles aprovaram as três proposta que inscrevi.

Gostei bastante desta edição de Porto Alegre porque vi algumas coisas novas bem interessantes. As que destacam: (para mim)

No meu trabalho atual, costumo usar um quadro branco ou papel em detrimento à apresentações em Power Point/LibreOffice Impress para discutir com os clientes produtos e serviços, como também, definição de arquitetura.

Não sabia que isso era chamado de Visual Thinking, eu costumava chamar de “Quer que eu desenhe?” Aliás, alguns meses atrás comecei esboçar uma apresentação falando disso, vou aumentar a prioridade dela no meu TODO.

Nunca iria imaginar que uma apresentação sobre Software Delivery poderia ter encenação teatral, foi animal!

Foi muito interessante porque o Diogo usou o mesmo termo que eu para definir o Docker: “Disruptivo”. Bom, falei sobre ele na apresentação: “Docker na vida real

As outras apresentações foram sobre Web Performance – “Será que seu site está preparado para um milhão de usuários simultâneos?” e “Managenment 3.0 – a vida pós-agilidade


Será que seu site está preparado para um milhão de usuários simultâneos?

Docker na vida real

Managenment 3.0 – a vida pós-agilidade

PGDAY Campinas: Docker e PostgreSQL

| Comments

Fazia um bom tempo que não participava de um evento de PostgreSQL e finalmente a pude participar novamente. Fui no PGDAY Campinas e fiquei muito contente em ver muita coisas nova do PostgreSQL e o ecossistema em volta.

Aliás, teve ligthing talk e puder falar um pouco sobre como usar o PostgreSQL num container Docker.

Ah, já estava esquecendo. A organização do evento estava excelente, coffee-break também. Parabéns para o pessoal que organizou o PGDAY Campinas! :)

Purge debian packages marked with rc status

| Comments

Sometimes when I find a package that is installed on my computer (Debian), I found status rc but I never found a explanation in official documentation.

For now, my OS has the following packages marked rc status:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
fike@klatoon:~$ dpkg -l | grep ^[rc]

rc  libaacplus2:i386                      2.0.2-dmo1                            i386         AAC+ encoding library - runtime files
rc  libavcodec55:i386                     10:2.3.3-dmo3                         i386         Library to encode decode multimedia streams - runtime files
rc  libavresample1:i386                   10:2.3.3-dmo3                         i386         FFmpeg audio conversion library
rc  libavutil52:i386                      10:2.3.3-dmo3                         i386         FFmpeg avutil library - runtime files
rc  libavutil53:i386                      6:10.4-1                              i386         Libav utility library
rc  libcrystalhd3:i386                    1:0.0~git20110715.fdd2f19-11          i386         Crystal HD Video Decoder (shared library)
rc  libfaac0:i386                         1:1.28-dmo3                           i386         AAC audio encoder - library files.
rc  libfdk-aac0:i386                      1:0.1.3-dmo1                          i386         Fraunhofer FDK AAC codec library.
rc  libfftw3-long3:amd64                  3.3.4-1                               amd64        Library for computing Fast Fourier Transforms - Long precision
rc  libgssglue1:amd64                     0.4-2                                 amd64        mechanism-switch gssapi library
rc  libjim0.74:amd64                      0.74-3                                amd64        small-footprint implementation of Tcl - shared library
rc  liblcms1:i386                         1.19.dfsg2-1.5                        i386         Little CMS color management library
rc  libmkv0:amd64                         0.6.5.1-dmo3                          amd64        Alternitave to the official libmatroska/libebml libraries.
rc  libmp4v2-2:amd64                      2:2.0.0-dmo2                          amd64        MP4 container library - runtime files
rc  libswresample0:i386                   10:2.3.3-dmo3                         i386         FFmpeg audio rescaling library
rc  libupower-glib2:amd64                 0.99.0-3                              amd64        abstraction for power management - shared library
rc  libx265-25:amd64                      1.2-dmo1                              amd64        x264 video coding library.
rc  libx265-25:i386                       1.2-dmo1                              i386         x264 video coding library.
rc  libx265-31:i386                       1.3-dmo1                              i386         x264 video coding library
rc  libzvbi0:i386                         0.2.35-2                              i386         Vertical Blanking Interval decoder (VBI) - runtime files
rc  pcmciautils                           018-8                                 amd64        PCMCIA utilities for Linux 2.6

fike@klatoon:~$

Let us pick pcmciautils package as example. Checking if it doesn’t be installed on my OS.

1
2
3
4
fike@klatoon:~$ dpkg -L pcmciautils
Package `pcmciautils' does not contain any files (!)

fike@klatoon:~$ 

Now, opening “/var/lib/dpkg/status” file, here has the status all packages existents and search pcmciautils package status.

/var/lib/dpkg/status
1
2
3
4
5
6
...
Package: pcmciautils
Status: deinstall ok config-files
Priority: extra
Section: admin
...

A little strange “deinstall ok config-files” as status, right? Well, it’s more easy to understand. Checking again dpkg manual…

dpkg manual
1
2
3
4
5
6
7
8
9
10
11
fike@klatoon:~$man dpkg
...
   Package selection states
       install
              The package is selected for installation.

       hold   A package marked to be on hold is not handled by dpkg, unless forced to do that with option --force-hold.

       deinstall
              The package is selected for deinstallation (i.e. we want to remove all files, except configuration files).
...

Gotcha! Its more easy to understand. To pcmciautils packages, the rc status is because its removed and still has the configuration file.

1
2
3
4
5
fike@klatoon:~$ find /etc/ /var/ -name "*pcmcia*" -print 2> /dev/null
/etc/pcmcia
/var/lib/dpkg/info/pcmciautils.list
/var/lib/dpkg/info/pcmciautils.postrm
fike@klatoon:~$ 

The finally, removing all packages with rc status.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
root@klatoon:~# aptitude purge $(dpkg -l|grep ^[rc] | awk '{ print $2}')
The following packages will be REMOVED:
  libaacplus2:i386{p} libavcodec55:i386{p} libavresample1:i386{p} libavutil52:i386{p} libavutil53:i386{p} libcrystalhd3:i386{p} libfaac0:i386{p}
  libfdk-aac0:i386{p} libfftw3-long3{p} libgssglue1{p} libjim0.74{p} liblcms1:i386{p} libmkv0{p} libmp4v2-2{p} libswresample0:i386{p} libupower-glib2{p}
  libx265-25{p} libx265-25:i386{p} libx265-31:i386{p} libzvbi0:i386{p} pcmciautils{p}
0 packages upgraded, 0 newly installed, 21 to remove and 4 not upgraded.
Need to get 0 B of archives. After unpacking 0 B will be used.
Do you want to continue? [Y/n/?]
(Reading database ... 214094 files and directories currently installed.)
Removing libaacplus2:i386 (2.0.2-dmo1) ...
Purging configuration files for libaacplus2:i386 (2.0.2-dmo1) ...
Removing libavcodec55:i386 (10:2.3.3-dmo3) ...
Purging configuration files for libavcodec55:i386 (10:2.3.3-dmo3) ...
Removing libavresample1:i386 (10:2.3.3-dmo3) ...
Purging configuration files for libavresample1:i386 (10:2.3.3-dmo3) ...
Removing libavutil52:i386 (10:2.3.3-dmo3) ...
Purging configuration files for libavutil52:i386 (10:2.3.3-dmo3) ...
Removing libavutil53:i386 (6:10.4-1) ...
Purging configuration files for libavutil53:i386 (6:10.4-1) ...
Removing libcrystalhd3:i386 (1:0.0~git20110715.fdd2f19-11) ...
Purging configuration files for libcrystalhd3:i386 (1:0.0~git20110715.fdd2f19-11) ...
Removing libfaac0:i386 (1:1.28-dmo3) ...
Purging configuration files for libfaac0:i386 (1:1.28-dmo3) ...
Removing libfdk-aac0:i386 (1:0.1.3-dmo1) ...
Purging configuration files for libfdk-aac0:i386 (1:0.1.3-dmo1) ...
Removing libfftw3-long3:amd64 (3.3.4-1) ...
Purging configuration files for libfftw3-long3:amd64 (3.3.4-1) ...
Removing libgssglue1:amd64 (0.4-2) ...
Purging configuration files for libgssglue1:amd64 (0.4-2) ...
Removing libjim0.74:amd64 (0.74-3) ...
Purging configuration files for libjim0.74:amd64 (0.74-3) ...
Removing liblcms1:i386 (1.19.dfsg2-1.5) ...
Purging configuration files for liblcms1:i386 (1.19.dfsg2-1.5) ...
Removing libmkv0:amd64 (0.6.5.1-dmo3) ...
Purging configuration files for libmkv0:amd64 (0.6.5.1-dmo3) ...
Removing libmp4v2-2:amd64 (2:2.0.0-dmo2) ...
Purging configuration files for libmp4v2-2:amd64 (2:2.0.0-dmo2) ...
Removing libswresample0:i386 (10:2.3.3-dmo3) ...
Purging configuration files for libswresample0:i386 (10:2.3.3-dmo3) ...
Removing libupower-glib2:amd64 (0.99.0-3) ...
Purging configuration files for libupower-glib2:amd64 (0.99.0-3) ...
Removing libx265-25:i386 (1.2-dmo1) ...
Purging configuration files for libx265-25:i386 (1.2-dmo1) ...
Removing libx265-25:amd64 (1.2-dmo1) ...
Purging configuration files for libx265-25:amd64 (1.2-dmo1) ...
Removing libx265-31:i386 (1.3-dmo1) ...
Purging configuration files for libx265-31:i386 (1.3-dmo1) ...
Removing libzvbi0:i386 (0.2.35-2) ...
Purging configuration files for libzvbi0:i386 (0.2.35-2) ...
Removing pcmciautils (018-8) ...
Purging configuration files for pcmciautils (018-8) ...

root@klatoon:~#

Updating

@kretcheu saw by twitter another and best command to remove these packags.

1
#aptitude ~c

P.S. I know, I could went directly the final but it’s cool understand why of the things. :)

Banco do Brasil e OpenJDK

| Comments

Banco do Brasil e OpenJDK

Para usar o internet banking do Banco do Brasil num Debian 64 bits era um pouco mais trabalhoso do que outros sistemas operacionais. Para usá-lo, eu tinha uma máquina virtual (Virtualbox) 32 bits com Debian Wheezy instalado e o OpenJDK+Icedtea.

Poderia usar a JVM da Oracle? Sim, poderia mas é mais trabalhoso manter ela atualizada do que usar uma máquina virtual 32 bits.

Algum tempo atrás, o ricardoperera perguntou no canal de IRC do Debian Brasil (sim, ainda uso IRC…) se alguém tinha dica de como acessar o internet banking usando o Wheezy. Minha sugestão para ele foi usar uma vm em 32 bits e passei o template do Veewee para instalar tudo que precisa para acessar o internet banking.

O tiago_tm sugeriu uma abordagem melhor, usar o setarch.

setarch
1
fike@klatoon:/tmp$ setarch x86_64 --uname-2.6 iceweasel