Własny Serwer – cz.8: Repozytoria pakietów debianowych
Ostatnia aktualizacja: 16 września 2023, 15:16
Ósma część serii Własny Serwer poświęcona jest konfiguracji serwera hostującego własne pakiety dla dystrybucji opartych na Debianie lub Ubuntu.
Co to jest repozytorium pakietów?
Repozytorium pakietów jest wydzielonym miejscem na serwerze, które oferuje pakiety binarne oraz źródłowe dla konkretnej dystrybucji Linux. Dostęp do repozytoriów przez użytkowników zwykle możliwy jest po dodaniu adresu repozytoriów do swojego menadżera pakietów oraz klucza publicznego.
Komu jest to potrzebne?
Własne repozytorium pakietów jest pomocne przy udostępnianiu własnych pakietów, tworzonych na potrzeby własnego projektu lub tworzeniu, np. dodatkowej bazy pakietów z innych źródeł, innych niż te oferowane przez deweloperów Twojej dystrybucji.
Jeśli prześledziłeś wszystkie poprzednie części serii Własny Serwer, to znasz zasady konfiguracji domeny, serwera www i szyfrowania TSL/SSL.
Domena
Możesz postawić repozytoria na własnej, unikalnej domenie/subdomenie lub poprosić o utworzenie specjalnej subdomeny projektu, którego pakiety chcesz hostować, np.: pl.repo.sparkylinux.org
Serwer www
Minimum koniecznym do udostępniania plików jest serwer www, bazujący na Apache2 lub Nginx, lub innym.
Utwórz katalog, w którym będziesz udostępniał zasoby:
mkdir -p /var/www/pl.repo.sparkylinux.org/public_html
Dodaj konfigurację dla Apache:
nano /etc/apache2/sites-available/000-default.conf
wpisując:
##### pl.repo.sparkylinux.org #####
<VirtualHost *:80>
ServerAdmin admin@lpl.repo.sparkylinux.org
ServerName pl.repo.sparkylinux.org
ServerAlias www.pl.repo.sparkylinux.org pl.repo.sparkylinux.org
DocumentRoot /var/www/pl.repo.sparkylinux.org/public_html
DirectoryIndex index.html index.php index.htm
<Directory /var/www/pl.repo.sparkylinux.org/public_html/>
Options All Indexes FollowSymLinks
AllowOverride All
Require all granted
</Directory>
ErrorLog ${APACHE_LOG_DIR}/error- pl-repo-sparkylinux-org.log
CustomLog ${APACHE_LOG_DIR}/access- pl-repo-sparkylinux-org.log combined
</VirtualHost>
Jeśli posiadasz Nginx zamiast Apache, to dodaj konfigurację do:
nano /etc/nginx/sites-available/default
wpisując:
##### pl.repo.sparkylinux.org #####
server {
listen 80;
server_name pl.repo.sparkylinux.org www.pl.repo.sparkylinux.org;
root /var/www/pl.repo.sparkylinux.org/public_html;
index index.php index.html index.htm;
location /
{
try_files $uri $uri/ =404;
}
}
Zmiana praw do zawartości udostępnionego katalogu i plików:
chown -R www-data:www-data /var/www/pl.repo.sparkylinux.org/public_html/
Szyforwanie TSL/SSL
Jeśli chcesz udostępniać swoje repozytoria przez szyfrowany protokół https, to dodaj link symboliczny:
ln -s /var/www/pl.repo.sparkylinux.org/public_html /var/www/pl.repo.sparkylinux.org/private_html
Oraz wpis do konfiguracji Apache:
nano /etc/apache2/sites-available/default-ssl.conf
dodając do powyższego pliku zawartość:
##### pl.repo.sparkylinux.org #####
<IfModule mod_ssl.c>
<VirtualHost *:443>
ServerAdmin admin@pl.repo.sparkylinux.org
ServerName pl.repo.sparkylinux.org
ServerAlias www.pl.repo.sparkylinux.org pl.repo.sparkylinux.org
DocumentRoot /var/www/pl.repo.sparkylinux.org/private_html
<Directory /var/www/pl.repo.sparkylinux.org/private_html/>
Options All Indexes FollowSymLinks
AllowOverride All
Require all granted
</Directory>
ErrorLog ${APACHE_LOG_DIR}/error-pl-repo-sparkylinux-org.log
CustomLog ${APACHE_LOG_DIR}/access-pl-repo-sparkylinux-org.log
combined
SSLEngine on
<FilesMatch "\.(cgi|shtml|phtml|php)$">
SSLOptions +StdEnvVars
</FilesMatch>
<Directory /usr/lib/cgi-bin>
SSLOptions +StdEnvVars
</Directory>
</VirtualHost>
</IfModule>
Przeładuj Apache:
systemctl restart apache2
Teraz zainstaluj certyfikat TSL:
certbot --apache -d pl.repo.sparkylinux.org -d www.pl.repo.sparkylinux.org
Ponownie przeładuj Apache:
systemctl restart apache2
Lub do konfiguracji Nginx:
/etc/nginx/sites-available/default
server {
listen 443 ssl http2;
server_name pl.repo.sparkylinux.org www.pl.repo.sparkylinux.org;
root /var/www/pl.repo.sparkylinux.org/private_html;
index index.php index.html index.htm;
ssl_certificate /etc/ssl/certs/apache-selfsigned.crt;
ssl_certificate_key /etc/ssl/private/apache-selfsigned.key;
location /
{
try_files $uri $uri/ =404;
}
}
Przeładuj Nginx:
systemctl restart nginx
Teraz zainstaluj certyfikat TSL:
certbot --nginx -d pl.repo.sparkylinux.org -d www.pl.repo.sparkylinux.org
Ponownie przeładuj Nginx:
systemctl restart nginx
Klucz publiczny
W pierwszej kolejności utwórz klucz prywatny i publiczny.
Klucz prywatny wyeksportuj (opcjonalnie) i skopiuj na dysk lokalny – tego klucza nikomu nie udostępniaj.
Klucz publiczny wyeksportuj i udostępnij użytkownikom – dzięki niemu otrzymają dostęp do zawartości Twojego repozytorium.
Zainstaluj GPG:
apt update
apt install gnupg
Wygeneruj parę kluczy (domyślnie RSA):
gpg --generate-key
lub
gpg --full-generate-key
Podając swój email, imię i nazwisko/nazwę, hasło.
Wyeksportuj klucz publiczny (przykładowy):
gpg --armor --output ~/sparky.gpg.key --export nick@email-serwer.pl
Konfiguracja repozytoriów
Po skonfigurowaniu katalogów i serwera www oraz klucza, które będziesz udostępniał użytkownikom, można przejść do konfiguracji obsługi samego repozytorium. Do tego celu istnieje kilka aplikacji, ja polecam 'reprepro’.
apt install reprepro
Przejdź do katalogu udostępniania repo:
cd /var/www/pl.repo.sparkylinux.org/public_html
Utwórz podkatalog dla konfiguracji repo:
mkdir conf
i utwórz w nim plik konfiguracyjny:
nano conf/distributions
wklejając:
Origin: Debian
Label: Debian
Suite: stable
Codename: potolo
Architectures: i386 amd64 source
Components: main
Description: Sparky stable repository
SignWith: sparky.gpg.key
(Powyższa, przykładowa konfiguracja konfiguruje repozytoria dla SparkyLinux z linii stabilnej)
Zapisz plik, następnie skopiuj wcześniej wygenerowany klucz publiczny do przestrzeni udostępniania repo:
cp ~/sparky.gpg.key /var/www/pl.repo.sparkylinux.org/public_html/
Repo jest gotowe, czas dodać pierwszy pakiet binarny (w katalogu public_html):
reprepro -Vb . includedeb potolo /katalog-tymczasowy-pakietow/paczka.deb
oraz pakiet źródłowy, jeśli taki posiadasz:
reprepro -Vb . includedsc potolo /katalog-tymczasowy-pakietow/paczka.dsc
usunięcie pakietu z repo:
reprepro -Vb . remove potolo pakiet
Więcej informacji uzyskasz ze strony podręcznika:
man reprepro
man gpg
Konfiguracja repozytoriów na komputerze użytkownika
Skoro repo jest gotowe, pakiety dodane, użytkownicy powiadomieni, to należy poinstruować ich, jak dodać nasze nowe repozytoria do ich systemu opartego na Debianie lub Ubuntu.
W pierwszej kolejności zainstaluj z serwera repo klucz publiczny:
wget -O - http://pl.repo.sparkylinux.org/sparky.gpg.key | sudo tee /usr/share/keyrings/sparky.gpg.key
Teraz utwórz listę repozytoriów:
sudo nano /etc/apt/source.list.d/sparky-moja-lista.list
Dodając do niej adres repozytoriów podpisanych kluczem publicznym:
deb [signed-by=/usr/share/keyrings/sparky.gpg.key] http://pl.repo.sparkylinux.org/ potolo main
deb-src [signed-by=/usr/share/keyrings/sparky.gpg.key] http://pl.repo.sparkylinux.org/ potolo main
Adresy repozytoriów i klucz publiczny są przykładowe, zmień na swoje!
Odśwież listę pakietów:
sudo apt update
Na tym zakończyliśmy temat konfiguracji własnego repozytorium pakietów debianowych.
Odwiedź również:
man apt
W kolejnej, dziewiątej części cyklu Własny Serwer skonfigurujemy nasz system pod kątem serwera lustrzanego dla innego projektu, np. jeśli nie tworzysz własnych pakietów, ale posiadasz maszynę serwerową i chcesz udostępnić jej część na pakiety innego projektu, np. Debiana, Ubuntu, Sparky lub innego pochodnego OS-a.
No tak, znów dużo po angielsku i zbyt wiele do ogarnięcia. Weźmy fragmencik pingwinka, taki swap. Partycja czy swapfile? Jakiej wielkości? 1 czy więcej? A jak na partycji to systemowej czy innej?A na stałe to jak? etc. Żeby Linuxy były number one, muszą być max uproszczone, z góry optimum skonfigurowane, niczym win, a może i lepiej (nie licząc mega szpiegostwa/inwigilacji). Może kiedyś będzie idealny Linux…