Zależno

Tematy związane z oprogramowaniem, instalacją, konfiguracją
giaur
Member
Posty: 1915
Rejestracja: 25 maja 2007, 22:16

Zależności dla pakietu lokalnego

Post autor: giaur »

Czy znacie jakiś sposób na zrealizowanie czegoś takiego. Mam pakiet .deb lokalnie na dysku. Pakiet ten do instalacji wymaga kilku zależności.
No i tutaj właśnie zaczyna się problem. Teraz, aby zainstalować taki pakiet muszę najpierw sprawdzić zależności, zainstalować je za pomocą apt-get, a potem dopiero zainstalować mój pakiet lokalny.

Pytanie jest takie: czy widzieliście taki program (lub skrypt - jestem przekonany że da się coś takiego napisać), który zrobi to automatycznie, czyli:
- sprawdzi zależności
- zainstaluje je za pomocą apt-get (używając repozytoriów ustawionych w moim systemie)
- zainstaluje mój pakiet za pomocą dpkg
fnmirk
Senior Member
Posty: 8324
Rejestracja: 03 grudnia 2007, 06:37

Post autor: fnmirk »

Hasło pomocnicze: repozytorium lokalne. Odpowiedź w ,,Debian Reference''.
giaur
Member
Posty: 1915
Rejestracja: 25 maja 2007, 22:16

Post autor: giaur »

Wiem, że można zrobić repozytorium lokalne. Ale wydaje mi się to rozwiązaniem dość dziwnym. Naprawdę nie można bezpośrednio połączyć instalacji lokalnej przez dpkg z "dociąganiem" zależności z internetu?

Szukam czegoś w stylu:

Kod: Zaznacz cały

instaluj nazwa_pakietu
I powinno to zadziałać tak jak chcę, czyli jesli trzeba - wywołać apt-get i dociągnąć zależności, a potem wywołać dpkg -i i zainstalować mój pakiet. Nie chce mi się tworzyć żadnych lokalnych repozytoriów bo to za dużo zachodu.

Jeśli nie ma takiego skryptu, to już zaczynam go pisać - nie wydaje się to trudne, a życie ułatwić może bardzo.
Awatar użytkownika
DaVidoSS
Junior Member
Posty: 875
Rejestracja: 06 marca 2010, 11:26
Lokalizacja: ~/

Post autor: DaVidoSS »

Ja zrobiłem coś takiego dla automatycznej instalacji sterownika drukarki i skanera. Moze Ci się przydać jako szkielet.:

Kod: Zaznacz cały

davidoss@debian-squeeze-2011:~$ cat /usr/local/bin/brother-x64-install.sh 
#!/bin/bash
echo 'Czyszczenie wcześniejszych instalacji'
echo ''
rm -r ~/brother_instalacja
brsaneconfig2 -r SCANNER
sudo rm -r /var/spool/lpd/dcp540cn
sudo rm -r /usr/share/cups/model
sudo apt-get remove cups --purge
sudo dpkg -P brscan2
sudo dpkg -P brscan-skey
sudo dpkg -P dcp540cncupswrapper
sudo dpkg -P dcp540cnlpr
sudo sed  -i '/^lp$/d' /etc/modules
sudo modprobe -r lp
echo 'Instalacja'
echo ''
[B]sudo apt-get install ia32-libs cups sane-utils tcsh[/B]
sudo 'echo lp >> /etc/modules'
sudo modprobe lp
sudo mkdir /var/spool/lpd/dcp540cn
sudo mkdir /usr/share/cups/model
mkdir ~/brother_instalacja
cd ~/brother_instalacja
wget 'http://www.brother.com/pub/bsc/linux/dlf/dcp540cnlpr-1.0.1-1.i386.deb'
wget 'http://www.brother.com/pub/bsc/linux/dlf/dcp540cncupswrapper-1.0.1-1.i386.deb'
wget 'http://www.brother.com/pub/bsc/linux/dlf/brscan2-0.2.5-1.amd64.deb'
wget 'http://www.brother.com/pub/bsc/linux/dlf/brscan-skey-0.2.1-3.amd64.deb'
[B]sudo dpkg -i --force-architecture dcp540cnlpr-1.0.1-1.i386.deb
sudo dpkg -i --force-architecture dcp540cncupswrapper-1.0.1-1.i386.deb
sudo dpkg -i brscan-skey-0.2.1-3.amd64.deb
sudo dpkg -i brscan2-0.2.5-1.amd64.deb[/B]
echo''
echo 'Test instalacjii pakietow'
dpkg -l | grep Brother
echo ''
echo 'Konfiguracja cupsd'
echo 'Zaraz uruchomi sie okno konfiguracji. Ustaw drukarke według tego przykładu \
- LPD/LPR Host or Printer        for Device \
- lpd://192.168.0.199/binary_p1  for Device URI \
- Brother                       for Make/Manufacturer Selection \
- DCP540CN                      for Model/Driver Selection \
'
sleep 15
iceweasel "http://localhost:631/printers" &
sleep 15
echo ''
echo 'Dodaję skaner'
brsaneconfig2  -a  name=SCANNER  model=DCP-540CN  ip=192.168.0.199
echo ''
echo 'Test skanera'
brsaneconfig2  -q  |  grep  SCANNER
scanimage -L | grep SCANNER

Takie cacko uruchamiam jako użytkownik poleceniem brother-x64-install.sh jako ze skrypt jest umieszczony w $PATH. Należy pamiętać o fladze dla pliku.
Jeśli nie znasz wymaganych zależności a masz plik deb to go wypakuj gdzieś, potem wypakuj control.tar.gz i tam w pliku control znajdziesz nazwy zależnych pakietów.
fnmirk
Senior Member
Posty: 8324
Rejestracja: 03 grudnia 2007, 06:37

Post autor: fnmirk »

Awatar użytkownika
lessmian2
Member
Posty: 1088
Rejestracja: 30 kwietnia 2008, 19:38
Lokalizacja: Kraków

Post autor: lessmian2 »

Raz mi się coś takiego zdarzyło, że miałem swój pakiet z zależnościami które chciałem, aby były dociągnięte z sieci. Rozwiązanie było bardzo proste

Kod: Zaznacz cały

dpkg -i mójpakiet.deb
Tu się dpkg wywalało na zależnościach.

Kod: Zaznacz cały

apt-get install -f
Pociągnięcie wszystkich pakietów od których zależał mój, oraz sama instalacja tego pakietu. Możesz sobie to podpiąć pod jakiś alias, albo od biedy napisać dwuliniowy skrypt ;)

Rozwiązanie mało eleganckie, ale jak już pisałem, użyte raz czy dwa razy.
fnmirk
Senior Member
Posty: 8324
Rejestracja: 03 grudnia 2007, 06:37

Post autor: fnmirk »

Można przecież zainstalować pakiet z opcją:

Kod: Zaznacz cały

dpkg --force-all -i pakiet
A następnie:

Kod: Zaznacz cały

apt-get install -f
Dodane:
Ostrożnie, z pierwszym poleceniem, można popsuć system jeżeli nie będziemy zwracać uwagi na komunikaty i system będzie nieprzystosowany do instalacji danej wersji pakietu.
Awatar użytkownika
lessmian2
Member
Posty: 1088
Rejestracja: 30 kwietnia 2008, 19:38
Lokalizacja: Kraków

Post autor: lessmian2 »

fnmirk, summa summarum wychodzi na to samo co napisałem ;)
fnmirk
Senior Member
Posty: 8324
Rejestracja: 03 grudnia 2007, 06:37

Post autor: fnmirk »

lessmian2, nie zawsze. Czasem Twój sposób potraktuje fragment zainstalowanego pakietu jako uszkodzony i go usunie. Dodanie opcji, o której wspomniałem, zainstaluje pakiet do odpowiednich katalogów i wypisze informacje o brakujących pakietach.
giaur
Member
Posty: 1915
Rejestracja: 25 maja 2007, 22:16

Post autor: giaur »

Wyczytałem coś, że gdebi potrafi coś takiego zrobić. Sposób z apt-get -f też znalazłem, ale tak jak @fnmirk pisze - jest on niepewny. Bo sposób zachowania jest nieprzewidywalny - to już lepiej użyć aptitude i wybrać to co ma zrobić
ODPOWIEDZ