Archiwum zip - unsupported compression method 99

Próbując w Środowisku gnome (u mnie Ubuntu 21.04) otworzyć archiwum zip, które dodatkowo posiada hasło dostaje komunikat, że otwarcie się nie powidło. Używając prawego przycisku myszy na pliku archiwum zip i wybraniu "Rozpakuj tutaj" tworzy się puste archiwum. W konsoli sprawdzamy archiwum poleceniem: file archiwum.zip otrzymujemy komunikat

archiwum.zip: Zip archive data, at least v2.0 to extract

Zwykłe polecenie unzip archiwum.zip również nic nie rozpakowywuje jednocześnie informuje komunikatem

unsupported compression method 99

Rozwiązaniem jest zainstalowanie pakietu p7zip-full

Nikola napędza stronę satkas.github.io

Wybieram system generowania statycznej treści Nikola. Ostatnio testowałem Pelicana (również oparty o pythona) ale jego wygląd i funkcjonalność po wyjęciu z tzw pudełka skłoniły mnnie do potestowania systemu Nikola. Cechy, które mnie przekonały:

  • Po zainstalowaniu środowiska (innym razem napiszę co i jak) i wygenerowaniu kilku postów praktycznie nadaje się do publicznej prezentacji
  • Narzędzie nikola wydaje się mieć dużo więcej możliwości od Pelican-a (oczywiście jest to stwierdzenie powierzchowne.)
  • Proces wydawania nowych wersji jest szybszy.
  • Odpowiada mi uporządkowanie domyślnego tematu graficznego
  • Do wyświetlania treści potrzebuję tylko serwera www (np httpd, nginx. Ja korzystam z githuba)
  • Nie ma bazy danych, nie ma zapytań do bazy, jest więc trochę bezpieczniej

Rozszerzenie partycji w wirtualnym systemie (cfdisk)

Używam KVM-a jako wirtualizatora. Przychodzi czas kiedy trzeba rozszerzyć partycję na jednym z systemów gościa.

Laboratorium:

Host:

#lsb_release -a
No LSB modules are available.
Distributor ID:    Ubuntu
Description:    Ubuntu Hirsute Hippo (development branch)
Release:    21.04
Codename:    hirsute
Hypervizor: KVM (libvirtd)
libvirtd -V
libvirtd (libvirt) 7.0.0

System Gość: Fedora 34 (beta)

System posiada jeden dysk /dev/vda (24 GB) i partycje mają LVM-a. Powiększę jedną partycję o 2 GB. System gość cały czas jest online

  • Wchodzimy do konsoli i wpisujemy virsh.
  • Sprawdzamy jakie mamy systemy poprzez wydanie komendy list --all
Id   Name          State
------------------------------
 3    fedora        running
  • Sprawdzamy jak nazywa się dysk dla fedora. Wprowadzamy polecenie domblklist fedora
Target   Source
------------------------------------------------
 vda      /var/lib/libvirt/images/fedora.qcow2
 sda      -
  • Zwiększamy dysk dla systemu Fedora. Dysk jest plikiem qcow2. Wprowadzamy polecenie blockresize fedora vda 26GB
  • Wychodzimy z virsh
  • Wchodzimy do systemu gościa fedora
  • Wydajemy polecenie jako użytkownik root fdisk -l i patrzymy jak nazywa się dysk widziany przez fedorę
#fdisk -l

Dysk /dev/vda: 24 GiB, bajtów: 25769803776, sektorów: 50331648
Jednostki: sektorów, czyli 1 * 512 = 512 bajtów
Rozmiar sektora (logiczny/fizyczny) w bajtach: 512 / 512
Rozmiar we/wy (minimalny/optymalny) w bajtach: 512 / 512
Typ etykiety dysku: dos
Identyfikator dysku: 0x2ed117a3

Urządzenie Rozruch Początek   Koniec  Sektory Rozmiar Id Typ
/dev/vda1  *           2048  2099199  2097152      1G 83 Linux
/dev/vda2           2099200 50331647 48232448     23G 8e Linux LVM


Dysk /dev/mapper/fedora_fedora-root: 23 GiB, bajtów: 24691867648, sektorów: 48226304
Jednostki: sektorów, czyli 1 * 512 = 512 bajtów
Rozmiar sektora (logiczny/fizyczny) w bajtach: 512 / 512
Rozmiar we/wy (minimalny/optymalny) w bajtach: 512 / 512


Dysk /dev/zram0: 1,93 GiB, bajtów: 2071986176, sektorów: 505856
Jednostki: sektorów, czyli 1 * 4096 = 4096 bajtów
Rozmiar sektora (logiczny/fizyczny) w bajtach: 4096 / 4096
Rozmiar we/wy (minimalny/optymalny) w bajtach: 4096 / 4096
  • Interesuje nas dysk /dev/vda2 na którym jest LVM i jest tam główny system plików
  • Wprowadzamy w konsoli cfdisk /dev/vda
  • Zaznaczamy kursorem pozycję partycji /dev/vda2 i klikamy [Zmiana rozmiaru]
  • Narzędzie podpowiada nam rozmiar partycji powiększony o wolną przestrzeń. Klikamy enter i Zapisz. Potwierdzamy wpisując "tak" i klikamy Zakończ
  • Partycja jest powiększona ale file system tego jeszcze nie widzi.
  • Wykonujemy polecenie pvs
PV         VG            Fmt  Attr PSize   PFree
/dev/vda2  fedora_fedora lvm2 a--  <23,00g    0
  • Wykonujemy partprobe /dev/vda i później pvresize /dev/vda2. Sprawdzamy co się zmieniło poprzez komendę pvs
PV         VG            Fmt  Attr PSize   PFree
/dev/vda2  fedora_fedora lvm2 a--  <25,00g 2,00g
  • Widać, że mamy dodatkowe 2 GB wolnego miejsca.
  • Wydajemy komendę vgs aby potwierdzić, że pojawiło się 2 GB wolnego miejsca
VG            #PV #LV #SN Attr   VSize   VFree
fedora_fedora   1   1   0 wz--n- <25,00g 2,00g
  • Teraz rozszerzamy nasz lvm. Polecenie lvs pokazuje listę woluminów logicznych
LV   VG            Attr       LSize   Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert

root fedora_fedora -wi-ao---- <23,00g

#lvresize -r -l +100%FREE /dev/fedora_fedora/root
  Size of logical volume fedora_fedora/root changed from <23,00 GiB (5887 extents) to <25,00 GiB (6399 extents).
  Logical volume fedora_fedora/root successfully resized.
meta-data=/dev/mapper/fedora_fedora-root isize=512    agcount=7, agsize=983040 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=1, sparse=1, rmapbt=0
         =                       reflink=1    bigtime=0
data     =                       bsize=4096   blocks=6028288, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0, ftype=1
log      =log wewnętrzny        bsize=4096   blocks=2560, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =brak                   extsz=4096   blocks=0, rtextents=0
bloki danych zmienione z 6028288 na 6552576

Windows CMD - brak dostępu

Bardzo często administratorzy Windowsa/AD blokują standardowemu użytkownikowi dostęp do powloki cmd.

Obejściem może tutaj być wykonanie poniższych czynności:

Otwieramy menu start i zaczynamy wpisywać:

cmd /k jakiś_tool

i klikamy enter

Jeśli narzędzie ma jakieś opcje to musimy zamknąć ten wpis w podwójne apostrofy

cmd /k "ipconfig /all"

Jest jeszcze jedna trudność. Jeśli w poleceniu np scieżka ma spację trzeba zrobić to w ten sposób:

cmd /k "certutil -hashfile "C:\Program Files (x86)\plik.txt" MD5"

Windows CMD - Sprawdzenie sumy kontrolnej md5 pliku

Czasami trzeba sprawdzić sumę kontrolną pliku. W linuksie jest to bardzo proste poprzez użycie narzędzi typu md5sum sha256sum. Ale w Windowsie? Moim zdaniem narzędzie do sprawdzania sum kontrolnych powinno być na wysposarzeniu systemu operacyjnego bez instalowania jakiś zewnętrznych paczek. Szukałem, szukałem i się doszukałem

certutil

Tak wiem to jest narzędzie do zarządzania certyfikatami. Można jednak nim sprzwdzić sumę kontrolną pliku i jest domyślnie w systemie.

Sprawdzenie sumy kontrolnej md5 pliku

certutil -hashfile plik MD5

Bash - sprawdzenie czy proces jest aktywny z najmniejszymi uprawnieniami

Bash Musiałem zrobić skrypt gdzie odpytuję usługi i sprawdzam czy "żyją" i podaję kod wyjśćia dla nagiosa.

Wymaganie było aby zrobić to przy jak najmniejszym nadawaniu uprawnień.

Niby prosta komenda systemctl is-active *.service jest dobra ale zdalne wykonanie skryptu przez nrpe nie chciało zaskoczyć. Czały cas w logach były komunikaty o u słabych uprawnieniach

Skrypt wykonałem w Bash-u zaprzęgając do tego poczciwą komendę ps. Reszta to już tylko tablice. Dodatkowo problemem było jeszcze nazewnictwo usług. Np Tomcat posiada proces java, a baza danych PostgreSQL uruchamia proces posmaster. W skrypcie uwzględniłem taki przypadek. Choć wiem, że nie jest elastyczny (można zrobić porównanie po stringach, a nie po indeksach).

#!/bin/bash

nameS=(httpd java postmaster)
licznik1=0
for i in ${nameS[@]}
do
    ps -C $i >/dev/null
    if [ $? -eq 0 ];then 
        if [ $licznik1 -eq 1 ];then
            wynikP[$licznik1]="Service Tomcat is active"
            ((licznik1++))
        elif [ $licznik1 -eq 2 ];then
                        wynikP[$licznik1]="Service PostgreSQL is active"
        else    
            wynikP[$licznik1]="Service $i is active"
            ((licznik1++))
        fi
    else
        if [ $licznik1 -eq 1 ];then
                        wynikF[$licznik1]="Service Tomcat is inactive"
                        ((licznik1++))
                elif [ $licznik1 -eq 2 ];then
                        wynikF[$licznik1]="Service PostgreSQL is inactive"
                else
                        wynikF[$licznik1]="Service $i is inactive"
                        ((licznik1++))
                fi
    fi
done

if [ ${#wynikP[@]} -eq 3 ];then
    echo "All services is active: ${wynikP[@]}"
    exit 0
else
    echo "${wynikF[@]}"
    exit 2
fi

Aktualizacja: 20 wrzesień 2020r.

Skorygowałem skrypt na taki, który nie używa tablic indeksowych tylko polecenia case. Wydaje się prostszy.

#!/bin/bash

nameS=(upowerd gnome-shell nautilus)
SUCCESS=""
FAILED=""

for i in ${nameS[@]}
do
    ps -C $i >/dev/null
    if [ $? -eq 0 ];then 
        case $i in
          "upowerd")
            SUCCESS+="Service $i is active " ;;
          "gnome-shell")
            SUCCESS+="Service Gnome is active " ;;
          "nautilus")
            SUCCESS+="Service Menadzer plikow is active" ;;
        esac
        else
          case $i in
          "upowerd")
            FAILED+="Service $i is deactive ";;
          "gnome-shell")
            FAILED+="Service Gnome is deactive ";;
          "nautilus")
            FAILED+="Service Manadzer plikow is deactive";;
        esac
    fi
done

if [ -z "$FAILED" ];then
    echo "$SUCCESS"
    exit 0
else
    echo "$FAILED"
    exit 2
fi

CentOS - NRPE: Unable to read output

Jeśli mamy skonfigurowaną na kliencie usługę nrpe do monitorowania przez nagios/centreon na Centosie/RedHacie/Fedorze (generalnie tam gdzie włączony jest Selinux) możemy otrzymać zwrot w postaci takiego komunikatu:

NRPE: Unable to read output

Okazuje się, że odpowiedzialny za ten stan jest Selinux. Po prostu nie pozwala zdalnie wykonać skryptu, który wrzuciliśmy do lokalizacji:

/usr/lib64/nagios/plugins/

U mnie chodziło o skrypt perlowy check_ifutil.pl

Rozwiązanie 1:

Wykonujemy komendę:

sudo chcon -t nagios_unconfined_plugin_exec_t /usr/lib64/nagios/plugins/check_ifutil.pl
Rozwiązanie 2:

Jeśli nie masz włączonego SElinuxa to przyczyną może być brak uprawnień do wykonywania skryptu. Wykonaj więc:

chmod +x nazwa_pliku

Bash - generowanie hasła

Bash Jest wiele sposobów na wygenerowanie hasła. Służą do tego wyspecjalizowane programy(pwgen, keepass itp). Link do tej strony pokazuje "ocean możliwości". Można również samemu sobie stworzyć automat w postacji skryptu bash. Bash się do tego nadaje idealnie.

#!/usr/bin/env sh

sumaZnakow='16'
probkiHasel='6'

#opcja z argumentami
#sumaZnakow=$1
#probkiHasel=$2

echo "Generowanie $probkiHasel haseł. Hasło ma długość $sumaZnakow znaków"

for ((n=0; n<$probkiHasel; n++))
 do dd if=/dev/urandom count=1 2> /dev/null | uuencode -m - | sed -ne 2p | cut -c-$sumaZnakow 
done

Wartości dwóch pierwszych zmiennych można zastąpić argumentami $1, $2

Wtedy wywołanie będzie:

bash generowanieHasla.sh 16 6
Aktualizacja

W Ubuntu (u mnie 20.04) trzeba doinstalować pakiet sharutils aby można było używać narzędzia uuencode. Zmodyfikowałem zatem skrypt aby automatycznie doinstalowywał pakiet.

#!/usr/bin/env sh

sumaZnakow='16'
probkiHasel='20'

[ -f /usr/bin/uuencode ] &&  echo "Generowanie Haseł" ||  echo "Brak zainstalowanego pakietu uuencode $(sudo apt install -q sharutils -y)"
#opcja z argumentami
#sumaZnakow=$1
#probkiHasel=$2

echo "Generowanie $probkiHasel haseł. Hasło ma długość $sumaZnakow znaków"

for ((n=0; n<$probkiHasel; n++))
 do dd if=/dev/urandom count=1 2> /dev/null | uuencode -m - | sed -ne 2p | cut -c-$sumaZnakow 
done

KVM - zmiana na żywo rozmiaru "file" dysku - bez LVM-a

iKVM Czasami staniemy przed sytuacją zapełnienia dysku w maszynie wirtualnej.

Jeśli używamu KVM i za dysk służy nam plik (qcow2) możemy dokonać zmiany rozmiaru poprzez standardowe narzędzia.

Najpierw identyfikujemy nasze maszyny wirtualne

virsh list --all
Id Name      State
----------------------------
1  centos8-2 running
-  centos8   shut off
-  debian10  shut off
-  win10     shut off

Póżniej sprawdzamy jaki rodzaj pamięci masowej podpięty jest pod maszynę wirtualną

virsh domblklist centos8-2

Target  Source
------------------------------------
vda     /home/tk/vm/Resize.qcow2
sda     -

Widzimy, że za dysk służy plik. Aby sprawdzić informacje o takim file dysku użyjemy polecenia:

sudo qemu-img info /home/tk/vm/Resize.qcow2

Niestety aby otrzymać informację musimy wyłączyć maszynę.

Nie o to nam przecież chodzi. Musimy wszystko przeprowadzić na działającej maszynie.

Użyjemy do tego polecenia:

virsh qemu-monitor-command centos8-2 info block --hmp

libvirt-2-format: /home/tk/vm/Resize.qcow2 (qcow2)
    Attached to: /machine/peripheral/virtio-disk0/virtio-backend
    Cache mode: writeback

sata0-0-0: [not inserted] Attached to: sata0-0-0 Removable device: not locked, tray closed

Tutaj mamy więcej danych. Lub możemy wykorzystać poprzednie polecenie ale w rozszerzonym formacie:

virsh domblklist centos8-2 --details

Type Device Target Source
----------------------------------------------------
file disk   vda /home/tk/vm/Resize.qcow2
file cdrom  sda -

Następnie dokonujemy rozszeżenia dysku

virsh blockresize centos8-2 vda 20G
Block device 'vda' is resized

Sprawdzamy fdisk-iem czy powiększył nam się dysk

fdisk -l

Ostatnim krokiem jest rozszeżenie filesystemu (u mnie główna partycja)

Najpierw na maszynie wirtualnej instalujemy paczkę:

Dla Ubuntu

sudo apt install cloud-guest-utils

dla CentOS-a

sudo yum install cloud-utils-growpart

Poniższym poleceniem wskazujemy dysk i numer partycji do wypełnienia (u mnie 3). Jak mamy ponumerowane partycje na dysku możemy sobie sprawdzić narzędziem parted. Po wykonaniu polecenia parted, wpisujemy print. Kolumna Number pokazuje nam partycje ponumerowane.

growpart /dev/vda 3

Na sam koniec wykonujemy rozszerzenie na filesytemie

xfs_grows /

BASH - spacje, spacje, spacje

Bash Świat nie jest idealny. Jednym z wielu aspektów, które obrazują nam taki obraz świata są przyzwyczajenia w tworzeniu plików i katalogów.

Według tzw "świata *nixowgo" pliki/katalogi powinno się tworzyć bez spacji aby późniejsze przetwarzanie nie powodowało problemów. W swiecie windows-a nie ma to większego znaczenia i system ten "przyzwyczaił" ludzi do tworzenia nazw plików i katalogów tak jakby mieli napisać krótki esej.

Aby w Linuksie obejść problem spacji możemy posłużyć się pętlą while, która przetwarza pliki/wyjśćia innych poleceń linia po lini.

I tak jeśli chcemy coś zrobić z plikiem (np skopiować, przenieść w iine miejsce) możemy zastosować rozwiązanie:

while read p;do
  mv "${p}" "/tmp/${p}"
done <<< $(find . -mindepth 1 -maxdepth 1 -type f ! -name ".*")

Pętla filtruje tylko pliki i przenosi pliki do katalogu /tmp

Komenda

find . -mindepth 1 -maxdepth 1 -type f ! -name ".*"

wyszukuje tylko pliki w katalogu, którym wykonywany jest skrypt i nie bierze pod uwagę tzw plików ukrytych

Nie ma znaczenia czy plik ma spację w nazwie.