linux

mikutterのFedora向け.rpmの配布を開始した

エイプリルフールの日だったのでつい勢い余って書いてしまった。 公式リポジトリに含まれているわけではないが、Copr上に置いてあるので簡単な手順でリポジトリを手元のFedora環境で有効化できる。 以下がインストール方法になる: # dnf -y install dnf-plu…

USBメモリのフォーマット無しに、たった一つのファイルをコピーするだけでブート出来るLinux

singlefilelinuxとか名前を付けてみたが、新しいディストリを作ったり新しいツールを作ったりしたのではなく、単にGentooのLiveCDを単一のカーネルイメージに埋め込んでブート可能にしただけである。使い方は以下の通り: bootx64.efiをダウンロードする USB…

Linux上のmikutterでリンクをクリックしたら別のLinux上のブラウザで表示する方法

Linux上のmikutterでリンクをクリックしたらMac上のブラウザで表示する方法 - かーねる・う゛いえむにっきの続きですが、「いや、おれMacとか使ってねぇし?不自由なOSユーザー氏ね!」みたいな声が聞こえてくる気がする*1ので、Linuxでも出来るかどうか考え…

Linux上のmikutterでリンクをクリックしたらMac上のブラウザで表示する方法

VM上のLinuxでmikutterを動かしてたり、synergyで2台のPCを並べて使ってたりする場合に、TwitterだけLinuxのmikutterで眺めてWebはMacで見たい場合ってありませんか。僕はあります。 そんな時、SSHを使えば割と簡単に実現出来ます。 MacのSSHサーバを有効化 …

Dream Cheeky Dream Cheeky Webmail Notifier届いた

USBからLEDのコントロールできるおもちゃ。 取り敢えずlsusb取ってみた: Bus 003 Device 005: ID 1d34:0004 Dream Cheeky Dream Cheeky Webmail Notifier Device Descriptor: bLength 18 bDescriptorType 1 bcdUSB 1.10 bDeviceClass 0 (Defined at Interfa…

そんなわけでオレオレifconfigをRubyで書く為のC拡張「ruby-netif」を書いてみました。

こちら。こんな感じにRubyスクリプトでNICを設定できるぜいえーい eth = Netif.new("eth0") eth.up eth.mtu = 1000 eth.set_addr("172.0.0.1", "255.255.255.0") puts "addr:#{eth.addr}" puts "netmask:#{eth.netmask}" puts "broadaddr:#{eth.broadaddr}" …

Linux上でオレオレifconfigを作るには

自分の書いているプログラムからNICの設定を直接弄りたくなった事はないだろうか? プログラム内からifconfigコマンドに引数をつけて実行すれば簡単に実現できるが、それはあんまり格好良くないし、情報を取り出そうとするとifconfigコマンドの出力文字列を…

NetBSD]Ubuntu 13.04上のvirt-installでNetBSD-6.0.1なVMを作る

wget http://ftp.netbsd.org/pub/NetBSD/NetBSD-6.0.1/amd64/installation/cdrom/boot-com.iso sudo qemu-img create -f qcow2 /var/lib/libvirt/images/netbsd.img 15G sudo virt-install --connect=qemu:///system -n netbsd --vcpus=4 -r 8192 --serial p…

Ubuntu 13.04上のvirt-installでFreeBSD-CURRENTなVMを作る

前回の記事の続き。 FreeBSD-CURRENTのISOはシリアルコンソール用になっていないため、余計な作業が増えて面倒くさい。 よく読まずに作業を飛ばすとログイン手段をすべて失う事になるので注意されたい。また、このOSは--location引数でのセットアップには対…

Ubuntu 13.04上のvirt-installでCentOS6.4なVMを作る

おもしろいことに、Ubuntuゲストインストール時のvirt-installの引数のうち、locationのみCentOSのものに変更するとCentOSのインストーラがきちんと起動した(os-variantすら指定していない。URLからディストリを検出している?)。 Ubuntuは仮想シリアルコ…

Ubuntu 13.04上のvirt-installでUbuntu 13.04なVMを作る

$ sudo apt-get install libvirt-bin virtinst qemu-kvm $ sudo invoke-rc.d libvirt-bin start とりあえず必要なモノを入れてlibvirtdを立ち上げる。 $ sudo qemu-img create -f qcow2 /var/lib/libvirt/images/vm0.img 16G 16GBなVMイメージファイルを作成…

Linux kernel名物よくわからないけど便利なforeachマクロ(CPU番号編)

Linux kernelと言えばlist_for_eachみたいな謎のマクロでよくわからないがforeachできる事はよく知られているが、他にも色々あるのだなぁと知ったのでメモ。 #define for_each_possible_cpu(cpu) for_each_cpu((cpu), cpu_possible_mask) #define for_each_o…

「Linuxで3万(10万)プロセスを同時に起動させてみた」の再現実験

Linuxで3万プロセス起動するとMCE(Machine Check Excepution)を食らうというよく分からない噂を聞いたので、興味を持ち試してみている。 但し、元実験は恐らくDebian stableでカーネルが2.6.32と古めだが、再現実験環境は最近入れたUbuntu Serverなので3.5…

netconsoleでpanicだけをログしてみる

3.8あたりからかな?最近のカーネルのnetconsoleにはoops_onlyってオプションがある。 $ sudo modprobe netconsole netconsole=6665@192.168.100.12/eth0,6666@192.168.100.11/04:0c:ce:xx:xx:xx oops_only=Y こんな感じに指定しとくと、panicした時のdmesg…

netconsoleを使ってみる

netconsoleは、dmesgの出力をUDPでリモートホストへ送る機能。 この機能のポイントは、カーネルがpanicした後でも送信してくれる(無理かもしれないけど努力はする)という事。 panic時のbacktraceとかも取れる。 送信側の設定 netconsoleモジュールの引数か…

パケット受信処理の待ち合わせ部分

ネットワークスタックの、割り込みコンテキストからプロセスをたたき起こすまでの処理はしっかり読んだつもりなのだが、プロセスコンテキストで寝ている側を深く把握していなかったのでちょっと眺めてみる。 システムコールからプロセスがスリープするまで(…

ReadyNAS Duo v2でapt-get upgradeすると即死する件

頑張れば回避可能なんだけどめんどくせぇからchrootedなdebian環境作ってそこで遊ぼうかなとも思ってたんだが、それも不便だと思い至ったので取り敢えずプリインストールパッケージをpinningする事にした。 dpkg -l|while read line do PKG=`echo $line|awk …

アドレスからソースコードの位置を探すコマンド

カーネル飛んだ時とか、RIP(EIP)からobjdump -d vmlinuxを見ながら位置を探したりしてたんだけれども、binutilsに含まれてるaddr2line使えばソースコードの行数簡単に見れたのね。まぁ、これがあるからといってobjdumpでディスアセンブルさせて眺めたいケ…

Ubuntu 12.10のGRUB2でデフォルトカーネルを変更するにはどうしたらいいの?

GRUB1なら良く知ってるんだけど、GRUB2って勉強不足で未だによく分からないのよね。 で、デフォルトカーネルを変えようとした訳だが、最近のUbuntuの/boot/grub/grub.cfgってサブメニューがあって、そこにカーネルの候補が入ってる形になってる。 grub.cfgか…

kexecの実装

ユーザランドのkexecコマンドへ再起動後のカーネルを渡します。ELFパーサとかbzImageカーネルイメージパーサとか種類あるみたいだけど、それらがカーネルのレイアウト読み取って解釈を行なって、最終的にイメージとメモリレイアウトをシステムコール経由でカ…

Linux loader for BHyVe

なんかBIOS emulationなかなか動かないし、取り敢えずLinux loader欲しいよね。という気持ちが高まりつつある今日この頃、皆様如何お過ごしでしょうか。で、作ってみるならなるべく既存のプログラムを流用して楽にやりたいわけだが、bhyveloadに一番似てるLi…

Linuxでnetperfとかで負荷かけてる時に/proc/statとかを記録してグラフ化するツールあったらいいなと思ったので作った、という話

netperfで負荷かけている時にカーネルのstatistics情報取って色々とグラフ作るツールがあったらいいなぁ、と思ったので作った。今のところperf statで取れるようなCPUのキャッシュの情報とかが取れてないが…とりあえず netperfとかやってる間にログに数値を…

Arch Linuxで/usr/src/linux;make installで自動的にinitramfs作ってgrub設定する

あおたくんの記事と同じような話だが、Arch Linuxには/sbin/installkernelが無いので作ってみる。 で、ググるとこのあたりにそれっぽいものがあるんだが、これinitramfs作ってくれなかったので、作ってくれるようにちょっと改良した。このあたりから取れます…

Linux Kernelでイベントトレースしてみる

sched:sched_migrate_taskイベントにフィルタルール「comm==bash」を適用、トレースを有効化してtrace_pipeから標準出力にトレース結果を出力 cd /sys/kernel/debug/tracing/events/sched/sched_migrate_task echo "comm==bash" > filter echo 1 > enable cat…

LinuxConでLinuxカーネルへのBCubeの実装を行う話をしてきた

Implementing a layer 2 framework on linux network View more presentations from Takuya Asada

Arch Linuxで任意のバージョンのカーネルをビルド&インストール

なんかArchのドキュメント見てもパッケージシステム使おうとしてるっぽくてよーわからんかったけど、そんな事せんでも普通にinitramfsが用意されてればブート出来るわけで。 tar xvjf linux-3.2.16.tar.bz2 cd linux-3.2.16 zcat /proc/config.gz > .config …

Arch LinuxをTimeCapsuleにする

昨日作ったiSCSIのやつは使い勝手がいまいちだったので、やっぱりnetatalkを入れて普通に自作TimeCapsuleを作ることにした。 まぁこのへん読めって話なんだが。 事前作業 yaourt -Sy netatalk dbus avahi /etc/fstab UUID=017e0151-f13c-4c1e-8eb7-21965d825…

Arch LinuxにiSCSIターゲットを、OS XにiSCSIイニシエータをセットアップし、Time Machineに使う

Arch Linux 基本的にやらなきゃいかんことは全部ここに書いてある: ISCSI Target - ArchWikiなので、ちょっとしたメモだけ。なんかpython2-setuptoolsが無いと途中でビルドが詰んだので先に入れる yaourt -Sy python2-setuptools yaourt -Sy targetcli-fb /…

シリアルコンソール上でのkdbの有効化

ドキュメントがあんまりしっかりしてないのでここに書いておく。 ちなみにkdbというのは*BSDでいうddbである(説明になっていない。まず、カーネルの.configでこのあたりを有効にしてみる: CONFIG_KGDB_KDB=y CONFIG_KDB_KEYBOARD=y CONFIG_HAVE_ARCH_KGDB=…

Arch linuxでX forwardingしようとしてはまる

なんかいつも通りに/etc/ssh/sshd_configに X11Forwarding yesとか設定すればいいかなって思ってたら X11 forwarding request failed on channel 0とか変なエラーでて使えないわけですよ。 なんだろ、って思ってググったらこんなの出てきた。 A note on X11-…

git上の開発版カーネルをビルドするとバージョン番号に+が付く件

これのせいで、いくつかのブート時に走るスクリプトとかが発狂したりするので大変うざい。 LOCALVERSIONを指定しておけば、それらと一緒くたの文字列として扱われるので問題なくなるのだが。 意味としては、3.2.0がリリースされているとしたら、リリース時の…

linux-3.1.6からlinux-3.2.0+(HEAD)へカーネルを上げたらネットワーク性能が落ちた

理由がはっきりしてないけどメモ。 ハード環境 Core i7 X980 24GB RAM Inttel 82599 10GbE Ethernet(ixgbe) linux-3.1.6 Intel阪ixgbeドライバは使わず .config iperfでのTCPスループット:9Gbpsを超える(ほぼワイヤレート) linux-3.2.0+(HEAD) Intel阪ixg…

Tracサーバで複数のgitリポジトリを管理

Tracには0.12から1つのTracインスタンスで複数リポジトリを管理する機能が入っている(MultipleRepositorySupport – The Trac Project)。これを使って複数のgitリポジトリを管理できるようにしてみた。 git pluginを入れる gitを有効にするにはGitPlugin –…

CONFIG_RFS_ACCELはsfc(SolarflareのNIC)専用だという話

CONFIG_RFS_ACCELは一言でいうとRFSをMultiqueue NIC上で実現する機能で、もう少し説明すると、あるパケットが届いたら宛先プロセスの所属するCPUに対して割り込めるようNICにヒントを出す、というものなのだが、どれくらいの範囲のNICに対応しているのかと…

/proc/irq//smp_affinityの書き換えでPCIコンフィグレーション空間はどのように書き換わるか

※追記:実際にはカーネルにprintkを突っ込みまくるという、ずっと泥臭い方法で調査をしてました。多分役にたたないと思うけど、一応その時のdiffも併せて公開しておきます。Linux 3.2.0+用なので、他のバージョンだと当たらないかもしれません。 Debug print…

Kernel/VM Advent Calendar 25日目 最近のPCアーキテクチャにおける割り込みルーティングの仕組み

※追記:MSIはPCI 3.0からじゃなくてPCI 2.3からだとの指摘を受けて書き換え。※追記:hisakさんから詳しくコメントが入っているので、併せて読んで下さい。 とてつもなく遅れたKernel/VM Advent Calendarの25日目の記事です。 Linuxにおける/proc/irq//smp_af…

netperf4をビルドする

並列に負荷をかける為の仕組みを持っているらしいのでちょっと試してみる。 $ svn co http://www.netperf.org/svn/netperf4/trunk netperf4 $ cd netperf4 $ /configure --enable-dependency-tracking --enable-histogram --enable-dns --enable-multi \ --e…

Gentoo Linuxでkdump

カスタムビルドしたカーネルをkdumpするのにとても手間取っていて、どうしてもUbuntuやFedoraで思うように行かなかったので、Gentooで構築してみた。正確には、Gentooにはkdumpを簡単に動くようにする為のパッケージやスクリプト、initramfsの類が無いので、…

UbuntuのLinuxカーネルをビルドする

UbuntuでもRedhatなどと同じようにメインラインのカーネルをいくらか変更したローカルバージョンをメンテナンスしていて、ディストリローカルのバイナリパッケージとしてリリースされているので、単純にmainlineのtar.gzを落としてきてmake && make install…

Ubuntu Serverをテキストモードで起動する

$ sudo vi /etc/default/grub 以下をコメントアウト: GRUB_HIDDEN_TIMEOUT_QUIET=true GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"以下を追加: GRUB_GFXPAYLOAD_LINUX=text$ sudo update-grub $ sudo reboot これで普通にカーネルのブートメッセージなどが…

Ubuntu Serverでkdumpが動いた

Bug #885071 “linux-crashdump functionality is broken” : Bugs : linux package : Ubuntu …ぉぃこら。 壊れたままリリースするなよ…。取り敢えずメモリを4096MBに増やしてリトライ。 ちゃっかりもうひとつのバグ踏んでる。/usr/share/initramfs-tools/scri…

Ubuntu Serverでkdumpが動かない

Fedoraで頭が整理出来たので再挑戦。 $ sudo aptitude install linux-crashdump $ sudo reboot これだけで全自動設定される。 $ sudo sysctl kernel.sysrq=1 $ sudo sysctl kernel.panic=1 $ sudo sysctl kernel.panic_on_oops=1 $ sudo sysctl kernel.unkno…

Fedoraでkdump設定

なんかUbuntuで全然動かんので、Fedoraで試してみた。 始める前に X上がってると裏で何が起きてるのか全くみえないので、まず切ってやる。 $ sudo rm /etc/systemd/system/default.target $ sudo ln -sf /lib/systemd/system/runlevel3.target /etc/systemd/…

Ubuntu Server 11.10のHeadless install(シリアルコンソールでのインストール)

x86なLinuxマシンにVGAとキーボードを使ってシリアルコンソールの設定をするという方法は広く知られているし、UbuntuのWikiにも載っているんだけど、一度もVGA・キーボードを繋がずに設定するにはどうしたらええのん、そもそもVGA刺さってないよみたいな環境…

L2以下の送信処理

カーネルレベルのtunnelingとかしてる場合にどんなパスを通るのか良く分からなかったんで、ちと読んでみた。 Ethernetの場合 ip_output -> ip_finish_output -> (パケットサイズがMTUを超える時のみ ip_fragment) -> ip_finish_output2 -> neigh_output -> n…

MD RAIDに使ってたHDDを非RAID構成なUbuntu Serverなマシンで再利用したいのに、なんか勝手にMDデバイスがスタートして止められないわ、/dev/sdaへ書き込めないわという目に遭った場合どうすれば良いのか

普通にUbuntu Serverのセットアップを進めるとパーティーションを切る所で使えるHDDがねーよって言われて終わる。この段階でShellを立ち上げてどうこうしようとしても、どうにもならなかった。 で、こういう時にどうしたら良いか、という話なんだが、NICの設…

今日のきづき

$ lspci|grep Virtio 00:03.0 Ethernet controller: Red Hat, Inc Virtio network device 00:04.0 SCSI storage controller: Red Hat, Inc Virtio block device 00:05.0 RAM memory: Red Hat, Inc Virtio memory balloonvirtioデバイスのvendor idはRedHatが…

bridge + tapとmacvtapの比較

macvtapはbridge + tapより軽くて速いんだと説明されている事があるが、本当かよと思ってちょっと比較してみた。 rx_handler実行にかかる所要時間 __netif_receive_skbで呼ばれるrx_handlerの処理(bridgeだとbr_handle_frame〜wake_up_interruptible_poll、…

bridge + tapコールフロー(macvtapとの比較用)

e1000_intr -> __napi_schedule -> ** return from intr ** -> ** invoke softirq ** -> net_rx_action -> e1000_clean -> e1000_celan_rx_irq -> e1000_receive_skb -> napi_gro_receive -> dev_gro_receive -> napi_gro_complete -> netif_receive_skb -> …

macvtapコールフロー

e1000_intr -> __napi_schedule -> ** return from intr ** -> ** invoke softirq ** -> net_rx_action -> n->poll -> e1000_clean -> e1000_celan_rx_irq -> e1000_receive_skb -> napi_gro_receive -> dev_gro_receive -> napi_gro_complete -> netif_rece…