服務(wù)器BMC技術(shù)調(diào)研

BMC(Baseboard Management Controller)即基板管理控制器,是IPMI(Intelligent Platform Management Interface)協(xié)議即智能平臺(tái)管理接口所定義的服務(wù)器管理體系中的核心組件

1. 概述

1.1 IMPI簡(jiǎn)介

維基百科中IPMI定義如下:

智能平臺(tái)管理接口(IPMI)是一套為自主計(jì)算機(jī)子系統(tǒng)定義的計(jì)算機(jī)接口規(guī)范,用于提供獨(dú)立于主機(jī)系統(tǒng)的CPU,固件(BIOS或UEFI)和操作系統(tǒng)等軟硬件的管理和監(jiān)視功能。 IPMI定義了一套系統(tǒng)管理員接口,用于計(jì)算機(jī)系統(tǒng)的帶外管理和管理員操作監(jiān)視。

簡(jiǎn)言之,IPMI提供了一套基標(biāo)準(zhǔn)接口,通過(guò)嵌入到服務(wù)器主板上的BMC、相關(guān)傳感器及相應(yīng)固件,提供獨(dú)立于服務(wù)器CPU、固件、和操作系統(tǒng)等軟硬件的服務(wù)器檢測(cè)管理功能,既不需要服務(wù)器操作系統(tǒng)支持,也不占用服務(wù)器操作系統(tǒng)資源。IPMI接口提供的服務(wù)包括服務(wù)器物理健康狀態(tài)檢測(cè),服務(wù)器軟硬件信息和運(yùn)行狀態(tài)查詢,開(kāi)關(guān)機(jī),察看和修改BIOS配置,遠(yuǎn)程安裝操作系統(tǒng)等。被監(jiān)控的主機(jī)可以斷電,但是必須保持電源和局域網(wǎng)連接。

IMPI接口基于命令/響應(yīng)機(jī)制,通過(guò)網(wǎng)絡(luò)功能碼將機(jī)箱、傳感器、固件、存儲(chǔ)、應(yīng)用等主機(jī)組件進(jìn)行分類(lèi)和傳遞消息,通過(guò)軟件ID對(duì)BIOS、系統(tǒng)管理軟件、遠(yuǎn)程終端等傳感器管理軟件進(jìn)行分類(lèi),在網(wǎng)絡(luò)、串行/Moderm接口、IPMB(I2C)、KCS、SMIC、SMBus等不同接口上傳遞使統(tǒng)一格式的IPMI消息。

IPMI1.5允許IPMI系統(tǒng)通過(guò)串口,BMC專(zhuān)用的帶外網(wǎng)口,或者與主機(jī)共享的帶內(nèi)網(wǎng)口(NC-SI)與遠(yuǎn)程管理系統(tǒng)通訊。

IPMI2.0增加了SOL(serial over LAN)、群組管理系統(tǒng)、增強(qiáng)身份認(rèn)證(RAKP+、SHA-1等)、基于OpenSSL/RCMP+的安全增強(qiáng)網(wǎng)絡(luò)接口、固件防火墻和VLAN支持等。其中,SOL支持將BIOS輸出和操作系統(tǒng)終端重定向到與BMC相連的串口,進(jìn)而通過(guò)IPMI與遠(yuǎn)程系統(tǒng)管理軟件連接。并且IPMI2.0兼容系統(tǒng)通常還提供KVM over IP(基于IP的遠(yuǎn)程鍵盤(pán)鼠標(biāo)顯示器連接)、遠(yuǎn)程桌面和頁(yè)面服務(wù)器等功能,雖然這些功能并不屬于IPMI協(xié)議的一部分。

IMPI規(guī)范主體架構(gòu)如下:


IPMI主體架構(gòu)

此外,為了提供更多的功能和更好的安全性,DMTF(分布式管理任務(wù)組)制定了基于瀏覽器RESTful插件和JSON數(shù)據(jù)格式的的安全可擴(kuò)展數(shù)據(jù)中心管理標(biāo)準(zhǔn)Redfish API。英特爾也實(shí)現(xiàn)了IPMI 2.0的大數(shù)據(jù)中心擴(kuò)展DCMI(Data Center Manageability Interface),基于IPMI接口但是最小化可選接口數(shù)量,并包括功率上限控制等其他不同。

1.2 BMC簡(jiǎn)介

維基百科中BMC定義如下:

基板管理控制器(BMC)提供IPMI架構(gòu)中的智能特性。它是嵌入在計(jì)算機(jī)(通常是服務(wù)器)主板上的專(zhuān)用微控制器。 BMC負(fù)責(zé)管理系統(tǒng)管理軟件和平臺(tái)硬件之間的接口。

維基百科BMC框圖

根據(jù)IPMI規(guī)范,BMC需要滿足如下條件:

  • 實(shí)現(xiàn)IMPI必選命令;
  • 提供任一BMC訪問(wèn)接口;
  • 提供標(biāo)準(zhǔn)化的看門(mén)狗定時(shí)器接口和看門(mén)狗內(nèi)部事件產(chǎn)生功能;
  • 提供可被其他主機(jī)組件使用的事件接收功能;
  • 提供可通過(guò)相應(yīng)的IPMI必選命令訪問(wèn)的SDR(傳感器數(shù)據(jù)記錄)倉(cāng)庫(kù)、SEL(系統(tǒng)事件記錄)和FRU(現(xiàn)場(chǎng)可替換單元)目錄等功能;
  • 提供初始化代理功能以初始化BMC和其他管理控制器的傳感器和事件產(chǎn)生組件。

簡(jiǎn)而言之,BMC就是嵌入到服務(wù)器主板上的一塊獨(dú)立處理器,通過(guò)IPMB、LPC(low-pin-count-interface)、SMBus等各種接口收集與主機(jī)內(nèi)部的其他軟硬件組件進(jìn)行通信,并通過(guò)網(wǎng)絡(luò)、串行/Moderm、PCI等接口傳向本地主機(jī)/遠(yuǎn)程服務(wù)器提供查詢和控制功能。

典型的BMC系統(tǒng)如下所示:


BMC典型架構(gòu)

2. 開(kāi)源方案

BMC系統(tǒng)通常由各個(gè)服務(wù)器廠商自主實(shí)現(xiàn),開(kāi)源框架較少。目前已知的開(kāi)源方案有OpenBMC、u-bmc和coreIPM。

2.1 OpenBMC

2.1.1 概述

根據(jù)維基百科的定義:

OpenBMC項(xiàng)目是Linux基金會(huì)的開(kāi)源項(xiàng)目,目的是提供一個(gè)BMC(基板管理控制器)固件堆棧的開(kāi)源實(shí)現(xiàn)。OpenBMC是BMC 的Linux發(fā)行版,旨在跨越異構(gòu)系統(tǒng),包括企業(yè),高性能計(jì)算(HPC),電信和云規(guī)模數(shù)據(jù)中心。

OpenBMC由微軟,英特爾,IBM,谷歌和Facebook發(fā)起,使用Yocto Project作為底層構(gòu)建和發(fā)布框架。OpenBMC提供REST API、Redfish、IPMIv2.0、D-BUS等接口和自定義的HOST管理接口,支持常見(jiàn)的主機(jī)狀態(tài)查看和控制、BMC和在主機(jī)固件更新等功能。

目前OpenBMC支持的Soc如下所示:

BSP目錄 單板 SoC ARCH
meta-hxt/meta-stardragon4800-rep2 stardragon4800-rep2 ASPEED AST2500 arm1176jz-s
meta-qualcomm/meta-centriq2400-rep centriq2400-rep ASPEED AST2500 arm1176jz-s
meta-inspur/meta-on5263m5 on5263m5 ASPEED AST2500 arm1176jz-s
meta-evb/meta-evb-enclustra/meta-evb-zx3-pm3 evb-zx3-pm3 Xilinx Zynq-7000 arm Cortex-A9
meta-evb/meta-evb-aspeed/meta-evb-ast2500 evb-ast2500 ASPEED AST2500 arm1176jz-s
meta-evb/meta-evb-nuvoton/meta-evb-npcm750 evb-npcm750 Nuvoton NPCM7XX arm7a-novfp
meta-evb/meta-evb-raspberrypi RaspberryPi RaspberryPi arm1176jzf-s
meta-ibm/meta-z ibm-z fsp2 PPC476
meta-ibm/meta-witherspoon witherspoon ASPEED AST2500 arm1176jz-s
meta-ibm/meta-palmetto palmetto ASPEED AST2400 arm926ejs
meta-ibm/meta-romulus romulus ASPEED AST2500 arm1176jz-s
poky/meta-poky qemux86 i586 x86
meta-facebook/meta-tiogapass tiogapass ASPEED AST2500 arm1176jz-s
meta-inventec/meta-lanyang lanyang ASPEED AST2500 arm1176jz-s
meta-quanta/meta-gsj gsj Nuvoton NPCM7XX arm7a-novfp
meta-quanta/meta-f0b f0b ASPEED AST2500 arm1176jz-s
meta-quanta/meta-q71l quanta-q71l ASPEED AST2400 arm926ejs
meta-quanta/meta-runbmc-nuvoton runbmc-nuvoton Nuvoton NPCM7XX arm7a-novfp
meta-intel/meta-s2600wf s2600wf ASPEED AST2500 arm1176jz-s
meta-mellanox/meta-msn msn ASPEED AST2500 arm1176jz-s
meta-ingrasys/meta-zaius zaius ASPEED AST2500 arm1176jz-s
meta-phosphor qemuarm arm versatile 926ejs arm926ejs
meta-portwell/meta-neptune neptune ASPEED AST2500 arm1176jz-s
BSP目錄 單板 SoC ARCH
meta-bf/meta-mavericks mavericks ASPEED AST1250 arm926ejs
meta-facebook/meta-fby2/meta-fby2-gpv2 fby2 ASPEED AST2520 arm1136jf
meta-facebook/meta-fby2/meta-fby2-ep fby2 ASPEED AST2520 arm1136jf
meta-facebook/meta-fby2 fby2 ASPEED AST2520 arm1136jf
meta-facebook/meta-fby2/meta-fby2-tl fby2 ASPEED AST2520 arm1136jf
meta-facebook/meta-fby2/meta-fby2-rc fby2 ASPEED AST2520 arm1136jf
meta-facebook/meta-yamp yamp ASPEED AST2520 arm1136jf
meta-facebook/meta-fbtp fbtp ASPEED AST2520 arm1136jf
meta-facebook/meta-fbttn fbttn ASPEED AST2520 arm1136jf
meta-facebook/meta-minipack minipack ASPEED AST2520 arm1136jf
meta-facebook/meta-lightning lightning ASPEED AST1250 arm926ejs
meta-facebook/meta-galaxy100 galaxy100 ASPEED AST1250 arm926ejs
meta-facebook/meta-wedge100 wedge100 ASPEED AST1250 arm926ejs
meta-facebook/meta-minilaketb minilaketb ASPEED AST2520 arm1136jf
meta-facebook/meta-yosemite yosemite ASPEED AST1250 arm926ejs
meta-facebook/meta-cmm cmm ASPEED AST2520 arm1136jf
meta-facebook/meta-wedge wedge ASPEED AST1250 arm926ejs
meta-portwell/meta-pwneptune pwneptune ASPEED AST2520 arm1136jf

注意

  • 不同git branch支持BSP不一樣;
  • 有效BSP必須同時(shí)包含local.conf.sample和bblayers.conf.sample文件。

2.1.2 編譯和運(yùn)行

編譯和運(yùn)行環(huán)境如下:
* kubuntu 18.04 LTS;
* OpenBMC官方倉(cāng)庫(kù);
* OpenBMC維護(hù)的QEMU倉(cāng)庫(kù),包含OpenBMC對(duì)QEMU官方代碼的補(bǔ)丁和增強(qiáng);
* Palmetto QEMU模擬目標(biāo)機(jī),真實(shí)硬件為一個(gè)使用AST2400(支持NC-SI)作為BMC的OpenPower Power8服務(wù)器。

注意:Facebook官方倉(cāng)庫(kù)編譯不成功,workaround了automake編譯錯(cuò)誤問(wèn)題后發(fā)現(xiàn)了更多問(wèn)題,無(wú)法繼續(xù)。有興趣者可參考Facebook OpenBMC倉(cāng)庫(kù)主頁(yè)OpenBMC介紹 - 簡(jiǎn)書(shū)進(jìn)行嘗試,共同討論一下。

搭建和編譯步驟如下:

  1. sudo apt-get install -y git build-essential libsdl1.2-dev texinfo gawk chrpath diffstat
  2. git clone https://github.com/openbmc/openbmc.git
  3. cd openbmc
  4. export TEMPLATECONF=meta-ibm/meta-palmetto/conf
  5. . openbmc-env
  6. bitbake obmc-phosphor-image

注意:image存放在編譯目錄下的tmp/deploy/images/palmetto/中。

QEMU編譯步驟如下:

  1. git clone https://github.com/openbmc/qemu.git qemu_obmc
  2. sudo apt-get install libsdl2-2.0-0 libsdl2-dev
  3. cd qemu
  4. git submodule update --init dtc
  5. mkdir build
  6. cd build
  7. ../configure --target-list=arm-softmmu
  8. make

注意:可執(zhí)行文件存放在編譯目錄下的arm-softmmu中,因此啟動(dòng)QEMU時(shí)必須加上路徑。

QEMU配置和啟動(dòng)步驟如下:

  1. sudo apt-get install libvirt-dev libvirt-bin bridge-utils uml-utilities qemu-system-common
  2. 創(chuàng)建網(wǎng)橋配置文件, 注意文件路徑和網(wǎng)口名與系統(tǒng)相關(guān),

    sudo mkdir -p /etc/qemu
    sudo echo "allow virbr0" >> /etc/qemu/bridge.conf

  3. 使用brctl addif/delif <網(wǎng)橋名稱(chēng)> <網(wǎng)口名稱(chēng)>命令調(diào)整網(wǎng)橋包含的網(wǎng)口并檢查,正確配置如下所示

    $ brctl show
    bridge name bridge id STP enabled interfaces
    virbr0 8000.fec6883d4c52 yes tap0

  4. sudo arm-softmmu/qemu-system-arm -m 256 -M palmetto-bmc -nographic -drive file=~/code/openbmc/build/tmp/deploy/images/palmetto/flash-palmetto,format=raw,if=mtd -net nic,macaddr=C0:FF:EE:00:00:02,model=ftgmac100 -net bridge,id=net0,helper=/usr/lib/qemu/qemu-bridge-helper,br=virbr0

REST API接口用法可參考OpenBMC REST cheat sheet:

  1. export bmc=root:0penBmc@xx.xx.xx.xx
  2. 查看接口

    curl -b cjar -k https://${bmc}/xyz/openbmc_project/list

  3. 復(fù)位Host

    curl -b cjar -k -H "Content-Type: application/json" -X PUT -d '{"data":"xyz.openbmc_project.State.Host.Transition.Reboot"}' https://${bmc}/xyz/openbmc_project/state/host0/attr/RequestedHostTransition

  4. 復(fù)位BMC

    curl -b cjar -k -H "Content-Type: application/json" -X PUT -d '{"data":"xyz.openbmc_project.State.BMC.Transition.Reboot"}' https://${bmc}//xyz/openbmc_project/state/bmc0/attr/RequestedBMCTransition

Redfish接口與REST API接口類(lèi)似,用法可參考OpenBMC Redfish cheat sheet:

  1. export bmc=root:0penBmc@xx.xx.xx.xx
  2. 查詢r(jià)oot

    curl -b cjar -k https://${bmc}/redfish/v1

  3. 建立連接

    curl --insecure -X POST -D headers.txt https://${bmc}/redfish/v1/SessionService/Sessions -d '{"UserName":"root", "Password":"0penBmc"}'
    grep X-Auth-Token headers.txt
    export bmc_token=<X-Auth-Token>

  4. 查看對(duì)象

    curl -k -H "X-Auth-Token: bmc_token" -X GET https://{bmc}/redfish/v1/Chassis

IMPI接口通常使用ipmitool訪問(wèn),該工具支持部分命令補(bǔ)齊,幫助信息豐富:

  1. sudo apt-get install ipmitool
  2. 查看Host電源狀態(tài)

    ipmitool -I lanplus -H xx.xx.xx.xx -U root -P 0penBmc power status

  3. 列出SDR(傳感器數(shù)據(jù)記錄)

    ipmitool -I lanplus -H xx.xx.xx.xx -U root -P 0penBmc sdr list

2.2 u-bmc

u-bmc是一個(gè)與OpenBMC并行開(kāi)發(fā)但使用gRPC而不是IPMI的BMC固件開(kāi)源項(xiàng)目。其中,gRPC是Google主導(dǎo)開(kāi)發(fā)的RPC框架,使用HTTP/2協(xié)議并用ProtoBuf作為序列化工具。

u-bmc目的在于挑戰(zhàn)行業(yè)現(xiàn)狀,例如為人詬病的安全問(wèn)題等。u-bmc借鑒OpenBMC的代碼并向其貢獻(xiàn)代碼。u-bmc仍處于試驗(yàn)階段,目前僅支持基于ASPEED AST2400的BMC。

2.3 coreIPM

coreIPM是一個(gè)開(kāi)源的IPMI BMC管理框架,符合帶有PICMG 3.0 R2.0 AdvancedTCA擴(kuò)展的IPMI v2.0規(guī)范,可以監(jiān)控傳感器并提供記錄和警報(bào),實(shí)現(xiàn)電源控制和復(fù)位等。

coreIPM支持NXP LPC系列ARM處理器和TI AM335X等,但Github代碼倉(cāng)庫(kù)中最近一次更新已經(jīng)是2009年12月。

參考

  1. IPMI/BMC維基百科詞條
  2. LPC(Low Pin Count)總線維基百科詞條
  3. Intel IPMI主頁(yè)(含標(biāo)準(zhǔn))
  4. NC-SI維基百科詞條
  5. IPMI/BMC百度百科詞條
  6. IPMI簡(jiǎn)介
  7. IPMI SOL – Inexpensive Remote Console
  8. IPMI SOL使用
  9. IPMI 及Serial Over Lan(Sol)的實(shí)現(xiàn)
  10. KVM OVER IP百度百科詞條
  11. 基于ARM的BMC設(shè)計(jì)與實(shí)現(xiàn)
  12. OpenBMC維基百科詞條
  13. OpenBMC主頁(yè)
  14. OpenBMC Github主頁(yè)
  15. OpenBMC介紹 - 簡(jiǎn)書(shū)
  16. u-bmc主頁(yè)
  17. u-bmc Github主頁(yè)
  18. coreIPM主頁(yè)
  19. coreIPM Google Code主頁(yè)
  20. coreIPM Github代碼克隆
  21. BMC、IPMI介紹
  22. AST2500 NC-SI功能調(diào)試
  23. DMTF Redfish主頁(yè)
  24. Redfish白皮書(shū)
  25. DCMI v1.5規(guī)范
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,412評(píng)論 6 532
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 98,514評(píng)論 3 416
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人,你說(shuō)我怎么就攤上這事。” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 176,373評(píng)論 0 374
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我,道長(zhǎng),這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 62,975評(píng)論 1 312
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 71,743評(píng)論 6 410
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 55,199評(píng)論 1 324
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼。 笑死,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,262評(píng)論 3 441
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 42,414評(píng)論 0 288
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 48,951評(píng)論 1 336
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 40,780評(píng)論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 42,983評(píng)論 1 369
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,527評(píng)論 5 359
  • 正文 年R本政府宣布,位于F島的核電站,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 44,218評(píng)論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 34,649評(píng)論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 35,889評(píng)論 1 286
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 51,673評(píng)論 3 391
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 47,967評(píng)論 2 374

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

  • 我也想要變得很優(yōu)秀,我也想要變得很厲害,我也想要你能喜歡我
    是倉(cāng)鼠喔閱讀 147評(píng)論 0 0
  • 1、老公幫忙做午飯,裝車(chē)牌,開(kāi)心 2、老公出差飛機(jī)去青島,一路平安!感恩 3、女兒可以幫忙收拾碗筷,擦桌子,開(kāi)心
    寧?kù)o的流星閱讀 218評(píng)論 0 0
  • 路人甲路遇兩人,一個(gè)是乞丐,一個(gè)是賣(mài)小商品的老人。 路人甲在老人那里買(mǎi)了五毛錢(qián)的皮筋,還討價(jià)還價(jià)多要了一根。 轉(zhuǎn)頭...
    33若水閱讀 164評(píng)論 0 1
  • 說(shuō)起登山,以前一直都是內(nèi)心自以為的喜歡,行動(dòng)上的拖延。但這一次決定去登山是去前的三天才決定,心血來(lái)潮,真的是說(shuō)走就...
    辣椒愛(ài)生活閱讀 276評(píng)論 0 0