MarkBase架构升级:Multi-Volume Virtual Tree + Dual-View Management + Git Remote修正
核心功能: - ✅ Categories/Series双视图管理(category_view.rs + import_markdown.rs) - ✅ FUSE Multi-Volume支持(tree_type参数) - ✅ SSH/SFTP/SCP/rsync协议完整实现(4042行) - ✅ NFS/SMB Module Phase 1-3完成 - ✅ Archive Module Phase 1-4完成(2916行) - ✅ Download Center API完整实现 - ✅ S3兼容API实现(560行) Git配置修正: - ✅ 删除错误origin(gitea.momentry.ddns.net) - ✅ 删除m5max128(指向机器名) - ✅ 设置origin = m5max128gitea.momentry.ddns.net/admin/markbase - ✅ 设置m4minigitea = m4minigitea.momentry.ddns.net/warren/markbase 数据清理: - ✅ 删除38个临时SQLite(保留accusys.sqlite、demo.sqlite) - ✅ 删除.bak、test_*.bin、调试脚本等临时文件 - ✅ 删除临时目录(build/、download files/、raid_test/等) - ✅ 更新.gitignore排除临时文件 架构优化: - 52个文件修改,2434行新增,4739行删除 - Workspace成员整合(16个crate) - 数据库状态:accusys.sqlite保留(主demo测试) 远程同步: - ✅ 准备推送到m5max128gitea(远程Gitea) - ✅ 准备推送到m4minigitea(本地Gitea)
This commit is contained in:
85
scripts/create_app_bundle.sh
Executable file
85
scripts/create_app_bundle.sh
Executable file
@@ -0,0 +1,85 @@
|
||||
#!/bin/bash
|
||||
# scripts/create_app_bundle.sh
|
||||
# 创建System Extension .app Bundle
|
||||
|
||||
set -e
|
||||
|
||||
echo "=== 创建System Extension .app Bundle ==="
|
||||
|
||||
# 配置
|
||||
BUNDLE_ID="com.momentry.markbase.fskit"
|
||||
TEAM_ID="K3TDMD9Y6B"
|
||||
APP_NAME="MarkBaseFSKit.app"
|
||||
BINARY="target/release/fskit_mount"
|
||||
APP_DIR="build/${APP_NAME}"
|
||||
|
||||
echo ""
|
||||
echo "配置信息:"
|
||||
echo " Bundle ID: ${BUNDLE_ID}"
|
||||
echo " Team ID: ${TEAM_ID}"
|
||||
echo " Binary: ${BINARY}"
|
||||
|
||||
# 检查binary是否存在
|
||||
if [ ! -f "${BINARY}" ]; then
|
||||
echo "❌ Binary不存在:${BINARY}"
|
||||
echo " 需要先构建Rust binary"
|
||||
echo " 运行:cargo build --release --bin fskit_mount"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo ""
|
||||
echo "步骤1: 创建.app bundle结构..."
|
||||
mkdir -p "${APP_DIR}/Contents/MacOS"
|
||||
mkdir -p "${APP_DIR}/Contents/Resources"
|
||||
|
||||
echo ""
|
||||
echo "步骤2: 复制binary到.app..."
|
||||
cp "${BINARY}" "${APP_DIR}/Contents/MacOS/MarkBaseFSKit"
|
||||
chmod +x "${APP_DIR}/Contents/MacOS/MarkBaseFSKit"
|
||||
|
||||
echo ""
|
||||
echo "步骤3: 创建Info.plist..."
|
||||
cat > "${APP_DIR}/Contents/Info.plist" << '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>CFBundleIdentifier</key>
|
||||
<string>com.momentry.markbase.fskit</string>
|
||||
<key>CFBundleName</key>
|
||||
<string>MarkBaseFSKit</string>
|
||||
<key>CFBundleVersion</key>
|
||||
<string>1.0</string>
|
||||
<key>CFBundleShortVersionString</key>
|
||||
<string>1.0</string>
|
||||
<key>CFBundleExecutable</key>
|
||||
<string>MarkBaseFSKit</string>
|
||||
<key>CFBundlePackageType</key>
|
||||
<string>APPL</string>
|
||||
<key>LSMinimumSystemVersion</key>
|
||||
<string>10.15</string>
|
||||
<key>NSHighResolutionCapable</key>
|
||||
<true/>
|
||||
<key>NSSystemExtension</key>
|
||||
<true/>
|
||||
<key>NSSystemExtensionUsageDescription</key>
|
||||
<string>MarkBaseFSKit provides virtual filesystem mounting functionality.</string>
|
||||
</dict>
|
||||
</plist>
|
||||
PLIST
|
||||
|
||||
echo ""
|
||||
echo "步骤4: 复制entitlements.plist..."
|
||||
cp entitlements.plist "${APP_DIR}/Contents/entitlements.plist"
|
||||
|
||||
echo ""
|
||||
echo "步骤5: 验证.app bundle结构..."
|
||||
ls -la "${APP_DIR}/Contents/"
|
||||
|
||||
echo ""
|
||||
echo "✅ .app Bundle已创建:${APP_DIR}"
|
||||
ls -lh "${APP_DIR}/Contents/MacOS/MarkBaseFSKit"
|
||||
|
||||
echo ""
|
||||
echo "下一步:"
|
||||
echo " 运行 ./scripts/sign_app.sh 进行签名"
|
||||
45
scripts/generate_csr.sh
Executable file
45
scripts/generate_csr.sh
Executable file
@@ -0,0 +1,45 @@
|
||||
#!/bin/bash
|
||||
# scripts/generate_csr.sh
|
||||
# 生成Certificate Signing Request (CSR)
|
||||
|
||||
echo "=== 生成 CSR 文件 ==="
|
||||
|
||||
# 检查openssl
|
||||
if ! command -v openssl &> /dev/null; then
|
||||
echo "❌ openssl未安装"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# 设置输出目录
|
||||
OUTPUT_DIR=~/Desktop
|
||||
KEY_FILE="${OUTPUT_DIR}/markbase_developer.key"
|
||||
CSR_FILE="${OUTPUT_DIR}/markbase_developer.csr"
|
||||
|
||||
# 生成私钥和CSR
|
||||
openssl req -new -newkey rsa:2048 -nodes \
|
||||
-keyout "${KEY_FILE}" \
|
||||
-out "${CSR_FILE}" \
|
||||
-subj "/emailAddress=warren@momentry.ddns.net/CN=MarkBase Development/O=Momentry/C=TW"
|
||||
|
||||
# 检查生成结果
|
||||
if [ -f "${CSR_FILE}" ] && [ -f "${KEY_FILE}" ]; then
|
||||
echo ""
|
||||
echo "✅ CSR文件已生成:"
|
||||
echo " ${CSR_FILE}"
|
||||
echo ""
|
||||
echo "✅ 私钥文件已生成:"
|
||||
echo " ${KEY_FILE}"
|
||||
echo ""
|
||||
echo "下一步操作:"
|
||||
echo "1. 打开 Apple Developer Portal → Certificates"
|
||||
echo "2. 点击 + 按钮"
|
||||
echo "3. 选择 'Mac App Development'"
|
||||
echo "4. 上传 ${CSR_FILE}"
|
||||
echo "5. Portal会生成 .cer 文件"
|
||||
echo "6. 下载到 ~/Downloads/"
|
||||
echo ""
|
||||
echo "⚠️ 私钥文件请妥善保管(不要上传到Portal)"
|
||||
else
|
||||
echo "❌ CSR生成失败"
|
||||
exit 1
|
||||
fi
|
||||
44
scripts/generate_csr_final.sh
Executable file
44
scripts/generate_csr_final.sh
Executable file
@@ -0,0 +1,44 @@
|
||||
#!/bin/bash
|
||||
# scripts/generate_csr_final.sh
|
||||
# 生成 Certificate Signing Request (CSR) for MarkBaseFS
|
||||
|
||||
echo "=== 生成 CSR 文件 ==="
|
||||
echo ""
|
||||
echo "Team ID: K3TDMD9Y6B"
|
||||
echo "Bundle ID: com.momentry.markbase.fskit"
|
||||
echo ""
|
||||
|
||||
# 设置输出目录
|
||||
OUTPUT_DIR=~/Desktop
|
||||
KEY_FILE="${OUTPUT_DIR}/markbase_developer.key"
|
||||
CSR_FILE="${OUTPUT_DIR}/markbase_developer.csr"
|
||||
|
||||
# 生成私钥和CSR
|
||||
openssl req -new -newkey rsa:2048 -nodes \
|
||||
-keyout "${KEY_FILE}" \
|
||||
-out "${CSR_FILE}" \
|
||||
-subj "/emailAddress=warren@momentry.ddns.net/CN=MarkBaseFS Development/O=Momentry/C=TW"
|
||||
|
||||
# 检查生成结果
|
||||
if [ -f "${CSR_FILE}" ] && [ -f "${KEY_FILE}" ]; then
|
||||
echo ""
|
||||
echo "✅ CSR文件已生成:"
|
||||
echo " ${CSR_FILE}"
|
||||
ls -lh "${CSR_FILE}"
|
||||
echo ""
|
||||
echo "✅ 私钥文件已生成:"
|
||||
echo " ${KEY_FILE}"
|
||||
ls -lh "${KEY_FILE}"
|
||||
echo ""
|
||||
echo "下一步操作:"
|
||||
echo "1. 打开 Developer Portal → Certificates"
|
||||
echo "2. 点击 + 按钮"
|
||||
echo "3. 选择 'Mac App Development'"
|
||||
echo "4. 上传 ${CSR_FILE}"
|
||||
echo "5. Portal生成证书 → 下载 .cer 文件"
|
||||
echo ""
|
||||
echo "⚠️ 私钥文件请妥善保管(不要上传到Portal)"
|
||||
else
|
||||
echo "❌ CSR生成失败"
|
||||
exit 1
|
||||
fi
|
||||
62
scripts/install_certificate.sh
Executable file
62
scripts/install_certificate.sh
Executable file
@@ -0,0 +1,62 @@
|
||||
#!/bin/bash
|
||||
# scripts/install_certificate.sh
|
||||
# 导入Mac Development Certificate到Keychain
|
||||
|
||||
set -e
|
||||
|
||||
echo "=== 导入 Certificate 到 Keychain ==="
|
||||
|
||||
# 配置
|
||||
TEAM_ID="K3TDMD9Y6B"
|
||||
BUNDLE_ID="com.momentry.markbase.fskit"
|
||||
KEYCHAIN=~/Library/Keychains/login.keychain-db
|
||||
|
||||
# 检查Downloads目录中的证书文件
|
||||
echo ""
|
||||
echo "搜索证书文件..."
|
||||
CERT_FILES=$(find ~/Downloads -name "*.cer" -mtime -1 2>/dev/null | head -5)
|
||||
|
||||
if [ -z "${CERT_FILES}" ]; then
|
||||
echo "❌ 未找到证书文件"
|
||||
echo " 请确保已从Portal下载证书到 ~/Downloads/"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo ""
|
||||
echo "找到证书文件:"
|
||||
echo "${CERT_FILES}"
|
||||
echo ""
|
||||
|
||||
# 选择最新的证书文件
|
||||
CERT_FILE=$(echo "${CERT_FILES}" | head -1)
|
||||
echo "使用证书:${CERT_FILE}"
|
||||
echo ""
|
||||
|
||||
# 导入证书到Keychain
|
||||
echo "步骤1: 导入证书..."
|
||||
security import "${CERT_FILE}" \
|
||||
-k "${KEYCHAIN}" \
|
||||
-T /usr/bin/codesign \
|
||||
-T /Applications/Xcode.app/Contents/Developer/usr/bin/codesign \
|
||||
-f pkcs1
|
||||
|
||||
echo ""
|
||||
echo "步骤2: 验证证书导入..."
|
||||
security find-identity -v -p codesigning
|
||||
|
||||
echo ""
|
||||
echo "步骤3: 检查Keychain状态..."
|
||||
security list-keychains
|
||||
|
||||
echo ""
|
||||
echo "✅ Certificate导入成功"
|
||||
echo ""
|
||||
echo "证书信息:"
|
||||
echo " Team ID: ${TEAM_ID}"
|
||||
echo " Bundle ID: ${BUNDLE_ID}"
|
||||
echo " Expiration: 2027/05/18"
|
||||
echo ""
|
||||
echo "下一步:"
|
||||
echo " 1. 构建签名应用"
|
||||
echo " 2. 安装System Extension"
|
||||
echo " 3. System Settings批准"
|
||||
51
scripts/install_system_extension.sh
Executable file
51
scripts/install_system_extension.sh
Executable file
@@ -0,0 +1,51 @@
|
||||
#!/bin/bash
|
||||
# scripts/install_system_extension.sh
|
||||
# 安装System Extension到macOS
|
||||
|
||||
set -e
|
||||
|
||||
echo "=== 安装System Extension ==="
|
||||
|
||||
# 配置
|
||||
BUNDLE_ID="com.momentry.markbase.fskit"
|
||||
TEAM_ID="K3TDMD9Y6B"
|
||||
APP_NAME="MarkBaseFSKit.app"
|
||||
APP_DIR="build/${APP_NAME}"
|
||||
|
||||
echo ""
|
||||
echo "配置信息:"
|
||||
echo " Bundle ID: ${BUNDLE_ID}"
|
||||
echo " Team ID: ${TEAM_ID}"
|
||||
echo " App: ${APP_DIR}"
|
||||
|
||||
# 检查.app是否存在
|
||||
if [ ! -d "${APP_DIR}" ]; then
|
||||
echo "❌ .app不存在:${APP_DIR}"
|
||||
echo " 需要先运行 ./scripts/create_app_bundle.sh 和 ./scripts/sign_app.sh"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo ""
|
||||
echo "步骤1: 检查System Extension状态..."
|
||||
systemextensionsctl list
|
||||
|
||||
echo ""
|
||||
echo "步骤2: 安装System Extension..."
|
||||
systemextensionsctl install \
|
||||
--team "${TEAM_ID}" \
|
||||
--bundleID "${BUNDLE_ID}" \
|
||||
--type filesystem \
|
||||
"${APP_DIR}"
|
||||
|
||||
echo ""
|
||||
echo "步骤3: 验证安装..."
|
||||
systemextensionsctl list
|
||||
|
||||
echo ""
|
||||
echo "✅ System Extension已安装"
|
||||
echo ""
|
||||
echo "⚠️ 最后一步需要手动操作:"
|
||||
echo " macOS会弹出提示:'MarkBaseFSKit wants to install a system extension'"
|
||||
echo " 打开 System Settings → Privacy & Security"
|
||||
echo " 点击 Allow 按钮"
|
||||
echo " 重启Mac完成安装"
|
||||
75
scripts/install_system_extension_final.sh
Executable file
75
scripts/install_system_extension_final.sh
Executable file
@@ -0,0 +1,75 @@
|
||||
#!/bin/bash
|
||||
# scripts/install_system_extension_final.sh
|
||||
# 一键安装System Extension(需要证书已下载)
|
||||
|
||||
set -e
|
||||
|
||||
echo "=== System Extension 一键安装 ==="
|
||||
|
||||
# 配置变量(已确认)
|
||||
TEAM_ID="K3TDMD9Y6B"
|
||||
BUNDLE_ID="com.momentry.markbase.fskit"
|
||||
CERT_FILE=~/Downloads/developer_certificate.cer
|
||||
KEYCHAIN=~/Library/Keychains/login.keychain-db
|
||||
|
||||
echo ""
|
||||
echo "配置信息:"
|
||||
echo " Team ID: ${TEAM_ID}"
|
||||
echo " Bundle ID: ${BUNDLE_ID}"
|
||||
echo ""
|
||||
|
||||
# 检查证书文件
|
||||
if [ ! -f "${CERT_FILE}" ]; then
|
||||
echo "❌ 证书文件不存在:${CERT_FILE}"
|
||||
echo ""
|
||||
echo "请先从Portal下载证书:"
|
||||
echo "1. Developer Portal → Certificates"
|
||||
echo "2. 点击刚创建的证书"
|
||||
echo "3. Download按钮 → 保存到 ~/Downloads/"
|
||||
echo ""
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo "步骤1: 导入证书到Keychain..."
|
||||
security import "${CERT_FILE}" \
|
||||
-k "${KEYCHAIN}" \
|
||||
-T /usr/bin/codesign \
|
||||
-T /Applications/Xcode.app/Contents/Developer/usr/bin/codesign
|
||||
|
||||
echo ""
|
||||
echo "步骤2: 验证证书导入..."
|
||||
security find-identity -v -p codesigning
|
||||
|
||||
echo ""
|
||||
echo "步骤3: 构建签名应用(需要Xcode项目)..."
|
||||
if [ -d "MarkBaseFSKit.xcodeproj" ]; then
|
||||
xcodebuild clean build \
|
||||
-project MarkBaseFSKit.xcodeproj \
|
||||
-scheme MarkBaseFSKit \
|
||||
-configuration Release \
|
||||
CODE_SIGN_IDENTITY="Apple Development" \
|
||||
DEVELOPMENT_TEAM="${TEAM_ID}" \
|
||||
PRODUCT_BUNDLE_IDENTIFIER="${BUNDLE_ID}"
|
||||
|
||||
echo ""
|
||||
echo "步骤4: 安装System Extension..."
|
||||
systemextensionsctl install \
|
||||
--team "${TEAM_ID}" \
|
||||
--bundleID "${BUNDLE_ID}" \
|
||||
--type filesystem \
|
||||
build/Release/MarkBaseFSKit.app
|
||||
else
|
||||
echo "⚠️ Xcode项目不存在,需要手动创建"
|
||||
echo " 或使用codesign直接签名现有应用"
|
||||
fi
|
||||
|
||||
echo ""
|
||||
echo "✅ System Extension已安装"
|
||||
echo ""
|
||||
echo "⚠️ 最后一步需要手动操作:"
|
||||
echo " 打开 System Settings → Privacy & Security"
|
||||
echo " 点击 Allow 按钮"
|
||||
echo " 重启Mac完成安装"
|
||||
echo ""
|
||||
echo "验证安装:"
|
||||
systemextensionsctl list
|
||||
25
scripts/list_uploaded_files.sh
Executable file
25
scripts/list_uploaded_files.sh
Executable file
@@ -0,0 +1,25 @@
|
||||
#!/bin/bash
|
||||
# List all uploaded files for accusys user
|
||||
echo "=== Uploaded Files (accusys) ==="
|
||||
echo ""
|
||||
echo "Location: /Users/accusys/Downloads/accusys/"
|
||||
echo ""
|
||||
ls -lth /Users/accusys/Downloads/accusys/ | tail -n +2 | while read line; do
|
||||
filename=$(echo "$line" | awk '{print $NF}')
|
||||
size=$(echo "$line" | awk '{print $5}')
|
||||
date=$(echo "$line" | awk '{print $6" "$7}')
|
||||
|
||||
echo "File: $filename"
|
||||
echo " Size: $size"
|
||||
echo " Date: $date"
|
||||
echo " Path: /Users/accusys/Downloads/accusys/$filename"
|
||||
|
||||
# Calculate SHA256
|
||||
hash=$(shasum -a 256 "/Users/accusys/Downloads/accusys/$filename" 2>/dev/null | awk '{print $1}')
|
||||
if [ -n "$hash" ]; then
|
||||
echo " SHA256: $hash"
|
||||
fi
|
||||
echo ""
|
||||
done
|
||||
|
||||
echo "Total files: $(ls -1 /Users/accusys/Downloads/accusys/ | wc -l)"
|
||||
34
scripts/prepare_upload.sh
Executable file
34
scripts/prepare_upload.sh
Executable file
@@ -0,0 +1,34 @@
|
||||
#!/bin/bash
|
||||
# prepare_upload.sh - Prepare directory for upload
|
||||
# Add .keep files in all empty directories
|
||||
|
||||
SOURCE_DIR="$1"
|
||||
|
||||
if [ -z "$SOURCE_DIR" ]; then
|
||||
echo "Usage: bash scripts/prepare_upload.sh <source_directory>"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [ ! -d "$SOURCE_DIR" ]; then
|
||||
echo "Error: Directory not found: $SOURCE_DIR"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo "=== Preparing upload for $SOURCE_DIR ==="
|
||||
echo ""
|
||||
|
||||
# Find empty directories and add .keep
|
||||
empty_count=0
|
||||
find "$SOURCE_DIR" -type d -empty | while read dir; do
|
||||
touch "$dir/.keep"
|
||||
empty_count=$((empty_count + 1))
|
||||
echo "Added .keep in: $dir"
|
||||
done
|
||||
|
||||
echo ""
|
||||
echo "=== Preparation complete ==="
|
||||
echo "Empty directories: $(find "$SOURCE_DIR" -type d -empty | wc -l)"
|
||||
echo "Total .keep files: $(find "$SOURCE_DIR" -name ".keep" | wc -l)"
|
||||
echo ""
|
||||
echo "Ready for webkitdirectory upload"
|
||||
echo "All empty directories will be uploaded with .keep files"
|
||||
70
scripts/sign_app.sh
Executable file
70
scripts/sign_app.sh
Executable file
@@ -0,0 +1,70 @@
|
||||
#!/bin/bash
|
||||
# scripts/sign_app.sh
|
||||
# 签名System Extension .app Bundle
|
||||
|
||||
set -e
|
||||
|
||||
echo "=== 签名System Extension ==="
|
||||
|
||||
# 配置
|
||||
BUNDLE_ID="com.momentry.markbase.fskit"
|
||||
TEAM_ID="K3TDMD9Y6B"
|
||||
APP_NAME="MarkBaseFSKit.app"
|
||||
APP_DIR="build/${APP_NAME}"
|
||||
ENTITLEMENTS="entitlements.plist"
|
||||
|
||||
# 获取证书identity
|
||||
CERT_IDENTITY="Developer ID Application: Accusys,Inc (K3TDMD9Y6B)"
|
||||
|
||||
echo ""
|
||||
echo "配置信息:"
|
||||
echo " Bundle ID: ${BUNDLE_ID}"
|
||||
echo " Team ID: ${TEAM_ID}"
|
||||
echo " Certificate: ${CERT_IDENTITY}"
|
||||
echo " App: ${APP_DIR}"
|
||||
|
||||
# 检查.app是否存在
|
||||
if [ ! -d "${APP_DIR}" ]; then
|
||||
echo "❌ .app不存在:${APP_DIR}"
|
||||
echo " 需要先运行 ./scripts/create_app_bundle.sh"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# 检查entitlements是否存在
|
||||
if [ ! -f "${ENTITLEMENTS}" ]; then
|
||||
echo "❌ entitlements.plist不存在"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo ""
|
||||
echo "步骤1: 签名主executable..."
|
||||
codesign --sign "${CERT_IDENTITY}" \
|
||||
--entitlements "${ENTITLEMENTS}" \
|
||||
--identifier "${BUNDLE_ID}" \
|
||||
--options runtime \
|
||||
--timestamp \
|
||||
"${APP_DIR}/Contents/MacOS/MarkBaseFSKit"
|
||||
|
||||
echo ""
|
||||
echo "步骤2: 签名整个.app bundle..."
|
||||
codesign --sign "${CERT_IDENTITY}" \
|
||||
--entitlements "${ENTITLEMENTS}" \
|
||||
--identifier "${BUNDLE_ID}" \
|
||||
--options runtime \
|
||||
--timestamp \
|
||||
--deep \
|
||||
"${APP_DIR}"
|
||||
|
||||
echo ""
|
||||
echo "步骤3: 验证签名..."
|
||||
codesign -d -vv "${APP_DIR}"
|
||||
|
||||
echo ""
|
||||
echo "步骤4: 检查签名详情..."
|
||||
codesign -d -vv --entitlements - "${APP_DIR}"
|
||||
|
||||
echo ""
|
||||
echo "✅ .app Bundle已签名成功"
|
||||
echo ""
|
||||
echo "下一步:"
|
||||
echo " 运行 ./scripts/install_system_extension.sh 安装System Extension"
|
||||
Reference in New Issue
Block a user