Pages

Sunday, October 28, 2012

Compactando arquivos no terminal do GNU/Linux

Há quase dois anos eu me dediquei a modificar uma função de descompactação de arquivos comumente encontrada na internet para uma um pouco mais geral, que me permitisse descompactar em um único comando vários arquivos e que também podem ter formatos diferentes. Você pode encontrar essa função nesse texto.

Hoje, eu criei a função inversa. A que me permite fazer compactação de arquivos sem ter que pensar muito em qual comando tenho que digitar. A função segue abaixo.
   compact() {
     if [ "$#" -ge "1" ]; then
        case "$1" in
          *.[tT][aA][rR].[bB][zZ]|*.[tT][bB][zZ])
                  local file="$1"; shift; tar jcvf "$file" "$@" ;;
          *.[tT][aA][rR].[bB][zZ]2|*.[tT][bB][zZ]2)
                   local file="$1"; shift; tar jcvf "$file" "$@" ;;
          *.[tT][aA][rR].[gG][zZ]|*.[tT][gG][zZ]) 
                   local file="$1"; shift; tar zcvf "$file" "$@" ;;
          *.[gG][tT][gG][zZ]) 
                   local file="$1"; shift; tar zcvf "$file" "$@" ;;
          *[bB][zZ]2)                           
                   shift; bzip2 -z -k "$@"  ;;
          *.[rR][aA][rR])
                    local file="$1"; shift; rar a -r "$file"  "$@" ;;
          *[gG][zZ])                           
                     shift; gzip -r "$@"  ;;
          *.[tT][aA][rR]) 
                     local file="$1"; shift; tar cvf "$file" "$@" ;;
          *.[zZ][iI][pP])
                     local file="$1"; shift; zip -r "$file" "$@" ;;
          *.7[zZ])
                     local file="$1"; shift; 7z a -r "$file" "$@" ;;
          *.[xX][zZ]) 
                     local file="$1"; shift; tar Jcvf "$file" "$@" ;;
          *)    echo "don't know how to compact '$i' ..." ;;
        esac
      else
        echo "Insufficient arguments."
      fi ; }
Novamente, para usar a função basta copiar esse texto e adicioná-la no seu ~/.bashrc O uso dessa função é bastante simples. Basta, no terminal, digitar:

compact arquivo_compactado.EXTENSÃO lista de arquivos para compactar

Onde, arquivo_compactado.EXTENSÃO é no nome do arquivo final (quando aplicável -- eu chego lá para explicar isso) seguido de sua extensão. Exemplos.: arquivo.tar.bz2, arquivo.tgz, arquivo.zip, arquivo.rar ...

 Esta regra NÃO é aplicável no caso de compactação direta no forma .gz ou .bz2. Nesse caso comando compacta o próprio arquivo no local dele, ou seja, o arquivo chamado zezinho.txt, torna-se zezinho.txt.gz ou zezinho.txt.bz2. Por esse motivo, o nome do arquivo compactado não faz sentido aqui e o comando fica sendo:

compact EXTENSÃO lista de arquivos para compactar

Onde extensão indica o tipo de compactação, nesse caso, apenas com bz2 e gz isso faz sentido.
A lista de arquivos aceita espaço no nome dos arquivos e permite recursividade emdiretórios em todos os formatos, exceto, o bzip2. Sendo que alerto que no caso da compactação com o gz isso irá criar 'n' arquivos de formato .gz e não apenas 1 único arquivo final. Se quer compactar com o .gz e ter apenas um arquivo no final, na verdade, mesmo sem saber, está querendo usar o .tar.gz. O mesmo se aplica para o caso do bzip2, mas eu não consegui fazer ele tratar recursividade em diretórios.

Limitações
Há algumas limitações. A primeira delas é que existem vários níveis de compressão, várias opções que não foram escritas. Exemplo, é possível compactar arquivos com o zip usando criptografia, basta, para isso, adicionar a opção 'e' no comando. Eu não fiz isso, logo, esse comando não permite ao usuário compactar com criptografia. Da mesma forma, os níveis de compactação estão no nível padrão para todos os formatos.

Quem já abriu a manpage de qualquer um desses programas sabe que eles fazem muito mais do que o que foi escrito acima, mas eu nunca usei nenhum das opções adicionais para compactação, assim, quando escrevi o básico, escrevi algo que funcionará muito bem para mim.

Alerto para o uso da compactação com o gzip e o bzip2. Se nunca usou esse tipo de compactação pura, antes de fazer qualquer coisa nos seus arquivos de trabalho, faça testes, verifique o resultado e procure entender o que acontece. Não use esses comandos sem entendê-los antes. 

Convite
Enquanto escrevia a função, ficava claro para mim que há muito espaço para aprimoramentos. Fiz o melhor que pude hoje, mas convido a todos que se interessarem a contribuírem com a melhoria da função.

Friday, October 26, 2012

Problemas com os comentários

Caros navegantes desse blog. Gostaria de informá-los de que há uma certa incompatibilidade de algumas extensões de firefox com o sistema de comentários do Blogger. Me parece, até o momento, que o no-script seja um dos culpados, mas não o único.

Duas pessoas já relataram ter tido problemas com os comentários. A meu pedido, uma delas me fez a gentiliza de tentar mais de uma vez e ainda me mandou os nomes de duas extensões. Em uma busca no google verifiquei que esse tipo de problema não é exatamente uma novidade, embora nada de oficial tenha sido encontrado por mim. Enfim, há um problema, estou ciente, peço desculpas por tal problema, mas não há nada que eu possa realmente fazer, além de esperar uma atualização, se é que existe um problema e não apenas e exclusivamente uma feature introduzia com as extensões.

O novo sistema de comentários do blogger depende muito do javascript e qualquer coisa que bloquei o seu funcionamento provocará pane no sistema de comentários.

Desde sempre eu adoto a política de que qualquer um pode comentar, inclusive em formato anônimo. Entretanto, hoje eu  faço a moderação para filtrar engraçadinhos que tentem, por exemplo, apenas divulgar uma página de qualidade/conteúdo duvidoso. Já tive problemas com esse tipo de engraçadinhos e por isso faço a filtragem humana daquilo que é publicado nos comentários.

Obrigado a todos pela compreensão !!!

Tuesday, October 23, 2012

Mudanças da internet

Antigamente, eu acompanhava mais de 500 fontes de notícias, hoje são menos de 50.
Antigamente, eu mantinha uma observação constante na lista de novas extensões lançadas para o meu navegador, hoje eu tenho um conjunto limitado de extensões que não modifico mais.
Antigamente, eu matinha várias redes sociais e esse blog, hoje, eu mantenho uma rede social, deixo a foto em outra, mas não frequento e mal mantenho esse blog.
Antigamente, eu sempre aderia a febre da curiosidade sobre o lançamento do último serviço revolucionário da web2.0, hoje, nesse momento, para escrever essa linha, me perguntei se ainda nascem e morrem dezenas  de serviços por dia.
Antigamente, eu achava que blogs iam durar para sempre, hoje eu tenho minhas dúvidas, acredito que sempre vá haver alguma coisa, mas o blog clássico é cada vez mais raro.

Já achei que vídeos na internet eram algo passageiro e que stream de filmes era um sonho.

Eu vi o tempo que o homem usava HD de 500 MB e que apenas quem tinha muito dinheiro comprava algo maior, hoje eu estou decidindo quantos terabytes (1TB ~ 1 milhão de MB) eu quero na minha máquina. Nesse mesmo tempo, eu usei o serviço de hospedagem na nuvem da época (o termo ainda não existia) que oferecia inacreditáveis 20 MB para os arquivos e a grande dúvida de como selecionar os serviços de e-mail era se ele teria 1 ou 2MB de espaço, hoje o meu dropbox tem 126 GB e o meu e-mail tem cerca de 10 GB de espaço total e eu uso 40 % desse espaço (~ 4 GB), mais o maior HD de antigamente (para quem não sabe, houve um tempo que HDs tinham 500MB, 2GB e 4GB, só muito tempo depois é que apareceu os maiores HD - acho, que de 20GB - e o tamanho cresceu muito rápido depois disso ! ).

Eu vi o javascript ser inventado, o CSS encantar os olhos (e ainda encanta), eu vi o Netscape dominar o mercado e afundar para renascer como Firefox. Eu vi as páginas estáticas de texto puro, o flash mudar as regras do jogo, o java ser a grande promessa. Eu me lembro do som do meu modem de conexão discada e comemorei muito cada vez que navegava a 4 KB/s.

Eu vi as pessoas usando gerenciadores de download cuja as maiores funções eram continuar o download daqueles arquivos enormes de 4 MB quando o download era interrompido e gerenciar a conexão para fazer o download durante a madrugada pagando pulso único na empresa de telefonia local.

Eu comprei muitos CDs em banca de jornal com programas de todos os tipos porque baixar esses programas era inviável via internet e me lembro da grande sacada de marketing: "São 36 horas de downloads para você, em CD", quanto espaço tinha um CD ? 650 MB, mais quem sabia disso ? O importante era o tempo que eu economizava de download (confesso que não me lembro do tempo exato que havia nessas propagandas, 36 horas é apenas um exemplo).

Eu já abri página de internet e desconectei-me para ler a página de internet e voltar a conectar-me quando queria outra página durante o dia de semana, quando o preço único não valia e o pulso durava 4 minutos (alguém duvida que eu pensava nisso ?). Hoje eu navego a 5 Mbps (~ 650 KB/s).

São 15 anos de mudanças que eu testemunhei pessoalmente !!! Todo mundo tem sua história, tem sua cena marcante de quando a internet era diferente. Se desejar, compartilhe também sua memória nos comentários.

Sunday, October 14, 2012

Atualizando arquivos de configuração do Arch Linux

Depois do meu último tópico, fiquei com aquela sensação de quem está deixando o tempo passar demais para começar a modificar os meus arquivos de configuração do Arch Linux.

Enfim, resolvi fazer isso apenas para poder enfrentar melhor as atualizações que estão vindo aí.

O grande desafio é não usar mais o /etc/rc.conf como forma centralizada de gerenciamento de tudo.

Assim, todas as seções foram migradas. Algumas coisas que eu vou escrever abaixo só são válidas porque eu tenho uma instalação antiga e nunca fiz nenhuma atualização de arquivos de configuração até a data de hoje (exceto o pacman, que me obrigou em sua última grande modificação para inclusão das chaves de autenticação ! Mas isso não está em foco aqui !)

/etc/vconsole.conf

Nsse arquivo ficou com as configurações de fontes para o terminal. Mas até onde eu sei, falo aqui da tela preta, aquela que quase nenhum novato já viu e que pode ser acessada por um "ctrl+alt+F1" (no Arch Linux "ctrl+alt+F7" para retornar. Na maioria das outras distribuições use "ctrl+alt+F8". Se der problemas teste todos as teclas funcionais, de F1 até F12. Em algum lugar está !)
No meu caso esse arquivo tem apenas duas linhas. Uma definindo o teclado e a outra habilitando as cores.

KEYMAP="br-abnt2"
USECOLOR="yes"

/etc/hostname

Ao contrário de todas as outras distribuições, no Arch Linux esse arquivo não existia até eu ter criado ele.
Ele tem apenas um nome. O nome da minha máquina.

Depois disso é conveniente e sábio modificar o /etc/hosts também. Mas isso eu já tinha feito por outros motivos (há certos aplicativos que necessitam a configuração do /etc/hosts apresente nome de domínio no 127.0.0.1)

/etc/adjtime 

Simplesmente é a configuração que me deu mais trabalho.

O que eu faço é usar o comando hwclock para acertar o horário da bios manualmente e depois atualizo o horário da máquina usando o mesmo comando com a opção --hctosys.

hwclock --set --date="YYYY-MM-DD hh:mm:ss"
hwclock --hctosys

Ao contrário de todas as recomendações eu uso a opção localtime e não utc nas minhas configurações, assim, para escrever o horário em /etc/adjtime eu uso

hwclock -w --localtime

E por que eu faço isso contra todas as recomendações ? Porque eu não quis acessar a BIOS e dizer a ela que o horário que ela está mostrando é utc. Com sobreposições de informações, o meu relógio na barra de tarefas me mostra -6 horas em relação ao UTC e isso, claro, não é legal. Não seria fácil seria modificar a tal opção da BIOS e deixar tudo como é recomendado ? Sim, seria. Quando se tem um teclado que funciona direito. O meu teclado, não me pergunte o porquê, funciona apenas depois que o sistema operacional carrega. Pelo tempo de uso desse teclado, vale mais apena comprar outro do que resolver problemas. Pois é... estou a mais de um ano para fazer isso. Enquanto ele não quebra de vez ou sei-lá-o-que acontece eu não vou me mexer para gastar essa grana (comprando um teclado bom !).

O trabalho que me deu foi justamente como fazer o horário funcionar adequadamente considerando os defeitos físicos. Trabalho esse que não existia antes porque eu já tinha a configuração ajustada quando eu tinha acesso a BIOS... enfim.

[updade] Note que isso é uma hipótese de problema. Talvez o problema seja alguma outra coisa. Fato é que configurar hora é para ser uma das atividades mais simples do sistema. Portanto, o problema que há, seja qual for, é meu e não do OS. [updade]

Ah ! Eu uso o time.is para verificar o horário exato.
Configurando dessa forma eu não consigo precisão absoluta, estou 3,6 segundos atrasados.

Para resolver esse "problema" você pode se dedicar a aprender a instalar e configuração de um cliente NTP. Qualquer dia eu faço isso...

/etc/localtime

Apesar de até hoje ele não ser obrigatório, era um arquivo que já estava em uso. O motivo é que ele é um link simbólico (no meu caso, pelo menos, não quis duplicar o arquivo) para o /usr/share/zoneinfo/America/Sao_Paulo que é onde eu digo para o sistema onde eu estou.

Essa configuração já estava feita porquê eu, assim como muitos brasileiros, temos horário de verão e todos devem saber o quanto esse arquivo nos ajuda ...

Configuração dos módulos

Particularmente, antigamente eu bloqueava uma das minhas placas de rede (eu tenho duas) então eu tinha um seção no rc.conf no array de módulos que bloqueava o "via_rhine".

Desfiz isso, mas a utilização do /etc/modprobe/modproble.conf e do /etc/modulos-load.d/ é bem simples. Não precisei, mas não vejo grande problemas hoje.

Ah ! Hoje, o carregamento automático de módulos está mais fluido do que quando eu instalei o Arch Linux e, por exemplo, era obrigado carregar os módulos de VirtualBox manualmente ou via arquivos de configuração no boot para usar o programa. Hoje isso não é mais necessário. ;)

Configuração de rede

A segunda mais antiga modificação do arquivo /etc/rc.conf desde que eu passei a usar o Arch Linux e que mais gerou arquivos de alerta pela minha máquina.

Vou ser franco, gosto muito do modo antigo de fazer as coisas, mas a evolução veio e eu acabei modificando também a configuração de rede hoje instalando e configurando o netcfg e, para fazer um bom gerenciamento das coisas, também instalei o ifplugd. A configuração é bem simples também, está na internet.

Eu não gosto muito dessa modificação, por isso não mudei antes. A antiga era muito mais simples e eu não precisava de dois programas adicionais. Ok. Agora é melhor, mas antes também funcionava.

Conclusão

Demorei 3 vezes mais tempo para escrever esse artigo do que para fazer as modificações. O comandos "man archlinux" e "man rc.conf", bem como a internet (os links que eu usei estão nos respectivos tópicos) podem ser úteis para sanar outras dúvidas.

O futuro promete liquidar a última e única linha que há no meu /etc/rc.conf, o DAEMONS. Pelo que li (não me lembro mais onde) as novas instalações já vão usar o systemd.

O ponto positivo é que eu não tenho mais nenhuma mensagem durante o boot escrita em letras vermelhas me alertando sobre as recomendações de atualização do arquivo de configuração. :D

Thursday, October 11, 2012

O verdadeiro problema de usar o ArchLinux

Hoje eu descobri o meu maior problema de usar o ArchLinux desde o instalei em 2009, há mais de três anos atrás.

E o "problema" (note as aspas) é que eu não tenho mais problemas... Sim, o sistema é tão estável, mas tão estável, que eu fui esquecendo como resolver problemas, onde estão aqueles arquivos de configuração. Como é ter que ficar horas e horas na internet procurando soluções para aqueles bugs incômodos. É impressionante.

Sim, eu já tive problemas com o ArchLinux. Nesses três anos, foram 2 problemas. Um deles, não era problema, mas uma mudança da característica do cryptsetup que não aceitava mais funcionar via sudo. Tem algumas ações de usuário a serem feitas aqui que resolvem isso facilmente, mas não havia mais necessidade, o programa evoluiu o problemas eram os meus scripts que não evoluíram junto. O outro problema era porque eu tenho muitos programas instalados e recentemente quando houve a mudança das bibliotecas de /lib para /usr/lib eu tive que identificar certos programas instalados (todos do aur) para conseguir migrar o diretório sem problemas. Como pode ver, nenhum desses dois problemas foram problemas de verdade.

Brincadeiras e ironias a parte, a minha maior dificuldade com o ArchLinux está em fazer programas que possuem código com um desenvolvimento muito lento compilarem nas versões mais recentes do GCC. Quase sempre eu tenho que modificar alguma coisa nas opções do Makefile, ou modificar alguma declaração de variável que não fazia sentido antes, mas o GCC não reclamava. Lembro-me até de ter achado um erro de declaração de variáveis em um programa escrito por mim mesmo quando mudei a versão do GCC. Mas se isso é um problema, que venham muito problemas como esse, que ajudam a desenvolver códigos melhor escritos e mais estáveis.

É a evolução e o ArchLinux não costuma esperar por aqueles programas que não querem evoluir na mesma velocidade. Tudo que ele faz é seguir sua própria evolução mas sem abrir mão da estabilidade que me permite dizer o que digo acima. Fui esquecendo de como fazer certas coisas porque não tive que ficar o tempo todo resolvendo problemas e me obrigando a relembrar onde e quais são os arquivos de configuração para isso ou aquilo.

Eu posso dar um exemplo bem simples para isso. Desde de que instalei o ArchLinux eu nunca mais, mas nunca mais mesmo tive qualquer problema com a configuração da minha placa de vídeo, ou seja, eu uso os mesmos arquivos que criei em 2009 quando instalei o sistema e fiz questão de usar o xorg.conf e hoje eu nem sei se eu precisaria de usar o xorg.conf. Estou quase certo que não preciso ! Mas o que quero dizer é que eu não sei como resolver problemas de configuração nas novas versões do servidor gráfico. Eu também não tive mais problemas com teclado, configuração do sistema de som, rede ou qualquer outra coisa do gênero. Tudo ainda roda usando os mesmo scripts de configuração que tenho desde de 2009 e apesar das profundas modificações que o ArchLinux vem implementando recentemente na sua estrutura de arquivos de configuração (especialmente a já não tão recente modificação da configuração de rede), eu não tive problemas...

Sim, meus caros, esse texto está carregado de ironias, mas é com grande satisfação que acordei para essa constatação na data de hoje e quis dividir essa minha alegria e as observações que fiz com todos. É muito bom usar um sistema hiper-atual, com mais recentes versões de programas estáveis possíveis e ainda ter tal estabilidade, com um gasto quase nulo de tempo sendo usado no gerenciamento de crises.

Meus parabéns a todos que fazem essa distribuição ser o que é e me permitem usar o computador como eu gostaria de usar. Obrigado.

PS.: tanto tempo sem escrever me enferrujou um pouco. Já corrigi um monte de problemas no texto desde que publiquei. Se encontrarem algum absurdo como "problema instalado" escrito no texto (coisa que já corrigi), favor, me avise :D