MacのターミナルからRaspberry Piにubuntuをインストールする

備忘録

 最近WindowsよりMacで作業することが多くなったが、SDカードにコピーする手順や初期設定などをよく忘れるので、次の作業の時にググったりしなくても済むようにするためのメモ。いい加減自動化したほうがいいのかもしれない。(ときどき更新

SDカードのフォーマット

 デバイス指定を間違ってフォーマットすると大惨事なので、指定しようとしているデバイスが「external pysical」で容量がSDカードの容量と一致しているか、フォーマットがFATかどうか確認すること。

$ diskutil list

(略)

/dev/disk2 (external, physical):
   #:                       TYPE NAME                    SIZE       IDENTIFIER
   0:     FDisk_partition_scheme                        *31.1 GB    disk2
   1:             Windows_FAT_32 system-boot             268.4 MB   disk2s1
   2:                      Linux                         30.8 GB    disk2s2

 ラベル名は「BOOT」とか適当につけておく。

$ diskutil unMountDisk /dev/disk2
$ diskutil eraseDisk MS-DOS BOOT /dev/disk2

SDカードにイメージをコピー

 Ubuntuのイメージは「Install Ubuntu Server on a Raspberry Pi 2, 3 or 4」からダウンロードする。curlを使うならhttp://cdimage.ubuntu.com/ubuntu/releases/からで。

$ curl -L -O http://cdimage.ubuntu.com/ubuntu/releases/20.04/release/ubuntu-20.04-preinstalled-server-arm64+raspi.img.xz

デバイス指定を間違ってコピーすると大惨事(以下略
コマンド実行中は何も表示されないがCtl + Tを押すと状況を確認できる。
/dev/diskXよりも/dev/rdiskXのほうが多少早い。

$ diskutil unMountDisk /dev/disk2
$ gunzip -c ubuntu-20.04-preinstalled-server-arm64+raspi.img.xz|sudo dd bs=16m of=/dev/rdisk2

usercfg.txtに作業するモニタに合わせた解像度の設定を追加する。設定値は「Video options in config.txt」を見て適宜決める。

hdmi_group=2
hdmi_mode=9

Ubuntuの初期設定

console login & Password変更

 初期ID/PW:ubuntu/ubuntuでログインするとパスワード変更を求められるので適宜変更する。パスワードを変更するまでリモートからのsshログインはできない。

packageの更新

$ sudo apt update
$ sudo apt upgrade

timezoneの設定

$ sudo timedatectl set-timezone Asia/Tokyo

localeの設定

$ sudo apt install -y language-pack-ja-base language-pack-ja
$ sudo update-locale LANG=ja_JP.UTF-8

/home/ubuntu/.bashrcの末尾に以下を追加。(console login時の日本語文字化け対策)

case $TERM in
      linux)
	      LANG=C
	      ;;
      *)
	      LANG=ja_JP.UTF-8
	      ;;
esac
export LANG

Wifiの設定

 netplanは/etc/netplan/*.yamlの設定ファイルを全部読み込むので、wifi設定は自動生成な50-cloud-init.yamlに書くより別途ファイルを作って書いたほうがいいらしい。(cloud-init cleanとかまず実行しないし問題はないと思う)

$ sudo apt install -y network-manager wireless-tools
$ sudo vi /etc/netplan/wifi.yaml

以下の内容を追加。rendererをnetworkdにして設定する方法が未だに分からない。

network:
    renderer: NetworkManager
    wifis:
        wlan0:
            addresses: []
            dhcp4: true
            optional: true
            access-points:
                "wifiのSSID":
                    password: "wifiのPASSWORD"

設定を反映。

$ sudo netplan apply

 netplanはSSIDの隠蔽(hidden設定)に対応していないので、隠蔽しているときはnetplanは使わずにNetworkManagerのnmcliコマンドを使う。2020年5月4日にnetplanにもhidden設定が追加されたようなので、パッケージに反映されたらnetplanだけで済むはずAdd `hidden` to connect to non-broadcast SSIDs

$ nmcli device wifi connect [wifiのSSID] password [wifiのPASSWORD] hidden true
Error: No network with SSID 'wifiのSSID' found.

$ nmcli device wifi connect [wifiのSSID] password [wifiのPASSWORD] hidden true
Device 'wlan0' successfully activated with 'asdsadw-ssss-bsss-bsss-ssaasssww'.

理由は分からないが失敗することがある(繰り返し実行していると繋がる)
設定が成功すると/etc/NetworkManager/system-connections配下に設定ファイルが作られる。

nmcliの確認系コマンド

参考:Networking/CLI

認識しているデバイスとステータスの表示
$ nmcli d

接続の確認
$ nmcli c show

パラメータの確認
$ nmcli c show netplan-wlan0-xxxxxxxx 

Pythonの追加

バージョン管理用にpyenvを入れてからpythonを追加する。

$ sudo apt install -y build-essential libbz2-dev libdb-dev \
  libreadline-dev libffi-dev libgdbm-dev liblzma-dev \
  libncursesw5-dev libsqlite3-dev libssl-dev \
  zlib1g-dev uuid-dev
$ git clone https://github.com/pyenv/pyenv.git ~/.pyenv
$ echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bashrc
$ echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bashrc
$ echo 'eval "$(pyenv init -)"' >> ~/.bashrc
$ source ~/.bashrc
$ pyenv install 3.8.2
$ pyenv global 3.8.2

GPIO関係のパッケージ追加

$ sudo apt install -y wiringpi
$ gpio -v
gpio version: 2.50
Copyright (c) 2012-2018 Gordon Henderson
This is free software with ABSOLUTELY NO WARRANTY.
For details type: gpio -warranty

Raspberry Pi Details:
  Type: Pi 3, Revision: 02, Memory: 1024MB, Maker: Sony 
  * Device tree is enabled.
  *--> Raspberry Pi 3 Model B Rev 1.2
  * This Raspberry Pi supports user-level GPIO access.

開発用にPythonのパッケージも追加。

$ pip install --user RPi.GPIO  

サンプルコードはこのあたりで。

Bluetooth関係のパッケージ追加

$ sudo apt install -y bluetooth bluez libbluetooth-dev pi-bluetooth libudev-dev

繋いだりして問題ないか確認。

$ bluetoothctl
[bluetooth]# scan on
[NEW] Device 00:11:22:AA:BB:CC toio Core Cube

[bluetooth]# connect 00:11:22:AA:BB:CC
Attempting to connect to 00:11:22:AA:BB:CC
Connection successful

[toio Core Cube]# disconnect 00:11:22:AA:BB:CC
Attempting to disconnect from 00:11:22:AA:BB:CC
Successful disconnected

開発用にPython のパッケージも追加。ライブラリ的なものは沢山あるが、メンテが多少されててマシなbluepyにした。

$ sudo apt install -y libglib2.0-dev
$ pip install bluepy

node.js関係のパッケージ追加

 nodeバージョン管理ツールnを入れてnからnodeをインストールする。nのインストールに使ったnodeは削除しておく。

$ sudo apt install -y nodejs npm
$ sudo npm install n -g
$ sudo n stable
$ sudo apt purge -y nodejs npm

 ついでにyarnも入れておく。同じ名前の割とどうでもいいコマンドがインストールされているので先に削除する(yarn:Installation

$ sudo apt remove cmdtest
$ sudo apt remove yarn

$ curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | sudo apt-key add -
$ echo "deb https://dl.yarnpkg.com/debian/ stable main" | sudo tee ¥
/etc/apt/sources.list.d/yarn.list
$ sudo apt update
$ sudo apt install --no-install-recommends yarn

バックアップ

 適当に電源落としたりして環境壊したとか、試行錯誤するときに全部捨ててやり直したいってときのために一通り設定が済んだらバックアップを取っておく。backupにかかる時間は作業するマシンとSDカードの容量などによるが、低スペックなmacだと1時間以上かかったりする。

$ diskutil list

(略)

/dev/disk2 (external, physical):
   #:                       TYPE NAME                    SIZE       IDENTIFIER
   0:     FDisk_partition_scheme                        *31.1 GB    disk2
   1:             Windows_FAT_32 system-boot             268.4 MB   disk2s1
   2:                      Linux                         30.8 GB    disk2s2

$ sudo dd if=/dev/rdisk2 of=raspi-ubuntu-backup.img bs=16m
$ gzip raspi-ubuntu-backup.img
タイトルとURLをコピーしました