Yosild – moja (Twoja) dystrybucja Linuxa

Yosild to pojedynczy skrypt shellowy, który buduje pełną, minimalną dystrybucję Linuxa w oparciu o BusyBox. Kompiluje on ostatnie stabilne wersje kernela i BusyBox, dzięki czemu skryptem tym można przygotować minimalistycznego Linuxa na urządzenia dysponujące niewielką ilością zasobów sprzętowych. Yosild Linux potrzebuje tylko 70 MB RAM i 40 MB przestrzeni dyskowej. Skrypt yosild.sh do uruchomienia wymaga minimalnej wersji Debiana lub Ubuntu w architekturze kompatybilnej z urządzeniem docelowym.

Skrypt współpracuje z VirtualBoxem, Hyper-V lub zestawem KVM/QEMU (wszystkie typy dysków oprócz VirtIO) – można utworzyć dodatkowy wirtualny dysk twardy i zainstalować na nim Yosild Linux, a następnie podłączyć ten wirtualny dysk do nowej maszyny wirtualnej – tak jak w moim filmie dostępnym na YouTube:

Yosild tworzy prawdopodobnie najprostszą, pełną wersję Linuxa, dzięki której łatwo jest zrozumieć budowę systemu „od podstaw”. Korzystanie ze skryptu jest dużo łatwiejsze, niż w przypadku innych rozwiązań: Aboriginal, mkroot, Buildroot lub Linux From Scratch – wystarczy podać napęd docelowy (wirtualny lub pendrive) wewnątrz skryptu yosild.sh i po prostu uruchomić ten skrypt. Można też zmienić nazwę systemu i stworzyć w ten sposób swoją dystrybucję.

Yosild:

  • pobiera i instaluje wszystkie wymagane do kompilacji biblioteki i pakiety,
  • pobiera i kompiluje kernel z domyślnymi opcjami,
  • pobiera i instaluje BusyBox,
  • tworzy szereg minimalistycznych skryptów ułatwiających zarządzanie mini-dystrybucją.

To wszystko integruje na wskazanym przez użytkownika dysku (lub pendrive). Wystarczy uruchomić skrypt i po pierwszych komunikatach potwierdzających pozostawić komputer na kilkanaście minut. Uwaga: cała powierzchnia dysku lub pendrive zostanie wykorzystana – wszystkie znajdujące się na wskazanym dysku dane zostaną usunięte.

W skrypcie można łatwo zmienić opcje kompilacji kernela lub BusyBox.

Mini-dystrybucja domyślnie obsługuje ifupdown, DHCP, rotację logów, mini-man pages, własną minimalistyczną wersję rc.d, uruchomione demony crona, httpd, ftpd, syslogd oraz przygotowany skrypt startowy dla telnetd. Po instalacji na pendrive dystrybucję można uruchamiać na dowolnym komputerze zgodnym z architekturą, na której kompilowany był kernel, a wszystkie zmiany są zachowywane na pendrive/dysku wykorzystując pełną jego powierzchnię.

O Yosild możesz przeczytać jeszcze w serwisie:

Zmiany w skrypcie można śledzić na stronie projektu w

Ten wpis znalazł się na stronie głównej serwisu wykop.pl otrzymując 360 wykopów. Zobacz też inne wpisy z tego bloga, które trafiły na stronę główną.

7 myśli na temat “Yosild – moja (Twoja) dystrybucja Linuxa

  1. Cześć,

    Trafiłem tutaj z wykop.pl. Nie jestem tam zarejestrowany, jedynie obserwuję główną i czasami czytam komentarze. Szkoda słów. Poza tym chciałem napisać, że to kawał dobrej roboty. Z chęcią przyjrzę się linijkom kodu.

    Pozdrawiam
    cheslavic

    1. Dzięki. Komentarze zawsze będą różne :) Wykop nie jest już tym technicznym medium, jakim był jeszcze 10 lat temu i nie spodziewałem się, że tak niszowy temat wejdzie na stronę główną. Również pozdrawiam.

  2. Ech, przypomniały mi się czasy, gdy dorwałem jakiś tuner satelitarny (nie pamiętam, czy to był Ferguson czy D-Box) ale zainstalowałem własną kompilacje linuxa i udało mi się przerobić leciwy tuner na konsole do gier C-64. Udało sie nawet mieć obraz zarówno na wyświetlaczu tunera jak i na ekranie.

  3. Czesc,

    Fajny skrypt, jeden pliczek Twojego shella robi cala dystrybucje :)

    Jednak nie pokrywasz nim dowolnej platformy sprzetowej, jak we wstepie napisales. Nie ma tu krosskompilatora, a jedynym mozliwym bootloaderem jest grub. Ograniczasz sie wiec do procesorow x86.

    Polecam sprobowac dystrybucji linuksa openwrt przeznaczona na routery. Wynikowy obraz systemu miesci sie jedynie w 8mb, bo taka pojemnosc flasha wystepuja dosc czesto na routerach. Ma bardzo rozbudowane menu konfiguracyjne, co umozliwia dokladny wybor, ktore pakiety oprogramowania maja wejsc do wynikowego obrazu dystrybucji. Wspiera pare dostepnych kroskompilatorow.
    https://openwrt.org/docs/guide-developer/quickstart-build-images

    Twoj skrypt ma na pewno duza wartosc edukacyjna. Jesli moge zasugerowac od siebie jakies poprawki, to zwroce uwage na:
    1) Jesli jakas komenda zawiedzie, skrypt wykonuje sie dalej i moze dystrybucja sie nie udac. Byc moze wypisze sie jakis blad na ekran, ale moze byc go ciezko zauwazyc i znalezc w calym wyjsciu. Dlatego mozna uzyc na poczatku skryptu linii ‚set -e’. Wtedy skrypt sie konczy przy pierwszym poleceniu zakonczonym bledem i mozna ten blad przeczytac, jesli taki zostal wypisany. Blad nie zatonie w calym wyjsciu z wszystkich innych kolejnych polecen, bo kolejne polecenia nie zostana wykonane. Z drugiej strony nawet jesli jakis blad sie pojawi, to moze warto go mimo wszystko zignorowac, bo moze i tak dystrybucja sie uda :)

    2) Wydaje mi sie, ze lepiej byloby nadawac wartosci domyslne tylko wtedy, gdy nie zostaly podane z zewnatrz, tzn.
    [ -z „$kernel” ] && kernel=”https://cdn.kernel.org/pub/linux/kernel/v4.x/linux-4.20.tar.xz”
    Wtedy skrypt mozna uruchomic przekazujac inna wersje kernela (lub busyboxa) wywolujac skrypt z linii polecen w sposob:
    kernel=https://cdn.kernel.org/pub/linux/kernel/v4.x/linux-4.19.9.tar.gz ./yosild.sh

    3) uzywanie printf-a. To znajduje zastosowanie np przy konwersji liczb na postac heksadecymalna z decymalnej uzywajac formatow %d lub %x. Samo echo by Ci wystarczylo. Jesli nie chcesz, aby drukowalo nowa linie, wtedy jest opcja -n, a jesli ma zinterpretowac znaki w srodku komunikatu jak \n, wtedy jest opcja -e. Taki drobiazg tylko, nie ma on znaczenia.

    Powodzenia i pozdrawiam :)
    Krystian

    1. > 1) mozna uzyc na poczatku skryptu linii set -e

      Dlaczego tego nie robić (szczególnie w połączeniu z kompilacją) pod poniższym linkiem:
      http://mywiki.wooledge.org/BashFAQ/105

      > Wtedy skrypt sie konczy przy pierwszym poleceniu zakonczonym bledem

      Tutaj jest o tyle łatwiej, że środowisko pracy jest wymuszone i skrypt jest przygotowany nawet na przypadek użytkownika, który nie wybierze w tasksel żadnego dodatkowego oprogramowania podczas instalacji minimalnego Debiana, a do pobrania Yosild nie zainstaluje gita. Moim założeniem była możliwie największa prostota przekazu budowy systemu. Pomimo kilkudziesięciu gwiazdek na githubie w issues nie widać na razie żadnych problemów z działaniem skryptu ;)

      > Wydaje mi sie, ze lepiej byloby nadawac wartosci domyslne tylko wtedy, gdy nie zostaly podane z zewnatrz

      To jest indywidualna preferencja :) Ja lubię mieć wszystko w jednym, spójnym, uporządkowanym konfigu – w tym przypadku na początku skryptu.

      > uzywanie printf-a. To znajduje zastosowanie np przy konwersji liczb na postac heksadecymalna z decymalnej (…) Samo echo by Ci wystarczylo. Jesli nie chcesz, aby drukowalo nowa linie, wtedy jest opcja -n, a jesli ma zinterpretowac znaki w srodku komunikatu jak \n, wtedy jest opcja -e

      To jest shell nie bash :) tu echo nie zawiera obsługi -e , a tak jak wspominałem wyżej nie chcę się bawić w /bin/echo :) ze względów na prostotę … i jeszcze:
      „The POSIX note says -n must be avoided (…) The printf utility can be used portably to emulate any of the traditional behaviors of the echo utility”

      > Ograniczasz sie wiec do procesorow x86.

      Racja – skrypt co prawda działa na Raspbianie odpalonym w QEMU z obsługą ARM, ale czeka go jeszcze kilka zmian przed końcową publikacją dla ARM, bo dopiero dorwałem płytkę Raspberry Pi do testów. Jest to oczywiście dość zabawne, bo kompilacja trwa kilkanaście godzin :) ale jeżeli ktoś traktuje Raspberry Pi jako tani w utrzymaniu serwer (podłączony 24 godziny na dobę), to najmniej absorbujące dla użytkownika będzie odpalenie Yosild właśnie ;)

      Dzięki za konstruktywne uwagi :) nie mam czasu rozwijać tego skryptu i możliwe, że pozostanie w obecnej postaci. Pisałem go dla zabawy (i to chyba widać) zainteresowanie lekko mnie zaskoczyło. Dużo bardziej interesująca wydawała mi się możliwość uruchomienia prostego Linuxa na iOS, gdy wiadomo, że Apple nie pozwala na wirtualizację w urządzeniach mobilnych. Niestety przeróbką JSLinuxa na iOS, która jest dostępna na tym blogu, zainteresowało się niewiele osób :(

      Również powodzenia życzę i pozdrawiam.

    1. Tak jak zaznaczyłem we wcześniejszym komentarzu – skrypt był pisany dla fanu i liczba gwiazdek na GitHubie jest dla mnie zaskoczeniem :) Niestety nie mam czasu na utworzenie dodatkowej dokumentacji, to co najważniejsze jest zawarte w README, komentarzach i echach skryptu.

Dodaj komentarz

This site uses Akismet to reduce spam. Learn how your comment data is processed.