LXCのカーネルコンパイルオプションの調査

1.lxc-checkconfig

lxc 2.1ソースコードをダウンロードし、gcc-linaro-4.9-2014.11-x86_64_arm-linux-gnueabihfをコンパイルし、コンパイルしたlxcを開発ボードにコピーしてlxc-checkconfigを実行し、多くのエラーを報告します。

root@maya:~# lxc-checkconfig 
--- Namespaces ---
Namespaces: required
Utsname namespace: missing
Ipc namespace: required
Pid namespace: required
User namespace: missing
Network namespace: missing
Multiple /dev/pts instances: missing

--- Control groups ---
Cgroups: enabled
Cgroup v1 mount points: 
Cgroup v2 mount points: 

Cgroup v1 systemd controller: missing
Cgroup v1 freezer controller: missing
Cgroup namespace: required
Cgroup device: missing
Cgroup sched: missing
Cgroup cpu account: missing
Cgroup memory controller: missing
Cgroup cpuset: missing
--- Misc ---
Veth pair device: missing
Macvlan: missing
Vlan: enabled, not loaded
Bridges: missing
Advanced netfilter: missing
CONFIG_NF_NAT_IPV4: missing
CONFIG_NF_NAT_IPV6: missing
CONFIG_IP_NF_TARGET_MASQUERADE: missing
CONFIG_IP6_NF_TARGET_MASQUERADE: missing
CONFIG_NETFILTER_XT_TARGET_CHECKSUM: missing
CONFIG_NETFILTER_XT_MATCH_COMMENT: missing
FUSE (for use with lxcfs): enabled, not loaded

--- Checkpoint/Restore ---
checkpoint restore: missing
CONFIG_FHANDLE: enabled
CONFIG_EVENTFD: enabled
CONFIG_EPOLL: enabled
CONFIG_UNIX_DIAG: missing
CONFIG_INET_DIAG: enabled
CONFIG_PACKET_DIAG: missing
CONFIG_NETLINK_DIAG: missing
File capabilities: 

Note : Before booting a new kernel, you can check its configuration
usage : CONFIG=/path/to/config /home/root/lxc/bin/lxc-checkconfig

心配しないでください。開発ボード上のカーネルはすでにLXCをサポートしている可能性があります。これは、カーネルのコンパイルオプションを示すCONFIG = / path / to / configファイルが見つからないために報告されたエラーですでは、この構成ファイルはどこにありますか?

カーネルコンパイルオプションファイル

CentOS 7でlxc-checkconfigを実行すると、出力は次のようになります。

Kernel configuration not found at /proc/config.gz; searching...
Kernel configuration found at /boot/config-3.10.0-957.10.1.el7.x86_64

開発ボードで、/ procディレクトリを確認してconfig.gzファイルを見つけ、それをtempディレクトリにコピーして解凍してから、lxc-checkconfigを実行します。

root@maya:~/temp# gzip -d config.gz
root@maya:~/temp# CONFIG=./config lxc-checkconfig 
--- Namespaces ---
Namespaces: required
Utsname namespace: missing
Ipc namespace: required
Pid namespace: required
User namespace: missing
Network namespace: missing
Multiple /dev/pts instances: missing
...

報告されるエラーは前のエラーと同じです。構成ファイルを開くと、CONFIG_EVENTFDなどのオプションは実際にありますが、CONFIG_NF_NAT_IPV4などのオプションはありません。

では、LXCはどのカーネルコンパイルオプションに関連していますか?

2.ソースコードのlxc-checkconfig

ソースコードでsrc / lxc / tools /ディレクトリを開きます。次のようにいくつかのlxc-checkconfigファイルがあります。

lxc-checkconfig
lxc-checkconfig.in
lxc_checkconfig.c

lxc_checkconfig.cファイルを開き、liblxc.soのAPIを呼び出します。コンパイルオプションに関連するコンテンツが見つかりません。したがって、ソースコードディレクトリを検索します

find . -type f -iregex '.*\.\(c|cpp|h|hpp\)' -print0 | xargs -0 grep --color -H -n Utsname

コンパイルオプションに関連するコンテンツはまだ見つかりませんでした。

なんてこったい?

grep -n Utsname lxc-checkconfig
99:echo -n "Utsname namespace: " && is_enabled CONFIG_UTS_NS

ハハ、スクリプトlxc-checkconfigがそれを実行したことがわかりました!ただし、コンパイル後、ELFコマンドlxc-checkconfigが配置されているディレクトリには、スクリプトlxc-checkconfig?がありません。

strings lxc-checkconfig
...
echo "--- Namespaces ---"
echo -n "Namespaces: " && is_enabled CONFIG_NAMESPACES yes
echo
echo -n "Utsname namespace: " && is_enabled CONFIG_UTS_NS
echo
echo -n "Ipc namespace: " && is_enabled CONFIG_IPC_NS yes
echo
echo -n "Pid namespace: " && is_enabled CONFIG_PID_NS yes
echo
echo -n "User namespace: " && is_enabled CONFIG_USER_NS
echo

コンパイル時にELFコマンドlxc-checkconfigにパッケージ化されていることが判明しました。

3.LXC関連のカーネルコンパイルオプション

次のように、LXC関連のカーネルコンパイルオプションを簡単に見つけることができます。

[root@maya]# grep "echo -n" lxc-checkconfig
        $SETCOLOR_SUCCESS && echo -n "enabled" && $SETCOLOR_NORMAL
            $SETCOLOR_FAILURE && echo -n "required" && $SETCOLOR_NORMAL
            $SETCOLOR_WARNING && echo -n "missing" && $SETCOLOR_NORMAL
        echo -n ", loaded"
        echo -n ", not loaded"
echo -n "Namespaces: " && is_enabled CONFIG_NAMESPACES yes
echo -n "Utsname namespace: " && is_enabled CONFIG_UTS_NS
echo -n "Ipc namespace: " && is_enabled CONFIG_IPC_NS yes
echo -n "Pid namespace: " && is_enabled CONFIG_PID_NS yes
echo -n "User namespace: " && is_enabled CONFIG_USER_NS
echo -n "Network namespace: " && is_enabled CONFIG_NET_NS
        echo -n "Multiple /dev/pts instances: " && is_enabled DEVPTS_MULTIPLE_INSTANCES
echo -n "Cgroups: " && is_enabled CONFIG_CGROUPS
    echo -n "Cgroup v1 systemd controller: "
    $SETCOLOR_FAILURE && echo -n "missing" && $SETCOLOR_NORMAL
    echo -n "Cgroup v1 freezer controller: "
    $SETCOLOR_FAILURE && echo -n "missing" && $SETCOLOR_NORMAL
    echo -n "Cgroup v1 clone_children flag: " &&
    echo -n "Cgroup namespace: " && is_enabled CONFIG_CGROUP_NS yes
echo -n "Cgroup device: " && is_enabled CONFIG_CGROUP_DEVICE
echo -n "Cgroup sched: " && is_enabled CONFIG_CGROUP_SCHED
echo -n "Cgroup cpu account: " && is_enabled CONFIG_CGROUP_CPUACCT
echo -n "Cgroup memory controller: "
is_set CONFIG_SMP && echo -n "Cgroup cpuset: " && is_enabled CONFIG_CPUSETS && echo
echo -n "Veth pair device: " && is_enabled CONFIG_VETH && is_probed veth
echo -n "Macvlan: " && is_enabled CONFIG_MACVLAN && is_probed macvlan
echo -n "Vlan: " && is_enabled CONFIG_VLAN_8021Q && is_probed 8021q
echo -n "Bridges: " && is_enabled CONFIG_BRIDGE && is_probed bridge
echo -n "Advanced netfilter: " && is_enabled CONFIG_NETFILTER_ADVANCED && is_probed nf_tables
echo -n "CONFIG_NF_NAT_IPV4: " && is_enabled CONFIG_NF_NAT_IPV4 && is_probed nf_nat_ipv4
echo -n "CONFIG_NF_NAT_IPV6: " && is_enabled CONFIG_NF_NAT_IPV6 && is_probed nf_nat_ipv6
echo -n "CONFIG_IP_NF_TARGET_MASQUERADE: " && is_enabled CONFIG_IP_NF_TARGET_MASQUERADE && is_probed nf_nat_masquerade_ipv4
echo -n "CONFIG_IP6_NF_TARGET_MASQUERADE: " && is_enabled CONFIG_IP6_NF_TARGET_MASQUERADE && is_probed nf_nat_masquerade_ipv6
echo -n "CONFIG_NETFILTER_XT_TARGET_CHECKSUM: " && is_enabled CONFIG_NETFILTER_XT_TARGET_CHECKSUM && is_probed xt_CHECKSUM
echo -n "CONFIG_NETFILTER_XT_MATCH_COMMENT: " && is_enabled CONFIG_NETFILTER_XT_MATCH_COMMENT && is_probed xt_comment
echo -n "FUSE (for use with lxcfs): " && is_enabled CONFIG_FUSE_FS && is_probed fuse
echo -n "checkpoint restore: " && is_enabled CONFIG_CHECKPOINT_RESTORE
echo -n "CONFIG_FHANDLE: " && is_enabled CONFIG_FHANDLE
echo -n "CONFIG_EVENTFD: " && is_enabled CONFIG_EVENTFD
echo -n "CONFIG_EPOLL: " && is_enabled CONFIG_EPOLL
echo -n "CONFIG_UNIX_DIAG: " && is_enabled CONFIG_UNIX_DIAG
echo -n "CONFIG_INET_DIAG: " && is_enabled CONFIG_INET_DIAG
echo -n "CONFIG_PACKET_DIAG: " && is_enabled CONFIG_PACKET_DIAG
echo -n "CONFIG_NETLINK_DIAG: " && is_enabled CONFIG_NETLINK_DIAG
echo -n "File capabilities: " && \

欠落している場合は、lxc-checkconfigスクリプトを見つけます。

おすすめ

転載: blog.csdn.net/hylaking/article/details/90515717