Slide 1

Slide 1 text

RancherOS on Raspberry Pi 改 Cloud Native Sendai #02 令和元年/06/07 oda@sendai  

Slide 2

Slide 2 text

・RancherOS 1.5.2出た ・RaspberryPiにインストール ・コンテナで機械学習 出来ませんでした。 理由は後で。 やったこと

Slide 3

Slide 3 text

Raspberry Pi 3 Model B+ & SDカード(32GB)
 RancherOS 1.5.2
 Docker 18.06.3-ce(RancherOS内蔵)
 
 
 環境

Slide 4

Slide 4 text

Dockerを動作させることに特化した軽量なOSです。
 BaseはLinux。
 Dockerがインストール済みです。
 
 
 RancherOSの説明

Slide 5

Slide 5 text

下記のURLより、イメージをダウンロードします。
 
 https://github.com/rancher/os/releases/download/v1.5.2/rancheros-raspberry-pi6 4.zip
 
 RancherOSのインストール

Slide 6

Slide 6 text

rancheros-raspberry-pi64.zip を展開します。
 rancheros-raspberry-pi64.img をSDカードに書き込みます。
 
 
 
 RancherOSのインストール

Slide 7

Slide 7 text

SDカードを挿入し、Raspberry Pi を起動します。
 
 Raspberry Pi 起動

Slide 8

Slide 8 text

起動しました。
 
 
 ログインします。
 ユーザ名
 rancher
 
 パスワード
 rancher
 Raspberry Pi 起動

Slide 9

Slide 9 text


 
 
 バージョン確認 $ cat /etc/os-release 
 NAME="RancherOS" 
 VERSION=v1.5.2
 ID=rancheros
 ID_LIKE=
 VERSION_ID=v1.5.2
 PRETTY_NAME="RancherOS v1.5.2" 
 HOME_URL="http://rancher.com/rancher-os/" 
 SUPPORT_URL="https://forums.rancher.com/c/rancher-os" 
 BUG_REPORT_URL="https://github.com/rancher/os/issues" 
 BUILD_ID=
 
 $ docker -v
 Docker version 18.06.3-ce, build d7080c1 
 


Slide 10

Slide 10 text


 
 
 設定方法 設定ファイル
 $ sudo cat /var/lib/rancher/conf/cloud-config.yml 
 
 手動での設定変更
 $ sudo ros config set 
 
 現在の設定値の出力 
 $ sudo ros config export 
 


Slide 11

Slide 11 text

wifi は v1.5 から使用できます。設定後ssh接続が可能。
 
 公式
 https://rancher.com/docs/os/v1.x/en/installation/networking/interfaces/ 
 
 
 Wifi設定 $ sudo ros config set rancher.network.interfaces.wlan0.wifi_network network1 
 $ sudo ros config set rancher.network.wifi_networks.network1.ssid "SSIDを入れます" 
 $ sudo ros config set rancher.network.wifi_networks.network1.psk "パスワード or シェアードキー" 
 $ sudo ros config set rancher.network.wifi_networks.network1.scan_ssid 1 
 $ sudo system-docker restart network 
 
 ※「interfaces」「wifi_networks」など「s」をつけ忘れて、しばらく悩みました。 
 ※英語配列なので、「_」は「Shift」+「-」、「"」は「Shift」+「:」 
 
 $ ip a
 ※wlan0 にipが割り当てられているか確認します。 


Slide 12

Slide 12 text

imageを書き込んだだけでは、2GBしか使っていません。
 残りの領域も使えるようにします。
 
 公式
 https://rancher.com/docs/os/v1.x/en/installation/running-rancheros/server/raspberry-pi/ 
 
 
 
 
 
 
 SDカードの領域拡張

Slide 13

Slide 13 text


 
 
 SDカードの領域拡張 $ sudo fdisk /dev/mmcblk0 
 
 Welcome to fdisk (util-linux 2.31.1). 
 Changes will remain in memory only, until you decide to write them. 
 Be careful before using the write command. 
 
 Command (m for help): n # パーティションを作成する 
 Partition type
 p primary (2 primary, 0 extended, 2 free) 
 e extended (container for logical partitions) 
 Select (default p): enter # プライマリパーティションを選択する 
 
 Using default response p. 
 Partition number (3,4, default 3): enter # パーティション番号の選択 
 First sector (4194304-62333951, default 4194304): enter # 先頭セクタの選択 
 Last sector, +sectors or +size{K,M,G,T,P} (4194304-62333951, default 62333951): enter # 最終セクタの選 択


Slide 14

Slide 14 text


 
 
 SDカードの領域拡張 Created a new partition 3 of type 'Linux' and of size 27.7 GiB. 
 
 Command (m for help): w # 保存して終了 
 The partition table has been altered. 
 Syncing disks.
 
 $ sudo reboot # 再起動して新しいパーティションテーブルをリロードする 
 
 ~ 再起動 ~
 
 $ sudo mkdir /mnt/docker 
 新しいDockerルートとして使用されるディレクトリを作成する 


Slide 15

Slide 15 text


 
 
 SDカードの領域拡張 $ sudo mkfs.ext4 /dev/mmcblk0p3 # 作成したパーティションをフォーマットする 
 
 mke2fs 1.43.9 (8-Feb-2018) 
 /dev/mmcblk0p3 contains a ext4 file system 
 last mounted on /mnt/docker on Tue May 21 11:32:14 2019 
 Proceed anyway? (y,N) y
 Discarding device blocks: done 
 Creating filesystem with 7267456 4k blocks and 1818624 inodes 
 Filesystem UUID: ba3fae90-0e14-4abf-a9c4-68a09400067b 
 Superblock backups stored on blocks: 
 32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208, 
 4096000
 
 Allocating group tables: done 
 Writing inode tables: done 
 Creating journal (32768 blocks): done 
 Writing superblocks and filesystem accounting information: done 


Slide 16

Slide 16 text


 
 
 SDカードの領域拡張 $ sudo mount /dev/mmcblk0p3 /mnt/docker 
 Dockerのルートをマウントする 
 
 $ mount | grep mmcblk 
 /dev/mmcblk0p3 on /mnt/docker type ext4 (rw,relatime,data=ordered) 
 確認する
 
 $ sudo ros config set rancher.docker.extra_args [-g,/mnt/docker] 
 新しいルートを使用するようにDockerを設定する 
 
 $ sudo ros config set mounts "[['/dev/mmcblk0p3','/mnt/docker','ext4','']]" 
 再起動後もこのマウントを有効にする 
 
 $ sudo reboot
 $ mount | grep mmcblk 
 /dev/mmcblk0p3 on /mnt/docker type ext4 (rw,relatime,data=ordered) 
 再起動後、マウントされていることを確認する 


Slide 17

Slide 17 text

Dockerfile1
 
 
 
 
 
 
 
 コンテナの作成 FROM python:3.7.3-slim-stretch 
 
 RUN set -x && \
 apt update && \ 
 apt install -y build-essential && \ 
 apt install -y libopencv-dev 
 


Slide 18

Slide 18 text

Dockerfile2
 
 
 
 コンテナの作成 FROM python-apt
 
 RUN set -x && \
 pip install -U pip && \ 
 pip install jupyterlab==0.35.6 Pillow==6.0.0 joblib==0.13.2 


Slide 19

Slide 19 text

Dockerfile3
 
 
 
 コンテナの作成 FROM python-apt-1 
 
 ENV PYTHONPATH "/opt/python/library" 
 
 RUN set -x && \
 pip install scikit-learn==0.21.2 && \ 
 mkdir -p /opt/python/library && \ 
 mkdir -p /opt/python/jupyter && \ 
 mkdir -p /opt/python/jupyterlab && \ 
 mkdir ~/.jupyter
 
 COPY ./jupyter_notebook_config.py /root/.jupyter/jupyter_notebook_config.py 
 EXPOSE 8888
 
 CMD ["jupyter", "lab", "--allow-root"] 


Slide 20

Slide 20 text

jupyter_notebook_config.py
 
 
 コンテナの作成 $ cat jupyter_notebook_config.py 
 c = get_config()
 c.NotebookApp.ip = '0.0.0.0' 
 c.NotebookApp.open_browser = False 
 c.NotebookApp.port = 8888 
 c.NotebookApp.notebook_dir = '/opt/python/jupyter' 
 c.LabApp.user_settings_dir = '/opt/python/jupyterlab/lab/user-settings' 
 c.LabApp.workspaces_dir = '/opt/python/jupyterlab/lab/workspaces' 
 c.NotebookApp.password = u'sha1:63cae364b3cd:c4319cba1eeb1bcf011a7d3fabd6448f95ae18c5' 


Slide 21

Slide 21 text

熱のせいか途中で止まってしまいます。
 保冷剤材で囲みつつ、Dockerファイルを分割してbuildを3回実 行します。
 
 
 コンテナの作成 $ cp -f Dockerfile1 Dockerfile 
 $ docker build -t python-apt . 
 
 $ cp -f Dockerfile2 Dockerfile 
 $ docker build -t python-apt-1 . 
 
 $ cp -f Dockerfile3 Dockerfile 
 $ docker build -t scikit-laern . 
 


Slide 22

Slide 22 text


 
 コンテナの作成 $ docker build -t scikit-laern . 
 Sending build context to Docker daemon 7.168kB 
 Step 1/6 : FROM python-apt-1 
 ---> 3fe2cd92f178
 Step 2/6 : ENV PYTHONPATH "/opt/python/library" 
 ・
 ・
 ・
 Downloading https://files.pythonhosted.org/packages/cb/97/361c8c6ceb3eb765371a702ea873ff2fe112fa40073e7d2b81 99db8eb56e/scipy-1.3.0.tar.gz (23.6MB) 
 Installing build dependencies: started 
 Installing build dependencies: still running... 
 Installing build dependencies: still running... 
 Installing build dependencies: still running... 
 Installing build dependencies: still running.. 
 Installing build dependencies: still running... 
 


Slide 23

Slide 23 text

「Installing build dependencies: still running...」が
 延々続いて、3時間たっても完了しません。
 原因不明のまま、ここでビルドを断念しました。
 
 
 
 コンテナの作成・・・

Slide 24

Slide 24 text


 
 コンテナの作成・・・ 実画面
 
 
 


Slide 25

Slide 25 text


 
 コンテナの作成・・・ 断念!!

Slide 26

Slide 26 text

せっかくなのでnginxコンテナを起動
 
 
 nginxコンテナの起動 $ docker run --restart=unless-stopped -d -p 80:80 --name web01 nginx
 


Slide 27

Slide 27 text

ブラウザから接続。
 
 nginxコンテナの起動

Slide 28

Slide 28 text


 
 
 RancherOS in Raspberry END