|
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.pldoc.pisz.plpdf.pisz.plminister.pev.pl
|