本当に死ぬほどよく忘れるのでAnsibleにでもすべきなんですけど、面倒臭がってやっていないのでメモ。数多の人がやっているのでお好みで。
以前RAIDの初期設定に書いた内容と結構重複します。随時更新していきます。
起動前の初期設定
Raspbianイメージの書き込み
SDカードにRaspbian Buster Liteを書き込みます。以下からダウンロードします。
書き込みにはbalenaEtcherを利用。
ネットワーク・SSHの有効化
SSHを有効にします。balenaEtcher書き込み後アンマウントされたSDカードを再接続し、焼き終わったSDカードのbootパーティションにssh
というファイルを配置します。
% cd /Volumes/boot boot % touch ssh boot % ls | grep ssh ssh*
ラズパイにWifi設定を入れます。このためにディスプレイやらマウスやら準備するのも面倒なので初めから無線で接続しましょう。
wpa_supplicant.confをbootに作成します。SSIDとパスワードの設定が書かれているだけの設定ファイルですが、暗号化しないと危なそうなので、以下のサイトで作成しました。
mascii.github.io
作成したwpa_supplicant.confをSDカードの/bootパーティションにコピーします。
SDカードをラズパイに差し込んで起動。ここからターミナル上で操作します。
起動後の初期設定
SSH接続
ターミナル上で次のコマンドを入力
~ % ssh pi@raspberrypi.local
初期のパスワードはraspberry
が設定されています。
IPアドレスの設定
接続が完了したら、IPアドレスの設定をします。有線・無線同時に設定することも可能です。
static routers
にルーターのIPアドレス、static ip_address
に固定したいIPアドレスを自由に設定します。
~ $ sudo vi /etc/dhcpcd.conf #有線接続の場合 interface eth0 static ip_address=192.168.3.11/24 static routers=192.168.3.1 #無線接続の場合 interface wlan0 ssid (wpa_supplicant.confで設定したSSID) static ip_address=192.168.8.11/24 static routers=192.168.8.1
ロケールの設定
システムの設定を行います。以下のコマンドを入力するとCUIコンフィグ設定画面が表示されます。
~ $ sudo raspi-config
英語のままでも良いのですが、日本語化できるので日本語化しましょう。4 Localisation Options
からI1 Change Locale
を選択し、ja_JP.UTF-8 UTF-8
までスクロールします。
図を見て分かるようにj列なので結構下の方。
メインの言語選択でも同様に日本語を選択。
同様にタイムゾーンの設定。同様に4 Localisation Options
からI2 Change Timezone
を選択しAsia
→Tokyo
を選択。
Wifiのlocationも一応設定しました。4 Localisation Options
からI4 Change Wi-fi Country
を選択、JP Japan
を選択。
その他の設定
初期状態だとホスト名がraspberrypi.local
と長いので編集します。ターミナルでも表示されるのでわかりやすいものをお勧めします。
2 Network Options
→N1 Hostname
を選択し、ホストネームを設定します。
Raspi-Configの確定
設定が完了したら、最初の画面で<Finish>
を選択すると、再起動が行われ設定が反映されます。
再起動を促されなかった場合は、自分で再起動します。
~ $ sudo shutdown -r now
再起動されるとssh接続が切断されます。再起動完了後の接続はpi@(設定したホスト名).local
で接続可能です。
Swapの無効化
SDカードの書き込み回数を消費してしまうので、Swapを無効化します。
sudo swapoff --all sudo systemctl stop dphys-swapfile.service sudo systemctl disable dphys-swapfile.service sudo apt remove --purge dphys-swapfile sudo rm -f /var/swap
参考:
www.angelcurio.com
curecode.jp
ファームウェアアップデート
ファームウェアをアップデートします。RaspberryPiではapt
またはapt-get
でアップデートが可能です。
~ $ sudo su - ~ # apt update -y && apt upgrade -y && apt autoremove -y
デベロッパー向けのアップデートもあり、いろいろなサイトで紹介されていますが、私は安定版を使うことにします。
ユーザの設定
piユーザをそのままにして置くのはセキュリティ的に危険です。sudoグループに所属しているにもかかわらず初期パスワードは公表されているからです。
と言っても、多くの人が記述するように「piユーザを消すこと」には反対です。
RaspberryPiの全てを知っている訳ではないため、消したことによる障害が予測できないためです。
ですので、piユーザの変わりを用意し、piユーザからsudoを剥奪、piユーザの名称とパスワードを変更してあげます。
Piユーザの代わりを設定
初めにpiの所有グループを確認
~ $ id pi uid=1000(pi) gid=1000(pi) groups=1000(pi),4(adm),20(dialout),24(cdrom),27(sudo),29(audio),44(video),46(plugdev),60(games),100(users),105(input),109(netdev),999(spi),998(i2c),997(gpio)
sudoグループは言わずもなが、admグループは一部の/var/log
の閲覧、videoグループはvcgencmd measure_temp
コマンドを出力するために必要です。他に必要なグループがあればここで確認しておきます。
必要なグループに所属するユーザを作成します。ここではadmin
ユーザを例に作成します。
~ $ sudo useradd -m admin ~ $ sudo passwd admin 新しいパスワード: 新しいパスワードを再入力してください: passwd: パスワードは正しく更新されました ~ $ sudo gpasswd -a admin sudo ユーザ admin をグループ sudo に追加 ~ $ sudo gpasswd -a admin video ユーザ admin をグループ video に追加 ~ $ sudo gpasswd -a admin adm ユーザ admin をグループ adm に追加
これでひとまずpiユーザの代わりができました。
Piユーザを編集
一度ログアウトし、再度作成したユーザから接続しなおします。
~ $ exit ~ % ssh admin@rpi.local ~ $ id uid=1001(admin) gid=1001(admin) groups=1001(admin),27(sudo) ~ $ sudo gpasswd -d pi sudo ユーザ pi をグループ sudo から削除 ~ $ id pi | grep sudo ~ $
これでpiユーザはsudoが使用できなくなりました。次にPiユーザの名称変更・パスワード設定を行います。
~ $ sudo usermod -l (新しいユーザ名) pi ~ $ sudo passwd (新しいユーザ名) 新しいパスワード: 新しいパスワードを再入力してください: passwd: パスワードは正しく更新されました
後始末
piユーザにはsudo後一定時間パスワードを聞かれない特殊な設定がされているので、これを削除します。
~ $ sudo rm /etc/sudoers.d/010_pi-nopasswd ~ $ ls -al /etc/sudoers.d/ 合計 20 drwxr-xr-x 2 root root 4096 5月 5 14:54 . drwxr-xr-x 79 root root 4096 5月 5 14:50 .. -r--r----- 1 root root 36 4月 29 2019 010_at-export -r--r----- 1 root root 211 1月 13 20:59 010_proxy -r--r----- 1 root root 958 2月 2 16:41 README
使いやすくする設定
ここら辺は各個人の問題なので設定は任意です。
新しく作成したユーザをより使いやすくしておきましょう。
.vimrc
を作成し、set number
オプションをデフォルトでONにしておきます。
~ $ echo "setnumber" >> .vimrc
これでviコマンドで起動するエディタは行番号が振られるようになります。
sudoした場合に行番号をふりたい場合はsudo su -
でrootユーザのホームディレクトリで同じ作業をします。
.bashrc
も編集しておきます。PS1の\wを大文字の\Wに(カレントディレクトリの表示を変更)aliasのll
(ls -alの短縮)とrmコマンド時に確認を行うようにします。
~ $ vi .bashrc (中略)... 60 PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\W \$\[\033[00m\] ' (中略)... 89 90 # some more ls aliases 91 alias ll='ls -l' 92 #alias la='ls -A' 93 #alias l='ls -CF' 94 alias rm='rm -i' 95 (中略)...
SSHの公開鍵ログイン設定
パスワードログインより安心な公開鍵認証を設定します。
公開鍵の作成・登録
この操作はクライアントPCから行います。SSHしているMacbookなどからです。
~ % ssh-keygen -t ed25519 -C "" Generating public/private ed25519 key pair. Enter file in which to save the key (/Users/nkmm/.ssh/id_ed25519): Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in id_ed25519. Your public key has been saved in id_ed25519.pub. The key fingerprint is: SHA256:nDcDTl0/x/4zJao5HLYd5ULkzI95jxNJhB6tP0III/o The key's randomart image is: +--[ED25519 256]--+ | .o | | . o. .+.o. | | . .oo.B +o o| | . + o. O o+ | | . S +o O..o| | E .oo*.O.o| | o +.= B.| | +o. o +| | o. . | +----[SHA256]-----+
キーを発行したら.pub
を表示し、リモートマシン(ラズパイ)に登録します。
~ % cat nkcluster.pub ssh-ed25519 *************************************************************** ~ % ssh rpi@rpi.local rpi@rpi.local's password: (リモートマシンへログイン) ~ $ mkdir .ssh ~ $ echo "ssh-ed25519 ***************************************************************" >> .ssh/authorized_keys ~ $ sudo systemctl restart sshd [sudo] admin のパスワード: ~ $
sshdサービスを再起動し準備完了です。公開鍵でログインできるかをチェックします。
~ $ exit ログアウト Connection to rpi.local closed. ~ % ssh -i .ssh/id_ed25519 rpi@rpi.local (ログイン) ~ $
パスワードを聞かれずログインできれば公開鍵認証は成功です。
パスワードログインを停止
公開鍵認証を設定したため、パスワード認証でのログインを停止します。
sudoグループのユーザでログインしsshd_config
を修正します。PermitRootLogin
、PasswordAuthentication
、PermitEmptyPassword
をno
に設定します。
~ $ sudo vi /etc/ssh/sshd_config (中略) 31 #LoginGraceTime 2m 32 PermitRootLogin no 33 #StrictModes yes (中略) 55 # To disable tunneled clear text passwords, change to no here! 56 PasswordAuthentication no 57 PermitEmptyPasswords no
sshdを再起動すると、パスワード認証が無効になります。
~ $ sudo systemctl restart sshd
ufwの導入
iptablesを直接制御できる高度なエンジニアではないので、セキュリティ対策にファイヤウォールを導入します。
注意*
kubernetesを利用する場合は初期の段階では導入しないでください。ちょっと面倒くさいことになります、なりました(復旧済み)
~ $ sudo su - ~ # apt-get install ufw ~ # systemctl start ufw ~ # systemctl enable ufw ~ # ufw status verbose Status: inactive
systemctlから起動しただけではactiveにはならない様子。危ない危ない。
ufwは以下のサイトを参考に設定しました。
私も設定内容を載せておきますが、あくまで参考程度にしてください。 先にssh用のポートを開通してからactiveに設定することにします。
~ # ufw allow from 192.168.3.0/24 to any port 22 Rules updated ~ # ufw enable Command may disrupt existing ssh connections. Proceed with operation (y|n)? y Firewall is active and enabled on system startup ~ # ufw status verbose Status: active Logging: on (low) Default: deny (incoming), allow (outgoing), disabled (routed) New profiles: skip To Action From -- ------ ---- 22 ALLOW IN 192.168.3.0/24
ここまで表示できたら、他のターミナルからログインできることを確認します。ログインできればひとまず安心です。
本体の設定
LEDランプの設定
電源ランプが常に赤点灯していて、shutdownコマンド入力後に電源が付いているか分かりません。
各種サイト見て/boot/config.txtを操作するも、仕様が変わったためLEDを消すことができなかったので、起動時にLEDを制御する方向で解決しました。
/etc/rc.local
のexit 0より上に以下を追記します。
echo 0 > /sys/class/leds/led1/brightness
これで赤LEDは 起動時OFF・shutdown時にON になるようになります。
また、緑LEDは通常SDカードへ書き込みを行なっている際点滅しますが、以下の設定を/boot/config.txt
に記述すると、起動中は常にONになります。
### どこに書いても良い dtparam=act_led_trigger=default-on
赤LEDを操作する/boot/config.txt
の設定は無効化されている様子。
(221-222:As for act_led_*, but using the PWR LED. Not available on Model A/B boards. とのこと。以下ファームウェア)
github.com
これで幾分わかりやすくなりました。
CPU温度制限
85度で動作停止するとのことで、80度に達するとCPUがクロックを制限するらしいですが、80度に達する時点でいろいろ危ういので上限温度を下げます。
/boot/config.txtの最後に追加。
temp_limit=75
参考にしたサイト
つまづいたことのある問題
初めのSSHができない
sshファイルおよびwpa_supplicant.confを正しく作成してからラズパイを起動したかを確認します。
いずれかを用意し忘れたことに後から気がついて「ラズパイを強制停止→bootにファイルを追加→ラズパイを起動」は無効です。
詳しく調べた訳ではありませんが、初回起動時以外でboot内のsshファイルとwpa_supplicantを確認しないみたいです。balenaEtcherの書き込みからやり直します。
公開鍵認証でログインできない
初期状態であれば記載の手順で問題なく接続できるはずですが、permission denied
が表示される場合、次の内容を確認すべきです。
初期設定にかかわらず公開鍵認証でログインできない場合は虱潰し一つずつ設定が間違っていないかなどを確認しなければなりません。
ここでは解決法の説明は割愛します。