Newsgroup: it.comp.lang.delphi
Titolo: Telnet

Salve a tutti.
Ho questo problema da risolvere:
Devo mandare un archivio tar su linux, scompattarlo e poi eliminarlo.
Il mio codice:
....
     ftp.Connect;
     ftp.put(f,'/var/plug.tar.gz');
     ftp.Disconnect;
     { questo funziona}
     telnet.Host:=edIP.Text;
     telnet.Connect;
     telnet.IOHandler.writeLn('root');
     telnet.IOHandler.WriteLn('cd /');
     telnet.IOHandler.WriteLn('tar -xzvf /var/plug.tar.gz');
     telnet.IOHandler.WriteLn('rm /var/plug.tar.gz');
     telnet.Disconnect;
     {questo a volte si a volte no}
il log lo prendo qui:
procedure TScPrincipale.TelnetDataAvailable(Sender: TIdTelnet;
  const Buffer: string);
begin
   ScLog.Memo1.Lines.Add(Buffer);
end;
Mi succede, appunto, che a volte succede a volte no.
Domando dove sbaglio,esiste un modo per aspettare che il comando sia
eseguito prima di mandare il successivo
do popo il primo comando
Grazie

 do popo il primo comando
Se stai usando Indy questo avviene gi�. Indy, cos� come Synapse sono
librerie blocking e quindi sincrone a differenza invece di altre
librerie, v. ICS, che sono non blocking (asincrone). Io proverei anche
ad usare un'altra libreria, come synapse:
http://synapse.ararat.cz/doc/help/tlntsend.TTelnetSend.html
e vedere se hai gli stessi problemi. Darei anche un'occhiata ai log di
Linux, in particolare quando il comportamento che ti aspetti non si
verifica.
Antonio

 Antonio
Grazie della risposta.
Da premettere che è la prima volta che lavoro su ftp e telnet.
Cercherò di farmi capire meglio:
Se eseguo dall'ide di delphi tutto funziona a patto che prima eseguo
     telnet.IOHandler.WriteLn('cd /');
     telnet.IOHandler.WriteLn('tar -xzvf /var/plug.tar.gz');
e un secondo momento (dopo che è finita l'esecuzione, lo vedo dal log
a video) eseguo:
     telnet.IOHandler.WriteLn('rm /var/plug.tar.gz');
Se invece eseguo da windows (il progetto.exe)
dal log evinco che copia correttamente il file, si collega con telnet,
ma non lo decomprime.
Io ho bisogno di mandare i comandi in successione tipo:
Copia il file (con ftp)
aspetta che sia copiato
Decomprimi il file
aspetta che sia decompresso
Cancella il file
Forse sarà, per come dici tu, che lavorano in modo asincrono.
Puoi farmi un breve esempio di come fare la stessa cosa telnet con
synapse?
grazie

 synapse?
Prova qui
http://sourceforge.net/mailarchive/message.php?msg_id=43B55776.12177.E94A2A%40gebylist.mlp.cz
sulla lista Synapse. Se fai delle ricerche ci sono anche altri esempi
telnet.
In tutti i modi, se tu hai il controllo su questo server Linux io ti
consiglierei di evitare telnet che ha dei grossi problemi di sicurezza.
Potresti scrivere un demone che, dopo aver caricato il file con ftp,
riceve un messaggio che gli indica la presenza stessa del file ed esegue
il resto delle operazioni che ti occorrono, direttamente lato server.
Antonio

 grazie
Non è più semplice se sul server esegui un unico script bash contenente 
tutta la sequenza dei comandi ?
PS: scompattare un file tar dalla directory / come root è una cosa che mi 
fa rabbrividire.

 fa rabbrividire.
Raccapriccio e terrore.
gp


Scusate ma ho problemi con internet.
Ho risolto il problema fuori dall'ide di delphi.
Era un problema di timeout. Ho messo 600 e ora va bene.
Cosa intendete con scompatta nella root?
il tar è stato creato in /var
io lo copio in var e lo scompatto e ogni singolo file viene messo
esattamente dove richiesto.
Allora la parte ftp viene fatta bene, il tar viene decompresso ma non
viene poi eliminato.
Ripeto se aspetto che l'operazione finisca (lo vedo a video con il log
in una memo) e poi tramite
l'evento dui u n bottone lancio il comando telnet per cancellare
allora tutto ok.
Non conosco lnux quindi mi dite cosa è il bash
Grazie

 Non conosco lnux quindi mi dite cosa è il bash
Uno script bash di Linux lo puoi considerare come un file .bat del mondo 
Windows/dos. Un semplice file di testo contenente un elenco di comandi da 
eseguire.

 Non conosco lnux quindi mi dite cosa � il bash
http://tldp.org/LDP/Bash-Beginners-Guide/html/
Bash � molto di pi� di un semplice file batch. E' un potente linguaggio
di scripting tramite il quale puoi automatizzare anche le operazioni pi�
complesse in Linux. Se non vuoi impelagarti nella creazione di uno
script bash, anche se sulla rete puoi trovare molti esempi di ci� che
serve a te, l'unica che mi viene in mente � quella di crearti un demone
usando lazarus e fpc, il quale controlla se il file � presente in una
determinata directory, oppure quando gli viene notificata in qualche
modo la presenza di tale file (puoi invertarti un metodo di notifica
anche via email) ed esegue tutte le operazioni che ti occorrono
scompattandolo e cancellandolo.
Antonio

 Antonio
Si tratta di un ricevitore satellitare linux, nel quale si entra con:
username='root'
password='dreambox'
Non so se esistono altri utenti.
Forse l'approccio esatto sarebbe questo:
scaricare il tar in /tmp con comando ftp
scaricare il bash in /tmp con comando ftp
lanciare il bash con comando telnet
e, forse, al successivo riavvio del decoder i file in /tmp vengono
cancellati automaticamente.
Devo provare, e molte grazie per le dritte.

 Devo provare, e molte grazie per le dritte.
Antonio

 password='dreambox'
Senza offesa e senza conoscere questo ricevitore io non affiderei la
sviluppo di un sw ad un programmatore che mi entra come root su linux
e per di più mette la password su un gruppo Usenet.
Dacci anche l'IP così facciamo ancora meno fatica ad entrare e a
rasarti a zero la macchina!
Gp
--
Nintendo Wii-like front-end
http://sourceforge.net/projects/wiilauncher/

 
http://sourceforge.net/projects/wiilauncher/
... e se ti riesce di crackare Sky magari faccielo sapere ;)

 ... e se ti riesce di crackare Sky magari faccielo sapere ;)
Malafede, perchè insinui questo?
Comunque grazie