XPathをクエリするだけのコンソールアプリ
組み込み環境上でXMLをクエリしたいんだけど、そのためだけにrubyとかいれてもでかい。
小さいXML処理系としてはTinyXML+TinyXPathがよさげだったんだけど、フロントエンドがないので、簡単なフロントエンドを作った。
TinyXPath: http://tinyxpath.sourceforge.net/
tinyxpath_1_3_1.zipを解凍して、main.cppをこれといれかえ。
tinyxpath付属test.xmlに対して:
./tinyxpath "//x/text()" test.xml # => sub text cat test.xml | ./tinyxpath "//x/text()"
wget -O -に対してそのままパイプで処理できるので便利。
uclibcとuclibcxx環境下でもうごいた。
FON2100E openwrt backfire 10.03.1用クロスコンパイル環境の構築
昨日やったのでかなりうろ覚え。ホストはarch linux x86_64
参考:http://wiki.openwrt.org/doc/howto/buildroot.exigence
svn co --revision=29596 svn://svn.openwrt.org/openwrt/branches/backfire cd backfire ./scripts/feeds update -a make menuconfig # targetとか設定 m -j 8 export PATH=$PATH:`pwd`/staging_dir/toolchain-mips_gcc-4.3.3+cs_uClibc-0.9.30.1/usr/bin export CC=mips-openwrt-linux-uclibc-gcc export LD=mips-openwrt-linux-uclibc-ld
あとは適当にクロスコンパイル。configure引数:
CFLAGS=-Os ./configure --build=x86_64-pc-linux-gnu --host=mips-openwrt-linux-uclibc --target=mips-openwrt-linux-uclibc
C++プログラムはこのままだとstdc++にリンクする(でかい!)ので、uclibcxxを使いたい。
uclibcxxのビルド:
./scripts/feed install -p uclibcxx make menuconfig # libs/uclibcxxをYに指定 m package/uclibc++/compile V=99 m package/uclibc++/install V=99
configure指定してクロスコンパイル対象のビルド。適宜変更すること:
CFLAGS=-Os CXXFLAGS="-fno-builtin -nostdinc++" LDFLAGS="-L/home/kouhei/openwrt/backfire/staging_dir/target-mips_uClibc-0.9.30.1/usr/lib" CPPFLAGS="-I/home/kouhei/openwrt/backfire/staging_dir/target-mips_uClibc-0.9.30.1/usr/include/uClibc++" LIBS="-nodefaultlibs -luClibc++ -lm -lgcc" ./configure --build=x86_64-pc-linux-gnu --host=mips-openwrt-linux-uclibc --target=mips-openwrt-linux-uclibc
stripしとくといいかも:
mips-openwrt-linux-uclibc-strip hogehoge
openwrt上で:
opkg update opkg install uclibcxx
これで動くバイナリができるはず。
Userspace RCU
UserspaceのRCUアルゴリズム実装。
半日ぐらいコード眺めてたけど、synchronize_rcu()でparityをなぜ2回パリティフリップ/同期してるのかわからん。
Preemptive2-staged RCUの実装ぽいのでLWNの記事をもっとよみこむ。
http://lwn.net/Articles/253651/
現在の理解だと、rcu_read_lock()はメモリバリアを含まないので、同期->MB強制->同期するので2回必要という理由。しかしあってるのか自信ない。
ArchLinux感想
debian testingの不満点だった:
- stable release直後にsidが降りてきて不安定になる
- デスクトップ環境(gnome/xfce/kde他)を部分的にインストールすることができない
- 設定ファイルまわりの謎カスタマイズ。ファイル細分化とか
- distribution独自のpatchがはいる (いやstableでは必要なのわかるけど...)
は解決してる。
その他の利点として:
- debian base systemよりさらにminimal
- /etc/rc.confによる起動デーモン設定 (sysvめんどい)
- PKGBUILDのシンプルさ(独自パッケージをつくりやすい)
ただ、不満点としては:
- hoge-devがない。ヘッダが確実に入るのは利点ではあるけど、qtをインストールするといらないqt-designerついてくる。うええ
- testingじゃない方も十分不安定...
- testingではfixされてるよ!っていわれてもapt-pinning相当がないのでシステム全体をtestingにするか、downgradeするかの2択。
- AURにあるパッケージだとコンパイル必要で、いれるまでに時間がかかる。どうせ毎回コンパイルするぐらいならいっそのことgentooでもいいよな…
長期的に使うかは不明だけど、デスクトップ環境としてしばらく使ってみる予定。サーバは当分debianかなぁ…
Arch Linuxを入れてみる
DebianをX環境でつかうのがいやになってきたので、Arch Linuxを試してみる。
debianなれててとても使いやすいんだけど、gnomeなりなんなりを入れたとたん使わないろくに使わないパッケージが大量にはいってげんなり。
Arch Linuxだと最小限パッケージセットで使うのがdebianより徹底できそう。x86/x86_64以外の環境がサポートされてないのがちょっと気にかかるけど...
とりあえずbootableに
https://wiki.archlinux.org/index.php/Beginners%27_Guide#Select_an_installation_source
isoをusbメモリにddするだけなので楽。pppとかwpa_supplicantとかいらなさげなので勝手に選択をはずす。ファイルシステムはxfsにしてみる。
設定
再起動するとすんなり起動する、がroot以外ユーザがないことに気づく。
adduser/passwd
pacman遊び
pacman -Syu # repos sync+dist-upg相当らしい pacman -Qdt # query deps unneeded (apt-get autoremoveリスト相当) pacman -S sudo # とりあえずsudoいれてみる
https://wiki.archlinux.org/index.php/Pacman_Rosetta
apt-file相当
pacman -S pkgfile pkgfile --update pkgfile lsmod # -> module-init-tools
xorg xfceをいれてみる
pacman -S xorg-server xorg-xinit xorg-utils xorg-server-utils pacman -S nvidia nvidia-utils reboot pacman -S xfce4 # group全選択 cp /mnt/oldroot/etc/X11/xorg.conf /etc/X11/xorg.conf startxfce4 pacman -S ttf-dejavu
適当にpanelなど設定。
locale
sudo vim /etc/locale.gen sudo locale-gen
/etc/rc.conf:
LOCALE="en_US.UTF-8"
日本語Font
mv *.ttf /usr/share/fonts/TTF sudo -s cd /usr/share/fonts/TTF mkfontscale && mkfontdir && fc-cache
mozc
yaourt -S mozc
.xinitrc:
export XIM=ibus export XIM_PROGRAM=/usr/bin/ibus-daemon export XIM_ARGS="--xim" export XMODIFIERS="@im=ibus" export GTK_IM_MODULE="ibus" export QT_IM_MODULE="ibus" ibus-daemon -x -d
設定後
yaourt -Rdd qt # 依存パッケージを無視してqt削除
mozcはqtを設定アプリに使ってるだけなので、他にqtいれる予定がなければ削除できる。
slim: login manager
yaourt -S slim /etc/rc.confのDAEMONSにslim追加 cp /etc/skel/.xinitrc .
kupfer
yaourt -S kupfer
chromium
yaourt -S chromium flashplugin # libvdpauはうまく動かない(ニコニコ動画が再生できない)ので無効化 ||<。 **sshd >|| pacman -S openssh vi /etc/ssh/sshd_config
vmware
https://wiki.archlinux.org/index.php/VMware
を参照。pacmonにはなく、vmware公式からいれる。
Linux 3.1.9-1-ARCHではばぐってるぽいのでLinux 3.1.8におとしてみる。downgradeというツールがあるらしい。
# Linux 3.1パッチ適用 yaourt -S downgrade downgrade linux # Linux 3.1.8(core)選択 reboot sudo vmware-modconfig --console --install-all
synergyc
yaourt -S synergy echo "synergyc persian-win" >> .xinitrc #実際にはexec startxfce4の前に
サウンド (ALSAでそのば再生)
yaourt -S alsa-utils gpasswd -a kouhei audio #以下デスクトップ環境用? yaourt -S gstreamer0.10 gstreamer0.10-base gstreamer0.10-base-plugins # Thinkpadの音量調節キーを有効に yaourt -S xfce4-volumed xfce4-notifyd
サウンド(paoip)
yaourt -S alsa-utils sudo modprobe snd_aloop # /etc/rc.confにも追加
DAEMONSにalsa追加 (mixerのsave/restore)
groupにvideo/audio追加
kouhei@bengal:~$ aplay -l カード 2: Loopback [Loopback], デバイス 0: Loopback PCM [Loopback PCM] サブデバイス: 8/8 サブデバイス #0: subdevice #0 サブデバイス #1: subdevice #1 (...snip...) カード 2: Loopback [Loopback], デバイス 1: Loopback PCM [Loopback PCM] サブデバイス: 8/8 サブデバイス #0: subdevice #0 サブデバイス #1: subdevice #1 (...snip...) kouhei@bengal:~$ cat .asoundrc pcm.!default { type hw card 2 }
nohup ./paoip -d XX -t
compiz
yaourt -S compiz-fusion # ccsm emerald emerald-themes compiz compiz-core compiz-fusion-plugins-main fusion-icon
ccsmでwindow decoration, move window他を有効に。
emerald-themes-managerで適当にテーマ設定
自動起動にfusion-iconを追加
ccsmで設定。なんか
cpufreq (IntelのDVFSというかspeedstep)
yaourt cpufrequtils sudo modprobe acpi-cpufreq cpufreq_ondemand echo 'governor="ondemand"' >> /etc/conf.d/cpufreq vim /etc/rc.conf # MODULES に acpi-cpufreq cpufreq_ondemand追加 DAEMONSにcpufreq追加
余計なパッケージ削除
pacman -Qdt # apt-get autoremove 相当 pacman -D --asexplicit gtest ruby # explicitly installed扱いにする
wicd
ノート用
yaourt -S wicd-gtk gpasswd -a kouhei network vim /etc/rc.conf # DAEMONSにdbus !network !dhcpcd wicd