«Не удалось выполнить запрос» при попытке поставить реакцию
Какое-то ограничение?
Какое-то ограничение?
Пытаюсь написать приложение. Пока все не зашло далеко, хочу начать прикручивать какие то гуи к нему. Вопрос в том, что использовать, если хочется: а) легкого и отзывчивого интерфейса, даже если он выглядит как из 90-х, б) кросс платформенности (нужно покрыть минимум луинуксы 2020+ и винду 8.1+), в) чтобы было максимально живуче, г) желательно, чтобы все это можно было реализовать на питоне, т. к. я других ЯП не знаю.
Какие есть варианты? Или я ищу то, чего не существует? Веб не предлагать, я его потыкал по советам (джанго и фласк), ужаснулся и ушел.
Чтобы был какой-то контекст, приложение для работы с БД (sqlite). По сути делает запросы, заполняет, делает аналитику на основе данных по кнопочке «Сделать анализ» и тому подобное. Все локально. Если совсем питон не пойдет тут, скажите, куда смотреть с учетом того, что осваивать это будет в свободное время непрограммист.
Перемещено hobbit из general
Пробую latex (надоело воевать с офисами…)
MWE
\documentclass[a4paper, 12pt]{article}
\usepackage[document]{ragged2e}
\usepackage[T2A]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{indentfirst}
\setlength{\parindent}{20pt}
\usepackage[english, russian]{babel}
\usepackage{geometry}
\geometry{left=20mm, right=10mm, top=10mm, bottom=20mm}
\setcounter{secnumdepth}{0}
\begin{document}
\section{Введение}
\begin{justify}
Тут немного текста.
А тут еще немного.
\end{justify}
\end{document}
У первой строки «Тут немного текста» все равно нет отступа, хотя indentfirst подключен и явно задана величина отступа. В гугле похожие вопросы решались именно так. Костыль в виде \hspace работает, но зачем он нужен в каждом разделе…
Казалось бы.
Скрипт - https://privatebin.net/?7a925a1ae401d088#6XCisGp9xAX7viZZKuKzvGFJRbUWFgNsGKeo2oc4VHHP
Задача скрипта - бэкапнуть содержимое докер контейнеров. Сначала бэкапает на второй диск в NAS, потом бэкапает на внешний диск, потом бэкапает на удаленный сервер. Бэкапы на внешний диск и удаленный сервер делается не с основного, а со второго внутреннего, чтобы быстрее можно было заново запустить контейнеры (да, я тушу контейнеры на время бэкапа, а не использую дампы и прочие тулзы live бэкапов, потому что это домашний сервер и 2 минуты запланированного даунтайма для меня приемлемо).
Проблема в бэкапе на внешний диск, который маунтится в /mnt/mirror
. Скрипт выполняется от рута. Как видно, в методе mount класса ExternalDrive
есть -v
. Так я хотел отдебажить проблему, которая заключается в том, что когда скрипт запускается из крона, по какой-то причине внешний диск после расшифровки не маунтится. Бэкап заливается просто в корень, где нет свободного места под такой объем информации. Скрипт умирает. При этом если запускать вручную, то монтирование всегда успешно.
Проблемное место, видимо, тут
def mount(self):
"""Mount drive."""
dev_path = Path(f'/dev/mapper/{self.decrypt_name}')
subprocess.run([
'mount',
'-v',
dev_path,
self.mount_point
])
self.mount_point
тут /mnt/mirror
. Он существует, никаких ограничений на нем нет.
Как видно из логики в main
, у меня есть дополнительная проверка на успешность монтирования:
drive.mount()
if drive.mount_point.is_mount():
backup_to_external_drive()
multisync()
drive.umount()
Если к точке монтирования не промонтировал внешний диск, дальнейший бэкап не должен идти. Судя по документации:
subprocess.run(args, *, stdin=None, input=None, stdout=None, stderr=None, shell=False, timeout=None, check=False) Run the command described by args. Wait for command to complete, then return a CompletedProcess instance.
при использовании subprocess.run
ожидается полное выполнение команды. Значит нет проблемы в том, что скрипт идет дальше после запуска одного из subprocess не ожидая его завершения.
При запуске вручную лог выглядит так:
2023-04-13 13:20:03 INFO Script backup_docker started
2023-04-13 13:21:09 INFO Finished in 00h 01m 06s
При запуске из крона так:
2023-04-14 02:00:01 INFO Script backup_docker started
Дальше пусто, т.к. все зависло (системный диск переполнен). В итоге получается так, что доходя до места, где задействуется функция бэкапа на внешний диск, он вроде как смонтирован, дополнительную проверку на наличие точки монтирования прошел, а на самом деле диск не смонтирован.
Почему при ручном выполнении скрипта внешний диск монтируется, а при выполнении из крона нет (или слишком быстро отмонтируется)?
Сервер. Докер последней версии. iptables. Поднят Nextcloud Hub 24.0.5 (проблему наблюдаю и на более ранних версиях). Обновления контейнера пулятся нормально. curl из контейнера
curl eth0.me
*мой ip*
apt из контейнера
apt update
Get:1 http://deb.debian.org/debian bullseye InRelease [116 kB]
Err:1 http://deb.debian.org/debian bullseye InRelease
Connection timed out [IP: 199.232.150.132 80]
Err:2 http://deb.debian.org/debian-security bullseye-security InRelease
Connection failed [IP: 146.75.118.132 80]
Get:3 http://deb.debian.org/debian bullseye-updates InRelease [44.1 kB]
Err:3 http://deb.debian.org/debian bullseye-updates InRelease
Connection timed out [IP: 199.232.150.132 80]
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
All packages are up to date.
W: Failed to fetch http://deb.debian.org/debian/dists/bullseye/InRelease Connection timed out [IP: 199.232.150.132 80]
W: Failed to fetch http://deb.debian.org/debian-security/dists/bullseye-security/InRelease Connection failed [IP: 146.75.118.132 80]
W: Failed to fetch http://deb.debian.org/debian/dists/bullseye-updates/InRelease Connection timed out [IP: 199.232.150.132 80]
W: Some index files failed to download. They have been ignored, or old ones used instead.
iptables сервера (полностью автоматические, формируются докером)
Chain INPUT (policy ACCEPT 567K packets, 586M bytes)
pkts bytes target prot opt in out source destination
Chain FORWARD (policy DROP 2286 packets, 174K bytes)
pkts bytes target prot opt in out source destination
7949K 4078M DOCKER-USER all -- any any anywhere anywhere
7949K 4078M DOCKER-ISOLATION-STAGE-1 all -- any any anywhere anywhere
476 72644 ACCEPT all -- any docker0 anywhere anywhere ctstate RELATED,ESTABLISHED
8 512 DOCKER all -- any docker0 anywhere anywhere
338 962K ACCEPT all -- docker0 !docker0 anywhere anywhere
0 0 ACCEPT all -- docker0 docker0 anywhere anywhere
63M 35G ACCEPT all -- any dockerpub0 anywhere anywhere ctstate RELATED,ESTABLISHED
1228K 74M DOCKER all -- any dockerpub0 anywhere anywhere
861K 119M ACCEPT all -- dockerpub0 !dockerpub0 anywhere anywhere
1151K 69M ACCEPT all -- dockerpub0 dockerpub0 anywhere anywhere
0 0 ACCEPT all -- wg0 dockerpub0 anywhere anywhere
0 0 ACCEPT all -- dockerpub0 wg0 anywhere anywhere
Chain OUTPUT (policy ACCEPT 394K packets, 46M bytes)
pkts bytes target prot opt in out source destination
Chain DOCKER (2 references)
pkts bytes target prot opt in out source destination
0 0 ACCEPT tcp -- !dockerpub0 dockerpub0 anywhere 172.32.0.11 tcp dpt:http
0 0 ACCEPT tcp -- !dockerpub0 dockerpub0 anywhere 172.32.0.12 tcp dpt:8080
2 128 ACCEPT tcp -- !dockerpub0 dockerpub0 anywhere 172.32.0.14 tcp dpt:3000
0 0 ACCEPT udp -- !dockerpub0 dockerpub0 anywhere 172.32.0.14 udp dpt:3000
0 0 ACCEPT tcp -- !dockerpub0 dockerpub0 anywhere 172.32.0.14 tcp dpt:https
106 6584 ACCEPT tcp -- !dockerpub0 dockerpub0 anywhere 172.32.0.14 tcp dpt:http
0 0 ACCEPT tcp -- !dockerpub0 dockerpub0 anywhere 172.32.0.14 tcp dpt:domain
76951 5208K ACCEPT udp -- !dockerpub0 dockerpub0 anywhere 172.32.0.14 udp dpt:domain
0 0 ACCEPT tcp -- !dockerpub0 dockerpub0 anywhere 172.32.0.2 tcp dpt:8080
0 0 ACCEPT tcp -- !dockerpub0 dockerpub0 anywhere 172.32.0.2 tcp dpt:3012
0 0 ACCEPT tcp -- !dockerpub0 dockerpub0 anywhere 172.32.0.13 tcp dpt:3000
0 0 ACCEPT tcp -- !dockerpub0 dockerpub0 anywhere 172.32.0.13 tcp dpt:ssh
0 0 ACCEPT tcp -- !dockerpub0 dockerpub0 anywhere 172.32.0.3 tcp dpt:postgresql
0 0 ACCEPT tcp -- !dockerpub0 dockerpub0 anywhere 172.32.0.4 tcp dpt:22300
0 0 ACCEPT tcp -- !dockerpub0 dockerpub0 anywhere 172.32.0.10 tcp dpt:8080
0 0 ACCEPT tcp -- !dockerpub0 dockerpub0 anywhere 172.32.0.8 tcp dpt:http
Chain DOCKER-ISOLATION-STAGE-1 (1 references)
pkts bytes target prot opt in out source destination
338 962K DOCKER-ISOLATION-STAGE-2 all -- docker0 !docker0 anywhere anywhere
566K 94M DOCKER-ISOLATION-STAGE-2 all -- dockerpub0 !dockerpub0 anywhere anywhere
25M 14G RETURN all -- any any anywhere anywhere
Chain DOCKER-ISOLATION-STAGE-2 (2 references)
pkts bytes target prot opt in out source destination
0 0 DROP all -- any docker0 anywhere anywhere
0 0 DROP all -- any dockerpub0 anywhere anywhere
567K 95M RETURN all -- any any anywhere anywhere
Chain DOCKER-USER (1 references)
pkts bytes target prot opt in out source destination
69M 35G RETURN all -- any any anywhere anywhere
NAT
Chain PREROUTING (policy ACCEPT 4066 packets, 334K bytes)
pkts bytes target prot opt in out source destination
158K 13M DOCKER all -- any any anywhere anywhere ADDRTYPE match dst-type LOCAL
27998 2643K DOCKER all -- any any anywhere anywhere ADDRTYPE match dst-type LOCAL
27998 2643K DOCKER all -- any any anywhere !127.0.0.0/8 ADDRTYPE match dst-type LOCAL
Chain INPUT (policy ACCEPT 187 packets, 45050 bytes)
pkts bytes target prot opt in out source destination
Chain OUTPUT (policy ACCEPT 1534 packets, 191K bytes)
pkts bytes target prot opt in out source destination
155K 9322K DOCKER all -- any any anywhere !127.0.0.0/8 ADDRTYPE match dst-type LOCAL
Chain POSTROUTING (policy ACCEPT 2108 packets, 197K bytes)
pkts bytes target prot opt in out source destination
15 1875 MASQUERADE all -- any !docker0 172.17.0.0/16 anywhere
88676 5816K MASQUERADE all -- any !dockerpub0 172.32.0.0/24 anywhere
1259K 116M MASQUERADE all -- any wg0 anywhere anywhere
0 0 MASQUERADE tcp -- any any 172.32.0.11 172.32.0.11 tcp dpt:http
0 0 MASQUERADE tcp -- any any 172.32.0.12 172.32.0.12 tcp dpt:8080
0 0 MASQUERADE tcp -- any any 172.32.0.14 172.32.0.14 tcp dpt:3000
0 0 MASQUERADE udp -- any any 172.32.0.14 172.32.0.14 udp dpt:3000
0 0 MASQUERADE tcp -- any any 172.32.0.14 172.32.0.14 tcp dpt:https
0 0 MASQUERADE tcp -- any any 172.32.0.14 172.32.0.14 tcp dpt:http
0 0 MASQUERADE tcp -- any any 172.32.0.14 172.32.0.14 tcp dpt:domain
0 0 MASQUERADE udp -- any any 172.32.0.14 172.32.0.14 udp dpt:domain
0 0 MASQUERADE tcp -- any any 172.32.0.2 172.32.0.2 tcp dpt:8080
0 0 MASQUERADE tcp -- any any 172.32.0.2 172.32.0.2 tcp dpt:3012
0 0 MASQUERADE tcp -- any any 172.32.0.13 172.32.0.13 tcp dpt:3000
0 0 MASQUERADE tcp -- any any 172.32.0.13 172.32.0.13 tcp dpt:ssh
0 0 MASQUERADE tcp -- any any 172.32.0.3 172.32.0.3 tcp dpt:postgresql
0 0 MASQUERADE tcp -- any any 172.32.0.4 172.32.0.4 tcp dpt:22300
0 0 MASQUERADE tcp -- any any 172.32.0.10 172.32.0.10 tcp dpt:8080
0 0 MASQUERADE tcp -- any any 172.32.0.8 172.32.0.8 tcp dpt:http
Chain DOCKER (4 references)
pkts bytes target prot opt in out source destination
0 0 RETURN all -- docker0 any anywhere anywhere
6 360 RETURN all -- dockerpub0 any anywhere anywhere
62 3720 DNAT tcp -- !dockerpub0 any anywhere anywhere tcp dpt:51006 to:172.32.0.11:80
0 0 DNAT tcp -- !dockerpub0 any anywhere anywhere tcp dpt:51010 to:172.32.0.12:8080
2 128 DNAT tcp -- !dockerpub0 any anywhere anywhere tcp dpt:51013 to:172.32.0.14:3000
0 0 DNAT udp -- !dockerpub0 any anywhere anywhere udp dpt:3000 to:172.32.0.14:3000
0 0 DNAT tcp -- !dockerpub0 any anywhere anywhere tcp dpt:51011 to:172.32.0.14:443
106 6584 DNAT tcp -- !dockerpub0 any anywhere anywhere tcp dpt:51012 to:172.32.0.14:80
0 0 DNAT tcp -- !dockerpub0 any anywhere anywhere tcp dpt:domain to:172.32.0.14:53
59676 4058K DNAT udp -- !dockerpub0 any anywhere anywhere udp dpt:domain to:172.32.0.14:53
21 1260 DNAT tcp -- !dockerpub0 any anywhere anywhere tcp dpt:51001 to:172.32.0.2:8080
2 120 DNAT tcp -- !dockerpub0 any anywhere anywhere tcp dpt:51002 to:172.32.0.2:3012
0 0 DNAT tcp -- !dockerpub0 any anywhere anywhere tcp dpt:51003 to:172.32.0.13:3000
0 0 DNAT tcp -- !dockerpub0 any anywhere anywhere tcp dpt:51004 to:172.32.0.13:22
0 0 DNAT tcp -- !dockerpub0 any anywhere anywhere tcp dpt:51009 to:172.32.0.3:5432
24 1440 DNAT tcp -- !dockerpub0 any anywhere anywhere tcp dpt:51008 to:172.32.0.4:22300
0 0 DNAT tcp -- !dockerpub0 any anywhere anywhere tcp dpt:51007 to:172.32.0.10:8080
526 31560 DNAT tcp -- !dockerpub0 any anywhere anywhere tcp dpt:51005 to:172.32.0.8:80
Маршруты сервера
default via 192.168.77.1 dev eth0
10.70.71.0/24 dev wg0 proto kernel scope link src 10.70.71.4
127.0.0.0/8 dev lo scope link
172.17.0.0/16 dev docker0 proto kernel scope link src 172.17.0.1 linkdown
172.32.0.0/24 dev dockerpub0 proto kernel scope link src 172.32.0.1
192.168.7.0/24 via 192.168.77.1 dev eth0 src 192.168.77.30
192.168.66.0/24 via 192.168.77.1 dev eth0 src 192.168.77.30
192.168.77.0/24 dev eth0 proto kernel scope link src 192.168.77.30
Обновление любых приложений Nextcloud не работает. Ошибка
[no app in context] Error: GuzzleHttp\Exception\ConnectException: cURL error 28: Operation timed out after 120001 milliseconds with 0 out of 0 bytes received (see https://curl.haxx.se/libcurl/c/libcurl-errors.html) for https://objects.githubusercontent.com/github-production-release-asset-2e65be/377448625/940ffb54-81cc-4bdf-a3a3-28fd393682ae?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIAIWNJYAX4CSVEH53A%2F20230309%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20230309T120745Z&X-Amz-Expires=300&X-Amz-Signature=38412c03a2489c3f732986dad99a2acb3781ab35b9877cf2d3b9e2a0d9b699b5&X-Amz-SignedHeaders=host&actor_id=0&key_id=0&repo_id=377448625&response-content-disposition=attachment%3B%20filename%3Dspreed-v15.0.4.tar.gz&response-content-type=application%2Foctet-stream at <<closure>>
0. /var/www/html/3rdparty/guzzlehttp/guzzle/src/Handler/CurlFactory.php line 158
GuzzleHttp\Handler\CurlFactory::createRejection(["GuzzleHttp\\Ha ... l], [28,"Operation t ... "])
1. /var/www/html/3rdparty/guzzlehttp/guzzle/src/Handler/CurlFactory.php line 110
GuzzleHttp\Handler\CurlFactory::finishError(["GuzzleHttp\\Handler\\CurlHandler"], ["GuzzleHttp\\Ha ... l], ["GuzzleHttp\\Handler\\CurlFactory"])
2. /var/www/html/3rdparty/guzzlehttp/guzzle/src/Handler/CurlHandler.php line 47
GuzzleHttp\Handler\CurlFactory::finish(["GuzzleHttp\\Handler\\CurlHandler"], ["GuzzleHttp\\Ha ... l], ["GuzzleHttp\\Handler\\CurlFactory"])
3. /var/www/html/lib/private/Http/Client/DnsPinMiddleware.php line 146
GuzzleHttp\Handler\CurlHandler->__invoke("*** sensitive parameters replaced ***", "*** sensitive parameters replaced ***")
4. /var/www/html/3rdparty/guzzlehttp/guzzle/src/PrepareBodyMiddleware.php line 35
OC\Http\Client\DnsPinMiddleware->OC\Http\Client\{closure}("*** sensitive parameters replaced ***")
5. /var/www/html/3rdparty/guzzlehttp/guzzle/src/Middleware.php line 31
GuzzleHttp\PrepareBodyMiddleware->__invoke("*** sensitive parameters replaced ***", "*** sensitive parameters replaced ***")
6. /var/www/html/3rdparty/guzzlehttp/guzzle/src/RedirectMiddleware.php line 71
GuzzleHttp\Middleware::GuzzleHttp\{closure}("*** sensitive parameters replaced ***")
7. /var/www/html/3rdparty/guzzlehttp/guzzle/src/RedirectMiddleware.php line 107
GuzzleHttp\RedirectMiddleware->__invoke("*** sensitive parameters replaced ***", "*** sensitive parameters replaced ***")
8. /var/www/html/3rdparty/guzzlehttp/guzzle/src/RedirectMiddleware.php line 73
GuzzleHttp\RedirectMiddleware->checkRedirect("*** sensitive parameters replaced ***", "*** sensitive parameters replaced ***", "*** sensitive parameters replaced ***")
9. /var/www/html/3rdparty/guzzlehttp/promises/src/FulfilledPromise.php line 41
GuzzleHttp\RedirectMiddleware->GuzzleHttp\{closure}("*** sensitive parameters replaced ***")
10. /var/www/html/3rdparty/guzzlehttp/promises/src/TaskQueue.php line 48
GuzzleHttp\Promise\FulfilledPromise::GuzzleHttp\Promise\{closure}("*** sensitive parameters replaced ***")
11. /var/www/html/3rdparty/guzzlehttp/promises/src/Promise.php line 248
GuzzleHttp\Promise\TaskQueue->run(true)
12. /var/www/html/3rdparty/guzzlehttp/promises/src/Promise.php line 224
GuzzleHttp\Promise\Promise->invokeWaitFn()
13. /var/www/html/3rdparty/guzzlehttp/promises/src/Promise.php line 269
GuzzleHttp\Promise\Promise->waitIfPending()
14. /var/www/html/3rdparty/guzzlehttp/promises/src/Promise.php line 226
GuzzleHttp\Promise\Promise->invokeWaitList()
15. /var/www/html/3rdparty/guzzlehttp/promises/src/Promise.php line 62
GuzzleHttp\Promise\Promise->waitIfPending()
16. /var/www/html/3rdparty/guzzlehttp/guzzle/src/Client.php line 187
GuzzleHttp\Promise\Promise->wait()
17. /var/www/html/lib/private/Http/Client/Client.php line 218
GuzzleHttp\Client->request("get", "https://github. ... z", ["/var/www/html/ ... "])
18. /var/www/html/lib/private/Installer.php line 295
OC\Http\Client\Client->get("https://github. ... z", ["/tmp/oc_tmp_Fhxhxs-.tar.gz",120])
19. /var/www/html/lib/private/Installer.php line 193
OC\Installer->downloadApp("*** sensitive parameters replaced ***", false)
20. /var/www/html/apps/settings/lib/Controller/AppSettingsController.php line 535
OC\Installer->updateAppstoreApp("*** sensitive parameters replaced ***")
21. /var/www/html/lib/private/AppFramework/Http/Dispatcher.php line 225
OCA\Settings\Controller\AppSettingsController->updateApp("*** sensitive parameters replaced ***")
22. /var/www/html/lib/private/AppFramework/Http/Dispatcher.php line 133
OC\AppFramework\Http\Dispatcher->executeController(["OCA\\Settings\ ... "], "updateApp")
23. /var/www/html/lib/private/AppFramework/App.php line 172
OC\AppFramework\Http\Dispatcher->dispatch(["OCA\\Settings\ ... "], "updateApp")
24. /var/www/html/lib/private/Route/Router.php line 298
OC\AppFramework\App::main("OCA\\Settings\\ ... r", "updateApp", ["OC\\AppFramewo ... "], ["*** sensitive ... "])
25. /var/www/html/lib/base.php line 1047
OC\Route\Router->match("/settings/apps/update/spreed")
26. /var/www/html/index.php line 36
OC::handleRequest()
GET /settings/apps/update/spreed
from 192.168.77.30 by admin at 2023-03-09T12:11:50+00:00
В остальных контейнерах, а у меня их десять, все коннектится, все обновления проходят, из контейнеров могу подключится к тырнету. Все контейнеры в одном сегменте. У НК нет. На профильный форум писал, ничего работающего не посоветовали. Разрабам по мылу писал, запросили инфу, ничего не ответили (уже полгода прошло). В багтрекер писал (похожая нерешенная тема), ничего не ответили.
В чем может быть проблема? Судя по всему она не распространенная, иначе бы все уже подняли бы шум.
Работает НК после реверс прокси (nginx-proxy-manager в отдельном контейнере). В логах нжинкса я никаких ошибок или блоков не вижу. Все как у других контейнеров. На хосте поднят wg до vps она же шлюз. Весь трафик идет через wg. Внутри wg все клиенты nextcloud. Снаружи их нет. Все клиенты успешно взаимодействуют друг с другом, с НК и с другими сервисами в докере.
Где-то мисконфиг у меня в настройках сети или НК, не знаю… docker-compose.yml если что:
services:
db:
image: mariadb:10.5
command: --transaction-isolation=READ-COMMITTED --binlog-format=ROW
restart: always
volumes:
- /opt/docker/persistent/nextcloud-db:/var/lib/mysql
environment:
- MYSQL_ROOT_PASSWORD=secret
- MARIADB_AUTO_UPGRADE=0
- MARIADB_DISABLE_UPGRADE_BACKUP=1
env_file:
- db.env
redis:
image: redis:alpine
restart: always
app:
image: nextcloud:apache
restart: always
ports:
- "51005:80"
volumes:
- /mnt/media/docker/containers/nextcloud:/var/www/html
environment:
- MYSQL_HOST=db
- REDIS_HOST=redis
env_file:
- db.env
depends_on:
- db
- redis
cron:
image: nextcloud:apache
restart: always
volumes:
- /mnt/media/docker/containers/nextcloud:/var/www/html
entrypoint: /cron.sh
depends_on:
- db
- redis
networks:
default:
name: dockerpub0
external: true
Очередной. Я много подобных тут прочитал за последние полтора года. У меня немного другие требования. Рынок ноутов считай не знаю, особенно с нынешними китайцами. Нужно:
В поисках выдает только макбуки и всякие трансорфмеры с тачскринами. Такого не нужно. Нужна классика. По поводу поколения процессоров и вот этого всего - мне хватит 5700U и выше, но лучше иметь небольшой запас по производительности.
Юзкейс: офисная работы, много браузера, любительская разработка на питоне, пара виртуалок (не постоянных).
Уже отсеял: современные синкпады (щупал в местном мвидео) - просто ужасный экран. Остальное у них даже смотреть не стал.
P.S. Пользуясь случаем продам свой macbook air m1 16/512 год в пользовании. Состояние отличное+++. Лоровцам со скидкой.
https://lunduke.substack.com/p/the-least-happy-computer-users-those
Опрос среди более 6000 респондентов.
Самые довольные среди ОС для ПК/мобильных устройств - пользователи macOS, а также тандема macOS + iOS.
Среди пользователей дистрибутивов линукса самые довольные - пользователи slackware, самые недовольные - пользователи arch linux.
Немного пятницы для вас.
Скрипт
#!/bin/sh
alienbob_repo_url='rsync://bear.alienbase.nl/mirrors/people/alien/slackbuilds'
local_repo_path='/home/user/slackware/alienbob'
mkdir -p "$local_repo_path" || exit 1
pkg_arch="pkg64"
distro_ver="15.0"
# Not syncing - p7zip, cabextract, chromium-ungoogled. ???
rsync -ahv --delete --prune-empty-dirs --progress \
--include="*/" \
--include='CHECKSUMS.md5' \
--include='CHECKSUMS.md5.asc' \
--include="calibre/${pkg_arch}/${distro_ver}/*" \
--include="cabextract/${pkg_arch}/${distro_ver}/*" \
--include="chromium-ungoogled/${pkg_arch}/${distro_ver}/*" \
--include="docker/${pkg_arch}/${distro_ver}/*" \
--include="containerd/${pkg_arch}/${distro_ver}/*" \
--include="ffmpeg/${pkg_arch}/${distro_ver}/*" \
--include="jq/${pkg_arch}/${distro_ver}/*" \
--include="libtorrent-rasterbar/${pkg_arch}/${distro_ver}/*" \
--include="keepassxc/${pkg_arch}/${distro_ver}/*" \
--include="pcsc-lite/${pkg_arch}/${distro_ver}/*" \
--include="botan/${pkg_arch}/${distro_ver}/*" \
--include="minizip/${pkg_arch}/${distro_ver}/*" \
--include="qbittorrent/${pkg_arch}/${distro_ver}/*" \
--include="nextcloud-client/${pkg_arch}/${distro_ver}/*" \
--include="obs-studio/${pkg_arch}/${distro_ver}/*" \
--include="p7zip/${pkg_arch}/${distro_ver}/*" \
--include="openjdk11/${pkg_arch}/${distro_ver}/*" \
--include="obs-studio/${pkg_arch}/${distro_ver}/*" \
--include="runc/${pkg_arch}/${distro_ver}/*" \
--include="x264/${pkg_arch}/${distro_ver}/*" \
--include="x265/${pkg_arch}/${distro_ver}/*" \
--include="wine/${pkg_arch}/${distro_ver}/*" \
--exclude="*" \
"${alienbob_repo_url}/" \
"${local_repo_path}/" \
&& echo Update: OK
Синкает все, кроме p7zip, cabextract, chromium-ungoogled. Дошло до того, что я копировал из адресной строки пути. Ну не синкает эти директории и их содержимое и все тут. Где тут ошибка? Глаза замылились видимо.
Думал, пока пост пишу и объясняю, что не так, до меня снизойдет озарение, но что-то его пока нет…
Давно не играл, тут решил перепройти, тем более новые карты появились. И тут нашел забавный то ли баг, то ли фичу. Есть испытания time trial (я только на Garden трассе его обнаружил). Нужно просто финишировать первым, при этом на карте нет сюрпризов, зато куча поворотов и бананов. Если обогнать всех и на последнем кругу прийти первым, но при этом, допустим, обогнав шестого из шести игроков, то игра почему-то засчитывает, что ты пришел пятым! Я сейчас три раза обогнал всех на эксперте на этой карте и все три раза оказался на 4 или 5 месте, потому что успел второй раз обогнать последнего/предпоследнего.
Это фича или баг? У кого нибудь воспроизводится? Версия 1.4.
Хочу сделать несколько простых веб сервисов (или как это правильно называется, когда есть веб фронт с заполнением чего-то, вычислением и представлением каких-то результатов?). Хочу именно сам, потому что и полезно, как вспомогательная деятельность, и интересно.
Более подробно: под мои задачи сделать веб страницу с полями, куда я ввожу какие-либо данные, которые заносятся в БД (sqlite, наверное, данных не так много, может на пару десятков тысяч строк), потом производятся некоторые расчеты, которые выводятся на страницу. Динамического обновления не надо, просто статика. Нажал - обновилась страница - результат показался. Ввел данные - нажал кнопку - данные отправились в БД. Красивостей особых не надо. По сути - заполнение бд, расчет, предоставление результата. Одна из крайне желательных фич, которую хочу внедрить, - выпадающий список с авто дополнением некоторых полей. Например, вводишь «карт», а тебе предлагают для дополнения из базы (это для связанных полей many-to-many), варианты «карта», «картошка», «картина» и т.д.
Что я немного умею: баш, питон (пара скриптов с простыми классами на пару тысяч строк).
Вопрос: что взять в качестве инструмента (вроде у питона есть фреймворки (джанго, фласк и т.п.)), но мне не хватает знаний/опыта понять, подходят ли они)? Оставить питон или взять какое-нибудь php? Может БД тоже другую? Мне не нужно перспектив разработчика, нужно чисто для себя и решить свои задачи при этом.
Насоветуйте. Для опытных объяснение может быть слишком поверхностным, поэтому задавайте уточняющие вопросы.
Если получиться что-то более-менее вменяемое - выложу в открытый доступ, чтобы пользовались все нуждающиеся. По заветам FOSS. Хотя кому это надо…
P.S. Всякие airtables и аналоги не подходят. Много лишнего, формат работы с базой неудобный, нет нужных выводов информации, нельзя при желании расширить самому как мне нужно не влезая в их код, а чтобы мне туда влезть намного больше сил и времени уйдет, чем самому сделать точно как мне надо.
Перемещено hobbit из general
Проблема, судя по всему, в кодировке, но какую точно переменную нужно поменять - не знаю. Экспорт делаю через org-agenda-write
. Настройки экспорта такие:
((org-agenda-span 'week)
(org-agenda-add-entry-text-maxlines 100)
(ps-print-color-p 'black-white)
(ps-font-size 16)
(ps-font-family 'Courier)
(ps-number-of-columns 1)
(ps-landscape-mode t))
По кодировке
(prefer-coding-system 'utf-8)
(modify-coding-system-alist 'file "\\.pdf\\'" 'utf-8)
Пробовал windows-1252
, iso-8859-1
.
Любой pdf получается таким. Что поправить, чтобы родной язык увидеть?
Увидел, что еще может font-family влиять на это. Какой рекомендуется для русского?
gpg 2.2.40
libgcrypt 1.8.9
Спойлер: здесь будет много вопросов «это как?».
Для меня тема подписания (не шифрования, а именно подписания) файлов с gpg новая, может я, конечно, чего-то не понял. Вот три ситуации:
Файл А. Подписываю его подписью 1. Подписываю подпись 1 подписью 2. При верификации подписи я вижу обе подписи как подпись 2. Если удалить/переместить подпись 2 в другое место или переименовать, то опять вижу подпись 1. Это как?
Та же ситуация с двумя подписями. Подписал файл А подписью 1, а потом подпись 1 подписал подписью 2. Изменил файл. Верифицирую файл и получаю ОК, подпись файла валидна, файл в порядке. Это как? Убираю/удаляю подпись 2 и вижу, что файл не бьется. Это как?
Подписываю файл А подписью 1. Меняю файл А. Проверяю - подпись не бьется. Подписываю уже измененный файл А подписью 2, проверяю подпись 2 - не бьется. Это как?
Вопрос, стоит ли использовать ансибл исходя их:
если речь идет о нескольких своих серверах или проще не заморачиваться и использовать самописные скрипты? Речь о серверах, где 10-15 сервисов типо nextcloud, gitea, miniflux, wireguard, transmission, netdata, plex, samba и т.д.
Настройки всего там вполне себе хватает, даже с переносом конфигов. Стоит оно того или оверкил и проще заскриптовать? Как самоцель ансибл меня не интересует, я не в этой сфере занят. Рассматриваю только с точки зрения бытового удобства и рационального вложения времени в настройку и поддержку своего зоопарка.
Может кто-то подтвердить?
root@vps-test:~# uname -a
Linux vps-test 5.10.0-18-amd64 #1 SMP Debian 5.10.140-1 (2022-09-02) x86_64 GNU/Linux
root@vps-test:~# /usr/sbin/nft -f /etc/nftables.conf ; echo $?
0
root@vps-test:~# systemctl start nftables.service
Job for nftables.service failed because the control process exited with error code.
See "systemctl status nftables.service" and "journalctl -xe" for details.
root@vps-test:~# systemctl status nftables.service
● nftables.service - nftables
Loaded: loaded (/lib/systemd/system/nftables.service; enabled; vendor preset: enabled)
Active: failed (Result: exit-code) since Mon 2022-09-19 18:22:24 CEST; 4s ago
Docs: man:nft(8)
http://wiki.nftables.org
Process: 836 ExecStart=/usr/sbin/nft -f /etc/nftables.conf (code=exited, status=1/FAILURE)
Main PID: 836 (code=exited, status=1/FAILURE)
CPU: 5ms
Sep 19 18:22:24 vps-test systemd[1]: Starting nftables...
Sep 19 18:22:24 vps-test nft[836]: internal:0:0-0: Error: Could not open file "/etc/nftables.conf": No such file or directory
Sep 19 18:22:24 vps-test systemd[1]: nftables.service: Main process exited, code=exited, status=1/FAILURE
Sep 19 18:22:24 vps-test systemd[1]: nftables.service: Failed with result 'exit-code'.
Sep 19 18:22:24 vps-test systemd[1]: Failed to start nftables.
lrwxrwxrwx 1 root root 44 Sep 19 07:48 /etc/nftables.conf -> ../root/.dotfiles-vps/nftables/nftables.conf
Сервис, насколько я понимаю, рутовый.
root@vps-test:~# systemctl show nftables.service | grep ^User
User=root
Поэтому проблем с доступом быть не должно. Что ему не нравится? Это gnu stow, если что.
Перемещено hobbit из general
Конфигурация:
VPS с апачем для реверспрокси и ВПН (10.0.0.1).
Сервер с вебней, на который надо проксировать, с адресом 10.0.0.2. Допустим, на этом сервере есть веб-приложение miniflux, к которому я хочу получать доступ извне.
Конфиг апача дефолтный для дебиана. Включены модули:
Loaded Modules:
core_module (static)
so_module (static)
watchdog_module (static)
http_module (static)
log_config_module (static)
logio_module (static)
version_module (static)
unixd_module (static)
access_compat_module (shared)
alias_module (shared)
auth_basic_module (shared)
authn_core_module (shared)
authn_file_module (shared)
authz_core_module (shared)
authz_host_module (shared)
authz_user_module (shared)
autoindex_module (shared)
deflate_module (shared)
dir_module (shared)
env_module (shared)
filter_module (shared)
headers_module (shared)
http2_module (shared)
mime_module (shared)
mpm_event_module (shared)
negotiation_module (shared)
proxy_module (shared)
proxy_html_module (shared)
proxy_http_module (shared)
proxy_http2_module (shared)
reqtimeout_module (shared)
setenvif_module (shared)
status_module (shared)
xml2enc_module (shared)
Конфиг:
<VirtualHost *:80>
ServerAdmin root@server
DocumentRoot /var/www/html
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
<Location /miniflux>
ProxyPass http://10.0.0.2:39001/
ProxyPassReverse http://10.0.0.2:39001/
ProxyPreserveHost On
</Location>
</VirtualHost>
Домен - supersite.xyz (для примера). По адресу supersite.xyz/miniflux работает прокси на сервер с miniflux на порту 39001. Браузеру отдает страницу. Но тут у меня две проблемы:
Страница поломана полностью. Как будто css вообще нет или что-то вроде того.
Переход по ссылкам, который подразумевает получение информации с поддоменов сервера с вебней, отдает 404. Допустим, я логинюсь в минифлюкс, что должно меня вести к supersite.xyz/miniflux/login, а вместо этого браузеру отдается supersite.xyz/login.
Если включить ProxyHTML для виртуального хоста, который НЯП для решения таких задачи и предназначен,
ProxyHTMLEnable On
ProxyHTMLExtended On # или без расширения
то по адресу supersite.xyz/miniflux я получаю кучу статичных нечитаемых кракозябр без урлов и прочего.
Возможно, корень у обеих проблем общий. Как починить? Мапать вручную через ProxyHTMLURLMap все поддомены? Как-то делать видимым все содержимое /var/www/html на сервере для VPS? Решение нужно такое, чтобы апач мог проксировать к разным бэкэндам (серверам), т.е. кроме url/miniflux могут быть url/gitea, url/plex и т.д., причем по разным адресам.
Решил задокументировать, что как дома устроено, чтобы не забыть, когда настроил, работает и ты не вмешиваешься. Внести все сетевые устройства (роутеры, свичи), серверы, малинки, клиенты и прочее с описанием ролей, кто что делает, какие специфичные настройки использованы, где какие маршруты вручную внесены, что с чем соединяется, vpn, какие бекапы куда идут и вот это все. На бумаге вроде проще всего, но как только какие-то изменения, что тоже бывает, все это надо перерисовывать, оцифровывать. Неудобно в общем. Есть какой-то софт, где это быстро и с комфортом делать, и чтобы была возможность экспорта в какой-нибудь универсальный читаемый формат типо pdf/jpg/png/bmp? Софт для описания промышленных сетей, конечно, не надо, что-то попроще, типо soho, где 3-4 сегмента сети, 2-3 роутера, несколько серверов, failoverы, пара десятков клиентов. Желательно foss. Пробовал в libreoffice draw все это рисовать, как-то не пошло. Костыльно и неудобно добавлять пояснения. В cisco трейсере попробовал, там слишком перемудрено и нельзя нормально пояснения расписывать, чтобы их было видно в экспортированном документе.
Не могу отловить приложение, котрое меняет группу на директории на примонтированном хдд. Стабильно 5-6 раз в день получаю другую группу. Натравил в цикле lsof с минимальным таймаутом, за 3 с половиной дня никого не поймал. Уже пробовал g+s выдавать, но это не спасает, потому что что-то меняет целенаправленно только одну директорию, а созданные в ней файлы не трогает. Гугл меня оставил без идей. Мне надо чтобы в директорию могли писать, с нее могли читать, но группа должна быть строго определенная. В chattr вроде полезных опций для моего случая нет. SELinux/apparmor ставить не хотелось бы (не стоит оно того).
Из полезного, что выяснил, меняющее приложение или из под рута работает, или из под моего юзера, потому что у других прав менять директорию нет. Читаю сейчас доки про acl, пока не понятно, есть там что-то полезное или нет.
Как запретить менять группу и отловить джо?
P.S. В ro отправить не вариант, туда нужно писать.
Если кто использует plex и еще не видел рассылку, то коротко
Yesterday, we discovered suspicious activity on one of our databases. We immediately began an investigation and it does appear that a third-party was able to access a limited subset of data that includes emails, usernames, and encrypted passwords.
Rest assured that credit card and other payment data are not stored on our servers at all and were not vulnerable in this incident.
Long story short, we kindly request that you reset your Plex account password immediately. When doing so, there’s a checkbox to «Sign out connected devices after password change.»
Сходил, сбросил - https://app.plex.tv/auth/#?resetPassword
P.S. В блоге новость у них не увидел. Мб не успели написать. Пруф - https://0x0.st/o9Ii.57.png
P.P.S. Это plex слоупоки, получается. Новость была еще вчера - https://9to5mac.com/2022/08/24/plex-data-breach/ , а они только сегодня вечером начали рассылать предупреждения. Мда.
Команда
ffprobe -show_streams -show_entries "format:stream" -of flat -v quiet path_to_file
в терминале отрабатывает на 5. В питоне опять что-то не могу завести это все (уже хапнул горя с этим питоном и его странными вызовами внешних команд… надо было перл что-ли брать..?).
cmd = ["ffprobe",
"-show_streams",
"-show_entries",
"\"format:stream\"",
"-of",
"flat",
"-v",
"quiet",
"/path/to/file"]
ffprobe = subprocess.run(cmd, capture_output=True)
print(ffprobe)
Всегда пустой вывод. Если добавить shell=True, то показывает
You have to specify one input file.
Use -h to get full help or, even better, run 'man ffprobe'
Я уже и напрямую путь указывал, и PosixPath давал через pathlib, не кушает. Что не так? На том же СО куча примеров с ffmpeg и ffprobe в питоне, везде такое прокатывало. Глаз, наверное, замылился у меня, не вижу очевидное.
https://gist.github.com/hiwonjoon/035a1ead72a767add4b87afe03d0dd7b так тоже пробовал (функция get_video_info). Так же ошибка.
Почитал о современных стандартах и протоколах, но ответа для себя не нашел. Думаю, что не они эту задачу решают, но тем не менее… Допустим мы организуем частную сеть для доступа к какой-то инфраструктуре через $VPN_PROTOCOL. Допустим нет возможности организовать прямое подключение к серверу, который находится непосредственно внутри этой инфраструктуры, поэтому используем какой-то сторонний арендованный сервер/ставим стойку и т.д., которая не может находиться 24/7 под нашим контролем, и уже на нем организуем сервер с $VPN_PROTOCOL. Однако в таком случае сервер является точкой, где весь трафик может быть легко просмотрен. Можно использовать VPN over VPN и, например, в качестве верхнего слоя использовать быстрый и легкий wireguard, а внутри него пускать или тот же wireguard, или другой впн, при этом в качестве адреса пира/сервера использовать адрес доверенного сервера в верхнем слое впн. При этом конечно появляется оверхед, который приводит к падению скорости, отзывчивости, не говоря уже о том, что нужно держать всегда два поднятых соединения одновременно и разбираться с маршрутами.
Какие есть инструменты для решения такой задачи, как организация сети через недоверенный сервер, если другие способы (организация расположения доверенного сервера вне инфраструктуры) недоступна? То есть главный вопрос - как не дать недоверенному серверу возможность смотреть трафик между клиентами частной сети?
UPD. Клиент и сервер находятся за NAT. Клиент должен иметь возможность доступа не только к самому доверенному серверу, но и подсети за этим сервером (сам сервер является шлюзом в локалке).
следующие → |