LEDEを実行しているルーターでLXCコンテナーを作成する方法

時々、人々は何か奇妙なことをしたい気がします。 なぜ-事実、それは問題ではなく、そのようにして行われる必要がある議論は-どうなるでしょう。 しかし、主なことは奇妙なことをしたいという願望です。 さて、私は奇妙なことをすることにしたので、このプロセスを説明してはどうですか。







では、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://git.lede-project.org/source.git build cd build git checkout v17.01.4 ./scripts/feeds update -a ./scripts/feeds install -a
      
      





目的のハードウェアの公式イメージ設定を使用して、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 -- -r jessie
      
      





これで、コンテナrootfsの準備が整いました。 実行してみましょう:







 lxc-start -n testlxc -d
      
      





コンテナに接続するタスクに問題がありました。 lxc-console



bad file descriptor



について文句を言いbad file descriptor



。 しかし、コンテナ自体は稼働しています。 まあ、彼らは奇妙な、奇妙な受信を望んでいました。 私たちはやる:







 lxc-attach -n testlxc -- bash
      
      





そして、コンテナ内でコンソールにアクセスできます。 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



を開始することは正常であり、停止し、反対から進みました。








All Articles