時々、人々は何か奇妙なことをしたい気がします。 なぜ-事実、それは問題ではなく、そのようにして行われる必要がある議論は-どうなるでしょう。 しかし、主なことは奇妙なことをしたいという願望です。 さて、私は奇妙なことをすることにしたので、このプロセスを説明してはどうですか。
では、DebianでLXCコンテナをどこか他の場所ではなく、 LEDE (OpenWRTフォークとしても知られている)を実行しているハードウェア上で起動する方法は?
(読者自身がルーターでLXCを必要とする理由を理解し、すでにこのコンテナーテクノロジーに精通していることを前提としています)
楽観的な試み
目的の詐欺行為については、LEDEを取り付けた鉄片(またはテスト用のx86 virtualka)を使用し、以下を参照してください。
root@lede:~# opkg find lxc* lxc - 1.1.5-3 - LXC is the userspace control package for Linux Containers, a lightweight virtual system mechanism sometimes described as "chroot on steroids". lxc-attach - 1.1.5-3 - Utility lxc-attach from the LXC userspace tools lxc-auto - 1.1.5-3 - LXC is the userspace control package for Linux Containers, a lightweight virtual system mechanism sometimes described as "chroot on steroids". This package adds and initscript for starting and stopping the containers on boot and shutdown. lxc-autostart - 1.1.5-3 - Utility lxc-autostart from the LXC userspace tools lxc-cgroup - 1.1.5-3 - Utility lxc-cgroup from the LXC userspace tools lxc-checkconfig - 1.1.5-3 - Utility lxc-checkconfig from the LXC userspace tools lxc-clone - 1.1.5-3 - Utility lxc-clone from the LXC userspace tools lxc-common - 1.1.5-3 - LXC common files lxc-config - 1.1.5-3 - Utility lxc-config from the LXC userspace tools lxc-configs - 1.1.5-3 - LXC virtual machine common config files lxc-console - 1.1.5-3 - Utility lxc-console from the LXC userspace tools lxc-create - 1.1.5-3 - Utility lxc-create from the LXC userspace tools lxc-destroy - 1.1.5-3 - Utility lxc-destroy from the LXC userspace tools lxc-device - 1.1.5-3 - Utility lxc-device from the LXC userspace tools lxc-execute - 1.1.5-3 - Utility lxc-execute from the LXC userspace tools lxc-freeze - 1.1.5-3 - Utility lxc-freeze from the LXC userspace tools lxc-hooks - 1.1.5-3 - LXC virtual machine hooks lxc-info - 1.1.5-3 - Utility lxc-info from the LXC userspace tools lxc-init - 1.1.5-3 - LXC Lua bindings lxc-ls - 1.1.5-3 - Utility lxc-ls from the LXC userspace tools lxc-lua - 1.1.5-3 - LXC Lua bindings lxc-monitor - 1.1.5-3 - Utility lxc-monitor from the LXC userspace tools lxc-monitord - 1.1.5-3 - Utility lxc-monitord from the LXC userspace tools lxc-snapshot - 1.1.5-3 - Utility lxc-snapshot from the LXC userspace tools lxc-start - 1.1.5-3 - Utility lxc-start from the LXC userspace tools lxc-stop - 1.1.5-3 - Utility lxc-stop from the LXC userspace tools lxc-templates - 1.1.5-3 - LXC virtual machine templates lxc-unfreeze - 1.1.5-3 - Utility lxc-unfreeze from the LXC userspace tools lxc-unshare - 1.1.5-3 - Utility lxc-unshare from the LXC userspace tools lxc-user-nic - 1.1.5-3 - Utility lxc-user-nic from the LXC userspace tools lxc-usernsexec - 1.1.5-3 - Utility lxc-usernsexec from the LXC userspace tools lxc-wait - 1.1.5-3 - Utility lxc-wait from the LXC userspace tools
うん 予想よりも簡単そうです。 確かに、すべてが個別のユーティリティに分割されていますが、まあまあです。 最初lxc-checkconfig
をlxc-checkconfig
、カーネルについての考えを確認します
root@lede:~# lxc-checkconfig Kernel configuration not found at /proc/config.gz; searching... lxc-checkconfig: unable to retrieve kernel configuration Try recompiling with IKCONFIG_PROC, installing the kernel headers, or specifying the kernel configuration path with: CONFIG=<path> lxc-checkconfig
おっと 何も考えません。 しばらくして、デフォルトのLEDEカーネルはLXCサポートなしでビルドされ、リポジトリ内のパッケージは手動操作のみのためのものであることが判明しました。 しかし、パッケージがあり、カーネルは非常に新鮮です。つまり、カーネルを再構築して使用できます。 やってみましょう。
私たちはLEDEの組み立てを扱っています
LEDEアセンブリの短いガイドを手に取りましょう。 必要なパッケージをOSの下に置きます。 LXCサポートを有効にしないことでエラーが発生することを確認するために、最初にデフォルトの構成から開始することをお勧めします。このノートとは別に理由を調べる必要があります。
git clone https:
目的のハードウェアの公式イメージ設定を使用して、LEDEを組み立てることができます。 これを行うには、 https: //downloads.lede-project.org/releases/にアクセスし、現在のリリース(執筆時点では01/17/4)を選択し、 targets/
your architectureでLEDEイメージの横にあるconfig.seed
ファイルを見つけます。 たとえば、x86の場合、アドレスはhttps://downloads.lede-project.org/releases/17.01.4/targets/x86/generic/config.seed
このファイルを.config
という名前のビルドディレクトリにダウンロードし、 make defconfig
て、完全なビルドファイルに展開します。
wget -O .config https://downloads.lede-project.org/releases/17.01.4/targets/x86/generic/config.seed make defconfig time make
約1時間半の間、すべてが進行していたため、既製の画像をbin/targets/
検索する必要があります。
一般に、 make
は複数のスレッドで呼び出すmake
ができますが、アセンブリドキュメントの警告に感銘を受けましたが、 But this might expose bugs!
どこにも急がないと決めました。
また、十分なディスク容量に注意してください。 20GBを占有するのは非常に簡単です。
LXCを追加
アセンブリに少し精通しているので、今度はLXCをサポートするカーネルオプションを追加します。 出発点としてLXCを使用したOpenWRTの構築に関するほとんど唯一の記事に感謝します。 しかし、この記事は古く、現在のLXCのオプションがすべてではありません。 .config
オプションを追加し.config
。
CONFIG_KERNEL_AIO=y CONFIG_KERNEL_BLK_CGROUP=y CONFIG_KERNEL_BLK_DEV_BSG=y CONFIG_KERNEL_CGROUPS=y CONFIG_KERNEL_CGROUP_CPUACCT=y CONFIG_KERNEL_CGROUP_DEVICE=y CONFIG_KERNEL_CGROUP_FREEZER=y CONFIG_KERNEL_CGROUP_PIDS=y CONFIG_KERNEL_CGROUP_SCHED=y CONFIG_KERNEL_CPUSETS=y # CONFIG_KERNEL_DEBUG_FS is not set # CONFIG_KERNEL_DEBUG_INFO is not set # CONFIG_KERNEL_DEBUG_KERNEL is not set CONFIG_KERNEL_DEVPTS_MULTIPLE_INSTANCES=y CONFIG_KERNEL_DEVTMPFS=y CONFIG_KERNEL_DEVTMPFS_MOUNT=y CONFIG_KERNEL_DIRECT_IO=y CONFIG_KERNEL_FANOTIFY=y CONFIG_KERNEL_FHANDLE=y CONFIG_KERNEL_FREEZER=y CONFIG_KERNEL_IPC_NS=y # CONFIG_KERNEL_KALLSYMS is not set CONFIG_KERNEL_LXC_MISC=y CONFIG_KERNEL_MEMCG=y CONFIG_KERNEL_MEMCG_SWAP=y CONFIG_KERNEL_MM_OWNER=y CONFIG_KERNEL_NAMESPACES=y CONFIG_KERNEL_NETPRIO_CGROUP=y CONFIG_KERNEL_NET_CLS_CGROUP=y CONFIG_KERNEL_NET_NS=y CONFIG_KERNEL_PID_NS=y CONFIG_KERNEL_POSIX_MQUEUE=y CONFIG_KERNEL_PROC_PID_CPUSET=y CONFIG_KERNEL_RESOURCE_COUNTERS=y CONFIG_KERNEL_USER_NS=y CONFIG_KERNEL_UTS_NS=y CONFIG_PACKAGE_ip-tiny=y CONFIG_PACKAGE_ipset=y CONFIG_PACKAGE_iptables-mod-conntrack-extra=y CONFIG_PACKAGE_iptables-mod-ipopt=y CONFIG_PACKAGE_kmod-8021q=y CONFIG_PACKAGE_kmod-fuse=y CONFIG_PACKAGE_kmod-ip6tables-extra=y CONFIG_PACKAGE_kmod-ipt-conntrack-extra=y CONFIG_PACKAGE_kmod-ipt-ipopt=y CONFIG_PACKAGE_kmod-ipt-ipset=y CONFIG_PACKAGE_kmod-ipt-nat-extra=m CONFIG_PACKAGE_kmod-ipt-nat6=m CONFIG_PACKAGE_kmod-macvlan=y CONFIG_PACKAGE_kmod-nf-nat6=m CONFIG_PACKAGE_kmod-nfnetlink=y CONFIG_PACKAGE_kmod-veth=y CONFIG_PACKAGE_terminfo=y
原則として、これらはすべて通常のmake menuconfig
ます。 これを呼び出すことができ、これらのパラメーターは失われず、アセンブリを自分用にカスタマイズできます。
しかし、残念ながら、他にもオプションがあります。 make menuconfig
はないものもあり、カーネル自体の構成を変更する必要があります。 理論的には、正しい方法は
make kernel_menuconfig
そして、すべての関連マークをそこに置きます。 しかし、どういうわけかそれらを探すのは退屈なので、パスが間違っています:更新された.config
を再度実行し.config
make defconfig # - menuconfig , . make prepare
build_dir/target-i386_pentium4_musl-1.1.16/linux-x86_generic/linux-4.4.92/.config
周りのどこかに生成されたカーネル構成ファイルがbuild_dir/target-i386_pentium4_musl-1.1.16/linux-x86_generic/linux-4.4.92/.config
ます(パスは、 build_dir/target-i386_pentium4_musl-1.1.16/linux-x86_generic/linux-4.4.92/.config
、パラメーターヒープとは異なります)。 最後に一連の設定を追加します
CONFIG_CHECKPOINT_RESTORE=y CONFIG_CGROUP_FREEZER=y CONFIG_FREEZER=y CONFIG_IKCONFIG=y CONFIG_IKCONFIG_PROC=y CONFIG_NETFILTER_XT_TARGET_CHECKSUM=m CONFIG_NETLINK_DIAG=y CONFIG_PACKET_DIAG=y CONFIG_INET_DIAG=y CONFIG_UNIX_DIAG=y CONFIG_FHANDLE=y CONFIG_INET_UDP_DIAG=m # CONFIG_PROC_STRIPPED is not set CONFIG_CFQ_GROUP_IOSCHED=y
CONFIG_IKCONFIG_PROC
とCONFIG_IKCONFIG
はまさにlxc-checkconfig
が何も言えなかったためです。 CONFIG_PROC_STRIPPED
は、 /proc
疑似システムから一部のファイルを CONFIG_PROC_STRIPPED
OpenWRTパッチです 。 セットアップは、消費されるメモリの量を減らすはずですが、 lxc-start
警告であることが判明しました。 ただし、メモリ不足のLXCは必要ありません。
そのような介入の後(そして、毎回make prepare
をした後に繰り返す必要があります)
time make
現在、すべての束がすでにコンパイルされており、再コンパイルされないため、はるかに高速に動作します。 約15分で更新されました。
受け取ったイメージを鉄片またはvirtualkaにロードし、 lxc-checkconfig
を実行しようとします。 次のようなきれいな画像が表示されるはずです。
root@lede:~# lxc-checkconfig --- Namespaces --- Namespaces: enabled Utsname namespace: enabled Ipc namespace: enabled Pid namespace: enabled User namespace: enabled Network namespace: enabled Multiple /dev/pts instances: enabled --- Control groups --- Cgroup: enabled Cgroup clone_children flag: enabled Cgroup device: enabled Cgroup sched: enabled Cgroup cpu account: enabled Cgroup memory controller: enabled --- Misc --- Veth pair device: enabled Macvlan: enabled Vlan: enabled Bridges: enabled Advanced netfilter: enabled CONFIG_NF_NAT_IPV4: enabled CONFIG_NF_NAT_IPV6: enabled CONFIG_IP_NF_TARGET_MASQUERADE: enabled CONFIG_IP6_NF_TARGET_MASQUERADE: enabled CONFIG_NETFILTER_XT_TARGET_CHECKSUM: enabled --- Checkpoint/Restore --- checkpoint restore: enabled CONFIG_FHANDLE: enabled CONFIG_EVENTFD: enabled CONFIG_EPOLL: enabled CONFIG_UNIX_DIAG: enabled CONFIG_INET_DIAG: enabled CONFIG_PACKET_DIAG: enabled CONFIG_NETLINK_DIAG: enabled File capabilities: enabled Note : Before booting a new kernel, you can check its configuration usage : CONFIG=/path/to/config /usr/bin/lxc-checkconfig
素晴らしい、ここに核心と完了です。
コンテナの準備
今、私たちは小さなパッケージのパケットを入れます(実際、あなたはそれらをmake
つもりのイメージに直接入れることができますが、私はこれを理解していませんでした)
opkg install lxc-start lxc-attach lxc-stop lxc-ls lxc-monitor lxc-monitord lxc-checkconfig
私はlxc-templates
テンプレートを使用しlxc-templates
ない-私のスクリプトはopenvz以来存在しており、LXCの設定はかなり典型的です。 しかし、私は記事のためにLEDEのdebianアセンブリをチェックしました、より多くのパッケージが必要です:
opkg install lxc-create lxc-templates debootstrap bash getopt rsync
驚いたことに、箱から出してもまだ機能しません。 /var/cache
は、nodevおよびdebootstrapが存在できないため、LEDEに存在します。 したがって、 /var/cache
代わりに、どこかにシンボリックリンクを作成します。
mkdir /mnt/cache ln -s /mnt/cache /var/cache lxc-create -n testlxc -t debian
これで、コンテナrootfsの準備が整いました。 実行してみましょう:
lxc-start -n testlxc -d
コンテナに接続するタスクに問題がありました。 lxc-console
はbad file descriptor
について文句を言いbad file descriptor
。 しかし、コンテナ自体は稼働しています。 まあ、彼らは奇妙な、奇妙な受信を望んでいました。 私たちはやる:
lxc-attach -n testlxc
そして、コンテナ内でコンソールにアクセスできます。 lxc-console
問題点はlxc-console
しませんでしたが、重大ではありませんでした。
/etc/lxc/lxc.conf
このディレクトリへのパスのみが指定されている/etc/lxc/lxc.conf
、 /etc/lxc/lxc.conf
、コンテナを含むディレクトリをどこにでも配置でき/etc/lxc/lxc.conf
。
自動起動コンテナ
最後の詳細は残ります。システムでコンテナの自動起動を設定します。 lxc-auto
パッケージをインストールします
opkg install lxc-auto
そして、initスクリプトと参照設定ファイル/etc/config/lxc-auto
を取得します。 必要な数のコンテナ名の転送から目的のフォームに移動します。
config container option name testlxc
そして、確認のためにシステムを再起動します。 残念ながら、initスクリプトはかなり愚かであることがlxc-stop &
ました。設定からすべてのコンテナに対してlxc-stop &
を呼び出し、デフォルトで300秒間スリープ状態になります。 そのため、コンテナがすぐにオフになっても、スクリプトはスリープします。
PS:最初に、DebianのLXCコンテナーでLEDEを実行しようとしました。 gdbを使用してしばらくしてからも成功しましたが、タスクでは、通常の構成からfirewall
を開始することは正常であり、停止し、反対から進みました。