2014年11月27日 星期四

PHP 偵測瀏覽器是否為手機

原理:

使用$_SERVER['HTTP_USER_AGENT']

前言:

忘了從哪邊看到的,HTTP Header的User-Agent是可以更改的,所以最好是在前端判斷(?)。不過我想用php來判斷應該可以應付大部分情況,而且今天都在遮疼php的解決方案,就把他記錄下來。

一、使用get_browser()

http://php.net/get_browser
get_browser()預設不能直接使用,須先做設定
安裝:
1. 到 http://browscap.org/ 下載PHP版本的full_php_browscap.ini
2. 然後設定php.ini 裡面[browscap]的
browscap = /your_browscap_ini_path/full_php_browscap.ini
3. 重啟apache
用法:
$browser = get_browser(null, true);
echo "is mobile:".$browser['ismobiledevice'];
報錯:
PHP:  syntax error, unexpected $end, expecting ']' in /etc/php/conf.d/full_php_browscap.ini on line 78
解法:
$ sed 's/;/\\\;/g' original_browscap.ini > browscap.ini
如果original_browscap.ini放在/etc/php/conf.d/ 下記得把original_browscap.ini移除,不然仍會報錯

因為使用browscap.ini ( 23MB ),刷頁面有呼叫get_browser()時會多800ms(不呼叫沒事),又ini_set無法在script時去設定browscap.ini
http://stackoverflow.com/questions/2545910/php-using-browscap-ini-on-shared-host-ini-set-failing
'browscap' is changeable only in the system php.ini and/or httpd.conf. You cannot set it at the script level.
且在cli時如果不加 -n 也會延遲,所以不建議使用這方法

參考資料:
https://github.com/browscap/browscap/issues/119

二、使用Mobile-Detect類

https://github.com/serbanghita/Mobile-Detect
require "Mobile-Detect/Mobile_Detect.php";
$detect = new Mobile_Detect;
echo "\$detect->isMobile():".$detect->isMobile();

可以在php.ini裡面設定include_path去呼叫該類別。或是把該類別放到/usr/share/pear下
我的php.ini設定:
include_path = ".:/usr/share/pear"
更多Mobile-Detect的使用方法:
https://github.com/serbanghita/Mobile-Detect/wiki/Code-examples

三、使用phpbrowscap類別

https://github.com/GaretJax/phpbrowscap
安裝方法使用composer:
https://github.com/GaretJax/phpbrowscap/wiki/QuickStart
1. 在專案根目錄新增composer.json
{
    "require": {
        "garetjax/phpbrowscap": "~2.0"
    }
}
2.
$ wget http://getcomposer.org/composer.phar
$ php composer.phar install
如果這步有報錯
PHP Fatal error:  Class 'Phar' not found in /xxx/composer.phar on line xx
請將php.ini的
extension=phar.so 註解拿掉
安裝完成後目錄裡面會多出一個vendor的資料夾
新增一個test.php檔案:
<?php
require 'vendor/autoload.php'; //要用composer的類必須加入這行
use phpbrowscap\Browscap;
$bc = new Browscap('path/to/the/cache/dir'); //
$current_browser = $bc->getBrowser();
echo '<pre>'; // some formatting issues ;)
print_r($current_browser);
echo '</pre>';

因為刷http://localhost/test.php會刷很久刷不出來,所以放棄用第三個方式做

在FB的討論:
https://www.facebook.com/groups/199493136812961/permalink/713514665410803/
其他方法:
http://detectmobilebrowsers.com/mobile
http://www.useragentstring.com/pages/api.php #不建議使用,因為要去呼叫api
https://github.com/ventoviro/windwalker-environment #未測試
結論:
行動裝置太多樣了 幾個大牌子能正確偵測到已經夠了

2014年11月24日 星期一

linux安裝megatools和megacmd

在linux上能用指令下載mega檔案的工具有:
megatools
megacmd

系統:Debian 7

安裝megacmd

安裝megacmd難度比較低
1. 在github上下載megacmd-master.zip後解壓縮
2. 在解壓縮的資料夾下
$ make
$ cp megacmd /usr/local/bin
即安裝完成

使用megacmd
下載(需開一個帳號,然後將你要下載的檔案import到你的帳號裡面再下載,沒看到可以直接下載https連結的方法)
$ megacmd -force get mega:/testing/megacmd /tmp/
報錯:
ERROR: Downloading mega:/xxx.jpg failed (Object (typically, node or user) not found)
用wget檢查:
$ wget https://mega.xxx/
錯誤: “mega.xxx” 的证书不可信。
錯誤: “mega.xxx” 的证书颁发者未知。
... 無解,只好改用megatools

安裝megatools

方法一
把source.list改成unstable
deb http://ftp.cn.debian.org/debian unstable main contrib non-free
然後用apt-get安裝。但是我實在不想讓我的debian炸掉... 所以沒用這方法安裝
方法二
安裝所需的套件
# aptitude install libglib2.0-dev libcurl4-openssl-dev libssl-dev
不然./configure時會報錯
...
configure: error: Package requirements (gio-2.0 >= 2.32.0 libcurl openssl) were not met:
...
下載megatools的linux原始碼Archive(megatools-1.9.93.tar.gz),並解壓縮後到該資料夾下
$ ./configure
$ make
# make install
安裝完後就能使用megadl等相關mega指令了

下載
$ megadl 'https://mega.co.nz/#!xxx...'
報錯:
megadl: error while loading shared libraries: libmega.so.0: cannot open shared object file: No such file or directory
需要使用root執行一次ldconfig後才能正常下載
# ldconfig


參考資料:
http://blog.hbautista.com/linux/megatools-en-debian-jessie/ (西班牙文blog...請搭配google翻譯使用)

2014年11月23日 星期日

linux桌面安裝dropbox

OS: Debian 7

新申請的dropbox帳號後導會到安裝頁面:https://www.dropbox.com/install?os=lnx

推薦使用指令安裝,下載的deb檔我裝失敗(自動裝成64位元的,啟動不了)

請注意你系統是32bits還是64bits

官網寫的 cd ~ && wget -O - "https://www.dropbox.com/download?plat=lnx.x86" | tar xzf - 我執行會報錯,所以我把他分段執行...
$ cd ~
$ wget -O dropbox.tar.gz "https://www.dropbox.com/download?plat=lnx.x86"
$ tar zxvf dropbox.tar.gz

下載 CLI 指令碼(dropbox.py) 放到/usr/local/bin/下,記得把權限改成777

啟動dropbox(在有GFW干擾情況下,記得先設定proxychains)
$ proxychains ~/.dropbox-dist/dropboxd
查dropbox狀態
$ dropbox.py status



git同時push到兩個repo

情境:
以github和gitlab為例,假設他們各自有不同的內容要整合在一起

模擬環境
分別在github和gitlab建立新專案(ex 專案名稱mp),gitlab為master的pull
master 更新檔案 pull從gitlab
master 上傳檔案push到 gitlab和github(github純備份用,因為gitlab上是和其他人共同開發)

(分別在github和gitlab的mp.git新增不同的內容,我們之後要整合在一起)

拉下gitlab檔案
$ git clone git@xxx.tw:bear/mp.git gitlab_mp #用ssh要在gitlab設定keys,用https不用,但要輸入gitlab的帳號密碼
新增remote
$ git remote add github git@github.com:bear/mp.git
更新remote(remote branch會多remotes/github/master,用git branch -a 查詢)
$ git remote update

更新特定的remote

$ git remote update github

(這邊假設github和gitlab裡面各自有不同內容要整合,如果備份的repo為新開的repo可以略過a.b.c這三步)
a. 開github的branch
$ git checkout -b github remotes/github/master
b. 切回master
$ git checkout master
c. 將github整合進gitlab
$ git rebase github


git pull(做這步之後才能push,中間有conflict就手動改)
$ git pull #這步會多一個git merge的 commit
設定origin remote的url
$ git remote set-url origin --push --add git@xxx.tw:bear/mp2.git
$ git remote set-url origin --push --add git@github.com:bear/mp.git
檢查remote 會push到哪裡
$ git remote -v
github  git@github.com:bear/mp.git (fetch)
github  git@github.com:bear/mp.git (push)
origin  git@xxx.tw:bear/mp2.git (fetch)  # 因為git push預設是git push origin master,所以master會抓自架gitlab的repo
origin  git@xxx.tw:bear/mp2.git (push) # master會push到 gitlab
origin  git@github.com:bear/mp.git (push) # master也會push到 github
最後git push就能同時推到兩個不同的repo去了
$ git push

刷新gitlab和github頁面檢查

要更改預設master pull的repo
修改 .git/config 的
[remote "origin"]
    url = git@xxx.tw:bear/mp2.git #改成你要pull的repo

參考資料:
http://stackoverflow.com/questions/849308/pull-push-from-multiple-remote-locations 採用Malvineous的答案

關於刪除branch
移除gitlab上多餘的branch
$ git push origin --delete alt(多餘的branch名字)
本地的branch要分開刪,沒辦法一起刪
$ git branch -D alt
把本地remote的branch( git branch -a )也刪
# git branch --delete --remotes origin/alt

push新的branch到remote repository
$ git push origin exhibition:exhibition3
這樣遠端倉庫就會新建exhibition3分支,內容是本地端exhibition的內容,另外origin是你remote的名字

將遠端master branch拉到本地端exhibition branch
$ git pull origin master:exhibition
語法:
git pull <remote_name> <remote_branch>:<local_branch>

將本地端exhibition branch推到遠端master branch
$ git push origin exhibition:master
語法:
git push <remote_name> <local_branch>:<remote_branch>







2014年11月19日 星期三

debian gnome桌面顯示捷徑

系統:Debian 7 (wheezy)
桌面:gnome

開啟Advanced Settings
$ gnome-tweak-tool

左上角"應用程式" -> 系統工具 -> 偏好設定 -> 進階設定值

"桌面"分頁 -> 打開 "Have file manager handle the desktop"

如果還是沒有出現,打開"偏好的應用程式"GUI(左上角"應用程式"選單內我找不到,只能用指令開啟)
$ exo-preferred-applications
"公用程式"分頁 -> 檔案管理員 -> 選"Nautilus"

注意:
sublime的Preferences -> Browse Packages 預設檔案管理員要選"Thunar",不然打不開

新增捷徑:
在面板上按住alt點右鍵 -> 加入面板 -> 啟動圖示 -> 新增應用程式在面板後然後按ctrl複製拉到桌面

參考資料:
http://forums.debian.net/viewtopic.php?f=30&t=83012

linux查區網內有哪些ip

目標:
要查無線路由器內有多少機器上線,因為有時候無法開網進無線ap後台網頁看連線狀態,或者,有些無線路由器只列出dhcp的ip位址,固定ip位址沒列出來(ex. TP-Link TL-WR742N)。

google關鍵字搜尋:
linux ip scanner

工具:
arp-scan或nmap (推薦使用nmap)

安裝:(以arch linux為例)
# pacman -S arp-scan

# pacman -S nmap

使用:
arp-scan -
# arp-scan -l #我有兩張網卡(乙太網路和無線網路),只會列出乙太網路查詢的結果
# arp-scan 192.168.0.0/24 #Scans 192.168.0.0 255.255.255.0
# arp-scan 192.168.0.1-192.168.0.254 #Scans the obvious range

nmap -
# nmap -sP 192.168.199.0/24 #Scans 192.168.199.0 255.255.255.0
# nmap -sP 192.168.199.1-254 #Scans the obvious range

實測:
在檢查"極路由"路由器時(所有設備都連無線網路),arp-scan列出的結果過少,不正確
使用nmap列出的結果較多,但每次數量都不一樣。所以以列出數量那次為參考。

參考資料:
http://itswapshop.com/articles/top-3-ip-scanners-linux

arch 看syslog

什麼是syslog?
是 system log, 會紀錄誰執行了哪些東西, 有哪些 CRON 或者哪些動作正在被執行等紀錄.

在debian中看syslog:
# tail -f /var/log/syslog
在arch linux看syslog:
# journalctl -f

參考資料:
http://blog.longwin.com.tw/2011/11/linux-data-syslog-logger-2011/

2014年11月18日 星期二

rpm使用心得

前言:
在幫Jethro安裝gitlab( 很難裝 )時,要移除之前用embedded方法安裝的gitlab

RPM - 最早由Red Hat研製(CentOS基於Red Hat),rpm檔屬於原始碼包(Source)。

常用指令:
安裝:
$ rpm -ivh webmin.rpm
列出所有安裝的rpm套件:
$ rpm -qa
查某個rpm套件是否安裝:
$ rpm -qa iptables

$ rpm -qa | grep iptables
刪除rpm套件:
$ rpm -e <package name>(我打全名,ex. rpm -e gitlab-7.4.3_omnibus.5.1.0.ci-1.el6.x86_64)
列出所有套件檔案:
$ rpm -ql iptables
列出套件資訊:
$ rpm -qi iptables


參考資料:
http://webcache.googleusercontent.com/search?q=cache:kz__FWHKVHQJ:www.howtoforge.com/forums/showthread.php%3Ft%3D8+&cd=3&hl=zh-TW&ct=clnk&gl=tw
http://www.cyberciti.biz/faq/howto-list-installed-rpm-package/

2014年11月12日 星期三

eclipse luna新增view在perspective中

在kelper之後的版本,左下角新增view的按鈕不見了,要怎麼把裝好套件上的工具(view)新增到當前的視角(perspective)中呢?

Window -> Show View -> Other -> 選你要的工具

2014年11月10日 星期一

Arch fcitx無法打英文

某天升級fcitx重開機後,發現無法輸入英文,且在fcitx設定裡面也找不到英文輸入法可以加入

嘗試:
重新安裝fctix,在自動安裝fcitx-gtk2和fcitx-gtk3時會報錯
解法:
升級glib2 (但不是真正解決此問題方法)
# pacman -S glib2

查問題:
1. 關閉fctix
2. 在命令列輸入下面這指令看出什麼錯誤
$ fcitx &
...
(ERROR-1136 /build/fcitx/src/fcitx-4.2.8.5/src/lib/fcitx/ime.c:303) IM: open /usr/lib/fcitx/fcitx-keyboard.so fail libicuuc.so.54: cannot open shared object file: No such file or directory
$ locate libicuuc.so
/usr/lib/libicuuc.so
/usr/lib/libicuuc.so.53
/usr/lib/libicuuc.so.53.1
/usr/lib32/libicuuc.so
/usr/lib32/libicuuc.so.53
/usr/lib32/libicuuc.so.53.1
原來是libicuuc.so.53這檔案沒升級
解法:
升級下面這兩個套件
# pacman -S lib32-icu
# pacman -S icu

即可正常使用fcitx

後記:
做了上面的升級後firefox打不開
$ firefox &
[1] 9803
bear@lmannb:~$ XPCOMGlueLoad error for file /usr/lib/firefox/libxul.so:
libicui18n.so.53: cannot open shared object file: No such file or directory
Couldn't load XPCOM.
解法:
升級firefox
# pacman -S firefox

總結:
1. pacman -Syu是個危險的命令
2. linux is free if your time is no value

參考資料:
http://kelvinh.github.io/blog/2013/03/29/fix-fcitx-on-archlinux/ ( 非用這邊解法s )


使用正規表示式複製檔案

目標:
只將下面資料夾裡面的1.jpg 2.jpg 3.jpg 4.jpg複製到某個資料夾
$ ls
04.jpg   3.jpg     sp640x480.gif       2.jpg
1.jpg   2-bg-m.jpg       22.jpg           4.jpg
解法:
ls | egrep "^[0-9].jpg" | xargs cp -t destination_folder
例:
$ ls | egrep "^[0-9].jpg" | xargs cp -t ../images/
注意:
egrep看不懂正規式數字的\d,要用[0-9]

參考資料:
http://stackoverflow.com/questions/3185457/why-doesnt-this-pattern-work-in-egrep
http://superuser.com/questions/441422/how-do-you-use-regular-expressions-with-the-cp-command-in-linux

2014年11月7日 星期五

Firefox FoxyProxy設定

設定了shadowsocks+foxyproxy翻牆後有個問題一直很困擾我,手動設定代理伺服器後一些內網自訂的網址( ex. test.localhost 、公司內網網站 )都沒辦法同時打開

要怎麼設定讓firefox同時上牆外網站(ex. facebook)和內網網站呢?

開啟FoxyProxy介面後,代理伺服器面板:
Default => "代理伺服器細節"選擇"選擇"直接連線"
新增代理伺服器( 假設命名MyProxy ) => "代理伺服器細節"選擇"手動設定代理伺服器"(設定值依你的代理伺服器設定而異)
MyProxy => 網址樣式 =>
1. 勾選"內部IP位址不使用此代理伺服器"
2. 將你要直接連線的內網網址"增加新的網址"到黑名單中
ex.
增加新的樣式:
樣式名稱:隨便打
網址樣式:*test.localhost* (我用萬用字元,要注意最後要加*號才能讓網址下所有檔案都直連)
然後下面選擇"黑名單"
新增萬用樣式:(必加,不然牆外的網站上不去)
樣式名稱:*
網址樣式:*
然後下面選擇"白名單" (黑名單的優先權會大於白名單)

回到FoxyProxy的代理伺服器面板,上方"選擇樣式"選"根據已經定義好的樣式及優先權使用代理伺服器"

然後國內哪些網站要連就要像設routing table一樣一個一個設進去,不然連線會較慢,無法作到完全的智能翻牆。

自訂routing table
使用 https://github.com/kalecgos0616/tools/tree/master/wildcard_bypass_domain 裡面的foxyProxy_bypass.json 在FoxyProxy的網址樣式中匯入
檢查:
開百度地圖看是不是鎖定在你所在的城市,如果在國外地圖會放到最小

SSLedge Chrome套件設定不走代理的網址
如同上面Firefox FoxyProxy遇到一樣的問題,有些內網網址要怎麼不走代理:
點選SSLedge套件圖示 => 點你走的代理上的設定圖示 => ByPass(繞行) 最下面加入你要直連的網址(ex. ,*test.localhost*)




Arch Linux 的Firefox使用VLC播放rtsp串流

維護頁面時發現該頁面<embed>使用vlc( type="application/x-vlc-plugin" )播放影片(*.avi)和串流(rtsp://)
 
or
  

s
而我的Arch Linux用firefox開出現下面這個錯誤畫面:
解法:
安裝npapi-vlc-git (需先裝vlc,pacman有套件)
$ yaourt -Ss npapi-vlc-git #注意pacman找不到npapi-vlc-git這套件
aur/npapi-vlc-git 2.1.3.100.g417d246-1 (148)
    The modern VLC Mozilla plugin
yaourt太慢的話就用proxychains4 翻牆去下載安裝
# proxychains4 yaourt -S npapi-vlc-git

裝完後重開firefox,<embed>會出現這畫面:
點擊啟用VLC Web.後就能正常看影片

VLC更進階的應用(Firefox plugin API):
http://www.videolan.org/doc/play-howto/en/ch04.html



sublime sftp使用心得

1. 在電腦上開一個資料夾
2. Sublime: Project -> Add Folder to Project
3. 在左邊slide bar的資料夾上點右鍵 -> SFTP/FTP -> Map to Remote
4. 就會在資料夾下打開sftp-config.json
注意:上層資料夾不能有sftp-config.json,不然即使資料夾開在下層,點右鍵SFTP/FTP後仍會吃到上層sftp-config.json的設定
5. 設定sftp-config.json,我有更動到的設定:
"upload_on_save": true, //儲存後就上傳到遠端
"sync_down_on_open": true, // 打開檔案時自動從伺服器同步最新檔案回來
"host": "example.com", //設定ip、帳號、密碼和遠端資料夾路徑
"user": "username",
"password": "password",
"remote_path": "/example/path/",
"ignore_regexes": [
    ...  ,
    "\\.mp4", //因為遠端的影片檔較大,不將遠端的影片檔同步回來。設定檔為json字串,所以這邊正規式要跳脫兩次
    "app/storage/",  "api/storage/",  "\\.jpg",  "\\.png", "vendor/", "lib/PHPExcel/", // 避免下載Laravel套件、log和圖片
    "[\u4e00-\u9a05]",  // 避免下載中文名檔案,因sublime sftp下載中文名字的檔案會報錯
    "ssh_key_file": "C:\/Users\/x.x.x.x-project.ppk"  // 如果主機ssh需要key登入
]
6. 同步遠端檔案回本機
資料夾上點右鍵 -> SFTP/FTP -> Download Folder
7. 直接用sublime編輯本機上同步的檔案儲存後自動上傳到server

ps.
ln -s 軟連結目錄下的檔案也會下載下來
ex.
source -> /www/wwwroot/codes/source

參考連結:http://www.barryblogs.com/sublime-text2-ftp-sftp-remotefilesync/

2014年11月4日 星期二

使用tty7( ctrl+alt+F7 )登錄桌面slim出現錯誤:failed to execute login command

環境:Arch linux
桌面:enlightenment

使用tty7( ctrl+alt+F7 )登錄桌面slim出現錯誤:
failed to execute login command
http://wiki.alpinelinux.org/wiki/SLiM
https://wiki.archlinux.org/index.php/enlightenment
解法:
編輯
~/.xinitrc
加入
exec enlightenment_start  # 這台電腦的桌面是 enlightenment
必須使用tty7登錄桌面後才能遠端或透過web api 播mplayer
不然遠端console用 DISPLAY=:0 mplayer 4.mp4 會出現錯誤:
Xlib: Invalid MIT-MAGIC-COOKIE-1 key vo: couldn't open the X11 display (:0)!

2014年11月3日 星期一

Arch linux start不能開啟桌面

狀況:電腦在外接samsung的LCD螢幕(Model: S24B370H)時無法啟動桌面

http://unix.stackexchange.com/questions/33825/startx-error-when-setting-up-x-server-on-archlinux

在startx出現類似下面的錯誤:
$ startx
...
Loading extension GLX
ile at "var/log/Xorg.0.log" for addigional information.  (EE) Server terminated with error
xinit: giving up
xinit: unable to connect to X server: Connection refused
xinit: server error

查log:
/var/log/Xorg.0.log 或 #以root執行startx
/home/user/.local/share/xorg/Xorg.0.log #以user執行startx
依錯誤提示而異
注意:
每次執行startx後Xorg.0.log是整隻檔案重寫,所以不能像apache error log用tail -f 去看他變化,只能重新打開或:edit去看新的log寫什麼

原因:沒裝主機板上顯卡驅動和設定,無須安裝samsung LCD的驅動

查主機板顯卡:
$ lspci | grep VGA
00:02.0 VGA compatible controller: Intel Corporation Xeon E3-1200 v3/4th Gen Core Processor Integrated Graphics Controller (rev 06)
得知主機板是intel的顯卡

安裝intel顯卡driver:
extra/libva-intel-driver 1.4.1-1 [installed]
    VA-API implementation for Intel G45 and HD Graphics family
# pacman -S libva-intel-driver
安裝成功後
$ ls /usr/lib/xorg/modules/drivers
會多出 intel_drv.so*這檔案。同理,安裝nvidia driver後會這邊多出nvidia_drv.so*這檔案

啟動startx出現錯誤:
(EE) No devices detected.
Fatal server error:
no screens found

解法:
設定/etc/X11/xorg.conf
Section "Device"
    Identifier     "Device0"
    Driver         "nvidia"
    VendorName     "NVIDIA Corporation"
EndSection

Section "Device"
   Identifier  "Intel Graphics"
   Driver      "intel"
   Option      "AccelMethod"  "uxa"
EndSection
注意:
設定在 /etc/X11/xorg.conf.d/20-intel.conf ( 這個路徑是 pacman -S xf86-video-intel 裝完後給我的提示) 上無效

最後
$ startx 即可開啟桌面

調整登錄畫面的解析度
編輯 /etc/X11/xorg.conf  ,在 Section "Monitor" 裡面加入這行
Section "Monitor"
  Option      "PreferredMode" "1920x1080" #你要的解析度
EndSection



Arch linux pacman 安裝軟體出現錯誤

如這篇 使用mplayer播放影片 在安裝mplayer時發生錯誤

# pacman -S mplayer
error: failed retrieving file 'lirc-utils-1:0.9.1.a-3-x86_64.pkg.tar.xz' from mirrors.ustc.edu.cn : The requested URL returned error: 404 Not Found

解法:
# pacman -Syu mplayer #更新package清單和升級所有package然後安裝mplayer
先更新pacman的database,再安裝mplayer(使用pacman -Syu會更新所有安裝的程式)
# pacman -Sy
# pacman -S mplayer

遇到錯誤:
:: Import PGP key 2048R/, "Zuyi Hu <hzy068808@gmail.com>", created: 2014-03-31? [Y/n] Y
error: key "Zuyi Hu <hzy068808@gmail.com>" could not be imported
error: required key missing from keyring
error: failed to commit transaction (unexpected error)
Errors occurred, no packages were upgraded.
解法:
https://wiki.archlinux.org/index.php/Pacman-key#Cannot_import_keys
編輯/etc/pacman.conf
SigLevel = Never # 將SigLevel設定改成Never

注意:
這步會讓pacman安裝不可信任的packages

升級chromium ( chrome的測試板 )後無法執行
$ chromium
/usr/lib/chromium/chromium: /usr/lib/libpci.so.3: version `LIBPCI_3.3' not found (required by /usr/lib/chromium/chromium)
查原因:
$ pacman -Qo /usr/lib/libpci.so.3
/usr/lib/libpci.so.3 屬於 pciutils 3.2.1-1
# pacman -Ss pciutils
core/pciutils 3.3.0-1 (base) [installed: 3.2.1-1]
    PCI bus configuration space access library and tools
原來是pciutils 版本太舊,升級....
# pacman -S pciutils
解決,正常使用。
參考資料:
https://forum.manjaro.org/index.php?topic=19875.0

Arch Internet sharing(透過另一台電腦上網)

環境:
我的電腦有連兩個網路、內網(接有線eth0 or enp0s25)和外網(收無線網路wlan0 or wls1) 有個內網的設備想透過我電腦上外網去更新程式。 內網不能對外,外網可以。
我的電腦enp0s25和內網設備enp2s0(用ifconfig查該點腦是用哪個網路)連同一個無線ap,在同一個LAN

原本要外接usb無線網卡用wpa_supplicant(需另外安裝)連無線網路去更新,但是更新一下網卡就過熱段掉了。才改採用internet sharing的方法
# wpa_supplicant -i wlan0 -c <(wpa_passphrase your_SSID your_key)

參考:https://wiki.archlinux.org/index.php/Internet_sharing
我的電腦:
1. 設定固定IP - 這步我將mac網址寫在無線ap的設定上面去設定固定ip
2. 啟用封包轉發( Enable packet forwarding )
查packet forwarding 設定:
# sysctl -a | grep forward
暫時啟用packet forwarding:
# sysctl net.ipv4.ip_forward=1
如果保留這些設定在重開機後:
編輯/etc/sysctl.d/30-ipforward.conf:
net.ipv4.ip_forward=1
net.ipv6.conf.default.forwarding=1
net.ipv6.conf.all.forwarding=1
3. 啟用NAT
# iptables -t nat -A POSTROUTING -o internet0(能上外網的網路) -j MASQUERADE
# iptables -A FORWARD -i net0(內網的網路) -o internet0(能上外網的網路) -j ACCEPT
# iptables -A FORWARD -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
例:
# iptables -t nat -A POSTROUTING -o wls1 -j MASQUERADE
# iptables -A FORWARD -i enp0s25 -o wls1 -j ACCEPT
# iptables -A FORWARD -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT

設備:
1. 設定固定ip - 將mac網址寫在無線ap的設定上面去設定固定ip
2. 設定route方向
# ip route add default via 192.168.123.100 dev eth0
例:
# ip route add default via 192.168.0.101 dev enp2s0
出現錯誤:
RTNETLINK answers: File exists
解法:
重啟網路
# ifconfig enp2s0 down
# ifconfig enp2s0 up
3. 檢查ping不ping得出去
# ping 114.114.114.114
4. ping得出去後設定DNS
/etc/resolv.conf:
nameserver 114.114.114.114

內網設備即可透過我電腦去更新程式
如:
# pacman -Syu mplayer

shan:此方法適用於linux-like的系統

更快速的方法:proxychains
假設server IP(能上外網那台):192.168.92.2
client IP(只能上內網那台):192.168.92.138
[bear@192.168.92.138 proxychains]$ ssh -NfD 9050 bear@192.168.92.2
[bear@192.168.92.138 ~]proxychains4 curl http://baidu.com
註:
server無須做任何設定,9050 port是client上proxychains.conf預設走的port
socks4     127.0.0.1 9050

client透過server上的shadowsocks上牆外網站
把server(非shadowsocks的server,是internet sharing中的server)的ss跑在0.0.0.0上
然后把client的代理配置到server的IP上
server shadowsocks的config.json配置新增:
"local_address": "0.0.0.0",
client proxychains.conf配置:
socks5  192.168.92.2 8080
最後用這些指令透過ss上網
[bear@192.168.92.138 ~] proxychains4 curl http://facebook.com
[bear@192.168.92.138 ~] proxychains4 pacman -S subversion
特別改謝shell指導

2014/11/27
上述"client透過server上的shadowsocks上牆外網站"情況在使用pacman -Sy更新時會報錯:
error: failed retrieving file 'core.db' from mirrors.163.com : Resolving timed out after 10519 milliseconds
使用iptables方法則正常

參考資料:
http://heylinux.com/archives/2933.html