根据Gentoo handbook安装——gentoo基本系统+UEFI引导

  • 折腾gentoo有段时间, 趁着放假,做做笔记;根据官网的 Gentoo Handbook 来一步步记录装gentoo的详细过程。

A.安装前的一些准备

注意:最小CD镜像的安装,必须要在联网下进行!!!
另外:安装过程中提示 需要添加 USE 时,请按照提示在 /etc/protage/make.conf 文件中添加 USE=“ 提示的USE关键字 ” 即可。

如果提示needs updating
则运行:

etc-update

然后输入-3 -> 回车 -> yes ,之后在重新装一次即可。

1.本次安装使用台式机电脑
CPU: Intel Core i7-7700 @ 8x 4.2GHz
GPU: GeForce GTX 1060 6GB 
2.下载镜像(amd64)

gentoo的安装使用了最小镜像+stage3的方式
这里只下载最小镜像 install-amd64-minimal-20180920T214502Z.iso 即可,文件网址可能失效,建议去Gentoo官网
下载。
最小CD镜像:Minimal Installation CD 2018-09-20
stage archives: Stage3 2018-09-20

默认镜像源是国外的服务器,所以下载镜像时,需要选择国内镜像源来下载,否则奇慢无比!

  • 进入官网下载页面


    进入下载页面.png
  • 选择国内镜像源目录


    镜像源目录.png
  • 选择镜像源
    选择镜像源.png

    点击镜像源之后进入文件下载网站。然后依次点击:
    releases -> amd64 -> autobuilds -> current-install-amd64-minimal
    最后来到下面这个页面,点击如图所示文件,即可下载最新镜像文件:
    镜像下载
3.刻录优盘

下载完镜像文件后,在linux下可以采用dd镜像写入方式,在win下可以使用一些常见的优盘启动制作软件,比如:rufus等。

  • Linux下使用dd命令:
#linux 下
$ sudo if=iospath of=usb
dd
  • windows下使用 rufus 软件:
    选择分区方案: '用于UEFI 计算机的GPT分区方案'

    选择分区方案

选择下载好的镜像文件

选择镜像文件

底部会提示使用的镜像文件,然后点击 开始


开始制作

选择镜像写入方式


选择镜像写入方式

写入中
写入中

写入完成后提示准备就绪,关闭软件即可
写入完成

B. 开始安装

将刻录的优盘插入待安装的电脑,然后使用默认gentoo内核启动,由于版本更新,启动方式可能不同。

gentoo内核启动

启动之后
启动之后

1.检查网络
ping www.baidu.com

执行之后,能ping通的话,说明可以正常连上网络:


ping

如果是台式机用的有线网,所有基本上不用怎么配置,
但如果是笔记本的话,则要配置一下无线网络,具体的配置方式请看 Gentoo Handbook ,这里仅作参考:
系统安装优盘启动之后默认是锁定wifi的,以我的笔记本为例:

rfkill list all
wifi锁定

此时需要解锁:

rfkill unblock all
rfkill list all
wifi解锁

然后启用wifi端口:
注意:wlp0s20f3 为本机WiFi网卡名称,具体的名称以自己的为主,查看网卡名称的命令: ls /sys/class/net

ip link set dev wlp0s20f3 up

最后连接wifi:

net-setup wlp0s20f3

根据提示输入wifi 名称和密码即可。
检查是否连上wifi:

iw dev wlp0s20f3 link

如果没连上会提示 No connect,否则会出现连上的wifi信息。

2.磁盘分区

关于磁盘分区,需要根据自己的硬盘做出调整,以下的分区方式仅供参考!
此时的电脑上有一个M.2的固态,和两个机械硬盘,一个优盘

磁盘 说明 分区列表
/dev/nvme0n1 M.2固态 /grub、/boot、/
/dev/sda 机械硬盘1 /home、swap
/dev/sdb 机械硬盘2 未分区
/dev/sdc 优盘 未分区
磁盘分区

2.1 针对 /dev/nvme0n1 固态的分区(分区工具有fdisk、cfdisk、parted等):

  • 使用 UEFI 做引导时,可以同时识别 MBR 和 GPT 分区
  • 但是在 Windows 系统下只能使用 GPT 分区类型
  • 为方便以后装双系统,这里使用 GPT 分区类型

分区数量:/grub、/boot、/

#使用 parted 分区工具
parted /dev/nvme0n1

parted基本操作

#查看操作说明
(parted) help
#设置 gpt 分区类型 注意:这个设置会格式化整个磁盘
(parted) mklabe gpt
#容量查看 MB
(parted) unit mib
#分区大小 start:起始容量 end:结束容量,分区大小:end - start
(parted) mkpart primary start end
#打印整个磁盘分区
(parted) print
a. 启动分区:10MB
(parted) mkpart primary 1 11
(parted) name 1 grub
(parted) set 1 bios_grub on
b. 引导分区:128MB

注意:如果你是在 win10(举例) 下安装的 gentoo ,想组双系统的话,那么你需要保证已有一个 EFI分区(这个分区在你安装 win10 时会自动生成),此时直接跳过 ‘引导分区’ 这一步。
使用UEFI接口引导系统(而不是BIOS)时,将引导分区标记为EFI系统分区。当在分区上设置引导选项时,Parted会自动执行此操作,完成后会有一个esp标志:

(parted) mkpart primary 11 139
(parted) name 2 boot
(parted) set 2 boot on
c. 根分区:110GB
(parted) mkpart primary 139 112779
(parted) name 3 root
d. M.2固态分区过程图

M.2固态分区

2.2 针对 /dev/sda机械硬盘1的分区(分区工具有fdisk、cfdisk、parted等):

分区数量:/home、swap

#使用 parted 分区工具
parted /dev/sda

parted基本操作

#查看操作说明
(parted) help
#容量查看 GB
(parted) unit Gib
#分区大小 start:起始容量 end:结束容量,分区大小:end - start
(parted) mkpart primary start end
#打印整个磁盘空闲分区
(parted) print free
a. swap分区:10GB
(parted) mkpart primary 0 10
b. home分区:290GB
(parted) mkpart primary 10 300
c. 机械硬盘1分区过程图
机械硬盘1分区
3. 格式化分区
分区 格式
/boot fat32
/ ext4
/home ext4
swap none
a. 格式化启动分区
mkfs.ext2 /dev/nvme0n1p
b. 格式化引导分区

官方UEFI规范表示UEFI固件将识别FAT12,16或32文件系统,但建议ESP使用FAT32。继续将ESP格式化为FAT32:
注意:如果你是在 win10(举例) 下安装的 gentoo ,想组双系统的话,那么你需要保证已有一个 EFI分区(这个分区在你安装 win10 时会自动生成),此时直接跳过 ‘格式化引导分区’ 这一步。

mkfs.fat -F 32 /dev/nvme0n1p2
c. 格式化根分区
mkfs.ext4 /dev/nvme0n1p3
d. 格式化home分区
mkfs.ext4 /dev/sda3
e. 格式化并启用swap
mkswap /dev/sda2
swapon /dev/sda2
4. 挂载分区

所有分区格式化完成之后,挂载分区到/mnt/gentoo下:
注意:EFI 引导需要在 boot 下创建一个 efi 目录

#创建boot home目录
mkdir -p /mnt/gentoo/boot/efi 
mkdir /mnt/gentoo/home
mount /dev/nvme0n1p3 /mnt/gentoo
mount /dev/nvme0n1p2 /mnt/gentoo/boot/efi
mount /dev/sda3 /mnt/gentoo/home

挂载完之后可以使用mount 命令检查一下挂载是否成功,没有挂载成功的需要重新挂载一下:

mount
5.下载stage3
a. 验证时间

当前时间:9月22日 17:08 2018

date
#Sat Sep 22 09:12:08 UTC 2018

时间显示应与当前日期为准
举例

#本地时间:9月22日 17:08 2018
#设置时间: 9月22日 17:08 2018
date 092217082018
b. 下载stage3

官方源默认是国外服务器,所以需要在国内源中下载stage3文件:

cd /mnt/gentoo
links https://mirrors.163.com/gentoo/releases/amd64/autobuilds/current-install-amd64-minimal/

此时出现一个命令行网页浏览器,选择stage3下载即可。

下载stage3

下载完之后,按 ESC -> 回车 -> Exit -> 回车 退出
退出

c. 解压stage3

文件名按自己下载的为准

time tar xvf stage3-amd64-20180920T214502Z.tar.xz
解压stage3
d. 配置 /etc/portage/make.conf

首先,要知道自己的电脑cpu核心数
然后设置变量 :MAKEOPTS="-j核心数+1"
检查电脑核心数:

cat /proc/cpuinfo | grep processor

cpu核心数

还有一种比较简单的方法,使用top命令,然后按数字键 1,就会出现所有cpu的数量 : %Cpu0 - %Cpun 核心数就是 n+1
所以我的电脑设置是:MAKEOPTS="-j9"
执行以下命令在最后一行添加配置变量

echo 'MAKEOPTS="-j9"' >> /etc/portage/make.conf
e. 选择镜像

将光标移至所有国内镜像地址,然后按空格键确认,所有选完后,按回车即可:

mirrorselect -i -o >> /mnt/gentoo/etc/portage/make.conf

配置Gentoo ebuild存储库:此文件包含更新软件包存储库所需的同步信息(包含Portage下载和安装软件包所需的所有信息的ebuild和相关文件的集合)

mkdir --parents /mnt/gentoo/etc/portage/repos.conf

接下来,将Portage提供的Gentoo存储库配置文件复制到(新创建的)repos.conf目录中:

cp /mnt/gentoo/usr/share/portage/config/repos.conf /mnt/gentoo/etc/portage/repos.conf/gentoo.conf
f. 复制DNS信息

确保在接下来chroot之后依然能连上网络
--dereference:确保复制的是文件本身而不是符号链接。

cp --dereference /etc/resolv.conf /mnt/gentoo/etc/
g. 挂载文件系统

gentoo默认的init系统是OpenRC类型,所有要挂载相关系统文件,不然有些命令无法使用,在以后修复系统的时候,也要记得挂载一下。

mount --types proc /proc /mnt/gentoo/proc
mount --rbind /sys /mnt/gentoo/sys
mount --rbind /dev /mnt/gentoo/dev

如果是安装init系统为systemd的,则需要加 --make-rslave

mount --types proc /proc /mnt/gentoo/proc
mount --rbind /sys /mnt/gentoo/sys
mount --make-rslave /mnt/gentoo/sys
mount --rbind /dev /mnt/gentoo/dev
mount --make-rslave /mnt/gentoo/dev
h. 进入新环境
chroot /mnt/gentoo /bin/bash
source /etc/profile
export PS1="(chroot) ${PS1}"
i. 从Web安装ebuild存储库快照
emerge-webrsync

注意:这一步跟上面的选择镜像有关,如果发现一直处于执行状态,那么检查一下文件 /mnt/gentoo/etc/portage/make.conf 是否正确。

j. 选择配置

配置列表是实时更新的,所以需要根据实际做出选择,这里选择默认12即可,如果是systemd,则需要选择带systemd字样的配置。

eselect profile list
eselect profile set 12

配置列表


选择配置
k. 更新@world集

因为没有选择桌面环境,所有更新时间会短一些。

time emerge --ask --quiet --update --deep --newuse @world

这里使用了 --quiet 静默安装,不会输出安装过程。
安装过程图

更新@world集

l. 时区

选择本地时区

ls /usr/share/zoneinfo/Asia
echo "Asia/Shanghai" > /etc/timezone

更新时区

emerge --config sys-libs/timezone-data
m. 配置语言环境
nano -w /etc/locale.gen

根据如下修改,这里需要注意,gentoo默认不支持zh_CN.UTF-8,需要


配置语言环境

下一步是运行locale-gen。它将生成/etc/locale.gen文件中指定的所有语言环境。

locale-gen
eselect locale list
eselect locale set 8

这里设置中文语言


选择语言.png

确保设置了区域设置,否则系统会在内核构建期间以及安装后期的其他软件部署中显示警告和错误。

n. 重新加载环境:
env-update && source /etc/profile && export PS1="(chroot) $PS1"
o. 安装内核源码

对于基于amd64的系统,Gentoo推荐使用sys-kernel / gentoo-sources包。

选择适当的内核源并使用emerge安装它:

emerge --ask sys-kernel/gentoo-sources

如果提示needs updating
则运行:

etc-update

然后输入-3 -> 回车 -> yes ,之后在重新装一次即可。

p. 配置kernel

这里使用自动配置方式,需要手动配置的请看Gentoo Wiki。

安装kernel自动配置工具genkernel

time emerge --ask --quiet sys-kernel/genkernel

安装genkernel

安装时如果提示 USE changes,则运行:

etc-update

然后输入-3 -> 回车 -> yes ,之后在重新执行 time emerge --ask --quiet sys-kernel/genkernel即可。

安装完成之后,编辑 /etc/fstab 系统的挂载点:

nano -w /etc/fstab

添加如下挂载点:


挂载点

然后开始编译kernel:
这需要不少的时间,可以喝杯茶放松一下~

time genkernel all
编译内核

编译完成之后,检查一下:

ls /boot/kernel* /boot/initramfs*
#会显示两个文件  
q. 安装固件

某些驱动程序在工作之前需要在系统上安装其他固件。这通常是网络接口的情况,尤其是无线网络接口。此外,在使用开源驱动程序时,来自AMD,Nvidia和Intel等供应商的现代视频芯片通常需要外部固件文件。大多数固件都封装在sys-kernel / linux-firmware中:

time emerge --ask --quiet sys-kernel/linux-firmware
r. 修改主机名
nano -w /etc/conf.d/hostname
#将hostname变量设置为自己取的主机名字
hostname =“Guard”

其次,如果需要域名,请在/etc/conf.d/net中设置:

nano -w /etc/conf.d/net
#将dns_domain_lo变量设置为所选域名
dns_domain_lo =“homenetwork”

如果设置域名,登录屏幕会显示This is hostname.(none)
想要将它去掉,只需要修改:

nano -w /etc/issue
#将 .\O 删掉即可
s. 配置网络
time emerge --ask  --quiet --noreplace net-misc/netifrc
配置网络
t. 设置启动时自动启动网络

要在引导时激活网络接口,需要将它们添加到默认运行级别。
首先需要知道网络接口名称:
使用 ifconfig查看是 eth0,还是 enp3s0
这里使用 enp3s0:

cd /etc/init.d
ln -s net.lo net.enp3s0
rc-update add net.enp3s0 default

如果在启动系统后我们发现有关网络接口名称(当前记录为eth0)的假设是错误的,那么执行以下步骤来纠正这个问题:

  • 使用正确的接口名称更新/etc/conf.d/net文件(enp3s0而不是eth0)。
  • 创建新的符号链接(如/etc/init.d/net.enp3s0)。
  • 删除旧的符号链接(rm /etc/init.d/net.eth0)。
  • 将新的添加到默认运行级别。
  • 使用rc-update del net.eth0 default删除旧的。
u. 设置主机hosts
nano -w /etc/hosts

按如下设置hosts文件,这里以Guard为主机名

hosts

v. 设置root密码

使用passwd命令设置root密码。

passwd
w. 设置时钟
nano -w /etc/conf.d/hwclock
#修改:clock="local"

如果硬件时钟未使用UTC,则必须clock="local"在文件中进行设置。否则系统可能会显示时钟偏差行为。

x. 安装工具
  1. 系统日志记录
    提供传统的系统日志记录守护程序集。默认的日志记录配置可以很好地开箱即用,这使得这个软件包成为初学者的一个很好的选择。
emerge --ask app-admin/sysklogd
rc-update add sysklogd default
  1. Cron守护程序
    cron守护程序执行计划的命令。如果需要定期执行某些命令(例如每天,每周或每月),则非常方便。
emerge --ask sys-process/cronie
rc-update add cronie default
  1. 文件索引
    要索引文件系统以提供更快的文件位置功能,请安装sys-apps / mlocate
emerge --ask sys-apps/mlocate
  1. 远程访问
    要在安装后远程访问系统,请将sshd init脚本添加到默认运行级别:
rc-update add sshd default
  1. 如果需要串行控制台访问(在远程服务器的情况下可以访问),请取消注释/ etc / inittab中的串行控制台部分:
nano -w /etc/inittab
#SERIAL CONSOLES
s0:12345:respawn:/ sbin / agetty 9600 ttyS0 vt100
s1:12345:respawn:/ sbin / agetty 9600 ttyS1 vt100
  1. 网络工具
  • 6.1 安装DHCP客户端
    为了使系统能够使用netifrc脚本自动获取一个或多个网络接口的IP地址,必须安装DHCP客户端。我们建议使用net-misc / dhcpcd,尽管通过Gentoo存储库可以获得许多其他DHCP客户端:
emerge --ask net-misc/dhcpcd
  • 6.2安装无线网络工具
    如果不需要无线可以跳过此步骤
    如果系统将连接到无线网络,请为Open或WEP网络安装:net-wireless / iw
    WPA或WPA2网络安装:net-wireless / wpa_supplicant
    iw也是用于扫描无线网络的有用的基本诊断工具。
emerge --ask net-wireless/iw 
emerge --ask net-wireless/wpa_supplicant
y. 配置引导加载程序
  1. 合并GRUB2 软件到系统中
  • UEFI用户注意事项:

用户需要确保GRUB_PLATFORMS="efi-64"已启用(默认情况下是这种情况)。如果不是设置的情况,GRUB_PLATFORMS="efi-64"则需要在出现GRUB2 之前将其添加到/etc/portage/make.conf文件中,然后在安装GRUB2 :

echo 'GRUB_PLATFORMS="efi-64"' >> /etc/portage/make.conf
emerge --ask sys-boot/grub:2

如果GRUB2以某种方式出现而没有启用GRUB_PLATFORMS="efi-64",则可以将该行(GRUB_PLATFORMS="efi-64")添加到make.conf中,然后通过将选项传递给emerge来重新计算世界包集的依赖关系:--update --newuse

emerge --ask --update --newuse --verbose sys-boot/grub:2
  • 使用仅支持MBR分区表的旧BIOS系统时,不需要其他配置就能显示GRUB:
emerge --ask --verbose sys-boot/grub:2

GRUB2软件现已合并到系统中,但尚未安装。

  1. 安装GRUB2软件

接下来,通过grub-install命令将必要的GRUB2文件安装到/boot/grub目录。假定第一个磁盘(系统从中引导的磁盘)是/dev/sda,以下命令之一将执行:

  • UEFI用户:
grub-install --target=x86_64-efi --efi-directory=/boot/efi

如果grub_install返回类似的错误Could not prepare Boot variable: Read-only file system,可能需要将efivars特殊挂载重新安装为读写才能成功:

mount -o remount,rw /sys/firmware/efi/efivars

另外需要注意
一些主板制造商似乎只支持EFI系统分区(ESP)中的.EFI文件的 /boot/efi 目录位置(挂载的引导分区目录)。GRUB安装程序可以使用该--removable选项自动执行此操作。在运行以下命令之前验证是否已安装ESP。假设ESP安装在/boot/efi(如前所述),执行:

grub-install --target=x86_64-efi --efi-directory=/boot/efi --removable

这将创建由UEFI规范定义的默认目录,然后自动将 grubx64.efi 文件复制到由相同规范定义的“默认”EFI文件位置。
我的电脑主板是华硕的,只支持EFI系统分区(ESP)中的.EFI文件的 /boot/efi 目录位置(挂载的引导分区目录)。所以得加 --removable
如果发现自己的系统引导不了,出现 GRUB 字样,则尝试加 --removable

安装EFI引导

  • BIOS用户:
grub-install /dev/sda 
#/dev/sda 为 /boot 挂载分区
  1. GRUB2配置

注意:如果是安装win10 与gentoo 双系统,需要另外安装 os-prober 用以检测 win10 的引导:

emerge --ask os-prober

然后执行

os-prober

接下来,根据 /etc/default/grub 文件和 /etc/grub.d 脚本中指定的用户配置生成GRUB2配置。
在大多数情况下,用户不需要配置,因为GRUB2将自动检测要引导的内核来生成最终的GRUB2配置,
请运行 grub-mkconfig 命令:

grub-mkconfig -o /boot/efi/grub/grub.cfg

如果是win10与gentoo双系统则:
如果检测不到win系统,则可以先继续执行下一步,等全部安装完毕之后,重启系统,再执行 os-prober -> grub-mkconfig -o /boot/grub/grub.cfg 即可。

win10与gentoo双系统配置引导

假如没有出现Found开头的文字,则表明检测不到系统,此时:

  • 运行 ls /boot/kernel* /boot/initramfs*查看是否会输出两个文件;
    如果没有,则运行ls /boot/efi/kernel* /boot/efi/initramfs*,查看是否会输出两个文件,如果有输出,则将两个文件复制到/boot目录下,之后重新grub-mkconfig -o /boot/efi/grub/grub.cfg即可。
    如果都没有输出,则重新genkernel all一下,然后在自动生成GRUB2配置。
z. 重新启动系统

退出chroot环境并卸载所有已安装的分区。
然后重新启动:

exit
reboot

不要忘记拔掉优盘,否则可能会再次引导CD而不是新的Gentoo系统。

win10与gentoo双系统引导界面:

win10与gentoo双系统引导界面

gentoo命令行登录,此时输入 root -> 回车 -> 输入密码,即可进入gentoo系统。

命令行登录界面

至此,Gentoo的基本系统已安装完成!

感慨一下:Gentoo确实是一个挺折腾的系统,同时需要更多的耐心!不过折腾完,就会发现对Linux更熟悉了一点!
谢谢阅读~

下一篇:根据Gentoo handbook安装——KDE桌面+NVIDIA显卡

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,117评论 4 360
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 66,963评论 1 290
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 107,897评论 0 240
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,805评论 0 203
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,208评论 3 286
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,535评论 1 216
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,797评论 2 311
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,493评论 0 197
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,215评论 1 241
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,477评论 2 244
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 31,988评论 1 258
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,325评论 2 252
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 32,971评论 3 235
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,055评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,807评论 0 194
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,544评论 2 271
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,455评论 2 266