- PVSM.RU - https://www.pvsm.ru -
[1]
Где разместить сайт? Оказывается, для необязательно покупать
Bluesky [3] — это децентрализованная социальная сеть с 30 млн пользователей [4], альтернатива твиттеру (Х), с мостом в телеграм [5] и другими интересными фишками. Внешне выглядит примерно как твиттер, только без рекомендаций:

Приложение спроектировано без единого центра управления, его не может контролировать ни одна компания. Очевидно, идея появилась после того, как Илон Маск купил твиттер.
Bluesky изначально стремился использовать существующую P2P-экосистему в интернете [6]:

В децентрализованной сети у каждого пользователя своё приложение в своём «персональном дата-сервере» PDS (Personal Data Server) [7]. У этих хостов/контейнеров есть уникальные URL типа morel.us-east.host.bsky.network. Хосты общаются по протоколу AT Protocol [8]. Подписка на других пользователей аналогична RSS-подписке. И главное, что домены (аккаунты) пользователей обладают портативностью, то есть владелец может «уйти» в другую соцсеть, сохранив подписчиков. Портативность аккаунтов в децентрализованной сети — главная особенность AT Protocol.
Bluesky — это юридическое лицо типа Public Benefit LLC (PBLLC) [9], то есть некоммерческая корпорация, которая декларирует основной целью принесение пользы обществу [10]. Сотрудники компании являются её совладельцами.
Недавно один из пользователей Bluesky нашёл способ эксплуатировать AT Protocol не по назначению, а именно — для

В своём блоге автор подробно разъясняет [12], как он «хакнул» Bluesky, а точнее AT Protocol (хак был этичный, с предварительного уведомления администрации Bluesky).
Личный PDS (Personal Data Server) пользователя размещается на morel.us-east.host.bsky.network.
Каждый пост, который создаёт пользователь в Bluesky — это на самом деле комбинация записей [14] и блобов [15], которые он загружает в свой контейнер PDS. Блобы — это любые медиафайлы, которые туда можно загружать, они хранятся отдельно от записей. Согласно спецификации, это могут быть файлы любого формата, которым присваиваются уникальные адреса в виды контент-хеша (CID).
Типы постов определены в лексиконе [16] Bluesky (app.bsky.*), а типы записей — в лексиконе AT Protocol (com.atproto.*). Спецификация разрешает создание записей любого типа, определённого в лексиконе или подсхеме [17]. В свою очередь, блобы закачиваются на сервер заранее, помещаются во временное хранилище, но становятся доступными только после появления ссылки на блоб в записи.
Для публикации контента в PDS сначала нужно получить токен аутентификации:
curl -X POST 'https://bsky.social/xrpc/com.atproto.server.createSession'
-H 'Content-Type: application/json'
-d '{"identifier": "'"$BSKY_HANDLE"'", "password": "'"$BSKY_PWD"'"}'
Поле accessJWT field из ответа в дальнейшем будет использоваться как $ACCESS_JWT.
Для закачки блоба в репозиторий используется метод com-atproto-repo-upload-blob [18]. Контент сайта — это простой файл index.html.
<h1>This Website is Hosted on Bluesky</h1>
<p>
This website is just a blob uploaded to Bluesky via the API. Curious about how
this works? Check out the write-up on <a
href="https://danielmangum.com/posts/this-website-is-hosted-on-bluesky/">danielmangum.com</a>.
</p>
Для его закачки используется следующая команда:
curl -X POST 'https://bsky.social/xrpc/com.atproto.repo.uploadBlob'
-H 'Authorization: Bearer '"$ACCESS_JWT"''
-H 'Content-Type: text/html'
--data-binary '@index.html'
Ответ:
{
"blob": {
"$type": "blob",
"ref": {
"$link": "bafkreic5fmelmhqoqxfjz2siw5ey43ixwlzg5gvv2pkkz7o25ikepv4zeq"
},
"mimeType": "text/html",
"size": 268
}
}
Возвращаемый $link можно использовать в качестве идентификатора (cid [19]) для вызова блоба с помощью метода getBlob.
curl -L 'https://bsky.social/xrpc/com.atproto.sync.getBlob?did='"$DID"'&cid='"$LINK"''
Чтобы этот блоб стал доступен, на него нужно сослаться в какой-нибудь записи. Например, можно добавить в пост встроенное изображение [20], для валидации указав mimeType как image/jpeg.
В коде AT Protocol можно посмотреть, как конкретно протокол определяет ссылки на блобы в записи [21].
Важно отметить, что он поддерживает подключение новых лексиконов. Например, мы можем создать запись нового типа com.danielmangum.hack.website, включив в неё ссылку на закачанный блоб HTML:
curl -X POST 'https://bsky.social/xrpc/com.atproto.repo.createRecord'
-H 'Authorization: Bearer '"$ACCESS_JWT"''
-H 'Content-Type: application/json'
-d '{
"repo": "danielmangum.com",
"collection": "com.danielmangum.hack.website",
"record": {
"$type": "com.danielmangum.hack.website",
"website": {
"$type": "blob",
"ref": {
"$link": "bafkreic5fmelmhqoqxfjz2siw5ey43ixwlzg5gvv2pkkz7o25ikepv4zeq"
},
"mimeType": "text/html",
"size": 268
}
}
}'
{
"uri": "at://did:plc:j22nebhg6aek3kt2mex5ng7e/com.danielmangum.hack.website/3lbnguuzckm2u",
"cid": "bafyreicjcptshc7lmgb7abxlvcb5fmqqjdj6neie23szyum7rcaowmm5qm",
"commit": {
"cid": "bafyreid6apjjy56xoyenxmg5xv356twh22n3hayecoxlf6mflpltlzpuwu",
"rev": "3lbnguuzmd42u"
},
"validationStatus": "unknown"
}
И всё, после этого блоб доступен для просмотра даже неаутентифицированными пользователями, то есть кем угодно:
curl -L 'https://bsky.social/xrpc/com.atproto.sync.getBlob?did='"$DID"'&cid=bafkreic5fmelmhqoqxfjz2siw5ey43ixwlzg5gvv2pkkz7o25ikepv4zeq'
<h1>This Website is Hosted on Bluesky</h1>
<p>
This website is just a blob uploaded to Bluesky via the API. Curious about how
this works? Check out the write-up on <a
href="https://danielmangum.com/posts/this-website-is-hosted-on-bluesky/">danielmangum.com</a>.
</p>
Сайт открывается в браузере как положено. С одной стороны, AT Protocol здесь используется не по назначению. С другой стороны, в будущем его вполне могут приспособить для этой цели. Свободная и открытая платформа
Кроме того, произвольный контент можно встраивать непосредственно в посты [23]. В данном случае HTML не будет рендериться, но другое приложение может запросить его и отрендерить как положено.
Повторим, что хакер перед публикацией эксперимента уведомил администрацию Bluesky, и они были не против. Это даёт основания полагать, что данная функциональность рассматривается не столько как баг, а скорее как фича [24].
Современные телефоны с гигабайтами оперативки и сотнями гигабайт флеш-памяти отлично подходят для
В этом руководстве [25] разъясняется, как установить postmarketOS (дистрибутив Linux на базе Alpine) на смартфон. Руководство актуально для совместимых моделей [26]. На персональном компьютере должны присутствовать Fastboot [27] (скачать в составе SDK) и файлы boot и img для PostmarketOS. На смартфоне требуется предварительно включить режим разработчика (Developer Mode) и USB-отладку (USB Debugging).

Файлы boot и img от PostmarketOS скачиваем для конкретной модели смартфона [26].
Потом действуем согласно пошаговой инструкции [25]:
147147
sudo apk update
sudo service sshd start
sudo rc-update add sshd

ssh user@IP_Address_of_the_phone
sudo apk add docker
sudo service docker start
sudo rc-update add docker default
sudo docker run -d -p 8000:8000 -p 9443:9443 --name portainer --restart=always -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data portainer/portainer-ce:latest
Затем можно подключиться к сервису Portainer на телефоне с компьютерного браузера по адресу и порту IP_телефона:9443. С компьютера удобно управлять контейнерами на смартфоне:

Вторая часть [29] руководства посвящена тому, как извлечь аккумулятор, чтобы смартфон работал напрямую от электрической сети. Дело в том, что встроенный аккумулятор не даёт телефону работать от сети, а вместо этого непрерывно заряжается и разряжается сам. Это представляет опасность, потому что аккумулятор нагревается и может вздуться, тем более у него ограниченный ресурс на количество циклов заряда/разряда. В общем, его лучше извлечь.

Смартфон без аккумулятора питается от сети через модифицированный кабель USB-C, который обманывает встроенную систему управления питанием. Если аккумулятор удалён, то в таком режиме смартфон может работать практически вечно.
Несколько шагов по удалению аккумулятора и переделке контура энергопитания:





Некоторые меры предосторожности и правила безопасности:
Но это всё равно отличный способ использовать старые телефоны вместо того, чтобы их выбрасывать.
© 2025 ООО «МТ ФИНАНС»
Автор: programmerguru
Источник [30]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/ssh/412483
Ссылки в тексте:
[1] Image: https://habr.com/ru/companies/ruvds/articles/887446/
[2] хостинга: https://www.reg.ru/?rlink=reflink-717
[3] Bluesky: https://bsky.app/
[4] 30 млн пользователей: https://bsky.app/profile/bsky.app/post/3lgu4lg6j2k2v
[5] мостом в телеграм: https://mastogr.am/
[6] P2P-экосистему в интернете: https://gitlab.com/bluesky-community1/decentralized-ecosystem/-/blob/master/README.md
[7] PDS (Personal Data Server): https://atproto.com/guides/glossary#pds-personal-data-server
[8] AT Protocol: https://atproto.com/
[9] Public Benefit LLC (PBLLC): https://bsky.social/about/blog/2-7-2022-overview
[10] декларирует основной целью принесение пользы обществу: https://habr.com/ru/companies/ruvds/articles/865310/
[11] Вот пример сайта: https://porcini.us-east.host.bsky.network/xrpc/com.atproto.sync.getBlob?did=did:plc:j22nebhg6aek3kt2mex5ng7e&cid=bafkreic5fmelmhqoqxfjz2siw5ey43ixwlzg5gvv2pkkz7o25ikepv4zeq
[12] разъясняет: https://danielmangum.com/posts/this-website-is-hosted-on-bluesky/
[13] PDS Entryway: https://docs.bsky.app/docs/advanced-guides/entryway
[14] записей: https://atproto.com/guides/glossary#record
[15] блобов: https://atproto.com/specs/blob
[16] лексиконе: https://atproto.com/specs/lexicon
[17] подсхеме: https://docs.bsky.app/docs/advanced-guides/custom-schemas#sub-schemas
[18] com-atproto-repo-upload-blob: https://docs.bsky.app/docs/api/com-atproto-repo-upload-blob
[19] cid: https://atproto.com/guides/glossary#cid-content-id
[20] встроенное изображение: https://docs.bsky.app/docs/advanced-guides/posts#images-embeds
[21] определяет ссылки на блобы в записи: https://github.com/bluesky-social/atproto/blob/b5c6bce9703faa7a8eb7f629d34f173116cb37b8/packages/lexicon/src/blob-refs.ts#L26
[22] из соображений безопасности: https://atproto.com/specs/blob#security-considerations
[23] встраивать непосредственно в посты: https://bsky.app/profile/danielmangum.com/post/3lbpfxwnjoq23
[24] скорее как фича: https://github.com/bluesky-social/atproto/issues/523
[25] этом руководстве: https://crackoverflow.com/docs/system_administration/containerization/install-docker-natively-on-android-phone-and-use-it-as-a-home-server/
[26] совместимых моделей: https://postmarketos.org/install/
[27] Fastboot: https://android.googlesource.com/platform/system/core/+/master/fastboot/#fastboot
[28] Portainer: https://www.portainer.io/
[29] Вторая часть: https://crackoverflow.com/docs/system_administration/containerization/turn_android_phone_to_batteryless_home_server/
[30] Источник: https://habr.com/ru/companies/ruvds/articles/887446/?utm_source=habrahabr&utm_medium=rss&utm_campaign=887446
Нажмите здесь для печати.