Jako że moja ostatnia praca wiązała się trochę z koncepcjami, oraz że parę dni temu po aktualizacji kilku pakietów (m.in. nvidia), xorg zaczął się zawieszać gdy włączają się kompozycje, stwierdziłem, że przydałoby się coś co pozwoliłoby w łatwy sposób przywracać poprzednią konfiguracje systemu. Co wpadło mi do głowy opiszę poniżej.
Przywracanie poprzedniej konfiguracji systemu/ Wycofywacz złych zmian (nazwy robocze) - opis pomysłu:
- Pomysł dotyczy przywracania poprzedniej konfiguracji systemu po nieudanej aktualizacji lub aktualizacji, w wyniku której nastąpiły późniejsze komplikacje (np. zawieszanie xorga, błąd drukarki itp.).
- Podczas instalacji/aktualizacji/kasowania pakietów systemowych (np. deb, rpm) konieczne byłoby logowanie do pliku jakie zmiany zostały wprowadzone (np. aktualizacja pakietu lib_coś_tam z 6.8 do 7.0). I teraz wymyśliłem 2 opcje:
- W przypadku Debiana "odkryłem" ostatnio repozytorium snapshots przechowujące archiwalne pakiety, dlatego możliwe byłoby tylko rejestrowanie jakie pakiety zostały zmienione, a w przypadku potrzeby ich przywrócenia, ściąganie ich z serwera snapashot.debian.org (konieczność zbudowania metody wyszukującej pakiety na serwerze).
Zalety: - oszczędność miejsca na dysku (nie trzeba robić kopii zapasowej wszystkich plików).
Wady: - konieczność ręcznego przywracania systemu (w przypadku gdy w wyniku aktualizacji przestanie działać internet). - Tworzenie na dysku kopii zapasowej zastępowanych plików (lista plików należących do danej paczki jest (chyba w każdym Linuksie zawierającym paczki) przechowywana w systemie). Przed aktualizacją następowałby odczyt (i logowanie) listy plików paczki, która zostanie zastąpiona.
- Pliki zapasowe byłyby automatycznie kasowane po określonym czasie. Przewiduje trzymanie tylko ostatniej wersji aktualizowanego pakietu (aktualizacja libABC 6.8 do 7.1 następnie do 7.2, skasuje kopię zapasową 6.8).
Zalety: - brak konieczności posiadania połączenia z internetem, - rozwiązanie dostępne nie tylko dla dystrybucji mających repozytorium ,,snapshot'' (np. Debian).
Wady: - zużycie miejsca na dysku.
- W przypadku Debiana "odkryłem" ostatnio repozytorium snapshots przechowujące archiwalne pakiety, dlatego możliwe byłoby tylko rejestrowanie jakie pakiety zostały zmienione, a w przypadku potrzeby ich przywrócenia, ściąganie ich z serwera snapashot.debian.org (konieczność zbudowania metody wyszukującej pakiety na serwerze).
- Niezależnie od sposobu rejestrowania zmian zakładam kopię zapasową na dysku (zamienionych/usuniętych) plików konifguracyjnych.
- Konieczność napisania programu umożliwiającego wycofania zmian sprzed konkretnej daty aktualizacji systemu.
- Zakładam przywrócenie wszystkich pakietów, które zostały w danym dniu zaktualizowane (chociaż w przyszłości można by pomyśleć nad wyborem konkretnej paczki jeżeli zależności na to pozwolą - do zastanowienia)
- Tto może być punkt najtrudniejszy, rejestracja wprowadzonych zmian musiałaby się odbywać zaraz przed wywołaniem właściwego instalatora paczek (np. apt-get), bo pewnie ciężko będzie wynegocjować na programistach "instalatorów paczek", żeby sami rejestrowali wprowadzane zmiany (ale tak byłoby chyba najlepiej).
Wydaje mi się jednak, że są techniczne możliwości stworzenie takiej nakładki. - Jako że instalatory (np. dpkg) potrafi zwracać wynik swojej operacji myślę, że możliwe wyłapanie, czy aktualizacja została przeprowadzona pomyślnie, czy nie (automatyczne przywracanie raczej niekoniecznie w takim przypadku ale można by zarejestrować taki fakt - jeżeli użytkownik sam nie naprawi programu np. to wtedy sugerować mu wycofanie zmian).
Kod: Zaznacz cały
apt-get -f install
Pomysł zrodził się z powodu błędu w najnowszym oprogramowaniu nvidii (albo złej interakcji z nowym xorgiem - do końca nie wiem), W moim przypadku rozwiązaniem jest albo czekanie na nową wersje (poprawkę) albo przywracanie poprzedniej wersji (co czasem ze względu na zależności między paczkami może nie być proste, a w ekstremalny sytuacjach nawet niemożliwe).
Wydaje mi się, poziom złożoności (interakcji) oraz możliwa liczba konfiguracji uniemożliwiają stworzenie w 100% bezbłędnego oprogramowania (czy bez możliwych "nieprawidłowych interakcji" z innymi paczkami/oprogramowaniem), dlatego dobrze byłoby posiadać możliwość łatwego wycofania zmian wprowadzonych przez nowe paczki (oprogramowanie). Stad przedstawiony powyżej pomysł.
Czekam na wasze komentarze, opinie, propozycje oraz co sądzicie o takim rozwiązaniu. Jeżeli byłby przychylne można byłoby taki pomysł zaprezentować szerszej publiczności (pytanie gdzie, bo nigdy nie robiłem czegoś takiego), a to być może pozwoliłoby na jego realizacje.
Co do moich możliwości prezentuje tylko i wyłącznie pomysł/koncepcje, nie znam się na programowaniu.