如何在 CubieTruck Server 版上增加可用記憶體

之前看到這篇文章,裡面有提到一些關於CubieTruck開機時一些命令的操作。如果關閉一些功能,可以減少記憶體使用,如此一來,就可以把它拿來給其他用途用。例如:伺服器通常不需要GPU Mali 繪圖加速功能(其實我很早就想把它給關了),把一些共享記憶體給關閉就可以節省一些記憶體。根據文件上所說,可以節省150多MB的記憶體,所以這一篇我們講講如何關閉這些功能來增加可用記憶體。

首先我們必須把開機的 NAND給 Mount 起來,然後修改開機環境變數(保險起見,我會另外備份原始檔案)。

# mkdir -p /mnt/nand
# mount /dev/nanda /mnt/nand
# cp uEnv.txt uEnv.bak
# nano uEnv.txt

然後在 uEnv.txt 檔案裡面第二行:

extraargs=console=ttyS0,115200 hdmi.audio=EDID:0 ...

在這行末端加上文件上所敘述的關鍵字。

sunxi_ve_mem_reserve=0 sunxi_g2d_mem_reserve=0 sunxi_no_mali_mem_reserve

然後存檔重新開機。

# sync
#umount /dev/nanda
# reboot

重新開機後你可以發現,用free指令觀察記憶體真的變多了,但是我記錄了一下,好像只增加16MB那麼多,沒到150多MB。

修改前記憶體總量:

root@cubietruck:/root# free
             total   used    free shared buffers cached
Mem:       2015688 338532 1677156   5892   18504 130020
-/+ buffers/cache: 190008 1825680
Swap:            0      0       0

修改後記憶體總量:

root@cubietruck:/root# free
            total    used    free shared buffers cached
Mem:      2032072  341188 1690884   5904   18664 131580
-/+ buffers/cache: 190944 1841128
Swap:           0       0       0

( 2032072 – 2015688 ) / 1024 = 16MB,雖說只有16MB,但聊勝於無。

在CubieTruck下解決 Postfix SSL 無法寄信問題

最近在這台 CubieTruck (Ubuntu 14.04 LTS)上架了收發信的套件 Postfix / Dovecot,並到 StartSSL 申請免費的憑證用 SSL 協議,用 Outlook 收信件沒有太大問題,但是寄信大部分時間都寄不出去(只有幾次可以勉強寄出去,但是要試過很多次才行)。查看 syslog 都會看到一大堆問題。

postfix/smtpd[xxx]: disconnect from some ip address
postfix/smtpd[xxx]: connect from some ip address
postfix/smtpd[xxx]: disconnect from some ip address
postfix/smtpd[xxx]: connect from some ip address
...
...

似乎是連線出現問題,斷了!可是我直接用 telnet 連結到 smtps port 卻都沒有發生問題,也把防火牆,防毒軟體關閉了也沒有用,只能請教 Google 大神了,才發現這方面的問題好像大家都碰到不少,但缺乏一個解決方案,經過我多次測試來,似乎解決了問題。

先到 postfix 配置目錄下編輯 /etc/postfix/master.cf 檔案

# nano /etc/postfix/master.cf

然後找到

#    -o smtpd_tls_wrappermode=yes

找到這行,把 ‘#‘移除掉,然後重啟 postfix 服務。

# service postfix restart

現在用 Microsoft Outlook 寄信似乎順暢多了,沒有問題再發生了。

WordPress 壓縮圖片的外掛

之前這一篇文章提到如何jpegoptim 把WordPress的圖片再壓縮一次,來節省流量,但很可惜的,jpegoptim只能對jpeg圖檔做壓縮,對於時下流行的 PNG 卻一點辦法也沒有。所以這一次介紹一個 WordPress 外掛,WP Smush.it,讓你一次搞定所有的圖片。

先到WordPress後台控制台中安裝新的外掛,WP Smush.it,目前最新版本是1.6.5.4,作者是WPMU DEV。安裝完之後就可以立刻啟用它。之後再到WordPress後台控制台的媒體中的Bulk Smush it 執行,讓你一次性對圖片做壓縮。

不過這個外掛好像是透過 Yahoo Smush API完成的,所以有幾個限制

  1. 圖片檔大小不得大於1MB。
  2. 圖片只能支持http方式上傳,對於全https協議才能拿到圖片的網站不適合。
  3. 圖片可以讓 Yahoo 能夠取得,對於擁有防止盜連機制的網站不適合。
  4. 圖片必須在本機端,而不是放在CDN網站上。

如果都符合的話,就按下 “Run all my images through WP Smush.it right now” 這個按鈕,上面已經有資訊告訴你整個網站有幾張圖片,大約要花多久時間。所以建議妳最好在月黑風高的無人晚上再來一次完成。

在CubieTruck下限制特定使用者才能執行 su

之前使用 Slackware Linux Distribution時,可以限定某些使用者方可執行 su,轉變成 root。到了 Ubuntu,怎麼預設值是任意使用者都可以執行 su 轉換成 root,這看起來有點危險。所以我要在 Ubuntu 修改一下讓只有某些特定使用者才能執行 su。

首先,我發現到 Ubuntu 連 wheel 這個族群都沒有了,所以得在 /etc/group 下複製一個 wheel 族群。

# nano /etc/group

然後在第一行 root 下,添加一行一樣group id=0的 wheel 使用者族群,讓它看起來像是

root:x:0:root
wheel:x:0:root

然後存檔,這個檔案之後我們還要再改改。然後到 /etc/pam.d 目錄下找到 su 這個檔案,然後編輯它。

# nano /etc/pam.d/su

然後找到下面這一行

# auth       required   pam_wheel.so deny group=nosu

把它改成為

auth required pam_wheel.so group=wheel

存檔後不需要重啟機器或是任何服務,然後回到剛剛的 /etc/group 檔案裡面,把你要的特定人士加到 wheel 這個群族裡面,看起來像是

wheel:x:0:root,user1,user2

存檔後,只有user1user2才能通過su密碼認證,其他使用者即便密碼正確,也無法轉換成 root。

Ubuntu系統開啟 ufw 防火牆之後,iptables -A 和 -I的差異

今天在用 iptables 設定每個IP限制幾個連線時,來回好幾次怎麼設定都不能正常運作,正在納悶到底是怎麼一回事時,我把 -A 的參數改成 -I 之後竟然正常了。所以打算追根究柢看看到底哪裡出了什麼問題了。我們先說說這個命令好了,

iptables -A INPUT -p tcp --dport 80 -m connlimit --connlimit-above 10 -j REJECT

一個簡單的 iptables 命令,限制每個 IP 只能 10 個 HTTP 連線,超過就丟棄封包不理它。無奈怎麼都不會正常運作,索性改成

iptables -I INPUT -p tcp --dport 80 -m connlimit --connlimit-above 10 -j REJECT

嘿,竟然正常了。根據 iptables 語法,-A代表是Append附加在既有規則上,-I則是代表Insert添加在最前面,所以我就把整個 iptables 規則 dump 出來看看

# iptables-save > ~/rules

一看規則,明白了,雖然兩行的命令是一樣的,但順序不一樣。一個在 ufw 前面,一個在 ufw 後面。

-A INPUT -p tcp -m tcp --dport 80 -m connlimit --connlimit-above 10 --connlimit-mask 32 --connlimit-sa
(上面的規則是 -I添加進來的)
...
...
...
-A INPUT -j ufw-before-logging-input
-A INPUT -j ufw-before-input
-A INPUT -j ufw-after-input
-A INPUT -j ufw-after-logging-input
-A INPUT -j ufw-reject-input
-A INPUT -j ufw-track-input
-A INPUT -p tcp -m tcp --dport 80 -m connlimit --connlimit-above 10 --connlimit-mask 32 --connlimit-sa
(上面的規則是 -A附加進來的)
...
...

我們知道 iptables 運作規定是由上往下執行,很顯然的,如果採用 -I,因為是添加在最前面,所以運作規則會在 ufw 之前。反之如果採用 -A,那麼附加的規則會在 ufw 之後。但是 ufw 之前已經設定

# ufw allow 80

所以按照 iptables 執行順序,只要是 80 port 的都會被 ufw 允許,所以 -A 添加的規則根本不會執行到,那當然運作就不正常了。而 -I 的命令則在 ufw 之前,所以才能先過濾掉,然後才交給 ufw 判斷,唉,浪費了不少時間。

如何在 CubieTruck 上安裝論壇 Discuz 套件

Discuz 是中國開發的一套很有名的論壇套件,目前版本已經到了 3.2,安裝上也很方便,這裡我來介紹一下如何安裝 Discuz 套件。當然你必須先安裝好 Apache2/PHP5/MySQL一些基礎的套件,如果還沒有安裝好上述軟體,請參考這篇文章

首先先下載套件放到自己的家目錄。

# cd ~
# wget http://download.comsenz.com/DiscuzX/3.2/Discuz_X3.2_TC_UTF8.zip

這個是 3.2 繁體中文UTF8版本,如果要更新或其他版本,建議你去官方網站去下載適合自己的套件。

下載完之後就解壓縮檔案。

# mkdir discuz
# cd discuz
# mv ../Discuz_X3.2_TC_UTF8.zip .
# unzip Discuz_X3.2_TC_UTF8.zip

解壓縮之後有三個目錄,我們只要 upload 這個目錄,其他都是說明文件目錄,可以忽略這另外兩個目錄。然後更改upload 目錄整個權限,拷貝到入口網站的目錄去。

# chown -R www-data:www-data *
# cp -ra upload /var/www/discuz

然後第一次要自己訪問特殊路徑

http://yourip/discuz/install

然後就是第一次安裝的設定,例如:管理者名稱密碼之類的,這裡就不說明了。之後你的論壇拜訪目錄就是

http://www.yourip.com/discuz/

如果你想要原本 www.yourip.com 分流到 bbs.yourip.com (假定你可以申請到 bbs.yourip.com 域名),那麼就要動到 apache2 虛擬目錄了,先編輯這個檔案

# nano /etc/apache2/sites-enabled/000-default.conf

然後在中間安插

<VirtualHost *:80>
ServerName bbs.yourip.com

ServerAdmin webmaster@localhost
DocumentRoot /var/www/discuz
DirectoryIndex index.php

<Directory /var/www/discuz>
Options -Indexes +FollowSymLinks
AllowOverride All
Order allow,deny
Allow from all
</Directory>

ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/discuz.log combined env=!dontlog
</VirtualHost>

然後重新啟動 apache2 服務

# service apache2 restart

這樣以後只要 http://bbs.yourip.com 就可以直接到論壇目錄,可以少打一個 discuz,但是如果要 https 協議的話,就得再去申請 bbs.yourip.com 的憑證,之後再依樣畫葫蘆更改虛擬目錄設定。

如何在 CubieTruck 上安裝 MemCached

最近看 OwnCloud 的日誌,常常看到一些有關 memcached 的錯誤,這才想起來,當初架這個站時,似乎忘了安裝 memcached 模組了,難怪會有錯誤發生。

請注意是 Memcached 不是 mmcache(多個字母d),很多人搞不清楚他們兩個之間的不同!多半玩過 PHP 的人大概都聽過 mmcache,mmcache它是一個預編譯緩衝的 PHP 加速程式,能夠提升 PHP 的執行效能。但卻很少人聽過 Memcached ,因為大多人乍看之下都以為它是mmcache,使得它沒什麼機會介紹自己。事實上,若您正打算架構一個真正高負載的大型網站系統,你需要了解的並不是 mmcache,而是 memcached。

Memcached 是什麼?顧名思義,他是由記憶體(Memory)和暫存(cache)所組合起來的常駐程式(Daemon),你也可以稱它為『暫存伺服器』。 Memcached 能提供一個暫存資料的服務,透過網路供其他電腦使用。Memcached 有什麼用途?最常見的應用就是在網站伺服器的叢集,它能讓許多的網站伺服器 Session 互相流通使用。如果你正在傷透腦筋煩惱這一點,恭喜你找到解決方法了!

想要在網站伺服器的叢集中,多網站伺服器 Session 互相流通使用,首先你必須將 Memcached 架起來當 Session 分享伺服器,這邊建議你使用大的記憶體,最好是能多大就有多大,因為 Memcached 並不會以硬碟當資料暫存,而是會完全跑在記憶體上,所以若記憶被用完了,Memcached 就會無法再存放更多資料。

瞭解了 MemCached 之後,首先我們先來安裝套件,這次要安裝兩個套件,一個是基礎的memcached,一個是給 php5用的延伸套件。

# apt-get install php5-memcached memcached

這兩個套件似乎並不大,很快就安裝好了。正常安裝完之後,memcached 就已經正常運作了,我們先來看看是否正常運作:

# ps aux | grep [m]emcached
memcache 20139 0.0 0.1 47616 2168 ? Sl 11:17 0:00 /usr/bin/memcached -m 64 -p 11211 -u memcache -l 127.0.0.1

嗯,memcached 看來有綁定 port和IP位址,為了安全起見,我們也順便幫它把防火牆打開。

# ufw allow from 127.0.0.1 to 127.0.0.1 port 11211
# ufw allow from 192.168.1.199 to 127.0.0.1 port 11211

上面的 192.168.1.199 換上自己的IP,這樣防火牆就可以為 memcached 打開了。

順帶一提的是,從剛剛的訊息看來,預設值給 memcached 的記憶體只有 64M,我的 CubieTruck 有 2GB的記憶體,管它的給他揮霍一筆,增加到 128MB吧(依照自己的記憶體空間決定吧)!所以我們到 /etc 目錄底下去修改 memcached.conf

# nano /etc/memcached.conf

找到 -m 64那行,把它修改成為

-m 128

然後重新啟動服務,

# service memcached restart

因為 PHP5是依附在 Apache2 套件底下的服務,所以一定要重新啟動 apache2  的服務

# service apache2 restart

這樣就可以使 php5底下的 memcached 生效了。為了證明是否有正確運行,在自己的網頁入口目錄增加一個檔案 apache.php(事後可以刪除),把內容填上

<?php
phpinfo();
?>

然後拜訪自己的網站的 apache.php

http://your_ip/apache.php

是否增加了 memcached 這一些資料呢?

memcached

 

還有一點,不要忘了常常看 log,memcached的日誌檔案在 /var/log/memcached.log(剛剛談到的 /etc/memcached.conf 裡面可以更改位置),一般是沒有什麼事情發生的。

如何增加 SSH 登入前警告提示

SSH是系統中最重要的服務之一,很多伺服器的命令都是透過 SSH 終端機完成的,所以很多人都想趁機登入 SSH 以取得最大權限,真的防不勝防。所以我打算在登入之前提示一些警告提示

首先在 /etc/ 目錄下編輯 issue.net 這個檔案

# nano /etc/issue.net

寫入自己想要的提示警告,例如

###############################################################
#                   Welcome to CubieTruck's World             #
#                                                             #
#      Only Non-Root and Password-less key login allowed      #
###############################################################

存檔後到 /etc/ssh 目錄下編輯 sshd_config 檔案

# nano /etc/ssh/sshd_config

把這一行 # 注釋移除掉

Banner /etc/issue.net

存檔後就可以重啟 ssh 服務即可。

# service ssh restart

這樣登入前就可以看到一些警示標語了。

怎麼判定農曆是否為閏月

今年民國103年,農曆閏九月。農曆閏月是怎麼來的,是按照順序來的呢?還是有一定的規則呢?其實農曆不像回曆,是單純的陰曆。農民曆是結合太陽曆和太陰曆的一種混合曆法,相當複雜的(剛好可以說明之前中國怎麼有那麼多欽天監被砍頭)。

農民曆基本是上以陰曆為月份,但是裡面安插了二十四節氣,這二十四節氣肯定與太陽有關了,不然夏至冬至(日照時間最長最短跟月亮什麼關係)是怎麼來的!而這二十四節氣(與太陽有關)又分

十二節氣,分別是立春、驚蟄、清明、立夏、芒種、小暑、立秋、白露、寒露、立冬、大雪、小寒。
十二個中氣,分別是雨水、春分、穀雨、小滿、夏至、大暑、處暑、秋分、霜降、小雪、冬至、大寒。

一般一個陰曆月中都會含有一個節氣和一個中氣,規定某個陰曆月份內只有一個節氣,而不含上述十二個中氣者,此為閏月。《漢書‧律歷表》載:「朔不得中,謂之閏月」。

今年農曆正九月三十日剛好是霜降,與十月初一是小雪,中間只有一個節氣,也就是立冬,所以此為閏九月(閏月為上一個月之附屬月)。

所以閏月是沒有機率可以推算的,沒有一定是三年一閏(因為也有兩年一閏的),但大部分聚集在年中。傳說中閏一月死皇帝,閏十二月會改朝換代!

在 CubieTruck 上安裝 GeoIP 取得 IP 位址地理位置

每天看 log,都會看到一堆 IP 位址想要來入侵 CubieTruck 小系統,但都不知道這些 IP 位址到底是位於何方?所以只能安裝 GeoIP 套件來反查其地理位置。首先來安裝套件

# apt-get install geoip-bin

然後就可以輸入 ip 位置反查

# geoiplookup 61.174.51.215
GeoIP Country Edition: CN, China

這樣就可以大約查出他的位置是從中國來的(果然不出所料),但如果要更深入一點知道在中國哪裡,那你得下載更完整的資料庫,

GeoIP下載位置

下載完解壓縮之後你可以得到一個約18MB大小的 GeoLiteCity.dat 的資料庫,先把它放在自己的家目錄裡面(或是放在 /usr/share/GeoIP 目錄也行 )。之後用這個資料庫再來反查

# geoiplookup -f ~/GeoLiteCity.dat 61.174.51.215
GeoIP City Edition, Rev 1: CN, 02, Zhejiang, Huzhou, N/A, 30.870300, 120.093300, 0, 0

你就可以更正確知道這個 61.174.51.215 IP位址是從中國浙江省湖州市來的,經緯度是在 30.870300, 120.093300附近。