diff --git a/ahenk/10_adimda_ahenk_eklentisi_gelistirme.md b/ahenk/10_adimda_ahenk_eklentisi_gelistirme.md new file mode 100644 index 0000000..fbb5643 --- /dev/null +++ b/ahenk/10_adimda_ahenk_eklentisi_gelistirme.md @@ -0,0 +1,32 @@ +##10 Adımda Ahenk Eklentisi Geliştirme + +1. Ahenk geliştirme ortamını ve bağımlılıklarını kurun. [Bu dokümandaki](https://github.com/Agem-Bilisim/lider-ahenk-docs/blob/master/ahenk/ahenk_gelistirme_ortami_kurulumu.md) adımları izleyerek bağımlılıkları kurabilir, projeyi çalışır hale getirebilirsiniz. +2. [**lider-ahenk-archetype**](https://github.com/Pardus-Kurumsal/lider-ahenk-archetype) üzerinden yeni plugin için projeleri [bu dokümanda](https://github.com/Pardus-Kurumsal/lider-ahenk-archetype) belirtildiği gibi oluşturun. +3. Lider Ahenk'te archetype aracılığı ile yeni bir plugin projesi oluşturduğumuzda bu proje pluginimizin lider,console ve ahenk kısımlarını aynı dizin yapısı altında barındırır. Lider ve Console ile ilgili kısımları geliştirdiğimiz projeler maven modulü veya projesi iken, Ahenk kısmı debian paket yapısına uygun bir script dizinidir. Ahenk uygulaması çalışmaya başladığında `/etc/ahenk/ahenk.conf` dosyasında belirtilmiş olan,([**ahenk.conf** dosyasında hangi parametre ne işe yarar?](https://github.com/Agem-Bilisim/lider-ahenk-docs/blob/master/ahenk/sss.md)) eklentilerin bulunduğu dizin yolu bilgisine erişir. Eklentilerin bu dizinde olması beklenir. Eklentinin tüm bileşenleri yeni oluşturduğumuz eklenti klasöründeyken, ahenk-eklenti kısmını oluşturan dizini projeden dışarıya çıkarmamak için **ahenk.conf** dosyasında belirtilen eklentilerin yoluna ahenk-eklenti klasörü için soft link vermemiz işimizi kolaylaştıracaktır. Bunun için: +3.1 `/etc/ahenk/ahenk.conf` dosyasında **pluginfolderpath** parametresinde `/opt/ahenk/plugins/` yolunun olduğunu varsayalım +3.2 Yeni oluşturduğumuz eklentinin adının **sample**, bu eklentinin ahenk kısmının yolunun da `/home/user/git/lider-ahenk-sample-plugin/ahenk-sample/sample` olduğunu varsayalım. +3.3 `/home/user/git/lider-ahenk-sample-plugin/ahenk-sample/sample` dizinini `/opt/ahenk/plugins/` dizini içine link vermemiz için çalıştırmamız gereken terminal kodu şöyledir: +`ln -s /home/user/git/lider-ahenk-sample-plugin/ahenk-sample/sample /opt/ahenk/plugins` + +4. Eklentimizin Console ve Lider kısımlarını tamamlayıp Console'a ve Karaf'a eklentilerimizi eklediysek task veya policy'ler çalıştırıldığında, gönderilen datalar artık eklentinin ilgili py dosyasının handle fonksiyonlarına gelmesi gerekmektedir. + +5. **sample** adlı eklentimizde bulunması gereken py dosyaları şunlardır:
**main.py**
**policy.py** (Politika eklentisi ise bulunmalı)
**command_id.py** (Görev çalıştıran eklenti ise eklentinin command_id'si adında olmalı -Birden çok command_id'li eklenti olabilir.)
**safe.py** (isteğe bağlı- Kullanıcı oturum açarken ve kapatırken tetiklenir.)
**login.py** (isteğe bağlı- Kullanıcı oturum açarken tetiklenir)
**logout.py** (isteğe bağlı - Kullanıcı oturum kapatırken tetiklenir)
**init.py** (isteğe bağlı - Ahenk çalışmaya başladığında tetiklenir.)
**shutdown.py** (isteğe bağlı - Ahenk servisi kapatılırken tetiklenir) + +6. **policy.py** politika çalıştıran eklentilerde bulunması gerekir. Güncel profiller **login** işlemi sonrasında alınır ve ilgili eklentinin **policy.py** dosyasındaki **handle_policy** fonksiyonu Ahenk çekirdeği tarafından çağırılır ve bu fonksiyon **profile_data** ve **context** diye iki argüman alır. + +7. **command_id.py** görev çalıştıran eklentilerde olmalıdır. Bu script'in adı Lider'de tanımlanan **command_id** ile aynı olmak **zorundadır**. Lider'de tanımlı command id'ye **sample** eklentisi için **lider-sample** projesi **tr.org.liderahenk.sample.commands** paketi içinde tanımlanmış class'larda **getCommandId()** metodunda static olarak tanımlanmış halde bulabilirsiniz. Burada dikkat edilmesi gereken noktalar: bir eklentinin birden fazla görevi olabilir. Bu amaçla **tr.org.liderahenk.sample.commands** paketi altında birden fazla class ve command id tanımlanmış olabilir. Buna paralel olarak tanımlanan her command id için Ahenk eklentisinde de command_id isimleriyle py scriptleri oluşturmanız gerekir. Böylece aynı eklenti üzerinden gönderilen her farklı görev, Ahenk eklentisinde farklı command_id isimleriyle oluşturulmuş scriptlerce karşılanır.Bu scriptler dışardan **handle_task** fonksiyonu ile çalıştırılır ve bu fonksiyon **task** ve **context** diye iki argüman alır. + +8. Politika ya da görev çalıştırdıktan sonra çeşitli işlemler gerçekleştirilen makine üzerinde, oturum kapatılırken geri almak istenilen bir yapılandırma ayarı, silinmesi gereken bir dosya ya da eski haline getirilmek istenen herhangi bir dosya için ,duruma göre, **init.py**, **shutdown.py**, **login.py**, **logout**, veya **safe.py** kullanılabilir. + +9. Yukarda değinilen handle_policy ve handle_task fonksiyonlarının aldığı parametreleri açıklamak gerekirse: **context** Ahenk çekirdeği ile veri alışverişini sağlar. Şimdilik ahenk tarafından eklentiye, kullanıcı adı göndermek; eklenti tarafından çekirdeğe, çalıştırılan görev ya da profilin sonucunun/verinin döndürülmesi için kullanılır. Örneğin `context.get('username')` ile eklentinin üzerinde çalışması gereken kullanıcı adına erişebilir. `context.create_response(*args)` ile işlemin çalışma sonucunun (başarılı ya da başarısız olması gibi) döndürülmesi sağlanır. +**task ve profile_data** bu iki argümanda benzer işleve sahiptir. **task** görev çalıştırılırken gönderilen verilerin **profile_data** ise çalıştırılmak istenen profil bilgilerinin **json** formatındaki halidir. Console tarafından gönderilen veriler bu argümanlarla json formatında eklentiye ulaşır. Burdan sonra sadece gelen veriyi parse edip gerekli işlemleri gerçekleştimek kalıyor. + +10. Archetype ile generate edilen eklentinin Ahenk kısmındaki politika ve görevleri karşılayan scriptler AbstractPlugin class'ını extend ederler.
**AbstractPlugin** sayesinde ahenk çekirdeğinin sağladığı bazı sevis ve özelliklere erişebilir. Örneğin `self.get_logger()` gibi...
Aynı zamanda AbstractPlugin üzerinden temel python operasyonlarının kolaylıkla gerçekleştirilmesi için **Util** kullanılabilir. Util'i kullanmak için AbstractPlugin'i extend etmek yeterlidir. Util'i kullanarak temel dosya işlemleri başta olmak üzere terminal komutlarını çalıştırmak gibi işlemler kolaylıkla gerçekleştirilebilir. Örneğin `self.execute('ls')`. İncelemek için [Util](https://github.com/Pardus-Kurumsal/ahenk/blob/master/opt/ahenk/base/util/util.py)'e bakılabilir.
Ahenk'in üzerinde çalıştığı makinenin temel sistem bilgilerine direk erişebilmek için AbstractPlugin üzerinden **System**'i kullanabiliriz. Örneğin: `self.Hardware.Network.interfaces()` ile network arayüzlerine erişilebilir. İncelemek için [System](https://github.com/Pardus-Kurumsal/ahenk/blob/master/opt/ahenk/base/system/system.py)'e bakılabilir. + +####Dikkat Edilmesi Gereken Hususlar + +-- Eklenti geliştirdikten sonra **BeniOku**, **Kullanıcı** ve **Geliştirici** için ayrı dokümanlar oluşturun ve bu belgeleri görsellerle destekleyiniz.
**BeniOku**'da eklenti hakkında kısaca temel bilgiler verilmeli. Bu bilgiler eklentinin politika veya görev çalıştırabilirliği, görev çalıştırıyorsa kaç farklı görev çalıştırdığı; kişi mi makine tabanlı mı olduğu , herhangi bir bileşene ya da mimariye bağımlı olup olmadığı; herhangi bir paket gereksinimi var olup olmadığı gibi bilgiler barındırmalı. +
--**Kullanıcı Kılavuzu**nda eklentinin ne işe yaradığı; hangi durumlarda nasıl kullanılacağı ekran görüntüleriyle desteklenerek açıklanmalıdır. +
--**Geliştirici Kılavuzu** için eklentinin kullandığı altyapı ve izlediği işleyiş, kullanılan harici bileşen-teknolojiler ve yöntemlerden bahsedilebilir. +
--**Eklenti gereksinimleri ve tanımını yapınız.** Eklenti dizininizde Debian klasörü altında **control** dosyasında **Description** değerinde eklentinin kısaca tanımını yazınız. **Depends** alanında ise bağımlı olduğu paketleri yazınız. (Eklenti çalışırken bu paketlerin bulunduğu varsayılmamalı, kontrol edilmeli, gerekiyorsa kurulmalı.) +
--Python kodunu [PEP-8](https://www.python.org/dev/peps/pep-0008/) standartına göre geliştirmeye özen gösterin. diff --git a/ahenk/ahenk_calisma_mekanigi.md b/ahenk/ahenk_calisma_mekanigi.md new file mode 100644 index 0000000..46ba9f6 --- /dev/null +++ b/ahenk/ahenk_calisma_mekanigi.md @@ -0,0 +1,54 @@ +#Ahenk Çalışma Mekanikleri + +###Event Tetiklemek + +Ahenk [pam](http://tldp.org/HOWTO/User-Authentication-HOWTO/x115.html) gibi modülleri kullanarak sistem üzerindeki gerçekleştirilen kullanıcı girişi-çıkışı, sistemin kapanması vb.. aktiviteleri algılayabilir. Örneğin giriş yapan kullanıcının politikasının lider'den istenmesi için **oturum açma** işleminin farkedilmesi. Bu ve benzeri işlemler temelde arka planda bir terminal komutu çalıştırmaktadır. Eklenti geliştirme sırasında, benzer şekilde event tetiklemek için; ahenk çalıştığı sırada komut satırından ```python3 ahenkd.py [event] [parameters]``` şablonunda çalıştırılabilir. Örneğin ```python3 ahenkd.py login volkan ``` gibi ... + + +--- + + + +###Eklenti Yapısı + +Bir ahenk eklentisinin(plugin) dosya yapısı **plugins** dizini altında aşağıdaki gibidir: +
+**myplugin/**
+      **L** main.py
+      **L** policy.py
+      **L** safe.py
+      **L** taskId1.py
+      **L** taskId1.py
+            **L** **api/**
+                  **L** _plugin_name_Service.py
+                  **L** environmentA1.*
+                  **L** environmentA2_.*
+                  **L** Default.*
+ +* Bu standart yapıdaki bir eklentinin **taskId1** isimli görevin çalıştırılması için Ahenk çekirdeği **taskId1.py** daki task **handle_task(task,context)** fonksiyonunu tetikler. Bu fonksiyon task işleminin başlangıç noktası olarak varsayılabilir. **handle_task** 2 tane parametre alır. İlk parametre olan **task** eklenti geliştiricisinin lider bileşeninden gönderdiği json iletisidir. Görevin ihtiyaç duyduğu veriler eklentiyi tasarlayanın belirlediği yapıyla json mesajı olarak bu parametre ile değerlendirilebilir. + +* İkinci parametre olan **context** ahenk çekirdeği ile eklentinin ortak map i olarak düşünülebilir. **context** aracılığı ile **görev** in sonucu hakkında bilgi mesajı, veri, bu verinin tipi,... gibi içerikler döndürülebilir. + +* Politikanın işleyişi Görev ile benzerdir. Her eklentinin bir policy.py dosyası bulunur ve gelen profil datasının tamamının işlenmesinden sorumludur. + + +--- + +###Api Yapısı + +Bazı Görev ya da Profil operasyonları sistem bileşenleri,türleri ya da versiyonları ile doğrudan ilgilidir. Bu tip bağımlılıklar genellikle bilgisayar mimarilerinden, grafik arayüz bileşenlerinden, kernel versiyonlarından kaynaklanmaktadır. Bu bağımlılık tipleri öngörülemeyecek şekilde değişebilir veya artabilir.Bu noktada hedef bilgisayarlar göz önünde bulundurularak eklenti operasyonlarının işlevselliğini sürdürebilmesi için bağımlılıklara uygun çeşitli çözümler geliştirmek eklenti geliştiricisinin sorumluluğundadır. Bu amaçla geliştiriciden beklenen yapı yukardaki dosya hiyerarşisine bağlı olarak dinamik nesne erişimi sağlayan api mekanizmasıdır. Bir örnekle açıklamak gerekirse; X eklentisinin a işlevi(ekran görüntüsü alma operasyonu gibi) makine tipi ve masaüstü platformuna bağımlılığı bulunur ve her bir ikili bağımlılık için ayrı ayrı ele alınması gerekir. +Bu amaçla olası hedef makineler için a işlevini gerçekleştiren aşağıdaki gibi sınıflar oluşturulması beklenir. +* ltsp_kde.py +* x2go_kde.py +* ltsp_gnome.py +* x2go_gnome.py +* ltsp_default.py +* x2go_default.py +* default_kde.py +* default_gnome.py +* default_gnome.py +* default_default.py +(varyasyon sayısı bağımlılık sayısına göre artıp azalabilir. Örn: x64 ve x86 mimari bağımlılığının eklenmesi) +Bu sınıfları aynı interface i gerçekleyen sınıflar olarak düşünebiliriz. + +Son olarak plugin_nameService.py da Ahenk çekirdeğinden alınan bağımlılık tipi bilgisine göre geçerli nesne a işlevini gerçekleştirmek üzere gerekli yerlerde kullanılır. diff --git a/ahenk/ahenk_gelistirme_ortami_kurulumu.md b/ahenk/ahenk_gelistirme_ortami_kurulumu.md new file mode 100644 index 0000000..493b7fa --- /dev/null +++ b/ahenk/ahenk_gelistirme_ortami_kurulumu.md @@ -0,0 +1,50 @@ +###Ahenk Geliştirme Ortamı Kurulumu + +###Bağımlılıklar ve Bileşenler
+* **git:** Projenin sürüm kontrol ve kaynak kod yönetimi için git'i terminal üzerinde ```sudo apt-get install git``` ile kurabilirsiniz. +* **depo ekleme:** [Bu adresteki](https://github.com/Pardus-Kurumsal/lider-ahenk-installer/blob/master/ahenk-installer/conf/liderahenk.list) dosyayı source list'inize ekleyip `sudo apt-get update` komutu ile etkin hale getirin. +* **python3.4+:** Güncel linux sürümlerinde hazır olarak gelmektedir.https://www.python.org/downloads/ adresinden indirilip kurulabilir. +* **pip3:** Python modüllerini kurmak için gerekli olan bu paketi `sudo apt-get install python3-pip` terminal komutu ile kurulabilir. +* **dev paketleri:** Python'un genişletilmiş geliştirme paketlerinden + **python3-dev**'i`sudo apt-get install python3-dev` + **libff**'i `sudo apt-get install libffi-dev` + **libssl**'i `sudo apt-get install libssl-dev` + terminal komutları ile kurabilirsiniz. +* **sleekmpp:** `sudo apt-get install python3-sleekxmpp` komutu ile kurulabilir. +* **paramiko:** ssh protokolü üzerinden dosya transferini sağlamak için gerekli olan bu modül`sudo pip3 install paramiko` +* **psutil:** Sistem temel bilgilerine erişim için kullanılan psutil `sudo pip3 install psutil` +* **cpuinfo:** İşlemci bilgilerine erişim için kullanılan cpuinfo `sudo pip3 install py-cpuinfo` + + +Bir Python projesi herhangi bir metin editöründe geliştirilebilir ya da geliştirme kitleri tercih edilebilir. En gelişmiş ve ücretsiz ide'lerden biri olan [pycharm](https://www.jetbrains.com/pycharm/download/)'ın community versiyonu yanı sıra [plugin desteğiyle eclipse](http://www.pydev.org/manual_101_install.html) ile de python projesi geliştirilebilir. Ahenk üzerinde sqlite çalıştırmaktadır. Bu ahenk veritabanını içeriğini görüntülemek-düzenlemek için [sqlite studio](http://sqlitestudio.pl/?act=download) gibi veritabanı araçları kullanabilirsiniz. + +* IDE'ler üzerinde çalışırken varsayılan yorumlayıcınızın **python3.4+** olmasına ve ahenkd.py'ı **start** argümanı ile çalıştırdığınıza emin olun. + +* Yukardaki paketler Pardus Kurumsal 5 için sıralanmıştır. Bazı paketler işletim sisteminizin dağıtımına göre hali hazırda varolabilir ya da tanımlanmış depolarda bulunmayabilir. + +--- +###Pycharm İçin İpucu + +Ahenk'e plugin geliştirmek için Ahenk Core'u tamamen kurup geliştirdiğiniz eklentiyi çekirdeğe entegre etmek zorunda değilsiniz(plugin şablonu üzerinden giderek, Konsoldan belirlenen json verisinin gelidiğini varsayarak eklenti geliştirilebilir); fakat kontrollü bir işleyiş denetimi, Ahenk çekirdeğinin sağladığı servislerin kolayca kullanımı için Ahenk çekirdeğinin kullanılması önerilmektedir. + +Yukarda belirtilen bağımlılıkları kurduktan sonra geliştirme ortamı için Pycharm'ı kullanabilirsiniz. [Pycharm](https://www.jetbrains.com/pycharm/download/)'a hızlıca gözatmak için [Quick Start Guide](https://www.jetbrains.com/help/pycharm/5.0/quick-start-guide.html)'a bakabilirsiniz. + +**Not:** Ahenk sistem üzerinde çalışırken root hakkı gerektiren operasyonlar yapıldığı için Pycharm'ı sudo ile çalıştırmak gerekir. Eğer sudo hakkı olmayan bir kullanıcı ile aşağıdaki yapılandırma ayarlarını yaptıysanız, sudo ile açtığınızda bu ayarların bir kısmı etkin olmayabilir; bu işlemleri bir defaya mahsus tekrarlamanız gerekebilir. + +**Projeyi Açmak:** `File->Open->(ahenk_projesinin_yolu)` ile projeyi seçin. Ardından Sol taraftaki dizin ağacından `../ahenk/opt/ahenk` yolundaki (opt altındaki) **ahenk** klasörüne sağ tıklayıp `Mark Directory As-> Sources Root` ile kök dizin seviyesini belirleyin. + +**Varsayılan Yorumlayıcıyı Değiştirmek:** `File->Settings` ile gelen ekranda **interpreter** diye arattıktan sonra gelen ekranda **Project Interpreter** select box'undan **python3.4**'ü seçin. Bu ekranda aynı zamanda Python modülleri de kolay bir şekilde kurulabilir. Bunun için Ekrandaki tablonun sağ tarafındaki **+** simgesine tıklayıp module isimlerini aratıp kurabilirsiniz(Eğer bu module kurarken hata alıyorsanız geçerli python versiyonunuzu ve kurmak istediğiniz python kütüphanesinin bağımlılıklarını kontrol ediniz.). + +**Projenin Debug Yapılandırılması:** `Run->Edit Configurations..` ile açılan ekranın sol üst kısmında **+** ikonu ile yeni bir python konfigurasyonu ekleyelim. Bu konfigurasyona ahenk ismini verdikten sonra **Script** parametresi olarak ahenkd.py'ı gösterin (`/opt/ahenk/ahenkd.py` gibi bir yol olmalı). `ahenkd.py` Ahenk'in başlatıldığı script'tir. Bu script'e **start**, **stop**, **restart**, **status** gibi parametreler geçilebilir. Ahenk'i çalıştırmak için **Edit Configuration** ekranındayken **Script parameters**'e `start` parametresi geçmemiz gerekir. Son olarak projenin yorumlayıcısını **Python interpreter** alanından **python 3.4**'e çekip `Apply->Ok` butonlarına basınız. + +Ahenk projesini **Shift+F10** ile koşturabilir,**Shift+F9** ile debug edebilirsiniz.(Ya da çalıştırmak istediğiniz py'a sağ tıklayıp run ya da debug seçenekleri ile çalıştırabilirsiniz) + +--- + +###Projeyi Yerel Dosyaya Çekmek - Çalıştırmak
+1. Proje dosyalarını barındıracağınız bir klasör oluşturun.(**git/** gibi ```-mkdir git```)
+2. Oluşturduğumuz git dosyası içinde +```git clone https://github.com/Pardus-Kurumsal/ahenk.git``` komutu ile projeyi yerel dosyanıza çekin.
+3. ```../git/ahenk/etc/``` altındaki **ahenk** klasöründe bulunan **ahenk.conf** dosyasını **host**, **port**, **receiverjid**, **pluginfolderpath** ve **receivefileparam** alanların değerlerini sisteminize göre düzenleyin; sonra da **git/ahenk/etc/** dizini altındaki **ahenk** klasörünü ```/etc/``` yolunun altına kopyalayın.( conf dosyasındaki parametrelerin nelere karşılık geldiğini görmek için [bu linkteki dokümanı](https://github.com/Agem-Bilisim/lider-ahenk-docs/blob/master/ahenk/sss.md) inceleyebilirsiniz.) +4. **Ahenk** daemon'u başlatmak için **../git/ahenk/opt/ahenk/** yolundaki **ahenkd.py**'ı ```sudo python3 ahenkd.py start``` komutuyla çalıştırıyoruz.(IDE kullanıyorsak `start` argümanı vererek `ahenkd.py` scriptini çalıştırıyoruz.) +5. `ahenkd.py` scripti **start**, **status**, **stop**, **restart**, **clean** gibi farklı parametreler alabilir.Eğer politika eklentileri üzerinde çalışıyorsak, politikaların yüklenebilmesi için kullanıcıların hedef makinede(ahenk kurulu) oturum açmaları gerekir. Belirlenen politikalar oturum açılırken **Lider**'den alınıp çalıştırılır. **Ahenk**'in çalıştığı makinenin sürekli oturum açma-kapatma işlemleri ile vakit kaybetmek istemiyorsanız; ```sudo python3 ahenkd.py login user_name desktop_environment_type :display_number``` ile istenilen kullanıcının oturum açmış gibi **Ahenk**'i tetiklemesini sağlayabilirsiniz. diff --git a/ahenk/ahenk_surecleri.md b/ahenk/ahenk_surecleri.md new file mode 100644 index 0000000..b514d5f --- /dev/null +++ b/ahenk/ahenk_surecleri.md @@ -0,0 +1,71 @@ +Ahenk + +Ahenk; Lider'den gelen görevleri/politikaları bulunduğu bilgisayar üzerinde çalıştırıp sonuçlarını yine Lider'e döndüren bir servistir. Yetenekleri eklentilerle genişletilebilir. Sistem üzerindeki olaylardan veya Liderden gelen mesajlar ile iç süreçleri tetiklenir. +Bu süreçleri şöyle listeleyebiliriz: + +##Ahenk Servisinin Çalışmaya Başlaması + +Ahenk base scripti olan ahenkd.py, python Daemon olarak çalışmaya başlar. İlk olarak bir scope oluşturur. Scope, oluşturulacak servislerin tutulduğu global bir sepet olarak düşünülebilir. Ardından Ahenk/ Ahenk eklentilerinin kullanabileceği ve Scope'a atılacak servisler oluşturulur. Bu servisler şunlardır: + +**Config Manager:** Yapılandırma dosyasının okunması, değiştirilmesi, yazılmasını sağlar. + + +**Logger:** Farklı seviyelerde log dosyasına kayıt düşmek için kullanılır. Kaydedilen loglar /var/ahenk/log/ahenk.log dosyasına kaydedilir. Ahenk'in baştan başlatılması ile kayıtlar silinmez. Genel kayıt mesajı standardı şöyledir: logger.debug('[ExecutionManager] Politika işlemeye başlandı'), logger.error('[PLUGINA-INIT] A işlemi gerçekleştirilirken hata ile karşılaşıldı. Hata Mesajı: {0}'.format(str(e))) + + +**Event Manager:** Event-Function eşleştirilmesini sağlar. Böylece uygulamanın herhangi bir yerinden fırlatılan event ile önceden tanımlanmış event-actionlar sayesinde fonksiyon tetiklenir. +Ahenk Db Service: Ahenk'in kullandığı sqlite için temel veritabanı işlemlerini gerçekleştirmek için kullanılır. + + +**Message Manager:** Temel işleyişleri gerçekleştirmek için kullanılan json mesajlarını oluşturmak için kullanılır.Örneğin message = scope.getMessageManager().policy_request_msg('user_name') + + +**Plugin Manager:** Eklentilerin Ahenk sistemine yüklenip kendi threadlerinin başlatılmasını sağlar. Böylece eklentiye gelen bir görev ya da profil bu thread içinde işlevini gerçekleştirebilir. Ayrıca eklentiyi Ahenk'ten kaldırıp, yeniden yüklemeye de izin verir. Eklentiler yüklendikten sonra yüklü eklentilerin init.py betikleri çalıştırılır. + + +**Scheduler:** Zamanlı görevlerin kontrolünü ve çalıştırılmasını sağlar. Kendi custom cron mekanizmasını barındırır. + + +**Task Manager:** Görev ve politikalar üzerinde kaydetmek, eklemek, silmek gibi temel işlemleri gerçekleştirir. Görevi kaydettikten sonra çalıştırılmasını sağlar. + + +**Registration:** Ahenk uygulaması çalışmaya başladığında lider tarafından doğrulanmasını sağlar. Doğrulanmamışsa ya da ilk defa çalıştırılıyorsa kendisini doğrulaması için lider ile gerekli protokolü başlatır. + + +**ExecutionManager:** Ahenk ve Lider çekirdeği arasında belirlenen protokolleri ve iletişim şablonlarını tanımlar ve EventManager kullanarak bu mesaj şablonlarının doğrulanmasını gerçekleştirir. + + +**Messager:** İletişim yöntemlerini tanımlar ve gerçekleştirir. XMPP bağlantısı açıp kapatılabilir. Bir çeşit XMPP Client'ıdır. Gelen mesajın tipinden Even Manager üzerinden Event'i tetikler + + + +##Ahenk Servisinin İlk Defa Çalışmaya Başlaması + +Ahenk'in çalışmasından farklı olarak ilk defa çalışmada registration işlemi gerçekleştirilir. Ahenk kendisini kaydetmesi için, Lider'e içinde üzerinde çalıştığı makinenin bilgileri ile birlikte bir bilgi mesajını Anonim olarak gönderir ve kayıt işleminin gerçekleştirildiğine dair bir cevap bekler. Bu cevap yapılandırılma dosyasında belirlenmiş bekleme süresi içinde gelmezse Ahenk servisi kendini kapatır. Eğer olumlu bir cevap dönerse Anonim bağlantı kapatılıp Lider tarafından onaylanan kalıcı hesap üzerinden iletişime devam eder. Kayıt için olumlu cevap dönmezse, makinenin sahip olduğu network adresinin 3 katı kadar daha farklı jid bilgileriyle registration denemesi yapılır. Bunların hiçbirinde başarılı olunmazsa Ahenk servisi kapatılır. + + +##Kullanıcının İlk Defa Ahenk Çalıştıran Bilgisayarda Oturum Açması + +Ahenk çalıştıran bilgisayarda bir kullanıcı ilk defa oturum açtığında kullanıcı sözleşmesini kabul etmesi beklenir. Yapılandırma dosyasında tanımlanmış bekleme süresinde olumlu cevap verilmezse kullanıcı oturumu kapatılır. Kullanıcı sözleşmeyi kabul edene kadar bu süreç devam eder. Eğer Lider yapılandırmasında herhangi bir sözleşme tanımlanmadıysa varsayılan Ahenk Sözleşmesi metni kullanıcıya gösteirilir. Sözleşme metinleri her Ahenk servisi başlatıldığında Lider'den istenilir. Bir öncekinden farklı bir sözleşme Lider'den gönderildiğinde, kullanıcı eski sözleşmeyi kabul etmiş olsa bile yeni sözleme bir sonraki oturum açma sırasında tekrar sorulur. + +##Görev Göderilmesi + +Görev tipinde bir mesaj messenger servisine geldiğinde, event manager servisi kullanılarak execution servisinde tanımlı task execution kısmına mesaj parametresi ile gönderilir. Burada görevin json mesajı bir nesneye dönüştürülür ve veritabanına kaydedilir.Bu sırada görevin çalıştıracak eklentinin yüklü olup olmadığı kontrol edilir. Eğer yüklü değil ise Lider'e ilgili eklentinin eksik olduğuna dair bir mesaj gönderilir ve eklenti kurulana kadar görev saklanır. Eklenti ile ilgili kurulum bilgileri geldiğinde eklenti paketi uzaktan alınıp kurulur ve Ahenk servisine yüklenir. Saklanan görev aktif hale getirilir. Bu bir zamanlı görev ise scheduler servisine gönderilir; değilse plugin manager servisine gönderilerek çalıştırılır. + +##Kullanıcının Oturum Açması + +Kullanıcı oturum açtığında son güncel sözleşmeyi kabul edip etmediğinin kontrolü yapılır. Ardından Lider'den bu kullanıcı ve çalışan makineye ait politika istenir. Ardından eklentilerin safe ve login scriptleri varsa çalıştırılır. (Bu scriptlere hangi kullanıcının oturum açtığı bilgisi gönderilir) Yapılandırma dosyasında belirtilen sürede Lider politika bilgilerini Ahenk'e göndermezse Ahenk veritabanından bu kullanıcı ve makine için çalıştırılmış en güncel politikayı çeker ve çalıştırır. Politikaların çalıştırılması görevin çalıştırılması ile aynı mekaniği izlemektedir. Ancak bazı profil tabanlı eklentiler hem kullanıcı hem makine üzerine uygulanmış olabilir. Aynı eklentinin çalıştırabileceği 2 profile geldi ise (hem kullanıcı üzerine atanmış profil hem makine üzerine atanmış profil), makine üzerine atanmış profilin ezilebilir olup olmadığı kontrol edilir. Makine profili ezilebilir ise sadece kullanıcının profili; değilse sadece makine profili çalıştırılır. + + +##Sonuçların döndürülmesi + +Bir görev ya da profil çalıştırıldığında işlemin başarılı ya da başarısız olduğuna dair varsa ek bilgileri ile sonuç dönmesi beklenir. Bu sonuç Response nesnesidir. Eklentinin döndürdüğü response nesnesi belirlenmiş json formatın döndürülür. Varsa data ve content type bilgilerine bakılır. Eğer content type, json değilse ve data da oluşturulmuş bir dosyanın md5 bilgisini barındırıyorsa bu dosya Lider'in gösterdiği uzak makinedeki dizine gönderilir ve sonuç mesajı Lider'e iletilir. Policy Status ile Task Status mesajlarının farkı Task Status'te taskId bulunması, Policy Status'te commandExecutionId ve policyVersion bulunmasıdır. + + +##Kullanıcının Oturum Kapatması + +Bir kullanıcı oturumu kapattığında eklentilerin safe.py ve logout.py betikleri çalıştırılır. Lider'e hangi kullanıcının oturumu kapattığına dair mesaj atılır. + +##Ahenk Servisinin Kapanması (Bilgisayarın Kapanması) + +Ahenk servisi kapatılırken eklentilerin shutdown.py betikleri çalıştırılır. Eğer herhangi bir eklenti çalışmaya devam ediyorsa işlemini bitirmesi beklenir. diff --git a/ahenk/ahenk_yapilandirma_dosyasi.md b/ahenk/ahenk_yapilandirma_dosyasi.md new file mode 100644 index 0000000..1faa683 --- /dev/null +++ b/ahenk/ahenk_yapilandirma_dosyasi.md @@ -0,0 +1,90 @@ + +#Ahenk Yapılandırma Dosyası +``` + +[BASE] +logconfigurationfilepath = /etc/ahenk/log.conf +dbpath = /etc/ahenk/ahenk.db + +[PLUGIN] +pluginfolderpath = /opt/ahenk/plugins/ +mainmodulename = main + +[CONNECTION] +uid = 1111111-2222-33333-4444-555555 +password = aaaaa-bbbbb-ccccc-ddd-eeeeeeee +host = XXX.XXX.XXX.XXX +port = 5222 +use_tls = false +receiverjid = lider_sunucu +receiverresource = Smack +servicename = im.agem.com.tr +receivefileparam = /tmp/ + +[SESSION] +agreement_timeout = 30 +registration_timeout = 30 +get_policy_timeout = 30 + +[MACHINE] +type = default + +[MAIL] +smtp_host = smtp.mail_server_name.com +smtp_port = 587 +from_username = username_mail +from_password = password_mail +to_address = target_mail_address@mail_server.com + +``` +###BASE + +**logconfigurationfilepath:** log yapılandırma ayarlarını barındıran dosyanın yoludur. Varsayılan değer `/etc/ahenk/log.conf`'tur. +**dbpath:** Ahenk çekirdeğinin operasyonlarında kullandığı veritabanının yoludur. Varsayılan değer `/etc/ahenk/ahenk.db`'dir. + +###PLUGIN + +**pluginfolderpath:** Ahenk eklentilerinin bulunduğu dizin yoludur. Varsayılan değer `/opt/ahenk/plugins/`'dir. +**mainmodulname:** Eklentiler Ahenk' e yüklenmesinde kullanılan temel py dosyasının adıdır. Varsayılan değer `main` 'dir + +###CONNECTION + +**uid:**Ahenk'in kendisini kaydetmek ve XMPP Sunucusuna bağlanmak için kullandığı biricik id numarasıdır. Bu alan Ahenk tarafından doldurulacaktır. + +**password:** XMPP Sunucusuna bağlanırken kullanmak üzere oluşturulan şifredir. Bu alan Ahenk tarafından doldurulacaktır. + +**host:** XMPP sunucusu ip adresidir.Aktif XMPP sunucusunun geçerli ve erişilebilir bir ip adresi girilmelidir. + +**port:** XMPP sunucusuna erişim için kullanılacak port numarasıdır. Port numarası varsayılan değer olarak **5222**'dir. 5222 genelde TLS'i destekleyen yapılandırmalar için kullanılır. Bu değerin yanısıra standartlaşmış diğer port numaraları da bulunmaktadır. Bu numaraları kullanırken XMPP Sunucunuzun yapılandırma ayarlarına dikkat etmeniz gerekmektedir. Ejabberd XMPP Sunucusu için ilgili detaya [link üzerinden](https://docs.ejabberd.im/admin/guide/security/) erişebilirsiniz. + +**use_tls:** XMPP sunucusu tls bağlantıları destekliyorsa bu alan *true* olarak doldurulmalı, aksi takdirde *false* olmalı. + +**receiverjid:** Lider uygulamasına XMPP Sunucu üzerinden erişmek için gerekli olan kullanıcı adıdır. + +**receiverresource:** Lider uygulamasına XMPP Sunucu üzerinden erişmek için gerekli olan [kaynak](https://wiki.xmpp.org/web/Jabber_Resources) adıdır. Eğer cluster yapıda bir Lider kullnıyorsanız bu alanı boş bırakınız. + +**servicename:** XMPP Sunucusunun sağladığı sanal servis adıdır. Ahenk ve Lider hesapları bu servis üzerinde tanımlı olmalıdır.Aktif XMPP sunucusunun geçerli ve erişilebilir servis adı girilmelidir. + +**receivefileparam:** Ahenk'e gelen dosyaların kaydedileceği dizin yoludur. + +###SESSION + +**agreement_timeout:** Kullanıcı sözleşmesinin kabulu için süre kısıtının saniye türünden değeri + +**registration_timeout:** Ahenk'in Lider'e kayıt işlemi için beklenecek azami süre değeri (saniye türünden) + +**get_policy_timeout:** Kullanıcı oturum açtıktan sonra, Ahenk'in Lider'den güncel politikaları almak için beklediği azami süre (saniye türünden) + +###MACHINE +**type:** Yaygın olmayan makine tiplerini saklamak ya da özel durumlarda kullanmak üzere makinelere verilebilecek değiştirilebilir alan + +###MAIL +**smtp_host:** Mail servisin adresi (SMTP) + +**smtp_port:** Mail servis kullanılabilir portu + +**from_username :** Belirtilmiş mail sunucusunda tanımlı mail adresi + +**from_password:** Yukardaki mail adresinin şifresi + +**to_address:** Mailin gönderileceği hedef mail adresi diff --git a/ahenk/sss.md b/ahenk/sss.md new file mode 100644 index 0000000..c174b0b --- /dev/null +++ b/ahenk/sss.md @@ -0,0 +1,17 @@ +#SSS# + +###Ahenk loglarına nerden bakabilirim? +Ahenk uygulamasının logları /var/log/ dizini altında ahenk.log dosyasındadır. +`tail -f /var/log/ahenk.log` terminal komutu ile eşzamanlı olarak logları takip edebilirsiniz. + +###Registration işlemi gerçekleşmiyor-Ahenk ayağa kalkmıyor. Problem ne olabilir? +- Öncelikle XMPP Sunucunuzun, Lider uygulamanızın **açık** ve **erişilebilir** olduğundan emin olun. +- Kullandığınız sanal servisin kullanıcıları arasında Lider uygulamasının XMPP kullanıcı adının olduğuna ve bu kullanıcı adının aktif (online) kullanıcılar listesinde olduğunu kontrol edin. (Bağlı kullanıcıları Ejabberd Web Console üzerinden takip edebilirsiniz) +- `/etc/ahenk/ahenk.conf` yapılandırma dosyasının parametrelerinin doğru ve geçerli olduğunu kontrol edin. +- Bu yapılandırma dosyasının içeriği ve parametrelerin anlamlandırılması aşağıdaki gibidir. +- Ahenk, bir bilgisayar üzerinde ilk kez çalışırken, Lider'in kendisini kayıt etmesi için, anonim olarak Lider'e XMPP mesajı atmaya çalışır. XMPP Sunucunuzun anonim kullanımlar için yapılandırma ayarlarının gerçekleştirilmiş olması gerekmektedir. XMPP Sunucusu için Ejabberd kullanıyorsanız bu ayarlar `.../ejabberd16.x/conf/ejabberd.yml` dosyası içinde auth method kısmında olmalıdır. + +###Ahenk bir kere register oldu fakat; register bilgilerini silip yeniden register etmek istiyorum. Ne yapmam lazım? +Ahenk üzerindeki veritabanı kayıtlarını kaldırmak ve register bilgilerini ahenk.conf dosyasından silmek için `/opt/ahenk/` altında `sudo python3 ahenkd.py clean` komutunu çalıştırmanız yeterlidir. Ahenk bir sonraki açılışında, ilk kez çalışıyormuş gibi registration işlemini başlatacaktır. + +**Not:** Yukardaki işlemlerin yanısıra Lider-Ahenk-Lider Arayüz versiyonlarının güncel ve bir biri ile uyumlu olduğundan emin olunuz. diff --git a/console/lider_console_baglanti.md b/console/lider_console_baglanti.md new file mode 100644 index 0000000..3326dc5 --- /dev/null +++ b/console/lider_console_baglanti.md @@ -0,0 +1,64 @@ +###Lider Console'da Yeni Bağlantı Rehberi +######Bu rehberde Lider Ahenk kurulumu tamamlandıktan sonra Lider Console uygulaması üzerinden nasıl bağlantı kurulacağı anlatılacaktır. Öncelikle Lider Ahenk sisteminin kurulduğu ve rehberde kullanılacak olan ortamla ilgili bilgi aşağıdaki bölümde verilecektir. +#####Rehber'in Yazıldığı Ortam Bilgileri: +######Rehberde kullanılan Lider Ahenk sisteminin kurulu olduğu ortamla ilgili bilgiler aşağıdaki gibidir: +- MariaDB veritabanı, OpenLDAP sunucusu, Ejabberd XMPP sunucusu ve Lider Sunucu aynı makinede çalışmaktadır. Çalıştıkları makinenin IP adresi: `192.168.1.111` +- LDAP sunucusunda Base DN: `dc=tubitak,dc=gov,dc=tr` +- LDAP'taki Lider Console kullanıcısının adı: `lider_console` +- LDAP'taki Lider Console kullanıcısının şifresi: `secret` + +######Lider Console uygulamasını çalıştırdığımızda karşımıza aşağıdaki gibi bir ekran geliyor. + +![console-acilis](http://www.agem.com.tr/console-screenshots/console-acilis.png) + +######Görüldüğü gibi Lider Console uygulamasında henüz hiçbir bağlantı yok. Yeni bir bağlantı oluşturmak için ekranın sol alt kısmındaki "Connections" bölümünde üzerinde "LDAP" yazan ikona tıklıyoruz. +######Tıkladıktan sonra karşımıza aşağıdaki gibi "New LDAP Connection" isminde yeni bir diyalog çıkıyor. + +![console-new-ldap-connection](http://www.agem.com.tr/console-screenshots/console-new-ldap-connection.png) + +######Burada "Connection name" alanına belirlediğimiz bir bağlantı adı giriyoruz. +######Bu noktada, "Hostname" alanına LDAP sunucusunun IP'sinin yazılması gerektiği göz önünde bulundurulmalı. +######Eğer Lider Console ve LDAP sunucusu aynı makinede çalışıyorsa IP adresi olarak "localhost" yapılabilir. +######Lider Console ve LDAP sunucu aynı adreste olmadığı halde "localhost" yazılırsa bağlantılı kurulamayacaktır. +######Aşağıdaki gibi gerekli alanları doldurduktan sonra "Check Network Parameter" butonuna tıklıyoruz. + +![console-new-ldap-connection-completed](http://www.agem.com.tr/console-screenshots/console-new-ldap-connection-completed.png) + +######Bu butona tıkladığımızda yazdığımız makineye bağlantı kontrolü yapılır, başarılı olursa aşağıdaki gibi bir diyalog çıkar. + +![console-check-network-parameter](http://www.agem.com.tr/console-screenshots/console-check-network-parameter.png) + +######"OK"'a tıklayıp devam ediyoruz. Karşımıza aşağıdaki gibi "Authentication" sayfası çıkıyor. + +![console-authentication](http://www.agem.com.tr/console-screenshots/console-authentication.png) + +######Bu sayfada "Bind DN or user" alanına LDAP'taki Lider Console kullanıcısının DN'inin yazıyoruz. +######Bizim örneğimizde bu değer "`cn=lider_console,dc=tubitak,dc=gov,dc=tr`". +######"Bind password" alanına ise Lider Console kullanıcısının şifresini yazıyoruz. Bu örnekte şifre "`secret`". +######Gerekli alanları aşağıdaki gibi doldurup "Check Authentication" butonuna tıklıyoruz. + +![console-authentication-completed](http://www.agem.com.tr/console-screenshots/console-authentication-completed.png) + +######Girilen bilgiler test ediliyor ve başarılı olursa karşımıza aşağıdaki gibi bir ekran geliyor. + +![console-check-authentication](http://www.agem.com.tr/console-screenshots/console-check-authentication.png) + +######"OK"'a tıklayıo devam ediyoruz ve karşımıza aşağıdaki gibi "Browser Options" ekranı geliyor. + +![console-browser-options](http://www.agem.com.tr/console-screenshots/console-browser-options.png) + +######Bu ekranda önce "Get base DNs from Root DSE" check'ini kaldırıyoruz ve "Fetch Base DNs" butonuna tıkyoruz. +######Karşımıza aşağıdaki gibi bir diyalog çıkıyor ve bulduğu "Base DN"'i gösteriyor. + +![console-fetch-base-dns](http://www.agem.com.tr/console-screenshots/console-fetch-base-dns.png) + +######"OK"'a tıklayıp devam ediyoruz. +######Eğer aşağıdaki gibi "Base DN" alanı istediğimiz değerle dolmazsa, istediğimiz değeri "Fetch Base DNs" butonunun altındaki ok butonuna tıkladıktan sonra seçebiliriz. + +![console-browser-options-completed](http://www.agem.com.tr/console-screenshots/console-browser-options-completed.png) + +######Bu işlemden sonra "Finish" butonuna tıkladıktan sonra bağlantımız aşağıdaki gibi oluşuyor ve otomatik olarak açılıyor. Otomatik olarak bağlanmazsa bağlantının üzerine çift tıklayarak bağlanabilirsiniz. + + ![console-connected](http://www.agem.com.tr/console-screenshots/console-connected.png) + + diff --git a/general/mesaj_formatlari.md b/general/mesaj_formatlari.md new file mode 100644 index 0000000..6a012b9 --- /dev/null +++ b/general/mesaj_formatlari.md @@ -0,0 +1,346 @@ +#Lider - Ahenk Mesaj Tipleri ve JSON Yapıları + +##Mesaj Tipleri + +**Ahenk** ile **Lider** birbirlerine Ejabberd üzerinden mesaj göndererek haberleşir. Bu mesaj **JSON** formatındadır. Ve mesajlar farklı tiplerde olsa da **type** ve **timestamp** alan isimleri her mesajda bulunur. + +**Ahenk** kurulu olduğu bilgisayarda ilk kez çalışırken kendini **Ejabberd server**, **veri tabanı**na ve **ldap**'a kaydetmesi üzere bir takım bilgiyi Lider'e gönderir. Bu işlem **Registration**'dır ve mesaj tipi **REGISTER**'dır. Registration mesajına Lider **REGISTRATION_RESPONSE** tipinde bir json mesajı döndürür. + +Ahenk kurulu bilgisayarlarda kullanıcılar **LDAP** üzerinden authenticate olurlar. Oturum açma işlemi sırasında Ahenk, Lider'e 2 adet mesaj gönderir. Bunlar **LOGIN** ve **GET_POLICIES** mesajlarıdır. **LOGIN** mesajında Lider'e hangi kullanıcının oturum açtığını bildirilir. **GET_POLICIES** mesajında (varsa önceden gönderilmiş politikanın bilgisi gönderilir) giriş yapan kullanıcı ile çalışmakta olan ajan bilgisayar üzerine önceden tanımlanmış politikaları Lider'den ister. + +**GET_POLICIES** tipindeki mesaja Lider, **EXECUTE_POLICY** tipinde mesaj gönderir. Bu mesaj varsa kullanıcı ve ajan bilgisayar üzerinde tanımlı olan politikaların içeriği hakkında cevap döndürür. Burada **dikkat edilmesi gereken nokta**; Ahenk **GET_POLICIES** mesajıyla hali hazırda kayıtlı kullanıcı ve ajan politikalarının versiyonlarını Lidere gönderir. Lider bu kullanıcı-ajan üzerinde bu versiyondan daha yeni bir versiyon politika olmadığını görürse profili null olarak döndürür fakat geçerli politika versiyonunu yazar. Ahenk, Liderden dönen **EXECUTE_POLICY** mesajı ile gelen politikalara bakıp, yeni politika geldi ise veritabanını günceller. Ahenk güncel politikaları çalıştırmaya başlar. Eğer politika versiyonları null ise bu kullanıcı ya da ajan için politika tanımlanmamış demektir. + +**EXECUTE_TASK** tipindeki mesajlar ise o anda çalıştırılması gereken görev için kullanılan gereklili parametreleri barındıran mesajdır. + +Çalıştırılan her görev ya da Politika Profili sonunda Ahenk, Lidere **RESPONSE** gönderir. Response mesajı ile çalıştırılan görev/politikanın başarı durumu, varsa döndürülen data bu mesaj ile iletilir. + +Ahenk bir görev ya da politika çalıştırmayı denediğinde eğer ilgili eklentiyi bulamazsa **MISSING_PLUGIN** tipinde bir mesaj gönderir. + +Lider'e **MISSING_PLUGIN** tipinde mesaj eriştiğinde eğer ilgili eklentinin Lider tarafındaki yapılandırma dosyasında bu eklentinin ahenk tarafının deb versiyonuna nasıl erişilebileceği hakkında distro bilgileri tanımlandıysa **INSTALL_PLUGIN** tipinde bir mesaj döndürür. + + +_ _ _ + +###REGISTER (A>>>L) + +**from:** alınmak istenen ejabberd jid. + +**password:** alınacak ejabberd hesabının şifresi. + +**hostname,ipAddresses,macAddresses** makine temel bilgileri.. + +**data:** çalışan işletim sistemi, donanım, oturumlar, vs... hakkında genişleyebilir veriler. Bu verilerin miktarı değişebilir ve Lider tarafında gruplandırma vs.. gibi işlemlerde gerekli olabilir. + +```json +{ + "type":"REGISTER", + "timestamp":"07-06-2016 09:58", + "from":"2559305d-a415-38e7-8498-2dbc458662a7", + "password":"41b6eeb5-1927-459a-b596-3115a40dfade", + "hostname":"volkansahin", + "ipAddresses":"'192.168.1.121', '192.168.56.1'", + "macAddresses":"'74:d4:35:0c:74:2c', '0a:00:27:00:00:00'", + "data":{ + "hardware.disk.used":86574, + "hardware.cpu.architecture":"x86_64", + "hardware.disk.partitions":[ + ["/dev/sda2","/","ext4","rw,errors=remount-ro"], + ["/dev/sda1","/boot/efi","vfat","rw"]], + "os.name":"Linux", + "hostname":"volkansahin", + "ipAddresses":"'192.168.1.121', '192.168.56.1'", + "sessions.userNames":["volkan"], + "hardware.cpu.physicalCoreCount":2, + "os.distributionVersion":"17", + "macAddresses":"'74:d4:35:0c:74:2c', '0a:00:27:00:00:00'", + "hardware.memory.total":7112, + "hardware.disk.total":104790, + "os.kernel":"3.13.0-24-generic", + "hardware.disk.free":12869, + "os.architecture":"64bit", + "os.version":"#47-Ubuntu SMP Fri May 2 23:30:00 UTC 2014", + "os.distributionName":"LinuxMint", + "hardware.network.ipAddresses":[ + "192.168.1.121", + "192.168.56.1"], + "hardware.cpu.logicalCoreCount":4, + "os.distributionId":"qiana" + } +} +``` + +_ _ _ + +###REGISTRATION_RESPONSE (L>>>A) +**status:** Kayıt işleminin sonucu. (status **REGISTERED, REGISTERED_WITHOUT_LDAP, ALREADY_EXISTS, REGISTRATION_ERROR** değerlerinden biri olabilir) + +**message:** Kayıt işleminin sonucu (text alan) + +**agentDn:** LDAP kayıtı gerçekleştirdiyse LDAP kaydının DN değeri. + +**REGISTRATION_ERROR** mesajı dönerse Ahenk belli miktarda tekrar REGISTRATION isteği gönderir. Deneme sayısı biterse hata mesajı oluşturup kendisini kapatır. + +```json +{"type":"REGISTRATION_RESPONSE", +"status":"ALREADY_EXISTS", +"message":"cn=2559305d-a415-38e7-8498-2dbc458662a7,ou=Uncategorized,dc=mys,dc=pardus,dc=org already exists! Updated its password and database properties with the values submitted.", +"agentDn":"cn=2559305d-a415-38e7-8498-2dbc458662a7,ou=Uncategorized,dc=mys,dc=pardus,dc=org", +"timestamp":1465282735658} +``` + + +_ _ _ + +###LOGIN (A>>>L) +**username:** Giriş yapan kullanıcının adı. + +```json +{"type": "LOGIN", +"username": "volkan", +"timestamp": "07-06-2016 10:01"} +``` + +_ _ _ + +###LOGOUT (A>>>L) +**username:** Çıkış yapan kullanıcının adı. +```json +{ + "type":"LOGOUT", + "username":"volkan", + "timestamp":"07-06-2016 11:11" +} +``` + +_ _ _ + +###GET_POLICIES (A>>>L) + +**userPolicyVersion:** Kayıtlı kullanıcı politikası versiyonu + +**agentPolicyVersion:** Kayıtlı ajan politikası versiyonu + +**username:** İstenilen politikanın sahibi. +(aşağıdaki örnekte kayıtlı bir versiyon bulunmadığı için değerler null atanmış) + +```json +{ + "type":"GET_POLICIES", + "userPolicyVersion":null, + "agentPolicyVersion":null, + "username":"volkan", + "timestamp":"07-06-2016 10:01" +} +``` + +_ _ _ + +###EXECUTE_POLICY (L>>>A) +**username**: Kullanıcı politikasının sahibinin kullanıcı adı. + +**userPolicyProfiles**: Kullanıcı politikasının barındırdığı profillerin içeriği. Json array formatındadır. + +**userPolicyVersion**: Kullanıcı politikasının versiyonu + +**userCommandExecutionId**: Kullanıcı politikasının çalıştırma id'si + +**agentPolicyVersion**: Ajan politikasının versiyonu + +**agentPolicyProfiles**: Ajan politikasının barındırdığı profillerin içeriği. Json array formatındadır. + +**agentCommandExecutionId**: Ajan politikasının çalıştırma id'si + +Aşağıdaki örnekte **userPolicyProfiles** ve **userPolicyVersion** değerleri null atanmış; çünkü gelen **GET_POLICIES** mesajındakinden daha gündel bir versiyon bulunmamakta. + +**userPolicyProfiles** ve **agentPolicyProfiles** aynı formattadırlar ve barındırdıkları profillerde id,çalışacakları plugin hakkında bilgileri, profil adı, tanımı, console'da oluşturulan parametreler (**profileData**)bulunur. + +```json +{ + "type":"EXECUTE_POLICY", + "username":"volkan", + "userPolicyProfiles":null, + "userPolicyVersion":null, + "userCommandExecutionId":null, + "agentPolicyVersion":"2701-1", + "agentCommandExecutionId":2454, + "agentPolicyProfiles":[ + { + "id":2651, + "plugin":{ + "id":1801, + "name":"browser", + "version":"1.0.0", + "description":"Lider Browser Plugin", + "active":true, + "deleted":true, + "machineOriented":false, + "userOriented":true, + "policyPlugin":true, + "xBased":false, + "createDate":1464254239000, + "modifyDate":1465203376000 + }, + "label":"volkan_t", + "description":"anasayfa", + "overridable":false, + "active":true, + "deleted":false, + "profileData":{ + "preferences":[ + { + "preferenceName":"extensions.BlockSite.enabled", + "value":"false" + }, + { + "preferenceName":"extensions.BlockSite.showWarning", + "value":"false" + }, + { + "preferenceName":"extensions.BlockSite.removeLinks", + "value":"false" + }, + .... + ] + }, + "createDate":1464263525000, + "modifyDate":null + } + ], + "timestamp":1465282879781 +} +``` + +_ _ _ + +###EXECUTE_TASK (L>>>A) + +**task**: Çalıştırılacak görev hakkında bilgiler bulunur. Yapısı **(user/agent)PolicyProfiles**' e benzerdir. Konsoldan gelen parametreler **parameterMap**'tedir. + +```json +{ + "type":"EXECUTE_TASK", + "task":{ + "id":21856, + "plugin":{ + "id":1951, + "name":"network-inventory", + "version":"1.0.0", + "description":"Lider Network Inventory Plugin", + "active":true, + "deleted":false, + "machineOriented":true, + "userOriented":false, + "policyPlugin":false, + "xBased":false, + "createDate":1464254876000, + "modifyDate":1465283994000 + }, + "commandClsId":"SCANNETWORK", + "parameterMap":{ + "timingTemplate":"3", + "ipRange":"192.168.1.100-101", + "executeOnAgent":true + }, + "deleted":false, + "cronExpression":null, + "createDate":1465285670481, + "modifyDate":null + }, + "timestamp":"07-06-2016 10:47" +} +``` + +_ _ _ + +###POLICY RESPONSE (A>>>L) + + +**policyVersion**: Çalıştırılan politika versiyonu + +**commandExecutionId**: Polikanın çalıştırılma id'si + +**responseMessage**: Sonuç mesajı(free text) + +**responseCode**:Politikanın çalıştırılma durumuna göre POLICY_ERROR,POLICY_KILLED,POLICY_PROCESSED,POLICY_RECEIVED,POLICY_TIMEOUT,POLICY_WARNING değerlerini alabilir. + +**responseData**: Varsa politika sonucu döndürülmek istenen data. + +**contentType**: Data'yı tanımlayan tip. Bu tipler şimdilik şunlar olabilir: APPLICATION_MS_WORD,APPLICATION_PDF,APPLICATION_VND_MS_EXCEL,IMAGE_JPEG,IMAGE_PNG,TEXT_HTML,TEXT_PLAIN,APPLICATION_JSON + +```json +{ + "timestamp":"07-06-2016 03:43", + "type":"POLICY_STATUS", + "policyVersion":"2551-1", + "commandExecutionId":"2502", + "responseMessage":"/opt/thunderbird/thunderbird | Unprivileged | Successful, /opt/firefox/firefox | Privileged | Successful, /usr/bin/kate | Unprivileged | Successful, /usr/bin/gedit | Privileged | Successful, ", + "responseCode":"POLICY_PROCESSED", + "responseData":null, + "contentType":null +} +``` + + +_ _ _ + +###TASK RESPONSE (A>>>L) + +**taskId**: Çalıştırılan görevin id'si +**responseMessage**: Sonuç mesajı(free text) +**responseCode**:Görevin çalıştırılma durumuna göre TASK_ERROR,TASK_KILLED,TASK_PROCESSED,TASK_TIMEOUT,TASK_WARNING,TASK_RECEIVED değerlerini alabilir. +**responseData**: Varsa görev sonucu döndürülmek istenen data. +**contentType**: Data'yı tanımlayan tip. Bu tipler şimdilik şunlar olabilir: APPLICATION_MS_WORD,APPLICATION_PDF,APPLICATION_VND_MS_EXCEL,IMAGE_JPEG,IMAGE_PNG,TEXT_HTML,TEXT_PLAIN,APPLICATION_JSON + + +```json +{ + "timestamp":"07-06-2016 03:43", + "type":"POLICY_STATUS", + "taskId":"2502", + "responseMessage":"/opt/thunderbird/thunderbird | Unprivileged | Successful, /opt/firefox/firefox | Privileged | Successful, /usr/bin/kate | Unprivileged | Successful, /usr/bin/gedit | Privileged | Successful, ", + "responseCode":"POLICY_PROCESSED", + "responseData":null, + "contentType":null +} +``` + +_ _ _ + + +###MISSING_PLUGIN (A>>>L) +**pluginName:** Eksik ahenk eklentisinin adı. +**pluginVersion:** Eksik ahenk eklentisinin versiyonu. + +```json +{ + "pluginVersion":"1.0.0", + "type":"MISSING_PLUGIN", + "pluginName":"browser" +} +``` + +_ _ _ + +###INSTALL_PLUGIN (L>>>A) +**pluginName**: Kurulacak Ahenk eklentisinin adı. +**pluginVersion**:Kurulacak Ahenk eklentisinin versiyonu. +**protocol**: Kurma yönteminin protokolu. (ssh,htttp,torrent) +**parameterMap**: Seçilen protokole bağlı parametre isterleri + +```json +{ + "type":"INSTALL_PLUGIN", + "pluginName":"browser", + "pluginVersion":"1.0.0", + "protocol":"HTTP", + "parameterMap":{ + "url":"http://www.agem.com.tr/msb" + }, + "timestamp":1465282879968 +} +``` + +_ _ _ + +**(L>>>A) Liderden Ahenk' e giden mesaj tipleri
(A>>>L) Ahenk'ten Lider'e giden mesaj tipleri** + diff --git a/general/required_ports.md b/general/required_ports.md new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/general/required_ports.md @@ -0,0 +1 @@ + diff --git a/general/terimler.md b/general/terimler.md new file mode 100644 index 0000000..a42b10a --- /dev/null +++ b/general/terimler.md @@ -0,0 +1,19 @@ +# Terimler + +* **Görev (Task)**: Ahenklere doğrudan gönderilen ve ahenk kurulu bilgisayar üzerinde çalıştırılan anlık işlerdir. Ahenk yüklü bilgisayar aktif durumda ise gönderilen *görev* anında uygulanır. Lider Arayüz üzerinden görev göndermek için herhangi bir profil oluşturmaya gerek yoktur. Genellikle bağımsız işlemler için geliştirilen eklentiler tarafından kullanılır. Örneğin; Ekran görüntüsü alma eklentisini ele alalım. Ekran görüntüsü alma anlık bir işlemdir; bu işlevin görev olarak geliştirilmesi gerekir. + +* **Profil (Profile)**: Bir eklentide gerçekleştirilebilecek yapılandırma ayarlarının bütününü ifade eder. Bir veya birden fazla profil bir araya gelerek politikayı oluşturur. Tek başına bilgisayar ya da kullanıcı odaklı çalıştırılamaz. Bir politika üzerine eklendikten sonra kullanılabilir. Bilgisayar ya da kullanıcı odaklı çalıştırılan politika kullanıcının sonraki ilk oturum açılışında çalıştırılır. +Örneğin; Tarayıcı eklentisi için; Lider Arayüz üzerinden eklenti aracılığı ile anasayfa belirleme, engelli sayfalar... gibi yapılandırma ayarlarının belirlenip kaydedilmesi ile profil oluşturulabilir. + +* **Politika (Policy)**: Bir ya da daha fazla çalıştırılabilen profillerin bir araya gelmesi ile oluşturulur. Politika ile eklentilerin sağladığı imkanların-kısıtlamaların bir kitlenin özelliklerine göre işletilmesi sağlanabilir. Politikalar kullanıcı girişi esnasında Lider'den sorgulanarak uygulanır. Örneğin; hiyerarşik yapıdaki bir kurumda *Genel Kurul Üyeleri* için bir politika oluşturulup, politikaya istenilen eklentiden profil eklenebilir. (Masaüstü arka planı kurum logosu, masaüstü mesajı kurum başkanının mesajı). Başka bir politikada ise çalışanlar için belirlenen profiller(Tarayıcı anasayfası kurumun resmi sitesi, Oturum kapanış saati 17:00) eklenerek, çalışanlar üzerinde işletilebilir. + +* **Kullanıcı Politikası**: Kişiler üzerinde çalıştırılan politikalardır. Kişi hangi bilgisayar başında olursa olsun, üzerinde tanımlı politikalar oturum açıldığından itibaren gerçekleştirilir. (Ezilemez olarak tanımlanan profiller hariç) + +* **Makina Politikası** Bilgisayarlar üzerinde çalıştırılan politikalardır. Bilgisayarda hangi kullanıcı oturum açmış olursa olsun, üzerinde tanımlı politikalar bilgisayarda oturum açıldığında gerçekleştirilir.(Ezilemez olarak tanımlanan profiller hariç) + +* **Alarm** Oluşturulan rapor tanımlarına aynı zamanda alarm eklemek de mümkündür. Alarm olarak tanımlanmış rapor tanımları tanım esnasında belirlenmiş belirli aralıkla kontrol edilir ve elde edilen kayıt (satır) sayısı eşik değeri geçer ise tanımlanmış e-posta adreslerine e-posta aracılığıyla rapor çıktısını içeren bildirim gönderilir. + +* **OSGI modülü (Bundle)** OSGI teknolojisinde, kendi başına çalışan veya bir başkasının çalışmasına katkı sağlayan Java ile geliştirilmiş proje parçacıklarına modül adı verilir. Örneğin Lider 20'den fazla modülden oluşur ve her bir modülün (örneğin veritabanı erişim katmanı, LDAP istemcisi, RESTful web servis, XMPP istemcisi olmak gibi) ayrı birer sorumluluğu/işlevi vardır. + +* **OSGI servis** OSGI konteynırı üzerinde çalışan her bir modül birbirinden bağımsız bir bağlamda (Farklı sınıf yükleyicilerine sahip) çalıştırılmaktadır. Dolayısıyla bir modüldeki bir sınıfın başka bir modüldeki sınıfa erişmesi için +özel bir yaklaşım olarak erişilmek istenen sınıf OSGI servisi olarak tanımlanır. Bu sayede söz konusu sınıfa sistemde çalışan herhangi bir sınıf gerekli yapılandırma ayarları (bkz. blueprint.xml) yaptıktan sonra erişebilir. diff --git a/installer/kurulum_rehber.md b/installer/kurulum_rehber.md new file mode 100644 index 0000000..423c07c --- /dev/null +++ b/installer/kurulum_rehber.md @@ -0,0 +1,280 @@ +#Lider Ahenk Kurulum Rehberi +##Başlarken + +###1. Kurulum Uygulamasının ve Lider Console'un İndirilmesi +####1.1 Kurulum uygulamasını ve Lider Console yönetim arayüzünü http://www.agem.com.tr/sanayi adresinden indirebilirsiniz. + +> NOT: Bu uygulamalar sıkça iyileştirildiği ve yenilendiği için, elinizde bu uygulamalar olsa bile, lütfen kurulumlara başlamadan önce belirtilen adresten tekrar en güncel versiyonu indiriniz. + +- - - + +### 2. Kurulum Uygulamasının Ön Gereklilikleri +#### 2.1 SSH Paketleri +##### Kurulum uygulamasının çalıştığı makine ile kurulumun yapılacağı makine arasındaki bağlantı SSH ile kurulmaktadır. Bu nedenle `ssh` paketlerinin her iki tarafta da kurulu olduğundan emin olun. Kurulu değilse `sudo apt-get install -y ssh` komutu ile kurabilirsiniz. + +_ _ _ + +#### 2.2 SSH Bağlantısı Root İzni +##### Kolay kurulum uygulamasının genel çalışma mantığı SSH protokolü ile işlem yapılacak makineye bağlanıp gerekli komutları çalıştırmaktır. +##### Linux işletim sistemlerinde paket kurma, kaldırma, konfigurasyon gibi işlemler çoğunlukla "root" izni ile yapılabilmektedir. Bu nedenle uygulamanın çalıştığı makineden işlem yapılacak makineye "root" olarak SSH bağlantısı kurulmaktadır. +##### Fakat Debian tabanlı işletim sistemlerinin çoğunda varsayılan ayar olarak, "root" kullanıcısı ile SSH bağlantısı engellenmiştir. Bu sorunu aşmak için ilgili makinelerde SSH konfigurasyonunda PermitRootLogin satırında değişiklik yapılmalıdır. SSH'ı "root"a açmak için: +- SSH konfigurasyon dosyası açılır: +`sudo nano /etc/ssh/sshd_config` +- Açılan dosyada "Authentication" başlığı altında +`PermitRootLogin without-password` +ifadesinin olduğu satır +`PermitRootLogin yes` +olarak değiştirilir. +- Kaydedip çıktıktan sonra SSH servisi baştan başlatılır: +`sudo service ssh restart` +- Daha sonra `ssh root@` komutuyla yapılan değişiklikler test edilebilir. + +- - - + +## Kurulum Uygulamasının Çalıştırılması +- Sıkıştırılmış olarak indirilen kurulum uygulaması istenilen bir dizine çıkarılır. +- Oluşan "lider-ahenk-installer-linux.gtk.x86_64" klasörünün içine gidilir. +- Bu klasörün içinde "lider-ahenk-installer" isimli dosyaya çift tıklayarak çalıştırılır. +> NOT: Eğer kurulum sırasındaki log'ları görmek isterseniz komut satırından aynı klasördeyken `./lider-ahenk-installer` komutuyla çalıştırabilirsiniz. Çıkabilecek sorunların rahat çözülebilmesi açısından önerilir. + +- - - + +## Kurulum Süreci +##### Bu rehberde Lider Ahenk'in sıfırdan kurulum süreci baştan sona kadar anlatılacaktır. +##### Rehber ekran görüntüleriyle desteklenerek hazırlanmıştır. + +> LÜTFEN SADECE EKRAN GÖRÜNTÜLERİNE BAĞLI KALMAYIP YAZILANLARI MUTLAKA OKUYUNUZ + +##### Kurulum uygulaması çalıştırıldıktan sonra açılan ana ekranda "LİDER KUR"'a tıklayarak Lider bileşenlerinin kurulumuna başlıyoruz. + +![installer_ana_menu](http://www.agem.com.tr/installer-screenshots/installer_ana_menu.png) + +### 1. Lider Bileşenlerinin Kurulumları +##### Lider bileşenleri sırasıyla: +- MariaDB veritabanı +- OpenLDAP sunucusu +- Ejabberd (XMPP) sunucusu ve +- Apache Karaf üzerinde koşan, Lider sunucusudur. + +##### "LİDER KUR"'a tıkladıktan sonra açılan ilk ekranda hangi bileşenleri kurmak istediğimiz soruluyor. +##### Bu rehberde sıfırdan kurulum yaptığımız için hepsini seçiyoruz (varsayılan olarak tüm bileşenler seçili geliyor) ve "Next"'e basıp devam ediyoruz. + +![installer_bilesen_secimi](http://www.agem.com.tr/installer-screenshots/installer_bilesen_secimi.png) + +##### Organizasyon sayfasında iki bilgi istenmektedir. Bunlardan biri "Organizasyon İsmi", diğeri ise "Organizasyon CN"'dir. +##### "Organizasyon İsmi" bölümüne kurumunuzun veya merkezi yönetim sisteminiz ismini yazabilirsiniz. +##### "Organizasyon CN" bölümüne ise kurumunuzun domain'ini yazın örneğin TÜBİTAK için: tubitak.gov.tr. +##### Bu sayfada girdiğiniz bilgilere göre LDAP ve XMPP sunucularının kurulum sayfalarında organizasyonunuza uygun öneriler hazır olarak gelecektir ve ekstra bilgi girmenize gerek kalmayacaktır. + +![installer_organizasyon](http://www.agem.com.tr/installer-screenshots/installer_organizasyon.png) + +##### Bu rehberde örnek olarak organizasyon ismi "TÜBİTAK MYS", organizasyon CN'i ise "tubitak.gov.tr" olarak kullanılacaktır. +##### NOT: Kurulum uygulamasında bazı alanların üzerinde bilgi işaretleri yer almaktadır, bunların üzerine geldiğinizde doldurmanız gereken alanla ilgili bilgiler çıkacaktır. Kurulum sırasında bunlardan da faydalanabilirsiniz. +##### Organizasyon ismi ve CN'ini aşağıdaki gibi giriyoruz: + +![installer_organizasyon_completed](http://www.agem.com.tr/installer-screenshots/installer_organizasyon_completed.png) + +##### "Next" tuşuna bastıktan sonra karşımıza sunucu kurulumlarının hangi lokasyonlara yapılacağını seçeceğimiz sayfa çıkacaktır. + +![installer_lokasyonlar](http://www.agem.com.tr/installer-screenshots/installer_lokasyonlar.png) + +##### Bileşenleri farklı lokasyonlara kurmak istiyorsak "Bileşen(ler) farklı bilgisayarlara kurulsun (önerilen)" seçeneğini seçip, her birinin IP'sini ilgili alanlara yazıyoruz. +##### Hepsi aynı lokasyona kurulacak ise önce yukarıdaki "Bileşen(ler) tek bir bilgisayara kurulsun" seçeneğini seçiyoruz. Eğer yerel bilgisayara kurulacaksa IP girmenize gerek kalmadan devam edebilirsiniz. Hepsi uzak bir makineye kurulacaksa ilgili seçeneği seçip IP'yi giriyoruz. + +> NOT: IP alanlarının yanındaki kutucuklar SSH bağlantısında hangi port'un kullanılacağını belirtmektedir. Varsayılan SSH ayarlarından farklı bir port kullanıyorsanız doğru numarayı girmelisiniz. + +Bu rehberde tüm bileşenler tek bir uzak makineye kurulacaktır. Sayfayı aşağıdaki gibi dolduruyoruz. + +![installer_lokasyonlar_completed](http://www.agem.com.tr/installer-screenshots/installer_lokasyonlar_completed.png) + +####1.1 MariaDB Veritabanı Kurulumu +##### MariaDB kurulumuna başlarken karşımıza erişim bilgilerini gireceğimiz sayfa çıkıyor. + +![installer_mariadb_erisim](http://www.agem.com.tr/installer-screenshots/installer_mariadb_erisim.png) + +##### Bu sayfada, MariaDB kurulacak makineye eğer kullanıcı adı ve parola ile bağlantı kurulacak ise "Kullanıcı Adı" bölümüne "root", "Parola" bölümüne ise o makinenin root şifresini yazıyoruz. +##### Eğer bir private key tanımlı ise ve özel anahtar kullanarak bağlanmak istiyorsak, "Özel anahtar kullan" seçeneğini seçiyoruz. Daha sonra "Anahtar yükle" butonuna basıp açılan ekranda kullanılacak özel anahtarı seçiyoruz. +##### Özel anahtar oluşturulurken passphrase ile oluşturulduysa "Passphrase (isteğe bağlı)" alanına, anahtar oluşturulurken girilmiş olan passphrase'i giriyoruz. +##### Bu örnekte kullanıcı adı ve parola kullanılacaktır. Sayfayı aşağıdaki gibi dolduruyoruz. + +![installer_mariadb_erisim_completed](http://www.agem.com.tr/installer-screenshots/installer_mariadb_erisim_completed.png) + +##### "Next"'e bastığımızda aşağıdaki gibi bir ekran açılacak ve verilen bağlantı bilgileriyle kurulum yapılacak olan makineye bağlantı testi yapılacaktır. + +![installer_auth_wait](http://www.agem.com.tr/installer-screenshots/installer_auth_wait.png) + +##### Testing bitmesini bekliyoruz. + +![installer_auth_fail](http://www.agem.com.tr/installer-screenshots/installer_auth_fail.png) + +##### Eğer testing sonunda yukarıdaki gibi bir ekran çıkar ve başarısız olursa, kuruluma devam edilmesine izin verilmeyecektir. Böyle bir durumda girdiğiniz şifreyi, bağlanmaya çalıştığınız makinede SSH kurulu olup olmadığını ve SSH ayarlarında root kullanıcısına bağlantı izni verilip verilmediğini kontrol edin. + +![installer_auth_success](http://www.agem.com.tr/installer-screenshots/installer_auth_success.png) + +##### Test başarılı olursa yukarıdaki gibi bir ekran çıkacaktır. "Ok"'a basıp devam ediyoruz. + +##### MariaDB için kurulum yöntemini seçeceğimiz aşağıdaki gibi bir ekran karşımıza çıkacaktır. + +![installer_mariadb_kur_yontem](http://www.agem.com.tr/installer-screenshots/installer_mariadb_kur_yontem.png) + +##### Burada iki seçeneğimiz var. +##### Birincisi vereceğimiz bir DEB dosyasından kurulum yapmak. Kurulum uygulamasının içinde gerekli DEB dosyası otomatik olarak seçili gelmektedir. İstendiği takdirde "Dosya seç" butonuna basarak başka bir DEB dosyası da verebiliriz. Özel bir durum olmadıkça kurulum uygulamasının içinde hazır gelen DEB dosyalarını kullanmak tavsiye edilir çünkü kurulum uygulaması bu DEB dosyaları ile test edilmiştir. +##### İkincisi ise DEB dosyasının yer aldığı bir URL verip buradan kurulum yapmak. Bu seçenekte kurulum uygulaması verilen URL'den dosyayı DEB dosyasını kurulum yapılacak makineye indirip kurmaya çalışacaktır. +##### Bu sayfada doldurmamız gereken bir "Veritabanı root parolası" alanı bulunmaktadır. Buraya girilen değer kurulacak olan veritabanında root kullanıcısın şifresi olacaktır. +##### Bu rehberde anlatım kolaylığı açısından tüm şifreler "secret" olarak verilecektir. + +![installer_mariadb_kur_yontem_completed](http://www.agem.com.tr/installer-screenshots/installer_mariadb_kur_yontem_completed.png) + +##### Yukarıdaki gibi şifreyi girdikten sonra "Next"'e basıyoruz ve karşımıza aşağıdaki gibi bir onay ekranı geliyor. + +![installer_mariadb_onay](http://www.agem.com.tr/installer-screenshots/installer_mariadb_onay.png) + +##### Bu ekranda girmemiz gereken herhangi bir bilgi yok, sadece yapılacak olan kurulum hakkında genel bir özet bilgi verilip, onay istenmektedir. Değiştirmek istediğimiz bir parametre varsa "Back"'e basarak geriye gidip değişiklik yapabiliriz, eğer yoksa "Next"'e basıp MariaDB kurulumunu başlatıyoruz. + +![installer_mariadb_status](http://www.agem.com.tr/installer-screenshots/installer_mariadb_status.png) + +##### Kurulumda yapılan işlemler ve tamamlanma durumu ekrandan aktarılmaktadır. Eğer bir hata ortaya çıkarsa yine bu ekranda görüntülenecektir. +##### Kurulum işleminin bitmesini bekliyoruz. Eğer bir hata oluşursa kurulum uygulamasında "Next" butonu aktif olmayacak ve sadece geriye gidilmesine izin verilecektir. +##### Kurulum sırasında hata alındığında uygulama kapatılmadan aşağıdaki linkte anlatılanlar yapılmalıdır. + +##### https://github.com/Pardus-Kurumsal/lider-ahenk-installer/wiki/05.-Troubleshooting + +##### Linkte anlatılanlar yapıldıktan sonra kurulum uygulamasına geri dönüp, hatanın alındığı ekrandan "Back" butonuyla geri gidip sonra "Next" tuşuna basarak tekrar kurulum sayfasına gelindiğinde kurulum tekrar başlar. + +##### Kurulum hatasız olarak tamamlandığında ekran aşağıdaki şekilde olur. + +![installer_mariadb_status_completed](http://www.agem.com.tr/installer-screenshots/installer_mariadb_status_completed.png) + +##### "Next"'e basarak devam ediyoruz ve LDAP kurulumuna geçiyoruz. + +#### 1.2 OpenLDAP Kurulumu +##### OpenLDAP kurulumuna başlarken karşımıza erişim bilgilerini gireceğimiz sayfa çıkıyor. + +![installer_ldap_erisim](http://www.agem.com.tr/installer-screenshots/installer_ldap_erisim.png) + +##### Bir önceki adım olan MariaDB kurulumunda yaptığımız gibi gerekli alanları dolduruyoruz ve "Next"'e basıyoruz. +##### Karşımıza çıkan ekranda iki seçenek var. +##### İlki sıfırdan yeni bir OpenLDAP kurmak, diğeri ise varolan bir LDAP'ı Lider Ahenk için konfigure etmek. +##### Bu rehberde tüm bileşenler sıfırdan kurulacağı için "Yeni bir LDAP kur" seçeneğiyle "Next"'e basarak devam ediyoruz. + +![installer_ldap_kur_konf](http://www.agem.com.tr/installer-screenshots/installer_ldap_kur_konf.png) + +##### Karşımıza kurulum yöntemini seçeceğimiz sayfa çıkıyor. Bu sayfada MariaDB kurulumunda yaptığımız gibi kurulum uygulaması içinde hazır olarak gelen paketi değiştirmeden (özel bir paket kurmak istemiyorsak) sadece aşağıdaki "LDAP root parolası" bölümünü dolduruyoruz. +##### "LDAP root parolası" bölümünde girilen değer, LDAP kurulurken oluşturulan veritabanındaki root kullanıcısının şifresi olacaktır. +##### Rehberde tüm şifreleri "secret" verdiğimiz için bu alana da "secret" giriyoruz ve "Next"'e basıyoruz. + +![installer_ldap_kur_yontem_completed](http://www.agem.com.tr/installer-screenshots/installer_ldap_kur_yontem_completed.png) + +##### Karşımıza aşağıdaki gibi bir konfigurasyon sayfası çıkıyor. + +![installer_ldap_conf](http://www.agem.com.tr/installer-screenshots/installer_ldap_conf.png) + +##### Bu sayfadaki konfigurasyon değerleri kurulumun başında girdiğiniz "Organizasyon CN" değerine göre hazır olarak getirilmiştir. Değiştirmek istediğiniz alanları tabii ki değiştirebilirsiniz. Şifre alanlarını değiştirmeniz önerilir. +##### Bu kurulum rehberinde tüm şifreleri "secret" yapacağımız için sadece "Lider Console User Password" alanını değiştirip "Next"'e basıyoruz. +##### Karşımıza aşağıdaki gibi kurulum hakkında özet bilgi veren bir sayfa geliyor. Değiştirmek istediğimiz bir parametre yoksa "Next"'e basıp onay vererek kurulumu başlatıyoruz. + +![installer_ldap_onay](http://www.agem.com.tr/installer-screenshots/installer_ldap_onay.png) + +##### OpenLDAP kurulum durumunu gösteren aşağıdaki gibi bir ekran gelecektir. + +![installer_ldap_status](http://www.agem.com.tr/installer-screenshots/installer_ldap_status.png) + +##### Eğer kurulumda herhangi bir hata alırsanız aşağıdaki linkte anlatılanları yaptıktan sonra kurulumu tekrar başlatınız. + +##### https://github.com/Pardus-Kurumsal/lider-ahenk-installer/wiki/05.-Troubleshooting + +##### OpenLDAP kurulumu başarılı bir şekilde sonlandığında ekran aşağıdaki gibi olacaktır. + +![installer_ldap_status_completed](http://www.agem.com.tr/installer-screenshots/installer_ldap_status_completed.png) + +##### OpenLDAP kurulumu bittikten sonra "Next"'e basarak bir sonraki bileşen olan Ejabberd kurulumuna geçiyoruz. + +#### 1.3 Ejabberd Kurulumu +##### Ejabberd kurulumuna başlarken karşımıza erişim bilgilerini gireceğimiz sayfa çıkıyor. + +![installer_xmpp_erisim](http://www.agem.com.tr/installer-screenshots/installer_xmpp_erisim.png) + +##### Daha önceki bileşenlerin kurulumunda olduğu gibi gerekli alanları doldurup "Next"'e basıyoruz. +##### Karşımıza Ejabberd'ın kurulum yöntemini seçeceğimiz sayfa çıkıyor. + +![installer_xmpp_kur_yontem](http://www.agem.com.tr/installer-screenshots/installer_xmpp_kur_yontem.png) + +##### Bu rehberde hazır gelen paketlerle kurulum yaptığımız için herhangi bir şey yapmaya gerek kalmaksızın "Next"'e tıklayıp bir sonraki sayfaya geçiyoruz. +##### Karşımıza Ejabberd'ın konfigurasyon parametrelerini gireceğimiz sayfa çıkıyor. + +![installer_xmpp_conf](http://www.agem.com.tr/installer-screenshots/installer_xmpp_conf.png) + +##### Bu sayfada başlangıçta girdiğimiz "Organizasyon CN" değeri ve LDAP kurulumundaki parametrelere göre uygun Ejabberd konfigurasyon parametreleri hazır olarak getirilmiştir. +##### Herhangi birşey değiştirmeden (özel bir isteğimiz yoksa) aşağıdaki gibi sadece boş şifre alanlarını doldurup "Next"'e basıyoruz. + +![installer_xmpp_conf_completed](http://www.agem.com.tr/installer-screenshots/installer_xmpp_conf_completed.png) + +##### Yine aşağıdaki gibi bir onay sayfası geliyor (değişiklik yapmayacaksak) ve "Next"'e basarak Ejabberd kurulumunu başlatıyoruz. + +![installer_xmpp_onay](http://www.agem.com.tr/installer-screenshots/installer_xmpp_onay.png) + +##### Ejabberd kurulum durumunu gösteren aşağıdaki gibi bir ekran gelecektir. + +![installer_xmpp_status](http://www.agem.com.tr/installer-screenshots/installer_xmpp_status.png) + +##### Eğer kurulumda herhangi bir hata alırsanız aşağıdaki linkte anlatılanları yaptıktan sonra kurulumu tekrar başlatınız. + +##### https://github.com/Pardus-Kurumsal/lider-ahenk-installer/wiki/05.-Troubleshooting + +##### Ejabberd kurulumu başarılı bir şekilde sonlandığında ekran aşağıdaki gibi olacaktır. + +![installer_xmpp_status_completed](http://www.agem.com.tr/installer-screenshots/installer_xmpp_status_completed.png) + +##### Ejabberd kurulumu bittikten sonra kurulum uygulaması dışında yapmanız gereken önemli bir adım aşağıda anlatılmıştır. Lütfen bu adımı atlamayınız. + +> ÖNEMLİ NOT: +Uygulamada Ejabberd kurulumu sırasında, paket kurulumu tamamlandıktan sonra iki adet kullanıcı Ejabberd'a kaydedilmektedir. Ejabberd dağıtımındaki bir bug nedeniyle, bazen bu kullanıcılar kaydedilemese bile, Ejabberd'dan kaydedilmiş gibi sonuç gelmektedir. Bu nedenle kurulum uygulamasında Ejabberd kurulumu başarılı bir şekilde bittikten sonra Ejabberd'ın kurulu olduğu makinede aşağıdaki komutları çalıştırmanız gerekmektedir: + +###### Komut yapıları şu şekildedir: +###### `sudo /opt/ejabberd-16.02/bin/ejabberdctl register admin {ejabberd_servis_adı} {kaydedilecek_admin_icin_sifre}` +###### `sudo /opt/ejabberd-16.02/bin/ejabberdctl register {lider_sunucusu_kullanıcısı_adı} {ejabberd_servis_adı} {kaydedilecek_kullanıcı_icin_sifre}` +##### Bu rehberdeki örnek için komutlar şu şekildedir: +##### `sudo /opt/ejabberd-16.02/bin/ejabberdctl register admin im.tubitak.gov.tr secret` +##### `sudo /opt/ejabberd-16.02/bin/ejabberdctl register lider_sunucu im.tubitak.gov.tr secret` +##### Bu komutları çalıştırdıktan sonra "user already registered" veya "user successfully registered" gibi sonuçlar almanız gerekmektedir. +##### Kullanıcıların oluşup oluşmadığını, tarayıcıdan "http://EJABBERD_IP:5280/admin" adresinden Ejabberd web arayüzüne girip kontrol edebilirsiniz. +##### Tam adres bu rehberdeki örnek için "192.168.1.113:5280/admin", giriş bilgileri ise kullanıcı adı ve şifre olarak "admin@im.tubitak.gov.tr" ve "secret"'dır. + +- - - + +##### Yukarıdaki notta anlatılanları yaptıktan sonra "Next"' tuşuna basarak Lider sunucu kurulumuna geçiyoruz. + +##### 1.4 Lider Sunucu Kurulumu +##### Lider sunucu kurulumuna başlarken karşımıza erişim bilgilerini gireceğimiz sayfa çıkıyor. + +![installer_lider_erisim](http://www.agem.com.tr/installer-screenshots/installer_lider_erisim.png) + +##### Gerekli bilgileri girip "Next"'e basarak devam ediyoruz. Karşımıza aşağıdaki gibi kurulum yöntemini seçeceğimiz bir sayfa geliyor. + +![installer_lider_kur_yontem](http://www.agem.com.tr/installer-screenshots/installer_lider_kur_yontem.png) + +##### Lider sunucu, üzerine gerekli Lider feature'ları yüklenmiş bir Apache Karaf instance'ı olduğu için, dağıtımı TAR.GZ şeklinde olmaktadır. Lider dağıtımı kurulum uygulamasının içine gömülü olarak hazır gelmektedir. "Next"'e basıp devam ediyoruz. +##### Devam ettiğimizde Lider sunucu için aşağıdaki gibi bir konfigurasyon ekranıyla karşılaşıyoruz. + +![installer_lider_conf_1](http://www.agem.com.tr/installer-screenshots/installer_lider_conf_1.png) + +![installer_lider_conf_2](http://www.agem.com.tr/installer-screenshots/installer_lider_conf_2.png) + +##### YUkarıda iki parça halinde gösterilen konfigurasyon ekranındaki tüm alanlar daha önceki bileşenlerin kurulumlarında girilen parametrelere göre otomatik olarak getirilmiştir. Özel bir değişiklik yapmak istemiyorsanız, bu konfigurasyon ekranında değiştirmeniz gereken bir yer yoktur. +##### "Next"'e basıp devam ediyoruz, karşımıza aşağıdaki gibi onay ekranı geliyor. + +![installer_lider_onay](http://www.agem.com.tr/installer-screenshots/installer_lider_onay.png) + +##### "Next"'e basarak onaylıyoruz ve kurulumu başlatıyoruz. + +![installer_lider_status](http://www.agem.com.tr/installer-screenshots/installer_lider_status.png) + +##### Eğer kurulumda herhangi bir hata alırsanız aşağıdaki linkte anlatılanları yaptıktan sonra kurulumu tekrar başlatınız. + +##### https://github.com/Pardus-Kurumsal/lider-ahenk-installer/wiki/05.-Troubleshooting + +##### Lider sunucu kurulumu başarılı bir şekilde sonlandığında ekran aşağıdaki gibi olacaktır. + +![installer_lider_status_completed](http://www.agem.com.tr/installer-screenshots/installer_lider_status_completed.png) + +##### Lider sunucu kurulumu da tamamlandıktan sonra, bileşenlerin hepsi kurulmuş oluyor. Ahenk kurulumuna geçmeden önce yapmanız gereken, bileşenlerin ayakta olup olmadığını kontrol etmek. Yukarıda kurmuş olduğumuz dört bileşeni kontrol ettikten sonra Ahenk kurulumuna başlayabilirsiniz. diff --git a/lider/lider-surecleri.md b/lider/lider-surecleri.md new file mode 100644 index 0000000..dbb6d63 --- /dev/null +++ b/lider/lider-surecleri.md @@ -0,0 +1,42 @@ +## Süreçler + +Lider üzerinde işletilen ve sıklıkla kullanılan bazı süreçlerin detaylı açıklaması aşağıdaki gibidir: + +### Ahenk kaydı + +Ahenk kurulumundan sonra Ahenk servis ayağa ilk kalktığında, Lider'e kayıt olmak için mesaj gönderir. Bu mesajı alan Lider, kayıt +sürecinde Ahenk'in LDAP ağacında nereye yerleşeceğine karar verir ve Ahenk yüklü bilgisayardan toplanan (CPU, disk, BIOS gibi) +donanım bilgilerini saklar. + +Kayıt işleminin başarıyla sonuçlanması durumunda Ahenk DN bilgisi, BAŞARILI etiketiyle birlikte Ahenk'e mesaj olarak geri gönderilir. +Eğer kayıt sırasında hata oluşursa (örneğin oluşturulacak LDAP ögesinin veya ögeye ait UID özniteliğinin daha önceden var olduğu durum gibi) +Ahenk'e HATA etiketiyle birlikte neden hata oluştuğunu açıklayıcı bilgi döndürülür. Tüm bu kayıt süreci Lider/karaf logları üzerinden +takip edilebilir durumdadır. + +Varsayılan kayıt sürecinde, Lider yeni Ahenk'ler için LDAP ağacında Uncategorized alt-ağacında yeni öge oluştururken, veritabanına +da IP adresi, MAC adresi ile birlikte disk, bellek, işlemci, işletim sistemi bilgilerini kaydeder. Bununla birlikte söz konusu +kayıt sürecini ele alan servis sadece bir Java arayüzünü gerçekleştiren bir sınıftır dolayısıyla ilgili arayüzü gerçekleştirmiş +herhanagi bir sınıf Karaf'a yüklenerek kayıt sürecinde farklı bilgilerin toplanması veya LDAP ağacında farklı şekilde yerleştirme +yapılması mümkündür. Bu bağlamda örnek bir de kayıt modülü geliştirilmiş, bu modüle göre kayıt sırasında gelen MAC adresine göre +önceden hazırlanmış bir CSV dosyasından ilgili Ahenk'in ağaçta nereye yerleştirileceğine karar verilmiş ve devamında Ahenk'e gönderilen +bir betik çalıştırılarak fazladan bilgi toplanması sağlanmıştır. + +### Görev işletimi + +İşletilecek görev dair HTTP isteği Lider Arayüz'den Lider'e gönderildiğinde, söz konusu istek TaskController sınıfı tarafından karşılanır. TaskController bunu TaskRequestProcessor sınıfındaki ilgili metoda yönlendirir. Bu metot içerisinde, eğer Lider yapılandırma dosyasında yetkilendirme özniteliği kurulu ise, görevin işletilmek istendiği LDAP ögeleri kontrol edilierek, kullanıcının bu görevi bu LDAP ögelerinde çalıştırıp çalıştıramayacağına karar verilir. Eğer kullanıcı bu görevi belirtilen hiçbir ögede çalıştıramayacaksa, yetkilendirme hata mesajı Lider Arayüz'e geri döndürülür. + +Eğer çalıştırabilecekse, süreç ServiceRouterImpl sınıfından devam eder. Bu sınıf ise, görev ile ilişkili ICommand sınıfını bularak öncelikle bulduğu sınıfın validate() ve execute() metotlarını tetikler. Başarılı bir şekilde bu metotlar çalıştıysa ve ICommand sınıfında bu görevin Ahenk üzerinde çalışması gerektiği belirtildiyse, görev Ahenk'e gönderilmek üzere TaskManagerImpl sınıfına aktarılır. + +TaskManagerImpl gelen görev parametrelerine göre veritabanında Task ve Command kayıtlarını oluşturur. Daha sonra bu görevin ileri tarihli olup olmadığını kontrol eder. Eğer ileri tarihli görev ise işletim burada son bulur. (TaskManagerImpl aynı zamanda ileri tarihli görevleri belirli aralıklarla kontrol ederek işletmekle de yükümlüdür) Eğer değilse, görevin işletileceği her Ahenk DN'i için Command Execution kaydını veritabanında oluşturur ve ilişkili Ahenk JID değerini bularak bu Ahenk'e görevi işletmesi için XMPP üzerinden mesaj gönderir. + +Bununla birlikte TaskManagerImpl, Ahenk'ten dönen görev sonuçlarını da dinlemektedir. Yeni bir görev sonucu gelmesi durumunda tetiklenecek metot ile Command Execution Result kaydı veritabanında oluşturulur ve bu kayıt içerisinde görev sonucuna dair bütün bilgiler saklanır. Eğer görev sonucu, dosya gönderim türündeyse mesaj içerisinden dosyanın MD5 değeri okunarak dosya sunucusundan dosya transfer edilir ve veritabanında saklanır. + +Görev sonucu saklandıktan sonra ilgili eklentilerin ve Lider Arayüz'ün görev sonucundan haberdar edilmesi için bir de Event fırlatılır. Görev sonucunu dinlemek isteyen eklentiler ITaskAwareCommand arayüzünü gerçekleştirerek, bu Event ile birlikte otomatik tetiklenirler. + +### Politika uygulama + +Lider Arayüz üzerinden politika uygulandığında Lider'e iletilen HTTP isteği PolicyController sınıfı tarafından karşılanır ve PolicyRequestProcessorImpl sınıfındaki ilgili metoda iletilir. Bu metotta tek yapılan politikanın işletileceği LDAP DN değerlerinin bulunması ve tüm parametreleri ile birlikte politikanın veritabanına kaydedilmesidir. + +Politikalar Ahenk yüklü bilgisayara kullanıcı girişi esnasında sorgulandığı için, Lider de XMPP üzerinden Ahenk'ten gelen 'politika sorgulama' mesajlarını dinler. Bu türde bir mesaj geldiğinde tetiklenen sınıf PolicySubscriberImpl, gelen mesajdaki kullanıcı adı ile kullanıcı ve makine sürüm değerlerine göre veritabanından son/güncel kullanıcı ve makine politikasını sorgular. Eğer sürüm değerleri aynı ise politikalar tekrar Ahenk'e gönderilmez, boş cevap döndürülür. Eğer sürüm değerleri farklıysa, politikalar Ahenk'e cevap olarak döndürülür. + +İlgili Ahenk kendisine gelen politikayı işlettikten sonra, hata yada başarılı durumunda, Lider'e sonuç mesajı dönmektedir. Bu sonuç mesajları ise PolicyManagerImpl sınıfı dinlemektedir. Söz konusu sınıf gelen politika sonucuna göre veritabanında Command Execution Result kaydı oluşturur ve gelen bilgileri bu kayıt ile saklar. diff --git a/lider/modüller.md b/lider/modüller.md new file mode 100644 index 0000000..65c5474 --- /dev/null +++ b/lider/modüller.md @@ -0,0 +1,102 @@ +## Modüller + +Lider projesi içerisinde yer alan OSGI modüllerinin (bundle) kısa tanımları ve işlevleri aşağıdaki gibidir: + +### lider-authorization-impl + +Görev çalıştırma ve rapor oluşturma/görüntüleme gibi 'action'lara ait yetkilendirme/doğrulama işlemlerini yapmakla yükümlü +servisi sunmaktadır. + +### lider-cache-impl + +Diğer Lider modülleri tarafından kullanılabilecek önbellekleme mekanizmalarını sunmaktadır. + +### lider-config + +Lider tarafından kullanılan çoğu yapılandırma ayarına ait yapılandırma dosyası (tr.org.liderahenk.cfg) ve bu dosyayı takip +ederek dinamik bir şekilde diğer modüllerin hizmetine sunan bir yapılandırma servisinden oluşmaktadır. + +### lider-core + +Tüm Lider modülleri ve eklentilerinin geliştirilmesi için gerekli olan Java arayüz sınıflarından oluşan iskelet modüldür. OSGI +servisleri arayüz tanımlamaları üzerinden gerçekleştirildiğinden, her modül tarafından erişilebilir bir iskelet modül ihtiyacını +karşılamak için ortaya çıkmıştır. + +### lider-datasource-mariadb + +MariaDB veritabanı bağlantısının yönetilmesi için gerekli yapılandırma dosyalarını içeren modüldür. Bağlantı havuzu bu modüldeki +yapılandırmaya göre oluşturulur ve otomatik olarak yönetilir. + +### lider-deployer + +Lider Ahenk eklentilerinin tek bir merkezden Lider, Lider Arayüz ve Ahenk bileşenlerine dağıtılması için geliştirilmekte olan +modüldür. + +### lider-itest + +Lider entegrasyon testlerinin yer aldığı modüldür. Şu an için test ortamına altyapı sağlayan ve birkaç test senaryosu içeren modüle +gerekli test senaryoları zamanla eklenerek sistemin tamamının test edilebilir hale gelmesi hedeflenmektedir. + +### lider-karaf + +Lider modüllerinin Karaf OSGI konteynırına başarılı bir şekilde yüklenebilmesi için gerekli 'feature' tanımının yer aldığı modül + +### lider-ldap-impl + +Lider modülleri tarafından LDAP ile ilgili kullanılabilecek tüm işlevleri sunan servisi içermektedir. + +### lider-log-impl + +Lider modülleri tarafından kullanılabilecek ve Lider log tablosuna kayıt eklemeye yarayan log modülüdür. + +### lider-mail-notification + +Lider modülleri ve eklentileri tarafından e-posta gönderme amacıyla kullanılabilecek e-posta servisini sunan modüldür. + +### lider-messaging-xmpp + +Lider'in XMPP sunucusu ile olan iletişimini sağlayan, mesaj gönderme ve gelen mesajları dinleme gibi yeteneklere sahip +XMPP istemcisini içeren modül + +### lider-persistence-mariadb + +Veritabanı CRUD işlemleriyle ilgili servisleri sunan modüldür. Eklentiler için kullanılabilecek PluginDbService ile birlikte +çekirdek katmanı oluşturan görev, politika, profil gibi tablolar için ayrı ayrı servisler içermektedir. + +### lider-pluginmanager-impl + +Lider'e yüklenen eklenti modüllerinin sisteme kaydını gerçekleştiren modüldür. Kayıt işlemi ile birlikte eklenti adı, sürümü, +eklentinin görev yada politika olarak çalıştığı, dosya transferi kullanıp kullanmadığı gibi nitelikler buradan kaydedilmiş olur. + +### lider-policymanager-impl + +Ahenk yüklü bilgisayarda bir kullanıcının giriş yapması ile birlikte Lider'den sorgulanan makine ve kullanıcı politikalarını +bulup Ahenk'e döndüren politika yöneticisi bu modülde yer almaktadır. + +### lider-report-impl + +Lider'de varsayılan olarak tanımlı rapor şablonları bu modül üzerinden sunulmaktadır. Bununla birlikte modülün bir diğer görevi, eklentilerden servis olarak sunulan diğer rapor şablonlarını izlemek ve değişiklikleri veritabanına yansıtmaktır. + +### lider-taskmanager-impl + +Ahenk üzerinde çalıştırılacak görevleri ilgili Ahenk'lere göndermek ve Ahenk'te çalıştırılan görevlere ait sonuç mesajları +dinleyip veritabanındaki ilgili kayıtları oluşturmak bu modüldeki görev yöneticisinin sorumluluğundadır. Buna ilaveten ileri tarihli görevleri de veritabanını belirli aralıklarla kontrol ederek tespit edip, çalıştırılma zamanı gelmiş olanları +çalıştırır. + +### lider-web + +RESTful web servisi oluşan kontrolör sınıfları içermektedir. Lider uygulamasına HTTP üzerinden giriş noktası burasıdır. Lider Arayüz'den gelen HTTP istemleri bu modül tarafından karşılanıp ilgili diğer modüllere iletilir ve ilgili modül istemi +işlettikten sonra cevabı da bu web modülü üzerinden JSON formatında Lider Arayüz'e döndürülür. + +### lider-rest-impl + +Lider Arayüz'den gelen HTTP istemlerinin ele alındığı sınıfları (request processor) içerir. Söz konusu sınıflar kapsamına göre (task, profile, report, policy gibi) birbirlerinden ayrılmıştır. Genellikle bulundukları kapsama göre veritabanı işlemlerini gerçekleştirmek, LDAP veya XMPP istemcisini kullanmak gibi çeşitli işlevlere sahiplerdir. + +### lider-service-impl + +HTTP istemlerine ait (request, response, context gibi) her türlü Bean sınıfı ve bu sınıfları oluşturmakta kullanılan Factory sınıfları bu modülde tanımlanmıştır. Diğer modüller burada tanımlı servisleri kullanarak gelen istemleri işleyip sonuç döndürebilir. + +### lider-router-impl + +Lider modüllerinde ve eklentilerde tanımlı görev (task) işleme amacıyla geliştirilmiş servisleri izleyen ve yeni servis tanımlandıkça yada varolan kaldırıldığında üzerindeki servis listesini güncelleyen modüldür. Görev işletimi sırasında, göreve ait sınıfın tetiklenmesi için bu listeden faydalanılır. Yine, benzer şekilde, Ahenk'ten gelen görev sonucuna göre +ilgili sınıfın tetiklenmesi için de aynı liste kullanılır. diff --git a/lider/raporlama.md b/lider/raporlama.md new file mode 100644 index 0000000..36c9ff0 --- /dev/null +++ b/lider/raporlama.md @@ -0,0 +1,186 @@ +# Raporlama altyapısı + +### Veritabanı yapısı + +> **Not**: Veritabanı sunucusu bağlantı bilgileri aşağıdaki gibidir: +> `mysql -h 192.168.1.41 -uroot -pqwert123` +> Bağlantı kurulduktan sonra, `use liderdb;` diyerek Lider ahenk veritabanı seçilebilir. + +##### R_REPORT_TEMPLATE: + +``` ++--------------------+---------------+------+-----+---------+-------+ +| Field | Type | Null | Key | Default | Extra | ++--------------------+---------------+------+-----+---------+-------+ +| REPORT_TEMPLATE_ID | bigint(20) | NO | PRI | NULL | | +| CREATE_DATE | datetime | NO | | NULL | | +| DESCRIPTION | varchar(500) | YES | | NULL | | +| MODIFY_DATE | datetime | YES | | NULL | | +| NAME | varchar(255) | NO | UNI | NULL | | +| QUERY | varchar(4000) | NO | | NULL | | +| REPORT_FOOTER | varchar(500) | YES | | NULL | | +| REPORT_HEADER | varchar(500) | YES | | NULL | | ++--------------------+---------------+------+-----+---------+-------+ +``` + +##### R_REPORT_TEMPLATE_COLUMN: + +``` ++--------------------+--------------+------+-----+---------+-------+ +| Field | Type | Null | Key | Default | Extra | ++--------------------+--------------+------+-----+---------+-------+ +| TEMPLATE_COLUMN_ID | bigint(20) | NO | PRI | NULL | | +| COLUMN_ORDER | int(11) | NO | | NULL | | +| CREATE_DATE | datetime | NO | | NULL | | +| NAME | varchar(255) | NO | | NULL | | +| REPORT_TEMPLATE_ID | bigint(20) | NO | MUL | NULL | | +| COLUMN_ID | bigint(20) | YES | | NULL | | +| VISIBLE | bit(1) | YES | | NULL | | +| WIDTH | int(11) | YES | | NULL | | ++--------------------+--------------+------+-----+---------+-------+ +``` + +##### R_REPORT_TEMPLATE_PARAMETER: + +``` ++-----------------------+---------------+------+-----+---------+-------+ +| Field | Type | Null | Key | Default | Extra | ++-----------------------+---------------+------+-----+---------+-------+ +| TEMPLATE_PARAMETER_ID | bigint(20) | NO | PRI | NULL | | +| CREATE_DATE | datetime | NO | | NULL | | +| DEFAULT_VALUE | varchar(4000) | YES | | NULL | | +| PARAMETER_KEY | varchar(255) | NO | | NULL | | +| LABEL | varchar(250) | NO | | NULL | | +| MANDATORY | bit(1) | YES | | NULL | | +| PARAMETER_TYPE | int(11) | NO | | NULL | | +| REPORT_TEMPLATE_ID | bigint(20) | NO | MUL | NULL | | +| PARAMETER_ID | bigint(20) | YES | | NULL | | ++-----------------------+---------------+------+-----+---------+-------+ +``` + +##### R_REPORT_VIEW: + +``` ++--------------------+--------------+------+-----+---------+-------+ +| Field | Type | Null | Key | Default | Extra | ++--------------------+--------------+------+-----+---------+-------+ +| REPORT_VIEW_ID | bigint(20) | NO | PRI | NULL | | +| CREATE_DATE | datetime | NO | | NULL | | +| DESCRIPTION | varchar(500) | YES | | NULL | | +| MODIFY_DATE | datetime | YES | | NULL | | +| NAME | varchar(255) | NO | UNI | NULL | | +| REPORT_TYPE | int(11) | NO | | NULL | | +| REPORT_TEMPLATE_ID | bigint(20) | NO | MUL | NULL | | ++--------------------+--------------+------+-----+---------+-------+ +``` + +##### R_REPORT_VIEW_COLUMN: + +``` ++--------------------+--------------+------+-----+---------+-------+ +| Field | Type | Null | Key | Default | Extra | ++--------------------+--------------+------+-----+---------+-------+ +| VIEW_COLUMN_ID | bigint(20) | NO | PRI | NULL | | +| CREATE_DATE | datetime | NO | | NULL | | +| LEGEND | varchar(255) | YES | | NULL | | +| COLUMN_TYPE | int(11) | NO | | NULL | | +| WIDTH | int(11) | YES | | NULL | | +| REPORT_VIEW_ID | bigint(20) | NO | MUL | NULL | | +| TEMPLATE_COLUMN_ID | bigint(20) | NO | MUL | NULL | | ++--------------------+--------------+------+-----+---------+-------+ +``` + +##### R_REPORT_VIEW_PARAMETER: + +``` ++-----------------------+---------------+------+-----+---------+-------+ +| Field | Type | Null | Key | Default | Extra | ++-----------------------+---------------+------+-----+---------+-------+ +| TEMPLATE_PARAMETER_ID | bigint(20) | NO | PRI | NULL | | +| CREATE_DATE | datetime | NO | | NULL | | +| DEFAULT_VALUE | varchar(4000) | YES | | NULL | | +| PARAMETER_KEY | varchar(255) | NO | | NULL | | +| LABEL | varchar(250) | NO | | NULL | | +| MANDATORY | bit(1) | YES | | NULL | | +| PARAMETER_TYPE | int(11) | NO | | NULL | | +| REPORT_TEMPLATE_ID | bigint(20) | NO | MUL | NULL | | +| PARAMETER_ID | bigint(20) | YES | | NULL | | ++-----------------------+---------------+------+-----+---------+-------+ +``` + +### Rapor Şablonları ile İlgili İşlemler + +### Şablonları Listeleme: + +* Request: http://localhost:8181/lider/template/list +* Response: + + ```json +{ + "status": "OK", + "messages": ["Records listed."], + "resultMap": { + "templates": "[{\"id\":52701,\"name\":\"Çalıştırılan Görevler\",\"description\":\"Anlık Olarak, Sisteme Bağlı Bulunan Tüm Kullanıcılara Ait Bilgiler İçeren Rapor.\",\"query\":\"SELECT a.id, a.jid, us.username, us.createDate, a.ipAddresses, a.dn FROM UserSessionImpl us INNER JOIN us.agent a WHERE us.sessionEvent = 1 \\tAND NOT EXISTS (select 1 from UserSessionImpl logout where logout.sessionEvent = 2 and logout.agent = us.agent \\t\\t\\tand logout.username = us.username and logout.createDate > us.createDate) ORDER BY us.createDate, us.username\",\"templateParams\":[],\"templateColumns\":[{\"id\":118453,\"name\":\"Sıra No.\",\"columnOrder\":1,\"createDate\":1468853068000},{\"id\":55803,\"name\":\"Görev tarihi\",\"columnOrder\":4,\"createDate\":1466521725000},{\"id\":55801,\"name\":\"Başarılı olanlar\",\"columnOrder\":5,\"createDate\":1466521725000},{\"id\":118452,\"name\":\"IP Adresleri\",\"columnOrder\":6,\"createDate\":1468853068000},{\"id\":70901,\"name\":\"Başarısız olanlar\",\"columnOrder\":7,\"createDate\":1467115539000}],\"createDate\":1466406569000,\"modifyDate\":1468853068000},{\"id\":67201,\"name\":\"Wake-on-LAN\",\"description\":\"Uyandırılan ya da Kapatılan Bilgisayarlar Hakkında Detaylı Rapor\",\"query\":\"SELECT cer.responseMessage, t.createDate, p.name FROM CommandImpl c LEFT JOIN c.commandExecutions ce INNER JOIN ce.commandExecutionResults cer INNER JOIN c.task t INNER JOIN t.plugin p WHERE p.name = 'wol' AND (t.commandClsId = 'WAKE-MACHINE' OR t.commandClsId = 'SHUT-DOWN-MACHINE') AND t.createDate BETWEEN :startDate AND :endDate\",\"templateParams\":[{\"id\":69401,\"key\":\"startDate\",\"label\":\"start\",\"type\":\"DATE\",\"defaultValue\":null,\"mandatory\":true,\"createDate\":1467103363000},{\"id\":69402,\"key\":\"endDate\",\"label\":\"end\",\"type\":\"DATE\",\"defaultValue\":null,\"mandatory\":true,\"createDate\":1467103363000}],\"templateColumns\":[{\"id\":69051,\"name\":\"Sonuç\",\"columnOrder\":1,\"createDate\":1467097434000}],\"createDate\":1467035294000,\"modifyDate\":1468565343000},{\"id\":69851,\"name\":\"Çevrimiçi Kullanıcılar\",\"description\":\"Anlık olarak sisteme bağlı olan tüm kullanıcılara ait bilgiler içerir.\",\"query\":\"SELECT a.id, a.jid, us.username, us.createDate, a.ipAddresses, a.dn FROM UserSessionImpl us INNER JOIN us.agent a WHERE us.sessionEvent = 1 \\tAND NOT EXISTS (select 1 from UserSessionImpl logout where logout.sessionEvent = 2 and logout.agent = us.agent and logout.username = us.username and logout.createDate > us.createDate) ORDER BY us.createDate, us.username\",\"templateParams\":[],\"templateColumns\":[{\"id\":69901,\"name\":\"Kullanıcı Adı\",\"columnOrder\":3,\"createDate\":1467106380000},{\"id\":69902,\"name\":\"Sisteme Giriş Tarihi\",\"columnOrder\":4,\"createDate\":1467106380000},{\"id\":69903,\"name\":\"IP Adresleri\",\"columnOrder\":5,\"createDate\":1467106380000},{\"id\":69904,\"name\":\"DN\",\"columnOrder\":6,\"createDate\":1467106380000}],\"createDate\":1467106380000,\"modifyDate\":null},{\"id\":78951,\"name\":\"Ahenk Log Kayıtları\",\"description\":\"Ahenk kurulu bilgisayarlardan toplanan log kayıtları\",\"query\":\"SELECT s.fromHost as fromhost,s.eventUser as eventuser, s.eventSource as eventsource,s.eventLogType as eventlogtype , s.genericFileName as genericfilename, s.message as message, s.receivedAt as receivedat, s.sysLogTag as syslogtag FROM SystemEventsImpl s WHERE s.fromHost LIKE :fromhostparam ORDER BY s.deviceReportedTime DESC\",\"templateParams\":[{\"id\":79001,\"key\":\"fromhostparam\",\"label\":\"Makina İsmi\",\"type\":\"STRING\",\"defaultValue\":null,\"mandatory\":false,\"createDate\":1467277994000}],\"templateColumns\":[{\"id\":79051,\"name\":\"From Host\",\"columnOrder\":1,\"createDate\":1467277994000},{\"id\":79052,\"name\":\"Event User\",\"columnOrder\":2,\"createDate\":1467277994000},{\"id\":79053,\"name\":\"Event Source\",\"columnOrder\":3,\"createDate\":1467277994000},{\"id\":79054,\"name\":\"Event Log Type\",\"columnOrder\":4,\"createDate\":1467277994000},{\"id\":79055,\"name\":\"Generic File Name\",\"columnOrder\":5,\"createDate\":1467277994000},{\"id\":79056,\"name\":\"Message\",\"columnOrder\":6,\"createDate\":1467277994000},{\"id\":79057,\"name\":\"Received At\",\"columnOrder\":7,\"createDate\":1467277994000},{\"id\":79058,\"name\":\"Sys Log Tag\",\"columnOrder\":8,\"createDate\":1467277994000}],\"createDate\":1467277994000,\"modifyDate\":null}]" + } +} + ``` + +### 3. Rapor Tanımları ile İlgili İşlemler + +#### Tanımları Listeleme: + +* Request: http://localhost:8181/lider/view/list +* Response: + + ```json +{ + "status": "OK", + "messages": ["Records listed."], + "resultMap": { + "views": "[{\"id\":79151,\"template\":{\"id\":78951,\"name\":\"Ahenk Log Kayıtları\",\"description\":\"Ahenk kurulu bilgisayarlardan toplanan log kayıtları\",\"query\":\"SELECT s.fromHost as fromhost,s.eventUser as eventuser, s.eventSource as eventsource,s.eventLogType as eventlogtype , s.genericFileName as genericfilename, s.message as message, s.receivedAt as receivedat, s.sysLogTag as syslogtag FROM SystemEventsImpl s WHERE s.fromHost LIKE :fromhostparam ORDER BY s.deviceReportedTime DESC\",\"templateParams\":[{\"id\":79001,\"key\":\"fromhostparam\",\"label\":\"Makina İsmi\",\"type\":\"STRING\",\"defaultValue\":null,\"mandatory\":false,\"createDate\":1467277994000}],\"templateColumns\":[{\"id\":79051,\"name\":\"From Host\",\"columnOrder\":1,\"createDate\":1467277994000},{\"id\":79052,\"name\":\"Event User\",\"columnOrder\":2,\"createDate\":1467277994000},{\"id\":79053,\"name\":\"Event Source\",\"columnOrder\":3,\"createDate\":1467277994000},{\"id\":79054,\"name\":\"Event Log Type\",\"columnOrder\":4,\"createDate\":1467277994000},{\"id\":79055,\"name\":\"Generic File Name\",\"columnOrder\":5,\"createDate\":1467277994000},{\"id\":79056,\"name\":\"Message\",\"columnOrder\":6,\"createDate\":1467277994000},{\"id\":79057,\"name\":\"Received At\",\"columnOrder\":7,\"createDate\":1467277994000},{\"id\":79058,\"name\":\"Sys Log Tag\",\"columnOrder\":8,\"createDate\":1467277994000}],\"createDate\":1467277994000,\"modifyDate\":null},\"name\":\"Ahenk Rsyslog\",\"description\":\"emre-test\",\"type\":\"TABLE\",\"viewParams\":[{\"id\":79201,\"referencedParam\":{\"id\":79001,\"key\":\"fromhostparam\",\"label\":\"Makina İsmi\",\"type\":\"STRING\",\"defaultValue\":null,\"mandatory\":false,\"createDate\":1467277994000},\"label\":\"Makina İsmi\",\"value\":\"Cemre\",\"createDate\":1467278229000}],\"viewColumns\":[{\"id\":79251,\"referencedCol\":{\"id\":79056,\"name\":\"Message\",\"columnOrder\":6,\"createDate\":1467277994000},\"type\":\"VALUE_FIELD\",\"legend\":\"Mesaj\",\"width\":100,\"createDate\":1467278229000}],\"createDate\":1467278229000,\"modifyDate\":null}]" + } +} + ``` + +#### Tanımdan Rapor Çıktısı Oluşturma: + +* Request: http://localhost:8181/lider/view/generate + + ```json +{ + "viewId": 75102, + "paramValues": { + "startDate":"2016-06-30 15:16:17", "endDate":"2016-07-01 15:16:17" + } +} + ``` + +* Response: + + ```json +{ + "status": "OK", + "messages": ["Record retrieved."], + "resultMap": { + "data": "[[null,\"30-06-2016 17:11\",\"wol\"],[null,\"30-06-2016 17:14\",\"wol\"],[null,\"30-06-2016 17:16\",\"wol\"],[null,\"30-06-2016 17:17\",\"wol\"],[null,\"30-06-2016 17:20\",\"wol\"],[null,\"30-06-2016 17:33\",\"wol\"],[null,\"30-06-2016 17:39\",\"wol\"],[null,\"01-07-2016 11:03\",\"wol\"],[null,\"01-07-2016 11:29\",\"wol\"],[null,\"01-07-2016 11:34\",\"wol\"],[null,\"01-07-2016 11:36\",\"wol\"],[null,\"01-07-2016 11:39\",\"wol\"],[null,\"01-07-2016 11:42\",\"wol\"],[null,\"01-07-2016 11:44\",\"wol\"],[null,\"01-07-2016 11:45\",\"wol\"],[null,\"01-07-2016 11:47\",\"wol\"],[null,\"01-07-2016 11:51\",\"wol\"],[\"A problem occured while handling WOL task: string index out of range\",\"01-07-2016 11:52\",\"wol\"],[\"A problem occured while handling WOL task: string index out of range\",\"01-07-2016 11:52\",\"wol\"],[\"[Wol - Wake Machine] Machine is awake. Mac Address(es): 1c:b7:2c:a7:d8:ec, Host: 192.168.1.122, Port: 80\",\"01-07-2016 11:54\",\"wol\"],[\"[Wol - Wake Machine] Machine is awake. Mac Address(es): 1c:b7:2c:a7:d8:ec, Host: 192.168.1.122, Port: 80\",\"01-07-2016 11:54\",\"wol\"]]", + "columns": [{ + "id": 87353, + "referencedCol": { + "id": 69051, + "name": "Sonuç", + "columnOrder": 1, + "createDate": 1467097434000 + }, + "type": "VALUE_FIELD", + "legend": "Sonuç", + "width": 100, + "createDate": 1468488539000 + }], + "type": "TABLE" + } +} + ``` + +#### Kaynak Kod + +- [Rapor servis için Controller sınıfı](https://github.com/Pardus-Kurumsal/lider/blob/master/lider-web/src/main/java/tr/org/liderahenk/web/controller/ReportController.java) diff --git a/lider/servisler.md b/lider/servisler.md new file mode 100644 index 0000000..6c09577 --- /dev/null +++ b/lider/servisler.md @@ -0,0 +1,81 @@ +## Servisler + +Lider, Karaf OSGI konteynırı üzerinde çalışan birden çok OSGI servisi sunmaktadır. +Bu servislerin bir çoğu Lider'in bel kemiğini oluşturan yetkilendirme/doğrulama, veritabanı erişim katmanı, +LDAP ve XMPP istemcileri gibi temel işlevleri oluşturur. + +Geri kalanları ise Lider üzerinde eklenti çalıştırmaya olanak sağlayan bazı arayüzleri oluşturmaktadır. + +Lider Ahenk süreçlerinde önemli rol oynayan bazı OSGI servislerini listelemek gerekirse: + +### ServiceRegistryImpl.java + +Tüm eklentiler ve bazı Lider modülleri tarafından sunulan ve görev (task) işletilme esnasında kullanılan sınıfların +bir liste halinde tutulduğu servistir. Söz konusu sınıflar ICommand arayüzünü gerçekleştiren sınıflardan oluşmaktadır. +ServiceRegistry servisi Karaf'a yeni bir eklenti yüklenmesi veya varolan bir eklentinin çıkarılması durumunda kendi ICommand +listesini güncelleyecek şekilde, sistemi her zaman dinler durumda çalışmaktadır. Karaf'ta varolan ICommand sınıflarının +listesini görebilmek için Karaf terminali üzerinden service:list ICommand komutu çalıştırılabilir. + +### ServiceRouterImpl.java + +Lider Arayüz üzerinden gelen görev isteminin doğrulama/yetkilendirme işlemini AuthServiceImpl aracılığıyla gerçekleştirmekten +ve eğer istemi yapan kullanıcının bu görevi çalıştırmaya yetkisi varsa ServiceRegistryImpl servisinde kayıtlı ilgili ICommand +sınıfını tetiklemekten sorumludur. Eğer ilgili ICommand sınıfında bu görevin Ahenk üzerinde çalıştırılması belirtildiyse, +söz konusu görev istemi TaskManagerImpl servisine iletilerek süreç devam ettirilir. Tüm bu anlatılan adımlar esnasında herhangi +bir hata olması durumunda Lider Arayüz'e cevap olarak hata mesajı döndürülür. + +### LDAPServiceImpl.java + +Lider üzerindeki LDAP işlemlerinin yapıldığı istemci sınıf bu servistir. Bu bağlamda diğer servislerin kullanabileceği LDAP arama, +yeni oluşturma, güncelleme, silme vb. işlevleri sunmakla yükümlüdür. + +### MessagingServiceImpl.java + +XMPP istemcisini kullanarak çeşitli mesajlar göndermeye olanak sağlayan yardımcı servistir. Lider'deki tüm servisler bu sınıfı +kullanarak Ahenk veya Lider Arayüz'e mesaj göndermektedir. + +### TaskManagerImpl.java + +Ahenk yüklü bilgisayar üzerinde çalıştırılması gereken görevlerin ele alındığı servistir. Görev mesajının oluşturulmasından ve +ilgili Ahenk'lere XMPP mesajının gönderilmesinden sorumludur. Bununla birlikte 'ileri tarihli' görevlerin belirlenen zamanları +geldiğinde çalıştırılmasını sağlamak üzere belirli aralıklarla veritabanında görevleri sorgulamak ve zamanı gelen 'ileri tarihli' +görevleri de benzer şekilde işletmekten sorumludur. + +Son olarak da Ahenk'ten dönen görev sonucuna dair mesajları dinler, mesaj sonucuyla ilgili veritabanı kaydını oluşturur ve görevin +işletildiğine dair bir Event fırlatarak ilgili dinleyici sınıfların uyarılmasını sağlar. + +### LiderConsoleNotifier.java + +Ahenk'ten dönen görev sonucuna ait Event'i dinleyen servislerden biridir. Gelen görev sonucuna göre, bunun hangi Lider Arayüz +kullanıcısından gönderildiğini bulup, bulunan kullanıcıya XMPP mesajı göndererek son durumu bilgilendirir. + +### PluginNotifier.java + +Ahenk'ten dönen görev sonucuna ait Event'i dinleyen bir diğer servistir. Gelen görev sonucuna göre, ITaskAwareCommand arayüzünü +gerçekleştiren sınıfları tetiklemekten sorumludur. Bu sayede söz konusu ITaskAwareCommand arayüzü, eklentiler tarafından görev +sonuçlarını dinlemek ve bu sonuçlara göre çeşitli işlemler yapmak için kullanılabilir. + +### PolicySubscriberImpl.java + +Ahenk'ten gelen politika sorgulama isteklerinin karşılandığı servis burasıdır. Ahenk'ten gelen XMPP mesajında; Ahenk yüklü +bilgisayara giriş yapan kullanıcının adı ile kullanıcının ve Ahenk'in politika versiyon numaraları yer almaktadır. +Gelen bu bilgiler kullanılarak kullanıcının ve Ahenk'in son ve güncel birer politikası veritabanından okunarak gelen versiyon +numaralarıyla karşılaştırılır. Eğer numaralar aynı ise boş mesaj, değilse veritabanından okunan politikalar cevap olarak ilgili +Ahenk'e gönderilir. Bu sayede aynı politikaların tekrar tekrar XMPP üzerinden gönderilmesinin de önüne geçilmiştir. + +### DefaultRegistrationSubscriberImpl.java + +Ahenk yüklendikten sonra ilk çalıştırılmasında Lider'e kayıt işlemini başlatmaktadır. Söz konusu kayıt sürecinde Ahenk'e XMPP +bağlantısında kullanacağı JID değeri atanmakta, Ahenk yüklü bilgisayara ait (CPU, disk, BIOS gibi) donanım bilgileri toplanıp +veritabanında saklanmakta ve Ahenk'in LDAP ağacı üzerinde (Uncategorized alt-ağacında) kaydı oluşturulmaktadır. Söz konusu süreç +bu servis ile tanımlanmış varsayılan süreçtir ve Karaf üzerinde kayıt sürecini ele alan başka bir servis bulunmadığında devreye +girmektedir. Dolayısıyla IRegistrationSubscriber arayüzünü gerçekleştiren herhangi bir sınıf (servis) oluşturularak kayıt süreci +esnek bir şekilde ele alınabilmektedir. + +### PluginDbServiceImpl.java + +Eklentiler tarafından kullanılmak üzere hazırlanılmış, veritabanı CRUD işlemlerini sunan bir servistir. Arama, kaydetme, güncelleme ve silme gibi metotları sunmaktan sorumludur. + +### MailServiceImpl.java + +Lider'den ve eklentilerinden e-posta göndermek için kullanılabilen OSGI servisidir. Örneğin belirli aralıklarla rapor alarmları sorgulandıktan sonra tanımlı eşik değer geçildiğinde bu servisin e-posta gönderme metodu aracılığıyla e-posta gönderilebilir. diff --git a/lider/veritabanı.md b/lider/veritabanı.md new file mode 100644 index 0000000..4cf8252 --- /dev/null +++ b/lider/veritabanı.md @@ -0,0 +1,119 @@ +## Veritabanı + +Lider Ahenk veritabanı olarak MariaDB 10.x kullanılmakta ve veritabanı katmanı olarak Lider içerisinde OpenJPA kullanılmaktadır. +Veritabanına ait EER diagramına [bu adresten](http://agem.com.tr/liderahenk/liderdb.mwb) erişebilirsiniz. + +Lider Ahenk (görev işletimi, politika uygulama, Ahenk kaydı gibi) süreçlerinde sıklıkla kullanılan bazı veritabanı tabloları +ve açıklamaları aşağıdaki gibidir: + +### C_COMMAND + +``` ++-------------------+--------------+------+-----+---------+-------+ +| Field | Type | Null | Key | Default | Extra | ++-------------------+--------------+------+-----+---------+-------+ +| COMMAND_ID | bigint(20) | NO | PRI | NULL | | +| ACTIVATION_DATE | date | YES | | NULL | | +| COMMAND_OWNER_UID | varchar(255) | YES | | NULL | | +| CREATE_DATE | datetime | NO | | NULL | | +| DN_LIST | text | YES | | NULL | | +| DN_TYPE | int(11) | YES | | NULL | | +| POLICY_ID | bigint(20) | YES | MUL | NULL | | +| TASK_ID | bigint(20) | YES | MUL | NULL | | ++-------------------+--------------+------+-----+---------+-------+ +``` + +İşletilen her bir görev veya uygulanan her bir politikaya karşılık C_COMMAND tablosunda yeni bir kayıt oluşturulur. Yapılan +işlemin (görev yada politika) LDAP üzerinde hangi ögeler (DN_LIST) üzerinde çalıştırıldığı, bu ögelerden hangilerinin dikkate +alınması gerektiği (DN_TYPE) ve işlemin kim tarafından yapıldığını kayıt altına alır. Söz konusu her bir kayıt C_TASK veya C_POLICY +tablosuna referans vermektedir. + +### C_TASK + +``` ++-----------------+--------------+------+-----+---------+-------+ +| Field | Type | Null | Key | Default | Extra | ++-----------------+--------------+------+-----+---------+-------+ +| TASK_ID | bigint(20) | NO | PRI | NULL | | +| COMMAND_CLS_ID | varchar(255) | YES | | NULL | | +| CREATE_DATE | datetime | NO | | NULL | | +| CRON_EXPRESSION | varchar(255) | YES | | NULL | | +| DELETED | bit(1) | YES | | NULL | | +| MODIFY_DATE | datetime | YES | | NULL | | +| PARAMETER_MAP | longblob | YES | | NULL | | +| PLUGIN_ID | bigint(20) | NO | MUL | NULL | | ++-----------------+--------------+------+-----+---------+-------+ +``` + +İşletilen her bir görev için C_TASK tablosunda yeni bir kayıt oluşturulmaktadır ve görev işletimi sırasında Lider Arayüz üzerinden +gönderilen görev parametrelerini içermektedir. + +### C_POLICY + +``` ++----------------+--------------+------+-----+---------+-------+ +| Field | Type | Null | Key | Default | Extra | ++----------------+--------------+------+-----+---------+-------+ +| POLICY_ID | bigint(20) | NO | PRI | NULL | | +| ACTIVE | bit(1) | YES | | NULL | | +| CREATE_DATE | datetime | NO | | NULL | | +| DELETED | bit(1) | YES | | NULL | | +| DESCRIPTION | varchar(255) | YES | | NULL | | +| LABEL | varchar(255) | NO | | NULL | | +| MODIFY_DATE | datetime | YES | | NULL | | +| POLICY_VERSION | varchar(255) | YES | | NULL | | ++----------------+--------------+------+-----+---------+-------+ +``` + +Kaydedilen her bir politika için C_POLICY tablosunda bir kayıt oluşturulmakta ve her bir kayıt ilgili politikaya +dair politika adı, açıklaması, oluşturulma tarihi ve sürümü gibi bilgileri tutmaktadır. Diğer belgelerde açıklandığı gibi bir +politika bir veya birden fazla profil kaydından oluşmaktadır ve politikaya ait herhangi bir profilin değiştirilmesi durumunda +politika üzerindeki sürüm değeri bir arttırılmaktadır. Bu sürüm değeri Ahenk'in politika sorguladığı durumlarda bir politikanın +değişip değişmediğinin anlaşılması için kullanılmaktadır. + +### C_COMMAND_EXECUTION + +``` ++----------------------+--------------+------+-----+---------+-------+ +| Field | Type | Null | Key | Default | Extra | ++----------------------+--------------+------+-----+---------+-------+ +| COMMAND_EXECUTION_ID | bigint(20) | NO | PRI | NULL | | +| CREATE_DATE | datetime | NO | | NULL | | +| DN | varchar(255) | YES | | NULL | | +| DN_TYPE | int(11) | YES | | NULL | | +| COMMAND_ID | bigint(20) | NO | MUL | NULL | | ++----------------------+--------------+------+-----+---------+-------+ +``` + +İşletilen her bir görev ve uygulanan her bir politika için C_COMMAND tablosunda bir kayıt oluşturulduğundan bahsetmiştik. Yapılan +bu işlemde kaç tane LDAP ögesi var ise, her biri için C_COMMAND_EXECUTION tablosunda birer kayıt oluşturulmaktadır. Örneğin; LDAP +ağacında 3 adet Ahenk ögesi seçilerek 'ekran görüntüsü al' görevi işletildiğinde, 1 adet C_COMMAND kaydı altında (her bir Ahenk +DN değerine karşılık) 3 adet C_COMMAND_EXECUTION kaydı oluşturulur. + +### C_COMMAND_EXECUTION_RESULT + +``` ++-----------------------------+------------+------+-----+---------+-------+ +| Field | Type | Null | Key | Default | Extra | ++-----------------------------+------------+------+-----+---------+-------+ +| COMMAND_EXECUTION_RESULT_ID | bigint(20) | NO | PRI | NULL | | +| AGENT_ID | bigint(20) | YES | | NULL | | +| CONTENT_TYPE | int(11) | YES | | NULL | | +| CREATE_DATE | datetime | NO | | NULL | | +| RESPONSE_CODE | int(11) | NO | | NULL | | +| RESPONSE_DATA | longblob | YES | | NULL | | +| RESPONSE_MESSAGE | text | YES | | NULL | | +| COMMAND_EXECUTION_ID | bigint(20) | NO | MUL | NULL | | ++-----------------------------+------------+------+-----+---------+-------+ +``` + +Detay tablo olarak görev yapan C_COMMAND_EXECUTION_RESULT tablosu işletilen her bir görev veya uygulanan her bir politika +ait sonuç mesajların saklanması için kullanılmaktadır. Buna göre daha önceki örnekten devam edersek, LDAP ağacında 3 adet +Ahenk ögesi seçilerek 'ekran görüntüsü al' görevi işletildiğinde, 1 adet C_COMMAND kaydı altında 3 adet C_COMMAND_EXECUTION +kaydı ve her bir C_COMMAND_EXECUTION kaydı altında 1 adet C_COMMAND_EXECUTION_RESULT kaydı oluşturulur. + +Bu tablonun detay tablo olarak yaratılması, görev veya politika sonucu olarak birden fazla sonucun döndürülebilmesine olanak sağlar. +Buna göre; örneğin (CPU, disk, RAM bellek gibi) sistem kaynaklarının belirli aralıklarla dinlendiği ve eşik değerin aşılmasıyla +uyarı mesajı döndürüldüğü bir görev işletilirken, eşik değer her geçildiğinde gönderilen görev sonucu bir C_COMMAND_EXECUTION_RESULT +kaydı olarak veritabanında tutulmaktadır. +