114 lines
4.9 KiB
Python
Executable File
114 lines
4.9 KiB
Python
Executable File
#!/usr/bin/python3
|
||
|
||
# Milis Linux Konsol / Grafik Kurulum Betiği
|
||
# Not: Bu betik henüz tamamlanmış değil.
|
||
# Commit tarihi: 25.09.2016
|
||
# Dialog manuali için: http://pythondialog.sourceforge.net/doc/
|
||
|
||
|
||
from dialog import Dialog
|
||
import os,sys,re,subprocess,time
|
||
|
||
d = Dialog(dialog="dialog")
|
||
f = open("/tmp/log.txt","w")
|
||
|
||
def runShellCommand(c):
|
||
out = subprocess.check_output(c,stderr=subprocess.STDOUT,shell=True,universal_newlines=True)
|
||
return out.replace("\b","") #encode byte format to string, ugly hack
|
||
|
||
def greetingDialog():
|
||
status = d.yesno(title="Milis Linux'a hoş geldiniz !",
|
||
text="Tanıtım yazısı buraya gelecek...\n\n\n\nKuruluma devam etmek istiyor musunuz ?",width=70,height=10)
|
||
if status == "ok":
|
||
checkUsername()
|
||
else:
|
||
sys.exit()
|
||
|
||
def checkUsername():
|
||
|
||
#status ok ya da cancel gibi durumları çekiyor.
|
||
status,username = 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(username)):
|
||
checkUserPassword(username)
|
||
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":
|
||
checkUsername()
|
||
|
||
def checkUserPassword(username):
|
||
#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,password = d.passwordbox(text="Lütfen {} kullanıcısı için şifrenizi giriniz".format(username),insecure=True)
|
||
if len(password) > 0:
|
||
#buraya kullanıcı ekleme kodu eklenecek. Şuan kendi sistemimde yazıyorum sıkıntı çıkmasın diye implemente etmedim.
|
||
f.write("[+] Kullanıcı eklendi")
|
||
if d.yesno(text="Yeni kullanıcı eklemek istiyor musunuz ?") == "ok":
|
||
checkUsername()
|
||
else:
|
||
chooseDisk()
|
||
else:
|
||
status=d.msgbox(text="Şifreniz boş olamaz")
|
||
checkUserPassword(username)
|
||
|
||
def chooseDisk():
|
||
diskChoice = []
|
||
diskNames = runShellCommand("lsblk -nS -o NAME").split('\n')
|
||
diskModels = runShellCommand("lsblk -nS -o MODEL").split('\n')
|
||
for i in range(len(diskNames)):
|
||
diskChoice.append((diskNames[i],diskModels[i]))
|
||
status,selectedDisk = d.menu(text="Lütfen bölümleme yapmak istediğiniz diski seçiniz:",choices=diskChoice)
|
||
os.system("cfdisk /dev/" + selectedDisk)
|
||
choosePart()
|
||
|
||
def choosePart():
|
||
partChoice = []
|
||
#Şimdilik Parted kütüphanesine gerek kalmadı, lsblk istediğimiz bütün değerleri alıyor.
|
||
diskParts = runShellCommand("lsblk -ln -o NAME | awk '{print $1}'").split('\n')
|
||
partSizes = runShellCommand("lsblk -ln -o SIZE | awk '{print $1}'").split('\n')
|
||
partFs = runShellCommand("lsblk -ln -o FSTYPE | awk '{print $1}'").split('\n')
|
||
partMajmin = runShellCommand("lsblk -ln -o MAJ:MIN | awk '{print $1}'").split('\n')
|
||
partLabel = runShellCommand("lsblk -ln -o LABEL").split('\n') #Bunda awk yok çünkü arada boşluk olabilir.
|
||
for i in range(len(diskParts)-1):
|
||
if partMajmin[i].split(":")[1] != "0": # partition olmayanları ele (sda/sdb seçince grub bozuluyor.)
|
||
partChoice.append((diskParts[i],partLabel[i]+ "\t" +partSizes[i]+"\t"+partFs[i]))
|
||
status,selectedPart = d.menu(text="Sistemin kurulacağı diski seçiniz",choices=partChoice)
|
||
if status == "ok":
|
||
f.write("{} seçildi !".format(selectedPart)) #burası da düzeltilcek şimdilik böyle commitliyorum :D
|
||
print("{} seçildi !".format(selectedPart))
|
||
formatDialog(selectedPart)
|
||
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...")
|
||
time.sleep(5)
|
||
chooseSwap()
|
||
#formatPart(part)
|
||
else:
|
||
choosePart()
|
||
def chooseSwap():
|
||
swapChoice = []
|
||
#Şimdilik Parted kütüphanesine gerek kalmadı, lsblk istediğimiz bütün değerleri alıyor.
|
||
diskParts = runShellCommand("lsblk -ln -o NAME | awk '{print $1}'").split('\n')
|
||
partSizes = runShellCommand("lsblk -ln -o SIZE | awk '{print $1}'").split('\n')
|
||
partFs = runShellCommand("lsblk -ln -o FSTYPE | awk '{print $1}'").split('\n')
|
||
partMajmin = runShellCommand("lsblk -ln -o MAJ:MIN | awk '{print $1}'").split('\n')
|
||
partLabel = runShellCommand("lsblk -ln -o LABEL").split('\n') #Bunda awk yok çünkü arada boşluk olabilir.
|
||
for i in range(len(diskParts)-1):
|
||
if partMajmin[i].split(":")[1] != "0": # partition olmayanları ele (sda/sdb seçince grub bozuluyor.)
|
||
swapChoice.append((diskParts[i],partLabel[i]+ "\t" +partSizes[i]+"\t"+partFs[i]))
|
||
status,selectedPart = d.menu(text="Takas alanının yer alacağı disk bölümünü seçiniz",choices=swapChoice)
|
||
if status == "ok":
|
||
f.write("{} seçildi !".format(selectedPart)) #burası da düzeltilcek şimdilik böyle commitliyorum :D
|
||
print("{} seçildi !".format(selectedPart))
|
||
#setSwap(selectedPart)
|
||
|
||
if __name__ == "__main__":
|
||
greetingDialog()
|