38
52

More than 3 years have passed since last update.

Raspberry Pi 4でUbuntuサーバーの初期設定を行う

Last updated at Posted at 2021-03-05

2020年に書いたRaspberry pi 4構築手順の続編.今回はラズパイ4で8GB版が発売され、ubuntuがraspberry piに正式対応したので、ラズパイを本格的なサーバーとして運用すべくラズパイ4(8GB)にubuntuを設定します.構築しながら書いているので、読みにくかったり、順番が前後する箇所があります.

注意:ここに書かれている情報は2021年03月執筆時点での情報です.

この記事はDockerをラズパイで動かそうシリーズ(?)の一つです

前提条件

  • Raspberry pi 4 Model B 8GB RAM
  • Ubuntu Server 20.04.2 LTS
  • リモート接続元
    • macOS Big Sur(V11.2.2)

ラズパイにOSをインストールする

イメージ書き込みツール「Raspberry Pi Imager」を使用します.まず、SDカードを差し込んでイメージを書き込みます.

  1. ダウンロードページに行きインストーラーをダウンロードします スクリーンショット 2021-03-04 19.20.28.png
  2. ダウンロードしたインストーラーを開いてアプリケーションフォルダにインストール スクリーンショット 2021-03-04 19.22.46.png
  3. 好きなOSを選択します。今回は64bitのUbuntuサーバーを書き込みます スクリーンショット 2021-03-04 19.46.27.png
  4. 書き込むSDカードを選び スクリーンショット 2021-03-04 19.47.33.png
  5. 最後に「WRITE」ボタンを押すとSDカードへの書き込みが開始されます。書き込みが終わるとOSイメージのSDカード作成は完了です スクリーンショット 2021-03-04 19.47.51.png

あとはSDカードをラズパイにさして電源を入れれば起動します.

ubuntuに初期設定されているユーザーは以下の通りです。

user: ubuntu
Password: ubuntu

パスワード変更を要求されるので変更しましょう.

参考リンク

キーボード設定

以降は、raspberry piを直接ディスプレイに表示して操作。US配列を使用している場合以下の設定は不要.

sudo dpkg-reconfigure keyboard-configuration
  1. 以上のコマンドを実行
  2. 「Generic 105-key PC (intl.)」を選択
  3. 「Japanese」を選択
  4. 「Japanese」を選択
  5. 「The default for the keyboard layout」を選択
  6. 「No compose key」を選択で終了

参考リンク

LAN設定/固定IP化

ip aとコマンドを入力してアダプターを確認する。私のラズパイでは無線LANアダプターはwlan0で有線はeth0だった.
Ubuntuではネット接続の設定にはNetplanを利用する.デフォルトでは/etc/netplan/50-cloud-init.yamlに設定ファイルがある.

/etc/netplan/99_config.yamlを作成し例えば以下のように設定する.wlan0の部分は無線LANアダプターの設定により変わる.例では有線も固定IPを振っている.gateway4にはルーターのIP(大抵192.168.0.1)を設定し、nameserversにはDNSサーバーを設定する.
access-points項目でSSID名とpasswordを設定(※SSID-HOGEHOGEとパスワードのXXXXXXXXXは環境に合わせて適時設定).

sudo touch /etc/netplan/99_config.yaml
sudo vi /etc/netplan/99_config.yaml
/etc/netplan/99_config.yaml
network:
  version: 2
  renderer: networkd
  ethernets:
    eth0:
      dhcp4: false
      dhcp6: false
      addresses:
        - 192.168.0.YYY/24
      gateway4: 192.168.0.XXX
      nameservers:
          addresses: [192.168.0.XXX, 8.8.8.8, 8.8.4.4]
  wifis:
    wlan0:
      dhcp4: false
      dhcp6: false
      addresses:
        - 192.168.0.YYY/24
      gateway4: 192.168.0.XXX
      nameservers:
          addresses: [192.168.0.XXX, 8.8.8.8, 8.8.4.4]
      access-points:
          "SSID-HOGEHOGE":
              password: "XXXXXXXXX"

上記を保存後変更を適用

sudo netplan apply

ip aコマンドを実行して固定IPが割り振られているか確認する

$ ip a
3: wlan0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    inet 192.168.0.XX/24 brd 192.168.0.255 scope global noprefixroute wlan0
       valid_lft forever preferred_lft forever

rendererの箇所をNetworkManagerにしたい場合は事前にnetwork-managerをインストールしておく。

apt install network-manager

参考リンク

うまくいかなかった場合

sudo netplan --debug tryでデバッグ。

Job for netplan-wpa-wlan0.service canceled.
Traceback (most recent call last):
  File "/usr/share/netplan/netplan/cli/commands/try_command.py", line 84, in command_try
    NetplanApply().command_apply(run_generate=True, sync=True, exit_on_error=False)
  File "/usr/share/netplan/netplan/cli/commands/apply.py", line 160, in command_apply
    utils.systemctl_networkd('stop', sync=sync, extra_services=wpa_services)
  File "/usr/share/netplan/netplan/cli/utils.py", line 125, in systemctl_networkd
    subprocess.check_call(command)
  File "/usr/lib/python3.8/subprocess.py", line 364, in check_call
    raise CalledProcessError(retcode, cmd)
subprocess.CalledProcessError: Command '['systemctl', 'stop', 'systemd-networkd.service', 'netplan-wpa-*.service']' returned non-zero exit status 1.

それでも接続に失敗する場合はGUI上で設定する(GUIインストール手順は後述).私の場合はWi-Fi設定がどうしてもうまくいかなった.

ssh有効化

ラズパイをインターネットに接続した状態で以下のコマンドを実行してsshを有効化するが、なぜか失敗する.

$ sudo apt -y install openssh-server #openssh-serverを入れていない場合は実行
$ sudo apt update  #インストール可能なパッケージの一覧を更新
$ sudo apt upgrade  #インストール済みのパッケージ更新をおこなう
$ sudo systemctl start ssh #ssh起動

sshプロセスが起動しないので、debugのため/etc/default/sshを以下のように編集. 参照サイト.

SSHD_OPTS=-ddd

再度sudo systemctl start sshを実行してjournalctl -xeでログを確認すると以下のログが.

Mar 04 18:37:55 ubuntu sudo[1979]: pam_unix(sudo:auth): Couldn't open /etc/securetty: No such file or directory

とりあえず、/usr/share/doc/util-linux/examples/securettyからコピーしてくる。

sudo cp /usr/share/doc/util-linux/examples/securetty /etc/securetty

なお下記のサイトを参考にした

それでも同じエラーが出るのでopenssh-serverを再インストールする.解決(おそらくファイルが壊れていた?)参照

sudo apt-get purge openssh-server
sudo apt-get install openssh-server
service ssh start #ssh起動
systemctl status  ssh #ssh起動確認

リモート接続元からssh ubuntu@192.168.0.XXXで接続できるか確認。これ以降はリモートでラズパイを操作可能。

参考リンク

Ubuntu 20.04 LTS : OpenSSH : パスワード認証 : Server World

デスクトップ環境の導入

ごく稀にデスクトップ環境が欲しくなるので、導入しておく.今回は無線LANの設定がうまくいかなかったので、GUI上でWiFi設定を行うために行った.
まずはインストール可能なパッケージの一覧を更新

sudo apt-get update

デスクトップ環境のインストール.気長に待ちましょう.

sudo apt-get -y install ubuntu-desktop

インストールが終わったら再起動してGUIが起動しているか確認します。

sudo shutdown -r now

参考

リモートデスクトップ接続

二つの方法を示します.TigerVNCを使ったリモートデスクトップの場合はラズパイをsshやコマンドラインのみで操作したい場合に有効です.UbuntuのGUI画面上から画面共有を有効にするの場合はラズパイ起動時になんらかのディスプレイに出力していた場合に使用できます.接続が安定しているのは後者ですが、そもそもラズパイをサーバー用途で使用する場合は前者のケースが多いでしょう.

TigerVNCを使ったリモートデスクトップ

VNCサーバーをインストールします.tigervncを使用します.

sudo apt -y install tigervnc-standalone-server tigervnc-xorg-extension tigervnc-viewer

vncを許可するユーザでログインします.

su <<ユーザー名>>

VNC パスワード設定を行います,

$ vncpasswd
Password:
Verify:
Would you like to enter a view-only password (y/n)? n 

VNCサーバーが起動するか確認.確認ができたら停止します.UbuntuをGUIモードで起動した場合はvncserver :1が既に使用されている場合があるので、ラズパイからHDMIなどの映像出力端子を抜いて再起動してください.

$ vncserver :1 

New 'linux:1 (ubuntu)' desktop at :1 on machine linux

Starting applications specified in /etc/X11/Xvnc-session
Log file is /home/ubuntu/.vnc/linux:1.log

Use xtigervncviewer -SecurityTypes VncAuth -passwd /home/ubuntu/.vnc/passwd :1 to connect to the VNC server.
$ vncserver -kill :1 
Killing Xtigervnc process ID 2658... success!

設定ファイルを作成します.使用できるデスクトップ環境(gnome-session)の部分は/usr/share/xsessions/で確認できる.

~/.vnc/xstartup
#!/bin/sh

[ -x /etc/vnc/xstartup ] && exec /etc/vnc/xstartup
[ -r $HOME/.Xresources ] && xrdb $HOME/.Xresources
vncconfig -iconic &
dbus-launch --exit-with-session gnome-session &

再びVNCサーバーを起動.ラズパイで起動したい場合はLD_PRELOAD=/lib/aarch64-linux-gnu/libgcc_s.so.1を付加する必要がある.関連イシュー.

# ディスプレイ番号 [1], 解像度 [800x600] で起動
$ LD_PRELOAD=/lib/aarch64-linux-gnu/libgcc_s.so.1 vncserver :1 -geometry 800x600 -localhost no

Macの場合プリインストールされているアプリで画面共有が可能.tigervncの場合デフォルトでは590[ディスプレイ番号]のポートが空いているので、そのポートに接続する.

#5901ポートが空いているか確認
$ ss -lnt
State   Recv-Q    Send-Q  Local Address:Port   Peer Address:Port     Process
LISTEN  0         5             0.0.0.0:5901          0.0.0.0:* 

スクリーンショット 2021-03-05 22.08.53.png

vncserverをまとめて消したい場合は以下のコマンドを実行

vncserver -kill :*

参考サイト

UbuntuのGUI画面上から画面共有を有効にする.

右上のメニューから[Settings]を選んだのち[Sharing]を選び.[Screen Sharing]を有効化します.一応パスワードも設定しておきます.

スクリーンショット 2021-03-05 17.28.57.png

リモート接続元からVNCクライアントを使用して接続すると接続エラーが発生する。これはUbuntuのVNCサーバーが暗号化通信を要求しているにもかかわらず、WinやMacのVNCクライアントが暗号化通信を使っていないのが原因らしい.なので、ターミナルから以下のコマンドを実行して暗号化通信を無効化する

sudo gsettings set org.gnome.Vino require-encryption false
(process:2734): dconf-WARNING **: 08:20:32.021: failed to commit changes to dconf: Cannot autolaunch D-Bus without X11 $DISPLAY

設定を確認.設定が無効化になっていないか、上のようにWarnningが出ていれば設定反映に失敗しているので、DISPLAY=:0を付加して再設定.VNCクライアントから接続できるか確認.

$ gsettings list-recursively org.gnome.Vino
$ DISPLAY=:0 gsettings set org.gnome.Vino require-encryption false
$ sudo gsettings set org.gnome.Vino require-encryption false

普段デスクトップ環境は使わないので無効化したい場合は以下のコマンドを実行。参考

sudo systemctl set-default multi-user.target #デスクトップ環境を無効化したい場合
sudo systemctl set-default graphical.target #デスクトップ環境を有効化したい

以後、リモートデスクトップ接続したい場合はssh接続したのちVNCを起動する

参考サイト

パッケージ最新化

定期的に以下のコマンドを実行してパッケージを最新化

$ sudo apt update  #インストール可能なパッケージの一覧を更新
$ sudo apt upgrade  #インストール済みのパッケージ更新をおこなう
$ sudo apt install update-manager #初回のみ実行

以下のように新しいバージョンが出ていなければ以下の結果が表示される.

ubuntu@ubuntu:~$ sudo do-release-upgrade
[sudo] password for ubuntu: 
Checking for a new Ubuntu release
There is no development version of an LTS available.
To upgrade to the latest non-LTS development release 
set Prompt=normal in /etc/update-manager/release-upgrades.

参考サイト

ラズパイにSSH接続(鍵認証)

sshのログイン方法を公開鍵認証にする。

  • ssh接続元で鍵生成をする
ssh-keygen -t rsa
  • 一旦、ラズパイ(ssh接続先)にssh接続した後。ホームディレクトリ(~/)で隠しディレクトリ.ssh等々の作成を行う。
# ログイン
$ ssh hoge_user@hogehoge.hoge.com
$ ls #.sshフォルダとauthorized_keysが存在するか確認
# フォルダとファイルを作る(既に存在している場合は実行しなくても可)
$ mkdir .ssh
$ touch .ssh/authorized_keys
  • ssh接続元の公開鍵(デフォルトだとid_rsa.pub)を転送。
$ scp ~/.ssh/id_rsa.pub pi@192.168.nnn.nnn:~/.ssh
  • ssh接続先の権限設定。公開鍵をauthorized_keysに登録。
# 権限の設定。個々を間違えると、公開鍵認証でログイン出来ないので注意
$ sudo chmod 700 .ssh
$ cat ~/.ssh/id_rsa.pub >> .ssh/authorized_keys # 公開鍵の内容を追加。
$ sudo chmod 600 .ssh/authorized_keys 
$ rm ~/.ssh/id_rsa.pub # SCPした公開鍵を削除削除
  • /etc/ssh/sshd_configを変更してsshの各種設定を行う。以下の各種設定は万が一攻撃者がきても簡単に侵入させないようにするため。
/etc/ssh/sshd_config
# port番号設定
Port nnnnn

# rootログインの禁止
PermitRootLogin no

# 鍵認証を有効化
PubkeyAuthentication yes

# パスワード認証を無効化
PasswordAuthentication no
  • sshサーバーを再起動
$  sudo systemctl restart ssh 
  • 接続の確認
$ ssh -i .ssh/[非公開鍵] -p [port番号] pi@nnn.nnn.nnn.nnn

参考サイト

ファイアウォール設定

ubuntuにはufwがプリインストールされていますが、有効になっていないので有効化しておきます.リモートデスクトップやsshのポートを閉じないように気をつけてください.

$ sudo apt upgrade ufw  # ufwのアップデート
$ sudo ufw allow 99  # ポートの開放
$ sudo ufw default deny  # 許可されたポート以外を閉じる
$ sudo ufw enable  # ufwの有効化

もう少し細かく設定したい場合はufwコマンドの使い方を参照。

スワップを無効にする

スワップ領域を確認。Ubuntuではスワップ領域の設定がされていない

$ free -h
              total        used        free      shared  buff/cache   available
Mem:          7.6Gi       744Mi       6.0Gi        13Mi       909Mi       6.8Gi
Swap:            0B          0B          0B

不要パッケージの削除

不要なパッケージを消します.Ubuntuデスクトップを入れた場合、Libre Office、ThunderbirdとMahjonggなどが入っているので必要なら消します.

$ sudo apt remove --purge libreoffice* #Libre Officeを消す
$ sudo apt clean
$ sudo apt autoremove

ロケール設定

この記事の内容を参考にして設定変更

timezoneの変更

$ sudo timedatectl set-timezone Asia/Tokyo
$ timedatectl | grep Time #確認
                Time zone: Asia/Tokyo (JST, +0900) 

keymap変更

$ sudo localectl set-keymap jp106
$ localectl #確認
   System Locale: LANG=C.UTF-8
       VC Keymap: jp106
      X11 Layout: jp
       X11 Model: jp106
     X11 Options: terminate:ctrl_alt_bksp

PiJuice

公式レポジトリにインストール方法が書かれていたので、それを元にインストール

#!/bin/bash

cd $HOME

sudo apt update
sudo apt install -y python3-smbus python3-pip python3-stdeb dh-systemd debhelper fakeroot python3-all dh-python
sudo pip3 install stem stdeb3

sudo git clone https://github.com/PiSupply/PiJuice.git

cd $HOME/PiJuice/Software/Source/Setuid-Wrapper
sudo ./build-setuid-progs.sh
sudo cp p* $HOME/PiJuice/Software/Source/bin

cd $HOME/PiJuice/Software/Source/
sudo ./pckg-pijuice.sh

sudo cp $HOME/PiJuice/Software/Source/deb_dist_base/pi*.deb $HOME
sudo cp $HOME/PiJuice/Software/Source/deb_dist_gui/pi*.deb $HOME

cd $HOME
sudo rm -rf PiJuice
  1. 上記スクリプトを実行
  2. ローカルにコンパイルしたpijuice-baseをインストール:cd $HOME sudo apt install /home/ubuntu/pijuice-base_1.6_all.deb
  3. 注意:この手順を実行すると私の環境ではUbuntuがGUI起動に失敗します。 ローカルにコンパイルしたpijuice-guiをインストール:cd $HOME sudo apt install /home/ubuntu/pijuice-gui_1.6_all.deb
  4. 壊れたパッケージを修正する: sudo apt --fix-broken install
  5. 再起動し、デスクトップ上でPiJuice CLIPiJUICE_CLIを実行。pijuice_cli実行時はPiJuiceとラズパイが繋がっていること: sudo reboot 再起動後右記実行: sudo pijuice_clisudo pijuice_gui

アンインストールする場合はsudo apt remove --purge pijuice-guisudo apt remove --purge pijuice-base

今のところpiユーザーかrootユーザーでないとpijuice_cliは実行できない.関連イシュー

最後に

お疲れ様です.これでラズパイで遊ぶための必要な初期設定は完了です.
もしまだ気力があればUbuntuでdocker動かす手順をまとめてみます.
気力が残っていたので書きました.

次:RaspberryPiにDockerを構築する(Ubuntu編)

38
52
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
38
52