O Docker é voltado principalmente para aplicativos em execução. Mas o JetPack também modifica strongmente o sistema. Assim, depois de brincar com ele por um tempo, eu entendi que o docker não é um bom jogo. O LXD, um contêiner de ambiente linux completo, é muito mais adequado para a tarefa. Eu tenho a GUI trabalhando em lxd - basta seguir qualquer dos tutoriais para LXD ou LXC GUI e depois que funciona você também precisa instalar drivers nvidia para o JetPack GUI para trabalhar (pelo menos se você usar drivers Nvidia na máquina host):
sudo add-apt-repository ppa:graphics-drivers/ppa
sudo apt-get update
sudo apt-get install nvidia-XXX # replace XXX with the same version your computer is running!
E você conseguirá que tudo corra rápido e sem problemas. Só que passei muito tempo tentando mapear a porta USB do Jetson para o LXD e finalmente não consegui descobrir. Mas eu acho que deveria ser possível se você souber como lidar bem com o kernel de baixo nível.
A solução
Enfim, finalmente entendi que estou usando ferramentas erradas para a tarefa. Eu não preciso de um contêiner. O host do Jetson não será algo que eu quero executar e destruir novamente (isto é bom para os contêineres). Tudo que eu quero é portabilidade - que eu não estaria preso ao envelhecimento do Ubuntu 16.04 no host físico, mas poderia usar um software mais novo. Uma boa e velha máquina virtual (VM) é muito mais fácil, economiza tempo e nervos - e é adequada para o propósito. Então (certifique-se de que o Jetson esteja conectado primeiro):
-
Execute o comando
lsusb
no terminal do host (se o host for linux) para verificar se o Jetson aparece. Se não, algo está errado. Deve mostrar uma linha como esta:Bus 001 Device 003: ID 0955:xxxx NVidia Corp.
-
Instale o VirtualBox, baixe o Ubuntu 16.04 .iso do ubuntu.com e instale-o em uma nova máquina VirtualBox.
- Instale o pacote de extensão VirtualBox do VirtualBox.org (necessário para conectar dispositivos USB). NB! Você precisa baixar a mesma versão que o seu VirtualBox é. Clique duas vezes no instalador e o VirtualBox irá instalá-lo
-
Adicione seu usuário no grupo HOST (não VM) ao vboxusers (pelo menos no Linux):
sudo usermod -aG vboxusers $USER
-
Reinicie (ou possivelmente efetue logoff) para que o grupo adicione para entrar em vigor
- Ativar suporte a USB 2.0 a partir de Configurações- > USB (ou possivelmente suporte a USB 3.0 - Eu não tentei, o USB 2.0 funcionou para mim)
- Reinicie a VM
- Anexar o Jetson a partir de dispositivos - USB
- Execute o comando
lsusb
no terminal da VM para verificar se o dispositivo da NVidia (Jetson) aparece. Se não, algo está errado. Deve mostrar uma linha como esta: %código% - Executar o JetPack a partir da VM
Pode não ser uma solução para todos, mas se o seu objetivo não estivesse ligado ao uso do Ubuntu 16.04 como seu principal sistema operacional, uma máquina virtual é um caminho a ser seguido. Muito mais fácil do que brincar com os contêineres.