カーネル/VM Advent Calendar 一日目: eventfd, timerfd, signalfd
ひ、日付? な、なんのことです…!?
最初はfutex()とかカーネルの変更でpostgresqlが遅くなったとかの話をからめようかと思ってたんですがfutex()調べてたらどんどん大きくなってしまったので今回はスキップして(そのうちあるであろう)2回目にまわしとくことに。
ということで、今回はfutex()から似たところ?で、 epoll, kqueue, *fdあたりを簡単にまとめてみようと思います。
select
まずはselect()のおさらいを。
こんなふうにサーバにクライアントが5つぶらさがっています。クライアントは常時接続はしていますが、ずっとサーバと通信しているわけではありません。時々サーバにリクエストを投げ、サーバは適宜リクエストに応答します。サーバはsocketを作ってクライアントと通信をしています。
言うまでもないことですが、こんなコードではうまく動きません。
for(;;){ for(i=0; i < NCLIENTS; i++){ recv(sock[i], buf, len, 0); ... } }
クライアント0 からのリクエストを待ってblockしている間に、他のクライアントからのリクエストが来ても全く応答することができません。
かといって、MSG_DONTWAIT を使ってnon-blockにしてsleepするようにしても効率はよくありません。
for(;;){ for(i=0; i < NCLIENTS; i++){ recv(sock[i], buf, len, MSG_DONTWAIT); ... sleep(1); } }
そこで select() を使います。
fd_set rfds; FD_ZERO(&rfds); for(i=0; i < NCLIENTS; i++) FD_SET(sock[i], &rfds); while(select(nfds, &rfds, NULL, NULL, NULL) > 0){ ... }
rfdsというファイルデスクリプタの集合にsocketを登録し、select()を呼び出すと(この場合は) 読みこみができる状態になったファイルデスクリプタの数を返してくれます。
すぐに読みこみ可能なファイルデスクリプタが存在しない場合には、どれかが読みこみ可能になるまでblockします。なので、select()が返ってきたところで適宜クライアントのリクエストに応答していけばいいわけです。
epoll
さて、select()ではファイルデスクリプタの集合をユーザランド側で管理しています。これを毎回 select()でカーネルに渡し、カーネル側では呼び出されるごとに、このファイルデスクリプタの集合をスキャンしています。 この実装ではファイルデスクリプタの数が増えていくと、どんどんとselect()の処理は重くなっていきます。
そこでLinuxでは epollというシステムコールを使います。
int epollfd = epoll_create(10); ev.events = EPOLLIN; ev.data.fd = sock[i] epoll_ctl(epollfd, EPOLL_CTL_ADD, sock[i], &ev); while(epoll_wait(epollfd, events, 10, -1) > 0){ ... }
epollでは epoll_createを使ってカーネル側に監視するファイルデスクリプタを管理するためのデータを作らせます。 そして返り値として、後の操作に使うepoll用のファイルデスクリプタを受け取ります。 このepollfdをepoll_ctl()に渡して監視対象とするファイルデスクリプタを登録します。カーネル側が監視すべきファイルデスクリプタを知っているので、select()のようにファイルデスクリプタを全てスキャンしなおす必要はなく、パフォーマンスが改善されています。
timerfd
さてはて、ファイルやソケット以外にも知りたい「外からの通知」というものはあります。 たとえばタイマー・シグナルなどです。これも epollで監視できたら便利ですね。 というわけで、 tiemrfd, signalfd, eventfdといったシステムコールでファイルデスクリプタ経由で「通知」をうけとることができるようになります。
まずはタイマーの通知をうけとるための timerfdです。 timerfd_create()でファイルデスクリプタを作成し、timerfd_settime()で「最初にタイマー通知が行なわれる時刻」と「その後タイマーが次に通知されるまでのインターバル」(もしくは0を設定してタイマーをくりかえさない)が設定できます。 両方ともに0が設定されるとタイマーがオフになります。
このファイルデスクリプタをread()すると前回のread()またはタイマーを設定した時から、タイマーに設定した時間が過ぎた回数が返ってきます。 もしも、まだ設定した時間が経過していない時には、その時刻までread()はblockします。もちろん、これを epollやselectで監視するファイルデスクリプタとして設定できます。
signalfd
signalfd()を使うと指定したシグナルを監視するファイルデスクリプタを作ることができます。これをread()すると、struct signalfd_siginfoの(配列の)形式でシグナルの情報が読みとれます。 これもselect, epollに指定することができます。
ただし、事前にsigprocmask()でデフォルトの動作が起こらないようにしておかないとよくわからない挙動になるかもしれません。詳しくはこのへんを unix のシグナル処理あれこれ - Emacs ひきこもり生活
eventfd
eventfdはシンプルなイベントの通知を行なうことができるファイルデスクリプタです。たとえば、一方がpipeをreadしてblockし、もう一方のプロセスがそのpipeにwriteすることでblockが解除されて、readしていたプロセスが動き出すようなコードを考えます。pipeに書いているデータには特に意味はなく、相手のプロセスを起こすことにしか使われていません。これだけのためにpipeを使うのは効率が悪いのでシンプルなeventfdを使うとよいという感じです。
eventfdには64bitの整数が関連つけられていて、read()した時にこの値が0であるとblockします。write()では同じく64bitの正数を書いて、その値がeventfdに関連つけられている整数に加算されます。この時、read()でblockしていたプロセスは、write()されていた値を受け取り、eventfdの整数は0に戻ります。
eventfdは様々なカーネルからの通知を受け取るのにも使うことができます。たとえば、eventfdを作り、cgroupのmemory.usage_in_bytesを開いて、cgroup.event_controlに"
ほかにもeventfdへのイベント通知で、KVMのguestにinterruptが起こるような設定をすることもできます。
kqueue
わぁ、いろんな *fdを使うことでいろんなものをepollで効率よく監視できるようになってちょー便利ですね。 でも、epollはLinuxでしかありません。 FreeBSDではどうするの? kqueue() を使います。
kqueue()では単体で以下のイベントが監視できます
- ファイルデスクリプタがread()できるようになった
- ファイルデスクリプタがwrite()できるようになった
- ファイルが(削除された|書かれた|サイズが増えた|属性が変わった|リンクがふえた|名前が変わった|revokeされた)
- プロセスが(exitした|forkした|execした)
- シグナルをうけた
- タイマーイベント
- その他ユーザレベルのイベント
うわぁ…便利……
REQUIRED_USE
こんな emerge エラーを見たことはあるだろうか
Calculating dependencies \ !!! Problem resolving dependencies for sys-kernel/dracut ... done! !!! The ebuild selected to satisfy "dracut" has unmet requirements. - sys-kernel/dracut-024-r2::gentoo USE="(multilib) -debug -device-mapper -net -optimization (-selinux)" DRACUT_MODULES="btrfs lvm ssh-client syslogame -bootchart -caps -cifs -crypt -crypt-gpg -crypt-loop -dmraid -dmsquash-live -gensplash -iscsi -livenet -mdraid -multipath -nbd -nfs -plymouth - The following REQUIRED_USE flag constraints are unsatisfied: dracut_modules_lvm? ( device-mapper ) dracut_modules_ssh-client? ( net ) The above constraints are a subset of the following complete expression: dracut_modules_crypt-gpg? ( dracut_modules_crypt ) dracut_modules_crypt-loop? ( dracut_modules_crypt ) dracut_modules_livenet? ( dracut_moduleslive ) dracut_modules_crypt? ( device-mapper ) dracut_modules_dmraid? ( device-mapper ) dracut_modules_dmsquash-live? ( device-mapper ) dracut_modut? ( device-mapper ) dracut_modules_lvm? ( device-mapper ) dracut_modules_cifs? ( net ) dracut_modules_iscsi? ( net ) dracut_modules_livenet? ( netmodules_nbd? ( net ) dracut_modules_nfs? ( net ) dracut_modules_ssh-client? ( net )
これには EAPI=4 から使える REQUIRED_USE というものが関係している。
けど、とりあえずどーすれば emerge できるんよ? という話から
注目するのは真ん中の
The following REQUIRED_USE flag constraints are unsatisfied: dracut_modules_lvm? ( device-mapper ) dracut_modules_ssh-client? ( net )
読み方は
- USE=dracut_modules_lvm がある時は USE=device-mapper も必要だよ。(でも、指定されてないよ)
- USE=dracut_modules_ssh_client がある時は USE=net も必要だよ。(でも、指定されてないよ)
なので、 USE=device-mapperと USE=netを有効にしてあげるといい。 flaggie でやるならこんな感じ。
# flaggie dracut +device-mapper +net
そして、本題の REQUIRED_USE について
dracutには一番下に書いてあるように
dracut_modules_crypt-gpg? ( dracut_modules_crypt ) dracut_modules_crypt-loop? ( dracut_modules_crypt ) dracut_modules_livenet? ( dracut_moduleslive ) dracut_modules_crypt? ( device-mapper ) dracut_modules_dmraid? ( device-mapper ) dracut_modules_dmsquash-live? ( device-mapper ) dracut_modut? ( device-mapper ) dracut_modules_lvm? ( device-mapper ) dracut_modules_cifs? ( net ) dracut_modules_iscsi? ( net ) dracut_modules_livenet? ( netmodules_nbd? ( net ) dracut_modules_nfs? ( net ) dracut_modules_ssh-client? ( net )
といった REQUIRED_USE が指定されている。 REQUIRED_USE はようするに、USE関係間の依存関係をしめすもの。
上の例だと全て、 "foo? ( bar )" の形をしていて 「USE=fooなら、 USE=barも必ず必要」という形式になっているが、他にも使えるフォーマットはある。
- "foo? ( !bar )"
- USE=foo なら、 USE=barはあってはならない
- "foo? ( || ( bar baz quux ) )"
- USE=foo なら bar,baz,quuxの少なくとも一つは有効になっていないといけない
- "^^ ( foo bar baz )"
- foo, bar, bazのどれが一つは有効になっていないといけない。 なおかつ、二つ以上有効にすることはできない
- "|| ( foo bar baz )"
- 上の 「USE=fooなら」がない版。 foo, bar, bazの少なくとも一つは有効になっていないといけない
さらに EAPI=5 からは "?? ( foo bar baz )" として、foo, bar, bazの中でどれか一つだけが有効・もしくは全て無効にならなければいけない、といった指定ができるようになっている。
結局のところ、ebuildがこれらを使って指定している中で、満たされていないものを Portageが真ん中のところに表示してくれていた、というわけ。
この指定を覚えておいて、適宜USEフラグをいじっていけばよい。
新APIGentoo山盛り
はじめに
一部で人気を博しているというこの記事から二年もたったのでいい加減いろいろと新しくしていこうと思うんですね。新時代Gentooの福音的な感じでね。
やっぱり想定的にはインストールしたけど、これからどうすんべ? とか、なんとなーくわかってきたけどもう少し楽な方法はなかとかね?ってあたり。
ちなみに環境は testingなので紹介する機能の中にはまだstableでは使えないものもあるかもしれないですね。そのへんはご容赦を。
/etc/make.conf
やっぱり基本となるのはこのファイル。だけど /etc/make.confは/etc/portage/make.confに移動されています。知ってましたか? 新規インストールだけなんでとりあえずそんなに気にすることもないでしょう
*FLAGS
CFLAGS="-O2 -pipe -fomit-frame-pointer -march=corei7-avx -mcx16 -msahf -mno-movbe -maes -mpclmul -mpopcnt -mno-abm -mno-lwp -mno-fma -mno-fma4 -mno-xop -mno-bmi -mno-bmi2 -mno-tbm -mavx -mavx2 -msse4.2 -msse4.1 -mno-lz-cnt -mrdrnd -mf16c -mfsgsbase --param l1-cache-size=32 --param l1-cache-line-size=64 --param l2-cache-size=3072 -mtune=generic -frecord-gcc-switches" CXXFLAGS="${CFLAGS}" FFLAGS=${CFLAGS} FCFLAGS=${CFLAGS}
昔と大きく変わってはいませんね。あいかわらず、 "-march=native -O2 -pipe -fomit-frame-pointer"を展開したものです。それと最後に "-frecord-gcc-switches"をつけています。これがあると、gccがどんなオプションでビルドされたかを記録してくれるので、portageがそれを見て、ユーザの設定したCFLAGSが反映されていないよ?といったチェックができるようになります。まあ、これは開発者用ですね
USE
USE="mmx sse sse2 X emacs ssse3 -ldap xft fbcon xinerama wifi midi cjk xcomposite -bluetooth policykit cdda m17n-lib hddtemp python perl v4l v4l2 threads nsplugin sse3 llvm vaapi vdpau dga win32codecs bash-completion pulseaudio avahi xattr zsh-completion gtk3 -cups alsa infinality"
昔よりだいぶコンパクトになりました。最近はUSEフラグは手動でいじるのではなく、"flaggie"というツールを使うことにしています。
たとえば、 media-libs/freetypeでUSE='infinality'したいなーと思ったら
# flaggie media-libs/freetype +infinality
と、することで、いちいち/etc/portage/package.useを開かなくてもコマンド一つで編集できます。もし typoしちゃっても
# flaggie media-libs/freetype +infinity At argv[2]='+infinity': infinity seems to be an incorrect flag for media-libs/freetype
と聞いてくれるので安心です。パッケージごとではなく、グローバルに変えたい時には
# flaggie +cjk # flaggie -cjk
のようにすればOKです。
FEATURES
FEATURES='-stricter parallel-install parallel-fetch preserve-libs'
portageのさまざまな機能をON/OFFするFEATUESです。開発者用のプロファイルでデフォルトになってる "stricter"を切ってます。これがあるといろんなものがemerge通らなくなるのでね orz
FEATURES='parallel-install'を使うことで、より細かいロックを使うことで、インストールをいままでよりも並列度を上げて実行しています。
そして、 FEATURES='preserved-libs' これはなかなか大事な機能。
まずはこの機能が動いてない時の話をします。
libBを使っているpkgAをemergeします。すると
pkgA-0.1 -> libB-0.1
こんなふうに、AからBへの実行時リンクが"libB-0.1"という名前で行なわれます。ここで、libBがアップデートされます。 emergeはlibB-0.2をインストールし、libB-0.1が削除されます。
pkgA-0.1 -> (libB-0.1) libB-0.2
すると、pkgAは実行時リンクするべき"libB-0.1"が見つからないので、実行できなくなります。解決するには、再度pkgAをemergeして、pkgAのリンクをlibB-0.2へと張りかえなければいけません。
こういった、「リンクが壊れたパッケージ」を捜し出してリビルドするツールが "revdep-rebuild"でした。しかし、このプログラムは確かに便利で確実ではあるものの、システムの全バイナリをスキャンするために遅いという問題点がありました。
また、ebuildではpreserve_old_libを呼び出して、残しておくべきライブラリを指定すると、昔のライブラリをコピーして残しておいてくれました。昔のライブラリが残っていれば、コマンドはいままで通りに動きます。あとは適宜revdep-ebuildではりかえるだけです。しかし、残ったライブラリは、リンクをはりかえた後にユーザが手動で削除する必要があり、忘れさられることがありました。
さて、そこでこんな仕事はportageに自動的にやらせればいい、ということになります。 FEATURES='preserved-libs' しておくことで
- 過去のライブラリを残しておく
- 新しいライブラリにはりかえるべきパッケージを認識する
- それらをemerge @preserved-rebuildでリビルドする
- リビルドが完了した時点で、過去のライブラリを削除する
といったことができるようになります。
この preserved-libsの機能はだいぶ前から portage-2.2系列には入っていたものの、portage-2.1系列には入っていませんでした。しかし、EAPI=5の変更の影響もあって、portage-2.1にもコードが入ることとなりました。とはいえ、デフォルトでは無効になっていますから、 FEATURES='preserved-libs' が必要になる、というわけです。
Rubyのこと
RUBY_TARGETS="ruby19"
rubyのパッケージでターゲットにしたい、rubyのvariantを列挙します。 いまのところ
- ruby18
- ruby19
- ree18
- jruby
- rbx
が使えるみたいですね。
ちなみにいまでは ruby-1.9がデフォルトになっています。 Project:Ruby/Ruby 1.9 migration - Gentoo Wiki
起動あたりのこと
DRACUT_MODULES="btrfs syslog ssh" GRUB_PLATFORMS="efi-64
もうすっかりGRUB2とinitrdを使っています。initrdは/usrが/と別パーティションであれば、必須です。udevが/usrがmountされてないと動かなくなっちゃったんですよねえ。
で、initrd作りには distro-neutralなinitrdを作ってくれるツールのdracutを使っています。上の DRACUT_MODULES はdracutのUSEフラグですね。
そして、下の方はGRUB2のUSEフラグ。 efi bootしています。
dracutの使い方は簡単で
# dracut /boot/initrd-<kernel version> <kernel version> --force
こんな感じ。 dracutは上書きをしてくれないので、--forceをつけていますが、そこはお好みで。
そして、grub2は
# grub2-mkconfig -o /boot/grub2/grub.cfg
とかしていると、インストールされているカーネルを見つけだしてgrub.cfgを勝手に作ってくれますね。便利なもんです。
このへんをカーネルをインストールするごとにやれば、いいわけですがまあめんどいですしうっかり忘れそうですよね。そこで、/root/bin/installkernel というファイルを使います。ここにスクリプトをおいておけば、カーネルでの make instalがこいつを実行してくれます。うちでは
#!/bin/bash make modules_install # モジュールインストールする /sbin/installkernel "$@" # カーネルインストールする # initramfsの作成 [ -f /boot/initramfs-$1.img ] && mv /boot/initramfs-$1.img /boot/initramfs-$1.old.img dracut /boot/initramfs-$1.img $1 ln -sf initramfs-$1.img /boot/initramfs.img # Grubのメニュー更新 grub2-mkconfig -o /boot/grub2/grub.cfg
こんな感じで実行しています。これで、一通りのカーネル更新時の作業が全て実行されます。
EAPI=5
最初に書いた通りこの記事は「新時代Gentooの福音的」ってことで、新しく採択されたEAPI=5についても書いていきます。 EAPIはebuild全体の書式とかを統括してるAPIですね。新しくなるとなにがいいの? 新しい革新的な機能がふえます。
Sub-SLOT
Sub-SLOTがユーザから見ると一番大きな変更となります。これは上でも書いた revdep-rebuild, preserved-libs の進化系です。 preserved-libs は確かにライブラリに起因するリビルドを楽にしてくれます。しかし、
- emerge @preserved-rebuild が必要である
- ライブラリに起因する問題しか解決できない
この2つの問題があります。1つ目は解説しなくてもわかるでしょうが、2つ目はどういうことでしょうか。 たとえば、現状、GentooではPerlの本体が更新された時に perl-cleanerコマンドを使って全てのperlのパッケージを新しいバージョンのものへリビルドしています。emergeでperlが更新されてから、perl-cleanerを実行するまでの間はperlのプログラムがうまく動かなかったりしますし、さらにはいっぱい更新した時なんかはうっかりperl-cleanerの実行を忘れているかもしれません。
そこで、Sub-SLOTというものが導入されます。SLOTは「同一パッケージでSLOTが異なるものを共存させる」ための仕組みですが、Sub-SLOTは「同一SLOTでAPIの変更(など)を指定する」ための仕組みです。たとえばdev-lang/perl-5.16.1でこれを使うなら
SLOT="0/${PV}"
のように書きます。一方で、perlのパッケージは
RDEPEND="dev-lang/perl:=" DEPEND="${RDEPEND}"
のように、":="をつけておきます。これをつけると、emergeした時に、その時のdev-lang/perlのSub-SLOTへの依存が記録されます。すなわち、ここでは "dev-lang/perl:0/5.16.1=" というように記録されます。
さて、この後perl本体が更新され、"dev-lang/perl-5.16.2"がemergeされる、とします。この時、package managerはさきほどの "dev-lang/perl:0/5.16.1=" をチェックし、「dev-lang/perl-5.16.2をインストールすることで、この依存関係が壊れること」を認識します。すると、package managerは依存が壊れるものをリビルドする形で解決しようとします。これによって、いままで python-udater, perl-cleaner, haskell-updater, revdep-rebuildなどなど、壊れた依存を直すためのコマンドの役割が全てemergeに吸収され、emergeだけでなにもかもすむようになります。(実際のところは、haskell-updaterは結構使いますが…haskellの依存はいろいろ特殊…)
ということで、このSub-SLOTですがまだまだportageのメインツリーにはそこまで入ってきていません。gentoo-hasekllのツリーでは積極的にとりいれていて、新しいものはどんどんと":=" を使ったものに書きかわっているようです。
その他?
他にもebuildを書く側としては newhogeが標準入力を使えるようになったり、use.stable.maskというstableな時だけmaskされるUSEを指定したりと便利なものは入っているのだけれど、これは開発者むけだからね…。ユーザ向けには結局、Sub-SLOTだけかも。
ネットワークのこと
wicdがコマンドから使えるし、いいよねー?とか思ってたけど、最近はGentooサポートらしきものもnetworkmanagerに入ったようなので、NetworkManagerを(ノートPCでは)使っています。
そして、NetworkManagerのコマンドラインツール nmcliがあるのでこれでつないだりする。
# nmcli dev wifi connect <SSID> password <password>
依存衝突のこと
emergeするとこんなのが出てくる日もある
WARNING: One or more updates have been skipped due to a dependency conflict: net-misc/curl:0 (net-misc/curl-7.28.0-r1::gentoo, ebuild scheduled for merge) conflicts with <net-misc/curl-7.27.0 required by (dev-cpp/libcmis-0.1.0-r1::gentoo, installed)
これは
- net-misc/curl-7.28.0-r1::gentoo を emergeしたい (ebuild scheduled for merge)
- けど、 インストールしてある "dev-cpp/libcmis-0.1.0-r1::gentoo"が "
から、無理だよーってことを言ってる。
libcmisなんてこころあたりがないので、これがどのパッケージから呼ばれているのかを検索かけます。
# equery d libcmis * These packages depend on libcmis: app-office/libreoffice-bin-3.5.5.3 (=dev-cpp/libcmis-0.1*) (<dev-cpp/libcmis-0.2)
というわけで、libreoffice-binのせいでした。 libreofficeにしたらいいのかもしれないけれども、めんどいのでこのconflictは放置、といったところですかね。
別のケース
dev-haskell/authenticate:0 (dev-haskell/authenticate-1.3.1.2::gentoo-haskell, installed) pulled in by =dev-haskell/authenticate-1.3*:0/1.3.1.2= required by (dev-haskell/yesod-auth-1.1.1.4::gentoo-haskell, installed) (dev-haskell/authenticate-1.3.2::gentoo-haskell, ebuild scheduled for merge) pulled in by (no parents that aren't satisfied by other packages in this slot)
- インストールされているyesod-authが "=dev-haskell/authenticate-1.3*:0/1.3.1.2="に依存
- でも、dev-haskell/authenticate-1.3.2が更新でインストールされようとしている
これは上のSub-SLOTの例でpackage managerが自動的にyesod-authのrebuildをかけてくれるべきなんだけれど、推測に失敗している。
なので、手動で
emerge -1 authenticate yesod-auth
としてやると解決
依存のコンフリクトは結構迷うところなのでこれからも随時blogに書いていきたいところ。ただ、基本的なパターンは上の2つだと思う。
つまり
- 心当たりがないなら、equeryを使ってどのパッケージがひっぱってきているかつきとめる
- 仕方ないならあきらめる
- とりあえずコンフリクトの登場人物を emerge -1 に渡してみる
Weekly Gentoo bugz review!
Last week | This week | ||
bsd assigned | - | 101 | - |
bsd CCed | - | 53 | - |
x86-fbsd assigned | - | 15 | - |
x86-fbsd CCed | - | 11 | - |
cjk assigned | - | 76 | - |
cjk CCed | - | 20 | - |
naota assigned | - | 3 | - |
naota CCed | - | 25 | - |
$ bugz search -a bsd@gentoo.org 428118 bsd dev-scheme/guile is broken on Gentoo FreeBSD with bo => ログを見ると「Binary: command not foud」とか書いてるし、環境の問題じゃないのかな。 428484 bsd typo in /etc/init.d/nfs for the freebsd-usbin 9.0 pa => 返信ないし、とりあえず問題なさそうなのでとじた。 430720 bsd net-fs/samba-3.6.7 dmapi USE flag mask and rekeyword => とりあえずビルドできたけど、 test ... == なやつがいるのでそいつのpatchをなげた 432410 bsd [keywordreq] some packages compile and works on amd6 => amd64-fbsdにassignしなおし 433403 bsd x11-libs/libdrm failed for compile on Gentoo/FreeBSD => Freedesktopのbugzの方の反応待ちかなあ。しかし、freedesktopはbsdに冷たいイメージなのがアレ 435648 bsd Segmentation fault always occurs when starting X, us => upstreamになげないのかな?? まあ環境もないのでとりあえず放置 436560 bsd sys-apps/baselayout to create a lib directory empty. => amd64の話だから放置 assign変えたいぐらいのところ 437386 bsd *-fbsd keyword on net-mta/netqmail-1.06 => qmailの方の反応待ち 437388 bsd please remove pkg command from sys-freebsd/freebsd-u => どうなんだろ? freebsd-updateも消してるし消してよさげか。自分のとこを9.1にあげるまでしばらく放置かな 437640 bsd *-fbsd keyword on =net-mail/vpopmail-5.4.33 => qmailの方の反応待ち * 101 bug(s) found.
dovecotまわりでqmailの反応待ちだし、desktopまわりは環境ないしupstreamにいやんなイメージあるのでもにょもにょ
$ bugz search --cc bsd@gentoo.org 424571 naota Unmask USE=smbkrb5passwd for net-nds/openldap => 425352 が解決しないことにはどうにも 426462 infra-bugs VM Request: Make a Gentoo FreeBSD development system => どこからでもつなげるVMがgentoo.orgにあったらうれしいけどなんも反応ないっすねwww 428112 x11 media-libs/mesa-8.1 expects GNU dialect of indent => INDENT=catするようにしたしBSDとしてはやることはない 428228 base-system sys-devel/bin86-0.16.18 fails to build on ~amd64-fbs => amd64-fbsdにCCしなおしたった 428356 printing Please (re-)keyword net-print/cups-1.6.1 and net-pri => ぐぬぬ、"bsd@gentoo.org"は"amd64-fbsd@.."にもマッチしちまうのか 430072 kde KDE 4.9 and dependencies: keyword request => nepomuk-coreに当たってるpatchにバグがあるのでそれを修正するpatchをいれてもらおう 432420 kde media-libs/phonon/phonon-4.6.0-r1 and backends : key => すでに終わってたのでCCを削除 433760 x11 >=x11-drivers/xf86-video-intel-2.20.6 keywording req => 433403 解決待ちだなー。解決してもマシンがないのでむずかしいが 435452 eras net-mail/dovecot net-mail/vpopmail Please (re-)keywo => qmailの2つのバグ待ち 437532 perl Please (re-)keyword >=dev-perl/HTTP-Message-6.40.0, => x86-fbsdは終わってる * 53 bug(s) found.
bsd@gentoo.orgにamd64-fbsd@...もひっかかってしまってもにょもにょ。正規表現使えないっぽいしつらぽよ。いいかげんamd64-fbsdのVMでも作ってamd64-fbsdのもつぶしにいくか
$ bugz search -a x86-fbsd@gentoo.org ... 232260 x86-fbsd games-emulation/snes9x-1.51 ~x86-fbsd keyword request => 動くのでkeywordした 232273 x86-fbsd games-emulation/visualboyadvance-1.7.2-r2 ~x86-fbsd keyword request => pthreadがstruct pthreadかstd::pthreadかわかんねーよ、とかいうエラーで死んでる。また今度見る 233624 x86-fbsd games-emulation/gnomeboyadvance-0.1 ~x86-fbsd keyword request => 232273 をさきに解決しないといけない。 233717 x86-fbsd x11-misc/slock-0.9 ~x86-fbsd keyword request => -DHAVE_SHADOW_Hをおとしたらbuildできるのでsedってkeywordいれた。 236834 x86-fbsd Keyword xfce-base/tumbler for ~x86-fbsd => pangoのあたりで死んでて確認できない 237130 x86-fbsd [~x86-fbsd keyword request] net-dns/rbldnsd-0.996b => おっけー keyword追加 303295 x86-fbsd sys-apps/logwatch-7.3.7_pre20091210: keyword request => 303289 のSys-CPUをFreeBSD対応させないといけないんだけどupstreamが数年反応してなくてもにょる 303903 x86-fbsd ~x86-fbsd keyword request for sci-mathematics/qtoctave => 303915待ち 303909 x86-fbsd ~x86-fbsd keyword request for sci-libs/qrupdate, patches included => gccのビルド長いよー 303915 x86-fbsd ~x86-fbsd keyword request for sci-mathematics/octave => 303909待ち * 15 bug(s) found.
あいかわらずBSDとLinuxでびみょーにちがうとこでビルドがおちる。ひたすら直すだけだなー
$ bugz search --cc x86-fbsd@gentoo.org ... 253803 netmon Rekeyword request for >=net-wireless/aircrack-ng-1.1 and >=net-wireless/iw-0.9.15 => GentooであててるpatchがなくてもLinuxでbuildできるし、あるとFreeBSDでビルドできないので外してほしいところ。メンテナ反応待ち 267299 net-mail Please keyword mail-client/alpine (and net-mail/topal) => MAKEが適切に設定されてない…。makeだとBSDのになってしまうからgmakeで上書きしないと 313589 net-irc net-irc/xchat-2.8.8 rekeyword request => xchat: local symbol `__progname' in /usr/lib/gcc/i686-gentoo-freebsd9.0/4.7.2/../../../crt1.o is referenced by DSO だそうで 336899 voip net-libs/farsight2 please keyword => まーたヘッダ読まなくてもLinuxでは動くアレだよー 384445 emacs app-editors/zile-2.4.1 dropped keywords => dev-libs/boehm-gcがkeywordできないのでアレ 多分USE=threadsを動くのだが… 417997 java Please stabilize =dev-java/saaj-1.3.19-r1, stable 1.3 fails to emerge, because org.w3c.dom.ElementTraversal can't be accessed. => javaはまずicedteaあたりをなんとかしないといけないのですごくおもい 421733 java =dev-java/tagsoup-1.2.1 Stable request => 同じく 424571 naota Unmask USE=smbkrb5passwd for net-nds/openldap => openafsの-lresolvが解決しないといけないな。 libresolveってGNU libcな気がするからそのへん使ってpatchあてるかどうか選定すべき 433760 x11 >=x11-drivers/xf86-video-intel-2.20.6 keywording request => 上に書いた通り 435452 eras net-mail/dovecot net-mail/vpopmail Please (re-)keyword => 上に書いた通り * 11 bug(s) found.
javaの環境を作れるようにしたいですなー
$ bugz search -a cjk@gentoo.org ... 413525 cjk app-i18n/uim: unsafe gtk-query-immodules-* usage => ふるいuimをおとそうかな 413527 cjk app-i18n/x-unikey: unsafe gtk-query-immodules-* usag => fixed. 413795 cjk www-client/w3m - default to type=text on unknown typ => あんまり独自にpatchあてたくないんだけど、w3mを代替できるtext browserがない以上あてとくしかないかなあ…。debianにもあたってるし… 415203 cjk app-i18n/fcitx does not work with kde-base/konqueror => わからん… fcitxのqt moduleのバグっぽいしupstreamになげつけるか 424329 cjk Re-KEYWORD dev-libs/m17n-lib-1.6.3-r1 => どうなってるのやら 426682 cjk www-client/w3mmee-0.3.2_p24-r6 (stable) fails to bui => ppcのstable待ち 428872 cjk Please stabilize =app-i18n/multiskkserv-20100128 => test時にnkfが必要だよーってコメント見すごしてた。dependを追加してコメント返信 433187 cjk Please stabilize =app-emacs/yatex-1.76 => 437612検討中 434138 cjk app-i18n/scim-1.4.14 breaks x11-wm/windowmaker's roo => んーわからん。scimは正直こういうのが多いぜよ… 437612 cjk =app-emacs/yatex-1.76[linguas_ja] fails to build => いまいち文字コード変えてる意味がわからん。特にやる必要ない気がする。 * 76 bug(s) found.
fcitxマジ…scimマジ…。
$ bugz search --cc cjk@gentoo.org ... 325795 printing app-text/ghostscript-gpl with USE=linguas_ja pulls i => printingチームが反応なくてアレ。MLになげるべきか 348481 arm dev-libs/libchewing-0.3.2-r1 keyword request => armから返事ないね 388981 aballier app-office/lyx-1.6.x / 2.0.x not compatible with sub => backportしてくんないかな 413529 gnome [TRACKER] unsafe gtk-query-immodules-* usage, gnome2 => まあぼちぼち直しましょう 421011 maintainer-wanted app-i18n/uim-mozc-9999 - mozc input method for uim => 入れるか… 424491 qiaomuf app-i18n/fcitx-sunpinyin-0.3.7 version bump => 427070が直ってるけど、sunpinyin-2.0.4が来ないのか 425270 emacs app-emacs/lookup-1.4.1: fails to build with emacs-24 => 最初に"e"が入っているだけのエラーじゃん 427846 qiaomuf app-i18n/fcitx-4.2.5 not work in KDE => 415203 のdupじゃないの? 429628 aballier >=app-office/lyx-2.0.3 - lyx crashes with "Exception => closeしてくれよー 431186 aballier stabilize app-office/lyx-2.0.4 => stable待ち * 20 bug(s) found.
いろんなとこから返事なくてアレである
$ bugz search -a naota@gentoo.org 404451 naota net-misc/dropbox-1.2.51 won't start, or stops when c => これなんなんだろうね。まあbundleの使うしかしかたないのか 407579 naota app-emacs/markdown-mode lacks a dependency over the => んんんーout of boxで動くようにしたいよーなGentooらしくないよーな 424571 naota Unmask USE=smbkrb5passwd for net-nds/openldap => openafsあたり待ちだなー * 3 bug(s) found.
Dropboxはとりあえずupstream更新待ちか。markdownはどうしよう。out-of-boxで動くようにelispの設定したるのもなんともなあ。einfoを出してやるぐらいでいいか。
$ bugz search --cc naota@gentoo.org ... 373061 prefix x11-libs/qt-core-4.7.3 install_mkspecs => Gentoo/Prefixの環境もう持ってないしCCはずすかな 373599 media-video =media-video/ffmpeg-0.7.8 fails dodoc => 直ってるぽいのでとじとく 374081 maintainer-wanted Request for Firefox Add-on SDK ebuild => まあそのうち書こう 383577 maintainer-wanted Ebuild proposal: dev-util/gyp-9999 => んー… 384925 ruby dev-ruby/knife-{ec2,rackspace,openstack}: ebuild req => そのうち書こう… 400705 dev-portage More versatile return codes for emerge => 放置 400979 devurandom app-backup/spideroak-bin-4.2.9913 ebuild fails to ac => 別のgentooメンテナがついてるから離脱 402081 dev-portage Possibility to ignore libraries for preserved-libs/r => 離脱 426798 devurandom app-backup/spideroak-bin-4.6.9945: bundles a lot of => 離脱 430426 matsuu sys-fs/nilfs-utils - nilfs_cleanerd does not run whe => udev-190で直ってる? * 25 bug(s) found.
spideroak-binはもう使ってないのでメンテナやめよう。他にやってる人もいるし。
コマンドラインからの NetworkManager
コマンドラインから NetworkManagerを扱うcnetworkmanagerというものがあって、使ってみたのだけれど、どうにもうまく動かない。
ので、githubを見てみたら nmcliに移行してね、みたいなことが書いてあって、んじゃその nmcliはどこにあるの?と思ったら networkmanagerに付属だった。そりゃ移行するわな。
とりあえずWiFiにつなぎたい、とする
"nmcli dev wifi"で、wifiのアクセスポイントが出てくる。つなぎたいところに狙いを定めたら、"nmcli con 'hoge hoge' password 'fugafuga' name 'HoeHoe'"みたいな感じで接続する。一度こうしておくと、nameで指定した名前を使って "nmcli con up id 'HoeHoe'"といったふうにして接続することができるようになる、のでそれ以降はそうする。
LKMLの釣り師たち
ああん?最近釣りが多いな?
最近、LKMLに変な投稿投げる釣り師(?)がいるのでまとめておく。
09/07 LKML: Angela Bernard: Suggestions for the Future of Linux
Ethernetとかオワコン。誰も使わねーよ。
デスクトップは死につつあるし、Linuxのデスクトップは最初から死んでるぜ。よしんば使っててもマルチモニタなんて使わねーし、マルチモニタ機能消せー
マルチユーザなんて誰も使わねーよ消せー
09/12 LKML: Rich Lawlman: Various things Linux doesn't have/doesn't need
ARM以外のCPUのサポート削除して、ARMに注力するべき!!!
iPhoneはやってるやん? あんなふうにファイルシステムがユーザから見えないようにしてさ。ファイルマネージャだけから見えるようにしよう! そしたらセキュアだしシンプルだろ?
09/13 Really needs pulling
USBとか捨てるべき、wireless技術で置き換えられてしまうのだ!
USBなんかやめて、シリアルポートとかを使うようにしよう!
これ08/23のDrop support for x86-32で、x32がなんかを全然わからずに議論をして、ひどい受け答えしてたこの人の流れをくんで最近釣りが行なわれてるのかな。この一週間で変にこういうのなってたから、ちょっと気になった。
上に書いてあるのはものすごーい意訳な翻訳なので、これを根拠として議論なんかしないでね。まあどうせネタだろうけれどもね。
Btrfsの歴史とか
- 2007年
- 2008年
- 2009年
- 1月 2.6.29-rc1 Btrfs v0.17
- 圧縮機能
- seed device機能
- 12月 2.6.32
- SSDのdiscardをサポート
- 1月 2.6.29-rc1 Btrfs v0.17
- 2011年
- 1月 2.6.37
- free space cache
- 3月 2.6.38
- LZO圧縮のサポート
- 5月 2.6.39
- ファイル単位での圧縮のサポート
- 6月 FedoraがBtrfsをデフォルトにする計画
- 7月 3.0
- scrub機能
- autodefrag機能
- 1月 2.6.37
- 2012年
まあ、なんだ。リリース日で書いてるけど、パッチが投入されたのはその一つ前のリリースの直後だと思っていいわけで。それでこう、転職の時期と機能の実装具合い見ると面白そうだよね。
いつ安定するのかな、って