Bir happy-* komutuyla birlikte -h işaretini kullanarak ilgili komutun yardım sayfasını ve seçenek listesini görüntüleyebilirsiniz.
Eyalet dosyaları
Mutlu mağazalar ve tek bir kayıt içeren bir JSON dosyasında topoloji durumunu dikkatlice korur. Happy, bu durum dosyasını kullanarak bir topoloji oluşturmak veya kaldırmak için uygun komutları çalıştırabilir.
Varsayılan durum dosyası ~/.happy_state.json adresinde bulunur. Varsayılan durum adı, happy-state çıkışında görüldüğü gibi happy'tir:
happy-stateState Name: happy
Paralel eyaletler
Happy, birlikte var olan birden fazla paralel durumu destekler. Mevcut durum HAPPY_STATE_ID ortam değişkeni tarafından belirlenir. Ortamda HAPPY_STATE_ID yoksa happy değerinin varsayılan durumu kullanılır.
Mutlu yükleme sırasında HAPPY_STATE_ID oluşturulmadı. Hemen başka bir Mutlu durumuna geçmek için state dışında bir değere sahip bir durum oluşturun.
export HAPPY_STATE_ID="sunny"
Şimdi farklı bir eyaletteki happy-state sonuçlarını kontrol ediyoruz:
happy-stateState Name: sunny
Her durum kendi ~/.${HAPPY_STATE_ID}_state.json dosyasında tutulur. Durumlar arasında geçiş yapmak için export HAPPY_STATE_ID="<state-name>" komutunu tekrar çalıştırın.
Paralel eyaletler ile kaldırma
Paralel Mutlu durumları kullanıyorsanız ve Mutlu'yu kaldırmak istiyorsanız her durum etkinken happy-state-delete'yi çalıştırdığınızdan emin olun. Bu sayede, Happy tarafından oluşturulan tüm ağ ad alanlarının Linux ana makine ağ yapılandırmasını etkilemeden sisteminizde kaldırılmasını sağlayabilirsiniz.
Örneğin, happy ve sunny olmak üzere iki durum varsa:
export HAPPY_STATE_ID="sunny"happy-state-deleteexport HAPPY_STATE_ID="happy"happy-state-delete
Gerektiği şekilde her paralel durum dosyasını manuel olarak kaldırın:
rm -f ~/.sunny_state.jsonrm -f ~/.sunny_state.json.lockrm -f ~/.happy_state.jsonrm -f ~/.happy_state.json.lock
Günlükler
Mutlu, günlükleri varsayılan olarak syslog hedefine gönderir. /tmp/${HAPPY_STATE_ID}_debug_log.txt adresine ikinci bir günlük yedeği gönderilir.
Happy günlüklerini görüntülemek için ayrı bir terminal penceresinde happy-state -l komutunu çalıştırın. Happy komutları girdiğinizde günlükler, arka planda Happy sorunlarını gösteren kabuk komutlarını gösterir. Linux ağ ad alanlarıyla ilgileniyorsanız bu yöntemi kullanarak Mutlu'nun işleyiş şeklini anlayabilirsiniz.
Örneğin, happy-node-add node00 mutlu bir düğüm oluşturur. Bu komutun günlük çıkışı şu şekildedir:
DEBUG [HappyHost:_namespaceExists():56] Happy: namespace happy000 does not exist DEBUG [Driver:writeState():365] Happy: writing Happy state to file DEBUG [Driver:CallCmd():416] Happy [happy]: > sudo ip netns add happy000 DEBUG [HappyHost:_namespaceExists():56] Happy: namespace happy000 exists DEBUG [Driver:CallCmd():416] Happy [happy]: > sudo ip netns exec happy000 ifconfig lo up
Tüm Driver:CallCmd() satırları, Happy'nin çağırdığı kabuk komutlarıdır.
Günlükteki her satırı dikkate alın:
# Check to see if the target namespace (happy000) exists DEBUG [HappyHost:_namespaceExists():56] Happy: namespace happy000 does not exist # Write the link between node00 and happy000 in ~/.happy_state.json DEBUG [Driver:writeState():365] Happy: writing Happy state to file # Create the network namespace for the node DEBUG [Driver:CallCmd():416] Happy [happy]: > sudo ip netns add happy000 # Check to see if the target namespace (happy000) exists DEBUG [HappyHost:_namespaceExists():56] Happy: namespace happy000 exists # Bring up the loopback interface within the happy000 namespace DEBUG [Driver:CallCmd():416] Happy [happy]: > sudo ip netns exec happy000 ifconfig lo up
Örnek topolojiler
Test için örnek topolojiler hem Happy hem de OpenWeave depolarına dahil edilmiştir. Ayrıca, karmaşık topolojiler oluşturma komutlarını öğrenmek için de bu kaynaklardan yararlanabilirsiniz.
- Mutlu:
/topologies - OpenWeave:
/src/test-apps/happy/topologies/standalone
Topolojiler JSON ve kabuk komut dosyası biçimindedir.
JSON
JSON topoloji dosyaları, happy-state-load veya weave-state-load komutları kullanılarak yüklenir. Topoloji Weave'ı içeriyorsa topolojiyi yüklemek için weave-state-load kullanmanız gerekir. Aksi takdirde Weave'a özel komutlar atlanır.
Örneğin, Weave içermeyen bir topoloji:
happy-state-load thread_wifi_ap_internet.json
Örgü içeren bir topoloji:
weave-state-load three_nodes_on_thread_weave.json
Mevcut topolojinizi daha sonra kullanmak üzere ayrı bir JSON dosyası olarak kaydetmek için (ör. test senaryosu komut dosyası) happy-shell -s simgesini kullanın:
happy-shell -s my_topology.json
Bu işlem, topoloji durum dosyasını $HOME dizinine kaydeder.
Kabuk komut dosyaları
Kabuk komut dosyası topoloji dosyaları, ilgili JSON dosyalarında topolojileri oluşturmak için Happy ve Weave komutları grubunu içerir. Bu komut dosyalarının varsayılan olarak yürütülebilir izinleri yoktur. Bu testler iki şekilde çalıştırılabilir:
bash komutunu kullanarak:
bash thread_wifi_ap_internet.sh
Yürütülebilir izinler uygulayarak:
chmod +x thread_wifi_ap_internet.sh./thread_wifi_ap_internet.sh
Yapılandırma
Happy'in üç yapılandırma dosyası vardır:
| Yapılandırma dosyası | Açıklama |
|---|---|
~/.happy_conf.json | Kişisel veya eklenti kullanımı için yapılandırma değişkenleri. Bu değerleri happy-configuration komutunu kullanarak ayarlayın. |
<path-to-happy>/happy/conf/main_config.json | Birincil Mutlu yapılandırma değişkenleri. |
<path-to-happy>/happy/conf/log_config.json | Günlük yapılandırması. |
Yapılandırma değişkenleri ekleyin
Happy dağıtımınız için gereken varsayılanların dışındaki kişisel veya eklenti değişkenlerini ayarlamak üzere happy-configuration komutunu kullanmanızı öneririz.
Örneğin, test komut dosyaları için Weave test-apps dizinini nerede bulacağını Happy'ye bildirmek üzere weave_path değişkenini ayarlayın:
happy-configuration weave_path <path-to-openweave-core>/build/x86_64-unknown-linux-gnu/src/test-apps
~/.happy_conf.json konumundaki mutlu mağazalar yapılandırma değişkenleri.
Düğümlerdeki işlemler
Happy, simüle edilmiş düğümlerdeki işlemleri başlatmak ve durdurmak için komutlar sağlar.
İşlem başlatmak için:
happy-process-start <node-name> <custom-process-name> <command>
Örneğin, ThreadNode adlı bir düğümde sürekli olarak ping çalıştırmak için:
happy-process-start ThreadNode ContinuousPing ping 8.8.8.8
Yukarıdaki örnekte, ContinuousPing, Happy'nin süreci yönetmek için kullandığı işlemin kullanıcı tanımlı adıdır. İşlem yürütmeyi askıya almak için happy-process-wait, işlemi sonlandırmak için happy-process-stop kullanın.
İşlem çıkışı /tmp dilinde. Örneğin, ContinuousPing işlemini başlattıktan sonra /tmp dizinini kontrol edin:
ls /tmp/happy*/tmp/happy_018691_1524087014.192197_ContinuousPing.out
Bu .out dosyası, ContinuousPing işleminin çıktısını içerir.
Kullanım: sudo
Happy, Linux çekirdeği tarafından kontrol edilen ağ yapılandırmasını değiştirir.
Çekirdek yapılandırmasını yalnızca root değiştirebileceğinden, Happy işlem sırasında sudo şifresini girmenizi ister.
Mutlu, sudo işlevini çağırmak için $SUDO sistem ortam değişkenini kullanır. $SUDO tanımlı değilse Mutlu, normal bir sudo çağrısı yapar.
Python komut dosyası yazma
Yüklemeden sonra Happy Python paketleri aşağıdaki import ifadesi kullanılarak bir Python ortamına aktarılabilir:
import happy
/happy içinde bulunan bağımsız komut modülleri aşağıdaki şekilde içe aktarılır:
import happy.HappyNodeAdd
Modül seçeneklerini almak için option() işlevini çağırın. Örneğin, HappyNodeAdd modülü seçeneklerini almak için:
module options import happy.HappyNodeAdd options = happy.HappyNodeAdd.option()