ďťż
 
 
   bash i pakiety .deb
 
 

Tematy

 
    
 

 

 

 

bash i pakiety .deb





jang - 16-04-2007 21:00
Witam

Chciałbym napisać skrypt który będzie:
1. wczytywał nazwy pakietów (z /var/cache/apt/archives) zapisywał je do pliku ( /tmp/spis-deb)
2. na podstawie powyższej listy będzie odczytywał nazwę i wersję pakietu
3. przy pomocy listy z pkt.2 ma wykasować z /var/cache/apt/archives starsze wersje tego samego pakietu
4. cdn jak uporam się z ... :
#! /bin/bash

ls -1v /var/cache/apt/archives > /tmp/spis-deb

cat /tmp/spis-deb | grep -v '#' | while read line; do

dpkg-deb -W /var/cache/apt/archives/`echo "$line" | awk '{print $1}'`;

done; Powyższy kod wykonuje to co założyłem sobie w punktach 1 i 2 ale nie do końca tak jak chciałbym tzn.
- pakuje mi również do tej pierwszej listy nazwę katalogu "/partial" i podejrzewam że gdyby coś w nim było to i jego zawartość również by mi dopisał
- trafił mi się również pakiet o zerowej zawartości i jego też dopisał (rzadko mi się to przytrafia ale czasami przy apt-get update ,upgrade mam przekroczony czas połączenia czy jakoś tak i pewnie dlatego ten "zerowy" pakiet)

No i czas na pytania:
1. Co zmienić aby skrypt nie wczytywał ani nazwy katalogu /partial ani jego zawartości ? no i pustych plików również nie
2. Mając tą drugą listę (część zawartości) :
apt    0.6.46.4-0.1
aptitude        0.4.4-1
aptitude        0.4.4-4
avahi-daemon    0.6.16-5
util-linux      2.12r-19
vim-common      1:7.0-122+1
vim-common      1:7.0-219+1
vim-tiny        1:7.0-122+1
vim-tiny        1:7.0-219+1
w32codecs      1:20061022-0.0 jak pozbyć się starszych pakietów, tzn jak wykonać takie porównanie na podstawie powyższych wpisów - który starszy to do kasowania a nowszy pozostaje.
Oczywiście sugestie dotyczące całkowicie innego podejścia do problemu również mile widziane :)

Pozdrawiam



velmafia - 16-04-2007 22:59
a po co pisać skrypt? no chyba że robisz to ze względu na naukę.

przecież polecenie:
aptitude autoclean robi to co Ty chcesz osiągnąć, a mianowicie usuwa starsze wersje pakietów z /var/cache/apt/archives.

właśnie przedstawiłem:

sugestie dotyczące całkowicie innego podejścia do problemu ;)

aloha



Lorenzo - 16-04-2007 23:06

1. wczytywał nazwy pakietów (z /var/cache/apt/archives) zapisywał je do pliku ( /tmp/spis-deb) spróbuj tak:
echo -n > /tmp/spis-deb #tworzy pusty plik, lub zamazuje stary
for I in /var/cache/apt/archives/*.deb ; do
    NAME=`echo $I|cut -d '/' -f6|cut -d '_' -f1`
    VER=`echo $I|cut -d '/' -f6|cut -d '_' -f2`
    echo $NAME" "$VER >> /tmp/spis-deb
done Z resztą powinno już pójśc gładko

//edit:
jeżeli masz listę pakietów w /var/.... i z dpkg -l to użyj diff'a do porównania. A potem grepy, cuty, cuda, wianki ;-)



jang - 16-04-2007 23:39
velmafia dziękuję.
Starożytni :-P Indianie mieli jednak rację: Człowiek głupi się rodzi i głupi umiera.

Traktuję nie tylko basha ale Linuksa w całości jako hobby, a po co mi ten skrypt? To ma być "pomocnik" do reprepro. Jak kiedyś uda mi się go zrobić w całości to w FAQ opiszę (jak mnie ktoś nie uprzedzi) i reprepro i ten skrypt bo ręcznie wpisywać tyle pakietów ani myślę. W reprepro nie da się jak z aptem - apt-get install libc6 tylko trzeba w całości o tak: reprepro -Vb . includedeb pcpool /var/cache/apt/archives/libc6_2.2.5-11.8_i386.deb no i oczywiście wcześniej: reprepro -Vb . -C main -A i386 remove pcpool libc6 Trochę to męczące i dlatego ten skrypcik.

Lorenzo, faktycznie teraz nie wczytuję mi ani katalogu ani jego zawartością - bardzo dziękuję.
Mam jednak jeszcze jedno pytanie, te moje parę linijek wymyśliłem sam (przeglądając inne skrypty) więc wiem o co chodzi natomiast nie bardzo wiem z czym kojarzyć te f1 f2 f6? Do jakiego info (man) powinienem zajrzeć?



- 17-04-2007 00:14

nie bardzo wiem z czym kojarzyć te f1 f2 f6? Do jakiego info (man) powinienem zajrzeć? man cut opcje:
--delimiter
--fields

Pozdrawiam.



jang - 17-04-2007 07:59

man cut opcje :
--delimiter
--fields Tak też myślałem i nawet już wcześniej tam zaglądnąłem ale...
1 i 2 skojarzyłem po efektach pracy tego skryptu ale skąd ta 6 ? Nic nie przychodzi mi do głowy. Czy mógłby mnie ktoś oświecić ?
Tak przy okazji dlaczego ":" jest zamieniany na "%3" ? tzn.
sposobem który był uprzejmy podrzucić Lorenzo w pliku spis-deb mam np.:
wodim 9%3a1.1.4-1
natomiast "moim" sposobem (wyciągając wersję za pomocą dpkg-deb) otrzymuję :
wodim 9:1.1.4-1
???



Lorenzo - 17-04-2007 15:45
cut -d '/' -f6

Ustawia separator na /, zaś -f6 wybiera 6 ciąg znaków oddzielony separatorem (liczy od ciągu znaków przed separatorem). U mnie efekt jest taki:
Natomiast %3 - występuje w nazwie pliku deb, zaś dpkg interpretuje to jako : w werji.



jang - 17-04-2007 16:32

U mnie efekt jest taki: U mnie efekt jest dokładnie taki sam :-)


cut -d '/' -f6
(liczy od ciągu znaków przed separatorem).
Teraz wszystko jasne :)
Pakiet na pozycji 5 a tam 6 ? jakoś nie umiałem się tego doliczyć :-| tzn wpisałem 5 i zacząłem łapać o co chodzi ale wolałem się upewnić :-)

Lorenzo dziękuję i pozdrawiam
  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • minister.pev.pl

  •  

     


     

     
    Copyright 2003. MĂłj serwis