วันศุกร์, มิถุนายน 26, 2558

บันทึก การ build และแก้ปัญหา เพื่อลง GitHub's friends บน Mac OSX

จะลองติดตั้ง GitHub friends, P2P chat powered

friends เป็น chat application ที่ใช้ technology ของ P2P (แบบเดียวกับ bittorrent)
GUI ใช้ electron หรือ atom-shell ที่ github ใช้สร้าง Atom editor และปล่อย open source ด้วย ไปอ่านความเจ๋งของมันได้ที่ site ของเค้าได้เลย ที่นี่

วันนี้มาทดลอง build เล่นดีกว่า เพราะหา binary release ไม่เจอ -_-

ก่อนจะเริ่ม build ต้องมีบัญชีกับ github ก่อน (เค้าบอกว่าในช่วงแรกใช้แบบนี้ไปก่อน)

ติดตั้ง module ที่ต้องใช้ในการตรวจสอบก่อน

$ npm i github-current-user -g

ทดสอบว่า github เชื่อมต่อกับ account เราได้หรือยัง

$ DEBUG=* github-current-user

  ghsign SSH_AUTH_SOCK +0ms /private/tmp/com.apple.launchd.G4BHMbX15X/Listeners
  github-current-user username from .gitconfig: dahoba +47ms
  github-current-user signing with "dahoba" +3ms
  ghsign ssh-agent public keys ...

ถ้ามีปํญหาที่ขั้นตอนนี้ให้ลองตรวจสอบว่า git config username ของเราตรงกับ github account ของเราหรือยัง

$ git config --global user.username
dahoba

อย่างตัวอย่างนี้ก็ต้องได้ account ผมใน github ออกมา ถ้ายังไม่ตรงต้องแก้ซะก่อน

เมื่อ clone ลงมาแล้ว ก่อนจะเริ่ม คำสั่งแรก ถ้ายังไม่มี leveldb ในเครื่องให้ลงก่อน วิธีติดตั้งที่สะดวกสำหรับผมคือใช้ Homebrew

$ brew install leveldb

พอจะสั่ง build step ที่ 2 npm run rebuild-leveldb เจอ error ก็เพราะว่า npm ในเครื่องเก่าไป เค้าต้องการ npm version ที่สูงกว่าหรือเท่ากับ 2.8.3

เราต้องติดตั้ง npm iojs node เป็น version อย่างน้อยตามที่เอกสารระบุ
io.js >= 1.8.1 และ npm >= 2.8.3 เมื่อเราติดตั้ง homebrew อยู่แล้วก็สั่งติดตั้งได้เลย

$ brew update
$ brew install node

เราจะได้ nodejs และ npm binary ติดตั้งในเครื่อง

ต่อไปติดตั้ง iojs สั่ง

$ brew install dahoba/iojs/iojs
$ brew link iojs

Formula homebrew-js ตัวข้างบนนี้ผม fork มาจากของ smockle/iojs/iojs เนื่องจากตอนทำครั้งแรก
ผมใช้ของ smockle แล้วพบว่าเป็น iojs v1.0.4 (เก่าไปอีก) เลยจัดการ fork เอา formula มาแก้ไขเป็น version ที่ต้องการ (เอา version ล่าสุดเลย v2.3.1)

ข้อสังเกต:
ถึงคุณจะไม่ใช้ formula พิเศษ ก็จะลง iojs ได้เหมือนกัน แต่มันจะมี message แบบว่า

This formula is keg-only.
iojs conflicts with node (which is currently more established)

ไม่ค่อยเข้าใจ แต่ googling ดูแล้วเห็นว่ามันต้องทำอะไรยุ่งยาก และได้ iojs version ที่เก่ากว่าที่ต้องการด้วย

เราต้องเลือกใช้ node หรือ iojs (ทำไมใช้ไปด้วยกันไม่ได้?)

  • เวลาจะใช้ node brew unlink iojs && brew link node
  • เวลาจะใช้ iojs brew unlink node && brew link --force iojs

หรือถ้าใช้บ่อยทำเป็น alias เลยก็ได้ จับใส่ใน ~/.bashrc หรือ ~/.zshrc

alias usenode="brew unlink iojs && brew link node && echo Updating NPM && npm install -g npm@latest && echo Using Node.js"
alias useio="brew unlink node && brew link --force iojs && echo Updating NPM && npm install -g npm@latest && echo Using io.js"

กราบส์ขอบคุณ gist อันนี้ :thumpup:

กลับมา rebuild-levelb กันต่อ ต้องกลับมาใช้ node ก่อน

$ usenode
$ npm run rebuild-leveldb

มันดูแปลกๆใช่มั้ย ที่เราไปเสียเวลาลง iojs แต่มาพิมพ์ usenode ก่อน compile แต่เหมือนว่าข้างใน script build มันมีการเรียกใช้ iojs นะ

คราวนี้ไม่มี error message อะไรแล้ว สั่ง npm start เพื่อเรียก friends ขึ้นมาเลย

friends on my machine

LOL จาก screenshot ไม่เจอใครเลย เพราะยังไม่มีใครมาเปิด friends ใน network เดียวกับผมน่ะสิ่ -_- เดี๋ยวรอเพื่อนโต๊ะทำงานๆใกล้ว่างก่อน จะส่ง friends แบบที่ build แล้วไปให้มาลองเล่นกัน

ไม่มีความคิดเห็น :