Newsgroup: it.comp.os.linux.ubuntu
Titolo: come dare risposte automatiche ad apt-get install

i miei script di installazione hanno un grosso problema.
ttf-mscorefonts-installer
java
mysql
pure-ftp
php-myadmin
sono tutti programmi che richiedono un installazione interattiva.
Chi per chiedere di accettare la licenza, chi per avere la password
di root del database, chi per sapere se l'installazione deve essere 
fatta come servizio o da utilizzando inetd.
Ora, io voglio lanciare uno script con la sequenza dei programmi da 
installare, andarmene a fare gli affari miei e poi tornare che ha fatto 
tutto. Invece me lo trovo piantato su una schermata che mi chieda la pwd 
di mysql o altre domande banali.
Vorrei sapere se cè modo di dargli risposte predefinite.
Il mio script è in perl... ma vanno bene soluzioni anche bash o python.
la soluzione ideale sarebbe che questi programmi avessero in fase di 
installazione con una command line da passargli.
In alternativa un sistema che mi simuli l'inserimento delle risposte da 
tastiera. Non sono abbastanza esperto di perl da sapere se si puo' fare, 
nel caso accetto dritte sulle librerie da studiarmi, o su cosa cercare 
su google.
La terza ipotesi, che però non so quanto sia percorribile è predisporre 
i file di configurazione sotto etc prima di fare l'installazione, per 
fargli credere che si tratta di un aggiornamento e quindi mantenere le 
configurazioni già preesistente senza farmi domande.
cercando con google... ma devo ancora provare ho trovato cose del tipo
export DEBIAN_FRONTEND=noninteractive apt-get -q -y install mysql-server
$ sleep 2
$ mysql -uroot -e <<EOSQL "UPDATE mysql.user SET 
Password=PASSWORD('root') WHERE User='root'; FLUSH PRIVILEGES;"
$ EOSQL
la parte interessante è << export DEBIAN_FRONTEND=noninteractive >>
ho un ubuntu... funzionarà? ok questa la provo :-)
è generale (cioè my si alle accettazioni delle licenze di java e dei 
font e con un default alle varie domande) o va solo per mysql?
Accetto suggerimenti.


per java ho trovato
#!/bin/bash
echo "sun-java6-bin shared/accepted-sun-dlj-v1-1 boolean true" 
|debconf-set-selections
apt-get install sun-java6-bin
exit
Questo non... mi è chiarissimo, ma è un buono spunto!
Speravo in qualcosa di più generalizzabile.

 Speravo in qualcosa di più generalizzabile.
Debconf. Ma non è cosa semplice.
-- 
Flavio Visentin
Scientists have finally discovered what's wrong with the female brain:
On the left side, there is nothing right, and on the right side, there
is nothing left.


Questo mi sembra un buon suggerimento...
googlando la prima risposta è stata debian conference :-))
Poi un man debconf ha cominciato a farmi vedere qualcosa....
tra l'altro un promettente dpkg-preconfigure.
Ora me lo devo studiare ovviamente, ma comunque la strada mi ispira 
fiducia.
Grazie.
ps... debconf appariva anche nello spezzone di codice del mio post di 
prima. Un motivo in più per pensare che sia la strada giusta.

 tra l'altro un promettente dpkg-preconfigure.
nello studiare debconf ho notato dpkg-preconfigure.
dpkg-preconfigure: dal nome mi ispirava più fiducia, non fa proprio 
quello che avevo sperato, comunque usando opportunamente l'opzione
-pvalue, --priority=value
            Set the lowest priority of questions you are
	   interested in. Any questions with a priority
            below the selected priority will be ignored
            and their default answers will be used.
non avrò il pacchetto configurato in fase di installazione, ma 
probabilmente riesco a evitarmi le domande. Se non mi riesce di trovare 
una soluzione migliore eventualmente questa potrebbe funzionare.

 nello studiare debconf ho notato dpkg-preconfigure.
Un altra parola chiave è "preseeding"
P.es.:
http://www.linuxquestions.org/questions/blog/bittner-195120/howto-automate-interactive-debian-package-installations-debconf-preseeding-2879/


 
http://www.linuxquestions.org/questions/blog/bittner-195120/howto-automate-interactive-debian-package-installations-debconf-preseeding-2879/
e lo sarebbe anche "FAI" solo che è troppo corta
<< Questions by debconf can be answered in the FAI config space in the 
debconf folder. This is called "debconf preseeding".>>
OK è quello che cercavo.

 Accetto suggerimenti.
Non mi sono dimenticato di aver fatto la domanda.
Non ho avuto tempo di fare le prove, ma i suggerimenti di THeZiPMaN
e Vide sono buoni.
Sto Facendo delle prove. Posto i risultati a breve
stay tuned.


OK, il gioco sembra funzionare.
Per ora ho effettuato le prove con wine 1.3
e java
Che sono programmi che richiedono di accettare una licenza.
Nota: wine 1.3 non richiede direttamente di accettare la licenza, ma fra 
le sue dipendenze c'ï¿œ "msttcorefonts" che lo richiede.
Per installarlo senza domande occorre mettere le risposte giuste in:
/var/cache/debconf/config.dat
faccio un sudo gedit /var/cache/debconf/config.dat che mi mostra il 
file. E' piuttosto complesso e TROVARE LE RISPOSTE DA METTERCI sembra un 
impresa difficile. Io ho fatto cosï¿œ (un diff fra il file iniziale e uno 
a cui ho risposto):
Prima mi sono salvato una copia del file:
sudo cp /var/cache/debconf/config.dat /var/cache/debconf/config.dat.sav
Poi ho installato java e wine1.3 in maniera interattiva
Infine ho usato meld (Se non ï¿œ installato sudo apt-get -y install meld)
per trovare le modifiche:
sudo meld /var/cache/debconf/config.dat /var/cache/debconf/config.dat.sav
Con un minimo di esperienza individuare le modifiche che sono state 
effettuate durante l'installazione ï¿œ piuttosto facile. ( Probabilmente 
non ï¿œ importante comunque noto che sono messe in ordine alfabetico per 
la chiave "name:xxxxxx/yyyyyyy" Quindi mi segno per il mio script di 
utilizzare lo stesso criterio)
ECCO LE MODIFICHE:
#### per msttcorefonts che ï¿œ la dipendenza incriminata di wine1.3
#### messo in ordine alfabetico sotto Name: man-db/install-setuid
Name: msttcorefonts/accepted-mscorefonts-eula
Template: msttcorefonts/accepted-mscorefonts-eula
Value: true
Owners: ttf-mscorefonts-installer
Flags: seen
#### per Java
#### in ordine alfabetoco sotto Name: sane-utils/saned_run
Name: shared/accepted-sun-dlj-v1-1
Template: shared/accepted-sun-dlj-v1-1
Value: true
Owners: sun-java6-bin, sun-java6-jdk, sun-java6-jre
Flags: seen
Trovate le 2 modifiche da fare ho verificato se funzionavano...
Quindi ho ripristinato la macchina virtuale che uso per le prove allo 
stato iniziale
ho aperto il file /var/cache/debconf/config.dat
e ho aggiunto le modifiche trovate in precedenza.
poi ho riporvato ad installare wine1.3 e java:
sudo add-apt-repository ppa:chimerarevo/java     ###Java
sudo add-apt-repository ppa:ubuntu-wine/ppa      ###Wine 1.3
sudo apt-get update
sudo apt-get -y install sun-java6-jre sun-java6-jdk sun-java6-plugin 
sun-java6-fonts   #### JAVA
sudo apt-get -y install wine1.3  #### wine1.3
Ho atteso pazientemente e alla fine apt-get ha installato tutto senza 
alcuna domanda.
Quindi si tratta solo di scrivere una funzione che dopo aver controllato 
non essere una precedente risposta, piazzi le risposte "PRECONFEZIONATE" 
dentro a /var/cache/debconf/config.dat. (questo non dovrebbe essere un 
problema, eventualmente appena fatto posto la procedura).
Nota! Per ora ho lavorato sul facile... Prima di realizzare la procedura 
di inserimento risposte voglio provare anche in installazione silent per:
mysql
apache
phpmyadmin
proftpd

> stay tuned.
ECCO UNO SCRIPT (perl) ...
Sperando che mantenga un impaginazione decente
Eventualmente qualcuno sia interessato che mi dia un posto per un upload 
o l'indirizzo di posta.
Lo script gestisce:
l'inserimento all'inizio
l'inserimente alla fine
l'inserimento nel mezzo
Non inserisce/modifica chiavi giï¿œ presenti
come chiave ho considerato: Name: ???????
Eventualmente togliere gli inutili print di debug
TEST: modifica di un config.dat locale
creare una dir, entrarci e:
cp /var/cache/debconf/config.dat config.dat
metterci lo script sotto e renderlo eseguibile
sudo chmod +x 
prova.pl
./
prova.pl
apt-get -y install meld (se non ï¿œ gia presente)
meld /var/cache/debconf/config.dat config.dat per vedere i 4 inserimenti
--- LO SCRIPT!! Creare file 
prova.pl
 con il seguente contenuto  ---
#!/usr/bin/perl -w
## DEFINIZIONE DEGLI ARRAY DEI TEMPLATE
## in realtï¿œ me li leggo da un file, questo ï¿œ
## un esempio estrepolato da quello che uso.
my @sample_template_config_dat_inizio = (
	"Name: aaaaa/aaaaaa",
	"Template: CANCELLAMI, E' UNA PROVA DI INSERIMENTO ALL'INIZIO",
	"Value: INIZIO",
	"Owners: INIZIO",
	"Flags: INIZIO"
	);
 
my @sample_template_config_dat_wine = (
	"Name: msttcorefonts/accepted-mscorefonts-eula",
	"Template: msttcorefonts/accepted-mscorefonts-eula",
	"Value: true",
	"Owners: ttf-mscorefonts-installer",
	"Flags: seen"
	);
my @sample_template_config_dat_java = (
	"Name: shared/accepted-sun-dlj-v1-1",
	"Template: shared/accepted-sun-dlj-v1-1",
	"Value: true",
	"Owners: sun-java6-bin, sun-java6-jdk, sun-java6-jre",
	"Flags: seen"
);
 
my @sample_template_config_dat_fine = (
	"Name: zzzzzz/zzzzzzz",
	"Template: CANCELLAMI, E' UNA PROVA DI INSERIMENTO ALLA FINE",
	"Value: FINE",
	"Owners: FINE",
	"Flags: FINE"
	);	
## ESEMPIO DI CHIAMATA ALLA FUNZIONE CHE SISTEMA
## in realtï¿œ i template li leggo da un file e
## faccio un ciclo per tutti i template.
sistemadebconf(\@sample_template_config_dat_fine,"config.dat");
sistemadebconf(\@sample_template_config_dat_inizio,"config.dat");
sistemadebconf(\@sample_template_config_dat_wine,"config.dat");
sistemadebconf(\@sample_template_config_dat_java,"config.dat");
#### FUNZIONE VERA E PROPRIA (e qui l'impaginazione potrebbe fare un 
macello)
sub sistemadebconf{
	my ($ptrTemplateToInsert,$nameFile) = @_;
	# nameFile Dovrebbe puntare a "/var/cache/debconf/config.dat" o una sua 
copia;
	my @array_to_insert=@$ptrTemplateToInsert;
	my $target;
	my @adebconf;
	my $linea_template_successivo=-1;
	my $gia_esistente=0;	
	push (@array_to_insert,""); #aggiungo una linea bianca finale all'array 
del template da inserire;
	if ($array_to_insert[0] =~ m/^Name: (.*)/) { #Nota "Name: "seguito da 
qualsiasi carattere mi sembra becchi tutte le casistiche, senza ambiguitï¿œ
		$target=$1;
	} else {
		die "LA PRIMA LINEA DELL'ARRAY DA INSERIRE DEVE ESSERE NELLA 
FORMA->Name: qualcosa";
	}
	tie @adebconf, 'Tie::File', $nameFile or die $!;
	for (my $i = 0; $i <= $#adebconf; $i++) {
		if ($adebconf[$i] =~ m/^Name: (.*)/) { #Nota "Name: "seguito da 
qualsiasi carattere mi sembra becchi tutte le casistiche, senza ambiguitï¿œ
			$name=$1;
			print "$adebconf[$i] ---> $name\n";
			if ($name eq $target){
				## il template ï¿œ gia esistente in /var/chache/debconf/config.dat
				$gia_esistente=1;
				last;
			}
			if ($name gt $target){
				$linea_template_successivo=$i;
				print "$adebconf[$i] --- TROVATO > $name\n";
				if ($linea_template_successivo) {
					# Se non ï¿œ la riga 0 (Name: adduser/homedir-permission)
					# Verifico che la linea precedente sia vuota
					my $strlineaprecedente=$adebconf[$i-1];
					$strlineaprecedente=~ s/^\s+//; #lTrim
					$strlineaprecedente=~ s/\s+$//; #rTrim
					if ($strlineaprecedente ne '') {
						die "ERRORE IL FILE < $nameFile > NON RISPETTA LE SPECIFICHE 
PREVISTE... \nOgni RIGA Name: (eccetto la prima) deve essere preceduta 
da una riga vuota\n";
					}
				}
				last;
			} else {
				print "$adebconf[$i] --- SALTO > $name\n";
			}
		}
	}
	if ($gia_esistente){
		print "NON FACCIO NULLA, Template gia presente Questa procedure 
prevede solo l'aggiunta, non la modifica\n";
	} else {
		if ($linea_template_successivo == -1){
			print "AGGIUNTA ALLA FINE $linea_template_successivo \n";
			for (my $i = 0; $i <= $#array_to_insert; $i++) {
				push(@adebconf,$array_to_insert[$i]);
			}
		} else {
			print "INSERIMENTO $linea_template_successivo \n";
			splice(@adebconf,$linea_template_successivo, 0, @array_to_insert);
		};
	}
	untie @adebconf;
}

 o l'indirizzo di posta.
Il sistema non ï¿œ utilizzabile per mysql-server e probabilmente nemmeno 
per le altre cose che richiedono una password (non viene salvata dentro 
quel file)
Ho googlegiato e visto diverse soluzioni. Le provo e decido quale 
preferisco. Ed eventualmente posto lo script.
Al momento sono orientato verso un:
sudo DEBIAN_FRONTEND=noninteractive apt-get -y install mysql-server
seguito dall'impostazione della password ad installazione terminata.
voglio vedere se trovo qualcosa di piï¿œ omogeneo fra le varie cose
che richiedono password.
Al momento oltre mysql di applicazioni che richiedono password, mi 
vengono in mente postgresql, firebird e phpmyadmin. (postgresql non lo uso)

> o l'indirizzo di posta.
Altro file interessante
/var/cache/debconf/passwords.dat


Potete tirare un sospiro di solievo. Questo probabilmente ï¿œ l'ultimo 
post sull'argomento e salvo novitï¿œ non rompo piu' le balle con questo 
thread.
HO EFFETTUATO CON SUCCESSO IL TEST Di installazione automatica con 
password provaprova
Prima ho popolato il file: /var/cache/debconf/passwords.dat
con i valori:
Name: mysql-server/root_password
Template: mysql-server/root_password
Value: provaprova
Owners: mysql-server-5.1
Name: mysql-server/root_password_again
Template: mysql-server/root_password_again
Value: provaprova
Owners: mysql-server-5.1
NOTA: Per farlo ho usato lo script postato precedentemente (la struttura 
del file ï¿œ la stessa). Funziona a patto di impostare come file di lavoro 
password.dat anzichï¿œ config.dat
Poi ho eseguito l'installazione:
sudo DEBIAN_FRONTEND=noninteractive apt-get -q -y install mysql-server
Il risultato ï¿œ stato l'installazione di mysql-server con password di 
root=provaprova senza che mi sia stata fatta nessuna domanda!
Ho verificabile con il comando
mysql -u root -p     --->(e si entra con password provaprova)
NOTA:
Il programma di installazione comunque ripulirï¿œ la chiave "Value:" del 
file /var/cache/debconf/passwords.dat dalla password senza ulteriori 
interventi. Quindi alla fine non ï¿œ necessario ripulirlo. Ad 
installazione finita il file avrï¿œ questo aspetto:
--- INIZIO /var/cache/debconf/passwords.dat ---
Name: mysql-server/root_password
Template: mysql-server/root_password
Value:
Owners: mysql-server-5.1
Name: mysql-server/root_password_again
Template: mysql-server/root_password_again
Value:
Owners: mysql-server-5.1
--- FINE /var/cache/debconf/passwords.dat ---
che ï¿œ lo stesso che si ottiene con un installazione standard.

thread.
Veramente ce ne fossero di thread come questo...
Se non trovi niente di meglio per pubblicarlo da qualche parte scrivimi
che ne parliamo.  Ma credo che valga la pena usare un wiki istituzionale
di Debian.  Non so dov'è, ma so che c'è.

 di Debian.  Non so dov'ï¿œ, ma so che c'ï¿œ.
Il wiki c'ï¿œ e il posto per queste cose ï¿œ sotto
http://wiki.debian.org/it/SystemAdministration
In rete la documentazione che si trova su questi aspetti ï¿œ quella
relativa al Debian Installer; in particolare si puï¿œ trovare qualcosa di
utile nella parte CDD (Custom Debian Distributions).
Un how to sul preseeding dei pacchetti ï¿œ certamente utile.



non saprei da che parte cominciare per un how-to sul preseeding.
Io mi sono limitato a utilizzare i vostri suggerimenti per creare uno 
script che mi permettesse l'installazione automatico di determinati 
pacchetti.
lo considero piu' un work araund che un howto.
Ad ogni modo lo script iniziale conteneva un errore che per chi non ha 
dimentichezza con perl non è banale.
Fondamentalmente mancava questa righa:
  use Tie::File;
Visto che invece anche chi non ha molta dimestichezza con perl può, con 
un po' di ingegno, riuscire ad utilizzare questo script... Ecco una 
versione corretta
------ INIZIO 
prova.pl
 -------
#!/usr/bin/perl -w
# Lo script è fatto per essere utilizzato su copie locali dei 2 file
# /var/cache/debconf/passwords.dat
# /var/cache/debconf/config.dat
# sudo cp /var/cache/debconf/config.dat config.dat
# sudo cp /var/cache/debconf/passwords.dat passwords.dat
# Nota: passwords non è direttamente accessibile dall'utente qualsiasi, 
quindi o lanciare questo script con sudo,
# oppure modificare l'utente della copia di passwords sudo chown UTENTE 
passwords.dat
# Effettua l'inserimento un unica volta, non fa modifiche.
# Se una chiave è presente la ignora
# Per l'uso basta definire un array e fare una chiamata alla funzione sotto
# passandogli come argomento l'array e il file su cui operare.
# a rischio e pericolo dell'utilizzatore può operare direttamente anche 
sui file originali.
# Nota se lo script fallisce per accesso negato, lanciarlo con sudo o 
verificare che le copie fatte
# appartengano all'utente che lancia lo script.
# sudo chown UTENTE passwords.dat
#my @sample_template_config_dat_inizio = (
#	"Name: aaaaa/aaaaaa",
#	"Template: CANCELLAMI, E' UNA PROVA DI INSERIMENTO ALL'INIZIO",
#	"Value: INIZIO",
#	"Owners: INIZIO",
#	"Flags: INIZIO"
#	);
use Tie::File;
 
my @sample_template_config_dat_wine = (
	"Name: msttcorefonts/accepted-mscorefonts-eula",
	"Template: msttcorefonts/accepted-mscorefonts-eula",
	"Value: true",
	"Owners: ttf-mscorefonts-installer",
	"Flags: seen"
	);
my @sample_template_config_dat_java = (
	"Name: shared/accepted-sun-dlj-v1-1",
	"Template: shared/accepted-sun-dlj-v1-1",
	"Value: true",
	"Owners: sun-java6-bin, sun-java6-jdk, sun-java6-jre",
	"Flags: seen"
);
 
#my @sample_template_config_dat_fine = (
#	"Name: zzzzzz/zzzzzzz",
#	"Template: CANCELLAMI, E' UNA PROVA DI INSERIMENTO ALLA FINE",
#	"Value: FINE",
#	"Owners: FINE",
#	"Flags: FINE"
#	);
my @sample_template_passwords_dat_mysqlpwd = (
	"Name: mysql-server/root_password",
	"Template: mysql-server/root_password",
	"Value: provaprova",
	"Owners: mysql-server-5.1"
	);
my @sample_template_passwords_dat_mysqlconfimpwd = (
	"Name: mysql-server/root_password_again",
	"Template: mysql-server/root_password_again",
	"Value: provaprova",
	"Owners: mysql-server-5.1"
	);
#sistemadebconf(\@sample_template_config_dat_fine,"config.dat");
#sistemadebconf(\@sample_template_config_dat_inizio,"config.dat");
sistemadebconf(\@sample_template_config_dat_wine,"config.dat");
sistemadebconf(\@sample_template_config_dat_java,"config.dat");
sistemadebconf(\@sample_template_passwords_dat_mysqlpwd,"passwords.dat");
sistemadebconf(\@sample_template_passwords_dat_mysqlconfimpwd,"passwords.dat");
die "TERMINATO CORRETTAMENTE";
#Qua finisce la parte da capire
#Segue la funzione Eventualmente toglier i print di debug
sub sistemadebconf{
	my ($ptrTemplateToInsert,$nameFile) = @_;
	# nameFile Dovrebbe puntare a "/var/cache/debconf/config.dat" o una sua 
copia;
	my @array_to_insert=@$ptrTemplateToInsert;
	my $target;
	my @adebconf;
	my $linea_template_successivo=-1;
	my $gia_esistente=0;	
	push (@array_to_insert,""); #aggiungo una linea bianca finale all'array 
del template da inserire;
	if ($array_to_insert[0] =~ m/^Name: (.*)/) { #Nota "Name: "seguito da 
qualsiasi carattere mi sembra becchi tutte le casistiche, senza ambiguità
		$target=$1;
	} else {
		die "LA PRIMA LINEA DELL'ARRAY DA INSERIRE DEVE ESSERE NELLA 
FORMA->Name: qualcosa";
	}
	tie @adebconf, 'Tie::File', $nameFile or die $!;
	for (my $i = 0; $i <= $#adebconf; $i++) {
		if ($adebconf[$i] =~ m/^Name: (.*)/) { #Nota "Name: "seguito da 
qualsiasi carattere mi sembra becchi tutte le casistiche, senza ambiguità
			$name=$1;
			print "$adebconf[$i] ---> $name\n";
			if ($name eq $target){
				## il template è gia esistente in /var/chache/debconf/config.dat
				$gia_esistente=1;
				last;
			}
			if ($name gt $target){
				$linea_template_successivo=$i;
				print "$adebconf[$i] --- TROVATO > $name\n";
				if ($linea_template_successivo) {
					# Se non è la riga 0 (Name: adduser/homedir-permission)
					# Verifico che la linea precedente sia vuota
					my $strlineaprecedente=$adebconf[$i-1];
					$strlineaprecedente=~ s/^\s+//; #lTrim
					$strlineaprecedente=~ s/\s+$//; #rTrim
					if ($strlineaprecedente ne '') {
						die "ERRORE IL FILE < $nameFile > NON RISPETTA LE SPECIFICHE 
PREVISTE... \nOgni RIGA Name: (eccetto la prima) deve essere preceduta 
da una riga vuota\n";
					}
				}
				last;
			} else {
				print "$adebconf[$i] --- SALTO > $name\n";
			}
		}
	}
	if ($gia_esistente){
		print "NON FACCIO NULLA, Template gia presente Questa procedure 
prevede solo l'aggiunta, non la modifica\n";
	} else {
		if ($linea_template_successivo == -1){
			print "AGGIUNTA ALLA FINE $linea_template_successivo \n";
			for (my $i = 0; $i <= $#array_to_insert; $i++) {
				push(@adebconf,$array_to_insert[$i]);
			}
		} else {
			print "INSERIMENTO $linea_template_successivo \n";
			splice(@adebconf,$linea_template_successivo, 0, @array_to_insert);
		};
	}
	untie @adebconf;
}
------ FINE 
prova.pl
 ---------

lo considero piu' un work araund che un howto.
Basta che funzioni, per cominciare.  Si fa sempre in tempo a migliorare.
I messaggi in inglese, però :)

Il 07/07/2011 22:17, bc ha scritto:
Ho paura che il mio script (post 07/07/2011 22:17, bc ha scritto) non 
serva a nulla Ho avuto qualche problema ad installare phpmyadmin in 
automatico e ho trovato: debconf-set-selections che credo serva allo scopo.
Usato in pipe nel modo seguente:
echo pacchetto template tipodomanda RISPOSTA | debconf-set-selections
esempio:
echo phpmyadmin phpmyadmin/reconfigure-webserver multiselect apache2 | 
debconf-set-selections
Comunque Trovare le risposte per PHPmyadmin è un po' rognoso.
Eccole(di seguito): (Nota i comandi sono lunghi. Per evitare problemi di 
a-capo derivanti dal prog di posta o separato i vari comandi con una 
riga vuota cosi si capisce dove iniziano e dove finiscono.)
Questa è una configurazione per mysql con password di root provaprova
e server web apache2 (Le 2 cose remmate servono se si vuole settare una 
password particolare per il db di phpmyadmin, altrimenti viene 
autogenerata e alla fine potete trovarla in " sudo gedit 
/etc/phpmyadmin/config-db.php ".
echo phpmyadmin phpmyadmin/internal/skip-preseed boolean false| 
debconf-set-selections
echo phpmyadmin phpmyadmin/reconfigure-webserver multiselect apache2 | 
debconf-set-selections
echo phpmyadmin phpmyadmin/dbconfig-install boolean true | 
debconf-set-selections
#echo phpmyadmin phpmyadmin/app-password-confirm password 
dbmyadminpassword | debconf-set-selections
echo phpmyadmin phpmyadmin/mysql/admin-user string root | 
debconf-set-selections
echo phpmyadmin phpmyadmin/mysql/admin-pass password provaprova | 
debconf-set-selections
#echo phpmyadmin phpmyadmin/mysql/app-pass password dbmyadminpassword | 
debconf-set-selections
dbc_debug=1 DEBCONF_DEBUG=developer DEBIAN_FRONTEND=noninteractive 
apt-get -y install phpmyadmin
Nota: dbc_debug=1 DEBCONF_DEBUG=developer
Si possono evitare nel'installazione definitiva. Mentre si fanno le 
prove aumentano la verbosità dell'installazione e permettono di capire 
se qualcosa va storto. oppure cos'altro si potrebbe decidere di voler 
impostare.