[记录]配置Docker出现的错误

  为了方便管理实验室的GPU资源,上了多层虚拟化,在部署和运维Docker节点的过程中踩了一些坑,在这记录一下,以便日后查阅。

1、Docker服务无法启动

问题定位: Docker启动的时候传入了命令行参数,同时也指定了配置文件,两个配置发生了冲突。

解决方法:

[记录]英伟达Tesla K80显卡直通出现未知错误

  实验室添置了新显卡,超微塔式服务器没地方了,只好把旧显卡换到戴尔刀片里,之后在做显卡直通的时候遇到一些莫名其妙的问题,折腾了好久才解决,在这记录一下。

环境:

实体机:DELL PowerEdge R730
操作系统: VMware ESXi, 6.5.0, 6765664
管理平台: VMware vCenter Server Appliance, 6.7.0.21000, 11726888
设备: Nvidia Tesla K80

  问题是这样的:在主机上开虚拟机,并直通其他PCI设备(usb控制器),一切正常,且虚拟机正常启动,正常识别设备。给虚拟机直通Nvidia Tesla K80,虚拟机无法开机,报未知异常,如下图:

  尝试了很多国内外常见的解决方案都无法生效。怀疑是跟显卡型号有关,最后在官方社区找到一个出现完全相同问题的讨论:Passing through Tesla k80 Issue…。下面有一个官方人员的回答是:

Re: Passing through Tesla k80 Issue…

A previous version of this post included advice to add two VMX file entries (efi.legacyBoot.enabled and efi.bootOrder) as part of the solution. These two settings should NOT be used. Instead, following the directions below.
 ——–
You should be able to pass a single GPU (that is, half of a K80) to a VM running on ESX 6 by creating an EFI-bootable VM, doing an EFI installation of your guest OS, and then adding the following to the VM’s VMX file.
pciPassthru.use64bitMMIO=”TRUE”
Trying to pass more than one of these GPUs into the same VM will currently hit a platform memory limit and the VM will fail to boot. (NOTE: This limit has been removed in ESX 6.5).
A smaller card like the K2 does not have this issue: GPGPU Blog Entry
If the above does not work for you, send me email directly at “simons at vmware dot com”. In either case, please share your experience with others on the thread.
And if you have any other questions about running HPC applications in a VMware environment, I’d be happy to hear from you directly.
If you are interested in learning more of what we’ve been doing related to HPC, you can check out our HPC entries on the VMware CTO blog site here: HPC Blog Entries
 
Josh Simons
High Performance Computing
Office of the CTO
VMware, Inc.

  关键是要添加以下高级参数:

「记录」在vSphere中基于Ubuntu Server 1604部署Docker,并安装CUDA,构建多层虚拟化深度学习开发环境

首先准备好Ubuntu Server 1604的虚拟机,只设定基本功能,不添加显卡直通等特殊功能,以便于基础环境完成后进行快照。

安装好系统后,进行ssh端口设置,apt换源,apt upgrade等基本操作,之后关机打快照。

然后开机安装docker,去清华源帮助文档里找清华源安装方法。安装好之后配置docker远程管理,参考“docker 配置 TLS 认证开启远程访问”“Docker 守护进程+远程连接+安全访问+启动冲突解决办法 (完整收藏版)”。配置好docker之后关机打快照。

在ESXi中添加显卡直通,并启动。

「记录」解决VSCode编辑Python文件时自动给过长的行换行问题

在使用VSCode写Python的时候,总是莫名其妙的被换行,记得之前已经改过一次全局的行长度限制,但问题依旧,本来懒得管了,最近写数据处理经常要写很长的 columns数组,实在受不了,记录下解决过程。

通过逐一排查插件确定了是官方的“
ms-python.python”插件导致了这个问题,排查设置没找到相关项。通过搜索发现是因为该插件默认使用了格式化工具“autopep8”,这个工具有默认行长度限制。需要添加参数修改此限制:

参考:visual studio code disable auto wrap long line

「记录」博客重生记——Ubuntu 18.04安装LNMP+phpmyadmin

  因为各种客观+主观的原因(chrome恶心的安全措施、长期没有对服务器系统进行升级、脑子被门夹了非要上https、海森堡编辑器全是bug、研二全是事情等等),我做了各种令人窒息的操作,导致我的站点和博客彻底凉凉。为了完成曾老师的作业,也为了能好好做记录,我终于下定决心把整个站点重建一遍。

  其实最早只是想着从ubuntu16迁移到18,结果玩脱了。不过既然都上18了,再退到16岂不是坑都白踩了,而且16也不一定能活多久,干脆一步到位。

  这次记录除了包括在ubuntu18上部署lnmp、phpmyadmin以外,还会有https站点迁移的内容,读者请各取所需。

首先安装 lnmp

下面给一个配置文件样本,是一个很早的原始版本,仅供测试参考

有了简单配置之后可以测试下nginx和php了,一定先测试后迁移,因为在迁移过程中涉及的步骤和环节很多,而且中间几乎无法测试,一旦前期有问题最后都没法定位错误!

使用php探针测试会发现页面显示白页,nginx日志无问题,这是一个bug,解决方法如下

测试通过之后就可以开始迁移了,但是建议先把phpmyadmin装了,这样可以先配置数据库

终于可以开始迁移服务器了

完成数据库迁移之后,就是最关键的部分了,之后的步骤中间几乎完全不能调试

  1. 将整站数据上传至相应的服务器目录
  2. 修改目录属主和权限
  3. 将原服务器的nginx配置文件替换掉新服务器nginx的配置文件
  4. 修改新服务器nginx服务器文件,使得其中一些小条目符合新服务器配置
  5. 将ssl证书配置到相应目录
  6. 重启nginx
  7. 进入wordpress目录修改wp-config.php中的数据库连接信息
  8. 修改dns解析地址到新服务器
  9. 通过url访问页面测试

如果一切正常,恭喜你完成了全部步骤!

「记录」制作macOS High Sierra 10.13.6的ISO安装镜像

  最近掏了一个dell 9020sff,心血来潮想要装mac虚拟机,但是折腾了好久总是出各种奇怪的问题,后来还是在一个台湾的博客里找到解决方法,在这记录一下。废话不多说,先上干货。

制作macOS High Sierra 10.13.6的ISO安装镜像

  首先准备好一个mac系统,不管是实体mac还是mac虚拟机都行,甚至比较老的OS X也行(我用的10.8,虽然官方说这个版本支持升级到10.13,但从store下载的原版app在10.8里提示已损坏无法打开,但这并不影响iso的制作)。然后需要下载好10.13的安装应用,建议从mac app store下载,把app放在应用程序目录。

注意:下面的代码中默认的10.13安装app路径是:”/Applications/Install\ macOS\ High\ Sierra.app”,如果你的安装app不在默认位置,请自行替换路径。

  如果没有意外,你就可以在桌面找到iso安装镜像了。

参考资料:製作 macOS High Sierra 10.13 的可開機安裝隨身碟及 ISO 映像檔

神奇的坑

  在找到正确的解决方法之前,我当然也踩了不少坑,一度甚至想放弃,但「缘,妙不可言!」,所以在这记录一些比较神奇的坑。

1、用官方推荐的createinstallmedia创建的dmg,用磁盘工具另存为“DVD/CD 主映像”,会储存为.cdr文件,但这个文件不能直接改后缀成.iso!

  直接改后缀看似没有什么问题,在win里也能打开,也可以在esxi里挂载,但是在安装中要么无法引导,要么在引导的最后阶段出现禁止符号!!!没错,就是这个符号🚫。黑色的背景,白色的禁止符,我一直以为是我虚拟机的问题,废了好大劲才晓得是镜像问题。

2、不可以在mac以外的系统里将dmg或cdr转为iso,不管用什么工具都不行,必须用mac!

  我试过百度上几乎所有的转换方案,包括软碟通啊,或是什么其他的软件,最后事实证明,都TMD在骗人,浪费我的时间和精力!SB百度!

3、VMware虚拟macOS需要加两个高级参数

有两个修改方法。第一个是直接改vmx文件,另一个是在vsphere client里“编辑虚拟机设置”,“虚拟机选项”选项卡,展开“高级”,点“编辑配置”。确保下面两个参数正确,否则无法打开虚拟机,或运行出现奇怪的错误。

smc.present = “TRUE”
smc.version = 0

「记录」在Ubuntu Server 1604上部署SOCKS5服务器dante-server

因为某些原因,我需要部署一台代理服务器,之前配置了http缓存代理,但是有些网站访问异常,而且有些软件不支持http代理,所以萌生了部署SOCKS5服务。

1、安装 dante-server

2、配置
备份配置文件

查找以下关键行进行修改

创建日志文件夹,并重启服务

使用Virtualenv创建独立Python开发环境

在使用Python进行开发时,经常需要安装各种包,如果同时开发多个项目,就有可能出现开发环境冲突的问题。通过使用Virtualenv来创建多个独立的Python开发环境,可以很好的解决环境冲突问题,也可以避免主系统环境被污染的问题。

安装

创建虚拟环境

Windows 激活虚拟环境

Linux 激活虚拟环境

Ubuntu 1604 安装nginx+php7+mysql+phpmyadmin环境

1. 安装 nginx 最新版本,使用以下命令:

2. 安装 php7 :(不要尝试直接apt-get install php7,这样会默认安装apache,ubuntu 16默认不能安装php5)

3. 安装 MySQL 数据库:

4. nginx管理操作

大括弧里是可选的操作,选一个,外面不需要加大括弧

5. 配置nginx

配置文件样本:

重启nginx:

6. 安装phpMyAdmin

HP Microserver Gen8 微型服务器折腾记

得知研一的奖学金是每人平均分后兴奋地买了种草已久的HP Microserver Gen8。在经历漫长的德国直邮和配置升级之后,终于在上周末开始准备上电装系统。现在已经基本完成了计划,在此记录一下。

这台微型服务器首先是要取代我旧的下载机,其次还要为以后用作数据、媒体中心准备,因此我决定直接安装虚拟化环境。虚拟化环境最出名的就是VMware的vSphere产品了,我要使用的是其中的ESXi。

首先下载HP定制版ESXi6.5系统镜像:

HP定制镜像下载页:https://www.hpe.com/us/en/servers/hpe-esxi.html

HPE Custom Image for ESXi 6.5U1 Install CD:https://my.vmware.com/cn/group/vmware/details?downloadGroup=OEM-ESXI65U1-HPE&productId=614

文件为:VMware-ESXi-6.5.0-Update1-6765664-HPE-650.U1.10.1.5.26-Oct2017.iso ,SHA1:58685a1d662f9fb798d2ccb28376811f1b78090a

直接使用iLO远程挂载镜像,注意必须在win7中用ie打开远程控制台,win10有安全限制,chrome会识别为文件下载!

安装前尽量把非目标硬盘都断开连接,只接目标硬盘,我选择安装在主板上的U盘里。安装过程中按照提示选择即可。安装完成后,注意进BIOS改硬盘模式。默认是使用RAID模式,ESXi里只能看到U盘和RAID卡,除非配置好RAID卡上的硬盘组,否则不会显示硬盘。手动切换到AHCI模式后,就可以在ESXi里直接管理硬盘了。

在安装好用来取代之前下载机的虚拟机后,要配置硬盘直通,把旧下载机的硬盘直通给新下载机。ESXi不能简单的直通硬盘,因为硬盘不是设备,只能直通硬盘控制器,但是这样的话所有的硬盘都只能给一个机器用,显然是不合理的。也不能使用扩展卡,因为这样会占用显卡安装位。因此要用RDM技术来间接实现硬盘直通,这种技术是创建一个的特殊 .vmdk 文件(一个文本文件)映射到一块物理磁盘,当虚拟机向这块 VMDK 写入时,实际写入的是后面的物理磁盘。

1、在ESXi 中打开 SSH 访问,并远程登录。

2、寻找需要直连的磁盘路径,一般在/vmfs/devices/disks/目录下

CC(_857X_[H688DG[I_]G~T

3、创建RDM映射

可选参数-z或-r
-r 参数创建的是 Virtual Compabilitiy Mode RDM,即 ESXi 会截获除 READ / WRITE 之外所有 SATA 指令。
-z 参数则是创建 Physical Compability Mode RDM,即 ESXi 除了 LUN REPORT 指令,其他全部原样传递给物理磁盘。

4、分配.vmdk硬盘给目标虚拟机

 

「记录」重新安装Adobe Ps & Lr CC 2015,并激活

因为给电脑换了CPU所以导致之前用的好好的Ps和Lr需要重新激活,因为某些未知的原因激活不了,我只好清理后重装,折腾了很久,这次记下来免得以后忘了。

1、首先要彻底清理旧的软件,可以先用官方卸载器卸载,然后再用清理工具清理,也可以不卸载直接清理。
运行“AdobeCreativeCloudCleanerTool.exe”,选择语言,确认,然后选择要清理的软件:
$G0$F23H@LVS]B108X3~@@L
选择“1、All”,工具会自动扫描并列出所有电脑中的adobe软件:
K((U_@%M@UBM3Y48O`8`LJN
选择“Clean All”,确认,等待清理完毕。

2、清理旧的授权文件,清空以下目录内的全部文件。

C:\Program Files (x86)\Common Files\Adobe\SLCache
C:\ProgramData\Adobe\SLStore

PAGVF%1~%1V7{WJ$(Z@B2A6
D]~FI155]6CK3CAD)6B{EC8

3、清理host文件中全部关于adobe的记录!

4、重启并断网,断网、断网!

5、运行Ps安装程序

选择“忽略”,
J`~@96UYOVC4BM1V}9JY%HS

选择“安装”,
ZU`AV6ASSQ@BWZXF6O9M

选择右下角的“登陆”,然后选择“稍后连接”,接受许可协议,进入序列号输入界面,
打开序列号生成工具,先选择产品,确认选择正确后点击左边按钮,生成序列号,不要关闭生成工具,或把序列号存在一个文件里
C]A0Q9JT1PEP{]I9MSVZ}_P

输入序列号后点“下一步”,点“稍后连接”,选择安装目录,并安装,安装完成后点“立即启动”,
UN9]IDI`M```{RZQ)2]}583

启动Ps后关闭,并关闭要求登陆的窗口,重新打开Ps,在登录窗口选择“连接Internet时是否出现问题?”,
XN8ATWFBB_L[HDQMA)JNW(U

选“脱机激活”,并“生成请求代码”,
W(@5VBR_(B(8~35N_O7)3Q2

生成请求代码后,检查序列号生成工具中的产品选项,并保证序列号是刚才输入的序列号,
将请求代码粘贴到序列号下面的文本框,点击左侧按钮生成响应代码,粘入激活窗口,
GQ3DP$}I2~9BASMU_7180VT

Ps安装激活完成。

6、运行Lr安装程序

忽略重启检测,选择“安装”,
OJ809JUNNV[}6WHX6R8G3]7

选择右下角的“登陆”,然后选择“稍后连接”,接受许可协议,进入序列号输入界面,
打开序列号生成工具,先选择产品,确认选择正确后点击左边按钮,生成序列号,不要关闭生成工具,或把序列号存在一个文件里
F5AK{KEW7)5TWT9OGU2RGXO

输入序列号后点“下一步”,点“稍后连接”,选择安装目录,并安装,安装完成后点“立即启动”,
启动Lr后关闭,并关闭要求登陆的窗口,重新打开Lr,在登录窗口选择“连接Internet时是否出现问题?”,
选“脱机激活”,并“生成请求代码”,生成请求代码后,检查序列号生成工具中的产品选项,并保证序列号是刚才输入的序列号,
将请求代码粘贴到序列号下面的文本框,点击左侧按钮生成响应代码,粘入激活窗口,
HZD5R%TGC~]JPLQE)G)A{(9

Lr安装激活完成。

7、在host中加入以下记录

127.0.0.1 lmlicenses.wip4.adobe.com
127.0.0.1 lm.licenses.adobe.com
127.0.0.1 na1r.services.adobe.com
127.0.0.1 hlrcv.stage.adobe.com
127.0.0.1 practivate.adobe.com
127.0.0.1 activate.adobe.com

8、联网重启

「记录」树莓派raspbian-stretch系统安装LNMP环境 & 解决无法安装php5-mysql的问题

为了能让实验室的路由器一直保持登陆状态,但又不想使用非官方固件,因为非官方固件都不够稳定,所以买了一个树莓派 zero-w。
本着新硬件就要用新系统的想法,刷了官方才出了不到一个月的系统:2017-09-07-raspbian-stretch,然后在安装LNMP环境的过程中遇到很多奇怪的问题,在这里记录一下。

先插一个zero-w的网络配置过程,虽然不是什么大问题,但是着实坑了我很久。
正常刷好系统后,用电脑在/boot分区的根目录创建名为“wpa_supplicant.conf”的文本文件,内容为:

注意:WiFi名称不能包含“_”,就是下划线,因为有些情况下下划线和空格会混淆。WiFi加密模式只能为“WPA-PSK [TKIP]”,因为wpa不支持AES加密。
然后在/boot分区的根目录创建名为“ssh”的空目录,这样就会自动打开ssh服务。

配置好网络后,开始换源。

阿里云
Raspbian http://mirrors.aliyun.com/raspbian/raspbian/

清华大学
Raspbian http://mirrors.tuna.tsinghua.edu.cn/raspbian/raspbian/

文件内容如下:

保存

配置LNMP环境

先上干货:

如果直接按照通常步骤直接安装php5-mysql,会提示如下错误:

为了解决这个问题,我参考了「libmysqlclient18 has no installation candidate」。
尝试手动下载并安装packages.debian.org提供的libmysqlclient18包,libmysqlclient18_5.5.57-0+deb8u1_armhf.deb,文件sha1:16237a52a6c3b945c30a8fdf401816277d7f2436。
手动安装libmysqlclient18后,可以成功安装php5-mysql。但是apt-get在安装完,重启php5-fpm的时候会出现以下错误:

尝试多次后,我发现之前参考的讨论里有人说使用archive.raspbian.org官方的libmysqlclient18包,于是进行尝试,并获得成功。
包下载地址:libmysqlclient18,sha1:a5f6877e856a58efbf9046f8db752646895b137b。

「记录」解决Ubuntu 16.04无法安装php5的问题

在Ubuntu 16.04 中默认无法安装php5,只能安装php7,直接用如下命令

会提示

按照这个文章中给出的解决方法,执行以下指令

「记录」UITableView运行时动态改变行高

在cell中加入一个可以改变cell高度的button,就是下面这种效果

1025465-d0c0d390136803e8

核心代码:

在Cell.h中添加tableview更新块属性:

button的点击事件:

在TableViewController的- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 方法中添加:

参考资料:http://www.jianshu.com/p/e86f1989b1d6

通过基于ipv6的shadowsocks服务绕过校内ip网络限速

之前校内网一直没有限速,搭配千兆内网用着超级爽,下载就算跑不满千兆也能有20-30Mbps的水平。

但是因为最近校内无线网硬件升级,流量暴增,学校对校内网的每一个ip做了总入口流量限制,限速5Mbps!也就意味着每一个校内ip,只要是校外获取的流量,就会被限速。虽然没有限制校内流量的网速,但是校内的ftp资源站因为一些技术原因暂时不能用,而且校内ftp资源站也没有什么我喜欢的资源。因此,这个新的限速机制让经常需要下载美剧和电影的我十分恼火。

为了能随时有最新的剧看,也为了加速校内下载速度,就在自己的下载机安装了磁力分流软件。使用过程中我希望限制分流软件ipv4的上传速度,只对接入教育v6的用户做分流,在寻找限速软件的过程中,我意外的发现了这个文章「使用shadowsocks,搭建ipv6 VPN,让ipv4上ipv6,下载速度提升到100M」,于是欣喜的进行了配置,并成功绕过了限速!

把配置过程整理一下,分享出来。

首先我已经有了带公网ipv6地址的DO服务器,且这个服务器已经配置过基于ipv4的shadowsocks服务,我的这篇博文有介绍过「在ubuntu server上安装配置shadowsocks服务」,就不再重复了。

1、测试ipv6网络环境,在本地ping服务器的ipv6地址,保证本地到服务器的ipv6网络通畅。

2、更改服务器shadowsocks配置文件”/etc/shadowsocks.json”,内容为:

重点是这行

改成这样服务器的shadowsocks服务就同时支持ipv4和ipv6了,改好后重启shadowsocks服务。

3、更改本地shadowsocks客户端的服务器配置,在ip栏填入服务器的ipv6地址,测试连接是否正常。

迅雷加速:

保证shadowsocks客户端的本地端口正常

在迅雷的“系统设置-高级设置-代理设置”中添加本地代理

代理名称随便填,服务器填写127.0.0.1,端口填写shadowsocks客户端本地端口,类型选择Socks5;然后点击测试,测试成功点击确定。

我的DO服务器是新加坡节点的,实测把迅雷全部流量都走代理一切正常,效果如下。

K9C)9}4W$QSRV%`YW0}ZRGV

在ubuntu server上安装配置shadowsocks服务

新建配置文件/etc/shadowsocks.json,内容为:

server, server_port, password 需要自行根据自己的实际情况修改。

把这条命令放到这个文件下:/etc/rc.local,这样就能开机自动运行了。

「记录」Win10磁盘占用100%无响应导致系统卡死的解决过程

之前内置的硬盘里有个120g的小固态留着没分区,想着以后可以折腾双系统什么的。昨天突然想用,却发现怎么也没法格式化,格式化一半就无响应了。因为曾经在这个固态上装过一次系统,一切正常,所以觉得很奇怪。怀疑是不是主板接口问题(之前有块三星固态就是用着用着就无响应,怀疑过,但是那个三星固态放到移动硬盘盒子里毛病照旧,所以排除了主板和接口问题),就换了一个接口,发现问题依旧。然后就怀疑是不是硬盘坏了,但是基本没用过怎么会坏呢,先拆出来接硬盘盒看看。在经过复杂的拆机后,放在硬盘盒子里接在surface上格式化,非常顺利,没有任何问题。诶,这就奇葩了,莫非真是主板问题?接口换过了还是有问题,那就说明几个SATA接口都有问题,南桥有问题么,那为啥别的硬盘都正常?重新装回去,然后顺便换了一下硬盘的顺序,接在一个之前接别的硬盘的接口上,进入系统发现问题解决了,格式化正常,重新删掉分区新建并格式化也正常,我以为问题自己解决了,然而我往硬盘里装虚拟机的时候,又无响应!然后用ssd测速软件测速,也是无响应。

总结一下表现的问题就是:硬盘在进行资源密集操作的时候,磁盘活动时间占用100%,传输速率下降为0,极少情况程序报“I/O错误”,大部分情况程序无响应,操作系统正常,但无法完全关机。

我不愿相信是自己主板有问题,因为毕竟有些硬盘用的好好的,而且技嘉大厂主板很少有问题,于是网上搜索相关问题。大部分类似情况都是因为微软自带的安全扫面,或者系统策略设置导致的,也有说是Win8.1系统自己的原因,Win7就没问题。我认为这些都不能解释和解决我遇到的问题,于是继续找,终于找到一个我认为比较靠谱的文章:【教程】完美解决windows10磁盘占用100%并出现卡顿、假死现

楼主在进行磁盘扫描的时候,win10有大量超时坏道,win8pe就没有问题,这正好对应我电脑上硬盘时好时坏,且换个电脑就没有问题的表现。最后楼主发现win10自带的驱动是06年的驱动①!我立刻想到自从用win8.1以来,我从来没有专门安装过主板的驱动,甚至连显卡驱动都让系统自动下载安装,新电脑也一样没有安装技嘉附带的光盘上的驱动!我立即用光盘重新安装全部驱动,再次尝试用测速软件测试,硬盘活动时间占用100%时,传输速率不再下降为0,程序运行正常,问题解决。

因此,整个问题都是因为win10自动选择的驱动导致的。我回忆之前微软曾经把自动识别并安装驱动作为win8.1的一个特性进行宣传,且win10也强调内置了通用驱动,而现实是残酷的,自动识别的驱动是有缺陷的,这不但导致用户不能正常使用,甚至增加了用户解决问题的复杂程度!

①:为何很多驱动程序日期都是2006年6月21日?  cnbeta的这篇文章解释了为何微软内置驱动都是06年的,但是实际情况是我在安装了厂商的专用驱动后,问题得到了解决,事实证明就算微软会更新自己的驱动,也不能因此不安装厂商的专用驱动!

python中的’ascii’ codec can’t decode byte 0xe9 in position 9: ordinal not in range(128)问题

在用python2.7写win上的Bing壁纸下载器时遇到如下报错:

解决方法是在文件中加入:

参考:python 处理中文时出现的错误’ascii’ codec can’t decode byte 0xe9 in position 0: ordinal not in range(128)” 解决方法