LXC kontejnery na Turris verze 1.x

Zdravím. Rád bych si na původním Turrisu rozjel 3 LXC kontejnery - jeden s TurrisOS, druhý s OpenWRT a třetí s Debianem. Pro instalaci Debianu (PowerPC arcitektury) jsem našel návod od p. Klimenta LXC kontejner na Turrisu, ale jak vytvořit LXC kontejnery s OpenWRT a TurrisOS jsem nenašel nikde. Lze použít oficiální návod z dokumentace pro Turris? Díky předem za Vaše rady.

1 Like

Obavám se, že ofiko návod funguje jen na omnii. Bylo tomu tak teda před cca 3 měsíci. Nemyslím si ale, že by se to změnilo.

LXC je i pro Turris 1.0 a 1.1 tedy nikoliv pouze na omnii. viz. popis zde https://github.com/renekliment/turris-lxc-howto

Jen výběr systémů je omezenější :

Vzhledem k architektuře procesu v Turrisu (1.0 a 1.1) je bohužel výběr linuxových distribucí poměrně dost omezený a to na:
•OpenWRT,
•Turris OS,
•a Debian PowerPCSPE, který je poměrně experimentální.

Jak OpenWRT, tak Turris OS v kontejneru mají jistě svá využití, nicméně nejzajímavější je poslední možnost, která je rozebrána dále.

Nojo, ale právě o instalaci těch TurrisOS a OpenWRT, co mají svá opodstatnění, do LXC kontejneru mně jde. Ale jak na to?

1 Like

Zkoušel jsem dle oficiální dokumentace :
lxc-create -t download -n debian
Setting up the GPG keyring
Downloading the image index
WARNING: Failed to download the file over HTTPs.
The file was instead download over HTTP. A server replay attack may be possible!


DIST RELEASE ARCH VARIANT BUILD

Turris_OS stable armv7l default 2016-12-18
Turris_OS stable ppc default 2016-12-18
Alpine 3.4 armv7l default 2016-12-18
Debian Jessie armv7l default 2016-12-18
Gentoo stable armv7l default 2016-12-18
openSUSE 13.2 armv7l default 2016-12-18
openSUSE Tumbleweed armv7l default 2016-12-18
Ubuntu Xenial armv7l default 2016-12-18
Ubuntu Yakkety armv7l default 2016-12-18

Pro původní Turris s architekturou ppc je v nabídce pouze TurrisOS tedy by to mělo jít. Nedává mi moc smysl vytvářet si v OpenWrt ještě další kontejner pro druhý OpenWrt. Jinak se mi povedlo rozjet na původním turrisu i debian dle návodu : https://github.com/renekliment/turris-lxc-howto

Jen mám problém že pokud zrovna neběží tak jej nevidím v LUCI

V LuCI je možné vytvořit kontejner s Turris OS. Jak to udělat z řádky, nebo s OpenWRT nevím.

Díky … zatím jsem neexperimentoval ani s tím Debianím LXC kontejnerem, protože každý pokus o instalaci jakéhokoliv balíčku končí na chybě “Segmentation fault”. To už se řeší v jiném vlákně … touto chybou je poctěno více kolegů Turristů (nejsem v tom sám :slight_smile:)

Včera jsem se konečně dostal (po předchozí úspěšné migraci TurrisOS na verzi 3.5 a zbavení se otravné chyby “Segmentation fault” při pokusu o instalaci jakéhokoliv balíčku) k rozběhnutí LXC kontejneru s Debianem podle tohoto zde již několikrát odkazovaného návodu od @rene.kliment

K návodu bych měl několik drobných vylepšení:

  1. v sekci “Instalace prerekvizit” bod 2. se podle mne zbytečně instalují všechny možné balíčky lxc
    Místo toho je možno použít editaci souboru /etc/config/updater a přidat do sekce "config pkglists ‘pkglists’ " jeden řádek "list lists ‘lxc’ "
    Tímto se vám o instalaci pouze potřebných LXC balíčků postará přímo updater a další výhodou tohoto postupu (kromě toho, že se vám nebudou na router instalovat všechny LXC balíčky) je, že se updater i průběžně dále bude starat o to, aby jím nainstalované LXC balíčky byly stále aktuální (a v případě potřeby sám provede jejich aktualizaci na poslední dostupnou verzi.

  2. pokud chceme, aby vytvořený LXC kontejner byl dostupný i v LUCI rozhraní, je možno vytvořit buď symlink dle návodu, nebo přímo editovat soubor /etc/lxc/lxc.conf a zde zaměnit původní cestu “lxc.lxcpath = /srv/lxc” za cestu ke svému úložišti, kde máte uloženy LXC kontejnery (typicky někde na externím disku, takže upravený parametr může vypadat např.: "lxc.lxcpath = /mnt/disk/lxc-containers"
    Výhodou tohoto postupu (kromě toho, že v adresáři /srv/lxc nemusím vytvářet v návodu popisovaný symlink) je to, že tuto cestu bude ctít i šablona, podle které se vytváří v LUCi kontejnery a vytvoří mi např. TurrisOS stable LXC kontejner už přímo na externím disku (jehož přípojný bod je specifikovaný v parametru lxcpath).

1 Like

Díky za poznámky. Když to čitelně sepíšete do Pull Requestu, tak to rád mergnu :slight_smile:

1 Like

Shodou okolností jsem se zabýval stejnou věcí po zbavení se té otravné chyby v opkg. Zkoušel jsem také podle návodu https://www.root.cz/clanky/spusteni-openhab-serveru-na-routeru-turris/ který však používá development verze balíků.

V momentě kdy jsem ale chtěl následně nainstalovat Javu 8 pomocí apt-get install openjdk-8-jdk openjdk-8-jre tak jsem se dostal do bodu kdy mi debian v lxc vyhazoval chybu nedostatek místa na disku a to i přestože na 32GB sdkartě bylo 20GB volného místa. Zkoušel jsem to dvakrát ale se stejným výsledkem.

Hodila by se mi nějaká inspirace na co LXC debianu použít a návod jak na to. Poté co jsem nebyl schopný upravit lighttpd v turrisu tak aby fungoval v jiných adresářích jsem do debianu nainstaloval NGIX server ale tím jsem prozatím skončil.

Ten rootí návod nedoporučuji používat už jen proto, že v základu instalujete několik let staré balíky a pak upgradujete, importujete pravděpodobně už starý PGP klíč a celkově je to takové nesystémové řešení. Bylo to napsané v době, kdy ještě podpora LXC v Turrisu nebyla.

Příklady použití:

  • částečná izolace od hlavního systému a lepší migrovatelnost - klidně udělám factory reset Turrisu, aktualizuji jak chci, ale ten serverový kontejner je stále ve stejném stavu a po instalaci Turris OS stačí pouze pár příkazů pro opětovné integrování kontejneru do systému; tohle vidím jako velikou výhodu a už jsem změnil služby tak, že pod Turris OS jsou jen ty síťové věci a služby jsou v tom LXC Debianu
  • obecně tam jsou plné verze balíčků i základních knihoven a může být jednodušší používat balík v LXC Debianu, než se snažit kompilovat balík do OpenWRT
  • webový server s PHP 7, což se může hodit, pokud chcete provozovat moderní aplikace, nebo chcete využít výkonový boost ve verzi 7
  • snadno rozběháte Home Assistant v poslední verzi
  • snadno rozběháte cokoliv, co se kompiluje, protože přímo na Turrisu máte GCC … i když to chvíli potrvá
1 Like

gcc to je paráda jdu to zkusit, zatím jsem cross kompiloval pomocí toolchainu na x86 debianu což bylo cokoliv jen ne pohodlné.

Zajímavé, zkusil jsem přeložit v lxc debianu oscam, v lxc to funguje ale v turrisu ne, file píše menší rozdíl. Netušíte někdo čím to je a proč mi binárka přeložená v lxc nejde pustit v turrisu ?
openwrt /bin # file oscam
oscam: ELF 32-bit MSB executable, PowerPC or cisco 4500, version 1 (SYSV), dynamically linked, interpreter /lib/ld-uClibc.so.0, stripped
openwrt ~ # file oscam
oscam: ELF 32-bit MSB executable, PowerPC or cisco 4500, version 1 (SYSV), dynamically linked, interpreter /lib/ld.so.1, for GNU/Linux 3.2.0, BuildID[sha1]=721e0c96e2301f97089de0df46f307128a2afb06, stripped

A jak to mám upravit aby mi šla spustit v turrisu, patrně to hapruje na té ld.so.1 knihovně, která v turrisu není.

Kdo by narazil na stejnou chybu, co já, tak pravděpodobně máte flashku ve formátu FAT

root@turris:~# mkdir -p /mnt/flash/lxc-containers/debian
root@turris:~# cd /mnt/flash/lxc-containers/debian
root@turris:/mnt/flash/lxc-containers/debian# debootstrap --include debian-ports
-archive-keyring --arch=powerpcspe sid rootfs https://deb.debian.org/debian-port
s/
mknod: /mnt/flash/lxc-containers/debian/rootfs/test-dev-null: Operation not permitted
E: Cannot install into target ‘/mnt/flash/lxc-containers/debian/rootfs’ mounted with noexec or nodev

Stačí flashku zformátovat např. na ext4 a problém vyřešíte. :slight_smile:

Napadlo mě ještě, jestli by nebylo vhodné doplnit příklady použití do readme na githubu případně to celé zduplikovat i do komunitní wiki. :slight_smile:

Snad se mi povede zkompilovat tvheadend na LXC Debianu (nejsem si jistý, zda momentální verze tvheadendu je zkompilovaná s parametrem --enable-dvben50221 )

1 Like

Ext4 je samozřejmost. Zkoušel jsem Ext2 ale to nebyl vůbec dobrý nápad protože při následných pokusech a reinstalacích mi to turris připojil jako ext4 a tím ten filesystém úplně rozbil.

Nevíte, přátelé, kde se dá stáhnout rootfs pro LXC kontejner s čistým OpenWrt?

Můj problém, protože se přepsal wget (z busyboxu, který nepodporoval https) vyřešen díky aktualizaci 3.5.6

Včera si na InstallFestu nebyl někdo jistý, jestli je na Turrisu 1.x podpora LXC. Stavte se dnes prohodit pár slov, jaké jsou vaše use-casy, případně problémy s Debianem na starém Turrisu :slight_smile:

Já v pohodě provozuji dva LXC kontejnery … jeden s Debianem a jeden z TurrisOS. Ještě bych rád provozoval čistý OpenWRT, ale bohužel jsem dosud nikde nesehnal rootfs tohoto systému, jak již jsem psal (či spíše žádal o radu) o pár postů výše.

Ale bohužel mám tento víkend plný a konference InstallFest jsem se proto nemohl fyzicky zúčastnit. Ale přednášky týkající se Turrisu jsem si již stihl poslechnout alespoň ze záznamu.

Já na Debianu provozuju zkompilovaný tvheadend a nemohu si stěžovat. :slight_smile:

@Nones pokud budeš mít čas, prosím mrkni na pull request
Když jsem to zkoušel, tak to fungovalo, ale budu rád za “pokusné králíky” a ještě víc za zpětnou vazbu.
S tím čístým OpenWRT bych počkal, protože LEDE má kernel 4.4 a @miska podle gitlabu si s tím zkoušel hrát. Vypadá to, že se zase budou slučovač. Uvidíme, jak to dopadne.

Ještě se zeptám, když už tady rozebíráme kontejnery, tak trošku odbočím od tématu.
Jak moc využíváte Turrise?
Já, když jsem stahoval rychlostí 200 Mbits od UPC a k tomu mam tvheadend na routeru, kde mam 2 DVB-C tunery, tak lcollect (z majordoma) mi pěkně vytěžoval router.
Když potom ještě přesouval soubory v siti, tak si vzal 30 MB/s (takže jsem přesouval jen 60MB/s místo 90MB/s), ale ucollect zase o samotě není tak nenažraný (bere si jen 15MB/s), ale když jsou oba spuštěný, tak dokážou využít CPU na max. Přenos pak stojí za prd.