最近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の確認系コマンド
認識しているデバイスとステータスの表示
$ 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
サンプルコードはこのあたりで。
- https://sourceforge.net/p/raspberry-gpio-python/wiki/Examples/
- https://askubuntu.com/questions/621134/gpio-on-raspberry-pi
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