2013 年 4 月の履歴(もしくは日誌)


2013 年 4 月

4 月 6 日

macports で失敗した話

複数の利用者がリモートログインして使っている Mac があります.macports を使っていくつか足りないツールをインストールしてあります.一度セットアップしたら,あまり macports はアップデートしていませんでした.何かをインストールしたりアップデートをしたりして,失敗したら大変なので.でも先日ついあるパッケージを macports 経由でインストールしようとして失敗.トラブルが発生しました.いろいろ依存関係があるので,しばらく更新していなかった状態からいきなり新しいものを追加インストールするのは難しいですね.

sudo port install したらいろいろダウンロードしてビルドして,でもインストール失敗,まぁあきらめようって事に.したら電話がかかってきて xemacs が起動しなくなったと.さっきのインストール中に tiff のライブラリが入れ替わったんだけど xemacs が依存しているバージョンと互換性無いみたい.他にもいろいろ動かなくなってしまったものがありました.

こういう場合の準備もしてあって,以前の port installed の結果を加工して次のようなコマンドとしてファイルに保存してありました.

port activate a2ps @4.14_0
port activate a2ps-j @1.45_2

こんな感じで,ずらずらとインストールしてあったパッケージをバージョンを指定して activate します.

すると,失敗したインストール時の依存関係でアップデートされたパッケージも,以前のバージョンに戻ります.

で,これのためのスクリプトファイルが書いてあったんです.数年前の自分えらい!

#!/bin/sh
port -v selfupdate 
logfile=~macports/`date "+%Y-%m-%dT%H%M%Smacportsinstalled.txt"`
restorefile=~macports/`date "+backto%Y-%m-%dT%H%M%S"`
date "+%Y-%m-%dT%H:%M:%S" > $logfile
port installed >> $logfile
grep active $logfile | awk '{print "port activate " $1 " " $2 }' > $restorefile
rm ~macports/macportsinstalled.txt
ln -s $logfile ~macports/macportsinstalled.txt

これを portslog.sh とかで保存して sudo portslog.sh ってやって実行すると 2013-04-05macportsinstalled.txt っていうファイルにその時点のインストールされているパッケージ一覧が保存され,backto2013-04-05 っていうファイルにバージョン指定で acitvate するコマンドが保存されます.

安定して動いているときに,これを一度実行しておくと,後からその時点のバージョンに戻るのが一発でできるわけ.

sudo tcsh backto2013-04-05 とかやれば巻き戻し.

で,実際にこういう事をして復旧.実際には多少調整が必要な所もあったけど比較的短時間で何とかなりました.

実はもっと素晴らしい方法があるのでしょうか?

http://onohiroki.cycling.jp/tb/tb.cgi/weblog_d20130406n1 TrackBack