Pause-Café Volubis

pause-café

rendez-vous technique
Pause-Café est une réunion technique
destinée aux informaticiens sur plateforme IBM i.
Elle a lieu 3 à 4 fois par an : en Bretagne et sur internet.

Pause-café #58

Juin 2011

Quelques nouvelles :



Zend vient de proposer au téléchargement une "cumulative" pour Zend Server (choisir l'onglet IBM i) permettant de passer le produit de version 5.0.4 à 5.1.0

     

Évolutions :

  • une mise à jour de PHP en version 5.2.17 ou 5.3.6
  • support complet du driver ODBC (en plus de DB2 Connect), incluant un correctif lié à odbc_setoption()
  • un driver intégré pour Oracle (OCI8) version 1.4.5
  • une version 3.0.36 du PHP Toolkit d'AURA
  • une version bêta d'un nouveau PHP Toolkit écrit par Zend et IBM plus orienté POO (l'accord avec AURA ne serait pas reconduit)
    -> plus d'infos sur http://files.zend.com/help/Zend-Server-IBMi/php_toolkit_xml_service_functions.htm
  • des correctifs pour IBMDB2i qui est toujours maintenu par IBM, malgré qu'il n'y ai plus de version MYSQL téléchargeable et supportée par Oracle

Cette PTF (fortement recommandée, de notre point de vue) s'installe via SAVF, puis comme une PTF "normale"

  

A ce propos la totalité de notre site, dont le forum et les sites des clubs utilisateurs Nord Ouest (Pays de Loire et Bretagne) utilisent maintenant Zend Server et non plus ZendCore, sur notre System i.


le produit OmniFind propose via une PTF (SI40272) l'indexation de fichiers SPOOLS et de fichiers de l'IFS.

Voyez https://www.ibm.com/developerworks/mydeveloperworks/wikis/home?lang=fr#/wiki/IBM%20i%20Technology%20Updates/page/OmniFind%20searching%20of%20non-DB2%20tables

plus d'informations à la prochaine Pause café (59 !) quand nous aurons décortiqué la documentation officielle, qui n'est pas à ce jour disponible.

 

Information trouvée sur le site Technology Update qui donne des informations sur les dernières PTF apportant de nouvelles fonctionnalités, pour les version 5.4 , 6.1 et 7.1

Où l'on apprend :

  • qu'une partition peut maintenant être suspendue (VIOS uniquement)
  • qu'une nouvelle console SDMC, basée sur IBM director, va remplacer la HMC.

 


Nous avons mis à jour notre mémo RPG pour la version 7 et nous vous proposons un nouveau mémo (en plus de celui pour SQL) sur RDI/RDP

 Extrait (liste des fonctions intégrées)

Fonction(x)
Retourne
Exemple
%ADDR l'adresse d'une variable EVAL prt= %addr(data)
%PADDR l'adresse d'une procédure (pour CALLB)  
%ELEM donne le nombre d'occurrences d'un tableau ou d'une DS
if   I < %elem(tbl_tva)
%SUBST extraction d'une chaine de caractère
if   %subst(raisoc : 1 : 1) <> ' '

eval %subst(pgm : 1 : 1) = 'Q'
%SIZE donne la longueur déclaré d'une variable
if    %SUBST(nom : %size(nom): 1) = *blank
%DECPOS donne le nombre de décimales  
%TRIM élimination des espaces d'extrémité
eval NP = %trim(nom) + ' ' + %trim(prenom)
%TRIML|%TRIMR élimination des blancs de gauche/de droite  
%PARMS indique le nombre de paramètres recus
if   %parms > 2 
%ABS valeur absolue  
%DEC
%DECH

transforme une valeur numérique (char en V5.2,date en V5.3) en numérique condensé ou packé.
(%DECH applique un arrondi)

eval DATAMJ = %dec(DATCDE : *YMD)
%INT
%INTH

transforme une valeur numérique (ou caractère en 5.20)au format binaire signé

 
%UNS
%UNSH

transforme une valeur numérique (ou caractère ) au format binaire non signé

 

%FLOAT

transforme une valeur numérique (ou caractère) au format virgule flottante  

%EDITFLT

transforme de virgule flottante vers chaîne  

%EDITC

transforme du numérique en chaine avec application
d'un edit code
eval msg = 'date de traitement' + 
%editc(date : 'Y')

eval montanchar = %editc(
qte * prix : '3')

%EDITW

idem %EDITC mais avec un mot d'édition  
%CHAR transforme date ou numérique en chaîne
ZoneChar=%CHAR(ZoneDec) // 000123,45- ==> '-123,45'
%STR transforme une chaine RPG en chaîne compatible C
(pointeur vers une chaine terminée par x'00' )
 

%LEN

retourne la longueur d'une expression
if   %len(%trim(nom)) > 2
eval L = %len(zone-variable)

%SCAN

recherche si présence d'une chaîne de caractères
eval chaine = 'ILE/RPG-IV' 
eval pos = %scan('I' : chaine) [pos=1]
eval deb = pos + 1
eval pos = %scan('I' : chaine: deb) [pos=9]
%REPLACE remplace par une chaîne l'information située à la position indiquée
                          [var1 = 'AS/400'] 
eval x = %scan('4' : var1)
eval var2 = %replace('5': var1:x)
[var2 = 'AS/500']
eval var2 = %replace('X': var1 : 1 : 3)
[je remplace 3 caractères : var2 = 'X500']

%NULLIND

test la val.nulle sur un champ base de données
IF   %NULLIND(datcmd) = *ON 

EVAL %NULLIND(prime) = *OFF
EVAL prime = 1500

%OPEN

indique si un fichier est ouvert
if   %open(clients)

%EOF

indique si l'on est fin de fichier
dow  not %eof(clients)

%ERROR

indique si on est en erreur
(à utiliser suite à un code avec (E).)
if   %error

%STATUS

indique le n° d'erreur (code status)
if   %error and %status(clients) = 1252

%EQUAL

indique
un positionnement par égalité (SETLL)
une recherche aboutie par égalité (LOOKUP)
 

%FOUND

indique
un positionnement réalisé(SETLL,SETGT)
un recherche aboutie (CHAIN)
 
---- V4R40 ----
 
 

%GRAPH

conversion en DBCS
 

%UCS2

conversion en UNICODE
 

%XFOOT

somme d'un tableau
eval total = %xfoot(tb_salaire) + prime

%DIV

résultat de la division (entiers uniquement)
 

%REM

reste de la division (entiers uniquement)
if   %rem(an : 4 )= 0 
---- V5R10 ----
 
 
%ALLOC l'adresse d'un nouvel espace mémoire EVAL prt= %alloc(nboctets)
%CHECK la position du premier caractère invalide
Eval pos = %check('0123456789.' : variable)
%CHECKR Idem %CHECK, mais en commencant à droite.
 
%DATE convertit une variable (alpha ou dec) en date ou retourne la date du jour.
eval datcmd = %DATE(datchar : *YMD0)//(c'est un zéro)
%DAYS indique un nombre de jours
eval datliv = datcmd + %DAYS(15)
%DIFF exprime un écart entre deux dates ou heures
eval ecart = %DIFF(datliv : datcmd : *DAYS)
%SUBDT extrait une partie d'une date
eval annee = %SUBDT(datliv : *YEARS)
%HOURS exprime un nombre d'heures
eval demain = maintenant + %hours(18)

%LOOKUP
(%LOOKUPxx)

indique si un élément est présent dans un tableau eval pos = %lookup('$' : monnaies)
%MINUTES exprime un nombre de minutes
voir %HOURS()
%MONTHS exprime un nombre de mois
voir %DAYS()
%MSECONDS

exprime un nombre de microsecondes

voir %HOURS
%OCCUR

positionne sur une occurrence de DS

%OCCUR(DS1) = 7 ou x = %occur(DS2)
%REALLOC

Réalloue un espace mémoire plus grand

voir %ALLOC

%SECONDS

exprime un nombre de secondes
voir %HOURS()

%SHTDN

indique si le système est en phase d'arrêt
if %SHTDN

%TIME

convertit une variable (alpha ou dec) en heure ou retourne l'heure en cours.
if %time(pointage : *HMS) = T'23:59:59'

%TLOOKUP[xx]

indique si un élément est présent dans une table GAP
voir %lookup
%XLATE transforme une variable apha
eval resultat = %XLATE('abcdef' : 'ABCDEF' : origine)
%YEARS exprime un nombre d'années
voir %DAYS
---- V5R20 ----
 
 
%KDS Utilisation d'une DS en tant que liste de clés sur un CHAIN.
CHAIN %KDS(dscli) clientf1;
// mais aussi CHAIN (DEPCLI : NOCLI) clientf1;
%FIELDS Mise à jour d'une liste finie de zones lors d'un UPDATE .
Update clientf1 %FIELDS(nomcli : depcli : ville) ;
%BITNOT inverse les bits
%BITNOT(x'00') = x'FF'
%BITOR applique un OU logique bit à bit
%BITOR(x'F0' : x'0F') = x'FF'
%BITAND applique un ET logique bit à bit
%BITAND(x'F1' : x'1F') = x'11'
%BITXOR applique un OU exclusif bit à bit
%BITXOR(x'F1' : x'1F') = x'EE' [1110 1110)
---- V5R30 ----
 
 
%SUBARR une partie d'un tableau
resultat = %xfoot( %subarr(tbl : i : 5) )// 5 postes
---- V5R40 ----
 
 
%XML coordonnées des données XML à lire (cf XML-INTO)
xml-into DS1 %xml(data : 'doc=string')
---- V7R10 ----
 
 
%PARMNUM retourne la position d'un paramètre
if   %parms >= %parmnum(nocli) // nocli transmis ?
%SCANRPL recherche et remplace une chaîne
eval resultat = %SCANRPL('GAP' : 'RPG' : origine)


Proposition de remplacement des codes invalides en format libre, souvent par des fonctions :

Code Opération
Remplacement
Exemple
ADD   + EVAL A = A +1 ou A = A+1 ou A+=1
ADDDUR   + Datliv = datcmd + %DAYS(45)
ALLOC %alloc  
ANDxx    (test en libre) if A=B AND compteur<>0
CABxx   (à éviter)  
CALL CALLP + EXTPGM CALLP* pgmA (parm1 : parm2)
CALLB CALLP + EXTPROC    idem
CASxx IF + EXSR  
CAT    + Message = 'date de traitement' + DATCHAR
CHECK %check pos = %check('0123456789-+,' : qtechar)
CHECKR %checkr    idem
*LIKE DEFINE déclaration en D avec LIKE( )  
*DTAARA DEFINE déclaration en D avec DTAARA( )  
DIV    /  
DO FOR FOR i = 1 to 50
DOUxx DOU Dou %eof
DOWxx DOW Dow not %eof
END ENDxx (déja recommandé avant)  
ENDCS    cf CAS  
EXTRCT %subdt mois = %SUBDT(DATCMD : *M)
GOTO    c'est quoi ?       ;-)  
IFxx IF if GAP = 4
KFLD %KDS ou directement (K1 :K2) CHAIN (societe: nocli) clientf1
KLIST     (cf ci-dessus)  
LOOKUP %lookup tva = %lookup(code : tbtva)
MOVE EVALR , Convertir avec les fonction intégrées datcmd = %DATE(datchar:*ISO) ou chaine = %char(datcmd)
MOVEL EVAL, idem pour les conversions  
MOVEA
Pas d'équivalent
voir quand même %SUBARR dans certains cas.
MULT    *  
MVR %rem if %rem(AN : 4) = 0
OCCUR %occur  
ORxx  cf ANDxx  
PARM Prototype en spécif D *  
PLIST  cf PARM  
REALLAOC %realloac  
SCAN %scan QUATRE = %scan('4' : 'RPG4')
SETOFF *inxx = *off  
SETON *inxx = *on  
SUB    -  
SUBDUR    - HIER = AUJOURDHUI - %days(1)
ou SUBDUR %diff UN = %DIFF(aujourdhui : hier)
SUBST %subst  
TAG    cf GOTO  
TESTN %check if %check('0123456789' : QTECHAR) > 0
TIME %date() ou %time() aujourdhui = %date()
WHENxx WHEN  
XFOOT %xfoot TVA = %xfoot(tbmt) * TAUX
XLATE %xlate GRAND = %xlate(minuscles: majuscules: PETIT)
Z-ADD EVAL  
Z-SUB EVAL -  

* CALLP est apparu en V3R60 et permet un appel en format libre, il est faculatif (on peut saisir EXEC directement):


il faut pour cela déclarer le programme et ses paramètres, avant, en spécif D, cela s'appelle un PROTOTYPE.
  +-----------------------------------------------------------+
! DEXEC PR EXTPGM('QCMDEXC') !
! D 250 const !
! D 15P 5 const !
+-----------------------------------------------------------+ PR indique qu'il s'agit d'un prototype (même positions que DS)
     EXTPGM le nom du pgm externe (peut être qualifié)
     CONST sur un paramètre indique que ce paramètre peut ne PAS 
      être une variable (constante, calcul, fonction intégrée, ...)
  

la réception des paramètres peut elle même être réalisée sur le même principe (si vous souhaitez rester en format libre),
  +-----------------------------------------------------------+
! DSoldeClient PI !
! D nocli 6P 0 !
+-----------------------------------------------------------+
Seule l'interface de procédure est obligatoire en V7 (avant il fallait un prototype)

 


PASE

  • Comment crypter des fichiers ou une session de transfert de fichiers ? -> réponse SSH. Ce produit fonctionne sous PASE (option 33 de l'OS)

    il s'agit de tous les binaires AIX  sur IBM i, rendant celui-ci très compatible avec une machine UNIX.



    PASE (AIX V5L sur OS/400)



    |

      pour lancer un "shell" PASE :
           > CALL QP2TERM   (pour une saisie utilisateur)        > CALL QP2SHELL  (pour exécuter un script)        > l'API Qp2RunPase, pour lancer Pase depuis un pgm ILE.
      + le répertoire de PASE est /QOpenSys/usr/bin
        Si un exécutable n'est pas trouvé dans le chemin indiqué, PASE essai      en ajoutant "/QOpenSys" devant la racine ("/") du chemin,       sauf à renseigner la variable d'env. "PASE_EXEC_QOPENSYS" à "N"
        Les fonctions PASE qui retournent les utilisateurs et les groupes,      retournent les noms en minuscules sauf "PASE_USRGRP_LOWERCASE" à "N"
     Le shell lancé par PASE est le Khorn shell (/QOpenSys/usr/bin/sh)

      pour voir la liste des commandes placez vous dans /QOpenSys/usr/bin    par cd (vérifiez par pwd ,que vous n'y êtes pas déja) et lancez ls .

    |

      A cette liste, vous devez ajouter les commandes "internes" comme cd, ...
      un certain nombre d'utilitaires ne pourront pas s'exécuter à partir    d'une session 5250.(type de terminal non compatible)
       vous devrez peut-être recourir à un environnement X11 (inclus dans PASE)     depuis un serveur X (non fourni) à installer sur PC (ou Linux) .
      Pour lancer une application X, démarrer un serveur X11/Xwindow   (XthinPro ou Hummingbird Exceed ou bien un poste sous Linux)
      -> renseignez la variable d'environnement DISPLAY avec l'adresse IP       du serveur X, puis lancez ( xterm par exemple) depuis Qp2Term.
      sinon, regardez les commandes suivantes : (extrait, bien sûr ...)
                  cat   - affiche le contenu d'un fichier               ln    - créé un lien symbolique sur un fichier existant               mkdir - création d'un répertoire               rm    - destruction de fichier(s)               mv    - déplace ou renomme un fichier

    |
     Ne confondez pas QSH (le shell de l'OS/400) et PASE (compatible AIX)
    
      PASE possède plus de fonctionnalités, et quelques différences:
       il peut tenir compte des retours chariot à l'affichage (F11)    il est sensible à la casse (différence minuscules/MAJUSCULES), pas QSH.    il ne transforme pas EBCDIC/ASCII sauf pour stdin,stdout et stderr,     si vous fixez QIBM_PASE_DESCRIPTOR_STDIO à T (QSh utilise les CCSID)
       par exemple :    ------------
       cat /qsys.lib/bdvin.lib/qsqlsrc.file/crt_base.mbr | grep -c date
           compte le nombre de ligne du membre crt_base contenant le mot "date"        (le fichier QSQLSRC est dans la bibliothèque BDVIN)
       QSH donne 3 (il y a bien trois lignes) PASE indique 0 (data en EBCDIC)
       il en sera de même pour wc (compte le nombre de mots), sort (tri),     split (éclatement de fichiers) et sed (edition de fichier)

    |

     Exemples d'utilisation de PASE :
      Aller chercher des binaires compilés pour AIX et les faire tourner    sur votre machine.
      voyez http://bio.gsi.de/DOCS/AIX/aixpdslib.seas.ucla.edu/  par exemple
       vous trouverez sur ce site zip.2.3.tar.Z et unzip.5.50.tar.Z
      Placez ces fichiers dans /QopenSys, puis lancez un terminal PASE
        call Qp2term
        décompressez le fichier par uncompress zip.2.3.tar.Z
        puis restaurez par tar -xvf zip_2_3.tar
        cela doit vous créer un répertoire user et des sous répertoires
         placez vous dans /QopenSys/usr/local/bin (par cd)

    |

     tapez zip -h
      cela doit vous afficher l'aide
      #  > zip -h    Copyright (C) 1990-1999 Info-ZIP    Type 'zip "-L"' for software license.    Zip 2.3 (November 29th 1999). Usage:    zip [-options] [-b path] [-t mmddyyyy] [-n suffixes] [zipfile list] [-xi    list]
     vous pouvez maintenant zipper des fichiers par :
       zip fichier-zip-à-créer fichier(s)-à-zipper
     ou bien par  : (depuis un CL ou une ligne de commande)
        CALL QP2SHELL PARM('/QopenSys/usr/local/bin/zip'  +                        '/chemin/archive.zip'          +                        '/chemin/fichier(s)-à-zipper/')

    |

    Vous pouvez aussi utiliser 7zip,sur http://www.scottklement.com/p7zip/
     Attention QP2SHELL n'est pas un shell, il en joue, en partie, le role :    il lance l'exécutable.
     vous ne pourrez pas profiter de certains services du shell
     - globing (caractères génériques comme *)
     - tubes [|] ou redirections [>], et commandes multiples [:]
     dans ce cas demandez à QP2SHELL de lancer sh (le shell lui même)   avec l'option -c (exécution d'une commande en paramètre)
     CALL PGM(QP2SHELL) PARM('/QOpenSys/usr/bin/sh' +                        '-c' 'cp /repertoire1/*.txt /sauvegardes')
    en CL
     CALL PGM(QP2SHELL) PARM('/QOpenSys/usr/bin/sh' +                        '-c' &CDE)

    |

     Les exécutables sous PASE n'envoient pas de messages d'erreur interceptables   par MONMSG, ils envoient un code retour.Pour le tester :
         DCL VAR(&RCVVAR)   TYPE(*CHAR) LEN(200)      DCL VAR(&RCVVARLG) TYPE(*CHAR) LEN(4)
         CHGVAR VAR(&CDE) VALUE('cp /repertoire1/*.txt /sauvegardes')      CALL PGM(QP2SHELL) PARM('/QOpenSys/usr/bin/sh' '-c' &CDE)
         CHGVAR VAR(%BIN(&RCVVARLG)) VALUE(200)   /* taille de RCVVAR */
         CALL PGM(QUSRJOBI) PARM(&RCVVAR    +                              &RCVVARLEN +                              'JOBI0600' +                              '*'        +                              ' '        )      IF (%BIN(&RCVVAR 109 4) *NE 0) THEN(DO)         SNDPGMMSG MSGID(CPF9898) MSGTYPE(*ESCAPE) MSGF(QCPFMSG) +                   MSGDTA('commande de copie en erreur')      ENDDO


    |

     Autre exemple : OpenSSH/OpenSSL
      Ce produit (5733SC1) est obligatoire si vous installez la version    officielle (et supporté par Zend) de PHP : Zend Core for I5/OS.
     regardons ici OpenSSL, qui permet de générer des certificats afin de   crypter des fichiers (pour transmission à un tiers, par exemple)
     sous QP2TERM
     openssl genrsa -out private.key 512|1024|2048 (lg de la clé, 2048 est bien)
      -> cela génère votre clé privée dans un fichier private.key
     puis
     openssl req -new -days 365 -key private.key -x509 -out certificat.pem
     cela génère un certificat (pour 365 jours) représentant votre société                                                           (clé publique)   il faut répondre à des questions interactives :

    |

     You are about to be asked to enter information that will be incorporated  into your certificate request.  What you are about to enter is what is called a Distinguished Name or a DN  There are quite a few fields but you can leave some blank  For some fields there will be a default value,  If you enter '.', the field will be left blank.  -----  Country Name (2 letter code) [AU]: >FR  State or Province Name (full name) [Some-State]: >Bretagne  Locality Name (eg, city) []: >Nantes  Organization Name (eg, company) [Internet Widgits Pty Ltd]: >société  Organizational Unit Name (eg, section) []: >division  Common Name (eg, YOUR name) []: >moi  Email Address []: >moi@societe.com

    |

    vous devez ensuite générer un fichier ".rnd", qui servira pour initialiser  les fonctions aléatoires de cryptage
      a/ saisissez des données par EDTF (commande OS/400) ou   b/ passez la commande ls /* > .rnd
     le certificat ainsi obtenu "certificat.pem" doit être transmis à votre   interlocuteur, de même vous devez recevoir le sien (par ex. client.pem)
     pour crypter un fichier, a lui envoyer ensuite (FTP, mail...) :
     openssl smime -encrypt -inkey private.key -signer certificat.pem -binary     -in texte1.txt client.pem > texte1.p7m
     pour décrypter un fichier recu:
     openssl smime -decrypt -in texte2.p7m -inkey private.key          -recip certificat.pem > resultat.txt
      (ce fichier ne pouvant être décrypté QUE par vous)

    |

     Suite : OpenSSH (même produit)
      Vous pouvez lancer le démon SSh (sshd) afin de vous connecter à votre     serveur de manière sécurisée :
      en V5R40, sous PASE (QP2TERM) lancez sshd 
      en V6R1 STRTCPSVR *SSHD 

         la sécurité de SSH est basé sur une paire de clés asynchrones
            clé privée (locale), clé publique (transmise à l'interlocuteur)
            un serveur SSH posséde une paire de clé permettant de l'authentifier
            pour un utilisateur, il peut se connecter avec mot de passe          ou en utilisant lui aussi une paire de clés et en transmettant au          serveur sa clé publique.


    |

      en V6R1 les clés serveur sont générées automatiquement
      en V5R4, lancez :
       ssh-keygen -N "" -t rsa1 -f ssh_host_key
       ssh-keygen -N "" -t dsa  -f ssh_host_dsa_key
       ssh-keygen -N "" -t rsa  -f ssh_host_rsa_key
     (la chaine vide derrière -N est en fait un mot de passe)
     Vous pouvez maintenant vous connecter avec puTTY ou psftp (même produit)
      pour se connecter à un serveur SSH, sa clé doit être stockée dans     ~/.ssh/known_hosts sur le poste client
      pour récupérer la clé lancez :
           ssh-keyscan -t rsa serveurlinux(par ex)  >> ~/.ssh/known_hosts

    |

     Si la clé du serveur n'est pas celle mémorisée (reconfig suite à un crash)   vous verrez :
    @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @    WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!     @ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY! Someone could be eavesdropping on you right now (man-in-the-middle attack)! It is also possible that the RSA host key has just been changed. The fingerprint for the RSA key sent by the remote host is 16:a2:f6:a9:2f:e2:14:2e:25:53:34:9a:59:fb:2c:e7. Please contact your system administrator. Add correct host key in /home/CM/.ssh/known_hosts to get rid of this message Offending key in /home/CM/.ssh/known_hosts: 1  RSA host key for hmc.volubis.intra has changed and you have requested strict checking. Host key verification failed. $
    Editez le fichier known_hosts et enlever la ligne correspondante                                                   (1 dans notre exemple)

    |
     SSH client :
    
      Utilisez SSH pour passer des commandes sur un serveur Unix/linux ou HMC    (le démon doit être lancé bien sur, voyez la doc HMC si nécessaire)
      Vérifiez que le répertoire correspondant à votre HOMEDIR existe bien,    et que votre nom de profil ne fait pas plus de 8 caractères !
      lancez QP2Term et saississez
         ssh user@serveur    [serveur est votre serveur SSH, user votre profil]
         si le serveur n'est pas enregistré dans la liste des serveurs autorisés      le système vous informe que vous n'avez pas la clé: ____________________________________________________________________________
     ssh cm@serveurlinux  L'authenticité de l'hôte 'serveurlinux(10.3.1.10)' ne peut pas être établie                     L'empreinte digitale de la clé . est RSA.                     Voulez-vous poursuivre la connexion (oui/non) ? ____________________________________________________________________________  tapez oui, l'authentification se fera avec mot de passe

    |


      En cas de problèmes :

        - l'option -T indique de pas allouer un terminal (tty)
        - -v affiche des messages debug, plus il y a de v, plus c'est détaillé
        - -o PreferredAuthentications=password
             force une authentification par mot de passe, afin d'éviter           le mécanisme de recherche préalable de clés .rsa dans .ssh.

        enfin la commande hostname , affiche le nom du serveur sur lequel      vous connecté (on peut se perdre...)


     Vous pouvez passer une commande seule par ssh user@serveur  "la-commande"

    |

     Vous pouvez éviter la phase d'authentification en important la clé avant.

     il faut créer une paire de clé associée pour l'utilisateur

     ssh-keygen -t rsa  Création d'une paire de clés rsa publiques/privées.  Enter file in which to save the key (/HOME/USER/.ssh/id_rsa):
     Enter passphrase (empty for no passphrase): Enter same passphrase again:
    Votre identification a été sauvegardée dans /HOME/USER/.ssh/id_rsa  Votre clé publique a été enregistrée dans /HOME/USER/.ssh/id_rsa.pub.
     L'empreinte digitale de la clé est :  fc:ee:bf:db:fd:ac:fb:8f:e4:03:cb:7e:8e:04:d1:8c user@AS400.volubis.fr

     vous pouvez redemander l'affichage par ssh-keygen -l 

    |

    Cette commande a généré deux fichiers :
     id_rsa  , votre clé privé, id_rsa.pub  , votre clé publique   dans le cache local, /HOME/(votre_nom)/.ssh
     Transférez votre clé publique sur le serveur (par FTP par exemple)
      puis ajoutez cette clé au fichier "authorized_keys" par :   cat id_rsa.pub >> authorized_keys
      si cela créé le fichier, donnez les droits par (sur unix) :
      chmod 400 authorized_keys

     Vous pouvez ensuite vous connecter, depuis ce client :
     1/ en automatique, si vous n'avez pas saisi de "passphrase"
     2/ en saisissant la "passphrase" (plutôt que votre mot de passe),      dans le cas contraire.

    |

     Si vos clés ne sont pas dans le cache par défaut (/HOME/(votre_nom)/.ssh)
      Sur la machine source, vous pouvez utiliser l'option -i de la cde ssh                         (indiquez votre clé privée et son chemin)
      ou bien charger la clé en mémoire.
    Pour cela, vous devez :
     1/ définir l'agent pour lequel vous chargez la clé      ($SHELL représente /usr/bin/sh)
     2/ charger la clé en mémoire par ssh-add (par défaut id_rsa dans .ssh)     la "passphrase" vous est demandée, si vous en avez saisi une lors de la     création par ssh-keygen. ____________________________________________________________________________
     ssh-agent $SHELL  ssh-add  Entrez le mot de passe composé de /HOME/USER/.ssh/id_rsa :   Identité ajoutée : /HOME/USER/.ssh/id_rsa (/HOME/USER/.ssh/id_rsa)

    |

     Ensuite, connectez vous avec ssh :
     ssh cm@serveurlinux  Last login: Thu Apr 24 14:12:17 2008 from pc.volubis.intra  cm@serveurlinux:~>
      vous avez ici, une ligne de commande distante, tapez "exit pour sortir.

     Vous avez aussi deux utilitaires pour faire des transferts de fichiers
     scp -o IdentityFile=~/.ssh/id_rsa   user@serveurlinux:remoteDIR/*.xml /localeDIR
     copie tous les fichiers xml du repertoire remoteDIR dans localeDIR de l'IFS

     sftp -b /DIR/input.txt -o IdentityFile=~/.ssh/id_rsa   user@serveurlinux
     execute les commandes sftp contenues dans input.txt de /DIR

    |

     contenu de input.txt                                          get remoteDIR/*.xml /localeDIR  rm remoteDIR/*.xml  exit                                        
     utilisez les commandes get pour aller chercher, put pour déposer   et la plupart des commandes unix:
      - mkdir pour créer un répertoire   - cd pour changer le répertoire en cours   - rm pour détruire   - quit ou exit pour sortir   - help pour obtenir de l'aide
     pour exécuter tout cela en batch, passez par QP2SHELL
     SBMJOB CMD(CALL PGM(QP2SHELL) PARM('/QOpenSys/usr/bin/sh'  'sftp -b /HOME/CM/transfert.txt -o IdentityFile=~/.ssh/id_rsa +           user@serveurlinux') JOB(TRANSFERT)

    |
     Enfin, vous pouvez utiliser certains outils du "IBM AIX Toolbox"
    
      Commencez par vous rendre sur le site :     http://www-03.ibm.com/systems/p/os/aix/linux/toolbox/download.html
     et cliquez, sur le lien:  Download the AIX installp image for the rpm package manager for POWER.
     Cela va installer un utilitaire RPM sur votre system i  (rpm.rte)
      créez un répertoire, par exemple /QOpenSys/rpm et placez le fichier   puis sous QP2TERM, saisissez les commandes suivantes
      restore -xvqf rmp.rte   mv /QOpenSys/rpm/usr/opt /QopenSys/   ln -s /QOpenSys/opt /QopenSys/var/opt   ln -s /QOpenSys/opt /opt   ln -s /QOpenSys/var/opt /var/opt   cd /opt/freeware/lib   ln -s libpopt.so.0.0.0 libpopt.so   ln -s librpm.so.0.0.0 librpm.so   ln -s librpmbuild.so.0.0.0 librpmbuild.so

    |
     Retournez sur le site
       http://www-03.ibm.com/systems/p/os/aix/linux/toolbox/alpha.html
    
      choisissez un ou plusieurs utilitaires à téléchargez, placez les dans    /QOpenSys/rpm
            par exemple popt (library en C pour parser la ligne de commande)             ou wget (utiliatire pour utiliser un serveur http en mode texte)
     et tapez  (en étant sous /QOpenSys/rpm)
     /opt/freeware//bin/rpm --ignoreos --ignorearch --nodeps --replacepkgs    -hUv wget-1.9.1-1.aix5.1.ppc.rpm
    mntctl() failed to return fugger size: Le processus n'existe pas. group system does not exist - using root  ... group system does not exist - using root  wget ##################################################
    #__________________________________________________________________________

    |

    Vous pouvez maintenant utiliser cet utilitaire, il a été placé dans /usr/bin

     wget http://www.volubis.fr  --16:18:08--  http://www.volubis.fr/             => `index.html'  Résolution de www.volubis.fr... 213.41.176.157  Connexion vers www.volubis.fr[213.41.176.157]:80...connecté.  requête HTTP transmise, en attente de la réponse...200 OK  Longueur: 5,901 [text/html]
     100%[====================================>] 5,901         --.--K/s
     16:18:08 (12.85 MB/s) - « index.html » sauvegardé [5901/5901]
     #

      le fichier index.html a été placé dans le répertoire en cours.


    Les versions 6.1 et 7.1 proposent un nouveau produit (non facturable) : 5761TS1 / 5770TS1, qui d'ailleurs fonctionne avec PASE.

    Ce dernier propose en 6.1 qu'un PRTF génère un fichier dans l'IFS plutôt qu'un spool.

    Par exemple  
    
      -OVRPRTF QPDSPLIB DEVTYPE(*AFPDS) TOSTMF('/tmp/')
           puis DSPLIB xxx  *PRINT

        génère un fichier QPDSPLIB@Dt013.afp
      -OVRPRTF QPDSPLIB DEVTYPE(*AFPDS) TOSTMF('/tmp/') WSCST(*PDF)

        génère un fichier QPDSPLIBk3w5pz.pdf
      -OVRPRTF QPDSPLIB DEVTYPE(*AFPDS) TOSTMF('/tmp/test.pdf') WSCST(*PDF)

        génère un fichier test.pdf


    La PTF
    SI43471 apporte de nouveaux paramètres à la commande CPYSPLF (7.1 uniquement), offrant un accès direct et en mode commande à la fonction Host Print Transform permettant de transformer un spool existant.

    Voyez le résultat suite à la commande WRKACTJOB OUTPUT(*PRINT)

    CPYSPLF QPDSPAJB TOFILE(*TOSTMF) TOSTMF(/temp/wrkactjob.txt)

    CPYSPLF QPDSPAJB TOFILE(*TOSTMF) TOSTMF(/temp/wrkactjob.tif) WSCST(QSYS/QWPTIFFG4)

    CPYSPLF QPDSPAJB TOFILE(*TOSTMF) TOSTMF(/temp/wrkactjob.pdf) WSCST(*PDF)



Copyright © 1995,2011 VOLUBIS