İyi Kullanımlar

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-state

State 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-state

State 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-delete
export HAPPY_STATE_ID="happy"
happy-state-delete

Gerektiği şekilde her paralel durum dosyasını manuel olarak kaldırın:

rm -f ~/.sunny_state.json
rm -f ~/.sunny_state.json.lock
rm -f ~/.happy_state.json
rm -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.

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.jsonKiş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.jsonBirincil Mutlu yapılandırma değişkenleri.
<path-to-happy>/happy/conf/log_config.jsonGü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()