Kinaconの技術ブログ

Ubuntuはじめました。

ubuntuでgoogle chomeのインストール

google chomeのインストール

コマンド

忘れてしまうので防備録。

echo 'deb [arch=amd64] http://dl.google.com/linux/chrome/deb/ stable main' | sudo tee /etc/apt/sources.list.d/google-chrome.list
curl https://dl-ssl.google.com/linux/linux_signing_key.pub | sudo apt-key add -
sudo apt update
sudo apt install google-chrome-stable

以上。

Nvidia-docker エラーがでた

Nvidia-docker エラーがでた

エラー

apt update を実行したら以下のエラーが出た。

W: An error occurred during the signature verification. The repository is not updated and the previous index files will be used. GPG error: https://nvidia.github.io/libnvidia-container/ubuntu18.04/amd64  InRelease: The following signatures couldn't be verified because the public key is not available: NO_PUBKEY 6ED91CA3AC1160CD
W: An error occurred during the signature verification. The repository is not updated and the previous index files will be used. GPG error: https://nvidia.github.io/nvidia-container-runtime/ubuntu18.04/amd64  InRelease: The following signatures couldn't be verified because the public key is not available: NO_PUBKEY 6ED91CA3AC1160CD
W: An error occurred during the signature verification. The repository is not updated and the previous index files will be used. GPG error: https://nvidia.github.io/nvidia-docker/ubuntu18.04/amd64  InRelease: The following signatures couldn't be verified because the public key is not available: NO_PUBKEY 6ED91CA3AC1160CD
W: Failed to fetch https://nvidia.github.io/libnvidia-container/ubuntu18.04/amd64/InRelease  The following signatures couldn't be verified because the public key is not available: NO_PUBKEY 6ED91CA3AC1160CD
W: Failed to fetch https://nvidia.github.io/nvidia-container-runtime/ubuntu18.04/amd64/InRelease  The following signatures couldn't be verified because the public key is not available: NO_PUBKEY 6ED91CA3AC1160CD
W: Failed to fetch https://nvidia.github.io/nvidia-docker/ubuntu18.04/amd64/InRelease  The following signatures couldn't be verified because the public key is not available: NO_PUBKEY 6ED91CA3AC1160CD
W: Some index files failed to download. They have been ignored, or old ones used instead.

対策

gpgkeyの更新で解決できた。

curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | \
  sudo apt-key add -

以上。

ROSのチュートリアルをdockerで実行する

ROSのチュートリアルをdockerで実行する

1. dockerで環境構築

  • Docker version 19.03.1
docker pull ros:melodic
docker run -it --rm ros:melodic


2. work spaceの作成

  • 参考

ja/catkin/Tutorials/create_a_workspace - ROS Wiki


mkdir -p catkin_ws/src
cd catkin_ws/src/
catkin_init_workspace
cd ..
catkin_make
source devel/setup.bash
echo $ROS_PACKAGE_PATH
>> /catkin_ws/src:/opt/ros/melodic/share


3. ROS packageの作成

  • 参考

ROS/Tutorials/CreatingPackage - ROS Wiki


cd /catkin_ws/src/
catkin_create_pkg beginner_tutorials std_msgs rospy roscpp
cd ..
catkin_make
source devel/setup.bash
roscd beginner_tutorials
mkdir scripts
cd scripts

# install curl
apt update
apt install curl

# download taker.py
curl -L -O https://raw.github.com/ros/ros_tutorials/kinetic-devel/rospy_tutorials/001_talker_listener/talker.py
chmod +x talker.py

# download listener.py
curl -L -O https://raw.github.com/ros/ros_tutorials/kinetic-devel/rospy_tutorials/001_talker_listener/listener.py
chmod +x listener.py

roscd
source setup.bash


4. コンテナーをイメージ化

# ctrl+p ctrl+qで抜ける

# cotainer IDを確認する
docker container ls
# 作成したcontainerをcommitする
docker commit <ID> ros/tutorial
# コミット済みcontainerを停止する
docker stop <ID>


5. docker networkの作成

  • 参考

qiita.com


docker network create rosnet


6. 実行

各ターミナルごとにコマンド実行する

docker run -it --rm \
--net=rosnet \
--name master \
ros/tutorial \
roscore
docker run -it --rm \
--net=rosnet \
--env ROS_HOSTNAME=talker \
--env ROS_MASTER_URI=http://master:11311 \
--name talker \
ros/tutorial \
/bin/bash -c "source /catkin_ws/devel/setup.bash; rosrun beginner_tutorials talker.py"
docker run -it --rm \
--net=rosnet \
--env ROS_HOSTNAME=listener \
--env ROS_MASTER_URI=http://master:11311 \
--name listener \
ros/tutorial \
/bin/bash -c "source /catkin_ws/devel/setup.bash; rosrun beginner_tutorials listener.py"


7. docker-composeによる一括立ち上げ

  • 参考

ros | Docker Documentation


同一PC内での立ち上げであればdocker-composeが楽。


docker-composeのインストール

  • 参考

Docker Compose のインストール — Docker-docs-ja 17.06.Beta ドキュメント


# rootで実行
sudo -i

curl -L https://github.com/docker/compose/releases/download/1.6.2/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose

chmod +x /usr/local/bin/docker-compose
exit

# 確認
docker-compose --version
> docker-compose version 1.6.2, build 4d72027


docker-compose.ymlの作成

mkdir ros-tutorial
cd ros-tutorial
sudo gedit docker-compose.yml


  • docker-compose.yml
version: '2'
services:
  master:
    image: ros/tutorial
    container_name: master
    command:
      - roscore
  
  talker:
    image: ros/tutorial
    container_name: talker
    environment:
      - "ROS_HOSTNAME=talker"
      - "ROS_MASTER_URI=http://master:11311"
    command: /bin/bash -c "source /catkin_ws/devel/setup.bash; rosrun beginner_tutorials talker.py"
  
  listener:
    image: ros/tutorial
    container_name: listener
    environment:
      - "ROS_HOSTNAME=listener"
      - "ROS_MASTER_URI=http://master:11311"
    command: /bin/bash -c "source /catkin_ws/devel/setup.bash; rosrun beginner_tutorials listener.py"


実行

# 実行
docker-compose up -d

# 確認
docker-compose logs listener

# 停止とコンテナの削除
docker-compose down

以上。

Jetson nanoでNvidia container runtimeを使用する

これが来るのを待っていました。

github.com

JetPack 4.2.1にすればdockerコンテナーでGPUを使用できるようだ。


Jetpackのインストール

www.kinacon-blog.work

Nvidia container runtimeがインストールされているかを確認

sudo dpkg --get-selections | grep nvidia-container
libnvidia-container-tools           install
libnvidia-container0:arm64      install
nvidia-container-runtime            install
nvidia-container-runtime-hook   install


dockerのランタイムを確認する

sudo docker info | grep nvidia
Runtimes: nvidia runc


CUDA sampleを試す

# workdirを作成
mkdir -p run-cuda-sample/docker-build
cd run-cuda-sample/docker-build
cp -r /usr/local/cuda/samples .

# Dockerfileを作成
cat << EOF > Dockerfile
FROM nvcr.io/nvidia/l4t-base:r32.2

# run a simple N-body simulation using the CUDA nbody sample
RUN apt update && apt install -y --no-install-recommends \
        make \
        g++ \
 && rm -rf /var/lib/apt/lists/*

COPY ./samples /tmp/samples

WORKDIR /tmp/samples/5_Simulations/nbody

RUN make clean && make

CMD ["./nbody"]
EOF

# docker build
sudo docker build -t cuda/nbody-run .

# docker run
xhost +si:localuser:root
sudo docker run --runtime nvidia \
                --network host \
                -it --rm \
                -e DISPLAY=$DISPLAY \
                -v /tmp/.X11-unix/:/tmp/.X11-unix \
                cuda/nbody-run


ESCで終了できます。

f:id:m-oota-711:20190803102256p:plain

できました!! これで色々いじれます。

以上。

Jetson nanoでusb boot & swapfile

Jetson nanoを入手してやっとセットアップしました。

2019.08.02 JETPackを更新したので、記事も編集しました。

インストールしたJatPack

L4T 32.2 (JetPack 4.2.1)


microSDにOS書き込み

以下のサイトを参考にしました。

developer.nvidia.com

Ubuntuで作成したがEtcherでは
うまくいかなかったのでコマンドラインから作成した。

# SDカードのデバイス名の確認
dmesg | tail | awk '$3 == "sd" {print}'

# 以下のように61.9GBのSDカードを発見 デバイス名はsdc
#[ 4568.474656] sd 6:0:0:0: [sdc] 120946688 512-byte logical blocks: (61.9 GB/57.7 GiB)

# ダウンロードしたOSイメージ(zip)データをSDカードに書き込む
unzip -p ~/Downloads/jetson-nano-sd-r32.2-2019-07-16.zip | sudo dd of=/dev/sdc bs=1M status=progress


HDMIやマウスやキーボードをちゃんと接続して起動しないと
あとから接続しても認識しなかったのでちゃんと接続してから起動しよう。


USB(SSD)ドライブからブートする

以下のサイトを参考にしました。

www.jetsonhacks.com


git clone https://github.com/JetsonHacksNano/rootOnUSB
cd rootOnUSB/
./buildKernel.sh

# ! EXT4にフォーマットしたSSDを接続する

# mount pointを作成
sudo mkdir /mnt/ssd

# デバイス名を確認
lsblk

#sda            8:0    0    59G  0 disk
#└─sda1         8:1    0    59G  0 part

# マウントする
sudo mount -t ext4 -o defaults /dev/sda1 /mnt/ssd

# ラベル名をつける
sudo e2label /dev/sda1 NanoSSD64GB

# ラベル名を確認
sudo e2label /dev/sda1

./copyRootToUSB.sh  -v NanoSSD64GB

# ルートドライブを設定
cd /boot/extlinux/
sudo cp extlinux.conf extlinux.conf.orig
sudo gedit extlinux.conf

# 編集前
## LABEL primary
##       MENU LABEL primary kernel
##       LINUX /boot/Image
##       INITRD /boot/initrd
##       APPEND ${cbootargs} quiet

# 編集後
## LABEL primary
##       MENU LABEL primary kernel
##       LINUX /boot/Image
##       INITRD /boot/initrd
##       APPEND ${cbootargs} rootfstype=ext4 root=/dev/sda1 rw rootwait
##
## LABEL sdcard
##       MENU LABEL primary kernel
##       LINUX /boot/Image
##       INITRD /boot/initrd
##       APPEND ${cbootargs} rootfstype=ext4 root=/dev/mmcblk0p1 rw rootwait

# 再起動
sudo reboot

# ルートドライブを確認
df

## Filesystem     1K-blocks     Used          Available   Use% Mounted on
## /dev/sda1       60630892     16112052  41409260  29%   /
## none               1780892       0               1780892     0%    /dev
## tmpfs              2025464       4               2025460     1%    /dev/shm
## tmpfs              2025464       20120       2005344     1%    /run
## tmpfs              5120             4               5116           1%    /run/lock
## tmpfs              2025464       0               2025464     0%    /sys/fs/cgroup
## tmpfs              405092         12             405080       1%    /run/user/120
## tmpfs              405092         116           404976       1%    /run/user/1000
## /dev/mmcblk0p1 119808192 16101980  98690652  15% /media/kinacon/d0a54240-9799-4f63-a90b-1a3f5ca4eda8

途中でエラー発生

OS書き込み完了したもの(updateしていない状態)を使用しないと
./buildKernel.shで躓くっぽい。


解決方法

以下をインストールすることでうまく行きました。

sudo apt install bzip2=1.0.6-8.1 libbz2-1.0=1.0.6-8.1


スワップファイルでメモリ領域不足を解消

SDカードだとスワップファイルで何度も読み書きされると故障しやすい。
でも、SSDならその可能性はぐっと下がる(SSDのほうが耐久性が高い)
消耗品なので気にしないならSDカードでもOKかとおもいます。


以下のサイトを参考にした。

www.jetsonhacks.com


/varにswapfileを作成して、自動でマウントするようにした。

# swapfileを作成
sudo fallocate -l 6G /var/swapfile
sudo chmod 600 /var/swapfile

# swapfileをスワップに割り当てる
sudo mkswap /var/swapfile
sudo swapon /var/swapfile

# 起動時にマウントさせる
sudo gedit /etc/fstab

# 以下を記入
#
# /var/swapfile swap swap defaults 0 0
#

# 確認
free -m


Swapに6Gがある。

              total        used        free      shared  buff/cache   available
Mem:           3964         600        2168          27        1194        3163
Swap:          6143           0        6143

以上。

docker imageの名前を変更(タグ付け)する

docker imageの名前を変更(タグ付け)する

IMAGE IDの確認

docker image ls


イメージを別名でコピー?する

# IMAGE IDは判別できるなら前方3桁でOK
# NEWNAME = IMAGE_NAME:TAG

docker tag [IMAGE ID] [NEW_NAME]


古いイメージ(rename前)を削除する

docker image rm [OLD_NAME]


以上。

ipynbファイルをpyファイルに変換する

ipynbファイルをpyファイルに変換する。

作業手順


1. jupyterをイントールする

pip3 install jupyter


2. .ipynbを.pyに変換する

jupyter nbconvert --to script filename.ipynb

同じディレクトリにfilename.pyが作成される

以上。

docker.ceのインストール

f:id:m-oota-711:20180824075049j:plain

モチベーション

  • DeepLeaningを学習するためにDocker上に環境を構築したい。
  • 仮想環境なので試して削除ができる。
  • 公開されている構築済みのイメージがあればより簡単に環境整備ができる


実行環境

Ubuntu18.04


dockerのインストール

以下のサイトを参考にインストール。
Get Docker CE for Ubuntu | Docker Documentation


古いバージョンのDockerをアンインストールする。

sudo apt remove docker docker-engine docker.io


リポジトリを設定する

sudo apt update
sudo apt install \
    apt-transport-https \
    ca-certificates \
    curl \
    software-properties-common
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
sudo apt-key fingerprint 0EBFCD88
sudo add-apt-repository \
   "deb [arch=amd64] https://download.docker.com/linux/ubuntu \
   $(lsb_release -cs) \
   stable"


Docker(docker-ce)の最新バージョンをインストール

sudo apt update
sudo apt install docker-ce


sudoなしで動作するようにする

#グループ一覧を確認してdockerがあるか調べる
cat /etc/group

#なければdockerグループを追加
sudo groupadd docker

#dockerグループにuserを追加
sudo gpasswd -a $USER docker

#dockerデーモンを再起動
sudo systemctl restart docker.service

#再起動
reboot


動作確認

docker run --rm hello-world


以上。