{ "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/tag/snac/feed/json/ -- and add it your reader.", "home_page_url": "https://matoken.org/blog/tag/snac/", "feed_url": "https://matoken.org/blog/tag/snac/feed/json/", "language": "ja", "title": "snac – 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=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=5332", "url": "https://matoken.org/blog/2026/03/13/firefox-extension-snapwer/", "title": "Web\u4e0a\u306eActivityPub\u6295\u7a3f\u3092snac\u3067\u4f7f\u3044\u3084\u3059\u304f\u3059\u308bFirefox\u62e1\u5f35\u6a5f\u80fd\u306eSnacWer", "content_html": "
\n
\n
\n

\"snac

\n
\n
\n

\u8efd\u91cfActivityPub server \u306esnac\u7528Firefox addon \u3092\u77e5\u3063\u305f\u306e\u3067\u8a66\u3057\u3066\u307f\u307e\u3057\u305f\uff0e

\n
\n

\n
\n

\u3053\u306eAddOn\u4f5c\u8005\u306e\u65b9\u306etoot\u3092snac\u306e\u4f5c\u8005\u304cboost\u3057\u3066\u3044\u305f\u306e\u3067\u77e5\u308a\u307e\u3057\u305f\uff0e

\n
\n
\n
\n
\n

Hello #snac users. If you enjoy exploring the Fediverse via the web, you might find this #FirefoxExtension I created helpful. It lets you interact with almost any post more easily. It also works, of course, on Firefox derivates.

\n
\n
\n

Feel free to take a look.

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

Web\u3067snac\u3092\u5229\u7528\u3057\u3066\u3044\u308b\u3068\u304d\u306b\u4fbf\u5229\u306b\u306a\u308b\u62e1\u5f35\u6a5f\u80fd\u306e\u3088\u3046\u3067\u3059\uff0e
\n\u65e9\u901f\u5c0e\u5165\u3057\u3066\u307f\u307e\u3059\uff0e

\n
\n
\n

\u4ee5\u4e0b\u304b\u3089Firefox\u306b\u62e1\u5f35\u6a5f\u80fd\u3092\u767b\u9332\u3057\u307e\u3059\uff0e

\n
\n\n
\n

\u62e1\u5f35\u6a5f\u80fd\u306e\u8a2d\u5b9a\u304b\u3089\u81ea\u5206\u306esnac\u30a2\u30c9\u30ec\u30b9\u3092\u767b\u9332\u3057\u307e\u3059\uff0e\u3053\u308c\u3067\u6e96\u5099\u5b8c\u4e86\u3067\u3059\uff0e

\n
\n
\n

\"snacwer00\"

\n
\n
\n

\u8a66\u3057\u306b\u4f7f\u3063\u3066\u307f\u307e\u3057\u3087\u3046\uff0eMastodon\u306a\u3069\u306eActivityPub\u306e\u516c\u958b\u6295\u7a3f\u3092\u958b\u304d\u307e\u3059\uff0e\u3059\u308b\u3068\uff0c\u30a2\u30c9\u30ec\u30b9\u30d0\u30fc\u306e\u53f3\u5074\u306bsnac\u306e\u30a2\u30a4\u30b3\u30f3\u304c\u8868\u793a\u3055\u308c\u307e\u3059\uff0e

\n
\n
\n

\"snacwer01\"

\n
\n
\n

snac\u306e\u30a2\u30a4\u30b3\u30f3\u3092\u30af\u30ea\u30c3\u30af\u3059\u308b\u3068\u8a2d\u5b9a\u3057\u305f\u81ea\u5206\u306esnac\u3067\u305d\u306e\u6295\u7a3f\u304c\u958b\u304b\u308c\u307e\u3059\uff0e\u3053\u3053\u3067Like\u3084Boost\u306a\u3069\u306e\u64cd\u4f5c\u304c\u3067\u304d\u307e\u3059\uff0eURL\u3092\u30b3\u30d4\u30fc\u3057\u3066snac\u306b\u6301\u3063\u3066\u3044\u3063\u305f\u308a\u3059\u308b\u3088\u308a\u4fbf\u5229\u3067\u3059 :)

\n
\n
\n

\"snacwer02\"

\n
\n
\n
\u74b0\u5883
\n
\n
\n

SnacWer \u30d0\u30fc\u30b8\u30e7\u30f3 1.0.1

\n
\n
\n
\n
\n
\n
$ dpkg-query -W firefox\nfirefox 148.0.2-1\n$ lsb_release -dr\nDescription:    Debian GNU/Linux forky/sid\nRelease:        n/a\n$ arch\nx86_64
\n
\n
\n\n
\n
\n", "content_text": "\u8efd\u91cfActivityPub server \u306esnac\u7528Firefox addon \u3092\u77e5\u3063\u305f\u306e\u3067\u8a66\u3057\u3066\u307f\u307e\u3057\u305f\uff0e\n\n\n\n\u3053\u306eAddOn\u4f5c\u8005\u306e\u65b9\u306etoot\u3092snac\u306e\u4f5c\u8005\u304cboost\u3057\u3066\u3044\u305f\u306e\u3067\u77e5\u308a\u307e\u3057\u305f\uff0e\n\n\n\n\nHello #snac users. If you enjoy exploring the Fediverse via the web, you might find this #FirefoxExtension I created helpful. It lets you interact with almost any post more easily. It also works, of course, on Firefox derivates.\n\n\nFeel free to take a look.\n\n\nhttps://addons.mozilla.org/addon/snacwer/\n\n\nSource code:\nhttps://codeberg.org/fidiben/SnacWer\n\n\n\n— unlogged (@unlogged@snac.unlogged.it)\n\n\n\nWeb\u3067snac\u3092\u5229\u7528\u3057\u3066\u3044\u308b\u3068\u304d\u306b\u4fbf\u5229\u306b\u306a\u308b\u62e1\u5f35\u6a5f\u80fd\u306e\u3088\u3046\u3067\u3059\uff0e\n\u65e9\u901f\u5c0e\u5165\u3057\u3066\u307f\u307e\u3059\uff0e\n\n\n\u4ee5\u4e0b\u304b\u3089Firefox\u306b\u62e1\u5f35\u6a5f\u80fd\u3092\u767b\u9332\u3057\u307e\u3059\uff0e\n\n\n\n\nSnacWer \u2013 Firefox (ja) \u5411\u3051\u62e1\u5f35\u6a5f\u80fd\u3092\u5165\u624b\n\n\n\n\n\u62e1\u5f35\u6a5f\u80fd\u306e\u8a2d\u5b9a\u304b\u3089\u81ea\u5206\u306esnac\u30a2\u30c9\u30ec\u30b9\u3092\u767b\u9332\u3057\u307e\u3059\uff0e\u3053\u308c\u3067\u6e96\u5099\u5b8c\u4e86\u3067\u3059\uff0e\n\n\n\n\n\n\u8a66\u3057\u306b\u4f7f\u3063\u3066\u307f\u307e\u3057\u3087\u3046\uff0eMastodon\u306a\u3069\u306eActivityPub\u306e\u516c\u958b\u6295\u7a3f\u3092\u958b\u304d\u307e\u3059\uff0e\u3059\u308b\u3068\uff0c\u30a2\u30c9\u30ec\u30b9\u30d0\u30fc\u306e\u53f3\u5074\u306bsnac\u306e\u30a2\u30a4\u30b3\u30f3\u304c\u8868\u793a\u3055\u308c\u307e\u3059\uff0e\n\n\n\n\n\nsnac\u306e\u30a2\u30a4\u30b3\u30f3\u3092\u30af\u30ea\u30c3\u30af\u3059\u308b\u3068\u8a2d\u5b9a\u3057\u305f\u81ea\u5206\u306esnac\u3067\u305d\u306e\u6295\u7a3f\u304c\u958b\u304b\u308c\u307e\u3059\uff0e\u3053\u3053\u3067Like\u3084Boost\u306a\u3069\u306e\u64cd\u4f5c\u304c\u3067\u304d\u307e\u3059\uff0eURL\u3092\u30b3\u30d4\u30fc\u3057\u3066snac\u306b\u6301\u3063\u3066\u3044\u3063\u305f\u308a\u3059\u308b\u3088\u308a\u4fbf\u5229\u3067\u3059 :)\n\n\n\n\n\n\u74b0\u5883\n\n\nSnacWer \u30d0\u30fc\u30b8\u30e7\u30f3 1.0.1\n\n\n\n\n\n$ dpkg-query -W firefox\nfirefox 148.0.2-1\n$ lsb_release -dr\nDescription: Debian GNU/Linux forky/sid\nRelease: n/a\n$ arch\nx86_64\n\n\n\ntoot\n\n\nunlogged (@unlogged@snac.unlogged.it)\n\n\nmatoken:susie: (@matoken@snac.matoken.org)", "date_published": "2026-03-13T06:45:02+09:00", "date_modified": "2026-03-13T06:45:05+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", "Firefox", "snac", "Debian", "Linux", "sid" ] }, { "id": "https://matoken.org/blog/?p=5251", "url": "https://matoken.org/blog/2026/02/19/snac-static/", "title": "snac\u306e\u30e6\u30fc\u30b6\u30fc\u3054\u3068\u306estatic\u30c7\u30a3\u30ec\u30af\u30c8\u30ea", "content_html": "
\n
\n
\n

\"snac

\n
\n
\n

snac\u306e\u305f\u3081\u306e\u9759\u7684\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u3092apache2 httpd \u3067\u8a2d\u5b9a\u3057\u3066\u30ab\u30b9\u30bf\u30e0\u7d75\u6587\u5b57\u306e\u8a2d\u7f6e\u5834\u6240\u306b\u5229\u7528\u3057\u3066\u3044\u307e\u3059\uff0e

\n
\n\n
\n

\u5b9f\u306f\u8a2d\u5b9a\u305b\u305a\u3068\u3082\u30e6\u30fc\u30b6\u3054\u3068\u306b\u9759\u7684\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u304c\u3042\u308b\u306e\u306b\u6c17\u3065\u304d\u307e\u3057\u305f\uff0e

\n
\n

\n
\n

\u304d\u3063\u304b\u3051\u306f\u3053\u3061\u3089\uff0e

\n
\n
\n
\n
\n

Use https://snac.rohrmoser.name/social/marcus/s/readme.txt (i.e. add a /s/ between your account id and the file).

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

${SNAC-URL}/${USER}/s/ \u306e\u4e0b\u304c\u4f7f\u3048\u308b\u3088\u3046\u3067\u3059\uff0e
\n\u5b9f\u969b\u306b\u8a66\u3057\u3066\u307f\u307e\u3059\uff0e

\n
\n
\n
\n
\n

$ cd ${SNAC-DATA}/user/${USER}/static <.>
\n$ echo test > test <.>
\n$ w3m -dump_extra https://snac.matoken.org/matoken/s/test | grep ^HTTP/ -A99 <.>
\nHTTP/1.1 200 OK
\nDate: Wed, 18 Feb 2026 20:50:37 GMT
\nServer: Apache/2.4.66 (Debian)
\ncontent-type: application/octet-stream
\nx-creator: snac/2.90
\netag: W/”snac-1771444525″
\naccess-control-allow-origin: *
\naccess-control-allow-headers: *
\naccess-control-expose-headers: Link
\nContent-Security-Policy: script-src ;
\ncontent-length: 5
\nConnection: close

\n
\n
\n

test

\n
\n
\n
\n
\n
    \n
  1. \n

    \u30e6\u30fc\u30b6\u30fc\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u306e\u4e0b\u306e static \u306b\u79fb\u52d5

    \n
  2. \n
  3. \n

    \u30c6\u30b9\u30c8\u30d5\u30a1\u30a4\u30eb\u3092\u4f5c\u6210

    \n
  4. \n
  5. \n

    \u30e6\u30fc\u30b6\u30fc\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u306e\u4e0b\u306e s \u4ee5\u4e0b\u306e\u8a72\u5f53\u30d5\u30a1\u30a4\u30eb\u3092\u78ba\u8a8d

    \n
  6. \n
\n
\n
\n

\u3068\u3044\u3046\u3053\u3068\u3067snac server \u306e ${SNAC-DATA}/user/${USER}/static \u4ee5\u4e0b\u306b\u7f6e\u3044\u305f\u30d5\u30a1\u30a4\u30eb\u304c ${SNAC-URL}/${USER}/s/ \u4ee5\u4e0b\u3067\u78ba\u8a8d\u3067\u304d\u307e\u3059\uff0e
\ntheme \u3067\u3053\u306e\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u306f\u5229\u7528\u3057\u3066\u3044\u307e\u3057\u305f\u304c\uff0ctheme \u4ee5\u5916\u306e\u30d5\u30a1\u30a4\u30eb\u3082ok \u306a\u3093\u3067\u3059\u306d\uff0e

\n
\n\n
\n
\u74b0\u5883
\n
\n
$ sudo -u snac ~snac/snac2/snac state ~snac/snac-data\nserver: snac.matoken.org (snac/2.90)\nuptime: 1:11:46:03\njob fifo size (cur): 0\njob fifo size (peak): 11\nthread #0 state: waiting\nthread #1 state: waiting\nthread #2 state: waiting\nthread #3 state: waiting\n$ lsb_release -dr\nNo LSB modules are available.\nDescription:    Debian GNU/Linux 12 (bookworm)\nRelease:        12\n$ arch\nx86_64
\n
\n
\n
\n
\n", "content_text": "snac\u306e\u305f\u3081\u306e\u9759\u7684\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u3092apache2 httpd \u3067\u8a2d\u5b9a\u3057\u3066\u30ab\u30b9\u30bf\u30e0\u7d75\u6587\u5b57\u306e\u8a2d\u7f6e\u5834\u6240\u306b\u5229\u7528\u3057\u3066\u3044\u307e\u3059\uff0e\n\n\n\n\nsnac \u3067\u30ab\u30b9\u30bf\u30e0\u7d75\u6587\u5b57\u3092\u5229\u7528 \u2013 matoken’s blog\n\n\n\n\n\u5b9f\u306f\u8a2d\u5b9a\u305b\u305a\u3068\u3082\u30e6\u30fc\u30b6\u3054\u3068\u306b\u9759\u7684\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u304c\u3042\u308b\u306e\u306b\u6c17\u3065\u304d\u307e\u3057\u305f\uff0e\n\n\n\n\u304d\u3063\u304b\u3051\u306f\u3053\u3061\u3089\uff0e\n\n\n\n\nUse https://snac.rohrmoser.name/social/marcus/s/readme.txt (i.e. add a /s/ between your account id and the file).\n\n\n\n— https://comam.es/snac/grunfink/p/1771335084.798855\n\n\n\n${SNAC-URL}/${USER}/s/ \u306e\u4e0b\u304c\u4f7f\u3048\u308b\u3088\u3046\u3067\u3059\uff0e\n\u5b9f\u969b\u306b\u8a66\u3057\u3066\u307f\u307e\u3059\uff0e\n\n\n\n\n$ cd ${SNAC-DATA}/user/${USER}/static <.>\n$ echo test > test <.>\n$ w3m -dump_extra https://snac.matoken.org/matoken/s/test | grep ^HTTP/ -A99 <.>\nHTTP/1.1 200 OK\nDate: Wed, 18 Feb 2026 20:50:37 GMT\nServer: Apache/2.4.66 (Debian)\ncontent-type: application/octet-stream\nx-creator: snac/2.90\netag: W/”snac-1771444525″\naccess-control-allow-origin: *\naccess-control-allow-headers: *\naccess-control-expose-headers: Link\nContent-Security-Policy: script-src ;\ncontent-length: 5\nConnection: close\n\n\ntest\n\n\n\n\n\n\n\u30e6\u30fc\u30b6\u30fc\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u306e\u4e0b\u306e static \u306b\u79fb\u52d5\n\n\n\u30c6\u30b9\u30c8\u30d5\u30a1\u30a4\u30eb\u3092\u4f5c\u6210\n\n\n\u30e6\u30fc\u30b6\u30fc\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u306e\u4e0b\u306e s \u4ee5\u4e0b\u306e\u8a72\u5f53\u30d5\u30a1\u30a4\u30eb\u3092\u78ba\u8a8d\n\n\n\n\n\u3068\u3044\u3046\u3053\u3068\u3067snac server \u306e ${SNAC-DATA}/user/${USER}/static \u4ee5\u4e0b\u306b\u7f6e\u3044\u305f\u30d5\u30a1\u30a4\u30eb\u304c ${SNAC-URL}/${USER}/s/ \u4ee5\u4e0b\u3067\u78ba\u8a8d\u3067\u304d\u307e\u3059\uff0e\ntheme \u3067\u3053\u306e\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u306f\u5229\u7528\u3057\u3066\u3044\u307e\u3057\u305f\u304c\uff0ctheme \u4ee5\u5916\u306e\u30d5\u30a1\u30a4\u30eb\u3082ok \u306a\u3093\u3067\u3059\u306d\uff0e\n\n\n\n\nsnac\u306etheme\u3092\u8a2d\u5b9a \u2013 matoken’s blog\n\n\n\n\n\u74b0\u5883\n\n$ sudo -u snac ~snac/snac2/snac state ~snac/snac-data\nserver: snac.matoken.org (snac/2.90)\nuptime: 1:11:46:03\njob fifo size (cur): 0\njob fifo size (peak): 11\nthread #0 state: waiting\nthread #1 state: waiting\nthread #2 state: waiting\nthread #3 state: waiting\n$ lsb_release -dr\nNo LSB modules are available.\nDescription: Debian GNU/Linux 12 (bookworm)\nRelease: 12\n$ arch\nx86_64", "date_published": "2026-02-19T05:51:26+09:00", "date_modified": "2026-02-19T05:51:26+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", "bookworm", "Debian", "Linux" ] }, { "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=5140", "url": "https://matoken.org/blog/2026/01/12/snac-2-86-2-87/", "title": "\u7d75\u6587\u5b57\u30ea\u30a2\u30af\u30b7\u30e7\u30f3\u6a5f\u80fd\u306a\u3069\u304c\u8ffd\u52a0\u3055\u308c\u305fsnac 2.86, 2.87", "content_html": "
\n
\n
\n

\"snac

\n
\n
\n

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

\n
\n\n

\n

\n
\n
\n

RELEASE NOTES

\n
\n
\n

RELEASE_NOTES.md \u3092\u898b\u308b\u3068\u4e3b\u306a\u5909\u66f4\u70b9\u306f\u4ee5\u4e0b\u306e\u3088\u3046\u306b\u306a\u3063\u3066\u3044\u307e\u3059\uff0e

\n
\n
\n
\n
\n

2.87

\n
\n
\n

Hide EmojiReacts from muted actors and blocked instances.

\n
\n
\n

2.86

\n
\n
\n

Truncate RSS titles at UTF-8 character boundaries (contributed by lxo).

\n
\n
\n

Link contacts to single-user people pages. Also, user’s posts are shown (contributed by lxo).

\n
\n
\n

Added emoji reactions (contributed by violette).

\n
\n
\n

Mastodon API: Fix for some client notifications (contributed by violette), fix for a status visibility error (contributed by fruye).

\n
\n
\n

If the query variable terse of a public post page is set to anything, no header is shown.

\n
\n
\n

Fixed search failures when the query string has any leading blank.

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

\u7d75\u6587\u5b57\u30ea\u30a2\u30af\u30b7\u30e7\u30f3

\n
\n
\n

\u8208\u5473\u6df1\u3044\u65b0\u6a5f\u80fd\u3068\u3057\u3066\u306f\u7d75\u6587\u5b57\u30ea\u30a2\u30af\u30b7\u30e7\u30f3\u306e\u5bfe\u5fdc\u304c\u3042\u308a\u307e\u3059\uff0e\u3053\u308c\u306b\u3088\u308aMastodon \u3084Misskey \u306a\u3069\u306e\u7d75\u6587\u5b57\u30ea\u30a2\u30af\u30b7\u30e7\u30f3\u306b\u5bfe\u5fdc\u3057\u305f\u30b5\u30fc\u30d3\u30b9\u3068\u7d75\u6587\u5b57\u30ea\u30a2\u30af\u30b7\u30e7\u30f3\u306e\u3084\u308a\u53d6\u308a\u304c\u3067\u304d\u308b\u3088\u3046\u306b\u306a\u308a\u307e\u3057\u305f\uff0e

\n
\n
\n

\u4ee5\u4e0b\u306fsnac \u3068Misskey \u3067\u305d\u308c\u305e\u308c\u7d75\u6587\u5b57\u30ea\u30a2\u30af\u30b7\u30e7\u30f3\u3092\u884c\u3063\u305f\u3068\u304d\u306e\u30b9\u30af\u30ea\u30fc\u30f3\u30b7\u30e7\u30c3\u30c8\u3067\u3059\uff0esnac \u304b\u3089\u306e\u9001\u4fe1\u6642\u306f\u7d75\u6587\u5b57\u306e\u6587\u5b57\u5217\u3092\u8a18\u8ff0\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\uff0e

\n
\n
\n

\"snac\u304b\u3089\u7d75\u6587\u5b57\u30ea\u30a2\u30af\u30b7\u30e7\u30f3\u9001\u4fe1\"
\n\"Misskey\u3078\u306e\u7d75\u6587\u5b57\u30ea\u30a2\u30af\u30b7\u30e7\u30f3\u9001\u4fe1\"
\n\"\u7d75\u6587\u5b57\u30ea\u30a2\u30af\u30b7\u30e7\u30f3\u53d7\u4fe1\"

\n
\n
\n

\u4ee5\u4e0b\u306f\u5b9f\u969b\u306e\u6295\u7a3f\uff0e

\n
\n\n
\n

\u3069\u3046\u3082\u3053\u306e\u7d75\u6587\u5b57\u30ea\u30a2\u30af\u30b7\u30e7\u30f3\u3092\u4f7f\u3063\u305f\u5acc\u304c\u3089\u305b\u304c\u767a\u751f\u3057\u305f\u3088\u3046\u3067\u305d\u308c\u306e\u5bfe\u7b56\u3068\u3057\u3066\u30df\u30e5\u30fc\u30c8\u3057\u305f\u30a2\u30af\u30bf\u30fc\u3068\u30d6\u30ed\u30c3\u30af\u3057\u305f\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u304b\u3089\u306e\u7d75\u6587\u5b57\u30ea\u30a2\u30af\u30b7\u30e7\u30f3\u3092\u975e\u8868\u793a\u306b\u3059\u308b\u6a5f\u80fd\u304c 2.87 \u3068\u3057\u3066\u30ea\u30ea\u30fc\u30b9\u3055\u308c\u307e\u3057\u305f\uff0e

\n
\n
\n

\u3082\u3057\u7d75\u6587\u5b57\u30ea\u30a2\u30af\u30b7\u30e7\u30f3\u6a5f\u80fd\u3092\u4f7f\u3044\u305f\u304f\u306a\u3044\u5834\u5408\u306f 2.86, 2.87 \u3092\u30b9\u30ad\u30c3\u30d7\u3057\u3066\u7d75\u6587\u5b57\u30ea\u30a2\u30af\u30b7\u30e7\u30f3\u3092\u8a2d\u5b9a\u3067\u7121\u52b9\u306b\u3067\u304d\u308b\u5909\u66f4\u3092\u542b\u3093\u3060\u30ea\u30ea\u30fc\u30b9\u3092\u5f85\u3064\u306e\u304c\u826f\u3055\u305d\u3046\u3067\u3059\uff0e

\n
\n\n
\n

\u30ab\u30b9\u30bf\u30e0\u7d75\u6587\u5b57\u306e\u767b\u9332\u306b\u3064\u3044\u3066\u306f\u4ee5\u4e0b\u306e\u8a18\u4e8b\u3092\u53c2\u7167\u3057\u3066\u304f\u3060\u3055\u3044\uff0e

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

RRS \u30bf\u30a4\u30c8\u30eb\u3092UTF-8 \u306e\u5883\u754c\u3067\u5207\u308a\u6368\u3066\u308b

\n
\n
\n

RSS \u306etitle \u3092UTF-8 \u5883\u754c\u3067\u5207\u308a\u6368\u3066\u308b\u306e\u306f\u65e5\u672c\u8a9e\u3067\u6587\u5b57\u5316\u3051\u3059\u308b\u3053\u3068\u304c\u7121\u304f\u306a\u308a\u305d\u3046\u3067\u3059\uff0e\u4ee5\u4e0b\u3088\u3046\u306b\u3057\u3066\u78ba\u8a8d\u3067\u304d\u305d\u3046\u3067\u3059\u304c\u4fee\u6b63\u524d\u306e2.85 \u3067\u78ba\u8a8d\u3057\u305f\u3068\u3053\u308d\u4e01\u5ea6\u554f\u984c\u306e\u306a\u3044\u30bf\u30a4\u30df\u30f3\u30b0\u3060\u3063\u305f\u3088\u3046\u3067\u3053\u306e\u3068\u304d\u306f\u554f\u984c\u3042\u308a\u307e\u305b\u3093\u3067\u3057\u305f\uff0e

\n
\n
\n
\n
$ curl -s https://snac.kagolug.org/matoken.rss | nkf | xmllint --format - | grep title | head
\n
\n
\n\n
\n
\n
\n

snac \u306e\u30a2\u30c3\u30d7\u30b0\u30ec\u30fc\u30c9

\n
\n
\n

\u7279\u306b\u554f\u984c\u306a\u304f\u3044\u3064\u3082\u306e\u624b\u9806\u3067\u30a2\u30c3\u30d7\u30b0\u30ec\u30fc\u30c9\u3067\u304d\u307e\u3057\u305f\uff0e

\n
\n
\n

snac \u306e\u30a2\u30c3\u30d7\u30b0\u30ec\u30fc\u30c9\u4f8b(source)

\n
\n
\n
$ cd $SNAC-SRC\n$ git pull\n$ git checkout 2.87\nPrevious HEAD position was b84b92d Version 2.86 RELEASED.\nHEAD is now at c2b050c Version 2.87 RELEASED.\n$ make\n$ ./snac | head -2\nsnac 2.87 - A simple, minimalistic ActivityPub instance\nCopyright (c) 2022 - 2026 grunfink et al. / MIT license\n$ sudo service snac2 stop\n$ sudo -u snac tar cvf snac2-`date +%F_%T-$$`.tar ~snac/snac-data\n$ sudo -u snac /home/snac/snac2/snac upgrade ~snac/snac-data\n05:52:38 OK\n$ sudo service snac2 start
\n
\n
\n
\n
\n

snac \u306e\u30a2\u30c3\u30d7\u30b0\u30ec\u30fc\u30c9\u4f8b(Debian package)

\n
\n
\n
$ snac | head -2\nsnac 2.85 - A simple, minimalistic ActivityPub instance\nCopyright (c) 2022 - 2025 grunfink et al. / MIT license\n$ sudo apt update\n$ sudo apt upgrade\n$ snac | head -2\nsnac 2.87 - A simple, minimalistic ActivityPub instance\nCopyright (c) 2022 - 2026 grunfink et al. / MIT license\n$ sudo service snac2 stop\n$ sudo -u debian-snac tar cvf snac2-`date +%F_%T-$$`.tar /var/lib/snac2\n$ sudo -u debian-snac snac upgrade /var/lib/snac2\n18:56:22 Linux sandbox not compiled in\n18:56:22 OK\n$ sudo service snac2 start
\n
\n
\n
\n
\n
\n", "content_text": "\u30df\u30cb\u30de\u30e0\u3067\u8efd\u91cf\u306aActivityPub Server \u306esnac 2.86, 2.87 \u304c\u30ea\u30ea\u30fc\u30b9\u3055\u308c\u307e\u3057\u305f\uff0e\n\n\n\n\nThe Real Grunfink (@grunfink\\@comam.es) 2.86\n\n\nThe Real Grunfink (@grunfink\\@comam.es) 2.87\n\n\nsnac2/RELEASE_NOTES.md at master – grunfink/snac2 – Codeberg.org\n\n\n\n\n\n\n\nRELEASE NOTES\n\n\nRELEASE_NOTES.md \u3092\u898b\u308b\u3068\u4e3b\u306a\u5909\u66f4\u70b9\u306f\u4ee5\u4e0b\u306e\u3088\u3046\u306b\u306a\u3063\u3066\u3044\u307e\u3059\uff0e\n\n\n\n\n2.87\n\n\nHide EmojiReacts from muted actors and blocked instances.\n\n\n2.86\n\n\nTruncate RSS titles at UTF-8 character boundaries (contributed by lxo).\n\n\nLink contacts to single-user people pages. Also, user’s posts are shown (contributed by lxo).\n\n\nAdded emoji reactions (contributed by violette).\n\n\nMastodon API: Fix for some client notifications (contributed by violette), fix for a status visibility error (contributed by fruye).\n\n\nIf the query variable terse of a public post page is set to anything, no header is shown.\n\n\nFixed search failures when the query string has any leading blank.\n\n\n\n— snac2/RELEASE_NOTES.md at master – grunfink/snac2 – Codeberg.org\n\n\n\n\n\n\u7d75\u6587\u5b57\u30ea\u30a2\u30af\u30b7\u30e7\u30f3\n\n\n\u8208\u5473\u6df1\u3044\u65b0\u6a5f\u80fd\u3068\u3057\u3066\u306f\u7d75\u6587\u5b57\u30ea\u30a2\u30af\u30b7\u30e7\u30f3\u306e\u5bfe\u5fdc\u304c\u3042\u308a\u307e\u3059\uff0e\u3053\u308c\u306b\u3088\u308aMastodon \u3084Misskey \u306a\u3069\u306e\u7d75\u6587\u5b57\u30ea\u30a2\u30af\u30b7\u30e7\u30f3\u306b\u5bfe\u5fdc\u3057\u305f\u30b5\u30fc\u30d3\u30b9\u3068\u7d75\u6587\u5b57\u30ea\u30a2\u30af\u30b7\u30e7\u30f3\u306e\u3084\u308a\u53d6\u308a\u304c\u3067\u304d\u308b\u3088\u3046\u306b\u306a\u308a\u307e\u3057\u305f\uff0e\n\n\n\u4ee5\u4e0b\u306fsnac \u3068Misskey \u3067\u305d\u308c\u305e\u308c\u7d75\u6587\u5b57\u30ea\u30a2\u30af\u30b7\u30e7\u30f3\u3092\u884c\u3063\u305f\u3068\u304d\u306e\u30b9\u30af\u30ea\u30fc\u30f3\u30b7\u30e7\u30c3\u30c8\u3067\u3059\uff0esnac \u304b\u3089\u306e\u9001\u4fe1\u6642\u306f\u7d75\u6587\u5b57\u306e\u6587\u5b57\u5217\u3092\u8a18\u8ff0\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\uff0e\n\n\n\n\n\n\n\n\u4ee5\u4e0b\u306f\u5b9f\u969b\u306e\u6295\u7a3f\uff0e\n\n\n\n\nmatoken (@matoken\\@snac.matoken.org)\n\n\n\u30ce\u30fc\u30c8 | Misskey.io\n\n\n\n\n\u3069\u3046\u3082\u3053\u306e\u7d75\u6587\u5b57\u30ea\u30a2\u30af\u30b7\u30e7\u30f3\u3092\u4f7f\u3063\u305f\u5acc\u304c\u3089\u305b\u304c\u767a\u751f\u3057\u305f\u3088\u3046\u3067\u305d\u308c\u306e\u5bfe\u7b56\u3068\u3057\u3066\u30df\u30e5\u30fc\u30c8\u3057\u305f\u30a2\u30af\u30bf\u30fc\u3068\u30d6\u30ed\u30c3\u30af\u3057\u305f\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u304b\u3089\u306e\u7d75\u6587\u5b57\u30ea\u30a2\u30af\u30b7\u30e7\u30f3\u3092\u975e\u8868\u793a\u306b\u3059\u308b\u6a5f\u80fd\u304c 2.87 \u3068\u3057\u3066\u30ea\u30ea\u30fc\u30b9\u3055\u308c\u307e\u3057\u305f\uff0e\n\n\n\u3082\u3057\u7d75\u6587\u5b57\u30ea\u30a2\u30af\u30b7\u30e7\u30f3\u6a5f\u80fd\u3092\u4f7f\u3044\u305f\u304f\u306a\u3044\u5834\u5408\u306f 2.86, 2.87 \u3092\u30b9\u30ad\u30c3\u30d7\u3057\u3066\u7d75\u6587\u5b57\u30ea\u30a2\u30af\u30b7\u30e7\u30f3\u3092\u8a2d\u5b9a\u3067\u7121\u52b9\u306b\u3067\u304d\u308b\u5909\u66f4\u3092\u542b\u3093\u3060\u30ea\u30ea\u30fc\u30b9\u3092\u5f85\u3064\u306e\u304c\u826f\u3055\u305d\u3046\u3067\u3059\uff0e\n\n\n\n\n#516 – FR: add a toggle to users’ settings to hide emoji reactions (and the ability to emoji react)? – grunfink/snac2 – Codeberg.org\n\n\n\n\n\u30ab\u30b9\u30bf\u30e0\u7d75\u6587\u5b57\u306e\u767b\u9332\u306b\u3064\u3044\u3066\u306f\u4ee5\u4e0b\u306e\u8a18\u4e8b\u3092\u53c2\u7167\u3057\u3066\u304f\u3060\u3055\u3044\uff0e\n\n\n\n\nsnac \u3067\u30ab\u30b9\u30bf\u30e0\u7d75\u6587\u5b57\u3092\u5229\u7528 \u2013 matoken’s blog\n\n\n\n\n\n\nRRS \u30bf\u30a4\u30c8\u30eb\u3092UTF-8 \u306e\u5883\u754c\u3067\u5207\u308a\u6368\u3066\u308b\n\n\nRSS \u306etitle \u3092UTF-8 \u5883\u754c\u3067\u5207\u308a\u6368\u3066\u308b\u306e\u306f\u65e5\u672c\u8a9e\u3067\u6587\u5b57\u5316\u3051\u3059\u308b\u3053\u3068\u304c\u7121\u304f\u306a\u308a\u305d\u3046\u3067\u3059\uff0e\u4ee5\u4e0b\u3088\u3046\u306b\u3057\u3066\u78ba\u8a8d\u3067\u304d\u305d\u3046\u3067\u3059\u304c\u4fee\u6b63\u524d\u306e2.85 \u3067\u78ba\u8a8d\u3057\u305f\u3068\u3053\u308d\u4e01\u5ea6\u554f\u984c\u306e\u306a\u3044\u30bf\u30a4\u30df\u30f3\u30b0\u3060\u3063\u305f\u3088\u3046\u3067\u3053\u306e\u3068\u304d\u306f\u554f\u984c\u3042\u308a\u307e\u305b\u3093\u3067\u3057\u305f\uff0e\n\n\n\n$ curl -s https://snac.kagolug.org/matoken.rss | nkf | xmllint --format - | grep title | head\n\n\n\n\n\n#514 – rss.c (rss_from_timeliine) cuts multi-byte characters from item titles – grunfink/snac2 – Codeberg.org\n\n\n\n\n\n\nsnac \u306e\u30a2\u30c3\u30d7\u30b0\u30ec\u30fc\u30c9\n\n\n\u7279\u306b\u554f\u984c\u306a\u304f\u3044\u3064\u3082\u306e\u624b\u9806\u3067\u30a2\u30c3\u30d7\u30b0\u30ec\u30fc\u30c9\u3067\u304d\u307e\u3057\u305f\uff0e\n\n\nsnac \u306e\u30a2\u30c3\u30d7\u30b0\u30ec\u30fc\u30c9\u4f8b(source)\n\n\n$ cd $SNAC-SRC\n$ git pull\n$ git checkout 2.87\nPrevious HEAD position was b84b92d Version 2.86 RELEASED.\nHEAD is now at c2b050c Version 2.87 RELEASED.\n$ make\n$ ./snac | head -2\nsnac 2.87 - A simple, minimalistic ActivityPub instance\nCopyright (c) 2022 - 2026 grunfink et al. / MIT license\n$ sudo service snac2 stop\n$ sudo -u snac tar cvf snac2-`date +%F_%T-$$`.tar ~snac/snac-data\n$ sudo -u snac /home/snac/snac2/snac upgrade ~snac/snac-data\n05:52:38 OK\n$ sudo service snac2 start\n\n\n\n\nsnac \u306e\u30a2\u30c3\u30d7\u30b0\u30ec\u30fc\u30c9\u4f8b(Debian package)\n\n\n$ snac | head -2\nsnac 2.85 - A simple, minimalistic ActivityPub instance\nCopyright (c) 2022 - 2025 grunfink et al. / MIT license\n$ sudo apt update\n$ sudo apt upgrade\n$ snac | head -2\nsnac 2.87 - A simple, minimalistic ActivityPub instance\nCopyright (c) 2022 - 2026 grunfink et al. / MIT license\n$ sudo service snac2 stop\n$ sudo -u debian-snac tar cvf snac2-`date +%F_%T-$$`.tar /var/lib/snac2\n$ sudo -u debian-snac snac upgrade /var/lib/snac2\n18:56:22 Linux sandbox not compiled in\n18:56:22 OK\n$ sudo service snac2 start", "date_published": "2026-01-12T19:42:13+09:00", "date_modified": "2026-01-12T19:43:05+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", "bookworm", "Debian", "Linux" ] }, { "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=4863", "url": "https://matoken.org/blog/2025/12/09/sakura-knowledge/", "title": "\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", "content_html": "
\n

\"5

\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\u3057\u307e\u3057\u305f\uff0e

\n
\n
\n\n
\n

\n
\n

\u9e7f\u5150\u5cf6\u3089\u3050\u3068\u3044\u3046Linux User Group\u306eVPS\u3092\u3055\u304f\u3089\u30a4\u30f3\u30bf\u30fc\u30cd\u30c3\u30c8\u3055\u3093\u306b\u30b3\u30df\u30cb\u30e5\u30c6\u30a3\u652f\u63f4\u3068\u3057\u3066\u63d0\u4f9b\u3057\u3066\u3044\u305f\u3060\u3044\u3066\u3044\u307e\u3059\uff0e\u3053\u306e\u7e01\u3067\u3055\u304f\u3089\u306e\u30ca\u30ec\u30c3\u30b8\u306b\u8a18\u4e8b\u3092\u5bc4\u7a3f\u3059\u308b\u3053\u3068\u306b\u306a\u308a\u307e\u3057\u305f\uff0e
\n\u4eca\u56de\u306e\u5185\u5bb9\u306f\u8efd\u91cf\u306aActivityPub Server \u306esnac \u3092\u8a2d\u5b9a\u3057\u305f\u3068\u304d\u306e\u8a18\u9332\u3092\u307e\u3068\u3081\u305f\u3082\u306e\u3067\u3059\uff0e
\n\u5143\u306f\u9e7f\u5150\u5cf6Linux\u52c9\u5f37\u4f1a 2025.10 \u3067\u767a\u8868\u3057\u305f\u3082\u306e\u3092\u5143\u306b\u3057\u305f\u3082\u306e\u3067\u3059\uff0e

\n
\n
\n

\u8208\u5473\u304c\u3042\u308c\u3070\u8aad\u3093\u3067\u3082\u3089\u3048\u308b\u3068\u5b09\u3057\u3044\u3067\u3059\uff0e

\n
\n
\n\n
\n", "content_text": "\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\u3057\u307e\u3057\u305f\uff0e\n\n\n\n\n\u3055\u304f\u3089\u306eVPS\u3067\u8a66\u3059\u3001\u8efd\u91cfActivityPub\u5b9f\u88c5\u300csnac\u300d\u306b\u3088\u308b\u30bb\u30eb\u30d5\u30db\u30b9\u30c8SNS\u69cb\u7bc9 | \u3055\u304f\u3089\u306e\u30ca\u30ec\u30c3\u30b8\n\n\n\n\n\n\u9e7f\u5150\u5cf6\u3089\u3050\u3068\u3044\u3046Linux User Group\u306eVPS\u3092\u3055\u304f\u3089\u30a4\u30f3\u30bf\u30fc\u30cd\u30c3\u30c8\u3055\u3093\u306b\u30b3\u30df\u30cb\u30e5\u30c6\u30a3\u652f\u63f4\u3068\u3057\u3066\u63d0\u4f9b\u3057\u3066\u3044\u305f\u3060\u3044\u3066\u3044\u307e\u3059\uff0e\u3053\u306e\u7e01\u3067\u3055\u304f\u3089\u306e\u30ca\u30ec\u30c3\u30b8\u306b\u8a18\u4e8b\u3092\u5bc4\u7a3f\u3059\u308b\u3053\u3068\u306b\u306a\u308a\u307e\u3057\u305f\uff0e\n\u4eca\u56de\u306e\u5185\u5bb9\u306f\u8efd\u91cf\u306aActivityPub Server \u306esnac \u3092\u8a2d\u5b9a\u3057\u305f\u3068\u304d\u306e\u8a18\u9332\u3092\u307e\u3068\u3081\u305f\u3082\u306e\u3067\u3059\uff0e\n\u5143\u306f\u9e7f\u5150\u5cf6Linux\u52c9\u5f37\u4f1a 2025.10 \u3067\u767a\u8868\u3057\u305f\u3082\u306e\u3092\u5143\u306b\u3057\u305f\u3082\u306e\u3067\u3059\uff0e\n\n\n\u8208\u5473\u304c\u3042\u308c\u3070\u8aad\u3093\u3067\u3082\u3089\u3048\u308b\u3068\u5b09\u3057\u3044\u3067\u3059\uff0e\n\n\n\n\n\u9e7f\u5150\u5cf6\u3089\u3050(Linux User’s Group)\n\n\n\u9e7f\u5150\u5cf6Linux\u52c9\u5f37\u4f1a 2025.10(\u30aa\u30f3\u30e9\u30a4\u30f3\u958b\u50ac) – connpass\n\n\n\n\u30a2\u30ca\u30a6\u30f3\u30b9\u5411\u3051\u306b\u30df\u30cb\u30de\u30ea\u30b9\u30c8\u5411\u3051 ActivityPub Server \u306e snac \u3092\u5229\u7528\n\n\n\n\n\ninfo (@info@snac.kagolug.org)", "date_published": "2025-12-09T19:49:03+09:00", "date_modified": "2025-12-09T19:49:05+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", "blog", "sakura internet", "snac", "\u52c9\u5f37\u4f1a" ] } ] }