Monthly Archives: 4月 2012

pkgのデータベースが壊れたでござる(pkg_info: corrupted record (pkgdep line without argument))

Pocket

pkg_info: corrupted record (pkgdep line without argument), ignoringが出たときの対処法。

まずこのコマンドを叩く。

$ grep -A1 "^@pkgdep $" /var/db/pkg/*/+CONTENTS

例えばこういう応答が返る。

/var/db/pkg/php5-xmlwriter-5.3.10/+CONTENTS:@pkgdep
/var/db/pkg/php5-xmlwriter-5.3.10/+CONTENTS-@comment DEPORIGIN:lang/php5

2行目に表示されているlang/php5をインストールすればOK。

No tags for this post.

portsnap, freebsd-updateにuser:password@proxy形式のHTTP_PROXYを読ませるには。(phttpgetを改造)

Pocket

http://d.hatena.ne.jp/flageo/20060501/p1

でも書いたけど、phttpget、つまりはportsnap, freebsd-updateはhttp://user:password@proxy.server.com:8080形式の環境変数HTTP_PROXYを読んでくれない。

そこでportsnap, freebsd-updateを実行するときにはHTTP_PROXY, HTTP_PROXY_AUTHに付け替える必要があるわけだが、これが面倒くさい。

というわけで、phttpget自体を改造する。

ネタはhttp://www.freebsd.org/cgi/query-pr.cgi?pr=129431

$ uname -r
8.2-RELEASE-p3
$ grep FBSDID ./phttpget.c
__FBSDID("$FreeBSD: src/usr.sbin/portsnap/phttpget/phttpget.c,v 1.14.2.1.6.1 2010/12/21 17:09:25 kensmith Exp $");

以上の/usr/src/usr.sbin/portsnap/phttpget/phttpget.cに対して以下のような修正を。

$ diff -u phttpget.c.orig phttpget.c
--- phttpget.c.orig     2012-04-05 10:58:52.000000000 +0900
+++ phttpget.c  2012-04-05 11:04:25.000000000 +0900
@@ -44,7 +44,7 @@
#include <sysexits.h>
#include <unistd.h>
-static const char *    env_HTTP_PROXY;
+static char *          env_HTTP_PROXY;
static char *          env_HTTP_PROXY_AUTH;
static const char *    env_HTTP_USER_AGENT;
static char *          env_HTTP_TIMEOUT;
@@ -136,6 +136,11 @@
p = strchr(env_HTTP_PROXY, '/');
if (p != NULL)
*p = 0;
+               if (strchr(env_HTTP_PROXY, '@')) {
+                       proxy_auth_user = strsep(&env_HTTP_PROXY, ":");
+                       proxy_auth_pass = strsep(&env_HTTP_PROXY, "@");
+                       p = strchr(env_HTTP_PROXY, '@');
+               }
p = strchr(env_HTTP_PROXY, ':');
if (p != NULL) {
*p = 0;

あとは/usr/src/usr.sbin/portsnap/phttpget/でmakeして、できたphttpgetを/usr/libexec配下にコピーすればOK。

当然ながらOSの更新(freebsd-updateやmake buildworld install)すると元に戻るので注意。

No tags for this post.