说说 github.com/pkg/sftp 与 TCP stall

好久没写过东西了,最近一直在折腾 Golang,今天难得想起来了,就稍微写一点。

最近有个需求,要通过 SFTP 把文件传到指定服务器上,于是就用了 github.com/pkg/sftp 这么一个库。然而,这个库存是存在一些坑的,比如某个版本 sftp.File.Write 写超过 4MiB 的文件时,Kill 远程 sshd 后会导致 Close 时死锁;又比如更新代码后,Kill 了远端之后有时 ReadFrom 返回 Writer EOF,有时返回 nil;再比如模拟弱网时发生了 TCP Stall,传输就永远的卡死了,如果此时对端认为 TCP 超时,则该 TCP 将永远不会被释放。

继续阅读“说说 github.com/pkg/sftp 与 TCP stall”

libvirtd 中使用 VLAN (VMM)

现在有一个需求,想要将 libvirtd 中管理的虚拟机和以太网某一个特定的 VLAN 连接。

太长不看版:

  • 使用 NetworkManager 中的 nmtui 工具管理网桥和 VLAN (GUI中没有实现此功能)
  • 在 VMM 中添加网络设备, Network Source 选择 Specify shared devices name,然后输入网桥的名字
  • 网桥中,需要设置 “Group forward mask” 为 65528 ,否则 DHCP Discover 等广播报文无法通过网桥

继续阅读“libvirtd 中使用 VLAN (VMM)”

搬寝室

嗯,清明假期,趁着 3 月份毕业了一波同学,于是向楼长申请搬到一个环境好一点的寝室。虽然说不再那么潮湿且暗无天日了,还能用洗衣机,然而每次上楼要多爬两层,且早上会有恼人垃圾车磕垃圾,晚上早上外面人跑来跑去也蛮吵的。

继续阅读“搬寝室”

为树梅派 3 加装一块 USB 无线网卡并工作在 AP 模式

没错,这曾经是个很简单的问题。在 Debian 7 下只要修改 /etc/network/interfaces,然后配置hostapd,就可以了。不过随着 Raspbian 的更新,这种方法已经不太合适了,必须要按照 Debian 8+ 的方式进行设置了,故写篇文章记录一下。

几句话简要说明版:Debian 8 已经不推荐使用/etc/network/interfaces的方式来配置网络了,相应的功能由 dhcpcd 接管,配置文件位于 /etc/dhcpcd.conf。当 dhcpcd 检测到有无线设备,会去查找/etc/wpa_supplicant/wpa_supplicant.conf 并调用 wpa_supplicant 来连接 WLAN。

继续阅读“为树梅派 3 加装一块 USB 无线网卡并工作在 AP 模式”

调整Linux磁盘分区大小

装系统的时候脑子疼,给了56GB的根分区,40GB的home,24GB的opt。现在发现,home和opt快满了,根分区剩了一大堆,只好调整一下了。

好在,我的根分区是btrfs,opt是ext4,home是xfs,都能够支持缩放。这次的主要目的是缩小根分区,扩大opt分区,home就不动了,改天把Android SDK丢到opt应该就没事了。

继续阅读“调整Linux磁盘分区大小”

解决Linux首次登陆无法打开应用程序,与注销后再次登陆无声音的问题

实验室的台式机一直有点毛病,开机后首次登陆,桌面本身能够打开,KDE上次登出前保留的那些窗口也能打开,但无法打开新窗口。在上次登出时保留的那个Konsole中启动xclock,得到错误如下:

Xlib: Invalid MIT-MAGIC-COOKIE-1 balabalabala

另外,只有第一次登陆声音是正常的,再次登陆后就会出现音频服务未启动。我本来以为是Linux对双显+HDMI音频支持的不好,再加上也不是很频繁,就一直没仔细看。然而这周问题出的却相当频繁,所以我觉得有必要处理一下了。

继续阅读“解决Linux首次登陆无法打开应用程序,与注销后再次登陆无声音的问题”