2014-01-01から1年間の記事一覧

3.17-rc4:Kconfigのnat周りの項目に変更があったようなのでメモ

つい最新のものを使ってしまう人以外には多分関係ないだろうメモ書き。ディストリビューションのカーネルならこの辺のチェックはちゃんとしているだろうし。 Linux 3.17-rc4でnat周りの設定が変わってipv4のnatとかmasquradeを使うにはCONFIG_IP_NF_NATをyか…

OpenBSDのexplicit_bzero(3)の仕組み

OpenBSDのlibcにはexplicit_bzero(3)という関数があって、変数を使い終わった後にmemset(3)で0クリアできるようにする関数。 これはコンパイラがmemset()後にその変数が使われないならmemset()自体いらないだろうという最適化によってmemset()自体が消される…

user namespaceめも

user namespace以外のnamespaceはcreate_new_namespaces()で作るけどuser namespaceだけは別ルートになっているのでその辺のめも。 見ているのはLinux 3.16。 user namespaceの場合copy_creds()の処理中に以下のような形で呼ばれる。 339 if (clone_flags & …

setns(2)を使う方のめも

今日はLinuxカーネルもくもく会 #3 でsetns(2)のユーザーランド側の挙動を見てみようと思って実験してみたのでメモ。 カーネル側の動作についてはTenForwardさんによる[Linux][Container] setns を UTS Namespace をネタにおっかけるが参考になります。 で、…

φ(・・*)ゞ ウーン mount namespaceめも

mount namespaceを作成するカーネル側の関数としてはcreate_mnt_ns()とcopy_mnt_ns()の2つがあるんだけどcreate_mnt_ns()のほうはbtrfsとnfs4しか使っていない模様。 これら2個のコールフローは以下のような流れ。 btrfsの場合はサブボリュームをマウントす…

cordovaでios simulatorの起動でハマっためも

mac

cordovaでios simulatorを起動させるのに↓のようなコマンド使った時にSimulator session timed out.とか言われて起動しなくてハマった訳です/(^o^)\ $ cordova emulate ios -d 〜略〜 ** BUILD SUCCEEDED ** 2014-08-15 23:03:07.318 ios-sim[7899:507] st…

Linux:実行中プロセスの名前空間切り替え

Linuxで名前空間に関して設定できるのはclone(2)、unshare(2)、setns(2)で、このうち実行中のプロセスの名前空間を変更できるのは後者の2個なんですが、カーネル側ではkernel/nsproxy.cにあるswitch_task_namespaces()が実際の処理を行ってます。そんなわけ…

CLONE_NEWPIDを調べる:getpid()とpid namespace

CLONE_NEWPIDをclone(2)のflagsに付けて新しいプロセスを親プロセスと別のpid namaspaceで動かすことができますね。この時にどうやってpidを正しくプロセスに見せているのか知りたかったのでgetpid()を見てみました。 まずこんなコードを動かしてみます。あ…

Linux: コンテナ型の仮想化サポートとkuid_t、kgid_t

前回の日記でふと思ったuser_namespace構造体とは何?というのを調べているんだけどその過程で出てきたkuid_tとkgid_tのメモ。 定義自体はinclude/linux/uidgid.hにあって、このような形でとくに面白いものでもない。 20 typedef struct { 21 uid_t val; 22 …

create_new_namespaces()めも

軽くめも。fork(2)の場合は親プロセスの名前空間を引き継ぐけど、clone(2)、unshare(2)、set_ns(2)などは名前空間に関するフラグが設定でき、これはカーネル内だとcreate_new_namespaces()にて行われる。 create_new_namespaces()の処理内容としてはcreate_n…

nsproxyとfork()周りのめも

軽くnsproxyと初期化周りのめもを。 Linuxでは名前空間の管理にはnsproxy構造体が使われていて定義はinclude/linux/nsproxy.hにある。 中身はこのような形で5つの名前空間が管理されている。 29 struct nsproxy { 30 atomic_t count; 31 struct uts_namespac…

プロセスと端末の関係(プロセスとかセッション)

プロセスと端末は関連があるっていう話をはじめてのOSコードリーディング 読書会 (17)で制御端末のときにちょろっとしたのでその補足的に。出てくる用語としては、プロセス、プロセスグループ、セッションリーダー、セッションがあります。これらがどのよう…

Linux:virt-managerで作った仮想環境のディスクサイズを大きくするのとresizef2fsでext4側でのサイズ変更めも

実験用だと思って適当に作ったらディスクのサイズが足りなかったので手順のメモ。virt-managerで仮想環境を作って、仮想環境のOSはLinuxでファイルシステムはLVMなしのext4という状態。行うことはディスクイメージの拡張と、Linux側でパーティションを作りな…

printk()で%pS format string指定時のアドレス->シンボル名の探し方

Linuxカーネルのprintk()はformat stringが色々と拡張されていて(Documentation/printk-formats.txt)、例えば、IPv4/IPv6の表示用、UUID/GUIDの表示用などがあります。その中でsymbol関連のformat stringもいくつか合って、%pSの場合はこんなふうに呼び出…

systemd: systemctl start foobar@hogehogeのように動かす.serviceファイルの記述

個人的に使ってvps環境でuwsgiを使ったアプリケーションを動かすのにどうやって起動・終了するか?ということを考えるとsystemdを選ぶのですが(vpsはCentOS 7環境なので。あと普段使ってるArchもsystemdだからというのも)、できたらアプリごとに.serviceは…

Linux: pud_alloc()周りのメモ

前回はPGD周りをみたので今回はPUD周りを。PUDを作るのはpuc_alloc()でこれはいくつかの呼び出しパターンがあるのだけど(lxrでIdentifier Searchした結果からして)、一番基本であろうページフォルトの時で調べる。 ページフォルト発生時は__handle_mm_faul…

Linux x86_64のPaging:Page Global Directory辺りの扱いを見てみる

Linux(x86_64)のpagingをちゃんと理解したいな〜ということで。見ているのはLinuxカーネル3.15。 まずはx86_64アーキテクチャのページングの仕組みとLinuxでの対応(どんな型で表すのか)を調べる。 | name | bits | c type | |----------- ----|-------|-…

Linux:面白そうなpatch(Address sanitizer for kernel)を見てみる

ふと見て面白そうだなと思った[RFC/PATCH RESEND -next 00/21] Address sanitizer for kernel (kasan) - dynamic memory error detector.、略してKASANがどんなものなのかを見てみる。どうしてもJ( 'ー`)しが思い浮かぶんだけどそこはスルー。 基本、見るのは…

pthread_exit(3)を調べてみる

(´-`).。oO(ふと気になったのでpthread_exit(3)を調べてみる。 まず、man 3 pthread_exitによる基本的な部分はこのような感じ。 pthread_exit()を呼び出したスレッドを終了する cleanupハンドラでスレッド終了時に実行させたい処理を登録できる スレッド終…

Linuxカーネルもくもく会を開催したという話

Linuxカーネルもくもく会というのを先週開催しました。主催者自らというか主催者のみが店を間違えるというアレなことはありましたが、雑談したりもくもくしたりで時間も延長したりでしたが無事に1回目が終了したと思います。参加者のみなさんに感謝m(__)m な…

Arch LinuxでOSvのビルドを試す

osv

Arch Linuxでビルドしたいものだなと思い、いくつか試した結果、mrubyのイメージは作ることができた( ´∀`)bグッ! makeはこのようにbuild_envを付ける。 masami@saga:~/codes/osv (master)$ make build_env=host image=mruby で、しばらく待つとビルドが無事…

OSvもくもく会#2 参加記録めも

osv

OSvもくもく会#2 〜OSvで遊んでみよう〜でやったことのまとめを。 今回まずやろうと思っていたことは「mrubyを動かす」で、これはsyuu1228さんの最初の説明でmake時にimage=でappsの名前を指定すれば良いと聞いたのでその通りに実行。 make image=mruby これ…

linux-3.16で入ったdecode_stacktrace.shを試してみる

先週のLWNの記事3.16 merge window, part 2を見てて、「お、これは便利じゃね?」って思ったdecode_stacktrace.shを試してみました。 これはカーネルのスタックトレースにあるオブジェクトのシンボルからソースファイル名・行番号を出してくれるという優れも…

sys_stat()を読んで見る。

なんとなく昨日のLinux:sparse fileのファイルサイズと実際に使っている領域の大きさはどう調べるのか。続きで見てみます。 見ているカーネルは3.15です。 まずはarch/x86/syscalls/syscall_64.tblでシステムコールの定義を見てみるとstat()はsys_newstat()…

Linux:sparse fileのファイルサイズと実際に使っている領域の大きさはどう調べるのか。

今日の原書で学ぶ64bitアセンブラ入門(6)でsparse fileの話題が出て気になったので調べてみた。何を調べたかったかというと、sparse file全体の大きさ、実際に使っているサイズはどう管理されているのかというところ。 ちなみに、Sparse FileについてはSpars…

kmalloc()とBUG: sleeping function called from invalid context〜とslab_alloc_node()

カーネルのバグでspin lock取っているコンテキストでsleepする可能性のある関数を使うと「BUG: sleeping function called from invalid context at mm/slub.c:965」なんて感じでエラーがでますけど、kmalloc()はGFP_XXXなflagsをどのように使っているのかな…

Linuxのpipeの実装を見てみる

Unix V6のpipe()と比べてLinuxのpipe()どう実装しているんですかねーなんて話を最近したのでちょっと見比べてみた。 V6のpipeははじめてのOSコードリーディング 読書会 (15)でやったところなんだけど、俺は風邪ひいて家で引きこもってたので・・・ V6のpipe…

Linuxのネットワークインターフェース名って何を基準に決めてるのかを確認してみる

そういえば何を基準にインターフェース名を決めてんだっけ?というのを確認してみる。名前をつけているのはudevというか今ならsystemdですかね。とにかくそのルールが知りたかったのです。 うちのデスクトップのイーサネットカードだとこんな感じのインター…

mtpaintでドット絵を書く場合の基本的な設定めも

mtpaintでドット絵を書く場合の基本的な設定箇所がわかったので一応めもしておく。 mtpaintを立ち上げたらまずはgridの設定。gridの設定はView -> Configure Grid ...を選ぶ。 gridの設定画面が出たらTile gridにチェックを付けるのとMinimum grid zoom、Til…

libvirtdがネットワーク設定にebtablesを使うようになってたのでlibvirtのネットワークが起動してなかった

今回のめもはArch Linux以外だと多分関係ないかも。パッケージの依存関係でebtablesが必須になっていれば多分問題無いはず。 仮想環境でも立ち上げようと思ってvirsh start ~なんてやったら↓のようなエラーが。 virsh Requested operation is not valid: net…