1

Установщик Nvidia JetPack для TX2 должен запускаться на хост-компьютере Ubuntu с разрешением sudo. Оставляет остатки на хосте. при повторном запуске через некоторое время версия из остатка может конфликтовать с текущими обновленными версиями других пакетов из репо.

Чтобы решить эту проблему или обойти ее, может быть желательно запустить установщик JetPack в быстро создаваемом контейнере Docker. Как бы вы это сделали, шаг за шагом?

2 ответа2

1

Docker в первую очередь предназначен для запуска приложений. Но JetPack также сильно модифицирует систему. Поэтому, поэкспериментировав с этим некоторое время, я понял, что докер не подходит. LXD, полный контейнер среды Linux, гораздо лучше подходит для этой задачи. Я получил графический интерфейс, работающий в lxd - просто следуйте любым учебным пособиям для LXD или LXC GUI, и после того, как он заработает, вам дополнительно необходимо установить драйверы nvidia для графического интерфейса JetPack (по крайней мере, если вы используете драйверы Nvidia на хост-компьютере):

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!

И все будет работать быстро и плавно ... только потому, что я потратил слишком много времени на то, чтобы выяснить, как подключить USB-порт Jetson к LXD, и, наконец, я этого не понял. Но я думаю, это будет возможно, если вы знаете, как хорошо справляться с низкоуровневым ядром.

Решение

Во всяком случае, наконец, я понял, что я использую неправильные инструменты для этой задачи. Мне не нужен контейнер. Хост Jetson не будет тем, что я хочу запускать и уничтожать снова и снова (для этого хороши контейнеры). Все, что я хочу, это мобильность - чтобы я не был привязан к устареванию Ubuntu 16.04 на физическом хосте, но мог использовать более новое программное обеспечение. Старая добрая виртуальная машина (ВМ) намного проще, экономит мое время и нервы - и подходит для этой цели. Итак (убедитесь, что Jetson подключен первым):

  1. Запустите команду lsusb в терминале хоста (если хостом является linux), чтобы проверить, появляется ли Jetson. Если нет, то что-то не так. Должна отображаться строка, подобная этой: Bus 001 Device 003: ID 0955:xxxx NVidia Corp.

  2. Установите VirtualBox, загрузите Ubuntu 16.04 .iso с сайта ubuntu.com и установите его на новый компьютер VirtualBox.

  3. Установите пакет расширений VirtualBox с VirtualBox.org (необходим для подключения USB-устройств). NB! Вам нужно скачать ту же версию, что и ваш VirtualBox. Дважды щелкните установщик, и VirtualBox установит его
  4. Добавьте вашего пользователя в HOST (не VM) в группу vboxusers (по крайней мере, в Linux):

    sudo usermod -aG vboxusers $USER

  5. Перезапустите (или, возможно, выйдите из системы), чтобы добавление группы вступило в силу.

  6. Включите поддержку USB 2.0 через Настройки-> USB (или, возможно, поддержку USB 3.0 - я не пробовал, у меня работал USB 2.0)
  7. Перезагрузите ВМ
  8. Подключите Jetson от устройств - USB
  9. Запустите команду lsusb в терминале VM, чтобы проверить, появляется ли устройство NVidia (Jetson). Если нет, то что-то не так. Должна отображаться строка, подобная этой: Bus 001 Device 003: ID 0955:xxxx NVidia Corp.
  10. Запустите JetPack от ВМ

Возможно, это решение не для всех, но если ваша цель просто не была связана с использованием Ubuntu 16.04 в качестве основной операционной системы, виртуальная машина - это путь. Гораздо проще, чем возиться с контейнерами.

0

Вот только частичный ответ. Ограничение состоит в том, что он не включает в себя часть для прошивки ОС, драйверов и файловой системы.

После того, как базовая ОС и файловая система были прошиты и установлены на целевой модуль TX2, доступ к TX2 можно получить через сетевой порт через ssh. Таким образом, хосту Ubuntu нужно только: получить графический интерфейс с возможностью sudo и доступ к сети. По умолчанию у док-контейнера есть возможность подключиться к сети, к которой может подключиться хост. Чтобы получить графический интерфейс, есть несколько подходов. Ниже представлен подход X-over-ssh с помощью двух скриптов. Скрипт включает в себя операции по добавлению текущего пользователя в группу sudo.

Запустите первый сценарий, чтобы создать образ докера Ubuntu, настроенный для запуска установщика JetPack 3.1. Затем запустите второй сценарий, чтобы создать докер-контейнер со статическим именем пользователя и паролем, и смонтировали учетную запись хоста в качестве домашней страницы гостя пользователя контейнера.

Первый скрипт для создания образа докера:

# 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 .

Последнее CMD обычно может быть заменено этими двумя, если не запущена служба sshd :

USER \$UNAME
CMD /bin/bash

Второй скрипт для создания контейнера:

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

Чтобы получить доступ к гостевому контейнеру Ubuntu, запустите на хосте, используя screencast пароля:

ssh -l testuser -p 2022 -X localhost

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .