[SOLVED] Shadowsocks – “500 Internal Privoxy Error”

ISSUE:

500 Internal Privoxy Error

Privoxy encountered an error while processing your request:

Could not load template file no-server-data or one of its included components.

Please contact your proxy administrator.

If you are the proxy administrator, please put the required file(s)in the (confdir)/templates directory. The location of the (confdir) directory is specified in the main Privoxy config file. (It’s typically the Privoxy install directory).

SOLUTION:

iptables -F

真糗… @#%&&
好啦,這一篇是個 KUSO, 記得把該加上的 iptables 限制加上。

iptables -I INPUT -p tcp -m tcp –dport 8388 -j ACCEPT
iptables-save

在已執行的 Docker 容器服務中獲得 Shell

獲得 Shell 後可以對容器內容做一些修改及監控,或是進一步了解作者在 Image 中包了哪些東西,Docker 容器服務若已經啟動,在不影響服務正常運行的情況下想要獲得 Shell 的話,最方便的應該就是容器開發模式中使用 nsenter 的方式。網路上眾多安裝 nsenter 方式以這個命令最簡便,不需額外套件與編譯直接安裝:

安裝方法

docker run -v /usr/local/bin:/target jpetazzo/nsenter

其 Github 的項目地址在:https://github.com/jpetazzo/nsenter 有興趣的朋友可以多多關注這個項目。

使用方式

先取得容器的 PID

PID=$(docker inspect --format {{.State.Pid}} <container_name_or_ID>)

根據 PID 獲得 Shell

$ sudo nsenter --target $PID --mount --uts --ipc --net --pid

簡化為 Shell Script <enter-cnt.sh>:

#!/bin/bash
echo "Looking PID for $1: "
PID=$(docker inspect --format {{.State.Pid}} $1)
echo $PID
sudo nsenter --target $PID --mount --uts --ipc --net --pid
ss_2016-02-28_21-08-56

網路上也有網友提供一個較複雜的 Shell 腳本 (轉自 http://www.hjue.me/post/docker-nsenter) 需要的朋友也可以參考:

#!/bin/sh
if [ -e $(dirname "$0")/nsenter ]; then
# with boot2docker, nsenter is not in the PATH but it is in the same folder
NSENTER=$(dirname "$0")/nsenter
else
NSENTER=nsenter
fi
if [ -z "$1" ]; then
echo "Usage: `basename "$0"` CONTAINER [COMMAND [ARG]...]"
echo ""
echo "Enters the Docker CONTAINER and executes the specified COMMAND."
echo "If COMMAND is not specified, runs an interactive shell in CONTAINER."
else
PID=$(docker inspect --format "{{.State.Pid}}" "$1")
if [ -z "$PID" ]; then
exit 1
fi
shift
OPTS="--target $PID --mount --uts --ipc --net --pid --"
if [ -z "$1" ]; then
# No command given.
# Use su to clear all host environment variables except for TERM,
# initialize the environment variables HOME, SHELL, USER, LOGNAME, PATH,
# and start a login shell.
"$NSENTER" $OPTS su - root
else
# Use env to clear all host environment variables.
"$NSENTER" $OPTS env --ignore-environment -- "[email protected]"
fi
fi

Xpreia S (LT26i) 升級 Android 6.0

Xpreia S 真是個長生機種,拿它來做 Android APP 開發因為可以用很久所以 CP 值極高,持續有不同的團隊放出最新版本的 ROM,這次在 xda-developers 上看到的這一個則是放出了 Android 6.0 的版本。之前在 Xperia Z5C 上就體驗過從 5.x 升級到 6.0 之後的速度改進,當然最主要的還是應用程式權限的細分更能讓機主擁有更多的自主性。

安裝過程國外網友做了一個不錯的教學,測試過不會變磚。

How to install Android 6.0 Marshmallow in Xperia S

先玩玩再看看以後有沒有機會升到 N… 🙂

加碼提醒,看到很多朋友用 刷機大師刷各種 ROM, 它上面推薦的 ROM 如果拿來開發你會在 Android Monitor 上看到很多有趣的現象,建議還是卸載用 xda 上的方式及 ROM 刷機吧,對那些號稱國內高手修改的 ROM 還是保持點距離。

System.Data.SQLite DLL 版本切換 32/64 Bit

專案是在 .NET 底下執行,當然最好還是編譯成 Any CPU,這時指定編譯為 32 Bit 的解法選項就不夠完美。在找解決方案的時候看了 Stackoverflow 的這一篇:

http://stackoverflow.com/questions/7264383/options-for-using-system-data-sqlite-in-a-32bit-and-64bit-c-sharp-world

參考了眾多解決方案都不太符合,後來想到的解法是使用 NSIS 做安裝檔案,預設複製 32 Bit 版本,安裝時當判斷作業系統是 64 Bit 時將 64 Bit 版本複製到應用程式執行路徑,反之則不複製,保持使用 32 Bit 版本。

 Section "Main Program" MAINSEC

SetOutPath "$INSTDIR"
SetOverwrite ifnewer

; Those files are included with the installer
File /nonfatal /a /r ..\bin\Debug\en\
File /nonfatal /a /r ..\bin\Debug\zh-Hans\
File /nonfatal /a /r ..\bin\Debug\zh-Hant\
File ..\bin\Debug\App.exe
File ..\bin\Debug\App.exe.config
File ..\bin\Debug\System.Data.SQLite.dll
File ..\bin\Debug\System.Data.SQLite.xml
File /nonfatal /a /r ..\bin\Debug\Tools\


;Store installation folder
WriteRegStr HKCU "Software\FETAG\MyApp" "" $INSTDIR


;Create shortcuts
CreateDirectory "$SMPROGRAMS\MyApp"
CreateShortCut "$SMPROGRAMS\MyApp\App.lnk" "$INSTDIR\App.exe"
CreateShortCut "$SMPROGRAMS\MyApp\UnInstall.lnk" "$INSTDIR\Uninstall.exe"


CreateShortCut "$DESKTOP\MyApp.lnk" "$INSTDIR\App.exe"


;Create uninstaller
WriteUninstaller "$INSTDIR\Uninstall.exe"


; x32 or x64 DLL
!include "x64.nsh"
${If} ${RunningX64}
; MessageBox MB_OK|MB_ICONSTOP '64 Bit'
${Else}
; MessageBox MB_OK|MB_ICONSTOP '32 Bit'
CopyFiles "$INSTDIR\Tools\System.Data.SQLite.dll" "$INSTDIR\System.Data.SQLite.dll"
${EndIf}
SectionEnd

另外一個 AssemblyResolver 的方法看起來還是太麻煩了。