From ee7299243961237e0af1f8ef52f6894d9356882d Mon Sep 17 00:00:00 2001 From: milisarge Date: Tue, 14 Mar 2017 00:18:27 +0200 Subject: [PATCH] kurulum.guncellendi --- ayarlar/kurulum.yml | 18 +++ bin/kurulum.py | 379 ++++++++++++++++++++++++++++++++++++++++++++ bin/milis-kur | 2 +- 3 files changed, 398 insertions(+), 1 deletion(-) create mode 100644 ayarlar/kurulum.yml create mode 100644 bin/kurulum.py diff --git a/ayarlar/kurulum.yml b/ayarlar/kurulum.yml new file mode 100644 index 000000000..1132cdce2 --- /dev/null +++ b/ayarlar/kurulum.yml @@ -0,0 +1,18 @@ +bolgesel: + dil: turkce + zaman: istanbul +disk: + baglam: /mnt + bolum: /dev/sda6 + format: evet + takasbolum: /dev/sda7 +gorunum: + arkaplan: milislinux.jpg +grub: + kur: evet +kullanici: + isim: qwerty + sifre: '12345' +program: + surum: '1.0' + tanim: Milis Linux Kurucusu diff --git a/bin/kurulum.py b/bin/kurulum.py new file mode 100644 index 000000000..004b80078 --- /dev/null +++ b/bin/kurulum.py @@ -0,0 +1,379 @@ +#!/usr/bin/python3 +# Milis Linux Konsol / Grafik Kurulum Betiği +# Commit tarihi: 25.09.2016-03.2017 +# Dialog rehberi için: http://pythondialog.sourceforge.net/doc/ +# Yazarlar: milisarge,geekdinazor + +import sys +import subprocess +import re +import crypt +import os +import time +import sys +import site +import json + +kontrol=True + +if kontrol: + #talimatname-paket güncellemeleri + os.system("clear") + os.system("mps -GG") + os.system("mps -G") + + #lsb-release tamiri + os.system("mps -g lsb-release") + + #gereklerin kontrolü-kurulumu + paketd=site.getsitepackages() + yukluler=os.listdir(paketd[0]) + mps_gerekler="/tmp/komutan.gerekler" + kur="pip3 install " + mpskur="mps kur " + kontrol=["pythondialog"] + mpskontrol=["python3-pip","python-yaml","python3-yaml","advcp"] + + for mpsk in mpskontrol: + if os.path.exists("/var/lib/pkg/DB/"+mpsk) is False: + os.system("mps kur "+mpsk) + else: + print(mpsk,"zaten kurulu") + + for yuklu in yukluler: + for kont in kontrol: + if kont in yuklu: + print (kont,"kurulu") + kontrol.remove(kont) + for kont in kontrol: + os.system(kur+kont) + + +from dialog import Dialog +import yaml + +d = Dialog(dialog="dialog") +f = open("/tmp/kurulum.log","w") + +kurulum_dosya="/root/ayarlar/kurulum.yml" + +if not os.path.exists(kurulum_dosya): + d.infobox(text=kurulum_dosya+" bulunamadı!") + sys.exit() + +def komutCalistir(c): + out = subprocess.check_output(c,stderr=subprocess.STDOUT,shell=True,universal_newlines=True) + return out.replace("\b","") #byte-string çevrim + +def kurulum_oku(kurulumdos): + with open(kurulumdos, 'r') as f: + param = yaml.load(f) + return param + +def kurulum_yaz(param,kurulumdos): + with open(kurulumdos, 'w') as outfile: + yaml.dump(param, outfile, default_flow_style=False,allow_unicode=True) + +def paramEkran(param,indent=0): + yazi="" + '''for key, value in param.iteritems(): + yazi+='\t' * indent + str(key)+"\n" + if isinstance(value, dict): + paramEkran(value, indent+1) + else: + yazi+='\t' * (indent+1) + str(value) + return yazi + ''' + return json.dumps(param,sort_keys=True, indent=4) + +kurparam=kurulum_oku(kurulum_dosya) + +def karsilamaEkrani(): + status = d.yesno(title="Milis Linux Atilla 1.0 Kurulum Ekranı", + text="Milis Linux (Milli İşletim Sistemi) sıfır kaynak koddan üretilen,kendine has paket yöneticisine sahip,\ + bağımsız tabanlı yerli linux işletim sistemi projesidir.\ + Genel felsefe olarak ülkemizdeki bilgisayar kullanıcıları için linuxu kolaylaştırıp\ + Milis işletim sisteminin sorunsuz bir işletim sistemi olmasını sağlamayı ve yazılımsal\ + olarak dışa bağımlı olmaktan kurtarmayı esas alır. Ayrıca her türlü katkıda bulunmak\ + isteyenler için bulunmaz bir türkçe açık kaynak projesidir.\ + \n\n\nKuruluma devam etmek istiyor musunuz ?",width=80,height=12) + if status == "ok": + kullaniciKontrol() + else: + sys.exit() + +def kullaniciKontrol(): + + #status ok ya da cancel gibi durumları çekiyor. + status,kullisim = d.inputbox(text="Lütfen kullanıcı adı giriniz") + + #NAME_REGEX bkz. man 5 adduser.conf + if bool(re.compile(r'^[a-z][-a-z0-9]*$').match(kullisim)): + sifreKontrol(kullisim) + else: + status=d.msgbox(text="Hatalı kullanıcı adı girdiniz.\n\n\ + Kullanıcı adları alfanümerik karakterle başlamalıdır\ + ve alfanümerik (A-Z), nümerik (0-9) ve tire (-) \ + harici bir karakter içermemelidir.",width=60) + if status == "ok": + kullaniciKontrol() + +def kullaniciTanimla(isim,kullisim,kullsifre): + #encPass = crypt.crypt(kullsifre,"22") + #os.system("useradd -p "+encPass+ " -s "+ "/bin/bash "+ "-d "+ "/home/" + kullisim+ " -m "+ " -c \""+ name+"\" " + kullisim) + kurparam["kullanici"]["isim"]=kullisim + kurparam["kullanici"]["sifre"]=kullsifre + ###os.system("kopar milis-"+isim+" "+kullisim) + ###os.system('echo -e "'+kullsifre+'\n'+kullsifre+'" | passwd '+kullisim) + +def kullaniciOlustur(isim,kullisim,kullsifre): + #encPass = crypt.crypt(kullsifre,"22") + #os.system("useradd -p "+encPass+ " -s "+ "/bin/bash "+ "-d "+ "/home/" + kullisim+ " -m "+ " -c \""+ name+"\" " + kullisim) + os.system("kopar milis-"+isim+" "+kullisim) + os.system('echo -e "'+kullsifre+'\n'+kullsifre+'" | passwd '+kullisim) + d.infobox(text=kullisim+" kullanıcısı başarıyla eklendi.") + time.sleep(1) + +def sifreKontrol(kullisim): + #insecure=True parolanın yıldız şeklinde gözükmesini sağlar, + #root şifresi sorarken belki bunu silebiliriz normal sudo şifresi + #girer gibi gözükmez. + status,kullsifre = d.passwordbox(text="Lütfen {} kullanıcısı için şifrenizi giriniz".format(kullisim),insecure=True) + if len(kullsifre) > 0: + kullaniciTanimla(kullisim,kullisim,kullsifre) + d.infobox(text=kullisim+" kullanıcısı başarıyla tanımlandı.") + time.sleep(1) + diskSecim() + else: + status=d.msgbox(text="Şifreniz boş olamaz") + sifreKontrol(kullisim) + +def diskSecim(): + diskSecimler = [] + diskIsımler = komutCalistir("lsblk -nS -o NAME").split('\n') + diskModeller = komutCalistir("lsblk -nS -o MODEL").split('\n') + for i in range(len(diskIsımler)): + diskSecimler.append((diskIsımler[i],diskModeller[i])) + status,seciliDisk = d.menu(text="Lütfen bölümleme yapmak istediğiniz diski seçiniz:",choices=diskSecimler) + ###os.system("cfdisk /dev/" + seciliDisk) + bolumSec() + +def bolumSec(): + bolumSecimler = [] + uygunBolumler = ['sd','hd','mmcblk0p'] + #Şimdilik Parted kütüphanesine gerek kalmadı, lsblk istediğimiz bütün değerleri alıyor. + diskBolumler = komutCalistir("lsblk -ln -o NAME | awk '{print $1}'").split('\n') + bolumBoyutlar = komutCalistir("lsblk -ln -o SIZE | awk '{print $1}'").split('\n') + bolumDs = komutCalistir("lsblk -ln -o FSTYPE | awk '{print $1}'").split('\n') + bolumMajmin = komutCalistir("lsblk -ln -o MAJ:MIN | awk '{print $1}'").split('\n') + bolumEtiket = komutCalistir("lsblk -ln -o LABEL").split('\n') #Bunda awk yok çünkü arada boşluk olabilir. + for i in range(len(diskBolumler)-1): + if bolumMajmin[i].split(":")[1] != "0": # partition olmayanları ele (sda/sdb seçince grub bozuluyor.) + for uygunBolum in uygunBolumler: + if uygunBolum in diskBolumler[i]: + bolumSecimler.append((diskBolumler[i],bolumEtiket[i]+ "\t" +bolumBoyutlar[i]+"\t"+bolumDs[i])) + status,seciliBolum = d.menu(text="Sistemin kurulacağı diski seçiniz",choices=bolumSecimler) + if status == "ok": + f.write("{} seçildi !".format(seciliBolum)) + print("{} seçildi !".format(seciliBolum)) + kurparam["disk"]["bolum"]="/dev/"+seciliBolum + ###formatDialog(seciliBolum) + takasSec(seciliBolum) + +def formatDialog(part): + status = d.yesno(title="Uyarı !", + text="/dev/{} bölümü ext4 türünde formatlanacak. Emin misiniz ?".format(part)) + if status == "ok": + d.infobox(text="Formatlanıyor... Lütfen bekleyiniz...") + formatPart(part) + time.sleep(5) + else: + bolumSec() + +def bolumFormatla(hedef): + komut="umount -l "+hedef + print (komut) + if os.path.exists(hedef): + os.system(komut) + komut2="mkfs.ext4 -F " + hedef + try: + os.system(komut2) + except OSError as e: + d.infobox(text=str(e)) + time.sleep(1) + sys.exit() + d.infobox(text=hedef+" disk bölümü formatlandı.") + time.sleep(1) + else: + d.infobox(text="disk bölümü bulunamadı!") + time.sleep(1) + sys.exit() + + + +def bolumBagla(hedef,baglam): + komut="mount "+hedef+" "+baglam + try: + os.system(komut) + except OSError as e: + d.infobox(text=str(e)) + time.sleep(1) + sys.exit() + + d.infobox(text=hedef+" "+baglam+" altına bağlandı.") + time.sleep(1) + +def bolumCoz(hedef): + komut="umount -l "+hedef + try: + os.system(komut) + except OSError as e: + d.infobox(text=str(e)) + time.sleep(1) + sys.exit() + + d.infobox(text=hedef+" çözüldü.") + time.sleep(1) + +def sistemKopyala(baglam): + os.system("clear") + komut="" + #bazı dizinleri atlamak için ve hız rsync + dizinler=["bin","boot","home","lib","sources","usr","depo","etc","include","lib64","opt","root","sbin","var"] + yenidizinler=["srv","proc","tmp","mnt","sys","run","dev","media"] + i=0 + mikdiz=len(dizinler) + for dizin in dizinler: + i+=1 + print (i,"/",mikdiz,dizin,"kopyalanıyor.....") + komut="rsync --delete -a --info=progress2 /"+dizin+" "+baglam+" --exclude /proc" + print (dizin,"kopyalandı.") + os.system(komut) + for ydizin in yenidizinler: + print (ydizin,"oluşturuluyor.....") + komut="mkdir -p "+baglam+"/"+ydizin + os.system(komut) + print (ydizin,"oluşturuldu.") + #yükleme akışı için acp + #os.system("acp -g -axnu / "+baglam) + #normal cp + #os.system("cp -axvnu / "+baglam) + + d.infobox(text="sistem kopyalandı.") + time.sleep(1) + +def initrdOlustur(hedef): + os.system("mount --bind /dev "+hedef+"/dev") + os.system("mount --bind /sys "+hedef+"/sys") + os.system("mount --bind /proc "+hedef+"/proc") + os.system('chroot '+hedef+' dracut --no-hostonly --add-drivers "ahci" -f /boot/initramfs') + + d.infobox(text="initrd kuruldu.") + time.sleep(1) + +def grubKurTespit(): + if d.yesno(text="Grub kurmak istiyor musunuz ?") == "ok": + kurparam["grub"]["kur"]="evet" + else: + kurparam["grub"]["kur"]="hayir" + kurulumBilgi() + +def kurulumBilgi(): + kurulum_yaz(kurparam,kurulum_dosya) + d.infobox(text="Kurulum ayarlarınız başarıyla kayıt edildi.") + time.sleep(1) + kurulumUygula(kurulum_dosya) + +def grubKur(hedef,baglam): + hedef = hedef[:-1] + if hedef == "/dev/mmcblk0": #SD kart'a kurulum fix + os.system("grub-install --boot-directory="+baglam+"/boot /dev/mmcblk0") + else: + os.system("grub-install --boot-directory="+baglam+"/boot " + hedef) + os.system("chroot "+baglam+" grub-mkconfig -o /boot/grub/grub.cfg") + + d.infobox(text="grub kuruldu.") + time.sleep(1) + +def kurulumUygula(dosya): + #ayarların alınması + kurulum=kurulum_oku(dosya) + yazi="" + yazi+=paramEkran(kurulum)+"\n\n" + yazi+="Kurulum Ayarlarını onaylıyor musunuz?" + if d.yesno(text=yazi,width=50,height=70) == "ok": + #kurulum işlemi + kbolum=kurulum["disk"]["bolum"] + kformat=kurulum["disk"]["format"] + kbaglam=kurulum["disk"]["baglam"] + ktakas=kurulum["disk"]["takasbolum"] + kisim=kurulum["kullanici"]["isim"] + ksifre=kurulum["kullanici"]["sifre"] + kgrubkur=kurulum["grub"]["kur"] + #ayarların uygulanması + #formatlama + if kformat == "evet": + bolumFormatla(kbolum) + #kurulacak bölümün bağlanması + bolumBagla(kbolum,kbaglam) + #kullanıcı oluşturma + kullaniciOlustur(kisim,kisim,ksifre) + #sistemin kopyalanması + sistemKopyala(kbaglam) + #initrd oluşturulması + initrdOlustur(kbaglam) + if kgrubkur == "evet": + grubKur(kbolum,kbaglam) + bolumCoz(kbolum) + d.infobox(text="Milis İşletim Sistemi başarıyla kuruldu.") + else: + if d.yesno(text="Kurulumdan Çıkış?") == "ok": + sys.exit() + else: + karsilamaEkrani() + +def kurulumBitir(): + d.infobox(text="Milis İşletim Sistemi başarıyla kuruldu.") + +def takasSec(kbolum): + if d.yesno(text="Takas alanı kullanmak istiyor musunuz ?") == "ok": + takasSecimler = [] + uygunBolumler = ['sd','hd','mmcblk0p'] + #Şimdilik Parted kütüphanesine gerek kalmadı, lsblk istediğimiz bütün değerleri alıyor. + diskBolumler = komutCalistir("lsblk -ln -o NAME | awk '{print $1}'").split('\n') + bolumBoyutlar = komutCalistir("lsblk -ln -o SIZE | awk '{print $1}'").split('\n') + bolumDs = komutCalistir("lsblk -ln -o FSTYPE | awk '{print $1}'").split('\n') + bolumMajmin = komutCalistir("lsblk -ln -o MAJ:MIN | awk '{print $1}'").split('\n') + bolumEtiket = komutCalistir("lsblk -ln -o LABEL").split('\n') #Bunda awk yok çünkü arada boşluk olabilir. + for i in range(len(diskBolumler)-1): + if bolumMajmin[i].split(":")[1] != "0": # partition olmayanları ele (sda/sdb swap için uygun değil) + if diskBolumler[i] != kbolum: + for uygunBolum in uygunBolumler: + if uygunBolum in diskBolumler[i]: #loop partlar gibi swap kurulamayacak alanları ele + takasSecimler.append((diskBolumler[i],bolumEtiket[i]+ "\t" +bolumBoyutlar[i]+"\t"+bolumDs[i])) + status,seciliBolum = d.menu(text="Takas alanının yer alacağı disk bölümünü seçiniz",choices=takasSecimler) + if status == "ok": + f.write("{} seçildi !".format(seciliBolum)) + print("{} seçildi !".format(seciliBolum)) + ###swapAyarla(seciliBolum) + kurparam["disk"]["takasbolum"]="/dev/"+seciliBolum + else: + kurparam["disk"]["takasbolum"]="" + grubKurTespit() + +def swapAyarla(bolum): + os.system("mkswap "+"/dev/"+bolum) + os.system('echo "`lsblk -ln -o UUID /dev/' + bolum + '` none swap sw 0 0" | tee -a /etc/fstab') + + +if __name__ == "__main__": + + if len(sys.argv) == 1: + karsilamaEkrani() + else: + dosya=sys.argv[1] + if os.path.exists(dosya): + kurulumUygula(dosya) + else: + d.infobox(text=dosya+" bulunamadı!") + time.sleep(1) diff --git a/bin/milis-kur b/bin/milis-kur index 2a5401cd0..2e90e2587 100755 --- a/bin/milis-kur +++ b/bin/milis-kur @@ -1 +1 @@ -python3 /usr/bin/milis-kurulum.py +python3 /usr/bin/kurulum.py