#author("2017-04-18T23:50:43+09:00","default:nowsky","nowsky")
#author("2017-04-22T00:28:56+09:00","default:nowsky","nowsky")
*Kernel [#t94d3946]
OSの中核となる基本コンポーネントプログラム。
実デバイスとプログラムの中継をしたり、デバイス制御を行う為に必要となる。
 
Linuxの場合は [[Kernel Archives:+https://www.kernel.org/]] で公開されている物を使っている事が多い。
他UNIXの場合は独自ビルドしたカーネルを利用している場合もある

~
*PCI-E ASPM [#jaaeecb8]
PCI-Expressには省電力機能としてASPM(Active State Power Management)が実装されている。
対応しているマザーボード・OSを利用する事で、利用していない&color(#ff0000){PCI-Eデバイスを停止させて省電力化};する事が出来るが、
対応していない環境や仮想環境で利用すると、&font(b){&color(#ff0000){意図しないシステムダウンが発生};};する。
 
特に、古いサーバに最新のOSを利用した時に発生する事が多いのと、
ログが残らずにシステムダウンする為、原因特定に時間のかかる場合が多い
システムダウンを回避するには、ASPMをDisableした後にOSを再起動をする必要がある。
 
#region(&color(#ff0000){ASPMの停止手順};)
-&font(b){参考サイト};
[[CentOS6.2を使っていて突然ネットワークがダウンした話:+http://tsunokawa.hatenablog.com/entry/20120912/p1]]
 
-&font(b){[GRUB1]}; /etc/grub.conf
kernel行の最後に &color(#ff0000){"pcie_aspm=off"}; を追記してOS再起動
 title CentOS (2.6.32-xxx.yyy.x86_64)
    root (hd0,0)
    kernel /vmlinuz-2.6.32-xxx.yyy.x86_64 【中略】 rhgb quiet pcie_aspm=off
    initrd /initramfs-2.6.32-xxx.yyy.x86_64.img
 
-&font(b){[GRUB2]}; /etc/default/grub
GRUB_CMDLINE_LINUXの最後に &color(#ff0000){"pcie_aspm=off"}; を追記した後、grub2-mkconfigで設定を作り直してOS再起動
 GRUB_TIMEOUT=5
 GRUB_DISTRIBUTOR="$(sed 's, release .*$,,g' /etc/system-release)"
 GRUB_DEFAULT=saved
 GRUB_DISABLE_SUBMENU=true
 GRUB_TERMINAL_OUTPUT="console"
 GRUB_CMDLINE_LINUX="【中略】 rhgb quiet pcie_aspm=off"
 GRUB_DISABLE_RECOVERY="true"
 ---
 # grub2-mkconfig -o /boot/grub2/grub.cfg
 
-&font(b){確認コマンド};
下記の実行結果が表示されれば、ASPMが無効化されている
 # dmesg | egrep -i "PCIE ASPM"
 ---
 PCIe ASPM is disabled
#endregion

~
*Jool NAT64 [#rbc2d01e]
IPv6限定ネットワークからIPv4へ通信を行う為に様々な手段が存在するが、
IPv6限定ネットワークからIPv4へ通信を行うには様々な手段が存在するが、
その内の一つとしてDNS64+NAT64によるL3+L4変換が存在する。
Linuxで実装する場合はDNSキャッシュサーバをDNS64モードで動作させた上で、
KernelModuleによるNAT64を実装する必要がある。
KernelModuleにNAT64を組み込む必要がある。
 
[[Jool:+https://www.jool.mx/en/index.html]]は、LinuxKernel用NAT64モジュールの一種であり、
RedHat、Debian、openSUSE、Raspbianなど様々な環境で動かす事が出来る。
 
#region(&color(#ff0000){Jool組み込み方法};)
-&font(b){参考サイト};
[[iOS向けIPv6なNAT64/DNS64の試験ネットワークをRaspberry Pi 3で作る:+http://pslabo.hatenablog.com/entry/2016/07/30/iOS%E5%90%91%E3%81%91IPv6%E3%81%AANAT64/DNS64%E3%81%AE%E8%A9%A6%E9%A8%93%E3%83%8D%E3%83%83%E3%83%88%E3%83%AF%E3%83%BC%E3%82%AF%E3%82%92Raspberry_Pi_3%E3%81%A7%E4%BD%9C%E3%82%8B]]
[[Linuxだけで実装するNAT64:+http://qiita.com/onifinger/items/45390f414db23adcf2b9]]
 
-&font(b){Kernel再構築};
Raspbian(Raspberry Pi3)でJoolを実装する為には、Kernel再構築(リビルド)が必要となる。
コンパイル時間は、組み込むモジュール量に応じて処理時間が増減するが、
コンパイル時間は、Kernelに組み込むモジュール量に応じて処理時間が増減するが、
ラズパイの処理をコンパイルのみに限定させれば、3~6時間で処理が完了する。

 # git clone --depth=1 https://github.com/raspberrypi/linux
 # cd linux
 # KERNEL=kernel7
 # make bcm2709_defconfig
 # make -j4 zImage modules dtbs
 # make modules_install
 # cp arch/arm/boot/dts/*.dtb /boot/
 # cp arch/arm/boot/dts/overlays/*.dtb* /boot/overlays/
 # cp arch/arm/boot/dts/overlays/README /boot/overlays/
 # scripts/mkknlimg arch/arm/boot/zImage /boot/$KERNEL.img
 
-&font(b){アップデート無効化};
パッケージ管理によるKernel自動アップデートを無効化する
 # apt-mark hold raspberrypi-bootloader
 # apt-mark hold raspberrypi-kernel
 # apt-mark hold raspberrypi-sys-mods
 # dpkg --get-selections | grep hold
 
-&font(b){Kernel調整};
Kernelパラメータを修正した後に再起動する事で、Joolモジュールを読み込ませる
 # echo "jool"                            >> /etc/modules
 # echo "options jool pool6=64:ff9b::/96" >> /etc/modprobe.d/jool.conf
 # reboot
 
-&font(b){Joolステータス};
[[Joolドキュメント:+https://jool.mx/en/documentation.html]]に詳細は書いてあるが、主に下記コマンドを使うのでメモ
 1).Poolの一覧出力
 # jool --pool4 --display
 
 2).セッション数確認
 # jool -c -s
#endregion