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ąć?
- Mieć jakiegoś w miarę nowoczesnego linuxa na hoście. Ja mam Fedorkę 27.
- Nie czytać https://docs.docker.com/get-started/.
- Przeczytać tę dokumentację, przynajmniej do ustępu o pomijaniu sudo.
- 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":
- 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.
- Kontener buduje się... na bazie innego kontenera. Ja postanowiłem użyć docker.io/fedora, który jest oficjalnym buildem fedory na Dockera.
- 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
/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/
$ 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:
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
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...
I am getting the
OdpowiedzUsuńANS1592E Failed to initialize SSL protocol.
ANS8023E Unable to establish session with server.
ANS8002I Highest return code was -362.
Errors also and cannot figure out what will resolve it. I do have the admin set to transitional but I still get the error.
Hi,
OdpowiedzUsuńI've missed some additional information - I've forgot that linux container gets to it's initial state when you shut it down.
Sessionsecurity is automatically set back to "strict" when admin succesfully authenitcates with the server.
So once you get your TSM client up and running in container, open another terminal window, run "docker ps" to get container id, and than "docker commit" to save its current state, including imported server's SSL certificate.
I'll update this article to include this information.
Thanks & have a fun!
Bardzo interesujące. Pozdrawiam serdecznie.
OdpowiedzUsuń