ZimaOS - Docker, KVM/QEMU, NAS - dla nas, zwykłych użytkowników

W połowie 2022r odkryłem CasaOS i dzięki temu projektowi wciągnął mnie temat konteneryzacji i Docker.

ZimaOS to system operacyjny NAS rozwijany przez firmę IceWhale Technology, ewoluujący z wcześniejszego projektu CasaOS. Powstał w 2023 roku jako fork CasaOS, zbudowany od podstaw na fundamencie Buildroot dla lepszej stabilności, skalowalności i kompatybilności z hardware’em x86-64, w tym urządzeniami Zima jak ZimaBoard czy ZimaCube. Pierwsza beta wersja została wydana pod koniec 2023, a repozytorium GitHub wystartowało we wrześniu 2023.
System jest otwarty w części (Docker Compose na immutable bazie), skupiony na prostocie NAS dla domu/SOHO, z RAID (0/1/5/6/JBOD), backupami i appkami kontenerowymi.

Model rozwoju

ZimaOS stosuje model hybrydowy: open-source w części publicznej (repozytorium GitHub z kodem bazowym, immutable design na Buildroot), ale z elementami proprietary w zaawansowanych funkcjach i UI. Community Edition jest darmowa z limitami (np. 10 app, 4 dyski), a Plus Edition to jednorazowa opłata 29 USD lifetime za pełne możliwości (więcej dysków, app, użytkowników).

Zaangażowanie społeczności

Projekt mocno opiera się na społeczności (43 tys. członków Discord, 1 mln pobrań), z co-creation, tłumaczeniami (26 uczestników) i feedbackiem cotygodniowym. Powstał z ewolucji CasaOS (open-source Apache 2.0), ale dla zrównoważonego biznesu wprowadzono kontrolę licencyjną.

ZimaOS to dzieło chińskiej firmy i może dla tego jest tak bardzo pragmatyczny i taki “dla ludu”.

Nie musisz poświęcać się dla zrozumienia jak to wszystko działa jak to jest w przypadku PVE czy TruNas Sclale. W dalszej części postaram się przybliżyć pierwsze kroki w tym systemie i pokazać jak niewiele wymaga od swojego użytkownika.

4 Likes

Na potrzeby tego tematu posłużę się maszyną wirtualną.
Po przygotowaniu nośnika z instalatorem wybieramy dysk dla naszego OS:


Mam 4 dyski do wyboru w swojej maszynie, na systemowy wybieram ten najmniejszy, gdyż z pozostałych będę tworzył macierz dyskową.

Po paru następnych krokach, gdzie instalator upewnia się, że jesteśmy świadomi wyboru i zakończeniu procesu instalacji mamy takie okno informujące nas o konieczności usunięcia nośnika instalacyjnego i ponownym uruchomianiu maszyny.

Mamy nowe okno z kilkoma kluczowymi informacjami:

  1. Widzimy adres IP pod którym znajdziemy webUI naszego systemu.
  2. Informację, że domyślnie SSH mamy wyłączone.
  3. Powinniśmy ustawić nasze supertajne hasło dla użytkownika root

Pod wskazanym w konsoli adresem wita nas powitalne okno z wyborem języka. Jest nasz ojczysty na liście i to z całkiem dobrym tłumaczeniem jak się dalej okaże.


W kolejnym oknie ustawimy użytkownika głównego i hasło.

Krótki przewodnik powitalny:

Możemy rozpocząć odkrywanie możliwości:

C.D.N.

5 Likes

Zaczynam od stworzenia przestrzeni dyskowej (macierzy).


Mając kilka dysków możemy skorzystać z technologi RAID (0/1/5/6/JBOD).

Posiadając 3 dyski wybieram RAID5:

Pozostawię mój dysk systemowy (boot disk) i wybieram trzy pozostałe dostępne.

Zmieniam nazwę i potwierdzam, że świadomie zgadzam się na usunięcie danych na dyskach.

Mamy do dyspozycji eksplorator naszych plików.

W tym osobnym GUI jest dobrze przemyśleć jaką obierzemy strukturę dla naszych danych. Ja na potrzeby aplikacji wykorzystuję folder AppData na jednym ze stworzonych woluminów. Aplikacje to kontenery, więc pod ich dane tworzę osobne foldery.

Mając już zorganizowaną przestrzeń dyskową możemy przejść do instalacji pierwszej aplikacji z App Store. Ale zanim to zrobimy, proponuję zapoznać się z możliwością rozszerzania naszej listy dostępnych obrazów kontenerów o dodatkowe repozytoria w App Store. Pod przyciskiem “więcej” mamy link do strony z adresami dodatkowych repozytoriów


Wklejamy link (1) i klikamy dodaj (2), a nasza lista powiększa się o kolejne pozycje.

2 Likes

Mając już długą listę możliwych do zainstalowania aplikacji, możemy zwyczajnie kliknąć instaluj i dane dla aplikacji trafią do domyślnie ustawionego folderu na dysku systemowym. Zobaczmy co zadzieje się gdy tak zainstaluję Home Assistant (kontener HA CORE) z dodanego repozytorium Home Automation. Aczkolwiek w podstawowym repozytorium BigBearCasaOS też jest.

Po Chwili mam nową ikonę aplikacji, po jej kliknięciu zapewne przeniosę się na stronę logowanie UI HA.


Ale gdzie znajdę pliki mojego HA? W folderze AppData powstał folder homeassistant, to w nim mam wszystkie dane dotyczące tej aplikacji.

A dokładniej mam katalogi, które są zmapowane w ustawieniach kontenera homeassistant:

To w ustawieniach tego i każdego kontenera (aplikacji) mogę mapować katalogi i sprzęt hosta (1), mogę podejrzeć logi z terminala uruchomionego kontenera (2), mogę konfigurację całej aplikacji wyeksportować do pliku docker-copose w YAML.

Co jeśli nie ma mojej aplikacji w AppStore? Nic wielkiego dla ZimaOS, możemy instalować obrazy niestandardowe przez dodanie własnych ustawień z GUI lub importując plik docker-compose.


Mój przykład z rtl_433

2 Likes

Dla ułatwienia gdzie co mamy…
Dodanie usług chmurowych:

Udostępnianie folderu - menu trzy kropki przy folderze:

Włączenie SSH oraz dostęp do terminala webowego:


Monitoring pracy serwera (nie trzeba nic instalować):



Zapomniał bym, wsparcie dla ustawień pod UPS:

Informacje o kondycji dysków pewnie sami odnajdziecie. :wink:

2 Likes

Dla tych co chcieli by uruchomić VM - jest prosto jak i z pozostałymi funkcjonalnościami w Zima OS.

2 Likes

Bardzo mi się podoba to rozwiązanie i gdybym miał zaczynać “od nowa” to pewnie zrobił bym to według twojego tutoriala. Niestety brak czasu i lenistwo skłania mnie do zostania przy swoich dotychczasowych rozwiązaniach :upside_down_face:

@angler interesujący materiał, polubień nie bedę już klepal, dobra robota👍. Nie wiem po co ale jutro to postawie. Jedno pytanie: czy dla każdej maszyny mogę ustawić osobne IP z puli domowej? Taka zaszłość i nie chcę tego zmieniać.

Jeśli pytasz o maszynę wirtualną, to wybierasz na grafice poniżej. Od razu są do wybrania mosty pod sprzętowe karty sieciowe hosta.


Po stronie hosta ZimaO OS możesz już ustawić z palca co potrzebujesz.

EDIT:
Ponieważ ZVM bazuje na KVM/libvirt, możesz użyć virsh w terminalu do edycji ustawień VM, możesz przez komendę virsh edit <vm_name> edytować cały plik XML, ale UWAGA zmiany w XML są „na własne ryzyko”, nie ma tego w dokumentacji i nie wiadomo jak UI ZVM zadziała równolegle ze zmianami w warstwievirsh.

Z uwagi na to, że nie jestem fanem maszyn wirtualnych, nie chcę się aby kogoś wprowadzać tu w błąd. Jestem jednak wielkim fanem kontenerów dokera. Nie było jak dotąd w moim doświadczeniu z Docker sytuacji, że musiałem koniecznie postawić VM, bo nie znalazłem rozwiązania z kontenerami.
Dla przykładu mogę podać aplikację Immich, która w tym momencie przejmuje u mnie funkcjonalność zdjęć w chmurze komercyjnych dostawców, wraz z synchronizacją, wyszukiwaniem osób, lokalizacji itp.
Pod jednym plikiem docker-compose zawiera się kilka serwisów działających wspólnie, w sumie 5 kontenerów, tworzących jedną, kompletną aplikację.

Lista usług/kontenerów dla Immich:

  • immich-postgres: Baza PostgreSQL z pgvector (dla wektorowego wyszukiwania AI).​
  • immich-machine-learning: Moduł ML do rozpoznawania twarzy/obiektów (używa modeli TensorFlow/PyTorch).​
  • immich-server: Główny serwer API i backend (port 2283), zarządza uploadami, bibliotekami mediów.​
  • immich-redis: Cache Redis dla sesji i kolejek zadań.​
  • immich-web (nie jawnie w snippet, ale standardowy w Immich compose dla frontend UI).​

Gorąco poleca zatem Zima OS dla chcących zrozumieć jak działa konteneryzacja.

1 Like

Na uwagę zasługuje również prostota tworzenia kopi zapasowych w Zima OS:


Prawdziwe backup 3-2-1

Czy bezpłatna wersja wprowadza jakieś istotne dla naszych zastosowań ograniczenia?
Te backupy mnie przkonują.
Obecnie mam proxmox i mialem przypadki, że do natywnego systemu musiałem doinstalować jakieś pakiety. W Zimie to chyba lipa?
Np. musiałem utworzyć urządenie systemowe /video z kamery IP.
Nie wiem czy istnieje taka możliwość aby zasoby jednego kontenera udostęplić innemu? …popytam AI

Raczej nie są to ograniczenia dla domowego użytku, a jeśli nawet ktoś potrzebuje więcej to cena wydaję się być rozssądna.


4 Disks w opisie wersji free odnosi się do 4 puli dyskowych, nie pojedynczych dysków.
3 Members - i tak jestem sam z administracją mojego homelab, więc nie robi mi różnicy.
Pozostaje dla mnie niewiadomą dlaczego, przy niektórych funkcjonalnościch pojawia się ikonka z “+”, tu chyba będzie nacisk na rozwój dodatkowych możliwości dla wersji płatnej.

Polecam też tę dyskusję odnośnie bezpieczeństwa całego projektu, zwłaszcza w kontekście usługi zdalnego dostępu, tego gotowca po wyjęciu z pudełka:
https://www.reddit.com/r/homelab/comments/1ijrx0g/zimaos_security_concerns/

1 Like

Nie próbowałem, bo nie miałem jeszcze potrzeby. Ale wszystko się da, to jest Linux, co prawda bliżej mu do HAOS niż Debiana ale zawsze można skompilować potrzebne pakiety ze źródła. Sterowniki apex dla Coral TPU pod Frigate miałem od razu. Brakuje jeszcze podobno pod Hailo-8, ale społeczność projektu jest aktywna, a deweloperzy jej słuchają.
W tym linku masz też instrukcję jak zainstalować Zima OS na PVE.

Nie bardzo rozumiem ten dylemat, kontenery dzielą zasoby razem z hostem (jeśli na to pozwolisz przy konfiguracji kontenera poprzez mapowanie zasobów czy opcje nadania wysokich uprawnień). Sprzęt nie jest emulacją w wirtualizacji maszyny, to ten sam sprzęt hosta. Jeśli tylko sprzęt (sterownik) czy oprogramowanie OS na to pozwala, to zasoby są do dyspozycji dla wielu procesów. Jeśli postawisz np. DB jako kontener i udostępnisz ją dla innych kontenerów np. HA czy Grafana, to te kontenery mogą korzystać z tej bazy wspólnie. Tak samo dzieje się wewnątrz HAOS z kontenerami w postaci AdOnns.

1 Like

Wcale się nie dziwię na tak zadane pytanie :grinning:

Normalnie to na host instaluje v4l2loopback, tworzę /dev/video10 i mogę to udostępnić do innego kontenera.
Z Zima instalacja v4l2loopback może być niemożliwa.
Myślałem o czymś takim:
kontener1(debian… v4l2loopback… /dev/video10) ===> kontener2 /dev/video10

… łoo panie :exploding_head:

Zacznę od tego problemu … jeśli nie będę potrafił to dalsza zmiana będzie bezcelowa.

Ok …zadaję zbyt dużo pytań… a jeszcze nie zacząłem ale temat kusi.

p.s. AI podpowiada:

To sytuacja patowa w klasycznym rozumieniu, ponieważ architektura Linuxa wymaga modułu jądra (v4l2loopback), aby system w ogóle “zrozumiał”, czym jest urządzenie /dev/video. Jeśli host go nie ma i nie możesz go doinstalować, fizycznie nie stworzysz tam pliku urządzenia.

Istnieje jednak jedno zaawansowane obejście, które pozwala oszukać drugi kontener bez dotykania systemu hosta.

W przypadku Hyperion.NG sytuacja jest o tyle łatwiejsza, że jest to oprogramowanie bardzo elastyczne, mimo że domyślnie sugeruje użycie urządzenia /dev/video.

Skoro nie możesz zmodyfikować hosta (brak v4l2loopback), masz dwie drogi, aby “oszukać” Hyperiona lub zmusić go do współpracy bez fizycznego urządzenia /dev/video:

Rozwiązanie 1: Użycie Screen Capture (Protokół UDP) – Zalecane

Hyperion.NG posiada wbudowany moduł “Protocol Buffers”, który pozwala na wysyłanie obrazu bezpośrednio do niego przez sieć (localhost). Nie potrzebujesz wtedy w ogóle urządzenia /dev/video.

  1. Kontener 1 (FFmpeg): Pobiera strumień z kamery IP i wysyła go do Hyperiona protokołem UDP/Proto.Bashffmpeg -rtsp_transport tcp -i rtsp://KAMERA_IP -f rawvideo -pix_fmt rgb24 -s 640x480 - | \ hyperion-remote -a adres_kontenera_hyperion:19445 -p 50 -i "Kamera_IP" -v RGB24
  2. Kontener 2 (Hyperion): W konfiguracji Hyperiona włączasz “Network Network” (domyślnie port 19445).

Proponuję załóż osobny temat z tym zagadnieniem, bo jest to bardzo ciekawe. A zdaje się, że nie ma takiego dotyczącego projektu Hyperion. Z pewnością się w nim wypowiem, bo parę pomysłów by się znalazło. Zastanawia mnie jedynie dlaczego jesteś zmuszony używać akurat v4l2loopback?

P.S.
Jest jeszcze alternatywa:

Wracając do tematu, system informuje nas o możliwości aktualizacji aplikacji:

Temat jest:

Gdy znajdę rozwiązanie to tam dopiszę

Hyperion z kamerą to nietypowe rozwiązanie, z kamerą IP w ogóle.
Takie rozwiązanie na moim poziomie wiedzy znalazłem,
Już nie będę offtopował :hand_with_index_finger_and_thumb_crossed:

@angler a powiedz mi tak szczerze: wiem że korzystałeś z HAOS bare metal i jaka teraz instalacja bardziej Ci odpowiada? Nigdy nie myślałem o przejściu na dockery i też nigdy się tym nie bawiłem więc zastanawiam się poważnie nad przejściem na ZimaOS. Z drugiej strony czy jest sens rezygnować z rozwiązania które nigdy mnie nie zawiodło przez tyle lat :thinking:

I nadal korzystam, mam dwie maszyny. Na początku miałem (nadal mam) bramkę AI-Speaker Dev3 i małą przygodę z xpenelogy jako domowy NAS. Następnie poszukiwałem dość długo rozwiązania dla typowego serwera pod homelab. Był przez chwilę TruNas Scale, ale poległem na zarządzaniu użytkownikami, uprawnieniami i administrowaniu zasobami. Były też testy OMV, Cockpit i wspomniane wcześniej Casa OS, który to podobał się bardzo (na tamte czasy), ale brakowało tworzenia macierzy RAID.
Teraz będzie ZimaOS pod NAS, który tu opisuję.

Lecz HAOS “produkcyjnie” był i jest na osobnym mini PC, obecnie Funyet z Intel N95.

Zawsze chciałem mieć dwie maszyny, nie jestem zwolennikiem VM na PVE. Moim zdaniem takie rozwiązanie, przy obecnych możliwościach tworzenia kopi zapasowych w HAOS, daje największą elastyczność z zachowaniem bezpieczeństwa mojej instancji HA. Przy jednoczesnym wykorzystaniu nawet przeciętnych zasobów dzięki kontenerom. Do tego mogę korzystać z dobrodziejstw, wygody AddOns. A jeśli czegoś nie mogę w HAOS to jest Docker, który pozwala na prawie wszystko, bo mnogość aplikacji kontenerowych jest ogromna. Główne funkcje jakie realizuje ten NAS to:

  • Archiwum zdjęć/filmów rodzinnych - Immich
  • nagrania z Frigate NVR
  • synchronizacja dokumentów i kopie zapasowe w tym z HAOS
  • w planie dokończenie wdrożenia Paperless-ngx z OCR i AI-GTP (Skaner i naklejki z kodami ASN kupione już dawno).

W sumie można to wszystko robić też za pomocą AddOns w HAOS, ale on jest u mnie nie od wszystkiego, ale tylko od Smart Home.
W Zima OS nie ma (na ten moment) migawek maszyn wirtualnych, co jest dla wybierających PVE chyba kluczowe. Ale mając ZimaOS i w tym VM z HA, czy też sam kontener z HA Core, mogę testować przed aktualizacją różne rozwiązania, zanim świadomie przeniosę je na maszynę z HA.
Innymi słowy, nie rezygnuj z HAOS (bare metal), ale zachęcam do poznania Docker, a tu Zima OS może być świetnym uzupełnieniem jako NAS i laboratorium do nauki.

1 Like