Living a Simple Life is a Happy Life

有饭吃,自由自在,就非常开心

Ios Dev and Xcode Cheat

| Comments

自学Swfit开发了一个App,记录一下坑:

  • Swift和ObjectC混编的时候,检查 ProjectName--Bridging-Header.h 文件是否被指定为桥接文件 : Target-> Build Settings ->Swift Compiler -> Install Object-C Compatibility Header 设置为Yes, Target->Build Settings -> Swift Compiler ->Object-C Briding Header 是否设置为这个文件

  • xxx-Bridging-header.h 文件内容一般是 swift的头文件和公共的头文件,内容一般是

1
#import "xxx.h"
  • 当引用类似 #import "happynet-Swfit.h" 提示找不到的时候, 请检查引用次序,类似:
1
2
3
4
5
@import TestDylib;

#include "xxx-Swift.h"

#import "xxxmanager.h"
  • 编译提示少符号的时候,检查 Target-> Build Phases-> Compile Sources 是否把所有文件添加进去了
  • 调试第三方库,例如Tunnel的时候,先用 Debug->Attach To Process by PID Or Name 挂载进程
  • 如果是线程错误,xcode会弹出一个Text Table,显示汇编指令哪一行有问题,同时临近的Table回显示代码文件中对应的哪一行,一般是淡绿色标注那一行
  • 如果出现莫名其妙的编译错误,先Build -> Clean Build xxx;清理一下,重新编译试试

Fix Connection Error Between Ipad and Macbook

| Comments

iOS真机调试,Mac连上iPad一直闪,信任不了设备问题

打开终端Terminal,输入

1
$ sudo killall -STOP -c usbd

命令回车,即可把进程关闭。插上iPhone,正常连接,问题解决。

Fix LVM Disks Missing Under /dev/xxx in PVE7.1

| Comments

PVE7.1,重启后 LVM thinpool 丢掉了一块VM Disk;

解决方法:

1
2
lvchange -an storagename
vgchange -ay storagename

参考:

https://www.mail-archive.com/debian-bugs-dist@lists.debian.org/msg1807169.html https://www.reddit.com/r/Proxmox/comments/ot6lfr/lvm_issues_after_upgrade_disks_missing_under/

Migrate PVE Storage From ZFS to Lvm

| Comments

之前PVE的存储我用ZFS做了三个pool,一个RaidZ1,两个Raid0;

我的PVE内核版本为 5.13.19-6-pve;

实际用下来有一个大槽点;

就是对于12T以上的单盘,ZFS每次写入的时候都会炒豆子音大爆发,放在家里实在不是什么好体验;而且我一直有个困扰已久的问题没有解决;就是ZFS强壮是强壮;但是对于其dataset的管理方式,无论是send还是destroy,每个操作都会有长时间的卡顿lock;另外相对于读性能,不知道为什么,我的RaidZ1写性能一直没有达到单盘读写能力,我加了ARC、ZIL,各种方法都折腾了一遍,但是效果都不好; 还有一个最大的问题,就是虚拟机多了之后,比如我同时对20台虚拟机做硬盘迁移操作;ZFS的lock太严重了,比如我同时delete两个虚拟硬盘,必定lock timeout;这个lock timeout 60s的限制,没有找到设置的地方,只能硬改代码,非常tricky;而不用后台命令,PVE的web UI对于并行操作的支持不好,所以降低磁盘并行操作的locktime非常必要;

Rsync Cheat

| Comments

这条命令我用了不下百次了,但是每次还得查,老年痴呆的前兆,/(ㄒoㄒ)/~~

1
rsync -acvruP --progress /opt/src1 /opt/src2  /mnt/dest/
  • -c, –checksum 打开校验开关,强制对文件传输进行校验; 开了前置计算会很慢,文件多的时候不要用
  • -a, –archive 归档模式,表示以递归方式传输文件,并保持所有文件属性,等于-rlptgoD
  • -r, –recursive 对子目录以递归模式处理
  • -u, –update 仅仅进行更新,也就是跳过所有已经存在于DST,并且文件时间晚于要备份的文件。(不覆盖更新的文件);已经有拷贝了一半的文件的情况下不要用,不会自动更新

最后,要注意路径中的斜杠处理:

1
rsync -acvruP --progress /opt/src1 /mnt/dest/

与下面的命令是不一样的

1
rsync -acvruP --progress /opt/src1/ /mnt/dest/

前者会拷贝src1目录,后者会拷贝src1目录下的文件,但是不会带src1

ZFS Cheat

| Comments

特别提示

在各种折腾之前,先看看你买的大容量硬盘自带的缓存开了没有;有一些矿盘,不知道是何原因,默认缓存没有开

1
2
3
4
5
# 查看是否开了写缓存
$ hdparm -W /dev/sdx

# 开启
$ hdparm -W1 /dev/sdx

然后,看看你的SATA接口当前速率是2.0还是3.0,有人就是这么粗心,拿着3.0的盘,插着2.0的线;

1
$ smartctl -a /dev/sdx

ZFS 使用命令小集

列出zpool磁盘

1
zfs list

查看pool状态

1
zpool status

Lnd Low Rescan Speed for Startup

| Comments

Lnd启动的时候需要扫描最近数百个区块来验证安全性,做rescan动作的时候慢的出奇,有时候需要30分钟才能完成这个动作:

https://github.com/lightningnetwork/lnd/issues/760

如果单独启动Lnd可以耐着性子等,但是如果用Lit(lightning-network-termial) 启动的话,因为它集成了数个服务,所以在等Lnd RPC服务就绪前,往往等不到扫描完毕就超时退出了…

因为Lit Debug Log没有打全,我对于这个问题百思不得其解,其在bitcoin Regnet, Testnet, Mainnet上面的表现各不相同….

最后找到的一劳永逸的解决办法有两个:

  1. 换btcd,不要用bitcoin core了

  2. 换ssd硬盘,花钱解决

话说,bitcoin core还好一点,Ethereum一个全节点的成本已经越来越高了,硬盘需求已经直奔2T SSD了;对于个人来说,在AWS上启动一个2T云硬盘的vps着实花费不小;

How to Allow Non-root Process to Bind to Low-numbered Ports

| Comments

Use CAP_NET_BIND_SERVICE to grant low-numbered port access to a process:

With this you can grant permanent access to a specific binary to bind to low-numbered ports via the setcap command:

1
sudo setcap CAP_NET_BIND_SERVICE=+eip /path/to/binary

For more details on the e/i/p part, see cap_from_text.

After doing this, /path/to/binary will be able to bind to low-numbered ports. Note that you must use setcap on the binary itself rather than a symlink.

FROM:

https://superuser.com/questions/710253/allow-non-root-process-to-bind-to-port-80-and-443

How to Hide a Password Passed as Command Line Argument?

| Comments

有部分软件设计的时候没有考虑命令行参数之外传递密码的途径,无法用环境变量或配置传递密码;导致任何用户用ps一看都能看到,这是重大的安全隐患;

解决方法很tricky:

https://serverfault.com/questions/592744/how-to-hide-a-password-passed-as-command-line-argument

https://stackoverflow.com/questions/3830823/hiding-secret-from-command-line-parameter-on-unix

做软件设计的时候一定要考虑命令行传递密码的替代方案;