Herhangi bir komutla ilgili yardım ve seçenek listesini görüntülemek için o happy-*
komutunu kullanarak -h
işaretini kullanın.
Durum dosyaları
Mutlu mağazalar ve tek bir kayıtla bir JSON dosyasında topoloji durumunu dikkatli bir şekilde korur. Bu durum dosyasını kullanan Happy, bir topoloji oluşturmak veya kaldırmak için uygun komutları çalıştırabilir.
Varsayılan durum dosyası şu konumdadır: ~/.happy_state.json
. Varsayılan durum adı, happy-state
çıkışında görüldüğü gibi happy
şeklindedir:
happy-state
State Name: happy
Paralel eyaletler
Mutlu, 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 varsayılan durum değeri (happy
) kullanılır.
Mutlu yükleme sırasında HAPPY_STATE_ID
oluşturulmaz. Hemen başka bir Mutlu durumuna geçmek için state
dışında bir değere sahip olan oluşturun.
export HAPPY_STATE_ID="sunny"
happy-state
sonuçlarının farklı bir durumda olup olmadığı kontrol ediliyor:
happy-state
State Name: sunny
Her eyalet, kendi ~/.${HAPPY_STATE_ID}_state.json
dosyasında tutulur. Eyaletler arasında geçiş yapmak için export HAPPY_STATE_ID="<state-name>"
komutunu tekrar çalıştırın.
Paralel durumlarla kaldırma
Paralel Mutlu durumları kullanıyorsanız ve Happy'yi kaldırmak istiyorsanız her bir eyaletin etkin olduğu happy-state-delete
değerini çalıştırdığınızdan emin olun. Bu, Mutlu tarafından oluşturulan tüm ağ adlarının, Linux ana makine ağ yapılandırmasını etkilemeden sisteminizden kaldırılmasını sağlar.
Örneğin, iki happy
ve sunny
durumlarına sahip:
export HAPPY_STATE_ID="sunny"
happy-state-delete
export HAPPY_STATE_ID="happy"
happy-state-delete
Her paralel durum dosyasını gerektiği şekilde 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
adresine gönderir. /tmp/${HAPPY_STATE_ID}_debug_log.txt
hesabına ikinci bir günlük kaydı gönderilir.
Mutlu günlükleri görüntülemek için happy-state -l
komutunu ayrı bir terminal penceresinde çalıştırın. Mutlu komutlar girdiğinizde, günlüklerde arka planda Mutlu sorunları kabuk komutları gösterilir. Bu, Linux ağı ad alanlarıyla ilgileniyorsanız Mutlu'un nasıl çalıştığını anlamanın iyi bir yoludur.
Örneğin, happy-node-add node00
Mutlu düğüm oluşturur. Bu komutun günlük çıkışı:
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'yi çağıran kabuk komutlarıdır.
Günlükteki her satırı düşünü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 hem Mutlu hem de OpenWeave veri havuzlarına örnek topolojiler eklenir. Karmaşık topolojiler oluşturma komutlarını öğrenmek için bunları da kullanabilirsiniz.
- Mutlu:
/topologies
- OpenWeave:
/src/test-apps/happy/topologies/standalone
Topolojiler JSON ve Shell Komut Dosyası biçimindedir.
JSON
JSON topoloji dosyaları, happy-state-load
veya weave-state-load
komutları kullanılarak yüklenir. Topolojide Weave bulunuyorsa topolojiyi yüklemek için weave-state-load
öğesini kullanmanız gerekir. Aksi takdirde Weave'e özel komutlar atlanır.
Örneğin, Weave olmadan bir topoloji:
happy-state-load thread_wifi_ap_internet.json
Weave ile 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 (örneğin, test durumu komut dosyası) happy-shell -s
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ı, karşılık gelen JSON dosyalarında topolojiler oluşturmak için Mutlu ve Weave komutları grubunu içerir. Bu komut dosyalarının varsayılan olarak yürütülebilir izinleri yoktur. Bunlar 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
Mutlu özelliğinin üç 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 ekleme
Özel Mutlu dağıtımınızın gerektirdiği varsayılan veya daha fazla kişisel ya da eklenti değişkenini ayarlamak için happy-configuration
komutunu kullanmanızı öneririz.
Örneğin, Mutlu'ya test komut dosyaları için Weave test-apps
dizinini nerede bulacağını bildirmek için 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
içindeki mağaza yapılandırma değişkenleri mutlu.
Düğümlerdeki işlemler
Mutlu, simüle edilmiş düğümlerdeki işlemleri başlatmak ve durdurmak için komutlar sağlar.
Bir iş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 Kesintisiz Arama, Mutlu'un işlemi yönetmek için kullandığı işleme ait kullanıcı tanımlı addır. Süreci yürütmeyi askıya almak için happy-process-wait
, işlemi kaldırmak için happy-process-stop
kullanın.
İşlem çıktısı /tmp
. Örneğin, GenericPing işlemini başlattıktan sonra /tmp
dizinini kontrol edin:
ls /tmp/happy*
/tmp/happy_018691_1524087014.192197_ContinuousPing.out
Bu .out
dosyası, ContinuePing işleminin sonucunu içerir.
sudo
kullanımı
Mutlu, Linux çekirdeki tarafından kontrol edilen ağ yapılandırmasını değiştirir.
Çekirdek yapılandırmasını yalnızca root
değiştirebileceğinden Mutlu 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ı çalıştırma
Yükleme işleminden sonra Mutlu 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()