Hatena::Groupfreebsd

peanutsjamjamのFreeBSD日記 このページをアンテナに追加 RSSフィード

2011-03-16

/usr/local/lib/ruby/site_ruby/1.8/pkgtools.rb:953:in `initialize': ArgumentError (ArgumentError) /usr/local/lib/ruby/site_ruby/1.8/pkgtools.rb:953:in `initialize': ArgumentError (ArgumentError) - peanutsjamjamのFreeBSD日記 を含むブックマーク はてなブックマーク - /usr/local/lib/ruby/site_ruby/1.8/pkgtools.rb:953:in `initialize': ArgumentError (ArgumentError) - peanutsjamjamのFreeBSD日記 /usr/local/lib/ruby/site_ruby/1.8/pkgtools.rb:953:in `initialize': ArgumentError (ArgumentError) - peanutsjamjamのFreeBSD日記 のブックマークコメント

portupgrade でエラー出た。なんだろこれ。

freebsd74-1# pkgdb -u
--->  Updating the pkgdb
freebsd74-1# portupgrade -na | & tee pna
--->  Session started at: Wed, 16 Mar 2011 18:04:03 +0900
--->  Upgrade of x11/dri2proto started at: Wed, 16 Mar 2011 18:07:11 +0900
--->  Upgrading 'dri2proto-2.2' to 'dri2proto-2.3' (x11/dri2proto)
OK? [no]

(snip)

OK? [no]
--->  Upgrade of devel/libpciaccess ended at: Wed, 16 Mar 2011 18:07:13 +0900 (consumed 00:00:00)
--->  ** Upgrade tasks 120: 7 done, 0 ignored, 0 skipped and 0 failed
--->  Skipping 'bsdpan-LWP-MediaTypes-6.01' because it is held by user (specify -f to force)
--->  Session ended at: Wed, 16 Mar 2011 18:07:14 +0900 (consumed 00:03:10)
/usr/local/lib/ruby/site_ruby/1.8/pkgtools.rb:953:in `initialize': ArgumentError (ArgumentError)
        from /usr/local/sbin/portupgrade:1004:in `new'
        from /usr/local/sbin/portupgrade:1004:in `do_upgrade'
        from /usr/local/sbin/portupgrade:814:in `main'
        from /usr/local/sbin/portupgrade:810:in `each'
        from /usr/local/sbin/portupgrade:810:in `main'
        from /usr/local/lib/ruby/1.8/optparse.rb:791:in `initialize'
        from /usr/local/sbin/portupgrade:231:in `new'
        from /usr/local/sbin/portupgrade:231:in `main'
        from /usr/local/sbin/portupgrade:2219
freebsd74-1#

ためしに、bsdpan-LWP-MediaTypes-6.01 をアンインストールして、再度やってみた。

freebsd74-1# pkg_deinstall bsdpan-LWP-MediaTypes-6.01
--->  Deinstalling 'bsdpan-LWP-MediaTypes-6.01'
[Updating the pkgdb <format:bdb_btree> in /var/db/pkg ... - 324 packages found (-1 +0) (...)(? bsdpan-L
WP-MediaTypes-6.01) done]
freebsd74-1# portupgrade -na | & tee pna
--->  Session started at: Wed, 16 Mar 2011 18:14:50 +0900
--->  Upgrade of x11/dri2proto started at: Wed, 16 Mar 2011 18:17:43 +0900
--->  Upgrading 'dri2proto-2.2' to 'dri2proto-2.3' (x11/dri2proto)
OK? [no]

(snip)

OK? [no]
--->  Upgrade of x11-fonts/libfontenc ended at: Wed, 16 Mar 2011 18:17:44 +0900 (consumed 00:00:00)
--->  ** Upgrade tasks 119: 4 done, 0 ignored, 0 skipped and 0 failed
--->  Skipping 'bsdpan-Net-HTTP-6.00' because it is held by user (specify -f to force)
--->  Session ended at: Wed, 16 Mar 2011 18:17:45 +0900 (consumed 00:02:54)
/usr/local/lib/ruby/site_ruby/1.8/pkgtools.rb:953:in `initialize': ArgumentError (ArgumentError)
        from /usr/local/sbin/portupgrade:1004:in `new'
        from /usr/local/sbin/portupgrade:1004:in `do_upgrade'
        from /usr/local/sbin/portupgrade:814:in `main'
        from /usr/local/sbin/portupgrade:810:in `each'
        from /usr/local/sbin/portupgrade:810:in `main'
        from /usr/local/lib/ruby/1.8/optparse.rb:791:in `initialize'
        from /usr/local/sbin/portupgrade:231:in `new'
        from /usr/local/sbin/portupgrade:231:in `main'
        from /usr/local/sbin/portupgrade:2219
freebsd74-1#

どうすりゃいいんだ。

環境:

freebsd74-1# uname -a
FreeBSD freebsd74-1.local 7.4-RELEASE FreeBSD 7.4-RELEASE #0: Thu Feb 17 03:51:56 UTC 2011     root@walker.cse.buffalo.edu:/usr/obj/usr/src/sys/GENERIC  i386
freebsd74-1#
freebsd74-1# diff -u /usr/local/etc/pkgtools.conf.sample /usr/local/etc/pkgtools.conf
--- /usr/local/etc/pkgtools.conf.sample 2011-03-16 16:21:53.000000000 +0900
+++ /usr/local/etc/pkgtools.conf        2011-03-16 18:26:10.000000000 +0900
@@ -384,6 +384,9 @@
   #   }

   MAKE_ARGS = {
+    '*' => [
+      'WITHOUT_X11=1',
+    ],
   }

   MAKE_ENV = {
freebsd74-1#
freebsd74-1# grep -C4 'bsdpan' /usr/local/etc/pkgtools.conf
  # cf. pkg_glob(1), ports_glob(1)
  #
  # e.g.:
  #   HOLD_PKGS = [
  #     'bsdpan-*',
  #     'x11*/XFree86*',
  #   ]

  HOLD_PKGS = [
    'bsdpan-*',
  ]

  # IGNORE_MOVED: array
  #
freebsd74-1#

AzzarelAzzarel2013/02/13 21:30Fraknly I think that's absolutely good stuff.

nlgwlslnlgwlsl2013/02/14 23:40BoOKjd <a href="http://mrsugzahdcew.com/">mrsugzahdcew</a>

ruwhmmrruwhmmr2013/02/17 01:38jPnHIy <a href="http://vryrdnmjngfu.com/">vryrdnmjngfu</a>

トラックバック - http://freebsd.g.hatena.ne.jp/peanutsjamjam/20110316

2009-05-17

devel/libmba Shared object "libmba.so.0.9" not found devel/libmba Shared object "libmba.so.0.9" not found - peanutsjamjamのFreeBSD日記 を含むブックマーク はてなブックマーク - devel/libmba Shared object "libmba.so.0.9" not found - peanutsjamjamのFreeBSD日記 devel/libmba Shared object "libmba.so.0.9" not found - peanutsjamjamのFreeBSD日記 のブックマークコメント

devel/libmba という ports がある。C 言語用のライブラリだ。

libmba - A library of generic C modules
http://www.ioplex.com/~miallen/libmba/

これをインストールして使おうとすると、うまく動かない。

まず、こんなプログラムを書いた:

%cat myhexdump.c
#include <stdio.h>
#include <mba/hexdump.h>

int main(int argc, char **argv) {
        int arr[] = {0xff, 0xaa, 0x30, 0x31};

        hexdump(stdout, arr, sizeof(int)*4, 16);

        return 0;
}

これを、次のようにしてコンパイルした

%cc -pipe -I/usr/local/include -c myhexdump.c
%cc -o myhexdump -L/usr/local/lib -lmba myhexdump.o

動かそうとすると、怒られた

%./myhexdump
/libexec/ld-elf.so.1: Shared object "libmba.so.0.9" not found, required by "myhexdump"

しょうがないので、/usr/local/lib ディレクトリを調べてみた

%cd /usr/local/lib
%ls -l libmba*
-rw-r--r--  1 root  wheel  254720 May 17 17:57 libmba.a
lrwxrwxrwx  1 root  wheel      11 May 17 17:57 libmba.so@ -> libmba.so.0
-rwxr-xr-x  1 root  wheel  208372 May 17 17:57 libmba.so.0*

確かに、"libmba.so.0.9" ってのは無い。"libmba.so.0" だったらあるんだけどね。

なので、無理やり "libmba.so.0.9" を、「あるように」した

%su
Password:
#ln -s libmba.so.0 libmba.so.0.9
#ls -l libmba*
-rw-r--r--  1 root  wheel  254720 May 17 17:57 libmba.a
lrwxrwxrwx  1 root  wheel      11 May 17 17:57 libmba.so@ -> libmba.so.0
-rwxr-xr-x  1 root  wheel  208372 May 17 17:57 libmba.so.0*
lrwxr-xr-x  1 root  wheel      11 May 17 21:42 libmba.so.0.9@ -> libmba.so.0

先ほどのディレクトリに戻って、再度実行

%./myhexdump
00000:  ff 00 00 00 aa 00 00 00 30 00 00 00 31 00 00 00  |........0...1...|

うまく行きました。

もうちょっと、調べてみた

ちなみに、libmba の version とか、私の FreeBSD の version は、こうです

%pwd
/usr/ports/devel/libmba
%head Makefile
# ex:ts=8
# Ports collection makefile for:        libmba
# Date Created:                 Sep 24, 2002
# Whom:                         ijliao
#
# $FreeBSD: ports/devel/libmba/Makefile,v 1.22 2009/03/09 19:29:03 miwi Exp $
#

PORTNAME=       libmba
PORTVERSION=    0.9.1
%uname -prs
FreeBSD 7.2-RELEASE i386

もう一度、make install して、様子を見てやる。そのために、まず make deinstall から

#make deinstall
===>  Deinstalling for devel/libmba
===>   Deinstalling libmba-0.9.1
#make install
===>  Installing for libmba-0.9.1
===>   libmba-0.9.1 depends on shared library: expat.6 - found
===>   Generating temporary packing list
===>  Checking if devel/libmba already installed
./mktool -i libmba.a /usr/local/lib
./mktool -i -libname mba -libvers 0.9.1 /usr/local/lib
./mktool -i src/mba/dbug.h src/mba/msgno.h src/mba/stack.h src/mba/linkedlist.h src/mba/hashmap.h src/mba/hexdump.h src/mba/cfg.h src/mba/pool.h src/mba/varray.h src/mba/shellout.h src/mba/csv.h src/mba/iterator.h src/mba/text.h src/mba/path.h src/mba/eval.h src/mba/svsem.h src/mba/allocator.h src/mba/suba.h src/mba/time.h src/mba/bitset.h src/mba/svcond.h src/mba/daemon.h src/mba/diff.h src/mba/misc.h /usr/local/include/mba
./mktool -i docs/man/*.3m.gz /usr/local/man/man3
make -f Makefile.bsd platform_specific_install
make: cannot open Makefile.bsd.

installation successful
===>   Running ldconfig
/sbin/ldconfig -m /usr/local/lib
===>   Registering installation for libmba-0.9.1

なんだ、"make: cannot open Makefile.bsd." って怒られてるじゃん。コケてるのに、"installation successful" って言うなよなぁ。

この、"Makefile.bsd" ってのがぜんぜん見当たらないんだけど、どうしたらいいんだろ。

追記

いろいろ調べて原因がわかりました。

libmba を make してる時の様子をじーっとみていると、当然 so ファイルを作る所も見れるのだけど、そのときのコマンドはこうなってる。(改行を勝手に追加)

gcc -shared -Wl,-soname,libmba.so.0.9 -lutil
 src/dbug.pic.o src/stack.pic.o src/linkedlist.pic.o src/hashmap.pic.o src/hexdump.pic.o
 src/msgno.pic.o src/cfg.pic.o src/pool.pic.o src/varray.pic.o src/shellout.pic.o
 src/csv.pic.o src/path.pic.o src/misc.pic.o src/text.pic.o src/eval.pic.o
 src/svsem.pic.o src/allocator.pic.o src/suba.pic.o src/time.pic.o src/bitset.pic.o
 src/svcond.pic.o src/daemon.pic.o src/diff.pic.o
 -o libmba.so.0

このオプション指定の中の -Wl,-soname,libmba.so.0.9 という部分は、リンカにそのまま渡される部分なのだけど、リンカに対して「 sonamelibmba.so.0.9 だよ」と言っている。なのに、実際に作ってるファイルは、最後のオプション指定にあるように libmba.so.0 となっている。くいちがってる。

リンカ ld のマニュアルを見てみると、-soname オプションの説明はこうなってる

 -soname=name
        ELF の共有オブジェクトを生成する際に、内部の DT_SONAME フィールドに
        、指定した name を設定します。実行形式が DT_SONAME フィールドを持つ
        共有オブジェクトとリンクされると、実行形式が実行される時に、動的リ
        ンカはリンカに与えられたファイル名を使う代わりに DT_SONAME フィール
        ドで指定された共有オブジェクトをロードしようとします。

なるほどね。実行形式の中に「おいらを動かすときは "libmba.so.0.9" とリンクしてね」って焼き込まれちゃうんだな。共有オブジェクトの中の DT_SONAME フィールドの値が、実行形式の中に書き込まれちゃう。

なので、make が終わってから、make install する前に work/libmba-0.9.1 に降りていって、先ほどのコマンドを、-soname オプションのところだけ変えて実行してやるという方法でもうまく行きます。

gcc -shared -Wl,-soname,libmba.so.0 -lutil src/dbug.pic.o ...(略)... src/diff.pic.o -o libmba.so.0

これをやってあげることによって、libmba.so.0 の中の DT_SONAME フィールドが "libmba.so.0.9" ではなく "libmba.so.0" になるので、実行形式の中に焼きこまれる値と、実際に存在するファイル名が食い違うってことがなくなる。

以下の記事も大変参考になりました。

共有ライブラリ - name-3333’s memo
http://d.hatena.ne.jp/name-3333/20080516/1210918147

npzlbrcspnpzlbrcsp2012/12/08 18:08iVxRXv <a href="http://wozkcpuyxviz.com/">wozkcpuyxviz</a>

sohwpexisohwpexi2012/12/09 23:274WcS6u , [url=http://frlhjxbyyyqn.com/]frlhjxbyyyqn[/url], [link=http://hxrmegbgzsmo.com/]hxrmegbgzsmo[/link], http://kowdizadwceq.com/

hcuxuzeadkhcuxuzeadk2012/12/11 14:40p74ooF <a href="http://brosjztwfxxc.com/">brosjztwfxxc</a>

gcywoqqqfvkgcywoqqqfvk2012/12/13 01:16Ijmyh6 , [url=http://favhofulurds.com/]favhofulurds[/url], [link=http://dkdqpbvumdzp.com/]dkdqpbvumdzp[/link], http://thjdjefosfpx.com/

トラックバック - http://freebsd.g.hatena.ne.jp/peanutsjamjam/20090517

2009-01-30

src.conf src.conf - peanutsjamjamのFreeBSD日記 を含むブックマーク はてなブックマーク - src.conf - peanutsjamjamのFreeBSD日記 src.conf - peanutsjamjamのFreeBSD日記 のブックマークコメント

めもめも。

FreeBSD source tree のビルドに使う KNOB の settings は、etc/make.conf ではなく、etc/src.conf に書く。

いつからなんだろう。

man 5 src.conf

HISTORY
     The src.conf file appeared in FreeBSD 7.0.

マニュアルページ src.conf(5) に列挙してある knob 以外の変数は、もし書いたとしても、使われないぽい。

実験

まず、src.conf/etc に存在しなかったので作成した。

そして、こんな風に書いた

WITHOUT_PROFILE= YES
WITHOUT_PROFILEX= YES

上の、WITHOUT_PROFILE は、マニュアルページ src.conf に書いてある KNOB 変数。

下の、WITHOUT_PROFILEX は、私が勝手に決めた変数。X をくっつけた。

そして、カレントディレクトリはどこでもいいので、次のようにコマンドを打つ。

make -dv -n | & less

(せつめい)

  • オプション "-dv" は、make がどのような変数と値を持って実行されるのか、を表示させるため。
  • オプション "-n" は、make に、実際には何もさせないように。(もし、カレントディレクトリに Makefile があったりしても、これをつけておけば make は「何をするつもりか」を表示するだけで実際にはなにもしない。カレントディレクトリに何も無ければ必要なし。)
  • "| & less" で、標準出力に出てきたものだけでなく、標準エラー出力に出てきたものもまとめて less に渡す。

すると、出力に WITHOUT_PROFILE は出てくるけど、X が付いた WITHOUT_PROFILEX は出てこない。

結論

マニュアルページ src.conf(5) に出てこない変数を、src.conf に書いたって意味無いよ。

参考

src.conf(5)

トラックバック - http://freebsd.g.hatena.ne.jp/peanutsjamjam/20090130

2007-02-06

xorg.conf と Xorg.0.log xorg.conf と Xorg.0.log - peanutsjamjamのFreeBSD日記 を含むブックマーク はてなブックマーク - xorg.conf と Xorg.0.log - peanutsjamjamのFreeBSD日記 xorg.conf と Xorg.0.log - peanutsjamjamのFreeBSD日記 のブックマークコメント

xorg.conf と Xorg.0.log をここに張り付けておく。張っておくことで誰かの役に立つかも知れないし、その誰かは将来の私かも知れないし。云々。

xorg.conf は、X Window System の設定ファイルで、X を起動するたびに読み込まれる。どこに置けばいいか、とか、どう書けばいいかについての基本的情報xorg.conf(5) にある。私は /etc/X11/xorg.conf という場所に置いています。

Xorg.0.log は、X が起動している最中に書き残すログ。特に、xorg.conf に間違ったことを書いたりするとそれを報告してくれるので、設定ファイルを書いたり、変更した時に確認すると思わぬミスの発見に役立ったりする。私の FreeBSD 6.2 上で動いている X Window System Version 6.9.0 では、/var/log/Xorg.0.log という場所に作られる。下に張り付けたのは、startx で X を起動して、なにもせずに終了した時のもの。

実際には、私も xorg.conf の書きかたをしっかりと理解していないので、いろいろ文句をいわれている様子。時間があったらもうちょっと勉強したい。

続きを読む

トラックバック - http://freebsd.g.hatena.ne.jp/peanutsjamjam/20070206

2007-02-01

dic コマンド dic コマンド - peanutsjamjamのFreeBSD日記 を含むブックマーク はてなブックマーク - dic コマンド - peanutsjamjamのFreeBSD日記 dic コマンド - peanutsjamjamのFreeBSD日記 のブックマークコメント

FreeBSD を再インストールするたびにこんなコマンドを作るので、次回からそうしなくてもいいようにここにメモ

#! /bin/sh
if [ ! $# -eq 1 ]; then
    echo 'usage: dic word'
    exit 1
fi
word=`echo -n "$1" | nkf -Ew`
w3m "http://dic.yahoo.co.jp/dsearch?enc=UTF-8&p=$word&stype=0&dtype=2"

これを /home/your_account/bin に dic という名前で置いて、

% dic internet

とか打つと、Yahoo!辞書internet という単語のページが w3m で開く。

w3mnkf

w3m の代わりに firefox を使って、firefox -new-tab とかやってもいいかもしれない。

トラックバック - http://freebsd.g.hatena.ne.jp/peanutsjamjam/20070201