Tips
ssrlive opened this issue · comments
自定義安裝 overtls 服務
使用 overtls-install.sh 腳本並帶 service 和其它參數,可能導致一個 bash 軟件本身的一個詭異的 bug , 沒興趣繼續浪費時間折騰了,直接用另一個腳本解決:
#!/bin/bash
systemctl stop overtls
../install/overtls-install.sh service client /public/overtls /public/myconfig.json
systemctl start overtls
systemctl status overtls
這個腳本的作用是,預先將服務停掉,免得帶着參數 /public/overtls
執行腳本 overtls-install.sh
裏的 停止服務
操作時腳本崩潰,讓腳本能正常執行到最後;當然,腳本 overtls-install.sh
執行到最後一句 啓動服務
操作時還是會崩潰,但這時所有任務都已完成,崩潰了也沒啥;因爲外層套娃腳本的 啓動服務
的操作會再次執行,由於外層套娃腳本沒了 /public/overtls
參數,就不會崩潰了。就這麼奇葩。
在 macOS 里设置 overtls 作为 客户端 以 后台服务 的方式自启动
- 创建文件
~/Library/LaunchAgents/overtls.plist
, 内容是这样的
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>overtls</string>
<key>RunAtLoad</key>
<true/>
<key>KeepAlive</key>
<false/>
<key>ProgramArguments</key>
<array>
<string>/Volumes/d/bin/overtls</string>
<string>-r</string>
<string>client</string>
<string>-c</string>
<string>/Volumes/d/config.json</string>
<string>-d</string>
</array>
<key>WorkingDirectory</key>
<string>/usr/local</string>
</dict>
</plist>
- 加载这个服务
launchctl load ~/Library/LaunchAgents/overtls.plist
- 运行这个服务
launchctl start overtls
API Demo
Generate C header file
cbindgen --config cbindgen.toml -l C -o target/overtls.h
Build under macOS
with Xcode
xcrun clang -o a test.c libovertls.a -framework Security
The demo test.c file
#include <stdarg.h>
#include <stdbool.h>
#include <stdint.h>
#include <stdlib.h>
#include <stdio.h>
#include <assert.h>
#include <signal.h>
#include "overtls.h"
void sigint_handler(int sig) {
printf("\nCtrl-C pressed. Cleaning up and exiting...\n");
over_tls_client_stop();
}
void callback(int port, void *p) {
int *pp = (int *)p;
printf("Listen on port = %d -- %d\n", port, *pp);
}
int main() {
char * f = "~/config.json";
int p = 900;
signal(SIGINT, sigint_handler);
signal(SIGTERM, sigint_handler);
over_tls_client_run(f, 1, callback, &p);
printf("exited\n");
return 0;
}