概要
Ubuntu Server/Desktopのインストールについての説明.
このページはUbuntu Serverのインストールがメイン.素直にDesktopをインストールする場合は,UbuntuのRaspberry Piページのトップの位置あたりにある「desktop」を選択してtutorialを見た方がよい.
モチベーション
ROS2の少人数ゼミを行うときに,PC使うのではなくRaspberry Pi使った方が
- 安上がりじゃないか?
- ハードウェア扱うのに接続性が良くないか?
- 面白いんじゃない?
と思ったから.
ネットワーク環境の変動に対する考え方
raspberry piの場合,使用状況が色々変わる.持ち運びも考慮に入る.これにより状況によってネットワーク環境が変わることが想定される.ROSで遊ぶならDNS/DHCPなくても扱えるようにしたい.
無線LANの場合
無線LANで接続できる場合,IPが自動で割り振られる状況のみを想定する.IPが自動で割り振られない場合,そもそも無線サービスが使えないと考え,IPが割り振られれず利用できないままにしておく.
- 対処
- ネットワーク設定にてdhcpによる割り振りを行う(netplanのyaml設定ファイルでdhcp4: trueとする).
- IPが変わる可能性があるので,ssh接続などは名前解決で行う.dnsがない可能性も考え,avahi-daemonによる名前解決を行う.
有線LANの場合
有線LANの場合,以下の状況が考えられる.
- LANケーブルが刺さっていない
- dhcpサーバによりIPが自動で割り振られる
- dhcpサーバのないネットワークに接続しちゃった
- 固定IPを設定しなければならないネットワークである
このうち,4.は考えず,1.から3.で適当にIP割り振っちゃっていい状況を対象とする.
わりとraspberry piを持ち運んだりして状況が変わると,1.になったり2.になったり途中で状況が変わるけど,それでも動くようにしたい.
- 対処
- link-localによるプライベートIPの自動割り振り(169.254.0.0/16)を行う(netplanのyaml設定ファイルでlink-local: [ipv4]を使う)
- avahi-daemonによる名前解決を行う(無線LANと同じ)
Ubuntu Serverのインストール・設定
microSDカードへのインストール
UbuntuのRaspberry Piページが充実している.このページの「Download Ubuntu Server」や「Download Ubuntu Desktop」からダウンロードしても良いが,トップの位置あたりにある「desktopやserver」を選択してtutorialを見た方がよい.ここではserverを選択.
Raspberry Pi Imagerによるインストール方法
server通りに実行.特に気を付けるところは以下の通り.
Raspberry Pi Imager for Windowsにて.Mac, Unixはserverに説明あり.
- CHOOSE OS
- Other general purpose OS
- Ubuntu ServerLTS(RPi 3/4/400) 64bit版のお好きなバージョンを選択
- Other general purpose OS
- 右下の歯車マークで事前に色々設定可
Ubuntu Serverの設定
起動・ログイン
microSDカード,HDMI,キーボード/マウスをつなげてRaspberry Piを起動すると普通のUbuntuインストールとなる.まずは普通のインストールを終わらせる.
最初の起動後,ID・パスともにubuntuでログインするかSDカードへの書き込み時に設定したID・パスでログインする.
ただ,最初は種々の設定を書き込む時間が必要で,すぐにログインできないかもしれない.数分待って画面半分くらいになんかメッセージが出たらログインできるようになる.
ネットワーク関連設定
基本設定
普通のインストール後に追加で設定.
- 設定ファイル
- /etc/netplan/50-cloud-init.yaml
- 今回の例
- 有線・無線ともにDHCPにて自動割り当て
- 無線LANのssidをmyssid,セキュリティキーをmypassとして説明するので適宜自分用に読み替え
- renderer: networkdを使用1
network:
version: 2
renderer: networkd
ethernets:
eth0:
dhcp4: true
dhcp6: true # 使わないならfalse
link-local: [ ipv4, ipv6 ] # v6いらないなら [ ipv4 ]でおけ
wifis:
wlan0:
dhcp4: true
dhcp6: true # 使わないならfalse
access-points: # 複数のssidを登録可
"myssid":
password: "mypass"
設定後,以下のコマンドでネットワーク設定の有効化.
$ sudo netplan apply
非公開SSIDへの接続,パスワードの暗号化などは以下が参考となる.
avahi-daemon2
$ sudo apt install avahi-daemon
$ sudo systemctl enable avahi-daemon
$ sudo systemctl start avahi-daemon
- /etc/hostnameで名前を指定3
- 同じネットワーク内で名前が被らないように気を付ける
- 以下はとりあえずの例
pi001
これでホスト名.localでアクセス可能となる.この例の場合,pi001.localでアクセスできるようになる.
注意点として,ホスト名の中に.
(ピリオド)は使えない.例えば,pi.001とはできない(pi.001.localでアクセスできない).
その他通常の設定
念のため
入っていると思うが念のためインストール
$ apt install ssh git
hostnameの設定
$ sudo hostnamectl set-hostname [コンピュータ名]
$ hostname [コンピュータ名]
$ cat /etc/hostname
時刻合わせ
- 設定ファイル編集
NTP=ntp.nict.jp
FallbackNTP=ntp.ubuntu.com # 複数指定する場合にはスペース区切りで続けて記述
$ timedatectl set-ntp true
$ sudo systemctl enable systemd-timesyncd.service
$ sudo timedatectl set-timezone Asia/Tokyo
$ sudo systemctl restart systemd-timesyncd.service
ロケール・キーボード・スワップファイルの設定
ここを参考.
$ sudo locale-gen ja_JP.UTF-8
$ sudo dpkg-reconfigure -f noninteractive locales
$ echo "LANG=ja_JP.UTF-8" | sudo tee /etc/default/locale
/etc/default/keyboardを編集
- XKBMODEL="jp106"にする
- XKBLAYOUT="jp"にする
スワップファイルはメモリの使用状況をみて必要なら行う.
$ sudo fallocate -l 1g /swapfile
$ sudo chmod 600 /swapfile
$ sudo mkswap /swapfile
$ echo '/swapfile swap swap defaults 0 0' | sudo tee -a /etc/fstab
$ sudo swapon -a
2行目で1GBのスワップファイルを作成している.
システムアップデート4
$ sudo apt update && sudo apt upgrade
Tips
- Atomを使ってリモートでRaspberry Pi上のファイルを編集・実行
デスクトップ環境のインストール
注意
もしDesktopのバージョンの問題(特定のバージョンが手軽にインストールできない等)がある場合,
- Ubuntu Serverをインストール
- デスクトップ環境(xubuntu)をインストール
と段階的に行う.この場合は以下の手順を参考に.
もし問題がなく,インストールしたいDesktop環境がRaspberry Pi Imager for Windowsでインストールできなるのであれば,チュートリアル通りに進めた方がよい.
段階的に行う場合の話
デスクトップ環境はひとつのアプリケーションなので色々インストールできる.serverの5. Install Desktopから選択できるものを紹介しているblogなどに飛べる.ちょっと紹介文が面白い.
ここではxubuntuを選択.
$ sudo apt update
$ sudo apt upgrade
$ sudo apt install xubuntu-desktop
xubuntuインストール途中の選択
- ディスプレイマネージャ
- gdm3
- LightDM
- こっちの方がいいかな?
ディスプレイマネージャの変更
$ sudo dpkg-reconfigure gdm3
もしかしたら以下をやるようにメッセージが出るかもしれない.その場合には実行
$ sudo dpkg --configure lightdm
その他
SDカードのイメージ作成・復元
何台ものRaspberry Piを複数の人(学生)が同じ(ような)環境で使いたい場合,いちいちインストール・設定をするのは面倒.
そこで原初のSDカードを作成後,バックアップ(イメージの作成・保存)と復元(イメージからSDカードの作成)を考える.
ソフトウエアはWin32DiskImagerを使用する.リンクからDLしてもよし,以下のコマンドでいれても良し.
winget install --id Win32diskimager.win32diskimager
初手
必要なソフトウエアは全部入れておく.
raspberry pi上でavahi-daemonをdisableにしておく.
$ sudo systemctl disable avahi-daemon
その後電源落として,raspberry piからWindowsにSDカードを挿し替える.
SDカードのバックアップ(イメージ作成)・復元
有名なソフトなので「Raspberry Pi SDカード バックアップ 復元」などで沢山情報得られる.
後処理
以下について行う.
- raspberry piに挿し替えて起動
- パーティションの拡張
- Win32DickImagerで復元したらそのまま最大容量まで使えていた.もし使えていないケースの場合,次のSDカードの未使用領域の拡張方法についてが参考になるかも?
- hostnameの変更
- avahi-daemonを使用するので固有の名前をつける必要があるので必須
- avahi-daemonの有効化
- 識別のためのhostnameを設定した後にavahi-daemonを有効化
$ sudo hostnamectl set-hostname [コンピュータ名]
$ sudo systemctl enable avahi-daemon
$ sudo systemctl start avahi-daemon
長期運用のための工夫
-
netplanの場合,rendererにnetworkdとNetworkManagerを選択できる.しかしNetworkManagerの場合,dhcp4: trueにするとlink-localのオプションが無効化されてしまう(netplan referenceのlink-localの項).よってlink-localのオプションを使う場合,networkdにしないといけない. ↩
-
dhcp割り当てなのでIPが変わる可能性があり,IPによるssh接続は面倒となる.そこでホスト名による接続のためavahi-daemonを使う(手持ちのRaspberryPiをサクッとmDNSに対応させる). ↩
-
有効化のためのリブートが面倒ならhostnamectlコマンド使おう(server world) ↩
-
本当はインストール直後にも行う.というか隙あらば行う. ↩