Nie jesteś zalogowany.
Jeśli nie posiadasz konta, zarejestruj je już teraz! Pozwoli Ci ono w pełni korzystać z naszego serwisu. Spamerom dziękujemy!
Prosimy o pomoc dla małej Julki — przekaż 1% podatku na Fundacji Dzieciom zdazyć z Pomocą.
Więcej informacji na dug.net.pl/pomagamy/.
Strony: 1
Chcę (właściwie to muszę) zrobić porządne repozytorium, z sekcjami, podpisami cyfrowymi, etc.
Najpierw próbowałem ręcznie za pomocą dpkg-scanpackages, do pewnego stopnia nawet się udało. Stworzyłem odpowiednią strukturę katalogów, wrzuciłem paczki gdzie trzeba, zindeksowałem. Przetestowałem, działa. Utworzyłem podpis cyfrowy, przetestowałem, działa. Zaimportowałem klucz repozytorium i nagle nie działa.
Próbowałem też automagicznie za pomocą debarchivera, ale w ogóle nie mogłem go rozgryźć.
Podzieli się ktoś swoim przepisem? Ja już któryś dzień z kolei ślęczę...
Offline
Jako tako udało mi się zrobić repozytorium za pomocą reprepro.
Problem mam tylko z pakietami źródłowymi, ale o tym później.
Offline
AgayKhan był zainteresowany tematem, więc piszę jak się reprepro posłużyć. Na razie będzie to książkowy przykład bylejakości (ale działającej), jak lepiej to rozgryzę, to namażę ładny opis do FAQ.
Potrzebny jest pakiet reprepro i następujęce drzewo katalogów: conf/ db/ dists/ incoming/ pool/. Ja dodatkowo tworzę incomed/. Wszystkie polecenia będą wykonywane w katalogu, w którym utworzyliśmy te katalogi.
W katalogu conf tworzymy plik o nazwie distributions o treści:
Origin: Nazwa Label: Etykieta Suite: gałąź Codename: nazwa kodowa Architectures: architektury Components: sekcje Description: Opis SignWith: Yes DebIndices: Packages Release . .gz .bz2 UDebIndices: Packages . .gz .bz2 DscIndices: Sources Release . .gz .bz2
np.:
Origin: Debian Label: Debian Suite: unstable Codename: sid Architectures: i386 source Components: main contrib non-free Description: OMFFSM!!11 Moje własne repozytorium!!11 SignWith: Yes DebIndices: Packages Release . .gz .bz2 UDebIndices: Packages . .gz .bz2 DscIndices: Sources Release . .gz .bz2
Teraz tworzymy klucz, którym podpiszemy repozytorium. Ponieważ nie bardzo się orientuję, który z kluczy jest wykorzystywany do podpisania (gdzieś mi się o oczy obiło, że robi to zupełnie przypadkowo), najlepiej utworzyć osobne repozytorium kluczy z tylko jednym kluczem. Idealnym miejscem będzie conf/.gnupg/ (ustawić dobre prawa dla tego katalogu, żeby nikt sobie nie latał po nim!).
gpg --homedir conf/.gnupg/ --gen-key
Najlepiej utworzyć klucz bez passphrase. Podpisywanie kluczem z passphrase jest nieco kłopotliwe.
(Oczywiście zamiast tworzyć nowy klucz można do tego repozytorium kluczy zaimportować istniejący.)
Skoro wszystko jest gotowe, możemy wreszcie zindeksować pakiety. Exportujemy zmienną GNUPGHOME
export GNUPGHOME="conf/.gnupg/"
i:
1. Tylko pakiety binarne.
Pakiety *.deb umieszczamy w incoming/
reprepro --ignore=wrongdistribution -Vb . includedeb gałąź incoming/*.deb
Ponieważ includedeb może dodać naraz wiele pakietów, możemy użyć "*.deb"
2. Pakiety binarne i źródłowe.
W incoming/ umieszczamy pliki *.dsc, *.tar.gz, *.diff.gz (zakładajac, że wszystkie one występują w danym przypadku), *.deb i *.changes.
reprepro --ignore=wrongdistribution -Vb . include gałąź incoming/plik.changes
Polecenie include przyjmuje tylko jeden plik! Jeśli mamy więcej do dodania musimy albo pętlę for utworzyć, albo kilka razy wydać polecenie, zmieniając plik *.changes.
Ja robię to za pomocą takiego skryptu:
#!/bin/bash export GNUPGHOME="conf/.gnupg/" gpg --list-keys #to tak dla pewności, że mam właściwy klucz ;) echo -e " \e[32;1m*\e[0m \e[1mdodawanie pakietów:\e[0m" PLIKI=($(ls incoming/*changes)) for PLIK in "${PLIKI[@]}"; do reprepro --ignore=wrongdistribution -Vb . include hag $PLIK && \ echo -e " \e[32;1m*\e[0m $PLIK" | sed -re "s:incoming/(.*)_(.*)_(.*).changes:\1 \2:g" done read -p "Przenieść pliki z 'incoming/' do 'incomed/'? [t/N] " CLEAR if [ -z $CLEAR ]; then CLEAR=N fi if [ $CLEAR = t ] || [ $CLEAR = T ]; then mv incoming/* incomed/ fi
Właściwie było w nim coś jeszcze, ale nie powinniście być zainteresowani. ;)
Jeszcze o podpisywaniu: jeśli mamy klucz bez passphrase, podpisze się bez problemu. Jeśli jest z passphrase należy dodać do reprepro flagę --ask-passphrase, ale to uciążliwe rozwiązanie (zwłaszcza jak skanujemy wiele plików *.changes). Można też skorzystać z gpg-agent, ale nie mam zielonego pojęcia jak go użyć.
Teraz wsadzić efekt (dists/ i pool/ wystarczy) na serwer lub zainstalować sobie serwer www (polecam lighttpd ;] lub boa, jeśli ma służyć tylko do tego repozytorium). Wpisy do repozytorium:
deb http://adres.strony/katalog/ gałąź sekcja sekcja deb-src http://adres.strony/katalog/ gałąź sekcja sekcja
dists/ i pool/ powinny być umieszczone w http://adres.strony/katalog/.
Tak na szybko i w skrócie to chyba wszystko. :)
Ostatnio edytowany przez azhag (2008-06-22 20:27:29)
Offline
jak podpisać pakiety
dpkg-buildpackage -rfakeroot -kid-klucza
Jak ktoś chce lokalne repo mieć , ale z debami podpisanymi kluczami, to
w sources list wpisać
deb file:/scieżka/do/repozytorum gałąź sekcja sekcja
Ostatnio edytowany przez AgayKhan (2008-06-22 22:27:30)
Offline
AgayKhan napisał(-a):
Jak ktoś chce lokalne repo mieć , ale z debami podpisanymi kluczami
sprostowanie: z repozytorium podpisanym
podpisanie pakietu (konkretnie są podpisywane *.dsc, nie *.deb) i podpisanie repozytorium to dwie różne sprawy
Offline
No tak, pierdolnąłem głupotę jak zwykle.
****
Jak usunąć pakiet .deb z takiego repo ( nie ręcznie oczywiście)
reprepro remove gałąż pakiet
reprepro remove unstable libaa1 ( kasuje z repo deba libaa1
Jak usunąc wszystkie deby powstałe z danego zdebianizowanego źródełka ( czyli źródło aalib, deby libaa1-dev libaa1 libaa-bin)
reprepro removesrc gałąź źródło
reprepro removesrc unstable aalib
kasuje wszystkie deby powstałe z aalib
Ostatnio edytowany przez AgayKhan (2008-06-26 17:16:51)
Offline
I coś mi szlag trafia .
Przy dodawaniu pakietów mam:
The lock file './db/lockfile' already exists. There might be another instance with the same database dir running. To avoid locking overhead, only one process can access the database at the same time. Do not delete the lock file unless you are sure no other version is still running! There have been errors!
Offline
Jeśłi jesteś pewien, że żaden inny proces nie działa na tej bazie, usuń ten plik.
Offline
gconf chyba odpowiada za konfigurację GNOME, który z reprepro nie ma niczego wspólnego
może spróbuj zeskanować od zera — usuń (jeszcze lepiej — skopiuj) db/, dists/ i pool/ (z ostatniego przenosząc pakiety do incoming/) i wykonaj reprepro
dopisek: aj, w pool/ nie ma *.changes, lepiej, żebyś miał ich kopię
Ostatnio edytowany przez azhag (2009-02-21 11:13:38)
Offline
Strony: 1