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が接続されていないと起動できないので注意してください。
ハードウェア
- Raspberry Pi Model 4B(8GB)
- SSD(起動用128GB)
- 2.5inchの外付けケース
- HDD(2TB)
- 3.5inchの外付けアダプタ
- microSDカード(事前準備用)
- USBキーボードとマウス
- 裸族のアパート(製造・販売終了)
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を利用して設定します。詳しい設定方法は下記の記事を見てください。
Ubuntuのセットアップは完了
ここまででUbuntu 20.04のセットアップは完了です。後半のNextCloud編Ubuntu20.04(64bit)でラズパイ4をファイル共有&バックアップサーバーにする。その2/3 Nextcloudのインストールと設定編に続きます。
こちらの記事の通り、コードなどをコピペして用意をしたのですが
Raspberry PiからmicroSDカードを抜いて再起動すると
エラー(?)で SDを入れろという画面で止まってしまいます。
外付けを毎回初期化して 3回ほど上記手順を繰り返しました。
同じエラーとなります。
こちらの記事が昨年なので 現在だと違う手順になるのでしょうか?