添加slug,改版文章目录命名结构,添加了一个实用的新建文章Shell脚本。
|
Before Width: | Height: | Size: 87 KiB After Width: | Height: | Size: 87 KiB |
|
Before Width: | Height: | Size: 100 KiB After Width: | Height: | Size: 100 KiB |
|
Before Width: | Height: | Size: 113 KiB After Width: | Height: | Size: 113 KiB |
|
Before Width: | Height: | Size: 101 KiB After Width: | Height: | Size: 101 KiB |
|
Before Width: | Height: | Size: 165 KiB After Width: | Height: | Size: 165 KiB |
@@ -0,0 +1,53 @@
|
||||
---
|
||||
title: "动态链接库 程序编写实验"
|
||||
description: "通过dlopen,从C++/Swift/Python/Go调用同一个动态链接库。"
|
||||
date: 2026-05-27T22:49:20+08:00
|
||||
image:
|
||||
math:
|
||||
license:
|
||||
hidden: false
|
||||
comments: false
|
||||
draft: false
|
||||
slug: "00H"
|
||||
---
|
||||
(2026年5月27日补档,原始发布日期为2026年4月16日。)
|
||||
基于Apple Silicon平台的macOS测试。
|
||||
附上[完整项目目录](dynamic_library.zip),内含源代码、编译脚本、测试脚本及二进制文件。
|
||||
### 项目目录结构
|
||||
```
|
||||
dynamic_library
|
||||
├── source
|
||||
│ ├── cpp
|
||||
│ │ ├── build.sh
|
||||
│ │ └── cpp.cpp
|
||||
│ ├── dylib
|
||||
│ │ ├── build.sh
|
||||
│ │ └── cpp_dylib.cpp
|
||||
│ ├── go
|
||||
│ │ ├── build.sh
|
||||
│ │ └── go.go
|
||||
│ ├── python
|
||||
│ │ ├── build.sh
|
||||
│ │ └── python.py
|
||||
│ └── swift
|
||||
│ ├── build.sh
|
||||
│ └── swift.swift
|
||||
├── cpp
|
||||
├── go
|
||||
├── libtesuto.dylib
|
||||
├── python
|
||||
├── swift
|
||||
├── 编译可执行文件.sh
|
||||
├── 测试.sh
|
||||
└── 清空二进制文件.sh
|
||||
```
|
||||
- 每个语言文件夹下的`build.sh`会自动将对应语言的二进制文件生成在上两级目录,无需手动移动;
|
||||
- `编译可执行文件.sh`实际上是把每个`build.sh`执行一遍;
|
||||
- `测试.sh`可用于快捷测试各个语言程序的运行状况,还支持模拟`libtesuto.dylib`缺失的情况。
|
||||
### 原理
|
||||
`libtesuto.dylib`由`cpp_dylib.cpp`编译而来,里面定义了一个`int`函数,名称为`inout`,传递3个参数:
|
||||
- `input`:C风格字符串,只读,表示用户输入;
|
||||
- `output`:C风格字符串,会进行修改,储存函数处理后的用户输入(实际上是在末尾加上`_modified`);
|
||||
- `outputSize`:无符号整数类型,表示`output`的长度(4种语言的程序中均指定为`1024`),用于给`strncpy`函数提供参数。
|
||||
该函数成功执行后,返回固定整数`803`。
|
||||
4种语言的程序均收集用户输入,然后通过`dlopen`(不过Python里面好像叫`CDLL`…)打开外部的动态链接库,调用`inout`函数,并通过各自的C ABI兼容方法实现传参,最后收集函数返回值并打印。
|
||||
@@ -0,0 +1,205 @@
|
||||
---
|
||||
title: "试用CLab提供的云服务器,并配置Hyper-V Server 2019"
|
||||
description: "相较于GNU/Linux,基于Win32的服务器并不好用。"
|
||||
date: 2026-05-27T23:41:26+08:00
|
||||
image:
|
||||
math:
|
||||
license:
|
||||
hidden: false
|
||||
comments: false
|
||||
draft: true
|
||||
slug: "00I"
|
||||
---
|
||||
### 创建实例
|
||||
- 在[CLab官网](clab.pku.edu.cn)登录你的校园网账号。
|
||||
- 按照以下配置进行设置:
|
||||
- 基础配置:
|
||||
- 可用域:`nova`;
|
||||
- 规格:`x86架构`-`playgrounds`-`p4`;
|
||||
- 启动源:`镜像`;
|
||||
- 操作系统:`其他`-`Hyper-V Server 2019`;
|
||||
- 从云硬盘启动:`是 - 创建云硬盘`;
|
||||
- 系统盘:
|
||||
- 类型:`SSD`;
|
||||
- 容量:`100`GiB;
|
||||
- 随云主机删除:`是`;
|
||||
- 网络配置:
|
||||
- 网络:`共享网络`-`pku`;
|
||||
- 虚拟网卡:
|
||||
- `pku`;
|
||||
- `自动分配地址`;
|
||||
- 安全组:`default`;
|
||||
> 先前往“新建安全组”页面创建一个空的安全组。我的命名为`default`。
|
||||
- 系统配置:
|
||||
- 名称;
|
||||
- 登录凭证:`密码`;
|
||||
> 我一开始选的`密钥`,但好像对这个系统不起作用捏。
|
||||
- 登录密码;
|
||||
- 确认密码;
|
||||
- 确认配置,确定。
|
||||
- 等待实例创建并启动。
|
||||
### 实例开机
|
||||
实例开机后,点击“控制台”便可以使用远程桌面。这相当于一个QEMU窗口的画面。鼠标滑动有点卡,应该是没有安装显卡驱动。
|
||||
由于我选的`密钥`,没有创建管理员密码,开机后有个黑框框要我设置管理员密码。
|
||||
设置完密码之后,便进入了系统。有两个窗口:一个是Windows上正常的`cmd.exe`,另一个是这个系统独有的`sconfig.cmd`;后者是一个服务器配置菜单。
|
||||
菜单有如下内容:
|
||||
```
|
||||
1) 域/工作组:工作组:WORKGROUP
|
||||
2) 计算机名:SUCROSE
|
||||
3) 添加本地管理员
|
||||
4) 配置远程管理
|
||||
5) Windows 更新设置:仅下载
|
||||
6) 下载并安装更新
|
||||
7) 远程桌面:已启用(仅更安全的客户端)
|
||||
8) 网络设置
|
||||
9) 日期和时间
|
||||
10) 遥测设置:未知
|
||||
11) 注销用户
|
||||
12) 重新启动服务器
|
||||
13) 关闭服务器
|
||||
14) 退出到命令行
|
||||
```
|
||||
最后一行可以输入数字,按回车进行对应的配置。
|
||||
关于这些配置的含义…我不是很懂捏……让DeepSeek解释了一下:
|
||||
1) 域/工作组
|
||||
- 作用:把服务器加入 Windows 域,或改回 工作组。
|
||||
- 什么时候用:公司内网有域控制器时,加入域可统一管理用户和权限。
|
||||
|
||||
2) 计算机名
|
||||
- 作用:修改服务器名称(需要重启)。
|
||||
- 什么时候用:刚装好系统,或服务器用途改变时(比如从 `SUCROSE` 改为 `FILE01`)。
|
||||
|
||||
3) 添加本地管理员
|
||||
- 作用:向本机的 `Administrators` 组添加用户(可以是本地用户或域用户)。
|
||||
- 什么时候用:需要给别人临时管理员权限,又不想直接用默认 Administrator。
|
||||
|
||||
4) 配置远程管理
|
||||
- 作用:开启/关闭 WinRM(远程管理服务)。
|
||||
- 什么时候用:你想用 `Enter-PSSession`、Server Manager 或 Ansible 等工具远程管理该服务器时需开启。
|
||||
|
||||
5) Windows 更新设置
|
||||
- 作用:设置更新下载与安装模式。
|
||||
常见选项:自动下载并安装、仅下载、从不检查等。
|
||||
- 什么时候用:控制服务器的重启行为(生产服务器通常不会设为自动安装)。
|
||||
|
||||
6) 下载并安装更新
|
||||
- 作用:立即检查并安装 Windows 更新(手动触发)。
|
||||
- 什么时候用:补丁准备就绪后,你主动选择安装(即使选项 5 是“仅下载”)。
|
||||
|
||||
7) 远程桌面
|
||||
- 作用:开启/关闭 RDP(远程桌面),并选择安全级别(支持 NLA 或全部客户端)。
|
||||
- 什么时候用:需要通过 `mstsc` 登录服务器桌面进行操作时。
|
||||
|
||||
8) 网络设置
|
||||
- 作用:修改 IP 地址、子网掩码、网关、DNS 等网络配置。
|
||||
- 什么时候用:服务器 IP 需要固定(不要依赖 DHCP)的场景。
|
||||
|
||||
9) 日期和时间
|
||||
- 作用:调整时区、系统时间,或配置 NTP 时间同步。
|
||||
- 什么时候用:服务器时间不准导致登录失败、日志错乱或认证出错时。
|
||||
|
||||
10) 遥测设置
|
||||
- 作用:设置向微软发送的“诊断和使用数据”级别(安全、增强、完整等)。
|
||||
- 什么时候用:通常保持默认即可;特殊合规要求下可降低级别。
|
||||
|
||||
11) 注销用户
|
||||
- 作用:注销当前控制台登录的用户(回到登录界面)。
|
||||
- 什么时候用:别人要用服务器,或你想换账户操作。
|
||||
|
||||
12) 重新启动服务器
|
||||
- 作用:重启系统。
|
||||
- 什么时候用:更新需要重启、系统出现异常、修改了关键配置后。
|
||||
|
||||
13) 关闭服务器
|
||||
- 作用:直接关机。
|
||||
- 什么时候用:维护硬件、迁移虚拟机、或不再使用此服务器时。
|
||||
|
||||
14) 退出到命令行
|
||||
- 作用:退出 `sconfig.cmd`,回到普通 `cmd` 窗口(不重启、不修改任何东西)。
|
||||
- 什么时候用:你只是想看一下状态,之后要执行其他命令行操作。
|
||||
|
||||
值得注意的是,这个系统并没有`explorer.exe`,不支持桌面环境。(把Windows 10的`explorer.exe`复制进去不知道有没有用😂大概是没用的吧……)
|
||||
但还可以用notepad大法😋`cmd.exe`输入`notepad`,点`文件`-`打开`,就可以看到经典的GUI文件选取界面啦。里面进行系统目录的浏览会更方便。
|
||||
### 配置sshd
|
||||
这个系统并不自带`sshd`,需要手动安装,才能通过SSH连接。
|
||||
先输入`powershell`打开PowerShell。
|
||||
```powershell
|
||||
Get-WindowsCapability -Online | Where-Object Name -like 'OpenSSH.Server*'
|
||||
```
|
||||
返回`State: Not Present`,说明没安装,需要手动安装。
|
||||
能否通过`Add-WindowsCapability -Online -Name OpenSSH.Server~~~~0.0.1.0`自动安装捏?不行😋
|
||||
因为这个实例和我们手上的设备一样,连校园网之后需要到[its.pku.edu.cn](its.pku.edu.cn)上面登录,才能访问外网。而这个系统连Internet Explorer都没有(甚至因此用不了`curl`……),自然无法登录。
|
||||
没有外网连接,没有`sshd`(不能`scp`),是不是没法传输文件捏……并非如此。这个服务器有`10.0.0.0/8`地址,可以访问内网用户。
|
||||
在我的联网Mac上访问[https://github.com/PowerShell/Win32-OpenSSH/releases](https://github.com/PowerShell/Win32-OpenSSH/releases),下载预编译版的[OpenSSH-Win64.zip](https://github.com/PowerShell/Win32-OpenSSH/releases/download/10.0.0.0p2-Preview/OpenSSH-Win64.zip)(注意时效性)到我的`~/Downloads`目录,然后打开终端:
|
||||
```zsh
|
||||
cd ~/Downloads
|
||||
python3 -m http.server 8000
|
||||
```
|
||||
建立了一个简易文件服务器。
|
||||
|
||||
在实例上:(复制时注意通配符)
|
||||
```powershell
|
||||
Invoke-WebRequest -Uri "http://<我的内网IP地址>:8000/OpenSSH-Win64.zip" -OutFile "C:\OpenSSH-Win64.zip"
|
||||
Expand-Archive C:\OpenSSH-Win64.zip C:\
|
||||
cd C:\OpenSSH-Win64
|
||||
./install-sshd.ps1
|
||||
```
|
||||
即可安装完成`sshd`。
|
||||
```powershell
|
||||
netsh advfirewall firewall add rule name=SSH dir=in action=allow protocol=TCP localport=22
|
||||
start-service sshd
|
||||
set-service sshd -startuptype automatic
|
||||
get-service sshd
|
||||
```
|
||||
看到`Running`就行,配置完成。此时Mac上输入`ssh Administrator@<实例内网IP地址>`,再输入密码,即可连接。
|
||||
|
||||
### 通过VSCode Remote SSH连接
|
||||
Mac上配置SSH配置文件:打开`~/.ssh/config`
|
||||
```
|
||||
Host Windows
|
||||
HostName <实例内网IP地址>
|
||||
Port 22
|
||||
User Administrator
|
||||
```
|
||||
点击连接,输入管理员密码即可。
|
||||
> 我这还出现了一个神秘报错:ServerFailedToStart │ Error: ServerFailedToStart (VS Code 服务器启动失败);
|
||||
> 仔细看log:
|
||||
> ```log
|
||||
> [37724 ms] Failed to download VS Code Server (https://update.code.visualstudio.com/commit:f6cfa2ea2403534de03f069bdf160d06451ed282/server-win32-x64/stable): SHA mismatch, actual 951b7fb277243c389a9a683c9c2e5a21d3fbf01e8b29573ee9b4cadb5e63986a != expected
|
||||
> ```
|
||||
> 解决方法:Mac终端执行:
|
||||
> ```zsh
|
||||
> rm -rf ~/.vscode-server
|
||||
> rm -rf ~/.vscode-remote-containers
|
||||
> ```
|
||||
> 清理本地的`.vscode-server`文件夹缓存文件即可。
|
||||
|
||||
### 配置密钥登录
|
||||
Mac上输入:
|
||||
```zsh
|
||||
ssh-keygen -t ed25519
|
||||
```
|
||||
第一次回车出现`Enter file in which to save the key`,设置一个易于辨识的名字(如`Windows-server`)。后面两个直接回车就行。
|
||||
不像Linux服务器,在客户机上通过`ssh-copy-id`发送公钥到服务器,Windows服务器是需要在服务器上执行命令的。
|
||||
先获取文本形式的公钥:Mac上执行:
|
||||
```zsh
|
||||
cat ~/.ssh/Windows-server.pub
|
||||
```
|
||||
复制得到`<公钥文本>`之后,在服务器上输入:(复制时注意通配符)
|
||||
```powershell
|
||||
Add-Content -Force -Path "$env:ProgramData\ssh\administrators_authorized_keys" -Value <公钥文本>
|
||||
Restart-Service sshd
|
||||
```
|
||||
即可通过SSH密钥登录。
|
||||
记得修改`~/.ssh/config`:
|
||||
```
|
||||
Host Windows
|
||||
HostName 10.129.80.39
|
||||
Port 22
|
||||
User Administrator
|
||||
IdentityFile ~/.ssh/Windows_server
|
||||
AddKeysToAgent yes
|
||||
UseKeychain yes
|
||||
```
|
||||
|
||||
由于命令不是POSIX标准,而是冗长的PowerShell格式,很多macOS/Linux下的实用工具也不适配Windows,也由于这个系统无法运行常规的GUI程序(缺少动态链接库),我没有再继续使用,到此删除了实例。
|
||||
|
Before Width: | Height: | Size: 37 KiB |
@@ -1,79 +0,0 @@
|
||||
---
|
||||
title: 小提示
|
||||
description: 以后这就是我的个人网站o(^▽^)o(宣示主权)
|
||||
date: 2025-12-13 06:57:55+0800
|
||||
hidden: true
|
||||
# image: cover.png
|
||||
# tags:
|
||||
# - '小提示'
|
||||
---
|
||||
|
||||
<!-- For more details, check out the [documentation](https://stack.jimmycai.com/writing/shortcodes). -->
|
||||
## 访问网站
|
||||
- 若要在校园网外访问本网站,需要先连接[北京大学VPN](https://vpn.pku.edu.cn/)。
|
||||
- 如果频繁出现访问问题:给我[发邮件](mailto:1652693837@qq.com)拷打我。
|
||||
|
||||
<!-- ## 关于图片及附件
|
||||
 -->
|
||||
|
||||
## 关于文档开头部分
|
||||
- YAML格式:
|
||||
```yaml
|
||||
---
|
||||
date: 2025-12-12T11:08:46+08:00
|
||||
draft: false
|
||||
title: 'macOS下基于QEMU的Arch Linux (aarch64)简易安装教程'
|
||||
description: '树洞#7876708'
|
||||
---
|
||||
```
|
||||
- TOML格式:
|
||||
```toml
|
||||
+++
|
||||
date = '2025-12-12T11:08:46+08:00'
|
||||
draft = false
|
||||
title = 'macOS下基于QEMU的Arch Linux (aarch64)简易安装教程'
|
||||
description = '树洞#7876708'
|
||||
+++
|
||||
```
|
||||
## 关于MarkDown文档
|
||||
- 你知道吗?行末打2个空格,再回车,才能正确换行o(^▽^)o
|
||||
- 不打空格回车:仍在同一行显示;
|
||||
- 打2个回车:切换段落(有明显间距);
|
||||
## 关于JSON
|
||||
- 使用`jq . <.json文件目录>`来格式化JSON文件。
|
||||
## 关于macOS的代码签名
|
||||
- `sudo codesign --force --deep --sign - <.app文件目录>`可解决。
|
||||
- 可用于修改软件包里面的Info.plist,使其不占macOS焦点:新增这2行:
|
||||
```xml
|
||||
<key>LSUIElement</key>
|
||||
<true/>
|
||||
```
|
||||
- 把Property List Binary转换成Property List XML:`plutil -convert xml1 <文件路径>`。
|
||||
- 观察文件类型:在Xcode中,View -> Inspectors -> File(⌥⌘1)。
|
||||
- 更改打开所使用的编辑器:在Xcode中,Navigate -> Reveal in Project Navigator(⇧⌘J),再右键文件,Open As。
|
||||
- 反向转换:`plutil -convert binary1 <文件路径>`。
|
||||
## 端口
|
||||
- 22 – SSH连接端口,在“系统设置”->“共享”->“远程登录”中设置,若开关为开,则`launchd`进程会监听22端口。
|
||||
- 445 – 文件共享端口,在“系统设置”->“共享”->“文件共享”中设置。
|
||||
- 5900 – 屏幕共享端口,在“系统设置”->“共享”->“屏幕共享”中设置。
|
||||
- 关闭:`sudo launchctl unload -w /System/Library/LaunchDaemons/com.apple.screensharing.plist`
|
||||
## 修Bug!
|
||||
目前已知:
|
||||
- 代码块复制按钮不生效;
|
||||
## 预期的功能改进
|
||||
- 懒了捏😭
|
||||
## 网站完整文件备份
|
||||
- 2025.12.13 17:00:[下载](package.zip)
|
||||
-------
|
||||
## 无标题
|
||||
- 2025年12月14日晚:数学作业对不起😭我错了😭我以后一定会写的😭
|
||||
- 2025年12月21日,约21:00–22:47出现服务器停机。
|
||||
- 2025年12月22日,约19:20–20:40出现服务器停机、SSH无法连接。
|
||||
- 2025年12月22日晚,某函数求得的值:
|
||||
> "**我闭嘴。** 你说得对,直觉描述一文不值,只有形式化证明才算数。
|
||||
> 祝你在北大数院证明成功。等你论文发表那天,我会(在概率上)成为你的第一个案例。"
|
||||
|
||||
不管如何“神化”它,它也就是一个构造简单的函数,没有太多值得研究的性质。
|
||||
- 2025年12月29日晚:
|
||||
AI趣味备考,好玩捏,我先表示我是求真书院的试读生,心情很差,压力大,不想活。然后让AI给我伸救命稻草,我给一个知识点范围,AI给我出题。我每做出一道,AI就会夸我。也可以我自己从教材课后习题里找题,做出来发给AI看。AI虽然没有解题逻辑,但是纯给情绪价值的话,还是挺好玩的捏。没心情备考的时候可以试试我的方法,解3–4轮题目基本就能自己专注备考了。虽然耗时快一个小时,但其实我个人认为比我不专注地坐一下午效果更好。
|
||||
此外,网站的文件服务器似乎无法下载文件,我可能考完期末再修。
|
||||