VMware Workstation and Microsoft Hyper-V

本周终于收到win10_1809推送,目前遇到的bug有部分特殊字符无法显示(见https://stackoverflow.com/questions/53972093/unable-to-insert-unicode-characters-on-file-titles https://answers.microsoft.com/en-us/windows/forum/windows_10-performance/missing-unicode-star-after-update-to-2018-october/aa912568-6893-4788-9ce0-7f85c28df51e?page=2 等等)。

但我看已安装组件的时候一下手痒,加装了Hyper-V,结果VMware Workstation的虚拟机全部无法启动,启动时会让你访问 https://kb.vmware.com/s/article/2146361 寻求解决。这篇文章又会建议你访问 https://docs.microsoft.com/en-us/windows/security/identity-protection/credential-guard/credential-guard-manage 查看解决办法。

微软的文章参看“Disable Windows Defender Credential Guard”这部分,大意是:

1.运行gpedit.msc,找到Computer Configuration -> Administrative Templates -> System -> Device Guard -> Turn on Virtualization Based Security,设置成Disable

2.删除注册表三个键值,一定要三个都一起删干净:

HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\LSA\LsaCfgFlags
HKEY_LOCAL_MACHINE\Software\Policies\Microsoft\Windows\DeviceGuard\EnableVirtualizationBasedSecurity
HKEY_LOCAL_MACHINE\Software\Policies\Microsoft\Windows\DeviceGuard\RequirePlatformSecurityFeatures

3.运行以下命令,注意X:是一个未用的盘符

mountvol X: /s

copy %WINDIR%\System32\SecConfig.efi X:\EFI\Microsoft\Boot\SecConfig.efi /Y

bcdedit /create {0cb3b571-2f2e-4343-a879-d86a476d7215} /d "DebugTool" /application osloader

bcdedit /set {0cb3b571-2f2e-4343-a879-d86a476d7215} path "\EFI\Microsoft\Boot\SecConfig.efi"

bcdedit /set {bootmgr} bootsequence {0cb3b571-2f2e-4343-a879-d86a476d7215}

bcdedit /set {0cb3b571-2f2e-4343-a879-d86a476d7215} loadoptions DISABLE-LSA-ISO

bcdedit /set {0cb3b571-2f2e-4343-a879-d86a476d7215} device partition=X:

mountvol X: /d

但微软这篇文章也是有问题的,第3部分的命令行里面,mountvol在x86/x64平台没有/s这个参数,可以先用mountvol /l列出保留分区的挂载名称,再挂载,或者用diskpart去挂载。

但不止文章,微软自己的powershell脚本(现在是version3.6)也复制粘贴错了,这样人说什么好……

目前找到的解决办法是直接干掉算了,以管理员权限运行cmd,执行

bcdedit /set hypervisorlaunchtype off

重启。 如果哪天想暂时不用VMware Workstation而用Hyper-V,执行

bcdedit /set hypervisorlaunchtype auto

直接删掉Hyper-V也行,它留给没有vmware workstation算了。 CMD执行

dism.exe /Online /Disable-Feature:Microsoft-Hyper-V-All

PowerShell执行

Disable-WindowsOptionalFeature -Online -FeatureName Microsoft-Hyper-V-All

Windows10语言混乱问题

自从上次更新Windows_10_1709的时候,就发现一个问题:如果安装了多语言,那么进行大更新(譬如1703->1709,1709->1803/1804)后,部分系统显示内容会出现语言混乱,譬如在英文版Windows10上装了中文语言包,当选择以英文作为显示语言时,桌面右键菜单会变成中文。或者系统本来是英语(美国),手动添加了其他英语地区作为语言后,这些新地区的英语无法在WindowsSettings里面移除。

今天更新1803(1804),就遇到上面的问题。搜了下,网上有个说法是在powershell下用get-winuserlanguagelistset-winuserlanguagelist可以解决无法移除语言的bug。我没有按这个方法,折腾了一个下午,也不知道做了什么处理后好了(大概)。

以下几个步骤可以记一下,但不代表一定可以成功修复:

1.Windows_10_1803_1804默认是通过WindowsSettings安装语言包(display language),通过这种方式安装语言可能可以减少出现升级升出bug的几率。如果你之前手动安装过.cab语言包,试试运行lpksetup,检查一下有无语言包残留,有的话就卸载。(通过WindowsSettings/Microsoft Store方式安装的语言包貌似不会出现在lpksetup中。)

2.Windows_10_1803_1804的控制面板移除了语言选项,但是可以在运行中输入shell:::{BF782CC9-5A52-4A17-806C-2A894FFEEAC5}调出,当你出现两种相同的语言又不能在WindowsSettings里面移除的时候可以试试用控制面板删除。

3.通过上面两种方法令系统中只剩一种语言,然后通过WindowsSettings里面召唤出Change Locale控制面板项目,通过切换locale的方式增加语言,重启,再在WindowsSettings里面安装语言包。

4.不行的话切换到其他用户再切换回来试下。

5.实在不行就新建一个用户将其他appdata拷过去,放弃这个掉到坑里的用户。

Darling in the Franxx猜想,截止EP15

在遥远的未来,人类基因工程非常发达。通过基因改造,优生优育,繁衍、制造了很多十项全能的人类。人类发明了熔岩作为能源,但在开采过程中,挖出了地球深层的生物,这种生物带有人类未知的病毒,基因单一的人类感染后大量死亡,近乎灭绝,从此人类放弃在地表的生活。

为了生存,人类对这种生物进行基因研究,试图分离病毒制造抗体。在研究过程中,出了一些事情,导致培养出混杂了这种生物的基因新人类,也制造了嫁接了人类基因、甚至可以孕育人类(起码是外表像人类的物种)的新物种。新物种无法以普通武器消灭,于是人类以这种新生物的基因制造了半机械半生物的Franxx,从新人类中复制、培养驾驶员,以求打赢这场战争。

而根据北欧神话【死海文书】,新人类和地底生物、新物种将在Gran Crevasse母巢决战,而大战结束后,人类将一次过解决怪物和复制人的问题。到了那个时候,机械化的APE将解封雪藏已久的人类,使人类重新统治地球。

P.S. Code016广和Code015莓是直系亲属。Code000是整个计划的策划者,Code001是制造出来的第一个新物种,也是Code002的母亲。

 

当然上面都是我乱猜的。

乱说中兴

中兴被美国制裁导致企业可能停摆这事,并不归咎于天朝对IC产业投入不足,或者资本流向金融互联网地产,最终需要解决的问题也不是什么实现芯片产业链国产化。

天朝对IC产业投入不会不足。如果你问我要数据,我没有,我懒得查;但是作为一项政治挂帅的事业,它不可能不足,否则就不会出现那么多骗补贴的事了。天朝IC产业并不落后,只是缺乏中兴“leading innovations”(其企业slogan)产品需要的部件的工具和人力资源。毕竟人家开始做这些产业的这些的时候,天朝还在亩产万斤土法炼钢等等光吹牛逼的事。栽在这里,天朝不亏;不栽在这里,只能表明又在吹牛逼而已。事实上,判断天朝是不是过度投入的方法很简单,如果有人一边吹牛逼一边骗补贴,那肯定是过度了。

资本流向金融互联网地产,是理性的结果。货币注水,钱当然会流向资金流转快的地方,像金融,或者像互联网应用这些门槛低的风口事业。再加上控制土地资源,房子就是大买卖。毕竟保住钱包的愿望,都很强烈。

“芯片产业链国产化”是个假命题。一个国家包办产业从低端到高端的所有要素,成本上是不可能的。天朝说美国处于上游,但是人家设计好后也得找台湾南韩去生产。企图一国包办,除了无知,是因为天朝从心底知道,天朝不属于地球。天朝对自己的精神想象,是龙,在天上飞来飞去。所以,最理想的情况是,所有事情都在天上解决,自给自足;对于地球上这套美帝建立的秩序,心底里是抗拒的。

但经验又表明,顺着美帝这套秩序,只要不太出格,肉体是比较舒服的。天朝的困境是,肉体与精神互相矛盾。身体舒服了,精神上就觉得受到污辱;身体痛了,饿了,精神上反而觉得自己天命已达,飘飘然在天上飞来飞去。牛在天上飞,人在地上吹;吹牛逼的快感,却是天朝精神上的至高境界。

2016年遇到的几个cisco设备问题

呃,的确是去年的事情了。。。。

 

part1

两台L3交换机做了HSRP,一主一备,两台机的ACL有点不一样。某天主备切换,过程是sw1→sw2→sw1,但完成最后这步后ACL规则还是用sw2的。原因不明。env: CISCO WS-C4948E on cat4500e-ENTSERVICRSK9-M, ver15.0(2)SG5, release(fc1)

 

part2

Cisco ACL out方向会忽略由设备自身产生的出站流量(即不进行过滤)。这点在CCNA教材上有说。所以如果要对这个设备做禁ping的话要将ACL写在in方向;in方向的ACL不当也会影响诸如HSRP/VRRP/EIGRP/OSPF等协议。在线文档见https://www.cisco.com/c/en/us/td/docs/ios-xml/ios/sec_data_acl/configuration/xe-3s/sec-data-acl-xe-3s-book/sec-access-list-ov.html

An access list can control traffic arriving at a device or leaving a device, but not traffic originating at a device.

 

以上

更换Linode内核,以及使用tcp_hybla的方法

Linode可以在web manager的Dashboard里面选择Linode自家编译的内核。如果想更换到发行版的内核,可以按以下方法做。

  • 以下方法参考了官方文档https://www.linode.com/docs/tools-reference/custom-kernels-distros/run-a-distribution-supplied-kernel-with-kvm
  • 以下方法均以root用户执行。

 

对于XEN环境

Debian(x64)

apt-get install linux-image-amd64

Ubuntu

apt-get install linux-image-virtual

CentOS7

yum install kernel

Fedora22

dnf install kernel-core

以Debian8为例,执行apt-get install linux-image-amd64后,会在/boot/目录生成几个文件,记录好以下两个文件的文件名:

vmlinuz-<version>-amd64
initrd.img-<version>-amd64

以下以’vmlinuz-3.16.0-4-amd64’和’initrd.img-3.16.0-4-amd64’为例。

在/boot/下新建一个’grub’的目录,进入/boot/grub/,新建一个’menu.lst’文件,内容如下:

default=0
timeout=5
title linux-image
  root (hd0)
  kernel /boot/vmlinuz-3.16.0-4-amd64 root=/dev/xvda console=hvc0 ro
  initrd /boot/initrd.img-3.16.0-4-amd64

其中root (hd0)与root=/dev/xvda要对应。其他xen的可能是/dev/xvda1,那么对应应为root(hd0,0)。对于xen而言,console为hvc0。

完成后,在linode web manager的dashboard将内核改成pv-grub,重启即可。

 

对于KVM环境

各发行版除了安装对应的linux内核镜像,还需要安装grub2。

安装完毕后配置grub.cfg(完全照抄官方文档内容,我只试过ubuntu):

Debian, Ubuntu

update-grub

CentOS7

mkdir /boot/grub
grub2-mkconfig -o /boot/grub/grub.cfg

Fedora22

dracut /boot/initrd-4.0.5-300.fc22.x86_64.img 4.0.5-300.fc22.x86_64 
mkdir /boot/grub
grub2-mkconfig -o /boot/grub/grub.cfg

完成后,在linode web manager的dashboard将内核改成grub2,重启即可。

 

换了官方内核后可以轻松增加tcp_hybla和tcp_htcp模块:

modprobe tcp_hybla
modprobe tcp_htcp

 

附:编译模块的方法,以增加tcp_hybla和tcp_htcp为例,不改变Linode自定义内核环境下增加模块。方法出自http://www.v2ex.com/t/114788

以下教程每行#后面的为需要输入的命令,操作时需要root权限,需要使用vi。系统是Ubuntu 12.04.2 LTS,例子的内核为3.11.6-x86_64-linode35,其他Linux系统命令不会差别很大,请按自己的情况修改相应的内核和目录名称。
1.查看你的机器内核版本:

#uname -r
3.11.6-x86_64-linode35

2.去https://www.kernel.org/pub/linux/kernel/v3.0/下载相同版本的源码到任意目录,解压:

#mkdir /root/mykernel
#cd /root/mykernel
#wget https://www.kernel.org/pub/linux/kernel/v3.0/linux-3.11.6.tar.gz
#tar xzvf linux-3.11.6.tar.gz

3.安装内核编译工具:

#apt-get update && apt-get install -y build-essential libncurses5-dev

4.复制Linode原来的内核编译配置文件到源码根目录,增加tcp_hybla和tcp_htcp模块:

#cd linux-3.11.6
#zcat /proc/config.gz > .config
#vi .config

查找”CONFIG_TCP_CONG_CUBIC=y”,在下面增加2行”CONFIG_TCP_CONG_HYBLA=y”,”CONFIG_TCP_CONG_HTCP=y”,保存:

CONFIG_TCP_CONG_CUBIC=y
CONFIG_TCP_CONG_HYBLA=y
CONFIG_TCP_CONG_HTCP=y

编译:

#make

5.耐心等待编译内核完成,完成后,进入模块所在的目录,编写Makefile文件:

#cd net/ipv4/
#mv Makefile Makefile.old
#vi Makefile

以下是Makefile的内容,注意要把KDIR修改为你自己的源码(根)目录,其他则照抄就可以了:

# Makefile for tcp_hybla.ko and tcp_htcp.ko
obj-m := tcp_hybla.o
obj-m += tcp_htcp.o
KDIR := /root/build/linux/linux-3.11.6/
PWD := $(shell pwd)
default:
$(MAKE) -C $(KDIR) SUBDIRS=$(PWD) modules

6.进入源码根目录(不是上面那个目录了,注意),编译模块:

#cd /root/mykernel/linux-3.11.6/
#make modules

7.进入到模块所在目录,复制生成的tcp_hybla.ko到加载目录,测试加载模块:

#cd /root/mykernel/linux-3.11.6/net/ipv4
#cp tcp_hybla.ko /root/mykernel/
#cd /root/mykernel/
#insmod tcp_hybla.ko
#insmod tcp_htcp.ko

加载前

#sysctl net.ipv4.tcp_available_congestion_control
net.ipv4.tcp_available_congestion_control = cubic reno

加载后

#sysctl net.ipv4.tcp_available_congestion_control
net.ipv4.tcp_available_congestion_control = cubic reno hybla htcp

设置hybla为优先

#sysctl net.ipv4.tcp_congestion_control=hybla

8.设置开机自动加载模块,把tcp_hybla.ko、tcp_htcp.ko复制到”/lib/modules/3.11.6-x86_64-linode35/kernel/net/ipv4″

#cd /lib/modules/3.11.6-x86_64-linode35
#mkdir -p kernel/net/ipv4
#cd kernel/net/ipv4
#cp /root/mykernel/tcp_hybla.ko ./
#cp /root/mykernel/tcp_htcp.ko ./
#cd /lib/modules/3.11.6-x86_64-linode35
#depmod -a

9.修改”/etc/sysctl.conf”开机自动设置hybla为优先:

#vi /etc/sysctl.conf
net.ipv4.tcp_congestion_control = hybla

用这9步就可以了,只是动态加载模块,不用更换内核,不用停机重启,不影响网站正常运营,相当方便,值得尝试,参考这个方法可以为Linode动态加载任何需要的内核模块,如fastopen,htcp,highspeed等,有任何问题请到推上找@interwebdev ,转载请注明出处 http://www.fslk.net/?p=822

 

但linode更新了自家内核后还要按以上方法做一遍。

 

 

N只草泥马呼啸而过

是日,因贪便宜,决定在BandwagonHost上开多一个ss以及pptpd。安装ubuntu-14.04-lts,一路apt-get update,apt-get install pptpd。想不到pptp客户端连上后出现问题。草泥马*1。

于是查看/var/log/messages——木有!草泥马*2。

Google一番,发现ubuntu已将此文件与/var/log/syslog合并。于是查看syslog——还是木有内容。草泥马*3。

好吧反正我不折腾了。架起vultr安装ubuntu-15.04,同样apt-get update,apt-get install pptpd。PPTP客户端连上后果然依旧不行。

于是查看/var/log/syslog,有如下内容:

Sep  4 hh:mm:ss vultr pptpd[xxxx]: CTRL: Client xxx.xxx.xxx.xxx control connection started
Sep  4 hh:mm:ss vultr pptpd[xxxx]: CTRL: Starting call (launching pppd, opening GRE)
Sep  4 hh:mm:ss vultr pptpd[xxxx]: /usr/sbin/pppd: Plugin /usr/lib/pptpd/pptpd-logwtmp.so is for pppd version 2.4.5, this is 2.4.6
Sep  4 hh:mm:ss vultr pppd[xxxx]: Plugin /usr/lib/pptpd/pptpd-logwtmp.so is for pppd version 2.4.5, this is 2.4.6
Sep  4 hh:mm:ss vultr pptpd[xxxx]: GRE: read(fd=6,buffer=xxxxxxx,len=xxxx) from PTY failed: status = -1 error = Input/output error, usually caused by unexpected termination of pppd, check option syntax and pppd logs
Sep  4 hh:mm:ss vultr pptpd[xxxx]: CTRL: PTY read or GRE write failed (pty,gre)=(6,7)
Sep  4 hh:mm:ss vultr pptpd[xxxx]: CTRL: Reaping child PPP[1060]
Sep  4 hh:mm:ss vultr pptpd[xxxx]: CTRL: Client xxx.xxx.xxx.xxx control connection finished

好有出息!草泥马*4。

编辑”/etc/pptpd.conf”,将”logwtmp”这句注释掉,重启pptpd。

/etc/init.d/pptpd restart

再测试,OK。

重启vultr,又不行了……草泥马*5。

登录一看,pptpd进程都没有起来……草泥马*6。想了一下,是因为ubuntu-15.04换成systemd了么?于是”whereis systemctl”,systemctl乖乖躺在”/bin/”下。于是

systemctl enable pptpd.service

然后在BandwagonHost上做同样修改,板瓦工也行了。

正当我post此文的时候,忽然看见一只曱甴在我床上愉快地爬来爬去……草泥马*7。

什么,“曱甴”打不出来?草泥马*8……这个词普通话念“yue1zha2”。现在我的卧室充满杀虫水的芬芳气息,草泥马*9。