SSL23_GET_SERVER_HELLO: tlsv1 alert internal error (SNI) in Python 2.7.6

SSL23_GET_SERVER_HELLO: tlsv1 alert internal error (SNI) in Python 2.7.6

會發生在 Python 2.7.6 連 CloudFlare HTTPS 的時候
似乎是因為 2.7.6 不支援 Server-Name-Indication (SNI)
Python 2.7.9 之後才支援

相關錯誤:

SSL routines: SSL23_GET_SERVER_HELLO: tlsv1 alert internal error
SSLError: bad handshake: SysCallError(32, 'EPIPE')

解決辦法:

$ sudo apt-get install libffi-dev libssl-dev
$ pip install -U urllib3[secure] ndg-httpsclient pyasn1

ref:
https://stackoverflow.com/questions/18578439/using-requests-with-tls-doesnt-give-sni-support/
http://docs.python-requests.org/en/master/community/faq/
https://github.com/kennethreitz/requests/issues/749
https://github.com/kennethreitz/requests/pull/1347

Setup locale in Ubuntu

$ locale-gen en_US.UTF-8

# displaying the available locales
$ locale -a

$ locale

ref:
https://www.thomas-krenn.com/en/wiki/Configure_Locales_in_Ubuntu

解法:

$ update-locale LANG=en_US.UTF-8 LC_CTYPE=en_US.UTF-8 LC_ALL=en_US.UTF-8

or

in /etc/default/locale

LANG=en_US.UTF-8
LC_CTYPE=en_US.UTF-8
LC_ALL=en_US.UTF-8

or

in ~/.bashrc

export LANG=en_US.UTF-8
export LANGUAGE=
export LC_CTYPE=en_US.UTF-8
export LC_NUMERIC=en_US.UTF-8
export LC_TIME=en_US.UTF-8
export LC_COLLATE=en_US.UTF-8
export LC_MONETARY=en_US.UTF-8
export LC_MESSAGES=en_US.UTF-8
export LC_PAPER=en_US.UTF-8
export LC_NAME=en_US.UTF-8
export LC_ADDRESS=en_US.UTF-8
export LC_TELEPHONE=en_US.UTF-8
export LC_MEASUREMENT=en_US.UTF-8
export LC_IDENTIFICATION=en_US.UTF-8
export LC_ALL=

如果你使用 upstart 來啟動你的服務
記得也要在 config 裡用 env 指定 locale 參數

apt-get commands

$ apt-get -h

# 更新來源
$ sudo apt-get update
$ sudo apt-get -y update

# 安裝 / 更新
# 如果已經安裝過了就會更新
$ sudo apt-get install nginx

# -y 是略過手動確定
$ sudo apt-get install git-core -y 

# -qq 是指 No output except for errors
$ sudo apt-get install libxml2-dev -qq

# 重新安裝
$ sudo aptitude reinstall libxml2-dev

# 移除
$ sudo apt-get remove nginx
$ sudo apt-get remove rabbitmq-server
$ sudo apt-get remove --purge mariadb-galera-server-5.5
$ sudo apt-get autoremove
$ sudo apt-get autoclean

# 查詢版本
$ sudo apt-cache show nginx
$ aptitude show nginx
$ aptitude versions rabbitmq
$ aptitude versions libxml2-dev

# 搜尋
$ aptitude search nginx
$ apt-cache search nginx

# list installed packages
$ dpkg --get-selections
$ dpkg --get-selections | grep -v deinstall

# show support status
$ ubuntu-support-status

Issues

sudo: add-apt-repository: command not found

$ sudo apt-get install python-software-properties

Ubuntu sources.list repository 分類

main 即「基本」組件,其中只包含符合 Ubuntu 的許可證要求並可以從 Ubuntu 團隊中獲得支持的軟體,致力於滿足日常使用,位於這個組件中的軟體可以確保得到技術支援和及時的安全更新。此組件內的軟體是必須符合 Ubuntu 版權要求(Ubuntu license requirements)的自由軟體,而 Ubuntu 版權要求大致上與 Debian 自由軟體指導綱要(Debian Free Software Guidelines)相同。

restricted 即「受限」組件,其中包含了非常重要的,但並不具有合適的自由許可證的軟體,例如只能以二進位形式獲得的顯卡驅動程式。由於 Ubuntu 開發者無法獲得相應的原始碼,restricted 組件能夠獲得的支持與 main 組件相比是非常有限的。

universe 即「社群維護」組件,其中包含的軟體種類繁多,均为自由软件,但都不為 Ubuntu 團隊所支援。

multiverse 即「非自由」組件,其中包括了不符合自由軟體要求而且不被 Ubuntu 團隊支援的软件包,通常為商業公司編寫的軟體。