2018-06-04 运维自动化之系统安装 2 dhcp服务

1、制作全功能的iso镜像文件

全功能的iso镜像文件指把yum源和kickstart文件都放到iso镜像文件里,这样即使没有网络也可以进行自动化安装系统。

1 准备相关文件,yum源
cp -r /misc/cd/* /app/fulliso
cp -r /misc/cd/.* /app/fulliso
rm -rf /app/fulliso/repodata/*  ---删除软件包的元数据文件
cp /misc/cd/repodata/43d8fd068164b0f042845474d6a22262798b9f0d1f49ad1bf9f95b953089777d-c6-x86_64-comps.xml /app/fulliso/repodata/   ---把包组的元数据的文件拷贝过来
cd /app/fulliso
createrepo -g repodata/43d8fd068164b0f042845474d6a22262798b9f0d1f49ad1bf9f95b953089777d-c6-x86_64-comps.xml   ./   ---创建仓库,会重新生成包的元数据文件
find /app/fulliso  -name TRANS.TBL -exec rm {} \;  ---删除所有TRANS.TBL文件
2 准备ks文件,可以以家目录下的anaconda-ks.cfg文件为模板进行修改
vim  /app/fulliso/ks6.cfg 
# Kickstart file automatically generated by anaconda.
#version=DEVEL
install
cdrom    ---光盘为安装包的源文件
lang en_US.UTF-8
keyboard us
network --onboot yes --device eth0 --bootproto dhcp --noipv6
rootpw  --iscrypted $6$hfb25YOYZDU3YZTl$VxTkHGGJGGBbr59OPnY5kTJzvJ9hb9NRwrh5FMHLIAlXh9VQ74PYoK7QzPWYN0zaJrm3mv/IP0fDkHxFglNi6/
firewall --service=ssh
authconfig --enableshadow --passalgo=sha512
selinux --disabled  ---可以禁用selinux
timezone Asia/Shanghai
bootloader --location=mbr --driveorder=sda --append="crashkernel=auto rhgb quiet"
# The following is the partition information you requested
# Note that any partitions you deleted are not expressed
# here so unless you clear all partitions first, this is
# not guaranteed to work
zerombr   ---清除mbr,如果是一块旧的磁盘,要清除
clearpart --all   ---清除分区
text    --以文本方式安装系统
reboot  ---安装之后重新启动系统
part /boot --fstype=ext4 --size=1000
part / --fstype=ext4 --size=50000
part /app --fstype=ext4 --size=40000
part swap --size=2048
#repo --name="CentOS"  --baseurl=cdrom:sr0 --cost=100  ---一定要把这一项给注释掉,不然会有问题的
%packages
@base
@core
@basic-desktop
@desktop-debugging
autofs
vim
%end
 %post    ---安装后脚本
 rm -rf /etc/yum.repos.d/*
 cat > /etc/yum.repos.d/base.repo <<eof
 [base]
 name=base
 baseurl=file:///misc/cd
 gpgcheck=0
 eof
 %end
3 定制启动菜单
vim  /app/fulliso/isolinux/isolinux.cfg
default vesamenu.c32
#prompt 1
timeout 600
display boot.msg
menu background splash.jpg
menu title Welcome to CentOS Automatic Install!
menu color border 0 #ffffffff #00000000
menu color sel 7 #ffffffff #ff000000
menu color title 0 #ffffffff #00000000
menu color tabmsg 0 #ffffffff #00000000
menu color unsel 0 #ffffffff #00000000
menu color hotsel 0 #ff000000 #ffffffff
menu color hotkey 7 #ffffffff #ff000000
menu color scrollbar 0 #ffffffff #00000000

label desktop
menu label Install an ^desktop system
kernel vmlinuz
append initrd=initrd.img ks=cdrom:/ks6.cfg
label mini
menu label Install an m^ini system
kernel vmlinuz
append initrd=initrd.img ks=cdrom:/ks6-mini.cfg
label manual
menu label ^Manual install an  system
kernel vmlinuz
append initrd=initrd.img 
label local
menu label Boot from ^local drive
menu default
localboot 0xffff
4 制作ISO文件
 mkisofs -R -J -T -v --no-emul-boot --boot-load-size 4 --boot-info-table -V "CentOS 6.9 autoinstall" -b isolinux/isolinux.bin -c isolinux/boot.cat -o /root/centos6.iso /app/fulliso/

总结:系统安装过程:通过引导文件找到启动菜单文件,这个文件里会规定内核文件和initrd的路径,同时也会指定kickstart文件的路径,kickstart文件里规定了如何安装操作系统,软件包的安装源、分区情况等,然后加载内核和initrd,加载根文件系统的驱动,挂载根后启动第一个安装程序anaconda,所以安装操作系统时,要有启动文件、启动菜单文件、kickstart文件以及安装源。

2、如何配置dhcp服务器

dhcp服务的安装包来自于dhcp包
dhcp服务器的配置文件:/etc/dhcp/dhcpd.conf

[root@centos6 dhclient]#cat /etc/dhcp/dhcpd.conf 
#
# DHCP Server Configuration file.
#   see /usr/share/doc/dhcp*/dhcpd.conf.sample
#   see 'man 5 dhcpd.conf'
#

可以看到这个文件默认很少,而且都是注释,可以进行如下操作,将这个例子文件拷贝过来并覆盖,这样这个配置文件就会有很多例子,告诉你怎么配置dhcp服务器。

cp /usr/share/doc/dhcp*/dhcpd.conf.sample /etc/dhcp/dhcpd.conf 
cp: overwrite `/etc/dhcp/dhcpd.conf'? 

配置dhcp服务器的配置文件如下图,可以给客户端分配ip地址,网关,DNS和域名


image.png

image.png

image.png

服务器端查看地址分配记录
/var/lib/dhcpd/dhcpd.leases
dhcp客户端工具是dhclient
可以通过这个目录中的文件来查看客户端自动获取的IP信息:/var/lib/dhclient
dhcp服务器端和客户端端口
dhcpserver:67/udp
dhcpclient: 68/udp
其它配置选项:
filename: 指明引导文件名称,用于dhcp服务器给客户端分配完ip地址后,客户端的主机可以根据这个引导文件来引导内核,进而进行安装系统。
next-server:提供引导文件的服务器IP地址,可以提供引导文件的服务器是tftp服务器。
示例:可以在dhcp服务器的配置文件中加入如下行

filename "pxelinux.0";  ---指明引导文件的名称
next-server 192.168.100.100;  ---指明提供引导文件的服务器的ip地址

检查语法
service dhcpd configtest ---检查配置文件的语法,只能在centos6中使用。
如何给某一个网卡分配一个固定的ip地址,如下图所示


image.png

3、实验:在centos7实现PXE安装centos6和centos7

  • 实验过程:
1安装前准备:关闭防火墙和SELINUX,DHCP服务器静态IP,网卡设置为自定义VMnet1
2安装相关软件包
如果在centos7中做实验准备的包
yum install httpd tftp-server dhcp syslinux 
如果centos6中做实验准备的包
yum install vsftpd tftp-server dhcp syslinux-nonlinux
3 配置文件共享服务和yum源
systemctl enable httpd
systemctl start httpd
mkdir /var/www/html/centos/{6,7}
mount /dev/sr0 /var/www/html/centos/7
mount /dev/sr1  /var/www/html/centos/6
4 准备kickstart文件
cp /root/anaconda-ks.cfg   /var/www/html/ksdir/ks7.cfg
chmod a+r /var/www/html/ksdir/ks7.cfg
vim /var/www/html/ksdir/ks7.cfg ---修改这个文件后制作成centos7的
kickstart文件
主要修改如下几项
url --url=http://192.168.25.21/centos7
zerombr   ---清除mbr,如果是一块旧的磁盘,要清除
clearpart --all   ---清除分区
text    --以文本方式安装系统
reboot  ---安装之后重新启动系统
#repo --name="CentOS"  --baseurl=cdrom:sr0 --cost=100  ---centos6中一定要把这一项给注释掉,不然会有问题的
scp 172.18.21.106:/root/anaconda-ks.cfg /var/www/html/ksdir/ks6.cfg  ---把centos6中的也拷贝过来
chmod a+r /var/www/html/ksdir/ks6.cfg  
vim /var/www/html/ksdir/ks6.cfg   ---制作centos6的kickstart文件
5 开启tftp服务
systemctl enable tftp.socket
systemctl start tftp.socket
6 配置DHCP服务
vim /etc/dhcp/dhcpd.conf
default-lease-time 600;
max-lease-time 7200;
subnet 192.168.25.0 netmask 255.255.255.0 {
        range 192.168.25.50 192.168.25.100;
        next-server 192.168.25.107;  ---指明提供引导文件的tftp服务器
地址
        filename "pxelinux.0";  ---指明引导文件的名字,这个名字可以
随便写,但要和后面的引导文件名对上
}
systemctl enable dhcpd
systemctl start dhcpd
7 准备PXE相关文件
mkdir /var/lib/tftpboot/pxelinux.cfg/   ---在tftp的共享目录下新建一个这
样的目录,用于存放引导菜单文件
cp /usr/share/syslinux/{pxelinux.0,menu.c32} /var/lib/tftpboot/  
---把引导文件和菜单风格的文件拷贝到tftp共享目录下,这两个文件是来自于syslinux(centos7)、syslinux-nonlinux(centos6)软件包
cp /misc/cd/isolinux/{vmlinuz,initrd.img} /var/lib/tftpboot/  ---拷贝内核文件到共享目录下
cp /misc/cd/isolinux/isolinux.cfg /var/lib/tftpboot/pxelinux.cfg/default
拷贝引导菜单到/pxelinux.cfg目录下,并且改名为default
目录结构如下
[root@centos7 tftpboot]#tree
.
├── centos6
│   ├── initrd.img
│   └── vmlinuz
├── centos7
│   ├── initrd.img
│   └── vmlinuz
├── menu.c32  ---菜单风格文件
├── pxelinux.0   ---引导文件
└── pxelinux.cfg
    └── default    ---引导菜单文件,里面指定vmlinuz和initrd.img路径
和ks文件路径

3 directories, 7 files
8 制作启动菜单文件
[root@centos7 tftpboot]#cat pxelinux.cfg/default 
default menu.c32
timeout 600

menu title CentOS Linux PXE Install

label centos7
  menu label Auto Install CentOS Linux ^7
  kernel centos7/vmlinuz
  append initrd=centos7/initrd.img ks=http://192.168.25.21/ksdir/ks7.cfg

label centos6
  menu label Auto Install CentOS Linux ^6
  kernel centos6/vmlinuz
  append initrd=centos6/initrd.img ks=http://192.168.25.21/ksdir/ks6.cfg

label local
  menu default
  menu label Boot from ^local drive
  localboot 0xffff


menu end

新建一个虚拟机进行安装,并把网卡设置为自定义VMnet1,保证和上面的主机在同一个网段,并且不影响本机的其他虚拟机,这里需要注意的是安装centos7时要把虚拟机的内存调大一点,要超过1G,不然安装的时候总会出错。

4、实验cobbler安装系统

  • cobbler工作流程
    client裸机配置了从网络启动后,开机后会广播包请求DHCP服务器(cobbler server)发送其分配好的一个IP
    DHCP服务器(cobbler server)收到请求后发送responese,包括其ip地址
    client裸机拿到ip后再向cobbler server发送请求OS引导文件的请求
    cobbler server告诉裸机OS引导文件的名字和TFTP server的ip和port
    client裸机通过上面告知的TFTP server地址通信,下载引导文件
    client裸机执行执行该引导文件,确定加载信息,选择要安装的os,期间会再向cobbler server请求kickstart文件和os image(安装包)
    cobbler server发送请求的kickstart和os iamge
    client裸机加载kickstart文件
    client裸机接收os image,安装该os image
    可以看出cobbler的工作流程和PXE的工作流程大体相同。
  • 安装包
    安装包
    cobbler
    cobbler 服务集成
    PXE
    DHCP
    rsync
    Http
    DNS
    Kickstart
    IPMI 电源管理
    检查cobbler环境
    cobbler check
  • 配置文件
    /etc/cobbler/settings : cobbler 主配置文件
  • 数据目录
    /var/lib/cobbler/config/: 用于存放distros,system,profiles 等信息配置文件
    /var/lib/cobbler/triggers/: 用于存放用户定义的cobbler命令
    /var/lib/cobbler/kickstart/: 默认存放kickstart文件
    /var/lib/cobbler/loaders/: 存放各种引导程序
    镜像目录
    /var/www/cobbler/ks_mirror/: 导入的发行版系统的所有数据
    /var/www/cobbler/images/ : 导入发行版的kernel和initrd镜像用于远程网络启动
    /var/www/cobbler/repo_mirror/: yum 仓库存储目录
    日志目录
    /var/log/cobbler/installing: 客户端安装日志
    /var/log/cobbler/cobbler.log : cobbler日志
  • cobbler重要参数
    /etc/cobbler/settings中重要的参数设置
    default_password_crypted: "$1$gEc7ilpP$pg5iSOj/mlxTxEslhRvyp/"
    manage_dhcp:1
    manage_tftpd:1
    pxe_just_once:1
    next_server:< tftp服务器的IP 地址>
    server:<cobbler服务器的IP 地址>
    具体过程
1、 安装包
yum install cobbler  dhcp tftp-server httpd
systemctl  enable  cobblerd
systemctl  start  cobblerd
systemctl enable  tftp
systemctl start  tftp
systemctl enable httpd
systemctl start httpd
2 、根据cobbler check 提示
1) vim /etc/cobbler/settings 
default_password_crypted: "$1$8ckh4FrM$ayLsgQi85bi8Nt5Gj4Drj/"    #openssl passwd -1 生成口令
next_server: 192.168.25.107  ---tftp服务器的IP 地址,也就是提供引
导文件的服务器地址
manage_dhcp: 1    ---改为1表示dhcp服务受cobbler服务管理
server: 192.168.25.107   ----cobbler服务器的地址
systemctl restart cobblerd   ---重启服务
cobbler sync  ---同步数据
2)生成dhcp模版文件
vim /etc/cobbler/dhcp.template
subnet 192.168.25.0 netmask 255.255.255.0 {
   range dynamic-bootp        192.168.25.100 192.168.25.254;
dhcp服务的配置文件不需要进行修改,只要修改cobbler的这个模板
文件,同步之后,就会发现dhcp服务器的配置文
件/etc/dhcp/dhcpd.conf的内容变成和这个模板的内容一样了,说明
cobbler可以间接的管理dhcp服务,不用你再去手动配置。
cobbler sync 
3) 准备启动文件和和菜单风格文件
连接internet,如果可以连接到网络,直接用下面的命令就可以生成启动文件和菜单风格文件
cobbler get-loaders
不连internet,也可以从下面的目录中拷贝后放到cobbler的存放各种引导程序的目录
cp /usr/share/syslinux/{pxelinux.0,memu.c32} /var/lib/cobbler/loaders
3 、导入yum源
cobbler import --path=/misc/cd --name=centos7.3 --arch=x86_64
cobbler import --path=/misc/cd --name=centos6.9 --arch=x86_64
[root@centos7 pxelinux.cfg]#cd /var/www/cobbler/ks_mirror/---导入的发行版系统的所有数据得目录
[root@centos7 ks_mirror]#ls    ---可以看到有两个yum仓库的目录
centos6.9-x86_64   centos7.3-x86_64  config
[root@centos7 ks_mirror]#cd centos6.9-x86_64/
[root@centos7 centos6.9-x86_64]#ls  ---进入仓库目录可以看到光盘
内容已经全部导过来了
CentOS_BuildTag  isolinux                  RPM-GPG-KEY-CentOS-Debug-6
EFI              Packages                  RPM-GPG-KEY-CentOS-Security-6
EULA             RELEASE-NOTES-en-US.html  RPM-GPG-KEY-CentOS-Testing-6
GPL              repodata                  TRANS.TBL
images           RPM-GPG-KEY-CentOS-6
[root@centos7 config]#cd /var/lib/tftpboot/  
[root@centos7 tftpboot]#ls  ---发现启动文件已经帮我们自动生成了
boot     centos7  grub    images2  menu.c32  pxelinux.0    s390x
centos6  etc      images  memdisk  ppc       pxelinux.cfg
[root@centos7 pxelinux.cfg]#cobbler profile list  ---查看启动菜单的
标签,发现已经有三个启动菜单标签做好了
    centos6.9-i386
   centos6.9-x86_64
   centos7.3-x86_64
[root@centos7 pxelinux.cfg]#cat cd /var/lib/tftpboot/pxelinux.cfg/default
  1 DEFAULT menu
  2 PROMPT 0
  3 MENU TITLE Cobbler | http://cobbler.github.io/
  7 
  8 LABEL local
  9         MENU LABEL (local)
 10         MENU DEFAULT
 11         LOCALBOOT -1
  1 DEFAULT menu
  2 PROMPT 0
  3 MENU TITLE Cobbler | http://cobbler.github.io/
  7 
  8 LABEL local
  9         MENU LABEL (local)
 10         MENU DEFAULT
 11         LOCALBOOT -1
 12 
 13 LABEL centos6.9-i386
 14         kernel /images/centos6.9-i386/vmlinuz
 15         MENU LABEL centos6.9-i386
 16         append initrd=/images/centos6.9-i386/initrd.img ksdevice=bootif
     lang=  kssendmac text  ks=http://192.168.25.21/cblr/svc/op/ks/profile/
    centos6.9-i386
 17         ipappend 2
 18 
 19 LABEL centos6.9-x86_64
 20         kernel /images/centos6.9-x86_64/vmlinuz
 21         MENU LABEL centos6.9-x86_64
 22         append initrd=/images/centos6.9-x86_64/initrd.img ksdevice=boot
    if lang=  kssendmac text  ks=http://192.168.25.21/cblr/svc/op/ks/profil
    e/centos6.9-x86_64
 23         ipappend 2
 24 
 25 LABEL centos7.3-x86_64
 26         kernel /images/centos7.3-x86_64/vmlinuz
 27         MENU LABEL centos7.3-x86_64
 28         append initrd=/images/centos7.3-x86_64/initrd.img ksdevice=boot
    if lang=  kssendmac text  ks=http://192.168.25.21/cblr/svc/op/ks/profile/centos7.3-x86_64  --ks文件也已经生成
 29         ipappend 2
 30 
 31 
 32 
 33 MENU end
说明cobbler可以帮助我们自动在tftp服务器的目录下生成启动文件,
并且启动菜单文件也帮我们生成好了,kickstart文件也已经帮我们生
成好了。到此已经可以安装系统了。
如果你要定制自己的kickstart文件和启动菜单标签,可以进行如下操
作
4 、自己生成ks文件和启动菜单文件
cp  ks6.cfg ks7.cfg /var/lib/cobbler/kickstarts/  ---可以把自己定制的
ks文件放到这个目录下
cobbler profile remove --name=centos6.9-x86_64  
cobbler profile remove --name=centos7.3-x86_64 --可以删除原有的
启动菜单标签和ks文件
cobbler profile add --name=centos6.9_mini --distro=centos6.9-x86_64  --kickstart=/var/lib/cobbler/kickstarts/ks6.cfg 
cobbler profile add --name=centos7.3_mini --distro=centos7.3-x86_64  --kickstart=/var/lib/cobbler/kickstarts/ks7.cfg
--name=centos7.3_mini启动菜单标签的名字   --distro=centos7.3-x86_64yum仓库目录   --kickstart=/var/lib/cobbler/kickstarts/ks7.cfg --- 指明ks文件路径
cobbler sync  ---同步一下
[root@centos7 pxelinux.cfg]#cat default  --看一下启动菜单文件,发现标签是安装我们指定的标签
DEFAULT menu
PROMPT 0
MENU TITLE Cobbler | http://cobbler.github.io/
TIMEOUT 200
TOTALTIMEOUT 6000
ONTIMEOUT local

LABEL local
        MENU LABEL (local)
        MENU DEFAULT
        LOCALBOOT -1

LABEL centos6.9_mini   ---启动菜单的标签,标签在启动菜单界面不显示,只显示里面的菜单名,标签相当于一个大的标题,里面包含有内核的名字、菜单的名字、及内核参数
        kernel /images/centos6.9-x86_64/vmlinuz
        MENU LABEL centos6.9_mini   ---菜单名
        append initrd=/images/centos6.9-x86_64/initrd.img ksdevice=bootif lang=  kssendmac text  ks=http://192.168.25.21/cblr/svc/op/ks/profile/centos6.9_mini
        ipappend 2

LABEL centos7.3_mini  ---启动菜单的标签
        kernel /images/centos7.3-x86_64/vmlinuz
        MENU LABEL centos7.3_mini   ---菜单名
        append initrd=/images/centos7.3-x86_64/initrd.img ksdevice=bootif lang=  kssendmac text  ks=http://192.168.25.21/cblr/svc/op/ks/profile/centos7.3_mini
        ipappend 2



MENU end
[root@centos7 pxelinux.cfg]#wget http://192.168.25.21/cblr/svc/op/ks/profile/centos7.3_mini ---可以把应答文件下载下来看一下

5、cobbler的web管理实现

cobbler-web 提供cobbler的基于web管理界面,epel源
yum install cobbler-web
可以在/etc/cobbler/modules.conf中定义认证方法:

  • 认证方式一
使用authn_pam模块认证cobbler_web用户
[authentication]块中指定module = authn_pam
创建cobbler登录用户:useradd cobbler
设置登录密码 echo centos|passwd --stdin cobbler
修改文件/etc/cobbler/users.conf
[admins]
admin = "cobbler"
systemctl restart httpd
systemctl restart cobblerd

通过https://172.18.21.107/cobbler_web访问即可

  • 认证方式二
    使用authn_configfile模块认证cobbler_web用户
    [authentication]块中module=authn_configfile
htdigest-c /etc/cobbler/users.digest Cobbler zhang   ---创建其认证
文件/etc/cobbler/users.digest,并添加所需的用户,这里登录的用户
是zhang,创建的时候会让输入密码为登录密码
注意:添加第一个用户时,使用“-c”选项,后续添加其他用户时不要再
使用,cobbler_web的realm只能为Cobbler
systemctl restart httpd
systemctl restart cobblerd

通过https://172.18.21.107/cobbler_web访问即可

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

推荐阅读更多精彩内容