Ubuntu20.04(64bit)でラズパイ4をファイル共有&バックアップサーバーにする。その1/3 Ubuntu20.04(64bit)インストール編

 先日、SSDのファームウェアを更新したところ、500GBのデータが全部吹っ飛びました。(´・ω・`)500GBだったのでバックアップが面倒だったということと、そのうちNextCloudサーバーを立てればいいやというのを後回しにしてしまった結果です。

 というわけで、一年分ぐらいの開発データ等が一瞬で消えるという悲劇が起こってしまいました。一週間ほど呆然としたあと、バックアップは大事という反省の元、ラズパイ4Bの8GBモデルを使ってリアルタイムのデータバックアップシステムを構築してみました。ハマりどころが多かったので手順を紹介します。手順が長いので記事を3つに分けました。後半はこの記事Ubuntu20.04(64bit)でラズパイ4をファイル共有&バックアップサーバーにする。その2/3 Nextcloudのインストールと設定編です。

 ※ この記事は2020/10/23現在の情報で作成しました。

 もくじ(Index)

ラズパイ関連の目次へ戻る(工事中)

構築した環境

2020/9/3にUSBブートのファームウェアが正式版になったため今回は起動ディスクをSSDにして、外付けの大容量HDDにデータを収納するという環境を構築しました。

有線LANが必要です。

 Ubuntuのパーティションを直接編集してしまえば無線LANの設定も可能なようですが、記事が長くなるのでそのあたりは割愛します。Ubuntuの起動時に有線LANが接続されていないと起動できないので注意してください。

ハードウェア

 SSD,HDDを接続する際にUSB3.0-SATAの変換アダプタによっては相性問題があるようでレスポンスが遅くなる可能性もあるようです。私の場合はVIALabとFUJITSU製のコントローラーでした。

3TB以上のハードディスクは注意

 今回2TBでテストも兼ねて環境を構築し、その後HDDをクローンして6TBのHDDと入れ替えようと思っていたのですがかなりハマりました。2TBを超えたHDDを扱う場合はGPTでパーティションを作成する必要があるのでその点は注意してください。

ソフトウェア

  • OS: Ubuntu 20.04(aarch64)
  • NextCloud 19.0.4
  • RaspberryPi OS(事前準備用)

 64bitのRaspberryPi OSでもsnapdをインストール後、Nextcloudの動作を試してみましたが、正常に起動しなかったため今回はUbuntuの64bit(amd64)をOSにしています。

RaspberryPi OSについて(旧Raspbian)

 事前準備でファームウェアをアップデートし、また、Ubuntu側のパーティションを変更しなくてはならず、microSDカードのRaspberyPi OSから起動する必要があります。

RaspberryPi OSで事前準備

①eepromのアップデート

 USBからのブートを行うためにeepromのアップデートが必要です。RaspberryPi OSで起動後、端末(ターミナル)を起動して下記のコマンドを実行しておきます。

sudo apt update
sudo apt upgrade -y

②RaspberryPi Imagerのインストール

 RaspberryPi OSにRaspberryPi Imagerをインストールします。端末(ターミナル)を起動して下記のコマンドを実行してください。

sudo apt install rpi-imager -y

 

③Ubuntu Server 20.04.? LTS(Rpi 3/4)のメディアを作成

 RaspberryPi Imagerを使って、SSDにUbuntu Server 20.04.? LTSを書き込みます。(恐らく他のUbuntuでもOKだとは思いますが、サポートの長いLTSがよいかと思います。)

(1)SSDをUSB3.0ポートに接続

 「リムーバブルメディアの挿入」というウィンドウが出たら、「キャンセル」を押します。

(2)Raspberry Pi Imagerを起動

 「メニュー(ラズパイのマーク)」→「アクセサリ」→「Imager」を起動します。

(3)OSの選択

 「CHOOSE OS」を押して、OSを選びます。

(4)CHOOSE SD Card

 「CHOOSE SD Card」を押して、接続されたUSB-SSDを選択してください。

(5)書き込み

 WRITEボタンを押すと、「認証」ダイアログが開くのでpiユーザのパスワードを入力してください。SSDに書き込みが始まります。書き込みが終わるとUSB-SSDは外せるようになっているので一旦外します。

④Ubuntu 20.04のUSBブート対応

 Ubuntu 20.04は、そのままではUSBブートできないため対応が必要です。もう一度、USB3.0ポートにSSDを接続します。su権限が必要なのでpiユーザーではない方は注意してください。

参考:RPI4 Direct USB Boot Ubuntu 20.04

(1) USB3.0ポートにSSDを接続

 再度Ubuntuを書き込んだUSB-SSDをUSB3.0ポートに接続します。「リムーバブルメディアの挿入」というウィンドウが出たら、「キャンセル」を押します。すると、デスクトップに「system-boot」と「writable」という2つの外付けドライブがデスクトップに現れます。

(2)ファイルのコピー

 LXTerminalを開いて、下記のコマンドを入力して、RaspberryPi OSから必要なファイルをコピーします。

cp /boot/*.dat /media/pi/system-boot/
cp /boot/*.elf /media/pi/system-boot/

(3)vmlinuzの解凍

 LXTerminalから下記のコマンドを実行して、vmlinuxというファイルを作成します。

cd /media/pi/system-boot
zcat vmlinuz > vmlinux

(4)system-boot/config.txtの編集

 /media/pi/system-boot/config.txtの[pi4]セクションを下記のように書き換えます。

[pi4]
#kernel=uboot_rpi_4.bin
max_framebuffers=2
dtoverlay=vc4-fkms-v3d
boot_delay
kernel=vmlinux
initramfs initrd.img followkernel

(5)system-boot/auto_decompress_kernelの作成

 このままだと、Ubuntu 20.04起動後にsudo apt update/sudo apt upgradeするとvmlinuzとvmlinuxのバージョンが合わなくなり、起動しなくなるのでまずはScriptを作成し、実行権限を与えます。

vim /media/pi/system-boot/auto_decompress_kernel
chmod +x /media/pi/system-boot/auto_decompress_kernel

●auto_decompress_kernelの内容

#!/bin/bash -e

#Set Variables
BTPATH=/boot/firmware
CKPATH=$BTPATH/vmlinuz
DKPATH=$BTPATH/vmlinux

#Check if compression needs to be done.
if [ -e $BTPATH/check.md5 ]; then
	if md5sum --status --ignore-missing -c $BTPATH/check.md5; then
	echo -e "\e[32mFiles have not changed, Decompression not needed\e[0m"
	exit 0
	else echo -e "\e[31mHash failed, kernel will be compressed\e[0m"
	fi
fi

#Backup the old decompressed kernel
mv $DKPATH $DKPATH.bak

if [ ! $? == 0 ]; then
	echo -e "\e[31mDECOMPRESSED KERNEL BACKUP FAILED!\e[0m"
	exit 1
else 	echo -e "\e[32mDecompressed kernel backup was successful\e[0m"
fi

#Decompress the new kernel
echo "Decompressing kernel: "$CKPATH".............."

zcat $CKPATH > $DKPATH

if [ ! $? == 0 ]; then
	echo -e "\e[31mKERNEL FAILED TO DECOMPRESS!\e[0m"
	exit 1
else
	echo -e "\e[32mKernel Decompressed Succesfully\e[0m"
fi

#Hash the new kernel for checking
md5sum $CKPATH $DKPATH > $BTPATH/check.md5

if [ ! $? == 0 ]; then
	echo -e "\e[31mMD5 GENERATION FAILED!\e[0m"
	else echo -e "\e[32mMD5 generated Succesfully\e[0m"
fi

#Exit
exit 0

(6) writableのほうにもスクリプトを作成(999_decompress_rpi_kernel)

writable/etc/apt/apt.conf.d/999_decompress_rpi_kernelを作成し、実行権限を与えます。

※ sudoを忘れずに。

sudo vim /media/pi/writable/etc/apt/apt.conf.d/999_decompress_rpi_kernel
sudo chmod +x /media/pi/writable/etc/apt/apt.conf.d/999_decompress_rpi_kernel

●999_decompress_rpi_kernelの内容

DPkg::Post-Invoke {"/bin/bash /boot/firmware/auto_decompress_kernel"; };

RaspberryPiOSを終了

 これで準備が完了したのでRaspberryPi OSを終了→microSDカードを抜きます。これで事前準備が完了です。

Ubuntuの起動

①有線LANとUSB-SSDを接続して起動(microSDは外す)

 有線LANとUSB-SSDを接続して、microSDには何もセットしない状態でラズパイを起動します。Ubuntuの起動処理が完了するまで少し時間がかかります。

 Ubuntu login:と一度表示が出ますが、そのあとも何か実行しています。2分ぐらい待ちましょう。

②ログイン

 時間が経過してubuntu login:と出たら、(もし出ない場合はEnterを数回押してみましょう。)

ユーザーID: ubuntu
パスワード: ubuntu

でログインできます。初回ログイン時はubuntuのパスワードを変更するように促してくるので、

current password: ubuntu

その後、自分で決めたパスワードを入力してください。

③sudo apt update/sudo apt upgrade

 設定がちゃんとできているかどうか確認しましょう。sudo apt update/upgradeします。

sudo apt update
sudo apt upgrade -y

 成功していた場合は下記のメッセージが最後に出ます。

Decompressed kernel backup was successful
Decompressing kernel: /boot/firmware/vmlinuz..............
Kernel Decompressed Succesfully
MD5 generated Succesfully

失敗していた場合

 スクリプトの実行に失敗していた場合は下記のメッセージが赤文字で出ます。/boot/firmware/vmlinuxを確認して、無い場合はzcatでvmlinuzを解凍しましょう。

DECOMPRESSED KERNEL BACKUP FAILED!

●実行するコマンド

 作成したスクリプトを実行し、なにか間違いがないか確認してください。

sudo bash /boot/firmware/auto_decompress_kernel

セキュリティ面の設定

ユーザの変更

 セキュリティを考えるのであれば、ここでubuntuユーザを停止して独自のユーザを作成し管理者に設定した方が良いです。手順は下記のような手順で行います。{username}は自分で決めたユーザ名で実行してください。

sudo adduser {username}
sudo adduser {username} sudo

sudo passwd -d ubuntu
sudo passwd -l ubuntu
sudo passwd -l root

openssh-serverの設定

 openssh-serverの設定が有効になっているので、アンインストールまたは公開鍵認証等のセキュアな設定にした方が良いでしょう。設定方法については下記の記事を参照してください。

SSHを公開鍵認証で接続するための初期設定

IPアドレスを固定する。

 サーバーなのでIPアドレスを固定した方が扱いやすいと思うので固定します。UbuntuServer20.04ではnetplanを利用して設定します。詳しい設定方法は下記の記事を見てください。

Ubuntu18.04でのネットワーク設定方法【CUI】

Ubuntuのセットアップは完了

 ここまででUbuntu 20.04のセットアップは完了です。後半のNextCloud編Ubuntu20.04(64bit)でラズパイ4をファイル共有&バックアップサーバーにする。その2/3 Nextcloudのインストールと設定編に続きます。

Ubuntu20.04(64bit)でラズパイ4をファイル共有&バックアップサーバーにする。その1/3 Ubuntu20.04(64bit)インストール編” に対して1件のコメントがあります。

  1. Noby より:

    こちらの記事の通り、コードなどをコピペして用意をしたのですが
    Raspberry PiからmicroSDカードを抜いて再起動すると
    エラー(?)で SDを入れろという画面で止まってしまいます。
    外付けを毎回初期化して 3回ほど上記手順を繰り返しました。
    同じエラーとなります。
    こちらの記事が昨年なので 現在だと違う手順になるのでしょうか?

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です