Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 02/06/2008, à 13:00

Nonoo

Installation automatisée et apt-get install

Bonjour,

j'aimerai créer un shell script qui me permet d'installer automatiquement certains package et de configurer automatiquement le tout à l'aide de sed, read, etc.

le problème c'est que ça demande quand même à l'utilisateur de rentrer les informations de configuration pendant l'installation de package.

exemple :
si je fais apt-get install slapd, il va me demander un password.


j'aimerai pouvoir demander en début de script le password à l'utilisateur et faire en sorte que le password soit automatiquement rentré lors de l'installation (c-à-d, lors du apt-get install <package>)

est-ce que c'est possible?
si oui comment ?
si non, y a-t-il une alternative plus ou moins simple?

(je m'excuse si la réponse est dans le forum mais j'ai cherché pas mal sur google et sur le forum sans rien trouver, mais je n'ai peut être pas donné les bons mots clés sad )


Merci

Dernière modification par Nonoo (Le 02/06/2008, à 13:01)

Hors ligne

#2 Le 02/06/2008, à 13:34

PhilippeP

Re : Installation automatisée et apt-get install

si tu fais apt-get install , il va te dire d'employer sudo ...
Donc plutot qu'employer sudo , tu emploie gksudo (kdesu sous KDE) et tu ne dois plus te poser de question, ce dernier affichera la boite de dialogue du mot de passe

Dernière modification par PhilippeP (Le 02/06/2008, à 13:40)


Attention, je suis loin d'être un Goubunturou ...
Il m'arrive de me tromper (si si...)
Desktop Kubuntu 12.04 KDE 4.9 SC - Lenovo Ideapad S10 3T Kubuntu 12.04 KDE 4.8 SC

Hors ligne

#3 Le 02/06/2008, à 13:55

Nonoo

Re : Installation automatisée et apt-get install

oui je m'excuse je me suis mal exprimé.

je ne voulais pas parlé du mot de passe pour passer en root mais des informations d'installation.
slapd demande un password pour le serveur ou dpkg-reconfigure demandera le nom de domaine, le password, le type de db utilisée, etc.

j'aimerai pouvoir automatiser ces choses et ne poser les questions qu'au début.

d'autant plus que dans le scripte que je veux écrire il y a très souvent les mêmes informations qui seront demandées et donc ça peut éviter des erreurs.

Hors ligne

#4 Le 02/06/2008, à 16:49

Nonoo

Re : Installation automatisée et apt-get install

je crois que j'ai trouvé une piste mais je ne sais pas vraiment si c'est utilisable et comment l'utilise avec apt-get ou dpkg-reconfigure.

j'ai vu qu'on pouvait utiliser expect mais je n'arrive pas a comprendre son fonctionnement.

est-ce que quelqu'un à déjà utilisé expect pour ce genre de choses?

Hors ligne

#5 Le 04/06/2008, à 11:07

zyphos

Re : Installation automatisée et apt-get install

Coucou,
je cherchais justement également une solution à ce problème.
La voici, c'est très facile en fait, quand on la connait, comme d'habitude avec Linux. tongue

il suffit de tapper ceci en ligne de commande (en root tongue), ou alors l'ajouter dans le script.
Il faut être en root sinon cela ne sert à rien, car apt-get fonctionne en tant que root.

export DEBIAN_FRONTEND=noninteractive

Bref un

sudo export DEBIAN_FRONTEND=noninteractive

devrait faire l'affaire.
Sinon pour avoir un accès root, il y a sudo -s

ne pas oublier de remettre la valeur à zéro quand on a fini le script.

sudo export DEBIAN_FRONTEND=dialog

Dernière modification par zyphos (Le 04/06/2008, à 12:03)

Hors ligne

#6 Le 04/06/2008, à 13:37

zyphos

Re : Installation automatisée et apt-get install

Sinon pour expect, cela parrait relativement simple:
1. il faut créer le fichier contenant les actions à faire.
2. il y a un système automatique pour le faire (qui enregistre toutes vos actions), mais attention, certains programmes n'ont pas de buffer d'entrée clavier, ce qui veut dire qu'il faudra éditer le fichier et y ajouter des délais d'attente. (requis nottament pour telnet)
Ou alors utiliser la combinaison CTRL-L pendant l'enregistrement, ce qui permet de basculer le mode avec temps d'attente ou pas. (Par défaut il est désactivé)
Le délais d'attente avec CTRL-L, est d'un dixième de seconde, pour le modifier il suffit d'aller dans le fichier de l'enregistrement.

Exemple:

autoexpect -C ^L -f nist ftp ftp.cme.nist.gov

nist = fichier contenant les actions faites
ftp ftp.cme.nist.gov = la commande à effectuer

Une fois le fichier enregistré, pour faire le "play", il suffit de lancer le fichier enregistré. (C'est un exécutable, mais il requierd l'installation de Expect sur la machine où sera exécuté le script.)

Pour l'installation d'Expect et d'autoexpect.

apt-get install expect

Pour autoexpect, il se trouve dans le paquet expect-dev

apt-get install expect-dev
cd /usr/bin
cp /usr/share/doc/expect-dev/examples/autoexpect.gz .
gunzip autoexpect.gz
chmod +x autoexpect

Doc sur le fonctionnement d'autoexpect (en): http://expect.nist.gov/example/autoexpect.man.html

Dernière modification par zyphos (Le 04/06/2008, à 13:40)

Hors ligne

#7 Le 04/06/2008, à 18:41

Nonoo

Re : Installation automatisée et apt-get install

zyphos a écrit :

Sinon pour expect, cela parrait relativement simple:
1. il faut créer le fichier contenant les actions à faire.
2. il y a un système automatique pour le faire (qui enregistre toutes vos actions), mais attention, certains programmes n'ont pas de buffer d'entrée clavier, ce qui veut dire qu'il faudra éditer le fichier et y ajouter des délais d'attente. (requis nottament pour telnet)
Ou alors utiliser la combinaison CTRL-L pendant l'enregistrement, ce qui permet de basculer le mode avec temps d'attente ou pas. (Par défaut il est désactivé)
Le délais d'attente avec CTRL-L, est d'un dixième de seconde, pour le modifier il suffit d'aller dans le fichier de l'enregistrement.

Exemple:

autoexpect -C ^L -f nist ftp ftp.cme.nist.gov

nist = fichier contenant les actions faites
ftp ftp.cme.nist.gov = la commande à effectuer

Une fois le fichier enregistré, pour faire le "play", il suffit de lancer le fichier enregistré. (C'est un exécutable, mais il requierd l'installation de Expect sur la machine où sera exécuté le script.)

Pour l'installation d'Expect et d'autoexpect.

apt-get install expect

Pour autoexpect, il se trouve dans le paquet expect-dev

apt-get install expect-dev
cd /usr/bin
cp /usr/share/doc/expect-dev/examples/autoexpect.gz .
gunzip autoexpect.gz
chmod +x autoexpect

Doc sur le fonctionnement d'autoexpect (en): http://expect.nist.gov/example/autoexpect.man.html

Merci pour la réponse, j'ai testé et ça marche super bien quand on utilise simplement le fichier généré mais quand on le modifie automatiquement (même en rajoutant exactement les bon caractères avec sed), il y a un problème car certains caractères n'ont pas la même valeur hexa et donc le script plante.

il plante d'ailleurs aussi avec apt-get install sur certains package à cause de certaines données qui ne sont pas toujours identiques.

je vais donc laisser tomber expect mais je le garde bien en réserve pour d'autres choses.

pour la commande

export DEBIAN_FRONTEND=noninteractive

j'ai testé aussi ça répond en grande partie à ce que j'avais besoin mais je n'ai pas trouvé comment automatiser la réponse donnée au programme (si possibilité il y a??)

exemple :

ask_password(){
  whiptail --backtitle "$BTITLE" \
           --nocancel \
	   --passwordbox "Entrez le password pour les services" 10 40 "$@" 2>menu_var$CURRENTDATE
  PASSWORD=`cat menu_var$CURRENTDATE`
  rm menu_var$CURRENTDATE
  if [ -z PASSWORD ]; then
    ask_password
  fi
  ask_password_confirm
}

ask_password_confirm(){
  whiptail --backtitle "$BTITLE" \
	   --passwordbox "Entrez la Confirmation du password" 10 40 "$@" 2>menu_var$CURRENTDATE
  PASSWORD_CONF=`cat menu_var$CURRENTDATE`
  rm menu_var$CURRENTDATE
  if [ -z PASSWORD_CONF ]; then
    ask_password_confirm
  fi
}
ask_password
while [ $PASSWORD != $PASSWORD_CONF ] || [ -z $PASSWORD ] || [ -z $PASSWORD_CONF ]; do
  ask_password
done

apt-get install -yq slapd # comment lui demander de donner directement $PASSWORD comme valeur d'installation à la question?

dpkg-reconfigure slapd # la aussi il pose 6 questions ou j'aimerai bien pouvoir répondre directement à l'aide de variables.

j'ai passé la journée à essayer de trouver une solution car j'aimerai pouvoir préparer des scripts d'auto-installation pour de multiples programmes.

est-il possible d'automatiser ces réponses?


en tout cas merci pour vos réponses j'ai déjà pu avancer pas mal grâce à cela smile


EDIT : je vais poser toutes les questions d'un coup dans l'éventualité qu'il y ait une possibilité

si l'on peut autoconfigurer par la suite avec un fichier ou autre comment trouver les noms des variables à changer?

sinon si ce n'est pas possible de répondre aux questions comme ça y a-t-il un autre moyen dans le genre de freebsd ou gentoo de donner directement les configs genre --password=test --domain_name=test.com... ?

Dernière modification par Nonoo (Le 04/06/2008, à 18:59)

Hors ligne

#8 Le 05/06/2008, à 13:49

zyphos

Re : Installation automatisée et apt-get install

Il n'y a pas moyen de choisir d'option, sauf en passant par expect, qui comme vous le soulignez risque de rater si les "packets" changent.

Perso, ce que je ferais, c'est utiliser le "noninteractive" pour tout installer.
Puis après il suffit de repasser avec "sed" derrière pour tout configurer.

Ou alors faire des fichiers de config type (template) avec des champs "{mon champ}".
exemple avec apache:
soit le fichier type suivant:
/tmp/virtualserver.conf

<VirtualHost *:80>
  ServerName {serverurl}
  ServerAdmin {server_admin_email}
  DocumentRoot {http_root_dir}
</VirtualHost>

Puis faire un "sed" sur les champs a modifier.

cat /tmp/virtualserver.conf |  sed 's|{serverurl}|www.ubuntu.org|g' | \
sed 's|{server_admin_email}|admin@ubuntu.org|g' | \
sed 's|{http_root_dir}|/var/www|g' > /etc/apache2/sites-available/monsite

Hors ligne

#9 Le 05/06/2008, à 14:01

Nonoo

Re : Installation automatisée et apt-get install

c'est bien ce que je pensais, j'avais commencé sur ce principe.

par contre une petite dernière question, est-ce qu'il y a un moyen dans ce cas de savoir à quels endroits le fichier d'auto-configuration modifie les données en temps normal?

par exemple lors de l'installation de slapd il demande le password et bien évidement il n'est pas dans slapd.conf ou dans les autres fichiers de base de la configuration de slapd (pour cet exemple ce n'est pas difficile de savoir ou ça se trouve mais c'était juste pour donner une idée).

dans certains cas dpkg-reconfigure ou simplement apt-get modifie automatiquement à plusieurs endroits et j'aimerai être sûr de ne pas en oublier.

et sinon cela n'influe pas sur le reste des installations par la suite de ne pas se servir de l'autoconfiguration?

par exemple si j'install slapd et par la suite samba les informations se trouvant dans une espèce de base de donnée contenant toutes les informations de configuration, samba ira peut être regarder dedan pour trouver des informations par rapport à slapd?

Hors ligne

#10 Le 05/06/2008, à 15:07

zyphos

Re : Installation automatisée et apt-get install

Pour connaitre les fichiers de configurations, là je ne connais pas comme ça. Il faut peut-être regarder les sources des packets tout simplement.

Pour la base de donnée c'est du Berkeley, http://fr.wikipedia.org/wiki/Berkeley_DB.

Pour ton cas spécifique.
Le fichier de config est le suivant:
/etc/ldap/slapd.conf

là faut modifier les "dc="

le mot de passe et d'autre info sont directement dans la base de données de ldap. Sur le net, ils disent qu'éditer du Ldap en bash n'est pas possible, il faut passer par du perl ou python.

En fait c'est possible en bash. ^^
Avec une méthode maison, c'est un peu brutal. tongue
En gros, cela se passe comme ceci:
1. sauver la base de donnée dans un fichier.
2. arreter le serveur ldap
3. détruire la base (partie brutale)
4. modifier le fichier backup avec ses données.
5. redémarrer le serveur ldap
6. Injecter le fichier backup modifié.

Voici la technique:
1. sauver la base de donnée dans un fichier.

slapcat > /tmp/backup_ldap.ldif

2. arreter le serveur ldap

/etc/init.d/slapd stop

3. détruire la base (partie brutale)

rm -rf /var/lib/ldap/*

4. modifier le fichier backup avec ses données.
exemple le mot de passe

CRYPTEDPASSWORD=`slappasswd -s $PASSWORD`
cat /tmp/backup_ldap.ldif | sed 's|userPassword::.*|userPassword:: '$CRYPTEDPASSWORD'|' > \
/tmp/ldap_to_inject.ldif

5. redémarrer le serveur ldap

/etc/init.d/slapd start

6. Injecter le fichier backup modifié.

slapadd -l /tmp/ldap_to_inject.ldif

Voilà c'est tout. smile

Ce serait pas un PDC que tu fais ? ^^
Si oui, il y a un tutoriel pas mal ici:
http://damstux.free.fr

Dernière modification par zyphos (Le 05/06/2008, à 15:23)

Hors ligne

#11 Le 06/06/2008, à 15:43

Nonoo

Re : Installation automatisée et apt-get install

Je vous remercie pour toutes ces réponses.
j'ai réussi à faire plus ou moins ce que je voulais (à quelques bugs près (des conneries que j'ai du faire):p)

sinon le plus gros du travail est en effet un PDC.

je sais comment monter un PDC sans problème mais en fait mon but était d'automatiser tout le processus d'installation du PDC (openLDAP+samba+webmin+ntp+partages+...) de manière à tout pouvoir configurer en une fois.

après j'ai aussi fait d'autres scripts pour installer apache+ASP+php+tomcat et configurer le tout ainsi que le VPN pptpd et bien d'autres choses le tout regroupé dans plusieurs scripts qui sont ou non lancé selon les réponses aux premières questions.

cela permet d'éviter les erreurs et surtout de ne pas avoir à passer 5h pour configurer tous le serveur avec toutes les applications.

étant donné que je fais souvent des serveurs de tests avec différents paramètres (soit en VM soit sur mes pc's) je perdais trop de temps à configurer le tout même si j'avais déjà plus ou moins automatisé le travail et créé des templates préfaits de fichiers de configuration.

je mettrais certainement à disposition ces scripts quand ils seront completement terminé si j'arrive vraiment à en faire resortir quelque chose d'intéressant (ce qui, pour le moment, n'est pas le cas^^)

sinon le lien est intéressant j'ai quand même regardé.

je m'étais inspiré il y a longtemps de celui-ci :
http://ubuntuforums.org/showthread.php?t=640760

merci encore smile

Hors ligne