# HERCULES: Overview {{INLINETOC}} Hercules est une implémentation logicielle open source des architectures mainframe System/370 et ESA/390, en plus du nouveau z/Architecture 64 bits. Hercules s'exécute sous Linux, Windows (98, NT, 2000 et XP), Solaris, FreeBSD et Mac OS X (10.3 et versions ultérieures). Hercules est un logiciel Open Source certifié OSI sous licence Q Public License. Hercules a été créé par Roger Bowler et est maintenu par Jay Maynard. Jan Jaeger a conçu et mis en œuvre de nombreuses fonctionnalités avancées d'Hercules, notamment la reconfiguration dynamique, la console intégrée, l'exécution interprétative et la prise en charge de z/Architecture. Une équipe de programmeurs dédiée travaille constamment à la mise en place de nouvelles fonctionnalités et à la correction des bugs. ## Installation ### Construction à partir des sources * Télécharger le fichier de distribution hercules-3.07.tar.gz *Décompresser le fichier de distribution: ``` tar xvzf ../hercules-3.07.tar.gz cd hercules-3.07 ``` * Vérifier que toutes les versions correctes de tous les packages requis sont installées: ``` ./util/cvslvlck ``` * Configurer Hercules pour le système: ``` ./configure ``` Par défaut, le script `configure` tentera de deviner les indicateurs d'optimisation du compilateur appropriés pour le système. Si ses suppositions s'avèrent être fausses, on peut désactiver toute optimisation en passant l'option `--disable-optimization`, ou spécifier vos propres indicateurs d'optimisation avec `--enable-optimization=FLAGS`. Pour des options de configuration supplémentaires, exécuter: `./configure --help` * Construire les exécutables: ``` make ``` * Installer les programmes: en tant que root: ``` make install ``` ### Installation sous Red Hat/Centos * Télécharger le fichier RPM * Installer le RPM: ``` rpm -Uvh RPMfile ``` Cela mettra les exécutables Hercules dans /usr/bin et les bibliothèques dynamiques dans /usr/lib et /usr/lib/hercules, que l'on pourra exécuter n'importe où. Les exemples de fichiers de configuration seront placés dans /etc/hercules et le jeu de cartes IPLable de l'utilitaire autonome ZZSA sera placé dans /usr/share/hercules. ### Installation sous Debian/Ubuntu Les paquets Debian sont disponibles pour "Woody" et les versions ultérieures. * Utiliser apt: ``` apt-get install hercules ``` * Manuellement avec dpkg (après avoir téléchargé le package .deb) ``` dpkg -i DEB ``` ## Démarrage de Hercules Pour démarrer Hercules, utiliser cette commande à l’invite de commande Unix ou Windows: ``` hercules [-f nomfichier ] [ -d ] [-p dyndir ] [[-l dynmod ] ...] [> logfile ] ``` où: * **-f nomfichier**: spécifie le nom du fichier de configuration. La valeur par défaut, si aucune n'est spécifiée, est hercules.cnf . La valeur par défaut peut être remplacée par la variable d’environnement HERCULES\_CNF . * **-d**: spécifie que Hercules doit être exécuté en mode 'daemon', dans lequel il s'exécute de manière invisible sans console attachée. * **-p dyndir**: spécifie le répertoire à partir duquel les modules dynamiques doivent être chargés. La valeur par défaut dépend de la plate-forme hôte sur laquelle Hercules est exécuté. Cette option remplace la valeur par défaut. * **-l dynmod**: spécifie le nom d'un module dynamique supplémentaire à charger au démarrage. Plusieurs modules supplémentaires peuvent être spécifiés, même s’ils doivent tous être précédés du spécificateur d’option -l . * **> logfile**: spécifie un fichier journal facultatif qui recevra une copie de tous les messages affichés sur le panneau de commande Ensuite, connecter un client tn3270 au port de la console (normalement le port 3270). Le client sera connecté à la première adresse de périphérique 3270 spécifiée dans le fichier de configuration (il doit s'agir de l'adresse de la console principale). Si la console principale est une console 1052 ou 3215, connecter un client Telnet au lieu d'un client tn3270. On peut maintenant entrer une commande ipl à partir du panneau de commande. ## Utilisation du clavier L’écran principal de Hercules contient une liste déroulante de messages avec une zone de saisie des commandes et une ligne d’état du système au bas de l’écran. Pour faire défiler les messages, utiliser les touches `Page précédente` ou `Page suivante`, les touches `Ctrl+Flèche vers le haut` ou `Ctrl + Flèche vers le bas`, ou les touches `Home` ou `End` et/ou les touches `Ctrl + Home` ou `Ctrl + End`. Les messages importants sont mis en surbrillance dans une couleur différente (généralement le rouge) et ne peuvent pas être déplacés de l'écran pendant deux minutes. Si la gestion du curseur étendu est disponible, les messages importants actuellement en haut de l'écran peuvent être supprimés plus tôt en déplaçant le curseur sur la ligne contenant le message, puis en appuyant sur entrée. Utiliser la touche `Insert` pour basculer entre les modes insertion et superposition lorsqu'on tape dans la zone de saisie de commande. Utiliser les touches `Home` et `End` pour accéder au premier ou au dernier caractère de la commande ou utiliser les touches `fléches gauche/droite` pour accéder à un caractère spécifique. Utiliser la touche `Echap` pour effacer la zone de saisie. Si vous appuyer sur `Echap` lorsque la zone de saisie de commande est déjà vide, l'écran passe en mode d'affichage semi-graphique "Nouveau panneau", qui indique l'état général du système et des périphériques. En mode d'affichage semi-graphique "Nouveau panneau", il n'y a pas de zone de saisie de commande. Des "touches de raccourci" à caractère unique sont utilisées à la place pour émettre certaines des fonctions les plus courantes telles que le démarrage ou l'arrêt de la CPU. Les touches de raccourci sont celles qui sont en surbrillance. En appuyant sur le '?' key affiche de brèves informations d'aide sur l'utilisation du panneau semi-graphique. ### Manipulation normale du curseur ^ Touche ^ action ^ | Esc| Efface le contenu de la zone de saisie de commande. Si la zone de saisie de commande est déjà vide, passez au nouveau panneau semi-graphique. | | Del| Supprime le caractère à la position du curseur. | | Retour arrière| Efface le caractère précédent. | | Insérer| Bascule entre le mode insertion et le mode superposition. | | Languette| Tente de compléter le nom de fichier partiel à la position du curseur dans la zone de saisie de commande. S'il existe plusieurs fichiers possibles, une liste des noms de fichiers correspondants est affichée. | | Accueil| Déplace le curseur au début de la saisie dans la zone de saisie de commande. Si la zone de saisie de commande est vide, fait défiler la zone de message vers le haut. | | Fin| Déplace le curseur à la fin de l'entrée dans la zone de saisie de commande. Si la zone de saisie de commande est vide, fait défiler la zone de message vers le bas. | | Page Up| Fait défiler la zone de message d’un écran à l’autre. | | Bas de page| Fait défiler la zone de message d’un écran à l’autre. | | Flèche vers le haut| Rappelle la commande précédente dans la zone de saisie. | | Flèche vers le bas| Rappelle la commande suivante dans la zone de saisie. | | Flèche droite| Déplace le curseur sur le caractère suivant de la zone de saisie. | | Flèche gauche| Déplace le curseur sur le caractère précédent de la zone de saisie. | | Ctrl + flèche vers le haut| Fait défiler la zone de message d'une ligne. | | Ctrl + flèche bas| Fait défiler la zone de message d'une ligne. | | Ctrl + Accueil| Fait défiler la zone de message vers le haut. | | Ctrl + Fin| Fait défiler la zone de message vers le bas. | Les fonctions de clavier supplémentaires suivantes entrent en vigueur lorsque la fonction de traitement du curseur étendu Hercules (OPTION\_EXTCURS) est activée au moment de la compilation. À l'heure actuelle, cette fonctionnalité est activée sur la plate-forme Windows uniquement. ### Gestion étendue du curseur ^ Touche ^ action ^ | Alt + flèche vers le haut | Déplace le curseur d'une rangée. | | Alt + flèche bas | Déplace le curseur d'une ligne vers le bas. | | Alt + flèche droite | Déplace le curseur vers la droite d'une colonne. | | Alt + flèche gauche | Déplace le curseur à gauche d'une colonne. | | Languette | Si le curseur est en dehors de la zone de saisie de commande, déplace le curseur au début de la saisie dans la zone de saisie de commande. Sinon, se comporte comme décrit dans le tableau précédent. | | Accueil | Si le curseur est en dehors de la zone de saisie de commande, déplace le curseur au début de la saisie dans la zone de saisie de commande. Sinon, se comporte comme décrit dans le tableau précédent. | | Fin | Si le curseur est en dehors de la zone de saisie de commande, déplace le curseur à la fin de la saisie dans la zone de saisie de commande. Sinon, se comporte comme décrit dans le tableau précédent. | ## Commandes du panneau ### Liste des commandes Ce qui suit est ce qui est affiché sur la console matérielle Hercules (HMC) en réponse au message '?' commande en cours de saisie. Veuillez noter qu'il peut ne pas être complètement exact ou à jour. S'il vous plait entrer le '?' commande par vous-même pour une liste plus complète, précise et à jour des commandes de panneau prises en charge. ^ Commande ^ Description de la commande ^ | ? | lister toutes les commandes | | help | commande une aide spécifique | | * | (commentaire de journal à syslog ) | | message | display message sur la console a la VM | | msg | identique au message | | msgnoh | identique au message - pas d'en-têt e | | hst | historique des commandes | | hao | Hercules Opérateur Automatique | | journal | direct journal sortie | | logopt | change log options | | version | informations de versio n | | quit | terminer l'émulateur | | exit | (synonyme de 'quit' ) | | cpu | définir le cpu cible pour l'affichage du panneau et les commande s | | start | start CPU (ou imprimante si argument donné) | | stop | stop CPU (ou imprimante si argument donné ) | | startall | démarre tous les processeurs | | stopall | arrêter tous les processeur s | | cf | configurer le processeur actuel en ligne ou hors ligne | | cfall | configure tous les processeurs en ligne ou hors lign e | | .reply | Commande scp | | !message | scp message prioritaire | | ssd | arrêt du signa l | | ptt | display pthread trac e | | i | génère une interruption d'attention d'E / S pour le périphérique | | ext | générer une interruption externe | | restart | générer une interruption de redémarrage | | archmode | set architecture mod e | | loadparm | set du paramètre IP L | | ipl | IPL Normal à partir du périphérique xxxx | | iplc | IPL Clear du périphérique xxxx | | sysreset | Issue SYSTEM Réinitialisation du fonctionnement manuel | | sysclear | Issue SYSTEM Clear Réinitialisation du fonctionnement manuel | | store | le statut de la CPU du magasin au zéro absol u | | psw | afficher ou modifier le mot d'état du programme | | gpr | afficher ou modifier les registres à usage général | | fpr | afficher les registres à virgule flottante | | fpc | afficher registre de contrôle en virgule flottante | | cr | afficher ou modifier les registres de contrôle | | ar | afficher les registres d'accès | | pr | afficher le préfixe enregistrer | | timerint |afficher la minuterie ou mise à jour des minuteries | | clocks | afficher tod clkc et cpu timer | | ipending | afficher les interruptions en attente | | ds | affichersubchannel | | r | afficher ou modifier le stockage réel | | v | afficher ou modifier le stockage virtuel | | u | démonter le stockage | | devtmax | afficher ou définir le nombre maximal de threads de périphérique | | k | afficher trace interne cckd | | attach | configuration d'un périphérique | | detach | retirer le périphérique | | define | renommer l'appareil | | devinit | réinitialiser le périphérique | | devlist | Liste de périphériques ou tous les périphériques | | qd | query dasd | | automount | afficher/mettre à jour lesrépertoires des bande automount | | scsimount | montages automatiques sur bande SCSI | | cd | changement de répertoire | | pwd | afficher répertoire courant | | sh | commande shell | | cache | commande cache | | cckd | commande cckd | | shrd | shrd commande | | conkpalv | afficher/modifier la console Paramètres persistants de TCP | | quiet | Activer/désactiver l'actualisation automatique des données d'affichage du panneau | | t | instruction trace | | t+ | activation trace (trace on) | | t- | désactivation trace (trace off) | | t? | requête de trace | | s | instruction pas à pas | | s+ | activation pas à pas | | s- | désactivation pas à pas | | s? | requête pas à pas | | b | définir le point d'arrêt | | b+ | définit un point d'arrêt | | b- | supprimer un point d'arrêt | | g | désactiver l'instruction pas à pas et démarrer la CPU | | ostailor | interruption programme de trace | | pgmtrace | interruption programme de trace | | savecore | enregistrer une image de base dans un fichier | | loadcore | charge un fichier image principal | | loadtext | charge un fichier de pont de texte | | ldmod | charge un module | | rmmod | supprime un module | | lsmod | liste modules dynamiques | | lsdep | liste les deépendances du module | | iodelay | affichage de délai ou réglage de la valeur de délai d'E/S | | ctc | activer/désactiver le débogage CTC | | toddrag | afficher ou définir le facteur de traînée de l'horloge TOD | | panrate | affichar ou définir la fréquence pour l'actualisation de la console | | msghld | afficher ou définir le délai d'expiration des messages en attente | | syncio | afficher statistiques des appareils syncio | | maxrates | afficher le taux maximum observé de MIPS/SIOS pour l'intervalle défini ou définir un nouvel intervalle de reporting | | defsym | Define symbol | | script | Exécuter une séquence de commandes du panneau contenues dans un fichier | | cscript | Annule un fil de script en cours d'exécution | | evm | ECPS:VM Commands (Deprecated) | | ecpsvm | ECPS:VM Commandes | | aea | Afficher les tables AEA | | aia | Afficher les champs AIA | | tlb |Afficher les tables TLB | | sizeof | affiche la taille des structures | | suspend | Suspendre hercules | | resume | reprendre hercules | | herclogo | Lire un nouveau fichier de logo hercules | | traceopt | Options d'affichage des traces d'instruction | | cmdtgt | Spécifie la cible de la commande | | herc | Hercules commande | | scp | Envoie la commande scp | | pscp | Envoie la commande scp du message prio message | | sf+dev | ajoute un fichier shadow | | sf-dev | supprime un fichier shadow | | sfc | compresse les fichiers shadow | | sfk | vérifie les fichiers shadow | | sfd | affiche les statistiques du fichier shadow | | t{+/-}dev | activer/désactiver le traçage CCW | | s{+/-}dev | activer/désactiver le pas à gauche | | t{+/-}CKD | active/désactive le traçage CKD_KEY | | f{+/-}adr | marque les frames inutilisables/utilisables | La commande `ip`l peut également être utilisée pour charger un cdrom ou un serveur. Par exemple, si un CD de distribution Linux SuSE S/390 standard est chargé et monté sur /cdrom par exemple, ce cdrom peut être appelé dans la commande ipl comme ceci: `ipl /cdrom/suse.ins` Les commandes `attach` et `detach` sont utilisées pour ajouter ou supprimer dynamiquement des périphériques de la configuration, et la commande `define` peut être utilisée pour modifier le numéro de périphérique d'un périphérique existant. La commande `devinit` peut être utilisée pour rouvrir un périphérique existant. Les arguments (s'ils sont spécifiés) remplacent les arguments spécifiés dans le fichier de configuration pour ce périphérique. Le type d'appareil ne peut pas être changé et ne doit pas être spécifié. Cette commande peut être utilisée pour rembobiner une bande, monter une nouvelle bande ou un fichier image disque sur un périphérique existant, charger un nouveau jeu de cartes dans un lecteur ou fermer et rouvrir une imprimante ou un périphérique de perforation. En mode pas à pas, appuyer sur la touche Entrée pour passer à l’instruction suivante. Il existe également un autre panneau de commande semi-graphique. Appuyer sur `Echap` pour basculer entre le format de ligne de commande et le format semi-graphique. Taper `?` pour obtenir de l'aide dans l'un ou l'autre des panneaux de contrôle. Certaines commandes offrent également des informations d'aide supplémentaires concernant leur syntaxe, etc. Entrer `help ` pour afficher ces informations d'aide supplémentaires toutes les commandes ne prennent pas en charge l'aide. Quand une commande est préfixée avec '-', la commande ne sera pas réaffichée sur la console. Ceci peut être utilisé dans des scripts et est également utilisé en interne lorsque des commandes doivent être appelées sans être rediffusées sur le panneau. ### Le fichier hercules.rc (commandes d'exécution) Hercules prend également en charge la possibilité d'exécuter automatiquement les commandes du panneau au démarrage via le fichier "commandes d'exécution". Si le fichier de commandes d'exécution apparaît lors du démarrage d'Hercules, chaque ligne qu'il contient est lue et interprétée comme une commande en panneau, exactement comme si la commande avait été entrée à partir de la console système de la console HMC. Le nom de fichier par défaut du fichier de commandes d'exécution est "hercules.rc", mais vous pouvez le remplacer en définissant la variable d'environnement `HERCULES\_RC` sur le nom de fichier souhaité. À l'exception de la commande `pause` (voir le paragraphe ci-dessous), chaque commande lue dans le fichier de commandes d'exécution est enregistrée dans la console, précédée du caractère `>` (signe supérieur à) afin que l'on puisse facilement distinguer les commandes du panneau entrées. depuis le clavier parmi ceux entrés via le fichier .rc. Les lignes commençant par `#` sont traitées comme des "commentaires silencieux" et ne sont donc pas enregistrées dans la console. Les lignes commençant par `*` sont toutefois traitées comme des "commentaires forts" et seront enregistrées. En plus de pouvoir exécuter toute commande de panneau valide (y compris la commande shell `sh`) via le fichier de commandes d'exécution, une commande supplémentaire `pause nnn` est prise en charge afin d'introduire un court délai avant la lecture et le traitement de la ligne suivante. dans le fichier. La valeur nnn peut être un nombre compris entre 1 et 999 et spécifie le nombre de secondes au minimum avant la lecture de la ligne suivante. L'utilisation créative du fichier de commandes d'exécution permet d'automatiser complètement le démarrage d'Hercules. ## La fonction "Hercules Automatic Operator" (HAO) La fonctionnalité HAO (Hercules Automatic Operator) est une fonctionnalité qui permet d'émettre automatiquement des commandes de panneau en réponse à certains messages en cours d'émission. Pour utiliser la fonction d'opérateur automatique Hercules, il faut d'abord définir une "règle" consistant en une "cible" et une "commande" associée. La "cible" est simplement un modèle d'expression régulière utilisé pour faire correspondre le texte des divers messages émis par Hercules au cours de son exécution. Chaque fois qu'une correspondance est trouvée, la règle "se déclenche" et sa commande associée sont automatiquement émises. Hercules Automatic Operator ne concerne que les messages émis par Hercules sur sa console HMC (console matérielle). Il ne peut pas être utilisé pour les messages que le système d'exploitation invité peut envoyer à l'un de ses terminaux. Il s’agit uniquement d’un opérateur automatique Hercules , et non d’ un opérateur automatique "VSE", "MVS", "VM", etc. ### Définir une règle Pour définir une règle HAO, entrer la commande suivante: ``` hao cible ``` pour définir le modèle de correspondance "cible" de la règle (une expression régulière simple), suivi de la commande: ``` hao commande ``` ### définir la commande de panneau associée à la règle. Le modèle cible est une simple valeur d'expression régulière définie par la fonction d'expression régulière prise en charge par votre plate-forme de construction hôte. Pour Windows, il doit s'agir d'une expression régulière compatible Perl (PCRE). Pour d'autres plates-formes de construction prises en charge, il peut s'agir d'une autre syntaxe d'expression régulière prise en charge. Consultez la documentation de programmation de votre plate-forme hôte pour plus de détails. La commande associée est la commande du panneau Hercules valide que l'on souhaite émettre en réponse à un message émis correspondant au modèle cible souhaité. ### Autres commandes et limitations Pour supprimer une règle HAO entièrement ou partiellement définie, utiliser d'abord la commande `hao list` pour répertorier toutes les règles définies (ou partiellement définies), puis utiliser la commande `hao del nnn` pour supprimer la règle spécifique identifiée par nnn . (Toutes les règles reçoivent des numéros tels qu'elles sont définies et sont donc identifiées par leur valeur numérique). On peut éventuellement supprimer TOUTES les règles définies ou partiellement définies en exécutant la commande `hao clear`. L’implémentation actuelle limite le nombre total de règles définies à 64. Il n’existe actuellement aucun moyen de définir une commande dont les arguments varient en fonction du texte du message. C’est-à-dire qu’il n’ya actuellement aucun moyen de dire ``` Répondre avec la commande 'devinit cuu nomfichier' en réponse au texte de message 'HHCXXnnnI Device cuu intervention requise.' où cuu est tout ce qui a été identifié dans le message. ``` Le HAO n'est pas si sophistiqué (encore). Seules des commandes simples en texte brut peuvent être définies et émises. Aucune substitution automatique n'est effectuée en fonction du texte du message (bien que la substitution de symbole `DEFSYM` normale soit prise en charge, car il s'agit d'une fonction de commande par panneau normale prise en charge séparément de HAO). Toutes les règles définies sont vérifiées pour une correspondance chaque fois que Hercules envoie un message. Il n'y a aucun moyen de spécifier pour "arrêter le traitement des règles ultérieures". Si un message est émis qui correspond à deux règles ou plus, chaque commande associée est ensuite émise en séquence. Par conséquent, le conseil de choisir avec soin les modèles de cibles de vos règles s’applique ici.