Arch Linux Kolay Kurulum Betiği

Başlatan mhmtkrktr, 17 Temmuz 2017 - 08:53:23

« önceki - sonraki »

0 Üyeler ve 1 Ziyaretçi konuyu incelemekte.

mhmtkrktr

Amaç: Arch Linux kurulumunu olabildiğince basitleştirmek.
Durum: Başlangıç aşamasında
İçerik: Dağıtım vs değildir. Arch.iso kalıbına entegre olarak çalışır !
Özellikler: İki çeşit kurulum imkanı sunar.
    1) Tamamen varsayılan ayarlarıyla minimum yapılandırmalı kurulum
    2) Kullanıcının belirlediği yerden (Harici bellek veya github) , önceden hazırlanmış yapılandırma içeriğini kullanan kurulum.
        (Bu özellik, paket listesi, dağıtım ismi, sistem içi yapılandırma, simge seti, tema, font vb. verilecek tüm içeriği kapsar. İçerikler kurulum aşamasında içeriye alınır ve kuruluma dahil edilir. Kurulum aşamasın da bunun için, ayrı bir düzenleme istemez. Eğer varsa içeriği kendisi ayıklar ve içeriğe göre gerekli yerleri yapılandırır. )

Kurulum aşamasında 4 farklı dil seçimi olsa da, seçenekleri basitleştirmek amacıyla ağırlıklı olarak Türkçe yapılandırma seçenekleri bulunuyor.

Pacman komutlarına alternatif olarak, xsel destekli pacin, pacdown, pacup, pacrem gibi komutlar eklemeyi düşünüyorum.
pacin paket > pacman içi sorun varsa, sorunu çöz ve paketi kur.
pacup > Eğer varsa, pacman ve veritabanı sorunlarını çöz, sistemi güncelle
pacdown > son yapılan güncellemeyi geri al
pacrem paket > paketi seçmeli olarak kaldır.
pacfin isim > depolarda ki, aynı veya benzer isimde ki paketleri bul ve kurulu olan/olmayan şeklinde listele.

Arch'ın yapısı gereği, tek bir iso ile uzun süreli kurulum imkanı. (ben hala 2 yıl önce yazdığım CD yi kullanıyorum ;-) )

Bunu kullanan abimize, şu elimde gördüğünüz tıraş bıçağıda yanında hediye. ;-)
Yok o kadar değil ama aklıma geldikçe ilave ederim.

Konuyu asıl açma sebebim, fikir danışmak. Öncelikle, kurulum görüldüğü üzere konsol üzerinde mi olsun? İsteğe bağlı olarak, dialog penceresi veya grafik arayüz şekline de dönüştürebilirim.

Mevcut sisteminiz üzerinde deneyip, görüşlerinizi paylaşırsanız sevinirim. (Sisteminize zarar vermez.)

#!/bin/bash

set -e -u
umask 022

End=$'\e[0m';
Green=$'\033[1;32m';
Yellow=$'\033[0;33m';
Red=$'\033[1;31m';
Magenta=$'\033[1;35m';
Blue=$"\033[1;34m"
Cyan=$"\033[1;36m"
White=$"\033[1;97m"

  SCRDIR=$(readlink -f ${0%/*})
  NETDEV=$(ifconfig -s|awk '/^wl/{print $1}')
  CHECK=1
  SYSTART=
  RETMAIN=
  SETLNG=
  LOCL=
  SELKEY=
  KYBRT=
  HostNane=
  KERNEL=
  UserName=
  DiskPartion=

FuncNetworkCheck() {
if ! ping google.com -W 4 -c 4 &> /dev/null; then
  while :; do
    if [[ ! -z $NETDEV ]]; then
      wifi-menu $NETDEV
fi; sleep 3
  if ! ping google.com -W 4 -c 4 &> /dev/null; then
    clear; echo -e "\n\n ${Magenta} |==> ${Red}Ağ bağlantısı kurulamadı !"
      while :; do
echo -ne "\n\n ${Magenta} |==> ${Yellow}Bağlantı tekrar denensin mi? ${White}[E/H] : ${End}"
read -p "" Answer
      case $Answer in
    [eE] ) clear; break ;;
  [hH] ) exit 0 ;;
* ) clear;
      echo -e "\n\n ${Magenta} |==> ${Red}Seçim geçerli değil !${End}";
    sleep 2; clear;;
  esac
done
    else
      sleep 2; break
    fi
  done
fi
}
FuncSetKeyboard() {
Answer=
while :; do
   clear
      echo -ne "\n\n ${Magenta} |==> ${Yellow}Klavye Seçiminizi Yapın.${White}\n
    1 )  Türkçe Q Klavye \n
    2 )  Türkçe F Klavye \n
    ${Blue}Varsayılan [ 1 ]${White} : ${End}"
read -p "" Answer
  case $Answer in
  1 ) export KYBRT=trq; export SELKEY='Q Klavye'; break ;;
  2 ) export KYBRT=trf; export SELKEY='F Klavye'; break ;;
  [qQ] ) export KYBRT=trq; export SELKEY='Q Klavye'; break ;;
  [fF] ) export KYBRT=trf; export SELKEY='F Klavye'; break ;;
          * ) clear; if [[ $Answer == "" ]]; then export KYBRT=trq;
export SELKEY='Q Klavye'; break; else
      echo -ne "\n\n ${Magenta} |==> ${Red} $Answer Geçerli Bir Klavye Tipi Değil ! ${End}"
    sleep 2; clear; fi;;
  esac
done

  if (localectl --no-pager list-keymaps |grep -q "$KYBRT") then
    localectl set-keymap "$KYBRT"
  else
    FuncSetKeyboard
  fi
}

FuncSetLocale() {
Answer=
while :; do
   clear
      echo -ne "\n\n ${Magenta} |==> ${Yellow}Sistem Dilini Seçin. ${White}\n
    1 )  Türkçe \n
    2 )  İngilizce \n
    3 )  Almanca \n
    4 )  Rusca \n
    ${Blue}Varsayılan [ 1 ]${White} : ${End}"
    read -p "" Answer
      case $Answer in
1 ) LOCL=tr_TR.UTF-8; export SETLNG='Türkçe'; break ;;
2 ) LOCL=en_US.UTF-8; export SETLNG='İngilizce'; break ;;
3 ) LOCL=de_DE.UTF-8; export SETLNG='Almanca'; break ;;
4 ) LOCL=ru_RU.UTF-8; export SETLNG='Rusca'; break ;;
        * ) clear; if [[ $Answer == "" ]]; then export LOCL=tr_TR.UTF-8;
export SETLNG='Türkçe'; break; else
      echo -e "\n ${Magenta} |==> ${Red} $Answer ! Listeden Geçerli Bir Dil Seçin ! ${End}"
    sleep 2; clear; fi;;
  esac
done

export XKBLayout="
Section \"InputClass\"
    Identifier      \"Keyboard Defaults\"
    MatchIsKeyboard \"yes\"
    Option          \"XkbModel\" \"pc105\"
    Option          \"XkbLayout\" \"${LOCL:0:2}\"
EndSection"

SECLOCL=$(grep "$LOCL" /etc/locale.gen|tail -1)
}
FuncSetKernel() {
Answer=
while :; do
   clear
     echo -ne "\n\n ${Magenta} |==> ${Yellow}Kurmak İstediğiniz Kernel Tipini Seçin. ${Blue}\n
   Açıklama: LTS kernel, sürüm olarak daha geriden gelen, üzerinde normal kernelde \n zaman zaman görülebilen bazı sorunların geliştiriciler tarafından çözüldüğü, daha kararlı bir sistem sunar.\n Diğer taraftan, çok yeni bazı donanımlar için gerekli modüller henüz eklenmemiş olabilir.\n Linux kernel ise, geliştiriciler tarafından yayınlanan kararlı en son sürümü takip eder ve Linux \n tarafından desteklenen en son modülleri üzerinde barındırır. Çok yeni bir sisteme sahip değilseniz LTS kernel önerilir. \n\n ${White}
    1 )  Linux-lts   \n
    2 )  Linux \n
    ${Blue}Varsayılan [ 1 ]${White} : ${End}"
    read -p "" Answer
      case $Answer in
1 ) export KERNEL=linux-lts; break ;;
2 ) export KERNEL=linux; break ;;
        * ) if [[ $Answer == "" ]]; then export KERNEL=linux-lts; break; else
      echo -e "\n\n ${Magenta} |==> ${Red} $Answer ! Listeden Geçerli Bir Seçim Yapmalısınız  ! ${End}"
    sleep 2; clear; fi;;
  esac
done
}
FuncSetHostName() {
VENAME="/sys/devices/virtual/dmi/id/sys_vendor"
  clear
    if [[ -e $VENAME ]]; then
EXAMP=$(cat $VENAME|xargs|grep '^[a-z]'|tr A-Z a-z|cut -d' ' -f1)
[[ -z $EXAMP ]] && EXAMP='owner'
    fi
while :; do
  echo -ne "\n\n ${Magenta} |==> ${Yellow} Bilgisayar Adını belirleyin. \
  Örneğin ${Blue} $EXAMP-pc  :  ${End}"
    read -p "" HostName
     if [[ ! -z $HostName ]]; then
      export HostName=$HostName
break
else
       echo -e "\n ${Magenta} |==> ${Red} Bilgisayar Adı Boş Bırakılamaz !"
     sleep 2; clear
  fi
done
}
FuncSetRootpass() {
clear
RootPassMessage='Yönetici (ROOT) Şifresini belirleyin. ( en az 4 Karakter olmalı. )'
MessageColor="$Yellow"
  while :; do
    password1= ; password2= ; pass=
echo -e "\n\n ${Magenta} |==> ${MessageColor} ${RootPassMessage} ${End}\n"
echo -ne "\n ${Magenta} |==>  ${Cyan}Şifrenizi girin  : "
  while IFS= read -p "$pass" -r -s -n 1 char; do
    if [[ $char == $'\0' ]]; then break ; fi
    pass='*'
    password1+="$char"
  done
    pass=
echo -ne "\n\n ${Magenta} |==>  ${Cyan}Girişi onaylayın : ${End}"
  while IFS= read -p "$pass" -r -s -n 1 char; do
    if [[ $char == $'\0' ]]; then break ; fi
    pass='*'
    password2+="$char"
  done
    clear
if [[ ${#password1} -gt 3 ]]; then
  if [[ $password1 == $password2  ]]; then
    export RootPass=$password1
    break
  else
    RootPassMessage='ROOT Şifre Girişi Uyumsuz ! Tekrar Deneyin ..'
    MessageColor="$Red"
  fi
else
    RootPassMessage='ROOT Şifre Karakter Sayısı Yetersiz ! Tekrar Deneyin ..'
    MessageColor="$Red"
fi
done
RootPV=${RootPass:0:1}
RootPassView=$(echo $RootPV${RootPass//[a-z 0-9]/-*}| sed -e 's/-//g' -e 's/*//')
}
FuncSetUsername() {
VENAME="/sys/devices/virtual/dmi/id/sys_vendor"
  clear
    if [[ -e $VENAME ]]; then
EXAMP=$(cat $VENAME|xargs|grep '^[a-z]'|tr A-Z a-z|cut -d' ' -f1)
[[ -z $EXAMP ]] && EXAMP='owner'
    fi
while :; do
  echo -ne "\n\n ${Magenta} |==> ${Yellow} Kullanıcı Adınızı belirleyin. \
  Örneğin ${White} $EXAMP  :  ${End}"
    read -p "" UserName
     if [[ ! -z $UserName ]]; then
      export UserName=$UserName
break
else
       echo -e "\n ${Magenta} |==> ${Red} Kullanıcı Adı Boş Bırakılamaz !"
     sleep 2; clear
  fi
done
}
FuncSetUserpass() {
clear
UserPassMessage="$UserName için Şifre belirleyin."
MessageColor="$Yellow"
  while :; do
    password1= ; password2= ; pass=
echo -e "\n\n ${Magenta} |==> ${MessageColor} ${UserPassMessage} ${End}\n"
echo -ne "\n ${Magenta} |==>  ${Cyan}Şifrenizi girin  : "
  while IFS= read -p "$pass" -r -s -n 1 char; do
    if [[ $char == $'\0' ]]; then break ; fi
    pass='*'
    password1+="$char"
done
    pass=
echo -ne "\n\n ${Magenta} |==>  ${Cyan}Girişi onaylayın : ${End}"
  while IFS= read -p "$pass" -r -s -n 1 char; do
    if [[ $char == $'\0' ]]; then break ; fi
    pass='*'
    password2+="$char"
done
    clear
if [[ ${#password1} -gt 1 ]]; then
  if [[ $password1 == $password2  ]]; then
    if [[ $password1 != $RootPass  ]]; then
    export UserPass=$password1
    break
    else
    UserPassMessage='Kullanıcı Şifresi Root Şifresiyle Aynı Olamaz ! Lütfen Farklı Bir Şifre Belirleyin ..'
    MessageColor="$Red"
    fi
  else
    UserPassMessage='Şifre Girişi Uyumsuz ! Tekrar Deneyin ..'
    MessageColor="$Red"
fi
else
    UserPassMessage='Şifre Karakter Sayısı Yetersiz ! Tekrar Deneyin ..'
    MessageColor="$Red"
fi
done
UserPV=${UserPass:0:1}
UserPassView=$(echo $UserPV${UserPass//[a-z 0-9]/-*}| sed -e 's/-//g' -e 's/*//')
}
FuncSetsControl() {
while :; do
  clear
    echo -e "\n\n ${Magenta} |==> ${Cyan} SİSTEM YAPILANDIRMA ŞEMASI \n
${Magenta} |==>  ${Red}Devam Etmeniz Durumunda Aşağıda ki Ayarlarla Kurulum Başlayacaktır ..\n
  ${Yellow} * KERNEL            = ${Blue} ${KERNEL} \n
  ${Yellow} * HOSTNAME          = ${Blue} ${HostName} \n
  ${Yellow} * ROOT ŞİFRESİ      = ${Blue} ${RootPassView} \n
  ${Yellow} * KULLANICI ADI     = ${Blue} ${UserName} \n
  ${Yellow} * KULLANICI ŞİFRESİ = ${Blue} ${UserPassView} \n
  ${Yellow} * SİSTEM DİLİ       = ${Blue} ${SETLNG} ( ${LOCL} )\n
  ${Yellow} * KLAVYE TİPİ       = ${Blue} ${SELKEY} ( ${KYBRT} )\n
  ${Yellow} * MASAÜSTÜ          = ${Blue} \n
  ${Yellow} * DİSK BÖLÜMLERİ    = ${Blue} $DiskPartion \n"

  echo -ne "\n ${White}  1 ) Ayarları Uygula    2 ) Yapılandırma Seçeneklerine Geri Dön \n\n
    ${Blue}Varsayılan [ 1 ]${White} : ${End}"
read -p "" Answer
case $Answer in
1 ) clear; FuncCreateSets;;
2 ) export RETMAIN=return
    FuncMainMenu;;
* ) if [[ $Answer == "" ]]; then FuncCreateSets; break; else
      echo -e "\n ${Magenta} |==> ${Red}Seçim geçerli değil !${End}";
sleep 2; clear; fi;;
    esac
done
}
FuncCreateSets() {
FuncEditKeyboard(){
echo "KEYMAP=$KYBRT" > /mnt/etc/vconsole.conf
}
FuncEditLocale() {
if [[ -z $SECLOCL ]]; then
  sed -i "s/#${SECLOCL}/${SECLOCL}/" /mnt/etc/locale.gen
  echo "LANG=\"${SECLOCL}\"" > /mnt/etc/locale.conf
  arch_chroot "locale-gen"
fi
}
FuncSetHostName() {
echo "$HostName" > /mnt/etc/hostname
}
FuncEditRootpass() {
echo "root:$RootPass" | chpasswd
}
FuncEditUsername() {
useradd -m $UserName -g users -G \
"adm,audio,log,network,rfkill,scanner,storage,optical,power,wheel" \
-s /bin/bash $UserName
}
FuncWaitForNow() {
    FuncEditKeyboard
    FuncEditLocale
    FuncEditHostName
    FuncEditRootpass
    FuncEditUsername
}
clear
echo -e "\n\n ${Red} |==> Bu Bölüm Şuan Kapalı ;-( \n\n"
}
FuncMainMenu() {
clear
    if [[ $SYSTART != systart ]]; then
echo -e "\n\n ${Magenta} |==> ${Cyan} KURULUM BAŞLIYOR.."
sleep 2
echo -e "\n ${Magenta} |==> ${Yellow} Gerekli Kontroller Yapılıyor.. LÜTFEN BEKLEYİN !${End}"
FuncNetworkCheck
SYSTART=systart
    fi
    if [[ -z $RETMAIN ]]; then
for func in \
"FuncSetKeyboard" \
"FuncSetLocale" \
"FuncSetKernel" \
"FuncSetHostName" \
"FuncSetRootpass" \
"FuncSetUsername" \
"FuncSetUserpass" \
"FuncSetsControl"
do $func ; done
    else
while :; do
echo -ne "\n\n ${Magenta} |==> ${Cyan} Hangi Seçimi Değiştirmek İstiyorsunuz ? ${White}\n
1 ) Klavye Düzeni \n
2 ) Sistem Dili \n
3 ) Kullanıcı Adı \n
4 ) Kullanıcı Şifresi \n
5 ) Root Şifresi \n
6 ) Disk Yapılandırması \n
7 ) Kernel Tipi \n
8 ) Masaüstü Seçimi \n
9 ) Seçilen Ayarlarla Devam Et \n
10 ) Kurulumu iptal Et \n
? : ${End}"
    read -p "" Answer
    case $Answer in
1 ) FuncSetKeyboard; break; FuncSetsControl;;
2 ) FuncSetLocale; break; FuncSetsControl;;
3 ) FuncSetUsername; break; FuncSetsControl;;
4 ) FuncSetUserpass; break; FuncSetsControl;;
5 ) FuncSetRootpass; break; FuncSetsControl;;
6 ) FuncSetHDDisk; break; FuncSetsControl;;
7 ) FuncSetKernel; break; FuncSetsControl;;
8 ) FuncSetDesktop; break; FuncSetsControl;;
9 ) FuncCreateSets; break; FuncSetsControl;;
10 ) exit 0;;
* ) clear;
    echo -e "\n\n ${Magenta} |==> ${Red}Seçim geçerli değil !${End}";
sleep 2; clear;;
      esac
   done
fi
}
#FuncSetsControl
FuncMainMenu
#FuncSetKeyboard
#FuncNetworkCheck
#FuncSetLocale


Ubuntu ile bağıntılı olmadığı için, kod örneği olması amcıyla konuyu buraya açtım. Gerekli görünürse, ilgili bölüme taşınabilir. Teşekkürler.

ata1

Arayüz kullanırsan birazda yeni kullanıcılar faydalanır. Bence bunu yapmalısın ki üst seviye olanlar bir şekilde zaten kuruyor.
arch denemek isteyen heveslilere de bir faydası olur.

mhmtkrktr

@ata1; yorumun için teşekkür ederim. Betiği çalıştırıp denedin mi?
( Bu arada not düşeyim, paylaştığım içeriğin çalışması için sistemin Arch olması veya iso üzerinde  çalıştırılması gerekmiyor. Paylaştığım içerik, herhangi bir yapılandırma yapmadan, sadece seçenek menüsünü örneklemek için oluşturulmuş bir betik. Bash kabuğuna sahip herhangi bir sistem üzerinde çalıştırılabilir. Normalde tty konsolunda çalışacağı için, kullanılan terminalin tam ekran yapılarak denenmesini öneririm )

Öncelikle belirteyim burada ki asıl amaç, deneyimsiz kullanıcıların Arch kurmasını sağlamak değil. Bunun için Ubuntu, Mint, Manjaro, Archman gibi dağıtımlar var zaten. Aslında tam tersi olarak düşünülebilir. Bunun ayrıcaklıklı olacağını düşündüğüm tarafı, kullanıcının kendine özel iso hazırlamaya çalışmaktansa, tamamen kendine has özelliklerle, bir nevi kendi dağıtımını kurmasına olanak sağlaması.
Yoksa, "kullanıcı adı gir" sorusunun karşılığını anlayamayacak kullanıcının kusura bakmasın ama bunu kullanmaması benim işime gelir.
Hazır konuyu seçeneklere getirmişken, seçim alanında en temel 8 bölüm var. Donanıma ve kurulum şekline göre burada olmayan bir kaç soru daha çıkabilir. Örneğin Nvidia ekran kartı varsa, free/nonfree gibi sürücü seçeneği çıkacak. Veya UEFI kurulumlarda tek işletim sistemi olarak kuruluyorsa grub/syslinux şeklinde bootloader seçeneği çıkacak. Bunun gibi, extra seçim istemeyen sistemler için bunlarda yok.
Tercihe göre yapılandırma işlemini zaten arkaplanda kendisi yapacak. Örneğin, paket listesinde plymouth varsa, bunu sadece kurup geçmeyecek. İlave olarak önyükleyici, giriş yöneticisi, çekirdek parametreleri gibi düzenlemeleride yapıp, çalışmaya hazır hale getirecek. Yada yapılandırma dosyasına "yazıcı : Hp marka" diye girdi oluşturmuşsan, bu yazıcıya ait paketler kurulacak ve varsa gerekli düzenleme yapılacak.
Bunların yapılması çok zor değil. Şuan kendim benzer bir yapıyı kullanıyorum.

Asıl konuya dönersek, belirleyici olmamakla birlikte kendi görüşüm; günlük kullanımda terminal üzerinden işlem yapmak pek tercih ettiğim bir durum değil. Genelde, mümkün olduğunca gui ağırlıklı bir kullanıcıyım. Fakat bu işlem için terminal yapısı daha kullanışlı gibi geldi bana. Tabii henüz denemedim ama, imkanı varsa stty ile sabit bir archey veya conky koyabilirsem ortam biraz daha şenlenir.

Grafik arayüz seçeneğinide tamamen kaldırmış değilim. Bunun içinde, tek bir pencerede, form şeklinde seçeneklerin sunulacağı ekran fena olmaz. Kurulum aşaması da, Windows 10 da olduğu gibi, değişen renkler şeklinde devam edebilir. Bakalım konu burada. İstek olursa o doğrultuda çalışma yaparım.


UNC

Çok iyi düşünmüşsün eger ragbet görür bitirirsen scripti kullanmak isterim
Denedim şimdi grafik arayüze gerek aşırı iyi  8)

ata1

betiğ denemedim şayet kurarsam bende sorun olacak ssd ye kurarken bir hata yaptım otomatık bölümle dedim ve gpt olarak şekillenip grubu lmv2 ye kurdu
kısac gözüm kesmediğinden  diğer ssd im kardeşimde oluşundan yedek alamdım. maaalesef bunda grub işlerinin nasıl olduğu konusunda bilgimde yok.
diğer ssd elime geldiğinde buradan yedeklerimi taşıyıp normal uefi kurulum yapacağım o zaman inan ki büyük bir zevk ile deneyeceğim.

mhmtkrktr

@UNC, teşekkürler. Şuan üzerinde çalışma yapmam mümkün görünmüyor. Daha sakin olduğum kış aylarını bekleyecek. Şuan örnek paylaşma sebebim, söylediğim üzere fikir almak.
Daha müsait olduğum bir zamanda örnek bir yapılandırma dosyası paylaşacağım. Donanım ve sistem yapılandırma üzerine yeterince seçeneği ben ekleyebilirim fakat kullanmak isteyen, özellikle kendi tercihi olan masaüstüne göre içerik hazırlayıp paylaşması gerekiyor. Aksi durumda masaüstü konusunda sadece, benim hakim olduğum Gnome masaüstünü yapılandırabilen bir içerik olarak sınırlı kalacaktır.

lubuntu


mhmtkrktr