Kategoria: Bez kategorii

  • Kompilacja jądra Linux

    W tym krótkim wpisie opiszę etapy kompilacji jądra Linux.

    Na początek potrzebujemy źródeł. Można je pobrać ze strony kernel.org (w naszym przykładzie najnowszą wersja to 5.4.12) Następnie rozpakowujemy je poleceniem:

    xz -dc linux-5.4.12.tar.xz

    i przechodzimy do nowo utworzonego katalogu:

    cd linux-5.4.12

    Następnie nakładamy dostępne łaty. Twórcy dostarczają dwa rodzaje łat: zwykłe oraz przyrostowe.

    Przy łatach zwykłych przed nałożeniem nowej łaty powinniśmy wpierw usunąć starą, w naszym przypadku sprowadza się to do wydania poleceń (założono, że łaty jak i źródła jądra znajdują się w katalogu nadrzędnym):

    xz -dc ../patch-5.4.12.xz | patch -p1 -R
    xz -dc ../patch-5.4.13.xz | patch -p1

    Przy łatach przyrostowych wystarczy wykonać:

    xz -dc ../patch-5.4.12-13.xz | patch -p1

    Po tych przygotowaniach, uruchamiamy program konfigurujący. Przykładowo oparty o ncurses:

    make menuconfig

    bądź qt:

    make xconfig

    Warto posiłkować się działającym plikiem .config z jakiejś dystrybucji. Po uruchomieniu konfiguracji możemy zaznaczyć lub odznaczyć interesujące nas opcje.

    Budujemy jądro:

    make bzImage

    i moduły:

    make modules

    Następnie przechodzimy do instalacji modułów (parametr przed poleceniem sprawi, że zaoszczędzimy nieco miejsca):

    INSTALL_MOD_STRIP=1 make modules_install

    Pozostaje skopiować jądro w miejsce docelowe:

    cp arch/i386/boot/bzImage /boot/vmlinuz-5.4.13

    i zmienić konfigurację programu rozruchowego.

  • Wiele podobnych zadań, czyli poznaj potęgę powłoki

    Czasem zdarza się, że potrzebne jest wykonanie kilka, kilkanaście (a może więcej) poleceń. Przykładowo, aby móc rozpakować wiele archiwów zip, możemy spróbować wykonać polecenie:

    unzip *.zip

    Niestety program zip potraktuje to jako archiwum wieloczęściowe i zakończy swoje działanie błędem. Każde z tych archiwów powinno zostać rozpakowane za pomocą oddzielnego polecenia. Ale oczywiście nie trzeba tego robić ręcznie. Dużo lepiej do tego zadania wykorzystać narzędzie wbudowane w powłokę.

    Powłoka bash ma wbudowaną pętlę typu „for”. Po więcej informacji można zajrzeć do podręcznika systemowego man (za pomocą polecenia man bash – warto skorzystać z opcji wyszukiwania po wpisaniu znaku „/”).

    Rozwiązanie problemu to zaledwie jedne polecenie:

    for nazwa in *.zip ;do unzip $nazwa;done;

    Dodam jeszcze kilka słów wyjaśnienia. Pętla za każdym razem podstawia za zmienną nazwa jeden z argumentów z listy wskazanej przez słowo kluczowe in (w przykładzie wszystkie pliki z bieżącego katalogu z końcówką „.zip”). A w pętli mamy jedno polecenie (oczywiście jeśli chcemy możemy ich wstawić więcej) które rozpakowuje pojedynczy plik. Po szczegóły odsyłam do podręcznika (man bash).


  • Zmniejszanie rozmiaru zdjęć – program convert

    Zdjęcia zrobione aparatem cyfrowym, zwłaszcza gdy ma on matrycę o dużej ilości pikseli, zajmują wiele miejsca. Nie zawsze jednak potrzebujemy zdjęć o tak ogromnych rozmiarach, zwykle chcemy je obejrzeć na ekranie monitora, w tym przypadku nie muszą być w jakiejś kosmicznej rozdzielczości.

    Innym problemem może być próba wysłania ich przy pomocy poczty elektronicznej, czy też umieszczenie wyników naszej pracy w internecie (nikt chyba nie lubi czekać na „wczytanie” olbrzymiego obrazka). W takim wypadku wpierw przydałoby się przeprowadzić „terapię odchudzającą”.

    Jednym z rozwiązań jest użycie programu convert z pakietu imagemagick. Przykładowo wydając polecenie:

    convert zdjecie.jpg -resize 1024×768 -quality 75 male_zdjecie.jpg

    zmniejszymy rozdzielczość obrazka i ustawimy jakość pliku jpg na 75%.

    Kilka słów wyjaśnienia. Zdjęcie które zmieniamy to zdjecie.jpg, zmniejszony obrazek tomale_zdjecie.jpg. Opcja -resize odpowiada za zmianę rozdzielczości zdjęcia, w powyższym przypadku wynik nie będzie miał szerokości większej niż 1024 pikseli i wysokości większej niż 768 pikseli (przykład dostosowania zdjęć do wyświetlania na monitorze o rozdzielczości 1024×768). Z kolei opcja -quality odpowiada za stopień kompresji formatu JPG, może przyjąć wartości od 0 (najlepsza kompresja, najgorsza jakość) do 100 (najlepsza jakość, najsłabsza kompresja).

    Aby przekształcić wiele zdjęć wystarczy powyższe polecenie umieścić w pętli (tutaj powłoka bash), przykładowo:

    for nazwa in *.jpg; do convert „$nazwa” -resize 1024×768 -quality 75 „male_$nazwa”; done;

    spowoduje zapisanie zmniejszonych kopii plików o rozszerzeniu „.jpg” z przedrostkiem „male_” (oryginały zostaną zachowane).

    Na jaki efekt można liczyć? Wszystko zależy od tego w jakiej rozdzielczości wykonane są zdjęcia. Przykładowo korzystając z powyższego polecenia udało się zmniejszyć miejsce zajmowane przez kilkadziesiąt zdjęć z około 300 do około 10 MB.