私は組み込みLinuxシステム用のアップデートプロトコルを研究していますが、特にアルファ/ベータリリースでは、アップデートによってシステムがハングした場合にアップデートをロールバックするオプションをユーザーに提供したいと思います。そのため、上書きされたファイルを自動的にバックアップするcpコマンドオプションが見つかりました。
本当に良いです!ただし、自動バックアップファイルを使用してこれらの変更を簡単にロールバックする方法が必要です。そうですか?私は、ユーザーが変更されたすべてのファイルのバックアップを自分で見つけるように強制したくありません。
ご協力ありがとうございます!
ベストアンサー1
2つの並列ファイルシステムツリーを持つスペースがある場合は、/bin
などがあります/bin.old
。すべての最上位ディレクトリに対してこの操作を繰り返します。
/bin.new
インストールは、ライブシステムで作成、コピー、新しいファイルの上書き、/ bin`など/bin
に切り替える場合があります。ロールバックは再び切り替えられます。/bin.old
/bin.new to
# Prepare a new filesystem tree
#
rm -rf /*.new /*.old
for item in /*
do
cp -al "$item" "$item.new" # Links avoid using too much disk space
done
# Overlay. Because we linked in the previous step, we must remove
# (or rename) each file that we're going to change. Do not change
# or replace any file in situ
#
# If you have space for two full filesystem trees you could just copy
# instead of linking, which could simplify this update code section.
#
echo installation code goes here
# Switch over
#
OPATH="$PATH" PATH="/bin.old:/bin:/bin.new:$PATH"
for item in /*.new
do
live="${item%.new}"
mv -f "$live" "$live.old"
mv -f "$item" "$live"
done
# Post-installation steps (rebuild kernel links, etc.)
#
echo post-installation code goes here
誤ったシェルが原因でロールバックが失われないように、更新できない場所に重要なシステムバイナリを配置できます。ただし、これは鶏肉と卵が必要な状況なので、定義に従ってこのコードを更新することはできません。狡猾な。