コンテンツへスキップ

NVIDIA Jetson Nano

VNCなどリモートからのグラフィカルログインに困っている方が、他にもいらっしゃるかなと思い、自分向けでもありますが、リモートデスクトップの利用方法、設定方法を残しておきます。

リモートデスクトップに必要なパッケージのインストール

xrdpとxfceをインストールします。

初期設定

xrdpとxfceの設定を行います。

/etc/xrdp/startwm.shファイルに以下の変更を行います。
ファイル下部の2行をコメントアウトし、「startxfce4」の1行を追加します。

リモートデスクトップ接続

Windowsパソコンより、リモートデスクトップクライアントより、NVIDIA Jetson Nanoにログインします。

created by Rinker
NVIDIA
¥14,486 (2021/04/18 13:15:30時点 Amazon調べ-詳細)

Ubuntu 18.04.5 LTS に ffmpeg を導入

Jetson Nano の Ubuntu にffmpegをインストールします。
FFmpeg(エフエフエムペグ)は、動画と音声を記録・変換・再生するための非常に優秀なフリーソフトウェアです。マルチプラットフォームで利用できます。
コマンドラインから使用することができる。対応コーデックが多く、多彩なオプションを使用可能であり、バッチ処理にも向いています。

ffmpeg利用

ffmpegは、非常に多くの機能とオプションが準備されております。
以下のコマンドで、ヘルプの全体を見ることが出来ます。

今回は、めざましじゃんけんシステムの、めざましじゃんけん時の画像を用いて、AIによる画像認識結果を動画化しました。
その際に利用したコマンドは、以下となってます。

サンプル動画

ちょうど、めざましテレビでHELLOチャレンジが実施されていたので、
AIでめざましじゃんけんにチャレンジっていう感じで、Official髭男dismの「HELLO」を動画に組み合わせました。

#ハローチャレンジ

撮影テーマは「〇〇にチャレンジしよう!」

アップグレード時の保留

apt upgradeを実行した際に、特定のパッケージのアップグレードが保留されることがあります。

以下が、実行例となります。

パッケージは保留されますとなった際の対処方法

対象パッケージをaptコマンドを用いて、installオプションを用いて、apt installを実行します。
apt installを実行ごは、正常にapt upgaradeコマンドは終了するようになります。(以下のパッケージは保留されます。の表示が消えます。)

Intel NUCを久々に確認したら、第10世代CPUのNUCも出そろってますね。

PythonのMySQLdbモジュール導入

PythonよりSQLを利用する際に、mysqlclinet ( MySQLdb ) モジュールを利用しています。
インストールされていないと、import MySQLdb時に、以下のエラーメッセージが出力されます。

pipコマンドで導入出来れば何も問題ないのですが、pip3でインストールしようとしたら、インストールに失敗しました。失敗時の出力は以下です。

mysqlclinetの Pipインストール時エラーの対策

libmysqlclinet-devがインストールされていると、mysqlclinetのインストールが成功するようです。

aptコマンドを用いて、libmysqlclinet-devを導入し、mysqlclinetをpip3コマンドで導入します。

created by Rinker
NVIDIA
¥14,486 (2021/04/18 13:15:30時点 Amazon調べ-詳細)

UbuntuにSambaサーバーを導入

Windows側の進化もあり、Sambaを導入した際に、作成したファイルのアクセス権や、ファイル作成時の作成ユーザーなど、意図する動作が実行されないケースがありました。
各種サイトなどを参考に、構築した際の設定値などのメモを残します。
詳しい、説明は別サイトを参照ください。

Samba をインストール

導入しているパッケージを最新化し、sambaのインストールを行います。

Sambaの設定ファイル(/etc/samba/smb.conf)を編集

smb.confの編集を行います。

以下、編集項目一覧

  • グローバルセッションに、文字コードの設定を追加
    [global]
    unix charset = UTF-8
    dos charset = CP932
  • NTドメイン、Windowsのワークグループを設定(環境に合わせて)
    workgroup = WORKGROUP
  • アクセス可能なネットワークセグメントを設定
    interfaces = 127.0.0.0/8 192.168.0.0/24 eth0
  • 最終行に共有フォルダを指定し、アクセス権類を設定

Samba向けユーザー作成

Sambaサービス再起動と自動起動を設定

created by Rinker
NVIDIA
¥14,486 (2021/04/18 13:15:30時点 Amazon調べ-詳細)

JenkinsのDockerイメージを再構築

JenkinsのポータルにJenkinsの新しいバージョンの通知が表示されます。
Dockerで導入したJenkinsコンテナにでは、Dockerイメージを再構築し、永続的なアップデートが必要となります。

Docker環境にJenkinsを導入した際の投稿:

「image: jenkins:latest」を利用した場合に、初期設定のプラグインインストールに失敗したので、「image: jenkins/jenkins:lts」を利用しました。

docker-composeの内容

JenkinsのDockerイメージを再構築

  1. docker-compose動作しているDockerコンテナのシャットダウン
  2. docker-compose でイメージをビルド
  3. コンテナをバックグランドで起動

以上で、最新のltsイメージに更新されます。コンテナ便利ですね。

jenkins_homeは永続化ボリュームとして構築しているので、Jenkinsのプラグインの更新は、ポータルサイト(WEB管理画面)より通常通り実施します。

NVIDIA Jetson Nanoからのメール送信

NVIDIA Jetson Nanoの利用を開始すると、Jetson Nanoの各種プログラムからメール通知を利用したくなるケースがあります。
既に、同一環境内にSMTPサーバが導入済みである場合を全体として、Jetson NanoにSSMTPを導入し、Jetson Nanoからメール送信が出来るように設定します。
パッケージのアップデートやログのローテーション処理時のエラーなどもメール通知することが可能です。

以前の関連記事: Jetson Nano で SSMTP を利用してPHPからメール送信

ssmtpインストールおよび設定

ssmtpをインストールします。

ssmtp.confを編集。

  • mailhub=@@mail_server@@
    環境内のメールサーバを指定
  • rewriteDomain=miki-ie.com
    ドメイン名を指定
  • hostname=jetson01.miki-ie.com
    ホスト名を指定
  • FromLineOverride=YES
    メール送信元より、メールのFromを指定出来るように設定

created by Rinker
NVIDIA
¥14,486 (2021/04/18 13:15:30時点 Amazon調べ-詳細)

NVIDIA Jetson Nanoのセキュリティ対策

Ubuntuの自動アップデートを設定します。
再起動が必要な際は、指定した時間で再起動するように設定します。
自動アップデートの結果をメール送信するように設定します。

「unattended-upgrades」をインストールと有効化

「unattended-upgrades」をインストールします。

インストールした「unattended-upgrades」を有効化します。
以下のコマンドを実行し、表示される画面で<Yes>を選択します。

<Yes>を選択します。

 

「unattended-upgrades」設定

利用する設定ファイルは、以下の2つのファイルとなります。

  • /etc/apt/apt.conf.d/20auto-upgrades  : 自動アップデートとアップグレードを設定。
  • /etc/apt/apt.conf.d/50unattended-upgrades :詳細設定

「20auto-upgrades」設定

  • APT::Periodic::Update-Package-Lists "1";
    アップグレードの確認間隔
    Daily=1 / Every two days = 2 / Weekly = 7 / Every two weeks = 14 / Never = 0
  • APT::Periodic::Download-Upgradeable-Packages "1"
    セキュリティーアップデートがある場合の動作
    Download and install automatically = 1 / Download automatically = 1 / Display immediately = 0

「50unattended-upgrades」設定

以下の設定変更を加えました。

  • Unattended-Upgrade::Mail "aaa@bbbl.com";
    メール通知先の設定
  • Unattended-Upgrade::MailOnlyOnError "true";
    メール通知のタイミングをエラー発生時のみに変更
  • Unattended-Upgrade::Remove-Unused-Kernel-Packages "true";
    未使用となったカーネル関連パッケージの自動削除
  • Unattended-Upgrade::Remove-Unused-Dependencies "true";
    未使用となったパッケージの自動削除(apt-get autoremove)
  • Unattended-Upgrade::Automatic-Reboot "true";
    自動再起動が実施されるように設定(自動再起動ON)
  • Unattended-Upgrade::Automatic-Reboot-Time "02:00";
    再起動時の時間を指定

動作確認

以下のコマンドで、動作確認を実施しておきます。

created by Rinker
NVIDIA
¥14,486 (2021/04/18 13:15:30時点 Amazon調べ-詳細)

前提条件

JetsonにJenkins向けユーザー作成

別にセットアップされた、Jenkinsシステムより、NVIDIA Jetson Nanoを管理対象と資するために、Jetson NanoにJenkinsから操作する用のユーザーを作成します。

  1. Jetson Nanoに新規ユーザー作成
  2. Jenkins向けユーザーのsudoコマンド設定 パスワード
  3. Jenkins向けユーザーでのGitHubからのPull設定

1. Jenkins向けユーザーを作成

NVIDIA Jetson NanoにJenkinsユーザーを作成します。

2. Jenkins向けユーザーのSudoコマンド設定

Jenkinsユーザーで、各種スクリプトを実行するので、sudoが簡単に実行出来るように設定します。
※ 全体的にパスワードなしでのsudoを許可しているので、利用するコマンドごとの設定や、各種設定ファイルのアクセス権などを環境に合わせて設定し、セキュリティ対策を行って下さい。

作成するjenkinsファイルへの記載内容

3. Jenkins向けユーザーでのGitHubからのPull設定

Jenkinsを利用して、Githubに新しいソースコードがコミットされた際に、Githubより新規ソースコードの通知をトリガーとして、Jenkinsのタスクを実行させます。

Githubへの新規コミットをトリガーに、ジャンケンシステムを構成するメインのIntel NUC Ubuntuサーバー、Raspberry Pi、NVIDIA Jetson Nanoに最新のソースコードが自動的にデプロイ(Pull)される環境を構築しました。
デプロイ前に、簡単なテストなども自動化することが出来ます。

設定には、Jenkinsユーザー向けのSSHキーをNVIDIA Jetson Nanoで作成し、作成したSSHキーをGithubに登録します。GithubにSSHキーが登録出来たら、NVIDIA Jetson NanoからGithubへのアクセスを確認します。

Jetson NanoでSSHキー作成

Jenkinsユーザー向けのSSHキーを作成します。
このSSHキーをGithubに登録します。
Githubに登録することにより、Jenkinsユーザーを用いて、Githubの操作が可能になります。

GithubへSSHキーの登録と接続確認

https://github.com/settings/keys で id_rsa.pub の内容を登録します。

NVIDIA Jetson NanoからGithubへ接続確認

最後に、対象のサーバーより接続確認を行います。

created by Rinker
NVIDIA
¥14,486 (2021/04/18 13:15:30時点 Amazon調べ-詳細)

SU コマンドの有効化

セキュリティ対策ですが、利用したくなる「su -」コマンド、最近のUbuntsなどのLinux OSでは、初期設定時にrootのパスワードを設定しないので、suコマンドは利用できない状態となります。

以下が、suコマンドを実施して、失敗した際の例です。

SU コマンド有効化(rootユーザーのパスワード設定)

SUコマンドが利用できるように、rootユーザーのパスワードを設定します。
sudo su コマンドは利用できるので、自分のアカウントパスワードを用いて、rootユーザに切り替えを行います。

rootユーザーになり、パスワードコマンドでパスワードを設定します。
この状態で、suコマンドでのrootユーザーへの変更は可能となります。

動作確認のため、rootユーザーから抜けて、su -コマンドを実行し、パスワード入力後にrootユーザーに変更されることを確認します。