コンテンツへスキップ

アップグレード時の保留

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
¥13,600 (2020/08/08 14:08:41時点 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
¥13,600 (2020/08/08 14:08:41時点 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
¥13,600 (2020/08/08 14:08:41時点 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
¥13,600 (2020/08/08 14:08:41時点 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
¥13,600 (2020/08/08 14:08:41時点 Amazon調べ-詳細)

SU コマンドの有効化

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

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

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

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

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

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

 

Jetson Nanoに Tensorflow-gpu、Keras などを導入

NVIDIA Jetsonへの各種ツールインストールは、NVIDAより公開されているOSイメージを利用することで、一通りのツールは導入済みとなります。
JETSON NANO DEVELOPER KIT(JetPack)と呼ばれています。

  • NVIDIA提供のtensorflow-gpu
  • Keras
  • その他ツール
created by Rinker
NVIDIA
¥13,600 (2020/08/08 14:08:41時点 Amazon調べ-詳細)

導入パッケージのアップデート

インストールパッケージを最新にアップデートします。

各種パッケージ導入

NVIDIAが提供する、JetPackを導入してください。
(NVIDIAが提供するイメージを用いたOSを導入して下さい)
以前は、OpenCVなどをコンパイルして導入しておりましたが、JetPack 4.3では、必要そうなツールは、事前に導入済みでした。

JetPack 4.3 components:

  • L4T R32.3.1 (K4.9)
  • Ubuntu 18.04 LTS aarch64
  • CUDA 10.0
  • cuDNN 7.6.3
  • TensorRT 6.0.1
  • VisionWorks 1.6
  • OpenCV 4.1 (4.1.1)
  • Nsight Systems 2019.6
  • Nsight Graphics 2019.5
  • Nsight Compute 2019.3
  • SDK Manager 1.0.0

TensorFlow-GPU導入

NVIDIAの開発者コミュニティに記載されている内容で、インストールを行います。

https://docs.nvidia.com/deeplearning/frameworks/install-tf-jetson-platform/index.html#install

  1. TensorFlow導入の前提ソフトウェアをインストールします。
  2. 導入済みのPip3コマンドを最新版に更新します。
  3. 前提となるPythonパッケージをPip3コマンドで導入します。
最後に、NVIDIAより公開されている媒体を用いて、tensorflow-gpuのインストールを実施します。

以下のパッケージ群が導入されます。

Successfully installed absl-py-0.9.0 astor-0.8.1 cachetools-4.1.0 google-auth-1.14.1 google-auth-oauthlib-0.4.1 google-pasta-0.2.0 grpcio-1.28.1 keras-preprocessing-1.1.0 markdown-3.2.1 oauthlib-3.1.0 opt-einsum-3.2.1 pyasn1-0.4.8 pyasn1-modules-0.2.8 requests-2.23.0 requests-oauthlib-1.3.0 rsa-4.0 scipy-1.4.1 six-1.14.0 tensorboard-2.1.1 tensorflow-2.1.0+nv20.4 tensorflow-estimator-2.1.0 termcolor-1.1.0 werkzeug-1.0.1 wrapt-1.12.1

keras導入

以下が、導入したTensorflowや、導入されているOpenCVのバージョン確認結果となります。
created by Rinker
NVIDIA
¥13,600 (2020/08/08 14:08:41時点 Amazon調べ-詳細)

Apache 2、PHP、DB関係モジュールを導入

apt installで必要なパッケージを導入します。

前提条件

JenkinsとGithubを連携

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

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

Jenkins向けユーザーを作成

Raspberry PiやNVIDIA JetsonにJenkinsユーザーを作成します。

Sudo設定

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

SSHキー作成

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

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

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

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

 

created by Rinker
NVIDIA
¥13,600 (2020/08/08 14:08:41時点 Amazon調べ-詳細)