Jakiś czas temu ściągnąłem sobie kilka paczek pod Minta i chciałem je mieć dostępne poprzez program “apt-get” (program dba o spełnienie zależności itp), czy też “apt-cache” (wyszukiwanie pakietów i wyświetlenie informacji o pakietach).
Zapewne wiele osób powie, że lepiej poszukać odpowiednich repozytoriów PPA i je dodać. Na ogół tak jest najwygodniej i sam tak często robię, ale czasami się zdarza, że nie ma odpowiedniego repozytorium, lub w repozytorium nie ma odpowiednich wersji.
Wtedy najlepiej sciągnąć dany pakiet ze strony projektu i wrzucić do katalogu na dysku i z tego katalogu zrobić lokalne repozytorium.
Ja tak zrobiłem z katalogiem “/MOJE/REPOZYTORIUM”. Problem był jednak w sytuacji dodawania kolejnego programu, gdyż po skopiowaniu pakietu do tego katalogu, trzeba było odświerzyć zawartość pliku Packages.gz, a że nie robiło się tego zbyt często, więc zapominało się składni polecenia służacego do tego, a historia basha coś u mnie szwankuje i nie zawsze zapisuje wszystkie polecenia, zwłaszcza gdy jest otwartych kilka konsoli jednocześnie.
Poniżej zamieściłem skrypt, który robi te wszystkie operacje za nas. Można go skopiować ze strony i wkleić do pliku, lub ściągnąć gotowy skrypt i go uruchomić.
Możesz użyć tego samego katalogu co ja, lub użyć innego. Chcąc zmienić katalog, musisz zmienić tylko wartość zmiennej “rep_path” i uruchomić skrypt. Skrypt zrobi wszystko za ciebie, włącznie ze stworzeniem katalogu i aktualizacją pliku “Packages.gz”. Po skopiowaniu nowego pliku do naszego repozytorium, wystarczy ponownie uruchomić skrypt i wszystko zostanie uaktualnione.
Jedyne, co musisz zrobić ręcznie, to dodać jedną linię do pliku “/etc/apt/sources.list”. Linia ta wskazuje gdzie ma być szukane lokalne repozytorium.
Pamiętaj tylko, abyś dokładnie skopiował tą linię, bo program “apt-get” jest bardzo przewrażliwiony na punkcie literówek i nie lubi jak mu np brakuje jakiegoś znaku, który wydaje się być zbędny.
deb file:/MOJE REPOZYTORIUM/
#!/bin/bash
#Katalog w ktorym chcemy utworzyc nasze lokalne repozytorium pakietow.
#Do tego katalogu bedziemy wrzucac pliki deb ktore bedzie sie instalowac
#przy uzyciu programu "apt-get" lub podobnym
rep_path=/MOJE/REPOZYTORIUM/
mkdir -p $rep_path
#Dzielenie zmiennej $rep_path na czesci uzywajac separatora "/"
#W tym przypadku tekst "/MOJE/REPOZYTORIUM" zostanie podzielone na dwie czesci,
#czyli "MOJE" i "REPOZYTORIUM" i nastepnie wrzucone do tablicy dirs
IFS=/ read -r -a dirs <<< "$rep_path"
#Przypisanie zmiennej "lastelement" numeru elementu,
#ktory jest przechowywany jako ostatni w tablicy "dirs"
lastelement=`expr ${#dirs[@]} - 1`
#Przypisanie zmiennej "lastelementdir",
#elementu ktory jest ostatnim elementem tablicy "dirs"
lastelementdir=${dirs[$lastelement]}
rep_dir=$lastelementdir
cd $rep_path
cd ..
#Skanowanie katalogu "REPOZYTORIUM" w poszukiwaniu plikow "deb"
#i tworzenie pliku "Packages.gz" z lista plikow,
#ktore znajduja sie z katalogu "REPOZYTORIUM"
sudo dpkg-scanpackages $rep_dir /dev/null | gzip > $rep_dir/Packages.gz
#Aktualizacja bazy pakietow dla programu "apt-get" i podobnych
sudo apt-get update
Ściągnij skrypt (pamiętaj o rozpakowaniu (tar) i nadaniu odpowiednich uprawnień (chmod i chown)):