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.
- 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()