2021-12-13 / Bartłomiej Kurek
Od czego zacząć? #2 (system operacyjny)

Jeżeli czytasz ten artykuł (i w ogóle tego bloga), to zapewne już wiesz, że mowa będzie o jakimś systemie Unix lub Linux. Rozwiązań jest kilka.

  • Jeśli masz komputer Apple i na nim macOS/OSX, już masz Unix. OSX to Unix, a narzędzia (te konsolowe) pochodzą z FreeBSD (też Unix).
  • Jeśli nie masz komputera Apple i systemu uniksowego, to sugeruję zacząć używać Linux.
  • Można też próbować innych systemów (np. FreeBSD, OpenBSD), ale tego nie polecam na (długi) początek.

Linux

Nie musisz od razu wszystkiego umieć i rozumieć. Do rozpoczęcia przygody z Linux nie potrzebujesz zmieniać dysków, partycji, ani wykonywać innych - być może "magicznych" i niebezpiecznych operacji. Systemy operacyjne możemy uruchamiać w emulatorach (takie programy, który imitują cały komputer). Najłatwiej można zrobić to w następujący sposób:

  • ściągamy program VirtualBox
  • wchodzimy na osboxes.org i wybieramy sobie jakiś Linux
  • ściągamy plik "obrazu" (zip), rozpakowujemy
  • otwieramy rozpakowany obraz w programie VirtualBox

Niczego w ten sposób nie popsujesz (jest to emulator, taki wirtualny komputer), "obraz" to plik, w którym jest zapisany format całego dysku, a emulator uruchamia z niego system (zainstalowany właśnie w tym pliku). Nie musisz przechodzić przez proces instalacji Linux. Ściągasz, uruchamiasz, działa.

Pliki obrazów na stronie osboxes.org zawierają czyste, podstawowe instalacje systemów operacyjnych. Przy każdym obrazie znajdziesz właściwą parę login i hasło. Większość obrazów (jeśli nie wszystkie) ma takiego samego użytkownika i domyślne hasło.

Jaka dystrybucja?

Dystrybucji Linux są tysiące. Różnią się m.in. wyglądem, menedżerem pakietów, polityką projektu, trybem wydawniczym, społecznością. Ten "wygląd" obejmuje system okienek. W każdej dystrybucji można zainstalować każdy system okienek spośród dostępnych dla Linux. Dystrybucje to tak naprawdę systemy, na które składa się:

  • jądro systemu Linux (to jest system operacyjny, który zajmuje się obsługą sprzętu /urządzeń/, pozwala uruchamiać inne programy, obsługuje użytkowników, itd.)
  • programy konsolowe (pochodzą z projektu GNU, to te wszystkie "zabawne" ls, grep, find, ..., oraz kompilatory, biblioteki, czy dokumentacje)
  • system okienek (desktop, ikonki, okienkowe panele sterowania), programy powiązane ze środowiskiem danego systemu okienek
  • menedżer pakietów - w Linux nie chodzimy po internecie i nie ściągamy instalatorów; dystrybucje mają swoje repozytoria z tysiącami gotowych, spójnych pakietów, które instalujemy menedżerem pakietów, a menedżer dba o zależności (np. wymagane biblioteki).

Menedżery pakietów to programy konsolowe, które obsługują wszystko, co związane z pakietami oprogramowania (wyszukiwanie, zarządzanie /instalacja, deinstalacja, update, upgrade, upgrade całego systemu/).
Środowiska graficzne typu desktop mają swoje nakładki (a'la "centrum oprogramowania"), które pozwalają nam też wyszukać dany program, kliknąć checkbox oraz guzik "instaluj". Wtedy uruchamia się ten program konsolowy (menedżer pakietów) i robi to, co trzeba. Menedżer pakietów jest tym co wyróżnia dystrybucję/rodzinę dystrybucji. Jądro jest zawsze to samo, programy GNU te same, system okienek można sobie doinstalować inny niż ten w domyślnej instalacji, więc menedżer pakietów jest tym co faktycznie wyróżnia dystrybucję.

Reszta różnic to tapetki i tematy graficzne.
Praktycznie każdy Linux jest w każdej wersji językowej. Programy mają pliki tłumaczeń. Instalujemy pliki danego języka, wybieramy ten język, gotowe (we wszystkich programach). Podobnie jest z dokumentacją.

Systemy okienek są różne. Najpopularniejsze to Gnome, KDE, XFCE. One mają wszystko (cały desktop). Najczęściej jest Gnome, ale są różne wersje, np. Ubuntu, Kubuntu (Ubuntu z KDE), Xubuntu (Ubuntu z XFCE), Lubuntu (Ubuntu z LXDE). Zmiana okienek to zazwyczaj instalacja jednego "meta-pakietu", menedżer wie o co chodzi i dociąga cały desktop.
Wszystko da się też zrobić bez okienek, albo po prostu z okienka terminala, uruchomionego w desktopie. To o czym jest ten blog i nauka programowania, to głównie to okienko terminala, w którym skryty jest cały świat wiedzy.

Istnieje kilka głównych linii dystrybucji, a najpopularniejsze linie to:

  • Slackware (installpkg, slackpkg)
  • Debian (dpkg, apt)
  • RedHat (rpm, yum, dnf)
  • Gentoo (portage)

Slackware

To ta - poniekąd - najstarsza dystrybucja (choć ma swojego poprzednika). Wymaga znacznie więcej wiedzy niż obecnie najpopularniejsze spośród dystrybucji Linux. Jego menedżer pakietów nie dba o zależności pomiędzy pakietami, więc trzeba wiedzieć co się chce zainstalować i jakie biblioteki są potrzebne. Jeśli czegoś nie ma w repozytorium, to trzeba umieć sobie to ściągnąć (+ ewentualne zależności) i samodzielnie zbudować. Z tej linii wywodzą się inne "klony", takie jak Void Linux, czy Arch Linux, ale te wypracowały z biegiem lat swoje menedżery pakietów obsługujące m.in. zależności. Tej linii nie polecam, jeśli nie jesteś geekiem. Sam od Slackware zaczynałem, był na desktopie, laptopie, serwerach. Można (trzeba) się wiele nauczyć, ale krzywa nauki jest stroma. Zostało mi po nim wiele wspomnień, wiedzy, zamiłowanie do prostoty i minimalizm. Na pewno nie na początek (jeśli w ogóle), a w dzisiejszym świecie do codziennego użytku zdecydowanie wygodniej jest korzystać z niżej omówionych.

Debian

Debian jest tak stary jak i Slackware. Od dawna, nieprzerwanie jedna z najpopularniejszych dystrybucji (tej używam). Z niego wywodzą się najmodniejsze i najbardziej przyjazne klony, takie jak Ubuntu, Mint oraz tysiące innych. Na początek polecam Linux Mint. Ubuntu jest ok, choć bywały wersje z domyślnie zainstalowanymi nieintuicyjnymi okienkami, których nikt nie chciał i nikt nie rozumiał. Poza tym jest ok i przyjazne. Obecnie chyba domyślnie jest Gnome. Okienka można zawsze doinstalować inne, albo od razu wybrać Ubuntu z innymi okienkami. Dlatego polecam Linux Mint. W nim dylemat okienek sprowadza się do wyboru pomiędzy Mate a Cinnamon (o ile pamiętam). Oba domyślnie ładne, kolorowe, przyjazne. Mint domyślnie stawia na wsparcie użytkowników w kwestii instalacji zamkniętych sterowników sprzętu. Wszystkie Ubuntu, Mint są zgodne z Debianem. Mają ten sam menedżer pakietów, a dystrybucje te mają swoje własne repozytoria pakietów, odpowiednie dla swoich linii wersje programów (nowsze, starsze), adaptacji, tematów kolorystycznych, ikon... Powodem tego najpewniej są polityka Debiana oraz kwestie licencyjne. Debian w standardzie nie dostarcza kodu "niewolnego", a wiele sterowników pochodzących od producentów sprzętu (karty graficzne, karty wifi, itp) jest rozprowadzana jako zamknięte oprogramowanie, bądź wymaga zamkniętego firmware/mikrokodu. Ubuntu i Linux Mint m.in z tego powodu są przyjaźniejsze dla początkujących. Mają swoją politykę, która nastawiona jest na takie wsparcie swoich użytkowników. Debian ma 3 główne gałęzie:

  • stable - mało zmian, wsparcie aktualizacji security, programy są w nieco starszych wersjach, brak eksperymentów
  • testing - nowe wersje programów, nie psuje się, trzeba być świadomym (security, itp)
  • unstable - najnowsze, eksperymentalne wersje programów, brak jakiejkolwiek gwarancji, że się nie popsuje

Z biegiem czasu sprawdzone w unstable rozwiązania trafiają do testing, a w cyklu wydawniczym testing staje się kolejnym stable.

Ja używam właśnie Debian z gałęzi "testing", a na serwerach gałęzi "stable".
Ubuntu chce mieć nowe wersje programów, więc jest bardziej odpowiednikiem gałęzi Debian testing, aczkolwiek firma Canonical, która tworzy Ubuntu, ma własną politykę wsparcia i aktualizacji oraz cykl wydawniczy.
Linux Mint z kolei wziął się z poprawek Ubuntu. Domyślne ustawienia Ubuntu nie zaspokajały preferencji części użytkowników, niektóre zestawy oprogramowania przestawały być wspierane, zatem stworzono nową dystrybucję, dodano parę modyfikacji, konfiguratorów i przystosowano system tak, aby sprawnie działał też na słabszych komputerach (okienka bez wielkich wodotrysków). Linux Mint stał się bardzo popularną dystrybucją. Tę właśnie polecam na początek. "Debian jak debian", ale ładny i przyjazny.

Red Hat

Red Hat to firma, która rozwija swoje dystrybucje Linux oraz rozwiązania klasy Enterprise (dla firm). Zajmuje się płatnym supportem systemów, dlatego często jest używany na serwerach firmowych i w działach firm, które takiego supportu wymagają (np. banki, korporacje, itd). Red Hat wprowadza dużo nowych/własnych rozwiązań. Dla niektórych z nas aż za dużo i zbyt "innowacyjnych". Główna dystrybucja Red Hat jest płatna (np. "Red Hat Enterprise Linux Server"). To korporacja notowana na giełdzie, zatrudnia wiele osób, ofertę kieruje do firm. Red Hat ma też dystrybucje darmowe: CentOS oraz Fedorę. Ta pierwsza używana jest często w roli darmowego odpowiednika Red Hat Enterprise, a Fedora jest gałęzią kierowaną do standardowych użytkowników, wprowadza wiele nowości. Z jedną i drugą linią miałem styczność, ale dawno. Obecnie żadnego z nich nie polecam ani nie odradzam, choć się waham. Jeśli ta linia, to Fedora.

Gentoo

Gentoo to dystrybucja, w której programy kompiluje się z kodu źródłowego. Menedżer "pakietów" dociąga zależności, ale wszystko się samodzielnie kompiluje. Popularna wśród geeków, choć spora część użytkowników być może nie do końca wiec co robi i po co kompiluje te programy. Z Gentoo wywodzą się też inne dystrybucje: Funtoo, czy Sabayon (klon gentoo z menedżerem pakietów, który wspiera kompilację ze źródeł, ale ma też repozytoria z gotowymi pakietami), ChromeOS (to pochodzi od Google i jest na netbooki, wszystko jest w przeglądarce i korzysta się z usług Google; nadaje się głównie do przeglądania internetu, tworzenia dokumentów, itp.).
Gentoo nie polecam na początek, używałem kiedyś, do tego trzeba mieć powód, czas, sprzęt, zapał. Ale przede wszystkim powód. Można się wiele nauczyć o Linux, Gentoo również stroni od części kontrowersyjnych "innowacji" w ekosystemie Linux, o czym nie można nie wspomnieć. Jeśli nie potrafisz uzasadnić "dlaczego Gentoo", wybierz coś innego.

BSD Unix

Jeśli na poważniej odkrywać Unix, to polecałbym FreeBSD albo OpenBSD. BSD to nie Linux. Na standardowy laptop i desktop niekoniecznie się nadają. Na serwer polecam oba, szczególnie FreeBSD. OpenBSD z kolei to ten projekt, któremu zawdzięczamy mnóstwo rozwiązań security i kryptografii. Projekt stawia na audyt bezpieczeństwa kodu, otwartość. Rodzina systemów BSD jest nieco szersza, a sam system wywodzi się z zawiłej historii oryginalnego kodu Unix (dlatego to nie klony, czy unix-like, a UNIX). W BSD wszystko jest raczej proste i oczywiste (taka filozofia). Polecam, ale - mimo wszystko - nie na początek. W *BSD mamy system portów wspierających kompilację programów z kodu źródłowego, ale też menedżer gotowych pakietów. FreeBSD posiada też - od wielu już lat - wbudowaną konteneryzację (FreeBSD Jails).

Emulator VirtualBox

Drogą eliminacji wybrałeś więc Linux Mint lub Ubuntu. Gratulacje.
Słusznie - najwięcej materiałów i tutoriali w sieci dotyczących Linux odnosi się do tych dwóch dystrybucji, a porady na forach pasują do obu. Rozsądna decyzja. Pora zatem wypróbować w bezpieczny sposób któryś z nich (albo oba dla porównania).

Poniżej kilka zrzutów ekranu demonstrujących skąd to wziąć oraz jak najłatwiej, najszybciej i bezproblemowo uruchomić. Dla przypomnienia:

  • ściągamy program VirtualBox
  • wchodzimy na osboxes.org i wybieramy sobie jakiś Linux
  • ściągamy plik "obrazu" (zip), rozpakowujemy
  • otwieramy rozpakowany obraz (plik *.vdi) w programie VirtualBox

virtualbox.org: download

img-border

osboxes.org

Lista dostępnych obrazów systemów (Debian, Mint i Ubuntu są trochę niżej na tej liście):
img-border

Zakładki (obraz virtualbox, obraz vmware, info zawierające domyślne: login/hasło):
img-border

VirtualBox (program)

VirtualBox wygląda tak:
img-border

Pobrany z osboxes.org obraz po prostu dodajemy (guzik "+ Add") w programie, wskazujemy ten pobrany plik. Program zapyta po drodze (kreator) ile pamięci chcesz przydzielić tej maszynie wirtualnej (jesteśmy już w świecie maszyn wirtualnych). Przydziel ile Ci wygodnie. Po zatrzymaniu maszyny można to zawsze zmienić i wystartować maszynę ponownie.
Po dodaniu obrazu - na liście po lewej pojawi się ten system. Zaznaczamy go i klikamy guzik Start, uruchamia się system, logujemy się i możemy już działać. Jeśli się uruchomi w niskiej rozdzielczości, to istnieje coś takiego jak GuestAdditions. Doinstalowuje się to i wtedy można ustawiać wyższą rozdzielczość, full screen, albo nawet seamless windows, czyli po prostu w takim trybie jakby te programy były uruchomione bezpośrednio w naszym systemie "hosta". Host to ten system, na którym masz VirtualBox, a Guest to ten, który działa w maszynie wirtualnej.

WSL/WSL2

W Microsoft Windows istnieje Windows Subsystem For Linux, oraz Windows Subsystem For Linux 2. Ściąga się to z Microsoft Store (takie "Ubuntu.exe") i w Windowsie instaluje się Ubuntu. Polega to na tym, że Microsoft ma swój odpowiednik VirtualBoxa (nazywa się Microsoft Hypervisor albo Hyper-V) i jest po prostu maszyną wirtualną, w której "WSL" instaluje Ubuntu, a Windows dodaje do tego pewne integracje. Windows implementuje to, gdyż Microsoft ma swoją chmurę (Azure), czyli serwery (też komputery), na których ludzie uruchamiają Linux (bo praktycznie nie używa się Windows na serwerach).
A skoro ludzie mają na serwerach Linux, to i na desktopie i do pracy chcą mieć Linux. Windows jest na tyle odległy od Unix, że rozwiązaniem problemu jest właśnie instalacja maszyny wirtualnej i w niej dystrybucji Linux, czyli dokładnie to, co powyżej omawialiśmy.
Nie posiadam więcej wiedzy o rozwiązaniu WSL/WSL2. Plusem VirtualBox względem WSL jest to, że możemy wypróbować cały szereg gotowych obrazów z osboxes.org i wybrać dystrybucję, która nam się najbardziej podoba.

Historycznie Microsoft zaczął od Unix (od sprzedaży Xenix1), po kilku dekadach dotarł ponownie do sprzedaży Unix. Można rzec: świat programowania jest bezsprzecznie związany z Unix.

Bez emulatora?

Oczywiście zachęcam do zwykłej instalacji Linux i używania go na co dzień. Można też zainstalować go obok innych systemów na jednym komputerze (na osobnej partycji) - jako Dual czy też Multi Boot. Instalatory są graficzne i intuicyjne, ale przed instalacją sugeruję upewnić się, że rozumiemy nazewnictwo/numerację dysków i partycji w systemie Linux. Dla pewności taką partycję można przygotować przed instalacją i ustawić jej typ na "surowy" albo jakiś nieobsługiwany przez Windows (czyli w zasadzie każdy oprócz - zdaje się - FAT, NTFS, WinFS).
Windows nie rusza takich partycji, bo nie ma implementacji systemów plików z innych systemów operacyjnych, a w instalatorze Linux łatwo wtedy dostrzeżemy którą to partycję sobie wydzieliliśmy na Linux. W samym Linux (np. w emulatorze VirtualBox) można przećwiczyć bezpiecznie na pliku zarządzanie dyskami.
Do obsługi dysków/partycji w Linux mamy wygodne programy:

  • gparted (graficzny)
  • cfdisk (konsolowy, wygodny, dla tabeli partycji MBR)
  • cgdisk (konsolowy, dla tabeli partycji GPT /systemy UEFI/, prawie identyczny jak cfdisk)
  • fdisk (konsolowy, najbardziej standardowy, wszędzie podobny)