その1からの続き
前回、SSHで接続する設定および最低限のセキュリティ設定まで実施したので、今回はOSの追加設定をしていこうと思う。
設定作業
今回の目標であるOS諸々の設定については、昔なにやらごちゃごちゃやりまくった記憶はあるものの、何をやったかの具体的な記憶がないので、後から追記する可能性高し。(だからこうやって記録に残そうと思ったのだけど)
OSの基本設定
1. ホストネーム設定
ホストネーム(ラズパイのPC名)がデフォルトだとraspberry
になっている。長いし、複数台使うときには訳分からない状態になったりするので、名前を一意なものに変更しよう。
いつもなら、以下のように~~ctlというコマンドで入れるところだが……。(以下、全般的にore-no-hosts
とore-no-domain
には自分の運用環境に合わせたホスト名とドメイン名を入れかえて読んで欲しい。)
# hostnamectl set-hostname ore-no-hosts.ore-no-domain
Debian系でこのhostnamectl
コマンドを使うには1つ落とし穴がある。Debianでは、hostnameにドメインを入れてはいけないと明言されている。
ドメイン込みでhostnamectl set-hostname
した場合、そのまま/etc/hostname
に書き込まれてしまうため、Debianの仕様上は正しくない設定になってしまう。(ただし、"恐らく"動作にさほど影響はないはず)
よって、地道に/etc/hostname
と/etc/hosts
を変更することにする。
# vi /etc/hostname
- raspberry
+ ore-no-hosts
/etc/hostname
はホストネームが書かれている1行だけのファイル。現在ある行を削除して、代わりに設定したいホスト名ore-no-hosts
を入れればOK。
# vi /etc/hosts
省略
- 127.0.1.1 raspberrypi
+ 127.0.1.1 ore-no-hosts.ore-no-domain ore-no-hosts
設定を変更したら、再起動。
# hostname
ore-no-hosts
# hostname -d
ore-no-domain
# hostname -f
ore-no-hosts.ore-no-domain
これでよし。
2. 時刻設定
Linuxの時刻設定と言えば/etc/localtime
が鉄板だが、最近のLinuxには、timedatectl
というコマンドが用意されている。もちろん、Raspbian Busterの元であるDebian Busterにもある。先のホスト名のような落とし穴もないので、こちらで実行する。
# timedatectl
Local time: 木 2020-07-09 04:09:44 BST
Universal time: 木 2020-07-09 03:09:44 UTC
RTC time: n/a
Time zone: Europe/London (BST, +0100)
System clock synchronized: yes
NTP service: active
RTC in local TZ: no
デフォルトだと協定世界時(UTC)……かと思いきや、Local timeは英国夏時間(BST)。夏時間採用してんのか。
まあ良い。日本人には関係ないので、日本標準時(JST)に変えてしまおう。
# timedatectl set-timezone Asia/Tokyo
# timedatectl
Local time: 木 2020-07-09 12:17:34 JST
Universal time: 木 2020-07-09 03:17:34 UTC
RTC time: n/a
Time zone: Asia/Tokyo (JST, +0900)
System clock synchronized: yes
NTP service: active
RTC in local TZ: no
# date
2020年 7月 9日 木曜日 12:18:26 JST
人を信じられないタイプなのでdate
コマンドでも確認。ちゃんとJSTになっているようだ。
時刻同期の設定を確認すると、上記結果の中で、「NTP service」の項目がactiveになっているため、同期が実行されていることが分かる。どこに同期されているかの設定は/etc/systemd/timesyncd.conf
のファイルに書いてある。
# cat /etc/systemd/timesyncd.conf
~省略~
[Time]
#NTP=
#FallbackNTP=0.debian.pool.ntp.org 1.debian.pool.ntp.org 2.debian.pool.ntp.org 3.debian.pool.ntp.org
#RootDistanceMaxSec=5
#PollIntervalMinSec=32
#PollIntervalMaxSec=2048
今はいずれも#
でコメントアウトされているが、NTPがメインの同期先で、FallbackNTPが予備の同期先である。日本のNTPサーバに同期した方が良いので、設定を入れよう。
FallbackNTPは、スペースを挟むことで複数入れることができる。
# vi /etc/systemd/timesyncd.conf
~省略~
[Time]
NTP=ntp.jst.mfeed.ad.jp
FallbackNTP=ntp.nict.jp ntp1.jst.mfeed.ad.jp ntp2.jst.mfeed.ad.jp ntp3.jst.mfeed.ad.jp
[Time]の次に上記2行を追加する。元の設定はどうせコメントアウトされているので、特に消さずともOK。
どんだけmfeed好きなんだよっていう。まあNICTより好きなのでしょうがないです。
NICT好きな人はNTPの行をNICTにして、FallbackNTPを別のNTPサーバにしてね。
設定を変更したら、同期しているサービスを再起動。デフォルトだとntpdは入ってなくて、systemdの中のtimesyncdというサービスが同期をしている。
# systemctl restart systemd-timesyncd
特にエラーも何もなく再起動できれば良し。
3. swap無効化
WEBサーバを動かす上ではメモリ不足への緊急対応のためにSWAPがあった方がいいのだが、記憶装置がSDカードであるRaspberry PiでSWAPをされると、SDカードへの負担が半端ない。安定稼働のためには、むしろSWAPしない方が良かろう。
とりま、現在のSWAP領域を確認する。
# free -h
total used free shared buff/cache available
Mem: 432Mi 34Mi 330Mi 8.0Mi 67Mi 340Mi
Swap: 99Mi 0B 99Mi
100MBくらいあるな。usedが0なので、SWAPは全く行われていない(何もしてなから当たり前だが)。
続けてswapサービスの稼働状態を確認。
# systemctl list-unit-files -t service | grep "swap"
dphys-swapfile.service enabled
# systemctl status dphys-swapfile
● dphys-swapfile.service - dphys-swapfile - set up, mount/unmount, and delete a swap file
Loaded: loaded (/lib/systemd/system/dphys-swapfile.service; enabled; vendor preset: enabled)
Active: active (exited) since ~~
省略
サービスの状態がenabled
なので、自動起動する設定になっている。また、systemctl status
で見るとActive: の行に active (exited) と出てくるので、現在もサービス稼働中である。
上記のように、サービス名が分からない時はlist-unit-files -t service
からgrep
でそれっぽいものを探す。目的のサービス名(今回はdphys-swapfile
)が分かっているなら、systemctl is-enabled dphys-swapfile
でも自動起動の状態を確認できる。
というわけでswapを落とす。
# swapoff --all
# systemctl stop dphys-swapfile
# systemctl disable dphys-swapfile
# rm /var/swap
swapoff
でswapの無効化、systemctl
でサービス停止と自動起動の無効化をする。最後にswapファイルを削除。
無効化されているかを確認する。
# free
total used free shared buff/cache available
Mem: 442788 37376 332840 8728 72572 347136
Swap: 0 0 0
# systemctl status dphys-swapfile
● dphys-swapfile.service - dphys-swapfile - set up, mount/unmount, and delete a swap file
Loaded: loaded (/lib/systemd/system/dphys-swapfile.service; disabled; vendor preset: enabled)
Active: inactive (dead)
省略
ちゃんと無効化されている。
ちなみに、メモリ不足に陥ってswapを使いたくなった場合には、再度サービスを有効化すればよい。systemctl start dphys-swapfile
でサービスが有効化され、swapも稼働し始める。一時的ではなく長期的にswapを使うなら、加えてsystemctl enable dphys-swapfile
でサービスを自動起動するように設定しよう。
4. vim入れ替え
今更だが、vimが使いにくい。もっと使いやすいやつにしたい。
とりあえず今入っているvimを確認してみる。
# apt list --installed vim*
一覧表示... 完了
vim-common/stable,now 2:8.1.0875-5 all [インストール済み]
vim-tiny/stable,now 2:8.1.0875-5 armhf [インストール済み]
vim-tiny
……だと……?
デフォだとだいたいこれなんだけれど、それ機能的に一番しょぼいやつ。
これではご満足いただけないので、もうちょい良い物を入れ直しましょう。
まずは何が入れられるかを確認。
# apt list vim*
一覧表示... 完了
vim-addon-manager/stable 0.5.10 all
vim-addon-mw-utils/stable 0.2-1 all
vim-airline-themes/stable 0+git.20180730-6e798f9-1 all
vim-airline/stable 0.10-1 all
vim-asciidoc/stable 8.6.10-3 all
vim-athena/stable 2:8.1.0875-5 armhf
省略
結構出てくる。中には明らかに拡張パック(addon)的なものもあるので、選択肢としては
- vim-athena
- vim-gtk
- vim-gtk3
- vim-nox
- vim-tiny
- vim
あたり?
それぞれの違いについては「vim 種類」とか該当のパッケージ名とかでググっておくれ。
vim-gnome
がないのは、初期のインストールでGUIを入れなかったからかな。
ここではvim*
で探索しているのでリストに出てこないが、漢字入力可能なjvim-canna
ってのも別途あったりする。
クリップボードを使いたいので今回はvim-athena
を入れましょうかね。GUIがついてきて重いのが難ですが。
まずはvim.tiny
を削除。--purge
オプションをつけると、設定ファイルも全部削除してくれるのでゴミが残りにくいぞ!
# apt remove --purge vim-common vim-tiny
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています
状態情報を読み取っています... 完了
以下のパッケージは「削除」されます:
vim-common* vim-tiny*
続行しますか? [Y/n] y
~省略~
vim-tiny (2:8.1.0875-5) の設定ファイルを削除しています ...
vim-common (2:8.1.0875-5) の設定ファイルを削除しています ...
続いてvim-athena
をインストール。
# apt install vim-athena
以下の追加パッケージがインストールされます:
fonts-lato javascript-common libice6 libjs-jquery liblua5.2-0 libruby2.5 libsm6 libtcl8.6 libxaw7 libxmu6 libxpm4 libxt6
libyaml-0-2 rake ruby ruby-did-you-mean ruby-minitest ruby-net-telnet ruby-power-assert ruby-test-unit ruby-xmlrpc ruby2.5
rubygems-integration vim-common vim-gui-common vim-runtime x11-common zip
続行しますか? [Y/n] y
~省略~
68.2MBとか言われて「デカッ!」とかなるけど、インストールは完了。
設定を変更したい場合は、各ユーザの~/.vimrc
を編集すればよろし。
set clipboard=unnamedplus
を~/.vimrc
に入れると、クリップボードが使えるようになるはず。
5. ファイアウォール(FW)
前回はほとんどルータ任せにして投げたセキュリティ設定ですが、FWを設定しておくと安心感がある。
ただし、ルータのセキュリティ等々と二重管理になると、通過させたいパケットが通らない時に何が原因か探るのが難しくなるので、特に理由が無ければ一元管理を推奨。
以前はFWと言えばiptables
をufw
で管理する形だったけれど、最近のOSはFirewalldが導入され、こちらでの設定が増えてきていると思う。
Firewalldの使い方についてはこちらの記事が大変詳しいので、お借りします。
CentOS 7 firewalld よく使うコマンド
CentOS7の記事だけど、FirewalldのコマンドについてはDebian系も同じなので、そのまま読んで問題ナシ!
あとはこちらも大変勉強になります。
How To Install and Configure Firewalld on Debian 10 (Buster)
Debian BusterはデフォルトだとFWのパッケージがないので、インストールからスタート。
# apt install firewalld
ちゃんとインストールできたか確認。
# systemctl status firewalld
おまけの導入物
別に入れる必要があるわけでは全くないのだが、個人的に入れたい。
1. screenfetch
ログインした時に、カラフルなロゴを見たい! と思うアナタ、「screenfetch」を入れましょう。
# wget --no-check-certificate -O /usr/local/bin/screenfetch https://raw.githubusercontent.com/KittyKatt/screenFetch/master/screenfetch-dev
# chmod 755 /usr/local/bin/screenfetch
これで「screenfetch」の導入が完了。
あとは、/etc/update-motd.d
ディレクトリの中に/usr/local/bin/screenfetch
を実行させるスクリプトを書いて、属性を755に変更すれば、ログインする時に画面に表示されるようになるぞ!
#!/bin/bash
echo -e "/usr/local/bin/screenfetch
"> /etc/motd
最低限のスクリプト。もっと色々表示させたい人はここに追記していこう。
こちらが大変参考になりますよ。
「motd」「.bashrc」…LinuxにSSH接続した時のメッセージを動的に変化させる方法
ysaotome/update_motd_by_screenfetch.sh