blog

Raspberry Pi|ディスクイメージを修正してRaspberry Piベースのホームラボを作る

Raspberry Piやその他のシングルボードコンピュータを使って「ホームプライベートクラウド」を作成する方法。...

Oct 24, 2025 · 11 min. read
シェア

Raspberry Piやその他のシングルボードコンピュータを使って「プライベート・ホーム・クラウド」を作成します。

構築は、新しいコンセプトを学んだり、新しいテクノロジーを実験したりしながら、自分自身を楽しませる楽しい方法です。 代表されるシングルボードコンピュータの人気のおかげで、自宅にいながら簡単にマルチコンピュータラボを構築できます。また、「プライベート・ホーム・クラウド」を作成することは、主流のクラウド・プロバイダーで同じ設定を試みるよりも少ない費用で、クラウド・ネイティブ技術を体験する優れた方法です。

この記事では、Raspberry Pi やその他のシングルボードのディスクイメージを変更する方法、ホストの SSH を事前に設定する方法、初回起動時にキャンペーンがデバイスを対話的に設定するサービスを無効にする方法について説明します。これは、クラウドインスタンスと同様に、デバイスを「稼働させる」ための優れた方法です。後で、より専門的で詳細な設定のためにSSH経由で接続する自動化されたプロセスを使用することができます。

また、ラボにRaspberry Piを増設する際、ディスクイメージを変更することで、SDカードにイメージを書き込んでRaspberry Piに入れるだけで済みます!

イメージの解凍とマウント

このプロジェクトでは、サーバーのディスクイメージを変更する必要があります。テストでは、 ホームラボ使用しました。ディスクイメージをダウンロードしてチェックサムを確認したら、それを解凍してホストのファイルシステムのどこかにマウントし、必要に応じて変更できるようにする必要があります。

Fedora Server Image を解凍するには xz コマンドを使用します --decompress

  1. xz --decompress Fedora-Server-armhfp-X-y.z-sda.raw.xz

フォーマットされたマウントディスク上の全てのデータを含むファイルです。このファイルにはパーティション情報、ブートパーティション、ルートパーティション、その他のパーティションが含まれています。このファイルにはパーティション情報、ブートパーティション、ルートパーティション、その他のパーティションが含まれており、変更したいパーティションをマウントする必要がありますが、そのためにはディスクイメージ内のパーティション開始位置とセクターサイズを知っておく必要があります。

幸いなことに、ディスクイメージ上でも実際のディスクと同じように簡単に fdisk コマンドを使うことができます。パーティションのリストとその情報を見るには --list または -l パラメータを使います:

  1. # fdisk を使って生イメージファイルのパーティションをリストアップする:
  2. $ fdisk -l Fedora-Server-armhfp--sda.raw
  3. Disk Fedora-Server-armhfp-X-y.z-sda.raw: 3.2 GiB, bytes, sectors
  4. Units: sectors of 1 * bytes
  5. Sector size (logical/physical): 512 bytes / 512 bytes
  6. I/O size (minimum/optimal): 512 bytes / 512 bytes
  7. Disklabel type: dos
  8. Disk identifier: 0xdaad9f57
  9. Device                               Boot   Start     End Sectors  Size Id Type
  10. Fedora-Server-armhfp-X-y.z-sda.raw1         8192       76M  c W95 F
  11. Fedora-Server-armhfp-X-y.z-sda.raw2 *     3263    488M 83 Linux
  12. Fedora-Server-armhfp-X-y.z-sda.raw3      0  2.3G 83 Linux

必要な情報はすべて上の出力にあります。3行目はセクタサイズを示しています:512バイト/512バイト。

デバイスリストには生ディスクイメージのパーティションが表示されています。最初のFedora-Server-armhfp-X-y.z-sda.raw1 ブートローダパーティションで、小さく、タイプはc、つまりW95 FAT32で、SDカードからブートされたFAT32パーティションです。

このパーティションはLinuxネイティブタイプのパーティションで、カーネルと xz 含むLinuxブートパーティションかもしれません。

3番目のパーティションがおそらく必要なものでしょう: サイズは2.3GBで、ディストリビューションの主要な部分が入っているはずで、Linuxネイティブのパーティションタイプです。このパーティションには、変更する必要のあるパーティションとデータが入っているはずです。

この情報があれば、ホームディレクトリに3つ目のパーティションをマウントできます:

  1. $ mkdir ~/mnt
  2. $ sudo mount -o loop,offset= Fedora-Server-armhfp-X-y.z-sda.raw ~/mnt
  3. $ ls ~/mnt

ディスクイメージに直接ジョブ

ディスクイメージが解凍され、ホスト上の場所にマウントされた後、イメージは要件に合わせて変更することができます。私の意見では、Image に変更を加える最も簡単な方法は、chroot を使ってセッションの作業ルートを、Image がマウントされている作業ルートに変更することです。少し厄介ですが。

ルートディレクトリを変更すると、セッションは新しいルートディレクトリのバイナリを使用します。ARM システム上でこの作業をすべて行っているのでない限り、解凍されたディスクイメージのアーキテクチャーは、使用しているホストシステムとは異なります。chroot環境であっても、ホストシステムは異なるアーキテクチャのバイナリを使用することはできません。少なくとも、ローカルではそうです。

幸い fdisk ここに解決策があります: qemu-user-static.

"[qemu-user-static]は、静的にビルドされるユーザーモードのエミュレーションバイナリを提供します。このモードでは、QEMU は別の CPU 用にコンパイルされた Linux プロセスを 1 つの CPU 上で起動することができます ... binfmt-support パッケージがインストールされている場合、qemu-user-static パッケージは提供されるエミュレータが扱えるバイナリファイル形式を登録します。他のアーキテクチャのバイナリを直接実行できるようにします。"

これはまさに、非ネイティブアーキテクチャのchroot環境で作業するために必要なものです。ホストシステムが Fedora の場合、DNF を使用して qemu-user-static パッケージをインストールし、 systemd-binfmt.service再起動します:

  1. # DNFでネイティブでないarchのchroot環境を有効にし、新しいバイナリフォーマット情報を追加する
  2. # 出力イメージの効率化
  3. $ dnf install qemu-user-static
  4. $ systemctl restart systemd-binfmt.service

この方法を使って、マウントしたディスクイメージのルートディレクトリを変更し、 unameコマンドを実行して、すべてが正常であることを確認します:

  1. sudo chroot ~/mnt/ /usr/bin/uname -a -r
  2. Linux marvin 5.5..fc31.x SMP Wed Apr 8 UTC 2020 armv7l armv7l armv7l GNU/Linux

chroot環境でunameを実行すると、出力にarmv7lが表示されますが、これはホストのアーキテクチャではなく、生のディスクイメージのアーキテクチャです。すべて期待通りに動作しているので、このままイメージを変更することができます。

ディスクイメージの変更

このARMベースのディスクImageに直接切り替えて、その環境で作業できるようになったので、Image自体に変更を加えることができます。このイメージは、Raspberry Pi上で追加設定をしなくても起動し、すぐにアクセスできるように設定する必要があります。そのためには、sshd をインストールして有効にし、SSH アクセス用の認証パスワードを追加する必要があります。

よりクラウド環境に近い動作をさせ、自宅にプライベートクラウドを持つという夢を実現するには、ローカルユーザーを追加し、そのユーザーにsudo権限を与え、そのユーザーがパスワードなしでsudoを使えるようにします。

そこで、あなたがすることはこうです:

  • SSHDのインストールと有効化
  • ローカルユーザーの設定
  • ローカルユーザーにsudoの使用を許可
  • 認証キーの追加
  • rootが認証されたパスワードを使用できるようにする イメージ SSH

initramfs アクセスできるSSH公開鍵をアップロードできるGitHubの機能を使っています。これは公開鍵を配布するのに便利な方法ですが、私は元来偏執狂なので、ダウンロードした鍵が期待したものと一致しているかどうか常にチェックしています。この方法を使いたくない場合は、公開鍵をホストからchroot環境にコピーするか、同じワークフローを使うために公開鍵をあなたがコントロールするウェブサーバーにホストすることができます。

ディスクイメージの変更を開始するには、マウントされたディスクイメージのルートディレク トリを再度切り替え、今度はシェルを起動して複数のコマンドを実行できるようにします:

  1. # これらのコマンドの出力は簡潔にするために省略されている
  2. $ sudo chroot ~/mnt /bin/bash
  3. # openssh-serverをインストールして有効にする
  4. $ dnf install -y openssh-server
  5. $ systemctl enable sshd.service
  6. # rootが認証されたパスワードでSSHにアクセスできるようにする
  7. $ mkdir /root/.ssh
  8. # 別の認証パスワードファイルPublic Passwordsをダウンロードまたは追加する
  9. # URLを自分の公開パスワードへのパスに置き換える
  10. $ curl <https://./.> -o /root/.ssh/authorized_keys
  11. $ chmod 700 /root/.ssh
  12. $ chmod 600 /root/.ssh/authorized_keys
  13. # ローカルユーザーを追加し、wheelグループに入れる
  14. # グループとユーザーを好きなものに変更する!
  15. useradd -g chris -G wheel -m -u 1000 chris
  16. # ダウンロードして認証パスワードを追加する
  17. # ホームディレクトリとURLを上記のように変更する
  18. mkdir /home/chris/.ssh
  19. curl <https://./.> -o /home/chris/.ssh/authorized_keys
  20. chmod 700 /home/chris/.ssh
  21. chmod 600 /home/chris/.ssh/authorized_keys
  22. chown -R chris.chris /home/chris/.ssh/
  23. # ホイールグループがパスワードなしで suso を使えるようにする
  24. echo "%wheel ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers.d/91-wheel-nopasswd

Raspberry Piや他のシングルボードが最初のブート時にSSHをセットアップするために必要なことはこれだけです。しかし、ディストリビューションにはそれぞれ特徴があります。例えば、Raspbianには既にpiというローカルユーザが存在し、wheelグループを使っていません。そのため、Raspbianでは既存のユーザーを使うか、piユーザーを削除して別のユーザーで置き換えるのがベストです。

Fedora ARM の場合、Image は最初のブート起動時にセットアップを完了するよう促します。これは、特にセットアップが完了している場合、上記で行った変更の目的を果たせなくなり、完全に起動しなくなります。目標は、Raspberry Piをプライベートクラウドのインフラストラクチャの一部として動作しているかのように機能させることで、このワークフローでは、起動時にSSH経由でホストをリモート設定します。 initial-setup.service 制御される初期化セットアップを無効にします:

  1. # マルチユーザーとグラフィカルターゲットの初期セットアップを無効にする.service
  2. unlink / etc / systemd / system / multi - user.target.foo / initial - setup.service;
  3. unlink / etc / systemd / system / graphical.target.obj / initial - setup.service;

chroot 環境にいる間は、システムに必要な変更を加えることもできますし、そのままにしておいて、クラウドネイティブのワークフローに従って最初のブート後に SSH 経由で設定することもできます。

変更したイメージを再圧縮してインストールします。

これらの変更が完了したら、あとはディスクイメージを再圧縮してRaspberry PiのSDカードにインストールするだけです。

chroot 環境を終了し、Disk Image をアンマウントしてください:

  1. $ sudo umount ~/mnt/

最初にイメージを解凍したときと同じように、xz コマンドを使用してイメージを再圧 縮できます。--keep パラメータを使用すると、xz はイメージをクリーンアップする代わ りに元のイメージを保持します。この場合、ディスク容量が増えますが、解凍されたイメージが保持されるため、毎回解凍することなく、作業中のイメージに少しずつ変更を加えることができます。これは、イメージのテストや調整の時間を節約するのに最適です。

  1. # 圧縮ディスクイメージを.xz ファイルを修正するが、生ディスクイメージはそのままにしておく。
  2. xz --compress Fedora-Server-armhfp--sda.raw --keep

圧迫には時間がかかりますので、この間に立ち上がって体を伸ばし、血流を良くしてください。

圧縮が完了したら、Raspberry Pi で使用するために新しいディスクイメージを SD カードにコピーします。SDカードにImageを配置する標準的なdd方法はうまくいきますが、私はFedoraのarm-image-installerを使うのが好きです。また、編集済みのイメージでもうまく動作し、ddコマンドよりも少し友好的です。

SDカードがどのディスクドライブに入っているかを確認し、 --media パラメータで使用してください:

  1. # arm-image-installer を使って修正したディスクイメージを SD カードにコピーする。
  2. arm-image-installer --image=Fedora-Server-armhfp-X-y.z-sda.raw.xz --target=rpi3 --media=/dev/sdc --norootpass --resizefs -y

エクステンデッド・リーディング

この記事に書かれていることを学ぶために、私はたくさんの研究をしました。ディスクイメージのカスタマイズと非ネイティブアーキテクチャの使い方を学ぶのに最も役に立った2つのソースを紹介します。何をやっているのかわからない」という状態から「できる!」という状態に持っていくのにとても役に立ちました。とても役に立ちました。

Read next