Desde Raring (13.04), perf
é construído sem o script Python habilitado “para evitar uma dependência de compilação do Python”. Isso foi um choque desagradável para pessoas como eu que usaram perf
em 12.04 LTS e atualizaram para 14.04 LTS. Isto está documentado no debian-master/changelog
file no repositório git do kernel do Ubuntu.
Em suma, se o seu kernel é 3.8.0-6.11 ou posterior, você está - para usar a terminologia técnica precisa - "merda de sorte": você tem que construir seu próprio perf
.
Se você decidir fazer isso do modo Ubuntu, o que é realmente muito fácil, você pode procurar tutoriais com vários níveis de detalhes (por exemplo, aqui ou aqui ). Uma vez que você tenha alcançado o estágio no qual você clonou o kernel do Ubuntu git
repo apropriado para o seu release e tenha verificado a tag correspondente ao seu kernel atual (se seu kernel atual é 3.13.0-48-generic, a tag será algo como 3.13.0-48.80
, ou seja, com um número extra no final), você deve editar (wrt a raiz do git
repo) debian/rules.d/2-binary-arch.mk
e remover NO_LIBPYTHON=1
de um dos make
linhas de comando (é usado em \#ifdef
checks, portanto, alterá-lo para NO_LIBPYTHON=0
não funcionará). Esta cláusula aparece apenas uma vez, portanto basta procurá-la e retirá-la.
O pacote linux-tools-3.x.x-y
da distribuição contém o binário perf
real, que acaba em /usr/lib/linux-tools-3.x.x-y/perf
. Isso é construído com fakeroot debian/rules binary-arch
. Esta regra ( binary-arch
) leva muito tempo para ser construída (~ 25 minutos no meu laptop i7). Se eu tivesse prestado mais atenção, provavelmente poderia ter escolhido uma que não construísse cada variante e módulo do kernel. Sugestões bem-vindas.
Assumindo que você não fez nenhuma outra alteração, uma vez que isto termine, o pacote que você quer é linux-tools-3.13.0-48_3.13.0-48.80_amd64.deb
(modulo sua versão do kernel): este é aquele com o binário, ao invés de symlinks ou invólucros de shell.
Pode haver alguns outros linux-tools
pacotes, dependendo exatamente do que você criou, linux-tools-3.13.0-48-generic_3.13.0-48.80_amd64.deb
contém apenas links simbólicos e outras coisas (menos provável que sejam diferentes) e linux-tools-common_3.13.0-48.80_all.deb
contém apenas o genérico curto perf
de script wrapper que acaba em /usr/bin
; o último é construído com fakeroot debian/rules binary-indep
.
Você pode instalar seu novo perf
com capacidade para Python com
# sudo dpkg -i linux-tools-3.13.0-48_3.13.0-48.80_amd64.deb
Você pode instalar o máximo, ou tão pouco, do kernel, módulos do kernel, outros pacotes de ferramentas, etc., conforme você se sentir confortável. Em princípio, todos deveriam ser os mesmos. Acabei de instalar o pacote único e tudo parece funcionar OK: Eu tenho meu perf
em Python.
É claro que você terá que fazer muito disso novamente (de git pull
e checkout
da nova tag em diante) na próxima vez que houver uma atualização do kernel. Eu mesmo terei que manter isso em mente, então eu estava pensando em colocar o meu .debs em um PPA, mas parece que não há muito interesse (essa questão variou duas vezes em 3 meses).