PowerFlex: Kompilacja na żądanie sterownika PowerFlex SDC
Summary: W tym artykule opartym na wiedzy opisano sposób włączania kompilacji na żądanie sterownika PowerFlex SDC w systemach Linux.
Instructions
Ta funkcja ma na celu uwzględnienie zmian interfejsu ABI (Application Binary Interface) w jądrze Linuksa, które mogą spowodować niepowodzenie załadowania sterownika SDC, wstępnie skompilowanego dla innego jądra.
Historycznie rzecz biorąc, pakiet instalacyjny SDC dla systemu Linux (RPM/DEB) zawierał kilka modułów jądra SDC dla różnych jąder tej dystrybucji Linuksa. W przypadku użytkowników instalujących usługi w dystrybucjach takich jak Ubuntu, które często aktualizują jądro, istnieje możliwość skonfigurowania usługi SDC w celu połączenia się ze zdalnym repozytorium sterowników SDC firmy Dell i próby pobrania z niego SDC.
Dzięki nowej funkcji użytkownicy mogą skompilować idealne dopasowanie sterownika SDC do uruchomionego jądra bez polegania na dostępności pasującego SDC w repozytorium sterownika.
Docelowej: Użytkownicy, którzy często aktualizują swoje jądra ze względów bezpieczeństwa i którzy uruchamiają wyspecjalizowane niestandardowe jądra, mogą skorzystać z tej funkcji.
Warunki wstępne
Aby procedura kompilacji zakończyła się pomyślnie, następujące pakiety muszą być zainstalowane na hoście usługi SDC:
- Najnowsza wersja kompilatora GNU C (GCC), GCC
- GNU make(1).
- Pakiet deweloperski jądra dla uruchomionego jądra. Ten pakiet jest powszechnie dostępny pod następującymi nazwami:
- kernel-devel dla dystrybucji korzystających z menedżera pakietów RPM. (Red Hat, SUSE itd.)
- linux-headers dla dystrybucji korzystających z menedżera pakietów Debiana (Debian, Ubuntu, itd.)
Automatyczna kompilacja
na żądanieAby umożliwić automatyczną kompilację na żądanie sterownika SDC, host powinien spełniać wszystkie wymagania wstępne wymienione powyżej w sekcji Wymagania wstępne . Podczas wywoływania sterownika SDC usługa SDC próbuje skompilować sterownik SDC, jeśli są spełnione wszystkie następujące warunki:
-
Klient SDC zgodny z uruchomionym jądrem jest niedostępny w pamięci podręcznej sterowników.
Szczegółowe informacje na temat pamięci podręcznej sterowników można znaleźć w sekcji Pamięć podręczna sterowników poniżej. -
Plik o nazwie
/etc/emc/scaleio/scini_sync/.build_sciniIstnieje.
Zawartość pliku jest ignorowana. Użytkownicy powinni jednak pozostawić go pustym na potrzeby ewentualnych przyszłych ulepszeń.
Plik można utworzyć, uruchamiająctouch(1).
Ręczna kompilacja
SDC, host kompilacji powinien spełniać wszystkie wymagania wstępne wymienione w sekcji Wymagania wstępne powyżej.
Aby ręcznie skompilować sterownik SDC, wykonaj następujące kroki:
-
Skopiuj pakiet kompilacji z katalogu w pamięci podręcznej sterowników do katalogu tymczasowego. Lokalizacja pakietu zależy od wersji systemu PowerFlex i dystrybucji systemu Linux.
Na przykład pakiet PowerFlex 3.6.3 SDC dla dystrybucji opartych na systemie Red Hat Enterprise Linux 9 to:/bin/emc/scaleio/scini_sync/driver_cache/RHEL9/3.6.3000.128/Dell-PowerFlex-scini_builder-3.6.3000.128.x86_64.tgz
Szczegółowe informacje na temat pamięci podręcznej sterowników można znaleźć w sekcji Pamięć podręczna sterowników poniżej. -
Przejdź do katalogu tymczasowego i wyodrębnij pakiet kompilacji.
Przykład:tar xzf Dell-PowerFlex-scini_builder-3.6.3000.128.x86_64.tgz
-
Uruchom
build_driver.shskrypt, znajdujący się na najwyższym poziomie wyodrębnianej treści. Bez argumentów skrypt próbuje skompilować sterownik dla uruchomionego jądra.
Aby skompilować dla innego jądra, podaj ścieżkę do katalogów nagłówkowych tego jądra za pomocą "-o" oraz "-s" argumenty wiersza poleceń.
Aby uzyskać więcej informacji na temat wywoływania, uruchom polecenie:build_driver.sh -h
-
Dane wyjściowe procesu kompilacji są drukowane na standardowe wyjście.
Po udanej kompilacji wynikowy plik sterownika SDC, scini.ko, można znaleźć pod adresem./ini/scini.ko. -
Skopiuj plik sterownika z hosta kompilacji do docelowego hosta SDC do katalogu zgodnego z docelową wersją jądra, w tej samej lokalizacji co pakiet kompilacji, w pamięci podręcznej sterowników.
Na przykład w przypadku sterownika zgodnego z jądrem w wersji 5.14.0-362.24.1.el9_3.x86_64 ścieżka docelowa dla pliku sterownika to/bin/emc/scaleio/scini_sync/driver_cache/RHEL9/3.6.3000.128/5.14.0-362.24.1.el9_3.x86_64/scini.ko.
Additional Information
Pamięć podręczna
sterownikówPomyślnie skompilowany sterownik SDC dla określonego jądra zostanie skopiowany do odpowiedniego katalogu w pamięci podręcznej sterowników, a jego kompilacja nie zostanie ponownie uruchomiona.
Lokalizacja pamięci podręcznej sterowników to /bin/emc/scaleio/scini_sync/drive_cache.
Dziennik kompilacji
Po włączeniu automatycznej kompilacji na żądanie wszystkie dzienniki kompilacji są dołączane do /bin/emc/scaleio/scini_sync/driver_build.log.
Pomyślna kompilacja kończy się komunikatami podobnymi do następujących:
make: Entering directory '/usr/src/linux-headers-5.15.0-30-generic' "Following additional compilation's conditions are defined:" BLK_MQ_HEADER BLK_DEV_MAX_SEGMENTS SOCKET_HAS_NET_IN_CREATE BIO_BI_BDEV BIO_BI_STATUS BLK_QUEUE_FLAG_FUNCS BLK_INITIALIZE_RMQ_FN WAIT_QUEUE_ENTRY_T HAS_SCSI_REQUEST HAS_SCSI_REQ HAS_SCSI_CMND HAS_SCSI_IOCTL HAS_SCSI_IOCTL_WITH_GENDISK HAS_QUEUE_FLAG_DISCARD HAS_DISK_LIVE_IN_GENHD CC [M] /tmp/PowerFlex_driver_build_hpoM6l/ini/./linux/api/api_main.o CC [M] /tmp/PowerFlex_driver_build_hpoM6l/ini/./linux/api/api_mos.o CC [M] /tmp/PowerFlex_driver_build_hpoM6l/ini/./linux/api/api_net.o CC [M] /tmp/PowerFlex_driver_build_hpoM6l/ini/./linux/api/api_ioctl.o CC [M] /tmp/PowerFlex_driver_build_hpoM6l/ini/./linux/api/api_blk_io.o CC [M] /tmp/PowerFlex_driver_build_hpoM6l/ini/./linux/api/api_blk_dev.o LD [M] /tmp/PowerFlex_driver_build_hpoM6l/ini/scini.o "Following additional compilation's conditions are defined:" BLK_MQ_HEADER BLK_DEV_MAX_SEGMENTS SOCKET_HAS_NET_IN_CREATE BIO_BI_BDEV BIO_BI_STATUS BLK_QUEUE_FLAG_FUNCS BLK_INITIALIZE_RMQ_FN WAIT_QUEUE_ENTRY_T HAS_SCSI_REQUEST HAS_SCSI_REQ HAS_SCSI_CMND HAS_SCSI_IOCTL HAS_SCSI_IOCTL_WITH_GENDISK HAS_QUEUE_FLAG_DISCARD HAS_DISK_LIVE_IN_GENHD MODPOST /tmp/PowerFlex_driver_build_hpoM6l/ini/Module.symvers CC [M] /tmp/PowerFlex_driver_build_hpoM6l/ini/scini.mod.o LD [M] /tmp/PowerFlex_driver_build_hpoM6l/ini/scini.ko BTF [M] /tmp/PowerFlex_driver_build_hpoM6l/ini/scini.ko Skipping BTF generation for /tmp/PowerFlex_driver_build_hpoM6l/ini/scini.ko due to unavailability of vmlinux make: Leaving directory '/usr/src/linux-headers-5.15.0-30-generic' 02-Apr-2024 11:46:48 INFO: Success.
Kontener
inicjacyjny SDCKontener init SDC jest wstępnie skonfigurowany do korzystania z tej funkcji. Obejmuje gcc i tworzy pakiety, a /etc/emc/scaleio/scini_sync/.build_scini jest dostępny. Jednak, aby kompilacje zakończyły się pomyślnie, katalog nagłówków jądra hosta musi być zmapowany na kontener, do /usr/src. Na przykład, aby uruchomić kontener ręcznie za pomocą platformy Docker, po zainstalowaniu poprawnego pakietu kernel-devel na hoście dodaj -v/usr/src:/usr/src do wiersza poleceń, aby katalog nagłówków jądra był dostępny dla skryptu kompilacji.
Ograniczenie
Może zaistnieć sytuacja, w której kompilator GCC udostępniony w dystrybucji Linuksa hosta nie jest wystarczająco zaawansowany, aby skompilować SDC względem jakiegoś jądra. Taka sytuacja powinna być rzadka, ponieważ prawdopodobnie będzie dotyczyła jądra niestandardowego, a nie wspólnego dla tej dystrybucji. W takim przypadku użytkownik musi zainstalować bardziej zaawansowany GCC z niestandardowego repozytorium pakietów, a lokalizacja tego GCC będzie musiała zostać określona w $PATH. Nie ma automatycznego sposobu na podanie alternatywnej ścieżki GCC do usługi SDC.
Wersje
3.6.3 lub nowsza
4.5.2 lub nowsza
Instrukcje wideo