Pagina 1 di 3 1 2 3 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 26

Discussione: Linux exec()

  1. #1
    Utente di HTML.it
    Registrato dal
    Jun 2010
    Messaggi
    158

    Linux exec()

    E' possibile lanciare in Java , attraverso exec() un comando del tipo sudo apt-get install nomeProgramma ?

    per windows ho risolto il problema , con Linux nn ci sono riuscito , lancio il terminale ma vorrei che in automatico venga lanciato anke il comando.

    Grazie

  2. #2
    Utente di HTML.it
    Registrato dal
    Jun 2010
    Messaggi
    158
    nn riesco a trovare una soluzione al mio problema , già qualke mese fa avevo incontrato tale problema e avevo trovato una soluzione "parziale" in pratica lanciavo solo il terminale e l'utente a mano inseriva il comando.

    Però adesso ho bisogno di risolvere il problema.... posto il codice :
    codice:
    String[] comando = {"/usr/bin/apt-get","install","nomeProgramma"};                         
    theProcess = Runtime.getRuntime().exec(comando);
    nn mi rileva nessun errore però il terminale nn viene lanciato.....
    nn riesco a capire se veramente sta installando il programma...

    per lanciare il terminale uso il seguente comando ( effettivamente lo lancia )

    codice:
    theProcess = Runtime.getRuntime().exec("x-terminal-emulator");

    P.S. sto testando su un sistema Debian , in particolare Ubuntu

    Grazie

    P.P.S. il problema potrebbe essere il sudo ??? ho provato ad inserirlo e in quel caso mi da errore....

  3. #3
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    4,157
    prova ad eseguire il comando che hai scritto da riga di comando e vedi se va (quindi se è un problema dello script o un problema tuo).

    In caso devi mettere sudo ti consiglierei ci creare un piccolo script sh, a cui alla fine passi solo i parametri e lanci quello. Dentro lo script puoi passare opzioni di root (offuscando la password ovviamente).

    Ora mi sovviene una domanda: che bisogno ha un programma utente di andare ad installare roba nel computer ospite? sopratutto apt-get è debian dependent, non pensi di ridurre la portabilità (o hai una soluzione in generale closs-plataform?) Soluzione migliore mi sembra imporre un requisito minimo sulla macchina oppure portarsi dietro il necessario.

    Se pensi agli installatori, questi sono script sh o bat oppure eseguibili eseguiti coi permessi di root (quindi la scrittura la fanno perché si autorizza lo script in partenza, non strada facendo). In questi casi inoltre puoi anche scegliere la locazione (se parte da home non se ne fa niente dei permessi).

  4. #4
    Utente di HTML.it
    Registrato dal
    Jun 2010
    Messaggi
    158
    Grazie per la risposta

    allora effettivamente il comando da terminale va , se sono normal user mi da l'ovvio problema dei permessi perchè manca sudo , se sono root nn da problemi....

    dunque devo dedurre che in back-ground il comando funziona ? ( il terminale però nn viene lanciato..... )
    nn è possibile vedere il processo di installazione del pacchetto sul terminale ?

    inoltre la mia applicazione è stata realizzata solo per pacchetti Debian ( dunque apt-get lo posso usare tranquillamente )

    quale soluzione mi suggerisci ? avrei pensato di inserire questi comandi ( apt-get ) in uno script shell che lancia le installazioni , così richiamo lo script che lancia le installazioni...

    come risolvo il problema della root password ? mi è stato chiesto di realizzare l'applicazione che chieda all'utente di inserire la password...

    Grazie

    P.S. cerco di fare un pò mente locale , il problema sembrava più semplice però vedo che abbastanza articolato....

  5. #5
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    4,157
    ecco il problema è che mancano i permessi di root (come immaginavo).
    Devi per forza fare questo in modo del tutto trasparente all'utente (al max solo inserire password di root?)
    Per me una soluzione migliore (visto che non amo molto fare pacioccamenti che possono creare problemi) è uno script di pre-run, da eseguire coi permessi di root (quindi non devi scrivere nello script password varie) che va a preparare l'ambiente (es installa il modulo che vuoi) e poi esegui il tuo programma. Il tuo programma fa un check iniziale dell'ambiente e se gli manca roba si ferma.
    Mi sembra una cosa più elegante (e meno problematica vista la password di root).

  6. #6
    Utente di HTML.it
    Registrato dal
    Jun 2010
    Messaggi
    158
    sto procedendo per gradi.... nn è possibile ottenere la password di root ?

    codice:
    this.home=System.getProperty("user.name");
    ad esempio invece di ottenere il nome dell'utente mi servirebbe la password di root , in modo tale da effettuare un controllo sulla pass , se nn è corretta l'installer si ferma.
    Se è corretta procedo con l'installazione dei pacchetti...

  7. #7
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    4,157
    allora io non so dove sta la password di root, però se si mette su un sistema di protezione un motivo ci sarà oppure no?
    da utente un programma utente a cui devo fornire la password di root per l'esecuzione non lo andrei mai ad installare, tanto meno eseguire. La stabilità di linux sta nel fatto che queste robe, pur se possibili, sono molto limitate. Concepisco il fatto che ti servano dei requisiti, non che se non trovi programmi per l'esecuzione te li scarichi e installi con permessi di root!
    Oltretutto a volte ci sono dipendenze che possono creare problemi ad altri programmi (non so se è questo il caso)quindi in generale un programma che runtime recupera la password di root e agisce sul sistema operativo non è un buon programma.
    La prassi di creare uno script che esegui con sudo (es. installazione) è usata per poter scrivere programmi di utilità a tutti nella macchina (non doverli ripetere per ogni utente), ma si dà una porzione di file system (specificata cmq) su cui scrivere. Si riduce cmq la portata dei danni.
    Eseguire un programma come root è anche una soluzione sbagliata, fai cadere la sicurezza di linux. La migliore situazione per me resta di fissare un pre-run programma (script) che esegui con permessi di root e che ti prepara l'ambiente (se ti serve l'installazione) o al max vai ad indicare i passi da fare, non chiedere runtime la password di root, verificarla reperendola ed eseguendo un'installazione.

  8. #8
    Utente di HTML.it
    Registrato dal
    Jun 2010
    Messaggi
    158
    posto la soluzione

    codice:
    File s = new File (home ,"risorse/script");                        
    Runtime exec = Runtime.getRuntime();                        
    exec.exec("gnome-terminal -x bash -c "+s.getAbsolutePath()+"/myscript.sh;bash");
    la soluzione migliore in effetti era quella di creare uno script che a sua volta lancia il comando :
    > sudo apt-get install nomeProgramma


    purtroppo però se inserisco una cartella ( che nel nome contiene uno spazio ) nn funziona correttamente.
    Posto il codice per essere più chiaro :

    codice:
    File f = new File (home ,"risorse/Guide");                       
    theProcess = Runtime.getRuntime().exec("evince file://"+f.getAbsolutePath()+"/guida.pdf");
    ho provato anche ad effettuare la seguente modifica , però la guida ( il file ) non si apre....

    codice:
    theProcess = Runtime.getRuntime().exec("evince file://\""+f.getAbsolutePath()+"/Debian.pdf\"");
    su windows funziona... su linux no

    help me

  9. #9
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    4,157
    quando costruisci le stringhe ricorda semrpe i caratteri di escape e i separatori che cambiano da windows a linux (e lo sapresti guardando bene le api di File)

    codice:
    File f = new File (home ,"risorse");                       
    File f1 = new File(f.getAbsolutePath(), "Guide");
    //Oppure 
    File f = new File (home ,"risorse" + File.SEPARATOR + "Guide");                       
    //e stessa cosa devi fare per il comando
    theProcess = Runtime.getRuntime().exec("evince file:////"+f.getAbsolutePath()+ File.SEPARATOR + "guida.pdf");
    
    theProcess = Runtime.getRuntime().exec("evince file:////\"" + f.getAbsolutePath()+ File.SEPARATOR + "Debian.pdf\"");
    ovviamente anche qui

  10. #10
    Utente di HTML.it
    Registrato dal
    Jun 2010
    Messaggi
    158
    recupero il post perchè il problema è simile.... cerco di essere breve e conciso

    sto lavorando su RedHat e devo lanciare l'installazione con yum install , riscrivo il codice che ho usato :

    codice:
    File s = new File (home ,"risorse/script");                         
    Runtime exec = Runtime.getRuntime();                         
    exec.exec("gnome-terminal -x bash -c "+s.getAbsolutePath()+"/myscript.sh;bash");

    mentre nello script ho inserito il seguente comando :

    yum install httpd


    ho poca esperienza su RedHat , magari sarà una cosa banale.... credo sia un problema di permessi , però nn riesco a combinare su con yum install

    su Debian facendo così sudo apt-get install nomePacchetto funziona

    Help Me

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.