樹莓派 RaspberryPi 折騰踩坑記

項(xiàng)目需要一個(gè)爬蟲,正好朋友有一個(gè)閑置樹莓派3b+拿來用带欢。事實(shí)再一次證明邮府,任何看起來很簡(jiǎn)單的事情其實(shí)都很復(fù)雜。而那些可能會(huì)發(fā)生的錯(cuò)誤則一定會(huì)發(fā)生 (`⌒′メ)

環(huán)境:

  • Raspberry Pi 3b+
  • Raspbian 操作系統(tǒng) (基于 Debian stretch9)

顯示問題

無信號(hào)

首當(dāng)其沖的是接好屏幕卻無信號(hào)咏尝,光是這個(gè)問題就折騰了一小時(shí)压语。根據(jù)經(jīng)驗(yàn),這種詭異的問題其原因往往非常簡(jiǎn)單编检,這次也不例外无蜂。因?yàn)橹挥幸粔K顯示器,所以要樹莓派與電腦輪流使用蒙谓。不巧斥季,這東西不支持 HDMI 熱插拔,開機(jī)時(shí)沒檢測(cè)到 HDMI 之后就默認(rèn)為模擬輸出了累驮。找到問題對(duì)癥下藥就好啦酣倾,編輯系統(tǒng) sd 卡根目錄下的 Config 文件:

# 找到這行配置,刪除前面的#取消注釋就好啦谤专。
# 這會(huì)強(qiáng)制使用 HDMI 輸出無論是否連接了顯示器躁锡。
hdmi_force_hotplug=1

分辨率無法調(diào)節(jié)

默認(rèn)分辨率很低,以至于設(shè)置窗口都顯示不全置侍。無論是直接編輯配置文件還是使用 UI 修改均無效映之。又是一個(gè)多小時(shí)的折騰,了解到它會(huì)自適應(yīng)顯示屏來調(diào)節(jié)分辨率忽略用戶設(shè)置蜡坊。同時(shí)猜測(cè)是不支持熱插拔的緣故杠输,導(dǎo)致無法正確識(shí)別顯示器分辨率。同樣繼續(xù)編輯配置文件:

# 加入下面這行忽略自動(dòng)調(diào)節(jié)
hdmi_ignore_edid=0xa5000080

hdmi_group=1 # 1是CEA多用于電視秕衙,2是DMT多用于顯示器
hdmi_mode=52 # 根據(jù)顯示器分辨率調(diào)節(jié)蠢甲,具體代碼含義網(wǎng)上有很多資料。
# 比如: http://shumeipai.nxez.com/2013/08/31/custom-display-resolution-raspberry-pie.html

這下顯示問題終于搞定了据忘。

切換源

眾所周知的鹦牛,先把源 切換成國(guó)內(nèi)來節(jié)約時(shí)間搞糕,這里使用清華開源鏡像站,直接根據(jù)幫助文檔操作就好曼追。

修改 /etc/apt/sources.list窍仰,注釋掉原來的所有內(nèi)容,用下面內(nèi)容取代:

deb http://mirrors.tuna.tsinghua.edu.cn/raspbian/raspbian/ stretch main non-free contrib
deb-src http://mirrors.tuna.tsinghua.edu.cn/raspbian/raspbian/ stretch main non-free contrib

然后修改 /etc/apt/sources.list.d/raspi.list礼殊,用下面內(nèi)容取代:

deb http://mirrors.tuna.tsinghua.edu.cn/raspberrypi/ stretch main

最后執(zhí)行 sudo apt-get update 更新下軟件源列表就好啦辈赋。

Docker

為了快速配置運(yùn)行環(huán)境,首先想到的方案就是 Docker膏燕。根據(jù)官方文檔進(jìn)行安裝钥屈。

最后發(fā)現(xiàn) x86 打包的鏡像是不能在 ARM 上使用的,交叉編譯太太太折騰坝辫,遂放棄 docker 方案篷就。

警告 根據(jù) Docker 文檔,Raspbian 不能使用 apt 直接安裝近忙,而應(yīng)該手動(dòng)進(jìn)行竭业,推薦使用 docker 提供的便攜腳本。

執(zhí)行下面命令下載便攜腳本并開始安裝:

curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh --mirror Aliyun # 使用阿里云鏡像加速安裝

樹莓派默認(rèn)使用 pi 用戶登錄及舍,我們需要將它添加到 docker 用戶組未辆,這樣每次管理容器的時(shí)候不需要都加 sudo 了:

sudo usermod -aG docker pi # 注意需要注銷重新登錄來生效

最后設(shè)置下開機(jī)自動(dòng)啟動(dòng):

sudo systemctl enable docker

這樣 docker 環(huán)境就裝好了。

升級(jí) Python

Docker 不行就回到原生 Python 環(huán)境吧锯玛。默認(rèn)安裝的還是 2.x咐柜,把它升級(jí)成 3.6。首先更新軟件包并安裝所需依賴:

sudo  apt-get  update
sudo  apt-get  upgrade
sudo apt-get install build-essential libsqlite3-dev sqlite3 bzip2 libbz2-dev

下載所需版本 Python 并解壓:

wget https://www.python.org/ftp/python/3.6.8/Python-3.6.8.tgz
tar -zxvf Python-3.6.8.tgz

編譯安裝一氣呵成攘残,速度有點(diǎn)慢可以去喝杯奶茶:

cd Python-3.6.8
sudo ./configure & sudo make & sudo make install

完成后執(zhí)行 python3 --version 測(cè)試下是不是裝好了拙友。但是 python 還是調(diào)用 2.x 的版本。執(zhí)行 which python 定位一下歼郭,發(fā)現(xiàn)位于 /usr/bin/python遗契。那就好辦了,刪除然后重新創(chuàng)建一個(gè)軟鏈接:

sudo rm /usr/bin/python
sudo ln -s /usr/bin/python3 /usr/bin/python
# 執(zhí)行 `which python3` 可獲得 python3 的位置

這樣 Python 就搞定了病曾。

令人崩潰的 pip

用過 py 的肯定知道 pip 的重要性牍蜂,這次偏偏就不好使了。執(zhí)行 pip 直接報(bào)錯(cuò) ImportError: cannot import name 'main'泰涂。最終從網(wǎng)上找了一個(gè)看起來不靠譜的方案鲫竞,但實(shí)際很有效果。修改 sudo vim /user/bin/pip负敏,將原先的代碼改成下面這樣的:

from pip import __main__
if __name__ == '__main__':
    sys.exit(__main__._main())

如此一來 pip 總算可以跑起來了贡茅。接著是另一個(gè)老生常談的問題,找不到 ssl 模塊其做,導(dǎo)致無法連接 https 導(dǎo)致 pip 無法安裝或更新顶考。網(wǎng)上常見的編譯加 --with-ssl 并沒有什么幫助。

最后又是一個(gè)看起來不是很靠譜但真的很管用的方法:

首先確保所需的依賴已經(jīng)安裝了:

sudo apt-get install openssl
sudo apt-get install libssl-dev

在進(jìn)行過一次編譯之后妖泄,編輯 py 解壓的安裝包目錄下 ./Modules/Steup 文件驹沿,搜索 SSL 關(guān)鍵字,找到下面內(nèi)容并取消代碼的注釋(共4行):

# Socket module helper for socket(2)
_socket socketmodule.c # ←取消這行注釋

# Socket module helper for SSL support; you must comment out the other
# socket line above, and possibly edit the SSL variable:
#SSL=/usr/local/ssl
_ssl _ssl.c \ # ←取消這行注釋
    -DUSE_SSL -I$(SSL)/include -I$(SSL)/include/openssl \ # ←取消這行注釋
    -L$(SSL)/lib -lssl -lcrypto # ←取消這行注釋

然后重新編譯安裝 sudo make & sudo make install 即可蹈胡。

Screen

個(gè)人習(xí)慣渊季,到手 linux 必備 screen,樹莓派也不例外罚渐。screen 可以幫助管理遠(yuǎn)程會(huì)話却汉,即使斷開連接也不會(huì)終止正在執(zhí)行的任務(wù)。重新連接可以快速恢復(fù)之前的會(huì)話荷并。

安裝 Screen 非常簡(jiǎn)單合砂,直接 sudo apt-get install screen 就可以了。

Screen 的基礎(chǔ)使用也很簡(jiǎn)單源织。執(zhí)行 screen 可以新建一個(gè)會(huì)話翩伪,這會(huì)打開一個(gè)全屏 shell 窗口程序,在其中可以執(zhí)行任意操作谈息,就像 ssh 窗口那樣缘屹。

Screen 的基本單位是窗口。創(chuàng)建會(huì)話時(shí)會(huì)自動(dòng)創(chuàng)建一個(gè)窗口侠仇,一個(gè)會(huì)話可以有多個(gè)窗口轻姿。若關(guān)閉/斷開的是當(dāng)前會(huì)話的最后一個(gè)窗口,則自動(dòng)關(guān)閉/斷開會(huì)話逻炊。

Screen 的命令用 Ctrl+a 激活踢代。因?yàn)槟J(rèn)按鍵信息會(huì)發(fā)往 shell 窗口,所以需要一個(gè)組合鍵來通知 Screen 下面是命令操作嗅骄。神奇的地方來了胳挎,使用 C-a d 可以暫時(shí)斷開當(dāng)前窗口,并將其留在后臺(tái)溺森,其任務(wù)也會(huì)繼續(xù)執(zhí)行慕爬。此時(shí)可以放心地?cái)嚅_ ssh 連接。重新連接后使用 screen -r 可以快速恢復(fù)之前斷開的會(huì)話(如果有且只有一個(gè)會(huì)話)屏积,這樣執(zhí)行一個(gè)長(zhǎng)期任務(wù)就不用擔(dān)心斷掉了医窿。

如果有多個(gè)會(huì)話,使用 screen -ls 查看會(huì)話列表炊林,前面都是數(shù)字就是 id姥卢,使用 screen -r [id] 可以恢復(fù)會(huì)話。也可以使用 screen -S [name] 創(chuàng)建一個(gè)自定義名稱的會(huì)話,這樣可以使用 screen -r [name] 來快速恢復(fù)独榴。

下面是在 Screen 窗口中的常用的操作:

操作 功能
C-a ? 幫助
C-a d 暫時(shí)斷開當(dāng)前窗口
C-a k 關(guān)閉當(dāng)前窗口
C-a A(注意大寫) 重命名當(dāng)前窗口
C-a w 顯示窗口列表
C-a c 創(chuàng)建并且到一個(gè)新窗口
C-a C-a 切換到之前窗口僧叉,可在兩個(gè)窗口間快速切換
C-a n/p/[0,9] 切換到下一個(gè)/上一個(gè)/指定的窗口
C-a a 發(fā)送C-a到窗口,有點(diǎn)轉(zhuǎn)義字符的感覺

更多的 Screen 教程推薦這個(gè)棺榔。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末瓶堕,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子症歇,更是在濱河造成了極大的恐慌郎笆,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,311評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件忘晤,死亡現(xiàn)場(chǎng)離奇詭異宛蚓,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)设塔,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,339評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門凄吏,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人壹置,你說我怎么就攤上這事竞思。” “怎么了钞护?”我有些...
    開封第一講書人閱讀 152,671評(píng)論 0 342
  • 文/不壞的土叔 我叫張陵盖喷,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我难咕,道長(zhǎng)课梳,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,252評(píng)論 1 279
  • 正文 為了忘掉前任余佃,我火速辦了婚禮暮刃,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘爆土。我一直安慰自己椭懊,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,253評(píng)論 5 371
  • 文/花漫 我一把揭開白布步势。 她就那樣靜靜地躺著氧猬,像睡著了一般。 火紅的嫁衣襯著肌膚如雪坏瘩。 梳的紋絲不亂的頭發(fā)上盅抚,一...
    開封第一講書人閱讀 49,031評(píng)論 1 285
  • 那天,我揣著相機(jī)與錄音倔矾,去河邊找鬼妄均。 笑死柱锹,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的丰包。 我是一名探鬼主播禁熏,決...
    沈念sama閱讀 38,340評(píng)論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼烫沙!你這毒婦竟也來了匹层?” 一聲冷哼從身側(cè)響起隙笆,我...
    開封第一講書人閱讀 36,973評(píng)論 0 259
  • 序言:老撾萬榮一對(duì)情侶失蹤锌蓄,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后撑柔,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體瘸爽,經(jīng)...
    沈念sama閱讀 43,466評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,937評(píng)論 2 323
  • 正文 我和宋清朗相戀三年铅忿,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了剪决。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,039評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡檀训,死狀恐怖柑潦,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情峻凫,我是刑警寧澤渗鬼,帶...
    沈念sama閱讀 33,701評(píng)論 4 323
  • 正文 年R本政府宣布,位于F島的核電站荧琼,受9級(jí)特大地震影響譬胎,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜命锄,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,254評(píng)論 3 307
  • 文/蒙蒙 一堰乔、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧脐恩,春花似錦镐侯、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,259評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至只怎,卻和暖如春袜瞬,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背身堡。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評(píng)論 1 262
  • 我被黑心中介騙來泰國(guó)打工邓尤, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,497評(píng)論 2 354
  • 正文 我出身青樓汞扎,卻偏偏與公主長(zhǎng)得像季稳,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子澈魄,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,786評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容