Portupgrade jest to narzędzie zarządzające portami/paczkami w naszym systemie. Dowiemy się z niego jak w prosty i szybki sposób aktualizować już zainstalowane porty/paczki, jak sprawdzać "świeżość" naszych programów oraz jak instalować nowe porty/paczki poprzez portupgrade itp. Opracowanie to ma przedstawić w obrazowy i prosty sposób zarządzanie, aktualizację i wyszukiwania informacji w portach dla systemu FreeBSD.
Aktualizacja i zarządzanie portami FreeBSD - „Krok po kroku” v.1.0
Copyright @ 2004-10-10 Warszawa Zdolny
Od autora…
Opracowanie to ma przedstawić w obrazowy i prosty sposób zarządzanie,
aktualizację i wyszukiwania informacji w portach dla systemu FreeBSD.
Opracowanie to może być rozpowszechniane bez ograniczeń jednakże musi być
nieodpłatne i nie komercyjne.
Autorzy:
- KaCzY - kaczy(AT)xl.wp.pl
- Kulda Artur - arti(AT)bsd4u.org
- Zdoliński Artur - zdolny(AT)poczta.onet.pl (opracowanie całości)
Aktualizacja drzewa portów przy użyciu cvsup
http://tlumaczenie.freebsd.pl/doc/pl_PL.ISO8859-2/books/handbook/cvsup.html
Instalacja:
# cd /usr/ports/net/cvsup-without-gui # make install clean
CVSup można wykorzystać do dwóch rzeczy - aktualizacji systemu operacyjnego
jak i kolekcji portów. Tutaj zademonstruje jak w łatwy i dość szybki sposób
uaktualnić drzewo portów.
Tworzymy plik ports-supfile
# touch /root/ports-supfile # ee /root/ports-supfile
Ten plik pozwoli nam na aktualizacje całego drzewa, lecz jak widać, możliwa
jest aktualizacja poszczególnych gałęzi z osobna:
--- ports-supfile ---
# Hosty dla Polski: # cvsup.pl.FreeBSD.org # cvsup2.pl.FreeBSD.org # cvsup3.pl.FreeBSD.org *default host=cvsup.pl.FreeBSD.org *default base=/usr *default prefix=/usr *default release=cvs tag=. *default delete use-rel-suffix *default compress ## Ports Collection.
ports-all |
--- end ports-supfile ---
Oryginalny plik powinien znajdować się pod adresem /usr/share/examples/cvsup/ports-supfile
Zwróć uwagę, że =. (kropka) w linii z release=cvs tag jest ważna, więc
upewnij się czy i twój plik tez ją posiada.
Następnie wydajemy polecenie:
# cvsup -g -L 2 /root/ports-supfile
No i trochę sobie poczekamy…
Portupgrade
Jest to narzędzie zarządzające portami/paczkami w naszym systemie. Dowiemy
się z niego jak w prosty i szybki sposób aktualizować już zainstalowane
porty/paczki, jak sprawdzać "świeżość" naszych programów oraz jak instalować
nowe porty/paczki poprzez portupgrade itp.
Instalacja portupgrade
Tak jak w przypadku innych portów tak i tu, aby zainstalować portupgrade
wystarczy przejść do jego katalogu i wydać polecenie:
# cd /usr/ports/sysutils/portupgrade # make install clean
Użyjmy sztuczki i sprawdźmy, które manuale, a w związku z tym i narzędzia
zostały zainstalowane:
# pkg_info -xL portupgrade | grep man
/usr/local/man/man1/pkg_deinstall.1.gz
/usr/local/man/man1/pkg_fetch.1.gz
/usr/local/man/man1/pkg_glob.1.gz
/usr/local/man/man1/pkg_sort.1.gz
/usr/local/man/man1/pkgdb.1.gz
/usr/local/man/man1/portcvsweb.1.gz
/usr/local/man/man1/portsclean.1.gz
/usr/local/man/man1/portsdb.1.gz
/usr/local/man/man1/portupgrade.1.gz
/usr/local/man/man1/portversion.1.gz
/usr/local/man/man5/pkgtools.conf.5.gz
/usr/local/man/man1/pkg_which.1.gz
/usr/local/man/man1/portinstall.1.gz
/usr/local/man/man1/ports_glob.1.gz
Najwyższa pora poświęcić trochę czasu i przejrzeć te manuale. Będziesz miał
obraz jak potężna i elastyczna jest kolekcja portów i odkryjesz sztuczki o
których nigdy nie miałeś pojęcia. Jednakże, nie przerażaj się, jeśli czujesz się
odrobinę przytłoczony ilością dostępnych informacji.
Na początek przyjrzymy się strukturze portów, gdzie one lezą w systemie i jak
utrzymać ich aktualność.
Kiedy instalowałeś FreeBSD i zdecydowałeś się, że chcesz zainstalować
kolekcję portów, to katalog /usr/ports/, jego zawartość została utworzone tak
jak sobie tego zażyczyłeś. Jeśli wylistujesz zawartość katalogu /usr/ports
spostrzeżesz, że kolekcja ta podzielona jest na podkatalogi tworzące logiczne
kategorie. Jak chociażby podkatalogi dla mail, www i databases. Każdy podkatalog
zawiera podkatalog dla odpowiednich aplikacji, więc www ma podkatalogi dla
mozilla i lynx. Każdy z tych katalogów zawiera informacje potrzebne do
zainstalowania tej konkretnej aplikacji. Na przykład:
# ls -F /usr/ports/www/mozilla Makefile distinfo pkg-descr pkg-message README.html files/ pkg-descr.gtk2
Kolekcja portów jest ciągle poddawana procesowi aktualizacji. Nowe porty
dodawane są regularnie, zwykle codziennie. Jeśli jesteś ciekawski i chcesz
zobaczyć rozkład kiedy i jakie porty zostały dodane,
http://www.freshports.org/
stanie się nieocenionym źródłem informacji dla ciebie.
Bardzo dobrze jest mieć taką dynamiczną kolekcję portów, ale oznacza to, że
twoje drzewko portów - tzn. struktura katalogów /usr/ports - może szybko się
zdezaktualizować. Aby utrzymać ją w synchronizacji ze zmianami i być pewnym, że
zawsze masz możliwość zbudowania jakiegokolwiek portu trzeba zastosować cvsup.
Synchronizacja drzewa portów
Polecenie cvsup ściągnie wszystkie najnowsze kawałki z kolekcji portów i
dodaje je do twojego drzewa portów – to już wiemy. Jest to tego typu komenda, z
której uzyskamy wymierne korzyści jeśli będziemy ją odpalać codziennie, więc być
może zechcesz ją dodać jako zadanie dla cron'a (będzie odpalane codziennie o
2.00 w nocy):
# ee /etc/crontab
--- crontab ---
0 2 * * * root /usr/local/bin/cvsup -g -L 2 /root/ports-supfile > /dev/null 2>&1 |
--- end crontab ---
Proces cvsup również uaktualni plik /usr/ports/INDEX (jak i /usr/ports/INDEX-5
niezależnie czy korzystamy z gałęzi 4.X czy 5.X). Plik ten zawiera całą listę
portów. Aby sprawdzić jak bardzo aktualne mamy porty, skorzystaj z polecenia:
# ls -l /usr/ports/INDEX
UWAGA! - Bazowanie na tym odczycie nie jest najlepszym wyjściem - INDEX{-5}
jest uaktualniany tylko 2 razy w miesiącu, a zmiany w kolekcji portów są
nanoszone codziennie (sami możemy sobie wygenerować ten indeks kiedy tylko
chcemy przy pomocy polecenia portsdb -U)
Przykład:
# ls -l /usr/ports/INDEX -rw-r--r-- 1 root wheel 4251062 15 Lis 2003 /usr/ports/INDEX
Na tej maszynie INDEX jest z dnia 15 listopada i od czasu instalacji systemu
nie był aktualizowany. Jeśli porównam to do pliku po aktualizacji, możemy
zobaczyć różnicę:
# ls -l /usr/ports/INDEX -rw-r--r-- 1 root wheel 5089899 30 Sie 2004 /usr/ports/INDEX
Widać ze rozmiar pliku, a w związku z tym ilość portów wzrosła znacznie w
przeciągu niecałego roku.
Aktualizacja zainstalowanych portów
portsdb -Uu
Parametry:
-U – generuje /usr/ports/INDEX
-u – generuje /usr/ports/INDEX.db
Po każdym cvsup, odpal polecenie:
# portsdb -Uu Updating the ports index ... Generating INDEX.tmp - please wait..
Done.
[Updating the portsdb <format:bdb1_btree> in /usr/ports ... - 13677 port entries found
.........1000.........2000.........3000.........4000.........5000.........6000........
.7000.........8000.........9000.........10000.........11000.........12000.........13000
...........done]
Gdy pierwszy raz skorzystasz z tego polecenia zostanie utworzona baza
INDEX.db w katalogu /usr/ports. Ta baza będzie uaktualnia za każdym razem, gdy
powtórzysz polecenie portsdb po świeżej operacji cvsup. Jeśli skorzystasz z
narzędzia file, zobaczysz, że nie będziesz mógł przejrzeć zawartości INDEX.db (w
przeciwieństwie do /usr/ports/INDEX{-5}), ponieważ nie jest to zwykły plik
ASCII:
# file /usr/ports/INDEX.db /usr/ports/INDEX.db: Berkeley DB 1.85/1.86 (Btree, version 3, native byte-order)
Jednak kilka narzędzi z pakietu portupgrade będzie korzystać z tej bazy.
Btree wskazuje na typ bazy, której algorytmy zostały zaprojektowane do szybkiego
przeszukiwania dużych ilości danych. Jest to idealne rozwiązanie dla opasłej
kolekcji portów - przekonamy się ze niektóre narzędzia portupgrade są szybsze i
bardziej wydajne niż narzędzia z base systemu, to właśnie z powodu Btree.
Musisz wykazać się odrobiną cierpliwości bo portsdb potrzebuje chwilki czasu,
aby zakończyć swoje działanie. Gdy skończy, jesteś gotowy by odpalić portversion
i przekonać się czy którykolwiek z zainstalowanych portów wymaga aktualizacji.
Pamiętasz to polecenie?
portversion -v -l
Parametry:
-l – określa z jakim statusem mają zostać pokazane wersje portów
(port jest starszy czy aktualnie mamy najnowszą wersję)
-v – Włącza pokazywanie szczegółowych opcji portversion (Turn on verbose
output)
# portversion -v -l "<" gqview-devel-1.3.1 < needs updating (port has 1.3.5)
Jeśli komenda ta coś zwróci, to twoim następnych krokiem będzie aktualizacja
tych konkretnych przestarzałych portów. Nie bądź zdziwiony, gdy będziemy używać
portupgrade, wywołując go jako portinstall (czyli do instalacji również nowych
portów a nie tylko aktualizacji obecnych)
portupgrade -a
W najprostszej postaci, 'portupgrade -a' zaktualizuje wszystkie (ang. all
(-a)) nieaktualne porty. Czasami proces ten może zakończyć się na portach które
odmówią aktualizacji. Ta pozorna anomalia to nie ograniczenie portupgrade, ale
kwestia zależności.
Porty maja dwa typy zależności. Pierwszy zwany jest 'zbuduj zależność' (ang.
build dependency) i wskazuje na inne porty, które muszą zostać zainstalowane
zanim właściwy port pomyślnie zostanie dodany do systemu. Drugi typ zależności
odnosi się do portów, które zależą od tego konkretnego portu, który chcesz sobie
uaktualnić. Zauważ, że pkg_delete nie pozwolił usunąć tych aplikacji, jeśli inne
aplikację zależały od nich.
Jeśli tylko podbijesz numerek aplikacji, ale nie sprawdzisz czy zależności
również wymagają aktualizacji, ostatecznie skończysz z aplikacjami, które
odmówią uaktualnienia. Aby się przed tym zabezpieczyć, wywołuj portupgrade z
dodatkowymi dwoma rekursywnymi przełącznikami czyli:
# portupgrade -arR
portupgrade -r -R
Parametry:
'-R' sprawdzi zależności wymagane (required by) do kompilacji portu
'-r' zatroszczy się o aplikacje zależne od portu (depends on), który jest
uaktualniany.
To ochroni twój system przed przestarzałymi zależności i niekompatybilnością
oprogramowania. Czasami, podczas korzystania z portupgrade lub któregoś z jego
narzędzi, może pojawić się wiadomość z prośbą o 'pkgdb -F'. Mogłeś zapewne
domyślić się po nazwie, że te narzędzie uaktualnia bazę paczek będących w
systemie. Baza ta znajduje się w /var/db/pkg/pkgdb.db. I także tu baza ta
wykorzystuje Btree ze względu na optymalny czas przeszukiwania. Jeśli
kiedykolwiek zostaniesz poproszony o uruchomienie 'pkgdb -F' po prostu zrób to.
Jednakże, z własnej inicjatywy nie przerywaj pracy temu poleceniu bo skończysz z
niespójną bazą. Jeśli jednak znajdziesz się w takiej pechowej sytuacji, to
polecenie naprawi spójność twojej bazy (czasami to jest doskonałe remedium na
dziwne zachowanie portupgrade):
pkgdb -F
Uruchomienie pkgdb z '-F' pozwoli interaktywnie naprawić bazę (właściwie to
skorygować zależności):
# pkgdb -F
---> Checking the package registry database
Stale dependency: mod_php4-4.3.4_4,1 -> apache-1.3.29_1 (www/apache13):
apache-2.0.48_1 (score:57%) ? ([y]es/[n]o/[a]ll) [no] yes
New dependency? (? to help): [Enter] to skip, [Ctrl]+[D] to delete, [.][Enter] to abort, [Tab] to complete
Odpalenie pkgdb z przełącznikiem '-F' interaktywnie pozwoli skorygować tą
bazę. To znaczy pkgdb zatrzyma się i zapyta co zamierzasz zrobić, zanim to
wykona.
pkgdb -fu
To polecenie natomiast jest bardzo podobne do pkgdb –F – jednak parametr –u
spowoduje iż baza danych paczek zainstalowanych i zawarta w bazie /var/db/pkg/pkgdb.db
zostanie stworzona (jeżeli takowa nie istnieje) lub też uaktualniona. W razie
wystąpienia przekłamania w portach, zostanie ono automatycznie naprawione. Flaga
–f (force) spowoduje naprawienie bazy, z naciskiem na „odcisk czasowy” plików.
# pkgdb -fu ---> Updating the pkgdb [Rebuilding the pkgdb in /var/db/pkg ... ............................................................ done]
pkgdb -a
Jeśli jesteś przesadnie ostrożny, alternatywą może być '-Fa', czyli pkgdb
poprawi tylko te rozbieżności co do których nie będzie miał żadnych wątpliwości.
To wszystko tylko tak brzmi przerażająco, w rzeczywistości jest inaczej. Jest
mało prawdopodobne, że kiedykolwiek będziesz poproszony o uruchomienie 'pkgdb
-F'. Aplikacja pkgdb jest wykorzystywana również do innych celów, i w związku z
tym zwana jest tez pkg_which.
Korzystanie z pkg_which
which
pkg_which (lub pkgdb) można wykorzystać, aby odszukać do którego portu należy
konkretny plik. A oto prosty przykład demonstrujący różnice między wbudowana
komenda which i pkg_which:
# which pkgdb
/usr/local/sbin/pkgdb
Polecenie 'which' jest wykorzystywane do odnalezienia ścieżki do aplikacji.
Natomiast pkg_which jest w stanie powiedzieć mi do którego portu należy dany
plik (binarka, manual, plik nagłówkowy ... czyli jeśli coś przyszło z portem
pkg_which powie dokładnie z którym).
# pkg_which pkgdb
portupgrade-20030723
A to polecenie jest równoważne z poprzednim poleceniem:
# pkgdb pkgdb
portupgrade-20030723
A o to następny przykład. Powiedzmy, że myszkujesz w /usr/local/, jest to
struktura katalogów zawierająca pliki wykorzystywane przez zainstalowane
aplikacje. Znalazłeś cala garść plików i nie masz najmniejszego pojęcia skąd one
się wzięły lub do której aplikacji nalezą. To zadanie dla pkg_which.
Spójrz na przykładowy fragment z mojego systemu:
# ls /usr/local/bin | grep yaf
tryaffix*
yaf-cdda*
yaf-mpgplay*
yaf-splay*
yaf-tplay*
yaf-vorbis
yaf-yuv*
pkg_which
Zobaczmy do której aplikacji one nalezą:
# pkg_which *yaf*
ispell-3.2.06_3
kdemultimedia-3.1.3
kdemultimedia-3.1.3
kdemultimedia-3.1.3
kdemultimedia-3.1.3
kdemultimedia-3.1.3
kdemultimedia-3.1.3
pkg_which -o
Polecenie 'pkg_which' ma kilka pożytecznych opcji. Jedna z nich to '-o',
czyli pochodzenie (ang. origin (-o)). Załóżmy ze nie pamiętasz z której gałęzi
portów wywodzi się kdemultimedia-3.1.3. Spróbuj tego:
# pkg_which -o kdemultimedia-3.1.3
multimedia/kdemultimedia3
Wyjście wskazuje nazwę podkatalogu z którego ten port został zbudowany czyli
/usr/ports/multimedia/kdemultimedia3.
pkg_which -v
Również opcja '-v' może się przydać. Jeśli chciałbym się dowiedzieć, które
aplikacje KDE mam obecnie zainstalowane to:
# pkg_which -v kde* kde-config: kdelibs-3.1.3 kdebugdialog: kdebase-3.1.3 kded: kdelibs-3.1.3 kdeeject: kdebase-3.1.3 kdeinit: kdelibs-3.1.3 kdeinit_shutdown: kdelibs-3.1.3 kdeinit_wrapper: kdelibs-3.1.3 kdepasswd: kdeutils-3.1.3 kdeprintfax: kdebase-3.1.3 kdesktop: kdebase-3.1.3 kdesktop_lock: kdebase-3.1.3 kdessh: kdeutils-3.1.3 kdesu: kdebase-3.1.3 kdesu_stub: kdelibs-3.1.3 kdesud: kdebase-3.1.3 kdevdlg2ui: kdevelop-2.1.5 kdevelop: kdevelop-2.1.5
Jak widać wyjście z polecenia jest dość gadatliwe. Każda linia pokazuje nazwę
aplikacji, później znak : (znak pełniący tylko funkcje ogranicznika), i na końcu
nazwa portu z której pochodzi ta aplikacja. Wygląda na to, że na tej maszynie
jest KDE w wersji 3.1.3
Zanim przejdziemy dalej, podsumujmy kroki niezbędne, aby mieć zainstalowane
najświeższe oprogramowanie:
- uruchom 'cvsup' w celu synchronizacji drzewa portów /usr/ports
- uruchom portsdb, żeby zaktualizować /usr/ports/INDEX.db
- użyj portversion, aby ustalic które aplikacje wymagają aktualizacji
- wykorzystaj portupgrade do aktualizacji tych aplikacji
Dodatkowe opcje portupgrade
portupgrade -F
Portupgrade dostarcza kilku opcji, które pozwalają skrupulatnie wybrać jakie
aplikacje uaktualnić i jak to zrobić. Jedna z bardziej pożytecznych opcji wtedy,
gdy nie masz stałego łącza to '-F'. Zazwyczaj, kiedy aktualizujesz, portupgrade
korzysta z sieci wtedy gdy potrzebuje pliku a potem rozpoczyna kompilacje. Jeśli
robisz większa aktualizacja jak chociażby KDE, to potrzebuje on, abyś przebywał
online przez parę ładnych godzin. Natomiast to polecenie wyskoczy na chwile do
Internetu i tylko ściągnie wszystkie pliki których potrzebujesz do aktualizacji
portu:
# portupgrade -aFrR
portupgrade -n
Gdy już zassałeś wszystkie niezbędne pliki, możesz już zerwać połączenie z
siecią i tradycyjnie rozpocząć aktualizacje 'portupgrade -arR'. Kolejna dostępna
opcja to '-n'. Przełącznik ten pokaże co portupgrade zrobi, ale właściwie bez
wykonywania tego tak na prawdę (czyli symulacja). Przydatna opcja, gdy jesteś
pełen obaw i chcesz wiedzieć już zawczasu co się stanie z twoim oprogramowaniem.
A o to wyjście z takiej sesji:
# portupgrade -anrR
---> Session started at: Sun, 17 Aug 2003 22:06:00 -0400
...
---> Reporting the results (+:done / -:ignored / *:skipped / !:failed)
- lang/ruby16 (ruby-1.6.8.2003.04.19)
- net/cvsup-without-gui (cvsup-without-gui-16.1h)
+ lang/ruby16-shim-ruby18 (ruby-shim-ruby18-1.8.0.p2.2003.04.19)
+ databases/ruby-bdb1 (ruby-bdb1-0.1.9)
- sysutils/portupgrade (portupgrade-20030723)
- www/lynx (lynx-2.8.4.1d)
---> Session ended at: Sun, 17 Aug 2003 22:06:02 -0400 (consumed 00:00:02)
Przeanalizujmy ten output. Portupgrade przebrnął przez każdy zainstalowany
port w systemie a wynik umieścił w raporcie. Każda linia raportu to pochodzenie
portu, obecnie zainstalowana wersja i symbol wskazujący czy wymagana jest
aktualizacja czy tez nie. W tym powyższym raporcie tylko dwa porty wymagają
aktualizacji. Są to te których linie zaczynają się od znaku '+'. Przyrównując
ten raport do portversion, wyniki będą podobne, ale przedstawione w inny sposób:
# portversion -l "<"
ruby-bdb1
ruby-shim-ruby18
portupgrade -i
Jeśli twoją dewiza jest "ostrożności nigdy za wiele" to do gustu może ci
przypaść opcja '-i' (ang. interactive (-i)) czyli opcja interakcyjna. Dodając ja
do reszty opcji, portupgrade po prostu będzie zatrzymywał się przed każdym
uaktualnianym pakietem. To zatrzymanie będzie wyglądało tak:
# portupgrade -ianrR
... ---> Upgrading 'ruby-bdb1-0.1.9' to 'ruby-bdb1-0.2.1'
(databases/ruby/bdb1)
OK? [yes]
Domyślna odpowiedz to yes. To znaczy jeśli naciśniesz Enter, to twoja
odpowiedz będzie brzmiała [yes]. Jeśli jednak zdecydujesz nie uaktualniać tego
portu, musisz wpisać słowo no.
portupgrade -l
Ostatnią opcje jaka chce omówić to '-l' (ang. log (-l)) czyli logowanie.
Opcja nieoceniona w sytuacji, gdy port odmawia instalacji i wyjście trzeba
przesłać do kogoś innego. Tu na przykład uaktualnienie portu i skierowanie
dodatkowo wyjścia do pliku o nazwie logfile:
# portupgrade -rR ruby-shim-ruby18 -l /root/portupgrade.log
Najprawdopodobniej nie będziesz chciał korzystać z opcji '-l' i '-a'
jednocześnie, szczególnie jeśli masz dużo nieaktualnych portów. Nikt nie chce
brnąć przez logi aż tak duże!
Uwagi ogólne związane z uaktualnianiem portów
Nie zalecane jest używanie polecenia portupgrade -arR, ponieważ może
spowodować duże zmiany w portach, a w konsekwencji błędy w funkcjonowaniu
poszczególnych programów. Należałoby się zastanowić nad podnoszeniem
poszczególnych portów oddzielnie, tak aby można było zapanować nad rozrastającym
się drzewem aplikacji w niepotrzebne wersje tych samych paczek.
Przed uaktualnieniem zalecane jest również wyłączenie aplikacji związanych z
aktualizacją portów – czyli: jeżeli podnosimy aplikację proftpd-1.2.9 do wyższej
wersji, należy się wyłączyć demona proftpd.
W wielu przypadkach błędy może również spowodować podnoszenie samego
portupgrade poprzez właśnie te polecenie. Aby tą paczkę uaktualnić – należy
zrobić to ręcznie i zwrócić dużą uwagę na powiązane z nią porty.
Przy występowaniu błędów podobnych do poniższego:
[Failed `inappropriate file type or format'] [Updating the portsdb
<format:bdb1_btree> in /usr/ports ... - 11733 port entries found
.........1000.........2000.........3000.........4000.........5000
......./usr/local/lib/ruby/site_ruby/1.8/portsdb.rb:587: [BUG] Segmentation fault
ruby 1.8.2 (2004-07-29) [i386-freebsd5]
należy się ustawić wpis
setenv PORTS_DBDRIVER bdb1_hash
w pliku .cshrc czy też:
ENV['PORTS_DBDRIVER'] = 'bdb1_hash'
w pliku /usr/local/etc/pkgtools.conf
Powtarzające się paczki
Przydatnym poleceniem przy zarządzaniu portami, może się okazać zestaw komend
powodujących wyświetlenie powtarzających się wersji tej samej biblioteki /
paczki.
# pkg_info | sort | sed -e 's/-[0-9].*$//' | \ uniq -c | grep -v '^[[:space:]]*1'
Wynikiem jego będzie przykładowo:
3 autoconf 2 automake 6 docbook 2 libtool 2 perl
co oznacza, iż w systemie występują dwie wersje perla, trzy wersje autoconf
itd.
Portsclean – czyszczenie paczek
Przydatną aplikacją może się również okazać polecenie portclean.
# portsclean [-hCDDinPPQQq]
Portsclean jest narzędziem pomagającym użytkownikowi pozbyć się nieużywanych
i nie powiązanych z innymi aplikacjami - portów.
Autor: Artur 'Zdolny' Zdoliński
zdolny(at)poczta.onet.pl |
dodatkowo... Dodane przez mcoy w dniu - 2005-12-18 01:03:19 | | polecam dwa swietne teksty Richarda Bejtlicha : "Keeping FreeBSD Up-To-Date" i "Keeping FreeBSD Applications Up-To-Date" dostepne tu http://www.taosecurity.com/publications.html |
Tylko zarejestrowani użytkownicy mogą pisać komentarze. Prosze zaloguj się i dodaj komentarz. Powered by AkoComment! |