カーネルソース

CentOSカーネルをゲットする

自分の環境

# cat /etc/redhat-release 
CentOS release 6.8 (Final)

# uname -r
2.6.32-642.4.2.el6.x86_64

HowTo

ここにやり方が書いてあった。

HowTos/I need the Kernel Source - CentOS Wiki

URLをほしいバージョン指定。

結果

あった kernel-2.6.32-642.4.2.el6.src.rpm

x86_64の記載がないのはバイナリでなく、コンパイル前のソースなので記載がないのでしょう。

rpm -ivh

~に展開される。

メモ

yumdownloaderとは

Issue

yum を使用して、パッケージをインストールせずにダウンロードだけを行う方法は?

Resolution

パッケージをインストールせずにダウンロードだけを行うには、yum の "downloadonly" プラグインまたは yumdownloader ユーティリティを使用する二つの方法があります。

なるほど!

yum を使用して、パッケージをインストールせずにダウンロードだけを行う方法 - Red Hat Customer Portal

SELINUXとAuditd

Auditd

外部からの脅威を念頭にネットワークの周囲に侵入検出システムやファイヤウォールやウィルス・スキャナーを張り巡らせただけで安心してはならず、認可した利用者についても監視する

概要

Linux Auditデーモンの基礎は、カーネルに対して発行されるシステム・コールのすべてを監視することにある。システム・コールというのはユーザー空間で動作しているプログラムがカーネルの機能を利用するための手段で、アプリケーションは直接または間接にこのシステム・コールを介してカーネルの提供するシステム資源への低レベル・アクセスを利用する。Linux Auditデーモンは、この仕組みを利用しているわけだ。このLinux AuditデーモンをSecurity-Enhanced LinuxSELinux)に組み込むと、SELinuxポリシーに対する違反を記録することができる。

デフォルトのままの場合、SELinuxポリシー違反を記録することになる。Linux Auditサブシステムのソース・パッケージには、あらかじめ、監査構成ルールが含まれており、重要なシステム・ファイルへのアクセス、ファイル・パーミッションの変更、ファイルの位置の変更、ファイル・システムのマウントとアンマウントを監視するルールが記述されている。これを基にして指定するとよいだろう。

参考

osdn.jp

initrd

initrd

linuxのルートファイルシステムをマウントする前に、initrdをルートファイルシステムとしてマウントして、各種設定(ドライバ)などをsるんですが、

Wikiより

initrd とinitramfs(Linux 2.6.13 以降利用可能)の2種類の方式があるが、文脈によってはこれらを総称してinitrdと呼んでいる場合もある

とのことで、initrdといいつつ、initramfsのことを指す場合があるとのことでした。結構なんでだろう〜って迷うときが多かったです。

init_post()

カーネルのinitを起動する箇所。これが実行される前にinitramfs/initrdのどちらかがメモリに展開されている。

  • initramfsの場合

    • run_init_process()でinitramfsの/initを実行して、その中のswitch_rootでlinuxのルートファイルシステムをマウントしてlinuxの/sbin/init が動き出す様子。
  • initrdの場合

798 /* This is a non __init function. Force it to be noinline otherwise gcc
799  * makes it inline to init() and it becomes part of init.text section
800  */
801 static noinline int init_post(void)
802 {
803         /* need to finish all async __init code before freeing the memory */
804         async_synchronize_full();
805         free_initmem();
806         mark_rodata_ro();
807         system_state = SYSTEM_RUNNING;
808         numa_default_policy();
809 
810 
811         current->signal->flags |= SIGNAL_UNKILLABLE;
812 
813         if (ramdisk_execute_command) {
814                 run_init_process(ramdisk_execute_command);
815                 printk(KERN_WARNING "Failed to execute %s\n",
816                                 ramdisk_execute_command);
817         }
818 
819         /*
820          * We try each of these until one succeeds.
821          *
822          * The Bourne shell can be used instead of init if we are
823          * trying to recover a really broken machine.
824          */
825         if (execute_command) {
826                 run_init_process(execute_command);
827                 printk(KERN_WARNING "Failed to execute %s.  Attempting "
828                                         "defaults...\n", execute_command);
829         }
830         run_init_process("/sbin/init");
831         run_init_process("/etc/init");
832         run_init_process("/bin/init");
833         run_init_process("/bin/sh");
834 
835         panic("No init found.  Try passing init= option to kernel. "
836               "See Linux Documentation/init.txt for guidance.");
837 }

/proc/cpuinfo

CPU

/proc/cpuinfo

  • 物理的なCPU数
    • physical idの数
  • 物理的なCPUコア数
    • cpu coresの数
  • OSからみたCPUコア数(仮想CPUコア数)
    • siblings 物理的なコア数 * 2(HT効果で2倍されているらしい)
  • OSからみたCPU数(仮想CPU数 == 仮想CPUコア数)
    • cat /proc/cpuinfo | grep processor | wc -l

わかりやすく一行のみ表示

物理CPUは一個

# cat /proc/cpuinfo | grep "physical id"
physical id     : 0

物理CPUコアは4個

# cat /proc/cpuinfo | grep "cpu cores"
cpu cores       : 4

OSからみたCPUコア数(仮想CPUコア数)

# cat /proc/cpuinfo | grep siblings
siblings        : 8

結果、OSから見えるCPU数 == 仮想CPUコア数

物理的なCPUコア数 * 2(HT効果で2倍されているらしい)

cat /proc/cpuinfo | grep processor | wc -l
8

LAの目安

HT効果は

単純に性能が2倍になるわけではなく、現在はおおむね20%程度クロックあたり性能が向上

らしいので、上記の場合は4 * 1.2 = 4.8 くらいを目安か

参考

d.hatena.ne.jp