{ "version": "https://jsonfeed.org/version/1.1", "user_comment": "This feed allows you to read the posts from this site in any feed reader that supports the JSON Feed format. To add this feed to your reader, copy the following URL -- https://matoken.org/blog/category/linux/debian-linux/trixie/feed/json/ -- and add it your reader.", "home_page_url": "https://matoken.org/blog/category/linux/debian-linux/trixie/", "feed_url": "https://matoken.org/blog/category/linux/debian-linux/trixie/feed/json/", "language": "ja", "title": "trixie – matoken's blog", "description": "Is there no plan B?", "icon": "https://matoken.org/blog/wp-content/uploads/2025/03/cropped-1865f695c4eecc844385acef2f078255036adccd42c254580ea3844543ab56d9.jpeg", "items": [ { "id": "https://matoken.org/blog/?p=5427", "url": "https://matoken.org/blog/2026/04/09/bonsai/", "title": "1bit LLM\u306eBonsai\u3092Linux amd64\u74b0\u5883\u3067\u8a66\u3059", "content_html": "
\n
\n

\n
\n

\u4ee5\u4e0b\u306e\u8a18\u4e8b\u3092\u898b\u3066Bonsai \u3068\u3044\u30461bit LLM \u306b\u8208\u5473\u3092\u6301\u3061\u307e\u3057\u305f\uff0e\u6301\u3061\u904b\u3073\u30de\u30b7\u30f3\u306f\u3042\u307e\u308a\u4f7f\u3063\u3066\u3044\u306a\u3044\u3051\u3069RAM 8GB \u3042\u308a\u307e\u3059\uff0e\u4e16\u4ee3\u306fIntel Core i\u306e7\u4e16\u4ee3\u76ee\u3068\u5c11\u3057\u53e4\u3044\u3051\u3069\u9045\u304f\u3066\u3082\u305d\u3053\u305d\u3053\u306e\u901f\u5ea6\u3067\u52d5\u304f\u306a\u3089\u3044\u3044\u304b\u3082\u3068\u601d\u3044\u8a66\u3057\u3066\u307f\u307e\u3057\u305f\uff0e

\n
\n\n

\n
\n

\u7aef\u672b\u306e\u4e3b\u306a\u30b9\u30da\u30c3\u30af\u306f\u3056\u3063\u304f\u308a\u3053\u3093\u306a\u611f\u3058\uff0e\u3053\u3046\u3084\u3063\u3066\u898b\u308b\u3068\u53e4\u3059\u304e\u308b\u304b\u3082\u3057\u308c\u306a\u3044\u2026\u2026\uff0e

\n
\n
\n
\n
Panasonic CF-RZ6RFRVS\nIntel(R) Core(TM) i5-7Y57 CPU @ 1.20GHz\nMemory LPDDR3 4GiB x2\nVGA Intel Corporation HD Graphics 615\nDisk M.2 SATA 256 GB(used)\nOS Debian Trixie amd64
\n
\n
\n
\n
\n
\n

Bonsai \u306e\u5c0e\u5165

\n
\n
\n

\u5c0e\u5165\u306f\u4ee5\u4e0b\u306eREADME.md \u306e\u901a\u308a\u306b\uff0c setup.sh \u3067venv \u74b0\u5883\u3092\u4f5c\u3063\u3066\u5c0e\u5165\u3055\u308c\u307e\u3057\u305f\uff0e

\n
\n\n
\n
\n
$ git clone https://github.com/PrismML-Eng/Bonsai-demo (1)\n$ cd Bonsai-demo\n$ BONSAI_MODEL=8B ./setup.sh (2)
\n
\n
\n
\n
    \n
  1. \n

    \u30ea\u30dd\u30b8\u30c8\u30ea\u3092clone

    \n
  2. \n
  3. \n

    8B \u30e2\u30c7\u30eb\u3067 setup.sh \u3092\u5b9f\u884c\uff0e .venv \u4ee5\u4e0b\u306b\u5c0e\u5165

    \n
  4. \n
\n
\n
\n
\n
\n

Bonsai \u306e\u5b9f\u884c

\n
\n
\n

\u5148\u305a\u306fexample \u3092\u305d\u306e\u307e\u307e\u53e9\u3044\u3066\u307f\u307e\u3059\uff0e\u52d5\u304d\u307e\u305b\u3093\uff0e

\n
\n
\n
\n
$ BONSAI_MODEL=8B ./scripts/run_llama.sh -p \"What is the capital of France?\"\n[OK]   Model:  models/gguf/8B/Bonsai-8B.gguf\n[OK]   Binary: /home/matoken/src/Bonsai-demo/bin/cuda/llama-cli\n[OK]   Using -c 0 (auto-fit to available memory)\n[WARN] Auto-fit not supported, falling back to -c 8192
\n
\n
\n
\n

-c 8192 \u3092\u3064\u3051\u3066\u3082 -c 4096 \u3068\u304b\u3057\u3066\u3082\u99c4\u76ee\u3067\u3059\uff0e

\n
\n
\n

script \u91ce\u4e2d\u3092\u898b\u308b\u3068\uff0c 2>/dev/null \u3068\u306a\u3063\u3066\u3044\u3066STDERR \u304c\u51fa\u306a\u304f\u306a\u3063\u3066\u3044\u305d\u3046\u3067\u3059\uff0e
\n\u3068\u3044\u3046\u3053\u3068\u3067\u547c\u3070\u308c\u3066\u3044\u305d\u3046\u306a llama-cli \u3092\u76f4\u306b\u53e9\u3044\u3066\u307f\u308b\u3068\u30a8\u30e9\u30fc\u304c\u51fa\u307e\u3057\u305f\uff0e

\n
\n
\n
\n
$ BONSAI_MODEL=8B bin/cuda/llama-cli\nbin/cuda/llama-cli: error while loading shared libraries: libcudart.so.12: cannot open shared object file: No such file or directory
\n
\n
\n
\n

libcudart.so.12 \u304c\u898b\u3064\u304b\u3089\u306a\u3044\u3068\u8a00\u308f\u308c\u308b\u306e\u3067\u95a2\u9023\u30d1\u30c3\u30b1\u30fc\u30b8\u3092\u5c0e\u5165\u3057\u3066\u3053\u308c\u3067\u52d5\u304f\u3088\u3046\u306b\u306a\u308a\u307e\u3057\u305f\uff0e

\n
\n
\n
\n
$ apt-file search -x /libcudart.so.12$\nlibcudart12: /usr/lib/x86_64-linux-gnu/libcudart.so.12\n$ sudo apt install libcudart12 nvidia-cuda-dev
\n
\n
\n
\n
\n
\n

2\u56de\u76ee\u4ee5\u964d\u306f\u3053\u3093\u306a\u611f\u3058\u3067\u5b9f\u884c

\n
\n
\n
\n
$ cd Bonsai-demo\n$ source .venv/bin/activate\n$ BONSAI_MODEL=8B ./scripts/run_llama.sh -p \"What is the capital of France?\"
\n
\n
\n
\n
\n
\n

\u3057\u304b\u3057\u9045\u3059\u304e\u307e\u3059\uff0e8B \u30e2\u30c7\u30eb\u3067\u3053\u3093\u306a\u611f\u3058\u3067\u3061\u3087\u3063\u3068\u8f9b\u3044\uff0e

\n
\n
\n
\n
[ Prompt: 0.0 t/s | Generation: 0.0 t/s ]
\n
\n
\n
\n
\n\"Bonsai\"\n
\n
\n
\n
\n
\n

Bonsai \u30e2\u30c7\u30eb\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9

\n
\n
\n

\u4ed6\u306e\u30e2\u30c7\u30eb\u3082\u8a66\u3057\u3066\u307f\u307e\u3059\uff0e

\n
\n
\n
\n
$ BONSAI_MODEL=4B ./scripts/download_models.sh\n$ BONSAI_MODEL=1.7B ./scripts/download_models.sh
\n
\n
\n
\n

1.7B \u3067\u3082\u3053\u3093\u306a\u611f\u3058\u3067\u307e\u3060\u9045\u3044\u3067\u3059\uff0e

\n
\n
\n
\n
[ Prompt: 0.1 t/s | Generation: 0.1 t/s ]
\n
\n
\n
\n

\u3082\u3046\u5c11\u3057\u65b0\u3057\u3044\u30de\u30b7\u30f3\u3060\u3068\u3069\u3046\u3060\u308d\u3046\u3068\u4ee5\u4e0b\u306e\u7aef\u672b\u3067\u3082\u5c11\u3057\u8a66\u3057\u3066\u307f\u307e\u3057\u305f\u304c\u3084\u306f\u308a\u9045\u3044\uff0e

\n
\n
\n
\n
CPU Intel Core i7-10510U\nRAM DDR4 8GiB *2
\n
\n
\n
\n
8B
\n
\n
[ Prompt: 0.1 t/s | Generation: 0.1 t/s ]
\n
\n
\n
\n
1.7B
\n
\n
[ Prompt: 0.4 t/s | Generation: 0.2 t/s ]
\n
\n
\n
\n

t/s \u3067\u306f\u901f\u5ea6\u304c\u308f\u304b\u3089\u306a\u3044\u3068\u601d\u3046\u306e\u3067\u4ee5\u4e0b\u306bcast \u3092upload \u3057\u3066\u307f\u307e\u3057\u305f\uff0e

\n
\n
\n

\u5927\u307e\u304b\u306b
\n\u301c0:45 \u3067\u30e2\u30c7\u30eb\u8aad\u307f\u8fbc\u307f\uff0e
\n\u301c3:28 \u4f4d\u304b\u3089\u56de\u7b54\u304c\u5e30\u3063\u3066\u6765\u306f\u3058\u3081\uff0c
\n\u301c8:40 \u304f\u3089\u3044\u3067\u56de\u7b54\u5b8c\u4e86\uff0e

\n
\n

\n
\n

\u751f\u6210AI \u3067\u306e\u753b\u50cf\u751f\u6210\u306a\u3089\u307e\u3060\u3057\u3082chat \u3067\u58c1\u6253\u3061\u307f\u305f\u3044\u306a\u4f7f\u3044\u65b9\u306b\u306f\u8f9b\u305d\u3046\u3067\u3059\uff0e

\n
\n
\n

\u3068\u601d\u3063\u305f\u3089\u3053\u3093\u306a\u30cb\u30e5\u30fc\u30b9\u304c\uff0eLlama.cpp \u7528\u306e OpenVINO \u30d0\u30c3\u30af\u30a8\u30f3\u30c9\u304c\u8ffd\u52a0\u3055\u308c\u305f\u305d\u3046\u3067\uff0c\u3053\u308c\u3092\u4f7f\u3046\u3068iGPU \u3067\u3082\u901f\u304f\u306a\u308a\u305d\u3046\u3067\u3059\uff0e

\n
\n\n
\n\n\n\n\n\n
\n
Note
\n
\n
\n

OpenVINO \u306f\u4ee5\u524dStable Diffusion \u3067\u8a66\u3057\u305f\u3053\u3068\u304c\uff0e

\n
\n\n
\n
\n
\n
\n
\n

toot

\n
\n\n
\n
\n", "content_text": "\u4ee5\u4e0b\u306e\u8a18\u4e8b\u3092\u898b\u3066Bonsai \u3068\u3044\u30461bit LLM \u306b\u8208\u5473\u3092\u6301\u3061\u307e\u3057\u305f\uff0e\u6301\u3061\u904b\u3073\u30de\u30b7\u30f3\u306f\u3042\u307e\u308a\u4f7f\u3063\u3066\u3044\u306a\u3044\u3051\u3069RAM 8GB \u3042\u308a\u307e\u3059\uff0e\u4e16\u4ee3\u306fIntel Core i\u306e7\u4e16\u4ee3\u76ee\u3068\u5c11\u3057\u53e4\u3044\u3051\u3069\u9045\u304f\u3066\u3082\u305d\u3053\u305d\u3053\u306e\u901f\u5ea6\u3067\u52d5\u304f\u306a\u3089\u3044\u3044\u304b\u3082\u3068\u601d\u3044\u8a66\u3057\u3066\u307f\u307e\u3057\u305f\uff0e\n\n\n\n\n\u300c\u30e1\u30e2\u30ea\u306f8\u30ae\u30ac\u3067\u5341\u5206\u3067\u3059\u3088\u300d\u6642\u4ee3\u306e\u5230\u6765\u30021\u30d3\u30c3\u30c8LLM\u300cBonsai 8B\u300d\u30928GB\u306eMacBook Neo\u3067\u52d5\u304b\u3057\u3066\u307f\u305f\u3089\u7206\u901f\u3060\u3063\u305f\u30021.1GB\u306b8B\u30d1\u30e9\u30e1\u30fc\u30bf\u304c\u5165\u308b\u9a5a\u304d\u3092\u308f\u304b\u3063\u3066\u304f\u3060\u3055\u3044\u3088\uff08CloseBox\uff09 | \u30c6\u30af\u30ce\u30a8\u30c3\u30b8 TechnoEdge\n\n\n\n\n\n\u7aef\u672b\u306e\u4e3b\u306a\u30b9\u30da\u30c3\u30af\u306f\u3056\u3063\u304f\u308a\u3053\u3093\u306a\u611f\u3058\uff0e\u3053\u3046\u3084\u3063\u3066\u898b\u308b\u3068\u53e4\u3059\u304e\u308b\u304b\u3082\u3057\u308c\u306a\u3044\u2026\u2026\uff0e\n\n\n\nPanasonic CF-RZ6RFRVS\nIntel(R) Core(TM) i5-7Y57 CPU @ 1.20GHz\nMemory LPDDR3 4GiB x2\nVGA Intel Corporation HD Graphics 615\nDisk M.2 SATA 256 GB(used)\nOS Debian Trixie amd64\n\n\n\n\n\nBonsai \u306e\u5c0e\u5165\n\n\n\u5c0e\u5165\u306f\u4ee5\u4e0b\u306eREADME.md \u306e\u901a\u308a\u306b\uff0c setup.sh \u3067venv \u74b0\u5883\u3092\u4f5c\u3063\u3066\u5c0e\u5165\u3055\u308c\u307e\u3057\u305f\uff0e\n\n\n\n\nPrismML-Eng/Bonsai-demo: Bonsai Demo\n\n\n\n\n\n$ git clone https://github.com/PrismML-Eng/Bonsai-demo (1)\n$ cd Bonsai-demo\n$ BONSAI_MODEL=8B ./setup.sh (2)\n\n\n\n\n\n\u30ea\u30dd\u30b8\u30c8\u30ea\u3092clone\n\n\n8B \u30e2\u30c7\u30eb\u3067 setup.sh \u3092\u5b9f\u884c\uff0e .venv \u4ee5\u4e0b\u306b\u5c0e\u5165\n\n\n\n\n\n\nBonsai \u306e\u5b9f\u884c\n\n\n\u5148\u305a\u306fexample \u3092\u305d\u306e\u307e\u307e\u53e9\u3044\u3066\u307f\u307e\u3059\uff0e\u52d5\u304d\u307e\u305b\u3093\uff0e\n\n\n\n$ BONSAI_MODEL=8B ./scripts/run_llama.sh -p \"What is the capital of France?\"\n[OK] Model: models/gguf/8B/Bonsai-8B.gguf\n[OK] Binary: /home/matoken/src/Bonsai-demo/bin/cuda/llama-cli\n[OK] Using -c 0 (auto-fit to available memory)\n[WARN] Auto-fit not supported, falling back to -c 8192\n\n\n\n-c 8192 \u3092\u3064\u3051\u3066\u3082 -c 4096 \u3068\u304b\u3057\u3066\u3082\u99c4\u76ee\u3067\u3059\uff0e\n\n\nscript \u91ce\u4e2d\u3092\u898b\u308b\u3068\uff0c 2>/dev/null \u3068\u306a\u3063\u3066\u3044\u3066STDERR \u304c\u51fa\u306a\u304f\u306a\u3063\u3066\u3044\u305d\u3046\u3067\u3059\uff0e\n\u3068\u3044\u3046\u3053\u3068\u3067\u547c\u3070\u308c\u3066\u3044\u305d\u3046\u306a llama-cli \u3092\u76f4\u306b\u53e9\u3044\u3066\u307f\u308b\u3068\u30a8\u30e9\u30fc\u304c\u51fa\u307e\u3057\u305f\uff0e\n\n\n\n$ BONSAI_MODEL=8B bin/cuda/llama-cli\nbin/cuda/llama-cli: error while loading shared libraries: libcudart.so.12: cannot open shared object file: No such file or directory\n\n\n\nlibcudart.so.12 \u304c\u898b\u3064\u304b\u3089\u306a\u3044\u3068\u8a00\u308f\u308c\u308b\u306e\u3067\u95a2\u9023\u30d1\u30c3\u30b1\u30fc\u30b8\u3092\u5c0e\u5165\u3057\u3066\u3053\u308c\u3067\u52d5\u304f\u3088\u3046\u306b\u306a\u308a\u307e\u3057\u305f\uff0e\n\n\n\n$ apt-file search -x /libcudart.so.12$\nlibcudart12: /usr/lib/x86_64-linux-gnu/libcudart.so.12\n$ sudo apt install libcudart12 nvidia-cuda-dev\n\n\n\n\n\n2\u56de\u76ee\u4ee5\u964d\u306f\u3053\u3093\u306a\u611f\u3058\u3067\u5b9f\u884c\n\n\n\n$ cd Bonsai-demo\n$ source .venv/bin/activate\n$ BONSAI_MODEL=8B ./scripts/run_llama.sh -p \"What is the capital of France?\"\n\n\n\n\n\n\u3057\u304b\u3057\u9045\u3059\u304e\u307e\u3059\uff0e8B \u30e2\u30c7\u30eb\u3067\u3053\u3093\u306a\u611f\u3058\u3067\u3061\u3087\u3063\u3068\u8f9b\u3044\uff0e\n\n\n\n[ Prompt: 0.0 t/s | Generation: 0.0 t/s ]\n\n\n\n\n\n\n\n\n\n\nBonsai \u30e2\u30c7\u30eb\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\n\n\n\u4ed6\u306e\u30e2\u30c7\u30eb\u3082\u8a66\u3057\u3066\u307f\u307e\u3059\uff0e\n\n\n\n$ BONSAI_MODEL=4B ./scripts/download_models.sh\n$ BONSAI_MODEL=1.7B ./scripts/download_models.sh\n\n\n\n1.7B \u3067\u3082\u3053\u3093\u306a\u611f\u3058\u3067\u307e\u3060\u9045\u3044\u3067\u3059\uff0e\n\n\n\n[ Prompt: 0.1 t/s | Generation: 0.1 t/s ]\n\n\n\n\u3082\u3046\u5c11\u3057\u65b0\u3057\u3044\u30de\u30b7\u30f3\u3060\u3068\u3069\u3046\u3060\u308d\u3046\u3068\u4ee5\u4e0b\u306e\u7aef\u672b\u3067\u3082\u5c11\u3057\u8a66\u3057\u3066\u307f\u307e\u3057\u305f\u304c\u3084\u306f\u308a\u9045\u3044\uff0e\n\n\n\nCPU Intel Core i7-10510U\nRAM DDR4 8GiB *2\n\n\n\n8B\n\n[ Prompt: 0.1 t/s | Generation: 0.1 t/s ]\n\n\n\n1.7B\n\n[ Prompt: 0.4 t/s | Generation: 0.2 t/s ]\n\n\n\nt/s \u3067\u306f\u901f\u5ea6\u304c\u308f\u304b\u3089\u306a\u3044\u3068\u601d\u3046\u306e\u3067\u4ee5\u4e0b\u306bcast \u3092upload \u3057\u3066\u307f\u307e\u3057\u305f\uff0e\n\n\n\u5927\u307e\u304b\u306b\n\u301c0:45 \u3067\u30e2\u30c7\u30eb\u8aad\u307f\u8fbc\u307f\uff0e\n\u301c3:28 \u4f4d\u304b\u3089\u56de\u7b54\u304c\u5e30\u3063\u3066\u6765\u306f\u3058\u3081\uff0c\n\u301c8:40 \u304f\u3089\u3044\u3067\u56de\u7b54\u5b8c\u4e86\uff0e\n\n\n\n\u751f\u6210AI \u3067\u306e\u753b\u50cf\u751f\u6210\u306a\u3089\u307e\u3060\u3057\u3082chat \u3067\u58c1\u6253\u3061\u307f\u305f\u3044\u306a\u4f7f\u3044\u65b9\u306b\u306f\u8f9b\u305d\u3046\u3067\u3059\uff0e\n\n\n\u3068\u601d\u3063\u305f\u3089\u3053\u3093\u306a\u30cb\u30e5\u30fc\u30b9\u304c\uff0eLlama.cpp \u7528\u306e OpenVINO \u30d0\u30c3\u30af\u30a8\u30f3\u30c9\u304c\u8ffd\u52a0\u3055\u308c\u305f\u305d\u3046\u3067\uff0c\u3053\u308c\u3092\u4f7f\u3046\u3068iGPU \u3067\u3082\u901f\u304f\u306a\u308a\u305d\u3046\u3067\u3059\uff0e\n\n\n\n\nIntel Releases OpenVINO 2026.1 With Backend For Llama.cpp, New Hardware Support – Phoronix\n\n\n\n\n\n\n\nNote\n\n\n\nOpenVINO \u306f\u4ee5\u524dStable Diffusion \u3067\u8a66\u3057\u305f\u3053\u3068\u304c\uff0e\n\n\n\n\nStable Diffusion OpenVINO\u3067Intel CPU\u3067\u3082AI\u306b\u753b\u50cf\u3092\u751f\u6210\u3057\u3066\u3082\u3089\u3046 \u2013 matoken’s blog\n\n\n\n\n\n\n\n\n\n\ntoot\n\n\n\n\nmatoken :fox:: “\u677e\u5c3e\u3055\u3093\u306e\u8a18\u4e8b\u3092\u898b\u3066Core i5-7Y57/RAM 8GB\u2026” – \u3044\u306a\u3053\u3093", "date_published": "2026-04-09T07:33:24+09:00", "date_modified": "2026-04-09T07:33:25+09:00", "authors": [ { "name": "matoken", "url": "https://matoken.org/blog/author/matoken/", "avatar": "https://secure.gravatar.com/avatar/38f5f3b575c5eb45cda6aa659bca119ac7a5e16b46565e869d0030e3bd66981d?s=512&d=mm&r=g" } ], "author": { "name": "matoken", "url": "https://matoken.org/blog/author/matoken/", "avatar": "https://secure.gravatar.com/avatar/38f5f3b575c5eb45cda6aa659bca119ac7a5e16b46565e869d0030e3bd66981d?s=512&d=mm&r=g" }, "tags": [ "bonsai", "LLM", "Debian", "Linux", "trixie" ] }, { "id": "https://matoken.org/blog/?p=5405", "url": "https://matoken.org/blog/2026/04/01/twitter-broadcast-download/", "title": "Twitter\u3067\u914d\u4fe1\u3055\u308c\u305f\u52d5\u753b\u30a2\u30fc\u30ab\u30a4\u30d6\u3092\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9", "content_html": "
\n
\n

\n
\n

Twitter\u3067\u914d\u4fe1\u3055\u308c\u305f\u30e9\u30a4\u30d6\u52d5\u753b\u306e\u30a2\u30fc\u30ab\u30a4\u30d6\u3092\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\u3057\u3066\u307f\u307e\u3057\u305f\uff0e

\n
\n

\n
\n

\u3068\u3042\u308b\u30a4\u30d9\u30f3\u30c8\u304cTwitter \u3067\u914d\u4fe1\u3055\u308c\u3066\u3044\u305f\u3089\u3057\u304fYouTube \u306b\u3082\u3042\u308b\u306e\u3067\u306f\u3068\u601d\u3063\u305f\u3051\u3069\u898b\u5f53\u305f\u308a\u307e\u305b\u3093\uff0eTwitter \u306b\u30a2\u30fc\u30ab\u30a4\u30d6\u304c\u6b8b\u3063\u3066\u3044\u308b\u306e\u3067\u3059\u304c\uff0c\u306a\u3093\u304b\u518d\u751f\u304c\u3059\u3050\u6b62\u307e\u308b\u306e\u3067\u8f9b\u3044\uff0e
\n\u3068\u3044\u3046\u3053\u3068\u3067\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\u3067\u304d\u306a\u3044\u304b\u306a\u3068\u691c\u7d22\u3059\u308b\u3068X/Twitter Broadcast Downloader \u3068\u3044\u3046\u3082\u306e\u3092\u898b\u3064\u3051\u307e\u3057\u305f\uff0e\u3053\u308c\u3067\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\u3057\u3066\u307f\u307e\u3057\u305f\uff0e

\n
\n\n
\n
venv \u74b0\u5883\u306b\u5c0e\u5165\u3057\u3066\u8a66\u3059\uff0e
\n
\n
$ git clone https://github.com/offish/twitter-x-broadcast-downloader (1)\n$ cd twitter-x-broadcast-downloader\n$ python3 -m venv venv (2)\n$ source venv/bin/activate (3)\n$ pip install -r \"requirements.txt\" (4)\n$ python main.py (5)\nWhat is the broadcast URL? https://x.com/i/broadcasts/1qGvvkWeqdBGB (6)\nGot media key 28_2038539604165640192\nGot playback URL https://prod-fastly-ap-northeast-1.video.pscp.tv/Transcoding/v1/hls/PTdVIXd-pzzuOcGNlng6TG9haAxe5-rcN7QaIridcZbNbingfwGFrSiqe9DsliGqOpoLNO8lZ2Pk9a_owkY3aw/non_transcode/ap-northeast-1/periscope-replay-direct-prod-ap-northeast-1-public/master_dynamic_16671870457049479117.m3u8?type=replay\nDownloading the broadcast as 28_2038539604165640192.mp4...\n[generic] Extracting URL: https://prod-fastly-ap-northeast-1.video.pscp.tv/Transcoding/v1/hls/PTdVIXd-pzzuOcGNlng6TG9haAxe5...117.m3u8?type=replay\n[generic] master_dynamic_16671870457049479117: Downloading webpage\n[generic] master_dynamic_16671870457049479117: Downloading m3u8 information\n[generic] master_dynamic_16671870457049479117: Checking m3u8 live status\n[info] master_dynamic_16671870457049479117: Downloading 1 format(s): 5500\n[hlsnative] Downloading m3u8 manifest\n[hlsnative] Total fragments: 6385\n[download] Destination: /home/matoken/src/twitter-x-broadcast-downloader/downloads/28_2038539604165640192.mp4\n[download] 100% of    3.64GiB in 00:03:49 at 16.24MiB/s\n[FixupM3u8] Fixing MPEG-TS in MP4 container of \"/home/matoken/src/twitter-x-broadcast-downloader/downloads/28_2038539604165640192.mp4\"\n\n\nWhat is the broadcast URL? (7)
\n
\n
\n
\n
    \n
  1. \n

    source clone

    \n
  2. \n
  3. \n

    venv \u74b0\u5883\u3092\u4f5c\u308b

    \n
  4. \n
  5. \n

    venv \u3092\u6709\u52b9\u306b

    \n
  6. \n
  7. \n

    venv \u74b0\u5883\u306b\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb

    \n
  8. \n
  9. \n

    X/Twitter Broadcast Downloader \u3092\u5b9f\u884c

    \n
  10. \n
  11. \n

    \u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\u3057\u305f\u3044URL \u3092\u6e21\u3059

    \n
  12. \n
  13. \n

    \u6b21\u306e\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\u3057\u305f\u3044URL \u5f85\u3061

    \n
  14. \n
\n
\n
\n

\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\u3067\u304d\u307e\u3057\u305f\uff0e

\n
\n
\n
\n
$ ls -lA downloads/\ntotal 3722204\n-rw-rw-r-- 1 matoken matoken 3811532277 Mar 31 18:03 28_2038539604165640192.mp4\n-rw-rw-r-- 1 matoken matoken          0 Mar 31 17:57 .gitkeep\n$ ffprobe downloads/28_2038539604165640192.mp4 2>&1 | grep -A 99 ^Input\nInput #0, mov,mp4,m4a,3gp,3g2,mj2, from 'downloads/28_2038539604165640192.mp4':\n  Metadata:\n    major_brand     : isom\n    minor_version   : 512\n    compatible_brands: isomiso2avc1mp41\n    encoder         : Lavf61.7.100\n  Duration: 03:35:23.76, start: 0.000000, bitrate: 2359 kb/s\n  Stream #0:0[0x1](und): Video: h264 (High) (avc1 / 0x31637661), yuv420p(progressive), 1920x1080, 2187 kb/s, 30 fps, 30 tbr, 90k tbn (default)\n      Metadata:\n        handler_name    : VideoHandler\n        vendor_id       : [0][0][0][0]\n  Stream #0:1[0x2](und): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 160 kb/s (default)\n      Metadata:\n        handler_name    : SoundHandler\n        vendor_id       : [0][0][0][0]
\n
\n
\n
\n

\u4ee5\u4e0b\u4f59\u9332\uff0e

\n
\n
\n

\u30ea\u30e2\u30fc\u30c8\u306eVPS \u3067\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\u3057\u305f\u306e\u3067\u3059\u304c\u7d50\u69cb\u5927\u304d\u3044\u306e\u3067\u5c0f\u3055\u304f\u3057\u3066\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\u3057\u307e\u3059\uff0e

\n
\n
\n
ffmpeg \u30b3\u30de\u30f3\u30c9\u3067\u52d5\u753b\u3092\u5c0f\u3055\u304f
\n
\n
$ ffmpeg -i downloads/28_2038539604165640192.mp4 -vcodec libx264 -crf 33 -vf \"scale=720:-2\" -c:a copy downloads/28_2038539604165640192-720.mp4\n$ ls -1s downloads/\ntotal 4172176\n 449972 28_2038539604165640192-720.mp4\n3722204 28_2038539604165640192.mp4
\n
\n
\n
\n
\u52d5\u753b\u306e\u97f3\u58f0\u3092\u53d6\u308a\u51fa\u3057\u3066Whisper.cpp \u3067\u5b57\u5e55\u4f5c\u6210
\n
\n
$ ffmpeg -i ~/Downloads/28_2038539604165640192-720.mp4 -ar 44100 -ac 1 -sample_fmt s16 -af silenceremove=1:0:-50dB  clawcon.wav\n$ ./build/bin/whisper-cli -m ./models/ggml-large-v3-turbo.bin --output-srt --language auto -f ./clawcon.wav\n$ ls -1s clawcon.wav*\n1067548 clawcon.wav\n    152 clawcon.wav.srt\n$ head  clawcon.wav.srt\n1\n00:00:00,000 --> 00:00:06,660\nAlright everyone, we'll be starting in 10 minutes. Please make your way to the stage area. We'll be starting in 10 minutes.\n\n2\n00:00:30,000 --> 00:00:59,980\n Thank you.\n\n3\n00:01:00,000 --> 00:01:29,980
\n
\n
\n
\n
\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\u74b0\u5883
\n
\n
$ dpkg-query -W python3 python3-venv ffmpeg\nffmpeg  7:7.1.3-0+deb13u1\npython3 3.13.5-1\npython3-venv    3.13.5-1\n$ lsb_release -dr\nDescription:    Debian GNU/Linux 13 (trixie)\nRelease:        13\n$ arch\nx86_64
\n
\n
\n
\n
\u52d5\u753b\u7de8\u96c6\uff0c\u6587\u5b57\u8d77\u3053\u3057\u74b0\u5883
\n
\n
$ dpkg-query -W ffmpeg\nffmpeg  7:8.1-3+b1\na$ git remote -v\norigin  https://github.com/ggerganov/whisper.cpp.git (fetch)\norigin  https://github.com/ggerganov/whisper.cpp.git (push)\n$ git log --pretty=oneline -1\n95ea8f9bfb03a15db08a8989966fd1ae3361e20d (HEAD -> master, origin/master, origin/HEAD) sync : ggml\n$ lsb_release -dr\nDescription:    Debian GNU/Linux forky/sid\nRelease:        n/a\n$ arch\nx86_64
\n
\n
\n
\n
\n", "content_text": "Twitter\u3067\u914d\u4fe1\u3055\u308c\u305f\u30e9\u30a4\u30d6\u52d5\u753b\u306e\u30a2\u30fc\u30ab\u30a4\u30d6\u3092\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\u3057\u3066\u307f\u307e\u3057\u305f\uff0e\n\n\n\n\u3068\u3042\u308b\u30a4\u30d9\u30f3\u30c8\u304cTwitter \u3067\u914d\u4fe1\u3055\u308c\u3066\u3044\u305f\u3089\u3057\u304fYouTube \u306b\u3082\u3042\u308b\u306e\u3067\u306f\u3068\u601d\u3063\u305f\u3051\u3069\u898b\u5f53\u305f\u308a\u307e\u305b\u3093\uff0eTwitter \u306b\u30a2\u30fc\u30ab\u30a4\u30d6\u304c\u6b8b\u3063\u3066\u3044\u308b\u306e\u3067\u3059\u304c\uff0c\u306a\u3093\u304b\u518d\u751f\u304c\u3059\u3050\u6b62\u307e\u308b\u306e\u3067\u8f9b\u3044\uff0e\n\u3068\u3044\u3046\u3053\u3068\u3067\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\u3067\u304d\u306a\u3044\u304b\u306a\u3068\u691c\u7d22\u3059\u308b\u3068X/Twitter Broadcast Downloader \u3068\u3044\u3046\u3082\u306e\u3092\u898b\u3064\u3051\u307e\u3057\u305f\uff0e\u3053\u308c\u3067\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\u3057\u3066\u307f\u307e\u3057\u305f\uff0e\n\n\n\n\noffish/twitter-x-broadcast-downloader: Download X/Twitter broadcasts or lives\n\n\n\n\nvenv \u74b0\u5883\u306b\u5c0e\u5165\u3057\u3066\u8a66\u3059\uff0e\n\n$ git clone https://github.com/offish/twitter-x-broadcast-downloader (1)\n$ cd twitter-x-broadcast-downloader\n$ python3 -m venv venv (2)\n$ source venv/bin/activate (3)\n$ pip install -r \"requirements.txt\" (4)\n$ python main.py (5)\nWhat is the broadcast URL? https://x.com/i/broadcasts/1qGvvkWeqdBGB (6)\nGot media key 28_2038539604165640192\nGot playback URL https://prod-fastly-ap-northeast-1.video.pscp.tv/Transcoding/v1/hls/PTdVIXd-pzzuOcGNlng6TG9haAxe5-rcN7QaIridcZbNbingfwGFrSiqe9DsliGqOpoLNO8lZ2Pk9a_owkY3aw/non_transcode/ap-northeast-1/periscope-replay-direct-prod-ap-northeast-1-public/master_dynamic_16671870457049479117.m3u8?type=replay\nDownloading the broadcast as 28_2038539604165640192.mp4...\n[generic] Extracting URL: https://prod-fastly-ap-northeast-1.video.pscp.tv/Transcoding/v1/hls/PTdVIXd-pzzuOcGNlng6TG9haAxe5...117.m3u8?type=replay\n[generic] master_dynamic_16671870457049479117: Downloading webpage\n[generic] master_dynamic_16671870457049479117: Downloading m3u8 information\n[generic] master_dynamic_16671870457049479117: Checking m3u8 live status\n[info] master_dynamic_16671870457049479117: Downloading 1 format(s): 5500\n[hlsnative] Downloading m3u8 manifest\n[hlsnative] Total fragments: 6385\n[download] Destination: /home/matoken/src/twitter-x-broadcast-downloader/downloads/28_2038539604165640192.mp4\n[download] 100% of 3.64GiB in 00:03:49 at 16.24MiB/s\n[FixupM3u8] Fixing MPEG-TS in MP4 container of \"/home/matoken/src/twitter-x-broadcast-downloader/downloads/28_2038539604165640192.mp4\"\n\n\nWhat is the broadcast URL? (7)\n\n\n\n\n\nsource clone\n\n\nvenv \u74b0\u5883\u3092\u4f5c\u308b\n\n\nvenv \u3092\u6709\u52b9\u306b\n\n\nvenv \u74b0\u5883\u306b\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\n\n\nX/Twitter Broadcast Downloader \u3092\u5b9f\u884c\n\n\n\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\u3057\u305f\u3044URL \u3092\u6e21\u3059\n\n\n\u6b21\u306e\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\u3057\u305f\u3044URL \u5f85\u3061\n\n\n\n\n\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\u3067\u304d\u307e\u3057\u305f\uff0e\n\n\n\n$ ls -lA downloads/\ntotal 3722204\n-rw-rw-r-- 1 matoken matoken 3811532277 Mar 31 18:03 28_2038539604165640192.mp4\n-rw-rw-r-- 1 matoken matoken 0 Mar 31 17:57 .gitkeep\n$ ffprobe downloads/28_2038539604165640192.mp4 2>&1 | grep -A 99 ^Input\nInput #0, mov,mp4,m4a,3gp,3g2,mj2, from 'downloads/28_2038539604165640192.mp4':\n Metadata:\n major_brand : isom\n minor_version : 512\n compatible_brands: isomiso2avc1mp41\n encoder : Lavf61.7.100\n Duration: 03:35:23.76, start: 0.000000, bitrate: 2359 kb/s\n Stream #0:0[0x1](und): Video: h264 (High) (avc1 / 0x31637661), yuv420p(progressive), 1920x1080, 2187 kb/s, 30 fps, 30 tbr, 90k tbn (default)\n Metadata:\n handler_name : VideoHandler\n vendor_id : [0][0][0][0]\n Stream #0:1[0x2](und): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 160 kb/s (default)\n Metadata:\n handler_name : SoundHandler\n vendor_id : [0][0][0][0]\n\n\n\n\u4ee5\u4e0b\u4f59\u9332\uff0e\n\n\n\u30ea\u30e2\u30fc\u30c8\u306eVPS \u3067\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\u3057\u305f\u306e\u3067\u3059\u304c\u7d50\u69cb\u5927\u304d\u3044\u306e\u3067\u5c0f\u3055\u304f\u3057\u3066\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\u3057\u307e\u3059\uff0e\n\n\nffmpeg \u30b3\u30de\u30f3\u30c9\u3067\u52d5\u753b\u3092\u5c0f\u3055\u304f\n\n$ ffmpeg -i downloads/28_2038539604165640192.mp4 -vcodec libx264 -crf 33 -vf \"scale=720:-2\" -c:a copy downloads/28_2038539604165640192-720.mp4\n$ ls -1s downloads/\ntotal 4172176\n 449972 28_2038539604165640192-720.mp4\n3722204 28_2038539604165640192.mp4\n\n\n\n\u52d5\u753b\u306e\u97f3\u58f0\u3092\u53d6\u308a\u51fa\u3057\u3066Whisper.cpp \u3067\u5b57\u5e55\u4f5c\u6210\n\n$ ffmpeg -i ~/Downloads/28_2038539604165640192-720.mp4 -ar 44100 -ac 1 -sample_fmt s16 -af silenceremove=1:0:-50dB clawcon.wav\n$ ./build/bin/whisper-cli -m ./models/ggml-large-v3-turbo.bin --output-srt --language auto -f ./clawcon.wav\n$ ls -1s clawcon.wav*\n1067548 clawcon.wav\n 152 clawcon.wav.srt\n$ head clawcon.wav.srt\n1\n00:00:00,000 --> 00:00:06,660\nAlright everyone, we'll be starting in 10 minutes. Please make your way to the stage area. We'll be starting in 10 minutes.\n\n2\n00:00:30,000 --> 00:00:59,980\n Thank you.\n\n3\n00:01:00,000 --> 00:01:29,980\n\n\n\n\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\u74b0\u5883\n\n$ dpkg-query -W python3 python3-venv ffmpeg\nffmpeg 7:7.1.3-0+deb13u1\npython3 3.13.5-1\npython3-venv 3.13.5-1\n$ lsb_release -dr\nDescription: Debian GNU/Linux 13 (trixie)\nRelease: 13\n$ arch\nx86_64\n\n\n\n\u52d5\u753b\u7de8\u96c6\uff0c\u6587\u5b57\u8d77\u3053\u3057\u74b0\u5883\n\n$ dpkg-query -W ffmpeg\nffmpeg 7:8.1-3+b1\na$ git remote -v\norigin https://github.com/ggerganov/whisper.cpp.git (fetch)\norigin https://github.com/ggerganov/whisper.cpp.git (push)\n$ git log --pretty=oneline -1\n95ea8f9bfb03a15db08a8989966fd1ae3361e20d (HEAD -> master, origin/master, origin/HEAD) sync : ggml\n$ lsb_release -dr\nDescription: Debian GNU/Linux forky/sid\nRelease: n/a\n$ arch\nx86_64", "date_published": "2026-04-01T07:10:47+09:00", "date_modified": "2026-04-01T07:10:49+09:00", "authors": [ { "name": "matoken", "url": "https://matoken.org/blog/author/matoken/", "avatar": "https://secure.gravatar.com/avatar/38f5f3b575c5eb45cda6aa659bca119ac7a5e16b46565e869d0030e3bd66981d?s=512&d=mm&r=g" } ], "author": { "name": "matoken", "url": "https://matoken.org/blog/author/matoken/", "avatar": "https://secure.gravatar.com/avatar/38f5f3b575c5eb45cda6aa659bca119ac7a5e16b46565e869d0030e3bd66981d?s=512&d=mm&r=g" }, "tags": [ "ffmpeg", "Twitter", "Debian", "Linux", "sid", "trixie" ] }, { "id": "https://matoken.org/blog/?p=5367", "url": "https://matoken.org/blog/2026/03/26/snac-2-91/", "title": "\u8efd\u91cfActivityPub Server\u306esnac 2.91\u30ea\u30ea\u30fc\u30b9", "content_html": "
\n
\n
\n

\"susie64

\n
\n
\n

c\u8a00\u8a9e\u3067\u4f5c\u3089\u308c\u3066\u3044\u308b\u8efd\u91cfActivityPub Server \u306esnac 2.91 \u304c\u30ea\u30ea\u30fc\u30b9\u3055\u308c\u307e\u3057\u305f\uff0e

\n
\n\n

\n

\n
\n
\n

Release Notes

\n
\n
\n
\n
\n

## 2.91

\n
\n
\n

Fixed some local posts not being shown if the replied post is deleted.

\n
\n
\n

Fixed web UI incorrect links to public posts for some configurations.

\n
\n
\n

Fixed encoding bug in Mastodon-style share links.

\n
\n
\n

Fixed an error that made imposible to leave empty the following hashtags or blocked hashtags from the web UI.

\n
\n
\n

Include post attachments in the RSS feed entries.

\n
\n
\n

Added some OpenBSD-specific documentation (contributed by oxzi).

\n
\n
\n

Fixed some timezones (contributed by matoken).

\n
\n
\n

Fixed some crashes (special thanks to Louis Merlin for helping me with this).

\n
\n
\n

Updated Docker scripts to avoid generating a useless log file.

\n
\n
\n

Fixed several memory leaks, key generation errors and HTML inconsistencies (contributed by dandelions).

\n
\n
\n

Added ostatus.org and FEP-3b86 data to Webfinger objects.

\n
\n
\n

Added a new CONTRIBUTING.md file. Among other guidelines, I explicitly say there that AI contributions are NOT accepted.

\n
\n
\n

snac is now available as a [Yunohost app](https://apps.yunohost.org/app/snac). Thank you very much to Bruno Cesar Rocha for this.

\n
\n
\n
\n
\n

\u4eca\u56de\u306e\u30ea\u30ea\u30fc\u30b9\u3067\u306f CONTRIBUTING.md \u30d5\u30a1\u30a4\u30eb\u304c\u8ffd\u52a0\u3055\u308c\u8ca2\u732e\u306b\u3064\u3044\u3066\u660e\u78ba\u5316\u3055\u308c\u307e\u3057\u305f\uff0e\u305d\u3057\u3066\u6240\u8b02\u751f\u6210AI\u3084LLM\u3092\u4f7f\u3063\u305f\u3082\u306e\u306f\u53d7\u3051\u53d6\u308c\u306a\u3044\u3068\u3082\uff0e
\n\u5f8c\u306f\u5927\u4f53\u30d0\u30b0\u4fee\u6b63\u3067\u3057\u3087\u3046\u304b\uff0e\u81ea\u5206\u306e\u9001\u3063\u305f\u5c0f\u3055\u3044\u30d1\u30c3\u30c1\u3084\u5831\u544a\u3057\u305f\u30d0\u30b0\u4fee\u6b63\u3082\u542b\u307e\u308c\u3066\u3044\u305f\u308a\u3057\u307e\u3059\uff0e

\n
\n
\n

\u305d\u306e\u4ed6\uff0cYunohost app \u3068\u3057\u3066\u3082\u767b\u9332\u3055\u308c\uff0cYunohost \u74b0\u5883\u3067\u7c21\u5358\u306b\u5229\u7528\u3067\u304d\u308b\u3088\u3046\u306b\u306a\u3063\u305f\u3088\u3046\u3067\u3059\uff0e

\n
\n\n
\n
\n
\n

\u81ea\u74b0\u5883\u306esnac\u30a2\u30c3\u30d7\u30b0\u30ec\u30fc\u30c9

\n
\n
\n

\u500b\u4eba\u7528\u306esnac \u306fsource \u304b\u3089build \u3057\u3066\u30ea\u30ea\u30fc\u30b9\u5f8c\u6570\u6642\u9593\u5f8c\u306b\u306f\u30a2\u30c3\u30d7\u30b0\u30ec\u30fc\u30c9\u3057\u307e\u3057\u305f\uff0e
\n#kagolug \u306esnac \u306fDebian stable-backports(trixie-backports) \u306e\u30d1\u30c3\u30b1\u30fc\u30b8\u3092\u5229\u7528\u3057\u3066\u3044\u3066\uff0c\u6570\u65e5\u9045\u308c\u306e\u4eca\u65e5\u30a2\u30c3\u30d7\u30b0\u30ec\u30fc\u30c9\u3057\u307e\u3057\u305f\uff0e

\n
\n
\n

\u81ea\u5206\u306e\u74b0\u5883\u306eamd64 \u3060\u3068\u554f\u984c\u306a\u304b\u3063\u305f\u3067\u3059\u304c\uff0cDebian package \u306f\u4e00\u90e8\u74b0\u5883\u3067\u30b3\u30b1\u3066\u3044\u305d\u3046\uff0e

\n
\n
\n
\n
$ rmadison snac2\nsnac2      | 2.75-2~bpo12+1 | oldstable-backports       | source, amd64, arm64, armel, armhf, i386, mips64el, mipsel, ppc64el, s390x\nsnac2      | 2.75-2~bpo12+1 | oldstable-backports-debug | source\nsnac2      | 2.75-2         | stable                    | source, amd64, arm64, armel, armhf, i386, ppc64el, riscv64, s390x\nsnac2      | 2.90-1~bpo13+1 | stable-backports          | source, riscv64\nsnac2      | 2.90-1~bpo13+1 | stable-backports-debug    | source\nsnac2      | 2.90-1         | testing                   | source, amd64, arm64, armhf, i386, ppc64el, riscv64, s390x\nsnac2      | 2.90-1         | unstable                  | source, riscv64\nsnac2      | 2.90-1         | unstable-debug            | source\nsnac2      | 2.91-1~bpo13+1 | buildd-stable-backports   | source, amd64, arm64, armel, armhf, i386, ppc64el, s390x\nsnac2      | 2.91-1~bpo13+1 | stable-backports          | source, amd64, arm64, armel, armhf, i386, ppc64el, s390x\nsnac2      | 2.91-1~bpo13+1 | stable-backports-debug    | source\nsnac2      | 2.91-1         | buildd-unstable           | source, amd64, arm64, armhf, i386, loong64, ppc64el, riscv64, s390x\nsnac2      | 2.91-1         | unstable                  | source, amd64, arm64, armhf, i386, loong64, ppc64el, riscv64, s390x\nsnac2      | 2.91-1         | unstable-debug            | source
\n
\n
\n
\n
\n
\n
\n
Migration status for snac2 (2.90-1 to 2.91-1): BLOCKED: Maybe temporary, maybe blocked but Britney is missing information (check below)\nIssues preventing migration:\n\u2219 \u2219 Missing build on riscv64\n\u2219 \u2219 Autopkgtest deferred on riscv64: missing arch:riscv64 build\n\u2219 \u2219 Autopkgtest for snac2/2.91-1: amd64: Pass, arm64: Pass, i386: Test triggered, ppc64el: Test triggered, s390x: Test triggered\n\u2219 \u2219 Lintian check waiting for test results - info\n\u2219 \u2219 Too young, only 0 of 5 days old\nAdditional info (not blocking):\n\u2219 \u2219 Piuparts tested OK - https://piuparts.debian.org/sid/source/s/snac2.html\n\u2219 \u2219 Reproducibility check waiting for results on amd64\n\u2219 \u2219 Reproducibility check waiting for results on arm64\n\u2219 \u2219 Reproduced on armhf\n\u2219 \u2219 Reproducibility check waiting for results on i386\n\u2219 \u2219 Reproducibility check waiting for results on ppc64el\nNot considered
\n
\n
\n
\n\n
\n
\n
\n", "content_text": "c\u8a00\u8a9e\u3067\u4f5c\u3089\u308c\u3066\u3044\u308b\u8efd\u91cfActivityPub Server \u306esnac 2.91 \u304c\u30ea\u30ea\u30fc\u30b9\u3055\u308c\u307e\u3057\u305f\uff0e\n\n\n\n\nThe Real Grunfink (@grunfink@comam.es) \u4f5c\u8005\u306etoot\n\n\nRelease Notes\n\n\ngrunfink/snac2: A simple, minimalistic ActivityPub instance written in portable C – Codeberg.org\n\n\n\n\n\n\n\nRelease Notes\n\n\n\n\n## 2.91\n\n\nFixed some local posts not being shown if the replied post is deleted.\n\n\nFixed web UI incorrect links to public posts for some configurations.\n\n\nFixed encoding bug in Mastodon-style share links.\n\n\nFixed an error that made imposible to leave empty the following hashtags or blocked hashtags from the web UI.\n\n\nInclude post attachments in the RSS feed entries.\n\n\nAdded some OpenBSD-specific documentation (contributed by oxzi).\n\n\nFixed some timezones (contributed by matoken).\n\n\nFixed some crashes (special thanks to Louis Merlin for helping me with this).\n\n\nUpdated Docker scripts to avoid generating a useless log file.\n\n\nFixed several memory leaks, key generation errors and HTML inconsistencies (contributed by dandelions).\n\n\nAdded ostatus.org and FEP-3b86 data to Webfinger objects.\n\n\nAdded a new CONTRIBUTING.md file. Among other guidelines, I explicitly say there that AI contributions are NOT accepted.\n\n\nsnac is now available as a [Yunohost app](https://apps.yunohost.org/app/snac). Thank you very much to Bruno Cesar Rocha for this.\n\n\n\n\n\u4eca\u56de\u306e\u30ea\u30ea\u30fc\u30b9\u3067\u306f CONTRIBUTING.md \u30d5\u30a1\u30a4\u30eb\u304c\u8ffd\u52a0\u3055\u308c\u8ca2\u732e\u306b\u3064\u3044\u3066\u660e\u78ba\u5316\u3055\u308c\u307e\u3057\u305f\uff0e\u305d\u3057\u3066\u6240\u8b02\u751f\u6210AI\u3084LLM\u3092\u4f7f\u3063\u305f\u3082\u306e\u306f\u53d7\u3051\u53d6\u308c\u306a\u3044\u3068\u3082\uff0e\n\u5f8c\u306f\u5927\u4f53\u30d0\u30b0\u4fee\u6b63\u3067\u3057\u3087\u3046\u304b\uff0e\u81ea\u5206\u306e\u9001\u3063\u305f\u5c0f\u3055\u3044\u30d1\u30c3\u30c1\u3084\u5831\u544a\u3057\u305f\u30d0\u30b0\u4fee\u6b63\u3082\u542b\u307e\u308c\u3066\u3044\u305f\u308a\u3057\u307e\u3059\uff0e\n\n\n\u305d\u306e\u4ed6\uff0cYunohost app \u3068\u3057\u3066\u3082\u767b\u9332\u3055\u308c\uff0cYunohost \u74b0\u5883\u3067\u7c21\u5358\u306b\u5229\u7528\u3067\u304d\u308b\u3088\u3046\u306b\u306a\u3063\u305f\u3088\u3046\u3067\u3059\uff0e\n\n\n\n\nYunoHost app store | snac2\n\n\n\n\n\n\n\u81ea\u74b0\u5883\u306esnac\u30a2\u30c3\u30d7\u30b0\u30ec\u30fc\u30c9\n\n\n\u500b\u4eba\u7528\u306esnac \u306fsource \u304b\u3089build \u3057\u3066\u30ea\u30ea\u30fc\u30b9\u5f8c\u6570\u6642\u9593\u5f8c\u306b\u306f\u30a2\u30c3\u30d7\u30b0\u30ec\u30fc\u30c9\u3057\u307e\u3057\u305f\uff0e\n#kagolug \u306esnac \u306fDebian stable-backports(trixie-backports) \u306e\u30d1\u30c3\u30b1\u30fc\u30b8\u3092\u5229\u7528\u3057\u3066\u3044\u3066\uff0c\u6570\u65e5\u9045\u308c\u306e\u4eca\u65e5\u30a2\u30c3\u30d7\u30b0\u30ec\u30fc\u30c9\u3057\u307e\u3057\u305f\uff0e\n\n\n\u81ea\u5206\u306e\u74b0\u5883\u306eamd64 \u3060\u3068\u554f\u984c\u306a\u304b\u3063\u305f\u3067\u3059\u304c\uff0cDebian package \u306f\u4e00\u90e8\u74b0\u5883\u3067\u30b3\u30b1\u3066\u3044\u305d\u3046\uff0e\n\n\n\n$ rmadison snac2\nsnac2 | 2.75-2~bpo12+1 | oldstable-backports | source, amd64, arm64, armel, armhf, i386, mips64el, mipsel, ppc64el, s390x\nsnac2 | 2.75-2~bpo12+1 | oldstable-backports-debug | source\nsnac2 | 2.75-2 | stable | source, amd64, arm64, armel, armhf, i386, ppc64el, riscv64, s390x\nsnac2 | 2.90-1~bpo13+1 | stable-backports | source, riscv64\nsnac2 | 2.90-1~bpo13+1 | stable-backports-debug | source\nsnac2 | 2.90-1 | testing | source, amd64, arm64, armhf, i386, ppc64el, riscv64, s390x\nsnac2 | 2.90-1 | unstable | source, riscv64\nsnac2 | 2.90-1 | unstable-debug | source\nsnac2 | 2.91-1~bpo13+1 | buildd-stable-backports | source, amd64, arm64, armel, armhf, i386, ppc64el, s390x\nsnac2 | 2.91-1~bpo13+1 | stable-backports | source, amd64, arm64, armel, armhf, i386, ppc64el, s390x\nsnac2 | 2.91-1~bpo13+1 | stable-backports-debug | source\nsnac2 | 2.91-1 | buildd-unstable | source, amd64, arm64, armhf, i386, loong64, ppc64el, riscv64, s390x\nsnac2 | 2.91-1 | unstable | source, amd64, arm64, armhf, i386, loong64, ppc64el, riscv64, s390x\nsnac2 | 2.91-1 | unstable-debug | source\n\n\n\n\n\n\nMigration status for snac2 (2.90-1 to 2.91-1): BLOCKED: Maybe temporary, maybe blocked but Britney is missing information (check below)\nIssues preventing migration:\n\u2219 \u2219 Missing build on riscv64\n\u2219 \u2219 Autopkgtest deferred on riscv64: missing arch:riscv64 build\n\u2219 \u2219 Autopkgtest for snac2/2.91-1: amd64: Pass, arm64: Pass, i386: Test triggered, ppc64el: Test triggered, s390x: Test triggered\n\u2219 \u2219 Lintian check waiting for test results - info\n\u2219 \u2219 Too young, only 0 of 5 days old\nAdditional info (not blocking):\n\u2219 \u2219 Piuparts tested OK - https://piuparts.debian.org/sid/source/s/snac2.html\n\u2219 \u2219 Reproducibility check waiting for results on amd64\n\u2219 \u2219 Reproducibility check waiting for results on arm64\n\u2219 \u2219 Reproduced on armhf\n\u2219 \u2219 Reproducibility check waiting for results on i386\n\u2219 \u2219 Reproducibility check waiting for results on ppc64el\nNot considered\n\n\n\n\n— snac2 – Debian Package Tracker", "date_published": "2026-03-26T20:39:29+09:00", "date_modified": "2026-03-26T20:39:31+09:00", "authors": [ { "name": "matoken", "url": "https://matoken.org/blog/author/matoken/", "avatar": "https://secure.gravatar.com/avatar/38f5f3b575c5eb45cda6aa659bca119ac7a5e16b46565e869d0030e3bd66981d?s=512&d=mm&r=g" } ], "author": { "name": "matoken", "url": "https://matoken.org/blog/author/matoken/", "avatar": "https://secure.gravatar.com/avatar/38f5f3b575c5eb45cda6aa659bca119ac7a5e16b46565e869d0030e3bd66981d?s=512&d=mm&r=g" }, "tags": [ "ActivityPub", "snac", "Debian", "Linux", "trixie", "\u672a\u5206\u985e" ] }, { "id": "https://matoken.org/blog/?p=5314", "url": "https://matoken.org/blog/2026/03/07/gnome-setting-reset/", "title": "\u4e45\u3005\u306bGNOME\u74b0\u5883\u3092\u8d77\u52d5\u3057\u305f\u3089\u64cd\u4f5c\u3067\u304d\u306a\u304f\u306a\u3063\u3066\u3044\u305f\u306e\u3067\u8a2d\u5b9a\u3092\u30ea\u30bb\u30c3\u30c8", "content_html": "
\n
\n

\n
\n

\u3044\u3064\u3082Xfce4 \u3067\u4f7f\u3063\u3066\u3044\u308bDebian statble(trixie) \u74b0\u5883\u3067\u4e45\u3005\u306bGNOME \u74b0\u5883\u3092\u8d77\u52d5\u3057\u305f\u3089\u64cd\u4f5c\u3092\u53d7\u3051\u4ed8\u3051\u307e\u305b\u3093\uff0e
\n\u8a2d\u5b9a\u3092\u30ea\u30bb\u30c3\u30c8\u3057\u3066\u5fa9\u65e7\u3057\u307e\u3057\u305f\uff0e

\n
\n

\n
\n

GNOME \u306e\u72b6\u6cc1\u306f\u4e0a\u90e8\u306e\u6642\u8a08\u3084\u62e1\u5f35\u6a5f\u80fd\u306eRunCat \u306a\u3093\u304b\u306f\u52d5\u3044\u3066\u3044\u308b\u3051\u3069\u30ad\u30fc\u306e\u5165\u529b\u3092\u53d7\u3051\u4ed8\u3051\u305a\u64cd\u4f5c\u3067\u304d\u307e\u305b\u3093\uff0e\u30de\u30a6\u30b9\u3082\u30ab\u30fc\u30bd\u30eb\u304c\u5076\u306b\u898b\u3048\u308b\u3051\u3069\u30af\u30ea\u30c3\u30af\u3057\u3066\u3082\u4f55\u3082\u8d77\u304d\u307e\u305b\u3093\uff0e
\n\u3068\u3044\u3046\u611f\u3058\u3067\u4f7f\u3044\u7269\u306b\u306a\u308a\u307e\u305b\u3093\uff0e
\n\u5143\u3005\u307b\u3068\u3093\u3069\u4f7f\u3063\u3066\u3044\u306a\u304b\u3063\u305f\u306e\u3067\u8a2d\u5b9a\u3092\u521d\u671f\u5316\u3057\u3066\u307f\u308b\u3053\u3068\u306b\uff0e

\n
\n
\n

\u307e\u305a\u306fGNOME \u304b\u3089\u3069\u3046\u306b\u304b\u3057\u3066\u629c\u3051\u307e\u3059\uff0e\u4eca\u56de\u306f\u30ad\u30fc\u5165\u529b\u3092\u53d7\u3051\u4ed8\u3051\u305aCtrl+Alt+F1 \u306a\u3093\u304b\u3067\u30b3\u30f3\u30bd\u30fc\u30eb\u306b\u3082\u964d\u308a\u308c\u306a\u3044\u306e\u3067\u56f0\u308a\u307e\u3057\u305f\u304c\uff0csshd \u3092\u6709\u52b9\u306b\u3057\u3066\u3044\u305f\u306e\u3067\u305d\u308c\u3067\u5165\u3063\u3066\u30c7\u30a3\u30b9\u30d7\u30ec\u30a4\u30de\u30cd\u30fc\u30b8\u30e3(\u4eca\u56de\u306fLightDM) \u3092\u518d\u8d77\u52d5\u3057\u3066\u629c\u3051\u307e\u3057\u305f\uff0e

\n
\n
\n
\n
$ sudo service lightdm restart
\n
\n
\n
\n\n\n\n\n\n
\n
Tip
\n
\n
\n

\u3082\u3057\u30ea\u30e2\u30fc\u30c8\u64cd\u4f5c\u3082\u3067\u304d\u306a\u3044\u5834\u5408Magic SysRq key \u306f\u53cd\u5fdc\u3057\u305f\u306e\u3067\u3053\u308c\u3067\u518d\u8d77\u52d5\u3067\u304d\u308b\u3068\u601d\u3044\u307e\u3059\uff0e

\n
\n\n
\n
\n
\n

GNOME \u304b\u3089\u629c\u3051\u305f\u5f8c\uff0cGNOME \u4ee5\u5916\u306e\u30c7\u30b9\u30af\u30c8\u30c3\u30d7\u74b0\u5883\u304b\uff0c\u30b3\u30f3\u30bd\u30fc\u30eb\uff0cssh \u306a\u3069\u3067dconf \u30b3\u30de\u30f3\u30c9\u3067\u8a2d\u5b9a\u3092\u30ea\u30bb\u30c3\u30c8\u3057\u307e\u3059\uff0e

\n
\n
\n
\n
$ dconf dump / > dconf.backup (1)\n$ dconf reset -f /org/gnome (2)
\n
\n
\n
\n
    \n
  1. \n

    \u5ff5\u306e\u70badconf \u3092backup

    \n
  2. \n
  3. \n

    dconf \u306egnome \u4ee5\u4e0b\u3092\u30ea\u30bb\u30c3\u30c8

    \n
  4. \n
\n
\n
\n

\u3053\u306e\u5f8cGNOME \u306b\u5165\u308a\u76f4\u3059\u3053\u3068\u3067\u5fa9\u65e7\u3067\u304d\u307e\u3057\u305f\uff0e

\n
\n
\n

\"GNOME48

\n
\n
\n

\u99c4\u76ee\u3060\u3063\u305f\u5834\u5408 dconf reset -f / \u307e\u3067\u3084\u3063\u3066\u307f\u3066\u3082\u3044\u3044\u304b\u3082\u3057\u308c\u307e\u305b\u3093\uff0e
\n\u305d\u308c\u3067\u3082\u99c4\u76ee\u306a\u3089$HOME \u4ee5\u4e0b\u306eGNOME \u95a2\u9023\u306e\u30d5\u30a1\u30a4\u30eb\u3092\u6d88\u3059\u611f\u3058\u3067\u3057\u3087\u3046\u304b\uff0e

\n
\n
\n

\u3053\u306e\u74b0\u5883\u306fDebian bookworm \u304b\u3089dist-upgrade \u3057\u305f\u74b0\u5883\u306a\u306e\u3067dist-uograde \u306e\u30bf\u30a4\u30df\u30f3\u30b0\u3067\u304a\u58ca\u308c\u305f\u306e\u304b\u3082\u3057\u308c\u307e\u305b\u3093\uff0e
\n\u62e1\u5f35\u6a5f\u80fd\u3082\u602a\u3057\u3044\u304b\u306a\u3068\u601d\u3063\u305f\u306e\u3067\u3059\u304c\u4eca\u56de\u306e\u30ea\u30bb\u30c3\u30c8\u3067\u306f\u62e1\u5f35\u6a5f\u80fd\u306f\u8a2d\u5b9a\u3055\u308c\u305f\u307e\u307e\u3067\u52d5\u4f5c\u3057\u3066\u3044\u308b\u306e\u3067\u6050\u3089\u304f\u95a2\u4fc2\u306a\u304b\u3063\u305f\u3067\u3059\uff0e(\u62e1\u5f35\u6a5f\u80fd\u306e\u554f\u984c\u306e\u5834\u5408\u4eca\u56de\u306e\u65b9\u6cd5\u3067\u306f\u30ea\u30bb\u30c3\u30c8\u3067\u304d\u306a\u3044\u3067\u3059\u306d)

\n
\n
\n
\u74b0\u5883
\n
\n
$ dpkg-query -W gnome lightdm dconf-cli\ndconf-cli       0.40.0-5\ngnome   1:48+2\nlightdm 1.32.0-6+b2\n$ lsb_release -dr\nDescription:    Debian GNU/Linux 13 (trixie)\nRelease:        13\n$ arch\nx86_64
\n
\n
\n
\n
\n", "content_text": "\u3044\u3064\u3082Xfce4 \u3067\u4f7f\u3063\u3066\u3044\u308bDebian statble(trixie) \u74b0\u5883\u3067\u4e45\u3005\u306bGNOME \u74b0\u5883\u3092\u8d77\u52d5\u3057\u305f\u3089\u64cd\u4f5c\u3092\u53d7\u3051\u4ed8\u3051\u307e\u305b\u3093\uff0e\n\u8a2d\u5b9a\u3092\u30ea\u30bb\u30c3\u30c8\u3057\u3066\u5fa9\u65e7\u3057\u307e\u3057\u305f\uff0e\n\n\n\nGNOME \u306e\u72b6\u6cc1\u306f\u4e0a\u90e8\u306e\u6642\u8a08\u3084\u62e1\u5f35\u6a5f\u80fd\u306eRunCat \u306a\u3093\u304b\u306f\u52d5\u3044\u3066\u3044\u308b\u3051\u3069\u30ad\u30fc\u306e\u5165\u529b\u3092\u53d7\u3051\u4ed8\u3051\u305a\u64cd\u4f5c\u3067\u304d\u307e\u305b\u3093\uff0e\u30de\u30a6\u30b9\u3082\u30ab\u30fc\u30bd\u30eb\u304c\u5076\u306b\u898b\u3048\u308b\u3051\u3069\u30af\u30ea\u30c3\u30af\u3057\u3066\u3082\u4f55\u3082\u8d77\u304d\u307e\u305b\u3093\uff0e\n\u3068\u3044\u3046\u611f\u3058\u3067\u4f7f\u3044\u7269\u306b\u306a\u308a\u307e\u305b\u3093\uff0e\n\u5143\u3005\u307b\u3068\u3093\u3069\u4f7f\u3063\u3066\u3044\u306a\u304b\u3063\u305f\u306e\u3067\u8a2d\u5b9a\u3092\u521d\u671f\u5316\u3057\u3066\u307f\u308b\u3053\u3068\u306b\uff0e\n\n\n\u307e\u305a\u306fGNOME \u304b\u3089\u3069\u3046\u306b\u304b\u3057\u3066\u629c\u3051\u307e\u3059\uff0e\u4eca\u56de\u306f\u30ad\u30fc\u5165\u529b\u3092\u53d7\u3051\u4ed8\u3051\u305aCtrl+Alt+F1 \u306a\u3093\u304b\u3067\u30b3\u30f3\u30bd\u30fc\u30eb\u306b\u3082\u964d\u308a\u308c\u306a\u3044\u306e\u3067\u56f0\u308a\u307e\u3057\u305f\u304c\uff0csshd \u3092\u6709\u52b9\u306b\u3057\u3066\u3044\u305f\u306e\u3067\u305d\u308c\u3067\u5165\u3063\u3066\u30c7\u30a3\u30b9\u30d7\u30ec\u30a4\u30de\u30cd\u30fc\u30b8\u30e3(\u4eca\u56de\u306fLightDM) \u3092\u518d\u8d77\u52d5\u3057\u3066\u629c\u3051\u307e\u3057\u305f\uff0e\n\n\n\n$ sudo service lightdm restart\n\n\n\n\n\n\nTip\n\n\n\n\u3082\u3057\u30ea\u30e2\u30fc\u30c8\u64cd\u4f5c\u3082\u3067\u304d\u306a\u3044\u5834\u5408Magic SysRq key \u306f\u53cd\u5fdc\u3057\u305f\u306e\u3067\u3053\u308c\u3067\u518d\u8d77\u52d5\u3067\u304d\u308b\u3068\u601d\u3044\u307e\u3059\uff0e\n\n\n\n\nkernel.org/doc/Documentation/admin-guide/sysrq.rst\n\n\n\n\n\n\n\n\nGNOME \u304b\u3089\u629c\u3051\u305f\u5f8c\uff0cGNOME \u4ee5\u5916\u306e\u30c7\u30b9\u30af\u30c8\u30c3\u30d7\u74b0\u5883\u304b\uff0c\u30b3\u30f3\u30bd\u30fc\u30eb\uff0cssh \u306a\u3069\u3067dconf \u30b3\u30de\u30f3\u30c9\u3067\u8a2d\u5b9a\u3092\u30ea\u30bb\u30c3\u30c8\u3057\u307e\u3059\uff0e\n\n\n\n$ dconf dump / > dconf.backup (1)\n$ dconf reset -f /org/gnome (2)\n\n\n\n\n\n\u5ff5\u306e\u70badconf \u3092backup\n\n\ndconf \u306egnome \u4ee5\u4e0b\u3092\u30ea\u30bb\u30c3\u30c8\n\n\n\n\n\u3053\u306e\u5f8cGNOME \u306b\u5165\u308a\u76f4\u3059\u3053\u3068\u3067\u5fa9\u65e7\u3067\u304d\u307e\u3057\u305f\uff0e\n\n\n\n\n\n\u99c4\u76ee\u3060\u3063\u305f\u5834\u5408 dconf reset -f / \u307e\u3067\u3084\u3063\u3066\u307f\u3066\u3082\u3044\u3044\u304b\u3082\u3057\u308c\u307e\u305b\u3093\uff0e\n\u305d\u308c\u3067\u3082\u99c4\u76ee\u306a\u3089$HOME \u4ee5\u4e0b\u306eGNOME \u95a2\u9023\u306e\u30d5\u30a1\u30a4\u30eb\u3092\u6d88\u3059\u611f\u3058\u3067\u3057\u3087\u3046\u304b\uff0e\n\n\n\u3053\u306e\u74b0\u5883\u306fDebian bookworm \u304b\u3089dist-upgrade \u3057\u305f\u74b0\u5883\u306a\u306e\u3067dist-uograde \u306e\u30bf\u30a4\u30df\u30f3\u30b0\u3067\u304a\u58ca\u308c\u305f\u306e\u304b\u3082\u3057\u308c\u307e\u305b\u3093\uff0e\n\u62e1\u5f35\u6a5f\u80fd\u3082\u602a\u3057\u3044\u304b\u306a\u3068\u601d\u3063\u305f\u306e\u3067\u3059\u304c\u4eca\u56de\u306e\u30ea\u30bb\u30c3\u30c8\u3067\u306f\u62e1\u5f35\u6a5f\u80fd\u306f\u8a2d\u5b9a\u3055\u308c\u305f\u307e\u307e\u3067\u52d5\u4f5c\u3057\u3066\u3044\u308b\u306e\u3067\u6050\u3089\u304f\u95a2\u4fc2\u306a\u304b\u3063\u305f\u3067\u3059\uff0e(\u62e1\u5f35\u6a5f\u80fd\u306e\u554f\u984c\u306e\u5834\u5408\u4eca\u56de\u306e\u65b9\u6cd5\u3067\u306f\u30ea\u30bb\u30c3\u30c8\u3067\u304d\u306a\u3044\u3067\u3059\u306d)\n\n\n\u74b0\u5883\n\n$ dpkg-query -W gnome lightdm dconf-cli\ndconf-cli 0.40.0-5\ngnome 1:48+2\nlightdm 1.32.0-6+b2\n$ lsb_release -dr\nDescription: Debian GNU/Linux 13 (trixie)\nRelease: 13\n$ arch\nx86_64", "date_published": "2026-03-07T05:46:07+09:00", "date_modified": "2026-03-07T05:46:09+09:00", "authors": [ { "name": "matoken", "url": "https://matoken.org/blog/author/matoken/", "avatar": "https://secure.gravatar.com/avatar/38f5f3b575c5eb45cda6aa659bca119ac7a5e16b46565e869d0030e3bd66981d?s=512&d=mm&r=g" } ], "author": { "name": "matoken", "url": "https://matoken.org/blog/author/matoken/", "avatar": "https://secure.gravatar.com/avatar/38f5f3b575c5eb45cda6aa659bca119ac7a5e16b46565e869d0030e3bd66981d?s=512&d=mm&r=g" }, "tags": [ "dconf", "Gnome", "Debian", "Linux", "trixie" ] }, { "id": "https://matoken.org/blog/?p=5181", "url": "https://matoken.org/blog/2026/01/25/snac-2-89/", "title": "\u8efd\u91cfActivityPub Server\u306esnac 2.89\u30ea\u30ea\u30fc\u30b9", "content_html": "
\n
\n
\n

\"susie64

\n
\n
\n

\u8efd\u91cfActivityPub Server \u306esnac 2.89 \u304c\u30ea\u30ea\u30fc\u30b9\u3055\u308c\u307e\u3057\u305f\uff0e

\n
\n\n

\n

\n
\n
\n

RELEASE NOTES

\n
\n
\n
\n
\n

## 2.89

\n
\n
\n

Fixed crash in pronouns processing (contributed by byte).

\n
\n
\n

Added counters in the people page (contributed by byte).

\n
\n
\n

New command-line option refresh, to refresh all follower and following Actor objects, marking them as broken if they are.

\n
\n
\n\n
\n\n
\n

\u4eca\u56de\u306e\u65b0\u6a5f\u80fd\u306f2\u3064\uff0e

\n
\n
\n
    \n
  • \n

    people \u30da\u30fc\u30b8\u306b\u30ab\u30a6\u30f3\u30bf\u30fc\u3092\u8ffd\u52a0

    \n
  • \n
\n
\n
\n

\"snac

\n
\n
\n
    \n
  • \n

    \u30b3\u30de\u30f3\u30c9\u30e9\u30a4\u30f3\u30aa\u30d7\u30b7\u30e7\u30f3\u306b\u30d5\u30a9\u30ed\u30ef\u30fc\u3068\u30d5\u30a9\u30ed\u30fc\u4e2d\u306e\u30a2\u30af\u30bf\u30fc\u306e\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u3092\u66f4\u65b0\u3059\u308b refresh \u3092\u8ffd\u52a0\uff0e

    \n
  • \n
\n
\n
\n
\n
$ snac | grep refresh\nrefresh {basedir} {uid}              Refreshes all actors\n$ snac snac-data matoken
\n
\n
\n
\n

\u7279\u306b\u554f\u984c\u304c\u306a\u304b\u3063\u305f\u306e\u304b\u4f55\u3082\u51fa\u529b\u3055\u308c\u307e\u305b\u3093\u3067\u3057\u305f\uff0e

\n
\n
\n

Debian package \u306f\u307e\u30602.88 \u3067\u3059\uff0e

\n
\n
\n
\n
$ rmadison snac2\nsnac2      | 2.75-2~bpo12+1 | oldstable-backports       | source, amd64, arm64, armel, armhf, i386, mips64el, mipsel, ppc64el, s390x\nsnac2      | 2.75-2~bpo12+1 | oldstable-backports-debug | source\nsnac2      | 2.75-2         | stable                    | source, amd64, arm64, armel, armhf, i386, ppc64el, riscv64, s390x\nsnac2      | 2.88-1~bpo13+1 | stable-backports          | source, amd64, arm64, armel, armhf, i386, ppc64el, riscv64, s390x\nsnac2      | 2.88-1~bpo13+1 | stable-backports-debug    | source\nsnac2      | 2.88-1         | testing                   | source, amd64, arm64, armhf, i386, ppc64el, riscv64, s390x\nsnac2      | 2.88-1         | unstable                  | source, amd64, arm64, armhf, i386, loong64, ppc64el, riscv64, s390x\nsnac2      | 2.88-1         | unstable-debug            | source
\n
\n
\n\n
\n
\n", "content_text": "\u8efd\u91cfActivityPub Server \u306esnac 2.89 \u304c\u30ea\u30ea\u30fc\u30b9\u3055\u308c\u307e\u3057\u305f\uff0e\n\n\n\n\nThe Real Grunfink (@grunfink@comam.es) \u4f5c\u8005\u306etoot\n\n\nsnac2/RELEASE_NOTES.md at master – grunfink/snac2 – Codeberg.org\n\n\ngrunfink/snac2: A simple, minimalistic ActivityPub instance written in portable C – Codeberg.org tag 2.89\n\n\n\n\n\n\n\nRELEASE NOTES\n\n\n\n\n## 2.89\n\n\nFixed crash in pronouns processing (contributed by byte).\n\n\nAdded counters in the people page (contributed by byte).\n\n\nNew command-line option refresh, to refresh all follower and following Actor objects, marking them as broken if they are.\n\n\n\n— snac2/RELEASE_NOTES.md at master – grunfink/snac2 – Codeberg.org\n\n\n\n\n\nMerge pull request ‘segfault fix’ (#521) from byte/snac2:fix_segfault into master \u00b7 3e95d9639d – grunfink/snac2 – Codeberg.org\n\n\nMerge pull request ‘simple cosmetic counters’ (#519) from byte/snac2:counters into master \u00b7 33b066733e – grunfink/snac2 – Codeberg.org\n\n\nNew command-line option ‘refresh’. \u00b7 d8d40acfd1 – grunfink/snac2 – Codeberg.org\n\n\n\n\n\u4eca\u56de\u306e\u65b0\u6a5f\u80fd\u306f2\u3064\uff0e\n\n\n\n\npeople \u30da\u30fc\u30b8\u306b\u30ab\u30a6\u30f3\u30bf\u30fc\u3092\u8ffd\u52a0\n\n\n\n\n\n\n\n\n\n\u30b3\u30de\u30f3\u30c9\u30e9\u30a4\u30f3\u30aa\u30d7\u30b7\u30e7\u30f3\u306b\u30d5\u30a9\u30ed\u30ef\u30fc\u3068\u30d5\u30a9\u30ed\u30fc\u4e2d\u306e\u30a2\u30af\u30bf\u30fc\u306e\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u3092\u66f4\u65b0\u3059\u308b refresh \u3092\u8ffd\u52a0\uff0e\n\n\n\n\n\n$ snac | grep refresh\nrefresh {basedir} {uid} Refreshes all actors\n$ snac snac-data matoken\n\n\n\n\u7279\u306b\u554f\u984c\u304c\u306a\u304b\u3063\u305f\u306e\u304b\u4f55\u3082\u51fa\u529b\u3055\u308c\u307e\u305b\u3093\u3067\u3057\u305f\uff0e\n\n\nDebian package \u306f\u307e\u30602.88 \u3067\u3059\uff0e\n\n\n\n$ rmadison snac2\nsnac2 | 2.75-2~bpo12+1 | oldstable-backports | source, amd64, arm64, armel, armhf, i386, mips64el, mipsel, ppc64el, s390x\nsnac2 | 2.75-2~bpo12+1 | oldstable-backports-debug | source\nsnac2 | 2.75-2 | stable | source, amd64, arm64, armel, armhf, i386, ppc64el, riscv64, s390x\nsnac2 | 2.88-1~bpo13+1 | stable-backports | source, amd64, arm64, armel, armhf, i386, ppc64el, riscv64, s390x\nsnac2 | 2.88-1~bpo13+1 | stable-backports-debug | source\nsnac2 | 2.88-1 | testing | source, amd64, arm64, armhf, i386, ppc64el, riscv64, s390x\nsnac2 | 2.88-1 | unstable | source, amd64, arm64, armhf, i386, loong64, ppc64el, riscv64, s390x\nsnac2 | 2.88-1 | unstable-debug | source\n\n\n\n\n\nsnac2 – Debian Package Tracker", "date_published": "2026-01-25T19:16:05+09:00", "date_modified": "2026-01-25T19:16:10+09:00", "authors": [ { "name": "matoken", "url": "https://matoken.org/blog/author/matoken/", "avatar": "https://secure.gravatar.com/avatar/38f5f3b575c5eb45cda6aa659bca119ac7a5e16b46565e869d0030e3bd66981d?s=512&d=mm&r=g" } ], "author": { "name": "matoken", "url": "https://matoken.org/blog/author/matoken/", "avatar": "https://secure.gravatar.com/avatar/38f5f3b575c5eb45cda6aa659bca119ac7a5e16b46565e869d0030e3bd66981d?s=512&d=mm&r=g" }, "tags": [ "ActivityPub", "snac", "Debian", "Linux", "trixie" ] }, { "id": "https://matoken.org/blog/?p=5160", "url": "https://matoken.org/blog/2026/01/20/snac-2-88-muted_words-strip_metadata/", "title": "\u8efd\u91cf\u306aActivityPub Server \u306esnac 2.88 \u3067\u30df\u30e5\u30fc\u30c8\u30ef\u30fc\u30c9\u3084\u30e1\u30bf\u30c7\u30fc\u30bf\u9664\u53bb\u6a5f\u80fd\u8ffd\u52a0", "content_html": "
\n
\n
\n

\"snac

\n
\n
\n

\u30df\u30cb\u30de\u30e0\u3067\u8efd\u91cf\u306aActivityPub Server \u306esnac 2.88 \u304c\u30ea\u30ea\u30fc\u30b9\u3055\u308c\u307e\u3057\u305f\uff0e

\n
\n\n

\n
\n
\n
\n

2.88

\n
\n
\n

If disable_emojireact is set to true in server.json, EmojiReacts (incoming and outgoing) are totally disabled.

\n
\n
\n

New command-line option top_ten, that returns the top ten most popular posts by a user (ordered by the sum of likes and boosts) (contributed by aov).

\n
\n
\n

Added a new set of per-user muted words; if a post contains any of them, it’s hidden behind a dropdown (contributed by byte).

\n
\n
\n

If an account has a metadata named pronouns, it’s shown by the name (contributed by violette).

\n
\n
\n

Mastodon API: children of a post are returned recursively, not just the first level (contributed by violette).

\n
\n
\n

Implemented optional metadata stripping for images and videos using external tools (contributed by Stefano Marinelli).

\n
\n
\n
\n— https://codeberg.org/grunfink/snac2/src/branch/master/RELEASE_NOTES.md#2-88\n
\n
\n
\n

\u305d\u308c\u305e\u308c\u306ecommit \u306f\u3053\u306e\u3042\u305f\u308a\u3067\u3057\u3087\u3046\u304b

\n
\n\n
\n
\n
\n

\u7d75\u6587\u5b57\u30ea\u30a2\u30af\u30b7\u30e7\u30f3\u306e\u7121\u52b9\u8a2d\u5b9a

\n
\n
\n

\u4eca\u56de\u306e\u66f4\u65b0\u3067\uff0c\u30b5\u30fc\u30d0\u30fc\u8a2d\u5b9a\u30d5\u30a1\u30a4\u30eb\u306e server.json \u306e\u4e2d\u306b disable_emojireact \u304c\u8a2d\u5b9a\u3067\u304d\u308b\u3088\u3046\u306b\u306a\u308a\u307e\u3057\u305f\uff0e\u3053\u308c\u3092 true \u306b\u3059\u308b\u3053\u3068\u3067\u7d75\u6587\u5b57\u30ea\u30a2\u30af\u30b7\u30e7\u30f3\u306e\u9001\u53d7\u4fe1\u304c\u7121\u52b9\u5316\u3067\u304d\u307e\u3059\uff0e
\n\u81ea\u5206\u306f\u6709\u52b9\u306b\u3057\u305f\u3044\u306e\u3067\u3053\u306e\u8a2d\u5b9a\u306f\u30b9\u30eb\u30fc\uff0e

\n
\n
\n
\n
$ man doc/snac.8 | grep -A1 disable_emojireact\n       disable_emojireact\n                   If set to true, all EmojiReact support (for input and output) is disabled.
\n
\n
\n
\n
\n
\n

top_ten \u30b3\u30de\u30f3\u30c9

\n
\n
\n

top_ten \u3068\u3044\u3046\u65b0\u3057\u3044\u30b3\u30de\u30f3\u30c9\u30e9\u30a4\u30f3\u30aa\u30d7\u30b7\u30e7\u30f3\u304c\u5b9f\u88c5\u3055\u308c\u307e\u3057\u305f\uff0e\u3053\u308c\u3092\u5b9f\u884c\u3059\u308b\u3068\u5bfe\u8c61\u30e6\u30fc\u30b6\u30fc\u306e\u3044\u3044\u306d\u3068\u30d6\u30fc\u30b9\u30c8\u6570\u304b\u3089\u6700\u3082\u4eba\u6c17\u306e\u3042\u3063\u305f\u6295\u7a3f\u306e\u30c8\u30c3\u30d710\u304c\u8868\u793a\u3067\u304d\u307e\u3059\uff0e\u30aa\u30d7\u30b7\u30e7\u30f3\u3067\u6307\u5b9a\u4ef6\u6570\u306b\u3082\u3067\u304d\u307e\u3059\uff0e

\n
\n
\n
\n
$ ./snac2/snac top_ten\nsnac 2.88 - A simple, minimalistic ActivityPub instance\nCopyright (c) 2022 - 2026 grunfink et al. / MIT license\n\ntop_ten {basedir} {uid} [{N}]        Prints the most popular posts\n$ ./snac2/snac top_ten snac-data matoken 5\nhttps://snac.matoken.org/matoken/p/1768641700.668031 1\u2605 0\u21ba\nhttps://snac.matoken.org/matoken/p/1768600460.460220 0\u2605 0\u21ba\nhttps://snac.matoken.org/matoken/p/1768690681.713879 0\u2605 0\u21ba\nhttps://snac.matoken.org/matoken/p/1768690814.893464 0\u2605 0\u21ba\nhttps://snac.matoken.org/matoken/p/1768690913.716133 0\u2605 0\u21ba
\n
\n
\n
\n
man doc/snac.1 | grep -A1 top_ten
\n
\n
             top_ten basedir uid [N]\n                     Returns the ids of the top ten (or top N) most popular posts (considering the sum of likes and boosts).
\n
\n
\n
\n
\n
\n

\u30e6\u30fc\u30b6\u30fc\u30df\u30e5\u30fc\u30c8\u30ef\u30fc\u30c9

\n
\n
\n

\u30e6\u30fc\u30b6\u30fc\u3054\u3068\u306b\u30df\u30e5\u30fc\u30c8\u30ef\u30fc\u30c9\u304c\u8a2d\u5b9a\u3067\u304d\u308b\u3088\u3046\u306b\u306a\u308a\u307e\u3057\u305f\uff0e\u6295\u7a3f\u306b\u8a2d\u5b9a\u30ef\u30fc\u30c9\u304c\u542b\u307e\u308c\u3066\u3044\u305f\u5834\u5408\u96a0\u3055\u308c\u308b\u3088\u3046\u306b\u306a\u308a\u307e\u3059\uff0e
\n\u8a2d\u5b9a\u306f\uff0c\u5bfe\u8c61\u30a2\u30ab\u30a6\u30f3\u30c8\u306e\u300cprivate\u300d → \u300cMuted words…​\u300d\u306b\u3042\u308a\u307e\u3059\uff0e

\n
\n
\n

\"snac

\n
\n
\n
$ man doc/snac.5 | grep muted
\n
\n
       muted/      This directory contains files which names are hashes of muted actors. The content is a line containing the actor URL.  Messages from these actors will be ignored on input and not shown in any timeline.
\n
\n
\n
\n
\n
\n

\u753b\u50cf\u3068\u30d3\u30c7\u30aa\u306e\u30e1\u30bf\u30c7\u30fc\u30bf\u9664\u53bb

\n
\n
\n

\u5916\u90e8\u30c4\u30fc\u30eb\u3092\u5229\u7528\u3057\u3066\u753b\u50cf\u3068\u30d3\u30c7\u30aa\u304b\u3089\u30e1\u30bf\u30c7\u30fc\u30bf\u3092\u9664\u53bb\u3067\u304d\u308b\u3088\u3046\u306b\u306a\u308a\u307e\u3057\u305f\uff0e
\n\u65e2\u5b9a\u5024\u3067\u306f\u7121\u52b9\u306b\u306a\u3063\u3066\u3044\u307e\u3059\uff0e\u6709\u52b9\u306b\u3057\u305f\u3044\u5834\u5408\u306f\uff0cserver.json \u3067 \"strip_exif\": true, \u3092\u8a2d\u5b9a\u3057\u307e\u3059\uff0e
\n\u753b\u50cf\u306e\u30e1\u30bf\u30c7\u30fc\u30bf\u9664\u53bb\u306b\u306fImageMagick\u306emogrify \u3092\uff0c\u52d5\u753b\u306e\u30e1\u30bf\u30c7\u30fc\u30bf\u9664\u53bb\u306b\u306fffmpeg \u3092\u5229\u7528\u3057\u307e\u3059\uff0e\u5c0e\u5165\u3057\u3066\u3044\u306a\u3044\u5834\u5408\u306f\u5c0e\u5165\u304c\u5fc5\u8981\u3067\u3059\uff0e
\n\u5916\u90e8\u30c4\u30fc\u30eb\u304c\u30d1\u30b9\u306e\u901a\u3063\u3066\u3044\u306a\u3044\u5834\u6240\u306b\u3042\u308b\u5834\u5408\u306f\uff0cmogrify_path, ffmpeg_path \u3067\u6307\u5b9a\u53ef\u80fd\u3067\u3059\uff0e

\n
\n
\n
server.json \u8a2d\u5b9a\u4f8b
\n
\n
    \"strip_exif\": true,\n    \"mogrify_path\": \"/usr/local/bin/mogrify\",\n    \"ffmpeg_path\": \"/usr/local/bin/ffmpeg\",
\n
\n
\n
\n

\u5b9f\u969b\u306bexif \u4ed8\u304d\u306e\u753b\u50cf\u3092\u6295\u7a3f\u3057\u3066\u78ba\u8a8d\u3057\u3066\u307f\u307e\u3059\uff0e

\n
\n
\n
\u30b5\u30f3\u30d7\u30eb\u753b\u50cf\u306e\u5165\u624b\u3068\u78ba\u8a8d
\n
\n
$ wget https://raw.githubusercontent.com/ianare/exif-samples/refs/heads/master/jpg/Pentax_K10D.jpg\n$ exif Pentax_K10D.jpg\nEXIF tags in '/home/matoken/Downloads/Pentax_K10D.jpg' ('Intel' byte order):\n--------------------+----------------------------------------------------------\nTag                 |Value\n--------------------+----------------------------------------------------------\nManufacturer        |PENTAX Corporation\nModel               |PENTAX K10D\nOrientation         |Top-left\nX-Resolution        |350\nY-Resolution        |350\nResolution Unit     |Inch\nSoftware            |GIMP 2.4.5\nDate and Time       |2008:07:31 15:56:49\nCopyright           |Laitche (This file is in the public domain.) (Photographer\nXP Author           |www.laitche.com\nCompression         |JPEG compression\nX-Resolution        |72\nY-Resolution        |72\nResolution Unit     |Inch\nExposure Time       |1/180 sec.\nF-Number            |f/11.0\nExposure Program    |Aperture priority\nISO Speed Ratings   |200\nExif Version        |Exif Version 2.21\nDate and Time (Origi|2008:05:04 16:47:24\nDate and Time (Digit|2008:05:04 16:47:24\nExposure Bias       |0.00 EV\nMetering Mode       |Pattern\nFlash               |Flash did not fire, compulsory flash mode\nFocal Length        |90.0 mm\nFlashPixVersion     |FlashPix Version 1.0\nColor Space         |sRGB\nPixel X Dimension   |100\nPixel Y Dimension   |72\nSensing Method      |One-chip color area sensor\n--------------------+----------------------------------------------------------\nEXIF data contains a thumbnail (1349 bytes).
\n
\n
\n
\n

exif \u4ed8\u304d\u306e\u753b\u50cf\u3092\u6295\u7a3f\u3057\u307e\u3059\uff0e

\n
\n
\n

\"snac

\n
\n
\n

\u6295\u7a3f\u3055\u308c\u305f\u753b\u50cf\u3092\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\u3057\u3066\u78ba\u8a8d\u3059\u308b\u3068exif \u306f\u6d88\u3048\u3066\u3044\u307e\u3057\u305f\uff0e

\n
\n
\n
\n
$ wget http://127.0.0.1:8001/test/s/post-d2e2931a72bbe1cafaaf94e82ea27e66.jpg\n$ exif ./post-d2e2931a72bbe1cafaaf94e82ea27e66.jpg\nCorrupt data\nThe data provided does not follow the specification.\nExifLoader: The data supplied does not seem to contain EXIF data.
\n
\n
\n
\n

\u4ee5\u4e0b\u306e\u3088\u3046\u306a\u30b3\u30de\u30f3\u30c9\u3092\u767a\u884c\u3057\u3066\u3044\u308b\u3088\u3046\u3067\u3059\uff0e

\n
\n
\n
mogrify
\n
\n
            xs *cmd = xs_fmt(\"cd \\\"%s\\\" && %s -auto-orient -strip \\\"%s\\\" 2>/dev/null\", srv_basedir, mp, r_fn);
\n
\n
\n
\n
ffmpeg
\n
\n
 \t            /* -map_metadata -1 strips all global metadata */\n\t            /* -c copy copies input streams without re-encoding */\n\t            /* we don't silence stderr so we can debug issues */\n\t            /* we explicitly cd to srv_basedir to ensure relative paths work */\n\t            xs *cmd = xs_fmt(\"cd \\\"%s\\\" && %s -y -i \\\"%s\\\" -map_metadata -1 -c copy \\\"%s\\\"\", srv_basedir, fp, r_fn, tmp_fn);
\n
\n
\n
\n
man doc/snac.8 | grep -A1 metadata
\n
\n
$ man doc/snac.8 | grep strip_exif -A7\n       strip_exif  If  set  to  true,  EXIF and other metadata will be stripped from uploaded images (jpg, png, webp, heic, avif, tiff, gif, bmp) and videos (mp4, m4v, mov, webm, mkv, avi). This requires the mogrify (from ImageMagick) and\n                   ffmpeg tools to be installed. If snac cannot find or execute these tools at startup, it will refuse to run.\n\n       mogrify_path\n                   Overrides the default \"mogrify\" command name or path. Use this if the tool is not in the system PATH or has a different name.\n\n       ffmpeg_path\n                   Overrides the default \"ffmpeg\" command name or path. Use this if the tool is not in the system PATH or has a different name.
\n
\n
\n
\n
\n", "content_text": "\u30df\u30cb\u30de\u30e0\u3067\u8efd\u91cf\u306aActivityPub Server \u306esnac 2.88 \u304c\u30ea\u30ea\u30fc\u30b9\u3055\u308c\u307e\u3057\u305f\uff0e\n\n\n\n\nThe Real Grunfink (@grunfink@comam.es)\n\n\nsnac2/RELEASE_NOTES.md at master – grunfink/snac2 – Codeberg.org\n\n\n\n\n\n\n\n2.88\n\n\nIf disable_emojireact is set to true in server.json, EmojiReacts (incoming and outgoing) are totally disabled.\n\n\nNew command-line option top_ten, that returns the top ten most popular posts by a user (ordered by the sum of likes and boosts) (contributed by aov).\n\n\nAdded a new set of per-user muted words; if a post contains any of them, it’s hidden behind a dropdown (contributed by byte).\n\n\nIf an account has a metadata named pronouns, it’s shown by the name (contributed by violette).\n\n\nMastodon API: children of a post are returned recursively, not just the first level (contributed by violette).\n\n\nImplemented optional metadata stripping for images and videos using external tools (contributed by Stefano Marinelli).\n\n\n\n— https://codeberg.org/grunfink/snac2/src/branch/master/RELEASE_NOTES.md#2-88\n\n\n\n\u305d\u308c\u305e\u308c\u306ecommit \u306f\u3053\u306e\u3042\u305f\u308a\u3067\u3057\u3087\u3046\u304b\n\n\n\n\nAdded emoji categories. \u00b7 de9d546d70 – grunfink/snac2 – Codeberg.org\n\n\nNew command-line option top_ten. \u00b7 99375a7b66 – grunfink/snac2 – Codeberg.org\n\n\nMerge pull request ‘user-specified word mutes and matching’ (#518) from byte/snac2:user_mutes into master \u00b7 4a2a05c6a0 – grunfink/snac2 – Codeberg.org\n\n\nMerge pull request ‘simple cosmetic counters’ (#519) from byte/snac2:counters into master \u00b7 33b066733e – grunfink/snac2 – Codeberg.org\n\n\nmastoapi: also return children of children. \u00b7 54bb1626d2 – grunfink/snac2 – Codeberg.org\n\n\nMerge pull request ‘Implement metadata stripping for uploaded photos and videos’ (#515) from draga79/snac2:master into master \u00b7 3ffdf91a4c – grunfink/snac2 – Codeberg.org\n\n\n\n\n\n\n\u7d75\u6587\u5b57\u30ea\u30a2\u30af\u30b7\u30e7\u30f3\u306e\u7121\u52b9\u8a2d\u5b9a\n\n\n\u4eca\u56de\u306e\u66f4\u65b0\u3067\uff0c\u30b5\u30fc\u30d0\u30fc\u8a2d\u5b9a\u30d5\u30a1\u30a4\u30eb\u306e server.json \u306e\u4e2d\u306b disable_emojireact \u304c\u8a2d\u5b9a\u3067\u304d\u308b\u3088\u3046\u306b\u306a\u308a\u307e\u3057\u305f\uff0e\u3053\u308c\u3092 true \u306b\u3059\u308b\u3053\u3068\u3067\u7d75\u6587\u5b57\u30ea\u30a2\u30af\u30b7\u30e7\u30f3\u306e\u9001\u53d7\u4fe1\u304c\u7121\u52b9\u5316\u3067\u304d\u307e\u3059\uff0e\n\u81ea\u5206\u306f\u6709\u52b9\u306b\u3057\u305f\u3044\u306e\u3067\u3053\u306e\u8a2d\u5b9a\u306f\u30b9\u30eb\u30fc\uff0e\n\n\n\n$ man doc/snac.8 | grep -A1 disable_emojireact\n disable_emojireact\n If set to true, all EmojiReact support (for input and output) is disabled.\n\n\n\n\n\ntop_ten \u30b3\u30de\u30f3\u30c9\n\n\ntop_ten \u3068\u3044\u3046\u65b0\u3057\u3044\u30b3\u30de\u30f3\u30c9\u30e9\u30a4\u30f3\u30aa\u30d7\u30b7\u30e7\u30f3\u304c\u5b9f\u88c5\u3055\u308c\u307e\u3057\u305f\uff0e\u3053\u308c\u3092\u5b9f\u884c\u3059\u308b\u3068\u5bfe\u8c61\u30e6\u30fc\u30b6\u30fc\u306e\u3044\u3044\u306d\u3068\u30d6\u30fc\u30b9\u30c8\u6570\u304b\u3089\u6700\u3082\u4eba\u6c17\u306e\u3042\u3063\u305f\u6295\u7a3f\u306e\u30c8\u30c3\u30d710\u304c\u8868\u793a\u3067\u304d\u307e\u3059\uff0e\u30aa\u30d7\u30b7\u30e7\u30f3\u3067\u6307\u5b9a\u4ef6\u6570\u306b\u3082\u3067\u304d\u307e\u3059\uff0e\n\n\n\n$ ./snac2/snac top_ten\nsnac 2.88 - A simple, minimalistic ActivityPub instance\nCopyright (c) 2022 - 2026 grunfink et al. / MIT license\n\ntop_ten {basedir} {uid} [{N}] Prints the most popular posts\n$ ./snac2/snac top_ten snac-data matoken 5\nhttps://snac.matoken.org/matoken/p/1768641700.668031 1\u2605 0\u21ba\nhttps://snac.matoken.org/matoken/p/1768600460.460220 0\u2605 0\u21ba\nhttps://snac.matoken.org/matoken/p/1768690681.713879 0\u2605 0\u21ba\nhttps://snac.matoken.org/matoken/p/1768690814.893464 0\u2605 0\u21ba\nhttps://snac.matoken.org/matoken/p/1768690913.716133 0\u2605 0\u21ba\n\n\n\nman doc/snac.1 | grep -A1 top_ten\n\n top_ten basedir uid [N]\n Returns the ids of the top ten (or top N) most popular posts (considering the sum of likes and boosts).\n\n\n\n\n\n\u30e6\u30fc\u30b6\u30fc\u30df\u30e5\u30fc\u30c8\u30ef\u30fc\u30c9\n\n\n\u30e6\u30fc\u30b6\u30fc\u3054\u3068\u306b\u30df\u30e5\u30fc\u30c8\u30ef\u30fc\u30c9\u304c\u8a2d\u5b9a\u3067\u304d\u308b\u3088\u3046\u306b\u306a\u308a\u307e\u3057\u305f\uff0e\u6295\u7a3f\u306b\u8a2d\u5b9a\u30ef\u30fc\u30c9\u304c\u542b\u307e\u308c\u3066\u3044\u305f\u5834\u5408\u96a0\u3055\u308c\u308b\u3088\u3046\u306b\u306a\u308a\u307e\u3059\uff0e\n\u8a2d\u5b9a\u306f\uff0c\u5bfe\u8c61\u30a2\u30ab\u30a6\u30f3\u30c8\u306e\u300cprivate\u300d → \u300cMuted words…​\u300d\u306b\u3042\u308a\u307e\u3059\uff0e\n\n\n\n\n\n$ man doc/snac.5 | grep muted\n\n muted/ This directory contains files which names are hashes of muted actors. The content is a line containing the actor URL. Messages from these actors will be ignored on input and not shown in any timeline.\n\n\n\n\n\n\u753b\u50cf\u3068\u30d3\u30c7\u30aa\u306e\u30e1\u30bf\u30c7\u30fc\u30bf\u9664\u53bb\n\n\n\u5916\u90e8\u30c4\u30fc\u30eb\u3092\u5229\u7528\u3057\u3066\u753b\u50cf\u3068\u30d3\u30c7\u30aa\u304b\u3089\u30e1\u30bf\u30c7\u30fc\u30bf\u3092\u9664\u53bb\u3067\u304d\u308b\u3088\u3046\u306b\u306a\u308a\u307e\u3057\u305f\uff0e\n\u65e2\u5b9a\u5024\u3067\u306f\u7121\u52b9\u306b\u306a\u3063\u3066\u3044\u307e\u3059\uff0e\u6709\u52b9\u306b\u3057\u305f\u3044\u5834\u5408\u306f\uff0cserver.json \u3067 \"strip_exif\": true, \u3092\u8a2d\u5b9a\u3057\u307e\u3059\uff0e\n\u753b\u50cf\u306e\u30e1\u30bf\u30c7\u30fc\u30bf\u9664\u53bb\u306b\u306fImageMagick\u306emogrify \u3092\uff0c\u52d5\u753b\u306e\u30e1\u30bf\u30c7\u30fc\u30bf\u9664\u53bb\u306b\u306fffmpeg \u3092\u5229\u7528\u3057\u307e\u3059\uff0e\u5c0e\u5165\u3057\u3066\u3044\u306a\u3044\u5834\u5408\u306f\u5c0e\u5165\u304c\u5fc5\u8981\u3067\u3059\uff0e\n\u5916\u90e8\u30c4\u30fc\u30eb\u304c\u30d1\u30b9\u306e\u901a\u3063\u3066\u3044\u306a\u3044\u5834\u6240\u306b\u3042\u308b\u5834\u5408\u306f\uff0cmogrify_path, ffmpeg_path \u3067\u6307\u5b9a\u53ef\u80fd\u3067\u3059\uff0e\n\n\nserver.json \u8a2d\u5b9a\u4f8b\n\n \"strip_exif\": true,\n \"mogrify_path\": \"/usr/local/bin/mogrify\",\n \"ffmpeg_path\": \"/usr/local/bin/ffmpeg\",\n\n\n\n\u5b9f\u969b\u306bexif \u4ed8\u304d\u306e\u753b\u50cf\u3092\u6295\u7a3f\u3057\u3066\u78ba\u8a8d\u3057\u3066\u307f\u307e\u3059\uff0e\n\n\n\u30b5\u30f3\u30d7\u30eb\u753b\u50cf\u306e\u5165\u624b\u3068\u78ba\u8a8d\n\n$ wget https://raw.githubusercontent.com/ianare/exif-samples/refs/heads/master/jpg/Pentax_K10D.jpg\n$ exif Pentax_K10D.jpg\nEXIF tags in '/home/matoken/Downloads/Pentax_K10D.jpg' ('Intel' byte order):\n--------------------+----------------------------------------------------------\nTag |Value\n--------------------+----------------------------------------------------------\nManufacturer |PENTAX Corporation\nModel |PENTAX K10D\nOrientation |Top-left\nX-Resolution |350\nY-Resolution |350\nResolution Unit |Inch\nSoftware |GIMP 2.4.5\nDate and Time |2008:07:31 15:56:49\nCopyright |Laitche (This file is in the public domain.) (Photographer\nXP Author |www.laitche.com\nCompression |JPEG compression\nX-Resolution |72\nY-Resolution |72\nResolution Unit |Inch\nExposure Time |1/180 sec.\nF-Number |f/11.0\nExposure Program |Aperture priority\nISO Speed Ratings |200\nExif Version |Exif Version 2.21\nDate and Time (Origi|2008:05:04 16:47:24\nDate and Time (Digit|2008:05:04 16:47:24\nExposure Bias |0.00 EV\nMetering Mode |Pattern\nFlash |Flash did not fire, compulsory flash mode\nFocal Length |90.0 mm\nFlashPixVersion |FlashPix Version 1.0\nColor Space |sRGB\nPixel X Dimension |100\nPixel Y Dimension |72\nSensing Method |One-chip color area sensor\n--------------------+----------------------------------------------------------\nEXIF data contains a thumbnail (1349 bytes).\n\n\n\nexif \u4ed8\u304d\u306e\u753b\u50cf\u3092\u6295\u7a3f\u3057\u307e\u3059\uff0e\n\n\n\n\n\n\u6295\u7a3f\u3055\u308c\u305f\u753b\u50cf\u3092\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\u3057\u3066\u78ba\u8a8d\u3059\u308b\u3068exif \u306f\u6d88\u3048\u3066\u3044\u307e\u3057\u305f\uff0e\n\n\n\n$ wget http://127.0.0.1:8001/test/s/post-d2e2931a72bbe1cafaaf94e82ea27e66.jpg\n$ exif ./post-d2e2931a72bbe1cafaaf94e82ea27e66.jpg\nCorrupt data\nThe data provided does not follow the specification.\nExifLoader: The data supplied does not seem to contain EXIF data.\n\n\n\n\u4ee5\u4e0b\u306e\u3088\u3046\u306a\u30b3\u30de\u30f3\u30c9\u3092\u767a\u884c\u3057\u3066\u3044\u308b\u3088\u3046\u3067\u3059\uff0e\n\n\nmogrify\n\n xs *cmd = xs_fmt(\"cd \\\"%s\\\" && %s -auto-orient -strip \\\"%s\\\" 2>/dev/null\", srv_basedir, mp, r_fn);\n\n\n\nffmpeg\n\n \t /* -map_metadata -1 strips all global metadata */\n\t /* -c copy copies input streams without re-encoding */\n\t /* we don't silence stderr so we can debug issues */\n\t /* we explicitly cd to srv_basedir to ensure relative paths work */\n\t xs *cmd = xs_fmt(\"cd \\\"%s\\\" && %s -y -i \\\"%s\\\" -map_metadata -1 -c copy \\\"%s\\\"\", srv_basedir, fp, r_fn, tmp_fn);\n\n\n\nman doc/snac.8 | grep -A1 metadata\n\n$ man doc/snac.8 | grep strip_exif -A7\n strip_exif If set to true, EXIF and other metadata will be stripped from uploaded images (jpg, png, webp, heic, avif, tiff, gif, bmp) and videos (mp4, m4v, mov, webm, mkv, avi). This requires the mogrify (from ImageMagick) and\n ffmpeg tools to be installed. If snac cannot find or execute these tools at startup, it will refuse to run.\n\n mogrify_path\n Overrides the default \"mogrify\" command name or path. Use this if the tool is not in the system PATH or has a different name.\n\n ffmpeg_path\n Overrides the default \"ffmpeg\" command name or path. Use this if the tool is not in the system PATH or has a different name.", "date_published": "2026-01-20T07:29:13+09:00", "date_modified": "2026-01-20T07:29:18+09:00", "authors": [ { "name": "matoken", "url": "https://matoken.org/blog/author/matoken/", "avatar": "https://secure.gravatar.com/avatar/38f5f3b575c5eb45cda6aa659bca119ac7a5e16b46565e869d0030e3bd66981d?s=512&d=mm&r=g" } ], "author": { "name": "matoken", "url": "https://matoken.org/blog/author/matoken/", "avatar": "https://secure.gravatar.com/avatar/38f5f3b575c5eb45cda6aa659bca119ac7a5e16b46565e869d0030e3bd66981d?s=512&d=mm&r=g" }, "tags": [ "ActivityPub", "snac", "Debian", "Linux", "trixie" ] }, { "id": "https://matoken.org/blog/?p=5150", "url": "https://matoken.org/blog/2026/01/19/lets-encrypts-short-term-certificates-and-ip-address-certificates/", "title": "Let\u2019s Encrypt \u306e\u77ed\u671f\u8a3c\u660e\u66f8\u3068IP\u8a3c\u660e\u66f8\u3092\u5c11\u3057\u8a66\u3059", "content_html": "
\n
\n

\n
\n

\u7121\u6599\u3067\u8a3c\u660e\u66f8\u3092\u767a\u884c\u3067\u304d\u308bLet’s Encrypt \u3067\u77ed\u671f\u8a3c\u660e\u66f8\u3068 IP \u30a2\u30c9\u30ec\u30b9\u8a3c\u660e\u66f8\u306e\u4e00\u822c\u63d0\u4f9b\u304c\u958b\u59cb\u3055\u308c\u307e\u3057\u305f\uff0e

\n
\n
\n
\n
\n

Short-lived and IP address certificates are now generally available from Let\u2019s Encrypt. These certificates are valid for 160 hours, just over six days. In order to get a short-lived certificate subscribers simply need to select the \u2018shortlived\u2019 certificate profile in their ACME client.

\n
\n
\n\n
\n
\n

\u8208\u5473\u304c\u3042\u308b\u306e\u3067\u5c11\u3057\u8a66\u3057\u3066\u307f\u307e\u3057\u305f\uff0e

\n
\n

\n
\n

certbot \u30b3\u30de\u30f3\u30c9\u3067\u8a66\u305d\u3046\u3068\u601d\u3063\u305f\u306e\u3067\u3059\u304c\uff0cDebian package\u7248\u306ecertbot \u306funstable \u3067\u30824.0.0 \u3067\u5bfe\u5fdc\u3057\u3066\u3044\u307e\u305b\u3093\uff0e

\n
\n
\n
\n
$ certbot --ip-address\nusage:\n  certbot [SUBCOMMAND] [options] [-d DOMAIN] [-d DOMAIN] ...\n\nCertbot can obtain and install HTTPS/TLS/SSL certificates.  By default,\nit will attempt to use a webserver both for obtaining and installing the\ncertificate.\ncertbot: error: unrecognized arguments: --ip-address\n$ certbot --version\ncertbot 4.0.0\n$ rmadison certbot\ncertbot    | 1.12.0-2      | oldoldstable | all\ncertbot    | 2.1.0-4       | oldstable    | all\ncertbot    | 4.0.0-2       | stable       | all\ncertbot    | 4.0.0-2       | testing      | all\ncertbot    | 4.0.0-2       | unstable     | all
\n
\n
\n
\n

2\u65e5\u524d\u306e 58724f6 \u3067Commit \u3055\u308c\u3066\u3044\u308b\u3088\u3046\u3067\u3059\uff0e

\n
\n\n
\n

\u3068\u3044\u3046\u3053\u3068\u3067Developer Guide \u3092\u898b\u306a\u304c\u3089source \u304b\u3089\u5c0e\u5165\u3057\u3066\u8a66\u3057\u307e\u3057\u305f\uff0e

\n
\n\n
\n
certbot \u3092source \u304b\u3089build
\n
\n
$ sudo apt install python3-dev python3-venv libaugeas-dev gcc (1)\n$ git clone https://github.com/certbot/certbot (2)\n$ cd certbot\n$ git log --pretty=oneline -1\n58724f68ec46c57dd3c3c8ed4ae686c2d7ad893b (HEAD -> 58724f6) Add CLI flag --ip-address (#10495)\n$ python3 tools/venv.py (3)\n$ source venv/bin/activate (4)\n$ which certbot\n/home/matoken/src/certbot/venv/bin/certbot\n$ certbot --version\ncertbot 5.3.0.dev0
\n
\n
\n
\n
    \n
  1. \n

    \u4f9d\u5b58\u30d1\u30c3\u30b1\u30fc\u30b8\u5c0e\u5165

    \n
  2. \n
  3. \n

    source \u5165\u624b

    \n
  4. \n
  5. \n

    build

    \n
  6. \n
  7. \n

    certbot\u74b0\u5883\u306b\u5165\u308b

    \n
  8. \n
\n
\n
\n
\u4eca\u56de\u4f7f\u3046\u30aa\u30d7\u30b7\u30e7\u30f3\u306ehelp
\n
\n
$ certbot help all | grep -A2 -- --ip-address\n  --ip-address IP_ADDRESSES\n                        IP addresses to include. For multiple IP addresses you\n                        can use multiple --ip-address flags. All IP addresses\n                        will be included as Subject Alternative Names on the\n                        certificate. (default: [])\n$ certbot help all | grep -A8 -- --preferred-profile\n  --preferred-profile PREFERRED_PROFILE\n                        Request the given profile name from the ACME server,\n                        or fallback to default. If the given profile name\n                        exists in the ACME directory, use it to request a a\n                        certificate. Otherwise, fall back to requesting a\n                        certificate without a profile (which means the CA will\n                        use its default profile). This allows renewals to\n                        succeed even if the CA deprecates and removes a given\n                        profile. (default: None)
\n
\n
\n
\n
IP\u30a2\u30c9\u30ec\u30b9\u8a3c\u660e\u66f8\u3092\u53d6\u5f97
\n
\n
$ sudo bash -c \"source venv/bin/activate && certbot certonly --ip-address 84.247.152.162 --preferred-profile shortlived\"
\n
\n
\n
\n
\u51fa\u6765\u4e0a\u304c\u3063\u305f\u8a3c\u660e\u66f8\u3092\u78ba\u8a8d
\n
\n
$ sudo cat /etc/letsencrypt/live/84.247.152.162/cert.pem | openssl x509 -noout -issuer -subject -dates\nissuer=C=US, O=Let's Encrypt, CN=YE2\nsubject=\nnotBefore=Jan 18 23:06:01 2026 GMT\nnotAfter=Jan 25 15:06:00 2026 GMT\n$ sudo cat /etc/letsencrypt/live/84.247.152.162/cert.pem | openssl x509 -noout -text\nCertificate:\n    Data:\n        Version: 3 (0x2)\n        Serial Number:\n            06:e7:4e:65:fe:41:f7:9b:9e:38:12:12:64:13:85:b4:f3:dd\n        Signature Algorithm: ecdsa-with-SHA384\n        Issuer: C=US, O=Let's Encrypt, CN=YE2\n        Validity\n            Not Before: Jan 18 23:06:01 2026 GMT\n            Not After : Jan 25 15:06:00 2026 GMT\n        Subject:\n        Subject Public Key Info:\n            Public Key Algorithm: id-ecPublicKey\n                Public-Key: (256 bit)\n                pub:\n                    04:d9:d9:68:d2:fe:7b:09:0d:c4:97:1e:fc:e4:1e:\n                    65:50:90:cc:63:ec:6a:98:a3:5c:77:b6:d0:33:f5:\n                    4d:8f:ec:38:d5:e8:1d:01:75:fb:d6:93:15:b9:f3:\n                    f8:7e:a4:a9:7b:bf:d7:4d:a3:5e:d0:ca:8f:74:e5:\n                    7a:98:bc:8e:9e\n                ASN1 OID: prime256v1\n                NIST CURVE: P-256\n        X509v3 extensions:\n            X509v3 Key Usage: critical\n                Digital Signature\n            X509v3 Extended Key Usage:\n                TLS Web Server Authentication\n            X509v3 Basic Constraints: critical\n                CA:FALSE\n            X509v3 Authority Key Identifier:\n                B9:59:F2:8E:CF:22:F0:86:D3:37:48:FF:76:14:18:BA:82:D8:55:87\n            Authority Information Access:\n                CA Issuers - URI:http://ye2.i.lencr.org/\n            X509v3 Subject Alternative Name: critical\n                IP Address:84.247.152.162\n            X509v3 Certificate Policies:\n                Policy: 2.23.140.1.2.1\n            X509v3 CRL Distribution Points:\n                Full Name:\n                  URI:http://ye2.c.lencr.org/94.crl\n\n            CT Precertificate SCTs:\n                Signed Certificate Timestamp:\n                    Version   : v1 (0x0)\n                    Log ID    : 0E:57:94:BC:F3:AE:A9:3E:33:1B:2C:99:07:B3:F7:90:\n                                DF:9B:C2:3D:71:32:25:DD:21:A9:25:AC:61:C5:4E:21\n                    Timestamp : Jan 19 00:04:31.276 2026 GMT\n                    Extensions: none\n                    Signature : ecdsa-with-SHA256\n                                30:45:02:20:19:47:12:58:F2:D7:9C:08:A5:0D:C0:5B:\n                                F0:E7:DF:73:0F:64:77:B2:39:39:A4:3C:A1:D3:F0:39:\n                                4E:7B:0D:91:02:21:00:87:BA:CE:E6:6E:F6:D3:52:D2:\n                                BC:C4:ED:BE:26:6F:DE:BC:B7:17:5F:B6:47:4A:82:75:\n                                A9:95:56:A0:68:FD:1F\n                Signed Certificate Timestamp:\n                    Version   : v1 (0x0)\n                    Log ID    : E3:23:8D:F2:8D:A2:88:E0:AA:E0:AC:F0:FA:90:C9:85:\n                                F0:B6:BF:F5:D2:A5:27:B0:01:FC:1C:44:58:C4:B6:E8\n                    Timestamp : Jan 19 00:04:31.523 2026 GMT\n                    Extensions: 00:00:05:00:2F:CD:F8:E5\n                    Signature : ecdsa-with-SHA256\n                                30:46:02:21:00:CD:4B:99:89:27:23:A9:B5:4E:68:D9:\n                                A0:59:63:45:F5:8F:6A:5C:1F:C2:39:24:AF:60:E4:25:\n                                FF:E6:53:08:4E:02:21:00:DE:9F:73:AB:35:BC:7D:5D:\n                                E7:7A:CB:DE:A7:25:FE:2E:09:A3:2A:33:6E:3B:E4:4E:\n                                D7:AD:67:B9:02:E5:36:B8\n    Signature Algorithm: ecdsa-with-SHA384\n    Signature Value:\n        30:64:02:30:09:90:c5:7b:2d:7c:21:7e:7a:21:77:3a:2d:8e:\n        cd:a1:4d:d1:5e:08:2f:8c:e7:b9:ad:19:39:33:d7:67:41:76:\n        68:39:26:f5:cf:8e:4d:42:5e:cf:45:69:e2:8a:18:ef:02:30:\n        2b:7f:6c:90:27:d1:e5:b1:dd:a2:2a:cb:20:d4:8c:27:0c:7c:\n        6d:9b:06:c8:52:bd:23:d6:aa:83:61:f5:13:fd:77:55:e9:ab:\n        29:e2:bd:82:84:4d:4f:81:4b:3b:76:8a
\n
\n
\n
\n
\u6709\u52b9\u671f\u9650\u306e\u6642\u9593\u3092\u78ba\u8a8d
\n
\n
$ echo $(( $( date +%s --date 'Jan 25 15:06:00 2026 GMT' ) - $( date +%s --date='Jan 18 23:06:01 2026 GMT' ) )) (1)\n575999\n$ echo $((160*60*60)) (2)\n576000
\n
\n
\n
\n
    \n
  1. \n

    notBefore \u3068 notAfter \u306e\u9593\u306e\u79d2\u6570\u3092\u78ba\u8a8d

    \n
  2. \n
  3. \n

    160\u6642\u9593\u3092\u79d2\u6570\u306b\u5909\u63db

    \n
  4. \n
\n
\n
\n
\u74b0\u5883
\n
\n
$ git log --pretty=oneline -1\n58724f68ec46c57dd3c3c8ed4ae686c2d7ad893b (HEAD -> 58724f6) Add CLI flag --ip-address (#10495)\n$ dpkg-query -W python3-dev python3-venv libaugeas-dev gcc\ngcc     4:14.2.0-1\nlibaugeas-dev:amd64     1.14.1-1+b3\npython3-dev     3.13.5-1\npython3-venv    3.13.5-1\n$ lsb_release -dr\nDescription:    Debian GNU/Linux 13 (trixie)\nRelease:        13\n$ arch\nx86_64
\n
\n
\n
\n
\n", "content_text": "\u7121\u6599\u3067\u8a3c\u660e\u66f8\u3092\u767a\u884c\u3067\u304d\u308bLet’s Encrypt \u3067\u77ed\u671f\u8a3c\u660e\u66f8\u3068 IP \u30a2\u30c9\u30ec\u30b9\u8a3c\u660e\u66f8\u306e\u4e00\u822c\u63d0\u4f9b\u304c\u958b\u59cb\u3055\u308c\u307e\u3057\u305f\uff0e\n\n\n\n\nShort-lived and IP address certificates are now generally available from Let\u2019s Encrypt. These certificates are valid for 160 hours, just over six days. In order to get a short-lived certificate subscribers simply need to select the \u2018shortlived\u2019 certificate profile in their ACME client.\n\n\n\n— 6-day and IP Address Certificates are Generally Available – Let's Encrypt\n\n\n\n\u8208\u5473\u304c\u3042\u308b\u306e\u3067\u5c11\u3057\u8a66\u3057\u3066\u307f\u307e\u3057\u305f\uff0e\n\n\n\ncertbot \u30b3\u30de\u30f3\u30c9\u3067\u8a66\u305d\u3046\u3068\u601d\u3063\u305f\u306e\u3067\u3059\u304c\uff0cDebian package\u7248\u306ecertbot \u306funstable \u3067\u30824.0.0 \u3067\u5bfe\u5fdc\u3057\u3066\u3044\u307e\u305b\u3093\uff0e\n\n\n\n$ certbot --ip-address\nusage:\n certbot [SUBCOMMAND] [options] [-d DOMAIN] [-d DOMAIN] ...\n\nCertbot can obtain and install HTTPS/TLS/SSL certificates. By default,\nit will attempt to use a webserver both for obtaining and installing the\ncertificate.\ncertbot: error: unrecognized arguments: --ip-address\n$ certbot --version\ncertbot 4.0.0\n$ rmadison certbot\ncertbot | 1.12.0-2 | oldoldstable | all\ncertbot | 2.1.0-4 | oldstable | all\ncertbot | 4.0.0-2 | stable | all\ncertbot | 4.0.0-2 | testing | all\ncertbot | 4.0.0-2 | unstable | all\n\n\n\n2\u65e5\u524d\u306e 58724f6 \u3067Commit \u3055\u308c\u3066\u3044\u308b\u3088\u3046\u3067\u3059\uff0e\n\n\n\n\nAdd CLI flag –ip-address (#10495) \u00b7 certbot/certbot@58724f6\n\n\n\n\n\u3068\u3044\u3046\u3053\u3068\u3067Developer Guide \u3092\u898b\u306a\u304c\u3089source \u304b\u3089\u5c0e\u5165\u3057\u3066\u8a66\u3057\u307e\u3057\u305f\uff0e\n\n\n\n\nDeveloper Guide \u2014 Certbot 5.2.2 documentation\n\n\n\n\ncertbot \u3092source \u304b\u3089build\n\n$ sudo apt install python3-dev python3-venv libaugeas-dev gcc (1)\n$ git clone https://github.com/certbot/certbot (2)\n$ cd certbot\n$ git log --pretty=oneline -1\n58724f68ec46c57dd3c3c8ed4ae686c2d7ad893b (HEAD -> 58724f6) Add CLI flag --ip-address (#10495)\n$ python3 tools/venv.py (3)\n$ source venv/bin/activate (4)\n$ which certbot\n/home/matoken/src/certbot/venv/bin/certbot\n$ certbot --version\ncertbot 5.3.0.dev0\n\n\n\n\n\n\u4f9d\u5b58\u30d1\u30c3\u30b1\u30fc\u30b8\u5c0e\u5165\n\n\nsource \u5165\u624b\n\n\nbuild\n\n\ncertbot\u74b0\u5883\u306b\u5165\u308b\n\n\n\n\n\u4eca\u56de\u4f7f\u3046\u30aa\u30d7\u30b7\u30e7\u30f3\u306ehelp\n\n$ certbot help all | grep -A2 -- --ip-address\n --ip-address IP_ADDRESSES\n IP addresses to include. For multiple IP addresses you\n can use multiple --ip-address flags. All IP addresses\n will be included as Subject Alternative Names on the\n certificate. (default: [])\n$ certbot help all | grep -A8 -- --preferred-profile\n --preferred-profile PREFERRED_PROFILE\n Request the given profile name from the ACME server,\n or fallback to default. If the given profile name\n exists in the ACME directory, use it to request a a\n certificate. Otherwise, fall back to requesting a\n certificate without a profile (which means the CA will\n use its default profile). This allows renewals to\n succeed even if the CA deprecates and removes a given\n profile. (default: None)\n\n\n\nIP\u30a2\u30c9\u30ec\u30b9\u8a3c\u660e\u66f8\u3092\u53d6\u5f97\n\n$ sudo bash -c \"source venv/bin/activate && certbot certonly --ip-address 84.247.152.162 --preferred-profile shortlived\"\n\n\n\n\u51fa\u6765\u4e0a\u304c\u3063\u305f\u8a3c\u660e\u66f8\u3092\u78ba\u8a8d\n\n$ sudo cat /etc/letsencrypt/live/84.247.152.162/cert.pem | openssl x509 -noout -issuer -subject -dates\nissuer=C=US, O=Let's Encrypt, CN=YE2\nsubject=\nnotBefore=Jan 18 23:06:01 2026 GMT\nnotAfter=Jan 25 15:06:00 2026 GMT\n$ sudo cat /etc/letsencrypt/live/84.247.152.162/cert.pem | openssl x509 -noout -text\nCertificate:\n Data:\n Version: 3 (0x2)\n Serial Number:\n 06:e7:4e:65:fe:41:f7:9b:9e:38:12:12:64:13:85:b4:f3:dd\n Signature Algorithm: ecdsa-with-SHA384\n Issuer: C=US, O=Let's Encrypt, CN=YE2\n Validity\n Not Before: Jan 18 23:06:01 2026 GMT\n Not After : Jan 25 15:06:00 2026 GMT\n Subject:\n Subject Public Key Info:\n Public Key Algorithm: id-ecPublicKey\n Public-Key: (256 bit)\n pub:\n 04:d9:d9:68:d2:fe:7b:09:0d:c4:97:1e:fc:e4:1e:\n 65:50:90:cc:63:ec:6a:98:a3:5c:77:b6:d0:33:f5:\n 4d:8f:ec:38:d5:e8:1d:01:75:fb:d6:93:15:b9:f3:\n f8:7e:a4:a9:7b:bf:d7:4d:a3:5e:d0:ca:8f:74:e5:\n 7a:98:bc:8e:9e\n ASN1 OID: prime256v1\n NIST CURVE: P-256\n X509v3 extensions:\n X509v3 Key Usage: critical\n Digital Signature\n X509v3 Extended Key Usage:\n TLS Web Server Authentication\n X509v3 Basic Constraints: critical\n CA:FALSE\n X509v3 Authority Key Identifier:\n B9:59:F2:8E:CF:22:F0:86:D3:37:48:FF:76:14:18:BA:82:D8:55:87\n Authority Information Access:\n CA Issuers - URI:http://ye2.i.lencr.org/\n X509v3 Subject Alternative Name: critical\n IP Address:84.247.152.162\n X509v3 Certificate Policies:\n Policy: 2.23.140.1.2.1\n X509v3 CRL Distribution Points:\n Full Name:\n URI:http://ye2.c.lencr.org/94.crl\n\n CT Precertificate SCTs:\n Signed Certificate Timestamp:\n Version : v1 (0x0)\n Log ID : 0E:57:94:BC:F3:AE:A9:3E:33:1B:2C:99:07:B3:F7:90:\n DF:9B:C2:3D:71:32:25:DD:21:A9:25:AC:61:C5:4E:21\n Timestamp : Jan 19 00:04:31.276 2026 GMT\n Extensions: none\n Signature : ecdsa-with-SHA256\n 30:45:02:20:19:47:12:58:F2:D7:9C:08:A5:0D:C0:5B:\n F0:E7:DF:73:0F:64:77:B2:39:39:A4:3C:A1:D3:F0:39:\n 4E:7B:0D:91:02:21:00:87:BA:CE:E6:6E:F6:D3:52:D2:\n BC:C4:ED:BE:26:6F:DE:BC:B7:17:5F:B6:47:4A:82:75:\n A9:95:56:A0:68:FD:1F\n Signed Certificate Timestamp:\n Version : v1 (0x0)\n Log ID : E3:23:8D:F2:8D:A2:88:E0:AA:E0:AC:F0:FA:90:C9:85:\n F0:B6:BF:F5:D2:A5:27:B0:01:FC:1C:44:58:C4:B6:E8\n Timestamp : Jan 19 00:04:31.523 2026 GMT\n Extensions: 00:00:05:00:2F:CD:F8:E5\n Signature : ecdsa-with-SHA256\n 30:46:02:21:00:CD:4B:99:89:27:23:A9:B5:4E:68:D9:\n A0:59:63:45:F5:8F:6A:5C:1F:C2:39:24:AF:60:E4:25:\n FF:E6:53:08:4E:02:21:00:DE:9F:73:AB:35:BC:7D:5D:\n E7:7A:CB:DE:A7:25:FE:2E:09:A3:2A:33:6E:3B:E4:4E:\n D7:AD:67:B9:02:E5:36:B8\n Signature Algorithm: ecdsa-with-SHA384\n Signature Value:\n 30:64:02:30:09:90:c5:7b:2d:7c:21:7e:7a:21:77:3a:2d:8e:\n cd:a1:4d:d1:5e:08:2f:8c:e7:b9:ad:19:39:33:d7:67:41:76:\n 68:39:26:f5:cf:8e:4d:42:5e:cf:45:69:e2:8a:18:ef:02:30:\n 2b:7f:6c:90:27:d1:e5:b1:dd:a2:2a:cb:20:d4:8c:27:0c:7c:\n 6d:9b:06:c8:52:bd:23:d6:aa:83:61:f5:13:fd:77:55:e9:ab:\n 29:e2:bd:82:84:4d:4f:81:4b:3b:76:8a\n\n\n\n\u6709\u52b9\u671f\u9650\u306e\u6642\u9593\u3092\u78ba\u8a8d\n\n$ echo $(( $( date +%s --date 'Jan 25 15:06:00 2026 GMT' ) - $( date +%s --date='Jan 18 23:06:01 2026 GMT' ) )) (1)\n575999\n$ echo $((160*60*60)) (2)\n576000\n\n\n\n\n\nnotBefore \u3068 notAfter \u306e\u9593\u306e\u79d2\u6570\u3092\u78ba\u8a8d\n\n\n160\u6642\u9593\u3092\u79d2\u6570\u306b\u5909\u63db\n\n\n\n\n\u74b0\u5883\n\n$ git log --pretty=oneline -1\n58724f68ec46c57dd3c3c8ed4ae686c2d7ad893b (HEAD -> 58724f6) Add CLI flag --ip-address (#10495)\n$ dpkg-query -W python3-dev python3-venv libaugeas-dev gcc\ngcc 4:14.2.0-1\nlibaugeas-dev:amd64 1.14.1-1+b3\npython3-dev 3.13.5-1\npython3-venv 3.13.5-1\n$ lsb_release -dr\nDescription: Debian GNU/Linux 13 (trixie)\nRelease: 13\n$ arch\nx86_64", "date_published": "2026-01-19T19:36:54+09:00", "date_modified": "2026-01-19T19:36:56+09:00", "authors": [ { "name": "matoken", "url": "https://matoken.org/blog/author/matoken/", "avatar": "https://secure.gravatar.com/avatar/38f5f3b575c5eb45cda6aa659bca119ac7a5e16b46565e869d0030e3bd66981d?s=512&d=mm&r=g" } ], "author": { "name": "matoken", "url": "https://matoken.org/blog/author/matoken/", "avatar": "https://secure.gravatar.com/avatar/38f5f3b575c5eb45cda6aa659bca119ac7a5e16b46565e869d0030e3bd66981d?s=512&d=mm&r=g" }, "tags": [ "certbot", "certificates", "LetsEncrypt", "Debian", "Linux", "trixie" ] }, { "id": "https://matoken.org/blog/?p=5082", "url": "https://matoken.org/blog/2025/12/23/japanese-input-with-kitty/", "title": "\u30bf\u30fc\u30df\u30ca\u30eb\u30a8\u30df\u30e5\u30ec\u30fc\u30bf\u306ekitty\u3067\u65e5\u672c\u8a9e\u5165\u529b", "content_html": "
\n

\"icon

\n
\n
\n

\u30de\u30eb\u30c1\u30d7\u30e9\u30c3\u30c8\u30db\u30fc\u30e0\uff0cGPU\u30d9\u30fc\u30b9\u306akitty \u3068\u3044\u3046\u30bf\u30fc\u30df\u30ca\u30eb\u30a8\u30df\u30e5\u30ec\u30fc\u30bf\u304c\u3042\u308a\u307e\u3059\uff0e

\n
\n
\n\n
\n
\n

\u30bf\u30fc\u30df\u30ca\u30eb\u30b0\u30e9\u30d5\u30a3\u30c3\u30af\u306ekitty \u3084\u540c\u3058\u30bf\u30fc\u30df\u30ca\u30eb\u5185\u3067\u306e\u6587\u5b57\u30b5\u30a4\u30ba\u5909\u66f4\u306a\u3069\u9762\u767d\u3044\u6a5f\u80fd\u3082\u3042\u3063\u305f\u308a\u3057\u3066GUI \u74b0\u5883\u3067\u3088\u304f\u4f7f\u3063\u3066\u3044\u307e\u3059\uff0e

\n
\n
\n\n
\n
\n

\u65b0\u898f\u74b0\u5883\u3067kitty \u3067\u65e5\u672c\u8a9e\u5165\u529b\u304c\u51fa\u6765\u305a\u8a2d\u5b9a\u3057\u305f\u306e\u3067\u3053\u3061\u3089\u306b\u3082\u30e1\u30e2\u3057\u3066\u304a\u304d\u307e\u3059\uff0e

\n
\n

\n
\n

\u4eca\u56de\u306e\u74b0\u5883\u306fDebian trixue amd64 \u306e\u307b\u307c\u521d\u671f\u74b0\u5883\uff0cWayland \u3067\u306f\u306a\u304fX.org \u306b\u3057\u3066\u3042\u308a\u307e\u3059\uff0ekitty \u306fDebian \u30d1\u30c3\u30b1\u30fc\u30b8\u30de\u30cd\u30fc\u30b8\u30e3\u304b\u3089\u5c0e\u5165\u3057\u3066\uff0c\u65e5\u672c\u8a9e\u5165\u529b\u74b0\u5883\u306ffcitx + mozc \u3067\u3059\uff0e
\nkitty \u4ee5\u5916\u306e\u74b0\u5883\u3067\u306f\u65e5\u672c\u8a9e\u5165\u529b\u306f\u51fa\u6765\u3066\u3044\u307e\u3059\u304c\uff0ckitty \u3067\u306f\u3046\u307e\u304f\u884c\u304d\u307e\u305b\u3093\uff0e

\n
\n
\n

\u4ee5\u4e0b\u306eissue \u3092\u898b\u308b\u3068 GLFW_IM_MODULE=ibus \u3092\u305b\u3063\u3066\u3044\u3059\u308b\u3053\u3068\u3067ibus/fcitx \u74b0\u5883\u3067\u65e5\u672c\u8a9e\u5165\u529b\u3067\u304d\u308b\u3088\u3046\u3067\u3059\uff0e

\n
\n
\n
\n
\n

GLFW_IM_MODULE=ibus works for me with fcitx5.

\n
\n
\n
\n— Fcitx input problem \u00b7 Issue #403 \u00b7 kovidgoyal/kitty\n
\n
\n
\n

\u3068\u308a\u3042\u3048\u305a\u5225\u306e\u7aef\u672b\u304b\u3089\u3053\u3093\u306a\u611f\u3058\u3067\u74b0\u5883\u5909\u6570\u3092\u6307\u5b9a\u3057\u3066kitty \u3092\u8d77\u52d5\u3059\u308b\u3068\u65e5\u672c\u8a9e\u5165\u529b\u3067\u304d\u307e\u3059\uff0e

\n
\n
\n
\n
$ GLFW_IM_MODULE=ibus kitty
\n
\n
\n
\n

kitty \u306e.desktop \u30d5\u30a1\u30a4\u30eb\u306b\u74b0\u5883\u5909\u6570\u3092\u52a0\u3048\u3066GUI \u304b\u3089\u306ekitty \u8d77\u52d5\u6642\u306b\u65e5\u672c\u8a9e\u5165\u529b\u3067\u304d\u308b\u3088\u3046\u306b\u3057\u3066\u304a\u304d\u307e\u3059\uff0e

\n
\n
\n
\n
$ dpkg -L kitty | grep desktop\n/usr/share/applications/kitty.desktop\n/usr/share/doc/kitty/examples/kitty-open.desktop\n$ cp /usr/share/applications/kitty.desktop ~/.local/share/applications/\n$ diff -u /usr/share/applications/kitty.desktop ~/.local/share/applications/kitty.desktop\n--- /usr/share/applications/kitty.desktop       2025-06-23 03:52:56.000000000 +0900\n+++ /home/matoken/.local/share/applications/kitty.desktop       2025-12-23 18:21:14.623247581 +0900\n@@ -6,7 +6,7 @@\n Comment=Fast, feature-rich, GPU based terminal\n TryExec=kitty\n StartupNotify=true\n-Exec=kitty\n+Exec=env GLFW_IM_MODULE=ibus kitty\n Icon=kitty\n Categories=System;TerminalEmulator;\n X-TerminalArgExec=--
\n
\n
\n
\n

\u3053\u308c\u3067GUI \u304b\u3089kitty \u3092\u8d77\u52d5\u3057\u3066\u65e5\u672c\u8a9e\u5165\u529b\u3067\u304d\u308b\u3088\u3046\u306b\u306a\u308a\u307e\u3057\u305f\uff0e

\n
\n
\n

\"kitty

\n
\n
\n
\u74b0\u5883
\n
\n
$ dpkg-query -W fcitx kitty\nfcitx   1:4.2.9.9-2\nkitty   0.41.1-2+b1\n$ lsb_release -dr\nDescription:    Debian GNU/Linux 13 (trixie)\nRelease:        13\n$ arch\nx86_64
\n
\n
\n", "content_text": "\u30de\u30eb\u30c1\u30d7\u30e9\u30c3\u30c8\u30db\u30fc\u30e0\uff0cGPU\u30d9\u30fc\u30b9\u306akitty \u3068\u3044\u3046\u30bf\u30fc\u30df\u30ca\u30eb\u30a8\u30df\u30e5\u30ec\u30fc\u30bf\u304c\u3042\u308a\u307e\u3059\uff0e\n\n\n\n\nkitty\n\n\n\n\n\u30bf\u30fc\u30df\u30ca\u30eb\u30b0\u30e9\u30d5\u30a3\u30c3\u30af\u306ekitty \u3084\u540c\u3058\u30bf\u30fc\u30df\u30ca\u30eb\u5185\u3067\u306e\u6587\u5b57\u30b5\u30a4\u30ba\u5909\u66f4\u306a\u3069\u9762\u767d\u3044\u6a5f\u80fd\u3082\u3042\u3063\u305f\u308a\u3057\u3066GUI \u74b0\u5883\u3067\u3088\u304f\u4f7f\u3063\u3066\u3044\u307e\u3059\uff0e\n\n\n\n\n\u30bf\u30fc\u30df\u30ca\u30eb\u30a8\u30df\u30e5\u30ec\u30fc\u30bf\u306eKitty\u3067\u6587\u5b57\u30b5\u30a4\u30ba\u5909\u66f4 \u203b\u6771\u6d77\u9053\u3089\u3050\u540d\u53e4\u5c4b 2025\u5e743\u6708\u30aa\u30d5\u306a\u96c6\u307e\u308a\u767a\u8868\n\n\n\n\n\u65b0\u898f\u74b0\u5883\u3067kitty \u3067\u65e5\u672c\u8a9e\u5165\u529b\u304c\u51fa\u6765\u305a\u8a2d\u5b9a\u3057\u305f\u306e\u3067\u3053\u3061\u3089\u306b\u3082\u30e1\u30e2\u3057\u3066\u304a\u304d\u307e\u3059\uff0e\n\n\n\n\u4eca\u56de\u306e\u74b0\u5883\u306fDebian trixue amd64 \u306e\u307b\u307c\u521d\u671f\u74b0\u5883\uff0cWayland \u3067\u306f\u306a\u304fX.org \u306b\u3057\u3066\u3042\u308a\u307e\u3059\uff0ekitty \u306fDebian \u30d1\u30c3\u30b1\u30fc\u30b8\u30de\u30cd\u30fc\u30b8\u30e3\u304b\u3089\u5c0e\u5165\u3057\u3066\uff0c\u65e5\u672c\u8a9e\u5165\u529b\u74b0\u5883\u306ffcitx + mozc \u3067\u3059\uff0e\nkitty \u4ee5\u5916\u306e\u74b0\u5883\u3067\u306f\u65e5\u672c\u8a9e\u5165\u529b\u306f\u51fa\u6765\u3066\u3044\u307e\u3059\u304c\uff0ckitty \u3067\u306f\u3046\u307e\u304f\u884c\u304d\u307e\u305b\u3093\uff0e\n\n\n\u4ee5\u4e0b\u306eissue \u3092\u898b\u308b\u3068 GLFW_IM_MODULE=ibus \u3092\u305b\u3063\u3066\u3044\u3059\u308b\u3053\u3068\u3067ibus/fcitx \u74b0\u5883\u3067\u65e5\u672c\u8a9e\u5165\u529b\u3067\u304d\u308b\u3088\u3046\u3067\u3059\uff0e\n\n\n\n\nGLFW_IM_MODULE=ibus works for me with fcitx5.\n\n\n\n— Fcitx input problem \u00b7 Issue #403 \u00b7 kovidgoyal/kitty\n\n\n\n\u3068\u308a\u3042\u3048\u305a\u5225\u306e\u7aef\u672b\u304b\u3089\u3053\u3093\u306a\u611f\u3058\u3067\u74b0\u5883\u5909\u6570\u3092\u6307\u5b9a\u3057\u3066kitty \u3092\u8d77\u52d5\u3059\u308b\u3068\u65e5\u672c\u8a9e\u5165\u529b\u3067\u304d\u307e\u3059\uff0e\n\n\n\n$ GLFW_IM_MODULE=ibus kitty\n\n\n\nkitty \u306e.desktop \u30d5\u30a1\u30a4\u30eb\u306b\u74b0\u5883\u5909\u6570\u3092\u52a0\u3048\u3066GUI \u304b\u3089\u306ekitty \u8d77\u52d5\u6642\u306b\u65e5\u672c\u8a9e\u5165\u529b\u3067\u304d\u308b\u3088\u3046\u306b\u3057\u3066\u304a\u304d\u307e\u3059\uff0e\n\n\n\n$ dpkg -L kitty | grep desktop\n/usr/share/applications/kitty.desktop\n/usr/share/doc/kitty/examples/kitty-open.desktop\n$ cp /usr/share/applications/kitty.desktop ~/.local/share/applications/\n$ diff -u /usr/share/applications/kitty.desktop ~/.local/share/applications/kitty.desktop\n--- /usr/share/applications/kitty.desktop 2025-06-23 03:52:56.000000000 +0900\n+++ /home/matoken/.local/share/applications/kitty.desktop 2025-12-23 18:21:14.623247581 +0900\n@@ -6,7 +6,7 @@\n Comment=Fast, feature-rich, GPU based terminal\n TryExec=kitty\n StartupNotify=true\n-Exec=kitty\n+Exec=env GLFW_IM_MODULE=ibus kitty\n Icon=kitty\n Categories=System;TerminalEmulator;\n X-TerminalArgExec=--\n\n\n\n\u3053\u308c\u3067GUI \u304b\u3089kitty \u3092\u8d77\u52d5\u3057\u3066\u65e5\u672c\u8a9e\u5165\u529b\u3067\u304d\u308b\u3088\u3046\u306b\u306a\u308a\u307e\u3057\u305f\uff0e\n\n\n\n\n\n\u74b0\u5883\n\n$ dpkg-query -W fcitx kitty\nfcitx 1:4.2.9.9-2\nkitty 0.41.1-2+b1\n$ lsb_release -dr\nDescription: Debian GNU/Linux 13 (trixie)\nRelease: 13\n$ arch\nx86_64", "date_published": "2025-12-23T19:02:19+09:00", "date_modified": "2025-12-23T19:02:21+09:00", "authors": [ { "name": "matoken", "url": "https://matoken.org/blog/author/matoken/", "avatar": "https://secure.gravatar.com/avatar/38f5f3b575c5eb45cda6aa659bca119ac7a5e16b46565e869d0030e3bd66981d?s=512&d=mm&r=g" } ], "author": { "name": "matoken", "url": "https://matoken.org/blog/author/matoken/", "avatar": "https://secure.gravatar.com/avatar/38f5f3b575c5eb45cda6aa659bca119ac7a5e16b46565e869d0030e3bd66981d?s=512&d=mm&r=g" }, "tags": [ "japanese", "kitty", "Debian", "Linux", "trixie" ] }, { "id": "https://matoken.org/blog/?p=5033", "url": "https://matoken.org/blog/2025/12/20/snac-bluesky-bridge/", "title": "snac\u3068Bluesky\u9023\u643a", "content_html": "
\n

\"snac

\n
\n
\n

\u3055\u304f\u3089\u306e\u30ca\u30ec\u30c3\u30b8\u306b\u8efd\u91cfActivityPub Server \u306esnac \u306b\u3064\u3044\u3066\u306e\u8a18\u4e8b\u3092\u5bc4\u7a3f\u3057\u307e\u3057\u305f\uff0e

\n
\n
\n\n
\n
\n

\u3053\u3053\u306b\u66f8\u304b\u306a\u304b\u3063\u305fsnac \u306e\u3053\u3068\u3092\u3044\u304f\u3064\u304b\u66f8\u3044\u3066\u3044\u3053\u3046\u3068\u601d\u3044\u307e\u3059\uff0e
\n\u4eca\u65e5\u306fsnac \u3068Bluesky \u9023\u643a\u306b\u3064\u3044\u3066\uff0e

\n
\n

\n
\n

Bluesky \u306f\u30dd\u30b9\u30c8Twitter \u306e\u4e00\u3064\u3067AT Protocol \u3092\u5229\u7528\u3057\u305f\u5206\u6563\u578bSNS \u3067\u3059\uff0e\u3068\u306f\u3044\u3048\u73fe\u6642\u70b9\u3067\u306fActivityPub \u307b\u3069\u5206\u6563\u3057\u3066\u3044\u308b\u611f\u3058\u306f\u3057\u307e\u305b\u3093\uff0e
\n\u3053\u306eBluesky \u3068fediverse (snac \u306eActivityPub \u3082\u542b\u3080)\u3068Web \u3092\u9023\u643a\u3055\u305b\u308b\u30d6\u30ea\u30c3\u30b8\u3068\u3057\u3066Bridgy Fed \u3068\u3044\u3046\u30b5\u30fc\u30d3\u30b9\u304c\u3042\u308a\u307e\u3059\uff0e
\nBridgy Fed \u3092\u4f7f\u3063\u3066snac \u3068Bluesky \u3092\u9023\u643a\u3057\u3066\u307f\u307e\u3059\uff0c

\n
\n
\n\n
\n
\n

ActivityPub \u304b\u3089\u9023\u643a\u3059\u308b\u306b\u306f https://fed.brid.gy/login \u3067\u8a8d\u8a3c\u5f8c\uff0c\u300cEnable\u300d\u30dc\u30bf\u30f3\u3092\u62bc\u3059\u3068\u306a\u3063\u3066\u3044\u308b\u306e\u3067\u3059\u304c\u30ed\u30b0\u30a4\u30f3\u3057\u3066\u3082\u30dc\u30bf\u30f3\u304c\u898b\u5f53\u305f\u308a\u307e\u305b\u3093\uff0eMastodon \u3068\u3057\u3066snac \u306e\u30a2\u30ab\u30a6\u30f3\u30c8\u3092\u8a8d\u8a3c\u3057\u305f\u306e\u3067\u306a\u306b\u304bAPI \u306e\u9055\u3044\u3084\u4e0d\u8db3\u304c\u3042\u308b\u306e\u304b\u3082\u3057\u308c\u307e\u305b\u3093\uff0e

\n
\n
\n

\u4ee5\u4e0b\u306e\u30da\u30fc\u30b8\u3092\u898b\u308b\u3068\u5225\u306e\u65b9\u6cd5\u3082\u7d39\u4ecb\u3055\u308c\u3066\u3044\u307e\u3059\uff0e

\n
\n
\n\n
\n
\n
\n
\n
\n
if login isn't supported for your fediverse server, search for and follow @bsky.brid.gy@bsky.brid.gy in the fediverse. That account will then follow you back. Accept its follow to make sure your fediverse posts get sent the bridge and make it into Bluesky. You can unfollow it afterward if you want, you'll still stay bridged. (Here's how to disable.)
\n
\n
\n
\n
\n— How do I get started?\n
\n
\n
\n

snac \u306e\u8a72\u5f53\u30a2\u30ab\u30a6\u30f3\u30c8\u3067 @bsky.brid.gy@bsky.brid.gy \u3092follow \u3057\u307e\u3059\uff0e\u3059\u308b\u3068\u3053\u306e\u30a2\u30ab\u30a6\u30f3\u30c8\u304b\u3089follow \u304c\u8fd4\u3055\u308c\u308b\u306e\u3067\u627f\u8a8d\u3059\u308b\u3068\u9023\u643a\u5b8c\u4e86\u3067\u3059\uff0e\u3053\u306e\u5f8c\u306f unfollow \u3057\u3066\u3082\u9023\u643a\u306f\u7dad\u6301\u3055\u308c\u308b\u305d\u3046\u3067\u3059\uff0e

\n
\n
\n

\u3053\u306e\u3068\u304d\u306e\u9023\u643a\u5143\u30a2\u30ab\u30a6\u30f3\u30c8\u304c\uff0c @[user]@[instance] \u306e\u5834\u5408Bluesky \u30d6\u30ea\u30c3\u30b8\u30a2\u30ab\u30a6\u30f3\u30c8\u306e\u30cf\u30f3\u30c9\u30eb\u306f [user].[instance].ap.brid.gy \u306b\u306a\u308a\u307e\u3059\uff0e

\n
\n
\n

\u306a\u306b\u304b\u6295\u7a3f\u3057\u3066\u78ba\u8a8d\u3057\u307e\u3057\u3087\u3046\uff0e

\n
\n
\n

\"snac

\n
\n
\n

Bridgy Fed \u306f\u5358\u306b\u6295\u7a3f\u3092\u8ee2\u9001\u3059\u308b\u3060\u3051\u3067\u306a\u304f\u8fd4\u4fe1\u3084likes, (\u5143\u306e\u6295\u7a3f\u304c\u30d6\u30ea\u30c3\u30b8\u3055\u308c\u3066\u3044\u308b\u5834\u5408\u306f)repost \u306a\u3069\u3082\u9023\u643a\u3055\u308c\u308b\u3088\u3046\u3067\u3059\uff0e\u5143\u306e\u6295\u7a3f\u3092\u524a\u9664\u3057\u305f\u5834\u5408\u3082\u53cd\u6620\u3055\u308c\u307e\u3059\uff0e

\n
\n
\n
\n
\n

Which stuff of mine from the fediverse will get bridged?

\n
\n
\n

Once you’ve enabled the bridge, anything that’s fully public and interacts with Bluesky users. This includes your posts, replies, likes, and reposts if the original post was bridged. Posts on Bluesky are limited to 300 characters, so longer posts from the fediverse are truncated and ellipsized. Hashtags, links, link previews, images, videos, and even alt text are also included.

\n
\n
\n
\n— Which stuff of mine from the fediverse will get bridged?\n
\n
\n
\n

\u30d6\u30ea\u30c3\u30b8\u30a2\u30ab\u30a6\u30f3\u30c8\u306e\u524a\u9664\u3092\u884c\u3044\u305f\u3044\u5834\u5408\u306f\uff0cBridgy Fed\u30dc\u30c3\u30c8\u30e6\u30fc\u30b6\u30fc( @bsky.brid.gy@bsky.brid.gy )\u3092\u30d6\u30ed\u30c3\u30af\u3059\u308b\u3053\u3068\u3067\u524a\u9664\u3067\u304d\u308b\u3088\u3046\u3067\u3059\uff0e

\n
\n
\n
\n
\n

If you’re on the fediverse or Bluesky, and you’ve opted in but now want to opt out, block the Bridgy Fed bot user for the network you want to opt out of. For example, on the fediverse, block @bsky.brid.gy@bsky.brid.gy. On Bluesky, block @ap.brid.gy.

\n
\n
\n

(However, if you’re on a Pixelfed instance, DM the word stop to @bsky.brid.gy@bsky.brid.gy instead. Pixelfed doesn’t yet send the ActivityPub Block activity, so blocking won’t work. Hopefully they’ll fix that soon!)

\n
\n
\n

If you’re on the web, email us from an address at your web site’s domain to show that you own it, or you can put the text #nobridge in the profile on your home page and then update your profile on your user page.

\n
\n
\n

Once you’ve done this, Bridgy Fed will deactivate your bridged profile in that network, and it will no longer bridge any of your posts or interactions there.

\n
\n
\n

You can undo this later and reactivate bridging for your account, but depending on the network, not everything will be perfectly restored. For example, when you disable bridging into the fediverse, the bridged fediverse account is deleted and all followers are disconnected. If you later re-enable it, fediverse users will have to search for your account by address manually to find and follow it again.

\n
\n
\n
\n— How do I opt out and remove my site or account?\n
\n
\n", "content_text": "\u3055\u304f\u3089\u306e\u30ca\u30ec\u30c3\u30b8\u306b\u8efd\u91cfActivityPub Server \u306esnac \u306b\u3064\u3044\u3066\u306e\u8a18\u4e8b\u3092\u5bc4\u7a3f\u3057\u307e\u3057\u305f\uff0e\n\n\n\n\n\u3055\u304f\u3089\u30a4\u30f3\u30bf\u30fc\u30cd\u30c3\u30c8\u306e\u3055\u304f\u3089\u306e\u30ca\u30ec\u30c3\u30b8\u306bsnac\u306e\u8a18\u4e8b\u3092\u5bc4\u7a3f \u2013 matoken’s blog\n\n\n\n\n\u3053\u3053\u306b\u66f8\u304b\u306a\u304b\u3063\u305fsnac \u306e\u3053\u3068\u3092\u3044\u304f\u3064\u304b\u66f8\u3044\u3066\u3044\u3053\u3046\u3068\u601d\u3044\u307e\u3059\uff0e\n\u4eca\u65e5\u306fsnac \u3068Bluesky \u9023\u643a\u306b\u3064\u3044\u3066\uff0e\n\n\n\nBluesky \u306f\u30dd\u30b9\u30c8Twitter \u306e\u4e00\u3064\u3067AT Protocol \u3092\u5229\u7528\u3057\u305f\u5206\u6563\u578bSNS \u3067\u3059\uff0e\u3068\u306f\u3044\u3048\u73fe\u6642\u70b9\u3067\u306fActivityPub \u307b\u3069\u5206\u6563\u3057\u3066\u3044\u308b\u611f\u3058\u306f\u3057\u307e\u305b\u3093\uff0e\n\u3053\u306eBluesky \u3068fediverse (snac \u306eActivityPub \u3082\u542b\u3080)\u3068Web \u3092\u9023\u643a\u3055\u305b\u308b\u30d6\u30ea\u30c3\u30b8\u3068\u3057\u3066Bridgy Fed \u3068\u3044\u3046\u30b5\u30fc\u30d3\u30b9\u304c\u3042\u308a\u307e\u3059\uff0e\nBridgy Fed \u3092\u4f7f\u3063\u3066snac \u3068Bluesky \u3092\u9023\u643a\u3057\u3066\u307f\u307e\u3059\uff0c\n\n\n\n\nBridgy Fed\n\n\nBridgy Fed for the fediverse (@ap.brid.gy) \u2014 Bluesky (Bluesky \u30a2\u30ab\u30a6\u30f3\u30c8)\n\n\n\n\nActivityPub \u304b\u3089\u9023\u643a\u3059\u308b\u306b\u306f https://fed.brid.gy/login \u3067\u8a8d\u8a3c\u5f8c\uff0c\u300cEnable\u300d\u30dc\u30bf\u30f3\u3092\u62bc\u3059\u3068\u306a\u3063\u3066\u3044\u308b\u306e\u3067\u3059\u304c\u30ed\u30b0\u30a4\u30f3\u3057\u3066\u3082\u30dc\u30bf\u30f3\u304c\u898b\u5f53\u305f\u308a\u307e\u305b\u3093\uff0eMastodon \u3068\u3057\u3066snac \u306e\u30a2\u30ab\u30a6\u30f3\u30c8\u3092\u8a8d\u8a3c\u3057\u305f\u306e\u3067\u306a\u306b\u304bAPI \u306e\u9055\u3044\u3084\u4e0d\u8db3\u304c\u3042\u308b\u306e\u304b\u3082\u3057\u308c\u307e\u305b\u3093\uff0e\n\n\n\u4ee5\u4e0b\u306e\u30da\u30fc\u30b8\u3092\u898b\u308b\u3068\u5225\u306e\u65b9\u6cd5\u3082\u7d39\u4ecb\u3055\u308c\u3066\u3044\u307e\u3059\uff0e\n\n\n\n\nHow do I get started?\n\n\n\n\n\n\n\nif login isn't supported for your fediverse server, search for and follow @bsky.brid.gy@bsky.brid.gy in the fediverse. That account will then follow you back. Accept its follow to make sure your fediverse posts get sent the bridge and make it into Bluesky. You can unfollow it afterward if you want, you'll still stay bridged. (Here's how to disable.)\n\n\n\n\n— How do I get started?\n\n\n\nsnac \u306e\u8a72\u5f53\u30a2\u30ab\u30a6\u30f3\u30c8\u3067 @bsky.brid.gy@bsky.brid.gy \u3092follow \u3057\u307e\u3059\uff0e\u3059\u308b\u3068\u3053\u306e\u30a2\u30ab\u30a6\u30f3\u30c8\u304b\u3089follow \u304c\u8fd4\u3055\u308c\u308b\u306e\u3067\u627f\u8a8d\u3059\u308b\u3068\u9023\u643a\u5b8c\u4e86\u3067\u3059\uff0e\u3053\u306e\u5f8c\u306f unfollow \u3057\u3066\u3082\u9023\u643a\u306f\u7dad\u6301\u3055\u308c\u308b\u305d\u3046\u3067\u3059\uff0e\n\n\n\u3053\u306e\u3068\u304d\u306e\u9023\u643a\u5143\u30a2\u30ab\u30a6\u30f3\u30c8\u304c\uff0c @[user]@[instance] \u306e\u5834\u5408Bluesky \u30d6\u30ea\u30c3\u30b8\u30a2\u30ab\u30a6\u30f3\u30c8\u306e\u30cf\u30f3\u30c9\u30eb\u306f [user].[instance].ap.brid.gy \u306b\u306a\u308a\u307e\u3059\uff0e\n\n\n\u306a\u306b\u304b\u6295\u7a3f\u3057\u3066\u78ba\u8a8d\u3057\u307e\u3057\u3087\u3046\uff0e\n\n\n\n\n\nBridgy Fed \u306f\u5358\u306b\u6295\u7a3f\u3092\u8ee2\u9001\u3059\u308b\u3060\u3051\u3067\u306a\u304f\u8fd4\u4fe1\u3084likes, (\u5143\u306e\u6295\u7a3f\u304c\u30d6\u30ea\u30c3\u30b8\u3055\u308c\u3066\u3044\u308b\u5834\u5408\u306f)repost \u306a\u3069\u3082\u9023\u643a\u3055\u308c\u308b\u3088\u3046\u3067\u3059\uff0e\u5143\u306e\u6295\u7a3f\u3092\u524a\u9664\u3057\u305f\u5834\u5408\u3082\u53cd\u6620\u3055\u308c\u307e\u3059\uff0e\n\n\n\n\nWhich stuff of mine from the fediverse will get bridged?\n\n\nOnce you’ve enabled the bridge, anything that’s fully public and interacts with Bluesky users. This includes your posts, replies, likes, and reposts if the original post was bridged. Posts on Bluesky are limited to 300 characters, so longer posts from the fediverse are truncated and ellipsized. Hashtags, links, link previews, images, videos, and even alt text are also included.\n\n\n\n— Which stuff of mine from the fediverse will get bridged?\n\n\n\n\u30d6\u30ea\u30c3\u30b8\u30a2\u30ab\u30a6\u30f3\u30c8\u306e\u524a\u9664\u3092\u884c\u3044\u305f\u3044\u5834\u5408\u306f\uff0cBridgy Fed\u30dc\u30c3\u30c8\u30e6\u30fc\u30b6\u30fc( @bsky.brid.gy@bsky.brid.gy )\u3092\u30d6\u30ed\u30c3\u30af\u3059\u308b\u3053\u3068\u3067\u524a\u9664\u3067\u304d\u308b\u3088\u3046\u3067\u3059\uff0e\n\n\n\n\nIf you’re on the fediverse or Bluesky, and you’ve opted in but now want to opt out, block the Bridgy Fed bot user for the network you want to opt out of. For example, on the fediverse, block @bsky.brid.gy@bsky.brid.gy. On Bluesky, block @ap.brid.gy.\n\n\n(However, if you’re on a Pixelfed instance, DM the word stop to @bsky.brid.gy@bsky.brid.gy instead. Pixelfed doesn’t yet send the ActivityPub Block activity, so blocking won’t work. Hopefully they’ll fix that soon!)\n\n\nIf you’re on the web, email us from an address at your web site’s domain to show that you own it, or you can put the text #nobridge in the profile on your home page and then update your profile on your user page.\n\n\nOnce you’ve done this, Bridgy Fed will deactivate your bridged profile in that network, and it will no longer bridge any of your posts or interactions there.\n\n\nYou can undo this later and reactivate bridging for your account, but depending on the network, not everything will be perfectly restored. For example, when you disable bridging into the fediverse, the bridged fediverse account is deleted and all followers are disconnected. If you later re-enable it, fediverse users will have to search for your account by address manually to find and follow it again.\n\n\n\n— How do I opt out and remove my site or account?", "date_published": "2025-12-20T21:53:53+09:00", "date_modified": "2025-12-20T21:53:59+09:00", "authors": [ { "name": "matoken", "url": "https://matoken.org/blog/author/matoken/", "avatar": "https://secure.gravatar.com/avatar/38f5f3b575c5eb45cda6aa659bca119ac7a5e16b46565e869d0030e3bd66981d?s=512&d=mm&r=g" } ], "author": { "name": "matoken", "url": "https://matoken.org/blog/author/matoken/", "avatar": "https://secure.gravatar.com/avatar/38f5f3b575c5eb45cda6aa659bca119ac7a5e16b46565e869d0030e3bd66981d?s=512&d=mm&r=g" }, "tags": [ "ActivityPub", "Bluesky", "snac", "Debian", "Linux", "trixie" ] }, { "id": "https://matoken.org/blog/?p=5024", "url": "https://matoken.org/blog/2025/12/19/implementing-post-bots/", "title": "snac\u306e\u81ea\u52d5\u6295\u7a3f\u6a5f\u80fd", "content_html": "
\n
\n
\n

\"snac

\n
\n
\n

\u3055\u304f\u3089\u306e\u30ca\u30ec\u30c3\u30b8\u306b\u8efd\u91cfActivityPub Server \u306esnac \u306b\u3064\u3044\u3066\u306e\u8a18\u4e8b\u3092\u5bc4\u7a3f\u3057\u307e\u3057\u305f\uff0e

\n
\n\n
\n

\u3053\u3053\u306b\u66f8\u304b\u306a\u304b\u3063\u305fsnac \u306e\u3053\u3068\u3092\u3044\u304f\u3064\u304b\u66f8\u3044\u3066\u3044\u3053\u3046\u3068\u601d\u3044\u307e\u3059\uff0e
\n\u4eca\u65e5\u306fsnac \u306ebot \u5411\u3051\u6295\u7a3f\u6a5f\u80fd\u306b\u3064\u3044\u3066\uff0e

\n
\n

\n
\n

bot \u3084\u30a2\u30ca\u30a6\u30f3\u30b9\u306a\u3069\u5411\u3051\u306e\u30a2\u30ab\u30a6\u30f3\u30c8\u3067\u81ea\u52d5\u6295\u7a3f\u3092\u3057\u305f\u3044\u3053\u3068\u304c\u3042\u308a\u307e\u3059\uff0e
\n\u4f8b\u3048\u3070\u3044\u307e\u8003\u3048\u3066\u3044\u308b\u306e\u306fCalDav \u304b\u3089\u4eca\u65e5\u306e\u30a4\u30d9\u30f3\u30c8\u3092\u6295\u7a3f\u3059\u308b\u30a2\u30ab\u30a6\u30f3\u30c8\uff0e\u73fe\u5728\u306fWebhook \u7d4c\u7531\u3067Discord \u306bpost \u3057\u305f\u308a\u3057\u3066\u3044\u307e\u3059\uff0e
\nsnac \u3067\u3082\u3044\u304f\u3064\u304b\u81ea\u52d5\u6295\u7a3f\u3059\u308b\u6a5f\u80fd\u304c\u3042\u308a\u307e\u3059\uff0e

\n
\n
\n
\n
\n

Implementing post bots

\n
\n
\n

snac makes very easy to post messages in a non-interactive manner. This example posts a string:

\n
\n
\n

uptime | snac note $SNAC_BASEDIR $SNAC_USER –

\n
\n
\n

You can setup a line like this from a crontab(5) or similar. Take note that you need a) command-line access to the same machine that hosts the snac instance, and b) write permissions to the storage directories and files.

\n
\n
\n

You can also post non-interactively using the Mastodon API and a command-line http tool like curl(1) or similar. This has the advantage that you can do it remotely from any host, anywhere; the only thing you need is an API Token. This is an example:

\n
\n
\n

curl -X POST https://$SNAC_HOST/api/v1/statuses \\
\n–header “Authorization: Bearer ${TOKEN}” -d “status=$(uptime)”

\n
\n
\n

You can obtain an API Token by connecting to the following URL:

\n
\n\n
\n
\n— man(1) \u3088\u308a\n
\n
\n
\n
\n
\n
\n
note basedir uid text [file file ... [-r inReplyTo [-d YYYYmmddHHMMSS]]]\n        Enqueues a Create + Note message to all followers. If the text argument is -e, the external editor defined by  the  EDITOR  environment  variable\n        will  be invoked to prepare a message; if it's - (a lonely hyphen), the post content will be read from stdin.  The rest of command line arguments\n        are treated as media files to be attached to the post. The LANG environment variable (if defined) is used as the post language. An  optional  URL\n        to  a  Fediverse post, prefixed by -r, can be specified for this note to be a reply to. If a date in YYYYmmddHHMMSS format is followed by -d, the\n        note is scheduled for that moment instead of immediately posted (this date must be in the same timezone the user has configured in the web UI).
\n
\n
\n
\n
\n
note_unlisted basedir uid text [file file ... [-r inReplyTo [-d YYYYmmddHHMMSS]]]\n        Like the previous one, but creates an \"unlisted\" (or \"quiet public\") post.
\n
\n
\n
\n
\n
note_mention basedir uid text [file file ... [-r inReplyTo [-d YYYYmmddHHMMSS]]]\n        Like the previous one, but creates a post only for accounts mentioned in the post body.
\n
\n
\n
\n
\n
block basedir instance_url
\n
\n
\n
\n
\n— man(1) \u3088\u308a\n
\n
\n
\n
\n
\n

snac note \u30b3\u30de\u30f3\u30c9\u3067\u306e\u6295\u7a3f

\n
\n
\n

snac \u306e\u52d5\u4f5c\u3057\u3066\u3044\u308b\u74b0\u5883\u3067\u5b9f\u884c\u3067\u304d\u308b\u306e\u3067\u3042\u308c\u3070\u304a\u624b\u8efd\u306asnac \u306enote \u30b3\u30de\u30f3\u30c9\u304c\u3042\u308a\u307e\u3059\uff0e
\nman(1) \u306b\u3042\u308b\u4f8b\u3092\u771f\u4f3c\u3057\u3066\u307f\u307e\u3059\uff0e

\n
\n
\n
\n
\n

uptime | snac note $SNAC_BASEDIR $SNAC_USER –

\n
\n
\n
\n
\n
\n
$ uptime | pee \"./snac note snac-test test -\" cat\n 23:32:36 up 4 days, 10:17,  1 user,  load average: 1.56, 1.90, 1.69\n23:32:36 [test] enqueue_message http://127.0.0.1:8001/test/p/1766154756.511450/Create\n8       /\ufffd
\n
\n
\n
\n

\u6295\u7a3f\u3092\u78ba\u8a8d\u3059\u308b\u3068\u3053\u3093\u306a\u611f\u3058\uff0e

\n
\n
\n

\"snac

\n
\n
\n

\u65e5\u672c\u8a9e\u3082\u305d\u306e\u307e\u307e\u3067ok \u3067\u3057\u305f\uff0e

\n
\n
\n

\"snac

\n
\n
\n

pfetch \u3092\u6d41\u3057\u8fbc\u3093\u3067\u307f\u308b\u3068\u3053\u3093\u306a\u611f\u3058\u3067\u6574\u5f62\u3092\u8003\u3048\u306a\u3044\u3068\u30c0\u30e1\u305d\u3046\uff0e

\n
\n
\n

\"snac

\n
\n
\n
\n
\n

curl \u3092\u4f7f\u3063\u3066API \u7d4c\u7531\u3067\u6295\u7a3f

\n
\n
\n

\u3053\u3061\u3089\u306f\u4e00\u822c\u7684\u306a\u30cd\u30c3\u30c8\u30ef\u30fc\u30af\u7d4c\u7531\u3067\u30ea\u30e2\u30fc\u30c8\u3067\u6295\u7a3f\u53ef\u80fd\u306a\u65b9\u6cd5\u3067\u3059\uff0etoken \u3092\u5165\u624b\u3057\u3066curl \u30b3\u30de\u30f3\u30c9\u3067\u6295\u7a3f\u3057\u307e\u3059\uff0e

\n
\n
\n

\u307e\u305a\u4ee5\u4e0b\u306e\u3088\u3046\u306aURL \u3067token \u3092\u53d6\u5f97\u3057\u307e\u3059\uff0e

\n
\n\n
\n

\u4ee5\u4e0b\u306e\u3088\u3046\u306a\u753b\u9762\u306b\u306a\u308b\u306e\u3067\u5bfe\u8c61\u30a2\u30ab\u30a6\u30f3\u30c8\u306e\u60c5\u5831\u3092\u5165\u624b\u3057\u307e\u3059\uff0e

\n
\n
\n

\"snac

\n
\n
\n

\u4ee5\u4e0b\u306e\u3088\u3046\u306a\u30c8\u30fc\u30af\u30f3\u304c\u53d6\u5f97\u3067\u304d\u308b\u306e\u3067\u30e1\u30e2\u3057\u307e\u3059\uff0e

\n
\n
\n
\n
\n

1f3ea50e9ab7cc85f5ff01b8f43fb1ae

\n
\n
\n
\n
\n

\u5f8c\u306fcurl \u306a\u3069\u3067\u4ee5\u4e0b\u306e\u3088\u3046\u306bPOST\uff0e
\njson \u3067\u8fd4\u308a\u5024\u304c\u5e30\u3063\u3066\u304d\u307e\u3059\uff0e

\n
\n
\n
\n
$ curl -X POST http://127.0.0.1:8001/api/v1/statuses --header \"Authorization: Bearer 1f3ea50e9ab7cc85f5ff01b8f43fb1ae\" -d \"status=$(uptime)\"\n{\n    \"id\": \"1766155742b0f5ed692a273ff5b6ef59b696ddde76\",\n    \"uri\": \"http://127.0.0.1:8001/test/p/1766155742.788170\",\n    \"url\": \"http://127.0.0.1:8001/test/p/1766155742.788170\",\n    \"account\": {\n        \"id\": \"488d5ffe15e31aa0be5002853e8006f7\",\n        \"username\": \"test\",\n        \"display_name\": \"test\",\n        \"discoverable\": true,\n        \"group\": false,\n        \"hide_collections\": false,\n        \"indexable\": true,\n        \"noindex\": false,\n        \"roles\": [\n        ],\n        \"acct\": \"test@127.0.0.1:8001\",\n        \"created_at\": \"2025-11-14T19:38:38Z\",\n        \"last_status_at\": \"2025-12-19\",\n        \"bot\": false,\n        \"note\": \"<br>\",\n        \"url\": \"http://127.0.0.1:8001/test\",\n        \"uri\": \"http://127.0.0.1:8001/test\",\n        \"avatar\": \"http://127.0.0.1:8001/susie.png\",\n        \"avatar_static\": \"http://127.0.0.1:8001/susie.png\",\n        \"header\": \"\",\n        \"header_static\": \"\",\n        \"emojis\": [\n        ],\n        \"locked\": false,\n        \"followers_count\": 0,\n        \"following_count\": 0,\n        \"statuses_count\": 0,\n        \"fields\": [\n        ]\n    },\n    \"created_at\": \"2025-12-19T14:49:02.000Z\",\n    \"content\": \"23:49:02 up 4 days, 10:34,  1 user,  load average: 1.48, 1.57, 1.68<br>\",\n    \"visibility\": \"public\",\n    \"sensitive\": false,\n    \"spoiler_text\": \"\",\n    \"media_attachments\": [\n    ],\n    \"mentions\": [\n    ],\n    \"tags\": [\n    ],\n    \"emojis\": [\n    ],\n    \"favourites_count\": 0,\n    \"favourited\": false,\n    \"reblogs_count\": 0,\n    \"reblogged\": false,\n    \"replies_count\": 0,\n    \"in_reply_to_id\": null,\n    \"in_reply_to_account_id\": null,\n    \"reblog\": null,\n    \"card\": null,\n    \"language\": \"en\",\n    \"filtered\": [\n    ],\n    \"muted\": false,\n    \"text\": \" 23:49:02 up 4 days, 10:34,  1 user,  load average: 1.48, 1.57, 1.68\",\n    \"edited_at\": null,\n    \"poll\": null,\n    \"bookmarked\": false,\n    \"pinned\": false\n}
\n
\n
\n
\n
\n", "content_text": "\u3055\u304f\u3089\u306e\u30ca\u30ec\u30c3\u30b8\u306b\u8efd\u91cfActivityPub Server \u306esnac \u306b\u3064\u3044\u3066\u306e\u8a18\u4e8b\u3092\u5bc4\u7a3f\u3057\u307e\u3057\u305f\uff0e\n\n\n\n\n\u3055\u304f\u3089\u30a4\u30f3\u30bf\u30fc\u30cd\u30c3\u30c8\u306e\u3055\u304f\u3089\u306e\u30ca\u30ec\u30c3\u30b8\u306bsnac\u306e\u8a18\u4e8b\u3092\u5bc4\u7a3f \u2013 matoken’s blog\n\n\n\n\n\u3053\u3053\u306b\u66f8\u304b\u306a\u304b\u3063\u305fsnac \u306e\u3053\u3068\u3092\u3044\u304f\u3064\u304b\u66f8\u3044\u3066\u3044\u3053\u3046\u3068\u601d\u3044\u307e\u3059\uff0e\n\u4eca\u65e5\u306fsnac \u306ebot \u5411\u3051\u6295\u7a3f\u6a5f\u80fd\u306b\u3064\u3044\u3066\uff0e\n\n\n\nbot \u3084\u30a2\u30ca\u30a6\u30f3\u30b9\u306a\u3069\u5411\u3051\u306e\u30a2\u30ab\u30a6\u30f3\u30c8\u3067\u81ea\u52d5\u6295\u7a3f\u3092\u3057\u305f\u3044\u3053\u3068\u304c\u3042\u308a\u307e\u3059\uff0e\n\u4f8b\u3048\u3070\u3044\u307e\u8003\u3048\u3066\u3044\u308b\u306e\u306fCalDav \u304b\u3089\u4eca\u65e5\u306e\u30a4\u30d9\u30f3\u30c8\u3092\u6295\u7a3f\u3059\u308b\u30a2\u30ab\u30a6\u30f3\u30c8\uff0e\u73fe\u5728\u306fWebhook \u7d4c\u7531\u3067Discord \u306bpost \u3057\u305f\u308a\u3057\u3066\u3044\u307e\u3059\uff0e\nsnac \u3067\u3082\u3044\u304f\u3064\u304b\u81ea\u52d5\u6295\u7a3f\u3059\u308b\u6a5f\u80fd\u304c\u3042\u308a\u307e\u3059\uff0e\n\n\n\n\nImplementing post bots\n\n\nsnac makes very easy to post messages in a non-interactive manner. This example posts a string:\n\n\nuptime | snac note $SNAC_BASEDIR $SNAC_USER –\n\n\nYou can setup a line like this from a crontab(5) or similar. Take note that you need a) command-line access to the same machine that hosts the snac instance, and b) write permissions to the storage directories and files.\n\n\nYou can also post non-interactively using the Mastodon API and a command-line http tool like curl(1) or similar. This has the advantage that you can do it remotely from any host, anywhere; the only thing you need is an API Token. This is an example:\n\n\ncurl -X POST https://$SNAC_HOST/api/v1/statuses \\\n–header “Authorization: Bearer ${TOKEN}” -d “status=$(uptime)”\n\n\nYou can obtain an API Token by connecting to the following URL:\n\n\nhttps://$SNAC_HOST/oauth/x-snac-get-token\n\n\n\n— man(1) \u3088\u308a\n\n\n\n\n\n\nnote basedir uid text [file file ... [-r inReplyTo [-d YYYYmmddHHMMSS]]]\n Enqueues a Create + Note message to all followers. If the text argument is -e, the external editor defined by the EDITOR environment variable\n will be invoked to prepare a message; if it's - (a lonely hyphen), the post content will be read from stdin. The rest of command line arguments\n are treated as media files to be attached to the post. The LANG environment variable (if defined) is used as the post language. An optional URL\n to a Fediverse post, prefixed by -r, can be specified for this note to be a reply to. If a date in YYYYmmddHHMMSS format is followed by -d, the\n note is scheduled for that moment instead of immediately posted (this date must be in the same timezone the user has configured in the web UI).\n\n\n\n\nnote_unlisted basedir uid text [file file ... [-r inReplyTo [-d YYYYmmddHHMMSS]]]\n Like the previous one, but creates an \"unlisted\" (or \"quiet public\") post.\n\n\n\n\nnote_mention basedir uid text [file file ... [-r inReplyTo [-d YYYYmmddHHMMSS]]]\n Like the previous one, but creates a post only for accounts mentioned in the post body.\n\n\n\n\nblock basedir instance_url\n\n\n\n\n— man(1) \u3088\u308a\n\n\n\n\n\nsnac note \u30b3\u30de\u30f3\u30c9\u3067\u306e\u6295\u7a3f\n\n\nsnac \u306e\u52d5\u4f5c\u3057\u3066\u3044\u308b\u74b0\u5883\u3067\u5b9f\u884c\u3067\u304d\u308b\u306e\u3067\u3042\u308c\u3070\u304a\u624b\u8efd\u306asnac \u306enote \u30b3\u30de\u30f3\u30c9\u304c\u3042\u308a\u307e\u3059\uff0e\nman(1) \u306b\u3042\u308b\u4f8b\u3092\u771f\u4f3c\u3057\u3066\u307f\u307e\u3059\uff0e\n\n\n\n\nuptime | snac note $SNAC_BASEDIR $SNAC_USER –\n\n\n\n\n\n$ uptime | pee \"./snac note snac-test test -\" cat\n 23:32:36 up 4 days, 10:17, 1 user, load average: 1.56, 1.90, 1.69\n23:32:36 [test] enqueue_message http://127.0.0.1:8001/test/p/1766154756.511450/Create\n8 /\ufffd\n\n\n\n\u6295\u7a3f\u3092\u78ba\u8a8d\u3059\u308b\u3068\u3053\u3093\u306a\u611f\u3058\uff0e\n\n\n\n\n\n\u65e5\u672c\u8a9e\u3082\u305d\u306e\u307e\u307e\u3067ok \u3067\u3057\u305f\uff0e\n\n\n\n\n\npfetch \u3092\u6d41\u3057\u8fbc\u3093\u3067\u307f\u308b\u3068\u3053\u3093\u306a\u611f\u3058\u3067\u6574\u5f62\u3092\u8003\u3048\u306a\u3044\u3068\u30c0\u30e1\u305d\u3046\uff0e\n\n\n\n\n\n\n\ncurl \u3092\u4f7f\u3063\u3066API \u7d4c\u7531\u3067\u6295\u7a3f\n\n\n\u3053\u3061\u3089\u306f\u4e00\u822c\u7684\u306a\u30cd\u30c3\u30c8\u30ef\u30fc\u30af\u7d4c\u7531\u3067\u30ea\u30e2\u30fc\u30c8\u3067\u6295\u7a3f\u53ef\u80fd\u306a\u65b9\u6cd5\u3067\u3059\uff0etoken \u3092\u5165\u624b\u3057\u3066curl \u30b3\u30de\u30f3\u30c9\u3067\u6295\u7a3f\u3057\u307e\u3059\uff0e\n\n\n\u307e\u305a\u4ee5\u4e0b\u306e\u3088\u3046\u306aURL \u3067token \u3092\u53d6\u5f97\u3057\u307e\u3059\uff0e\n\n\n\n\nhttps://$SNAC_HOST/oauth/x-snac-get-token\n\n\n\n\n\u4ee5\u4e0b\u306e\u3088\u3046\u306a\u753b\u9762\u306b\u306a\u308b\u306e\u3067\u5bfe\u8c61\u30a2\u30ab\u30a6\u30f3\u30c8\u306e\u60c5\u5831\u3092\u5165\u624b\u3057\u307e\u3059\uff0e\n\n\n\n\n\n\u4ee5\u4e0b\u306e\u3088\u3046\u306a\u30c8\u30fc\u30af\u30f3\u304c\u53d6\u5f97\u3067\u304d\u308b\u306e\u3067\u30e1\u30e2\u3057\u307e\u3059\uff0e\n\n\n\n\n1f3ea50e9ab7cc85f5ff01b8f43fb1ae\n\n\n\n\n\u5f8c\u306fcurl \u306a\u3069\u3067\u4ee5\u4e0b\u306e\u3088\u3046\u306bPOST\uff0e\njson \u3067\u8fd4\u308a\u5024\u304c\u5e30\u3063\u3066\u304d\u307e\u3059\uff0e\n\n\n\n$ curl -X POST http://127.0.0.1:8001/api/v1/statuses --header \"Authorization: Bearer 1f3ea50e9ab7cc85f5ff01b8f43fb1ae\" -d \"status=$(uptime)\"\n{\n \"id\": \"1766155742b0f5ed692a273ff5b6ef59b696ddde76\",\n \"uri\": \"http://127.0.0.1:8001/test/p/1766155742.788170\",\n \"url\": \"http://127.0.0.1:8001/test/p/1766155742.788170\",\n \"account\": {\n \"id\": \"488d5ffe15e31aa0be5002853e8006f7\",\n \"username\": \"test\",\n \"display_name\": \"test\",\n \"discoverable\": true,\n \"group\": false,\n \"hide_collections\": false,\n \"indexable\": true,\n \"noindex\": false,\n \"roles\": [\n ],\n \"acct\": \"test@127.0.0.1:8001\",\n \"created_at\": \"2025-11-14T19:38:38Z\",\n \"last_status_at\": \"2025-12-19\",\n \"bot\": false,\n \"note\": \"<br>\",\n \"url\": \"http://127.0.0.1:8001/test\",\n \"uri\": \"http://127.0.0.1:8001/test\",\n \"avatar\": \"http://127.0.0.1:8001/susie.png\",\n \"avatar_static\": \"http://127.0.0.1:8001/susie.png\",\n \"header\": \"\",\n \"header_static\": \"\",\n \"emojis\": [\n ],\n \"locked\": false,\n \"followers_count\": 0,\n \"following_count\": 0,\n \"statuses_count\": 0,\n \"fields\": [\n ]\n },\n \"created_at\": \"2025-12-19T14:49:02.000Z\",\n \"content\": \"23:49:02 up 4 days, 10:34, 1 user, load average: 1.48, 1.57, 1.68<br>\",\n \"visibility\": \"public\",\n \"sensitive\": false,\n \"spoiler_text\": \"\",\n \"media_attachments\": [\n ],\n \"mentions\": [\n ],\n \"tags\": [\n ],\n \"emojis\": [\n ],\n \"favourites_count\": 0,\n \"favourited\": false,\n \"reblogs_count\": 0,\n \"reblogged\": false,\n \"replies_count\": 0,\n \"in_reply_to_id\": null,\n \"in_reply_to_account_id\": null,\n \"reblog\": null,\n \"card\": null,\n \"language\": \"en\",\n \"filtered\": [\n ],\n \"muted\": false,\n \"text\": \" 23:49:02 up 4 days, 10:34, 1 user, load average: 1.48, 1.57, 1.68\",\n \"edited_at\": null,\n \"poll\": null,\n \"bookmarked\": false,\n \"pinned\": false\n}", "date_published": "2025-12-19T23:57:13+09:00", "date_modified": "2025-12-19T23:57:14+09:00", "authors": [ { "name": "matoken", "url": "https://matoken.org/blog/author/matoken/", "avatar": "https://secure.gravatar.com/avatar/38f5f3b575c5eb45cda6aa659bca119ac7a5e16b46565e869d0030e3bd66981d?s=512&d=mm&r=g" } ], "author": { "name": "matoken", "url": "https://matoken.org/blog/author/matoken/", "avatar": "https://secure.gravatar.com/avatar/38f5f3b575c5eb45cda6aa659bca119ac7a5e16b46565e869d0030e3bd66981d?s=512&d=mm&r=g" }, "tags": [ "ActivityPub", "snac", "Debian", "Linux", "trixie" ] }, { "id": "https://matoken.org/blog/?p=5007", "url": "https://matoken.org/blog/2025/12/18/snac-notifigcations/", "title": "snac\u306e\u901a\u77e5\u306b\u3064\u3044\u3066", "content_html": "
\n
\n
\n

\"snac

\n
\n
\n

\u3055\u304f\u3089\u306e\u30ca\u30ec\u30c3\u30b8\u306b\u8efd\u91cfActivityPub Server \u306esnac \u306b\u3064\u3044\u3066\u306e\u8a18\u4e8b\u3092\u5bc4\u7a3f\u3057\u307e\u3057\u305f\uff0e

\n
\n\n
\n

\u3053\u3053\u306b\u66f8\u304b\u306a\u304b\u3063\u305fsnac \u306e\u3053\u3068\u3092\u3044\u304f\u3064\u304b\u66f8\u3044\u3066\u3044\u3053\u3046\u3068\u601d\u3044\u307e\u3059\uff0e
\n\u4eca\u65e5\u306fsnac \u306e\u901a\u77e5\u306b\u3064\u3044\u3066\uff0e

\n
\n

\n
\n

snac \u306e\u901a\u77e5\u306f\u4ee5\u4e0b\u306e\u3088\u3046\u306b\u300cnotifications\u300d\u306e\u6a2a\u306b\u6570\u5b57\u3067\u901a\u77e5\u3055\u308c\u307e\u3059\uff0e\u300cnotifications\u300d\u30ea\u30f3\u30af\u3092\u30af\u30ea\u30c3\u30af\u3059\u308b\u3053\u3068\u3067\u8a73\u7d30\u304c\u8868\u793a\u3055\u308c\u307e\u3059\uff0e

\n
\n
\n

\"snac

\n
\n
\n

\u3057\u304b\u3057\u3053\u306e\u901a\u77e5\u306fsnac \u306e\u30da\u30fc\u30b8\u304c\u8aad\u307f\u8fbc\u307e\u308c\u305f\u30bf\u30a4\u30df\u30f3\u30b0\u306b\u306a\u3089\u306a\u3044\u3068\u901a\u77e5\u304c\u308f\u304b\u308a\u307e\u305b\u3093\uff0e
\n\u3057\u304b\u3057\u4ee3\u66ff\u306e\u901a\u77e5\u304c\u3044\u304f\u3064\u304b\u5b9f\u88c5\u3055\u308c\u3066\u3044\u307e\u3059\uff0e\u3053\u308c\u3089\u3092\u5229\u7528\u3059\u308b\u3053\u3068\u3067\u307b\u307c\u30ea\u30a2\u30eb\u30bf\u30a4\u30e0\u306a\u901a\u77e5\u304c\u53ef\u80fd\u3068\u306a\u308a\u307e\u3059\uff0e

\n
\n
\n
\n
\n

e-mail

\n
\n
\n

\u4e00\u822c\u7684\u306ae-mail \u3067\u3059\uff0e\u30b5\u30fc\u30d0\u30fc\u306e\u30e1\u30fc\u30eb\u30b7\u30b9\u30c6\u30e0\u304c\u8a2d\u5b9a\u6e08\u3067\u3042\u308c\u3070\u30e6\u30fc\u30b6\u30fc\u306e\u300cUser Settings…​\u300d\u304b\u3089\u300cEmail address for notifications:\u300d\u306b\u5b9b\u5148\u306ee-main address \u3092\u5165\u529b\u3059\u308b\u308b\u3053\u3068\u3067\u5229\u7528\u53ef\u80fd\u3067\u3059\uff0e
\n\u30b5\u30fc\u30d0\u30fc\u306e\u30e1\u30fc\u30eb\u30b7\u30b9\u30c6\u30e0\u306e\u8a2d\u5b9a\u304c\u3055\u308c\u3066\u3044\u306a\u304b\u3063\u305f\u308a\uff0c\u5916\u90e8\u306e\u30e1\u30fc\u30eb\u30b7\u30b9\u30c6\u30e0\u3092\u5229\u7528\u3057\u305f\u3044\u5834\u5408 server.json \u306e\u4ee5\u4e0b\u306e\u9805\u76ee\u3092\u8a2d\u5b9a\u3059\u308b\u3053\u3068\u3067\u3082\u30e1\u30fc\u30eb\u304c\u9001\u4fe1\u3067\u304d\u307e\u3059\uff0e

\n
\n
\n
\n
\n
\n
Email address for notifications\n        If this field is not empty, an email message will be sent to this address whenever a post written by you is liked, boosted or replied to.
\n
\n
\n
\n
\n— snac(1)\u3088\u308a\n
\n
\n
\n
\n
\n
\n
smtp_url    Since version 2.76, email notifications can be sent via direct connection to an SMTP server instead of the traditional behaviour of piping the mes\u2010\n            sage to /usr/sbin/sendmail.  Set this value to the SMTP url to be used for sending email notifications (for example, smtp://localhost). It may  in\u2010\n            clude a port number if it's not running on the usual one, like in smtp://mail.example.com:587.
\n
\n
\n
\n
\n
smtp_user
\n
\n
\n
\n
\n
smtp_password\n            To be filled if the SMTP server defined by the previous directive needs credentials.
\n
\n
\n
\n
\n— snac(8)\u3088\u308a\n
\n
\n
\n

\"snac

\n
\n
\n
\n
\n

Telegram \u3067\u901a\u77e5

\n
\n
\n

\u30a4\u30f3\u30b9\u30bf\u30f3\u30c8\u30e1\u30c3\u30bb\u30fc\u30b8\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306eTelegram \u306b\u3082\u5bfe\u5fdc\u3057\u3066\u3044\u307e\u3059\uff0e\u305f\u3060\uff0cTelegram bot \u3092\u4f5c\u6210\u3057\u3066\u5229\u7528\u3059\u308b\u5fc5\u8981\u304c\u3042\u308b\u306e\u3067\u671f\u8a2d\u5b9a\u304c\u5c11\u3057\u521d\u9762\u5012\u3067\u3059\uff0e

\n
\n
\n
\n
\n
\n
Telegram notifications\n        To  enable  notifications  via Telegram, fill the two provided fields (Bot API key and Chat id). You need to create both a Telegram channel and a\n        bot for this; the process is rather cumbersome but it's documented everywhere. The Bot API key is a long string of  alphanumeric  characters  and\n        the chat id is a big, negative number.
\n
\n
\n
\n
\n— snac(1)\u3088\u308a\n
\n
\n
\n

\u4ee5\u524dTelegram bot \u3092Nextcloud \u306eTOTP \u306e\u901a\u77e5\u8a2d\u5b9a\u306b\u5229\u7528\u3059\u308b\u305f\u3081\u306b\u66f8\u3044\u305f\u30a8\u30f3\u30c8\u30ea\u304c\u3042\u308a\u307e\u3059\uff0e

\n
\n\n
\n

Telegram bot \u304c\u4f5c\u6210\u3067\u304d\u305f\u3089\u5404\u30e6\u30fc\u30b6\u306e\u300cUser Settings…​\u300d\u306e\u300cTelegram notifications (bot key and chat id):\u300d\u306b\u8a2d\u5b9a\u3059\u308b\u3053\u3068\u3067\u5229\u7528\u3067\u304d\u307e\u3059\uff0e

\n
\n
\n
\n
\n

ntfy \u3067\u901a\u77e5

\n
\n
\n

OSS \u3067\u30bb\u30eb\u30d5\u30db\u30b9\u30c8\u53ef\u80fd\u3067\u30a6\u30a7\u30d6\u30d6\u30e9\u30a6\u30b6\u3084\u30b9\u30de\u30fc\u30c8\u30d5\u30a9\u30f3\u306b\u901a\u77e5\u304c\u3067\u304d\u308bntfy \u3068\u3044\u3046\u30b5\u30fc\u30d3\u30b9\u304c\u3042\u308a\u307e\u3059\uff0e\u3053\u308c\u3092\u5229\u7528\u3057\u3066snac \u306e\u901a\u77e5\u3092\u884c\u3046\u3053\u3068\u3082\u53ef\u80fd\u3067\u3059\uff0e

\n
\n\n
\n
\n
\n
\n
ntfy notifications\n        To  enable  notifications  via  ntfy  (both self-hosted or standard ntfy.sh server), fill the two provided fields (ntfy server/topic and, if pro\u2010\n        tected, the token).  You need to refer to the https://ntfy.sh web site for more information on this process.
\n
\n
\n
\n
\n— snac(1)\u3088\u308a\n
\n
\n
\n

\u30bb\u30eb\u30d5\u30db\u30b9\u30c8\u53ef\u80fd\u3067\u3059\u304c\uff0c\u3068\u308a\u3042\u3048\u305antfy.sh \u3092\u5229\u7528\u3057\u3066\u8a66\u3059\u3068\u826f\u3055\u305d\u3046\u3067\u3059\uff0e

\n
\n
\n

\u300cUser Settings…​\u300d\u306e\u300cntfy notifications (ntfy server and token):\u300d\u306b\u8a2d\u5b9a\u3059\u308b\u3053\u3068\u3067\u901a\u77e5\u3067\u304d\u308b\u3088\u3046\u306b\u306a\u308a\u307e\u3059\uff0e

\n
\n
\n
\n
\n

Webhook \u3067\u901a\u77e5

\n
\n
\n

\u8272\u3005\u306a\u30b5\u30fc\u30d3\u30b9\u304c\u5bfe\u5fdc\u3057\u3066\u3044\u308bWebhook \u3082\u5229\u7528\u53ef\u80fd\u3067\u3059\uff0e

\n
\n
\n
\n
\n
\n
Notify webhook\n        If this is set to an URL, an HTTP POST will be sent to it whenever a new notification happens (see the 'Webhook for notifications' section  below\n        for more information).
\n
\n
\n
\n
\n— snac(1)\u3088\u308a\n
\n
\n
\n

\u4f8b\u3048\u3070Discord \u3067\u3042\u308c\u3070\uff0c\u300c\u30c1\u30e3\u30f3\u30cd\u30eb\u306e\u7de8\u96c6\u300d→\u300c\u9023\u643a\u30b5\u30fc\u30d3\u30b9\u300d→\u300c\u30a6\u30a7\u30d6\u30d5\u30c3\u30af\u3092\u4f5c\u6210\u300d\u3067\u751f\u6210\u3055\u308c\u308bURL \u3092\u5229\u7528\u3057\u3066\u901a\u77e5\u3067\u304d\u307e\u3059\uff0e
\n\u3053\u308c\u3092\u300cUser Settings…​\u300d\u306e\u300cNotify webhook:\u300d\u306b\u5165\u529b\u3059\u308b\u3053\u3068\u3067\u901a\u77e5\u53ef\u80fd\u3067\u3059\uff0e

\n
\n
\n
\n
\n

mastodon \u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3067\u306e\u901a\u77e5

\n
\n
\n

snac \u306fmastodon API \u306b\u5bfe\u5fdc\u3057\u3066\u3044\u307e\u3059\uff0e\u305d\u306e\u305f\u3081mastodon \u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u304c\u5229\u7528\u53ef\u80fd\u3067\u3059\uff0e
\nmastodon \u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u901a\u77e5\u6a5f\u80fd\u3092\u4f7f\u3063\u3066\u901a\u77e5\u3092\u53d7\u3051\u308b\u3053\u3068\u304c\u53ef\u80fd\u3067\u3059\uff0e

\n
\n
\n
\n", "content_text": "\u3055\u304f\u3089\u306e\u30ca\u30ec\u30c3\u30b8\u306b\u8efd\u91cfActivityPub Server \u306esnac \u306b\u3064\u3044\u3066\u306e\u8a18\u4e8b\u3092\u5bc4\u7a3f\u3057\u307e\u3057\u305f\uff0e\n\n\n\n\n\u3055\u304f\u3089\u30a4\u30f3\u30bf\u30fc\u30cd\u30c3\u30c8\u306e\u3055\u304f\u3089\u306e\u30ca\u30ec\u30c3\u30b8\u306bsnac\u306e\u8a18\u4e8b\u3092\u5bc4\u7a3f \u2013 matoken’s blog\n\n\n\n\n\u3053\u3053\u306b\u66f8\u304b\u306a\u304b\u3063\u305fsnac \u306e\u3053\u3068\u3092\u3044\u304f\u3064\u304b\u66f8\u3044\u3066\u3044\u3053\u3046\u3068\u601d\u3044\u307e\u3059\uff0e\n\u4eca\u65e5\u306fsnac \u306e\u901a\u77e5\u306b\u3064\u3044\u3066\uff0e\n\n\n\nsnac \u306e\u901a\u77e5\u306f\u4ee5\u4e0b\u306e\u3088\u3046\u306b\u300cnotifications\u300d\u306e\u6a2a\u306b\u6570\u5b57\u3067\u901a\u77e5\u3055\u308c\u307e\u3059\uff0e\u300cnotifications\u300d\u30ea\u30f3\u30af\u3092\u30af\u30ea\u30c3\u30af\u3059\u308b\u3053\u3068\u3067\u8a73\u7d30\u304c\u8868\u793a\u3055\u308c\u307e\u3059\uff0e\n\n\n\n\n\n\u3057\u304b\u3057\u3053\u306e\u901a\u77e5\u306fsnac \u306e\u30da\u30fc\u30b8\u304c\u8aad\u307f\u8fbc\u307e\u308c\u305f\u30bf\u30a4\u30df\u30f3\u30b0\u306b\u306a\u3089\u306a\u3044\u3068\u901a\u77e5\u304c\u308f\u304b\u308a\u307e\u305b\u3093\uff0e\n\u3057\u304b\u3057\u4ee3\u66ff\u306e\u901a\u77e5\u304c\u3044\u304f\u3064\u304b\u5b9f\u88c5\u3055\u308c\u3066\u3044\u307e\u3059\uff0e\u3053\u308c\u3089\u3092\u5229\u7528\u3059\u308b\u3053\u3068\u3067\u307b\u307c\u30ea\u30a2\u30eb\u30bf\u30a4\u30e0\u306a\u901a\u77e5\u304c\u53ef\u80fd\u3068\u306a\u308a\u307e\u3059\uff0e\n\n\n\n\ne-mail\n\n\n\u4e00\u822c\u7684\u306ae-mail \u3067\u3059\uff0e\u30b5\u30fc\u30d0\u30fc\u306e\u30e1\u30fc\u30eb\u30b7\u30b9\u30c6\u30e0\u304c\u8a2d\u5b9a\u6e08\u3067\u3042\u308c\u3070\u30e6\u30fc\u30b6\u30fc\u306e\u300cUser Settings…​\u300d\u304b\u3089\u300cEmail address for notifications:\u300d\u306b\u5b9b\u5148\u306ee-main address \u3092\u5165\u529b\u3059\u308b\u308b\u3053\u3068\u3067\u5229\u7528\u53ef\u80fd\u3067\u3059\uff0e\n\u30b5\u30fc\u30d0\u30fc\u306e\u30e1\u30fc\u30eb\u30b7\u30b9\u30c6\u30e0\u306e\u8a2d\u5b9a\u304c\u3055\u308c\u3066\u3044\u306a\u304b\u3063\u305f\u308a\uff0c\u5916\u90e8\u306e\u30e1\u30fc\u30eb\u30b7\u30b9\u30c6\u30e0\u3092\u5229\u7528\u3057\u305f\u3044\u5834\u5408 server.json \u306e\u4ee5\u4e0b\u306e\u9805\u76ee\u3092\u8a2d\u5b9a\u3059\u308b\u3053\u3068\u3067\u3082\u30e1\u30fc\u30eb\u304c\u9001\u4fe1\u3067\u304d\u307e\u3059\uff0e\n\n\n\n\n\nEmail address for notifications\n If this field is not empty, an email message will be sent to this address whenever a post written by you is liked, boosted or replied to.\n\n\n\n\n— snac(1)\u3088\u308a\n\n\n\n\n\n\nsmtp_url Since version 2.76, email notifications can be sent via direct connection to an SMTP server instead of the traditional behaviour of piping the mes\u2010\n sage to /usr/sbin/sendmail. Set this value to the SMTP url to be used for sending email notifications (for example, smtp://localhost). It may in\u2010\n clude a port number if it's not running on the usual one, like in smtp://mail.example.com:587.\n\n\n\n\nsmtp_user\n\n\n\n\nsmtp_password\n To be filled if the SMTP server defined by the previous directive needs credentials.\n\n\n\n\n— snac(8)\u3088\u308a\n\n\n\n\n\n\n\n\nTelegram \u3067\u901a\u77e5\n\n\n\u30a4\u30f3\u30b9\u30bf\u30f3\u30c8\u30e1\u30c3\u30bb\u30fc\u30b8\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306eTelegram \u306b\u3082\u5bfe\u5fdc\u3057\u3066\u3044\u307e\u3059\uff0e\u305f\u3060\uff0cTelegram bot \u3092\u4f5c\u6210\u3057\u3066\u5229\u7528\u3059\u308b\u5fc5\u8981\u304c\u3042\u308b\u306e\u3067\u671f\u8a2d\u5b9a\u304c\u5c11\u3057\u521d\u9762\u5012\u3067\u3059\uff0e\n\n\n\n\n\nTelegram notifications\n To enable notifications via Telegram, fill the two provided fields (Bot API key and Chat id). You need to create both a Telegram channel and a\n bot for this; the process is rather cumbersome but it's documented everywhere. The Bot API key is a long string of alphanumeric characters and\n the chat id is a big, negative number.\n\n\n\n\n— snac(1)\u3088\u308a\n\n\n\n\u4ee5\u524dTelegram bot \u3092Nextcloud \u306eTOTP \u306e\u901a\u77e5\u8a2d\u5b9a\u306b\u5229\u7528\u3059\u308b\u305f\u3081\u306b\u66f8\u3044\u305f\u30a8\u30f3\u30c8\u30ea\u304c\u3042\u308a\u307e\u3059\uff0e\n\n\n\n\nNextcloud 14 \u306e Telegram \u3092\u4f7f\u3063\u305f2\u8981\u7d20\u8a8d\u8a3c \u2013 matoken’s blog\n\n\n\n\nTelegram bot \u304c\u4f5c\u6210\u3067\u304d\u305f\u3089\u5404\u30e6\u30fc\u30b6\u306e\u300cUser Settings…​\u300d\u306e\u300cTelegram notifications (bot key and chat id):\u300d\u306b\u8a2d\u5b9a\u3059\u308b\u3053\u3068\u3067\u5229\u7528\u3067\u304d\u307e\u3059\uff0e\n\n\n\n\nntfy \u3067\u901a\u77e5\n\n\nOSS \u3067\u30bb\u30eb\u30d5\u30db\u30b9\u30c8\u53ef\u80fd\u3067\u30a6\u30a7\u30d6\u30d6\u30e9\u30a6\u30b6\u3084\u30b9\u30de\u30fc\u30c8\u30d5\u30a9\u30f3\u306b\u901a\u77e5\u304c\u3067\u304d\u308bntfy \u3068\u3044\u3046\u30b5\u30fc\u30d3\u30b9\u304c\u3042\u308a\u307e\u3059\uff0e\u3053\u308c\u3092\u5229\u7528\u3057\u3066snac \u306e\u901a\u77e5\u3092\u884c\u3046\u3053\u3068\u3082\u53ef\u80fd\u3067\u3059\uff0e\n\n\n\n\nntfy.sh | Send push notifications to your phone via PUT/POST\n\n\n\n\n\n\n\nntfy notifications\n To enable notifications via ntfy (both self-hosted or standard ntfy.sh server), fill the two provided fields (ntfy server/topic and, if pro\u2010\n tected, the token). You need to refer to the https://ntfy.sh web site for more information on this process.\n\n\n\n\n— snac(1)\u3088\u308a\n\n\n\n\u30bb\u30eb\u30d5\u30db\u30b9\u30c8\u53ef\u80fd\u3067\u3059\u304c\uff0c\u3068\u308a\u3042\u3048\u305antfy.sh \u3092\u5229\u7528\u3057\u3066\u8a66\u3059\u3068\u826f\u3055\u305d\u3046\u3067\u3059\uff0e\n\n\n\u300cUser Settings…​\u300d\u306e\u300cntfy notifications (ntfy server and token):\u300d\u306b\u8a2d\u5b9a\u3059\u308b\u3053\u3068\u3067\u901a\u77e5\u3067\u304d\u308b\u3088\u3046\u306b\u306a\u308a\u307e\u3059\uff0e\n\n\n\n\nWebhook \u3067\u901a\u77e5\n\n\n\u8272\u3005\u306a\u30b5\u30fc\u30d3\u30b9\u304c\u5bfe\u5fdc\u3057\u3066\u3044\u308bWebhook \u3082\u5229\u7528\u53ef\u80fd\u3067\u3059\uff0e\n\n\n\n\n\nNotify webhook\n If this is set to an URL, an HTTP POST will be sent to it whenever a new notification happens (see the 'Webhook for notifications' section below\n for more information).\n\n\n\n\n— snac(1)\u3088\u308a\n\n\n\n\u4f8b\u3048\u3070Discord \u3067\u3042\u308c\u3070\uff0c\u300c\u30c1\u30e3\u30f3\u30cd\u30eb\u306e\u7de8\u96c6\u300d→\u300c\u9023\u643a\u30b5\u30fc\u30d3\u30b9\u300d→\u300c\u30a6\u30a7\u30d6\u30d5\u30c3\u30af\u3092\u4f5c\u6210\u300d\u3067\u751f\u6210\u3055\u308c\u308bURL \u3092\u5229\u7528\u3057\u3066\u901a\u77e5\u3067\u304d\u307e\u3059\uff0e\n\u3053\u308c\u3092\u300cUser Settings…​\u300d\u306e\u300cNotify webhook:\u300d\u306b\u5165\u529b\u3059\u308b\u3053\u3068\u3067\u901a\u77e5\u53ef\u80fd\u3067\u3059\uff0e\n\n\n\n\nmastodon \u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3067\u306e\u901a\u77e5\n\n\nsnac \u306fmastodon API \u306b\u5bfe\u5fdc\u3057\u3066\u3044\u307e\u3059\uff0e\u305d\u306e\u305f\u3081mastodon \u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u304c\u5229\u7528\u53ef\u80fd\u3067\u3059\uff0e\nmastodon \u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u901a\u77e5\u6a5f\u80fd\u3092\u4f7f\u3063\u3066\u901a\u77e5\u3092\u53d7\u3051\u308b\u3053\u3068\u304c\u53ef\u80fd\u3067\u3059\uff0e", "date_published": "2025-12-18T20:28:14+09:00", "date_modified": "2025-12-18T20:28:15+09:00", "authors": [ { "name": "matoken", "url": "https://matoken.org/blog/author/matoken/", "avatar": "https://secure.gravatar.com/avatar/38f5f3b575c5eb45cda6aa659bca119ac7a5e16b46565e869d0030e3bd66981d?s=512&d=mm&r=g" } ], "author": { "name": "matoken", "url": "https://matoken.org/blog/author/matoken/", "avatar": "https://secure.gravatar.com/avatar/38f5f3b575c5eb45cda6aa659bca119ac7a5e16b46565e869d0030e3bd66981d?s=512&d=mm&r=g" }, "tags": [ "ActivityPub", "notification", "snac", "Debian", "Linux", "trixie" ] }, { "id": "https://matoken.org/blog/?p=4987", "url": "https://matoken.org/blog/2025/12/17/snac-theme/", "title": "snac\u306etheme\u3092\u8a2d\u5b9a", "content_html": "
\n

\"snac

\n
\n
\n

\u3055\u304f\u3089\u306e\u30ca\u30ec\u30c3\u30b8\u306b\u8efd\u91cfActivityPub Server \u306esnac \u306b\u3064\u3044\u3066\u306e\u8a18\u4e8b\u3092\u5bc4\u7a3f\u3057\u307e\u3057\u305f\uff0e

\n
\n
\n\n
\n
\n

\u3053\u3053\u306b\u66f8\u304b\u306a\u304b\u3063\u305fsnac \u306e\u3053\u3068\u3092\u3044\u304f\u3064\u304b\u66f8\u3044\u3066\u3044\u3053\u3046\u3068\u601d\u3044\u307e\u3059\uff0e
\n\u4eca\u65e5\u306fsnac \u306etheme \u5909\u66f4\uff0e

\n
\n

\n
\n

snac \u306fCSS \u30d5\u30a1\u30a4\u30eb\u3092\u7de8\u96c6\u3059\u308b\u3053\u3068\u3067\u30c6\u30fc\u30de\u3092\u8a2d\u5b9a\u3059\u308b\u3053\u3068\u304c\u51fa\u6765\u307e\u3059\uff0e
\nCSS \u30d5\u30a1\u30a4\u30eb\u306f2\u7a2e\u985e\u3042\u308a\uff0c\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u5168\u4f53\u306e\u30b9\u30bf\u30a4\u30eb\u3092\u8a2d\u5b9a\u3059\u308b\uff0c {basedir}/style.css \u3068\uff0c\u5404\u30e6\u30fc\u30b6\u30fc\u7528\u306e\u30d7\u30e9\u30a4\u30d9\u30fc\u30c8CSS\u30d5\u30a1\u30a4\u30eb\u306e {basedir}/user/{\u30e6\u30fc\u30b6\u30fc\u540d}/static/style.css \u3067\u3059\uff0e

\n
\n
\n\n\n\n\n\n
\n
Tip
\n
\n
\n

\u624b\u5143\u306esnac 2.8.5 \u3067\u8a66\u3057\u305f\u3068\u3053\u308d\uff0c\u5404\u30e6\u30fc\u30b6\u30fc\u306e\u30d7\u30e9\u30a4\u30d9\u30fc\u30c8CSS\u30d5\u30a1\u30a4\u30eb\u306f\u30ed\u30b0\u30a4\u30f3\u3057\u305f\u72b6\u614b\u3067\u306a\u3044\u3068\u52b9\u304b\u306a\u3044\u3088\u3046\u3067\u3059\uff0e
\n\u3064\u307e\u308a\uff0c\u5404\u30e6\u30fc\u30b6\u30fc\u306e\u516c\u958b\u30da\u30fc\u30b8\u306f\u30b0\u30ed\u30fc\u30d0\u30eb\u8a2d\u5b9a\u304c\u53cd\u6620\u3055\u308c\u307e\u3059\uff0e
\n\u305d\u3057\u3066\uff0c\u8a2d\u5b9a\u306b\u306ftheme \u30d5\u30a1\u30a4\u30eb\u3092\u8a72\u5f53\u5834\u6240\u306b\u8a2d\u5b9a\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u304c\uff0c\u30a6\u30a7\u30d6\u4e0a\u304b\u3089\u306f\u51fa\u6765\u306a\u3044\u306e\u3067\u7ba1\u7406\u8005\u306b\u304a\u9858\u3044\u3059\u308b\u306a\u3069\u306e\u624b\u9593\u304c\u304b\u304b\u308a\u307e\u3059\uff0e

\n
\n
\n
\n
\n

\u81ea\u5206\u3067\u8a2d\u5b9a\u3057\u306a\u304f\u3066\u3082\uff0c README.md \u306e Incredibly awesome CSS themes for snac \u90e8\u5206\u306b\u3044\u304f\u3064\u304b\u306etheme \u304c\u7d39\u4ecb\u3055\u308c\u3066\u3044\u308b\u306e\u3067\u3053\u308c\u3092\u4f7f\u308f\u305b\u3066\u3082\u3089\u3063\u305f\u308a\u305d\u308c\u3092\u5143\u306b\u30ab\u30b9\u30bf\u30de\u30a4\u30ba\u3059\u308b\u306e\u3067\u3082\u826f\u3055\u305d\u3046\u3067\u3059\uff0e

\n
\n
\n
\n
$ grep -A5 'Incredibly awesome CSS themes for snac' README.md\n## Incredibly awesome CSS themes for snac\n\n- [A compilation of themes for snac (by \u0412\u043e )](https://codeberg.org/voron/snac-style).\n- [A cool, elegant theme (by Haijo7)](https://codeberg.org/Haijo7/snac-custom-css).\n- [A terminal-like theme (by Tetra)](https://codeberg.org/ERROR404NULLNOTFOUND/snac-terminal-theme).
\n
\n
\n
\n

\u4ee5\u4e0b\u306f Pika \u3068\u3044\u3046theme \u3092\u8a2d\u5b9a\u3057\u305f\u4f8b\u3067\u3059\uff0e3\u30da\u30a4\u30f3\u306b\u306a\u308a\uff0cPC\u7b49\u306e\u6a2a\u9577\u753b\u9762\u3067\u306e\u64cd\u4f5c\u6027\u304c\u826f\u3055\u305d\u3046\u3067\u3059\uff0e

\n
\n
\n

\"snac

\n
\n", "content_text": "\u3055\u304f\u3089\u306e\u30ca\u30ec\u30c3\u30b8\u306b\u8efd\u91cfActivityPub Server \u306esnac \u306b\u3064\u3044\u3066\u306e\u8a18\u4e8b\u3092\u5bc4\u7a3f\u3057\u307e\u3057\u305f\uff0e\n\n\n\n\n\u3055\u304f\u3089\u30a4\u30f3\u30bf\u30fc\u30cd\u30c3\u30c8\u306e\u3055\u304f\u3089\u306e\u30ca\u30ec\u30c3\u30b8\u306bsnac\u306e\u8a18\u4e8b\u3092\u5bc4\u7a3f \u2013 matoken’s blog\n\n\n\n\n\u3053\u3053\u306b\u66f8\u304b\u306a\u304b\u3063\u305fsnac \u306e\u3053\u3068\u3092\u3044\u304f\u3064\u304b\u66f8\u3044\u3066\u3044\u3053\u3046\u3068\u601d\u3044\u307e\u3059\uff0e\n\u4eca\u65e5\u306fsnac \u306etheme \u5909\u66f4\uff0e\n\n\n\nsnac \u306fCSS \u30d5\u30a1\u30a4\u30eb\u3092\u7de8\u96c6\u3059\u308b\u3053\u3068\u3067\u30c6\u30fc\u30de\u3092\u8a2d\u5b9a\u3059\u308b\u3053\u3068\u304c\u51fa\u6765\u307e\u3059\uff0e\nCSS \u30d5\u30a1\u30a4\u30eb\u306f2\u7a2e\u985e\u3042\u308a\uff0c\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u5168\u4f53\u306e\u30b9\u30bf\u30a4\u30eb\u3092\u8a2d\u5b9a\u3059\u308b\uff0c {basedir}/style.css \u3068\uff0c\u5404\u30e6\u30fc\u30b6\u30fc\u7528\u306e\u30d7\u30e9\u30a4\u30d9\u30fc\u30c8CSS\u30d5\u30a1\u30a4\u30eb\u306e {basedir}/user/{\u30e6\u30fc\u30b6\u30fc\u540d}/static/style.css \u3067\u3059\uff0e\n\n\n\n\n\nTip\n\n\n\n\u624b\u5143\u306esnac 2.8.5 \u3067\u8a66\u3057\u305f\u3068\u3053\u308d\uff0c\u5404\u30e6\u30fc\u30b6\u30fc\u306e\u30d7\u30e9\u30a4\u30d9\u30fc\u30c8CSS\u30d5\u30a1\u30a4\u30eb\u306f\u30ed\u30b0\u30a4\u30f3\u3057\u305f\u72b6\u614b\u3067\u306a\u3044\u3068\u52b9\u304b\u306a\u3044\u3088\u3046\u3067\u3059\uff0e\n\u3064\u307e\u308a\uff0c\u5404\u30e6\u30fc\u30b6\u30fc\u306e\u516c\u958b\u30da\u30fc\u30b8\u306f\u30b0\u30ed\u30fc\u30d0\u30eb\u8a2d\u5b9a\u304c\u53cd\u6620\u3055\u308c\u307e\u3059\uff0e\n\u305d\u3057\u3066\uff0c\u8a2d\u5b9a\u306b\u306ftheme \u30d5\u30a1\u30a4\u30eb\u3092\u8a72\u5f53\u5834\u6240\u306b\u8a2d\u5b9a\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u304c\uff0c\u30a6\u30a7\u30d6\u4e0a\u304b\u3089\u306f\u51fa\u6765\u306a\u3044\u306e\u3067\u7ba1\u7406\u8005\u306b\u304a\u9858\u3044\u3059\u308b\u306a\u3069\u306e\u624b\u9593\u304c\u304b\u304b\u308a\u307e\u3059\uff0e\n\n\n\n\n\n\n\u81ea\u5206\u3067\u8a2d\u5b9a\u3057\u306a\u304f\u3066\u3082\uff0c README.md \u306e Incredibly awesome CSS themes for snac \u90e8\u5206\u306b\u3044\u304f\u3064\u304b\u306etheme \u304c\u7d39\u4ecb\u3055\u308c\u3066\u3044\u308b\u306e\u3067\u3053\u308c\u3092\u4f7f\u308f\u305b\u3066\u3082\u3089\u3063\u305f\u308a\u305d\u308c\u3092\u5143\u306b\u30ab\u30b9\u30bf\u30de\u30a4\u30ba\u3059\u308b\u306e\u3067\u3082\u826f\u3055\u305d\u3046\u3067\u3059\uff0e\n\n\n\n$ grep -A5 'Incredibly awesome CSS themes for snac' README.md\n## Incredibly awesome CSS themes for snac\n\n- [A compilation of themes for snac (by \u0412\u043e )](https://codeberg.org/voron/snac-style).\n- [A cool, elegant theme (by Haijo7)](https://codeberg.org/Haijo7/snac-custom-css).\n- [A terminal-like theme (by Tetra)](https://codeberg.org/ERROR404NULLNOTFOUND/snac-terminal-theme).\n\n\n\n\u4ee5\u4e0b\u306f Pika \u3068\u3044\u3046theme \u3092\u8a2d\u5b9a\u3057\u305f\u4f8b\u3067\u3059\uff0e3\u30da\u30a4\u30f3\u306b\u306a\u308a\uff0cPC\u7b49\u306e\u6a2a\u9577\u753b\u9762\u3067\u306e\u64cd\u4f5c\u6027\u304c\u826f\u3055\u305d\u3046\u3067\u3059\uff0e", "date_published": "2025-12-17T21:04:10+09:00", "date_modified": "2026-02-19T05:24:17+09:00", "authors": [ { "name": "matoken", "url": "https://matoken.org/blog/author/matoken/", "avatar": "https://secure.gravatar.com/avatar/38f5f3b575c5eb45cda6aa659bca119ac7a5e16b46565e869d0030e3bd66981d?s=512&d=mm&r=g" } ], "author": { "name": "matoken", "url": "https://matoken.org/blog/author/matoken/", "avatar": "https://secure.gravatar.com/avatar/38f5f3b575c5eb45cda6aa659bca119ac7a5e16b46565e869d0030e3bd66981d?s=512&d=mm&r=g" }, "tags": [ "ActivityPub", "snac", "theme", "Debian", "Linux", "trixie" ] }, { "id": "https://matoken.org/blog/?p=4973", "url": "https://matoken.org/blog/2025/12/16/snac-welcome-page-costomsetting/", "title": "snac\u306eWelcome page\u3092\u8a2d\u5b9a\u30d5\u30a1\u30a4\u30eb\u3067\u30ab\u30b9\u30bf\u30de\u30a4\u30ba", "content_html": "
\n

\"snac

\n
\n
\n

\u3055\u304f\u3089\u306e\u30ca\u30ec\u30c3\u30b8\u306b\u8efd\u91cfActivityPub Server \u306esnac \u306b\u3064\u3044\u3066\u306e\u8a18\u4e8b\u3092\u5bc4\u7a3f\u3057\u307e\u3057\u305f\uff0e

\n
\n
\n\n
\n
\n

\u3053\u3053\u306b\u66f8\u304b\u306a\u304b\u3063\u305fsnac \u306e\u3053\u3068\u3092\u3044\u304f\u3064\u304b\u66f8\u3044\u3066\u3044\u3053\u3046\u3068\u601d\u3044\u307e\u3059\uff0e
\n\u4eca\u65e5\u306fsnac \u3067\u306eWelcome page\u306e\u30ab\u30b9\u30bf\u30de\u30a4\u30ba\u306b\u3064\u3044\u3066\u305d\u306e2\uff0e
\n\u4ee5\u524d\u306e\u30ab\u30b9\u30bf\u30de\u30a4\u30ba\u3067\u306fhtml \u30d5\u30a1\u30a4\u30eb\u306e\u66f8\u304d\u63db\u3048\u3092\u884c\u3044\u307e\u3057\u305f\u304c\u4eca\u56de\u306f\u8a2d\u5b9a\u30d5\u30a1\u30a4\u30eb\u3067\u306e\u66f8\u304d\u63db\u3048\u3067\u3059\uff0e

\n
\n
\n\n
\n

\n
\n

snac \u306etop page \u306f\u4ee5\u4e0b\u306e\u3088\u3046\u306a\u6328\u62f6\u30da\u30fc\u30b8\u304c\u8868\u793a\u3055\u308c\u307e\u3059\uff0e greeting.html \u30d5\u30a1\u30a4\u30eb\u3092\u66f8\u304d\u63db\u3048\u308b\u3053\u3068\u3067\u3053\u306e\u30da\u30fc\u30b8\u3092\u30ab\u30b9\u30bf\u30de\u30a4\u30ba\u51fa\u6765\u307e\u3059\u304c\uff0c\u4ed6\u306b\u3082\u30b5\u30fc\u30d0\u30fc\u8a2d\u5b9a\u30d5\u30a1\u30a4\u30eb\u306e server.json \u3067\u3082\u30ab\u30b9\u30bf\u30de\u30a4\u30ba\u9805\u76ee\u304c\u3042\u308a\u307e\u3059\uff0e

\n
\n
\n
\n
$ w3m -dump https://snac.kagolug.org/\nsnac.kagolug.org is a Fediverse instance that uses the ActivityPub protocol. In\nother words, users at this host can communicate with people that use software\nlike Mastodon, Pleroma, Friendica, etc. all around the world.\n\nThis server runs the snac software and there is no automatic sign-up process.\n\nThe following users are part of this community:\n\n    @info@snac.kagolug.org (info)\n    @matoken@snac.kagolug.org (matoken)\n\nThis site is powered by snac.
\n
\n
\n
\n

\"snac

\n
\n
\n

show_instance_timeline \u3053\u308c\u3092 true \u306b\u8a2d\u5b9a\u3059\u308b\u3068Welcome page \u306b\u6700\u65b0\u306e\u30e6\u30fc\u30b6\u30fc\u304c\u6295\u7a3f\u3057\u305f\u30bf\u30a4\u30e0\u30e9\u30a4\u30f3\u304c\u8868\u793a\u3055\u308c\u308b\u3088\u3046\u306b\u306a\u308a\u307e\u3059\uff0e
\n\u307e\u305f\uff0c\u4ee5\u4e0b\u306e\u8a2d\u5b9a\u9805\u76ee\u304c\u8a2d\u5b9a\u3055\u308c\u3066\u3044\u305f\u5834\u5408\u305d\u308c\u3082\u8868\u793a\u3055\u308c\u307e\u3059\uff0e

\n
\n
\n

admin_email
\n\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u7ba1\u7406\u8005\u306e\u96fb\u5b50\u30e1\u30fc\u30eb\u30a2\u30c9\u30ec\u30b9

\n
\n
\n

admin_account
\n\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u7ba1\u7406\u8005\u306e\u30a2\u30ab\u30a6\u30f3\u30c8

\n
\n
\n

title
\n\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u306e\u30bf\u30a4\u30c8\u30eb

\n
\n
\n

short_description
\n\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u306b\u5bfe\u3059\u308b\u77ed\u3044\u8aac\u660e

\n
\n
\n

short_description_raw
\nshort_description \u3092\u751f\u306e\u6587\u5b57\u5217\u3068\u3057\u3066\u89e3\u91c8\u3059\u308b\u304b\uff0cHTML \u306b\u5909\u63db\u3059\u308b\u304b

\n
\n
\n

\u4f8b\u3048\u3070\u3053\u306e\u69d8\u306b\u8a2d\u5b9a\u3059\u308b\u3068\uff0c

\n
\n
\n
\n
$ grep -A5 show_instance_timeline snac-data/server.json\n    \"show_instance_timeline\": true,\n    \"admin_email\": \"\",\n    \"admin_account\": \"matoken\",\n    \"title\": \"🐈🐈🐈\",\n    \"short_description\": \"matoken\u306e\u500b\u4ebaActivityPub \u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u3067\u3059\uff0e\",\n    \"short_description_raw\": false,
\n
\n
\n
\n

\u3053\u3093\u306a\u611f\u3058\u306b\u306a\u308a\u307e\u3057\u305f\uff0e

\n
\n
\n

\"snac

\n
\n
\n

\u6ce8\u610f\u70b9\u3068\u3057\u3066\uff0cshow_instance_timeline \u3092 true \u306b\u3059\u308b\u3068 greeting.html \u306f\u7121\u8996\u3055\u308c\u308b\u3088\u3046\u3067\u3059\uff0e\u7528\u9014\u3084\u597d\u307f\u306b\u5408\u308f\u305b\u3066\u3069\u3061\u3089\u304b\u3092\u5229\u7528\u3059\u308b\u611f\u3058\u3067\u3057\u3087\u3046\u304b\uff0e

\n
\n", "content_text": "\u3055\u304f\u3089\u306e\u30ca\u30ec\u30c3\u30b8\u306b\u8efd\u91cfActivityPub Server \u306esnac \u306b\u3064\u3044\u3066\u306e\u8a18\u4e8b\u3092\u5bc4\u7a3f\u3057\u307e\u3057\u305f\uff0e\n\n\n\n\n\u3055\u304f\u3089\u30a4\u30f3\u30bf\u30fc\u30cd\u30c3\u30c8\u306e\u3055\u304f\u3089\u306e\u30ca\u30ec\u30c3\u30b8\u306bsnac\u306e\u8a18\u4e8b\u3092\u5bc4\u7a3f \u2013 matoken’s blog\n\n\n\n\n\u3053\u3053\u306b\u66f8\u304b\u306a\u304b\u3063\u305fsnac \u306e\u3053\u3068\u3092\u3044\u304f\u3064\u304b\u66f8\u3044\u3066\u3044\u3053\u3046\u3068\u601d\u3044\u307e\u3059\uff0e\n\u4eca\u65e5\u306fsnac \u3067\u306eWelcome page\u306e\u30ab\u30b9\u30bf\u30de\u30a4\u30ba\u306b\u3064\u3044\u3066\u305d\u306e2\uff0e\n\u4ee5\u524d\u306e\u30ab\u30b9\u30bf\u30de\u30a4\u30ba\u3067\u306fhtml \u30d5\u30a1\u30a4\u30eb\u306e\u66f8\u304d\u63db\u3048\u3092\u884c\u3044\u307e\u3057\u305f\u304c\u4eca\u56de\u306f\u8a2d\u5b9a\u30d5\u30a1\u30a4\u30eb\u3067\u306e\u66f8\u304d\u63db\u3048\u3067\u3059\uff0e\n\n\n\n\nsnac\u306eWelcome page\u306ehtml\u30d5\u30a1\u30a4\u30eb\u30ab\u30b9\u30bf\u30de\u30a4\u30ba \u2013 matoken’s blog\n\n\n\n\n\nsnac \u306etop page \u306f\u4ee5\u4e0b\u306e\u3088\u3046\u306a\u6328\u62f6\u30da\u30fc\u30b8\u304c\u8868\u793a\u3055\u308c\u307e\u3059\uff0e greeting.html \u30d5\u30a1\u30a4\u30eb\u3092\u66f8\u304d\u63db\u3048\u308b\u3053\u3068\u3067\u3053\u306e\u30da\u30fc\u30b8\u3092\u30ab\u30b9\u30bf\u30de\u30a4\u30ba\u51fa\u6765\u307e\u3059\u304c\uff0c\u4ed6\u306b\u3082\u30b5\u30fc\u30d0\u30fc\u8a2d\u5b9a\u30d5\u30a1\u30a4\u30eb\u306e server.json \u3067\u3082\u30ab\u30b9\u30bf\u30de\u30a4\u30ba\u9805\u76ee\u304c\u3042\u308a\u307e\u3059\uff0e\n\n\n\n$ w3m -dump https://snac.kagolug.org/\nsnac.kagolug.org is a Fediverse instance that uses the ActivityPub protocol. In\nother words, users at this host can communicate with people that use software\nlike Mastodon, Pleroma, Friendica, etc. all around the world.\n\nThis server runs the snac software and there is no automatic sign-up process.\n\nThe following users are part of this community:\n\n @info@snac.kagolug.org (info)\n @matoken@snac.kagolug.org (matoken)\n\nThis site is powered by snac.\n\n\n\n\n\n\nshow_instance_timeline \u3053\u308c\u3092 true \u306b\u8a2d\u5b9a\u3059\u308b\u3068Welcome page \u306b\u6700\u65b0\u306e\u30e6\u30fc\u30b6\u30fc\u304c\u6295\u7a3f\u3057\u305f\u30bf\u30a4\u30e0\u30e9\u30a4\u30f3\u304c\u8868\u793a\u3055\u308c\u308b\u3088\u3046\u306b\u306a\u308a\u307e\u3059\uff0e\n\u307e\u305f\uff0c\u4ee5\u4e0b\u306e\u8a2d\u5b9a\u9805\u76ee\u304c\u8a2d\u5b9a\u3055\u308c\u3066\u3044\u305f\u5834\u5408\u305d\u308c\u3082\u8868\u793a\u3055\u308c\u307e\u3059\uff0e\n\n\nadmin_email \n\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u7ba1\u7406\u8005\u306e\u96fb\u5b50\u30e1\u30fc\u30eb\u30a2\u30c9\u30ec\u30b9\n\n\nadmin_account \n\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u7ba1\u7406\u8005\u306e\u30a2\u30ab\u30a6\u30f3\u30c8\n\n\ntitle \n\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u306e\u30bf\u30a4\u30c8\u30eb\n\n\nshort_description \n\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u306b\u5bfe\u3059\u308b\u77ed\u3044\u8aac\u660e\n\n\nshort_description_raw \nshort_description \u3092\u751f\u306e\u6587\u5b57\u5217\u3068\u3057\u3066\u89e3\u91c8\u3059\u308b\u304b\uff0cHTML \u306b\u5909\u63db\u3059\u308b\u304b\n\n\n\u4f8b\u3048\u3070\u3053\u306e\u69d8\u306b\u8a2d\u5b9a\u3059\u308b\u3068\uff0c\n\n\n\n$ grep -A5 show_instance_timeline snac-data/server.json\n \"show_instance_timeline\": true,\n \"admin_email\": \"\",\n \"admin_account\": \"matoken\",\n \"title\": \"🐈🐈🐈\",\n \"short_description\": \"matoken\u306e\u500b\u4ebaActivityPub \u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u3067\u3059\uff0e\",\n \"short_description_raw\": false,\n\n\n\n\u3053\u3093\u306a\u611f\u3058\u306b\u306a\u308a\u307e\u3057\u305f\uff0e\n\n\n\n\n\n\u6ce8\u610f\u70b9\u3068\u3057\u3066\uff0cshow_instance_timeline \u3092 true \u306b\u3059\u308b\u3068 greeting.html \u306f\u7121\u8996\u3055\u308c\u308b\u3088\u3046\u3067\u3059\uff0e\u7528\u9014\u3084\u597d\u307f\u306b\u5408\u308f\u305b\u3066\u3069\u3061\u3089\u304b\u3092\u5229\u7528\u3059\u308b\u611f\u3058\u3067\u3057\u3087\u3046\u304b\uff0e", "date_published": "2025-12-16T19:19:40+09:00", "date_modified": "2025-12-16T19:19:43+09:00", "authors": [ { "name": "matoken", "url": "https://matoken.org/blog/author/matoken/", "avatar": "https://secure.gravatar.com/avatar/38f5f3b575c5eb45cda6aa659bca119ac7a5e16b46565e869d0030e3bd66981d?s=512&d=mm&r=g" } ], "author": { "name": "matoken", "url": "https://matoken.org/blog/author/matoken/", "avatar": "https://secure.gravatar.com/avatar/38f5f3b575c5eb45cda6aa659bca119ac7a5e16b46565e869d0030e3bd66981d?s=512&d=mm&r=g" }, "tags": [ "ActivityPub", "snac", "Debian", "Linux", "trixie" ] }, { "id": "https://matoken.org/blog/?p=4962", "url": "https://matoken.org/blog/2025/12/15/snac-spam-mitigation/", "title": "snac\u3067\u306eSPAM\u5bfe\u7b56", "content_html": "
\n
\n
\n

\"snac

\n
\n
\n

\u3055\u304f\u3089\u306e\u30ca\u30ec\u30c3\u30b8\u306b\u8efd\u91cfActivityPub Server \u306esnac \u306b\u3064\u3044\u3066\u306e\u8a18\u4e8b\u3092\u5bc4\u7a3f\u3057\u307e\u3057\u305f\uff0e

\n
\n\n
\n

\u3053\u3053\u306b\u66f8\u304b\u306a\u304b\u3063\u305fsnac \u306e\u3053\u3068\u3092\u3044\u304f\u3064\u304b\u66f8\u3044\u3066\u3044\u3053\u3046\u3068\u601d\u3044\u307e\u3059\uff0e
\n\u4eca\u65e5\u306fsnac \u3067\u306eSPAM \u5bfe\u7b56\u306b\u3064\u3044\u3066\uff0e

\n
\n

\n
\n

SPAM \u304c\u6765\u306a\u3044\u306b\u8d8a\u3057\u305f\u3053\u3068\u306f\u3042\u308a\u307e\u305b\u3093\u304cActivityPub \u3067\u3082\u5076\u306b\u898b\u304b\u3051\u307e\u3059\uff0e\u3082\u3057SPAM \u304c\u6765\u308b\u3068\u304d\u306e\u3053\u3068\u3092\u8003\u3048\u3066\u5bfe\u7b56\u3092\u78ba\u8a8d\u3057\u3066\u304a\u304d\u307e\u3059\uff0e
\nsnac \u3067\u306f2\u3064\u306e\u5bfe\u7b56\u304c\u3042\u308b\u3088\u3046\u3067\u3059\uff0e

\n
\n
\n
\n
\n
\n
SPAM Mitigation\n    There have been some SPAM attacks on the Fediverse and, as too many instances and server implementations out there still allow automatic account creation, it will only get worse.  snac includes some (not very strong) tools for try\u2010\n    ing to survive the SPAM flood that will eventually happen.
\n
\n
\n
\n
\n
The  min_account_age field in the main configuration file allows setting a minimum age (in seconds) to consider too recently created accounts suspicious of being a potential source of SPAM. This is a na\u00efve assumption, because spam\u2010\nmers can create accounts, let them dormant for a while and then start to use them. Also, some ActivityPub implementations don't even bother to return a creation date for their accounts, so this is not very useful.
\n
\n
\n
\n
\n
From version 2.50, post content can be filtered out by regular expressions.  These weapons of mass destruction can be written into the filter_reject.txt file in the server base directory, one per line;  if  this  file  exists,  all\nposts'  content  will  be  matched (after being stripped of HTML tags) against these regexes, one by one, and any match will make the post to be rejected. Use lower case, the regex will be case insensitive by default.  If you don't\nknow about regular expressions, don't use this option (or learn about them inw some tutorial, there are gazillions of them out there), as you and your users may start missing posts. Also, given that every regular expression  imple\u2010\nmentation supports a different set of features, consider reading the documentation about the one implemented in your system.
\n
\n
\n
\n
\n— snac(8) \u3088\u308a\n
\n
\n
\n
\n
\n

\u30a2\u30ab\u30a6\u30f3\u30c8\u4f5c\u6210\u304b\u3089\u65e5\u306e\u6d45\u3044\u30a2\u30ab\u30a6\u30f3\u30c8\u3092\u62d2\u5426

\n
\n
\n

1\u3064\u76ee\u306f\u30e1\u30a4\u30f3\u8a2d\u5b9a\u30d5\u30a1\u30a4\u30eb\u306e server.json \u3067\u8a2d\u5b9a\u3067\u304d\u308b min_account_age \u3067\uff0c\u6295\u7a3f\u3092\u53d7\u3051\u4ed8\u3051\u308b\u30a2\u30ab\u30a6\u30f3\u30c8\u304c\u4f5c\u6210\u3055\u308c\u3066\u304b\u3089\u306e\u6642\u9593\u304c\u8a2d\u5b9a\u3067\u304d\u307e\u3059\uff0e
\n\u305f\u3060\u3057\uff0cSPAM \u30a2\u30ab\u30a6\u30f3\u30c8\u3092\u4f5c\u6210\u3057\u3066\u5bdd\u304b\u305b\u3066\u304b\u3089\u904b\u7528\u3057\u305f\u308a\uff0c\u30a2\u30ab\u30a6\u30f3\u30c8\u306e\u4f5c\u6210\u65e5\u3092\u8fd4\u3055\u306a\u3044\u5b9f\u88c5\u3082\u3042\u308b\u3089\u3057\u3044\u306e\u3067\u3042\u307e\u308a\u5f79\u306b\u7acb\u305f\u306a\u3044\u3088\u3046\u3067\u3059\uff0e
\n\u65e2\u5b9a\u5024\u306f 0 \u306b\u306a\u3063\u3066\u3044\u307e\u3059\uff0e

\n
\n
\n
\n
$ jq .min_account_age server.json\n0
\n
\n
\n
\n
\n
\n

\u6295\u7a3f\u5185\u5bb9\u3092\u6b63\u898f\u8868\u73fe\u3067\u30d5\u30a3\u30eb\u30bf\u30ea\u30f3\u30b0

\n
\n
\n

2\u3064\u3081\u306f\u6295\u7a3f\u5185\u5bb9\u3092\u6b63\u898f\u8868\u73fe\u3067\u30d5\u30a3\u30eb\u30bf\u30ea\u30f3\u30b0\u3067\u304d\u308b\u3088\u3046\u3067\u3059\uff0esnac \u30c7\u30fc\u30bf\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u306b filter_reject.txt \u3092\u7528\u610f\u3057\u3066\u3053\u306e\u30d5\u30a1\u30a4\u30eb\u4e2d\u306b1\u884c\u305a\u3064\u8a18\u8ff0\u3067\u304d\u308b\u3088\u3046\u3067\u3059\uff0e\u3053\u308c\u306b\u3088\u308a\u5168\u3066\u306e\u6295\u7a3f\u3092HTML \u30bf\u30b0\u3092\u53d6\u308a\u9664\u3044\u305f\u5f8c\u6b63\u898f\u8868\u73fe\u30681\u3064\u305a\u3064\u7167\u5408\u3055\u308c\u4e00\u81f4\u3059\u308b\u6295\u7a3f\u306f\u62d2\u5426\u3055\u308c\u307e\u3059\uff0e
\n\u6b63\u898f\u8868\u73fe\u306a\u306e\u3067\u30c6\u30b9\u30c8\u3092\u5341\u5206\u3057\u3066\u8a2d\u5b9a\u3057\u305f\u307b\u3046\u304c\u826f\u3055\u305d\u3046\u3067\u3059\uff0e

\n
\n
\n

Reverse proxy \u3084Firewall \u306a\u3069snac \u306e\u5916\u3067\u5bfe\u7b56\u3082\u8003\u3048\u3089\u308c\u307e\u3059\uff0e\u305d\u306e\u4ed6\u4ee5\u4e0b\u306e\u3088\u3046\u306a\u3082\u306e\u3082\u3042\u308b\u3088\u3046\u3067\u3059\uff0ee-mail \u3082\u3053\u3093\u306a\u611f\u3058\u3067\u591a\u6bb5\u306b\u3057\u305f\u308a\u3057\u307e\u3059\u306d\uff0e\u305d\u3046\u306a\u308b\u3068Received \u306e\u3088\u3046\u306a\u3082\u306e\u304c\u898b\u305f\u3044\u306a\u3068\u601d\u3063\u305f\u308a\u3082\uff0e

\n
\n\n
\n
\n", "content_text": "\u3055\u304f\u3089\u306e\u30ca\u30ec\u30c3\u30b8\u306b\u8efd\u91cfActivityPub Server \u306esnac \u306b\u3064\u3044\u3066\u306e\u8a18\u4e8b\u3092\u5bc4\u7a3f\u3057\u307e\u3057\u305f\uff0e\n\n\n\n\n\u3055\u304f\u3089\u30a4\u30f3\u30bf\u30fc\u30cd\u30c3\u30c8\u306e\u3055\u304f\u3089\u306e\u30ca\u30ec\u30c3\u30b8\u306bsnac\u306e\u8a18\u4e8b\u3092\u5bc4\u7a3f \u2013 matoken’s blog\n\n\n\n\n\u3053\u3053\u306b\u66f8\u304b\u306a\u304b\u3063\u305fsnac \u306e\u3053\u3068\u3092\u3044\u304f\u3064\u304b\u66f8\u3044\u3066\u3044\u3053\u3046\u3068\u601d\u3044\u307e\u3059\uff0e\n\u4eca\u65e5\u306fsnac \u3067\u306eSPAM \u5bfe\u7b56\u306b\u3064\u3044\u3066\uff0e\n\n\n\nSPAM \u304c\u6765\u306a\u3044\u306b\u8d8a\u3057\u305f\u3053\u3068\u306f\u3042\u308a\u307e\u305b\u3093\u304cActivityPub \u3067\u3082\u5076\u306b\u898b\u304b\u3051\u307e\u3059\uff0e\u3082\u3057SPAM \u304c\u6765\u308b\u3068\u304d\u306e\u3053\u3068\u3092\u8003\u3048\u3066\u5bfe\u7b56\u3092\u78ba\u8a8d\u3057\u3066\u304a\u304d\u307e\u3059\uff0e\nsnac \u3067\u306f2\u3064\u306e\u5bfe\u7b56\u304c\u3042\u308b\u3088\u3046\u3067\u3059\uff0e\n\n\n\n\n\nSPAM Mitigation\n There have been some SPAM attacks on the Fediverse and, as too many instances and server implementations out there still allow automatic account creation, it will only get worse. snac includes some (not very strong) tools for try\u2010\n ing to survive the SPAM flood that will eventually happen.\n\n\n\n\nThe min_account_age field in the main configuration file allows setting a minimum age (in seconds) to consider too recently created accounts suspicious of being a potential source of SPAM. This is a na\u00efve assumption, because spam\u2010\nmers can create accounts, let them dormant for a while and then start to use them. Also, some ActivityPub implementations don't even bother to return a creation date for their accounts, so this is not very useful.\n\n\n\n\nFrom version 2.50, post content can be filtered out by regular expressions. These weapons of mass destruction can be written into the filter_reject.txt file in the server base directory, one per line; if this file exists, all\nposts' content will be matched (after being stripped of HTML tags) against these regexes, one by one, and any match will make the post to be rejected. Use lower case, the regex will be case insensitive by default. If you don't\nknow about regular expressions, don't use this option (or learn about them inw some tutorial, there are gazillions of them out there), as you and your users may start missing posts. Also, given that every regular expression imple\u2010\nmentation supports a different set of features, consider reading the documentation about the one implemented in your system.\n\n\n\n\n— snac(8) \u3088\u308a\n\n\n\n\n\n\u30a2\u30ab\u30a6\u30f3\u30c8\u4f5c\u6210\u304b\u3089\u65e5\u306e\u6d45\u3044\u30a2\u30ab\u30a6\u30f3\u30c8\u3092\u62d2\u5426\n\n\n1\u3064\u76ee\u306f\u30e1\u30a4\u30f3\u8a2d\u5b9a\u30d5\u30a1\u30a4\u30eb\u306e server.json \u3067\u8a2d\u5b9a\u3067\u304d\u308b min_account_age \u3067\uff0c\u6295\u7a3f\u3092\u53d7\u3051\u4ed8\u3051\u308b\u30a2\u30ab\u30a6\u30f3\u30c8\u304c\u4f5c\u6210\u3055\u308c\u3066\u304b\u3089\u306e\u6642\u9593\u304c\u8a2d\u5b9a\u3067\u304d\u307e\u3059\uff0e\n\u305f\u3060\u3057\uff0cSPAM \u30a2\u30ab\u30a6\u30f3\u30c8\u3092\u4f5c\u6210\u3057\u3066\u5bdd\u304b\u305b\u3066\u304b\u3089\u904b\u7528\u3057\u305f\u308a\uff0c\u30a2\u30ab\u30a6\u30f3\u30c8\u306e\u4f5c\u6210\u65e5\u3092\u8fd4\u3055\u306a\u3044\u5b9f\u88c5\u3082\u3042\u308b\u3089\u3057\u3044\u306e\u3067\u3042\u307e\u308a\u5f79\u306b\u7acb\u305f\u306a\u3044\u3088\u3046\u3067\u3059\uff0e\n\u65e2\u5b9a\u5024\u306f 0 \u306b\u306a\u3063\u3066\u3044\u307e\u3059\uff0e\n\n\n\n$ jq .min_account_age server.json\n0\n\n\n\n\n\n\u6295\u7a3f\u5185\u5bb9\u3092\u6b63\u898f\u8868\u73fe\u3067\u30d5\u30a3\u30eb\u30bf\u30ea\u30f3\u30b0\n\n\n2\u3064\u3081\u306f\u6295\u7a3f\u5185\u5bb9\u3092\u6b63\u898f\u8868\u73fe\u3067\u30d5\u30a3\u30eb\u30bf\u30ea\u30f3\u30b0\u3067\u304d\u308b\u3088\u3046\u3067\u3059\uff0esnac \u30c7\u30fc\u30bf\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u306b filter_reject.txt \u3092\u7528\u610f\u3057\u3066\u3053\u306e\u30d5\u30a1\u30a4\u30eb\u4e2d\u306b1\u884c\u305a\u3064\u8a18\u8ff0\u3067\u304d\u308b\u3088\u3046\u3067\u3059\uff0e\u3053\u308c\u306b\u3088\u308a\u5168\u3066\u306e\u6295\u7a3f\u3092HTML \u30bf\u30b0\u3092\u53d6\u308a\u9664\u3044\u305f\u5f8c\u6b63\u898f\u8868\u73fe\u30681\u3064\u305a\u3064\u7167\u5408\u3055\u308c\u4e00\u81f4\u3059\u308b\u6295\u7a3f\u306f\u62d2\u5426\u3055\u308c\u307e\u3059\uff0e\n\u6b63\u898f\u8868\u73fe\u306a\u306e\u3067\u30c6\u30b9\u30c8\u3092\u5341\u5206\u3057\u3066\u8a2d\u5b9a\u3057\u305f\u307b\u3046\u304c\u826f\u3055\u305d\u3046\u3067\u3059\uff0e\n\n\nReverse proxy \u3084Firewall \u306a\u3069snac \u306e\u5916\u3067\u5bfe\u7b56\u3082\u8003\u3048\u3089\u308c\u307e\u3059\uff0e\u305d\u306e\u4ed6\u4ee5\u4e0b\u306e\u3088\u3046\u306a\u3082\u306e\u3082\u3042\u308b\u3088\u3046\u3067\u3059\uff0ee-mail \u3082\u3053\u3093\u306a\u611f\u3058\u3067\u591a\u6bb5\u306b\u3057\u305f\u308a\u3057\u307e\u3059\u306d\uff0e\u305d\u3046\u306a\u308b\u3068Received \u306e\u3088\u3046\u306a\u3082\u306e\u304c\u898b\u305f\u3044\u306a\u3068\u601d\u3063\u305f\u308a\u3082\uff0e\n\n\n\n\nMastodon\u3068\u304b\u306eActivityPub\u30b5\u30fc\u30d0\u30fc\u3067\u4f7f\u3048\u308b\u30b9\u30d1\u30e0\u5bfe\u7b56\u30d7\u30ed\u30ad\u30b7\u3092\u4f5c\u3063\u305f\u3088 #mastodon – Qiita\n\n\nwebscrubbing/simple-activitypub-spam-filter: Check content and block it", "date_published": "2025-12-15T19:50:27+09:00", "date_modified": "2025-12-15T19:50:28+09:00", "authors": [ { "name": "matoken", "url": "https://matoken.org/blog/author/matoken/", "avatar": "https://secure.gravatar.com/avatar/38f5f3b575c5eb45cda6aa659bca119ac7a5e16b46565e869d0030e3bd66981d?s=512&d=mm&r=g" } ], "author": { "name": "matoken", "url": "https://matoken.org/blog/author/matoken/", "avatar": "https://secure.gravatar.com/avatar/38f5f3b575c5eb45cda6aa659bca119ac7a5e16b46565e869d0030e3bd66981d?s=512&d=mm&r=g" }, "tags": [ "ActivityPub", "snac", "SPAM", "Debian", "Linux", "trixie" ] }, { "id": "https://matoken.org/blog/?p=4953", "url": "https://matoken.org/blog/2025/12/14/snac-robots-txt/", "title": "snac\u306erobots.txt", "content_html": "
\n
\n
\n

\"susie64

\n
\n
\n

\u3055\u304f\u3089\u306e\u30ca\u30ec\u30c3\u30b8\u306b\u8efd\u91cfActivityPub Server \u306esnac \u306b\u3064\u3044\u3066\u306e\u8a18\u4e8b\u3092\u5bc4\u7a3f\u3057\u307e\u3057\u305f\uff0e

\n
\n\n
\n

\u3053\u3053\u306b\u66f8\u304b\u306a\u304b\u3063\u305fsnac \u306e\u3053\u3068\u3092\u3044\u304f\u3064\u304b\u66f8\u3044\u3066\u3044\u3053\u3046\u3068\u601d\u3044\u307e\u3059\uff0e
\n\u4eca\u65e5\u306fsnac \u3067\u306erobots.txt \u306b\u3064\u3044\u3066\uff0e

\n
\n

\n
\n

\u691c\u7d22\u30a8\u30f3\u30b8\u30f3\u3067\u300csite:snac.kagolug.org\u300d\u306e\u3088\u3046\u306b\u691c\u7d22\u3057\u3066\u307f\u308b\u3068\u4f55\u3082\u51fa\u3066\u304d\u307e\u305b\u3093\uff0e\u904b\u7528\u958b\u59cb\u304b\u3089\u305d\u3046\u6642\u9593\u304c\u7d4c\u3063\u3066\u3044\u306a\u3044\u304b\u3089\u304b\u306a?\u3068\u601d\u3044\u3064\u3064\u5ff5\u306e\u70ba robots.txt \u3092\u78ba\u8a8d\u3059\u308b\u3068\u3053\u3093\u306a\u611f\u3058\u3067\u5168\u3066\u62d2\u5426\u308b\u3059\u3088\u3046\u306b\u306a\u3063\u3066\u3044\u307e\u3057\u305f\uff0e

\n
\n
\n
\n
$ w3m -dump https://snac.kagolug.org/robots.txt\nUser-agent: *\nDisallow: /
\n
\n
\n
\n

source \u3092\u78ba\u8a8d\u3059\u308b\u3068 httpd.c \u306e\u4e2d\u3067\u30cf\u30fc\u30c9\u30b3\u30fc\u30c7\u30a3\u30f3\u30b0\u3055\u308c\u3066\u3044\u308b\u3088\u3046\u3067\u3059\uff0e

\n
\n
\n
\n
$ grep -n -A5 robots.txt httpd.c\n321:    if (strcmp(q_path, \"/robots.txt\") == 0) {\n322-        status = HTTP_STATUS_OK;\n323-        *ctype = \"text/plain\";\n324-        *body  = xs_str_new(\"User-agent: *\\n\"\n325-                            \"Disallow: /\\n\");\n326-    }
\n
\n
\n
\n

snac \u306e\u8a2d\u5b9a\u3067\u3069\u3046\u306b\u304b\u3067\u304d\u308c\u3070\u3044\u3044\u3067\u3059\u304c\u6050\u3089\u304f\u7121\u7406\uff0eISSUE \u3092\u63a2\u3059\u3068\u4ee5\u4e0b\u306e\u3082\u306e\u304c\uff0e404\u30a8\u30e9\u30fc\u304c\u90aa\u9b54\u306a\u306e\u3067\u7528\u610f\u3057\u3066\u3044\u308b\u3060\u3051\u3067\u30ab\u30b9\u30bf\u30de\u30a4\u30ba\u3057\u305f\u3044\u4eba\u306f\u524d\u6bb5\u306ehttp proxy \u3067\u30eb\u30fc\u30eb\u3092\u8ffd\u52a0\u3059\u308b\u611f\u3058\u306e\u3088\u3046\u3067\u3059\uff0e

\n
\n\n
\n

ISSUE \u3092\u7acb\u3066\u305f\u65b9\u306fnginx \u3067\u30ab\u30b9\u30bf\u30e0robots.txt \u3092\u8fd4\u3059\u3088\u3046\u306b\u3057\u3066\u3044\u308b\u3088\u3046\u3067\u3059\uff0e

\n
\n
\n
\n
\n

Actually, I am able to work around this by returning a custom robots.txt with nginx:

\n
\n
\n
\n
location = /robots.txt {\n\t\treturn 200 'User-agent: FediFetcher\\nAllow: /\\nUser-agent: *\\nDisallow: /\\n';\n}
\n
\n
\n
\n
\n
\n

\u81ea\u5206\u306e\u74b0\u5883\u306fApache2 httpd \u3067\u3059\u304c\u540c\u3058\u3088\u3046\u306a\u8a2d\u5b9a\u306f\u3067\u304d\u308b\u306e\u3067\u8a2d\u5b9a\u3057\u3066\u307f\u307e\u3059\uff0e

\n
\n
\n
\n
\n

Apache2 httpd \u306eAlias \u3067robots.txt \u3092\u8a2d\u5b9a

\n
\n
\n

\u4ee5\u524dNitter \u3092\u516c\u958b\u3057\u3066\u3044\u305f\u3068\u304d\u306b\u3082\u3084\u3063\u3066\u3044\u305f\u306e\u3067\u3053\u308c\u3092\u53c2\u8003\u306b\u8a2d\u5b9a\u3057\u307e\u3059\uff0e

\n
\n\n
\n

Apache2 httpd \u306esnac \u90e8\u5206\u306e\u8a2d\u5b9a\u3092\u4ee5\u4e0b\u306e\u3088\u3046\u306b\u4fee\u6b63\u3057\u307e\u3057\u305f\uff0e\u3053\u308c\u3067Linux \u30d5\u30a1\u30a4\u30eb\u30b7\u30b9\u30c6\u30e0\u5185\u306e /var/lib/snac2/robots.txt \u304c /robots.txt \u306b\u306a\u308b\u306f\u305a\u3067\u3059\uff0e

\n
\n
\n
\n
$ sudo git diff /etc/apache2/sites-available/011-snac.kagolug.org.conf\ndiff --git a/apache2/sites-available/011-snac.kagolug.org.conf b/apache2/sites-available/011-snac.kagolug.org.conf\nindex f5b5c7f..7bb72c1 100644\n--- a/apache2/sites-available/011-snac.kagolug.org.conf\n+++ b/apache2/sites-available/011-snac.kagolug.org.conf\n@@ -58,6 +58,11 @@\n        </Location>\n\n        Alias /static /var/www/static\n+       Alias /robots.txt /var/lib/snac2/robots.txt\n+       <Location \"/robots.txt\">\n+               ProxyPass !\n+               Require all granted\n+       </Location>\n\n        # Possible values include: debug, info, notice, warn, error, crit,\n        # alert, emerg.
\n
\n
\n
\n

\u8a2d\u5b9a\u3092\u78ba\u8a8d\u3057\u3066\u304b\u3089\u53cd\u6620\u3057\u307e\u3059\uff0e

\n
\n
\n
\n
$ sudo apache2ctl configtest\n$ sudo systemctl reload apache2
\n
\n
\n
\n

\u3053\u306e\u30d5\u30a1\u30a4\u30eb\u304c\uff0c

\n
\n
\n
\n
$ sudo -u www-data cat /var/lib/snac2/robots.txt\nUser-agent: *\nAllow: /
\n
\n
\n
\n

/robots.txt \u306b\u53cd\u6620\u3055\u308c\u307e\u3057\u305f\uff0e

\n
\n
\n
\n
$ w3m -dump https://snac.kagolug.org/robots.txt\nUser-agent: *\nAllow: /
\n
\n
\n
\n

\u3053\u308c\u3067\u5404\u7a2ebot \u304b\u3089\u306e\u30a2\u30af\u30bb\u30b9\u304c\u8a31\u53ef\u3055\u308c\u307e\u3057\u305f\uff0e

\n
\n
\n
\n
\n

source \u66f8\u304d\u63db\u3048

\n
\n
\n

source \u304b\u3089build \u3057\u3066\u3044\u308b\u74b0\u5883\u3067\u306fsource \u66f8\u304d\u63db\u3048\u3067\u3082robots.txt \u3092\u30ab\u30b9\u30bf\u30de\u30a4\u30ba\u3067\u304d\u307e\u3057\u305f\uff0e\u3067\u3082\u30a2\u30c3\u30d7\u30c7\u30fc\u30c8\u306e\u305f\u3073\u306b\u30d1\u30c3\u30c1\u3092\u5f53\u3066\u308b\u306e\u306f\u9762\u5012\u306a\u306e\u3067\u3084\u306f\u308aproxy \u3067\u8a2d\u5b9a\u3059\u308b\u307b\u3046\u304c\u826f\u3055\u305d\u3046\u3067\u3059\uff0e

\n
\n
\n
robots.txt \u3092\u7121\u304f\u3059(404 \u30a8\u30e9\u30fc\u304c\u305f\u304f\u3055\u3093\u306a\u306e\u3067\u3042\u307e\u308a\u826f\u304f\u7121\u3055\u305d\u3046)
\n
\n
$ git diff httpd.c\ndiff --git a/httpd.c b/httpd.c\nindex a8cd849..976fdd6 100644\n--- a/httpd.c\n+++ b/httpd.c\n@@ -318,13 +318,6 @@ int server_get_handler(xs_dict *req, const char *q_path,\n         *body  = xs_json_dumps(j, 4);\n     }\n     else\n-    if (strcmp(q_path, \"/robots.txt\") == 0) {\n-        status = HTTP_STATUS_OK;\n-        *ctype = \"text/plain\";\n-        *body  = xs_str_new(\"User-agent: *\\n\"\n-                            \"Disallow: /\\n\");\n-    }\n-    else\n     if (strcmp(q_path, \"/style.css\") == 0) {\n         FILE *f;\n         xs *css_fn = xs_fmt(\"%s/style.css\", srv_basedir);
\n
\n
\n
\n
\n
$ w3m -dump https://snac.matoken.org/robots.txt\n404 Not Found (snac/2.85)
\n
\n
\n
\n
\u5168\u3066\u8a31\u53ef\u306b\u66f8\u304d\u63db\u3048
\n
\n
$ git diff httpd.c\ndiff --git a/httpd.c b/httpd.c\nindex a8cd849..c0bcaef 100644\n--- a/httpd.c\n+++ b/httpd.c\n@@ -322,7 +322,7 @@ int server_get_handler(xs_dict *req, const char *q_path,\n         status = HTTP_STATUS_OK;\n         *ctype = \"text/plain\";\n         *body  = xs_str_new(\"User-agent: *\\n\"\n-                            \"Disallow: /\\n\");\n+                            \"Allow: /\\n\");\n     }\n     else\n     if (strcmp(q_path, \"/style.css\") == 0) {
\n
\n
\n
\n
\n
$ w3m -dump https://snac.matoken.org/robots.txt\nUser-agent: *\nAllow: /
\n
\n
\n
\n
\n", "content_text": "\u3055\u304f\u3089\u306e\u30ca\u30ec\u30c3\u30b8\u306b\u8efd\u91cfActivityPub Server \u306esnac \u306b\u3064\u3044\u3066\u306e\u8a18\u4e8b\u3092\u5bc4\u7a3f\u3057\u307e\u3057\u305f\uff0e\n\n\n\n\n\u3055\u304f\u3089\u30a4\u30f3\u30bf\u30fc\u30cd\u30c3\u30c8\u306e\u3055\u304f\u3089\u306e\u30ca\u30ec\u30c3\u30b8\u306bsnac\u306e\u8a18\u4e8b\u3092\u5bc4\u7a3f \u2013 matoken’s blog\n\n\n\n\n\u3053\u3053\u306b\u66f8\u304b\u306a\u304b\u3063\u305fsnac \u306e\u3053\u3068\u3092\u3044\u304f\u3064\u304b\u66f8\u3044\u3066\u3044\u3053\u3046\u3068\u601d\u3044\u307e\u3059\uff0e\n\u4eca\u65e5\u306fsnac \u3067\u306erobots.txt \u306b\u3064\u3044\u3066\uff0e\n\n\n\n\u691c\u7d22\u30a8\u30f3\u30b8\u30f3\u3067\u300csite:snac.kagolug.org\u300d\u306e\u3088\u3046\u306b\u691c\u7d22\u3057\u3066\u307f\u308b\u3068\u4f55\u3082\u51fa\u3066\u304d\u307e\u305b\u3093\uff0e\u904b\u7528\u958b\u59cb\u304b\u3089\u305d\u3046\u6642\u9593\u304c\u7d4c\u3063\u3066\u3044\u306a\u3044\u304b\u3089\u304b\u306a?\u3068\u601d\u3044\u3064\u3064\u5ff5\u306e\u70ba robots.txt \u3092\u78ba\u8a8d\u3059\u308b\u3068\u3053\u3093\u306a\u611f\u3058\u3067\u5168\u3066\u62d2\u5426\u308b\u3059\u3088\u3046\u306b\u306a\u3063\u3066\u3044\u307e\u3057\u305f\uff0e\n\n\n\n$ w3m -dump https://snac.kagolug.org/robots.txt\nUser-agent: *\nDisallow: /\n\n\n\nsource \u3092\u78ba\u8a8d\u3059\u308b\u3068 httpd.c \u306e\u4e2d\u3067\u30cf\u30fc\u30c9\u30b3\u30fc\u30c7\u30a3\u30f3\u30b0\u3055\u308c\u3066\u3044\u308b\u3088\u3046\u3067\u3059\uff0e\n\n\n\n$ grep -n -A5 robots.txt httpd.c\n321: if (strcmp(q_path, \"/robots.txt\") == 0) {\n322- status = HTTP_STATUS_OK;\n323- *ctype = \"text/plain\";\n324- *body = xs_str_new(\"User-agent: *\\n\"\n325- \"Disallow: /\\n\");\n326- }\n\n\n\nsnac \u306e\u8a2d\u5b9a\u3067\u3069\u3046\u306b\u304b\u3067\u304d\u308c\u3070\u3044\u3044\u3067\u3059\u304c\u6050\u3089\u304f\u7121\u7406\uff0eISSUE \u3092\u63a2\u3059\u3068\u4ee5\u4e0b\u306e\u3082\u306e\u304c\uff0e404\u30a8\u30e9\u30fc\u304c\u90aa\u9b54\u306a\u306e\u3067\u7528\u610f\u3057\u3066\u3044\u308b\u3060\u3051\u3067\u30ab\u30b9\u30bf\u30de\u30a4\u30ba\u3057\u305f\u3044\u4eba\u306f\u524d\u6bb5\u306ehttp proxy \u3067\u30eb\u30fc\u30eb\u3092\u8ffd\u52a0\u3059\u308b\u611f\u3058\u306e\u3088\u3046\u3067\u3059\uff0e\n\n\n\n\n#223 – default robots.txt breaks integration with fedi-fetcher – grunfink/snac2 – Codeberg.org\n\n\n\n\nISSUE \u3092\u7acb\u3066\u305f\u65b9\u306fnginx \u3067\u30ab\u30b9\u30bf\u30e0robots.txt \u3092\u8fd4\u3059\u3088\u3046\u306b\u3057\u3066\u3044\u308b\u3088\u3046\u3067\u3059\uff0e\n\n\n\n\nActually, I am able to work around this by returning a custom robots.txt with nginx:\n\n\n\nlocation = /robots.txt {\n\t\treturn 200 'User-agent: FediFetcher\\nAllow: /\\nUser-agent: *\\nDisallow: /\\n';\n}\n\n\n\n\n\n\u81ea\u5206\u306e\u74b0\u5883\u306fApache2 httpd \u3067\u3059\u304c\u540c\u3058\u3088\u3046\u306a\u8a2d\u5b9a\u306f\u3067\u304d\u308b\u306e\u3067\u8a2d\u5b9a\u3057\u3066\u307f\u307e\u3059\uff0e\n\n\n\n\nApache2 httpd \u306eAlias \u3067robots.txt \u3092\u8a2d\u5b9a\n\n\n\u4ee5\u524dNitter \u3092\u516c\u958b\u3057\u3066\u3044\u305f\u3068\u304d\u306b\u3082\u3084\u3063\u3066\u3044\u305f\u306e\u3067\u3053\u308c\u3092\u53c2\u8003\u306b\u8a2d\u5b9a\u3057\u307e\u3059\uff0e\n\n\n\n\nNitter\u306brobots.txt\u3092\u8a2d\u5b9a(Apache httpd\u306ereverse proxy\u74b0\u5883\u3067Alias\u8a2d\u5b9a) \u2013 matoken’s blog\n\n\n\n\nApache2 httpd \u306esnac \u90e8\u5206\u306e\u8a2d\u5b9a\u3092\u4ee5\u4e0b\u306e\u3088\u3046\u306b\u4fee\u6b63\u3057\u307e\u3057\u305f\uff0e\u3053\u308c\u3067Linux \u30d5\u30a1\u30a4\u30eb\u30b7\u30b9\u30c6\u30e0\u5185\u306e /var/lib/snac2/robots.txt \u304c /robots.txt \u306b\u306a\u308b\u306f\u305a\u3067\u3059\uff0e\n\n\n\n$ sudo git diff /etc/apache2/sites-available/011-snac.kagolug.org.conf\ndiff --git a/apache2/sites-available/011-snac.kagolug.org.conf b/apache2/sites-available/011-snac.kagolug.org.conf\nindex f5b5c7f..7bb72c1 100644\n--- a/apache2/sites-available/011-snac.kagolug.org.conf\n+++ b/apache2/sites-available/011-snac.kagolug.org.conf\n@@ -58,6 +58,11 @@\n </Location>\n\n Alias /static /var/www/static\n+ Alias /robots.txt /var/lib/snac2/robots.txt\n+ <Location \"/robots.txt\">\n+ ProxyPass !\n+ Require all granted\n+ </Location>\n\n # Possible values include: debug, info, notice, warn, error, crit,\n # alert, emerg.\n\n\n\n\u8a2d\u5b9a\u3092\u78ba\u8a8d\u3057\u3066\u304b\u3089\u53cd\u6620\u3057\u307e\u3059\uff0e\n\n\n\n$ sudo apache2ctl configtest\n$ sudo systemctl reload apache2\n\n\n\n\u3053\u306e\u30d5\u30a1\u30a4\u30eb\u304c\uff0c\n\n\n\n$ sudo -u www-data cat /var/lib/snac2/robots.txt\nUser-agent: *\nAllow: /\n\n\n\n/robots.txt \u306b\u53cd\u6620\u3055\u308c\u307e\u3057\u305f\uff0e\n\n\n\n$ w3m -dump https://snac.kagolug.org/robots.txt\nUser-agent: *\nAllow: /\n\n\n\n\u3053\u308c\u3067\u5404\u7a2ebot \u304b\u3089\u306e\u30a2\u30af\u30bb\u30b9\u304c\u8a31\u53ef\u3055\u308c\u307e\u3057\u305f\uff0e\n\n\n\n\nsource \u66f8\u304d\u63db\u3048\n\n\nsource \u304b\u3089build \u3057\u3066\u3044\u308b\u74b0\u5883\u3067\u306fsource \u66f8\u304d\u63db\u3048\u3067\u3082robots.txt \u3092\u30ab\u30b9\u30bf\u30de\u30a4\u30ba\u3067\u304d\u307e\u3057\u305f\uff0e\u3067\u3082\u30a2\u30c3\u30d7\u30c7\u30fc\u30c8\u306e\u305f\u3073\u306b\u30d1\u30c3\u30c1\u3092\u5f53\u3066\u308b\u306e\u306f\u9762\u5012\u306a\u306e\u3067\u3084\u306f\u308aproxy \u3067\u8a2d\u5b9a\u3059\u308b\u307b\u3046\u304c\u826f\u3055\u305d\u3046\u3067\u3059\uff0e\n\n\nrobots.txt \u3092\u7121\u304f\u3059(404 \u30a8\u30e9\u30fc\u304c\u305f\u304f\u3055\u3093\u306a\u306e\u3067\u3042\u307e\u308a\u826f\u304f\u7121\u3055\u305d\u3046)\n\n$ git diff httpd.c\ndiff --git a/httpd.c b/httpd.c\nindex a8cd849..976fdd6 100644\n--- a/httpd.c\n+++ b/httpd.c\n@@ -318,13 +318,6 @@ int server_get_handler(xs_dict *req, const char *q_path,\n *body = xs_json_dumps(j, 4);\n }\n else\n- if (strcmp(q_path, \"/robots.txt\") == 0) {\n- status = HTTP_STATUS_OK;\n- *ctype = \"text/plain\";\n- *body = xs_str_new(\"User-agent: *\\n\"\n- \"Disallow: /\\n\");\n- }\n- else\n if (strcmp(q_path, \"/style.css\") == 0) {\n FILE *f;\n xs *css_fn = xs_fmt(\"%s/style.css\", srv_basedir);\n\n\n\n\n$ w3m -dump https://snac.matoken.org/robots.txt\n404 Not Found (snac/2.85)\n\n\n\n\u5168\u3066\u8a31\u53ef\u306b\u66f8\u304d\u63db\u3048\n\n$ git diff httpd.c\ndiff --git a/httpd.c b/httpd.c\nindex a8cd849..c0bcaef 100644\n--- a/httpd.c\n+++ b/httpd.c\n@@ -322,7 +322,7 @@ int server_get_handler(xs_dict *req, const char *q_path,\n status = HTTP_STATUS_OK;\n *ctype = \"text/plain\";\n *body = xs_str_new(\"User-agent: *\\n\"\n- \"Disallow: /\\n\");\n+ \"Allow: /\\n\");\n }\n else\n if (strcmp(q_path, \"/style.css\") == 0) {\n\n\n\n\n$ w3m -dump https://snac.matoken.org/robots.txt\nUser-agent: *\nAllow: /", "date_published": "2025-12-14T18:26:00+09:00", "date_modified": "2025-12-14T18:12:04+09:00", "authors": [ { "name": "matoken", "url": "https://matoken.org/blog/author/matoken/", "avatar": "https://secure.gravatar.com/avatar/38f5f3b575c5eb45cda6aa659bca119ac7a5e16b46565e869d0030e3bd66981d?s=512&d=mm&r=g" } ], "author": { "name": "matoken", "url": "https://matoken.org/blog/author/matoken/", "avatar": "https://secure.gravatar.com/avatar/38f5f3b575c5eb45cda6aa659bca119ac7a5e16b46565e869d0030e3bd66981d?s=512&d=mm&r=g" }, "tags": [ "ActivityPub", "Apache2 httpd", "robots.txt", "snac", "Debian", "Linux", "trixie" ] }, { "id": "https://matoken.org/blog/?p=4937", "url": "https://matoken.org/blog/2025/12/13/snac-welcome-page/", "title": "snac\u306eWelcome page\u306ehtml\u30d5\u30a1\u30a4\u30eb\u30ab\u30b9\u30bf\u30de\u30a4\u30ba", "content_html": "
\n

\"snac

\n
\n
\n

\u3055\u304f\u3089\u306e\u30ca\u30ec\u30c3\u30b8\u306b\u8efd\u91cfActivityPub Server \u306esnac \u306b\u3064\u3044\u3066\u306e\u8a18\u4e8b\u3092\u5bc4\u7a3f\u3057\u307e\u3057\u305f\uff0e

\n
\n
\n\n
\n
\n

\u3053\u3053\u306b\u66f8\u304b\u306a\u304b\u3063\u305fsnac \u306e\u3053\u3068\u3092\u3044\u304f\u3064\u304b\u66f8\u3044\u3066\u3044\u3053\u3046\u3068\u601d\u3044\u307e\u3059\uff0e
\n\u4eca\u65e5\u306fsnac \u3067\u306eWelcome page \u306ehtml \u30d5\u30a1\u30a4\u30eb\u30ab\u30b9\u30bf\u30de\u30a4\u30ba\u306b\u3064\u3044\u3066\uff0e

\n
\n

\n
\n

snac \u306etop page \u306f\u4ee5\u4e0b\u306e\u3088\u3046\u306a\u6328\u62f6\u30da\u30fc\u30b8\u304c\u8868\u793a\u3055\u308c\u307e\u3059\uff0e\u3053\u306e\u30da\u30fc\u30b8\u3092\u30ab\u30b9\u30bf\u30de\u30a4\u30ba\u3057\u3066\u307f\u307e\u3059\uff0e

\n
\n
\n
\n
$ w3m -dump https://snac.kagolug.org/\nsnac.kagolug.org is a Fediverse instance that uses the ActivityPub protocol. In\nother words, users at this host can communicate with people that use software\nlike Mastodon, Pleroma, Friendica, etc. all around the world.\n\nThis server runs the snac software and there is no automatic sign-up process.\n\nThe following users are part of this community:\n\n    @info@snac.kagolug.org (info)\n    @matoken@snac.kagolug.org (matoken)\n\nThis site is powered by snac.
\n
\n
\n
\n

\"snac

\n
\n
\n

\u3053\u306e\u30da\u30fc\u30b8\u306f greeting.html \u3092\u8aad\u307f\u8fbc\u3093\u3067\u3044\u308b\u3088\u3046\u3067\u3059\uff0e

\n
\n
\n
greeting.html
\n
\n
<!DOCTYPE html>\n<html><head>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<link rel=\"icon\" type=\"image/x-icon\" href=\"https://%host%/favicon.ico\"/>\n<style>*{color-scheme:light dark}body{margin:auto;max-width:50em}</style>\n<title>Welcome to %host%</title>\n</head>\n<body>\n<p><b>%host%</b> is a <a href=\"https://en.wikipedia.org/wiki/Fediverse\">Fediverse</a> instance that uses the <a href=\"https://en.wikipedia.org/wiki/ActivityPub\">ActivityPub</a> protocol. In other words, users at this host can communicate with people that use software like Mastodon, Pleroma, Friendica, etc. all around the world.</p>\n<p>This server runs the <a href=\"https://comam.es/what-is-snac\">snac</a> software and there is no automatic sign-up process.</p>\n<p>The following users are part of this community:</p>\n\n%userlist%\n\n<p>This site is powered by <abbr title=\"Social Networks Are Crap\">snac</abbr>.</p>\n</body></html>
\n
\n
\n
\n

\u4f8b\u3048\u3070\u65e5\u672c\u8a9e\u306b\u3057\u305f\u308a\uff0c\u30e6\u30fc\u30b6\u30fc\u30ea\u30b9\u30c8\u3092\u96a0\u3057\u305f\u308a\u3068\u3044\u3063\u305f\u30ab\u30b9\u30bf\u30de\u30a4\u30ba\u304c\u51fa\u6765\u307e\u3059\uff0e\u3053\u306ehtml \u30d5\u30a1\u30a4\u30eb\u3092\u4fdd\u5b58\u3057\u305f\u6642\u70b9\u3067\u53cd\u6620\u3055\u308c\u307e\u3059\uff0e

\n
\n
\n
\n
$ w3m -dump https://snac.kagolug.org/\nsnac.kagolug.org\u306fActivityPub\u30d7\u30ed\u30c8\u30b3\u30eb\u3092\u5229\u7528\u3057\u305fFediverse\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u3067\u3059\uff0e\u3053\n\u306e\u30db\u30b9\u30c8\u306e\u30e6\u30fc\u30b6\u30fc\u306f\u4e16\u754c\u4e2d\u306eMastodon, Pleroma, Friendica, \u306a\u3069\u306e\u30bd\u30d5\u30c8\u30a6\u30a7\u30a2\u3092\n\u5229\u7528\u3057\u3066\u3044\u308b\u4eba\u3005\u3068\u30b3\u30df\u30cb\u30e5\u30b1\u30fc\u30b7\u30e7\u30f3\u3092\u53d6\u308b\u3053\u3068\u304c\u51fa\u6765\u307e\u3059\uff0e\n\n\u3053\u306e\u30b5\u30fc\u30d0\u30fc\u306fsnac \u30bd\u30d5\u30c8\u30a6\u30a7\u30a2\u3092\u5229\u7528\u3057\u3066\u3044\u307e\u3059\uff0e\u81ea\u52d5\u767b\u9332\u30d7\u30ed\u30bb\u30b9\u306f\u3042\u308a\u307e\u305b\u3093\uff0e\n\n\u4ee5\u4e0b\u306e\u30e6\u30fc\u30b6\u30fc\u304c\u3053\u306e\u30b3\u30df\u30e5\u30cb\u30c6\u30a3\u306b\u53c2\u52a0\u3057\u3066\u3044\u307e\u3059:\n\n    @info@snac.kagolug.org (info)\n    @matoken@snac.kagolug.org (matoken)\n\nThis site is powered by snac.
\n
\n
\n
\n

\"snac

\n
\n
\n

\u4eca\u56de\u3068\u308a\u3042\u3048\u305a\u65e5\u672c\u8a9e\u306b\u3057\u307e\u3057\u305f\u304c\uff0cLUG \u306e\u8aac\u660e\u306a\u3069\u3082\u5165\u308c\u305f\u3044\u3068\u3053\u308d\u3067\u3059\uff0e

\n
\n", "content_text": "\u3055\u304f\u3089\u306e\u30ca\u30ec\u30c3\u30b8\u306b\u8efd\u91cfActivityPub Server \u306esnac \u306b\u3064\u3044\u3066\u306e\u8a18\u4e8b\u3092\u5bc4\u7a3f\u3057\u307e\u3057\u305f\uff0e\n\n\n\n\n\u3055\u304f\u3089\u30a4\u30f3\u30bf\u30fc\u30cd\u30c3\u30c8\u306e\u3055\u304f\u3089\u306e\u30ca\u30ec\u30c3\u30b8\u306bsnac\u306e\u8a18\u4e8b\u3092\u5bc4\u7a3f \u2013 matoken’s blog\n\n\n\n\n\u3053\u3053\u306b\u66f8\u304b\u306a\u304b\u3063\u305fsnac \u306e\u3053\u3068\u3092\u3044\u304f\u3064\u304b\u66f8\u3044\u3066\u3044\u3053\u3046\u3068\u601d\u3044\u307e\u3059\uff0e\n\u4eca\u65e5\u306fsnac \u3067\u306eWelcome page \u306ehtml \u30d5\u30a1\u30a4\u30eb\u30ab\u30b9\u30bf\u30de\u30a4\u30ba\u306b\u3064\u3044\u3066\uff0e\n\n\n\nsnac \u306etop page \u306f\u4ee5\u4e0b\u306e\u3088\u3046\u306a\u6328\u62f6\u30da\u30fc\u30b8\u304c\u8868\u793a\u3055\u308c\u307e\u3059\uff0e\u3053\u306e\u30da\u30fc\u30b8\u3092\u30ab\u30b9\u30bf\u30de\u30a4\u30ba\u3057\u3066\u307f\u307e\u3059\uff0e\n\n\n\n$ w3m -dump https://snac.kagolug.org/\nsnac.kagolug.org is a Fediverse instance that uses the ActivityPub protocol. In\nother words, users at this host can communicate with people that use software\nlike Mastodon, Pleroma, Friendica, etc. all around the world.\n\nThis server runs the snac software and there is no automatic sign-up process.\n\nThe following users are part of this community:\n\n @info@snac.kagolug.org (info)\n @matoken@snac.kagolug.org (matoken)\n\nThis site is powered by snac.\n\n\n\n\n\n\n\u3053\u306e\u30da\u30fc\u30b8\u306f greeting.html \u3092\u8aad\u307f\u8fbc\u3093\u3067\u3044\u308b\u3088\u3046\u3067\u3059\uff0e\n\n\ngreeting.html\n\n<!DOCTYPE html>\n<html><head>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<link rel=\"icon\" type=\"image/x-icon\" href=\"https://%host%/favicon.ico\"/>\n<style>*{color-scheme:light dark}body{margin:auto;max-width:50em}</style>\n<title>Welcome to %host%</title>\n</head>\n<body>\n<p><b>%host%</b> is a <a href=\"https://en.wikipedia.org/wiki/Fediverse\">Fediverse</a> instance that uses the <a href=\"https://en.wikipedia.org/wiki/ActivityPub\">ActivityPub</a> protocol. In other words, users at this host can communicate with people that use software like Mastodon, Pleroma, Friendica, etc. all around the world.</p>\n<p>This server runs the <a href=\"https://comam.es/what-is-snac\">snac</a> software and there is no automatic sign-up process.</p>\n<p>The following users are part of this community:</p>\n\n%userlist%\n\n<p>This site is powered by <abbr title=\"Social Networks Are Crap\">snac</abbr>.</p>\n</body></html>\n\n\n\n\u4f8b\u3048\u3070\u65e5\u672c\u8a9e\u306b\u3057\u305f\u308a\uff0c\u30e6\u30fc\u30b6\u30fc\u30ea\u30b9\u30c8\u3092\u96a0\u3057\u305f\u308a\u3068\u3044\u3063\u305f\u30ab\u30b9\u30bf\u30de\u30a4\u30ba\u304c\u51fa\u6765\u307e\u3059\uff0e\u3053\u306ehtml \u30d5\u30a1\u30a4\u30eb\u3092\u4fdd\u5b58\u3057\u305f\u6642\u70b9\u3067\u53cd\u6620\u3055\u308c\u307e\u3059\uff0e\n\n\n\n$ w3m -dump https://snac.kagolug.org/\nsnac.kagolug.org\u306fActivityPub\u30d7\u30ed\u30c8\u30b3\u30eb\u3092\u5229\u7528\u3057\u305fFediverse\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u3067\u3059\uff0e\u3053\n\u306e\u30db\u30b9\u30c8\u306e\u30e6\u30fc\u30b6\u30fc\u306f\u4e16\u754c\u4e2d\u306eMastodon, Pleroma, Friendica, \u306a\u3069\u306e\u30bd\u30d5\u30c8\u30a6\u30a7\u30a2\u3092\n\u5229\u7528\u3057\u3066\u3044\u308b\u4eba\u3005\u3068\u30b3\u30df\u30cb\u30e5\u30b1\u30fc\u30b7\u30e7\u30f3\u3092\u53d6\u308b\u3053\u3068\u304c\u51fa\u6765\u307e\u3059\uff0e\n\n\u3053\u306e\u30b5\u30fc\u30d0\u30fc\u306fsnac \u30bd\u30d5\u30c8\u30a6\u30a7\u30a2\u3092\u5229\u7528\u3057\u3066\u3044\u307e\u3059\uff0e\u81ea\u52d5\u767b\u9332\u30d7\u30ed\u30bb\u30b9\u306f\u3042\u308a\u307e\u305b\u3093\uff0e\n\n\u4ee5\u4e0b\u306e\u30e6\u30fc\u30b6\u30fc\u304c\u3053\u306e\u30b3\u30df\u30e5\u30cb\u30c6\u30a3\u306b\u53c2\u52a0\u3057\u3066\u3044\u307e\u3059:\n\n @info@snac.kagolug.org (info)\n @matoken@snac.kagolug.org (matoken)\n\nThis site is powered by snac.\n\n\n\n\n\n\n\u4eca\u56de\u3068\u308a\u3042\u3048\u305a\u65e5\u672c\u8a9e\u306b\u3057\u307e\u3057\u305f\u304c\uff0cLUG \u306e\u8aac\u660e\u306a\u3069\u3082\u5165\u308c\u305f\u3044\u3068\u3053\u308d\u3067\u3059\uff0e", "date_published": "2025-12-13T18:43:34+09:00", "date_modified": "2025-12-16T06:26:44+09:00", "authors": [ { "name": "matoken", "url": "https://matoken.org/blog/author/matoken/", "avatar": "https://secure.gravatar.com/avatar/38f5f3b575c5eb45cda6aa659bca119ac7a5e16b46565e869d0030e3bd66981d?s=512&d=mm&r=g" } ], "author": { "name": "matoken", "url": "https://matoken.org/blog/author/matoken/", "avatar": "https://secure.gravatar.com/avatar/38f5f3b575c5eb45cda6aa659bca119ac7a5e16b46565e869d0030e3bd66981d?s=512&d=mm&r=g" }, "tags": [ "ActivityPub", "snac", "Debian", "Linux", "trixie" ] }, { "id": "https://matoken.org/blog/?p=4909", "url": "https://matoken.org/blog/2025/12/11/latest-snac-using-debian-backports/", "title": "Debian 13 trixie\u3067backports\u3092\u4f7f\u3044\u6700\u65b0\u306esnac\u3092\u5229\u7528", "content_html": "
\n
\n
\n

\"snac

\n
\n
\n

\u3055\u304f\u3089\u306e\u30ca\u30ec\u30c3\u30b8\u306b\u8efd\u91cfActivityPub Server \u306esnac \u306b\u3064\u3044\u3066\u306e\u8a18\u4e8b\u3092\u5bc4\u7a3f\u3057\u307e\u3057\u305f\uff0e

\n
\n\n
\n

\u3053\u3053\u306b\u66f8\u304b\u306a\u304b\u3063\u305fsnac \u306e\u3053\u3068\u3092\u3044\u304f\u3064\u304b\u66f8\u3044\u3066\u3044\u3053\u3046\u3068\u601d\u3044\u307e\u3059\uff0e
\n\u4eca\u65e5\u306fDebian trixie backports \u306esnac \u30d1\u30c3\u30b1\u30fc\u30b8\u3092\u4f7f\u3046\u3088\u3046\u8a2d\u5b9a\u3057\u3066\u307f\u307e\u3059\uff0e

\n
\n

\n

\n
\n
\n

Debian \u3067\u306esnac2 \u30d1\u30c3\u30b1\u30fc\u30b8\u306e\u30d0\u30fc\u30b8\u30e7\u30f3

\n
\n
\n

snac2 \u306fDebian \u30d1\u30c3\u30b1\u30fc\u30b8\u306b\u306a\u3063\u3066\u3044\u307e\u3059\uff0e\u3057\u304b\u3057\uff0cstable \u306eDebian 13 trixie \u306esnac2 \u30d1\u30c3\u30b1\u30fc\u30b8\u306e\u30d0\u30fc\u30b8\u30e7\u30f3\u306f 2.75-2 \u3067\u5c11\u3057\u53e4\u3044\u30d0\u30fc\u30b8\u30e7\u30f3\u3067\u3059\uff0e
\nstable-backports \u306e\u30d1\u30c3\u30b1\u30fc\u30b8\u306e\u30d0\u30fc\u30b8\u30e7\u30f3\u306f\u73fe\u5728\u306e\u4e0a\u6d41\u306e\u6700\u65b0\u3068\u540c\u3058 2.85 \u306a\u306e\u3067\u3053\u308c\u3092\u5229\u7528\u3057\u3066\u307f\u307e\u3059\uff0e

\n
\n
\n
\n
$ rmadison snac2| grep -v debug\nsnac2      | 2.75-2~bpo12+1 | oldstable-backports       | source, amd64, arm64, armel, armhf, i386, mips64el, mipsel, ppc64el, s390x\nsnac2      | 2.75-2         | stable                    | source, amd64, arm64, armel, armhf, i386, ppc64el, riscv64, s390x\nsnac2      | 2.84-3~bpo13+1 | stable-backports          | source, riscv64\nsnac2      | 2.85-1~bpo13+1 | stable-backports          | source, amd64, arm64, armel, armhf, i386, ppc64el, s390x\nsnac2      | 2.85-1         | testing                   | source, amd64, arm64, armhf, i386, ppc64el, riscv64, s390x\nsnac2      | 2.85-1         | unstable                  | source, amd64, arm64, armhf, i386, ppc64el, riscv64, s390x
\n
\n
\n\n
\n
\n
\n

Debian 13 trixie \u306b backports \u3092\u8a2d\u5b9a

\n
\n
\n

Debian backports \u306fDebian stable \u3067\u4e00\u90e8\u306etesting \u30d1\u30c3\u30b1\u30fc\u30b8\u3092\u5229\u7528\u3067\u304d\u308b\u3088\u3046\u8abf\u6574\u3055\u308c\u305f\u3082\u306e\u3067\u5bfe\u5fdc\u3057\u305f\u30d1\u30c3\u30b1\u30fc\u30b8\u3067\u3042\u308c\u3070stable \u3088\u308a\u65b0\u3057\u3044\u30d0\u30fc\u30b8\u30e7\u30f3\u304c\u5229\u7528\u3067\u304d\u307e\u3059\uff0e

\n
\n\n
\n

\u3053\u308c\u3092\u5229\u7528\u3059\u308b\u305f\u3081\u306b\u306fbackports \u60c5\u5831\u3092 sources.list \u306b\u8ffd\u52a0\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\uff0e
\n\u3053\u3053\u3067\u306f\u516c\u5f0f\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u3068\u540c\u3058 /etc/apt/sources.list.d/debian-backports.sources \u3068\u3057\u3066\u30d5\u30a1\u30a4\u30eb\u3092\u4f5c\u6210\u3057\u307e\u3057\u305f\uff0e

\n
\n
\n
/etc/apt/sources.list.d/debian-backports.sources \u3092\u4f5c\u6210
\n
\n
Types: deb deb-src\nURIs: http://deb.debian.org/debian\nSuites: trixie-backports\nComponents: main\nEnabled: yes\nSigned-By: /usr/share/keyrings/debian-archive-keyring.gpg
\n
\n
\n
\n

\u7d9a\u3044\u3066\u30d1\u30c3\u30b1\u30fc\u30b8\u60c5\u5831\u3092backports \u3092\u542b\u3080\u6700\u65b0\u72b6\u614b\u306b\u3057\u307e\u3059\uff0e

\n
\n
\n
\u30d1\u30c3\u30b1\u30fc\u30b8\u60c5\u5831\u66f4\u65b0
\n
\n
$ sudo apt update
\n
\n
\n
\n

backports \u306e snac \u3092\u5c0e\u5165

\n
\n

backpots \u306e\u30d1\u30c3\u30b1\u30fc\u30b8\u306f\u901a\u5e38\u306e\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3067\u306f\u5c0e\u5165\u3055\u308c\u307e\u305b\u3093\uff0ebackports \u306e\u30d1\u30c3\u30b1\u30fc\u30b8\u3092\u5c0e\u5165\u3059\u308b\u306b\u306f\u30d1\u30c3\u30b1\u30fc\u30b8\u540d\u306b /trixie-backports \u3092\u4ed8\u3051\u3066\u5c0e\u5165\u3057\u307e\u3059\uff0e

\n
\n
\n
\n
$ sudo apt install snac2/trixie-backports
\n
\n
\n
\n

\u3082\u3057\u304f\u306f -t trixie-backports \u3092\u4ed8\u3051\u3066\u5c0e\u5165\u3059\u308b\u3068\u4e0d\u8db3\u3057\u305f\u4f9d\u5b58\u95a2\u4fc2\u3082\u5c0e\u5165\u3055\u308c\u308b\u3088\u3046\u3067\u3059\uff0e

\n
\n
\n
\n
$ sudo apt install -t trixie-backports snac2
\n
\n
\n
\n
\n
$ dpkg-query -W snac2\nsnac2   2.85-1~bpo13+1\n$ snac version\nsnac 2.85 - A simple, minimalistic ActivityPub instance\nCopyright (c) 2022 - 2025 grunfink et al. / MIT license\n\nupgrade {basedir}                    Upgrade to a new version
\n
\n
\n
\n

\u5c0e\u5165\u3055\u308c\u305fbackports \u30d1\u30c3\u30b1\u30fc\u30b8\u306f\u901a\u5e38\u3068\u540c\u3058\u512a\u5148\u5ea6100\u306b\u56fa\u5b9a\u3055\u308c\u308b\u306e\u3067\u5c0e\u5165\u5f8c\u306f\u3044\u3064\u3082\u306e apt upgrade \u3067backports \u30d1\u30c3\u30b1\u30fc\u30b8\u3082\u66f4\u65b0\u3055\u308c\u307e\u3059\uff0e\u3064\u307e\u308a\u901a\u5e38\u306e\u904b\u7528\u3067\u5927\u4e08\u592b\u3067\u3059\uff0e

\n
\n
\n
\n
\n
\n

snac \u30a2\u30c3\u30d7\u30b0\u30ec\u30fc\u30c9\u64cd\u4f5c

\n
\n
\n

snac \u306e\u30d0\u30fc\u30b8\u30e7\u30f3\u30a2\u30c3\u30d7\u6642\u306b\u30c7\u30a3\u30b9\u30af\u69cb\u6210\u304c\u5909\u308f\u308b\u3053\u3068\u304c\u3042\u308a\uff0c\u305d\u306e\u5834\u5408snac \u304c\u8d77\u52d5\u3057\u306a\u3044\u3088\u3046\u3067\u3059\uff0e\u305d\u306e\u5834\u5408snac \u306e upgrade \u30b3\u30de\u30f3\u30c9\u3092\u5b9f\u884c\u3059\u308b\u5fc5\u8981\u304c\u3042\u308b\u3088\u3046\u3067\u3059\uff0e
\n\u81ea\u5206\u306f\u5ff5\u306e\u70ba\u6bce\u56de\u5b9f\u884c\u3057\u3066\u3044\u307e\u3059\uff0e

\n
\n
\n
snac(8)\u3088\u308a
\n
\n
\n
\n
Upgrading to a new version\n    Sometimes, the data storage disk layout changes between versions. If there is such a change, snac will refuse to run and require an upgrade. Do this by running
\n
\n
\n
\n
\n
snac upgrade $HOME/snac-data
\n
\n
\n
\n
\n
Take special care to execute this upgrade operation without any snac processes serving on the same folder. You can break everything. I know this because Tyler knows this.
\n
\n
\n
\n
\n
\n
\n
$ snac | grep upgrade\nupgrade {basedir}                    Upgrade to a new version
\n
\n
\n
\n

upgrade \u30b3\u30de\u30f3\u30c9\u306f\u30c7\u30fc\u30e2\u30f3\u304c\u8d77\u52d5\u3057\u3066\u3044\u306a\u3044\u72b6\u614b\u3067\u5b9f\u884c\u3059\u308b\u5fc5\u8981\u304c\u3042\u308b\u306e\u3067\u4e00\u65e6snac \u3092\u505c\u6b62\u3057\u3066\u304b\u3089\u5b9f\u884c\uff0c\u305d\u306e\u5f8csnac \u3092\u8d77\u52d5\u3057\u307e\u3059\uff0e

\n
\n
\n
\n
$ sudo service snac2 stop (1)\n$ sudo -u debian-snac snac upgrade /var/lib/snac2/ (2)\n19:45:50 Linux sandbox not compiled in\n19:45:50 OK\n$ sudo service snac2 start (3)\n$ w3m -dump https://snac.kagolug.org/info | tail -1 (4)\nabout this site - powered by snac/2.83
\n
\n
\n
\n
    \n
  1. \n

    snac \u505c\u6b62

    \n
  2. \n
  3. \n

    snac upgrade

    \n
  4. \n
  5. \n

    snac \u8d77\u52d5

    \n
  6. \n
  7. \n

    \u30d0\u30fc\u30b8\u30e7\u30f3\u78ba\u8a8d

    \n
  8. \n
\n
\n
\n

\u3068\u3044\u3046\u611f\u3058\u3067Debian stable \u3067\u3082\u6700\u65b0\u306esnac \u304c\u5229\u7528\u3067\u304d\u3066\u3044\u307e\u3059\uff0e\u4e00\u65e6\u8a2d\u5b9a\u3059\u308b\u3068\u901a\u5e38\u306eDebian \u30d1\u30c3\u30b1\u30fc\u30b8\u66f4\u65b0\u64cd\u4f5c\u3067\u8ffd\u5f93\u3057\u3066\u304f\u308c\u308b\u306e\u3067\u904b\u7528\u3082\u3044\u3064\u3082\u3068\u5909\u308f\u308a\u307e\u305b\u3093\uff0e\u66f4\u65b0\u30bf\u30a4\u30df\u30f3\u30b0\u3082\u516c\u5f0f\u3068\u898b\u6bd4\u3079\u308b\u3068\u7d50\u69cb\u3059\u3050\u5bfe\u5fdc\u3057\u3066\u304f\u308c\u3066\u3044\u308b\u3088\u3046\u3067\u3059\uff0e

\n
\n\n
\n
\n", "content_text": "\u3055\u304f\u3089\u306e\u30ca\u30ec\u30c3\u30b8\u306b\u8efd\u91cfActivityPub Server \u306esnac \u306b\u3064\u3044\u3066\u306e\u8a18\u4e8b\u3092\u5bc4\u7a3f\u3057\u307e\u3057\u305f\uff0e\n\n\n\n\n\u3055\u304f\u3089\u30a4\u30f3\u30bf\u30fc\u30cd\u30c3\u30c8\u306e\u3055\u304f\u3089\u306e\u30ca\u30ec\u30c3\u30b8\u306bsnac\u306e\u8a18\u4e8b\u3092\u5bc4\u7a3f \u2013 matoken’s blog\n\n\n\n\n\u3053\u3053\u306b\u66f8\u304b\u306a\u304b\u3063\u305fsnac \u306e\u3053\u3068\u3092\u3044\u304f\u3064\u304b\u66f8\u3044\u3066\u3044\u3053\u3046\u3068\u601d\u3044\u307e\u3059\uff0e\n\u4eca\u65e5\u306fDebian trixie backports \u306esnac \u30d1\u30c3\u30b1\u30fc\u30b8\u3092\u4f7f\u3046\u3088\u3046\u8a2d\u5b9a\u3057\u3066\u307f\u307e\u3059\uff0e\n\n\n\n\n\nDebian \u3067\u306esnac2 \u30d1\u30c3\u30b1\u30fc\u30b8\u306e\u30d0\u30fc\u30b8\u30e7\u30f3\n\n\nsnac2 \u306fDebian \u30d1\u30c3\u30b1\u30fc\u30b8\u306b\u306a\u3063\u3066\u3044\u307e\u3059\uff0e\u3057\u304b\u3057\uff0cstable \u306eDebian 13 trixie \u306esnac2 \u30d1\u30c3\u30b1\u30fc\u30b8\u306e\u30d0\u30fc\u30b8\u30e7\u30f3\u306f 2.75-2 \u3067\u5c11\u3057\u53e4\u3044\u30d0\u30fc\u30b8\u30e7\u30f3\u3067\u3059\uff0e\nstable-backports \u306e\u30d1\u30c3\u30b1\u30fc\u30b8\u306e\u30d0\u30fc\u30b8\u30e7\u30f3\u306f\u73fe\u5728\u306e\u4e0a\u6d41\u306e\u6700\u65b0\u3068\u540c\u3058 2.85 \u306a\u306e\u3067\u3053\u308c\u3092\u5229\u7528\u3057\u3066\u307f\u307e\u3059\uff0e\n\n\n\n$ rmadison snac2| grep -v debug\nsnac2 | 2.75-2~bpo12+1 | oldstable-backports | source, amd64, arm64, armel, armhf, i386, mips64el, mipsel, ppc64el, s390x\nsnac2 | 2.75-2 | stable | source, amd64, arm64, armel, armhf, i386, ppc64el, riscv64, s390x\nsnac2 | 2.84-3~bpo13+1 | stable-backports | source, riscv64\nsnac2 | 2.85-1~bpo13+1 | stable-backports | source, amd64, arm64, armel, armhf, i386, ppc64el, s390x\nsnac2 | 2.85-1 | testing | source, amd64, arm64, armhf, i386, ppc64el, riscv64, s390x\nsnac2 | 2.85-1 | unstable | source, amd64, arm64, armhf, i386, ppc64el, riscv64, s390x\n\n\n\n\n\nDebian — \u30d1\u30c3\u30b1\u30fc\u30b8\u691c\u7d22\u7d50\u679c — snac2\n\n\n\n\n\n\nDebian 13 trixie \u306b backports \u3092\u8a2d\u5b9a\n\n\nDebian backports \u306fDebian stable \u3067\u4e00\u90e8\u306etesting \u30d1\u30c3\u30b1\u30fc\u30b8\u3092\u5229\u7528\u3067\u304d\u308b\u3088\u3046\u8abf\u6574\u3055\u308c\u305f\u3082\u306e\u3067\u5bfe\u5fdc\u3057\u305f\u30d1\u30c3\u30b1\u30fc\u30b8\u3067\u3042\u308c\u3070stable \u3088\u308a\u65b0\u3057\u3044\u30d0\u30fc\u30b8\u30e7\u30f3\u304c\u5229\u7528\u3067\u304d\u307e\u3059\uff0e\n\n\n\n\nDebian Backports\n\n\nInstructions\n\n\n\n\n\u3053\u308c\u3092\u5229\u7528\u3059\u308b\u305f\u3081\u306b\u306fbackports \u60c5\u5831\u3092 sources.list \u306b\u8ffd\u52a0\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\uff0e\n\u3053\u3053\u3067\u306f\u516c\u5f0f\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u3068\u540c\u3058 /etc/apt/sources.list.d/debian-backports.sources \u3068\u3057\u3066\u30d5\u30a1\u30a4\u30eb\u3092\u4f5c\u6210\u3057\u307e\u3057\u305f\uff0e\n\n\n/etc/apt/sources.list.d/debian-backports.sources \u3092\u4f5c\u6210\n\nTypes: deb deb-src\nURIs: http://deb.debian.org/debian\nSuites: trixie-backports\nComponents: main\nEnabled: yes\nSigned-By: /usr/share/keyrings/debian-archive-keyring.gpg\n\n\n\n\u7d9a\u3044\u3066\u30d1\u30c3\u30b1\u30fc\u30b8\u60c5\u5831\u3092backports \u3092\u542b\u3080\u6700\u65b0\u72b6\u614b\u306b\u3057\u307e\u3059\uff0e\n\n\n\u30d1\u30c3\u30b1\u30fc\u30b8\u60c5\u5831\u66f4\u65b0\n\n$ sudo apt update\n\n\n\nbackports \u306e snac \u3092\u5c0e\u5165\n\nbackpots \u306e\u30d1\u30c3\u30b1\u30fc\u30b8\u306f\u901a\u5e38\u306e\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3067\u306f\u5c0e\u5165\u3055\u308c\u307e\u305b\u3093\uff0ebackports \u306e\u30d1\u30c3\u30b1\u30fc\u30b8\u3092\u5c0e\u5165\u3059\u308b\u306b\u306f\u30d1\u30c3\u30b1\u30fc\u30b8\u540d\u306b /trixie-backports \u3092\u4ed8\u3051\u3066\u5c0e\u5165\u3057\u307e\u3059\uff0e\n\n\n\n$ sudo apt install snac2/trixie-backports\n\n\n\n\u3082\u3057\u304f\u306f -t trixie-backports \u3092\u4ed8\u3051\u3066\u5c0e\u5165\u3059\u308b\u3068\u4e0d\u8db3\u3057\u305f\u4f9d\u5b58\u95a2\u4fc2\u3082\u5c0e\u5165\u3055\u308c\u308b\u3088\u3046\u3067\u3059\uff0e\n\n\n\n$ sudo apt install -t trixie-backports snac2\n\n\n\n\n$ dpkg-query -W snac2\nsnac2 2.85-1~bpo13+1\n$ snac version\nsnac 2.85 - A simple, minimalistic ActivityPub instance\nCopyright (c) 2022 - 2025 grunfink et al. / MIT license\n\nupgrade {basedir} Upgrade to a new version\n\n\n\n\u5c0e\u5165\u3055\u308c\u305fbackports \u30d1\u30c3\u30b1\u30fc\u30b8\u306f\u901a\u5e38\u3068\u540c\u3058\u512a\u5148\u5ea6100\u306b\u56fa\u5b9a\u3055\u308c\u308b\u306e\u3067\u5c0e\u5165\u5f8c\u306f\u3044\u3064\u3082\u306e apt upgrade \u3067backports \u30d1\u30c3\u30b1\u30fc\u30b8\u3082\u66f4\u65b0\u3055\u308c\u307e\u3059\uff0e\u3064\u307e\u308a\u901a\u5e38\u306e\u904b\u7528\u3067\u5927\u4e08\u592b\u3067\u3059\uff0e\n\n\n\n\n\nsnac \u30a2\u30c3\u30d7\u30b0\u30ec\u30fc\u30c9\u64cd\u4f5c\n\n\nsnac \u306e\u30d0\u30fc\u30b8\u30e7\u30f3\u30a2\u30c3\u30d7\u6642\u306b\u30c7\u30a3\u30b9\u30af\u69cb\u6210\u304c\u5909\u308f\u308b\u3053\u3068\u304c\u3042\u308a\uff0c\u305d\u306e\u5834\u5408snac \u304c\u8d77\u52d5\u3057\u306a\u3044\u3088\u3046\u3067\u3059\uff0e\u305d\u306e\u5834\u5408snac \u306e upgrade \u30b3\u30de\u30f3\u30c9\u3092\u5b9f\u884c\u3059\u308b\u5fc5\u8981\u304c\u3042\u308b\u3088\u3046\u3067\u3059\uff0e\n\u81ea\u5206\u306f\u5ff5\u306e\u70ba\u6bce\u56de\u5b9f\u884c\u3057\u3066\u3044\u307e\u3059\uff0e\n\n\nsnac(8)\u3088\u308a\n\n\n\nUpgrading to a new version\n Sometimes, the data storage disk layout changes between versions. If there is such a change, snac will refuse to run and require an upgrade. Do this by running\n\n\n\n\nsnac upgrade $HOME/snac-data\n\n\n\n\nTake special care to execute this upgrade operation without any snac processes serving on the same folder. You can break everything. I know this because Tyler knows this.\n\n\n\n\n\n\n$ snac | grep upgrade\nupgrade {basedir} Upgrade to a new version\n\n\n\nupgrade \u30b3\u30de\u30f3\u30c9\u306f\u30c7\u30fc\u30e2\u30f3\u304c\u8d77\u52d5\u3057\u3066\u3044\u306a\u3044\u72b6\u614b\u3067\u5b9f\u884c\u3059\u308b\u5fc5\u8981\u304c\u3042\u308b\u306e\u3067\u4e00\u65e6snac \u3092\u505c\u6b62\u3057\u3066\u304b\u3089\u5b9f\u884c\uff0c\u305d\u306e\u5f8csnac \u3092\u8d77\u52d5\u3057\u307e\u3059\uff0e\n\n\n\n$ sudo service snac2 stop (1)\n$ sudo -u debian-snac snac upgrade /var/lib/snac2/ (2)\n19:45:50 Linux sandbox not compiled in\n19:45:50 OK\n$ sudo service snac2 start (3)\n$ w3m -dump https://snac.kagolug.org/info | tail -1 (4)\nabout this site - powered by snac/2.83\n\n\n\n\n\nsnac \u505c\u6b62\n\n\nsnac upgrade\n\n\nsnac \u8d77\u52d5\n\n\n\u30d0\u30fc\u30b8\u30e7\u30f3\u78ba\u8a8d\n\n\n\n\n\u3068\u3044\u3046\u611f\u3058\u3067Debian stable \u3067\u3082\u6700\u65b0\u306esnac \u304c\u5229\u7528\u3067\u304d\u3066\u3044\u307e\u3059\uff0e\u4e00\u65e6\u8a2d\u5b9a\u3059\u308b\u3068\u901a\u5e38\u306eDebian \u30d1\u30c3\u30b1\u30fc\u30b8\u66f4\u65b0\u64cd\u4f5c\u3067\u8ffd\u5f93\u3057\u3066\u304f\u308c\u308b\u306e\u3067\u904b\u7528\u3082\u3044\u3064\u3082\u3068\u5909\u308f\u308a\u307e\u305b\u3093\uff0e\u66f4\u65b0\u30bf\u30a4\u30df\u30f3\u30b0\u3082\u516c\u5f0f\u3068\u898b\u6bd4\u3079\u308b\u3068\u7d50\u69cb\u3059\u3050\u5bfe\u5fdc\u3057\u3066\u304f\u308c\u3066\u3044\u308b\u3088\u3046\u3067\u3059\uff0e\n\n\n\n\n\u30bf\u30b0 – grunfink/snac2 – Codeberg.org\n\n\nDebian Package Tracker", "date_published": "2025-12-11T18:35:57+09:00", "date_modified": "2025-12-11T18:35:58+09:00", "authors": [ { "name": "matoken", "url": "https://matoken.org/blog/author/matoken/", "avatar": "https://secure.gravatar.com/avatar/38f5f3b575c5eb45cda6aa659bca119ac7a5e16b46565e869d0030e3bd66981d?s=512&d=mm&r=g" } ], "author": { "name": "matoken", "url": "https://matoken.org/blog/author/matoken/", "avatar": "https://secure.gravatar.com/avatar/38f5f3b575c5eb45cda6aa659bca119ac7a5e16b46565e869d0030e3bd66981d?s=512&d=mm&r=g" }, "tags": [ "ActivityPub", "Debian", "snac", "Linux", "trixie" ] }, { "id": "https://matoken.org/blog/?p=4889", "url": "https://matoken.org/blog/2025/12/10/snac-emoji/", "title": "snac \u3067\u30ab\u30b9\u30bf\u30e0\u7d75\u6587\u5b57\u3092\u5229\u7528", "content_html": "
\n

\"snac

\n
\n
\n

\u3055\u304f\u3089\u306e\u30ca\u30ec\u30c3\u30b8\u306b\u8efd\u91cfActivityPub Server \u306esnac \u306b\u3064\u3044\u3066\u306e\u8a18\u4e8b\u3092\u5bc4\u7a3f\u3057\u307e\u3057\u305f\uff0e

\n
\n
\n\n
\n
\n

\u3053\u3053\u306b\u66f8\u304b\u306a\u304b\u3063\u305fsnac \u306e\u3053\u3068\u3092\u3044\u304f\u3064\u304b\u66f8\u3044\u3066\u3044\u3053\u3046\u3068\u601d\u3044\u307e\u3059\uff0e
\n\u4eca\u65e5\u306f\u30ab\u30b9\u30bf\u30e0\u7d75\u6587\u5b57\u306b\u3064\u3044\u3066\uff0e

\n
\n

\n
\n

ActivityPub \u5404\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u3067\u3088\u304f\u4f7f\u308f\u308c\u3066\u3044\u308b\u30ab\u30b9\u30bf\u30e0\u7d75\u6587\u5b57\u3068\u3044\u3046\u3082\u306e\u304c\u3042\u308a\u307e\u3059\uff0emisskey.io \u306a\u3093\u304b\u3067\u306f\u7279\u306b\u591a\u7528\u3055\u308c\u3066\u3044\u308b\u3088\u3046\u3067\u3059\uff0e
\nsnac \u3082\u30ab\u30b9\u30bf\u30e0\u7d75\u6587\u5b57\u306b\u5bfe\u5fdc\u3057\u3066\u3044\u307e\u3059\uff0e

\n
\n
\n

\u65e2\u5b9a\u5024\u3067\u8a2d\u5b9a\u3055\u308c\u3066\u3044\u308b\u3082\u306e\u3068\u3057\u3066\u4f8b\u3048\u3070toot \u672c\u6587\u4e2d\u306b :-) \u3068\u5165\u529b\u3059\u308b\u3053\u3068\u3067\u300c🙂\u300d\u304c\uff0c :beer: \u3068\u5165\u529b\u3059\u308b\u3053\u3068\u3067\u300c🍺\u300d\u304c\u8868\u793a\u3055\u308c\u307e\u3059\uff0e\u4ed6\u306b :shrug2: \u3067\u300c¯\\_(ツ)_/¯\u300d\u306a\u3093\u3067\u3082\u306e\u3082\uff0e\u3067\u3082\u3053\u306e\u3042\u305f\u308a\u306eUnicode\u7d75\u6587\u5b57\u306a\u3069\u306f\u65e5\u672c\u8a9e\u5165\u529b\u74b0\u5883\u304c\u3042\u308b\u3068\u3042\u307e\u308a\u6709\u308a\u96e3\u307f\u306f\u611f\u3058\u306a\u305d\u3046\u3067\u3059\uff0e\u3067\u3082\u753b\u50cf\u30d5\u30a1\u30a4\u30eb\u3082\u5229\u7528\u3067\u304d\u307e\u3059\uff0e

\n
\n
\n

\u81ea\u5206\u3067\u7528\u610f\u3057\u305f\u7d75\u6587\u5b57\u3092\u8ffd\u52a0\u3057\u3066\u307f\u307e\u3057\u3087\u3046\uff0e

\n
\n
\n

\u30ab\u30b9\u30bf\u30e0\u7d75\u6587\u5b57\u3092\u8ffd\u52a0\u3059\u308b\u306b\u306fsnac \u306e\u30c7\u30fc\u30bf\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u306b\u3042\u308b emojis.json \u3092\u7de8\u96c6\u3059\u308b\u3053\u3068\u3067\u30ab\u30b9\u30bf\u30de\u30a4\u30ba\u3067\u304d\u307e\u3059\uff0e

\n
\n
\n

emojis.json \u306e\u65e2\u5b9a\u5024\u306f\u3053\u3093\u306a\u611f\u3058\u3067\u3059\uff0e
\ntoot \u672c\u6587\u4e2d\u306b\u8a18\u8ff0\u3059\u308bkey \u3068\uff0c\u5b9f\u969b\u306b\u8a55\u3055\u308c\u308b\u5024\u306e\u7d44\u307f\u5408\u308f\u305b\u3067\u3059\uff0ekey \u306f\u4fdd\u7ba1\u6027\u3092\u4fdd\u3064\u305f\u3081\u306b : \u3067\u56f2\u3080\u3053\u3068\u304c\u63a8\u5968\u3055\u308c\u3066\u3044\u307e\u3059\uff0e\u5024\u306f\u4ee5\u4e0b\u3067\u306f\u6570\u5024\u6587\u5b57\u53c2\u7167\u53ca\u3073\u6587\u5b57\u5217\u3067\u3059\u304c\uff0cURL \u3092\u6307\u5b9a\u3059\u308b\u3053\u3068\u3082\u51fa\u6765\u307e\u3059\uff0e

\n
\n
\n
\n
{\n    \":-)\": \"&#128578;\",\n    \":-D\": \"&#128512;\",\n    \"X-D\": \"&#128518;\",\n    \";-)\": \"&#128521;\",\n    \"B-)\": \"&#128526;\",\n    \">:-(\": \"&#128545;\",\n    \":-(\": \"&#128542;\",\n    \":-*\": \"&#128536;\",\n    \":-/\": \"&#128533;\",\n    \"8-o\": \"&#128562;\",\n    \"%-)\": \"&#129322;\",\n    \":_(\": \"&#128546;\",\n    \":-|\": \"&#128528;\",\n    \"<3\": \"&#10084;&#65039;\",\n    \":facepalm:\": \"&#129318;\",\n    \":shrug:\": \"&#129335;\",\n    \":shrug2:\": \"&#175;\\\\_(&#12484;)_/&#175;\",\n    \":eyeroll:\": \"&#128580;\",\n    \":beer:\": \"&#127866;\",\n    \":beers:\": \"&#127867;\",\n    \":munch:\": \"&#128561;\",\n    \":thumb:\": \"&#128077;\"\n}
\n
\n
\n
\n

\u3053\u3053\u306bsnac \u30c7\u30d5\u30a9\u30eb\u30c8\u30a2\u30a4\u30b3\u30f3\u3092\u8ffd\u52a0\u3057\u3066\u307f\u307e\u3059\uff0esnac \u306e\u30d9\u30fc\u30b9url \u306e\u4e0b\u306e /susie.png (kagolug \u3067\u306f https://snac.kagolug.org/susie.png )\u306b\u30a2\u30af\u30bb\u30b9\u3059\u308b\u3068snac \u30c7\u30d5\u30a9\u30eb\u30c8\u30a2\u30a4\u30b3\u30f3\u306esusie \u304c\u8868\u793a\u3055\u308c\u307e\u3059\uff0e\u3053\u308c\u3092\u5229\u7528\u3057\u3066\u307f\u307e\u3059\uff0e

\n
\n
\n

emojis.json \u3092\u4ee5\u4e0b\u306e\u3088\u3046\u306b\u66f8\u304d\u63db\u3048\u307e\u3059\uff0e

\n
\n
\n
\n
     \":beer:\": \"&#127866;\",\n     \":beers:\": \"&#127867;\",\n     \":munch:\": \"&#128561;\",\n-    \":thumb:\": \"&#128077;\"\n+    \":thumb:\": \"&#128077;\",\n+    \":susie:\": \"https://snac.kagolug.org/susie.png\"\n }
\n
\n
\n
\n\n\n\n\n\n
\n
Tip
\n
\n
\n

emojis.json \u306f\u4fdd\u5b58\u3057\u305f\u6642\u70b9\u3067\u5185\u5bb9\u304c\u53cd\u6620\u3055\u308c\u307e\u3059\uff0e\u4e2d\u9014\u534a\u7aef\u306a\u72b6\u614b\u3067\u4fdd\u5b58\u3059\u308b\u3068\u5168\u3066\u306e\u30ab\u30b9\u30bf\u30e0\u7d75\u6587\u5b57\u304c\u5229\u7528\u3067\u304d\u306a\u304f\u306a\u3063\u305f\u308a\u3059\u308b\u306e\u3067\u6ce8\u610f\u3057\u307e\u3057\u3087\u3046\uff0e

\n
\n
\n
\n
\n

\u3053\u308c\u3067 :susie: \u3068\u5165\u529b\u3059\u308b\u3053\u3068\u3067 \"snac \u304c\u8868\u793a\u3055\u308c\u308b\u3088\u3046\u306b\u306a\u308a\u307e\u3059\uff0e

\n
\n
\n

\u66f4\u306b\u30da\u30f3\u30ae\u30f3\u306eTux \u3068\u30bf\u30b9\u30de\u30cb\u30a2\u30c7\u30d3\u30eb\u306eTuz \u3092\u8ffd\u52a0\u3057\u3066\u307f\u307e\u3059\uff0e
\n\u30a2\u30a4\u30b3\u30f3\u306e\u753b\u50cf\u30d5\u30a1\u30a4\u30eb\u3092\u7528\u610f\u3057\uff0c\u9759\u7684\u74b0\u5883\u306b\u8a2d\u7f6e\uff0c\u305d\u306eurl \u3092emojis.json \u30d5\u30a1\u30a4\u30eb\u306b\u8a18\u8ff0\u3057\u307e\u3059\uff0e
\n\u4eca\u56de\u4ee5\u4e0b\u306e\u3088\u3046\u306b\u306a\u308a\u307e\u3057\u305f\uff0e

\n
\n
\n
\n
     \":beer:\": \"&#127866;\",\n     \":beers:\": \"&#127867;\",\n     \":munch:\": \"&#128561;\",\n-    \":thumb:\": \"&#128077;\"\n+    \":thumb:\": \"&#128077;\",\n+    \":susie:\": \"https://snac.kagolug.org/susie.png\",\n+    \":tux:\": \"https://www.kagolug.org/snac-emoji/Tux.png\",\n+    \":tuz:\": \"https://www.kagolug.org/snac-emoji/Tuz.png\"\n }
\n
\n
\n
\n

\u3053\u308c\u3067 :susie:, :tux:, :tuz: \u306e3\u3064\u306e\u7d75\u6587\u5b57\u304c\u5229\u7528\u3067\u304d\u308b\u3088\u3046\u306b\u306a\u308a\u307e\u3057\u305f\uff0e
\ntoot \u3057\u3066\u78ba\u8a8d\u3067\u304d\u307e\u3059\uff0e
\n\u3082\u3057\u304f\u306f\u4ee5\u4e0b\u306e\u3088\u3046\u306a\u30b5\u30a4\u30c8\u3067Mastodon \u30ab\u30b9\u30bf\u30e0\u7d75\u6587\u5b57API\u7d4c\u7531\u3067\u7d75\u6587\u5b57\u4e00\u89a7\u3092\u78ba\u8a8d\u3059\u308b\u3053\u3068\u3082\u51fa\u6765\u307e\u3059\uff0e

\n
\n
\n\n
\n
\n

\"snac]

\n
\n
\n

snac \u306e\u30ab\u30b9\u30bf\u30e0\u7d75\u6587\u5b57\u306b\u3064\u3044\u3066\u306e\u8a73\u7d30\u306fsnac(8) \u3092\u53c2\u7167\u3057\u3066\u304f\u3060\u3055\u3044\uff0e

\n
\n
\n
\n
\n
\n
Custom Emojis\n    From version 2.51, support for customized Emojis in posts is available (previously, they were hardcoded). Emojis are read from the emojis.json file in the instance base directory, as a JSON object of key / value pairs (if this file\n    does not exist, it will be created with the predefined set). Each key in the object contains the text to be found (e.g., the :-) for a smiling face), and its associated value, the text string that will replace it (in  this  example\n    case, the HTML entity for the Unicode codepoint for the smiley or the Emoji itself as text).
\n
\n
\n
\n
\n
Emoji values can also be URLs to image files; in this case, they will not be substituted in the post content, but added to the 'tag' array as an ActivityPub standard 'Emoji' object (it's recommendable that the Emoji key be enclosed\nin colons for maximum compatibility with other ActivityPub implementations, like e.g. :happydoggo:). These images can be served from an external source or from the static directory of the instance admin.
\n
\n
\n
\n
\n
If you want to disable any Emoji substitution, change the file to contain just an empty JSON object ({}).
\n
\n
\n
\n
\n", "content_text": "\u3055\u304f\u3089\u306e\u30ca\u30ec\u30c3\u30b8\u306b\u8efd\u91cfActivityPub Server \u306esnac \u306b\u3064\u3044\u3066\u306e\u8a18\u4e8b\u3092\u5bc4\u7a3f\u3057\u307e\u3057\u305f\uff0e\n\n\n\n\n\u3055\u304f\u3089\u30a4\u30f3\u30bf\u30fc\u30cd\u30c3\u30c8\u306e\u3055\u304f\u3089\u306e\u30ca\u30ec\u30c3\u30b8\u306bsnac\u306e\u8a18\u4e8b\u3092\u5bc4\u7a3f \u2013 matoken’s blog\n\n\n\n\n\u3053\u3053\u306b\u66f8\u304b\u306a\u304b\u3063\u305fsnac \u306e\u3053\u3068\u3092\u3044\u304f\u3064\u304b\u66f8\u3044\u3066\u3044\u3053\u3046\u3068\u601d\u3044\u307e\u3059\uff0e\n\u4eca\u65e5\u306f\u30ab\u30b9\u30bf\u30e0\u7d75\u6587\u5b57\u306b\u3064\u3044\u3066\uff0e\n\n\n\nActivityPub \u5404\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u3067\u3088\u304f\u4f7f\u308f\u308c\u3066\u3044\u308b\u30ab\u30b9\u30bf\u30e0\u7d75\u6587\u5b57\u3068\u3044\u3046\u3082\u306e\u304c\u3042\u308a\u307e\u3059\uff0emisskey.io \u306a\u3093\u304b\u3067\u306f\u7279\u306b\u591a\u7528\u3055\u308c\u3066\u3044\u308b\u3088\u3046\u3067\u3059\uff0e\nsnac \u3082\u30ab\u30b9\u30bf\u30e0\u7d75\u6587\u5b57\u306b\u5bfe\u5fdc\u3057\u3066\u3044\u307e\u3059\uff0e\n\n\n\u65e2\u5b9a\u5024\u3067\u8a2d\u5b9a\u3055\u308c\u3066\u3044\u308b\u3082\u306e\u3068\u3057\u3066\u4f8b\u3048\u3070toot \u672c\u6587\u4e2d\u306b :-) \u3068\u5165\u529b\u3059\u308b\u3053\u3068\u3067\u300c🙂\u300d\u304c\uff0c :beer: \u3068\u5165\u529b\u3059\u308b\u3053\u3068\u3067\u300c🍺\u300d\u304c\u8868\u793a\u3055\u308c\u307e\u3059\uff0e\u4ed6\u306b :shrug2: \u3067\u300c¯\\_(ツ)_/¯\u300d\u306a\u3093\u3067\u3082\u306e\u3082\uff0e\u3067\u3082\u3053\u306e\u3042\u305f\u308a\u306eUnicode\u7d75\u6587\u5b57\u306a\u3069\u306f\u65e5\u672c\u8a9e\u5165\u529b\u74b0\u5883\u304c\u3042\u308b\u3068\u3042\u307e\u308a\u6709\u308a\u96e3\u307f\u306f\u611f\u3058\u306a\u305d\u3046\u3067\u3059\uff0e\u3067\u3082\u753b\u50cf\u30d5\u30a1\u30a4\u30eb\u3082\u5229\u7528\u3067\u304d\u307e\u3059\uff0e\n\n\n\u81ea\u5206\u3067\u7528\u610f\u3057\u305f\u7d75\u6587\u5b57\u3092\u8ffd\u52a0\u3057\u3066\u307f\u307e\u3057\u3087\u3046\uff0e\n\n\n\u30ab\u30b9\u30bf\u30e0\u7d75\u6587\u5b57\u3092\u8ffd\u52a0\u3059\u308b\u306b\u306fsnac \u306e\u30c7\u30fc\u30bf\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u306b\u3042\u308b emojis.json \u3092\u7de8\u96c6\u3059\u308b\u3053\u3068\u3067\u30ab\u30b9\u30bf\u30de\u30a4\u30ba\u3067\u304d\u307e\u3059\uff0e\n\n\nemojis.json \u306e\u65e2\u5b9a\u5024\u306f\u3053\u3093\u306a\u611f\u3058\u3067\u3059\uff0e\ntoot \u672c\u6587\u4e2d\u306b\u8a18\u8ff0\u3059\u308bkey \u3068\uff0c\u5b9f\u969b\u306b\u8a55\u3055\u308c\u308b\u5024\u306e\u7d44\u307f\u5408\u308f\u305b\u3067\u3059\uff0ekey \u306f\u4fdd\u7ba1\u6027\u3092\u4fdd\u3064\u305f\u3081\u306b : \u3067\u56f2\u3080\u3053\u3068\u304c\u63a8\u5968\u3055\u308c\u3066\u3044\u307e\u3059\uff0e\u5024\u306f\u4ee5\u4e0b\u3067\u306f\u6570\u5024\u6587\u5b57\u53c2\u7167\u53ca\u3073\u6587\u5b57\u5217\u3067\u3059\u304c\uff0cURL \u3092\u6307\u5b9a\u3059\u308b\u3053\u3068\u3082\u51fa\u6765\u307e\u3059\uff0e\n\n\n\n{\n \":-)\": \"&#128578;\",\n \":-D\": \"&#128512;\",\n \"X-D\": \"&#128518;\",\n \";-)\": \"&#128521;\",\n \"B-)\": \"&#128526;\",\n \">:-(\": \"&#128545;\",\n \":-(\": \"&#128542;\",\n \":-*\": \"&#128536;\",\n \":-/\": \"&#128533;\",\n \"8-o\": \"&#128562;\",\n \"%-)\": \"&#129322;\",\n \":_(\": \"&#128546;\",\n \":-|\": \"&#128528;\",\n \"<3\": \"&#10084;&#65039;\",\n \":facepalm:\": \"&#129318;\",\n \":shrug:\": \"&#129335;\",\n \":shrug2:\": \"&#175;\\\\_(&#12484;)_/&#175;\",\n \":eyeroll:\": \"&#128580;\",\n \":beer:\": \"&#127866;\",\n \":beers:\": \"&#127867;\",\n \":munch:\": \"&#128561;\",\n \":thumb:\": \"&#128077;\"\n}\n\n\n\n\u3053\u3053\u306bsnac \u30c7\u30d5\u30a9\u30eb\u30c8\u30a2\u30a4\u30b3\u30f3\u3092\u8ffd\u52a0\u3057\u3066\u307f\u307e\u3059\uff0esnac \u306e\u30d9\u30fc\u30b9url \u306e\u4e0b\u306e /susie.png (kagolug \u3067\u306f https://snac.kagolug.org/susie.png )\u306b\u30a2\u30af\u30bb\u30b9\u3059\u308b\u3068snac \u30c7\u30d5\u30a9\u30eb\u30c8\u30a2\u30a4\u30b3\u30f3\u306esusie \u304c\u8868\u793a\u3055\u308c\u307e\u3059\uff0e\u3053\u308c\u3092\u5229\u7528\u3057\u3066\u307f\u307e\u3059\uff0e\n\n\nemojis.json \u3092\u4ee5\u4e0b\u306e\u3088\u3046\u306b\u66f8\u304d\u63db\u3048\u307e\u3059\uff0e\n\n\n\n \":beer:\": \"&#127866;\",\n \":beers:\": \"&#127867;\",\n \":munch:\": \"&#128561;\",\n- \":thumb:\": \"&#128077;\"\n+ \":thumb:\": \"&#128077;\",\n+ \":susie:\": \"https://snac.kagolug.org/susie.png\"\n }\n\n\n\n\n\n\nTip\n\n\n\nemojis.json \u306f\u4fdd\u5b58\u3057\u305f\u6642\u70b9\u3067\u5185\u5bb9\u304c\u53cd\u6620\u3055\u308c\u307e\u3059\uff0e\u4e2d\u9014\u534a\u7aef\u306a\u72b6\u614b\u3067\u4fdd\u5b58\u3059\u308b\u3068\u5168\u3066\u306e\u30ab\u30b9\u30bf\u30e0\u7d75\u6587\u5b57\u304c\u5229\u7528\u3067\u304d\u306a\u304f\u306a\u3063\u305f\u308a\u3059\u308b\u306e\u3067\u6ce8\u610f\u3057\u307e\u3057\u3087\u3046\uff0e\n\n\n\n\n\n\n\u3053\u308c\u3067 :susie: \u3068\u5165\u529b\u3059\u308b\u3053\u3068\u3067 \u304c\u8868\u793a\u3055\u308c\u308b\u3088\u3046\u306b\u306a\u308a\u307e\u3059\uff0e\n\n\n\u66f4\u306b\u30da\u30f3\u30ae\u30f3\u306eTux \u3068\u30bf\u30b9\u30de\u30cb\u30a2\u30c7\u30d3\u30eb\u306eTuz \u3092\u8ffd\u52a0\u3057\u3066\u307f\u307e\u3059\uff0e\n\u30a2\u30a4\u30b3\u30f3\u306e\u753b\u50cf\u30d5\u30a1\u30a4\u30eb\u3092\u7528\u610f\u3057\uff0c\u9759\u7684\u74b0\u5883\u306b\u8a2d\u7f6e\uff0c\u305d\u306eurl \u3092emojis.json \u30d5\u30a1\u30a4\u30eb\u306b\u8a18\u8ff0\u3057\u307e\u3059\uff0e\n\u4eca\u56de\u4ee5\u4e0b\u306e\u3088\u3046\u306b\u306a\u308a\u307e\u3057\u305f\uff0e\n\n\n\n \":beer:\": \"&#127866;\",\n \":beers:\": \"&#127867;\",\n \":munch:\": \"&#128561;\",\n- \":thumb:\": \"&#128077;\"\n+ \":thumb:\": \"&#128077;\",\n+ \":susie:\": \"https://snac.kagolug.org/susie.png\",\n+ \":tux:\": \"https://www.kagolug.org/snac-emoji/Tux.png\",\n+ \":tuz:\": \"https://www.kagolug.org/snac-emoji/Tuz.png\"\n }\n\n\n\n\u3053\u308c\u3067 :susie:, :tux:, :tuz: \u306e3\u3064\u306e\u7d75\u6587\u5b57\u304c\u5229\u7528\u3067\u304d\u308b\u3088\u3046\u306b\u306a\u308a\u307e\u3057\u305f\uff0e\ntoot \u3057\u3066\u78ba\u8a8d\u3067\u304d\u307e\u3059\uff0e\n\u3082\u3057\u304f\u306f\u4ee5\u4e0b\u306e\u3088\u3046\u306a\u30b5\u30a4\u30c8\u3067Mastodon \u30ab\u30b9\u30bf\u30e0\u7d75\u6587\u5b57API\u7d4c\u7531\u3067\u7d75\u6587\u5b57\u4e00\u89a7\u3092\u78ba\u8a8d\u3059\u308b\u3053\u3068\u3082\u51fa\u6765\u307e\u3059\uff0e\n\n\n\n\nMastodon instance custom emoji listz\n\n\n\n\n]\n\n\nsnac \u306e\u30ab\u30b9\u30bf\u30e0\u7d75\u6587\u5b57\u306b\u3064\u3044\u3066\u306e\u8a73\u7d30\u306fsnac(8) \u3092\u53c2\u7167\u3057\u3066\u304f\u3060\u3055\u3044\uff0e\n\n\n\n\n\nCustom Emojis\n From version 2.51, support for customized Emojis in posts is available (previously, they were hardcoded). Emojis are read from the emojis.json file in the instance base directory, as a JSON object of key / value pairs (if this file\n does not exist, it will be created with the predefined set). Each key in the object contains the text to be found (e.g., the :-) for a smiling face), and its associated value, the text string that will replace it (in this example\n case, the HTML entity for the Unicode codepoint for the smiley or the Emoji itself as text).\n\n\n\n\nEmoji values can also be URLs to image files; in this case, they will not be substituted in the post content, but added to the 'tag' array as an ActivityPub standard 'Emoji' object (it's recommendable that the Emoji key be enclosed\nin colons for maximum compatibility with other ActivityPub implementations, like e.g. :happydoggo:). These images can be served from an external source or from the static directory of the instance admin.\n\n\n\n\nIf you want to disable any Emoji substitution, change the file to contain just an empty JSON object ({}).", "date_published": "2025-12-10T19:09:41+09:00", "date_modified": "2025-12-10T19:09:43+09:00", "authors": [ { "name": "matoken", "url": "https://matoken.org/blog/author/matoken/", "avatar": "https://secure.gravatar.com/avatar/38f5f3b575c5eb45cda6aa659bca119ac7a5e16b46565e869d0030e3bd66981d?s=512&d=mm&r=g" } ], "author": { "name": "matoken", "url": "https://matoken.org/blog/author/matoken/", "avatar": "https://secure.gravatar.com/avatar/38f5f3b575c5eb45cda6aa659bca119ac7a5e16b46565e869d0030e3bd66981d?s=512&d=mm&r=g" }, "tags": [ "ActivityPub", "emoji", "snac", "Debian", "Linux", "trixie" ] }, { "id": "https://matoken.org/blog/?p=4721", "url": "https://matoken.org/blog/2025/10/09/manual-download-of-vscode-extensions/", "title": "VSCode\u62e1\u5f35\u6a5f\u80fd\u306e\u624b\u52d5\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9", "content_html": "

\n
\n

Microsoft\u306e\u958b\u767a\u3057\u3066\u3044\u308bVisual Studio Code \u3068\u3044\u3046Electron\u88fd\u306e\u30de\u30eb\u30c1\u30d7\u30e9\u30c3\u30c8\u30db\u30fc\u30e0\u3067\u7121\u6599\u306e\u30b3\u30fc\u30c7\u30a3\u30f3\u30b0\u5411\u3051\u30c6\u30ad\u30b9\u30c8\u30a8\u30c7\u30a3\u30bf\u304c\u3042\u308a\u307e\u3059\uff0e
\n\u30bd\u30fc\u30b9\u30b3\u30fc\u30c9\u306fMIT\u30e9\u30a4\u30bb\u30f3\u30b9\u306b\u3066\u516c\u958b\u3055\u308c\u3066\u3044\u307e\u3059\u304c\uff0cMicrosoft\u3067\u516c\u958b\u3057\u3066\u3044\u308b\u30d0\u30a4\u30ca\u30ea\u306f\u30d7\u30ed\u30d7\u30e9\u30a4\u30a8\u30bf\u30ea\u30fb\u30bd\u30d5\u30c8\u30a6\u30a7\u30a2\u3060\u3063\u305f\u308a\u30c6\u30ec\u30e1\u30c8\u30ea\u30fc\u304c\u57cb\u3081\u8fbc\u307e\u308c\u3066\u3044\u305f\u308a\u3057\u307e\u3059\uff0e
\nVSCode\u306f\u62e1\u5f35\u6a5f\u80fd\u306b\u3088\u308a\u69d8\u3005\u306a\u6a5f\u80fd\u304c\u8ffd\u52a0\u3067\u304d\u308b\u306e\u3067\u3059\u304c\uff0c\u30aa\u30d5\u30e9\u30a4\u30f3\u74b0\u5883\u3084\uff0cVSCode\u304b\u3089\u30d5\u30a9\u30fc\u30af\u3055\u308c\u305fVSCodium\u3067\u306fVSCode\u306e\u62e1\u5f35\u6a5f\u80fd\u304c\u914d\u5e03\u3055\u308c\u3066\u3044\u308bVSCode Marketplace\u306b\u898f\u5b9a\u5024\u3067\u306f\u30a2\u30af\u30bb\u30b9\u3067\u304d\u307e\u305b\u3093\uff0e
\nVSCodium\u306e\u5834\u5408\uff0c\u30aa\u30fc\u30d7\u30f3\u30d7\u30e9\u30c3\u30c8\u30d5\u30a9\u30fc\u30e0\u306aVSCode\u62e1\u5f35\u6a5f\u80fd\u914d\u5e03\u30b5\u30a4\u30c8\u306eOpen VSX Registry\u304c\u6709\u52b9\u306b\u306a\u3063\u3066\u3044\u308b\u306e\u3067\u3053\u3053\u304b\u3089\u5165\u624b\u3067\u304d\u308b\u62e1\u5f35\u6a5f\u80fd\u3082\u591a\u3044\u3067\u3059\u304c\uff0eVSCode Marketplace\u3067\u6b6f\u79d1\u516c\u958b\u3055\u308c\u3066\u3044\u306a\u3044\u62e1\u5f35\u6a5f\u80fd\u3082\u3042\u308a\u307e\u3059\uff0e
\n\u305d\u3046\u3044\u3063\u305f\u5834\u5408\uff0c\u4ee5\u524d\u306f\u62e1\u5f35\u6a5f\u80fd\u306e\u30d5\u30a1\u30a4\u30eb\u3067\u3042\u308b .vsix \u30d5\u30a1\u30a4\u30eb\u3092VS VSCode Marketplace\u3088\u308a\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\u3057\u3066\u5c0e\u5165\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3057\u305f\uff0e

\n
\n
\n\n
\n
\n

\u6700\u8fd1\u540c\u69d8\u306b\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\u3057\u3088\u3046\u3068\u3057\u305f\u3068\u3053\u308d\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\u30ea\u30f3\u30af\u304c\u6d88\u3048\u3066\u3044\u307e\u3057\u305f\uff0e

\n
\n

\n
\n
\n\"VSCode\n
\n
Figure 1. 2024-09-19\u6642\u306e\u30b9\u30af\u30ea\u30fc\u30f3\u30b7\u30e7\u30c3\u30c8\uff0e\u30d0\u30fc\u30b8\u30e7\u30f3\u6bce\u306b\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\u30ea\u30f3\u30af\u304c\u3042\u3063\u305f\uff0e
\n
\n
\n
\n\"VSCode\n
\n
Figure 2. 2025-10-08\u6642\u306e\u30b9\u30af\u30ea\u30fc\u30f3\u30b7\u30e7\u30c3\u30c8\uff0e\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\u30ea\u30f3\u30af\u304c\u306a\u304f\u306a\u3063\u3066\u3044\u308b\uff0e
\n
\n
\n

\u3053\u308c\u306f\u56f0\u308b\u306a\u3068\u5c11\u3057\u8abf\u3079\u308b\u3068Reddit\u3067\u3084\u306f\u308a\u56f0\u3063\u3066\u3044\u308b\u65b9\u304c\uff0e

\n
\n
\n\n
\n
\n

\u3044\u304f\u3064\u304b\u56de\u7b54\u304c\u3042\u308a\u307e\u3059\u304c\uff0c\u304a\u3066\u304c\u308b\u305d\u3046\u306a\u306e\u304c\u3053\u306eUserScritp\u3092\u5229\u7528\u3059\u308b\u65b9\u6cd5\uff0e

\n
\n
\n\n
\n
\n

\u62e1\u5f35\u6a5f\u80fd\u30da\u30fc\u30b8\u306b(\u6700\u65b0\u306e) .vsix \u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\u30ea\u30f3\u30af\u304c\u4f5c\u3089\u308c\u307e\u3059\uff0e\u3053\u306e\u30ea\u30f3\u30af\u304b\u3089\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\u3057\u3066\uff0cVSCode\u3084VSCodium\u306b\u5c0e\u5165\u304c\u53ef\u80fd\u3067\u3059\uff0e

\n
\n
\n
\n\"VSCode\n
\n
Figure 3. UserScript\u306b\u3066\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\u30ea\u30f3\u30af\u304c\u4f5c\u3089\u308c\u305f\uff0e
\n
\n
\n
\n\"VSCode\n
\n
Figure 4. \u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\u4e2d\u306f\u30d7\u30ed\u30b0\u30ec\u30b9\u304c\u8868\u793a\u3055\u308c\u308b\uff0e
\n
\n
\n
\n\"VSCodium\n
\n
Figure 5. VSCodium\u306b .vsix \u304b\u3089\u62e1\u5f35\u6a5f\u80fd\u3092\u5c0e\u5165\uff0e
\n
\n
\n

Reddit\u306e\u6295\u7a3f\u306f9\u30f6\u6708\u524d\uff0e\u7d50\u69cb\u524d\u306b\u6d88\u3048\u3066\u3044\u305f\u3093\u3067\u3059\u306d\uff0e

\n
\n
\n
\u74b0\u5883
\n
\n
$ codium --version\n1.104.36664\n3af140d2498acc8743822d23d4171fe1eac449ec\nx64\n$ lsb_release -dr\nDescription:    Debian GNU/Linux 13 (trixie)\nRelease:        13\n$ arch
\n
\n
\n", "content_text": "Microsoft\u306e\u958b\u767a\u3057\u3066\u3044\u308bVisual Studio Code \u3068\u3044\u3046Electron\u88fd\u306e\u30de\u30eb\u30c1\u30d7\u30e9\u30c3\u30c8\u30db\u30fc\u30e0\u3067\u7121\u6599\u306e\u30b3\u30fc\u30c7\u30a3\u30f3\u30b0\u5411\u3051\u30c6\u30ad\u30b9\u30c8\u30a8\u30c7\u30a3\u30bf\u304c\u3042\u308a\u307e\u3059\uff0e\n\u30bd\u30fc\u30b9\u30b3\u30fc\u30c9\u306fMIT\u30e9\u30a4\u30bb\u30f3\u30b9\u306b\u3066\u516c\u958b\u3055\u308c\u3066\u3044\u307e\u3059\u304c\uff0cMicrosoft\u3067\u516c\u958b\u3057\u3066\u3044\u308b\u30d0\u30a4\u30ca\u30ea\u306f\u30d7\u30ed\u30d7\u30e9\u30a4\u30a8\u30bf\u30ea\u30fb\u30bd\u30d5\u30c8\u30a6\u30a7\u30a2\u3060\u3063\u305f\u308a\u30c6\u30ec\u30e1\u30c8\u30ea\u30fc\u304c\u57cb\u3081\u8fbc\u307e\u308c\u3066\u3044\u305f\u308a\u3057\u307e\u3059\uff0e\nVSCode\u306f\u62e1\u5f35\u6a5f\u80fd\u306b\u3088\u308a\u69d8\u3005\u306a\u6a5f\u80fd\u304c\u8ffd\u52a0\u3067\u304d\u308b\u306e\u3067\u3059\u304c\uff0c\u30aa\u30d5\u30e9\u30a4\u30f3\u74b0\u5883\u3084\uff0cVSCode\u304b\u3089\u30d5\u30a9\u30fc\u30af\u3055\u308c\u305fVSCodium\u3067\u306fVSCode\u306e\u62e1\u5f35\u6a5f\u80fd\u304c\u914d\u5e03\u3055\u308c\u3066\u3044\u308bVSCode Marketplace\u306b\u898f\u5b9a\u5024\u3067\u306f\u30a2\u30af\u30bb\u30b9\u3067\u304d\u307e\u305b\u3093\uff0e\nVSCodium\u306e\u5834\u5408\uff0c\u30aa\u30fc\u30d7\u30f3\u30d7\u30e9\u30c3\u30c8\u30d5\u30a9\u30fc\u30e0\u306aVSCode\u62e1\u5f35\u6a5f\u80fd\u914d\u5e03\u30b5\u30a4\u30c8\u306eOpen VSX Registry\u304c\u6709\u52b9\u306b\u306a\u3063\u3066\u3044\u308b\u306e\u3067\u3053\u3053\u304b\u3089\u5165\u624b\u3067\u304d\u308b\u62e1\u5f35\u6a5f\u80fd\u3082\u591a\u3044\u3067\u3059\u304c\uff0eVSCode Marketplace\u3067\u6b6f\u79d1\u516c\u958b\u3055\u308c\u3066\u3044\u306a\u3044\u62e1\u5f35\u6a5f\u80fd\u3082\u3042\u308a\u307e\u3059\uff0e\n\u305d\u3046\u3044\u3063\u305f\u5834\u5408\uff0c\u4ee5\u524d\u306f\u62e1\u5f35\u6a5f\u80fd\u306e\u30d5\u30a1\u30a4\u30eb\u3067\u3042\u308b .vsix \u30d5\u30a1\u30a4\u30eb\u3092VS VSCode Marketplace\u3088\u308a\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\u3057\u3066\u5c0e\u5165\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3057\u305f\uff0e\n\n\n\n\nVisual Studio Code – Code Editing. Redefined\n\n\nVSCodium – Open Source Binaries of VSCode\n\n\nOpen VSX Registry\n\n\n\n\n\u6700\u8fd1\u540c\u69d8\u306b\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\u3057\u3088\u3046\u3068\u3057\u305f\u3068\u3053\u308d\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\u30ea\u30f3\u30af\u304c\u6d88\u3048\u3066\u3044\u307e\u3057\u305f\uff0e\n\n\n\n\n\n\nFigure 1. 2024-09-19\u6642\u306e\u30b9\u30af\u30ea\u30fc\u30f3\u30b7\u30e7\u30c3\u30c8\uff0e\u30d0\u30fc\u30b8\u30e7\u30f3\u6bce\u306b\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\u30ea\u30f3\u30af\u304c\u3042\u3063\u305f\uff0e\n\n\n\n\n\nFigure 2. 2025-10-08\u6642\u306e\u30b9\u30af\u30ea\u30fc\u30f3\u30b7\u30e7\u30c3\u30c8\uff0e\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\u30ea\u30f3\u30af\u304c\u306a\u304f\u306a\u3063\u3066\u3044\u308b\uff0e\n\n\n\u3053\u308c\u306f\u56f0\u308b\u306a\u3068\u5c11\u3057\u8abf\u3079\u308b\u3068Reddit\u3067\u3084\u306f\u308a\u56f0\u3063\u3066\u3044\u308b\u65b9\u304c\uff0e\n\n\n\n\nNeed help finding how to download the vsix file for extensions : r/vscode\n\n\n\n\n\u3044\u304f\u3064\u304b\u56de\u7b54\u304c\u3042\u308a\u307e\u3059\u304c\uff0c\u304a\u3066\u304c\u308b\u305d\u3046\u306a\u306e\u304c\u3053\u306eUserScritp\u3092\u5229\u7528\u3059\u308b\u65b9\u6cd5\uff0e\n\n\n\n\nVSCode Marketplace VSIX Downloader\n\n\n\n\n\u62e1\u5f35\u6a5f\u80fd\u30da\u30fc\u30b8\u306b(\u6700\u65b0\u306e) .vsix \u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\u30ea\u30f3\u30af\u304c\u4f5c\u3089\u308c\u307e\u3059\uff0e\u3053\u306e\u30ea\u30f3\u30af\u304b\u3089\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\u3057\u3066\uff0cVSCode\u3084VSCodium\u306b\u5c0e\u5165\u304c\u53ef\u80fd\u3067\u3059\uff0e\n\n\n\n\n\nFigure 3. UserScript\u306b\u3066\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\u30ea\u30f3\u30af\u304c\u4f5c\u3089\u308c\u305f\uff0e\n\n\n\n\n\nFigure 4. \u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\u4e2d\u306f\u30d7\u30ed\u30b0\u30ec\u30b9\u304c\u8868\u793a\u3055\u308c\u308b\uff0e\n\n\n\n\n\nFigure 5. VSCodium\u306b .vsix \u304b\u3089\u62e1\u5f35\u6a5f\u80fd\u3092\u5c0e\u5165\uff0e\n\n\nReddit\u306e\u6295\u7a3f\u306f9\u30f6\u6708\u524d\uff0e\u7d50\u69cb\u524d\u306b\u6d88\u3048\u3066\u3044\u305f\u3093\u3067\u3059\u306d\uff0e\n\n\n\u74b0\u5883\n\n$ codium --version\n1.104.36664\n3af140d2498acc8743822d23d4171fe1eac449ec\nx64\n$ lsb_release -dr\nDescription: Debian GNU/Linux 13 (trixie)\nRelease: 13\n$ arch", "date_published": "2025-10-09T19:39:27+09:00", "date_modified": "2025-10-09T19:39:29+09:00", "authors": [ { "name": "matoken", "url": "https://matoken.org/blog/author/matoken/", "avatar": "https://secure.gravatar.com/avatar/38f5f3b575c5eb45cda6aa659bca119ac7a5e16b46565e869d0030e3bd66981d?s=512&d=mm&r=g" } ], "author": { "name": "matoken", "url": "https://matoken.org/blog/author/matoken/", "avatar": "https://secure.gravatar.com/avatar/38f5f3b575c5eb45cda6aa659bca119ac7a5e16b46565e869d0030e3bd66981d?s=512&d=mm&r=g" }, "tags": [ "extemtion", "VSCode", "VSCodium", "Debian", "Linux", "trixie" ] } ] }