hogeとはワイルドカードのようなものです。日々起こった、さまざまなこと −すなわちワイルドカード− を取り上げて日記を書く、という意味で名付けたのかというとそうでもありません。適当に決めたらこんな理由が浮かんできました。
01/23/2003 vim
■ vim
何か1.4_rc2って色々ヘンだなぁ。PROVIDE="virtual/editor"のせい? 俺はnanoもvimもemacsも入れてるわけだけど、今日emerge rsyncしたらvimがアップデートされてたのでemerge -u worldしたのに、vimのコンパイルが始まらなかった。KEYWORDSが~x86なわけでもなし、maskされてるわけでもなし、単にemerge vimとやっても現行バージョンのコンパイルが始まる。ebuildファイルの直指定でemergeしてやっと入った。それともmask以外にemergeを抑制する機構でも導入されたのか?
他にもAUTOCLEAN="yes"なのにclean操作が次のemerge時にしか反映されなかったり。こりゃ一体何なんだ?
■ emerge -B
やっぱGentooでも、自分用バイナリパッケージは作っとくべきだね。…ってことでよく使いそうなヤツラを軒並バイナリパッケージ化することに決定。うーむ時間かかる。インストールした時に-bオプションつけときゃ良かったよ。
01/23/2004 ねむ
■ [Gentoo] あら?
emerge --usepkg hogehoge
とかやると,KEYWORDS が ~x86 だろうがなんだろうが PKGDIR に存在する hogehoge パッケージの最新をインストールしてしまう模様.--usepkg の場合って ebuild 見ないのか? だとしたら恐くて BINHOST を迂闊に設定して emerge -gK なんて,stable 環境じゃできんぞ….
…と思って emerge をちらっと読んでみたら binary と ebuild できっぱり分かれてるみたいね.うーん,これは嬉しくないなあ.
つか,emerge の 903 行目,
if portage.pkgcmp(myeb_s, myeb_pkg_s) > 0: # eb is newer than pkg myeb_pkg = None else: myeb = None
が悪さしてんじゃん.
- myeb は Portage ツリーにある,KEYWORDS や MASK を考慮した最新の ebuild
- つまり myeb より新しいバージョンは unstable or masked
- myeb_pkg は KEYWORDS や MASK を無視した最新のバイナリパッケージ
- myeb_pkg が myeb よりも新しかったとしても,myeb_pkg をインストールするのはおかしい
ということから,この部分を
if portage.pkgcmp(myeb_s, myeb_pkg_s) > 0: # eb is newer than pkg myeb_pkg = None else: myeb_pkg = myeb myeb = None
とすると良いと思うんだがどうか.else 以下に一行加えただけだけど.
まぁバイナリパッケージもちゃんと KEYWORDS を理解してくれるようになる (binarytree.dep_bestmatch() を改造する) のがベストなんだけど.
と思って Bugs 探索をしてみると,似たようなのが bug#26314 にあった.これパッチ作って投稿してみよかな? たった一行だけど.
■ [Gentoo] うひゃ
確かにその通りでした. しかも --usepkgonly の場合に対処できてませんでした.いつもながらの思慮不足….
…ので,修正してパッチにしてみました. --usepkgonly の場合を考慮するとちょっと日記に書くには量が多かったので….
あ,ちなみに portage-2.0.49-r21 向けのパッチですが,2.0.50_pre16 でも行番号が違うだけでコードは一緒っぽいので適当に差し替えるだけだと思います.
つか,--usepkgonly だと myeb が None になっちゃってるからめんどくさい.やっぱ binarytree.dep_bestmatch() が KEYWORDS や MASK を見てくれると楽っていうかそもそもこんなことしなくて済むんだけど.
01/23/2005 あー
■ [Gentoo] うおっ
portage のリビジョンが変わって,screen のタイトルが変更されるようになった らしい (左下の Unmerging... ってやつ).
分かりやすくて良い反面,長くてうざい気もする.
01/23/2006 うひ
■ [日記] 動画祭り
やっべー,機動戦士 3D ガンダムが面白すぎる.
あと銃士戦隊フランスファイブ.これクオリティめっちゃ高いし.すげえ.
しかし○○ファイブと聞くとどうしても釈尊ファイブを思い出してしまう.
■ [小ネタ][戯言] ところで
3 年くらい前にバカ流行りした 東京都立江東商業高校のサイト だが,現在はごく普通の学校のサイトとして生まれ変わっている.更新履歴も 2004/06/24 からになっているため,それ以前にこのサイトで何があったのかを推し量る術もない.
……はずなのに,そこは電子空間が恐ろしいと言われるところ,いったんパブリックにしてしまったものを完全に消すことはほぼ不可能だったりする.分かりやすいところでは,インターネットアーカイブにしっかり痕跡が残っている という罠.
これを見ていると実に楽しい.簡単に履歴を見ると,大体以下のようになっている.
- ページ下部の「TOPICS」によると,サイトを開設したのは 2002 年 12 月らしい.
- しかしインターネットアーカイブがこのサイトのアーカイブを始めたのは 2003 年 2 月から.この時点でカウンタは 1,100.つまり 2 ヶ月の間に 1100 ヒット.サイトが完成したということで学校関係者が沢山来るだろうから,これは妥当な数字と言える.
- その後 2003 年 4 月までカウンタは 1,100 のまま.どうもインターネットアーカイブはカウンタの数値を正しくアップデートしていないらしい.
- 1 ヶ月後の 2003 年 5 月,カウンタが一気に 259,911 と爆発.カウンタの数値はたった 1 ヶ月で 25 万件余り増加.ここで何があったかは推して知るべし.
- その後 2003 年 8 月までの 3 ヶ月間もこの体裁のまま運営していたらしい.
- 翌 9 月,コンテンツ追加更新に伴い,デザインを改定.なぜあの絵を取り下げたのかは不明.なお,デザインの変更については更新履歴への記述は見当たらない.
- その後インデックスエラーを頻発するが,11 月にはカウンタが 273,253 になっていることが分かる.5 月の爆発から半年で 2 万件.学校のサイトとしては多いものの,5 月のような爆発的な増加はしていない.
- その後 2003 年中はこのデザインのままだが,2004 年 1 月には現在のデザインに似たデザインとなる.この段階で,過去の更新履歴が抹消される.この時点でカウンタは 279,557 であり,2003 年 11 月からの 2 ヶ月間で 6 千件程度.
- 原因は不明だが,2004 年 3 月の段階でカウンタが 46,570 となっており,25 万件程度がさっ引かれていることになる.1 月の段階で 2 ヶ月間で 6 千件程度のアクセス数だったことを考慮すると,カウンタの内部情報が壊れて 1 からカウントし直したという理由は考えづらい.
- その後は何事もなく,2004 年 11 月に現在のデザインとなる.ここで,アクセスカウンタそのものがなくなる.
いやーこういう履歴見てると,何かわくわくしません?
01/23/2008 ああ
■ [日記] stream と gc
先輩につっこまれてはっと思ったので書き残しておく. 言われてみれば当然のことなんだけど,普段からこういうことを意識してないのはまずい気がするので,戒めも兼ねて.
Java で stream を open した後はきっちり finally 内等で close することが重要だが,そのこころは,Java の gc はオブジェクトがスコープを抜けても即時に破棄するわけではないので,close されるタイミングが分からなくなって,もしもファイルをロックしたままだったりするとロックが解放されるタイミングも謎になり,はまる原因になるから.
んで気になってちょっと調べてみた. 間違ってたら指摘して頂けるとこれ幸い.
- Java (Sun JDK)
- 世代別 gc (アルゴリズムは mark-weep 方式など色々) を採用しており,gc はいつ動くか分からない.
- Python
- gc は参照カウント方式を採っており,参照がなくなれば即時でオブジェクトは破棄される.
- Perl
- gc は参照カウント方式を採っており,参照がなくなれば即時でオブジェクトは破棄される.
- Ruby
- gc は mark-sweep 方式を採っており,gc はいつ動くか分からない. が,open に関してのみ言えば,open にブロックを渡すとブロック終了時に自動的に close はされるのだとか.
- PHP 4 以降
- gc は参照カウント方式を採っており,参照がなくなればオブジェクトは破棄される (が,即時でかどうかはちょっとよく分からなかった...).
つかまあ自動で close されるとしても close はちゃんと明示的に呼んだ方が良いでしょうな. ちなみに Python2.5 なら with file(...) as fp が cool.contextlib.closing も場合に応じて利用するとハッピー.
01/23/2019 うむ
■ [Linux][小ネタ] Linux で Private VLAN (pvlan) もどき
本物の pvlan を実装するのはちょっと面倒な気がしたので,簡単にできそうな擬似的な "もどき" を作ってみる.ひとまず Cisco で言うところの switchport mode private-vlan trunk promiscuous な uplink を想定.
実現には,ブリッジにおいて uplink 想定のポートとの通信以外を遮断して,uplink との通信時にはネットワーク毎に primary vlan 相当のタグを付加してやれば良いはずなので,vlan_filtering と ebtables を用いて実装してみる.テストのためのお膳立てが多いので長くなってしまっているが,メインは "# create nsx" というコメントから.
ip netns add nsx # pseudo pvlan box ip netns add ns1 # uplink (trunk) ip netns add ns2 # downlink (10) ip netns add ns3 # downlink (10) ip netns add ns4 # downlink (20) ip netns add ns5 # downlink (20) # create ns1 ip link add veth0 type veth peer name veth1 ip link set veth0 netns ns1 ip link set veth1 netns nsx ip -n ns1 link add veth0.10 link veth0 type vlan id 10 ip -n ns1 link add veth0.20 link veth0 type vlan id 20 ip -n ns1 addr add 10.0.10.1/24 dev veth0.10 ip -n ns1 addr add 10.0.20.1/24 dev veth0.20 for dev in lo veth0 veth0.10 veth0.20; do ip -n ns1 link set "${dev}" up done # create ns2 ip link add veth0 type veth peer name veth2 ip link set veth0 netns ns2 ip link set veth2 netns nsx ip -n ns2 addr add 10.0.10.2/24 dev veth0 for dev in lo veth0; do ip -n ns2 link set "${dev}" up done # create ns3 ip link add veth0 type veth peer name veth3 ip link set veth0 netns ns3 ip link set veth3 netns nsx ip -n ns3 addr add 10.0.10.3/24 dev veth0 for dev in lo veth0; do ip -n ns3 link set "${dev}" up done # create ns4 ip link add veth0 type veth peer name veth4 ip link set veth0 netns ns4 ip link set veth4 netns nsx ip -n ns4 addr add 10.0.20.4/24 dev veth0 for dev in lo veth0; do ip -n ns4 link set "${dev}" up done # create ns5 ip link add veth0 type veth peer name veth5 ip link set veth0 netns ns5 ip link set veth5 netns nsx ip -n ns5 addr add 10.0.20.5/24 dev veth0 for dev in lo veth0; do ip -n ns5 link set "${dev}" up done # create nsx ip -n nsx link add brx type bridge vlan_filtering 1 ip -n nsx link add br10 type bridge ip -n nsx link add br20 type bridge ip -n nsx link add p10a type veth peer name p10b ip -n nsx link add p20a type veth peer name p20b for dev in lo brx br10 br20 p10a p10b p20a p20b veth1 veth2 veth3 veth4 veth5; do ip -n nsx link set "${dev}" up done ip -n nsx link set veth1 master brx ip -n nsx link set p10a master brx ip -n nsx link set p20a master brx ip -n nsx link set p10b master br10 ip -n nsx link set veth2 master br10 ip -n nsx link set veth3 master br10 ip -n nsx link set p20b master br20 ip -n nsx link set veth4 master br20 ip -n nsx link set veth5 master br20 # allow vid 10,20 as tagged on veth1 (uplink) bridge -n nsx vlan add dev veth1 vid 10 bridge -n nsx vlan add dev veth1 vid 20 bridge -n nsx vlan del dev veth1 vid 1 # allow vid 10 as untagged on p10a (veth2,3) bridge -n nsx vlan add dev p10a vid 10 pvid untagged bridge -n nsx vlan del dev p10a vid 1 # allow vid 20 as untagged on p20a (veth4,5) bridge -n nsx vlan add dev p20a vid 20 pvid untagged bridge -n nsx vlan del dev p20a vid 1 # deny downlink-to-downlink communication on br10 ip netns exec nsx ebtables -A FORWARD --logical-in br10 -i p10b -j ACCEPT ip netns exec nsx ebtables -A FORWARD --logical-out br10 -o p10b -j ACCEPT ip netns exec nsx ebtables -A FORWARD --logical-in br10 -j DROP ip netns exec nsx ebtables -A FORWARD --logical-out br10 -j DROP # deny downlink-to-downlink communication on br20 ip netns exec nsx ebtables -A FORWARD --logical-in br20 -i p20b -j ACCEPT ip netns exec nsx ebtables -A FORWARD --logical-out br20 -o p20b -j ACCEPT ip netns exec nsx ebtables -A FORWARD --logical-in br20 -j DROP ip netns exec nsx ebtables -A FORWARD --logical-out br20 -j DROP
そんなに大したことをやっているわけではなく,ブリッジを 2段に分けて,上位ブリッジでは下位ブリッジとやりとりするフレームにタグ付けを行い,下位ブリッジではポート間通信制御を行っているだけ.
当然 "もどき" であって本物の pvlan ではないので,例えば trunk port を用意して延伸するとかはできない.何せこの実装には secondary vlan が存在しないので当たり前である.
かしこ
追記
ちなみにわざわざブリッジを分けずとも,downlink port 毎に pvid を指定していけばブリッジ 1つで済ませることもできる.のだが,そうすると downlink port が増えるごとに,ブリッジへの参加だけでなく pvid の設定もやる必要が出てきて面倒なので,ここでは分離する方式を採っている.例えば libvirt/kvm で VM を生やして,I/F を上記 br10, 20 に参加させるといったことを考えると分かりやすい.
□ なかの [それだと、myeb<myeb_pkgのときに、存在しない(可能性のある)バイナリパッケージをインストールしに行ってし..]
□ なかの [そうですねぇ。バージョン番号だけでは判断できないですからねぇ・・。bestmatchを変えてもいいのですが、それも結..]
□ atzm [うーん,bestmatch の方も今回僕が使った方法 (portage.portdb.xmatch("bestmat..]