秘伝のアドレス帳のこと
ガラケーがあらゆるフォーマットをぶっ壊しながら突っ走っていて、そのまわりでみんなが生まれ、そだち、そして死んでいった古き良きゼロ年代のある年末のこと。 殊勝なことに私は年賀状を人々に出そうと思って、当時持っていた京セラの小さなガラケーから microSD カードを経由して MS のなんか email みるやつ (名前もうわすれた) へエクスポートしては年賀状を (メールで) 送信したりして有意義な年始を向かえました。(容姿端麗成績優秀、さらに明るく社交的な性格なので皆に好かれていたし友だちも多かった)
それから寒い寒いと言って手を擦りながら初詣から帰ってくると、家ではパソコンに入っているメーラーが色々破滅的になっているアドレス帳とともに待っているわけですね。これをいつしか ThunderBird にエクスポートし、さらにいつしか (中3くらいかな) gmail にエクスポートしてそのたびにソフトウェアの時空の隙間を通ったアドレス帳は着実に破綻していきました。破綻です。
いつしか、名前と電話番号が入れ替わっている、住所やメモ欄がおかしくなっている、名前がなくなっている、同じ人間が二重三重に登録されている、プロフィール中に同じ電話番号が3つも並んでいる、どれが最新のメールアドレスか分からない (これは管理を怠った私に問題があるが……) と個性豊かなデータが何百件か gmail に入っているということになります。
ときは下って スマートフォン/クラウド全盛期時代、何が起きているかというと、ちょっと説明が難しいのですが……… 例えばあんまり仲もよくなかったクラスメートの住所が Google Maps 上に表示されていたり (たくさんある連絡先のうちわずか3件だけ。彼・彼女らにこれといった共通項はなさそうだ) 、 携帯を介して LINE や facebook にこれが輸出されていってとにかくすごいことになったり、すごい。すごいことになってきたな〜〜〜。これはもう解きほぐす気力もないし一生私はこの乱雑に破滅したデータと緩やかにつきあって暮らしていきます。
ご報告
今日はカレーを食べました
アラブねこ
この記事は猫写真 Advent Calendar 2015 - Adventarのやつです。撮りためた猫写真をひたすら貼っていってくだしあとのこと
猫の餌
魚市場ねこ。湾岸ねこの食文化は海産物も多いねこ。
みずたまりは涼しげアラブねこ。
きのぼりねこ。きのうえにも涼しげねこ。
ゆうぐれおさんぽねこ。
ねこの敵、野犬。夜中山の中で吠える。
ねむいけどねつけない微妙な夜のねこ。
bitviorでvirtio-net
[この記事はbitvisorのステマ記事です][この記事はBitVisor Advent Calendar 2015の3日目の記事として先輩に書かされました][怖い]
みなさんご存知BitVisorですが、最近virtio-netに対応したことは知ってます?
check it out
BitVisorの最新版はbitvisor.orgじゃなくて、bitvisor / bitvisor — Bitbucketにあります(安定版はない)。 テストも安定版tagもないので運が悪かったらそれまでですが、EDK2とかもそんな感じだしまあいいでしょ(よくない💢)。
hg clone ssh://hg@bitbucket.org/bitvisor/bitvisor
make config
なんやいろいろありますが、NET_*系があれば機能的にはOK。
defconfig
機能的に足りていても設定されないと動かないのが世の常。 イケてる系だとそんなの起動時オプションとかでサクッとヨユーなんですが、芋いVMMは無理、許して。機能の使い分け・ペリフェラルの設定は config.oとかいう物体に格納された全設定項目入り構造体の実体で制御します、こいつの値はビルド時にdefconfigをいじるといじれる。
もっとdefconfig
defconfigがないとmake時に勝手に作られます、っていうかconfig.cでのincludeもこの名前決め打ちってそれデフォっていうかタダの設定ファイルやんけ!
そういう仕組みなので、手でdefconfig.tmplからコピーしてmakeしたほうが上品だが、makeしてビルド終わってから後で変えてもすぐ反映されます、これは救いっぽい
virtio化について
Q: bitvisorってパラパスじゃねえの、なんでわざわざ準仮想化デバイスすんねん
A: パススルーのほうが楽だけど、VMMのデバッグとか謎機能の実装とかで、VMM側もネット使いたいことあるやろ!
Q: 今までじゃあどうしてたの?
A: 例えば、VMMでもう一本ガメる(別居)とか、あるいは、パススルーっぽくしておきつつも割り込みはVMMに引き込んで自分宛のだけ盗む(同棲)という技を使ってた
Q: え、それって…………
A: デバイスが二度リセットしたりするけど、映画みたいに避けるとなんとかなる
Q: ……
A: 準仮想化いいよね
では
defconfigの下の方に空気を読みつつ以下のようにショドーすべし
: : .driver = { .pci = "device=pro1000, driver=pro1000, virtio=1, net=pass, tty=1, and," "device=bnx, virtio=1, net=pass, driver=bnx, tty=1" }, :
こうすると
PRO/1000などのPCIコンフィグ空間が盗まれてvirtioのPCIコンフィグ空間になる
# 速度
どうせGigabit etherしか対応してないし、ベアメタルと同じく931Mbps出る
FAQ
Q: 俺のパソコンで動かない
A: lspciして本当のデバイスが見えてしまっている場合はアレや、アレをみるんや……………
drivers/net/<your-bitch-netcard>.cの下の方の
.device = "class_code=020000,id=" "14e4:165a|" /* BCM5722 */ "14e4:1682|" /* Thunderbolt - BCM57762 */ "14e4:1684|" /* BCM5764M */ "14e4:1686|" /* BCM57766 */ "14e4:1691|" /* BCM57788 */ "14e4:16b4", /* BCM57765 */
みたいなとこにアレとアレがないんや………
僕は例えばこれを足しました:
"14e4:165f|" /* BCM5720 */
そんなときは
lspci -nnk
以上
Cプリプロセサを使い、#includeディレクティブにマクロで生成したファイル名を読ませる
タイトルのとおりだが、難しいぞ。
例えば、こういうのなら簡単だ:
#define _CONCAT(X,Y) X ## Y #define CONCAT(X,Y) _CONCAT(X, Y) #define HEY(X) CONCAT(X, X) #define YO yo int HEY(YO);
int yoyo;になるはず。
この、一段プリプロセサの命令を使う前に展開させるためのクッションを入れるテクを使うと、例えば、
#include CONFIGFILE(def)
が、
#include "defconfig"
になってほしいなら、
#define QUOTE(X) # X #define QUOTIFY(X) QUOTE(X) #define _CONCAT(X,Y) X ## Y #define CONCAT(X,Y) _CONCAT(X, Y) #define _CONFIGFILE(X) _CONCAT(X,config) #define CONFIGFILE(X) QUOTIFY(_CONFIGFILE(X)) #include CONFIGFILE(def)
とすればいい。
では、次に
#include CONFIGFILE(def)
が、
#include "../defconfig"
となるにはどうすればいいだろうか。
#define UPDIR ../ #define __CONFIGFILE(X) CONCAT(UPDIR, _CONFIGFILE(X))
を足すと、 error: pasting "/" and "defconfig" does not give a valid preprocessing token と言われて怒られる。なぜならドットやスラッシュはC言語では一つのトークンをなすからだ。しかし、これを文字列として扱うと、""../""と"defconfig"の連結となってしまい、意図したものとは違うものになってしまう(と言うか以下でも怒られる):
#define _UPDIR ../ #define UPDIR # _UPDIR
しかし、この場合は、文字列連結ではなく、トークンの連接で解決できる、すなわち以下のとおり。
#define QUOTE(X) # X #define QUOTIFY(X) QUOTE(X) #define _CONCAT(X,Y) X ## Y #define CONCAT(X,Y) _CONCAT(X, Y) #define _CONFIGFILE(X) _CONCAT(X,config) #define CONFIGFILE(X) QUOTIFY(../_CONFIGFILE(X)) #include CONFIGFILE(def)
やったぜ
Jailでresolv.confどないすんねん問題
jail中でpkg installできないと思ったらそもそも名前引けなかったみたいな事例、普通にresolv.conf書けば治るんですが、それはそれとして
こういう、Jail中のresolv.confはpublic DNSにしたら?みたいなクソどうでも良い回答でスレッドが終わってて悲しかったので一応言っとくと、
#!/usr/local/bin/zsh #This file is located /etc/resolvconf.conf for i in /var/jails/*/etc; do cp /etc/resolv.conf $i done
(ただしすべてのjail環境が/var/jailsの下にある場合)
以上です
Jailから出る
jailから外にpingが打ちたいねん
うちたい。
当方FreeBSD 10.2-RELEASE #0 r286666
ま、とりあえずjailたてようか
mkdir -p /var/jail/hoge cd /var/jail/hoge fetch http://そこらへん/base.txz tar xf base.txz vi etc/crontab #最終行を消せ!!!
ここが網走だ、覚悟しろ
jailの設定を/etc/rc.confに書くと計算機が爆発する
jailが増えるといずれrc.conf設定ファイルが摩擦熱で徐々に熱くなり、そのうち発火、最悪CPUのグリスに引火・爆発して周囲10kmが焼け野原になる。
これを避けるために発明されたのが/etc/jail.confというファイルだ。
これはこんな見た目をしている。
allow.raw_sockets = 0; allow.set_hostname = 0; allow.sysvipc = 0; mount.devfs; exec.start += "/bin/sh /etc/rc"; exec.stop = ""; baka { host.hostname = "baka"; path = "/usr/jail/hoge"; ip4.addr += "一億/16"; allow.sysvipc = 1; allow.raw_sockets = 1; }
ちなみに、/etc/rc.confに
jail_devfs_enable="YES" jail_sysvipc_allow="YES"
とか書いてても、上のallow.*みたいなのを書かないとpingが通らず(ping: socket: Operation not permitted とかみたいになる)、ユーザは禿げるし、ユーザが放った数多くのpingがネットワークカードに詰まって摩擦熱で徐々に熱くなり、最悪PCIスロットに詰まったホコリに引火・爆発して周囲30kmが焼け野原になる。
お土産
[/etc/rc.conf]
hostname="oyaga_bakanara_komo_baka" keymap="us.pc-ctrl.kbd" ifconfig_em0="DHCP" sshd_enable="YES" # Set dumpdev to "AUTO" to enable crash dumps, "NO" to disable dumpdev="AUTO" zfs_enable="YES" jail_enable="YES" jail_list="baka" ifconfig_em0_alias0="inet 一億/16"