2

Adote um Software Livre abandonado

Posted by Eriberto on fev 2, 2014 in Linux, Programas

Uma das grandes afirmações da filosofia do Software Livre é que você pode ajudar em um código ou, até mesmo, fazer um trabalho que dele derive.

Como mantenedor Debian, um dos maiores problemas que vejo no mundo livre é o fim de linha ou o abandono de programas úteis para a comunidade mundial. Você que é programador e é apaixonado por SL, já pensou em adotar um código abandonado? Adotar um desses programas lhe traria os seguintes benefícios:

  • Você faria algo útil para a humanidade e se sentiria uma pessoa especial.
  • Você aprenderia muito com o código abandonado, afinal ele foi criado por um programador que foi reconhecido de alguma forma. Esse programador pode ter abandonado um bom código até mesmo por um motivo grave, como falecimento.
  • Você estaria dando atenção a um lado pouco explorado da filosofia do Software Livre.
  • Se você precisa fazer um TCC de faculdade, esta é a melhor chance de aprender profundamente sobre um assunto e deixar um trabalho útil como legado.

Uma das formas de encontrar um código abandonado que lhe interesse é pesquisar em grandes repositórios, como o SourceForge ou GitHub, observando as datas das últimas atualizações dos programas. Em seguida, você deve escrever para o autor, perguntando sobre o desenvolvimento do código e especulando se ele pretende dar continuidade. A seguir, em função da resposta, você pode anunciar que quer cuidar do código desde já ou, se achar melhor, você pode fazer um fork com um nome similar. Exemplo: xyzfaztudo vira xyzfaztudo-ng ou xyzfaztudo-up ou faztudo-rob (se seu nome for Roberto, por exemplo). Ou pode usar um nome totalmente diferente. Também é válido.

Uma outra forma de encontrar bons códigos abandonados é olhando a relação de pacotes órfãos no Debian, disponível em https://www.debian.org/devel/wnpp/orphaned_byage. Muitos desses pacotes estão órfãos porque os desenvolvedores dos respectivos programas abandonaram o projeto por algum motivo. Então, em diversos casos, sem o programa atualizado pelo desenvolvedor, torna-se impossível manter o pacote em qualquer distribuição que seja. Dois bons exemplos são:

  • html2text: esse utilíssimo programa teve a sua última atualização em 15/01/2004. Uma boa alma o hospeda em http://www.mbayer.de/html2text. Ao conversar com o dono do site, ele me disse que só hospeda o programa para que ele não morra. Mas ele não é programador. Você, leitor que programa em C, poderia adotar esse programa. Há vários patches prontos, feitos no Debian, para corrigir problemas. Você pode ver esses patches em http://sources.debian.net/src/html2text/1.3.2a-16/debian/patches. Há também bugs abertos no Debian, falando sobre problemas do programa, alguns citando a solução. Veja em http://bugs.debian.org/cgi-bin/pkgreport.cgi?repeatmerged=no&src=html2text. Eu gostaria muito de adotar esse pacote no Debian. Mas, para isso, preciso que alguém adote o programa e o seu código fora do Debian. O pacote foi tornado órfão no Debian em 08/09/2009. Detalhes sobre o pacote poderão ser vistos aqui: http://packages.qa.debian.org/h/html2text.html. Outra boa ideia, caso resolva adotar o programa, é buscar por bugs e patches em outras distribuições, como Ubuntu, OpenSUSE, Fedora etc.
  • netstat-nat: esse é para quem gosta de programar algo sobre redes. A sua última atualização foi em 2010. Está disponível em http://www.tweegy.nl/projects/netstat-nat. O pacote ficou órfão no Debian e o antigo mantenedor fez a seguinte observação: "estou tornando órfão porque não há mais atividade por parte do desenvolvedor". Detalhes em: http://packages.qa.debian.org/n/netstat-nat.html.

Gostou da ideia? Então, deixe aqui o seu comentário, dizendo qual projeto você adotou ou, até mesmo, passou a integrar.

[]s

 

 

 

Tags:

 
2

LiME – Linux Memory Extractor

Posted by Eriberto on out 7, 2013 in Forense computacional, Hardware, Kernel, Linux, Sistema Operacional

Há algum tempo, neste link, eu falei sobre o fmem, um módulo de kernel que fornece privilégios para que seja possível o dump de memória, muito usado em perícias digitais (forense computacional). Ocorre que o fmem possui algumas limitações, como a aquisição de memória somente até 4 GB. Assim a solução mais moderna e versátil é o LiME.

O objetivo deste post será mostrar, de forma simples e objetiva, como compilar e usar o módulo de kernel LiME, disponível em https://code.google.com/p/lime-forensics. O trabalho se dará no Debian Wheezy (7.0).

Inicialmente, como root, instale os cabeçalhos (headers) do kernel, o gcc e o make. Considerando o uso de um kernel de 64 bits, o comando será:

# apt-get install linux-headers-amd64 gcc make

A seguir, faça download do LiME e, depois, o extraia. A extração se dará com o comando tar:

# tar -xvf lime-forensics-1.1-r17.tar.gz

Como próximo passo, entre no diretório src e compile o código:

# cd src
# make

Observe que será criado um módulo de kernel (extensão .ko). No meu caso, um ls mostra o seguinte:

# ls
disk.c  lime-3.2.0-4-amd64.ko  lime.h  main.c  Makefile  Makefile.sample  tcp.c

Finalmente, carregue o módulo. Será utilizado o comando insmod com algumas opções. Esse carregamento já realizará o dump de memória automaticamente. O comando será o seguinte:

# insmod lime-3.2.0-4-amd64.ko "path=/root/mem.dump format=lime"

Depois do comando anterior, será criado um arquivo em /root, com o nome mem.dump, que conterá o dump da memória. O LiME trabalha com três formatos de dump: raw, padded e lime. O formato raw é o mais puro e fornece uma cópia idêntica do conteúdo da RAM. No entanto, o formato lime, que contém headers extras que controlam endereços de memória por blocos, é entendido pelo analisador Volatility. Assim sendo, este será o método preferencial.

Caso seja necessário realizar um novo dump de memória na máquina, antes de tudo, remova o módulo LiME. Para tanto, utilize o comando:

# rmmod lime

O manual do LiME em PDF, disponível no mesmo site de download, fornece diversas opções, como a aquisição da memória em dispositivos usando Android.

Tags:, , , , , , , , , , , ,

 
5

How to write a good debian/watch easily

Posted by Eriberto on out 7, 2013 in Debian, Sistema Operacional

Short URL: http://bit.ly/debian_watch


Updates:

2016-10-16:

  • Added a section about 'fake watches'.
  • Changed all versions from 'version=3' to 'version=4'.

2015-08-25:

  • Added a section about 'merging uversionmangle and dversionmangle'.

 

Writing a good watch file for a Debian package is simple. However, several maintainers don't know how to make watches for non trivial sites as Google Pages or Github. Then, my objective is  teach a bit about debian/watch.

A conventional debian/watch has two lines: version and site watcher. An example for a simple and trivial site:

version=4
http://f00l.de/pcapfix/pcapfix-(.+)\.tar\.gz

The first line is compulsory and says to Debian watch system (in Debian official project sites) what is the used version and how to behave. Currently, this line is always "version=4". Then, forget this. The last line (site watcher) is responsible by scan the site, searching for versions of the codes (tarballs). This line was made using a simple observation and regular expressions (Perl regular expressions). So, in the upstream site (http://f00l.de/pcapfix), we can point a download shortcut to see the file URL. Please, see the picture below that shows this situation:

fig2

PS: to get a summary about Perl regular expressions, go to the site http://www.cs.tut.fi/~jkorpela/perl/regexp.html.

Is possible to see the web link f00l.de/pcapfix/pcapfix-0.7.3.tar.gz and we will try to use it. We should change the version from 0.7.3 to (.+). In Perl regular expressions, .* is treated as anything, except newline, one or more times. Then, we want monitor pcapfix-ANYTHING.tar.gz. The brackets are used to alert the watch system that we are considering as version what can be seen among them. The final situation is http://f00l.de/pcapfix/pcapfix-(.+)\.tar\.gz. Note that the last part (after the last slash) has a regexp and the points was protected by backslashes to avoid an interpretation as any character.

PS: Some people like to use (.*). However, in regular expressions, this is treated as nothing or anything. Then, http://f00l.de/pcapfix/pcapfix-(.*)\.tar\.gz will match with pcapfix-.tar.gz and you should avoid this.

To test a watch file, we need run 'uscan command' from upstream code place (outside of the debian directory, but it must exist; debian/changelog and debian/watch are fundamental to test because uscan will get the local version from the first and compare with results generated by the last).

$ uscan --verbose --report

The result:

eriberto@canopus:/tmp/pcapfix-0.7.3$ uscan --verbose --report
-- Scanning for watchfiles in .
-- Found watchfile in ./debian
-- In debian/watch, processing watchfile line:
   http://f00l.de/pcapfix/pcapfix-(.+)\.tar\.gz
-- Found the following matching hrefs:
     pcapfix-0.7.3.tar.gz
     pcapfix-0.7.2.tar.gz
     pcapfix-0.7.1.tar.gz
     pcapfix-0.7.tar.gz
     pcapfix-0.6.tar.gz
     pcapfix-0.5.tar.gz
     pcapfix-0.4.tar.gz
     pcapfix-0.3.tar.gz
     pcapfix-0.2-real.tar.gz
     pcapfix-0.1.tar.gz
Newest version on remote site is 0.7.3, local version is 0.7.3
 => Package is up to date
-- Scan finished

How you can see, all versions were shown and the package is using the lastest release. This was a very easy work. However, we can use another technique, which is more sophisticated. This technique is useful for sites more complex as Google Pages and Github.

The site shown in the last picture has web links. Then, we can collect these web links. To do this, initially, we must use the URL of the site that has the links and (.*). Note that, this time, (.*) will be used to a temporary action only. An example:

version=4
http://f00l.de/pcapfix (.*)

After the uscan command, the output was:

eriberto@canopus:/tmp/pcapfix-0.7.3$ uscan --verbose --report
-- Scanning for watchfiles in .
-- Found watchfile in ./debian
-- In debian/watch, processing watchfile line:
   http://f00l.de/pcapfix (.*)
-- Found the following matching hrefs:
     /
     /
     /blog/
     /blog/
     /pcapfix/
     /pcapfix/
     /genmenu
     /genmenu
     /hacking/
     /hacking/
     /impressum.html
     /impressum.html
     /hacking/pcapfix.php
     /hacking/pcapfix.php
     pcapfix-0.4.png
     pcapfix-0.4.png
     /hacking/pcapfix.example.txt
     /hacking/pcapfix.example.txt
     mailto:ruport@f00l.de
     mailto:ruport@f00l.de
     pcapfix-0.7.3.tar.gz
     pcapfix-0.7.3.tar.gz
     pcapfix-0.7.3-win32.zip
     pcapfix-0.7.3-win32.zip
     changelog-0.7.3.txt
     changelog-0.7.3.txt
     pcapfix-0.7.2.tar.gz
     pcapfix-0.7.2.tar.gz
     pcapfix-0.7.2-win32.zip
     pcapfix-0.7.2-win32.zip
     changelog-0.7.2.txt
     changelog-0.7.2.txt
     pcapfix-0.7.1.tar.gz
     pcapfix-0.7.1.tar.gz
     pcapfix-0.7.1-win32.zip
     pcapfix-0.7.1-win32.zip
     changelog-0.7.1.txt
     changelog-0.7.1.txt
     pcapfix-0.7.tar.gz
     pcapfix-0.7.tar.gz
     pcapfix-0.7-win32.zip
     pcapfix-0.7-win32.zip
     changelog-0.7.txt
     changelog-0.7.txt
     pcapfix-0.6.tar.gz
     pcapfix-0.6.tar.gz
     pcapfix-0.6-win32.zip
     pcapfix-0.6-win32.zip
     changelog-0.6.txt
     changelog-0.6.txt
     pcapfix-0.5.tar.gz
     pcapfix-0.5.tar.gz
     pcapfix-0.5-win32.zip
     pcapfix-0.5-win32.zip
     changelog-0.5.txt
     changelog-0.5.txt
     pcapfix-0.4.tar.gz
     pcapfix-0.4.tar.gz
     pcapfix-0.4-win32.zip
     pcapfix-0.4-win32.zip
     changelog-0.4.txt
     changelog-0.4.txt
     pcapfix-0.3.tar.gz
     pcapfix-0.3.tar.gz
     changelog-0.3.txt
     changelog-0.3.txt
     pcapfix-0.2-real.tar.gz
     pcapfix-0.2-real.tar.gz
     changelog-0.2.txt
     changelog-0.2.txt
     pcapfix-0.1.tar.gz
     pcapfix-0.1.tar.gz
     mailto:info@f00l.de
     mailto:info@f00l.de
dpkg: error: version 'mailto:ruport@f00l.de' has bad syntax: epoch in version is not number
Newest version on remote site is mailto:ruport@f00l.de, local version is 0.7.3
dpkg: error: version 'mailto:ruport@f00l.de' has bad syntax: epoch in version is not number
 => Newer version available from
    http://f00l.de/pcapfix/mailto:ruport@f00l.de
-- Scan finished

Note that all web links in the page are shown. Then, we can use another format in debian/watch to filter the result:

version=4
<URL> <expression to grep>

Yes! You can 'grep' the result (and apply Perl regexp). Then, you may use (observe the space between URL and the regexp):

version=4
http://f00l.de/pcapfix pcapfix-(.+)\.tar\.gz

See the result:

eriberto@canopus:/tmp/pcapfix-0.7.3$ uscan --verbose --report
-- Scanning for watchfiles in .
-- Found watchfile in ./debian
-- In debian/watch, processing watchfile line:
   http://f00l.de/pcapfix pcapfix-(.+)\.tar\.gz
-- Found the following matching hrefs:
     pcapfix-0.7.3.tar.gz
     pcapfix-0.7.3.tar.gz
     pcapfix-0.7.2.tar.gz
     pcapfix-0.7.2.tar.gz
     pcapfix-0.7.1.tar.gz
     pcapfix-0.7.1.tar.gz
     pcapfix-0.7.tar.gz
     pcapfix-0.7.tar.gz
     pcapfix-0.6.tar.gz
     pcapfix-0.6.tar.gz
     pcapfix-0.5.tar.gz
     pcapfix-0.5.tar.gz
     pcapfix-0.4.tar.gz
     pcapfix-0.4.tar.gz
     pcapfix-0.3.tar.gz
     pcapfix-0.3.tar.gz
     pcapfix-0.2-real.tar.gz
     pcapfix-0.2-real.tar.gz
     pcapfix-0.1.tar.gz
     pcapfix-0.1.tar.gz
Newest version on remote site is 0.7.3, local version is 0.7.3
 => Package is up to date
-- Scan finished

Another example. Please, see the site https://sites.google.com/site/doctormike/pacman.html, that provides the game Pacman for Console (pacman4console in Debian). The picture below shows a link in the site:

fig3

The first idea is to use something like this:

version=4
https://sites.google.com/site/doctormike/pacman-(.+)\.tar\.gz\?attredirects=0

or

version=4
https://sites.google.com/site/doctormike/pacman-(.+)\.tar\.gz.*

But the results are:

eriberto@canopus:/tmp/pacman4console-1.2$ uscan --verbose --report
-- Scanning for watchfiles in .
-- Found watchfile in ./debian
-- In debian/watch, processing watchfile line:
   https://sites.google.com/site/doctormike/pacman-(.+)\.tar\.gz\?attredirects=0
uscan warning: In debian/watch,
  no matching hrefs for watch line
  https://sites.google.com/site/doctormike/pacman-(.+)\.tar\.gz\?attredirects=0
-- Scan finished

and:

eriberto@canopus:/tmp/pacman4console-1.2$ uscan --verbose --report
-- Scanning for watchfiles in .
-- Found watchfile in ./debian
-- In debian/watch, processing watchfile line:
   https://sites.google.com/site/doctormike/pacman-(.+)\.tar\.gz.*
uscan warning: In debian/watch,
  no matching hrefs for watch line
  https://sites.google.com/site/doctormike/pacman-(.+)\.tar\.gz.*
-- Scan finished

Then, we must use the URL scan method. In a first time use:

version=4
https://sites.google.com/site/doctormike/pacman.html (.*)

The output:

eriberto@canopus:/tmp/pacman4console-1.2$ uscan --verbose --report
-- Scanning for watchfiles in .
-- Found watchfile in ./debian
-- In debian/watch, processing watchfile line:
   https://sites.google.com/site/doctormike/pacman.html (.*)
-- Found the following matching hrefs:
     https://sites.google.com/site/doctormike/pacman-1.2.ebuild?attredirects=0
     https://sites.google.com/site/doctormike/pacman-1.2.tar.gz?attredirects=0
     https://sites.google.com/site/doctormike/pacman-1.1.tar.gz?attredirects=0
     https://sites.google.com/site/doctormike/pacman-1.0.tar.gz?attredirects=0
     https://sites.google.com/site/doctormike/pacman-1-1.png?attredirects=0
     https://www.google.com/a/UniversalLogin?service=jotspot&amp;continue=https://sites.google.com/site/doctormike/pacman.html
     /site/doctormike/system/app/pages/reportAbuse
     javascript:;
     /site/doctormike/system/app/pages/removeAccess
     http://sites.google.com
dpkg: error: version 'javascript:;' has bad syntax: epoch in version is not number
Newest version on remote site is javascript:;, local version is 1.2
dpkg: error: version 'javascript:;' has bad syntax: epoch in version is not number
 => Newer version available from
    https://sites.google.com/site/doctormike/javascript:;
-- Scan finished

Now, we can make a 'grep' based in https://sites.google.com/site/doctormike/pacman-1.2.tar.gz?attredirects=0 or, simply, .*pacman-1.2.tar.gz.* (it is a grep, man!). Four solutions, among others, are:

version=4
https://sites.google.com/site/doctormike/pacman.html https://sites.google.com/site/doctormike/pacman-(.+)\.tar\.gz\?attredirects=0

version=4
https://sites.google.com/site/doctormike/pacman.html https://sites.google.com/.*/pacman-(.+)\.tar\.gz.*

version=4
https://sites.google.com/site/doctormike/pacman.html .*/pacman-(.+)\.tar\.gz.*

version=4
https://sites.google.com/site/doctormike/pacman.html .*pacman-(.+)\.tar\.gz.*

 

PS: these examples are available in plain text at http://eriberto.pro.br/files/debian_watch_example.txt.

See the result when using a solution:

eriberto@canopus:/tmp/pacman4console-1.2$ uscan --verbose --report
-- Scanning for watchfiles in .
-- Found watchfile in ./debian
-- In debian/watch, processing watchfile line:
   https://sites.google.com/site/doctormike/pacman.html .*/pacman-(.+)\.tar\.gz.*
-- Found the following matching hrefs:
     https://sites.google.com/site/doctormike/pacman-1.2.tar.gz?attredirects=0
     https://sites.google.com/site/doctormike/pacman-1.1.tar.gz?attredirects=0
     https://sites.google.com/site/doctormike/pacman-1.0.tar.gz?attredirects=0
Newest version on remote site is 1.2, local version is 1.2
 => Package is up to date
-- Scan finished

To Github, I will use as example the project homed at https://github.com/Rup0rt/netmate. In Github, there is a link named release. See the picture below.

fig4

 

If you click over release link, a new page will open and it will show Realeases and Tags links; both have web links that refers to the versions of the releases as, e.g., v0.16. Then, you can use:

version=4
https://github.com/Rup0rt/netmate/releases /Rup0rt/netmate/archive/v(.+)\.tar\.gz

 

PS: remember that you must use 'https://github.com/Rup0rt/netmate/releases (.*)' for initial scan.

The result:

eriberto@canopus:netmate-0.16$ uscan --verbose --report
-- Scanning for watchfiles in .
-- Found watchfile in ./debian
-- In debian/watch, processing watchfile line:
   https://github.com/Rup0rt/netmate/releases /Rup0rt/netmate/archive/v(.+)\.tar\.gz
-- Found the following matching hrefs:
     /Rup0rt/netmate/archive/v0.16.tar.gz
Newest version on remote site is 0.16, local version is 0.16
 => Package is up to date
-- Scan finished

As a new example, go to the site http://eriberto.pro.br/files/myprogram. Consider that you need to check all Linux versions and they are using tar.bz2, tar.gz and tar.xz extensions. Thus, you need to create a rule with a non-capturing group (?:) feature. You can see an example of this below.

version=4
http://eriberto.pro.br/files/myprogram myprogram-(.+)\.tar\.(?:bz2|gz|xz)

Note that (?:bz2|gz|xz) can be used to match lines that have bz2 or gz or xz but it must be ignored in result. Another solution to this case is:

version=4
http://eriberto.pro.br/files/myprogram/myprogram-(.+)\.tar\.(?:bz2|gz|xz)

If needed, you can select between two or more possibilities. Please, see https://github.com/baruch/diskscan/releases. There are two name patterns to the versions. The respective watch is:

version=4
https://github.com/baruch/diskscan/releases .*/(?:diskscan-)?(\d\S+)\.tar\.(?:bz2|gz|xz)

Note that was used (?:diskscan-)? to make diskscan- optional in results. The \d mean 'one digit', as 0-9.

Another resource available is the uversionmangle and dversionmangle. These can be used to modify the vision of the system over the file names. The uversionmangle (u=upstream) is used for upstream site and dversionmangle (d=Debian) is for local file. As an example, consider again the site http://eriberto.pro.br/files/myprogram and local names using '+dfsg-1' suffix, being that '-1' can be another number as '-2.3'. Then, a initial idea of the watch is:

version=4
http://eriberto.pro.br/files/myprogram myprogram-(.+)\.tar\.(?:bz2|gz)

The result:

Newest version on remote site is 2.0, local version is 1.0.2-1+dfsg
 => Newer version available from
    http://eriberto.pro.br/files/myprogram/myprogram-2.0.tar.gz
-- Scan finished

As shown, the local version is being composed by upstream version and '-1+dfsg'. We can use dversionmangle to apply a 'sed' command to extract '-1+dfsg'. The final solution is:

version=4
opts=dversionmangle=s/-\d\+dfsg// \
http://eriberto.pro.br/files/myprogram myprogram-(.+)\.tar\.(?:bz2|gz)

See the output:

Newest version on remote site is 2.0, local version is 1.0.2-1+dfsg
 (mangled local version number 1.0.2)
 => Newer version available from
    http://eriberto.pro.br/files/myprogram/myprogram-2.0.tar.gz
-- Scan finished

Now that you understood how to works debian/watch, is the moment to say that the best combination, in general cases, is (\d\S+), instead of (.+). The \d means a digit (0-9). The \S is any non-whitespace character. Then, using (\d\S+), we will have a digit and, at least, a character as a digit, dot etc. Another best practice is accept a possible change of the file extension by the upstream. Then, is good to use \.tar\.(?:bz2|gz|xz) instead of \.tar\.bz2 or \.tar\.gz or similar. See below some examples:

version=4
http://f00l.de/pcapfix/pcapfix-(\d\S+)\.tar\.(?:bz2|gz|xz)
version=4
https://sites.google.com/site/doctormike/pacman.html .*/pacman-(\d\S+)\.tar\.(?:bz2|gz|xz).*
version=4
http://eriberto.pro.br/files/myprogram myprogram-(\d\S+)\.tar\.(?:bz2|gz|xz)

Finishing, you can see and test several examples of the debian/watch at http://anonscm.debian.org/viewvc/sepwatch/trunk/watchfiles. As said, the site http://www.cs.tut.fi/~jkorpela/perl/regexp.html has an overview about regular expressions. A special attention must be destinated to \d and \S matches because it is very used in watch files. The uscan manpage also has several examples and explanations. There are some important information at https://wiki.debian.org/debian/watch too. The post http://stackoverflow.com/questions/3512471/non-capturing-group explains about non-capturing group feature in Perl regular expressions. Another example of this is at http://deadlytechnology.com/web-development-tips/perl-regex. A good tip is the URL http://www.regexe.com, where you can test the results of the your Perl regular expression. Alternatively, there is http://www.regexplanet.com/advanced/perl/index.html but I prefer the previous link.

I hope this help someone to write his debian/watch files.

Merging uversionmangle and dversionmangle

If needed, you can combine uversionmangle and dversionmangle using a comma as separator. See an example:

opts=uversionmangle=s/-src//,dversionmangle=s/\+dfsg// \

Another possibility is concatenate two actions into uversionmangle or dversionmangle using a semicolon. Look at this example:

opts=uversionmangle=s/-src//;s/-versao/-version/ \

Changing the subject, considering that debian/watch uses Perl regular expressions, you can take advantage of the group capture resource. Please, consider the files at http://eriberto.pro.br/files/myprogram2. There are:

myprogram2-0.1.tar.gz
myprogram2-0.2-beta.tar.gz
myprogram2-0.2.tar.gz
myprogram2-alpha-0.1.tar.gz
myprogram2-beta-0.1.tar.gz

The first problem is that a program version can not start with a alphabetic character. See an example using an initial debian/watch:

version=4
http://eriberto.pro.br/files/myprogram2 myprogram2-(.+)\.tar\.(?:bz2|gz|xz)

see the result:

$ uscan
-- Scanning for watchfiles in .
-- Found watchfile in ./debian
-- In debian/watch, processing watchfile line:
 http://eriberto.pro.br/files/myprogram2 myprogram2-(.+)\.tar\.(?:bz2|gz|xz)
-- Found the following matching hrefs:
 myprogram2-0.1.tar.gz (0.1)
 myprogram2-0.1.tar.gz (0.1)
 myprogram2-0.2-beta.tar.gz (0.2-beta)
 myprogram2-0.2-beta.tar.gz (0.2-beta)
 myprogram2-0.2.tar.gz (0.2)
 myprogram2-0.2.tar.gz (0.2)
 myprogram2-alpha-0.1.tar.gz (alpha-0.1)
 myprogram2-alpha-0.1.tar.gz (alpha-0.1)
 myprogram2-beta-0.1.tar.gz (beta-0.1)
 myprogram2-beta-0.1.tar.gz (beta-0.1)
dpkg: warning: version '1:beta-0.1-0' has bad syntax: version number does not start with digit
Newest version on remote site is beta-0.1, local version is 0.1
dpkg: warning: version '1:beta-0.1-0' has bad syntax: version number does not start with digit
 => Newer version available from
    http://eriberto.pro.br/files/myprogram2/myprogram2-beta-0.1.tar.gz
-- Scan finished

So, the right upstream version must be 0.1-alpha or 0.1-beta, instead of alpha-0.1 or beta-0.1. The second problem is that, for Debian, 0.1 < 0.1-beta. You can analyse this fact using 'dpkg --compare-versions' command. Look at this example (gt = greater than; lt = less than):

$ dpkg --compare-versions 0.1-beta gt 0.1 && echo true
true

In Debian world, the versions can use '~' or '+' to establish a right hierarchy:

0.1~beta < 0.1 < 0.1+beta

So, we need to use 0.1~alpha, 0.1~beta, etc. To change the order of the upstream versions, you can use:

version=4
opts=uversionmangle=s/(alpha|beta)-([\d\.]+)/$2~$1/;s/([\d\.]+)-(alpha|beta)/$1~$2/ \
http://eriberto.pro.br/files/myprogram2 myprogram2-(.+)\.tar\.(?:bz2|gz|xz)

In s/(alpha|beta)-([\d\.]+)/$2~$1/ statement, each group delimited by brackets can be represented by $<number>. So, '(alpha|beta) = $1' and '([\d\.]+) = $2'. Using $1 and $2, we can invert the order, putting a tilde between the groups. Try to understand the second part of the line, that is, s/([\d\.]+)-(alpha|beta)/$1~$2/. This part will act over 0.2-beta. The final result is:

$ uscan
-- Scanning for watchfiles in .
-- Found watchfile in ./debian
-- In debian/watch, processing watchfile line:
 opts=uversionmangle=s/(alpha|beta)-([\d\.]+)/$2~$1/;s/([\d\.]+)-(alpha|beta)/$1~$2/ http://eriberto.pro.br/files/myprogram2 myprogram2-(.+)\.tar\.(?:bz2|gz|xz)
-- Found the following matching hrefs:
 myprogram2-0.1.tar.gz (0.1)
 myprogram2-0.1.tar.gz (0.1)
 myprogram2-0.2-beta.tar.gz (0.2~beta)
 myprogram2-0.2-beta.tar.gz (0.2~beta)
 myprogram2-0.2.tar.gz (0.2)
 myprogram2-0.2.tar.gz (0.2)
 myprogram2-alpha-0.1.tar.gz (0.1~alpha)
 myprogram2-alpha-0.1.tar.gz (0.1~alpha)
 myprogram2-beta-0.1.tar.gz (0.1~beta)
 myprogram2-beta-0.1.tar.gz (0.1~beta)
Newest version on remote site is 0.2, local version is 0.1
 => Newer version available from
 http://eriberto.pro.br/files/myprogram2/myprogram2-0.2.tar.gz
-- Scan finished

Using fake packages to provide a useful debian/watch

Fake watches can be used to avoid a false impression that you ignored the watch file by laziness and to inform an actual upstream status. This is not a Debian original resource; it was my own creation. I created three fake packages. These packages say if there no upstream site, if there no release in upstream site or if the upstream site there a package but doesn't allow track it (using a JavaScript to block it, for example).

Fake watches are very easy to use. You can see how to use my fake watches here. There are some comments here.

That's all. Enjoy!

---

Locations of visitors to this page

Tags:, , , , , , , , , , , , , , , , , , , , , , ,

 
1

Refining the lintian on Debian

Posted by Eriberto on maio 9, 2013 in Debian, Linux, Sistema Operacional

Lintian is a system that checks the Debian Policy when debhelper is building a package in Debian.

Lintian has several verification levels. By default, some are used. However, you can refine it via config file. It's a common error to use the default setting and submit packages with hidden problems to mentors.

To activate all checks in lintian, edit the /etc/lintianrc and enable the following lines:

display-info = yes
pedantic = yes
display-experimental = yes

Be happy with lintian and mentors now!!!

Shortcut to this post: http://bit.ly/lintian

 

Tags:, , , , , , , , , , , , , , , , , , ,

 
3

Guia dobrável do tcpdump e WinDump

Posted by Eriberto on mar 20, 2013 in Debian, Internet, IPv6, Linux, Rede

Há alguns dias eu fiz um guia dobrável sobre o tcpdump, que também serve para o WinDump. Ele possui seis páginas e é uma referência para iniciantes e para profissionais.

O guia está disponível em http://eriberto.pro.br/files/guia_tcpdump.pdf.

Espero que seja útil.

[]s!

Tags:, , , , , , , , , , , , , , , , , , ,

 
2

Kernels Linux 3.4.35 e 3.8.3 para Debian Wheezy

Posted by Eriberto on mar 19, 2013 in Debian, Kernel, Linux, Sistema Operacional

Pessoal,

Como estou escrevendo o livro de análise de tráfego, tive que compilar kernels mais atuais para fazer algumas experiências. Então, disponibilizei os .deb de tais kernels. São o 3.4.35 e o 3.8.3. Foram compilados para Debian Wheezy (Debian 7) e funcionam perfeitamente.

Por favor, quem for usar, leia o README antes, pois há riscos.

Os kernels estão nesses endereços:

http://eriberto.pro.br/files/linux-3.4.35/

http://eriberto.pro.br/files/linux-3.8.3/

[]s a todos!

Eriberto

Tags:, , , , , , , ,

 
1

LibreOffice + degradê + PDF = arquivo gigante!

Posted by Eriberto on nov 22, 2012 in Eventos e palestras, Programas, Vida e Curiosidades

Há tempos (anos) eu ficava intrigado com algumas palestras minhas que, quando salvas em PDF, ficavam enormes. Era o caso típico da pelestra sobre análise de tráfego. Em ODP ela tinha 900 KB. Quando salva em PDF, ficava com 21 MB. Um aumento absurdo!

Na semana passada, indo para Santarém/PA para palestrar no FASOL 2012, durante o voo, terminei de atualizar as minhas palestras e resolvi investigar o problema. Fui deletando slides, mexendo aqui e ali, até que cheguei na causa. Por incrível que pareça, um simples par de linhas em degradê no slide mestre provocava isso. Ao retirá-las, tudo ficava ok. Veja como era padrão dos slides:

Observe que há duas linhas em degradê: uma abaixo do título da palestra e outra acima do meu nome. Essas linhas estavam no documento mestre. O PDF final gerado foi de 21 MB. Como solução, substituí o degradê por cores sólidas. Veja:

É lógico que não ficou a mesma coisa. Mas o tamanho do PDF caiu de 21 MB para 1.2 MB. Quase 20 MB a menos!!!

Depois fiz outros testes com outros degradês em outras palestras e o resultado foi o mesmo. Agora, um último teste. Só usarei o Writer. O teste foi o seguinte (arquivo disponível aqui):

Final da história: o ODT ficou com 11 KB e o PDF com 116 KB. Assim sendo, passe a observar esse tipo de efeito, inclusive nos outros aplicativos da suíte LibreOffice.

[]s

Tags:, , , , , , , , ,

 
3

Algumas coisas não funcionam na USB? Eis a solução.

Posted by Eriberto on set 28, 2012 in Hardware, Vida e Curiosidades

Muitas vezes temos acessórios que não funcionam nas portas USB de um computador mas funcionam em outros etc. O problema se agrava quando utilizamos HUBs USB. Acho que todos já passaram por isso.

O referido problema é causado pela quantidade de corrente (vulgarmente conhecido como "amperagem") que as portas possuem. Essa corrente varia de computador para computador. Digamos que você tenha uma saída USB, na placa mãe, com 350mA e que essa porta tenha 3 conectores USB. Digamos que você conecte dois dispositivos que precisem de 200mA cada. O resultado é previsível: não vão funcionar juntos. Ou pior: digamos que a sua placa seja ruim e só forneça 200mA e você precise de 250 para um determinado dispositivo. Novamente não irá funcionar.

Há algumas soluções para isso, como cabo em Y, que usa a potência de duas portas USB.

Eu testei, com sucesso, um HUB com alimentação externa. Excelente. Um dos meus teclados preferidos não funcionava em quase nenhum PC (casa e trabalho) e, agora, estou digitando com ele. Veja a foto: Esse da foto pode ser adquirido no Mercado Livre, eBay, DealExtreme etc. No DealExtreme custa US$ 8.53. A fonte de energia tem 1A mas, se for o caso, acredito que você possa trocar por uma mais potente. Mas 1A, se comparado aos tradicionais 350 ou 450mA das placas atuais...

Os links são os seguintes:

http://dx.com/p/high-speed-7-port-usb-2-0-hub-with-vertical-stand-black-110-240v-ac-adapter-42750?item=111

http://dx.com/p/high-speed-7-port-usb-2-0-hub-with-vertical-stand-silver-110-240v-ac-adapter-42749?item=112

Uma outra solução, que eu não testei ainda, pode ser encontrada no eBay pela busca "usb power booster". Um pequeno amplificador que promete elevar uma saída USB de 500mA para 2A. Veja a foto:

Espero que este post seja útil para quem precisar.

Tags:, , , , , , , , , , , , , , , ,

 
4

Utilizando o minicom para configurar switches HP

Posted by Eriberto on set 20, 2012 in Debian, Hardware, Linux, Rede

Recentemente, aqui no meu trabalho, adquirimos dois switches de camada 3 da HP (que comprou a 3Com em 2010). Ou seja: trata-se de um switch de excelente nível. No caso, o modelo escolhido foi o HP V1910-24G (JE00A), que pode ser visto na foto.

A configuração inicial do switch deve ser feita por porta serial e, para isso, escolhi o programa minicom. Eu usava esse programa no Linux na década de 90 para conectar a Internet.

O objetivo deste post é ensinar como se utiliza o minicom para uma tarefa desse tipo.

Inicialmente, instale o minicom:

# apt-get install minicom

A seguir, descubra qual é a sua porta serial:

root@libra:~# dmesg | grep -i tty
[    0.000000] console [tty0] enabled
[    0.953206] serial8250: ttyS0 at I/O 0x3f8 (irq = 4) is a 16550A
[    1.198559] 00:08: ttyS0 at I/O 0x3f8 (irq = 4) is a 16550A
[    1.294329] 0000:00:16.3: ttyS1 at I/O 0x4100 (irq = 17) is a 16550A

 

 

No meu caso, eu conto com as seriais ttyS0 e ttyS1. É interessante sempre tentar a primeira. Assim, usaremos ttyS0. No próprio switch, acima da porta, estão as suas especificações, como podemos ver na figura. Por padrão, o minicom utiliza a porta /dev/modem, a 115200 Bps, com 8 bits de dados, stop bits 1 e sem controle de fluxo por software (8, 1, N). Então, precisamos iniciar o minicom alterando a porta e a velocidade. Para isso, utilize o comando:

# minicom -D /dev/ttyS0 -b 38400

Uma vez dentro do minicom, pressione Ctrl a e, depois, o. Selecione Modem e discagem. Surgirá uma janela com com diversos parâmetros, como pode ser visto na figura a seguir:

Observe que o primeiro campo, String de inicialização, está vazio. Então, para estabelecer uma string automaticamente, pressione a. Em seguida, pressione ENTER duas vezes para retornar ao menu de Configuração. Escolha Sair.

Na tela principal do minicom, para realizar a conexão, pressione Ctrl a e m. Utilize admin como username pressione ENTER para deixar a senha em branco (esse é o padrão inicial do HP). Bem vindo! Caso precise sair do minicom, utilize Ctrl a e x.

Alternativamente, você pode iniciar o minicom no modo setup e gravar, de forma permanente, todas as configurações. Para isso, utilize o comando:

# minicom -s

 

Tags:, , , , , , , ,

 
51

Descobrindo o Linux 3ª edição: uma explanação sobre o preço do livro

Posted by Eriberto on jul 11, 2012 in Linux, Sistema Operacional, Vida e Curiosidades

Na sexta-feira, dia 06 de julho de 2012, foi lançada a 3ª edição do livro Descobrindo o Linux (vou chamar de DL3 ou DL em alguns trechos). E logo foi postado no site da Novatec um comentário em http://www.novatec.com.br/livros/linux3, enaltecendo a obra mas criticando o preço do livro.

E aproveitando então esta oportunidade, escrevo este post com o objetivo de mostrar que o preço praticado pela editora é compatível, por todo o trabalho de revisão e ampliação feito para esta 3ª edição, e também por conhecer a seriedade da equipe que trabalha por lá.

Vocês realmente não imaginam como a Novatec é séria, ao ponto de não aceitar qualquer obra e de sempre ser transparente com os seus autores e leitores. Por favor, vejam que o objetivo não é desmerecer o leitor, mas sim aproveitar a oportunidade para esclarecer a todos como o Descobrindo o Linux foi feito e qual foi o seu custo real.

O primeiro ponto a ressaltar é o de que não daria para distribuir somente as atualizações em relação à 2ª edição. Quem acompanhou o desenrolar do meu trabalho via blog, wiki e twitter sabe que o livro foi, antes de tudo, 100% revisado. Literalmente, não teve uma página sequer que não tenha sofrido alteração. E a explicação disso é muito simples: além do grande acréscimo de informações, muito tempo se passou desde 2007 e, com isso, diversas informações se tornaram obsoletas, necessitando de atualização. Ainda, surgiram 13 capítulos novos.

O custo de um livro no Brasil é imenso e, além disso, a Novatec não possui uma gráfica própria. Mas ela possui funcionários que realizam toda a editoração do livro. O DL3, por exemplo, foi trabalhado por cerca de 90 horas (3 semanas) dentro da editora. Vários aspectos foram verificados e o contato com o autor foi intenso. Eu trouxe para mim a responsabilidade de fazer o índice que fica no fim do livro. Só para terem uma ideia (muitos acompanharam ao vivo) isso levou cerca de 25 horas. Um simples índice! Mas são quase 1000 páginas e o leitor tem que encontrar o que procura. Se a Novatec tivesse feito o índice, levaria mais horas ainda e ele não seria tão preciso, uma vez que o autor conhece o conteúdo bem melhor e tem mais condições de apontar o que é importante ou não. Mas ainda falando de custo, temos papel, gráfica, transporte, marketing, impostos e contas como energia elétrica, salários e IPTU da editora. No fim, o autor e a editora recebem, cada um, cerca de 10% do valor de venda de cada livro. Não é muito para mim, uma vez que trabalhei por 3 anos, nas minhas férias e fora delas (isso mesmo, nem viajei!), e até fiquei doente por causa do livro. Ninguém escreve 928 páginas com perfeição, com mil verificações, de graça. Pensem nisso. Precisa valer a pena abandonar a família e a vida para se dedicar a algo que será útil para uma nação. Será que 10% por livro paga isso??? Você faria??? Bem, também entra o amor pelo o que fazemos.

A primeira edição do Descobrindo o Linux custou R$ 79,00. Ela tinha 420 páginas. A segunda edição, com 544 páginas, custou R$ 81,00. O Rubens Prates, editor da Novatec, optou por não subir muito o preço do livro, que já era bem aceito pelo mercado, para não prejudicar os leitores. Assim, ele teve um lucro bem reduzido em cima de algo que já estava consagrado. Agora, a terceira edição tem 928 páginas e custa R$ 129,00. Se fizermos uma regra de três, concluiremos que deveria custar R$ 175,00 em relação à primeira edição ou R$ 138,00 em relação à segunda. Mas, até por ser um livro universitário, a Novatec novamente optou por um lucro reduzido. Notem que ela já está bem abaixo dos 10% de lucro por exemplar.

Por fim, vamos analisar o valor de alguns livros consagrados, de informática ou não, caso tivessem 928 páginas. Veja isso na tabela a seguir. Alguns foram indicados como mais vendidos nesta semana no site da Saraiva. Foi considerado o preço de tabela.

Agora veja alguns bons livros vendidos na Amazon. Considerando o dólar hoje como R$ 2,00, o DL3 custaria US$ 64,50. Observe a tabela a seguir.

Conclusão: livro, principalmente no Brasil, é caro. Dá para dizer que a Novatec está praticando um preço alto??? Mesmo assim, ainda foi oferecido um desconto de 20% na pré-venda que foi amplamente divulgado.

Por fim, cabe ressaltar, novamente, que a 3ª edição do livro não é idêntica à anterior. É praticamente um livro novo, totalmente retrabalhado, o que inabilita a 2ª edição. Em virtude disso, a mesma nem chegou a ser reimpressa, o que levou à falta do livro no mercado por quase 3 anos. A 3ª edição não é uma cópia da 2ª, mas sim um amplo esforço de atualização e aumento de conteúdo.

Espero ter esclarecido a situação.

Boa leitura a todos!

 

Obs: este assunto, naturalmente, teria sido publicado no meu Blog Casual. No entanto, acho que este Blog Técnico tem um maior alcance em relação ao pessoal técnico.

Tags:, , , , , , , ,

Copyright © 2017 Eriberto Blog All rights reserved.
desk-mess-mirrored v theme from BuyNowShop.com.