Após algumas pesquisas, descobri que a maioria dos pacotes fonte (pelo menos aqueles que usam autotools ou cmake) permitem instalar em um diretório diferente do PREFIX usado para compilação, você só precisa especificar o local desejado na variável de ambiente DESTDIR.
Acabei fazendo o seguinte:
firejail --x11=none --net=none --whitelist="$PWD" # Enter sandbox
./configure # (or similar)
make
DESTDIR=dest make install # install application into dest
exit # from firejail
pkgname="$(basename "$PWD")" # (or specify desired package name manually)
fakeroot tar czf "$pkgname.tgz" -C dest . # pack the installed files into a .tgz archive
fakeroot alien --version=$(date +%F) -k "$pkgname.tgz" # create a .deb package from the .tgz archive
Também é possível usar sudo alien -i
em vez de fakeroot alien
no último comando para instalar imediatamente o pacote também. Como alternativa, se você não quiser transformar o aplicativo em um pacote, poderá substituir a última linha (que chama alien
) por sudo tar xzf "$pkgname.tgz" -C /
para extrair o pacote como raiz.
Algumas coisas a serem observadas aqui:
- Em vez de simplesmente evitar a execução de comandos potencialmente prejudiciais como root, a compilação e instalação acontecem dentro de uma sandbox, que é ainda mais segura (mas completamente opcional).
- Eu abandonei
checkinstall
e useialien
, que é uma solução um pouco mais limpa e segura, pois não depende de hacks feios e não confiáveis para observar e reverter operações de arquivos.