实验室服务器环境搭建

系统安装

准备工作:4G以上U盘一个,linux系统镜像iso,其中Ubuntu推荐安装长期支持版(LTS),centos推荐6.5或7这里采用的是7.

制作启动U盘:制作linux启动盘的软件很多,这里强烈推荐使用rufus这个小工具。主要这个对centos和Windows都很好的支持,像universal usb installers这个Ubuntu官网推荐的工具对centos的支持就不是很好,制作的启动盘不能直接启动,需要有些修改。

  1. 开始制作启动盘

打开rufus软件并按照下图所示进行操作等待制作完毕即可。

  1. 安装系统

U盘插入电脑,开机选择U盘启动(这里一般会出现两个,一个是UEFI,一个是legacy,选择UEFI进去画面会清晰很多),进入install选项开始安装。后面的安装都是设置一些东西比较傻瓜式,记得不要勾选安装第三方软件,要不安装速度很慢。在分区这一步骤中选择something else,后面手动分区。分区记得home目录要大一点,所有的用户主目录都在这里。还有就是 /usr/local/ /tmp swap等,最后还得给boot设置一个分区,这样以后启动项丢失了还能找的回来。具体的分区方案可以参考百度谷歌别人的建议。对于Ubuntu在选择地区这里建议拔掉网线,有时候会因为这个原因卡死

  1. 配置软件源

!!!谨记不同版本的Ubuntu或者centos软件源是有点不一样的,一定要配置对应版本号的软件源。之所以配置软件源是因为默认的软件源服务器一般在国外,访问速度较慢。

3.1.Ubuntu 14.04配置软件源

sudo cp /etc/apt/sources.list /etc/apt/sources.list_backup
sudo gedit /etc/apt/sources.list
在sources.list中增加以下内容
#education ipv6 source
deb http://mirrors6.ustc.edu.cn/ubuntu/ trusty main multiverse restricted universe
deb http://mirrors6.ustc.edu.cn/ubuntu/ trusty-backports main multiverse restricted universe
deb http://mirrors6.ustc.edu.cn/ubuntu/ trusty-proposed main multiverse restricted universe
deb http://mirrors6.ustc.edu.cn/ubuntu/ trusty-security main multiverse restricted universe
deb http://mirrors6.ustc.edu.cn/ubuntu/ trusty-updates main multiverse restricted universe
deb-src http://mirrors6.ustc.edu.cn/ubuntu/ trusty main multiverse restricted universe
deb-src http://mirrors6.ustc.edu.cn/ubuntu/ trusty-backports main multiverse restricted universe
deb-src http://mirrors6.ustc.edu.cn/ubuntu/ trusty-proposed main multiverse restricted universe
deb-src http://mirrors6.ustc.edu.cn/ubuntu/ trusty-security main multiverse restricted universe
deb-src http://mirrors6.ustc.edu.cn/ubuntu/ trusty-updates main multiverse restricted universe
deb http://mirrors.aliyun.com/ubuntu/ trusty main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ trusty-security main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ trusty-updates main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ trusty-proposed main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ trusty-backports main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ trusty main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ trusty-security main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ trusty-updates main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ trusty-proposed main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ trusty-backports main restricted universe multiverse
-----------------------------------------------------------------------------------------------
#更新软件源
sudo apt-get update

3.2.Centos 7配置软件源

sudo mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo //阿里云的镜像,资源还是比较多的
yum clean all
yum makecache//生成缓存即可
还有一些比较好用的国内源
网易163:http://mirrors.163.com/.help/centos.html
华中科技大学:http://mirrors.hust.edu.cn/help.html#centos
浙江大学:http://mirrors.lifetoy.org/
------------------------------------------------------------------------------
添加RHEL源和一些国外源
yum localinstall http://dl.fedoraproject.org/pub/epel/7/x86_64/e/epel-release-7-6.noarch.rpm -y

有时候可能出现404错误,这是因为这个有更新了,打开地址搜索epel-release找到对应的地址替换即可。

##最后生成缓存即可:
yum clean all
yum makecache

3.3.配置python的pip源

pip是一个python包安装工具,首先安装pip和python的一些库

yum install python-dev python-pip            // centos
apt-get install python-dev python-pip        //Ubuntu

默认的pip源也是速度超级慢,这里我们配置为豆瓣或者清华的源。centos和Ubuntu的配置是一样的。
首先我们切换到root用户。

su
mkdir ~/.pip
gedit ~/.pip/pip.conf  //对于centos可以用vim ~/.pip/pip.conf, 可通过sudo yum install vim 安装vim
#输入以下内容
[global]
index-url = https://pypi.tuna.tsinghua.edu.cn/simple    
[install]
trusted-host=pypi.tuna.tsinghua.edu.cn

上面仅仅是修改了pip install安装时候的默认源,观察发现在使用setup.py的时候依然是使用的pypi.python.org,这里需要修改distutils的配置。同上切换到root。

vim ~/.pydistutils.cfg
输入:
[easy_install]
index_url = https://pypi.tuna.tsinghua.edu.cn/simple

这样以后安装的时候都是通过清华的镜像源,速度比较快。

  1. 安装gcc, gcc-c++, cmake

yum install gcc
yum install gcc-c++
#去cmake官网下载源码包编译安装
比如我这里下载的是
cmake-3.5.2.tar.gz
tar xzvf cmake-3.5.2.tar.gz
cd cmake-3.5.2
sudo ./bootstrap
sudo gmake
sudo make install
#验证安装
cmake -version
  1. 配置ssh和添加用户

5.1.Ubuntu 安装ssh server

sudo apt-get install openssh-server
sudo ps -e |grep ssh   //查看ssh服务是否启动成功
sudo service ssh start  //启动ssh服务
# 修改配置文件,设置root用户可以登入
sudo gedit /etc/ssh/sshd_config
注释掉下面这行语句:
# PermitRootLogin without-password
并加入语句:
PermitRootLogin yes
重启ssh服务:
sudo service ssh restart
设置ssh服务开机自启动:
打开/etc/rc.local文件,在exit 0语句前加入:
/etc/init.d/ssh start

5.2.centos设置ssh server

centos默认已经安装了ssh server
开启ssh服务:
service sshd start
设置ssh开机启动:
chkconfig sshd on

5.3 添加用户

Ubuntu和centos有点差别
useradd 对于ubuntu只会创建用户不会在home目录下生成对应的用户文件。
这里采用adduser
修改用户密码
sudo passwd user
  1. 用户主目录分区挂载

对于每一个新建的用户,在/Home下会有对应的用户文件夹,考虑到数据的安全和可移植性,这里我们希望可以将用户目录挂载到系统盘外的盘上。

6.1.利用parted对电脑其他盘进行分区和挂载到用户目录

首先需要对系统盘外的盘进行分区并格式化,利用fdisk -l查看电脑磁盘分布。这里我将5T的盘分成5个分区,对应的盘符是sdd

parted /dev/sdd 
mklabel 
输入gpt
mkpart
输入起始位置和结束位置
!!!上面的操作都是不可逆的
q退出
mkfs.ext4 /dev/xx 

6.2.开始挂载分区

vim /etc/fstab
# 前面是对应的磁盘和要挂载到的地方,后面是文件系统等等。
/dev/sdd1 /home/qiudan    ext4    defaults0   0
/dev/sdd1 /home/qiudan    ext4    defaults0   0
/dev/sdd1 /home/qiudan    ext4    defaults0   0
/dev/sdd1 /home/qiudan    ext4    defaults0   0
/dev/sdd1 /home/qiudan    ext4    defaults0   0
#查看fstab配置时候正确
mount –a
df -h
如果正确的话可以看到分区被正确挂载到对应的目录,下面把目录权限给对应的用户:
sudo chown -R xx:xx xx

这个时候切换到对应的用户会发现终端没有显示用户名,这是因为我们挂载的分区缺少一些用户文件,可以通过拷贝获得,并记得授权权限。

sudo cp –R /etc/skel/. /home/xxx
sudo chown xx:xx  home/xx/.bash*
  1. 配置 ftp

sudo apt-get install vsftpd
vim /etc/vsftpd.conf
anonymous_enable=Yes
sudo mkdir /srv/files/ftp //希望的ftp文件夹位置
sudo usermod -d /srv/files/ftp ftp //修改ftp文件夹位置配置
sudo restart vsftpd//重启ftp
  1. 安装CUDA, cudNNs

没必要提前安装nvidia显卡驱动,cuda里面已经带了,可以在安装CUDA的时候勾选安装驱动选项即可

a.    禁用自带的显卡驱动:
    Vim /etc/modprobe.d/blacklist.conf
    输入以下内容:
    blacklist nouveau
    options nouveau modeset=0
    -------------------------------------------------
    更新内核启动参数:
     sudo update-initramfs -u        //Ubuntu
    sudo dracut --force                //Centos

b.    关闭图形界面
    其中Ubuntu可以参考[1](http://blog.csdn.net/a1311543690/article/details/48861237)
    centos 7图形和命令提示符界面切换:
    systemctl set-default multi-user.target //命令提示符
    systemctl set-default graphical.target  //图形界面
c.  重启开始安装cuda(这里我们选择的是.run file进行安装的)
    查看gcc时候安装
    gcc --version
    如果没安装需要手动安装之!    
    sudo ./cuda_7.5.18_linux.run  --no-opengl-libs (不要安装opengl这会覆盖cpu中集成显卡的opengl库导致装完进不了图形界面)
    首先driver是肯定要安装的,tookit也是要安装的,sample可选,建议安装下,路径的除了sample都用默认的即/usr/local/cuda    

安装中按ctrl+c可以跳过长长的阅读协议部分。安装完毕,设置开启图形界面重启ok

d.  安装cudNN( 这里需要注意,最新版本的可能会不兼容caffe,本文采用cudnn4)
    下载x64位的cudnn压缩包。
    tar xvzf cudnn-7.0-linux-x64-v4.0-prod.tgz
    sudo cp cuda/include/cudnn.h /usr/local/cuda/include
    sudo cp cuda/lib64/libcudnn* /usr/local/cuda/lib64
    拷贝完这些文件后还需要注意,重新生成链接文件并赋予对应的权限。
    cd /usr/local/cuda/lib64
    rm -rf libcudnn.so libcudnn.so.4   //删除原来的链接
    chmod u=rwx,g=rx,o=rx libcudnn.so.4.0.7 //对目标文件放开权限
    ln -s libcudnn.so.4.0.7 libcudnn.so.4  //设置链接
    ln -s libcudnn.so.4.0.7 libcudnn.so   //同上
e.    配置cuda的环境变量:
    PATH变量:
    vim /etc/profile
    输入下面内容:
    PATH=/usr/local/cuda/bin:$PATH
    export PATH
    更新环境变量:
    source /etc/profile
    lib变量:
    cd /etc/ld.so.conf.d/
    vim cuda.conf
    输入下面内容:
    /usr/local/cuda/lib64
    更新环境变量: 
    sudo ldconfig
  1. 安装FFmpeg

----安装一些依赖库---------------
#安装汇编指令集yasm(必须)
sudo yum install yasm

#安装libass(可选)
sudo yum install libass-devel libav*

#安装H.264编码器 (可选)
从 http://www.videolan.org/developers/x264.html 下载源码包
#解压源码包
tar -xjvf /path/to/x264-snapshot-20080805-2245.tar.bz2
#开始configure并安装H.264
cd /path/to/x264-dir
./configure --enable-shared
make -j8
sudo make install

上述安装完毕后还需配置x264的lib到系统path变量,否则运行ffmpeg会出现 error while loading shared libraries: libavdevice.so.52: cannot open shared object file: No such file or directory

#配置x264
sudo vim /etc/ld.so.conf.d/custom-libs.conf
# Add this
/usr/local/lib
# update to make it work
sudo ldconfig
sudo updatedb

---开始安装FFmpeg---------- 
#下载FFmpeg源码包
git clone https://git.ffmpeg.org/ffmpeg.git ffmpeg
#configure
cd FFmpeg-master
sudo ./configure --enable-libass --enable-libx264 --enable-gpl --enable-shared --prefix=/usr/local/ffmpeg

上述命令按照需要修改,如果没安装libass和x264则不要enable否则会出错

#开始make
make -j8
sudo make install  //因为安装到的路径是 /usr/local/ 需要root权限

#配置FFmpeg的lib库
sudo vim /etc/ld.so.conf.d/ffmpeg.conf
#输入以下内容:
/usr/local/ffmpeg/lib/   // /usr/local/ 和上面configure设置的路径要一致
#保存并使之生效
sudo ldconfig
#设置ffmpeg的path变量
sudo vim /etc/profile/
export PATH=/usr/local/ffmpeg/bin/:$PATH
#添加路径到PKG_CONFIG_PATH
sudo yum install pkgconfig.x86_64  //可能未安装PKG_CONFIG_PATH
sudo vim /etc/profile/
export PKG_CONFIG_PATH=/usr/local/ffmpeg/lib/pkgconfig:$PKG_CONFIG_PATH
#保存并生效,更新db
source /etc/profile
sudo updatedb   //有时候添加到了环境变量不生效,但是又不能重启,执行该条命令很有效。

#查看ffmpeg版本
ffmpeg -version
#比如我这台电脑如下:
---------------------------------------------------------------------------
[zhengbo@mediaszu ~]$ ffmpeg -version
ffmpeg version 3.0.git Copyright (c) 2000-2016 the FFmpeg developers
built with gcc 4.8.5 (GCC) 20150623 (Red Hat 4.8.5-4)
configuration: --enable-shared --prefix=/usr/local/ffmpeg
libavutil      55. 28.100 / 55. 28.100
libavcodec     57. 48.102 / 57. 48.102
libavformat    57. 41.100 / 57. 41.100
libavdevice    57.  0.102 / 57.  0.102
libavfilter     6. 47.100 /  6. 47.100
libswscale      4.  1.100 /  4.  1.100
libswresample   2.  1.100 /  2.  1.100
-----------------------------------------------------------------------------
  1. 源码编译安装opencv 2.4.xx

在正式安装opencv之前需要安装一些依赖包,下面是官网给出的指南:

# GCC和ffmpeg还有pkg-config,python-dev前面已经安装
sudo yum install gtk2 gtk2-devel gtk2-devel-docs
sudo pip install numpy
sudo yum insatll libjpg-devel libpng-devel libtiff-devel libjasper-devel

下载opencv的源码包,比如我下载的是opencv-2.4.13.zip

#解压源码包
unzip opencv-2.4.13.zip -d ~/
#进入源码包
cd ~/opecv-2.4.13
mkdir release
cd release
#开始设置cmake
cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local ..   //注意后面有两个点
#等待片刻后可以看到生成了Makefile,下面开始make,可以开启多线程
make -j8
#开始安装
sudo make install
#因为上面的安装路径设置的是"/usr/local/",故此path和lib不需要额外配置环境变量,下面只需要注册下包的信息,配置PKG_CONFIG_PATH
sudo vim /etc/profile
export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig:$PKG_CONFIG_PATH
#保存后source,更新db
source /etc/profile
sudo updatedb
#查看opencv版本信息
pkg-config --modversion opencv
#比如我的出现下面
2.4.13

下面继续配置opencv的python接口,参考官网,由于我们opencv采用的是源码安装,所以只需要将一些文件拷贝到python包下即可。

#方法1,拷贝文件
sudo cp /usr/local/lib/python2.7/site-packages/cv2.so /usr/lib/python2.7/site-packages
#方法2,添加路径到PATH
sudo vim /etc/profile
export PYTHONPATH=$PYTHONPATH:/usr/local/lib/python2.7/site-packages
source /etc/profile
#测试接口
python
import cv2
print cv2.__version__
  1. 安装tensorflow

方法1.源码安装 //主要准对cundnn5需要源码安装,官方编译好的并不支持cudnn5

a. 安装Bazel,这里我们选择源码安装
    安装之前需要先配置JAVA的环境变量,因为系统默认安装的是openjdk并没有配置JAVA_HOME
    这里我选择先删除系统自带的openjdk,安装官方的JDK8
    #查询系统自带的jdk有哪些
     rpm -qa | grep jdk
    #开始删除
      sudo yum remove name //name是上面查出的包的名字,可以用通配符匹配删除所有的
    #安装Oracle JDK8 
    # http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html
    #选择linux 64位的tar.gz包,比如这里我下载的是
        jdk-8u91-linux-x64.tar.gz
    #解压所,建议放到/usr/local
        tar tar zxvf jdk*.tar.gz -C /usr/local/
    #配置环境变量,注意文件夹名字
        sudo vim /etc/profile
        #set java environment
        export JAVA_HOME=/usr/local/jdk1.8.0_60   
        export JRE_HOME=/usr/local/jdk1.8.0_60/jre  
        export CLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH   
        export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$JAVA_HOME:$PATH
    #更新
        source /etc/profile
    #验证
        java -version
      #下载bazel源码包
        git clone https://github.com/bazelbuild/bazel.git
        cd bazel
        ./compile.sh
    #等待几分钟后完毕,生成一个bazel的可执行文件
        sudo cp ~/bazel-master/output/bazel /usr/local/bin
b. 下载tensorflow源码包
    git clone https://github.com/tensorflow/tensorflow
    cd tensorflow-master
    ./configure

如下图:

这里我们直接回车即可,没必要像上图单独指定,采用default即可。

c. build 源码包并生成pip安装包
    bazel build -c opt --config=cuda //tensorflow/tools/pip_package:build_pip_package
    上述命令需要下载,需等待片刻
    #生成 pip安装包
    bazel-bin/tensorflow/tools/pip_package/build_pip_package /tmp/tensorflow_pkg
    #pip安装tensorflow
    sudo pip install /tmp/tensorflow_pkg/tensorflow-0.9.0-py2-none-any.whl

d. 测试安装
    cd tensorflow-master/models/image/mnist
    python convolutional.py
    #出现下面界面说明安装成功
    Successfully downloaded train-images-idx3-ubyte.gz 9912422 bytes.
    Successfully downloaded train-labels-idx1-ubyte.gz 28881 bytes.
    Successfully downloaded t10k-images-idx3-ubyte.gz 1648877 bytes.
    Successfully downloaded t10k-labels-idx1-ubyte.gz 4542 bytes.
    Extracting data/train-images-idx3-ubyte.gz
    Extracting data/train-labels-idx1-ubyte.gz
    Extracting data/t10k-images-idx3-ubyte.gz
    Extracting data/t10k-labels-idx1-ubyte.gz
      Initialized!
    Epoch 0.00
    Minibatch loss: 12.054, learning rate: 0.010000
    Minibatch error: 90.6%
    Validation error: 84.6%
    Epoch 0.12
    Minibatch loss: 3.285, learning rate: 0.010000
    Minibatch error: 6.2%
    Validation error: 7.0%
    .
    .
    .

方法2. 通过pip安装官方已经编译好的文件

a. 下载whl
下载官方编译好的python安装包
地址[1](https://storage.googleapis.com/tensorflow/linux/cpu/tensorflow-0.9.0-cp27-none-linux_x86_64.whl)
地址[2](https://storage.googleapis.com/tensorflow/linux/gpu/tensorflow-0.9.0-cp27-none-linux_x86_64.whl)
地址1仅仅支持cpu,这里我们选择支持GPU的地址2

b. 开始安装
pip install --upgrade tensorflow-0.9.0-cp27-none-linux_x86_64.whl
#上述命令会安装python的一些其他包
numpy, protobuf, wheel, setuptools
如果中间有安装失败的包,自己手动安装即可。

!这里需要注意的是,如果python当前采用的是Anaconda python,那么在安装setuptools的时候有可能出现
Cannot remove entries from nonexistent file....
这其实是Anaconda的一个bug,主要原因是关于setuptools的一个文件不存在。解决方法如下

c. Anaconda python 升级setuptools
去pypi官网 https://pypi.python.org/pypi/setuptools#using-setuptools-and-easyinstall
下载ez_setup.py
python ez_setup.py

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

推荐阅读更多精彩内容