KVM/libvirt forwarding ports to guest via iptables

1
2
3
4
5
6
7
8
9
10
11
12
13
# connections from outside
sudo iptables -I FORWARD -o virbr0 -d 192.168.122.226 -j ACCEPT
sudo iptables -t nat -A PREROUTING -p tcp --dport 8006 -j DNAT --to 192.168.122.226:8006
sudo iptables -t nat -A POSTROUTING -s 192.168.122.0/24 -j MASQUERADE

# local subnet
sudo iptables -A FORWARD -o virbr0 -m state --state RELATED,ESTABLISHED -j ACCEPT
sudo iptables -A FORWARD -i virbr0 -o enp0s31f6 -j ACCEPT
sudo iptables -A FORWARD -i virbr0 -o lo -j ACCEPT

# save to persistent rules
sudo service netfilter-persistent save
sudo service netfilter-persistent reload

refer to: https://aboullaite.me/kvm-qemo-forward-ports-with-iptables/

阅读全文

Lua 5.4.x CMakeLists.txt

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
cmake_minimum_required(VERSION 3.12)

project(Lua)

add_definitions(-DLUA_COMPAT_5_3)
if(UNIX)
add_definitions(-DLUA_USE_LINUX)
endif(UNIX)


### force options
if(WIN32)
add_compile_options("$<$<C_COMPILER_ID:MSVC>:/utf-8>")
add_compile_options("$<$<CXX_COMPILER_ID:MSVC>:/utf-8>")
endif()

# see https://www.lua.org/manual/5.4/readme.html#other


### build lib
set(C_FILES lapi.c lcode.c lctype.c ldebug.c ldo.c ldump.c lfunc.c lgc.c llex.c lmem.c lobject.c lopcodes.c lparser.c lstate.c lstring.c ltable.c ltm.c lundump.c lvm.c lzio.c lauxlib.c lbaselib.c lcorolib.c ldblib.c liolib.c lmathlib.c loadlib.c loslib.c lstrlib.c ltablib.c lutf8lib.c linit.c)
# prepend 'src/'
list(TRANSFORM C_FILES PREPEND "src/")
# in C++ style
set_source_files_properties(${C_FILES} PROPERTIES LANGUAGE CXX)
add_library(lua STATIC ${C_FILES})


### build interpreter
set(C_FILES "src/lua.c")
set_source_files_properties(${C_FILES} PROPERTIES LANGUAGE CXX)
add_executable(lua-interpreter ${C_FILES})
target_link_libraries(lua-interpreter lua)
if(UNIX)
target_link_libraries(lua-interpreter m dl)
endif(UNIX)
set_target_properties(lua-interpreter PROPERTIES OUTPUT_NAME lua)


### build compiler
set(C_FILES "src/luac.c")
set_source_files_properties(${C_FILES} PROPERTIES LANGUAGE CXX)
add_executable(luac ${C_FILES})
target_link_libraries(luac lua)
if(UNIX)
target_link_libraries(luac m dl)
endif(UNIX)

# install target
install(TARGETS lua
RUNTIME DESTINATION lib
LIBRARY DESTINATION lib
ARCHIVE DESTINATION lib
)
install(TARGETS lua-interpreter luac
RUNTIME DESTINATION bin
)
install(FILES src/lua.hpp src/lua.h src/lualib.h src/lauxlib.h src/luaconf.h
DESTINATION include
)

阅读全文

解决Windows不能远程登录ubuntu18.04.2(xRDP)的问题

Windows远程登录工具(mstsc)可以说是比较好用的,为了方便开发,尝试在ubuntu上搭建xRDP,结果一直卡在登录界面。

表象是输入账号密码后,屏幕空白一段时间,然后提示:

1
2
connection problem,giving up
some problem

image

各种分析之后发现应该是少了一个叫 xorgxrdp 的包,那就装上吧,结果这个包依赖另一个叫xserver-xorg-core的包,但是依赖不满足,所以没自动推荐安装。

那就手动安装xserver-xorg-core吧,结果发现这货要让我卸载很多东西,包括xorg的很多包和桌面(xubuntu-desktop)。。。我怕会破坏环境影响使用,就停在这里没继续了。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
$ sudo apt-get install xserver-xorg-core

Suggested packages:
xfonts-100dpi | xfonts-75dpi
The following packages will be REMOVED:
xorg xserver-xorg-core-hwe-18.04 xserver-xorg-hwe-18.04 xserver-xorg-input-all-hwe-18.04 xserver-xorg-input-libinput-hwe-18.04
xserver-xorg-input-synaptics-hwe-18.04 xserver-xorg-input-wacom-hwe-18.04 xserver-xorg-video-all-hwe-18.04
xserver-xorg-video-amdgpu-hwe-18.04 xserver-xorg-video-ati-hwe-18.04 xserver-xorg-video-fbdev-hwe-18.04
xserver-xorg-video-intel-hwe-18.04 xserver-xorg-video-nouveau-hwe-18.04 xserver-xorg-video-qxl-hwe-18.04
xserver-xorg-video-radeon-hwe-18.04 xserver-xorg-video-vesa-hwe-18.04 xserver-xorg-video-vmware-hwe-18.04 xubuntu-core
xubuntu-desktop
The following NEW packages will be installed:
xserver-xorg-core
0 upgraded, 1 newly installed, 19 to remove and 0 not upgraded.
Need to get 1,351 kB of archives.
After this operation, 5,753 kB disk space will be freed.

后来发现 Griffon 的 这篇文章:http://c-nergy.be/blog/?p=13390 (因为已经fix了,图片也是借用的他文章里的,感谢!)。文章提到卸载后再把xorg的一些包安装回去就可以了,既然有先行者了,我就跟着做吧。

各种安装、卸载,最后我多加了一步,把桌面装回来了:

1
2
3
4
$ sudo apt-get install xserver-xorg-core
$ sudo apt-get -y install xserver-xorg-input-all
$ sudo apt-get install xorgxrdp
$ sudo apt-get install xubuntu-desktop

装完重启,环境看起来一切OK,暂时未见明显异常。

Windows登录,成功!又可以愉快的搬砖了。。。

最后,Thanks Griffon!

所以说遇到困难还是要勇于尝试啊 =。=

感觉少了年轻时候的锐气,想当年折腾系统的时候,可是不惜数据被格式化无数遍的啊 lol.

阅读全文

fatal error: 'asm/types.h' file not found

用cmake+ndk的时候遇到一个错误:

1
fatal error: 'asm/types.h' file not found

用的是ndk自带的 build/cmake/android.toolchain.cmake

看现象是include路径没包含进来。

解决方案,修改 build/cmake/android.toolchain.cmake,增加:

1
2
3
4
5
6
7
8
9
if (${ANDROID_ABI} STREQUAL "x86_64")
include_directories(${ANDROID_SYSROOT}/usr/include/x86_64-linux-android)
elseif (${ANDROID_ABI} STREQUAL "x86")
include_directories(${ANDROID_SYSROOT}/usr/include/i686-linux-android)
elseif (${ANDROID_ABI} STREQUAL "arm64-v8a")
include_directories(${ANDROID_SYSROOT}/usr/include/aarch64-linux-android)
elseif (${ANDROID_ABI} STREQUAL "armeabi-v7a")
include_directories(${ANDROID_SYSROOT}/usr/include/arm-linux-androideabi)
endif()

搞定。

阅读全文

blog-hugo的bug导致生成静态页面失败

这个bug 导致hugo生成静态页面失败。

之前在另一台机器上解决了这个问题,也 提交 到github了。

但是由于家里跑cron job的机器没有自动更新blog-hugo的代码,结果这两天的博客都是404。。。

自动生成博客之前还是要先更新 blog-hugo 项目的代码啊!

阅读全文

cannot locate symbol "_ZSt18_Rb_tree_incrementPSt18_Rb_tree_node_base"

用NDK standalone toolchain编译生成的动态库,在设备上跑的时候报这个错。

搜了一下这个符号,似乎是STL相关的(?),而且是 libgnustl 里才有。

最后解决办法:make standalone toolchain的时候,指定 --stl=libcxx ,不使用默认的 libgnustl。

这样生成的toolchain不包含这个符号,生成的动态库也不会去找这个符号。

(以前一直用的默认的libgnustl并没有报错,应该是项目上没用到STL相关的东西?)

阅读全文

测试局域网的可用(外出)端口

由于某些特殊原因,公司对外出的端口进行了限制,基本上只允许最常用的几个(21,22,80,443等)。

这样的结果是,一些使用了自定义端口的网站 (https://example.com:8080) 就没办法访问了。

这样我在家里的NAS服务器上装的nextcloud需要维护管理的时候就不太方便了(因为电信默认禁止了80和443端口的访问,自建的NAS服务器只能用自定义端口)。

因为是自用,不可能让IT开绿灯,折中一下,只有找一个公司这边也开放的端口,然后就用这个端口来做NAS服务端口。

说干就干,找到一个监听了(几乎)所有端口的服务器: http://portquiz.net (表示感谢!)

写个脚本跑一跑:

#!/bin/bash

output=available_ports.txt
echo "" > $output

for i in $(seq 1 65535); do
    echo "testing $i..."
    nc -zv portquiz.net $i 2>&1 | grep "succeeded" >> $output
done

echo
echo "--= DONE =--"
echo

一顿扫下来,发现开放的端口果然很少。。勉强找两个用起来。

阅读全文

用github的issue做记录并生成静态博客

github-issue-fetcher + blog-hugo + cron job 的方式已经放弃,改用 Github Actions来自动发布了。具体见 #11

本文仅供参考

构思:

  1. 在github上写issue
  2. 把issue爬下来(github-issue-fetcher
  3. 评论系统用https://utteranc.es/,可以跟issue完美结合
  4. 用hugo等生成静态博客,并发布到github page(blog-hugo

1. 在github上写issue

正如本篇一样,写到github的issue页面里,并保持OPEN状态。

可以加一些 Labels(blog-hugo会当作tag写入博客)

2. 把issue爬下来

写了些Python脚本,通过Github GraphQL API去爬issue list。

由于API的限制,每次抓issues 最大只能100条(first:100),如果issue数目超过100, 需要用到 cursor 多次获取。

然后偶然发现author字段有时候会返回None, 有点没搞明白。。。

3. 评论系统

一句话:https://utteranc.es/ is amazing!!!

4. 用hugo等生成静态博客,并发布到github page

按照hugo和主题的需求,写Markdown文件头,以及内容。(以及评论系统的脚本)

我本地会有一个cron job自动去重新抓取issue和生成博客(如果内容没有变化,则不用push到github)。

阅读全文