2017年2月15日 星期三

Samba就是捨不得我離開 Oplock break failed

電腦教室是無碟的環境,所以學生在存檔繳交作業時,我都會另外叫他們存在Samba主機,但是這個學期卻出現了一個奇怪的現象,那就是學生把檔案存到Samba後,儘管學生機都關機了,Samba內的檔案卻無法正常剪下或刪除。出現的錯誤訊息,指向有程式正開啟這些檔案,導致他們無法正常被刪除,而出現問題的學生機,又很隨機,很難對點查詢。

而這樣的狀況要隔一段時間(通常都到下一節課),就自動緩解。感覺起來,這些被綁住的檔案,隔一段時間後自動被釋放了。

而這過程中,其實只要手動將Samba服務停止後再重啟,就可以解決,但是這實在不是解決的辦法,總不可能每次要存取Samba檔案,都要再連到Samba主機下指令吧!!只好痛下決心,努力找尋答案。最初,歷經過重新設定Samba,也重新安裝過Ubuntu系統主機,病症仍未獲緩解,之後只好伸入判讀samba的log紀錄。

Samba的log紀錄被存放在/etc/log/samba/log.電腦名稱中,錯誤訊息內容類似

[2017/02/14 11:15:25.941469,  0] ../source3/smbd/oplock.c:335(oplock_timeout_handler)
  Oplock break failed for file 50109劉晧辰.svg -- replying anyway


"Oplock break failed" 指的是檔案被打開中且被某人隨機使用使用中,並且系統主機無法強制這個用戶端釋放Oplock寫回快取。
假如檔案真的被開啟了,這樣的錯誤訊息就會發生,但假如檔案確實關閉甚至電腦都關機了,卻仍出現這樣的錯誤訊息,那就可能是Samba主機某程式拒絕發出斷開(break)的訊息,或是等候不到用戶關的回覆(Replay)訊息。然後就傻傻的等待著,等等等......等到session被丟棄時,才認為對方已經完成工作沒回應,這應該算是Samba的小bug。而這樣的情形也可以解釋著為何總是要到下一堂課,原本無法刪除的檔案,都可以刪除了。


解決辦法,在/etc/samba/smb.conf中
[sharefolder]

oplocks = no    //不要鎖定oplocks

就可以解決了

事後又看到有人如下這麼寫,一併補上
locking = no
strict locking = no


設定範例:
[SAMBA]
   comment = samba共用資料
   path = /tmp/samba
   public = yes
   guest ok = yes
   writable = yes
   browseable = yes
   only guest = yes
   oplocks = no
   locking = no
   strict locking = no



ps.上面的設定式安全性最低的設定方法,沒有經過帳號認証,其實是不太建議喔!!


參考網頁:





2016年11月19日 星期六

偷偷拷貝夥伴的COMPOSER_HOME目錄

和夥伴在同一台主機下共同練習Laravel
每個人都自己的家目錄
而每個人也需要各在自己的家目錄下
composer global require "laravel/installer"
指令
主要目的是要把laravel的安裝程式下載回來到COMPOSER_HOME
(關於COMPSER_HOME是~/.composer還是~/.config/composer請看這一篇)

但是composer global的執行實在太慢了
偷懶一點的作法是

一、利用root的權限,把別人的COPY回來就好了
##舉例有test1與test2兩個使用者
mkdir ~/.composer
sudo cp -R /home/test1/.composer/* /home/test2/.composer/
sudo chown -R test.test /home/test2/.composer


二、設定laravel指令及XDG環境變數
sudo vi ~/.profile 或sudo vi ~/.bash_profile
在最後一行寫入
export PATH=$HOME/.config/composer/vendor/bin:$PATH
三、重新開機或直接執行source ~/.profile並執行laravel安裝
重新開機後,切換到自己的網頁目錄
輸入

laravel new blog

四、修改bootstrap/cache及storage
sudo chown -R www-data.www-data bootstrap/cache/
sudo chown -R www-data.www-data storage/


[Ubuntu16.04]安裝Laravel,COMPOSER_HOME竟多出了.config資料夾



如上圖
安裝Laravel的官方文件中提到:
執行
composer global require "laravel/installer"
安裝程式後,可以在~/.composer/vendor/bin目錄下找到laravel指令,但是今天卻發現此次設定的主機的路徑竟是~/.config/composer/vendor/bin,多出了一個.config的資料夾

仔細查閱相關資料後才發現,原來
假如電腦主機若是採用 freedesktop.org standards標準的作業系統,他會先偵測環境變數中XDG_CONFIG_HOME是否有設定,若沒有設定的話,就會自動幫你加上.config

If your system uses freedesktop.org standards, which it detects by looking for environment variables beginning with XDG_, then Composer uses $XDG_CONFIG_HOME/composer/, falling back to $HOME/.config/composer/ if that isn't set.


若要解決這個困擾(至少操作時跟路徑跟官方文件一致比較不會出錯),可從兩個方向著眼:
1.更改全域的設定,主機內全部使用者受惠
sudo vi /etc/profile

2.更改個別使用者
vi ~/.profile

同樣都是在檔案的最後一行加上
export XDG_CONFIG_HOME="$HOME"

這樣一來,當電腦重新啟動後,XDG_CONFIG_HOME環境變數就會先執行了,但假如你先前已經安裝過Composer的話,可能就需要再重新裝一次囉


註:其他XDG環境變數請參閱Environment variables
註:察看目前5.7的laravel Document官方文件,已經將安裝目錄改為~/.config/composer/vendor/bin,所以上面的XDG_CONFIG_HOME已毋需修改。
參考文件:




2016年11月8日 星期二

MySQL中的offset

offset的英文意思為抵消,當用在MySQL時的意思就好比忽略前幾筆資料,常跟limit搭配使用,使用時機通常是換頁時。

例如:select * from country limit 5 offset 5
意思就是:忽略前5比資料,列出country資料表中的第6~10筆資料。

2016年11月1日 星期二

ssh連線時,發生遠端主機認証資料已經改變的錯誤訊息

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@    WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!     @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
Someone could be eavesdropping on you right now (man-in-the-middle attack)!
It is also possible that a host key has just been changed.
The fingerprint for the ECDSA key sent by the remote host is
SHA256:sTZh1ToLgA3719MjTD+Hnvbfb2HXXKtOk7uvp3Us23s.
Please contact your system administrator.
Add correct host key in /home/chunkai/.ssh/known_hosts to get rid of this message.
Offending ECDSA key in /home/chunkai/.ssh/known_hosts:3
  remove with:
  ssh-keygen -f "/home/chunkai/.ssh/known_hosts" -R 192.168.30.9
ECDSA host key for 192.168.30.9 has changed and you have requested strict checking.
Host key verification failed.


上面是最近常出現的訊息,這是因為進行ssh連線時,本機端會將伺服器端的金鑰與IP對應紀錄,寫入到
/home/使用者/.ssh/know_hosts

但是因為我裝了許多台虛擬主機,不同台的虛擬主機重啟後卻有可能使用同一組IP,如此一來本機端的know_hosts紀錄對應不符(另一種狀況,當然就是伺服器有重新安裝過,似服主機的金鑰碼又會不一樣囉,這樣也會產生對應不符的情形),就會出現上述的錯誤。只要照著他提示的建議:

ssh-keygen -f "/home/chunkai/.ssh/known_hosts" -R 192.168.30.9

重新建立know_hosts紀錄。



2016年10月29日 星期六

解決Composer安裝過程少了ext-dom延伸套件

OS:Ubuntu 16.04.3 Server
PHP:7.0.8
當我使用composer create-project要建立一個yii2的專案,安裝過程出現了composer相依性問題:

phpunit/phpunit 5.6.2 requires ext-dom * -> the requested PHP extension dom is missing from your system.

似乎是ext-dom延伸套件沒有安裝,google察看了其他的文件,才發現正確的說法是php-xml套件沒有裝上

sudo apt-get install php-xml

註:

sudo apt-get install php7.0-xml

也可以,兩個安裝的路徑似乎一樣

參考網頁:

2016年10月19日 星期三

Ubuntu16.04設定locals語系

Ubuntu16.04設定語系的方法有些不太一樣

1.檢查是否有支援中文語系
less /usr/share/i18n/SUPPORTED | grep zh_TW


2.修改預設的語系全域設定
sudo vi /etc/default/locale
改成
LANG=zh_TW.UTF-8
LANGUAGE=zh_TW.UTF-8
LC_ALL=zh_TW.UTF-8
3.輸入以下的指令,將locale套件管理程式選定預設的語系改為zh_TW.UTF-8 UTF-8,並將zh_TW.Big5及en_US.UTF-8取消
sudo dpkg-reconfigure locales

4.登出後再登入,修改的設定就會生效
如此一來,利用遠端連線軟體登入,就可以正常顯示中文

相關參考:Ubuntu14.04如何設定語系