Hyperledger Composer 安裝紀錄

陳奕熹
陳奕熹
Dec 25, 2018 · 7 min read

2018.12.24 參考自 Hyperledger Composer 官方文件 以及 基本概念与第一个区块链应用

相關的安裝流程在 IBM 相關網站已經講的非常清楚了,安裝流程就第一眼看起來非常的平易近人,如果你是用 Ubuntu 的話還有幫你寫好 Script 安裝相依環境工具(Mac就比較累要自己一個一個檢查)

不過事實上,光是安裝環境的事前準備就花了我至少兩到三小時,而且網路上相關的資料並不多(大多都是其他專案也出現類似的問題,有時候可以觸類旁通,有些原因則是完全沒關係; Hyperledger Composer 上的討論似乎很少講到環境安裝遇到的麻煩)

有鑑於之後可能還會拿出來用,然後他們寫的 script 在我的電腦上只有把部份的環境設定好,因此特別紀錄這次安裝的流程方便之後查閱


首先,根據 基本概念与第一个区块链应用 文章中最先提到的,我們要先建立一個對應的用戶登入帳號專門用來處理區塊鍊相關。這部份的操作在 Hyperledger Composer 官方文件 是沒有提到的,不過我個人覺得這是一個很好的想法,畢竟我也不想把軟體環境搞得很複雜,像是機器學習一個帳號,區塊鍊一個帳號這樣管理起來也比較方便

# (sudo) adduser fabric

建立一個新的使用者帳戶,畢竟是這種系統性的操作需要 root 權限也不意外,不過輸入完指令後還是會跳出一些細節設定問題(當然也可以按 Enter 直接跳過)

# (sudo) usermod -aG sudo fabric

把這個帳戶加到 sudo 這個群組中,這樣一來它才可以透過 sudo 這樣的指令前綴提權到 root; 最後因為涉及到 chmod 以及 root 這樣的權限問題,需要用到 sudo 也是很合理的

# su fabric  /*切換到 fabric 這個帳號*/$ cd ~ /*切帳號並不會跟著跳到該帳號的根目錄,所以還要加這一步*/$ (sudo) curl -O https://hyperledger.github.io/composer/latest/prereqs-ubuntu.sh 
/*下載環境設定腳本,這邊我自己跑得時候 Permission Denied, 所以才用 sudo*/
$ (sudo) chmod u+x prereqs-ubuntu.sh
/*給該腳本可以在這個帳戶下執行的權限*/
$ (sudo) ./prereqs-ubuntu.sh
/*由於可能要 apt-get 裝一些工具,所以可能要給 sudo 提權*/

根據文章的指示,到這邊就應該可以跳出

Installation completed, versions installed are:Node:             v8.11.1npm:              5.8.0Docker:           Docker version 18.03.0-ce, build 0520e24Docker Compose:   docker-compose version 1.13.0, build 1719cebPython:           Python 2.7.12Please logout then login before continuing.

這樣美美的畫面,但是事實上不是這樣的;首先是相依檔案下載失敗,錯誤訊息大概是長這樣的

... the repository 'https://ppa.launchpad.net/pinta-maintainers/pinta-stable/ubuntu xenial Release' does not have a Release file ...

看到這個錯誤訊息,我第一個直覺是 「該不會是因為 script 版本太舊,抓到沒繼續維護的 ppa ?」 ,上網找了一下才發現有兩種可能,「PPA忘了加」「PPA太多搞混」,我的是後者,事實上它只需要 git-core 的 ubuntu xenial release, launchpad 的那個是不知道過去什麼時候,因為要裝什麼套件加進來的

要怎麼解決其實也很簡單,就是在 update manager 裡面設定把 launchpad 的 PPA 取消掉就好了

不過最後我跑出來的結果是

Installation completed, versions installed are:Node:             v11.X.Xnpm:              6.4.0Docker:           Docker version 18.03.0-ce, build 0520e24Docker Compose:   docker-compose version 1.13.0, build 1719cebPython:           Python 3.XPlease logout then login before continuing.

我當時候看到這個結果直接當作成功了,完全沒有注意裡面數字的細節,這也導致我後來的悲劇

不過根據,我們現在需要重新登入 fabric 這個帳號,才能把剛剛的設定載進來

但是我登入 fabric 這個帳號,「完全沒有畫面」,桌面顯示

... nautilus: unable to create a required folder ...

看得出來是新建立的這個帳戶權限設定有問題,nautilus 沒有權限讀取

$ sudo chown -R fabric:fabric /home/fabric

最後就是要安裝 composer-cli 這樣的應用了,安裝一開始是提示

nvm is not compatible with the npm config “prefix” option: currently set to “/usr/local” Run “npm config delete prefix” or “nvm use — delete-prefix v6.11.1 — silent” to unset it.

這是因為安裝過成功需要用到的 NVM 相依函式庫並不是要用系統預設路徑(/usr/local),而是要用下載下來放在 .nvm 這個隱藏資料夾中的函式庫(大概是包含特定版本的函式庫),就算偷偷用 sudo 也會出現

user npm ERR! “Error: EACCES: permission denied, access ‘/usr/local/lib/node_modules’”

不給你寫入 /usr/local/lib/node_modules,事實上這邊提到的 node_modules 也被包含在下載下來的 .nvm 資料夾當中

此時需要根據 terminal 上提示 Delete and Reset the prefix

把要用到的函式庫導到 .nvm 資料夾下面(.nvm 位置可能會改動,真的找不到可以用指令 find . -name .nvm

$ npm config delete prefix 
$ npm config set prefix .nvm/versions/node/vXX.XX.X

最後開始編譯該程式,不過過程中可以看到非常多令人懷疑的編譯時期錯誤

... __abc is not defined before ... not support __type ....

看起來非常的怪異,首先不太可能是程式本身的錯誤(雖然它跳出來的都是這類編譯時期的錯誤)因為這個 script 已經被很多人使用過了,開源的東西爛成這樣是不可能名氣這麼高的;仔細想了一下還有可能造成這種整體語法錯誤的,就是 「編譯規格不同」了,像是 python 3 與 python 2.7 就是兩種不相容的語言版本,這也就是前面提到的 「後來的悲劇」

如果你仔細的看一下前面的 prereqs-ubuntu.sh 在寫什麼,你會發現它內容出乎意料的簡短且容易理解,主要是透過 apt-get安裝像是 git 等等基本工具,沒有 OS 支援的安裝套件就用 curl 載,然後用 nvm (node version manager) 這類管理環境版本,最後把環境版本印出來(大部分的指令加 --version都可以看到版本號)

不過糟就糟在這裡,不知道為什麼我的 nvm use 8 這個指令只會調整 nvm的版本,所以我後來是用 n 這個套件設定我的 node版本,然後再透過 alias python='/usr/bin/python2.7 調整到對應版本

更改到這邊套件就可以成功安裝了


後記:

當初 adduser fabric 之後, su fabric 之後設定權限那邊我根據網路找到的指令 sudo chown -R fabric:fabric . 輸入,卻沒發現「透過 su轉換使用者」這件事並不會幫你跳到對應使用者的根目錄(我覺得這件事蠻奇怪的,因為使用者之間可能沒有可以互相讀取的權限),然後因為這行設定我把原本帳號的擁有者全部改到 fabric 底下,導致 Ubuntu 無法登入該帳號,遠端連線進去會因為 .Xauthority 認證不合所以會 timeout(但是還是可以正常連線)

Welcome to a place where words matter. On Medium, smart voices and original ideas take center stage - with no ads in sight. Watch
Follow all the topics you care about, and we’ll deliver the best stories for you to your homepage and inbox. Explore
Get unlimited access to the best stories on Medium — and support writers while you’re at it. Just $5/month. Upgrade