2017年11月26日 星期日

線上編輯與分享 Debian 與 Ubuntu 的自動安裝設定

多年前在弄 https://fourdollars.github.io/d-i/ 時,就已經想到這個主意了,趁這個週末有點時間就用 Python Flask 硬幹出來。

主要是利用下面的機制做出來的:

運作的原理是根據使用者的 IPv4 位址來儲存設定檔,所以另一台透過同樣的 IPv4 位址就可以拿到同一份設定檔,分享的時候也是透過分享 IPv4 位址來達成,但是只有該 IPv4 位址的使用者才能夠編輯給該 IPv4 位址使用的設定。

專案網址:https://fourdollars.github.io/diaas/

我另外弄了一個專門給 Ubuntu 台灣中文社群的通用設定在 https://sylee.org/d-i/?share=08080808,點進去後按下 Save 就可以使用了。

debian-installer (d-i) and preseed.cfg

There is an "Auto mode" while automating the Debian/Ubuntu installation using preseeding.

You can check Debian's or Ubuntu's documentions for details.

Basically if we have prepared a "preseed.cfg" at some right place, like http://example.com/d-i/stretch/preseed.cfg, and then we can use "auto url=example.com" to install Debian stretch by that "preseed.cfg".

"preseed.cfg" is usually a static file so I come out some ideas. How about making it dynamic and we can share it to others.

If you are interested, please check https://fourdollars.github.io/diaas/.

2017年11月23日 星期四

Python 套件的安全檢查 safety

使用 Python 來建立專案常常會需要拉一些額外的套件進來使用,然而有時候專案已經穩定不再增加新功能也不再修正錯誤時,就是只放著讓它在那邊自己跑著,只是說這個專案使用到的額外的套件難免會有一些未知的安全問題,這時候該怎麼辦呢?

於是我找到了 https://pypi.python.org/pypi/safety

執行

$ pip install safety
安裝起來,然後再執行
$ safety check
就可以看到結果。

或者是可以直接檢查 requirements.txt 這個檔案。

$ safety check -r requirements.txt
╒══════════════════════════════════════════════════════════════════════════════╕
│                                                                              │
│                               /$$$$$$            /$$                         │
│                              /$$__  $$          | $$                         │
│           /$$$$$$$  /$$$$$$ | $$  \__//$$$$$$  /$$$$$$   /$$   /$$           │
│          /$$_____/ |____  $$| $$$$   /$$__  $$|_  $$_/  | $$  | $$           │
│         |  $$$$$$   /$$$$$$$| $$_/  | $$$$$$$$  | $$    | $$  | $$           │
│          \____  $$ /$$__  $$| $$    | $$_____/  | $$ /$$| $$  | $$           │
│          /$$$$$$$/|  $$$$$$$| $$    |  $$$$$$$  |  $$$$/|  $$$$$$$           │
│         |_______/  \_______/|__/     \_______/   \___/   \____  $$           │
│                                                          /$$  | $$           │
│                                                         |  $$$$$$/           │
│  by pyup.io                                              \______/            │
│                                                                              │
╞══════════════════════════════════════════════════════════════════════════════╡
│ REPORT                                                                       │
│ checked 101 packages, using default DB                                       │
╞════════════════════════════╤═══════════╤══════════════════════════╤══════════╡
│ package                    │ installed │ affected                 │ ID       │
╞════════════════════════════╧═══════════╧══════════════════════════╧══════════╡
│ pillow                     │ 3.2.0     │ <3.3.2                   │ 33138    │
│ pillow                     │ 3.2.0     │ <3.3.2                   │ 33139    │
│ cryptography               │ 1.3.1     │ <1.5.3                   │ 25680    │
│ httplib2                   │ 0.9.2     │ <=0.9.2                  │ 25848    │
│ mistune                    │ 0.7.1     │ <0.7.2                   │ 25890    │
│ rsa                        │ 3.2.3     │ <3.3                     │ 33164    │
│ rsa                        │ 3.2.3     │ <3.4                     │ 26112    │
╘══════════════════════════════════════════════════════════════════════════════╛

看樣子只要將版本更新上去就沒問題了,當然原本專案的某些地方可能會跟著壞掉需要再修正一下。

最後是 https://pyup.io/ 對 GitHub 提供了 CI 的服務,public repo 可以免費使用。

2017年7月10日 星期一

自製 Ubuntu 16.04/16.04.1/16.04.2/16.10/17.04 測試硬體安裝使用的 USB 隨身碟

與「自製 Ubuntu 13.04/12.10/12.04.2 與 Debian 7.0 測試硬體安裝使用的 USB 隨身碟」同樣的步驟只是改用 grub.cfg 這個設定檔。

因為我是放在 8GB 的 USB 隨身碟上面,所以放這幾個 amd64 ISO 檔案就塞滿了。

另外我發現前一篇文章中的 usb-creator-gtk -n -i ubuntu-13.04-desktop-amd64.iso 這個步驟是多餘的,其實使用 grub-install 就夠了,還有這邊的 UEFI 模式不會支援 Secure Boot 因為 GRUB 的安全設定的關係。

2017年6月19日 星期一

拿到了 GNOME foundation membership

最近 GNOME 有推出個 Become a Foundation member 的活動,如果以前對 GNOME 做過不少貢獻就可以去申請成為會員,當然還要經過審核通過,我個人一直都是以開發者路線為主的,所以就是透過程式碼的貢獻拿到這個會員,然後就會得到一個 [at] gnome [dot] org 的 Email address alias,還會有什麼投票的權利,姓名也會出現在 Membership - GNOME 上面,應該還有一些額外的東西,不過我暫時還沒有空全部找出來,就只好先把 Email address alias 設定好,跟 Debian developer 一樣先擺著,現在寄信到 sylee [at] gnome [dot] org 也可以找到我,多了一個身份不曉得以後送 patch 會不會比較方便一些,就醬囉。

手動快速編譯 Ubuntu 16.04 當中 Linux kernel 4.4 裡面的 kernel module

以前寫過一篇「手動快速編譯 Ubuntu 14.04 當中 Linux kernel 裡面的 i915 module」這次是要針對 Ubuntu 16.04 LTS 上面的 Linux kernel 4.4 編譯,步驟都差不多只是有些不一樣的地方。

首先是 Linux kernel git tree 的來源改從 Launchpad 而來,是的! Ubuntu 使用的 Linux kernel 現在也放到 Launchpad 上面了。

$ git clone https://git.launchpad.net/~ubuntu-kernel/ubuntu/+source/linux/+git/xenial

然後是編譯的設定檔的位置不一樣了,不過大致上只要找出 config.common.ubuntu config.common.amd64 config.flavour.generic 這三個檔案的位置出來就可以了。

cat ./debian.master/config/config.common.ubuntu ./debian.master/config/amd64/config.common.amd64 ./debian.master/config/amd64/config.flavour.generic > .config

然後這次我的目標是 ubuntu/i915 底下的 kernel module 其它的部份就直接參考前一份文章就可以了。

2017年5月29日 星期一

成為 Debian Developer 之後的例行雜事

首先會收到一封含加密密碼的信件,使用自己的 PGP 解密後,就可以使用登入 https://db.debian.org/(這是第一組密碼),然後就可以修改自己在 https://sso.debian.org/ 上面的密碼(這是第二組密碼),登入 https://sso.debian.org/ 後就可以取得一組通行憑證給 Mozilla Firefox 使用,這個憑證之後可以使用在像是 https://tracker.debian.org/ 或是 https://nm.debian.org/ 上面,由於憑證是儲存在本機的瀏覽器裡面,所以有支援憑證登入的網站就不用再輸入密碼了。

另外就是可以到 https://alioth.debian.org/ 上面輸入自己 <username>@debian.org 的 <username> 然後按下忘記密碼來設定自己的密碼(這是第三組密碼),由於 https://alioth.debian.org/ 並沒有支援原本的 *-guest 帳號轉移,所以只能使用新帳號登入重新加入每一個之前加入過的專案,然後再請管理員將原本的 *-guest 帳號刪除掉,當然如果不在意的話,也可以繼續使用原本的 *-guest 帳號。

如果忘了https://db.debian.org/ 的密碼,可以參考 https://db.debian.org/doc-mail.html 寄信要求重設一組密碼。

echo "Please change my Debian password" | gpg --clearsign | mail chpasswd@db.debian.org

另外就是透過 SSH 登入的公鑰也可以透過寄信來設定。

cat .ssh/id_rsa.pub | gpg --clearsign | mail changes@db.debian.org

設定完 SSH 公鑰後就可以登入像是 people.debian.org 這樣的主機,來放自己的個人網頁 ~/public_html/index.html,例如: https://people.debian.org/~fourdollars/ 這樣。

https://db.debian.org/machines.cgi 上面列了一堆機器,目前還不曉得所有機器的使用方法,只知道要注意 https://www.debian.org/devel/dmup 上面的規範,不可以濫用大家共用的資源。

2017年5月16日 星期二

正式成為 Debian Developer

我的個人資料在 https://nm.debian.org/public/person/fourdollars 可以找到。

雖然說資格在 2017-05-07 就拿到了,可是相關帳號權限今天才開好,而且還有不少要花時間去瞭解設定的東西。Orz

特別感謝 czchen 一直在 TOSSUG 的聚會上 push 我去申請,不然我都是懶懶地慢慢摸。

2017年5月15日 星期一

2017 在 Ubuntu 16.04 上面報稅

沒有最爛只有更爛的報稅系統,Java 連官方都已經不支援使用 Java Applet 建議改用 Java Web Start 了,但是臺灣政府配合的廠商還是在使用過時的技術給 Mac & Linux 系統的報稅者,主管機關也是一直瀆職。

目前 Ubuntu 上的 Firefox 53.0.2 已經不支援 Java Applet 了,所以想要報稅只能安裝舊版本的 Firefox 來避開問題。

首先確認 Firefox 已經都關閉,然後將 ~/.mozilla 換個名稱或是備份起來,以防意外的發生。

$ mv ~/.mozilla ~/.mozilla.bak

接下來要安裝舊版本的 Firefox

$ apt policy firefox
firefox:
  已安裝:53.0.2+build1-0ubuntu0.16.04.2
  候選: 53.0.2+build1-0ubuntu0.16.04.2
  版本列表:
 *** 53.0.2+build1-0ubuntu0.16.04.2 500
        500 http://tw.archive.ubuntu.com/ubuntu xenial-updates/main amd64 Packages
        500 http://tw.archive.ubuntu.com/ubuntu xenial-security/main amd64 Packages
        100 /var/lib/dpkg/status
     45.0.2+build1-0ubuntu1 500
        500 http://tw.archive.ubuntu.com/ubuntu xenial/main amd64 Packages
$ sudo apt install firefox=45.0.2+build1-0ubuntu1 firefox-locale-zh-hant=45.0.2+build1-0ubuntu1

然後就是依照先前寫過的「在 Ubuntu 16.04 上面使用自然人憑證報稅」來操作,就可以順利報稅了。

2017年1月6日 星期五

使用 zenity 進度條的小眉角

zenity 是一個小程式用來顯示簡單的 GTK+ 對話框,其中也有進度條的選項。

$ zenity --help-progress
用法:
  zenity [選項…]

進度列選項
  --progress                              顯示進度指示窗
  --text=文字                             指定對話方塊中的文字
  --percentage=百分比                     指定開始時的百份比數值
  --pulsate                               令進度列內的方塊來回移動
  --auto-close                            當進度達到 100% 時關閉對話方塊
  --auto-kill                             若按下取消按鈕則中止父程序
  --no-cancel                             隱藏取消按鈕
  --time-remaining                        估計當進度到達 100% 的時間

使用上可將其它程式的標準輸入當成輸入,例如:

$ for i in {0..100..20}; do echo $i; sleep 1; done | \
  zenity --progress

如果想讓進度達到百分之百時自動結束可以加上 --auto-close

$ for i in {0..100..20}; do echo $i; sleep 1; done | \
  zenity --progress --auto-close
或是加上 --no-cancel 讓確定跟取消的按鈕都不見。
$ for i in {0..100..20}; do echo $i; sleep 1; done | \
  zenity --progress --auto-close --no-cancel

再加上 --time-remaining 剩餘時間的估計。

$ for i in {0..100..20}; do echo $i; sleep 1; done | \
  zenity --progress --auto-close --no-cancel --time-remaining

當然還可以使用其它元件都有的 --title 跟 --text 來客製對話框的訊息。

$ for i in {0..100..20}; do echo $i; sleep 1; done | \
  zenity --progress --auto-close --no-cancel --time-remaining --title "新建築正在倒塌中" --text "貓在鋼琴上昏倒了"

另外就是 --text 有支援一些簡單的 HTML 標籤,所以可以有一些變化。

$ for i in {0..100..20}; do echo $i; sleep 1; done | \
  zenity --progress --auto-close --no-cancel --time-remaining --title "新建築正在倒塌中" --text "<b>貓</b>在<u>鋼琴</u>上<i>昏倒</i>了\n謠言真可怕"

最後就是要小心其它程式所產生的標準輸出,像是 apt-get upgrade --yes 的輸出有時候會有數字開頭的訊息,這樣的訊息在使用 zenity --progress --auto-close 時都會導致對話框突然結束,任何超過 100 的數字都會結束程式。