Nasza infrastruktura budowania i wydawania oraz nadchodzące aktualizacje

Za kulisami F-Droid stoi ogromny stos automatyzacji do zarządzania procesem budowania tysięcy aplikacji ze źródeł. Oznacza to sprawdzanie tysięcy repozytoriów źródłowych, sprawdzanie ich wszystkich pod kątem aktualizacji, budowanie i nowe wydania oraz bezpieczne podpisywanie ich masowo. Wszystkie kompilacje są uruchamiane w świeżej instancji gościa maszyny wirtualnej, znanej jako buildserver. Wszystkie binarki Gradle i pakiety SDK Androida są weryfikowane na podstawie naszych publicznych logów obserwowanych sum kontrolnych SHA-256. Procesy dziennika przezroczystości są również weryfikowane na podstawie publicznych sum kontrolnych.

Nasza konfiguracja działa prawie wyłącznie na Debianie. Debian jest liderem w dziedzinie wolnego oprogramowania, solidnych serwerów i powtarzalnych kompilacji. To czyni go naturalnym domem dla F-Droida. Staramy się również dbać o pakiety, z których korzystamy, a także budować nasze procesy na pakietach Debiana. Oznacza to, że dzielimy się opieką nad wszystkim, co używa Debiana. Może się wydawać, że to więcej pracy, ale z naszego doświadczenia wynika, że to się opłaca na dłuższą metę. Społeczność F-Droid jest w stanie utrzymać wiele rzeczy przy pomocy małego zespołu. Kolejnym tego przykładem jest ta strona: jest zbudowana przy użyciu pakietów Jekyll, które są w całości Debianowe.

Jeśli masz aplikację na f-droid.org, mogłeś zauważyć, że wszystkie kompilacje odbywają się na 5-letnim wydaniu Debiana: stretch. Obecnie jesteśmy w trakcie wielkiego wysiłku, aby zaktualizować system do najnowszej wersji bullseye. Nie jest to tylko prosta aktualizacja doapt-get, korzystamy również z okazji, aby przerobić proces kompilacji, tak aby kompilacje aplikacji działały na stosunkowo prostej instalacji Debiana, jako bazowego systemu operacyjnego. Musimy zapewnić platformę do budowania tysięcy aplikacji, więc nie możemy po prostu aktualizować bazowego obrazu systemu tak często, jak nam się podoba. Niektóre aplikacje potrzebują najnowszego, najwspanialszego. Inne aplikacje potrzebują starego, stabilnego systemu bazowego. Ta zmiana oznacza, że metadane zawierają jak najwięcej logiki budowania, tak aby opiekun aplikacji miał kontrolę nad wszystkimi krokami. Aby to osiągnąć, z obrazu bazowego buildserver usuwamy tak wiele, jak to tylko możliwe.

Rozważaliśmy zaoferowanie wyboru obrazów bazowych. Jest to możliwe rozwiązanie, ale nie jest ono proste, ponieważ wystarczy użyć dowolnego dostępnego obrazu Dockera. Odpowiednie są tylko obrazy bazowe, które mają gwarancję, że są wolnym oprogramowaniem. Wskazanie dowolnego obrazu Dockera otworzyłoby możliwość wystąpienia własnościowych zależności kompilacji, ponieważ nie jest możliwe automatyczne sprawdzenie, czy obraz Dockera jest w 100% wolnym oprogramowaniem. Rozwiązaniem tego problemu może być użycie wybranych, wstępnie zatwierdzonych kontenerów bazowych. Pamiętajcie, że jest to bardziej skomplikowane niż w przypadku dystrybucji GNU/Linuksa, ponieważ aplikacje na Androida są kompilowane krzyżowo. Dystrybucje GNU/Linux budują swoje pakiety na własnym systemie operacyjnym. Podczas budowania Debian nie pozwala nawet na dostęp do sieci, ponieważ wszystkie zależności muszą pochodzić z pakietów Debiana. Taki poziom weryfikacji jest celem F-Droid, a praca Maven‘nad odtwarzalnym ekosystemem Maven Central bardzo w tym pomaga.

Ponieważ CalyxOS domyślnie buduje się w F-Droid, Instytut Calyx chce również zapewnić, że F-Droid działa płynnie, a twórcy aplikacji są zadowoleni. Chciałbym podziękować Instytutowi Calyx za sponsorowanie 42 godzin miesięcznie mojego czasu na pracę nad sprawnym działaniem naszej infrastruktury budowania. Dodatkowo będę pracował nad poprawą automatyzacji procesu podpisywania. Obecnie nasz proces podpisywania jest w 100% offline. Jest to dobre rozwiązanie z punktu widzenia bezpieczeństwa, ale spowalnia proces wydawania. Dzięki nowoczesnym modułom bezpieczeństwa sprzętu i konfiguracjom serwerów możliwe jest zapewnienie dobrego bezpieczeństwa bez bycia w 100% offline. Automatyzacja podpisywania otwiera możliwości pracy równoległej całego procesu, w tym uruchamiania wielu buildów aplikacji, a także równoległego wykonywania głównych etapów budowania, generowania indeksów i podpisywania. Praca ta będzie wdrażana stopniowo, w miarę jak każdy jej fragment będzie kończony. Bądźcie więc cierpliwi, a zauważycie, że wydania będą pojawiać się coraz szybciej!