Planet Linux of Taiwan

02月16日

Jollen's face
Jollen


縮小 展開

Blockchain Developer - 快速認識 Proof-of-Stake

除了 Proof-of-Work(PoW)外,還有其它「形成共識」的做法嗎?除了 Proof-of-Work 外,還有一種稱之為 Proof-of-Stake(PoS)的共識系統... 本文章採用 Markdown 語法撰寫,若無法完整閱讀全文,請點擊這裡。 # Blockchain Developer - 快速認識 Proof-of-Stake 前一篇文章提到的 Proof-of-Work 是利用「運算」的方式來取得「共識」。除了 Proof-of-Work(PoW)外,還有其它「形成共識」的做法嗎?除了 Proof-of-Work 外,還有一種稱之為 Proof-of-Stake(PoS)的共識系統。不像 PoW 是以運算做為基礎,PoS 以「權益」做為基礎,來決定挖礦的難度。 除了 PoW 與 PoS 外,還有其它不同的共識系統: * PBFT[1] (Practical Byzantine Fault Tolerance - 拜占庭容錯算法) * Paxos /...

AppleBOY's Blog's face
AppleBOY's Blog


縮小 展開

用 Golang 寫 Command line 工具

Go-brown-side.sh 如果你要寫 Command line 工具,又想在各平台 (像是 MacOS, Windows 或 Linux) 上執行,這時候 Golang 就是您最好的選擇。在 Reddit 讀到一篇 Command line 工具比較介紹,這篇最主要講到兩個 CLI 工具,一個是 urfave/cli,另一個是 spf13/cobra,這兩個工具其實都非常好用,後者是去年加入 Google Golang 團隊spf13 所開發,該作者加入 Google 後呢,非常的忙,但是強者他同事有幫忙繼續維護 cobra 專案,兩個 CLI 工具各自都有有大型專案使用 urfave/cli 有 docker/libcompose, docker/machine, Drone, Gitea, Gogs 等,而後者 spf13/cobra 則有 docker, docker/distribution, etcd 等。本篇筆者會介紹 urfave/cli 該如何使用?

用 Golang 內建 flag 套件

其實 Golang 本身就有支援 Command line 功能,只要 import flag 就可以直接使用了
package main

import (
    "flag"
    "fmt"
    "os"
)

func main() {
    var showVersion bool

    flag.BoolVar(&showVersion, "version", false, "Print version information.")
    flag.BoolVar(&showVersion, "v", false, "Print version information.")
    flag.Parse()

    // Show version and exit
    if showVersion {
        fmt.Println("Version 1.0.0")
        os.Exit(0)
    }
}
存檔成 main.go,執行 go build -o main 就可以產生 main 執行檔,最後可以直接下 ./main -v 畫面就會顯示 Version 1.0.0。但是如果 flag 非常多,寫起來就會相當長,也不支援讀取 Environment 環境變數,這時候我們可以透過 urfave/cli 來簡化此流程。上面的範例可以在底下連結找到

用 Golang flag 寫 Command Line

使用 urfave/cli 套件

底下是一個簡單範例,可以從 command line 讀取使用者帳號密碼
package main

import (
    "fmt"
    "os"

    "github.com/urfave/cli"
)

type (
    // Config information.
    Config struct {
        username string
        password string
    }
)

var config Config

func main() {
    app := cli.NewApp()
    app.Name = "Example"
    app.Usage = "Example"
    app.Action = run
    app.Flags = []cli.Flag{
        cli.StringFlag{
            Name:  "username,u",
            Usage: "user account",
        },
        cli.StringFlag{
            Name:  "password,p",
            Usage: "user password",
        },
    }

    app.Run(os.Args)
}

func run(c *cli.Context) error {
    config = Config{
        username: c.String("username"),
        password: c.String("password"),
    }

    return exec()
}

func exec() error {
    fmt.Println("username:", config.username)
    fmt.Println("password:", config.password)

    return nil
}
從上面例子可以發現從 Name 就可以定義 Flag 名稱,用逗號分格,在命令列就可以使用 -u--username,也會自動幫忙產生完整的 help 畫面 Screen Shot 2017-02-16 at 2.27.11 PM

支援環境變數

在 Golang 可以快速的將執行檔打包成 Docker Image
FROM centurylink/ca-certs

ADD main /

ENTRYPOINT ["/main"]
在 Dockerfile 內使用參數可以透過 CMD 會變成底下
FROM centurylink/ca-certs

ADD main /

ENTRYPOINT ["/main"]
CMD ["-u", "appleboy"]
這樣非常麻煩,這時候就要讓 CLI 也支援環境變數,將 cli.StringFlag 改成如下
    app.Flags = []cli.Flag{
        cli.StringFlag{
            Name:   "username,u",
            Usage:  "user account",
+           EnvVar: "DOCKER_USERNAME",
        },
        cli.StringFlag{
            Name:   "password,p",
            Usage:  "user password",
+           EnvVar: "DOCKER_PASSWORD",
        },
    }
直接在命令列執行 DOCKER_USERNAME=appleboy ./main,則就會抓到 DOCKER_USERNAME 環境變數,在 Docker 指令就可以補上 -e 參數來實現變數傳遞:
$ docker run -e DOCKER_USERNAME=appleboy appleboy/cli

結論

把 Golang 執行檔包進去 Docker Image,就可以再任意環境內執行,如果你不想使用 Docker Image 也沒關係,Golang 支援跨平台編譯,底下是支援 Windows, Linux, MacOS 編譯參數
    GOOS=linux   GOARCH=amd64 CGO_ENABLED=0 go build -o bin/main-linux
    GOOS=windows GOARCH=amd64 CGO_ENABLED=0 go build -o bin/main.exe
    GOOS=darwin  GOARCH=amd64 CGO_ENABLED=0 go build -o bin/main-darwin
自從學了 Golang,讓用 Windows 工作的同事,也可以享用 Golang 的好處。上述範例檔案可以參考底下連結

用 urfave/cli 寫 Command Line

02月14日

FourDollars's face
FourDollars


縮小 展開

在 Ubuntu 16.04 上面製作 FreeDOS 開機的 USB 隨身碟

首先是安裝 makebootfat 這個套件。


$ sudo apt install makebootfat

然後就可以參考 /usr/share/doc/makebootfat/README.Debian 這份文件來製作 FreeDOS 開機的 USB 隨身碟,只不過文件內容有點錯誤,所以我根據我的喜好調整了一下,以下假設 USB 隨身碟的 device node 在 /dev/sdb。


$ mkdir ~/tmp/fs-root
$ cd ~/tmp

$ wget http://www.ibiblio.org/pub/micro/pc-stuff/freedos/files/distributions/1.0/pkgs/kernels.zip
$ unzip kernels.zip source/ukernel/boot/fat*.bin
$ cp -v source/ukernel/boot/fat*.bin .

$ wget http://www.ibiblio.org/pub/micro/pc-stuff/freedos/files/distributions/1.0/pkgs/commandx.zip
$ wget http://www.ibiblio.org/pub/micro/pc-stuff/freedos/files/distributions/1.0/pkgs/unstablx.zip
$ unzip commandx.zip bin/command.com
$ unzip unstablx.zip bin/kernel.sys
$ cp -v bin/kernel.sys bin/command.com fs-root/

$ sudo makebootfat -o /dev/sdb -L FreeDOS -E 255 -1 fat12.bin -2 fat16.bin -3 fat32lba.bin -m /usr/lib/syslinux/mbr/mbr.bin fs-root/

這樣就可以產生 FreeDOS 開機的 USB 隨身碟,不過真正在使用時似乎還是會遇到一些相容性的問題,像是我在 Dell 電腦的 Legacy BIOS mode 都可以正常使用,但是在我自己的 Lenovo ThinkPad X200 上面就不能用。

2017/02/14 補充:做了一個快速使用的腳本程式 mkfreedos.sh

02月13日

TOSSUG's face
TOSSUG


縮小 展開

[TOSSUG 03/14] 打造 Infrastructure Agility Mode 2 的基石 – Docker / Container by 王偉任

課程簡介:
根據知名市調機構Gartner的統計調查結果,從2016年開始有「2/3 以上」的企業及組織
,將開始建構及整合「Mode 2」的敏捷式 IT 基礎架構,所謂「基礎架構敏捷化」
(Infrastructure Agility),便是著重於 IT 基礎架構中「Mode 2」的部分以便因應商業
數位化的需求。

此外,根據 Gartner 的預測,在 2017 年時全球大型企業中將有高達「75 %」的比例,
會建立 Mode 1 及 Mode 2 的雙重 IT 基礎架構稱之為「Bimodal IT」。在傳統 Mode 1
當中的工作負載、技術、流程、部署模式已經行之有年無須再驗證,但 Mode 2 是新興的
方式並在根本上與 Mode 1 不同,它強調的是「敏捷性」(Agility)與「可擴充性」
(Scalability)以提高開發人員的生產力,達到快速推出新服務的一種方式,舉例來說,
「容器」(Container)技術可以幫助開發人員達到更好的敏捷性。簡單來說,傳統的
Mode 1 運作架構專注於「基礎架構管理」,而新興的 Mode 2 則是專注於「工作負載為
中心」。

在本次聚會中將快速與大家討論及實作,如何透過Microsoft Azure公有雲環境,快速建
立ubuntu、CentOS、FreeBSD虛擬主機,並且安裝及建立Docker容器測試環境。同時,也
將實作及展示Windows Server 2016 Container容器環境。

講師簡介:
王偉任 (weithenn.org)

Microsoft MVP / VMware vExpert 及網管人雜誌技術專欄作家。曾擔任台灣微軟
TechDays、TechNet、MMS 管理技術高峰論壇、MVP 技術關卡破解日…等研討會講師,專
長為 Windows / Unix-Like 作業系統 HA 高可用性、儲存、伺服器虛擬化、VDI 虛擬桌
面整合解決方案,著有 Windows Server 2012 R2 Hyper-V 3.0 虛擬化環境實戰 (初級篇
)、Windows Server 2012 R2 Hyper-V 3.0 叢集雲端架構實戰 (高級篇)…等多本著作。

活動詳細資訊與報名:

02月12日

Micro Focus Authorized Instructor

自從 Novell 被 Micro Focus 併購後,我也好一陣子沒再針對 Novell 的產品與認證進行深究,前幾天收到 Micro Focus 寄來的新版講師證照,相關權益基本上與之前的 Novell CNI 相同,不過台灣現在很少 SUSE Linux課程了,所以發文紀念一下 ^^

 

02月11日

shelandy's face
shelandy


縮小 展開

在ibook G4 上安裝lubutu 16.04

基本上就跟這一篇在ibook G4 上安裝ubutu mate 15.10 步驟一樣,不過lubutu 16.04 已經把http://ports.ubuntu.com/加進去了,預設軟體管理換成synaptic,省掉很多麻煩


系統基本設定裝完後,第一件事先做套件更新,然後把字形之類的介面設定調一下,安裝hime 中文輸入跟其他個人需要的軟體。老機又可以嚇嚇叫了

在這種10幾年老機上。跑LXDE 速度真的比mate 還快,比起之前的使用經驗好很多。只可惜lubutu 的powerPC 版久久才改版一次,不過對我而言12"螢幕等於隨身帶個大號的平版,感覺比10" 的平版跑被閹割的作業系統來的方便。感覺比較省電:同樣舊電腦,core 2 due 三兩下就沒電了。這個可以撐3 小時。所以不需要大量運算的場合用這還比較方便。

目前遇到問題


sensord 是我在x86 系統上愛用的溫度監視器,但是我照x86 上經驗跑sensord-detect 這一些程式都出不來,所以先放棄
再則面板上氣象溫度我沒有辦法正確搜尋當地地理位置,不過這機子不是工作主力,也就先擱著
之前裝gnome 3-based 發現ibus 會跟hime 衝突。這邊目前還沒看到這樣情況,但是fcix 反而跟系統綁在一起不容易拿掉。就先放著不動他

02月10日

TOSSUG's face
TOSSUG


縮小 展開

[TOSSUG 2/14] 物聯網,你可能會需要考量的事 by StarNight

摘要:
物聯網是一門透過通訊,將端點蒐集到的資料,集中關聯分析,並將分析結果用以決策並回饋的工程藝術。
本次的分享將從物聯網的目的當作進入點,接著分享可能的佈署架構。並概述目前各個常用的通訊標準、協定,以及其所屬的角色。
除此之外,也會分享去年到柏林參加Linux Foundation舉辦的Open IoT Summit Europe 2016的心得。
在此,帶回一些國外對於物聯網節點的佈署、更新或維護的看法、作法。
另外,也會分享一些物聯網可能需要考量的資訊安全議題。

IoT is a kind of engineering art, which analyzes the collected data from the device nodes through the communication and has the result for the decision making and feedback.
This sharing goes for the purpose of IoT and it's deployment structure.
Then, the slide introduces the most used communication standards or protocols in IoT and their roles.
Besides, also shares what I have got from the Open IoT Summit Europe 2016 which was held by Linux Foundation in Berlin last year.
It introduces how will the device nodes be deployed, updated and maintained.
Finally, the slide provides some security issues that should be considered in IoT.

by StarNight