「记录」群晖DSM7 SSO客户端对接Authing服务

为了方便老师登陆各种院内系统,跟学院申请购买了Authing的统一身份认证服务。其他购买的系统都可以让开发方对接,唯一麻烦的就是群晖的DSM,只能自己来了。

最终目标是想实现每一个用户,网页登陆群晖(及任何一个学院购买的系统)的时候直接微信扫码登陆,无需输入用户名密码。群晖相较于其他系统还有一个不同点,就是SMB服务必须输入用户名密码,所以要么从Authing直接获取带密码的用户信息,要么就得让从Authing登陆的用户能自己改密码。

关于群晖DSM的SSO客户端功能的资料非常少,群晖官方也是几句就把用户打发了,而且群晖公司从销售到技术都透着一股傲然于世的气息(虽然我打心眼里觉得他家NAS做的确实很好,但这种自以为已经能拳打EMC、脚踩HPE的态度实在让人想踩死他)。找遍全网只找到这篇资料比较靠谱,而且这篇资料的最终目标和我出奇的匹配,甚至我怀疑他也是和Authing对接。鉴于现在的局域网环境,我还是把原文截图转发过来。

参考资料

虽然上面的资料和我的目标几乎完全相同,但这篇文章并没有详细描述所有在操作过程中可能遇到的坑,因此我觉得有必要记录一下我的踩坑过程。

1、群晖DSM7不支持用从SSO服务器获取的用户信息自动注册本地用户

这也是上述资料第一段所说的。详细解释就是:一个在Authing里设置好的用户,在登陆DSM之后,DSM并不会为这个用户自动创建一个本地用户,更不要提把这个本地用户和Authing的用户进行关联。这会导致一系列的麻烦,比如这个用户怎么设置DSM里共享文件夹的访问权限、这个用户怎么使用SMB服务等,这些问题很容易被忽略但又很致命(我一开始就没注意资料里第一段写了啥,都弄完才发现很重要)。

解决方法:先把DSM加入Authing的LDAP域,让DSM获取到Authing里配置好的用户、群组等信息,然后同时启用SSO客户端,并用一个唯一值进行用户关联。

2、群晖DSM本地用户和域用户冲突

当DSM本地和Authing用户池里同时有一个用户名为“张三”的用户时,会发生冲突。“张三”用户使用SSO方式进行登陆时,DSM会提示用户名密码错误。具体原因大约只有群晖工程师能解释,但我猜测是DSM没有将域用户和本地用户进行区分,导致用SSO登陆的重名用户匹配到本地用户鉴权信息上,最后鉴权失败。

解决方法:保证用户池里所有的用户名都不会出现在本地用户里。

3、配置DSM的LDAP客户端

服务器信息
LDAP信息
自定义配置文件
检测

配置LDAP客户端的最后一步是检测,会提示“不支持Samba架构”。这是由于Authing的LDAP实现问题,必须开启DSM的“启用 GIFS 明文密码验证”功能,才能通过检测。此处建议不开启,因为开启之后有安全风险。所以点详情,然后跳过。

不启用GIFS 明文密码验证

之后还会提示另一个问题,同样方式处理,跳过。最后完成所有检测之后,点击确定。

4、在Authing添加自定义应用

添加自定义应用

往下找到认证配置,修改登陆回调地址!然后再点击其他配置!

【注意】在其他配置中只修改id_token签名算法!!!其余保持不变!完成后保存

5、配置DSM的SSO客户端

到此,就完成了所有操作,可以尝试使用Authing登陆DSM了!

考研数学复习心得

本文写于17年春。当时应薛威老师邀请分享考研数学复习的心得,现在碰巧又有同学要考研,把当年的原文发布出来,希望能帮到有缘人。

大概是因为我数学考了129,看着还蛮高的(其实是今年简单,而且有几分丢的特别冤),薛老师说让我分享一下自己的复习心得,我就主要说说数学吧,政治和英语着实算不上考得好,专业课大家都不一样,而且重在大一大二的积累,就不说了。

本来我是不准备考研的,一直到16年3月都没这个想法,4月有一个老师建议我考研,我才开始考虑,真正着手准备已经是6月底了。这时候已经算是比较晚了,我分析了一下自己的情况。政治大家都差不多,不会拉开很大的分数。英语是我的弱势,完全不抱希望,过线就是一切目的,英语落下的分得用别的科目补。专业课我大一大二学的很好,这个应该是比较容易的,但是这科有一定的变数。最重要的是数学,从中学开始数学就是给我提分的科目,初试想要确保总分有竞争力就得靠数学,同时数学是150分,分值占比大,容易拉开差距。但是因为已经将近2年没做过数学了,所以学起来很吃力,我一开始看张宇的网课,有点跟不上,而且效率很低,所以就报了新东方的直通车。报直通车我的想法是,因为是一直上课到考前,我就不用考虑时间安排的事情了。身边提前开始的同学很早就规划了一轮二轮三轮复习计划,我一直不擅长做学习规划,开始的又晚,让老师做规划自然是最好的选择。

7月份开始上课,一直到8月,印象最深的就是抄了大量的笔记,我是没有记笔记的习惯的,因为脑子和手不能同时工作,记笔记的话会跟不上。但是薛老师上课完全是手写板书,和发的讲义有很大的不同,只能自己记,跟不上的话就只好下课补。每次我会把薛老师的手写板书拿到学校扫描,然后用半天时间整理消化。后来我发现记录+整理+消化笔记让我对数学的整体性有了很好的把握,而且加深了概念定义的理解。所以我建议大家一定要记笔记,就算一开始不适应也没关系,都会有一个过程,记笔记不要耽误上课,可以用活页纸+留空白+课后补的方式,一个点没记上就先听下一个,千万不要一个没跟上导致后面全跟不上。如果你听课总是跟不上就可能需要考虑换个班。

另外一个点就是薛老师一直在强调的题目一定要做三遍,虽然我只做了一遍多(因为时间真的不够用…)。但是我体会到了为什么要把题目做多遍,因为我在做某些题目第二遍的时候发现第一遍会的第二遍可能不会,而且第二遍可能是从不同角度寻找到正确的解题方法的。同时,在前期练好计算基础,到后期就会提升很快,如果急于做后面的综合题,把基础丢了,反而有可能在考场上吃大亏。所以如果有时间,不用去刷新题、刷难题,刷第二遍练习题是非常正确的选择。

我非常喜欢薛老师的课的一大原因是薛老师做题从来都是现做的,这样有一个非常大的好处就是我能看到一个问题是如何被解决的,有很多数学问题最难的地方不在于它的解决方法,而是在于如何找到解决方法。

到了9月,数学需要讲解的部分就陆续结束了,数二是在9月上旬,数一在中下旬。这时候我还没刷完练习题,数学真的是师傅领进门修行在个人,老师最多就是教会你如何做,而真正做的好与坏,还在自己的练习。在这个阶段,课已经不重要了,重要在保证自己的有大量的时间做练习,时刻和老师保持沟通,告诉老师自己练习的方式和状态,保证自己走在正确的练习道路上就行。

10月初我开始做真题,薛老师要求尽快进入模拟状态,就是用真实考试的答题纸,按真实考试的时间控制速度,每次都进行一场模拟。大量的模拟可以让自己适应考试时候紧张的状态。我听从了薛老师的建议,印了20套答题卡,最后全用完了,加上从课上拿的答题卡,大概做了20多套,到最后我形成了一种感觉,大概在什么时间能做到什么位置,是快了还是慢了,答题卡什么位置的题目难易度是多少,大概会是什么题型。事实证明这是很重要的,我一个朋友就是没有进行大量模拟,在考场上紧张,写错了答案位置,后来想改却没地方了。在考场上什么情况都有可能出现,千万别觉得老师说的一些案例很可笑,就觉得不会发生在自己身上,有很多科学研究表明人在极度紧张的状态下是不能进行有效思考的,机械记忆比灵活思考要可靠的多。

真题一定要按照薛老师说的做3遍,只有做到第三遍才能把整套卷子烂熟于心。做一遍会的题目可能是当时刚好有灵感,不一定是真正融会贯通,第二遍有问题的题目和第一遍有可能是不一样的。把两次做的有问题的题目记下来,错一次的要思考自己为什么一次思路正确,一次思路错误,两次区别在哪里,两次都错的就说明这类题可能都有漏洞,需要专门突破。第三次把前两次有问题的题目再仔细做一遍,千万不要觉得有思路就可以,有思路和能做出来还差的很多,前两次都做对的题目,第三次会很顺,因为答案真的快背下来了。我想如果真的按照薛老师要求的10年做三遍,30年都刷完,那你想考低分还真是挺难的。

我把数二近10年的真题做了3遍,15年的做了两遍,还有一开始做的7套数一。大量的真题模拟让我有充分的感觉(请原谅我语言的匮乏)。考前半个月,做最后几套真题的时候我已经完全形成了一种定式,每次都差的不多,选填错的多,大题就错的少,选填做的顺,大题就总会遇到点问题。这种感觉在考场上救了我一把,我做模拟一般要50-60min做选填,比薛老师要求的时间长一点,从来没短过,考场上我30min做完了选填,就感觉不太对劲。按照模拟的情况,我后面大题一定会遇上麻烦,但是我巧妙的避开了难题,也做的很顺。所以最后剩20min时,我没有选择继续做剩的两个第二问,强烈的预感让我把前面检查了一遍。检查结果是选填果然做得一塌糊涂,第一题非常简单的一个等价无穷小居然把正负号弄错了。

薛老师的复习宗旨之一是提升计算能力,我考完之后回忆了一下自己的感觉,认为这是非常正确的。我做大题一路做的都还比较顺,没遇到什么计算上的阻碍,这极大地提升了我的自信,也为我最后留出时间检查前面的选择填空做了贡献。计算能力足够强,一方面不会因为计算卡壳耽误时间,另一方面也不会受到状态影响把会做的做错,这比需要动脑子思考的技巧要可靠的多。 考研数学,真的就如薛老师说的那样,是在考察一个功夫。考察你在考研数学上下了多少功夫,用了多少力,你用了足够多的力,就能考出足够好的成绩。

「记录」使用PCI设备直通技术在vSphere中部署基于Ubuntu Server 1804的GPU服务器

大约在两年前我撰写了一篇文章记录我为实验室部署GPU云的核心过程。现在给学院部署GPU云,本以为可以照着原来的文章很顺利就可以装完,结果却搞得心态爆炸,一度怀疑人生,所以很有必要再写一篇记录一下。

环境:

实体机:曙光 天阔 W780-G20
操作系统: VMware ESXi, 6.7.0, 14320388
管理平台: VMware vCenter Server Appliance, 6.7.0, 15129973
GPU:NVIDIA GP100GL [Tesla P100 PCIe 16GB] ×8

先简单说一下部署环境和上次的区别:第一是平台不再是商业大厂DELL EMC,很多文档资料缺失;第二是底层esxi和管理平台vcenter都升级到了6.7;第三是虚拟机准备安装Ubuntu Server 1804,之前的16在21年来看有点过老。最关键的是第四点:显卡质量和数量都上了一个巨大台阶,原来单台机器最多3卡(一个泰坦X,两个泰坦XP),遇到的显存最大的卡应该就是p40。当时在安装p40的时候就遇到奇怪的问题,为此还写了一篇记录文章。这次遇到的核心问题和p40那次应该是同一个,都是高级显卡显存过大,需要一些特定的底层配置参数,vmware专门有博客文章(下简称博文)进行了介绍,但是我一开始寻找解决方案的方向有很大偏差,绕了一大圈才找到。

让我一度怀疑人生的核心问题

0. 准备工作

0.1. 主机BIOS设置

根据博文内容,需要在运行虚拟GPU服务器的esxi主机的BIOS设置中查找并开启类似这样的选项:“above 4G decoding”、“memory mapped I/O above 4GB”、“PCI 64-bit resource handing above 4G”

启用BISO中的相关设定

0.2. 配置PCI设备直通

在esxi主机中配置好显卡的设备直通

0.3. 上传系统安装镜像

将ubuntu server 1804安装镜像上传到主机数据存储

1. 创建虚拟机

⚠️注意:必须在vsphere client中创建虚拟机,不可以在本地workstation创建虚拟机安装后再上传

首先按照常规方法创建虚拟机,创建后不要启动!按以下步骤进行预先配置。

1.1. 设置虚拟机引导方式为EFI

为虚拟机的“引导选项”中启用EFI

在虚拟机页面,“操作”→“编辑设置”→“虚拟机选项”→“引导选项”→“固件”,选择“EFI”。

1.2. 设置虚拟机高级配置参数

虚拟机选项中的高级选项卡

在刚才1.1的“引导选项”下方找到“高级”,点击“配置参数”右侧的“编辑配置”,进入高级参数配置窗口。

高级参数配置窗口

在窗口中点击“添加配置参数”,然后添加2条

⚠️注意:“pciPassthru.64bitMMIOSizeGB”条目的值需要根据虚拟机具体直通的显卡型号和数量进行计算后得出!

博文中提供了一种简单估算方法:GPU个数 × 一块GPU的显存大小(GB为单位),然后将结果向上取整到下一个2的整数次幂。

例如,要给这个虚拟机直通两个p100显卡,则值应为:2 × 16 = 32,向上取整到下一个2的整数次幂,得到64。但如果是直通v100显卡,64则只能直通一块,因为v100单卡显存就是32G,想要直通两块就需要改为128。

⚠️注意:与通常情况不同的是不可以添加“hypervisor.cpuid.v0 = FALSE”参数!

1.3. 修改虚拟机兼容性

选择升级虚拟机兼容性

在虚拟机页面,“操作”→“兼容性”→“升级虚拟机兼容性”,打开“配置虚拟机兼容性窗口”。

配置虚拟机兼容性窗口

将虚拟机兼容性改为:ESXi 6.7 Update 2 及更高版本

2. 安装操作系统

现在可以进行第一次开机,并按照提示安装操作系统。安装后,顺便进行基本的系统配置,例如换源、配置网络、软件包升级等。

3. 为虚拟机添加显卡直通

3.1. 启用内存预留

启用内存预留

在虚拟机页面,“操作”→“编辑设置”→“虚拟硬件”→“内存”,勾选“预留所有客户机内存(全部锁定)”。

3.2. 添加显卡设备

添加显卡设备

在虚拟机页面,“操作”→“编辑设置”→“虚拟硬件”→“添加新设备”→“PCI 设备”,然后在PCI设备选项中选择需要添加的显卡。

4. 安装NVIDIA驱动和CUDA

4.1. 检查GPU

4.2. 禁用nouveau

4.3. 安装依赖包

4.4. 安装NVIDIA驱动

默认已经下载好驱动文件

4.5. 安装CUDA

「记录」解决Ubuntu Server 18.04因Intel微码修复无法启动问题

最近在重建学院GPU云,使用原来实验室云的双层虚拟化架构。原来实验室云使用的是基于ubuntu16的GPU服务器,21年再使用16版本就有点老了,准备换成ubuntu18,但是遇到一个奇怪的问题,在此记录一下。

问题的表现形式如下:

环境:

实体机:曙光 天阔 W780-G20
操作系统: VMware ESXi, 6.7.0, 14320388
管理平台: VMware vCenter Server Appliance, 6.7.0, 15129973
虚拟机兼容性: ESXi 6.7 Update 2
虚拟机高级配置附加参数:
hypervisor.cpuid.v0 = FALSE
pciPassthru.use64bitMMIO = TRUE
虚拟机操作系统版本:Ubuntu Server 18.04.5 LTS
截止2021年1月20日,已更新所有最新包

当虚拟机CPU只给一个核心的时候,一切正常。当给2个或者更多核心的时候会出现无法启动的问题,显示如下:

虚拟机无法启动的控制台输出

经过排查发现问题触发的原因有两个:①虚拟机高级配置参数 hypervisor.cpuid.v0 = FALSE;②有2个或更多CPU核心

通过搜索找到两篇类似问题的文章:ESXi 6.7 ubuntu GPU直连踩坑记VMware ESXi 6.7.0 update2 使用 GPU Passthrough 模式的坑。第一篇文章是通过更新esxi解决的,但是第一篇文章里更新后的esxi版本与我现在使用的是同一版本,所以解决方法对我不适用。第二篇文章将问题的根源指向了intel的漏洞修补微码软件包“intel-microcode”。

通过测试发现,无法启动的核心问题就是由“intel-microcode”导致的,该软件包是intel为了修补幽灵、熔断漏洞的补丁,应该是在启动之前执行某种防护操作。我测试时首先尝试卸载该软件包,并同时卸载依赖包,结果导致部分核心包被卸载,无法启动。之后测试只卸载该软件包,不卸载依赖,结果问题解决,确定问题核心就是该软件包导致。

为了解决问题,我首先想到的是在安装vsphere过程中被提示可能受intel的漏洞影响,所以我考虑可能是虚拟化平台的宿主机没有进行漏洞修补,而ubuntu虚拟机进行了漏洞修补,出现兼容性问题。为此我查阅了vsphere的文档,确定默认状态下vsphere6.7确实是不启用漏洞修补程序的。同时,我也发现启动修补程序会导致严重的性能损失,不适合我现在的场景。

之后,我考虑既然虚拟化平台没有进行漏洞修补,那关掉ubuntu虚拟机的漏洞修补应该可以解决问题。于是我阅读了第二篇文章中提到的讨论:Intel-microcode package upgrade in ubuntu 18.04 leads to unbootable system。根据这个讨论,可以通过更改grub参数的方式禁用微码修补,但是尝试了讨论中的解决方案和关联的解决方案,发现并没有效果。最终,我决定按照讨论中的最终解决方案,更换旧版本的二进制软件包。

解决方案:

RouterOS配置教育网IPv6直通

  前几天终于下定决心升级了自己的网络设备,一方面已经种草很久了,另外一方面实验室的网络也需要进一步优化,先用自己的设备进行学习和实践可以省很多乱七八糟的问题(恩,一定是在给自己花钱找借口……)。

  这次升级了两个设备,其中之一就是MikroTik公司的高性能路由器RB4011iGS+RM,据说是刚发布一年,性能看参数似乎不错,但玩路由器玩的实在有限,既无法给出感性的区别,也不会进行详细的性能试验。那为什么选择这个路由器而不是更便宜的款式呢?我主要是看上了他多达10个网口以及最关键的万兆光口。由于内置的是官方的RouterOS,每一个网口都是一个全功能独立网卡,对于以后进行双栈甚至多栈非常有用(同时拉3根不同运营商的宽带进来,想想都刺激,钱嘛,你说什么?)。同时,万兆光口对于以后万兆内网的构建非常有用,对于这种网络设备基本计划寿命都在十年以上,所以有一些性能预留还是很有必要的。

  说了这么多废话下面进入正题,在配置完基本网络之后,开始准备配置教育网重要特色IPv6,这时我遇到非常诡异的问题。首先就是无法获取到v6地址,我几乎尝试了网上能找到的所有教程提供的方法,试了ROS中v6设置所有的可选项,但是路由器还是无法成功获取到v6地址或v6地址池。一般情况下教育网v6在我所在学校里是可以自动获取到的,但具体的分发方法我到现在也没搞清楚,虽然我自学了一些v6网络的知识,但是网络中心给的信息非wan常quan有mei限you,所以要高明白可能需要从校园网抓包分析,不到万不得已我肯定不会这么做。除了尝试让ROS获取v6地址,我还尝试了直接中继DHCPv6,虽然网上很多资料都说不可以这样操作,结果呢肯定是不行。

  在经过了一天的折腾以后,我开始扩大资料查找范围,我逐渐发现ROS的v6是有缺陷的。具体的资料我没保存,因为可信度都多少有缺陷,大概意思就是教育网的v6的某些特性,在ROS中没有得到支持;同时,ROS内的v6在地址获取和DHCPv6中继的功能中存在bug。所以,结论就是ROS现阶段(v6.44)无法按正常方式使用教育网v6.

  但是我显然不甘心这样,同时ROS强大的自由度怎么会导致连这么个问题都解决不了呢,一定有别的方法可以绕过这些问题。下面给出我最后的解决方法:

1、 首先创建一个wan网桥,也可以理解为创建一个路由器的前置交换机。这个wan桥,包括原来的wan口,还要有一个闲置网口,作为v6流量专用网口。

2、 修复防火墙里原有的nat设置。在完成第一步之后,会发现原有的v4网络不正常,这是因为原有的nat地址转换配置的出口网卡原来绑定的wan口被新建的wan桥连接,只需要将原来nat策略中的出口网卡改为新的wan桥即可。

3、 阻断所有非v6流量。

在桥的过滤器设置中,添加两条规则,禁止v6流量专用网卡上的非v6流量。

经过实践发现在桥上禁止流量并不好用,不知道是什么原因,可能我的配置有问题。最终解决方案是在下级的网管交换机上配置安全规则。

4、 最后用网线将v6流量专用接口和内网交换机连接起来。这样内网的所有设备应该都可以直接获取到教育网的v6终端地址了。

  这个解决方案的原理其实很简单,就是ROS的v6路由不是有问题无法正常工作么,那么我们能不能直接让教育网v6跨过ROS的路由,创造一个单独的v6交换机,把v6流量接到内网。通过上面的操作,相当于所有的设备在v4层面上都通过ROS的路由连接校园网,v6层面上则直接通过交换机连接到校园网。

[记录]配置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.

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

经济学原理——给你经济学家的眼睛


经济学原理(第7版):微观经济学分册+宏观经济学分册
  • 书名:经济学原理(第7版):微观经济学分册+宏观经济学分册
  • 作者:曼昆 (N.Gregory Mankiw)
  • 出版社:北京大学出版社
  • 译者:梁小民 / 梁砾
  • ISBN:9789900161998
  • 豆瓣评分:9.6
  • 看客评分:4(很好)
  • 推荐指数:5(力荐)

  今天我开始阅读曼昆的经济学原理微观经济学分册,在读完第一章之后,我被这本书深深的吸引了,虽然我仅仅读了一个开头,但还是觉得有必要做一下推荐。

推荐理由:

  曼昆在前言中说的很清晰,学习经济不一定是为了去做经济学研究、经商或是制定经济决策,更多的在于他可以给你提供一种经济学家的视角去观察事物。这或许不会为你直接带来什么好处,既不能提高你工作效率(比如在更短的时间内写更优秀的代码),也不能为你带来更高的经济利益(读这本书不会让你成为巴菲特,可以在股市中占尽风头)。但是经济学知识可以在你未来的生活、学习、工作中,让你更好的、更加全面的去分析判断,以便于你可以做出更适合自己的决策。

经济学原理前言,获取自京东产品详情

ifLab回忆录——后门生

  第一篇先说说我是怎么进的社团吧。

  每年健翔桥这边的社团招新,说实话挺让人烦的,跟现在社会上浮夸之风类似,看似有序,实则混乱,看似百花齐放,实则败絮其中。当然这种说法不一定贴切,但大概就是大一小鲜肉看啥都新鲜,任社团宰割,到大二或者更以后,感受也就只剩下反感了。

  当年作为小鲜肉的我,看到这万花筒似得社团招新,不得不说也是有点茫然无措,只能雾里看花。作为对学生会的敬仰,同时对手机摄影比较有兴趣(请原谅我当年对摄影的无知),就报了校学生会和院学生会的宣传部。当时年少无知的我还用心的准备了PPT,好像是在PPT里面,我加入了之前玩无人机的一些照片。我确实记不清是不是因为这个,还是因为别的什么原因,校会的一个面试官(记不清是宣传部部长还是文艺部部长了)就把我推荐给了信息技术部的部长。于是我就阴差阳错的遇到了喆神,并顺利的通过了校会信技部的“面试”。

  到此,我才刚刚跟ifLab沾上一点边,因为喆神不但是校会信技部部长,还是ifLab里iOS组的组长。至于说那ifLab招新的时候我有没有关注到这个社团呢,我可以很负责的说,我确实看到了这个社团,但是已经被万花筒搞的晕头转向之后,我并没有关注到这个社团,因为它在招新中的存在感太低了。其次我也根本没搞明白ifLab是什么意思。所以我也就根本没有在意,自然更谈不上报名和面试的事,更不要提加入了。

  但是故事是不可能就此终结的,在和喆神深入交流了无人机相关内容后,我们又继续对iOS编程等话题展开讨论。由于我当时痴迷于苹果公司和乔布斯,非常想跳入iOS开发的大坑。最重要的是:因为喆神既是校会部长又是ifLab组长,于是ifLab就有了一个独特的“校会组”!而我,就成为了校会组的一员,走后门加入了ifLab。

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

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

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

1、 显卡直通

1.1、 添加显卡直通

勾选“预留所有客户机内存(全部锁定)”,并添加显卡PCI设备,确定修改。不在第一步直通显卡的话,之后的驱动安装可能有问题!

1.2、 修改虚拟机硬件配置参数

切换到“虚拟机硬件”选项卡。展开“高级”,修改“配置参数”。 在打开的“配置参数”对话框中,点击“添加配置参数”,填入“
hypervisor.cpuid.v0 = FALSE”
,确定修改。完成后务必再次进入“配置参数”,检查参数确实已经添加并保存!

1.3、 启动虚拟机并配置基本环境

配置网络、换源、更新软件包等

完成基本配置后建议对虚拟机生成快照!

2、 安装显卡驱动

2.1、 下载驱动

可以在 NVIDIA驱动下载 或者 Geforce显卡驱动下载 页面搜索并下载需要的驱动程序,也可以通过直接拼接资源链接:
http://cn.download.nvidia.com/XFree86/Linux-x86_64/[驱动版本号]/NVIDIA-Linux-x86_64-[驱动版本号].run,进行下载。比如我要下载430.14版本号的Linux驱动,可以直接在服务器运行以下代码:

2.2、 检查GPU

应该显示相应的PCI设备

2.3、 禁用nouveau

2.3、 安装显卡驱动

安装完驱动建议对虚拟机生成快照!

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

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

2020年6月28日补充

2.4、安装CUDA

本处使用的CUDA安装文件是文章在19年6月初次完成时下载的,因此安装方法也是当时的安装方法。根据从英伟达官网的CUDA安装文档来看,最新的推荐安装方式似乎变成了用apt包管理器安装。但是根据最新的安装文档,我在操作过程中出现了两个问题:首先是所有的下载资源(包括软件源证书和软件包)都无法在中国大陆正常下载;另一个是安装后server系统会出现GUI界面。因此,我决定使用去年的安装包和安装方法。

安装完CUDA建议对虚拟机生成快照!

3、 安装Docker

3.1、 安装Docker

根据清华开源镜像站的帮助文档,安装Docker。

3.2、 安装nvidia-docker

安装并配置好docker建议对虚拟机生成快照!

4、 配置TLS远程管理,及Portainer接入

配置TLS远程管理是在Docker服务器(运行docker守护进程的服务器)进行配置,因此下面的$HOSTDocker服务器的IP

4.1、 修改openssl配置的CA部分

ubuntu 16.04 下 openssl 配置文件位置:/usr/lib/ssl/openssl.cnf,其他系统可参考

4.2、 生成私钥并自签证书

4.3、 颁发证书

4.4、 配置Docker使用TLS认证

4.5、 Portainer接入

如果已经添加过服务器,只更新TLS认证配置,则只需要上传相应证书:

/etc/docker/ssl/目录内的cert.pemkey.pem文件拷贝到本地,上传至Portainer。

上传证书

如果是新服务器,按照下面步骤进行添加:

配置好TLS远程管理后建议对虚拟机生成快照!

参考资料

docker 配置 TLS 认证开启远程访问

Docker 守护进程+远程连接+安全访问+启动冲突解决办法 (完整收藏版)

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

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

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

参考:visual studio code disable auto wrap long line

ifLab回忆录——序

  去年底曾老师邀请我写一些关于社团的文章,不仅可以作为社团存档,也算是经验分享和传承。我觉得既然要写,那就好好写一些,这样也可以给自己逝去的青葱岁月留下一些印记。

  我一直语文很差,文笔不行,也一直没兴趣增加这方面的技能点,所以这个系列大概怎么写、具体写那些、总共写多少,我完全没有概念。所以,我大约是要开新坑了,说起来我已经开过两个坑了,一个游记坑,一个书记坑,不多不多,加上这个才3个。(话说这篇都拖了好久。。。)

我只能说尽量吧,尽量做到一周一更,尽量不拖太久,尽量把这个坑填完。前面说了我文笔不行,所以还请各位多担待,要是我写的像流水账,或者前言不搭后语,或者排序混乱,请不要太介意,各位就当看茶余饭后看故事了。

  作为开篇,我就说说我大致会怎么写这些回忆录。我觉得一个很好的比喻是哈利波特里的冥想盆。我会把我所有关于ifLab的记忆都提取出来,不管是有趣的还是乏味的,都把他们放在回忆录里,大家可以随时查看。这些记忆会以一个一个小片段的形式来呈现,大体上是按照时间的先后顺序。但是这也不一定,也可能因为某个事情更有趣,或是因为某个事情更重要,又或是在某件事说到一半的时候需要解释一个前因而引出另一段往事,这都是有可能的。有些时候,记忆是残破的,也有时候记忆是经过修补的,甚至是艺术加工的,这都是正常情况,还请不要太较真。语言上则是口语化的,因为我觉得专门为这样一个轻松休闲的事情而大费脑筋,琢磨修辞,着实没啥意义,又不是写论文。

「记录」博客重生记——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

人生的智慧 : 如何才能幸福度过一生

作者: [德] 阿图尔·叔本华
出版社: 上海人民出版社
副标题: 如何才能幸福度过一生
译者: 韦启昌
出版年: 2015-11
页数: 275
定价: 18.00
装帧: 平装
ISBN: 9787208055162

豆瓣评分:9.2
豆瓣链接:https://book.douban.com/subject/1292409/

作者简介:
  阿图尔·叔本华(德文:Arthur Schopenhauer,1788年2月22日-1860年9月21日),著名德国哲学家,唯意志主义的开创者,非理性主义哲学家的代表人物,无神论者和宿命论者。主要哲学观点涉及形而上学、伦理学、逻辑学和美学。
  叔本华思想的主要灵感来自于柏拉图和康德,印度哲学对其亦有一定影响。他与同时代的其他哲学家不同,没有取消康德的“物自体”概念,而是把它定义为意志,并在这一基础上对整个世界进行了阐述。
  通常叔本华被认为是一个彻底的悲观主义者,实际上叔本华主张通过艺术、禁欲和道德来克服生命意志所带来的痛苦。并且叔本华反对自杀,他认为自杀是对生命意志的承认与屈服。
  叔本华的思想对学术界和文化界影响极为深远,他所开创的非理性主义思潮不仅影响了华格纳、萧伯纳、尼采、托尔斯泰、莫泊桑、维特根斯坦、柏格森、萨特、霍克海默、王国维等不同国家众多的文人和哲学家,甚至连爱因斯坦、薛定谔等科学家,弗洛伊德和荣格等心理学家也都受其影响。

待补

世界那么大,我想去看看!——个人计划之行万里路

  现在距离我对这个计划所设定的开始日期已经几乎一年半了,一方面是最开始完全没有计划这么大,其次是当时真的懒,没有记下来。

  考完研就开始计划着毕业旅行的事,其实高考完就想去兰州青海玩,可惜的是当时没有朋友与我通往,更重要的是当时我手头拮据,便没有成行。在大学期间,多次有出去玩的想法,但也仅仅停留在了想法上。后来想想大约是自己的内心还不够强大,没有真的下过决心。

  去日本的想法其实挺冲动的,就像做出考研的决定一样。最初的念头真的是:世界那么大,我想去看看!寻思着要是去了北理我就去欧洲玩,要是回了本校我就去日本(,要是没考上……黑人问号???我就再来一年……)。之所以一定要出国是因为首先我没有做过飞机,其次我没有出过国。从高中开始就一直没事闲聊资本主义的糖衣大炮,可自己从来没体验过,实在是有种纸上谈兵的感觉。所以一定趁这个毕业的好机会见见世面,顺便把自己的✈️首乘贡献出来。另外就是考上研也算是个阶段性胜利,好好犒劳一下自己也是值得的。

  开始计划日本旅行的时候很难下手,因为毫无经验,之前唯一一次旅行计划还仅仅停留在纸面上。不过功夫不负有心人,具体花了多久我记不得了,反正是逐渐了解了日本旅行其实有很多需要提前准备的东西。真正开始准备好像是已经开始跟导师做事了,当时知道研究生的假期很短,而且当时做的事真的让我心态很不好,所以就下定决心,不管到时候给不给我假,我都要在8月上旬去日本。这个时间真的是各种别扭,除了刚才说的可能没有假。其次是这个时间点距离当时(查了下订单是6月14日)很近,日本签证又不好办,只能说将将够。而且8月初又是旺季中的旺季。具体的过程还是回头另外用单独一篇文章详细说吧。

  现在说说这个行万里路计划的形成。上文提到最一开始没有这么大的计划,仅仅是一次毕业旅行,但后来去过日本之后感触很多,而且上研究生之后读了一些杂书,对人生看的更透彻了一些。另外也从一个学弟那了解到其实旅行并没有我想象中那么贵,最关键的是我的个人经济实力有了增长(通胀带来的副作用???),可以负担的起了。于是在研一的寒假去了南京和上海,并逐渐觉得应该趁年轻有时间有能力应该好好涨涨见识。在6月去重庆开会的时候,行万里路计划逐渐完善成型。同时,也觉得自己这些经历应该好好记下来,并且之前玩的过程也需要整理总结。于是我就在这么久之后,终于开始动笔了。

不要犹豫,尽快行动

今天在知乎上看了一篇非常有意思的文章,题目是:别把时间浪费在工具选择上。文章大概讲的是作者在跑步之前犹豫穿什么鞋子的问题,最后发现其实随便穿一个就行,重点在于要跑起来。这让我想起大学时候在新生群说的一些难听话,其实表达的也是这个意思。

一直到现在,还时不时的看到低年级在群里问类似这样的问题:“哎呀,谭浩强的书是不是很烂啊,我该看哪本好?”,“c primer和c primer plus哪本适合入门?”,“我该买中文版还是英文版”,“据说中文数据结构很水,我是不是要选英文数据结构”。

对于这些问题,当年年少轻狂,便喜欢口出狂言直接怼。现在仔细想想,其实我真正想表达的意思是:在你入门阶段,相对于纠结书籍是否专业这种进阶选手考虑的问题,更重要的是及早的行动起来。

中国有句俗话叫“光说不练假把式,光练不说傻把式,又练又说真把式。”。那些质疑书籍质量的人,至少在我的观察中,很少有人去真正踏实下来学习并练习编程,更多的人是书买回来翻两页便垫桌脚了。

除了及时行动,我还想说的一个问题是,要脚踏实地。之前在iflab新生大会上说过这个观点,在这再详细解释下。不知道别人有没有思考过这个问题,反正我曾经思考了很久:在小学的时候,小数都是有穷的;初中,有理数就是所有的数;高中,实数才是所有的数…那么,小学数学老师是不是骗子呢?后来我是这么想的:数学老师并没有骗人,而是人学习知识,本来就是循序渐进的。很多时候,做事要看眼前,因为只有看清并迈出第一步,你才能设身处地的思考第二步的问题。如果你第一步都还没迈出去,便整天苦恼第二步怎么迈,你便会发现这一步总是因步伐过大而无法迈出。这里我想引用幸福课里的一个小故事:

同样的,在编程学习中,作为一个新手,考虑书籍专业性太过超前,可能你确实选了一个很专业的书,却在阅读的时候发现自己根本看不懂,每一个中文字都摆在面前,却一句话都无法了解,那你说你是选了一本好书还是一本烂书。有些书确实很不专业,错误一堆,但只要你能看懂,能给你带来进步,我觉得就可以了。选书其实有点像选老师,不是说大师就适合所有人,大师不可能天天教你如何扫地,就像中科院院士不会教小学生数数一样。

而什么时候你已经进阶,需要考虑书籍专业性这类的问题了呢。其实不用问,书会告诉你。

当你从这本书无法学到新知识,天天从里面挑错的时候,就是你该寻找下一本书的时候了。

最后附上《别把时间浪费在工具选择上》的全文: