pause-café
destinée aux informaticiens sur plateforme IBM i.
Pause-café #82
V7R4
IBMi, version 7.4
- Annoncée en Avril 2019
- Disponible en Juin...
- Fin de support annoncé pour 2026...
Attention
- Impossible d'installer la 7.4 sur des Power7
- SSL V3 étant déprécié, pas de support de Lan console via Client access pour Windows, utilisez ACS
- Seule la version 2.2.1 de DB2 Web Query est supportée par la 7.4
- Tous les anciens protocoles (SDLC, TDLC, DDI, Finance, Retail, Frame Relay, Wireless, X25) ne sont plus supportés
- Ces commandes n'existent plus :
- Create Ctl Desc (Finance) (CRTCTLFNC)
- Create Ctl Desc (Retail) (CRTCTLRTL)
- Create Ctl Desc (Remote WS) (CRTCTLRWS)
- Create Device Desc (Finance) (CRTDEVFNC)
- Create Device Desc (Retail) (CRTDEVRTL)
- Create Line Desc (DDI) (CRTLINDDI)•
- Create Line Desc (Fax) (CRTLINFAX)•
- Create Line Desc (Frame Relay) (CRTLINFR)
- Create Line Desc (SDLC) (CRTLINSDLC)•
- Create Line Desc (TDLC) (CRTLINTDLC)•
- Create Line Desc (Token-Ring) (CRTLINTRN)•
- Create Line Desc (Wireless) (CRTLINWLS)•
- Create Line Desc (X.25) (CRTLINX25)
- Create Network Interface (FR) (CRTNWIFR)
- ainsi que les commandes équivalente de création de contrôleurs
- Les paramètres correspondant ont aussi disparus dans diverses commandes (ADDTCPIFC ou VRYCFG, par exemple)
- Impossible de passer la commande RTVCFGSRC sur les objets (qui existent toujours, mais ne sont plus fonctionnels)
- Anynet (annoncé en fin de support en version 7.1) n'est plus paramétrable non plus (voir CHGNETA)
- IP over SNA a disparu
- pour faire du SNA sur IP, voyez HPRIP
Sinon, voyez la liste des PTF préalables : https://t.co/FNf1wWLOiq?amp=1
Installation, comme d'habitude...
passez par GO LICPGM, option 5 pour préparer l'installation
Gestion des logiciels sous licence - Edition cible (chargez les CD ou la clef USB)
impératif, acceptez les licences à l'avance, au mois pour le microcode et l'OS
Pensez bien à réserver un espace supplémentaire
Nous sommes parti d'une clef USB 3.0 (supportée par P8 et P9) plutôt qu'un catalogue d'images (ou de DVD)
pour cela téléchargez ce deux fichiers sur ESS
Lancez le .jar contenu dans "Utility for bootable Licenced machine Code ....zip"
Confirmez le formatage
C'est parti
copiez ensuite les fichiers .UDF correspondant aux autres produits.
Cette clef doit être considérée comme bootable :
Sur un Power8 indiquez l'unité comme unité alternative
sur un power9, cela doit faire partie des unités examinées automatiquement (attention au niveau de firmware)
car elle est formatée avec l'option *CONTAINER (voir developerWorks)
Faites un IPL-D
le système "reboot", puis
Si vous utilisez une clef USB
le système termine son IPL, et affiche
Faites GO LICPGM / option 11 et installez le reste...
Liste des différences/nouveautés :
- La nouveauté la plus importante est le produit DB2 Mirror
- option 48 de SS1, l'outils d'administration (sans licence) peut être installé sur un serveur tiers
- 5770DBM, le coeur du produit, soumis à licence, doit être installé sur chaque machine répliquée
- vous devez connecter ces 2 machines par les nouvelles cartes réseau RoCE (prononcer Rocky)
implémentant le protocole RDMA over Converged Ethernet
- Voyez cette présentation (Vidéo en Anglais)
- et la documentation en ligne
- disparition des paramètres liés à ANYNET, passez en HPRIP !
- la Data area QDFTJRN n'est plus honorée (utilisez STRJRNLIB)
- l'option SQE_NATIVE_ACCESS de QAQQINI, est ignorée, mais elle peut être présente.
- les versions de Java 7.0 et 7.1 ne sont plus proposées en OS 7.4 , utilisez java 8
- en conséquence le serveur IWS utilise par défaut java 8, 64 bits (option 17 de JV1)
- l'encodage par défaut pour java (file.encoding) est celui utilisé par PASE, et est désormais UTF-8 (1208)
- pour annuler, créez une variable d'environnement PASE_DEFAULT_UTF8 à "N"
- les PRTFs QSYSPRT et QPSAVOBJ repassent à MAXRCD(100.000) pendant l'upgrade
- Les disques pouvant faire 16 To (3999 dans l'ASP principal, 5999 dans un iASP !), les tailles sont affichées en Go
WRKDSKSTS
- Nouvelle option sur SAVE/21 (bien pratique)
- plus de possibilités de filtrage sur DSPLOG
- Le nom du travail peut :
- être omis (*ALL)
- être générique (JOB*)
- Le nom du profil aussi
- enfin, vous pouvez ne saisir qu'un n° de JOB
- avant, l'historique système était collectée par le Job SCPF, maintenant il s'agit d'un job séparé QHST
- Les CLLE et les commandes peuvent être compilés depuis un source de l'IFS
DSPPGM et DSPMOD restituent cette information
- Nouvelles options pour TEXT de CRTSRVPGM
- *BLANK, comme avant
- *EXPORTSRC : le texte du source de liage est utilisé (QBNDSRC)
- *MODULE : le texte du premier module est utilisé
- WORKLOAD ou groupe de charge de travail
STRAUTCOL
- permettent de limiter l'usage de ressources processeur (en nombre) pour certains travaux
Avant par sous système
Désormais , aussi par JOBD, un sous-système peut donc héberger des travaux ayant des workload différents
- Deux nouveaux points d'exit pour SBMJOB et CHGJOB
permettent d'intercepter l'utilisation de certaines JOBQ, dans un but de trace.
on doit fournir, en donnée complémentaire :
- un nom de JOBQ ou *ANY
- un nom de bibliothèque ou *ANY
(attention : faire SIGNOFF et se re-logger pour en bénéficier !)
- Ce pgm envoi un message à QSYSOPR
PGM PARM(&DATA &DATALEN)
DCL VAR(&DATA) TYPE(*CHAR) LEN(512) /* voir détails ICI */
DCL VAR(&DATALEN) TYPE(*INT) LEN(4)
DCL &JOB *CHAR 10
DCL &USER *CHAR 10
DCL &JOBQ *CHAR 10
CHGVAR &JOB %SST(&DATA 5 10)
CHGVAR &USER %SST(&DATA 15 10)
CHGVAR &JOBQ %SST(&DATA 47 10)
SNDMSG MSG('JOBQ' *BCAT &JOBQ *BCAT 'Utilisée par JOB' *BCAT +
&JOB *TCAT '(' *CAT &USER *BCAT ')') TOUSR(QSYSOPR)
ENDPGM- SNDSMTPEMM (envoi de mail)
- Le sujet passe à 500C.
- Le corps du mail à 5000c.
- Netserver implémente SMBv3
- résumé des épisodes précédents....
- SMBv2 est arrivé en 7.2 via PTF
- Pour connaitre votre version (et la forcer) : nas8N1021710
- Les dernières PTF (7.3) permettent un partage vers un Mac
- SBMv3 est disponible depuis Windows 8 ou serveur 2012
- il propose (entre autre) un dialogue crypté de bout en bout
- en 7.4, SMBv3 est, par défaut, actif
- une négociation aura toujours lieu entre le client et le serveur pour essayer de trouver une version commune
(une connexion depuis un PC sous Windows Seven fonctionne, à priori)- Les APi Netserver ont été modifiées pour intégrer le cryptage (voir QZLSADFS)
- le menu NETS (il faut installer QUSRTOOL) intègre ces nouveautés via la PTF SI70518
- option 3 (Add a share)
- option 7 (Display)
Attention, la connexion se passe bien depuis Windows 10, elle est refusée depuis Windows 7
(cryptage => SMBv3)
- Il y a une RFE pour intégrer ce paramètre à Navigator for i (ce n'est pas le cas aujourd'hui)
- Enfin SST bouge beaucoup
- De nouvelles commandes
- CHGSSTSECA
Implémente de nouvelles règles de gestion des mots de passe, plus conforme aux standards
il faut se "signer" avec un profil SST
page suivante...
page suivante...
Il y a aussi une commande DSPSSTSECA
- CRTSSTUSR, CHGSSTUSR, DLTSSTUSR
- DSPSSTUSR
option5
- STRSST
- Menu de l'option 8 ré-ordonné
- option 1, on peut indiquer un interval d'expiration du mot de passe, par utilisateur
- option 5 quand vous êtes en PWDLVL 1
- option 5 quand vous êtes en PWDLVL 2
Puis F10, vous retrouver les options de CHGSSTSECA
- Option 6 : historique des actions SST liées à la sécurité
- Protocoles de sécurité et algorithmes de chiffrement
- SSL v2, n'est plus admis
- les protocoles TLSv1.1 et TLSv1.0 ne sont plus actifs, par défaut
- les algorithmes ou modes opératoires suivants, ne sont plus intégrés QSSLCSLCTL = *OPSYS.
- Triple Des (3DES)
- Cipher BlockChaining (CBC)
- RSA key pair
- Sont en standard :
- AES_128_GCM_SHA256
- AES_256_GCM_SHA384
- CHACHA20_POLY1305_SHA256
- ECDHE_ECDSA_AES_128_GCM_SHA256
- ECDHE_ECDSA_AES_256_GCM_SHA384
- CDHE_RSA_AES_128_GCM_SHA256
- ECDHE_RSA_AES_256_GCM_SHA384
- Si vous avez besoin de ces algorithmes dépréciés (après les avoir ajoutés à QSSLCSL par WRKSYSVAL) ou de ces protocoles :
- il faut les autoriser dans SST , macro TLSCONFIG dans Advanced Analysis (STRSST/Start a service tool / 4 / 1 / 2 / 14)
- -eligibleDefaultProtocols:<ProtocolNumber>
- -eligibleDefaultCipherSuites:<cipherSuiteNumber>
- TLSv1.3 est ajouté par défaut
- là aussi, utiliser la macro TLSCONFIG dans Adanced Analysis pour l'enlever
- Enfin, IBM dit réfléchir à (version 7.5 ?) :
- passer QCRTAUT (droits *PUBLIC/dft) à *USE
- proposer un nouvel algorithme pour les mots de passe (SHA2/3 ?)
- nouvelle valeur pour QPWDLVL ?
- si oui, le saut ne sera possible que depuis QPWDLVL 3
- en 7.3, log (trace) tous les accès pour un profil donné (USRPRF)
La nouveauté 7.4 est la collecte par objet
- CHGAUTCOL
sur des fichiers de l'IFS
Cela est montré sur chaque objet (*OBJINF ou *NONE)
- Puis vous démarrez STRAUTCOL non pas par profil, mais pour le type *OBJAUTCOL
et voilà
La commande DSPSECA vous indique si la collecte est active
ainsi que Navigator for i
- pour consulter le détail d'une collecte, utilisez
- QSYS2.AUTHORITY_COLLECTION_LIBRARIES
- pour voir tous les objets (de QSYS) collectés
- QSYS2.AUTHORITY_COLLECTION_OBJECT
- pour voir les objets d'une biblothèque (avec un WHERE)
- QSYS2.AUTHORITY_COLLECTION_DLO
- pour voir les dossiers/documents de QDLS collectés
- QSYS2.AUTHORITY_COLLECTION_FSOBJ
- pour voir les autres branches de l'IFS
- A noter dans ces vues :
- REQUIRED_AUTHORITY
- *ALL
- *CHANGE
- *USE
- CURRENT_AUTHORITY
- droits réellement utilisés
- AUTHORITY_SOURCE
- USER PRIVATE (les droits de l'utilsateur)
- PUBLIC (les droits de *PUBLIC)
- USER *ALLOBJ (l'utilisateur est *ALLOBJ)
- ....
- ADOPT_AUTHORITY_USE
- par adoption de droits ? (pgm en *OWNER)
- ADOPTING_PROGRAM_NAME
- si oui, nom du programme.
Nouveautés SQL de la version 7.4
- INSERT INTO <table> DEFAULT VALUES
- Pour réserver une ligne ((assignation d’un champ Identity, puis mise à jour dans un 2ème temps)
- Tester un trigger
- ....
- Fonctions de cryptage
- HASH_MD5 (résultat de 128 bits)
- HASH_SHA1 (160 bits)
- HASH_SHA256 (256)
- HASH_SHA512 (512)
- La fonction nommée HASH en 7.3 , liée au partitionnement (au sens DB2 Multi-systèmes) devient HASH_VALUE
- SYSTOOLS.SPLIT('série-éléments' , 'séparateur')
- Fonction table qui retourne une ligne par élément rencontré
- Exemple : Split('A/B/C/D/E' , '/')
- QSYS.DATA_AREA_INFO : nouvelle fonction table qui donne des infos sur une *DTAARA
- et la VUE du même nom
- QSYS2.MESSAGE_FILE_DATA
vue affichant le contenu des fichiers messages (*MSGF)
- Vue SYSTOOLS.FIRMWARE_CURRENCY
•FW_CURRENCY VARCHAR(28) Niveau actuel de firmware
•FW_CURRENT_FIXPACK VARCHAR(20) service pack
•FW_RELASE_DATE DATE date du niveau actuel
•FW_MACHINE_TYPE_MODEL VARCHAR(20) type et modèle
•FW_RECOMMENDED_UPDATE VARCHAR(20) niveau de mise à jour recommandé (même version)
•FW_RECOMMENDED_UPGRADE VARCHAR(20) version recommandée
- SYSTOOLS.SPOOLED_FILE_DATA
Fonction table retournant le contenu d'un spool (fait un CPYSPLF dans QTEMP et affiche le fichier)
Nouveautés RPG de la version 7.4
Accessibles en 7.3 TR6
Nouveau mot-clé dans les Data Structures: SAMEPOS
Permet d'indiquer qu'une sous-zone démarre à la même position qu'une autre
Même si elle est de longueur supérieure ce qui n'était pas possible avec OVERLAY
On peut donc aussi utiliser ce mot clé pour recouvrir des sous-zones par un tableau, ce qui permet d'éviter le CTDATA qui pose problème dans les programmes de service
.Nouveautés disponibles seulement en 7.4
Tableaux dynamiques
2 possibilités pour les déclarer DIM(*AUTO:nbmax) ou DIM(*VAR:nbmax)
DIM(*AUTO:nbmax)
nbmax postes au maximum (ici 500)
La dimension du tableau s'incrémente au fur et à mesure des affectations par nom-tableau(*NEXT)
Il est possible de définir explicitement le nombre de postes avec la BIF %elem(nombre de postes)
DIM(*VAR:nbmax)
nbmax postes au maximum (ici 500)
La dimension doit être définie explicitement par la BIF %elem(nombre de postes) pour pouvoir affecter des valeurs dans les postes
La fonction %ELEM admet un deuxième paramètre ce qui permet :
lorsque %elem est la source , de retrouver :
-le nombre d'occurences d'un tableau
Nblignes = %elem(montableau)
-le nombre de postes actuellement alloués d'un tableau dynamique
Nbpostes = %elem(montableau:*ALLOC)
-la dimension maximale d'un tableau dynamique
NbpostesMax = %elem(montableau:*MAX)
Lorsque %elem est la cible de l'affectation, de renseigner:
-la dimension d'un tableau
%elem(montableau) = Nblignes
-l'allocation des postes
%elem(montableau:*ALLOC) = Nbpostes
-la dimension pour laquelle on conserve ce qui est déjà renseigné lors d'un rétrécissement puis agrandissement
%elem(montableau:*KEEP) = Nbpostesdont le contenu est conservé
Tableaux chargés à la compilation
Il est maintenant possible de déclarer des tableaux chargés à la compilation sans indiquer le nombre de postes
DIM(*CTDATA)
Seul un poste par enregistrement est possible PERRCD(1)
Serveur de web services
Nous savions déjà déployer des programmes ILE (RPG ou COBOL) sous forme de Web services
Avec la 7.4 + SF99662 (ou SF99722[7.3], SF99713[7.2])
7.4 7.3 7.2 SF99662
+SI71125SF99722/19
+SI71124SF99713/32
+SI70478,SI71123
nous pouvons aussi déployer des web services (REST uniquement) basés sur SQL
Premier exemple, une requête SQL simple
Indiquez ici :
- le serveur de connexion (base locale par défaut)
- la bibliothèque par défaut (en dehors de ce nom, il faudra qualifier)
- la convention d'appellation
- *SQL
- le qualifiant c'est le point
- sans qualifiquation, c'est la notion de OWNER qui s'applique
- *SYS
- la qualifiant c'est le /
- sans qualifiquation, *LIBL est utilisée
- la liste de bibliothèques (au moins utilisée pour les procédures stockées et les fonctions, avec *SQL)
- Vous pouvez indiquer *LIBL et compléter avec des bibliothèques avant/après (utiliser des « , » dans ce cas, l’espace ne fonctionne pas)
- *LIBL : *JOBD associée au user serveur de services
puis par le bouton Add, saisissez une requête SQL
Etape suivante
Paramètres
- type de résultat
- Multi-row : plusieurs lignes
- Single-row : une seule ligne
- Media-ressource : données binaires
- Trim
- répercussion (ou pas) des espaces dans les données caractères
- Inclure SQLSTATE dans les données retournées
- en cas d'erreur
- toujours
- jamais
- traiter les Warning SQL (SQLSTATE à 01xxxx) comme des erreurs
- Oui
- Non
- Statut HTTP en cas de réussite
- Statut HTTP en cas d'erreur
- Choix de la méthode HTTP
- GET
- POST
- PUT
- DELETE
- Choix du format de sortie
- JSON
- XML
- HTML
Choix du profil de référence (QWSERVICE/dft)
Puis récapitulatif :
Description du service
JDBC
Requête, méthode et format de sortie
une fois le service créé, vous pouvez
- l'arrêter, ce qui permet
- de le désinstaller
- de le redéployer (modification)
- voir les propriétés
- ce qui permet d'avoir accès aux propriétés JDBC
testons
format HTML, SQLSTATE inclus Format JSON, sans SQLSTATE SQLState en fonction des formats de données :
En cas d'erreur :
ici, un code pays sera transmis
placez alors dans la requête un ou plusieurs ?
La syntaxe des la requête est contrôlée lorsque vous cliquez sur « Continue » ou « Add »
- Syntaxe
- Existence de la table, des colonnes …
ils serons détectés, en tant que paramètres, le type sera automatiquement attribué en fonction de la colonne testée
le lien est fait ici :
et cela se retrouve sur l'écran récapitulatif
Résultat
Single-row
la différence est là
Résultat (formaté par Firefox)
Particularités de liste de bibliothèques
Attention, ces valeurs sont liées et définissent la résolution des objets ou fonctions non qualifiées
- Avec *SQL et « Default schema » = *LIBL, La bibliothèque par défaut sera la 1ère bibliothèque de « Library list » qui n’est pas *LIBL. A défaut, ce sera le profil utilisateur
- Avec *SYS et « Default schema » = *LIBL, Pas de bibliothèque par défaut, utilisation de la liste de bibliothèques (via la JOBD)
Données binaires
depuis cette table
remarquez le type SQL retourné
et le type MIME déclaré
Résultat
Vous devez indiquer le type de données en retour
- 1 seul type pris en compte
- Si vous en indiquez plusieurs, seule la 1ère valeur est prise en compte
Résultat
Par exemple, avec un PDF :
Par exemple, avec un JPG :
Procédure stockées
Soit cette procédure, qui avec un paramètre en entrée (position de début de liste) retourne 50 producteurs
Déployons
Instruction SQL
Résultat "Multi-Row"
Lien avec le paramètre en entrée
Résultat
UDF
Vous pouvez utiliser directement des fonctions SQL ou des UDF conjointement avec VALUES :
Post / Put
exemple d'insertion de données (création d'une nouvelle ligne)
Cette fois, la requête est un INSERT
Les paramètres sont détectés
Renommons les
retour d'un status à 201 Created
et cochez Wrap Input parameters
pour tester, utilisons soapUI, méthode POST, remarquez le JSON envoyé
si vous avez oublié, le fichier swagger vous rappelle les paramètres attendus
Si vous cochez Do not Wrap Input parameters :
Vous devrez indiquer pour chaque valeur le mode de passage correspondant. Possible si vous avez peu de colonnes dans la table en question !
Exemple d'appel :
POST /web/services/itemps?agent=User iTemps& ticket=R-000136& heure=02:30:00 HTTP/1.1
Host: neptune:10032
Content-Type: application/x-www-form-urlencoded
Accept: */* Content-Length:
En cas d'erreur, cherchez un job QZDASOINIT sous le profil QWSERVICE (ou celui indiqué dans le serveur)
Nom des éléments dans les données retournées
Multiple rows
Pour vous aider à automatiser
Prise en charge dans les fichiers de configuration.
Un nouveau script permet de retrouver le fichier de configuration d'un service existant.
getConfigurationFile.sh
-server 'server-name' -locationDirectory 'location-directory'
[ -type '*ML|*PROPERTY|*ALL' ]
[ -serviceList 'service-list|*ALL' ]
Quelques tests en cours
- Redéploiement : si vous indiquez un nom différent, le service est redéployé avec ce nom, ET le service d'origine est également conservé
- Vous pouvez utiliser des fonctions SQL dans vos requêtes
Mais impossible d’utiliser des paramètres dans des fonctions standard du langage :
- Plusieurs problèmes de compilation Java liés à des noms en doubles ou mots-clés réservés Java (par exemple nom de procédure=nom paramètre)
- Caractères spéciaux / accentués dans les messages personnalisés : plantage et obligation de désinstaller le service, sauf SI70949
- Paramètre en sortie de procédure stockée : provoque HTTP500 et "Array index out of range"
- Contrôle du header HTTP ? Du type MIME en sortie ?
- Données binaires : impossible en entrée ...
Enfin les produits Open sources suivants sont disponibles
- Driver unixODBC (ODBC en mode Pase)
le driver d'IBMi Access lui même :
Téléchargez le sur https://www-01.ibm.com/support/docview.wss?uid=isg3T1026805
(la dernière ligne)
Dézippez puis transférez le fichier dans un répertoire sur l'IBM i
Installez le par :yum install ibm-iaccess-1.1.0.11-0.ibmi7.2.ppc64.rpmIl doit apparaitre, ici :
La config se trouve dans /QOpenSys/etc/odbc.ini
l'installation du driver à créé une entrée *LOCAL
Vous pouvez l'utiliser en mode commande
- tree
- nodeJS 12
- Maven
- Lua
- GDB : le debugger pour le compilateur GCC
- langage R (le driver unixODBC peut être utilisé pour accèder à DB2)
- ActiveMQ (compatible JMS)