Iso yapımı

Bu dokümanda debian sid kullanarak özelleşmiş bir live iso yapımı anlatılacaktır.

Debian sid yerine stable kullanmak isterseniz yapmanız gereken dokümanda sid yerine stable yazmaktır.

Not: Bu dokümanla ilgili soru ve önerileriniz için : https://t.me/iso_calismalari

Not: Biraz mizah içerir. Şimdiden ALLAH sabır versin :D

Terimler ve Anlamları
Terim Anlamı
chroot Oluşturulacak live isonun taslağıdır. içerisine chroot sid-chroot komutu ile içerisine girebiliriz. çıkmak için ise exit komutu kullanılmalıdır.
squashfs Sıkıştırılmış haldeki kök dizin dosyasıdır. Oluşturulması donanıma bağlı olarak uzun sürmektedir. Debian tabanlı dağıtımlarda gzip formatında sıkıştırma önerilir.
iso Kurulum medyası dosyasıdır. Bu dosya son üründür ve bunu yayınlayabilirsiniz.
live Kurulum yapmadan çalışan sisteme live adı verilir.
17g Dağıtımdan bağımsız canlı sistem kurulum aracıdır.

Hazırlık

  1. Gerekli paketleri kuralım.
 apt-get install debootstrap xorriso squashfs-tools mtools grub-pc-bin grub-efi-ia32-bin grub-efi
  1. Kurulum aracını derleyelim. (İsteğe bağlı)

Öncelikle kurulum aracını deb paketi yapmak için gerekli olan paketleri kuralım:

 apt-get install devscripts

Daha sonra kaynak kodu bir dizine çekip deb paketi haline getirelim.

 git clone https://gitlab.com/ggggggggggggggggg/17g
 cd 17g
 mk-build-deps --install
 debuild -us -uc -b

Bir üst dizinde kurulum aracına ait deb paketi oluşacakdır.

Chroot oluşturulması

  1. Debootstrap ile debian chroot ortamı oluşturalım.
 mkdir sid-chroot
 debootstrap --arch=amd64 --no-merged-usr sid sid-chroot https://deb.debian.org/debian

Eğer debian yerine devuan kullanmak istiyorsanız depo adresi olarak https://pkgmaster.devuan.org/merged koymalısınız.

Eğer "Unpacking the base system..." sırasında sorun yaşıyorsanız chroot dizininin sahibini root olarak değiştirip tekrar denemenizi öneriririz.

 chown root sid-chroot
  1. Eğer apt ile ilgili sandbox hatası alırsanız aşağıdaki komutu kullanın.
 echo "APT::Sandbox::User root;" > sid-chroot/etc/apt/apt.conf.d/99sandboxroot

Eğer sıfırdan debootstrap kullanarak chroot oluşturmak yerine mevcut bir debian tabanlı isoyu açmak istiyorsak aşağıdaki adımları uygulayın.

  1. Iso dosyamızı bir dizine bağlayalım.
 mount -o loop debian-live-orijinal.iso /mnt
  1. Iso içerisindeki live/filesystem.squashfs dosyasını açalım. ve adını sid-chroot olarak değiştirelim.
 unsquashfs /mnt/live/filesystem.squashfs
 mv squashfs-root sid-chroot
  1. Iso dosyamızın bağını sökelim.
 umount -f /mnt

Chroot içine girmek için ön hazırlık

  1. dev sys proc run bind bağlayalım. Bu işlem her chroot ile sid-chroot içerisine girileceğinde yapılmalıdır. sid-chroot içerisinden çıkıldığında ise bind bağının sökülmesi gerekmektedir.
 for i in dev dev/pts proc sys; do mount -o bind /$i sid-chroot/$i; done

Gerekli paketlerin kurulması

Mevcut bir iso dosyasını düzenleyenler Bu aşamayı atlayabilirler.

  1. Chroot komutu ile oluşan chroot içerisine girelim. ve ardından sources.list dosyasını düzenleyelim. Bu noktadan sonra chroot içerisinden devam edeceğiz.
 chroot sid-chroot /bin/bash
 echo 'deb https://deb.debian.org/debian sid main contrib non-free' > /etc/apt/sources.list
 apt-get update
  1. Kernel kuralım.
 apt-get install linux-headers-amd64 linux-image-amd64

Kernel olarak depodaki kernel yerine liquorix kernelini de kurabilirsiniz. (isteğe bağlı)

 bash <(https://liquorix.net/add-liquorix-repo.sh)
 apt-get install linux-image-liquorix-amd64 linux-headers-liquorix-amd64
  1. Grub kuralım.
 apt-get install grub-pc-bin grub-efi-ia32-bin grub-efi
  1. Live açılış için gereken paketleri kuralım.
 apt-get install live-config live-boot
  1. Debian tabanlı sistemlerde önerilen paketler varsayılan olarak paket kurulumu esnasında kurulur. Bu durum gereksiz paketlerin de gelmesine sebep olabilmektedir. Önerilen paketleri kapatmak için aşağıdaki yolu uygulayabilirsiniz. (İsteğe bağlı)
# /etc/apt/apt.conf.d/01norecommend adında bir dosya açın ve içine şunu yazın
APT::Install-Recommends "0";
APT::Install-Suggests "0";
  1. Eğer dil dosyaları, man dosyaları gibi şeylere ihtiyacınız yoksa ve bunların gereksiz olduğunu düşünüyorsanız Bunları paket kurduktan sonra otomatik silen ayarı aşağıdaki gibi yapabilirsiniz. (Tavsiye edilmez. / İsteğe bağlı.)
# /etc/apt/apt.conf.d/02antibloat adında dosya açın ve içine şunu yazın
DPkg::Post-Invoke {"rm -rf /usr/share/locale || true";};
DPkg::Post-Invoke {"rm -rf /usr/share/man || true";};
DPkg::Post-Invoke {"rm -rf /usr/share/help || true";};
DPkg::Post-Invoke {"rm -rf /usr/share/doc || true";};
DPkg::Post-Invoke {"rm -rf /usr/share/info || true";};

Özelleştirme

  1. Dağıtım adını değiştirmek için /etc/os-release ve /etc/lsb-release dosyalarını düzenleyebilirsiniz.
PRETTY_NAME="Custom debian (sid)"
NAME="CUSTOM"
VERSION_ID="1"
VERSION="1 (sid)"
ID=customdebian
ID_LIKE=debian
HOME_URL="https://www.example.com/"
SUPPORT_URL="https://forums.example.com/"
BUG_REPORT_URL="https://example.com/issues/"
PRIVACY_POLICY_URL="https://www.example.com/privacy/"
VERSION_CODENAME=custom
DEBIAN_CODENAME=sid
DISTRIB_ID=CustomDebian
DISTRIB_RELEASE=1
DISTRIB_CODENAME=sid
DISTRIB_DESCRIPTION="Custom Debian sid"
  1. Masaüstü ortamı kurabiliriz.
 apt-get install xorg xinit
 apt-get install lightdm # giriş ekranı olarak lightdm yerine istediğinizi kurabilirsiniz.
Masaüstü kurulumu
Masaüstü Komut
xfce apt-get install xfce4
lxde apt-get install lxde
cinnamon apt-get install cinnamon
plasma apt-get install kde-standard
gnome apt-get install gnome-core
mate apt-get install mate-desktop-environment-core
budgie apt-get install budgie-desktop

Not: xfce, lxde, mate gibi bazı masaüstülerindeki ağ bağlantısı aracı için network-manager-gnome paketini kurmalısınız.

Bu aşamada kurulu gelmesini istediğiniz başka paketler varsa onları da kurabilirsiniz.

  1. Sürücüleri ekleyebiliz.
 apt-get install bluez-firmware firmware-amd-graphics firmware-atheros \
      firmware-b43-installer firmware-b43legacy-installer firmware-bnx2 \
      firmware-bnx2x firmware-brcm80211 firmware-cavium firmware-intel-sound \
      firmware-intelwimax firmware-ipw2x00 firmware-ivtv firmware-iwlwifi \
      firmware-libertas firmware-linux firmware-linux-free firmware-linux-nonfree \
      firmware-misc-nonfree firmware-myricom firmware-netxen firmware-qlogic \
      firmware-ralink firmware-realtek firmware-samsung firmware-siano \
      firmware-ti-connectivity firmware-zd1211 zd1211-firmware
  1. Varsayılan kullanıcı ayarları yapmak için kullanıcı ev dizinine gelmesini istediğiniz dosyaları /etc/skel içerisine uygun hiyerarşiye göre dizmelisiniz.

Burada dikkat etmezin gerekek nokta ev dizinindeki bütün dosyaları olduğu gibi kopyalarsanız açık olan kullanıcı hesabı bilgileri de dahil edileceği için tehlikeli olabilir. Bu dosyaları tek tek kontrol ederek koymanızı şiddetle tavsiye ederim.

Yapmış olduğunuz duvar kağıdı simge teması gibi özelleştirmeler iso içerisinde de aynı konumda bulunmalıdır. Bu sebeple sadece iso içerisindeki görselleri ve temaları kullanmalısınız.

  1. Daha önceden paketlemiş olduğumuz kurulum aracını kurabiliriz. Oluşturduğumuz deb dosyasını chroot içindeki /tmp dizinine kopyalayalım.
 dpkg -i /tmp/17g-installer.deb # dosya adını uygun şekilde yazınız.
 apt-get install -f # eksik bağımlılıkları tamamlaması için.
  1. Network manager gvfs-backends gibi bazı paketlere ihtiyacımız olabilir. Bunları kuralbilirsiniz.
 apt-get install network-manager-gnome gvfs-backends pavucontrol chromium vlc

Paketleme öncesi

  1. Öncelikle chroot içerisinden çıkalım. İşlemin bundan sonraki aşaması chrootun dışarısında gerçekleşecektir.
  2. Chroot içerisindeki bind bağlarını kaldıralım.
 umount -lf -R sid-chroot/* 2>/dev/null

Temizlik

Squashfs yapmadan önce chroot içerisinde temizlik yapmak gerekebilir. Zorunlu değildir fakat yaptığınız zaman squashfs ve iso boyutunu küçültmektedir.

 chroot sid-chroot apt-get autoremove # boşta kalan paketleri temizler
 chroot sid-chroot apt-get clean # apt önbelleğini temizler
 rm -f sid-chroot/root/.bash_history # iso yaparken oluşturduğunuz historyleri temizler
 rm -rf sid-chroot/var/lib/apt/lists/* # index dosyalarını temizler
 find sid-chroot/var/log/ -type f | xargs rm -f # logları siler

Paketleme aşaması

  1. Iso taslağı dizini açalım ve squashfs imajı alalım. aldığımız imajı daha sonra iso taslağı içinde live adında bir dizin açarak içine atalım.
Not: -comp parametresinden sonra xz veya gzip kullanabiliriz. xz kullanırsak daha yüksek oranda sıkıştırır fakat kurulum daha uzun sürer. gzip kullanırsak iso boyutu daha büyük olur fakat daha hızlı kurar. Debianda varsayılan sıkıştırma formatı xz olmasına ramen ben sizlere gzip kullanmanızı öneririm.

Not: Ubuntu tabanında live dizini yerine casper dizini blunmaktadır.

 mkdir isowork
 mksquashfs sid-chroot filesystem.squashfs -comp gzip -wildcards
 mkdir -p isowork/live
 mv filesystem.squashfs isowork/live/filesystem.squashfs
  1. Ardından vmlinuz ve initrd dosyalarını isowork/live içerisine atalım.
 ls sid-chroot/boot/ # dosyalarımızın adını öğrenmek için
    config-5.7.0-1-amd64  grub  initrd.img-5.7.0-1-amd64  System.map-5.7.0-1-amd64  vmlinuz-5.7.0-1-amd64
 cp -pf sid-chroot/boot/initrd.img-5.7.0-1-amd64 isowork/live/initrd.img
 cp -pf sid-chroot/boot/vmlinuz-5.7.0-1-amd64 isowork/live/vmlinuz
  1. grub.cfg dosyası oluşturalım.
 mkdir -p isowork/boot/grub/
 echo 'insmod all_video' > isowork/boot/grub/grub.cfg
 echo 'menuentry "Start Debian 64-bit" --class debian {' >> isowork/boot/grub/grub.cfg
 echo '    linux /live/vmlinuz boot=live live-config live-media-path=/live --' >> isowork/boot/grub/grub.cfg
 echo '    initrd /live/initrd.img' >> isowork/boot/grub/grub.cfg
 echo '}' >> isowork/boot/grub/grub.cfg

Burada linux ile başlayan satırın sonuna ekleyeceğimiz ek ayarlar ile sistemin dilini ve klavye düzeni gibi şeyleri ayarlayabilirsiniz. Aşağıda Bu parametreler ve anlamları verilmiştir.

Parametre ve anlamları
Örnek parametre Anlamı Örnek parametre Anlamı
timezone=Europe/Istanbul Zaman dilimi ayarı locales=tr_TR.UTF-8 Dil ayarı
keyboard-layouts=tr Klavye ayarı username=debian Kullanıcı adı ayarı
hostname=live Makina adı ayarı user-fullname=DebianLive Kullanıcı gözüken adı ayarı
quiet Açılışta yazı basmaz splash Varsa açılış animasyonunu gösterir.
keyboard-variants=f Klavye varyantı ayarı nomodeset Uyumluluk modu ayarı
  1. Herşey tamamlandıktan sonra dizin yapısı şu şekilde olmalıdır. Ayrıca iso isowork dizini içerisine istediğiniz dosyaları ekleyebilirsiniz.
 tree isowork
    isowork/
    ├── boot
       └── grub
           └── grub.cfg
    └── live
        ├── filesystem.squashfs
        ├── initrd.img
        └── vmlinuz
  1. Iso dosyası üretelim.
 grub-mkrescue isowork -o debian-live.iso

Iso üzerinde düzenleme yapma

Eğer paketlediğimiz isoda bir şeyleri eksik yaptığımızı düşünüyorsak veya birkaç ekleme daha yapmak istiyorsak Sırası ile şunları yapmalıyız.

  1. sid-chroot dizinine tekrar bind bağı atalım.
 for i in dev dev/pts proc sys; do mount -o bind /$i sid-chroot/$i; done
  1. sid-chroot içine tekrar girelim.
 chroot sid-chroot /bin/bash
  1. Düzenlemek istediğimiz yapalım. Ve ardından chroot içinden çıkalım.
  2. Chroot içerisindeki bind bağlarını kaldıralım.
 umount -lf -R sid-chroot/* 2>/dev/null
  1. Tekrar squashfs dosyası üretelim ve güncelleyelim.
 mksquashfs sid-chroot filesystem.squashfs -comp gzip -wildcards
 rm -f isowork/live/filesystem.squashfs
 mv filesystem.squashfs isowork/live/filesystem.squashfs
  1. Eğer kernelle ilgili bir değişiklik yaptıysak isowork içerisindeki live dizininde bulunan dosyaları güncelleyelim.
 rm -f isowork/live/initrd.img isowork/live/vmlinuz
 cp -pf sid-chroot/boot/initrd.img-5.7.0-1-amd64 isowork/live/initrd.img
 cp -pf sid-chroot/boot/vmlinuz-5.7.0-1-amd64 isowork/live/vmlinuz
  1. Yeni iso dosyasını üretelim.
 mv debian-live.iso debian-live-eski.iso
 grub-mkrescue isowork -o debian-live.iso