玩轉(zhuǎn) PI 系列-如何在 Rockchip Arm 開(kāi)發(fā)板上安裝 Docker Tailscale K3s Cilium?

概述

618 買了幾個(gè)便宜的 Purple PI OH 開(kāi)發(fā)板 (500 塊多一點(diǎn)買了 3 個(gè)??), 這個(gè)開(kāi)發(fā)板類似樹(shù)莓派好乐,是基于 Rockchip(瑞芯微) 的 rx3566 arm64 芯片巾陕。如下:

Purple PI OH

買來(lái)是用作家庭服務(wù)器或家庭實(shí)驗(yàn)室的亿蒸。主要考慮就是:

  1. 便宜
  2. 可玩性高
  3. 功耗低
  4. 散熱小糊探,運(yùn)行安靜
  5. Arm64 現(xiàn)在生態(tài)還湊活

其配置如下(選擇部分說(shuō)明):

  • SOC: RockChip RK3566
  • CPU: 四核 64 位 Cortex-A55 處理器忘古,主頻最高 1.8GHz
  • 最高支持 8GB 高速 LPDDR4技竟,速率高達(dá) 1066Mbps (我買的是 2G 版本的)
  • 存儲(chǔ):eMMC 默認(rèn) 8GB(可選 16GB/32GB/64GB)(我買的是 16G 版本的)
  • 1 路 HDMI2.0 支持 4K@60Hz 或 1080P@120Hz
  • 1 路自適應(yīng)千兆以太網(wǎng)口
  • WIFI 藍(lán)牙無(wú)線通信
  • 板載 1 路 USB3.0窿凤,3 路 USB2.0
  • 極小型 PCBA 尺寸睬捶,85mm*56mm

系統(tǒng)支持:

  • Android 11
  • Debian 10
  • Buildroot + QT
  • 鴻蒙 OpenHarmony3.2
  • Ubuntu
  • 麒麟 OS

刷入官方提供的 Debian 10 后黔宛,發(fā)現(xiàn)無(wú)法安裝 Docker/Tailscale/K3s/Cilium 等,這是為什么擒贸?

原因解析

很多開(kāi)發(fā)板的操作系統(tǒng)臀晃,都是沒(méi)有 UEFI 的,也不能直接使用 Debian Linux 官網(wǎng)提供的 iso 等安裝介質(zhì)直接進(jìn)行安裝的介劫。而是自編譯的 Debian Linux.

編譯后的 Debian 里徽惋,會(huì)帶有 uboot 作為啟動(dòng)引導(dǎo)的工具,同時(shí)將開(kāi)發(fā)板對(duì)應(yīng)的芯片/接口驅(qū)動(dòng)集成進(jìn)去座韵。

官方提供的自編譯 Debian Linux 里险绘,只開(kāi)啟了一小部分的 Kernel 內(nèi)核參數(shù)踢京。而 Docker/Tailscale/K3s/Cilium 等,是需要直接用到 Kernel 緊密相關(guān)的功能宦棺,但是這些功能在官方提供的 Debian Linux 中又沒(méi)有瓣距,就需要我們按照官方提供的《Linux SDK 編譯手冊(cè)》自行編譯。

需要哪些內(nèi)核配置

Docker 需要哪些內(nèi)核配置

Docker 需要的內(nèi)核配置代咸,可以通過(guò) https://github.com/opencontainers/runc/blob/main/script/check-config.sh 這個(gè)檢查腳本進(jìn)行檢驗(yàn)的蹈丸。運(yùn)行示例如下:

# ./check_config.sh
info: reading kernel config from ./kernel/.config ...

Generally Necessary:
- cgroup hierarchy: properly mounted [/sys/fs/cgroup]
- apparmor: enabled and tools installed
- CONFIG_NAMESPACES: enabled
- CONFIG_NET_NS: enabled
- CONFIG_PID_NS: enabled
- CONFIG_IPC_NS: enabled
- CONFIG_UTS_NS: enabled
- CONFIG_CGROUPS: enabled
- CONFIG_CGROUP_CPUACCT: enabled
- CONFIG_CGROUP_DEVICE: enabled
- CONFIG_CGROUP_FREEZER: enabled
- CONFIG_CGROUP_SCHED: enabled
- CONFIG_CPUSETS: enabled
- CONFIG_MEMCG: missing
- CONFIG_KEYS: enabled
- CONFIG_VETH: missing
- CONFIG_BRIDGE: missing
- CONFIG_BRIDGE_NETFILTER: missing
- CONFIG_IP_NF_FILTER: missing
- CONFIG_IP_NF_TARGET_MASQUERADE: missing
- CONFIG_NETFILTER_XT_MATCH_ADDRTYPE: missing
- CONFIG_NETFILTER_XT_MATCH_CONNTRACK: missing
- CONFIG_NETFILTER_XT_MATCH_IPVS: missing
- CONFIG_IP_NF_NAT: missing
- CONFIG_NF_NAT: missing
- CONFIG_POSIX_MQUEUE: missing

Optional Features:
- CONFIG_USER_NS: enabled
- CONFIG_SECCOMP: enabled
- CONFIG_SECCOMP_FILTER: enabled
- CONFIG_CGROUP_PIDS: missing
- CONFIG_MEMCG_SWAP: missing
- CONFIG_MEMCG_SWAP_ENABLED: missing
- CONFIG_BLK_CGROUP: missing
- CONFIG_BLK_DEV_THROTTLING: missing
- CONFIG_CGROUP_PERF: missing
- CONFIG_CGROUP_HUGETLB: missing
- CONFIG_NET_CLS_CGROUP: missing
- CONFIG_CGROUP_NET_PRIO: missing
- CONFIG_CFS_BANDWIDTH: enabled
- CONFIG_FAIR_GROUP_SCHED: enabled
- CONFIG_RT_GROUP_SCHED: missing
- CONFIG_IP_NF_TARGET_REDIRECT: missing
- CONFIG_IP_VS: missing
- CONFIG_IP_VS_NFCT: missing
- CONFIG_IP_VS_PROTO_TCP: missing
- CONFIG_IP_VS_PROTO_UDP: missing
- CONFIG_IP_VS_RR: missing
- CONFIG_SECURITY_SELINUX: missing
- CONFIG_SECURITY_APPARMOR: missing

所以其需要的 Kernel config 為:

# Docker Generally Necessary
CONFIG_NAMESPACES=y
CONFIG_NET_NS=y
CONFIG_PID_NS=y
CONFIG_IPC_NS=y
CONFIG_UTS_NS=y
CONFIG_CGROUPS=y
CONFIG_CGROUP_CPUACCT=y
CONFIG_CGROUP_DEVICE=y
CONFIG_CGROUP_FREEZER=y
CONFIG_CGROUP_SCHED=y
CONFIG_CPUSETS=y
CONFIG_MEMCG=y
CONFIG_KEYS=y
CONFIG_VETH=y
CONFIG_BRIDGE=y
CONFIG_BRIDGE_NETFILTER=y
CONFIG_IP_NF_FILTER=y
CONFIG_IP_NF_TARGET_MASQUERADE=y
CONFIG_NETFILTER_XT_MATCH_ADDRTYPE=y
CONFIG_NETFILTER_XT_MATCH_CONNTRACK=y
CONFIG_NETFILTER_XT_MATCH_IPVS=y
CONFIG_IP_NF_NAT=y
CONFIG_NF_NAT=y
CONFIG_POSIX_MQUEUE=y

# Optional Features:=y
CONFIG_USER_NS=y
CONFIG_SECCOMP=y
CONFIG_SECCOMP_FILTER=y
CONFIG_CGROUP_PIDS=y
CONFIG_MEMCG_SWAP=y
CONFIG_MEMCG_SWAP_ENABLED=y
CONFIG_BLK_CGROUP=y
CONFIG_BLK_DEV_THROTTLING=y
CONFIG_CGROUP_PERF=y
CONFIG_CGROUP_HUGETLB=y
CONFIG_NET_CLS_CGROUP=y
CONFIG_CGROUP_NET_PRIO=y
CONFIG_CFS_BANDWIDTH=y
CONFIG_FAIR_GROUP_SCHED=y
CONFIG_RT_GROUP_SCHED=y
CONFIG_IP_NF_TARGET_REDIRECT=y
CONFIG_IP_VS=y
CONFIG_IP_VS_NFCT=y
CONFIG_IP_VS_PROTO_TCP=y
CONFIG_IP_VS_PROTO_UDP=y
CONFIG_IP_VS_RR=y
CONFIG_SECURITY_SELINUX=y
CONFIG_SECURITY_APPARMOR=y

Tailscale 需要哪些內(nèi)核配置

Tailscale 出于廣泛適用性的考慮,主要都是基于用戶空間的實(shí)現(xiàn)呐芥,不加任何內(nèi)核配置也可以基于 sock5 代理的方式運(yùn)行逻杖。如果要正常狀態(tài)運(yùn)行,其只依賴于一個(gè)內(nèi)核配置:

# Tailscale
CONFIG_TUN=y

如果是 Wireguard 或其他對(duì)內(nèi)核依賴較多的相關(guān)軟件贩耐,請(qǐng)自行查找相關(guān)內(nèi)核配置需求弧腥。

K3s 需要哪些內(nèi)核配置

K3s 的 Cli 做的很完善,直接可以檢查內(nèi)核配置需求潮太,在我編譯好的 Debian 10 上運(yùn)行具體如下:

$ k3s check-config

Verifying binaries in /var/lib/rancher/k3s/data/ef31d9f1b153134534c2b9664540479f3071940e08ee95dd2877e102a31d235e/bin:
- sha256sum: good
- aux/ip6tables: symlink to xtables-legacy-multi
- aux/ip6tables-restore: symlink to xtables-legacy-multi
- aux/ip6tables-save: symlink to xtables-legacy-multi
- aux/iptables: symlink to xtables-legacy-multi
- aux/iptables-restore: symlink to xtables-legacy-multi
- aux/iptables-save: symlink to xtables-legacy-multi
- links: good

System:
- /var/lib/rancher/k3s/data/ef31d9f1b153134534c2b9664540479f3071940e08ee95dd2877e102a31d235e/bin/aux iptables v1.8.8 (legacy): ok
- swap: disabled
- routes: ok

Limits:
- /proc/sys/kernel/keys/root_maxkeys: 1000000

modprobe: ERROR: ../libkmod/libkmod.c:586 kmod_search_moddep() could not open moddep file '/lib/modules/4.19.232/modules.dep.bin'
modprobe: FATAL: Module configs not found in directory /lib/modules/4.19.232
info: reading kernel config from /proc/config.gz ...

Generally Necessary:
- cgroup hierarchy: cgroups Hybrid mounted, cpuset|memory controllers status: good
- CONFIG_NAMESPACES: enabled
- CONFIG_NET_NS: enabled
- CONFIG_PID_NS: enabled
- CONFIG_IPC_NS: enabled
- CONFIG_UTS_NS: enabled
- CONFIG_CGROUPS: enabled
- CONFIG_CGROUP_PIDS: enabled
- CONFIG_CGROUP_CPUACCT: enabled
- CONFIG_CGROUP_DEVICE: enabled
- CONFIG_CGROUP_FREEZER: enabled
- CONFIG_CGROUP_SCHED: enabled
- CONFIG_CPUSETS: enabled
- CONFIG_MEMCG: enabled
- CONFIG_KEYS: enabled
- CONFIG_VETH: enabled
- CONFIG_BRIDGE: enabled
- CONFIG_BRIDGE_NETFILTER: enabled
- CONFIG_IP_NF_FILTER: enabled
- CONFIG_IP_NF_TARGET_MASQUERADE: enabled
- CONFIG_NETFILTER_XT_MATCH_ADDRTYPE: enabled
- CONFIG_NETFILTER_XT_MATCH_CONNTRACK: enabled
- CONFIG_NETFILTER_XT_MATCH_IPVS: enabled
- CONFIG_NETFILTER_XT_MATCH_COMMENT: enabled
- CONFIG_NETFILTER_XT_MATCH_MULTIPORT: enabled
- CONFIG_IP_NF_NAT: enabled
- CONFIG_NF_NAT: enabled
- CONFIG_POSIX_MQUEUE: enabled

Optional Features:
- CONFIG_USER_NS: enabled
- CONFIG_SECCOMP: enabled
- CONFIG_BLK_CGROUP: enabled
- CONFIG_BLK_DEV_THROTTLING: enabled
- CONFIG_CGROUP_PERF: enabled
- CONFIG_CGROUP_HUGETLB: enabled
- CONFIG_NET_CLS_CGROUP: enabled
- CONFIG_CGROUP_NET_PRIO: enabled
- CONFIG_CFS_BANDWIDTH: enabled
- CONFIG_FAIR_GROUP_SCHED: enabled
- CONFIG_RT_GROUP_SCHED: enabled
- CONFIG_IP_NF_TARGET_REDIRECT: enabled
- CONFIG_IP_SET: enabled
- CONFIG_IP_VS: enabled
- CONFIG_IP_VS_NFCT: enabled
- CONFIG_IP_VS_PROTO_TCP: enabled
- CONFIG_IP_VS_PROTO_UDP: enabled
- CONFIG_IP_VS_RR: enabled
- CONFIG_EXT4_FS: enabled
- CONFIG_EXT4_FS_POSIX_ACL: enabled
- CONFIG_EXT4_FS_SECURITY: enabled
- Network Drivers:
  - "overlay":
    - CONFIG_VXLAN: enabled
      Optional (for encrypted networks):
      - CONFIG_CRYPTO: enabled
      - CONFIG_CRYPTO_AEAD: enabled
      - CONFIG_CRYPTO_GCM: enabled
      - CONFIG_CRYPTO_SEQIV: enabled
      - CONFIG_CRYPTO_GHASH: enabled
      - CONFIG_XFRM: enabled
      - CONFIG_XFRM_USER: enabled
      - CONFIG_XFRM_ALGO: enabled
      - CONFIG_INET_ESP: enabled
      - CONFIG_INET_XFRM_MODE_TRANSPORT: enabled
- Storage Drivers:
  - "overlay":
    - CONFIG_OVERLAY_FS: enabled

STATUS: pass

根據(jù)上面輸出管搪,得出 K3s 需要的內(nèi)核配置有:

# K3s Generally Necessary:
CONFIG_NAMESPACES=y
CONFIG_NET_NS=y
CONFIG_PID_NS=y
CONFIG_IPC_NS=y
CONFIG_UTS_NS=y
CONFIG_CGROUPS=y
CONFIG_CGROUP_PIDS=y
CONFIG_CGROUP_CPUACCT=y
CONFIG_CGROUP_DEVICE=y
CONFIG_CGROUP_FREEZER=y
CONFIG_CGROUP_SCHED=y
CONFIG_CPUSETS=y
CONFIG_MEMCG=y
CONFIG_KEYS=y
CONFIG_VETH=y
CONFIG_BRIDGE=y
CONFIG_BRIDGE_NETFILTER=y
CONFIG_IP_NF_FILTER=y
CONFIG_IP_NF_TARGET_MASQUERADE=y
CONFIG_NETFILTER_XT_MATCH_ADDRTYPE=y
CONFIG_NETFILTER_XT_MATCH_CONNTRACK=y
CONFIG_NETFILTER_XT_MATCH_IPVS=y
CONFIG_NETFILTER_XT_MATCH_COMMENT=y
CONFIG_NETFILTER_XT_MATCH_MULTIPORT=y
CONFIG_IP_NF_NAT=y
CONFIG_NF_NAT=y
CONFIG_POSIX_MQUEUE=y

# Optional Features:
CONFIG_USER_NS=y
CONFIG_SECCOMP=y
CONFIG_BLK_CGROUP=y
CONFIG_BLK_DEV_THROTTLING=y
CONFIG_CGROUP_PERF=y
CONFIG_CGROUP_HUGETLB=y
CONFIG_NET_CLS_CGROUP=y
CONFIG_CGROUP_NET_PRIO=y
CONFIG_CFS_BANDWIDTH=y
CONFIG_FAIR_GROUP_SCHED=y
CONFIG_RT_GROUP_SCHED=y
CONFIG_IP_NF_TARGET_REDIRECT=y
CONFIG_IP_SET=y
CONFIG_IP_VS=y
CONFIG_IP_VS_NFCT=y
CONFIG_IP_VS_PROTO_TCP=y
CONFIG_IP_VS_PROTO_UDP=y
CONFIG_IP_VS_RR=y
CONFIG_EXT4_FS=y
CONFIG_EXT4_FS_POSIX_ACL=y
CONFIG_EXT4_FS_SECURITY=y
# Network Drivers
CONFIG_VXLAN=y
# Optional (for encrypted networks):
CONFIG_CRYPTO=y
CONFIG_CRYPTO_AEAD=y
CONFIG_CRYPTO_GCM=y
CONFIG_CRYPTO_SEQIV=y
CONFIG_CRYPTO_GHASH=y
CONFIG_XFRM=y
CONFIG_XFRM_USER=y
CONFIG_XFRM_ALGO=y
CONFIG_INET_ESP=y
CONFIG_INET_XFRM_MODE_TRANSPORT=y
# Storage Drivers
CONFIG_OVERLAY_FS=y

相比 Docker, 主要多了以下內(nèi)核需求:

  • Overlay 網(wǎng)絡(luò)
  • Overlay 存儲(chǔ)

Cilium 需要哪些內(nèi)核配置

Cilium 需要的內(nèi)核配置,可以在這里查看:System Requirements — Cilium 1.13.4 documentation

# Cilium Base Requirements
CONFIG_BPF=y
CONFIG_BPF_SYSCALL=y
CONFIG_NET_CLS_BPF=y
CONFIG_BPF_JIT=y
CONFIG_NET_CLS_ACT=y
CONFIG_NET_SCH_INGRESS=y
CONFIG_CRYPTO_SHA1=y
CONFIG_CRYPTO_USER_API_HASH=y
CONFIG_CGROUPS=y
CONFIG_CGROUP_BPF=y
CONFIG_PERF_EVENTS=y
# Optional: Iptables-based Masquerading
CONFIG_NETFILTER_XT_SET=m
CONFIG_IP_SET=m
CONFIG_IP_SET_HASH_IP=m
# Optional: L7 and FQDN Policies
CONFIG_NETFILTER_XT_TARGET_TPROXY=m
CONFIG_NETFILTER_XT_TARGET_CT=m
CONFIG_NETFILTER_XT_MATCH_MARK=m
CONFIG_NETFILTER_XT_MATCH_SOCKET=m
# Optional: IPSec
CONFIG_XFRM=y
CONFIG_XFRM_OFFLOAD=y
CONFIG_XFRM_STATISTICS=y
CONFIG_XFRM_ALGO=m
CONFIG_XFRM_USER=m
CONFIG_INET{,6}_ESP=m
CONFIG_INET{,6}_IPCOMP=m
CONFIG_INET{,6}_XFRM_TUNNEL=m
CONFIG_INET{,6}_TUNNEL=m
CONFIG_INET_XFRM_MODE_TUNNEL=m
CONFIG_CRYPTO_AEAD=m
CONFIG_CRYPTO_AEAD2=m
CONFIG_CRYPTO_GCM=m
CONFIG_CRYPTO_SEQIV=m
CONFIG_CRYPTO_CBC=m
CONFIG_CRYPTO_HMAC=m
CONFIG_CRYPTO_SHA256=m
CONFIG_CRYPTO_AES=m
# Optional: Bandwidth Manager
CONFIG_NET_SCH_FQ=m

另外 Cilium 對(duì)于 Kernel 版本也有嚴(yán)格要求铡买,Cilium 的部分功能依賴于高版本的 Kernel. 請(qǐng)自行查閱更鲁。

修改內(nèi)核配置并編譯

Linux SDK 官方一般都會(huì)提供,基于 Rockchip 芯片系列的 Linux SDK 文件目錄結(jié)構(gòu)大差不差奇钞。我這里以 Purple Pi OH 為例澡为,相信如果您也正好有相關(guān)需求,且是 Rockchip 的其他開(kāi)發(fā)板景埃,也能很快找到對(duì)應(yīng)目錄媒至。

一般內(nèi)核配置的目錄為:xxxxxxx\kernel\arch\arm64\configs\xxxxx_linux_defconfig

將上方提供的 Kernel 配置添加到該文件末尾(注意去重)并保存。

然后直接編譯即可:

./build.sh kernel

編譯后在./rockdev目錄生成boot.img鏡像谷徙。

然后利用 Rockchip 提供的燒錄工具:RKDevTool.exe, 單獨(dú)將 boot.img 燒錄即可拒啰。

編譯是真的耗資源啊,耗時(shí)間完慧,耗 CPU, 耗磁盤(pán)??

可能出現(xiàn)的異常情況

分區(qū)超出

我在編譯過(guò)程中碰到 recovery 分區(qū)超過(guò)的報(bào)錯(cuò)谋旦,報(bào)錯(cuò)如下:

rk356x_linux_sdk/buildroot/output/rockchip_rk356x_recovery/images/recovery.img's size exceed parameter.txt's limit!
ERROR: Running build_firmware failed!

解決辦法是要修改分區(qū)大小,具體就是修改對(duì)應(yīng)的 parameter.txt 文件屈尼。修改后再重新完整編譯:

./build.sh

并重新燒錄整個(gè)固件册着。

Docker 安裝后啟動(dòng)失敗

根據(jù)官方文檔:Install Docker Engine on Debian | Docker Documentation, Docker 安裝后啟動(dòng)失敗。

官方明確提到目前最新版本需要的 Debian 版本為:

Debian Bookworm 12 (stable)
Debian Bullseye 11 (oldstable)

可能是 Deibian 10 兼容性有問(wèn)題導(dǎo)致的脾歧。但是有 workaround.

具體的報(bào)錯(cuò)為 nftables 相關(guān)的報(bào)錯(cuò)甲捏。

解決方案為:

update-alternatives --set iptables /usr/sbin/iptables-legacy
update-alternatives --set ip6tables /usr/sbin/ip6tables-legacy
update-alternatives --set arptables /usr/sbin/arptables-legacy
update-alternatives --set ebtables /usr/sbin/ebtables-legacy

重啟后 Docker 可以正常運(yùn)行。

總結(jié)

玩了一周末的 Rockchip arm64 開(kāi)發(fā)板涨椒,現(xiàn)在 2G 內(nèi)存的板子上終于可以跑 docker,k3s摊鸡,tailscale,cilium 了绽媒。??????

Arm 開(kāi)發(fā)板如我之前所說(shuō)蚕冬,有這些優(yōu)勢(shì):

  1. 便宜
  2. 可玩性高
  3. 功耗低
  4. 散熱小免猾,運(yùn)行安靜
  5. Arm64 現(xiàn)在生態(tài)還湊活

但是相比 x86, 這類 arm 開(kāi)發(fā)板生態(tài)還是太差了,沒(méi)有 bios/uefi囤热,裝前面幾個(gè)軟件都要調(diào) kernel 參數(shù)然后編譯猎提,刷機(jī)燒錄。玩起來(lái)太累了旁蔼。..

x86 也有這些優(yōu)勢(shì):

  1. 便宜
  2. 可玩性高

但是 x86 的生態(tài)太好了锨苏,玩起來(lái)省心多了。

Arm 與 x86 相比棺聊,其實(shí)也就強(qiáng)在 功耗低伞租,散熱小。但是現(xiàn)在 Intel 的一些芯片限佩,如 n100 等葵诈,TDP 為 6W 也是非常低了,通過(guò)被動(dòng)散熱也能壓住也就靜音祟同。Arm 的優(yōu)勢(shì)所剩無(wú)幾了作喘。..

所以我的建議,想省心/靜音/功率低晕城,首推 x86 迷你主機(jī)泞坦;想折騰/靜音/功率低,首推各類 arm pi 開(kāi)發(fā)板或盒子砖顷;不在乎功耗/不在乎聲音/高配贰锁,可以玩玩二手 x86 服務(wù)器。??????

以上滤蝠。

???參考文檔

三人行, 必有我?guī)? 知識(shí)共享, 天下為公. 本文由東風(fēng)微鳴技術(shù)博客 EWhisper.cn 編寫(xiě).

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末豌熄,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子几睛,更是在濱河造成了極大的恐慌房轿,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,482評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件所森,死亡現(xiàn)場(chǎng)離奇詭異囱持,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)焕济,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,377評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門(mén)纷妆,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人晴弃,你說(shuō)我怎么就攤上這事掩幢⊙放模” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 152,762評(píng)論 0 342
  • 文/不壞的土叔 我叫張陵际邻,是天一觀的道長(zhǎng)芯丧。 經(jīng)常有香客問(wèn)我,道長(zhǎng)世曾,這世上最難降的妖魔是什么缨恒? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 55,273評(píng)論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮轮听,結(jié)果婚禮上骗露,老公的妹妹穿的比我還像新娘。我一直安慰自己血巍,他們只是感情好萧锉,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,289評(píng)論 5 373
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著述寡,像睡著了一般柿隙。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上辨赐,一...
    開(kāi)封第一講書(shū)人閱讀 49,046評(píng)論 1 285
  • 那天优俘,我揣著相機(jī)與錄音,去河邊找鬼掀序。 笑死帆焕,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的不恭。 我是一名探鬼主播叶雹,決...
    沈念sama閱讀 38,351評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼换吧!你這毒婦竟也來(lái)了折晦?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 36,988評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤沾瓦,失蹤者是張志新(化名)和其女友劉穎满着,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體贯莺,經(jīng)...
    沈念sama閱讀 43,476評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡风喇,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,948評(píng)論 2 324
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了缕探。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片魂莫。...
    茶點(diǎn)故事閱讀 38,064評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖爹耗,靈堂內(nèi)的尸體忽然破棺而出耙考,到底是詐尸還是另有隱情谜喊,我是刑警寧澤,帶...
    沈念sama閱讀 33,712評(píng)論 4 323
  • 正文 年R本政府宣布倦始,位于F島的核電站斗遏,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏楣号。R本人自食惡果不足惜最易,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,261評(píng)論 3 307
  • 文/蒙蒙 一怒坯、第九天 我趴在偏房一處隱蔽的房頂上張望炫狱。 院中可真熱鬧,春花似錦剔猿、人聲如沸视译。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,264評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)酷含。三九已至,卻和暖如春汪茧,著一層夾襖步出監(jiān)牢的瞬間椅亚,已是汗流浹背会喝。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,486評(píng)論 1 262
  • 我被黑心中介騙來(lái)泰國(guó)打工晰搀, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人话浇。 一個(gè)月前我還...
    沈念sama閱讀 45,511評(píng)論 2 354
  • 正文 我出身青樓扩灯,卻偏偏與公主長(zhǎng)得像媚赖,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子珠插,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,802評(píng)論 2 345

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