udevadm i udisksctl

  1. Zaloguj się na maszynę wirtualną i przeanalizuj działanie komendy lspci. W szczególności sprawdź jakim dyskom odpowiadają urządzenia:

    00:06.0 SCSI storage controller: Red Hat, Inc. Virtio block device
    00:07.0 SCSI storage controller: Red Hat, Inc. Virtio block device
    

    Porównaj wyniki działania komendy lspci z ls -l /dev/disk/by-path.

  2. Pobierz skrypt pcictl (wget http://jkob.fizyka.umk.pl/labul/scripts/pcictl) i zapoznaj się z jego działaniem (pcictl -h). Przy pomocy tej komendy usuń i dodaj drugi dysk. Przy pomocy drugiej konsoli obserwuj komunikaty podsystemu udev (udevadm monitor).

  3. Powtórz poprzednie ćwiczenie obserwując działanie podsystemu udev przy pomocy komendy journalctl -xb -f -u systemd-udevd. Jak zmienia się gadatliwość podsystemu, jeśli zmieniać priorytet rejestrowanych zdarzeń (udevadm control --log-priority=debug|info)?

  4. Przy pomocy skryptu pcictl usuń i dodaj trzeci z interfejsów ethernetowych (eth2). Przy pomocy drugiej konsoli obserwuj komunikaty podsystemu udev (udevadm monitor).

  5. Pobierz skrypt udevctl (wget http://jkob.fizyka.umk.pl/labul/scripts/udevctl) i zapoznaj się z jego działaniem (udevctl -h). Przy pomocy tej komendy zapoznaj się z rodzajem i sposobem gromadzenia przez podsystem udev informacji o urządzeniach blokowych i interfejsach sieciowych.

  6. Pracując w trybie konsolowym, tj. via folavirt7, wykonaj komendę modprobe -r virtio-net i wykorzystaj komendę udevctl do ponownego zainicjowania wybranych urządzeń obserwując jednocześnie działanie podsystemu udev (udevadm monitor).

  7. Utwórz plik /etc/udev/rules.d/20-block.rules i umieść w nim regułę, która spowoduje, że drugi z dysków (/dev/vdb) będzie dostępny pod nazwą /dev/scratch (wykorzystaj udevctl do utworzenia odpowiedniej reguły).

  8. Zmodyfikuj regułę z poprzedniego zadania w taki sposób, aby po dodaniu urządzenia był automatycznie wykonywany skrypt 20-block.sh, który wykonuje następujące czynności:

    • zakłada tablicę msdos

    • tworzy jedną partycję obejmującą cały dysk

    • zakłada na niej system plików ext4

    • montuje ten system plików w /mnt/scratch i tworzy w tym katalogu kopię katalogu /etc

    Zob. także zad. 8-10 w sekcji mount.

  9. Utwórz plik /etc/udev/rules.d/70-net.rules i umieść w nim regułę, która spowoduje, że trzeci z interfejsów ethernetowych będzie dostępny pod nazwą em3.

    W celu sprawdzenia, czy reguła zadziałała trzeba wyładować i ponownie załadować moduł obsługujący interfejsy ethernetowe. Dla maszyn wirtualnych trzeba to zrobić przy pomocy komendy:

    # (modprobe -r virtio_net; modprobe virtio_net) &
    

    Jak ulega zmianie działanie podsystemu udev, jeśli w regule zmieniającej nazwę interfejsu, NAME=”em3” zastąpić przez NAME:=”em3”? Umieść w 70-net.rules dwie reguły dotyczące zmiany nazwy tego samego interfejsu

    ... NAME="em4"
    ... NAME="em5"
    

    i spraw ich działanie, a następnie zamień je na

    ... NAME:="em4"
    ... NAME:="em5"
    

    i ponownie sprawdź ich działanie.

  10. Utwórz partycję /dev/vdb1, załóż na niej system plików ext4, utwórz podkatalog labul i uczyń użytkownika labul właścicielem (także grupowym) tego katalogu. Zaloguj się jako użytkownik labul i zapoznaj się z działaniem komendy udisksctl. Spróbuj przy pomocy tej komendy uzyskać dostęp do utworzonego wcześniej na urządzeniu /dev/vdb1 katalogu labul. Jakie prawa dostępu ma użytkownik labul do tego katalogu? Gdzie ten katalog się znajduje?

    Pobierz plik http://jkob.fizyka.umk.pl/labul/scripts/50-udisks.rules, umieść go w katalogu /etc/polkit-1/rules.d./ i zrestartuj usługę polkit. Czy użytkownik labul może teraz zamontować przygotowany dla niego zasób dyskowy?

  11. Utwórz partycję /dev/vdb1, załóż na niej system plików vfat. Zaloguj się jako użytkownik labul i użyj komendy udisksctl, żeby uzyskać dostęp do tego zasobu dyskowego. Jakie prawa dostępu ma użytkownik labul do tego katalogu? Czy te prawa zależą od konfiguracji usługi polkit, tj. obecności pliku reguł 50-udisks.rules?

  12. Skrypt http://jkob.fizyka.umk.pl/labul/scripts/backup2usbctl ilustruje w jaki sposób zwykły użytkownik może automatyczne wykonywać kopię wskazanych zasobów na odpowiedni dysk USB. Przeanalizuj działanie tego skryptu.

    W jaki sposób można pozbyć się konieczności podawania hasła przy każdorazowym użyciu tego skryptu?