İyi Kullanımlar

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.

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