Merhabalar;
Türkiye Hudut ve Sahiller Sağlık Genel Müdürlüğünde Bilgisayar Mühendisi unvanıyla çalışmaktayım. Kurum olarak Pardus işletim sistemine geçeceğiz ancak bilindiği gibi Pardus’ta etki alanı ve proxy ile ilgili ayarları uçbirimden komutlar yazarak yapabiliyoruz.
kurumda Pardus ile ilgili test ve geliştirmeler tarafıma verilmiştir. Bir noktada Pardus gönüllülerinin yardımına ihtiyacım var.
Etki alanı ve proxy ayarlarını komut yazmak yerine tek bir tıklamayla yapabilmek için tarafımdan program yazmam istenmiştir. Ben de java programlama dili ve netbeans geliştirme ortamı kullanmaktayım.
Geliştireceğim yazılım ile ilgili fikirlerim şunlardır:
1 ilk önce gerekli kütüphaneleri kontrol edecek ve yüklü olmayanları tespit edip gösterecek.
2. gösterdiği kütüphaneleri tek tıklama ve ardından onay mesajından sonra otomatik kuracak (synaptic paket yöneticisi benzeri)
3. paketler kurulduktan sonra proxy ve etki alanı ile ilgili ayarlama bölümü aktif olacak
4. son kullanıcı için basit ve sade ayarlamalar bir tıklama ve onay mesajından sonra otomatikman yapılacak yani son kullanıcı komut yazmakla vb durumlarla uğraşmayacak.
ben birtakım denemeler yaptım. yaptığım denemeler ile ilgili kodları paylaşıyorum:
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.PrintStream;
import java.util.List;
import java.util.Scanner;
import java.util.concurrent.*;
import java.util.stream.Collectors;
/**
*
-
@author root
*/
public class ProcessBuilderExample2 {
public static void main(String[] args) {
ExecutorService pool = Executors.newSingleThreadExecutor();
ProcessBuilder processBuilder = new ProcessBuilder();
// Run this on Windows, cmd, /c = terminate after this run
processBuilder.command("bash", "-c", "apt-get install moreutils");
try {
Process process = processBuilder.start();
System.out.println("process ping...");
ProcessReadTask task = new ProcessReadTask(process.getInputStream());
BufferedReader reader =
new BufferedReader(new InputStreamReader(process.getInputStream()));
String line;
//boolean beklemede;
while ((line = reader.readLine()) != null) {
//line = reader.readLine();
//beklemede=process.isAlive();
System.out.println("sonuç1 = " +process.toHandle().toString());
System.out.println(line);
//beklemede=process.isAlive();
System.out.println("sonuç2 = " +process.toHandle().toString());
}
OutputStream os=process.getOutputStream();
PrintStream ps=new PrintStream(os);
System.out.println(" Devam Etmek istiyor musunuz? [E: evet /H: hayır]");
String cevap;
Scanner cevapOku=new Scanner(System.in);
cevap=cevapOku.nextLine();
if(!((cevap.equals("e"))||(cevap.equals("E"))))
{
System.out.println("vazgeçildi");
System.exit(0);
}
ps.println(cevap);
ps.flush();
int exitCode = process.waitFor();
System.out.println("\nExited with error code : " + exitCode);
Future<List<String>> future = (Future<List<String>>) pool.submit(task);
// no block, can do other tasks here
System.out.println("process task1...");
System.out.println("process task2...");
List<String> result = future.get();
for (String s : result) {
System.out.println(s);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
pool.shutdown();
}
}
private static class ProcessReadTask implements Callable<List<String>> {
private InputStream inputStream;
public ProcessReadTask(InputStream inputStream) {
this.inputStream = inputStream;
}
@Override
public List<String> call() {
return new BufferedReader(new InputStreamReader(inputStream))
.lines()
.collect(Collectors.toList());
}
}
}
Burada bir paketi yükletmeye çalıştığım görülmektedir.
Buraya kadarki yaptığım denemelerin ekran görüntüsü şöyledir:
yapmaya çalıştığım şey aynı uçbirimde olduğu gibi ilgili paketin kurulumu için yazdığım programın kullanıcıdan onay istemesidir. bununla ilgili örnek bir görsel paylaşıyorum:
görüldüğü üzere uçbirim onay isterken benim kodlar sonsuz döngüde bekliyor.
ne yapmam gerekir?