2 votes

Comment empêcher la rupture de sed en combinaison avec apg ?

Je suis en train d'écrire un script qui installera WordPress automatiquement pour moi, pour me faciliter la vie car je dois déployer des installations de WordPress constamment.

Cependant, j'essaie de faire en sorte de ne jamais avoir à interagir avec lui, et cela m'empêche de dormir.

Pour générer les mots de passe des bases de données et autres, j'utilise apg, puis j'utilise sed pour remplacer une chaîne de caractères par le bon mot de passe. Cela ressemble à quelque chose comme ça :

DOMAIN="$2"
DB_NAME_USER="$(echo $DOMAIN | sed -e 's/\.//g')"
DB_PASSWORD="$(apg -a 1 -n 1 -m 64 -d -c cl_seed -E \_\"\'\`\/\\\=)"

sed -i "s/database_name_here/$DB_NAME_USER/g" /srv/"$DOMAIN"/wp-config.php
sed -i "s/username_here/$DB_NAME_USER/g" /srv/"$DOMAIN"/wp-config.php
sed -i "s/password_here/$DB_PASSWORD/g" /srv/"$DOMAIN"/wp-config.php

Le remplacement de la base de données et du nom d'utilisateur fonctionne très bien, mais lorsqu'on remplace le mot de passe, six fois sur dix, le remplacement se fait mal et le mot de passe ne peut être remplacé. Je me retrouve avec quelque chose comme ça :

define('DB_PASSWORD', 'Ymb{X-dT~l5Agg9q561A^?n mot de passe_ici D;$U,s>mu*:f7|BK4?oM#OH>cHgsI9GndW@~SkBQ') ;

L'accent est mis sur la question. Au lieu de supprimer la partie "password_here" et de la remplacer par le mot de passe réel, il fusionne en quelque sorte la chaîne au milieu du mot de passe.

J'ai pensé que cela pouvait être un caractère généré par apg qui perturbait sed, mais j'ai supprimé un certain nombre de caractères du mot de passe généré en utilisant -E et j'obtiens toujours ce problème.

La même chose se produit avec d'autres remplacements, qui impliquent toujours apg et sed. Remplacer des choses comme _MOT DE PASSE_ ICI_. entraînent le même problème de temps en temps.

Y a-t-il un moyen de contourner ce problème ou dois-je continuer à essayer de trouver les personnages qui posent problème et les ajouter à la liste d'exclusion d'apg ? Ou peut-être dire à sed de remplacer toute la ligne au lieu de seulement la chaîne que je veux ?

Merci d'avance !

0 votes

Pourquoi ne pas simplement utiliser le wp commande ? Mettre au point son propre système est un travail trop important alors qu'il peut déjà faire tout ce dont vous avez besoin.

0 votes

Le script gère un peu plus que la simple installation de WordPress, comme l'appel à une API pour ajouter des enregistrements DNS, créer des tmpfs pour la mise en cache et d'autres choses, c'est pourquoi WP-CLI seul ne suffira pas. Je veux dire, la génération du fichier wp-config.php pourrait être faite avec WP-CLI, mais cela ne résoudrait pas les autres problèmes que sed rencontre avec apg, comme la génération d'un fichier .my.cnf avec le mot de passe de la base de données pour un accès plus facile.

0 votes

Pour le reste, vous devriez probablement utiliser quelque chose comme ansible de toute façon.

3voto

user9517 Points 113163

Vous devez échapper à la \ , / y & dans votre entrée, sinon sed agit sur eux. Quelque chose comme

DB_PASSWORD=$(echo "$DB_PASSWORD" | sed -e 's/[\/&]/\\&/g')
sed -i "s/password_here/$DB_PASSWORD/g" /srv/"$DOMAIN"/wp-config.php

devrait faire l'affaire.

0 votes

Hm. J'ai exclu / et \N mais j'ai oublié d'exclure $. Cela pourrait être lié, il est temps de tester. Merci ! :)

0 votes

Je ne mentionne pas $ du tout. Vous le confondez avec & ?

0 votes

Désolé, c'était une faute de frappe. Je voulais dire & :)

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X