Bu bölümde Gemstone SDK’sında bulunan bütün araçların detaylı kullanımına ve neden tercih edildiğine değinilecektir.

Bölüm bitiminde aşağıdaki konularda tecrübe edineceksiniz.

  • SDK Projesinin işlevi ve klasör yapısı
  • Devbox, Distrobox, Taskfile, VCS Tool, Debos, Debootstrap gibi araçların kullanımı.

1. Önsöz

Bilindiği gibi Linux; açık kaynak kodlu bir işletim sistemi çekirdeğidir (Kernel). İşletim sistemi ise Kernel, Shell, masaüstü uygulamaları, pencere yöneticisi, metin editörleri, tarayıcı, sistem araçları ve sistem servisleri gibi onlarca farklı uygulamayı barındıran bir bütündür. Windows gibi işletim sistemlerinin aksine tek bir üretici tarafından dağıtılmayıp farklı kuruluşlarca derlenerek toparlanıp farklı isimlerle özgürce yayınlanabilmektedir. Örneğin: Ubuntu, Debian, Pardus, Fedora, openSUSE gibi işletim sistemlerinin hepsi Linux kerneli içermekle birlikte farklı GNU araçları, açık kaynak yazılım veya versiyonlar barındırmaktadır.

Linux içeren bu işletim sistemleri çoğunlukla Distro (Dağıtım) olarak isimlendirilmektedir. İçerisinde bulunan açık kaynak kodlu yazılımların çoğununluğunun ise GNU (www.gnu.org) çalışmaları olması münasebetiyle GNU/Linux olarak anılması açık kaynak kod topluluğu tarafından tercih edilmektedir.

Bu durum çok büyük bir çeşitlilik, özelleştirme imkanı ve güç ile birlikte farklı yazılım versiyonlarının kullanılması dolayısıyla uyumsuzluklara ve hatalara neden olabilmektedir. Söz gelimi; Ubuntu 22 ve Ubuntu 24 sürümlerinde kullanılan bir metin editörünün kullandığı kütüphaneler Fedora Workstation 42 ile farklılık gösterebilmektedir.

Gemstone SDK’sında kullanılan özellikle Yocto gibi araçlar ise belirli GNU/Linux dağıtımlarının versiyonlarına destek vermekte ve bu hususlar ilgili projelerin dokümanlarında belirtilmektedir.

İşte bu gibi farklılıkların giriş seviyesindeki kullanıcılar için yarattığı karmaşıklığı azaltmak için Gemstone SDK’sında geliştirici ortamı için Devbox ve Distrobox gibi çözümlerden faydalanılmıştır. Bu araçlar GNU/Linux dağıtımı veya dağıtımların versiyonları farketmeksizin ihtiyaç duyulan yazılımların uygun sürümlerini bütün sistemlerde aynı yapı ile kullanmaya imkan sağlar!

Bu duruma bir örnek vermek gerekirse Ubuntu 22.04 ile sudo apt install libfmt-dev komutuyla fmt isimli kütüphaneyi kurduğunuzda sisteminizde bulunacak versiyon ile Fedora’da sudo dnf install libfmt-dev komutu ile kurulan farklı olabilir. Dolayısıyla sizler yazılım geliştirirken kodlarınızı indirip derleyen kişilerin uygun versiyonları temin etmesi gerekir.

2. Giriş

Devbox: Dağıtımlarda farklı versiyonları bulunan yazılımların, olası farklılıklarını ve geliştirme karmaşıklığını azaltmak için oluşturulmuş açık kaynaklı bir paket yönetim sistemidir. Ubuntu, Fedora gibi dağıtımlarda aynı yazılım versiyonlarını kullanabilmeye olanak verir.

Devbox ile QEMU’nun 10.0 numaralı sürümünü kullanmak istiyorsanız ve Ubuntu, Pardus, Debian’ın varsayılan paket yöneticilerinde farklı versiyonlar mevcut ise Devbox çok uygun yardımcı bir araç olmaktadır.

Gemstone SDK’sında ihtiyaç duyulan yazılımların kurulumu için her bir dağıtıma özgü çalışma yapılmasına gerek bırakmamak adına Devbox kullanılmıştır ve sdk/devbox.json dosyasında hangi yazılımların kullanıldığı yazılıdır.

Distrobox: Docker gibi konteynır teknolojilerinden faydalanarak farklı GNU/Linux dağıtımlarının istenilen versiyonunu yine kullandığınız GNU/Linux üzerinde çalıştırmayı sağlar. (Örneğin Fedora 42 kullanarak Distrobox aracılığıyla Terminal üzerinen Ubuntu 22.04 kullanabilirsiniz)

Taskfile: Betik komutları çalıştırırken çoğu zaman .sh uzantılı script adı verilen küçük uygulamalar kullanılmaktadır. Zaman içerisinde bu betik/shell script’lerinin artması ile karmaşıklık oluşmakta ve kullanım zorluğu meydana gelmektedir. Bu gibi zorlukları azaltmak için Task (Go-Task/Task veya Taskfile olarak adlandırılmaktadır) isimli araç kullanılmıştır ve çalıştırılacak scriptleri .yml uzantılı dosyalara küçük parçalar halinde yazmaya, sınıflandırmaya, Terminal’den <tab> tuşuna basıldığında otomatik tamamlama gibi ek özellikleri kullanmaya imkan sağlar. sdk/Taskfile.yml dosyasında SDK’nın temel Taskfile dosyası bulunmaktadır.

3. SDK Bileşenleri

Temel kullanım amacı Gemstone geliştirme kartlarında bulunan bütün çekirdek (Linux Kernel, Bootloader, Firmware, Driver) ve işletim sistemi (içerisinde kullandığınız bütün uygulamaları barındıran) imajlarını oluşturmak olan Gemstone SDK’sının; yapısı aşağıdaki şemada belirtilmiştir.

3.1. Klasör Yapısı

|-- build
|-- devbox.json
|-- distro
|   |-- distro.yaml
|   |-- overlays
|   |   |-- desktop
|   |   |-- kiosk
|   |   |-- minimal
|   |-- scripts
|   |-- Taskfile.yml
|-- distrobox.ini
|-- Dockerfile
|-- LICENSE
|-- README.md
|-- repos.yml
|-- setup.sh
|-- src
|-- Taskfile.yml
|-- utils
|-- yocto
    |-- meta-arm
    |-- meta-gemstone
    |-- meta-intel
    |-- meta-openembedded
    |-- meta-ti
    |-- openembedded-core
    |-- poky
    |-- Taskfile.yml
KlasörAçıklama
/buildYocto, Debos ve diğer derleme araçlarının ürettiği bütün çıktıların bulunduğu klasördür
/distroGemstone’nun Desktop, Minimal gibi farklı imajlarının nasıl derleneceğini belirten konfigürasyonların, özelleştirme dosyalarının bulunduğu klasördür
/yoctoGemstone projesine ait yocto çalışmalarıdır
/srcTexas Instruments gibi çipleri içeren geliştirme kartına ait Firmware’lerin veya harici projelerin kaynak kodlarının bulunduğu klasördür
DosyaAçıklama
repos.ymlGemstone SDK’sının ihtiyaç duyduğu bütün harici projelerin kaynak kodlarının git vb. repo adreslerini içeren dosyadır. vcstool ismi verilen bir uygulama ile fetch işlemi yapılarak kaynak kodlar bu klasöre indirilir
distrobox.iniDistrobox isimli araç ile Ubuntu 22.04 docker konteynırını oluşturan konfigürasyon dosyasıdır
Taskfile.ymlHer klasörde bulunan taskfile dosyası task klasor:komut biçiminde betik komutları çalıştırmayı sağlar
devbox.jsonDevbox’ın konfigürasyon dosyasıdır
/distro/distro.yamlGemstone Desktop, Minimal, Kiosk isimli imajları özelleştirerek oluşturan Debos’un konfigürasyon dosyasıdır

3.2. Devbox

Gemstone SDK’sında kullanılan devbox, SDK Giriş Bölümünde anlatıldığı gibi proje klonlandıktan sonra setup.sh komutunun çalıştırılması ile sisteminize kurulur. Akabinde terminalden klasör içerisinde devbox shell komutunu çalıştırdığınızda aktifleşerek devbox.json dosyasında tanımlı olan Distrobox, Taskfile, VSCTool, Qemu paketlerini indirerek sdk/.devbox klasörüne kurar ve içerisindeki yazılımları kullanabilmeniz için shell aktifleştirir.

Temel kullanım amacı farklı GNU/Linux dağıtımlarında aynı versiyona sahip yardımcı uygulamaların, paketlerin ortak bir sistemle kurulması ve kullanılabilmesidir.

Bu adrese tıklayıp uygulamayı inceleyerek alıştırmalar yapınız ve akabinde sdk/devbox.json dosyasını inceleyiniz.

3.3. Taskfile

Gemtone SDK’sını kullanırken Terminalden task fetch yocto:build distro:build gibi komutları çalıştırdığınızda sdk/Taskfile.yml sdk/yocto/Taskfile.yml sdk/distro/Taskfile.yml dosyalarında tanımlı olan fonksiyonlar icra edilir.

Taskfile isimli uygulama, devbox.json dosyasında tanımlandığı için Devbox tarafından sisteminize kurulur.

Aşağıdaki şemalarda SDK’nın kullandığı bütün Task fonksiyonlarının özeti verilmiştir.

Örnek Kullanım
gem@ubuntu:~$ cd sdk/
gem@ubuntu:sdk$ devbox shell
Starting a devbox shell...
📦 devbox:sdk> task box
task: [box] distrobox-list | grep -q 'gemstone-sdk' || docker build -f Dockerfile -t gemstone-sdk:latest .
task: [box] distrobox-assemble create --file distrobox.ini
 - Creating gemstone-sdk...
gemstone-sdk already exists
task: [box] distrobox-enter --additional-flags "--tty" --name gemstone-sdk --no-workdir
 _____ _____   _____                     _       _   _             
|_   _|___ /  |  ___|__  _   _ _ __   __| | __ _| |_(_) ___  _ __  
  | |   |_ \  | |_ / _ \| | | | '_ \ / _` |/ _` | __| |/ _ \| '_ \ 
  | |  ___) | |  _| (_) | |_| | | | | (_| | (_| | |_| | (_) | | | |
  |_| |____/  |_|  \___/ \__,_|_| |_|\__,_|\__,_|\__|_|\___/|_| |_|
                                                                   
🚀 distrobox:workdir> 
🚀 distrobox:workdir> task yocto:build
🚀 distrobox:workdir> task distro:build

3.3.1. Temel Fonksiyonlar

3.3.2. Yocto Fonksiyonları

3.3.3. Distro Fonksiyonları

Bu adrese tıklayıp uygulamayı inceleyerek alıştırmalar yapınız ve akabinde sdk/distro/Taskfile.yml dosyasını inceleyiniz.

3.4. VCS Tool

SDK’nın ihtiyaç duyduğu harici git repolarındaki kaynak kodları indirmek için Bash Shell scripti yazmak ve bu işlemleri manuel yapmak yerine repos.yml isimli dosyaya projeler tanımlanarak bunların düzenli bir şekilde indirilebilmesini sağlamaktadır. vcs import . < repos.yml komutu çalıştırıldığında ilgili dosyada tanımlı olan projeleri otomatik indirmeyi veya varsa güncelleme yapılmasını sağlar.

VCS (Version Control System) Tool isimli uygulama, devbox.json dosyasında tanımlandığı için Devbox tarafından sisteminize kurulur.

3.5. Distrobox

SDK klasörü içerisinde Dockerfile isimli bir dosya mevcuttur. Normal şartlarda bu dosyayı kullanarak Docker aracılığıyla imaj oluşturularak içerisindeki sistem kullanılabilmektedir fakat Docker mimarisi gereği imaj içerisinde değişiklik yapıldığında, dosya yüklenip silindiğinde bunları tekrar başlatma sonrası silmektedir ve kalıcı dosya sistemi kullanımı zahmetlidir.

Distrobox ise Docker aracılığıyla oluşturulan imajların içerisine girdikten sonra değişiklik yapıp dosya yükledikten sonra bunları kalıcı olarak saklanmasına imkan sağladığı için tercih edilmiştir.

Bu adrese tıklayıp uygulamayı inceleyerek alıştırmalar yapınız ve akabinde sdk/distrobox.ini ve sdk/Dockerfile dosyalarını inceleyiniz.

3.6. Debos

Kullanmakta olduğunuz Ubuntu veya Debian gibi dağıtımların kurulumu ilgili web sitelerinden indirildiğinde bir bütün olarak içerisinde bütün yazılımları, sürücüleri barındırır ve çok yüksek boyutlu bir işletim sistemi oluşur. Gömülü Linux çalışmalarında da Ubuntu, Debian gibi dağıtımlar kullanılabilmektedir fakat özelleştirilmesi, ihtiyaç duyulmayan uygulama ve kütüphanelerin silinmektesi gerekmektedir. Söz gelimi kullandığınız Ubuntu 22.04 25GB’lık bir alan kullanıyorsa bunu T3-GEM-O1 gibi kartlarda kullanmak mümkün değildir.

Debootstrap isimli araç Ubuntu, Debian gibi dağıtımların barındırdıkları paketler arasından istenilenlerin seçilmesi ve özelleştirilmiş dağıtımlar hazırlanmasına imkan verir. Örneğin ihtiyaç duyulmayan kütüphanelerin, grafik arayüzlerinin bulunmadığı çok küçük boyutlu bir ubuntu/debian sürümü oluşturarak T3-GEM-O1 gibi gömülü linux kartlarında kullanmaya imkan sağlar.

Debos ise Debootstrap isimli aracı kullanmakla birlikte komut satırından karmaşık işlemlerle imaj oluşturmak yerine .yaml uzantılı dosyalarla çok daha anlaşılabilir, sınıflandırılmış dağıtım oluşturmaya imkan sağlayan Go diliyle yazılmış bir projedir.

Bu adrese tıklayarak inceleme yapınız ve akabinde sdk/distro.yaml dosyasını inceleyiniz.

Gemstone SDK ile oluşturulan Minimal, Kiosk, Desktop imajları Debos ile oluşturulmuş olup opsiyonel olarak Ubuntu ve Debian’nın bir kaç sürümüne sahiptir. T3-GEM-O1, Beagley-AI, Intel-Core-I7 makinelerine göre farklı mimarilerde çalışacak biçimde konfigüre edilmiştir.

4. Sonuç

Bu bölümü tamamlayarak; Gemstone SDK’sının kullandığı araçların neler olduğunu ve neden tercih edildiğini görmüş oldunuz.

Sonraki bölüme geçmeden önce yukarıda bulunan bütün araçların web sitelerini ziyaret ederek kendi bilgisayarınıza kurduktan sonra alıştırma ve deneme yapmayı unutmayınız!