OpCode.eu.org

Blog O autorze O serwisie
2019-04-28

Własna prosta paczka deb

Może się zdarzyć że chcemy zainstalować jakieś własne oprogramowanie w sposób systemowy (np. na kilku maszynach) lub wymusić coś związanego z zależnościami. W takich przypadkach przydatne może być utworzenie własnego pakietu .deb. Najprostsze w realizacji jest utworzenie tzw. pakietu binarnego z użyciem dpkg-deb i fakeroot.

Za przykład posłuży przygotowanie pakietu fake-python2, który dostarczy pakiet python w oparciu o python3, bez instalowania w systemie Pythona w wersji 2. Bywa to sensowne, gdyż część paczek zależnych od pakietu python działa całkowicie poprawnie z Pythonem w wersji 3. Jednak pozostaje to pewnym oszustwem więc każdy kto to zrobi robi to na własną odpowiedzialność (część pakietów może naprawdę potrzebować python2 i nie działać poprawnie.

# pobieramy nazwę użytkownika (z passwd) i adres mailowy (z konfigu git'a)
# można te zmienne ustawić manualnie ...
USER=$(getent passwd `whoami` | awk -F'[,:]' '{print $5}')
MAIL=$(git config --get user.email)

# tworzymy katalog paczki i podkatalog z plikami kontrolnymi dla paczki
mkdir -p fake-python2/DEBIAN

# konfigurujemy paczkę
cat << EOF > fake-python2/DEBIAN/control
Package: fake-python2
Version: 1.0.0
Section: python
Priority: optional
Architecture: all
Maintainer: $USER <$MAIL>
Depends: python3
Conflicts: python, python2, python2.7
Provides: python
Description: Fake python package
 Provide python package without installing python2.
EOF

# budujemy paczkę deb w oparciu o wcześniej przygotowany katalog
# z plikami do zainstalowania oraz konfiguracj
fakeroot dpkg-deb -b fake-python2

Gotowe. Otrzymaliśmy plik fake-python2.deb, który możemy zainstalować przy pomocy dpkg -i fake-python2.deb. Dostarcza on pakiet python, będąc w konflikcie z pakietami python, python2 i python2.7 a wymagający pakietu python3.

Jeżeli chcemy aby nasza paczka zawierała jakieś pliki to dodajemy je do katalogu z którego jest budowana (w powyższym przykładzie fake-python2), traktując go jako root. Na przykład jeżeli przed fakeroot dpkg-deb -b fake-python2 wykonalibyśmy mkdir fake-python2/etc; echo konfig > fake-python2/etc/MojKonfig.txt paczka zainstalowałaby w systemie plik /etc/MojKonfig.txt z zawartością konfig.

Tagi: debian