app-portage/demerge

某巨大掲示板Gentoo スレを見ていたら紹介されていた。


http://en.gentoo-wiki.com/wiki/Demerge


上記を読んで見る限り、復元ポイントを作成するようなものらしい。

導入

入れてみる。例によって emerge すれば依存関係含めてマージされる。

$ sudo emerge -v demerge

>>> Verifying ebuild manifests
(略)
>>> Installing (7 of 7) app-portage/demerge-0.047
>>> Recording app-portage/demerge in "world" favorites file...

 * Messages for package app-portage/demerge-0.047:

 * /etc/portage/postsync.d/demerge-record has been installed for convenience
 * If you wish for it to be automatically run at the end of every --sync simply
    chmod +x /etc/portage/postsync.d/demerge-record
 * If ever you find this to be an inconvenience simply
    chmod -x /etc/portage/postsync.d/demerge-record
 * GNU info directory index is up-to-date.


最後のメッセージはこんな感じだろうか。

emerge --sync ごとに自動で記録してくれるスクリプトを用意したから

  • これを有効にしたいなら /etc/portage/postsync.d/demerge-record に実行権限をつけなさい
  • 無効にしたいなら実行権限を外しなさい

wiki には書いてなかったから新しい機能なのかな? 好みでやればいいと思う。

追記
やってみた。こんな感じになる。
demerge: Recording system state........
demerge: Timestamp: 1283829805
q: Updating ebuild cache ...
q: Finished 27177 entries in 0.142663 seconds

使ってみる

実際に使ってみることとする。

ヘルプを出してみる
$ demerge --help

 demerge version 0.047 (using PortageXS-0.02.09)

 --comment [ comment ]       : Add comment to state for your convenience.
 --do                        : Do not ask user to confirm actions - just do it.
 --dir [ directory ]         : Select directory to store/get demerge data.
 -h, --help                  : Show this help.
 -k, --usepkg                : Pass -k to emerge so that binary packages
                             : will be used when available. When enabling this
                             : option demerge will also create binpkgs of
                             : packages before removing them.
                             : (Note: Currently --usepkg is not useflag aware. So
                             : no matter what useflags were set in the system-state
                             : portage will install the binpkg as is.)
 -C, --nocolor               : Turn off colors.
 --record                    : Records which packages are installed
                             : on this system.
 --restore [ timestamp ]     : Restores previous recorded system-state of the given
                             : timestamp.
 --restore-previous          : Restores previous recorded system-state.
 --wipe [ timestamp ]        : Remove all/given system-states.
 --wipe-older [ timestamp ]  : Remove all recorded system-states that are
                             : older than the given timestamp.
リストアポイントを作成する

record オプションをつけて実行すれば良い。

# demerge --record

 demerge version 0.047 (using PortageXS-0.02.09)

 Use this program carefully - otherwise you might run into problems.
 You are root. You are responsible for your actions.
 Bugs and requests go to ian .

 Following repositories will be used:
 [1] /usr/portage
 [2] /usr/local/portage/original

 * Created /root/.demerge
 * Using datadir: /root/.demerge

 * Recording current system state...... done
 * To restore the system-state run 'demerge --restore 1283827856'.


特にディレクトリを指定しなかった場合 ${home}/.demerge/ 以下にファイルが記録される。

中身を見る限りインストールされている portage ファイルの

  • 名前とバージョン
  • USE フラグ
  • world に登録されているもの

が記録されている模様。

リストアする

restore オプションを使う。先程つくったリストアポイント (タイムスタンプ) を指定して試しにリストアしてみる。

# demerge --restore 1283827856

 demerge version 0.047 (using PortageXS-0.02.09)

 Use this program carefully - otherwise you might run into problems.
 You are root. You are responsible for your actions.
 Bugs and requests go to ian .

 Following repositories will be used:
 [1] /usr/portage
 [2] /usr/local/portage/original

 * Using datadir: /root/.demerge

 * Analyzing current state.. done

 * No differences found. Aborting.

特に差異がないから何もしませんよってことらしい。そのあと何もマージしてないからまぁ当たり前。

リストアポイントの削除

wipe オプションを使えば消える。

# demerge --wipe

 demerge version 0.047 (using PortageXS-0.02.09)

 Use this program carefully - otherwise you might run into problems.
 You are root. You are responsible for your actions.
 Bugs and requests go to ian .

 Following repositories will be used:
 [1] /usr/portage
 [2] /usr/local/portage/original

 * Using datadir: /root/.demerge

 Do you really want to remove all recorded system-states? (y/n): y
 Done.

特にタイムスタンプを指定しなければ全部消してくれるようだ。

その他

あくまでリストアポイントを作成した時点でマージしているパッケージ情報のみを記録してくる感じ? コンフィグファイルとかまでは記録しているように見えないので完全なバックアップには使えないけど、大量にアップデートがかかるような場合に戻したくなったときには使えそう。

また、設定ファイルは /etc/demerge.conf を使う。詳しくは man demerge を見れば書いてある。