[Pardus-kullanicilari] Ağdan NFS Üzerinden Boot Eden Pardus

Emre Erenoglu erenoglu at gmail.com
3 Mar 2011 Per 20:58:11 EET


2011/3/3 Erkan Altan <ealt78 at gmail.com>

> Merhaba,
>
>
>>>>> https://help.ubuntu.com/community/DisklessUbuntuHowto adresinde ubuntu
>>>>> için bir bilgisayarında disksiz olarak ağdan nasıl boot ettirilebileceği
>>>>> anlatılmış.
>>>>>
>>>>> Benzer bir şeyi çalıştığım yerde pardus kullandırmak için yapmak
>>>>> istiyorum. Ama çok tecrübeli değilim. Kendi başıma yapacağım için uzunca bir
>>>>> süre harcamam ve gereksiz sorunlarla boğuşmam olası.
>>>>>
>>>>> O yüzden öncelikle size sormak istedim. Aranızda Pardus'u bu şekilde
>>>>> kullanmış olan ya da pardusun bu şekilde ağdan NFS üzerinden boot ederek
>>>>> kullanılıp kullanılamayacağına dair yorum getirebilecek olan var mı?
>>>>>
>>>>> Yardım edip yol gösterebilirseniz çok sevinirim.
>>>>>
>>>>
>>>> Bildigim kadari ile helva'yi yapmak icin gerekli tum malzemeler
>>>> Pardus'ta var. Oncelikle bilgisayarinizin network'ten boot edebiliyor olmasi
>>>> gerekli (PXE ozelligi). Ag'da bir yerlerde bir DHCP sunucusu ve TFTP
>>>> sunucusu olmasi gerekli ve bunlarin ayarlari yapilmis olmali. Bu sunucu da
>>>> Pardus olabilir, dhcp (dhcp)ve tftp sunuculari (in.tftpd) Pardus'ta
>>>> bulunmakta.
>>>>
>>>
>>> Bu aşamaları tamamladım.
>>>
>>>
>>>>  Bu sunucu ustunde bir nfs paylasimi yaratmalisiniz. Bu paylasimin
>>>> icine yeni kurulmus bir pardus kok dosya sistemini oldugu gibi
>>>> kopyalamalisiniz.
>>>>
>>>
>>> yeni kurulum pardus kokunu iceren nfs paylasimini (/nfsroot) da
>>> hazırlayıp nfs paylaşımını tamamladım. hatta dosyaları paylaşımı nfs
>>> üzerinden mount edip öyle kopyaladım. böylece mount ettiğini de test etmiş
>>> oldum. aslında ğım gigabit ama yine kopyalama saatler sürdü ve bana çok
>>> yavaş geldi. umarım çalıştıktan sonra bu kadar yavaş olmaz.
>>>
>>
>> Daha hizli olmasi icin bir sebep goremiyorum dogrusu. Bu hizda
>> calisacaktir. Su anda /nfsroot icinde yeni bir Pardus kurulumunun tum
>> dizinleri bulunmakta mi? (/nfsroot/etc /nfsroot/var /nfsroot/tmp
>> /nfsroot/usr /nfsroot/lib vs. gibi)
>>
>>
>>>
>>> tftp'den boot edecek olan cekirdek ile ilgili sorun yok ama initrd'yi
>>> oluşturmak için nasıl bir işlem uygulamam gerektiğini tam bilmedigimden
>>> ubuntu tarifinden deneme yanilma yaptim. yukarıda verdiğim adreste yer alan
>>> dosyalara pardusta mevcut olmadığından /etc/initramfs.conf.example dosyasını
>>> baz alıp /etc/initramfs.conf dosyasında aşağıdaki değişikliği yaptım?
>>>
>>
>> Yeniden bir initramfs olusturmak gerekip gerekmedigine emin degilim
>> dogrusu. Ama bu bilgisayarin DHCP'den alacagi IP'yi statik hale getirirseniz
>> iyi olur, ayrica ust adimda yaptiginiz sifir Pardus kurulumuna bence IP'yi
>> statik olarak atayin ve DHCP'nin verecegi ile de ayni olsun.  Boylece boot
>> esnasinda dhcp'ye tekrar sormaya gerek kalmaz.
>>
>
> Mevcut initramfs'i kullanmam yeterli olacak sanırım.
>
> Mevcut initramfs ile sistemi initramfs içinde düzgün boot etmeyi başardım.
> Ya da en azından çalışan bir root konsoluna ulaştım. Burada baktığımda
> ifconfig komutu herhangi bir sonuç döndürmüyordu. ifconfig eth0 10.10.10.10
> up gibi komutlar da çalışmıyor dolayısıyla ağ bağlantısını aktif edemedim.
> Sanki işletim sistemi ağ kartını hiç tanımamış gibi geliyor bana. Ama emin
> değilim.
>

Calisan root konsolu sistemin root'u muydu yoksa initramfs'in icindeki
kurtarma konsolu mu? Sanirim ikincisidir.

Normal bir pardus calistirdiginizda, lsmod ile hangi moduller yuklenmis
bakip, ordan birisinin ethernet kartinizla alakali olup olmadigina
bakabilrsiniz. Aklima ilk gelen bu. Eger alakali ve /lib/modules altinda bir
.ko dosyasi olarak varsa, o zaman bu modul kernel'in icine gomulu degil,
ayri bir modul olarak yukleniyor demektir. Bu durumda bu modul bir sekilde
initramfs'in icine eklenmesi gerekir.


> Dediğiniz gibi orjinal initramfs ile sorunlar azalmış gibi gözüküyor.
> Normalde initramfs ile boot etmiş konsolda ifconfig komutunun çıktı vermesi
> ya da statik ip atayabilmesi gerekmez mi? Bunu yapabilseydim nfs üzerinden
> mount edip edemediğimi deneyecektim. Bu initramfs açılırken aldığı ipyi
> dhcp'den aldığı ip ile nasıl aynı yapabilirim?
>

Modul sorunu olabilir yukarda yazdigim gibi, sonucta moduller ile ethenet
kartlari ortaya cikiyor, sonra bir baska sistem (udev olabilir veya agla
ilgili baska bir altsistem olabilir) bu cihazi eth0 olarak tekrar
adlandiriyor.

ifconfig degil de  ifconfig  -a  komutunun ciktisina bir bakin.

Eger biraz betik okuyabiliyorsaniz, initramfs'in icinde mudur=thin diyince
yapilanlari  /lib/initramfs/init dosyasindan okuyabilirsiniz. bu init
dosyasi initramfs icinde calistirilan ve kok dosya sistemini sisteme
baglayip boot islemini normal kok dosya sistemine aktaran calistirma betigi.

Biraz inceleyelim.

Betigin icindeki asagidaki fonksiyon dhcp'den ip adresi aliyor:
  run_dhcpc() {
      udhcpc -C -i eth0 -s /etc/udhcpc.script
  }

Su fonksiyon da pci cihazlarin modullerini yukluyor:

probe_pci_devices() {
    info "Probing PCI devices"
    local MODULES=""
    for module in /sys/bus/pci/devices/*/modalias; do
        [ -f $module ] || continue
        MODULES="$MODULES $(cat $module)"
    done
    modprobe -bqa $MODULES
}

O dustugunuz konsolda en azindan /sys/bus/pci/devices icine bakip orda
ethernet kartinizin icindeki /modalias neymis bakabilirsiniz belki.

Asagidaki fonksiyon da eger mudur=thin parametresi verildiyse o zaman
calisip nfs paylasimi mount ediyor gibi gorunuyor:

mount_nfs() {
    FS_LOCATION='mnt/thin'

    # Change directory to /newroot
    cd /newroot

    # FIXME: busybox mount does not load automatically
    modprobe -q nfs

    # mount nfs
    if [ -z "/etc/udhcpc.info" ]
    then
        fall2sh "/etc/udhcpc.info not found"
    fi

    . /etc/udhcpc.info

    if [ -z "${ROOTPATH}" ]
    then
        fall2sh "NFS rootpath not found"
    fi

Burasi onemli gibi cunku init dosyasi icinde ROOTPATH'a degisken atayan
hicbir yer goremedim. sanirim mudur=thin dedikten sonra bir de bunu eklemek
lazim yani ROOTPATH=nfs_sunucu_ve_paylasim_adresi   gibi

    echo "Mounting NFS from $ROOTPATH"
    mount -o tcp,nolock,ro $ROOTPATH /newroot/mnt/thin

ROOTPATH varsa bu sistem initramfs'de /newroot/mnt/thin olarak baglaniyor.

    if [ "$?" != '0' ]
    then
        fall2sh "Could not nfs root"
    fi

    # Create necessary links
    for x in ${ROOT_LINKS}; do
        ln -s "${FS_LOCATION}/${x}" "${x}"
    done

Burada bir takim linkler yaratilmis, init'in basinda ROOT_LINKS'e atama
yapilmis:   (ROOT_LINKS="bin sbin lib boot usr opt"). Bu sayede /newroot
icinde linkler yaratiliyor mount edilmis yere dogru. (Ancak neden dogrudan
/newroot'a mount edilip boot islemi devam ettirilmemis anlayamadim. Bu islem
acaba LTSP'deki thin client olaylarinda farkli bir sekilde mi yapiliyor,
bilemiyorum. Gelistiricilere sormamiz gerekebilir.


    # We need this for x86_64
    ln -s "${FS_LOCATION}/lib" "lib64"

    chmod 1777 tmp
    (cd /newroot/${FS_LOCATION}; cp -a ${ROOT_TREES} /newroot)

Buradaki cp -a komutu neden var ne icin yapilmis tam anlayamadim dogrusu.
Bana gore bu adimda /newroot/mnt/thin altinda gercek uzak dosya sistemi var,
/newroot altina  bin sbin lib boot usr opt dizinleri link olarak baglanmis
durumda. Bu cp -a ile ayrica etc root home var dizinlerini kopyaliyoruz ve o
sekilde calistirmaya basliyoruz. Bence bu kopyalama yerine linkleme veya
dogrudan nfs sistemini /newroot'a mount etmek yeterli olmaliydi. neden bu
kadar takla atilmis, link falan yapilmis gelistiricilere sormamiz
gerekebilir, thin client ortami icin yapilmis olabilir dogrusu.


    # Needed for ltspfs mechanism
    echo "$IP    $HOSTNAME" >> /newroot/etc/hosts
}


Bir deneyin bakalim yukarda yazdiklarima gore, bakalim nasil oluyor :)

-- 
Emre
-------------- sonraki bölüm --------------
Bir HTML eklentisi temizlendi...
URL: <http://liste.pardus.org.tr/pardus-kullanicilari/attachments/20110303/c5468744/attachment.htm>


Pardus-kullanicilari mesaj listesiyle ilgili daha fazla bilgi