Pokazywanie postów oznaczonych etykietą Docker. Pokaż wszystkie posty
Pokazywanie postów oznaczonych etykietą Docker. Pokaż wszystkie posty

poniedziałek, 25 stycznia 2021

Trzy kroki przed orkiestrą, czyli stary AfterShotPro(3) na nowej Fedorze(33)

    Trochę fotografuję, a że dość kiepsko, to muszę potem moje "dzieła" poprawiać. Tu doświetlić, tam kolor podkręcić, gdzieś coś z cienia wyciągnąć czy wykadrować jakiegoś przeoczonego "mistrza drugiego planu". Dość, by robić zdjęcia w surowym formacie NEF (RAWy z mojego ukochanego Nikona). Jestem też linuxowym talibem. Jeśli wychodzi nowe wydania Fedory, to zwykle je instaluję jeszcze tego samego dnia kiedy wyjdą. Pozwala mi to cieszyć się najnowszymi "ficzurami" ulubionej dystrybucji, ale dostarcza też sporo niespodzianek i rozrywki, zwłaszcza z zamkniętym oprogramowaniem, które często nie nadąża za open source. I tu dochodzimy do sedna: od dawna jestem (coraz mniej szczęśliwym) posiadaczem licencji komercyjnego, i oczywiście zamkniętego Corel AfterShotPro. Przesiadki na otwartego Darktable jakoś mi nie wyszły.

    Corel AfterShot Pro 3 to fajny, intuicyjny i ultraszybki  program do obróbki zdjęć w formacie RAW.  Dostawca niestety traktuje wersję linuxową jak drogowcy zimą drogę w mojej wsi: nie odświeżył wersji już od dwóch lat. A Fedora w międzyczasie poszła ostro do przodu. Jak wiadomo, ta dystrybucja potrafi zrobić grube zmiany w ABI pomiędzy wydaniami. W efekcie AfterShoot przestał działać już na wersji F32, nie wspominając o bieżącej F33. Oczywiście od czego KVM/VirtualBox/VMware? Ale po co utrzymywać CAŁĄ, około 30 GiB maszynę, żeby trzymać software wielkości 70MiB?  Dlatego zdecydowałem się na kontenery. 

    Mówiąc w skrócie, mój pomysł jest rozwinięciem koncepcji przedstawionej tutaj, i sprowadza się do:

  • Stworzenia definicji obrazu kontenera.
  • Zbudowania go
  • Uruchomienia programu
  • Posprzątania po zatrzymanym kontenerze. 

Dockerfile

    Natywnym dla Fedory (czyt. przyszłych Red Hatów) systemem obsługi kontenerów jest podman. Jest fajny, bo:

  • jest daemonless - nie ma żadnego demona do obsługi kontenerów.
  • domyślnie działa z konta zwykłego użyszkodnika a nie roota  - przy klasycznym Dockerze trzeba to trochę pokofigurować.
  • Jest kompatybilny z Dokckerem więc przesiadka jest bezbolesna.

Trochę metodą prób i błędów, trochę przy pomocy zaprzyjaźnionego inkwizytora Dockerowo/Kubernetesowo/OpenShiftowego (Michał Stryga) doszedłem do takiego Dockerfile:


FROM fedora:31

ADD AfterShotPro3.rpm /AfterShotPro3.rpm

ADD start.sh /start.sh

RUN dnf -y install AfterShotPro3.rpm glx-utils xterm mesa-dri-drivers compat-openssl10 xorg-x11-fonts-Type1 xorg-x11-fonts-ISO8859-1-100dpi dejavu-sans-fonts dejavu-serif-fonts liberation-serif-fonts 

CMD ["/start.sh"]


    Jak widać, niezwykle prosty:

  1. Korzysta z bazowej Fedory w wersji 31 - Wiem, wiem, niewspierana, ale właśnie ta musi być, bo to ostatnia na jakiej AfterShot 3 (A konkretnie 3.6.0.380) działa.
  2. Dodaje do obrazu pakiet ze wspomnianym AfterShotem oraz skryptem startującym. - sekcje ADD.
  3. Instaluje potrzebne pakiety. Teoretycznie sam AfterShot definiuje swoje zależności, więc dnf'owi powinien wystarczyć tylko ten pakiet, ale jak to w komercyjnych softach bywa, definiuje je niedbale. Stąd, metodą prób i błędów, okresliłem listę pakietów, które są mu potrzebne do szczęścia.
  4. Jako "Entry Point" definiuje skrypt start.sh, którego zadaniem jest "zaczarowanie" OpenGL i GLXa. Znowu, metodą prób i błędów, okazało się, że binarka AfterShota nie startuje, jeśli ktoś przed nią nie wykona czegoś na GLXie, ot choćby wystartuje glxinfo. Zatem zawartość mojego skryptu wygląda tak:

#!/bin/bash

glxinfo

/usr/bin/AfterShot3X64

Budowanie obrazu kontenera

    Do zbudowania obrazu kontenera w Fedorze służy buildah:

$  buildah bud -t aftershoot:3

Po tej operacji komenda podman images powinna pokazać coś takiego:

$ podman images            

REPOSITORY            TAG     IMAGE ID      CREATED       SIZE

localhost/aftershoot  3       b4ba6c8f9b47  3 hours ago   1.09 GB

registry.fedoraproject.org/fedora  31      a7a37f74ff86  8 months ago  199 MB

Start kontenera

    Pora uruchomić kontener. Tu dzieje się kilka  mniej oczywistych  rzeczy, bo uruchamiam aplikację, która ma wyświetlać coś na ekranie i to na dodatek z dostępem do sieci hosta, lokalnego katalogu i przede wszystkim karty graficznej. Dlatego w zaklęciu potrzeba kilku parametrów:

$ podman  run --net host --privileged --env "DISPLAY" --volume "$HOME/.Xauthority:/root/.Xauthority:rw" --volume "/etc/machine-id:/etc/machine-id"  --volume "/home/marcinek/Obrazy:/root/Pictures" localhost/aftershoot:3

    Po kolei:

  • net host - chcę, żeby kontener korzystał bezpośredni z sieci hosta.
  • privileged - kontener ma mieć dostęp do sprzętu, np karty graficznej.
  • en "DISPLAY" - przenieś zmienną $DISPLAY hosta do kontenera, żeby ten wiedział gdzie jest jego ekran X11.
  • volume "$HOME/.Xauthority:/root/.Xauthority:rw" - udostępnij plik autoryzacji do ekranu X11.
  • volume "/home/marcinek/Obrazy:/root/Pictures" - udostępnij mój katalog ze zdjęciami, żeby było na czym pracować :-)
Taaadaaam!

Sprzątanie po robocie

    Po skończonej robocie, kontener zostaje w stanie "exited". 

$ podman ps -a                                             

CONTAINER ID  IMAGE COMMAND    CREATED        STATUS                     PORTS   NAMES

98987600e9df  localhost/aftershoot:3  /start.sh  3 minutes ago  Exited (0) 16 seconds ago          kind_kowalevski


Sprząta się to tak:

$ podman container rm 98987600e9df                         

98987600e9dffa85521353d6be4b05081e7580afaed6063e39c18231edc260b1


P.S

    Zostało tu trochę miejsca na ulepszenia:
  • Można by zakombinować, żeby użytkownik wewnątrz kontenera to nie był root.
  • Wypadałoby podmapować jeszcze jakiś wolumen z licencją. W przeciwnym wypadku, każde uruchomienie programu uruchamia od nowa próbny okres licencyjny :-D 
  • Pewnie jest jakiś prstryk-elektryk, żeby kontener automatycznie znikał, gdy aplikacja się zakończy.
  • Mój laptop ma GPU a AfterShot potrafi korzystać z OpenCL, co jeszcze bardziej przyspieszy wołanie RAWów.

środa, 10 stycznia 2018

Klient IBM Spectrum Protect w piaskownicy

Dlaczego Docker

Od jakiegoś czasu uważnie przyglądam się technologii kontenerów w różnych systemach operacyjnych. Zaczęlo się prawie 20 lat temu z Workload Managerem w AIXie, który potem przeszedł w WPARy. Gdzie po drodze obiły mi się jeszcze o uszy subsystemy w OS/400, kilka podejść w Linuxie (pierwsze w 2002 robione w... Polsce). W końcu technologia dojrzała, a świat dojrzał do niej: powszechna, wręcz chorobliwa wirtualizacja i aplikacje oparte o mikroserwisy.
Ja do tematu dojrzałem dziś, bo mnie do tego zmusiła jednym, prostym ruchem Matka Korporacja: Wraz z wprowadzeniem klienta TSM/Spectrum Protect w wersji 8.1.2 (i 7.8) praktycznie zerwano z kompatybilnością w dół. A póki co, 100% systemów klikeckich z którymi pracuję to 7.1.7.XXX i niższe. A ficzury z 8.1.3 i 4 nęcą i potestować by się chciało.
Sęk jednak w tym, że serwer 8.1.4 nie gada z klientem niższym niż 7.8. Teoretycznie, klient 7.8 i 8.1.X, gdzie X >=2 gada z niższymi serwerami, ale jak raz zobaczy się z "wyższym" to już z niczym innym gadać nie będzie. Czyli muszę mieć dwóch klinetów BA w systemie - 8.1.1 do pracy i 8.1.4 do zabawy. A tego producent nie przewidział.
Zwykle w takiej sytuacji klonuję moją roboczą Fedorę, instaluję co trzeba i tyle. Tym razem postawiłem na Dockera.

Jak zacząć?

  1. Mieć jakiegoś w miarę nowoczesnego linuxa na hoście. Ja mam Fedorkę 27.
  2. Nie czytać https://docs.docker.com/get-started/. 
  3. Przeczytać tę dokumentację, przynajmniej do ustępu o pomijaniu sudo.
  4. Rozpocząć zabawę z kontenerami.

A może jednak coś warto wiedzieć?

Mi wystarczyło mieć śwadomość następujących faktów, choć niektóre z nich uświadomiłem sobie "w boju":
  1. Kontener po zgaszeniu WRACA do oryginalnego stanu. Czyli nie ma tak, że odpalam sobie jakiś generyczny kontenerek z Fedorą (bardzo generyczny: bash, ls i dnf i kilka, w sumie 86MB innych programów), doinstalowuję co trzeba, gaszę i jak potrzebuję to odpalam.
  2. Kontener buduje się... na bazie innego kontenera. Ja postanowiłem użyć docker.io/fedora, który jest oficjalnym buildem fedory na Dockera.
  3. Kontener buduje się na podstawie Dockerfile. Tu jest dokumentacja z przykładowym plikiem.

Tworzenie kontenera

Sciągam podstawkę:

$ docker pull docker.io/fedora
Using default tag: latest
Trying to pull repository docker.io/library/fedora ...
sha256:25f7dac76b2c88d8b7e0b1d6213d3406e77c7f230bfa1e66bd1cbb81a944eaaf: Pulling from docker.io/library/fedora
a8ee583972c2: Pull complete
Digest: sha256:25f7dac76b2c88d8b7e0b1d6213d3406e77c7f230bfa1e66bd1cbb81a944eaaf
Status: Downloaded newer image for docker.io/fedora:latest

$ docker images
REPOSITORY              TAG                 IMAGE ID            CREATED             SIZE
docker.io/hello-world   latest              f2a91732366c        6 weeks ago         1.85 kB
docker.io/fedora        latest              422dc563ca32        7 weeks ago         252 MB






Zakładam pusty katalog na mój projekt:
$ mkdir -p /home/marcinek/containers/SPCliV8.1.4
$ cd  /home/marcinek/containers/SPCliV8.1.4
$  
Na początek trzeba przygotować pliki jakie będą używane do budowy  kontenera. Chcę zainstalować klienta Backup Archive (BA) w wersji 8.1.4. Mozna go sobie pobrać np stąd. Ja sobie stworzyłem katalog install gdzie wrzuciłem następujące pliki:
$ pwd
/home/marcinek/containers/SPCliV8.1.4

$ ls install/
8.1.4.0-TIV-TSMBAC-LinuxX86.tar        gskssl64-8.0.50.78.linux.x86_64.rpm  README.htm              TIVsm-APIcit.x86_64.rpm  TIVsm-BAhdw.x86_64.rpm  TIVsm-filepath-source.tar.gz
gskcrypt64-8.0.50.78.linux.x86_64.rpm  README_api.htm                       TIVsm-API64.x86_64.rpm  TIVsm-BAcit.x86_64.rpm   TIVsm-BA.x86_64.rpm     TIVsm-JBB.x86_64.rpm

No i tworzę plik Dockerfile: (na razie z błędem!)

FROM fedora
run mkdir -p /opt/tivoli/tsm/client/ba/bin
add install/ /install
add dsm.sys /opt/tivoli/tsm/client/ba/bin
add dsm.opt /opt/tivoli/tsm/client/ba/bin
#run echo "proxy=http://192.168.1.12:3128" >> /etc/dnf/dnf.conf
run echo "53.46.173.120 tsmservice" >> /etc/hosts
run dnf -y install iproute nfs-utils fuse-sshfs.x86_64 iputils
run dnf -y install /install/gsk* /install/TIVsm-API64.x86_64.rpm /install/TIVsm-BA.x86_64.rpm
run rm -rf /install
CMD /opt/tivoli/tsm/client/ba/bin/dsmadmc

 
A teraz budowanie:

$ docker build -t marcinek/ispcli_v814 .

No i odpalam:

$ docker run -it marcinek/ispcli_v814 /bin/bash
[root@ae505b4dd377 /]# cat /etc/hosts
127.0.0.1    localhost
::1    localhost ip6-localhost ip6-loopback
fe00::0    ip6-localnet
ff00::0    ip6-mcastprefix
ff02::1    ip6-allnodes
ff02::2    ip6-allrouters
172.17.0.2    ae505b4dd377


Czyli qpa. Nie opisała się zmiana pliku /etc/hosts. Docker najwyraźniej tak ma, rozwiązań jest kilka. Można np uruchamiać contener z opcją --add-host=[].
No to spróbujmy:

$ docker run --add-host tsmservice:53.46.173.120 -it marcinek/ispcli_v814 cat /etc/hosts
127.0.0.1    localhost
::1    localhost ip6-localhost ip6-loopback
fe00::0    ip6-localnet
ff00::0    ip6-mcastprefix
ff02::1    ip6-allnodes
ff02::2    ip6-allrouters
53.46.173.120    tsmservice
172.17.0.2    75fa3c6d2bce



Fantastik. To teraz jak zrobić, żeby się taka zmiana zapisała na poziomie budowania kontenera?

O tym napiszę poźniej, jak znajdę jakieś w miarę eleganckie rozwiązanie bo to co znajduje google nie jest ładne :-P
Brudne jest tu: http://jasonincode.com/customizing-hosts-file-in-docker/

I jeszcze poprawka

Kończyłem ten artykuł mając pod ręką serwer 7.1.7.300. Jak wróciłem do mojego 8.1.4 , okazało się... że nie działa:

dsmadmc -se=tasiemiec
IBM Spectrum Protect
Command Line Administrative Interface - Version 8, Release 1, Level 4.0
(c) Copyright by IBM Corporation and other(s) 1990, 2017. All Rights Reserved.

Enter your user id:  admin

Enter your password: 

ANS1592E Failed to initialize SSL protocol.
ANS8023E Unable to establish session with server.

ANS8002I Highest return code was -362.
Zła informacja jest taka, że w dsmerror.log'u znajdują się dokładnie te dwa wpisy z ekranu i nic więcej.  Pierwsza myśl. no to sobie włączę trace.  Konia z rzędem temu, kto znajdzie w internecie kompletną listę flag tracingu do klienta BA. Klasy i owszem, pojedynczych flag, nie. Ponieważ wybieram się pobiegać, to szybkie rozwiązanie, w stylu żeby pozbyć się gorączki należy wyrzucić termometr. Zmienić session security dla admina na którego chcę wejść moim kontenerem ze STRICT na TRANSACTIONAL:

 
I teraz można już wchodzić na admina z kontenera.
$ dsmadmc -se=tasiemiec
IBM Spectrum Protect
Command Line Administrative Interface - Version 8, Release 1, Level 4.0
(c) Copyright by IBM Corporation and other(s) 1990, 2017. All Rights Reserved.

Enter your user id:  admin

Enter your password: 

Session established with server TASIEMIEC: Linux/x86_64
  Server Version 8, Release 1, Level 4.000
  Server date/time: 01/13/18   10:28:38  Last access: 01/13/18   10:26:43


Protect: TASIEMIEC>q pr

Process      Process Description      Process Status                                  
  Number                             
--------     --------------------     -------------------------------------------------
       3     Local to Cloud           Cancelling Move Container of OVH. Elapsed time: 
              Transfer                 0 Days, 12 Hours, 54 Minutes.                  

Protect: TASIEMIEC>q stg

Storage         Device         Storage       Estimated       Pct       Pct      Hig-     Lo-     Next Stora-
Pool Name       Class Name     Type            Capacity      Util      Migr     h M-      w      ge Pool   
                                                                                 ig      Mi-    
                                                                                 Pct      g     
                                                                                         Pct    
-----------     ----------     ---------     ----------     -----     -----     ----     ---     -----------
BMIX                           CLOUD              400 G       0.0                                          
DIR_LOCAL                      DIRECTORY          400 G      20.1                                          
IBM_DEPLOY-     IBM_DEPLO-     DEVCLASS           0.0 M       0.0       0.0       90      70               
 _CLIENT_P-      Y_CLIENT-                                                                                 
 OOL             _IMPORT                                                                                   
OVH                            CLOUD            1,238 G       8.5       

A wracając do SSLa - spróbuję to rozkminić tak, żeby działało na domyślnym ustawieniu STRICT. Pewnie zacznę od tracingu serwera, bo tam jest bardzo obiecująca flaga SSLINFO...