Upgrade Ubuntu 17.20 vers 18.04

— upgrade 17.10 vers 18.04.3 LTS

cat /etc/apt/sources.list
cat /etc/issue
uname -a
echo "${XDG_CURRENT_DESKTOP}"
find /etc/apt -name '*.list' -exec bash -c 'echo -e "\n$1\n"; nl -ba "$1"' _ '{}' \;
sudo apt-get update
sudo apt-get dist-upgrade
sudo apt-get update
sudo apt install -f
dpkg --get-selections | grep 'hold$'
find /etc/apt -type f -name '*.list*' -exec bash -c 'echo -e "\n$1\n"; nl -ba "$1"' _ '{}' \;

sudo do-release-upgrade

La procédure est assez longue, patience.

Partage samba sous Ubuntu

Installer le package cifs-utils

sudo apt-get install cifs-utils

Créer les volumes :

cd /media
sudo mkdir ds_photo ds_videos ds_donnees ds_scan

Créer un fichier /root/.smbcredentials contenant :

username=eric
password=le_mot_de passe_du_compte_nas
domain=DISKSTATION.local

Dans le fichier /etc/fstab ajouter les lignes suivantes à la fin du fichier :
Bien respecter la casse, remplacer les ‘espaces’ pas ‘\040’

//DISKSTATION.local/photo    /media/ds_photo     cifs     _netdev,credentials=/root/.smbcredentials,auto     0     0
//DISKSTATION.local/Videos /media/ds_videos cifs _netdev,credentials=/root/.smbcredentials,auto 0 0
//DISKSTATION.local/Données\040rangées /media/ds_donnees cifs _netdev,credentials=/root/.smbcredentials,auto 0 0
//DISKSTATION.local/scan /media/ds_scan cifs _netdev,credentials=/root/.smbcredentials,auto 0 0

Lancer la commande mount -a pour monter les partages, ensuite ils se monteront automatiquement au démarrage.

Clé d’authentification entre wctsrv0134 et wctsrv0135

Laisser les valeurs par défaut

Sur wctsrv0134

cd /root/.ssh/
 root@wctsrv0134:/exploit/scripts# ssh-keygen -t rsa
 Generating public/private rsa key pair.
 Enter file in which to save the key (/root/.ssh/id_rsa):  
[entrée]  LAISSER LA VALEUR PAR DEFAUT
 Enter passphrase (empty for no passphrase): [entrée] 
 Enter same passphrase again: [entrée] 
 Your identification has been saved in /root/.ssh/id_rsa_vtom_main.
 Your public key has been saved in /root/.ssh/id_rsa_vtom_main.pub.
 The key fingerprint is:
 SHA256:c29bbI+32cezIzf97+W75tGjinKSBOjpEW3W1rPRF68 root@wctsrv0011
 The key's randomart image is:
 +---[RSA 2048]----+
 |                 |
 |             .   |
 |    o . . .   o  |
 |   o = o + . . . |
 |  . = o S = . .  |
 |   +   . + . E  .|
 |  . . . .   o +++|
 |   .   + … =.X@|
 |        +. .o.*X^|
 +----[SHA256]-----+
root@wctsrv0134:/exploit/scripts# cd /root/.ssh/
root@wctsrv0134:~/.ssh# ll
total 32
drwx------ 2 root root 4096 Oct  4 14:00 ./
drwx------ 8 root root 4096 Oct  4 11:33 ../
-rw------- 1 root root    0 Feb 12  2019 authorized_keys
-rw------- 1 root root  668 Oct  4 11:39 id_dsa
-rw------- 1 root root  605 Oct  4 11:39 id_dsa.pub
-rw------- 1 root root 1675 Oct  4 14:00 id_rsa
-rw-r----- 1 root root  397 Oct  4 14:00 id_rsa.pub
-rw-r--r-- 1 root root 5096 May 15 13:31 known_hosts
root@wctsrv0134:~/.ssh# cp id_rsa.pub /home/vtom/.ssh/
root@wctsrv0134:~/.ssh# cd /home/vtom/.ssh/
root@wctsrv0134:/home/vtom/.ssh# ll
total 32
drwx------  2 vtom vtom 4096 Oct  4 14:19 ./
drwxr-x--x 11 vtom vtom 4096 Sep 10 16:47 ../
rw-------  1 vtom vtom  397 May 15 16:08 authorized_keys
-rw-------  1 vtom vtom  668 Oct  4 14:02 id_dsa
-rw-------  1 vtom vtom 1679 May 15 16:01 id_rsa
-rw-r-----  1 vtom vtom  397 May 15 16:01 id_rsa.pub
-rw-r-----  1 root root  397 Oct  4 14:19 id_rsa.pub
-rw-r--r--  1 vtom vtom 3540 May 17 07:53 known_hosts
root@wctsrv0134:/home/vtom/.ssh# chown vtom:vtom id_rsa.pub
root@wctsrv0134:/home/vtom/.ssh# chmod 600 id_rsa.pub
root@wctsrv0134:/home/vtom/.ssh# ll
total 32
drwx------  2 vtom vtom 4096 Oct  4 14:19 ./
drwxr-x--x 11 vtom vtom 4096 Sep 10 16:47 ../
-rw-------  1 vtom vtom  397 May 15 16:08 authorized_keys
-rw-------  1 vtom vtom  668 Oct  4 14:02 id_dsa
-rw-------  1 vtom vtom 1679 May 15 16:01 id_rsa
-rw-r-----  1 vtom vtom  397 May 15 16:01 id_rsa.pub
-rw-------  1 vtom vtom  397 Oct  4 14:19 id_rsa.pub
-rw-r--r--  1 vtom vtom 3540 May 17 07:53 known_hosts
root@wctsrv0134:~/.ssh# su - vtom
vtom@wctsrv0134:~/.ssh# cd /home/vtom/.ssh/
vtom@wctsrv0134~$ ssh-copy-id -f -i id_rsa.pub wctsrv0135
 /usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: ".ssh/id_rsa.pub"
WARNING:  Unauthorized access to this system is forbidden and will be
prosecuted by law. By accessing this system, you agree that your actions
may be monitored if unauthorized usage is suspected.
 Ubuntu 18.04.1 LTS


Number of key(s) added: 1

Now try logging into the machine, with:   "ssh 'wctsrv0135'"
and check to make sure that only the key(s) you wanted were added.

vtom@wctsrv0134:~$ ssh wctsrv0135

WARNING: Unauthorized access to this system is forbidden and will be
prosecuted by law. By accessing this system, you agree that your actions
may be monitored if unauthorized usage is suspected.
Ubuntu 18.04.1 LTS

vtom@wctsrv0135:~$


—–> OK

sources :  https://www.microlinux.fr/cle-ssh/ 

Copier le fichier id_rsa.pub sur les autres serveurs pour une authentification sans pwd.

cd /home/vtom/.ssh
ssh-copy-id -f -i id_rsa.pub wctsrv0055
ssh-copy-id -f -i id_rsa.pub wctsrv0056
ssh-copy-id -f -i id_rsa.pub wctsrv0060

… etc…

Power OFF – Power ON PowerCLI

ATTENTION avec Vtom : la queue_ps1 doit contenir :

%PATH_POWERSHELL%\powershell.exe -ExecutionPolicy UnRestricted -NonInteractive -File %TOM_SCRIPT% %arg%

Tests fait sur VWJES_TST et PRD.

Lancer Windows Power Shell en administrateur

PowerShell Set-ExecutionPolicy UnRestricted   

L:\Soft\VMware\Scripts\Initialize-PowerCLIEnvironment.ps1   

Connect-VIServer -Server wctsrv0001.wabtec.com -Protocol https -User ad.wabtec.com\srvWCTVtom -Password 'Y------#' 

Get-PowerCLIConfiguration 

Set-PowerCLIConfiguration -InvalidCertificateAction Ignore -Confirm:$false 

Get-Vm vsch1 

Start-Vm vsch1 

Stop-Vm vsch1 

—– Autres commandes

Get-Help Set-ExecutionPolicy

PowerShell Set-ExecutionPolicy AllSigned

—- script —

//WCTSRV0016/Batch_win/vtom_VM_power.ps1
P1 : nom_du_serveur
P2 : start ou stop

Param( 
 [string]$w_vm = $Args[0],
 [string]$w_action = $Args[1]
 )
 Write-Host "La VM est : $w_vm"
 Write-Host "Action : $w_action"
 PowerShell Set-ExecutionPolicy UnRestricted
 L:\Soft\VMware\Scripts\Initialize-PowerCLIEnvironment.ps1 -w_vm -w_action 
 Connect-VIServer -Server wctsrv0001.wabtec.com -Protocol https -User ad.wabtec.com\srvWCTVtom -Password 'YN6$P&G6j#'
 $WarningPreference = 'SilentlyContinue'
 $Error.Clear()
 Get-VM "$w_vm" |select Name, PowerState
 if ( $w_action -like "stop" ) {
 Stop-VM -VM "$w_vm" -Confirm:$false
 $statu = Get-VM "$w_vm" |select PowerState
     if ( $statu -like "@{PowerState=PoweredOff}" ) {
         Write-Host "Power : OFF"
         exit 0
     } else {
         Write-Host "Power : ON"
         exit 1
     }
 } else {
 Start-VM -VM "$w_vm" -Confirm:$false
 $statu = Get-VM "$w_vm" |select PowerState
     if ( $statu -like "@{PowerState=PoweredOn}" ) {
         Write-Host "Power : ON"
         exit 0
     } else {
         Write-Host "Power : OFF"
         exit 1
         }
 }

Maintenance base domotique

Se connecter root, sur MariaDB 10, puis sur la base domo

SELECT * FROM graph_tbl WHERE ftimestamp < ‘2023-11-01 00:00:00’

create table graph_tbl_2022_1101_2023_1030 as SELECT * FROM graph_tbl WHERE ftimestamp < ‘2023-11-01 00:00:00’

delete FROM graph_tbl WHERE ftimestamp < ‘2023-11-01 00:00:00’

CREATE UNIQUE INDEX idx_mesure ON graph_tbl2022_1101_2023_1030 (ffeed(15),ftimestamp)

drop INDEX idx_mesure ON graph_tbl

CREATE UNIQUE INDEX idx_mesure ON graph_tbl (ffeed(15),ftimestamp)

———————————————————-

create table graph_conso_2022_1001 as SELECT * FROM graph_conso WHERE ftimestamp < ‘2022-10-01 00:00:00’

delete FROM graph_conso WHERE ftimestamp < ‘2022-10-01 00:00:00’

CREATE UNIQUE INDEX idx_mesure ON graph_conso_2022_1001 (ffeed(15),ftimestamp)

drop INDEX idx_mesure ON graph_conso

CREATE UNIQUE INDEX idx_mesure ON graph_conso (ffeed(15),ftimestamp)

systemctl start vtom_bdaemon.service

vim /etc/init.d/boot_start_vtom.sh

su -l vtom -c /opt/vtom/admin/boot_start_client

chmod 755 /etc/init.d/boot_start_vtom.sh

cd /etc/systemd/system/
vim vtom_bdaemon.service

#Allows systemd control of the Backup Service
[Unit]
Description=Agent Vtom

[Service]
Type=forking
ExecStart=/bin/bash -c /etc/init.d/boot_start_vtom.sh
StandardOutput=tty
RemainAfterExit=yes
KillMode=process

[Install]
WantedBy=multi-user.target

chmod 755 vtom_bdaemon.service

cd /etc/systemd/system/multi-user.target.wants
ln -s /etc/systemd/system/vtom_bdaemon.service vtom_bdaemon.service

systemctl start vtom_bdaemon.service
systemctl enable vtom_bdaemon.service
systemctl status vtom_bdaemon.service

Pour connaitre la liste des services démarrés au boot :

systemctl list-unit-files

présence fichier dans dossier

echo off

setlocal enabledelayedexpansion
set w_dos=\\Vstream.ft.grp\g$\M3toECM\WIT_ECM\*.* \\vstream.ft.grp\g$\M3toECM\LPZ_ECM\*.* \\vstream.ft.grp\g$\M3toECM\NSF_ECM\*.*
set f_tmp=L:\Soft\VTOM\logs\liste_fic_ecm.txt
set /a cpt=0

dir /b %w_dos% > %f_tmp%
for /f « delims= » %%i in (‘type %f_tmp%’) do set /a cpt+=1
echo nombre de fichier à traiter : !cpt!
IF %cpt% EQU 0 exit /B 0 (on sort)
il y a des fichiers à traiter

robocopy MOVE fichiers

//WCTSRV0016/Batch_win/robocopy_dir_MOVE.bat
test dossier vide
move des fichiers
horodatage du log
affichage du log

setlocal enabledelayedexpansion
echo === Transfert Robocopy ===

rem ------------------------------
rem Horodatage
reg add "HKCU\Control Panel\International" /v sShortDate /d "dd-MM-yyyy" /f
for /F "tokens=1-4 delims=/" %%a in ('echo %date:~0,10%') do set w_date=%%c%%b%%a
for /F "tokens=1-4 delims=-" %%a in ('echo %date:~0,10%') do set w_date=%%c%%b%%a
for /F "tokens=1-4 delims=:" %%a in ('echo %time:~0,8%') do set w_time=%%a%%b%%c
set w_horo=%w_date%_%w_time%


set w_source=%1
set w_cible=%2
rem ------ horodatage du log 
set w_log=%3\%w_horo%_%TOM_JOB%.vlog

set /a w_err=8

echo source : %w_source%
echo cible : %w_cible%
echo log : %w_log%


echo --- source -------------
rem -- recherche si fichier à traiter
set f_tmp=L:\Soft\VTOM\logs\liste_fic_%TOM_JOB%.txt
set /a cpt=0
dir /b %w_source%  > %f_tmp%
for /f "delims=" %%i in ('type %f_tmp%') do set /a cpt+=1
echo nombfre de fichier à traiter : !cpt!
IF !cpt! EQU 0 exit /B 0

dir %w_source%

echo --- cible avant -------------
dir %w_cible%

echo Move 
echo robocopy %w_source% %w_cible% /S /Move /w:10 /r:2 /LOG+:%w_log%
robocopy %w_source% %w_cible% /S /Move /w:10 /r:2 /LOG+:%w_log%
set /a w_err=%w_err%+%errorlevel%
mkdir %w_source%

echo --- cible après -------------
dir %w_cible%

rem ---- affichage du log
type %w_log%

set /a w_err=%w_err%-8
exit /B %w_err%

Manipulation de chaîne de caractères Linux

Assigner et afficher une variable

En BASH, une variable est identifiée par l’usage du ‘$’, sauf pour lui attribuer une valeur où l’on omet le ‘$’.

#assignation de la variable
96386@kws:~$ maVariable='Ceci est une chaine de caractères'
    
#utilisation de la variable
96386@kws:~$ echo $mavariable
Ceci est une chaine de caractères

Il est également possible d’utiliser une syntaxe plus explicite qui permet de délimiter clairement quel est le nom de la variable et d’éviter donc plus facilement des erreurs de nommage.

96386@kws:~$ file='homework'
96386@kws:~$ ls /mnt/data/$file_save.doc

Dans cet exemple la variable utilisée est ‘file_save’ et non ‘file’. Le résultat ne sera donc absolument pas celui qu’on attend !

Une façon de délimiter clairement le nom de la variable est d’utiliser les crochets ‘{}’.

    96386@kws:~$ file='homework'
    96386@kws:~$ ls /mnt/data/${file}_save.doc

La variable utilisée ici sera ‘file’ et a pour valeur ‘homework’. Ce qui donne donc la commande suivante une fois la variable substituée.

96386@kws:~$ ls /mnt/data/homework_save.doc

C’est cette syntaxe qui sera utilisée tout au long de cet article.

Modifier la casse

Un des traitements les plus courants est de modifier la casse, que cela soit de passer tout en majuscule, ou en minuscule.

Tout passer en minuscule

Le changement de la casse en minuscule se fait à l’aide de ‘,,’ comme ceci :

96386@kws:~$ test="Hello World !"
96386@kws:~$ echo ${test,,}
hello world !

Tout passer en majuscule

Le changement de la casse en majuscule se fait à l’aide de ‘^^’ comme ceci :

96386@kws:~$ test="Hello World !"
96386@kws:~$ echo ${test^^}
HELLO WORLD !

Ainsi un ‘case’ comme celui-ci

case ${userInput} in
    "oui"|"Oui"|"OUI"|"O"|"o"|"YES"|"Yes"|"yes"|"Y"|y")
        # action si l'utilisateur répond oui
        ;;
    "non"|"Non"|"NON"|"NO|"No"|"no"|"N"|"n")
        # action si l'utilisateur répond non
        ;;
esac

devient simplement :

case ${userInput,,} in
    "oui"|"yes"|"y"|"o")
        # action si l'utilisateur répond oui
    ;;
    "non"|"no"|"n")
        # action si l'utilisateur répond non
    ;;
esac

Récupérer la longueur de la chaine de caractère.

Pour récupérer la longueur d’une chaine de caractère il suffit de précéder le nom de la variable par ‘#’ comme ceci :

${#variable}

96386@kws:~$ VAR="Chaine d'une certaine longueur"
96386@kws:~$ echo ${#VAR}
30

Taille d’un tableau

Il est possible d’obtenir le nombre d’éléments d’un tableau de la façon suivante :

96386@kws:~$ unset VAR
96386@kws:~$ VAR[0]="blablabla"
96386@kws:~$ VAR[1]="azeaze"
96386@kws:~$ VAR[2]="test"
96386@kws:~$ VAR[3]="someText"
96386@kws:~$ VAR[4]=48
96386@kws:~$ VAR[5]=98985
96386@kws:~$ echo ${#VAR[*]}
6
96386@kws:~$ echo ${#VAR[@]}
6

Attention à ne pas oublier les crochets, sinon # retournera simplement la longueur du premier élément du tableau.

96386@kws:~$ unset VAR
96386@kws:~$ VAR[0]="blablabla"
96386@kws:~$ VAR[1]="azeaze"
96386@kws:~$ VAR[2]="test"
96386@kws:~$ echo ${#VAR}
9

Déterminer le nombre de paramètre passés au script

Pour connaitre le nombre de paramètres passés au script ($1, $2 …) on utilisera ‘${#*}’ et ‘${#@}

96386@kws:~$ vi test.sh
#!/bin/bash
echo "\${#*} : '${#*}' \${#@} : '${#@}'"
    
    
96386@kws:~$ bash test.sh var1 test something
${#*} : '3' ${#@} : '3'

Assignation des variables

Plutôt que d’utiliser des ‘if’, ‘else’ et d’assigner des valeurs par défaut si les variables sont vides il existe des mécanismes permettant l’usage ou l’assignation d’une valeur alternative pour ces variables.

Utiliser une alternative

La formulation ${var-alternative} permet l’utilisation d’une alternative si la variable n’est pas assignée

96386@kws:~$ unset VAR # on s'assure que la variable n'existe pas/plus
96386@kws:~$ echo "var: '${VAR-"default"}'"
var: 'default'
96386@kws:~$ VAR=""
96386@kws:~$ echo "var: '${VAR-"default"}'"
var: ''
96386@kws:~$ VAR="VALUE"
96386@kws:~$ echo "var: '${VAR-"default"}'
var: 'VALUE'

96386@kws:~$ VAR2="someVar"
96386@kws:~$ unset VAR
96386@kws:~$ echo ${VAR-$VAR2}
someVar

On constate que si la variable existe mais ne contient aucun caractère, elle n’est pas remplacée par la valeur de substitution. Pour spécifier à Bash que les variables vides sont également à remplacer nous allons utiliser la forme suivante : ${var:-alternative} (ajout du ‘:’).

96386@kws:~$ unset VAR # on s'assure que la variable n'existe pas/plus
96386@kws:~$ echo "'${VAR:-"default"}'"
'default'
96386@kws:~$ VAR=""
96386@kws:~$ echo "'${VAR:-"default"}'
'default'
96386@kws:~$ VAR="VALUE"
96386@kws:~$ echo "'${VAR:-"default"}'"
'VALUE' 
96386@kws:~$ VAR2="someVar"
96386@kws:~$ VAR=""
96386@kws:~$ echo ${VAR:-$VAR2}
someVar

Assigner une valeur par défaut

La méthode précédente permettait de retourner une valeur différente lors de l’usage de la variable mais la valeur de la variable restait inchangée. La syntaxe ${var= »alternativeValue »} permet de d’assigner une valeur à la variable si celle ci n’est pas déclarée .

96386@kws:~$ unset VAR # on s'assure que la variable n'existe pas/plus
96386@kws:~$ echo "var :'$VAR'"
var :''
96386@kws:~$ echo "var :'${VAR=default}'"
var :'default'
96386@kws:~$ echo "var :'$VAR'"
var :'default'

Comme pour l’utilisation d’une valeur de substitution, il est possible de différencier une variable non assignée d’une variable vide. ${VAR:=default} permet de remplacer la valeur des variables déclarée mais vides.

96386@kws:~$ VAR=""
96386@kws:~$ echo "var :'$VAR'"
var :''
96386@kws:~$ echo "var :'${VAR=default}'"
var :''
96386@kws:~$ echo "var :'$VAR'"
var :''
96386@kws:~$ echo "var :'${VAR:=default}'"
var :'default'
96386@kws:~$ echo "var :'$VAR'"
var :'default'

Utiliser une alternative et quitter

Toujours dans la liste des valeurs alternatives, il est possible d’utiliser une valeur par défaut et de quitter le programme avec un code de de retour ‘1’. La formulation est la suivante : ${var?alternative]

96386@kws:~$ unset var
96386@kws:~$ parametre=${VAR?"Var is not set"}
bash: VAR: Var is not set

La formulation reste la même pour spécifier que l’on souhaite aussi filtrer les variables définies mais vides : ${var:? »Var is not set or empty »}

96386@kws:~$ var=""
96386@kws:~$ parametre=${VAR:?"Var is not set or empty"}
-bash: var: Var is not set or empty

Extraire une sous-chaine

Il est courant de travailler sur des fractions d’une chaine de caractères. Il est possible d’obtenir ses éléments avec la fonction suivante : ${var:<position>:<longueur>}

96386@kws:~$ VAR="Hello world !"
96386@kws:~$ echo "'${VAR:6}'"
'world !'
96386@kws:~$ echo "'${VAR:1:4}'"
'ello'
96386@kws:~$ echo "'${VAR:6:20}'"
'world !'
96386@kws:~$ echo "'${VAR::3}'"
'first 3'
96386@kws:~$ echo "'${VAR: -3}'"
'd !'
96386@kws:~$ echo "'${VAR::-1}'"
'Hello world '

Supprimer une sous-chaine

Il est possible de se débarrasser rapidement de chaine de caractères précédant ou suivant la partie recherchée, pour récupérer le nom d’un fichier sans les répertoires auquel il appartient ou sans son extension par exemple !

‘#’ Supprimer depuis le début de la chaine

L’utilisation du ‘#’ (${var#pattern}) permet de supprimer la première portion correspondant au pattern que l’on passe en paramètre.

96386@kws:~$ VAR="hello world !"
96386@kws:~$ echo "'${VAR#h*o}'"
' world !'.

##

Le double ‘#’ (${var##pattern) s’utilise de la même façon que le simple ‘#’ à la différence que celui-ci supprimera la chaine correspondante la plus longue.

96386@kws:~$ VAR="hello world !"
96386@kws:~$ echo "'${VAR##h*o}'"
'rld !'

‘%’ Supprimer depuis la fin de la chaine

Le ‘%’ (${var%pattern}) permet de supprimer la chaine correspondante à notre pattern depuis la fin de notre variable

96386@kws:~$ VAR="hello world !"
96386@kws:~$ echo "'${VAR%o*}'"
'hello w'

%%

Comme pour le ‘##’ le double %% permet de sélectionner la plus grande chaine, ici depuis la fin de la variable.

96386@kws:~$ VAR="hello world !"
96386@kws:~$ echo "'${VAR%%o*}'"
'hell'

A noter que ces outils ne permettent la suppression de chaine de caractères que depuis l’un des bords de la variable.

Pour supprimer une sous-chaine présente au milieu de la variable on pourra utiliser de remplacement de chaine de caractère ‘/’ sans lui passer de chaine de remplacement. Pour supprimer la première occurence :

96386@kws:~$ VAR="hello world !"
96386@kws:~$ echo "'${VAR/o/}'"
'hell world !'
96386@kws:~$ VAR="hello world !"
96386@kws:~$ echo "'${VAR/l*o/}'"
'herld !'

Pour supprimer l’ensemble des occurrences on utilisera ‘//’

96386@kws:~$ VAR="hello world !"
96386@kws:~$ echo "'${VAR//o/}'"
'hell wrld !'

Exemple d’utilisation

Les traitements de chaines de caractère que nous voulons voir sont très pratiques lorsque, par exemple, de la manipulation de fichiers. Prenons ici comme exemple le fichier ‘/etc/apache2/sites-available/000-default.conf’ et regardons ensemble comment extraire le path, le nom du fichier et son extension.

96386@kws:~$ file='/etc/apache2/sites-available/000-default.conf'

Pour récupérer le path, nous allons simplement tout supprimer depuis la fin du fichier jusqu’au premier ‘/’ rencontré

96386@kws:~$ file='/etc/apache2/sites-available/000-default.conf'
96386@kws:~$ filePath=${file%/*}
96386@kws:~$ echo $filePath 
/etc/apache2/sites-available

Pour récupérer le fichier, nous allons procéder de la façon inverse : nous allons tout supprimer depuis le début jusqu’au dernier ‘/’

96386@kws:~$ file='/etc/apache2/sites-available/000-default.conf'
96386@kws:~$ fileName=${file##*/}
96386@kws:~$ echo $fileName 
000-default.conf

Pour supprimer l’extension de notre fichier nous allons supprimer tout les caractères depuis la fin jusqu’au premier ‘.’

96386@kws:~$ file='/etc/apache2/sites-available/000-default.conf'
96386@kws:~$ fileNameShort=${fileName%.*}
96386@kws:~$ echo $fileNameShort 
000-default

Et enfin pour extraire l’extension nous allons garder uniquement ce qu’il reste après le dernier ‘.’

96386@kws:~$ file='/etc/apache2/sites-available/000-default.conf'
96386@kws:~$ fileExtension=${fileName##*.}
96386@kws:~$ echo $fileExtension 
conf

Remplacement de sous-chaine

En plus des possibilités de suppression et d’extraction de sous-chaine de caractère, il est également possible de remplacer certaines expressions dans notre variable avec l’utilisation du ‘/’.

Remplacer le premier élément trouvé.

Pour remplacer le première élément correspondant, on utilisera la syntaxe suivante :${var/pattern/remplacement/}.

96386@kws:~$ VAR="blablabla"
96386@kws:~$ echo "'${VAR/a/o}'"
'bloblabla'
96386@kws:~$ echo "'${VAR/bl/pl}'"
'pliblablobleblu'
96386@kws:~$ echo "'${VAR/bla/123}'"
'bli123blobleblu'

Remplacer l’ensemble des éléments correspondants.

Pour remplacer l’ensemble des éléments correspondants par la chaine passé en deuxième paramètre nous utiliserons le double ‘/’.

${string//substring/replacement}

96386@kws:~$ VAR="blablabla"
96386@kws:~$ echo "'${VAR//a/o}'"
'blobloblo'
96386@kws:~$ VAR="bliblablobleblu"
96386@kws:~$ echo "'${VAR//bl/pl}'"
'pliplaplopleplu'

Remplacer le dernier élément correspondant.

Pour remplacer la plus grande correspondance depuis le début de la chaine on utilisera le ‘/#’

${string/#substring/replacement}

96386@kws:~$ var="Hello, world !"
96386@kws:~$ echo "'${var/#*o/i}'"
'irld !'

Ce qui est similaire à ‘/’

96386@kws:~$ echo "'${VAR/*o/i}'"
'irld !'

Pour remplacer la plus longue correspondance depuis la fin de la chaine de caractère, on utilisera le ‘/%’

${string/%substring/replacement}

96386@kws:~$ var="Hello, world !"
96386@kws:~$ echo "'${var/%o/i}'"
'Hello, world !'
96386@kws:~$ echo "'${var/%o*/il}'"
'Helli'

Ce qui est similaire à ‘/’

96386@kws:~$ echo "'${VAR/o*/i}'"
'irld !'

STATSPACK

Problème : (sur pdtb11 base TCEDU)

ORA-01654: unable to extend index PERFSTAT.STATS$LIBRARYCACHE_PK by 128 in
tablespace STATSPACK
ORA-06512: at "PERFSTAT.STATSPACK", line 5081
ORA-06512: at "PERFSTAT.STATSPACK", line 105
ORA-06512: at line 1

il faut purger les stats.

Dans une fenêtre sqlplus lancer la purge via sppurge.sql :

pdtb11.ft.grp
ora112/o…

export ORACLE_SID=TCEDU
sqlplus
system/z…..

SQL> @$ORACLE_HOME/rdbms/admin/sppurge.sql

le script liste les snap_id et leur date


22517 24 Jul 2019 09:44:32 5 pdtb11.ft.grp
22518 24 Jul 2019 10:04:32 5 pdtb11.ft.grp
22519 24 Jul 2019 10:24:32 5 pdtb11.ft.grp
22520 24 Jul 2019 10:44:32 5 pdtb11.ft.grp
22540 02 Aug 2019 13:09:59 5 pdtb11.ft.grp
Warning
~~~~~~~
sppurge.sql deletes all snapshots ranging between the lower and
upper bound Snapshot Id’s specified, for the database instance
you are connected to. Snapshots identified as Baseline snapshots
which lie within the snapshot range will not be purged.

It is NOT possible to rollback changes once the purge begins.
You may wish to export this data before continuing.

Specify the Lo Snap Id and Hi Snap Id range to purge
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Enter value for losnapid: 4001  entrer le premier SNAP_ID à supprimer
Using 4001 for lower bound.

Enter value for hisnapid: 5802 entrer le dernier SNAP_ID à supprimer
Using 5802 for upper bound.

Deleting snapshots 4001 – 5802.

Number of Snapshots purged: 1802
~~~~~~~~~~~~~~~~~~~~~~~~~~~

Purge of specified Snapshot range complete.

SQL> QUIT

 

 

test transfert ftp

set ftp_log=transfert_ftp.log

for /f « delims= » %%a in (‘find /C « 150 Opening » ^<%ftp_log%’) do set /a w_files=%%a
@echo nombre de fichier a transferer : %w_files%

for /f « delims= » %%a in (‘find /C « 226 Transfer complete » ^<%ftp_log%’) do set /a w_files_ok=%%a
@echo nombre de fichier transfere OK : %w_files_ok%

IF %w_files% NEQ %w_files_ok% (type %ftp_log% & echo « Terminé en erreur » & exit /B %errorlevel%)

echo Transfert OK

Install Zabbix Linux oracle RHEL 5

useradd -r zabbix
mkdir /etc/zabbix/

repository zabbix http://repo.zabbix.com/zabbix/3.2/

RHEL5 : rpm -Uvh http://repo.zabbix.com/zabbix/3.2/rhel/5/x86_64/zabbix-agent-3.2.0-1.el5.x86_64.rpm

yum install zabbix-agent

scp root@vlbid41x.ft.grp:/usr/bin/zabbix* /usr/bin/
scp root@vlbid41x.ft.grp:/usr/sbin/zabbix* /usr/sbin/
scp root@vlbid41x.ft.grp:/etc/zabbix/zabbix_agentd.conf /etc/zabbix/

cd /exploit/scripts

scp admse_efougere@wctsrv0011.wabtec.com:/exploit/scripts/zab_*.sh .

vim /etc/zabbix/zabbix_agentd.conf

Hostname=WCTSRV00XX.wabtec.com
ListenIP=10.129.32.XX
UserParameter=zab_mem_free,/exploit/scripts/zab_mem_free.sh
UserParameter=zab_proc_mem[*],/exploit/scripts/zab_proc_mem.sh $1
UserParameter=zab_proc_cpu[*],/exploit/scripts/zab_proc_cpu.sh $1
UserParameter=zab_test_port[*],/exploit/scripts/zab_test_port.sh $1 $2

service zabbix-agent start

—– log dans :
cat /exploit/logs/zabbix_agentd.log

Test the proper operation of the agent

Connect on vmoni with root account

cd /usr/local/bin

root@vmoni:~# zabbix_get -p 10050 -k agent.version -s servername

shared memory realm does not exist

nolog> nolog> ORA-27125: unable to create shared memory segment
Linux-x86_64 Error: 1: Operation not permitted

(voir WCTSRV0060 ou WCTSRVDBTCINT1)

Pour ajouter oracle au group wheel

root@wctsrv0056:# id oracle
uid=54321(oracle) gid=54321(oinstall) groups=54321(oinstall),54322(dba),54323(oper),54324(backupdba),54325(dgdba),54326(kmdba),54330(racdba)

vim /etc/group
ajouter ,oracle à la fin du groupe wheel si pas dans la liste id

 Grant autorisation sur hugepages

pour vérifier avant :
sysctl -a |grep hugetlb
sysctl: reading key « net.ipv6.conf.all.stable_secret »
sysctl: reading key « net.ipv6.conf.default.stable_secret »
sysctl: reading key « net.ipv6.conf.eth0.stable_secret »
sysctl: reading key « net.ipv6.conf.lo.stable_secret »
vm.hugetlb_shm_group = 0

pour écrire dans sysctl => sysctl -w vm.hugetlb_shm_group=${ORACLE_INSTALL_GROUPE} (voir en haut id oracle)
sysctl -w vm.hugetlb_shm_group=54321

pour vérifier après
sysctl -a |grep hugetlb
sysctl: reading key « net.ipv6.conf.all.stable_secret »
sysctl: reading key « net.ipv6.conf.default.stable_secret »
sysctl: reading key « net.ipv6.conf.eth0.stable_secret »
sysctl: reading key « net.ipv6.conf.lo.stable_secret »
vm.hugetlb_shm_group = 54321

root@wctsrv0056:# id oracle
uid=54321(oracle) gid=54321(oinstall) groups=54321(oinstall),10(wheel),54322(dba),54323(oper),54324(backupdba),54325(dgdba),54326(kmdba),54330(racdba)

 

ORA-39087: nom de répertoire EXPDP_DIR non valide

su – oracle

. oraenv
=> SID
sqlplus / as sysdba

SQL> create directory EXPDP_DIR as '&PATH';

*/ il va te prompt le chemin a mettre. il doit correspondre au chemin du fichier /exploit/..dump..sh (la commande rm) /*

Entrez une valeur pour path : /u02/oradata/dump/ERPFDM/
ancien 1 : create directory EXPDP_DIR as ‘&PATH’
nouveau 1 : create directory EXPDP_DIR as ‘/u02/oradata/dump/ERPFDM/’

Repertoire cree.

SQL> quit