Mechanizm aktualizacji konfiguracji systemu oparty o git.
Idea
Zmiana konfiguracji polega na:
- Otwarciu gałęzi (branch) git'a w katalogu zawierającym. Kopie zmienianych plików konfiguracyjnych, instrukcje i skrypty wykorzystywane przy zmianach.
- Wykonaniu zmian na kopii.
- Przygotowaniu skryptu akceptacji zmiany lub jej wycofania
- Wykonanie i testowanie zmian.
- Ewentualne korekty / cofnięcia.
- Ostateczna akceptacja zmian i połączenie otwartej gałęzi z głównym repozytorium
Zakłada się istnienie w systemie grupy gadmin do której należą użytkownicy dokonujący zmian.
Katalog zawierający zmiany
Katalog standardowo nazywa się /admin.
UWAGA!
Katalog dostępny dla użytkowników z uprawnieniami - w żadnym razie nie powinien zawierać haseł!!!
Działania w katalogu wykonujemy z uprawnieniami zwykłego użytkownika, a jedynie skrypty zmiany wykonujemy jako root (sudo).
Katalog /admin zawiera:
1. Pliki:
a) version.txt - plik tekstowy z numerem wersji
Wersja ma strukturę: 999.888.777.666
Gdzie
999 - duża modernizacja (baseline, wersja bazowa)
888 - rozbudowa (wydanie, issue)
777 - poprawka (revision)
666 - zmiana poprawki (serial)
1.4.2 oznacza pierwszą wersję bazową, 4 wydanie i drugą rewizję.
b) history.txt - historia zaakceptowanych zmian
Plik o strukturze csv : wersja, kiedy początek, kiedy koniec, kto, opis
c) branches.txt - otwarte zmiany.
Struktura jak wyżej (bez kiedy koniec) - ale dotyczy tylko aktywnych gałęzi git
2. Katalogi
a) katalogi wersji - nazywany zgodnie z powyższą konwencją z punktu 1a (plik version.txt) - tyle, że bez ostatniego członu.
Czyli w katalogu 1.0.2 mieści się poprawka 1.0.2 wraz z wszystkimi jej zmianami.
b) bin - skrypty wykorzystywane przy konfiguracji
skrypty mogą być mieć przyrostek w postaci numeru wersji w której zostały użyte lub zmienione. Wtedy w katalogu bin istnieje link (ln -s) do najnowszej wersji - z nazwą bez przyrostka z numerem wersji..
Natomiast w katalogu wersji - link (także z nazwą bez przyrostka) - do użytej wersji skryptu.
c) cfg - kopie wszystkich zmodyfikowanych plików konfiguracyjnych
Struktura podkatalogu odpowiada strukturze drzewa katalogów systemu.
Na przykład cfg/etc/ssh zawiera kopie tych plików z katalogu /etc/ssh które zostały zmienione przez administratora.
Procedura zmiany
1. Każda zmiana rozpoczyna się od ustalenia numeru wersji, a następnie w oparciu o ten numer:
- tworzymy gałąź git
- dopisujemy dane o tej gałęzi do pliku branches.txt. (jeśli go nie ma - tworzymy)
- opcjonalnie tworzymy plik <numer wersji>.yaml z opisem wersji
2. Przygotowujemy skrypt kopiujący potrzebne do zmiany pliki konfiguracyjne do katalogu cfg (można korzystać ze wzorców - zależnych o celu zmiany). Opis gałęzi pojawia się w pliku branches.txt
3. Konieczne zmiany dokonujemy w kopiach plików umieszczanych w katalogu cfg.
4. Wykonujemy skrypty testujące a następnie akceptujące zmiany, lub cofające ich wykonanie.