]> gitweb.morketsmerke.org Git - mmdev.git/commitdiff
Zakończenie tworzenia 15 rozdziału. Do przeredagowania.
authorxf0r3m <jakubstasinski@protonmail.com>
Wed, 1 May 2024 10:22:20 +0000 (12:22 +0200)
committerxf0r3m <jakubstasinski@protonmail.com>
Wed, 1 May 2024 10:22:20 +0000 (12:22 +0200)
articles/terminallog/Linux.Podstawy.html

index 464a32d026a5c37623cd3e033e056266e7c85f51..5fa24489527f5dbf9ecd625cbef79cb5419b709e 100644 (file)
@@ -12597,6 +12597,255 @@ drwxr-xr-x 3 xf0r3m xf0r3m   60 04-30 18:49 libexec
 drwxr-xr-x 5 xf0r3m xf0r3m  100 04-30 18:49 share
 </pre>
         <h3 id="15.3.2.installationviapackagestool">15.3.2. Instalacja za pomocą narzędzia do tworzenia pakietów</h3>
+        <p>
+          Istnieje możliwość instalacji kompilowanego oprogramowania w taki
+          sposób, aby można było je kontrolować za pomocą mendżera paketów
+          dystrybucji. Dystrybucjami, w których najprościej jest wykonać to
+          zadanie są te oparte na Debianie, ze względu na prostotę twowrzenia
+          pakietów <em>.deb</em>. W tym celu posłużymy się narzędziem
+          <strong>checkinstall</strong>.
+          Domyślnie może nie występować w naszym systemie, ale możliwe jest
+          ono do zainstalowania z repozytorium. Na chwilę obecną to program
+          zawiera błąd i aby móc zbudować pakiet należy podać opcję:
+          <strong>--fstrans=0</strong>. Jeśli nie chcemy aby pakiet
+          automatycznie instalował się w naszym systemie podajemy opcje:
+          <em>--install=no</em>. Podczas tworzenia pakietu wymagane będzie
+          podanie opisu naszęgo pakietu oraz sprawdzenie czy skrypt dobrze
+          odczytał takie informacje jak nazwa pakietu, jego wersja czy
+          docelowa architektura. Te informacje można poprawić. Po zatwierdzeniu
+          tych informacji pakiet zostaje zbudowany. Po zakończeniu budowania
+          będzie go można zainstalować za pomocą polecenia <em>dpkg</em>.
+        </p>
+<pre class="code-block">
+󱩊 xf0r3m@vm-83a53d4/ coreutils-9.5/󰯆 checkinstall --install=no --fstrans=0
+</pre>
+        <h3 id="15.3.3.configureoptions">15.3.3. Opcje skyptu configure</h3>
+        <p>
+          Po za zaprezentowaną opcją <em>--prefix</em>, która zmienia katalog
+          docelowy dla instalacji oprogramowania w systemie, skrypt
+          <em>configure</em> posiada wiele innych przydatnych opcji. Sam skrypt
+          posiada opcję <em>--help</em>, jednak informacji jest na tyle dużo,
+          że cięzko znaleźć tę jedną potrzebną, dlatego poniżej zamieszczam
+          kilka najważniejszych z nich:
+        </p>
+        <ul>
+          <li><strong>--bindir=<em>katalog</em></strong> - pliki wykonywalne
+            będą instalowane w podanym <em>katalogu</em>.</li>
+          <li><strong>--sbindir=<em>katalog</em></strong> - programy systemowe
+            będą instalowane w podanym <em>katalogu</em>.</li>
+          <li><strong>--libdir=<em>katalog</em></strong> - biblioteki
+            wykonywalne będą instalowane w podanym <em>katalogu</em>.</li>
+          <li><strong>--disable-shared</strong> - opcja ta zakazuje tworzenia
+            bibliotek współdzielonych. Ta opcja może pomóc w zapobiegnięciu
+            problemów z bibliorekami współdzielonymi.</li>
+          <li><strong>--with-<em>pakiet</em>=<em>katalog</em></strong> - ta
+            opcja służy do wskazania bibliotek zainstalowanych w
+            niestandardowej lokalizacji. Jednak nie wszystkie skrypty
+            rozpoznają te opcję.</li>
+        </ul>
+        <h3 id="15.3.4.configureenv">15.3.4. Zmienne środowiskowe</h3>
+        <p>
+          Za pomocą skryptu <em>configure</em> możemy przekazać do narzędzia
+          <em>make</em> makra dla kompilatora, konsolidatora czy preprocesora
+          języka C. Skonfigurowanie zmiennych środowiskowych przed
+          uruchomieniem skryptu daje nam możliwość dostosowywania kompilacji
+          do własnych potrzeb. 
+        </p>
+        <p>
+          Zmienne środowiskowe możemy podawać przed w tym samy wierszu
+          polecenia przed uruchomieniem skryptu:
+        </p>
+<pre class="code-block">
+$ CPPFLAGS=-DDEBUG ./configure
+</pre>
+        <p>
+          Lub jako jego opcje:
+        </p>
+<pre class="code-block">
+$ ./configure CPPFLAGS=-DDEBUG
+</pre>
+        <p>
+          Na powyższych przykładach przedstawiłem zmienną środowiskową
+          preprocesora, ale również dostępna jest <em>LDFLAGS</em>
+          (zmienna środowiskowa konsolidatora) oraz <em>CFLAGS</em> (zmienna
+          środowiskowa kompilatora). Ich wartości są identyczne jak opcje,
+          które przekazywaliśmy do wyżej wymienionych programu - o czym warto
+          pamiętać.
+        </p>
+        <h3 id="15.3.5.gnuautoconfcreatedtargets">15.3.5. Cele tworzone przez GNU autoconf</h3>
+        <p>
+          Po za standardowymi celami takimi jak <em>all</em> czy <em>install</em>,
+          skrypt <em>configure</em> w pliku <em>Makefile</em> tworzy kilka
+          innych celów. Oto, niektóre z nich, część z nim została już opisana
+          w poprzednim rozdziale.
+        </p>
+        <ul>
+          <li><strong>make clean</strong></li>
+          <li><strong>make distclean</strong></li>
+          <li><strong>make check</strong></li>
+          <li><strong>make install-strip</strong> - ten cel działa podobnie
+            standardowego <em>make install</em>, jednak usuwa tablice symboli
+            oraz informacje dla debugera z utworzonych bibliotek oraz plików
+            wykonywalnych. Zainstalowany w ten sposób pakiet oprogramowania
+            zabiera mniej miejsca na dysku.</li>
+        </ul>
+        <h3 id="15.3.6.gnuautoconflogfile">15.3.6. Plik dziennika systemu GNU autoconf</h3>
+        <p>
+          Jeśli podczas pracy skryptu <em>configure</em> zdarzy się coś
+          nieprzewidzianego jakiś błąd lub problem, to wówczas możemy posłużyć
+          się plikiem dziennika tworzonym podczas pracy skryptu. Plik zowie się
+          <em>config.log</em> i zewzględu na to, że zawierać bedzie on wiele
+          danych to najlepiej jest go przeglądać od końca (po otwarciu pliku
+          za pomocą narzędzia <em>less</em> naciskamy <strong>G</strong>
+          (<em>Shift+g</em>), przeniesie nas to na koniec pliku.).
+        </p>
+        <h3 id="15.3.7.pkg-configtool">15.3.7. Narzędzie pkg-config</h3>
+        <p>
+          Narzędzie <strong>pkg-config</strong> zostało zaprojektowane w celach
+          rozprowadzania informacji o lokalizacji bibliotek, plików
+          nagłówkowych, a także opcji wymaganych do poprawnego skompilowania i
+          skonsolidowania programu. Składnia tego polecenie prezentuje się
+          w następujący sposób:
+        </p>
+<pre class="code-block">
+$ pkg-config opcje pakiet1 pakiet2 ... pakietN
+</pre>
+        <p>
+          Przykładowo jeśli do konsolidacji naszego programu potrzebujemy
+          dodać bibliotekę kompresującącą możemy wydać poniższe zapytanie.
+          W odpowiedzi otrzymamy opcję, którą należy dodać do argumentów
+          konsolidatora.
+        </p>
+<pre class="code-block">
+󱩊 xf0r3m@laptop-69924a2/ ~/󰯆 pkg-config --libs zlib
+-lz 
+</pre>
+        <p>
+          Za pomocą opcji <em>--list-all</em> możemy wyświetlić informacje na
+          temat wszystkich bibliotek, o których informacje mogą być dostępne
+          przez <em>pkg-config</em>, co już może sugerować nam, że nie
+          wszystkie biblioteki są dostępne w jego zasobach.
+        </p>
+<pre class="code-block">
+󱩊 xf0r3m@laptop-69924a2/ ~/󰯆 pkg-config --list-all
+blkid                          blkid - Block device id library
+dbus-1                         dbus - Free desktop message bus
+egl                            EGL - EGL library and headers
+expat                          expat - expat XML parser
+form                           form - ncurses 6.4 add-on library
+formw                          formw - ncurses 6.4 add-on library
+geoclue-2.0                    Geoclue - The Geoinformation Service
+...
+</pre>
+        <p>
+          Działanie programu <em>pkg-config</em> opiera sie o pliki
+          <em>.pc</em>, które mogą być rozprowadzane w pakietach naszej
+          dystrybucji w momencie instalacji bibilioteki, oczywiście zarządca
+          pakietu musi utworzyć taki pliki. Polecenie przeszukuje katalog
+          <em>lib/pkg-config</em> swojego przedrostka instalacji (prefiksu),
+          jeśli np. jego prefiksem jest <em>/usr</em>, to będzie on
+          przeszukiwać katalog <em>/usr/lib/pkg-config</em>.
+        </p>
+        <p>
+          Jeśli chcemy dodać do zasobów <em>pkg-config</em> bibliotekę o
+          niestandardowym miejscu instalacji, to możemy wykorzystać do tego
+          dwie metody. Pierwsza z nich jest zwykłą kopią pliku <em>.pc</em>
+          do domyślnego katalogu narzędzia lub utworzenia dowiązania
+          symbolicznego. Drugą opcją jest uzupełnienie zmiennej
+          <em>PKG_CONFIG_PATH</em>, o dodatkowy katalog. Jednak to rozwiązanie
+          niesprawdza się w obrębie całego systemu.
+        </p>
+        <h2 id="15.4.manualinstallationprosandcons">15.4. Zalety i wady ręcznej instalacji</h2>
+        <p>
+          Na poziomie podstawowym osbsługi systemów Linuksowych, nikt nie
+          pownien od was wymagać umiejętności ręcznej instalacji oprogramowania
+          w systemie. Raczej będziemy polegać na tym co oferują nam repozytoria
+          dystrybucji. Obecnie dostawcy różnych programów często przygotowują
+          pakiety systemu zarządzania oprogramowaniem dla wielu wiodących
+          dystrybucji, dlatego też ręczna instalacja spada do rangi pewnego
+          rodzaju niszy. Budowanie może zająć naprawdę wiele czasu i nie
+          zawsze mozemy osiągnąć ządany skutek. Chcemy skompilować jakiś
+          program, okazuje się że brakuje nam bibliotek w takiej wersji, więc
+          musimy przeprowadzić kompilację bibliotek w takiej wersji w ten
+          sposób nasza praca związana tym zagadnieniem się nawarstawia.
+          Weźmy pod uwagę też sprzęt. Nie każdy dysponuje potężną maszyną,
+          która będzie wstanie kompilować duże programy w ciągu kilku minut.
+          Większość użytkowników dystrybucji Linuksa, do których adresowany
+          jest ten materiał, raczej korzysta z budżetowego laptopa z marketu.
+          Uciekła do MS Windows, w celu polepszenia swoich doświadczeń z
+          komputerem, bez reklam czy najważniejszej rzeczy w tym systemie czyli
+          aktualizacji. Tak więc kompilacja na takim sprzęcie może zająć
+          dłuższą chwilę, co sprawia, że budowanie od podstaw oprogramowania
+          traktowane jest raczej jako ostateczność.
+        </p>
+        <p>
+          Nie mniej jednak taka instalacja oprogramowania w systemie nie jest
+          bez zalet. Najważniejszymi z nich jest dostarczenie do naszych
+          systemów najnowszych wersji programów, dostosowania ich możliwości
+          oraz funkcjonalności przy użyciu opcjonalnych bibliotek czy samych
+          opcji kompilacji do naszych potrzeb. Nawet lepiej, istnieją całe
+          dystrybucje, które opierają się tylko i wyłącznie o ręczną instalację
+          lub zawierają takie programy do zarządzania oprogramowaniem, które i
+          tak koniec końców sprowadzania się do ręcznej instalacjacji
+          przeprowadzonej w nieco bardziej bezobsługowy sposób.
+        </p>
+        <p>
+          Oczywiście zachęcam do ręcznej instalacji, tylu programów ilu się da.
+          Dzięki temu uczymy się, poznajemy te programy. Domyślnym miejscem
+          przeznaczonym na ręczną instalację jest katalog <em>/usr/local</em>.
+        </p>
+        <h2 id="15.5.usingpatches">15.5. Stosowanie poprawek</h2>
+        <p>
+          Poprawki są nieodłącznym elementem życia oprogramowania. Poprawki
+          są dystrybułowane za pomocą takich narzędzi jak system kontroli
+          wersji <em>Git</em>. Mogą one wprowadzać szereg zmian do kodu
+          źródłowego, poprawiać błedy lub uzupełaniać oprogramowanie o nowa
+          funkcjonalność. Poprawki tworzone są zapomocą polecenia
+          <em>diff</em>. Poniżej znajduje się nagłówek pliku poprawki
+          wprowadzający zamiany, które obecnie czytasz do tego materiału.
+        </p>
+<pre class="code-block">
+diff --git a/articles/terminallog/Linux.Podstawy.html b/articles/terminallog/Linux.Podstawy.html
+index 464a32d..09c06a7 100644
+--- a/articles/terminallog/Linux.Podstawy.html
++++ b/articles/terminallog/Linux.Podstawy.html
+@@ -12597,6 +12597,212 @@ 
+</pre>
+        <p>
+          Wszysktie linie, które są dodatkowo wprowadzena oznaczne symbolem
+          plusa (<strong>+</strong>) najczęściej koloru zielonego. Jeśli nasz
+          terminal obsługuje kolory. Natomiast usunięcia oznaczane są za
+          pomocą symbolu minusa (<strong>-</strong>) najczęściej koloru
+          czerwonego. Linie z minusem (linie na czerwono) zawierają również
+          treść, która występowała w pliku przed wprowadzeniem zmian. Warto
+          mieć to na uwadze.
+        </p>
+        <p>
+          Pliki poprawek są tworzone za pomocą polecenia <em>diff</em>,
+          natomiast instalowane są za pomocą polecenia <strong>patch</strong>.
+          Przyczym podczas instalacji poprawek istotne jest dobre umieszczenie
+          poprawki w katalogu z kodem źródłowym. Załóżmy, że mamy plik
+          poprawki, który obejmuje plik <em>src/plik.c</em>. Wówczas taki
+          plik poprawki należy nałożyć w katalogu nadrzędnym katalogu
+          <em>src</em>, wydając poniższe polecenie:
+        </p>
+<pre class="code-block">
+$ patch -p0 &lt; plik_poprawki
+</pre>
+        <p>
+          Opcja <code class="code-inline">-p0</code> usunie dokładnie 0
+          poprzedzających ukośników ze ścieżki odczytanej w poprawce aby
+          zlokalizować plik. Jest to tyle istotne, ponieważ mogą występować
+          różnice w lokalizacji instalacji na komputerze osoby tworzącej
+          taką poprawkę a jej stosującej. Rozważmy taki przykład, że pliku
+          poprawki widnieje taka ścieżka jak: <em>patches-3.42/src/plik.c</em>.
+          W naszej instalacji nie ma tego katalogu <em>patches-3.42</em>, to
+          aby zastosować poprawkę musimy przejść do katalogu zawierającego
+          katalog <em>src</em> i wydać następujące polecenie:
+        </p>
+<pre class="code-block">
+$ patch -p1 &lt; plik_poprawki;
+</pre>
       </div>
                        <p style="margin: 15px; padding: 0; outline: 0;">
                                2024; COPYLEFT; ALL RIGHTS REVERSED;