sysops.it

Outsourcing IT pozwoli ci prowadzić biznes taniej

info@sysops.it
+48 666 930 111

Nowości z bloga

TCP Fast Open

Opis modyfikacji stosu TCP, która może przyspieszyć prędkość ładowania popularnych stron od 4% do 41%.

Wyszukiwarki i Sphinx

Słowo wstępu o Sphinksie - silniku wspierającym wyszukiwanie pełnotekstowe.

Kwestia IPv6 NAT w Linuksie

IPv6 NAT w Linuksie - walka ideologii z rzeczywistością.

Katalog /etc w FSVS + SVN

/etc

W linuksie, katalog /etc służy do przechowywania plików konfiguracyjnych dla zainstalowanego oprogramowania. Konfigurując oraz utrzymując linuksowy serwer, ww. katalog będzie wielokrotnie modyfikowany zarówno ręcznie jak i przez automaty instalacyjne czy też podczas aktualizacji.

Na początek powody, dla których warto rozważyć przechowywanie katalogu /etc w formie systemu kontroli wersji:

  • przypadkowo „namieszałeś” w plikach konfiguracyjnych by później mozolnie poszukiwać właściwej konfiguracji,
  • lub, jeżeli jesteś bardziej przezorny, tworzysz masę plików typu config.bak, config.orig ze stara konfiguracją by później już nigdy ich nie usuwać,
  • pamiętasz, że kiedyś korzystałeś z pewnej, konkretnej konfiguracji jednak teraz za nic nie możesz przywrócić jej do działania.

Jeżeli któraś z opisanych sytuacji coś ci przypomina to oznacza, ze możesz wiele skorzystać na kontrolowaniu swoich plików konfiguracyjnych.

Mówiąc o systemie kontroli wersji, pierwsza myśl jaka przychodzi do głowy to prawdopodobnie SVN (ewentualnie GIT). Znam administratorów używających SVN w celach wersjonowania plików na filesystemie jednak nie jest to najlepszy pomysł. SVN sam w sobie, nie potrafi przechowywać metadanych o obiektach na filesystemie, tj. np. uprawnień. Jeżeli chciałbym przechowywać katalog /etc w SVN to znajduje się tam np. plik shadow, który, ze względu na specyficzne przeznaczenie posiada konkretne uprawnienia:

user@testhost:~# ls -l /etc/shadow -rw-r----- 1 root shadow 790 Dec 20 15:40 /etc/shadow

Dodając ww. plik do SVN, informacja o uprawnieniach, właścicielu, itp. zostałaby utracona. Dlatego stosując SVNa do przechowywania katalogu /etc należy zapewnić dodatkowy mechanizm „pilnujący” metadanych. W tym wypadku, prawdopodobnie dobrym wyborem byłby mechanizm korzystający z narzędzi getfacl oraz setfacl, które sprawnie operują na tego typu danych.

Mając na uwadze powyższe proponuje wykorzystanie narzędzia FSVS . Cechy FSVS:

  • Wykorzystuje jako back-end SVNa, co jest sporą jego zaletą – jeżeli posiadasz już działający serwer SVN nie wymaga dodatkowej pracy.
  • Jest jakby alternatywnym klientem SVN (składnia SVNa) rozszerzonym o funkcje, które sprawiają, że idealnie nadaje się przechowania plików z filesystemu wraz z ich metadanymi.
  • Jego przewagą nad „gołym” SVNem jest to, że nie zaśmieca filesystemu własnymi katalogami .svn, zamiast tego posiada swoją bazę danych w jednym miejscu (standardowo w /var/spool/fsvs/).
  • Posiada latwy i skuteczny mechanizm excludowania poszczególnych plików, katalogów, które nie niosą porządanych informacji lub po prostu się czesto zmieniają (np. /etc/mtab, /etc/.pwd.lock, /etc/ld.so.cache).

Istnieje, również możliwość wykorzystania połączenia SSH jako warstwy autoryzacyjnej oraz transportowej między klientem (FSVS) a serwerem (SVN) – URL repozytorium wygląda wtedy podobnie do: svn+ssh://hostname/path/to/repo. Posiadajać serwer SVN we własnej sieci lokalnej lub korzystając z VPN nie ma to większego znaczenia jednak w ramach „niezaufanej” sieci Internet warto szyfrować tego typu dane.

Poniżej demonstracja możliwości FSVS jako systemu kontroli wersji dla katalogu /etc.

user@testhost:/etc# fsvs status

Stan filesystemu zsynchronizowany z repozytorium SVN.

user@testhost:/etc# touch test user@testhost:/etc# chmod 600 test user@testhost:/etc# ls -l test -rw------- 1 root root 0 Dec 21 00:17 test

Dodany plik test z uprawnieniami 600.

user@testhost:/etc# fsvs status N... 0 test .mC. dir .

FSVS odnotował zmianę.

user@testhost:/etc# fsvs commit -m update Committing to svn+ssh://svn/home/svn/testhost/etc N... 0 test committed revision 33 on 2011-12-20T23:19:25.362308Z as user

Zmiana została zsynchronizowana z repozytorium.

user@testhost:/etc# rm test user@testhost:/etc# ls -l test ls: cannot access test: No such file or directory user@testhost:/etc# fsvs status D... 0 test .mC. dir .

Plik test usunięty, zmiana odnotowana przez FSVS.

user@testhost:/etc# fsvs revert test Reverting to revision 33: D... 0 test ..C. dir /etc user@testhost:/etc# ls -l test -rw------- 1 root root 0 Dec 21 00:17 test

FSVS przywraca plik, co ważne z odpowiednimi uprawnieniami, tj. 600.

user@testhost:/etc# chmod 666 test

Zmiana uprawnień na 666 dla pliku test, treść pozostaje bez zmian.

user@testhost:/etc# fsvs -v diff diff -u test.r33 test.local -Mode: 0600 +Mode: 0666 MTime: Fri Dec 21 00:17:53 2011 Owner: 0 (root) Group: 0 (root)

FSVS odnotował zmianę samych uprawnień na pliku.

Istnieje oczywiście możliwość wykorzystania FSVS do backupu i wersjonowania innych części lub całego filesystemu. Ciekawym aspektem takiego rozwiązania jest możliwość zbudowania procedury disaster recovery w oparciu o FSVS. To jest jednak temat na odrębny wpis.

SVN
Dodano dn. 29 października 2012 roku przez rob.