読み取り専用ファイルシステムを使用した/ etcの読み取り/書き込み

読み取り専用ファイルシステムを使用した/ etcの読み取り/書き込み

ルートファイルシステムを読み取り専用に維持し、システム構成を読み取り/書き込みパーティションに保持する組み込みプロジェクトの設定があります。ユーザーはプログラムをインストールできませんが、構成を変更することはできます。目次を除いて、ほとんどは非常に簡単です/etc。これには、起動時に必要な設定(例fstab:)と変更可能な設定(例passwd:)が含まれています。

先に進むのが最善の選択なのかよくわかりません。デフォルト/etcのディレクトリを持ち、起動後にここにマウントできますか?すべての変数設定ファイルを読み取り/書き込みパーティションにシンボリックリンクするのはどうですか?別のより良いソリューション?簡単にするためにRaspberry Piを使用してこれを行う方法を検討してください。

一部は、更新がどのように処理されるか(正しく)尋ねることができます。アップデートは、組み込みソフトウェアがインストール方法を知っているルートパーティションとブートパーティションの圧縮され署名されたイメージです。したがって、アップグレード時にすべての変更が失われるため、読み取り専用ルートファイルシステムが必要です。

答え1

私には2つの実行可能なオプションがあります。最初はもっと難しいです。 btrfsが利用可能な場合、2番目の操作は簡単です。

ファイルシステムの初期化

今日のLinuxを起動する一般的な方法は、次のものを使用することです。ファイルシステムの初期化。デフォルトでは、実際のrootfsをマウントするために必要なものだけを備えた最小のrootfsです。バイナリと設定は/ bootの下に保存されているアーカイブに圧縮され、システム起動時に最初のrootfsとしてtmpfsに解凍されます。

つまり、一時rootfsがアーカイブからロードされる起動プロセスを持つことができ、カーネルがinitという実行可能ファイルを呼び出す場所を変更でき、変更が可能で、実際のルートをマウントし、他のシステム起動を実行するように設計されています。操作。

この部分の詳細な説明については、以下を読んでください。アーチブートプロセス。 (特に5部(initramfs)と6部(初期ユーザースペース))

機会:initramfsは何でも、何でもすることができます。これGentoo Wiki何ができるかについてのアイデアを提供します。
悪い点:簡単ではありません。一般的な方法は、initramfs-toolsDebian、mkinitcpioArch、dracutその他のツールなど、いくつかのツールを使用してinitramfsを作成することです。設定オプションがありますが、別の/ etcを持つことは特別です。

(他のツールについてはinitramfs-toolsよくわかりません) 自分だけのマウントなどを追加することが可能かもしれません。一般的な Debianinitramfs-toolsは基本的に初期初期化で終了した一連のシェルスクリプトであり、これも単純なシェルスクリプトです。

このツールは、initramfsにカスタムファイルを追加するために使用できるフック(名前フックは少し誤解を招く可能性があります。これらのフックは通常、カーネルの更新後にupdate-initramfs新しいinitrafが作成されたときに実行されます)とスクリプトのさまざまなブランチで実行されるスクリプトがあります。 initramfs。初期ユーザー空間初期化(フックと呼ぶので、今回もやや誤解を招く名前です)。

この道に行けば幸運を祈ります。 Debian で initramfs が必要な場合は、コマンドを使用して initramfs を抽出し (/boot/initrd.image* にある)、他unmkinitramfsのツールを統合する方法を調べることができます。dropbear-initramfs

BTRFS

別の簡単なオプションは、btrfsをルートファイルシステムとして使用することです。 btrfsを使用できるオプションがある場合は、読み取り専用に設定できるサブボリューム機能を利用できます。

btrfsサブボリュームは別々のファイルシステムのようにマウントできますが、最善の点はそれを必要としないことです。サブボリュームをマウントすると、下のすべてのサブボリュームが自動的にマウントされます。

非常に簡単に/ etcを別々のサブボリュームにすることができます。インストール後は、次の作業を行います。

mv /etc /etc-tmp
btrfs subvolume create /etc
mv /etc-tmp/* /etc-tmp/.* /etc
rmdir /etc-tmp

/ etcは他のサブボリュームとは異なるサブボリュームにあるので、次のコマンドを使用してルートサブボリュームを読み取り専用にし、/ etcを書き込み可能に保つことができます。

btrfs property set -t subvol / ro true

:同じ方法を使用して/ usrを読み取り専用にすることができます。既存の/ usrを外に移動してサブボリュームを作成してからコンテンツを再度移動したい場合は、/ usr / binが現在空であるため、「mv:command notfound」というメッセージが表示されます。これはいつも楽しいです。

関連情報