1

(138 odpowiedzi, napisanych Oprogramowanie / Software)

Ok, trochę się tym pobawiłem. Może komuś się jeszcze przyda.

Spróbowałem zbudować samemu 17.01 z gałęzi lede-17.01 w repozytorium. Wziąłem Twój config.seed.apu z wersji luci jako podstawę, ale bez patchy (nct5104d działa u mnie prawidłowo bez patcha). Nie wiem, czy to kwestia tego, że obecnie kod w repo jest nowszy niż Twój obecny build, ale był problem z budowaniem usbip (nie może zaaplikować patcha), więc go wyłączyłem.

Okazuje się, że włączenie podstawowego wsparcia dla lxc jest bardzo proste. W menuconfig w Utilities trzeba zaznaczyć lxc i wejść w konfigurację, gdzie wystarczy zaznaczyć Enable kernel support for LXC oraz Enable support for seccomp in LXC (to drugie możliwe, że nie jest wymagane, ale zwiększa bezpieczeństwo). NIE ZAZNACZAMY wsparcia dla lxc-create w busybox. Będzie później sypać konfliktami przy instalacji różnych pakietów jak np tar, zx itd.

Oprócz tego można włączyć kilka dodatkowych opcji cgroup, które nie są wymagane przez lxc, ale są sprawdzane przez lxc-checkconfig (zmiana w Global build settings):

-*- Enable kernel cgroups
[ ]   Example debug cgroup subsystem
[*]   Freezer cgroup subsystem
[*]   Device controller for cgroups
[*]   PIDs cgroup subsystem
[*]   Cpuset support
[ ]     Include legacy /proc/<pid>/cpuset file
[*]   Simple CPU accounting cgroup subsystem
[*]   Resource counters
[*]   Memory Resource Controller for Control Groups
[*]     Memory Resource Controller Swap Extension
[ ]       Memory Resource Controller Swap Extension enabled by default
[ ]     Memory Resource Controller Kernel Memory accounting (EXPERIMENTAL)
[ ]   Enable perf_event per-cpu per-container group (cgroup) monitoring
[*]   Group CPU scheduler  ---> (nie trzeba nic dodatkowo zaznaczać w tym submenu)
[*]   Block IO controller
[ ]     Enable Block IO controller debugging
[*]   Control Group Classifier
[*]   Network priority cgroup

Dodatkowo przydatne są również kmod-veth oraz kmod-macvlan, jeżeli kontener ma mieć dostęp do sieci. U siebie dodałem je jako preinstalowane od razu w obrazie.

Po instalacji lxc-checkconfig oraz kmod-ikconfig (je też dodałem od razu do buildu) lxc-checkconfig pokazuje niemal wszystko na zielono z wyjątkiem kilku opcjonalnych pozycji.

lxc-create nadal nie działa prawidłowo - tu problem jest niestety z szablonami dostarczonymi razem z pakietem. Utworzyłem więc rootfs i config dla kontenera u siebie na komputerze i przeniosłem na APU2. Na Archu mam dużo nowsze LXC więc, trzeba było zrobić kilka poprawek w configu kontenera.

lxc-start startuje kontener bez problemu. Przetestowałem sieć na veth zbridge'owane do br-lan i odpalony tak debian dostał IP z dnsmasq w LEDE. Jest łączność ze światem.

Niestety są też problemy. lxc-stop nie jest w stanie zamknąć kontenera. Po odpaleniu czeka i nic się nie dzieje. Można zamknąć przez ctrl+c. Zamknięcie kontenera przez shutdown now z systemu kontenera działa i maszyna się ładnie zamyka i kontener się wyłącza. Niestety powtórna próba uruchomienia przez lxc-start kończy się tym, że lxc-start staje się defunct i w dmesgu lecą błędy:

[  869.729125] unregister_netdevice: waiting for lo to become free. Usage count = 1
[  879.918748] unregister_netdevice: waiting for lo to become free. Usage count = 1
[  890.058376] unregister_netdevice: waiting for lo to become free. Usage count = 1

Jedyny sposób na przywrócenie lxc do działania to reboot urządzenia. Nie mam obecnie siły i czasu, żeby próbować dojść do tego, co może być powodem - czy to jest bug w samym kernelu, czy może niekompatybilność między narzędziami userspace, a kernelem.

2

(138 odpowiedzi, napisanych Oprogramowanie / Software)

To doskonale rozumiem, ale nie zmienia to faktu, że nawet w trunku kernel domyślnie nie ma włączonych opcji wymaganych przez pakiety lxc-*.

Moje pytanie jest tylko takie, czy rozważysz dodanie tych opcji do Twoich buildów dla APU, które są dodatkowo zoptymalizowane pod te płytki, co sprawiłoby, że stałyby się jeszcze ciekawsze niż są obecnie pod LEDE/OpenWRT. Jak nie, to oczywiście no hard feelings. Będę musiał sam się zabrać za kompilację, co mi pewnie zajmie sporo czasu, bo nigdy LEDE/OpenWRT nie budowałem od zera.

3

(138 odpowiedzi, napisanych Oprogramowanie / Software)

Snapshot z trunka nadal nie ma wsparcia dla namespace'ów i cgroup. Dodatkowo output z lxc-checkconfig trochę się rozjeżdża:

root@LEDE:~# cat /etc/os-release 
NAME="OpenWrt"
VERSION="SNAPSHOT"
ID="openwrt"
ID_LIKE="lede openwrt"
PRETTY_NAME="OpenWrt SNAPSHOT"
VERSION_ID="snapshot"
HOME_URL="http://lede-project.org/"
BUG_URL="http://bugs.lede-project.org/"
SUPPORT_URL="http://forum.lede-project.org/"
BUILD_ID="r6697-e988b0f"
LEDE_BOARD="x86/64"
LEDE_ARCH="x86_64"
LEDE_TAINTS=""
LEDE_DEVICE_MANUFACTURER="OpenWrt"
LEDE_DEVICE_MANUFACTURER_URL="http://lede-project.org/"
LEDE_DEVICE_PRODUCT="Generic"
LEDE_DEVICE_REVISION="v0"
LEDE_RELEASE="OpenWrt SNAPSHOT r6697-e988b0f"


root@LEDE:~# lxc-checkconfig 
--- Namespaces ---
Namespaces: required
Utsname namespace: missing
Ipc namespace: required
Pid namespace: required
User namespace: missing
Network namespace: missing

--- Control groups ---
Cgroups: missing

Cgroup v1 mount points: 


Cgroup v2 mount points: 


Cgroup v1 systemd controller: /usr/bin/lxc-checkconfig: line 169: printf \033[1;31m: not found

Cgroup v1 freezer controller: /usr/bin/lxc-checkconfig: line 176: printf \033[1;31m: not found

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

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

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

Jest też konflikt pakietu flock (wymagany przez lxc-create) z busybox:

root@LEDE:~# opkg install lxc-create
Installing lxc-create (2.1.1-1) to root...
Downloading http://downloads.lede-project.org/snapshots/packages/x86_64/packages/lxc-create_2.1.1-1_x86_64.ipk
Installing libcap (2.25-2) to root...
Downloading http://downloads.lede-project.org/snapshots/packages/x86_64/packages/libcap_2.25-2_x86_64.ipk
Installing liblxc (2.1.1-1) to root...
Downloading http://downloads.lede-project.org/snapshots/packages/x86_64/packages/liblxc_2.1.1-1_x86_64.ipk
Installing lxc-configs (2.1.1-1) to root...
Downloading http://downloads.lede-project.org/snapshots/packages/x86_64/packages/lxc-configs_2.1.1-1_x86_64.ipk
Installing lxc-hooks (2.1.1-1) to root...
Downloading http://downloads.lede-project.org/snapshots/packages/x86_64/packages/lxc-hooks_2.1.1-1_x86_64.ipk
Installing lxc-templates (2.1.1-1) to root...
Downloading http://downloads.lede-project.org/snapshots/packages/x86_64/packages/lxc-templates_2.1.1-1_x86_64.ipk
Installing flock (2.32-1) to root...
Downloading http://downloads.lede-project.org/snapshots/packages/x86_64/base/flock_2.32-1_x86_64.ipk
Configuring lxc-hooks.
Configuring lxc-configs.
Configuring libcap.
Configuring liblxc.
Configuring lxc-templates.
Collected errors:
 * check_data_file_clashes: Package flock wants to install file /usr/bin/flock
    But that file is already provided by package  * busybox
 * opkg_install_cmd: Cannot install package lxc-create.

4

(138 odpowiedzi, napisanych Oprogramowanie / Software)

Zainstalowałem snapshot stąd: https://downloads.lede-project.org/rele … ts/x86/64/

Niestety kwestia namespace'ów i cgroup nadal bez zmian. lxc-checkconfig pokazuje identyczny wynik jak wcześniej.

5

(138 odpowiedzi, napisanych Oprogramowanie / Software)

Niestety to samo jest na oficjalnym LEDE:

root@LEDE:~# cat /etc/os-release 
NAME="LEDE"
VERSION="17.01.4, Reboot"
ID="lede"
ID_LIKE="lede openwrt"
PRETTY_NAME="LEDE Reboot 17.01.4"
VERSION_ID="17.01.4"
HOME_URL="http://lede-project.org/"
BUG_URL="http://bugs.lede-project.org/"
SUPPORT_URL="http://forum.lede-project.org/"
BUILD_ID="r3560-79f57e422d"
LEDE_BOARD="x86/64"
LEDE_ARCH="x86_64"
LEDE_TAINTS="no-all"
LEDE_DEVICE_MANUFACTURER="LEDE"
LEDE_DEVICE_MANUFACTURER_URL="http://lede-project.org/"
LEDE_DEVICE_PRODUCT="Generic"
LEDE_DEVICE_REVISION="v0"
LEDE_RELEASE="LEDE Reboot 17.01.4 r3560-79f57e422d"
root@LEDE:~# 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 ---
Cgroup: required
Cgroup namespace: required
Cgroup device: missing
Cgroup sched: missing
Cgroup cpu account: missing
Cgroup memory controller: missing
Cgroup cpuset: missing

--- 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: missing

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

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

Szukałem czy są pakiety kmod z potrzebnymi modułami, ale nic nie znajduję.

6

(138 odpowiedzi, napisanych Oprogramowanie / Software)

@Cezary: czy byłaby możliwość włączenia domyślnie w Twoich buildach LEDE dla APU wsparcia dla LXC w kernelu?

Sprawdzałem na stabilnym LEDE jak i na Twoim buildzie i lxc-checkconfig niestety dużo pozycji pokazuje jako niedostępne:

root@LEDE:~# 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 ---
Cgroup: required
Cgroup namespace: required
Cgroup device: missing
Cgroup sched: missing
Cgroup cpu account: missing
Cgroup memory controller: missing
Cgroup cpuset: missing

--- 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: missing

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

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

Jak widać głównie chodzi o dodanie wsparcia dla namespace'ów oraz cgroup.

Tak fajny hardware aż się prosi o możliwość odpalania na nim kontenerów. Zastanawia mnie to, że OpenWRT i LEDE oferują pakiety lxc (nawet luci-app-lxc), a domyślny kernel nie wspiera tego.

Znalazłem taką stronę z listą opcji kernela, jakie trzeba włączyć, jednak artykuł jest z 2016 roku więc możliwe, że jest już trochę przeterminowany: http://www.gnuton.org/blog/2016/02/lxc-on-openwrt/