###### tags: `程式紀錄` # iota Chronicle deploy note , iota Chronicle 實作 有任何問題請發信至qsda82@smail.nchu.edu.tw ### 1. Chronicle 參考:https://github.com/iotaledger/chronicle.rs #### 必要條件: * A Linux LTS operating system such as Ubuntu * 4 GB RAM * At least 32 GB of disk space * 64-bit processor * Preferred a 10 Gbps network connection * At least 2 CPU cores (recommended) * Rust * At least one Scylla node (version 4 or greater) running on a different device in the same private network as Chronicle. #### 步驟: #### 1.安裝build-essentials packages ``` sudo apt-get install build-essential gcc make cmake cmake-gui cmake-curses-gui pkg-config openssl libssl-dev ``` #### 2.安裝Rust ``` curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh source "$HOME/.cargo/env" rustup update stable ``` #### 3.設定config檔 ``` ( version: 3, config: ( websocket_address: "127.0.0.1:8081", storage_config: ( keyspaces: [ ( name: "chronicle",#scylla設定的keyspaces名稱 data_centers: { "datacenter1": ( replication_factor: 1, ), }, ), ], listen_address: "127.0.0.1:8080", thread_count: CoreMultiple(1), reporter_count: 1, local_datacenter: "datacenter1", nodes: [ "192.168.1.212:9042",#scylla的ip port ], partition_config: ( partition_count: 1000, milestone_chunk_size: 8640, ), ), api_config: (), broker_config: ( websocket_address: "127.0.0.1:9000", mqtt_brokers: { MessagesReferenced: [ "tcp://192.168.1.210:1883", #hornet的ip port ], Messages: [ "tcp://192.168.1.210:1883", #hornet的ip port ], }, mqtt_stream_capacity: 10000, api_endpoints: [ "https://chrysalis-chronicle.iota.org/api/mainnet/",#主鏈網址 ], retries_per_endpoint: 5, retries_per_query: 100, collector_count: 10, requester_count: 10, request_timeout_secs: 5, parallelism: 25, sync_range: Some(( from: 1, to: 2147483647, )), complete_gaps_interval_secs: 3600, logs_dir: Some("/home/chronicle/chronicle.rs/log"), max_log_size: Some(4294967296), ), historical_config_path: "./historical_config", alert_config: ( requests: [], ), ), ) ``` #### 4.clone chronicle ``` git clone https://github.com/iotaledger/chronicle.rs cd chronicle.rs/ cargo build --release #執行chronicle之前要先設定與scylla&hornet的連線 cd target/release/ cargo run --release ``` #### 5.Chronicle API 詳細資料: https://legacy.docs.iota.works/docs/chronicle/1.1/tutorials/run-a-permanode https://legacy.docs.iota.works/docs/chronicle/1.1/references/chronicle-api-reference 在hashes欄位輸入交易的hash ``` curl http://localhost:4000/api \ -X POST \ -H 'Content-Type: application/json' \ -H 'X-IOTA-API-Version: 1' \ -d '{ "command": "getTrytes", "hashes": [""] }' ``` 回傳內容: ``` { "trytes":["BCDDPCADADXCBDVCEAKDXCHDWCEARBYBACXBOBCCEAHDXCDDGDTC9DTCRCHDQAEAHDWCPCBDZCEAMDCDIDEAUCCDFDEAIDGDXCBDVCEARBYBACXBOBCCEADD9DPCMDQCCDCDZCJ9MBCDIDBDHDDBEAVABBCBZAXACBJ9CCXCADTCGDHDPCADDDDBEAWAUAWAUARAUA9BRAWAZACCUACBDBZAXADBWAUAICJ9VCCCCCKBEAHDCDCDZCEAVASACBVA9BGDEAMASCTCDDHDWCGBVANA99999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999HORNET99INTEGRATED99SPAMMER9999999999999999999999999999999999999999999999999RAJIV999999999999999999999999999HORNET99SPAM99RAJIV9999IPZZNHURACD99999999999999999999WPEHMEK9QNNRXVTKQQUUZLREUYNIMUNFQXNIQBX9AGPPSCR99GACMAGXLPXVJXPIGBUFRTRXNLYOYBW9XNJLWELEHNVTWUKIGCJ9YWDNNABOJJPCZTYP9GRGGCJB9ZCJ9NPMWVETCIMTAKWAOK9LJSWVKJBEI99999NJLWELEHNVTWUKIGCJ9YWDNNABOJJPCZTYP9GRGGCJB9ZCJ9NPMWVETCIMTAKWAOK9LJSWVKJBEI99999HORNET99SPAM99RAJIV9999IPZZGHCVK9HQF999999999K99999999CI99999999LCWB9999999999999"],"milestones":[null] } ``` ### 2. Scylla 參考: https://www.scylladb.com/download/?platform=ubuntu-20.04&version=scylla-5.0#open-source https://ithelp.ithome.com.tw/articles/10234001 #### 步驟: #### 1.安裝scylla ``` sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys d0a112e067426ab2 sudo curl -L --output /etc/apt/sources.list.d/scylla.list http://downloads.scylladb.com/deb/ubuntu/scylla-5.0.list sudo apt-get update sudo apt-get install -y scylla sudo apt-get update sudo apt-get install -y openjdk-8-jre-headless sudo update-java-alternatives --jre-headless -s java-1.8.0-openjdk-amd64 #設定scylla一路按yes,除了中間一個步驟是專為RAID0,如果本身機器沒有做可以跳過。 sudo scylla_setup sudo systemctl start scylla-server #測試是否安裝成功,以下有錯誤訊息即為安裝失敗 nodetool status cqlsh sudo service scylla-server status ``` #### 2.設定config檔 /etc/scylla/scylla.yaml #### 要修改的內容: 改完記得sudo service scylla-server restart 並在chronicle機器上啟動chronicle ``` cluster_name: '你要的名字' listen_address: 0.0.0.0 broadcast_address: 0.0.0.0 rpc_address: 0.0.0.0 broadcast_rpc_address: 0.0.0.0 ``` 可能會出現改完config檔後,chronicle在連線時出錯的問題,解決方式是一次改一個,ex:先將listen_address改成0.0.0.0其餘維持原樣,再去開chornicle看會不會出錯,沒問題就改下一個broadcast_address改成0.0.0.0,改完一樣去開chornicle看會不會出錯,以此類推,一個一個去找問題點。 #### 3.建立資料庫 參考:https://ithelp.ithome.com.tw/articles/10235825 照理說設定完後連線chronicle會自動建立scylla資料庫,若沒有建立就要自己建 ``` descirbe KEYSPACE; create keyspace 你要的名稱 WITH replication={'class':'SimpleStrategy','replication_factor':3}; descirbe KEYSPACE; use 上方設定的名稱 ; descirbe KEYSPACE ``` #### 建立完後到chronicle config檔設定KEYSPACE名稱(name) ![](https://i.imgur.com/BpvrlJ5.png) ### 3.Hornet #### 步驟: #### 1.安裝hornet ``` sudo sh -c 'echo "deb http://ppa.hornet.zone stable main" >> /etc/apt/sources.list.d/hornet.list' sudo apt install gnupg sudo apt update wget -qO - https://ppa.hornet.zone/pubkey.txt | sudo apt-key add - sudo apt update cd /etc/apt/sources.list.d #更改hornet.list內容 sudo nano hornet.list """ deb [arch=amd64] http://ppa.hornet.zone stable main #加入這行 deb http://ppa.hornet.zone stable main """ sudo apt update sudo apt install hornet sudo service hornet restart sudo service hornet status #查看hornet狀況 ``` ### 4. 架構圖 #### chronicle會透過MQTT去監聽Hornet的節點資料,再將這些資料動態存到Scylla ![](https://i.imgur.com/jMZfddL.png)