tag:blogger.com,1999:blog-144898082024-03-08T10:08:51.261+08:00$4 blogGNU/Linux, Debian/Ubuntu, Mac OS X, Free Software/Open Source Software, Freeware, and Programming.$4http://www.blogger.com/profile/05027047996196141367noreply@blogger.comBlogger322125tag:blogger.com,1999:blog-14489808.post-34179859060191620352020-04-23T23:18:00.000+08:002020-04-23T23:22:44.236+08:00以後的筆記要搬到 https://hackmd.io/@fourdollars 上面囉<p>本來打算將 <a href="https://hackmd.io/@fourdollars/By26b5au8">Autopkgtest 初體驗</a> 這篇筆記搬回來 Blogger,突然發現這樣好像有點在浪費時間。</p>
<p>因為 <a href="https://hackmd.io/">HackMD - Markdown 協作知識庫</a> 實在是太好用了,功能都很完整(至少我需要的都有),所以以後不打算再維護這邊了。</p>
<p><a href="https://hackmd.io/@fourdollars">https://hackmd.io/@fourdollars</a></p>
$4http://www.blogger.com/profile/05027047996196141367noreply@blogger.com0tag:blogger.com,1999:blog-14489808.post-57608152908834214932019-11-22T23:11:00.000+08:002019-11-22T23:11:12.615+08:00在 Ubuntu 18.04 透過 postfix 來使用 Gmail 寄信<p>以下內容是參考 <a href="https://kifarunix.com/configure-postfix-to-use-gmail-smtp-on-ubuntu-18-04/">https://kifarunix.com/configure-postfix-to-use-gmail-smtp-on-ubuntu-18-04/</a></p>
<h3>首先安裝一下 postfix 與 mailutils</h3>
<pre class="brush:shell">$ sudo apt install postfix mailutils</pre>
<p>安裝過程設定使用 Internet site: Mail is sent and received directly using SMTP.</p>
<h3>安裝後修改 /etc/postfix/main.cf</h3>
<pre class="brush:text">
relayhost = [smtp.gmail.com]:587
smtp_sasl_auth_enable = yes
smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
smtp_sasl_security_options = noanonymous
smtp_tls_security_level = encrypt
smtp_tls_CAfile = /etc/ssl/certs/ca-certificates.crt
</pre>
<h3>修改 /etc/postfix/sasl_passwd 加入密碼</h3>
<pre class="brush:text">[smtp.gmail.com]:587 userid@gmail.com:password</pre>
<p>應用程式密碼可以在 <a href="https://myaccount.google.com/apppasswords">https://myaccount.google.com/apppasswords</a> 產生</p>
<h3> 使用 postmap 產生 db</h3>
<pre class="brush:shell">
$ sudo postmap /etc/postfix/sasl_passwd
$ ls /etc/postfix/sasl_passwd*
/etc/postfix/sasl_passwd /etc/postfix/sasl_passwd.db
</pre>
<h3>變更 /etc/postfix/sasl_passwd* 權限</h3>
<pre class="brush:shell">
$ sudo chown root:root /etc/postfix/sasl_passwd*
$ sudo chmod 600 /etc/postfix/sasl_passwd*
</pre>
<h3>設定完成後重啟 postfix</h3>
<pre class="brush:shell">$ service postfix reload</pre>
<h3>最後寫一封信寄給自己看看有沒有成功收到</h3>
<pre class="brush:shell">$ echo "This is a test mail." | mail -s "test mail" userid@gmail.com</pre>$4http://www.blogger.com/profile/05027047996196141367noreply@blogger.com0tag:blogger.com,1999:blog-14489808.post-1036589896472154562018-07-27T15:42:00.000+08:002018-07-27T15:42:40.744+08:00自製 Ubuntu 16.04.X/17.10/18.04.X/18.10 測試硬體安裝使用的 USB 隨身碟<p>與「<a href="https://fourdollars.blogspot.com/2013/05/ubuntu-1304121012042-debian-70-usb.html">自製 Ubuntu 13.04/12.10/12.04.2 與 Debian 7.0 測試硬體安裝使用的 USB 隨身碟</a>」跟「<a href="https://fourdollars.blogspot.com/2017/07/ubuntu-1604160411604216101704-usb.html">自製 Ubuntu 16.04/16.04.1/16.04.2/16.10/17.04 測試硬體安裝使用的 USB 隨身碟</a>」同樣的步驟只是改用 <a href="https://gist.github.com/fourdollars/f60bf3be509a712553cc8e70eab210c7">grub.cfg</a> 這個設定檔。</p>
<p>隨身碟換成某年在 COSCUP 購買的 USB stick 紀念品,所以容量有 16GB 可以用,只是已經不想再不斷地修改 grub.cfg 所以改成自動偵測 vmlinuz 跟 initrd 的檔案名稱,然後會去掃 iso 目錄底下的所有 iso 檔,之後只要爽爽地將新的 iso 檔複製到 iso 目錄底下就會自動找到了,不用在因為新增或刪除 iso 檔而去修改 grub.cfg。</p>
<p><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhGC90ySba2xx95j_-mFUk6bFamMEVHYhOE8V1YG5DDSwVuES5lt7NVXzClfZp_9kcA-Ro_on-x7QKOm5976qzg6hyphenhyphenKVsM7BDrplt4jgfszOFEcFUgi_oZ_qOfXhYMtmC54vns/s1600/grub.png" imageanchor="1" ><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhGC90ySba2xx95j_-mFUk6bFamMEVHYhOE8V1YG5DDSwVuES5lt7NVXzClfZp_9kcA-Ro_on-x7QKOm5976qzg6hyphenhyphenKVsM7BDrplt4jgfszOFEcFUgi_oZ_qOfXhYMtmC54vns/s1600/grub.png" data-original-width="800" data-original-height="628" /></a></p>
<p>主要修改的部份如下:</p>
<pre class="brush:shell">
for isofile in /iso/*.iso
do
menuentry "試用 $isofile 免安裝 ($bios)" $isofile {
loopback loop $2
if [ -f (loop)/casper/vmlinuz ]; then
set vmlinuz="(loop)/casper/vmlinuz"
elif [ -f (loop)/casper/vmlinuz.efi ]; then
set vmlinuz="(loop)/casper/vmlinuz.efi"
fi
if [ -f (loop)/casper/initrd ]; then
set initrd="(loop)/casper/initrd"
elif [ -f (loop)/casper/initrd.lz ]; then
set initrd="(loop)/casper/initrd.lz"
elif [ -f (loop)/casper/initrd.gz ]; then
set initrd="(loop)/casper/initrd.gz"
fi
linux $vmlinuz iso-scan/filename=$2 $options $desktop --- $extra
initrd $initrd
}
done
</pre>
$4http://www.blogger.com/profile/05027047996196141367noreply@blogger.com0tag:blogger.com,1999:blog-14489808.post-19965916055345370882017-11-26T19:22:00.000+08:002017-11-26T19:22:38.078+08:00線上編輯與分享 Debian 與 Ubuntu 的自動安裝設定<p>多年前在弄 <a href="https://fourdollars.github.io/d-i/">https://fourdollars.github.io/d-i/</a> 時,就已經想到這個主意了,趁這個週末有點時間就用 Python Flask 硬幹出來。</p>
<p>主要是利用下面的機制做出來的:</p>
<ul>
<li><a href="https://www.debian.org/releases/stable/amd64/apbs02.html.en#preseed-auto">https://www.debian.org/releases/stable/amd64/apbs02.html.en#preseed-auto</a></li>
<li><a href="https://help.ubuntu.com/lts/installation-guide/amd64/apbs02.html#preseed-auto">https://help.ubuntu.com/lts/installation-guide/amd64/apbs02.html#preseed-auto</a></li>
</ul>
<p>運作的原理是根據使用者的 IPv4 位址來儲存設定檔,所以另一台透過同樣的 IPv4 位址就可以拿到同一份設定檔,分享的時候也是透過分享 IPv4 位址來達成,但是只有該 IPv4 位址的使用者才能夠編輯給該 IPv4 位址使用的設定。</p>
<p>專案網址:<a href="https://fourdollars.github.io/diaas/">https://fourdollars.github.io/diaas/</a></p>
<p>我另外弄了一個專門給 Ubuntu 台灣中文社群的通用設定在 <a href="https://sylee.org/d-i/?share=08080808">https://sylee.org/d-i/?share=08080808</a>,點進去後按下 Save 就可以使用了。</p>$4http://www.blogger.com/profile/05027047996196141367noreply@blogger.com0tag:blogger.com,1999:blog-14489808.post-3279222778392551112017-11-26T18:07:00.000+08:002017-11-26T18:07:32.605+08:00debian-installer (d-i) and preseed.cfg<p>There is an "Auto mode" while automating the Debian/Ubuntu installation using preseeding.</p>
<p>You can check <a href="https://www.debian.org/releases/stable/amd64/apbs02.html.en#preseed-auto">Debian</a>'s or <a href="https://help.ubuntu.com/lts/installation-guide/amd64/apbs02.html#preseed-auto">Ubuntu</a>'s documentions for details.</p>
<p>Basically if we have prepared a "preseed.cfg" at some right place, like http://example.com/d-i/stretch/preseed.cfg</code>, and then we can use "auto url=example.com" to install Debian stretch by that "preseed.cfg".</p>
<p>"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.</p>
<p>If you are interested, please check <a href="https://fourdollars.github.io/diaas/">https://fourdollars.github.io/diaas/</a>.</p>
$4http://www.blogger.com/profile/05027047996196141367noreply@blogger.com0tag:blogger.com,1999:blog-14489808.post-56771597809571389712017-11-23T11:45:00.000+08:002017-11-23T11:45:43.877+08:00Python 套件的安全檢查 safety<p>使用 Python 來建立專案常常會需要拉一些額外的套件進來使用,然而有時候專案已經穩定不再增加新功能也不再修正錯誤時,就是只放著讓它在那邊自己跑著,只是說這個專案使用到的額外的套件難免會有一些未知的安全問題,這時候該怎麼辦呢?</p>
<p>於是我找到了 <a href="https://pypi.python.org/pypi/safety">https://pypi.python.org/pypi/safety</a></p>
<p>執行 <pre class="brush:shell">$ pip install safety</pre>安裝起來,然後再執行 <pre class="brush:shell">$ safety check</pre> 就可以看到結果。</p>
<p>或者是可以直接檢查 requirements.txt 這個檔案。</p>
<pre class="brush:shell">
$ 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 │
╘══════════════════════════════════════════════════════════════════════════════╛
</pre>
<p>看樣子只要將版本更新上去就沒問題了,當然原本專案的某些地方可能會跟著壞掉需要再修正一下。</p>
<p>最後是 <a href="https://pyup.io/">https://pyup.io/</a> 對 GitHub 提供了 CI 的服務,public repo 可以免費使用。</p>$4http://www.blogger.com/profile/05027047996196141367noreply@blogger.com0tag:blogger.com,1999:blog-14489808.post-81793815790225388442017-07-10T19:33:00.001+08:002017-07-10T19:35:25.455+08:00自製 Ubuntu 16.04/16.04.1/16.04.2/16.10/17.04 測試硬體安裝使用的 USB 隨身碟<p>與「<a href="/2013/05/ubuntu-1304121012042-debian-70-usb.html">自製 Ubuntu 13.04/12.10/12.04.2 與 Debian 7.0 測試硬體安裝使用的 USB 隨身碟</a>」同樣的步驟只是改用 <a href="https://gist.github.com/fourdollars/ae9b13ab874720a95c4a0b1aa431daa6">grub.cfg</a> 這個設定檔。</p>
<p>因為我是放在 8GB 的 USB 隨身碟上面,所以放這幾個 amd64 ISO 檔案就塞滿了。</p>
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjp0gXMa3kyEi2Wa_b7yokRrP9o3k9ln4MfXfnlowzf5KmAEQTwcOFnLMYa43n1nZWLTyzFegFDdRy1FLtDm4NYOP5c6Na8_25_hD6oZqoEdw1aLlZ3IVfS3wex_w3v4eA6Ifc/s1600/UbuntuInstallationDrive.png" imageanchor="1" ><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjp0gXMa3kyEi2Wa_b7yokRrP9o3k9ln4MfXfnlowzf5KmAEQTwcOFnLMYa43n1nZWLTyzFegFDdRy1FLtDm4NYOP5c6Na8_25_hD6oZqoEdw1aLlZ3IVfS3wex_w3v4eA6Ifc/s1600/UbuntuInstallationDrive.png" data-original-width="800" data-original-height="628" /></a>
<p>另外我發現前一篇文章中的 usb-creator-gtk -n -i ubuntu-13.04-desktop-amd64.iso 這個步驟是多餘的,其實使用 grub-install 就夠了,還有這邊的 UEFI 模式不會支援 Secure Boot 因為 GRUB 的安全設定的關係。</p>
$4http://www.blogger.com/profile/05027047996196141367noreply@blogger.com0tag:blogger.com,1999:blog-14489808.post-3988092567772765162017-06-19T18:33:00.000+08:002017-06-19T18:33:39.377+08:00拿到了 GNOME foundation membership <p>最近 GNOME 有推出個 <a href="https://www.gnome.org/foundation/membership/apply/">Become a Foundation member</a> 的活動,如果以前對 GNOME 做過不少貢獻就可以去申請成為會員,當然還要經過審核通過,我個人一直都是以開發者路線為主的,所以就是透過程式碼的貢獻拿到這個會員,然後就會得到一個 [at] gnome [dot] org 的 Email address alias,還會有什麼投票的權利,姓名也會出現在 <a href="https://www.gnome.org/foundation/membership/">Membership - GNOME</a> 上面,應該還有一些額外的東西,不過我暫時還沒有空全部找出來,就只好先把 Email address alias 設定好,跟 Debian developer 一樣先擺著,現在寄信到 sylee [at] gnome [dot] org 也可以找到我,多了一個身份不曉得以後送 patch 會不會比較方便一些,就醬囉。</p>$4http://www.blogger.com/profile/05027047996196141367noreply@blogger.com0tag:blogger.com,1999:blog-14489808.post-52947222718531373072017-06-19T18:16:00.000+08:002017-06-19T18:16:46.699+08:00手動快速編譯 Ubuntu 16.04 當中 Linux kernel 4.4 裡面的 kernel module<p>以前寫過一篇「<a href="/2015/11/ubuntu-1404-linux-kernel-i915-module.html">手動快速編譯 Ubuntu 14.04 當中 Linux kernel 裡面的 i915 module</a>」這次是要針對 Ubuntu 16.04 LTS 上面的 Linux kernel 4.4 編譯,步驟都差不多只是有些不一樣的地方。</p>
<p>首先是 Linux kernel git tree 的來源改從 Launchpad 而來,是的! Ubuntu 使用的 Linux kernel 現在也放到 Launchpad 上面了。</p>
<pre class="brush:shell">$ git clone https://git.launchpad.net/~ubuntu-kernel/ubuntu/+source/linux/+git/xenial</pre>
<p>然後是編譯的設定檔的位置不一樣了,不過大致上只要找出 config.common.ubuntu config.common.amd64 config.flavour.generic 這三個檔案的位置出來就可以了。</p>
<pre class="brush:shell">cat ./debian.master/config/config.common.ubuntu ./debian.master/config/amd64/config.common.amd64 ./debian.master/config/amd64/config.flavour.generic > .config</pre>
<p>然後這次我的目標是 ubuntu/i915 底下的 kernel module 其它的部份就直接參考前一份文章就可以了。</p>$4http://www.blogger.com/profile/05027047996196141367noreply@blogger.com0tag:blogger.com,1999:blog-14489808.post-77027298201861808292017-05-29T14:37:00.000+08:002017-05-29T14:37:23.356+08:00成為 Debian Developer 之後的例行雜事<p>首先會收到一封含加密密碼的信件,使用自己的 PGP 解密後,就可以使用登入 <a href="https://db.debian.org/">https://db.debian.org/</a>(這是第一組密碼),然後就可以修改自己在 <a href="https://sso.debian.org/">https://sso.debian.org/</a> 上面的密碼(這是第二組密碼),登入 <a href="https://sso.debian.org/">https://sso.debian.org/</a> 後就可以取得一組通行憑證給 Mozilla Firefox 使用,這個憑證之後可以使用在像是 <a href="https://tracker.debian.org/">https://tracker.debian.org/</a> 或是 <a href="https://nm.debian.org/">https://nm.debian.org/</a> 上面,由於憑證是儲存在本機的瀏覽器裡面,所以有支援憑證登入的網站就不用再輸入密碼了。</p>
<p>另外就是可以到 <a href="https://alioth.debian.org/">https://alioth.debian.org/</a> 上面輸入自己 <username>@debian.org 的 <username> 然後按下忘記密碼來設定自己的密碼(這是第三組密碼),由於 <a href="https://alioth.debian.org/">https://alioth.debian.org/</a> 並沒有支援原本的 *-guest 帳號轉移,所以只能使用新帳號登入重新加入每一個之前加入過的專案,然後再請管理員將原本的 *-guest 帳號刪除掉,當然如果不在意的話,也可以繼續使用原本的 *-guest 帳號。</p>
<p>如果忘了<a href="https://db.debian.org/">https://db.debian.org/</a> 的密碼,可以參考 <a href="https://db.debian.org/doc-mail.html">https://db.debian.org/doc-mail.html</a> 寄信要求重設一組密碼。</p>
<pre class="brush:shell">echo "Please change my Debian password" | gpg --clearsign | mail chpasswd@db.debian.org</pre>
<p>另外就是透過 SSH 登入的公鑰也可以透過寄信來設定。</p>
<pre class="brush:shell">cat .ssh/id_rsa.pub | gpg --clearsign | mail changes@db.debian.org</pre>
<p>設定完 SSH 公鑰後就可以登入像是 people.debian.org 這樣的主機,來放自己的個人網頁 ~/public_html/index.html,例如: <a href="https://people.debian.org/~fourdollars/">https://people.debian.org/~fourdollars/</a> 這樣。</p>
<p><a href="https://db.debian.org/machines.cgi">https://db.debian.org/machines.cgi</a> 上面列了一堆機器,目前還不曉得所有機器的使用方法,只知道要注意 <a href="https://www.debian.org/devel/dmup">https://www.debian.org/devel/dmup</a> 上面的規範,不可以濫用大家共用的資源。</p>$4http://www.blogger.com/profile/05027047996196141367noreply@blogger.com0tag:blogger.com,1999:blog-14489808.post-15428756920943614352017-05-16T14:53:00.000+08:002017-05-16T14:53:50.891+08:00正式成為 Debian Developer<p>我的個人資料在 <a href="https://nm.debian.org/public/person/fourdollars">https://nm.debian.org/public/person/fourdollars</a> 可以找到。</p>
<p>雖然說資格在 2017-05-07 就拿到了,可是相關帳號權限今天才開好,而且還有不少要花時間去瞭解設定的東西。Orz</p>
<p>特別感謝 <a href="https://nm.debian.org/public/person/czchen">czchen</a> 一直在 <a href="https://tossug.net">TOSSUG</a> 的聚會上 push 我去申請,不然我都是懶懶地慢慢摸。</p>$4http://www.blogger.com/profile/05027047996196141367noreply@blogger.com0tag:blogger.com,1999:blog-14489808.post-30069393042890459092017-05-15T11:04:00.000+08:002017-05-15T11:33:59.356+08:002017 在 Ubuntu 16.04 上面報稅<p>沒有最爛只有更爛的報稅系統,Java 連官方都已經不支援使用 Java Applet 建議改用 Java Web Start 了,但是臺灣政府配合的廠商還是在使用過時的技術給 Mac & Linux 系統的報稅者,主管機關也是一直瀆職。</p>
<p>目前 Ubuntu 上的 Firefox 53.0.2 已經不支援 Java Applet 了,所以想要報稅只能安裝舊版本的 Firefox 來避開問題。</p>
<p>首先確認 Firefox 已經都關閉,然後將 ~/.mozilla 換個名稱或是備份起來,以防意外的發生。</p>
<pre class="brush:shell">$ mv ~/.mozilla ~/.mozilla.bak</pre>
<p>接下來要安裝舊版本的 Firefox</p>
<pre class="brush:shell">$ 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</pre>
<p>然後就是依照先前寫過的「<a href="https://fourdollars.blogspot.com/2016/05/ubuntu-1604.html">在 Ubuntu 16.04 上面使用自然人憑證報稅</a>」來操作,就可以順利報稅了。</p>
$4http://www.blogger.com/profile/05027047996196141367noreply@blogger.com0tag:blogger.com,1999:blog-14489808.post-90421750364243020622017-01-06T16:20:00.000+08:002017-01-07T10:59:05.746+08:00使用 zenity 進度條的小眉角<p>zenity 是一個小程式用來顯示簡單的 GTK+ 對話框,其中也有進度條的選項。</p>
<pre class="brush:shell">
$ zenity --help-progress
用法:
zenity [選項…]
進度列選項
--progress 顯示進度指示窗
--text=文字 指定對話方塊中的文字
--percentage=百分比 指定開始時的百份比數值
--pulsate 令進度列內的方塊來回移動
--auto-close 當進度達到 100% 時關閉對話方塊
--auto-kill 若按下取消按鈕則中止父程序
--no-cancel 隱藏取消按鈕
--time-remaining 估計當進度到達 100% 的時間
</pre>
<p>使用上可將其它程式的標準輸入當成輸入,例如:</p>
<pre class="brush:shell">$ for i in {0..100..20}; do echo $i; sleep 1; done | \
zenity --progress</pre>
<p><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgUpzVWyuQg-M5VV-qYfdVoP5Co5Gv6VkRjlJmpVPq_MjTYVHTz0UOOpBG56OgHK04gsVFBwGSEbtyui8wHrb1uH2_hA720aB8-9aN2s5td8qpG2CIM3aER5y5GFX8W1LTN92c/s1600/zenity.png" imageanchor="1" ><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgUpzVWyuQg-M5VV-qYfdVoP5Co5Gv6VkRjlJmpVPq_MjTYVHTz0UOOpBG56OgHK04gsVFBwGSEbtyui8wHrb1uH2_hA720aB8-9aN2s5td8qpG2CIM3aER5y5GFX8W1LTN92c/s1600/zenity.png" /></a></p>
<p>如果想讓進度達到百分之百時自動結束可以加上 --auto-close</p>
<pre class="brush:shell">$ for i in {0..100..20}; do echo $i; sleep 1; done | \
zenity --progress --auto-close</pre>
或是加上 --no-cancel 讓確定跟取消的按鈕都不見。
<pre class="brush:shell">$ for i in {0..100..20}; do echo $i; sleep 1; done | \
zenity --progress --auto-close --no-cancel</pre>
<p><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhxue8HCLKkjZbvjGMsuburvoAI_AXCcBsrcAxAvWnYw6dBEbCJfIxNGtEmlgiKTU9N7qlZ4TNm3iF312PjleaevXgw3kDWryE-cpENDmRFQeNHPfiP7vpLvI-qYl4K8OTxLS0/s1600/zenity.png" imageanchor="1" ><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhxue8HCLKkjZbvjGMsuburvoAI_AXCcBsrcAxAvWnYw6dBEbCJfIxNGtEmlgiKTU9N7qlZ4TNm3iF312PjleaevXgw3kDWryE-cpENDmRFQeNHPfiP7vpLvI-qYl4K8OTxLS0/s1600/zenity.png" /></a></p>
<p>再加上 --time-remaining 剩餘時間的估計。</p>
<pre class="brush:shell">$ for i in {0..100..20}; do echo $i; sleep 1; done | \
zenity --progress --auto-close --no-cancel --time-remaining</pre>
<p><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiFTnBaaKAg0VIsVXd4zp-sIkCgYiJ3fuLpsUpFWFwzd9_4fywuw5_EXPURQTVLuoZSHBXQ8dp1Pg30yc0Sq8mTYdk3c36TSLOqskES3u2FRm1ahyphenhyphenDT6vUyUZYwQRqWq8vIUVc/s1600/zenity.png" imageanchor="1" ><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiFTnBaaKAg0VIsVXd4zp-sIkCgYiJ3fuLpsUpFWFwzd9_4fywuw5_EXPURQTVLuoZSHBXQ8dp1Pg30yc0Sq8mTYdk3c36TSLOqskES3u2FRm1ahyphenhyphenDT6vUyUZYwQRqWq8vIUVc/s1600/zenity.png" /></a></p>
<p>當然還可以使用其它元件都有的 --title 跟 --text 來客製對話框的訊息。</p>
<pre class="brush:shell">$ for i in {0..100..20}; do echo $i; sleep 1; done | \
zenity --progress --auto-close --no-cancel --time-remaining --title "新建築正在倒塌中" --text "貓在鋼琴上昏倒了"</pre>
<p><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg83hi8w3Ih6zlBZqfqx0Wy5S-mxiaWgbjZWeQDFXQSCBgPw_xi7UTaM0zs6r7h3DAobu-C0Oyp9a5s-VU7IeJeAkhcSF7xZzFhnZqDKWrZ5dNCH0FoINePGYSksRKsNYGs74o/s1600/zenity.png" imageanchor="1" ><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg83hi8w3Ih6zlBZqfqx0Wy5S-mxiaWgbjZWeQDFXQSCBgPw_xi7UTaM0zs6r7h3DAobu-C0Oyp9a5s-VU7IeJeAkhcSF7xZzFhnZqDKWrZ5dNCH0FoINePGYSksRKsNYGs74o/s1600/zenity.png" /></a></p>
<p>另外就是 --text 有支援一些簡單的 HTML 標籤,所以可以有一些變化。</p>
<pre class="brush:shell">$ 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<span foreground='red'>謠言真可怕</span>"</pre>
<p><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi1tiIi6NdIwKC4G2pVVtf7dLKWbTWF28r6BbY6Tda7X1tI9KTGroYBJmnFtNRAtQsd8ozT830irAZf7Vw7Vh7m9VUChDc4DxdGlyTBFequ40i0BEEkEs7tjBTSf-L-0refG4w/s1600/zenity.png" imageanchor="1" ><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi1tiIi6NdIwKC4G2pVVtf7dLKWbTWF28r6BbY6Tda7X1tI9KTGroYBJmnFtNRAtQsd8ozT830irAZf7Vw7Vh7m9VUChDc4DxdGlyTBFequ40i0BEEkEs7tjBTSf-L-0refG4w/s1600/zenity.png" /></a></p>
<p>最後就是要小心其它程式所產生的標準輸出,像是 apt-get upgrade --yes 的輸出有時候會有數字開頭的訊息,這樣的訊息在使用 zenity --progress --auto-close 時都會導致對話框突然結束,任何超過 100 的數字都會結束程式。</p>$4http://www.blogger.com/profile/05027047996196141367noreply@blogger.com0tag:blogger.com,1999:blog-14489808.post-33751645021213765632016-09-05T16:08:00.000+08:002016-09-05T16:08:57.827+08:00Linux 系統上面的 NVIDIA 圖形顯示的私有驅動程式<p>NVIDIA 官方網站上面有提供驅動程式的<a href="http://www.nvidia.com/Download/index.aspx">下載</a>,只是不曉得是否有支援我們正在使用的顯示晶片。</p>
<p>最直接的方式是將驅動程式下載後解開來看裡面的 README.txt 的內容,例如目前最新的 Beta 版本 NVIDIA-Linux-x86_64-370.23.run,下載後可執行以下指令來解開它。</p>
<pre class="brush:shell">$ bash NVIDIA-Linux-x86_64-370.23.run -x</pre>
<p>然後就可以去查看 NVIDIA-Linux-x86_64-370.23 目錄底下的 README.txt 檔案。</p>
<p>然後直接跳轉到 Appendix A. Supported NVIDIA GPU Products 的地方,就可以看到許多的 Device PCI ID,這時候再去對一下自己系統上面的 lspci -vnn 的輸出上面的 NVIDIA 顯示都是 10de 開頭的。</p>
<pre class="brush:text">Appendix A. Supported NVIDIA GPU Products
______________________________________________________________________________
...
A1. NVIDIA GEFORCE GPUS
NVIDIA GPU product Device PCI ID* VDPAU features
---------------------------------- --------------- ---------------
GeForce GTX 480 06C0 C
...
GeForce GT 620M 0DE9 1025 0692 C
...
...
</pre>
<p>像是 06C0 對應到 [10de:06c0] 只要對一組 PCI ID 就好了,而 0DE9 1025 0692 則是對應到 [10de:0de9] 然後還要檢查 Subsystem ID 是不是 [1025:0692],類似下面的輸出(假造的)。</p>
<pre class="brush:text">00:02.0 VGA compatible controller [0300]: NVIDIA GeForce GT 620M [10de:0de9] (rev 00) (prog-if 00 [VGA controller])
Subsystem: Foo bar system [1025:0692]</pre>
<p>如果系統上面的 Device PCI ID 跟 Subsystem PCI ID 有跟 README.txt 裡面的符合就表示這個驅動程式應該有支援,如果沒有出現在 README.txt 裡面的話,就是沒有支援。</p>
<p>而 Ubuntu 上面的 NVIDIA 私有驅動也是透過同樣的 README.txt 轉換成 dh-modaliases 使用的格式,讓使用者可以透過 ubuntu-drivers 來自動找到合適的驅動程式。</p>
<pre class="brush:shell">$ apt-cache show nvidia-361
Package: nvidia-361
Priority: optional
Section: restricted/misc
Installed-Size: 292039
Maintainer: Ubuntu Core Developers <...>
Architecture: amd64
Source: nvidia-graphics-drivers-361
...
Description: NVIDIA binary driver - version 361.42
Description-md5: 2f2445ec5e04329593078984a32bc2ae
Modaliases: nvidia_361(pci:v000010DEd000006C0sv*sd*bc03sc*i*,...</pre>$4http://www.blogger.com/profile/05027047996196141367noreply@blogger.com0tag:blogger.com,1999:blog-14489808.post-27726871483257230262016-07-28T16:27:00.000+08:002016-07-28T16:27:03.982+08:00LTS 不等於 Stable<p>很多 Ubuntu 使用者都搞不清楚 LTS (Long Term Support) 與 Stable 的分別。</p>
<p>目前 Ubuntu 最穩定的版本應該是 Ubuntu 12.04.5 LTS (Precise Pangolin),次穩定的版本應該是下個月初才會釋出的 Ubuntu 14.04.5 LTS (Trusty Tahr),而最新的 Ubuntu 16.04.1 LTS (Xenial Xerus) 反而是 LTS 三個版本之中最不穩定的版本,因為它才釋出沒多久,更不用提前一個版本 Ubuntu 16.04 LTS (Xenial Xerus) 一定是問題更多的版本。</p>
<p>每個 Ubuntu LTS 第一個版本的釋出,只是代表著 code base freeze 然後開始不斷地修正裡面的問題,讓它越來越穩定,而 LTS 只是提供更長的維護時間。</p>
<p>如果想要使用很穩定的 Ubuntu 16.04 版本,請等到未來的 Ubuntu 16.04.5 LTS (Xenial Xerus) 釋出後再去使用吧。</p>
<p>Debian 也是一樣的,最穩定的釋出版本其實是 oldoldstable,再來是 oldstable,接下來是 stable,為什麼時間越久的越穩定是因為回報問題跟修正問題都需要時間,剛釋出的跨版號軟體一定不是最穩定的版本,要經過幾次反覆的修正之後才會慢慢地穩定下來,這也就為什麼像是 Linux kernel 還是 Python, Perl 等程式語言,在釋出後還會持續不斷地提供同版號的 minor fixes 的釋出。</p>
$4http://www.blogger.com/profile/05027047996196141367noreply@blogger.com0tag:blogger.com,1999:blog-14489808.post-80452683591545508362016-07-25T12:32:00.000+08:002016-07-25T12:32:21.271+08:00Disable Secure Boot in shim-signed<p>The latest Ubuntu kernel updates bring some Secure Boot enhancement for the kernel modules when the Secure Boot is enabled in BIOS settings. However there is no easy way to sign those kernel modules in DKMS packages automatically so far. If we want to use those DKMS packages, we need to disable Secure Boot in BIOS settings temporarily or we can also disable Secure Boot in shim-signed temporarily. The following steps introduced how to disable Secure Boot in shim-signed.</p>
<p><ol>
<li>Open a terminal by <b>Ctrl + Alt + T</b>, execute <b>`sudo update-secureboot-policy`</b> and then select ‘Yes’.<br><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEihtHw0yAjrYj5doNNt4IhUycyb2uR4MqBJS_umtLrd6TaDKXOhFOP7Xbpwj6nD2cVrRatySAJvOdg869nDRA1b_TpILCrUm-qf6cGnsjKiZ4iK3b_GrpEOQfuHJplrQpFucjw/s1600/DisableSecureBoot.png" imageanchor="1" ><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEihtHw0yAjrYj5doNNt4IhUycyb2uR4MqBJS_umtLrd6TaDKXOhFOP7Xbpwj6nD2cVrRatySAJvOdg869nDRA1b_TpILCrUm-qf6cGnsjKiZ4iK3b_GrpEOQfuHJplrQpFucjw/s400/DisableSecureBoot.png" width="400" height="256" /></a></li>
<li>Enter a temporary password between 8 to 16 digits. (For example, 12345678, we will use this password later.)<br><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhxV4w6LvgcMf6pjn60fIeiDGVxMQJ5oS9nz4laprIJudWIRZMSU21utGn2TjHpqyAhVc1LjRaflAq5o6T2xh2nCzH0_yIA09rZ1i0oU2NsLKsF-Auclnkf9_VGAq2FXQRMo1I/s1600/DisableSecureBootPassword.png" imageanchor="1" ><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhxV4w6LvgcMf6pjn60fIeiDGVxMQJ5oS9nz4laprIJudWIRZMSU21utGn2TjHpqyAhVc1LjRaflAq5o6T2xh2nCzH0_yIA09rZ1i0oU2NsLKsF-Auclnkf9_VGAq2FXQRMo1I/s400/DisableSecureBootPassword.png" width="400" height="256" /></a></li>
<li>Enter the same password again to confirm.<br><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjfpnG_7RmwPkJBsujAMdcnGO6xNJjp4ELiRqFfHtYkBqtm2-5KZ8Wbwwh-0sfW9435-GYc49JXenxENhOhmJdIUhvAJp-BV0iy57mr9rnaAAMsc7Guyvf59kiOgLR6FxzTf2c/s1600/DisableSecureBootPasswordAgain.png" imageanchor="1" ><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjfpnG_7RmwPkJBsujAMdcnGO6xNJjp4ELiRqFfHtYkBqtm2-5KZ8Wbwwh-0sfW9435-GYc49JXenxENhOhmJdIUhvAJp-BV0iy57mr9rnaAAMsc7Guyvf59kiOgLR6FxzTf2c/s400/DisableSecureBootPasswordAgain.png" width="400" height="256" /></a></li>
<li>Reboot the system and press any key when you see the blue screen (MOK management).<br><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj3R4cLzvvJrMS0NqOzUnVgj_3NKFcTGWyDWUdETrqEk0ME4gRHQZK6Dv_CMtu56ApA3LecQ7u1Y4a-UN1f0uhalbPTJZD7a_yqswCkdqt4NfB7-ULAWxDDuEx7T1qob59LnpQ/s1600/IMG_20160722_175659.jpg" imageanchor="1" ><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj3R4cLzvvJrMS0NqOzUnVgj_3NKFcTGWyDWUdETrqEk0ME4gRHQZK6Dv_CMtu56ApA3LecQ7u1Y4a-UN1f0uhalbPTJZD7a_yqswCkdqt4NfB7-ULAWxDDuEx7T1qob59LnpQ/s400/IMG_20160722_175659.jpg" width="400" height="300" /></a></li>
<li>Select “Change Secure Boot state”.<br><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjn2bcEkGkkhszscT7FIvGlSRDJ884-JYBuyHXKkysCPPlq9uU7Vcs6lpwKWT-jjm78H9hMsJLFtU8tZhlwWA_kmntI6nSK_S92I30CUH0UfcUgy-7MDpQ27EeyH-abfFR92wA/s1600/IMG_20160722_175709.jpg" imageanchor="1" ><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjn2bcEkGkkhszscT7FIvGlSRDJ884-JYBuyHXKkysCPPlq9uU7Vcs6lpwKWT-jjm78H9hMsJLFtU8tZhlwWA_kmntI6nSK_S92I30CUH0UfcUgy-7MDpQ27EeyH-abfFR92wA/s400/IMG_20160722_175709.jpg" width="400" height="300" /></a></li>
<li>Press the corresponding password character and press Enter. Repeat this step several times to confirm previous temporary password like ‘12345678’ in step 2&3. For exmaple, '2' for this screen.<br><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh7ux1YCaiEi4vwyL1lhQ5GWbe2NSf6QqeBgTKwbQ7vlvOOcVl-CwawlaDFr_Zi54JXo-Y_HDeZnW9YAhwccgWNUKwZb9EWPq71buzoQgboo2ORcbGQ2ArgtZlDsAuwXJBTIJs/s1600/IMG_20160722_174945.jpg" imageanchor="1" ><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh7ux1YCaiEi4vwyL1lhQ5GWbe2NSf6QqeBgTKwbQ7vlvOOcVl-CwawlaDFr_Zi54JXo-Y_HDeZnW9YAhwccgWNUKwZb9EWPq71buzoQgboo2ORcbGQ2ArgtZlDsAuwXJBTIJs/s400/IMG_20160722_174945.jpg" width="400" height="300" /></a></li>
<li>Select ‘Yes’ to disable Secure Boot in shim-signed.<br><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEixOu6aCHNZJCxhdFjSbym_kvffauRTpWwu9xTBBS4rSIzt9uTHJ8rLQHt8hJyifQC-YPPPeiikV8lyqunJ33pJ_fFDWAiGBMzzqZjHEA8XfdUeYMp8BcuwH6omKpBJu3_RqWQ/s1600/IMG_20160722_175731.jpg" imageanchor="1" ><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEixOu6aCHNZJCxhdFjSbym_kvffauRTpWwu9xTBBS4rSIzt9uTHJ8rLQHt8hJyifQC-YPPPeiikV8lyqunJ33pJ_fFDWAiGBMzzqZjHEA8XfdUeYMp8BcuwH6omKpBJu3_RqWQ/s400/IMG_20160722_175731.jpg" width="400" height="300" /></a></li>
<li>Press Enter key to finish the whole procedure.<br><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh217QDASzjaEwIGTJZ_KalxDmGlaTGrsS_a_Ot_4-0iHIjoMeDmYrR3Xf2PrG2LBDisJc4CsBtl-b23Z8ZuOFVYZ8-sdDc8yD7ehsgI2gRL3RAujGsPIgM2bNrpBOEz-wMYsM/s1600/IMG_20160722_175741.jpg" imageanchor="1" ><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh217QDASzjaEwIGTJZ_KalxDmGlaTGrsS_a_Ot_4-0iHIjoMeDmYrR3Xf2PrG2LBDisJc4CsBtl-b23Z8ZuOFVYZ8-sdDc8yD7ehsgI2gRL3RAujGsPIgM2bNrpBOEz-wMYsM/s400/IMG_20160722_175741.jpg" width="400" height="300" /></a></li>
</ol>
</p>
<p>We can still enable Secure Boot in shim-signed again. Just execute <b>`sudo update-secureboot-policy --enable`</b> and then follow the similar steps above.<br><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgIK4ja51XkuNPd7FNYce-fFKBBszQDdi0yV3F0B4PMblcXy349t_3b5bxe4TeYk1lZHJ7q0WH0C6sSeQpWWyJZF1MGepixxAeew5D5eZEfL9PM6GJZbzfmMGM2PWspX3A_vDE/s1600/EnableSecureBoot.png" imageanchor="1" ><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgIK4ja51XkuNPd7FNYce-fFKBBszQDdi0yV3F0B4PMblcXy349t_3b5bxe4TeYk1lZHJ7q0WH0C6sSeQpWWyJZF1MGepixxAeew5D5eZEfL9PM6GJZbzfmMGM2PWspX3A_vDE/s400/EnableSecureBoot.png" width="400" height="256" /></a></p>$4http://www.blogger.com/profile/05027047996196141367noreply@blogger.com0tag:blogger.com,1999:blog-14489808.post-46158374924568081932016-05-30T23:02:00.000+08:002016-06-03T12:25:29.618+08:00編譯 Ubuntu 的 Linux kernel 來使用 USB to RS-232 輸出訊息<p>如果曾經有參加過台北的 <a href="http://blog.canonical.com/2011/12/12/ubuntu-hardware-summit-presentations-now-live/">Ubuntu Hardware Summit</a>,應該都會拿到一本橘色小手冊 <a href="http://odm.ubuntu.com/uhs/2011/Ubuntu-Debugging_A5-booklet.pdf">Ubuntu Debugging</a>,當中有提到可以設定幾個 Linux kernel 編譯選項中<pre class="brush:text">CONFIG_USB_SERIAL_CONSOLE=y
CONFIG_USB_SERIAL=y
CONFIG_USB_SERIAL_PL2303=y</pre></p>
<p>然後就可以在 Linux kernel 開機參數加上<pre class="brush:text">console=tty console=ttyUSB0,115200n8</pre></p>
<p>這樣就可以透過 USB to RS-232 傳輸線將 Linux kernel 訊息輸出到另外一台電腦上面,為什麼要這樣做有時候是因為 Linux kernel 開機時是什麼畫面也沒有,也不曉得中間到底發生了什麼事情,又或者是 Linux kernel 訊息出現的太快了,來不及看清楚完整的訊息一下子就過去了,也沒有來得及儲存到檔案系統上面就當機了,有著許許多多不同的情況可能會需要。</p>
<p>但是實際上要怎麼做才能夠編譯出 Ubuntu 上面所使用的 Linux kernel 呢?</p>
<p>首先是將 Ubuntu 所使用的 Linux kernel 的原始碼下載回來。</p>
<pre class="brush:shell">$ git clone git://kernel.ubuntu.com/ubuntu/ubuntu-xenial.git</pre>
<p>然後我自己 commit 了一些修改 (主要是針對 amd64)。</p>
<pre class="brush:shell">$ git diff HEAD^..HEAD
diff --git a/debian.master/abi/4.4.0-22.39/amd64/generic.modules b/debian.master/abi/4.4.0-22.39/amd64/generic.modules
index e1b9392..53d7914 100644
--- a/debian.master/abi/4.4.0-22.39/amd64/generic.modules
+++ b/debian.master/abi/4.4.0-22.39/amd64/generic.modules
@@ -2873,7 +2873,6 @@ pixcir_i2c_ts
pkcs7_test_key
pktcdvd
pktgen
-pl2303
platform_lcd
plat_nand
plat-ram
@@ -4236,7 +4235,6 @@ usblp
usbmon
usbmouse
usbnet
-usbserial
usb-serial-simple
usbsevseg
usb-storage
diff --git a/debian.master/config/annotations b/debian.master/config/annotations
index 825012f..167ab6e 100644
--- a/debian.master/config/annotations
+++ b/debian.master/config/annotations
@@ -6609,7 +6609,7 @@ CONFIG_USB_STORAGE_ENE_UB6250 policy<{'amd64': 'm', 'arm64': '
CONFIG_USB_UAS policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'powerpc': 'm', 'ppc64el': 'm'}>
# Menu: Device Drivers >> USB support >> Support for Host-side USB >> USB Serial Converter support
-CONFIG_USB_SERIAL policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'powerpc': 'm', 'ppc64el': 'm'}>
+CONFIG_USB_SERIAL policy<{'amd64': 'y', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'powerpc': 'm', 'ppc64el': 'm'}>
CONFIG_USB_SERIAL_GENERIC policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'powerpc': 'y', 'ppc64el': 'y'}>
CONFIG_USB_SERIAL_SIMPLE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'powerpc': 'm', 'ppc64el': 'm'}>
CONFIG_USB_SERIAL_AIRCABLE policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'powerpc': 'm', 'ppc64el': 'm'}>
@@ -6641,7 +6641,7 @@ CONFIG_USB_SERIAL_MOS7715_PARPORT policy<{'amd64': 'y', 'arm64': '
CONFIG_USB_SERIAL_MOS7840 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'powerpc': 'm', 'ppc64el': 'm'}>
CONFIG_USB_SERIAL_MXUPORT policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'powerpc': 'm', 'ppc64el': 'm'}>
CONFIG_USB_SERIAL_NAVMAN policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'powerpc': 'm', 'ppc64el': 'm'}>
-CONFIG_USB_SERIAL_PL2303 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'powerpc': 'm', 'ppc64el': 'm'}>
+CONFIG_USB_SERIAL_PL2303 policy<{'amd64': 'y', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'powerpc': 'm', 'ppc64el': 'm'}>
CONFIG_USB_SERIAL_OTI6858 policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'powerpc': 'm', 'ppc64el': 'm'}>
CONFIG_USB_SERIAL_QCAUX policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'powerpc': 'm', 'ppc64el': 'm'}>
CONFIG_USB_SERIAL_QUALCOMM policy<{'amd64': 'm', 'arm64': 'm', 'armhf': 'm', 'i386': 'm', 'powerpc': 'm', 'ppc64el': 'm'}>
diff --git a/debian.master/config/config.common.ubuntu b/debian.master/config/config.common.ubuntu
index 505a3c7..7cb1284 100644
--- a/debian.master/config/config.common.ubuntu
+++ b/debian.master/config/config.common.ubuntu
@@ -8391,7 +8391,8 @@ CONFIG_USB_RIO500=m
CONFIG_USB_RTL8150=m
CONFIG_USB_RTL8152=m
CONFIG_USB_S2255=m
-CONFIG_USB_SERIAL=m
+CONFIG_USB_SERIAL=y
+CONFIG_USB_SERIAL_CONSOLE=y
CONFIG_USB_SERIAL_AIRCABLE=m
CONFIG_USB_SERIAL_ARK3116=m
CONFIG_USB_SERIAL_BELKIN=m
@@ -8439,7 +8440,7 @@ CONFIG_USB_SERIAL_OMNINET=m
CONFIG_USB_SERIAL_OPTICON=m
CONFIG_USB_SERIAL_OPTION=m
CONFIG_USB_SERIAL_OTI6858=m
-CONFIG_USB_SERIAL_PL2303=m
+CONFIG_USB_SERIAL_PL2303=y
CONFIG_USB_SERIAL_QCAUX=m
CONFIG_USB_SERIAL_QT2=m
CONFIG_USB_SERIAL_QUALCOMM=m
</pre>
<p>接著開始編譯 Linux kernel (在有八個 CPU cores 的電腦上)</p>
<pre class="brush:shell">$ CONCURRENCY_LEVEL=8 fakeroot debian/rules clean binary-generic</pre>
<p>最後就會在上層目錄產生 Ubuntu 所使用的 Linux kernel 的 Debian packages 了。</p>
<pre class="brush:text">$ ls -1 ../*.deb
../linux-cloud-tools-4.4.0-22-generic_4.4.0-22.40_amd64.deb
../linux-headers-4.4.0-22-generic_4.4.0-22.40_amd64.deb
../linux-image-4.4.0-22-generic_4.4.0-22.40_amd64.deb
../linux-image-extra-4.4.0-22-generic_4.4.0-22.40_amd64.deb
../linux-tools-4.4.0-22-generic_4.4.0-22.40_amd64.deb
</pre>
<p>這樣就可以將這些 Debian packages 拿去安裝使用了。</p>
<p>最後我放了一份在 <a href="http://people.ubuntu.com/~fourdollars/usb2rs232/">http://people.ubuntu.com/~fourdollars/usb2rs232/</a> 上面,也許有人剛好也需要想要測試一下效果如何。</p>
<p>參考資料:<a href="https://wiki.ubuntu.com/Kernel/KernelDebuggingTricks">https://wiki.ubuntu.com/Kernel/KernelDebuggingTricks</a></p>$4http://www.blogger.com/profile/05027047996196141367noreply@blogger.com0tag:blogger.com,1999:blog-14489808.post-77068522786463374452016-05-29T13:20:00.000+08:002017-05-14T15:49:11.318+08:00在 Ubuntu 16.04 上面使用自然人憑證報稅<p>發現完全可以依照兩年前寫過的<a href="https://fourdollars.blogspot.com/2014/05/ubuntu-tax.html">在 Ubuntu 14.04 上面使用自然人憑證報稅</a>的步驟,現在不管是 i386 的或是 amd64 的都可以運作。</p>
<p>只是我不明白為什麼<a href="https://pfiles.tax.nat.gov.tw/ibxpdf/ibx_installPlugin.jsp">自然人憑證用戶端元件安裝</a> (HiPKIClient) 上面完全沒有提到有 amd64 的版本可以使用。</p>
<ul>
<li><a href="https://rtn.tax.nat.gov.tw/ircweb/include/npHiPKIClient-linux-etax.xpi">https://rtn.tax.nat.gov.tw/ircweb/include/npHiPKIClient-linux-etax.xpi</a> (i386)</li>
<li><a href="https://rtn.tax.nat.gov.tw/ircweb/include/npHiPKIClient-linux-etax64.xpi">https://rtn.tax.nat.gov.tw/ircweb/include/npHiPKIClient-linux-etax64.xpi</a> (amd64)</li>
</ul>
<p>這樣一來我就不用設法去生一個 i386 的環境來使用。</p>
<p>另外今年大家都會遇到的問題是 HiPKIClient 沒有合法簽章,因為現在的 Firefox 預設上都強制要求 extension/plugin 要有合法簽章才能夠使用,不然的話就要手動停用強制簽署的功能。</p>
<blockquote>「你可以在 Firefox 設定編輯器(about:config 頁面)將 xpinstall.signatures.required 修改成 false 來暫時停用強制簽署的功能。」</blockquote>
<p>還有要注意安裝 EZ-100PU 讀卡機的<a href="http://www.castlestech.com/wp-content/uploads/2016/08/201511920271676073.zip">驅動程式</a>有沒有符合系統的版本,通常使用指令<pre class="brush:shell">uname -i</pre>就可以知道當下的系統是 i386 還是 x86_64 (aka amd64) 了。</p>
<pre class="brush:shell">
$ unzip -l 201511920271676073.zip
Archive: 201511920271676073.zip
Length Date Time Name
--------- ---------- ----- ----
0 2011-08-10 15:04 EZUSB_Linux/
69340 2011-08-10 14:54 EZUSB_Linux/EZUSB_Linux_x86_64_v1.5.3.zip (amd64)
58687 2011-08-10 14:54 EZUSB_Linux/EZUSB_Linux_x86_v1.5.3.zip (i386)
58 2008-04-09 13:12 Archive created by free jZip.url
--------- -------
128085 4 files
</pre>
<p>最後就是要安裝 Java 7 才能夠正常使用,但是 Oracle 已經不再維護 Java 7 了,Oracle 目前建議使用的是 Java 8,但是 Java 8 完全無法在 Ubuntu 16.04 (amd64) 上面的 Firefox 46.0.1 正常使用,不曉得國稅局何時才會請中華電信還是關貿網路來解決這個問題。</p>
<p>出社會工作後都是用 Linux 系統在報稅,可是十幾年過去了,還是覺得政府做得很糟糕。:-(</p>$4http://www.blogger.com/profile/05027047996196141367noreply@blogger.com0tag:blogger.com,1999:blog-14489808.post-68695707610920090532016-05-08T14:36:00.000+08:002017-02-14T20:49:41.942+08:00在 Ubuntu 16.04 上面製作 FreeDOS 開機的 USB 隨身碟<p>首先是安裝 makebootfat 這個套件。</p>
<pre class="brush:shell">
$ sudo apt install makebootfat
</pre>
<p>然後就可以參考 /usr/share/doc/makebootfat/README.Debian 這份文件來製作 FreeDOS 開機的 USB 隨身碟,只不過文件內容有點錯誤,所以我根據我的喜好調整了一下,以下假設 USB 隨身碟的 device node 在 /dev/sdb。</p>
<pre class="brush:shell">
$ 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/
</pre>
<p>這樣就可以產生 FreeDOS 開機的 USB 隨身碟,不過真正在使用時似乎還是會遇到一些相容性的問題,像是我在 Dell 電腦的 Legacy BIOS mode 都可以正常使用,但是在我自己的 Lenovo ThinkPad X200 上面就不能用。</p>
<p>2017/02/14 補充:做了一個快速使用的腳本程式 <a href="https://gist.github.com/fourdollars/60c09f96273b0ce64160a4d5b13c7898">mkfreedos.sh</a></p>$4http://www.blogger.com/profile/05027047996196141367noreply@blogger.com0tag:blogger.com,1999:blog-14489808.post-57222348375184779052016-05-06T23:30:00.000+08:002016-05-08T16:10:26.599+08:00在搭配 32-bit UEFI BIOS 的電腦上面安裝 Ubuntu 16.04 amd64<p>最近剛好拿到一台硬體上面的 BIOS 只有支援 32-bit UEFI,但是 Ubuntu 16.04 以前的版本包含 Ubuntu 16.04 本身的標準安裝媒體都沒有支援。</p>
<p>不過還好找到 <a href="http://askubuntu.com/questions/392719/32-bit-uefi-boot-support">http://askubuntu.com/questions/392719/32-bit-uefi-boot-support</a> 提到了可以借用 Debian multi-arch 的 netboot ISO 裡面的 GRUB 檔案來繞過啟動的問題。</p>
<p>首先是要將 UEFI BIOS 當中的 Secure Boot 關掉,然後將 <a href="http://releases.ubuntu.com/16.04/">http://releases.ubuntu.com/16.04/</a> 上面的 ubuntu-16.04-desktop-amd64.iso 下載回來解開到 USB 隨身碟上面。</p>
<pre class="brush:shell">
$ sudo apt install p7zip-full
$ cd /media/user/USBStick
$ 7z x ~/ubuntu-16.04-desktop-amd64.iso
</pre>
<p>然後是到 <a href="http://cdimage.debian.org/debian-cd/current/multi-arch/iso-cd/">http://cdimage.debian.org/debian-cd/current/multi-arch/iso-cd/</a> 上面將 debian-8.4.0-amd64-i386-netinst.iso 下載回來,然後掛載起來將當中的 GRUB 檔案複製到 USB 隨身碟上面。</p>
<pre class="brush:shell">
$ sudo mount ~/debian-8.4.0-amd64-i386-netinst.iso /mnt
$ cp -rv /mnt/boot/grub/i386-efi /media/user/USBStick/boot/grub/
$ cp -v /mnt/efi/boot/bootia32.efi /media/user/USBStick/EFI/BOOT/
</pre>
<p>最後將 /mnt 跟 USB 隨身碟都卸載就可以拿去安裝 Ubuntu 16.04 amd64 了。</p>
<pre class="brush:shell">
$ cd
$ sudo umount /mnt
$ umount /media/user/USBStick
</pre>
<p>安裝過程中我有接著有線網路,並且提供 DHCP 給它取得 IP,所以它會自己連上網路去下載 grub-efi-ia32 及 grub-efi-ia32-bin 回來安裝使用,這是 Ubuntu 16.04 amd64 之所以能夠正常安裝使用的重要步驟。</p>
<p>另外一個重點是 Debian multi-arch 的 netboot ISO 裡面的 GRUB 檔案可能沒有支援 Secure Boot,還有 Ubuntu 16.04 也沒有提供 grub-efi-ia32-signed 這樣的套件,所以遇上了無法關閉 Secure Boot 的 UEFI BIOS 就無法使用這個方法來安裝了。</p>
<p><b>補充:</b>只要再使用「<a href="https://fourdollars.blogspot.com/2013/05/ubuntu-1304121012042-debian-70-usb.html">自製 Ubuntu 13.04/12.10/12.04.2 與 Debian 7.0 測試硬體安裝使用的 USB 隨身碟</a>」裡面提到的指令,就可以製作出同時可以使用於 Legacy BIOS、32-bit UEFI BIOS 與 64-bit UEFI BIOS 的 Ubuntu 16.04 amd64 安裝 USB 隨身碟</p>
<pre class="brush:shell">
$ sudo apt install grub-pc-bin
$ sudo grub-install --removable --target=i386-pc --root-directory=/media/user/USBStick/ /dev/sdb
</pre>
<p>不過後來又發現,其實只要使用 Ubuntu 16.04 裡面的工具就不需要使用 Debian multi-arch 的 netboot ISO 裡面的 GRUB 檔案了。 Orz...</p>
<pre class="brush:shell">
$ sudo apt install grub-efi-ia32-bin
$ sudo grub-install --removable --target=i386-efi --root-directory=/media/user/USBStick/ /dev/sdb
</pre>
<p>當然 grub-pc-bin 跟 grub-efi-ia32-bin 都是從 Debian 而來的,只是使用上最好都維持同樣的版本,比較不會遇到奇怪的問題。</p>$4http://www.blogger.com/profile/05027047996196141367noreply@blogger.com0tag:blogger.com,1999:blog-14489808.post-86862845694054643152016-04-13T13:11:00.000+08:002016-04-13T13:11:48.294+08:00正式成為 Ubuntu 社群成員<p>一些 FLOSS 社群朋友都知道我在 Canonical 台北分公司工作,不過在 Canonical 公司工作的員工並不代表是正式的 Ubuntu 社群成員,正式的 Ubuntu 社群成員會有 <a href="https://wiki.ubuntu.com/Membership#Ubuntu_Community">https://wiki.ubuntu.com/Membership#Ubuntu_Community</a> 所提到的權利。</p>
<p>像是可以使用 Ubuntu logo 來印名片、可以在社群會議上投票、有個 @ubuntu.com 的 Email alias、有 1~1.5 GB 的 <a href="http://people.ubuntu.com/~fourdollars">http://people.ubuntu.com/~fourdollars</a> 空間、Mark Shuttleworth 親筆簽名的證書之類的。</p>
<p>其實我工作的部門與 Ubuntu 社群完全無關,主要是在處理個人電腦、筆記電腦上面預載 Ubuntu OEM 客製化版本,這樣的工作也做了六年多了,還是在做差不多的事情,而成為正式認證過的 Ubuntu 社群成員並不在我的工作要求之中,完全只是我個人的興趣,也是我個人進入 Canonical 公司的小小目標之一。</p>
<p>這次我取得資格是 Ubuntu Contributing Developer,這是<a href="https://wiki.ubuntu.com/UbuntuDevelopers">開發者路線</a>的第一個升級,正式的 Ubuntu 社群成員其實有許多不同的發展路線,有翻譯的、QA 的、美術的、文件的、本地社群經營之類的,而我目前只是專注在開發者這條路線上面而已,有點像是電玩游戲裡面的職業一樣,每個職業有自己技能樹的發展,只是正式的 Ubuntu 社群成員可以同時發展不同的職業,以後有機會再來分享,如果對於 Ubuntu 開發者路線有興趣的人不妨參加每週二的 <a href="http://www.tossug.org">TOSSUG</a> 聚會,可以跟我聊聊。</p>
<p>BTW,TOSSUG 聚會也有在進行 Debian 開發者路線的活動,有興趣的人也可以來參加。</p>$4http://www.blogger.com/profile/05027047996196141367noreply@blogger.com0tag:blogger.com,1999:blog-14489808.post-74870953283263908862016-03-05T12:10:00.001+08:002016-03-10T10:05:55.182+08:00在 Debian/Ubuntu amd64 上面解決 Google Chrome 更新的問題 (2016/03/11 已修正)<p><a href="https://groups.google.com/a/chromium.org/d/msg/chromium-dev/FoE6sL-p6oU/mVlwyh02AgAJ">Google Chrome 已經不再提供 Linux i386 的版本</a>,所以在 Debian/Ubuntu amd64 使用上可能會遇到下面的問題,並不會導致無法正常更新系統,只是老是看到它很討厭。</p>
<pre class="brush:text">W: 無法取得 https://dl.google.com/linux/chrome/deb/dists/stable/Release,在 Release 檔案找不到要有的「main/binary-i386/Packages」項目 (sources.list 項目有問題或檔案格式不對)
E: 某些索引檔未能下載。其已遭略過,或改為使用舊的。</pre>
<p>此時可以參考 <a href="https://wiki.debian.org/Multiarch/HOWTO">https://wiki.debian.org/Multiarch/HOWTO</a> 將 /etc/apt/sources.list.d/google-chrome.list 內容修改成下面這樣就可以解決問題了。</p>
<pre class="brush:text">deb [arch=amd64] https://dl.google.com/linux/chrome/deb/ stable main</pre>
<h3>2016/03/07 補充:</h3>
<p>修改後隔天又恢復原狀了,查了一下是 /etc/cron.daily/google-chrome 的關係,所以只能等到 <a href="https://codereview.chromium.org/1759243002">Issue 1759243002: Add multiarch specification to apt repo config.</a> 被釋出到穩定版本才能真正解決問題。</p>
<h3>2016/03/11 補充:</h3>
<p>google-chrome-stable 49.0.2623.87-1 已經修好了</p>$4http://www.blogger.com/profile/05027047996196141367noreply@blogger.com0tag:blogger.com,1999:blog-14489808.post-67427851997182520712015-11-17T21:27:00.000+08:002015-11-17T21:29:39.782+08:00第一次上傳 Debian package 到 Debian 上去<p>今天是我正式成為 Debian Maintainer (DM) 之後,第一次自己直接上傳套件到 Debian 裡面。</p>
<p>成為 DM 之後,必需要有 Debian Developer (DD) 的幫忙,開特定套件的上傳權限,DM 才能夠自己上傳套件。</p>
<p>我正在處理的是 <a href="https://tracker.debian.org/pkg/kore">kore - Fast SPDY capable web server for web development in C</a></p>
<p>我參考 <a href="https://wiki.debian.org/DebianMaintainer/Tutorial">DebianMaintainer/Tutorial - Debian Wiki</a>,先用 git-buildpackage -S -sa 將 Debian source package 創建出來,然後再用 sbuild -s -A -d sid-amd64 kore_1.2.3-2.dsc 來編譯成 Debian binary package,然後再用 debsign kore_1.2.3-2_amd64.changes 簽上數位簽章,然後用 dput ftp-master kore_1.2.3-2_amd64.changes 上傳。</p>
<p>只是上傳後馬上收到一封 kore_1.2.3-2_amd64.changes REJECTED 的通知信,覺得很奇怪,我的步驟跟方法應該都正確啊!為什麼會有問題呢?</p>
<pre class="brush:text">No target suite found. Please check your target distribution and that you uploaded to the right archive.
===
Please feel free to respond to this email if you don't understand why
your files were rejected, or if you upload new files which address our
concerns.</pre>
<p>後來到 <a href="http://www.oftc.net/">OFTC IRC</a> 的 #debian-mentors 求助,結果有人叫我去檢查 kore_1.2.3-2_amd64.changes 的內容,然後我發現了。</p>
<pre class="brush:text">...
Distribution: sid-amd64
...</pre>
<p>原來是 sbuild 時指定使用了 sid-amd64,所以產生出來的 kore_1.2.3-2_amd64.changes 自然也會是寫著 sid-amd64,手動將它改成 Distribution: unstable 後,再用 debsign 簽章一下用 dput 上傳後就順利的進去了。</p>$4http://www.blogger.com/profile/05027047996196141367noreply@blogger.com0tag:blogger.com,1999:blog-14489808.post-55152098887538939642015-11-09T17:59:00.000+08:002015-11-10T15:10:32.289+08:00手動快速編譯 Ubuntu 14.04 當中 Linux kernel 裡面的 i915 module<p>首先要下載 Linux kernel source tree</p>
<pre class="brush:shell">$ git clone git://kernel.ubuntu.com/ubuntu/ubuntu-trusty.git</pre>
<p>然後進去該目錄,並且切換到 vivid branch (這邊使用的是 Ubuntu 14.04 當中 <a href="https://wiki.ubuntu.com/Kernel/LTSEnablementStack">LTS Enablement Stacks</a> 當中的 vivid)</p>
<pre class="brush:shell">$ git checkout -b vivid origin/lts-backport-vivid</pre>
<p>快速產生目標的 .config</p>
<pre class="brush:shell">$ cat debian.vivid/config/config.common.ubuntu debian.vivid/config/amd64/config.common.amd64 debian.vivid/config/amd64/config.flavour.generic > .config</pre>
<p>執行一些設定腳本</p>
<pre class="brush:shell">$ make oldconfig && make prepare && make scripts</pre>
<p>設定環境變數 (接下來會使用到)</p>
<pre class="brush:shell">$ export KDIR=$PWD</pre>
<p>複製 Module.symvers (如果要編譯的 Linux kernel 跟系統所使用的剛好相同)</p>
<pre class="brush:shell">$ cp -v /lib/modules/$(uname -r)/build/Module.symvers Module.symvers</pre>
<p>不然就需要至少編譯整個 Linux kernel 一遍才行 (-j? 可以參考 /proc/cpuinfo 的數量來決定)</p>
<pre class="brush:shell">$ make -j8</pre>
<p>切換到該 module 的目錄底下,不過 Ubuntu 的 Linux kernel 目前有兩份不同的 i915 module,一份放在 drivers/gpu/drm/i915 底下,另一份放在 ubuntu/i915 底下。</p>
<pre class="brush:shell">$ cd drivers/gpu/drm/i915</pre>
<p>或是</p>
<pre class="brush:shell">$ cd ubuntu/i915</pre>
<p>然後開始編譯 (J=? 可以參考 /proc/cpuinfo 的數量來決定)</p>
<pre class="brush:shell">$ make -C $KDIR M=$PWD J=8</pre>
<p>參考資料:<a href="https://wiki.ubuntu.com/Kernel/BuildYourOwnKernel">Kernel/BuildYourOwnKernel - Ubuntu Wiki</a> 跟 <a href="https://www.kernel.org/doc/Documentation/kbuild/modules.txt">Documentation/kbuild/modules.txt</a></p>$4http://www.blogger.com/profile/05027047996196141367noreply@blogger.com0tag:blogger.com,1999:blog-14489808.post-57406961060653932032015-09-29T18:00:00.000+08:002015-09-29T18:00:30.381+08:00在 Mac mini (PowerPC) 上面安裝 Lubuntu 15.10<p>我有一台 <a href="https://support.apple.com/kb/SP65">1.42GHz Mac mini</a>,這幾天台灣颱風天沒事做就試著將 Debian/Ubuntu 安裝上去,試了許多方法,最後選擇了安裝 Lubuntu 15.10 最小安裝。</p>
<p>首先是到 <a href="http://ports.ubuntu.com/ubuntu-ports/dists/wily/main/installer-powerpc/current/images/powerpc/netboot/">http://ports.ubuntu.com/ubuntu-ports/dists/wily/main/installer-powerpc/current/images/powerpc/netboot/</a> 下載 mini.iso 燒錄到一張可覆寫光碟上面,然後在啟動 Mac mini (PowerPC) 時按住鍵盤上的 C 鍵讓系統從光碟開機,開機後會看到停在 <a href="https://www.debian.org/ports/powerpc/inst/yaboot-howto/">Yaboot</a> 的 boot: 提示字元,此時直接按下 Enter 鍵就可以進入安裝介面,或者是輸入 install radeon.tv=0 進入安裝介面。</p>
<p>只是過程中間手動設定使用 <a href="http://free.nchc.org.tw/pmwiki/index.php?n=FSLab.MirrorLists">free.nchc.org.tw</a> 的 Ubuntu 檔案鏡像站,目錄則是維持使用 /ubuntu-ports/ 這樣。</p>
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgBkUKUIB7Y1jXfbFYDShI15iHXVl_SZOWxI_qviH1hNt-M0_eJo_IZIJZYtQcd6pFeMtzCpeud36lAd7sabE6Ytd5ewCC8t0rSuLAdypBcTmyTXPMzQDwo1Or4YlzXxfc3JrE/s1600/mirror.png" imageanchor="1" ><br><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgBkUKUIB7Y1jXfbFYDShI15iHXVl_SZOWxI_qviH1hNt-M0_eJo_IZIJZYtQcd6pFeMtzCpeud36lAd7sabE6Ytd5ewCC8t0rSuLAdypBcTmyTXPMzQDwo1Or4YlzXxfc3JrE/s1600/mirror.png" /></a><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg2hjhoIlSR5dNDu49eA0IaYWE8RJISziPV1z3HF5zleuRzRlU9L5ab74LrN7ZeRQKrHB2OeKa7mgx2ZWKf4fkN3ZjLqN_ClBhrFBrRCLmEn6vzmTKS2RV9TnHEyXPwOHb0mgg/s1600/ports.png" imageanchor="1" ><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg2hjhoIlSR5dNDu49eA0IaYWE8RJISziPV1z3HF5zleuRzRlU9L5ab74LrN7ZeRQKrHB2OeKa7mgx2ZWKf4fkN3ZjLqN_ClBhrFBrRCLmEn6vzmTKS2RV9TnHEyXPwOHb0mgg/s1600/ports.png" /></a>
<p>之後的安裝過程跟一般的 Debian/Ubuntu netboot 安裝方式相同,如同之前分享過的 <a href="http://fourdollars.blogspot.com/2014/09/lubuntu-1404.html">Lubuntu 14.04 的最小安裝</a> 來安裝系統。</p>
<p>安裝完成後要自己調整一下系統,首先是顯示的部份,要修改 /etc/yaboot.conf 在 Kernel 參數加上 radeon.tv=0,這樣才能夠將沒有在使用的 S-video 輸出關掉,修改完後需要執行一下 sudo ybin -v 更新開機設定。</p>
<p>接下來是音效的部份,要將 /etc/modprobe.d/blacklist.local.conf 整個移除掉,或是將裡面的內容都註解掉。</p>
<pre class="brush:text"># Local module settings
# Created by the Debian installer
#blacklist snd-aoa-codec-tas
#blacklist snd-aoa-fabric-layout
#blacklist snd-aoa-i2sbus
#blacklist snd-aoa-soundbus
#blacklist snd-aoa</pre>
<p>然後是修改 /etc/modules 將 snd-powermac 註解掉,然後加上其它需要載入的 kernel modules。</p>
<pre class="brush:text">#snd-powermac
snd_aoa_i2sbus
snd_aoa_fabric_layout
snd_aoa_codec_tas
snd_aoa_codec_onyx</pre>
<p>最後是 WiFi 的部份要手動安裝 <a href="http://free.nchc.org.tw/ubuntu/pool/multiverse/l/linux-firmware-nonfree/">linux-firmware-nonfree_1.14ubuntu1_all.deb</a>,並且鎖住版號不要更新。</p>
<pre class="brush:shell">echo "linux-firmware-nonfree hold" | sudo dpkg --set-selections</pre>
<p>主要是需要下面列出的軔體檔案。</p>
<pre class="brush:text">/lib/firmware/b43/ucode5.fw
/lib/firmware/b43/pcm5.fw
/lib/firmware/b43/b0g0initvals5.fw
/lib/firmware/b43/b0g0bsinitvals5.fw</pre>
<p>如果是使用 Ubuntu 15.10 之前的版本,則會有 X Window System freezing 的問題,需要使用 radeon.agpmode=-1 來避開問題。</p>
<p>就這樣顯示、音效跟無線網路都可以運作了,只是用 Firefox 來播放 YouTube 影片會很頓很頓這樣。</p>$4http://www.blogger.com/profile/05027047996196141367noreply@blogger.com0