[LinuxFocus-icon]
<--  | Mapa Serwisu  | Indeks  | Szukaj

Nowości | Archiwum | Linki | O Nas
Ten dokument jest dostępny w następujących językach: English  ChineseGB  Deutsch  Francais  Italiano  Nederlands  Turkce  Polish  

[Photo of the Author]
Mario M. Knopf (homepage)

O Autorze:

Mario dobrze sie bawi pracując na Linuksie, zajmuje się również sieciami i sprawami dotyczącymi bezpieczeństwa.



Tlumaczenie na jezyk polski:
Artur R. Sierp <artursp(malpa)o2.pl>

Zawartość:

 

CheckInstall

[CheckInstall Title]

Notka:

Checkinstall jest narzędziem do automatycznego budowania pakietów RPM (RedHat, Mandrake,Suse), deb (Debian) lub .tgz (Slackware) z paczek źródłowych tar.gz. Umożliwia ono również bezproblemową instalacje i deinstalacje prawie każdego pakietu zbudowanego ze źródeł.

_________________ _________________ _________________

 

Wprowadzenia

Zdarza się często, że program który chcesz przetestować dostępny jest jedynie w postaci pakietu ze źrodłami tar.gz (nie ma paczek RPM,deb itp.). W tym przypadku ściągasz pakiet żródłowy , rozpakowujesz a następnie kompilujesz i instalujesz (przyp.tł.: zazwyczaj "make install"). Jak dotąd wszystko przebiega poprawnie, ale co sie stanie jeżeli zapragniesz usunać skąpilowany i zainstalowany program?

W pliku Makefile znajduje się czasami(ale nie zawsze) odpowiednia reguła odpowiedzialna za odinstalowanie programu (przyp. tł.: "make uninstall"). Oczywiście istnieje możliwość instalacji programu i wszystkich plików potrzebnych do prawidłowego działania w katalogu tymczasowym w celu łatwiejszego usunięcia. Jednakże ten sposób jest mozolny i pracochłonny, szczególnie gdy programy są często kompilowane i instalowane ze źródeł. Narzędzie Checkinstall stworzone przez Felipe Eduardo Sánchez Díaz Durán rozwiązuje ten problem.

Z reguły kompilacja i instalacja programów poddanych działaniu GNU Autoconf wymaga wydania następujących komend:
./configure && make && make install.
Skrypt configure próbuje odgadnąć prawidłowe wartości różnych, zależnych od systemu zmiennych, które zostaną później użyte podczas kompilacji. Sprawdza czy wszystkie wymagania odnośnie procesu kompilacji są spełnione, a następnie używa tych zmiennych do utworzenia plików Makefile w odpowiednich katalogach pakietu. Ponadto skrypt configure generuje dodatkowo jeszcze inne pliki. W skrócie można to przedstawić tak:

Po pomyślnym zakończeniu działania skryptu configure wpisujesz make aby skompilować żródła i utworzyć binarne pliki gotowe do uruchomienia. Może istnieć również możliwość po wykonaniu make przeprowadzenia testu poprzez wydanie komendy make check. Z uwagi na to, iż jest to opcjonalny krok, sam pakiet musi jednoznacznie wspierać to działanie. Kiedy make zakończy już swoją pracę możesz zainstalować skompilowany program wydając komendę make install - z oczywistych względów musisz posiadać odpowiednie uprawnienia. Po pomyślnym zainstalowaniu programu możesz usunąć już pliki binarne (wykonywalne) i obiektowe z katalogu ze źródłami wklepując make clean. Jeżeli zależy Ci także na usunięciu plików powstałych podczas działania configure wówczas piszesz make distclean. Warto nadmienić, że dwa ostatnie kroki, podobnie jak make check są opcjonalne i używają ich głównie deweloperzy, podczas rozwijania i testowania programu. Ty też możesz z tego skorzystać chociażby w celu zaoszczędzenia miejsca na dysku lub poprostu gdy lubisz mieć porządek w katalogu ze źródłami. Ponadto make distclean stwarza możliwość ponownej kompilacji pakietu dla odmiennej architektury czy OS.

Więcej szczegółowych informacji o GNU Autoconf poszukaj w dokumentacji [2]. Znajdziesz tam - poza podstawowym wprowadzeniem - również więcej informacji o GNU Build System. Nauczysz się jak pisać własne skrypty configure programując w M4 i tworząc własne makra oraz wiele innych cennych informacji.

 

CheckInstall

Jak już było wcześniej wspomniane, sekwencja komend które należy wykonać w celu zbudowania programu ze źródeł w oparciu o GNU Autoconf jest następująca:

./configure && make && make install

At this point it is time to use CheckInstall. This is replacing make install with its own command checkinstall. The two other instructions remain unaffected by this and are normally used as before. So the new command sequence with CheckInstall now is:

W tym momencie nadszedł czas na użycie "magi" CheckInstall. W miejsce make install wstawiamy komendę checkinstall, natomiast pozostałe komendy pozostają i są używane tak jak dotychczas. Tak więc nowa sekwencja komend przy korzystaniu z CheckInstall wygląda teraz następująco:

./configure && make && checkinstall

Jednakże instrukcja checkinstall i tak domyślnie wykonuje make install, monitorując cały proces zapisu plików podczas procesu instalacji. W tym celu korzysta z programu Installwatch opracowanego pierwotnie przez Pancrazio de Mauro. Po pomyślnym wykonaniu make install, CheckInstall generuje odpowiednie pakiety dla Slacka, Debiana lub RPMy (RedHat, Mandrake, itp.) i instaluje je używając w tym celu menadżera pakietów charakterystycznego dla danej dystrybucji. Po instalacji pozostawija on kopie pakietu w katalogu ze źródłami lub specjalnie do tego celu przeznaczonego katalogu, którego miejsce można zmienić poprzez edycje zmiennej PAK_DIR w pliku konfiguracyjnym. Tak stworzony pakiet można następnie , zachowując odpowiednie zależności, zainstalować na innej maszynie , co z oczywistych względów nie wymaga ponownego kompilowania źródeł.

CheckInstall nie musi tylko i wyłącznie opierać sie na domyślnej formule make install, ale potrafi przyjmować inne instrukcje instalacyjne. Przypuśćmy iż skryptem instalacyjnym dla przykładu jest setup.sh wówczas proces budowy i instalacji pakietów może wyglądać tak:

./configure && make && checkinstall setup.sh

Ponadto istnieje możliwość uruchomienia CheckInstall z różnymi parametrami. Poniższa komenda drukuje kompletny przegląd wszystkich dostępnych opcji z podziałem na poszczególne sekcje. A są to: Install options (opcje instalacji), Scripting options (opcje dotyczące skryptów), Info display options (opcje informacyjne), Package tuning options (opcje konfiguracyjne pakietów), Cleanup options (opcje czyszczenia) i About CheckInstall (informacje o CheckInstall):

# checkinstall -h

Jeżeli CheckInstall zostanie uruchomione z którąkolwiek z tych opcji, to wówczas nadpisze jej wartość znajdującą sie w pliku konfiguracyjnym checkinstallrc.

Jak każdy program CheckInstall również posiada pewne ograniczenia. Nie radzi on sobie z programami linkowanymi statycznie (dotyczy bibliotek), ponieważ Installwatch - na którego funkcjonalności opiera się CheckInstall - nie jest zdolny śledzić tych plików podczas procesu instalacji. Generalnie mówiąc mamy dwa typy bibliotek: linkowanych statyczne i dynamicze. Statycznie zlinkowane programy posiadają już wszystkie funkcje w sobie i tym samym nie ładują odpowiednich bibliotek podczas swojego działania. Ponadto tak skompilowane programy są niezależne od bibliotek zainstalowanych na docelowym systemie.

 

Instalacja

CheckInstall już od długiego czasu wchodzi w skład repozytoriów wielu dystrybucji i można go zainstalować posługując się odpowiednim menadżerem pakietów. Jeżeli jednak tak sie zdarzy, że go nie znajdziesz, to możesz ściągnać odpowiedni pakiet źródłowy tar. lub gotowy pakiet dystrybucyjny ze strony domowej projektu [4].

Instalacja CheckInstall jest całkiem prosta i przebiega w kilku krokach - ale dla prawidłowego procesu instalacji paradoksalnie bedzisz potrzebował CheckInstall. Po obligatoryjnej formule make install wklepujesz checkinstall, tym samym tworząc odpowiedni pakiet binarny. Teraz możesz już zainstalować ten pakiet za pomocą mendżera pakietów i całkiem łatwo go usuwać. Zanim jeszcze CheckInsall przystąpi do budowy pakietu musisz odpowiedzieć na kilka pytań dotyczących twojego menadżera pakietów i sprawdzić poprawność informacji , które znajdą sie później w nagłówku opisującym pakiet.

Procedura instalacji nowej wersji beta checkinstall-1.6.0beta4.tgz została zaprezentowana poniżej. Proces ten obejmuje instalację CheckInstall, Installwatch i makepak - zmodyfikowaną wersje makepkg. Jeżeli jesteś zainteresowany zmianami w nowej wersji to poczytaj Notkę do wydania [5] lub Dziennik zmian [6].

$ tar xzf checkinstall-1.6.0beta4.tgz
$ cd checkinstall-1.6.0beta4
checkinstall-1.6.0beta4 $ make
[...]
checkinstall-1.6.0beta4 $ su
Password:
checkinstall-1.6.0beta4 # make install
[...]
checkinstall-1.6.0beta4 # checkinstall

checkinstall 1.6.0beta4, Copyright 2002 Felipe Eduardo Sanchez Diaz Duran
This software is released under the GNU GPL.

Please choose the packaging method you want to use.
Slackware [S], RPM [R] or Debian [D]? R

*************************************
*** RPM package creation selected ***
*************************************

This package will be built according to these values:

1 -  Summary:  [ CheckInstall installations tracker, version 1.6.0beta4 ]
2 -  Name:     [ checkinstall ]
3 -  Version:  [ 1.6.0beta4 ]
4 -  Release:  [ 1 ]
5 -  License:  [ GPL ]
6 -  Group:    [ Applications/System ]
7 -  Architecture: [ i386 ]
8 -  Source location: [ checkinstall-1.6.0beta4 ]
9 -  Alternate source location: [  ]
10 - Provides: [ checkinstall ]
11 - Requires: [  ]

Enter a number to change any of them or press ENTER to continue:

Installing with make install...

========================= Installation results =========================
[...]



========================= Installation successful ======================

Copying documentation directory...
./
./NLS_SUPPORT
./README
./FAQ
./TODO
./CREDITS
./INSTALL
./Changelog
./BUGS
./installwatch-0.7.0beta4/
./installwatch-0.7.0beta4/README
./installwatch-0.7.0beta4/TODO
./installwatch-0.7.0beta4/VERSION
./installwatch-0.7.0beta4/INSTALL
./installwatch-0.7.0beta4/CHANGELOG
./installwatch-0.7.0beta4/BUGS
./installwatch-0.7.0beta4/COPYING
./RELNOTES
./COPYING

Copying files to the temporary directory...OK

Striping ELF binaries and libraries...OK

Compressing man pages...OK

Building file list...OK

Building RPM package...OK

NOTE: The package will not be installed

Erasing temporary files...OK

Writing backup package...OK

Deleting temp dir...OK

****************************************************************

Done. The new package has been saved to

/usr/src/redhat/RPMS/i386/checkinstall-1.6.0beta4-1.i386.rpm
You can install it in your system anytime using:

        rpm -i checkinstall-1.6.0beta4-1.i386.rpm

****************************************************************

checkinstall-1.6.0beta4 # cd /usr/src/redhat/RPMS/i386/
i386 # rpm -i checkinstall-1.6.0beta4-1.i386.rpm
i386 #

Użytkownicy Debiana w tym przypadku instalują pakiet przy pomocy dpkg -i natomiast Slackware installpgk

Używając opcji zapytań menadżera pakietów , w tym przypadku RPM , możesz sprawdzić czy pakiet prawidłowo został dodany do bazy pakietów oraz przeczytać dodatkowe informacje znajdujące sie w nagłówku pakietu.

$ rpm -qi checkinstall
Name        : checkinstall            Relocations: (not relocatable)
Version     : 1.6.0beta4              Vendor     : (none)
Release     : 1                       Build Date : Mo 06 Dez 2004 17:05:45 CET
Install Date: Di 07 Dez 2004 01:41:49 Build Host : deimos.neo5k.lan
Group       : Applications/System     Source RPM : checkinstall-1.6.0beta4-1.src.rpm
Size        : 264621                  License    : GPL
Signature   : (none)
Packager    : checkinstall-1.6.0beta4
Summary     : CheckInstall installations tracker, version 1.6.0beta4
Description :
CheckInstall installations tracker, version 1.6.0beta4

CheckInstall  keeps  track of all the files created  or
modified  by your installation  script  ("make install"
"make install_modules",  "setup",   etc),   builds    a
standard   binary   package and  installs  it  in  your
system giving you the ability to uninstall it with your
distribution's  standard package management  utilities.
 

Configuration

Modyfikując - co by nie mówić - całkiem dobrze udokumentowany plik konfiguracyjny /usr/lib/local/checkinstall/checkinstallrc, zmienisz jego domyślne zachowanie podczas budowania i instalowania pakietów.

Ponieważ CheckInstall bedzie Cię pytał za każdym razem który typ pakietów budować,a więc rozsądnym posunięciem jest odpowiednie ustawienie INSTYPE. Dobrym ruchem jest także zwrócić uwagę na zmienne INSTALL, PAK_DIR i RPM_FLAGS lub odpowiednio DPKG_FLAGS. Za pomocą tych dwóch ostatnich zmiennych definiujesz opcje instalacyjne pakietów , natomiast modyfikując PAK_DIR ustawisz inny katalog w którym znajdą się kopie pakietów. INSTALL pozwoli Ci wybrać pomiędzy samą budową pakietu z pominięciem instalacji, czy też nie proces instalacji ma wejść w mechanizm działania CheckInstall.

$ cat /usr/lib/local/checkinstall/checkinstallrc

####################################################################
                 #    CheckInstall configuration file   #
                 ########################################

###########################################################
#  Znajdują sie tutaj domyślne ustawienia CheckInstall.   #
#  Możesz je modyfikować do własnych potrzeb ,pamiętając  #
#  jednocześnie, że opcje podczas wywoływania checkinstall#
#  nadpisują je.                                          #
###########################################################

# Poziom informacji debug:
#   0: Brak
#   1: Zachowaj wszystkie pliki tymczasowe wyłączając pakiety
#   2: Zachowaj także pliki z pakietami

DEBUG=0

# Miejsce docelowe dla "installwatch"
INSTALLWATCH_PREFIX="/usr/local"
INSTALLWATCH=${INSTALLWATCH_PREFIX}/bin/installwatch

# Miejsce docelowe dla "makepkg" lub "makepkg". Domyślny jest "makepak" wchodzący w skład checkinstall,
# jeżeli jednak chcesz używać natywnego dla Slackware "makepkg" to ustaw tą zmienna na "makepkg"

MAKEPKG=/sbin/makepkg


# opcjonalne flagi dla "makepkg". Zaleca się dla najnowszych wydań Slacka

MAKEPKG_FLAGS="-l y -c n"

# Is MAKEPKG running interactively? If so, you might want
# to see what it's doing:

# Czy MAKEPKG ma uruchamiać sie w trybie interaktywnym.

SHOW_MAKEPKG=0

# Katalog na tymczasowe pliki
BASE_TMP_DIR=/var/tmp   ##  Nie ustawiaj na /tmp lub / !!

# Katalog na dokumentacje
DOC_DIR=""

# Domyślna architektura (zostaw puste dla automatycznego wykrycia)
ARCHITECTURE=""

# Domyślny typ pakietów. Jeżeli zostawisz puste wówczas CheckInstall bedzie za każdym razem pytał o typ
#   S : Slackware
#   R : RPM
#   D : Debian

INSTYPE="R"

# Miejsce umieszczenia nowych pakietów.
# Domyślne miejsce zależy od typu pakietów
PAK_DIR=""

# Opcjonalne flagi dla RPM
RPM_FLAGS=" --force --nodeps --replacepkgs "

# Opcjonalne flagi dla dpkg
DPKG_FLAGS=""


## Zmienne poniżej przyjmują wartości 1 lub 0
# Pokazuje rezultat działania komendy np: "make install"
# Użyteczne w przypadku interaktywnego sposobu działania CheckInstall
SHOW_INSTALL=1

# Pokazuje skrypt instalacyjny Slackware podczas działania,
# podobnie jak wyżej użyteczne podczas interaktywnego działania tego skryptu
SHOW_SLACK_INSTALL=0

# Automatycznie usuwa "doc-pak" przy zakończeniu
DEL_DOCPAK=1

# Automatycznie usuwa plik specyfikacji "spec"
DEL_SPEC=1

# Automatycznie usuwa "description-pak"
DEL_DESC=1

# Automatycznie wykonuje strip na plikach binarnych ELF
STRIP_ELF=1

# Automatycznie wykonuje strip na bibliotekach dzielonych ELF
# Notka: to ustawienia automatycznie zostanie ustawione na "0" gdy STRIP_ELF=0
STRIP_SO_ELF=1

# Automatycznie poszuka miejsca umieszczenia bibliotek dzielonych (shared)
# a następnie wprowadzi odpowienie wpisy do /etc/ld.so.conf.
# Ta opcja jest eksperymentalna, dlatego używaj jej tylko wówczas kiedy wiesz co robisz.
ADD_SO=0

# Automatycznie skompresuje strony podręcznika man
COMPRESS_MAN=1

# Ustawia umask
CKUMASK=0022

# Tworzy kopie plików nadpisanych lub zmodifikowanych podczas procesu instalcji
BACKUP=1

# Zapisuje plik doinst.sh (Slackware)
AUTODOINST=1

# Are we going to use filesystem translation?
#
TRANSLATE=1

# Ustawia grupe i właściciela pliku na root.root
RESET_UIDS=0

# Używa nowego formatu (8.1+) pliku opisu dla Slackware
NEW_SLACK=1

# Oddzielone przecinkami pliki lub katalogi które należy ignorować
EXCLUDE=""

# Przyjmuje domyślne wartości (dotyczy zadawanych pytań)
ACCEPT_DEFAULT=0

# Wymusza użycie opcji "-U" przy instalacji pakietów rpm, zamiast opcji "i".

RPM_IU=U

# Sprawdza listę plików przed utworzeniem pakietu
CK_INSPECT=0

# Przegląda plik .spec przed utworzeniem pakietu .rpm
REVIEW_SPEC=0

# Przegląda plik control przed utworzeniem pakietu .deb
REVIEW_CONTROL=0

# Instalować pakiet czy poprostu go tylko utworzyć?
INSTALL=0
 

Wnioski

CheckInstall jest doskonałym narzędziem, które może uczynić administrację Linuksa znacznie łatwiejszą. Szczególnie wtedy, gdy programy muszą być często kompilowane ze źródeł. CheckInstall daje Ci możliwość bezpiecznego usuwania programów bez ryzyka naruszenia integralności systemu. Mało tego, dzięki CheckInstall możesz instalować pakiety również na innych maszynach bez konieczności ponownej ich kompilacji ze źródeł - oczywiście zachowując rygor spełnienia zależności, co w przypadku indentycznych systemów nie stanowi wielkiego problemu.

 

Linkownia

[1] http://asic-linux.com.mx/~izto/checkinstall/ [Strona domowa CheckInstall]
[2] http://www.gnu.org/software/autoconf/manual/autoconf-2.57/autoconf.html [GNU Autoconf dokumentacja online]
[3] http://asic-linux.com.mx/~izto/checkinstall/installwatch.html [Installwatch]
[4] http://asic-linux.com.mx/~izto/checkinstall/download.php [Tu ściągniesz CheckInstall]
[5] http://asic-linux.com.mx/~izto/checkinstall/docs/RELNOTES [Notka do wydania]
[6] http://asic-linux.com.mx/~izto/checkinstall/docs/Changelog [Dziennik zmian]

 

Dyskusja dotycząca tego artykułu

Komentarze do dyskusji:




Strona prowadzona przez redakcję LinuxFocus
© Mario M. Knopf
"some rights reserved" see linuxfocus.org/license/
http://www.LinuxFocus.org
tłumaczenie:
de --> -- : Mario M. Knopf (homepage)
en --> pl: Artur R. Sierp <artursp(malpa)o2.pl>

2004-12-19, generated by lfparser version 2.50