Raspberry Pi OS(64bit)(Jan 28th 2022)のインストール

Raspberry Pi OS(64bit)(Jan 28th 2022)のインストールと初期設定。

ダウンロード

Raspberry Pi OSページの
「Manually install an operating system image」の「See all download options」をクリック、
「Raspberry Pi OS (64-bit)」の「Raspberry Pi OS with desktop」の「Download」をクリックしてダウンロード
試したのは Release date: January 28th 2022

[!NOTE] 「Archive」リンクから過去のリリースも入手できる

なんか見るたびにページ構成変わるよなぁ….😩💨

ブート前の設定

ブートの前にSDカードのFATパーティションのファイルをいじっておく。

UARTコンソールの有効化

UARTをコンソールとして使用するためにconfig.txt の 最後の [all] の行の下に以下を追加

# enable uart
enable_uart=1

[!WARNING] シリアルコンソールの送信改行コードはCRにしておくこと。
そうしないと、ビミョーに悲しいことが起こる場合がある。

ディスプレイ解像度の設定

ついでにディスプレイ出力の解像度を変更するためにconfig.txtの 最後の [all] の行の下に以下も追加。
hdmi_grouphdmi_modeについては使用するモニタに合わせる。
hdmi_group=2はモニタ種別でDMT(一般的にモニタディスプレイ)、
hdmi_mode=82が 1920x1080 60Hz(1080p)を示している。
設定値の内容については、HDMI Modeを参照。

framebuffer_XXXはテキストモードで表示したいサイズに合わせる。1920と1080とか、1280と720とか。

hdmi_force_hotplugを1に設定することで、ホットプラグを無効にし、常に接続状態となる。
これはHDMIを後から接続したら表示が出ないのを防ぐため。

# display resolution force setting
hdmi_group=2
hdmi_mode=82
framebuffer_width=1920
framebuffer_height=1080
hdmi_force_hotplug=1

[!NOTE] HDMIディスプレイを常に接続しているなら設定しなくても問題ないが、 HDMIディスプレイをはずしてVNCでリモート接続だけする場合は設定しておかないと 解像度が1024x768までしか設定できなくなるので注意。

VNCが遅い問題対応

このバージョンではHDMIディスプレイを繋いでいない状態でVNCで接続すると表示がとても遅くなる問題がある。
回避するには、cmdline.txtに以下追記する。
1920x1080@60Dの部分は上記のhdmi_modeframebuffer_XXXの設定値に合わせる。

video=HDMI-A-1:1920x1080@60D

具体的にはこんな感じ。

console=serial0,115200 console=tty1 root=PARTUUID=b635b4ec-02 rootfstype=ext4 fsck.repair=yes video=HDMI-A-1:1920x1080@60D rootwait

参考URL:Re: Bullseye vncserver is very slow without display

Wi-Fiの設定

Wi-Fiのアクセスポイントに接続するために
SDカードのFATパーティションに wpa_supplicant.conf という名前のファイルを以下の内容で作成する。
ssidpskは使用する環境に合わせて修正すること。
SSID名は ダブルクォーテーションで囲む。
暗号化キーは平文で記載する場合は ダブルクォーテーションで囲む。256bitキーの場合はダブルクォーテーションで囲まない。

country=JP
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1
network={
    ssid="SSID名"
    psk="暗号化キー"
}

なお、暗号化キーの256bitキーはwpa_passphraseコマンドで作成できる。

[!NOTE] [メモ] (らずぱい)Windows上から固定IP設定 (Raspberry Pi Static IP) にWindows版のwpa_passphrase.exeへのリンクがある。
ワタシはUbuntuや別のRasberryPiで作ったから使ってないけど…

wpa_passphrase "SSID名" "暗号化キー"
        ↓ 実行結果
network={
        ssid="SSID名"
        #psk="暗号化キー"
        psk=ほにゃらら~~~ほにゃらら~~~
}

この実行結果をwpa_supplicant.confの該当部分に転記すればよい。
ちなみに、#psk="暗号化キー"の部分は削除しておくのが良い。(そうでないと何のために暗号化したのか分からなくなる。
そのままでもコメントとして扱われるので実動作に影響はないが。)
また、既に接続済みのシステムがある場合は、そのシステムの/etc/wpa_supplicant/wpa_supplicant.confをコピーして使用しても良い。

SSH接続の有効化

SSH接続を有効にするために
SDカードのFATパーティションに ssh (または ssh.txt ) という名前の空ファイルを作成する。

[!NOTE] 起動後、公開鍵ファイルの設置を行うには、
ubuntuにSSHサーバをセットアップする
の「秘密鍵と公開鍵の生成と公開鍵ファイルの設置」の部分を参照。
(ページはUbuntuについて書いてあるけど、サーバがセットアップ済みなことを除けばRaspberry Pi OSでも同じ)

ここまでPCでの作業。

起動

作成したSDカードをRaspberryPiに挿入し、起動。
起動ログはHDMI、シリアルコンソール両方に表示される。(SplashScreenをOFFしていた場合:後述)

何はともあれ、最新版へ

# アップデート実行
sudo apt update
sudo apt upgrade
# リブート
sudo reboot

デフォルトのユーザ名を変更

RaspberryPiを使うとき、デフォルトパスワードの変更は言わずもがなですが、
できればユーザ名も変更しておきましょう。
追加してもいいけど、今あるユーザをリネームした方がなにかと便利。

GUIログインしているとpiユーザ使用中になってしまうので、GUIを無効化しておく。
GUI使えないとシリアルコンソールかSSH接続が必須になるので、つながることを以下の手順を実行する前に確認しておくこと。

手順はこんな感じ。

sudo raspi-config
    1 System Options
        S5 Boot / Auto Login
            B1 Console
    <Finish>
 Would you like to reboot now?
 と聞かれるので <Yes>

ついでにSplash Screenも無効化するならこんな感じで設定。
シリアルコンソールに起動ログが表示されるようにするにはSplash Screenを無効化しないといけない。

sudo raspi-config
    1 System Options
        S7 Splash Screen
            Would you like to show the splash screen at boot?
            に対して <No> を選択
            Splash screen at boot is disabled
            と表示されるので <OK>
    <Finish>

[!NOTE] この操作で/boot/cmdline.txtが書き換えられるらしい。

以下はシリアルコンソール or SSHで接続して行う。

sudo useradd -M temp                    # デフォルトユーザの変更のためにtemporary userを作る
sudo gpasswd -a temp sudo               # temporary user にsudoグループを追加
sudo passwd temp                        # temporary user にパスワード設定

# 一旦log offしてtempでlog in

sudo usermod -l <新ユーザ名> pi                     # usermod -lでユーザ名をpiから<新ユーザ名>に変更
sudo usermod -d /home/<新ユーザ名> -m <新ユーザ名>  # usermod -dでホームディレクトリを/home/piから/home/<新ユーザ名>に変更
sudo groupmod -n <新ユーザ名> pi                    # groupmod -nでpiグループを<新ユーザ名>グループに変更

# log offして新ユーザでlog in

sudo userdel temp                       # temporary user を削除

# 新ユーザのパスワード変更する
passwd
《パスワードを設定》

参考情報はこちら。https://jyn.jp/raspberrypi-username-change/

↑にも書いてあるが、ユーザ名を変更するとsudoではパスワードを聞かれるようになる。
(おススメしないが)新しいユーザでもsudoのパスワードを省略したい場合は
/etc/sudoers.d/010_pi-nopasswdの先頭のpiを<新ユーザ名>に変更する。

GUIログインに戻す。

sudo raspi-config
    1 System Options
        S5 Boot / Auto Login
            B1 Console
            B4 Desktop Autologin
    <Finish>
 Would you like to reboot now?
 と聞かれるので <Yes>

GUIログインのユーザはraspi-configを実行したユーザに設定される。なので、ちゃんと変更したユーザで実行しないとダメです。

~/.bashrcの設定など

シリアルコンソールを使用する場合、コンソールサイズがあってなくてイライラするので、シリアルコンソールの設定用スクリプトを以下の手順で取得。

cd ~
wget https://gist.githubusercontent.com/ippei8jp/8179edb10867faf98e233a52965a9e53/raw/4f39afbcd8471426421944b597f3a5f2963984c6/resize.py
chmod +x resize.py

[!NOTE] resize.pyは以前python2ベースで作ってあったが、
このバージョンからpython2がデフォルトでインストールされなくなったので、
python3ベースに修正したのでURLが変更されています。

~/.bashrcを必要に応じて修正。 例えば、以下を追記。

# プロンプトの設定
PS1="\w\$ "

# キーバインドの設定
bind '"\C-n": history-search-forward'
bind '"\C-p": history-search-backward'

# ディレクトリスタックの表示改善
function pushd() {
    command pushd $* > /dev/null
    command dirs -v
}
function popd() {
    command popd $* > /dev/null
    command dirs -v
}
function dirs() {
    command dirs -v
}

# 表示色変更
export LS_COLORS='di=01;32:ln=01;36:ex=01;31:'
export GREP_COLORS='mt=01;31:ml=:cx=:fn=01;32:ln=32:bn=32:se=36'

# lessのオプション
export LESS="-iMR"

# reset console size
case "$TERM" in
    vt220) ~/resize.py ;;
esac

# pyenv 設定
export PYENV_ROOT=/proj/.pyenv
if [ -e $PYENV_ROOT ]; then
    export PATH=$PYENV_ROOT/bin:$PATH
    # Raspbian向け対策(numpyでundefined symbol: PyFPE_jbuf)
    export PYTHON_CONFIGURE_OPTS="\
     --enable-ipv6\
     --enable-unicode=ucs4\
     --enable-shared\
     --with-dbmliborder=bdb:gdbm\
     --with-system-expat\
     --with-system-ffi\
     --with-fpectl"

    eval "$(pyenv init --path)"          # pyenv 2.0以降で必要
    eval "$(pyenv init -)"
    eval "$(pyenv virtualenv-init -)"
fi

# nodenv 設定
export NODENV_ROOT=/proj/.nodenv
if [ -e $NODENV_ROOT ]; then
    export PATH=$NODENV_ROOT/bin:$PATH
    eval "$(nodenv init -)"
fi

キーボードのCAPS - CTRLの入れ替え

物理キーボード接続で使わないなら設定不要

参考: https://qiita.com/Pseudonym/items/12e447557a5234bb265b

/etc/default/keyboardファイルの以下の部分を修正

XKBOPTIONS=""
    ↓
# XKBOPTIONS="ctrl:nocaps"        # CapsLock --> Ctrl
XKBOPTIONS="ctrl:swapcaps"      # CapsLock <-> Ctrl

[!WARNING]
これでできるハズなんだけど、なんかうまく行かない。。。
VNCしか使わないから、ま、いっか。

bashのクリップボードの挙動が以前と異なるようになったので対策

bashでクリップボードからペーストするとペーストした文字が選択状態になったり、改行がその場で入力されなかったりするようになった。
こればbash 5.1からブラケットペーストモード というのがデフォルトで有効になったためらしい。
(余計なことをしてくれる…😩💨)
これを回避するには/etc/inputrcの最後に以下を追記する。

# disable bracked-paste mode
set enable-bracketed-paste off

起動済みのbashには効かないが、設定以降に起動したbashでは有効になる(システムの再起動は不要)。

参考: シェル - bash - ブラケットペーストモード(Bracketed Paste Mode)

ワークディレクトリの作成とsambaの設定

まずはワークディレクトリの作成

sudo mkdir /work
sudo mkdir /proj
sudo chown `whoami`:`whoami` /work /proj

sambaのインストールと設定

sudo apt install samba
sudo smbpasswd -a `whoami`
    パスワードを設定

設定変更のため、/etc/samba/smb.conf を編集

[global] の下に以下を追加

map archive = no

[homes] の下の以下を修正

read only = no

[!NOTE] home は一旦log inしないと見えない

最後に以下を追加

[work]
path = /work
guest ok = no
writable = yes
map archive = no
share modes = yes
dos filetimes = yes
force group = <ユーザ名>
force create mode = 0664

[proj]
path = /proj
guest ok = no
writable = yes
map archive = no
share modes = yes
dos filetimes = yes
force group = <ユーザ名>
force create mode = 0664

サービスの再起動

sudo service smbd reload
sudo service smbd restart

マシン名の変更

お好みでマシン名を変更(対応する部分を変更各1カ所)

sudo vi /etc/hostname
sudo vi /etc/hosts

VNCサーバのインストール

リモートデスクトップを使うために、VNCサーバのインストールと有効化を行う。

s``udo apt install realvnc-vnc-server   # インストール済みみたいだけど、念のため。
sudo raspi-config
    3 Interfacing Options
        I3 VNC
            Would you like the VNC Server to be enabled?
            と聞かれるので <Yes>
            The VNC Server is enabled
            と表示されるので <Ok>
    <Finish>

Windows側のクライアントは、https://www.realvnc.com/en/connect/download/viewer/ から VNC Viewerをダウンロード。 Windowsを選択してStandalone EXE x64(またはx86)を選択、ダウンロードボタンをクリック。 インストールは不要でダウンロードしたファイルを実行したら、あとは良きにはからえ。 VNC経由だと、日本語キーボードの設定しなくても日本語キーボードが使えるらしい。 日本語化の手順はこちらを参考に。 http://俺の技術メモ.net/raspbian-jessie-startup-conf/#i-2

おまけ

SDカードイメージのバックアップを取るならこちら。
Raspbian SDカードイメージファイルの作成(改訂版)