# Budowanie pakietu binarnego na bramkę

**URL:** <https://ai-speaker.discourse.group/t/budowanie-pakietu-binarnego-na-bramke/202>\
**Category:** faq\
**Created:** [30 Styczeń 2020 17:55 UTC](https://ai-speaker.discourse.group/t/budowanie-pakietu-binarnego-na-bramke/202 "2020-01-30T17:55:05Z")\
**Posts on this page:** 1\
**Page:** 1

<div class="post-metadata">

**Autor:** ![araczkowski](https://yyz2.discourse-cdn.com/free1/user_avatar/ai-speaker.discourse.group/araczkowski/32/6_2.png) [@araczkowski](https://ai-speaker.discourse.group/u/araczkowski)\
**Data wpisu:** [30 Styczeń 2020 17:55 UTC](https://ai-speaker.discourse.group/t/budowanie-pakietu-binarnego-na-bramke/202/1 "2020-01-30T17:55:05Z")

</div>

> ⚠ Ten opis skierowany jest do zaawansowanych użytkowników i integratorów, którzy mogą wykorzystać Asystenta domowego do tworzenia własnych projektów/produktów. Podczas aktualizacji systemu automatycznie instalujemy potrzebne pakiety (już skompilowane dostępne z naszego repozytorium apt), użytkownicy bramki nie mają potrzeby kompilować czy ręcznie instalować pakietów.

> ℹ Celem tego wpisu jest pokazanie, w jaki sposób można skompilować pakiet binarny, który następnie można zainstalować na bramce (dodając do naszego repozytorium pakietów lub ręcznie).

# Środowisko do budowania pakietów

Użycie oficjalnego obrazu Docker jest zalecanym sposobem budowania pakietów, w ten sposób możemy być pewni, że masz takie samo środowisko jak my i kompilacje są odtwarzalne.

## Docker

W dalszej części opisu zakładamy, że na swoim komputerze, na którym będziesz kompilował pakiety, masz zainstalowany Docker.

> **[Docker: Accelerated Container Application Development](https://www.docker.com/)**
>
> Docker is a platform designed to help developers build, share, and run container applications. We handle the tedious setup, so you can focus on the code.

## Pobranie skryptów z repozytorium

Z naszego repozytorium pobierz projekt zawierający skrypty do budowania pakietów używanych w projekcie AI-Speaker.

> **[GitHub - sviete/AIS-linux-packages: :penguin: Linux environment - packages repository.](https://github.com/sviete/AIS-linux-packages)**
>
> :penguin: Linux environment - packages repository.

możesz to zrobić za pomocą git:

```bash
git clone https://github.com/sviete/AIS-linux-packages.git

```

## Uruchomienie środowiska do budowy pakietów

Przejdź do folderu, do którego pobrałeś skrypty, użyj poniższej komendy, by uruchomić środowisko do budowy pakietów:

```bash
./scripts/run-docker.sh

```

Poczekaj, aż najnowszy obraz zostanie pobrany, a następnie pojawi się monit konsoli kontenera. Folder **AIS-linux-packages** zostanie zamontowany w kontenerze jako /home/builder/termux-packages.

W konsoli kontenera możesz uruchamiać budowę pakietu za pomocą skryptu _build-package.sh_ np. żeby zbudować rclone wpisujemy:

```bash
./build-package.sh rclone 

```

> ℹ Możesz wykonywać polecenia wewnątrz kontenera bez uruchamiania konsoli kontenera, podając je jako argumenty do skryptu ./scripts/run-docker.sh. Przykład:
> 
> ```bash
> ./scripts/run-docker.sh ./build-package.sh rclone 
> 
> ```
> 
> tak będziemy robić w kolejnych przykładach.

# Budowa istniejącego pakietu

Gdy już mamy środowisko do kompilacji sprawdzmy czy działa nam kompilacja pakietów które są w repozytorium.

Tak jak wspomniano wyżej, kompilacja rozpoczyna się od wykonania w kontenerze dockera (./scripts/run-docker.sh) skryptu build-package.sh znajdującego się w katalogu głównym repozytorium **AIS-linux-packages** z przekazaniem nazwy pakietu jako argumentu (i innych opcjonalnych argumentów).

Przykład budowania pakietu rclone dla architektury ARM:

```bash
./scripts/run-docker.sh ./build-package.sh -a arm -f rclone

```

[![asciicast](https://global.discourse-cdn.com/free1/uploads/ai_speaker/original/3X/2/0/2060cb2037fd1dc5b0f2833cdf3b28810617b4fd.svg)](https://asciinema.org/a/OSsAXFRcC1HjxKLBSToKkSsiq)

## Przydatne opcje kompilacji

- -a - Architektura, dla której budujemy pakiet. Akceptowane wartości to: aarch64, arm, i686, x86\_64, all. Jeżeli chcemy kopilować tylko na bramkę AIS dom DEV1 to wystarczy wybrać **-a arm**
- -d - Kompiluj z informacjami debugowania.
- -f - Wymusza budowanie pakietu, nawet jeśli jest już zbudowany.
- -o - Podaj katalog, w którym mają zostać umieszczone wbudowane pliki \* .deb. Domyślnie jest to ./debs.

# Dodanie nowego pakietu

Gdy działa nam kompilacja pakietów, które są w repozytorium, to możemy dodać i skompilować nasz nowy pakiet. W tym celu w folderze **AIS-linux-packages/packages** dodajemy nowy folder (nazwa taka jak nazwa naszego pakietu). Następnei w folderze tym dodajemy skrypt Bash build.sh skrypt Bash, który zawiera definicje metadanych i instrukcje dla systemu kompilacji. Taki skrypt jest wewnętrznie używany przez ./build-package.sh i nie jest samodzielny.

W przykładzie poniżej dodajemy binarkę ais-auth:

> **[GitHub - araczkowski/AIS-auth: Password authentication utilities for AIS dom](https://github.com/araczkowski/AIS-auth)**
>
> Password authentication utilities for AIS dom

### Utworzenie folderu ais-auth

```bash
cd AIS-linux-packages/packages

```

```bash
mkdir ais-auth

```

### Utworzenie pliku build.sh

```bash
nano build.sh

```

```bash
TERMUX_PKG_HOMEPAGE=https://github.com/araczkowski/AIS-auth
TERMUX_PKG_DESCRIPTION="Password authentication library and utility for AIS dom"
TERMUX_PKG_LICENSE="GPL-3.0"
TERMUX_PKG_MAINTAINER="Andrzej Raczkowski <araczkowski@gmail.com>"
TERMUX_PKG_VERSION=1.2
TERMUX_PKG_REVISION=1
TERMUX_PKG_SRCURL=https://github.com/araczkowski/termux-auth/archive/v${TERMUX_PKG_VERSION}.tar.gz
TERMUX_PKG_SHA256=f461043f8794638297a4320398fdac7a806629a3ad63b75b590bfc9fac2af872
TERMUX_PKG_DEPENDS="openssl"

```

### Budowanie pakietu

Wracamy do folderu AIS-packages i wykonujemy komendę:

```bash
sudo ./scripts/run-docker.sh ./build-package.sh -f -a arm ais-auth

```

[![asciicast](https://global.discourse-cdn.com/free1/uploads/ai_speaker/original/3X/8/a/8a0ec2f47f9465f08c4aa596befc53a0ae6607e6.svg)](https://asciinema.org/a/pGHREEzSZTbmy3smpsQrM9nvZ)

## Zrozumienie procesu budowania

Kompilacja rozpoczyna się w momencie wykonania skryptu ./build-package.sh poszczególne etapy kompilacji opisane są szczegółowo w dokumentacji Termux:

> **[Building packages](https://github.com/termux/termux-packages/wiki/Building-packages#understanding-build-process)**
>
> A package build system for Termux. Contribute to termux/termux-packages development by creating an account on GitHub.

Pod tym linkiem dostepna jest też instrukcja tworzenia nowego pakietu:

> **[Creating new package](https://github.com/termux/termux-packages/wiki/Creating-new-package)**
>
> A package build system for Termux. Contribute to termux/termux-packages development by creating an account on GitHub.
