如何修改 CubieTruck 的時區

CubieTruck 出廠時區預設值並非台灣,可以經由 date 這個命令知道。但如何修改時區呢?因為這台機器是Lubuntu Server,所以一般的UI是沒有的,我只透過 UART 連到主機,所以大部分得自己來。

首先到 /usr/share/zoneinfo/Asia 這個目錄看是否有 Taipei 這個檔案,正常情況下是有的。確定是存在的話,再到 /etc 目錄底下把 localtime 這個檔案移除

# rm /etc/localtime

然後連結之前檔案到 /etc/localtime

# ln -s /usr/share/zoneinfo/Asia/Taipei /etc/localtime

然後修改 /etc/timezone檔案,輸入

Asia/Taipei

這樣就完成了,輸入 date 看看是不是改變了呢?

CubieTruck安裝DLNA Server

之前買了一台機上盒,用來播放一些電影和電視劇,協議都是用Samba,所以必須用帳號密碼。心想,在家裡幹嘛要帳號密碼呢?用DLNA不就好了嘛?這樣一來,Android手機或平板也可以很容易地播放CubieTruck的媒體,不需要用Samba繞一圈來播放了。

首先,我們先安裝套件 DLNA Server – minidlna

apt-get install minidlna

這個套件比較大,大概是25MB,所以安裝會比較久,而且之後會產生一個 Database .db檔案,檔案大小會跟你的媒體數量有關的,所以空間不夠的人,就參考參考囉。

剛剛說到 Database .db檔案和 log檔案當安裝好時,預設路徑是 /var/lib/minidlna,所以擔心自己 NAND被寫穿的人,自己就另建目錄囉,像我就健在外部硬碟上。

mkdir /mnt/data/var/minidlna
chown -R minidlna:minidlna /mnt/data/var/minidlna

如果要用預設值,請跳過上述兩個步驟。接下來到 /etc目錄下編輯 nano /etc/minidlna.conf 這個檔案,我們有興趣的欄位有

  • friendly_name=CubieTruck DLNA Server
  • media_dir=A,/mnt/data/mp3 # A代表Audio聲音,後面加上自己想要的路徑
  • media_dir=V,/mnt/data/cinema # V代表Video影像,後面也是加上自己的路徑
  • media_dir=P,/mnt/data/picture #P代表Picture照片,路徑自己加上
  • db_dir=/mnt/data/var/minidlna ?#剛剛設定的 database 目錄,或者使用預設的 /var/lib/minidlna

然後重建 media database,然後重啟。

service minidlna stop
service minidlna force-reload
service minidlna start

如果設定沒有錯的話,這樣就可以重啟成功了。但是系統需要一段時間去掃描上述的目錄,具體時間跟你的檔案數量有關,不過至少是要幾分鐘以上的,你可以到剛剛的 database 目錄去看看 files.db 的檔案大小是否有增加。

資料庫建立完畢之後,用 Android 就可以看到 CubieTruck DLNA Server,可以直接播放上述的媒體了。

p.s. 最好把 /etc/minidlna.conf 裡面的 inotify=yes選項打開,這樣有新的檔案時就可以自動加入。但是如果媒體數量很多時,那就必須修改 /etc/sysctl.conf 檔案裡面新增

fs.inotify.max_user_watches = 100000 #依照你自己所需,預設值好像是8192而已

然後輸入下述命令生效

sysctl -p

然後到 /proc/sys/fs/inotify/max_user_watches 這個檔案是否已經被更改。

如果你對安全性要求很強的話,那把它加到防火牆內,用的 port 是 1900 (for UPnP)和 8200 (for HTTP media streaming)

ufw allow from 192.168.1.0/24 to any port 1900 proto udp
ufw allow from 192.168.1.0/24 to any port 8200 proto tcp

上述假定只讓 192.168.1.* 的機器進來,依照自己需要更改。

如何讓CubibeTruck掛載Window的網路芳鄰資料夾

因為想要把CubieTruck的一些資料給備份起來,所以點子又想回Windows了。如果在固定時間(Crontab)把某些資料 rsync 到 Windows的網路芳鄰資料夾裡面,看起來比較保險,正所謂狡兔有三窟嗎!

所以立刻試了一下 mount -t smbfs …..

啊?出現?unknown filesystem type ‘smbfs’,無所不能的 Linux 竟然不認識 smbfs這種檔案系統,這有點不可思議。所以上網查了一下,原來 smbfs 已經荒廢不用了,現在都改用 cifs 了,所以立刻安裝 cifs 到 CubieTruck

apt-get install cifs-utils

不一會兒就安裝好了,現在就著手來掛載 Windows 的網路芳鄰吧!假定

1. Windows的網路芳鄰路徑為 //192.168.1.100/share –> 不要告訴我不知道,你用別台機器連進去,檔案總管出現那些目錄就是啦

2. CubieTruck 掛載點 /mnt/smb ;如果沒有,自己 mkdir 一下,看你想掛到哪個地方。

命令就是

mount -t cifs -o username='你的Windows可以登入的帳號',password='搭配剛才Windows帳號的密碼' //192.168.1.100/share /mnt/smb

這樣就大功告成了,測試一下,cd /mnt/smb,哇,連中文檔名都可以顯示,不必指定 iocharset=utf8了。再來 mkdir test,成功,也可以寫入。那就可以好好研究一下 rsync 了。

p.s. 是不是要寫入 /etc/fstab ,正在考慮有沒有這個必要。

翻滾吧,CubieTruck WordPress

雖說CubieTruck是ARM Cortext-A8雙核@1GHz,但我心裡有底,跑起網頁應該快不了多少,之前網路上聽人說的,真是不堪入耳。先讓我們測試一下到底 WordPress 的效能是多少呢?首先輸入

ab -n 10 http://www.dennysu.com/

稍微等一下,她會幫我們測試連線到 www.dennysu.com 這個網址 10次,平均值是多少。答案揭曉,中位數落在 1.6 秒,看來不是很差勁啊。可能我都已經把 mysql 的 database 搬到硬碟了,所以不是網路上看到的3到4秒。

但還是希望能快一點,期望能在1秒以內,所以先捉了 php-apc 這隻程式

apt-get install php-apc

然後到 /etc/php5/apache2目錄裡面編輯 php.ini,在底部添加

[apc]
apc.enabled=1
apc.shm_size=128M ; 預設是32M,以CubieTruck 2G RAM,是可以揮霍一下
apc.shm_segments=1
apc.ttl=3600
apc.user_ttl=7200
apc.gc_ttl=3600
apc.stat=1

然後重啟 apache2

service apache2 restart

再做一次測試

ab -n10 http://www.dennysu.com/

這次中位數落在 0.7秒,嗯,快了一倍,然後實際用 chrome 看一下網頁,的確變快多了。

再來一個NFS Server

本來是打算架個NFS Server,讓Android可以Mount上去,那就不用Copy了(其實ES 檔案瀏覽器可以訪問),所以就來架一個NFS Server讓Android設備連進來。

先說結果好了,Server是架好了,但是Android /system/lib/modules 裡面什麼狗屁蛋都沒有,至少也來個 nfs.ko,所以還是沒完成。

至於CubieTruck就比較快了,畢竟還是正常的Linux版本,不像Android是閹割又閹割的Linux。

首先,安裝 nfs-kernel-server

apt-get install nfs-kernel-server

網路上很多人說要安裝其他套件,事實上,nfs-kernel-server 的確需要很多套件,但是系統會幫你安裝好的,所以安裝這個就好了。

安裝完之後,編輯 /etc/exports 檔案,在檔案末端加入

/home/denny 192.168.1.*(rw,sync,no_root_squash,no_subtree_check)

  • /home/denny -> 要分享的路徑
  • 192.168.1.* ->限制 192.168.1.xxx的網段可以 mount,NFS不是CIFS,NFS是沒有帳號密碼的喔!
  • rw 讀/寫權限
  • sync 數據同步寫入內存和硬盤
  • no_root_squash 服務器允許遠程系統以root特權存取該目錄
  • no_subtree_check 關閉子樹檢查

p.s. *和(之間沒有空白符號,也沒有TAB符號,就直接連在一塊。

重啟portmapper服務

service portmap restart

重啟NFS服務

service nfs-kernel-server restart

測試一下是否有mount成功

mount -t nfs -o nolock localhost:/home/denny//mnt/nfs/

優化 MySql 性能

自從裝上 owncloud 之後,就拼命往自己的雲端丟東西,反正硬碟也夠大,不像之前用 Dropbox 那般綁手綁腳了。但是我發現一個問題就是,如果同步大檔案時,速度沒有問題,端看你PC端的上傳速度和CubieTruck的下載速度。我在自己地方都可以達到 500-600KB以上,也許這就是頻寬的上限了。

凡事都有例外,我發現如果同步一些小的零碎檔案,速度很慢,觀察結果是大約每兩三秒才同步一個檔案(檔案大小只有20KB),這就有點不合理了。

所以我就用 top 去觀察,當然 apache 這個行程是榜上有名的(預期中),但 mysqld 這隻程式也常常出現,這就讓我想到是不是 ownload 在 query 和 update databases 時因為太多資料,所以拖慢了 ownload 同步小檔案的速度。所以我這裡優化了一下 mysql

修改 /etc/mysql/my.cnf的定義

max_connections = 50

原本是被 mark # 起來的 wait_timeout = 60 ; 沒有這行,必須新增然後重啟一下 mysql

service mysql restart

發現,速度一樣龜速,只好再安裝 mysqltuner

apt-get install mysqltuner

安裝完,檔案在 /usr/bin/mysqltuner 裡面,現在不比以前,必須用 perl 來執行,現在直接執行

mysqltuner

輸入帳號密碼,這樣就完成囉,記得還是要重啟 mysql

service mysql restart

發現 ownload 同步零碎小檔案速度快多了。

CubieTruck的中斷分配

因為這台CubieTruck一開始就是鎖定用來當伺服器的,所以我常常用 top 或 iotop (這個要另外下載) 看看到底是誰比較耗效能,如果是 apache2 就算了,偏偏讓我看到 irqbalance 這個 process 常常出現,而且吃的記憶體又大,引發我研究他的興趣。

這一篇文章,並不是讓你去解決 irqbalance 的效能的問題,而是我在研究中斷時,發現 Allwiner的driver是不是沒寫好,明明是雙核,但是網路的中斷都在第一顆核心上,連線終端機。

#cat /proc/interrupts

你可以看到

117: 178740488 0 GIC eth0

這行的意思是說,網路 eth0 這個中斷是編號 117號,系統有兩個核心,產生中斷的次數從開機之後分別是第一顆核心 17,840,488次,第二顆是 0次。有沒有看錯?0,那不就都是第一顆核心來處理,哪有那麼不公平的。所以我自己先做了一點小實驗。

到 /proc/irq/117 (eth0的中斷編號是 117,上面有提到),先 cat /proc/irq/117/smp_affinity 這個檔案,內容是3,二進制就是 00000011,代表兩顆核心都應該可以處理這個中斷啊。怎麼第二顆就沒有半次呢?

反正這也不是手機,沒有耗電的問題,把效能給榨出來就對了。理論上,第一顆核心的負載會比較大,所以我打算讓網路這個中斷都給第二顆核心處理,先試一晚看看效果。

echo "2" > smp_affinity

2 的二進制就是 0000 0010 代表都給第二顆核心處理。反之如果是 1,也就是 0000 0001,代表只給第一顆核心處理。

在回到 /proc 目錄下 cat /proc/interrupts

117: 178740488 7680 GIC eth0

嗯,現在開始,這個中斷就交給第二顆核心處理,不知道是不是心理作用,感覺好像有比較快,反正沒當機,先試一晚看看,明天再來觀察吧!

後記:如果有需要,必須寫到 /etc/rc.local檔案裡面,讓每次開機時都可以生效。76(sunxi lcd0)和79(sunxi scaler0)也可以移到第二顆CPU。

echo "2" > /proc/irq/76/smp_affinity
echo "2" > /proc/irq/79/smp_affinity
echo "2" > /proc/irq/117/smp_affinity

Syslog 一直報 Mysql 需要升級

‘明天是台灣228紀念日,放假一天,所以又有連假三天,所以來看看 Syslog 有沒有什麼地方需要注意的。發現 syslog 一直報

Feb 27 13:23:36 cubietruck /etc/mysql/debian-start[6884]: Upgrading MySQL tables if necessary.

所以上網找了一下資料,看來像是 MyISAM 的 Table 出問題,但是,檢查起來都沒任何異常,先假設是升級 MySQL 造成的問題,所以手動執行 mysql_upgrade 來完成升級動作。

mysql_upgrade -u root -p

若出現下述訊息, 則加上 –force 參數

This installation of MySQL is already upgraded to 5.1.49, use --force if you still need to run mysql_upgrade

執行結果

Looking for 'mysql' as: mysql
Looking for 'mysqlcheck' as: mysqlcheck
Running 'mysqlcheck' with connection arguments: '--port=3306' '--socket=/var/run/mysqld/mysqld.sock'
Running 'mysqlcheck' with connection arguments: '--port=3306' '--socket=/var/run/mysqld/mysqld.sock'
mysql.columns_priv  OK
mysql.db            OK
mysql.event         OK
mysql.func          OK
Running 'mysql_fix_privilege_tables'...
OK

然後再重啟 mysql 服務

service mysql restart

希望能解決問題。

一切都太順利了,但…

剛到手的CubieTruck毫無懸念地把之前所有的服務都搬過來了,而且是從Microsoft到Linux,短短幾天內。當然這都歸功於網路的力量,和自己之前在Linux打下的功力。

但感覺越來越不對,很怕一時技癢,就把機器給搞掛了,那所有的資料就付之流水了…

正在考慮是不是要買第二個 CubieTruck 供研究用,目前這台就擺著當伺服器用了。

有沒有人要贊助一下,我保證這次一定會把所有的流程寫在 Blog 裡面的。

WordPress 外網不能訪問的解決辦法

WordPress搞死人了,內網搞定了,外網卻訪問不了。沒辦法只好求助 Google 大神了,一堆中文的方法都沒有用,所以嘗試用英文找找看,立刻就有答案了。

用SSH連回主機,切換到 wordpress 目錄 ( cd /var/www/wordpress),修改 wp-config.php,步驟如下:

  • 編輯 wp-config.php檔案,在檔案最前面加上 define(\’RELOCATE\’,true);

define(\’RELOCATE\’,true);
// ** MySQL settings – You can get this info from your web host ** //

  • 連回自己可以上的外網或是內網的 http://ip/wordpress/wp-login.php網頁

手動登入自己的帳號密碼。再進行修改內網和外網的連結,注意,新版一定要以 http://為頭,結尾不能有 / 這個符號。

  • 為保險起見,再把 wp-config.php那行 define(\’RELOCATE\’,true); 拿掉吧。