JustPaste.it

Pakiety - instalacja, uaktualnianie, usuwanie i tworzenie

Wstęp

Co to jest pakiet najlepiej zrozumieć śledząc drogę, jaką "przebywa" program od momentu napisania, do momentu instalacji w systemie. Proces instalacji (a wcześniej kompilacji programu) w środowisku Linux, nie jest tak prosty jak w środowisku Windows. Przede wszystkim dlatego, że dystrybucje Linuksa różnią się między sobą np. rozmieszczeniem ważnych z punktu widzenia systemu katalogów, skryptami startowymi, bibliotekami itd. Z tego względu na każdej z dystrybucji program musi być instalowany w inny sposób.

Jest tak wiele dystrybucji Linuksa, iż trudno jest wymagać by programiści przygotowywali wersje instalatora swojego programu dla każdej z nich. Dlatego osoby tworzące daną dystrybucję kompilują i przygotowują wersje instalatora dla danego systemu a następnie udostępniają ją w postaci tzw. pakietów. I tak, pakiety w RedHat to pliki *.rpm, w Debianie pliki *.deb itd.

Slackware korzysta z pakietów *.tgz, czyli archiwów stworzonych przy pomocy programu tar i skompresowanych programem gzip. Podobny format pakietów wykorzystywany jest również w systemach Unix oraz BSD (Berkley Software Development).

Można by spytać: po co w ogóle tyle zachodu z tymi pakietami, skoro mając kod źródłowy programu można samemu skompilować i zainstalować program? Odpowiedź jest dość prosta: samodzielna kompilacja i instalacja programu różni się od instalowania pakietu tym, że podczas instalacji z pakietu system zapamiętuje jakie pliki i gdzie są kopiowane. Ułatwia to późniejszą deinstalację bądź uaktualnienie programu.

W Slackware ze względu na nieskomplikowaną budowę pakietów nie ma rozbudowanego narzędzia do zarządzania nimi. Istnieją natomiast skrypty pomagające instalować, uaktualniać i odinstalować pakiety:

installpkg - instalowanie pakietu
removepkg - odinstalowanie pakietu
upgradepkg - uaktualnienie pakietu
explodepkg - rozpakowanie pakietu do bieżącego katalogu
makepkg - stworzenie własnego pakietu
pkgtool - interaktywna wersja installpkg, removepkg i kilku innych funkcji w jednym

Instalacja i deinstalacja

Instalacji pakietów dokonujemy za pomocą polecenia:

# instalpkg nazwa_pakietu

lub

# pkgtool

W przypadku wydania komendy pkgtool na ekranie pojawi się nam interaktywne menu:

caa8dbb460df7def927cafde5470b912.gif

Jak widać mamy do wyboru:

  • instalacje pakietów z obecnego katalogu (Current),
  • instalacje z innego katalogu (Other),
  • instalacja z dyskietki (Floppy),
  • usunięcie pakietu zainstalowanego w systemie (Remove),
  • lista plików w pakiecie (View),
  • wyjście (Exit).

Opcja Setup pozwala nam uruchomić niektóre skrypty konfiguracyjne systemu np.:

036cae32e57cc082c5f596345c78efca.gif

Pakiety usuwamy poleceniem:

# removepkg nazwa_pakietu

lub we wcześniej opisany sposób przy pomocy pkgtool -> Remove:

3f27229fb5568147d4ca10a7194525ad.gif

Teraz wystarczy zaznaczyć pakiet który chcemy odinstalować i nacisnąć <OK>. Po zaznaczeniu i odinstalowaniu zaznaczonego pakietu/pakietów wyświetlone zostanie okienko informujące, że wszystkie dokonane zmiany zostały zapisane w pliku /var/log/setup/tmp: PKGTOOL.REMOVED oraz, że pkgtool nie usuwa pustych katalogów i jeśli chcemy to możemy to zrobić własnoręcznie:

3aa421fee971c1e0e8074e90ee73a9df.gif

Uaktualnianie pakietów

Z własnego doświadczenia wiem, że jeśli zdobędziemy nowszy pakiet to lepiej najpierw odinstalować stary (removepkg nazwa_starego_pakietu) a dopiero później zainstalować nowy.

Przed usunięciem pakietu, który chcesz uaktualnić nie zapomnij zachować jego plików konfiguracyjnych. Mogą zostać usunięte podczas deinstalacji i czekać Cię będzie ponowna konfiguracja po zainstalowaniu nowej wersji.

Typowe komunikaty podczas uaktualniania pakietu (w tym przypadku Midnight Commandera):

# upgradepkg mc-4.6.0pre1-i386-1.tgz

+==============================================================================
| Upgrading mc-4.5.55-i386-6 package using ./mc-4.6.0pre1-i386-1.tgz
+==============================================================================

Pre-installing package mc-4.6.0pre1-i386-1...

Removing package /var/log/packages/mc-4.5.55-i386-6-upgraded-2003-02-01,03:43:11...
--> Deleting /etc/mc.global
--> Deleting /usr/bin/mcserv
--> Deleting /usr/doc/mc-4.5.55/COPYING
--> Deleting /usr/doc/mc-4.5.55/FAQ
--> Deleting /usr/doc/mc-4.5.55/NEWS
--> Deleting /usr/doc/mc-4.5.55/README
--> Deleting /usr/share/locale/zh_CN.GB2312/LC_MESSAGES/mc.mo
--> Deleting /usr/share/locale/zh_TW.Big5/LC_MESSAGES/mc.mo
--> Deleting empty directory /usr/share/locale/zh_TW.Big5/LC_MESSAGES/
--> Deleting empty directory /usr/share/locale/zh_TW.Big5/
--> Deleting empty directory /usr/doc/mc-4.5.55/

Installing package mc-4.6.0pre1-i386-1...
PACKAGE DESCRIPTION:
mc: mc (Midnight Commander file manager)
mc:
mc: The Midnight Commander is a Norton Commander clone, a program that
mc: manipulates and manages files and directories. Useful, fast, and has
mc: color displays on the Linux console. Mouse support is provided
mc: through the gpm mouse server. This is a lightweight compilation of
mc: mc for use on the text console or in an xterm.
mc:
mc: mc was written by Miguel de Icaza and Mauricio Plaza.
mc:
Executing install script for mc-4.6.0pre1-i386-1...

Package mc-4.5.55-i386-6 upgraded with new package ./mc-4.6.0pre1-i386-1.tgz.

Tworzenie własnego pakietu

Jak już pisałem tworzenie własnego pakietu ma wiele zalet. Po pierwsze możemy go łatwo i szybko zainstalować na wielu komputerach lub po reinstalacji systemu. Po drugie pakiet łatwiej odinstalować - w systemie nie pozostają niepotrzebne plikidzięki czemu jest on bardziej uporządkowany. Po trzecie tworząc pakiet możemy go udostępnić mniej obeznanym ze Slackware użytkownikom.

Tworzenie pakietu jestprawie tym samym co kompilowanie i instalowanie programu ze źródeł z tym, że instalujemy program w wybranym przez nas katalogu - który będzie traktowany jako katalog root (/). Znaczy to, że jeśli program instalował się domyślnie w katalogach /usr/bin, /lib, /usr/man to teraz zainstaluje się w /wybrany_katalog/usr/bin, /wybrany_katalog/lib, /wybrany_katalog/usr/man.

Tworzenie pakietu składa się z sześciu etapów:

  1. Zdobycie kodu źródłowego interesującego nas programu i rozpakowanie go
  2. Konfiguracja i tworzenie pliku[ów] Makefile - ./configure
  3. Sprawdzenie czy plik[i] Makefile zostały poprawnie stworzone
  4. Kompilacja - make
  5. Instalacja w wybranym katalogu - make install
  6. Tworzenie pakietu - makepkg
Tip:
Plik Makefile zawiera informacje dotyczące kompilacji: gdzie zainstalować program, jakiego użyć kompilatora i tak dalej... Tworzony jest poleceniem ./configure.

Jeśli chodzi o pkt 1. to kody źródłowe programów używanych pod Linuksem najłatwiej znaleść na Internecie.

Pod adresem http://www.gnu.org/prep/ftp.html znajdziecie pokaźną listęanonimowych FTP udostępniających oprogramowanie oraz kody źródłowe.

Po zdobyciu kodów źródłowych kompilacja programu w większości przypadków przebiega tak:

# ./configure <-tworzenie pliku Makefile
[...]
# make <- kompilacja programu
[...]
# make install <- instalacja programu

My jednak będziemy chcieli by program został zainstalowany w katalogu innym niż domyślny. Dlatego zanim wydamy polecenie ./configure zobaczymy z jakimi opcjami możemy go wywołać.

# ./configure --help
`configure' configures this package to adapt to many kinds of systems.

Usage: ./configure [OPTION]... [VAR=VALUE]...

To assign environment variables (e.g., CC, CFLAGS...), specify them as
VAR=VALUE. See below for descriptions of some of the useful variables.

Defaults for the options are specified in brackets.

Configuration:
-h, --help display this help and exit
--help=short display options specific to this package
--help=recursive display the short help of all the included packages
-V, --version display version information and exit
-q, --quiet, --silent do not print `checking...' messages
--cache-file=FILE cache test results in FILE [disabled]
-C, --config-cache alias for `--cache-file=config.cache'
-n, --no-create do not create output files
--srcdir=DIR find the sources in DIR [configure dir or `..']

Installation directories:
--prefix=PREFIX install architecture-independent files in PREFIX
[/usr/local]
--exec-prefix=EPREFIX install architecture-dependent files in EPREFIX
[PREFIX]

By default, `make install' will install all the files in
`/usr/local/bin', `/usr/local/lib' etc. You can specify
an installation prefix other than `/usr/local' using `--prefix',
for instance `--prefix=$HOME'.

For better control, use the options below.

Fine tuning of the installation directories:
--bindir=DIR user executables [EPREFIX/bin]
--sbindir=DIR system admin executables [EPREFIX/sbin]
--libexecdir=DIR program executables [EPREFIX/libexec]
--datadir=DIR read-only architecture-independent data [PREFIX/share]
--sysconfdir=DIR read-only single-machine data [PREFIX/etc]
--sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com]
--localstatedir=DIR modifiable single-machine data [PREFIX/var]
--libdir=DIR object code libraries [EPREFIX/lib]
--includedir=DIR C header files [PREFIX/include]
--oldincludedir=DIR C header files for non-gcc [/usr/include]
--infodir=DIR info documentation [PREFIX/info]
--mandir=DIR man documentation [PREFIX/man]

Program names:
--program-prefix=PREFIX prepend PREFIX to installed program names
--program-suffix=SUFFIX append SUFFIX to installed program names
--program-transform-name=PROGRAM run sed PROGRAM on installed program names

System types:
--build=BUILD configure for building on BUILD [guessed]
--host=HOST cross-compile to build programs to run on HOST [BUILD]

Optional Features:
--disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no)
--enable-FEATURE[=ARG] include FEATURE [ARG=yes]
--disable-dependency-tracking Speeds up one-time builds
--enable-dependency-tracking Do not reject slow dependency extractors
--disable-perl-regexp disable perl-regexp
--disable-largefile omit support for large files
--disable-nls do not use Native Language Support

Optional Packages:
--with-PACKAGE[=ARG] use PACKAGE [ARG=yes]
--without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no)
--with-libiconv-prefix=DIR search for libiconv in DIR/include and DIR/lib
--with-included-gettext use the GNU gettext library included here
--without-included-regex don't compile regex; this is the default on
systems with version 2 of the GNU C library
(use with caution on other system)
--with-included-getopt Use the included getopt rather than glibc's

Some influential environment variables:
CC C compiler command
CFLAGS C compiler flags
LDFLAGS linker flags, e.g. -L< lib dir > if you have libraries in a
nonstandard directory < lib dir >
CPPFLAGS C/C++ preprocessor flags, e.g. -I< include dir > if you have
headers in a nonstandard directory < include dir >
CPP C preprocessor

Use these variables to override the choices made by `configure' or to help
it to find libraries and programs with nonstandard names/locations.hC
Jak widać program ten posiada wiele opcji. Nam potrzebne będą opcje, które zaznaczyłem  	w tekście.

OK Teraz znacie już podstawy. Spróbujemy je teraz wykorzystać w praktyce. Poniżej przedstawię kilka przykładów tworzenia pakietów różnych programów, które wchodzą w skład systemu.

Na koniec dodam, że warto się bliżej przyjrzeć poleceniu make a zwłaścza opcji -n.

 

Źródło: http://slackware.asmonet.net