maven-shade-plugin
maven-shade-plugin maven build fat jar
maven-shade-plugin maven build fat jar
‘命令行, curl 查询公网 ip’ curl ifconfig.me curl whatismyip.akamai.com curl https://ip.cn curl icanhazip.com curl ident.me curl tnx.nl/ip curl myip.dnsomatic.com https://blog.csdn.net/liu0808/article/details/80769810 curl http://members.3322.org/dyndns/getip # 保存到文件 wget http://ifconfig.me/ip wget http://members.3322.org/dyndns/getip http://blog.csdn.net/teddy17/article/details/12618035 curl http://myip.ipip.net/ curl cip.cc curl ifconfig.me curl myip.ipip.net curl http://members.3322.org/dyndns/getip
Theme, epic,feature,user story 在敏捷项目的估算或计划时,我们常提到以下几个概念。talent.mypm.net · Epic Storyservice.mypm.net · Feature项目经理圈子 · Minimal Marketable Feature (MMF)项目管理者联盟 · Theme项目管理者联盟 · User Story项目管理培训 · Tasktalent.mypm.net 本文将说明这几个概念的意义和他们间的关系。项目管理者联盟 FeaturePgMp.mypm.net Feature是可以为顾客提供价值的东西,它代表一个产品可以做什么,或提供什么服务;是可以满足用户的需求,为客户服务,为用户带来真正的价值的成果物的特性。PgMp.mypm.net Feature相对复杂,可由一组动宾结构的句子表达,如一个超市的交易可以描述为: blog.mypm.net · 扫描条形码项目管理者联盟 · 显示单价PgMp.mypm.net · 计算总价项目管理者联盟 · 计算税额项目管理者联盟 · 打印清单项目管理者联盟文章 因此,一个Feature是很难进行估算的,它需要被分解成一个个更小的单位,这就是下面要讨论的User Story。Feature一般在Release Plan的层次,一个Feature可能需要几次迭代才能完成。项目管理者联盟 由于Feature是满足用户需求的交付物,因此每次交付的对象应该是一个或多个Feature。可以说Feature就是敏捷宣言中的"Working software"。转自项目管理者联盟 Minimal Marketable Feature (MMF)项目管理者联盟 了解了什么时Feature后,我们再来讨论MMF。顾名思义,MMF就是一组最小的,可以市场化的机能。首先,它是Feature,其次,它强调的是市场化这个概念。市场化意味着它能够提交到用户手中使用,并可以从用户那里得到相应的回报。MMF可以使得投资提前取得收益,这对于一个企业来说,是非常重要和实用的。blog.mypm.net User Story项目管理者联盟 在Feature的讨论中提到了,Feature是由一组动宾结构的句子组成的。这些动宾句子描述的就是一个个User Story。一个Feature可以分解成多个User Story,每个User Story不能单独被使用,而是一起构成一个Feature。PgMp.mypm.net 一个User Story必须是清晰的,可以为客户增加价值,而且更重要的是能够被估算。因此User Story通常是进行估算的基本单位,通常使用Story Point来进行估算。User Story是在迭代的层级,一个User Story要在一个迭代内完成。项目管理者联盟文章 另外,User Story也是进行需求分析的工具。通过询问谁、做什么、为什么,能够简单明了地扑捉客户的需求。因此User Story通常写成以下形式: 项目经理圈子 As a , I want , so than .项目管理者联盟 ...
hyper -v 端口映射 https://www.cnblogs.com/cnxkey/articles/7815434.html hyper -v 如何实现端口映射 如果你是想由虚拟机来提供相应的服务,比如虚拟机里安装web服务,将物理主机的web端口映射到虚拟机,可以使用如下命令进行设置即可,我已经成功了。 一、查询端口映射情况 netsh interface portproxy show v4tov4 查询这个IP所有的端口映射。 netsh interface portproxy show v4tov4|find “192.168.1.1” 二、增加一个端口映射 netsh interface portproxy add v4tov4 listenport=外网端口 listenaddress=主IP connectaddress=私网IP connectport=私网IP端口 例如: netsh interface portproxy add v4tov4 listenport=8888 listenaddress=118.123.13.180 connectaddress=192.168.1.10 connectport=2222 三、删除一个端口映射 netsh interface portproxy delete v4tov4 listenaddress=主IP listenport=外网端口 例如: netsh interface portproxy delete v4tov4 listenaddress=118.123.13.180 listenport=8888 在关闭Hyper-V虚拟机的情况下,选择Hyper-V管理界面中的"虚拟交换机管理器" 在弹出的对话框中"新建虚拟网络交换机",选择"内部",点击"创建虚拟交换机"。 在IP网卡 切换到"共享"标签下,勾选"允许其他网络用户通过此计算机的Internet连接来连接"并在下方"家庭网络连接"中选择刚刚创建的虚拟交换机——vEthernet (Hyper-V Switch),点击"确认
Product Backlog Product Backlog由所有的功能特性,包括业务功能,非业务功能 (技术、架构和工程实践相关) ,提升点以及缺陷的修复等组成。这些内容也是将来产品版本发布的主要内容。 一个完整的Backlog是一个蓝图,可以根据它来把产品改造成为我们期望的样子。 但是在Scrum中,Backlog是根据产品和产品使用环境的演化而不断演化的。所以Backlog是动态的,我们会持续的改变它去确保我们的产品是最合理的,最有竞争力的,最有价值的。 当我们去看产品的Backlog的时候,优先级是一个重要的视角,优先级越高的Backlog需要越清晰,越详细。对于优先级低的Backlog,详细程度会越低,直到几乎我们不能认为它是一个Backlog项 (非常低的优先级,只相当于一个占位符,来用做提醒) 。 评算(Esitimate) 对每个backlog项做估算 (包括成本,复杂度,风险,功能点) 。优先级越高的Backlog估算要越精确,在估算的过程中可能会导致backlog的优先顺序有可能随之发生变化 (对于那些很重要,并且可以快速解决的问题可以先做) 。 我们要经常做估算。 创建者(Creater) Backlog内容的来源是多样化的. 产品营销部门会分析产生产品的特性和功能点,销售也会有很多反馈可以使产品更具有竞争力或者取悦某些特殊的客户。产品的架构师或者设计人员也会提出一些技术架构方面或者工程实践方面的需求使得产品更加灵活,更具扩展性,可复用性,开发更高效等等。产品实施或者技术支持部门也会有许多产品缺陷的反馈被放入Backlog。 重要程度(Importance) 每个Backlog项都有优先级,这些backlog项按照优先次序排行队列放在Backlog列表中。在评估的过程中 我需要在"什么样的产品特性,技术架构,缺陷的修复才会给产品公司和它的客户带来带来最大的收益? " 和"什么样的技术架构,工程方法使我们可以更快,更高质量的交付版本"之间做出抉择。不论是对内部技术环境或者外部市场,我们都需要不断筛选和评估什么是最重要的。 版本发布(Release) 规划接下来的几个版本,包括版本的目标,及可能包含的内容。 (我们可能需要在发布内容,开发成本及发布周期之间做出抉择) 。 产品Backlog要按照Release分组,要让开发团队的所有成员都全部的了解总体开发目标,并且确保所有的技术问题都做了充分的考虑并且放入了产品Backlog. 负责人(Product Owner) 我们需要指定一个负责人来管理Backlog。这个人的职责是管理和控制Backlog列表,对于商业产品的开发, Backlog的负责人也许会是产品经理,对于内部项目的开发Backlog的负责人有可能是项目经理或者它指派的人。这个负责人的职责是调整产品Backlog的优先级和工作量估算,同时决定哪些内容包括在Sprint中。这是一个各个相关的组织协作的过程。 优先级(Priority) 只有一个人来进行排序的工作,这个人的职责是确保达成产品的愿景,提高产品投资回报率。这个人的职位一般是产品经理或者产品营销经理。如果任何人需要改变优先级,他们必须说服这个负责人去改变。 可视化(Visualization) 产品的Backlog需要能够让开发团队,利益相关者等相关的人能够很容易的看到它的内容,状态,进展等等。 以下是引用《硝烟中的Scrum和XP-我们如何实施Scrum (Henrik Kniberg著) 》 中讲述他们如何编写Product Backlog: Product Backlog是Scrum的核心,也是一切的起源。从根本上说,它就是一个需求、或故事、或特性等组成的列表,按照重要性的级别进行了排序。它里面包含的是客户想要的东西,并用客户的术语加以描述。我们叫它故事 (Story) ,有时候也叫做Backlog条目。 我们的故事包括这样一些字段: ID——统一标识符,就是个自增长的数字而已。以防重命名故事以后找不到它们。 Name (名称) ——简短的、描述性的故事名。比如"查看你自己的交易明细"。它必须要含义明确,这样开发人员和产品负责人才能大致明白我们说的是什么东西,跟其他故事区分开。它一般由2到10个字组成。 Importance (重要性) ——产品负责人评出一个数值,指示这个故事有多重要。例如10或150。分数越高越重要。 o 我一直都想避免"优先级"这个说法,因为一般说来优先级1都表示"最高"优先级,如果后来有其他更重要的东西就麻烦了。它的优先级评级应该是什么呢?优先级0?优先级-1? Initial Estimate (初始估算) ——团队的初步估算,表示与其他故事相比,完成该故事所需的工作量。最小的单位是故事点 (story point) ,一般大致相当于一个"理想的人天 (man-day) “。 o 问一下你的团队,“如果可以投入最适合的人员来完成这个故事 (人数要适中,通常为2个) ,把你们锁到一个屋子里,有很多食物,在完全没有打扰的情况下工作,那么需要几天,才能给出一个经过测试验证,可以交付的完整实现呢?“如果答案是"把3个人关在一起,大约需要4天时间”,那么初始估算的结果就是12个故事点。 o 不需要保证这个估值绝对无误 (比如两个故事点的故事就应该花两天时间) ,而是要保证相对的正确性 (即,两个点的故事所花费的时间应该是四个点的故事所需的一半) ...
database DDL > puml https://github.com/wangyuheng/ddl2plantuml java -jar ~/apps/ddl2plantuml.jar foo.sql er.puml docker run \ -e DDL='/mnt/data/ddl.sql' \ -e PLANTUML='/mnt/data/er_by_docker.puml' \ -v ddl2plantuml-data:'/mnt/data' \ wangyuheng/ddl2plantuml:latest
golang 开发目录结构 https://github.com/golang-standards/project-layout 在实际的项目中发现大家的目录结构都比较凌乱,基本每个人都有每个人的风格,一个项目在不断地变大,一些新的文件或目录又不断地被添加进来,从这里面去找到自己需要的信息的成本越来越高,一个统一的通用的目录结构非常有必要。 以下内容来自于github上的这个项目 (https://github.com/golang-sta…) /cmd main函数文件 (比如 /cmd/myapp.go) 目录,这个目录下面,每个文件在编译之后都会生成一个可执行的文件。 不要把很多的代码放到这个目录下面,这里面的代码尽可能简单。 /internal 应用程序的封装的代码,某个应用私有的代码放到 /internal/myapp/ 目录下,多个应用通用的公共的代码,放到 /internal/common 之类的目录。 /pkg 一些通用的可以被其他项目所使用的代码,放到这个目录下面 /vendor 项目依赖的其他第三方库,使用 glide 工具来管理依赖 /api 协议文件,Swagger/thrift/protobuf 等 /web web服务所需要的静态文件 /configs 配置文件 /init 服务启停脚本 /scripts 其他一些脚本,编译、安装、测试、分析等等 /build 持续集成目录 云 (AMI), 容器 (Docker), 操作系统 (deb, rpm, pkg)等的包配置和脚本放到 /build/package/ 目录 /deployments 部署相关的配置文件和模板 /test 其他测试目录,功能测试,性能测试等 /docs 设计文档 /tools 常用的工具和脚本,可以引用 /internal 或者 /pkg 里面的库 /examples 应用程序或者公共库使用的一些例子 /assets 其他一些依赖的静态资源 https://www.jianshu.com/p/1c47d99f33ed
srt,ass,ssa 字幕 srt,ass,ssa三种字幕的区别 ass > ssa > srt 流行的字幕一共有三种就是 ass、ssa、srt。 srt 全称是 SubRip Text, 最常见的文本字幕,制作起来简单,时间代码+字幕。 ssa 全称是 S Station Alpha, 功能上比src更强大支持各种颜色、字体等特效。 ass 全称是 Advanced SubStation Alpha, 包含ssa所有的功能并在ssa原有功能的基础上还进行了扩展。 视觉角度上讲ssa和ass视觉效果更好一些。 扩展: 字幕常见的标识 chs、cht、GB、Big5、eng。 chs是Chinese Simplified的缩写,表示简体中文。 cht是Chinese Traditional的缩写,表示繁体中文。 GB既"国标"的汉语拼音的缩写,中华人民共和国国家标准的意思,简体中文。 Big5是在台湾和香港等地广为使用的计算机汉字编码方案,繁体中文。 eng是English的简写,也就是说表示英文。 https://blog.csdn.net/wuhao91/article/details/50454051
alpine basic alpine mirror vi /etc/apk/repositories # b. 将里面 dl-cdn.alpinelinux.org 的 改成 mirrors.aliyun.com ; 保存退出即可 sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g' /etc/apk/repositories # alpine install telnet apk update apk add busybox-extras busybox-extras telnet localhost 6900 apk add drill apk add tcpdump apk add curl 明明镜像中有对应的二进制文件,但是执行时却提示 not found 或 no such file¶ 有时可能会遇到明明镜像中存在相应的二进制文件,但是执行对应的二进制文件时却提示 not found 或 no such file 错误,类似下面这样: ls /usr/bin/grep /usr/bin/grep /usr/bin/grep /bin/sh: /usr/bin/grep: not found 常见原因:该二进制文件是使用动态链接方式编译了一个使用了 GLIBC 库的程序生成的,但是 alpne 镜像中没有 GLIBC 库而是用的 MUSL LIBC 库,这样就会导致该二进制文件无法被执行。 ...
Scrum Master Scrum 主 管 (Scrum Master, 简称 SM) 解惑 Scrum 系列一: 什么是 Scrum Master? 不久前,我们在帮一家颇具规模的银行做组织级敏捷转型时,经常被问到这样的问题: “Scrum Master 究竟是干什么的?什么样的人适合当 Scrum Master?” 要回答这个问题,我们需要先了解 “什么是 Scrum Master” ?这是个在 Scrum 框架中,最让人困惑的角色。目前为止,Scrum Master 一直没有很好的中文译名 (不像 PO 翻译成产品负责人那般自然) 。如果要一定要翻译 Scrum Master,似乎只有直译成 Scrum 大师最为贴切。按照经典 Scrum 的定义,Scrum Master 是 Scrum 三个角色之一,是负责帮助团队理解接受 Scrum 的价值观,原则和实践。 曾经有一位在业界颇具影响力的敏捷专家曾提到,Scrum Master 这个词本身充满了矛盾的色彩。一方面,这个词暗示 Scrum Master 是团队内部唯一的权威;而另一方面,Scrum Master 并没有任何行政上被赋予的权力。他不像部门经理,或是以往的 team leader,原则上他并不对项目的成功负责 (现实中确实有一些 Scrum Master 沿袭了 team leader 或 manager 的权力) 。所以这些经常导致 Scrum Master 究竟是不是权威的争论。除此,还有人提出,Scrum Master 是否表现出色,可以用团队是否需要 Scrum Master 来衡量 (这方面可以参照 Spotify 的组织内没有 Scrum Master) 。于是我们面临的悖论是" 好的 Scrum Master 就是不存在的 Scrum Master"!! ...
Apache HttpClient 4.5 How to Get Server Certificates package com.memorynotfound.httpclient; import org.apache.http.HttpResponseInterceptor; import org.apache.http.client.methods.HttpGet; import org.apache.http.client.utils.DateUtils; import org.apache.http.conn.ManagedHttpClientConnection; import org.apache.http.impl.client.CloseableHttpClient; import org.apache.http.impl.client.HttpClients; import org.apache.http.protocol.BasicHttpContext; import org.apache.http.protocol.HttpContext; import org.apache.http.protocol.HttpCoreContext; import javax.net.ssl.SSLSession; import java.io.IOException; import java.security.cert.Certificate; import java.security.cert.X509Certificate; /** * This example demonstrates how to obtain server certificates {@link X509Certificate}. */ public class HttpClientGetServerCertificate { public static final String PEER_CERTIFICATES = "PEER_CERTIFICATES"; public static void main(String... args) throws IOException { // create http response certificate interceptor HttpResponseInterceptor certificateInterceptor = (httpResponse, context) -> { ManagedHttpClientConnection routedConnection = (ManagedHttpClientConnection)context.getAttribute(HttpCoreContext.HTTP_CONNECTION); SSLSession sslSession = routedConnection.getSSLSession(); if (sslSession != null) { // get the server certificates from the {@Link SSLSession} Certificate[] certificates = sslSession.getPeerCertificates(); // add the certificates to the context, where we can later grab it from context.setAttribute(PEER_CERTIFICATES, certificates); } }; // create closable http client and assign the certificate interceptor CloseableHttpClient httpClient = HttpClients .custom() .addInterceptorLast(certificateInterceptor) .build(); try { // make HTTP GET request to resource server HttpGet httpget = new HttpGet("https://google.com"); System.out.println("Executing request " + httpget.getRequestLine()); // create http context where the certificate will be added HttpContext context = new BasicHttpContext(); httpClient.execute(httpget, context); // obtain the server certificates from the context Certificate[] peerCertificates = (Certificate[])context.getAttribute(PEER_CERTIFICATES); // loop over certificates and print meta-data for (Certificate certificate : peerCertificates){ X509Certificate real = (X509Certificate) certificate; System.out.println("----------------------------------------"); System.out.println("Type: " + real.getType()); System.out.println("Signing Algorithm: " + real.getSigAlgName()); System.out.println("IssuerDN Principal: " + real.getIssuerX500Principal()); System.out.println("SubjectDN Principal: " + real.getSubjectX500Principal()); System.out.println("Not After: " + DateUtils.formatDate(real.getNotAfter(), "dd-MM-yyyy")); System.out.println("Not Before: " + DateUtils.formatDate(real.getNotBefore(), "dd-MM-yyyy")); } } finally { // close httpclient httpClient.close(); } } }
‘reveal.js, markdown > PPT’ 快捷键 全屏 f , 退出全屏 Esc 上一页 p, 下一页 n/空格 首页 Home, 末页 End 缩略图 Esc 或 o 黑屏 b 演讲提示模式 s vi导航键: h, j, k, l 帮助页面: ? 字号 reveal.js的markdown支持4种字号#,##,###,#### 安装nodejs sudo pacman -S nodejs 安装npm sudo pacman -S npm git clone reveal.js git clone https://github.com/hakimel/reveal.js.git cd reveal.js npm install mv index.html index.html.bak ln -s scrum/index.html index.html npm start npm start – –port=8001 ```xml 内容左对齐 .reveal .slides { text-align: left; } .reveal .slides section>* { margin-left: 0; margin-right: 0; } </style> 插入图片并控制样式 路径是相对于index.html的路径 ...
btrfs command # 安装 btrfs 的用户空间工具 pacman -S btrfs-progs # 像 df 这样的用户空间工具可能不会准确的计算剩余空间 (因为并没有分别计算文件和元数据的使用情况) 。推荐使用 btrfs filesystem usage 来查看使用情况 btrfs filesystem usage / #列出当前路径 (path) 下的子卷: btrfs subvolume list -p path # 碎片整理 btrfs filesystem defragment -r /
linux 查看 SATA 速度, 版本 https://www.cyberciti.biz/faq/linux-command-to-find-sata-harddisk-link-speed/ sudo pacman -S smartmontools sudo smartctl -a /dev/DEVICE-NAME-HERE sudo smartctl -i /dev/DEVICE-NAME-HERE sudo smartctl -a /dev/sda | grep "^SATA" sudo smartctl -i /dev/sdb | grep "^SATA" sudo smartctl -a /dev/sda sudo smartctl -i /dev/sdb dmesg | grep -i sata | grep 'link up'
win10 onedrive cpu https://mingjiejian.github.io/2017/09/15/onedrive/ 推荐且不怎么伤的办法 从解决方法来说原因应该是Onedrive的log出错了,一直以为没有更新所以卡在更新/安装上,所以一个比较简单的解决办法就是删掉错误的log。这两个log是 C:\Users\用户名\AppData\Local\Microsoft\OneDrive\setup\logs\userTelemetryCache.otc C:\Users\用户名\AppData\Local\Microsoft\OneDrive\setup\logs\userTelemetryCache.otc.session 在Onedrive打开而且用户没有注销登录的情况下在任务管理器中结束OneDriveSetup.exe进程 将上述的两个log文件删除 运行C:\Users\用户名\AppData\Local\Microsoft\OneDrive\Update\OneDriveSetup.exe 应该就可以了 有的时候可能自己觉得太烦想重装,已经将Onedrive卸载了 (我就是这么做的) ;这个时候只需要做上面的第2步然后双击安装文件就行了,不会再卡在安装那。不过之后要重新登录一下自己的账户。
golang, cgo, CGO_ENABLED go build CGO_ENABLED=0 GOOS=linux go build -v -a -o name0 main.go cgo CGO 提供了 golang 和 C 语言相互调用的机制。某些第三方库可能只有 C/C++ 的实现,完全用纯 golang 的实现可能工程浩大,这时候 CGO 就派上用场了。 可以通 CGO 在 golang 在调用 C 的接口,C++ 的接口可以用 C 包装一下提供给 golang 调用。 被调用的 C 代码可以直接以源代码形式提供或者打包静态库或动态库在编译时链接。 推荐使用静态库的方式,这样方便代码隔离,编译的二进制也没有动态库依赖方便发布也符合 golang 的哲学。 CGO_ENABLED=0 的情况下,Go 采用纯静态编译; CGO_ENABLED=1 go build 编译时会添加一些动态库链接 如 glibc cgo,允许你在 Go 代码中调用C代码 我们以os/user为例,在 CGO_ENABLED=1,即 cgo 开启的情况下,os/user 包中的 lookupUserxxx 系列函数采用了 c 版本的实现,我们看到在 $GOROOT/src/os/user/lookup_unix.go 中的 build tag 中包含了 build cgo。这样一来,在 CGO_ENABLED=1,该文件将被编译,该文件中的c版本实现的lookupUser将被使用 ...
linux nm nm 目标文件格式分析 nm 命令显示关于指定 File 中符号的信息,文件可以是对象文件、可执行文件或对象文件库。如果文件没有包含符号信息,nm 命令报告该情况,但不把它解释为出错条件。 nm 命令缺省情况下报告十进制符号表示法下的数字值。 nm nm命令主要是列出目标文件的符号 (说白了就是一些函数和全局变量等) 。 如果你编译出来的程序没有经过 strip ,那么 nm 命令可以挖掘出隐含在可执行文件中的重大秘密。它可以帮你列出文件中的变量及函数,这对于我们进行反向操作具有重大意义。 下面我们通过一小段简单的程序来讲解 nm 命令的用途。在编译这个程序时,我们加上了 -g 选项,这个选项可以使编译出来的文件包含更多有效信息。 nm /path/to/foo nm命令 功能:列出.o、.a、.so中的符号信息,包括符号的值,符号类型及符号名称等。所谓符号,通常指定义出的函数,全局变量等 https://blog.csdn.net/mayue_web/article/details/115919693 使用: nm [option(s)] [file(s)] 1 示例: 查看静态库或动态库定义了哪些函数 nm -n –defined-only xxxx.a nm -g -C –defined-only xxxx.so nm -D xxxx.so 显示hello.a 中的未定义符号,需要和其他对象文件进行链接 nm -u hello.o 在 ./ 目录下找出哪个库文件定义了close_socket函数 nm -A ./* 2>/dev/null | grep “T close_socket” ———————————————— 版权声明:本文为CSDN博主「mayue_csdn」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。 原文链接:https://blog.csdn.net/mayue_web/article/details/103879976 https://linuxtools-rst.readthedocs.io/zh_CN/latest/tool/nm.html
hyperv archlinux hyper v 禁用安全启动 虚拟机>设置>安全>启用安全启动(去掉勾选) network 在虚拟机栏中右键点击虚拟机>设置>添加硬件 选择"网络适配器" 点击添加按钮 添加 Default switch. Default switch默认会做nat,添加 后虚拟机可以正常访问网络.但Default switch的ip/网段每次重启会变,如果 需要 固定ip,需要另外手动新建一个交换机sw0 新建虚拟交换机 Hyper-V 管理器>右侧操作栏>虚拟交换机管理器>新建虚拟交换机>内部>新建虚拟交换机 名称: sw0 连接类型: 内部网络 在windows中打开网络适配器设置,手动设置sw的 ip为 192.168.80.1 网关可以不填 dns: 192.168.1.xxx linux里 手动测试sw0的ip : 192.168.80.2 Gateway 不要设置, 两个网卡 对应default switch的设置默认网关,sw0不设置 DNS: 192.168.1.xxx 问题 遇到过一次虚拟机不能访问外网, 确认linux网络 配置没有问题, 重启windows解决了. install VcXsrv GUI VSOCK + x410 https://x410.dev/cookbook/hyperv/using-x410-with-hyper-v-linux-virtual-machines-via-vsock/ 卸载 xrdp yay -R xrdp 修改win10注册表,配置vsock x410-display-0-only.reg Windows Registry Editor Version 5.00 [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Virtualization\GuestCommunicationServices\00001770-facb-11e6-bd58-64006a7986d3] "ElementName"="X410 Display 0" 启动x410 并 开启vsock x410 /listen hyperv /desktop xfce4 桌面启动脚本 sudo vim /usr/bin/start-xfce4-desktop.sh export XDG_SESSION_TYPE=x11 export XDG_CURRENT_DESKTOP=“XFCE” exec startxfce4 ...
KVM 的-nographic与-display选项 KVM的-nographic与-display选项 http://openwares.net/2014/03/10/kvm_nographic_display/ KVM的-nographic与-display选项& http://openwares.net/2014/03/10/kvm_nographic_display/embed/#?secret=cEd7rLTTHt KVM客户机正常运行时是不需要在主机上显示图形界面的,以前都是使用-nographic和-daemoniz选项来使客户机后台运行。 但是从qemu-kvm 1.4开始,这招不灵了,会有这样的错误提示: -nographic can not be used with -daemonize 这提示过于简单的,新版本的kvm不再允许-nographic和-daemonize一起使用了,应该使用-display none参数来代替-nographic,这样: kvm … -display none -daemonize -display参数用于替代老风格的显示类型选项,如-sdl,-curses,-vnc,其语法如下: -display [sdl | curses | vnc=] 其中,vnc=中的display与显示环境变量$DISPLAY的含义一致,格式为hostname: displaynumber.screennumber(X服务器主机名/地址:显示号.屏幕号)。一般设置为vnc=:0即可,如果有多台虚拟机在同一台主机上需要同时使用VNC,则每台客户机的显示号顺延就可,比如:1,:2,:3等,而通过vnc客户端连接客户机的端口号则分别为5900,5901,5902,5903。5900是默认的vnc端口,对应显示设备:0。 使用-display none选项时,客户机仍然会看到模拟的显卡,但是其显示不会输出给用户。 -display none与-nographic的区别是,-display none仅仅影响显示输出,而-nographic同时还会影响串行口和并行口的输出。 -nographic和-daemonize组合一直以来存在一个小问题,kvm客户机启动后,主机虚拟终端后续的命令回显会被关闭,但命令的输出会显示,只能退出重新登录终端才会恢复正常,这是个很明显的bug,却很久都没有修复。改用-display none参数后就没有此问题了。 kvm更详细的用法,请自行 man qemu
nftables trace nhttps://wiki.nftables.org/wiki-nftables/index.php/Ruleset_debug/tracing nft add rule nat post ip saddr 192.168.60.0/24 meta nftrace set 1 oif wlp3s0 masquerade nft add rule nat post ip protocol icmp icmp type echo-request meta nftrace set 1 accept nft insert rule nat post ip protocol icmp icmp type echo-request meta nftrace set 1 accept nft add rule nat post ip protocol icmp icmp type echo-request meta nftrace set 1 log nft monitor trace