Historia systemu EdgeOS

System operacyjny routerów serii EdgeMax firmy Ubiquiti Networks, nosi nazwę EdgeOS. Bazuje on na Debian GNU Linux, przy czym posiada własny command line do konfigurowania wszystkich usług, dzięki czemu nie musimy sięgać do plików konfiguracyjnych każdej usługi systemu Linux z osobna oraz interfejsu graficznego (GUI). Swoimi korzeniami EdgeOS sięga projektu VyattaOS w wersji 6.3 community edition (system dostępny był w niekomercyjnej edycji community oraz jako produkt komercyjny). Świadomie i celowo unikam określenia EdgeOS jako fork’a systemu VyattaOS z dwóch powodów. W świecie free and open source software przyjmuje się, że fork to projekt rozwijany równolegle i okresowo aktualizowany względem swojego pierwotnego źródła. I tak forkiem Ubuntu jest Kubuntu, przy czym oba projekty są rozwijane równolegle, sięgają do tych samych repozytoriów, a kolejne wersje wydawane są w podobnym cyklu. Taka zależność nie zachodzi pomiędzy EdgeOS a VyattaOS, ponieważ ten drugi system nie jest już rozwijany (powstał co prawda projekt VyOS, ale to już temat na inną okazję), w konsekwencji zakupu firmy Vyatta przez Brocade w 2012 roku. Ostatnia wersja VyattaOS 6.6 wydana została w maju 2013 roku. Zatem właściwie od początku, bo EdgeOS w wersji 1.0.2 wydany został 7 listopada 2012 roku, rozwijany jest jako osobny projekt.

Tryb operacyjny i tryb konfiguracji

Po zalogowaniu do systemu (poprzez port konsoli, z użyciem protokołu SSH lub z poziomu okna terminala w GUI), lądujemy w trybie nazwanym przez producenta “operacyjnym” (z ang. operational mode), który rozpoznajemy po znaku zgłoszenia (z ang. prompt) “[email protected]:~$”, zakończonym symbolem “$”. Tak przy okazji, prompt składa się z nazwy użytkownika oraz nazwy hosta, w tym wypadku jest to użytkownik “admin”, na hoście o nazwie “CERBER”. Listę wszystkich dostępnych w tym trybie komend uzyskamy przez wprowadzenie w terminalu znaku zapytania “?”,  co poskutkuje wyświetleniem samych nazw komend, a jeśli ponownie wprowadzimy znak zapytania, efektem będzie lista w postaci komend, z ich krótkim opisem. Zatem zobaczmy, jak to działa w praktyce (w terminalu nie widać znaków zapytania wprowadzonych z klawiatury).

Więcej o poszczególnych komendach opowiem w kolejnych częściach cyklu, natomiast na tym etapie poznawania CLI najważniejsza z nich to “configure”, która pozwala przejść do trybu konfiguracji (z ang. configuration mode). O zmianie trybu informuje zmieniony znak zgłoszenia na “#”. Poniższy obrazek prezentuje, jak taka operacja wygląda w praktyce i od razu skorzystajmy z podpowiedzi, którą już wiecie jak uzyskać.

Z trybu konfiguracji do trybu operacyjnego wracamy komendą “exit”.

Hello world!

Nie, programować nie będziemy, ale spróbujmy coś wreszcie skonfigurować. Kluczową komendą, która pozwala ustawić wartość parametru lub stworzyć nowy element to “set”.  Jeśli zatem chcielibyśmy zmienić nazwę hosta, powiedzmy na “testhub”, to w trybie konfiguracji trzeba użyć komendy “set system host-name testhub”. Tak, wiem, poza set pojawiło się jeszcze kilka opcji, których nie znacie, ale wszystko z czasem się wyjaśni. Co bardzo ważne, samo wydanie tego polecenia nie spowoduje absolutnie żadnych zmian. Osoby przyzwyczajone do pracy z CLI Cisco, mogą w tym momencie być nieco zaskoczone, zaś te zaznajomione, np. z CLI Junipera, poczują się prawie jak w domu. Otóż zmiany (może być ich wiele) musimy zatwierdzić komendą “commit”. Rozwiązanie to ma swoje zalety – wybiegnę tu trochę do przodu, ale chcę, żebyście zrozumieli istotę tego rozwiązania. Powiedzmy, że potrzebujecie zmienić adres IP interfejsu WAN pracując zdalnie. Kroki, jakie w tym celu trzeba uczynić, to usunąć stary adres i dodać nowy. Czyli w tym wypadku, byłyby to kolejno komendy “delete interfaces ethernet eth0 address stary_adres_IP” i zaraz po niej “set interfaces ethernet eth0 address nowy_adres_IP”. Już macie pomysł, czemu bez “commit” mielibyśmy problem? Gdyby pierwsza komenda została wykonana od razu po wprowadzeniu, interfejs straciłby adres IP i odcięlibyśmy się od routera, zanim zdążylibyśmy wprowadzić nowy adres IP. Dzięki temu, że zmiany są wykonywane dopiero po poleceniu “commit”, możemy wprowadzić wszystkie zaplanowane zmiany i dopiero na koniec niejako nakazać ich wykonanie. W praktyce wyglądałoby to tak:

Uważni czytelnicy, zapewne zauważyli jeszcze jedną komendę, mianowicie “save”. Popularnie stosowane urządzenia domowe, czasem pogardliwie nazywane “mydelniczkami” (zapewne z racji kształtu i plastikowej obudowy), mają tę cechę, moim zdaniem brzydką, że od razu wszystkie wprowadzone zmiany zapisują. Czemu brzydką? Bo jak coś popsujemy w konfiguracji, to często zostaje tylko reset do ustawień fabrycznych. Dlatego te bardziej zaawansowane urządzenia, posiadają zazwyczaj niezależnie dwie konfiguracje – bieżącą, czyli tę, którą modyfikujemy i startową, czyli tą, z którą urządzenie się uruchomiło. Aby zmiany dokonane w konfiguracji bieżącej utrwalić w konfiguracji startowej, należy je zapisać i temu jak się zapewne już domyśliliście, służy komenda “save”. Jej odpowiednikiem, np. w CLI Cisco jest “copy running-config startup-config”.

Tylko bez paniki ;(

Jak się ratować w sytuacji, gdy zdarzy się wam błąd? Jedną z opcji poznaliście – przed zapisaniem konfiguracji zawsze można ratować się restartem urządzenia. Jest to jednak rozwiązanie nieeleganckie i nieefektywne (tracicie w ten sposób owoc często długich minut spędzonych na konfigurowaniu urządzenia), a w przypadku routerów z EdgeOS, nie wolno tego robić poprzez zwyczajne wyłączenie zasilania, gdyż bez poprawnego zamknięcia systemu operacyjnego można uszkodzić system plików.

Rozważmy zatem kilka przypadkowych problemów. W najprostszym, niech to będzie literówka w poleceniu, a zatem trzymając się wcześniejszego przykładu, zamiast nazwy hosta testhub wprowadziliśmy polecenie “set system host-name tetshub”. Rozwiązanie jest bardzo proste i zamiast zatwierdzać zmiany, po prostu je odrzucamy komendą “discard”. Tu od razu uwaga – samo wyjście z trybu konfiguracji poleceniem “exit” nie wystarczy – system zasygnalizuje błąd Cannot exit: configuration modified”, mówiący o tym, że dokonano zmiany konfiguracji. Można natomiast połączyć te polecenia w jedno i wydać komendę “exit discard”.

Jeśli zdarzy się, że błąd spostrzeżemy już po jego zatwierdzeniu, pomocna jest komenda “delete”, która pojawiła się przy okazji dygresji o zmianie adresacji, a służy do usuwania wartości parametru lub elementu. Zróbmy zatem celowo błąd, a potem go usuńmy.

Co się wydarzyło? Zachowałem się jak początkujący administrator i popełniwszy błąd w adresie IP w komendzie “set interfaces ethernet eth1 address 10.10.10.1/24″, postanowiłem go poprawić, wydając polecenie po raz kolejny, ale tym razem z dobrym adresem “set interfaces ethernet eth1 address 20.10.10.1/24″. I tu tkwi pułapka na początkujących adeptów administracji sieciami – otóż w przeciwieństwie do wspomnianych “mydelniczek”, nie jest niczym niezwykłym dla takiego routera posiadanie dwóch adresów na jednym interfejsie, co pokazuje powyżej komenda “show interfaces ethernet eth1″. Rozwiązaniem tego problemu jest właśnie komenda  “delete” i w tym przypadku miałaby ona postać “delete interfaces ethernet eth1 address 10.10.10.1/24″. Przy okazji widać, że router przypomina o konieczności zapisania zmian, jeśli tego nie uczyniliśmy, a skorzystamy z komendy “exit”. 

Uzupełnianie komend

Podczas pracy z CLI, drugim użytecznym klawiszem na klawiaturze, poza już poznanym znakiem zapytania jest Tabulator, na części klawiatur opisany jako Tab. Działa on podobnie jak u innych producentów i pozwala szybko uzupełniać komendy. Na przykład, jeśli napiszemy tylko litery “sh” i wciśniemy klawisz Tab, system podpowie nam, że tak rozpoczynają się dwie komendy “show”  oraz “shutdown”, natomiast ten sam Tab naciśnięty po literach “shu”, już bez dalszych podpowiedzi uzupełni się do “shutdown”.

Podsumowanie

Powinniście już umieć poruszać się po trybach operacyjnym i konfiguracji, do którego przechodzimy komendą “configure”, a wychodzimy z niego poleceniem “exit”. Zmiany wartości parametru lub dodanie elementu realizuje “set”, natomiast skutek odwrotny uzyskamy, sięgając po “delete”. Zmiany należy zatwierdzić poleceniem “commit” lub odrzucić komendą “discard”. Aby utrwalić zmiany w konfiguracji bieżącej należy je zapisać komendą “save” w konfiguracji startowej. W każdej chwili możecie też skorzystać z pomocnych klawiszy “?” oraz “Tab”.

Komentarze