macportsのregistry.db

port rev-upgrade
--->  Scanning binaries for linking errors
Warning: Error parsing file /opt/local/bin/alter.mp_1459228313: Error opening or reading file
Warning: Error parsing file /opt/local/bin/asco.mp_1459228313: Error opening or reading file
Warning: Error parsing file /opt/local/bin/asco-test.mp_1459228313: Error opening or reading file
Warning: Error parsing file /opt/local/bin/log.mp_1459228313: Error opening or reading file
Warning: Error parsing file /opt/local/bin/monte.mp_1459228313: Error opening or reading file
Warning: Error parsing file /opt/local/bin/postp.mp_1459228313: Error opening or reading file
Warning: Error parsing file /opt/local/bin/rosen.mp_1459228313: Error opening or reading file
--->  No broken files found.                             

でWarningが出ていました。無視すれば使えていました。
portのコマンドで修正出来ないようなので直接データベースを操作して該当ファイル部分を削除しました。

registry.dbのバックアップをして、dbファイルを開きデータベースの構成を確認します。

cp /opt/local/var/macports/registry/registry.db .
cp registry.db registry.db.orig
sqlite3 registry.db
sqlite> .fullschema
CREATE TABLE metadata (key UNIQUE, value);
CREATE TABLE dependencies (id INTEGER, name TEXT, variants TEXT, FOREIGN KEY(id) REFERENCES ports(id));
CREATE TABLE portgroups (id INTEGER, name TEXT, version TEXT COLLATE VERSION, size INTEGER, sha256 TEXT, FOREIGN KEY(id) REFERENCES ports(id));
CREATE TABLE ports (id INTEGER PRIMARY KEY, name TEXT COLLATE NOCASE, portfile CLOB, location TEXT, epoch INTEGER, version TEXT COLLATE VERSION, revision INTEGER, variants TEXT, negated_variants TEXT, state TEXT, date DATETIME, installtype TEXT, archs TEXT, requested INT, os_platform TEXT, os_major INTEGER, UNIQUE(name, epoch, version, revision, variants));
CREATE TABLE files (id INTEGER, path TEXT, actual_path TEXT, active INTEGER, binary BOOL, FOREIGN KEY(id) REFERENCES ports(id));
CREATE INDEX dep_name ON dependencies (name);
CREATE INDEX portgroup_id ON portgroups(id);
CREATE INDEX portgroup_open ON portgroups(id, name, version, size, sha256);
CREATE INDEX dep_id ON dependencies(id);
CREATE INDEX port_name ON ports(name, epoch, version, revision, variants);
CREATE INDEX port_state ON ports(state);
CREATE INDEX file_port ON files(id);
CREATE INDEX file_path ON files(path);
CREATE INDEX file_actual ON files(actual_path);
/* No STAT tables available */

対象ファイルが有るか確認します。
WHEREの条件式で正規表現の仕方が判らなかったので対象対象ファイル名をそのまま指定しています。

sqlite> select * from files WHERE actual_path=='/opt/local/bin/asco.mp_1459228313' ;
1665|/opt/local/bin/asco|/opt/local/bin/asco.mp_1459228313|1|1

対象ファイルをすべて削除して、sqlite3を終了させてファイルを更新します。

sqlite> DELETE from files WHERE actual_path=='/opt/local/bin/asco.mp_1459228313' ;
省略
sqlite>.quit
sudo cp registry.db /opt/local/var/macports/registry/
sudo chown root:admin /opt/local/var/macports/registry/registry.db

port installed
port rev-upgrade
で動作を確認したところ、Warningは出なくなりました。
SQLは、ほとんど触った事が無かったのですがネットでコマンドを調べ目的は達成できました。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です