Wstęp
W tym artykule omówimy, jak korzystać z Git do pobierania źródeł FreeBSD oraz jak przebiega aktualizacja systemu ze źródeł. Omówimy także przyczyny, dla których warto korzystać ze źródeł oraz jak dostosować jądro GENERIC do własnych potrzeb.
Wcześniej do aktualizacji źródeł systemu FreeBSD używano SVN, ale od grudnia 2020 roku projekt przeszedł na Git, co oznacza nowy sposób pobierania i zarządzania źródłami.
Korzystanie ze źródeł systemu jest szczególnie przydatne, gdy:
- potrzebujesz dostosować jądro systemowe do własnych potrzeb,
- chcesz zainstalować najnowsze poprawki bezpieczeństwa,
- planujesz eksperymentować z nowymi funkcjami systemu,
- zamierzasz przyczynić się do rozwoju projektu FreeBSD.
Pobieranie źródeł FreeBSD za pomocą Git
Aby pobrać źródła FreeBSD, na początek zainstaluj narzędzie Git:
pkg install git
Następnie użyj polecenia git clone
do pobrania źródeł. Przykładowo, aby pobrać źródła dla FreeBSD 13.1-RELEASE, wykonaj:
git clone --depth 1 -b releng/13.1 https://git.FreeBSD.org/src.git /usr/src
Oto wyjaśnienie używanych opcji:
--depth 1
: ogranicza historię do jednego commitu, pozwalając na szybsze pobieranie i oszczędzenie miejsca na dysku,-b releng/13.1
: wybiera gałąźreleng/13.1
, która odpowiada źródłom dla FreeBSD 13.1-RELEASE.
Aktualizacja źródeł FreeBSD za pomocą Git
Jeśli chcesz zaktualizować istniejący katalog '/usr/src’ z plikami z podanego repozytorium Gita, możesz użyć następujących kroków:
- Przejdź do katalogu '/usr/src’:
cd /usr/src
- Dodaj nowe zdalne repozytorium (jeśli nie zostało wcześniej dodane):
git remote add freebsd-releng https://git.FreeBSD.org/src.git
Jeśli zostało wcześniej dodane, upewnij się, że URL jest poprawne:git remote set-url freebsd-releng https://git.FreeBSD.org/src.git
- Pobierz informacje o gałęziach i tagach z nowego zdalnego repozytorium:
git fetch freebsd-releng
- Przełącz się na gałąź 'releng/13.2′ (w przypadku zmiany wersji systemu):
git checkout -B releng/13.2 freebsd-releng/releng/13.2
- W ten sposób zaktualizujesz pliki w katalogu '/usr/src’ z gałęzi 'releng/13.2′ z podanego repozytorium HTTPS. Jeśli chcesz zaktualizować repozytorium lokalne regularnie, wystarczy uruchomić polecenie
git pull
w katalogu '/usr/src’ po wykonaniu powyższych kroków:git pull
W przypadku gdy podczas przełączania gałęzi masz zmienione pliki w lokalnym repozytorium otrzymasz błąd typu:error: Your local changes to the following files would be overwritten by checkout: sys/amd64/conf/GENERIC
Please commit your changes or stash them before you switch branches.
Aborting
W tym przypadku oznacza, że zmieniona została zawartość pliku sys/amd64/conf/GENERIC
. Git informuje, że plik które nie zostały zatwierdzone (zacommitowane) ani ukryte (stashowane). Git nie pozwoli na przełączenie się na inną gałąź, dopóki nie rozwiążesz tego konfliktu. Można poradzić sobie z problemem na klika sposobów:
- Zatwierdzenie (commit) zmian: Jeśli chcesz zachować swoje zmiany, zatwierdź je:
git add sys/amd64/conf/GENERIC
git commit -m "Zachowaj zmiany w pliku GENERIC" - Ukrycie (stash) zmian: Jeśli nie chcesz teraz zatwierdzać swoich zmian, ale chcesz je zachować, możesz je ukryć:
git stash save "Zachowaj zmiany w pliku GENERIC"
- Odrzucenie zmian: Jeśli nie chcesz zachować swoich zmian, możesz je odrzucić:
git checkout -- sys/amd64/conf/GENERIC
Konfiguracja jądra
Przed aktualizacją systemu ze źródeł warto dostosować jądro do własnych potrzeb. FreeBSD pozwala na dodawanie, usuwanie lub modyfikowanie opcji jądra w pliku konfiguracyjnym. Poniżej przedstawiamy, jak dodać wsparcie dla IPFIREWALL.
Otwórz plik konfiguracyjny jądra GENERIC:
vi /usr/src/sys/amd64/conf/GENERIC
Zamień vi
na dowolny inny edytor tekstowy, jeśli wolisz.
Dodaj następujące opcje, aby włączyć IPFIREWALL, jego funkcje i wsparcie dla DUMMYNET:
options IPFIREWALL
options IPFIREWALL_VERBOSE
options IPFIREWALL_DEFAULT_TO_ACCEPT
options IPDIVERT
options DUMMYNET
Zapisz i zamknij plik.
Oto wyjaśnienie przedstawionych opcji:
options IPFIREWALL
: Włącza obsługę IPFIREWALL, czyli firewalla wbudowanego w FreeBSD,options IPFIREWALL_VERBOSE
: Włącza szczegółowe logowanie akcji IPFIREWALL, co jest przydatne do monitorowania i diagnozowania problemów związanych z zaporą,options IPFIREWALL_DEFAULT_TO_ACCEPT
: Ustawia domyślną politykę IPFIREWALL na akceptowanie pakietów, jeśli nie pasują do żadnej zdefiniowanej reguły. Alternatywnie, można użyćoptions IPFIREWALL_DEFAULT_TO_DENY
, aby odrzucać pakiety, które nie pasują do żadnej zdefiniowanej reguły,options IPDIVERT
: Włącza wsparcie dla przekierowywania pakietów za pomocą reguł IPFIREWALL z użyciem mechanizmu divert,options DUMMYNET
: Włącza wsparcie dla DUMMYNET, narzędzia do modelowania i symulacji ruchu sieciowego, które może być używane w połączeniu z IPFIREWALL do kontroli przepustowości, opóźnień i strat pakietów.
Te opcje pozwalają na dostosowanie jądra do potrzeb związanych z zabezpieczeniem sieci, zarządzaniem przepływem danych i kontrolą dostępu. Po dokonaniu zmian w konfiguracji jądra, postępuj zgodnie poniższymi instrukcjami dotyczącymi kompilacji i instalacji jądra.
Warto pamiętać, że dostępne są także inne opcje konfiguracyjne jądra. Można je znaleźć w dokumentacji FreeBSD lub w komentarzach zawartych w plikach konfiguracyjnych jądra dostępnych w katalogu /usr/src/sys/conf
. Konfigurując jądro, zawsze należy uwzględnić potrzeby swojego systemu i środowiska pracy, aby uzyskać najlepszą wydajność i bezpieczeństwo.
Aktualizacja systemu ze źródeł
Następnie przejdź do katalogu /usr/src
:
cd /usr/src
Kompilacja świata (buildworld)
Teraz możemy rozpocząć kompilację świata (buildworld), która obejmuje wszystkie programy użytkowe i biblioteki systemowe. W powłoce sh wykonaj polecenie:
make -j`sysctl -n hw.ncpu` buildworld
Gdy używasz bash’a użyj polecenia:
make -j$(sysctl -n hw.ncpu) buildworld
Opcja -j$`sysctl -n hw.ncpu`
pozwala na równoczesne przetwarzanie tylu zadań, ile wynosi liczba rdzeni procesora, co przyspiesza kompilację.
Kompilacja jądra
Przed kompilacją jądra GENERIC, warto je dostosować do własnych potrzeb. Można to zrobić, edytując plik /usr/src/sys/amd64/conf/GENERIC
(dla architektury amd64) w dowolnym edytorze tekstu.
Następnie rozpocznij kompilację jądra (dla sh):
make -j`sysctl -n hw.ncpu` buildkernel
lub dla bash’a:
make -j$(sysctl -n hw.ncpu) buildkernel
Instalacja świata i jądra
Po pomyślnym zakończeniu kompilacji, przystąp do instalacji nowego świata i jądra:
make installworld
make installkernel
Aktualizacja konfiguracji systemowej
Należyprzejść przez proces aktualizacji konfiguracji systemowej, aby zapewnić, że wszystkie pliki konfiguracyjne są zaktualizowane do najnowszej wersji:
mergemaster -Ui
Opcja -Ui
automatyzuje proces, zachowując jednocześnie istniejące konfiguracje.
Aktualizacja – ostatnie kroki
Po zaktualizowaniu plików konfiguracyjnych, przeprowadź aktualizację bazy danych dla programu freebsd-update
:
freebsd-update IDS
Następnie zrestartuj system, aby uruchomić nowe jądro i zaktualizowane komponenty:
shutdown -r now
Podsumowanie
W tym artykule omówiliśmy, jak używać Git do pobierania źródeł FreeBSD i aktualizacji systemu ze źródeł. Przedstawiliśmy również sposób dostosowania jądra systemowego do własnych potrzeb poprzez dodanie wsparcia dla IPFIREWALL i innych opcji. Przestrzegając tych kroków, będziesz mógł utrzymać swój system FreeBSD na bieżąco i zoptymalizować go pod kątem wydajności oraz bezpieczeństwa.