Archive for linux

供应商网络依赖的几个服务: neutron-server.service neutron-linuxbridge-agent.service neutron-dhcp-agent.service neutron-metadata-agent.service 自服务网络除了上边的几个服务外还依赖 neutron-l3-agent.service。 从这里也能看出,自服务网络支持三层模拟,这也是主要区别。自服务可以实现的功能就比较多,比如vxlan,FWaaS,LBaaS等。 先看看neutron-metadata-agent服务,这个服务主要功能是实例启动的时候为cloud-init获取metadata的时候转发用的。因为实例所在网络跟nova-api网络肯定不通的,所以需要一个中间转发,起这个作用的就是neutron-metadata-agent服务。看网上从实例到neutron-metadata-agent服务,中间还经过了haproxy,haproxy是l3-agent或者dhcp-agent启动的,这个也许也是分不同网络类型正好不同(但是我看官方安装文

Continue

零拷贝不是一个新技术了,之前一直接触不到这么底层的技术,最近看的比较多,所以从代码上研究了一下。 在应用程序做数据传输等操作涉及系统调用,而为了提高性能,就是从减少系统调用次数和减少内核空间和用户空间的数据拷贝次数入手的。 具体的我也没看代码,都是从网上总结学来的。 像mmap方式,是减少了内核空间和用户空间的数据拷贝,使用映射还是指针的能够共享内核空间。但涉及比如把一个文件内容通过网络发送的操作,还涉及内核空间的数据拷贝。 sendfile和splice就是解决内核空间的数据copy的,我看linux手册是page buffer指针的复制,所以没有做数据的copy。指针是通过pipe buffer存储的。 ssize_t sendfile(int out_fd, int in_fd, off_t *offset, size_t count); ssize_t sendfile64(int out_fd, int in_fd, loff_t *offset, size_t count); 这俩的区别是sendfile64适合传送大文件,offset类型也决定了

Continue

昨天下了一个软件,需要jdk8版本的,我之前开发是用的openjdk11版本的。就想找找怎么安装多个版本的,我之前知道可以知道path环境变量改变,就想找找有没有类似多版本管理的软件。 然后找到一个系统级别的update-alternatives,然后执行update-alternatives --config java,可以进行java版本的选择,我发现我之前安装过java8的jre了版本了。也没有切换,直接复制路径去执行的jar包。 然后就研究了一下update-alternatives 命令。配置文件目录为/var/lib/dpkg/alternatives/java 涉及的原理就是通过文件软链接来实现版本的切换。 ls -alh /usr/bin/java lrwxrwxrwx 1 root root 22 7月 22 2019 /usr/bin/java -> /etc/alternatives/java ls -alh /etc/alternatives/java lrwxrwxrwx 1 root root 43 7月 22 2019

Continue

先说一下pyenv的安装方式,只有两步,第一步是将github项目clone到目录,第二步是添加环境变量。所以pyenv完全可以离线安装,比如操作系统版本一致的时候,直接把装好的pyenv环境和virtualenv环境复制到目标系统就可以了。然后添加一下环境变量。 我之前安装过pyenv了,更新pyenv进入pyenv目录后,执行git pull。 然后我复制了一份新的代码,改变环境变量,切换到新pyenv目录。然后卸载之前直接安装的python版本。pyenv uninstall 3.7.3 进入.pyenv_bak,mkdir cache.将源码包放到cache目录下。 进入.pyenv_bak/plugins/python-build/share/python-build目录,编辑3.7.3文件 #require_gcc prefer_openssl11 export PYTHON_BUILD_CONFIGURE_WITH_OPENSSL=1 install_package "openssl-1.1.0j" "https://www.opens

Continue

ipmitool -I lanplus -H 5.5.5.140 -U root -P mima2019 chassis status 报错:Error: Unable to establish IPMI v2 / RMCP+ session 加-v也看不出什么。网上搜到 iDRAC设置里---网络---ipmi设置--启用LAN上的IPMI就可用了。 本地命令也可以操作: ipmitool lan set 1 access on 但是没找到,本地显示这个状态的方法 lan print里也没找到

Continue

这个问题官方github上有说,学了新知识,记一下。 wine-binfmt这个包没找到,然后我就继续安装,软件启动了但是没办法编译代码。issue上有排错,确实是wine安装问题。我在issue里边找到了解决办法。 手动添加一个解析 Windows 的 exe 的 binfmt 配置 vim /usr/share/binfmts/wine 内容填入 package wine interpreter /usr/bin/wine magic MZ 保存退出,更新一下配置就好了 sudo update-binfmts --import wine

Continue

办公电脑代码比较多,不方便网上共享,然后跟自己用的电脑同步一些东西比较麻烦。想着直接把办公电脑ssh内网穿透,这样回去看一下办公电脑上的文件就方便多了。 办公电脑基本不关机的。然后出口端口映射这些方法就不用想了,我正好有一台阿里云主机,网上找了一个反向隧道的方法。 在阿里云机器上.ssh/authorized_keys添加办公电脑的ssh公钥,准备两个空闲端口5678和54345端口。 办公电脑上安装autossh。 sudo apt install autossh 办公电脑上执行 autossh -M 5678 -fN -o "PubkeyAuthentication=yes" -o "StrictHostKeyChecking=false" -o "PasswordAuthentication=no" -o "ServerAliveInterval 60" -o "ServerAliveCountMax 3" -R 123.56.21.222:54345:localhost:22 userN@123.56.21.222 -p61397 # “-M 56

Continue

粗略的找了一个字体,要求不高,看着还行,然后小写l的样子有强迫症。最后选了一个monospace,总共看了没几个字体,这个就是下划线难看。以后再说 用打thinkpad,触摸板三指手势没搞定,网上的方法不好用,等后边再看看。 快捷键,准备把alt和ctrl调换一下,然后改一下终端tty的ctrl c中断。从网上搜了一下方法。 lsusb来确定外接键盘的vendorID和productID: dmesg 按键ID用的我之前文章里写的键盘记录工具。 /etc/udev/hwdb.d/ -:> cat external_keyboard.hwdb evdev:input:b*v0510p0032* KEYBOARD_KEY_0x700e2=leftctrl KEYBOARD_KEY_0x700e0=leftalt 执行更新操作 sudo udevadm hwdb --update sudo udevadm trigger --sysname-match="event*" 发现更改了也不好用,怎么都不能跟mac那样,还得改回去

Continue

捣鼓同学发的东西,发现有个shell安装脚本加密了,shell从来没系统学过,根据原理肯定是可以解密的。但是看代码头疼,这是我不想学shell的原因,shell可以写的很奔放,然后我都是用到了才去查去学。 没办法想走近路,我就找了一行感觉很有特征的语句去搜一下有没有相同的代码碰碰运气,不巧搜到了,找到了一个gzexe。 google gzexe发现是个linux系统自带命令,mac下也有。然后自带解密功能。尝试了一下。 我写了一个test.sh就打印了一行echo。 gzexe test.sh加密。生成一个加密test.sh 和一个test.sh~源文件。 gzexe -d test.sh 解密。 我看了一下mac下的源码和搜出来的不一样,可以有很多版本。然后我对比了一下gzexe加密的文件和加密文件,发现真的就是个变种加密方式,变量名替换了,很多细节变了,总的一样的。 因为gzexe的简单,一眼瞅出原理,然后再看加密脚本很简单了,分分钟破解之。 这里有几个点,一个是我再测试机上vim编辑的时候,编辑完执行就报错,我感觉就是vim修改文件了,特别是最后一行是

Continue

kubernetes 安装 yum install etcd kubernetes vim /etc/sysconfig/docker # OPTIONS='--selinux-enabled --log-driver=journald --signature-verification=false' OPTIONS='--selinux-enabled=false --insecure-registry gcr.io --log-driver=journald --signature-verification=false' vim /etc/kubernetes/apiserver # KUBE_ADMISSION_CONTROL="--admission-control=NamespaceLifecycle,NamespaceExists,LimitRanger,SecurityContextDeny,ServiceAccount,ResourceQuota" KUBE_ADMISSION_CONTROL="--admission-control=Namespa

Continue