turtlechanのブログ

無知の私がLinuxをいじりながら書いていくブログ

RaspberryPi(Raspbian)初期設定

別PCからssh接続して設定することを想定して書いてます。

今回やること

最低限やるべき設定

  • ソフトウェアのアップデート
  • ユーザーの整備
  • sudoでパスワードを求めるように設定
  • raspi-configによる設定

必要に応じてやる設定

  • swapを無効化
  • ログ出力を抑制
  • ログ及びtmpの出力先をRamdisk(tmpfs)上に変更
  • Wi-FiBluetoothの無効化
  • HDMI出力をオフにする

準備

sshでラズパイに接続

ラズパイにログインするために初期ユーザーが用意されてる。最初はそれにログインして操作を行う。

初期ユーザー

ユーザー名 パスワード
pi raspberry

ログイン

ssh」コマンドの書式は以下。

ssh <ユーザー名>@<ラズパイのIPアドレス>

実際にログインします。ラズパイのIPアドレスは192.168.0.101としてます。

~$ ssh pi@192.168.0.101
~省略~
Are you sure you want to continue connecting (yes/no)? yes  ←「yes」と入力
~省略~
pi@192.168.0.101's password:  ←「raspberry」と入力
~省略~
pi@raspberrypi:~ $  ←こんな感じにプロンプトが変わればオッケー

※以前接続したことがあって環境が変わった場合以下の様なエラーが表示される。

悪意的に接続先を変えられた場合に気付けるようにするための仕様。

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@    WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!     @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
~省略~
Host key verification failed.

上記の場合は以下コマンドを実行して、前の情報を削除した後にsshでログインすればいい。

~$ $ ssh-keygen -R <IPアドレス>

管理者権限について

初期ユーザー(pi)は「sudo」コマンドをパスワードなしで初めから利用できる。また、rootはインストール直後にパスワードが設定されていないためログインすることはできない。

初期設定はpiにログインして「sudo」コマンドを使って行う。

最低限やるべき設定

Raspbianをインストールしたら絶対やっとくべき設定。

ソフトウェアのアップデート

アップデートを実行する前にリポジトリサーバーを変えときます(必須ではない)。「/etc/apt/sources.list」に設定があるので編集します。以下は上書き。おすすめしない。

pi@raspberrypi:~ $ sudo cp /etc/apt/sources.list /etc/apt/sources.list.old
pi@raspberrypi:~ $ sudo sh -c "echo 'deb http://ftp.jaist.ac.jp/raspbian stretch main contrib non-free rpi' > /etc/apt/sources.list"

初期の「/etc/apt/sources.list」を「/etc/apt/sources.list.old」としてバックアップ。「/etc/apt/sources.list」を上書きした。

「/etc/apt/source.list」ファイルの内容

↓変更前
deb http://raspbian.raspberrypi.org/raspbian/ stretch main contrib non-free rpi
# Uncomment line below then 'apt-get update' to enable 'apt-get source'
#deb-src http://raspbian.raspberrypi.org/raspbian/ stretch main contrib non-free rpi

↓変更後
deb http://ftp.jaist.ac.jp/raspbian stretch main contrib non-free rpi

ミラーサイトJAIST(北陸先端科学技術大学院大学)のもの。

アップデートの実行

処理をが終わるのを待って「update」「dist-upgrade」とか一個一個やるのも大変なので繋げて実行。

pi@raspberrypi:~ $ sudo apt-get update && sudo apt-get -y dist-upgrade && sudo apt-get -y autoremove && sudo apt-get autoclean

時間かかるから紅茶でも飲んで待ちましょう。

ユーザーの整備

実際初期設定の最後でいいと思われるけど、必須の設定としては優先度高めなのでここに書く。

初期ユーザー(pi)ってユーザー名もパスワードも決まってるし、「sudo」コマンドを好き放題使えるのでそのままだと危ないよねー。

新規ユーザーの追加

「useradd」コマンドで新規ユーザーを追加します。今回はユーザー名「tutlepi」を追加。所属グループはあとで設定する。

pi@raspberrypi:~ $ sudo useradd -m -s /bin/bash turtlepi

パスワードを設定していないのでまだログインできない。

「passwd」コマンドで新規ユーザーにパスワードを設定します。

pi@raspberrypi:~ $ sudo passwd turtlepi
Enter new UNIX password:  ←新しく設定するパスワードを入力
Retype new UNIX password:  ←もう一回入力
passwd: password updated successfully

有効期限等は指定してません。これでログインできるようになる。

「usermod」コマンドで新規ユーザーの所属グループを追加します。不都合のないように「id」コマンドで初期ユーザー(pi)の所属しているグループと同じにします。

↓初期ユーザー(pi)の所属グループを確認
pi@raspberrypi:~ $ id
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),101(input),108(netdev),997(gpio),998(i2c),999(spi)
↓新規ユーザーの所属グループを追加
pi@raspberrypi:~ $ sudo usermod -aG adm,dialout,cdrom,sudo,audio,video,plugdev,games,users,input,netdev,gpio,i2c,spi turtlepi
↓新規ユーザーの所属グループを確認(groupsが増えていればオッケー)
pi@raspberrypi:~ $ id turtlepi
uid=1001(turtlepi) gid=1001(turtlepi) groups=1001(turtlepi),4(adm),20(dialout),24(cdrom),27(sudo),29(audio),44(video),46(plugdev),60(games),100(users),101(input),108(netdev),999(spi),998(i2c),997(gpio)

sudoグループにも所属しているので新規ユーザーでsudoコマンドの使用可能。デフォで「/etc/sudoers」に「%sudo ALL=(ALL:ALL) ALL」となっている。

初期ユーザー(pi)の削除

新規ユーザーの追加が終われば初期ユーザー(pi)は用済みなので削除します。ちなみに初期ユーザー(pi)は消すべきではないという意見もあるので任意。

↓初期ユーザー(pi)からログアウト(ssh切断)
pi@raspberrypi:~ $ exit
logout
Connection to 192.168.0.101 closed.
↓新規ユーザーでログイン(ssh)
~$ ssh turtlepi@192.168.0.101
turtlepi@192.168.0.101's password:  ←新規ユーザー作成時に設定したパスワードを入力
↓初期ユーザー(pi)の削除
turtlepi@raspberrypi:~ $ sudo userdel -r pi
[sudo] password for turtlepi:  ←新規ユーザー作成時に設定したパスワードを入力
userdel: pi mail spool (/var/mail/pi) not found

sudoでパスワードを求めるように設定

sudoした時にパスワードを求めてこないのはセキュリティ上よろしくないので設定します(初期ユーザー(pi)のみ設定されている模様)。「/etc/sudoers.d/010_pi-nopasswd」ファイルの「pi ALL=(ALL) NOPASSWD: ALL」をコメントアウトするか、削除すればいい。

今回は削除します(今後使う機会もないし)。以下コマンド。

turtlepi@raspberrypi:~ $ sudo rm /etc/sudoers.d/010_pi-nopasswd 

raspi-configによる設定

「raspi-config」コマンドで色々設定します。

turtlepi@raspberrypi:~ $ sudo raspi-config

上記コマンドを実行すると以下の画面になる。カーソルキーとEnterキーで操作します。

raspi-configの起動画面

変更したのは以下。

  • 2 Network Options → N1 Hostname で任意のホスト名を入力
  • 3 Boot Options → B1 Desktop / CLI で「B1 Console」を選択
  • 4 Localisation Options → I1 Change Locale で「en_GB.UTF-8 UTF-8」のチェックを外し「ja_JP.UTF-8 UTF-8」にチェック、次の画面で「ja_JP.UTF-8」を選択
  • 4 Localisation Options → I2 Change Timezone で「Asia」を選択、次の画面で「Tokyo」を選択
  • 4 Localisation Options → I4 Change Wi-fi Country で「JP」を選択
  • 7 Advanced Options → A1 Expand Filesystem で……あれ?勝手になってる?
  • 7 Advanced Options → A3 Memory Split で最小の「16」を入力
  • <Finish>でリブート

Raspberry Pi 公式ドキュメントを日本語訳に詳細が日本語で書かれているので参考に設定するといい。

必要に応じてやる設定

やらなくてもいい。自分の環境に合わせて設定。

swapを無効化

microSDに書き込みが多くなると寿命が縮まるのでswapをオフにします。

「free」コマンドで現状確認

turtlepi@raspberrypi:~ $ free -h
              total        used        free      shared  buff/cache   available
Mem:           975M         34M        812M         18M        128M        872M
Swap:           99M          0B         99M  ←約100MB確保されています

swapを無効化する

Stretchの場合

turtlepi@raspberrypi:~ $ sudo dphys-swapfile swapoff  ←swapを止めます(必要ないかも)
turtlepi@raspberrypi:~ $ sudo systemctl stop dphys-swapfile.service  ←今動いてるswapサービスを停止
turtlepi@raspberrypi:~ $ sudo systemctl disable dphys-swapfile.service  ←swapサービスの起動を無効化
dphys-swapfile.service is not a native service, redirecting to systemd-sysv-install.
Executing: /lib/systemd/systemd-sysv-install disable dphys-swapfile
turtlepi@raspberrypi:~ $ sudo rm /var/swap  ←swapファイルの削除

Jessie以前の場合

turtlepi@raspberrypi:~ $ sudo dphys-swapfile swapoff  ←swapを止めます
turtlepi@raspberrypi:~ $ sudo chkconfig dphys-swapfile off  ←swapサービスの起動を無効化
turtlepi@raspberrypi:~ $ sudo rm /var/swap  ←swapファイルの削除

よく'sudo apt-get purge --auto-remove dphys-swapfile'でパッケージを削除するのを見るけど、必要になったときあとから入れられるのかな?

無効になったか確認

再起動後、Swapが0になってるか確認します

turtlepi@raspberrypi:~ $ free -h
              total        used        free      shared  buff/cache   available
Mem:           975M         33M        874M         12M         67M        881M
Swap:            0B          0B          0B  ←0Bになってますね

ログ出力を抑制

ログなんて見ないからほぼいらん。microSDの寿命のほうが心配。

テキストエディタを使って「/etc/rsyslog.conf」ファイルを編集する。

turtlepi@raspberrypi:~ $ sudo vi /etc/rsyslog.conf

RULES以下に記載されている設定の先頭に「#」をつけてコメントアウトする。

###############
#### RULES ####
###############

#
# First some standard log files.  Log by facility.
#
auth,authpriv.*			/var/log/auth.log
*.*;auth,authpriv.none		-/var/log/syslog
#cron.*				/var/log/cron.log
daemon.*			-/var/log/daemon.log
kern.*				-/var/log/kern.log
lpr.*				-/var/log/lpr.log
mail.*				-/var/log/mail.log
user.*				-/var/log/user.log

#
# Logging for the mail system.  Split it up so that
# it is easy to write scripts to parse these files.
#
mail.info			-/var/log/mail.info
mail.warn			-/var/log/mail.warn
mail.err			/var/log/mail.err

#
# Some "catch-all" log files.
#
*.=debug;\
	auth,authpriv.none;\
	news.none;mail.none	-/var/log/debug
*.=info;*.=notice;*.=warn;\
	auth,authpriv.none;\
	cron,daemon.none;\
	mail,news.none		-/var/log/messages

#
# Emergencies are sent to everybody logged in.
#
*.emerg				:omusrmsg:*

編集が終わったら、設定を反映するためサービスの再起動。

turtlepi@raspberrypi:~ $ sudo systemctl restart rsyslog

ログ及びtmpの出力先をRamdisk(tmpfs)上に変更

microSDへの書き込みを減らすためログとtmpの出力先をRamdisk上に変更します。電源を切るとRamdisk上に変更したファイルはすべて消えるため、定期的にバックアップが必要です。

「/etc/fstab」ファイルを編集する。

turtlepi@raspberrypi:~ $ sudo sh -c "echo '' >> /etc/fstab"
turtlepi@raspberrypi:~ $ sudo sh -c "echo '# My Setting' >> /etc/fstab"
turtlepi@raspberrypi:~ $ sudo sh -c "echo 'tmpfs           /tmp            tmpfs   defaults,size=32m,noatime,mode=1777  0       0' >> /etc/fstab"
turtlepi@raspberrypi:~ $ sudo sh -c "echo 'tmpfs           /var/tmp        tmpfs   defaults,size=16m,noatime,mode=1777  0       0' >> /etc/fstab"
turtlepi@raspberrypi:~ $ sudo sh -c "echo 'tmpfs           /var/log        tmpfs   defaults,size=32m,noatime,mode=0755  0       0' >> /etc/fstab"

あらかじめファイルやディレクトリが用意されていないと問題があるそうなので、「/etc/rc.local」ファイルを編集して起動時に自動で生成してもらいます。

turtlepi@raspberrypi:~ $ sudo vi /etc/rc.local
#!/bin/sh -e
#
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will "exit 0" on success or any other
# value on error.
#
# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing.

# Print the IP address
_IP=$(hostname -I) || true
if [ "$_IP" ]; then
  printf "My IP address is %s\n" "$_IP"
fi

# My Setting For 'tmpfs'
# make Directory
mkdir -p /var/log/apt
mkdir -p /var/log/ConsoleKit
mkdir -p /var/log/fsck
mkdir -p /var/log/ntpstats
mkdir -p /var/log/samba
# mkdir -p /var/log/apache2
# owner change
chown ntp:ntp /var/log/ntpstats
chown root:adm /var/log/samba
# chown root:adm /var/log/apache2
# mode change
chmod 750 /var/log/samba
# chmod 750 /var/log/apache2
# make File
touch /var/log/lastlog
touch /var/log/btmp
touch /var/log/wtmp
# touch /var/log/apache2/access.log
# touch /var/log/apache2/error.log
# touch /var/log/apache2/other_vhosts_access.log
# touch /var/log/apache2/ssl_access.log
# owner change
chown root:utmp /var/log/lastlog
chown root:utmp /var/log/btmp
chown root:utmp /var/log/wtmp
# chown root:adm /var/log/apache2
# chown root:adm /var/log/apache2/access.log
# chown root:adm /var/log/apache2/error.log
# mode change
chmod 664 /var/log/lastlog
chmod 600 /var/log/btmp
chmod 664 /var/log/wtmp
# chmod 640 /var/log/apache2/access.log
# chmod 640 /var/log/apache2/error.log

exit 0

ピンクが追記部分。

Wi-FiBluetoothの無効化

「/boot/config.txt」を編集する。
「/boot/config.txt」ってなんぞって場合は、Raspberry Pi 公式ドキュメントを日本語訳を参照。

書き込む内容は以下

# My Setting Edit
# Wi-Fi disable
dtoverlay=pi3-disable-wifi
# Bluetooth disable
dtoverlay=pi3-disable-bt

「/boot/config.txt」ファイルに書き込む。echoをリダイレクトで追記していますが、通常はテキストエディタを使用してください。

turtlepi@raspberrypi:~ $ sudo cp /boot/config.txt /boot/config.txt.old  ←バックアップを取っておく
turtlepi@raspberrypi:~ $ sudo sh -c "echo '' >> /boot/config.txt"
turtlepi@raspberrypi:~ $ sudo sh -c "echo '# My Setting Edit' >> /boot/config.txt"
turtlepi@raspberrypi:~ $ sudo sh -c "echo '# Wi-Fi disable' >> /boot/config.txt"
turtlepi@raspberrypi:~ $ sudo sh -c "echo 'dtoverlay=pi3-disable-wifi' >> /boot/config.txt"
turtlepi@raspberrypi:~ $ sudo sh -c "echo '# Bluetooth disable' >> /boot/config.txt"
turtlepi@raspberrypi:~ $ sudo sh -c "echo 'dtoverlay=pi3-disable-bt' >> /boot/config.txt"

「/boot/config.txt」に追記されたか確認

turtlepi@raspberrypi:~ $ cat /boot/config.txt
~省略~

# My Setting Edit
# Wi-Fi disable
dtoverlay=pi3-disable-wifi
# Bluetooth disable
dtoverlay=pi3-disable-bt

他にも色々な制御ができる。「/boot/overlays/README」ファイルを読むといい。

HDMI出力をオフにする

HDMI出力をオフにするには以下を実行すればいい。

turtlepi@raspberrypi:~ $ sudo /opt/vc/bin/tvservice -o

起動するたびに毎回やってられないので「/etc/rc.local」に記述して自動で実行してもらう。

sudo vi /etc/rc.local
~省略~
/opt/vc/bin/tvservice -o  ←これを追記

exit 0

おわりに

他にも色々あるんでしょうけど、自分が設定するのにメモしてたやつを書き起こしてみた。

私の設定なので間違ってるところもあるかもしれないが、環境に合わせて参考にしてください。いや、なれば幸いです。