Avvia JetPack TX2 Installer in un Docker Container su X su ssh


1

Il programma di installazione Nvidia JetPack per TX2 deve essere eseguito su un computer host di Ubuntu con autorizzazione sudo. Lascia residui sull'host. quando si esegue nuovamente un periodo di tempo successivo, la versione del residuo potrebbe entrare in conflitto con le versioni aggiornate aggiornate di altri pacchetti dal repository.

Per risolvere o aggirare questo problema, potrebbe essere opportuno eseguire il programma di installazione JetPack in un contenitore di finestra mobile creato rapidamente. Come lo faresti, passo dopo passo?


Aggiunto 'su X su ssh' al titolo.
minghua

Risposte:


1

Docker è principalmente rivolto alle applicazioni in esecuzione. Ma JetPack modifica anche pesantemente il sistema. Quindi, dopo aver giocato con esso per un po 'ho capito che la finestra mobile non è una buona partita. LXD, un contenitore di ambiente Linux completo è adatto molto meglio per l'attività. Ho ottenuto la GUI lavorando in lxd - basta seguire qualunque delle esercitazioni per LXD o LXC GUI e dopo il suo funzionamento è inoltre necessario installare i driver nvidia per la GUI JetPack per funzionare (almeno se si utilizzano i driver Nvidia sul computer 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 tutto funzionerà velocemente e senza intoppi ... solo che ho passato troppo tempo a capire come mappare la porta USB di Jetson su LXD e alla fine non l'ho capito. Ma immagino che dovrebbe essere possibile se sai come gestire bene le cose del kernel di basso livello.

La soluzione

Ad ogni modo, finalmente ho capito che sto usando strumenti sbagliati per il compito. Non ho bisogno di un contenitore. L'host Jetson non sarà qualcosa che voglio eseguire e distruggere tutto da capo (questo è ciò che i contenitori fanno bene). Tutto quello che voglio è la portabilità - che non sarei legato all'invecchiamento di Ubuntu 16.04 sull'host fisico, ma potrei usare un software più recente. Una buona vecchia macchina virtuale (VM) è molto più semplice, risparmia tempo e nervi - ed è adatta allo scopo. Quindi (assicurati che Jetson sia collegato per primo):

  1. Correre lsusb comando nel terminale host (se host è linux) per verificare se Jetson compare. In caso contrario, qualcosa non va. Dovrebbe mostrare una riga come questa: Bus 001 Device 003: ID 0955:xxxx NVidia Corp.

  2. Installa VirtualBox, scarica Ubuntu 16.04 .iso da ubuntu.com e installalo su una nuova macchina VirtualBox.

  3. Installa il pacchetto di estensione VirtualBox da VirtualBox.org (necessario per collegare dispositivi USB). NB! Devi scaricare la stessa versione di VirtualBox. Fare doppio clic sul programma di installazione e VirtualBox lo installerà
  4. Aggiungi il tuo utente su HOST (non VM) al gruppo vboxusers (almeno su Linux):

    sudo usermod -aG vboxusers $USER

  5. Riavvia (o eventualmente accedi off-on) per rendere effettivo il gruppo

  6. Abilita il supporto USB 2.0 da Impostazioni- & gt; USB (o possibilmente supporto USB 3.0 - Non ho provato, USB 2.0 ha funzionato per me)
  7. Riavvia la VM
  8. Collegare Jetson dai dispositivi - USB
  9. Correre lsusb comando nel terminale VM per verificare se il dispositivo NVidia (Jetson) si presenta. In caso contrario, qualcosa non va. Dovrebbe mostrare una riga come questa: Bus 001 Device 003: ID 0955:xxxx NVidia Corp.
  10. Esegui JetPack da VM

Potrebbe non essere una soluzione per tutti, ma se il tuo obiettivo non fosse legato all'utilizzo di Ubuntu 16.04 come sistema operativo principale, una macchina virtuale è la strada da percorrere. Molto più facile che scherzare con i contenitori.


In realtà ho fatto lo stesso, ma non ho potuto ottenere la porta USB mappata per funzionare correttamente e in modo affidabile. Di sicuro cercherò di provarlo in base alle tue istruzioni quando la prossima volta dovrò installare un nuovo kernel su un target. Giusto per chiarire, dopo il punto 10: [1] Sei in grado di far lampeggiare l'intero sistema incluso SO, driver e filesystem all'interno del guest vbox? [2] Dopo il sistema operativo, il driver e il filesystem, continua a installare correttamente tutti i pacchetti JetPack?
minghua

1
Ciao! Sì, ho fatto lampeggiare con successo il sistema operativo, il driver e il file system e poi ha continuato a installare tutti i pacchetti proprio come sull'host fisico. Il supporto USB 2.0 ha funzionato per me, ma alcuni post dicono che solo 3.0 hanno funzionato per loro, quindi vale la pena provare entrambi.
MF.OX

0

Qui è solo una risposta parziale. La limitazione è che non include la parte per lampeggiare il sistema operativo, i driver e il file system.

Dopo che il sistema operativo e il file system di base sono stati caricati e installati sul modulo TX2 di destinazione, è possibile accedere a TX2 tramite una porta di rete su ssh. Quindi l'host di Ubuntu ha solo bisogno di: Ottenere una GUI con capacità sudo e accesso alla rete. Per impostazione predefinita, un contenitore finestra mobile ha la possibilità di connettersi alla rete a cui l'host può connettersi. Per ottenere una GUI, ci sono alcuni approcci. Di seguito è riportato l'approccio X-over-ssh con l'aiuto di due script. Lo script include operazioni per aggiungere anche l'utente corrente al gruppo sudo.

Esegui il primo script per creare un'immagine docker Ubuntu personalizzata per l'esecuzione del programma di installazione di JetPack 3.1. Quindi eseguire il secondo script per creare un contenitore finestra mobile con nome utente e password statici e installare l'account utente host home nella home dell'utente del guest del contenitore.

Il primo script per creare un'immagine docker:

# current uid and gid
curr_uid=`id -u`
curr_gid=`id -g`

# create bb.dockerfile:
cat << EOF2 > bb.dockerfile
 FROM ubuntu:xenial-20180417
 ARG UNAME=testuser
 ARG UID=1000
 ARG GID=1000
 RUN groupadd -g \$GID \$UNAME
 RUN useradd -m -u \$UID -g \$GID -s /bin/bash \$UNAME

 RUN apt-get update
 RUN apt-get install -y openssh-server openssh-client iputils-ping sudo
 RUN apt-get install -y lsb-release libgtk2.0 xterm vim rsync sshpass
 RUN mkdir /var/run/sshd
 RUN echo 'testuser:screencast' | chpasswd
 RUN sed -i -e '/sudo/ s/$/testuser/' /etc/group

 ENV NOTVISIBLE "in users profile"
 RUN echo "export VISIBLE=now" >> /etc/profile

 EXPOSE 22
 CMD ["/usr/sbin/sshd", "-D"]
EOF2

docker build --build-arg UID=${curr_uid} --build-arg GID=${curr_gid} \
    -f bb.dockerfile -t testimg .

L'ultimo CMD di solito può essere sostituito da questi due se non si esegue a sshd servizio:

USER \$UNAME
CMD /bin/bash

Il secondo script per creare il contenitore:

docker run -it -d \
    -v /tmp/.X11-unix:/tmp/.X11-unix  \
    -v $HOME:/home/testuser \
    -p 2022:22 \
    --name testcontainer -P testimg

Per accedere al contenitore ospite di Ubuntu, esegui sull'host utilizzando la password screencast:

ssh -l testuser -p 2022 -X localhost

Una nota: gli script docker derivano da una domanda più semplice sullo stackoverflow Dockerfile replica l'utente host UID e GID all'immagine .
minghua
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.