一般化する

一般化する

一般化する

version-specific質問のタイトルに注意してください!質問は〜です。いいえ、どのように

  1. Debian ホストからインストールされたすべてのパッケージのリストをキャプチャします。
  2. 他のDebianホストにリストされているパッケージの最新バージョンをインストールします。

問題はむしろ

  1. ある時点でDebianホストで
    1. 一つをキャプチャパック地図含む
      • インストールされている各パッケージの名前
      • 現在インストールされている各パッケージのバージョン
    2. ...追加のデータが必要です。
  2. その後の作業のために、後で同じホストからパッケージマッピングを復元します。
    1. パッケージマップにパッケージのみをインストールする
    2. マップの各パッケージに適切なバージョンのみをインストールしてください。

詳細

やる気

最近、私はDebianコンピュータの1つで「大規模な更新」(つまり、多くのパッケージやカーネルなどの主要なパッケージ、またはその両方を含む)を実行しましたが、「完全に」更新されていません(つまり、主な質問はありません)。将来、Debian コンピュータに誤ったアップデートを適用した場合は、ロールバックできたらと思います。(ㅏ)パッケージは同じボックスに配置されます。(二)以前のバージョンに。 (以前はイメージバックアップをしたことがなくて遅かったです。) 残念ながらどうしたらいいかわかりません。私する方法を知る

  1. Debianシステムにインストールされているパッケージセットの各パッケージ名のリストをキャプチャします。
  2. 別のボックスでは、リスト内の各パッケージの最新バージョンをインストールします。

複数のSEを含むこれを行う方法を議論する多くのWebページに感謝します。ほとんど(含む)これこれこれ) やや複雑な変更を行います。

  1. サポート: dpkg --get-selections > ${PACKAGE_LIST_FILEPATH}
  2. 再び覆う: dpkg --set-selections < ${PACKAGE_LIST_FILEPATH}

おそらく、このトピックの最も包括的で最もスクリプト化されたSEは次のとおりです。これcp -R /etc/apt/sources.list*:ストレージリスト(使用)とストレージキー(使用)の両方をバックアップすることが推奨されるいくつかの方法の1つですが、上記の方法もapt-key exportall使用します。dpkgこのSEバックアップとインストールにはaptitude(FWIW、優先的で疑わしい)を使用することをお勧めします。dpkgこのSEdeborphanバックアップすることをお勧めします。

しかし、上記のいずれもパッケージを保存しません。バージョンだから、それらのどれも私のユースケースに合わない。 (IIUC - 何か逃した?)

仮説

当然、自分のデバイスから任意のファイルをバックアップし、必要に応じて復元できる必要があります。同様に、パッケージをバックアップ/復元でき、定期的に実行されるバックアップツールに統合できる必要があります。幸い、パッケージリストのバックアップ/復元はよく理解されています。bashバックアップには次のコードを使用できます

## setup

PACKAGE_LIST_FILENAME='package.list'         # see use below
REPO_KEYS_FILENAME='repo.keys'               # ditto
DATE_FORMAT="%Y%m%d_%H%M%S"
BACKUP_TIMESTAMP="$(date +${DATE_FORMAT})"   # get current timestamp, to the second

# Parent directory of that to which you will backup.
BACKUP_ROOT="/media/$(whoami)/my_backup_drive"
BACKUP_DIR="${BACKUP_ROOT}/backup_${BACKUP_TIMESTAMP}"
echo -e "Backing up to ${BACKUP_DIR}" # debugging
# TODO: check BACKUP_DIR is writable, has sufficient freespace, etc

# ASSERT: all following are subdirs of BACKUP_DIR
ETC_BACKUP_DIR="${BACKUP_DIR}/etc"           # backup /etc , typically not large
PKG_BACKUP_DIR="${BACKUP_DIR}/packages"
REPO_BACKUP_DIR="${BACKUP_DIR}/repos"   # duplicates some of /etc, but disk is cheap ...
for DIR in \
  "${ETC_BACKUP_DIR}" \
  "${PKG_BACKUP_DIR}" \
  "${REPO_BACKUP_DIR}" \
; do
  # make the backup dirs
  mkdir -p "${DIR}"  # TODO: test retval/errorcode, exit on failure
done

PACKAGE_LIST_FILEPATH="${PKG_BACKUP_DIR}/${PACKAGE_LIST_FILENAME}"
touch "${PACKAGE_LIST_FILEPATH}"             # TODO: check that it's writable, exit if not

REPO_KEYS_FILEPATH="${REPO_BACKUP_DIR}/${REPO_KEYS_FILENAME}"
touch "${REPO_KEYS_FILEPATH}"                # TODO: check that it's writable, exit if not

## backup
## TODO: for all following: test retval/errorcode, exit on failure
## TODO: give user some progress indication (e.g., echo commands)

deborphan -a --no-show-section > "${PACKAGE_LIST_FILEPATH}" # or other op you prefer
sudo cp -R /etc/apt/sources.list* "${REPO_BACKUP_DIR}/"
sudo apt-key exportall > "${REPO_KEYS_FILEPATH}"
rsync --progress /etc "${ETC_BACKUP_DIR}"

bashたとえば、次のコードを使用して復元できます。

## setup
## (remember to transfer constants used above)

RESTORE_DIR="set this equal to the BACKUP_DIR from which you are restoring!"
ETC_RESTORE_DIR="${RESTORE_DIR}/etc"
PKG_RESTORE_DIR="${RESTORE_DIR}/packages"
REPO_RESTORE_DIR="${PKG_RESTORE_DIR}/repos"
PACKAGE_LIST_FILEPATH="${PKG_RESTORE_DIR}/${PACKAGE_LIST_FILENAME}"
REPO_KEYS_FILEPATH="${REPO_RESTORE_DIR}/${REPO_KEYS_FILENAME}"

## restore
## TODO: test that all following are readable, exit if not
## TODO: for all following: test retval/errorcode, exit on failure
## TODO: give user some progress indication (e.g., echo commands)

rsync --progress "${ETC_BACKUP_DIR}" /etc
# following will overwrite some of /etc restored above
sudo apt-key add "${REPO_KEYS_FILEPATH}"
sudo cp -R "${REPO_RESTORE_DIR}/sources.list*" /etc/apt/
# TODO: CHECK THIS SYNTAX!
# see my question @ https://serverfault.com/questions/56848/install-the-same-debian-packages-on-another-system/61472#comment920243_61472
sudo xargs aptitude --schedule-only install < "${PACKAGE_LIST_FILEPATH}" ; aptitude install

したがって、IIUCでは、パッケージのバージョンを処理するために上記の内容を拡張する必要があります。次の戦略を使用することが可能です。

サポート

  1. パッケージリストファイルの代わりにパッケージマップファイルを作成します。ありがとうロバートLそしてカスこれで、Debianホストのパッケージマップファイルが便利な形式(1行に1つのパッケージ、各行に{パッケージ名(およびアーキテクチャ、しかし複数の場合のみ)、TAB、パッケージバージョン文字列}を含む)で取得できることがわかりましたです。その後、アクセスできますそれ。
    • パッケージ名とawk '{print $1}' < "${PACKAGE_LIST_FILEPATH}"
    • パッケージバージョンawk '{print $2}' < "${PACKAGE_LIST_FILEPATH}"
  2. (追加クレジット)パッケージのオリジナル/現在のバージョンをアーカイブします.deb(例:カスロ表現)にパッケージ名を指定してdpkg-repack
  3. (追加クレジット)アーカイブされたパッケージをローカルAPTリポジトリに変換します。これは運用の詳細に記載されていることを願っています。この Debian Wiki ページしかし、私はまだこれを理解しようとしています。

また覆う

用語辞書: *currentホストの以前の状態を復元するユーザーの試みを示します。 *は、current PMF現在ホスト用に生成されたパッケージマッピングファイルを表します。パックタプル(キー=パッケージ名、値=パッケージバージョン)が現在インストールされています。 *backup PMF復元するパッケージタプルを含む古いホスト用に生成されたパッケージマッピングファイルを示します。

  1. 現在のPMFを作成します。
  2. 「一般的な手段」を介してリポジトリとキーを回復します(上記を参照)。
  3. バックアップPMFを読みます。
  4. 現在のPMFにはあるがバックアップPMFにはない各パッケージタプルの場合:パッケージを削除します(例sudo aptitude remove [package_name]:)。
  5. バックアップPMFの各パッケージタプルに対して、指定されたバージョンのパッケージをインストールします(例sudo aptitude install [package_name]=[package_version]:)。ありがとうレイF.リベイロそしてビッグベン8月aptitudeあなたの関心とapt-get支援に感謝しますinstall package=version
    • (追加クレジット)復元されたストレージに必要なバージョンのパッケージが含まれていない場合は、バックアップローカルAPTストアからインストールしてください。

テスト

年!上記のようなバックアップがないボックスを手動で復元することから始めます(もちろん、まだ上記のようなバックアップがないため)。どのボックス :-) しかし私はコンソール噴出

ベストアンサー1

目標を達成するのに役立ついくつかの便利な注意:

  1. 次のコマンドを実行して、インストールされているパッケージとそのバージョンのリストをインポートできます。

    dpkg-query -W
    
  2. dpkg-repack次のコマンドをインストールして実行して、現在インストールされているすべてのパッケージの.debパッケージアーカイブを作成できます。

    dpkg-query -W | awk '{print $1}' | xargs dpkg-repack
    

    これは現在インストールされているすべてのパッケージですdpkg-repack。このアーカイブは、回復プロセスに欠けている重要な部分です。このアーカイブがないと、まったく同じパッケージセットを回復できない可能性があります(特にまたはtestingを使用している場合unstable)。

    警告:dpkg-repackすべてのコンテンツを現在のコンテンツに再パッケージ化する(修正された可能性があります)構成ファイル。元のパッケージが必要な場合は、/var/cache/apt/archivesDebianミラーから.debファイルを入手する必要があります。

    次のガイドラインに従って、.debアーカイブをapt-gettableリポジトリに変換できます。https://wiki.debian.org/HowToSetupADebianRepositoryまたは、すべてをインストールできますdpkg -iBE *.deb(またはdpkg -iRBE /path/to/deb/files/1つのコマンドラインにインストールするには多すぎます)。

  3. 削除されたパッケージなどの詳細を使用して-get-selections保存--set-selectionsする必要があります。

おすすめ記事